;asm6 snddrv.asm snddrv.nes
seqidx equ $00
tick equ $01
; iNES header
db "NES", $1a
db $01 ; PRG-ROM
db $01 ; CHR-ROM
db $00 ; mapper / mirroring
dsb 9, $00
base $c000
Reset:
lda #$01
sta $4015 ; 音声チャンネル制御レジスタ
lda #$68
; lda #$b8
sta $4000 ; 矩形波CH1制御レジスタ1
lda #$00
sta $4001 ; 矩形波CH1制御レジスタ2
lda #0
sta seqidx
lda #1
sta tick
lda #$88
sta $2000 ; PPU制御レジスタ1
lda #$00
sta $2001 ; PPU制御レジスタ2
-
jmp -
VBlank:
dec tick
beq +
rti
+
ldx seqidx
-
lda sequence, x ; 音番号
cmp #$ff
bne +
ldx #0
stx seqidx
jmp -
+
inc seqidx
sec
sbc #60
asl
tax
lda note_tbl, x
sta $4002 ; 矩形波CH1周波数値レジスタ1
lda note_tbl+1, x
sta $4003 ; 矩形波CH1周波数値レジスタ2
ldx seqidx
lda sequence, x ; 音長
sta tick
inc seqidx
rti
note_tbl:
dw $1ab, $193, $17c, $167, $152, $13f, $12d, $11c, $10c, $fd, $ef, $e1
dw $d5
sequence:
db 60,15, 62,15, 64,15, 65,15, 67,15, 69,15, 71,15, 72,15, $ff
; db 60,12, 62,12, 64,48, 65,12, 64,12, 62,12, 60,12, 64,72, $ff
org $fffa
dw VBlank ; NMI VBlank
dw Reset
dw 0 ; IRQ/BRK
incbin "dummy.chr"
;asm6 snddrv2.asm snddrv2.nes
seqidx1 equ $00
seqidx2 equ $01
tick1 equ $02
tick2 equ $03
notemin equ #46
; iNES header
db "NES", $1a
db $01 ; PRG-ROM
db $01 ; CHR-ROM
db $00 ; mapper / mirroring
dsb 9, $00
base $c000
Reset:
lda #$03
sta $4015 ; 音声チャンネル制御レジスタ
lda #$b8
sta $4000 ; 矩形波CH1制御レジスタ1
lda #$00
sta $4001 ; 矩形波CH1制御レジスタ2
lda #$b8
sta $4004 ; 矩形波CH2制御レジスタ1
lda #$00
sta $4005 ; 矩形波CH2制御レジスタ2
lda #0
sta seqidx1
sta seqidx2
lda #1
sta tick1
sta tick2
lda #$88
sta $2000 ; PPU制御レジスタ1
lda #$00
sta $2001 ; PPU制御レジスタ2
-
jmp -
VBlank:
dec tick1
bne exit1
ldx seqidx1
-
lda sequence1, x ; 音番号
cmp #$ff
bne +
ldx #0
stx seqidx1
jmp -
+
inc seqidx1
cmp #0
beq +
sec
sbc notemin
asl
+
tax
lda note_tbl, x
sta $4002 ; 矩形波CH1周波数値レジスタ1
lda note_tbl+1, x
sta $4003 ; 矩形波CH1周波数値レジスタ2
ldx seqidx1
lda sequence1, x ; 音長
sta tick1
inc seqidx1
exit1:
dec tick2
bne exit2
ldx seqidx2
-
lda sequence2, x ; 音番号
cmp #$ff
bne +
ldx #0
stx seqidx2
jmp -
+
inc seqidx2
cmp #0
beq +
sec
sbc notemin
asl
+
tax
lda note_tbl, x
sta $4006 ; 矩形波CH2周波数値レジスタ1
lda note_tbl+1, x
sta $4007 ; 矩形波CH2周波数値レジスタ2
ldx seqidx2
lda sequence2, x ; 音長
sta tick2
inc seqidx2
exit2:
rti
note_tbl:
dw 0 ; 休符
dw $389 ; B2(47)
dw $356, $326, $2f9, $2ce, $2a6, $280, $25c, $23a, $21a, $1fb, $1df, $1c4
dw $1ab, $193, $17c, $167, $152, $13f, $12d, $11c, $10c, $fd, $ef, $e1
dw $d5, $c9, $bd, $b3, $a9, $9f, $96, $8e, $86, $7e, $77, $70
sequence1:
db 74,30, 81,30, 79,90, 77,15, 76,15, 74,30, 72,15, 70,15
db 72,15, 69,15, 76,30, 74,120, 0,60, $ff
sequence2:
db 50,15, 57,15, 53,15, 57,15, 50,15, 59,15, 55,15, 59,15
db 50,15, 60,15, 57,15, 60,15, 50,15, 58,15, 53,15, 58,15
db 52,15, 60,15, 57,15, 60,15, 50,15, 57,15, 54,15, 57,15
db 50,15, 57,15, 54,15, 57,15, 47,15, 57,15, 49,15, 57,15, $ff
org $fffa
dw VBlank ; NMI VBlank
dw Reset
dw 0 ; IRQ/BRK
incbin "dummy.chr"