From 10b4f9de2fb481d3ad5f42c252fbeeae3ece356b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 14 Jun 2018 17:31:36 +0200 Subject: [PATCH] Kernel 0.9.2 --- .Docs/KERNEL.md | 631 ++++++++++++++++----------------------- .Docs/LIBBLKDEV.md | 12 +- .Docs/LIBCRYPT.md | 58 ++-- .Docs/LIBTCPIP.md | 30 +- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes INC/A2osX.I.txt | 2 + INC/LIBCRYPT.I.txt | 2 +- INC/MACROS.I.txt | 54 ++-- LIB/LIBBLKDEV.S.txt | 8 +- LIB/LIBCRYPT.S.txt | 69 +++-- LIB/LIBTCPIP.S.ARP.txt | 10 +- LIB/LIBTCPIP.S.DNS.txt | 10 +- README.md | 4 +- SBIN/GETTY.S.txt | 4 +- SBIN/SHELL.S.CSH.txt | 20 +- SBIN/SHELL.S.txt | 3 +- SYS/KERNEL.S.ARG.txt | 23 +- SYS/KERNEL.S.BIN.txt | 4 +- SYS/KERNEL.S.D01.txt | 4 +- SYS/KERNEL.S.DEV.txt | 16 +- SYS/KERNEL.S.DIRENT.txt | 12 +- SYS/KERNEL.S.ENV.txt | 20 +- SYS/KERNEL.S.FIO.txt | 16 +- SYS/KERNEL.S.GP.txt | 6 +- SYS/KERNEL.S.MATH.txt | 37 ++- SYS/KERNEL.S.MEM.txt | 64 ++-- SYS/KERNEL.S.PS.txt | 16 +- SYS/KERNEL.S.STAT.txt | 12 +- SYS/KERNEL.S.STDIO.txt | 46 +-- SYS/KERNEL.S.STDLIB.txt | 67 ++--- SYS/KERNEL.S.STRING.txt | 28 +- SYS/KERNEL.S.TIME.txt | 4 +- 33 files changed, 615 insertions(+), 677 deletions(-) diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index 5ad9979e..d49c6f3c 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -1,86 +1,72 @@ *** Auto generated by docgen.cmd *** -# GetArg.A +## GetArg -## In: -+ A = argument index. - -## Out: -+ CC : success - + Y,A = CStr To Arg[A] -+ CS : Out Of Bound +# ASM +**In:** +A = argument index. +**Out:** +CC : success +Y,A = PTR 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: +**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: +**Out:** + CC : success + DstBuf = FilePath + DstStat = S.STAT + CS : not found # GetDevByID.A - -## IN: +**In:** + A = DevID - -## OUT: +**Out:** + CC = OK, CS = ERROR + Y,A = DEVSLOT + note: X Unmodified # GetDevByName.YA - -## IN: +**In:** + Y,A = Ptr to device name (C-String) - -## OUT: +**Out:** + CC = OK, CS = ERROR + X = DEVID + Y,A = DEVSLOT # GetDevStatus.A - -## IN: +**In:** + A = DevID - -## OUT: +**Out:** + Y,A = S.DSTAT # IOCTL - -## IN: +**In:** + PUSHB = DevID + PUSHB = Operation + PUSHW = Param Block - -## OUT: +**Out:** + Y,A = ... # OpenDir.YA - -## In: +**In:** + Y,A = PATH (C-String) - -## Out: +**Out:** + CC : success + A = hDIR + CS : error + A = EC # ReadDir.A - -## In: +**In:** + A = hDIR - -## Out: +**Out:** + CC : success + X = hDIRENT + Y,A = PTR to S.DIRENT @@ -89,135 +75,113 @@ And return, if found, the full path to it. + note : A = 0 means no more entry # CloseDir.A - -## In: +**In:** + A = hDIR - -## Out: +**Out:** + none, always succeed. # ExpandStr.YA - -## In: +**In:** + Y,A = PTR to String to Expand (C-String) - -## Out: +**Out:** + X = hMem to Expanded String (C-String) + Y,A = PTR to Expanded String # PutEnv.YA - -## In: +**In:** + Y,A = PTR to String NAME=VALUE (C-String) - -## Out: +**Out:** # SetEnv - -## In: +**In:** + PUSHW = PTR To Value (PSTR) + PUSHW = PTR To Name (PSTR) - -## Out: +**Out:** # GetEnv.YA - -## In: +**In:** + Y,A = PTR to NAME (PSTR) - -## Out: +**Out:** + CC : Y,A = PTR to VALUE (PSTR) + CS : not found # UnsetEnv.YA - -## In: +**In:** + Y,A = PTR To Name (PSTR) - -## Out: +**Out:** # LoadTxtFile.YA Load TXT a file in memory (with ending 0) - -## In: +**In:** + Y,A = File Path - -## Out: +**Out:** + Y,A = File Length (without ending 0) + X = hMem of Loaded File # LoadFile Load a file in memory - -## In: +**In:** + PUSHW = AUXTYPE (Handled by.... + PUSHB = TYPE ... + PUSHB = MODE ... + PUSHW = PATH ...FOpen) - -## Out: +**Out:** + Y,A = File Length + X = hMem of Loaded File # ChTyp - -## In: +**In:** + PUSHB = TYPE + PUSHW = PATH # ChMod - -## In: +**In:** + PUSHW = UID + PUSHW = PATH # ChOwn - -## In: +**In:** + PUSHW = UID + PUSHW = PATH # ChGrp - -## In: +**In:** + PUSHW = GID + PUSHW = PATH # FAdd,FSub,FMult,FDiv,FPwr Return X+Y, X-Y, X*Y, X/Y, X^Y - -## In: -+ PUSHW = X (*Float) -+ PUSHW = Y (*Float) -+ Y,A = Dest (*Float) +**In:** ++ PUSHF = X (Float) ++ PUSHF = Y (Float) +**Out:** ++ On stack (Float) # Log,Sqr,Exp,Cos,Sin,Tan,ATan Return Log(x), Sqr(x), E^X, Cos(x), Sin(X), Tan(x), ATan(x) - -## In: -+ PUSHW = X (*Float) -+ Y,A = Dest (*Float) +**In:** ++ PUSHF = X (Float) +**Out:** ++ On stack (Float) # Float -Return return 'floated' long - -## In: -+ PUSHW = X (*long) -+ Y,A = Dest (*float) +Return 'floated' long +**In:** ++ PUSHL = X (long) +**Out:** ++ On stack (Float) # LRIntF Return Float rounded into a long - -## In: -+ PUSHW = X (*Float) -+ Y,A = Dest (*long) +**In:** ++ PUSHF = X (Float) +**Out:** ++ On stack (long) # GetMem0.YA - -## In: +**In:** + Y,A = Size Requested - -## Out: +**Out:** + CC : success + YA = PTR to Mem (ZERO Initialised) * X = hMem @@ -225,11 +189,9 @@ Return Float rounded into a long + A = EC # GetMem.YA - -## In: +**In:** + Y,A = Size Requested - -## Out: +**Out:** + CC : success + YA = PTR to Mem (Uninitialised) * X = hMem @@ -237,39 +199,31 @@ Return Float rounded into a long + A = EC # FreeMem.A - -## In: +**In:** + A = hMem To Free - -## Out: +**Out:** + none. + (X,Y unmodified) # GetMemPtr.A - -## In: +**In:** + A = hMem - -## Out: +**Out:** + Y,A = PTR to MemBlock + (X unmodified) # GetMemByID.A - -## In: +**In:** + A = hMem - -## Out: +**Out:** + Y,A = ZPMemMgrSPtr = PTR to S.MEM + X unmodified # NewStr.YA Create a new copy of this C-String - -## In: +**In:** + Y,A = Ptr to source C-String - -## Out: +**Out:** + CC : success + Y,A = PTR to String + X = hMem (PSTR) @@ -277,78 +231,62 @@ Create a new copy of this C-String + A = SYS error code # SListGetByID - -## In: +**In:** + PUSHB = hSList + PUSHW = KeyID + PUSHW = Data Ptr + PUSHW = Key Ptr - -## Out: +**Out:** + X,Y = Next KeyID # SListUpdateByID - -## In: +**In:** + PUSHB = hSList + PUSHW = KeyID + PUSHW = Data Ptr - -## Out: +**Out:** + A = Key Length + X,Y = KeyID # SListAdd - -## In: +**In:** + PUSHB = hSList + PUSHW = Key Ptr + PUSHW = Data Ptr - -## Out: +**Out:** + A = Key Length + X,Y = KeyID # SListLookup - -## In: +**In:** + PUSHB = hSList + PUSHW = Key Ptr + PUSHW = Data Ptr - -## Out: +**Out:** + A = Key Length + X,Y = KeyID # SListNew - -## In: - -## Out: +**In:** +**Out:** + A=hSList # SListFree - -## In: +**In:** + A=hSList - -## Out: +**Out:** # GetStkObjProperty.AY - -## In: +**In:** + A = hObject (AUX Memory) + Y = Property Index - -## Out: +**Out:** + Y,A = Property Value # NewStkObj.YA - -## In: +**In:** + Y,A = Size Requested - -## Out: +**Out:** + CC : success + YA = PTR to Mem (Uninitialised) * X = hMem @@ -356,24 +294,20 @@ Create a new copy of this C-String + A = EC # FreeStkObj.A - -## In: +**In:** + A = hMem To Free (AUX Memory) - -## Out: +**Out:** + none. + (X,Y unmodified) # LoadStkObj Load a file in AUX memory (Stock Objects) - -## In: +**In:** + PUSHW = AUXTYPE (Handled by.... + PUSHB = TYPE ... + PUSHB = MODE ... + PUSHW = PATH ...FOpen) - -## Out: +**Out:** + Y,A = File Length + X = hMem of Loaded Object in AUX mem @@ -384,35 +318,27 @@ Load a file in AUX memory (Stock Objects) # CreatePSNewEnv.YA # CreatePS.YA (Non Blocking) - -## In: +**In:** + Y,A = PTR To Cmd Line - -## Out: +**Out:** + A = Child PSID # GetMemStat.YA - -## In: +**In:** + Y,A = Ptr to 24 bytes buffer - -## Out: +**Out:** + Buffer filled with memory stats # GetPSStatus.A - -## In: +**In:** + A = PID - -## Out: +**Out:** + A = Status Byte # GetPSStat.YA - -## In: +**In:** + Y,A = Ptr to 24 bytes buffer - -## Out: +**Out:** + Buffer filled with PS stats # Stat @@ -425,96 +351,153 @@ Return information about a file ## Out : # MKDir.YA - -## In: +**In:** + Y,A = DIR name - -## Out: +**Out:** + CC : success + CS : error + A = EC # MkNod.YA return a hFile for a given Device Name - -## IN: +**In:** + Y,A=DevName - -## OUT: +**Out:** + CC = OK, CS = ERROR + A = hFILE # MKFIFO return a hFILE to a new FIFO - -## IN: - -## OUT: +**In:** +**Out:** + CC = OK, CS = ERROR + A = hFILE -# FPutC.AY +# FPutC.A int fputc ( int character, hFILE stream ); Print A (char) to hFILE - -## In: +**In:** ++ PUSHB : hFILE + A : char to print -+ Y = hFILE - -## Out: +**Out:** + CC = success # PutChar.A int putchar ( int character ); Print A (char) to StdOut - -## In: +**In:** + A : char to print - -## Out: -+ CC = success - -# FPutS -int fputs ( const char * str, hFILE stream ); -Write Str to FILE - -## In: -+ PUSHW : CPtr -+ PUSHB : hFILE - -## Out: +**Out:** + CC = success # PutS.YA int puts ( const char * str ); -Write Str to StdOut, appends '\n' - -## In: +Write Str to StdOut, appends '\r\n' +**In:** + Y,A : CPtr - -## Out: +**Out:** + CC = success +# FPutS.YA +int fputs ( const char * str, hFILE stream ); +Write Str to FILE +**In:** ++ PUSHB : hFILE ++ Y,A: CPtr +**Out:** ++ CC = success + +# PrintF.YA +int printf ( const char * format, ... ); + +# SPrintF.YA +int sprintf ( char * str, const char * format, ... ); + +# FPrintF.A +int fprintf ( FILE * stream, const char * format, ... ); +* +Prints C-Style String +**In:** +PrintF.YA : + + PUSH ... + + Y,A = PTR to CStr +SPrintF.YA : + + PUSH ... + + PUSHW = PTR to CStr + + Y,A = Ptr to Dst Buffer +FPrintF.YA : + + PUSH ... + + PUSHW = PTR to CStr + + A = hFILE +* +**Out:** ++ CC : success ++ CS : error code from Output +Specifiers : + + %b : pull 1 byte to Print BIN + + %B : pull 2 bytes to Print BIN + + %d : pull 1 byte unsigned DEC 0..255 + + %D : pull 2 bytes unsigned DEC 0..65535 + + %u : pull 4 bytes long unsigned DEC 0..4294967295 + + %e : pull 5 Bytes float (-)1.23456789e+12 + + %f : pull 5 Bytes float (-)3.1415 + + %h : pull 1 byte to Print HEX + + %H : pull 2 bytes to Print HEX + + %i : pull 1 byte to Print signed DEC -128..127 + + %I : pull 2 bytes to Print signed DEC -32768..32767 + + %L : pull 4 bytes signed DEC -2147483648..2147483647 + + %n : pull 1 byte to Print low Nibble HEX + + %N : pull 1 byte to Print high Nibble HEX + + %s : pull 2 bytes ptr to C-Style String + + %S : pull 2 bytes ptr to P-Style String + + \b : Print 'BS' (08) + + \e : Print 'ESC' ($1B,27) + + \f : Print 'FF' ($0C,12) + + \n : Print 'LF' ($0A,10) + + \r : Print 'CR' ($0D,13) + + \\\\ : Print \ + + \% : Print % +Modifiers for len and padding : + + %d : '9' '12' + + %2d : ' 9' '12' + + %02d : '09' '12' + + %11s : 'ABCDEFGH ' + + %011s : 'ABCDEFGH000' + + %2f : '3.14' + # GetChar Get char from StdIn - -## In: +**In:** + none. - -## Out: +**Out:** + CC = success + A = char # GetC.A Get char from Node - -## In: +**In:** + A = hNODE - -## Out: +**Out:** + CC = success + A = char +# SScanF.YA +Scan a C-String (in progress) +**In:** ++ PUSHW PTR to target var ++ ... ++ PUSHW PTR pattern (ex: "%d.%d.%d.%d") + + %i : short int + + %d : byte + + %I : int + + %D : word +* %L : long int +* %U : dword + + %h : HEX byte + + %H : HEX word ++ Y,A = PTR to String to scan (ex: "192.168.1.5") +**Out:** + # FOpen Open a file @@ -556,8 +539,7 @@ Read bytes from file # FWrite int fwrite ( const void * ptr, int count, FILE * stream ); Write bytes to file - -## In: +**In:** + PUSHW = Src Ptr + PUSHW = Bytes To Write + PUSHB = hFILE @@ -566,25 +548,21 @@ Write bytes to file + Y,A = Bytes Written # FFlush.A - -## In: +**In:** + A = hFILE # FSeek Set the file-position indicator for hFILE - -## In: +**In:** + PUSHW = Ptr to Offset (DWORD) + PUSHB = From + PUSHB = hFILE # FEOF.A Test the end-of-file indicator for hFILE - -## In: +**In:** + A = hFILE - -## Out: +**Out:** + CC : + A=0 EOF + A =0 NOT EOF @@ -592,12 +570,10 @@ Test the end-of-file indicator for hFILE # FTell Return the current value of the file-position indicator - -## In: +**In:** + PUSHW = Ptr to Offset (DWORD) + PUSHB = hFILE - -## Out: +**Out:** + Offset = Offset # Remove.YA @@ -611,131 +587,58 @@ Rename a file ## Out : -# SScanF.YA -Scan a C-String (in progress) - -## In: -+ PUSHW PTR to target var -+ ... -+ PUSHW PTR pattern (ex: "%d.%d.%d.%d") - + %i : short int - + %d : byte - + %I : int - + %D : word -* %L : long int -* %U : dword - + %h : HEX byte - + %H : HEX word -+ Y,A = PTR to String to scan (ex: "192.168.1.5") - -## Out: - -# PrintF.YA/SPrintF.YA/FPrintF.YA -Prints C-Style String - -## In: -PrintF.YA : - + Y,A = PTR to CStr -SPrintF.YA : - + Y,A = PTR to CStr - + PULLW = Ptr to Dst Buffer -FPrintF.YA : - + Y,A = PTR to CStr - + PULLB = hNode - -## Out: -+ CC : success -+ CS : error code from Output -Specifiers : - + %b : pull 1 byte to Print BIN - + %B : pull 2 bytes to Print BIN - + %d : pull 1 byte unsigned DEC 0..255 - + %D : pull 2 bytes unsigned DEC 0..65535 - + %u : pull 4 bytes long unsigned DEC 0..4294967295 - + %e : pull 5 Bytes float (-)1.23456789e+12 - + %f : pull 5 Bytes float (-)3.1415 - + %h : pull 1 byte to Print HEX - + %H : pull 2 bytes to Print HEX - + %i : pull 1 byte to Print signed DEC -128..127 - + %I : pull 2 bytes to Print signed DEC -32768..32767 - + %L : pull 4 bytes signed DEC -2147483648..2147483647 - + %n : pull 1 byte to Print low Nibble HEX - + %N : pull 1 byte to Print high Nibble HEX - + %s : pull 2 bytes ptr to C-Style String - + %S : pull 2 bytes ptr to P-Style String - + \b : Print 'BS' (08) - + \e : Print 'ESC' ($1B,27) - + \f : Print 'FF' ($0C,12) - + \n : Print 'LF' ($0A,10) - + \r : Print 'CR' ($0D,13) - + \\\\ : Print \ - + \% : Print % -Modifiers for len and padding : - + %d : '9' '12' - + %2d : ' 9' '12' - + %02d : '09' '12' - + %11s : 'ABCDEFGH ' - + %011s : 'ABCDEFGH000' - + %2f : '3.14' - -# StrToF +## StrToF Convert String to 40 bits Float -## In: -+ PUSHW PTR to EndPtr -+ PUSHW Source String (C-Sring) -+ PUSHW PTR to target buffer (5 bytes) +# C +`float strtof (const char* str, char** endptr);` -## Out: -+ Target buffer filled with a FLOAT (packed) +# ASM +**In:** +`>PUSHWI EndPtr` +`>LDYA str` +**Out:** +On stack (float) -# AToF +## AToF Convert String to 40 bits Float -## In: -+ PUSHW Source String (C-Sring) -+ PUSHW PTR to target buffer (5 Bytes) +# C +`float atof (const char* str);` -## Out: +# ASM +**In:** +`>LDYA str` +**Out:** +On stack (float) -# StrToL -Convert String to 32 bits int +## StrToL (StrToUL) +Convert String to 32 bits (unsigned) int -## In: -+ PUSHB Base -+ PUSHW PTR to EndPtr -+ PUSHW Source String (C-Sring) -+ PUSHW PTR to target buffer DWORD +# C +`long strtol (const char* str, char** endptr, int base);` +`unsigned long strtol (const char* str, char** endptr, int base);` -## Out: - -# StrToUL -Convert String to 32 bits unsigned int - -## In: -+ PUSHB Base -+ PUSHW PTR to EndPtr -+ PUSHW Source String (C-Sring) -+ PUSHW PTR to target buffer DWORD - -## Out: +# ASM +**In:** +`>PUSHB Base` +`>PUSHWI EndPtr` +`>LDYA str` +**Out:** +On stack (long) # AToL Convert String to 32 bits int - -## In: +**In:** + PUSHW Source String (C-Sring) + PUSHW PTR to target buffer DWORD - -## Out: +**Out:** # AToI.YA Convert String to 16 bits int - -## In: +**In:** + Y,A = Source String (C-String) - -## Out: +**Out:** + Y,A = Int # RealPath.YA @@ -752,71 +655,57 @@ Return the canonicalized absolute pathname # StrLen.YA Returns Length of C-String - -## In: +**In:** + Y,A = Ptr to CSTR - -## Out: +**Out:** + Y,A = String length # StrCat Append SRC to DST - -## In: +**In:** + PUSHW = Ptr to SRC (CSTR) + PUSHW = Ptr to DST (CSTR) - -## Out: +**Out:** + DST = DST+SRC # StrCpy Copy string - -## In: +**In:** + PUSHW = Ptr to SRC (CSTR) + PUSHW = Ptr to DST (CSTR) - -## Out: +**Out:** + DST = SRC # StrMatch Compare a String against pattern - -## In: +**In:** + PUSHW = PTR to Pattern (e.g. '*test?.txt') + PUSHW = PTR to Src String - -## Out: +**Out:** + CC : match + CS : no match # StrUpr.YA/StrLwr.YA Convert string to UPPERCASE/lowercase - -## In: +**In:** + Y,A = PTR to String (CSTR) - -## Out: +**Out:** + Uppercased/lowercased String in Buffer # StrCmp Compare 2 strings - -## In: +**In:** + PUSHW = Ptr to String1 (CSTR) + PUSHW = Ptr to String2 (CSTR) - -## Out: +**Out:** + DST = SRC # StrICmp Compare 2 strings - -## In: +**In:** + PUSHW = Ptr to String1 (CSTR) + PUSHW = Ptr to String2 (CSTR) - -## Out: +**Out:** + CC, Y,A=0 + CS, Y,A > 0 or < 0 @@ -845,8 +734,7 @@ Compare 2 strings # StrFTime Convert S.TIME struct to CSTR - -## In: +**In:** + PUSHW = Dst PTR To CSTR Buf + PUSHW = Src PTR To Format String + %a : Abbreviated weekday name : Thu @@ -864,6 +752,5 @@ Convert S.TIME struct to CSTR + %y : Year, last two digits (00-99) + %Y : Year four digits 2001 + PUSHW = Src PTR To S.Time - -## Out: +**Out:** + none. always succeed. diff --git a/.Docs/LIBBLKDEV.md b/.Docs/LIBBLKDEV.md index 02790b02..c21ea2ad 100644 --- a/.Docs/LIBBLKDEV.md +++ b/.Docs/LIBBLKDEV.md @@ -31,26 +31,22 @@ # TrkW16s Write a track (16 sectors) - -## In: +**In:** + PUSHW = Ptr to 16*256 buffer + PUSHB = TrackNum * 4 : 0->140+ + PUSHB = DSSS0000 - -## Out: +**Out:** + CC : success + CS : A = Error + A=0, currently starting/seeking... # TrkWNIB Write a track (NIBBLE) - -## In: +**In:** + PUSHW = Ptr to NIBBLE buffer (0 ended) + PUSHB = TrackNum * 4 : 0->140+ + PUSHB = DSSS0000 - -## Out: +**Out:** + CC : success + CS : A = Error + A=0, currently starting/seeking... diff --git a/.Docs/LIBCRYPT.md b/.Docs/LIBCRYPT.md index 7e4a294a..a82dd8e0 100644 --- a/.Docs/LIBCRYPT.md +++ b/.Docs/LIBCRYPT.md @@ -1,35 +1,49 @@ *** Auto generated by docgen.cmd *** -# MD5 -+ Return MD5 Hash for input String +## MD5 +Return MD5 Hash for input String -## In : - + PUSHW = PTR to Src String - + PUSHW = PTR to Dst MessageDigest Buffer +# C +`void md5 (const char* str, char* digest);` -## Out : - + CC +# ASM +**In:** +`>PUSHW digest` +`>LDYA str` +**Out:** +CC -# MD5Init +## MD5Init +Initialize a MD5 computation -## In : +# C +`HANDLE md5init ();` -## Out : - + A = hMem To S.MD5 +# ASM +**In:** +**Out:** +A = hMem To S.MD5 -# MD5Update +## MD5Update +Add Data to MD5 computation -## In: -* PUSHW DATA LEN -* PUSHW DATA PTR -* PUSHB MD5 Context hMem +# C +`int md5update (HANDLE md5, char* data, int len);` -## Out : +# ASM +**In:** +`>PUSHW len` +`>PUSHW data` +`>LDA.G md5` +**Out:** -# MD5Finalize +## MD5Finalize -## In : - + PUSHW = MessageDigest (PSTR, 16 Bytes, 32 Chars) +Ending 0 - + PUSHB = hMem To S.MD5 +# C +`int md5finalize (HANDLE md5, char* digest);` -## Out: +# ASM +**In:** +`>PUSHW digest` +`>LDA.G md5` +**Out:** diff --git a/.Docs/LIBTCPIP.md b/.Docs/LIBTCPIP.md index 3f74e2ce..46bb70bb 100644 --- a/.Docs/LIBTCPIP.md +++ b/.Docs/LIBTCPIP.md @@ -9,28 +9,23 @@ # ARP.Query + Query ARP Cache and returns HW address - -## In: +**In:** + PUSHW PTR to MAC (to fill) + PUSHW PTR to IP - -## Out: +**Out:** + CC: hit: MAC filled + CS: missed # ARP.Add + Add a static ARP cache record - -## In: +**In:** + PUSHW PTR to MAC + PUSHW PTR to IP # ARP.GetCAche + Return a Ptr to ARP Cache Table - -## In: - -## Out: +**In:** +**Out:** + Y,A = PTR to ARP.CACHE # DNS.Clear @@ -42,28 +37,23 @@ # DNS.Query + Query DNS for specified host - -## In: +**In:** + PUSHW = PTR to IP to fill with cached data * PUSHW = hostname PTR to PSTR - -## Out: +**Out:** + CC: hit: IP filled with address + CS: missed # DNS.Add + Add a static DNS record - -## In: +**In:** + PUSHW = PTR to IP + PUSHW = hostname CSTR to Add # DNS.GetCAche + Return a Ptr to DNS Cache Table - -## In: - -## Out: +**In:** +**Out:** + Y,A = PTR to DNS.CACHE # SKT.New diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 1f2c297c5396ede1fc5162bc8b0f0b4eebce9f6a..543a732e69b861bebbff45622fe656dfe76b1071 100644 GIT binary patch delta 12705 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 bCyf!pQoL8I*sG1)tBu;LjXtc6x%PhnL_!dm delta 12233 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 aU}*J#^)s~f;!>VlX!wV4N~ksbxBGt`^ObV| delta 10959 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 .EM +*-------------------------------------- + .MA PUSHL.G + ldy #]1+4 +:1 dey + lda (pData),y + >PUSHA + cpy #]1 + bne :1 + .EM +*-------------------------------------- + .MA PULLL.G + ldy #]1 +:1 >PULLA + sta (pData),y + iny + cpy #]1+4 + bne :1 + .EM +*-------------------------------------- + .MA PUSHF.G + ldy #]1+5 +:1 dey + lda (pData),y + >PUSHA + cpy #]1 + bne :1 + .EM +*-------------------------------------- + .MA PULLF.G + ldy #]1 +:1 >PULLA + sta (pData),y + iny + cpy #]1+5 + bne :1 + .EM *-------------------------------------- .MA LDA.G ldy #]1 @@ -224,24 +260,6 @@ AUTO 4,1 pla sta (pData),y .EM -*-------------------------------------- - .MA PUSHF.G - ldy #]1+5 -:1 dey - lda (pData),y - >PUSHA - cpy #]1 - bne :1 - .EM -*-------------------------------------- - .MA PULLF.G - ldy #]1 -:1 >PULLA - sta (pData),y - iny - cpy #]1+5 - bne :1 - .EM *-------------------------------------- * STACK PUSH/PULL *-------------------------------------- diff --git a/LIB/LIBBLKDEV.S.txt b/LIB/LIBBLKDEV.S.txt index 995dd053..522a769d 100644 --- a/LIB/LIBBLKDEV.S.txt +++ b/LIB/LIBBLKDEV.S.txt @@ -291,11 +291,11 @@ D2TrkR16s */-------------------------------------- * # TrkW16s * Write a track (16 sectors) -* ## In: +* **In:** * PUSHW = Ptr to 16*256 buffer * PUSHB = TrackNum * 4 : 0->140+ * PUSHB = DSSS0000 -* ## Out: +* **Out:** * CC : success * CS : A = Error * A=0, currently starting/seeking... @@ -307,11 +307,11 @@ D2TrkW16s */-------------------------------------- * # TrkWNIB * Write a track (NIBBLE) -* ## In: +* **In:** * PUSHW = Ptr to NIBBLE buffer (0 ended) * PUSHB = TrackNum * 4 : 0->140+ * PUSHB = DSSS0000 -* ## Out: +* **Out:** * CC : success * CS : A = Error * A=0, currently starting/seeking... diff --git a/LIB/LIBCRYPT.S.txt b/LIB/LIBCRYPT.S.txt index fe066131..026c9349 100644 --- a/LIB/LIBCRYPT.S.txt +++ b/LIB/LIBCRYPT.S.txt @@ -111,17 +111,20 @@ LIB.LOAD LIB.UNLOAD clc rts */-------------------------------------- -* # MD5 -* Return MD5 Hash for input String -* ## In : -* PUSHW = PTR to Src String -* PUSHW = PTR to Dst MessageDigest Buffer -* ## Out : -* CC +* ## MD5 +* Return MD5 Hash for input String +* # C +* `void md5 (const char* str, char* digest);` +* # ASM +* **In:** +* `>PUSHW digest` +* `>LDYA str` +* **Out:** +* CC *\-------------------------------------- -MD5 >PULLW ZPHashPtr +MD5 >STYA ZPDataPtr + >PULLW ZPHashPtr >PULLYA - >STYA ZPDataPtr >SYSCALL StrLen.YA >STYA ZPDataLen @@ -140,12 +143,16 @@ MD5 >PULLW ZPHashPtr clc .9 rts */-------------------------------------- -* # MD5Init -* ## In : -* ## Out : -* A = hMem To S.MD5 +* ## MD5Init +* Initialize a MD5 computation +* # C +* `HANDLE md5init ();` +* # ASM +* **In:** +* **Out:** +* A = hMem To S.MD5 *\-------------------------------------- -MD5Init >LDYAI S.MD5.SIZE +MD5Init >LDYAI S.MD5 >SYSCALL GetMem.YA bcs .9 @@ -170,16 +177,19 @@ MD5Init >LDYAI S.MD5.SIZE clc .9 rts */-------------------------------------- -* # MD5Update -* ## In: -* PUSHW DATA LEN -* PUSHW DATA PTR -* PUSHB MD5 Context hMem -* ## Out : +* ## MD5Update +* Add Data to MD5 computation +* # C +* `int md5update (HANDLE md5, char* data, int len);` +* # ASM +* **In:** +* `>PUSHW len` +* `>PUSHW data` +* `>LDA.G md5` +* **Out:** *\-------------------------------------- -MD5Update >PULLA get MD5 Context - >SYSCALL GetMemPtr.A - >STYA ZPCtxPtr get MD5 Context +MD5Update >SYSCALL GetMemPtr.A get MD5 Context + >STYA ZPCtxPtr >PULLW ZPDataPtr get DATA >PULLW ZPDataLen get LEN @@ -255,11 +265,14 @@ MD5Update.I ldy #S.MD5.FINALIZED inc ZPDataPtr+1 bra .1 */-------------------------------------- -* # MD5Finalize -* ## In : -* PUSHW = MessageDigest (PSTR, 16 Bytes, 32 Chars) +Ending 0 -* PUSHB = hMem To S.MD5 -* ## Out: +* ## MD5Finalize +* # C +* `int md5finalize (HANDLE md5, char* digest);` +* # ASM +* **In:** +* `>PUSHW digest` +* `>LDA.G md5` +* **Out:** *\-------------------------------------- MD5Finalize >PULLA pha diff --git a/LIB/LIBTCPIP.S.ARP.txt b/LIB/LIBTCPIP.S.ARP.txt index ba89d237..ab8daaab 100644 --- a/LIB/LIBTCPIP.S.ARP.txt +++ b/LIB/LIBTCPIP.S.ARP.txt @@ -17,10 +17,10 @@ ARP.Clear ldx #K.ARPCACHE.SIZE*S.ARPCACHE */-------------------------------------- * # ARP.Query * Query ARP Cache and returns HW address -* ## In: +* **In:** * PUSHW PTR to MAC (to fill) * PUSHW PTR to IP -* ## Out: +* **Out:** * CC: hit: MAC filled * CS: missed *\-------------------------------------- @@ -45,7 +45,7 @@ ARP.Query >PULLW ZPPtrIP IP */-------------------------------------- * # ARP.Add * Add a static ARP cache record -* ## In: +* **In:** * PUSHW PTR to MAC * PUSHW PTR to IP *\-------------------------------------- @@ -86,8 +86,8 @@ ARP.ADD.I sta ARP.TmpCache */-------------------------------------- * # ARP.GetCAche * Return a Ptr to ARP Cache Table -* ## In: -* ## Out: +* **In:** +* **Out:** * Y,A = PTR to ARP.CACHE *\-------------------------------------- ARP.GetCAche >LDYA L.ARP.CACHE diff --git a/LIB/LIBTCPIP.S.DNS.txt b/LIB/LIBTCPIP.S.DNS.txt index 3a3506d2..b92aa248 100644 --- a/LIB/LIBTCPIP.S.DNS.txt +++ b/LIB/LIBTCPIP.S.DNS.txt @@ -17,10 +17,10 @@ DNS.Clear ldx #K.DNSCACHE.SIZE*S.DNSCACHE */-------------------------------------- * # DNS.Query * Query DNS for specified host -* ## In: +* **In:** * PUSHW = PTR to IP to fill with cached data * PUSHW = hostname PTR to PSTR -* ## Out: +* **Out:** * CC: hit: IP filled with address * CS: missed *\-------------------------------------- @@ -125,7 +125,7 @@ DNS.REQUEST lda hDNSSocket1 */-------------------------------------- * # DNS.Add * Add a static DNS record -* ## In: +* **In:** * PUSHW = PTR to IP * PUSHW = hostname CSTR to Add *\-------------------------------------- @@ -176,8 +176,8 @@ DNS.ADD.I sta DNS.TmpCache */-------------------------------------- * # DNS.GetCAche * Return a Ptr to DNS Cache Table -* ## In: -* ## Out: +* **In:** +* **Out:** * Y,A = PTR to DNS.CACHE *\-------------------------------------- DNS.GetCAche >LDYA L.DNS.CACHE diff --git a/README.md b/README.md index f81fddf4..2cf624c2 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,8 @@ + **A2OSX.BOOT.po** : **(0.9.1)** 140k BOOT disk image with all binaries + **A2OSX.DEV.po** : **(0.9.1)** 140k disk image with ASM binaries, Debug Tools & INClude files -+ **A2OSX.BUILD.po** : **(0.9.1)** 800k BOOT disk image with S-C MASM 3.0 and all binaries (BOOT+DEV) -+ **A2OSX.SRC.po** : **(0.9.1)** 800k disk image with all sources ++ **A2OSX.BUILD.po** : **(0.9.2)** 800k BOOT disk image with S-C MASM 3.0 and all binaries (BOOT+DEV) ++ **A2OSX.SRC.po** : **(0.9.2)** 800k disk image with all sources ## Latest News 2018-06-13 diff --git a/SBIN/GETTY.S.txt b/SBIN/GETTY.S.txt index 1f209bf4..75c16bbe 100644 --- a/SBIN/GETTY.S.txt +++ b/SBIN/GETTY.S.txt @@ -115,7 +115,7 @@ CS.RUN.LOOP .4 jsr Wait.Timeout bcc .1 - + >PUSHWI KVER >LDYA L.MSG.GREETINGS >SYSCALL PrintF.YA @@ -257,7 +257,7 @@ MSG.TELNETOPT .DA #IAC,#WILL,#TELOPT.BINARY .DA #IAC,#DO,#TELOPT.TTYPE .DA #IAC,#SB,#TELOPT.TTYPE,#SB.SEND,#IAC,#SE MSG.TELNETOPT.LEN .EQ *-MSG.TELNETOPT -MSG.GREETINGS .AZ "\r\nA2osX-GeTTY 0.9.1\r\n" +MSG.GREETINGS .AZ "\r\nA2osX-GeTTY %d.%d\r\n" ENV.TERM .AZ "TERM" *-------------------------------------- .DUMMY diff --git a/SBIN/SHELL.S.CSH.txt b/SBIN/SHELL.S.CSH.txt index 82b1cc7f..94180bff 100644 --- a/SBIN/SHELL.S.CSH.txt +++ b/SBIN/SHELL.S.CSH.txt @@ -654,19 +654,24 @@ CSH.GetNumInACC >LDA.G CSH.ACCT >PUSHWI ZPCSHBufPtr >PUSHW ZPCSHBufPtr - >PUSHEA.G CSH.ACC >SYSCALL StrToF + bcs .9 + >PULLF.G CSH.ACC + rts .1 >PUSHBI 10 >PUSHWI ZPCSHBufPtr >PUSHW ZPCSHBufPtr - >PUSHEA.G CSH.ACC >SYSCALL StrToL - rts + bcs .9 + >PULLL.G CSH.ACC + + +.9 rts *-------------------------------------- CSH.ZeroACC lda #0 ldx #5 @@ -927,12 +932,13 @@ CSH.BOPS.SUB >LDA.G CSH.ACCT clc rts -.8 >PUSHEA.G CSH.ACC - >PUSHEA.G CSH.ARG - >LEA.G CSH.ACC +.8 >PUSHF.G CSH.ACC + >PUSHF.G CSH.ARG >SYSCALL FSUB + bcs .9 - rts + >PULLF.G CSH.ACC +.9 rts CSH.BOPS.MUL clc rts diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index ed90f8f7..adb28b4f 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -138,6 +138,7 @@ CS.INIT jsr SetPWD .1 jsr HIS.Init bcs .9 + >PUSHWI KVER >LDYA L.MSG.GREETINGS >SYSCALL PrintF.YA @@ -355,7 +356,7 @@ INTCMDS .AZ "CD" .AZ "TIME" .HS 00 *-------------------------------------- -MSG.GREETINGS .AZ "\r\nA2osX-Shell 0.9.1\r\n\r\n" +MSG.GREETINGS .AZ "\r\nA2osX-Shell %d.%d\r\n\r\n" MSG.PROMPT .AZ "$ " MSG.ECHO .AZ ">%s\r\n" MSG.ERROR .AZ "[$%h]:%S.\r\n" diff --git a/SYS/KERNEL.S.ARG.txt b/SYS/KERNEL.S.ARG.txt index 9f39c73a..c68c76cf 100644 --- a/SYS/KERNEL.S.ARG.txt +++ b/SYS/KERNEL.S.ARG.txt @@ -2,15 +2,16 @@ NEW PREFIX /A2OSX.BUILD AUTO 4,1 */-------------------------------------- -* # GetArg.A -* ## In: -* A = argument index. -* ## Out: -* CC : success -* Y,A = CStr To Arg[A] -* CS : Out Of Bound +* ## GetArg +* # ASM +* **In:** +* A = argument index. +* **Out:** +* CC : success +* Y,A = PTR To Arg[A] +* CS : Out Of Bound *\-------------------------------------- -K.GetArg.A pha save requested arg# +K.GetArg pha save requested arg# ldy #S.PS.hARGS lda (pPs),y @@ -18,7 +19,7 @@ K.GetArg.A pha save requested arg# plx we want 0 ? - beq .80 yes, returns MemPtr + beq .8 yes, returns MemPtr >STYA ZPPtr1 no, save it @@ -42,8 +43,8 @@ K.GetArg.A pha save requested arg# lda (ZPPtr1) at end of ARGS[] ? beq .9 -.8 >LDYA ZPPtr1 -.80 clc + >LDYA ZPPtr1 +.8 clc rts .9 sec diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index 1d9154b8..8588c83d 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -142,12 +142,12 @@ BIN.FindDRV.YA sec * # FileSearch * Search a file in the provided PATH list * And return, if found, the full path to it. -* ## In: +* **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: +* **Out:** * CC : success * DstBuf = FilePath * DstStat = S.STAT diff --git a/SYS/KERNEL.S.D01.txt b/SYS/KERNEL.S.D01.txt index 8f67d8cd..a2141cf5 100644 --- a/SYS/KERNEL.S.D01.txt +++ b/SYS/KERNEL.S.D01.txt @@ -292,7 +292,7 @@ DevMgr.NUL.Code .DA .1 STATUS >PSTR "NULL DEVICE " .DA #S.DSTAT.T.CHAR .DA #0 - .DA #0,#91 + .DA KVER *-------------------------------------- * SYS DEVICE *-------------------------------------- @@ -316,7 +316,7 @@ DevMgr.SYS.Code .DA .1 STATUS >PSTR "A2osX SYS Screen" .DA #S.DSTAT.T.CHAR .DA #0 - .DA #0,#91 + .DA KVER *-------------------------------------- DevMgr.SYS.Open lda #1 sta A2osX.SCRNDEVS diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index 3a946ab7..962b6946 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -3,9 +3,9 @@ PREFIX /A2OSX.BUILD AUTO 4,1 */-------------------------------------- * # GetDevByID.A -* ## IN: +* **In:** * A = DevID -* ## OUT: +* **Out:** * CC = OK, CS = ERROR * Y,A = DEVSLOT * note: X Unmodified @@ -24,9 +24,9 @@ K.GetDevByID.A cmp DevMgr.Count rts CC */-------------------------------------- * # GetDevByName.YA -* ## IN: +* **In:** * Y,A = Ptr to device name (C-String) -* ## OUT: +* **Out:** * CC = OK, CS = ERROR * X = DEVID * Y,A = DEVSLOT @@ -71,9 +71,9 @@ K.GetDevDNF lda #MLI.E.NODEV CS from cpx/beq rts */-------------------------------------- * # GetDevStatus.A -* ## IN: +* **In:** * A = DevID -* ## OUT: +* **Out:** * Y,A = S.DSTAT *\-------------------------------------- K.DevClose.A ldx #DEVMGR.CLOSE @@ -88,11 +88,11 @@ K.GetDevStatus.A jmp (pDev) */-------------------------------------- * # IOCTL -* ## IN: +* **In:** * PUSHB = DevID * PUSHB = Operation * PUSHW = Param Block -* ## OUT: +* **Out:** * Y,A = ... *\-------------------------------------- K.IOCTL >PULLB .1+1 diff --git a/SYS/KERNEL.S.DIRENT.txt b/SYS/KERNEL.S.DIRENT.txt index 048fcbeb..0cd8fea4 100644 --- a/SYS/KERNEL.S.DIRENT.txt +++ b/SYS/KERNEL.S.DIRENT.txt @@ -3,9 +3,9 @@ PREFIX /A2OSX.BUILD AUTO 4,1 */-------------------------------------- * # OpenDir.YA -* ## In: +* **In:** * Y,A = PATH (C-String) -* ## Out: +* **Out:** * CC : success * A = hDIR * CS : error @@ -59,9 +59,9 @@ K.OpenDir.YA jsr PFT.CheckPathYA .99 rts */-------------------------------------- * # ReadDir.A -* ## In: +* **In:** * A = hDIR -* ## Out: +* **Out:** * CC : success * X = hDIRENT * Y,A = PTR to S.DIRENT @@ -599,9 +599,9 @@ K.ReadDir.A.ConvertTime rts */------------------------------------- * # CloseDir.A -* ## In: +* **In:** * A = hDIR -* ## Out: +* **Out:** * none, always succeed. *\------------------------------------- K.CloseDir.A .EQ K.FClose.A diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index 582d35b2..d1c027c6 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -3,9 +3,9 @@ PREFIX /A2OSX.BUILD AUTO 4,1 */-------------------------------------- * # ExpandStr.YA -* ## In: +* **In:** * Y,A = PTR to String to Expand (C-String) -* ## Out: +* **Out:** * X = hMem to Expanded String (C-String) * Y,A = PTR to Expanded String *\-------------------------------------- @@ -123,9 +123,9 @@ K.ExpandStr.YA stz .88+1 Reset Intermediate string... .9 rts */-------------------------------------- * # PutEnv.YA -* ## In: +* **In:** * Y,A = PTR to String NAME=VALUE (C-String) -* ## Out: +* **Out:** *\-------------------------------------- K.PutEnv.YA >STYA ZPPtr1 NAME=VALUE @@ -160,10 +160,10 @@ K.PutEnv.YA >STYA ZPPtr1 NAME=VALUE rts */-------------------------------------- * # SetEnv -* ## In: +* **In:** * PUSHW = PTR To Value (PSTR) * PUSHW = PTR To Name (PSTR) -* ## Out: +* **Out:** *\-------------------------------------- K.SetEnv jsr MEM.PullP1P2 Ptr1=NAME,Ptr2=VALUE K.SetEnv.I jsr K.UnsetEnv.I @@ -264,9 +264,9 @@ K.SetEnv.I jsr K.UnsetEnv.I rts */-------------------------------------- * # GetEnv.YA -* ## In: +* **In:** * Y,A = PTR to NAME (PSTR) -* ## Out: +* **Out:** * CC : Y,A = PTR to VALUE (PSTR) * CS : not found *\-------------------------------------- @@ -281,9 +281,9 @@ K.GetEnv.YA >STYA ZPPtr1 rts */-------------------------------------- * # UnsetEnv.YA -* ## In: +* **In:** * Y,A = PTR To Name (PSTR) -* ## Out: +* **Out:** *\-------------------------------------- K.UnsetEnv.YA >STYA ZPPtr1 Store VAR Name K.UnsetEnv.I jsr ENV.FindVarP1 diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index 6c7a2e69..649ca2f0 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -4,9 +4,9 @@ AUTO 4,1 */-------------------------------------- * # LoadTxtFile.YA * Load TXT a file in memory (with ending 0) -* ## In: +* **In:** * Y,A = File Path -* ## Out: +* **Out:** * Y,A = File Length (without ending 0) * X = hMem of Loaded File *\-------------------------------------- @@ -22,12 +22,12 @@ K.LoadTxtFile.YA */-------------------------------------- * # LoadFile * Load a file in memory -* ## In: +* **In:** * PUSHW = AUXTYPE (Handled by.... * PUSHB = TYPE ... * PUSHB = MODE ... * PUSHW = PATH ...FOpen) -* ## Out: +* **Out:** * Y,A = File Length * X = hMem of Loaded File *\-------------------------------------- @@ -140,7 +140,7 @@ FIO.Mem .BS 2 FIO.FSize .BS 2 */-------------------------------------- * # ChTyp -* ## In: +* **In:** * PUSHB = TYPE * PUSHW = PATH *\-------------------------------------- @@ -156,21 +156,21 @@ K.ChTyp jsr PFT.CheckPathSTK .9 rts */-------------------------------------- * # ChMod -* ## In: +* **In:** * PUSHW = UID * PUSHW = PATH *\-------------------------------------- K.ChMod */-------------------------------------- * # ChOwn -* ## In: +* **In:** * PUSHW = UID * PUSHW = PATH *\-------------------------------------- K.ChOwn */-------------------------------------- * # ChGrp -* ## In: +* **In:** * PUSHW = GID * PUSHW = PATH *\-------------------------------------- diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index f0e3cf07..58b483a5 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -26,11 +26,11 @@ GP.CodeStart jmp GP.SysCall *-------------------------------------- jmp GP.AtkCall *-------------------------------------- -* MLICALL (AUXLC to MAINLC) +* ROMCALL (AUXLC to ROMLC) * Used by Kernel * In: -* X = MLI Function -* A = Param Count +* X = ROM Function +* Y,A = Param *-------------------------------------- jmp GP.RomCall *-------------------------------------- diff --git a/SYS/KERNEL.S.MATH.txt b/SYS/KERNEL.S.MATH.txt index eeaddd43..00fbaac8 100644 --- a/SYS/KERNEL.S.MATH.txt +++ b/SYS/KERNEL.S.MATH.txt @@ -4,10 +4,10 @@ AUTO 4,1 */-------------------------------------- * # FAdd,FSub,FMult,FDiv,FPwr * Return X+Y, X-Y, X*Y, X/Y, X^Y -* ## In: +* **In:** * PUSHF = X (Float) * PUSHF = Y (Float) -* ## Out: +* **Out:** * On stack (Float) *\-------------------------------------- K.FAdd ldx #ROM.FADD @@ -19,17 +19,19 @@ K.FMult ldx #ROM.FMULT K.FDiv ldx #ROM.FDIV .HS 2C BIT ABS K.FPwr ldx #ROM.PWR - >STYA FORPNT + phx jsr MATH.PullFAC jsr MATH.PullARG + + plx bra MATH.Go */-------------------------------------- * # Log,Sqr,Exp,Cos,Sin,Tan,ATan * Return Log(x), Sqr(x), E^X, Cos(x), Sin(X), Tan(x), ATan(x) -* ## In: +* **In:** * PUSHF = X (Float) -* ## Out: +* **Out:** * On stack (Float) *\-------------------------------------- K.Log ldx #ROM.LOG @@ -45,16 +47,18 @@ K.Sin ldx #ROM.SIN K.Tan ldx #ROM.TAN .HS 2C BIT ABS K.ATan ldx #ROM.ATAN - >STYA FORPNT + phx jsr MATH.PullFAC + + plx bra MATH.Go */-------------------------------------- * # Float * Return 'floated' long -* ## In: +* **In:** * PUSHL = X (long) -* ## Out: +* **Out:** * On stack (Float) *\-------------------------------------- K.Float >PULLW FAC+1 @@ -65,10 +69,17 @@ K.Float >PULLW FAC+1 sta FAC Exp=32 ldx #ROM.LTOF - phx -MATH.Go plx - jsr GP.ROMCALL +MATH.Go jsr GP.ROMCALL + + lda pStack + sec + sbc #5 + sta pStack + + sta FORPNT + lda pStack+1 + sta FORPNT+1 ldx #ROM.GETFAC jsr GP.ROMCALL @@ -78,9 +89,9 @@ MATH.Go plx */-------------------------------------- * # LRIntF * Return Float rounded into a long -* ## In: +* **In:** * PUSHF = X (Float) -* ## Out: +* **Out:** * On stack (long) *\-------------------------------------- K.LRIntF jsr MATH.PullFAC diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index b78163f7..7f9c5c9c 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -19,9 +19,9 @@ ZPSListDataPtr .EQ ZPMEMMGR+14 *-------------------------------------- */-------------------------------------- * # GetMem0.YA -* ## In: +* **In:** * Y,A = Size Requested -* ## Out: +* **Out:** * CC : success * YA = PTR to Mem (ZERO Initialised) * X = hMem @@ -32,9 +32,9 @@ K.GetMem0.YA ldx #S.MEM.F.INIT0 .HS 2C bit abs */-------------------------------------- * # GetMem.YA -* ## In: +* **In:** * Y,A = Size Requested -* ## Out: +* **Out:** * CC : success * YA = PTR to Mem (Uninitialised) * X = hMem @@ -236,9 +236,9 @@ Mem.NextSlot lda ZPMemMgrSPtr .8 rts */-------------------------------------- * # FreeMem.A -* ## In: +* **In:** * A = hMem To Free -* ## Out: +* **Out:** * none. * (X,Y unmodified) *\-------------------------------------- @@ -332,9 +332,9 @@ K.FreeMem.A phy K.FreeMem.A.ERR .AZ "FreeMem:%H:hMem already freed." */-------------------------------------- * # GetMemPtr.A -* ## In: +* **In:** * A = hMem -* ## Out: +* **Out:** * Y,A = PTR to MemBlock * (X unmodified) *\-------------------------------------- @@ -348,9 +348,9 @@ K.GetMemPtr.A jsr K.GetMemByID.A rts */-------------------------------------- * # GetMemByID.A -* ## In: +* **In:** * A = hMem -* ## Out: +* **Out:** * Y,A = ZPMemMgrSPtr = PTR to S.MEM * X unmodified *\-------------------------------------- @@ -399,9 +399,9 @@ K.GetMemByID.A sta ZPMemMgrSPtr */-------------------------------------- * # NewStr.YA * Create a new copy of this C-String -* ## In: +* **In:** * Y,A = Ptr to source C-String -* ## Out: +* **Out:** * CC : success * Y,A = PTR to String * X = hMem (PSTR) @@ -451,22 +451,22 @@ K.NewStr.YA >STYA .1+1 .9 rts */-------------------------------------- * # SListGetByID -* ## In: +* **In:** * PUSHB = hSList * PUSHW = KeyID * PUSHW = Data Ptr * PUSHW = Key Ptr -* ## Out: +* **Out:** * X,Y = Next KeyID *\-------------------------------------- K.SListGetByID >PULLW ZPSListKeyPtr */-------------------------------------- * # SListUpdateByID -* ## In: +* **In:** * PUSHB = hSList * PUSHW = KeyID * PUSHW = Data Ptr -* ## Out: +* **Out:** * A = Key Length * X,Y = KeyID *\-------------------------------------- @@ -476,22 +476,22 @@ K.SListUpdateByID bra K.SListPullH */-------------------------------------- * # SListAdd -* ## In: +* **In:** * PUSHB = hSList * PUSHW = Key Ptr * PUSHW = Data Ptr -* ## Out: +* **Out:** * A = Key Length * X,Y = KeyID *\-------------------------------------- K.SListAdd */-------------------------------------- * # SListLookup -* ## In: +* **In:** * PUSHB = hSList * PUSHW = Key Ptr * PUSHW = Data Ptr -* ## Out: +* **Out:** * A = Key Length * X,Y = KeyID *\-------------------------------------- @@ -502,16 +502,16 @@ K.SListLookup K.SListPullH >PULLA */-------------------------------------- * # SListNew -* ## In: -* ## Out: +* **In:** +* **Out:** * A=hSList *\-------------------------------------- K.SListNew */-------------------------------------- * # SListFree -* ## In: +* **In:** * A=hSList -* ## Out: +* **Out:** *\-------------------------------------- K.SListFree.A *-------------------------------------- @@ -523,10 +523,10 @@ K.SListFree.A rts */-------------------------------------- * # GetStkObjProperty.AY -* ## In: +* **In:** * A = hObject (AUX Memory) * Y = Property Index -* ## Out: +* **Out:** * Y,A = Property Value *\-------------------------------------- K.GetStkObjProperty.AY @@ -545,9 +545,9 @@ K.GetStkObjProperty.AY rts */-------------------------------------- * # NewStkObj.YA -* ## In: +* **In:** * Y,A = Size Requested -* ## Out: +* **Out:** * CC : success * YA = PTR to Mem (Uninitialised) * X = hMem @@ -558,9 +558,9 @@ K.NewStkObj.YA ldx #SYS.GetMem.YA .HS 2C BIT ABS */-------------------------------------- * # FreeStkObj.A -* ## In: +* **In:** * A = hMem To Free (AUX Memory) -* ## Out: +* **Out:** * none. * (X,Y unmodified) *\-------------------------------------- @@ -579,12 +579,12 @@ MEM.GoStkObj sta SETREADAUX */-------------------------------------- * # LoadStkObj * Load a file in AUX memory (Stock Objects) -* ## In: +* **In:** * PUSHW = AUXTYPE (Handled by.... * PUSHB = TYPE ... * PUSHB = MODE ... * PUSHW = PATH ...FOpen) -* ## Out: +* **Out:** * Y,A = File Length * X = hMem of Loaded Object in AUX mem *\-------------------------------------- diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 11dc1bf3..bd83bcd6 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -6,9 +6,9 @@ AUTO 4,1 * # ExecPS.YA (Blocking Parent PID) * # CreatePSNewEnv.YA * # CreatePS.YA (Non Blocking) -* ## In: +* **In:** * Y,A = PTR To Cmd Line -* ## Out: +* **Out:** * A = Child PSID *\-------------------------------------- K.ExecPSNewEnv.YA @@ -386,9 +386,9 @@ PS.SetMemOwner lda CORE.LastPSID rts */-------------------------------------- * # GetMemStat.YA -* ## In: +* **In:** * Y,A = Ptr to 24 bytes buffer -* ## Out: +* **Out:** * Buffer filled with memory stats *\-------------------------------------- K.GetMemStat.YA >STYA ZPMemMgrTmp1 @@ -421,9 +421,9 @@ K.GetMemStat.YA >STYA ZPMemMgrTmp1 rts */-------------------------------------- * # GetPSStatus.A -* ## In: +* **In:** * A = PID -* ## Out: +* **Out:** * A = Status Byte *\-------------------------------------- K.GetPSStatus.A jsr CORE.GetPSByID.A @@ -433,9 +433,9 @@ K.GetPSStatus.A jsr CORE.GetPSByID.A .9 rts */-------------------------------------- * # GetPSStat.YA -* ## In: +* **In:** * Y,A = Ptr to 24 bytes buffer -* ## Out: +* **Out:** * Buffer filled with PS stats *\-------------------------------------- K.GetPSStat.YA >STYA ZPPtr1 diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index 47965a31..94c1a285 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -85,9 +85,9 @@ K.Stat.DST .DA #S.STAT.P.TYPE .DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1 */------------------------------------- * # MKDir.YA -* ## In: +* **In:** * Y,A = DIR name -* ## Out: +* **Out:** * CC : success * CS : error * A = EC @@ -114,9 +114,9 @@ K.MKDir.YA jsr PFT.CheckPathYA */-------------------------------------- * # MkNod.YA * return a hFile for a given Device Name -* ## IN: +* **In:** * Y,A=DevName -* ## OUT: +* **Out:** * CC = OK, CS = ERROR * A = hFILE *\-------------------------------------- @@ -167,8 +167,8 @@ K.MkNod.YA jsr K.GetDevByName.YA Ptr1=NAME */-------------------------------------- * # MKFIFO * return a hFILE to a new FIFO -* ## IN: -* ## OUT: +* **In:** +* **Out:** * CC = OK, CS = ERROR * A = hFILE *\-------------------------------------- diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 84ca98b2..90a8f841 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -5,10 +5,10 @@ AUTO 4,1 * # FPutC.A * int fputc ( int character, hFILE stream ); * Print A (char) to hFILE -* ## In: +* **In:** * PUSHB : hFILE * A : char to print -* ## Out: +* **Out:** * CC = success *\-------------------------------------- K.FPutC.AY sta K.IOBuf @@ -19,9 +19,9 @@ K.FPutC.AY sta K.IOBuf * # PutChar.A * int putchar ( int character ); * Print A (char) to StdOut -* ## In: +* **In:** * A : char to print -* ## Out: +* **Out:** * CC = success *\-------------------------------------- K.PutChar.A sta K.IOBuf @@ -41,9 +41,9 @@ K.PutChar.A.1 jsr K.GetMemPtr.A * # PutS.YA * int puts ( const char * str ); * Write Str to StdOut, appends '\r\n' -* ## In: +* **In:** * Y,A : CPtr -* ## Out: +* **Out:** * CC = success *\-------------------------------------- K.PutS.YA >STYA pIOBuf @@ -62,10 +62,10 @@ K.PutS.YA >STYA pIOBuf * # FPutS.YA * int fputs ( const char * str, hFILE stream ); * Write Str to FILE -* ## In: +* **In:** * PUSHB : hFILE * Y,A: CPtr -* ## Out: +* **Out:** * CC = success *\-------------------------------------- K.FPutS.YA >STYA pIOBuf @@ -103,7 +103,7 @@ K.FPutS.YA.1 jsr K.GetMemPtr.A * int fprintf ( FILE * stream, const char * format, ... ); * * Prints C-Style String -* ## In: +* **In:** * PrintF.YA : * PUSH ... * Y,A = PTR to CStr @@ -116,7 +116,7 @@ K.FPutS.YA.1 jsr K.GetMemPtr.A * PUSHW = PTR to CStr * A = hFILE * -* ## Out: +* **Out:** * CC : success * CS : error code from Output * Specifiers : @@ -646,9 +646,9 @@ STDIO.Out.FIFO ldy #S.NODE.FIFO.S */-------------------------------------- * # GetChar * Get char from StdIn -* ## In: +* **In:** * none. -* ## Out: +* **Out:** * CC = success * A = char *\-------------------------------------- @@ -657,9 +657,9 @@ K.GetChar ldy #S.PS.hStdIn */-------------------------------------- * # GetC.A * Get char from Node -* ## In: +* **In:** * A = hNODE -* ## Out: +* **Out:** * CC = success * A = char *\-------------------------------------- @@ -729,7 +729,7 @@ BCDBUF .EQ ARG */-------------------------------------- * # SScanF.YA * Scan a C-String (in progress) -* ## In: +* **In:** * PUSHW PTR to target var * ... * PUSHW PTR pattern (ex: "%d.%d.%d.%d") @@ -742,7 +742,7 @@ BCDBUF .EQ ARG * %h : HEX byte * %H : HEX word * Y,A = PTR to String to scan (ex: "192.168.1.5") -* ## Out: +* **Out:** *\-------------------------------------- K.SScanF.YA >STYA ZPPtr2 String to Scan >PULLW ZPPtr1 Pattern @@ -1014,7 +1014,7 @@ K.FRead jsr PFT.CheckNodeSTK * # FWrite * int fwrite ( const void * ptr, int count, FILE * stream ); * Write bytes to file -* ## In: +* **In:** * PUSHW = Src Ptr * PUSHW = Bytes To Write * PUSHB = hFILE @@ -1035,7 +1035,7 @@ K.FReadWrite.1 >PULLA .9 rts */-------------------------------------- * # FFlush.A -* ## In: +* **In:** * A = hFILE *\-------------------------------------- K.FFlush.A jsr PFT.CheckNodeA @@ -1045,7 +1045,7 @@ K.FFlush.A jsr PFT.CheckNodeA */------------------------------------- * # FSeek * Set the file-position indicator for hFILE -* ## In: +* **In:** * PUSHW = Ptr to Offset (DWORD) * PUSHB = From * PUSHB = hFILE @@ -1114,9 +1114,9 @@ K.FSeek jsr PFT.CheckNodeSTK */-------------------------------------- * # FEOF.A * Test the end-of-file indicator for hFILE -* ## In: +* **In:** * A = hFILE -* ## Out: +* **Out:** * CC : * A=0 EOF * A !=0 NOT EOF @@ -1153,10 +1153,10 @@ K.FEOF.A.MARK .BS 3 */-------------------------------------- * # FTell * Return the current value of the file-position indicator -* ## In: +* **In:** * PUSHW = Ptr to Offset (DWORD) * PUSHB = hFILE -* ## Out: +* **Out:** * Offset = Offset *\-------------------------------------- K.FTell jsr PFT.CheckNodeSTK diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index a3dbf7c8..0f309d87 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -2,14 +2,16 @@ NEW PREFIX /A2OSX.BUILD AUTO 4,1 */-------------------------------------- -* # StrToF +* ## StrToF * Convert String to 40 bits Float -* ## In: -* PUSHW PTR to EndPtr -* PUSHW Source String (C-Sring) -* PUSHW PTR to target buffer (5 bytes) -* ## Out: -* Target buffer filled with a FLOAT (packed) +* # C +* `float strtof (const char* str, char** endptr);` +* # ASM +* **In:** +* `>PUSHWI EndPtr` +* `>LDYA str` +* **Out:** +* On stack (float) *\-------------------------------------- K.StrToF jsr K.AToF >PULLW ZPPtr3 @@ -20,12 +22,15 @@ K.StrToF jsr K.AToF sta (ZPPtr3),y rts */-------------------------------------- -* # AToF +* ## AToF * Convert String to 40 bits Float -* ## In: -* PUSHW Source String (C-Sring) -* PUSHW PTR to target buffer (5 Bytes) -* ## Out: +* # C +* `float atof (const char* str);` +* # ASM +* **In:** +* `>LDYA str` +* **Out:** +* On stack (float) *\-------------------------------------- K.AToF >PULLW FORPNT Ptr to dst buffer >PULLW TXTPTR Ptr to source string @@ -39,27 +44,21 @@ K.AToF >PULLW FORPNT Ptr to dst buffer clc rts */-------------------------------------- -* # StrToL -* Convert String to 32 bits int -* ## In: -* PUSHB Base -* PUSHW PTR to EndPtr -* PUSHW Source String (C-Sring) -* PUSHW PTR to target buffer DWORD -* ## Out: +* ## StrToL (StrToUL) +* Convert String to 32 bits (unsigned) int +* # C +* `long strtol (const char* str, char** endptr, int base);` +* `unsigned long strtol (const char* str, char** endptr, int base);` +* # ASM +* **In:** +* `>PUSHB Base` +* `>PUSHWI EndPtr` +* `>LDYA str` +* **Out:** +* On stack (long) *\-------------------------------------- K.StrToL sec Signed .HS 90 BCC -*/-------------------------------------- -* # StrToUL -* Convert String to 32 bits unsigned int -* ## In: -* PUSHB Base -* PUSHW PTR to EndPtr -* PUSHW Source String (C-Sring) -* PUSHW PTR to target buffer DWORD -* ## Out: -*\-------------------------------------- K.StrToUL clc Unsigned jsr MEM.PullP1P2P3 >PULLA Base @@ -79,10 +78,10 @@ K.StrToUL.rts rts */-------------------------------------- * # AToL * Convert String to 32 bits int -* ## In: +* **In:** * PUSHW Source String (C-Sring) * PUSHW PTR to target buffer DWORD -* ## Out: +* **Out:** *\-------------------------------------- *STDLIB.32 .BS 4 32 bits max STDLIB.32 .EQ FAC 32 bits max @@ -110,9 +109,9 @@ K.AToL.I jsr STDLIB.GetDec */-------------------------------------- * # AToI.YA * Convert String to 16 bits int -* ## In: +* **In:** * Y,A = Source String (C-String) -* ## Out: +* **Out:** * Y,A = Int *\-------------------------------------- K.AToI.YA >STYA ZPPtr2 diff --git a/SYS/KERNEL.S.STRING.txt b/SYS/KERNEL.S.STRING.txt index 68c1ba1f..8a5d58a3 100644 --- a/SYS/KERNEL.S.STRING.txt +++ b/SYS/KERNEL.S.STRING.txt @@ -4,9 +4,9 @@ AUTO 4,1 */-------------------------------------- * # StrLen.YA * Returns Length of C-String -* ## In: +* **In:** * Y,A = Ptr to CSTR -* ## Out: +* **Out:** * Y,A = String length *\-------------------------------------- K.StrLen.YA >STYA ZPPtr1 @@ -27,10 +27,10 @@ K.StrLen.YA >STYA ZPPtr1 */-------------------------------------- * # StrCat * Append SRC to DST -* ## In: +* **In:** * PUSHW = Ptr to SRC (CSTR) * PUSHW = Ptr to DST (CSTR) -* ## Out: +* **Out:** * DST = DST+SRC *\-------------------------------------- K.StrCat jsr MEM.PullP1P2 @@ -45,10 +45,10 @@ K.StrCat jsr MEM.PullP1P2 */-------------------------------------- * # StrCpy * Copy string -* ## In: +* **In:** * PUSHW = Ptr to SRC (CSTR) * PUSHW = Ptr to DST (CSTR) -* ## Out: +* **Out:** * DST = SRC *\-------------------------------------- K.StrCpy jsr MEM.PullP1P2 @@ -68,10 +68,10 @@ K.StrCpy.I ldy #0 */-------------------------------------- * # StrMatch * Compare a String against pattern -* ## In: +* **In:** * PUSHW = PTR to Pattern (e.g. '*test?.txt') * PUSHW = PTR to Src String -* ## Out: +* **Out:** * CC : match * CS : no match *\-------------------------------------- @@ -142,9 +142,9 @@ K.StrMatch jsr MEM.PullP1P2 */-------------------------------------- * # StrUpr.YA/StrLwr.YA * Convert string to UPPERCASE/lowercase -* ## In: +* **In:** * Y,A = PTR to String (CSTR) -* ## Out: +* **Out:** * Uppercased/lowercased String in Buffer *\-------------------------------------- K.StrUpr.YA ldx #0 @@ -179,10 +179,10 @@ K.StrLwr.YA ldx #2 */-------------------------------------- * # StrCmp * Compare 2 strings -* ## In: +* **In:** * PUSHW = Ptr to String1 (CSTR) * PUSHW = Ptr to String2 (CSTR) -* ## Out: +* **Out:** * DST = SRC *\-------------------------------------- K.StrCmp sec @@ -190,10 +190,10 @@ K.StrCmp sec */-------------------------------------- * # StrICmp * Compare 2 strings -* ## In: +* **In:** * PUSHW = Ptr to String1 (CSTR) * PUSHW = Ptr to String2 (CSTR) -* ## Out: +* **Out:** * CC, Y,A=0 * CS, Y,A > 0 or < 0 *\-------------------------------------- diff --git a/SYS/KERNEL.S.TIME.txt b/SYS/KERNEL.S.TIME.txt index b4f5d2be..f67a4d35 100644 --- a/SYS/KERNEL.S.TIME.txt +++ b/SYS/KERNEL.S.TIME.txt @@ -377,7 +377,7 @@ K.CTime.Year .BS 1 */-------------------------------------- * # StrFTime * Convert S.TIME struct to CSTR -* ## In: +* **In:** * PUSHW = Dst PTR To CSTR Buf * PUSHW = Src PTR To Format String * %a : Abbreviated weekday name : Thu @@ -395,7 +395,7 @@ K.CTime.Year .BS 1 * %y : Year, last two digits (00-99) * %Y : Year four digits 2001 * PUSHW = Src PTR To S.Time -* ## Out: +* **Out:** * none. always succeed. *\-------------------------------------- K.StrFTime jsr MEM.PullP1P2P3