Kernel version 0.9 : ....More IRQ/VBL enhancement

This commit is contained in:
Rémy GIBERT 2017-02-06 18:04:03 +01:00
parent 24137e69bf
commit 0442bf83c2
11 changed files with 136 additions and 97 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,6 +1,6 @@
PR#3
PREFIX /A2OSX.SRC
NEW
LOMEM $A00
INC 1
AUTO 6
.LIST OFF
@ -10,6 +10,7 @@ AUTO 6
*--------------------------------------
.INB /A2OSX.DEV/INC/MACROS.I
.INB /A2OSX.DEV/INC/A2OSX.I
.INB /A2OSX.DEV/INC/PRODOS.I
.INB /A2OSX.DEV/INC/IO.I
.INB /A2OSX.DEV/INC/LIBGFX.I
*--------------------------------------
@ -127,24 +128,25 @@ MSG.DETECT >CSTR "\nApple IIe/IIc DHGR Driver.\n"
*--------------------------------------
* Device Header (16 Bytes)
*--------------------------------------
DEV.HEADER cld
jmp (DRV.CS.START,x)
.HS 00 DevID
.DA #S.DEV.F.EVENT
DEV.HEADER .DA DRV.CS.START
.DA #0
>PSTR "GFX" NAME
.HS 00 NAME must Be 5 bytes long
.HS 00
.HS 00.00.00.00
*--------------------------------------
* Driver Code
*--------------------------------------
DRV.CS.START .DA OPEN
.DA GETEVENT
.DA COUT
DRV.CS.START cld
jmp (.1,x)
.1 .DA STATUS
.DA BADCALL
.DA BADCALL
.DA BADCALL
.DA BADCALL
.DA BADCALL
.DA OPEN
.DA CLOSE
.DA GETINFO
.DA IRQ
.DA SELECT
.DA BADCALL
.DA BADCALL
.DA SETPIXEL
.DA GETPIXEL
.DA HLINE
@ -155,22 +157,23 @@ DRV.CS.START .DA OPEN
.DA SETCUR
.DA HIDECUR
.DA SHOWCUR
L.DEVINFO .DA DEVINFO
L.DEVSTAT .DA DEVSTAT
L.DIV7.0 .DA DIV7.0
L.MOD7.0 .DA MOD7.0
L.Shift0.Lo .DA Shift0.lo
L.Shift0.Hi .DA Shift0.hi
.DA 0 end or relocation
*--------------------------------------
OPEN ldy #S.DEV.ID
lda (pDev),y
sta A2osX.SCRNDEVS+2
BADCALL lda #MLI.ERR.BADCALL
sec
rts
*--------------------------------------
STATUS >LDYA L.DEVSTAT
clc
rts
*--------------------------------------
OPEN sta A2osX.SCRNDEVS+2 DEV.ID in A
lda #3
sta A2osX.ASCREEN
jsr SELECT
lda L.DIV7.0+1
sta DIV7.hi
inc
@ -208,26 +211,7 @@ OPEN ldy #S.DEV.ID
.8 clc
rts
*--------------------------------------
GETEVENT lda A2osX.ASCREEN
cmp #3 is HGR1 screen active?
bne .9 no....exit
.9 lda #0 Error = no event
sec
rts
*--------------------------------------
COUT
IRQ sec
rts
*--------------------------------------
CLOSE clc
rts
*--------------------------------------
GETINFO >LDYA L.DEVINFO
clc
rts
*--------------------------------------
SELECT sta CLRTEXT
CONTROL sta CLRTEXT
sta CLRMIXED
sta SETHIRES
sta CLR80STORE
@ -242,9 +226,16 @@ SELECT sta CLRTEXT
* sta SETDHIRES
* sta CLRDHIRES
* sta SETDHIRES
lda #3
sta A2osX.ASCREEN
clc
rts
*--------------------------------------
CLOSE clc
rts
*--------------------------------------
* SETPIXEL
* In : YA = Ptr to CtrlBlk :
* 0 : X
@ -637,10 +628,17 @@ SB.Page .BS 1
SB.StartCol .BS 1
SB.Col .BS 1
*--------------------------------------
DEVINFO .DA #S.DEVINFO.TYPE.GFX type of DEVINFO STRUCT
DEVINFO.MODES .DA #%10000011 XOR,16 & B/W
DEVINFO.W .DA 560 X.SIZE
DEVINFO.H .DA 192 Y.SIZE
DEVSTAT .DA #0
.DA #0,#0,#0 size
>PSTR "Apple II Mouse"
.BS 2
.DA #0
.DA #0
.DA $0900
*--------------------------------------
DEVSTAT.MODES .DA #%10000011 XOR,16 & B/W
DEVSTAT.W .DA 560 X.SIZE
DEVSTAT.H .DA 192 Y.SIZE
.LIST ON
*--------------------------------------
DRV.SIZE .EQ *-DRV.CS.START

