Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
You are not logged in - nap
CSDb User Forums


Forums > C64 Coding > Questions about Basic-statements and logic
2015-07-26 00:43
Rudi
Account closed

Registered: May 2010
Posts: 125
Questions about Basic-statements and logic

Hi,

//PW is DIM-table to {1,2,4,8,16,32,64,128}
210 B1 = PW(7-D0)
212 B2 = PW(R7)
214 B3 = PW(7-D1)
220 P1 = (PEEK(W+B) AND B1) / B1
222 P2 = (PEEK(W+A) AND B2) / B2
224 P3 = (PEEK(W+C) AND B3) / B3

I changed 220, 222 and 224 to:
220 P1 = (PEEK(W+B) AND B1)
222 P2 = (PEEK(W+A) AND B2)
224 P3 = (PEEK(W+C) AND B3)

and added the lines:
226 IF P1=B1 THEN P1=1
227 IF P2=B2 THEN P2=1
228 IF P3=B3 THEN P3=1

but it seems slower. IF..THEN slower than the divides. I guess Basic is doing alot of logic for this and waste more cycles. any ideas what to do to remove the divides?

I first thought of doing a lookup table, but that doesnt. In worst case I have to poke or read data statements of shift-opcodes, but are there any other ways?
Thanks.
 
... 15 posts hidden. Click here to view all posts....
 
2015-08-03 13:53
Fresh

Registered: Jan 2005
Posts: 101
This thread tickled me, I couldn't resist writing my own version.
Here it is a different approach and 192 bytes:
https://www.dropbox.com/s/qh2yb562u96qi0s/eca.zip?dl=0
2015-08-03 20:59
Rudi
Account closed

Registered: May 2010
Posts: 125
Fresh: cool! that's how it should be done, and runs fast too
2015-08-04 05:39
Oswald

Registered: Apr 2002
Posts: 5094
indeed, but the patterns doesnt seem as chaotic as they shoould be but thats just my gut feeling.
2015-08-04 07:26
bugjam

Registered: Apr 2003
Posts: 2589
Created an entry for it: ECA.
Cheers!
2015-08-04 13:36
Fresh

Registered: Jan 2005
Posts: 101
There were room for further (little) improvements: this final version is 7 bytes shorter and a bit faster.
In the same zip there's another binary: in that version the rule is incremented every frame (starting from 106) so you get some kind of a "slideshow".
https://www.dropbox.com/s/0vxogaeacllylsp/eca2.zip?dl=0
2015-08-04 14:20
Rudi
Account closed

Registered: May 2010
Posts: 125
Quote: There were room for further (little) improvements: this final version is 7 bytes shorter and a bit faster.
In the same zip there's another binary: in that version the rule is incremented every frame (starting from 106) so you get some kind of a "slideshow".
https://www.dropbox.com/s/0vxogaeacllylsp/eca2.zip?dl=0


cool. is it tricky to do double buffering? also, would it run faster if you don't use random number generator on each iteration but use the same initial condition?

(edit: to get one specific rule in algebraic form use: http://www.wolframalpha.com/input/?i=rule+106+algebraic but wheter or not it can reduce some logic is uncertain. it's also stuck to one rule or fewer rules depending on the algebraic formula. for example rule 90 only needs two inputs: p and q, so r is not needed :P)
2015-08-06 10:36
Fresh

Registered: Jan 2005
Posts: 101
@Rudy: both features, double buffering and saving the first row, are not that hard to add but I've got something nicer in mind, I'm going to work on in it during the WE.
@Bugjam: I've seen you've added 2 new releases. Thats fine, thanks, but I'll probably post more code in this thread and I wouldn't like to flood csdb with my own WIPs. So, please ask me before adding. Hope you won't mind, there's nothing personal about this.
@Oswald: I'm using SID as random generator, maybe it doesn't produce a nice sequence...

Here it is a shorter (165) and yet a bit faster version.
https://www.dropbox.com/s/xtlerfbxbtwtdy9/eca3.zip?dl=0

I think that this is my limit in terms of size.

Edit:
@Bugjam: Rudi must be credited for the idea in both releases. Thank you.
2015-08-06 11:43
Rudi
Account closed

Registered: May 2010
Posts: 125
Fresh: nice work. oh, im sure ECA4.zip will come pretty soon :P whats WE? is $d012 bad as PRNG? ive used it a couple of times. but in a loop where accumulator changes. eor $d41b or eor $d012. i cant compile your versions because i dont use kickassembler. i use 64tass.
2015-08-06 12:11
bugjam

Registered: Apr 2003
Posts: 2589
@Fresh: credits to Rudi added.
No offence taken, won´t add any more.
2015-08-06 13:37
Fresh

Registered: Jan 2005
Posts: 101
@Bugjam: Thanks.
@Rudi: WE = weekend :). I've just added a tass source in ECA3.zip. You can use $d012 as PRNG in Basic but as soon as you shift to assembly you realize that it's too slow and repetitive: SID noise generator is more reliable. However, if you're interested in the topic, there are some useful and smarter solutions in codebase64.
Previous - 1 | 2 | 3 - Next
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
sln.pixelrat
Guests online: 105
Top Demos
1 Next Level  (9.7)
2 13:37  (9.7)
3 Mojo  (9.7)
4 Coma Light 13  (9.6)
5 Edge of Disgrace  (9.6)
6 What Is The Matrix 2  (9.6)
7 The Demo Coder  (9.6)
8 Uncensored  (9.6)
9 Comaland 100%  (9.6)
10 Wonderland XIV  (9.6)
Top onefile Demos
1 No Listen  (9.6)
2 Layers  (9.6)
3 Cubic Dream  (9.6)
4 Party Elk 2  (9.6)
5 Copper Booze  (9.6)
6 Dawnfall V1.1  (9.5)
7 Rainbow Connection  (9.5)
8 Onscreen 5k  (9.5)
9 Morph  (9.5)
10 Libertongo  (9.5)
Top Groups
1 Performers  (9.3)
2 Booze Design  (9.3)
3 Oxyron  (9.3)
4 Triad  (9.3)
5 Censor Design  (9.3)
Top Diskmag Editors
1 Magic  (9.8)
2 hedning  (9.6)
3 Jazzcat  (9.5)
4 Elwix  (9.1)
5 Remix  (9.1)

Home - Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.229 sec.