By making this page, the project becomes real and I have to do it.
Requirements:
- Keep a dev-log
- No third-party software, not even the boot loader. Can be programmed in a high level language though.
- d-pad, A and B buttons, Start and Select buttons, power button
- Black and white screen
- Can play Snake
Stretch goals:
- Complete handheld system, battery powered
- Sound. Perhaps a little piezoelectric speaker for beeps and bloops
- Multiple games
Nice to have:
- Produce reusable pieces and publish them separately. E.g. the bootloader or screen driver, that kind of thing.
I've been fascinated by software for a long time, and particularly the nitty gritty of how a computer actually does its thing. This project is a way to really get to grips with that nitty gritty by delving into embedded programming, doing away most of the abstractions we tend to layer on top of things when we actually want to get stuff done. That said, I do also want to get something done at some point, and one of the ways I'll try and do that is by keeping the hardware simple and easy to work with.
I've worked with Cortex-M microcontrollers before, namely on the Seeeduino XIAO and the ARM Mbed board, so I thought this would be a good place to start. More powerful than the AVR chips in most Arduino boards, with, in my opinion, better tooling support, I didn't have to think much about this one. Looking into what was available, I quickly discovered the Raspberry Pi Pico, a microcontroller from the Raspberry Pi foundation built around their own Cortex-M0+ based chip called the RP2040. It came out since I was last looking into this stuff, and frankly it's pretty dang awesome. They have extensive, user friendly documentation, a well maintained and easy to use SDK, and a bunch of other things that make my little nerd heart sing. My favourite might be that you can use a second Pico as a debug adaptor! Given that each Pico is less than £4, this is a for more palatable proposition than traditional debug probes, which are aimed at professionals and costing hundreds.
With a microcontroller picked out, I moved on to the other parts I'd need. I picked out buttons, a screen, and even a little PCB speaker. I actually ended up making a mistake with the buttons, ending up with ones which were far too tall, but they'll work just find for a prototype. The screen I picked out is a cute little white-on-black OLED board from Adafruit. It will all wire up pretty simply to the Pico's GPIO and SPI pins, ultimately putting the focus onto the software for now.
Eventually what I'd love to do is put it all together onto a custom PCB, but that's a ways down the line. With the parts ordered and now mostly set up on a breadboard, it's time to move on to the software! It's here that I start making life hard for myself.