#image(vswap.png) #highlight(asm){{ org $d000 start proc local L1 call init L1: call vswap call draw jp L1 endp ;-------+-------+-------+-------+-------+ init proc local param ; ファンクションキー表示スイッチ xor a ld ($ea60), a ; WIDTHの設定 ld hl, param call $0843 ; カーソル off call $0bd2 ; VRAMコピー ld hl, $f300 ld (vram), hl ld de, $dd00 ld bc, 3000 ldir ld a, $40 ld (data), a ret param db '80,25', 0 endp ;-------+-------+-------+-------+-------+ vswap proc local L1,L2 ; VBlank待ち L1: in a, ($40) and $20 jr nz, L1 L2: in a, ($40) and $20 jr z, L2 ; DMACアドレス ld hl, (vram) ld c, $64 out (c), l out (c), h ; 比較用 ld a, (data) cp $48 ret nc ; $f300/$dd00 ld a, h xor $2e ld (vram+1), a ret endp ;-------+-------+-------+-------+-------+ draw proc local L1,L2,L3 ld hl, (vram) ld a, (data) ld c, 25 L1: ld b, 80 L2: ld (hl), a inc hl ; wait ld e, 40 L3: dec e jp nz, L3 djnz L2 ld de, 120-80 add hl, de dec c jp nz, L1 inc a and $4f ld (data), a ret endp ;-------+-------+-------+-------+-------+ vram ds 2 data ds 1 }} #highlight(bas){{ 10 defint a-z 20 p=&hd000:def usr=p 30 read d$:if d$<>"*" then poke p,val("&h"+d$):p=p+1:goto 30 40 a=usr(0) 1000 data CD,0C,D0,CD,33,D0,CD,55,D0,C3,03,D0,AF,32,60,EA 1010 data 21,2D,D0,CD,43,08,CD,D2,0B,21,00,F3,22,78,D0,11 1020 data 00,DD,01,B8,0B,ED,B0,3E,40,32,7A,D0,C9,38,30,2C 1030 data 32,35,00,DB,40,E6,20,20,FA,DB,40,E6,20,28,FA,2A 1040 data 78,D0,0E,64,ED,69,ED,61,3A,7A,D0,FE,48,D0,7C,EE 1050 data 2E,32,79,D0,C9,2A,78,D0,3A,7A,D0,0E,19,06,50,77 1060 data 23,1E,28,1D,C2,63,D0,10,F6,11,28,00,19,0D,C2,5D 1070 data D0,3C,E6,4F,32,7A,D0,C9,* }}