X-Git-Url: http://git.subgeniuskitty.com/vvhitespace/.git/blobdiff_plain/8fc485d739c55bf179379882747e5940071dca31..HEAD:/stdlib/README.md diff --git a/stdlib/README.md b/stdlib/README.md index e455d3c..b04f08e 100644 --- a/stdlib/README.md +++ b/stdlib/README.md @@ -14,8 +14,8 @@ stack manipulations by allowing easy access to elements deep on the stack. 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 @@ -78,9 +78,6 @@ to use the function. # Resource Reservations # -Since all labels share a global namespace, the standard library makes the -following reservations: - ## Entry Points ## @@ -98,6 +95,7 @@ header comment for each function to learn the call and return stack. 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) @@ -139,6 +137,9 @@ header comment for each function to learn the call and return stack. ## 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 @@ -148,11 +149,11 @@ header comment for each function to learn the call and return stack. ## 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. @@ -166,18 +167,16 @@ Be cautious when pushing constants in your code for use as bit arrays. Due to 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.