111010 ----- print sign (debug.pvvs)
111011 ----- print magnitude (debug.pvvs)
111100 ----- print string (debug.pvvs)
+ 111101 ----- print signed number (debug.pvvs)
1xxxxxx - reserved for less common entry points
1000000 ----- lowbitand (logic.pvvs)
1000001 ----- <empty>
@ Return Stack:
@ <empty>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-NSSVTTTSSSN | Mark: 111000 (dump heap)
+NSSVTTTSSSN | Mark: 111000 (debug:dumpheap)
@ Prepare a numeric address and value on the stack
SNS | DUP
@ Return Stack:
@ <empty>
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-NSSVTTTSSTN | Mark: 111001 (dump stack)
+NSSVTTTSSTN | Mark: 111001 (debug:dumpstack)
@ Orient the user
SSSSSSSSSN | PUSH ASCII '\0'
SNN | DROP
NTN | RTS
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@ Name:
+@ printsignednumber (111101)
+@ Description:
+@ Prints 'number' from the stack in sign-magnitude format.
+@ Leading zeros are suppressed.
+@ Call Stack:
+@ number <-- TOS
+@ Return Stack:
+@ <empty>
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+NSSVTTTTSTN | Mark: 111101 (debug:printsignednumber)
+SNS | DUP
+NSTTTTSTSN | JSR > 111010 (debug:printsign)
+NSTTTTSTTN | JSR > 111011 (debug:printmagnitude)
+NTN | RTS
+
#endif
SSSTSSSSSSN | PUSH 64 (blk2ptr)
NSTTTSTTN | JSR > 11011 (memcmp)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
NNN | DIE
#include <heap.pvvs>
-#include <stdio.pvvs>
+#include <debug.pvvs>
SSSSTTTSSN | PUSH 28 (address)
NSTTTTSSN | JSR > 11100 (memsrch)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
NNN | DIE
#include <heap.pvvs>
-#include <stdio.pvvs>
+#include <debug.pvvs>
@ All zeros to all ones
SSSSN | PUSH 0
NSTTSTSSSN | JSR > 101000 (not)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ All ones to all zeros
SSTTN | PUSH -1
NSTTSTSSSN | JSR > 101000 (not)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Test alternating bits, leading zero.
@ Note that 6148914691236517205 = 0101...0101
SSSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTN | PUSH +6148914691236517205
NSTTSTSSSN | JSR > 101000 (not)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Test alternating bits, leading one.
@ Note that -6148914691236517206 = 1010...1010 in twos-complement but we
@ enter it in sign magnitude format so the bit pattern appears different.
SSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTTSN | PUSH -6148914691236517206
NSTTSTSSSN | JSR > 101000 (not)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ All done.
NNN | DIE
#include <logic.pvvs>
-#include <stdio.pvvs>
+#include <debug.pvvs>
SSSTN | PUSH +1
SSSSN | PUSH 0
NSTTSTTSTN | JSR > 101101 (lshift)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Shift by one.
SSSTN | PUSH +1
SSSTN | PUSH +1
NSTTSTTSTN | JSR > 101101 (lshift)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Shift by 62.
SSSTN | PUSH +1
SSSTTTTTSN | PUSH +62
NSTTSTTSTN | JSR > 101101 (lshift)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Shift by 63.
SSSTN | PUSH +1
SSSTTTTTTN | PUSH +63
NSTTSTTSTN | JSR > 101101 (lshift)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Shift all ones until a single one remains.
SSTTN | PUSH -1
SSSTTTTTTN | PUSH +63
NSTTSTTSTN | JSR > 101101 (lshift)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Shift all ones to all zeros.
SSTTN | PUSH -1
SSSTSSSSSSN | PUSH +64
NSTTSTTSTN | JSR > 101101 (lshift)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ All done.
NNN | DIE
#include <logic.pvvs>
-#include <stdio.pvvs>
+#include <debug.pvvs>
SSSTN | PUSH +1
SSSSN | PUSH 0
NSTTSTTSSN | JSR > 101100 (rshift)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Shift by one, positive sign extension.
SSSTSN | PUSH +2
SSSTN | PUSH +1
NSTTSTTSSN | JSR > 101100 (rshift)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Shift by four, positive sign extension.
SSSTSSSSN | PUSH +16
SSSTSSN | PUSH +4
NSTTSTTSSN | JSR > 101100 (rshift)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Shift by one, negative sign extension.
@ -9223372036854775805 = 1000000000000000000000000000000000000000000000000000000000000011
SSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTSTN | PUSH -9223372036854775805
SSSTN | PUSH +1
NSTTSTTSSN | JSR > 101100 (rshift)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Shift by four, negative sign extension
@ -9223372036854775638 = 1000000000000000000000000000000000000000000000000000000010101010
SSTSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTSTSTSTTSN | PUSH -9223372036854775638
SSSTSSN | PUSH +4
NSTTSTTSSN | JSR > 101100 (rshift)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Test for special case: rshift(-1) = -1
SSTTN | PUSH -1
SSSTN | PUSH +1
NSTTSTTSSN | JSR > 101100 (rshift)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Shift a single 1 in the MSb into all ones
SSTTSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSN | PUSH -(2^63)
SSSTTTTTTN | PUSH +63
NSTTSTTSSN | JSR > 101100 (rshift)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ All done.
NNN | DIE
#include <logic.pvvs>
-#include <stdio.pvvs>
+#include <debug.pvvs>
SSSSN | PUSH 0
SSSSN | PUSH 0
NSTTSTSSTN | JSR > 101001 (and)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Test 0 ^ 1 = 0
SSSSN | PUSH 0
SSSTN | PUSH +1
NSTTSTSSTN | JSR > 101001 (and)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Test 1 ^ 1 = 1
SSSTN | PUSH +1
SSSTN | PUSH +1
NSTTSTSSTN | JSR > 101001 (and)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Test 1 ^ 1...1 = 1
SSSTN | PUSH +1
SSTTN | PUSH -1
NSTTSTSSTN | JSR > 101001 (and)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Test 1010...1010 ^ 111111 = 101010
@ Note that -6148914691236517206 = 1010...1010 in twos-complement but we
SSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTTSN | PUSH -6148914691236517206
SSSTTTTTTN | PUSH +63
NSTTSTSSTN | JSR > 101001 (and)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ All done.
NNN | DIE
#include <logic.pvvs>
-#include <stdio.pvvs>
+#include <debug.pvvs>
SSSSN | PUSH 0
SSSSN | PUSH 0
NSTTSTSTSN | JSR > 101010 (or)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Test 0 v 1 = 1
SSSSN | PUSH 0
SSSTN | PUSH +1
NSTTSTSTSN | JSR > 101010 (or)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Test 1 v 1 = 1
SSSTN | PUSH +1
SSSTN | PUSH +1
NSTTSTSTSN | JSR > 101010 (or)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Test 1 v 1...1 = 1...1
SSSTN | PUSH +1
SSTTN | PUSH -1
NSTTSTSTSN | JSR > 101010 (or)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Test 1010...1010 v 0101...0101 = 1...1
@ Note that -6148914691236517206 = 1010...1010 in twos-complement but we
SSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTTSN | PUSH -6148914691236517206
SSSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTN | PUSH +6148914691236517205
NSTTSTSTSN | JSR > 101010 (or)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ All done.
NNN | DIE
#include <logic.pvvs>
-#include <stdio.pvvs>
+#include <debug.pvvs>
SSSSN | PUSH 0
SSSSN | PUSH 0
NSTTSTSTTN | JSR > 101110 (xor)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Test 0 xor 1 = 1
SSSSN | PUSH 0
SSSTN | PUSH +1
NSTTSTSTTN | JSR > 101110 (xor)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Test 1 xor 1 = 0
SSSTN | PUSH +1
SSSTN | PUSH +1
NSTTSTSTTN | JSR > 101110 (xor)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Test 1 xor 1...1 = 1...10
SSSTN | PUSH +1
SSTTN | PUSH -1
NSTTSTSTTN | JSR > 101110 (xor)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Test 1010...1010 xor 0101...0101 = 1...1
@ Note that -6148914691236517206 = 1010...1010 in twos-complement but we
SSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTTSN | PUSH -6148914691236517206
SSSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTSTN | PUSH +6148914691236517205
NSTTSTSTTN | JSR > 101110 (xor)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ All done.
NNN | DIE
#include <logic.pvvs>
-#include <stdio.pvvs>
+#include <debug.pvvs>
SSSTSSSSSN | PUSH 32 (address)
NSTTSSSSSN | JSR > 100000 (strlen)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
NNN | DIE
-#include <stdio.pvvs>
+#include <debug.pvvs>
#include <heap.pvvs>
#include <string.pvvs>
@ +1 should remain +1
SSSTN | PUSH +1
NSTTSSSTN | JSR > 10001 (abs)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ -1 should become +1
SSTTN | PUSH -1
NSTTSSSTN | JSR > 10001 (abs)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ 0 should remain 0
SSSSN | PUSH 0
NSTTSSSTN | JSR > 10001 (abs)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
@ Test the most negative number.
@ It is impossible to return the true absolute value but should return zero.
SSSTTTTTTN | PUSH +63
NSTTSTTSTN | JSR > 101101 (lshift)
NSTTSSSTN | JSR > 10001 (abs)
-NSTTSSTN | JSR > 1001 (print number from stack)
+NSTTTTTSTN | JSR > 111101 (debug:printsignednumber)
NNN | DIE
+#include <math.pvvs>
#include <logic.pvvs>
-#include <stdio.pvvs>
+#include <debug.pvvs>