diff --git a/.Floppies/A2OSX.BOOTHD.woz b/.Floppies/A2OSX.BOOTHD.woz index 73fd6498..b253353d 100644 Binary files a/.Floppies/A2OSX.BOOTHD.woz and b/.Floppies/A2OSX.BOOTHD.woz differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 25401196..66b8c89b 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po index 3a9e64d2..2e6667b4 100644 Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ diff --git a/BIN/ACOS.S.CODE.txt b/BIN/ACOS.S.CODE.txt index 3c4322e4..4218f856 100644 --- a/BIN/ACOS.S.CODE.txt +++ b/BIN/ACOS.S.CODE.txt @@ -95,16 +95,6 @@ CODE.FPRINTL ldx #0 rts *-------------------------------------- -CODE.FPRINTCR ldx #0 - -.1 lda CCODE.FPRINTCR,x - jsr CODE.EmitByte - inx - cpx #CCODE.FPRINTCR.LEN - bne .1 - - rts -*-------------------------------------- CODE.FPUCALL lda #$A2 LDX #imm jsr CODE.EmitByte txa @@ -116,6 +106,16 @@ CODE.FPUCALL lda #$A2 LDX #imm lda /A2osX.FPUCALL bra CODE.EmitByte *-------------------------------------- +CODE.FPRINTCRLF ldx #C.CR + jsr CODE.PutChar + ldx #C.LF +*-------------------------------------- +CODE.PutChar lda #$A9 LDA #imm + jsr CODE.EmitByte + txa + jsr CODE.EmitByte + ldx #SYS.PutChar +*-------------------------------------- CODE.SYSCALL lda #$A2 LDX #imm jsr CODE.EmitByte txa diff --git a/BIN/ACOS.S.CORE.txt b/BIN/ACOS.S.CORE.txt index 016e42b4..479cf9cd 100644 --- a/BIN/ACOS.S.CORE.txt +++ b/BIN/ACOS.S.CORE.txt @@ -78,7 +78,7 @@ CORE.Compile jsr CORE.GetChar beq .80 Comment: skip line... cmp #C.CR - beq .81 Blank line... + beq .88 EOL jsr CORE.CheckCharNB bcs .1 CS=SPACE -> go check VAR or KW @@ -94,6 +94,8 @@ CORE.Compile jsr CORE.GetChar .1 jsr CORE.GetNextCharNB skip SPACE(s) or ":" bcs .99 + cmp #C.CR + beq .88 EOL jsr CORE.IsLetter bcs .90 @@ -124,15 +126,15 @@ CORE.Compile jsr CORE.GetChar .8 jsr CORE.GetCharNB bcs .99 - jsr CORE.IsEndInst - bcc .90 - cmp #':' beq .1 - clc + cmp #C.CR + bne .90 -.81 jmp CORE.GetNextChar skip char +.88 clc + + jmp CORE.GetNextChar skip char .80 jmp CORE.SkipLine @@ -161,11 +163,11 @@ CORE.Run lda #$60 RTS sta ZPPtr2 lda ZPPtr1+1 - sbc ZPCodeBufPtr - sta ZPPtr1+2 + sbc ZPCodeBufPtr+1 + sta ZPPtr2+1 >PUSHW L.MSG.RUN - >PUSHW ZPPtr1 + >PUSHW ZPPtr2 >PUSHBI 2 >SYSCALL PrintF * >DEBUG @@ -356,7 +358,10 @@ CORE.IsAOPSChar ldx #0 * clc rts *-------------------------------------- -CORE.IsEndExp cmp #',' +CORE.IsEndExp cmp #')' + beq CORE.ToUpperCase.RTS + + cmp #',' beq CORE.ToUpperCase.RTS cmp #';' diff --git a/BIN/ACOS.S.EXP.txt b/BIN/ACOS.S.EXP.txt index ef66456c..371ebd80 100644 --- a/BIN/ACOS.S.EXP.txt +++ b/BIN/ACOS.S.EXP.txt @@ -5,48 +5,120 @@ NEW * In: A = current CHAR * Out: CC, longint on stack *-------------------------------------- -EXP.Eval ldx #$FF - stx EXP.AOPS1 - stx EXP.AOPS2 +EXP.Eval lda EXP.AOPS + pha - - -.10 jsr CORE.IsLetter - bcc .1 FN or VAR - - jsr CORE.IsDigit10 - bcs .9 - - jsr EXP.Int32 + lda #$FF + >PUSHA Previous OP = none +*-------------------------------------- +.10 jsr CORE.GetCharNB + bcs .39 + +.11 cmp #'(' + bne .20 + + jsr CORE.GetNextCharNB skip ( + bcs .90 + + jsr EXP.Eval bcs .99 - bra .5 + jsr CORE.GetCharNB + bcs .90 + + cmp #')' + bne .90 + + jsr CORE.GetNextCharNB skip ) + bra .41 *-------------------------------------- -.1 >LDYA L.ACOS.FN +.20 jsr CORE.IsLetter + bcs .30 FN or VAR + + >LDYA L.ACOS.FN jsr CORE.Lookup - bcs .3 + bcs .21 jsr EXP.FNjmpX bcs .99 + bra .40 - - bra .5 -*-------------------------------------- -.3 jsr EXP.VARLookup +.21 jsr EXP.VARLookup bcs .99 >LDYA EXP.ADDR jsr CODE.PUSHfYA -*-------------------------------------- -.5 jsr CORE.GetCharNB - bcs .7 - jsr CORE.IsEndExp - bcs .7 + bra .40 +*-------------------------------------- +.30 jsr CORE.IsDigit10 +.39 bcs .90 + + jsr EXP.Int32 + bcs .99 +*-------------------------------------- +.40 jsr CORE.GetCharNB +.41 bcs .80 + +.50 jsr CORE.IsEndExp + bcs .80 - jsr CORE.IsAOPSChar + - * / - bcc .6 + jsr EXP.GetOP + bcs .90 + + stx EXP.AOPS + +.61 lda (pStack) get op context + bmi .62 no prev op, go get arg2 + + cmp EXP.AOPS we have arg1 A=op1 arg2 X=op2 + bcc .62 + + inc pStack prev op has precedence + + tax + jsr EXP.OPjmpX go compute (arg1 op1 arg2) + +.62 lda EXP.AOPS we must compute arg2 op2 arg3 before + >PUSHA + +.63 jsr CORE.GetNextCharNB + bcc .11 + + bcs .90 +*-------------------------------------- +.80 >PULLA + tax + bmi .88 nothing to do + + jsr EXP.OPjmpX + bra .80 + +.90 lda #E.ESYN + +.99 tay Save Err code + + >PULLA + tax + bpl .99 + + sec + .HS 90 BCC +.88 clc + + pla + sta EXP.AOPS + + tya + + rts +*-------------------------------------- +EXP.FNjmpX jmp (J.ACOS.FN,x) +EXP.OPjmpX jmp (J.ACOS.AOPS,x) +*-------------------------------------- +EXP.GetOP jsr CORE.IsAOPSChar + - * / + bcc .9 >LDYA L.ACOS.AOPS MOD jsr CORE.Lookup @@ -56,33 +128,8 @@ EXP.Eval ldx #$FF * clc adc #ACOS.AOPSChars.Cnt*2 tax - - lda EXP.AOPS1 - bmi .6 - - cpx EXP.AOPS1 - -.6 stx EXP.AOPS1 - - jsr CORE.GetNextCharNB - bcs .9 - - jmp .10 - -.7 ldx EXP.AOPS1 - bmi .8 - - jsr EXP.AOPSjmpX - -.8 clc - rts - -.9 lda #E.CSYN -.99 rts -*-------------------------------------- -EXP.FNjmpX jmp (J.ACOS.FN,x) -EXP.AOPSjmpX jmp (J.ACOS.AOPS,x) +.9 rts *-------------------------------------- EXP.Int32 >PUSHW ZPInputBufPtr >PUSHWI ZPInputBufPtr diff --git a/BIN/ACOS.S.KW.txt b/BIN/ACOS.S.KW.txt index 615efb19..0ec04100 100644 --- a/BIN/ACOS.S.KW.txt +++ b/BIN/ACOS.S.KW.txt @@ -18,30 +18,42 @@ KW.FLAG KW.FOR KW.FREE KW.GET -KW.GOSUB - clc + lda #E.CSYN + sec rts *-------------------------------------- -KW.GOTO jsr CORE.GetNextCharNB +KW.GOSUB sec + .HS 90 CLC +*-------------------------------------- +KW.GOTO clc + php + + jsr CORE.GetNextCharNB bcs .90 >LDA.G hLabels jsr CORE.GetAddr bcs .99 + plp + lda #$4C JMP abs - jsr CODE.EmitByte + bcc .1 + + lda #$20 JSR abs + +.1 jsr CODE.EmitByte lda ZPADDR jsr CODE.EmitByte lda ZPADDR+1 - jsr CODE.EmitByte clc - rts + jmp CODE.EmitByte .90 lda #E.CSYN +.99 plp sec -.99 rts + rts *-------------------------------------- KW.HOME KW.IF @@ -63,7 +75,8 @@ KW.OPEN KW.POKE KW.POP KW.POSITION - clc + lda #E.CSYN + sec rts *-------------------------------------- KW.PRINT stz hOut reset to hStdOut @@ -73,14 +86,14 @@ KW.PRINT stz hOut reset to hStdOut * lda (pPS),y * sta hOut Default to screen - sec - ror bFlag put ending CR - + .10 jsr CORE.GetNextCharNB bcs .8 - jsr CORE.IsEndInst +.11 jsr CORE.IsEndInst bcs .8 + + stz bFlag put ending CR cmp #'"' bne .5 @@ -131,23 +144,23 @@ KW.PRINT stz hOut reset to hStdOut cmp #',' bne .71 -* TODO : CR ? or not CR ? + tax + jsr CODE.PutChar bra .10 go skip .71 cmp #';' bne .90 - -* TODO : PRINT ; ? or not ? + + dec bFlag suppress ending CR jsr CORE.GetNextCharNB skip ; - stz bFlag - + bcc .11 .8 bit bFlag - bpl .80 + bmi .80 - jsr CODE.FPRINTCR + jsr CODE.FPRINTCRLF .80 clc rts @@ -162,7 +175,15 @@ KW.RAM KW.RAM2 KW.READ KW.READY -KW.RETURN + lda #E.CSYN + sec + rts +*-------------------------------------- +KW.RETURN lda #$60 RTS + + clc + jmp CODE.EmitByte +*-------------------------------------- KW.REWIND KW.RIPCO KW.SET @@ -174,7 +195,8 @@ KW.UPDATE KW.USE KW.WHENd KW.WRITE - clc + lda #E.CSYN + sec rts *-------------------------------------- MAN diff --git a/BIN/ACOS.S.txt b/BIN/ACOS.S.txt index 9721c192..ba833b37 100644 --- a/BIN/ACOS.S.txt +++ b/BIN/ACOS.S.txt @@ -5,9 +5,10 @@ NEW .OR $2000 .TF bin/acos *-------------------------------------- -CODESEG .EQ 1024 +CODESEG .EQ 4096 CONSTSEG .EQ 1024 DATASEG .EQ 256 +EXP.DEPTH.MAX .EQ 16 *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i @@ -38,10 +39,8 @@ ArgIndex .BS 1 bFlag .BS 1 EXP.ADDR .BS 2 -EXP.AOPS1 .BS 1 -EXP.AOPS2 .BS 1 +EXP.AOPS .BS 1 EXP.DEPTH .BS 1 - .BS 1 ZS.END .ED *-------------------------------------- @@ -55,7 +54,7 @@ CS.START cld .DA #0 .DA CS.END-CS.START Code Size (without Constants) .DA DS.END-DS.START Data SegmentSize - .DA #256 Stack Size + .DA #128 Stack Size .DA #ZS.END-ZS.START Zero Page Size .DA 0 *-------------------------------------- @@ -448,17 +447,11 @@ CCODE.FPRINTL >PUSHW L.MSG.INT32 >PUSHA dex bne .1 + >PUSHBI 4 >SYSCALL PrintF >POP 4 Discard long on stack CCODE.FPRINTL.LEN .EQ *-CCODE.FPRINTL -*-------------------------------------- -CCODE.FPRINTCR >PUSHW L.MSG.ECHOCRLF - >PUSHBI 0 - >SYSCALL PrintF -CCODE.FPRINTCR.LEN .EQ *-CCODE.FPRINTCR -*-------------------------------------- - *-------------------------------------- .INB usr/src/bin/acos.s.code .INB usr/src/bin/acos.s.core @@ -478,7 +471,7 @@ MSG.ECHOCRLF .AZ "\r\n" MSG.COMPILING .AZ "Compiling : %s...\r\n" MSG.DEBUG .AZ "pStack=%H CodePtr=%H\r\n" MSG.ERR .AZ "-^\r\nLine #%D:" -MSG.RUN .AZ "Success, Code size = %d Bytes\r\nExecuting...\r\n" +MSG.RUN .AZ "Success, Code size = %D Bytes\r\nExecuting...\r\n" MSG.STR .AZ "%s" MSG.INT32 .AZ "%L" *-------------------------------------- diff --git a/BIN/CSH.D.txt b/BIN/CSH.D.txt deleted file mode 100644 index 0587ad3f..00000000 --- a/BIN/CSH.D.txt +++ /dev/null @@ -1,38 +0,0 @@ -NEW - AUTO 3,1 - .LIST OFF -*-------------------------------------- -PathBuf .BS 65 - -hFileBuf .BS 1 - -CSH.BufPtrSave .BS 2 - -CSH.CmdSave .BS 1 -CSH.LookupOpt .BS 1 - -CSH.hDefines .BS 1 -CSH.hSymbols .BS 1 -CSH.hTags .BS 1 - -CSH.hCode .BS 1 -CSH.CodePtr .BS 2 - -CSH.hConst .BS 1 -CSH.ConstPtr .BS 2 - -CSH.hData .BS 1 -CSH.DataPtr .BS 2 - -CSH.hStack .BS 1 -CSH.StackPtr .BS 1 - -CSH.SaveInclude .BS 2 -CSH.SaveDefine .BS 2 - -CSH.VarDef .BS 6 -*-------------------------------------- -MAN -SAVE usr/src/bin/csh.d -LOAD usr/src/bin/csh.s -ASM diff --git a/BIN/CSH.E.txt b/BIN/CSH.E.txt deleted file mode 100644 index bc0b0562..00000000 --- a/BIN/CSH.E.txt +++ /dev/null @@ -1,23 +0,0 @@ -NEW - AUTO 3,1 - .LIST OFF -*-------------------------------------- -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 -*-------------------------------------- -MAN -SAVE usr/src/bin/csh.e -LOAD usr/src/bin/csh.s -ASM diff --git a/BIN/CSH.I.txt b/BIN/CSH.I.txt deleted file mode 100644 index 14a68577..00000000 --- a/BIN/CSH.I.txt +++ /dev/null @@ -1,206 +0,0 @@ -NEW - AUTO 3,1 - .LIST OFF -*-------------------------------------- -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 -*-------------------------------------- -* Pre Operators: + - ! ~ ++ -- -*-------------------------------------- -CSH.PREOPS >PSTR "+" - >PSTR "-" - >PSTR "!" - >PSTR "~" -*-------------------------------------- -* Post Operators: ++ -- -*-------------------------------------- -CSH.POSTOPS >PSTR "++" - >PSTR "--" - .HS 00 -*-------------------------------------- -* Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |= -*-------------------------------------- -CSH.AOPS >PSTR "=" - >PSTR "+=" - >PSTR "-=" - >PSTR "*=" - >PSTR "/=" - >PSTR "%=" - >PSTR "<<=" - >PSTR ">>=" - >PSTR "&=" - >PSTR "^=" - >PSTR "!=" - .HS 00 -*-- Binary ---- H to L precedence ----- -* Arithmetic Operators: * / % -* Arithmetic Operators: + - -* Shift Operators: << >> -* Relational Operators: < > >= < >= == != -* Bitwise Operators: & | ^ ~ -* Logical Operators: && || -*-------------------------------------- -CSH.BOPS >PSTR "+" - >PSTR "-" - >PSTR "*" - >PSTR "/" - >PSTR "%" - >PSTR "<<" - >PSTR ">>" - >PSTR "<" - >PSTR ">" - >PSTR "<=" - >PSTR ">=" - >PSTR "==" - >PSTR "!=" - >PSTR "&" - >PSTR "|" - >PSTR "^" - >PSTR "&&" - >PSTR "||" - .HS 00 -*-------------------------------------- -* Reserved Directives: -*-------------------------------------- -CSH.DIRS >PSTR "define" - >PSTR "include" - .HS 00 -*-------------------------------------- -* Reserved Keywords: -*-------------------------------------- -CSH.KW >PSTR "if" - >PSTR "while" - >PSTR "else" - >PSTR "do" - >PSTR "for" - >PSTR "switch" - >PSTR "case" - >PSTR "break" - >PSTR "continue" - >PSTR "sizeof" - >PSTR "typedef" - >PSTR "struct" -CSH.MTYPES >PSTR "const" ALL - >PSTR "signed" char,int,long - >PSTR "unsigned" char,int,long - >PSTR "short" int -CSH.TYPES >PSTR "void" - >PSTR "char" - >PSTR "int" - >PSTR "long" - >PSTR "float" - .HS 00 -*-------------------------------------- -CSH.FTYPES >PSTR "fastcall" -* .HS 00 -*-------------------------------------- -CSH.TYPESIZE .HS 0001020405010204 -*-------------------------------------- -CSH.FN -* float cos ( float x ); - >PSTR "log" - .DA #CSH.T.FLOAT returned value - .DA #CSH.T.FLOAT - .DA #0 - >PSTR "sqr" - .DA #CSH.T.FLOAT returned value - .DA #CSH.T.FLOAT - .DA #0 - >PSTR "exp" - .DA #CSH.T.FLOAT returned value - .DA #CSH.T.FLOAT - .DA #0 - >PSTR "cos" - .DA #CSH.T.FLOAT returned value - .DA #CSH.T.FLOAT - .DA #0 - >PSTR "sin" - .DA #CSH.T.FLOAT returned value - .DA #CSH.T.FLOAT - .DA #0 - >PSTR "tan" - .DA #CSH.T.FLOAT returned value - .DA #CSH.T.FLOAT - .DA #0 - >PSTR "atan" - .DA #CSH.T.FLOAT returned value - .DA #CSH.T.FLOAT - .DA #0 -* char getchar ( void ); - >PSTR "getchar" - .DA #CSH.T.UCHAR returned value - .DA #0 -* int puts ( const char * str ); - >PSTR "puts" - .DA #CSH.T.SINT returned value - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR - .DA #0 -* int execl(const char* cmdline, short int flags); - >PSTR "execl" - .DA #CSH.T.SINT returned value - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR - .DA #CSH.T.UCHAR - .DA #0 -* int printf ( const char * format, ... ); - >PSTR "printf" - .DA #CSH.T.SINT returned value - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR - .DA #CSH.T.VARIADIC - .DA #0 -* int putenv(const char *string); - >PSTR "putenv" - .DA #CSH.T.SINT returned value - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR - .DA #0 -* int setenv(const char *name, const char *value); - >PSTR "setenv" - .DA #CSH.T.SINT returned value - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR - .DA #0 -* char *getenv(const char *name, char *value); - >PSTR "getenv" - .DA #CSH.Q.POINTER+CSH.T.UCHAR - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR - .DA #CSH.Q.POINTER+CSH.T.UCHAR - .DA #0 -* int unsetenv(const char *name); - >PSTR "unsetenv" - .DA #CSH.T.SINT returned value - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR - .DA #0 -* void md5 (const char* str, char* digest); - >PSTR "md5" - .DA #CSH.T.VOID - .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR - .DA #CSH.Q.POINTER+CSH.T.UCHAR - .DA #0 -* void * malloc ( int size ); - >PSTR "malloc" - .DA #CSH.Q.POINTER+CSH.T.VOID returned value - .DA #CSH.T.SINT - .DA #0 -*-------------------------------------- - .DA #0 -*-------------------------------------- -MAN -SAVE usr/src/bin/csh.i -LOAD usr/src/bin/csh.s -ASM diff --git a/BIN/CSH.R.txt b/BIN/CSH.R.txt deleted file mode 100644 index 48ce76f1..00000000 --- a/BIN/CSH.R.txt +++ /dev/null @@ -1,109 +0,0 @@ -NEW - AUTO 3,1 - .LIST OFF -*-------------------------------------- -L.CSH.BOPS .DA CSH.BOPS -J.CSH.BOPS .DA CSH.BOPS.ADD - .DA CSH.BOPS.SUB - .DA CSH.BOPS.MUL - .DA CSH.BOPS.DIV - .DA CSH.BOPS.MOD - .DA CSH.BOPS.SHL - .DA CSH.BOPS.SHR - .DA CSH.BOPS.L - .DA CSH.BOPS.G - .DA CSH.BOPS.LE - .DA CSH.BOPS.GE - .DA CSH.BOPS.EQ - .DA CSH.BOPS.NE - .DA CSH.BOPS.AND - .DA CSH.BOPS.OR - .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 -L.CSH.MTYPES .DA CSH.MTYPES -L.CSH.TYPES .DA CSH.TYPES -L.CSH.FTYPES .DA CSH.FTYPES -J.CSH.DIRS .DA CSH.DIR.DEFINE - .DA CSH.DIR.INCLUDE -J.CSH.KW .DA CSH.IF - .DA CSH.WHILE - .DA CSH.ELSE - .DA CSH.DO - .DA CSH.FOR - .DA CSH.SWITCH - .DA CSH.CASE - .DA CSH.BREAK - .DA CSH.CONTINUE - .DA CSH.SIZEOF -*-------------------------------------- - .DA CSH.TYPEDEF - .DA CSH.STRUCT -*-------------------------------------- -J.CSH.MTYPES .DA CSH.CONST - .DA CSH.SIGNED - .DA CSH.UNSIGNED - .DA CSH.SHORT -J.CSH.TYPES .DA CSH.VOID - .DA CSH.CHAR - .DA CSH.INT - .DA CSH.LONG - .DA CSH.FLOAT -J.CSH.UTYPES .DA CSH.UCHAR - .DA CSH.UINT - .DA CSH.ULONG -J.CSH.STYPES .DA CSH.SCHAR - .DA CSH.SINT - .DA CSH.SLONG -J.CSH.KW.END .DA CSH.IF.END - .DA CSH.WHILE.END -*-------------------------------------- -J.CSH.EXEC .DA EXEC.log - .DA EXEC.sqr - .DA EXEC.exp - .DA EXEC.cos - .DA EXEC.sin - .DA EXEC.tan - .DA EXEC.atan - .DA EXEC.getchar - .DA EXEC.puts - .DA EXEC.execl - .DA EXEC.printf - .DA EXEC.putenv - .DA EXEC.setenv - .DA EXEC.getenv - .DA EXEC.unsetenv - .DA EXEC.MD5 - .DA EXEC.malloc -*-------------------------------------- -MAN -SAVE usr/src/bin/csh.r -LOAD usr/src/bin/csh.s -ASM diff --git a/BIN/CSH.S.txt b/BIN/CSH.S.txt index 99fd7a6a..0dd02927 100644 --- a/BIN/CSH.S.txt +++ b/BIN/CSH.S.txt @@ -10,7 +10,20 @@ NEW .INB inc/mli.i .INB inc/mli.e.i *-------------------------------------- - .INB usr/src/bin/csh.e +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 *-------------------------------------- * Zero Page Segment, up to 32 bytes *-------------------------------------- @@ -72,7 +85,106 @@ L.MSG.ECHOCRLF .DA MSG.ECHOCRLF L.MSG.DEBUG .DA MSG.DEBUG L.MSG.ERR .DA MSG.ERR L.ENV.INCLUDE .DA ENV.INCLUDE - .INB usr/src/bin/csh.r +L.CSH.BOPS .DA CSH.BOPS +J.CSH.BOPS .DA CSH.BOPS.ADD + .DA CSH.BOPS.SUB + .DA CSH.BOPS.MUL + .DA CSH.BOPS.DIV + .DA CSH.BOPS.MOD + .DA CSH.BOPS.SHL + .DA CSH.BOPS.SHR + .DA CSH.BOPS.L + .DA CSH.BOPS.G + .DA CSH.BOPS.LE + .DA CSH.BOPS.GE + .DA CSH.BOPS.EQ + .DA CSH.BOPS.NE + .DA CSH.BOPS.AND + .DA CSH.BOPS.OR + .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 +L.CSH.MTYPES .DA CSH.MTYPES +L.CSH.TYPES .DA CSH.TYPES +L.CSH.FTYPES .DA CSH.FTYPES +J.CSH.DIRS .DA CSH.DIR.DEFINE + .DA CSH.DIR.INCLUDE +J.CSH.KW .DA CSH.IF + .DA CSH.WHILE + .DA CSH.ELSE + .DA CSH.DO + .DA CSH.FOR + .DA CSH.SWITCH + .DA CSH.CASE + .DA CSH.BREAK + .DA CSH.CONTINUE + .DA CSH.SIZEOF +*-------------------------------------- + .DA CSH.TYPEDEF + .DA CSH.STRUCT +*-------------------------------------- +J.CSH.MTYPES .DA CSH.CONST + .DA CSH.SIGNED + .DA CSH.UNSIGNED + .DA CSH.SHORT +J.CSH.TYPES .DA CSH.VOID + .DA CSH.CHAR + .DA CSH.INT + .DA CSH.LONG + .DA CSH.FLOAT +J.CSH.UTYPES .DA CSH.UCHAR + .DA CSH.UINT + .DA CSH.ULONG +J.CSH.STYPES .DA CSH.SCHAR + .DA CSH.SINT + .DA CSH.SLONG +J.CSH.KW.END .DA CSH.IF.END + .DA CSH.WHILE.END +*-------------------------------------- +J.CSH.EXEC .DA EXEC.log + .DA EXEC.sqr + .DA EXEC.exp + .DA EXEC.cos + .DA EXEC.sin + .DA EXEC.tan + .DA EXEC.atan + .DA EXEC.getchar + .DA EXEC.puts + .DA EXEC.execl + .DA EXEC.printf + .DA EXEC.putenv + .DA EXEC.setenv + .DA EXEC.getenv + .DA EXEC.unsetenv + .DA EXEC.MD5 + .DA EXEC.malloc .DA 0 *-------------------------------------- * Called once at process creation @@ -337,15 +449,241 @@ ENV.INCLUDE .AZ "INCLUDE" OptionList .AS "DdTt" OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace *-------------------------------------- - .INB usr/src/bin/csh.i +*-------------------------------------- +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 +*-------------------------------------- +* Pre Operators: + - ! ~ ++ -- +*-------------------------------------- +CSH.PREOPS >PSTR "+" + >PSTR "-" + >PSTR "!" + >PSTR "~" +*-------------------------------------- +* Post Operators: ++ -- +*-------------------------------------- +CSH.POSTOPS >PSTR "++" + >PSTR "--" + .HS 00 +*-------------------------------------- +* Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |= +*-------------------------------------- +CSH.AOPS >PSTR "=" + >PSTR "+=" + >PSTR "-=" + >PSTR "*=" + >PSTR "/=" + >PSTR "%=" + >PSTR "<<=" + >PSTR ">>=" + >PSTR "&=" + >PSTR "^=" + >PSTR "!=" + .HS 00 +*-- Binary ---- H to L precedence ----- +* Arithmetic Operators: * / % +* Arithmetic Operators: + - +* Shift Operators: << >> +* Relational Operators: < > >= < >= == != +* Bitwise Operators: & | ^ ~ +* Logical Operators: && || +*-------------------------------------- +CSH.BOPS >PSTR "+" + >PSTR "-" + >PSTR "*" + >PSTR "/" + >PSTR "%" + >PSTR "<<" + >PSTR ">>" + >PSTR "<" + >PSTR ">" + >PSTR "<=" + >PSTR ">=" + >PSTR "==" + >PSTR "!=" + >PSTR "&" + >PSTR "|" + >PSTR "^" + >PSTR "&&" + >PSTR "||" + .HS 00 +*-------------------------------------- +* Reserved Directives: +*-------------------------------------- +CSH.DIRS >PSTR "define" + >PSTR "include" + .HS 00 +*-------------------------------------- +* Reserved Keywords: +*-------------------------------------- +CSH.KW >PSTR "if" + >PSTR "while" + >PSTR "else" + >PSTR "do" + >PSTR "for" + >PSTR "switch" + >PSTR "case" + >PSTR "break" + >PSTR "continue" + >PSTR "sizeof" + >PSTR "typedef" + >PSTR "struct" +CSH.MTYPES >PSTR "const" ALL + >PSTR "signed" char,int,long + >PSTR "unsigned" char,int,long + >PSTR "short" int +CSH.TYPES >PSTR "void" + >PSTR "char" + >PSTR "int" + >PSTR "long" + >PSTR "float" + .HS 00 +*-------------------------------------- +CSH.FTYPES >PSTR "fastcall" +* .HS 00 +*-------------------------------------- +CSH.TYPESIZE .HS 0001020405010204 +*-------------------------------------- +CSH.FN +* float cos ( float x ); + >PSTR "log" + .DA #CSH.T.FLOAT returned value + .DA #CSH.T.FLOAT + .DA #0 + >PSTR "sqr" + .DA #CSH.T.FLOAT returned value + .DA #CSH.T.FLOAT + .DA #0 + >PSTR "exp" + .DA #CSH.T.FLOAT returned value + .DA #CSH.T.FLOAT + .DA #0 + >PSTR "cos" + .DA #CSH.T.FLOAT returned value + .DA #CSH.T.FLOAT + .DA #0 + >PSTR "sin" + .DA #CSH.T.FLOAT returned value + .DA #CSH.T.FLOAT + .DA #0 + >PSTR "tan" + .DA #CSH.T.FLOAT returned value + .DA #CSH.T.FLOAT + .DA #0 + >PSTR "atan" + .DA #CSH.T.FLOAT returned value + .DA #CSH.T.FLOAT + .DA #0 +* char getchar ( void ); + >PSTR "getchar" + .DA #CSH.T.UCHAR returned value + .DA #0 +* int puts ( const char * str ); + >PSTR "puts" + .DA #CSH.T.SINT returned value + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR + .DA #0 +* int execl(const char* cmdline, short int flags); + >PSTR "execl" + .DA #CSH.T.SINT returned value + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR + .DA #CSH.T.UCHAR + .DA #0 +* int printf ( const char * format, ... ); + >PSTR "printf" + .DA #CSH.T.SINT returned value + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR + .DA #CSH.T.VARIADIC + .DA #0 +* int putenv(const char *string); + >PSTR "putenv" + .DA #CSH.T.SINT returned value + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR + .DA #0 +* int setenv(const char *name, const char *value); + >PSTR "setenv" + .DA #CSH.T.SINT returned value + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR + .DA #0 +* char *getenv(const char *name, char *value); + >PSTR "getenv" + .DA #CSH.Q.POINTER+CSH.T.UCHAR + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR + .DA #CSH.Q.POINTER+CSH.T.UCHAR + .DA #0 +* int unsetenv(const char *name); + >PSTR "unsetenv" + .DA #CSH.T.SINT returned value + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR + .DA #0 +* void md5 (const char* str, char* digest); + >PSTR "md5" + .DA #CSH.T.VOID + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR + .DA #CSH.Q.POINTER+CSH.T.UCHAR + .DA #0 +* void * malloc ( int size ); + >PSTR "malloc" + .DA #CSH.Q.POINTER+CSH.T.VOID returned value + .DA #CSH.T.SINT + .DA #0 +*-------------------------------------- + .DA #0 *-------------------------------------- .DUMMY .OR 0 -DS.START .INB usr/src/bin/csh.d +DS.START +PathBuf .BS 65 + +hFileBuf .BS 1 + +CSH.BufPtrSave .BS 2 + +CSH.CmdSave .BS 1 +CSH.LookupOpt .BS 1 + +CSH.hDefines .BS 1 +CSH.hSymbols .BS 1 +CSH.hTags .BS 1 + +CSH.hCode .BS 1 +CSH.CodePtr .BS 2 + +CSH.hConst .BS 1 +CSH.ConstPtr .BS 2 + +CSH.hData .BS 1 +CSH.DataPtr .BS 2 + +CSH.hStack .BS 1 +CSH.StackPtr .BS 1 + +CSH.SaveInclude .BS 2 +CSH.SaveDefine .BS 2 + +CSH.VarDef .BS 6 + bDebug .BS 1 bTrace .BS 1 -DS.END - .ED +DS.END .ED *-------------------------------------- MAN SAVE usr/src/bin/csh.s diff --git a/BIN/KILL.S.txt b/BIN/KILL.S.txt index 025aa468..e88d8e17 100644 --- a/BIN/KILL.S.txt +++ b/BIN/KILL.S.txt @@ -83,8 +83,8 @@ CS.RUN ldy #S.PS.ARGC >SYSCALL SScanF bcs .9 + >PUSHB.G PID >PUSHB.G Signal - >LDA.G PID >SYSCALL Kill bcs .99 lda #0 diff --git a/BIN/SHUTDOWN.S.txt b/BIN/SHUTDOWN.S.txt index 829e87e4..37e290c9 100644 --- a/BIN/SHUTDOWN.S.txt +++ b/BIN/SHUTDOWN.S.txt @@ -121,8 +121,8 @@ CS.RUN lda #DEFAULT.TIMEOUT jsr CS.RUN.DEV jsr CS.RUN.SYS - >PUSHBI 1 -* lda #1 INITD + >PUSHBI 1 INITD + >PUSHA SIGNAL >SYSCALL Kill lda #0 @@ -242,10 +242,10 @@ CS.RUN.KILL >PUSHW L.MSG.PS >PUSHBI 3 >SYSCALL PrintF - >PUSHBI 1 - ldy #S.PS.PID lda (ZPPtr1),y + >PUSHA + >PUSHBI 1 SIG >SYSCALL Kill rts *-------------------------------------- diff --git a/INC/IO.D2.I.txt b/INC/IO.D2.I.txt index 6d1ad186..6293596e 100644 --- a/INC/IO.D2.I.txt +++ b/INC/IO.D2.I.txt @@ -4,7 +4,7 @@ NEW IO.D2.SeekTimeR .EQ 48 LIBBLKDEV Recalibration IO.D2.SeekTimeF .EQ 68 LIBBLKDEV Track Formatter IO.D2.SeekTimeB .EQ 68 LIBBLKDEV Boot Block -IO.D2.SeekTimeP .EQ 48 ProDOS.FX initial +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/ProDOS.FX/ProDOS.S.XDOS.F.txt b/ProDOS.FX/ProDOS.S.XDOS.F.txt index afddd865..e9be1ecd 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.F.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.F.txt @@ -760,11 +760,12 @@ XRW.DEBUG sta CLRPAGE2 ldx #$24 lda XRW.ReqTrack - jsr .6 + jsr XRW.DEBUG.PBYTEx lda XRW.ReqSector -.6 pha +XRW.DEBUG.PBYTEx + pha lsr lsr lsr @@ -783,6 +784,12 @@ XRW.DEBUG sta CLRPAGE2 .8 sta $700,x inx rts + +XRW.DEBUG2 ldx #$1E + lda XRW.AddrField.V + jsr XRW.DEBUG.PBYTEx + lda XRW.AddrField.T + bra XRW.DEBUG.PBYTEx .FIN *-------------------------------------- * data tables diff --git a/ProDOS.FX/ProDOS.S.XRW.txt b/ProDOS.FX/ProDOS.S.XRW.txt index 8fc3941b..47093103 100644 --- a/ProDOS.FX/ProDOS.S.XRW.txt +++ b/ProDOS.FX/ProDOS.S.XRW.txt @@ -399,7 +399,7 @@ XRW.Write bit IO.D2.ReadProt,x (4) PREWRITE MODE bit IO.D2.ReadMode,x (4) lda #$FF (2) - nop (2) +* nop (2) sta IO.D2.WriteMode,x (5) goto write mode ora IO.D2.WShift,x (4) @@ -693,7 +693,11 @@ XRW.TrackSelect lda #2 rts -.4 ldx XRW.UnitIndex +.4 .DO XRWDBG=1 + jsr XRW.DEBUG2 + .FIN + + ldx XRW.UnitIndex lda XRW.AddrField.V cmp #194 bcc .5 diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index 8f554ddb..7279735e 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -55,7 +55,6 @@ CORE.Run ldx #1 .5 cmp #S.PS.S.QUIT bne .7 - >PUSHBI 2 ldy #S.PS.PID lda (pPS),y cmp #1 INITD ? @@ -63,7 +62,9 @@ CORE.Run ldx #1 jmp CORE.Quit -.6 >SYSCALL2 Kill +.6 >PUSHA PID + >PUSHBI 2 SIG + >SYSCALL2 Kill bra .8 .7 jsr CORE.PSLeave Save ZP & Ptrs diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 966ba4db..ca968658 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -864,7 +864,7 @@ IrqMgrInit >LDYAI MSG.IRQ jsr IrqMgrInit.SetV >LDYAI CORE.IRQ.IIGS.Off - >STYA CORE.Quit+1 + >STYA CORE.Quit+3 >LDYAI MSG.IRQ.IIGS bra .8 @@ -886,7 +886,7 @@ IrqMgrInit >LDYAI MSG.IRQ jsr IrqMgrInit.SetV >LDYAI CORE.IRQ.TCLOCK.Off - >STYA CORE.Quit+1 + >STYA CORE.Quit+3 >LDYAI MSG.IRQ.CLOCK bra .8 @@ -912,7 +912,7 @@ IrqMgrInit >LDYAI MSG.IRQ jsr IrqMgrInit.SetV >LDYAI CORE.IRQ.MOUSE.Off - >STYA CORE.Quit+1 + >STYA CORE.Quit+3 >LDYAI MSG.IRQ.MOUSE bra .8 diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 930d1934..62834d32 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -58,8 +58,8 @@ PS.Exec jsr PS.CreateChild A=PID,Child S.PS at PS.NewPSPtr,PS.Load.hMem bcc .8 or K.IOBuf= 0, K.Buf256=/.../BINFILE .90 pha save error code - >PUSHBI 2 - lda .8+1 + >PUSHB .8+1 PID + >PUSHBI 2 SIG jsr K.Kill pla get back error code sec @@ -304,8 +304,8 @@ PS.CreateChild ldx #0 rts .9 pha - >PUSHBI 2 - lda CORE.LastPSID + >PUSHB CORE.LastPSID + >PUSHBI 2 SIG jsr K.Kill pla sec @@ -652,23 +652,25 @@ PS.AddYAp12ArgSize * ## C * `int kill(short int pid, short int sig);` * ## ASM +* `>PUSHB pid` * `>PUSHB sig` -* `lda pid` * `>SYSCALL kill` * ## RETURN VALUE -* A = Child PSID *\-------------------------------------- K.Kill.PID .BS 1 *-------------------------------------- -K.Kill cmp #0 - beq .99 CS +K.Kill >PULLB .10+1 SIG + >PULLA PID + cmp #0 + beq .9 CS sta K.Kill.PID jsr CORE.GetPSByID bcs .99 >STYA ZPPtr1 - >PULLA + +.10 lda #$ff SELF MODIFIED cmp #2+1 bcs .9 @@ -682,8 +684,7 @@ K.Kill cmp #0 .9 lda #E.SYN * sec - rts -.99 >RET 1 +.99 rts *-------------------------------------- K.Kill.1 lda (ZPPtr1) and #S.PS.F.SLEEP^$FF @@ -888,21 +889,22 @@ K.FileSearch >PULLW .4+1 DstStat stz PS.Find.98+1 jsr PS.Find - bcs K.FileSearch.RTS + bcs .9 ldx #$ff .1 inx lda K.Buf256,x .2 sta $ffff,x Self Modified bne .1 + ldx #S.STAT-1 .3 lda K.S.STAT,x .4 sta $ffff,x Self Modified dex bpl .3 + * clc -K.FileSearch.RTS - rts +.9 rts *-------------------------------------- PS.Find.CWD >STYA PS.Find.4+1 filename to find ldy #S.PS.hCWD @@ -925,7 +927,7 @@ PS.Find.PATH ldx #4 >PUSHW PS.VARS,x >PUSHWI 0 allocate... >SYSCALL2 GetEnv get value for Search Path - bcs K.FileSearch.RTS + bcs PS.Find.RTS >STYA PS.Find.2+1 stx PS.Find.98+1 @@ -974,7 +976,7 @@ PS.Find.5 >LDYAI K.Buf256 jsr PS.Find.98 Discard Expanded hSrch list clc - rts +PS.Find.RTS rts PS.Find.98 lda #$ff SELF MODIFIED : Discard Search list beq .1