From 1b9f7acd559e91455f3b02acae35fb26c64a6241 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Tue, 25 Oct 2022 21:39:41 -0400 Subject: [PATCH] Fixed bug in chord synchronization. --- applecorn.po | Bin 819200 -> 819200 bytes mainmem.audio.s | 29 ++++++++++++++++++++--------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/applecorn.po b/applecorn.po index 35a2089cdd88bf5d4e06b3675199c4651f48143b..b024d1d28c870e35333f665f8b4de912fefc3712 100644 GIT binary patch delta 769 zcmZ8fVMr5U7{2Xpx_wq&%IpL;zXAgxVff47h=`*3uPA~BetUN-8br_^69(cz(Lixc z3NEnav4!mnVf)kS$IQPQCw)W0=XHpxU;KIh;X7I7G2{L ze(h3{IJ29tiLXN}jXH!G`jX`?vXsG1$lBE7ap^PcnCm1T0SKc*DK2|P5$JWX^NVh!|2fIbKm z#5L(Q{peS}*szt~F4}d@;Al(%gO5)!C_iGRRRa1M`Tz|nx~`R%Nl)84UUs<6*EyUQ?3-Dmnf zo3H!uCn)(2=7f7t9tf&pe=jRs1?i3$oB?iDp7;C)FFl%V`9Qu|r#A)Z;Rc!BXo~&? DpgJ_D delta 775 zcmZ8fZ%7ki9KPM%*6p>}LEbt;>LrL2vdk~}VMGwYtPd4|(7@N zrx;vdvttX}3BvZp)d#^(fg@$$-v$b!ko@2{1PhjEzqJ(U;JJIA=l%Vj_s4s$t~cp= zQ|hrO*WKhEG}L)G{ToNijv*w3JJThSM?(&8X6-c*&$(U< zZVB;r<8Fc|ncXQ8s5Lqk$W=$HVJ?tb{7f&9vpovD^+H^rE$t~%@0n8|CltMqm5W6M zCcS`$Erv@SFt7Zps;*R>$oIL$3HpJRENIj*?VhV4Jw=BFU{%yJG)Vb64g z+0OL{(>0ob@-~5bPwr_x@B^QZDo%IB{uqKPQ=-#nE03EFt!e!FrV0yb5#`ngI)vbko>aBn{U#VS0qw?pcRjGt1lc zU^>!1+8H#(v~SH|_QgGefyq}qXT?+hdP3PV?k$n?)lx|99%ZpnOkLIv()*UknVywk z3L~Yo&u<=2`@$4;4VdnT+H06Xn9Mjs5^)nchLIa96!`V%ZC)W}z$2Y?p zwL8J)6fLFb-v6v2UKb`6EtbIjcQh5axM1mHx7pYoz!fZrUcxsQz04Kj z1(Q%u2oH$HMLeSTdsC`t9e;4IHWp!7`4{-}0UX4i{8aa_JT4!?nhsQ$ZlX;`C{Y)M}xwsjs%r(`5-G?0<}{LO#nCPn`!(Fe(KJgULhO&h|Ejl OyQ2DPn~ZN)4gLXH88yZL diff --git a/mainmem.audio.s b/mainmem.audio.s index c8e7b0d..0ca1a72 100644 --- a/mainmem.audio.s +++ b/mainmem.audio.s @@ -210,6 +210,7 @@ REM PHP ; Save flags, turn off interrupts SEC ; Buffer already empty RTS + * Remove value from buffer according to audio channel (0-4) * On entry: X is audio channel number * On exit: A undef, X preserved, Y value of byte removed @@ -222,9 +223,10 @@ REMAUDIO PHX ; Preserve X PLX ; Recover original X RTS + * Inspect value in buffer according to audio channel (0-4) * On entry: X is audio channel number -* On exit: A next byte, X preserved, Y offset to next char +* On exit: A next byte, X preserved PEEKAUDIO PHX ; Preserve X TXA ; Audio channel X->A ORA #$04 ; Convert to queue number @@ -235,6 +237,22 @@ PEEKAUDIO PHX ; Preserve X :RTS RTS +* Release a suspended note by overwriting its sequence number with zero +* On entry: X is audio channel number +* On exit: X preserved +RELNOTE PHX ; Preserve X + TXA ; Audio channel X->A + ORA #$04 ; Convert to queue number + TAX ; Queue number ->X + JSR GETBUFADDR ; Buffer address into A1L,A1H + LDA STARTINDICES,X ; Output pointer for buf X + TAY + LDA #$00 ; Release note .. + STA (A1L),Y ; .. by overwriting seq # with zero + PLX ; Recover original X +:RTS RTS + + * Count space in buffer or purge buffer (API same as Acorn MOS CNPV) * On entry: X is buffer number. V set means purge, V clear means count. * C set means space left, C clear means entries used @@ -324,14 +342,7 @@ CHORD PHA AND #$0F ; Mask out hold nybble CMP :SEQ ; See if matches BNE :NEXT2 ; Nope, skip - PHX - TXA - ORA #$04 ; Convert to buffer number - TAX - JSR GETBUFADDR ; Audio buf addr -> A1L,A1H - PLX - LDA #$00 - STA (A1L),Y ; Zero sync nybble (+ hold nybble) + JSR RELNOTE ; Release the note :NEXT2 DEX BPL :L2 ; Next audio queue BRA :DONE