Kernel 0.9.1 : KERNEL, bugfix in VBL & IRQ handler

This commit is contained in:
Rémy GIBERT 2018-04-05 21:32:22 +01:00
parent 9d5ad1ee19
commit 4358169b40
7 changed files with 244 additions and 132 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -222,30 +222,111 @@ GO.EXIT.JMP jmp $FFFF Self Modified
* must exit with RTS
* - CC if IRQ cleared, CS if NOT
*--------------------------------------
GP.IrqH cld
lda RDALTZP
sta .2+1
*GP.IrqH cld
* lda RDALTZP
* 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
*.1 jsr K.IrqH
*.2 lda #$ff get back ZP status when called
* bmi .3 we were coming from AuxZP/LC
sta SETALTZP coming from MainLC, switch to aux
* 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
stx A2osX.SaveSM
ldx A2osX.SaveSX
txs
.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
>LDYAI Dev.Table
>STYA $fe
ldx DevMgr.Count
.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
ldx A2osX.SaveSM
txs
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
* jmp CORE.Run

View File

@ -566,45 +566,32 @@ DevMgr.SYS cld
*--------------------------------------
IrqMgrInit >LDYAI MSG.IRQ
>SYSCALL PrintF.YA
php
sei
>LDYA $FFFE
>STYA IRQ.OldFFFE
>LDYAI K.IrqHAuxLC
>STYA $FFFE
* php
* sei
* >LDYA $FFFE
* >STYA IRQ.OldFFFE
* >LDYAI K.IrqHAuxLC
* >STYA $FFFE
>LDYAI GP.IrqH
>STYA K.MLI.PARAMS+2
>MLICALL MLIALLOCIRQ
bcs .9
* >LDYAI GP.IrqH
* >STYA K.MLI.PARAMS+2
* >MLICALL MLIALLOCIRQ
* bcs .9
lda K.MLI.PARAMS+1
sta IRQ.INTNUM
* lda K.MLI.PARAMS+1
* sta IRQ.INTNUM
plp
* plp
jsr IrqMgrInit.Mouse
jsr IrqMgrInit.TClock
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"
sta SYS.BASL0+38
>LDYAI K.IrqH.TClock
>STYA K.IrqH+1
>LDYAI GP.IrqH.TClock
jsr IrqMgrInit.MLI
bcs .9
>LDYAI MSG.IRQ.CLOCK
>SYSCALL PrintF.YA
@ -612,6 +599,22 @@ IrqMgrInit >LDYAI MSG.IRQ
clc
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
lda #"P"
@ -623,105 +626,25 @@ IrqMgrInit >LDYAI MSG.IRQ
clc
rts
.9 plp
sec
.9 sec
rts
*--------------------------------------
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
*--------------------------------------
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
IrqMgrInit.MLI >STYA K.MLI.PARAMS+2
php
sei
bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly
.7 jsr $ffff self Modified, CALL SETMOUSE
>MLICALL MLIALLOCIRQ
bcs .9
bit RRAMWRAMBNK1 Back To LC Ram
bit RRAMWRAMBNK1
jsr IrqMgrInit.HZ2Tick
dec CORE.IRQMode
lda K.MLI.PARAMS+1
sta IRQ.INTNUM
plp
clc
clc
rts
.9 plp
sec
rts
Mouse.OFS .HS 05070B0CFB
Mouse.SIG .HS 38180120D6
*--------------------------------------
IrqMgrInit.TClock
stz ZPPtr1 Try finding a Mouse Card...
@ -781,6 +704,106 @@ IrqMgrInit.TClock
TClock.SIG .HS 0878282c58ff700538b00118b8087848
.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
>SYSCALL PrintF.YA

View File

@ -34,9 +34,17 @@ K.IrqHAuxLC sta .6+1
pha
sta CLRREADAUX Make sure we can access Dev.Table
lda RDWRITEAUX
pha
sta CLRWRITEAUX Driver may R/W in screen holes
jsr K.IrqH
pla Must keep Carry
bpl .10
sta SETWRITEAUX
.10 pla
bpl .1
sta SETREADAUX
@ -62,8 +70,7 @@ K.IrqHAuxLC sta .6+1
bcs .8
rti
.7 pla pull P
bra *
.7 lda .6+1
.8 jmp (IRQ.OldFFFE)
*--------------------------------------

View File

@ -12,6 +12,7 @@ AUTO 4,1
.INB INC/IO.I
.INB INC/PRODOS.I
.INB INC/MLI.ERR.I
.INB INC/XY.MOUSE.I
.INB INC/GUI.I
.INB /A2OSX.SRC/SYS/KERNEL.S.INIT
@ -49,7 +50,7 @@ A2osX.D2 .PH $D000
.EP
A2osX.E0 .PH $E000
.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
DevMgr.FreeMem .EQ *
.EP