From 1a56830da1b5753f31d9a4b2b96cfc6a45d7d2d8 Mon Sep 17 00:00:00 2001 From: Aaron Taylor Date: Fri, 12 Jul 2019 22:08:51 -0700 Subject: [PATCH] Added VVS stdlib function to dump heap in human readable form. --- stdlib/README.md | 5 +++-- stdlib/debug.pvvs | 53 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 stdlib/debug.pvvs diff --git a/stdlib/README.md b/stdlib/README.md index ee4670b..2bba7d5 100644 --- a/stdlib/README.md +++ b/stdlib/README.md @@ -36,8 +36,9 @@ header comment for each function to learn the call and return stack. 011xxx - unassigned 100xxx - unassigned 101xxx - unassigned - 110xxx - unassigned - 111xxx - conversion functions + 110xxx - conversion functions + 111xxx - debug functions + 111000 ----- dump heap (debug.pvvs) 1xxxxxx - reserved for less common entry points 1000000 ----- print sign of number (stdio.pvvs) 1000001 ----- print magnitude of number (stdio.pvvs) diff --git a/stdlib/debug.pvvs b/stdlib/debug.pvvs new file mode 100644 index 0000000..db61a96 --- /dev/null +++ b/stdlib/debug.pvvs @@ -0,0 +1,53 @@ +#ifndef VVS_STDLIB_DEBUG +#define VVS_STDLIB_DEBUG + +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +@ Description: +@ This function dumps the heap from startaddr to endaddr. +@ Call Stack: +@ endaddr +@ startaddr <-- TOS +@ Return Stack: +@ +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +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 +NSTTSSSSSTN | JSR>1000001 (print absolute value of number) +SSSTTTSTSN | PUSH ASCII ':' +SSSTSSTN | PUSH ASCII '\t' +TNSS | PUTC +TNSS | PUTC +NSTTSTSN | JSR>1010 (print number from stack) +SSSTSTSN | PUSH ASCII '\n' +TNSS | PUTC + +@ Figure out if the loop is complete. +SSSSN | PUSH 0 (ptr) +SNT | SWAP +TTS | STORE +SNS | DUP +SSSSN | PUSH 0 (ptr) +TTT | LOAD +TSST | SUBTRACT +NTSSSTTTSSSSSSSSSSSN | BRZ > 00111000 00000000 +SSSSN | PUSH 0 (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 + +#include + +#endif -- 2.20.1