random16: validated at cycles=42

This commit is contained in:
Vince Weaver 2018-09-10 15:13:34 -04:00
parent 70623e13fd
commit a3378d1192
2 changed files with 28 additions and 20 deletions

View File

@ -47,7 +47,7 @@ HOME = $FC58 ;; Clear the text screen
WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us
; jsr draw_fireworks jsr draw_fireworks
;================================== ;==================================
;================================== ;==================================

View File

@ -15,14 +15,14 @@ XOR_MAGIC = $7657 ; "vW"
; random16 ; random16
;============================= ;=============================
; takes: ; takes:
; not 0, cc = 6(r16)+12(lnz)+4(nop)+ 18(neo) = 40 ; not 0, cs = 6(r16)+12(lnz)+5(nop)+ 19(deo) = 42
; not 0, cs = 6(r16)+15(lnz)+19(deo) = 40 ; not 0, cc = 6(r16)+14(lnz)+2(nop)+ 20(neo) = 42
; $0000 = 6(r16)+ 6(loz)+ 9nops+ 19(deo) = 40 ; $0000 = 6(r16)+ 6(loz)+11nops+ 19(deo) = 42
; $8000 = 6(r16)+ 6(loz)+ 4(ceo) + 6nops+ 18(neo) = 40 ; $8000 = 6(r16)+ 6(loz)+ 4(ceo) + 6nops+ 20(neo) = 42
; $XX00 cc = 6(r16)+ 6(loz)+ 4(ceo) + 2(cep) 4nops+ +18(neo) = 40 ; $XX00 cc = 6(r16)+ 6(loz)+4(ceo)+2(cep) +4nops+ 20(neo) = 42
; $XX00 cs = 6(r16)+ 6(loz)+ 4(ceo) + 5(cep) +19(deo) = 40 ; $XX00 cs = 6(r16)+ 6(loz)+4(ceo)+4(cep) +3nops+ 19(deo) = 42*
random16: random16:
lda SEEDL ; 3 lda SEEDL ; 3
@ -34,13 +34,26 @@ lownz:
asl SEEDL ; Do a normal shift ; 5 asl SEEDL ; Do a normal shift ; 5
lda SEEDH ; 3 lda SEEDH ; 3
rol ; 2 rol ; 2
bcc four_cycle_no_eor ; 3 bcs five_cycle_do_eor ; 3
;========== ;===========
; 12 ; 12
bcs do_eor ; 3
bcc two_cycle_no_eor ; 3
;==========
; 12+3-1 = 14
;=================================================================== ;===================================================================
eleven_cycle_do_eor:
nop ; 2
nop ; 2
nop ; 2
five_cycle_do_eor:
nop ; 2
three_cycle_do_eor:
sta SEEDH ; nop ; 3
do_eor: do_eor:
; high byte is in A ; high byte is in A
@ -60,30 +73,25 @@ six_cycles_no_eor:
nop ; 2 nop ; 2
four_cycle_no_eor: four_cycle_no_eor:
nop ; 2 nop ; 2
two_cycle_no_eor:
nop ; 2 nop ; 2
no_eor: no_eor:
nop ; 2 nop ; 2
nop ; 2 nop ; 2
nop ; 2 nop ; 2
nop ; 2
sta SEEDH ; 3 sta SEEDH ; 3
jmp eor_rts ; 3+6 jmp eor_rts ; 3+6
;=========== ;===========
; 18 ; 20
;====================================================================== ;======================================================================
;====================================================================== ;======================================================================
nine_cycle_do_eor:
nop ; 2
nop ; 2
nop ; 2
jmp do_eor ; 3
low_zero: low_zero:
lda SEEDH ; 3 lda SEEDH ; 3
beq nine_cycle_do_eor ; High byte is also zero ; 3 beq eleven_cycle_do_eor ; High byte is also zero ; 3
; so apply the EOR ; so apply the EOR
;============ ;============
; 6 ; 6
@ -104,7 +112,7 @@ cep:
;============ ;============
; 2 ; 2
bcs do_eor ; 2+3 = 5 bcs three_cycle_do_eor ; 2+3-1 = 4