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
* Preserves all registers
AUDIONOTE
* JMP ENSQNOTE
JMP ENSQNOTE
* JMP MOCKNOTE
RTS
@ -523,7 +523,7 @@ AUDIONOTE
* On entry: X - oscillator number 0-3 , Y - frequency to set
* Preserves X & Y
AUDIOFREQ
* JMP ENSQFREQ
JMP ENSQFREQ
* JMP MOCKFREQ
RTS
@ -532,7 +532,7 @@ AUDIOFREQ
* On entry: X - oscillator number 0-3 , Y - amplitude to set
* Preserves X & Y
AUDIOAMP
* JMP ENSQAMP
JMP ENSQAMP
* JMP MOCKAMP
RTS

View File

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

View File

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