mirror of
https://github.com/bobbimanners/Applecorn.git
synced 2025-01-05 19:29:37 +00:00
107 lines
3.1 KiB
ArmAsm
107 lines
3.1 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 ($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
|
|
|
|
|
|
|