![]() |
Routines |
Prev: 25F5 | Up: Map |
The address of this routine is derived from an offset found in the scanning function table.
|
||||||||
S_RND | 25F8 | CALL SYNTAX_Z | Unless syntax is being checked, jump to calculate a random number. | |||||
25FB | JR Z,S_RND_END | |||||||
25FD | LD BC,($5C76) | Fetch the current value of SEED. | ||||||
2601 | CALL STACK_BC | Put it on the calculator stack. | ||||||
2604 | RST $28 | Now use the calculator. | ||||||
2605 | DEFB $A1 | stk_one | ||||||
2606 | DEFB $0F | addition: The 'last value' is now SEED+1. | ||||||
2607 | DEFB $34 | stk_data: Put the number 75 on the calculator stack. | ||||||
2608 | DEFB $37,$16 | |||||||
260A | DEFB $04 | multiply: 'last value' (SEED+1)*75. | ||||||
260B | DEFB $34 | stk_data: Put the number 65537 on the calculator stack. | ||||||
260C | DEFB $80,$41,$00,$00,$80 | |||||||
2611 | DEFB $32 | n_mod_m: Divide (SEED+1)*75 by 65537 to give a 'remainder' and an 'answer'. | ||||||
2612 | DEFB $02 | delete: Discard the 'answer'. | ||||||
2613 | DEFB $A1 | stk_one | ||||||
2614 | DEFB $03 | subtract: The 'last value' is now 'remainder' - 1. | ||||||
2615 | DEFB $31 | duplicate: Make a copy of the 'last value'. | ||||||
2616 | DEFB $38 | end_calc: The calculation is finished. | ||||||
2617 | CALL FP_TO_BC | Use the 'last value' to give the new value for SEED. | ||||||
261A | LD ($5C76),BC | |||||||
261E | LD A,(HL) | Fetch the exponent of 'last value'. | ||||||
261F | AND A | Jump forward if the exponent is zero. | ||||||
2620 | JR Z,S_RND_END | |||||||
2622 | SUB $10 | Reduce the exponent, i.e. divide 'last value' by 65536 to give the required 'last value'. | ||||||
2624 | LD (HL),A | |||||||
S_RND_END | 2625 | JR S_PI_END | Jump past the S_PI routine. |
Prev: 25F5 | Up: Map |