1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-28 03:29:39 +00:00
cc65/libsrc/lynx/lynx-snd.s

125 lines
2.2 KiB
ArmAsm
Raw Normal View History

;
; 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