From 33d273b220a49e9fdfd180b53bc64360500a4960 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Tue, 4 May 2021 19:31:21 +0200 Subject: [PATCH] Kernel 0.94++ --- .Docs/Forth Words.md | 2 +- .Docs/KERNEL.md | 55 ++++--- .Docs/LIBBLKDEV.md | 10 +- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes .Floppies/A2OSX.TEST.po | Bin 819200 -> 819200 bytes BIN/ACOS.S.CORE.txt | 120 +++++++++++---- BIN/ACOS.S.EXP.txt | 50 ++----- BIN/ACOS.S.txt | 38 ++--- BIN/ASM.S.EXP.txt | 4 +- BIN/ATTR.S.txt | 5 +- BIN/CHGRP.S.txt | 5 +- BIN/CHMOD.S.txt | 5 +- BIN/CHOWN.S.txt | 5 +- BIN/CHTYP.S.txt | 5 +- BIN/CSH.S.CORE.txt | 25 ++-- BIN/CSH.S.DIR.txt | 6 +- BIN/CSH.S.EXEC.txt | 161 ++++---------------- BIN/CSH.S.EXP.txt | 20 ++- BIN/CSH.S.KW.txt | 16 +- BIN/CSH.S.txt | 91 ++++-------- BIN/CUT.S.txt | 3 +- BIN/ETCONFIG.S.txt | 4 +- BIN/FORTH.S.KW.txt | 296 ++++++++++++++++++------------------- BIN/FORTH.S.txt | 2 +- BIN/IPCONFIG.S.txt | 4 +- BIN/LC.S.txt | 18 ++- BIN/PAK.S.txt | 8 +- BIN/SH.S.CMD.txt | 5 +- BIN/SH.S.EXP.txt | 43 +++--- BIN/SH.S.IO.txt | 2 +- BIN/SH.S.txt | 31 ++-- BIN/UC.S.txt | 16 +- BIN/USERADD.S.txt | 2 +- BIN/USERDEL.S.txt | 7 +- BIN/WC.S.txt | 5 +- DRV/DHGR.DRV.S.txt | 6 +- DRV/GRAPPLER.DRV.S.txt | 12 +- DRV/GRAPPLERP.DRV.S.txt | 12 +- DRV/LANCEGS.DRV.S.txt | 6 +- DRV/MKBOARD.DRV.S.txt | 12 +- DRV/MOUSE.DRV.S.txt | 4 +- DRV/PIC.DRV.S.txt | 12 +- DRV/PPPSSC.DRV.S.txt | 12 +- DRV/UTHER2.AI.DRV.S.txt | 10 +- DRV/UTHERNET.DRV.S.txt | 6 +- DRV/UTHERNET2.DRV.S.txt | 6 +- INC/A2osX.I.txt | 32 ++-- INC/IO.D2.I.txt | 8 +- INC/MACROS.I.txt | 176 +++++++++++++++++----- INCLUDE/string.h.txt | 8 +- LIB/LIBGUI.S.WND.txt | 4 +- LIB/LIBTCPIP.S.CFG.txt | 8 +- LIB/LIBTCPIP.S.DNS.txt | 1 + LIB/string.o.s.txt | 26 +++- ProDOS.FX/ProDOS.S.XRW.txt | 26 ++-- SBIN/HTTPD.S.txt | 5 +- SBIN/NETWORKD.S.txt | 4 +- SHARED/X.CPMVRM.S.txt | 39 +++-- SHARED/X.FILEENUM.S.txt | 3 +- SHARED/X.SSC.DRV.S.txt | 12 +- SYS/KERNEL.S.ARG.txt | 35 ++--- SYS/KERNEL.S.BIN.txt | 37 +++-- SYS/KERNEL.S.BLISTX.txt | 69 +++++---- SYS/KERNEL.S.CORE.txt | 35 +---- SYS/KERNEL.S.CTRL.txt | 17 +-- SYS/KERNEL.S.DEF.txt | 28 ++-- SYS/KERNEL.S.DEV.txt | 11 +- SYS/KERNEL.S.DIRENT.txt | 17 +-- SYS/KERNEL.S.DRV.txt | 29 ++-- SYS/KERNEL.S.ENVX.txt | 18 +-- SYS/KERNEL.S.ERROR.txt | 7 +- SYS/KERNEL.S.ERRORX.txt | 2 +- SYS/KERNEL.S.FS.txt | 6 +- SYS/KERNEL.S.GP.txt | 51 ++++--- SYS/KERNEL.S.INIT.txt | 49 +++--- SYS/KERNEL.S.JMP.txt | 2 +- SYS/KERNEL.S.JMPX.txt | 16 +- SYS/KERNEL.S.MATH.txt | 154 +++++++++++++++---- SYS/KERNEL.S.MATH16.txt | 133 +++++++++++++---- SYS/KERNEL.S.MATH32.txt | 193 +++++++++++++++++------- SYS/KERNEL.S.MD5X.txt | 38 +++-- SYS/KERNEL.S.MOUNT.txt | 3 +- SYS/KERNEL.S.PFT.txt | 7 +- SYS/KERNEL.S.PS.txt | 21 +-- SYS/KERNEL.S.PWD.txt | 8 +- SYS/KERNEL.S.PWDX.txt | 214 +++++++++++++-------------- SYS/KERNEL.S.SHARED.txt | 89 ++++------- SYS/KERNEL.S.SLISTX.txt | 272 +++++++++++----------------------- SYS/KERNEL.S.STAT.txt | 20 ++- SYS/KERNEL.S.STDIO.txt | 111 +++++++------- SYS/KERNEL.S.STDLIB.txt | 12 +- SYS/KERNEL.S.STRING.txt | 37 +++-- SYS/KERNEL.S.STRVX.txt | 24 +-- SYS/KERNEL.S.TERM.txt | 2 +- SYS/KERNEL.S.TERMX.txt | 64 ++++---- SYS/KERNEL.S.TIMEX.txt | 74 +++++----- SYS/KERNEL.S.UNISTD.txt | 59 ++++---- SYS/KERNEL.S.txt | 67 ++++----- 98 files changed, 1838 insertions(+), 1712 deletions(-) diff --git a/.Docs/Forth Words.md b/.Docs/Forth Words.md index ad2cb1a5..326727f6 100644 --- a/.Docs/Forth Words.md +++ b/.Docs/Forth Words.md @@ -270,7 +270,7 @@ The Reference Word Set contain both Standard Word Definitions and uncontrolled | ABORT" | flag -- | I,C | | Used in a colon-definition in the form:
ABORT" stack empty"
If the flag is true, print the following text, till ". Then execute ABORT. | | | AGAIN | | I,C | | Effect an unconditional jump back to the start of a BEGIN-AGAIN loop. | | | ASCII | -- char (executing)
- (compiling) | I,C | | Leave the ASCII character value of the next non-blank character in the input stream. If compiling, compile it as a literal, which will be later left when executed. | | -| ASHIFT | n1 n2 -- n3 | | | Shift the value n1 arithemetically n2 bits left if n2 is positive, shifting zeros into the least-significant bit positions. If n2 is negative, n1 is shifted right. Sign extension is to be consistent with the processor's arithmetic shift. | | +| ASHIFT | n1 n2 -- n3 | | | Shift the value n1 arithmetically n2 bits left if n2 is positive, shifting zeros into the least-significant bit positions. If n2 is negative, n1 is shifted right. Sign extension is to be consistent with the processor's arithmetic shift. | | | B/BUF | -- 1024 | | | A constant leaving 1024, the number of bytes per block buffer. | | | BELL | | | | Activate a terminal bell or noise-maker as appropriate to the device in use. | | | BL | -- n | | | Leave the ASCII character value for space (decimal 32). | | diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index cf411ef0..6fc7cd45 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -122,7 +122,7 @@ Create a hDEV # OpenDir ## C -`int hDIR opendir (const char * dirpath);` +`short int hDIR opendir (const char * dirpath);` ## ASM `>LDYA dirpath` @@ -231,17 +231,21 @@ Return X+Y, X-Y, X*Y, X/Y, X mod Y.... ## RETURN VALUE On stack (long) -# FAdd,FSub,FMult,FDiv,FPwr -Return X+Y, X-Y, X*Y, X/Y, X^Y +# FAdd,FSub,FMul,FDiv,FPwr +Return X*Y, X/Y, X+Y, X-Y + +## C +`float pwr ( float x, float y);` ## ASM **In:** `>PUSHF X (float)` `>PUSHF Y (float)` +`>FPU fmul` +`>FPU fdiv` +`>FPU fmod` TODO `>FPU fadd` `>FPU fsub` -`>FPU fmult` -`>FPU fdiv` `>FPU fpwr` ## RETURN VALUE @@ -424,7 +428,7 @@ Load a file in AUX memory (Stock Objects) # GetStkObj ## C -`int *ptr getstkobj (shoirt int hStkObj);` +`int *ptr getstkobj (short int hStkObj);` ## ASM `lda hStkObj` @@ -480,12 +484,11 @@ A = Child PSID `int kill(short int pid, short int sig);` ## ASM +`>PUSHB pid` `>PUSHB sig` -`lda pid` `>SYSCALL kill` ## RETURN VALUE -A = Child PSID # LoadTxtFile Load TXT a file in memory (with ending 0) @@ -1355,8 +1358,8 @@ Concatenate strings ## ASM **In:** +`>PUSHWI destination` `>PUSHWI source` -`>LDYAI destination` `>SYSCALL strcat` ## RETURN VALUE @@ -1370,8 +1373,8 @@ Copy string ## ASM **In:** +`>PUSHWI destination` `>PUSHWI source` -`>LDYAI destination` `>SYSCALL strcpy` ## RETURN VALUE @@ -1416,8 +1419,8 @@ Compare 2 strings ## ASM **In:** +`>PUSHWI s1` `>PUSHWI s2` -`>LDYAI s1` `>SYSCALL strcmp` ## RETURN VALUE @@ -1434,8 +1437,8 @@ Compare 2 strings, ignoring case ## ASM **In:** +`>PUSHWI s1` `>PUSHWI s2` -`>LDYAI s1` `>SYSCALL strcasecmp` ## RETURN VALUE @@ -1444,11 +1447,21 @@ CS : no match CC, Y,A=0 CS, Y,A > 0 or < 0 +# StrVSet + +## ASM +`>PUSHB hSTRV` +`>PUSHW id` +`>PUSHW ptr` +`>SYSCALL StrVSet` + +## RETURN VALUE + # StrVGet ## ASM `>PUSHB hSTRV` -`>PUSHB index` +`>PUSHW id` `>PUSHW ptr` `>SYSCALL StrVGet` @@ -1456,25 +1469,21 @@ CS : no match CC: Y,A = Ptr CS: Y,A = NULL -# StrVShift +# StrVNew ## ASM -`>PUSHB hSTRV` -`>PUSHB index` -`>SYSCALL StrVShift` +`>LDYA size` +`>SYSCALL StrVNew` ## RETURN VALUE -# StrVAdd +# StrVFree ## ASM -`>PUSHB hSTRV` -`>PUSHW str` -`>SYSCALL StrVAdd` +`lda hSTRV` +`>SYSCALL StrVFree` ## RETURN VALUE -CC : str added to hSTRV -CS : hSTRV full # Time Get System Time in Buffer diff --git a/.Docs/LIBBLKDEV.md b/.Docs/LIBBLKDEV.md index 25355f49..d7d3edad 100644 --- a/.Docs/LIBBLKDEV.md +++ b/.Docs/LIBBLKDEV.md @@ -6,7 +6,7 @@ Copyright 2015 - 2020, Remy Gibert and the A2osX contributors. # D2TrkRead16s Write a track (16 sectors) PUSHB = DSSS0000 - PUSHB = TrackNum * 4 : 0->136+ + PUSHB = TrackNum * 4 : 0->136+ PUSHW = Ptr to 16*256 buffer ## RETURN VALUE @@ -16,7 +16,9 @@ Write a track (16 sectors) # D2TrkWrite16s Write a track (16 sectors) PUSHB = DSSS0000 - PUSHB = TrackNum * 4 : 0->136+ + PUSHB = VolNum + PUSHB = HeadNum (0,1) + PUSHB = TrackNum * 4 : 0->136+ PUSHW = Ptr to 16*256 buffer ## RETURN VALUE @@ -38,7 +40,7 @@ Write a track (NIBBLE) Compute space needed for ProDOS Catalog ## C -int getprodoscatsize (short int options, short int catsize, int devsize ); +int getprodoscatsize (short int options, short int catsize, int devsize ); ## ASM **In:** @@ -46,7 +48,7 @@ int getprodoscatsize (short int options, short int catsize, int devsize ); PUSHB = Catalog Size (in blocks) PUSHB = Options -## RETURN VALUE +## RETURN VALUE X=BlockCount (max 22) Y,A=BufSize (max $4400) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 54293913712ecf5e290c246067152d8874908ea3..2d7bd96951a910740574603523a4c19956a4e861 100644 GIT binary patch delta 186418 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

