#ifndef VVS_STDLIB_HEAP #define VVS_STDLIB_HEAP @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ Description: @ This function writes pattern into the memory locations: @ startaddr -> startaddr+count @ Call Stack: @ pattern @ startaddr @ count <-- TOS @ Return Stack: @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ NSSVTTSSSN | Mark: 11000 (memset) @ Prepare the stack for computation. @ Addr | Contents @ 0 | count @ 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 count == 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 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ Description: @ This function copies count+1 words from source to destination. @ Call Stack: @ source @ destination @ count <-- TOS @ Return Stack: @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ NSSVTTSSTN | Mark: 11001 (memcpy) @ Prepare the stack for computation. @ Addr | Contents @ 0 | count @ 1 | destination @ 2 | source SSSSN | PUSH 0 (ptr) SNT | SWAP TTS | STORE SSSTN | PUSH 1 (ptr) SNT | SWAP TTS | STORE SSSTSN | PUSH 2 (ptr) SNT | SWAP TTS | STORE @ Copy one word on each pass through this loop. NSSVSSSTTSSTSSSSSSSSN | Mark: 00011001 00000000 SSSTN | PUSH 1 (ptr) TTT | LOAD SSSSN | PUSH 0 (ptr) TTT | LOAD TSSS | ADD SSSTSN | PUSH 2 (ptr) TTT | LOAD SSSSN | PUSH 0 (ptr) TTT | LOAD TSSS | ADD TTT | LOAD TTS | STORE @ Decrement and check for loop end conditions. SSSSN | PUSH 0 (ptr) TTT | LOAD SNS | DUP NTSSSSTTSSTSSSSSSSTN | BRZ > 00011001 00000001 SSSTN | PUSH 1 TSST | SUBTRACT SSSSN | PUSH 0 (ptr) SNT | SWAP TTS | STORE NSNSSSTTSSTSSSSSSSSN | JMP > 00011001 00000000 @ Clean up and return NSSVSSSTTSSTSSSSSSSTN | Mark: 00011001 00000001 SNN | DROP NTN | RTS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ Description: @ This function writes random words into the memory locations: @ startaddr -> startaddr+count @ Call Stack: @ count @ startaddr <-- TOS @ Return Stack: @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ NSSVTTSTSN | Mark: 11010 (memrand) SSSSN | PUSH 0 (ptr) SNT | SWAP TTS | STORE @ Store random word into one memory location on each pass through this loop. NSSVSSSTTSTSSSSSSSSSN | Mark: 00011010 00000000 SNS | DUP SSSSN | PUSH 0 (ptr) TTT | LOAD TSSS | ADD NSTTSSSSN | JSR > 10000 (random) TTS | STORE @ Decrement and check loop end conditions SNS | DUP NTSSSSTTSTSSSSSSSSTN | BRZ > 00011010 00000001 SSSTN | PUSH 1 TSST | SUBTRACT NSNSSSTTSTSSSSSSSSSN | JMP > 00011010 00000000 @ Clean up and return NSSVSSSTTSTSSSSSSSSTN | Mark: 00011010 00000001 SNN | DROP NTN | RTS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ Description: @ This function compares two blocks of memory: @ blk1ptr -> blk1ptr+count @ -- versus -- @ blk2ptr -> blk2ptr+count @ The return value is zero if the blocks are identical, otherwise non-zero. @ Call Stack: @ count @ blk1ptr @ blk2ptr <-- TOS @ Return Stack: @ retvalue <-- TOS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ NSSVTTSTTN | Mark: 11011 (memcmp) @ Prepare the stack for computation. @ Addr | Contents @ 0 | blk2ptr @ 1 | blk1ptr SSSSN | PUSH 0 (ptr) SNT | SWAP TTS | STORE SSSTN | PUSH 1 (ptr) SNT | SWAP TTS | STORE @ Compare one word on each pass through this loop. NSSVSSSTTSTTSSSSSSSSN | Mark: 00011011 00000000 SNS | DUP SNS | DUP SSSSN | PUSH 0 (ptr) TTT | LOAD TSSS | ADD TTT | LOAD SNT | SWAP SSSTN | PUSH 1 (ptr) TTT | LOAD TSSS | ADD TTT | LOAD TSST | SUBTRACT NTSSSSTTSTTSSSSSSTSN | BRZ > 00011011 00000010 (jump if words match) @ Return 'match? = false' SNN | DROP SSSTN | PUSH 1 NTN | RTS @ Decrement and loop again if loop is not complete. NSSVSSSTTSTTSSSSSSTSN | Mark: 00011011 00000010 SNS | DUP NTSSSSTTSTTSSSSSSSTN | BRZ > 00011011 00000001 (jump if loop is complete) SSSTN | PUSH 1 TSST | SUBTRACT NSNSSSTTSTTSSSSSSSSN | JMP > 00011011 00000000 @ Return 'match? = true' NSSVSSSTTSTTSSSSSSSTN | Mark: 00011011 00000001 SNN | DROP SSSSN | PUSH 0 NTN | RTS #include #endif