Interactive Raycaster For the Commodore 64 Under 256 Bytes
New submitter Wisdom writes "1bir (1 Block Interactive Raycaster) is a simple ray casting engine implemented only in 254 bytes to run on a stock, unexpanded Commodore 64. The name comes from the fact that on a C64 floppy disk, 1 block is equivalent to 254 bytes stored on a disk sector. In 254 bytes, 1bir sets up the screen for drawing, creates sine and cosine tables for 256 brads based on a simple approximation, casts rays into a 2D map that lives inside the C64 KERNAL ROM, renders the screen in coordination with KERNAL, evaluates 8-way joystick input and detects collision against walls. The ray casting core employs a brute force algorithm to determine visible walls, while the mapping portion supports both open-ended (infinitely looped) and traditional, closed maps. The source code in 6502 assembly is available, with extensive comments. A YouTube video showcases 1bir in a detailed manner with both kind of maps and more information, while a Vimeo video presents a shorter demonstration."
NEVAR!!!!
Don't underestimate the productivity of being able to work on a hobby project you enjoy
My UID is prime... is yours?
Good thing it only took him 30 years of development to come up with this. Had the software been around when I used a C64 (when they were the state of the art) I would probably still be looping around inside those maps.
I work with a health IT company that's trying to give doctors better tools to solve and treat disease. Our project could improve the lives of lots of folks, and its quite difficult to find talented technical folks to join the team.
I appreciate this is a cool hobby project, I just wish the guy would use his not inconsiderable talents to work on something that has a more obvious real-world payoff (unless this is all a hologram running on 4x10^16 Commadore 64s).
I got an idea.Pay him to do it. Your company works for money.
You wouldn't be working for one of the two dozen firms doing mobile apps for connecting doctors to patients, looking for funding, explaining how you work "with" and not "for"?
world was created 5 seconds before this post as it is.
The source code is zipped. For a 254 byte program. This just tickles me for some reason.
The vimeo link leads to this article.
It is nice to see that in this world of plenty (at least as far as system memory and CPU speed goes) some people find joy in efficiency; and they go so far as to pull something like that off, just for the fun of it. Needless to say, the dude that did this is a real programmer.
Dunno if the link was bad for anyone else, but here's the actual vimeo link.
The next time you churn your next 500MB printer driver think about programs like this. Think long and hard.
It's interesting to note that the code uses two "undocumented" 6510 instructions:
These instructions are undefined; they work by taking advantage of the internal CPU architecture to execute a hybrid of other legal opcodes. A lot of other older processors have such behavior, such as the Z80. Even the 8086 had a bit of this: "pop cs" and the second encoding of "sar" come to mind. (The 8086's "pop cs" was stolen by the 286 to mean an escape to a second opcode page.)
"Screw Sun, cross-platform will never work. Let's move on and steal the Java language." - Visual J++ Product Manager
The Vimeo link in the story somehow became broken, the correct link is as follows:
http://vimeo.com/66004524
I work with an advanced robotics research firm that's trying to take humans out of fragile, disease-ridden bodies and put them in immortal robot bodies. Our project would allow humanity to transcend mortal existence, and it's quite difficult to find talented technical folks to join the team.
I appreciate your cool hobby project, I just wish you would use your not inconsiderable talents to work on something that has a more obvious long-term payoff.
As a bioinformatician who's trying to give researchers better tools to identify disease, whose projects could also improve the lives of lots of folks: this is not that kind of programming. Demoscene programmers are generally hired by graphics companies and embedded systems development, where their formidable optimization abilities actually get put to use; those skills are not transferable to general high-performance computing. You'll have to keep hiring out of the general CS grad pool.
Bio questions? Ask me to start a Q&A journal. Computer analogies available for most topics!
Send him a job offer. He obviously is quite driven. That's a quality that can be hard to find.
Can't find talented technical folks to join the team, or can't find talented technical folks to join the team for well below market wages?
Usually when people say one, they really mean the other.
-- "So they told me that using the download page to download something was not something they anticipated." - Bill Gates
Projects like this are a great way to train new engineers for small embedded systems. There is a lot of work out there on 8-bit systems with a couple k of program space and a few hundred bytes of ram. At my place we actively collect books that targeted advanced computer programming techniques in the early 80's, because they line up good with the resources we typically have on a microcontroller that costs $1.27 now .
For example, given a 128x96 black and white LCD, create an algorithm that will draw a line between any two points. Oh, and you can only use integer math, and we'd prefer it if you kept division operations to a minimum, because we have to do division through a software library call...
The old-timers did that stuff in their spare time 30 years ago.
Actually the skills do transfer. The techniques of code optimization are many and universal. Which ones constitute acceptable use depends on the application (i.e. mathematical approximations are not always OK). From what I keep reading, HPC focuses a lot on matrix math - an area where some tricks can help a lot without affecting the results. I was manipulating 1GB 3d data sets interactively on a machine with 128M of RAM back in the day, and I suspect the technique has not gone mainstream yet.
I work with a health IT company that's trying to give doctors better tools to solve and treat disease.
That's cool. I'm between jobs right now, so I have a lot of time on my hands. But the bright side is that just a few dollars from my unemployment check will buy a whole bunch of eggs, so I'm cool.
Say, why don't you tell me where you live, and I'll come over and we'll talk about that disease treating thingie you're interested in.
Wow... perhaps there is some hope for Doom 2600 after all...
Hang on there. Why are you using your talents on a project that may save 1000s when you could be working in vaccination projects that could save 10s of 1000s? Wait! Forget that. You and those time wasting vaccination workers should be focused on biotechnology that could create crops to feed millions world wide!
Hold it! Scratch that. Global warming will end up destroying the entire planet. Get those lay-about biotech-crop workers on that!
Wait! Heat death of the universe. Only billions of years away and effects EVERYTHING. Stop wasting time on trivial projects and solve the most important problem in the universe! /thread
Page 0. 'Nuf said.
4 KB expansion card (for 1540/1). 'Nuf said.
MC reset switch. 'Nuf said.
Phonome-based, wire-wrapped, GP256 speech-synth for the IO port. 'Nuf said.
But an Amiga was so far beyond, just a few short years later, that it is stupid to even consider the C64 worthy of anything at all. 'Nuf said.
and the second encoding of "sar" come to mind
Sorry, but it's "SHL" that has a duplicate encoding on x86. There are four slots for non-rotating shift instructions in "group 2": 4=SHL, 5=SHR, 6=???, 7=SAR. The /6 variant looks like it ought to be "SAL", and it is. However, unsigned left shifting is equivalent to signed left shifting, and thus the two opcodes end up doing the same thing. The original 8086 happy processed this instruction as a signed left shift because of how it interpreted the opcode bits, but that's the same as an unsigned left shift.
This was retained in modern processors, whereas "pop cs" was not.
"Screw Sun, cross-platform will never work. Let's move on and steal the Java language." - Visual J++ Product Manager
Do you visit model railroad clubs and chastise them for playing with toys when there's so much real freight to be moved?
The C64 is worthy of fun.
FC Closer
Will this run on my VIC-20?
Otherwise, meh.
"I believe in Karma. That means I can do bad things to people all day long and I assume they deserve it." : Dogbert
How do you even know what he is using his talents for at his day job? This type of project is
fun, allows a programmers to relax, reduce stress, and unwind but also allows them to hone
their skills so that there actually are "talented technical folks" for you to hire. I have yet to
meet a great programmer that doesn't do this sort of thing in their spare time and therefore
I honestly believe that eliminating this sort of behavior would actually reduce your ability to
hire qualified candidates.
My 6502 is not completely lost.
Here is how to optimize the code a little bit:
Replace:
with:
This saves 2 bytes and a few cycles.
This was done a decade ago for the Color Computer (6809). A self-modifying 3d engine in ~256 bytes was turned into a full "doom" style 3d game.
http://members.optusnet.com.au/nickma/ProjectArchive/crasher.html
With video!
https://www.youtube.com/watch?v=jVFn_djQ6EY
I got a kick out of the use of bytes already in ROM as the map. I did something similar for an old DOS game of mine, Tunneler, where I used bytes taken from IBM PC ROM to replace the player's usual game view with a TV static/snow effect (simulated loss of signal). I grabbed bytes from an address in ROM that resulted in random-looking values interspersed with a few horizontal streaks. Know of any other games that made unusual use of ROM data?
Which ones constitute acceptable use [...]
And that's the trick. These people focus predominantly on mathematical approximations, extreme memory limitations, and knowing the ins-and-outs of the CPU itself, or the API they're using if it's a PC demo. All C64 demos are programmed in assembly. So while optimization is common to both fields, the level of detail is much too tight. In demo programming, effects are chosen because they optimize well. That doesn't fit with matrix programming or stats where accurately capturing an algorithm is the top priority—not just because mathematical approximations are undesirable, but because the complexity of many processes is the major bottleneck, and the operations themselves are simple and cannot be optimized through cheating.
Even if a demoscener did, for example, rewrite BLAST, the result would be completely unmaintainable, which is no good to anyone. It's much better to leave the optimization of scientific software to the compiler.
Bio questions? Ask me to start a Q&A journal. Computer analogies available for most topics!
> I work with a health IT company that's trying to give doctors better tools to solve and treat disease. Our project could improve the lives of lots of folks, and its quite difficult to find talented technical folks to join the team.
My most beloved word in the dictionary is "freedom". People are, today, still free to write stuff for fun if they want to for the C64.
My worst nightmare would be a world in which, in the name of morality, everybody was forced to work on something with "Real-World payoff" [TM]. And what would be the point of living in such a world? What's the point in being a slave, although a little bit healthier?
I choose to be a little less healthy, to live a little less longer and get the opportunity to be amazed by what people are still doing, for fun, on the C64.
Next version is coming up soon, with more features than you actually mentioned in your post. :-) (It will not be under 256 bytes, though). This was, as you said, made to prove that it can be done under 256 bytes. Therefore, the size limit does not really allow to add many more features than there are now (although it is still possible to add small improvements here and there, of course). Lastly, this does not utilize any LUT, except for the usual sine/cosine tables.
Yeah. I'm also tired of self-righteous people claiming we shouldn't have fun because, somewhere there's a person with a need. Life isn't about sacrificing all your interests to the need of others. Even Jesus let his feet get washed from time to time.
We should learn what we need to know about issues, before we decide what we need to feel about them.
Even if a demoscener did, for example, rewrite BLAST, the result would be completely unmaintainable
So same as it is now?
Your comments about exact calculations in this context strike me as kind of funny. The whole reason BLAST exists is because it replaces an expensive search for an optimal match with a heuristic method. It is at its core cheating to optimize a process that wasn't running fast enough. And if you take a look at how the original Smith–Waterman algorithm has been sped up, you'll see that clever ways to cut the code down so it will run on specialized hardware are exactly what people in the industry do. There are a lot of problems in the medical space that the classic demo scene skills wouldn't apply to, but improving BLAST is exactly the sort of thing I would hire one of those guys to do.
Up to a point, I agree with you—I've even implemented some optimizations of Smith-Waterman myself, so I know how bad it can get. The thing is, to fully maximize the kinds of cheating that you typically see in demos, you usually have to sacrifice the flexibility of the algorithm itself. A lot of the genius in low-power C64 and Amiga demos comes from precalculating data and constraining the perspectives from which the image on screen is shown; they're illusions. While a demoscene programmer may be excellent at core optimization tasks, these abilities in particular would be go unused. (Metaphors about cutting raw meat with a bread knife come to mind.) It would be better to look for someone more dedicated to the job, especially if they have experience with parallel processing and high-performance computing.
Of course, that's not to say there aren't individuals interested in all three categories—graphics tricks, code optimization, and high-performance computing—but the aptitudes aren't correlated. Demosceners are motivated by a strong sense of community, the audacity of their medium, and the gratification of seeing their work in action (see documentary), which doesn't jive well with what computational biology offers.
...that being said, I'm a computational biologist, I'm pretty fond of the demoscene, and I hate BLAST; where do I sign? :)
Bio questions? Ask me to start a Q&A journal. Computer analogies available for most topics!
I got an idea.Pay him to do it. Your company works for money.
Heh. Money well spent on Health IT innovations.
-
sorry, spilt my coffee.
If I had a DeLorean... I would probably only drive it from time to time.
For those of us under 40 years old, there is quite a lot more to be said. I have no idea what half of what you said even stands for.
Page 0
1540/1
MC reset = Master Control?
Phonome-based
Unity? Screw that: XFCE. Slashdot Beta? Screw that: SoylentNews. Australis? Screw that: Pale Moon. UX developers DIAF
I think it's a necessity to have fun.
Yes, life can be hard, cruel and short, but those are all reasons to enjoy it anytime you have the possibility.
I appreciate this is a cool hobby project, I just wish the guy would use his not inconsiderable talents to work on something that has a more obvious real-world payoff
So people need to work on productive stuff that will save lives and treat disease, 24/7. They can't go to the movies, they can't go to the park, they can't take a break. The MUST always be doing something productive? You know, stuff like this is the way some people take a break from their other work. Maybe they enjoy solving problems, or doing something different sometimes. Maybe this person learned something from this?
Everyone can't be solving hard problems all the time.
I own HP printers and scanners, I know what I am saying is a fact. HP printer drivers are still stupidly oversized. If you're using a real printer that speaks a real language you don't even need a driver, just the PPD, and that is actually provided for some models. But for their more primitive printers (like personal laserwriters, which for the most part don't even speak PCL) you need to download a massive driver that probably won't work on the next version of Windows. I've owned several HP printers specifically because the prior owners could no longer use them due to an OS upgrade.
Nice to see there's an HP shill here, though. I wouldn't have thought they could afford them any longer.
"You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
Yes, as I wrote also on Pouet, you can use/distribute it. I just ask you to kindly mention in your app that this was done by Crescent, as due to size restriction, it is not mentioned anywhere in the actual demo. Thank you!
By all means, feel free to point out anything specific; I apologise if I've misconstrued anything.
Bio questions? Ask me to start a Q&A journal. Computer analogies available for most topics!
In all fairness, here's the best the Commies have to offer:
M.O.O.D.
http://www.youtube.com/watch?v=X3Oqz5WjDPI
And here's the Atarians best attempt at a Wolfenstein 3D clone:
Project-M
http://www.youtube.com/watch?v=Z3-J2-VeoH8
You be the judge.
Daniel Klugh
I was aware of that, and I feel my point stands: essentially, it would be cruel to hire someone based on a portfolio of work that emphasizes skills the job doesn't require. It's important to recognize how much of a demo is trickery, and that those abilities won't necessarily transfer to a typical real-world job. (Otherwise it wouldn't be a "break" for sceners to work on demos, as you say.)
Bio questions? Ask me to start a Q&A journal. Computer analogies available for most topics!
Granted, yes.
Bio questions? Ask me to start a Q&A journal. Computer analogies available for most topics!
Actually, a lot of the really talented people go to finance.
Whether they help humanity on the whole is debatable.
Since you said company, I suspect it plans to turn a profit on this. Either convert to a non-profit and ask him to contribute or send him paying job offer.