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
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,*