Slashdot Mirror


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."

23 of 143 comments (clear)

  1. Re:Real-work problem? by Deltaspectre · · Score: 5, Insightful

    Don't underestimate the productivity of being able to work on a hobby project you enjoy

    --
    My UID is prime... is yours?
  2. Re:Real-work problem? by gl4ss · · Score: 5, Insightful

    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.
  3. Zip? by ZahrGnosis · · Score: 5, Funny

    The source code is zipped. For a 254 byte program. This just tickles me for some reason.

    1. Re:Zip? by jeffmeden · · Score: 4, Funny

      The source code is zipped. For a 254 byte program. This just tickles me for some reason.

      When you have a 300 baud modem on your C64 and Delphi Online charges by the minute, every last byte adds up!

    2. Re:Zip? by tgd · · Score: 4, Interesting

      The source code is zipped. For a 254 byte program. This just tickles me for some reason.

      When you have a 300 baud modem on your C64 and Delphi Online charges by the minute, every last byte adds up!

      The funny thing is, back then the handy thing about 300 baud was there was no need to pipe things to more -- you could just cat a file and read it as it downloaded ...

      Stupid 1200 baud modems messed that all up ...

  4. kudos by excelsior_gr · · Score: 5, Informative

    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.

  5. Vimeo, Vimeo, wherefore art though, Vimeo? by Anonymous Coward · · Score: 4, Informative

    Dunno if the link was bad for anyone else, but here's the actual vimeo link.

  6. HP Printer Driver Developers Take Note by parlancex · · Score: 5, Insightful

    The next time you churn your next 500MB printer driver think about programs like this. Think long and hard.

    1. Re:HP Printer Driver Developers Take Note by Solandri · · Score: 4, Informative

      The printer driver itself wasn't 500 MB. What happened was that some manager at HP decided tech support was wasting too much time (money) instructing people on how to navigate their byzantine support website to find and download the correct drivers for their printer. So they glommed the drivers for all of their printers into one big binary and told people to just download that.

      IMHO the real lesson from the HP printer drive fiasco is that if it's quicker and easier to find something on your website by doing a Google search for it, you need to redesign your website. HP eventually did that, and their site now lets you just type the printer's name and it'll take you directly to its download page.

  7. Uses two undocumented / illegal instructions by Myria · · Score: 5, Interesting

    It's interesting to note that the code uses two "undocumented" 6510 instructions:

    lax $91
    anc #$00 ; clears carry for sinadd below

    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
  8. Re:Real-work problem? by Anonymous Coward · · Score: 5, Funny

    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.

  9. Re:Real-work problem? by Samantha+Wright · · Score: 4, Interesting

    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!
  10. Re:Real-work problem? by Tridus · · Score: 5, Insightful

    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
  11. Re:Real-work problem? by gr8_phk · · Score: 5, Insightful

    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.

    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.

  12. Re:(oblig) Better late than never by cold+fjord · · Score: 4, Interesting

    Had the software been around when I used a C64 (when they were the state of the art) . .

    What do you mean? C64 still is state of the art . . . for 1982.

    On the other hand, a clever hack borders on being timeless - for example and inspiration if nothing else.

    Certainly in a time of ever greater bloatware it can border on mind-blowing to consider what people used to do, and some still do, in handfuls or hundreds of bytes: The Puzzle

    Visual Transistor-level Simulation of the 6502 CPU

    --
    much of left-wing thought is a kind of playing with fire by people who don't even know that fire is hot - George Orwell
  13. Re:Bad link in summary by Solandri · · Score: 4, Funny

    Recursion is the key to generating small op code.

  14. Re:Real-work problem? by Beorytis · · Score: 5, Insightful

    Do you visit model railroad clubs and chastise them for playing with toys when there's so much real freight to be moved?

  15. Re:OMFG !! by LocalH · · Score: 4, Insightful

    The C64 is worthy of fun.

    --
    FC Closer
  16. Optimization by eulernet · · Score: 4, Interesting

    My 6502 is not completely lost.
    Here is how to optimize the code a little bit:

    Replace:

    loop_stepadd
                            lda stepx,x ; & y
                            ora #$7f ; sign extend 8 bit step value to 16 bit
                            bmi *+4
                            lda #$00
                            pha ;clc
                            lda stepx,x ; & y
                            adc rayposx,x ; & y
                            sta rayposx,x ; & y
                            pla

    with:

    loop_stepadd ;clc
                            lda stepx,x ; & y
                            adc rayposx,x ; & y
                            sta rayposx,x ; & y
                            lda stepx,x ; & y
                            ora #$7f ; sign extend 8 bit step value to 16 bit
                            bmi *+4
                            lda #$00

    This saves 2 bytes and a few cycles.

    1. Re:Optimization by Wisdom · · Score: 4, Funny

      Well spotted, I missed that one out. :-) Usual problem of looking at the same thing for so long, now it perplexes me how I missed such an easy one. :-)

    2. Re:Optimization by eulernet · · Score: 4, Interesting

      Well, it was not obvious.

      I originally wanted to optimize the sign extend using some carry tricks, like asl/lda #0/sbc #0, but realized that it was unnecessary.
      In fact, you can improve it even more, as follows:

      lda stepx,x ; & y
                              bpl *+4
                              dec rayposxh,x
                              adc rayposx,x
                              sta rayposx,x
                              bcc *+4
                              inc rayposxh,x

      Saving 6 bytes !

      This trick is mentioned here:
      http://forum.6502.org/viewtopic.php?p=5262

      BTW, your tsx/txs trick is really horrible, it forces the stack at the bottom of $100.

  17. Re:Will this run . . . by Wisdom · · Score: 5, Interesting

    It is quite possible that it will run on VIC20, but it will probably need some modification to the actual render code (I do not have a VIC20, so I am not sure). Other than that, it should work, as RAM usage is minimal (just needs 320 bytes for sine/cosine tables, ZeroPage and the 1K video RAM).

    Nevertheless, I will include it in the next release. Thanks for the idea.

  18. Re: Real-work problem? by briancox2 · · Score: 4, Insightful

    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.