CMTファイル xevi.zip

mon
*L
*GD000

org	$d000
 
	call	init
L1:
	in	a, ($40)
	and	$20
	jp	nz, L1
L2:
	in	a, ($40)
	and	$20
	jp	z, L2
 
	call	play
	jp	L1
 
;-------+-------+-------+-------+-------+
 
init	proc
	ld	a, $0c
	ld	(param1+0), a
	ld	hl, data1
	ld	(param1+1), hl
	ld	(param1+3), hl
	ld	a, 1
	ld	(param1+5), a
 
	ld	a, $0d
	ld	(param2+0), a
	ld	hl, data2
	ld	(param2+1), hl
	ld	(param2+3), hl
	ld	a, 1
	ld	(param2+5), a
 
	ld	a, $0e
	ld	(param3+0), a
	ld	hl, data3
	ld	(param3+1), hl
	ld	(param3+3), hl
	ld	a, 1
	ld	(param3+5), a
 
	ld	c, $0f
	ld	a, $36
	out	(c), a
	ld	a, $76
	out	(c), a
	ld	a, $b6
	out	(c), a
	ld	a, $c8
	out	($02), a
	ret
	endp
 
;-------+-------+-------+-------+-------+
 
play	proc
	ld	ix, param1
	call	playch
	ld	ix, param2
	call	playch
	ld	ix, param3
	call	playch
	ret
	endp
 
;-------+-------+-------+-------+-------+
 
playch	proc
	local	L1,L2,L3,EXIT
 
	ld	a, (ix+5)
	dec	a
	jp	nz, L3
				; tickが0ならdata処理
	ld	l, (ix+3)
	ld	h, (ix+4)
L1:
	ld	e, (hl)		; 音番号
	inc	hl
	ld	a, (hl)		; 音長
	inc	hl
	cp	$ff
	jp	nz, L2
				; 音長が$ffなら先頭に戻る
	ld	l, (ix+1)
	ld	h, (ix+2)
	jp	L1
L2:
	ld	(ix+3), l
	ld	(ix+4), h
	ld	(ix+5), a
	ld	a, e
	add	a, a
	ld	h, 0
	ld	l, a
	ld	de, tone
	add	hl, de		; hl = tone + 2 * 音番号
 
	ld	c, (ix+0)
	outi
	outi
	jp	EXIT
L3:
	ld	(ix+5), a
	cp	2
	jp	nz, EXIT
				; tickがxならnote off
	ld	c, (ix+0)
	xor	a
	out	(c), a
	out	(c), a
 
EXIT:
	ret
	endp
 
;-------+-------+-------+-------+-------+
 
; +0 出力ポート番号
; +1 元のdataアドレス
; +3 次のdataアドレス
; +5 tick
param1	ds	6
param2	ds	6
param3	ds	6
 
;		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,64793 ; O1
	dw	61156,57724,54484,51426,48540,45815,43244,40817,38526,36364,34323,32396 ; O2
	dw	30578,28862,27242,25713,24270,22908,21622,20408,19263,18182,17161,16198 ; O3
	dw	15289,14431,13621,12857,12135,11454,10811,10204, 9631, 9091, 8581, 8099 ; O4
	dw	 7645, 7215, 6810, 6428, 6067, 5727, 5405, 5102, 4816, 4545, 4290, 4050 ; O5
	dw	 3822, 3608, 3405, 3214, 3034, 2863, 2703, 2551, 2408, 2273, 2145, 2025 ; O6
 
;		音番号,音長
data1	db	53,24, 0,16, 48,8, 53,8, 57,8, 60,8, 57,8, 0,8, 53,8
	db	55,8, 0,8, 55,8, 55,8, 0,8, 50,8+8, 0,8, 55,8, 53,8, 0,8, 52,8
	db	53,24, 0,16, 48,8, 53,8, 57,8, 60,8, 57,8, 0,8, 53,8
	db	54,8, 0,8, 54,8, 54,8, 0,8, 53,8+48
	db	$ff,$ff
data2	db	45,24, 0,16, 45,8, 45,8, 48,8, 53,8, 48,8, 0,8, 45,8
	db	46,8, 0,8, 46,8, 46,8, 0,8, 46,8+8, 0,8, 46,8, 46,8, 0,8, 46,8
	db	45,24, 0,16, 45,8, 45,8, 45,8, 45,8, 45,8, 0,8, 45,8
	db	46,8, 0,8, 46,8, 46,8, 0,8, 45,8+48
	db	$ff,$ff
data3	db	29,8, 29,8, 29,8, 29,8, 0,16, 29,8, 29,8, 29,8, 29,8, 0,16
	db	29,8, 29,8, 29,8, 29,8, 0,16, 29,8, 29,8, 29,8, 29,8, 0,16
	db	29,8, 29,8, 29,8, 29,8, 0,16, 29,8, 29,8, 29,8, 29,8, 0,16
	db	29,8, 29,8, 29,8, 29,8, 0,8, 29,8, 0,48
	db	$ff,$ff
 
最終更新:2019年10月30日 13:21
添付ファイル