From 2095b673f1d2f24ace97945dcd8fcee852cb657c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Wed, 5 Sep 2018 17:22:46 +0200 Subject: [PATCH] Kernel 0.9.2 --- .Docs/KERNEL.md | 40 +++++++++++++++++++++++---------- .Floppies/A2OSX.BOOT.po | Bin 143360 -> 143360 bytes .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/CHTYP.S.txt | 2 +- SYS/KERNEL.S.DIRENT.txt | 1 - SYS/KERNEL.S.FIO.txt | 16 ++++++++----- SYS/KERNEL.S.IO.txt | 47 ++++++++++----------------------------- SYS/KERNEL.S.PFT.txt | 17 ++++---------- SYS/KERNEL.S.STDIO.txt | 21 ++++++++--------- SYS/KERNEL.S.TIME.txt | 28 ++++++++++++++--------- SYS/KERNEL.S.txt | 2 +- 12 files changed, 86 insertions(+), 88 deletions(-) diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index a58c0efc..049a54cc 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -181,9 +181,17 @@ Load a file in memory X = hMem of Loaded File # ChTyp +Change The type of a ProDOS File + +## C +`int chtyp(const char *filepath, const char filetype);` + +## ASM **In:** - PUSHB = TYPE - PUSHW = PATH +`>PUSHBI filetype` +`>LDYA filepath` +`>SYSCALL chtyp` +**Out:** # ChMod **In:** @@ -192,7 +200,7 @@ Load a file in memory # ChOwn **In:** - PUSHW = UID + PUSHW = mod PUSHW = PATH # ChGrp @@ -757,7 +765,7 @@ TODO: mode="w+t=TYP,x=AUXTYPE" Close a file ## C -int fclose ( hFILE streamm ); +int fclose ( hFILE stream ); ## ASM **In:** @@ -1019,7 +1027,7 @@ Compare 2 strings Get System Time in Buffer ## C -`time_t time (time_t* timer);` +`time_t time (S.TIME* timer);` ##ASM **In:** @@ -1031,19 +1039,27 @@ S.TIME filled with System date/time Convert ProDOS Time To S.TIME ## C -`time_t time (long ptime, time_t* timer);` +`int PTime2Time (long* ptime, S.TIME* timer);` ##ASM **In :** - PUSHW = Dst PTR To S.TIME - PUSHW = Src PTR to ProDOS DATE/TIME (DWORD) +`>PUSHW timer` +`>LDYA ptime` +`>SYSCALL PTime2Time` **Out:** # CTime2Time - Convert CTIME to S.TIME -**In:** - PUSHW = Dst PTR To S.TIME - PUSHW = Src CTIME DWORD + Convert CTime Time To S.TIME + +## C +`int CTime2Time (long* ctime, S.TIME* timer);` + +##ASM +**In :** +`>PUSHW timer` +`>LDYA ctime` +`>SYSCALL CTime2Time` +**Out:** # StrFTime diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index 44a5b46d0857fb31d2e2522b3466d2b1654bdb0d..1021dea6009b8906156dedd25c4011ff579fff6c 100644 GIT binary patch delta 5962 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 diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 2ec3b2310aa544e6f57abf881b0c3a1af19b883e..b4b41e8ff6f4a453e0a4e6a17eed7a7aab7faa41 100644 GIT binary patch delta 4941 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 O^P|i2?`h1BnfJfqVK-C& delta 5340 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 Wlh@>h)Z~TMFhVnD# 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 diff --git a/BIN/CHTYP.S.txt b/BIN/CHTYP.S.txt index 683b1f53..2e640b76 100644 --- a/BIN/CHTYP.S.txt +++ b/BIN/CHTYP.S.txt @@ -183,7 +183,7 @@ CS.RUN.FILE jsr CS.RUN.GetFilePath ldy #HexFileType >PUSHB (pData),y - >PUSHW ZPFullPath + >LDYA ZPFullPath >SYSCALL ChTyp jsr CS.RUN.CheckErr diff --git a/SYS/KERNEL.S.DIRENT.txt b/SYS/KERNEL.S.DIRENT.txt index 7db4cfc0..ad01e3c3 100644 --- a/SYS/KERNEL.S.DIRENT.txt +++ b/SYS/KERNEL.S.DIRENT.txt @@ -597,7 +597,6 @@ K.ReadDir.ConvertTime tay lda ZPPtr3+1 adc #0 - >PUSHYA >SYSCALL PTime2Time rts */------------------------------------- diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index 6fc6cba7..1087c0a3 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -113,12 +113,18 @@ FIO.hFile .BS 1 FIO.Mem .BS 2 */-------------------------------------- * # ChTyp +* Change The type of a ProDOS File +* ## C +* `int chtyp(const char *filepath, const char filetype);` +* ## ASM * **In:** -* PUSHB = TYPE -* PUSHW = PATH +* `>PUSHBI filetype` +* `>LDYA filepath` +* `>SYSCALL chtyp` +* **Out:** *\-------------------------------------- -K.ChTyp jsr PFT.CheckPathSTK - jsr STDIO.PullMLIPath +K.ChTyp jsr PFT.CheckPathYA + jsr STDIO.SetMLIPathYA >PULLB .1+1 >MLICALL MLIGETFILEINFO bcs .9 @@ -137,7 +143,7 @@ K.ChMod */-------------------------------------- * # ChOwn * **In:** -* PUSHW = UID +* PUSHW = mod * PUSHW = PATH *\-------------------------------------- K.ChOwn diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index 54f03f47..ab36a552 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -16,8 +16,9 @@ AUTO 4,1 *\-------------------------------------- K.Open jsr PFT.CheckPathYA check if not /mnt -K.Open.I jsr IO.SetMLIPathYA local pathname... - +K.Open.I jsr STDIO.SetMLIPathYA local pathname... + >PULLB K.FOpen.MODE + ldx #5 $/DEV/ cpx K.MLI.PATH bcs K.Open.REG @@ -27,7 +28,7 @@ K.Open.I jsr IO.SetMLIPathYA local pathname... bne K.Open.REG dex bne .1 - +*-------------------------------------- K.Open.DEV >LDYAI K.MLI.PATH+6 skip $/DEV/ jsr K.GetDevByName @@ -43,26 +44,20 @@ K.Open.DEV >LDYAI K.MLI.PATH+6 skip $/DEV/ lda (pFD),y sta .2+2 - >PULLA get flags - .1 lda #$ff SELF MODIFIED pass A=DEVID To Driver ldx #IOCTL.OPEN .2 jsr $ffff SELF MODIFIED pDRV - bcs .99 + bcs .9 ldx .1+1 lda Dev.Table.hFD,x -.99 rts - -.9 >RET 1 discard flags - -K.Open.REG >LDYAI K.MLI.PATH - >STYA K.MLI.PARAMS+1 - bra * - lda (pStack) -* sta K.S.IOCTL - - >RET 1 +.9 rts +*-------------------------------------- +K.Open.REG lda #S.FI.T.TXT + sta K.FOpen.TYPE + stz K.FOpen.AUXTYPE + stz K.FOpen.AUXTYPE+1 + jmp K.FOpen.I */-------------------------------------- * # close * ## C @@ -307,24 +302,6 @@ K.Pipe .9 sec rts *-------------------------------------- -IO.PullMLIPath >PULLYA -IO.SetMLIPathYA >STYA .1+1 - - ldx #0 - -.1 lda $ffff,x Self Modified - beq .8 - inx - sta K.MLI.PATH,x - cpx #MLI.MAXPATH - bne .1 - -.8 stx K.MLI.PATH - inx - stz K.MLI.PATH,x - - rts -*-------------------------------------- IO.DEVDIR >PSTR "/DEV/" *-------------------------------------- MAN diff --git a/SYS/KERNEL.S.PFT.txt b/SYS/KERNEL.S.PFT.txt index dc51a48d..84870707 100644 --- a/SYS/KERNEL.S.PFT.txt +++ b/SYS/KERNEL.S.PFT.txt @@ -18,19 +18,12 @@ K.PFTRemove clc rts *-------------------------------------- -* PFT.CheckPath___ +* PFT.CheckPathYA * In : -* PULLW/Y,A = PATH (C-String) +* Y,A = PATH (C-String) * Out : *-------------------------------------- -PFT.CheckPathSTK - lda (pStack) read PTR.LO on top of stack - pha - ldy #1 - lda (pStack),y read PTR.HI on top of stack - ply -PFT.CheckPathYA - >STYA ZPPtr1 +PFT.CheckPathYA >STYA ZPPtr1 >LDYAI Flt.Table >STYA ZPPtr2 @@ -76,13 +69,11 @@ PFT.CheckPathYA .9 >LDYA ZPPtr1 restore passed params rts *-------------------------------------- -* PFT.Check___ +* PFT.CheckNodeA * In : * PULLB/A = hFILE/hDIR * Out : *-------------------------------------- -PFT.CheckNodeSTK - lda (pStack) read hFILE on top of stack PFT.CheckNodeA sta .9+1 save hFILE jsr K.GetMemPtr X = unmodified diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 805c5717..e2289a38 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -985,7 +985,7 @@ K.FOpen jsr PFT.CheckPathYA >PULLB K.FOpen.TYPE >PULLW K.FOpen.AUXTYPE - >MLICALL MLIGETFILEINFO +K.FOpen.I >MLICALL MLIGETFILEINFO bcc K.FOpen.10 Already Exists bit K.FOpen.MODE Create if not exists ? @@ -1099,7 +1099,7 @@ K.FOpen.AUXTYPE .BS 2 * # FClose * Close a file * ## C -* int fclose ( hFILE streamm ); +* int fclose ( hFILE stream ); * ## ASM * **In:** * A = hFILE @@ -1353,21 +1353,22 @@ K.Rename jsr PFT.CheckPathYA >MLICALL MLIRENAME rts *-------------------------------------- -STDIO.PullMLIPath - >PULLYA STDIO.SetMLIPathYA >STYA .1+1 - ldy #0 + ldx #0 -.1 lda $ffff,y Self Modified +.1 lda $ffff,x Self Modified beq .8 - iny - sta K.MLI.PATH,y - cpy #MLI.MAXPATH + inx + sta K.MLI.PATH,x + cpx #MLI.MAXPATH bne .1 -.8 sty K.MLI.PATH +.8 stx K.MLI.PATH + inx + stz K.MLI.PATH,x Make ending 0 for /dev/xxx path + >LDYAI K.MLI.PATH >STYA K.MLI.PARAMS+1 rts diff --git a/SYS/KERNEL.S.TIME.txt b/SYS/KERNEL.S.TIME.txt index 354a02ce..c822e746 100644 --- a/SYS/KERNEL.S.TIME.txt +++ b/SYS/KERNEL.S.TIME.txt @@ -12,7 +12,7 @@ DAY0 .EQ 4 day 0 was a thursday * # Time * Get System Time in Buffer * ## C -* `time_t time (time_t* timer);` +* `time_t time (S.TIME* timer);` * ##ASM * **In:** * Y,A = PTR to S.TIME @@ -28,14 +28,16 @@ K.Time >STYA ZPPtr2 * # PTime2Time * Convert ProDOS Time To S.TIME * ## C -* `time_t time (long ptime, time_t* timer);` +* `int PTime2Time (long* ptime, S.TIME* timer);` * ##ASM * **In :** -* PUSHW = Dst PTR To S.TIME -* PUSHW = Src PTR to ProDOS DATE/TIME (DWORD) +* `>PUSHW timer` +* `>LDYA ptime` +* `>SYSCALL PTime2Time` * **Out:** *\-------------------------------------- -K.PTime2Time jsr MEM.PullP1P2 +K.PTime2Time >STYA ZPPtr1 + >PULLW ZPPtr2 TIME.PTime2TimeP1P2 ldy #1 lda (ZPPtr1),y Get Year @@ -159,12 +161,18 @@ K.ComputeWDAY lda #3 Thursday : 4 (-1 for mod 7) rts */-------------------------------------- * # CTime2Time -* Convert CTIME to S.TIME -* **In:** -* PUSHW = Dst PTR To S.TIME -* PUSHW = Src CTIME DWORD +* Convert CTime Time To S.TIME +* ## C +* `int CTime2Time (long* ctime, S.TIME* timer);` +* ##ASM +* **In :** +* `>PUSHW timer` +* `>LDYA ctime` +* `>SYSCALL CTime2Time` +* **Out:** *\-------------------------------------- -K.CTime2Time jsr MEM.PullP1P2 +K.CTime2Time >STYA ZPPtr1 + >PULLW ZPPtr2 ldy #3 diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 136a2649..32973716 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -52,8 +52,8 @@ A2osX.E0 .PH $E000 .INB /A2OSX.SRC/SYS/KERNEL.S.JMP .INB /A2OSX.SRC/SYS/KERNEL.S.IRQ .INB /A2OSX.SRC/SYS/KERNEL.S.MEM - .INB /A2OSX.SRC/SYS/KERNEL.S.IO ********* TMP ***** go to A2osX.D1 + .INB /A2OSX.SRC/SYS/KERNEL.S.IO .INB /A2OSX.SRC/SYS/KERNEL.S.FIO DevMgr.FreeMem .EQ * .EP