mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-04-29 14:38:11 +00:00
random16: update the cycle counts
This commit is contained in:
parent
803591a93c
commit
816d1a81f7
@ -11,35 +11,50 @@ SEEDH = $4F
|
|||||||
|
|
||||||
XOR_MAGIC = $7657 ; "vW"
|
XOR_MAGIC = $7657 ; "vW"
|
||||||
|
|
||||||
|
;=============================
|
||||||
|
; random16
|
||||||
|
;=============================
|
||||||
|
; takes:
|
||||||
|
; not 0, cc = 5+ = 27
|
||||||
|
; not 0, cs = 5+12+19 = 36
|
||||||
|
; $0000 = 5+7+19 = 31
|
||||||
|
; $8000 = 5+6+14 = 25
|
||||||
|
; $XX00 = 5+6+7+19 = 37
|
||||||
random16:
|
random16:
|
||||||
|
|
||||||
lda SEEDL
|
lda SEEDL ; 3
|
||||||
beq lowZero ; $0000 and $8000 are special values // ; Do a normal shift
|
beq lowZero ; $0000 and $8000 are special values ; 2
|
||||||
asl SEEDL
|
|
||||||
lda SEEDH
|
asl SEEDL ; Do a normal shift ; 5
|
||||||
rol
|
lda SEEDH ; 3
|
||||||
bcc noEor
|
rol ; 2
|
||||||
|
bcc noEor ; 2
|
||||||
|
|
||||||
doEor:
|
doEor:
|
||||||
; high byte is in .A
|
; high byte is in A
|
||||||
eor #>XOR_MAGIC
|
|
||||||
sta SEEDH
|
|
||||||
lda SEEDL
|
eor #>XOR_MAGIC ; 2
|
||||||
eor #<XOR_MAGIC
|
sta SEEDH ; 3
|
||||||
sta SEEDL
|
lda SEEDL ; 3
|
||||||
rts
|
eor #<XOR_MAGIC ; 2
|
||||||
|
sta SEEDL ; 3
|
||||||
|
rts ; 6
|
||||||
|
|
||||||
lowZero:
|
lowZero:
|
||||||
lda SEEDH
|
; 1
|
||||||
beq doEor ; High byte is also zero, so apply the EOR
|
lda SEEDH ; 3
|
||||||
|
beq doEor ; High byte is also zero ; 3
|
||||||
|
; so apply the EOR
|
||||||
|
; -1
|
||||||
; wasn't zero, check for $8000
|
; wasn't zero, check for $8000
|
||||||
asl
|
asl ; 2
|
||||||
beq noEor ; if $00 is left after the shift
|
beq noEor ; if $00 is left after the shift ; 2
|
||||||
; then it was $80
|
; then it was $80
|
||||||
bcs doEor ; else, do the EOR based on the carry bit
|
bcs doEor ; else, do the EOR based on the carry ; 3
|
||||||
|
|
||||||
noEor:
|
noEor:
|
||||||
sta SEEDH
|
; 1
|
||||||
|
sta SEEDH ; 3
|
||||||
|
|
||||||
rts
|
rts ; 6
|
||||||
|
@ -11,35 +11,50 @@ SEEDH = $4F
|
|||||||
|
|
||||||
XOR_MAGIC = $7657 ; "vW"
|
XOR_MAGIC = $7657 ; "vW"
|
||||||
|
|
||||||
|
;=============================
|
||||||
|
; random16
|
||||||
|
;=============================
|
||||||
|
; takes:
|
||||||
|
; not 0, cc = 5+ = 27
|
||||||
|
; not 0, cs = 5+12+19 = 36
|
||||||
|
; $0000 = 5+7+19 = 31
|
||||||
|
; $8000 = 5+6+14 = 25
|
||||||
|
; $XX00 = 5+6+7+19 = 37
|
||||||
random16:
|
random16:
|
||||||
|
|
||||||
lda SEEDL
|
lda SEEDL ; 3
|
||||||
beq lowZero ; $0000 and $8000 are special values // ; Do a normal shift
|
beq lowZero ; $0000 and $8000 are special values ; 2
|
||||||
asl SEEDL
|
|
||||||
lda SEEDH
|
asl SEEDL ; Do a normal shift ; 5
|
||||||
rol
|
lda SEEDH ; 3
|
||||||
bcc noEor
|
rol ; 2
|
||||||
|
bcc noEor ; 2
|
||||||
|
|
||||||
doEor:
|
doEor:
|
||||||
; high byte is in .A
|
; high byte is in A
|
||||||
eor #>XOR_MAGIC
|
|
||||||
sta SEEDH
|
|
||||||
lda SEEDL
|
eor #>XOR_MAGIC ; 2
|
||||||
eor #<XOR_MAGIC
|
sta SEEDH ; 3
|
||||||
sta SEEDL
|
lda SEEDL ; 3
|
||||||
rts
|
eor #<XOR_MAGIC ; 2
|
||||||
|
sta SEEDL ; 3
|
||||||
|
rts ; 6
|
||||||
|
|
||||||
lowZero:
|
lowZero:
|
||||||
lda SEEDH
|
; 1
|
||||||
beq doEor ; High byte is also zero, so apply the EOR
|
lda SEEDH ; 3
|
||||||
|
beq doEor ; High byte is also zero ; 3
|
||||||
|
; so apply the EOR
|
||||||
|
; -1
|
||||||
; wasn't zero, check for $8000
|
; wasn't zero, check for $8000
|
||||||
asl
|
asl ; 2
|
||||||
beq noEor ; if $00 is left after the shift
|
beq noEor ; if $00 is left after the shift ; 2
|
||||||
; then it was $80
|
; then it was $80
|
||||||
bcs doEor ; else, do the EOR based on the carry bit
|
bcs doEor ; else, do the EOR based on the carry ; 3
|
||||||
|
|
||||||
noEor:
|
noEor:
|
||||||
sta SEEDH
|
; 1
|
||||||
|
sta SEEDH ; 3
|
||||||
|
|
||||||
rts
|
rts ; 6
|
||||||
|
Loading…
x
Reference in New Issue
Block a user