Added memrand function to VVS stdlib.
[vvhitespace] / stdlib / heap.pvvs
CommitLineData
3695b659
AT
1#ifndef VVS_STDLIB_HEAP
2#define VVS_STDLIB_HEAP
3
4@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
5@ Description:
6@ This function writes pattern into the memory locations:
3d75b928 7@ startaddr -> startaddr+count
3695b659
AT
8@ Call Stack:
9@ pattern
10@ startaddr
3d75b928 11@ count <-- TOS
3695b659
AT
12@ Return Stack:
13@ <empty>
14@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
15NSSVTTSSSN | Mark: 11000 (memset)
16
17@ Prepare the stack for computation.
18@ Addr | Contents
3d75b928 19@ 0 | count
3695b659
AT
20@ 1 | startaddr
21@ 2 | pattern
22
23SSSSN | PUSH 0 (ptr)
24SNT | SWAP
25TTS | STORE
26SSSTN | PUSH 1 (ptr)
27SNT | SWAP
28TTS | STORE
29SSSTSN | PUSH 2 (ptr)
30SNT | SWAP
31TTS | STORE
32
33@ Store pattern into one memory location on each pass through this loop.
34NSSVSSSTTSSSSSSSSSSSN | Mark: 00011000 00000000
35SSSSN | PUSH 0 (ptr)
36TTT | LOAD
37SSSTN | PUSH 1 (ptr)
38TTT | LOAD
39TSSS | ADD
40SSSTSN | PUSH 2 (ptr)
41TTT | LOAD
42TTS | STORE
43
3d75b928 44@ Decrement and check for loop end condition count == 0.
3695b659
AT
45SSSSN | PUSH 0 (ptr)
46TTT | LOAD
47SNS | DUP
48NTSSSSTTSSSSSSSSSSTN | BRZ > 00011000 00000001
49SSSTN | PUSH 1
50TSST | SUBTRACT
51SSSSN | PUSH 0 (ptr)
52SNT | SWAP
53TTS | STORE
54NSNSSSTTSSSSSSSSSSSN | JMP > 00011000 00000000
55
56@ Clean up and return
57NSSVSSSTTSSSSSSSSSSTN | Mark: 00011000 00000001
58SNN | DROP
59NTN | RTS
60
3d75b928
AT
61@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
62@ Description:
63@ This function copies count+1 words from source to destination.
64@ Call Stack:
65@ source
66@ destination
67@ count <-- TOS
68@ Return Stack:
69@ <empty>
70@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
71NSSVTTSSTN | Mark: 11001 (memcpy)
72
73@ Prepare the stack for computation.
74@ Addr | Contents
75@ 0 | count
76@ 1 | destination
77@ 2 | source
78
79SSSSN | PUSH 0 (ptr)
80SNT | SWAP
81TTS | STORE
82SSSTN | PUSH 1 (ptr)
83SNT | SWAP
84TTS | STORE
85SSSTSN | PUSH 2 (ptr)
86SNT | SWAP
87TTS | STORE
88
89@ Copy one word on each pass through this loop.
90NSSVSSSTTSSTSSSSSSSSN | Mark: 00011001 00000000
91SSSTN | PUSH 1 (ptr)
92TTT | LOAD
93SSSSN | PUSH 0 (ptr)
94TTT | LOAD
95TSSS | ADD
96SSSTSN | PUSH 2 (ptr)
97TTT | LOAD
98SSSSN | PUSH 0 (ptr)
99TTT | LOAD
100TSSS | ADD
101TTT | LOAD
102TTS | STORE
103
104@ Decrement and check for loop end conditions.
105SSSSN | PUSH 0 (ptr)
106TTT | LOAD
107SNS | DUP
108NTSSSSTTSSTSSSSSSSTN | BRZ > 00011001 00000001
109SSSTN | PUSH 1
110TSST | SUBTRACT
111SSSSN | PUSH 0 (ptr)
112SNT | SWAP
113TTS | STORE
114NSNSSSTTSSTSSSSSSSSN | JMP > 00011001 00000000
115
116@ Clean up and return
117NSSVSSSTTSSTSSSSSSSTN | Mark: 00011001 00000001
118SNN | DROP
119NTN | RTS
120
d63de3fa
AT
121@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
122@ Description:
123@ This function writes random words into the memory locations:
124@ startaddr -> startaddr+count
125@ Call Stack:
126@ count
127@ startaddr <-- TOS
128@ Return Stack:
129@ <empty>
130@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
131NSSVTTSTSN | Mark: 11010 (memrand)
132SSSSN | PUSH 0 (ptr)
133SNT | SWAP
134TTS | STORE
135
136@ Store random word into one memory location on each pass through this loop.
137NSSVSSSTTSTSSSSSSSSSN | Mark: 00011010 00000000
138SNS | DUP
139SSSSN | PUSH 0 (ptr)
140TTT | LOAD
141TSSS | ADD
142NSTTSSSSN | JSR > 10000 (random)
143TTS | STORE
144
145@ Decrement and check loop end conditions
146SNS | DUP
147NTSSSSTTSTSSSSSSSSTN | BRZ > 00011010 00000001
148SSSTN | PUSH 1
149TSST | SUBTRACT
150NSNSSSTTSTSSSSSSSSSN | JMP > 00011010 00000000
151
152NNN
153@ Clean up and return
154NSSVSSSTTSTSSSSSSSSTN | Mark: 00011010 00000001
155SNN | DROP
156NTN | RTS
157
158#include <math.pvvs>
159
3695b659 160#endif