From f624c10bd741bb56feb38b71b46f8160727b0db8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Tue, 19 Sep 2017 08:39:27 +0200 Subject: [PATCH] Kernel 0.9.1 : Code reorganization & move to CSTR : External commands (CAT) --- .Docs/KERNEL.md | 54 +++++++++--------- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/CAT.S.txt | 115 ++++++++++++++++++--------------------- 4 files changed, 81 insertions(+), 88 deletions(-) diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index 635a4835..3bb058f8 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -19,6 +19,31 @@ Returns argument count in the process command line. + Y,A = CStr To Arg[A] + CS : Out Of Bound +# FileSearch +Search a file in the provided PATH list +And return, if found, the full path to it. + +## In: ++ PUSHW = Ptr to Search Path (CSTR) %LIB%;/SYS/SLIB ++ PUSHW = Ptr to File Name (CSTR) ++ PUSHW = Ptr to DstBuf ++ PUSHW = Ptr to DstStat + +## Out: ++ CC : success + + DstBuf = FilePath + + DstStat = S.STAT ++ CS : not found + +# Sleep +Make current process suspend until next RUN + +## In : ++ (none) + +## Out : ++ (none) + # GetDevByID.A ## IN: @@ -32,7 +57,7 @@ Returns argument count in the process command line. # GetDevByName.YA ## IN: -+ Y,A = Ptr to device name (PStr) ++ Y,A = Ptr to device name (C-String) ## OUT: + CC = OK, CS = ERROR @@ -120,22 +145,6 @@ Returns argument count in the process command line. ## Out: -# FileSearch -Search a file in the provided PATH list -And return, if found, the full path to it. - -## In: -+ PUSHW = Ptr to Search Path (CSTR) %LIB%;/SYS/SLIB -+ PUSHW = Ptr to File Name (CSTR) -+ PUSHW = Ptr to DstBuf -+ PUSHW = Ptr to DstStat - -## Out: -+ CC : success - + DstBuf = FilePath - + DstStat = S.STAT -+ CS : not found - # GetFullPath.YA ## In : @@ -280,18 +289,9 @@ Create a new copy of this C-String ## Out: + Buffer filled with memory stats -# Sleep -Make current process suspend until next RUN - -## In : -+ (none) - -## Out : -+ (none) - # ExecProcessNewEnv.YA -# ExecProcess.YA (Blocking Parent PID) +# ExecProcess.YA (Blocking Parent PID) # CreateProcessNewEnv.YA diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 0d17a21bcf9788d31d35118193dc9246c6568e9f..de80f1f8faf15f36d8c9bb833ab5a89c0b1dcc39 100644 GIT binary patch delta 702 zcmYLGO=uHA6rSvECe0s&DJ-#CeVKtkK_P@Hp@(9@LkcQFDG0r6bBY&1d$J(eCg}o0#uK51A2xFN5d{M{dFyw?vhf*=Ak(l&5S`G@P=`kU)(d1k+)LD?VBN zYm;zYM&TNt5;(_kOcl%Vmj4TiPWMW$0lt^KYkW$w)sOW(*3$)2iEbiB)YF^CdQW%e zp@sH$^1;n81=nfOa8b>8)@Cm|jHlxpLOhOlp7e=N3NUE1D7_GpAr10jj%R&RdE^Rt zCUz0e+5`?u-o1W@`7{9UPLPk5xGMT?4K6|dB1oa};oFl+eh+F7VY>x8KTk_$Bovln zozT+YeiJNz5?1`J11nD0g_NmRn-J((CnxLPRYU@JjrkrY5!r(mgXC@qm z(~#{qo^LT>hbx9ZL$i(0NK@25iH7cKaXNkGOw8d_WM3ZUXnitWQy4nfV$OlcH){q@ ziFZuKfAU$PtSGZd)2WK%qER#O((RS?`x~m36l=7osjm_iRxPYqIB8*Q;gp4^ES$D* L#=_Y*IJfx^`;GdS delta 600 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 diff --git a/BIN/CAT.S.txt b/BIN/CAT.S.txt index cf7dc5f8..4876b431 100644 --- a/BIN/CAT.S.txt +++ b/BIN/CAT.S.txt @@ -13,6 +13,7 @@ AUTO 6 .INB /A2OSX.BUILD/INC/MLI.ERR.I *-------------------------------------- ZPPTR1 .EQ ZPBIN +ZPBufPtr .EQ ZPBIN+2 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -38,15 +39,18 @@ L.MSG.CTRLCHAR .DA MSG.CTRLCHAR L.ASCII .DA ASCII .DA 0 *-------------------------------------- -CS.INIT >SYSCALL GetArgC - sta ArgCount - cmp #1 +CS.INIT ldy #S.PS.ARGC + lda (pPs),y beq .99 -.1 dec ArgCount - beq .5 + >STA.G ArgCount + +.1 >LDA.G ArgCount + dec + bmi .5 + + sta (pData),y - lda ArgCount >SYSCALL GetArg.A >STYA ZPPtr1 @@ -80,21 +84,30 @@ CS.INIT >SYSCALL GetArgC sta (pData),y bra .1 -.4 inc FileCount +.4 >LDA.G FileCount + inc + sta (pData),y bra .1 scan for any other args -.5 lda FileCount +.5 >LDA.G FileCount beq .99 + >LDYAI 256 + >SYSCALL GetMem.YA + bcs .9 + + >STYA ZPBufPtr + txa + >STA.G hBuf .8 * lda (pPs) * ora #S.PS.F.EVENT Now accept events * sta (pPs) clc - rts +.9 rts *-------------------------------------- -CS.RUN >SYSCALL GetC +CS.RUN >SYSCALL GetChar bcs .10 no char cmp #$03 Ctrl-C @@ -103,22 +116,18 @@ CS.RUN >SYSCALL GetC cmp #$13 Ctrl-S bne .10 - ldy #bPause - lda (pData),y + >LDA.G bPause eor #$ff sta (pData),y bne .8 -.10 ldy #bPause - lda (pData),y +.10 >LDA.G bPause bne .8 Pause... - ldy #hFILE - lda (pData),y + >LDA.G hFILE bne .2 -.1 ldy #ArgIndex - lda (pData),y +.1 >LDA.G ArgIndex inc sta (pData),y >SYSCALL GetArg.A @@ -136,14 +145,13 @@ CS.RUN >SYSCALL GetC jsr CS.RUN.OPEN bcs .9 - ldy #hFILE - sta (pData),y - + >STA.G hFILE + clc rts .2 pha - >PUSHWI UsrBuf256 + >PUSHW ZPBufPtr >PUSHWI 256 pla >PUSHA @@ -166,18 +174,9 @@ CS.RUN >SYSCALL GetC CS.RUN.PRINT sty BytesRead Y,A = Bytes read stz ByteIndex - ldy #LineNum - lda (pData),y - clc - adc #1 - sta (pData),y - - iny - lda (pData),y - adc #0 - sta (pData),y + >INCW.G LineNum - ldy #bSuppressBlankLine + >LDA.G bSuppressBlankLine lda (pData),y bpl .10 @@ -185,41 +184,39 @@ CS.RUN.PRINT sty BytesRead Y,A = Bytes read beq .12 Empty line ? dec bne .1 Only one CR ? - lda UsrBuf256 + lda (ZPBufPtr) cmp #13 bne .1 -.12 ldy #bPrintedBlankLine - lda (pData),y +.12 >LDA.G bPrintedBlankLine bmi .8 lda #$ff sta (pData),y bra .10 -.1 ldy #bPrintedBlankLine - lda #0 - sta (pData),y +.1 lda #0 + >STA.G bPrintedBlankLine .10 jsr CS.RUN.PRINTNUM bcs .9 -.20 ldx ByteIndex - lda UsrBuf256,x +.20 ldy ByteIndex + lda (ZPBufPtr),y cmp #' ' bcs .6 cmp #13 Allow printing of CR even if not bPrintAll beq .4 - ldy #bPrintAll - lda (pData),y + >LDA.G bPrintAll bpl .7 >LDYA L.ASCII >STYA ZPPtr1 - lda UsrBuf256,x + ldy ByteIndex + lda (ZPBufPtr),y tax .2 dex @@ -257,18 +254,11 @@ CS.RUN.PRINT sty BytesRead Y,A = Bytes read .9 rts *-------------------------------------- CS.RUN.PRINTNUM clc - ldy #bLineNum - lda (pData),y + >LDA.G bLineNum bpl .8 - ldy #LineNum - lda (pData),y - pha - - iny - lda (pData),y - ply - + >LDYA.G LineNum + >PUSHYA >LDYA L.MSG.LINENUM >SYSCALL PrintF.YA @@ -293,8 +283,7 @@ CS.RUN.OPEN >SYSCALL GetFullPath.YA pha lda #0 - ldy #bPrintedBlankLine Reset this flag for the new file - sta (pData),y + >STA.G bPrintedBlankLine Reset this flag for the new file pla clc @@ -307,8 +296,11 @@ CS.RUN.OPEN >SYSCALL GetFullPath.YA .9 sec rts *-------------------------------------- -CS.RUN.CLOSE -CS.QUIT ldy #hFILE +CS.QUIT >LDA.G hBuf + beq CS.RUN.CLOSE + >SYSCALL FreeMem.A + +CS.RUN.CLOSE ldy #hFILE lda (pData),y beq .8 @@ -366,8 +358,6 @@ ASCII >PSTR "NULL" >PSTR "RS" >PSTR "US" *-------------------------------------- -ArgCount .BS 1 -FileCount .BS 1 hFullPath .BS 1 BytesRead .BS 1 ByteIndex .BS 1 @@ -375,12 +365,15 @@ ByteIndex .BS 1 .DUMMY .OR 0 DS.START +ArgCount .BS 1 +FileCount .BS 1 bPause .BS 1 bPrintAll .BS 1 bLineNum .BS 1 bSuppressBlankLine .BS 1 ArgIndex .BS 1 -hFILE .BS 1 +hBuf .BS 1 +hFile .BS 1 LineNum .BS 2 bPrintedBlankLine .BS 1 DS.END