From 3e3ada797243a7431d4a22d16d1916348ca646a9 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Tue, 22 Nov 2022 16:10:06 -0500 Subject: [PATCH] Shutdown interrupt & deregister ISR on *QUIT. --- applecorn.po | Bin 819200 -> 819200 bytes auxmem.init.s | 2 +- mainmem.audio.s | 13 +++++++++---- mainmem.ensq.s | 8 ++++++++ mainmem.fsequ.s | 1 + mainmem.lists.s | 3 +++ mainmem.mock.s | 16 ++++++++++++++-- mainmem.svc.s | 3 ++- 8 files changed, 38 insertions(+), 8 deletions(-) diff --git a/applecorn.po b/applecorn.po index 6a20974205b8e11895b72c0a707258dc075dc33d..c84f0d322af882ad6a8e8b36a3ba27aac0fb4c57 100644 GIT binary patch delta 5721 zcma(#4RjM#x-*%kO)s=f3x%`@UVemDL<#~%O@#uwslnY zlMyWPkSS?_9bnrMvX<@iFx_;;S5PBC6q*1U6`%6Az|k$>qut>M?pmMpeK%DARqEW8?cIe6(<3vV*K zDe&sxP3>Bpgg)AoRZ2P@)p}YG@`Rq*`W~!2}jlUa{ki#KCb4idY0{ASi?Tc z=tKU^(lQ^)l_vYpq!D%yv4x8EcT?zH=_DqT*VTwgA+bVQ>qBL%LptL_26m1#e;1kn zBl|9NH=90ew408`Nw32v-4SDv|BvuCb*$e;C$cquA=XNcKOk+_ja}#)R$ocpWJD)< zlNGDTo1k+S`#SoHWyebkc7tVrsFS$e$iyD)0>Gcy

Vna%trsLHDdS(BKiNunoPL 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 diff --git a/auxmem.init.s b/auxmem.init.s index c193116..3e43e3b 100644 --- a/auxmem.init.s +++ b/auxmem.init.s @@ -290,7 +290,7 @@ BYTE00 BEQ BYTE00A ; OSBYTE 0,0 - generate error RTS ; %000x1xxx host type, 'A'pple BYTE00A BRK DB $F7 -HELLO ASC 'Applecorn MOS 2022-11-21' +HELLO ASC 'Applecorn MOS 2022-11-22' DB $00 ; Unify MOS messages * TO DO: Move into RAM GSSPEED DB $00 ; $80 if GS is fast, $00 for slow diff --git a/mainmem.audio.s b/mainmem.audio.s index f2e2cca..26e59d0 100644 --- a/mainmem.audio.s +++ b/mainmem.audio.s @@ -510,6 +510,13 @@ CHECK4BYTES PHX RTS +* Stop the sound device (no more interrupts) +AUDIOSTOP LDA AUDIOCARD + BEQ :MOCK + JMP ENSQSTOP +:MOCK JMP MOCKSTOP + + * Configure an oscillator to play a note * On entry: X - oscillator number 0-3 , A - frequency, Y - amplitude * Preserves all registers @@ -525,8 +532,7 @@ AUDIONOTE PHA * Adjust frequency of oscillator * On entry: X - oscillator number 0-3 , Y - frequency to set * Preserves X & Y -AUDIOFREQ - LDA AUDIOCARD +AUDIOFREQ LDA AUDIOCARD BEQ :MOCK JMP ENSQFREQ :MOCK JMP MOCKFREQ @@ -535,8 +541,7 @@ AUDIOFREQ * Adjust amplitude of oscillator * On entry: X - oscillator number 0-3 , Y - amplitude to set * Preserves X & Y -AUDIOAMP - LDA AUDIOCARD +AUDIOAMP LDA AUDIOCARD BEQ :MOCK JMP ENSQAMP :MOCK JMP MOCKAMP diff --git a/mainmem.ensq.s b/mainmem.ensq.s index 197f8ba..c05b7a6 100644 --- a/mainmem.ensq.s +++ b/mainmem.ensq.s @@ -69,6 +69,14 @@ ENSQSILENT LDY #$00 ; Amplitude RTS +* Stop Ensoniq interrupt +ENSQSTOP JSR ENSQSILENT + LDX #$A4 ; Control register for osc #4 + LDY #$00 ; Free run, no IRQ, start + JSR ENSQWRTDOC + RTS + + * Configure an Ensoniq oscillator to play a note * On entry: X - oscillator number 0-3 , A - frequency, Y - amplitude * Preserves all registers diff --git a/mainmem.fsequ.s b/mainmem.fsequ.s index c1c4f13..fd6595a 100644 --- a/mainmem.fsequ.s +++ b/mainmem.fsequ.s @@ -38,6 +38,7 @@ FBEND EQU FILEBLK+14 ; End address for SAVE * ProDOS MLI command numbers ALLOCCMD EQU $40 +DEALLOCCMD EQU $41 QUITCMD EQU $65 GTIMECMD EQU $82 CREATCMD EQU $C0 diff --git a/mainmem.lists.s b/mainmem.lists.s index c7a0b76..9156741 100644 --- a/mainmem.lists.s +++ b/mainmem.lists.s @@ -114,3 +114,6 @@ ALLOCPL HEX 02 ; Number of parameters DB $00 ; Interrupt number returned here DW $0000 ; Pointer to ISR +DEALLOCPL HEX 01 ; Number of parameters + DB $01 ; Interrupt number + diff --git a/mainmem.mock.s b/mainmem.mock.s index 30cea38..3093b3a 100644 --- a/mainmem.mock.s +++ b/mainmem.mock.s @@ -71,9 +71,9 @@ MOCKINIT LDA #$FF ; All VIA pins output SEI LDA #$40 ; Configure VIA interrupt STA MOCK_6522_ACR - LDA #$7F + LDA #$7F ; Clear all bits STA MOCK_6522_IER - LDA #$C0 + LDA #$C0 ; Set bit 6 STA MOCK_6522_IFR STA MOCK_6522_IER LDA #$F4 ; $27F4 => 100Hz @@ -94,6 +94,18 @@ MOCKSILENT LDX #13 ; Clear all 14 AY-3 regs RTS +* Stop Mockingboard interrupt +MOCKSTOP JSR MOCKSILENT + LDA #$7F ; Clear all bits + STA MOCK_6522_IER + LDA ALLOCPL+1 ; Interrupt number + STA DEALLOCPL+1 + JSR MLI ; Deallocate ISR + DB DEALLOCCMD + DW DEALLOCPL + RTS + + * Configure a Mockingboard oscillator to play a note * On entry: X - oscillator number 0-3, A - frequency, Y - amplitude * Preserves all registers diff --git a/mainmem.svc.s b/mainmem.svc.s index efc2306..987e136 100644 --- a/mainmem.svc.s +++ b/mainmem.svc.s @@ -939,7 +939,8 @@ CHKNOTFND CMP #$44 ; Convert ProDOS 'not found' * Quit to ProDOS -QUIT INC PWRDUP ; Invalidate powerup byte +QUIT JSR AUDIOSTOP ; Shut down audio, dereg ISR + INC PWRDUP ; Invalidate powerup byte STA PAGE1 ; PAGE2 off STA CLRALTCHAR ; Alt font off JSR MLI