A2osX/SYS/KERNEL.S.IRQ.txt

133 lines
2.7 KiB
Plaintext
Raw Permalink Normal View History

2017-12-22 21:24:30 +00:00
NEW
2019-05-25 19:24:07 +00:00
AUTO 3,1
*--------------------------------------
* called directly by IRQ Vector $FFFE in AuxLC
* Must keep:
* A,X,Y
2023-11-04 14:42:28 +00:00
* IO.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
*--------------------------------------
2020-09-24 15:31:48 +00:00
*IRQ.BRK jmp IRQ.6
*--------------------------------------
2020-09-24 15:31:48 +00:00
IRQ.Handler cld
2020-09-24 15:31:48 +00:00
sta IRQ.6+1
pla
pha
and #$10 BRK?
2020-09-24 15:31:48 +00:00
* bne IRQ.BRK
2018-07-25 15:26:14 +00:00
bne *
2019-09-27 14:53:44 +00:00
2020-09-24 15:31:48 +00:00
stx IRQ.5+1
sty IRQ.4+1
2020-09-04 15:21:15 +00:00
2023-11-04 14:42:28 +00:00
lda IO.RD80STORE
and IO.RDPAGE2
2020-09-04 15:21:15 +00:00
pha
2023-11-04 14:42:28 +00:00
sta IO.CLRPAGE2
2020-11-25 16:29:06 +00:00
2023-11-04 14:42:28 +00:00
lda IO.RDREADAUX
pha
2023-11-04 14:42:28 +00:00
sta IO.CLRREADAUX Make sure we can access FD.Table
2020-11-25 16:29:06 +00:00
2023-11-04 14:42:28 +00:00
lda IO.RDWRITEAUX
pha
2023-11-04 14:42:28 +00:00
sta IO.CLRWRITEAUX Driver may R/W in screen holes
2020-11-25 16:29:06 +00:00
lda MSLOT Save MSLOT
sta IRQ.2+2
2020-11-25 16:29:06 +00:00
2023-11-04 14:42:28 +00:00
* lda IO.RDCXROM C100-C7ff state
* pha
2023-11-04 14:42:28 +00:00
* sta IO.CLRCXROM Enable access to slot C100-C7ff space
2019-10-03 06:25:27 +00:00
2020-09-24 15:31:48 +00:00
IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED
2019-10-03 06:25:27 +00:00
2023-11-04 14:42:28 +00:00
* ldx #IO.CLRCXROM
* pla Get CXROM State
* bpl .3
2019-10-03 06:25:27 +00:00
* inx X = SETCXROM
*.3 sta $C000,x
2019-10-03 06:25:27 +00:00
lda IRQ.2+2 Get back MSLOT
sta MSLOT
and #$F0
eor #$C0 ....mmm...not looking like Cn....
bne IRQ.3
2019-09-27 14:53:44 +00:00
2023-11-04 14:42:28 +00:00
sta IO.CLRC8ROM Release $C800
IRQ.2 lda $ff00 SELF MODIFIED
2019-10-03 06:25:27 +00:00
2020-09-24 15:31:48 +00:00
IRQ.3 pla Must keep Carry
bpl .1
2019-10-03 06:25:27 +00:00
2023-11-04 14:42:28 +00:00
sta IO.SETWRITEAUX
2019-10-03 06:25:27 +00:00
clv coming for AUX.....cancel switch
.1 pla
bpl .2
2019-10-03 06:25:27 +00:00
2023-11-04 14:42:28 +00:00
sta IO.SETREADAUX
2019-10-03 06:25:27 +00:00
clv coming for AUX.....cancel switch
.2 pla
2018-12-17 07:02:03 +00:00
bpl .3
2023-11-04 14:42:28 +00:00
sta IO.SETPAGE2
2019-03-27 21:14:40 +00:00
.3 bvc IRQ.4 if not V, skip task switching
2019-09-27 14:53:44 +00:00
2019-10-03 06:25:27 +00:00
tsx Check Stack if before "dec IRQ.InKernel"
cpx #$fc $1ff-PChi-PClo-P = $1fc
bcs .8 in CORE.Run or CORE.Dispatch
2019-09-27 14:53:44 +00:00
2019-10-03 06:25:27 +00:00
lda $103,x
cmp /A2osX.SYSCALL
bcs .8 we are in kernel GP or LC
php
php make room for 2 additional bytes
tsx
2019-10-03 06:25:27 +00:00
lda $104,x get RTI PC LO
2018-12-17 07:02:03 +00:00
bne .4
2019-10-03 06:25:27 +00:00
dec $105,x adjust RTI PC HI
2018-12-17 07:02:03 +00:00
.4 dec $104,x back one byte, to make it a "RTS" return adddress
lda $103,x get IRQ pushed P
2019-10-03 06:25:27 +00:00
sta $101,x down 2 bytes
lda #A2osX.SLEEP make a RTI like "jsr A2osX.SLEEP"
sta $102,x
lda /A2osX.SLEEP with RTS=PC IRQ-1
sta $103,x
2019-10-03 06:25:27 +00:00
.8 clc
2020-09-24 15:31:48 +00:00
IRQ.4 ldy #$ff Self Modified
IRQ.5 ldx #$ff Self Modified
IRQ.6 lda #$ff Self Modified
bcc IRQ.8
2019-10-03 06:25:27 +00:00
2020-09-25 12:05:23 +00:00
dec IRQ.Skip Make regular ProDOS IRQ manager skip A2osX
2020-09-24 15:31:48 +00:00
IRQ.JMP jmp $FFFF SELF MODIFIED Not handled, pass to ProDOS
2019-10-03 06:25:27 +00:00
2020-09-24 15:31:48 +00:00
IRQ.8 rti
*--------------------------------------
MAN
2020-12-15 13:23:22 +00:00
SAVE usr/src/sys/kernel.s.irq
LOAD usr/src/sys/kernel.s
ASM