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