From 3022b08c89d1e6a7d1fb23c50ca4da2bd045eb23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Wed, 11 Oct 2017 17:37:41 +0200 Subject: [PATCH] Kernel 0.9.1 : New IRQ manager, supporting ThunderClock Plus --- .Floppies/A2OSX.BOOT.po | Bin 143360 -> 143360 bytes .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.DEV.po | Bin 143360 -> 143360 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/CHTYP.S.txt | 2 +- INC/A2osX.I.txt | 21 ------ INC/KERNEL.I.txt | 21 ++++++ SYS/KERNEL.S.CORE.txt | 110 +++++++++++++++++------------ SYS/KERNEL.S.INIT.txt | 146 +++++++++++++++++++++++++++++++++++---- SYS/KERNEL.S.IRQ.txt | 65 ++++++++++------- 10 files changed, 259 insertions(+), 106 deletions(-) diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index cf74dbd034226eba94d9e7451bc5ca3e82b24753..e9d595ca826794f54531e52052fdd054654bad45 100644 GIT binary patch delta 5924 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 Kse1D3#Qz6(!$uVV diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 3d2de8015d1d47e1a762be64780afb0de750a454..982763f478ea623832d761faa73096e51e4f6f37 100644 GIT binary patch delta 12364 zcmZu%3tUuH{y*mq12a4a7=~eZU0@h_4CC+~G)))=A%;iH_{b~=V-z+;Lo~AoP*`S+ zt5O~tU zo!@!fb53VxUT0_Cz}o=<)oCV0@1FzSl2oUq^*$kO142^B;a{c3z+MF-l@B3|_`mMM zGef0)5!Z{+!>L)}Y3Mv+LEv!R!FQy=hQ4X+yIJn(9(`~8EAi2f)2vHAq<@V6?|#iQ ztGDWv_>Q&-`cp&tr-p#vun~77H}ZHlO1c^MdXI0Tv^#)(BE=;e@;v)L+z)%KBKJAU z-R1dVl6xWhVrswdc%^3_m118^@%)3n=^KX>GCdknTzB=Je?{5xjb~clLKYok6VeB6 zuv^pMv0ev{ZT#a!c(~<*s=oJt4kln;5oJ?)x{k@?#Mj4 zn9ug_d@J+B$xXf%kA=d$e|~kY;+Y*gcSS};CnP56re$PimGolfhaGn?p@$QWNOATP zl+m+8PF)v~dh5iVtbw%t{aLOzvRvXr0tm-Nl?Fl^wlfrb6sB(9yuGuUG7 zfX1`Vl`eDt9@sZ>J>8tUP}HY(u!B5&4-Y>+0o(iDNa~nmN!EH+^9=11qzsdzFAoCC z70S87xsy^K(|6035N=Bt=V(Hnw>RRxfIt0FJBYqGp!G^mDZcLvzKHkWlPA2FOpZO+ z^%Lj%nahlDea{8MpX)o$9X*I#KXPs*Bv(0i6eJznv>y3hyk)!gz;~Q%z5dZ5c6@vw z0y+r%XOp$3b)R_HPDB7Joh(7%V%H5>+sZ%DFdwCDejM&eYwy)F%M<7>zH= z9Ypg3>F#$rrR>&p_uJI6oe+>?vvi`huc;mGjtjm_qt4qln-Rvmb7 zj?Vq||BtI%B(9IsT_foN<0t8^(R7~uhG#@nH$IMPbOXBn2AwYjOukbGjzx=f1M>bQ zI@e5E+?~2H<80mO2A%hUqd$;4$@((J0=Yiu0LS=2rhk@BZgiP-{j>ShqH{+aE!Oqk z{b`z_K_`SQJSAv}P6FLAF2KFXlhJ$dQ}n=%)-EpA0@hIz%Rd+ue;jcrZ;KVH9T#fp~J zI(?twYIv&NkfxWpQN~fN{sFCimsT%3F(mQ&GERBV5BDLr^q5v(nHeD;*p;c@)O;KK z(bthpii`ajdS9R?(DY4)e&5kd{mB7epsBSM%ncio`s5zBewtnpw6GMUC z&#mXPn%OhI@<0C76{dH^=$l=kdY4iUW0NmpzZ)MNAD4H6#EDbhAAqS>bN*gNF>?5c z^R*a1*8A~=R><{MaOHf`!|D0t4K9aIMmZCoq+Q&AwY@J~+{9-xE+q%fx#StQ&N*Cj z=_N_u*UaIomjiM1I5!aDdRo%cE7|OpY(owfcq7L?0m0F+tgy_B1Jkz1hTVZ4#A

    G_fLjLgW7zALi&w1#(*@01NbSwwv^E`e&H&;}r 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 delta 8684 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

    d@ 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 GiuC^+u~Mr5 diff --git a/BIN/CHTYP.S.txt b/BIN/CHTYP.S.txt index e5445c05..7a06de6c 100644 --- a/BIN/CHTYP.S.txt +++ b/BIN/CHTYP.S.txt @@ -347,7 +347,7 @@ OptionList >PSTR "CRcr" OptionVars .DA #bContinue,#bRecurse,#bContinue,#bRecurse *-------------------------------------- MSG.USAGE >CSTR "Usage : CHTYP [File *,? wildcards allowed] [File type : 0xx (Hexadecimal byte),SYS,TXT....]\r\n -C : Continue on error\r\n -R : Recurse subdirectories\r\n" -MSG.OK >CSTR "[Ok]\r\n" +MSG.OK >CSTR "[OK]\r\n" MSG.ERR >CSTR "[%h]\r\n" MSG.FILE >CSTR "CHTYP File:%S..." diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 8b66b9dc..6b771152 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -66,27 +66,6 @@ A2osX.SLOTS.XY .EQ $E1 A2osX.SLOTS.NET .EQ $E2 A2osX.SLOTS.DISABLE .EQ $FF *-------------------------------------- -H.BIN.HEADER .EQ 0 -H.BIN.HEADER.DRV65 .EQ $4CD8 6502:cld,jmp abs -H.BIN.HEADER.LIB65 .EQ $7CD8 6502:cld,jmp (abs,x) -H.BIN.HEADER.BIN65 .EQ $7CD8 6502:cld,jmp (abs,x) -*H.BIN.HEADER.LIB80 .EQ $A28D Z80: -*H.BIN.HEADER.BIN80 .EQ $A28D Z80: -H.BIN.JMP .EQ 2 -*H.BIN.CODE.TYPE .EQ 4 -*H.BIN.VERSION .EQ 5 -H.BIN.CODE.LEN .EQ 8 -* -H.BIN.EXE.DS.SIZE .EQ 10 -H.BIN.EXE.SS.SIZE .EQ 12 -H.BIN.EXE.ZP.SIZE .EQ 13 -H.BIN.EXE.REL.TABLE .EQ 16 -* -H.BIN.DRV.HEADER.O .EQ 10 -H.BIN.DRV.CODE.O .EQ 12 -H.BIN.DRV.CODE.LEN .EQ 14 -H.BIN.DRV.REL.TABLE .EQ 0 -*-------------------------------------- * A2osX.SYSCALL Functions Indexes *-------------------------------------- * .EQ $00 diff --git a/INC/KERNEL.I.txt b/INC/KERNEL.I.txt index 8ab8414a..03167edd 100644 --- a/INC/KERNEL.I.txt +++ b/INC/KERNEL.I.txt @@ -13,6 +13,27 @@ K.EVT.MAX .EQ 8 K.DEV.MAX .EQ 32 K.PS.MAX .EQ 32 *-------------------------------------- +H.BIN.HEADER .EQ 0 +H.BIN.HEADER.DRV65 .EQ $4CD8 6502:cld,jmp abs +H.BIN.HEADER.LIB65 .EQ $7CD8 6502:cld,jmp (abs,x) +H.BIN.HEADER.BIN65 .EQ $7CD8 6502:cld,jmp (abs,x) +*H.BIN.HEADER.LIB80 .EQ $A28D Z80: +*H.BIN.HEADER.BIN80 .EQ $A28D Z80: +H.BIN.JMP .EQ 2 +*H.BIN.CODE.TYPE .EQ 4 +*H.BIN.VERSION .EQ 5 +H.BIN.CODE.LEN .EQ 8 +* +H.BIN.EXE.DS.SIZE .EQ 10 +H.BIN.EXE.SS.SIZE .EQ 12 +H.BIN.EXE.ZP.SIZE .EQ 13 +H.BIN.EXE.REL.TABLE .EQ 16 +* +H.BIN.DRV.HEADER.O .EQ 10 +H.BIN.DRV.CODE.O .EQ 12 +H.BIN.DRV.CODE.LEN .EQ 14 +H.BIN.DRV.REL.TABLE .EQ 0 +*-------------------------------------- * Kernel ZP Aux *-------------------------------------- ZPKERNEL .EQ $0 diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index e5926a20..9505bd22 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -114,7 +114,7 @@ CORE.Events jsr CORE.GetEvents clc adc #S.EVT sta pEvent - lda EVTMGR.COUNT + lda CORE.EvtCount bne .1 *-------------------------------------- .4 lda A2osX.ASCREEN @@ -157,59 +157,72 @@ CORE.Events jsr CORE.GetEvents CORE.GetEvents lda #EvtMgr.Table sta pEvent point to start of event list - stz EvtMgr.Count reset Size + stz CORE.EvtCount reset Size - lda K.IrkMgr.VBL do we have IRQ enabled for VBL ? - bpl .10 no, regular poll + bit CORE.IRQMode do we have IRQ enabled for Ticks ? + bpl .1 no, regular poll - lda K.IrkMgr.VBLINT - beq .3 no + lda CORE.IRQTick a Tick ? + beq .8 no, no event - dec K.IrkMgr.VBLINT - bra .11 - -.10 lda VBL get VLINE status + dec CORE.IRQTick + bra .2 + +.1 lda VBL get VLINE status tax - eor EvtMgr.VBLState - bpl .3 no change,no tick + eor CORE.VBLState + bpl .8 no change,no tick txa - sta EvtMgr.VBLState save new - bpl .3 Up2down transition,no tick + sta CORE.VBLState save new + bpl .8 Up2down transition,no tick -.11 inc A2osX.TIMER16 - bne .1 + lda SYS.BASL0+37 + eor #$80 + sta SYS.BASL0+37 + +.2 inc A2osX.TIMER16 + bne .3 inc A2osX.TIMER16+1 -.1 dec EvtMgr.HZ.CNT - bne .3 not yet 100ms - - ldx A2osX.HZ - stx EvtMgr.HZ.CNT - - lda #S.EVT.F.T10TH - - dec EvtMgr.10TH.CNT - bne .2 +.3 lda #0 - ldx #10 - stx EvtMgr.10TH.CNT + dec CORE.TickSec + bne .4 not yet One Sec + + ldx CORE.TickPerSec + stx CORE.TickSec ora #S.EVT.F.T1SEC + +.4 dec CORE.Tick10t + bne .5 -.2 sta (pEvent) - inc EvtMgr.Count Add one event to Queue + ldx CORE.TickPer10t + stx CORE.Tick10t - lda pEvent - clc - adc #S.EVT - sta pEvent if CS, EVT queue full!!! ($100) + ora #S.EVT.F.T10TH + +.5 tax Finally, do we have an event ? + beq .8 no.... + + sta (pEvent) + inc CORE.EvtCount Add one event to Queue -.3 sec - lda EvtMgr.Count if 0, exit with CS (from cmp), and A=0 "no event" +* lda pEvent +* clc +* adc #S.EVT +* sta pEvent if CS, EVT queue full!!! ($100) + +* MORE EVENT PROCESSING HERE + +.8 lda CORE.EvtCount if 0, exit with CS (from cmp), and A=0 "no event" beq .9 -.8 clc -.9 rts + clc + rts + +.9 sec + rts *-------------------------------------- * CORE.DispatchEvents * IN: @@ -243,7 +256,7 @@ CORE.DispatchEvents lda #EvtMgr.Table sta pEvent Select first event in list - lda EVTMGR.COUNT + lda CORE.EvtCount sta TSKMGR.EVENTCNT .2 lda (pEvent) Empty event, select next @@ -254,7 +267,7 @@ CORE.DispatchEvents bcs .3 not for this PS, try next event in list jsr CORE.DestroyEvent this PS handled the EVT, destroy it... - lda EVTMGR.COUNT + lda CORE.EvtCount beq .8 no more event, exit .3 dec TSKMGR.EVENTCNT @@ -407,7 +420,7 @@ CORE.DestroyEvent .2 lda #0 sta (pEvent) - dec EvtMgr.Count + dec CORE.EvtCount .9 rts *-------------------------------------- CORE.PSSelect0 >LDYAI CORE.S.PS0 Select PS0 @@ -480,10 +493,17 @@ DevMgr.Free .DA DevMgr.FreeMem .DA DevMgr.HiMem DevMgr.Count .DA #2 NUL,SYS *-------------------------------------- -EvtMgr.VBLState .BS 1 -EvtMgr.10TH.CNT .BS 1 -EvtMgr.HZ.CNT .BS 1 -EvtMgr.Count .BS 1 +CORE.EvtCount .BS 1 + +CORE.VBLState .BS 1 + +CORE.IRQMode .BS 1 +CORE.IRQTick .BS 1 + +CORE.TickPerSec .BS 1 +CORE.TickPer10t .BS 1 +CORE.TickSec .BS 1 +CORE.Tick10t .BS 1 *-------------------------------------- CORE.CPULoadI .BS 1 CORE.CPULoadC .AS -"/-\|" diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 67b65f1c..e0573731 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -464,7 +464,68 @@ IrqMgrInit >LDYAI MSG.IRQ lda K.MLI.PARAMS+1 sta ProDOS.INTNUM + + plp + + jsr IrqMgrInit.Mouse + bcs .1 + lda #'v' + sta SYS.BASL0+37 + + >LDYAI K.IrqHandler.VBL + >STYA K.IrqHandler+1 + + >LDYAI MSG.IRQ.VBL + >SYSCALL PrintF.YA + clc + rts + +.1 jsr IrqMgrInit.TClock + bcs .8 + + lda #'c' + sta SYS.BASL0+37 + + >LDYAI K.IrqHandler.TClock + >STYA K.IrqHandler+1 + + >LDYAI MSG.IRQ.CLOCK + >SYSCALL PrintF.YA + + clc + rts + +.8 jsr IrqMgrInit.HZ2Tick + + lda #'p' + sta SYS.BASL0+37 + + >LDYAI MSG.IRQ.POLL + >SYSCALL PrintF.YA + + clc + rts + +.9 plp + 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 @@ -484,11 +545,6 @@ IrqMgrInit >LDYAI MSG.IRQ cmp #$C8 bne .1 - plp - clc - rts - -.9 plp sec rts @@ -524,27 +580,85 @@ IrqMgrInit >LDYAI MSG.IRQ stx .7+2 ldy K.IrqMgrVBL.n0 + php + sei + bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly .7 jsr $ffff self Modified, CALL SETMOUSE - bcs * + bcs .9 bit RRAMWRAMBNK1 Back To LC Ram bit RRAMWRAMBNK1 - inc K.IrkMgr.VBL set=1 awaiting IrqMgr confirmation + + jsr IrqMgrInit.HZ2Tick + + dec CORE.IRQMode plp - lda #"V" - sta SYS.BASL0+37 - - >LDYAI MSG.IRQ.VBL - >SYSCALL PrintF.YA - clc + clc rts -*-------------------------------------- + +.9 plp + sec + rts + Mouse.OFS .HS 05070B0CFB Mouse.SIG .HS 38180120D6 *-------------------------------------- +IrqMgrInit.TClock + stz ZPPtr1 Try finding a Mouse Card... + lda #$C1 + sta ZPPtr1+1 + +.1 ldy #31 + +.2 lda (ZPPtr1),y + cmp TClock.SIG,y + bne .3 + dey + bpl .2 + bra .4 + +.3 inc ZPPtr1+1 no match, try next slot.... + lda ZPPtr1+1 + cmp #$C8 + bne .1 + +.4 lda ZPPtr1+1 get $Cn + and #$f + tax get $0n + asl + asl + asl + asl + tay get $n0 + sty K.IrqMgrVBL.n0 + + lda #$40 Enable interrupt + sta $c080,y + sta $478,x + sta $7f8,x + + lda #64 + sta CORE.TickPerSec + sta CORE.TickSec + + lda #11 + sta CORE.TickPer10t + sta CORE.Tick10t + + dec CORE.IRQMode + + clc + rts + +.9 sec + rts + +TClock.SIG .HS 0878282c58ff700538b00118b8087848 + .HS 8a489848adffcf201ac86868ba8df807 +*-------------------------------------- DevMgrInit >LDYAI MSG.DEV >SYSCALL PrintF.YA @@ -805,7 +919,9 @@ MSG.Init2.OK >CSTR "A2osX[Stage2]:Complete.\n" MSG.Init3 >CSTR "A2osX[Stage3]:Init\r\n" MSG.DEV >CSTR "-Device Manager...\r\n" MSG.IRQ >CSTR "-Interrupt Manager...\r\n" -MSG.IRQ.VBL >CSTR " (VBL IRQ Activated)\r\n" +MSG.IRQ.VBL >CSTR " (Mouse VBL IRQ Activated)\r\n" +MSG.IRQ.CLOCK >CSTR " (Clock Card IRQ Activated)\r\n" +MSG.IRQ.POLL >CSTR " (Polling Mode)\r\n" MSG.EVT >CSTR "-Event Manager...\r\n" MSG.FLT >CSTR "-Path Filter...\r\n" MSG.TSK >CSTR "-Task Manager...\r\n" diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index 4a35e900..2a60062d 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -14,17 +14,14 @@ AUTO 6 * must call regular System Handler *-------------------------------------- K.IrqHandlerAuxLC - sta K.IrqMgr.A + sta .12+1 pla pha and #$10 BRK? - beq .10 - bra * - lda K.IrqMgr.A -.82 jmp (K.IrqMgrOldFFFE) + bne .2 -.10 stx K.IrqMgr.X - sty K.IrqMgr.Y + stx .11+1 + sty .10+1 lda $fe pha lda $ff @@ -36,32 +33,54 @@ K.IrqHandlerAuxLC jsr K.IrqHandler pla Must keep Carry - bpl .81 + bpl .1 sta SETREADAUX -.81 pla + +.1 pla sta $ff pla sta $fe - ldy K.IrqMgr.Y - ldx K.IrqMgr.X - lda K.IrqMgr.A - bcs .82 + +.10 ldy #$ff Self Modified +.11 ldx #$ff Self Modified +.12 lda #$ff Self Modified + bcs .8 rti + +.2 +* bra * BRK + + lda .12+1 + +.8 jmp (K.IrqMgrOldFFFE) *-------------------------------------- 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 : * Kernel IrqHandlerAuxLC * ProDOS IRQ Manager (GP) *-------------------------------------- -K.IrqHandler lda K.IrkMgr.VBL - beq K.IrqHandler.DEV 0, totally disabled.... +K.IrqHandler jmp K.IrqHandler.DEV Modified by INIT +*-------------------------------------- +K.IrqHandler.TCLOCK + ldy K.IrqMgrVBL.n0 + lda $c080,y + and #$20 + beq K.IrqHandler.DEV + + lda $c080,y + lda $c088,y + + inc CORE.IRQTick + + lda SYS.BASL0+37 + eor #$80 + sta SYS.BASL0+37 + + clc + rts +*-------------------------------------- K.IrqHandler.VBL jsr K.IrqMgrVBL.MSM SERVEMOUSE bcs K.IrqHandler.DEV Not From Mouse @@ -74,14 +93,12 @@ K.IrqHandler.VBL ldx K.IrqMgrVBL.MRM+2 $Cn ldy K.IrqMgrVBL.n0 jsr K.IrqMgrVBL.MRM READMOUSE - - inc K.IrkMgr.VBLINT + + inc CORE.IRQTick lda SYS.BASL0+37 eor #$80 sta SYS.BASL0+37 - sec - ror K.IrkMgr.VBL Confirm VBL signal valid for EvtMgr clc rts