16bit random
This commit is contained in:
parent
96c424fba7
commit
3bdf1a28c1
@ -15,5 +15,5 @@ clean:
|
|||||||
# Rule to run the final cartridge .nes file in the FCEUX emulator
|
# Rule to run the final cartridge .nes file in the FCEUX emulator
|
||||||
###############################################################################
|
###############################################################################
|
||||||
run:
|
run:
|
||||||
#on-workspace 4 "fceux atlantico.nes && i3-msg '[id=$(xdotool getactivewindow)] floating enable'"
|
on-workspace 1 "fceux atlantico.nes && i3-msg '[id=$(xdotool getactivewindow)] floating enable'"
|
||||||
on-workspace 4 "fceux atlantico.nes"
|
#on-workspace 1 "fceux atlantico.nes"
|
||||||
|
@ -42,9 +42,10 @@ ParamAttribs: .res 1 ; Used as parameter to subroutine
|
|||||||
|
|
||||||
PrevOAMCount: .res 1 ; Store the previous number of bytes that were sent to the OAM
|
PrevOAMCount: .res 1 ; Store the previous number of bytes that were sent to the OAM
|
||||||
|
|
||||||
|
Seed: .res 2 ; Initialize the 16-bit seed to any value except 0
|
||||||
|
|
||||||
ActorsArray: .res MAX_ACTORS * .sizeof(Actor)
|
ActorsArray: .res MAX_ACTORS * .sizeof(Actor)
|
||||||
|
|
||||||
Seed: .res 1 ; Used as the RANDOM NUMBER GENERATOR SEED
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; PRG-ROM code located at $8000
|
;; PRG-ROM code located at $8000
|
||||||
@ -69,6 +70,29 @@ LoopButtons:
|
|||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; Returns a random 8-bit number inside A (0-255), clobbers Y (0).
|
||||||
|
;; Requires a 2-byte value on the Zero page called "Seed"
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; This is a 16-bit Galois Linerar Feedback Shift register with polynomial $0039
|
||||||
|
;; The sequence of numbers it generates will repeat after 65535 calls.
|
||||||
|
;; Execution time is an average of 125 cycles (excluding jsr and rts)
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
.proc GetRandomNumber
|
||||||
|
ldy #8 ; Loop counter (generates 8 bits)
|
||||||
|
lda Seed+0
|
||||||
|
: asl ; Shift the register
|
||||||
|
rol Seed+1
|
||||||
|
bcc :+
|
||||||
|
eor #$39 ; Apply XOR feedback when a 1 bit is shifted out
|
||||||
|
:
|
||||||
|
dey
|
||||||
|
bne :--
|
||||||
|
sta Seed+0 ; Saves the value in A into the Seed
|
||||||
|
cmp #0 ; Set flags
|
||||||
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Subroutine to load all 32 color palette values from ROM
|
;; Subroutine to load all 32 color palette values from ROM
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
@ -258,7 +282,13 @@ EndRoutine:
|
|||||||
sta ParamType ; Load parameter for the actor type
|
sta ParamType ; Load parameter for the actor type
|
||||||
lda #223
|
lda #223
|
||||||
sta ParamXPos ; Load parameter for actor position X
|
sta ParamXPos ; Load parameter for actor position X
|
||||||
lda #185
|
jsr GetRandomNumber ; load random number into A
|
||||||
|
|
||||||
|
lsr ; Divide by 8 (right shift thrice)
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
clc
|
||||||
|
adc #180 ; add 180 to lower it
|
||||||
sta ParamYPos
|
sta ParamYPos
|
||||||
|
|
||||||
jsr AddNewActor ; Call the subroutine to add the new missile actor
|
jsr AddNewActor ; Call the subroutine to add the new missile actor
|
||||||
@ -277,7 +307,16 @@ EndRoutine:
|
|||||||
sta ParamType ; Load parameter for the actor type
|
sta ParamType ; Load parameter for the actor type
|
||||||
lda #235
|
lda #235
|
||||||
sta ParamXPos ; Load parameter for actor position X
|
sta ParamXPos ; Load parameter for actor position X
|
||||||
lda #60
|
jsr GetRandomNumber ; load random number into A
|
||||||
|
|
||||||
|
lsr ; Divide by 4 (right shift twice)
|
||||||
|
lsr
|
||||||
|
clc
|
||||||
|
adc #35 ; add 35 to lower it, so its not in the status bar
|
||||||
|
|
||||||
|
;Adjust the random Y to be between top and bottom
|
||||||
|
|
||||||
|
|
||||||
sta ParamYPos
|
sta ParamYPos
|
||||||
|
|
||||||
jsr AddNewActor ; Call the subroutine to add the new missile actor
|
jsr AddNewActor ; Call the subroutine to add the new missile actor
|
||||||
@ -515,30 +554,6 @@ EndRoutine:
|
|||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;; Returns a random 8 bit number inside A (0-255), clobbers Y (0)
|
|
||||||
;; requires 1-byte value on the Zero Page called Seed
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;; this is an 8 bit galois LFSR with polynomial $1D
|
|
||||||
;; The sequence of numbers it generates will repeat after 255 calls
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
.proc GetRandomNumber
|
|
||||||
ldy #8 ; Loop counter (generates 8 bits)
|
|
||||||
lda Seed ;
|
|
||||||
|
|
||||||
Loop8Times:
|
|
||||||
asl ; Shift the register left
|
|
||||||
bcc :+ ;
|
|
||||||
eor #$1D ; Apply XOR feebback when a 1bit is shifted out
|
|
||||||
: ;
|
|
||||||
dey ;
|
|
||||||
bne Loop8Times ;
|
|
||||||
|
|
||||||
sta Seed ; Saves the value in A
|
|
||||||
cmp #0 ;
|
|
||||||
rts ;
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Reset handler (called when the NES resets or powers on)
|
;; Reset handler (called when the NES resets or powers on)
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
@ -557,6 +572,10 @@ InitVariables:
|
|||||||
lda #165
|
lda #165
|
||||||
sta YPos
|
sta YPos
|
||||||
|
|
||||||
|
lda #$10
|
||||||
|
sta Seed+1
|
||||||
|
sta Seed+0 ; Initialize the seed with any value not zero
|
||||||
|
|
||||||
Main:
|
Main:
|
||||||
jsr LoadPalette ; Call LoadPalette subroutine to load 32 colors into our palette
|
jsr LoadPalette ; Call LoadPalette subroutine to load 32 colors into our palette
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user