Prev: 369B Up: Map Next: 36AF
36A0: THE 'MODULUS' SUBROUTINE (offset +32)
 The address of this routine is found in the table of addresses. It is called via the calculator literal +32 by the routine at S_RND. This subroutine calculates N (mod M), where M is a positive integer held at the top of the calculator stack (the 'last value'), and N is the integer held on the stack beneath M. The subroutine returns the integer quotient INT (N/M) at the top of the calculator stack (the 'last value'), and the remainder N-INT (N/M) in the second place on the stack. This subroutine is called during the calculation of a random number to reduce N mod 65537. n_mod_m 36A0 RST \$28 N, M 36A1 DEFB \$C0 st_mem_0: N, M (mem-0 holds M) 36A2 DEFB \$02 delete: N 36A3 DEFB \$31 duplicate: N, N 36A4 DEFB \$E0 get_mem_0: N, N, M 36A5 DEFB \$05 division: N, N/M 36A6 DEFB \$27 int: N, INT (N/M) 36A7 DEFB \$E0 get_mem_0: N, INT (N/M), M 36A8 DEFB \$01 exchange: N, M, INT (N/M) 36A9 DEFB \$C0 st_mem_0: N, M, INT (N/M) (mem-0 holds INT (N/M)) 36AA DEFB \$04 multiply: N, M*INT (N/M) 36AB DEFB \$03 subtract: N-M*INT (N/M) 36AC DEFB \$E0 get_mem_0: N-M*INT (N/M), INT (N/M) 36AD DEFB \$38 end_calc 36AE RET Finished.
 Prev: 369B Up: Map Next: 36AF