A2osX/SYS/KERNEL.S.IRQ.txt

121 lines
2.2 KiB
Plaintext
Raw Normal View History

PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* Setup MainLC ($3FE)
*
*
* Setup AuxLC $FFFE->Kernel IRQ Handler
* if irq not handled, jmp (S.IrqMgrOldFFFE)
*--------------------------------------
2016-03-13 21:47:19 +00:00
S.IrqMgrInit php
sei
>LDYA $FFFE
cpy #S.IrqHandlerAuxLC
bne .1
cmp /S.IrqHandlerAuxLC
2016-03-13 21:47:19 +00:00
beq .2
2016-03-13 21:47:19 +00:00
.1 >STYA S.IrqMgrOldFFFE
>LDYAI S.IrqHandlerAuxLC
>STYA $FFFE
2016-04-07 06:14:30 +00:00
.2
* >LDYAI $BE0C
* >STYA $3F0
2016-03-13 21:47:19 +00:00
plp
clc
rts
*--------------------------------------
S.IrqMgrQuit php
sei
>LDYA S.IrqMgrOldFFFE
>STYA $FFFE
plp
cli
.8 rts
*--------------------------------------
2016-03-13 21:47:19 +00:00
S.BrkHandlerAuxLC
bra *
*--------------------------------------
* 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
*--------------------------------------
S.IrqHandlerAuxLC
sta S.IrqMgr.A
pla
pha
and #$10 BRK?
beq .10
lda S.IrqMgr.A
.82 jmp (S.IrqMgrOldFFFE)
.10 stx S.IrqMgr.X
sty S.IrqMgr.Y
lda $fe
pha
lda $ff
pha
lda RDREADAUX
pha
sta CLRREADAUX Make sure we can access DevMgr.Table
>LDYAI DevMgr.Table
>STYA $fe
.1 lda ($fe) End Of Table ?
sec
beq .8
ldy #S.DEV.F
lda ($fe),y
and #S.DEV.F.IRQ
beq .2
jsr S.IrqHandlerJMP
bcc .8 CC, IRQ cleared by device
.2 lda $fe CS,
adc #S.DEV.SIZE-1
sta $fe
bcc .1
inc $ff
bra .1
.8 pla Must keep Carry
bpl .81
sta SETREADAUX
.81 pla
sta $ff
pla
sta $fe
ldy S.IrqMgr.Y
ldx S.IrqMgr.X
lda S.IrqMgr.A
bcs .82
rti
S.IrqHandlerJMP ldx #DEVMGR.IRQ
jmp ($fe)
*--------------------------------------
S.IrqMgrOldFFFE .BS 2
S.IrqMgr.A .BS 1
S.IrqMgr.X .BS 1
S.IrqMgr.Y .BS 1
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.IRQ
LOAD SYS/KERNEL.S
ASM