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,*
 
最終更新:2019年11月22日 11:33
添付ファイル