aboutsummaryrefslogtreecommitdiff
path: root/rng.gbasm
diff options
context:
space:
mode:
authorAstatin <[email protected]>2024-08-14 20:05:28 +0900
committerAstatin <astatin@redacted>2024-08-14 20:05:28 +0900
commitf9f115384757135fa8488bd43eb3e5e91cc243d9 (patch)
tree6ab2b9bf120267f85140e1d8c9aa3a12b7e9c446 /rng.gbasm
parent59c2f3cc678df564bb9cf2b232537ce8a9d734fa (diff)
Add RNG + do some tests with is_solid
Diffstat (limited to 'rng.gbasm')
-rw-r--r--rng.gbasm70
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
+
+