mirror of
https://github.com/A2osX/A2osX.git
synced 2024-08-02 22:29:18 +00:00
158 lines
3.2 KiB
Plaintext
158 lines
3.2 KiB
Plaintext
NEW
|
||
PREFIX /A2OSX.BUILD
|
||
AUTO 4,1
|
||
*--------------------------------------
|
||
* called directly by IRQ Vector $FFFE in AuxLC
|
||
* Must keep:
|
||
* A,X,Y
|
||
* SETREADAUX
|
||
* if we are here, Aux ZP/Stack already On
|
||
* Exit with RTI
|
||
* if A2osX Drivers cannot clear IRQ,
|
||
* must call regular System Handler
|
||
*--------------------------------------
|
||
MSLOT .EQ $7f8
|
||
*--------------------------------------
|
||
K.IrqHAuxLC sta K.IrqHAuxLC.6+1
|
||
pla
|
||
pha
|
||
and #$10 BRK?
|
||
bne K.IrqHAuxLC.7
|
||
|
||
stx K.IrqHAuxLC.5+1
|
||
sty K.IrqHAuxLC.4+1
|
||
|
||
lda $fe Save 2 bytes in ZP
|
||
pha
|
||
lda $ff
|
||
pha
|
||
|
||
lda MSLOT Save MSLOT
|
||
pha
|
||
|
||
lda RDREADAUX
|
||
pha
|
||
sta CLRREADAUX Make sure we can access Dev.Table
|
||
|
||
lda RDWRITEAUX
|
||
pha
|
||
sta CLRWRITEAUX Driver may R/W in screen holes
|
||
|
||
K.IrqHAuxLC.JSR jsr K.IrqH.DEV SELF MODIFIED
|
||
|
||
pla Must keep Carry
|
||
bpl K.IrqHAuxLC.10
|
||
sta SETWRITEAUX
|
||
|
||
K.IrqHAuxLC.10 pla
|
||
bpl K.IrqHAuxLC.1
|
||
sta SETREADAUX
|
||
|
||
K.IrqHAuxLC.1 pla Get back MSLOT
|
||
sta MSLOT
|
||
sta K.IrqHAuxLC.2+2
|
||
|
||
and #$C0
|
||
eor #$C0 ....mmm...not looking link Cn....
|
||
bne K.IrqHAuxLC.3
|
||
sta $CFFF Release $C800
|
||
|
||
K.IrqHAuxLC.2 lda $ff00 SELF MODIFIED
|
||
|
||
K.IrqHAuxLC.3 pla
|
||
sta $ff
|
||
pla
|
||
sta $fe
|
||
|
||
K.IrqHAuxLC.4 ldy #$ff Self Modified
|
||
K.IrqHAuxLC.5 ldx #$ff Self Modified
|
||
K.IrqHAuxLC.6 lda #$ff Self Modified
|
||
bcs K.IrqHAuxLC.8 not handled, pass to ProDOS
|
||
rti
|
||
|
||
K.IrqHAuxLC.7 lda K.IrqHAuxLC.6+1
|
||
|
||
K.IrqHAuxLC.8 dec IRQ.SkipA2osX Make regular ProDOS IRQ manager skip A2osX
|
||
jmp (K.IRQ.OldFFFE)
|
||
*--------------------------------------
|
||
* Called by :
|
||
* - Kernel K.IrqHAuxLC
|
||
* - ProDOS IRQ Manager (GP)
|
||
*--------------------------------------
|
||
K.IrqH.TCLOCK ldy IRQ.VBL.n0
|
||
|
||
lda $c080,y
|
||
and #$20
|
||
beq K.IrqH.DEV
|
||
|
||
lda $c080,y
|
||
lda $c088,y
|
||
|
||
bra K.IrqH.Switch
|
||
*--------------------------------------
|
||
K.IrqH.VBL jsr IRQ.VBL.MSM SERVEMOUSE
|
||
bcs K.IrqH.DEV Not From Mouse
|
||
|
||
ldx IRQ.VBL.0n
|
||
lda $778,x
|
||
and #$08 IRQ was caused by VBL ?
|
||
beq K.IrqH.DEV
|
||
|
||
ldx IRQ.VBL.MRM+2 $Cn
|
||
ldy IRQ.VBL.n0
|
||
jsr IRQ.VBL.MRM READMOUSE
|
||
*--------------------------------------
|
||
K.IrqH.Switch inc IRQ.Tick
|
||
|
||
bit A2osX.F A2osX.F.PMODE .EQ %01000000
|
||
bvc .8
|
||
|
||
lda IRQ.InKernel
|
||
bmi .8
|
||
|
||
lda SYS.BASL0+37
|
||
eor #$A0+'S
|
||
sta SYS.BASL0+37
|
||
|
||
.8 clc
|
||
rts
|
||
*--------------------------------------
|
||
K.IrqH.DEV >LDYAI Dev.Table
|
||
>STYA $fe
|
||
|
||
ldx DevMgr.Count
|
||
|
||
.4 ldy #S.DEV.S
|
||
lda ($fe),y
|
||
and #S.DEV.S.IRQ
|
||
beq .6
|
||
|
||
phx
|
||
jsr K.IrqHJMP
|
||
plx
|
||
bcc .8 CC, IRQ cleared by device
|
||
|
||
.6 lda $fe
|
||
clc
|
||
adc #S.DEV
|
||
sta $fe
|
||
bcc .7
|
||
inc $ff
|
||
|
||
.7 dex
|
||
bne .4
|
||
|
||
sec
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
K.IRQ.OldFFFE .BS 2
|
||
*--------------------------------------
|
||
K.IrqHJMP ldx #DEVMGR.IRQ
|
||
jmp ($fe)
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE /A2OSX.SRC/SYS/KERNEL.S.IRQ
|
||
LOAD /A2OSX.SRC/SYS/KERNEL.S
|
||
ASM
|