From 04a83f00f3436580823afce7db028cb2ee4e52c3 Mon Sep 17 00:00:00 2001 From: burniouf Date: Fri, 7 Oct 2022 21:21:37 +0200 Subject: [PATCH] SH:new ALIAS cmd, new && operator MKDIR:completely implemented LS/RM/MV/CP: combined switches KERNEL:SList API now handle options to handle several languages/parsers --- .Docs/Commands.md | 17 ++ .Docs/KERNEL.md | 74 +++--- .Docs/LIBTUI.md | 2 +- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes .Floppies/A2OSX.TEST.po | Bin 819200 -> 819200 bytes .Floppies/ProDOSFX.BOOT.po | Bin 143360 -> 143360 bytes BIN/CC.S.CORE.txt | 87 +++---- BIN/CC.S.DECL.txt | 88 +++++-- BIN/CC.S.DIR.txt | 24 +- BIN/CC.S.EXP.txt | 194 ++++++++-------- BIN/CC.S.F.txt | 108 ++++----- BIN/CC.S.FIO.txt | 13 +- BIN/CC.S.KW.txt | 453 ++++++++----------------------------- BIN/CC.S.LINK.txt | 4 +- BIN/CC.S.STMT.txt | 58 ++--- BIN/CC.S.SYM.txt | 165 +++++++------- BIN/CC.S.TYPE.txt | 314 +++++++++++++++++++++---- BIN/CC.S.txt | 181 ++++++++------- BIN/CHMOD.S.txt | 14 +- BIN/CP.S.txt | 24 +- BIN/CSH.S.txt | 4 +- BIN/EDIT.S.txt | 114 +++++----- BIN/GTEST.S.txt | 34 ++- BIN/GUITEST1.S.txt | 9 +- BIN/LS.S.txt | 40 ++-- BIN/LSDEV.S.txt | 17 +- BIN/MKDIR.S.txt | 269 ++++++++++++++++++++-- BIN/MORE.S.txt | 32 +-- BIN/MV.S.txt | 24 +- BIN/RM.S.txt | 20 +- BIN/SH.S.CL.txt | 26 +-- BIN/SH.S.CMD.txt | 169 ++++++++++---- BIN/SH.S.CORE.txt | 388 ++++++++++++++++++++++--------- BIN/SH.S.HIS.txt | 125 ++++++---- BIN/SH.S.txt | 272 ++++++++++++---------- CTESTS/CTEST.txt | 89 -------- INC/A2osX.I.txt | 9 +- INC/LIBBLKDEV.I.txt | 2 + INCLUDE/SYS/socket.h.txt | 48 ++++ INCLUDE/SYS/stat.h.txt | 28 +-- INCLUDE/SYS/types.h.txt | 6 +- INCLUDE/libblkdev.h.txt | 17 ++ INCLUDE/time.h.txt | 35 +-- LIB/LIBBLKDEV.O.S.txt | 36 +++ LIB/LIBGUI.S.FON.txt | 11 +- LIB/LIBGUI.S.txt | 2 +- LIB/LIBTUI.O.S .txt | 39 ++-- LIB/LIBTUI.S.txt | 72 ++---- ROOT/make/_files.32MB.txt | 7 +- SHARED/X.CPMVRM.S.txt | 15 +- SHARED/X.SSC.DRV.S.txt | 2 +- SYS/KERNEL.S.INIT.txt | 16 +- SYS/KERNEL.S.JMP.txt | 36 +-- SYS/KERNEL.S.MEM.txt | 38 +++- SYS/KERNEL.S.MOUNT.txt | 26 --- SYS/KERNEL.S.PS.txt | 45 +--- SYS/KERNEL.S.SLIST.txt | 4 +- SYS/KERNEL.S.SLISTX.txt | 39 ++++ SYS/KERNEL.S.STKOBJ.txt | 69 ++++++ SYS/KERNEL.S.TIME.txt | 8 +- SYS/KERNEL.S.txt | 1 + 61 files changed, 2383 insertions(+), 1680 deletions(-) delete mode 100644 CTESTS/CTEST.txt create mode 100644 INCLUDE/SYS/socket.h.txt create mode 100644 INCLUDE/libblkdev.h.txt create mode 100644 LIB/LIBBLKDEV.O.S.txt create mode 100644 SYS/KERNEL.S.STKOBJ.txt diff --git a/.Docs/Commands.md b/.Docs/Commands.md index 4c444bb6..81ea4414 100644 --- a/.Docs/Commands.md +++ b/.Docs/Commands.md @@ -24,6 +24,23 @@ exists, thus return value is limited to whether or not a valid argument was given. +# MKDIR +Create directories +* + +## Arguments +**-M mode** +Apply specified mode to created directories +* +**-P** +Create parent directories if required +* +**-V** +Verbose mode +* + +## Return Value + # SEQ Prints sequences of numbers. * diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index 87899cd7..32b1e595 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -375,6 +375,13 @@ Add Data to MD5 computation CS : A = EC +# Free + Y,A = Ptr To Free + +## RETURN VALUE + none. + (X unmodified) + # FreeMem A = hMem To Free @@ -414,22 +421,6 @@ Y,A = PTR to MemBlock none. (X,Y unmodified) -# GetStkObj - -## C -`int *ptr getstkobj (short int hStkObj);` - -## ASM -`lda hStkObj` -`>SYSCALL GetStkObj` - -## RETURN VALUE - CC : success - X = hMem - Y,A = ptr - CS : error - A = EC - # Online Get ProDOS Volume Info @@ -531,17 +522,6 @@ A = Child PSID ## RETURN VALUE -# LoadStkObj -Load a file in AUX memory (Stock Objects) - PUSHW = PATH (Handled by.... - PUSHB = MODE ... - PUSHB = TYPE ... - PUSHW = AUXTYPE ...FOpen) - -## RETURN VALUE - Y,A = File Length - X = hMem of Loaded Object in AUX mem - # LoadTxtFile Load TXT a file in memory (with ending 0) @@ -716,7 +696,7 @@ CS : not found `>PUSHB hSList` `>PUSHW KeyID` `>PUSHW DataPtr` -`>PUSHW DataLen` +`>PUSHW DataLen` (Data bytes to add, 0 if String mode) `>SYSCALL SListAddData` ## RETURN VALUE @@ -727,7 +707,7 @@ CS : not found `>PUSHB hSList` `>PUSHW KeyID` `>PUSHW DataPtr` -`>PUSHW DataLen` +`>PUSHW DataLen` (Data bytes to set, 0 if String mode) `>SYSCALL SListSetData` ## RETURN VALUE @@ -776,6 +756,7 @@ CS : not found # SListNew ## ASM +`lda Opt` `>SYSCALL SListNew` ## RETURN VALUE @@ -1392,6 +1373,33 @@ if expanded == null if expanded = null Y,A = strlen +# LoadStkObj +Load a file in AUX memory (Stock Objects) + PUSHW = PATH (Handled by.... + PUSHB = MODE ... + PUSHB = TYPE ... + PUSHW = AUXTYPE ...FOpen) + +## RETURN VALUE + Y,A = File Length + X = hMem of Loaded Object in AUX mem + +# GetStkObj + +## C +`int *ptr getstkobj (short int hStkObj);` + +## ASM +`lda hStkObj` +`>SYSCALL GetStkObj` + +## RETURN VALUE + CC : success + X = hMem + Y,A = ptr + CS : error + A = EC + # StrLen Returns Length of C-String @@ -1544,7 +1552,7 @@ CS : no match Get System Time in Buffer ## C -`int time (S.TIME* timer);` +`void time (struct tm* timeptr);` ## ASM `>PUSHW timer` @@ -1557,7 +1565,7 @@ S.TIME filled with System date/time ## C Convert S.TIME struct to CSTR -`void strftime (char* str, const char* format, const struct S.TIME* timeptr );` +`void strftime (char* str, const char* format, const struct tm* timeptr );` ## ASM `>PUSHW str` @@ -1587,7 +1595,7 @@ Convert S.TIME struct to CSTR Convert ProDOS Time To S.TIME ## C -`int PTime2Time (long* ptime, S.TIME* timer);` +`void PTime2Time (long* ptime, const struct tm* timeptr );` ## ASM `>PUSHW ptime` @@ -1600,7 +1608,7 @@ Convert S.TIME struct to CSTR Convert CTime Time To S.TIME ## C -`int CTime2Time (long* ctime, S.TIME* timer);` +`void CTime2Time (long* ctime, const struct tm* timeptr );` ## ASM `>PUSHW ctime` diff --git a/.Docs/LIBTUI.md b/.Docs/LIBTUI.md index d13e08e4..7baeebde 100644 --- a/.Docs/LIBTUI.md +++ b/.Docs/LIBTUI.md @@ -16,7 +16,7 @@ Initialize screen & create a new context CC = success, A = hCTX # tuiClose -destroy context and all sub objects +destroy context ## C `void fastcall tuiClose(short int hCTX);` diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 5803441fdea8aa7364da935410c9d88e94c9bb1c..cda6faa6d70e291d2fe436f122c68f97cb3f5b22 100644 GIT binary patch delta 192906 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 WbBH2@I+5X2^`A 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 ^Lbl5 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 VfS(ldi{Jd=FGc(-mYS_D{0|Rt3#tGB diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po index ede6b3fc79d9f9e56d6fd39b22a66cf806f8b1bd..e7e36844c4ac399a62caa567b2a469a8dbcad67f 100644 GIT binary patch delta 31618 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 " -MSG.BDEVEXT .AZ " %5D/%5D s%dd%d " +MSG.REGEXT .CZ " %10u " +MSG.DIREXT .CZ " " +MSG.BDEVEXT .CZ " %5D/%5D s%dd%d " *-------------------------------------- -MSG.SETCOLOR .AZ "\e[1;%dm" +MSG.SETCOLOR .CZ "\e[1;%dm" PRODOS.FT.HEX .HS 0406FAFCFDCBCCCFFF PRODOS.FT.TXT .AZ "txt" .AZ "bin" diff --git a/BIN/LSDEV.S.txt b/BIN/LSDEV.S.txt index 2552bfe0..0c89680d 100644 --- a/BIN/LSDEV.S.txt +++ b/BIN/LSDEV.S.txt @@ -246,14 +246,13 @@ CS.QUIT clc rts *-------------------------------------- CS.END -MSG0 .AZ "hFD Type Name Addr Status Typ/Sub IDString Version Size (BLK)" -MSG.DEV .AZ "%3d %5s %12s %H " -MSG.DEV.ERR .AZ "Device Error : $%h\r\n" -MSG.DEV.DIB .AZ "%s $%h/$%h %16S %03d.%03d " -MSG.DEV.B .AZ "%10u\r\n" -MSG.DEV.C .AZ "n/a\r\n" - -MSG.PIPE .AZ "%3d %5s %s\r\n" +MSG0 .CZ "hFD Type Name Addr Status Typ/Sub IDString Version Size (BLK)" +MSG.DEV .CZ "%3d %5s %12s %H " +MSG.DEV.ERR .CZ "Device Error : $%h\r\n" +MSG.DEV.DIB .CZ "%s $%h/$%h %16S %03d.%03d " +MSG.DEV.B .CZ "%10u\r\n" +MSG.DEV.C .CZ "n/a\r\n" +MSG.PIPE .CZ "%3d %5s %s\r\n" *-------------------------------------- MSG.SFLAGS .AS "bwrlneio" NO.PATH .AZ "(no path)" @@ -269,7 +268,7 @@ FD.T.PIPE .AZ "PIPE" *-------------------------------------- BLANK.DIB .DA #0 #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ .BS 3 - >PSTR "(No IDS String!)" + .PS "(No IDS String!)" .DA #0 #S.DIB.T.PRODOS .DA #0 .DA 0 K.VER diff --git a/BIN/MKDIR.S.txt b/BIN/MKDIR.S.txt index 231ce150..9bd3eead 100644 --- a/BIN/MKDIR.S.txt +++ b/BIN/MKDIR.S.txt @@ -4,9 +4,35 @@ NEW .OP 65C02 .OR $2000 .TF bin/mkdir -*-------------------------------------- +*/------------------------------------- +* # MKDIR +* Create directories +* +* ## Arguments +* **-M mode** +* Apply specified mode to created directories +* +* **-P** +* Create parent directories if required +* +* **-V** +* Verbose mode +* +* ## Return Value +*\------------------------------------- .INB inc/macros.i .INB inc/a2osx.i +*-------------------------------------- + .DUMMY + .OR ZPBIN +ZS.START +ZPPtr1 .BS 2 +ZPMode .BS 2 +ArgIndex .BS 1 +ArgLen .BS 1 +bParent .BS 1 +bVerbose .BS 1 +ZS.END .ED *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -25,41 +51,254 @@ CS.START cld *-------------------------------------- .1 .DA CS.INIT .DA CS.RUN - .DA CS.DOEVENT + .DA CS.DOEVENT .DA CS.QUIT +L.MSG.USAGE .DA MSG.USAGE +L.MSG.DIR .DA MSG.DIR +L.MSG.OK .DA MSG.OK +L.MSG.ERR .DA MSG.ERR .DA 0 *-------------------------------------- -CS.INIT clc +CS.INIT +CS.QUIT clc rts *-------------------------------------- -CS.RUN lda #1 - >SYSCALL ArgV - bcs .99 - - >PUSHYA - >PUSHWI S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.FU - >SYSCALL MKDir +CS.RUN >LDYAI S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.FU + >STYA ZPMode + +.1 jsr CS.RUN.GetNextArg + bcs .8 + + lda (ZPPtr1) + cmp #'-' + bne .6 + + ldy #1 + lda (ZPPtr1),y + beq .9 + +.2 ldx #OptionVars-OptionList-1 + +.3 cmp OptionList,x + beq .5 + + dex + bpl .3 + + cmp #'M' + beq .4 + + cmp #'m' + bne .9 + +.4 jsr CS.RUN.GetNextArg bcs .9 + + jsr CS.RUN.Str2Mode + bcc .1 + + bra .9 + +.5 lda OptionVars,x + tax +* sec + ror $0,x + + iny + lda (ZPPtr1),y + bne .2 + + bra .1 + +.6 lda (pData) + bne .9 + + >PUSHW ZPPtr1 + >PUSHW pData + >SYSCALL RealPath + bcc .1 + +.9 >LDYA L.MSG.USAGE + >SYSCALL PutS + + lda #E.SYN + sec + rts + +.8 lda (pData) + beq .9 +*-------------------------------------- +CS.RUN.Create bit bParent + bmi CS.RUN.CreateP + jsr CS.RUN.Create1 + bcs .9 + lda #0 sec .9 rts +*-------------------------------------- +CS.RUN.CreateP ldy #$ff -.99 lda #E.SYN +.1 iny + lda (pData),y + bne .1 + + sty ArgLen + + ldy #0 skip / + +.2 iny + lda (pData),y + beq .8 /VOL + + eor #'/' + bne .2 + +.3 iny /VOL/ + lda (pData),y + beq .4 /VOL/DIR + + eor #'/' + bne .3 + +.4 sty ArgIndex /VOL/DIR/ + + sta (pData),y /VOL/DIR + + >PUSHW pData + >PUSHEA.G StatBuf + >SYSCALL Stat + bcc .5 + + jsr CS.RUN.Create1 + bcs .9 + +.5 ldy ArgIndex + cpy ArgLen + beq .8 + + lda #'/' + sta (pData),y /VOL/DIR/..... + bra .3 + +.8 lda #0 sec +.9 rts +*-------------------------------------- +CS.RUN.Create1 clc + bit bVerbose + bpl .1 + + >PUSHW L.MSG.DIR + >PUSHW pData + >PUSHBI 2 + >SYSCALL PrintF + +.1 >PUSHW pData + >PUSHW ZPMode + >SYSCALL MKDir + + bit bVerbose + bpl .8 + + bcs .2 + + >LDYA L.MSG.OK + >SYSCALL PutS + + clc rts + +.2 pha + >PUSHW L.MSG.ERR + pla + pha + >PUSHA + >PUSHBI 1 + >SYSCALL PrintF + pla + sec + +.8 rts +*-------------------------------------- +CS.RUN.GetNextArg + inc ArgIndex + + lda ArgIndex + >SYSCALL ArgV + bcs .9 + + >STYA ZPPtr1 + +.9 rts +*-------------------------------------- +CS.RUN.Str2Mode ldy #$ff + +.1 iny + lda (ZPPtr1),y + bne .1 + + cpy #4 must be "765" max + bcs .9 + + stz ZPMode + stz ZPMode+1 + + ldy #0 + +.2 lda (ZPPtr1),y + beq .8 + cmp #'0' + bcc .9 + + cmp #'7'+1 + bcs .9 + + asl ZPMode + rol ZPMode+1 + asl ZPMode + rol ZPMode+1 + asl ZPMode + rol ZPMode+1 + and #7 + clc + adc ZPMode + sta ZPMode + bcc .3 + + inc ZPMode+1 + +.3 iny + bra .2 + +.8 clc + rts + +.9 *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- -CS.QUIT clc - rts -*-------------------------------------- CS.END +*-------------------------------------- +OptionList .AS "PpVv" +OptionVars .DA #bParent,#bParent + .DA #bVerbose,#bVerbose +*-------------------------------------- +MSG.USAGE .CS "Usage : MKDIR newdir\r\n" + .CS " -M mode : set mode\r\n" + .CS " -P : Make parent directories as needed\r\n" + .CZ " -V : Verbose" +MSG.DIR .CZ "MKDir:%s..." +MSG.OK .CZ "[OK]" +MSG.ERR .CS "[%h]" +MSG.CRLF .CZ "\r\n" *-------------------------------------- .DUMMY .OR 0 -DS.START +DS.START .BS 128 Path buffer +StatBuf .BS S.STAT DS.END .ED *-------------------------------------- MAN diff --git a/BIN/MORE.S.txt b/BIN/MORE.S.txt index 25917474..faecf642 100644 --- a/BIN/MORE.S.txt +++ b/BIN/MORE.S.txt @@ -61,11 +61,12 @@ L.MSG.PauseErase .DA MSG.PauseErase CS.INIT clc rts *-------------------------------------- -CS.RUN +CS.RUN .1 inc ArgCount lda ArgCount >SYSCALL ArgV bcs .7 + >STYA ZPPtr1 lda (ZPPtr1) cmp #'-' @@ -74,12 +75,13 @@ CS.RUN ldy #1 lda (ZPPtr1),y - ldx OptionList + ldx #OptionVars-OptionList-1 + .2 cmp OptionList,x beq .3 dex - bne .2 + bpl .2 .99 >PUSHW L.MSG.USAGE >PUSHBI 0 @@ -88,7 +90,7 @@ CS.RUN sec .9 rts -.3 ldy OptionVars-1,x +.3 ldy OptionVars,x lda #$80 sta (pData),y bra .1 @@ -305,19 +307,19 @@ CS.DOEVENT sec *-------------------------------------- CS.END *-------------------------------------- -OptionList >PSTR "NnHhPpSs" +OptionList .AS "NnHhPpSs" OptionVars .DA #bLineNum,#bLineNum,#bHelp,#bHelp,#bPage,#bPage,#bEscCodes,#bEscCodes *-------------------------------------- -MSG.USAGE .AS "Usage : MORE \r\n" - .AS " -H : This help screen\r\n" - .AS " -N : Number all output lines\r\n" - .AS " -P : Page mode, no scroll\r\n" - .AS " -S : Process ESC codes" -MSG.CRLF .AZ "\r\n" -MSG.Init .AZ "\e[?7l" -MSG.NUMLINE .AZ "%5D:" -MSG.Pause .AZ "\r\e[7m --- 'SPACE' for more, 'CR' one line, 'Q/q' to quit --- \e[0m" -MSG.PauseErase .AZ "\r\e[2K" +MSG.USAGE .CS "Usage : MORE \r\n" + .CS " -H : This help screen\r\n" + .CS " -N : Number all output lines\r\n" + .CS " -P : Page mode, no scroll\r\n" + .CS " -S : Process ESC codes" +MSG.CRLF .CZ "\r\n" +MSG.Init .CZ "\e[?7l" +MSG.NUMLINE .CZ "%5D:" +MSG.Pause .CZ "\r\e[7m --- 'SPACE' for more, 'CR' one line, 'Q/q' to quit --- \e[0m" +MSG.PauseErase .CZ "\r\e[2K" *-------------------------------------- .DUMMY .OR 0 diff --git a/BIN/MV.S.txt b/BIN/MV.S.txt index 2edf0699..37cc30dc 100644 --- a/BIN/MV.S.txt +++ b/BIN/MV.S.txt @@ -25,18 +25,18 @@ OptionVars .DA #bContinue,#bContinue .DA #bRecurse,#bRecurse .DA #bNoConfirm,#bNoConfirm *-------------------------------------- -MSG.USAGE .AS "Usage : MV [Src File/Dir, *,? wildcards allowed]\r\n" - .AS " -C : Continue on error\r\n" - .AS " -Q : Quiet\r\n" - .AS " -R : Recurse subdirectories\r\n" - .AZ " -Y : Dont't prompt for override\r\n" -MSG.DIR .AZ "MV Dir :%s to %s..." -MSG.REG .AZ "MV File:%s to %s..." -MSG.OVERWRITE .AZ "Overwrite %s [Yes,No,All]?" -MSG.OK .AZ "[OK]" -MSG.ERR .AS "[%h]" -MSG.CRLF .AZ "\r\n" -MSG.DONE .AZ "%D File(s) Moved.\r\n" +MSG.USAGE .CS "Usage : MV [Src File/Dir, *,? wildcards allowed]\r\n" + .CS " -C : Continue on error\r\n" + .CS " -Q : Quiet\r\n" + .CS " -R : Recurse subdirectories\r\n" + .CZ " -Y : Dont't prompt for override\r\n" +MSG.DIR .CZ "MV Dir :%s to %s..." +MSG.REG .CZ "MV File:%s to %s..." +MSG.OVERWRITE .CZ "Overwrite %s [Yes,No,All]?" +MSG.OK .CZ "[OK]" +MSG.ERR .CS "[%h]" +MSG.CRLF .CZ "\r\n" +MSG.DONE .CZ "%D File(s) Moved.\r\n" *-------------------------------------- .DUMMY .OR 0 diff --git a/BIN/RM.S.txt b/BIN/RM.S.txt index 8cb7c364..3efc217e 100644 --- a/BIN/RM.S.txt +++ b/BIN/RM.S.txt @@ -24,16 +24,16 @@ OptionVars .DA #bContinue,#bContinue .DA #bQuiet,#bQuiet .DA #bRecurse,#bRecurse *-------------------------------------- -MSG.USAGE .AS "Usage : RM [File/Dir, *,? wildcards allowed]\r\n" - .AS " -C : Continue on error\r\n" - .AS " -Q : Quiet\r\n" - .AZ " -R : Recurse subdirectories\r\n" -MSG.DIR .AZ "RM Dir :%s..." -MSG.REG .AZ "RM File:%s..." -MSG.OK .AZ "[OK]" -MSG.ERR .AS "[%h]" -MSG.CRLF .AZ "\r\n" -MSG.DONE .AZ "%D File(s) Removed.\r\n" +MSG.USAGE .CS "Usage : RM [File/Dir, *,? wildcards allowed]\r\n" + .CS " -C : Continue on error\r\n" + .CS " -Q : Quiet\r\n" + .CZ " -R : Recurse subdirectories\r\n" +MSG.DIR .CZ "RM Dir :%s..." +MSG.REG .CZ "RM File:%s..." +MSG.OK .CZ "[OK]" +MSG.ERR .CS "[%h]" +MSG.CRLF .CZ "\r\n" +MSG.DONE .CZ "%D File(s) Removed.\r\n" *-------------------------------------- .DUMMY .OR 0 diff --git a/BIN/SH.S.CL.txt b/BIN/SH.S.CL.txt index d8a89d23..58d73823 100644 --- a/BIN/SH.S.CL.txt +++ b/BIN/SH.S.CL.txt @@ -19,16 +19,13 @@ CL.PrintPrompt >PUSHW L.PS1 phx - >PUSHYA - >PUSHBI 0 - - >SYSCALL PrintF + jsr PrintYANoCR + pla >SYSCALL FreeMem -.1 >PUSHW L.MSG.PROMPT - >PUSHBI 0 - >SYSCALL PrintF +.1 >LDYA L.MSG.PROMPT + jsr PrintYANoCR .9 rts *-------------------------------------- CL.READN0A tax @@ -188,7 +185,9 @@ CL.CHARIN.CTRL cpx #C.CR .8 clc .9 rts *-------------------------------------- -CL.CLR lda (ZPCLBuf) +CL.CLR >STZ.G HIS.Ptr + +CL.CLR.1 lda (ZPCLBuf) beq CL.Reset.1 >LDA.G CL.bSilent @@ -213,7 +212,8 @@ CL.CLR lda (ZPCLBuf) lda (ZPCLBuf),y bne .3 - jsr CL.Print + >LDYA ZPCLBuf + jsr PrintYANoCR *-------------------------------------- CL.Reset lda #0 sta (ZPCLBuf) @@ -329,14 +329,6 @@ CL.PrintEOL >LDA.G CL.Ptr CL.PrintEOL.8 clc rts *-------------------------------------- -CL.Print ldy #S.PS.hStdOut - lda (pPS),y - >PUSHA - >PUSHW ZPCLBuf - - >SYSCALL FPutS - rts -*-------------------------------------- MAN SAVE usr/src/bin/sh.s.cl LOAD usr/src/bin/sh.s diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index 0d883420..c139aa92 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -2,6 +2,99 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- +* https://linuxize.com/post/how-to-create-bash-aliases/ +*-------------------------------------- +CMD.ALIAS lda (ZPArgVBufPtr) + bne CMD.ALIAS.ADD + + >LDA.G hAliases + beq .8 + + ldy #0 + lda #1 + +.1 >STYA ZPTmpW Save KeyID + + clc + jsr CMD.ALIAS.Push + + >SYSCALL SListGetByID + bcs .8 + + >STYA ZPPtr1 NextID + + >LDYA ZPCLBuf + jsr PrintYANoCR + bcs .9 + + sec + jsr CMD.ALIAS.Push + + >SYSCALL SListGetData + bcs .9 + + >PUSHW L.MSG.ALIAS + >PUSHW ZPCLBuf + >PUSHBI 2 + >SYSCALL PrintF + bcs .9 + + >LDYA ZPPtr1 + bra .1 + +.8 clc +.9 rts +*-------------------------------------- +CMD.ALIAS.ADD >LDYA ZPArgVBufPtr + >STYA ZPVarNamePtr + + jsr CORE.ArgV.Next + beq .9 + + cmp #'=' + bne .99 + + jsr CORE.ArgV.Next + beq .9 + + >LDA.G hAliases + bne .1 + + lda #0 + >SYSCALL SListNew + bcs .99 + + >STA.G hAliases + +.1 >PUSHA + >PUSHW ZPVarNamePtr + + >SYSCALL SListNewKey + bcs .99 + + >STYA ZPTmpW Save KeyID + + >PUSHB.G hAliases + >PUSHW ZPTmpW KeyID + >PUSHW ZPArgVBufPtr DataPtr + >PUSHWZ String Mode + >SYSCALL SListAddData + rts + +.9 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +CMD.ALIAS.Push >PUSHB.G hAliases + >PUSHW ZPTmpW KeyID + >PUSHW ZPCLBuf + bcc .8 + + >PUSHWI $ffff All + >PUSHWZ from Start + +.8 rts +*-------------------------------------- CMD.. lda (ZPArgVBufPtr) beq CMD...9 @@ -9,9 +102,9 @@ CMD.. lda (ZPArgVBufPtr) >SYSCALL LoadTxtFile bcs CMD.SHIFTA.RTS - >LDYA ZPArgVBufPtr + >LDYA ZPArgVBufPtr Exec . file -CMD..EXEC.YAX jsr CORE.Load.YAX Exec . file +CMD..EXEC.YAX jsr CORE.Load.YAX Y,A = Args, X = Code bcs CMD.SHIFTA.RTS lda #$C0+C.. @@ -55,7 +148,7 @@ CMD.PUSHD >LDA.G PUSHD.STACK lda (ZPArgVBufPtr) bne CMD.CD.0 -.8 clc +* clc .9 rts *-------------------------------------- CMD.POPD >LDA.G PUSHD.STACK @@ -170,21 +263,19 @@ CMD.SET.1 .1 jsr CMD.IsSwitch bcs .6 - ldx #SET.VARS-SET.FLAGS + ldx #SET.VARS-SET.FLAGS-1 -.2 dex - bmi .4 +.2 cmp SET.FLAGS,x + bne .3 - cmp SET.FLAGS,x - bne .2 - - ldy SET.VARS,x - - lda (pData),y - eor #$ff - sta (pData),y + lda SET.VARS,x + eor bState + sta bState bra .5 + +.3 dex + bpl .2 .4 cmp #'F' bne .99 @@ -308,7 +399,8 @@ CMD.ECHO stz ZPPtr1 echo -N lda #C.SPACE >SYSCALL PutChar -.3 jsr CMD.PrintArgVBufPtr +.3 >LDYA ZPArgVBufPtr + jsr PrintYANoCR bcs .9 inc ZPPtr1+1 @@ -319,13 +411,11 @@ CMD.ECHO stz ZPPtr1 echo -N .7 bit ZPPtr1 bmi .8 - >PUSHW L.MSG.ECHOCRLF - >PUSHBI 0 - >SYSCALL PrintF -.9 rts + >LDYA L.MSG.ECHOCRLF + jmp PrintYANoCR .8 clc - rts +.9 rts CMD.ECHO.CSYN lda #E.CSYN sec @@ -355,7 +445,8 @@ CMD.READ lda (ZPArgVBufPtr) jsr CORE.ArgV.Next beq CMD.ECHO.CSYN - jsr CMD.PrintArgVBufPtr + >LDYA ZPArgVBufPtr + jsr PrintYANoCR bcs CMD.ECHO.RTS bra .5 @@ -408,8 +499,8 @@ CMD.SLEEP lda (ZPArgVBufPtr) CMD.SLEEP.RTS rts *-------------------------------------- -CMD.PAUSE lda #$FF - >STA.G bPause +CMD.PAUSE lda #bState.Pause + tsb bState clc rts *-------------------------------------- @@ -529,14 +620,14 @@ CMD.FUNCTION lda (ZPArgVBufPtr) jsr CORE.StkGetCtx bcc .9 No context allowed - >LDA.G hFuncList + >LDA.G hFunctions bne .1 lda #SL..+SL._ >SYSCALL SListNew bcs .99 - >STA.G hFuncList + >STA.G hFunctions .1 >PUSHA >PUSHW ZPArgVBufPtr @@ -597,21 +688,21 @@ CMD.FUNCTION lda (ZPArgVBufPtr) inc ZPPtr2+1 .15 jsr CORE.GetNextChar - bne .12 + bcc .12 .6 txa bpl .9 .7 jsr CORE.GetNextChar skip ending '}' - >PUSHB.G hFuncList + >PUSHB.G hFunctions >PUSHW ZPTmpW KeyID >PUSHW ZPPtr1 DataPtr >PUSHW ZPPtr2 DataLen >SYSCALL SListAddData bcs .99 - >PUSHB.G hFuncList + >PUSHB.G hFunctions >PUSHW ZPTmpW KeyID >PUSHW L.PtrZero DataPtr >PUSHWI 1 DataLen @@ -623,7 +714,7 @@ CMD.CALL jsr CMD.CALL.GETFUNC >STYA ZPTmpW KeyID - >PUSHB.G hFuncList + >PUSHB.G hFunctions >PUSHW ZPTmpW KeyID >PUSHWZ Allocate.. >PUSHWI $ffff all @@ -640,10 +731,10 @@ CMD.CALL jsr CMD.CALL.GETFUNC jmp CORE.StkPush *-------------------------------------- CMD.CALL.GETFUNC - >LDA.G hFuncList + >LDA.G hFunctions beq CMD.CALL.UNDEF - >PUSHB.G hFuncList + >PUSHB.G hFunctions >PUSHW ZPArgVBufPtr >SYSCALL SListLookup bcc CMD.CALL.RTS @@ -678,8 +769,9 @@ CMD.EXIT lda (ZPArgVBufPtr) rts .8 jsr CMD.EXIT.FILE - lda #$ff - >STA.G bExitOnEOF + lda #bState.ExitOnEOF + tsb bState + clc .9 rts *-------------------------------------- @@ -834,6 +926,7 @@ CMD.FOR jsr CORE.StkGetCtx jsr CORE.ArgV.Next beq CMD.E.CSYN + >PUSHW L.IN >PUSHW ZPArgVBufPtr >SYSCALL StrCaseCmp @@ -995,8 +1088,10 @@ CMD.NEXT.LIST.TOKEN ldy #0 .10 jsr GetPtr1NextChar beq .3 + cmp #C.SPACE beq .10 + sta (ZPCLBuf),y iny .1 jsr GetPtr1NextChar @@ -1207,7 +1302,7 @@ CMD.IsSwitch lda (ZPArgVBufPtr) cmp #'9'+1 bcc .9 -.1 tax + tax iny lda (ZPArgVBufPtr),y bne .9 @@ -1218,12 +1313,6 @@ CMD.IsSwitch lda (ZPArgVBufPtr) .9 sec rts *-------------------------------------- -CMD.PrintArgVBufPtr - >PUSHW ZPArgVBufPtr - >PUSHBI 0 - >SYSCALL PrintF - rts -*-------------------------------------- MAN SAVE usr/src/bin/sh.s.cmd LOAD usr/src/bin/sh.s diff --git a/BIN/SH.S.CORE.txt b/BIN/SH.S.CORE.txt index 97ffa365..e0e5b1bf 100644 --- a/BIN/SH.S.CORE.txt +++ b/BIN/SH.S.CORE.txt @@ -1,34 +1,39 @@ NEW AUTO 3,1 - .LIST OFF + .LIST OFF *-------------------------------------- CORE.Init lda #PUSHD.STACK - >STA.G PUSHD.STACK - + tay + sta (pdata),y + + lda #CODE.STACK + tay + sta (pdata),y + .9 rts *-------------------------------------- -CORE.FUNCRESET >LDA.G hFuncList +CORE.FUNCRESET >LDA.G hFunctions beq .8 - + >SYSCALL SListFree - >STZ.G hFuncList - -.8 rts + >STZ.G hFunctions + +.8 rts *-------------------------------------- -* stack-6 InputBuf -* stack-4 InputBufPtr +* stack-6,7 InputBuf +* stack-4,5 InputBufPtr * stack-3 old ARGC * stack-2 old ARGV * stack-1 new hCode -* stack +* stack *-------------------------------------- -CORE.Load.YAX stx M32.ACC X = Code to Execute +CORE.Load.YAX stx LOAD.hCode X = Code to Execute >SYSCALL ArgVDup Y,A = ArgV bcs .9 - stx M32.ACC+1 X = hARGV - sta M32.ACC+2 A = ARGC + stx LOAD.hArgs X = hARGV + sta LOAD.ArgCnt A = ARGC lda #8 jsr CORE.StkCheck @@ -48,17 +53,17 @@ CORE.Load.YAX stx M32.ACC X = Code to Execute jsr CORE.StkPush old hARGV ldy #S.PS.ARGC - lda M32.ACC+2 new ARGC + lda LOAD.ArgCnt new ARGC dec Skip ARG0 in count sta (pPS),y iny #S.PS.hARGV - - lda M32.ACC+1 + lda LOAD.hArgs sta (pPS),y new hARGV - lda M32.ACC new code + + lda LOAD.hCode new code jsr CORE.StkPush -* lda M32.ACC +* lda LOAD.hCode >SYSCALL GetMemPtr >STYA ZPInputBuf >STYA ZPInputBufPtr @@ -72,7 +77,7 @@ CORE.Load.YAX stx M32.ACC X = Code to Execute * Input : ZPInputBufPtr (String) * Tokenize ZPArgVBuf * :LOOP -* if CmdSep=| : +* if CmdSep=| : * set hStdIn = hStdOut * set hStdOut = Std * GetCmd from line until | or EOL @@ -95,13 +100,17 @@ CORE.Run.EOF jsr CORE.StkPull bcs * cmp #$C0+C.. check CALL . CL context beq .1 + cmp #$C0+C.CALL beq .1 + cmp #$C0+C.CLEXEC bne .9 + .1 jsr CMD.EXIT.FILE jsr IO.Reset + lda #0 sec jmp CORE.Run.Exit Ending 0, CS,A=0 @@ -109,7 +118,7 @@ CORE.Run.EOF jsr CORE.StkPull .9 lda #E.UNEXPEOF sec jmp CORE.Run.Exit - + CORE.Run.RTS rts *-------------------------------------- CORE.Run jsr IO.Reset @@ -122,14 +131,9 @@ CORE.Run jsr IO.Reset txa >STA.G CORE.hArgVBuf - clc - .HS B0 BCS + >STZ.G CORE.bPipeIn -CORE.Run.1 sec coming from PIPE OUT - ror - >STA.G CORE.bPipeIn - - >LDYA ZPInputBufPtr Save Actual ptr for looping +CORE.Run.1 >LDYA ZPInputBufPtr Save Actual ptr for looping >STYA ZPInputCmdPtr >LDYA ZPArgVBuf Reset ArgV Buffer @@ -137,7 +141,7 @@ CORE.Run.1 sec coming from PIPE OUT lda #0 sta (ZPArgVBuf) - + sec ror CORE.IntCmd assume external @@ -154,15 +158,41 @@ CORE.Run.1 sec coming from PIPE OUT bra .8 .33 cmp #'#' commented line? - bne .4 + bne CORE.Run.3 .12 jsr CORE.SkipLine .8 lda #0 clc .9 jmp CORE.Run.Exit EOL, CS,A=0 +*-------------------------------------- +CORE.Run.3 >LDA.G hAliases + beq CORE.Run.4 -.4 >LDYA L.CMD internal command ? + >PUSHA + >PUSHW ZPInputBufPtr + >SYSCALL SListLookup + bcs CORE.Run.4 + + >STYA ZPTmpW Save KeyID + txa + jsr CORE.SkipCharsA + + >PUSHB.G hAliases + >PUSHW ZPTmpW KeyID + >PUSHWZ Allocate.. + >PUSHWI $ffff all + >PUSHWZ From Start + + >SYSCALL SListGetData X = hMem + bcs .9 + + jsr CORE.PushBufX + bcc CORE.Run.3 + +.9 rts +*-------------------------------------- +CORE.Run.4 >LDYA L.CMD internal command ? jsr CORE.LookupInputBuf bcc .41 @@ -170,11 +200,10 @@ CORE.Run.1 sec coming from PIPE OUT bra .42 .41 stx CORE.IntCmd - asl CORE.IntCmd jsr CORE.SkipCharsA - -.42 jsr CORE.StkGet - bcs CORE.Run.7 no particular context, exec... + +.42 jsr CORE.StkGet + bcs CORE.Run.5 no particular context, exec... tax lda CORE.IntCmd @@ -182,13 +211,13 @@ CORE.Run.1 sec coming from PIPE OUT and #$3F cmp #C.SWITCH SWITCH....FI ? - bcs CORE.Run.7 + bcs CORE.Run.5 .45 txa - bpl .43 context is FALSE, skip line + bpl .43 context is FALSE, skip line asl - bmi CORE.Run.7 parent context is true, exec + bmi CORE.Run.5 parent context is true, exec .43 jsr CORE.GetCharNB bcs .44 EOF @@ -206,86 +235,131 @@ CORE.Run.1 sec coming from PIPE OUT clc jmp CORE.Run.Exit *-------------------------------------- -CORE.Run.5 >LDYA L.CORE.IO +CORE.Run.5 jsr CORE.GetCharNB + bcs CORE.Run.NOPIPE Nothing to skip + + jsr CORE.IsEndCmd + bcc .3 + + >LDYA L.CORE.IO jsr CORE.LookupInputBuf - bcs CORE.Run.6 + bcs .2 jsr CORE.SkipCharsA jsr CORE.IO.JMP - bcc CORE.Run.7 + bcc CORE.Run.5 + + bcs .9 + +.2 jsr CORE.ArgV.Add + bcc CORE.Run.5 + +.9 lda #E.SYN + sec jmp CORE.Run.Exit -CORE.Run.6 jsr CORE.ArgV.Add +.3 cmp #C.CR + beq .7 -CORE.Run.7 jsr CORE.GetCharNB - bcs .2 Nothing to skip - - jsr CORE.IsEndCmd - bcs CORE.Run.5 - - tax + cmp #';' + beq .7 + + cmp #'|' + bne .5 - jsr CORE.GetNextCharNB Skip EoL char + jsr CORE.GetNextCharNB '|' + bra CORE.Run.PIPE - cpx #'|' Pipe OUT ? - bne .2 - sec -.1 .HS 90 BCC +.5 cmp #'&' + bne .9 + + jsr CORE.GetNextChar Skip '&' + bcs .50 + + cmp #'&' + beq .6 && + +.50 lda #S.PS.F.HOLD Run in the background... + trb CORE.PSFlags + bra CORE.Run.NOPIPE + +.6 jsr CORE.GetNextChar Skip '&&' -.2 clc + jsr CORE.ExecCmd + bcc .60 + + jsr CORE.SkipLine + clc + lda #0 + jmp CORE.Run.Exit + +.60 jmp CORE.Run.1 + +.7 jsr CORE.GetNextCharNB Skip EoL char + +.8 bra CORE.Run.NOPIPE +*-------------------------------------- +CORE.Run.NOPIPE clc no pipe + .HS B0 BCS +CORE.Run.PIPE sec ror >STA.G CORE.bPipeOut >LDA.G CORE.bPipeIn - bpl .3 - + bpl .1 + jsr IO.Pipe.In bcs CORE.Run.Exit - -.3 >LDA.G CORE.bPipeOut + +.1 >LDA.G CORE.bPipeOut bpl .7 - + jsr IO.Pipe.Out bcs CORE.Run.Exit lda #S.PS.F.HOLD Run in the background... trb CORE.PSFlags + lda #S.PS.F.CLOSEONX ...and close PIPE OUT on exit tsb CORE.PSFlags - + jsr CORE.ExecCmd - + php pha - + lda CORE.IntCmd $ff if external eor #$80 asl if cc Was external... - + jsr IO.Reset.OutC restore Output, NO close if EXTERNAL - + >LDA.G CORE.bPipeIn bpl .6 - + jsr IO.Pop.In restore Input - + .6 pla plp bcs CORE.Run.Exit - + + lda #$FF + >STA.G CORE.bPipeIn + jmp CORE.Run.1 Loop with Pipe IN - -.7 jsr CORE.ExecCmd + +.7 jsr CORE.ExecCmd *-------------------------------------- CORE.Run.Exit php pha >LDA.G CORE.hArgVBuf beq .1 + >SYSCALL FreeMem - + >STZ.G CORE.hArgVBuf - + .1 pla plp rts @@ -297,17 +371,23 @@ CORE.ExecCmd lda #0 >LDYA ZPArgVBuf >STYA ZPArgVBufPtr - ldx CORE.IntCmd + lda CORE.IntCmd bmi CORE.ExecExtCmd + asl + tax jmp (J.CMD,x) +*-------------------------------------- +CORE.ExecExtCmd ldy #S.PS.RC + lda #0 + sta (pPS),y -CORE.ExecExtCmd >PUSHW ZPArgVBuf + >PUSHW ZPArgVBuf >PUSHB CORE.PSFlags >SYSCALL ExecV bcs .9 - + tax CPID lda CORE.PSFlags and #S.PS.F.HOLD @@ -320,7 +400,7 @@ CORE.ExecExtCmd >PUSHW ZPArgVBuf lda (pPS),y >PUSHA >PUSHW L.MSG.PID - + txa >PUSHA >PUSHBI 1 @@ -341,6 +421,7 @@ CORE.SkipLine jsr CORE.GetNextCharNB cmp #C.CR EOL bne CORE.SkipLine + jsr CORE.GetNextChar skip CR... .8 rts @@ -355,7 +436,9 @@ CORE.LookupArgVBuf >STYA ZPPtr1 Keywords table >LDYA ZPArgVBufPtr bcc CORE.Lookup + >LDYA ZPInputBufPtr + CORE.Lookup >STYA ZPPtr2 ldx #0 @@ -377,7 +460,7 @@ CORE.Lookup >STYA ZPPtr2 .8 tya Keyword Len - clc + clc rts .3 dey @@ -389,6 +472,7 @@ CORE.Lookup >STYA ZPPtr2 .4 lda (ZPPtr1) bpl .41 + jsr IncPtr1 .6 inx @@ -403,11 +487,11 @@ CORE.Lookup >STYA ZPPtr2 .7 iny lda (ZPPtr2),y Get Src text char... beq .9 end of text - + jsr CORE.IsSpaceOrEndCmd bcc .9 end of valid chars clc -CORE.ArgV.Add.RTS +CORE.ArgV.Add.RTS rts *-------------------------------------- * ArgV @@ -416,7 +500,7 @@ CORE.ArgV.Add lda #C.SPACE sta ZPTmpW ldy #0 - + jsr CORE.GetCharNB bcs CORE.ArgV.Add.RTS @@ -432,7 +516,7 @@ CORE.ArgV.Add lda #C.SPACE ldx #')' stx ZPTmpW bra .12 - + .11 cmp #'`' bne .12 @@ -475,16 +559,16 @@ CORE.ArgV.Add lda #C.SPACE tya beq .8 Empty string.... - + sec adc ZPArgVBufPtr sta ZPArgVBufPtr bcc .8 - + inc ZPArgVBufPtr+1 clc -.8 +.8 .9 rts *-------------------------------------- CORE.ArgV.Next lda (ZPArgVBufPtr) @@ -515,18 +599,15 @@ CORE.IO.JMP txa tax jmp (J.CORE.IO,x) -CORE.IO.AMP lda #S.PS.F.HOLD - trb CORE.PSFlags - clc -CORE.IO.RTS rts CORE.IO.IN lda #O.RDONLY+O.TEXT jsr CORE.IO.Open bcs CORE.IO.RTS + jmp IO.Set.In CORE.IO.OUTA CORE.IO.1OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT bra CORE.IO.OUT.1 -CORE.IO.OUT +CORE.IO.OUT CORE.IO.1OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT CORE.IO.OUT.1 jsr CORE.IO.Open @@ -535,10 +616,12 @@ CORE.IO.OUT.1 jsr CORE.IO.Open CORE.IO.2OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT bra CORE.IO.2OUT.1 + CORE.IO.2OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT CORE.IO.2OUT.1 jsr CORE.IO.Open bcs CORE.IO.RTS + jmp IO.Set.Err *-------------------------------------- CORE.IO.Open pha Open Mode @@ -551,10 +634,11 @@ CORE.IO.Open pha Open Mode >STYA ZPArgVBufPtr Discard filename plx jmp IO.FOpenYAX + .9 pla lda #E.SYN sec - rts +CORE.IO.RTS rts *-------------------------------------- * Input Buffer *-------------------------------------- @@ -568,6 +652,9 @@ CORE.IsEndCmd cmp #';' cmp #C.CR beq CORE.IsEndCmd.8 + cmp #'&' + beq CORE.IsEndCmd.8 + cmp #'|' beq CORE.IsEndCmd.8 @@ -581,7 +668,7 @@ CORE.GetCharNB jsr CORE.GetChar bcs CORE.GetNextCharNB.RTS jsr CORE.CheckCharNB - bcc CORE.GetNextCharNB.RTS + bcc CORE.GetNextCharNB.RTS *-------------------------------------- CORE.GetNextCharNB jsr CORE.GetNextChar @@ -611,22 +698,98 @@ CORE.GetNextChar inc ZPInputBufPtr+1 *-------------------------------------- -CORE.GetChar lda (ZPInputBufPtr) +CORE.GetChar phy + +.1 lda (ZPInputBufPtr) + bne .8 + + >LDA.G CODE.STACK + cmp #CODE.STACK beq .9 - clc - rts + jsr CORE.PopBuf + bra .1 -.9 sec +.8 clc + +.9 ply rts *-------------------------------------- CORE.SkipCharsA clc adc ZPInputBufPtr sta ZPInputBufPtr bcc .8 + inc ZPInputBufPtr+1 + .8 rts *-------------------------------------- +CORE.PushBufX >LDA.G CODE.STACK + cmp #CODE.STACK.MAX*5 + beq .9 + + inc + tay + + phx next hBuffer + + ldx #0 + +.1 lda ZPInputBuf,x + sta (pData),y + inx + iny + cpx #6 + bne .1 + + pla + pha + sta (pData),y + + tya + >STA.G CODE.STACK + + pla + >SYSCALL GetMemPtr + >STYA ZPInputBuf + >STYA ZPInputBufPtr + +* clc + rts + +.9 lda #E.STKOVERFLOW +* sec + rts +*-------------------------------------- +CORE.PopBuf >LDA.G CODE.STACK + cmp #CODE.STACK + beq .9 + + tay + lda (pData),y + phy + >SYSCALL FreeMem + ply + + ldx #5 + dey + +.1 lda (pData),y + sta ZPInputBuf,x + dey + dex + bpl .1 + + tya + >STA.G CODE.STACK + +* clc + rts + +.9 lda #E.STACKERROR +* sec + rts +*-------------------------------------- * Stack *-------------------------------------- CORE.StkPopCtx jsr CORE.StkPull @@ -651,34 +814,34 @@ CORE.StkPopCtxA and #$3F cmp #C.DEFAULT DEFAULT : C.DEFAULT + hValue bne .9 - + .1 jsr CORE.StkPopX .2 jsr CORE.StkPullFree -.8 clc +.8 clc rts - + .3 jsr CORE.StkPull Get FOR sub cmd beq .4 FOR List - + jsr CORE.StkPullFree hVARNAME - + jsr CORE.StkPullFClose hFILE/hPIPE ldx #2 CmdPtr jmp CORE.StkPopX - + .4 jsr CORE.StkPullFree hVARNAME - + jsr CORE.StkPullFClose hFILE/hPIPE ldx #4 ListPtr,CmdPtr jmp CORE.StkPopX - + .9 lda #E.STACKERROR sec - rts + rts *-------------------------------------- CORE.StkPopX lda (pData) .1 dec @@ -701,8 +864,10 @@ CORE.StkCheck sec *-------------------------------------- CORE.StkPushYAX phx jsr CORE.StkPushYA - bcs CORE.StkPushYA.9 - bra CORE.StkPush.1 + bcc CORE.StkPush.1 + + plx + rts *-------------------------------------- CORE.StkPushInputBufPtr >LDYA ZPInputBufPtr @@ -710,15 +875,15 @@ CORE.StkPushInputBufPtr CORE.StkPushYA phy jsr CORE.StkPush bcc CORE.StkPush.1 -CORE.StkPushYA.9 + plx -CORE.StkPushYA.RTS rts *-------------------------------------- -CORE.PushVarName +CORE.PushVarName >LDYA ZPVarNamePtr >SYSCALL StrDup - bcs CORE.StkPushYA.RTS + bcs CORE.StkPush.RTS + txa *-------------------------------------- CORE.StkPush pha @@ -730,7 +895,7 @@ CORE.StkPush.1 lda (pData) StackPtr sta (pData) StackPtr tay - pla + pla sta (pData),y * clc rts @@ -738,6 +903,7 @@ CORE.StkPush.1 lda (pData) StackPtr .9 pla lda #E.STKOVERFLOW * sec +CORE.StkPush.RTS rts *-------------------------------------- CORE.StkGetCtx jsr CORE.StkGet diff --git a/BIN/SH.S.HIS.txt b/BIN/SH.S.HIS.txt index 72e14a82..aec5b8c4 100644 --- a/BIN/SH.S.HIS.txt +++ b/BIN/SH.S.HIS.txt @@ -2,7 +2,7 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- -HIS.Init >LDYAI HISTORY.MAX Get a buffer for History +HIS.Init >LDYAI HISBUF.MAX Get a buffer for History >SYSCALL StrVNew bcs .9 @@ -10,39 +10,37 @@ HIS.Init >LDYAI HISTORY.MAX Get a buffer for History >STA.G HIS.hBuf * >STZ.G HIS.Count -* >STA.G HIS.Index -* >STA.G HIS.LRU +* >STZ.G HIS.Head +* clc + .9 rts *-------------------------------------- HIS.Add >LDA.G HIS.hBuf beq .9 - + >LDA.G HIS.Count - cmp #HIS.MAX - bcc .2 + cmp #HISCNT.MAX + bcs .1 - >LDA.G HIS.LRU - cmp #HIS.MAX - bne .1 + inc + sta (pData),y - lda #0 - -.1 inc - >STA.G HIS.LRU + >STA.G HIS.Head + tax bra .7 -.2 inc - >STA.G HIS.Count +.1 ldy #HIS.Head + jsr HIS.NextY replace oldest -.7 tax - >PUSHB.G HIS.hBuf + tax + +.7 >PUSHB.G HIS.hBuf >PUSHBI 0 txa >PUSHA >PUSHW ZPCLBuf >SYSCALL StrVSet - >STZ.G HIS.Index Reset Index .9 rts *-------------------------------------- HIS.Select >LDA.G HIS.Count @@ -50,39 +48,44 @@ HIS.Select >LDA.G HIS.Count clc .99 rts - + .10 jsr CL.Reset - >STZ.G HIS.Index + ldx #0 -.1 >INC.G HIS.Index - jsr HIS.GetIndex +.1 inx + phx + jsr HIS.GetX + plx bcs .99 >PUSHW L.MSG.HIS - >LDA.G HIS.Index + txa dec >PUSHA >PUSHW ZPCLBuf >PUSHBI 3 + phx >SYSCALL PrintF + plx bcs .9 - >LDA.G HIS.Index + txa >CMP.G HIS.Count bne .1 - >PUSHW L.MSG.HISPROMPT - >PUSHBI 0 - >SYSCALL PrintF - - >STZ.G HIS.Index + >LDYA L.MSG.HISPROMPT + jsr PrintYANoCR + bcs .9 lda #0 sta (ZPCLBuf) + + ldy #HIS.Ptr + sta (ZPCLBuf),y >SYSCALL GetChar - bcs HIS.Select.RTS + bcs .9 cmp #'0' bcc .7 @@ -92,13 +95,12 @@ HIS.Select >LDA.G HIS.Count and #$f inc + >STA.G HIS.Ptr - >STA.G HIS.Index - -.7 >PUSHW L.MSG.HISROMPTCLR - >PUSHBI 0 - >SYSCALL PrintF - +.7 >LDYA L.MSG.HISROMPTCLR + jsr PrintYANoCR + bcs .9 + jsr CL.PrintPrompt bcc HIS.GetToCL1 .9 @@ -107,32 +109,38 @@ HIS.Select.RTS rts HIS.GetPrev >LDA.G HIS.Count beq HIS.Select.RTS empty history,nothing to do - >LDA.G HIS.Index + >LDA.G HIS.Ptr bne .1 - >LDA.G HIS.Count + >LDA.G HIS.Head Get newest bra HIS.GetToCL .1 dec - bra HIS.GetToCL + bne .2 + + >LDA.G HIS.Count + +.2 bra HIS.GetToCL *-------------------------------------- HIS.GetNext >LDA.G HIS.Count beq HIS.Select.RTS empty history,nothing to do - >EOR.G HIS.Index - beq HIS.GetToCL + >LDA.G HIS.Ptr + bne .1 - >LDA.G HIS.Index - inc + ldy #HIS.Head + +.1 jsr HIS.NextY *-------------------------------------- -HIS.GetToCL >STA.G HIS.Index +HIS.GetToCL >STA.G HIS.Ptr - jsr CL.CLR + jsr CL.CLR.1 -HIS.GetToCL1 >LDA.G HIS.Index +HIS.GetToCL1 >LDA.G HIS.Ptr beq .9 - jsr HIS.GetIndex + tax + jsr HIS.GetX bcs .9 ldy #$ff @@ -145,17 +153,34 @@ HIS.GetToCL1 >LDA.G HIS.Index >STA.G CL.Ptr >STA.G CL.Len - jmp CL.Print + + >LDYA ZPCLBuf + jmp PrintYANoCR .9 rts *-------------------------------------- -HIS.GetIndex >PUSHB.G HIS.hBuf +HIS.GetX >PUSHB.G HIS.hBuf >PUSHBI 0 - >PUSHB.G HIS.Index + txa + >PUSHA >PUSHW ZPCLBuf >SYSCALL StrVGet rts *-------------------------------------- +HIS.NextY lda (pData),y + + phy + >CMP.G HIS.Count + ply + + bcc .1 + + lda #0 + +.1 inc + + rts +*-------------------------------------- MAN SAVE usr/src/bin/sh.s.his LOAD usr/src/bin/sh.s diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index 0121f949..85422394 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -5,46 +5,48 @@ NEW .OR $2000 .TF bin/sh *-------------------------------------- -HIS.MAX .EQ 10 -HISTORY.MAX .EQ 256 +HISCNT.MAX .EQ 10 +HISBUF.MAX .EQ 256 CORE.STACK.MAX .EQ 128 PUSHD.STACK.MAX .EQ 4 +CODE.STACK.MAX .EQ 4 *-------------------------------------- C... .EQ 0 -C.. .EQ 2 -C.CD .EQ 4 -C.NOHUP .EQ 6 -C.DATE .EQ 8 -C.ECHO .EQ 10 -C.EXIT .EQ 12 -C.MD .EQ 14 -C.PAUSE .EQ 16 -C.PWD .EQ 18 -C.RD .EQ 20 -C.READ .EQ 22 -C.REN .EQ 24 -C.SET .EQ 26 -C.SLEEP .EQ 28 -C.SHIFT .EQ 30 -C.PUSHD .EQ 32 -C.POPD .EQ 34 -C.FUNCTION .EQ 36 -C.CALL .EQ 38 -C.BREAK .EQ 40 -C.SWITCH .EQ 42 -C.CASE .EQ 44 -C.DEFAULT .EQ 46 +C.. .EQ 1 +C.CD .EQ 2 +C.NOHUP .EQ 3 +C.DATE .EQ 4 +C.ECHO .EQ 5 +C.EXIT .EQ 6 +C.MD .EQ 7 +C.PAUSE .EQ 8 +C.PWD .EQ 9 +C.RD .EQ 10 +C.READ .EQ 11 +C.REN .EQ 12 +C.SET .EQ 13 +C.SLEEP .EQ 14 +C.SHIFT .EQ 15 +C.PUSHD .EQ 16 +C.POPD .EQ 17 +C.FUNCTION .EQ 18 +C.CALL .EQ 19 +C.BREAK .EQ 20 +C.SWITCH .EQ 21 +C.CASE .EQ 22 +C.DEFAULT .EQ 23 *-------------------------------------- -C.FOR .EQ 48 +C.FOR .EQ 24 C.FOR.LIST .EQ 0 C.FOR.FILEEXEC .EQ 1 -C.WHILE .EQ 50 -C.IF .EQ 52 -C.NEXT .EQ 54 -C.LOOP .EQ 56 -C.ELSE .EQ 58 -C.FI .EQ 60 -C.END .EQ 62 +C.WHILE .EQ 25 +C.IF .EQ 26 +C.NEXT .EQ 27 +C.LOOP .EQ 28 +C.ELSE .EQ 29 +C.FI .EQ 30 +C.END .EQ 31 +C.ALIAS .EQ 32 *-------------------------------------- C.CLEXEC .EQ 63 *-------------------------------------- @@ -77,7 +79,21 @@ ZPTmpW .BS 2 ZPPtr1 .BS 2 ZPPtr2 .BS 2 -M32.ACC .BS 4 +LOAD.hCode .BS 1 +LOAD.hArgs .BS 1 +LOAD.ArgCnt .BS 1 + +bState .BS 1 + +bState.ExitOnEOF .EQ %10000000 +bState.Pause .EQ %01000000 + +bState.PipeIn .EQ %00100000 +bState.PipeOut .EQ %00010000 +bState.AmpAmp .EQ %00001000 +bState.SET.C .EQ %00000100 +bState.SET.E .EQ %00000010 +bState.SET.X .EQ %00000001 ZS.END .ED *-------------------------------------- @@ -114,13 +130,14 @@ L.MSG.BATCHLINE .DA MSG.BATCHLINE L.MSG.BATCHERR .DA MSG.BATCHERR L.MSG.ERROR .DA MSG.ERROR L.MSG.PID .DA MSG.PID +L.MSG.ALIAS .DA MSG.ALIAS L.FMT.DATE .DA FMT.DATE L.FMT.Long .DA FMT.Long L.FMT.Byte .DA FMT.Byte J.ESC .DA CL.BS left arrow - .DA HIS.GetNext - .DA HIS.GetPrev - .DA CL.NAK right arrow + .DA HIS.GetPrev up + .DA HIS.GetNext down + .DA CL.NAK right L.CD.. .DA CD.. L.IN .DA IN L.CMD .DA CMD @@ -156,9 +173,9 @@ J.CMD .DA CMD... .DA CMD.ELSE .DA CMD.FI .DA CMD.END + .DA CMD.ALIAS L.CORE.IO .DA CORE.IO -J.CORE.IO .DA CORE.IO.AMP - .DA CORE.IO.IN +J.CORE.IO .DA CORE.IO.IN .DA CORE.IO.OUTA .DA CORE.IO.OUT .DA CORE.IO.1OUTA @@ -193,9 +210,10 @@ CS.RUN jsr CL.Init lda (pPS),y beq .2 no arg, continue starting interactive - lda #$ff - >STA.G bExitOnEOF - inc lda #0 + lda #bState.ExitOnEOF + tsb bState + + lda #0 jsr CMD.SHIFTA Remove $0 = /bin/sh jsr GetArgV @@ -207,22 +225,21 @@ CS.RUN jsr CL.Init ldy #1 lda (ZPPtr1),y - cmp #'c' - beq .10 - + jsr ToUpperCase + cmp #'C' bne .1 - -.10 iny + + iny lda (ZPPtr1),y bne .1 - -* lda #0 + +* lda #0 jsr CMD.SHIFTA Remove $0 = -C - + jsr GetArgV jmp CS.RUN.CMDLINE - +*-------------------------------------- .1 jsr GetArgV Load SH batch file >SYSCALL LoadTxtFile bcs .9 @@ -232,7 +249,7 @@ CS.RUN jsr CL.Init plx jsr CMD..EXEC.YAX Execute . Batch file bcc CS.RUN.LOOP - + .9 rts *-------------------------------------- .2 jsr CMD.CD.HOME @@ -249,8 +266,10 @@ CS.RUN jsr CL.Init >SYSCALL LoadTxtFile bcs CS.RUN.LOOP No profile... - >LDYA L.HOME.PROFILE - jsr CMD..EXEC.YAX Execute . ${home}profile + phx X = loaded file hMem + jsr GetArgV Y,A = Args + plx + jsr CMD..EXEC.YAX Execute . ${home}.profile *-------------------------------------- CS.RUN.LOOP >SLEEP @@ -274,7 +293,8 @@ CS.RUN.LOOP >SLEEP lda (pData) batch mode ? beq CS.RUN.LOOP - >LDA.G bSET.C + lda bState + and #bState.SET.C beq .8 bra CS.RUN.LOOP @@ -282,16 +302,17 @@ CS.RUN.LOOP >SLEEP .11 cmp #19 test Ctrl-s bne CS.RUN.LOOP - lda #$80 - >STA.G bPause + lda #bState.Pause + tsb bState bra CS.RUN.LOOP *-------------------------------------- .8 lda #3 User Interrupt sec .9 rts *-------------------------------------- -.2 >LDA.G bPause - bpl .6 +.2 lda bState + and #bState.Pause + beq .6 .3 >SYSCALL GetChar bcs .9 I/O err @@ -302,22 +323,24 @@ CS.RUN.LOOP >SLEEP lda (pData) batch mode ? beq .5 - >LDA.G bSET.C + lda bState + and #bState.SET.C beq .8 bra .5 .4 tax - >LDA.G bPause - asl $ff ? - bpl .5 not from PAUSE command + lda bState + and #bState.Pause + beq .5 not from PAUSE command cpx #C.CR bne .5 jsr CheckLFAfterCR Check for any extra LF - bcs .9 - -.5 >STZ.G bPause + bcs .9 + +.5 lda #bState.Pause + trb bState *-------------------------------------- .6 lda (pData) batch mode ? bne CS.RUN.BATCH @@ -326,13 +349,15 @@ CS.RUN.INTERACTIVE jsr IO.Reset jsr CL.Reset + >STZ.G HIS.Ptr + jsr CL.ReadResetV jsr CL.PrintPrompt bcs CS.RUN.CMDLINE.9 .1 >SYSCALL GetChar - bcs CS.RUN.CMDLINE.9 I/O error + bcs CS.RUN.CMDLINE.9 I/O error .2 cmp #C.EOF ....or Ctrl-D beq CS.RUN.CMDLINE.9 CS @@ -342,9 +367,8 @@ CS.RUN.INTERACTIVE >LDA.G CL.bReady Something to execute ? bpl .1 - >PUSHW L.MSG.PROMPTCRLF - >PUSHBI 0 - >SYSCALL PrintF + >LDYA L.MSG.PROMPTCRLF + jsr PrintYANoCR bcs CS.RUN.CMDLINE.9 lda (ZPCLBuf) @@ -356,7 +380,7 @@ CS.RUN.INTERACTIVE CS.RUN.CMDLINE >SYSCALL StrDup bcs CS.RUN.CMDLINE.9 - + phx jsr GetArgV plx Y,A=ARGV, X=strdup @@ -370,9 +394,10 @@ CS.RUN.CMDLINE >SYSCALL StrDup bra CS.RUN.LOOP.RUN CS.RUN.CMDLINE.9 - rts + rts *-------------------------------------- -CS.RUN.BATCH >LDA.G bSET.X +CS.RUN.BATCH lda bState + and #bState.SET.X beq CS.RUN.LOOP.RUN ldy #$ff @@ -402,8 +427,9 @@ CS.RUN.LOOP.END ldy #S.PS.RC tay beq CS.RUN.LOOP.80 0 = EOF - >LDA.G bSET.E - bmi CS.RUN.LOOP.80 + lda bState + and #bState.SET.E + bne CS.RUN.LOOP.80 .1 jsr CORE.StkGet cmp #$C0+C.CLEXEC @@ -414,13 +440,13 @@ CS.RUN.LOOP.END ldy #S.PS.RC cmp #$C0+C.CALL in CALL ? beq .7 - + jsr CORE.StkPopCtx bcc .1 .7 jsr IO.PrintBatchErrMsg bcs CS.RUN.LOOP.RTS - + jsr CORE.StkPull jsr CMD.EXIT.FILE @@ -430,8 +456,9 @@ CS.RUN.LOOP.END ldy #S.PS.RC CS.RUN.LOOP.80 lda (pData) something on stack ? bne CS.RUN.LOOP.88 - >LDA.G bExitOnEOF - bmi CS.RUN.LOOP.EXIT + lda bState + and #bState.ExitOnEOF + bne CS.RUN.LOOP.EXIT CS.RUN.LOOP.88 jmp CS.RUN.LOOP CS.RUN.LOOP.EXIT @@ -461,9 +488,14 @@ CS.DOEVENT lda (pEvent) *-------------------------------------- CS.QUIT jsr CORE.FUNCRESET - >LDA.G HIS.hBuf + >LDA.G hFunctions + beq .10 + + >SYSCALL SListFree + +.10 >LDA.G HIS.hBuf beq .1 - + >SYSCALL FreeStkObj .1 ldy #CL.hBuf @@ -476,9 +508,9 @@ CS.QUIT jsr CORE.FUNCRESET .7 lda (pData),y beq .8 - + >SYSCALL FreeMem - + .8 clc rts *-------------------------------------- @@ -495,11 +527,11 @@ CheckLFAfterCR ldy #S.PS.hStdIn Check for any extra LF lda (pPS),y >SYSCALL FEOF bcs .9 - + tay bne .9 >SYSCALL GetChar - + .9 rts *-------------------------------------- CheckSleep ldy #Sleep+3 @@ -540,9 +572,12 @@ AddAp1Ptr1 sec *-------------------------------------- ToUpperCase cmp #'a' bcc .8 + cmp #'z'+1 bcs .8 + eor #$20 + .8 clc exit CC to allow Jmp to rts *-------------------------------------- @@ -551,6 +586,11 @@ IncPStack3 inc pStack inc pStack inc pStack rts +*-------------------------------------- +PrintYANoCR >PUSHYA + >PUSHBI 0 + >SYSCALL PrintF + rts *-------------------------------------- .INB usr/src/bin/sh.s.cl .INB usr/src/bin/sh.s.his @@ -561,28 +601,30 @@ IncPStack3 inc pStack *-------------------------------------- CS.END *-------------------------------------- -MSG.GREETINGS .AZ "\r\nA2osX-SH %d.%d\r\n\r\n" -MSG.HIS .AZ "\r\n%3d : %s" -MSG.HISPROMPT .AZ "\r\n\r\n? " -MSG.HISROMPTCLR .DA #C.BS,#C.BS,#0 -MSG.PROMPT .AZ "\e[?7h$ " Enable Line Wrap -MSG.PROMPTCRLF .AZ "\e[?7l\r\n" Disable Line Wrap -MSG.TRACE .AS ">" -MSG.BATCHLINE .AZ "%s\r\n" -MSG.BATCHERR .AZ "%s^\r\nLine #%D:" -MSG.ERROR .AS "[$%h]:%s." -MSG.ECHOCRLF .AZ "\r\n" -MSG.PID .AZ "PID=%d\r\n" +MSG.GREETINGS .CZ "\r\nA2osX-SH %d.%d\r\n\r\n" +MSG.HIS .CZ "\r\n%3d : %s" +MSG.HISPROMPT .CZ "\r\n\r\n? " +MSG.HISROMPTCLR .CZ "\b\b" +MSG.PROMPT .CZ "\e[?7h$ " Enable Line Wrap +MSG.PROMPTCRLF .CZ "\e[?7l\r\n" Disable Line Wrap +MSG.TRACE .CS ">" +MSG.BATCHLINE .CZ "%s\r\n" +MSG.BATCHERR .CZ "%s^\r\nLine #%D:" +MSG.ERROR .CS "[$%h]:%s." +MSG.ECHOCRLF .CZ "\r\n" +MSG.PID .CZ "PID=%d\r\n" +MSG.ALIAS .CZ ' = "%s"\r\n' +*-------------------------------------- FMT.DATE .AZ "%A, %B %d %Y %H:%M:%S" FMT.Long .AZ "%L" FMT.Byte .AZ "%d" *-------------------------------------- -HOME.PROFILE .AZ "${HOME}profile" -PtrZero .HS 00 To Make It ArgV +HOME.PROFILE .AS "${HOME}.profile" +PtrZero .HS 00 PS1 .AZ "${PS1}" HOME .AZ "${HOME}" *-------------------------------------- -EscChars .AS 'DBAC' +EscChars .AS "DABC" EscChars.Cnt .EQ *-EscChars EscChars.Remap .DA #C.BS,#C.VT,#C.LF,#C.FS *-------------------------------------- @@ -622,9 +664,9 @@ CMD .AT ".." .AT "ELSE" .AT "FI" .AT "END" + .AT "ALIAS" .HS 00 -CORE.IO .AT "&" - .AT "<" +CORE.IO .AT "<" .AT ">>" .AT ">" .AT "1>>" @@ -676,29 +718,22 @@ EXP.OP.BINARY.BITS *-------------------------------------- EXP.OP.MATH.FPU .DA #FPU.lMUL,#FPU.lDIV,#FPU.lMOD,#FPU.lADD,#FPU.lSUB *-------------------------------------- -SET.FLAGS .AS "CXE" -SET.VARS .DA #bSET.C,#bSET.X,#bSET.E +SET.FLAGS .AS "CEX" +SET.VARS .DA #bState.SET.C,#bState.SET.E,#bState.SET.X *-------------------------------------- .DUMMY .OR 0 DS.START CORE.STACK .BS CORE.STACK.MAX+1 pData (0 = Stack Ptr) PUSHD.STACK .BS PUSHD.STACK.MAX+1 +CODE.STACK .BS CODE.STACK.MAX*7+1 -hFuncList .BS 1 +hAliases .BS 1 +hFunctions .BS 1 -bExitOnEOF .BS 1 - -bPause .BS 1 - -bSET.C .BS 1 -bSET.E .BS 1 -bSET.X .BS 1 - -Sleep .BS 4 +CORE.hArgVBuf .BS 1 CL.hBuf .BS 1 - CL.Ptr .BS 1 CL.Len .BS 1 CL.bReady .BS 1 @@ -706,19 +741,20 @@ CL.bEscMode .BS 1 CL.MaxCnt .BS 1 CL.bSilent .BS 1 -CORE.hArgVBuf .BS 1 CORE.bPipeIn .BS 1 CORE.bPipeOut .BS 1 HIS.hBuf .BS 1 HIS.Count .BS 1 -HIS.Index .BS 1 -HIS.LRU .BS 1 +HIS.Ptr .BS 1 +HIS.Head .BS 1 IO.hIn .BS 1 IO.hOut .BS 1 IO.hErr .BS 1 +Sleep .BS 4 + *TimeBuf .BS S.TIME 8 bytes *M32.BUF .BS 12 -1234567890\0 TimeBuf .EQ * diff --git a/CTESTS/CTEST.txt b/CTESTS/CTEST.txt deleted file mode 100644 index e5d4270d..00000000 --- a/CTESTS/CTEST.txt +++ /dev/null @@ -1,89 +0,0 @@ -NEW - PREFIX -AUTO 4,1 -#!/bin/csh -// This is a comment.... - -puts(argv[1]); - - -exit - -puts("puts: test 'const char *' string."); - -struct tag_test { - int cnt; - float f; - tag_test *next; - }; - -long L1=3; -long L2=5; -long L3=7; -printf("L1=%L, L2=%L, L3=%L\r\n", L1, L2, L3); - -L3=L1*L2+1; -printf("L3=L1*L2+1:L1=%L, L2=%L, L3=%L\r\n", L1, L2, L3); - -L3=L1+5*9; -printf("L3=L1+5*9:L1=%L, L2=%L, L3=%L\r\n", L1, L2, L3); - -L3=(L1+5)*L2+10; -printf("L3=(L1+5)*L2+10:L1=%L, L2=%L, L3=%L\r\n", L1, L2, L3); - -#define PI 3.14159265 - -float f = PI / 3; -printf("f=%e\r\n", f); - -float COSPI3=cos(f); -float SQR2=sqr(2); -printf("cos(PI/3)=%e, sqr(2)=%e\r\n", COSPI3, SQR2); - -printf("f=%e, COSPI3=%e\r\n", f, COSPI3); - -int i = 36; -i = i - 11; -i=i<<4; -printf("i=%I\r\n", i); - -float BILLION=1000000000; //9E6E6B2800 -printf("BILLION=%e %h%h%h%h%h\r\n", BILLION, BILLION); -unsigned int Test=61027; -printf("Test=%D\r\n", Test); - -float a = 66 / 3; -printf("a=%e\r\n", a); -a=a+1; -printf("a=%e\r\n", a); -float mul=256*128; -printf("mul=%e\r\n", mul); - -puts("Press a key"); -char chr = getchar(); -printf("chr=%d\r\n", chr); - -int cnt=3; - -if (cnt) { - puts("IF block..."); - cnt=cnt+1; - printf("cnt=%I\r\n", cnt); - } - -puts("Press a key"); -chr=getchar(); - -while (cnt) { - cnt=cnt-1; - printf("cnt=%5I, 0x%H\r\n", cnt, cnt); - } - -puts("Press a key"); -getchar(); - -if (0) { - puts("false{{{{{SKIPTHIS"); - } -MAN -TEXT /MAKE/USR/SHARE/ctests/ctest diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 6632a5fc..5c25c2bc 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -170,7 +170,7 @@ SEEK.END .EQ $02 *-------------------------------------- SL.. .EQ %10000000 SL._ .EQ %01000000 -SL.NoCase .EQ %01000010 +SL.NoCase .EQ %00000010 SL.EndDollar .EQ %00000001 *-------------------------------------- * A2osX.SYSCALL Functions Indexes @@ -235,7 +235,8 @@ SYS.SetAttr .EQ $5E * MOUNT SYS.Mount .EQ $60 SYS.UMount .EQ $62 -* .EQ $64 +* STKOBJ +SYS.LoadStkObj .EQ $64 SYS.GetStkObj .EQ $66 * ARG SYS.Shift .EQ $68 @@ -325,9 +326,9 @@ SYS.GetMem .EQ $F0 SYS.Realloc .EQ $F2 SYS.GetMemPtr .EQ $F4 SYS.FreeMem .EQ $F6 +SYS.Free .EQ $F8 -SYS.NewStkObj .EQ $F8 -SYS.LoadStkObj .EQ $FA +SYS.NewStkObj .EQ $FA SYS.GetStkObjPtr .EQ $FC SYS.FreeStkObj .EQ $FE *-------------------------------------- diff --git a/INC/LIBBLKDEV.I.txt b/INC/LIBBLKDEV.I.txt index 482995b5..3dfcaa9e 100644 --- a/INC/LIBBLKDEV.I.txt +++ b/INC/LIBBLKDEV.I.txt @@ -10,6 +10,8 @@ LIBBLKDEV.D2HeadSelect .EQ 14 LIBBLKDEV.D2TrkFmt16s .EQ 16 LIBBLKDEV.D2TrkRead16s .EQ 18 LIBBLKDEV.D2TrkWrite16s .EQ 20 +LIBBLKDEV.D2TrkReadNIB .EQ 22 +LIBBLKDEV.D2TrkWriteNIB .EQ 24 *-------------------------------------- MAN SAVE inc/libblkdev.i diff --git a/INCLUDE/SYS/socket.h.txt b/INCLUDE/SYS/socket.h.txt new file mode 100644 index 00000000..32a9334b --- /dev/null +++ b/INCLUDE/SYS/socket.h.txt @@ -0,0 +1,48 @@ +NEW + AUTO 3,1 + +#define AF_LOCAL 0 +#define AF_INET 2 +#define AF_ETHERTALK 4 + +#define SOCK_RAW 0 +#define SOCK_DGRAM 2 +#define SOCK_SEQPACKET 4 +#define SOCK_STREAM 6 + +#define SO_DEBUG 1 +#define SO_ACCEPTCONN 2 +#define SO_REUSEADDR 4 +#define SO_KEEPALIVE 8 +#define SO_DONTROUTE 16 +#define SO_BROADCAST 32 +#define SO_USELOOPBACK 64 +#define SO_LINGER 128 + +typedef int sa_family_t; +typedef int ssize_t; + +struct sockaddr + { + sa_family_t sa_family; + char sa_data[]; + }; + +int socket(int, int, int); +int bind(int, const struct sockaddr *, socklen_t); +int connect(int, const struct sockaddr *, socklen_t); +int listen(int, int); +int accept(int, struct sockaddr *restrict, socklen_t *restrict); +int shutdown(int, int); + +ssize_t recv(int, void *, size_t, int); +ssize_t send(int, const void *, size_t, int); + +ssize_t recvfrom(int, void *restrict, size_t, int,struct sockaddr *restrict, socklen_t *restrict); +ssize_t sendto(int, const void *, size_t, int, const struct sockaddr *,socklen_t); + +int getsockopt(int, int, int, void *restrict, socklen_t *restrict); +int setsockopt(int, int, int, const void *, socklen_t); + +MAN +TEXT include/sys/socket.h diff --git a/INCLUDE/SYS/stat.h.txt b/INCLUDE/SYS/stat.h.txt index 56f9d401..7fd53573 100644 --- a/INCLUDE/SYS/stat.h.txt +++ b/INCLUDE/SYS/stat.h.txt @@ -2,19 +2,19 @@ NEW AUTO 3,1 struct stat { -mode_t st_mode -dev_t st_dev -uid_t st_uid -gid_t st_gid -ino_t st_ino -nlink_t st_nlink -off_t st_size -//dev_t st_rdev -time_t st_atime -time_t st_mtime -time_t st_ctime -blkcnt_t st_blocks -blksize_t st_blksize +mode_t st_mode +dev_t st_dev +uid_t st_uid +gid_t st_gid +ino_t st_ino +nlink_t st_nlink +off_t st_size +//dev_t st_rdev +time_t st_atime +time_t st_mtime +time_t st_ctime +blkcnt_t st_blocks +blksize_t st_blksize short int st_P_type int st_P_auxtype @@ -26,6 +26,6 @@ short int se_P_fsid short int st_P_access short int st_P_SPARE }; - + MAN TEXT include/sys/stat.h diff --git a/INCLUDE/SYS/types.h.txt b/INCLUDE/SYS/types.h.txt index 3dbd3157..9b0cf612 100644 --- a/INCLUDE/SYS/types.h.txt +++ b/INCLUDE/SYS/types.h.txt @@ -3,6 +3,10 @@ NEW typedef int mode_t; typedef short int dev_t; - +typedef short int uid_t; +typedef short int gid_t; +typedef short int ino_t[8]; +typedef int nlink_t; +typedef unsigned long int off_t; MAN TEXT include/sys/types.h diff --git a/INCLUDE/libblkdev.h.txt b/INCLUDE/libblkdev.h.txt new file mode 100644 index 00000000..f87473d1 --- /dev/null +++ b/INCLUDE/libblkdev.h.txt @@ -0,0 +1,17 @@ +NEW + AUTO 3,1 + +int blkdevGetProDOSCatSize(int, short int, short int); +void blkdevBuildProDOSCat(int, short int, short int, char*, void*); +short int blkdevD2MotorControl(short int, short int); +short int fastcall blkdevD2Recalibrate(short int); +short int blkdevD2HeadSelect(short int, short int); +short int blkdevD2MoveHead(short int, short int, short int); +short int blkdevD2TrkFmt16s(short int, short int, short int, short int); +short int blkdevD2TrkRead16s(short int, short int, void*); +short int blkdevD2TrkWrite16s(short int, short int, short int, void*); +short int blkdevD2TrkReadNIB(short int, short int, void*); +short int blkdevD2TrkWriteNIB(short int, short int, short int, void*); + +MAN +TEXT include/libblkdev.h diff --git a/INCLUDE/time.h.txt b/INCLUDE/time.h.txt index 0df48d1d..20b56e6f 100644 --- a/INCLUDE/time.h.txt +++ b/INCLUDE/time.h.txt @@ -1,23 +1,26 @@ NEW AUTO 3,1 +struct tm { + short int tm_cent; + short int tm_year; + short int tm_mon; + short int tm_mday; + short int tm_hour; + short int tm_min; + short int tm_sec; + short int tm_wday; + }; + +// short int tm_yday; +// short int tm_isdst; + typedef unsigned long time_t; -struct tm { - short int tm_cent; - short int tm_year; - short int tm_mon; - short int tm_mday; - short int tm_hour; - short int tm_min; - short int tm_sec; - short int tm_wday; -// short int tm_yday; -// short int tm_isdst; - }; - -time_t time(time_t *); - - +struct tm* time(struct tm*); +void strftime(char*,const char*,const struct tm*); +void ptime2time(time_t*,const struct tm*); +void ctime2time(time_t*,const struct tm*); + MAN TEXT include/time.h diff --git a/LIB/LIBBLKDEV.O.S.txt b/LIB/LIBBLKDEV.O.S.txt new file mode 100644 index 00000000..52992c8d --- /dev/null +++ b/LIB/LIBBLKDEV.O.S.txt @@ -0,0 +1,36 @@ +NEW + AUTO 3,1 + .LIST OFF + .OR $0 + .TF lib/libblkdev.o +*-------------------------------------- + .INB inc/libblkdev.i +*-------------------------------------- + .PS "blkdevGetProDOSCatSize" + .DA #LIBBLKDEV.GetProDOSCatSize + .PS "blkdevBuildProDOSCat" + .DA #LIBBLKDEV.BuildProDOSCat + + .PS "blkdevD2MotorControl" + .DA #LIBBLKDEV.D2MotorControl + .PS "blkdevD2Recalibrate" + .DA #LIBBLKDEV.D2Recalibrate + .PS "blkdevD2MoveHead" + .DA #LIBBLKDEV.D2MoveHead + .PS "blkdevD2HeadSelect" + .DA #LIBBLKDEV.D2HeadSelect + .PS "blkdevD2TrkFmt16s" + .DA #LIBBLKDEV.D2TrkFmt16s + .PS "blkdevD2TrkRead16s" + .DA #LIBBLKDEV.D2TrkRead16s + .PS "blkdevD2TrkWrite16s" + .DA #LIBBLKDEV.D2TrkWrite16s + .PS "blkdevD2TrkReadNIB" + .DA #LIBBLKDEV.D2TrkReadNIB + .PS "blkdevD2TrkWriteNIB" + .DA #LIBBLKDEV.D2TrkWriteNIB + .DA #0 +*-------------------------------------- +MAN +SAVE usr/src/lib/libblkdev.o.s +ASM diff --git a/LIB/LIBGUI.S.FON.txt b/LIB/LIBGUI.S.FON.txt index 6334f4a9..76560792 100644 --- a/LIB/LIBGUI.S.FON.txt +++ b/LIB/LIBGUI.S.FON.txt @@ -2,13 +2,13 @@ NEW AUTO 3,1 *-------------------------------------- FON.Init >LDYA L.SYSX7 - >SYSCALL2 LoadStkObj + jsr .1 bcs .9 stx hSYSFON >LDYA L.SYSX7B - >SYSCALL2 LoadStkObj + jsr .1 bcs .9 stx hSYSFONB @@ -25,6 +25,13 @@ FON.Init >LDYA L.SYSX7 sta SYSFON.Hp2 .9 rts + +.1 >PUSHYA + >PUSHBI O.RDONLY + >PUSHBI S.FI.T.FON + >PUSHWZ Aux type + >SYSCALL LoadStkObj + rts *-------------------------------------- FON.GetTextSize >STYA CB.CACHE+S.CB.TxtPtr stx CB.CACHE+S.CB.hFont diff --git a/LIB/LIBGUI.S.txt b/LIB/LIBGUI.S.txt index f5b4e6f7..f85352e4 100644 --- a/LIB/LIBGUI.S.txt +++ b/LIB/LIBGUI.S.txt @@ -7,7 +7,7 @@ NEW *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i - .INB inc/kernel.i + .INB inc/mli.i .INB inc/gfx.i .INB inc/libgui.i *-------------------------------------- diff --git a/LIB/LIBTUI.O.S .txt b/LIB/LIBTUI.O.S .txt index 46b36882..434017e7 100644 --- a/LIB/LIBTUI.O.S .txt +++ b/LIB/LIBTUI.O.S .txt @@ -4,48 +4,47 @@ NEW .OR $0 .TF lib/libtui.o *-------------------------------------- - .INB inc/macros.i .INB inc/libtui.i *-------------------------------------- - >PSTR "tuiInit" + .PS "tuiInit" .DA #LIBTUI.Init - >PSTR "tuiClose" + .PS "tuiClose" .DA #LIBTUI.Close - >PSTR "tuiNewScrn" + .PS "tuiNewScrn" .DA #LIBTUI.NewScrn - >PSTR "tuiNewDlg" + .PS "tuiNewDlg" .DA #LIBTUI.NewDlg - >PSTR "tuiNewLabel" + .PS "tuiNewLabel" .DA #LIBTUI.NewLabel - >PSTR "tuiNewTLine" + .PS "tuiNewTLine" .DA #LIBTUI.NewTLine - >PSTR "tuiNewTBox" + .PS "tuiNewTBox" .DA #LIBTUI.NewTBox - >PSTR "tuiNewLBox" + .PS "tuiNewLBox" .DA #LIBTUI.NewLBox - >PSTR "tuiNewCBox" + .PS "tuiNewCBox" .DA #LIBTUI.NewCBox - >PSTR "tuiNewBut" + .PS "tuiNewBut" .DA #LIBTUI.NewBut - >PSTR "tuiNewRadio" + .PS "tuiNewRadio" .DA #LIBTUI.NewRadio - >PSTR "tuiExec" + .PS "tuiExec" .DA #LIBTUI.Exec - >PSTR "tuiDestroy" + .PS "tuiDestroy" .DA #LIBTUI.Destroy - >PSTR "tuiRun" + .PS "tuiRun" .DA #LIBTUI.Run - >PSTR "tuiDraw" + .PS "tuiDraw" .DA #LIBTUI.Draw - >PSTR "tuiGetProp" + .PS "tuiGetProp" .DA #LIBTUI.GetProp - >PSTR "tuiSetProp" + .PS "tuiSetProp" .DA #LIBTUI.SetProp - >PSTR "tuiActivate" + .PS "tuiActivate" .DA #LIBTUI.Activate - >PSTR "tuiDeactivate" + .PS "tuiDeactivate" .DA #LIBTUI.Deactivate .DA #0 *-------------------------------------- diff --git a/LIB/LIBTUI.S.txt b/LIB/LIBTUI.S.txt index b9d8cfd2..bca1f52d 100644 --- a/LIB/LIBTUI.S.txt +++ b/LIB/LIBTUI.S.txt @@ -225,8 +225,8 @@ LibCnt .BS 1 hLineBuf .BS 1 LineBuf .BS 2 *-------------------------------------- -ESC.In .AS "DBAC" -ESC.Out .DA #C.BS,#C.LF,#C.VT,#C.FS +ESC.In .AS "DABC" +ESC.Out .DA #C.BS,#C.VT,#C.LF,#C.FS *-------------------------------------- FMT.ESCCSI.R .AZ "%d;%d" *-------------------------------------- @@ -242,45 +242,26 @@ OBJ.COLORS .DA #93,#44 SCRN .DA #92,#100 BUT .DA #93,#0 RADIO *-------------------------------------- -SEQ.INIT .DA #C.ESC - .AS "c" FF - .DA #C.ESC - .AS "[999;999H" Set Cursor Pos to 999,999 - .DA #C.ESC - .AS "[6n" then query Cursor Pos - .DA #C.ESC - .AS "(B" font select - .DA #C.ESC - .AS ")0" font select - .DA #C.ESC - .AS "[?7l" Disable Line Wrap - .DA #C.ESC - .AS "[?25l" Hide Cursor - .DA #0 +SEQ.INIT .CS "\ec\e[999;999H" Set Cursor Pos to 999,999 + .CS "\e[6n" then query Cursor Pos + .CS "\e(B" font select + .CS "\e)0" font select + .CS "\e[?7l" Disable Line Wrap + .CZ "\e[?25l" Hide Cursor *-------------------------------------- -SEQ.GOTOXY .AZ "\e[%d;%dH" +SEQ.GOTOXY .CZ "\e[%d;%dH" *-------------------------------------- -SEQ.COLOR .AZ "\e[%d;%dm" +SEQ.COLOR .CZ "\e[%d;%dm" *-------------------------------------- SEQS .EQ * *-------------------------------------- -SEQ.CURON .DA #C.ESC - .AS "[?25h" Show Cursor - .DA #0 -SEQ.CUROFF .DA #C.ESC - .AS "[?25l" Hide Cursor - .DA #0 +SEQ.CURON .CZ "\e[?25h" Show Cursor +SEQ.CUROFF .CZ "\e[?25l" Hide Cursor *-------------------------------------- -SEQ.BAR .DA #C.ESC - .AS "[1m" BOLD - .DA #C.ESC - .AS "[7m" INVERSE - .DA #C.ESC - .AS "[37;40m" - .DA #0 -SEQ.BAREND .DA #C.ESC - .AS "[0m" - .DA #0 +SEQ.BAR .CS "\e[1m" BOLD + .CS "\e[7m" INVERSE + .CZ "\e[37;40m" +SEQ.BAREND .CZ "\e[0m" *-------------------------------------- SEQ.BORDERTL .DA #C.SO,#'l' .DA #0 @@ -294,22 +275,15 @@ SEQ.BORDERBR .DA #C.SO,#'j',#C.SI * .DA #0 SEQ.BORDERV .DA #C.SO,#'x',#C.SI .DA #0 -SEQ.INVERSE .DA #C.ESC - .AS "[7m" - .DA #0 -SEQ.NORMAL .DA #C.ESC - .AS "[0m" - .DA #0 +SEQ.INVERSE .CZ "\e[7m" +SEQ.NORMAL .CZ "\e[0m" *-------------------------------------- -*SEQ.SCROLLCURUP .AS "\e[?7l\e[%d;%dr" -*SEQ.SCROLLUP .AZ "\eD" -*SEQ.SCROLLCURDN .AS "\e[?7l\e[%d;%dr" -*SEQ.SCROLLDN .AZ "\eM" +*SEQ.SCROLLCURUP .CS "\e[?7l\e[%d;%dr" +*SEQ.SCROLLUP .CZ "\eD" +*SEQ.SCROLLCURDN .CS "\e[?7l\e[%d;%dr" +*SEQ.SCROLLDN .CZ "\eM" *-------------------------------------- -SEQ.CLOSE .DA #C.ESC - .AS "c" - .DA #C.ESC - .AZ "[?7h" Enable Line Wrap +SEQ.CLOSE .CZ "\ec\e[?7h" Enable Line Wrap *-------------------------------------- MAN SAVE usr/src/lib/libtui.s diff --git a/ROOT/make/_files.32MB.txt b/ROOT/make/_files.32MB.txt index 1bed782b..76a3cdd0 100644 --- a/ROOT/make/_files.32MB.txt +++ b/ROOT/make/_files.32MB.txt @@ -43,9 +43,7 @@ bin/ipconfig bin/irc bin/kconfig bin/kill -bin/l bin/lc -bin/lm bin/ls bin/lsdev bin/lsof @@ -153,12 +151,16 @@ inc/xy.mouse.i inc/zp.i include/md5.h include/math.h +include/time.h include/stdio.h include/stdlib.h include/string.h include/unistd.h +include/libblkdev.h include/libtui.h include/sys/types.h +include/sys/stat.h +include/sys/socket.h lib/libblkdev lib/libcifs lib/libcrypt @@ -168,6 +170,7 @@ lib/libpak lib/libtcpip lib/libtui lib/libtui.o +lib/libblkdev.o root/profile root/netd root/netd2 diff --git a/SHARED/X.CPMVRM.S.txt b/SHARED/X.CPMVRM.S.txt index 6acbeb93..2d86989c 100644 --- a/SHARED/X.CPMVRM.S.txt +++ b/SHARED/X.CPMVRM.S.txt @@ -63,13 +63,14 @@ CS.INIT ldy #1 lda (ZPPtr1),y + beq .99 - ldy #OptionVars-OptionList-1 +.20 ldx #OptionVars-OptionList-1 -.2 cmp OptionList,y +.2 cmp OptionList,x beq .3 - dey + dex bpl .2 .99 >PUSHW L.MSG.USAGE @@ -79,9 +80,15 @@ CS.INIT sec rts -.3 ldx OptionVars,y +.3 lda OptionVars,x + tax * sec ror $0,x + + iny + lda (ZPPtr1),y + bne .20 + bra .1 .4 >LDA.G index diff --git a/SHARED/X.SSC.DRV.S.txt b/SHARED/X.SSC.DRV.S.txt index 5e4bf8d4..8f53e6d1 100644 --- a/SHARED/X.SSC.DRV.S.txt +++ b/SHARED/X.SSC.DRV.S.txt @@ -853,7 +853,7 @@ DIB .DO SSCIRQ=1 .DA #S.DIB.S.WRITE+S.DIB.S.READ .FIN .DA #0,#0,#0 - >PSTR "Serial Card/Port" + .PS "Serial Card/Port" .DA #S.DIB.T.CHAR .DA #0 .DA K.VER diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 71a7b1ef..95aea358 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -1213,22 +1213,28 @@ PwdMgrInit >LDYAI MSG.PWD >SYSCALL2 puts >LDYAI PWD.ETCPASSWD - >SYSCALL2 LoadStkObj - bcs .1 + jsr .1 + bcs .9 stx PWD.hUsrDB >STYA PWD.UsrDBSize >LDYAI PWD.ETCGROUP - >SYSCALL2 LoadStkObj - bcs .1 + jsr .1 + bcs .9 stx PWD.hGrpDB >STYA PWD.GrpDBSize -.1 * clc .9 rts + +.1 >PUSHYA + >PUSHBI O.RDONLY + >PUSHBI S.FI.T.TXT + >PUSHWZ Auxtype=0000 + >SYSCALL2 LoadStkObj + rts *-------------------------------------- * Modified CHARGET/CHARGOT for ROM CALL * CHRGET .EQ $B1 - C8 diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 1b72fe0c..1e1ee8f0 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -46,7 +46,7 @@ K.SYSCALL .DA 0 $00 : STAT .DA K.PrintF .DA K.FPrintF .DA K.SPrintF - .DA K.ScanF + .DA K.ScanF .DA K.FScanF .DA K.SScanF @@ -61,9 +61,9 @@ K.SYSCALL .DA 0 $00 : STAT *-------------------------------------- * Bank 2 *-------------------------------------- - .DA K.Mount $60 + .DA K.Mount $60 : MOUNT .DA K.UMount - .DA 0 + .DA K.LoadStkObj $64 : STKOBJ .DA K.GetStkObj .DA K.Shift $68 : ARG .DA K.ArgV @@ -113,9 +113,9 @@ K.SYSCALL .DA 0 $00 : STAT .DA K.StrVGet .DA K.StrVFree .DA K.PutEnv $B8 : ENV - .DA K.SetEnv + .DA K.SetEnv .DA K.GetEnv - .DA K.UnsetEnv + .DA K.UnsetEnv .DA K.Time $C0 : TIME .DA K.StrFTime @@ -151,9 +151,9 @@ K.SYSCALL .DA 0 $00 : STAT .DA K.Realloc .DA K.GetMemPtr .DA K.FreeMem + .DA K.Free .DA K.GetMem K.NewStkObj - .DA K.LoadStkObj .DA K.GetMemPtr K.GetStkObjPtr .DA K.FreeMem K.FreeStkObj *-------------------------------------- @@ -194,15 +194,15 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 .DA #RRAMWRAMBNK1 .DA #0 .DA #RRAMWRAMBNK1 - .DA #0 + .DA #0 - .DA #RRAMWRAMBNK1 $20 + .DA #RRAMWRAMBNK1 $20 : STDIO .DA #0 .DA #RRAMWRAMBNK1 .DA #0 .DA #RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #RRAMWRAMBNK1 .DA #0 .DA #RRAMWRAMBNK1 .DA #0 @@ -219,7 +219,7 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 .DA #0 .DA #RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #RRAMWRAMBNK1 .DA #0 .DA #RRAMWRAMBNK1 .DA #0 @@ -236,7 +236,7 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 .DA #0 .DA #RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #RRAMWRAMBNK1 .DA #0 .DA #RRAMWRAMBNK1 .DA #0 @@ -253,10 +253,10 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 .DA #0 .DA #RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 - .DA #0 .DA #RRAMWRAMBNK1 .DA #0 + .DA #RRAMWRAMBNK1 $58 : PRODOS + .DA #0 .DA #RRAMWRAMBNK1 .DA #0 .DA #RRAMWRAMBNK1 @@ -268,9 +268,9 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 .DA #0 .DA #RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #RRAMWRAMBNK2 $64 : STKOBJ .DA #0 - .DA #RRAMWRAMBNK2 + .DA #RRAMWRAMBNK2 .DA #0 .DA #RRAMWRAMBNK2 $68 : ARG .DA #0 @@ -426,9 +426,9 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 .DA #0 .DA #0 .DA #0 - .DA #$C0 NewStkObj .DA #0 - .DA #RRAMWRAMBNK2 LoadStkObj + .DA #0 + .DA #$C0 NewStkObj .DA #0 .DA #$C0 GetStkObjPtr .DA #0 @@ -494,7 +494,7 @@ K.SYSCALL.JMPX2 clc bcc K.SYSCALL.JMPX >PULLA - + K.SYSCALL.JMPX sta SETREADAUX sta SETWRITEAUX jsr JMPX diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index a9bfaa61..ab40af55 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -327,6 +327,35 @@ MEM.Init0 phx .13 plx rts */-------------------------------------- +* # Free +* Y,A = Ptr To Free +* ## RETURN VALUE +* none. +* (X unmodified) +*\-------------------------------------- +K.Free >STYA ZPMemMgrTmp1 + + ldx Mem.LastSlot + +.1 txa + jsr MEM.GetMemByID + + ldy #S.MEM.PTR + lda (ZPMemMgrSPtr),y + cmp ZPMemMgrTmp1 + bne .2 + + iny + lda (ZPMemMgrSPtr),y + cmp ZPMemMgrTmp1+1 + beq MEM.FreeMem + +.2 dex + bne .1 + + sec + rts +*/-------------------------------------- * # FreeMem * A = hMem To Free * ## RETURN VALUE @@ -355,14 +384,15 @@ K.FreeMem tay beq K.FreeMem.ERR Slot=0, reserved by Kernel cmp Mem.LastSlot - bcc .10 + bcc .1 bne K.FreeMem.ERR -.10 jsr MEM.GetMemByID X,Y unmodified - lda (ZPMemMgrSPtr) In use ? +.1 jsr MEM.GetMemByID X,Y unmodified +*-------------------------------------- +MEM.FreeMem lda (ZPMemMgrSPtr) In use ? bpl K.FreeMem.ERR - + ldy #S.MEM.REFCNT lda (ZPMemMgrSPtr),y dec only one left ? diff --git a/SYS/KERNEL.S.MOUNT.txt b/SYS/KERNEL.S.MOUNT.txt index 11456f7f..117485be 100644 --- a/SYS/KERNEL.S.MOUNT.txt +++ b/SYS/KERNEL.S.MOUNT.txt @@ -54,32 +54,6 @@ K.UMount tax .9 lda #E.INVH sec rts -*/-------------------------------------- -* # GetStkObj -* ## C -* `int *ptr getstkobj (short int hStkObj);` -* ## ASM -* `lda hStkObj` -* `>SYSCALL GetStkObj` -* ## RETURN VALUE -* CC : success -* X = hMem -* Y,A = ptr -* CS : error -* A = EC -*\-------------------------------------- -K.GetStkObj tax hMem for CopyToMain - - jsr MEM.GetMemByID - - ldy #S.MEM.LEN - lda (ZPMemMgrSPtr),y - pha - iny - lda (ZPMemMgrSPtr),y - ply YA = Len - - jmp MEM.CopyToMain *-------------------------------------- MAN SAVE usr/src/sys/kernel.s.mount diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 7e448a73..ed887d0e 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -777,46 +777,6 @@ K.Kill.2 ldy #S.PS.hSession .10 .DA #S.PS.hSS,#S.PS.hDS,#S.PS.hCS .DA #S.PS.hARGV,#S.PS.hCWD */-------------------------------------- -* # LoadStkObj -* Load a file in AUX memory (Stock Objects) -* PUSHW = PATH (Handled by.... -* PUSHB = MODE ... -* PUSHB = TYPE ... -* PUSHW = AUXTYPE ...FOpen) -* ## RETURN VALUE -* Y,A = File Length -* X = hMem of Loaded Object in AUX mem -*\-------------------------------------- -K.LoadStkObj >PUSHYA - >PUSHBI O.RDONLY - >PUSHBI 0 any type... - - jsr K.LoadFile.1 ... ending \0 - bcs .99 - - stx .90+1 - sty .81+1 Save File Len - sta .82+1 - - iny - bne .1 - inc +1 for ending 0 - -.1 jsr MEM.MoveToAux X = AUX hMem - bcs .9 - -.81 ldy #$ff and file len in Y,A -.82 lda #$ff -* clc - rts - -.9 pha -.90 lda #$ff SELF MODIFIED - jsr K.freemem - pla - sec -.99 rts -*/-------------------------------------- * # LoadTxtFile * Load TXT a file in memory (with ending 0) * ## C @@ -832,10 +792,9 @@ K.LoadStkObj >PUSHYA K.LoadTxtFile >PUSHYA >PUSHBI O.RDONLY >PUSHBI S.FI.T.TXT - -K.LoadFile.1 >PUSHWZ Aux type + >PUSHWZ Aux type - sec +K.LoadFile0 sec .HS 90 BCC */-------------------------------------- * # LoadFile diff --git a/SYS/KERNEL.S.SLIST.txt b/SYS/KERNEL.S.SLIST.txt index 0a9ec7c7..717fc02e 100644 --- a/SYS/KERNEL.S.SLIST.txt +++ b/SYS/KERNEL.S.SLIST.txt @@ -20,7 +20,7 @@ K.SListGetData >PULLW ZPSListDataOfs * `>PUSHB hSList` * `>PUSHW KeyID` * `>PUSHW DataPtr` -* `>PUSHW DataLen` +* `>PUSHW DataLen` (Data bytes to add, 0 if String mode) * `>SYSCALL SListAddData` * ## RETURN VALUE *\-------------------------------------- @@ -31,7 +31,7 @@ K.SListAddData * `>PUSHB hSList` * `>PUSHW KeyID` * `>PUSHW DataPtr` -* `>PUSHW DataLen` +* `>PUSHW DataLen` (Data bytes to set, 0 if String mode) * `>SYSCALL SListSetData` * ## RETURN VALUE *\-------------------------------------- diff --git a/SYS/KERNEL.S.SLISTX.txt b/SYS/KERNEL.S.SLISTX.txt index a1bd1488..6917891b 100644 --- a/SYS/KERNEL.S.SLISTX.txt +++ b/SYS/KERNEL.S.SLISTX.txt @@ -97,6 +97,7 @@ SLISTX.GetData jsr SLIST.Select .5 jsr SHARED.FORPNTpn inc ZPSListDataLen bne .2 + inc ZPSListDataLen+1 bra .2 @@ -120,6 +121,8 @@ SLISTX.AddData jsr SLIST.Select jsr SLIST.SkipKey + jsr SLISTX.CheckLen + ldy iByte lda (DBlkPtr),y pha @@ -152,6 +155,7 @@ SLISTX.AddData jsr SLIST.Select .1 inc ZPSListDataLen bne .2 + inc ZPSListDataLen+1 beq .8 @@ -172,6 +176,9 @@ SLISTX.AddData jsr SLIST.Select SLISTX.SetData jsr SLIST.Select jsr SLIST.SkipKey + + jsr SLISTX.CheckLen + jsr SLIST.GetDataLen lda SLIST.DataLen @@ -204,6 +211,38 @@ SLISTX.SetData jsr SLIST.Select sec rts *-------------------------------------- +SLISTX.CheckLen lda ZPSListDataLen + ora ZPSListDataLen+1 + bne .8 + + ldx #0 + ldy #0 + + lda FORPNT+1 + pha + +.1 jsr SHARED.FORPNTgY + beq .2 + + iny + bne .1 + + inx + bra .1 + +.2 iny add Ending \0 + bne .3 + + inx + +.3 sty ZPSListDataLen + stx ZPSListDataLen+1 + + pla + sta FORPNT+1 + +.8 rts +*-------------------------------------- SLISTX.GetByID jsr SLIST.Select jsr BLISTX.GetNByte diff --git a/SYS/KERNEL.S.STKOBJ.txt b/SYS/KERNEL.S.STKOBJ.txt new file mode 100644 index 00000000..5038da21 --- /dev/null +++ b/SYS/KERNEL.S.STKOBJ.txt @@ -0,0 +1,69 @@ +NEW + AUTO 3,1 +*/-------------------------------------- +* # LoadStkObj +* Load a file in AUX memory (Stock Objects) +* PUSHW = PATH (Handled by.... +* PUSHB = MODE ... +* PUSHB = TYPE ... +* PUSHW = AUXTYPE ...FOpen) +* ## RETURN VALUE +* Y,A = File Length +* X = hMem of Loaded Object in AUX mem +*\-------------------------------------- +K.LoadStkObj jsr K.LoadFile0 ... ending \0 + bcs .99 + + stx .90+1 + sty .81+1 Save File Len + sta .82+1 + + iny + bne .1 + inc +1 for ending 0 + +.1 jsr MEM.MoveToAux X = AUX hMem + bcs .9 + +.81 ldy #$ff and file len in Y,A +.82 lda #$ff +* clc + rts + +.9 pha +.90 lda #$ff SELF MODIFIED + jsr K.freemem + pla + sec +.99 rts +*/-------------------------------------- +* # GetStkObj +* ## C +* `int *ptr getstkobj (short int hStkObj);` +* ## ASM +* `lda hStkObj` +* `>SYSCALL GetStkObj` +* ## RETURN VALUE +* CC : success +* X = hMem +* Y,A = ptr +* CS : error +* A = EC +*\-------------------------------------- +K.GetStkObj tax hMem for CopyToMain + + jsr MEM.GetMemByID + + ldy #S.MEM.LEN + lda (ZPMemMgrSPtr),y + pha + iny + lda (ZPMemMgrSPtr),y + ply YA = Len + + jmp MEM.CopyToMain +*-------------------------------------- +MAN +SAVE usr/src/sys/kernel.s.stkobj +LOAD usr/src/sys/kernel.s +ASM diff --git a/SYS/KERNEL.S.TIME.txt b/SYS/KERNEL.S.TIME.txt index 176bf3ed..4864bd2e 100644 --- a/SYS/KERNEL.S.TIME.txt +++ b/SYS/KERNEL.S.TIME.txt @@ -4,7 +4,7 @@ NEW * # Time * Get System Time in Buffer * ## C -* `int time (S.TIME* timer);` +* `void time (struct tm* timeptr);` * ## ASM * `>PUSHW timer` * `>SYSCALL time` @@ -21,7 +21,7 @@ K.Time >PULLW FORPNT * # StrFTime * ## C * Convert S.TIME struct to CSTR -* `void strftime (char* str, const char* format, const struct S.TIME* timeptr );` +* `void strftime (char* str, const char* format, const struct tm* timeptr );` * ## ASM * `>PUSHW str` * `>PUSHW format` @@ -52,7 +52,7 @@ K.StrFTime >PULLW ZPPtr3 S.TIME * # PTime2Time * Convert ProDOS Time To S.TIME * ## C -* `int PTime2Time (long* ptime, S.TIME* timer);` +* `void PTime2Time (long* ptime, const struct tm* timeptr );` * ## ASM * `>PUSHW ptime` * `>PUSHW timer` @@ -68,7 +68,7 @@ K.PTime2Time .EQ K.SYSCALL.JMPX2 * # CTime2Time * Convert CTime Time To S.TIME * ## C -* `int CTime2Time (long* ctime, S.TIME* timer);` +* `void CTime2Time (long* ctime, const struct tm* timeptr );` * ## ASM * `>PUSHW ctime` * `>PUSHW timer` diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 36d2ff1c..44243719 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -93,6 +93,7 @@ D2 .DA #0 D2.B .PH $D000 .DA #RRAMWRAMBNK2 .INB usr/src/sys/kernel.s.mount + .INB usr/src/sys/kernel.s.stkobj .INB usr/src/sys/kernel.s.arg .INB usr/src/sys/kernel.s.error .INB usr/src/sys/kernel.s.stdlib

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 delta 39085 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 G)PDeAHu)6* delta 5133 zcmai24^$IZx}OOlhDZpCXs{|bGZX%X@Tb-Zh*lId2nve&x>ox_3mRS#El|a-ZPHa* zs*JMCK3hu0H)a>>bd4LNR%wmN+q1QV*JEeT`cm;|xBjV5?6W8BbJx~d^X{DqO6@tj zIZ5vK{l4G*=FYvp`{hoYU#Oj5sJ%0k%FLYjI2I^LEiy3gRSZZ-wQ~Aw3BjU>0?RR1 zFEf`^S67y;Dygi%FqIWkVl$N(qTM?&*71OHn&asS68PO1sKByO-!(O*E6dlEVeq9| z0sCHwm1yBdX=M*-t1%rmY5Joy(;As#UR1SwG0di{!(uRAA<^0*S937QQedX)l~tux zHRkG)in3D3i)_SZVHXRfsQ$sN*2X3kw__>TmRu>2=aghgg)vPL6xoUMa8Zmm^ z<1ifi42Lvr9EM%R)yPn=lT_8mR7om4W?)KuViKM*U`%~s9ZnCt`OC{O(`oR|sKBe+ zii)gj?}FY@0RcW|K%m)fM>%9&bQlvHYXkz^1j6_2nDB8s&d2m)BN0-Z(UJIfH^wXb zu^=8!bvuKKaEg_0k+`-qcpn}Nh=1Xa%l_UN>Tn;Psk5%-FG zjE3T;^x;er)%hi0t^-pHm8a^&{fxrTJEjUGygs-F7Ah(4GCoUoG5>-@$~*rlzD)N2 z2Yft*@|t5Ce@-?kBN6!S+-6|f40fgk zezq7qlLAbw!LxpHfLU+w><)M$pSqS4t||g-HH4Q0jbaWm<_Gh{*rw%#^V_b8!6NU3 zOdV52IKOl&FYPjfV}}#Ja}Mv;yu0HKLvWoq5p~c8n?!}6jdOxqKRS=H%k}}sHiH=R zb(_IfS8BJ`u!jAHnM4Xf5pGPpYiG)dy-NvK1>veBT+0Y|;&%zy3SxT& z(NjUFhXOHTIAd76dLFJxtgnKwX6oX+J=H{qeJOlN=8cZT>z*nitP)g~TUEs2!D=Gt z4XZ3ov2gU-fV)efiw(yKylFX+I6?5P1-H7pr^U}Em}0`tJWeok2{yGanYDChD%Lfz z!`(C3SGuV&)8DO;O*(&F6Sk{Y`N|bwP5pDN zo13K&o6Dx4&gJY3)NEj-3v|iN2U0U|ja4Wt{9=Iu7YNV}ylOru**5T7(52=N%MQOw zYK0bX7j$Wb7f_?(^I6M&!uXZkx4{6BX9S~jDqkWPQMQi|@;itqc?av*KOGOUZ|^^k z|B-EZ(}=Gh=y`KtjAJ9o*hxF{9Q@cwB#afL2kK%O8P&yn%Jn1#Hjq(WKttBWd}^F7 zo}?sQw36d=v7MB30XzIu7eXXaCq(jM+uDw0|GZ+;o#T89eUjWwg7K&9VYx| zI}V({yF#ia`~^AI3%q$e4c8a)78|@XtXBR-+3PXz??{%7?~=GSex>YNd97qzN2O{= ze3w5X$K4u>Z-IaPr`?O19teSJfyPGLO?;Z60#un5#2-znM?vw7DO4jcQNT&Lb|M^tDHoFC?m~_Nl6e( z$n8tWo+ad?f>=Vzf~X`P2%?gd1W`fCf~X)54_1=0Am+f)j|pNa87&z^1kZw58>&0Fi6L3s=1?AL_8m$`Iy!MEA9wK6 zh1mf9_6Vq4SS8yAk}2qX7Ii8O(77FTexKnqW@GZTvVE9}RIiL|p>U9li1+xZohl&9s__p6z7dI)}J&_XPuEfW67BqFL# zAS!=O&6KEFwC$*t-m%hfFuTzFhdfZ33D``8)EUZ5)wz*;9upStQn$w;tj%yU`)hLz z`!X!42Z-?-fZr~pty=RhPyJ%;)9cnh^RKqrX9sZ2w|MsvZ9_qMq&;3xz;7*hndnPq zvO+MI?**bA^EDIgxNjSQ7``^tXa%fYA)IfIfmC;v?|GU#Gy-=SG%pu&A~J=Km>)*m zF}`$~OA8Gr-ZAYC=xslk26O*|-Ekzxft@q$3D`R4K!rh}6-Z)3`w&Qldd66x)>5tn z3Oq4ZsG%Y6MD6%Oogf$LMdJ&#RW8)9!%uf&v{19F_N6%HpbAY#EA&coHF=RdPhO2~ zNHw)Lj&f-z*F?${FI8wYWsZ|8w1(QQp?WkwtI(Qgh1NZ+&^oz7CqyfB0<6%wXoa2w zZ(?jiYNiW{= zR+-!ylRLrWo(#S*dS~%UnV2k%Nf$I*L=EZ_3!`1vY#?IvYWh@68r?U6G1_QbT@r%g zA(W1w4EjvcI4l!kSqKA5(!A3^RhoCQ2EN)=DCY#^D`HhrR(0P5ix|_V(%b4(brTTX z0vg%-e=w<}t2eTF-YIw^TjtG3?pr8Mr55F>kEVr=q=%fUqZy$ine0xlCGG8V-V|Op zh=+P2c!zlBdKthJXBCPwsMXtqbT}W$gNf{AuYrJ6TyJw_hde0(D^Q)ccWIZU1QKtb z%?^qGE2P`N2Q1ZJ=g14W@KaBBwtJhCY-#N>sBkd+@| z@xz~2Jy8Jg>$ zxqF2^1I^iK4lCli>EXmLZTx=r+A%_<&+>-(lWhDz7F;KK;ICCdsLM-9uxnug( z+-HScGTkwpc$+WjSBnaMri5N%i{G1>+?(aRhU5yaWqC9Bd=$C#C${OmdDAZy!Y+4g zyh2b~`!Oiap&Rxh@it_#AHA1{FJ%Az9);(yj~zFb7-(@hB>#RC(Ukwb2pF{0m$j~counx2Dd@wIdnkB1M*k=_AqVqx=N*0p1dww{3Kl+6@?!KSL z2I1N#d{|R-FJDk1Gy|f(h@Wv4oQn86dkZpC<7^OrD+(VdKtZm+GOB3Tpc8=S0NeXv zPJC~HeiK(<^|%T)9bnIW_^jGhfVwcf?EF)N8b<3iFv!|ZJpt$Uz^U>vm3dwo`Kij{ zeOBu~n!~7;P_>e#OIDpUbRduM=1n;APfVd(IjqZleDzm52PVM| z$IkY|<7WrnzOW%jzw5QvJKos6r<2*cuj|*{>~H>k|C?|1yxr@9#2fhg8vLVK_~zHo NWZ);xWGISa{~xU`CAI(n diff --git a/BIN/CC.S.CORE.txt b/BIN/CC.S.CORE.txt index faf9ba72..a21aa5ad 100644 --- a/BIN/CC.S.CORE.txt +++ b/BIN/CC.S.CORE.txt @@ -43,7 +43,7 @@ CORE.Init lda #SL._ * clc .9 rts *-------------------------------------- -CORE.Quit jsr CC.FIO.FClose +CORE.Quit jsr FIO.FClose bne CORE.Quit ldy ScopeIdx @@ -77,7 +77,7 @@ CORE.Quit jsr CC.FIO.FClose >LDA.G CC.hSymBuf jsr .7 -.5 jsr CC.SYM.LookupFree +.5 jsr SYM.LookupFree bcc .5 >LDA.G CC.hStack @@ -88,7 +88,8 @@ CORE.Quit jsr CC.FIO.FClose .8 rts *-------------------------------------- -CC.CompileFile >SLEEP +CORE.CompileFile + >SLEEP ldy #S.PS.hStdIn lda (pPS),y @@ -104,22 +105,23 @@ CC.CompileFile >SLEEP cmp #3 Ctrl-C beq .9 -.1 jsr CC.FIO.FGetS +.1 jsr FIO.FGetS bcs .9 - jsr CC.CompileLine + jsr CORE.CompileLine bcs .9 >LDA.G bDebug - bpl CC.CompileFile + bpl CORE.CompileFile jsr PrintDebugMsg - bra CC.CompileFile + bra CORE.CompileFile .9 rts *-------------------------------------- -CC.CompileLine jsr CC.GetCharNB +CORE.CompileLine + jsr CC.GetCharNB bcs .9 cmp #C.CR EOL.... @@ -128,44 +130,45 @@ CC.CompileLine jsr CC.GetCharNB cmp #'#' directive ? bne .1 - jmp CC.DIR + jmp DIR .1 cmp #'/' bne .2 comments ... - jmp CC.Comments + jmp CORE.Comments .2 cmp #'}' End of CPStmt ? bne .3 - jsr CC.GetNextCharNB Skip '}' + jsr CORE.GetNCharNB Skip '}' jsr CC.STMT.CPStmt.END bcs .9 - bra CC.CompileLine + bra CORE.CompileLine .3 cmp #';' End of Stmt ? bne .4 - jsr CC.GetNextCharNB Skip ';' + jsr CORE.GetNCharNB Skip ';' jsr CC.STMT.Stmt.END bcs .9 - bra CC.CompileLine + bra CORE.CompileLine -.4 jsr CC.CompileStmt +.4 jsr CORE.CompileStmt bcs .9 - bra CC.CompileLine + bra CORE.CompileLine .8 clc .9 rts *-------------------------------------- * keyword : for, while .... *-------------------------------------- -CC.CompileStmt >LDYA L.CC.KW +CORE.CompileStmt + >LDYA L.CC.KW jsr CC.LookupID bcs .1 not an internal CC keyword.... @@ -185,31 +188,31 @@ CC.CompileStmt >LDYA L.CC.KW jsr CC.LookupID bcs .3 - jmp CC.DECL + jmp DECL.X *-------------------------------------- * Statement : ++var, var=, func(); *-------------------------------------- -.3 jmp CC.STMT +.3 jmp STMT.Get *-------------------------------------- .99 lda #E.CSYN sec .9 rts *-------------------------------------- -CC.Comments jsr CC.GetNextChar TODO : /* ... */ +CORE.Comments jsr CC.GetNextChar TODO : /* ... */ cmp #'/' bne .90 - jmp CC.SkipLine skip line..... + jmp CORE.SkipLine skip line..... .90 lda #E.CSYN sec rts *-------------------------------------- -CC.SkipLine jsr CC.GetNextChar +CORE.SkipLine jsr CC.GetNextChar bcs .9 cmp #C.CR - bne CC.SkipLine + bne CORE.SkipLine clc @@ -447,44 +450,44 @@ CC.GetIDLen ldy #0 rts *-------------------------------------- CC.GetCharNB jsr CC.GetChar - bcs CC.GetNextCharNB.RTS + bcs CORE.GetNCharNB.RTS jsr CC.CheckCharNB - bcc CC.GetNextCharNB.RTS + bcc CORE.GetNCharNB.RTS *-------------------------------------- -CC.GetNextCharNB - jsr CC.GetNextChar - bcs CC.GetNextCharNB.RTS +CORE.GetNCharNB jsr CC.GetNextChar + bcs CORE.GetNCharNB.RTS jsr CC.CheckCharNB - bcs CC.GetNextCharNB + bcs CORE.GetNCharNB -CC.GetNextCharNB.RTS +CORE.GetNCharNB.RTS rts *-------------------------------------- -CC.GetCharNBNL jsr CC.GetChar - bcs CC.GetNextCharNB.RTS +CORE.GetCharNBNL + jsr CC.GetChar + bcs CORE.GetNCharNB.RTS jsr CC.CheckCharNB - bcs CC.GetNextCharNBNL + bcs CORE.GetNCharNBNL cmp #C.CR clc - bne CC.GetNextCharNB.RTS + bne CORE.GetNCharNB.RTS - jsr CC.FIO.FGetS - bcs CC.GetNextCharNB.RTS + jsr FIO.FGetS + bcs CORE.GetNCharNB.RTS *-------------------------------------- -CC.GetNextCharNBNL - jsr CC.GetNextCharNB - bcs CC.GetNextCharNB.RTS +CORE.GetNCharNBNL + jsr CORE.GetNCharNB + bcs .9 cmp #C.CR clc bne .9 - jsr CC.FIO.FGetS - bcc CC.GetNextCharNBNL + jsr FIO.FGetS + bcc CORE.GetCharNBNL .9 rts *-------------------------------------- @@ -494,7 +497,7 @@ CC.CheckSpace jsr CC.GetChar cmp #C.SPACE bne .90 - jsr CC.GetNextCharNB + jsr CORE.GetNCharNB bcc .99 .90 lda #E.CSYN diff --git a/BIN/CC.S.DECL.txt b/BIN/CC.S.DECL.txt index 9b557a63..76c5631a 100644 --- a/BIN/CC.S.DECL.txt +++ b/BIN/CC.S.DECL.txt @@ -1,16 +1,15 @@ NEW AUTO 3,1 *-------------------------------------- -CC.SCSPEC.AUTO -CC.SCSPEC.REGISTER -CC.SCSPEC.STATIC -CC.SCSPEC.EXTERN +DECL.AUTO +DECL.REGISTER +DECL.STATIC +DECL.EXTERN .98 lda #E.CSYN sec .99 rts *-------------------------------------- -CC.SCSPEC.TYPEDEF - jsr CC.GetNextCharNB +DECL.TYPEDEF jsr CORE.GetNCharNB bcs .98 >LDYA L.CC.TYPEQUAL @@ -20,12 +19,12 @@ CC.SCSPEC.TYPEDEF cpx #4 no const nor volatile bcc .98 - jsr CC.TYPE.Decl + jsr TYPE.GetTQInYA bcs .99 ldx #SYM.SC.TYPEDEF sec Reset Buffer - jsr CC.SYM.New Y,A=T/Q,storage class TYPEDEF + jsr SYM.New Y,A=T/Q,storage class TYPEDEF bcs .99 jsr CC.GetCharNB @@ -34,24 +33,63 @@ CC.SCSPEC.TYPEDEF cmp #';' bne .98 - jsr CC.GetNextCharNB skip ';' + jsr CORE.GetNCharNB skip ';' - jmp CC.SYM.Store + jmp SYM.Store .98 lda #E.CSYN sec .99 -CC.SCSPEC.TYPEDEF.RTS +DECL.TYPEDEF.RTS rts *-------------------------------------- * X = type qual *-------------------------------------- -CC.DECL jsr CC.TYPE.Decl - bcs CC.SCSPEC.TYPEDEF.RTS +DECL.X jsr TYPE.GetTQInYA + bcs .99 + + cpy #SYM.T.SU + bne .7 - sec Reset Buffer + tax save Q + jsr CC.GetCharNB + bcs .98 + + cmp #';' from a tag def + beq .8 -CC.DECL.YAC ldx #SYM.SC.STATIC Y,A = Type/Qual + jsr CC.IsLetter + bcs .98 +* >DEBUG +.1 clc reuse buffer + ldy #SYM.T.SU + txa restore Q + jsr DECL.YAC + bcs .99 + + jsr CC.GetCharNB + bcs .98 + + cmp #',' + bne .2 + + jsr CORE.GetNCharNBNL + bcc .1 + bcs .98 + +.2 cmp #';' TODO: struct initalizers + bne .98 + +.8 clc + rts + +.98 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +.7 sec Reset Buffer + +DECL.YAC ldx #SYM.SC.STATIC Y,A = Type/Qual bit bLocalScope bpl .25 @@ -60,7 +98,7 @@ CC.DECL.YAC ldx #SYM.SC.STATIC Y,A = Type/Qual ldx #SYM.SC.AUTO -.25 jsr CC.SYM.New Y,A=T/Q, add with undef value... +.25 jsr SYM.New Y,A=T/Q, X=SC, C=clear/reuse bcs .98 OOM or DUP .22 jsr CC.GetCharNB @@ -72,31 +110,31 @@ CC.DECL.YAC ldx #SYM.SC.STATIC Y,A = Type/Qual cmp #'{' bne .26 - jsr CC.GetNextCharNB skip '{' + jsr CORE.GetNCharNB skip '{' bcs .98 - jmp CC.SYM.StoreF + jmp SYM.StoreF *-------------------------------------- * Initializer *-------------------------------------- .26 cmp #'=' type var = value ? bne .98 - jsr CC.GetNextCharNB skip '=' + jsr CORE.GetNCharNB skip '=' bcs .98 - jsr CC.SYM.GetTypeInYA expected T/Q - jsr CC.EXP.Eval + jsr SYM.GetTypeInYA expected T/Q + jsr EXP.Eval bcs .99 - jsr CC.SYM.GetAddr1 + jsr SYM.GetAddr1 bcs .99 - jsr CC.SYM.GetTypeInYA Y,A = T/Q - jsr CC.SYM.PopValue Set value to this var + jsr SYM.GetTypeInYA Y,A = T/Q + jsr SYM.PopValue Set value to this var .29 bcs .99 -.28 jsr CC.SYM.Store +.28 jsr SYM.Store bcs .99 jsr CC.GetCharNB diff --git a/BIN/CC.S.DIR.txt b/BIN/CC.S.DIR.txt index c1c5acd9..14ec7d15 100644 --- a/BIN/CC.S.DIR.txt +++ b/BIN/CC.S.DIR.txt @@ -1,15 +1,10 @@ NEW AUTO 3,1 *-------------------------------------- -CC.DIR jsr CC.GetNextCharNB - bcs .99 +DIR jsr CORE.GetNCharNB + bcs .91 - cmp #'!' #!/bin/cc - bne .1 - - jmp CC.SkipLine - -.1 >LDYA L.CC.DIRS + >LDYA L.CC.DIRS jsr CC.LookupID bcs .91 @@ -19,7 +14,7 @@ CC.DIR jsr CC.GetNextCharNB sec .99 rts *-------------------------------------- -CC.DIR.DEFINE clc +DIR.DEFINE clc bit bPass2 bmi .8 @@ -31,7 +26,7 @@ CC.DIR.DEFINE clc ldx #SYM.SC.DEFINE >LDA.G CC.hDefines - jsr CC.SYM.NewKey + jsr SYM.NewKey bcs .99 >STYA ZPPtr1 SymID @@ -67,13 +62,13 @@ CC.DIR.DEFINE clc >SYSCALL SListAddData bcs .99 -.8 jmp CC.SkipLine +.8 jmp CORE.SkipLine .90 lda #E.CSYN sec .99 rts *-------------------------------------- -CC.DIR.INCLUDE lda #0 >STZ.G PathBuf +DIR.INCLUDE lda #0 >STZ.G PathBuf sta (pData) jsr CC.CheckSpace @@ -134,7 +129,10 @@ CC.DIR.INCLUDE lda #0 >STZ.G PathBuf rts .5 >LDYA pData - jmp CC.FIO.FOpen + jmp FIO.FOpen +*-------------------------------------- +DIR.IFDEF +DIR.IFNDEF *-------------------------------------- MAN SAVE usr/src/bin/cc.s.dir diff --git a/BIN/CC.S.EXP.txt b/BIN/CC.S.EXP.txt index 6aefe23d..ab0c7812 100644 --- a/BIN/CC.S.EXP.txt +++ b/BIN/CC.S.EXP.txt @@ -7,10 +7,10 @@ NEW * CS, A = EC * CC, Y,A = type/qual *-------------------------------------- -CC.EXP.Eval00 lda #0 +EXP.Eval00 lda #0 tay -CC.EXP.Eval ldx ZPPtr1 local : returned T/Q +EXP.Eval ldx ZPPtr1 local : returned T/Q phx ldx ZPPtr1+1 phx @@ -40,20 +40,20 @@ CC.EXP.Eval ldx ZPPtr1 local : returned T/Q cmp #'(' bne .20 - jsr CC.GetNextCharNB skip ( + jsr CORE.GetNCharNB skip ( bcs .19 >LDYA L.CC.TYPEQUAL jsr CC.LookupID bcs .12 - jsr CC.EXP.Cast + jsr EXP.Cast bcs .19 bra .20 *-------------------------------------- .12 >LDYA ZPPtr2 expected T/Q - jsr CC.EXP.Eval + jsr EXP.Eval bcs .19 >STYA ZPPtr2 update T/Q @@ -64,10 +64,10 @@ CC.EXP.Eval ldx ZPPtr1 local : returned T/Q cmp #')' bne .19 - jsr CC.GetNextCharNB skip ) + jsr CORE.GetNCharNB skip ) bcc .31 -.19 jmp CC.EXP.Eval.ESYN +.19 jmp EXP.Eval.ESYN *-------------------------------------- .20 >LDYA L.CC.PREOPS jsr CC.LookupOP @@ -82,7 +82,7 @@ CC.EXP.Eval ldx ZPPtr1 local : returned T/Q jsr CC.GetDefine bcc .10 - jsr CC.SYM.Lookup + jsr SYM.Lookup bcs .22 ldy #SYM.Q @@ -90,21 +90,21 @@ CC.EXP.Eval ldx ZPPtr1 local : returned T/Q and #SYM.Q.FUNC bne .21 - jsr CC.EXP.GetVar Check T/Q & Get value on stack + jsr EXP.GetVar Check T/Q & Get value on stack bcs .29 - jsr CC.SYM.LookupFree + jsr SYM.LookupFree bra .30 *-------------------------------------- .21 >LDYA ZPPtr2 get expected T/Q - jsr CC.F.CallRetV + jsr F.CallRetV bcs .29 >STYA ZPPtr2 store real T/Q - jsr CC.SYM.LookupFree + jsr SYM.LookupFree bra .30 *-------------------------------------- @@ -118,7 +118,7 @@ CC.EXP.Eval ldx ZPPtr1 local : returned T/Q sty ZPPtr2 stz ZPPtr2+1 Q -.23 jsr CC.EXP.GetNum +.23 jsr EXP.GetNum bcs .29 bra .30 @@ -126,29 +126,29 @@ CC.EXP.Eval ldx ZPPtr1 local : returned T/Q .24 cmp #''' bne .25 - jsr CC.EXP.GetChar + jsr EXP.GetChar bcs .29 bra .30 .25 cmp #'"' String literal - bne CC.EXP.Eval.ESYN + bne EXP.Eval.ESYN - jsr CC.EXP.AddConstCharP -.29 bcs CC.EXP.Eval.Err + jsr EXP.AddConstCharP +.29 bcs EXP.Eval.Err *-------------------------------------- .30 jsr CC.GetCharNB - bcs CC.EXP.Eval.ESYN + bcs EXP.Eval.ESYN .31 jsr CC.IsEndArg , ; ) ? : - bcc CC.EXP.Eval.End + bcc EXP.Eval.End jsr CC.IsOPChar - bcs CC.EXP.Eval.ESYN + bcs EXP.Eval.ESYN >LDYA L.CC.BOPS we are at V1 op1 V2 op2... jsr CC.LookupOP - bcs CC.EXP.Eval.ESYN + bcs EXP.Eval.ESYN stx ZPPtr3 save OP(n) @@ -159,10 +159,10 @@ CC.EXP.Eval ldx ZPPtr1 local : returned T/Q bcc .38 OP(n) has precedence, on stack : V1,V2 >LDYA ZPPtr2 OP(n-1) has precedence... - jsr CC.EXP.BOPS compute V(n-1) V(n) + jsr EXP.BOPS compute V(n-1) V(n) bcc .33 - bcs CC.EXP.Eval.Err + bcs EXP.Eval.Err .38 phx push back OP(n-1) @@ -171,28 +171,25 @@ CC.EXP.Eval ldx ZPPtr1 local : returned T/Q jmp .10 go check for next token *-------------------------------------- -CC.EXP.Eval.End plx any OP on stack ? - bmi CC.EXP.Eval.Exit +EXP.Eval.End plx any OP on stack ? + bmi EXP.Eval.Exit >LDYA ZPPtr2 Var Type - jsr CC.EXP.BOPS - bcc CC.EXP.Eval.End + jsr EXP.BOPS + bcc EXP.Eval.End - bra CC.EXP.Eval.Err + bra EXP.Eval.Err *-------------------------------------- -CC.EXP.Eval.ESYN - lda #E.ESYN +EXP.Eval.ESYN lda #E.ESYN -CC.EXP.Eval.Err - plx - bpl CC.EXP.Eval.Err +EXP.Eval.Err plx + bpl EXP.Eval.Err sec - bra CC.EXP.Eval.ExitErr + bra EXP.Eval.ExitErr *-------------------------------------- -CC.EXP.Eval.Exit - lda ZPPtr1+1 +EXP.Eval.Exit lda ZPPtr1+1 ldy ZPPtr1 bne .1 @@ -201,7 +198,7 @@ CC.EXP.Eval.Exit .1 and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL clc -CC.EXP.Eval.ExitErr +EXP.Eval.ExitErr plx stx ZPPtr3+1 plx @@ -219,7 +216,7 @@ CC.EXP.Eval.ExitErr rts *-------------------------------------- -CC.EXP.Cast jsr CC.TYPE.Decl +EXP.Cast jsr TYPE.GetTQInYA bcs .99 >STYA ZPPtr1 @@ -230,7 +227,7 @@ CC.EXP.Cast jsr CC.TYPE.Decl cmp #')' bne .9 - jsr CC.GetNextCharNB skip ) + jsr CORE.GetNCharNB skip ) clc rts @@ -241,7 +238,7 @@ CC.EXP.Cast jsr CC.TYPE.Decl *-------------------------------------- * Y,A = Type/Qual, X = OP *-------------------------------------- -CC.EXP.BOPS bit #SYM.Q.PPPOINTER +EXP.BOPS bit #SYM.Q.PPPOINTER beq .10 ldy #SYM.T.UINT @@ -275,7 +272,7 @@ CC.EXP.BOPS bit #SYM.Q.PPPOINTER clc rts *-------------------------------------- -CC.EXP.IntConst >PUSHW ZPLineBufPtr +EXP.IntConst >PUSHW ZPLineBufPtr >PUSHWI ZPLineBufPtr >PUSHBI 10 >SYSCALL StrToUL @@ -290,7 +287,7 @@ CC.EXP.IntConst >PUSHW ZPLineBufPtr rts *-------------------------------------- -CC.EXP.GetNum cpy #SYM.T.FLOAT +EXP.GetNum cpy #SYM.T.FLOAT bcc .1 beq .11 @@ -352,7 +349,7 @@ CC.EXP.GetNum cpy #SYM.T.FLOAT * https://riptutorial.com/c/example/16255/character-literals * 'c', '\n', '\123', '\xAB' *-------------------------------------- -CC.EXP.GetChar ldy ZPPtr2+1 +EXP.GetChar ldy ZPPtr2+1 bne .9 lda ZPPtr2 @@ -374,7 +371,7 @@ CC.EXP.GetChar ldy ZPPtr2+1 cmp #''' bne .9 - jsr CC.GetNextCharNB skip ' + jsr CORE.GetNCharNB skip ' clc @@ -384,7 +381,7 @@ CC.EXP.GetChar ldy ZPPtr2+1 sec .99 rts *-------------------------------------- -CC.EXP.AddConstCharP +EXP.AddConstCharP lda ZPCCConst ldx ZPCCConst+1 @@ -415,7 +412,7 @@ CC.EXP.AddConstCharP bra .1 -.3 jsr CC.GetNextCharNBNL Skip " +.3 jsr CORE.GetNCharNBNL Skip " bcs .8 cmp #'"' @@ -434,13 +431,13 @@ CC.EXP.AddConstCharP * ZPPtr2 = expected T/Q * ZPPtr3+1 = PREOPS *-------------------------------------- -CC.EXP.GetVar stz ExpState +EXP.GetVar stz ExpState - jsr CC.EXP.POSTOPS var++, var[0]... ? + jsr EXP.POSTOPS var++, var[0]... ? bcs .99 ldx ZPPtr3+1 preop &, * ... - jsr CC.EXP.PREOPS + jsr EXP.PREOPS bcs .99 lda ExpState @@ -453,7 +450,7 @@ CC.EXP.GetVar stz ExpState asl bmi .6 AonStack - jsr CC.EXP.GetAddr2 + jsr EXP.GetAddr2 bcs .99 bra .7 @@ -462,16 +459,16 @@ CC.EXP.GetVar stz ExpState jsr CODE.EmitPCC bcs .99 -.7 jsr CC.EXP.PushValue +.7 jsr EXP.PushValue bcs .99 -.8 jmp CC.SYM.LookupCheckTQ +.8 jmp SYM.LookupCheckTQ .99 rts *-------------------------------------- * POSTOPS *-------------------------------------- -CC.EXP.POSTOPS >LDYA L.CC.POSTOPS +EXP.POSTOPS >LDYA L.CC.POSTOPS jsr CC.LookupOP bcs .8 @@ -480,11 +477,11 @@ CC.EXP.POSTOPS >LDYA L.CC.POSTOPS .8 clc rts *-------------------------------------- -CC.EXP.postinc lda ExpState +EXP.postinc lda ExpState bit #ExpState.AinPTR bne .1 - jsr CC.EXP.GetAddr2 + jsr EXP.GetAddr2 bcs .99 lda #ExpState.AinPTR @@ -524,11 +521,11 @@ CC.EXP.postinc lda ExpState sec .99 rts *-------------------------------------- -CC.EXP.postdec lda ExpState +EXP.postdec lda ExpState bit #ExpState.AinPTR bne .1 - jsr CC.EXP.GetAddr2 + jsr EXP.GetAddr2 bcs .99 lda #ExpState.AinPTR @@ -568,11 +565,11 @@ CC.EXP.postdec lda ExpState sec .99 rts *-------------------------------------- -CC.EXP.Idx ldy #SYM.Q +EXP.Idx ldy #SYM.Q lda (ZPLookupSymPtr),y bit #SYM.Q.AAARRAY - bne CC.EXP.array + bne EXP.array and #SYM.Q.PPPOINTER cmp #SYM.Q.POINTER @@ -582,17 +579,17 @@ CC.EXP.Idx ldy #SYM.Q eor #SYM.Q.POINTER+SYM.Q.ARRAY sta (ZPLookupSymPtr),y convert from *type to type[] - jsr CC.EXP.GetAddr2 + jsr EXP.GetAddr2 bcs .99 >LDYA L.PCC.PushDeref2 jsr CODE.EmitPCC bcs .99 - jsr CC.EXP.array.getIdx ...int16 on stack... + jsr EXP.array.getIdx ...int16 on stack... bcs .99 - jsr CC.EXP.GetSymSizeOfInAXC + jsr EXP.GetSymSizeOfInAXC cmp #1 bne .1 @@ -616,7 +613,7 @@ CC.EXP.Idx ldy #SYM.Q cmp #']' bne .97 - jsr CC.GetNextCharNB skip ']' + jsr CORE.GetNCharNB skip ']' lda #ExpState.AonStack sta ExpState @@ -632,28 +629,28 @@ CC.EXP.Idx ldy #SYM.Q sec .99 rts *-------------------------------------- -CC.EXP.array ldy #SYM.Def +EXP.array ldy #SYM.Def lda (ZPLookupSymPtr),y iny ora (ZPLookupSymPtr),y beq .1 * jsr CODE.DEBUG - jsr CC.EXP.PushAddr array[int]... + jsr EXP.PushAddr array[int]... bcc .2 rts -.1 jsr CC.EXP.GetAddr2 array[]...it is a * +.1 jsr EXP.GetAddr2 array[]...it is a * bcs .9 >LDYA L.PCC.PushDeref2 jsr CODE.EmitPCC bcs .9 -.2 jsr CC.EXP.array.getIdx ...int16 on stack... +.2 jsr EXP.array.getIdx ...int16 on stack... bcs .9 - jsr CC.EXP.GetSymSizeOfInAXC + jsr EXP.GetSymSizeOfInAXC jsr CODE.PUSHAXI ...sizeof on stack... bcs .9 @@ -665,13 +662,13 @@ CC.EXP.array ldy #SYM.Def jsr CODE.FPUCALL ...add to base address bcs .9 -.3 jsr CC.GetNextCharNB skip ']' +.3 jsr CORE.GetNCharNB skip ']' bcs .98 cmp #'[' bne .8 - jsr CC.GetNextCharNB skip '[' + jsr CORE.GetNCharNB skip '[' bcs .98 ldy #SYM.Q @@ -679,7 +676,7 @@ CC.EXP.array ldy #SYM.Def and #SYM.Q.AAARRAY .39 beq .99 - jsr CC.EXP.array.getIdx ...int16 on stack... + jsr EXP.array.getIdx ...int16 on stack... bcs .9 ldy #SYM.Def+3 @@ -692,7 +689,7 @@ CC.EXP.array ldy #SYM.Def ldx #FPU.wMUL jsr CODE.FPUCALL [][SIZE] * int16 on stack - jsr CC.EXP.GetSymSizeOfInAXC + jsr EXP.GetSymSizeOfInAXC jsr CODE.PUSHAXI ...sizeof on stack... bcs .9 @@ -703,7 +700,7 @@ CC.EXP.array ldy #SYM.Def jsr CODE.FPUCALL ...add to base address bcs .9 - jsr CC.GetNextCharNB skip ']' + jsr CORE.GetNCharNB skip ']' bcs .98 @@ -723,11 +720,11 @@ CC.EXP.array ldy #SYM.Def sec .9 rts *-------------------------------------- -CC.EXP.array.getIdx +EXP.array.getIdx ldy #SYM.T.SINT lda #0 - jsr CC.EXP.Eval + jsr EXP.Eval bcs .9 jsr CC.GetCharNB @@ -749,7 +746,7 @@ CC.EXP.array.getIdx sec .9 rts *-------------------------------------- -CC.EXP.SU lda (ZPLookupSymPtr) +EXP.SU lda (ZPLookupSymPtr) cmp #SYM.T.SU bne .97 @@ -764,7 +761,7 @@ CC.EXP.SU lda (ZPLookupSymPtr) jsr CC.IsLetter bcs .98 - jsr CC.EXP.SU.GetF + jsr EXP.SU.GetF bcs .98 jsr CC.SkipX @@ -789,7 +786,7 @@ CC.EXP.SU lda (ZPLookupSymPtr) ply iny - lda (ZPLookupSymPtr),y SU.F.O + lda (ZPLookupSymPtr),y SU.F.O+1 ldy #SYM.Addr+1 adc (ZPLookupSymPtr),y sta (ZPLookupSymPtr),y @@ -805,11 +802,11 @@ CC.EXP.SU lda (ZPLookupSymPtr) sec .99 rts *-------------------------------------- -CC.EXP.pSU lda #E.ESYN +EXP.pSU lda #E.ESYN sec rts *-------------------------------------- -CC.EXP.SU.GetF jsr CC.GetIDLen +EXP.SU.GetF jsr CC.GetIDLen tya tax @@ -875,27 +872,27 @@ CC.EXP.SU.GetF jsr CC.GetIDLen *-------------------------------------- * PREOPS *-------------------------------------- -CC.EXP.PREOPS bmi .8 +EXP.PREOPS bmi .8 jmp (J.CC.PREOPS,x) .8 clc rts *-------------------------------------- -CC.EXP.Ref ldy #SYM.Q +EXP.Ref ldy #SYM.Q lda (ZPLookupSymPtr),y clc adc #SYM.Q.POINTER bcs .9 more than *** - and #%11001111 +* and #%11001111 sta (ZPLookupSymPtr),y bit ExpState bvs .8 - jsr CC.EXP.PushAddr + jsr EXP.PushAddr bcs .99 .8 lda #ExpState.VonStack @@ -908,7 +905,7 @@ CC.EXP.Ref ldy #SYM.Q * sec .99 rts *-------------------------------------- -CC.EXP.Deref ldy #SYM.Q +EXP.Deref ldy #SYM.Q lda (ZPLookupSymPtr),y bit #SYM.Q.PPPOINTER beq .9 @@ -917,7 +914,7 @@ CC.EXP.Deref ldy #SYM.Q sbc #SYM.Q.POINTER sta (ZPLookupSymPtr),y - jsr CC.EXP.GetAddr2 + jsr EXP.GetAddr2 bcs .99 >LDYA L.PCC.Deref2 @@ -934,43 +931,43 @@ CC.EXP.Deref ldy #SYM.Q sec .99 rts *-------------------------------------- -CC.EXP.Abs +EXP.Abs clc .99 rts *-------------------------------------- -CC.EXP.negate +EXP.negate clc .99 rts *-------------------------------------- -CC.EXP.lnot +EXP.lnot clc .99 rts *-------------------------------------- -CC.EXP.bnot +EXP.bnot clc .99 rts *-------------------------------------- -CC.EXP.preinc +EXP.preinc clc .99 rts *-------------------------------------- -CC.EXP.predec +EXP.predec clc .99 rts *-------------------------------------- -CC.EXP.PushAddr ldy #SYM.SC +EXP.PushAddr ldy #SYM.SC lda (ZPLookupSymPtr),y beq .1 SYM.SC.STATIC * LOCAL @@ -1014,7 +1011,7 @@ CC.EXP.PushAddr ldy #SYM.SC .9 rts *-------------------------------------- -CC.EXP.GetAddr1 ldy #SYM.SC +EXP.GetAddr1 ldy #SYM.SC lda (ZPLookupSymPtr),y beq .1 SYM.SC.STATIC * LOCAL @@ -1052,7 +1049,7 @@ CC.EXP.GetAddr1 ldy #SYM.SC .9 rts *-------------------------------------- -CC.EXP.GetAddr2 ldy #SYM.SC +EXP.GetAddr2 ldy #SYM.SC lda (ZPLookupSymPtr),y beq .1 SYM.SC.STATIC * LOCAL @@ -1090,8 +1087,7 @@ CC.EXP.GetAddr2 ldy #SYM.SC .9 rts *-------------------------------------- -CC.EXP.PushValue - jsr CC.EXP.GetSymSizeOfInAXC +EXP.PushValue jsr EXP.GetSymSizeOfInAXC tay dey bne .1 @@ -1115,7 +1111,7 @@ CC.EXP.PushValue *-------------------------------------- * out : A,X,C = size *-------------------------------------- -CC.EXP.GetSymSizeOfInAXC +EXP.GetSymSizeOfInAXC ldy #SYM.Q lda (ZPLookupSymPtr),y pha @@ -1123,7 +1119,7 @@ CC.EXP.GetSymSizeOfInAXC tay pla -CC.EXP.GetYASizeOfInAXC +EXP.GetYASizeOfInAXC bit #SYM.Q.PPPOINTER+SYM.Q.AAARRAY bne .1 diff --git a/BIN/CC.S.F.txt b/BIN/CC.S.F.txt index 1e45a58e..a01affd6 100644 --- a/BIN/CC.S.F.txt +++ b/BIN/CC.S.F.txt @@ -1,7 +1,7 @@ NEW AUTO 3,1 *-------------------------------------- -CC.F.Decl stz LocalPtr +F.Decl stz LocalPtr jsr CC.PushTQ push T/Q for RETURN bcs .99 @@ -10,21 +10,21 @@ CC.F.Decl stz LocalPtr jsr CC.STMT.CPStmt.NEW bcs .99 - jsr CC.SYM.NewScope + jsr SYM.NewScope bcs .99 - jsr CC.GetNextCharNB Skip ( + jsr CORE.GetNCharNB Skip ( bcs .9 cmp #')' func() beq .6 *-------------------------------------- -.1 jsr CC.F.DeclGetTQ +.1 jsr F.DeclGetTQ bcs .99 >STYA ZPPtr2 Save T/Q - jsr CC.SYM.AddWord + jsr SYM.AddWord bcs .99 jsr CC.GetCharNB @@ -33,7 +33,7 @@ CC.F.Decl stz LocalPtr jsr CC.IsLetter bcs .2 - jsr CC.F.NewArg + jsr F.NewArg bcs .99 jsr CC.GetCharNB @@ -45,24 +45,24 @@ CC.F.Decl stz LocalPtr cmp #',' bne .9 - jsr CC.GetNextCharNB Skip , + jsr CORE.GetNCharNB Skip , bcc .1 .9 lda #E.CSYN sec .99 rts *-------------------------------------- -.6 jsr CC.SYM.Add0000 definition End +.6 jsr SYM.Add0000 definition End bcs .99 - jsr CC.GetNextCharNBNL Skip ) + jsr CORE.GetNCharNBNL Skip ')' bcs .9 cmp #';' bne .7 - jsr CC.SYM.FreeScope discard local scope - + jsr SYM.FreeScope discard local scope + lda CStackPtr clc adc #8 @@ -87,7 +87,7 @@ CC.F.Decl stz LocalPtr .8 >LDYA ZPCCCode f() Code starts HERE - jsr CC.SYM.SetAddrYA + jsr SYM.SetAddrYA lda LocalPtr jsr CODE.LDAI A = f() ARGS size @@ -96,7 +96,7 @@ CC.F.Decl stz LocalPtr >LDYA L.PCC.ENTER jmp CODE.EmitPCC Store f() Declaration / Start Definition *-------------------------------------- -CC.F.DeclGetTQ lda (ZPLineBufPtr) +F.DeclGetTQ lda (ZPLineBufPtr) cmp #'.' bne .5 @@ -111,7 +111,7 @@ CC.F.DeclGetTQ lda (ZPLineBufPtr) dex bne .1 - jsr CC.GetNextCharNB + jsr CORE.GetNCharNB bcs .9 eor #')' @@ -122,23 +122,27 @@ CC.F.DeclGetTQ lda (ZPLineBufPtr) * clc rts *-------------------------------------- -.5 >LDYA L.CC.TYPEQUAL +.5 jsr SYM.Lookup var or func() ? + bcs .6 + + ldy #SYM.SC + lda (ZPLookupSymPtr),y + cmp #SYM.SC.TYPEDEF + bne .9 + + jmp TYPE.GetTQInYA2 + +.6 >LDYA L.CC.TYPEQUAL jsr CC.LookupID bcs .9 - jsr CC.TYPE.Decl - bcs .9 - -* Y,A = Type/Qual - - bra .8 + jmp TYPE.GetTQInYA .9 lda #E.CSYN sec - -.8 rts + rts *-------------------------------------- -CC.F.NewArg >LDYA.G CC.SymID +F.NewArg >LDYA.G CC.SymID >STYA.G CC.SymIDSave >LEA.G CC.ArgBuf @@ -147,10 +151,10 @@ CC.F.NewArg >LDYA.G CC.SymID >LDYA ZPPtr2 ldx #SYM.SC.AUTO sec Reset Buffer - jsr CC.SYM.New + jsr SYM.New bcs .9 - jsr CC.SYM.StoreL Store f() Args in Local scope + jsr SYM.StoreL Store f() Args in Local scope bcs .9 >LDA.G CC.hSymBuf @@ -162,11 +166,11 @@ CC.F.NewArg >LDYA.G CC.SymID .9 rts *-------------------------------------- -CC.F.Def.END >LDYA L.PCC.LEAVE +F.Def.END >LDYA L.PCC.LEAVE jsr CODE.EmitPCC bcs .9 - jsr CC.SYM.FreeScope + jsr SYM.FreeScope stz LocalPtr back to global @@ -177,11 +181,11 @@ CC.F.Def.END >LDYA L.PCC.LEAVE * in : ZPSymPtr * Y,A = Expected T/Q *-------------------------------------- -CC.F.CallNoRetV ldy #0 no expected T/Q +F.CallNoRetV ldy #0 no expected T/Q tya clc .HS B0 BCS -CC.F.CallRetV sec +F.CallRetV sec ldx ZPPtr1 local : variadic size phx @@ -202,13 +206,13 @@ CC.F.CallRetV sec * lda (ZPLookupSymPtr),y * beq .20 SYS/LIB/FPU call, no ret value space - jsr CC.EXP.GetSymSizeOfInAXC + jsr EXP.GetSymSizeOfInAXC jsr CODE.nAddLocal - -.20 jsr CC.GetNextCharNB skip '(' +* >DEBUG +.20 jsr CORE.GetNCharNB skip '(' bcs .90 - jsr CC.SYM.LookupCheckTQ + jsr SYM.LookupCheckTQ bcs .93 *-------------------------------------- stz ZPPtr1 Reset VARIADIC byte count @@ -216,7 +220,7 @@ CC.F.CallRetV sec lda #SYM.Def >STA.G CC.LookupSymPtr - jsr CC.F.GetTQ get First Arg T/Q + jsr F.GetTQ get First Arg T/Q beq .7 end of list, go check ending ')' .3 cpy #SYM.T.VARIADIC @@ -227,13 +231,13 @@ CC.F.CallRetV sec .4 and #$F0 CONST+VOLATILE+FUNC+FASTCALL - jsr CC.EXP.Eval + jsr EXP.Eval bcs .93 - jsr CC.EXP.GetYASizeOfInAXC + jsr EXP.GetYASizeOfInAXC tax save Sizeof in X - jsr CC.F.GetTQ + jsr F.GetTQ cpy #SYM.T.VARIADIC bne .50 if VARIADIC, don't advance to next arg @@ -255,9 +259,9 @@ CC.F.CallRetV sec cmp #',' bne .6 - jsr CC.GetNextCharNBNL Skip ',' + jsr CORE.GetNCharNBNL Skip ',' - jsr CC.F.GetTQ + jsr F.GetTQ bne .3 Another ARG.... bra .90 extra args....error @@ -265,7 +269,7 @@ CC.F.CallRetV sec .6 cmp #')' bne .90 - jsr CC.F.GetTQ + jsr F.GetTQ beq .8 no more arg after ')', exit cpy #SYM.T.VARIADIC @@ -280,9 +284,9 @@ CC.F.CallRetV sec cmp #')' bne .90 -.8 jsr CC.GetNextCharNB Skip ) +.8 jsr CORE.GetNCharNB Skip ) - jsr CC.F.Call2 + jsr F.Call2 bra .93 .90 lda #E.CSYN @@ -303,14 +307,14 @@ CC.F.CallRetV sec *-------------------------------------- * X = last var size *-------------------------------------- -CC.F.Call2 ldy #SYM.Q +F.Call2 ldy #SYM.Q lda (ZPLookupSymPtr),y and #SYM.Q.FASTCALL beq .1 ldy #SYM.Def Get first (only) argument - jsr CC.F.GetTQAtY - jsr CC.TYPE.SizeOf + jsr F.GetTQAtY + jsr TYPE.SizeOf dex bne .19 @@ -320,7 +324,7 @@ CC.F.Call2 ldy #SYM.Q .19 jsr CODE.PULLYA -.1 jsr CC.F.Call3 +.1 jsr F.Call3 bcs .9 bit ZPPtr1+1 bRetV @@ -329,7 +333,7 @@ CC.F.Call2 ldy #SYM.Q * NO Return Value : call & discard stack if not in Y,A >LDYA ZPPtr2 function T/Q - jsr CC.TYPE.SizeOf + jsr TYPE.SizeOf txa beq .11 void @@ -352,7 +356,7 @@ CC.F.Call2 ldy #SYM.Q bcs .8 not a SYS/FPU/LIB call...Ret value on stack >LDYA ZPPtr2 function T/Q - jsr CC.TYPE.SizeOf + jsr TYPE.SizeOf cpx #3 bcs .8 leave on stack @@ -369,7 +373,7 @@ CC.F.Call2 ldy #SYM.Q clc rts *-------------------------------------- -CC.F.Call3 ldy #SYM.Addr+1 +F.Call3 ldy #SYM.Addr+1 lda (ZPLookupSymPtr),y beq .9 @@ -427,10 +431,10 @@ CC.F.Call3 ldy #SYM.Addr+1 sec .99 rts *-------------------------------------- -CC.F.GetTQ >LDA.G CC.LookupSymPtr +F.GetTQ >LDA.G CC.LookupSymPtr tay -CC.F.GetTQAtY lda (ZPLookupSymPtr),y +F.GetTQAtY lda (ZPLookupSymPtr),y pha iny lda (ZPLookupSymPtr),y diff --git a/BIN/CC.S.FIO.txt b/BIN/CC.S.FIO.txt index 2809b965..c3b036d7 100644 --- a/BIN/CC.S.FIO.txt +++ b/BIN/CC.S.FIO.txt @@ -1,8 +1,7 @@ NEW AUTO 3,1 *-------------------------------------- -CC.FIO.LoadLIB.o - >LDA.G LibCount +FIO.LoadLIB.o >LDA.G LibCount cmp #LIBS.MAX bne .1 @@ -57,10 +56,10 @@ CC.FIO.LoadLIB.o .99 rts *-------------------------------------- -CC.FIO.FOpen1st >LDA.G CC.InFileArg +FIO.FOpen1st >LDA.G CC.InFileArg >SYSCALL ArgV -CC.FIO.FOpen phy +FIO.FOpen phy pha >PUSHW L.MSG.READING @@ -100,7 +99,7 @@ CC.FIO.FOpen phy .9 rts *-------------------------------------- -CC.FIO.FGetS >LDYA.G LineBufPtr +FIO.FGetS >LDYA.G LineBufPtr >STYA ZPLineBufPtr >LDA.G LineCntPtr @@ -134,7 +133,7 @@ CC.FIO.FGetS >LDYA.G LineBufPtr .9 rts *-------------------------------------- -CC.FIO.FClose >LDA.G hFilePtr +FIO.FClose >LDA.G hFilePtr cmp #hFilePtr beq .8 @@ -156,7 +155,7 @@ CC.FIO.FClose >LDA.G hFilePtr .8 rts *-------------------------------------- -CC.FIO.FCreate lda ZPCCCode+1 +FIO.FCreate lda ZPCCCode+1 sta PCC.FH+PCC.FH.CONST+1 sec sbc #$20 diff --git a/BIN/CC.S.KW.txt b/BIN/CC.S.KW.txt index f39251f4..913be4e2 100644 --- a/BIN/CC.S.KW.txt +++ b/BIN/CC.S.KW.txt @@ -3,7 +3,7 @@ NEW *-------------------------------------- * Built in Keywords *-------------------------------------- -CC.KW.IF jsr CC.KW.BEGIN00 +KW.IF jsr KW.BEGIN00 bcs .99 jsr CC.GetCharNB @@ -12,16 +12,16 @@ CC.KW.IF jsr CC.KW.BEGIN00 cmp #'(' bne .9 - jsr CC.GetNextCharNB + jsr CORE.GetNCharNB bcs .9 - jsr CC.EXP.Eval00 Any var type + jsr EXP.Eval00 Any var type bcs .99 - jsr CC.KW.TestZero Y,A=T/Q + jsr KW.TestZero Y,A=T/Q lda #'E' - jsr CC.SYM.LookupA + jsr SYM.LookupA bcs .99 lda #$4C emit JMP else @@ -34,13 +34,13 @@ CC.KW.IF jsr CC.KW.BEGIN00 cmp #')' bne .9 - jmp CC.KW.STMT + jmp KW.STMT .9 lda #E.CSYN sec .99 rts *-------------------------------------- -CC.KW.IF.END jsr CC.GetCharNBNL +KW.IF.END jsr CORE.GetCharNBNL bcs .1 cmp #';' @@ -51,14 +51,14 @@ CC.KW.IF.END jsr CC.GetCharNBNL bcc .2 .1 lda #'E' define ELSE Label - jsr CC.KW.NewLabel + jsr KW.NewLabel bcs .99 clv pop context rts *-------------------------------------- .2 lda #'X' - jsr CC.SYM.LookupA + jsr SYM.LookupA bcs .99 lda #$4C emit JMP exit @@ -66,7 +66,7 @@ CC.KW.IF.END jsr CC.GetCharNBNL bcs .99 lda #'E' define ELSE Label - jsr CC.KW.NewLabel + jsr KW.NewLabel bcs .99 inc CStackPtr pop ; or } @@ -75,7 +75,7 @@ CC.KW.IF.END jsr CC.GetCharNBNL ldy CStackPtr sta (ZPCCStack),y - jsr CC.KW.STMT + jsr KW.STMT bcs .99 bit .99 set V : DONT pop context @@ -85,22 +85,22 @@ CC.KW.IF.END jsr CC.GetCharNBNL sec .99 rts *-------------------------------------- -CC.KW.ELSE lda #E.CSYN illegal +KW.ELSE lda #E.CSYN illegal sec rts *-------------------------------------- -CC.KW.ELSE.END lda #'X' define EXIT Label - jsr CC.KW.NewLabel +KW.ELSE.END lda #'X' define EXIT Label + jsr KW.NewLabel bcs .99 clv pop context .99 rts *-------------------------------------- -CC.KW.WHILE jsr CC.KW.BEGIN00 +KW.WHILE jsr KW.BEGIN00 bcs .99 lda #'C' define CONT Label - jsr CC.SYM.NewA + jsr SYM.NewA bcs .99 jsr CC.GetCharNB @@ -109,16 +109,16 @@ CC.KW.WHILE jsr CC.KW.BEGIN00 cmp #'(' bne .9 - jsr CC.GetNextCharNB + jsr CORE.GetNCharNB bcs .9 - jsr CC.EXP.Eval00 Any var type + jsr EXP.Eval00 Any var type bcs .99 - jsr CC.KW.TestZero + jsr KW.TestZero lda #'B' - jsr CC.SYM.LookupA + jsr SYM.LookupA bcs .99 lda #$4C emit JMP break: @@ -131,14 +131,14 @@ CC.KW.WHILE jsr CC.KW.BEGIN00 cmp #')' bne .9 - jmp CC.KW.STMT + jmp KW.STMT .9 lda #E.CSYN sec .99 rts *-------------------------------------- -CC.KW.WHILE.END lda #'C' - jsr CC.KW.GetLabel +KW.WHILE.END lda #'C' + jsr KW.GetLabel bcs .99 lda #$4C @@ -146,25 +146,25 @@ CC.KW.WHILE.END lda #'C' bcs .99 lda #'B' define BREAK Label - jsr CC.KW.NewLabel + jsr KW.NewLabel bcs .99 clv pop context .99 rts *-------------------------------------- -CC.KW.DO jsr CC.KW.BEGIN00 +KW.DO jsr KW.BEGIN00 bcs .99 lda #'C' define CONT Label - jsr CC.SYM.NewA + jsr SYM.NewA bcs .99 - jmp CC.KW.STMT + jmp KW.STMT .99 rts *-------------------------------------- -CC.KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO.... +KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO.... jsr CC.LookupID bcs .9 @@ -174,16 +174,16 @@ CC.KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO.... cmp #'(' bne .9 - jsr CC.GetNextCharNB + jsr CORE.GetNCharNB bcs .9 - jsr CC.EXP.Eval00 Any var type + jsr EXP.Eval00 Any var type bcs .99 - jsr CC.KW.TestnZero + jsr KW.TestnZero lda #'C' - jsr CC.KW.GetLabel + jsr KW.GetLabel bcs .99 lda #$4C emit JMP cont @@ -191,7 +191,7 @@ CC.KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO.... bcs .99 lda #'B' define BREAK Label - jsr CC.KW.NewLabel + jsr KW.NewLabel bcs .99 jsr CC.GetCharNB @@ -200,7 +200,7 @@ CC.KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO.... cmp #')' bne .9 - jsr CC.GetNextCharNB + jsr CORE.GetNCharNB bcs .9 clv pop context @@ -227,31 +227,31 @@ CC.KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO.... * break: * } *-------------------------------------- -CC.KW.FOR jsr CC.GetCharNB +KW.FOR jsr CC.GetCharNB bcs .29 cmp #'(' bne .29 - jsr CC.KW.BEGIN00 + jsr KW.BEGIN00 bcs .29 - jsr CC.GetNextCharNB skip '(' + jsr CORE.GetNCharNB skip '(' bcs .29 >LDYA L.CC.TYPEQUAL jsr CC.LookupID bcs .1 - jsr CC.DECL + jsr DECL.X bcc .2 .19 rts -.1 jsr CC.STMT get s1 +.1 jsr STMT.Get get s1 bcs .19 -* jsr CC.KW.StackDiscard +* jsr KW.StackDiscard .2 jsr CC.GetCharNB bcs .9 @@ -259,28 +259,28 @@ CC.KW.FOR jsr CC.GetCharNB cmp #';' bne .9 - jsr CC.GetNextCharNB skip ';' + jsr CORE.GetNCharNB skip ';' bcs .9 *-------------------------------------- lda #'L' LOOP Label - jsr CC.SYM.NewA + jsr SYM.NewA bcs .99 - jsr CC.EXP.Eval00 get e2 + jsr EXP.Eval00 get e2 .29 bcs .99 - jsr CC.KW.TestZero + jsr KW.TestZero bcs .99 lda #'B' - jsr CC.SYM.LookupA + jsr SYM.LookupA bcs .99 lda #$4C emit JMP break: jsr CODE.TOABSYX lda #'S' - jsr CC.SYM.LookupA + jsr SYM.LookupA bcs .99 lda #$20 emit JSR s: @@ -292,17 +292,17 @@ CC.KW.FOR jsr CC.GetCharNB cmp #';' bne .9 - jsr CC.GetNextCharNB skip ';' + jsr CORE.GetNCharNB skip ';' bcs .9 *-------------------------------------- lda #'C' CONT Label - jsr CC.SYM.NewA + jsr SYM.NewA bcs .99 - jsr CC.STMT get s3 + jsr STMT.Get get s3 bcs .99 -* jsr CC.KW.StackDiscard +* jsr KW.StackDiscard jsr CC.GetCharNB bcs .9 @@ -311,45 +311,45 @@ CC.KW.FOR jsr CC.GetCharNB bne .9 lda #'L' - jsr CC.SYM.LookupA + jsr SYM.LookupA bcs .99 lda #$4C jsr CODE.TOABSYX emit JMP loop lda #'S' S Label - jsr CC.SYM.NewA + jsr SYM.NewA bcs .99 - jmp CC.KW.STMT + jmp KW.STMT .9 lda #E.CSYN sec .99 rts *-------------------------------------- -CC.KW.FOR.END lda #$60 +KW.FOR.END lda #$60 jsr CODE.EmitByte set RTS for JSR code; bcs .99 lda #'B' define BREAK Label - jsr CC.KW.NewLabel + jsr KW.NewLabel bcs .99 clv pop context .99 rts *-------------------------------------- -CC.KW.SWITCH jsr CC.GetCharNB +KW.SWITCH jsr CC.GetCharNB bcs .98 cmp #'(' bne .98 - jsr CC.GetNextCharNB + jsr CORE.GetNCharNB bcs .98 - jsr CC.EXP.Eval00 Any var type + jsr EXP.Eval00 Any var type bcs .99 Y,A=T/Q tax @@ -372,7 +372,7 @@ CC.KW.SWITCH jsr CC.GetCharNB jsr CC.Push push SizeOf(type) bcs .99 - jsr CC.KW.BEGIN + jsr KW.BEGIN bcs .99 jsr CC.GetCharNB @@ -381,7 +381,7 @@ CC.KW.SWITCH jsr CC.GetCharNB cmp #')' bne .98 - jmp CC.KW.STMT + jmp KW.STMT .97 lda #E.TMISMATCH sec @@ -391,16 +391,16 @@ CC.KW.SWITCH jsr CC.GetCharNB sec .99 rts *-------------------------------------- -CC.KW.SWITCH.END +KW.SWITCH.END lda #'B' define BREAK Label - jsr CC.KW.NewLabel + jsr KW.NewLabel bcs .99 clv pop context .99 rts *-------------------------------------- -CC.KW.CASE ldy CStackPtr +KW.CASE ldy CStackPtr beq .9 iny skip ; or } @@ -417,7 +417,7 @@ CC.KW.CASE ldy CStackPtr tay lda #0 for integral type - jsr CC.EXP.Eval + jsr EXP.Eval bcs .99 jsr CC.GetCharNB @@ -426,7 +426,7 @@ CC.KW.CASE ldy CStackPtr cmp #':' bne .9 - jsr CC.GetNextCharNB skip ':' + jsr CORE.GetNCharNB skip ':' clc rts @@ -435,7 +435,7 @@ CC.KW.CASE ldy CStackPtr sec .99 rts *-------------------------------------- -CC.KW.DEFAULT ldy CStackPtr +KW.DEFAULT ldy CStackPtr beq .9 iny skip ; or } @@ -449,7 +449,7 @@ CC.KW.DEFAULT ldy CStackPtr cmp #':' bne .9 - jsr CC.GetNextCharNB skip ':' + jsr CORE.GetNCharNB skip ':' clc rts @@ -458,9 +458,9 @@ CC.KW.DEFAULT ldy CStackPtr sec .99 rts *-------------------------------------- -CC.KW.BREAK lda #'B' +KW.BREAK lda #'B' - jsr CC.KW.LookupLabel + jsr KW.LookupLabel bcs .9 lda #$4C emit JMP break @@ -470,9 +470,9 @@ CC.KW.BREAK lda #'B' sec rts *-------------------------------------- -CC.KW.CONTINUE lda #'C' +KW.CONTINUE lda #'C' - jsr CC.KW.LookupLabel + jsr KW.LookupLabel bcs .9 lda #$4C emit JMP cont @@ -482,7 +482,7 @@ CC.KW.CONTINUE lda #'C' sec rts *-------------------------------------- -CC.KW.RETURN ldy CStackPtr +KW.RETURN ldy CStackPtr beq .9 .1 iny skip ; or } @@ -515,10 +515,10 @@ CC.KW.RETURN ldy CStackPtr ply - jsr CC.EXP.Eval + jsr EXP.Eval bcs .99 - jsr CC.SYM.GetYASizeOfInAXC Y,A=T/Q + jsr SYM.GetYASizeOfInAXC Y,A=T/Q tax X = sizeof jsr CODE.SetRetValue bcs .99 @@ -526,287 +526,19 @@ CC.KW.RETURN ldy CStackPtr >LDYA L.PCC.LEAVE jmp CODE.EmitPCC *-------------------------------------- -CC.KW.SIZEOF +KW.SIZEOF lda #E.CSYN sec rts *-------------------------------------- -CC.KW.STRUCT clc - .HS B0 BCS -*-------------------------------------- -CC.KW.UNION sec - stz ZPPtr2 bNewTagDef - - ror ZPPtr2+1 bStrucUnion - - bit bPass2 - bpl CC.KW.SU.1 Pass 1: create def -*-------------------------------------- -CC.KW.SU.2 jsr CC.GetNextCharNB - bcs .98 - - cmp #'{' - beq .1 no TAG - - jsr CC.KW.GetTag - bcs .99 - - jsr CC.GetNextCharNBNL - bcs .98 - - cmp #'{' - bne .2 - -.1 jsr CC.GetNextCharNBNL skip '{' - - cmp #'}' - bne .1 - - jsr CC.GetNextCharNBNL skip '}' - - cmp #';' - bne .2 - - jsr CC.GetNextCharNB skip ';' - - clc - rts - -.2 clc reuse buffer - - jsr CC.SYM.Lookup - bcs .99 - - jsr CC.GetCharNB - bcs .98 - - cmp #',' - bne .3 - - jsr CC.GetNextCharNBNL - bcc .2 - bcs .98 - -.3 cmp #';' - bne .98 - - clc - rts - -.98 lda #E.CSYN - sec -.99 rts -*-------------------------------------- -CC.KW.SU.1 ldy #SYM.T.SU - lda #0 - ldx #SYM.SC.TAG - sec reset buffer - jsr CC.SYM.BufInitYAX - - jsr CC.GetNextCharNB - bcs .98 - - cmp #'{' - beq .30 no TAG - - jsr CC.KW.NewTag - bcc .20 - - jsr CC.KW.GetTag - bcs .99 -*-------------------------------------- -.20 jsr CC.GetNextCharNBNL - bcs .98 - - cmp #'{' - beq .30 - - bit ZPPtr2 bNewTagDef - bmi .98 - - bra .41 go create vars... -*-------------------------------------- -.30 jsr CC.GetNextCharNBNL skip '{' of ';' - bcs .98 - - cmp #'}' - beq .38 - - >LDYA L.CC.TYPEQUAL - jsr CC.LookupID - bcs .98 - - cpx #4 no const nor volatile - bcc .98 - - jsr CC.TYPE.Decl - bcs .99 - - jsr CC.TYPE.SizeOf get sizeof in X - - jsr CC.KW.SU.AddYAX - bcs .99 - - jsr CC.SYM.Add0000 TODO: bitO & bitW - bcs .99 - - jsr CC.SYM.AddName - bcs .99 - - jsr CC.GetCharNB - cmp #';' - bne .98 - - bra .30 - -.38 jsr CC.GetNextCharNB skip '}' - bcs .98 - - jsr CC.SYM.Add0000 Close F definition - bcs .99 - - cmp #';' - bne .40 - - jsr CC.GetNextCharNB skip ';' - - bit ZPPtr2 bNewTagDef - bpl .98 no tag & no var, error - - jmp CC.KW.StoreTag -*-------------------------------------- -.98 lda #E.CSYN - sec -.99 rts -*-------------------------------------- -.40 bit ZPPtr2 bNewTagDef - bpl .41 - - jsr CC.KW.StoreTag - bcs .99 - -.41 clc reuse buffer - - ldy #SYM.T.SU - lda #0 - jsr CC.DECL.YAC - bcs .99 - - jsr CC.GetCharNB - bcs .98 - - cmp #',' - bne .42 - - jsr CC.GetNextCharNBNL - bcc .41 - bcs .98 - -.42 cmp #';' - bne .98 - - clc - rts -*-------------------------------------- -CC.KW.SU.AddYAX jsr CC.SYM.AddWord add T/Q - bcs .99 - - bit ZPPtr2+1 bStrucUnion - bmi .1 - - ldy #SYM.SizeOf - lda (ZPSymBufPtr),y - pha - iny - lda (ZPSymBufPtr),y - ply - - jsr CC.SYM.AddWord Add Y/A Offset - bcs .99 - - txa - - ldy #SYM.SizeOf -* clc - adc (ZPSymBufPtr),y - sta (ZPSymBufPtr),y - bcc .99 - - iny - lda #0 - adc (ZPSymBufPtr),y - sta (ZPSymBufPtr),y - -* clc - -.99 rts - -.1 txa - ldy #SYM.SizeOf - cmp (ZPSymBufPtr),y - bcs .2 - - sta (ZPSymBufPtr),y - -.2 jmp CC.SYM.Add0000 Add Y/A Offset (always 0 for union) -*-------------------------------------- -CC.KW.ENUM - lda #E.CSYN - sec - rts -*-------------------------------------- -CC.KW.NewTag >LDA.G CC.hTags - jsr CC.SYM.NewKey - bcs .9 - - >STYA ZPPtr1 TagID - dec ZPPtr2 bNewTagDef = true - - jsr CC.SkipX - -.9 rts -*-------------------------------------- -CC.KW.GetTag >PUSHB.G CC.hTags - >PUSHW ZPLineBufPtr - - >SYSCALL SListLookup - bcs .9 - - phy Y,A = KeyID - pha - - jsr CC.SkipX X = KeyLen - - >PUSHB.G CC.hTags - pla - >PUSHA - pla - >PUSHA - >PUSHW ZPSymBufPtr - >PUSHWI 65535 all - >PUSHWZ From Start - >SYSCALL SListGetData -.9 rts -*-------------------------------------- -CC.KW.StoreTag >PUSHB.G CC.hTags - >PUSHW ZPPtr1 - >PUSHW ZPSymBufPtr - >PUSHBI 0 - ldy #SYM.DefSize - lda (ZPSymBufPtr),y - >PUSHA - - >SYSCALL SListAddData - rts -*-------------------------------------- -CC.KW.BEGIN00 lda #0 +KW.BEGIN00 lda #0 jsr CC.Push no T/Q - bcs CC.KW.BEGIN.RTS + bcs KW.BEGIN.RTS jsr CC.Push - bcs CC.KW.BEGIN.RTS + bcs KW.BEGIN.RTS -CC.KW.BEGIN jsr CC.SYM.NewCPSID +KW.BEGIN jsr SYM.NewCPSID bcs .99 >LDA.G CC.CPSPFX+3 @@ -829,15 +561,15 @@ CC.KW.BEGIN jsr CC.SYM.NewCPSID jmp CC.Push .99 -CC.KW.BEGIN.RTS rts +KW.BEGIN.RTS rts *-------------------------------------- -CC.KW.STMT jsr CC.GetNextCharNBNL +KW.STMT jsr CORE.GetNCharNBNL bcs .9 cmp #'{' bne .1 - jsr CC.GetNextCharNB skip '{' + jsr CORE.GetNCharNB skip '{' bcs .99 lda #'}' @@ -850,7 +582,7 @@ CC.KW.STMT jsr CC.GetNextCharNBNL sec .99 rts *-------------------------------------- -CC.KW.NewLabel pha +KW.NewLabel pha lda CStackPtr clc @@ -865,9 +597,9 @@ CC.KW.NewLabel pha >STYA.G CC.CPSPFX+2 pla - jmp CC.SYM.NewA + jmp SYM.NewA *-------------------------------------- -CC.KW.GetLabel pha +KW.GetLabel pha lda CStackPtr clc @@ -882,10 +614,9 @@ CC.KW.GetLabel pha >STYA.G CC.CPSPFX+2 pla - jmp CC.SYM.LookupA + jmp SYM.LookupA *-------------------------------------- -CC.KW.LookupLabel - pha +KW.LookupLabel pha ldy CStackPtr sty ArgIndex @@ -918,7 +649,7 @@ CC.KW.LookupLabel pla pha - jsr CC.SYM.LookupA + jsr SYM.LookupA bcs .1 pla @@ -931,7 +662,7 @@ CC.KW.LookupLabel *-------------------------------------- * Input : Value on Stack, Y,A = Type/Qual *-------------------------------------- -CC.KW.TestZero jsr CC.EXP.GetYASizeOfInAXC +KW.TestZero jsr EXP.GetYASizeOfInAXC tax cpx #1 bne .1 @@ -955,7 +686,7 @@ CC.KW.TestZero jsr CC.EXP.GetYASizeOfInAXC *-------------------------------------- * Input : Value on Stack, Y,A = Type/Qual *-------------------------------------- -CC.KW.TestnZero jsr CC.EXP.GetYASizeOfInAXC +KW.TestnZero jsr EXP.GetYASizeOfInAXC tax cpx #1 bne .1 @@ -979,9 +710,7 @@ CC.KW.TestnZero jsr CC.EXP.GetYASizeOfInAXC *-------------------------------------- * Input : Value on Stack, Y,A = Type/Qual *-------------------------------------- -CC.KW.StackDiscard - - jsr CC.TYPE.SizeOf +KW.StackDiscard jsr TYPE.SizeOf txa beq .8 void diff --git a/BIN/CC.S.LINK.txt b/BIN/CC.S.LINK.txt index a35b72bc..7cbbbc64 100644 --- a/BIN/CC.S.LINK.txt +++ b/BIN/CC.S.LINK.txt @@ -180,8 +180,8 @@ CC.Link.Dump >PUSHW L.MSG.LINKING2 iny >PUSHB (ZPSymBufPtr),y SYM.SC - iny - >PUSHB (ZPSymBufPtr),y SYM.DefSize + ldy #SYM.DefSize + >PUSHB (ZPSymBufPtr),y ldy #SYM.SizeOf+1 >PUSHB (ZPSymBufPtr),y diff --git a/BIN/CC.S.STMT.txt b/BIN/CC.S.STMT.txt index d5a59ffa..e57ee0ce 100644 --- a/BIN/CC.S.STMT.txt +++ b/BIN/CC.S.STMT.txt @@ -1,7 +1,7 @@ NEW AUTO 3,1 *-------------------------------------- -CC.STMT jsr CC.GetCharNB +STMT.Get jsr CC.GetCharNB jsr CC.IsLetter ldx #$ff bcc .20 @@ -12,49 +12,49 @@ CC.STMT jsr CC.GetCharNB .20 stx StmtPreOp - jsr CC.SYM.Lookup var or func() ? + jsr SYM.Lookup var or func() ? bcs .99 - ldy #SYM.Q - lda (ZPLookupSymPtr),y - bit #SYM.Q.FUNC - beq .60 - - bit StmtPreOp - bpl .9 ++func ???????? - - jsr CC.F.CallNoRetV func( ... ); - bcs .99 - - jmp CC.SYM.LookupFree - -.60 ldy #SYM.SC + ldy #SYM.SC lda (ZPLookupSymPtr),y cmp #SYM.SC.TYPEDEF - bne .61 - - jsr CC.GetNextCharNB + bne .60 +*-------------------------------------- + jsr CORE.GetNCharNB bcs .9 - +* >DEBUG ldy #SYM.Q lda (ZPLookupSymPtr),y pha lda (ZPLookupSymPtr) pha - jsr CC.SYM.LookupFree + jsr SYM.LookupFree ply pla sec Reset Buffer - jmp CC.DECL.YAC + jmp DECL.YAC +*-------------------------------------- +.60 ldy #SYM.Q + lda (ZPLookupSymPtr),y + bit #SYM.Q.FUNC + beq .61 + + bit StmtPreOp + bpl .9 ++func ???????? + jsr F.CallNoRetV func( ... ); + bcs .99 + + jmp SYM.LookupFree +*-------------------------------------- .61 jsr STMT.SetVar bcs .99 - jmp CC.SYM.LookupFree + jmp SYM.LookupFree .9 lda #E.CSYN sec @@ -62,11 +62,11 @@ CC.STMT jsr CC.GetCharNB *-------------------------------------- STMT.SetVar stz ExpState - jsr CC.EXP.POSTOPS var++, var[0]... ? + jsr EXP.POSTOPS var++, var[0]... ? bcs .99 ldx StmtPreOp - jsr CC.EXP.PREOPS apply ++var, .... + jsr EXP.PREOPS apply ++var, .... bcs .99 jsr CC.GetCharNB @@ -91,7 +91,7 @@ STMT.SetVar stz ExpState asl bmi .6 AonStack - jsr CC.EXP.GetAddr1 + jsr EXP.GetAddr1 bcc .7 rts @@ -107,10 +107,10 @@ STMT.SetVar stz ExpState tay pla get expected T/Q - jsr CC.EXP.Eval + jsr EXP.Eval bcs .99 - jmp CC.SYM.PopValue + jmp SYM.PopValue .8 clc rts @@ -197,7 +197,7 @@ CC.STMT.POP bne .98 jmp (J.CC.KW.END,x) -.8 jmp CC.F.Def.END +.8 jmp F.Def.END .98 lda #E.CSYN sec diff --git a/BIN/CC.S.SYM.txt b/BIN/CC.S.SYM.txt index d015aee7..efe04002 100644 --- a/BIN/CC.S.SYM.txt +++ b/BIN/CC.S.SYM.txt @@ -6,20 +6,20 @@ NEW * CC : Reuse Buffer * Output : Y,A = VarID *-------------------------------------- -CC.SYM.New >STYA ZPPtr2 T/Q +SYM.New >STYA ZPPtr2 T/Q stx ZPPtr3 SC bit bPass2 - bpl CC.SYM.New.1 + bpl SYM.New.1 bit bLocalScope - bmi CC.SYM.New.1 + bmi SYM.New.1 >PUSHB.G CC.hScopes Global Scope >PUSHW ZPLineBufPtr >SYSCALL SListLookup - bcs CC.SYM.New.9 + bcs SYM.New.9 >STYA.G CC.SymID Y,A = KeyID @@ -31,22 +31,22 @@ CC.SYM.New >STYA ZPPtr2 T/Q >PUSHWI 65535 all >PUSHWZ From Start >SYSCALL SListGetData - bcc CC.SYM.New.2 + bcc SYM.New.2 -CC.SYM.New.9 rts Y,A = SymSize +SYM.New.9 rts Y,A = SymSize *-------------------------------------- -CC.SYM.New.1 jsr CC.SYM.BufInitYAX set buf according C +SYM.New.1 jsr SYM.BufInitYAXC set buf according C ldy ScopeIdx lda (pData),y - jsr CC.SYM.NewKey - bcs CC.SYM.New.9 + jsr SYM.NewKey + bcs SYM.New.9 >STYA.G CC.SymID Y,A = KeyID jsr CC.SkipX X = KeyLen *-------------------------------------- -CC.SYM.New.2 jsr CC.GetCharNB +SYM.New.2 jsr CC.GetCharNB bcs .98 cmp #';' @@ -54,35 +54,35 @@ CC.SYM.New.2 jsr CC.GetCharNB lda ZPPtr3 cmp #SYM.SC.TYPEDEF - bne CC.SYM.SetAddr + bne SYM.SetAddr clc rts .1 cmp #'(' - bne CC.SYM.NewV + bne SYM.NewV ldy #SYM.Q lda #SYM.Q.FUNC ora (ZPSymBufPtr),y sta (ZPSymBufPtr),y - jmp CC.F.Decl + jmp F.Decl .98 lda #E.CSYN sec .99 rts *-------------------------------------- -CC.SYM.NewV cmp #'[' - bne CC.SYM.SetAddr +SYM.NewV cmp #'[' + bne SYM.SetAddr ldy #SYM.Q lda (ZPSymBufPtr),y and #%11001111 sta (ZPSymBufPtr),y - lda #SYM.Def ldy #SYM.DefSize + lda #SYM.Def sta (ZPSymBufPtr),y ldy #SYM.Q @@ -92,7 +92,7 @@ CC.SYM.NewV cmp #'[' adc #SYM.Q.ARRAY sta (ZPSymBufPtr),y - jsr CC.GetNextCharNB Skip [ + jsr CORE.GetNCharNB Skip [ bcs .98 cmp #']' @@ -103,15 +103,15 @@ CC.SYM.NewV cmp #'[' and #SYM.Q.PPPOINTER beq .98 [] only allowed for * - jsr CC.SYM.Add0000 set as [0] (deref) + jsr SYM.Add0000 set as [0] (deref) bcs .99 bra .3 -.2 jsr CC.EXP.IntConst +.2 jsr EXP.IntConst bcs .98 - jsr CC.SYM.AddWord + jsr SYM.AddWord bcs .99 jsr CC.GetCharNB @@ -120,11 +120,11 @@ CC.SYM.NewV cmp #'[' cmp #']' bne .98 -.3 jsr CC.GetNextCharNB Skip ] - bcs CC.SYM.SetAddr +.3 jsr CORE.GetNCharNB Skip ] + bcs SYM.SetAddr cmp #'[' - bne CC.SYM.SetAddr + bne SYM.SetAddr ldy #SYM.Q lda (ZPSymBufPtr),y @@ -136,14 +136,14 @@ CC.SYM.NewV cmp #'[' sec .99 rts *-------------------------------------- -CC.SYM.SetAddr ldy #SYM.SizeOf +SYM.SetAddr ldy #SYM.SizeOf lda (ZPSymBufPtr),y iny ora (ZPSymBufPtr),y bne .1 - jsr CC.SYM.GetSymSizeOfInAXC - jsr CC.SYM.SetSizeOf + jsr SYM.GetSymSizeOfInAXC + jsr SYM.SetSizeOf .1 ldy #SYM.Q lda (ZPSymBufPtr),y @@ -152,16 +152,16 @@ CC.SYM.SetAddr ldy #SYM.SizeOf ldy #SYM.SC lda (ZPSymBufPtr),y - beq CC.SYM.SetAddrG SYM.SC.STATIC + beq SYM.SetAddrG SYM.SC.STATIC cmp #SYM.SC.AUTO - beq CC.SYM.SetAddrL + beq SYM.SetAddrL .9 lda #E.TMISMATCH sec rts *-------------------------------------- -CC.SYM.SetAddrG ldy #SYM.Addr +SYM.SetAddrG ldy #SYM.Addr lda ZPCCData sta (ZPSymBufPtr),y @@ -185,7 +185,7 @@ CC.SYM.SetAddrG ldy #SYM.Addr clc rts *-------------------------------------- -CC.SYM.SetAddrL ldy #SYM.SizeOf+1 +SYM.SetAddrL ldy #SYM.SizeOf+1 lda (ZPSymBufPtr),y bne .9 @@ -212,8 +212,7 @@ CC.SYM.SetAddrL ldy #SYM.SizeOf+1 sec rts *-------------------------------------- -CC.SYM.BufInitYAX - pha +SYM.BufInitYAXC pha tya sta (ZPSymBufPtr) #SYM.T @@ -227,21 +226,20 @@ CC.SYM.BufInitYAX bcc .8 DONT reset buffer - iny lda #0 -.1 sta (ZPSymBufPtr),y - iny - cpy #SYM.Def +.1 iny + sta (ZPSymBufPtr),y + cpy #SYM.DefSize-1 bne .1 - tya - ldy #SYM.DefSize + iny #SYM.DefSize + lda #SYM.Def sta (ZPSymBufPtr),y .8 rts *-------------------------------------- -CC.SYM.PushAddr ldy #SYM.SC +SYM.PushAddr ldy #SYM.SC lda (ZPSymBufPtr),y beq .1 SYM.SC.STATIC * LOCAL @@ -284,7 +282,7 @@ CC.SYM.PushAddr ldy #SYM.SC .9 rts *-------------------------------------- -CC.SYM.GetAddr1 ldy #SYM.SC +SYM.GetAddr1 ldy #SYM.SC lda (ZPSymBufPtr),y beq .1 SYM.SC.STATIC * LOCAL @@ -322,7 +320,7 @@ CC.SYM.GetAddr1 ldy #SYM.SC .9 rts *-------------------------------------- -CC.SYM.GetAddr2 ldy #SYM.SC +SYM.GetAddr2 ldy #SYM.SC lda (ZPSymBufPtr),y beq .1 SYM.SC.STATIC * LOCAL @@ -360,7 +358,7 @@ CC.SYM.GetAddr2 ldy #SYM.SC .9 rts *-------------------------------------- -CC.SYM.NewKey >PUSHA +SYM.NewKey >PUSHA >PUSHW ZPLineBufPtr >SYSCALL SListNewKey bcs .9 @@ -369,9 +367,9 @@ CC.SYM.NewKey >PUSHA .9 rts Y,A = KeyID, X = KeyLen *-------------------------------------- -CC.SYM.Add0000 >LDYAI 0 +SYM.Add0000 >LDYAI 0 *-------------------------------------- -CC.SYM.AddWord phy +SYM.AddWord phy pha ldy #SYM.DefSize @@ -407,7 +405,7 @@ CC.SYM.AddWord phy sec rts *-------------------------------------- -CC.SYM.AddName jsr CC.GetCharNB +SYM.AddName jsr CC.GetCharNB bcs .98 jsr CC.IsLetter @@ -415,14 +413,14 @@ CC.SYM.AddName jsr CC.GetCharNB jsr CC.GetIDLen tax - jsr CC.SYM.AddByte + jsr SYM.AddByte bcs .99 ldy #0 .1 lda (ZPLineBufPtr),y phy - jsr CC.SYM.AddByte + jsr SYM.AddByte ply bcs .99 @@ -440,7 +438,7 @@ CC.SYM.AddName jsr CC.GetCharNB sec .99 rts *-------------------------------------- -CC.SYM.AddByte pha +SYM.AddByte pha ldy #SYM.DefSize lda (ZPSymBufPtr),y @@ -462,7 +460,7 @@ CC.SYM.AddByte pha sec rts *-------------------------------------- -CC.SYM.NewCPSID >LDYA.G CC.CPSID +SYM.NewCPSID >LDYA.G CC.CPSID >STYA.G CC.CPSPFX+2 >LDA.G CC.CPSID+1 @@ -490,7 +488,7 @@ CC.SYM.NewCPSID >LDYA.G CC.CPSID * sec rts *-------------------------------------- -CC.SYM.NewA bit bPass2 +SYM.NewA bit bPass2 bmi .8 >STA.G CC.CPSPFX A = "B"reak, "C"ontinue... @@ -514,49 +512,48 @@ CC.SYM.NewA bit bPass2 iny #SYM.SC sta (ZPSymBufPtr),y - iny lda #0 -.1 sta (ZPSymBufPtr),y - iny - cpy #SYM.Def +.1 iny + sta (ZPSymBufPtr),y + cpy #SYM.DefSize-1 bne .1 - tya - ldy #SYM.DefSize + iny #SYM.DefSize + lda #SYM.Def sta (ZPSymBufPtr),y >LDYA ZPCCCode - jsr CC.SYM.SetAddrYA + jsr SYM.SetAddrYA >LDA.G CC.hScopes Global Scope - jmp CC.SYM.Store.1 + jmp SYM.Store.1 .8 clc .99 rts *-------------------------------------- -CC.SYM.StoreF >LDA.G CC.hScopes +SYM.StoreF >LDA.G CC.hScopes bit bPass2 - bpl CC.SYM.Store.1 + bpl SYM.Store.1 clc rts *-------------------------------------- -CC.SYM.Store bit bPass2 - bpl CC.SYM.StoreL Store Global & Local at Pass 1 +SYM.Store bit bPass2 + bpl SYM.StoreL Store Global & Local at Pass 1 bit bLocalScope Store Local at Pass 2 - bmi CC.SYM.StoreL + bmi SYM.StoreL clc rts -CC.SYM.StoreL ldy ScopeIdx +SYM.StoreL ldy ScopeIdx lda (pData),y -CC.SYM.Store.1 >PUSHA +SYM.Store.1 >PUSHA >PUSHW.G CC.SymID >PUSHW ZPSymBufPtr >PUSHBI 0 @@ -568,7 +565,7 @@ CC.SYM.Store.1 >PUSHA rts *-------------------------------------- -CC.SYM.NewScope ldy ScopeIdx +SYM.NewScope ldy ScopeIdx cpy #CC.hScopes+SCOPE.MAX bcs .9 @@ -588,8 +585,7 @@ CC.SYM.NewScope ldy ScopeIdx sec .99 rts *-------------------------------------- -CC.SYM.FreeScope - ldy ScopeIdx +SYM.FreeScope ldy ScopeIdx cpy #CC.hScopes beq * @@ -601,7 +597,7 @@ CC.SYM.FreeScope rts *-------------------------------------- -CC.SYM.Lookup >LDA.G CC.LookupIdx +SYM.Lookup >LDA.G CC.LookupIdx cmp #CC.LookupIdx+LOOKUP.MAX beq .99 @@ -646,7 +642,7 @@ CC.SYM.Lookup >LDA.G CC.LookupIdx * sec rts *-------------------------------------- -CC.SYM.LookupA bit bPass2 +SYM.LookupA bit bPass2 bmi .1 ldx #0 @@ -684,8 +680,7 @@ CC.SYM.LookupA bit bPass2 .99 rts *-------------------------------------- -CC.SYM.LookupFree - >LDA.G CC.LookupIdx +SYM.LookupFree >LDA.G CC.LookupIdx cmp #CC.LookupIdx beq .9 @@ -714,7 +709,7 @@ CC.SYM.LookupFree * ZPPtr2 = expected T/Q * ZPLookupSymPtr *-------------------------------------- -CC.SYM.LookupCheckTQ +SYM.LookupCheckTQ lda ZPPtr2 target T bne .1 @@ -744,9 +739,16 @@ CC.SYM.LookupCheckTQ ldy #SYM.Q eor (ZPLookupSymPtr),y and #$F8 ignore VOLATILE|FUNC|FASTCALL + beq .8 + + and #SYM.Q.AAARRAY is mismatch about array ? + beq .9 no... + + lda ZPPtr2+1 Q + and #SYM.Q.AAARRAY bne .9 - clc +.8 clc rts .9 lda #E.TMISMATCH @@ -755,7 +757,7 @@ CC.SYM.LookupCheckTQ *-------------------------------------- * on RT stack : Addr,value *-------------------------------------- -CC.SYM.PopValue jsr CC.SYM.GetYASizeOfInAXC +SYM.PopValue jsr SYM.GetYASizeOfInAXC tax dex bne .1 @@ -779,8 +781,7 @@ CC.SYM.PopValue jsr CC.SYM.GetYASizeOfInAXC *-------------------------------------- * out : Y,A = T/Q *-------------------------------------- -CC.SYM.GetTypeInYA - ldy #SYM.Q +SYM.GetTypeInYA ldy #SYM.Q lda (ZPSymBufPtr),y pha lda (ZPSymBufPtr) @@ -790,7 +791,7 @@ CC.SYM.GetTypeInYA *-------------------------------------- * out : A,X,C = size *-------------------------------------- -CC.SYM.GetSymSizeOfInAXC +SYM.GetSymSizeOfInAXC ldy #SYM.Q lda (ZPSymBufPtr),y pha @@ -798,7 +799,7 @@ CC.SYM.GetSymSizeOfInAXC tay pla -CC.SYM.GetYASizeOfInAXC +SYM.GetYASizeOfInAXC bit #SYM.Q.PPPOINTER beq .1 @@ -852,8 +853,7 @@ CC.SYM.GetYASizeOfInAXC *-------------------------------------- * in/out : A,X,C = size *-------------------------------------- -CC.SYM.SetSizeOf - ldy #SYM.SizeOf +SYM.SetSizeOf ldy #SYM.SizeOf sta (ZPSymBufPtr),y pha @@ -865,8 +865,7 @@ CC.SYM.SetSizeOf pla rts *-------------------------------------- -CC.SYM.SetAddrYA - phy +SYM.SetAddrYA phy ldy #SYM.Addr+1 sta (ZPSymBufPtr),y diff --git a/BIN/CC.S.TYPE.txt b/BIN/CC.S.TYPE.txt index b5c63005..9188f1c4 100644 --- a/BIN/CC.S.TYPE.txt +++ b/BIN/CC.S.TYPE.txt @@ -1,7 +1,7 @@ NEW AUTO 3,1 *-------------------------------------- -CC.TYPE.Decl >ENTER 2 +TYPE.GetTQInYA >ENTER 2 lda #0 sta (pStack) Type ldy #1 @@ -24,15 +24,40 @@ CC.TYPE.Decl >ENTER 2 .8 jmp (J.CC.TYPEQUAL,x) *-------------------------------------- +TYPE.GetTQInYA2 >ENTER 2 + lda (ZPLookupSymPtr) + sta (pStack) Type + + ldy #SYM.Q + lda (ZPLookupSymPtr),y + +* ldy #1 + sta (pStack),y Qual + + jsr TYPE.GetQ2 + bcs .99 + + jsr SYM.LookupFree + + ldy #1 + lda (pStack),y + pha + lda (pStack) + tay Y = Type + pla A = Qual + + clc + +.99 >LEAVE + rts +*-------------------------------------- * Type Declaration keywords *-------------------------------------- -CC.TYPE.CONST lda #SYM.Q.CONST - bra CC.TYPE.VOLATILE.1 +TYPE.CONST lda #SYM.Q.CONST + bra TYPE.VOLATILE.1 *-------------------------------------- -CC.TYPE.VOLATILE - lda #SYM.Q.VOLATILE -CC.TYPE.VOLATILE.1 - ldy #1 +TYPE.VOLATILE lda #SYM.Q.VOLATILE +TYPE.VOLATILE.1 ldy #1 ora (pStack),y sta (pStack),y @@ -49,11 +74,225 @@ CC.TYPE.VOLATILE.1 sec rts *-------------------------------------- -CC.TYPE.SIGNED sec +TYPE.STRUCT clc + .HS B0 BCS +*-------------------------------------- +TYPE.UNION sec + ror ZPPtr2+1 bStrucUnion + + stz ZPPtr2 bNewTagDef + + bit bPass2 + bpl TYPE.SU.1 Pass 1: create def +*-------------------------------------- +TYPE.SU.2 jsr CORE.GetCharNBNL + bcs .98 + + cmp #'{' + beq .1 no TAG + + jsr TYPE.GetTag + bcs .99 + + jsr CORE.GetNCharNBNL + bcs .98 + + cmp #'{' + bne .8 + +.1 jsr CORE.GetNCharNBNL skip '{' + + cmp #'}' + bne .1 skip definition + + jsr CORE.GetNCharNB skip '}' + +.8 lda #SYM.T.SU + jmp TYPE.GetQ + +.98 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +TYPE.SU.1 ldy #SYM.T.SU + lda #0 + ldx #SYM.SC.TAG + sec reset buffer + jsr SYM.BufInitYAXC + + jsr CORE.GetCharNBNL + bcs .98 + + cmp #'{' + beq .30 no TAG + + jsr TYPE.GetTag + bcc .20 + + jsr TYPE.NewTag + bcs .99 + + sec + ror ZPPtr2 bNewTagDef +*-------------------------------------- +.20 jsr CORE.GetCharNBNL + bcs .98 + + cmp #'{' + beq .30 + + bit ZPPtr2 bNewTagDef + bmi .98 + + bra .38 +*-------------------------------------- +.30 jsr CORE.GetNCharNBNL skip '{' of ';' + bcs .98 + + cmp #'}' + beq .37 + + >LDYA L.CC.TYPEQUAL + jsr CC.LookupID + bcs .98 + + cpx #4 no const nor volatile + bcc .98 + + jsr TYPE.GetTQInYA + bcs .99 + + jsr TYPE.SizeOf get sizeof in X + + jsr TYPE.SU.AddYAX + bcs .99 + + jsr SYM.Add0000 TODO: bitO & bitW + bcs .99 + + jsr SYM.AddName + bcs .99 + + jsr CC.GetCharNB + cmp #';' + bne .98 + + bra .30 +*-------------------------------------- +.37 jsr CORE.GetNCharNB skip '}' + bcs .98 + + jsr SYM.Add0000 Close F definition + bcs .99 + + bit ZPPtr2 bNewTagDef + bpl .38 + + jsr TYPE.StoreTag + bcs .99 +*-------------------------------------- +.38 lda #SYM.T.SU + jmp TYPE.GetQ + +.98 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +TYPE.SU.AddYAX jsr SYM.AddWord add T/Q + bcs .99 + + bit ZPPtr2+1 bStrucUnion + bmi .1 + + ldy #SYM.SizeOf + lda (ZPSymBufPtr),y + pha + iny + lda (ZPSymBufPtr),y + ply + + jsr SYM.AddWord Add Y/A Offset + bcs .99 + + txa + + ldy #SYM.SizeOf +* clc + adc (ZPSymBufPtr),y + sta (ZPSymBufPtr),y + bcc .99 + + iny + lda #0 + adc (ZPSymBufPtr),y + sta (ZPSymBufPtr),y + +* clc + +.99 rts + +.1 txa + ldy #SYM.SizeOf + cmp (ZPSymBufPtr),y + bcs .2 + + sta (ZPSymBufPtr),y + +.2 jmp SYM.Add0000 Add Y/A Offset (always 0 for union) +*-------------------------------------- +TYPE.ENUM + lda #E.CSYN + sec + rts +*-------------------------------------- +TYPE.NewTag >LDA.G CC.hTags + jsr SYM.NewKey + bcs .9 + + >STYA ZPPtr1 TagID + dec ZPPtr2 bNewTagDef = true + + jsr CC.SkipX + +.9 rts +*-------------------------------------- +TYPE.GetTag >PUSHB.G CC.hTags + >PUSHW ZPLineBufPtr + + >SYSCALL SListLookup + bcs .9 + + phy Y,A = KeyID + pha + + jsr CC.SkipX X = KeyLen + + >PUSHB.G CC.hTags + pla + >PUSHA + pla + >PUSHA + >PUSHW ZPSymBufPtr + >PUSHWI 65535 all + >PUSHWZ From Start + >SYSCALL SListGetData +.9 rts +*-------------------------------------- +TYPE.StoreTag >PUSHB.G CC.hTags + >PUSHW ZPPtr1 + >PUSHW ZPSymBufPtr + >PUSHBI 0 + ldy #SYM.DefSize + lda (ZPSymBufPtr),y + >PUSHA + + >SYSCALL SListAddData + rts +*-------------------------------------- +TYPE.SIGNED sec .HS 90 BCC *-------------------------------------- -CC.TYPE.UNSIGNED - clc +TYPE.UNSIGNED clc php jsr CC.CheckSpace @@ -61,7 +300,6 @@ CC.TYPE.UNSIGNED >LDYA L.CC.TYPES jsr CC.LookupID - bcs .9 cpx #SYM.T.UCHAR @@ -83,50 +321,50 @@ CC.TYPE.UNSIGNED sec rts *-------------------------------------- -CC.TYPE.SHORT jsr CC.CheckSpace +TYPE.SHORT jsr CC.CheckSpace bcs .9 >LDYA L.CC.TYPES jsr CC.LookupID - bcs CC.TYPE.UCHAR + bcs TYPE.UCHAR cpx #4 only int allowed - beq CC.TYPE.SCHAR + beq TYPE.SCHAR .9 lda #E.CSYN sec rts *-------------------------------------- -CC.TYPE.VOID lda #SYM.T.VOID - bra CC.TYPE +TYPE.VOID lda #SYM.T.VOID + bra TYPE.GetQ -CC.TYPE.CHAR -CC.TYPE.UCHAR lda #SYM.T.UCHAR - bra CC.TYPE +TYPE.CHAR +TYPE.UCHAR lda #SYM.T.UCHAR + bra TYPE.GetQ -CC.TYPE.SCHAR lda #SYM.T.SCHAR - bra CC.TYPE +TYPE.SCHAR lda #SYM.T.SCHAR + bra TYPE.GetQ -CC.TYPE.UINT lda #SYM.T.UINT - bra CC.TYPE +TYPE.UINT lda #SYM.T.UINT + bra TYPE.GetQ -CC.TYPE.INT -CC.TYPE.SINT lda #SYM.T.SINT - bra CC.TYPE +TYPE.INT +TYPE.SINT lda #SYM.T.SINT + bra TYPE.GetQ -CC.TYPE.ULONG lda #SYM.T.ULONG - bra CC.TYPE +TYPE.ULONG lda #SYM.T.ULONG + bra TYPE.GetQ -CC.TYPE.LONG -CC.TYPE.SLONG lda #SYM.T.SLONG - bra CC.TYPE +TYPE.LONG +TYPE.SLONG lda #SYM.T.SLONG + bra TYPE.GetQ -CC.TYPE.FLOAT lda #SYM.T.FLOAT +TYPE.FLOAT lda #SYM.T.FLOAT -CC.TYPE sta (pStack) T +TYPE.GetQ sta (pStack) T - jsr CC.GetCharNB +TYPE.GetQ2 jsr CC.GetCharNB bcs .9 .1 cmp #'*' @@ -140,13 +378,13 @@ CC.TYPE sta (pStack) T sta (pStack),y - jsr CC.GetNextCharNB + jsr CORE.GetNCharNB bcc .1 .9 lda #E.CSYN sec .99 rts - +*-------------------------------------- .10 jsr CC.IsLetter bcs .8 @@ -159,7 +397,7 @@ CC.TYPE sta (pStack) T ora #SYM.Q.FUNC+SYM.Q.FASTCALL sta (pStack),y - jsr CC.GetNextCharNB + jsr CORE.GetNCharNB bcs .9 next char is an identifier, ",", "(",")" .8 clc @@ -168,7 +406,7 @@ CC.TYPE sta (pStack) T * in : Y,A = type/qual * out : X = size *-------------------------------------- -CC.TYPE.SizeOf bit #SYM.Q.PPPOINTER +TYPE.SizeOf bit #SYM.Q.PPPOINTER bne .2 ldx CC.TYPESIZE-1,y diff --git a/BIN/CC.S.txt b/BIN/CC.S.txt index 0ac8fbb6..7d2494d5 100644 --- a/BIN/CC.S.txt +++ b/BIN/CC.S.txt @@ -46,12 +46,15 @@ SYM.SC.EXTERN .EQ 6 SYM.SC.TYPEDEF .EQ 8 SYM.SC.DEFINE .EQ 10 SYM.SC.TAG .EQ 12 -SYM.DefSize .EQ 3 +SYM.hSym .EQ 3 SYM.SizeOf .EQ 4 SYM.Addr .EQ 6 -SYM.Def .EQ 8 Funtions : fTQ,a1TQ,a2TQ.... +SYM.BitO .EQ 8 +SYM.BitW .EQ 9 +SYM.DefSize .EQ 10 +SYM.Def .EQ 11 Funtions : fTQ,a1TQ,a2TQ.... * -SYM .EQ 10 +SYM .EQ 14 *-------------------------------------- SU.F.T .EQ 0 SU.F.Q .EQ 1 @@ -135,20 +138,7 @@ L.LIB.O .DA LIB.O *-------------------------------------- L.CC.AOPS .DA CC.AOPS L.CC.PREOPS .DA CC.PREOPS -J.CC.PREOPS .DA CC.EXP.Ref - .DA CC.EXP.Deref - .DA CC.EXP.Abs - .DA CC.EXP.negate - .DA CC.EXP.lnot - .DA CC.EXP.bnot - .DA CC.EXP.preinc - .DA CC.EXP.predec L.CC.POSTOPS .DA CC.POSTOPS -J.CC.POSTOPS .DA CC.EXP.postinc - .DA CC.EXP.postdec - .DA CC.EXP.idx - .DA CC.EXP.SU - .DA CC.EXP.pSU L.CC.BOPS .DA CC.BOPS L.CC.DIRS .DA CC.DIRS L.CC.KW .DA CC.KW @@ -159,60 +149,77 @@ L.CC.TYPEQUAL .DA CC.TYPEQUAL L.CC.TYPESPEC .DA CC.TYPESPEC L.CC.TYPES .DA CC.TYPES L.CC.FTYPES .DA CC.FTYPES -J.CC.DIRS .DA CC.DIR.DEFINE - .DA CC.DIR.INCLUDE *-------------------------------------- -J.CC.KW .DA CC.KW.IF - .DA CC.KW.WHILE - .DA CC.KW.ELSE - .DA CC.KW.DO - .DA CC.KW.FOR - .DA CC.KW.SWITCH - .DA CC.KW.CASE - .DA CC.KW.DEFAULT - .DA CC.KW.BREAK - .DA CC.KW.CONTINUE - .DA CC.KW.RETURN +J.CC.DIRS .DA DIR.DEFINE + .DA DIR.INCLUDE + .DA DIR.IFDEF + .DA DIR.IFNDEF *-------------------------------------- - .DA CC.KW.SIZEOF - .DA CC.KW.STRUCT - .DA CC.KW.UNION - .DA CC.KW.ENUM +J.CC.PREOPS .DA EXP.Ref + .DA EXP.Deref + .DA EXP.Abs + .DA EXP.negate + .DA EXP.lnot + .DA EXP.bnot + .DA EXP.preinc + .DA EXP.predec *-------------------------------------- -J.CC.KW.END .DA CC.KW.IF.END - .DA CC.KW.WHILE.END - .DA CC.KW.ELSE.END - .DA CC.KW.DO.END - .DA CC.KW.FOR.END - .DA CC.KW.SWITCH.END +J.CC.POSTOPS .DA EXP.postinc + .DA EXP.postdec + .DA EXP.idx + .DA EXP.SU + .DA EXP.pSU *-------------------------------------- -J.CC.SCSPEC .DA CC.SCSPEC.AUTO - .DA CC.SCSPEC.REGISTER - .DA CC.SCSPEC.STATIC - .DA CC.SCSPEC.EXTERN - .DA CC.SCSPEC.TYPEDEF -J.CC.TYPEQUAL .DA CC.TYPE.CONST - .DA CC.TYPE.VOLATILE -J.CC.TYPESPEC .DA CC.TYPE.SIGNED - .DA CC.TYPE.UNSIGNED - .DA CC.TYPE.SHORT -J.CC.TYPES .DA CC.TYPE.VOID - .DA CC.TYPE.CHAR - .DA CC.TYPE.INT - .DA CC.TYPE.LONG - .DA CC.TYPE.FLOAT -J.CC.UTYPES .DA CC.TYPE.UCHAR - .DA CC.TYPE.UINT - .DA CC.TYPE.ULONG -J.CC.STYPES .DA CC.TYPE.SCHAR - .DA CC.TYPE.SINT - .DA CC.TYPE.SLONG +J.CC.KW .DA KW.IF + .DA KW.WHILE + .DA KW.ELSE + .DA KW.DO + .DA KW.FOR + .DA KW.SWITCH + .DA KW.CASE + .DA KW.DEFAULT + .DA KW.BREAK + .DA KW.CONTINUE + .DA KW.RETURN + .DA KW.SIZEOF +*-------------------------------------- +J.CC.KW.END .DA KW.IF.END + .DA KW.WHILE.END + .DA KW.ELSE.END + .DA KW.DO.END + .DA KW.FOR.END + .DA KW.SWITCH.END +*-------------------------------------- +J.CC.SCSPEC .DA DECL.AUTO + .DA DECL.REGISTER + .DA DECL.STATIC + .DA DECL.EXTERN + .DA DECL.TYPEDEF +J.CC.TYPEQUAL .DA TYPE.CONST + .DA TYPE.VOLATILE +J.CC.TYPESPEC .DA TYPE.STRUCT + .DA TYPE.UNION + .DA TYPE.ENUM + .DA TYPE.SIGNED + .DA TYPE.UNSIGNED + .DA TYPE.SHORT +J.CC.TYPES .DA TYPE.VOID + .DA TYPE.CHAR + .DA TYPE.INT + .DA TYPE.LONG + .DA TYPE.FLOAT +J.CC.UTYPES .DA TYPE.UCHAR + .DA TYPE.UINT + .DA TYPE.ULONG +J.CC.STYPES .DA TYPE.SCHAR + .DA TYPE.SINT + .DA TYPE.SLONG *-------------------------------------- L.CC.MAIN .DA CC.MAIN L.CC.SYSCALL .DA CC.SYSCALL L.CC.FPUCALL .DA CC.FPUCALL -L.PCC.FH .DA PCC.FH *-------------------------------------- +L.PCC.FH .DA PCC.FH L.PCC.DEBUG .DA PCC.DEBUG L.PCC.SLEEP .DA PCC.SLEEP L.PCC.ENTER .DA PCC.ENTER @@ -330,15 +337,15 @@ CS.RUN >PUSHW L.MSG.GREETINGS jsr CODE.Init bcs CS.INIT.RTS - jsr CC.FIO.FOpen1st + jsr FIO.FOpen1st bcs CS.INIT.RTS *-------------------------------------- -CS.RUN.CLOOP jsr CC.CompileFile +CS.RUN.CLOOP jsr CORE.CompileFile cmp #MLI.E.EOF bne .9 - jsr CC.FIO.FClose + jsr FIO.FClose bne CS.RUN.CLOOP *-------------------------------------- jsr PrintSummary @@ -346,22 +353,22 @@ CS.RUN.CLOOP jsr CC.CompileFile jsr CC.Link bcs .99 -* >DEBUG + >DEBUG jsr CC.Link.CheckMain bcs .99 dec bPass2 - jsr CC.FIO.FCreate + jsr FIO.FCreate bcs .99 jsr CODE.Init bcs .99 - jsr CC.FIO.FOpen1st + jsr FIO.FOpen1st bcs .99 *-------------------------------------- -.2 jsr CC.CompileFile +.2 jsr CORE.CompileFile cmp #MLI.E.EOF bne .9 @@ -369,7 +376,7 @@ CS.RUN.CLOOP jsr CC.CompileFile jsr CODE.EmitTail bcs .9 - jsr CC.FIO.FClose + jsr FIO.FClose bne .2 *-------------------------------------- .8 lda #0 Exit Code = Success @@ -416,7 +423,7 @@ CS.RUN.ARGS inc ArgIndex >SYSCALL ArgV bcs .90 - jsr CC.FIO.LoadLIB.o + jsr FIO.LoadLIB.o bcc CS.RUN.ARGS rts @@ -672,12 +679,12 @@ CC.AOPS .PS "=" *-------------------------------------- * Pre Operators: & * + - ! ~ ++ -- *-------------------------------------- -CC.PREOPS .PS "&" ref - .PS "*" deref - .PS "+" abs - .PS "-" negate - .PS "!" logical not - .PS "~" bitwise not +CC.PREOPS .PS "&" ref + .PS "*" deref + .PS "+" abs + .PS "-" negate + .PS "!" logical not + .PS "~" bitwise not .PS "++" pre increase .PS "--" pre decrease .HS 00 @@ -738,9 +745,6 @@ CC.KW .PS "if" .PS "continue" .PS "return" .PS "sizeof" - .PS "struct" - .PS "union" - .PS "enum" .HS 00 CC.KW2.IF .PS "else" .HS 00 @@ -754,11 +758,14 @@ CC.SCSPEC .PS "auto" .PS "typedef" .HS 00 *-------------------------------------- -CC.TYPEQUAL .PS "const" ALL +CC.TYPEQUAL .PS "const" ALL .PS "volatile" -CC.TYPESPEC .PS "signed" char,int,long - .PS "unsigned" char,int,long - .PS "short" int +CC.TYPESPEC .PS "struct" + .PS "union" + .PS "enum" + .PS "signed" char,int,long + .PS "unsigned" char,int,long + .PS "short" int CC.TYPES .PS "void" .PS "char" .PS "int" @@ -878,7 +885,7 @@ CC.SYSCALL .PS "chtyp" * .DA #0 * .PS "umount" * .DA #0 -* .PS "online" +* .PS "loadstkobj" * .DA #0 * .PS "getstkobj" * .DA #0 @@ -1024,12 +1031,12 @@ CC.SYSCALL .PS "chtyp" .DA #SYS.Realloc * .PS "getmemptr" * .DA #0 +* .PS "freemem" +* .DA #SYS.FreeMem .PS "free" - .DA #SYS.FreeMem + .DA #SYS.Free * .PS "newstkobj" * .DA #0 -* .PS "loadstkobj" -* .DA #0 * .PS "getstkobjptr" * .DA #0 * .PS "freestkobj" diff --git a/BIN/CHMOD.S.txt b/BIN/CHMOD.S.txt index c1bd1be2..7ede006e 100644 --- a/BIN/CHMOD.S.txt +++ b/BIN/CHMOD.S.txt @@ -328,13 +328,13 @@ CS.END OptionList .AS "CRcr" OptionVars .DA #bContinue,#bRecurse,#bContinue,#bRecurse *-------------------------------------- -MSG.USAGE .AS "Usage : CHMOD mode [File *,? wildcards allowed]\r\n" - .AS " -C : Continue on error\r\n" - .AZ " -R : Recurse subdirectories\r\n" -MSG.OK .AZ "[OK]" -MSG.ERR .AZ "[%h]\r\n" -MSG.DIR .AZ "Dir :%s..." -MSG.FILE .AZ "File:%s..." +MSG.USAGE .CS "Usage : CHMOD mode [File *,? wildcards allowed]\r\n" + .CS " -C : Continue on error\r\n" + .CZ " -R : Recurse subdirectories\r\n" +MSG.OK .CZ "[OK]" +MSG.ERR .CZ "[%h]\r\n" +MSG.DIR .CZ "Dir :%s..." +MSG.FILE .CZ "File:%s..." *-------------------------------------- .DUMMY .OR 0 diff --git a/BIN/CP.S.txt b/BIN/CP.S.txt index c3acf465..d9e603bd 100644 --- a/BIN/CP.S.txt +++ b/BIN/CP.S.txt @@ -25,18 +25,18 @@ OptionVars .DA #bContinue,#bContinue .DA #bRecurse,#bRecurse .DA #bNoConfirm,#bNoConfirm *-------------------------------------- -MSG.USAGE .AS "Usage : CP [Src File/Dir, *,? wildcards allowed]\r\n" - .AS " -C : Continue on error\r\n" - .AS " -Q : Quiet\r\n" - .AS " -R : Recurse subdirectories\r\n" - .AZ " -Y : Don't prompt for override\r\n" -MSG.DIR .AZ "CP Dir :%s to %s..." -MSG.REG .AZ "CP File:%s to %s..." -MSG.OVERWRITE .AZ "Overwrite %s [Yes,No,All]?" -MSG.OK .AZ "[OK]" -MSG.ERR .AS "[%h]" -MSG.CRLF .AZ "\r\n" -MSG.DONE .AZ "%D File(s) Copied.\r\n" +MSG.USAGE .CS "Usage : CP [Src File/Dir, *,? wildcards allowed]\r\n" + .CS " -C : Continue on error\r\n" + .CS " -Q : Quiet\r\n" + .CS " -R : Recurse subdirectories\r\n" + .CZ " -Y : Don't prompt for override\r\n" +MSG.DIR .CZ "CP Dir :%s to %s..." +MSG.REG .CZ "CP File:%s to %s..." +MSG.OVERWRITE .CZ "Overwrite %s [Yes,No,All]?" +MSG.OK .CZ "[OK]" +MSG.ERR .CS "[%h]" +MSG.CRLF .CZ "\r\n" +MSG.DONE .CZ "%D File(s) Copied.\r\n" *-------------------------------------- .DUMMY .OR 0 diff --git a/BIN/CSH.S.txt b/BIN/CSH.S.txt index 7890aa9f..4a47b1d4 100644 --- a/BIN/CSH.S.txt +++ b/BIN/CSH.S.txt @@ -610,7 +610,7 @@ CSH.LIBC .PS "chtyp" .PS "setattr" .PS "mount" .PS "umount" - .PS "online" + .PS "loadstkobj" .PS "getstkobj" .PS "shift" .PS "argv" @@ -682,9 +682,9 @@ CSH.LIBC .PS "chtyp" .PS "malloc" .PS "realloc" .PS "getmemptr" + .PS "freemem" .PS "free" .PS "newstkobj" - .PS "loadstkobj" .PS "getstkobjptr" .PS "freestkobj" .HS 00 diff --git a/BIN/EDIT.S.txt b/BIN/EDIT.S.txt index 8cb5dea2..403dda1f 100644 --- a/BIN/EDIT.S.txt +++ b/BIN/EDIT.S.txt @@ -459,75 +459,75 @@ CharIn.TmpByte10pA *-------------------------------------- CS.END SEQS .EQ * -SEQ.BAR .AZ "\e[7m\e[37;40m" -SEQ.DLG.BAR .AS "\e[0m\e[37;40m" +SEQ.BAR .CZ "\e[7m\e[37;40m" +SEQ.DLG.BAR .CS "\e[0m\e[37;40m" .DA #C.SO,#'x',#C.SI - .AZ "\e[7m\e[37;40m" -SEQ.DLG .AS "\e[30;46m" + .CZ "\e[7m\e[37;40m" +SEQ.DLG .CS "\e[30;46m" .DA #C.SO,#'x',#C.SI .DA #0 -SEQ.DLG.VBAR .AS "\e[37;40m" +SEQ.DLG.VBAR .CS "\e[37;40m" .DA #C.SO,#'x',#C.SI .DA #0 -SEQ.DLG.LBL .AZ "\e[0m\e[30;46m" -SEQ.DLG.TB .AZ "\e[0m\e[93;44m" -SEQ.DLG.BUT .AZ "\e[7m\e[93;44m" -SEQ.EDIT .AS "\e[0m\e[93;44m" +CEOL -SEQ.CEOL .AZ "\e[K" -SEQ.NORM .AZ "\e[0m" -SEQ.INV .AZ "\e[7m" -SEQ.CURSAVE .AZ "\e7" -SEQ.CURRESTORE .AZ "\e8" +SEQ.DLG.LBL .CZ "\e[0m\e[30;46m" +SEQ.DLG.TB .CZ "\e[0m\e[93;44m" +SEQ.DLG.BUT .CZ "\e[7m\e[93;44m" +SEQ.EDIT .CS "\e[0m\e[93;44m" +CEOL +SEQ.CEOL .CZ "\e[K" +SEQ.NORM .CZ "\e[0m" +SEQ.INV .CZ "\e[7m" +SEQ.CURSAVE .CZ "\e7" +SEQ.CURRESTORE .CZ "\e8" *-------------------------------------- -SEQ.RESET .AZ "\ec" -SEQ.INIT .AS "\ec\e(B\e)0" -SEQ.SCROLLRGN .AZ "\e[?7l\e[2;%dr" -SEQ.SCROLLCURUP .AS "\e[?7l\e[%d;%dr" -SEQ.SCROLLUP .AZ "\eD" -SEQ.SCROLLCURDN .AS "\e[?7l\e[%d;%dr" -SEQ.SCROLLDN .AZ "\eM" +SEQ.RESET .CZ "\ec" +SEQ.INIT .CS "\ec\e(B\e)0" +SEQ.SCROLLRGN .CZ "\e[?7l\e[2;%dr" +SEQ.SCROLLCURUP .CS "\e[?7l\e[%d;%dr" +SEQ.SCROLLUP .CZ "\eD" +SEQ.SCROLLCURDN .CS "\e[?7l\e[%d;%dr" +SEQ.SCROLLDN .CZ "\eM" *-------------------------------------- -MSG.TERMCAP .AZ "\e[999;999H\e[6n" -MSG.TOPBAR .AZ "A2osX Edit %d.%d:%s (%s)" -MSG.TXTCR .AZ "TXT/CR" -MSG.TXTCRLF .AZ "TXT/CRLF" -MSG.ASM .AZ "ASM" -MSG.STATUSBAR .AZ "Press Ctrl-A For Help Len:%5D Pos:%5D Col:%3d Line:%5D" -MSG.STATUSBAR.H .AZ "Press any key to exit this screen " -MSG.STATUSBAR.U .AZ "Quit without Saving [Y/N] ? " -MSG.STATUSBAR.S .AZ "%s Saved." -MSG.STATUSBAR.E .AZ "Error:%h" -MSG.GOTOXY .AZ "\e[%d;%dH" -MSG.HELPLINE .AZ "\e[0m\e[93;44m%S\e[K" +MSG.TERMCAP .CZ "\e[999;999H\e[6n" +MSG.TOPBAR .CZ "A2osX Edit %d.%d:%s (%s)" +MSG.TXTCR .CZ "TXT/CR" +MSG.TXTCRLF .CZ "TXT/CRLF" +MSG.ASM .CZ "ASM" +MSG.STATUSBAR .CZ "Press Ctrl-A For Help Len:%5D Pos:%5D Col:%3d Line:%5D" +MSG.STATUSBAR.H .CZ "Press any key to exit this screen " +MSG.STATUSBAR.U .CZ "Quit without Saving [Y/N] ? " +MSG.STATUSBAR.S .CZ "%s Saved." +MSG.STATUSBAR.E .CZ "Error:%h" +MSG.GOTOXY .CZ "\e[%d;%dH" +MSG.HELPLINE .CZ "\e[0m\e[93;44m%S\e[K" *-------------------------------------- -MSG.HELP >PSTR "All commands:" - >PSTR "-------------" - >PSTR " Ctrl-A : This help screen" - >PSTR " Ctrl-B : Mark beginning of selection" - >PSTR " Ctrl-C : Copy selection to clipboard" - >PSTR " Ctrl-D : Delete selection" - >PSTR " Ctrl-E : Mark end of selection" - >PSTR " Ctrl-F : Find/Replace..." - >PSTR " Ctrl-G : Go to start of current line" - >PSTR " Ctrl-L : Go to end of current line" - >PSTR " Ctrl-N : Find next" - >PSTR " Ctrl-O : Page up" - >PSTR " Ctrl-P : Page down" - >PSTR " Ctrl-Q : Quit" - >PSTR " Ctrl-R : Replace next" - >PSTR " Ctrl-S : Save file..." - >PSTR " Ctrl-T : Go to top of file" - >PSTR " Ctrl-V : Paste clipboard at cursor position" - >PSTR " Ctrl-W : Erase current line" - >PSTR " Ctrl-X : Cut block to clipboard" - >PSTR " Ctrl-Y : Go to end of file" - >PSTR " Ctrl-Z : Erase char under cursor" +MSG.HELP .PS "All commands:" + .PS "-------------" + .PS " Ctrl-A : This help screen" + .PS " Ctrl-B : Mark beginning of selection" + .PS " Ctrl-C : Copy selection to clipboard" + .PS " Ctrl-D : Delete selection" + .PS " Ctrl-E : Mark end of selection" + .PS " Ctrl-F : Find/Replace..." + .PS " Ctrl-G : Go to start of current line" + .PS " Ctrl-L : Go to end of current line" + .PS " Ctrl-N : Find next" + .PS " Ctrl-O : Page up" + .PS " Ctrl-P : Page down" + .PS " Ctrl-Q : Quit" + .PS " Ctrl-R : Replace next" + .PS " Ctrl-S : Save file..." + .PS " Ctrl-T : Go to top of file" + .PS " Ctrl-V : Paste clipboard at cursor position" + .PS " Ctrl-W : Erase current line" + .PS " Ctrl-X : Cut block to clipboard" + .PS " Ctrl-Y : Go to end of file" + .PS " Ctrl-Z : Erase char under cursor" .HS 00 *-------------------------------------- MSG.NEWFILE .AZ "newfile" -EscChars .AS "DBAC" +EscChars .AS "DABC" EscChars.Cnt .EQ *-EscChars -EscAscii .HS 080A0B15 +EscAscii .DA #C.BS,#C.VT,#C.LF,#C.FS *-------------------------------------- S.DLG.Size .EQ 0 S.DLG.X .EQ 1 diff --git a/BIN/GTEST.S.txt b/BIN/GTEST.S.txt index d3a04556..f4e6b8af 100644 --- a/BIN/GTEST.S.txt +++ b/BIN/GTEST.S.txt @@ -284,31 +284,49 @@ CS.QUIT lda hFont rts *-------------------------------------- LoadResources >LDYA L.FONTFILE - >SYSCALL LoadStkObj - bcs .99 + ldx #S.FI.T.FON + jsr .1 + bcs .9 + stx hFont >LDYA L.FONTFILEB - >SYSCALL LoadStkObj - bcs .99 + ldx #S.FI.T.FON + jsr .1 + bcs .9 + stx hFontB >LDYA L.MARILYNFILE - >SYSCALL LoadStkObj -.99 bcs .9 + ldx #S.FI.T.PIX + jsr .1 + bcs .9 + stx CB.PIX+S.CB.SrcPtr >LDYA L.LOGOFILE - >SYSCALL LoadStkObj + ldx #S.FI.T.PIX + jsr .1 bcs .9 + stx CB.LOGO+S.CB.SrcPtr >LDYA L.PALETTEFILE - >SYSCALL LoadStkObj + ldx #S.FI.T.PIX + jsr .1 bcs .9 + stx CB.PALETTE+S.CB.SrcPtr .9 rts + +.1 >PUSHYA + >PUSHBI O.RDONLY + txa + >PUSHA type + >PUSHWZ Aux type + >SYSCALL LoadStkObj + rts *-------------------------------------- GFX.Open >PUSHW L.DEVNAME.GFX >PUSHBI 0 diff --git a/BIN/GUITEST1.S.txt b/BIN/GUITEST1.S.txt index 2a678b34..c1726f67 100644 --- a/BIN/GUITEST1.S.txt +++ b/BIN/GUITEST1.S.txt @@ -7,7 +7,7 @@ NEW *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i - .INB inc/kernel.i + .INB inc/mli.i .INB inc/gfx.i .INB inc/libgui.i *-------------------------------------- @@ -55,7 +55,10 @@ CS.INIT >LDYA L.LIBGUI * clc .9 rts *-------------------------------------- -CS.RUN >LDYA L.LOGOFILE +CS.RUN >PUSHW L.LOGOFILE + >PUSHBI O.RDONLY + >PUSHBI S.FI.T.PIX + >PUSHWZ Aux type >SYSCALL LoadStkObj bcs .9 @@ -151,7 +154,7 @@ hLIBGUI .BS 1 *-------------------------------------- MouseData .BS S.MOUSE *-------------------------------------- -LOGOFILE .AZ "${ROOT}root/bmp/A2OSX.LOGO" +LOGOFILE .AZ "${ROOT}A2osX.logo" WND.TITLE .AZ "Window Title" WND.STATUS .AZ "Window status bar message" *-------------------------------------- diff --git a/BIN/LS.S.txt b/BIN/LS.S.txt index ea3e0747..2969aefc 100644 --- a/BIN/LS.S.txt +++ b/BIN/LS.S.txt @@ -110,6 +110,7 @@ CS.RUN ldy #S.PS.hStdOut .10 dec bToFile .1 inc ArgCount + lda ArgCount >SYSCALL ArgV bcs .6 @@ -121,8 +122,9 @@ CS.RUN ldy #S.PS.hStdOut ldy #1 lda (ZPPtr1),y + beq .99 - ldx #OptionVars-OptionList-1 +.20 ldx #OptionVars-OptionList-1 .2 cmp OptionList,x beq .3 @@ -130,7 +132,7 @@ CS.RUN ldy #S.PS.hStdOut dex bpl .2 - >PUSHW L.MSG.USAGE +.99 >PUSHW L.MSG.USAGE >PUSHBI 0 >SYSCALL PrintF @@ -138,9 +140,15 @@ CS.RUN ldy #S.PS.hStdOut sec rts -.3 ldy OptionVars,x - lda #$80 - sta $0,y +.3 lda OptionVars,x + tax +* sec + ror $0,x + + iny + lda (ZPPtr1),y + bne .20 + bra .1 .4 >LDYA ZPPtr1 @@ -880,20 +888,20 @@ CS.END OptionList .AS "ACFLRacflr" OptionVars .DA #bAllmostAll,#bColumn,#bFullPath,#bLong,#bRecurse,#bAllmostAll,#bColumn,#bFullPath,#bLong,#bRecurse *-------------------------------------- -MSG.USAGE .AS "Usage : LS [-A] [-C] [-F] [-L] [-R] [filespec]\r\n" - .AS " -A : Show all files\r\n" - .AS " -C : List in multiple columns\r\n" - .AS " -F : Show full paths\r\n" - .AS " -L : Use long listing format\r\n" - .AZ " -R : Recursively list subdirectories\r\n" +MSG.USAGE .CS "Usage : LS [-A] [-C] [-F] [-L] [-R] [filespec]\r\n" + .CS " -A : Show all files\r\n" + .CS " -C : List in one column\r\n" + .CS " -F : Show full paths\r\n" + .CS " -L : Use long listing format\r\n" + .CZ " -R : Recursively list subdirectories\r\n" *-------------------------------------- -MSG.ENTER .AZ "Directory:" +MSG.ENTER .CZ "Directory:" *-------------------------------------- -MSG.REGEXT .AZ " %10u " -MSG.DIREXT .AZ "