![]() |
Routines |
Prev: 09717 | Up: Map |
The address of this routine is derived from an offset found in the scanning function table.
|
||||||||
S_RND | 09720 | CALL SYNTAX_Z | Unless syntax is being checked, jump to calculate a random number. | |||||
09723 | JR Z,S_RND_END | |||||||
09725 | LD BC,(23670) | Fetch the current value of SEED. | ||||||
09729 | CALL STACK_BC | Put it on the calculator stack. | ||||||
09732 | RST 40 | Now use the calculator. | ||||||
09733 | DEFB 161 | stk_one | ||||||
09734 | DEFB 15 | addition: The 'last value' is now SEED+1. | ||||||
09735 | DEFB 52 | stk_data: Put the number 75 on the calculator stack. | ||||||
09736 | DEFB 55,22 | |||||||
09738 | DEFB 4 | multiply: 'last value' (SEED+1)*75. | ||||||
09739 | DEFB 52 | stk_data: Put the number 65537 on the calculator stack. | ||||||
09740 | DEFB 128,65,0,0,128 | |||||||
09745 | DEFB 50 | n_mod_m: Divide (SEED+1)*75 by 65537 to give a 'remainder' and an 'answer'. | ||||||
09746 | DEFB 2 | delete: Discard the 'answer'. | ||||||
09747 | DEFB 161 | stk_one | ||||||
09748 | DEFB 3 | subtract: The 'last value' is now 'remainder' - 1. | ||||||
09749 | DEFB 49 | duplicate: Make a copy of the 'last value'. | ||||||
09750 | DEFB 56 | end_calc: The calculation is finished. | ||||||
09751 | CALL FP_TO_BC | Use the 'last value' to give the new value for SEED. | ||||||
09754 | LD (23670),BC | |||||||
09758 | LD A,(HL) | Fetch the exponent of 'last value'. | ||||||
09759 | AND A | Jump forward if the exponent is zero. | ||||||
09760 | JR Z,S_RND_END | |||||||
09762 | SUB 16 | Reduce the exponent, i.e. divide 'last value' by 65536 to give the required 'last value'. | ||||||
09764 | LD (HL),A | |||||||
S_RND_END | 09765 | JR S_PI_END | Jump past the S_PI routine. |
Prev: 09717 | Up: Map |