Commit | Line | Data |
---|---|---|
8bed3ccd AT |
1 | #ifndef VVS_STDLIB_STDIO |
2 | #define VVS_STDLIB_STDIO | |
3 | ||
4 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | |
bb21580a AT |
5 | @ Name: |
6 | @ printstackstring (1000) | |
8bed3ccd | 7 | @ Description: |
bb21580a | 8 | @ Prints a null-terminated string from the stack. |
8bed3ccd AT |
9 | @ Call Stack: |
10 | @ null-terminator (ASCII '\0') | |
11 | @ char n | |
12 | @ ... | |
13 | @ char 2 | |
14 | @ char 1 <-- TOS | |
15 | @ Return Stack: | |
16 | @ <empty> | |
17 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | |
32c440bf AT |
18 | NSSVTSSSN | Mark: 1000 (print string from stack) |
19 | SNS | DUP | |
20 | NTSSSSSTSSSSSSSSSSTN | BRZ > 00001000 00000001 | |
21 | TNSS | Print character | |
22 | NSNTSSSN | JMP > 1000 | |
23 | NSSVSSSSTSSSSSSSSSSTN | Mark: 00001000 00000001 | |
24 | SNN | DROP | |
25 | NTN | RTS | |
26 | ||
8bed3ccd | 27 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
bb21580a AT |
28 | @ Name: |
29 | @ printheapstring (1001) | |
8bed3ccd | 30 | @ Description: |
bb21580a | 31 | @ Prints a null-terminated string from the heap. |
8bed3ccd AT |
32 | @ Call Stack: |
33 | @ pointer to first character <-- TOS | |
34 | @ Return Stack: | |
35 | @ <empty> | |
36 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | |
32c440bf AT |
37 | NSSVTSSTN | Mark: 1001 (print string from heap) |
38 | SNS | DUP | |
39 | TTT | LOAD | |
40 | SNS | DUP | |
41 | NTSSSSSTSSTSSSSSSSTN | BRZ > 00001001 00000001 | |
42 | TNSS | Print character | |
43 | SSSTN | Push +1 | |
44 | TSSS | ADD | |
45 | NSNTSSTN | JMP > 1001 | |
46 | NSSVSSSSTSSTSSSSSSSTN | Mark: 00001001 00000001 | |
47 | SNN | DROP | |
48 | SNN | DROP | |
49 | NTN | RTS | |
8bed3ccd | 50 | |
3625ff3a | 51 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
bb21580a AT |
52 | @ Name: |
53 | @ printstacknumber (1010) | |
3625ff3a | 54 | @ Description: |
bb21580a | 55 | @ Prints 'number' from the stack in sign-magnitude format. |
3625ff3a AT |
56 | @ Leading zeros are suppressed. |
57 | @ Call Stack: | |
bb21580a | 58 | @ number <-- TOS |
3625ff3a AT |
59 | @ Return Stack: |
60 | @ <empty> | |
61 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | |
62 | NSSVTSTSN | Mark: 1010 (print number from stack) | |
63 | SNS | DUP | |
ae1f85a1 AT |
64 | NSTTSSSSTSN | JSR > 1000010 |
65 | NSTTSSSSTTN | JSR > 1000011 | |
3625ff3a AT |
66 | NTN | RTS |
67 | ||
68 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | |
bb21580a | 69 | @ Name: |
ae1f85a1 | 70 | @ printstacknumbersign (1000010) |
3625ff3a | 71 | @ Description: |
bb21580a | 72 | @ Prints the sign of 'number' from the stack. |
3625ff3a | 73 | @ Call Stack: |
bb21580a | 74 | @ number <-- TOS |
3625ff3a AT |
75 | @ Return Stack: |
76 | @ <empty> | |
77 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | |
ae1f85a1 AT |
78 | NSSVTSSSSTSN | Mark: 1000010 (print sign of number from stack) |
79 | NTTSTSSSSTSSSSSSSSTN | BMI > 01000010 00000001 | |
3625ff3a | 80 | SSSTSTSTTN | PUSH ASCII '+' |
ae1f85a1 AT |
81 | NSNSTSSSSTSSSSSSSTSN | JMP > 01000010 00000010 |
82 | NSSVSTSSSSTSSSSSSSSTN | Mark: 01000010 00000001 | |
3625ff3a | 83 | SSSTSTTSTN | PUSH ASCII '-' |
ae1f85a1 | 84 | NSSVSTSSSSTSSSSSSSTSN | Mark: 01000010 00000010 |
3625ff3a AT |
85 | TNSS | PUTC |
86 | NTN | RTS | |
87 | ||
88 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | |
bb21580a | 89 | @ Name: |
ae1f85a1 | 90 | @ printstacknumbermagnitude (1000011) |
3625ff3a | 91 | @ Description: |
bb21580a | 92 | @ Prints the magnitude of 'number' from the stack. |
3625ff3a | 93 | @ Call Stack: |
bb21580a | 94 | @ number <-- TOS |
3625ff3a AT |
95 | @ Return Stack: |
96 | @ <empty> | |
97 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | |
bb21580a | 98 | #include <math.pvvs> |
ae1f85a1 | 99 | NSSVTSSSSTTN | Mark: 1000011 (print magnitude of number from stack) |
3625ff3a AT |
100 | NSTTSSSTN | JSR > 10001 (absolute value) |
101 | ||
102 | SSSSN | PUSH ASCII '\0' | |
103 | SNT | SWAP | |
104 | ||
105 | @ Pick off one digit on each pass through this loop. | |
ae1f85a1 | 106 | NSSVSTSSSSTTSSSSSSSSN | Mark: 01000011 00000000 |
3625ff3a AT |
107 | SNS | DUP |
108 | ||
109 | @ Mod-off a digit, convert to ASCII, store on stack as part of the string. | |
110 | SSSTSTSN | PUSH +10 | |
111 | TSTT | MODULO | |
112 | SSSTTSSSSN | PUSH ASCII '0' | |
113 | TSSS | ADD | |
114 | SNT | SWAP | |
115 | ||
116 | @ Divide down to next digit and keep looping if number != 0 yet. | |
117 | SSSTSTSN | PUSH +10 | |
118 | TSTS | DIVIDE | |
119 | SNS | DUP | |
ae1f85a1 AT |
120 | NTSSTSSSSTTSSSSSSSTN | BRZ > 01000011 00000001 |
121 | NSNSTSSSSTTSSSSSSSSN | JMP > 01000011 00000000 | |
3625ff3a AT |
122 | |
123 | @ Print the string we have built on the stack. | |
ae1f85a1 | 124 | NSSVSTSSSSTTSSSSSSSTN | Mark: 01000011 00000001 |
3625ff3a AT |
125 | SNN | DROP |
126 | NSTTSSSN | JSR > 1000 (print string from stack) | |
127 | NTN | RTS | |
128 | ||
8bed3ccd | 129 | #endif |