View File

@ -159,9 +159,9 @@ STATUS >LDYA L.DEVSTAT
clc
rts
*--------------------------------------
OPEN php to read IIe ROM ID bytes
OPEN php
sei
ldx DEVSLOT0n
lda MOUSEMODx,x keep if VBLInt already activated by kernel
and #MOUSEMODx.INTVBL

View File

@ -243,7 +243,6 @@ S.TCP.DSTPORT .EQ S.IP+2
S.TCP.SEQ.NUMBER .EQ S.IP+4
S.TCP.ACK.NUMBER .EQ S.IP+8
S.TCP.DATAOFFSET .EQ S.IP+12
S.TCP.DATAOFFSET20 .EQ $50
S.TCP.OPTIONS .EQ S.IP+13
S.TCP.OPTIONS.URG .EQ %00100000
S.TCP.OPTIONS.ACK .EQ %00010000

View File

@ -163,10 +163,25 @@ SKT.SEND.UDP lda #S.IP.PROTOCOL.UDP
.9 rts
*--------------------------------------
SKT.SEND.TCP
bra *
sec
rts
SKT.SEND.TCP lda #S.IP.PROTOCOL.TCP
jsr FRM.NewA
bcs .9
>LDAXI S.TCP-2
jsr SKT.SetFrameOutLenAX
>LDAXI S.TCP
jsr SKT.SetDataOutPtrAX
jsr SKT.SetFrameOutDstIP
jsr SKT.SetFrameOutPorts
jsr SKT.CopyDataInToOut
jmp FRM.SendTCP
.9 rts
*--------------------------------------
SKT.SEND.RAW ldy #S.SOCKET.RAW.PROTO
lda (ZPPtrSKT),y

View File

@ -1,6 +1,6 @@
PR#3
PREFIX /A2OSX.SRC
NEW
LOMEM $A00
INC 1
AUTO 6
.LIST OFF
@ -15,7 +15,17 @@ AUTO 6
EVT.GetEvents stz pEvent point to start of event list
stz EvtMgr.Count reset Size
lda VBL get VLINE status
lda K.IrkMgr.VBL do we have IRQ enabled for VBL ?
beq .10 no, regular poll
lda K.IrkMgr.VBLINT
beq EVT.GetEvents.DEV no
dec K.IrkMgr.VBLINT
stz K.IrkMgr.VBLINT
bra .11
.10 lda VBL get VLINE status
tax
eor EvtMgr.VBLState
bpl EVT.GetEvents.DEV no change,no tick
@ -23,10 +33,7 @@ EVT.GetEvents stz pEvent point to start of event list
sta EvtMgr.VBLState save new
bpl EVT.GetEvents.DEV Up2down transition,no tick
* sta PDLTRIG clr VBL (IIc)
* lda RDIOUDIS clr VBL (IIc)
inc A2osX.TIMER16
.11 inc A2osX.TIMER16
bne .1
inc A2osX.TIMER16+1
@ -50,12 +57,12 @@ EVT.GetEvents stz pEvent point to start of event list
jsr EVT.GetEvents.Add
*--------------------------------------
EVT.GetEvents.DEV
>LDYAI DevMgr.Table
>STYA pDev
* >LDYAI DevMgr.Table
* >STYA pDev
stz EvtMgr.Idx
* stz EvtMgr.Idx
.1 ldy #S.DEV.F
*.1 ldy #S.DEV.F
* lda (pDev),y get S.DEV.F
* bit #S.DEV.F.EVENT
* beq .2 EVENT enabled ?
@ -73,18 +80,18 @@ EVT.GetEvents.DEV
* bcs .8 Event Q is full, exit now with CC
.2 lda pDev
clc
adc #S.DEV
sta pDev
bcc .3
inc pDev+1
.3 lda EvtMgr.Idx
inc EvtMgr.Idx
cmp DevMgr.Count
bne .1
*.2 lda pDev
* clc
* adc #S.DEV
* sta pDev
* bcc .3
* inc pDev+1
*
*.3 lda EvtMgr.Idx
* inc EvtMgr.Idx
* cmp DevMgr.Count
* bne .1
sec
lda EvtMgr.Count if 0, exit with CS (from cmp), and A=0 "no event"
beq .9

