#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 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ 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