org $d000
;-------+-------+-------+-------+-------+
main proc
local L1,L2
call genpat
call inipcg
call inisnd
L1:
in a, ($40)
and $20
jp nz, L1
L2:
in a, ($40)
and $20
jp z, L2
call play
call input
call putobj
jp L1
endp
;-------+-------+-------+-------+-------+
; パターン生成
genpat proc
local L1,L2
ld ix, cannon
ld de, 16
ld c, 7
L1:
ld b, 8
L2:
ld a, (ix+0)
srl a
ld (ix+24), a
ld a, (ix+8)
rra
ld (ix+32), a
ld a, (ix+16)
rra
ld (ix+40), a
inc ix
djnz L2
add ix, de
dec c
jp nz, L1
ret
endp
;-------+-------+-------+-------+-------+
; PCG初期化
inipcg proc
local L1
ld c, 0
ld b, 8*5
L1:
xor a
out ($00), a
ld a, c
out ($01), a
ld a, $10
out ($02), a
ld a, $00
out ($02), a
inc c
djnz L1
ret
endp
;-------+-------+-------+-------+-------+
inisnd proc
ld a, 1
ld (tick), a
ld hl, data
ld (p_data), hl
ld a, $36
out ($0f), a
ret
endp
;-------+-------+-------+-------+-------+
input proc
local L1,L2
in a, ($00)
ld c, a
ld a, (posx)
bit 4, c
jp nz, L1
dec a
L1:
bit 6, c
jp nz, L2
inc a
L2:
ld (posx), a
ret
endp
;-------+-------+-------+-------+-------+
; オブジェクト配置
putobj proc
local L1,L2
ld a, (posx)
rra
rra
and $3e ; x = posx >> 3
ld b, 0
ld c, a
ld hl, $f300+120*12
add hl, bc ; hl = $f300 + 120*y + 2*x
ld a, $80
ld b, 5
L1:
ld (hl), a
inc hl
inc hl
inc a
djnz L1
ld a, (posx)
and $07 ; u = posx & $07
add a, a
add a, a
add a, a
ld c, a
add a, a
add a, c
ld b, 0
ld c, a
ld hl, cannon
add hl, bc ; hl = cannon + 24 * u
ld c, 8
ld b, 8*3
L2:
ld a, (hl)
out ($00), a
ld a, c
out ($01), a
ld a, $18
out ($02), a
ld a, $08
out ($02), a
inc hl
inc c
djnz L2
ret
endp
;-------+-------+-------+-------+-------+
play proc
local L1,L2,L3,EXIT
ld a, (tick)
dec a
jp nz, L3
; tickが0ならdata処理
ld hl, (p_data)
L1:
ld e, (hl) ; 音番号
inc hl
ld a, e
cp $ff
jp nz, L2
; 音番号が$ffなら先頭に戻る
ld hl, data
jp L1
L2:
ld (p_data), hl
ld a, 6
ld (tick), a
ld a, e
add a, a
ld h, 0
ld l, a
ld de, tone
add hl, de ; hl = tone + 2 * 音番号
ld c, $0c
outi
outi
; ld a, $08
; out ($02), a
jp EXIT
L3:
ld (tick), a
EXIT:
ret
endp
;-------+-------+-------+-------+-------+
posx db 128
tick ds 1
p_data ds 2
; C C# D D# E F F# G G# A A# B
tone dw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
dw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
dw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
dw 15289,14431,13621,12857,12135,11454,10811,10204, 9631, 9091, 8581, 8099
dw 7645, 7215, 6810, 6428, 6067, 5727, 5405, 5102, 4816, 4545, 4290, 4050
dw 3822, 3608, 3405, 3214, 3034, 2863, 2703, 2551, 2408, 2273, 2145, 2025
; 音番号
data db 48,60,59,60,64,60,59,60
db 48,60,58,60,64,60,58,60
db 48,60,57,60,64,60,57,60
db 48,60,56,60,64,60,58,60
db $ff
cannon db $02,$07,$07,$7f,$ff,$ff,$ff,$ff
db $00,$00,$00,$f0,$f8,$f8,$f8,$f8
db $00,$00,$00,$00,$00,$00,$00,$00
ds 24*7