* MAINMEM.INIT.S * (c) Bobbi 2021 GPLv3 * * Initialization, interrupt handling and reset handling code * that resides in main memory. * 14-Nov-2021 If started from CSD, gets prefix to CMDBUF. * Trampoline in main memory used by aux memory IRQ handler * to invoke Apple II / ProDOS IRQs in main memory A2IRQ >>> IENTMAIN ; IENTMAIN does not do CLI JSR A2IRQ2 >>> XF2AUX,IRQBRKRET A2IRQ2 PHP ; Fake things to look like IRQ JMP (A2IRQV) ; Call Apple II ProDOS ISR * BRK handler in main memory. Used on Apple IIgs only. GSBRK >>> XF2AUX,GSBRKAUX * Set prefix if not already set SETPRFX LDA #GPFXCMD STA :OPC7 ; Initialize cmd byte to $C7 :L1 JSR MLI :OPC7 DB $00 DW GSPFXPL LDX DRVBUF1 ; was $0300 BNE RTSINST LDA DEVNUM STA ONLNPL+1 ; Device number JSR MLI DB ONLNCMD DW ONLNPL LDA DRVBUF2 ; was $0301 AND #$0F TAX INX STX DRVBUF1 ; was $0300 LDA #'/' STA DRVBUF2 ; was $0301 DEC :OPC7 BNE :L1 RTSINST LDA CMDPATH BEQ :GETPFX ; CMDPATH empty LDA CMDPATH+1 CMP #'/' BEQ :GETPFXDONE ; CMDPATH already absolute path :GETPFX JSR MLI DB $C7 ; Get Prefix DW :GETADDR :GETPFXDONE RTS :GETADDR HEX 01 ; One parameter DW CMDPATH ; Get prefix to CMDPATH * Disconnect /RAM ramdrive to avoid aux corruption * Stolen from Beagle Bros Extra K DISCONN LDA MACHID AND #$30 CMP #$30 BNE :S1 LDA DEVADR32 CMP DEVADR01 BNE :S2 LDA DEVADR32+1 CMP DEVADR01+1 BEQ :S1 :S2 LDY DEVCNT :L1 LDA DEVLST,Y AND #$F3 CMP #$B3 BEQ :S3 DEY BPL :L1 BMI :S1 :S3 LDA DEVLST,Y STA DRVBUF2+1 ; was $0302 :L2 LDA DEVLST+1,Y STA DEVLST,Y BEQ :S4 INY BNE :L2 :S4 LDA DEVADR32 STA DRVBUF1 ; was $0300 LDA DEVADR32+1 STA DRVBUF2 ; was $0301 LDA DEVADR01 STA DEVADR32 LDA DEVADR01+1 STA DEVADR32+1 DEC DEVCNT :S1 RTS * Reset handler - invoked on Ctrl-Reset * XFER to AUXMOS ($C000) in aux, AuxZP on, LC on RESET TSX STX $0100 LDA $C058 ; AN0 off LDA $C05A ; AN1 off LDA $C05D ; AN2 on LDA $C05F ; AN3 on >>> XF2AUX,AUXMOS RTS