| |
Heaven Account closed
Registered: Jul 2008 Posts: 102 |
Release id #172238 : Waves 16k
<Post edited by moderator on 11/12-2018 15:33>
ldx #0 ;top = 0
;we use Xreg as top
loop_fractal_line cpx #0
bpl @+ ;if x<0 go to drawing
jmp exit_fractal_line
@ lda sx2,x ;dx = abs(sx2-sx1)
sec
sbc sx1,x
bcs @+
eor #$FF
adc #1
@ cmp #2 ;if dx<2 skip to plot point
bcs subdiv_fractal_line
ldy sx1,x
lda sy1,x
sta heights,y
dex
bne loop_fractal_line
beq loop_fractal_line
subdiv_fractal_line lsr ;ed = dx/4
lsr
sta edge_displacement
lda sx2,x ;sx2 = int((sx1+sx2)/2)
sta sx2+1,x ;use it to copy to top+1
clc
adc sx1,x
lsr
sta sx2,x
sta sx1+1,x ;copy to top+1 also
lda sy2,x ;sy2 = int((sy1+sy2)/2)
sta sy2+1,x ;use it to copy to top+1
clc
adc sy1,x
lsr
sta sy2,x
lda st2,x ;st2 = st1+st2
sta st2+1,x ;use it to copy to top+1
clc
adc st1,x
sta st2,x
sta st1+1,x ;copy to top+1 also
bvs @+ ;if v<>0 skip displacement
bmi n_equal_1
lda sy2,x ;n == 0
clc ;sy2 += ed
adc edge_displacement
sta sy2,x
jmp @+
n_equal_1 lda sy2,x ;n == 1
sec ;sy2 -= ed
sbc edge_displacement
sta sy2,x
@ ;Copy new Y to top+1
lda sy2,x
sta sy1+1,x
inx ;top += 1
jmp loop_fractal_line
exit_fractal_line
|
|
| |
chatGPZ
Registered: Dec 2001 Posts: 11354 |
that would be so much better with a 'code' tag =D |
| |
Bitbreaker
Registered: Oct 2002 Posts: 504 |
So much precious cycles waster with sec/clc and no illegal spotted :-( |
| |
Heaven Account closed
Registered: Jul 2008 Posts: 102 |
@Bitbreaker...
yeah... ;)
we Atarians do not use illegals often due to 65816 boards :D.
no honestly. Axis teached me last week first time AXS e.g. so first time I used any illegal was LAX in Arsantica 3 and the Voxel... :D |
| |
Bitbreaker
Registered: Oct 2002 Posts: 504 |
All the lsr could be replaced with an asr #$fe and thus carry will stay clear and clc can be dropped, and i see even more potential :-) (sta sy2,x being stored and loaded again just on the next step, a comparision would suffice on the abs function, and that would save a sec) |
| |
Cruzer
Registered: Dec 2001 Posts: 1048 |
What
Groepaz
said |
| |
iAN CooG
Registered: May 2002 Posts: 3187 |
I edited the 1st post to reformat it with the code tags |
| |
Heaven Account closed
Registered: Jul 2008 Posts: 102 |
@bitbreaker
ah thx. I guess I will revisit the fractal core. :D
btw. if you wonder what ST1 and ST2 is. It's what Carpenter calls "node tag values" and those represent the characteristics of the line (e.h. "mountain" or "cloud" etc).
so... say fractline(0,100,4 to 319,100,4) will be different to fractline(0,100,20 to 319,100,4). Even Tag1 4 and Tag2 5 should be different.
http://old.siggraph.org/publications/rarities/carpenter-1980sup.. |
| |
Heaven Account closed
Registered: Jul 2008 Posts: 102 |
Quote: All the lsr could be replaced with an asr #$fe and thus carry will stay clear and clc can be dropped, and i see even more potential :-) (sta sy2,x being stored and loaded again just on the next step, a comparision would suffice on the abs function, and that would save a sec)
another idea was exchange x reg with y reg as I moved the height array into ZP... just saw in c64debugger that STA height,y is $00xx.... |
| |
Bitbreaker
Registered: Oct 2002 Posts: 504 |
If things happen linearly one could also push bytes to stack instead of storing and read them back with lda $0100,y
Interrupts should not matter, as they add bytes at the bottom end. X gets interesting as index then again as tsx fethes the proper position in stack for indexed reads again. |
| |
Bitbreaker
Registered: Oct 2002 Posts: 504 |
the cpx #0 can also be omitted, as this point is eitehr reached after ldx, dex, inx that all set the minus-flag anyway, also
bne loop_fractal_line
beq loop_fractal_line
can be replaced by a jmp |
... 18 posts hidden. Click here to view all posts.... |
Previous - 1 | 2 | 3 - Next |