A2osX/SYS/KERNEL.S.IRQ.txt

151 lines
2.8 KiB
Plaintext
Raw Normal View History

PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
INC 1
AUTO 6
*--------------------------------------
* 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
*--------------------------------------
2016-09-21 15:20:37 +00:00
K.IrqHandlerAuxLC
sta .12+1
pla
pha
and #$10 BRK?
bne .2
stx .11+1
sty .10+1
lda $fe
pha
lda $ff
pha
lda RDREADAUX
pha
sta CLRREADAUX Make sure we can access Dev.Table
jsr K.IrqHandler
pla Must keep Carry
bpl .1
sta SETREADAUX
.1 pla
sta $ff
pla
sta $fe
.10 ldy #$ff Self Modified
.11 ldx #$ff Self Modified
.12 lda #$ff Self Modified
bcs .8
rti
.2
pla pull P
bra *
lda .12+1
.8 jmp (IRQ.OldFFFE)
*--------------------------------------
* Called by :
* Kernel IrqHandlerAuxLC
* ProDOS IRQ Manager (GP)
*--------------------------------------
K.IrqHandler jmp K.IrqHandler.DEV Modified by INIT
*--------------------------------------
K.IrqHandler.TCLOCK
ldy K.IrqMgrVBL.n0
lda $c080,y
and #$20
beq K.IrqHandler.DEV
lda $c080,y
lda $c088,y
inc CORE.IRQTick
lda SYS.BASL0+37
eor #$80
sta SYS.BASL0+37
clc
rts
*--------------------------------------
K.IrqHandler.VBL
jsr K.IrqMgrVBL.MSM SERVEMOUSE
bcs K.IrqHandler.DEV Not From Mouse
ldx K.IrqMgrVBL.0n
lda $778,x
and #$08 IRQ was caused by VBL ?
beq K.IrqHandler.DEV
ldx K.IrqMgrVBL.MRM+2 $Cn
ldy K.IrqMgrVBL.n0
jsr K.IrqMgrVBL.MRM READMOUSE
inc CORE.IRQTick
lda SYS.BASL0+37
eor #$80
sta SYS.BASL0+37
clc
rts
*--------------------------------------
K.IrqHandler.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
2016-09-21 15:20:37 +00:00
jsr K.IrqHandlerJMP
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
*--------------------------------------
IRQ.IntNum .BS 1
*--------------------------------------
IRQ.OldFFFE .BS 2
*--------------------------------------
K.IrqMgrVBL.n0 .BS 1
K.IrqMgrVBL.0n .BS 1
K.IrqMgrVBL.MSM jmp $0000
K.IrqMgrVBL.MRM jmp $0000
*--------------------------------------
K.IrqHandlerJMP ldx #DEVMGR.IRQ
jmp ($fe)
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.IRQ
LOAD /A2OSX.SRC/SYS/KERNEL.S
ASM