#ifndef VVS_STDLIB_DEBUG #define VVS_STDLIB_DEBUG @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ Name: @ dumpheap (111000) @ Description: @ Dumps the heap from 'startaddr' to 'endaddr'. @ This subroutine stomps on heap[1] after printing the first heap location. @ If you dump starting from heap[0], then heap[1] will print inaccurately. @ Starting the dump from any other location will work without error. @ TODO: Should I use heap[0] and DIE rather than RTS? @ At the moment, the ability to continue is too useful to me. @ If it's useful to me, it's probably useful to other people. @ For now, leave dumpheap as-is. @ Call Stack: @ endaddr @ startaddr <-- TOS @ Return Stack: @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #include NSSVTTTSSSN | Mark: 111000 (dump heap) @ Prepare a numeric address and value on the stack SNS | DUP SNS | DUP TTT | LOAD SNT | SWAP @ Print output line for this memory location NSTTSSSSTTN | JSR>1000011 (print absolute value of number) SSSTTTSTSN | PUSH ASCII ':' SSSTSSTN | PUSH ASCII '\t' TNSS | PUTC TNSS | PUTC NSTTSSTN | JSR>1001 (print number from stack) SSSTSTSN | PUSH ASCII '\n' TNSS | PUTC @ Figure out if the loop is complete. SSSTN | PUSH 1 (ptr) SNT | SWAP TTS | STORE SNS | DUP SSSTN | PUSH 1 (ptr) TTT | LOAD TSST | SUBTRACT NTSSSTTTSSSSSSSSSSSN | BRZ > 00111000 00000000 SSSTN | PUSH 1 (ptr) TTT | LOAD SSSTN | PUSH 1 TSSS | ADD NSNTTTSSSN | JMP>111000 (dump heap) @ Clean up and return NSSVSSTTTSSSSSSSSSSSN | Mark: 00111000 00000000 SNN | DROP NTN | RTS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ Name: @ dumpstack (111001) @ Description: @ Dumps 'count' entries from the stack. @ Call Stack: @ count <-- TOS @ Return Stack: @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #include NSSVTTTSSTN | Mark: 111001 (dump stack) @ Print output line for the current TOS. SNS | DUP NSTTSSSSTTN | JSR>1000011 (print absolute value of number) SSSTTTSTSN | PUSH ASCII ':' SSSTSSTN | PUSH ASCII '\t' TNSS | PUTC TNSS | PUTC SNT | SWAP NSTTSSTN | JSR>1001 (print number from stack) SSSTSTSN | PUSH ASCII '\n' TNSS | PUTC @ Figure out if the loop is complete. SNS | DUP NTSSSTTTSSTSSSSSSSSN | BRZ > 00111001 00000000 SSSTN | PUSH 1 TSST | SUBTRACT NSNTTTSSTN | JMP>111001 (dump stack) @ Clean up and return NSSVSSTTTSSTSSSSSSSSN | Mark: 00111001 00000000 SNN | DROP NTN | RTS #endif