7e5149d7f5
git-svn-id: svn://svn.cc65.org/cc65/trunk@5947 b7a2c559-68d2-44c3-8de9-860c34a00d81
124 lines
2.2 KiB
ArmAsm
124 lines
2.2 KiB
ArmAsm
;
|
|
; 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
|
|
|