
Bare Metal Assembly Raspberry Pi Starfox Tribute - thisisnkp
https://www.youtube.com/watch?v=-5n9IxSQH1M
======
userbinator
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-...](http://hbfs.wordpress.com/2009/07/28/faster-than-bresenhams-
algorithm/)

~~~
lnandor
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.

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

~~~
mobiuscog
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.

------
samwilliams
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/](https://github.com/xu-
ji/assembly_chess/)

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

------
thisisnkp
Github: [https://github.com/ICTeam28/PiFox](https://github.com/ICTeam28/PiFox)

------
retroencabulato
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
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
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?

------
kator
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
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
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).

~~~
pjmlp
Not only Acorn/RISC OS, but all 8 and 16 bit home systems.

The main issue is of course portability, but I had lots of fun with Assembly
during that timeframe.

Do you know how RISC OS fares in the Raspberry PI?

~~~
JamesAn
I haven't used it yet, but it seems to be faring okay.

[http://riscpi.co.uk/sales-
riscospi/?doing_wp_cron=1403977657...](http://riscpi.co.uk/sales-
riscospi/?doing_wp_cron=1403977657.5454409122467041015625)

You can also download RiscPC or Archimedes emulators, e.g.

[http://www.marutan.net/rpcemu/](http://www.marutan.net/rpcemu/)

------
slipstream-
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_
Looks like there's a tiny little emulator for this, too.

[https://github.com/ICTeam28/PiEmu](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.

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

~~~
voltagex_
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
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_
To add to this, the latest "official" Raspberry Pi toolchain is at
[https://github.com/raspberrypi/tools](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?

------
lukegb
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_
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
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_
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
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
This is amazing! -Shea

