X-Git-Url: http://git.subgeniuskitty.com/vvhitespace/.git/blobdiff_plain/1a56830da1b5753f31d9a4b2b96cfc6a45d7d2d8..3695b659af12996f07d40088bf175a083770d573:/stdlib/heap.pvvs diff --git a/stdlib/heap.pvvs b/stdlib/heap.pvvs new file mode 100644 index 0000000..62a0216 --- /dev/null +++ b/stdlib/heap.pvvs @@ -0,0 +1,61 @@ +#ifndef VVS_STDLIB_HEAP +#define VVS_STDLIB_HEAP + +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@ Description: +@ This function writes pattern into the memory locations: +@ startaddr -> startaddr+numbytes +@ Call Stack: +@ pattern +@ startaddr +@ numbytes <-- TOS +@ Return Stack: +@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +NSSVTTSSSN | Mark: 11000 (memset) + +@ Prepare the stack for computation. +@ Addr | Contents +@ 0 | numbytes +@ 1 | startaddr +@ 2 | pattern + +SSSSN | PUSH 0 (ptr) +SNT | SWAP +TTS | STORE +SSSTN | PUSH 1 (ptr) +SNT | SWAP +TTS | STORE +SSSTSN | PUSH 2 (ptr) +SNT | SWAP +TTS | STORE + +@ Store pattern into one memory location on each pass through this loop. +NSSVSSSTTSSSSSSSSSSSN | Mark: 00011000 00000000 +SSSSN | PUSH 0 (ptr) +TTT | LOAD +SSSTN | PUSH 1 (ptr) +TTT | LOAD +TSSS | ADD +SSSTSN | PUSH 2 (ptr) +TTT | LOAD +TTS | STORE + +@ Decrement and check for loop end condition numbytes == 0. +SSSSN | PUSH 0 (ptr) +TTT | LOAD +SNS | DUP +NTSSSSTTSSSSSSSSSSTN | BRZ > 00011000 00000001 +SSSTN | PUSH 1 +TSST | SUBTRACT +SSSSN | PUSH 0 (ptr) +SNT | SWAP +TTS | STORE +NSNSSSTTSSSSSSSSSSSN | JMP > 00011000 00000000 + +@ Clean up and return +NSSVSSSTTSSSSSSSSSSTN | Mark: 00011000 00000001 +SNN | DROP +NTN | RTS + +#endif