This commit is contained in:
Zsolt Tasnadi
2026-07-14 08:51:00 +02:00
parent 545e9153f2
commit 3714247dc2
3 changed files with 118 additions and 0 deletions
+83
View File
@@ -0,0 +1,83 @@
; -----------------------------------------------------------
; music.asm - SID music driver skeleton
; called once per frame from wait_frame
; music_init: clear SID registers
; music_play: placeholder (currently silent)
; music_mute / music_unmute: volume control
;
; To add music: replace music_play with a real SID player
; routine (e.g. GoatTracker export), or write patterns into
; this file using the SID register definitions below.
; -----------------------------------------------------------
; ---- SID registers ----
SID_BASE = $d400
SID_V1_FL = SID_BASE+0 ; voice 1 frequency low
SID_V1_FH = SID_BASE+1 ; voice 1 frequency high
SID_V1_PL = SID_BASE+2 ; voice 1 pulse width low
SID_V1_PH = SID_BASE+3 ; voice 1 pulse width high
SID_V1_CR = SID_BASE+4 ; voice 1 control (gate, waveform)
SID_V1_AD = SID_BASE+5 ; voice 1 attack/decay
SID_V1_SR = SID_BASE+6 ; voice 1 sustain/release
SID_V2_FL = SID_BASE+7 ; voice 2 frequency low
SID_V2_FH = SID_BASE+8 ; voice 2 frequency high
SID_V2_PL = SID_BASE+9 ; voice 2 pulse width low
SID_V2_PH = SID_BASE+10 ; voice 2 pulse width high
SID_V2_CR = SID_BASE+11 ; voice 2 control
SID_V2_AD = SID_BASE+12 ; voice 2 attack/decay
SID_V2_SR = SID_BASE+13 ; voice 2 sustain/release
SID_V3_FL = SID_BASE+14 ; voice 3 frequency low
SID_V3_FH = SID_BASE+15 ; voice 3 frequency high
SID_V3_PL = SID_BASE+16 ; voice 3 pulse width low
SID_V3_PH = SID_BASE+17 ; voice 3 pulse width high
SID_V3_CR = SID_BASE+18 ; voice 3 control
SID_V3_AD = SID_BASE+19 ; voice 3 attack/decay
SID_V3_SR = SID_BASE+20 ; voice 3 sustain/release
SID_FC_LO = SID_BASE+21 ; filter cutoff low (bits 0-2)
SID_FC_HI = SID_BASE+22 ; filter cutoff high
SID_FCTL = SID_BASE+23 ; filter resonance + voice routing
SID_VOL = SID_BASE+24 ; filter mode (hi nibble) + master volume (lo nibble)
; ---- initialize SID ----
music_init:
ldx #24
lda #0
mi_clr:
sta SID_BASE,x
dex
bpl mi_clr
lda #$0f ; master volume = 15
sta SID_VOL
lda #0
sta mus_muted
rts
; ---- play one tick: called once per frame ----
; Replace this with a real music player routine.
music_play:
lda mus_muted
bne mp_silent
; --- insert SID player call here ---
mp_silent:
rts
; ---- mute: silence SID ----
music_mute:
lda #$00
sta SID_VOL
rts
; ---- unmute: restore volume ----
music_unmute:
lda #$0f
sta SID_VOL
rts
; ---- state ----
mus_muted: !byte 0 ; 1 = muted