mirror of
https://github.com/bobbimanners/Applecorn.git
synced 2024-09-26 09:54:29 +00:00
More untested Ensoniq audio code.
This commit is contained in:
parent
ad8693244a
commit
75e0df40ea
@ -133,10 +133,45 @@ WORD08
|
|||||||
|
|
||||||
|
|
||||||
* Called from Ensoniq interrupt handler - process audio queue
|
* Called from Ensoniq interrupt handler - process audio queue
|
||||||
*
|
* Called at 100Hz
|
||||||
ENSQIRQ
|
ENSQIRQ INC COUNTER ; Increment centisecond timer
|
||||||
* TODO: IMPLEMENT THIS!!!
|
INC :CNT ; Find every 5th cycle
|
||||||
RTS
|
CMP #5
|
||||||
|
BNE :NOT20HZ
|
||||||
|
STZ :CNT
|
||||||
|
LDX #3 ; Process four audio queues
|
||||||
|
:L1 LDA OSCTIMES,X ; Time remaining on current note
|
||||||
|
BEQ :NONOTE ; No note playing
|
||||||
|
DEC OSCTIMES,X
|
||||||
|
BRA :NOTE
|
||||||
|
:NONOTE LDY #$00 ; Zero volume
|
||||||
|
LDA #$00 ; Zero freq
|
||||||
|
JSR ENSQNOTE ; Silence channel Y
|
||||||
|
:NOTE CLV ; Means remove from queue
|
||||||
|
JSR REMHND ; Remove byte from queue
|
||||||
|
BCS :EMPTY ; Nothing in queue
|
||||||
|
PHY ; Amplitude
|
||||||
|
JSR REMHND ; Remove byte from queue
|
||||||
|
PHY ; Frequency
|
||||||
|
JSR REMHND ; Remove byte from queue
|
||||||
|
TYA ; Duration
|
||||||
|
STA OSCTIMES,X
|
||||||
|
PLA ; Recover frequency
|
||||||
|
PLY ; Recover amplitude
|
||||||
|
JSR ENSQNOTE ; Start note playing
|
||||||
|
:EMPTY DEX
|
||||||
|
BNE :L1 ; Next audio queue
|
||||||
|
:NOT20HZ
|
||||||
|
* TODO: Envelope processing on all cycles (AT 100Hz)
|
||||||
|
:RTS RTS
|
||||||
|
:CNT DB $00 ; Used to determine 20Hz cycles
|
||||||
|
COUNTER DW $0000 ; Centisecond counter
|
||||||
|
|
||||||
|
* Time remaining for current note, in 1/20th of second
|
||||||
|
OSCTIMES DB $00
|
||||||
|
DB $00
|
||||||
|
DB $00
|
||||||
|
DB $00
|
||||||
|
|
||||||
|
|
||||||
* Initialize Ensoniq
|
* Initialize Ensoniq
|
||||||
@ -167,21 +202,25 @@ ENSQINIT LDA ENSQSNDCTL ; Get settings
|
|||||||
LDX #$E1 ; DOC Osc Enable register $E1
|
LDX #$E1 ; DOC Osc Enable register $E1
|
||||||
LDY #8 ; Four oscillators enabled
|
LDY #8 ; Four oscillators enabled
|
||||||
JSR ENSQWRTDOC
|
JSR ENSQWRTDOC
|
||||||
LDX #$00 ; Amplitude
|
; Fall through
|
||||||
|
* Silence all channels
|
||||||
|
ENSQSILENT LDY #$00 ; Amplitude
|
||||||
LDA #$80 ; Frequency
|
LDA #$80 ; Frequency
|
||||||
LDY #$03
|
LDX #$03
|
||||||
:L3 JSR ENSQOSCIL ; Initialize channel Y
|
:L1 JSR ENSQNOTE ; Initialize channel Y
|
||||||
DEY
|
STZ OSCTIMES,X ; No note playing
|
||||||
BPL :L3
|
DEX
|
||||||
|
BPL :L1
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
|
||||||
* Configure Ensoniq oscillator
|
* Configure Ensoniq oscillator
|
||||||
* On entry: Y - oscillator number 0-3 , A - frequency, X - amplitude
|
* On entry: X - oscillator number 0-3 , A - frequency, Y - amplitude
|
||||||
* Preserves all registers
|
* Preserves all registers
|
||||||
* TODO: ALWAYS USES OSCILLATOR CHANNEL 0 FOR NOW
|
* TODO: ALWAYS USES OSCILLATOR CHANNEL 0 FOR NOW
|
||||||
ENSQOSCIL PHA
|
ENSQNOTE PHA
|
||||||
PHY
|
|
||||||
PHX
|
PHX
|
||||||
|
PHY
|
||||||
LDX #$00 ; DOC register $00 (Freq Lo)
|
LDX #$00 ; DOC register $00 (Freq Lo)
|
||||||
TAY ; Frequency value LS byte
|
TAY ; Frequency value LS byte
|
||||||
JSR ENSQWRTDOC
|
JSR ENSQWRTDOC
|
||||||
@ -189,7 +228,7 @@ ENSQOSCIL PHA
|
|||||||
LDY #$00 ; Frequency value MS byte
|
LDY #$00 ; Frequency value MS byte
|
||||||
JSR ENSQWRTDOC
|
JSR ENSQWRTDOC
|
||||||
LDX #$40 ; DOC register $40 (Volume)
|
LDX #$40 ; DOC register $40 (Volume)
|
||||||
PLY ; Frequency value orig in X
|
PLY ; Amplitude value
|
||||||
PHY
|
PHY
|
||||||
JSR ENSQWRTDOC
|
JSR ENSQWRTDOC
|
||||||
LDX #$80 ; DOC register $80 (Wavetable)
|
LDX #$80 ; DOC register $80 (Wavetable)
|
||||||
@ -201,8 +240,8 @@ ENSQOSCIL PHA
|
|||||||
LDX #$C0 ; DOC register $C0 (WT size)
|
LDX #$C0 ; DOC register $C0 (WT size)
|
||||||
LDY #$00 ; For 256 byte wavetable
|
LDY #$00 ; For 256 byte wavetable
|
||||||
JSR ENSQWRTDOC
|
JSR ENSQWRTDOC
|
||||||
PLX
|
|
||||||
PLY
|
PLY
|
||||||
|
PLX
|
||||||
PLA
|
PLA
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user