aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2014-10-09 15:50:06 -0400
committerJesse Luehrs <doy@tozt.net>2014-10-09 15:50:06 -0400
commit74e56d8c86ab7e1e373dbc5d2ed684a7094e316e (patch)
treef2be1eb171ecb336cd95a2ecc2e3f377c970116b
parentd18fef977d1d29460ec08fe2b8f5d5d485b89161 (diff)
downloadnes-snake-74e56d8c86ab7e1e373dbc5d2ed684a7094e316e.tar.gz
nes-snake-74e56d8c86ab7e1e373dbc5d2ed684a7094e316e.zip
better random number generation
-rw-r--r--main.s73
1 files changed, 38 insertions, 35 deletions
diff --git a/main.s b/main.s
index d873d4f..c280059 100644
--- a/main.s
+++ b/main.s
@@ -41,6 +41,7 @@ direction DB ; 0: up, 1: down, 2: left, 3: right
frame_skip DB
frame_count DB
rand_state DB
+rand_out DB
apple INSTANCEOF point
.ENDE
; }}}
@@ -476,52 +477,54 @@ end_game: ; {{{
STA game_state
RTS ; }}}
new_apple: ; {{{
- JSR rand
- LDA rand_state
- AND #%01111000
+ JSR rand4
+ LDA rand_out
+ ASL
+ ASL
+ ASL
CLC
ADC #$40
STA apple.x
- JSR rand
- LDA rand_state
- AND #%01111000
+ JSR rand4
+ LDA rand_out
+ ASL
+ ASL
+ ASL
CLC
ADC #$3D
STA apple.y
RTS ; }}}
-rand: ; {{{
- ; linear feedback shift register with taps at 8, 6, 5, and 4
- LDY rand_state
- TYA
- AND #%10000000
- STA rand_state
- TYA
- AND #%00100000
- ASL
- ASL
- EOR rand_state
- STA rand_state
- TYA
- AND #%00010000
- ASL
- ASL
- ASL
- EOR rand_state
- STA rand_state
- TYA
- AND #%00001000
- ASL
- ASL
+rand4: ; {{{
+ JSR rand1
+ LDX rand_out
+ JSR rand1
+ TXA
ASL
+ ORA rand_out
+ TAX
+ JSR rand1
+ TXA
ASL
- EOR rand_state
- ROL
- STA rand_state
- TYA
+ ORA rand_out
+ TAX
+ JSR rand1
+ TXA
ASL
- ORA rand_state
- STA rand_state
+ ORA rand_out
+ STA rand_out
RTS ; }}}
+rand1: ; {{{
+ ; galois linear feedback shift register with taps at 8, 6, 5, and 4
+ LDA rand_state
+ AND #$01
+ STA rand_out
+ LSR rand_state
+ LDA rand_out
+ BEQ +
+ LDA rand_state
+ EOR #%10111000
+ STA rand_state
++ RTS ; }}}
; }}}
; data {{{
palette: ; {{{