mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-04 03:05:43 +00:00
103 lines
1.9 KiB
Plaintext
103 lines
1.9 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
* this routine handles interrupts and is coded to reach 'lreset' precisely at
|
||
* address $FFCB (ROM rts opcode) for rom switching to function.
|
||
* $FF9B
|
||
*--------------------------------------
|
||
IRQ pha
|
||
phx
|
||
phy
|
||
|
||
ldx #$FA save 6 bytes of page 0
|
||
|
||
.2 lda $00,x
|
||
sta IRQ.ZPSave-$FA,x
|
||
inx
|
||
bne .2
|
||
|
||
* lda mslot
|
||
* sta IRQ.DoneCn+2
|
||
|
||
* ldx #0
|
||
|
||
.3 lda inttbl+1,x test for a valid routine.
|
||
beq .4 branch if no routine.
|
||
|
||
phx
|
||
jsr IRQ.GoX
|
||
plx
|
||
|
||
bcc IRQ.Done
|
||
|
||
.4 inx
|
||
inx
|
||
cpx #10
|
||
bne .3
|
||
|
||
inc IRQ.Cnt allow 255 unclaimed interrupts
|
||
bne IRQ.Done before system death.
|
||
|
||
lda #$01 bad irq so
|
||
jsr GP.SysDeath kill the system.
|
||
*--------------------------------------
|
||
.LIST ON
|
||
IRQ.FREE1 .EQ $ffc8-*
|
||
.LIST OFF
|
||
|
||
.BS IRQ.FREE1
|
||
|
||
IRQ.Reset1 sta RROMBNK2
|
||
.DO *=$FFCB
|
||
* hits ROM rts at $FFCB
|
||
.ELSE
|
||
ERROR
|
||
.FIN
|
||
*--------------------------------------
|
||
IRQ.Done ldx #$FA
|
||
|
||
.1 lda IRQ.ZPSave-$FA,x restore the zero page
|
||
sta $00,x
|
||
inx
|
||
bne .1
|
||
|
||
* lda CLRC8ROM
|
||
|
||
*IRQ.DoneCn lda $C100 SELF MODIFIED
|
||
* lda IRQ.DoneCn+2
|
||
* sta mslot
|
||
|
||
ply
|
||
plx
|
||
pla
|
||
rti
|
||
*--------------------------------------
|
||
IRQ.GoX jmp (inttbl,x) interrupt routine x
|
||
|
||
IRQ.Reset lda /resetv-1
|
||
pha
|
||
lda #resetv-1
|
||
pha
|
||
bra IRQ.Reset1
|
||
|
||
IRQ.Cnt .HS 00 # of unclaimed interrupts.
|
||
IRQ.ZPSave .HS 000000000000 6 bytes
|
||
|
||
.LIST ON
|
||
IRQ.FREE2 .EQ $fffa-*
|
||
.LIST OFF
|
||
|
||
.BS IRQ.FREE2
|
||
|
||
.DA nmivect nmi handler
|
||
.DA IRQ.Reset reset handler
|
||
irqv .DA * PATCHED with ROM vector by LDR
|
||
.LIST OFF
|
||
*--------------------------------------
|
||
IRQ.LEN .EQ *-IRQ
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE USR/SRC/PRODOS.FX/PRODOS.S.IRQ
|
||
LOAD USR/SRC/PRODOS.FX/PRODOS.S
|
||
ASM
|