#ifndef VVS_STDLIB_MATH #define VVS_STDLIB_MATH @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ Name: @ random (10000) @ Description: @ 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) @ 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 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ Name: @ abs (10001) @ Description: @ Returns the absolute value of its argument @ Call Stack: @ signed number <-- TOS @ Return Stack: @ abs(signed number) <-- TOS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ NSSVTSSSTN | Mark: 10001 (absolute value) SNS | DUP NTTSSSTSSSTSSSSSSSSN | BMI > 00010001 00000000 NSNSSSTSSSTSSSSSSSTN | JMP > 00010001 00000001 NSSVSSSTSSSTSSSSSSSSN | Mark: 00010001 00000000 SSTTN | PUSH -1 TSSN | MULTIPLY NSSVSSSTSSSTSSSSSSSTN | Mark: 00010001 00000001 NTN | RTS #endif