Hackaday Badge Firmware Diet
I now have a basic understanding of Hackaday Belgrade 2018 badge's internal subsystems and how they fit together. Now it's time to start playing with the code. First to validate understanding before trying out some cool stuff.
When I'm in the early stages of experimentation and understanding, it's good to make the try/learn/repeat loop as fast as possible. In the case of playing with badge firmware, flashing new builds of the firmware becomes the most time-consuming part of the loop. In order to speed up the fun I'm going to trim off parts of the project and make a lighter weight version of badge firmware.
My primary interest is in writing custom user programs in C. These programs utilize the same low-level infrastructure (font display, scan keyboard, etc) as the BASIC interpreter and Z80 emulator. Since I'm less interested in BASIC or Z80 at the moment, those are the biggest parts I can trim.
Begone, Z80
Begone, BASIC
I'm also trimming Tetris blocks-dropping game and the snake game. Not because they take up a great deal of room or time to compile, but just because they are well-defined chunks that I can easily remove.
Begone, snake
Begone, Tetris blocks.
Once the above parts have been trimmed, compile and build times dropped noticeably and flashing a new firmware now takes a fraction of the time.
I hadn't set out to free up program space and memory, but they were happy side effects. Anyone working on user programs and feeling short on elbow room might consider doing what I did to free up space. Here's what the MPLAB X dashboard shows for memory consumption after the trim:
It is quite lean when compared against the default badge firmware:
If anyone else wants to look at my crude hack-and-slash job, it's up on Github.