Mockingboard code complete / doesn't work yet.

This commit is contained in:
Bobbi Webber-Manners 2022-11-18 23:58:53 -05:00
parent ca404e2697
commit 77b47d5386
4 changed files with 32 additions and 16 deletions

Binary file not shown.

View File

@ -514,7 +514,7 @@ CHECK4BYTES PHX
* On entry: X - oscillator number 0-3 , A - frequency, Y - amplitude * On entry: X - oscillator number 0-3 , A - frequency, Y - amplitude
* Preserves all registers * Preserves all registers
AUDIONOTE AUDIONOTE
* JMP ENSQNOTE JMP ENSQNOTE
* JMP MOCKNOTE * JMP MOCKNOTE
RTS RTS
@ -523,7 +523,7 @@ AUDIONOTE
* On entry: X - oscillator number 0-3 , Y - frequency to set * On entry: X - oscillator number 0-3 , Y - frequency to set
* Preserves X & Y * Preserves X & Y
AUDIOFREQ AUDIOFREQ
* JMP ENSQFREQ JMP ENSQFREQ
* JMP MOCKFREQ * JMP MOCKFREQ
RTS RTS
@ -532,7 +532,7 @@ AUDIOFREQ
* On entry: X - oscillator number 0-3 , Y - amplitude to set * On entry: X - oscillator number 0-3 , Y - amplitude to set
* Preserves X & Y * Preserves X & Y
AUDIOAMP AUDIOAMP
* JMP ENSQAMP JMP ENSQAMP
* JMP MOCKAMP * JMP MOCKAMP
RTS RTS

View File

@ -36,8 +36,8 @@ RESET TSX
RESETHW SEC RESETHW SEC
JSR IDROUTINE ; See if this is a GS JSR IDROUTINE ; See if this is a GS
BCS :NOTGS BCS :NOTGS
* JSR ENSQINIT ; Initialize Ensoniq JSR ENSQINIT ; Initialize Ensoniq
:NOTGS :NOTGS
JSR MOCKINIT ; Initialize Mockingboard (sl4) * JSR MOCKINIT ; Initialize Mockingboard (sl4)
RTS RTS

View File

@ -57,6 +57,8 @@ MOCKINIT LDA #$FF ; All VIA pins output
LDA #MOCK_AY_INACTIVE LDA #MOCK_AY_INACTIVE
STA MOCK_6522_ORB2 STA MOCK_6522_ORB2
* TODO: DEALLOC_INTERRUPT before we QUIT
LDA #<MOCKISR ; Set up ISR with ALLOC_INTERRUPT LDA #<MOCKISR ; Set up ISR with ALLOC_INTERRUPT
STA ALLOCPL+2 STA ALLOCPL+2
LDA #>MOCKISR LDA #>MOCKISR
@ -92,7 +94,13 @@ MOCKSILENT LDX #13 ; Clear all 14 AY-3 regs
* Configure a Mockingboard oscillator to play a note * Configure a Mockingboard oscillator to play a note
* On entry: X - oscillator number 0-3, A - frequency, Y - amplitude * On entry: X - oscillator number 0-3, A - frequency, Y - amplitude
* Preserves all registers * Preserves all registers
MOCKNOTE ; TODO MOCKNOTE PHA
PHY
TAY
JSR MOCKFREQ ; Set frequency
PLY
JSR MOCKAMP ; Set amplitude
PLA
RTS RTS
@ -100,10 +108,18 @@ MOCKNOTE ; TODO
* On entry: X - oscillator number 0-3, Y - frequency to set * On entry: X - oscillator number 0-3, Y - frequency to set
* Preserves X & Y * Preserves X & Y
MOCKFREQ PHX MOCKFREQ PHX
PHY CPX #$00 ; Noise channel
; TODO BEQ :DONE ; TODO: IGNORE NOISE FOR NOW
PLY TXA
PLX DEC A ; Subtract 1
ASL ; Double to get fine register
TAX
LDA MFREQLOW,Y ; LSB of divider
JSR MOCKWRT ; Write value to AY-3 register
INX ; Add one for course register
LDA MFREQHIGH,Y ; MSB of divider
JSR MOCKWRT ; Write value to AY-3 register
:DONE PLX
RTS RTS
@ -111,7 +127,6 @@ MOCKFREQ PHX
* On entry: X - oscillator number 0-3, Y - amplitude to set * On entry: X - oscillator number 0-3, Y - amplitude to set
* Preserves X & Y * Preserves X & Y
MOCKAMP PHX MOCKAMP PHX
PHY
CPX #$00 ; Noise channel CPX #$00 ; Noise channel
BEQ :DONE ; Has no amplitude BEQ :DONE ; Has no amplitude
TXA ; Add 7 to get register TXA ; Add 7 to get register
@ -123,9 +138,8 @@ MOCKAMP PHX
LSR LSR
LSR ; Now 0..15 LSR ; Now 0..15
JSR MOCKWRT ; Write value to AY-3 register JSR MOCKWRT ; Write value to AY-3 register
PLY :DONE PLX
PLX RTS
:DONE RTS
* Mockingboard interrupt service routine - just calls generic audio ISR * Mockingboard interrupt service routine - just calls generic audio ISR
@ -143,8 +157,9 @@ MOCKISR CLD
* Write to both AY-3s * Write to both AY-3s
* On entry: A - value, X - register * On entry: A - value, X - register
* On exit: A and X unchanged, Y trashed. * On exit: All regs preserved.
MOCKWRT STX MOCK_6522_ORA1 ; Latch the address MOCKWRT PHY
STX MOCK_6522_ORA1 ; Latch the address
STX MOCK_6522_ORA2 STX MOCK_6522_ORA2
LDY #MOCK_AY_LATCH_ADDR LDY #MOCK_AY_LATCH_ADDR
STY MOCK_6522_ORB1 STY MOCK_6522_ORB1
@ -163,5 +178,6 @@ MOCKWRT STX MOCK_6522_ORA1 ; Latch the address
LDY #MOCK_AY_INACTIVE ; Go inactive LDY #MOCK_AY_INACTIVE ; Go inactive
STY MOCK_6522_ORB1 STY MOCK_6522_ORB1
STY MOCK_6522_ORB2 STY MOCK_6522_ORB2
PLY
RTS RTS