From 77b47d53863478482d3d3466e3243af55516907e Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Fri, 18 Nov 2022 23:58:53 -0500 Subject: [PATCH] Mockingboard code complete / doesn't work yet. --- applecorn.po | Bin 819200 -> 819200 bytes mainmem.audio.s | 6 +++--- mainmem.init.s | 4 ++-- mainmem.mock.s | 38 +++++++++++++++++++++++++++----------- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/applecorn.po b/applecorn.po index b72f590a118d273e20b4739879510640379c2bd8..ccfd9480fc45d569df4abedc82f5f3d2432eced1 100644 GIT binary patch delta 2064 zcmeH`eM}Q)9LMjav~Yc)KwFAJdxZnU@n+G1tYhFdDFvovlf`D_&bCmPvJeDk>I=7J zxfn9RfpBC5ymdm_8X|>AWs8g@Y>Um_b-bz>%#mTX*$^X1UD`cBP`B(a|6IJ}x%>XU zzvub>o?P;wX)R4_2P=7zNl-@-RG*d`4bi_q_^KFwn`eOKP(7r9pnT9$ueH|1@MOq! zJ}(#y{?!g6Q7}CWBYCi0vb!C=t>znwOG;na0~-FeeSB81UpQwkZ;`~tsnob8K7mL~ zO5T#vIUcgyDHlbsh+K4cWyX>m1;|4Q7hNHsoLk74VakGuX38QY|ja=^^tt7p(*O~^+J1wp0 z;0?8AK=bx_4#V9R@YCY$JUr22KhK4(*R&l4b?*Y{m99|wStGcJ-ZAQ}T)pmj3)oW) zDvQI3uU9ssGk;xyEc&719;$Jm^x&AyUro }lvD>aid{Xm4cM{M0mVJ8)20>$12g zXh1if`GC^n7d#iIv7HE9!7j~W+QKTUSL&zqMhC97+Hivv4EP!HMKtGPuF;Nayvq99 zXonSiKr-+}&B_{qtIJ?8tXb2kya_NuNg3H)b6BdvMxp=luw^rt5=9V%)y!b2tm+TA zuPNx8zxIX4+1)}Pt}>Pu>_~}=;QR01p80O#lZ$=bZKqB)9x@xt^!eEtNh*az5M1#s z&Cg!@`peHQ4_)Xx*VXnu^Ukrxx;HCHc&t(uE)<}_2P^k{zc2l| zaBFVr`VZfFznb`b?9?W)6J)t_ui#X9=9Dm(okRb)}ezn z)=GtX%6;QvZLXmadVSUH%VJa{;MqNJ5Xu z#Ma3y2e3XVnK*L;8@VAwx3kBjB6+(MseOv-Dyql(BSi=-@W3)rFu}fn*cbEqkBUP7 E2IiAFF8}}l delta 13305 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 diff --git a/mainmem.audio.s b/mainmem.audio.s index 5cd2105..7bda744 100644 --- a/mainmem.audio.s +++ b/mainmem.audio.s @@ -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 diff --git a/mainmem.init.s b/mainmem.init.s index bb05595..d43ea49 100644 --- a/mainmem.init.s +++ b/mainmem.init.s @@ -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 diff --git a/mainmem.mock.s b/mainmem.mock.s index c3128b0..81b9221 100644 --- a/mainmem.mock.s +++ b/mainmem.mock.s @@ -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 @@ -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