From 7e5149d7f55f6773179f2c06aa9511bedab6c9f4 Mon Sep 17 00:00:00 2001 From: karri Date: Tue, 11 Dec 2012 12:33:50 +0000 Subject: [PATCH] Add basic sound support git-svn-id: svn://svn.cc65.org/cc65/trunk@5947 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/lynx/lynx-snd.s | 124 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 libsrc/lynx/lynx-snd.s diff --git a/libsrc/lynx/lynx-snd.s b/libsrc/lynx/lynx-snd.s new file mode 100644 index 000000000..1a276f543 --- /dev/null +++ b/libsrc/lynx/lynx-snd.s @@ -0,0 +1,124 @@ +; +; Sound driver for the Atari Lynx. +; +; Karri Kaksonen and Bjoern Spruck, 11.12.2012 +; + + .include "lynx.inc" + .include "zeropage.inc" + + .export _lynx_snd_init + +;---------------------------------------------------------------------------- +; ZP variables that go into APPZP +; + + .segment "APPZP" : zeropage + +SndSema: .res 1 +SndPtrTmp: .res 2 +SndTmp: .res 2 +SndEnvPtr: .res 2 + +;---------------------------------------------------------------------------- +; Global variables +; + + .bss + +SndRetAFlag2: .res 1 +SndRetAFlag: .res 1 +SndPtrLo: .res 4 +SndPtrHi: .res 4 +SndDelay: .res 4 +SndLoopCnt: .res 4 +SndLoopPtrLo: .res 4 +SndLoopPtrHi: .res 4 +SndVolume: .res 4 +SndMaxVolume: .res 4 +SndNotePlaying: .res 4 +SndRetAddr: .res 8 +SndActive: .res 4 +SndReqStop: .res 4 +SndEnvVol: .res 4 +SndEnvFrq: .res 4 +SndEnvWave: .res 4 +SndChannel: .res 32 +SndEnvVolCnt: .res 4 +SndEnvVolInc: .res 4 +SndEnvVolOff: .res 4 +SndEnvVolLoop: .res 4 +SndEnvVolParts: .res 4 +SndEnvVolParts2: .res 4 +SndEnvFrqCnt: .res 4 +SndEnvFrqInc: .res 4 +SndEnvFrqOff: .res 4 +SndEnvFrqLoop: .res 4 +SndEnvFrqParts: .res 4 +SndEnvFrqParts2: .res 4 +SndEnvWaveCnt: .res 4 +SndEnvWaveOff: .res 4 +SndEnvWaveLoop: .res 4 +SndEnvWaveParts: .res 4 +SndEnvWaveParts2: .res 4 + +MAX_INSTRUMENTS .set 64 +SndEnvVolPtrLo: .res MAX_INSTRUMENTS +SndEnvVolPtrHi: .res MAX_INSTRUMENTS +SndEnvFrqPtrLo: .res MAX_INSTRUMENTS +SndEnvFrqPtrHi: .res MAX_INSTRUMENTS +SndEnvWavePtrLo: .res MAX_INSTRUMENTS +SndEnvWavePtrHi: .res MAX_INSTRUMENTS + + .rodata + +SndOffsets: .byte $00,$08,$10,$18 + + .code + +;---------------------------------------------------------------------------- +; void lynx_snd_init() will initialize the sound engine. +; + +_31250Hz .set %101 + +_lynx_snd_init: + php + sei + lda #%10011000|_31250Hz + sta STIMCTLA + lda #129 + sta STIMBKUP ; set up a 240Hz IRQ + + stz AUD0VOL + stz AUD1VOL + stz AUD2VOL + stz AUD3VOL + + stz $fd44 ; all channels full volume / no attenuation + lda #$ff + stz MSTEREO + + lda #0 + sta AUD0CTLA + sta AUD1CTLA + sta AUD2CTLA + sta AUD3CTLA + + ldx #3 + lda #0 +init0: stz SndActive,x + stz SndReqStop,x + stz SndEnvVol,x + stz SndEnvFrq,x + stz SndEnvWave,x + ldy SndOffsets,x + sta SndChannel+2,y + dex + bpl init0 + stz SndRetAFlag + stz SndRetAFlag2 + stz SndSema + plp + rts + -- 2.39.5