開発環境
- 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