]> git.sur5r.net Git - cc65/commitdiff
Add basic sound support
authorkarri <karri@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 11 Dec 2012 12:33:50 +0000 (12:33 +0000)
committerkarri <karri@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 11 Dec 2012 12:33:50 +0000 (12:33 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5947 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/lynx/lynx-snd.s [new file with mode: 0644]

diff --git a/libsrc/lynx/lynx-snd.s b/libsrc/lynx/lynx-snd.s
new file mode 100644 (file)
index 0000000..1a276f5
--- /dev/null
@@ -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
+