View File

@ -222,7 +222,7 @@ IrqHandler cld
stx A2osX.SaveSM
ldx A2osX.SaveSX
txs
jsr K.IrqHandler
tsx

View File

@ -143,9 +143,9 @@ DevMgr.SYS .DA DevMgr.SYS.Code
* Setup AuxLC $FFFE->Kernel IRQ Handler
* if irq not handled, jmp (S.IrqMgrOldFFFE)
*--------------------------------------
SETMOUSE .EQ $12 Sets mouse mode
SETMOUSE .EQ $12 Sets mouse mode
SERVEMOUSE .EQ $13 Services mouse interrupt
INITMOUSE .EQ $19 Resets mouse clamps to default values,sets mouse position to 0,0
MOUSEMODx.INTVBL .EQ %00001000
*--------------------------------------
IrqMgrInit php
sei
@ -181,7 +181,7 @@ IrqMgrInit php
cmp #$C8
bne .1
.8 plp
plp
clc
rts
@ -190,45 +190,51 @@ IrqMgrInit php
rts
.4 lda ZPPtr1+1
sta DEVSLOTCn
sta GOMOUSE.JMP+2 DEVSLOTCn
sta K.IrqMgrVBL.JMP+2
and #$0F
sta DEVSLOT0n
asl
asl
asl
asl
sta DEVSLOTn0
sta GOMOUSE.n0+1
ldx DEVSLOT0n
lda #MOUSEMODx.INTVBL
ldy #SETMOUSE
jsr GOMOUSE
ldy #SERVEMOUSE
lda (ZPPtr1),y
sta K.IrqMgrVBL.JMP+1
bit RROMBNK2 Renable ROM to allow MOUSE II firmware
bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly
ldy #INITMOUSE Reset
jsr GOMOUSE
bcs *
lda #8
ldy #SETMOUSE
jsr GOMOUSE
bcs *
bit RRAMWRAMBNK1 Back To LC Ram
bit RRAMWRAMBNK1
bra .8
inc K.IrkMgr.VBL
plp
clc
rts
*--------------------------------------
GOMOUSE pha
stz ZPPtr1
ldx DEVSLOTCn
ldx GOMOUSE.JMP+2 DEVSLOTCn
stx ZPPtr1+1
lda (ZPPtr1),y
sta ZPPtr1
ldy DEVSLOTn0
sta GOMOUSE.JMP+1
GOMOUSE.n0 ldy #$ff
pla
jmp (ZPPtr1)
GOMOUSE.JMP jmp $ffff Self Modified
*--------------------------------------
DEVSIG.Offset .HS 05070B0CFB
DEVSIG.Value .HS 38180120D6
DEVSLOT0n .BS 1
DEVSLOTn0 .BS 1
DEVSLOTCn .BS 1
*--------------------------------------
DevMgrInit stz ZPPtr1
lda #$C1

View File

@ -53,12 +53,24 @@ K.IrqMgrOldFFFE .BS 2
K.IrqMgr.A .BS 1
K.IrqMgr.X .BS 1
K.IrqMgr.Y .BS 1
K.IrkMgr.VBL .BS 1
K.IrkMgr.VBLINT .BS 1
*--------------------------------------
* Called by ProDOS IRQ Manager (GP)
*--------------------------------------
K.IrqHandler >LDYAI DevMgr.Table
>STYA $fe
K.IrqHandler lda K.IrkMgr.VBL
beq .10
jsr K.IrqMgrVBL.JMP
bcs .10 Not From Mouse VBL
inc K.IrkMgr.VBLINT
clc
rts
.10 >LDYAI DevMgr.Table
>STYA $fe
ldx DevMgr.Count
.1 ldy #S.DEV.S
@ -85,6 +97,8 @@ K.IrqHandler >LDYAI DevMgr.Table
.8 rts
*--------------------------------------
K.IrqMgrVBL.JMP jmp $0000
*--------------------------------------
K.IrqHandlerJMP lda ($fe)
sta .1+1
ldy #1