diff --git a/applecorn.po b/applecorn.po index ebe66db..f37f1be 100644 Binary files a/applecorn.po and b/applecorn.po differ diff --git a/applecorn.s b/applecorn.s index 40a8cd8..5517a88 100644 --- a/applecorn.s +++ b/applecorn.s @@ -72,24 +72,15 @@ AUXMOS1 EQU $2000 ; Temp staging area in Aux EAUXMOS1 EQU $3000 ; End of staging area AUXMOS EQU $D000 ; Final location in aux LC -* Macro for calls from aux memory to main memory -XFMAIN MAC - CLC ; Use main memory - CLV ; Use main ZP and LC - JMP XFER - EOM - * Called by code running in main mem to invoke a * routine in aux memory XF2AUX MAC - PHA - LDA $C08B ; R/W LC RAM, bank 1 - LDA $C08B - LDA #<]1 - STA STRTL - LDA #>]1 - STA STRTH - PLA + LDX $C08B ; R/W LC RAM, bank 1 + LDX $C08B + LDX #<]1 + STX STRTL + LDX #>]1 + STX STRTH SEC ; Use aux memory BIT $FF58 ; Set V: use alt ZP and LC JMP XFER @@ -98,18 +89,18 @@ XF2AUX MAC * Called by code running in aux mem to invoke a * routine in main memory XF2MAIN MAC + LDX STRTL + STX STRTBCKL + LDX STRTH + STX STRTBCKH + LDX #<]1 + STX STRTL + LDX #>]1 + STX STRTH TSX STX $0101 ; Save alt SP - PHA - LDA STRTL - STA STRTBCKL - LDA STRTH - STA STRTBCKH - LDA #<]1 - STA STRTL - LDA #>]1 - STA STRTH - PLA + LDX $0100 ; Load main SP + TXS CLC ; Use main mem CLV ; Use main ZP and LC JMP XFER @@ -117,24 +108,18 @@ XF2MAIN MAC * Macro called on re-entry to aux memory ENTAUX MAC + LDX STRTBCKL + STX STRTL + LDX STRTBCKH + STX STRTH LDX $0101 ; Recover alt SP TXS - PHA - LDA STRTBCKL - STA STRTL - LDA STRTBCKH - STA STRTH - PLA EOM * Macro called on re-entry to main memory ENTMAIN MAC - LDX $0100 ; Recover SP - TXS - PHA ; Preserve parm in A - LDA $C081 ; Bank in ROM - LDA $C081 - PLA + LDX $C081 ; Bank in ROM + LDX $C081 EOM * Enable writing to main memory (for code running in aux) @@ -159,7 +144,6 @@ WRTAUX MAC PUT AUXMEM.VDU PUT AUXMEM.HOSTFS PUT AUXMEM.KERNEL -* PUT AUXMEM.OSBW.ORIG PUT AUXMEM.BYTWRD PUT AUXMEM.CHARIO PUT AUXMEM.MISC diff --git a/auxmem.misc.s b/auxmem.misc.s index 457f3d7..4fa94b8 100644 --- a/auxmem.misc.s +++ b/auxmem.misc.s @@ -145,15 +145,12 @@ PRNIB CMP #$0A * IRQ/BRK handler IRQBRKHDLR PHA -* >>> WRTMAIN -* STA $45 ; A->$45 for ProDOS IRQ handlers -* >>> WRTAUX * Mustn't enable IRQs within the IRQ handler -* Do this manually, as we have complete control at this point +* Do not use WRTMAIN/WRTAUX macros STA $C004 ; Write to main memory STA $45 ; $45=A for ProDOS IRQ handlers STA $C005 ; Write to aux memory -; + TXA PHA CLD @@ -176,6 +173,7 @@ IRQBRKHDLR :IRQ >>> XF2MAIN,A2IRQ ; Bounce to Apple IRQ handler IRQBRKRET + >>> ENTAUX PLA ; TODO: Pass on to IRQ1V TAX PLA diff --git a/loader.s b/loader.s index c7b43a7..8f467e2 100644 --- a/loader.s +++ b/loader.s @@ -96,10 +96,9 @@ START JSR ROMMENU EOR #$A5 ; Checksum STA RSTV+2 - TSX ; Save SP at $0100 - STX $0100 ; In main + TSX ; Save SP at $0100 in aux STA $C005 ; Write to aux - STX $0100 ; And also in aux + STX $0100 STA $C004 ; Write to main >>> XF2AUX,AUXMOS1