Similarly, `slurp` and `spew` help move bulk data between the stack and heap.
User interactions were also targeted. The included `printf` function provides a
-variety of substitutions to ease user interactions. For user input, `get user
-string` and `atoi` allow easy creation of basic user interfaces.
+variety of substitutions to ease user interactions. For user input,
+`get user string` and `atoi` allow easy creation of basic user interfaces.
The library includes a variety of bitwise logic functions as well as heap
manipulation functions and a handful of math functions including a random
# Resource Reservations #
-Since all labels share a global namespace, the standard library makes the
-following reservations:
-
## Entry Points ##
10000 ----- random (math.pvvs)
10001 ----- absolute value (math.pvvs)
10010 ----- greatest common divisor (math.pvvs)
+ 10011 ----- fastrand (math.pvvs)
011xxx - heap functions
11000 ----- memset (heap.pvvs)
11001 ----- memcpy (heap.pvvs)
## Labels ##
+Since all labels share a global namespace, the standard library makes the
+following reservations:
+
00000000 0xxxxxxx - reserved for stdlib function entry points
00000000 1xxxxxxx - available for use in user programs
0xxxxxxx xxxxxxxx - reserved for private use by stdlib
## Heap and Pointers ##
The first 16 heap addresses (`0-15`) are reserved when using the stdlib.
-Within that reservation, heap[0] is used by `random` and the block
-heap[1]-heap[15] by the stack rotation subroutines which time-share
+Within that reservation, `heap[0]` is used by `random` and the block
+`heap[1]`-`heap[15]` by the stack rotation subroutines which time-share
pseudo-registers between the various stdlib subroutines.
-By convention, chosen since no function other than `random` should use heap[0],
+By convention, chosen since no function other than `random` should use `heap[0],`
functions which return a pointer will use the address `0` to represent a `NULL`
pointer.
the mismatch between the VVhitespace language's sign-magnitude representation
of integers and the interpreter's internal twos-complement representation, bit
arrays with a leading `1` (i.e. negative numbers) may appear quite different
-then expected in your source code.
+than expected in your source code.
For example, to push a 64-bit array of all `1`'s on to the stack we must push
-`SSTTN`, or `-1`, not
-`SSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTN`, or
-`2^65-1`.
+`SSTTN`, or `-1`.
## Extending Heap Reservation ##
By default, the stdlib uses the first 16 heap addresses. All heap access (other
-than heap[0] as a seed) occurs through `stackrotate` and `stackrotatereverse`.
+than `heap[0]` as a seed) occurs through `stackrotate` and `stackrotatereverse`.
Edit these functions to increase the stdlib's heap reservation.
The remainder of the stdlib is written to automatically use the new allocation.