Settings

Theme

Bare Metal Assembly Raspberry Pi Starfox Tribute

youtube.com

139 points by thisisnkp 12 years ago · 36 comments

Reader

userbinator 12 years ago

Great work, it's always nice to see more Asm projects!

"Bare Metal" - does this mean the RPi can run blob-free?

A possible improvement I suggest is to gfx_draw_line in gfx.s - using a fixed-point algorithm could be simpler and faster: http://hbfs.wordpress.com/2009/07/28/faster-than-bresenhams-...

  • pjc50 12 years ago

    That depends on what you mean by "blob free"; this code doesn't use the GPU other than to setup the frame buffer. From then on it's software 3D.

  • lnandor 12 years ago

    Thanks for the feedback!

    Even though the game does not need an operating system, it still requires bootcode.bin and start.elf.

    The fixed point version of Bresenham's algorithm looks really nice on x86, but it uses integer division, so implementing it on an ARMv6 (no div instruction) would be quite painful.

    • userbinator 12 years ago

      In other words, this is comparable to booting a PC with a BIOS, and then the rest of the code that runs is yours. That's still pretty awesome.

      Consider participating in the demoscene, this is the sort of skills that would be great for that.

    • scotty79 12 years ago

      That reminds me of good old days of 6502 assembly and implementing bitshift based multiplication and division yourself.

      • mobiuscog 12 years ago

        Absolutely. I'm surprised that having to work around no 'div' is seen as painful compared to writing the rest of the game using 3D in assembly !

        Learning on 6502/Z80 meant most everything was from first principles, and although I'd hate to regress so far today (head would hurt) it really was a great way to start.

    • pjmlp 12 years ago

      Like the good old Amiga days. :)

      Place floppy on drive, press Ctrl+Amiga+Amiga and up you go.

      Congratulations.

samwilliams 12 years ago

This is extremely impressive - well done all!

There is a bare metal chess game [0] for the Pi that was presumably another teams entry for the same assignment (they are both from Imperial).

[0] https://github.com/xu-ji/assembly_chess/

  • lukegb 12 years ago

    Yes, it looks like it - they would have completed the assignment last year.

thisisnkpOP 12 years ago

Github: https://github.com/ICTeam28/PiFox

retroencabulato 12 years ago

I'm impressed first year students can write such clean assembly. Also that they can write both driver code and a higher level rasterizer.

  • pjmlp 12 years ago

    Why so? I was already looking at Assembly listing at the age of 12.

    When I was 16, I enjoyed using higher level languages but the real fun was doing Assembly.

    Kids these days real need to get some of this exploratory desire back.

    • timthorn 12 years ago

      Fully agree - children have amazing capacity to learn complex things. It's one reason why I'm nervous about code clubs using Scratch; the children can cope with more, so why limit them?

    • userbinator 12 years ago

      Indeed, a lot of demosceners are in this age range too, and look what they can do...

  • xupybd 12 years ago

    Yeah clearly not your average first year.

kator 12 years ago

Wow that brings back memories of building games on a TRS-80 Model I in z80 assembly!

Good show, I've often felt low level was a dying art, perhaps I'm wrong and stuff like this will push people to learn what a register is and what "flags" are.. :-)

marcosscriven 12 years ago

Very impressive. How things have changed - we did nothing quite so fun and practical in first year computing at Imperial back in 1995! Plus, now I feel old :)

JamesAn 12 years ago

A welcome return to the Acorn/RISC OS days where "100% ARM assembler" was a back-of-the-box boast for many games and applications (Sibelius).

slipstream- 12 years ago

Oh wow. This is awesome.

And here I am sitting here, with little x86 asm and z80 asm knowledge, reversing windows binaries and messing with Pokémon arbitrary code execution exploits. (optimizing my payloads for the 8F/"ws m" exploit is fun though!)

Been meaning to learn ARM asm for some time, but haven't got around to it.

voltagex_ 12 years ago

Looks like there's a tiny little emulator for this, too.

https://github.com/ICTeam28/PiEmu

I've got as far as installing the SDL headers (you're looking for SDL.h from SDL 1.2) and running cmake . but not much further.

  • lnandor 12 years ago

    Hello,

    I have added a more informative README and fixed a couple of issues that prevented the game from running. In case you need any more help, could we move this discussion to GitHub issues?

  • serialvelocity 12 years ago

    Hey, I'm part of the team who wrote this. What platform are you running on? and what errors are you getting?

    • voltagex_ 12 years ago

      Hey, congrats on this project.

      Mainly I was waiting to reboot into Linux to try to build this.

      You may want to add some instructions for building the game/emulator.

      For the emulator, I'd never used cmake before (sort of) so I didn't know to run cmake .

      Then the error about SDL (needed libsdl-dev package or similar)

      For the game, I'm currently downloading a Linaro ARM toolchain on a slow connection but I don't anticipate any further issues.

      • serialvelocity 12 years ago

        Thanks! It currently only works on Linux, so depending on your distro, you need to install the SDL package. If you're using Debian or Ubuntu (or derivatives), it will be sufficient to install the libsdl-dev and cmake packages using apt-get. Then create a build directory and use CMake to generate makefiles then build the emulator with make.

        To set up the build environment, follow these instructions:

           cd /dir/to/PiEmu/
           mkdir build
           cd build
           cmake ..
           make
        
        These instructions are also on the README.md for PiEmu in-case anyone else is wondering how to get it building.
        • voltagex_ 12 years ago

          To add to this, the latest "official" Raspberry Pi toolchain is at https://github.com/raspberrypi/tools. You probably want the one without hf in the name.

          serialvelocity - am I correct in assuming you're building for softfp?

        • voltagex_ 12 years ago

          I sit corrected. I'm currently having lots of trouble building the game because my cross compiler doesn't match the name of yours in the makefiles.

          > make[2]: arm-linux-gnueabi-as: Command not found

    • jnbiche 12 years ago

      Nice project! Did you use JTAG or some other (more painful) work flow?

lukegb 12 years ago

I have to say, this assignment in general has been my favourite part of first year (my group extended our assembler to look enough like GNU as that we could assemble the output of GCC, so we could compile CSUD).

Nice work - love it (might play it at some point to see if I'm any good).

voltagex_ 12 years ago

Looking at this project, I feel very very very dumb. I've been using computers for 2 decades and programming for 1 and I can't even imagine doing something like this!

  • BenDaglish 12 years ago

    Reading this comment made me very very sad. I've been programming computers for over 3 decades, and this is how we started off in my day. The "MyComputerification" of IT education during the 90's has a lot to answer for...

    • voltagex_ 12 years ago

      Don't worry, I'm currently writing a FAT32 reader from scratch and slowly making my way through a Peter Norton assembly tutorial from the 80s...

      My day job, on the other hand is nearly all web dev and admin work.

parley 12 years ago

Nicely done! I remember getting the original game for Christmas one year as a kid, and it was lots of fun. This brings back memories. Kudos!

SSilver2k2 12 years ago

This is amazing! -Shea

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection