From 3e3aa41e877a27e316a1732306a9905a87927b17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 25 Sep 2017 17:50:33 +0200 Subject: [PATCH] Kernel 0.9.1 : Code reorganization & move to CSTR (SHELL, History, bugfix) --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/EDIT.S.txt | 9 +- BIN/LS.S.txt | 12 +-- BIN/LSDEV.S.txt | 6 +- BIN/MEMDUMP.S.txt | 35 +++++--- BIN/X.FILEENUM.S.txt | 6 +- DRV/LANCEGS.DRV.S.txt | 2 +- DRV/UTHER2.AI.DRV.S.txt | 2 +- DRV/UTHERNET.DRV.S.txt | 2 +- DRV/UTHERNET2.DRV.S.txt | 2 +- INC/A2osX.I.txt | 78 +---------------- INC/KERNEL.I.txt | 87 ++++++++++++++++++ INC/MACROS.I.txt | 38 +++++++- LIB/LIBTCPIP.S.SKT.txt | 18 ++-- LIB/LIBTCPIP.S.txt | 4 +- SBIN/KCONFIG.S.txt | 3 +- SBIN/SHELL.S.CMD.txt | 16 ++-- SBIN/SHELL.S.HIS.txt | 184 ++++++++++++++++++++------------------- SBIN/SHELL.S.txt | 5 +- SYS/KERNEL.S.ARG.txt | 69 +++++++-------- SYS/KERNEL.S.BIN.txt | 4 +- SYS/KERNEL.S.ENV.txt | 4 +- SYS/KERNEL.S.INIT.txt | 2 +- SYS/KERNEL.S.PS.txt | 37 ++++---- SYS/KERNEL.S.txt | 6 +- 26 files changed, 334 insertions(+), 297 deletions(-) create mode 100644 INC/KERNEL.I.txt diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 84311cbb8f78ffaf9aaefc54d2e611145d8ad68d..c27c0ced3f3cbe9d2c909a657cb3072247ae984e 100644 GIT binary patch delta 23277 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 VyXv>?s$|<$|7}+T4qXlG`ak%Qb%y`| delta 19220 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 J3@)<*{|4EI_Fe!0 delta 49866 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 diff --git a/BIN/EDIT.S.txt b/BIN/EDIT.S.txt index baad78ba..08b2bf1f 100644 --- a/BIN/EDIT.S.txt +++ b/BIN/EDIT.S.txt @@ -101,11 +101,10 @@ J.CTRL .DA Ctrl.Invalid .DA 0 *-------------------------------------- CS.INIT lda #$ff - ldy #bSaved - sta (pData),y - - >SYSCALL GetArgC - cmp #1 + >STA.G bSaved + + ldy #S.PS.ARGC + lda (pPs),y beq .1 No arg, new file.... lda #1 diff --git a/BIN/LS.S.txt b/BIN/LS.S.txt index fc8226f7..04ed2574 100644 --- a/BIN/LS.S.txt +++ b/BIN/LS.S.txt @@ -352,8 +352,7 @@ CS.RUN.PUSHDATES lda (ZPFileStat),y beq .1 Month=0.....invalid date/time - >LEA.G TIME.Mod - >PUSHYA + >PUSHEA.G TIME.Mod >PUSHW L.FMT.DateTime lda ZPFileStat clc @@ -368,8 +367,7 @@ CS.RUN.PUSHDATES lda (ZPFileStat),y beq .2 Month=0.....invalid date/time - >LEA.G TIME.Create - >PUSHYA + >PUSHEA.G TIME.Create >PUSHW L.FMT.DateTime lda ZPFileStat clc @@ -380,10 +378,8 @@ CS.RUN.PUSHDATES >PUSHYA >SYSCALL StrFTime -.2 >LEA.G TIME.Mod - >PUSHYA - >LEA.G TIME.Create - >PUSHYA +.2 >PUSHEA.G TIME.Mod + >PUSHEA.G TIME.Create rts *-------------------------------------- CS.RUN.UpdateColCnt diff --git a/BIN/LSDEV.S.txt b/BIN/LSDEV.S.txt index 8e35c985..3313e7ac 100644 --- a/BIN/LSDEV.S.txt +++ b/BIN/LSDEV.S.txt @@ -123,8 +123,7 @@ DumpHeader ldy #S.DEV.DRV.JMP+1 dex bpl .1 - >LEA.G DEV.SFLAGS - >PUSHYA + >PUSHEA.G DEV.SFLAGS >LDA.G DEV.ID >PUSHA @@ -148,8 +147,7 @@ DumpStatus >LDA.G DEV.S lda (ZPPTR2),y >STA.G DEV.SIZE+2 - >LEA.G DEV.SIZE - >PUSHYA + >PUSHEA.G DEV.SIZE .1 ldy #S.DEVSTAT.VERSION+1 >PUSHB (ZPPTR2),y diff --git a/BIN/MEMDUMP.S.txt b/BIN/MEMDUMP.S.txt index 5dabfac1..e5870a59 100644 --- a/BIN/MEMDUMP.S.txt +++ b/BIN/MEMDUMP.S.txt @@ -45,7 +45,7 @@ L.MSG2 .DA MSG2 L.MSG3 .DA MSG3 L.MSG4 .DA MSG4 L.MSG5 .DA MSG5 -L.MSG6 .DA MSG6 +L.MSG.FREE .DA MSG.FREE .DA 0 *-------------------------------------- CS.INIT ldy #MEM.COUNT Skip SLOT0 @@ -53,6 +53,9 @@ CS.INIT ldy #MEM.COUNT Skip SLOT0 inc sta (pData),y + >LEA.G MemStat + >SYSCALL GetMemStat.YA + lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) @@ -82,9 +85,8 @@ CS.RUN >SYSCALL GetChar lda (pData),y bne .8 - ldy #MEM.COUNT - lda (pData),y - cmp MemMgr.LastSlot + >LDA.G MEM.COUNT + >CMP.G MemStat+S.MEMSTAT.MLastSlot beq .10 ldy #LINE.COUNT @@ -144,27 +146,31 @@ CS.RUN >SYSCALL GetChar >LDYA L.MSG2 >SYSCALL PrintF.YA - >PUSHW MemMgr.HiMem + >LDYA.G MemStat+S.MEMSTAT.MH + >PUSHYA >LDYA L.MSG3 >SYSCALL PrintF.YA - >PUSHW MemMgr.Free + >LDYA.G MemStat+S.MEMSTAT.MF + >PUSHYA >LDYA L.MSG4 >SYSCALL PrintF.YA - >PUSHW MemMgr.LoMem + >LDYA.G MemStat+S.MEMSTAT.ML + >PUSHYA >LDYA L.MSG5 >SYSCALL PrintF.YA - lda MemMgr.Free sec - sbc MemMgr.LoMem - tay - lda MemMgr.Free+1 - sbc MemMgr.LoMem+1 + >LDA.G MemStat+S.MEMSTAT.MF + >SBC.G MemStat+S.MEMSTAT.ML + pha + >LDA.G MemStat+S.MEMSTAT.MF+1 + >SBC.G MemStat+S.MEMSTAT.ML+1 + ply >PUSHYA - >LDYA L.MSG6 + >LDYA L.MSG.FREE >SYSCALL PrintF.YA sec rts @@ -281,7 +287,7 @@ MSG2 >CSTR "\r\nAllocated hMem:%d, Total:%d\r\n" MSG3 >CSTR "High Memory: $%H\r\n" MSG4 >CSTR "Free ULimit: $%H\r\n" MSG5 >CSTR "Low Memory: $%H\r\n" -MSG6 >CSTR "\r\nFree Memory: %D Bytes.\r\n" +MSG.FREE >CSTR "\r\nFree Memory: %D Bytes.\r\n" *-------------------------------------- .DUMMY .OR 0 @@ -290,6 +296,7 @@ LINE.COUNT .BS 1 MEM.COUNT .BS 1 USED.COUNT .BS 1 bSTOP .BS 1 +MemStat .BS S.MEMSTAT DS.END .ED *-------------------------------------- diff --git a/BIN/X.FILEENUM.S.txt b/BIN/X.FILEENUM.S.txt index 486ff858..66691e89 100644 --- a/BIN/X.FILEENUM.S.txt +++ b/BIN/X.FILEENUM.S.txt @@ -27,8 +27,7 @@ InitSrcDirYA >SYSCALL GetFullPath.YA lda (ZPPtr1),y beq .5 we have '/' - >LEA.G STAT - >PUSHYA + >PUSHEA.G STAT >PUSHW ZPPtr1 >SYSCALL Stat bcs .1 File/DIR does not exists, go extract pattern @@ -143,8 +142,7 @@ InitDstDirYA >SYSCALL GetFullPath.YA stx .90+1 >STYA ZPPtr1 - >LEA.G STAT - >PUSHYA + >PUSHEA.G STAT >PUSHW ZPPtr1 >SYSCALL Stat bcs .1 File/DIR does not exists, go extract DstFileName diff --git a/DRV/LANCEGS.DRV.S.txt b/DRV/LANCEGS.DRV.S.txt index f6b55e1c..6f1b049a 100644 --- a/DRV/LANCEGS.DRV.S.txt +++ b/DRV/LANCEGS.DRV.S.txt @@ -83,7 +83,7 @@ Dev.Detect >STYA Args >STYA ZPTmpPTR jsr DecodeMac bcc .4 - lda #DEVMGR.ERRICL + lda #SYSMGR.ERRSYN sec rts diff --git a/DRV/UTHER2.AI.DRV.S.txt b/DRV/UTHER2.AI.DRV.S.txt index a9d0fea3..ca96362c 100644 --- a/DRV/UTHER2.AI.DRV.S.txt +++ b/DRV/UTHER2.AI.DRV.S.txt @@ -119,7 +119,7 @@ Dev.Detect >STYA Args .4 jsr DecodeMac bcc .8 - lda #DEVMGR.ERRICL + lda #SYSMGR.ERRSYN sec rts diff --git a/DRV/UTHERNET.DRV.S.txt b/DRV/UTHERNET.DRV.S.txt index 5e62fb5b..44191d1e 100644 --- a/DRV/UTHERNET.DRV.S.txt +++ b/DRV/UTHERNET.DRV.S.txt @@ -113,7 +113,7 @@ Dev.Detect >STYA ARGS .4 jsr DecodeMac bcc .8 - lda #DEVMGR.ERRICL + lda #SYSMGR.ERRSYN sec rts diff --git a/DRV/UTHERNET2.DRV.S.txt b/DRV/UTHERNET2.DRV.S.txt index ebc67717..f186b4cf 100644 --- a/DRV/UTHERNET2.DRV.S.txt +++ b/DRV/UTHERNET2.DRV.S.txt @@ -118,7 +118,7 @@ Dev.Detect >STYA Args .4 jsr DecodeMac bcc .8 - lda #DEVMGR.ERRICL + lda #SYSMGR.ERRSYN sec rts diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 98f3acad..f692a00b 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -5,20 +5,6 @@ INC 1 AUTO 6 .LIST OFF *-------------------------------------- -* KERNEL CONSTANTS DEFINITON -*-------------------------------------- -K.ENV.SIZE .EQ 256 -K.FLT.MAX .EQ 4 -K.EVT.MAX .EQ 8 -K.DEV.MAX .EQ 32 -K.PS.MAX .EQ 32 -*-------------------------------------- -* Kernel ZP Aux -*-------------------------------------- -ZPKERNEL .EQ $0 -*-------------------------------------- -ZPMEMMGR .EQ $8 -*-------------------------------------- pDrv .EQ $10 pDev .EQ $12 pEvent .EQ $14 @@ -36,63 +22,6 @@ ZPBIN .EQ $20 ZPDRV .EQ $30 ZPLIB .EQ $40 32 bytes for TCPIP *-------------------------------------- -* $42-$47 ProDOS Block Device Drivers Main -* $5E-$C8 RESERVED APPLESOFT Main/Aux (ROM Call, no need to switch back MainZP) -*-------------------------------------- -* Memory Map -*-------------------------------------- -A2osX.SaveSM .EQ $100 Aux -A2osX.SaveSX .EQ $101 Aux -*-------------------------------------- -* Main $200 -> 2FF : (Used By ProDOS,Clock DRV....) -* Main $300 -> 3EF : -* Main $3F0 -> 3FF : SYS Vectors (reset,IRQ...) -* Aux $200 -> 3FD : /RAM Driver -* Aux $3FE -> 3FF : IRQ Vector -*-------------------------------------- -K.S.STAT .EQ $0300 S.STAT for internal kernel operations -K.S.DEVSTAT .EQ $0340 S.DEVSTAT=25 or higher depends on dev type -K.SP.PARAMS .EQ $0380 Max 9 bytes -K.MLI.PARAMS .EQ $0390 Main, 18 bytes min for GetFileInfo (ATLK needs MORE!!!...32 max for now) -K.MLI.PATH .EQ $03B0 64+1 -> $03D0 -*-------------------------------------- -*** $3F0-$3FF IRQ Handler.... *** -*-------------------------------------- -* Main/Aux $400 -> $7FF : Console Screen -* Main/Aux $800 -> $BFF : System Screen -*-------------------------------------- -PS.Table.PID .EQ $0C00 K.PS.MAX -PS.Table.hMem .EQ $0C00+K.PS.MAX -K.Buf256 .EQ $0E00 Main -*-------------------------------------- -K.STACKTOP .EQ $0F20 down to $0f00 -*-------------------------------------- -*** Z80 Reserved $0F00-10FF*** -*-------------------------------------- -Z80STACK .EQ $0FFF (0FFFFh) Down to $0F20 -Z80JMP .EQ $1000 (00000h) Up To $10FF -*-------------------------------------- -FltMgr.Table .EQ $1100 K.FLT.MAX*S.FLT.SIZE=8*32=128b -*-------------------------------------- -EvtMgr.Table .EQ $1180 K.EVT.MAX*S.EVT.SIZE=16*8=128b -*-------------------------------------- -DevMgr.Table .EQ $1200 K.DEV.MAX*S.DEV.SIZE=32*16=512b -*-------------------------------------- -* MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes) -*-------------------------------------- -MemMgr.Table .EQ $1800 Slot 0 is Reserved -MemMgr.LoMem .EQ $1800 -MemMgr.Free .EQ $1802 -MemMgr.HiMem .EQ $1804 -MemMgr.LastSlot .EQ $1806 -*-------------------------------------- -MemMgr.MLoMem .EQ $2000 -MemMgr.MHiMem .EQ $BD00 -MemMgr.XLoMem .EQ $2000 -MemMgr.XHiMem .EQ $C000 -*-------------------------------------- -DevMgr.HiMem .EQ $FFFA Protect IRQ vectors in Aux LC -*-------------------------------------- * A2osX GLOBAL PAGE * $BD00->$BD0F : Public Vetors *-------------------------------------- @@ -304,10 +233,6 @@ SYS.Sleep .EQ $E0 MEMMGR.ERROOM .EQ $FF Out Of Memory Error MEMMGR.ERROOH .EQ $FE Out Of Handle Error *-------------------------------------- -DEVMGR.ERROOM .EQ $EF Out Of Memory Error -DEVMGR.ERROOH .EQ $EE Out Of Handle Error -DEVMGR.ERRICL .EQ $ED Invalid Command Line -*-------------------------------------- TSKMGR.ERROOH .EQ $DF Out Of Handle Error TSKMGR.ERRNSP .EQ $DD No Such Process Error *-------------------------------------- @@ -336,14 +261,17 @@ S.MEM .EQ 8 S.MEMSTAT.ML .EQ 0 S.MEMSTAT.MF .EQ 2 S.MEMSTAT.MH .EQ 4 +S.MEMSTAT.MLastSlot .EQ 6 * S.MEMSTAT.XL .EQ 8 S.MEMSTAT.XF .EQ 10 S.MEMSTAT.XH .EQ 12 +S.MEMSTAT.XLastSlot .EQ 14 * S.MEMSTAT.DL .EQ 16 S.MEMSTAT.DF .EQ 18 S.MEMSTAT.DH .EQ 20 +S.MEMSTAT.DCount .EQ 22 * S.MEMSTAT .EQ 24 *-------------------------------------- diff --git a/INC/KERNEL.I.txt b/INC/KERNEL.I.txt new file mode 100644 index 00000000..8ab8414a --- /dev/null +++ b/INC/KERNEL.I.txt @@ -0,0 +1,87 @@ +PR#3 +PREFIX /A2OSX.BUILD +LOMEM $900 +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +* KERNEL CONSTANTS DEFINITON +*-------------------------------------- +K.ENV.SIZE .EQ 256 +K.FLT.MAX .EQ 4 +K.EVT.MAX .EQ 8 +K.DEV.MAX .EQ 32 +K.PS.MAX .EQ 32 +*-------------------------------------- +* Kernel ZP Aux +*-------------------------------------- +ZPKERNEL .EQ $0 +ZPPtr1 .EQ ZPKERNEL +ZPPtr2 .EQ ZPKERNEL+2 +ZPPtr3 .EQ ZPKERNEL+4 +ZPPtr4 .EQ ZPKERNEL+6 +*-------------------------------------- +ZPMEMMGR .EQ $8 +*-------------------------------------- +*-------------------------------------- +* $42-$47 ProDOS Block Device Drivers Main +* $5E-$C8 RESERVED APPLESOFT Main/Aux (ROM Call, no need to switch back MainZP) +*-------------------------------------- +* Memory Map +*-------------------------------------- +A2osX.SaveSM .EQ $100 Aux +A2osX.SaveSX .EQ $101 Aux +*-------------------------------------- +* Main $200 -> 2FF : (Used By ProDOS,Clock DRV....) +* Main $300 -> 3EF : +* Main $3F0 -> 3FF : SYS Vectors (reset,IRQ...) +* Aux $200 -> 3FD : /RAM Driver +* Aux $3FE -> 3FF : IRQ Vector +*-------------------------------------- +K.S.STAT .EQ $0300 S.STAT for internal kernel operations +K.S.DEVSTAT .EQ $0340 S.DEVSTAT=25 or higher depends on dev type +K.SP.PARAMS .EQ $0380 Max 9 bytes +K.MLI.PARAMS .EQ $0390 Main, 18 bytes min for GetFileInfo (ATLK needs MORE!!!...32 max for now) +K.MLI.PATH .EQ $03B0 64+1 -> $03D0 +*-------------------------------------- +*** $3F0-$3FF IRQ Handler.... *** +*-------------------------------------- +* Main/Aux $400 -> $7FF : Console Screen +* Main/Aux $800 -> $BFF : System Screen +*-------------------------------------- +PS.Table.PID .EQ $0C00 K.PS.MAX +PS.Table.hMem .EQ $0C00+K.PS.MAX +K.Buf256 .EQ $0E00 Main +*-------------------------------------- +K.STACKTOP .EQ $0F20 down to $0f00 +*-------------------------------------- +*** Z80 Reserved $0F00-10FF*** +*-------------------------------------- +Z80STACK .EQ $0FFF (0FFFFh) Down to $0F20 +Z80JMP .EQ $1000 (00000h) Up To $10FF +*-------------------------------------- +FltMgr.Table .EQ $1100 K.FLT.MAX*S.FLT.SIZE=8*32=128b +*-------------------------------------- +EvtMgr.Table .EQ $1180 K.EVT.MAX*S.EVT.SIZE=16*8=128b +*-------------------------------------- +DevMgr.Table .EQ $1200 K.DEV.MAX*S.DEV.SIZE=32*16=512b +*-------------------------------------- +* MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes) +*-------------------------------------- +MemMgr.Table .EQ $1800 Slot 0 is Reserved +MemMgr.LoMem .EQ $1800 +MemMgr.Free .EQ $1802 +MemMgr.HiMem .EQ $1804 +MemMgr.LastSlot .EQ $1806 +*-------------------------------------- +MemMgr.MLoMem .EQ $2000 +MemMgr.MHiMem .EQ $BD00 +MemMgr.XLoMem .EQ $2000 +MemMgr.XHiMem .EQ $C000 +*-------------------------------------- +DevMgr.HiMem .EQ $FFFA Protect IRQ vectors in Aux LC +*-------------------------------------- +MAN +SAVE /A2OSX.BUILD/INC/KERNEL.I +LOAD /A2OSX.SRC/SYS/KERNEL.S +ASM diff --git a/INC/MACROS.I.txt b/INC/MACROS.I.txt index 28f497bb..f203483f 100644 --- a/INC/MACROS.I.txt +++ b/INC/MACROS.I.txt @@ -116,13 +116,28 @@ AUTO 6 * Global DATA Segment Access *-------------------------------------- .MA LEA.G - lda #]1 clc - adc pData + lda pData + adc #]1 tay lda pData+1 adc /]1 .EM +*-------------------------------------- + .MA PUSHEA.G + clc + lda pData + adc #]1 + tay + lda pData+1 + adc /]1 + + dec pStack + sta (pStack) + tya + dec pStack + sta (pStack) + .EM *-------------------------------------- .MA LDA.G ldy #]1 @@ -138,6 +153,25 @@ AUTO 6 ldy #]1 cmp (pData),y .EM +*-------------------------------------- + .MA SBC.G + ldy #]1 + sbc (pData),y + .EM +*-------------------------------------- + .MA DEC.G + ldy #]1 + lda (pData),y + dec + sta (pData),y + .EM +*-------------------------------------- + .MA INC.G + ldy #]1 + lda (pData),y + inc + sta (pData),y + .EM *-------------------------------------- .MA INCW.G ldy #]1 diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 16fc60bd..ddd2351f 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -311,27 +311,27 @@ SKT.AcceptA jsr SKT.GetA.I *\-------------------------------------- SKT.MkNodA sta NODE.SSOCK+S.NODE.SSOCK.HSKT - >SYSCALL MkNodA + >SYSCALL MkNod.A K.MkNod.A sta .1+1 >LDYAI S.NODE.SSOCK - jsr K.GetMem0.YA + >SYSCALL GetMem0.YA bcs .9 - >STYA ZPPtr1 + >STYA ZPTmpPtr1 ldy #S.NODE.T lda #S.NODE.T.SSOCK - sta (ZPPtr1),y + sta (ZPTmpPtr1),y ldy #S.NODE.SSOCK.HSKT .1 lda #$ff - sta (ZPPtr1),y - >LDYA ZPPtr1 -.9 rts + sta (ZPTmpPtr1),y + >LDYA ZPTmpPtr1 + rts @@ -342,10 +342,10 @@ K.MkNod.A sta .1+1 ldy #S.NODE.SSOCK-1 -.1 lda NODE.SSOCK,y +.2 lda NODE.SSOCK,y sta (ZPTmpPtr1),y dey - bpl .1 + bpl .2 txa * clc diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index a2a90dfa..cb40db4b 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -295,8 +295,8 @@ NODE.SSOCK .BS 1 S.NODE.HANDLER .BS 1 S.NODE.SSOCK.HSKT .DA #0 S.NODE.SSOCK.OPEN .DA #0 S.NODE.SSOCK.CLOSE - .DA LIBTCPIP.SKT.GetC.A - .DA LIBTCPIP.SKT.PutC + .DA LIBTCPIP.SKT.GetChar.A + .DA LIBTCPIP.SKT.PutChar .DA #0 S.NODE.SSOCK.STATUS *-------------------------------------- MAN diff --git a/SBIN/KCONFIG.S.txt b/SBIN/KCONFIG.S.txt index 8158cba2..1bfd4980 100644 --- a/SBIN/KCONFIG.S.txt +++ b/SBIN/KCONFIG.S.txt @@ -178,8 +178,7 @@ CS.RUN.ToggleSlotA sta (ZPTmp1),y rts *-------------------------------------- -CS.RUN.Load >LEA.G StatBuf - >PUSHYA +CS.RUN.Load >PUSHEA.G StatBuf >LDA.G hFileName >SYSCALL GetMemPtr.A >PUSHYA diff --git a/SBIN/SHELL.S.CMD.txt b/SBIN/SHELL.S.CMD.txt index 6e89635d..4201c4e8 100644 --- a/SBIN/SHELL.S.CMD.txt +++ b/SBIN/SHELL.S.CMD.txt @@ -83,7 +83,6 @@ Cmd.Exec lda #0 txa >STA.G CMD.hCmdLine - >LDYA L.INTCMDS >STYA ZPPtr2 @@ -154,8 +153,7 @@ Cmd.Exec.EXT jsr Cmd.Exec.Split cmp #'/' Command line is already full path, no search bne .1 - >LEA.G CMD.Stat - >PUSHYA + >PUSHEA.G CMD.Stat >PUSHW ZPPtr1 >SYSCALL STAT bcs Cmd.Exec.Done @@ -241,8 +239,7 @@ Cmd.Exec.EXT.Search >PUSHYA push search list >PUSHW ZPPtr1 push CMD >PUSHW ZPCMDBuf push dest full path - >LEA.G CMD.Stat - >PUSHYA + >PUSHEA.G CMD.Stat >SYSCALL FileSearch rts *-------------------------------------- @@ -356,8 +353,7 @@ Cmd.Exec.CD1 lda (ZPPTR2) Get ARG lda #'!' >SYSCALL PutChar.A - >LEA.G CMD.Stat - >PUSHYA + >PUSHEA.G CMD.Stat >PUSHW ZPCMDBuf >SYSCALL STAT bcs .9 @@ -509,8 +505,7 @@ Cmd.Exec.TIME clc bra .2 .1 >PUSHW L.FMT.TIME -.2 >LEA.G CMD.Time - >PUSHYA +.2 >PUSHEA.G CMD.Time >SYSCALL StrFTime >LDYAI ZPCMDBuf @@ -621,8 +616,7 @@ Cmd.Exec.READ lda (ZPPtr2) Cmd.Exec.SLEEP lda (ZPPtr2) beq .9 - >LEA.G Sleep - >PUSHYA + >PUSHEA.G Sleep >PUSHW ZPPtr2 >SYSCALL AToI.YA diff --git a/SBIN/SHELL.S.HIS.txt b/SBIN/SHELL.S.HIS.txt index 70058f75..360d7515 100644 --- a/SBIN/SHELL.S.HIS.txt +++ b/SBIN/SHELL.S.HIS.txt @@ -5,7 +5,7 @@ INC 1 AUTO 6 .LIST OFF *-------------------------------------- -HIS.Init >LDYAI 256 Get a buffer for History +HIS.Init >LDYAI History.MAX Get a buffer for History >SYSCALL GetMem0.YA bcs .9 @@ -13,8 +13,8 @@ HIS.Init >LDYAI 256 Get a buffer for History >STA.G HIS.hBuf lda #0 - >STA.G HIS.BufIndex - >STA.G HIS.BufEnd + >STA.G HIS.Count + >STA.G HIS.Index .9 rts *-------------------------------------- HIS.Add >LDA.G HIS.hBuf @@ -23,14 +23,25 @@ HIS.Add >LDA.G HIS.hBuf >SYSCALL GetMemPtr.A >STYA ZPPTR1 -.10 >LDA.G HIS.BufEnd +.10 lda #$ff + jsr HIS.GetA Y=ending 0 -.11 sec add len+1 + tya + + sec add len+1 adc CmdBuflen CmdBuffer length bcc .2 enough room - lda (ZPPTR1) get len of oldest string - sec + >DEC.G HIS.Count we must remove oldest + + ldy #$ff + +.12 iny + lda (ZPPTR1),y get len of oldest string + bne .12 + + tya +* sec adc ZPPTR1 sta ZPPTR2 lda ZPPTR1+1 @@ -40,122 +51,117 @@ HIS.Add >LDA.G HIS.hBuf ldy #$FF .1 iny - lda (ZPPTR2),y move back until ending 0 found + lda (ZPPTR2),y move back until String ending 0 found sta (ZPPTR1),y bne .1 - tya - - >STA.G HIS.BufEnd mark new end of history - bra .11 retry.... - -.2 tax keep new HIS.BufEnd - - tay - lda #0 - sta (ZPPTR1),y set ending 0 - - >LDA.G HIS.BufEnd save old END - pha - - txa get back new END - - >STA.G HIS.BufIndex set it as new IDX - >STA.G HIS.BufEnd set new HIS.BufEnd - - pla get back old END - clc - adc ZPPTR1 - sta ZPPTR1 - bcc .3 - inc ZPPTR1+1 - -.3 ldy #0 - -.4 lda (ZPCMDBuf),y - beq .5 - iny + lda (ZPPTR2),y move back until Array ending 0 found sta (ZPPTR1),y - iny - bra .4 + bne .1 -.5 tya - sta (ZPPTR1) + bra .10 retry.... + +.2 tya Y=Array Ending 0 + sec + adc ZPPTR1 + sta ZPPTR2 + lda ZPPTR1+1 + adc #0 + sta ZPPTR2+1 + +.3 ldy #$ff + +.4 iny + lda (ZPCMDBuf),y + sta (ZPPTR1),y + bne .4 + + iny + sta (ZPPTR1),y set new array ending 0 +* lda #0 + >STA.G HIS.Index Reset Index + + >INC.G HIS.Count + .9 rts *-------------------------------------- HIS.GetPrev >LDA.G HIS.hBuf beq HISTORY.RTS - tax - - >LDA.G HIS.BufEnd - beq HISTORY.RTS empty history,nothing to do - >LDA.G HIS.BufIndex - beq HISTORY.RTS already oldest,nothing to do - - txa - >SYSCALL GetMemPtr.A >STYA ZPPTR1 - lda #0 + >LDA.G HIS.Count + beq HISTORY.RTS empty history,nothing to do -.1 tax - tay - sec - adc (ZPPTR1),y - bcs History.RTS out of buffer + >LDA.G HIS.Index + bne .1 - ldy #HIS.BufIndex - cmp (pData),y - bne .1 reached current index + >LDA.G HIS.Count -.2 txa - >STA.G HIS.BufIndex set new index +.1 dec + >STA.G HIS.Index + + jsr HIS.GetA + bra HIS.SetBuf History.RTS rts *-------------------------------------- HIS.GetNext >LDA.G HIS.hBuf beq HISTORY.RTS - tax - - >LDA.G HIS.BufEnd - beq HISTORY.RTS empty history,nothing to do - >CMP.G HIS.BufIndex - beq HISTORY.RTS already oldest,nothing to do - - txa - >SYSCALL GetMemPtr.A >STYA ZPPTR1 - >LDA.G HIS.BufIndex - tay - sec - adc (ZPPTR1),y add length+1 of current line in history - >STA.G HIS.BufIndex + >LDA.G HIS.Count + beq HISTORY.RTS empty history,nothing to do + + >LDA.G HIS.Index + inc + >CMP.G HIS.Count + bne .1 + lda #0 + +.1 >STA.G HIS.Index + + jsr HIS.GetA - >CMP.G HIS.BufEnd bne HIS.SetBuf jmp CmdLine.CLR end of history, just blank buffer *-------------------------------------- -HIS.SetBuf jsr CmdLine.CLR - - >LDA.G HIS.BufIndex - tay keep length of string +HIS.GetA tax + beq .8 - clc - adc ZPPTR1 - sta ZPPTR1 - bcc .1 - inc ZPPTR1+1 + ldy #0 + lda (ZPPTR1),y + beq .9 + +.1 iny + lda (ZPPTR1),y + bne .1 + + dex + beq .8 + + iny + lda (ZPPTR1),y + bne .1 + +.9 sec Found ending 0.... + rts + +.8 clc + rts +*-------------------------------------- +HIS.SetBuf jsr CmdLine.CLR + + ldy #$ff .1 lda (ZPPTR1),y sta (ZPCMDBuf),y - dey - bpl .1 + bne .1 + jmp CmdLine.PRINT *-------------------------------------- HIS.Quit >LDA.G HIS.hBuf diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index 0ae7bd61..6bcd9826 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -23,6 +23,7 @@ ZPCSHStack .EQ ZPBIN+14 *-------------------------------------- CmdLine.MAX .EQ 255 VarLen.MAX .EQ 15 +History.MAX .EQ 256 CSH.Stack.MAX .EQ 15 CSH.Name.MAX .EQ 15 @@ -583,8 +584,8 @@ CMD.Stat .BS S.STAT CMD.Time .BS S.TIME HIS.hBuf .BS 1 -HIS.BufIndex .BS 1 -HIS.BufEnd .BS 1 +HIS.Count .BS 1 +HIS.Index .BS 1 IO.hIn .BS 1 IO.hOut .BS 1 diff --git a/SYS/KERNEL.S.ARG.txt b/SYS/KERNEL.S.ARG.txt index 444aaa71..e1ae2f9f 100644 --- a/SYS/KERNEL.S.ARG.txt +++ b/SYS/KERNEL.S.ARG.txt @@ -12,48 +12,41 @@ AUTO 6 * Y,A = CStr To Arg[A] * CS : Out Of Bound *\-------------------------------------- -K.GetArg.A sta .2+1 - jsr ARG.InitArgPtr1 - - lda .2+1 - beq .8 +K.GetArg.A pha save requested arg# - ldx #0 - -.1 lda (ZPPtr1) - beq .9 - -.2 cpx #$ff Self Modified - beq .8 - - jsr ARG.NextArgPtr1 - inx - bra .1 - -.8 >LDYA ZPPtr1 - clc - rts - -.9 sec - rts -*-------------------------------------- -ARG.InitArgPtr1 ldy #S.PS.hARGS + ldy #S.PS.hARGS lda (pPs),y jsr K.GetMemPtr.A - >STYA ZPPtr1 - rts -*-------------------------------------- -ARG.NextArgPtr1 inc ZPPtr1 + + plx we want 0 ? + + beq .80 yes, returns MemPtr + + >STYA ZPPtr1 no, save it + +.1 lda (ZPPtr1) end of ARG[] + beq .9 yes, not found.... + +.3 inc ZPPtr1 skip next one.... + bne .4 + inc ZPPtr1+1 + +.4 lda (ZPPtr1) + bne .3 + + inc ZPPtr1 ....and point to next, or ending 0 + bne .5 + inc ZPPtr1+1 + +.5 dex bne .1 - inc ZPPtr1+1 - -.1 lda (ZPPtr1) - bne ARG.NextArgPtr1 - - inc ZPPtr1 - bne .8 - inc ZPPtr1+1 -.8 rts + +.8 >LDYA ZPPtr1 +.80 clc + rts + +.9 sec + rts *-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.ARG diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index 0ffdb9b6..cb43526e 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -388,11 +388,11 @@ BIN.InstallDRV ldy #H.BIN.DRV.CODE.O cmp #K.DEV.MAX bne .10 No Device Handle Left - lda #DEVMGR.ERROOH + lda #MEMMGR.ERROOH sec rts -.9 lda #DEVMGR.ERROOM +.9 lda #MEMMGR.ERROOM sec rts diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index 5824ffc2..c89a769d 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -357,9 +357,9 @@ ENV.ExpandSysVar cmp #'9'+1 bcs .1 and #$0F - >DEBUG + jsr K.GetArg.A - bcs .99 + bcs .8 Arg# is undefined, do not append anything >STYA ZPPtr3 jmp ENV.AppendPtr3ToBuf diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index b041257c..67b65f1c 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -692,7 +692,7 @@ DevMgrInit.AddDev clc rts -.9 lda #DEVMGR.ERROOH +.9 lda #MEMMGR.ERROOH sec rts *-------------------------------------- diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index d10c2ab3..132ebd10 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -173,9 +173,6 @@ PS.CreateChild ldx #0 .9 rts *-------------------------------------- PS.CmdLine2Args >STYA ZPPtr1 - >SYSCALL PrintF.YA - lda #']' - >SYSCALL PutChar.A ldy #0 @@ -207,39 +204,43 @@ PS.CmdLine2Args >STYA ZPPtr1 stz PS.CmdLine2Args.bInQuote - ldy #0 + ldy #$ff ldx #0 Arg Count -.4 lda (ZPPtr1),y - beq .8 +.4 iny + lda (ZPPtr1),y + beq .7 cmp #'"' found a quote ? bne .5 lda PS.CmdLine2Args.bInQuote eor #$ff sta PS.CmdLine2Args.bInQuote - bra .71 + bra .4 .5 cmp #' ' - bne .70 + bne .6 bit PS.CmdLine2Args.bInQuote - bmi .70 + bmi .6 inx Found one arg !!! - lda #0 + lda #0 set this token End -.70 sta (ZPPtr2) yes, set this token len +.6 sta (ZPPtr2) -.71 inc ZPPtr2 - bne .72 + inc ZPPtr2 + bne .4 + inc ZPPtr2+1 + bra .4 + +.7 sta (ZPPtr2) set Arg Ending 0 + + inc ZPPtr2 + bne .8 inc ZPPtr2+1 -.72 iny - bne .4 - -.8 lda #0 - sta (ZPPtr2) set Array Ending 0 +.8 sta (ZPPtr2) set Array Ending 0 txa ldy #S.PS.ARGC diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index e0969af8..ebe6b78a 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -9,16 +9,12 @@ AUTO 6 .TF SYS/KERNEL .INB INC/MACROS.I + .INB INC/KERNEL.I .INB INC/A2OSX.I .INB INC/IO.I .INB INC/PRODOS.I .INB INC/MLI.ERR.I -ZPPtr1 .EQ ZPKERNEL -ZPPtr2 .EQ ZPKERNEL+2 -ZPPtr3 .EQ ZPKERNEL+4 -ZPPtr4 .EQ ZPKERNEL+6 - .INB /A2OSX.SRC/SYS/KERNEL.S.INIT .INB /A2OSX.SRC/X.PRINTF.S