Applecorn/mainmem.init.s
apple2geek 8f83ea188e Label-ize absolute references to Apple II I/O locations.
Fix a typo-ed reference to CLRALTCHAR to correct location.
2022-10-11 22:00:36 -06:00

107 lines
3.2 KiB
ArmAsm

* 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 ($D000) in aux, AuxZP on, LC on
RESET TSX
STX $0100
LDA AN0OFF ; AN0 off
LDA AN1OFF ; AN1 off
LDA AN2ON ; AN2 on
LDA AN3ON ; AN3 on
>>> XF2AUX,AUXMOS
RTS