diff options
author | Astatin <[email protected]> | 2024-08-14 20:05:28 +0900 |
---|---|---|
committer | Astatin <astatin@redacted> | 2024-08-14 20:05:28 +0900 |
commit | f9f115384757135fa8488bd43eb3e5e91cc243d9 (patch) | |
tree | 6ab2b9bf120267f85140e1d8c9aa3a12b7e9c446 /rng.gbasm | |
parent | 59c2f3cc678df564bb9cf2b232537ce8a9d734fa (diff) |
Add RNG + do some tests with is_solid
Diffstat (limited to 'rng.gbasm')
-rw-r--r-- | rng.gbasm | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/rng.gbasm b/rng.gbasm new file mode 100644 index 0000000..8649024 --- /dev/null +++ b/rng.gbasm @@ -0,0 +1,70 @@ +Debug_RNG: + LD A, $mem_rng_state_1 + LD HL, $9822 + CALL =Print_8bit + LD A, $mem_rng_state_2 + CALL =Print_8bit + RET + +Initialize_RNG: + LD A, $42 + LD $mem_rng_state_1, A + LD A, $69 + LD $mem_rng_state_2, A + RET + +RNG_Step: + PUSH BC + PUSH DE + + LD A, $mem_rng_state_1 + LD D, A + LD A, $mem_rng_state_2 + LD E, A + + ; state << 7 + SCF + CCF + LD A, $mem_rng_state_2 + LD B, A + LD A, $mem_rng_state_1 + LD C, A + SRA C + RR B + LD C, $00 + RR C + + ; result XOR state + LD A, D + XOR B + LD D, A + + LD A, E + XOR C + LD E, A + + ; state >> 9 + LD C, D + SRA C + + ; result XOR state + LD A, E + XOR C + LD E, A + + ; (state << 8) XOR state + LD A, D + XOR E + LD D, A + + LD A, D + LD $mem_rng_state_1, A + + LD A, E + LD $mem_rng_state_2, A + + POP DE + POP BC + RET + + |