****************************************************************** * uran_c3x.asm : C3x assembly implementation of random generator * in Section 5.2.7.1 * ****************************************************************** LDI SEED,R4 ; load SEED of white noise generator STI R4,@WN ; R4 -> WN START LDI @WN,R0 ; x(n-1) -> R0 MPYI @S2045,R0 ; 2045 * R0 -> R0 ADDI 1,R0 ; R0 + 1 -> R0 LDI R0,R1 ; R0 -> R1 FLOAT R1,R1 ; convert R1 to floating point MPYF @S1048576,R1 ; R1 * (1/1048576) -> R1 FIX R1,R1 ; convert R1 to integer value MPYI @SS1048576,R1 ; R1 * 1048576 -> R1 SUBI R1,R0 ; R0 - R1 -> R0 STI R0,@WN ; store new x(n) for next iteration ADDI 1,R0 ; R0 + 1 -> R0 FLOAT R0,R0 ; convert R0 to floating point MPYF @S1048577,R0 ; R0 * (1/1048577) -> R0 SUBF @M05,R0 ; R0 - 0.5 -> R0 = r(n)