initial commit
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
; -----------------------------------------------------------
|
||||
; sound.asm - single-voice SFX driver: each effect is a
|
||||
; waveform + start pitch + per-frame pitch slide + duration,
|
||||
; played on SID voice 1 (sustain 0, the decay shapes it)
|
||||
; -----------------------------------------------------------
|
||||
|
||||
sfx_init:
|
||||
lda #$0f ; full volume, no filter
|
||||
sta SID_VOL
|
||||
lda #0
|
||||
sta SID_V1CR
|
||||
sta sfx_timer
|
||||
rts
|
||||
|
||||
; ---- start effect A ----
|
||||
sfx_play:
|
||||
tax
|
||||
lda #0
|
||||
sta SID_V1CR ; retrigger the envelope cleanly
|
||||
lda sfxad,x
|
||||
sta SID_V1AD
|
||||
lda #0
|
||||
sta SID_V1SR
|
||||
sta SID_V1FL
|
||||
lda sfxfreq,x
|
||||
sta SID_V1FH
|
||||
sta sfx_fh
|
||||
lda #$08 ; 50% pulse width, if a pulse wave is used
|
||||
sta SID_V1PH
|
||||
lda #0
|
||||
sta SID_V1PL
|
||||
lda sfxctrl,x
|
||||
sta SID_V1CR
|
||||
sta sfx_ctrl
|
||||
lda sfxslide,x
|
||||
sta sfx_slide
|
||||
lda sfxdur,x
|
||||
sta sfx_timer
|
||||
rts
|
||||
|
||||
; ---- called once per frame by the main loop ----
|
||||
sfx_update:
|
||||
lda sfx_timer
|
||||
beq su_idle
|
||||
dec sfx_timer
|
||||
bne su_slide
|
||||
lda sfx_ctrl ; time is up: gate off
|
||||
and #$fe
|
||||
sta SID_V1CR
|
||||
rts
|
||||
su_slide:
|
||||
lda sfx_fh ; bend the pitch by the slide value
|
||||
clc
|
||||
adc sfx_slide
|
||||
sta sfx_fh
|
||||
sta SID_V1FH
|
||||
su_idle:
|
||||
rts
|
||||
|
||||
; ---- effect tables: cursor, select, rotate, deny, win, lose ----
|
||||
sfxfreq: !byte $50, $20, $12, $06, $20, $38
|
||||
sfxslide: !byte $00, $04, $fe, $00, $02, $ff
|
||||
sfxctrl: !byte $11, $21, $81, $21, $11, $21
|
||||
sfxad: !byte $06, $08, $08, $08, $0a, $0a
|
||||
sfxdur: !byte $04, $0a, $08, $0c, $28, $30
|
||||
|
||||
; ---- driver variables ----
|
||||
sfx_timer: !byte 0 ; frames left of the current effect
|
||||
sfx_fh: !byte 0 ; frequency high byte shadow
|
||||
sfx_slide: !byte 0 ; signed per-frame pitch step
|
||||
sfx_ctrl: !byte 0 ; control register shadow
|
||||
Reference in New Issue
Block a user