mirror of
https://github.com/A2osX/A2osX.git
synced 2024-09-10 07:54:37 +00:00
Kernel 0.9.1 : KERNEL, bugfix in VBL & IRQ handler
This commit is contained in:
parent
9d5ad1ee19
commit
4358169b40
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -222,30 +222,111 @@ GO.EXIT.JMP jmp $FFFF Self Modified
|
|||||||
* must exit with RTS
|
* must exit with RTS
|
||||||
* - CC if IRQ cleared, CS if NOT
|
* - CC if IRQ cleared, CS if NOT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GP.IrqH cld
|
*GP.IrqH cld
|
||||||
lda RDALTZP
|
* lda RDALTZP
|
||||||
sta .2+1
|
* sta .2+1
|
||||||
|
*
|
||||||
|
* bmi .1 we are already in AuxZP/LC
|
||||||
|
|
||||||
bmi .1 we are already in AuxZP/LC
|
* sta SETALTZP coming from MainLC, switch to aux
|
||||||
|
* tsx
|
||||||
|
* stx A2osX.SaveSM
|
||||||
|
* ldx A2osX.SaveSX
|
||||||
|
* txs
|
||||||
|
|
||||||
sta SETALTZP coming from MainLC, switch to aux
|
*.1 jsr K.IrqH
|
||||||
|
|
||||||
|
*.2 lda #$ff get back ZP status when called
|
||||||
|
* bmi .3 we were coming from AuxZP/LC
|
||||||
|
|
||||||
|
* tsx go back to Main
|
||||||
|
* stx A2osX.SaveSX
|
||||||
|
* ldx A2osX.SaveSM
|
||||||
|
* txs
|
||||||
|
* sta CLRALTZP
|
||||||
|
|
||||||
|
*.3 rts
|
||||||
|
*--------------------------------------
|
||||||
|
GP.IrqH.TCLOCK ldy IRQ.VBL.n0
|
||||||
|
|
||||||
|
lda $c080,y
|
||||||
|
and #$20
|
||||||
|
beq GP.IrqH.DEV
|
||||||
|
|
||||||
|
lda $c080,y
|
||||||
|
lda $c088,y
|
||||||
|
|
||||||
|
inc CORE.IRQTick
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
GP.IrqH.VBL jsr IRQ.VBL.MSM SERVEMOUSE
|
||||||
|
bcs GP.IrqH.DEV Not From Mouse
|
||||||
|
|
||||||
|
ldx IRQ.VBL.0n
|
||||||
|
lda MOUSESTSx,x
|
||||||
|
and #MOUSESTSx.INTVBL IRQ was caused by VBL ?
|
||||||
|
beq GP.IrqH.DEV
|
||||||
|
|
||||||
|
ldx IRQ.VBL.MRM+2 $Cn
|
||||||
|
ldy IRQ.VBL.n0
|
||||||
|
jsr IRQ.VBL.MRM READMOUSE
|
||||||
|
|
||||||
|
inc CORE.IRQTick
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
GP.IrqH.DEV sta SETALTZP switch to aux LC
|
||||||
tsx
|
tsx
|
||||||
stx A2osX.SaveSM
|
stx A2osX.SaveSM
|
||||||
ldx A2osX.SaveSX
|
ldx A2osX.SaveSX
|
||||||
txs
|
txs
|
||||||
|
|
||||||
.1 jsr K.IrqH
|
>LDYAI Dev.Table
|
||||||
|
>STYA $fe
|
||||||
|
|
||||||
.2 lda #$ff get back ZP status when called
|
ldx DevMgr.Count
|
||||||
bmi .3 we were coming from AuxZP/LC
|
|
||||||
|
|
||||||
tsx go back to Main
|
.4 ldy #S.DEV.S
|
||||||
|
lda ($fe),y
|
||||||
|
and #S.DEV.S.IRQ
|
||||||
|
beq .6
|
||||||
|
|
||||||
|
phx
|
||||||
|
jsr GP.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 tsx go back to Main
|
||||||
stx A2osX.SaveSX
|
stx A2osX.SaveSX
|
||||||
ldx A2osX.SaveSM
|
ldx A2osX.SaveSM
|
||||||
txs
|
txs
|
||||||
sta CLRALTZP
|
sta CLRALTZP
|
||||||
|
|
||||||
.3 rts
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
GP.IrqHJMP ldx #DEVMGR.IRQ
|
||||||
|
jmp ($fe)
|
||||||
|
*--------------------------------------
|
||||||
|
IRQ.IntNum .BS 1
|
||||||
|
IRQ.VBL.n0 .BS 1
|
||||||
|
IRQ.VBL.0n .BS 1
|
||||||
|
IRQ.VBL.MSM jmp $0000
|
||||||
|
IRQ.VBL.MRM jmp $0000
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
*GO.Reset jsr GO.A2osX
|
*GO.Reset jsr GO.A2osX
|
||||||
* jmp CORE.Run
|
* jmp CORE.Run
|
||||||
|
@ -566,45 +566,32 @@ DevMgr.SYS cld
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
IrqMgrInit >LDYAI MSG.IRQ
|
IrqMgrInit >LDYAI MSG.IRQ
|
||||||
>SYSCALL PrintF.YA
|
>SYSCALL PrintF.YA
|
||||||
php
|
* php
|
||||||
sei
|
* sei
|
||||||
>LDYA $FFFE
|
* >LDYA $FFFE
|
||||||
>STYA IRQ.OldFFFE
|
* >STYA IRQ.OldFFFE
|
||||||
>LDYAI K.IrqHAuxLC
|
* >LDYAI K.IrqHAuxLC
|
||||||
>STYA $FFFE
|
* >STYA $FFFE
|
||||||
|
|
||||||
>LDYAI GP.IrqH
|
* >LDYAI GP.IrqH
|
||||||
>STYA K.MLI.PARAMS+2
|
* >STYA K.MLI.PARAMS+2
|
||||||
>MLICALL MLIALLOCIRQ
|
* >MLICALL MLIALLOCIRQ
|
||||||
bcs .9
|
* bcs .9
|
||||||
|
|
||||||
lda K.MLI.PARAMS+1
|
* lda K.MLI.PARAMS+1
|
||||||
sta IRQ.INTNUM
|
* sta IRQ.INTNUM
|
||||||
|
|
||||||
plp
|
* plp
|
||||||
|
|
||||||
jsr IrqMgrInit.Mouse
|
jsr IrqMgrInit.TClock
|
||||||
bcs .1
|
bcs .1
|
||||||
|
|
||||||
lda #"V"
|
|
||||||
sta SYS.BASL0+38
|
|
||||||
|
|
||||||
>LDYAI K.IrqH.VBL
|
|
||||||
>STYA K.IrqH+1
|
|
||||||
|
|
||||||
>LDYAI MSG.IRQ.VBL
|
|
||||||
>SYSCALL PrintF.YA
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.1 jsr IrqMgrInit.TClock
|
|
||||||
bcs .8
|
|
||||||
|
|
||||||
lda #"C"
|
lda #"C"
|
||||||
sta SYS.BASL0+38
|
sta SYS.BASL0+38
|
||||||
|
|
||||||
>LDYAI K.IrqH.TClock
|
>LDYAI GP.IrqH.TClock
|
||||||
>STYA K.IrqH+1
|
jsr IrqMgrInit.MLI
|
||||||
|
bcs .9
|
||||||
|
|
||||||
>LDYAI MSG.IRQ.CLOCK
|
>LDYAI MSG.IRQ.CLOCK
|
||||||
>SYSCALL PrintF.YA
|
>SYSCALL PrintF.YA
|
||||||
@ -612,6 +599,22 @@ IrqMgrInit >LDYAI MSG.IRQ
|
|||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
.1 jsr IrqMgrInit.Mouse
|
||||||
|
bcs .8
|
||||||
|
|
||||||
|
lda #"V"
|
||||||
|
sta SYS.BASL0+38
|
||||||
|
|
||||||
|
>LDYAI GP.IrqH.VBL
|
||||||
|
jsr IrqMgrInit.MLI
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>LDYAI MSG.IRQ.VBL
|
||||||
|
>SYSCALL PrintF.YA
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
.8 jsr IrqMgrInit.HZ2Tick
|
.8 jsr IrqMgrInit.HZ2Tick
|
||||||
|
|
||||||
lda #"P"
|
lda #"P"
|
||||||
@ -623,95 +626,18 @@ IrqMgrInit >LDYAI MSG.IRQ
|
|||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 plp
|
.9 sec
|
||||||
sec
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
IrqMgrInit.HZ2Tick
|
IrqMgrInit.MLI >STYA K.MLI.PARAMS+2
|
||||||
ldx #50
|
|
||||||
lda A2osX.HZ
|
|
||||||
sta CORE.TickPer10t
|
|
||||||
sta CORE.Tick10t
|
|
||||||
cmp #5
|
|
||||||
beq .1
|
|
||||||
ldx #60
|
|
||||||
|
|
||||||
.1 stx CORE.TickPerSec
|
|
||||||
stx CORE.TickSec
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
IrqMgrInit.Mouse
|
|
||||||
stz ZPPtr1 Try finding a Mouse Card...
|
|
||||||
lda #$C1
|
|
||||||
sta ZPPtr1+1
|
|
||||||
|
|
||||||
.1 ldx #Mouse.SIG-Mouse.OFS-1
|
|
||||||
|
|
||||||
.2 ldy Mouse.OFS,x
|
|
||||||
lda (ZPPtr1),y
|
|
||||||
cmp Mouse.SIG,x
|
|
||||||
bne .3
|
|
||||||
dex
|
|
||||||
bpl .2
|
|
||||||
bra .4
|
|
||||||
|
|
||||||
.3 inc ZPPtr1+1 no match, try next slot....
|
|
||||||
lda ZPPtr1+1
|
|
||||||
cmp #$C8
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
.4 lda ZPPtr1+1
|
|
||||||
|
|
||||||
sta IRQ.VBL.MSM+2
|
|
||||||
sta IRQ.VBL.MRM+2
|
|
||||||
|
|
||||||
and #$0f
|
|
||||||
sta IRQ.VBL.0n
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
|
|
||||||
sta IRQ.VBL.n0
|
|
||||||
|
|
||||||
ldy #$13 SERVEMOUSE
|
|
||||||
lda (ZPPtr1),y
|
|
||||||
sta IRQ.VBL.MSM+1
|
|
||||||
|
|
||||||
ldy #$14 READMOUSE
|
|
||||||
lda (ZPPtr1),y
|
|
||||||
sta IRQ.VBL.MRM+1
|
|
||||||
|
|
||||||
ldy #$12 SETMOUSE
|
|
||||||
|
|
||||||
lda (ZPPtr1),y
|
|
||||||
sta .7+1
|
|
||||||
|
|
||||||
lda #9 #MOUSEMODx.INTVBL+MOUSEMODx.ACTIVE
|
|
||||||
|
|
||||||
ldx ZPPtr1+1 DEVSLOTCn
|
|
||||||
stx .7+2
|
|
||||||
ldy IRQ.VBL.n0
|
|
||||||
|
|
||||||
php
|
php
|
||||||
sei
|
sei
|
||||||
|
>MLICALL MLIALLOCIRQ
|
||||||
bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly
|
|
||||||
|
|
||||||
.7 jsr $ffff self Modified, CALL SETMOUSE
|
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
bit RRAMWRAMBNK1 Back To LC Ram
|
lda K.MLI.PARAMS+1
|
||||||
bit RRAMWRAMBNK1
|
sta IRQ.INTNUM
|
||||||
|
|
||||||
jsr IrqMgrInit.HZ2Tick
|
|
||||||
|
|
||||||
dec CORE.IRQMode
|
|
||||||
|
|
||||||
plp
|
plp
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
@ -719,9 +645,6 @@ IrqMgrInit.Mouse
|
|||||||
.9 plp
|
.9 plp
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
Mouse.OFS .HS 05070B0CFB
|
|
||||||
Mouse.SIG .HS 38180120D6
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
IrqMgrInit.TClock
|
IrqMgrInit.TClock
|
||||||
stz ZPPtr1 Try finding a Mouse Card...
|
stz ZPPtr1 Try finding a Mouse Card...
|
||||||
@ -781,6 +704,106 @@ IrqMgrInit.TClock
|
|||||||
TClock.SIG .HS 0878282c58ff700538b00118b8087848
|
TClock.SIG .HS 0878282c58ff700538b00118b8087848
|
||||||
.HS 8a489848adffcf201ac86868ba8df807
|
.HS 8a489848adffcf201ac86868ba8df807
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
IrqMgrInit.Mouse
|
||||||
|
stz ZPPtr1 Try finding a Mouse Card...
|
||||||
|
lda #$C1
|
||||||
|
sta ZPPtr1+1
|
||||||
|
|
||||||
|
.1 ldx #Mouse.SIG-Mouse.OFS-1
|
||||||
|
|
||||||
|
.2 ldy Mouse.OFS,x
|
||||||
|
lda (ZPPtr1),y
|
||||||
|
cmp Mouse.SIG,x
|
||||||
|
bne .3
|
||||||
|
dex
|
||||||
|
bpl .2
|
||||||
|
bra .4
|
||||||
|
|
||||||
|
.3 inc ZPPtr1+1 no match, try next slot....
|
||||||
|
lda ZPPtr1+1
|
||||||
|
cmp #$C8
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.4 lda ZPPtr1+1
|
||||||
|
|
||||||
|
sta .11+2
|
||||||
|
sta IRQ.VBL.MSM+2
|
||||||
|
sta IRQ.VBL.MRM+2
|
||||||
|
|
||||||
|
and #$0f
|
||||||
|
sta IRQ.VBL.0n
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
|
||||||
|
sta IRQ.VBL.n0
|
||||||
|
|
||||||
|
php
|
||||||
|
sei
|
||||||
|
|
||||||
|
bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly
|
||||||
|
|
||||||
|
ldy #INITMOUSE
|
||||||
|
jsr .10
|
||||||
|
|
||||||
|
ldy #SETMOUSE
|
||||||
|
lda #MOUSEMODx.INTVBL+MOUSEMODx.ACTIVE
|
||||||
|
jsr .10
|
||||||
|
|
||||||
|
bit RRAMWRAMBNK1 Back To LC Ram
|
||||||
|
bit RRAMWRAMBNK1
|
||||||
|
|
||||||
|
ldy #SERVEMOUSE
|
||||||
|
lda (ZPPtr1),y
|
||||||
|
sta IRQ.VBL.MSM+1
|
||||||
|
|
||||||
|
ldy #READMOUSE
|
||||||
|
lda (ZPPtr1),y
|
||||||
|
sta IRQ.VBL.MRM+1
|
||||||
|
|
||||||
|
jsr IrqMgrInit.HZ2Tick
|
||||||
|
|
||||||
|
dec CORE.IRQMode
|
||||||
|
|
||||||
|
plp
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 plp
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.10 pha
|
||||||
|
lda (ZPPtr1),y
|
||||||
|
sta .11+1
|
||||||
|
pla
|
||||||
|
|
||||||
|
ldx .11+2 Cn
|
||||||
|
ldy IRQ.VBL.n0
|
||||||
|
|
||||||
|
.11 jmp $ffff SELF MODIFIED
|
||||||
|
|
||||||
|
Mouse.OFS .HS 05070B0CFB
|
||||||
|
Mouse.SIG .HS 38180120D6
|
||||||
|
*--------------------------------------
|
||||||
|
IrqMgrInit.HZ2Tick
|
||||||
|
ldx #50
|
||||||
|
lda A2osX.HZ
|
||||||
|
sta CORE.TickPer10t
|
||||||
|
sta CORE.Tick10t
|
||||||
|
cmp #5
|
||||||
|
beq .1
|
||||||
|
ldx #60
|
||||||
|
|
||||||
|
.1 stx CORE.TickPerSec
|
||||||
|
stx CORE.TickSec
|
||||||
|
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
DevMgrInit >LDYAI MSG.DEV
|
DevMgrInit >LDYAI MSG.DEV
|
||||||
>SYSCALL PrintF.YA
|
>SYSCALL PrintF.YA
|
||||||
|
|
||||||
|
@ -34,9 +34,17 @@ K.IrqHAuxLC sta .6+1
|
|||||||
pha
|
pha
|
||||||
sta CLRREADAUX Make sure we can access Dev.Table
|
sta CLRREADAUX Make sure we can access Dev.Table
|
||||||
|
|
||||||
|
lda RDWRITEAUX
|
||||||
|
pha
|
||||||
|
sta CLRWRITEAUX Driver may R/W in screen holes
|
||||||
|
|
||||||
jsr K.IrqH
|
jsr K.IrqH
|
||||||
|
|
||||||
pla Must keep Carry
|
pla Must keep Carry
|
||||||
|
bpl .10
|
||||||
|
sta SETWRITEAUX
|
||||||
|
|
||||||
|
.10 pla
|
||||||
bpl .1
|
bpl .1
|
||||||
sta SETREADAUX
|
sta SETREADAUX
|
||||||
|
|
||||||
@ -62,8 +70,7 @@ K.IrqHAuxLC sta .6+1
|
|||||||
bcs .8
|
bcs .8
|
||||||
rti
|
rti
|
||||||
|
|
||||||
.7 pla pull P
|
.7 lda .6+1
|
||||||
bra *
|
|
||||||
|
|
||||||
.8 jmp (IRQ.OldFFFE)
|
.8 jmp (IRQ.OldFFFE)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -12,6 +12,7 @@ AUTO 4,1
|
|||||||
.INB INC/IO.I
|
.INB INC/IO.I
|
||||||
.INB INC/PRODOS.I
|
.INB INC/PRODOS.I
|
||||||
.INB INC/MLI.ERR.I
|
.INB INC/MLI.ERR.I
|
||||||
|
.INB INC/XY.MOUSE.I
|
||||||
.INB INC/GUI.I
|
.INB INC/GUI.I
|
||||||
|
|
||||||
.INB /A2OSX.SRC/SYS/KERNEL.S.INIT
|
.INB /A2OSX.SRC/SYS/KERNEL.S.INIT
|
||||||
@ -49,7 +50,7 @@ A2osX.D2 .PH $D000
|
|||||||
.EP
|
.EP
|
||||||
A2osX.E0 .PH $E000
|
A2osX.E0 .PH $E000
|
||||||
.INB /A2OSX.SRC/SYS/KERNEL.S.JMP
|
.INB /A2OSX.SRC/SYS/KERNEL.S.JMP
|
||||||
.INB /A2OSX.SRC/SYS/KERNEL.S.IRQ
|
* .INB /A2OSX.SRC/SYS/KERNEL.S.IRQ
|
||||||
.INB /A2OSX.SRC/SYS/KERNEL.S.MEM
|
.INB /A2OSX.SRC/SYS/KERNEL.S.MEM
|
||||||
DevMgr.FreeMem .EQ *
|
DevMgr.FreeMem .EQ *
|
||||||
.EP
|
.EP
|
||||||
|
Loading…
Reference in New Issue
Block a user