@ Name:
@ random (10000)
@ Description:
-@ Returns a random IEEE-vetted number per RFC 1149.5.
+@ Returns a kinda-random number.
+@ Before using for the first time, seed heap[0] with a value.
@ Call Stack:
@ empty
@ Return Stack:
@ random number <-- TOS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
NSSVTSSSSN | Mark: 10000 (random)
-SSSTSSN | PUSH +4
+
+@ Generate the next seed value
+SSSSN | PUSH 0 (ptr)
+TTT | LOAD
+SSSTSSSSSTTTSSSTTSSTSSTTTSSTTSTTSTN | PUSH 1103515245
+TSSN | MULTIPLY
+SSSTTSSSSSSTTTSSTN | PUSH 12345
+TSSS | ADD
+
+@ Store the next seed value but keep a copy on the stack.
+SNS | DUP
+SSSSN | PUSH 0 (ptr)
+SNT | SWAP
+TTS | STORE
+
+@ Calculate the random number and return.
+SSSTSSSSSSSSSSSSSSSSN | PUSH 65536
+TSTS | DIVIDE
+SSSTSSSSSSSSSSSSSSSN | PUSH 32768
+TSTT | MODULO
NTN | RTS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
NSSVSSSTSSSTSSSSSSSTN | Mark: 00010001 00000001
NTN | RTS
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+@ Name:
+@ isnegative (1000001)
+@ Description:
+@ Returns 1 if 'number' is negative, 0 if positive.
+@ Call Stack:
+@ number <-- TOS
+@ Return Stack:
+@ 1 or 0 <-- TOS
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+NSSVTSSSSSTN | Mark: 1000001 (isnegative)
+NTTSTSSSSSTSSSSSSSSN | BMI > 01000001 00000000
+SSSSN | PUSH 0
+NTN | RTS
+NSSVSTSSSSSTSSSSSSSSN | Mark: 01000001 00000000
+SSSTN | PUSH 1
+NTN | RTS
+
#endif