--- /dev/null
+# Reservations #
+
+## Label ##
+
+ 00000000 0xxxxxxx - reserved for stdlib function entry points
+ 00000000 1xxxxxxx - unassigned
+ 0xxxxxxx xxxxxxxx - reserved for private use by stdlib
+ 1xxxxxxx xxxxxxxx - available for use in user programs
+
+## Heap ##
+
+ The first 256 heap addresses are reserved when using the stdlib.
+
+# Entry Points #
+
+The following labels are entry points to stdlib functions. Read the
+header comment for each function to learn the call and return stack.
+
+ stdio.pvvs:
+ 1000 - print string from stack
+ 1001 - print string from heap
+
+# Misc #
+
+By convention, each public stdlib label will have 8 bits of
+private label space associated with it, formed as follows:
+
+ 00001000 xxxxxxxx - for use by 1000
+ 00001001 xxxxxxxx - for use by 1001
--- /dev/null
+################################################################################
+# Description:
+# This function prints a null-terminated string from the stack.
+# Call Stack:
+# null-terminator (ASCII '\0')
+# char n
+# ...
+# char 2
+# char 1 <-- TOS
+# Return Stack:
+# <empty>
+################################################################################
+NSSVTSSSN | Mark: 1000 (print string from stack)
+SNS | DUP
+NTSSSSSTSSSSSSSSSSTN | BRZ > 00001000 00000001
+TNSS | Print character
+NSNTSSSN | JMP > 1000
+NSSVSSSSTSSSSSSSSSSTN | Mark: 00001000 00000001
+SNN | DROP
+NTN | RTS
+
+################################################################################
+# Description:
+# This function prints a null-terminated string from the heap.
+# Call Stack:
+# pointer to first character <-- TOS
+# Return Stack:
+# <empty>
+################################################################################
+NSSVTSSTN | Mark: 1001 (print string from heap)
+SNS | DUP
+TTT | LOAD
+SNS | DUP
+NTSSSSSTSSTSSSSSSSTN | BRZ > 00001001 00000001
+TNSS | Print character
+SSSTN | Push +1
+TSSS | ADD
+NSNTSSTN | JMP > 1001
+NSSVSSSSTSSTSSSSSSSTN | Mark: 00001001 00000001
+SNN | DROP
+SNN | DROP
+NTN | RTS