UXD%(drizWWi=#SZ5KcqcDaDLJ`0 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 diff --git a/BIN/ACOS.S.CORE.txt b/BIN/ACOS.S.CORE.txt index 23bfb8f0..018860ed 100644 --- a/BIN/ACOS.S.CORE.txt +++ b/BIN/ACOS.S.CORE.txt @@ -269,60 +269,128 @@ CORE.Run lda #$0 RTS jmp (ZPCodeBufPtr) *-------------------------------------- -CORE.Lookup >STYA ZPPtr1 +CORE.LookupOPS lda (ZPInputBufPtr) + jsr CORE.IsOPSChar + bcc .55 + + jsr CORE.IsLetter + bcs .99 + + sec + +.55 ror bFlag + + >LDYA L.ACOS.OPS + >STYA ZPPtr1 ldx #0 .1 ldy #$ff -.2 jsr .7 get next valid char in src text - bcs .3 +.2 jsr .10 get next valid char in src text + bcs .4 -.20 jsr CORE.ToUpperCase + jsr CORE.ToUpperCase eor (ZPPtr1),y match table char ? asl compare only 7 bits - bne .4 no match...get next table keyword + bne .6 no match...get next table keyword bcc .2 not last char in this keyword - jsr .7 next char in text... + jsr .10 next char in text... bcc .4 valid....failed -.8 tya Keyword Len +.3 tya Keyword Len jmp CORE.SkipA -.3 dey +.4 dey lda (ZPPtr1),y was last char in this keyword ? - bmi .8 + bmi .3 iny -.41 jsr CORE.IncPtr1 skip chars to next keyword +.5 jsr CORE.IncPtr1 skip chars to next keyword -.4 lda (ZPPtr1) - bpl .41 +.6 lda (ZPPtr1) + bpl .5 jsr CORE.IncPtr1 -.6 inx inx lda (ZPPtr1) Array Ending 0, lookup failed bne .1 .9 sec rts +*-------------------------------------- +.10 iny + lda (ZPInputBufPtr),y Get Src text char... + beq .19 end of text -.7 iny + bit bFlag + bmi .11 Letter expected + + jmp CORE.IsOPSChar + +.11 jmp CORE.IsLetter + +.19 sec +.99 rts +*-------------------------------------- +CORE.Lookup >STYA ZPPtr1 + + ldx #0 + +.1 ldy #$ff + +.2 jsr .10 get next valid char in src text + bcs .4 + + jsr CORE.ToUpperCase + eor (ZPPtr1),y match table char ? + asl compare only 7 bits + bne .6 no match...get next table keyword + + bcc .2 not last char in this keyword + + jsr .10 next char in text... + bcc .4 valid....failed + +.3 tya Keyword Len + + jmp CORE.SkipA + +.4 dey + lda (ZPPtr1),y was last char in this keyword ? + bmi .3 + + iny +.5 jsr CORE.IncPtr1 skip chars to next keyword + +.6 lda (ZPPtr1) + bpl .5 + + jsr CORE.IncPtr1 + + inx + inx + lda (ZPPtr1) Array Ending 0, lookup failed + bne .1 + +.9 sec + rts +*-------------------------------------- +.10 iny lda (ZPInputBufPtr),y Get Src text char... beq .9 end of text cmp #'$' - bne .70 + bne .11 clc rts -.70 jmp CORE.IsLetterOrDigit CS=end of valid chars +.11 jmp CORE.IsLetterOrDigit CS=end of valid chars *-------------------------------------- CORE.IncPtr1 inc ZPPtr1 bne .8 @@ -517,22 +585,22 @@ CORE.ToUpperCase CORE.ToUpperCase.RTS rts *-------------------------------------- -CORE.IsAOPSChar ldx #0 +CORE.IsOPSChar phx + + ldx #ACOS.OPSChars.Cnt-1 -.1 cmp ACOS.AOPSChars,x +.1 cmp ACOS.OPSChars,x beq .8 - inx - cpx #ACOS.AOPSChars.Cnt - bcc .1 + dex + bpl .1 + plx + sec rts -.8 txa - asl - tax - -* clc +.8 plx + clc rts *-------------------------------------- CORE.IsEndExp cmp #')' diff --git a/BIN/ACOS.S.EXP.txt b/BIN/ACOS.S.EXP.txt index 28e9d6b0..da09795a 100644 --- a/BIN/ACOS.S.EXP.txt +++ b/BIN/ACOS.S.EXP.txt @@ -15,7 +15,7 @@ EXP.Eval.R lda EXP.AOPS *-------------------------------------- .10 jsr CORE.GetCharNB bcs .39 - + .11 cmp #'(' bne .12 @@ -27,11 +27,11 @@ EXP.Eval.R lda EXP.AOPS jsr CORE.GetCharNB bcs .39 - + cmp #')' sec bne .39 - + jsr CORE.GetNextCharNB skip ) bra .41 @@ -81,8 +81,8 @@ EXP.Eval.R lda EXP.AOPS .50 jsr CORE.IsEndExp bcs .80 - - jsr EXP.GetOP + + jsr CORE.LookupOPS bcs .90 stx EXP.AOPS @@ -95,8 +95,9 @@ EXP.Eval.R lda EXP.AOPS inc pStack prev op has precedence - tax - jsr EXP.OPjmpX go compute (arg1 op1 arg2) + tay + ldx ACOS.OPS.MAP-1,y + jsr CODE.FPUCALL go compute (arg1 op1 arg2) .62 lda EXP.AOPS we must compute arg2 op2 arg3 before >PUSHA @@ -106,10 +107,11 @@ EXP.Eval.R lda EXP.AOPS jmp .11 *-------------------------------------- .80 >PULLA - tax + tay bmi .88 nothing to do - jsr EXP.OPjmpX + ldx ACOS.OPS.MAP-1,y + jsr CODE.FPUCALL bra .80 .90 lda #E.ESYN @@ -132,7 +134,6 @@ EXP.Eval.R lda EXP.AOPS rts *-------------------------------------- EXP.FNjmpX jmp (J.ACOS.FN,x) -EXP.OPjmpX jmp (J.ACOS.AOPS,x) *-------------------------------------- EXP.CreateStrConst lda #'$' @@ -174,20 +175,6 @@ EXP.CreateStrConst * sec rts *-------------------------------------- -EXP.GetOP jsr CORE.IsAOPSChar + - * / - bcc .9 - - >LDYA L.ACOS.AOPS MOD - jsr CORE.Lookup - bcs .9 - - txa -* clc - adc #ACOS.AOPSChars.Cnt*2 - tax - -.9 rts -*-------------------------------------- EXP.Int16 >PUSHW ZPInputBufPtr >PUSHWI ZPInputBufPtr >PUSHBI 10 @@ -247,21 +234,6 @@ EXP.VARLookup >LDA.G hVars sec rts *-------------------------------------- -EXP.ADD ldx #FPU.ADD16 - jmp CODE.FPUCALL - -EXP.SUB ldx #FPU.SUB16 - jmp CODE.FPUCALL - -EXP.MUL ldx #FPU.IMUL16 - jmp CODE.FPUCALL - -EXP.DIV ldx #FPU.IDIV16 - jmp CODE.FPUCALL - -EXP.MOD ldx #FPU.IMOD16 - jmp CODE.FPUCALL -*-------------------------------------- *-------------------------------------- MAN SAVE usr/src/bin/acos.s.exp diff --git a/BIN/ACOS.S.txt b/BIN/ACOS.S.txt index 5fe8df1d..f65b9c75 100644 --- a/BIN/ACOS.S.txt +++ b/BIN/ACOS.S.txt @@ -61,7 +61,7 @@ CS.START cld .DA #0 .DA CS.END-CS.START Code Size (without Constants) .DA DS.END-DS.START Data SegmentSize - .DA #128 Stack Size + .DA #256 Stack Size .DA #ZS.END-ZS.START Zero Page Size .DA 0 *-------------------------------------- @@ -84,13 +84,7 @@ L.MSG.FWREFERR .DA MSG.FWREFERR L.MSG.STR .DA MSG.STR L.MSG.INT16 .DA MSG.INT16 *-------------------------------------- -L.ACOS.AOPS .DA ACOS.AOPS -J.ACOS.AOPS .DA EXP.ADD - .DA EXP.SUB - .DA EXP.MUL - .DA EXP.DIV - .DA EXP.MOD -L.ACOS.BOPS .DA ACOS.BOPS +L.ACOS.OPS .DA ACOS.OPS L.ACOS.KW .DA ACOS.KW J.ACOS.KW .DA KW.ADDINT .DA KW.APPEND @@ -515,26 +509,34 @@ MSG.INT16 .AZ "%I" OptionList .AS "DdTt" OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace *-------------------------------------- -ACOS.AOPSChars .AS "+-*/" -ACOS.AOPSChars.Cnt .EQ *-ACOS.AOPSChars +ACOS.OPSChars .AS "+-*/<>=" +ACOS.OPSChars.Cnt .EQ *-ACOS.OPSChars *-------------------------------------- -ACOS.AOPS .AT "MOD" - .HS 00 -*-------------------------------------- -ACOS.BOPS .AT "=" - .AT "<>" - .AT "><" +ACOS.OPS .AT "*" + .AT "/" + .AT "MOD" + .AT "+" + .AT "-" .AT "<" - .AT ">" .AT "<=" .AT "=<" + .AT ">" .AT ">=" .AT "=>" - .AT "NOT" + .AT "<>" + .AT "><" + .AT "=" +* .AT "NOT" .AT "AND" .AT "OR" .HS 00 *-------------------------------------- +ACOS.OPS.MAP .DA #FPU.iMUL,#FPU.iDIV,#FPU.iMOD,#FPU.iADD,#FPU.iSUB + .DA #FPU.iL,#FPU.iLE,#FPU.iLE + .DA #FPU.iG,#FPU.iGE,#FPU.iGE + .DA #FPU.iNE,#FPU.iNE,#FPU.iE + .DA #FPU.iLAND,#FPU.iLOR +*-------------------------------------- ACOS.KW .AT "ADDINT" .AT "APPEND" .AT "BYTE" diff --git a/BIN/ASM.S.EXP.txt b/BIN/ASM.S.EXP.txt index d776f7dc..9d840a71 100644 --- a/BIN/ASM.S.EXP.txt +++ b/BIN/ASM.S.EXP.txt @@ -387,14 +387,14 @@ EXP.OP.SUB ldx #0 ARG-ACC->ACC *--------------------------------------- EXP.OP.MUL >PUSHL SRC.ARG >PUSHL SRC.ACC - >FPU MUL32 + >FPU uMUL >PULLL SRC.ACC clc rts *--------------------------------------- EXP.OP.DIV >PUSHL SRC.ARG >PUSHL SRC.ACC - >FPU DIV32 + >FPU uDIV >PULLL SRC.ACC clc rts diff --git a/BIN/ATTR.S.txt b/BIN/ATTR.S.txt index fbf64ca7..301c23fc 100644 --- a/BIN/ATTR.S.txt +++ b/BIN/ATTR.S.txt @@ -279,13 +279,14 @@ CS.RUN.SetAttr >PUSHW ZPFullPath rts *-------------------------------------- CS.RUN.GetFilePath + >PUSHW ZPFullPath >LDA.G hSrcBasePath >SYSCALL GetMemPtr >PUSHYA - >LDYA ZPFullPath >SYSCALL StrCpy + + >PUSHW ZPFullPath >PUSHW ZPFileName - >LDYA ZPFullPath >SYSCALL StrCat rts *-------------------------------------- diff --git a/BIN/CHGRP.S.txt b/BIN/CHGRP.S.txt index 83258bc8..ec5876aa 100644 --- a/BIN/CHGRP.S.txt +++ b/BIN/CHGRP.S.txt @@ -255,13 +255,14 @@ CS.RUN.CheckErr bcs .1 rts *-------------------------------------- CS.RUN.GetFilePath + >PUSHW ZPFullPath >LDA.G hSrcBasePath >SYSCALL GetMemPtr >PUSHYA - >LDYA ZPFullPath >SYSCALL StrCpy + + >PUSHW ZPFullPath >PUSHW ZPFileName - >LDYA ZPFullPath >SYSCALL StrCat rts *-------------------------------------- diff --git a/BIN/CHMOD.S.txt b/BIN/CHMOD.S.txt index a64316fb..c1bd1be2 100644 --- a/BIN/CHMOD.S.txt +++ b/BIN/CHMOD.S.txt @@ -296,13 +296,14 @@ CS.RUN.CheckErr bcs .1 rts *-------------------------------------- CS.RUN.GetFilePath + >PUSHW ZPFullPath >LDA.G hSrcBasePath >SYSCALL GetMemPtr >PUSHYA - >LDYA ZPFullPath >SYSCALL StrCpy + + >PUSHW ZPFullPath >PUSHW ZPFileName - >LDYA ZPFullPath >SYSCALL StrCat rts *-------------------------------------- diff --git a/BIN/CHOWN.S.txt b/BIN/CHOWN.S.txt index 24e67ae5..6e59d50b 100644 --- a/BIN/CHOWN.S.txt +++ b/BIN/CHOWN.S.txt @@ -257,13 +257,14 @@ CS.RUN.CheckErr bcs .1 rts *-------------------------------------- CS.RUN.GetFilePath + >PUSHW ZPFullPath >LDA.G hSrcBasePath >SYSCALL GetMemPtr >PUSHYA - >LDYA ZPFullPath >SYSCALL StrCpy + + >PUSHW ZPFullPath >PUSHW ZPFileName - >LDYA ZPFullPath >SYSCALL StrCat rts *-------------------------------------- diff --git a/BIN/CHTYP.S.txt b/BIN/CHTYP.S.txt index 246d45c8..31774c70 100644 --- a/BIN/CHTYP.S.txt +++ b/BIN/CHTYP.S.txt @@ -238,13 +238,14 @@ CS.RUN.CheckErr bcs .1 rts *-------------------------------------- CS.RUN.GetFilePath + >PUSHW ZPFullPath >LDA.G hSrcBasePath >SYSCALL GetMemPtr >PUSHYA - >LDYA ZPFullPath >SYSCALL StrCpy + + >PUSHW ZPFullPath >PUSHW ZPFileName - >LDYA ZPFullPath >SYSCALL StrCat rts *-------------------------------------- diff --git a/BIN/CSH.S.CORE.txt b/BIN/CSH.S.CORE.txt index 5ba13baa..ec48254b 100644 --- a/BIN/CSH.S.CORE.txt +++ b/BIN/CSH.S.CORE.txt @@ -171,7 +171,7 @@ CSH.Run.1 cmp #C.CR empty line.... cmp #';' beq .8 -.99 lda #CSH.E.SYNTAX +.99 lda #E.CSYN sec .9 rts @@ -200,7 +200,7 @@ CSH.COMMENTS jsr CSH.GetNextChar jmp CSH.SkipLine skip line..... -.90 lda #CSH.E.SYNTAX +.90 lda #E.CSYN sec rts *-------------------------------------- @@ -339,9 +339,9 @@ CSH.AddSymbol >LDA.G CSH.hSymbols >SYSCALL SListAddData .9 rts -.99 lda #CSH.E.OOM +.99 lda #E.OOM .HS 2C BIT ABS -CSH.TMISMATCH lda #CSH.E.TMISMATCH +CSH.TMISMATCH lda #E.TMISMATCH sec rts *-------------------------------------- @@ -367,7 +367,7 @@ CSH.fDeclaration clc rts -.9 lda #CSH.E.SYNTAX +.9 lda #E.CSYN sec .99 rts *-------------------------------------- @@ -381,7 +381,7 @@ CSH.GetDeclaration bra .8 -.9 lda #CSH.E.SYNTAX +.9 lda #E.CSYN sec .8 >LEAVE rts @@ -422,7 +422,7 @@ CSH.SetVarValueFromStack clc rts -.99 lda #CSH.E.TMISMATCH +.99 lda #E.TMISMATCH sec rts *-------------------------------------- @@ -551,7 +551,7 @@ CSH.GetVarValueOnStack clc X = Var Type .9 rts -.99 lda #CSH.E.TMISMATCH +.99 lda #E.TMISMATCH sec rts *-------------------------------------- @@ -598,7 +598,7 @@ CSH.CheckStack tax clc rts -.9 lda #CSH.E.SYNTAX +.9 lda #E.CSYN sec rts *-------------------------------------- @@ -614,12 +614,13 @@ CSH.Push pha rts .9 pla - lda #CSH.E.SOVERFLW + lda #E.STKOVERFLOW sec rts *-------------------------------------- CSH.Pop >LDA.G CSH.StackPtr beq .9 + pha inc sta (pData),y @@ -628,7 +629,7 @@ CSH.Pop >LDA.G CSH.StackPtr clc rts -.9 lda #CSH.E.STACKERR +.9 lda #E.STACKERROR sec rts *-------------------------------------- @@ -711,7 +712,7 @@ CSH.CheckSpace jsr CSH.GetChar jsr CSH.GetNextCharNB bcc CSH.GetNextCharNB.RTS -.90 lda #CSH.E.SYNTAX +.90 lda #E.CSYN sec rts *-------------------------------------- diff --git a/BIN/CSH.S.DIR.txt b/BIN/CSH.S.DIR.txt index decb212a..c23d4364 100644 --- a/BIN/CSH.S.DIR.txt +++ b/BIN/CSH.S.DIR.txt @@ -16,7 +16,7 @@ CSH.DIR jsr CSH.GetNextCharNB jmp (J.CSH.DIRS,x) -.91 lda #CSH.E.INVDIR +.91 lda #E.CSYN sec .99 rts *-------------------------------------- @@ -63,7 +63,7 @@ CSH.DIR.DEFINE jsr CSH.CheckSpace jmp CSH.SkipLine -.90 lda #CSH.E.SYNTAX +.90 lda #E.CSYN sec .99 rts *-------------------------------------- @@ -105,7 +105,7 @@ CSH.DIR.INCLUDE >STZ.G PathBuf cpy #64 bne .3 -.90 lda #CSH.E.SYNTAX +.90 lda #E.CSYN sec .99 rts diff --git a/BIN/CSH.S.EXEC.txt b/BIN/CSH.S.EXEC.txt index 52682d3e..e4a52cff 100644 --- a/BIN/CSH.S.EXEC.txt +++ b/BIN/CSH.S.EXEC.txt @@ -2,14 +2,30 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- -* A = Type, X = OP +* Y = Type, A = OP *-------------------------------------- -CSH.BOP.EXEC jmp (J.CSH.BOPS,x) -*-------------------------------------- -CSH.BOPS.ADD asl - tax - jmp (J.CSH.BOPS.ADDt,x) +CSH.BOP.EXEC cpy #CSH.T.UINT + bcs .1 + +.1 clc + adc CSH.Type2FPU-3,y + tax + jsr A2osX.FPUCALL + + clc + rts +*-------------------------------------- +CSH.BOPS.MUL clc + rts +*-------------------------------------- +CSH.BOPS.DIV clc + rts +*-------------------------------------- +CSH.BOPS.MOD clc + rts +*-------------------------------------- +CSH.BOPS.ADD CSH.BOPS.ADDi8 CSH.BOPS.ADDu8 clc >PULLA @@ -17,24 +33,8 @@ CSH.BOPS.ADDu8 clc sta (pStack) clc rts - -CSH.BOPS.ADDi16 -CSH.BOPS.ADDu16 >FPU ADD16 - clc - rts -CSH.BOPS.ADDi32 -CSH.BOPS.ADDu32 >FPU ADD32 - clc - rts - -CSH.BOPS.ADDf >FPU FADD - clc - rts *-------------------------------------- -CSH.BOPS.SUB asl - tax - jmp (J.CSH.BOPS.SUBt,x) - +CSH.BOPS.SUB CSH.BOPS.SUBi8 CSH.BOPS.SUBu8 sec ldy #1 @@ -44,52 +44,8 @@ CSH.BOPS.SUBu8 sec inc pStack clc rts - -CSH.BOPS.SUBi16 -CSH.BOPS.SUBu16 >FPU SUB16 - clc - rts -CSH.BOPS.SUBi32 -CSH.BOPS.SUBu32 >FPU SUB32 - clc - rts - -CSH.BOPS.SUBf >FPU FSUB - clc - rts *-------------------------------------- -CSH.BOPS.MUL cmp #CSH.T.FLOAT - beq .8 - - >FPU MUL32 - - - - - clc - rts - -.8 >FPU FMULT - clc - rts -*-------------------------------------- -CSH.BOPS.DIV cmp #CSH.T.FLOAT - beq .8 - - clc - rts - -.8 >FPU FDIV - clc - rts -*-------------------------------------- -CSH.BOPS.MOD clc - rts -*-------------------------------------- -CSH.BOPS.SHL asl - tax - jmp (J.CSH.BOPS.SHLt,x) - +CSH.BOPS.SHL CSH.BOPS.SHL8 lda (pStack) tax beq .8 @@ -106,80 +62,20 @@ CSH.BOPS.SHL8 lda (pStack) .8 inc pStack clc rts - -CSH.BOPS.SHL16 lda (pStack) - tax - beq .8 - - ldy #2 - lda (pStack),y - - iny - -.1 asl - pha - - lda (pStack),y - rol - sta (pStack),y - pla - dex - bne .1 - - dey - sta (pStack),y - -.8 inc pStack - inc pStack - clc - rts - -CSH.BOPS.SHL32 lda (pStack) - tax - beq .8 - - ldy #4 - lda (pStack),y - -.1 asl - pha - - ldy #5 - lda (pStack),y - rol - sta (pStack),y - iny - lda (pStack),y - rol - sta (pStack),y - iny - lda (pStack),y - rol - sta (pStack),y - pla - dex - bne .1 - - ldy #4 - sta (pStack),y - -.8 inc pStack - inc pStack - inc pStack - inc pStack - clc - rts *-------------------------------------- CSH.BOPS.SHR + CSH.BOPS.L CSH.BOPS.G CSH.BOPS.LE CSH.BOPS.GE CSH.BOPS.EQ CSH.BOPS.NE + CSH.BOPS.AND CSH.BOPS.OR CSH.BOPS.EOR + CSH.BOPS.LAND CSH.BOPS.LOR @@ -224,7 +120,8 @@ EXEC.puts >PULLYA >PUSHYA rts *-------------------------------------- -EXEC.printf >SYSCALL PrintF +EXEC.printf + >SYSCALL PrintF >PUSHYA rts *-------------------------------------- diff --git a/BIN/CSH.S.EXP.txt b/BIN/CSH.S.EXP.txt index 29b53eed..c995721e 100644 --- a/BIN/CSH.S.EXP.txt +++ b/BIN/CSH.S.EXP.txt @@ -115,9 +115,8 @@ CSH.ExpEval ldx ZPPtr1 cmp ZPPtr2+1 bcc .33 OP(n) has precedence, on stack : V1,V2 - tax OP(n-1) has precedence... + ldy ZPPtr2 OP(n-1) has precedence... - lda ZPPtr2 Var Type jsr CSH.BOP.EXEC compute V(n-1) V(n) bcc .32 @@ -129,16 +128,16 @@ CSH.ExpEval ldx ZPPtr1 jmp .10 go check for next token *-------------------------------------- -.80 plx any OP on stack ? +.80 pla any OP on stack ? bmi .88 - lda ZPPtr2 Var Type + ldy ZPPtr2 Var Type jsr CSH.BOP.EXEC bcc .80 bcs .99 -.90 lda #CSH.E.SYNTAX +.90 lda #E.ESYN .99 plx bpl .99 @@ -186,7 +185,8 @@ CSH.AddContCharP clc rts -.9 lda #CSH.E.SYNTAX + +.9 lda #E.ESYN sec rts *-------------------------------------- @@ -194,11 +194,9 @@ CSH.GetNumOnStack txa beq .99 - cpx #CSH.T.ULONG+1 - bcs .99 - cpx #CSH.T.FLOAT - bne .1 + bcc .1 + bne .99 >PUSHW ZPInputBufPtr >PUSHWI ZPInputBufPtr @@ -244,7 +242,7 @@ CSH.GetNumOnStack .8 clc .9 rts -.99 lda #CSH.E.TMISMATCH +.99 lda #E.TMISMATCH sec rts *-------------------------------------- diff --git a/BIN/CSH.S.KW.txt b/BIN/CSH.S.KW.txt index 8996165e..eb928b9a 100644 --- a/BIN/CSH.S.KW.txt +++ b/BIN/CSH.S.KW.txt @@ -52,7 +52,7 @@ CSH.IF jsr CSH.GetCharNB .6 jsr CSH.SkipBlock bcc .99 -.9 lda #CSH.E.SYNTAX +.9 lda #E.CSYN sec .99 rts *-------------------------------------- @@ -76,7 +76,7 @@ CSH.BREAK CSH.CONTINUE CSH.SIZEOF *-------------------------------------- -CSH.TYPEDEF lda #CSH.E.SYNTAX +CSH.TYPEDEF lda #E.CSYN sec rts *-------------------------------------- @@ -124,7 +124,7 @@ CSH.CONST lda ZPVarQual clc rts -.9 lda #CSH.E.SYNTAX +.9 lda #E.CSYN sec rts *-------------------------------------- @@ -157,7 +157,7 @@ CSH.UNSIGNED clc .9 plp - lda #CSH.E.SYNTAX + lda #E.CSYN sec rts *-------------------------------------- @@ -172,7 +172,7 @@ CSH.SHORT jsr CSH.CheckSpace cpx #4 only int allowed beq CSH.SCHAR -.9 lda #CSH.E.SYNTAX +.9 lda #E.CSYN sec rts *-------------------------------------- @@ -272,7 +272,7 @@ CSH.TYPE stx ZPVarType .8 clc rts -.9 lda #CSH.E.SYNTAX +.9 lda #E.CSYN sec .99 rts *-------------------------------------- @@ -389,9 +389,9 @@ CSH.fCall ldx ZPPtr1 plx restore returned type rts -.90 lda #CSH.E.SYNTAX +.90 lda #E.CSYN .HS 2C BIT ABS -.91 lda #CSH.E.TMISMATCH +.91 lda #E.TMISMATCH sec .9 plx Discard function index diff --git a/BIN/CSH.S.txt b/BIN/CSH.S.txt index 0dd02927..4e34bedf 100644 --- a/BIN/CSH.S.txt +++ b/BIN/CSH.S.txt @@ -10,20 +10,22 @@ NEW .INB inc/mli.i .INB inc/mli.e.i *-------------------------------------- -CSH.E.SYNTAX .EQ $C0 -CSH.E.STACKERR .EQ $C2 -CSH.E.SOVERFLW .EQ $C3 -*E.NOWHILE .EQ $C4 -*E.NOFOR .EQ $C5 -*E.NOIF .EQ $C6 -CSH.E.UNEXPEOF .EQ $C8 -CSH.E.UNDEF .EQ $C9 -CSH.E.INVDIR .EQ $CA -* -CSH.E.NOVERFLW .EQ $D0 -CSH.E.TMISMATCH .EQ $D1 -CSH.E.OOM .EQ $D2 -CSH.E.DUP .EQ $D3 +CSH.T.VOID .EQ 0 +CSH.T.UCHAR .EQ 1 +CSH.T.SCHAR .EQ 2 +CSH.T.UINT .EQ 3 +CSH.T.SINT .EQ 4 +CSH.T.ULONG .EQ 5 +CSH.T.SLONG .EQ 6 +CSH.T.FLOAT .EQ 7 +CSH.T.VARIADIC .EQ $FF +*-------------------------------------- +CSH.Q.POINTER .EQ %01000000 +CSH.Q.PPOINTER .EQ %10000000 +CSH.Q.PPPOINTER .EQ %11000000 +CSH.Q.PCONST .EQ %00100000 +CSH.Q.CONST .EQ %00010000 +CSH.Q.FUNC .EQ %00001000 *-------------------------------------- * Zero Page Segment, up to 32 bytes *-------------------------------------- @@ -86,16 +88,16 @@ L.MSG.DEBUG .DA MSG.DEBUG L.MSG.ERR .DA MSG.ERR L.ENV.INCLUDE .DA ENV.INCLUDE L.CSH.BOPS .DA CSH.BOPS -J.CSH.BOPS .DA CSH.BOPS.ADD - .DA CSH.BOPS.SUB - .DA CSH.BOPS.MUL +J.CSH.BOPS .DA CSH.BOPS.MUL .DA CSH.BOPS.DIV .DA CSH.BOPS.MOD + .DA CSH.BOPS.ADD + .DA CSH.BOPS.SUB .DA CSH.BOPS.SHL .DA CSH.BOPS.SHR .DA CSH.BOPS.L - .DA CSH.BOPS.G .DA CSH.BOPS.LE + .DA CSH.BOPS.G .DA CSH.BOPS.GE .DA CSH.BOPS.EQ .DA CSH.BOPS.NE @@ -104,30 +106,6 @@ J.CSH.BOPS .DA CSH.BOPS.ADD .DA CSH.BOPS.EOR .DA CSH.BOPS.LAND .DA CSH.BOPS.LOR -J.CSH.BOPS.ADDt .DA CSH.TMISMATCH - .DA CSH.BOPS.ADDi8 - .DA CSH.BOPS.ADDi16 - .DA CSH.BOPS.ADDi32 - .DA CSH.BOPS.ADDu8 - .DA CSH.BOPS.ADDu16 - .DA CSH.BOPS.ADDu32 - .DA CSH.BOPS.ADDf -J.CSH.BOPS.SUBt .DA CSH.TMISMATCH - .DA CSH.BOPS.SUBi8 - .DA CSH.BOPS.SUBi16 - .DA CSH.BOPS.SUBi32 - .DA CSH.BOPS.SUBu8 - .DA CSH.BOPS.SUBu16 - .DA CSH.BOPS.SUBu32 - .DA CSH.BOPS.SUBf -J.CSH.BOPS.SHLt .DA CSH.TMISMATCH - .DA CSH.BOPS.SHL8 - .DA CSH.BOPS.SHL16 - .DA CSH.BOPS.SHL32 - .DA CSH.BOPS.SHL8 - .DA CSH.BOPS.SHL16 - .DA CSH.BOPS.SHL32 - .DA CSH.TMISMATCH L.CSH.FN .DA CSH.FN L.CSH.DIRS .DA CSH.DIRS L.CSH.KW .DA CSH.KW @@ -450,23 +428,6 @@ OptionList .AS "DdTt" OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace *-------------------------------------- *-------------------------------------- -CSH.T.VOID .EQ 0 -CSH.T.SCHAR .EQ 1 -CSH.T.SINT .EQ 2 -CSH.T.SLONG .EQ 3 -CSH.T.FLOAT .EQ 4 -CSH.T.UCHAR .EQ 5 -CSH.T.UINT .EQ 6 -CSH.T.ULONG .EQ 7 -CSH.T.VARIADIC .EQ $FF -*-------------------------------------- -CSH.Q.POINTER .EQ %01000000 -CSH.Q.PPOINTER .EQ %10000000 -CSH.Q.PPPOINTER .EQ %11000000 -CSH.Q.PCONST .EQ %00100000 -CSH.Q.CONST .EQ %00010000 -CSH.Q.FUNC .EQ %00001000 -*-------------------------------------- CSH.OPChars .AS "!~+-*/%=&|^<>" CSH.OPChars.Cnt .EQ *-CSH.OPChars *-------------------------------------- @@ -505,16 +466,16 @@ CSH.AOPS >PSTR "=" * Bitwise Operators: & | ^ ~ * Logical Operators: && || *-------------------------------------- -CSH.BOPS >PSTR "+" - >PSTR "-" - >PSTR "*" +CSH.BOPS >PSTR "*" >PSTR "/" >PSTR "%" + >PSTR "+" + >PSTR "-" >PSTR "<<" >PSTR ">>" >PSTR "<" - >PSTR ">" >PSTR "<=" + >PSTR ">" >PSTR ">=" >PSTR "==" >PSTR "!=" @@ -525,6 +486,8 @@ CSH.BOPS >PSTR "+" >PSTR "||" .HS 00 *-------------------------------------- +CSH.Type2FPU .DA #FPU.wMUL,#FPU.iMUL,#FPU.uMUL,#FPU.lMUL,FPU.fMUL +*-------------------------------------- * Reserved Directives: *-------------------------------------- CSH.DIRS >PSTR "define" @@ -559,7 +522,7 @@ CSH.TYPES >PSTR "void" CSH.FTYPES >PSTR "fastcall" * .HS 00 *-------------------------------------- -CSH.TYPESIZE .HS 0001020405010204 +CSH.TYPESIZE .HS 0001010202040405 *-------------------------------------- CSH.FN * float cos ( float x ); diff --git a/BIN/CUT.S.txt b/BIN/CUT.S.txt index 3bcfcb3e..95eccb92 100644 --- a/BIN/CUT.S.txt +++ b/BIN/CUT.S.txt @@ -126,10 +126,11 @@ CS.RUN lda #C.SPACE lda ArgIndex beq .80 + >PUSHW ZPBufPtr >SYSCALL ArgV >PUSHYA - >LDYA ZPBufPtr >SYSCALL StrCpy + jsr CS.RUN.OUT bcs .9 diff --git a/BIN/ETCONFIG.S.txt b/BIN/ETCONFIG.S.txt index 914c0f7f..d06298ab 100644 --- a/BIN/ETCONFIG.S.txt +++ b/BIN/ETCONFIG.S.txt @@ -136,8 +136,8 @@ CS.RUN.DUMP >PUSHB ETKCFG+S.NETCFG.DevID >LEA.G DCB.NIC >STYA IOCTL+S.IOCTL.BUFPTR - lda #S.IOCTL.STATCODE.GETDCB - sta IOCTL+S.IOCTL.STATCODE + lda #S.IOCTL.S.GETDCB + sta IOCTL+S.IOCTL.S >PUSHB ETKCFG+S.NETCFG.DevID >PUSHBI IOCTL.STATUS diff --git a/BIN/FORTH.S.KW.txt b/BIN/FORTH.S.KW.txt index 3880712a..1b6e6d13 100644 --- a/BIN/FORTH.S.KW.txt +++ b/BIN/FORTH.S.KW.txt @@ -3,11 +3,11 @@ NEW *-------------------------------------- KW.Lookup >LDYA L.KEYWORDS >STYA ZPPtr1 - + ldx #0 .1 ldy #$ff - + .2 jsr .7 get next valid char in src text bcs .3 @@ -24,8 +24,8 @@ KW.Lookup >LDYA L.KEYWORDS .8 tya Keyword Len jsr NextKW - - clc + + clc rts .3 dey @@ -50,7 +50,7 @@ KW.Lookup >LDYA L.KEYWORDS .7 iny lda (ZPCLBufPtr),y Get Src text char... beq .9 end of text - + jmp IsSpaceOrCR CS=end of valid chars *-------------------------------------- KW.INVALID lda #E.CSYN @@ -61,7 +61,7 @@ KW.qDUP lda (pStack) ldy #1 ora (pStack),y bne KW.DUP - + clc rts *-------------------------------------- @@ -70,10 +70,10 @@ KW.DUP lda pStack cmp #$FF bcs .9 - + cmp #2 bcc .99 - + ldy #1 lda (pStack),y >PUSHA @@ -81,25 +81,25 @@ KW.DUP lda pStack >PUSHA clc rts - + .9 lda #E.STACKERROR sec rts - + .99 lda #E.STKOVERFLOW sec - rts + rts *-------------------------------------- KW.DROP lda pStack beq .9 - + inc pStack beq .9 inc pStack clc rts - + .9 lda #E.STACKERROR sec rts @@ -107,16 +107,16 @@ KW.DROP lda pStack KW.SWAP ldy #3 lda (pStack),y pha - + dey #2 lda (pStack),y pha - + lda (pStack) tax pla sta (pStack) - + txa sta (pStack),y #2 @@ -136,10 +136,10 @@ KW.SWAP ldy #3 *-------------------------------------- KW.OVER jsr CheckStackPop4 bcs .9 - + cmp #2 bcc .99 - + ldy #3 lda (pStack),y >PUSHA @@ -155,19 +155,19 @@ KW.OVER jsr CheckStackPop4 *-------------------------------------- KW.ROT lda pStack beq .9 - + cmp #$FB bcs .9 - + ldy #5 lda (pStack),y n1 HI pha dey lda (pStack),y n1 LO pha - + .1 dey - + lda (pStack),y iny iny @@ -177,101 +177,101 @@ KW.ROT lda pStack bne .1 iny - + pla sta (pStack) pla sta (pStack),y - + clc rts - + .9 lda #E.STACKERROR sec - rts + rts *-------------------------------------- KW.Add jsr CheckStackPop4 bcs .9 - - >FPU ADD16 + + >FPU iADD clc .9 rts *-------------------------------------- -KW.DAdd >FPU ADD32 +KW.DAdd >FPU lADD clc rts *-------------------------------------- KW.Sub jsr CheckStackPop4 bcs .9 - - >FPU SUB16 + + >FPU iSUB clc .9 rts *-------------------------------------- -KW.DSub >FPU SUB32 +KW.DSub >FPU lSUB clc rts *-------------------------------------- KW.Mul jsr CheckStackPop4 bcs .9 - - >FPU IMUL16 + + >FPU iMUL clc .9 rts *-------------------------------------- KW.Div jsr KW.DivMoD.1 bcs .9 - + >LDYA ZPPtr2 jsr KW.PushWSigned - + clc - -.9 rts + +.9 rts *-------------------------------------- KW.Mod jsr KW.DivMoD.1 bcs .9 - + >PUSHW ZPPtr3 - -.9 rts + +.9 rts *-------------------------------------- KW.DivMod jsr KW.DivMoD.1 bcs .9 - + >PUSHW ZPPtr3 >LDYA ZPPtr2 jsr KW.PushWSigned - + clc - -.9 rts + +.9 rts *-------------------------------------- KW.MulDivMod *-------------------------------------- -KW.MulDiv +KW.MulDiv lda #E.SYN sec rts *-------------------------------------- KW.DivMoD.1 jsr CheckStackPop4 bcs .9 - + jsr KW.GetPtr1Ptr2Sign - + stz ZPPtr3 stz ZPPtr3+1 - + ldx #16 - + .1 asl ZPPtr2 rol ZPPtr2+1 rol ZPPtr3 rol ZPPtr3+1 - + sec lda ZPPtr3 sbc ZPPtr1 @@ -279,58 +279,58 @@ KW.DivMoD.1 jsr CheckStackPop4 lda ZPPtr3+1 sbc ZPPtr1+1 bcs .2 - + pla dex bne .1 - + bra .8 - + .2 sta ZPPtr3+1 pla sta ZPPtr3 inc ZPPtr2 - + dex bne .1 - + .8 clc -.9 rts +.9 rts *-------------------------------------- KW.GetPtr1Ptr2Sign >PULLW ZPPtr1 sta Sign - + asl bcc .1 - + lda ZPPtr1 clc eor #$ff adc #1 sta ZPPtr1 - + lda ZPPtr1+1 eor #$ff adc #0 sta ZPPtr1+1 - + .1 >PULLW ZPPtr2 - + asl bcc .8 - + lda ZPPtr2 clc eor #$ff adc #1 sta ZPPtr2 - + lda ZPPtr2+1 eor #$ff adc #0 sta ZPPtr2+1 - + lda Sign eor #$80 sta Sign @@ -339,29 +339,29 @@ KW.GetPtr1Ptr2Sign *-------------------------------------- KW.PushWSigned bit Sign bpl .8 - + pha tya - + clc eor #$ff adc #1 tay - + pla eor #$ff adc #0 - + .8 >PUSHYA rts *-------------------------------------- KW.MAX jsr CheckStackPop4 bcs .9 - + lda (pStack) LO ldy #2 - cmp (pStack),y - + cmp (pStack),y + dey #1 lda (pStack),y HI @@ -369,20 +369,20 @@ KW.MAX jsr CheckStackPop4 iny #3 sbc (pStack),y bcc .1 - + jsr KW.SWAP - + .1 jmp KW.DROP -.9 rts +.9 rts *-------------------------------------- KW.MIN jsr CheckStackPop4 bcs .9 - + lda (pStack) LO ldy #2 - cmp (pStack),y - + cmp (pStack),y + dey #1 lda (pStack),y HI @@ -390,12 +390,12 @@ KW.MIN jsr CheckStackPop4 iny #3 sbc (pStack),y bcs .1 - + jsr KW.SWAP - + .1 jmp KW.DROP -.9 rts +.9 rts *-------------------------------------- KW.ABS ldy #1 @@ -451,7 +451,7 @@ KW.DNEGATE.8 clc *-------------------------------------- KW.AND jsr CheckStackPop4 bcs .9 - + ldy #2 lda (pStack),y and (pStack) @@ -469,7 +469,7 @@ KW.AND jsr CheckStackPop4 *-------------------------------------- KW.OR jsr CheckStackPop4 bcs .9 - + ldy #2 lda (pStack),y ora (pStack) @@ -487,7 +487,7 @@ KW.OR jsr CheckStackPop4 *-------------------------------------- KW.XOR jsr CheckStackPop4 bcs .9 - + ldy #2 lda (pStack),y eor (pStack) @@ -505,7 +505,7 @@ KW.XOR jsr CheckStackPop4 *-------------------------------------- KW.LWR jsr CheckStackPop4 bcs .9 - + ldy #2 lda (pStack),y cmp (pStack) @@ -527,7 +527,7 @@ KW.LWR jsr CheckStackPop4 *-------------------------------------- KW.GTR jsr CheckStackPop4 bcs .9 - + ldy #2 lda (pStack),y cmp (pStack) @@ -548,7 +548,7 @@ KW.GTR jsr CheckStackPop4 .9 rts *-------------------------------------- -* : TL BEGIN DUP . 1 - DUP 0 = UNTIL ; +* : TL BEGIN DUP . 1 - DUP 0 = UNTIL ; *-------------------------------------- KW.EQ jsr CheckStackPop4 bcs .9 @@ -569,12 +569,12 @@ KW.EQ jsr CheckStackPop4 tay bne .1 - + txa bne .1 - + sec - + .1 inc pStack sta (pStack) @@ -592,15 +592,15 @@ KW.ZERO clc lda (pStack),y ora (pStack) bne .9 - + sec .9 lda #0 ror - + inc pStack sta (pStack) - + * clc rts *-------------------------------------- @@ -652,7 +652,7 @@ KW.D. >PUSHW L.FMT.int32 >PUSHBI 4 >SYSCALL PrintF - + >RET 4 *-------------------------------------- KW.D.R @@ -661,7 +661,7 @@ KW.D.R rts *-------------------------------------- KW.CR >PUSHW L.MSG.ECHOCRLF - >PUSHBI 0 + >PUSHBI 0 >SYSCALL PrintF rts *-------------------------------------- @@ -670,13 +670,13 @@ KW.SPACE lda #C.SPACE rts *-------------------------------------- KW.SPACES >PULLA - + beq .8 .1 dec - + pha - + lda #C.SPACE >SYSCALL PutChar pla @@ -688,38 +688,38 @@ KW.SPACES >PULLA KW.PRINT >LDYAI 256 >SYSCALL GetMem bcs .9 - + >STYA ZPPtr1 phx ldy #$ff - - clc - + + clc + .1 iny lda (ZPCLBufPtr),y beq .2 - + sta (ZPPtr1),y eor #'" bne .1 - + sec - + .2 sta (ZPPtr1),y - tya + tya adc ZPCLBufPtr sta ZPCLBufPtr bcc .3 inc ZPCLBufPtr+1 - + .3 >LDYA ZPPtr1 >SYSCALL PutS - + pla >SYSCALL FreeMem - + .9 rts *-------------------------------------- KW.DUMP @@ -735,9 +735,9 @@ KW.TERMINAL *-------------------------------------- KW.KEY >SYSCALL GetChar bcs .9 - + >PUSHA - + .9 rts *-------------------------------------- KW.EMIT >PULLA @@ -773,7 +773,7 @@ KW.OCTAL lda #E.SYN KW.FETCHSP lda pStack+1 ldy pStack bne .1 - + inc .1 >PUSHYA @@ -785,7 +785,7 @@ KW.FETCHW lda (pStack) ldy #1 lda (pStack),y sta ZPAddrPtr+1 - + lda (ZPAddrPtr) sta (pStack) lda (ZPAddrPtr),y @@ -836,7 +836,7 @@ KW.CMOVE *-------------------------------------- KW.FILL >PULLA bra KW.FILL2 - + KW.ERASE lda #0 bra KW.FILL2 @@ -848,14 +848,14 @@ KW.FILL2 tax tay >PULLW ZPAddrPtr - + txa - + .1 dey sta (ZPAddrPtr),y cpy #0 bne .1 - + clc rts *-------------------------------------- @@ -866,10 +866,10 @@ KW.HERE >PUSHW ZPDataPtr KW.PAD >PUSHW ZPOutputBufPtr clc rts - + KW.ALLOT.9 lda #E.STACKERROR sec - rts + rts *-------------------------------------- KW.ALLOT lda #SYM.T.VAR sta ZPType @@ -879,36 +879,36 @@ KW.ALLOT lda #SYM.T.VAR cmp #$FF bcs KW.ALLOT.9 - + >PUSHB.G hSList >PUSHW ZPCLBufPtr >SYSCALL SListNewKey bcs .9 - + >STYA ZPKeyID - + txa jsr NextKW - + >LDYA ZPDataPtr >STYA ZPAddrPtr - + >PULLA clc adc ZPDataPtr sta ZPDataPtr - + >PULLA adc ZPDataPtr+1 sta ZPDataPtr+1 - + >PUSHB.G hSList >PUSHW ZPKeyID >PUSHWI ZPType >PUSHWI 4 >SYSCALL SListAddData - + .9 rts *-------------------------------------- KW.nCOMPILE @@ -925,16 +925,16 @@ KW.ASSEMBLER *-------------------------------------- KW.VLIST stz ZPPtr1 stz ZPPtr1+1 - + .1 >LDYA ZPPtr1 >STYA ZPKeyID - + >PUSHB.G hSList >PUSHW ZPKeyID >PUSHW ZPOutputBufPtr >SYSCALL SListGetByID bcs .8 - + >STYA ZPPtr1 Save Next ID jsr CS.RUN.GetSymbolData @@ -958,13 +958,13 @@ KW.VLIST stz ZPPtr1 >PUSHBI 6 >SYSCALL PrintF jmp .1 - + .8 clc -.9 rts - +.9 rts + KW.VC.9 lda #E.STACKERROR sec - rts + rts *-------------------------------------- KW.VARIABLE lda #SYM.T.VAR bra KM.VC @@ -978,40 +978,40 @@ KM.VC sta ZPType cmp #$FF bcs KW.VC.9 - + >PUSHB.G hSList >PUSHW ZPCLBufPtr >SYSCALL SListNewKey bcs .9 - + >STYA ZPKeyID - + txa jsr NextKW - + bit ZPType bvs .1 - + >PULLW ZPAddrPtr - + bra .2 - + .1 >PULLA sta (ZPDataPtr) >PULLA ldy #1 sta (ZPDataPtr),y - + >LDYA ZPDataPtr >STYA ZPAddrPtr - + lda ZPDataPtr clc adc #2 sta ZPDataPtr bcc .2 - + inc ZPDataPtr+1 .2 >PUSHB.G hSList @@ -1027,18 +1027,18 @@ KW.BCOLON >PUSHB.G hSList >SYSCALL SListNewKey bcs .9 - + >STYA ZPKeyID txa jsr NextKW - + lda #SYM.T.CODE sta ZPType - + >LDYA ZPCodePtr >STYA ZPAddrPtr - + >PUSHB.G hSList >PUSHW ZPKeyID >PUSHWI ZPType diff --git a/BIN/FORTH.S.txt b/BIN/FORTH.S.txt index 8c5aa303..ff1c08fa 100644 --- a/BIN/FORTH.S.txt +++ b/BIN/FORTH.S.txt @@ -423,7 +423,7 @@ CS.RUN.LOOP >SLEEP >PUSHA >PUSHW ZPCLBuf - >SYSCALL GetErrorMessage + >SYSCALL GetErrMsg >LDYA ZPCLBuf >SYSCALL PutS bcc CS.RUN.LOOP diff --git a/BIN/IPCONFIG.S.txt b/BIN/IPCONFIG.S.txt index 67cf2fe5..0857b4ec 100644 --- a/BIN/IPCONFIG.S.txt +++ b/BIN/IPCONFIG.S.txt @@ -211,8 +211,8 @@ CS.RUN.DUMP >PUSHB IPCFG+S.NETCFG.DevID >LEA.G DCB.NIC >STYA.G IOCTL+S.IOCTL.BUFPTR - lda #S.IOCTL.STATCODE.GETDCB - >STA.G IOCTL+S.IOCTL.STATCODE + lda #S.IOCTL.S.GETDCB + >STA.G IOCTL+S.IOCTL.S >PUSHB IPCFG+S.NETCFG.DevID >PUSHBI IOCTL.STATUS diff --git a/BIN/LC.S.txt b/BIN/LC.S.txt index efdd4954..7b285218 100644 --- a/BIN/LC.S.txt +++ b/BIN/LC.S.txt @@ -97,6 +97,7 @@ CS.RUN >INC.G ArgIndex >LDYAI 256 >SYSCALL GetMem bcs .99 + >STYA ZPNewPath txa >STA.G hSrcNewPath @@ -218,11 +219,12 @@ CS.RUN.FILE jsr FilterMatch >SYSCALL PrintF bcs .9 - >PUSHW ZPFullPath jsr CS.RUN.GetNewPath - >PUSHYA + + >PUSHW ZPFullPath + >PUSHW ZPNewPath >SYSCALL Rename - jsr CS.RUN.CheckErr + bra CS.RUN.CheckErr .8 clc .9 rts @@ -246,28 +248,30 @@ CS.RUN.CheckErr bcs .1 rts *-------------------------------------- CS.RUN.GetFilePath + >PUSHW ZPFullPath >LDA.G hSrcBasePath >SYSCALL GetMemPtr >PUSHYA - >LDYA ZPFullPath >SYSCALL StrCpy + + >PUSHW ZPFullPath >PUSHW ZPFileName - >LDYA ZPFullPath >SYSCALL StrCat rts *-------------------------------------- CS.RUN.GetNewPath + >PUSHW ZPNewPath >LDA.G hSrcBasePath >SYSCALL GetMemPtr >PUSHYA - >LDYA ZPNewPath >SYSCALL StrCpy + >PUSHW ZPNewPath + >LDYA ZPFileName >SYSCALL StrLwr >PUSHW ZPFileName - >LDYA ZPNewPath >SYSCALL StrCat rts *-------------------------------------- diff --git a/BIN/PAK.S.txt b/BIN/PAK.S.txt index 1324ea0e..30745309 100644 --- a/BIN/PAK.S.txt +++ b/BIN/PAK.S.txt @@ -278,6 +278,7 @@ CS.RUN.FILE jsr CS.RUN.BuildFilePath tay lda Nod.Table.hName-2,y >SYSCALL GetMemPtr + >PUSHYA >SYSCALL StrCmp bcc .8 @@ -347,18 +348,15 @@ CS.RUN.CheckErr bcs .1 rts *-------------------------------------- CS.RUN.BuildFilePath + >PUSHW ZPFullPath >LDA.G hSrcBasePath >SYSCALL GetMemPtr >PUSHYA - - >LDYA ZPFullPath - >SYSCALL StrCpy + >PUSHW ZPFullPath >PUSHW ZPFileName - >LDYA ZPFullPath >SYSCALL StrCat - rts *-------------------------------------- CS.RUN.OpenFile >PUSHW ZPFullPath diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index 10c76f38..ca85f62c 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -502,8 +502,8 @@ CMD.REN lda (ZPArgVBufPtr) lda #0 sta (ZPPtr2),y + >PUSHW ZPPtr2 >PUSHW ZPArgVBufPtr - >LDYA ZPPtr2 >SYSCALL StrCat lda ZPTmpW @@ -776,6 +776,7 @@ CMD.CASE jsr CORE.StkGetCtx Get context in CORE.TestResult dey get hVALUE lda (pData),y >SYSCALL GetMemPtr + >PUSHYA >SYSCALL StrCmp ror CS if != and #$80 @@ -832,8 +833,8 @@ CMD.FOR jsr CORE.StkGetCtx jsr CORE.ArgV.Next beq CMD.E.CSYN + >PUSHW L.IN >PUSHW ZPArgVBufPtr - >LDYA L.IN >SYSCALL StrCaseCmp bcs CMD.E.CSYN diff --git a/BIN/SH.S.EXP.txt b/BIN/SH.S.EXP.txt index 72e79f5c..8dd51b50 100644 --- a/BIN/SH.S.EXP.txt +++ b/BIN/SH.S.EXP.txt @@ -219,29 +219,38 @@ EXP.OP.UNARY.X jsr CMD.CALL.GETFUNC bra EXP.OP.UNARY.DEF.8 TRUE *-------------------------------------- EXP.TEST.BINARY lda CORE.Operator - cmp #6 =, !=, <= <, >=, > - bcs EXP.TEST.BINARY.NUM - >LDYA ZPArgVBufPrev + cmp #6 + bcc EXP.TEST.BINARY.NUM + + >LDYA ZPArgVBufPrev =, !=, <= <, >=, > >STYA ZPPtr1 jsr CORE.ArgV.Next beq EXP.TEST.BINARY.ESYN >PUSHW ZPPtr1 - >LDYA ZPArgVBufPtr + >PUSHW ZPArgVBufPtr >SYSCALL StrCmp bcs .1 CS if != lda #%010 010 str1 = str2 - bra EXP.TEST.BINARY.END + bra .3 .1 asl CS if < bcs .2 lda #%100 010 str1 < str2 - bra EXP.TEST.BINARY.END + bra .3 .2 lda #%001 010 str1 > str2 - bra EXP.TEST.BINARY.END + +.3 ldx CORE.Operator + and EXP.OP.BINARY.BITS-6,x + beq .8 false + + lda #$80 true + +.8 clc + rts EXP.TEST.BINARY.ESYN4 jsr IncPStack4 @@ -259,26 +268,18 @@ EXP.TEST.BINARY.NUM jsr EXP.GetInt32Arg bcs EXP.TEST.BINARY.ESYN4 - >FPU CMP32 + lda CORE.Operator +* clc + adc #FPU.lL tax - bmi .4 ACC < ARG + jsr A2osX.FPUCALL - bne .5 - lda #%010 010 ACC = ARG - bra EXP.TEST.BINARY.END -.4 lda #%100 100 ACC > ARG - bra EXP.TEST.BINARY.END -.5 lda #%001 001 ACC < ARG - -EXP.TEST.BINARY.END - clc - ldx CORE.Operator - and EXP.OP.BINARY.BITS,x + lda (pStack) beq .8 false lda #$80 true -.8 rts +.8 >RET 4 *-------------------------------------- EXP.GetInt8Exp jsr EXP.GET bcc EXP.GetInt8YA diff --git a/BIN/SH.S.IO.txt b/BIN/SH.S.IO.txt index 3e9bb930..ee2ffba0 100644 --- a/BIN/SH.S.IO.txt +++ b/BIN/SH.S.IO.txt @@ -269,7 +269,7 @@ IO.PrintErrMsg ldy #S.PS.RC >PUSHW ZPCLBuf - >SYSCALL GetErrorMessage + >SYSCALL GetErrMsg .8 ldy #S.PS.hStdErr lda (pPS),y diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index 20a50593..0f4e9206 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -643,45 +643,38 @@ EXP.OP.UNARY .AT "-D" .AT "-X" .AT "-Z" .HS 00 -EXP.OP.BINARY .AT "=" +EXP.OP.BINARY .AT "-LT" + .AT "-LE" + .AT "-GT" + .AT "-GE" + .AT "-EQ" + .AT "-NE" + .AT "=" .AT "!=" .AT ".<" .AT "<=" .AT ".>" .AT ">=" - .AT "-EQ" - .AT "-NE" - .AT "-LT" - .AT "-LE" - .AT "-GT" - .AT "-GE" .HS 00 -EXP.OP.MATH .AT "+" - .AT "-" - .AT "*" +EXP.OP.MATH .AT "*" .AT "/" .AT "MOD" + .AT "+" + .AT "-" .HS 00 EXP.OP.LOGIC .AT "AND" .AT "OR" .HS 00 *-------------------------------------- EXP.OP.BINARY.BITS - .DA #%010 + .DA #%010 strcmp .DA #%101 .DA #%100 .DA #%110 .DA #%001 .DA #%011 - .DA #%010 - .DA #%101 - .DA #%100 - .DA #%110 - .DA #%001 - .DA #%011 - -EXP.OP.MATH.FPU .DA #FPU.ADD32,#FPU.SUB32,#FPU.IMUL32,#FPU.IDIV32,#FPU.IMOD32 +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 diff --git a/BIN/UC.S.txt b/BIN/UC.S.txt index a446e689..0a9046be 100644 --- a/BIN/UC.S.txt +++ b/BIN/UC.S.txt @@ -218,11 +218,12 @@ CS.RUN.FILE jsr FilterMatch >SYSCALL PrintF bcs .9 - >PUSHW ZPFullPath jsr CS.RUN.GetNewPath - >PUSHYA + >PUSHW ZPFullPath + >PUSHW ZPNewPath >SYSCALL Rename - jsr CS.RUN.CheckErr + + bra CS.RUN.CheckErr .8 clc .9 rts @@ -246,28 +247,29 @@ CS.RUN.CheckErr bcs .1 rts *-------------------------------------- CS.RUN.GetFilePath + >PUSHW ZPFullPath >LDA.G hSrcBasePath >SYSCALL GetMemPtr >PUSHYA - >LDYA ZPFullPath >SYSCALL StrCpy + + >PUSHW ZPFullPath >PUSHW ZPFileName - >LDYA ZPFullPath >SYSCALL StrCat rts *-------------------------------------- CS.RUN.GetNewPath + >PUSHW ZPNewPath >LDA.G hSrcBasePath >SYSCALL GetMemPtr >PUSHYA - >LDYA ZPNewPath >SYSCALL StrCpy >LDYA ZPFileName >SYSCALL StrUpr + >PUSHW ZPNewPath >PUSHW ZPFileName - >LDYA ZPNewPath >SYSCALL StrCat rts *-------------------------------------- diff --git a/BIN/USERADD.S.txt b/BIN/USERADD.S.txt index 1ed0d2d1..8547bba1 100644 --- a/BIN/USERADD.S.txt +++ b/BIN/USERADD.S.txt @@ -157,7 +157,7 @@ CS.RUN.ROOT ldy #0 >PUSHW ZPStrPtr >SYSCALL MD5 >PUSHW ZPStrPtr - >LEA.G PW+S.PW.PASSWD + >PUSHEA.G PW+S.PW.PASSWD >SYSCALL StrCmp bcs .99 diff --git a/BIN/USERDEL.S.txt b/BIN/USERDEL.S.txt index 6c2c56be..231d7c0f 100644 --- a/BIN/USERDEL.S.txt +++ b/BIN/USERDEL.S.txt @@ -155,10 +155,12 @@ CS.RUN.RmDir lda bDelete >SYSCALL Remove rts -.1 >PUSHW L.CMD.RM - >LDYA ZPStrPtr +.1 >PUSHW ZPStrPtr + >PUSHW L.CMD.RM >SYSCALL StrCpy + >PUSHW ZPStrPtr + lda pData clc adc #S.PW.DIR @@ -166,7 +168,6 @@ CS.RUN.RmDir lda bDelete lda pData+1 adc /S.PW.DIR >PUSHYA - >LDYA ZPStrPtr >SYSCALL StrCat >PUSHW ZPStrPtr diff --git a/BIN/WC.S.txt b/BIN/WC.S.txt index 0e592794..45113ef7 100644 --- a/BIN/WC.S.txt +++ b/BIN/WC.S.txt @@ -344,13 +344,14 @@ CS.RUN.CheckErr bcc .9 .9 rts *-------------------------------------- CS.RUN.GetFilePath + >PUSHW ZPFullPath >LDA.G hSrcBasePath >SYSCALL GetMemPtr >PUSHYA - >LDYA ZPFullPath >SYSCALL StrCpy + + >PUSHW ZPFullPath >PUSHW ZPFileName - >LDYA ZPFullPath >SYSCALL StrCat rts *-------------------------------------- diff --git a/DRV/DHGR.DRV.S.txt b/DRV/DHGR.DRV.S.txt index 48d48f6d..9c069a30 100644 --- a/DRV/DHGR.DRV.S.txt +++ b/DRV/DHGR.DRV.S.txt @@ -355,10 +355,10 @@ STATUS >STYA ZPIOCTL lda (ZPIOCTL),y sta ZPBasePtr+1 - ldy #S.IOCTL.STATCODE + ldy #S.IOCTL.S lda (ZPIOCTL),y beq .1 - cmp #S.IOCTL.STATCODE.GETDIB + cmp #S.IOCTL.S.GETDIB bne STATUS.DCB ldy #S.DIB-1 .HS 2C bit abs @@ -370,7 +370,7 @@ STATUS >STYA ZPIOCTL clc rts -STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB +STATUS.DCB cmp #S.IOCTL.S.GETDCB bne STATUS.9 ldy #S.DCB.GFX-1 diff --git a/DRV/GRAPPLER.DRV.S.txt b/DRV/GRAPPLER.DRV.S.txt index 91ab8fdb..80fbe013 100644 --- a/DRV/GRAPPLER.DRV.S.txt +++ b/DRV/GRAPPLER.DRV.S.txt @@ -156,10 +156,10 @@ DRV.CS.START cld .DA 0 end or relocation *-------------------------------------- STATUS jsr STATUS.CONTROL.Init - ldy #S.IOCTL.STATCODE + ldy #S.IOCTL.S lda (ZPIOCTL),y beq .1 - cmp #S.IOCTL.STATCODE.GETDIB + cmp #S.IOCTL.S.GETDIB bne STATUS.DCB ldy #S.DIB-1 .HS 2C bit abs @@ -172,7 +172,7 @@ STATUS jsr STATUS.CONTROL.Init clc rts -STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB +STATUS.DCB cmp #S.IOCTL.S.GETDCB bne .3 ldy #S.DCB.COM-1 @@ -183,7 +183,7 @@ STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB clc rts -.3 cmp #S.IOCTL.STATCODE.EOF +.3 cmp #S.IOCTL.S.EOF bne STATUS.9 lda DIB+S.DIB.S @@ -199,9 +199,9 @@ STATUS.9 lda #MLI.E.BADCTL *-------------------------------------- CONTROL jsr STATUS.CONTROL.Init - ldy #S.IOCTL.CTRLCODE + ldy #S.IOCTL.C lda (ZPIOCTL),y - cmp #S.IOCTL.CTRLCODE.SETDCB + cmp #S.IOCTL.C.SETDCB bne STATUS.9 ldy #S.DCB.COM-1 .2 lda (ZPBufPtr),y diff --git a/DRV/GRAPPLERP.DRV.S.txt b/DRV/GRAPPLERP.DRV.S.txt index db01cb30..8a1724bc 100644 --- a/DRV/GRAPPLERP.DRV.S.txt +++ b/DRV/GRAPPLERP.DRV.S.txt @@ -157,10 +157,10 @@ DRV.CS.START cld .DA 0 end or relocation *-------------------------------------- STATUS jsr STATUS.CONTROL.Init - ldy #S.IOCTL.STATCODE + ldy #S.IOCTL.S lda (ZPIOCTL),y beq .1 - cmp #S.IOCTL.STATCODE.GETDIB + cmp #S.IOCTL.S.GETDIB bne STATUS.DCB ldy #S.DIB-1 .HS 2C bit abs @@ -173,7 +173,7 @@ STATUS jsr STATUS.CONTROL.Init clc rts -STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB +STATUS.DCB cmp #S.IOCTL.S.GETDCB bne .3 ldy #S.DCB.COM-1 @@ -184,7 +184,7 @@ STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB clc rts -.3 cmp #S.IOCTL.STATCODE.EOF +.3 cmp #S.IOCTL.S.EOF bne STATUS.9 lda DIB+S.DIB.S @@ -200,9 +200,9 @@ STATUS.9 lda #MLI.E.BADCTL *-------------------------------------- CONTROL jsr STATUS.CONTROL.Init - ldy #S.IOCTL.CTRLCODE + ldy #S.IOCTL.C lda (ZPIOCTL),y - cmp #S.IOCTL.CTRLCODE.SETDCB + cmp #S.IOCTL.C.SETDCB bne STATUS.9 ldy #S.DCB.COM-1 .2 lda (ZPBufPtr),y diff --git a/DRV/LANCEGS.DRV.S.txt b/DRV/LANCEGS.DRV.S.txt index 4e4c0c6e..6e270fa3 100644 --- a/DRV/LANCEGS.DRV.S.txt +++ b/DRV/LANCEGS.DRV.S.txt @@ -178,10 +178,10 @@ DRV.CS.START cld *-------------------------------------- STATUS >STYA ZPIOCTL - ldy #S.IOCTL.STATCODE + ldy #S.IOCTL.S lda (ZPIOCTL),y beq .1 - cmp #S.IOCTL.STATCODE.GETDIB + cmp #S.IOCTL.S.GETDIB bne STATUS.DCB ldx #S.DIB-1 @@ -204,7 +204,7 @@ STATUS >STYA ZPIOCTL clc rts -STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB +STATUS.DCB cmp #S.IOCTL.S.GETDCB bne STATUS.9 stz DCB+S.DCB.NIC.LINK diff --git a/DRV/MKBOARD.DRV.S.txt b/DRV/MKBOARD.DRV.S.txt index ffcbb46d..22498a10 100644 --- a/DRV/MKBOARD.DRV.S.txt +++ b/DRV/MKBOARD.DRV.S.txt @@ -153,10 +153,10 @@ DRV.CS.START cld .DA 0 end or relocation *-------------------------------------- STATUS jsr STATUS.CONTROL.Init - ldy #S.IOCTL.STATCODE + ldy #S.IOCTL.S lda (ZPIOCTL),y beq .1 - cmp #S.IOCTL.STATCODE.GETDIB + cmp #S.IOCTL.S.GETDIB bne STATUS.DCB ldy #S.DIB-1 .HS 2C bit abs @@ -169,7 +169,7 @@ STATUS jsr STATUS.CONTROL.Init clc rts -STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB +STATUS.DCB cmp #S.IOCTL.S.GETDCB bne .3 ldy #S.DCB.SND-1 @@ -180,7 +180,7 @@ STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB clc rts -.3 cmp #S.IOCTL.STATCODE.EOF +.3 cmp #S.IOCTL.S.EOF bne STATUS.9 lda DIB+S.DIB.S @@ -195,9 +195,9 @@ STATUS.9 lda #MLI.E.BADCTL *-------------------------------------- CONTROL jsr STATUS.CONTROL.Init - ldy #S.IOCTL.CTRLCODE + ldy #S.IOCTL.C lda (ZPIOCTL),y - cmp #S.IOCTL.CTRLCODE.SETDCB + cmp #S.IOCTL.C.SETDCB bne STATUS.9 ldy #S.DCB.SND-1 .2 lda (ZPBufPtr),y diff --git a/DRV/MOUSE.DRV.S.txt b/DRV/MOUSE.DRV.S.txt index 3e80c0e1..0935abe5 100644 --- a/DRV/MOUSE.DRV.S.txt +++ b/DRV/MOUSE.DRV.S.txt @@ -145,11 +145,11 @@ STATUS >STYA ZPIOCTL lda (ZPIOCTL),y sta ZPBufPtr+1 - ldy #S.IOCTL.STATCODE + ldy #S.IOCTL.S lda (ZPIOCTL),y beq .1 - cmp #S.IOCTL.STATCODE.GETDIB + cmp #S.IOCTL.S.GETDIB bne STATUS.DCB ldy #S.DIB-1 diff --git a/DRV/PIC.DRV.S.txt b/DRV/PIC.DRV.S.txt index 8c0c33d9..82faf69c 100644 --- a/DRV/PIC.DRV.S.txt +++ b/DRV/PIC.DRV.S.txt @@ -155,10 +155,10 @@ DRV.CS.START cld .DA 0 end or relocation *-------------------------------------- STATUS jsr STATUS.CONTROL.Init - ldy #S.IOCTL.STATCODE + ldy #S.IOCTL.S lda (ZPIOCTL),y beq .1 - cmp #S.IOCTL.STATCODE.GETDIB + cmp #S.IOCTL.S.GETDIB bne STATUS.DCB ldy #S.DIB-1 .HS 2C bit abs @@ -171,7 +171,7 @@ STATUS jsr STATUS.CONTROL.Init clc rts -STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB +STATUS.DCB cmp #S.IOCTL.S.GETDCB bne .3 ldy #S.DCB.COM-1 @@ -182,7 +182,7 @@ STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB clc rts -.3 cmp #S.IOCTL.STATCODE.EOF +.3 cmp #S.IOCTL.S.EOF bne STATUS.9 lda DIB+S.DIB.S @@ -198,9 +198,9 @@ STATUS.9 lda #MLI.E.BADCTL *-------------------------------------- CONTROL jsr STATUS.CONTROL.Init - ldy #S.IOCTL.CTRLCODE + ldy #S.IOCTL.C lda (ZPIOCTL),y - cmp #S.IOCTL.CTRLCODE.SETDCB + cmp #S.IOCTL.C.SETDCB bne STATUS.9 ldy #S.DCB.COM-1 .2 lda (ZPBufPtr),y diff --git a/DRV/PPPSSC.DRV.S.txt b/DRV/PPPSSC.DRV.S.txt index 96b3ee9f..9c83dd3f 100644 --- a/DRV/PPPSSC.DRV.S.txt +++ b/DRV/PPPSSC.DRV.S.txt @@ -813,11 +813,11 @@ DRV.CS.START cld .DA 0 end or relocation *-------------------------------------- STATUS jsr STATUS.CONTROL.Init - ldy #S.IOCTL.STATCODE + ldy #S.IOCTL.S lda (ZPIOCTL),y beq .1 - cmp #S.IOCTL.STATCODE.GETDIB + cmp #S.IOCTL.S.GETDIB bne STATUS.DCB ldy #S.DIB-1 @@ -832,7 +832,7 @@ STATUS jsr STATUS.CONTROL.Init clc rts -STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB +STATUS.DCB cmp #S.IOCTL.S.GETDCB bne .3 ldy #S.DCB.COM-1 @@ -844,7 +844,7 @@ STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB clc rts -.3 cmp #S.IOCTL.STATCODE.EOF +.3 cmp #S.IOCTL.S.EOF bne STATUS.9 lda DIB+S.DIB.S @@ -873,9 +873,9 @@ STATUS.9 lda #MLI.E.BADCTL *-------------------------------------- CONTROL jsr STATUS.CONTROL.Init - ldy #S.IOCTL.CTRLCODE + ldy #S.IOCTL.C lda (ZPIOCTL),y - cmp #S.IOCTL.CTRLCODE.SETDCB + cmp #S.IOCTL.C.SETDCB bne STATUS.9 ldy #S.DCB.COM-1 diff --git a/DRV/UTHER2.AI.DRV.S.txt b/DRV/UTHER2.AI.DRV.S.txt index 97a85bfa..5dba29a4 100644 --- a/DRV/UTHER2.AI.DRV.S.txt +++ b/DRV/UTHER2.AI.DRV.S.txt @@ -210,11 +210,11 @@ DRV.CS.START cld *-------------------------------------- STATUS jsr GET.IOCTLBUFPTR - ldy #S.IOCTL.STATCODE + ldy #S.IOCTL.S lda (ZPIOCTL),y beq .1 - cmp #S.IOCTL.STATCODE.GETDIB + cmp #S.IOCTL.S.GETDIB bne STATUS.DCB ldy #S.DIB-1 @@ -230,7 +230,7 @@ STATUS jsr GET.IOCTLBUFPTR clc rts -STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB +STATUS.DCB cmp #S.IOCTL.S.GETDCB bne STATUS.9 ldy #S.DCB.NIC-1 @@ -249,9 +249,9 @@ STATUS.9 lda #MLI.E.BADCTL *-------------------------------------- CONTROL jsr GET.IOCTLBUFPTR - ldy #S.IOCTL.CTRLCODE + ldy #S.IOCTL.C lda (ZPIOCTL),y - cmp #S.IOCTL.CTRLCODE.SETDCB + cmp #S.IOCTL.C.SETDCB bne STATUS.9 ldy #S.DCB.NIC-1 diff --git a/DRV/UTHERNET.DRV.S.txt b/DRV/UTHERNET.DRV.S.txt index a987a6fc..ddb163c8 100644 --- a/DRV/UTHERNET.DRV.S.txt +++ b/DRV/UTHERNET.DRV.S.txt @@ -191,10 +191,10 @@ DRV.CS.START cld *-------------------------------------- STATUS >STYA ZPIOCTL - ldy #S.IOCTL.STATCODE + ldy #S.IOCTL.S lda (ZPIOCTL),y beq .1 - cmp #S.IOCTL.STATCODE.GETDIB + cmp #S.IOCTL.S.GETDIB bne STATUS.DCB ldx #S.DIB-1 .HS 2C bit abs @@ -213,7 +213,7 @@ STATUS >STYA ZPIOCTL clc rts -STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB +STATUS.DCB cmp #S.IOCTL.S.GETDCB bne STATUS.9 stz DCB+S.DCB.NIC.LINK diff --git a/DRV/UTHERNET2.DRV.S.txt b/DRV/UTHERNET2.DRV.S.txt index 12105764..7a9cc4d1 100644 --- a/DRV/UTHERNET2.DRV.S.txt +++ b/DRV/UTHERNET2.DRV.S.txt @@ -205,11 +205,11 @@ DRV.CS.START cld *-------------------------------------- STATUS jsr GET.IOCTLBUFPTR - ldy #S.IOCTL.STATCODE + ldy #S.IOCTL.S lda (ZPIOCTL),y beq .1 - cmp #S.IOCTL.STATCODE.GETDIB + cmp #S.IOCTL.S.GETDIB bne STATUS.DCB ldy #S.DIB-1 @@ -225,7 +225,7 @@ STATUS jsr GET.IOCTLBUFPTR clc rts -STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB +STATUS.DCB cmp #S.IOCTL.S.GETDCB bne STATUS.9 ldy #S.DCB.NIC-1 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 43cf41ba..10d7367e 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -256,7 +256,7 @@ SYS.Shift .EQ $68 SYS.ArgV .EQ $6A SYS.ArgVDup .EQ $6C * ERROR -SYS.GetErrorMessage .EQ $6E +SYS.GetErrMsg .EQ $6E * STDLIB SYS.AToF .EQ $70 SYS.AToI .EQ $72 @@ -398,18 +398,18 @@ IOCTL.IRQ .EQ 20 S.IOCTL.CNT .EQ 0 S.IOCTL.UNITNUM .EQ 1 S.IOCTL.BUFPTR .EQ 2 -S.IOCTL.STATCODE .EQ 4 1 BYTE -S.IOCTL.STATCODE.STATUS .EQ 0 -S.IOCTL.STATCODE.GETDCB .EQ 1 -S.IOCTL.STATCODE.GETNL .EQ 2 -S.IOCTL.STATCODE.GETDIB .EQ 3 -S.IOCTL.STATCODE.EOF .EQ 4 -S.IOCTL.CTRLCODE .EQ 4 1 BYTE -S.IOCTL.CTRLCODE.RESET .EQ 0 -S.IOCTL.CTRLCODE.SETDCB .EQ 1 -S.IOCTL.CTRLCODE.SETNL .EQ 2 -S.IOCTL.CTRLCODE.IRQ .EQ 3 -S.IOCTL.CTRLCODE.EJECT .EQ 4 +S.IOCTL.S .EQ 4 1 BYTE +S.IOCTL.S.STATUS .EQ 0 +S.IOCTL.S.GETDCB .EQ 1 +S.IOCTL.S.GETNL .EQ 2 +S.IOCTL.S.GETDIB .EQ 3 +S.IOCTL.S.EOF .EQ 4 +S.IOCTL.C .EQ 4 1 BYTE +S.IOCTL.C.RESET .EQ 0 +S.IOCTL.C.SETDCB .EQ 1 +S.IOCTL.C.SETNL .EQ 2 +S.IOCTL.C.IRQ .EQ 3 +S.IOCTL.C.EJECT .EQ 4 S.IOCTL.BLKNUM .EQ 4 3 BYTES S.IOCTL.BYTECNT .EQ 4 2 BYTES S.IOCTL.ADDRPTR .EQ 6 3 BYTES @@ -476,7 +476,7 @@ S.FD.T.LNK .EQ 8 S.FD.T.DSOCK .EQ 10 S.FD.T.SSOCK .EQ 12 S.FD.T.PIPE .EQ 14 -S.FD.HANDLER .EQ 1 +S.FD.PFT .EQ 1 *-------------------------------------- S.FD.REG.REF .EQ 2 S.FD.REG.IOBUF .EQ 3 @@ -504,7 +504,7 @@ S.FD.DEV .EQ 12 *-------------------------------------- * S.FD.LNK *-------------------------------------- -S.FD.DSOCK.IOHANDLER .EQ 2 +S.FD.DSOCK.IOH .EQ 2 S.FD.DSOCK.OPEN .EQ 3 S.FD.DSOCK.CLOSE .EQ 4 S.FD.DSOCK.READ .EQ 5 @@ -513,7 +513,7 @@ S.FD.DSOCK.EOF .EQ 7 * S.FD.DSOCK .EQ 8 *-------------------------------------- -S.FD.SSOCK.IOHANDLER .EQ 2 +S.FD.SSOCK.IOH .EQ 2 S.FD.SSOCK.OPEN .EQ 3 S.FD.SSOCK.CLOSE .EQ 4 S.FD.SSOCK.READ .EQ 5 diff --git a/INC/IO.D2.I.txt b/INC/IO.D2.I.txt index 54495481..cdb0ea27 100644 --- a/INC/IO.D2.I.txt +++ b/INC/IO.D2.I.txt @@ -1,10 +1,10 @@ NEW AUTO 3,1 *-------------------------------------- -IO.D2.SeekTimeR .EQ 48 LIBBLKDEV Recalibration -IO.D2.SeekTimeF .EQ 48 LIBBLKDEV Track Formatter -IO.D2.SeekTimeB .EQ 48 LIBBLKDEV Boot Block -IO.D2.SeekTimeP .EQ 48 ProDOS.FX initial +IO.D2.SeekTimeR .EQ 68 LIBBLKDEV Recalibration +IO.D2.SeekTimeF .EQ 68 LIBBLKDEV Track Formatter +IO.D2.SeekTimeB .EQ 68 LIBBLKDEV Boot Block +IO.D2.SeekTimeP .EQ 68 ProDOS.FX initial IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128 *-------------------------------------- IO.D2.Ph0Off .EQ $C080 diff --git a/INC/MACROS.I.txt b/INC/MACROS.I.txt index 4f6545d6..f5c9f1b6 100644 --- a/INC/MACROS.I.txt +++ b/INC/MACROS.I.txt @@ -129,53 +129,149 @@ NEW *-------------------------------------- * FPU Entry Point *-------------------------------------- -FPU.ADD16 .EQ 0 -FPU.SUB16 .EQ 2 -FPU.MUL16 .EQ 4 -FPU.IMUL16 .EQ 6 -FPU.DIV16 .EQ 8 -FPU.IDIV16 .EQ 10 -FPU.MOD16 .EQ 12 -FPU.IMOD16 .EQ 14 -FPU.CMP16 .EQ 16 -FPU.ICMP16 .EQ 18 +FPU.wMUL .EQ 0 +FPU.wDIV .EQ 2 +FPU.wMOD .EQ 4 +FPU.wADD .EQ 6 +FPU.wSUB .EQ 8 -FPU.ADD32 .EQ 20 -FPU.SUB32 .EQ 22 -FPU.MUL32 .EQ 24 -FPU.IMUL32 .EQ 26 -FPU.DIV32 .EQ 28 -FPU.IDIV32 .EQ 30 -FPU.MOD32 .EQ 32 -FPU.IMOD32 .EQ 34 -FPU.CMP32 .EQ 36 -FPU.ICMP32 .EQ 38 +FPU.wSHL .EQ 10 +FPU.wSHR .EQ 12 -FPU.FADD .EQ 40 -FPU.FSUB .EQ 42 -FPU.FMULT .EQ 44 -FPU.FDIV .EQ 46 -FPU.PWR .EQ 48 +FPU.wL .EQ 14 +FPU.wLE .EQ 16 +FPU.wG .EQ 18 +FPU.wGE .EQ 20 -FPU.LOG .EQ 50 -FPU.SQR .EQ 52 -FPU.EXP .EQ 54 -FPU.COS .EQ 56 -FPU.SIN .EQ 58 -FPU.TAN .EQ 60 -FPU.ATAN .EQ 62 +FPU.wE .EQ 22 +FPU.wNE .EQ 24 -FPU.SETARG .EQ 64 fadd..... -FPU.SETFAC .EQ 66 log...., PrintF +FPU.wAND .EQ 26 +FPU.wOR .EQ 28 +FPU.wxOR .EQ 30 -FPU.GETFAC .EQ 68 Copy FAC to (FORPNT) -FPU.FCOMP .EQ 70 +FPU.wLAND .EQ 32 +FPU.wLOR .EQ 34 +*-------------------------------------- +FPU.iMUL .EQ 36 +FPU.iDIV .EQ 38 +FPU.iMOD .EQ 40 +FPU.iADD .EQ 42 +FPU.iSUB .EQ 44 -FPU.LTOF .EQ 72 Float -FPU.QINT .EQ 74 lrintf +FPU.iSHL .EQ 46 +FPU.iSHR .EQ 48 -FPU.FIN .EQ 76 sscanf -FPU.FOUT .EQ 78 PrintF +FPU.iL .EQ 50 +FPU.iLE .EQ 52 +FPU.iG .EQ 54 +FPU.iGE .EQ 56 + +FPU.iE .EQ 58 +FPU.iNE .EQ 60 + +FPU.iAND .EQ 62 +FPU.iOR .EQ 64 +FPU.iXOR .EQ 66 + +FPU.iLAND .EQ 68 +FPU.iLOR .EQ 70 +*-------------------------------------- +FPU.uMUL .EQ 72 +FPU.uDIV .EQ 74 +FPU.uMOD .EQ 76 +FPU.uADD .EQ 78 +FPU.uSUB .EQ 80 + +FPU.uSHL .EQ 82 +FPU.uSHR .EQ 84 + +FPU.uL .EQ 86 +FPU.uLE .EQ 88 +FPU.uG .EQ 90 +FPU.uGE .EQ 92 + +FPU.uE .EQ 94 +FPU.uNE .EQ 96 + +FPU.uAND .EQ 98 +FPU.uOR .EQ 100 +FPU.uXOR .EQ 102 + +FPU.uLAND .EQ 104 +FPU.uLOR .EQ 106 +*-------------------------------------- +FPU.lMUL .EQ 108 +FPU.lDIV .EQ 110 +FPU.lMOD .EQ 112 +FPU.lADD .EQ 114 +FPU.lSUB .EQ 116 + +FPU.lSHL .EQ 118 +FPU.lSHR .EQ 120 + +FPU.lL .EQ 122 +FPU.lLE .EQ 124 +FPU.lG .EQ 126 +FPU.lGE .EQ 128 + +FPU.lE .EQ 130 +FPU.lNE .EQ 132 + +FPU.lAND .EQ 134 +FPU.lOR .EQ 136 +FPU.lXOR .EQ 138 + +FPU.lLAND .EQ 140 +FPU.lLOR .EQ 142 +*-------------------------------------- +FPU.fMUL .EQ 144 +FPU.fDIV .EQ 146 +FPU.fMOD .EQ 148 +FPU.fADD .EQ 150 +FPU.fSUB .EQ 152 + +FPU.fSHL .EQ 154 +FPU.fSHR .EQ 156 + +FPU.fL .EQ 158 +FPU.fLE .EQ 160 +FPU.fG .EQ 162 +FPU.fGE .EQ 164 + +FPU.fE .EQ 166 +FPU.fNE .EQ 168 + +FPU.fAND .EQ 170 +FPU.fOR .EQ 172 +FPU.fXOR .EQ 174 + +FPU.fLAND .EQ 176 +FPU.fLOR .EQ 178 +*-------------------------------------- +* math.h +*-------------------------------------- +FPU.PWR .EQ 180 +*-------------------------------------- +FPU.LOG .EQ 182 +FPU.SQR .EQ 184 +FPU.EXP .EQ 186 +FPU.COS .EQ 188 +FPU.SIN .EQ 190 +FPU.TAN .EQ 192 +FPU.ATAN .EQ 194 + +FPU.SETARG .EQ 196 fadd..... +FPU.SETFAC .EQ 198 log...., PrintF + +FPU.GETFAC .EQ 200 Copy FAC to (FORPNT) +FPU.FCOMP .EQ 202 + +FPU.LTOF .EQ 204 Float +FPU.QINT .EQ 206 lrintf + +FPU.FIN .EQ 208 sscanf +FPU.FOUT .EQ 210 PrintF *-------------------------------------- .MA FPU ldx #FPU.]1 diff --git a/INCLUDE/string.h.txt b/INCLUDE/string.h.txt index 11ccf142..b5f2ef2c 100644 --- a/INCLUDE/string.h.txt +++ b/INCLUDE/string.h.txt @@ -2,12 +2,12 @@ NEW AUTO 3,1 int fastcall strlen(char*); -// char* strcat(char*,const char*); -// char* strcpy(char*,const char*); +char* strcat(char*,const char*); +char* strcpy(char*,const char*); char* fastcall strdup (char*); char* fastcall strupr (char*); char* fastcall strlwr (char*); -// int strcmp(const char *s1, const char *s2); -// int strcasecmp(const char *s1, const char *s2); +int strcmp(const char*,const char*); +int strcasecmp(const char*,const char *); MAN TEXT include/string.h diff --git a/LIB/LIBGUI.S.WND.txt b/LIB/LIBGUI.S.WND.txt index f33de96f..297b4e8e 100644 --- a/LIB/LIBGUI.S.WND.txt +++ b/LIB/LIBGUI.S.WND.txt @@ -10,8 +10,8 @@ WND.Init >PUSHBI 0 >LDYA L.DCB.GFX >STYA IOCTL+S.IOCTL.BUFPTR - lda #S.IOCTL.STATCODE.GETDCB - sta IOCTL+S.IOCTL.STATCODE + lda #S.IOCTL.S.GETDCB + sta IOCTL+S.IOCTL.S >PUSHB WND.Screen+S.OBJ.hPARENT >PUSHBI IOCTL.STATUS diff --git a/LIB/LIBTCPIP.S.CFG.txt b/LIB/LIBTCPIP.S.CFG.txt index 59fcae41..24822f3a 100644 --- a/LIB/LIBTCPIP.S.CFG.txt +++ b/LIB/LIBTCPIP.S.CFG.txt @@ -37,8 +37,8 @@ CFG.SET >PULLW ZPTmpPtr1 IPCFG >LDYA L.DCB.NIC >STYA IOCTL+S.IOCTL.BUFPTR - lda #S.IOCTL.STATCODE.GETDCB - sta IOCTL+S.IOCTL.STATCODE + lda #S.IOCTL.S.GETDCB + sta IOCTL+S.IOCTL.S ldx #IOCTL.STATUS jsr CFG.SET.IOCTL @@ -51,8 +51,8 @@ CFG.SET >PULLW ZPTmpPtr1 IPCFG dex bpl .4 - lda #S.IOCTL.CTRLCODE.SETDCB - sta IOCTL+S.IOCTL.CTRLCODE + lda #S.IOCTL.C.SETDCB + sta IOCTL+S.IOCTL.C ldx #IOCTL.CONTROL jsr CFG.SET.IOCTL diff --git a/LIB/LIBTCPIP.S.DNS.txt b/LIB/LIBTCPIP.S.DNS.txt index 3d1b6bf7..4cd6db6d 100644 --- a/LIB/LIBTCPIP.S.DNS.txt +++ b/LIB/LIBTCPIP.S.DNS.txt @@ -265,6 +265,7 @@ DNS.FIND.BY.NAME ldy #S.DNSCACHE.hNAME lda (ZPCachePtr),y >SYSCALL2 GetMemPtr + >PUSHYA >SYSCALL2 StrCaseCmp plx bcc .8 diff --git a/LIB/string.o.s.txt b/LIB/string.o.s.txt index e44b1654..28530a99 100644 --- a/LIB/string.o.s.txt +++ b/LIB/string.o.s.txt @@ -1,6 +1,6 @@ NEW AUTO 3,1 - .LIST ON + .LIST OFF .OP 65C02 .OR $2000 .TF lib/string.o @@ -12,12 +12,20 @@ NEW *-------------------------------------- >PSTR "strlen" .DA CODE.strlen + >PSTR "strcat" + .DA CODE.strcat + >PSTR "strcpy" + .DA CODE.strcpy >PSTR "strdup" .DA CODE.strdup >PSTR "strupr" .DA CODE.strupr >PSTR "strlwr" .DA CODE.strlwr + >PSTR "strcmp" + .DA CODE.strcmp + >PSTR "strcasecmp" + .DA CODE.strcasecmp .DA 0 *-------------------------------------- CODE.strlen .DA #CODE.strlen.L @@ -25,7 +33,15 @@ CODE.strlen .DA #CODE.strlen.L CODE.strlen.L .EQ *-CODE.strlen rts *-------------------------------------- +CODE.strcat .DA #CODE.strcat.L + >SYSCALL strcat +CODE.strcat.L .EQ *-CODE.strcat + rts *-------------------------------------- +CODE.strcpy .DA #CODE.strcpy.L + >SYSCALL strcpy +CODE.strcpy.L .EQ *-CODE.strcpy + rts *-------------------------------------- CODE.strdup .DA #CODE.strdup.L >SYSCALL strdup @@ -42,7 +58,15 @@ CODE.strlwr .DA #CODE.strlwr.L CODE.strlwr.L .EQ *-CODE.strlwr rts *-------------------------------------- +CODE.strcmp .DA #CODE.strcmp.L + >SYSCALL strcmp +CODE.strcmp.L .EQ *-CODE.strcmp + rts *-------------------------------------- +CODE.strcasecmp .DA #CODE.strcasecmp.L + >SYSCALL strcasecmp +CODE.strcasecmp.L .EQ *-CODE.strcasecmp + rts *-------------------------------------- MAN SAVE usr/src/lib/string.o.s diff --git a/ProDOS.FX/ProDOS.S.XRW.txt b/ProDOS.FX/ProDOS.S.XRW.txt index 20f1e4ff..6478de25 100644 --- a/ProDOS.FX/ProDOS.S.XRW.txt +++ b/ProDOS.FX/ProDOS.S.XRW.txt @@ -711,26 +711,26 @@ XRW.TrackSelect lda #2 lda XRW.ReqTrack bcc .50 -* lsr Track 160 -> 80+Carry -* pha + lsr Track 160 -> 80+Carry + pha -* lda #0 Carry = Head + lda #0 Carry = Head -* rol -* rol A = 0/2 + rol + rol A = 0/2 -* ora A2L -* tay y = n0/n2 + ora A2L + tay y = n0/n2 -* lda IO.D2.Ph0On,y -* lda IO.D2.Ph0On+4,y + lda IO.D2.Ph0On,y + lda IO.D2.Ph0On+4,y -* jsr XRW.Wait100usec + jsr XRW.Wait100usec -* lda IO.D2.Ph0Off,y -* lda IO.D2.Ph0Off+4,y + lda IO.D2.Ph0Off,y + lda IO.D2.Ph0Off+4,y -* pla + pla .50 sta XRW.ReqTrack2 diff --git a/SBIN/HTTPD.S.txt b/SBIN/HTTPD.S.txt index 48fc066e..c64a0db0 100644 --- a/SBIN/HTTPD.S.txt +++ b/SBIN/HTTPD.S.txt @@ -621,10 +621,12 @@ CS.RUN.REQ.GET ldy #0 cmp #'/' bne .4 + >PUSHEA.G REQ.FullPath >PUSHW ZPRootDirPtr - >LEA.G REQ.FullPath >SYSCALL StrCpy + >PUSHEA.G REQ.FullPath + ldy #1 lda (ZPPtr2),y bne .2 @@ -635,7 +637,6 @@ CS.RUN.REQ.GET ldy #0 .2 >LDYA ZPPtr2 .3 >PUSHYA - >LEA.G REQ.FullPath >SYSCALL StrCat rts diff --git a/SBIN/NETWORKD.S.txt b/SBIN/NETWORKD.S.txt index f31ecc14..5852d8fd 100644 --- a/SBIN/NETWORKD.S.txt +++ b/SBIN/NETWORKD.S.txt @@ -112,8 +112,8 @@ CS.INIT.DEV >PUSHBI 0 >LDYA L.DCB.NIC >STYA IOCTL+S.IOCTL.BUFPTR - lda #S.IOCTL.STATCODE.GETDCB - sta IOCTL+S.IOCTL.STATCODE + lda #S.IOCTL.S.GETDCB + sta IOCTL+S.IOCTL.S >PUSHB DevID >PUSHBI IOCTL.STATUS diff --git a/SHARED/X.CPMVRM.S.txt b/SHARED/X.CPMVRM.S.txt index f23c2921..40d6a844 100644 --- a/SHARED/X.CPMVRM.S.txt +++ b/SHARED/X.CPMVRM.S.txt @@ -393,18 +393,23 @@ CS.RUN.REG jsr CS.RUN.REG.MSG >PUSHYA ldy #hDstBasePath jsr CS.RUN.GetPathY - + >PUSHYA >SYSCALL StrCaseCmp bcs .3 not same dir, go copy/delete + jsr CS.RUN.Rename jsr CS.RUN.CheckErr bcs .9 + jmp CS.RUN.NEXT + .FIN .3 jsr CS.RUN.CopyStart bcc .4 + jsr CS.RUN.CheckErr bcs .9 + jmp CS.RUN.NEXT .FIN @@ -624,38 +629,48 @@ CS.RUN.CheckErr bcs .1 rts *-------------------------------------- CS.RUN.BuildFilePath - ldy #hSrcBasePath - jsr CS.RUN.GetPathY - >PUSHYA ldy #hSrcFullPath jsr CS.RUN.GetPathY >STYA ZPPtr1 - >SYSCALL StrCpy + >PUSHYA - >PUSHW ZPFileName - >LDYA ZPPtr1 - >SYSCALL StrCat - .DO X.COPY.TO.DEST=1 - ldy #hDstBasePath + ldy #hSrcBasePath jsr CS.RUN.GetPathY >PUSHYA + + >SYSCALL StrCpy + + >PUSHW ZPPtr1 + >PUSHW ZPFileName + >SYSCALL StrCat + + .DO X.COPY.TO.DEST=1 ldy #hDstFullPath jsr CS.RUN.GetPathY >STYA ZPPtr1 + >PUSHYA + + ldy #hDstBasePath + jsr CS.RUN.GetPathY + >PUSHYA + >SYSCALL StrCpy + >PUSHW ZPPtr1 + ldy #hDstFileName lda (pData),y beq .1 + >SYSCALL GetMemPtr >PUSHYA bra .2 + .1 >PUSHW ZPFileName -.2 >LDYA ZPPtr1 - >SYSCALL StrCat +.2 >SYSCALL StrCat .FIN rts *-------------------------------------- diff --git a/SHARED/X.FILEENUM.S.txt b/SHARED/X.FILEENUM.S.txt index 70bf6b2e..6f0688d0 100644 --- a/SHARED/X.FILEENUM.S.txt +++ b/SHARED/X.FILEENUM.S.txt @@ -484,8 +484,9 @@ EnterSubDirY lda (pData),y >STYA ZPPtr1 save full path jsr .1 Make sure ending with / + + >PUSHW ZPPtr1 >PUSHW ZPPtr2 - >LDYA ZPPtr1 >SYSCALL StrCat .1 jsr GetPtr1Len diff --git a/SHARED/X.SSC.DRV.S.txt b/SHARED/X.SSC.DRV.S.txt index 4cd21983..c783e163 100644 --- a/SHARED/X.SSC.DRV.S.txt +++ b/SHARED/X.SSC.DRV.S.txt @@ -404,11 +404,11 @@ DRV.CS.START cld .DA 0 end or relocation *-------------------------------------- STATUS jsr STATUS.CONTROL.Init - ldy #S.IOCTL.STATCODE + ldy #S.IOCTL.S lda (ZPIOCTL),y beq .1 - cmp #S.IOCTL.STATCODE.GETDIB + cmp #S.IOCTL.S.GETDIB bne STATUS.DCB ldy #S.DIB-1 @@ -423,7 +423,7 @@ STATUS jsr STATUS.CONTROL.Init clc rts -STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB +STATUS.DCB cmp #S.IOCTL.S.GETDCB bne .3 ldy #S.DCB.COM-1 @@ -436,7 +436,7 @@ STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB clc rts -.3 cmp #S.IOCTL.STATCODE.EOF +.3 cmp #S.IOCTL.S.EOF bne STATUS.9 lda DIB+S.DIB.S @@ -473,9 +473,9 @@ STATUS.9 lda #MLI.E.BADCTL *-------------------------------------- CONTROL jsr STATUS.CONTROL.Init - ldy #S.IOCTL.CTRLCODE + ldy #S.IOCTL.C lda (ZPIOCTL),y - cmp #S.IOCTL.CTRLCODE.SETDCB + cmp #S.IOCTL.C.SETDCB bne STATUS.9 ldy #S.DCB.COM-1 diff --git a/SYS/KERNEL.S.ARG.txt b/SYS/KERNEL.S.ARG.txt index 574b8e91..7c3319dc 100644 --- a/SYS/KERNEL.S.ARG.txt +++ b/SYS/KERNEL.S.ARG.txt @@ -21,7 +21,7 @@ K.Shift jsr K.ArgV lda (ZPPtr1),y bne .1 -.2 jsr SHARED.AddYp1ToPtr1 +.2 jsr SHARED.AddYp12P1 ldy #$ff @@ -33,7 +33,7 @@ K.Shift jsr K.ArgV tya beq .8 - jsr SHARED.AddYp1ToPtr2 + jsr SHARED.AddYp12P2 bra .2 .8 ldy #S.PS.ARGC @@ -63,10 +63,10 @@ K.ArgV tax save requested arg# beq .9 yes, not found.... dex bmi .7 -.3 jsr SHARED.GetCharPtr2 skip str +.3 jsr SHARED.GetCP2 skip str bne .3 - jsr SHARED.NextCharPtr2 skip \0 + jsr SHARED.NextCP2 skip \0 bra .1 .7 >LDYA ZPPtr2 @@ -99,7 +99,7 @@ K.Arg2ArgV >PULLW ZPPtr2 Get target buffer ldx #0 Arg Count ldy #0 bInQuote -.1 jsr SHARED.GetCharPtr1 +.1 jsr SHARED.GetCP1 beq .8 cmp #C.SPACE @@ -120,18 +120,18 @@ K.Arg2ArgV >PULLW ZPPtr2 Get target buffer inx Found one arg !!! lda #0 set this token End - jsr SHARED.PutCharPtr2 + jsr SHARED.PutCP2 bra .1 .4 lda #C.SPACE -.6 jsr SHARED.PutCharPtr2 +.6 jsr SHARED.PutCP2 -.7 jsr SHARED.GetCharPtr1 +.7 jsr SHARED.GetCP1 bne .2 inx -.8 jsr SHARED.PutCharPtr2 set Argv[x] Ending 0 +.8 jsr SHARED.PutCP2 set Argv[x] Ending 0 sta (ZPPtr2) set Array Ending 0 phx @@ -182,15 +182,7 @@ K.ArgVDup >STYA ZPPtr1 >STYA ZPPtr2 phx - jsr ARG.Ptr1Ptr2cpy - - txa Count - plx hMem - - clc -.9 rts -*-------------------------------------- -ARG.Ptr1Ptr2cpy ldx #0 + ldx #0 ldy #0 .4 lda (ZPPtr1),y @@ -215,7 +207,12 @@ ARG.Ptr1Ptr2cpy ldx #0 .7 lda (ZPPtr1),y sta (ZPPtr2),y Ending \0 ? bne .5 - rts + + txa Count + plx hMem + + clc +.9 rts *-------------------------------------- MAN SAVE usr/src/sys/kernel.s.arg diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index 699f374e..fec74086 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -172,7 +172,7 @@ BIN.Load.1 >PUSHWI K.Buf256 >PUSHYA Push AUXTYPE jsr K.LoadFile - bcs BIN.Load.Free.RTS Error Loading file + bcs .9 Error Loading file stx BIN.hMem save hMem @@ -189,7 +189,7 @@ BIN.Load.1 >PUSHWI K.Buf256 jsr K.GetMemPtr >STYA ZPPtr1 set ZPPtr1 -> New Code start - jsr BIN.ComputeOffsetYA YA = actual load address + jsr BIN.CompOfsYA YA = actual load address jsr Mem.SetOwnerPS0 this CS is owned by PS 0 @@ -199,7 +199,7 @@ BIN.Load.1 >PUSHWI K.Buf256 iny lda (ZPPtr1),y ply - jsr BIN.ComputeCSEndYA + jsr BIN.CompCSEndYA jsr BIN.RelExe >LDYAI K.Buf256 get back bin path @@ -221,14 +221,14 @@ BIN.Load.1 >PUSHWI K.Buf256 clc jmp MEM.GetMEMPTR ...and Y,A=PTR to CS +.9 rts + BIN.Load.Free php pha lda BIN.hMem jsr K.FreeMem pla plp - -BIN.Load.Free.RTS rts Discard Loaded Code, exits CS */-------------------------------------- * # InsDrv @@ -247,7 +247,7 @@ BIN.Load.Free.RTS K.InsDrv >STYA ZPPtr3 SRC PTR for move >PULLW BIN.R.CS.Start >PULLYA DRV.CS.SIZE - jsr BIN.ComputeCSEndYA + jsr BIN.CompCSEndYA >PULLA BIN.R.End sta BIN.R.End sec @@ -265,7 +265,7 @@ K.InsDrv >STYA ZPPtr3 SRC PTR for move >STYA ZPPtr4 ...for move... sty .7+1 ...and for exit sta .8+1 - jsr BIN.ComputeOffsetYA + jsr BIN.CompOfsYA lda BIN.R.Size eor #$ff @@ -305,20 +305,20 @@ BIN.RelExe ldy #H.BIN.T+1 rts .1 ldy #H.BIN.JMP relocate Main JMP - jsr BIN.RelocateAtPtr1Y + jsr BIN.RelAtPtr1Y - ldy #H.BIN.EXE.REL.TABLE skip Header, CS.SIZE & DS.SIZE... (16 bytes) + ldy #16 skip Header, CS.SIZE & DS.SIZE... (16 bytes) .HS 2C bit abs *-------------------------------------- -BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE +BIN.RelDrv ldy #2 start after CLD JMP .1 iny lda (ZPPtr1),y HI in A beq .2 $00xx = end of table dey - jsr BIN.RelocateAtPtr1Y + jsr BIN.RelAtPtr1Y iny bne .1 @@ -327,7 +327,7 @@ BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE bra .1 *-------------------------------------- -.2 jsr SHARED.AddYp1ToPtr1 add current offset in Y to Ptr +.2 jsr SHARED.AddYp12P1 add current offset in Y to Ptr * + 1 to skip last 00 from beq .2 * ZPPtr1=Current Code PTR lda BIN.R.CS.End @@ -353,11 +353,11 @@ BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE and #7 save Opcode length... pha ldy #1 - jsr BIN.RelocateAtPtr1Y + jsr BIN.RelAtPtr1Y pla get back Opcode length... .5 tay A = OPCODE length - jsr SHARED.AddYToPtr1 + jsr SHARED.AddY2P1 .6 cmp BIN.R.Stop A = ZPPtr1 bne .3 @@ -369,8 +369,7 @@ BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE clc Make sure exit with CC rts *-------------------------------------- YA = CS Size -BIN.ComputeCSEndYA - pha +BIN.CompCSEndYA pha tya clc adc BIN.R.CS.Start @@ -380,8 +379,7 @@ BIN.ComputeCSEndYA sta BIN.R.CS.End+1 rts *-------------------------------------- YA = Target Address -BIN.ComputeOffSetYA - pha +BIN.CompOfsYA pha tya sec sbc BIN.R.CS.Start @@ -391,8 +389,7 @@ BIN.ComputeOffSetYA sta BIN.R.Offset+1 rts *-------------------------------------- -BIN.RelocateAtPtr1Y - lda (ZPPtr1),y Get LO +BIN.RelAtPtr1Y lda (ZPPtr1),y Get LO tax save LO in X iny make Y point to HI lda (ZPPtr1),y Get HI diff --git a/SYS/KERNEL.S.BLISTX.txt b/SYS/KERNEL.S.BLISTX.txt index 1921c37b..41534eb9 100644 --- a/SYS/KERNEL.S.BLISTX.txt +++ b/SYS/KERNEL.S.BLISTX.txt @@ -1,18 +1,19 @@ NEW AUTO 3,1 *-------------------------------------- -ZPBLISTXIBlkPtr .EQ ZPMEMMGR+12 -ZPBLISTXDBlkPtr .EQ ZPMEMMGR+14 +IBlkPtr .EQ ZPMEMMGR+12 +DBlkPtr .EQ ZPMEMMGR+14 *-------------------------------------- -BLISTX.BytePtr .BS 1 -BLISTX.BlockPtr .BS 1 +KeyID .EQ * +iByte .BS 1 +iBlk .BS 1 *-------------------------------------- BLISTX.New >LDYAI 128 32k Max before out of memory!!! ldx #S.MEM.F.INIT0+8 index jsr MEM.GetMem.YAX bcs .9 - >STYA ZPBLISTXIBlkPtr + >STYA IBlkPtr stx .8+1 >LDYAI 256 @@ -20,12 +21,12 @@ BLISTX.New >LDYAI 128 32k Max before out of memory!!! jsr MEM.GetMem.YAX bcs .9 - >STYA ZPBLISTXDBlkPtr + >STYA DBlkPtr lda #0 - sta (ZPBLISTXDBlkPtr) + sta (DBlkPtr) txa - sta (ZPBLISTXIBlkPtr) + sta (IBlkPtr) .8 lda #$ff SELF MODIFIED .9 rts @@ -47,23 +48,21 @@ BLISTX.Free pha .8 pla jmp K.FreeMem *-------------------------------------- -BLISTX.GetNextByte - ldy BLISTX.BytePtr - lda (ZPBLISTXDBlkPtr),y -BLISTX.ToNextByte - inc BLISTX.BytePtr +BLISTX.GetNByte ldy iByte + lda (DBlkPtr),y + +BLISTX.2NByte inc iByte bne .8 pha - jsr BLISTX.ToNextBlock + jsr BLISTX.2NBlk pla .8 rts *-------------------------------------- -BLISTX.AddDataByte - phy - ldy BLISTX.BytePtr - sta (ZPBLISTXDBlkPtr),y - inc BLISTX.BytePtr +BLISTX.AddByte phy + ldy iByte + sta (DBlkPtr),y + inc iByte bne .8 phx @@ -72,13 +71,13 @@ BLISTX.AddDataByte jsr MEM.GetMem.YAX bcs .9 - >STYA ZPBLISTXDBlkPtr + >STYA DBlkPtr txa - inc BLISTX.BlockPtr - ldy BLISTX.BlockPtr - sta (ZPBLISTXIBlkPtr),y + inc iBlk + ldy iBlk + sta (IBlkPtr),y -* stz BLISTX.BytePtr +* stz iByte plx .8 ply @@ -89,20 +88,18 @@ BLISTX.AddDataByte ply rts *-------------------------------------- -BLISTX.SetBlockByte - ldy BLISTX.BytePtr - sta (ZPBLISTXDBlkPtr),y - inc BLISTX.BytePtr - bne BLISTX.ToNextBlock.RTS +BLISTX.SetBlkByte + ldy iByte + sta (DBlkPtr),y + inc iByte + bne BLISTX.RTS *-------------------------------------- -BLISTX.ToNextBlock - inc BLISTX.BlockPtr - ldy BLISTX.BlockPtr - lda (ZPBLISTXIBlkPtr),y +BLISTX.2NBlk inc iBlk + ldy iBlk + lda (IBlkPtr),y jsr K.GetMemPtr - >STYA ZPBLISTXDBlkPtr -BLISTX.ToNextBlock.RTS - rts + >STYA DBlkPtr +BLISTX.RTS rts *-------------------------------------- MAN SAVE usr/src/sys/kernel.s.blistx diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index 3ff9bbe4..23e1f7a9 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -337,10 +337,12 @@ CORE.Dispatch ldx #1 skip PS0 * X unmodified *-------------------------------------- CORE.GetPSByID jsr CORE.GetPS - bcs CORE.GetPS.RTS + bcs .9 lda PS.TABLE.hPS,y jmp K.GetMemPtr + +.9 rts *-------------------------------------- * X,A unmodified *-------------------------------------- @@ -362,7 +364,7 @@ CORE.GetPS tay rts .8 clc -CORE.GetPS.RTS rts + rts *-------------------------------------- *CORE.DumpEvent ldy #S.EVT-1 *.1 >PUSHB (pEvent),y @@ -470,35 +472,6 @@ CORE.PSResume sei inc IRQ.InKernel rti *-------------------------------------- -GP.RomCall.JmpX jmp (.1-FPU.FADD,x) -*-------------------------------------- -* http://www.txbobsc.com/scsc/scdocumentor/E7A0.html -*-------------------------------------- -.1 .DA $E7C1 FADDT - .DA $E7AA FSUBT - .DA $E987 FMULTT.1 - .DA $EA6B FDIVT+2 - .DA $EE97 FPWRT - - .DA $E941 LOG - .DA $EE8D SQR - .DA $EF09 EXP - .DA $EFEA COS - .DA $EFF1 SIN - .DA $F03A TAN - .DA $F09E ATN -*-------------------------------------- - .DA $E9E3 LOAD.ARG.FROM.YA - .DA $EAF9 LOAD.FAC.FROM.YA - .DA $EB27 SETFOR (GETFAC) - .DA $EBB2 FCOMP (Y,A with FAC) - - .DA $E82E NORMALIZE.FAC.2 (L->F) - .DA $EBF2 QINT (F->L) - - .DA $EC4A FIN AToF - .DA $ED36 FOUT.1 PrintF -*-------------------------------------- CORE.VBLState .BS 1 CORE.TickPerSec .BS 1 CORE.TickPer10t .BS 1 diff --git a/SYS/KERNEL.S.CTRL.txt b/SYS/KERNEL.S.CTRL.txt index 9a957c52..2ba4861f 100644 --- a/SYS/KERNEL.S.CTRL.txt +++ b/SYS/KERNEL.S.CTRL.txt @@ -9,13 +9,12 @@ C1 .EQ Mem.MHiMem C2 .EQ Mem.XLoMem C3 .EQ Mem.XHiMem *-------------------------------------- -C4 .EQ A2osX.GP.SC -C5 .EQ A2osX.AUX.S +C4 .EQ GP.CE-GP.CS +C5 .EQ AUX.S *-------------------------------------- -C6 .EQ A2osX.D1.S -C7 .EQ A2osX.D2.S -C8 .EQ A2osX.E0.S -C9 .EQ DevMgr.FreeMem +C6 .EQ D1.S +C7 .EQ D2.S +C8 .EQ E0.S *-------------------------------------- .LIST OFF .DO Mem.MLoMem>$2000 @@ -28,17 +27,17 @@ C9 .EQ DevMgr.FreeMem * ERROR:AUX too big .LIST OFF .FIN - .DO A2osX.GP.SC>$1D0 + .DO C4>$1D0 .LIST ON * ERROR:GP too big .LIST OFF .FIN - .DO A2osX.D1.S>$1000 + .DO D1.S>$1000 .LIST ON * ERROR:BNK1 too big .LIST OFF .FIN - .DO A2osX.D2.S>$1000 + .DO D2.S>$1000 .LIST ON * ERROR:BNK2 too big .LIST OFF diff --git a/SYS/KERNEL.S.DEF.txt b/SYS/KERNEL.S.DEF.txt index 16fe18a3..9a1a09bc 100644 --- a/SYS/KERNEL.S.DEF.txt +++ b/SYS/KERNEL.S.DEF.txt @@ -119,10 +119,10 @@ IO.hFD .BS 1 IO.hDevNod .BS 1 .ED *-------------------------------------- -A2osX.SaveSM .EQ $100 Aux -A2osX.SaveSX .EQ $101 Aux -A2osX.NumStrLen .EQ $102 Aux -A2osX.NumStrBuf .EQ $103 Aux +SaveSM .EQ $100 Aux +SaveSX .EQ $101 Aux +*FOUTBufPtr .EQ $102 Aux +FOUTBuf .EQ $103 Aux *-------------------------------------- * Main $200 -> 2FF : (Used By ProDOS,Clock DRV....) * Main $300 -> 3EF : @@ -186,21 +186,15 @@ H.BIN.CS.SIZE .EQ 8 H.BIN.DS.SIZE .EQ 10 H.BIN.SS.SIZE .EQ 12 H.BIN.ZP.SIZE .EQ 13 -* -H.BIN.EXE.REL.TABLE .EQ 16 -* -H.BIN.DRV.REL.TABLE .EQ 2 Including main jmp -*-------------------------------------- -TTY.BUF.SIZE .EQ 80*24 *-------------------------------------- S.DCB.TTY.DEVID .EQ 0 -S.DCB.TTY.STATUS .EQ 1 -S.DCB.TTY.MODE .EQ 2 -S.DCB.TTY.MODE.ESC .EQ 2 -S.DCB.TTY.MODE.CSI .EQ 4 -S.DCB.TTY.MODE.IAC .EQ 6 -S.DCB.TTY.MODE.G0 .EQ 8 -S.DCB.TTY.MODE.G1 .EQ 10 +S.DCB.TTY.S .EQ 1 +S.DCB.TTY.M .EQ 2 +S.DCB.TTY.M.ESC .EQ 2 +S.DCB.TTY.M.CSI .EQ 4 +S.DCB.TTY.M.IAC .EQ 6 +S.DCB.TTY.M.G0 .EQ 8 +S.DCB.TTY.M.G1 .EQ 10 S.DCB.TTY.CH .EQ 3 S.DCB.TTY.CH.SAVE .EQ 4 S.DCB.TTY.CV .EQ 5 diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index b5484e4f..be674f47 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -59,7 +59,7 @@ K.GetDevByName >STYA ZPPtr1 requested dev name lda Nod.Table.hFD-2,x jsr K.GetMemPtr Y,A = pPD, X = hDevNod - >STYA pFD for UNISTD.Open + >STYA pFD for IO.Open * clc rts @@ -107,10 +107,10 @@ K.GetDevStatus >PULLW K.S.IOCTL+S.IOCTL.BUFPTR jsr DEV.GetPFD bcs K.GetDev.9 - lda #S.IOCTL.STATCODE.GETDIB + lda #S.IOCTL.S.GETDIB *-------------------------------------- DEV.GetDevStatus - sta K.S.IOCTL+S.IOCTL.STATCODE + sta K.S.IOCTL+S.IOCTL.S ldy #S.FD.DEV.DEVID lda (pFD),y @@ -132,8 +132,7 @@ DEV.pDrvJmp jmp (pDrv) * ## RETURN VALUE * A = hDEV *\-------------------------------------- -K.MKDev >PULLW ZPPtr2 ptr2=name - >PULLW ZPPtr1 ptr1=fd +K.MKDev jsr SHARED.PullP2P1 ptr2=name,tr1=fd ldx #1 @@ -193,7 +192,7 @@ K.MKDev >PULLW ZPPtr2 ptr2=name jsr DEV.GetPDrv - lda #S.IOCTL.STATCODE.STATUS + lda #S.IOCTL.S.STATUS jsr DEV.GetDevStatus bcs .99 diff --git a/SYS/KERNEL.S.DIRENT.txt b/SYS/KERNEL.S.DIRENT.txt index d5a2e19a..4fc3bf08 100644 --- a/SYS/KERNEL.S.DIRENT.txt +++ b/SYS/KERNEL.S.DIRENT.txt @@ -49,7 +49,7 @@ K.ReadDir.hBuf .BS 1 .ED *-------------------------------------- K.ReadDir jsr PFT.CheckNodeA - bcs K.ReadDir.RTS + bcs DIRENT.RTS ldy #S.FD.REG.REF lda (pFD),y @@ -60,14 +60,14 @@ K.ReadDir jsr PFT.CheckNodeA jmp K.ReadDir.DEV .1 jmp K.ReadDir.DIR -K.ReadDir.NoMore - lda #MLI.E.EOF + +DIRENT.EOF lda #MLI.E.EOF sec -K.ReadDir.RTS rts +DIRENT.RTS rts *-------------------------------------- K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ? lda (pFD),y - bne K.ReadDir.NoMore + bne DIRENT.EOF stz K.MLI.PARAMS+1 All Volumes >LDYAI K.Buf256 @@ -75,12 +75,12 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ? >STYA ZPPtr2 >MLICALL MLIONLINE - bcs K.ReadDir.RTS + bcs DIRENT.RTS >LDYAI 16+S.STAT*18+1 14*(Vols+Stat) + 4*(PFT+Stat) + \0 jsr K.ReadDir.GetBufYA - bcs K.ReadDir.RTS + bcs DIRENT.RTS lda #16 sta K.ReadDir.EC @@ -186,8 +186,7 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ? sta (pFD),y Flag that we returned something for next time jmp K.ReadDir.EXIT *-------------------------------------- -K.ReadDir.DEV - jmp K.ReadDir.NoMore +K.ReadDir.DEV jmp DIRENT.EOF TODO : /dev *-------------------------------------- K.ReadDir.DIR sta K.MLI.PARAMS+1 A=#S.DIR.PRODOS.REF diff --git a/SYS/KERNEL.S.DRV.txt b/SYS/KERNEL.S.DRV.txt index 658db859..7c19449e 100644 --- a/SYS/KERNEL.S.DRV.txt +++ b/SYS/KERNEL.S.DRV.txt @@ -11,12 +11,11 @@ DRV.DiskII cld >STYA pIOCTL jmp (.1,x) -.1 .DA DRV.DiskII.STATUS +.1 .DA DRV.DiskII.S .DA DRV.BLK READ .DA DRV.BLK WRITE *-------------------------------------- -DRV.DiskII.STATUS - >LDYAI DRV.DiskII.DIB +DRV.DiskII.S >LDYAI DRV.DiskII.DIB jmp DRV.STATUS.YA *-------------------------------------- DRV.DiskII.DIB .DA #S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ @@ -37,15 +36,15 @@ DRV.RamDrive cld bcs DRV.RamDrive.9 >STYA pIOCTL jmp (.1,x) -.1 .DA DRV.RamDrive.STATUS +.1 .DA DRV.RamDrive.S .DA DRV.BLK READ .DA DRV.BLK WRITE .DA DRV.BLK FORMAT DRV.RamDrive.9 jmp A2osX.BadCall *-------------------------------------- -DRV.RamDrive.STATUS - jsr DRV.Blk +DRV.RamDrive.S jsr DRV.Blk bcs .9 + stx DRV.RamDrive.DIB+S.DIB.SIZE sty DRV.RamDrive.DIB+S.DIB.SIZE+1 >LDYAI DRV.RamDrive.DIB @@ -70,14 +69,14 @@ DRV.BlkDev cld bcs DRV.RamDrive.9 >STYA pIOCTL jmp (.1,x) -.1 .DA DRV.BlkDev.STATUS +.1 .DA DRV.BlkDev.S .DA DRV.BLK READ .DA DRV.BLK WRITE .DA DRV.BLK FORMAT *-------------------------------------- -DRV.BlkDev.STATUS - jsr DRV.Blk +DRV.BlkDev.S jsr DRV.Blk bcs .9 + stx DRV.BlkDev.DIB+S.DIB.SIZE sty DRV.BlkDev.DIB+S.DIB.SIZE+1 @@ -190,7 +189,7 @@ DRV.SmartPort.Cnt DRV.NULL cld >STYA pIOCTL txa - beq DRV.NULL.STATUS + beq DRV.NULL.S jmp (.1-12,x) *-------------------------------------- .1 @@ -202,7 +201,7 @@ DRV.NULL cld * .DA A2osX.BADCALL INIT .DA DRV.CLCRTS OPEN .DA DRV.CLCRTS CLOSE - .DA DRV.NULL.READ + .DA DRV.NULL.R .DA DRV.CLCRTS WRITE *-------------------------------------- DRV.NULL.DIB .DA #S.DIB.S.WRITE+S.DIB.S.READ+S.DIB.S.OPENED @@ -213,15 +212,15 @@ DRV.NULL.DIB .DA #S.DIB.S.WRITE+S.DIB.S.READ+S.DIB.S.OPENED .DA #0 .DA K.VER *-------------------------------------- -DRV.NULL.STATUS >LDYAI DRV.NULL.DIB +DRV.NULL.S >LDYAI DRV.NULL.DIB *-------------------------------------- DRV.STATUS.YA >STYA .2+1 - ldy #S.IOCTL.STATCODE + ldy #S.IOCTL.S lda (pIOCTL),y beq .1 - cmp #S.IOCTL.STATCODE.GETDIB + cmp #S.IOCTL.S.GETDIB bne .9 ldx #S.DIB-1 @@ -247,7 +246,7 @@ DRV.STATUS.YA >STYA .2+1 sec rts *-------------------------------------- -DRV.NULL.READ ldx #C.EOF +DRV.NULL.R ldx #C.EOF ldy #S.IOCTL.BYTECNT lda #1 diff --git a/SYS/KERNEL.S.ENVX.txt b/SYS/KERNEL.S.ENVX.txt index 07bfa5d3..cee58422 100644 --- a/SYS/KERNEL.S.ENVX.txt +++ b/SYS/KERNEL.S.ENVX.txt @@ -14,7 +14,7 @@ ENVX.PutEnv sta ENVX.hEnv ldy #$ff .1 iny - jsr SHARED.TXTPTR.GetY NAME= + jsr SHARED.TXTPTRgY NAME= beq ENVX.PutEnv.9 cmp #'=' @@ -51,7 +51,7 @@ ENVX.SetEnv.I .15 ldy #$ff .16 iny - jsr SHARED.TXTPTR.GetY + jsr SHARED.TXTPTRgY beq .17 jsr SHARED.IsIDValid @@ -62,7 +62,7 @@ ENVX.SetEnv.I ldy #$ff .19 iny - jsr SHARED.FORPNT.getY + jsr SHARED.FORPNTgY bne .19 jsr ENVX.NextEnvP4Y ZPPtr4 = ENVSIZE + VALUE @@ -115,7 +115,7 @@ ENVX.SetEnv.I .22 ldy #$ff .23 iny - jsr SHARED.TXTPTR.GetY + jsr SHARED.TXTPTRgY sta (ZPPtr3),y beq .24 jsr SHARED.IsIDValid @@ -128,7 +128,7 @@ ENVX.SetEnv.I ldy #$ff .25 iny - jsr SHARED.FORPNT.getY + jsr SHARED.FORPNTgY sta (ZPPtr3),y bne .25 @@ -192,7 +192,7 @@ ENVX.GetEnv sta ENVX.hEnv .4 iny lda (ZPPtr3),y - jsr SHARED.FORPNT.PutY + jsr SHARED.FORPNTpY bne .4 >LDYA FORPNT @@ -236,7 +236,7 @@ ENVX.FindEnvVar jsr ENVX.InitEnvP3 Store ENV ldy #$ff .2 iny - jsr SHARED.TXTPTR.GetY + jsr SHARED.TXTPTRgY beq .3 jsr SHARED.IsIDValid @@ -270,7 +270,7 @@ ENVX.FindSIDVar >LDYAI ENVX.SIDVars ldy #$ff .2 iny - jsr SHARED.TXTPTR.GetY + jsr SHARED.TXTPTRgY beq .3 jsr SHARED.IsIDValid @@ -348,7 +348,7 @@ ENVX.SIDVarsGID ldx #S.SESSION.GID jsr MATH.A2STR10NP - >LDYAI A2osX.NumStrBuf + >LDYAI FOUTBuf clc rts diff --git a/SYS/KERNEL.S.ERROR.txt b/SYS/KERNEL.S.ERROR.txt index 84a70e43..b09dcdcb 100644 --- a/SYS/KERNEL.S.ERROR.txt +++ b/SYS/KERNEL.S.ERROR.txt @@ -1,18 +1,17 @@ NEW AUTO 3,1 *-------------------------------------- -* GetErrorMessage +* GetErrMsg * In : * Out : *-------------------------------------- -K.GetErrorMessage - >PULLW ZPPtr2 Dst Buf +K.GetErrMsg >PULLW ZPPtr2 Dst Buf >PULLA Err Code sta SETREADAUX sta SETWRITEAUX - jsr ERRORX.GetErrorMessage + jsr ERRORX.GetErrMsg sta CLRREADAUX rts diff --git a/SYS/KERNEL.S.ERRORX.txt b/SYS/KERNEL.S.ERRORX.txt index 40e86c61..d50b8255 100644 --- a/SYS/KERNEL.S.ERRORX.txt +++ b/SYS/KERNEL.S.ERRORX.txt @@ -1,7 +1,7 @@ NEW AUTO 3,1 *-------------------------------------- -ERRORX.GetErrorMessage +ERRORX.GetErrMsg ldx #ERRORX.MSG stx ZPPtr1 ldx /ERRORX.MSG diff --git a/SYS/KERNEL.S.FS.txt b/SYS/KERNEL.S.FS.txt index b5a856b3..73c42dd8 100644 --- a/SYS/KERNEL.S.FS.txt +++ b/SYS/KERNEL.S.FS.txt @@ -110,7 +110,7 @@ FS.CLOSE.DIR ldy #S.FD.REG.REF sta K.MLI.PARAMS+1 >MLICALL MLICLOSE -* bcs IO.WRITE.REG.RTS +* bcs FS.RTS .1 ldy #S.FD.REG.IOBUF lda (pFD),y @@ -198,13 +198,13 @@ FS.MLIOPEN >LDYAI 1024 get a ProDOS IOBUF * clc .9 -FS.MLIOPEN.RTS rts +FS.RTS rts *-------------------------------------- FS.Stat bit A2osX.FSID bmi FS.Stat.FX FS.Stat.203 >MLICALL MLIGETFILEINFO - bcs FS.MLIOPEN.RTS + bcs FS.RTS jsr FS.ClrStat diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index 0c554b1b..e3e1af8b 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -7,7 +7,7 @@ NEW * X = SYSfnc.Index * Y,A = free for Inline param *-------------------------------------- -GP.CodeStart jmp GP.SysCall +GP.CS jmp GP.SysCall *-------------------------------------- * LIBCALL (AUXLC to AUXLC) * Used by user @@ -189,7 +189,7 @@ GP.AtkCall dec IRQ.InKernel jsr GO.A2osX -GP.AtkCall.INC inc IRQ.InKernel + inc IRQ.InKernel rts */-------------------------------------- * # Add32,Sub32,Mul32,IMul32,Div32,IDiv32,Mod32,IMod32,Cmp32,ICmp32 @@ -204,28 +204,33 @@ GP.AtkCall.INC inc IRQ.InKernel * On stack (long) *\-------------------------------------- GP.FpuCall dec IRQ.InKernel - cpx #FPU.FADD + cpx #FPU.FMUL bcs .1 - jsr MATH INT32, direct JMP - bra GP.AtkCall.INC + jsr MATH math16 & math32, direct JMP + + inc IRQ.InKernel + rts .1 phx jsr GP.SetFAC Get float from stack plx cpx #FPU.PWR+1 - bcs GP.RomCallGetFacOnStack + bcs GP.GetFAC */-------------------------------------- -* # FAdd,FSub,FMult,FDiv,FPwr -* Return X+Y, X-Y, X*Y, X/Y, X^Y +* # FAdd,FSub,FMul,FDiv,FPwr +* Return X*Y, X/Y, X+Y, X-Y +* ## C +* `float pwr ( float x, float y);` * ## ASM * **In:** * `>PUSHF X (float)` * `>PUSHF Y (float)` +* `>FPU fmul` +* `>FPU fdiv` +* `>FPU fmod` TODO * `>FPU fadd` * `>FPU fsub` -* `>FPU fmult` -* `>FPU fdiv` * `>FPU fpwr` * ## RETURN VALUE * On stack (float) @@ -255,8 +260,7 @@ GP.FpuCall dec IRQ.InKernel * ## RETURN VALUE * On stack (Float) *\-------------------------------------- -GP.RomCallGetFacOnStack - jsr GP.ROMCALL +GP.GetFAC jsr GP.ROMCALL lda pStack ldy pStack+1 @@ -270,7 +274,7 @@ GP.RomCall phx bit RROMBNK1 plx - jsr GP.RomCall.JmpX + jsr MATHF .8 ldx #$ff bit $C000,x @@ -308,7 +312,7 @@ GP.Float ldy #3 sta FAC Positive + Exp=32 ldx #FPU.LTOF - bra GP.RomCallGetFacOnStack + bra GP.GetFAC */-------------------------------------- * # lrintf * Return float rounded into a long @@ -373,8 +377,8 @@ GO.A2osX php * bit RRAMWRAMBNK1 tsx - stx A2osX.SaveSX - ldx A2osX.SaveSM + stx SaveSX + ldx SaveSM txs sta CLRALTZP bra GO.EXIT @@ -385,8 +389,8 @@ GO.A2osX.BNK ldx #RRAMWRAMBNK1 Self Modified, initialized to BNK1 for INIT3 * bit $C000,x sta SETALTZP tsx - stx A2osX.SaveSM - ldx A2osX.SaveSX + stx SaveSM + ldx SaveSX txs *-------------------------------------- GO.EXIT pha push P on stack @@ -410,15 +414,15 @@ GP.IRQ cld sta SETALTZP switch to aux LC tsx - stx A2osX.SaveSM - ldx A2osX.SaveSX + stx SaveSM + ldx SaveSX txs GP.IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED tsx go back to Main - stx A2osX.SaveSX - ldx A2osX.SaveSM + stx SaveSX + ldx SaveSM txs sta CLRALTZP rts @@ -432,7 +436,7 @@ GP.IRQ.Exit stz IRQ.Skip reset flag *-------------------------------------- *BrkHandler bra * *-------------------------------------- -GP.CodeEnd .BS $BED0-* +GP.CE .BS $BED0-* *-------------------------------------- * $BED0->$BEEF : Public Variables *-------------------------------------- @@ -446,7 +450,6 @@ GP.CodeEnd .BS $BED0-* .DA #0 ChRoot/Preemptive Disabled .HS 00000000000000 All Slots marked as "Free" *-------------------------------------- -GP.End .EQ * MAN SAVE usr/src/sys/kernel.s.gp LOAD usr/src/sys/kernel.s diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 03d7565a..9cd2e9de 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -6,8 +6,8 @@ Kernel.Init2 sei txs sta SETALTZP - stx A2osX.SaveSM - stx A2osX.SaveSX + stx SaveSM + stx SaveSX ldx #Kernel.ZP.S-1 @@ -35,10 +35,10 @@ Kernel.Init2 sei >LDYAI Mem.XHiMem >STYA ZPPtr2 - lda #A2osX.AUX.S + lda #AUX.S eor #$ff tax - lda /A2osX.AUX.S + lda /AUX.S eor #$ff pha @@ -224,7 +224,7 @@ KConfigLoad >LDYAI MSG.KCREAD jsr MLIENTRY Bypass ATALK .DA #MLIGETFILEINFOEX - .DA MLIGETFILEINFOEX00 + .DA pMLIGFIEX bcc .1 eor #MLI.E.BADCALL beq .2 regular ProDOS @@ -237,20 +237,20 @@ KConfigLoad >LDYAI MSG.KCREAD .2 jsr MLI .DA #MLIOPEN - .DA MLIOPEN00 + .DA pMLIOPEN bcs .9 - lda MLIOPEN00+5 - sta MLIREAD00+1 - sta MLICLOSE00+1 + lda pMLIOPEN+5 + sta pMLIREAD+1 + sta pMLICLOSE+1 jsr MLI .DA #MLIREAD - .DA MLIREAD00 + .DA pMLIREAD php pha jsr MLI .DA #MLICLOSE - .DA MLICLOSE00 + .DA pMLICLOSE pla plp bcs .9 @@ -358,13 +358,13 @@ SysScrInit >LDYAI Mem.XHiMem SysScrInit.TTYPtrs lda FD.TTY+S.FD.DEV.DCBPTR sec - sbc #TTY.BUF.SIZE+S.DCB.TTY + sbc #80*24+S.DCB.TTY sta FD.TTY+S.FD.DEV.DCBPTR sta .1+1 tay lda FD.TTY+S.FD.DEV.DCBPTR+1 - sbc /TTY.BUF.SIZE+S.DCB.TTY + sbc /80*24+S.DCB.TTY sta FD.TTY+S.FD.DEV.DCBPTR+1 sta .1+2 @@ -1100,14 +1100,14 @@ EvtMgrInit >LDYAI MSG.EVT lda /Evt.Table sta pEvent+1 clc -EvtMgrInit.RTS rts + rts *-------------------------------------- TskMgrInit >LDYAI MSG.TSK >SYSCALL2 puts >LDYAI K.ENV.SIZE get a buffer for ENV >SYSCALL NewStkObj Buffer in AUX mem - bcs EvtMgrInit.RTS + bcs .99 >STYA ZPPtr1 @@ -1139,7 +1139,7 @@ TskMgrInit >LDYAI MSG.TSK >LDYAI $2E0 Get ROOT from QC >SYSCALL2 strdup - bcs .9 +.99 bcs .9 txa ldy #S.PS.hCWD @@ -1148,7 +1148,7 @@ TskMgrInit >LDYAI MSG.TSK >PUSHWI I.ENV.BOOT >PUSHWI $2C0 Get BOOT from QC >SYSCALL2 SetEnv -.99 bcs .9 + bcs .9 >PUSHWI I.ENV.ROOT >PUSHWI $2E0 Get ROOT from QC @@ -1293,24 +1293,23 @@ I.ENV.DRV .AZ "DRV=${BOOT}drv/" SBININITD .AZ "${ROOT}sbin/initd" .DA #0 end of ARGV for ExecV *-------------------------------------- -MLIGETFILEINFOEX00 - .DA #2 - .DA MLIOPEN00.FN +pMLIGFIEX .DA #2 + .DA FNKConfig .BS S.FIEX *-------------------------------------- -MLIOPEN00 .DA #3 - .DA MLIOPEN00.FN +pMLIOPEN .DA #3 + .DA FNKConfig .DA $B000 .BS 1 -MLIOPEN00.FN >PSTR "A2osX.kconfig" +FNKConfig >PSTR "A2osX.kconfig" *-------------------------------------- -MLIREAD00 .DA #4 +pMLIREAD .DA #4 .BS 1 .DA A2osX.KCONFIG .DA 16 .BS 2 *-------------------------------------- -MLICLOSE00 .DA #1 +pMLICLOSE .DA #1 .BS 1 *-------------------------------------- FD.NULL .DA #S.FD.T.CDEV diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 55be9977..9bd78a38 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -68,7 +68,7 @@ K.SYSCALL .DA K.ChTyp $00 : STAT .DA K.Shift $68 : ARG .DA K.ArgV .DA K.ArgVDup - .DA K.GetErrorMessage + .DA K.GetErrMsg .DA K.AToF $70 : STDLIB .DA K.AToI diff --git a/SYS/KERNEL.S.JMPX.txt b/SYS/KERNEL.S.JMPX.txt index 0e15e4bd..f412f0a7 100644 --- a/SYS/KERNEL.S.JMPX.txt +++ b/SYS/KERNEL.S.JMPX.txt @@ -30,15 +30,15 @@ KX.SYSCALL .DA STRVX.StrVNew .DA PWDX.OpenSession .DA PWDX.CloseSession - .DA SLISTX.SListGetData - .DA SLISTX.SListAddData - .DA SLISTX.SListSetData - .DA SLISTX.SListGetByID + .DA SLISTX.GetData + .DA SLISTX.AddData + .DA SLISTX.SetData + .DA SLISTX.GetByID - .DA SLISTX.SListNewKey - .DA SLISTX.SListLookup - .DA SLISTX.SListFree - .DA SLISTX.SListNew + .DA SLISTX.NewKey + .DA SLISTX.Lookup + .DA BLISTX.Free + .DA BLISTX.New *-------------------------------------- MAN SAVE usr/src/sys/kernel.s.jmpx diff --git a/SYS/KERNEL.S.MATH.txt b/SYS/KERNEL.S.MATH.txt index 3d6c5826..741fb70b 100644 --- a/SYS/KERNEL.S.MATH.txt +++ b/SYS/KERNEL.S.MATH.txt @@ -2,26 +2,97 @@ NEW AUTO 3,1 *-------------------------------------- MATH jmp (.1,x) -.1 .DA M16.ADD +.1 .DA M16.uMUL + .DA M16.uDIV + .DA M16.uMOD + .DA M16.ADD .DA M16.SUB - .DA M16.UMUL - .DA M16.IMUL - .DA M16.UDIV - .DA M16.IDIV - .DA M16.UMOD - .DA M16.IMOD - .DA M16.CMP UCMP - .DA M16.CMP ICMP + + .DA M16.SHL + .DA M16.SHR + + .DA M16.L + .DA M16.LE + .DA M16.G + .DA M16.GE + .DA M16.E + .DA M16.NE + + .DA M16.AND + .DA M16.OR + .DA M16.XOR + + .DA M16.LAND + .DA M16.LOR +*-------------------------------------- + .DA M16.iMUL + .DA M16.iDIV + .DA M16.iMOD + .DA M16.ADD + .DA M16.SUB + + .DA M16.SHL + .DA M16.SHR + + .DA M16.L + .DA M16.LE + .DA M16.G + .DA M16.GE + .DA M16.E + .DA M16.NE + + .DA M16.AND + .DA M16.OR + .DA M16.XOR + + .DA M16.LAND + .DA M16.LOR +*-------------------------------------- + .DA M32.uMUL + .DA M32.uDIV + .DA M32.uMOD .DA M32.ADD .DA M32.SUB - .DA M32.UMUL - .DA M32.IMUL - .DA M32.UDIV - .DA M32.IDIV - .DA M32.UMOD - .DA M32.IMOD - .DA M32.CMP UCMP - .DA M32.CMP ICMP + + .DA M32.SHL + .DA M32.SHR + + .DA M32.L + .DA M32.LE + .DA M32.G + .DA M32.GE + .DA M32.E + .DA M32.NE + + .DA M32.AND + .DA M32.OR + .DA M32.XOR + + .DA M32.LAND + .DA M32.LOR +*-------------------------------------- + .DA M32.iMUL + .DA M32.iDIV + .DA M32.iMOD + .DA M32.ADD + .DA M32.SUB + + .DA M32.SHL + .DA M32.SHR + + .DA M32.L + .DA M32.LE + .DA M32.G + .DA M32.GE + .DA M32.E + .DA M32.NE + + .DA M32.AND + .DA M32.OR + .DA M32.XOR + + .DA M32.LAND + .DA M32.LOR *-------------------------------------- MATH.A2STR10NP ldx #3 3 digit max ldy #0 Disable Padding @@ -38,14 +109,14 @@ MATH.ACC322STR10 stx .5+1 Pad Len sty .81+1 Pad Char - stz A2osX.NumStrLen + stz FOUTBuf-1 bcc .1 clc lda ACC32+3 bpl .1 - jsr M32.nACC32 + jsr M32.nACC sec .1 ror ACC32.Sign Save sign @@ -59,6 +130,7 @@ MATH.ACC322STR10 sed switch to BCD mode ldx #32 let's roll 32 bits + .3 jsr MATH.ACC32x2 ldy #4 @@ -126,9 +198,9 @@ MATH.ACC322STR10 lda #0 -.88 ldy A2osX.NumStrLen - inc A2osX.NumStrLen - sta A2osX.NumStrBuf,y +.88 ldy FOUTBuf-1 + inc FOUTBuf-1 + sta FOUTBuf,y rts *-------------------------------------- * Convert Hex int at ZPPtr2 to ACC32 @@ -136,7 +208,7 @@ MATH.ACC322STR10 MATH.Hex2ACC32 lda (ZPPtr2) beq .9 - jsr SHARED.IsHexDigit + jsr .80 bcs .9 jsr M32.A2ACC32 @@ -147,7 +219,7 @@ MATH.Hex2ACC32 lda (ZPPtr2) lda (ZPPtr2),y beq .8 - jsr SHARED.IsHexDigit + jsr .80 bcs .8 pha @@ -166,6 +238,29 @@ MATH.Hex2ACC32 lda (ZPPtr2) rts .9 sec +.99 rts +*-------------------------------------- +.80 jsr ZP.IsDigit + bcc .88 + + cmp #'A' + bcc .9 + + cmp #'F'+1 + bcc .81 + + cmp #'a' + bcc .9 + + cmp #'f'+1 + bcs .99 + + eor #$20 +.81 +* clc + sbc #'A'-11 cc so A->10 (11-CC) + clc +.88 and #$0F rts *-------------------------------------- * Convert Decimal int at ZPPtr2 to ACC32 @@ -176,7 +271,7 @@ MATH.Dec2ACC32 jsr M32.ACC32Z eor #'-' bne .10 - jsr SHARED.NextCharPtr2 skip '-' + jsr SHARED.NextCP2 skip '-' sec .10 ror .80+1 set pos/neg flag @@ -218,7 +313,7 @@ MATH.Dec2ACC32 jsr M32.ACC32Z bpl .88 phy - jsr M32.nACC32 + jsr M32.nACC ply .88 clc @@ -251,6 +346,13 @@ MATH.ACC32x2 asl ACC32 rol ACC32+3 rts *-------------------------------------- +MATH.CMPT .DA #%100 L + .DA #%110 LE + .DA #%001 G + .DA #%011 GE + .DA #%010 E + .DA #%101 NE +*-------------------------------------- MAN SAVE usr/src/sys/kernel.s.math LOAD usr/src/sys/kernel.s diff --git a/SYS/KERNEL.S.MATH16.txt b/SYS/KERNEL.S.MATH16.txt index 0b651271..f0b43858 100644 --- a/SYS/KERNEL.S.MATH16.txt +++ b/SYS/KERNEL.S.MATH16.txt @@ -1,6 +1,12 @@ NEW AUTO 3,1 *-------------------------------------- +M16.AND lda #$32 AND (zp) + .HS 2C BIT ABS +M16.OR lda #$12 ORA (zp) + .HS 2C BIT ABS +M16.XOR lda #$52 EOR (zp) + .HS 2C BIT ABS M16.ADD lda #$72 ADC (zp) .HS 2C BIT ABS M16.SUB lda #$F2 SBC (zp) @@ -22,30 +28,99 @@ M16.SUB lda #$F2 SBC (zp) rts *-------------------------------------- -* Returns: -* ff X < Y -* 0 X = Y -* 1 X > Y -*-------------------------------------- -*M16.UCMP -*M16.ICMP -M16.CMP jsr M16.SUB - - tay A = HI byte - bmi .2 +M16.SHL sec + .HS 90 BCC +M16.SHR clc -.1 ora (pStack) LO byte + lda (pStack) + inc pStack + inc pStack + + tax beq .8 - lda #1 + ldy #1 + + bcc .3 + +.1 lda (pStack) + asl + sta (pStack) + + lda (pStack),y + rol + sta (pStack),y + + dex + bne .1 + +.8 rts +*-------------------------------------- +.3 lda (pStack),y + lsr + sta (pStack),y + + lda (pStack) + ror + sta (pStack) + + dex + bne .3 + + rts +*-------------------------------------- +M16.L ldx #0 + bra M16.CMP +M16.LE ldx #1 + bra M16.CMP +M16.G ldx #2 + bra M16.CMP +M16.GE ldx #3 + bra M16.CMP +M16.E ldx #4 + bra M16.CMP +M16.NE ldx #5 +*-------------------------------------- +M16.CMP jsr M16.SUB + + tay A = BYTE 1 + bmi .1 + + ora (pStack) BYTE 0 + beq .2 + + lda #%001 .HS 2C BIT ABS -.2 lda #$ff +.1 lda #%100 + .HS 2C BIT ABS -.8 inc pStack - inc pStack +.2 lda #%010 + .HS 2C BIT ABS - rts + and MATH.CMPT,x + bra M16.LOR2 +*-------------------------------------- +M16.LAND jsr M16.AND + bra M16.LOR1 + +M16.LOR jsr M16.OR + +M16.LOR1 dey y = 1 + + lda (pStack) + ora (pStack),y + +M16.LOR2 beq .1 + + lda #1 + +.1 sta (pStack) + + lda #0 + sta (pStack),y + + rts *-------------------------------------- M16.UMUL clc .HS B0 BCS @@ -56,19 +131,18 @@ M16.IMUL sec jsr M16.MUL plp - bcc M16.PutTMP32 + bcc M16.PutTMP M16.ITMP lda ACC32.Sign eor ARG32.Sign - bpl M16.PutTMP32 + bpl M16.PutTMP *-------------------------------------- -* M16.PutnTMP32 +* M16.PutnTMP *-------------------------------------- lda #TMP32 .HS 2C BIT ABS *-------------------------------------- -M16.PutnARG32 - lda #ARG32 +M16.PutnARG lda #ARG32 sta .1+1 ldy #0 ldx #3 @@ -84,7 +158,7 @@ M16.PutnARG32 rts *-------------------------------------- -M16.UDIV clc +M16.uDIV clc .HS B0 BCS M16.IDIV sec clv @@ -106,15 +180,15 @@ M16.MOD php lda ACC32.Sign IDIV eor ARG32.Sign - bpl M16.PutARG32 - bra M16.PutnARG32 + bpl M16.PutARG + bra M16.PutnARG -.3 bvc M16.PutARG32 DIV +.3 bvc M16.PutARG DIV *-------------------------------------- -M16.PutTMP32 ldy #TMP32 MOD +M16.PutTMP ldy #TMP32 MOD .HS 2C BIT ABS *-------------------------------------- -M16.PutARG32 ldy #ARG32 +M16.PutARG ldy #ARG32 lda $0,y sta (pStack) @@ -151,7 +225,7 @@ M16.MULDIVMOD >PULLW ACC32 .1 lda ACC32.Sign bpl M16.RTS *-------------------------------------- -* M16.nACC32 +* M16.nACC *-------------------------------------- ldy #ACC32 .HS 2C BIT ABS @@ -198,7 +272,6 @@ M16.MUL stz TMP32 dex bne .1 - clc rts *-------------------------------------- M16.DIVMOD stz TMP32 diff --git a/SYS/KERNEL.S.MATH32.txt b/SYS/KERNEL.S.MATH32.txt index 72f25092..c5c466f8 100644 --- a/SYS/KERNEL.S.MATH32.txt +++ b/SYS/KERNEL.S.MATH32.txt @@ -1,57 +1,149 @@ NEW AUTO 3,1 *-------------------------------------- +M32.AND lda #$32 AND (zp) + .HS 2C BIT ABS +M32.OR lda #$12 ORA (zp) + .HS 2C BIT ABS +M32.XOR lda #$52 EOR (zp) + .HS 2C BIT ABS M32.ADD lda #$72 ADC (zp) .HS 2C BIT ABS M32.SUB lda #$F2 SBC (zp) - sta .3 + sta .2 - asl CS if SBC, CC if ADC + asl CS if SBC, CC if ADC others = don't care ldy #4 ldx #4 -.2 lda (pStack),y -.3 adc (pStack) SELF MODIFIED +.1 lda (pStack),y +.2 adc (pStack) SELF MODIFIED sta (pStack),y inc pStack dex - bne .2 + bne .1 rts *-------------------------------------- -* Returns: -* ff X < Y -* 0 X = Y -* 1 X > Y -*-------------------------------------- -*M32.UCMP -*M32.ICMP -M32.CMP jsr M32.SUB +M32.SHL sec + .HS 90 BCC +M32.SHR clc - tay A = BYTE 3 - bmi .2 - -.1 ora (pStack) BYTE 0 - ldy #1 - ora (pStack),y BYTE 1 - iny - ora (pStack),y BYTE 2 - beq .8 - - lda #1 - .HS 2C BIT ABS - -.2 lda #$ff - -.8 inc pStack + lda (pStack) + inc pStack inc pStack inc pStack inc pStack - rts + tax + beq .8 + bcc .3 + +.1 ldy #0 + + clc + +.2 lda (pStack),y + rol + sta (pStack),y + + iny + tya + eor #4 + bne .2 + + dex + bne .1 + +.8 rts +*-------------------------------------- +.3 ldy #3 + + clc + +.4 lda (pStack),y + ror + sta (pStack),y + + dey + bpl .4 + + dex + bne .3 + + rts +*-------------------------------------- +M32.L ldx #0 + bra M32.CMP +M32.LE ldx #1 + bra M32.CMP +M32.G ldx #2 + bra M32.CMP +M32.GE ldx #3 + bra M32.CMP +M32.E ldx #4 + bra M32.CMP +M32.NE ldx #5 +*-------------------------------------- +M32.CMP jsr M32.SUB + + tay A = BYTE 3 + bmi .1 + + ldy #2 + +.10 ora (pStack),y + dey + bpl .10 + + tay + beq .2 + + lda #%001 + .HS 2C BIT ABS + +.1 lda #%100 + .HS 2C BIT ABS + +.2 lda #%010 + .HS 2C BIT ABS + + and MATH.CMPT,x + bra M32.LOR2 +*-------------------------------------- +M32.LAND jsr M32.AND + bra M32.LOR1 + +M32.LOR jsr M32.OR + +M32.LOR1 lda (pStack) + + ldy #3 + +.1 ora (pStack),y + dey + bne .1 + + tay + +M32.LOR2 beq .1 + + lda #1 + +.1 sta (pStack) + + lda #0 + + ldy #3 + +.2 sta (pStack),y + dey + bne .2 + + rts *-------------------------------------- M32.UMUL clc .HS B0 BCS @@ -62,18 +154,18 @@ M32.IMUL sec jsr M32.MUL plp - bcc M32.PutTMP32 + bcc M32.PutTMP M32.ITMP lda ACC32.Sign eor ARG32.Sign - bpl M32.PutTMP32 + bpl M32.PutTMP *-------------------------------------- -* M32.PutnTMP32 +* M32.PutnTMP *-------------------------------------- lda #TMP32 .HS 2C BIT ABS *-------------------------------------- -M32.PutnARG32 lda #ARG32 +M32.PutnARG lda #ARG32 sta .1+1 ldy #0 ldx #3 @@ -111,15 +203,15 @@ M32.MOD php lda ACC32.Sign IDIV eor ARG32.Sign - bpl M32.PutARG32 - bra M32.PutnARG32 + bpl M32.PutARG + bra M32.PutnARG -.3 bvc M32.PutARG32 DIV +.3 bvc M32.PutARG DIV *-------------------------------------- -M32.PutTMP32 lda #TMP32 MOD +M32.PutTMP lda #TMP32 MOD .HS 2C BIT ABS *-------------------------------------- -M32.PutARG32 lda #ARG32 +M32.PutARG lda #ARG32 sta .1+1 ldy #3 @@ -131,7 +223,7 @@ M32.PutARG32 lda #ARG32 rts *-------------------------------------- -M32.PopACC32 ldy #0 +M32.PopACC ldy #0 .1 lda (pStack) inc pStack @@ -143,7 +235,7 @@ M32.PopACC32 ldy #0 sta ACC32.Sign rts *-------------------------------------- -M32.GetARG32 ldy #0 +M32.GetARG ldy #0 .1 lda (pStack),y sta ARG32,y @@ -156,8 +248,8 @@ M32.GetARG32 ldy #0 M32.RTS rts *-------------------------------------- M32.MULDIVMOD php - jsr M32.PopACC32 - jsr M32.GetARG32 + jsr M32.PopACC + jsr M32.GetARG plp bcc M32.RTS jsr .1 @@ -165,7 +257,7 @@ M32.MULDIVMOD php * M32.ARG32ABS *-------------------------------------- lda ARG32.Sign - bmi M32.nARG32 + bmi M32.nARG rts *-------------------------------------- * M32.ACC32ABS @@ -173,9 +265,9 @@ M32.MULDIVMOD php .1 lda ACC32.Sign bpl M32.RTS *-------------------------------------- -M32.nACC32 ldy #ACC32 +M32.nACC ldy #ACC32 .HS 2C BIT ABS -M32.nARG32 ldy #ARG32 +M32.nARG ldy #ARG32 ldx #3 sec @@ -217,15 +309,11 @@ M32.MUL jsr M32.TMP32Z eor #4 bne .2 -.3 asl ACC32 - rol ACC32+1 - rol ACC32+2 - rol ACC32+3 +.3 jsr MATH.ACC32x2 dex bne .1 - clc rts *-------------------------------------- * ARG32 = ARG32 div ACC32 @@ -239,11 +327,14 @@ M32.DIVMOD jsr M32.TMP32Z rol ARG32+1 rol ARG32+2 rol ARG32+3 + rol TMP32 rol TMP32+1 rol TMP32+2 rol TMP32+3 + sec + lda TMP32 sbc ACC32 pha diff --git a/SYS/KERNEL.S.MD5X.txt b/SYS/KERNEL.S.MD5X.txt index b05ef419..e8c72dbb 100644 --- a/SYS/KERNEL.S.MD5X.txt +++ b/SYS/KERNEL.S.MD5X.txt @@ -80,7 +80,7 @@ ZPChunkLen .BS 2 MD5X.MD5 ldy #$ff .1 iny - jsr SHARED.TXTPTR.GetY + jsr SHARED.TXTPTRgY bne .1 sty ZPDataLen @@ -148,12 +148,12 @@ MD5X.Update.I ldy #S.MD5.FINALIZED .3 lda #64 .50 sta ZPChunkLen Save Chunk Len - jsr MD5UpdateBitCount + jsr MD5UpdBC ldy #0 -.51 jsr SHARED.TXTPTR.GetY Load Buffer with data - sta MD5.BUFFER64,y +.51 jsr SHARED.TXTPTRgY Load Buffer with data + sta MD5.Buf,y iny cpy ZPChunkLen bne .51 @@ -163,12 +163,12 @@ MD5X.Update.I ldy #S.MD5.FINALIZED * Append "$80" & Padding & original size lda #$80 no, Append $80 - sta MD5.BUFFER64,y + sta MD5.Buf,y lda #0 .52 iny Pad with 0 to 64 cpy #64 beq .53 - sta MD5.BUFFER64,y + sta MD5.Buf,y bra .52 .53 ldy #S.MD5.EXTRABIT Mark MD5 Context as Appended lda #$80 @@ -176,7 +176,7 @@ MD5X.Update.I ldy #S.MD5.FINALIZED lda ZPChunkLen cmp #56 Enough room for BITCOUNT ? bcs .58 no - jsr MD5AppendBitCount + jsr MD5AppBC .58 jsr MD5Transform jsr MD5UpdateABCD0 .8 lda ZPDataLen Substract Bytes processed from LEN @@ -214,20 +214,20 @@ MD5X.Finalize.I ldy #S.MD5.FINALIZED lsr tax lda MD5.DIGITS,x - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn lda (ZPCtxPtr),y and #$0F tax lda MD5.DIGITS,x - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn iny cpy #S.MD5.ABCD0+16 bne .2 lda #0 - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn pla jmp K.FreeMem @@ -238,12 +238,11 @@ MD5X.Finalize.I ldy #S.MD5.FINALIZED * In : * ZPCtxPtr = MD5 Context *-------------------------------------- -MD5AppendBitCount - ldx #56 +MD5AppBC ldx #56 ldy #S.MD5.BITCOUNT Append 8 Bytes of BITCOUNT .1 lda (ZPCtxPtr),y - sta MD5.BUFFER64,x + sta MD5.Buf,x inx iny cpy #S.MD5.BITCOUNT+8 @@ -259,8 +258,7 @@ MD5AppendBitCount * CL = Size (in bytes) to add to MD5 context * ZPCtxPtr = MD5 Context *-------------------------------------- -MD5UpdateBitCount - stz ZPChunkLen+1 +MD5UpdBC stz ZPChunkLen+1 lda ZPChunkLen asl rol ZPChunkLen+1 @@ -302,16 +300,16 @@ MD5ExtraChunk ldy #S.MD5.FINALIZED bne .1 lda #$80 - sta MD5.BUFFER64 Add extra bit to buffer + sta MD5.Buf Add extra bit to buffer sta (ZPCtxPtr),y Mark Extrabit added inx -.1 stz MD5.BUFFER64,x pad with "0"... +.1 stz MD5.Buf,x pad with "0"... inx cpx #56 bne .1 ...until room for bitcount - jsr MD5AppendBitCount + jsr MD5AppBC jsr MD5Transform *-------------------------------------- * MD5UpdateABCD0 @@ -420,7 +418,7 @@ MD5.XXXX.END >MOV32 MD5.D,MD5.DTemp tay ldx #0 clc -.2 lda MD5.BUFFER64,y ADC32 M[g],MD5.F,MD5.F +.2 lda MD5.Buf,y ADC32 M[g],MD5.F,MD5.F adc MD5.F,x sta MD5.F,x iny @@ -481,7 +479,7 @@ MD5.F2 .BS 4 MD5.DTemp .BS 4 MD5.F .BS 4 MD5.i .BS 1 -MD5.BUFFER64 .BS 64 +MD5.Buf .BS 64 *-------------------------------------- MAN SAVE usr/src/sys/kernel.s.md5x diff --git a/SYS/KERNEL.S.MOUNT.txt b/SYS/KERNEL.S.MOUNT.txt index 32f26926..d81198a1 100644 --- a/SYS/KERNEL.S.MOUNT.txt +++ b/SYS/KERNEL.S.MOUNT.txt @@ -8,8 +8,7 @@ NEW * * Out : A = hMount *-------------------------------------- -K.Mount >PULLW ZPPtr2 callback - >PULLW ZPPtr1 mountpoint +K.Mount jsr SHARED.PullP2P1 callback,mountpoint ldx #1 diff --git a/SYS/KERNEL.S.PFT.txt b/SYS/KERNEL.S.PFT.txt index c4afe8af..6a49dfa3 100644 --- a/SYS/KERNEL.S.PFT.txt +++ b/SYS/KERNEL.S.PFT.txt @@ -21,7 +21,7 @@ PFT.CheckPathYA >PUSHYA >PUSHWI K.Buf256 >SYSCALL2 realpath - bcs PFT.YAToMLIPATH.RTS + bcs PFT.RTS ldx #0 @@ -92,8 +92,7 @@ PFT.YAToMLIPATH >STYA .1+1 >STYA K.MLI.PARAMS+1 clc -PFT.YAToMLIPATH.RTS - rts +PFT.RTS rts *-------------------------------------- PFT.CheckNode4 ldy #4 .HS 2C BIT ABS @@ -107,7 +106,7 @@ PFT.CheckNodeA stx .80+1 Save SYSCALL # jsr DEV.GetPFD bcs .99 - ldy #S.FD.HANDLER + ldy #S.FD.PFT lda (pFD),y beq .8 Handler is 0, back to kernel.... diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 62834d32..56324456 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -68,7 +68,7 @@ PS.Exec jsr PS.CreateChild A=PID,Child S.PS at PS.NewPSPtr,PS.Load.hMem .8 lda #$ff SELF MODIFIED * clc .9 -PS.Exec.RTS rts + rts */-------------------------------------- * # Fork * ## C @@ -79,7 +79,8 @@ PS.Exec.RTS rts * A = Child PSID *\-------------------------------------- K.Fork jsr PS.CreateChild A=PID,Child S.PS at PS.NewPSPtr,PS.Load.hMem - bcs PS.Exec.RTS + bcs .99 + sta .8+1 ldy #S.PS.S @@ -106,7 +107,7 @@ K.Fork jsr PS.CreateChild A=PID,Child S.PS at PS.NewPSPtr,PS.Load.hMem ldy #S.PS.hDS lda (ZPPtr1),y jsr MEM.Dup - bcs .9 +.99 bcs .9 ldy #S.PS.hDS sta (PS.NewPSPtr),y @@ -358,7 +359,7 @@ PS.Load ldy #$ff >LDYAI PS.SHUTDOWN jsr PS.Find.PATH - bcs PS.Load.RTS + bcs PS.RTS jmp PS.LoadBIN *-------------------------------------- @@ -366,12 +367,12 @@ PS.Load.IPATH lda #E.BADPATH .HS 2C PS.Load.IBIN lda #E.IBIN sec -PS.Load.RTS rts +PS.RTS rts *-------------------------------------- PS.Load.SCRIPT jsr PS.Buf2IO jsr PS.LoadGetHeader - bcs PS.Load.RTS + bcs PS.RTS >PUSHWI PS.Load.ROOT >PUSHWI K.Buf256 K.Buf256 = "$ROOT" @@ -406,7 +407,7 @@ PS.Load.SCRIPT jsr PS.Buf2IO .5 >LDYAI K.Buf256 jsr PS.STAT.YA - bcs PS.Load.RTS + bcs PS.RTS lda K.S.STAT+S.STAT.P.TYPE cmp #S.FI.T.BIN @@ -580,7 +581,7 @@ PS.AddArgV ldy #$ff In both cases, remove ARGV[0] * lda #0 jsr PS.AddYAp12ArgSize - jsr SHARED.AddYp1ToPtr1 + jsr SHARED.AddYp12P1 bra .1 .4 txa @@ -634,8 +635,8 @@ PS.AddPtr1ToStrV sta (ZPPtr2),y bne .2 - jsr SHARED.AddYp1ToPtr1 - jmp SHARED.AddYp1ToPtr2 + jsr SHARED.AddYp12P1 + jmp SHARED.AddYp12P2 *-------------------------------------- PS.AddYAp12ArgSize pha diff --git a/SYS/KERNEL.S.PWD.txt b/SYS/KERNEL.S.PWD.txt index 4433aa14..7d397185 100644 --- a/SYS/KERNEL.S.PWD.txt +++ b/SYS/KERNEL.S.PWD.txt @@ -97,16 +97,18 @@ K.PutGR >PULLW TXTPTR jsr K.SYSCALL.JMPX bcc PWD.FlushFiles -K.PutGR.RTS rts + rts *-------------------------------------- PWD.FlushFiles >LDYA PWD.UsrDBSize ldx PWD.hUsrDB clc jsr PWD.Flush - bcs K.PutGR.RTS + bcc .1 + + rts - >LDYA PWD.GrpDBSize +.1 >LDYA PWD.GrpDBSize ldx PWD.hGrpDB sec diff --git a/SYS/KERNEL.S.PWDX.txt b/SYS/KERNEL.S.PWDX.txt index 448460f3..a04af53e 100644 --- a/SYS/KERNEL.S.PWDX.txt +++ b/SYS/KERNEL.S.PWDX.txt @@ -19,20 +19,20 @@ PWDX.GetPWUID lda PWD.hUsrDB beq PWDX.GetPW.99 EOF ldy #0 - jsr PWDX.NextString skip USERNAME + jsr PWDX.NextS skip USERNAME - jsr PWDX.NextString skip PASSWORD + jsr PWDX.NextS skip PASSWORD jsr PWDX.GetByte get UID cmp ZPPtr1+1 beq PWDX.GetPW.8 - jsr PWDX.NextLine + jsr PWDX.NextL bra .1 PWDX.GetPW.8 ldx FORPNT+1 beq .8 Dry run, no output - jmp PWDX.Record2PW + jmp PWDX.Rec2PW .8 clc a = UID rts @@ -42,7 +42,7 @@ PWDX.GetPW.9 lda #E.IPWDDB PWDX.GetPW.99 lda #E.IUSR sec -PWDX.GetPW.RTS rts + rts *-------------------------------------- PWDX.GetPWName lda PWD.hUsrDB beq PWDX.GetPW.9 @@ -51,7 +51,7 @@ PWDX.GetPWName lda PWD.hUsrDB >STYA ZPPtr3 ldy #0 - jsr SHARED.TXTPTR.GetY + jsr SHARED.TXTPTRgY beq PWDX.GetPW.99 .1 lda (ZPPtr3) @@ -59,13 +59,13 @@ PWDX.GetPWName lda PWD.hUsrDB ldy #$ff .2 iny - jsr SHARED.TXTPTR.GetY + jsr SHARED.TXTPTRgY beq .4 cmp (ZPPtr3),y beq .2 -.3 jsr PWDX.NextLine +.3 jsr PWDX.NextL bra .1 .4 lda (ZPPtr3),y @@ -75,10 +75,10 @@ PWDX.GetPWName lda PWD.hUsrDB ldx FORPNT+1 beq .8 - jmp PWDX.Record2PW + jmp PWDX.Rec2PW .8 iny - jsr PWDX.NextString skip PASSWORD + jsr PWDX.NextS skip PASSWORD jmp PWDX.GetByte get UID *-------------------------------------- * TXTPTR : pPW (Input) @@ -88,10 +88,10 @@ PWDX.PutPW lda PWD.hUsrDB bne PWDX.PutPW.1 ldy #S.PW.UID - jsr SHARED.TXTPTR.GetY + jsr SHARED.TXTPTRgY bne PWDX.GetPW.99 Must be ROOT user - jsr PWDX.GetRecordLen + jsr PWDX.GetRecLen tay lda #0 @@ -103,7 +103,7 @@ PWDX.PutPW lda PWD.hUsrDB inc .1 jsr K.getmem - bcs PWDX.GetPW.RTS + bcs .9 >STYA ZPPtr3 stx PWD.hUsrDB @@ -111,7 +111,7 @@ PWDX.PutPW lda PWD.hUsrDB lda #0 sta (ZPPtr3) - jsr PWDX.AppendRecord + jsr PWDX.AppRec lda PWD.hGrpDB beq .2 @@ -140,17 +140,17 @@ PWDX.PutPW.1 jsr K.GetmemPtr >STYA ZPPtr3 ldy #S.PW.PASSWD - jsr SHARED.TXTPTR.GetY + jsr SHARED.TXTPTRgY bne .12 - jsr PWDX.FindRecord + jsr PWDX.FindRec bcs .99 - jmp PWDX.DeleteRecord + jmp PWDX.DelRec *-------------------------------------- -.12 jsr PWDX.FindRecord +.12 jsr PWDX.FindRec bcs .11 - jsr PWDX.DeleteRecord + jsr PWDX.DelRec bcs .99 bra .13 *-------------------------------------- @@ -162,7 +162,7 @@ PWDX.PutPW.1 jsr K.GetmemPtr sta (TXTPTR),y sta SETWRITEAUX -.13 jsr PWDX.GetRecordLen +.13 jsr PWDX.GetRecLen clc adc PWD.UsrDBSize @@ -207,10 +207,10 @@ PWDX.PutPW.1 jsr K.GetmemPtr jsr K.GetMemPtr >STYA ZPPtr3 - jsr PWDX.AppendRecord + jsr PWDX.AppRec lda #0 - jsr PWDX.StoreChar + jsr PWDX.StoreC clc rts @@ -229,18 +229,18 @@ PWDX.GetGRGID lda PWD.hGrpDB beq PWDX.GetGR.99 EOF ldy #0 - jsr PWDX.NextString skip USERNAME + jsr PWDX.NextS skip USERNAME jsr PWDX.GetByte get UID cmp ZPPtr1+1 beq PWDX.GetGR.8 - jsr PWDX.NextLine + jsr PWDX.NextL bra .1 PWDX.GetGR.8 ldx FORPNT+1 beq .8 Dry run, no output - jmp PWDX.Record2GR + jmp PWDX.Rec2GR .8 clc a = UID rts @@ -259,7 +259,7 @@ PWDX.GetGRName lda PWD.hGrpDB >STYA ZPPtr3 ldy #0 - jsr SHARED.TXTPTR.GetY + jsr SHARED.TXTPTRgY beq PWDX.GetGR.99 .1 lda (ZPPtr3) @@ -267,13 +267,13 @@ PWDX.GetGRName lda PWD.hGrpDB ldy #$ff .2 iny - jsr SHARED.TXTPTR.GetY + jsr SHARED.TXTPTRgY beq .4 cmp (ZPPtr3),y beq .2 -.3 jsr PWDX.NextLine +.3 jsr PWDX.NextL bra .1 .4 lda (ZPPtr3),y @@ -283,7 +283,7 @@ PWDX.GetGRName lda PWD.hGrpDB ldx FORPNT+1 beq .8 - jmp PWDX.Record2GR + jmp PWDX.Rec2GR .8 iny jmp PWDX.GetByte get GID @@ -306,15 +306,15 @@ PWDX.OpenSession lda TXTPTR+1 bne .3 -.1 >LDYAI PWDX.ROOTSESSION.Size +.1 >LDYAI PWDX.ROOT.Size jsr K.GetMem bcs .9 >STYA ZPPtr1 - ldy #PWDX.ROOTSESSION.Size-1 + ldy #PWDX.ROOT.Size-1 -.2 lda PWDX.ROOTSESSION,y +.2 lda PWDX.ROOT,y sta (ZPPtr1),y dey bpl .2 @@ -323,7 +323,7 @@ PWDX.OpenSession clc rts *-------------------------------------- -.3 jsr PWDX.FindRecord +.3 jsr PWDX.FindRec bcs .9 tya Y = Name length +1 @@ -340,7 +340,7 @@ PWDX.OpenSession sec -.5 jsr SHARED.FORPNT.getY +.5 jsr SHARED.FORPNTgY eor (ZPPtr4),y Check MD5 bne .9 @@ -376,15 +376,15 @@ PWDX.GetUID lda PWD.hUsrDB beq .8 End of DB ldy #0 - jsr PWDX.NextString skip name - jsr PWDX.NextString skip password + jsr PWDX.NextS skip name + jsr PWDX.NextS skip password jsr PWDX.GetByte cmp .8+1 bcc .4 sta .8+1 -.4 jsr PWDX.NextLine +.4 jsr PWDX.NextL bra .1 .8 lda #$ff SELF MODIFIED @@ -398,7 +398,7 @@ PWDX.GetUID lda PWD.hUsrDB sec rts *-------------------------------------- -PWDX.DeleteRecord +PWDX.DelRec .1 iny lda (ZPPtr3),y cmp #C.CR @@ -432,7 +432,7 @@ PWDX.DeleteRecord .9 rts *-------------------------------------- -PWDX.FindRecord lda PWD.hUsrDB +PWDX.FindRec lda PWD.hUsrDB jsr K.GetmemPtr >STYA ZPPtr3 @@ -443,13 +443,13 @@ PWDX.FindRecord lda PWD.hUsrDB ldy #$ff .3 iny - jsr SHARED.TXTPTR.GetY + jsr SHARED.TXTPTRgY beq .4 cmp (ZPPtr3),y beq .3 -.5 jsr PWDX.NextLine +.5 jsr PWDX.NextL bra .2 .4 lda (ZPPtr3),y @@ -467,7 +467,7 @@ PWDX.FindRecord lda PWD.hUsrDB *-------------------------------------- * Record : USERNAME:PASSWORD:UID:GID:GECOS:HOME:SHELL\CR *-------------------------------------- -PWDX.Record2PW ldy #0 +PWDX.Rec2PW ldy #0 ldx #0 NAME @@ -476,12 +476,12 @@ PWDX.Record2PW ldy #0 cmp #':' beq .2 - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn inx bra .1 .2 lda #0 - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn inx cpx #S.PW.PASSWD bne .2 @@ -491,23 +491,23 @@ PWDX.Record2PW ldy #0 cmp #':' beq .4 - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn inx bra .3 .4 lda #0 - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn inx cpx #S.PW.UID bne .4 jsr PWDX.GetByte UID - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn iny jsr PWDX.GetByte GID - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn iny @@ -517,11 +517,11 @@ PWDX.Record2PW ldy #0 iny cmp #':' beq .6 - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn inx bra .5 .6 lda #0 - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn inx cpx #S.PW.DIR bne .6 @@ -530,11 +530,11 @@ PWDX.Record2PW ldy #0 iny cmp #':' beq .8 - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn inx bra .7 .8 lda #0 - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn inx cpx #S.PW.SHELL bne .8 @@ -543,16 +543,16 @@ PWDX.Record2PW ldy #0 iny cmp #C.CR beq .10 - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn inx bra .9 .10 lda #0 - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn clc rts *-------------------------------------- -PWDX.Record2GR ldy #0 +PWDX.Rec2GR ldy #0 ldx #0 NAME @@ -561,15 +561,15 @@ PWDX.Record2GR ldy #0 cmp #':' beq .2 - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn inx bra .1 .2 lda #0 - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn jsr PWDX.GetByte UID - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn clc rts @@ -579,15 +579,15 @@ PWDX.Record2GR ldy #0 PWDX.GetSessionLen ldy #0 - jsr PWDX.NextString USERNAME + jsr PWDX.NextS USERNAME tya clc adc #S.SESSION.NAME tax - jsr PWDX.NextString skip PASSWORD - jsr PWDX.NextString skip UID - jsr PWDX.NextString skip GID + jsr PWDX.NextS skip PASSWORD + jsr PWDX.NextS skip UID + jsr PWDX.NextS skip GID .1 inx iny @@ -604,8 +604,8 @@ PWDX.GetSessionLen PWDX.Record2Session ldy #0 - jsr PWDX.NextString skip USERNAME - jsr PWDX.NextString skip PASSWORD + jsr PWDX.NextS skip USERNAME + jsr PWDX.NextS skip PASSWORD jsr PWDX.GetByte get UID sta ZPPtr1 @@ -627,13 +627,13 @@ PWDX.Record2Session ora #S.SESSION.P.SYSADMIN -.2 jsr SHARED.PutCharPtr2 +.2 jsr SHARED.PutCP2 lda ZPPtr1 - jsr SHARED.PutCharPtr2 UID + jsr SHARED.PutCP2 UID lda ZPPtr1+1 - jsr SHARED.PutCharPtr2 GID + jsr SHARED.PutCP2 GID phy @@ -644,11 +644,11 @@ PWDX.Record2Session cmp #':' beq .4 - jsr SHARED.PutCharPtr2 + jsr SHARED.PutCP2 bra .3 .4 lda #0 - jsr SHARED.PutCharPtr2 + jsr SHARED.PutCP2 ply @@ -661,27 +661,27 @@ PWDX.Record2Session lda #0 -.6 jsr SHARED.PutCharPtr2 +.6 jsr SHARED.PutCP2 iny bra .5 .8 lda #0 - jmp SHARED.PutCharPtr2 + jmp SHARED.PutCP2 *-------------------------------------- -PWDX.NextString lda (ZPPtr3),y +PWDX.NextS lda (ZPPtr3),y beq .8 iny cmp #':' - bne PWDX.NextString + bne PWDX.NextS .8 rts *-------------------------------------- -PWDX.NextLine lda (ZPPtr3),y +PWDX.NextL lda (ZPPtr3),y beq .8 iny cmp #C.CR - bne PWDX.NextLine + bne PWDX.NextL tya clc @@ -725,7 +725,7 @@ PWDX.GetByte stz .8+1 clc rts *-------------------------------------- -PWDX.AppendRecord +PWDX.AppRec .1 lda (ZPPtr3) beq .8 @@ -737,64 +737,61 @@ PWDX.AppendRecord .8 sec .HS 90 BCC *-------------------------------------- -PWDX.GetRecordLen - clc +PWDX.GetRecLen clc ldx #0 ldy #S.PW.NAME - jsr PWDX.StoreString + jsr PWDX.StoreS lda #':' - jsr PWDX.StoreChar + jsr PWDX.StoreC ldy #S.PW.PASSWD - jsr PWDX.StoreString + jsr PWDX.StoreS lda #':' - jsr PWDX.StoreChar + jsr PWDX.StoreC ldy #S.PW.UID - jsr SHARED.TXTPTR.GetY - jsr PWDX.StoreByte + jsr SHARED.TXTPTRgY + jsr PWDX.StoreB lda #':' - jsr PWDX.StoreChar + jsr PWDX.StoreC ldy #S.PW.GID - jsr SHARED.TXTPTR.GetY - jsr PWDX.StoreByte + jsr SHARED.TXTPTRgY + jsr PWDX.StoreB lda #':' - jsr PWDX.StoreChar + jsr PWDX.StoreC ldy #S.PW.GECOS - jsr PWDX.StoreString + jsr PWDX.StoreS lda #':' - jsr PWDX.StoreChar + jsr PWDX.StoreC ldy #S.PW.DIR - jsr PWDX.StoreString + jsr PWDX.StoreS lda #':' - jsr PWDX.StoreChar + jsr PWDX.StoreC ldy #S.PW.SHELL - jsr PWDX.StoreString + jsr PWDX.StoreS lda #C.CR - jsr PWDX.StoreChar + jsr PWDX.StoreC txa -PWDX.GetRecordLen.RTS - rts +PWDX.RTS rts *-------------------------------------- -PWDX.StoreString - jsr SHARED.TXTPTR.GetY - beq PWDX.GetRecordLen.RTS - jsr PWDX.StoreChar +PWDX.StoreS jsr SHARED.TXTPTRgY + beq PWDX.RTS + jsr PWDX.StoreC iny - bra PWDX.StoreString + bra PWDX.StoreS *-------------------------------------- -PWDX.StoreByte php +PWDX.StoreB php phx jsr MATH.A2STR10NP plx @@ -802,13 +799,13 @@ PWDX.StoreByte php ldy #0 -.1 lda A2osX.NumStrBuf,y - beq PWDX.GetRecordLen.RTS +.1 lda FOUTBuf,y + beq PWDX.RTS iny - jsr PWDX.StoreChar + jsr PWDX.StoreC bra .1 *-------------------------------------- -PWDX.StoreChar inx +PWDX.StoreC inx bcc .9 Dry run, no store sta (ZPPtr3) inc ZPPtr3 @@ -816,15 +813,14 @@ PWDX.StoreChar inx inc ZPPtr3+1 .9 rts *-------------------------------------- -PWDX.ROOTSESSION - .DA #S.SESSION.P.ROOT +PWDX.ROOT .DA #S.SESSION.P.ROOT .DA #0 UID .DA #0 GID .AZ "root" NAME .AZ "Root User" GECOS .AZ "${ROOT}root/" DIR .AZ "${ROOT}bin/sh" SHELL -PWDX.ROOTSESSION.Size .EQ *-PWDX.ROOTSESSION +PWDX.ROOT.Size .EQ *-PWDX.ROOT *-------------------------------------- PWDX.GROUP .AS "root:0" .DA #C.CR diff --git a/SYS/KERNEL.S.SHARED.txt b/SYS/KERNEL.S.SHARED.txt index f17ba0ff..f93f5239 100644 --- a/SYS/KERNEL.S.SHARED.txt +++ b/SYS/KERNEL.S.SHARED.txt @@ -9,12 +9,12 @@ SHARED.IsIDValid beq SHARED.IsDigit.8 SHARED.IsDigitOrL cmp #'z'+1 - bcs SHARED.IsDigit.RTS + bcs SHARED.RTS cmp #'a' bcs SHARED.IsDigit.8 SHARED.IsDigitOrUC cmp #'Z'+1 - bcs SHARED.IsDigit.RTS + bcs SHARED.RTS cmp #'A' bcs SHARED.IsDigit.8 @@ -24,122 +24,97 @@ SHARED.IsDigit.9 rts SHARED.IsDigit.8 clc -SHARED.IsDigit.RTS rts *-------------------------------------- -SHARED.IsHexDigit - jsr ZP.IsDigit - bcc .8 - cmp #'A' - bcc SHARED.IsDigit.9 - cmp #'F'+1 - bcc .1 - cmp #'a' - bcc SHARED.IsDigit.9 - cmp #'f'+1 - bcs SHARED.IsDigit.RTS - - eor #$20 -.1 -* clc - sbc #'A'-11 cc so A->10 (11-CC) - clc -.8 and #$0F - rts -*-------------------------------------- -SHARED.TXTPTR.GetY - sta CLRREADAUX +SHARED.TXTPTRgY sta CLRREADAUX lda (TXTPTR),y sta SETREADAUX rts *-------------------------------------- -SHARED.TXTPTR.GetNext - sta CLRREADAUX +SHARED.TXTPTRgn sta CLRREADAUX lda (TXTPTR) sta SETREADAUX beq SHARED.RTS -SHARED.TXTPTR.Next - inc TXTPTR +SHARED.TXTPTRn inc TXTPTR bne SHARED.RTS inc TXTPTR+1 rts *-------------------------------------- -SHARED.FORPNT.getY - sta CLRREADAUX +SHARED.FORPNTgY sta CLRREADAUX lda (FORPNT),y sta SETREADAUX rts *-------------------------------------- -SHARED.FORPNT.PutY - sta CLRWRITEAUX +SHARED.FORPNTpY sta CLRWRITEAUX sta (FORPNT),y sta SETWRITEAUX rts *-------------------------------------- -SHARED.FORPNT.GetNext - sta CLRREADAUX +SHARED.FORPNTgn sta CLRREADAUX lda (FORPNT) sta SETREADAUX - bra SHARED.FORPNT.Next + bra SHARED.FORPNTn *-------------------------------------- -SHARED.FORPNT.PutNext - sta CLRWRITEAUX +SHARED.FORPNTpn sta CLRWRITEAUX sta (FORPNT) sta SETWRITEAUX -SHARED.FORPNT.Next - inc FORPNT +SHARED.FORPNTn inc FORPNT bne SHARED.RTS inc FORPNT+1 SHARED.RTS rts *-------------------------------------- -SHARED.GetCharPtr1 - lda (ZPPtr1) +SHARED.GetCP1 lda (ZPPtr1) beq SHARED.RTS inc ZPPtr1 bne .8 + inc ZPPtr1+1 never Z .8 rts *-------------------------------------- -SHARED.AddYp1ToPtr1 +SHARED.AddYp12P1 sec .HS 90 BCC -SHARED.AddYToPtr1 - clc +SHARED.AddY2P1 clc tya adc ZPPtr1 sta ZPPtr1 bcc .8 + inc ZPPtr1+1 + .8 rts *-------------------------------------- -SHARED.AddYp1ToPtr2 +SHARED.AddYp12P2 sec .HS 90 BCC -SHARED.AddYToPtr2 - clc +SHARED.AddY2P2 clc tya adc ZPPtr2 sta ZPPtr2 bcc .8 + clc keep CC as some JMP exit here inc ZPPtr2+1 + .8 rts *-------------------------------------- -SHARED.GetCharPtr2 - lda (ZPPtr2) - bne SHARED.NextCharPtr2 +SHARED.GetCP2 lda (ZPPtr2) + bne SHARED.NextCP2 rts -SHARED.PutCharPtr2 - sta (ZPPtr2) -SHARED.NextCharPtr2 - inc ZPPtr2 +*-------------------------------------- +SHARED.PutCP2 sta (ZPPtr2) +SHARED.NextCP2 inc ZPPtr2 bne .8 + inc ZPPtr2+1 .8 rts *-------------------------------------- -SHARED.ZPPtr3.GetY - sta CLRREADAUX +SHARED.PullP2P1 >PULLW ZPPtr2 + >PULLW ZPPtr1 + rts +*-------------------------------------- +SHARED.P3gY sta CLRREADAUX lda (ZPPtr3),y sta SETREADAUX rts diff --git a/SYS/KERNEL.S.SLISTX.txt b/SYS/KERNEL.S.SLISTX.txt index 73419ec8..33c7f8a9 100644 --- a/SYS/KERNEL.S.SLISTX.txt +++ b/SYS/KERNEL.S.SLISTX.txt @@ -3,22 +3,16 @@ NEW *-------------------------------------- ZPSListDataOfs .EQ ZPMEMMGR+8 ZPSListDataLen .EQ ZPMEMMGR+10 -ZPSListIBlkPtr .EQ ZPMEMMGR+12 -ZPSListDBlkPtr .EQ ZPMEMMGR+14 *-------------------------------------- SLIST.KeyLen .BS 1 SLIST.DataLen .BS 2 SLIST.nDataCnt .BS 2 SLIST.nBufCnt .BS 2 -SLIST.bStringMode .BS 1 -SLIST.bAppend0 .BS 1 -SLIST.KeyID .EQ * -SLIST.BytePtr .BS 1 -SLIST.BlockPtr .BS 1 -SLIST.KeyID.Save .BS 2 +SLIST.bStr .BS 1 +SLIST.b0 .BS 1 +SLIST.KeyID .BS 2 *-------------------------------------- -SLISTX.SListGetData - jsr SLIST.Select +SLISTX.GetData jsr SLIST.Select jsr SLIST.SkipKey jsr SLIST.GetDataLen @@ -40,7 +34,7 @@ SLISTX.SListGetData ldx ZPSListDataOfs+1 jsr SLIST.SkipDataAX - stz SLIST.bAppend0 + stz SLIST.b0 lda FORPNT ora FORPNT+1 @@ -53,7 +47,7 @@ SLISTX.SListGetData inc +1 for ending 0 sec - ror SLIST.bAppend0 + ror SLIST.b0 .11 ldx #SYS.GetMem jsr K.SYSCALL2.MAIN !!! Get a buffer In MAIN Mem !!! @@ -74,7 +68,7 @@ SLISTX.SListGetData sta SLIST.nBufCnt+1 clc -.1 ror SLIST.bStringMode +.1 ror SLIST.bStr stz ZPSListDataLen stz ZPSListDataLen+1 @@ -84,7 +78,7 @@ SLISTX.SListGetData inc SLIST.nDataCnt+1 beq .80 -.3 bit SLIST.bStringMode +.3 bit SLIST.bStr bmi .4 String mode : until CR inc SLIST.nBufCnt @@ -92,14 +86,14 @@ SLISTX.SListGetData inc SLIST.nBufCnt+1 beq .80 not string mode : until end of buffer -.4 jsr SLIST.GetNextByte - bit SLIST.bStringMode +.4 jsr BLISTX.GetNByte + bit SLIST.bStr bpl .5 cmp #C.CR beq .81 -.5 jsr SHARED.FORPNT.PutNext +.5 jsr SHARED.FORPNTpn inc ZPSListDataLen bne .2 inc ZPSListDataLen+1 @@ -109,39 +103,38 @@ SLISTX.SListGetData sec .9 rts -.80 lda SLIST.bStringMode - ora SLIST.bAppend0 +.80 lda SLIST.bStr + ora SLIST.b0 bpl .82 .81 lda #0 - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn .82 >LDYA ZPSListDataLen .88 ldx #$ff SELF MODIFIED clc rts *-------------------------------------- -SLISTX.SListAddData - jsr SLIST.Select +SLISTX.AddData jsr SLIST.Select jsr SLIST.SkipKey - ldy SLIST.BytePtr - lda (ZPSListDBlkPtr),y + ldy iByte + lda (DBlkPtr),y pha clc adc ZPSListDataLen - sta (ZPSListDBlkPtr),y + sta (DBlkPtr),y php - jsr SLIST.ToNextByte skip LEN lo + jsr BLISTX.2NByte skip LEN lo plp - ldy SLIST.BytePtr - lda (ZPSListDBlkPtr),y + ldy iByte + lda (DBlkPtr),y pha adc ZPSListDataLen+1 - sta (ZPSListDBlkPtr),y - jsr SLIST.ToNextByte skip LEN hi + sta (DBlkPtr),y + jsr BLISTX.2NByte skip LEN hi plx pla @@ -161,22 +154,21 @@ SLISTX.SListAddData inc ZPSListDataLen+1 beq .8 -.2 jsr SHARED.FORPNT.GetNext +.2 jsr SHARED.FORPNTgn bcc .3 - jsr SLIST.SetBlockByte override ending 0, already allocated + jsr BLISTX.SetBlkByte override ending 0, already allocated clc bra .1 -.3 jsr SLIST.AddDataByte +.3 jsr BLISTX.AddByte bcc .1 rts .8 lda #0 - jmp SLIST.AddDataByte Add an extra 0 to stop Search here + jmp BLISTX.AddByte Add an extra 0 to stop Search here *-------------------------------------- -SLISTX.SListSetData - jsr SLIST.Select +SLISTX.SetData jsr SLIST.Select jsr SLIST.SkipKey jsr SLIST.GetDataLen @@ -200,8 +192,8 @@ SLISTX.SListSetData inc SLIST.nDataCnt+1 beq .8 -.2 jsr SHARED.FORPNT.GetNext - jsr SLIST.SetBlockByte +.2 jsr SHARED.FORPNTgn + jsr BLISTX.SetBlkByte bra .1 .8 clc @@ -210,20 +202,19 @@ SLISTX.SListSetData sec rts *-------------------------------------- -SLISTX.SListGetByID - jsr SLIST.Select +SLISTX.GetByID jsr SLIST.Select - jsr SLIST.GetNextByte + jsr BLISTX.GetNByte tax beq .9 ldy #0 .1 phy - jsr SLIST.GetNextByte + jsr BLISTX.GetNByte ply - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn iny dex @@ -231,10 +222,10 @@ SLISTX.SListGetByID txa lda #0 - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn jsr SLIST.SkipData - >LDYA SLIST.KeyID + >LDYA KeyID clc rts @@ -242,20 +233,19 @@ SLISTX.SListGetByID sec rts *-------------------------------------- -SLISTX.SListNewKey - jsr SLIST.Search +SLISTX.NewKey jsr SLIST.Search bcc .99 - >LDYA SLIST.KeyID - >STYA SLIST.KeyID.Save End of list + >LDYA KeyID + >STYA SLIST.KeyID End of list lda SLIST.KeyLen - jsr SLIST.SetBlockByte override ending 0, already allocated + jsr BLISTX.SetBlkByte override ending 0, already allocated ldy #0 -.1 jsr SHARED.TXTPTR.GetY - jsr SLIST.AddDataByte +.1 jsr SHARED.TXTPTRgY + jsr BLISTX.AddByte bcs .9 iny @@ -263,18 +253,18 @@ SLISTX.SListNewKey bne .1 lda #0 Data Len lo = 0 - jsr SLIST.AddDataByte + jsr BLISTX.AddByte bcs .9 lda #0 Data Len hi = 0 - jsr SLIST.AddDataByte + jsr BLISTX.AddByte bcs .9 lda #0 Ending Len = 0 - jsr SLIST.AddDataByte + jsr BLISTX.AddByte bcs .9 - >LDYA SLIST.KeyID.Save + >LDYA SLIST.KeyID ldx SLIST.KeyLen * clc rts @@ -283,67 +273,25 @@ SLISTX.SListNewKey sec .9 rts *-------------------------------------- -SLISTX.SListLookup - jsr SLIST.Search +SLISTX.Lookup jsr SLIST.Search bcs .9 ldx SLIST.KeyLen .9 rts *-------------------------------------- -SLISTX.SListFree - pha - - jsr K.GetMemPtr - >STYA .1+1 - - ldx #0 - -.1 lda $ffff,x SELF MODIFIED - beq .8 - - jsr K.FreeMem - inx - bra .1 - -.8 pla - jmp K.FreeMem -*-------------------------------------- -SLISTX.SListNew >LDYAI 128 32k Max before out of memory!!! - ldx #S.MEM.F.INIT0+8 index - jsr MEM.GetMem.YAX - bcs .9 - - >STYA ZPSListIBlkPtr - stx .8+1 - - >LDYAI 256 - ldx #4 data - jsr MEM.GetMem.YAX - bcs .9 - - >STYA ZPSListDBlkPtr - - lda #0 - sta (ZPSListDBlkPtr) - txa - sta (ZPSListIBlkPtr) - -.8 lda #$ff SELF MODIFIED -.9 rts -*-------------------------------------- * PRIVATE *-------------------------------------- SLIST.Search jsr K.GetMemPtr - >STYA ZPSListIBlkPtr + >STYA IBlkPtr - lda (ZPSListIBlkPtr) + lda (IBlkPtr) jsr K.GetMemPtr - >STYA ZPSListDBlkPtr + >STYA DBlkPtr ldy #$ff .1 iny - jsr SHARED.TXTPTR.GetY + jsr SHARED.TXTPTRgY beq .11 jsr SHARED.IsIDValid @@ -351,29 +299,29 @@ SLIST.Search jsr K.GetMemPtr .11 sty SLIST.KeyLen - stz SLIST.BytePtr - stz SLIST.BlockPtr + stz iByte + stz iBlk -.2 >LDYA SLIST.KeyID - >STYA SLIST.KeyID.Save +.2 >LDYA KeyID + >STYA SLIST.KeyID - ldy SLIST.BytePtr - lda (ZPSListDBlkPtr),y + ldy iByte + lda (DBlkPtr),y beq .9 cmp SLIST.KeyLen bne .5 - jsr SLIST.GetNextByte Skip Len + jsr BLISTX.GetNByte Skip Len ldy #0 .3 phy - jsr SLIST.GetNextByte + jsr BLISTX.GetNByte sta .4+1 ply - jsr SHARED.TXTPTR.GetY + jsr SHARED.TXTPTRgY .4 cmp #$ff SELF MODIFIED bne .5 @@ -382,11 +330,11 @@ SLIST.Search jsr K.GetMemPtr cpy SLIST.KeyLen bne .3 - >LDYA SLIST.KeyID.Save + >LDYA SLIST.KeyID clc rts -.5 >LDYA SLIST.KeyID.Save +.5 >LDYA SLIST.KeyID jsr SLIST.Select.I move back... jsr SLIST.Next @@ -397,17 +345,17 @@ SLIST.Search jsr K.GetMemPtr rts *-------------------------------------- SLIST.Select jsr K.GetMemPtr - >STYA ZPSListIBlkPtr + >STYA IBlkPtr >LDYA TXTPTR -SLIST.Select.I >STYA SLIST.KeyID +SLIST.Select.I >STYA KeyID - ldy SLIST.BlockPtr + ldy iBlk - lda (ZPSListIBlkPtr),y + lda (IBlkPtr),y jsr K.GetMemPtr - >STYA ZPSListDBlkPtr + >STYA DBlkPtr rts *-------------------------------------- @@ -419,90 +367,36 @@ SLIST.SkipData jsr SLIST.GetDataLen ldx SLIST.DataLen+1 SLIST.SkipDataAX clc - adc SLIST.BytePtr - sta SLIST.BytePtr + adc iByte + sta iByte txa - adc SLIST.BlockPtr - sta SLIST.BlockPtr + adc iBlk + sta iBlk tay - lda (ZPSListIBlkPtr),y + lda (IBlkPtr),y jsr K.GetMemPtr - >STYA ZPSListDBlkPtr + >STYA DBlkPtr rts *-------------------------------------- -SLIST.SkipKey ldy SLIST.BytePtr - lda (ZPSListDBlkPtr),y Get KeyLen +SLIST.SkipKey ldy iByte + lda (DBlkPtr),y Get KeyLen sec - adc SLIST.BytePtr - sta SLIST.BytePtr - bcs SLIST.ToNextBlock + adc iByte + sta iByte + bcc .8 + + jmp BLISTX.2NBlk + .8 rts *-------------------------------------- SLIST.GetDataLen - jsr SLIST.GetNextByte Get DataLenLo + jsr BLISTX.GetNByte Get DataLenLo sta SLIST.DataLen - jsr SLIST.GetNextByte Get DataLenHI + jsr BLISTX.GetNByte Get DataLenHI sta SLIST.DataLen+1 rts *-------------------------------------- -SLIST.GetNextByte - ldy SLIST.BytePtr - lda (ZPSListDBlkPtr),y -SLIST.ToNextByte - inc SLIST.BytePtr - bne .8 - - pha - jsr SLIST.ToNextBlock - pla -.8 rts -*-------------------------------------- -SLIST.AddDataByte - phy - ldy SLIST.BytePtr - sta (ZPSListDBlkPtr),y - inc SLIST.BytePtr - bne .8 - - phx - >LDYAI 256 - ldx #4 - jsr MEM.GetMem.YAX - bcs .9 - - >STYA ZPSListDBlkPtr - txa - inc SLIST.BlockPtr - ldy SLIST.BlockPtr - sta (ZPSListIBlkPtr),y - -* stz SLIST.BytePtr - plx - -.8 ply - clc - rts - -.9 plx - ply - rts -*-------------------------------------- -SLIST.SetBlockByte - ldy SLIST.BytePtr - sta (ZPSListDBlkPtr),y - inc SLIST.BytePtr - bne SLIST.ToNextBlock.RTS -*-------------------------------------- -SLIST.ToNextBlock - inc SLIST.BlockPtr - ldy SLIST.BlockPtr - lda (ZPSListIBlkPtr),y - jsr K.GetMemPtr - >STYA ZPSListDBlkPtr -SLIST.ToNextBlock.RTS - rts -*-------------------------------------- MAN SAVE usr/src/sys/kernel.s.slistx LOAD usr/src/sys/kernel.s diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index 2b4d8230..ae8230c2 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -56,7 +56,7 @@ K.SetAttr jsr PFT.CheckPath1 K.ChMod jsr PFT.CheckPath2 bcs K.ChMod.RET4 - jsr STAT.PullPathAndMode + jsr STAT.PM stz K.MLI.PARAMS+3+S.FIEX.ACL read mode @@ -100,14 +100,14 @@ K.FStat jsr PFT.CheckNode2 jsr PFT.YAToMLIPATH jsr FS.Stat.203 - bcs K.Stat.Store.RTS + bcs STAT.RTS ldy #S.FD.REG.REF lda (pFD),y sta K.MLI.PARAMS+1 >MLICALL MLIGETEOF - bcs K.Stat.Store.RTS + bcs STAT.RTS ldx #2 @@ -124,8 +124,7 @@ K.Stat.Store.2 sta $ffff,y SELF MODIFIED bpl K.Stat.Store.1 * clc -K.Stat.Store.RTS - rts +STAT.RTS rts */-------------------------------------- * # Stat * Return information about a file @@ -166,7 +165,7 @@ K.Stat jsr PFT.CheckPath2 K.MKDir jsr PFT.CheckPath2 bcs K.ChMod.RET4 - jsr STAT.PullPathAndMode + jsr STAT.PM lda #S.FI.T.DIR sta K.MLI.PARAMS+4 @@ -187,11 +186,11 @@ K.MKDir jsr PFT.CheckPath2 * CC = OK, CS = ERROR * A = hFILE *\-------------------------------------- -K.MKFIFO jsr STAT.PullPathAndMode +K.MKFIFO jsr STAT.PM >LDYAI 512 jsr K.pipe - bcs K.Stat.Store.RTS + bcs STAT.RTS ldy #0 .1 lda STAT.FIFO,y @@ -227,7 +226,7 @@ K.MKFIFO jsr STAT.PullPathAndMode *\-------------------------------------- K.MkNod >PULLB IO.hFD - jsr STAT.PullPathAndMode + jsr STAT.PM K.MkNod.I ldx #2 @@ -307,8 +306,7 @@ K.Pipe sta .1+1 SIZE HI .99 rts *-------------------------------------- -STAT.PullPathAndMode - >PULLW K.S.STAT+S.STAT.MODE +STAT.PM >PULLW K.S.STAT+S.STAT.MODE >PULLW ZPPtr1 pathname rts *-------------------------------------- diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 228e71de..7134a1f4 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -50,7 +50,7 @@ K.FPutC jsr PFT.CheckNodeA >PUSHA >PUSHWI K.IOBuf buf - jsr UNISTD.Write + jsr IO.Write bcc .8 pop char... cmp #E.NODATA @@ -158,7 +158,7 @@ K.FPutS jsr PFT.CheckNode2 set IO.hFD >PUSHA push len LO >PUSHW ZPPtr2 - jsr UNISTD.Write + jsr IO.Write bcc K.PutS.RET3 cmp #E.NODATA @@ -240,7 +240,7 @@ K.FGetS jsr PFT.CheckNode4 cmp #C.CR beq .8 - jsr SHARED.PutCharPtr2 + jsr SHARED.PutCP2 inc ZPPtr1 bne .4 @@ -299,28 +299,28 @@ K.GetChar ldy #S.PS.hStdIn * A = char *\-------------------------------------- K.GetC jsr PFT.CheckNodeA - bcs K.GetC.RTS + bcs .9 jsr STDIO.Get.1 bcc .8 cmp #E.NODATA sec - bne K.GetC.RTS I/O error + bne .9 I/O error inc 0 = BLOCKING rts .8 lda K.IOBuf -K.GetC.RTS rts +.9 rts *-------------------------------------- STDIO.Get.1 lda #0 >PUSHA inc read 1 byte >PUSHA >PUSHWI K.IOBuf - jmp UNISTD.READ + jmp IO.Read */-------------------------------------- * # ungetc * push byte back into input stream @@ -376,7 +376,7 @@ K.FOpen jsr PFT.CheckPath4 inc pStack discard filename inc pStack - jmp UNISTD.Open + jmp IO.Open .9 >POP 6 .99 rts @@ -394,7 +394,7 @@ K.FOpen jsr PFT.CheckPath4 K.FClose jsr PFT.CheckNodeA bcs K.FRead.RTS - jmp UNISTD.Close + jmp IO.Close */-------------------------------------- * # FRead (BLOCKING) * Read bytes from file @@ -412,7 +412,7 @@ K.FClose jsr PFT.CheckNodeA K.FRead jsr PFT.CheckNodeA bcs K.FWrite.RET4 - jsr UNISTD.Read + jsr IO.Read bcs K.FWrite.9 K.FRead.RTS rts @@ -433,7 +433,7 @@ K.FRead.RTS rts K.FWrite jsr PFT.CheckNodeA bcs K.FWrite.RET4 - jsr UNISTD.Write + jsr IO.Write bcc K.FWrite.RTS K.FWrite.9 cmp #E.NODATA @@ -720,8 +720,8 @@ K.Rename jsr PFT.CheckPath2 .OR ZPTMP+5 5 Bytes PrintF.Cnt .BS 2 PrintF.hFILE .BS 1 -STDIO.StackBytePtr .BS 1 -STDIO.ExitPopCnt .BS 1 +STDIO.iStkB .BS 1 +STDIO.PopCnt .BS 1 .ED *-------------------------------------- K.PrintF.PadL .EQ FAC+5 @@ -745,9 +745,9 @@ K.PrintF.1 sec format string->ptr2 stx pIOBuf sta pIOBuf+1 Output buffer->pIOBuf - sty STDIO.ExitPopCnt Total bytes to POP + sty STDIO.PopCnt Total bytes to POP -.1 jsr SHARED.GetCharPtr2 +.1 jsr SHARED.GetCP2 bne .22 jmp .8 end of format.. @@ -764,7 +764,7 @@ K.PrintF.1 sec format string->ptr2 cmp #'0' ...a 0...mmm... padding char? bne .4 sta K.PrintF.PadC - jsr SHARED.NextCharPtr2 skip 0 ... + jsr SHARED.NextCP2 skip 0 ... lda (ZPPtr2) beq .7 @@ -780,7 +780,7 @@ K.PrintF.1 sec format string->ptr2 lda #C.SPACE sta K.PrintF.PadC -.5 jsr SHARED.AddYToPtr2 skip all processed chars +.5 jsr SHARED.AddY2P2 skip all processed chars lda (ZPPtr2) beq .7 @@ -792,7 +792,7 @@ K.PrintF.1 sec format string->ptr2 bpl .61 bra .20 unknown ... -.62 jsr SHARED.NextCharPtr2 +.62 jsr SHARED.NextCP2 txa yes, jmp to it! asl tax @@ -805,7 +805,7 @@ K.PrintF.1 sec format string->ptr2 .10 cmp #'\' bne .20 - jsr SHARED.GetCharPtr2 + jsr SHARED.GetCP2 beq .99 ldx #PrintFTBL2.Cnt-1 .12 cmp PrintFTBL2,x @@ -819,7 +819,7 @@ K.PrintF.1 sec format string->ptr2 jsr MATH.Hex2ACC32 bcs .99 - jsr SHARED.AddYToPtr2 + jsr SHARED.AddY2P2 .14 lda ACC32 bra .20 .19 lda PrintFTBL2.OUT,x @@ -849,6 +849,7 @@ K.PrintF.1 sec format string->ptr2 .80 ldy PrintF.Cnt A=0, Writing to buffer, append \0 sta (pIOBuf),y clc + .81 >LDYA PrintF.Cnt * clc .9 jmp STDIO.Exit @@ -869,7 +870,7 @@ PrintF.ESC jmp (.1,x) .DA PrintF.I,PrintF.II,PrintF.L .DA PrintF.S,PrintF.SS *-------------------------------------- -PrintF.B jsr STDIO.GetStackByte +PrintF.B jsr STDIO.GetStkB bcs PrintF.B.RTS ldy #8 @@ -913,7 +914,7 @@ PrintF.NUM sty .2+1 ror ACC32.Sign save signed/unsigned flag jsr M32.ACC32Z -.1 jsr STDIO.GetStackByte +.1 jsr STDIO.GetStkB bcs PrintF.B.RTS sta ACC32-1,y PULL 4,2 or 1 @@ -962,12 +963,13 @@ PrintF.F clc ldy pStack+1 A,Y = float ldx #FPU.SETFAC jsr GP.ROMCALL - ldy #A2osX.NumStrBuf+1 FOUT.1 will do a DEY + + ldy #FOUTBuf+1 FOUT.1 will do a DEY ldx #FPU.FOUT jsr GP.ROMCALL PrintF.StrNum ldy #0 -.2 lda A2osX.NumStrBuf,y +.2 lda FOUTBuf,y beq .8 iny jsr PrintF.PutC @@ -988,11 +990,11 @@ PrintF.SS ldy #$00 PSTR sty .1+1 - jsr STDIO.GetStackByte + jsr STDIO.GetStkB bcs .9 sta ZPPtr1+1 - jsr STDIO.GetStackByte + jsr STDIO.GetStkB bcs .9 sta ZPPtr1 @@ -1040,26 +1042,26 @@ PrintF.SS ldy #$00 PSTR * clc .9 rts *-------------------------------------- -PrintF.HH jsr STDIO.GetStackByte - bcs PrintF.PutC.RTS +PrintF.HH jsr STDIO.GetStkB + bcs STDIO.RTS pha LO byte - jsr STDIO.GetStackByte + jsr STDIO.GetStkB plx - bcs PrintF.PutC.RTS + bcs STDIO.RTS pha txa jsr PrintF.H.1 plx - bcs PrintF.PutC.RTS + bcs STDIO.RTS txa bra PrintF.H.1 *-------------------------------------- -PrintF.H jsr STDIO.GetStackByte - bcs PrintF.PutC.RTS +PrintF.H jsr STDIO.GetStkB + bcs STDIO.RTS PrintF.H.1 jsr STDIO.A2HexAX jsr PrintF.PutC - bcs PrintF.PutC.RTS + bcs STDIO.RTS txa *-------------------------------------- PrintF.PutC phy @@ -1078,7 +1080,7 @@ PrintF.PutC phy .9 lda #E.BUF sec -PrintF.PutC.RTS rts +STDIO.RTS rts */-------------------------------------- * # ScanF (BLOCKING) * # FScanF (BLOCKING) @@ -1142,7 +1144,7 @@ K.SScanF.1 clc format string->ptr1 stx ZPPtr2 sta ZPPtr2+1 Output buffer->ZPPtr2 - sty STDIO.ExitPopCnt Total bytes to POP + sty STDIO.PopCnt Total bytes to POP ldx PrintF.hFILE beq .1 @@ -1155,10 +1157,10 @@ K.SScanF.1 clc format string->ptr1 bcc .1 tax - bne PrintF.PutC.RTS + bne STDIO.RTS >RET 4 -.1 jsr SHARED.GetCharPtr1 End Of format? +.1 jsr SHARED.GetCP1 End Of format? beq .8 cmp #'%' Escape ? @@ -1169,7 +1171,7 @@ K.SScanF.1 clc format string->ptr1 sta .11+1 - jsr SHARED.GetCharPtr2 + jsr SHARED.GetCP2 beq .9 .11 cmp #$ff Same char in string? @@ -1177,18 +1179,18 @@ K.SScanF.1 clc format string->ptr1 bra .9 -.12 jsr SHARED.GetCharPtr2 +.12 jsr SHARED.GetCP2 beq .9 cmp #C.SPACE bne .9 -.13 jsr SHARED.GetCharPtr2 +.13 jsr SHARED.GetCP2 cmp #C.SPACE another space ? beq .13 bra .1 -.2 jsr SHARED.GetCharPtr1 Get specifier after % +.2 jsr SHARED.GetCP1 Get specifier after % beq .9 unexpected End of format after "%" ? ldx #K.SScanFJMP-K.SScanFTBL-2 @@ -1203,10 +1205,10 @@ K.SScanF.1 clc format string->ptr1 sec jmp STDIO.Exit -.4 jsr STDIO.GetStackByte +.4 jsr STDIO.GetStkB bcs .9 sta ZPPtr3+1 - jsr STDIO.GetStackByte + jsr STDIO.GetStkB bcs .9 sta ZPPtr3 @@ -1250,7 +1252,7 @@ K.SScanF.H lda K.SScanFTBL+1,x Get VAR size jsr MATH.Hex2ACC32 -K.SScanF.GetVAL jsr SHARED.AddYToPtr2 Y=char count parsed +K.SScanF.GetVAL jsr SHARED.AddY2P2 Y=char count parsed .1 ply get back VAL size @@ -1277,7 +1279,7 @@ K.SScanF.S ldy #$ff .2 lda #0 add \0 to param ptr sta (ZPPtr3),y -K.SScanF.Fwd jmp SHARED.AddYToPtr2 Y=char count parsed +K.SScanF.Fwd jmp SHARED.AddY2P2 Y=char count parsed *-------------------------------------- * IN: * CC : format in ZPPtr1 @@ -1297,7 +1299,7 @@ STDIO.GetParams stz PrintF.Cnt lda (pStack) Bytecount tay - sty STDIO.StackBytePtr + sty STDIO.iStkB iny lda (pStack),y format LO @@ -1340,22 +1342,15 @@ STDIO.GetParams stz PrintF.Cnt .1 ldx #K.IOBuf lda /K.IOBuf -STDIO.GetParams.RTS rts *-------------------------------------- -STDIO.GetStackPtr - jsr STDIO.GetStackByte - bcs STDIO.GetParams.RTS - tax -*-------------------------------------- -STDIO.GetStackByte - phy +STDIO.GetStkB phy - ldy STDIO.StackBytePtr + ldy STDIO.iStkB beq .9 lda (pStack),y - dec STDIO.StackBytePtr + dec STDIO.iStkB ply clc @@ -1372,7 +1367,7 @@ STDIO.Exit php lda pStack sec - adc STDIO.ExitPopCnt + adc STDIO.PopCnt sta pStack pla diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index feb4614d..265d9989 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -43,7 +43,7 @@ K.AToF >STYA TXTPTR Ptr to source string jsr CHARGOT ldx #FPU.FIN - jmp GP.RomCallGetFacOnStack + jmp GP.GetFac */-------------------------------------- * # StrToL/StrToUL * Convert String to 32 bits (unsigned) int @@ -340,7 +340,7 @@ K.Expand ldy #2 .10 lda (TXTPTR) End of CSTR? beq .80 - jsr SHARED.TXTPTR.Next + jsr SHARED.TXTPTRn .11 cmp #''' bne .21 @@ -374,13 +374,13 @@ K.Expand ldy #2 dec ENV.VarEndChar "}" expected - jsr SHARED.TXTPTR.Next skip "{" + jsr SHARED.TXTPTRn skip "{" bra .40 .31 jsr ENV.SysVar 0-9 *#?@$! bcs .40 -.35 jsr SHARED.TXTPTR.Next skip $x +.35 jsr SHARED.TXTPTRn skip $x bra .10 .40 jsr ENV.ExpandStrVar @@ -408,7 +408,7 @@ K.Expand ldy #2 jsr SHARED.IsIDValid bcs .72 - jsr SHARED.TXTPTR.Next + jsr SHARED.TXTPTRn bra .70 .72 lda ENV.VarEndChar @@ -465,7 +465,7 @@ ENV.SysVarsNum jsr MATH.A2STR10NP ldy #0 -.1 lda A2osX.NumStrBuf,y +.1 lda FOUTBuf,y beq ENV.SysVarsNum.8 iny diff --git a/SYS/KERNEL.S.STRING.txt b/SYS/KERNEL.S.STRING.txt index ef88d4c4..5b2c040c 100644 --- a/SYS/KERNEL.S.STRING.txt +++ b/SYS/KERNEL.S.STRING.txt @@ -35,8 +35,8 @@ K.StrLen >STYA .1+1 * `char * strcat ( char * destination, const char * source );` * ## ASM * **In:** +* `>PUSHWI destination` * `>PUSHWI source` -* `>LDYAI destination` * `>SYSCALL strcat` * ## RETURN VALUE * Y,A = destination @@ -50,8 +50,8 @@ K.StrCat sec * `char * strcpy ( char * destination, const char * source );` * ## ASM * **In:** +* `>PUSHWI destination` * `>PUSHWI source` -* `>LDYAI destination` * `>SYSCALL strcpy` * ## RETURN VALUE * Y,A = destination @@ -59,11 +59,11 @@ K.StrCat sec K.StrCpy clc phy pha - jsr SHARED.SPtr1PPtr2 + jsr SHARED.PullP2P1 bcc .2 -.1 jsr SHARED.GetCharPtr1 +.1 jsr SHARED.GetCP1 bne .1 .2 ldy #0 @@ -185,8 +185,8 @@ K.StrLwr ldx #2 * `int strcmp(const char *s1, const char *s2);` * ## ASM * **In:** +* `>PUSHWI s1` * `>PUSHWI s2` -* `>LDYAI s1` * `>SYSCALL strcmp` * ## RETURN VALUE * CC : match @@ -203,8 +203,8 @@ K.StrCmp sec * `int strcasecmp(const char *s1, const char *s2);` * ## ASM * **In:** +* `>PUSHWI s1` * `>PUSHWI s2` -* `>LDYAI s1` * `>SYSCALL strcasecmp` * ## RETURN VALUE * CC : match @@ -213,19 +213,19 @@ K.StrCmp sec * CS, Y,A > 0 or < 0 *\-------------------------------------- K.StrCaseCmp clc - jsr SHARED.SPtr1PPtr2 + jsr SHARED.PullP2P1 ldy #0 .1 lda (ZPPtr1),y beq .7 - jsr K.StrCaseCmp.toUpper + jsr .80 sta .2+1 lda (ZPPtr2),y beq .9 - jsr K.StrCaseCmp.toUpper + jsr .80 .2 eor #$ff SELF MODIFIED bne .9 @@ -252,22 +252,19 @@ K.StrCaseCmp clc sec rts *-------------------------------------- -K.StrCaseCmp.toUpper - bcs .9 +.80 bcs .99 + cmp #'a' - bcc .9 + bcc .99 + cmp #'z'+1 - bcs .1 + bcs .81 + eor #$20 -.1 clc +.81 clc -.9 rts -*-------------------------------------- -SHARED.SPtr1PPtr2 - >STYA ZPPtr1 - >PULLW ZPPtr2 - rts +.99 rts *-------------------------------------- MAN SAVE usr/src/sys/kernel.s.string diff --git a/SYS/KERNEL.S.STRVX.txt b/SYS/KERNEL.S.STRVX.txt index 634f12a3..c7882aa3 100644 --- a/SYS/KERNEL.S.STRVX.txt +++ b/SYS/KERNEL.S.STRVX.txt @@ -1,6 +1,11 @@ NEW AUTO 3,1 *-------------------------------------- +STRVX.StrVFree jsr K.FreeMem + + clc + rts +*-------------------------------------- STRVX.StrVNew jsr K.GetMem bcs .9 @@ -21,7 +26,7 @@ STRVX.StrVSet jsr STRVX.GetID ldy #$ff .1 iny - jsr SHARED.FORPNT.GetY + jsr SHARED.FORPNTgY bne .1 tya @@ -44,7 +49,7 @@ STRVX.StrVSet jsr STRVX.GetID .2 ldy #$ff .3 iny - jsr SHARED.FORPNT.GetY + jsr SHARED.FORPNTgY sta (ZPPtr1),y bne .3 @@ -74,14 +79,14 @@ STRVX.StrVSet jsr STRVX.GetID sta (ZPPtr2),y bne .6 - jsr SHARED.AddYp1ToPtr1 - jsr SHARED.AddYp1ToPtr2 + jsr SHARED.AddYp12P1 + jsr SHARED.AddYp12P2 bra .40 *-------------------------------------- .7 ldy #$ff .8 iny - jsr SHARED.FORPNT.GetY + jsr SHARED.FORPNTgY bne .8 tya @@ -109,7 +114,7 @@ STRVX.StrVSet jsr STRVX.GetID .10 ldy #$ff .11 iny - jsr SHARED.FORPNT.GetY + jsr SHARED.FORPNTgY sta (ZPPtr1),y bne .11 @@ -138,7 +143,7 @@ STRVX.StrVGet jsr STRVX.GetID .5 iny lda (ZPPtr1),y - jsr SHARED.FORPNT.PutY + jsr SHARED.FORPNTpY bne .5 >LDYA FORPNT @@ -149,11 +154,6 @@ STRVX.StrVGet jsr STRVX.GetID clc .9 rts *-------------------------------------- -STRVX.StrVFree jsr K.FreeMem - - clc - rts -*-------------------------------------- STRVX.GetID jsr K.GetMemPtr >STYA ZPPtr1 strV diff --git a/SYS/KERNEL.S.TERM.txt b/SYS/KERNEL.S.TERM.txt index 4fae8c1d..ebe6a70c 100644 --- a/SYS/KERNEL.S.TERM.txt +++ b/SYS/KERNEL.S.TERM.txt @@ -18,7 +18,7 @@ DRV.TERM cld *-------------------------------------- TERM.STATUS jsr TERM.GetIOCTLBufCntDCB - ldy #S.IOCTL.STATCODE + ldy #S.IOCTL.S lda (ZPIOCTL),y tay bra TERM.TOAUX diff --git a/SYS/KERNEL.S.TERMX.txt b/SYS/KERNEL.S.TERMX.txt index 412dcf57..db8e9c33 100644 --- a/SYS/KERNEL.S.TERMX.txt +++ b/SYS/KERNEL.S.TERMX.txt @@ -41,7 +41,7 @@ TERMX .DA TERMX.STATUS TERMX.STATUS tya beq .1 - cmp #S.IOCTL.STATCODE.GETDIB + cmp #S.IOCTL.S.GETDIB bne .3 ldy #S.DIB-1 @@ -55,13 +55,13 @@ TERMX.STATUS tya dey bne .2 - ldy #S.DCB.TTY.STATUS + ldy #S.DCB.TTY.S lda (ZPDCBPtr),y sta (ZPBufPtr) clc rts -.3 cmp #S.IOCTL.STATCODE.EOF +.3 cmp #S.IOCTL.S.EOF bne .9 jsr TERMX.ISOPENED @@ -120,7 +120,7 @@ TERMX.OPEN jsr TERMX.ISOPENED sta (ZPDCBPtr) #S.DCB.TTY.DEVID - ldy #S.DCB.TTY.STATUS + ldy #S.DCB.TTY.S lda (ZPDCBPtr),y ora #S.DIB.S.OPENED ora TERMX.DIB+S.DIB.S @@ -171,7 +171,7 @@ TERMX.CLOSE jsr TERMX.ISOPENED sec rts *-------------------------------------- -TERMX.ISOPENED ldy #S.DCB.TTY.STATUS +TERMX.ISOPENED ldy #S.DCB.TTY.S lda (ZPDCBPtr),y bit #S.DIB.S.OPENED rts @@ -279,7 +279,7 @@ TERMX.WRITE jsr TERMX.CUROFF inc ZPCnt+1 beq .8 -.2 ldy #S.DCB.TTY.MODE +.2 ldy #S.DCB.TTY.M lda (ZPDCBPtr),y tax jsr .3 @@ -306,7 +306,7 @@ TERMX.OUT jsr TERM.GetBufByte cmp #IAC bne .1 - lda #S.DCB.TTY.MODE.IAC + lda #S.DCB.TTY.M.IAC jmp TERMX.SETM .1 cmp #C.DEL @@ -421,10 +421,10 @@ TERMX.OUT.SI clc clc rts *-------------------------------------- -TERMX.OUT.ESC lda #S.DCB.TTY.MODE.ESC +TERMX.OUT.ESC lda #S.DCB.TTY.M.ESC bra TERMX.SETM *-------------------------------------- -TERMX.ESC jsr TERM.GetBufByte y = #S.DCB.TTY.MODE +TERMX.ESC jsr TERM.GetBufByte y = #S.DCB.TTY.M ldx #EscCodes.Cnt-1 .2 cmp EscCodes,x @@ -450,19 +450,18 @@ TERMX.ESC jsr TERM.GetBufByte y = #S.DCB.TTY.MODE .DA Scroll.Dn M .DA Scroll.Up D .DA RESET c - .DA TERMX.SETM.RTS [ - .DA TERMX.SETM.RTS ( - .DA TERMX.SETM.RTS ) + .DA TERMX.RTS [ + .DA TERMX.RTS ( + .DA TERMX.RTS ) *-------------------------------------- TERMX.SETM0 lda #0 -TERMX.SETM ldy #S.DCB.TTY.MODE +TERMX.SETM ldy #S.DCB.TTY.M sta (ZPDCBPtr),y ldy #S.DCB.TTY.INBUF lda #S.DCB.TTY.INBUF sta (ZPDCBPtr),y clc - -TERMX.SETM.RTS rts + rts *-------------------------------------- TERMX.CSI ldy #S.DCB.TTY.INBUF lda (ZPDCBPtr),y @@ -501,12 +500,12 @@ TERMX.CSI.Exec stz CsiH sta CsiH -.1 jsr SHARED.NextCharPtr2 +.1 jsr SHARED.NextCP2 .2 jsr MATH.Dec2ACC32 bcs .5 - jsr SHARED.AddYToPtr2 + jsr SHARED.AddY2P2 lda #255 ldx ACC32+1 bne .3 @@ -921,12 +920,12 @@ COUT.IAC.DONT COUT.IAC.EXIT *-------------------------------------- RESET.MODE lda #0 - ldy #S.DCB.TTY.MODE + ldy #S.DCB.TTY.M sta (ZPDCBPtr),y rts *-------------------------------------- -RESET ldy #S.DCB.TTY.MODE -.1 lda RESET.VALUES-S.DCB.TTY.MODE,y +RESET ldy #S.DCB.TTY.M +.1 lda RESET.VALUES-S.DCB.TTY.M,y sta (ZPDCBPtr),y iny cpy #S.DCB.TTY.INBUF+1 @@ -1076,16 +1075,16 @@ TERMX.CBLNK bit bActive .9 rts TERMX.CUROFF bit bActive - bpl TERMX.CBLNK.RTS + bpl TERMX.RTS ldy #S.DCB.TTY.bCURON lda (ZPDCBPtr),y - beq TERMX.CBLNK.RTS + beq TERMX.RTS TERMX.CBLNK.1 lda (ZPDCBPtr),y bne TERMX.CBLNK.OFF jsr GetCharAtCurPos - bcs TERMX.CBLNK.RTS Out of screen + bcs TERMX.RTS Out of screen and #$80 eor #" " @@ -1101,14 +1100,14 @@ TERMX.CBLNK.SET TERMX.CBLNK.OFF jsr GetCharAtCurPos bcc TERMX.CBLNK.SET if not Out of screen -TERMX.CBLNK.RTS - rts + +TERMX.RTS rts *-------------------------------------- DecOut jsr MATH.A2STR10NP ldx #0 -.1 lda A2osX.NumStrBuf,x - beq TERMX.CBLNK.RTS +.1 lda FOUTBuf,x + beq TERMX.RTS inx jsr Char.Out.Put bra .1 @@ -1225,7 +1224,7 @@ TERMX.CLRSCR.2 sty .1+1 *-------------------------------------- TERMX.Title.ON ldy #S.DCB.TTY.bTITLE lda (ZPDCBPtr),y - bmi TERMX.Title.RTS + bmi TERMX.RTS2 lda #$ff sta (ZPDCBPtr),y @@ -1240,7 +1239,7 @@ TERMX.Title.ON ldy #S.DCB.TTY.bTITLE ldy #0 -.1 jsr SHARED.TXTPTR.GetNext +.1 jsr SHARED.TXTPTRgn beq .3 cmp #$40 @@ -1264,11 +1263,12 @@ TERMX.Title.ON ldy #S.DCB.TTY.bTITLE cpy #80 bne .4 -TERMX.Title.RTS rts +TERMX.RTS2 rts TERMX.Title.OFF ldy #S.DCB.TTY.bTITLE lda (ZPDCBPtr),y - bpl TERMX.Title.RTS + bpl TERMX.RTS2 + lda #$0 sta (ZPDCBPtr),y *-------------------------------------- @@ -1455,7 +1455,7 @@ CtrlChars.Cnt .EQ *-CtrlChars *-------------------------------------- EscCodes .AZ "78MDc[()" EscCodes.Cnt .EQ *-EscCodes -EscModes .DA #0,#0,#0,#0,#0,#S.DCB.TTY.MODE.CSI,#S.DCB.TTY.MODE.G0,#S.DCB.TTY.MODE.G1 +EscModes .DA #0,#0,#0,#0,#0,#S.DCB.TTY.M.CSI,#S.DCB.TTY.M.G0,#S.DCB.TTY.M.G1 CsiCodes .AS "hlmnrABCDJKH" CsiCodes.Cnt .EQ *-CsiCodes *-------------------------------------- diff --git a/SYS/KERNEL.S.TIMEX.txt b/SYS/KERNEL.S.TIMEX.txt index 89307732..8377dedb 100644 --- a/SYS/KERNEL.S.TIMEX.txt +++ b/SYS/KERNEL.S.TIMEX.txt @@ -13,17 +13,17 @@ DAY0 .EQ 4 day 0 was a thursday * TXTPTR format *-------------------------------------- TIMEX.StrFTime -.1 jsr SHARED.TXTPTR.GetNext +.1 jsr SHARED.TXTPTRgn beq .8 cmp #'%' beq .2 - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn bra .1 .2 ldx #K.StrFTime.Cnt-1 - jsr SHARED.TXTPTR.GetNext + jsr SHARED.TXTPTRgn beq .8 .3 cmp K.StrFTime.Tbl,x @@ -47,7 +47,7 @@ TIMEX.StrFTime .7 jmp (K.StrFTime.JMP,x) .8 lda #0 Terminate C string - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn clc rts *-------------------------------------- @@ -83,7 +83,7 @@ K.StrFTime.STR sta ZPPtr4 bcc .10 ldx #3 -.10 jsr SHARED.ZPPtr3.GetY get required S.Time field value +.10 jsr SHARED.P3gY get required S.Time field value tay beq .2 Illegal value, print ??? @@ -100,7 +100,7 @@ K.StrFTime.STR sta ZPPtr4 .3 iny lda (ZPPtr4),y - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn tya cmp (ZPPtr4) beq .8 @@ -110,22 +110,22 @@ K.StrFTime.STR sta ZPPtr4 .8 rts *-------------------------------------- K.StrFTime.II ldy #S.Time.HOUR - jsr SHARED.ZPPtr3.GetY + jsr SHARED.P3gY cmp #12 bcc K.StrFTime.addDecA sbc #12 bra K.StrFTime.addDecA K.StrFTime.P ldy #S.Time.HOUR - jsr SHARED.ZPPtr3.GetY + jsr SHARED.P3gY cmp #12 bcc .1 lda #'p' .HS 2C bit abs .1 lda #'a' - jsr SHARED.FORPNT.PutNext + jsr SHARED.FORPNTpn lda #'m' - jmp SHARED.FORPNT.PutNext + jmp SHARED.FORPNTpn t K.StrFTime.YY ldy #S.Time.CENTURY jsr K.StrFTime.addDecPtr3Y @@ -133,16 +133,16 @@ K.StrFTime.YY ldy #S.Time.CENTURY K.StrFTime.AtX ldy K.StrFTime.OfsX-7,x *-------------------------------------- K.StrFTime.addDecPtr3Y - jsr SHARED.ZPPtr3.GetY + jsr SHARED.P3gY K.StrFTime.addDecA ldx #2 ldy #'0' clc jsr MATH.A2STR10 - lda A2osX.NumStrBuf - jsr SHARED.FORPNT.PutNext - lda A2osX.NumStrBuf+1 - jmp SHARED.FORPNT.PutNext + lda FOUTBuf + jsr SHARED.FORPNTpn + lda FOUTBuf+1 + jmp SHARED.FORPNTpn *-------------------------------------- TIMEX.DAY >PSTR "???" >PSTR "Monday" @@ -173,25 +173,25 @@ TIMEX.PTime2Time.BAD rts TIMEX.PTime2Time ldy #3 - jsr SHARED.TXTPTR.GetY + jsr SHARED.TXTPTRgY and #%11100000 bne TIMEX.PTime2Time.BAD dey - jsr SHARED.TXTPTR.GetY + jsr SHARED.TXTPTRgY and #%11000000 bne TIMEX.PTime2Time.BAD dey ldy #1 - jsr SHARED.TXTPTR.GetY Get Year + jsr SHARED.TXTPTRgY Get Year lsr C is high bit of month ldy #S.Time.YEAR - jsr SHARED.FORPNT.PutY set year + jsr SHARED.FORPNTpY set year sta ARG32+3 for computing Century/WDAY later ldy #0 - jsr SHARED.TXTPTR.GetY Get Month/day + jsr SHARED.TXTPTRgY Get Month/day tax save Day ror C is high bit of month @@ -205,7 +205,7 @@ TIMEX.PTime2Time bcs TIMEX.PTime2Time.BAD ldy #S.Time.MONTH - jsr SHARED.FORPNT.PutY set month + jsr SHARED.FORPNTpY set month sta K.ComputeWDAY.1+1 txa get back day @@ -216,7 +216,7 @@ TIMEX.PTime2Time bcs TIMEX.PTime2Time.BAD iny - jsr SHARED.FORPNT.PutY set day + jsr SHARED.FORPNTpY set day dec adjust range 0.30 for MOD 7 sta ARG32.Sign For later... @@ -231,22 +231,22 @@ TIMEX.PTime2Time eor #1 toggle C adc #19 set date before 1970 -> 20xx ldy #0 - jsr SHARED.FORPNT.PutY set Century + jsr SHARED.FORPNTpY set Century sta ARG32+2 for computing WDAY later ldy #2 - jsr SHARED.TXTPTR.GetY Get Min + jsr SHARED.TXTPTRgY Get Min tax iny - jsr SHARED.TXTPTR.GetY Get Hour + jsr SHARED.TXTPTRgY Get Hour ldy #S.Time.HOUR - jsr SHARED.FORPNT.PutY set hour + jsr SHARED.FORPNTpY set hour iny txa - jsr SHARED.FORPNT.PutY set min + jsr SHARED.FORPNTpY set min iny lda #0 - jsr SHARED.FORPNT.PutY set seconds (ProDOS does not provide it) + jsr SHARED.FORPNTpY set seconds (ProDOS does not provide it) *-------------------------------------- * 1/1/1970 was Thursday...if not leap, add one, if leap add 2 *-------------------------------------- @@ -324,7 +324,7 @@ K.ComputeWDAY.1 ldx #$ff SELF MODIFIED : month ldy #S.Time.WDAY * clc - jmp SHARED.FORPNT.PutY + jmp SHARED.FORPNTpY *-------------------------------------- * TXTPTR ctime * FORPNT S.TIME @@ -332,7 +332,7 @@ K.ComputeWDAY.1 ldx #$ff SELF MODIFIED : month TIMEX.CTime2Time ldy #3 -.1 jsr SHARED.TXTPTR.GetY +.1 jsr SHARED.TXTPTRgY sta ARG32,y ARG = ctime dey bpl .1 @@ -366,7 +366,7 @@ TIMEX.CTime2Time tya ldy #S.Time.WDAY - jsr SHARED.FORPNT.PutY + jsr SHARED.FORPNTpY ldy #CENT0 sty ZPPtr3 @@ -402,11 +402,11 @@ K.CTime2Time.Y lda ZPPtr3 ldy #S.Time.CENTURY - jsr SHARED.FORPNT.PutY + jsr SHARED.FORPNTpY ldy #S.Time.YEAR lda ZPPtr3+1 - jsr SHARED.FORPNT.PutY + jsr SHARED.FORPNTpY K.CTime2Time.MD ldx #1 X = January @@ -442,13 +442,13 @@ K.CTime2Time.MD .4 pla ldy #S.TIME.MONTH txa - jsr SHARED.FORPNT.PutY + jsr SHARED.FORPNTpY iny S.TIME.DAY lda ARG32 inc - jsr SHARED.FORPNT.PutY + jsr SHARED.FORPNTpY K.CTime2Time.HMS ldx #3 @@ -467,7 +467,7 @@ K.CTime2Time.HMS dey #S.TIME.HOUR lda ARG32 - jsr SHARED.FORPNT.PutY + jsr SHARED.FORPNTpY clc rts @@ -479,7 +479,7 @@ K.CTime2Time.HMS jsr M32.DIVMOD ply lda TMP32 - jsr SHARED.FORPNT.PutY + jsr SHARED.FORPNTpY rts *-------------------------------------- * In : diff --git a/SYS/KERNEL.S.UNISTD.txt b/SYS/KERNEL.S.UNISTD.txt index 4fdcfe7a..d8ba4ace 100644 --- a/SYS/KERNEL.S.UNISTD.txt +++ b/SYS/KERNEL.S.UNISTD.txt @@ -21,12 +21,12 @@ K.Open jsr PFT.YAToMLIPATH stz IO.Open.AUXTYPE stz IO.Open.AUXTYPE+1 *-------------------------------------- -UNISTD.Open ldx #5 /dev/ +IO.Open ldx #5 /dev/ cpx K.MLI.PATH bcs .8 .1 lda K.MLI.PATH,x - cmp UNISTD.DEV-1,x + cmp IO.DEV-1,x bne .8 dex bne .1 @@ -47,11 +47,11 @@ UNISTD.Open ldx #5 /dev/ .2 * .DA STDIO.IOERR REG .DA STDIO.IOERR DIR - .DA IO.OPEN.CDEV - .DA IO.OPEN.BDEV + .DA IO.OPEN.DEV + .DA IO.OPEN.DEV .DA STDIO.IOERR LNK - .DA IO.OPEN.DSOCK - .DA IO.OPEN.SSOCK + .DA IO.OPEN.SOCK + .DA IO.OPEN.SOCK .DA IO.OPEN.PIPE .8 jmp FS.OPEN.REG @@ -68,16 +68,16 @@ UNISTD.Open ldx #5 /dev/ *\-------------------------------------- K.Close jsr DEV.GetPFD -UNISTD.Close lda (pFD) #S.FD.T +IO.Close lda (pFD) #S.FD.T tax jmp (.1,x) .1 .DA FS.CLOSE.REG .DA FS.CLOSE.DIR - .DA IO.CLOSE.CDEV - .DA IO.CLOSE.BDEV + .DA IO.CLOSE.DEV + .DA IO.CLOSE.DEV .DA STDIO.IOERR LNK - .DA IO.CLOSE.DSOCK - .DA IO.CLOSE.SSOCK + .DA IO.CLOSE.SOCK + .DA IO.CLOSE.SOCK .DA IO.CLOSE.PIPE */-------------------------------------- * # read @@ -95,7 +95,7 @@ UNISTD.Close lda (pFD) #S.FD.T *\-------------------------------------- K.Read jsr DEV.GetPFD -UNISTD.Read lda (pFD) #S.FD.T +IO.Read lda (pFD) #S.FD.T tax jmp (.1,x) .1 .DA FS.READ.REG @@ -122,7 +122,7 @@ UNISTD.Read lda (pFD) #S.FD.T *\-------------------------------------- K.Write jsr DEV.GetPFD -UNISTD.Write lda (pFD) #S.FD.T +IO.Write lda (pFD) #S.FD.T tax jmp (.1,x) .1 .DA FS.WRITE.REG @@ -134,19 +134,16 @@ UNISTD.Write lda (pFD) #S.FD.T .DA IO.WRITE.SSOCK .DA IO.WRITE.PIPE *-------------------------------------- -IO.OPEN.CDEV -IO.OPEN.BDEV ldx #IOCTL.OPEN +IO.OPEN.DEV ldx #IOCTL.OPEN lda IO.hDevNod jsr DEV.pDrvJmp - bcs IO.WRITE.CDEV.RTS + bcs IO.RTS *-------------------------------------- -IO.OPEN.DSOCK -IO.OPEN.SSOCK lda IO.hDevNod +IO.OPEN.SOCK lda IO.hDevNod clc rts *-------------------------------------- -IO.CLOSE.CDEV -IO.CLOSE.BDEV ldx #IOCTL.CLOSE +IO.CLOSE.DEV ldx #IOCTL.CLOSE lda IO.hDevNod jmp DEV.pDrvJmp *-------------------------------------- @@ -160,17 +157,13 @@ IO.WRITE.CDEV ldx #IOCTL.WRITE >LDYAI K.S.IOCTL jsr DEV.pDrvJmp - bcs .9 + bcs IO.RTS >LDYA K.S.IOCTL+S.IOCTL.BYTECNT -.9 -IO.WRITE.CDEV.RTS - rts +IO.RTS rts *-------------------------------------- -IO.CLOSE.DSOCK -IO.CLOSE.SSOCK - ldy #S.FD.SSOCK.CLOSE +IO.CLOSE.SOCK ldy #S.FD.SSOCK.CLOSE .HS 2C BIT ABS *-------------------------------------- IO.EOF.SSOCK ldy #S.FD.SSOCK.EOF @@ -184,14 +177,14 @@ IO.WRITE.SSOCK ldy #S.FD.SSOCK.WRITE lda (pFD),y tax Function Offset in LIB - ldy #S.FD.SSOCK.IOHANDLER + ldy #S.FD.SSOCK.IOH lda (pFD),y jsr K.GetMemPtr >STYA .1+1 lda IO.hFD .1 jmp $FFFF SELF MODIFIED *-------------------------------------- -IO.EOF.CDEV lda #S.IOCTL.STATCODE.EOF +IO.EOF.CDEV lda #S.IOCTL.S.EOF jmp DEV.GetDevStatus */-------------------------------------- * # ChOwn @@ -206,12 +199,12 @@ IO.EOF.CDEV lda #S.IOCTL.STATCODE.EOF * ## RETURN VALUE *\-------------------------------------- K.ChOwn jsr PFT.CheckPath2 - bcs K.ChOwn.RET4 + bcs .9 stz K.MLI.PARAMS+3+S.FIEX.ACL read mode >MLICALL MLIACL - bcs K.ChOwn.RET4 + bcs .9 lda (pStack) bmi .1 @@ -229,9 +222,9 @@ K.ChOwn jsr PFT.CheckPath2 >MLICALL MLIACL -K.ChOwn.RET4 >RET 4 +.9 >RET 4 *-------------------------------------- -UNISTD.DEV .AS "/dev/" +IO.DEV .AS "/dev/" *-------------------------------------- MAN SAVE usr/src/sys/kernel.s.unistd diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index c5d54e08..561be899 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -23,31 +23,32 @@ NEW A2osX.Unpak >STYA ZPOutBufPtr .INB usr/src/shared/x.unpak.s -PAKME.MAIN .DA A2osX.MAIN -PAKME.AUX .DA A2osX.AUX -PAKME.GP .DA A2osX.GP -PAKME.D1 .DA A2osX.D1 -PAKME.D2 .DA A2osX.D2 -PAKME.E0 .DA A2osX.E0 +PAKME.MAIN .DA MAIN +PAKME.AUX .DA AUX +PAKME.GP .DA GP +PAKME.D1 .DA D1 +PAKME.D2 .DA D2 +PAKME.E0 .DA E0 -A2osX.MAIN .DA #0 - .DA A2osX.MAIN.S +MAIN .DA #0 + .DA MAIN.S -A2osX.MAIN.B .PH A2osX.EndTables +MAIN.B .PH A2osX.EndTables .INB usr/src/sys/kernel.s.core .INB usr/src/sys/kernel.s.drv .INB usr/src/sys/kernel.s.pft .INB usr/src/sys/kernel.s.fs + .INB usr/src/sys/kernel.s.mathf Mem.MLoMem .EQ * .EP -A2osX.MAIN.S .EQ *-A2osX.MAIN.B +MAIN.S .EQ *-MAIN.B -A2osX.AUX .DA #0 - .DA A2osX.AUX.S +AUX .DA #0 + .DA AUX.S -A2osX.AUX.B .PH Mem.XHiMem +AUX.B .PH Mem.XHiMem - .DA SHARED.TXTPTR.GetNext + .DA SHARED.TXTPTRgn .INB usr/src/sys/kernel.s.jmpx .INB usr/src/sys/kernel.s.termx @@ -57,24 +58,23 @@ A2osX.AUX.B .PH Mem.XHiMem .INB usr/src/sys/kernel.s.md5x .INB usr/src/sys/kernel.s.pwdx .INB usr/src/sys/kernel.s.slistx -* .INB usr/src/sys/kernel.s.blistx + .INB usr/src/sys/kernel.s.blistx .INB usr/src/sys/kernel.s.errorx .EP -A2osX.AUX.S .EQ *-A2osX.AUX.B +AUX.S .EQ *-AUX.B -A2osX.GP .DA #0 - .DA A2osX.GP.S +GP .DA #0 + .DA GP.S -A2osX.GP.B .PH A2osX.SYSCALL +GP.B .PH A2osX.SYSCALL .INB usr/src/sys/kernel.s.gp -A2osX.GP.SC .EQ GP.CodeEnd-GP.CodeStart .EP -A2osX.GP.S .EQ *-A2osX.GP.B +GP.S .EQ *-GP.B -A2osX.D1 .DA #0 - .DA A2osX.D1.S +D1 .DA #0 + .DA D1.S -A2osX.D1.B .PH $D000 +D1.B .PH $D000 .DA #RRAMWRAMBNK1 .INB usr/src/sys/kernel.s.stat .INB usr/src/sys/kernel.s.dirent @@ -83,12 +83,12 @@ A2osX.D1.B .PH $D000 .INB usr/src/sys/kernel.s.dev .INB usr/src/sys/kernel.s.pipe .EP -A2osX.D1.S .EQ *-A2osX.D1.B +D1.S .EQ *-D1.B -A2osX.D2 .DA #0 - .DA A2osX.D2.S +D2 .DA #0 + .DA D2.S -A2osX.D2.B .PH $D000 +D2.B .PH $D000 .DA #RRAMWRAMBNK2 .INB usr/src/sys/kernel.s.mount .INB usr/src/sys/kernel.s.arg @@ -98,12 +98,12 @@ A2osX.D2.B .PH $D000 .INB usr/src/sys/kernel.s.bin .INB usr/src/sys/kernel.s.ps .EP -A2osX.D2.S .EQ *-A2osX.D2.B +D2.S .EQ *-D2.B -A2osX.E0 .DA #0 - .DA A2osX.E0.S +E0 .DA #0 + .DA E0.S -A2osX.E0.B .PH $E000 +E0.B .PH $E000 .INB usr/src/sys/kernel.s.jmp .INB usr/src/sys/kernel.s.irq .INB usr/src/sys/kernel.s.shared @@ -127,7 +127,8 @@ DevMgr.Free .DA DevMgr.FreeMem .DA DevMgr.HiMem DevMgr.FreeMem .EQ * .EP -A2osX.E0.S .EQ *-A2osX.E0.B + +E0.S .EQ *-E0.B .AS "PAKME" TAG .DA $2000 BIN ORG