diff --git a/.Docs/Acosx Words.md b/.Docs/Acosx Words.md
index 71207049..70a6ae7c 100644
--- a/.Docs/Acosx Words.md
+++ b/.Docs/Acosx Words.md
@@ -26,8 +26,8 @@ This document lists all of the **ACOS Words** supported in the A2osX implementat
| FOR | FOR *numvar*=*startvalue* TO *targetvalue* [STEP *number*]
...
NEXT | Not Yet Implemented | Program loop iteration declaration. | Creates a loop in program execution that sets a variable *numvar* to initially *startvalue* and increments its value with each iteration and will repeat until that variable reaches *targetvalue*. The STEP keyword is optional, but allows you to specify *number* which overrides the typical +1 increment of the loop, i.e. you can count by 2 by specifying STEP 2
or you can *decrement* by specifying a negative step number. In general, operates much the same way as AppleSoft FOR-NEXT loops, However, you can only have ONE for loop active at a time, i.e. the NEXT command does not allow for a variable, it only operates on the currently active FOR loop. | |
| FREE | FREE | Not Yet Implemented | Return amount of free memory. | Has the same function as the AppleSoft FRE(0) command, in that it returns the amount of free memory. REMY TODO: Does this garbage collect? | |
| GET | GET *varstr* | Not Yet Implemented | Get a single character from user. | The GET statement is used to get a single keypress from the user. This is a blocking call in that the system will wait until a key is pressed. The key will be returned in *varstr*. Control characters will not be filtered out as they are with INPUT. | |
-| GOSUB | GOSUB *label* | In Development | Call subroutine at specified label. | Calls subroutine *label* in the program and sets the point in code so that when a RETURN function is encountered, execution will resume after the GOSUB
statement. While behaves the same way as AppleSoft basic, it is worth pointing out that ACOS uses labels as targets instead of line numbers. | |
-| GOTO | GOTO *label* | Working | Redirect program execution to specified label. | Redirects program execution to continue from *label*. Unlike GOSUB, no record of where the GOTO call occurred. As with GOSUB, it is worth pointing out that ACOS uses labels as targets intead of line number. | |
+| GOSUB | GOSUB *label* | Impl. | Call subroutine at specified label. | Calls subroutine *label* in the program and sets the point in code so that when a RETURN function is encountered, execution will resume after the GOSUB
statement. While behaves the same way as AppleSoft basic, it is worth pointing out that ACOS uses labels as targets instead of line numbers. | |
+| GOTO | GOTO *label* | Impl. | Redirect program execution to specified label. | Redirects program execution to continue from *label*. Unlike GOSUB, no record of where the GOTO call occurred. As with GOSUB, it is worth pointing out that ACOS uses labels as targets intead of line number. | |
| HOME | HOME | Not Yet Implemented | Clear screen. | Clears the screen and positions the cursor at the top left. REMY TODO: Does this clear the remote session as well? | |
| IF | IF *condition* [THEN] *statement1* [ELSE] *statement2* | In Development | Logical condition test and execution. | Evaluate *condition* and if true (or greater than zero), execute *statement1*. If optional ELSE keyword is specified, then a false condition will execute *statement2*. If ELSE is used, it must appear on the same line as the IF statement, i.e. there is no multi-line if/then/else construct like some other languages. Logical constructs for *condition* supports parenthesis, AND, and OR.
THEN is optional (as it is in AppleSoft BASIC) but if you use THEN, it cannot be followed by a label directly.(use IF arg THEN GOTO label). | |
| INFO | *expression*=INFO(*optional*)
INFO(*optional*)=*expression* | Not Yet Implemented | Byte-level data manipulation function, specific to ACOS internals. | INFO can be used as either a statement or as a function. It is really a 'catch-all' of ACOS state value functions in nature in that many values that are more or less unrelated are accessible through it. The following table gives the meanings of all the INFO data.
argument r/w function| | @@ -35,8 +35,8 @@ This document lists all of the **ACOS Words** supported in the A2osX implementat | INSTR | *expression*=INSTR(*match*, *source*) | Not Yet Implemented | Find a string within another and return offset if found. | The INSTR function is used to search within a *source* string for the existence of the specified *match* string. The search is case insensitive. The function will return the numerical position of the first character in the *source* string where the *match* was found. Note that the first character in *source* string starts at 1, not 0 like many other languages. So in other words, if the function returns zero, no match was found. | | | KEY | *expression*=KEY(0)
-------- ---- -----------------
INFO(0) r is there a caller online? (0=no)
INFO(1) r capacity of current message file.
INFO(2) r callers baud rate /300 (1=300)
INFO(3) r/w current number of nulls.
INFO(4) w top screen stats. (1=chat, 2=exec)
INFO(5) r/w executive user online? (1=yes)
INFO(6) r checks bit map for mail/msg bases for room.
LINK "A:MSG.SEG","BULLETINS"
). The label must be enclosed in quotes or must be in a string variable. Note that for the label to be usable by the LINK command, the label must be declared as PUBLIC in the target file. | |
| LOG | LOG *drivespec* | Not Yet Implemented | Change current filesystem drive. | The LOG statement simply changes the default disk drive to the *drivespec* drive. If the drive is not legal, a BAD DRIVE SPECIFIER error will occur. | |
| MARK | *expression*=MARK(*device*)MARK(1)=0
assuming it was file device #1. MARK has a second function in that it can be used to see if a file exists. Normally ACOS will not generate an error if a file exists, so it can be hard to tell if there is one. To see if a file exists: OPEN #1,filename
| |
@@ -54,7 +54,7 @@ This document lists all of the **ACOS Words** supported in the A2osX implementat
| POKE | POKE *address*, *value* | Not Yet Implemented | Set the value for a specified memory location. | Sets the value of the memory location specified at *address* with *value*. REMY TODO: Does this work in A2osX? Perhaps limit it to $C000-CFFF? | |
| POP | POP | Not Yet Implemented | Remove the most recent address from the return stack. | Removes the last execution address from the stack, i.e. if a PUSH or GOSUB was called which put an execution address on the stack, the POP command can be used to remove it (and render that PUSH or GOSUB 'forgotten'). Works the same as the AppleSoft POP statement with the exception of it also can be used with the ACOS PUSH command. | |
| POSITION | POSITION #*device,* *record_length,* *record_number* [,*offset*] | Not Yet Implemented | Set the file position offset for a device. | The POSITION statement is used to position within a random access file. The *device* argument is the disk device channel number that was used to open the file. The *record_length* argument is the length of each record. The *record_number* argument is the record number to be positioned to. The optional *offset* argument is the offset within the record that is to be positioned to. Note that there is no check to see if files actually conform to *record_length*; it along with the other *record_number* and *offset* arguments simply form a means of providing a calculation for a byte offset in the file as a while. For example,
IF MARK(1) PRINT "FILE EXISTS"
CLOSE #1POSITION #1, 1000, 3, 50
would result in seeking file device #1 to the 3050'th byte in the file. | |
-| PRINT | PRINT [#*device*,] [*expression*] [,*expression*] [;] | In Development | Output data to a device, session, or screen. | Sends/displays text or data to the screen, remote user, or specified device handler. There are a few rules for PRINT:
print:print...
statements.print:print...
statements.READY MSG(x):COPY #7
statements. Using REWIND will put the internal pointer back to where it was before the last message operation took place. This is generally used for doing a 're-read' function of sorts. | |
| RIGHT$ | *string*=RIGHT$(*source*, *length*) | Not Yet Implemented | Return a number of characters from the end of a string. | Returns the last *length* number of characters from the *source*. | |
| RND$ | *char*=RND$ | Not Yet Implemented | Returns a random character. | The RND$ function is used to generate random characters. Each time RND$ is accessed a new random character will be returned. Be warned: the random number is generated from timing how long a user takes to enter his input. This is really a pretty random number since it is based on the users typing skill and speed. The only problem is that the random character generator can start repeating patterns after about 15-20 characters have been generated and before another input has taken place. REMY TODO: Is this how your implementation works or are you using an A2osX random generator? | |
diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md
index 6fc7cd45..31af695c 100644
--- a/.Docs/KERNEL.md
+++ b/.Docs/KERNEL.md
@@ -716,7 +716,7 @@ CS : not found
# SListFree
## ASM
-`>PUSHB hSList`
+`lda hSList`
`>SYSCALL SListFree`
## RETURN VALUE
diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po
index 2d7bd969..1120fdce 100644
Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ
diff --git a/BIN/ACOS.S.CODE.txt b/BIN/ACOS.S.CODE.txt
index 182bd67a..5e511558 100644
--- a/BIN/ACOS.S.CODE.txt
+++ b/BIN/ACOS.S.CODE.txt
@@ -149,20 +149,6 @@ CODE.PUSHA ldx #0
rts
*--------------------------------------
-CODE.PULLYA jsr CODE.PULLA
- lda #$A8 tay
- jsr CODE.EmitByte
-*--------------------------------------
-CODE.PULLA ldx #0
-
-.1 lda CCODE.PULLA,x
- jsr CODE.EmitByte
- inx
- cpx #CCODE.PULLA.LEN
- bne .1
-
- rts
-*--------------------------------------
CODE.FPRINTSTR ldx #0
.1 lda CCODE.FPRINTSTR,x
diff --git a/BIN/ACOS.S.CORE.txt b/BIN/ACOS.S.CORE.txt
index 018860ed..eb44b3eb 100644
--- a/BIN/ACOS.S.CORE.txt
+++ b/BIN/ACOS.S.CORE.txt
@@ -2,7 +2,10 @@ NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
-CORE.Init >LDYAI CODESEG
+CORE.Init ldy #CCS.MAX
+ sty pCCS
+
+ >LDYAI CODESEG
>SYSCALL GetMem
bcs .9
@@ -86,7 +89,6 @@ CORE.Cleanup ldy #hFWRefBuf
>LDA.G hVars
beq .1
- >PUSHA
>SYSCALL SListFree
>STZ.G hVars
@@ -94,7 +96,6 @@ CORE.Cleanup ldy #hFWRefBuf
.1 >LDA.G hLabels
beq .8
- >PUSHA
>SYSCALL SListFree
>STZ.G hLabels
@@ -122,13 +123,15 @@ CORE.Compile jsr CORE.GetChar
beq .80 #/bin/acos....
cmp #';'
- beq .80 Comment: skip line...
+ bne .1
- cmp #C.CR
+.80 jmp CORE.SkipLine Comment: skip line...
+
+.1 cmp #C.CR
beq .88 EOL
jsr CORE.CheckCharNB
- bcs .1 CS=SPACE -> go check VAR or KW
+ bcs .2 CS=SPACE -> go check VAR or KW
jsr CORE.IsLetter LABEL must start with a letter
bcs .99
@@ -138,20 +141,23 @@ CORE.Compile jsr CORE.GetChar
bra .8
*--------------------------------------
-.1 jsr CORE.GetNextCharNB skip SPACE(s) or ":"
+.2 jsr CORE.GetNextCharNB skip SPACE(s) or ":"
bcs .99
- cmp #C.CR
+.21 cmp #C.CR
beq .88 EOL
jsr CORE.IsLetter
bcs .90
>LDYA L.ACOS.KW
- jsr CORE.Lookup
+ jsr CORE.LookupSkip
bcs .3
- jmp (J.ACOS.KW,x)
+ jsr CORE.KW.JMP
+ bcs .99
+
+ bra .8
*--------------------------------------
.3 jsr CORE.CreateOrGetVar
bcs .90
@@ -181,20 +187,23 @@ CORE.Compile jsr CORE.GetChar
.4 jsr CODE.INTSET Store Int16 result in DATASEG
*--------------------------------------
.8 jsr CORE.GetCharNB
- bcs .99
+ bcs .88
cmp #':'
- beq .1
+ beq .2 go skip : and continue
- cmp #C.CR
- bne .90
+ bra .21
-.88 clc
+.88 ldy pCCS
+ bmi .89
+
+ jsr KW.ENDIF
+ bcs .99
+
+.89 clc
jmp CORE.GetNextChar skip char
-.80 jmp CORE.SkipLine
-
.90 lda #E.CSYN
sec
.99 rts
@@ -203,6 +212,8 @@ CORE.Compile jsr CORE.GetChar
sec
rts
*--------------------------------------
+CORE.KW.JMP jmp (J.ACOS.KW,x)
+*--------------------------------------
CORE.FWREF >LDA.G hFWRefBuf
>SYSCALL GetMemPtr
>STYA ZPInputBufPtr
@@ -337,7 +348,12 @@ CORE.LookupOPS lda (ZPInputBufPtr)
.19 sec
.99 rts
*--------------------------------------
-CORE.Lookup >STYA ZPPtr1
+CORE.LookupSkip sec
+ .HS 90 BCC
+CORE.Lookup clc
+ php
+
+ >STYA ZPPtr1
ldx #0
@@ -356,7 +372,10 @@ CORE.Lookup >STYA ZPPtr1
jsr .10 next char in text...
bcc .4 valid....failed
-.3 tya Keyword Len
+.3 plp
+ bcc .8
+
+ tya Keyword Len
jmp CORE.SkipA
@@ -377,8 +396,10 @@ CORE.Lookup >STYA ZPPtr1
lda (ZPPtr1) Array Ending 0, lookup failed
bne .1
+ plp
+
.9 sec
- rts
+.8 rts
*--------------------------------------
.10 iny
lda (ZPInputBufPtr),y Get Src text char...
@@ -603,7 +624,15 @@ CORE.IsOPSChar phx
clc
rts
*--------------------------------------
-CORE.IsEndExp cmp #')'
+CORE.IsKW jsr CORE.IsLetter
+ bcs .9
+
+ >LDYA L.ACOS.KW
+ jmp CORE.Lookup
+
+.9 rts
+*--------------------------------------
+CORE.IsEndExp cmp #')' CS = true
beq CORE.ToUpperCase.RTS
cmp #','
@@ -612,9 +641,9 @@ CORE.IsEndExp cmp #')'
cmp #';'
beq CORE.ToUpperCase.RTS
-CORE.IsEndInst cmp #':' CS=TRUE
+CORE.IsEndInst cmp #':' CS = true
beq .8
-
+
cmp #C.CR
beq .8
@@ -630,7 +659,7 @@ CORE.IsLetterOrDigit
jsr CORE.IsDigit10
bcc CORE.IsLetterRTS
*---------------------------------------
-CORE.IsLetter cmp #'_'
+CORE.IsLetter cmp #'_' CC = true
bne .1
clc
diff --git a/BIN/ACOS.S.EXP.txt b/BIN/ACOS.S.EXP.txt
index da09795a..8d17ac1f 100644
--- a/BIN/ACOS.S.EXP.txt
+++ b/BIN/ACOS.S.EXP.txt
@@ -3,7 +3,7 @@ NEW
.LIST OFF
*--------------------------------------
* In: A = current CHAR
-* Out: CC, longint on stack or pSTR in stack
+* Out: CC, int16 on stack or pSTR in stack
*--------------------------------------
EXP.Eval stz EXP.TYPE
@@ -39,16 +39,19 @@ EXP.Eval.R lda EXP.AOPS
bne .20
jsr EXP.CreateStrConst
- bcs .99
+ bcs .37
bra .40
*--------------------------------------
.20 jsr CORE.IsLetter
- bcs .30 FN or VAR
+ bcs .30 No, go check for number...
+
+ >LDYA L.ACOS.KW Yes, KW, FN or VAR ?
+ jsr CORE.Lookup
+ bcc .80 KW, end of exp
>LDYA L.ACOS.FN
- jsr CORE.Lookup
-
+ jsr CORE.LookupSkip
bcs .21
jsr EXP.FNjmpX
@@ -74,35 +77,38 @@ EXP.Eval.R lda EXP.AOPS
.39 bcs .90
jsr EXP.Int16
- bcs .99
+.37 bcs .99
*--------------------------------------
.40 jsr CORE.GetCharNB
.41 bcs .80
.50 jsr CORE.IsEndExp
bcs .80
-
+
+ jsr CORE.IsKW
+ bcc .80
+
jsr CORE.LookupOPS
bcs .90
stx EXP.AOPS
-.61 lda (pStack) get op context
- bmi .62 no prev op, go get arg2
+ lda (pStack) get op context
+ bmi .60 no prev op, go get arg2
cmp EXP.AOPS we have arg1 A=op1 arg2 X=op2
- bcc .62
+ bcc .60
inc pStack prev op has precedence
tay
- ldx ACOS.OPS.MAP-1,y
+ ldx ACOS.OPS2FPU,y
jsr CODE.FPUCALL go compute (arg1 op1 arg2)
-.62 lda EXP.AOPS we must compute arg2 op2 arg3 before
+.60 lda EXP.AOPS we must compute arg2 op2 arg3 before
>PUSHA
-.63 jsr CORE.GetNextCharNB
+ jsr CORE.GetCharNB
bcs .90
jmp .11
*--------------------------------------
@@ -110,7 +116,7 @@ EXP.Eval.R lda EXP.AOPS
tay
bmi .88 nothing to do
- ldx ACOS.OPS.MAP-1,y
+ ldx ACOS.OPS2FPU,y
jsr CODE.FPUCALL
bra .80
diff --git a/BIN/ACOS.S.KW.txt b/BIN/ACOS.S.KW.txt
index 5963ce85..33035307 100644
--- a/BIN/ACOS.S.KW.txt
+++ b/BIN/ACOS.S.KW.txt
@@ -12,6 +12,10 @@ KW.COPY
KW.CREATE
KW.ECHO
KW.EDIT
+ lda #E.CSYN
+ sec
+ rts
+*--------------------------------------
*KW.END
KW.FILL
KW.FLAG
@@ -54,10 +58,125 @@ KW.HOME
*--------------------------------------
* IP exp THEN st1 ELSE st2
*--------------------------------------
-KW.IF
+KW.IF jsr EXP.Eval
+ bcs .99
+
+ lda EXP.TYPE
+ bne .91
- lda #E.CSYN
+ ldx #0
+
+.1 lda CCODE.TESTTRUE,x
+ jsr CODE.EmitByte
+ inx
+ cpx #CCODE.TESTTRUE.LEN
+ bne .1
+
+ lda #$4C JMP abs
+ jsr CODE.EmitByte
+
+ ldy pCCS
+
+ dey
+ lda ZPCodeBufPtr+1
+ sta (pData),y
+
+ dey
+ lda ZPCodeBufPtr
+ sta (pData),y
+
+ dey
+ lda #KWID.IF
+ sta (pData),y
+
+ sty pCCS
+
+ lda ZPCodeBufPtr
+ clc
+ adc #2
+ sta ZPCodeBufPtr
+ bcc .8
+
+ inc ZPCodeBufPtr+1
+
+.8 clc
+ rts
+
+.90 lda #E.CSYN
+ sec
+ rts
+
+.91 lda #E.TMISMATCH
+ sec
+.99 rts
+*--------------------------------------
+KW.ENDIF sec
+ .HS 90 BCC
+*--------------------------------------
+KW.ELSE clc
+
+ ldy pCCS
+ lda (pData),y
+ eor #KWID.IF
+ bne .9
+
+ iny
+ lda (pData),y
+ sta ZPPtr1
+
+ iny
+ lda (pData),y
+ sta ZPPtr1+1 ZPPtr1 = JMP if FALSE
+
+ bcs .5 ENDIF
+
+ lda #$4C JMP abs
+ jsr CODE.EmitByte
+
+ ldy pCCS
+ iny
+
+ lda ZPCodeBufPtr
+ sta (pData),y
+ iny
+ lda ZPCodeBufPtr+1
+ sta (pData),y
+
+ lda ZPCodeBufPtr
+ clc
+ adc #2
+ sta ZPCodeBufPtr
+ bcc .1
+
+ inc ZPCodeBufPtr+1
+
+.1 lda ZPCodeBufPtr
+ sta (ZPPtr1)
+
+ lda ZPCodeBufPtr+1
+ ldy #1
+ sta (ZPPtr1),y
+
+ clc
+ rts
+
+.5 lda ZPCodeBufPtr
+ sta (ZPPtr1)
+
+ ldy #1
+ lda ZPCodeBufPtr+1
+ sta (ZPPtr1),y
+
+ lda pCCS
+ clc
+ adc #3
+ sta pCCS
+
+ clc
+ rts
+
+.9 lda #E.NOIF
sec
rts
*--------------------------------------
@@ -85,33 +204,34 @@ KW.POSITION
*--------------------------------------
KW.PRINT stz hOut reset to hStdOut
-
+ stz ZPPtr2 put ending CR
+
* ldy #S.PS.hStdOut
* lda (pPS),y
* sta hOut Default to screen
-
.10 jsr CORE.GetNextCharNB
bcs .8
.11 jsr CORE.IsEndInst
bcs .8
+
+ jsr CORE.IsKW
+ bcc .8
- stz bFlag put ending CR
-*--------------------------------------
-.5 jsr EXP.Eval
+ stz ZPPtr2 put ending CR
+
+ jsr EXP.Eval
bcs .99
lda EXP.TYPE
beq .6
- jsr CODE.PULLYA
jsr CODE.FPRINTSTR
bra .7
-.6 jsr CODE.PULLYA
- jsr CODE.FPRINTINT
+.6 jsr CODE.FPRINTINT
*--------------------------------------
.7 jsr CORE.GetCharNB
bcs .8
@@ -119,6 +239,10 @@ KW.PRINT stz hOut reset to hStdOut
.70 jsr CORE.IsEndInst
bcs .8
+ jsr CORE.IsKW
+ bcc .8
+
+ lda (ZPInputBufPtr)
cmp #','
bne .71
@@ -129,13 +253,13 @@ KW.PRINT stz hOut reset to hStdOut
.71 cmp #';'
bne .90
-
- dec bFlag suppress ending CR
+
+ ror ZPPtr2 suppress ending CR
jsr CORE.GetNextCharNB skip ;
bcc .11
-.8 bit bFlag
+.8 bit ZPPtr2
bmi .80
jsr CODE.FPRINTCRLF
diff --git a/BIN/ACOS.S.txt b/BIN/ACOS.S.txt
index f65b9c75..1808718d 100644
--- a/BIN/ACOS.S.txt
+++ b/BIN/ACOS.S.txt
@@ -11,6 +11,7 @@ DATASEG .EQ 256
STRVSEG .EQ 2048
FWREF .EQ 1024
EXP.DEPTH.MAX .EQ 16
+CCS.MAX .EQ 128
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
@@ -33,7 +34,8 @@ ZPStrBuf .BS 2
ZPPtr1 .BS 2
ZPPtr2 .BS 2
-ArgIndex .BS 1
+ArgIndex .EQ *
+pCCS .BS 1
bFlag .BS 1
ZPCodeBufPtr .BS 2
@@ -96,6 +98,7 @@ J.ACOS.KW .DA KW.ADDINT
.DA KW.CREATE
.DA KW.ECHO
.DA KW.EDIT
+ .DA KW.ELSE
.DA KW.END
.DA KW.FILL
.DA KW.FLAG
@@ -105,6 +108,7 @@ J.ACOS.KW .DA KW.ADDINT
.DA KW.GOSUB
.DA KW.GOTO
.DA KW.HOME
+KWID.IF .EQ *-J.ACOS.KW
.DA KW.IF
.DA KW.INFO
.DA KW.INPUT
@@ -336,10 +340,12 @@ PrintDebugMsg >LDYA pStack
>STYA ZPPtr2
>PUSHW L.MSG.DEBUG
- >PUSHW ZPPtr2
>PUSHW ZPCodeBufPtr
+ >PUSHW ZPConstBufPtr
+ >PUSHW ZPDataBufPtr
+ >PUSHW ZPPtr2
- >PUSHBI 4
+ >PUSHBI 8
>SYSCALL PrintF
rts
*--------------------------------------
@@ -365,7 +371,7 @@ PrintErrorMsg >LDA.G bTrace
sec
>SBC.G InputBufPtr
tax
- bcc *
+
>LDYA.G InputBufPtr
>STYA ZPInputBufPtr
@@ -429,24 +435,37 @@ CCODE.PUSHA.LEN .EQ *-CCODE.PUSHA
CCODE.PULLA >PULLA
CCODE.PULLA.LEN .EQ *-CCODE.PULLA
*--------------------------------------
-CCODE.FPRINTSTR pha
- >PUSHW L.MSG.STR
- pla
+CCODE.TESTTRUE lda (pStack)
+ inc pStack
+ ora (pStack)
+ php
+ inc pStack
+ plp
+.1 bne .1+5
+CCODE.TESTTRUE.LEN .EQ *-CCODE.TESTTRUE
+*--------------------------------------
+CCODE.FPRINTSTR >PUSHW L.MSG.STR
+ ldy #3
+ lda (pStack),y
>PUSHA
- tya
+ lda (pStack),y
>PUSHA
>PUSHBI 2
>SYSCALL PrintF
+ inc pStack
+ inc pStack
CCODE.FPRINTSTR.LEN .EQ *-CCODE.FPRINTSTR
*--------------------------------------
-CCODE.FPRINTINT pha
- >PUSHW L.MSG.INT16
- pla
+CCODE.FPRINTINT >PUSHW L.MSG.INT16
+ ldy #3
+ lda (pStack),y
>PUSHA
- tya
+ lda (pStack),y
>PUSHA
>PUSHBI 2
>SYSCALL PrintF
+ inc pStack
+ inc pStack
CCODE.FPRINTINT.LEN .EQ *-CCODE.FPRINTINT
*--------------------------------------
CCODE.LEN >PULLW ZPPtr1
@@ -498,7 +517,7 @@ MSG.USAGE .AS "Usage : ACOS