From 15caee549d8df01fc81293af8a19299b5d500e4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Wed, 19 Dec 2018 17:45:09 +0100 Subject: [PATCH] Kernel 0.92 --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/LS.S.txt | 133 +++++++++++++++++++++------------------ BIN/X.FILEENUM.G.txt | 2 + BIN/X.FILEENUM.S.txt | 75 +++++++++------------- SYS/KERNEL.S.IO.txt | 34 +++++----- SYS/KERNEL.S.STAT.txt | 27 +++----- 6 files changed, 131 insertions(+), 140 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 47025e4461c5a4a1b04e7fbcd69c1f0657fd9dca..9b0822aca58cb7f7fe2239cac7963f1791adfbf9 100644 GIT binary patch delta 21662 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 diff --git a/BIN/LS.S.txt b/BIN/LS.S.txt index 5ccd2a43..8c8ba31a 100644 --- a/BIN/LS.S.txt +++ b/BIN/LS.S.txt @@ -15,10 +15,15 @@ X.DELETE.SOURCE .EQ 0 *-------------------------------------- MAX.COL .EQ 4 *-------------------------------------- -ZPPtr1 .EQ ZPBIN -ZPPtr2 .EQ ZPBIN+2 -ZPFileName .EQ ZPBIN+4 -ZPFileStat .EQ ZPBIN+6 + .DUMMY + .OR ZPBIN +ZS.START +ZPPtr1 .BS 2 +ZPPtr2 .BS 2 +ZPFileName .BS 2 +ZPFileStat .BS 2 +ZS.END + .ED *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -26,11 +31,12 @@ CS.START cld jmp (.1,x) .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 - .DA 0 - .DA CS.END-CS.START CS - .DA DS.END-DS.START DS - .DA #64 SS - .DA #8 ZP + .DA #0 S.PS.F.EVENT + .DA #0 + .DA CS.END-CS.START Code Size (without Constants) + .DA DS.END-DS.START Data SegmentSize + .DA #64 Stack Size + .DA #ZS.END-ZS.START Zero Page Size .DA 0 *-------------------------------------- * Relocation Table @@ -49,7 +55,10 @@ L.PRODOS.FT.TXT .DA PRODOS.FT.TXT L.FMT.DateTime .DA FMT.DateTime .DA 0 *-------------------------------------- -CS.INIT +CS.INIT clc + rts +*-------------------------------------- +CS.RUN .1 >INC.G ArgCount >SYSCALL ArgV bcs .6 @@ -79,38 +88,38 @@ CS.INIT .4 >LDYA ZPPtr1 jsr InitSrcDirYA - bcs .9 + bcc .1 scan for any other args - bra .1 scan for any other args +.9 rts .6 >LDA.G index do we have a Source dir ? - bne .8 + bne CS.RUN.LOOP -.7 ldy #S.PS.hPREFIX + ldy #S.PS.hPREFIX lda (pPs),y >SYSCALL GetMemPtr jsr InitSrcDirYA - bcs .9 - -.8 clc -.9 rts + bcs .9 *-------------------------------------- -CS.RUN >SYSCALL GetChar - bcs .10 no char +CS.RUN.LOOP >SLEEP + + >SYSCALL GetChar + bcs .2 no char cmp #$03 Ctrl-C - beq .92 Abort.... + bne .1 Abort.... + rts CS - cmp #$13 Ctrl-S - bne .10 +.1 cmp #$13 Ctrl-S + bne .2 >LDA.G bPause eor #$ff sta (pData),y - bne .80 + bne CS.RUN.LOOP -.10 >LDA.G bPause - bne .80 Pause... +.2 >LDA.G bPause + bne CS.RUN.LOOP jsr GetEntry bcs .9 @@ -143,10 +152,21 @@ CS.RUN >SYSCALL GetChar cmp #$0F Directory ? bne .6 - jmp CS.RUN.DIR -.5 jmp CS.RUN.DEV -.6 jmp CS.RUN.FILE + jsr CS.RUN.PRINT.DIR + bcs .99 + bra .8 +.5 jsr CS.RUN.PRINT.DEV + bcs .99 + bra .8 + +.6 jsr CS.RUN.PRINT.FILE + bcs .99 + +.8 jsr GetNextEntry + + bcc .92 + .9 ldy #bLong lda (pData),y bmi .91 @@ -155,20 +175,20 @@ CS.RUN >SYSCALL GetChar bcs .99 .91 jsr LeaveSubDir - bcs .92 + bcs .98 jsr BasePath.. + jsr GetNextEntry -.8 jsr GetNextEntry -.80 clc - rts +.92 jmp CS.RUN.LOOP -.92 lda #0 +.98 lda #0 sec .99 rts *-------------------------------------- -CS.RUN.DEV >LDA.G bLong - bpl CS.RUN.DIR +CS.RUN.PRINT.DEV + >LDA.G bLong + bpl CS.RUN.PRINT.DIR ldy #S.STAT.P.DEVBLOCKS+1 >PUSHB (ZPFileStat),y @@ -197,14 +217,13 @@ CS.RUN.DEV >LDA.G bLong >LDYA ZPFileName jsr EnterSubDirYA bcs .9 - jsr CS.RUN.ENTER.MSG - rts + jmp CS.RUN.ENTER.MSG -.8 jsr GetNextEntry - clc +.8 clc .9 rts *-------------------------------------- -CS.RUN.DIR >LDA.G bAllmostAll +CS.RUN.PRINT.DIR + >LDA.G bAllmostAll bmi .10 lda (ZPFileName) @@ -219,7 +238,7 @@ CS.RUN.DIR >LDA.G bAllmostAll >LDYA L.MSG.DIR >SYSCALL printf - bcs .9 + bcs .99 ldy #0 @@ -250,7 +269,8 @@ CS.RUN.DIR >LDA.G bAllmostAll >PUSHBI 8 >LDYA L.MSG.DIREXT >SYSCALL printf - bcs .9 + +.99 bcs .9 .5 ldy #bRecurse lda (pData),y @@ -266,14 +286,13 @@ CS.RUN.DIR >LDA.G bAllmostAll >LDYA ZPFileName jsr EnterSubDirYA bcs .9 - jsr CS.RUN.ENTER.MSG - rts + jmp CS.RUN.ENTER.MSG -.8 jsr GetNextEntry - clc +.8 clc .9 rts *-------------------------------------- -CS.RUN.FILE ldy #bLong +CS.RUN.PRINT.FILE + ldy #bLong lda (pData),y bmi .1 @@ -283,10 +302,7 @@ CS.RUN.FILE ldy #bLong >SYSCALL printf bcs .9 - jsr CS.RUN.UpdateColCnt - jsr GetNextEntry - clc - rts + jmp CS.RUN.UpdateColCnt .1 jsr CS.RUN.PUSHDATES @@ -319,10 +335,7 @@ CS.RUN.FILE ldy #bLong >PUSHBI 16 >LDYA L.MSG.FILEEXT >SYSCALL printf - bcs .9 - - jsr GetNextEntry - clc + .9 rts *-------------------------------------- CS.RUN.PUSHDATES @@ -379,10 +392,7 @@ CS.RUN.PUSHDATES rts *-------------------------------------- CS.RUN.UpdateColCnt - ldy #ColCount - lda (pData),y - inc - sta (pData),y + >INC.G ColCount cmp #MAX.COL bne CS.RUN.NewLine.8 @@ -390,8 +400,7 @@ CS.RUN.UpdateColCnt sta (pData),y bra CS.RUN.NewLine.1 *-------------------------------------- -CS.RUN.NewLine ldy #ColCount - lda (pData),y +CS.RUN.NewLine >LDA.G ColCount beq CS.RUN.NewLine.8 CS.RUN.NewLine.1 lda #13 diff --git a/BIN/X.FILEENUM.G.txt b/BIN/X.FILEENUM.G.txt index d40e799a..77449413 100644 --- a/BIN/X.FILEENUM.G.txt +++ b/BIN/X.FILEENUM.G.txt @@ -19,3 +19,5 @@ hDstBasePath .BS 1 *-------------------------------------- MAN SAVE USR/SRC/BIN/X.FILEENUM.G +LOAD USR/SRC/BIN/LS.S +ASM diff --git a/BIN/X.FILEENUM.S.txt b/BIN/X.FILEENUM.S.txt index 939d98c6..90b57232 100644 --- a/BIN/X.FILEENUM.S.txt +++ b/BIN/X.FILEENUM.S.txt @@ -312,12 +312,8 @@ InitDstDirYA >SYSCALL RealPath GetNextEntry jsr GetEntry bcs .9 - ldy #0 - -.10 iny - lda (ZPFileName),y Save actual file len for setting up - bne .10 - phy new offset later + jsr GetFilenameLen Save actual file len for setting up + pha new offset later lda ZPFileStat clc @@ -331,12 +327,8 @@ GetNextEntry jsr GetEntry lda (ZPFileName) are we at end of this buffer ? beq .1 yes, go read next one ... - sec - adc ZPFileName - sta ZPFileStat - lda ZPFileName+1 - adc #0 - sta ZPFileStat+1 + jsr GetFilenameLen + jsr SetFileStatPtr jsr GetoDIRENT @@ -368,27 +360,16 @@ GetNextEntry jsr GetEntry .1 pla jsr GetEntry.ReadDir bcs .9 - lda (ZPFileName) - beq .99 - ldy #0 - -.2 iny - lda (ZPFileName),y - bne .2 - tya - - sec - adc ZPFileName - sta ZPFileStat - lda ZPFileName+1 - adc #0 - sta ZPFileStat+1 + jsr GetFilenameLen + beq GetNextEntry.99 + + jsr SetFileStatPtr clc .9 rts -.99 sec +GetNextEntry.99 sec rts *-------------------------------------- GetEntry jsr GethDIRENT @@ -399,9 +380,7 @@ GetEntry jsr GethDIRENT lda (ZPFileName) Empty !!! bne .8 - -* txa -* >SYSCALL FreeMem + sec rts @@ -420,18 +399,8 @@ GetEntry jsr GethDIRENT adc (pData),y sta ZPFileName+1 ZPFileName=ZPFileName+oDIRENT -.8 ldy #0 - -.81 iny - lda (ZPFileName),y - bne .81 - tya - sec - adc ZPFileName - sta ZPFileStat - lda ZPFileName+1 - adc #0 - sta ZPFileStat+1 +.8 jsr GetFilenameLen + jsr SetFileStatPtr clc .9 rts @@ -589,7 +558,7 @@ BasePath..1 lda (pData),y >STYA ZPPtr1 save full path - ldy #0 + ldy #$ff .1 iny lda (ZPPtr1),y get len @@ -609,6 +578,24 @@ BasePath..1 lda (pData),y rts *-------------------------------------- +GetFilenameLen ldy #$ff + +.1 iny + lda (ZPFileName),y + bne .1 + + tya + + rts +*-------------------------------------- +SetFileStatPtr sec + adc ZPFileName + sta ZPFileStat + lda ZPFileName+1 + adc #0 + sta ZPFileStat+1 + rts +*-------------------------------------- GethDIR ldy #index lda (pData),y clc diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index 62684ff8..48be6b21 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -91,15 +91,12 @@ IO.OPEN.9 sec IO.OPEN.RTS rts *-------------------------------------- IO.OPEN.REG >MLICALL MLIGETFILEINFO - bcc K.IO.OPEN.REG.E Already Exists + bcc IO.OPEN.REG.E Already Exists bit K.Open.FLAGS Create if not exists ? bpl IO.OPEN.9 No, return MLI error - lda #S.FI.A.FULL Yes, Create... - sta K.MLI.PARAMS+3 Access - - ldx #2 + ldx #2 Yes, Create... .1 lda K.Open.TYPE,x sta K.MLI.PARAMS+4,x File type,Aux type @@ -107,19 +104,11 @@ IO.OPEN.REG >MLICALL MLIGETFILEINFO bpl .1 lda #S.FI.ST.STD - sta K.MLI.PARAMS+7 - ldx #3 - -.2 lda DATELO,x - sta K.MLI.PARAMS+8,x - dex - bpl .2 - - >MLICALL MLICREATE + jsr IO.MLI.CREATE bcs IO.OPEN.RTS -K.IO.OPEN.REG.E >LDYAI S.FD.REG +IO.OPEN.REG.E >LDYAI S.FD.REG ldx #S.MEM.F.INIT0+S.MEM.F.FD jsr MEM.GetMem.YAX bcs IO.OPEN.RTS @@ -203,6 +192,21 @@ IO.OPEN.SSOCK IO.OPEN.PIPE clc rts +*-------------------------------------- +IO.MLI.CREATE sta K.MLI.PARAMS+7 Storage Type + + ldx #3 + +.1 lda DATELO,x + sta K.MLI.PARAMS+8,x Create Date/Time + dex + bpl .1 + + lda #S.FI.A.FULL + sta K.MLI.PARAMS+3 Access + + >MLICALL MLICREATE + rts */-------------------------------------- * # close * ## C diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index 742e271d..8c8ac33e 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -148,25 +148,14 @@ K.Stat.DST .DA #S.STAT.P.TYPE * A = EC *\------------------------------------- K.MKDir jsr PFT.CheckPathYA - bcs K.MKDir.RTS + bcs K.Stat.9 - lda #S.FI.A.FULL - sta K.MLI.PARAMS+S.FI.A lda #S.FI.T.DIR - sta K.MLI.PARAMS+S.FI.T + sta K.MLI.PARAMS+4 + stz K.MLI.PARAMS+5 + stz K.MLI.PARAMS+6 lda #S.FI.ST.DIR - sta K.MLI.PARAMS+S.FI.ST - -* jsr DATETIME - - ldx #3 -.1 lda DATELO,x - sta K.MLI.PARAMS+8,x - dex - bpl .1 - - >MLICALL MLICREATE -K.MKDir.RTS rts + jmp IO.MLI.CREATE */-------------------------------------- * # MkNod * Create a special or ordinary file. @@ -189,14 +178,14 @@ K.MkNod >STYA ZPPtr1 pathname >PULLB K.S.STAT+S.STAT.DEV jsr K.GetMemPtr - bcs K.MKDir.RTS + bcs K.MKNOD.RTS >STYA pFD >LDYA ZPPtr1 ldx K.S.STAT+S.STAT.DEV jsr STAT.NewhNodeYAX - bcs K.MKDir.RTS + bcs K.MKNOD.RTS lda (pFD) #S.FD.T @@ -218,7 +207,7 @@ STAT.MKNOD.DSOCK STAT.MKNOD.SSOCK STAT.MKNOD.PIPE clc - rts +K.MKNOD.RTS rts */-------------------------------------- * # MKFIFO * return a hFILE to a new FIFO