From d4ef30ab1f53061efc29f1b416676f337f18e5d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 19 Apr 2019 06:42:43 +0100 Subject: [PATCH] Kernel 0.93 --- BIN/CHMOD.S.txt | 386 ++++++++++++++++++++++++++++++++++++++++ INC/A2osX.I.txt | 27 +-- SBIN/LOGIN.S.txt | 5 +- SYS/KERNEL.S.DIRENT.txt | 4 +- SYS/KERNEL.S.FIO.txt | 10 +- SYS/KERNEL.S.INIT.txt | 3 +- SYS/KERNEL.S.MEM.txt | 33 ++++ SYS/KERNEL.S.PWDX.txt | 39 +++- SYS/KERNEL.S.STAT.txt | 128 +++++++++---- SYS/KERNEL.S.txt | 5 +- 10 files changed, 577 insertions(+), 63 deletions(-) diff --git a/BIN/CHMOD.S.txt b/BIN/CHMOD.S.txt index e69de29b..bc0a80f5 100644 --- a/BIN/CHMOD.S.txt +++ b/BIN/CHMOD.S.txt @@ -0,0 +1,386 @@ +NEW +PREFIX +AUTO 4,1 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF BIN/CHMOD +*-------------------------------------- + .INB INC/MACROS.I + .INB INC/A2OSX.I + .INB INC/MLI.I + .INB INC/MLI.E.I +*-------------------------------------- +X.COPY.TO.DEST .EQ 0 +X.DELETE.SOURCE .EQ 0 +*-------------------------------------- + .DUMMY + .OR ZPBIN +ZS.START +ZPPtr1 .BS 2 +ZPPtr2 .BS 2 +ZPFileName .BS 2 +ZPFileStat .BS 2 +ZPFullPath .BS 2 +ZPMode .BS 2 +ZS.END .ED +*-------------------------------------- +* File Header (16 Bytes) +*-------------------------------------- +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 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 +*-------------------------------------- +.1 .DA CS.INIT + .DA CS.RUN + .DA CS.DOEVENT + .DA CS.QUIT +L.MSG.USAGE .DA MSG.USAGE +L.MSG.DIR .DA MSG.DIR +L.MSG.FILE .DA MSG.FILE +L.MSG.OK .DA MSG.OK +L.MSG.ERR .DA MSG.ERR + .DA 0 +*-------------------------------------- +CS.INIT clc + rts +*-------------------------------------- +CS.RUN >INC.G ArgIndex + >SYSCALL ArgV + bcs .8 + >STYA ZPPtr1 + + lda (ZPPtr1) + cmp #'-' + bne .4 + + ldy #1 + lda (ZPPtr1),y + + ldx OptionList + +.2 cmp OptionList,x + beq .3 + dex + bne .2 + +.9 >PUSHBI 0 + >LDYA L.MSG.USAGE + >SYSCALL printf + lda #E.SYN + sec +.99 rts + +.3 ldy OptionVars-1,x + lda #$80 + sta (pData),y + bra CS.RUN +*-------------------------------------- +.4 >LDA.G StrMode + bne .5 + + >LDA.G ArgIndex + >STA.G StrMode + bra CS.RUN + +.5 >LDA.G hSrcBasePath + bne .9 + + >LDYA ZPPtr1 + jsr InitSrcDirYA + bcc CS.RUN + rts + +.8 >LDA.G StrMode + beq .9 + + jsr CS.RUN.Str2Mode + bcs .9 + + >LDA.G hSrcBasePath + beq .9 + + >LDYAI 256 + >SYSCALL getmem + bcs .99 + >STYA ZPFullPath + txa + >STA.G hSrcFullPath +*-------------------------------------- +CS.RUN.LOOP ldy #S.PS.hStdIn + lda (pPS),y + >SYSCALL feof + bcs .99 + + tay + beq .1 + + >SYSCALL GetChar + bcs .99 + + cmp #$03 Ctrl-C + beq .99 Abort.... + + cmp #$13 Ctrl-S + bne .1 + + >LDA.G bPause + eor #$ff + sta (pData),y + bne CS.RUN.LOOP + +.1 >LDA.G bPause + bne CS.RUN.LOOP Pause... + jsr GetEntry + bcs .9 + + ldy #S.STAT.P.DRIVE + lda (ZPFileStat),y ProDOS Device ? + beq .5 + + jsr CS.RUN.DEV + bcc CS.RUN.LOOP + rts + +.5 ldy #S.STAT.P.TYPE + lda (ZPFileStat),y + cmp #$0F Directory ? + bne .6 + + jsr CS.RUN.DIR + bcs .99 + bra .8 + +.6 jsr CS.RUN.FILE + bcs .99 + bra .8 + +.9 jsr LeaveSubDir + bcs .90 + + jsr BasePath.. + +.8 jsr GetNextEntry + jmp CS.RUN.LOOP + +.90 lda #0 + sec +.99 rts +*-------------------------------------- +CS.RUN.DEV lda #E.BADPATH + sec + rts +*-------------------------------------- +CS.RUN.DIR >LDA.G bRecurse + bpl .8 + + lda (ZPFileName) + cmp #'.' + beq .8 + + jsr CS.RUN.GetFilePath + + >PUSHW ZPFullPath + + >PUSHBI 2 + >LDYA L.MSG.DIR + >SYSCALL printf + bcs .9 + + >PUSHW ZPMode + >LDYA ZPFullPath + >SYSCALL chmod + + jsr CS.RUN.CheckErr + + >LDYA ZPFileName + jsr EnterSubDirYA + rts + +.8 clc +.9 rts +*-------------------------------------- +CS.RUN.FILE >LDA.G hFilter + beq .3 No filter.... + + pha + + ldy #S.STAT.FSID + lda (ZPFileStat),y + bne .1 not prodos... + + pla + >SYSCALL GetMemPtr + >SYSCALL strupr + bra .2 + +.1 pla + >SYSCALL GetMemPtr + +.2 jsr StrMatch + bcs .8 no match, skip.... + +.3 jsr CS.RUN.GetFilePath + + >PUSHW ZPFullPath + + >PUSHBI 2 + >LDYA L.MSG.FILE + >SYSCALL printf + bcs .9 + + >PUSHW ZPMode + >LDYA ZPFullPath + >SYSCALL chmod + + jsr CS.RUN.CheckErr + +.8 clc +.9 rts +*-------------------------------------- +CS.RUN.Str2Mode >SYSCALL ArgV + >STYA ZPPtr1 + + ldy #$ff + +.1 iny + lda (ZPPtr1),y + bne .1 + + cpy #3 + bne .9 + + stz ZPMode + stz ZPMode+1 + + dey + +.2 lda (ZPPtr1),y + + cmp #'0' + bcc .9 + cmp #'7'+1 + bcs .9 + + asl ZPMode + rol ZPMode+1 + asl ZPMode + rol ZPMode+1 + asl ZPMode + rol ZPMode+1 + and #7 + clc + adc ZPMode + sta ZPMode + bcc .3 + inc ZPMode+1 + +.3 dey + bpl .2 + + clc + rts + +.9 sec + rts +*-------------------------------------- +CS.RUN.CheckErr bcs .1 + >LDYA L.MSG.OK + >SYSCALL puts + rts + +.1 pha + >PUSHA + >PUSHBI 1 + >LDYA L.MSG.ERR + + >SYSCALL printf + + >LDA.G bContinue + eor #$80 + asl + pla + rts +*-------------------------------------- +CS.RUN.GetFilePath + >LDA.G hSrcBasePath + >SYSCALL GetMemPtr + >PUSHYA + + >LDYA ZPFullPath + + >SYSCALL StrCpy + + >PUSHW ZPFileName + >LDYA ZPFullPath + >SYSCALL StrCat + rts +*-------------------------------------- +CS.DOEVENT sec + rts +*-------------------------------------- +CS.QUIT jsr LeaveSubDir + bcc CS.QUIT + + >LDA.G hFilter + beq .1 + >SYSCALL FreeMem + +.1 >LDA.G hSrcFullPath + beq .8 + >SYSCALL FreeMem + +.8 clc + rts +*-------------------------------------- + .INB USR/SRC/BIN/X.FILEENUM.S +*-------------------------------------- +CS.END +*-------------------------------------- +OptionList >PSTR "CRcr" +OptionVars .DA #bContinue,#bRecurse,#bContinue,#bRecurse +*-------------------------------------- +MSG.USAGE .AS "Usage : CHMOD mode [File *,? wildcards allowed]\r\n" + .AS " -C : Continue on error\r\n" + .AZ " -R : Recurse subdirectories\r\n" +MSG.OK .AZ "[OK]" +MSG.ERR .AZ "[%h]\r\n" +MSG.DIR .AZ "Reading Dir:%s..." +MSG.FILE .AZ "Adding File:%s..." +*-------------------------------------- + .DUMMY + .OR 0 +DS.START +ArgIndex .BS 1 +bContinue .BS 1 +bRecurse .BS 1 + +StrMode .BS 1 + +bPause .BS 1 + +hFullPath .BS 1 +hSrcFullPath .BS 1 +STAT .BS S.STAT +Index .BS 1 +hDIRs .BS X.MAX.RECURSE +hDIRENTs .BS X.MAX.RECURSE +oDIRENTs .BS X.MAX.RECURSE*2 +hSrcBasePath .BS 1 +hFilter .BS 1 + +DS.END + .ED +*-------------------------------------- +MAN +SAVE USR/SRC/BIN/CHMOD.S +ASM diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 34c292b5..997d2a2d 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -147,12 +147,10 @@ SEEK.SET .EQ $00 SEEK.CUR .EQ $02 SEEK.END .EQ $04 *-------------------------------------- -P.SYSADMIN .EQ %10000000 -*-------------------------------------- * A2osX.SYSCALL Functions Indexes *-------------------------------------- SYS.GetMemStat .EQ $00 -* .EQ $02 +SYS.ChMod .EQ $02 SYS.FStat .EQ $04 SYS.Stat .EQ $06 SYS.MKDir .EQ $08 @@ -212,9 +210,9 @@ SYS.LoadFile .EQ $64 SYS.LoadTxtFile .EQ $66 SYS.ChTyp .EQ $68 -SYS.ChMod .EQ $6A -SYS.ChOwn .EQ $6C -SYS.ChGrp .EQ $6E +* .EQ $6A +* .EQ $6C +* .EQ $6E SYS.AToF .EQ $70 SYS.AToI .EQ $72 @@ -635,13 +633,16 @@ S.PW.SHELL .EQ 182 64+1 * S.PW .EQ 247 *-------------------------------------- -S.SESSION.PRIV .EQ 0 -S.SESSION.UID .EQ 1 -S.SESSION.GID .EQ 2 -S.SESSION.NAME .EQ 3 -*S.SESSION.GECOS .EQ 0 -*S.SESSION.DIR .EQ 0 -*S.SESSION.SHELL .EQ 0 +S.SESSION.P .EQ 0 +S.SESSION.P.ROOT .EQ %10000000 +S.SESSION.P.SYSADMIN .EQ %01000000 +S.SESSION.UID .EQ 1 +S.SESSION.GID .EQ 2 +S.SESSION.PASSWD .EQ 3 +S.SESSION.NAME .EQ 20 +*S.SESSION.GECOS .EQ 0 +*S.SESSION.DIR .EQ 0 +*S.SESSION.SHELL .EQ 0 * *-------------------------------------- MAN diff --git a/SBIN/LOGIN.S.txt b/SBIN/LOGIN.S.txt index 1495a40f..a86f396e 100644 --- a/SBIN/LOGIN.S.txt +++ b/SBIN/LOGIN.S.txt @@ -231,7 +231,7 @@ CS.RUN.SetRootSession .9 rts *-------------------------------------- CS.RUN.SetUserSession - ldx #S.SESSION.NAME PRIV+UID+GID + ldx #S.SESSION.NAME P+UID+GID+PASSWD ldy #S.PW.NAME-1 @@ -478,9 +478,10 @@ ETCISSUE .AZ "${ROOT}ETC/ISSUE" ETCMOTD .AZ "${ROOT}ETC/MOTD" SHELL .AZ "${SHELL}" *-------------------------------------- -SESSION.ROOT .DA #P.SYSADMIN +SESSION.ROOT .DA #S.SESSION.P.ROOT .DA #0 UID .DA #0 GID + .BS 17 PASSWD .AZ "ROOT" NAME .AZ "Root User" GECOS .AZ "${ROOT}ROOT/" DIR diff --git a/SYS/KERNEL.S.DIRENT.txt b/SYS/KERNEL.S.DIRENT.txt index bd6dd146..a8802605 100644 --- a/SYS/KERNEL.S.DIRENT.txt +++ b/SYS/KERNEL.S.DIRENT.txt @@ -471,7 +471,9 @@ K.ReadDir.AddAccess jsr STAT.Access2Mode - sty K.S.STAT+S.STAT.MODE + sta K.S.STAT+S.STAT.MODE + tya + ora K.S.STAT+S.STAT.MODE+1 preserve DIR sta K.S.STAT+S.STAT.MODE+1 *-------------------------------------- K.ReadDir.AddTime diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index 68237da2..dc1292a5 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -1,6 +1,5 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 */-------------------------------------- * # LoadTxtFile * Load TXT a file in memory (with ending 0) @@ -148,13 +147,6 @@ K.ChTyp jsr PFT.CheckPathYA .99 >RET 1 discard filetype */-------------------------------------- -* # ChMod -* **In:** -* PUSHW = UID -* PUSHW = PATH -*\-------------------------------------- -K.ChMod -*/-------------------------------------- * # ChOwn * **In:** * PUSHW = mod diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index e03d3d79..43ce0a77 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -1104,9 +1104,10 @@ PwdMgrInit >LDYAI MSG.PWD sta S.Table.hFile rts *-------------------------------------- -PwdMgr.ROOT .DA #P.SYSADMIN +PwdMgr.ROOT .DA #S.SESSION.P.ROOT .DA #0 UID .DA #0 GID + .BS 17 PASSWD .AZ "ROOT" NAME .AZ "Root User" GECOS .AZ "${ROOT}ROOT/" DIR diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 6165ca94..8744e3c7 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -608,6 +608,39 @@ K.GetStkObjData sta SETREADAUX sta CLRREADAUX + rts +*/-------------------------------------- +* # GetMemStat +* **In:** +* Y,A = Ptr to 24 bytes buffer +* ## RETURN VALUE +* Buffer filled with memory stats +*\-------------------------------------- +K.GetMemStat >STYA ZPPtr1 + + ldy #23 + ldx #7 + +.1 lda DevMgr.Stat,x + sta (ZPPtr1),y + dey + dex + bpl .1 + + sta SETREADAUX + + jsr .2 + + sta CLRREADAUX + +.2 ldx #7 + +.3 lda Mem.Table,x + sta (ZPPtr1),y + dey + dex + bpl .3 + rts *-------------------------------------- * in Y,A = buf size diff --git a/SYS/KERNEL.S.PWDX.txt b/SYS/KERNEL.S.PWDX.txt index d9acdd47..84877993 100644 --- a/SYS/KERNEL.S.PWDX.txt +++ b/SYS/KERNEL.S.PWDX.txt @@ -126,7 +126,18 @@ PWD.PutPW >LDYA ZPPtr2 jmp PWD.InitDB -.1 +.1 jsr PWD. + + jsr PWD.GetRecordLen + pha + tya + clc + adc PWD.DBSize + tay + pla + adc PWD.DBSize+1 Y,A = new DB Size + + .9 lda #E.IPWDDB sec @@ -147,6 +158,32 @@ PWD.InitDB jsr PWD.GetRecordLen clc .9 rts *-------------------------------------- +* ZPPtr2 = pPW +*-------------------------------------- +PWD.DeleteRecord + >LDYA PWD.DBPtr + >STYA ZPPtr3 + +.1 >LDYA ZPPtr2 + >STYA TXTPTR + +.2 lda (ZPPtr3) + beq .9 End of DB + + ldy #$ff + +.3 iny + jsr MEM.TXTPTR.GetNext + cmp (ZPPtr3),y + bne + + and #$ff + + + +.9 sec + rts +*-------------------------------------- PWD.Record2PM sta CLRWRITEAUX ldy #0 diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index af70cd83..d47525d0 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -1,39 +1,79 @@ NEW -PREFIX -AUTO 4,1 -*/-------------------------------------- -* # GetMemStat + AUTO 3,1 +*-------------------------------------- +* # ChMod +* change permissions of a file +* ## C +* `int chmod(const char *pathname, int mode);` +* ## ASM * **In:** -* Y,A = Ptr to 24 bytes buffer +* `>PUSHW mode` +* `>LDYA pathname` +* `>SYSCALL chmod` * ## RETURN VALUE -* Buffer filled with memory stats -*\-------------------------------------- -K.GetMemStat >STYA ZPPtr1 +*-------------------------------------- +* only 777-555 +*-------------------------------------- +K.ChMod jsr PFT.CheckPathYA + bcs .99 - ldy #23 - ldx #7 + >PULLW K.S.STAT+S.STAT.MODE -.1 lda DevMgr.Stat,x - sta (ZPPtr1),y - dey - dex - bpl .1 + lda K.S.STAT+S.STAT.MODE+1 + and /S.STAT.MODE.RU + beq .9 - sta SETREADAUX + lda K.S.STAT+S.STAT.MODE + and #S.STAT.MODE.XO+S.STAT.MODE.RO+S.STAT.MODE.XG+S.STAT.MODE.RG+S.STAT.MODE.XU+S.STAT.MODE.RU + cmp #S.STAT.MODE.XO+S.STAT.MODE.RO+S.STAT.MODE.XG+S.STAT.MODE.RG+S.STAT.MODE.XU+S.STAT.MODE.RU + bne .9 - jsr .2 + >MLICALL MLIGETFILEINFO + bcs .90 - sta CLRREADAUX + lda K.MLI.PARAMS+S.FI.A + and #$3D not S.FI.A.RN+S.FI.A.D+S.FI.A.W + ora #S.FI.A.R + tax -.2 ldx #7 - -.3 lda Mem.Table,x - sta (ZPPtr1),y - dey - dex - bpl .3 + lda K.S.STAT+S.STAT.MODE + tay + bit #S.STAT.MODE.WG + beq .1 + txa + ora #S.FI.A.RN + tax + + tya +.1 bit #S.STAT.MODE.WU + beq .2 + + txa + ora #S.FI.A.D + tax + + tya +.2 bit #S.STAT.MODE.WO + beq .3 + + txa + ora #S.FI.A.W + tax + +.3 stx K.MLI.PARAMS+S.FI.A + + >MLICALL MLISETFILEINFO + + clc rts + + +.9 lda #E.SYN + sec +.90 rts + +.99 >RET 2 *-------------------------------------- * # FStat * Return information about a hFILE @@ -136,9 +176,9 @@ K.Stat.I >PULLW ZPPtr1 Get StatBuf jsr STAT.Access2Mode .2 phy - ldy #S.STAT.MODE+1 + ldy #S.STAT.MODE sta (ZPPtr1),y - dey + iny pla sta (ZPPtr1),y @@ -164,13 +204,35 @@ K.Stat.DST .DA #S.STAT.P.TYPE STAT.Access2Mode and #S.FI.A.FULL cmp #S.FI.A.FULL - bne .1 - ldy #S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.FU - lda /S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.FU - rts + beq .7 + + tay + ldx #S.STAT.MODE.RO+S.STAT.MODE.RG+S.STAT.MODE.RU+S.STAT.MODE.XO+S.STAT.MODE.XG+S.STAT.MODE.XU + + bit #S.FI.A.W + beq .1 + txa + ora #S.STAT.MODE.WO + tax + + tya + +.1 asl D in C + + bpl .2 RN in N + + txa + ora #S.STAT.MODE.WG + tax + +.2 txa + bcc .8 + ora #S.STAT.MODE.WU + .HS 2C BIT ABS + +.7 lda #S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.FU rwxrwxrwx +.8 ldy /S.STAT.MODE.RU ??????R?? -.1 ldy #S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.XU+S.STAT.MODE.RU - lda /S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.XU+S.STAT.MODE.RU rts */------------------------------------- * # MKDir diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index b3e122de..7e2ff311 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -1,6 +1,5 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 @@ -47,7 +46,6 @@ A2osX.D1 .PH $D000 .INB USR/SRC/SYS/KERNEL.S.STDIO .INB USR/SRC/SYS/KERNEL.S.STDLIB .INB USR/SRC/SYS/KERNEL.S.DEV - .INB USR/SRC/SYS/KERNEL.S.FIO .EP A2osX.D2 .PH $D000 .DA #RRAMWRAMBNK2 @@ -66,6 +64,7 @@ A2osX.E0 .PH $E000 ********* TMP ***** go to A2osX.D1 .INB USR/SRC/SYS/KERNEL.S.PFT .INB USR/SRC/SYS/KERNEL.S.IO + .INB USR/SRC/SYS/KERNEL.S.FIO ********* TMP ***** go to A2osX.D2 .INB USR/SRC/SYS/KERNEL.S.ARG .INB USR/SRC/SYS/KERNEL.S.PWD