X-Git-Url: http://git.subgeniuskitty.com/vvhitespace/.git/blobdiff_plain/2612f47f558e9201f0aeaf7655661574066e0243..ae1f85a178241c826a0b6a72ace12049b9907561:/stdlib/README.md diff --git a/stdlib/README.md b/stdlib/README.md index ee4670b..c64be4b 100644 --- a/stdlib/README.md +++ b/stdlib/README.md @@ -16,9 +16,12 @@ following reservations: 0xxxxxxx xxxxxxxx - reserved for private use by stdlib 1xxxxxxx xxxxxxxx - available for use in user programs -## Heap ## +## Heap and Pointers ## - The first 256 heap addresses are reserved when using the stdlib. +The first 16 heap addresses (`0-15`) are reserved when using the stdlib. + +By convention, functions which return a pointer will use the address `0` to +represent a `NULL` pointer. # Entry Points # @@ -33,14 +36,27 @@ header comment for each function to learn the call and return stack. 010xxx - math functions 10000 ----- random (math.pvvs) 10001 ----- absolute value (math.pvvs) - 011xxx - unassigned - 100xxx - unassigned + 011xxx - heap functions + 11000 ----- memset (heap.pvvs) + 11001 ----- memcpy (heap.pvvs) + 11010 ----- memrand (heap.pvvs) + 11011 ----- memcmp (heap.pvvs) + 11100 ----- memsrch (heap.pvvs) + 11101 ----- + 11110 ----- slurp (heap.pvvs) + 11111 ----- spew (heap.pvvs) + 100xxx - string functions + 100000 ----- strlen (string.pvvs) 101xxx - unassigned - 110xxx - unassigned - 111xxx - conversion functions + 110xxx - conversion functions + 111xxx - debug functions + 111000 ----- dump heap (debug.pvvs) + 111001 ----- dump stack (debug.pvvs) 1xxxxxx - reserved for less common entry points - 1000000 ----- print sign of number (stdio.pvvs) - 1000001 ----- print magnitude of number (stdio.pvvs) + 1000000 ----- slurp registers (heap.pvvs) + 1000001 ----- spew registers (heap.pvvs) + 1000010 ----- print sign of number (stdio.pvvs) + 1000011 ----- print magnitude of number (stdio.pvvs) # Misc # @@ -50,3 +66,13 @@ private label space associated with it, formed as follows: 00001000 xxxxxxxx - for use by 1000 00001001 xxxxxxxx - for use by 1001 ...etc + +# Slurp and Spew # + +The stdlib uses heap[1] to heap[15] as registers. + +The `slurpreg` and `spewreg` functions facilitate this by `spew`ing the stack +onto the heap's pseudo-registers or `slurp`ing the pseudo-registers back to the +stack. The functions preserve order in complementary fashion. + +The `spewreg` function uses `heap[0]` for storage.