diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index f9b086b5..2236c33b 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -30,8 +30,8 @@ Expand String and convert to StrV List short int arg2argv(char* args, char* argv[]) ## ASM +`>PUSHW args` `>PUSHW argv` -`>LDYA args` `>SYSCALL Arg2ArgV` ## RETURN VALUE @@ -82,11 +82,11 @@ X = hDev # GetDevStatus ## C -`int getdevstatus(short int DevID, S.DIB* dstat);` +`int getdevstatus(short int DevID, S.DIB *dstat);` ## ASM -`>PUSHWI S.DIB` -`lda DevID` +`PUSHB DevID` +`>PUSHW S.DIB` `>SYSCALL GetDevStatus` ## RETURN VALUE @@ -95,23 +95,37 @@ X = hDev Create a hDEV ## C -`hDEV mkdev (S.FD * fd, const char *devname)` +`hDEV mkdev (S.FD *fd, const char *devname)` ## ASM +`>PUSHW fd` `>PUSHW devname` -`>LDYA fd` `>SYSCALL mkdev ## RETURN VALUE A = hDEV +# IOCTL + +## C +`int ioctl(short int DevID, int request, void * param );` + +## ASM +`>PUSHB hDEV` +`>PUSHB request` +`>PUSHW param` +`>SYSCALL IOCTL` + +## RETURN VALUE + Y,A = ... + # OpenDir ## C `int hDIR opendir (const char * dirpath);` ## ASM -`>LDYA dirpath` +`>PUSHW dirpath` `>SYSCALL opendir` ## RETURN VALUE @@ -150,25 +164,10 @@ Create a hDEV ## RETURN VALUE none, always succeed. -# Expand - -## C -`char *expand(const char *str, char *expanded);` - -## ASM -**In:** -`>PUSHW str` -`>PUSHW expanded` -`>SYSCALL expand` - -## RETURN VALUE - Y,A = PTR to Expanded String - X = hMem to Expanded String (C-String) - # SetEnv Change or add an environment variable -## C +## C / CSH `int setenv(const char *name, const char *value);` ## ASM @@ -183,7 +182,7 @@ Change or add an environment variable searches the environment list to find the environment variable name, and returns a pointer to the corresponding value string. -## C +## C / CSH `char *getenv(const char *name, char *value);` ## ASM @@ -199,7 +198,7 @@ and returns a pointer to the corresponding value string. # PutEnv Change or add an environment variable, string is 'NAME=VALUE' -## C +## C / CSH `int putenv(char *string);` ## ASM @@ -212,7 +211,7 @@ Change or add an environment variable, string is 'NAME=VALUE' # UnsetEnv Remove an environment variable -## C +## C / CSH `int unsetenv(const char *name);` ## ASM @@ -222,37 +221,13 @@ Remove an environment variable ## RETURN VALUE -# ChTyp -Change The type of a ProDOS File - -## C -`int chtyp(const char *filepath, const char filetype);` - -## ASM -**In:** -`>PUSHBI filetype` -`>LDYA filepath` -`>SYSCALL chtyp` - -## RETURN VALUE - -# ChOwn -**In:** - PUSHW = mod - PUSHW = PATH - -# ChGrp -**In:** - PUSHW = GID - PUSHW = PATH - # Add32,Sub32,Mul32,IMul32,Div32,IDiv32,Mod32,IMod32,Cmp32,ICmp32 Return X+Y, X-Y, X*Y, X/Y, X mod Y.... ## ASM **In:** -`>PUSHF X (long)` -`>PUSHF Y (long)` +`>PUSHL X (long)` +`>PUSHL Y (long)` `>FPU add32` `...` @@ -323,20 +298,6 @@ Return float rounded into a long ## RETURN VALUE On stack (long) -# IOCTL - -## C -`int ioctl(short int DevID, int request, void * param );` - -## ASM -`PUSHWI param` -`PUSHBI request` -`lda hDEV` -`>SYSCALL IOCTL` - -## RETURN VALUE - Y,A = ... - ## MD5 Return MD5 Hash for input String @@ -439,10 +400,10 @@ Y,A = PTR to MemBlock # LoadStkObj Load a file in AUX memory (Stock Objects) - PUSHW = AUXTYPE (Handled by.... - PUSHB = TYPE ... + PUSHW = PATH (Handled by.... PUSHB = MODE ... - LDYA = PATH ...FOpen) + PUSHB = TYPE ... + PUSHW = AUXTYPE ...FOpen) ## RETURN VALUE Y,A = File Length @@ -465,8 +426,8 @@ Load a file in AUX memory (Stock Objects) # ExecL -## C -`int execl(const char* cmdline, short int flags);` +## C / CSH +`int execl(const char *cmdline, short int flags);` ## ASM `>PUSHW cmdline` @@ -478,12 +439,12 @@ A = Child PSID # ExecV -## C +## C / CSH `int execv(const char* argv[], short int flags);` ## ASM +`>PUSHW argv` `>PUSHB flags` -`>LDYA argv` `>SYSCALL execv` ## RETURN VALUE @@ -492,7 +453,7 @@ A = Child PSID # Fork ## C -`short nt fork();` +`short int fork();` ## ASM `>SYSCALL fork` @@ -696,6 +657,20 @@ A=hSList ## RETURN VALUE +# ChTyp +Change The type of a ProDOS File + +## C +`int chtyp(const char *filepath, short int filetype);` + +## ASM +**In:** +`>PUSHW filepath` +`>PUSHB filetype` +`>SYSCALL chtyp` + +## RETURN VALUE + # Stat Return information about a file @@ -704,8 +679,8 @@ Return information about a file ## ASM **In:** +`>PUSHW pathname` `>PUSHW statbuf` -`>LDYA pathname` `>SYSCALL stat` ## RETURN VALUE @@ -718,8 +693,8 @@ create a directory ## ASM **In:** +`>PUSHW pathname` `>PUSHW mode` -`>LDYA pathname` `>SYSCALL mkdir` ## RETURN VALUE @@ -832,78 +807,6 @@ Write Str to hFILE ## RETURN VALUE CC = success -# PrintF (BLOCKING) - -# FPrintF (BLOCKING) - -# SPrintF -Prints C-Style String - -## C -`int printf ( const char * format, ... );` -`int fprintf ( hFILE stream, const char * format, ... );` -`int sprintf ( char * str, const char * format, ... );` - -## ASM -**In:** -PrintF : (example is for printing Y,A as integer : format="%I", 2 bytes) -`>PUSHYA` #I -`>PUSHBI 2` #bytecount -`...` -`>LDYAI format` -`>SYSCALL printf` -FPrintF : -`>PUSHYA` #I -`>PUSHBI 2` #bytecount -`...` -`>PUSHWI format` -`lda hFILE` -`>SYSCALL fprintf` -SPrintF : -`>PUSHYA` #I -`>PUSHBI 2` #bytecount -`...` -`>PUSHWI format` -`>LDYAI str` -`>SYSCALL sprintf` - -## RETURN VALUE -CC : success, Y,A = bytes sent -CS : error, A = code from Output -Specifiers : -+ %b : pull 1 byte 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 -+ %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) -+ \t : Print 'TAB' ($09,09) -+ \v : Print 'VT' ($0B,11) -+ \xHH : Print byte with hexadecimal value HH (1 to 2 digits) -+ \\\\ : Print \ -+ \\% : Print % - -Modifiers for len and padding : -+ %d : '9' '12' -+ %2d : ' 9' '12' -+ %02d : '09' '12' -+ %11s : 'ABCDEFGH ' -+ %011s : 'ABCDEFGH000' -+ %2f : '3.14' - - # fgets (BLOCKING) read bytes from stream into the array pointed to by s, until n-1 bytes are read, or a is read and @@ -953,52 +856,24 @@ Get char from Node CC = success A = char -# SScanF -Read formatted data from string - -## C -`int sscanf ( const char * s, const char * format, ... );` - -## ASM -**In:** -`>PUSHW ptr` -`...` -`>PUSHBI bytecount` -`>PUSHWI format` -+ %i : short int -+ %d : byte -+ %I : int -+ %D : word -+ %L : long int -+ %U : dword -+ %h : HEX byte -+ %H : HEX word -+ %s : string - -TODO : %10s -`>LDYA s` -`>SYSCALL sscanf` - -## RETURN VALUE -A = Number of arguments filled. - # FOpen Open a file ## C -`hFILE fopen ( const char * filename, short int flags, short int ftype, int auxtype );` +`short int fopen ( const char *filename, short int flags, short int ftype, int auxtype );` **In:** ## ASM -`>PUSHWI auxtype` -`>PUSHBI ftype` -`>PUSHBI flags` +`>PUSHW filename` +`>PUSHB flags` + O.RDONLY : if R and exists -> ERROR + O.WRONLY : if W and exists -> CREATE + O.TRUNC : Reset Size To 0 + O.APPEND : Append + O.TEXT : Open/Append in Text mode + O.CREATE : Create if not exists +`>PUSHB ftype` +`>PUSHW auxtype` TODO: replace flags/ftype/auxtype with mode="w+,t=TYP,x=AUXTYPE" + r = O_RDONLY + r+ = O_RDWR @@ -1008,7 +883,6 @@ TODO: replace flags/ftype/auxtype with mode="w+,t=TYP,x=AUXTYPE" + a+ = O_RDWR | O_CREAT | O_APPEND + ,t=123 or t=$ff or t=TXT + ,x=12345 or x=$ffff -`>LDYAI filename` ## RETURN VALUE CC : A = hFILE @@ -1121,7 +995,7 @@ int remove(const char *pathname); ## ASM **In:** -`>LDYA pathname` +`>PUSHW pathname` `>SYSCALL remove` ## RETURN VALUE @@ -1134,12 +1008,134 @@ Rename a file ## ASM **In:** +`>PUSHW oldpath` `>PUSHW newpath` -`>LDYA oldpath` `>SYSCALL rename` ## RETURN VALUE +# PrintF (BLOCKING) + +# FPrintF (BLOCKING) + +# SPrintF +Prints C-Style String + +## C +`int printf ( const char *format, ... );` +`int fprintf ( short int stream, const char *format, ... );` +`int sprintf ( char *str, const char *format, ... );` + +## ASM +**In:** +PrintF : (example is for printing Y,A as integer : format="%I", 2 bytes) +`>PUSHW format` +`>PUSHW i` +`...` +`>PUSHBI 2` #bytecount +`>SYSCALL printf` +FPrintF : +`>PUSHB hFILE` +`>PUSHW format` +`>PUSHW i` +`...` +`>PUSHBI 2` #bytecount +`>SYSCALL fprintf` +SPrintF : +`>PUSHW str` +`>PUSHW format` +`>PUSHW i` +`...` +`>PUSHBI 2` #bytecount +`>SYSCALL sprintf` + +## RETURN VALUE +CC : success, Y,A = bytes sent +CS : error, A = code from Output +Specifiers : ++ %b : pull 1 byte 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 ++ %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) ++ \t : Print 'TAB' ($09,09) ++ \v : Print 'VT' ($0B,11) ++ \xHH : Print byte with hexadecimal value HH (1 to 2 digits) ++ \\\\ : Print \ ++ \\% : Print % + +Modifiers for len and padding : ++ %d : '9' '12' ++ %2d : ' 9' '12' ++ %02d : '09' '12' ++ %11s : 'ABCDEFGH ' ++ %011s : 'ABCDEFGH000' ++ %2f : '3.14' + + +# ScanF (BLOCKING) + +# FScanF (BLOCKING) + +# SScanF +Read formatted data from string + +## C +`int scanf(const char *format, ...);` +`int fscanf(short int stream, const char *format, ...);` +`int sscanf ( const char *s, const char *format, ... );` + +## ASM +**In:** +ScanF : +`>PUSHW format` +`>PUSHW ptr` +`...` +`>PUSHB bytecount` +`>SYSCALL scanf` +FScanF : +`>PUSHB stream` +`>PUSHW format` +`>PUSHW ptr` +`...` +`>PUSHB bytecount` +`>SYSCALL fscanf` +SScanF : +`>PUSHW s` +`>PUSHW format` +`>PUSHW ptr` +`...` +`>PUSHB bytecount` +`>SYSCALL sscanf` +Specifiers : ++ %i : short int ++ %d : byte ++ %I : int ++ %D : word ++ %L : long int ++ %U : dword ++ %h : HEX byte ++ %H : HEX word ++ %s : string + +TODO : %10s + +## RETURN VALUE +A = Number of arguments filled. + # strtof Convert String to 40 bits Float @@ -1178,9 +1174,9 @@ Convert String to 32 bits (unsigned) int ## ASM **In:** +`>PUSHW str` +`>PUSHW EndPtr` `>PUSHB Base` -`>PUSHWI EndPtr` -`>LDYAI str` `>SYSCALL strtol` ## RETURN VALUE @@ -1217,13 +1213,13 @@ Convert String to 16 bits int # RealPath Return the canonicalized absolute pathname -## C -`unsigned short int realpath (const char* str, char *resolvedpath);` +## C / CSH +`char *realpath(const char *path, char *resolvedpath);` ## ASM **In:** -`>PUSHWI resolvedpath` -`>LDYA str` +`>PUSHW path` +`>PUSHW resolvedpath` `>SYSCALL realpath` ## RETURN VALUE @@ -1232,6 +1228,20 @@ CC : success X = hMem of Full Path CS : A = Error Code +# Expand + +## C +`char *expand(const char *str, char *expanded);` + +## ASM +`>PUSHW str` +`>PUSHW expanded` +`>SYSCALL expand` + +## RETURN VALUE + Y,A = PTR to Expanded String + X = hMem to Expanded String (C-String) + # StrLen Returns Length of C-String @@ -1440,6 +1450,20 @@ Convert S.TIME struct to CSTR ## RETURN VALUE +# ChOwn + +## C + `short int chown(const char *pathname, short int owner, short int group);` + +## ASM +**In:** +`>PUSHW pathname` +`>PUSHB owner` +`>PUSHB group` +`>SYSCALL chown` + +## RETURN VALUE + # open ## C diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 7ab90b0d..8d703019 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/EDIT.S.CTRL.txt b/BIN/EDIT.S.CTRL.txt index 5c1e47e6..b783be1d 100644 --- a/BIN/EDIT.S.CTRL.txt +++ b/BIN/EDIT.S.CTRL.txt @@ -260,8 +260,8 @@ Ctrl.CR lda #C.CR >INCW.G FileY >STZ.G CurX - >LDA.G CurY + >LDA.G CurY >CMP.G ViewPortHm1 bne .1 @@ -276,13 +276,13 @@ Ctrl.CR lda #C.CR >PUSHW LineBufPtr >PUSHW L.SEQ.SCROLLCURDN - >LDA.G ScreenH - dec - >PUSHA >LDA.G CurY inc inc >PUSHA + >LDA.G ScreenH + dec + >PUSHA >PUSHBI 2 jsr SCRN.LineBufSprintf .99 bcs .9 diff --git a/BIN/LSDEV.S.txt b/BIN/LSDEV.S.txt index 8108a1f8..46344c38 100644 --- a/BIN/LSDEV.S.txt +++ b/BIN/LSDEV.S.txt @@ -88,8 +88,9 @@ DumpDev >LDYA L.MSG0 dey dex bpl .2 + + >PUSHB Index >PUSHEA.G DEV.DIB - lda Index >SYSCALL GetDevStatus bcc .6 diff --git a/BIN/MEM.S.txt b/BIN/MEM.S.txt index fcbf625e..e2681ca6 100644 --- a/BIN/MEM.S.txt +++ b/BIN/MEM.S.txt @@ -3,13 +3,10 @@ NEW .LIST OFF .OP 65C02 .OR $2000 - .TF BIN/MEM + .TF bin/mem *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I -*-------------------------------------- -PAGELEN .EQ 22 -FOOTERLEN .EQ 8 *-------------------------------------- .DUMMY .OR ZPBIN diff --git a/BIN/STAT.S.txt b/BIN/STAT.S.txt index 38262601..173df051 100644 --- a/BIN/STAT.S.txt +++ b/BIN/STAT.S.txt @@ -15,7 +15,7 @@ NEW ZS.START ArgIndex .BS 1 ArgFile .BS 1 -ZPPTR1 .BS 2 +ZPPtr1 .BS 2 bFormatStr .BS 1 @@ -66,8 +66,8 @@ CS.RUN jsr CS.RUN.CheckOpt bcc .1 -.99 >PUSHBI 0 - >LDYA L.MSG.USAGE +.99 >PUSHW L.MSG.USAGE + >PUSHBI 0 >SYSCALL printf lda #E.SYN sec @@ -80,12 +80,12 @@ CS.RUN sta ArgFile bra .1 -.3 ldx ArgFile +.3 lda ArgFile beq .99 - >PUSHW pData - txa >SYSCALL ArgV + >PUSHYA + >PUSHW pData >SYSCALL Stat bcs .9 @@ -104,26 +104,27 @@ CS.RUN.DUMP lda ArgFile >SYSCALL Realpath bcs CS.RUN.RTS + >STYA ZPPtr1 phx - >PUSHYA + >PUSHW L.MSG.Filename + >PUSHW ZPPtr1 >PUSHBI 2 - >LDYA L.MSG.Filename >SYSCALL printf pla >SYSCALL freemem jsr Mod2CSTR + >PUSHW L.MSG.Mode >PUSHEA.G MOD >PUSHBI 2 - >LDYA L.MSG.Mode >SYSCALL printf - >PUSHL.G StatBuf+S.STAT.BLOCKS - >PUSHL.G StatBuf+S.STAT.SIZE - >PUSHW.G StatBuf+S.STAT.GID + >PUSHW L.MSG.UIDGIDSIZE >PUSHW.G StatBuf+S.STAT.UID + >PUSHW.G StatBuf+S.STAT.GID + >PUSHL.G StatBuf+S.STAT.SIZE + >PUSHL.G StatBuf+S.STAT.BLOCKS >PUSHBI 12 - >LDYA L.MSG.UIDGIDSIZE >SYSCALL printf jsr CS.RUN.PrintAMCTime @@ -205,11 +206,11 @@ CS.RUN.PrintAMCTime >PUSHEA.G StatBuf+S.STAT.CTIME >SYSCALL StrFTime -.8 >PUSHEA.G TIME.Create +.8 >PUSHW L.MSG.AMCTimes + >PUSHEA.G TIME.Create >PUSHEA.G TIME.Mod >PUSHEA.G TIME.Access >PUSHBI 6 - >LDYA L.MSG.AMCTimes >SYSCALL printf rts *-------------------------------------- @@ -268,9 +269,9 @@ MSG.UIDGIDSIZE .AS "UID : %10D\r\n" .AS "GID : %10D\r\n" .AS "Size : %10u\r\n" .AZ "Blocks : %10u\r\n" -MSG.AMCTimes .AS "Accessed : %s\r\n" +MSG.AMCTimes .AS "Created : %s\r\n" .AS "Modified : %s\r\n" - .AZ "Created : %s\r\n" + .AZ "Accessed : %s\r\n" *-------------------------------------- .DUMMY .OR 0 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index ceebe1ab..451ac556 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -163,7 +163,7 @@ SEEK.CUR .EQ $01 SEEK.END .EQ $02 *-------------------------------------- * A2osX.SYSCALL Functions Indexes -*-------------------------------------- +*--------------------------------------D1 * STAT SYS.ChTyp .EQ $00 SYS.ChMod .EQ $02 @@ -182,8 +182,7 @@ SYS.Open .EQ $16 SYS.Close .EQ $18 SYS.Read .EQ $1A SYS.Write .EQ $1C -* IO -SYS.IOCTL .EQ $1E +* .EQ $1E * STDIO SYS.FPutC .EQ $20 SYS.PutChar .EQ $22 @@ -207,19 +206,20 @@ SYS.Remove .EQ $40 SYS.Rename .EQ $42 * .EQ $44 * .EQ $46 -* DEV -* .EQ $48 -SYS.GetDevByName .EQ $4A -SYS.GetDevStatus .EQ $4C -SYS.MKDev .EQ $4E * STDIO2 -* .EQ $50 +SYS.PrintF .EQ $48 +SYS.FPrintF .EQ $4A +SYS.SPrintF .EQ $4C +SYS.ScanF .EQ $4E + +SYS.FScanF .EQ $50 SYS.SScanF .EQ $52 * .EQ $54 * .EQ $56 -SYS.PrintF .EQ $58 -SYS.SPrintF .EQ $5A -SYS.FPrintF .EQ $5C + +* .EQ $58 +* .EQ $5A +* .EQ $5C * .EQ $5E * .EQ $60 @@ -231,7 +231,7 @@ SYS.FPrintF .EQ $5C * .EQ $6A * .EQ $6C * .EQ $6E -*-------------------------------------- +*--------------------------------------D2 * STDLIB SYS.AToF .EQ $70 SYS.AToI .EQ $72 @@ -250,11 +250,11 @@ SYS.StrUpr .EQ $88 SYS.StrLwr .EQ $8A SYS.StrCmp .EQ $8C SYS.StrCaseCmp .EQ $8E - -* .EQ $90 -* .EQ $92 -* .EQ $94 -* .EQ $96 +* DEV +SYS.GetDevByName .EQ $90 +SYS.GetDevStatus .EQ $92 +SYS.MKDev .EQ $94 +SYS.IOCTL .EQ $96 * BIN SYS.LoadLib .EQ $98 SYS.UnloadLib .EQ $9A @@ -274,7 +274,7 @@ SYS.Shift .EQ $B0 SYS.ArgV .EQ $B2 SYS.ArgVDup .EQ $B4 * .EQ $B6 -*-------------------------------------- +*--------------------------------------E0/AUX * ENV / ENVX SYS.PutEnv .EQ $B8 SYS.SetEnv .EQ $BA @@ -300,7 +300,7 @@ SYS.StrVShift .EQ $D8 SYS.StrVGet .EQ $DA SYS.StrVAdd .EQ $DC * .EQ $DE -*-------------------------------------- +*--------------------------------------E0 * MEM SYS.GetMem .EQ $E0 SYS.Realloc .EQ $E2 diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index 1e43a31e..cc53f0c9 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -95,11 +95,11 @@ CORE.Events jsr CORE.GetEvents cmp DevMgr.ASCREEN Same as active screen...nothing to do beq .8 - pha - >PUSHWZ Param + + >PUSHA >PUSHBI IOCTL.CONTROL request - pla - jsr K.IOCTL + >PUSHWZ Param + >SYSCALL2 IOCTL .8 jmp CORE.Run *-------------------------------------- CORE.UpdateParentPS @@ -393,6 +393,16 @@ CORE.PSResume sei inc IRQ.InKernel rti *-------------------------------------- +CORE.VBLState .BS 1 +CORE.IRQMode .BS 1 +CORE.TickPerSec .BS 1 +CORE.TickPer10t .BS 1 +CORE.TickSec .BS 1 +CORE.Tick10t .BS 1 +CORE.CPUStatCnt .DA #100 +CORE.LastPSID .DA #0 +CORE.FSID .BS 1 +*-------------------------------------- CORE.EvtIndex .BS 1 CORE.EvtCount .BS 1 *-------------------------------------- diff --git a/SYS/KERNEL.S.DEF.txt b/SYS/KERNEL.S.DEF.txt index 28927ac3..55b660b0 100644 --- a/SYS/KERNEL.S.DEF.txt +++ b/SYS/KERNEL.S.DEF.txt @@ -1,8 +1,6 @@ NEW AUTO 3,1 *-------------------------------------- -AUXPIPE .EQ 1 -*-------------------------------------- ZPKERNEL .EQ $0 *-------------------------------------- ZPPtr1 .EQ ZPKERNEL diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index 2ec04e5a..55277603 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -47,46 +47,38 @@ K.GetDev.9 rts */-------------------------------------- * # GetDevStatus * ## C -* `int getdevstatus(short int DevID, S.DIB* dstat);` +* `int getdevstatus(short int DevID, S.DIB *dstat);` * ## ASM -* `>PUSHWI S.DIB` -* `lda DevID` +* `PUSHB DevID` +* `>PUSHW S.DIB` * `>SYSCALL GetDevStatus` * ## RETURN VALUE *\-------------------------------------- -K.GetDevStatus tax - >PULLW K.S.IOCTL+S.IOCTL.BUFPTR - +K.GetDevStatus >PULLW K.S.IOCTL+S.IOCTL.BUFPTR + >PULLA + tax + lda Dev.Table,x beq K.GetDev.NODEV ldy Dev.Table-1,x >STYA pFD lda #S.IOCTL.STATCODE.GETDIB -K.GetDevStatus.I - sta K.S.IOCTL+S.IOCTL.STATCODE - - ldy #S.FD.DEV.DEVID - lda (pFD),y - sta K.S.IOCTL+S.IOCTL.UNITNUM - - jsr K.IOCTL.GetPDrv - >LDYAI K.S.IOCTL - ldx #IOCTL.STATUS - jmp (pDrv) + jmp SHARED.GetDevStatus */-------------------------------------- * # MKDev * Create a hDEV * ## C -* `hDEV mkdev (S.FD * fd, const char *devname)` +* `hDEV mkdev (S.FD *fd, const char *devname)` * ## ASM +* `>PUSHW fd` * `>PUSHW devname` -* `>LDYA fd` * `>SYSCALL mkdev * ## RETURN VALUE * A = hDEV *\-------------------------------------- -K.MKDev jsr SHARED.SPtr1PPtr2 ptr1=fd, ptr2=name +K.MKDev >PULLW ZPPtr2 ptr2=name + >PULLW ZPPtr1 ptr1=fd ldx DevMgr.DevIdx cpx #K.DEV.MAX*2+1 @@ -135,7 +127,7 @@ K.MKDev jsr SHARED.SPtr1PPtr2 ptr1=fd, ptr2=name >STYA K.S.IOCTL+S.IOCTL.BUFPTR lda #S.IOCTL.STATCODE.STATUS - jsr K.GetDevStatus.I + jsr SHARED.GetDevStatus bcs .99 lda K.IOBuf Get Status byte @@ -156,23 +148,55 @@ K.MKDev jsr SHARED.SPtr1PPtr2 ptr1=fd, ptr2=name * sec .99 rts -.7 ldy #S.FD.DEV.DRVPTR - lda (pFD),y - sta ZPPtr1 - iny - lda (pFD),y - sta ZPPtr1+1 - ldy #IOCTL.IRQ+4 - lda (ZPPtr1),y +.7 ldy #IOCTL.IRQ+4 + lda (pDRV),y sta IRQ.Vectors,x iny - lda (ZPPtr1),y + lda (pDRV),y sta IRQ.Vectors+1,x + .8 lda DevMgr.DevIdx inc DevMgr.DevIdx inc DevMgr.DevIdx * clc rts +*/-------------------------------------- +* # IOCTL +* ## C +* `int ioctl(short int DevID, int request, void * param );` +* ## ASM +* `>PUSHB hDEV` +* `>PUSHB request` +* `>PUSHW param` +* `>SYSCALL IOCTL` +* ## RETURN VALUE +* Y,A = ... +*\-------------------------------------- +K.IOCTL ldy #3 hDev + lda (pStack),y + tax + + lda Dev.Table,x + beq .9 + + ldy Dev.Table-1,x + >STYA pFD + + jsr SHARED.GetPDrv + + ldy #2 request + lda (pStack),y + tax + + >PULLYA param + inc pStack + inc pStack + + jmp (pDrv) + +.9 sec + lda #MLI.E.NODEV + >RET 4 *-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.DEV diff --git a/SYS/KERNEL.S.DIRENT.txt b/SYS/KERNEL.S.DIRENT.txt index c0e58a53..6eaa0f96 100644 --- a/SYS/KERNEL.S.DIRENT.txt +++ b/SYS/KERNEL.S.DIRENT.txt @@ -80,41 +80,24 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ? lda (pFD),y bne K.ReadDir.NoMore + stz K.MLI.PARAMS+1 All Volumes >LDYAI K.Buf256 >STYA K.MLI.PARAMS+2 >STYA ZPPtr2 >MLICALL MLIONLINE bcs K.ReadDir.RTS -* pass #1 compute BufSize..... - lda #1 +1 for Ending 0 - sta K.ReadDir.BufSize - stz K.ReadDir.BufSize+1 - stz K.ReadDir.EC - ldy #0 -.1 lda (ZPPtr2),y - and #$0F - beq .2 - inc K.ReadDir.EC increase entry count - sec Add Filelen +1 - adc #S.STAT will ends with CC - adc K.ReadDir.BufSize - sta K.ReadDir.BufSize - bcc .2 - inc K.ReadDir.BufSize+1 - -.2 tya - clc - adc #16 - tay - bcc .1 loop until 256 bytes scanned -* pass #2 Fill Buffer... - jsr K.ReadDir.GetBuf + >LDYAI 16*16+16*S.STAT+1 16 (Vols+Stat) + \0 + jsr K.ReadDir.GetBufYA bcs K.ReadDir.RTS -.3 lda (ZPPtr2) + + lda #16 + sta K.ReadDir.EC + +.1 lda (ZPPtr2) and #$0F - beq .88 + beq .6 tax inc @@ -122,19 +105,21 @@ K.ReadDir.ROOT lda #'/' sta K.MLI.PATH+1 ldy #1 -.4 lda (ZPPtr2),y + +.2 lda (ZPPtr2),y sta K.MLI.PATH+1,y jsr K.ReadDir.AddToBuf iny dex - bne .4 + bne .2 + txa Add ending 0 for C String jsr K.ReadDir.AddToBuf jsr SHARED.ClrStat lda (ZPPtr2) - asl DRIVE in Carry + asl DRIVE in Carry pha lda #0 rol @@ -153,25 +138,29 @@ K.ReadDir.ROOT >MLICALL MLIGETFILEINFO sta K.S.STAT+S.STAT.P.DEVSTATUS - bcs .80 + bcs .3 + >LDYA K.MLI.PARAMS+5 AUXTYPE=TOTAL BLOCKS >STYA K.S.STAT+S.STAT.P.DEVBLOCKS >LDYA K.MLI.PARAMS+8 >STYA K.S.STAT+S.STAT.BLOCKS -.80 jsr K.ReadDir.ADDSTAT - dec K.ReadDir.EC - beq .5 -.88 lda ZPPtr2 +.3 jsr K.ReadDir.AddStat + +.6 lda ZPPtr2 clc adc #16 sta ZPPtr2 - bcc .3 + bcc .7 inc ZPPtr2+1 - bra .3 + +.7 dec K.ReadDir.EC + bne .1 + * lda #0 done by S.MEM.F.INIT0 * sta (ZPPtr4) Ending 0 -.5 ldy #S.FD.DIR.FC + + ldy #S.FD.DIR.FC lda #16 sta (pFD),y Flag that we returned somthing for next time jmp K.ReadDir.EXIT @@ -309,29 +298,23 @@ K.ReadDir.DIR2 jsr K.ReadDir.GetBuf bne .2 jsr K.ReadDir.ADD. - bra .6 + bra .4 .2 cmp #$E0 Dir Header ? bne .3 jsr K.ReadDir.ADD. + jsr SHARED.DirEnt2Stat + jsr K.ReadDir.AddStat jsr K.ReadDir.ADD.. - bra .6 + bra .4 .3 jsr K.ReadDir.AddFNToBuf - jsr SHARED.ClrStat + +.4 jsr SHARED.DirEnt2Stat + jsr K.ReadDir.AddStat - lda (ZPPtr3) - and #$F0 - cmp #$D0 Directory ? - bne .5 - - jsr K.ReadDir.ADDD - bra .6 - -.5 jsr K.ReadDir.ADDF - -.6 lda K.ReadDir.EC decrease global counter... + lda K.ReadDir.EC decrease global counter... sec sbc #1 sta K.ReadDir.EC @@ -380,6 +363,7 @@ K.ReadDir.CLN pha *-------------------------------------- K.ReadDir.GetBuf >LDYA K.ReadDir.BufSize Get a BufSize bytes buffer for storing results +K.ReadDir.GetBufYA jsr K.GetMem0 make sure 0 filled bcs .9 stx K.ReadDir.EXIT+1 @@ -397,80 +381,7 @@ K.ReadDir.ADD.. bne .1 txa - jsr K.ReadDir.AddToBuf Add Ending 0 - jsr SHARED.ClrStat -* ldy #$25 total_blocks -* lda (ZPPtr3),y -* sta K.S.STAT+S.STAT.BLOCKS -* iny -* lda (ZPPtr3),y -* sta K.S.STAT+S.STAT.BLOCKS+1 -*-------------------------------------- -K.ReadDir.ADDD lda #$0F - sta K.S.STAT+S.STAT.P.TYPE - - lda /S.STAT.MODE.DIR - sta K.S.STAT+S.STAT.MODE+1 - bra K.ReadDir.AddAccess -*-------------------------------------- -K.ReadDir.ADDF -* lda /S.STAT.MODE.REG 0 -* sta K.S.STAT+S.STAT.MODE+1 - ldx #ADDF.DST-ADDF.SRC - -.1 ldy ADDF.SRC-1,x - lda (ZPPtr3),y - ldy ADDF.DST-1,x - sta K.S.STAT,y - dex - bne .1 -*-------------------------------------- -K.ReadDir.AddAccess - lda CORE.FSID - sta K.S.STAT+S.STAT.FSID - - ldy #$1E ProDOS Access - lda (ZPPtr3),y - - jsr SHARED.Stat.Access2Mode -*-------------------------------------- -K.ReadDir.AddTime - lda #$18 creation Date/time - clc - adc ZPPtr3 - tay - lda ZPPtr3+1 - adc #0 - >PUSHYA - >PUSHWI K.S.STAT+S.STAT.CTIME - >SYSCALL2 PTime2Time - - lda #$21 mod Date/time - clc - adc ZPPtr3 - tay - lda ZPPtr3+1 - adc #0 - >PUSHYA - >PUSHWI K.S.STAT+S.STAT.MTIME - >SYSCALL2 PTime2Time -*-------------------------------------- -K.ReadDir.AddStat - ldy #0 - -.1 lda K.S.STAT,y - jsr K.ReadDir.AddToBuf - iny - cpy #S.STAT - bne .1 - - rts -*-------------------------------------- -ADDF.SRC .HS 1013141516171f20 -ADDF.DST .DA #S.STAT.P.TYPE - .DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1 - .DA #S.STAT.SIZE,#S.STAT.SIZE+1,#S.STAT.SIZE+2 - .DA #S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1 + jmp K.ReadDir.AddToBuf Add Ending 0 *-------------------------------------- K.ReadDir.AddFNToBuf ldy #$1C version/min_version for lowercase bitmap @@ -528,6 +439,17 @@ K.ReadDir.AddToBuf bne .8 inc ZPPtr4+1 .8 rts +*-------------------------------------- +K.ReadDir.AddStat + ldy #0 + +.1 lda K.S.STAT,y + jsr K.ReadDir.AddToBuf + iny + cpy #S.STAT + bne .1 + + rts */------------------------------------- * # CloseDir * ## C diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index 0d9d59d6..0ca8c5bc 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -167,19 +167,21 @@ GP.AtkCall.INC inc IRQ.InKernel * Return X+Y, X-Y, X*Y, X/Y, X mod Y.... * ## ASM * **In:** -* `>PUSHF X (long)` -* `>PUSHF Y (long)` +* `>PUSHL X (long)` +* `>PUSHL Y (long)` * `>FPU add32` * `...` * ## RETURN VALUE * On stack (long) *\-------------------------------------- GP.FpuCall dec IRQ.InKernel - jsr .1 + cpx #FPU.FADD + bcs .1 + + jsr MATH32 INT32, direct JMP bra GP.AtkCall.INC -.1 cpx #FPU.FADD - bcc GP.RomCall.JmpX INT32, direct JMP - phx + +.1 phx jsr GP.SetFAC Get float from stack plx cpx #FPU.PWR+1 @@ -238,7 +240,9 @@ GP.RomCall phx stx .8+1 bit RROMBNK1 plx + jsr GP.RomCall.JmpX + .8 ldx #$ff bit $C000,x bit $C000,x @@ -300,20 +304,11 @@ GP.lrintf jsr GP.SetFAC rts *-------------------------------------- -GP.RomCall.JmpX jmp (.1,x) -.1 .DA GP.ADD32 - .DA GP.SUB32 - .DA GP.UMUL32 - .DA GP.IMUL32 - .DA GP.UDIV32 - .DA GP.IDIV32 - .DA GP.UMOD32 - .DA GP.IMOD32 - .DA GP.UCMP32 - .DA GP.ICMP32 +GP.RomCall.JmpX jmp (.1-FPU.FADD,x) +*-------------------------------------- * http://www.txbobsc.com/scsc/scdocumentor/E7A0.html - - .DA $E7C1 FADDT +*-------------------------------------- +.1 .DA $E7C1 FADDT .DA $E7AA FSUBT .DA $E987 FMULTT.1 .DA $EA6B FDIVT+2 @@ -428,16 +423,6 @@ GP.IrqH.Exit stz IRQ.SkipA2osX reset flag sec rts *-------------------------------------- -CORE.VBLState .BS 1 -CORE.IRQMode .BS 1 -CORE.TickPerSec .BS 1 -CORE.TickPer10t .BS 1 -CORE.TickSec .BS 1 -CORE.Tick10t .BS 1 -CORE.CPUStatCnt .DA #100 -CORE.LastPSID .DA #0 -CORE.FSID .BS 1 -*-------------------------------------- IRQ.InKernel .BS 1 IRQ.InLib .BS 1 IRQ.SkipA2osX .BS 1 diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 624141e2..3ddba225 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -109,8 +109,8 @@ Kernel.Init3 sta SETALTZP >STYA pStack sta pLocal+1 + >PUSHWI FD.NULL >PUSHWI FD.NULL.NAME - >LDYAI FD.NULL >SYSCALL2 MKDev jsr SysScrInit @@ -118,7 +118,7 @@ Kernel.Init3 sta SETALTZP >PUSHWI DEV.CONSOLE >PUSHBI O.RDWR >PUSHBI S.FI.T.TXT - >PUSHWZ Aux type + >PUSHWZ Aux type >SYSCALL2 fopen bcs * @@ -307,9 +307,9 @@ SysScrInit >LDYAI Mem.XHiMem jsr SysScrInit.TTYPtrs + >PUSHWI FD.TTY >PUSHWI FD.CONSOLE.NAME - >LDYAI FD.TTY - + >SYSCALL2 MKDev bcs .9 @@ -319,8 +319,9 @@ SysScrInit >LDYAI Mem.XHiMem inc FD.TTY+S.FD.DEV.DEVID inc FD.TTY.NAME+3 jsr SysScrInit.TTYPtrs + + >PUSHWI FD.TTY >PUSHWI FD.TTY.NAME - >LDYAI FD.TTY >SYSCALL2 MKDev plx bcs .9 @@ -754,8 +755,8 @@ DevMgrInit.AddBDev >PUSHBI 6 >SYSCALL2 printf + >PUSHWI FD.BDEV >PUSHWI FD.BDEV.NAME - >LDYAI FD.BDEV >SYSCALL2 MKDev DevMgrInit.AddBDev.RTS rts diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index cf9e6155..7f4a752f 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -33,10 +33,10 @@ IO.WRITE.REG ldx #MLIWRITE .9 rts *-------------------------------------- IO.OPEN.CDEV -IO.OPEN.BDEV jsr K.IOCTL.GetPDrv +IO.OPEN.BDEV jsr SHARED.GetPDrv ldx #IOCTL.OPEN lda IO.hDev - jsr K.IOCTL.pDrvJmp + jsr SHARED.pDrvJmp bcs .9 lda IO.hDev @@ -55,9 +55,9 @@ IO.WRITE.CDEV ldx #IOCTL.WRITE >PULLW K.S.IOCTL+S.IOCTL.BUFPTR >PULLW K.S.IOCTL+S.IOCTL.BYTECNT - jsr K.IOCTL.GetPDRV + jsr SHARED.GetPDRV >LDYAI K.S.IOCTL - jsr K.IOCTL.pDrvJmp + jsr SHARED.pDrvJmp bcs .9 >LDYA K.S.IOCTL+S.IOCTL.BYTECNT @@ -91,41 +91,6 @@ IO.WRITE.SSOCK ldy #S.FD.SSOCK.WRITE >STYA .1+1 lda IO.hFD .1 jmp $FFFF SELF MODIFIED -*/-------------------------------------- -* # IOCTL -* ## C -* `int ioctl(short int DevID, int request, void * param );` -* ## ASM -* `PUSHWI param` -* `PUSHBI request` -* `lda hDEV` -* `>SYSCALL IOCTL` -* ## RETURN VALUE -* Y,A = ... -*\-------------------------------------- -K.IOCTL tax - lda Dev.Table,x - beq K.IOCTL.9 - - ldy Dev.Table-1,x - >STYA pFD - jsr K.IOCTL.GetPDrv - >PULLA - tax request - >PULLYA param - -K.IOCTL.pDrvJmp jmp (pDrv) -K.IOCTL.9 sec - lda #MLI.E.NODEV - >RET 3 -*-------------------------------------- -K.IOCTL.GetPDrv ldy #S.FD.DEV.DRVPTR - lda (pFD),y - sta pDRV - iny - lda (pFD),y - sta pDRV+1 - rts *-------------------------------------- IO.EOF.REG >MLICALL MLIGETMARK bcs .9 @@ -153,7 +118,7 @@ IO.EOF.REG >MLICALL MLIGETMARK .9 rts *-------------------------------------- IO.EOF.CDEV lda #S.IOCTL.STATCODE.EOF - jmp K.GetDevStatus.I + jmp SHARED.GetDevStatus *-------------------------------------- * X = 0 > REG * X = 1 > DIR @@ -227,8 +192,6 @@ IO.CLOSE.NOD ldx #2 * sec rts *-------------------------------------- -IO.DEV.FIFO .AS "/dev/fifo" -*-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.IO LOAD USR/SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index ad64af20..aad63e78 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -21,7 +21,7 @@ K.SYSCALL .DA K.ChTyp $00 : STAT .DA K.Close .DA K.Read .DA K.Write - .DA K.IOCTL + .DA 0 .DA K.FPutC $20 : STDIO .DA K.PutChar @@ -45,18 +45,18 @@ K.SYSCALL .DA K.ChTyp $00 : STAT .DA K.Rename .DA 0 .DA 0 + .DA K.PrintF + .DA K.FPrintF + .DA K.SPrintF .DA 0 - .DA K.GetDevByName DEV - .DA K.GetDevStatus - .DA K.MKDev - .DA 0 $50 + .DA K.ScanF $50 + .DA K.FScanF .DA K.SScanF .DA 0 .DA 0 - .DA K.PrintF - .DA K.SPrintF - .DA K.FPrintF + .DA 0 + .DA 0 .DA 0 .DA 0 $60 @@ -88,10 +88,10 @@ K.SYSCALL .DA K.ChTyp $00 : STAT .DA K.StrCmp .DA K.StrCaseCmp - .DA 0 $90 - .DA 0 - .DA 0 - .DA 0 + .DA K.GetDevByName $90 : DEV + .DA K.GetDevStatus + .DA K.MKDev + .DA K.IOCTL .DA K.LoadLib BIN .DA K.UnloadLib .DA K.LoadDrv diff --git a/SYS/KERNEL.S.MATH.txt b/SYS/KERNEL.S.MATH.txt index ad6624f5..85bc6763 100644 --- a/SYS/KERNEL.S.MATH.txt +++ b/SYS/KERNEL.S.MATH.txt @@ -1,11 +1,23 @@ NEW AUTO 3,1 *-------------------------------------- -GP.ADD32 clc +MATH32 jmp (.1,x) +.1 .DA MATH32.ADD32 + .DA MATH32.SUB32 + .DA MATH32.UMUL32 + .DA MATH32.IMUL32 + .DA MATH32.UDIV32 + .DA MATH32.IDIV32 + .DA MATH32.UMOD32 + .DA MATH32.IMOD32 + .DA MATH32.UCMP32 + .DA MATH32.ICMP32 +*-------------------------------------- +MATH32.ADD32 clc .HS B0 BCS -GP.SUB32 sec +MATH32.SUB32 sec php - jsr GP.PopACC32 + jsr MATH32.PopACC32 ldy #0 ldx #3 @@ -23,16 +35,18 @@ GP.SUB32 sec iny dex bpl .2 -GP.SUB32.RTS rts + +MATH32.SUB32.RTS + rts *-------------------------------------- * Returns: * ff X < Y * 0 X = Y * 1 X > Y *-------------------------------------- -GP.UCMP32 -GP.ICMP32 jsr GP.SUB32 - jsr GP.PopACC32 A = ACC32+3 (sign) +MATH32.UCMP32 +MATH32.ICMP32 jsr MATH32.SUB32 + jsr MATH32.PopACC32 A = ACC32+3 (sign) tay bmi .2 @@ -46,50 +60,50 @@ GP.ICMP32 jsr GP.SUB32 .2 lda #$ff .8 rts *-------------------------------------- -GP.UMUL32 clc +MATH32.UMUL32 clc .HS B0 BCS -GP.IMUL32 sec +MATH32.IMUL32 sec php - jsr GP.MULDIVMOD.COMMON + jsr MATH32.MULDIVMOD.COMMON jsr MATH.MUL32 plp - bcc GP.SUB32.RTS -GP.RETURN.ITMP + bcc MATH32.SUB32.RTS +MATH32.RETURN.ITMP lda ACC32.Sign eor ARG32.Sign - bpl GP.PutTMP32 - bra GP.PutNotTMP32 + bpl MATH32.PutTMP32 + bra MATH32.PutNotTMP32 *-------------------------------------- -GP.UDIV32 clc +MATH32.UDIV32 clc .HS B0 BCS -GP.IDIV32 sec +MATH32.IDIV32 sec clv - bra GP.DIVMOD -GP.UMOD32 clc + bra MATH32.DIVMOD +MATH32.UMOD32 clc .HS B0 BCS -GP.IMOD32 sec - bit GP.SUB32.RTS $60 +MATH32.IMOD32 sec + bit MATH32.SUB32.RTS $60 -GP.DIVMOD php - jsr GP.MULDIVMOD.COMMON +MATH32.DIVMOD php + jsr MATH32.MULDIVMOD.COMMON jsr MATH.DIVMOD32 plp bcc .3 unsigned - bvs GP.RETURN.ITMP IMOD + bvs MATH32.RETURN.ITMP IMOD lda ACC32.Sign IDIV eor ARG32.Sign - bpl GP.PutARG32 - bra GP.PutNotARG32 + bpl MATH32.PutARG32 + bra MATH32.PutNotARG32 -.3 bvs GP.PutARG32 DIV +.3 bvs MATH32.PutARG32 DIV *-------------------------------------- -GP.PutTMP32 lda #TMP32 MOD +MATH32.PutTMP32 lda #TMP32 MOD .HS 2C BIT ABS *-------------------------------------- -GP.PutARG32 lda #ARG32 +MATH32.PutARG32 lda #ARG32 sta .1+1 ldy #3 .1 lda $ff,y SELF MODIFIED @@ -99,10 +113,12 @@ GP.PutARG32 lda #ARG32 rts *-------------------------------------- -GP.PutNotTMP32 lda #TMP32 +MATH32.PutNotTMP32 + lda #TMP32 .HS 2C BIT ABS *-------------------------------------- -GP.PutNotARG32 lda #ARG32 +MATH32.PutNotARG32 + lda #ARG32 sta .1+1 ldy #0 ldx #3 @@ -117,7 +133,7 @@ GP.PutNotARG32 lda #ARG32 bpl .1 rts *-------------------------------------- -GP.PopACC32 ldy #0 +MATH32.PopACC32 ldy #0 .1 lda (pStack) inc pStack @@ -128,7 +144,7 @@ GP.PopACC32 ldy #0 sta ACC32.Sign rts *-------------------------------------- -GP.GetARG32 ldy #0 +MATH32.GetARG32 ldy #0 .1 lda (pStack),y sta ARG32,y @@ -138,14 +154,15 @@ GP.GetARG32 ldy #0 sta ARG32.Sign -GP.GetARG32.RTS rts +MATH32.GetARG32.RTS + rts *-------------------------------------- -GP.MULDIVMOD.COMMON +MATH32.MULDIVMOD.COMMON php - jsr GP.PopACC32 - jsr GP.GetARG32 + jsr MATH32.PopACC32 + jsr MATH32.GetARG32 plp - bcc GP.GetARG32.RTS + bcc MATH32.GetARG32.RTS jsr MATH.ACC32ABS jmp MATH.ARG32ABS *-------------------------------------- diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 9c0830a9..2b66aa59 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -323,18 +323,18 @@ MEM.Init0 phx *\-------------------------------------- K.FreeMem.MSG .AZ "FreeMem:hMem=$%h,PID=%d\r\n" *-------------------------------------- -K.FreeMem.ERR phx - phy hMem n Y +K.FreeMem.ERR >PUSHWI K.FreeMem.MSG + + tya hMem n Y + >PUSHA + ldy #S.PS.PID lda (pPS),y >PUSHA - pla - >PUSHA >PUSHBI 2 - >LDYAI K.FreeMem.MSG -.1 ldx #SYS.printf - jsr K.SYSCALL2 - plx + +.1 >SYSCALL2 printf + lda #E.INVH * >DEBUG sec @@ -344,17 +344,21 @@ K.FreeMem tay beq K.FreeMem.ERR Slot=0, reserved by Kernel cmp Mem.LastSlot bcc .10 + bne K.FreeMem.ERR + .10 jsr MEM.GetMemByID X,Y unmodified lda (ZPMemMgrSPtr) In use ? bpl K.FreeMem.ERR jsr MEM.DecRefCnt only one left ? bne .8 no, must be a code segment loaded several times + lda (ZPMemMgrSPtr) and #S.MEM.F.CODE CS: Any BINPATH to discard ? sta (ZPMemMgrSPtr) Mark as FREE beq .1 + ldy #S.MEM.BIN lda (ZPMemMgrSPtr),y jsr MEM.GetMemByID X unmodified @@ -364,16 +368,19 @@ K.FreeMem tay sta (ZPMemMgrSPtr) .1 lda Mem.LastSlot beq .8 + jsr MEM.GetMemByID X unmodified lda (ZPMemMgrSPtr) bmi .8 used, exit .2 dec Mem.LastSlot free! get previous.... beq .80 empty list: go set Mem.Free=Mem.HiMem + lda Mem.LastSlot jsr MEM.GetMemByID X unmodified lda (ZPMemMgrSPtr) bpl .2 free again! loop + ldy #S.MEM.PTR lda (ZPMemMgrSPtr),y set Mem.Free... sta Mem.Free @@ -549,7 +556,8 @@ MEM.Dup jsr K.GetMemPtr .8 txa * clc -.9 rts +.9 +MEM.Dup.RTS rts *-------------------------------------- MEM.CopyToMain clc .HS B0 BCS @@ -561,7 +569,7 @@ MEM.MoveToMain sec sta CLRREADAUX Make sure MAIN !!!! sta CLRWRITEAUX jsr K.GetMem - bcs .9 + bcs MEM.Dup.RTS stx .8+1 Save MAIN hMem >STYA A4L Save MAIN Ptr @@ -582,8 +590,6 @@ MEM.MoveToMain sec .8 ldx #$ff Returns MAIN hMem txa jmp K.GetMemPtr Y,A = Ptr - -.9 rts *-------------------------------------- MEM.MoveToAux stx .1+1 Save MAIN hMem >STYA A2L Save LEN to move diff --git a/SYS/KERNEL.S.PIPE.txt b/SYS/KERNEL.S.PIPE.txt index 3b622be0..d45751a3 100644 --- a/SYS/KERNEL.S.PIPE.txt +++ b/SYS/KERNEL.S.PIPE.txt @@ -29,12 +29,9 @@ IO.CLOSE.PIPE ldy #S.FD.PIPE.S ldy #S.FD.PIPE.hMem lda (pFD),y beq .2 - .DO AUXPIPE=1 - ldx #SYS.FreeStkObj - jsr K.SYSCALL2 - .ELSE - jsr K.FreeMem - .FIN + + >SYSCALL2 FreeStkObj + .2 lda IO.hFD jmp K.FreeMem *-------------------------------------- @@ -76,9 +73,8 @@ IO.WRITE.PIPE ldy #S.FD.PIPE.S lda (pFD),y tay - .DO AUXPIPE=1 sta SETWRITEAUX - .FIN + .1 inx bne .2 @@ -105,9 +101,9 @@ IO.WRITE.PIPE ldy #S.FD.PIPE.S lda IO.PIPE.BASEH Pipe Buffer Base sta IO.PIPE.DSTBUF+1 bra .1 -.8 .DO AUXPIPE=1 - sta CLRWRITEAUX - .FIN + +.8 sta CLRWRITEAUX + tya ldy #S.FD.PIPE.Head sta (pFD),y @@ -173,9 +169,8 @@ IO.READ.PIPE ldy #S.FD.PIPE.Used+1 ldy #S.FD.PIPE.Tail lda (pFD),y tay - .DO AUXPIPE=1 + sta SETREADAUX - .FIN .1 inx bne .2 @@ -203,10 +198,8 @@ IO.READ.PIPE ldy #S.FD.PIPE.Used+1 sta IO.PIPE.SRCBUF+1 Restore Pipe Buf base bra .1 -.8 .DO AUXPIPE=1 - sta CLRREADAUX - .FIN - +.8 sta CLRREADAUX + tya ldy #S.FD.PIPE.Tail sta (pFD),y @@ -233,13 +226,9 @@ IO.PIPE.GET.BUF lda (pFD),y ldy #S.FD.PIPE.hMem lda (pFD),y + + >SYSCALL2 GetStkObjPtr - .DO AUXPIPE=1 - ldx #SYS.GetStkObjPtr - jsr K.SYSCALL2 - .ELSE - jsr K.GetMemPtr get src buf - .FIN sta IO.PIPE.BASEH Pipe Buffer Base * clc adc IO.PIPE.BUFH diff --git a/SYS/KERNEL.S.SHARED.txt b/SYS/KERNEL.S.SHARED.txt index eb4dfb99..137d0e3c 100644 --- a/SYS/KERNEL.S.SHARED.txt +++ b/SYS/KERNEL.S.SHARED.txt @@ -1,6 +1,28 @@ NEW AUTO 3,1 *-------------------------------------- +SHARED.GetDevStatus + sta K.S.IOCTL+S.IOCTL.STATCODE + + ldy #S.FD.DEV.DEVID + lda (pFD),y + sta K.S.IOCTL+S.IOCTL.UNITNUM + + jsr SHARED.GetPDrv + + >LDYAI K.S.IOCTL + ldx #IOCTL.STATUS +*-------------------------------------- +SHARED.pDrvJmp jmp (pDrv) +*-------------------------------------- +SHARED.GetPDrv ldy #S.FD.DEV.DRVPTR + lda (pFD),y + sta pDRV + iny + lda (pFD),y + sta pDRV+1 + rts +*-------------------------------------- SHARED.GetKeyCharY sta CLRREADAUX lda (ZPSListDataPtr),y diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index 01fcb426..9c2f55f1 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -216,7 +216,7 @@ K.MKFIFO >STYA ZPPtr1 pathname buffer bcs K.Stat.Store.RTS ldy #0 -.1 lda IO.DEV.FIFO,y +.1 lda DEV.FIFO,y sta (ZPPtr1),y iny cpy #9 @@ -287,17 +287,15 @@ K.MkNod.I ldx #2 *\-------------------------------------- K.Pipe sta .1+1 SIZE HI - .DO AUXPIPE=1 - ldx #SYS.NewStkObj - jsr K.SYSCALL2.AUX Buffer in AUX mem - .ELSE - jsr K.GetMem - .FIN + >SYSCALL2 NewStkObj bcs .99 + stx .8+1 save PIPE buffer + ldx #2 jsr IO.MkFD bcs .9 + .1 lda #$ff SELF MODIFIED ldy #S.FD.PIPE.Free+1 sta (pFD),y @@ -312,12 +310,9 @@ K.Pipe sta .1+1 SIZE HI rts .9 pha save error code lda .8+1 get back PIPE buffer - .DO AUXPIPE=1 - ldx #SYS.FreeStkObj - jsr K.SYSCALL2.AUX - .ELSE - jsr K.FreeMem - .FIN + + >SYSCALL2 FreeStkObj + pla sec .99 @@ -331,36 +326,69 @@ SHARED.Stat.I jsr SHARED.ClrStat lda K.MLI.PARAMS+S.FI.A jsr SHARED.Stat.Access2Mode - ldx #SHARED.Stat.DST-SHARED.Stat.SRC + ldx #SHARED.GFI.Cnt -.3 ldy SHARED.Stat.SRC-1,x +.3 ldy SHARED.GFI.Src-1,x lda K.MLI.PARAMS,y - ldy SHARED.Stat.DST-1,x + ldy SHARED.Stat.Dst-1,x sta K.S.STAT,y dex bne .3 - >PUSHWI K.MLI.PARAMS+S.FI.CDATE - >PUSHWI K.S.STAT+S.STAT.CTIME - >SYSCALL2 PTime2Time BANK2 + >LDYAI K.MLI.PARAMS+S.FI.CDATE + ldx #S.STAT.CTIME + jsr SHARED.PTime2StatYAX - >PUSHWI K.MLI.PARAMS+S.FI.MDATE - >PUSHWI K.S.STAT+S.STAT.MTIME - >SYSCALL2 PTime2Time BANK2 + >LDYAI K.MLI.PARAMS+S.FI.MDATE + ldx #S.STAT.MTIME + jmp SHARED.PTime2StatYAX +*-------------------------------------- +SHARED.GFI2Stat clc rts *-------------------------------------- SHARED.DirEnt2Stat + jsr SHARED.ClrStat + + lda (ZPPtr3) + and #$F0 + cmp #$D0 Directory ? + bne .1 -* clc -* rts + lda /S.STAT.MODE.DIR + sta K.S.STAT+S.STAT.MODE+1 + +.1 ldx #SHARED.DirEnt.Cnt + +.2 ldy SHARED.DirEnt.Src-1,x + lda (ZPPtr3),y + ldy SHARED.Stat.Dst-1,x + sta K.S.STAT,y + dex + bne .2 + + ldy #$1E ProDOS Access + lda (ZPPtr3),y + + jsr SHARED.Stat.Access2Mode + + lda #$18 creation Date/time + ldx #S.STAT.CTIME + jsr SHARED.PTime2StatAX + + lda #$21 mod Date/time + ldx #S.STAT.MTIME + jmp SHARED.PTime2StatAX *-------------------------------------- SHARED.ClrStat ldx #S.STAT-1 .1 stz K.S.STAT,x dex bpl .1 + + lda CORE.FSID + sta K.S.STAT+S.STAT.FSID rts *-------------------------------------- @@ -397,12 +425,36 @@ SHARED.Stat.Access2Mode rts *-------------------------------------- -SHARED.Stat.SRC .DA #S.FI.T - .DA #S.FI.AUXTYPE,#S.FI.AUXTYPE+1 +SHARED.PTime2StatAX + clc + adc ZPPtr3 + tay + lda ZPPtr3+1 + adc #0 +SHARED.PTime2StatYAX + >PUSHYA + + txa + clc + adc #K.S.STAT + tay + lda /K.S.STAT + adc #0 + >PUSHYA + >SYSCALL2 PTime2Time + rts +*-------------------------------------- +SHARED.GFI.Src .DA #S.FI.T,#S.FI.AUXTYPE,#S.FI.AUXTYPE+1 .DA #S.FI.UBLKS,#S.FI.UBLKS+1 -SHARED.Stat.DST .DA #S.STAT.P.TYPE - .DA #S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1 +SHARED.GFI.Cnt .EQ *-SHARED.GFI.Src +*-------------------------------------- +SHARED.DirEnt.Src + .HS 10.1f20.1314.151617 +SHARED.DirEnt.Cnt .EQ *-SHARED.DirEnt.Src +*-------------------------------------- +SHARED.Stat.Dst .DA #S.STAT.P.TYPE,#S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1 .DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1 + .DA #S.STAT.SIZE,#S.STAT.SIZE+1,#S.STAT.SIZE+2 *-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.STAT diff --git a/SYS/KERNEL.S.STDIO2.S.txt b/SYS/KERNEL.S.STDIO2.S.txt index 2a2c1ac9..e511482a 100644 --- a/SYS/KERNEL.S.STDIO2.S.txt +++ b/SYS/KERNEL.S.STDIO2.S.txt @@ -6,9 +6,9 @@ NEW * # SPrintF * Prints C-Style String * ## C -* `int printf ( const char * format, ... );` -* `int fprintf ( hFILE stream, const char * format, ... );` -* `int sprintf ( char * str, const char * format, ... );` +* `int printf ( const char *format, ... );` +* `int fprintf ( short int stream, const char *format, ... );` +* `int sprintf ( char *str, const char *format, ... );` * ## ASM * **In:** * PrintF : (example is for printing Y,A as integer : format="%I", 2 bytes) @@ -75,35 +75,17 @@ PrintF.hFILE .BS 1 K.PrintF.PadL .EQ FAC+5 K.PrintF.PadC .EQ ARG.SIGN *-------------------------------------- -K.PrintF >LDYAI K.IOBuf - >STYA pIOBuf - ldy #S.PS.hStdOut +K.PrintF ldy #S.PS.hStdOut lda (pPs),y sta PrintF.hFILE - lda (pStack) Bytecount - inc - tay - - lda (pStack),y format LO - sta ZPPtr2 - iny - lda (pStack),y format HI - sta ZPPtr2+1 + clc + jsr STDIO.GetFormat bra K.PrintF.1 *-------------------------------------- -K.FPrintf >LDYAI K.IOBuf - >STYA pIOBuf - lda (pStack) Bytecount - inc - tay - - lda (pStack),y format LO - sta ZPPtr2 - iny - lda (pStack),y format HI - sta ZPPtr2+1 +K.FPrintf clc + jsr STDIO.GetFormat iny lda (pStack),y hFILE @@ -112,22 +94,9 @@ K.FPrintf >LDYAI K.IOBuf bra K.PrintF.1 *-------------------------------------- K.SPrintf stz PrintF.hFILE - lda (pStack) Bytecount - inc - tay - - lda (pStack),y format LO - sta ZPPtr2 - iny - lda (pStack),y format HI - sta ZPPtr2+1 - - iny - lda (pStack),y str LO - sta pIOBuf - iny - lda (pStack),y str HI - sta pIOBuf+1 + + sec Format & buffer + jsr STDIO.GetFormat *-------------------------------------- K.PrintF.1 sty PrintF.Exit.Cnt+1 Total bytes to POP @@ -436,27 +405,38 @@ PrintF.COut phy .9 lda #E.BUF sec PrintF.COut.RTS rts -*-------------------------------------- -K.PrintF.GetFormat - lda (pStack) - sta ZPPtr2 - ldy #1 - lda (pStack),y - sta ZPPtr2+1 - lda pStack - inc - inc - sta pLocal - rts */-------------------------------------- +* # ScanF (BLOCKING) +* # FScanF (BLOCKING) * # SScanF * Read formatted data from string * ## C +* `int scanf(const char *format, ...);` +* `int fscanf(short int stream, const char *format, ...);` * `int sscanf ( const char *s, const char *format, ... );` * ## ASM * **In:** +* ScanF : +* `>PUSHW format` +* `>PUSHW ptr` +* `...` +* `>PUSHB bytecount` +* `>SYSCALL scanf` +* FScanF : +* `>PUSHB stream` +* `>PUSHW format` +* `>PUSHW ptr` +* `...` +* `>PUSHB bytecount` +* `>SYSCALL fscanf` +* SScanF : * `>PUSHW s` * `>PUSHW format` +* `>PUSHW ptr` +* `...` +* `>PUSHB bytecount` +* `>SYSCALL sscanf` +* Specifiers : * + %i : short int * + %d : byte * + %I : int @@ -467,31 +447,33 @@ K.PrintF.GetFormat * + %H : HEX word * + %s : string * TODO : %10s -* `>PUSHW ptr` -* `...` -* `>PUSHB bytecount` -* `>SYSCALL sscanf` * ## RETURN VALUE * A = Number of arguments filled. *\-------------------------------------- -K.SScanF lda (pStack) Bytecount - inc - tay +K.ScanF ldy #S.PS.hStdIn + lda (pPs),y + sta PrintF.hFILE + + clc + jsr STDIO.GetFormat - lda (pStack),y format LO - sta ZPPtr2 - iny - lda (pStack),y format HI - sta ZPPtr2+1 + bra K.SScanF.1 +*-------------------------------------- +K.FScanF clc + jsr STDIO.GetFormat iny - lda (pStack),y str LO - sta ZPPtr1 - iny - lda (pStack),y str HI - sta ZPPtr1+1 + lda (pStack),y hFILE + sta PrintF.hFILE - sty PrintF.Exit.Cnt+1 Total bytes to POP + bra K.SScanF.1 +*-------------------------------------- +K.SScanF stz PrintF.hFILE + + sec Format & buffer + jsr STDIO.GetFormat +*-------------------------------------- +K.SScanF.1 sty PrintF.Exit.Cnt+1 Total bytes to POP .1 jsr SHARED.GetCharPtr2 End Of format? beq .8 @@ -633,6 +615,32 @@ PrintF.LocalGetByte PrintF.LocalGetByte.RTS rts *-------------------------------------- +STDIO.GetFormat bcs .1 + + >LDYAI K.IOBuf + >STYA pIOBuf + +.1 lda (pStack) Bytecount + inc + tay + + lda (pStack),y format LO + sta ZPPtr2 + iny + lda (pStack),y format HI + sta ZPPtr2+1 + + bcc .8 + + iny + lda (pStack),y str LO + sta pIOBuf + iny + lda (pStack),y str HI + sta pIOBuf+1 + +.8 rts +*-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.STDIO2 LOAD USR/SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.UNISTD.txt b/SYS/KERNEL.S.UNISTD.txt index e5d22662..8ea045ef 100644 --- a/SYS/KERNEL.S.UNISTD.txt +++ b/SYS/KERNEL.S.UNISTD.txt @@ -50,7 +50,7 @@ UNISTD.Open ldx #5 /DEV/ bcs IO.OPEN.REG .1 lda K.MLI.PATH,x - cmp IO.DEV.FIFO-1,x + cmp DEV.FIFO-1,x bne IO.OPEN.REG dex bne .1 @@ -59,7 +59,7 @@ UNISTD.Open ldx #5 /DEV/ *-------------------------------------- >LDYAI K.MLI.PATH+6 skip $/DEV/ - jsr K.GetDevByName + >SYSCALL2 GetDevByName bcc .7 ldx #2 .10 lda Nod.Table.hPath-2,x @@ -187,6 +187,7 @@ UNISTD.Close lda (pFD) #S.FD.T * CS: A = EC *\-------------------------------------- K.Read jsr UNISTD.GetPFD + UNISTD.Read lda (pFD) #S.FD.T tax jmp (.1,x) @@ -231,6 +232,8 @@ UNISTD.GetPFD sta IO.hFD >STYA pFD rts *-------------------------------------- +DEV.FIFO .AS "/dev/fifo" STAT,UNISTD +*-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.UNISTD LOAD USR/SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 7b327206..52d565e8 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -71,10 +71,9 @@ A2osX.D1.B .PH $D000 .INB USR/SRC/SYS/KERNEL.S.STAT .INB USR/SRC/SYS/KERNEL.S.DIRENT .INB USR/SRC/SYS/KERNEL.S.UNISTD + .INB USR/SRC/SYS/KERNEL.S.IO .INB USR/SRC/SYS/KERNEL.S.STDIO .INB USR/SRC/SYS/KERNEL.S.STDIO2 - .INB USR/SRC/SYS/KERNEL.S.DEV - .INB USR/SRC/SYS/KERNEL.S.PFT .EP A2osX.D1.S .EQ *-A2osX.D1.B @@ -85,6 +84,7 @@ A2osX.D2.B .PH $D000 .DA #RRAMWRAMBNK2 .INB USR/SRC/SYS/KERNEL.S.STDLIB .INB USR/SRC/SYS/KERNEL.S.STRING + .INB USR/SRC/SYS/KERNEL.S.DEV .INB USR/SRC/SYS/KERNEL.S.BIN .INB USR/SRC/SYS/KERNEL.S.PS .INB USR/SRC/SYS/KERNEL.S.ARG @@ -108,8 +108,8 @@ A2osX.E0.B .PH $E000 .INB USR/SRC/SYS/KERNEL.S.STRV .INB USR/SRC/SYS/KERNEL.S.MEM * go to A2osX.D1 - .INB USR/SRC/SYS/KERNEL.S.IO .INB USR/SRC/SYS/KERNEL.S.PIPE + .INB USR/SRC/SYS/KERNEL.S.PFT DevMgr.Timer .BS 1 DevMgr.ASCREEN .BS 1