From a40be0d7a46490f273e1ba5ae0e1f7054778e84b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 23 Jun 2016 17:56:13 +0200 Subject: [PATCH] KERNEL:Cleanup to make room for DHGR Driver --- A2OSX.BOOT.po | Bin 143360 -> 143360 bytes A2OSX.SRC.po | Bin 819200 -> 819200 bytes DRV/DHGR.DRV.S.txt | 24 +++--- INC/A2osX.I.txt | 6 +- SYS/KERNEL.S.BIN.txt | 7 ++ SYS/KERNEL.S.DEV.txt | 38 +++------ SYS/KERNEL.S.DRV.txt | 195 ++----------------------------------------- SYS/KERNEL.S.FIO.txt | 2 +- SYS/KERNEL.S.JMP.txt | 6 +- SYS/KERNEL.S.MEM.txt | 61 +++++++------- SYS/KERNEL.S.REL.txt | 189 +++++++++++++++++++++++++++++++++++++++++ SYS/KERNEL.S.RUN.txt | 45 ++++------ SYS/KERNEL.S.STR.txt | 43 +--------- SYS/KERNEL.S.TSK.txt | 37 ++++---- SYS/KERNEL.S.txt | 7 +- 15 files changed, 300 insertions(+), 360 deletions(-) diff --git a/A2OSX.BOOT.po b/A2OSX.BOOT.po index d72475fc1088542c16d65048986d92e32e311835..90e0fb98c871e6c68d836502b0f30af54332f660 100644 GIT binary patch delta 5694 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 delta 5827 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 diff --git a/A2OSX.SRC.po b/A2OSX.SRC.po index 6d9151ab0fcd9442584eaf515260e5cafa4fd6ed..c32d67952c4faa0c8e15b869621f972e69f2f2ae 100644 GIT binary patch delta 25051 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%0A1S4IN=MHy{MW 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 delta 26142 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 LBJ=*DxTXIOa*7LP diff --git a/DRV/DHGR.DRV.S.txt b/DRV/DHGR.DRV.S.txt index ef438314..3a030e60 100644 --- a/DRV/DHGR.DRV.S.txt +++ b/DRV/DHGR.DRV.S.txt @@ -620,18 +620,18 @@ HIDECUR.RTS clc *-------------------------------------- DRV.CS.END *-------------------------------------- -Shift0.lo .BS 1 -Shift0.hi .BS 1 -Shift1.lo .BS 1 -Shift1.hi .BS 1 -Shift2.lo .BS 1 -Shift2.hi .BS 1 -Shift3.lo .BS 1 -Shift3.hi .BS 1 -Shift4.lo .BS 1 -Shift4.hi .BS 1 -Shift5.lo .BS 1 -Shift5.hi .BS 1 +Shift0.lo .BS 128 +Shift0.hi .BS 128 +Shift1.lo .BS 128 +Shift1.hi .BS 128 +Shift2.lo .BS 128 +Shift2.hi .BS 128 +Shift3.lo .BS 128 +Shift3.hi .BS 128 +Shift4.lo .BS 128 +Shift4.hi .BS 128 +Shift5.lo .BS 128 +Shift5.hi .BS 128 Shift6.lo .BS 128 Shift6.hi .BS 128 *-------------------------------------- diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 23e629c8..c1592aad 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -130,10 +130,6 @@ A2osX.RANDOM16 .EQ $BEEE *-------------------------------------- A2osX.HZ .EQ $BEF0 *-------------------------------------- -* Kernel Entry Point -*-------------------------------------- -KERNEL.SYSCALL .EQ $E000 -*-------------------------------------- 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) @@ -165,7 +161,7 @@ SYS.FreeStockObject .EQ $0E SYS.NewPStrYA .EQ $10 SYS.PStrCpyA .EQ $12 SYS.PStrCat .EQ $14 -SYS.PStrCmp .EQ $16 + SYS.PStrGetTkn .EQ $18 diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index f672375f..15ae3559 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -96,8 +96,15 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path sta R.DH >LDYA ZPQuickPtr1 + + bit RRAMWRAMBNK2 + bit RRAMWRAMBNK2 + jsr S.BinRelocateYA + bit RRAMWRAMBNK1 + bit RRAMWRAMBNK1 + bcs .98 relocation error, dicard Code segment lda S.LoadBinA.hFilename get back bin path diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index c7e4c262..08077b8b 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -55,16 +55,15 @@ S.GetDevByNameYA ldx #0 -.1 lda (ZPQuickPtr1) - cmp (ZPQuickPtr2) - bne .3 - - tay +.1 ldy #0 + .2 lda (ZPQuickPtr1),y cmp (ZPQuickPtr2),y bne .3 - dey + tya + iny + cmp (ZPQuickPtr1) bne .2 lda ZPQuickPtr2 @@ -293,17 +292,7 @@ DevMgr.SYS.Scroll bpl .3 cpx #23 - bne .1 - - ldy #39 - lda #$A0 -.4 sta SETWRITEAUX - sta (ZPDRV+2),y - sta CLRWRITEAUX - sta (ZPDRV+2),y - dey - bpl .4 - rts + bne .1 Fall in ClrLineAtX for last line *-------------------------------------- DevMgr.SYS.ClrLineAtX lda DevMgr.SYS.BASEL,x @@ -314,17 +303,14 @@ DevMgr.SYS.ClrLineAtX lda #$A0 ldy #39 - sta SETWRITEAUX -.1 sta (ZPDRV),y + +.1 sta SETWRITEAUX + sta (ZPDRV),y + sta CLRWRITEAUX + sta (ZPDRV),y dey bpl .1 - ldy #39 - sta CLRWRITEAUX -.2 sta (ZPDRV),y - dey - bpl .2 - rts *-------------------------------------- DevMgr.SYS.Home ldx #23 @@ -372,7 +358,7 @@ DevMgr.SYS.CPULOADC .AS -"|/-\" DevMgr.SYS.TITLE >CSTRING "A2osX System Screen" DevMgr.SYS.BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0 DevMgr.SYS.BASEH .HS 08.08.09.09.0A.0A.0B.0B.08.08.09.09.0A.0A.0B.0B.08.08.09.09.0A.0A.0B.0B -*--------------------------------------*-------------------------------------- +*-------------------------------------- DevMgr.End .EQ * MAN SAVE SYS/KERNEL.S.DEV diff --git a/SYS/KERNEL.S.DRV.txt b/SYS/KERNEL.S.DRV.txt index a0ae9a3b..ff00ac4b 100644 --- a/SYS/KERNEL.S.DRV.txt +++ b/SYS/KERNEL.S.DRV.txt @@ -44,7 +44,14 @@ S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn bcs .95 + bit RRAMWRAMBNK2 + bit RRAMWRAMBNK2 + jsr S.InsDrv + + bit RRAMWRAMBNK1 + bit RRAMWRAMBNK1 + bcs .95 jsr .95 @@ -89,195 +96,7 @@ S.LoadDrv.Srch .BS 1 S.LoadDrv.FullName .BS 1 S.LoadDrv.hMem .BS 1 *-------------------------------------- -* pDrv = .DRV File Loaded Address -*-------------------------------------- -S.InsDrv ldy #H.BIN.DRV.CODE.LEN - lda (pDrv),y - sta R.AL - iny - lda (pDrv),y - sta R.AH - - ldy #H.BIN.DRV.CODE.O - lda (pDrv),y - clc - adc S.LoadBinA.AuxType - sta R.BL - iny - lda (pDrv),y - adc S.LoadBinA.AuxType+1 - sta R.BH set BX=End Of Code - - lda S.LoadBinA.AuxType - clc - adc S.LoadBinA.FileLen - sta R.CL - lda S.LoadBinA.AuxType+1 - adc S.LoadBinA.FileLen+1 - sta R.CH set CX=End Of Range - - ldy #H.BIN.DRV.CODE.O - lda S.LoadBinA.FileLen - sec - sbc (pDrv),y - sta S.InsDrv.DRVLen - iny - lda S.LoadBinA.FileLen+1 - sbc (pDrv),y - sta S.InsDrv.DRVLen+1 Compute DRV Len - - lda DevMgr.Free - clc - adc S.InsDrv.DRVLen - sta S.InsDrv.DRVEnd - lda DevMgr.Free+1 - adc S.InsDrv.DRVLen+1 - sta S.InsDrv.DRVEnd+1 - - bcs .98 we crossed $FFFF, out of mem - - lda S.InsDrv.DRVEnd - sec - sbc #DevMgr.HiMem - lda S.InsDrv.DRVEnd+1 - sbc /DevMgr.HiMem - bcs .98 No More Room to load Driver.... - - lda DevMgr.LastDevID - inc - cmp #K.DEV.MAX - beq .99 No Device Handle Left - - sta DevMgr.LastDevID - - ldy #H.BIN.DEV.HEADER.O - lda (pDrv),y - clc - adc pDrv - sta ZPQuickPtr1 - iny - lda (pDrv),y - adc pDrv+1 - sta ZPQuickPtr1+1 - - ldy #S.DEV.JMP - - lda DevMgr.Free - sec - sbc (ZPQuickPtr1),y - sta R.DL - lda DevMgr.Free+1 - iny - sbc (ZPQuickPtr1),y - sta R.DH set DX=Offset - - ldy #H.BIN.DRV.CODE.O - lda (pDrv),y - clc - adc pDrv - pha - iny - lda (pDrv),y - adc pDrv+1 - ply - - jsr S.DrvRelocateYA - - jsr S.InsDrv.Move - - >LDYA S.InsDrv.DrvEnd - >STYA DevMgr.Free - clc - rts - -.98 lda #DEVMGR.ERROOM - sec - rts - -.99 lda #DEVMGR.ERROOH - sec - rts -*-------------------------------------- -S.InsDrv.Move ldy #H.BIN.DEV.HEADER.O - lda (pDrv),y - clc - adc pDrv - sta ZPQuickPtr1 - iny - lda (pDrv),y - adc pDrv+1 - sta ZPQuickPtr1+1 - - ldy #S.DEV.JMP Relocate Main JMP - lda (ZPQuickPtr1),y - clc - adc R.DL - sta (ZPQuickPtr1),y - iny - lda (ZPQuickPtr1),y - adc R.DH - sta (ZPQuickPtr1),y - - lda DevMgr.LastDevID - jsr S.GetDevByIDA - >STYA pDev - - ldy #S.DEV.SIZE Make sure DevMgr.Table Ends with 0 - lda #0 - sta (pDev),y - dey - -.1 lda (ZPQuickPtr1),y Copy DRV.Header - sta (pDev),y - dey - bpl .1 - - lda DevMgr.LastDevID Save Dev.ID in the driver for SELECT - ldy #S.DEV.ID - sta (pDev),y - - ldy #H.BIN.DRV.CODE.O - lda (pDrv),y - clc - adc pDrv - sta ZPQuickPtr1 - iny - lda (pDrv),y - adc pDrv+1 - sta ZPQuickPtr1+1 Make ZPQuickPtr1=DRV.CODE - - lda DevMgr.Free - sta ZPQuickPtr2 - lda DevMgr.Free+1 - sta ZPQuickPtr2+1 Make ZPQuickPtr2=Dest Ram Location - - ldy S.InsDrv.DrvLen - ldx S.InsDrv.DrvLen+1 - -.2 lda (ZPQuickPtr1) - sta (ZPQuickPtr2) - - inc ZPQuickPtr1 - bne .3 - inc ZPQuickPtr1+1 - -.3 inc ZPQuickPtr2 - bne .4 - inc ZPQuickPtr2+1 - -.4 tya - bne .5 - txa - beq .8 - dex - -.5 dey - bra .2 -.8 rts -*-------------------------------------- ENV.DRV >PSTRING "DRV" -S.InsDrv.DrvLen .BS 2 -S.InsDrv.DrvEnd .BS 2 *-------------------------------------- MAN SAVE SYS/KERNEL.S.DRV diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index a2424224..b423d7c7 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -479,7 +479,7 @@ S.ListDirNextAD stz R.DL Reset Return Record hMem bne .31 >PUSHWI TmpFileName push Filename PTR - jsr S.PStrMatchP + jsr S.PStrMatch bcs .5 no match .30 ldy #S.LISTDIR.EL Get Entry length diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index d12b1026..0ed7a7f3 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -5,9 +5,9 @@ INC 1 AUTO 6 .LIST OFF *-------------------------------------- -* $E000-E0FF KERNEL.SYSCALL Jmp Table +* $D000-D0FF KERNEL.SYSCALL Jmp Table *-------------------------------------- - .DA S.GetMem $00 +KERNEL.SYSCALL .DA S.GetMem $00 .DA S.FreeMemA .DA S.GetMemPtrA .DA S.GetMemByIDA @@ -19,7 +19,7 @@ AUTO 6 .DA S.NewPStrYA $10 .DA S.PStrCpyA .DA S.PStrCat - .DA S.PStrCmp + .DA 0 .DA S.PStrGetTkn .DA 0 .DA S.GetArgCount diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 36a505ff..fd98d6ad 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -37,20 +37,19 @@ S.GetMem >PULLB MemMgr.ReqFlags store requested flags sta SETREADAUX Aux Mem requested,switch to AUX sta SETWRITEAUX -.11 >PULLW MemMgr.ReqSize Store requested size - lda MemMgr.ReqSize align REQS to 16 bytes - and #$0F +.11 >PULLAX Store requested size + bit #$0F beq .10 - lda MemMgr.ReqSize and #$F0 clc adc #$10 - sta MemMgr.ReqSize bcc .10 - inc MemMgr.ReqSize+1 + inx -.10 >LDYAI MemMgr.Table +.10 >STAX MemMgr.ReqSize + + >LDYAI MemMgr.Table >STYA ZPMemMgrSPtr ldx #0 Current slot=0 @@ -110,8 +109,9 @@ S.GetMem >PULLB MemMgr.ReqFlags store requested flags and #S.MEM.F.INIT0 beq .8 - + phx save hMem jsr MemMgr.Init0 + plx restore hMem .8 lda #0 ldy #S.MEM.BIN @@ -207,34 +207,35 @@ MemMgr.NextSlot lda ZPMemMgrSPtr *-------------------------------------- MemMgr.Init0 ldy #S.MEM.PTR lda (ZPMemMgrSPtr),y ZPMemMgrSPtr already set - sta ZPMemMgrTmp1 set ZPMemMgrTmp1 to Mem Ptr + sta .2+1 iny lda (ZPMemMgrSPtr),y - sta ZPMemMgrTmp1+1 + sta .2+2 ldy #S.MEM.LEN lda (ZPMemMgrSPtr),y - sta ZPMemMgrTmp2 set ZPMemMgrTmp2 to mem size + eor #$ff + pha + iny lda (ZPMemMgrSPtr),y - sta ZPMemMgrTmp2+1 - - lda #0 - -.1 ldy ZPMemMgrTmp2 - bne .2 - ldy ZPMemMgrTmp2+1 - beq .3 - dec ZPMemMgrTmp2+1 -.2 dec ZPMemMgrTmp2 + eor #$ff a=not hi count - sta (ZPMemMgrTmp1) - inc ZPMemMgrTmp1 - bne .1 - inc ZPMemMgrTmp1+1 - bra .1 + ply y=not lo count + ldx #0 -.3 rts +.1 iny + bne .2 + inc + beq .8 + +.2 stz $ffff,x + inx + bne .1 + inc .2+2 + bne .1 + +.8 rts *-------------------------------------- MemMgr.SlotCnt .BS 1 MemMgr.ReqFlags .BS 1 store requested Flags @@ -336,12 +337,14 @@ S.GetMemByIDA stz ZPMemMgrSPtr+1 asl rol ZPMemMgrSPtr+1 - clc +* clc IMPLICIT + adc #MemMgr.Table - sta ZPMemMgrSPtr tay lda ZPMemMgrSPtr+1 adc /MemMgr.Table + + sty ZPMemMgrSPtr sta ZPMemMgrSPtr+1 rts *-------------------------------------- diff --git a/SYS/KERNEL.S.REL.txt b/SYS/KERNEL.S.REL.txt index fedd59e0..50dbd7f6 100644 --- a/SYS/KERNEL.S.REL.txt +++ b/SYS/KERNEL.S.REL.txt @@ -124,6 +124,195 @@ S.CodeRelocate lda ZPQuickPtr1 clc rts *-------------------------------------- +* pDrv = .DRV File Loaded Address +*-------------------------------------- +S.InsDrv ldy #H.BIN.DRV.CODE.LEN + lda (pDrv),y + sta R.AL + iny + lda (pDrv),y + sta R.AH + + ldy #H.BIN.DRV.CODE.O + lda (pDrv),y + clc + adc S.LoadBinA.AuxType + sta R.BL + iny + lda (pDrv),y + adc S.LoadBinA.AuxType+1 + sta R.BH set BX=End Of Code + + lda S.LoadBinA.AuxType + clc + adc S.LoadBinA.FileLen + sta R.CL + lda S.LoadBinA.AuxType+1 + adc S.LoadBinA.FileLen+1 + sta R.CH set CX=End Of Range + + ldy #H.BIN.DRV.CODE.O + lda S.LoadBinA.FileLen + sec + sbc (pDrv),y + sta S.InsDrv.DRVLen + iny + lda S.LoadBinA.FileLen+1 + sbc (pDrv),y + sta S.InsDrv.DRVLen+1 Compute DRV Len + + lda DevMgr.Free + clc + adc S.InsDrv.DRVLen + sta S.InsDrv.DRVEnd + lda DevMgr.Free+1 + adc S.InsDrv.DRVLen+1 + sta S.InsDrv.DRVEnd+1 + + bcs .98 we crossed $FFFF, out of mem + + lda S.InsDrv.DRVEnd + sec + sbc #DevMgr.HiMem + lda S.InsDrv.DRVEnd+1 + sbc /DevMgr.HiMem + bcs .98 No More Room to load Driver.... + + lda DevMgr.LastDevID + inc + cmp #K.DEV.MAX + beq .99 No Device Handle Left + + sta DevMgr.LastDevID + + ldy #H.BIN.DEV.HEADER.O + lda (pDrv),y + clc + adc pDrv + sta ZPQuickPtr1 + iny + lda (pDrv),y + adc pDrv+1 + sta ZPQuickPtr1+1 + + ldy #S.DEV.JMP + + lda DevMgr.Free + sec + sbc (ZPQuickPtr1),y + sta R.DL + lda DevMgr.Free+1 + iny + sbc (ZPQuickPtr1),y + sta R.DH set DX=Offset + + ldy #H.BIN.DRV.CODE.O + lda (pDrv),y + clc + adc pDrv + pha + iny + lda (pDrv),y + adc pDrv+1 + ply + + jsr S.DrvRelocateYA + + jsr S.InsDrv.Move + + >LDYA S.InsDrv.DrvEnd + >STYA DevMgr.Free + clc + rts + +.98 lda #DEVMGR.ERROOM + sec + rts + +.99 lda #DEVMGR.ERROOH + sec + rts +*-------------------------------------- +S.InsDrv.Move ldy #H.BIN.DEV.HEADER.O + lda (pDrv),y + clc + adc pDrv + sta ZPQuickPtr1 + iny + lda (pDrv),y + adc pDrv+1 + sta ZPQuickPtr1+1 + + ldy #S.DEV.JMP Relocate Main JMP + lda (ZPQuickPtr1),y + clc + adc R.DL + sta (ZPQuickPtr1),y + iny + lda (ZPQuickPtr1),y + adc R.DH + sta (ZPQuickPtr1),y + + lda DevMgr.LastDevID + jsr S.GetDevByIDA + >STYA pDev + + ldy #S.DEV.SIZE Make sure DevMgr.Table Ends with 0 + lda #0 + sta (pDev),y + dey + +.1 lda (ZPQuickPtr1),y Copy DRV.Header + sta (pDev),y + dey + bpl .1 + + lda DevMgr.LastDevID Save Dev.ID in the driver for SELECT + ldy #S.DEV.ID + sta (pDev),y + + ldy #H.BIN.DRV.CODE.O + lda (pDrv),y + clc + adc pDrv + sta ZPQuickPtr1 + iny + lda (pDrv),y + adc pDrv+1 + sta ZPQuickPtr1+1 Make ZPQuickPtr1=DRV.CODE + + lda DevMgr.Free + sta ZPQuickPtr2 + lda DevMgr.Free+1 + sta ZPQuickPtr2+1 Make ZPQuickPtr2=Dest Ram Location + + ldy S.InsDrv.DrvLen + ldx S.InsDrv.DrvLen+1 + +.2 lda (ZPQuickPtr1) + sta (ZPQuickPtr2) + + inc ZPQuickPtr1 + bne .3 + inc ZPQuickPtr1+1 + +.3 inc ZPQuickPtr2 + bne .4 + inc ZPQuickPtr2+1 + +.4 tya + bne .5 + txa + beq .8 + dex + +.5 dey + bra .2 +.8 rts +*-------------------------------------- +S.InsDrv.DrvLen .BS 2 +S.InsDrv.DrvEnd .BS 2 +*-------------------------------------- * 65C02 OPCODES * Bit 7 : 1 absolute addressing * Bit 1-0 : opcode + @ length diff --git a/SYS/KERNEL.S.RUN.txt b/SYS/KERNEL.S.RUN.txt index 0a822169..45e240f5 100644 --- a/SYS/KERNEL.S.RUN.txt +++ b/SYS/KERNEL.S.RUN.txt @@ -6,13 +6,8 @@ AUTO 6 .LIST OFF *-------------------------------------- S.KernelRun jsr S.TskMgrRun - bcc S.KernelRun.EVT - jsr DevMgr.SYS.Select - >LDYAI MSG.KRNLPANIC - jsr S.PSTROutYA - bra * - -S.KernelRun.EVT + bcs .9 + jsr S.GetEvents bcs S.KernelRun CS=no event @@ -34,7 +29,7 @@ S.KernelRun.EVT lda (pEvent),y bpl .7 - ldy #S.EVT.DATALO + dey S.EVT.DATALO lda (pEvent),y cmp #'1' @@ -64,7 +59,13 @@ S.KernelRun.EVT sta A2osX.ASCREEN bra .8 -.7 jsr S.DumpEvent +.7 ldy #S.EVT.DATAW2+1 +.71 >PUSHB (pEvent),y + dey + bpl .71 + + >LDYAI MSG.DumpEvent + jsr S.PSTROutYA .8 jsr S.DestroyEvent @@ -74,29 +75,13 @@ S.KernelRun.EVT sta pEvent lda EVTMGR.COUNT bne .1 - jmp S.KernelRun -*-------------------------------------- -S.DumpEvent ldy #S.EVT.DATAW2+1 - >PUSHB (pEvent),y - dey - >PUSHB (pEvent),y - ldy #S.EVT.DATAW1+1 - >PUSHB (pEvent),y - dey - >PUSHB (pEvent),y - - ldy #S.EVT.DATAHI - >PUSHB (pEvent),y - ldy #S.EVT.DATALO - >PUSHB (pEvent),y - - ldy #S.EVT.hDEV - >PUSHB (pEvent),y + beq S.KernelRun - >PUSHB (pEvent) - >LDYAI MSG.DumpEvent - jmp S.PSTROutYA +.9 jsr DevMgr.SYS.Select + >LDYAI MSG.KRNLPANIC + jsr S.PSTROutYA + bra * *-------------------------------------- MSG.DumpEvent >PSTRING "!Unhandled Event:Flags=%h,DevID=%h,DATALO=%h,DATAHI=%h,W1=%H,W2=%H\n" MSG.KRNLPANIC >PSTRING "\n!!!Kernel Panic!!!\n" diff --git a/SYS/KERNEL.S.STR.txt b/SYS/KERNEL.S.STR.txt index dd14aa8d..49426286 100644 --- a/SYS/KERNEL.S.STR.txt +++ b/SYS/KERNEL.S.STR.txt @@ -93,53 +93,18 @@ S.PStrCat >PULLA .9 sec rts *-------------------------------------- -* S.PStrCmp -* IN: -* PULLB = hMem to S1 (PSTRING) -* PULLB = hMem to S2 (PSTRING) -* OUT: -* cc or cs -*-------------------------------------- -S.PStrCmp >PULLA - jsr S.GetMemPtrA - >STYA ZPQuickPtr1 save S1 - >PULLA - jsr S.GetMemPtrA - >STYA ZPQuickPtr2 save S2 - lda (ZPQuickPtr1) - tay - cmp (ZPQuickPtr2) - bne .9 -.1 lda (ZPQuickPtr1),y - cmp (ZPQuickPtr2),y - bne .9 - dey - bne .1 - clc - rts -.9 sec - rts -*-------------------------------------- * S.PStrMatch * IN: -* PULLB = hMem to String (PSTRING) -* PULLB = hMem to Pattern (PSTRING) +* PULLB = PTR to String (PSTRING) +* PULLB = PTR to Pattern (PSTRING) * OUT: * cc = match * cs = no match *-------------------------------------- -S.PStrMatch >PULLA - jsr S.GetMemPtrA - >STYA ZPQuickPtr2 save String - >PULLA - jsr S.GetMemPtrA - >STYA ZPQuickPtr1 save Pattern - bra S.PStrMatch1 - -S.PStrMatchP >PULLW ZPQuickPtr2 pull String +S.PStrMatch >PULLW ZPQuickPtr2 pull String >PULLW ZPQuickPtr1 pull Pattern -S.PStrMatch1 lda (ZPQuickPTR1) Keep Pattern Length in X + lda (ZPQuickPTR1) Keep Pattern Length in X tax beq .8 Match always if empty ldy #0 diff --git a/SYS/KERNEL.S.TSK.txt b/SYS/KERNEL.S.TSK.txt index 034b58c4..8632461a 100644 --- a/SYS/KERNEL.S.TSK.txt +++ b/SYS/KERNEL.S.TSK.txt @@ -104,15 +104,13 @@ S.DispatchEvents sta TSKMGR.COUNT .1 lda (pPs) get S.PS.F - and #S.PS.F.INUSE In use ? + bit #S.PS.F.INUSE In use ? beq .4 - lda (pPs) get S.PS.F - and #S.PS.F.HOLD Waiting for Another Task to Terminate? + bit #S.PS.F.HOLD Waiting for Another Task to Terminate? bne .4 - lda (pPs) get S.PS.F - and #S.PS.F.EVENT Accept Events ? + bit #S.PS.F.EVENT Accept Events ? beq .4 jsr S.SelectProcess @@ -285,29 +283,25 @@ S.GetPSByIDA sta S.GetPSByIDA.PS *-------------------------------------- S.GetPSByIDA.PS .BS 1 *-------------------------------------- -S.Sleep ldy #S.PS.hCS - lda (pPs),y - >SYSCALL SYS.GetMemPtrA - >STYA S.Sleep.SaveCS - ldy #S.PS.PC - pla get PC LO +S.Sleep pla get PC LO plx get PC HI + inc Advance PC one Byte bne .1 inx .1 sec - sbc S.Sleep.SaveCS + + sbc pCode + ldy #S.PS.PC sta (pPs),y - iny txa - sbc S.Sleep.SaveCS+1 + sbc pCode+1 + iny sta (pPs),y clc No error, rts back to Kernel *-------------------------------------- -S.Sleep.SaveCS .BS 2 -*-------------------------------------- * PRIVATE *-------------------------------------- * S.CreateChildProcess @@ -398,14 +392,11 @@ S.CreateChildProcess sta (R.AX),y .8 ldy #S.PS.hINDEV - lda (pPs),y - sta (R.AX),y - ldy #S.PS.hOUTDEV - lda (pPs),y - sta (R.AX),y - ldy #S.PS.hERRDEV - lda (pPs),y +.81 lda (pPs),y sta (R.AX),y + iny + cpy #S.PS.hERRDEV+1 + bne .81 ldy #S.PS.ID lda (pPs),y diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index ef49ab95..6cc01f52 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -216,11 +216,13 @@ A2osX.BE00.END .EQ * *-------------------------------------- A2osX.D001 .EQ * .PH $D000 + .INB SYS/KERNEL.S.JMP .INB SYS/KERNEL.S.STR .INB SYS/KERNEL.S.CIO .INB SYS/KERNEL.S.FIO .INB SYS/KERNEL.S.MLI .INB SYS/KERNEL.S.ENV + .INB SYS/KERNEL.S.EVT .EP A2osX.D001.END .EQ * *-------------------------------------- @@ -228,7 +230,7 @@ A2osX.D001.END .EQ * *-------------------------------------- A2osX.D002 .EQ * .PH $D000 - cld + .INB SYS/KERNEL.S.REL .EP A2osX.D002.END .EQ * *-------------------------------------- @@ -236,16 +238,13 @@ A2osX.D002.END .EQ * *-------------------------------------- A2osX.E000 .EQ * .PH $E000 - .INB SYS/KERNEL.S.JMP .INB SYS/KERNEL.S.RUN .INB SYS/KERNEL.S.IRQ .INB SYS/KERNEL.S.MEM .INB SYS/KERNEL.S.BIN .INB SYS/KERNEL.S.DRV .INB SYS/KERNEL.S.LIB - .INB SYS/KERNEL.S.REL .INB SYS/KERNEL.S.TSK - .INB SYS/KERNEL.S.EVT *-------------------------------------- * Make sure KERNEL.S.DEV is the last one *--------------------------------------