開発環境

  • Windows 10 Home (64bit)
  • ASM6

ソース

dummy.chr

>fsutil file createNew dummy.chr 8192

spell.asm

playing	equ	$00
seqidx	equ	$01
tick	equ	$02
 
	; iNES header
	db	"NES", $1a
	db	$01	; PRG-ROM
	db	$01	; CHR-ROM
	db	$00	; mapper / mirroring
	dsb	9, $00
 
	base	$c000
Reset:
	lda	#$00
	sta	playing
 
	lda	#$88
	sta	$2000	; PPU制御レジスタ1
	lda	#$00
	sta	$2001
-
	jmp	-
 
VBlank:
	lda	playing
	bne	play
			; Aボタンチェック
	lda	#$01
	sta	$4016	; ジョイパッド1レジスタ
	lda	#$00
	sta	$4016
	lda	$4016
	and	#$01
	bne	+
	rti
+			; 演奏開始
	lda	#$01
	sta	$4015	; 音声チャンネル制御レジスタ
;	lda	#$b8
;	sta	$4000	; 矩形波CH1制御レジスタ1
	lda	#$00
	sta	$4001
	lda	#$01
	sta	playing
	lda	#$00
	sta	seqidx
	lda	#$01
	sta	tick
play:
	dec	tick
	beq	+
			; duty比変更
	ldx	tick
	lda	duty_tbl-1, x
	sta	$4000	; 矩形波CH1制御レジスタ1
	rti
+			; シーケンス処理
	ldx	seqidx
	lda	sequence, x	; 音番号
	cmp	#$ff
	bne	+
			; 演奏終了
	lda	#$00
	sta	$4015	; 音声チャンネル制御レジスタ
	lda	#$00
	sta	playing
	rti
+
	inc	seqidx
	sec
	sbc	#72
	asl
	tax
	lda	duty_tbl
	sta	$4000	; 矩形波CH1制御レジスタ1
	lda	note_tbl, x
	sta	$4002	; 矩形波CH1周波数値レジスタ1
	lda	note_tbl+1, x
	sta	$4003
 
	ldx	seqidx
	lda	sequence, x	; 音長
	sta	tick
	inc	seqidx
	rti
 
note_tbl:
	dw	$d5, $c9, $bd, $b3, $a9, $9f, $96, $8e, $86, $7e, $77, $70
duty_tbl:
	db	$b8, $78, $38, $b8, $78, $38
sequence:
	db	72,6, 75,6, 73,6, 76,6, 74,6, 77,6, 78,6, $ff
 
	org	$fffa
	dw	VBlank	; NMI VBlank
	dw	Reset
	dw	0	; IRQ/BRK
 
	incbin	"dummy.chr"
 

build.bat

@echo off
path C:\etc\asm6;%path%
set filename=spell
 
asm6 %filename%.asm %filename%.nes
if errorlevel 1 goto ERROR
 
C:\etc\nj051b_ja\nesterJ.exe %filename%.nes
goto END
 
:ERROR
pause
:END
 
最終更新:2020年12月21日 21:38