Sometimes You Just Have To Do It Yourself

This post is actually about software compilation, which most people have probably never heard of. I'll do my best to make it interesting and not too confusing. It's a good example of needing something that doesn't exist, and putting in the effort to bring it to life. 

Software compilation is basically taking the raw code of a software program, or app, and converting it to run on a certain system. You can take "source code" which can't be run on its own, and make it work on whatever you want. In my case, I'm taking some software that runs a specific game, and compiling it to run on a weird industrial/educational computer. A Raspberry Pi 5, specifically. This software just doesn't seem to exist for this computer. I managed to get it mostly working by using a special program called an emulator, but it still crashes and has weird problems that make it nearly unusable.

The program, Ship of Harkinian, happens to be open source, meaning I can get the raw code and convert it to run on the Raspberry Pi 5 computer. The advantage of doing this is that I can then run this awesome software on a super cheap computer, without emulation and weird hacks. In theory, it should just run like any other program. This would allow anyone with a LEGAL COPY of The Legend of Zelda: Ocarina of Time to play this wonderful old game directly on a dirt cheap little computer, without the use of emulators, random software layers, or other restrictions. If you do play around with emulators, be aware of the legality of it all. In the US, there's a legal grey area around emulating games you "own" a copy of, but companies like Nintendo are working very hard to make that area less grey. To the massive detriment of their own reputation, and ultimately, profits. You've been warned. Some of these companies are absolutely vicious.

There are countless different computers that can run this game, since it's super old and well understood, but using this specific software enables upgrades to the graphics and code of the game, bringing it into the future and making it easier and more fun to play. It's a game preservation project, backed by passionate fans of the game. It's all free and open source. I never got to play this game a child when it was released, due to my chaotic and traumatic childhood. I had no time for fun and games. It sucked ass. So here I am, at 33 years old, trying to get this game to run natively on a very weird little computer so myself and others can enjoy it. The process is also weirdly fun to me. It's like a weird software puzzle with a very satisfying payoff at the end.

The end goal here is to actually give away the finished file, allowing people who use these Raspberry Pi computers to just download and run the program, instead of jumping through a bunch of strange hoops to get it partially working. I know that the best way to get people to do something is to make it as easy as possible. I had to download the program, install the Pi Apps software store, use that to install Box64 emulation software, then use the command line to run the main software with the Box64 emulation software. It partially works, but the average person is never going to jump through all of those hoops. It's almost as easy for me to compile the software to run directly on the Pi as it is for others to jump through all of the hoops. I only have to do this once for the initial release, and once for any major updates to the base software to keep things up to date. I do some satisfying tinkering, others can benefit. The magic of open source and sharing.

I see this as a great learning experience to help me get more familiar with software development, as well as a way to bring more attention to the super cheap and wonderful world of the Raspberry Pi computer ecosystem. It's about the cheapest way to get into modern basic computing and the best way to get into educational computing. The problem is the lack of fun on the platform. There are some decent games for the system, but most people run emulators, which big game companies are cracking down heavily on. Eventually, game console emulators might be destroyed, and we will need some native games. I'm working on a massive project (for me, as an individual) to bring legitimate gaming to this fascinating computer. I've already gotten gems like Stardew Valley and Terra Nil working well on the system, and have made some progress with 0 A.D., which is basically an open source clone of Age of Empires. I've gotten the Steam game store working at one point, and was able to play Portal 2 on the system with a cheap graphics card updgrade. Most of these games require an external graphics card, but that can be a very affordable option. The graphics card I use in my development system is an AMD Radeon RX 460 4GB card that I got for $60 from eBay. That includes shipping. I spent another maybe $100 to upgrade the system to accept and power the graphics card. That $100 is a one time price to upgrade the system permanently. Using the industrial version of the computer, I can bring the cost down and improve the experience significantly. My point here is that there are very cheap ways to compute and game, so long as you're willing to accept simpler, older, or more optimized games, and not obsess over the newest games and best graphics. 

I'm writing this as the software compiles, which uses a ton of processing power and takes a very long time. The current step has been running, at full power, for probably 30 minutes or more. It's on stage 191 of 1,081. It's going to take quite a while to compile. I'm doing it on the actual Raspberry Pi 5 computer, instead of cross compiling on my workstation computer, due to having had compatibility issues in the past. I'm willing to bet that monster of a computer could have this done in a few minutes. I also just want to see how long it takes on the actual computer. Not everyone has the money to build a development workstation, and the goal of this project is to prove what's possible with a cheap computer, patience, time, and some clever workarounds. I want to make computing and computer knowledge more accessible to people. Especially the younger generations. I worry that people have no idea how their computers work, don't care, and will be taken advantage of by the lack of understanding. It's already happening. It's been going on for decades. 

When this is done, and assuming it runs properly, I'll post an update here and share the finished file. For now, it's going to be a very specific version for the Raspberry Pi computers. No Windows versions, which already exist. The goal is to create the version I need, that doesn't already exist.

When I first started working with the Raspberry Pi computers back around 2015, I'd never even heard of open source software or software compilation. Since then, I've written custom programs, designed, built, programmed, and used a custom off grid hot water heater controller, automated various things, and am now compiling open source software for weird computers, and have even compiled the Linux Kernel a few times. All things I never thought I'd be "smart" enough to do. I'm still fairly new to most of it, but I'd say I'm doing alright for self taught. 

All I wanted to do was play an old game. Somehow I got sucked into a pretty intense software project and am doing something productive. This is how it usually goes. I try to goof off and find problems no one seems to be solving, and try to solve them myself. At the start, I ran into a ton of problems getting this software compilation to run at all, but I overcame them all so far, and am on my way to having a test file that might actually work. Luckily I keep development notes for this project, with every step, every command I ran and what happened, and where to go next. By the time I'm done here, I'll have the finished software, as well as a proven method to generate it. It seems I might be one of few people compiling software specifically for the Raspberry Pi, so I might actually have some worthwhile contributions for the platform soon. It feels good to do something useful. It feels even better to be able to share the work with others who can enjoy my hard work. I can see why people enjoy contributing to open source software projects so much. I'm considering submitting the finished program to the Pi Apps project, where other people can easily find and enjoy it.

It's on step 327 of 1,081 now. It sill has a long way to go before I can even rest to see if it works.

The world would be a far worse place without open source software projects and the people who build and maintain them. I wish they could get more support and recognition. 

I took a break from writing this while working on the software. It's taken a few hours, but I got the bulk of the work done. I can't seem to generate the single file version I want to make this as easy as possible, but I did get a simple folder based version working on the Pi 5. I also got the next game in the series working on the Pi 5. I can now finally play through both games on my little computer. I even tested the first game without the external graphics card, using just the base model computer. The game is fully playable at lower settings, which makes it feel far more authentic. The more powerful graphics card allows the game to run much faster, while looking much nicer. It's a fun experience either way.

Getting this far means I've actually finished one of my very first major software projects on the Raspberry Pi. I made this software work directly on the Pi 5, on the newest operating system, without any emulation layers or extra steps. It's a huge milestone for me, having tried similar things and failed every time. It feels so good to be able to create a working version of a program that didn't exist before and be able to use it. 

I'll return to this project later, but am just going to enjoy it for now. I may share the current progress somewhere. Maybe on this site under a "Downloads" page somewhere. Keep an eye out for that page to show up eventually.

It's been a long, but satisfying project day for me. I'm quite happy with the progress so far. Now I get to play a fun old game on my custom computer. I'm mentally exhausted and feel like I'm rambling now...

Returning to this post a few days later with some updates and thoughts. The software works great. I've been able to play through a few hours of the game without any problems. The little computer does a great job running this. It's a great experience.

I wanted to emphasize the importance of just trying things. If you want or need something, and no one else has already made it, you might just have to put in the time and effort to bring it to life yourself. I feel that this is the main point of the article that got lost in the excitement of completing a major project. I'll have to write article outlines in the future, when I have more time to sit down and write. I've learned countless different skills over the years, through brute force and curiosity. I'm self taught in nearly everything I know, and have had some pretty advanced jobs over the years. I find satisfaction and joy in being able to bring ideas to life, which enables me to just go out and make stuff I want or need. I'm a maker of things. This wasn't always the case though. I didn't get good at bringing ideas to life or completing projects until my late twenties. I'm what you'd call a late bloomer. I'm ok with this though, as I was forced to learn very important life lessons and drill them into my thick head. 

There's a freedom in being able to do things for yourself. When the furnace stopped working here, I went downstairs, found the problem immediately, and fixed it with parts I had in stock. Previous experience, hard won by tinkering, taught me to keep certain tools and materials around at all times, as well as how a furnace usually works. I didn't need an electrician to come in and replace the fried electrical wiring caused by someone using the wrong size wiring nuts. I turned off the breaker, measured voltage to make sure I wasn't going to get shocked, and ran a new power line to it. The furnace fired right up and has been fine since. 

Without the confidence to just try stuff, I'd be at the mercy of the rest of the world. Fully dependent on others to solve even basic problems for me, at great expense. Just being willing to TRY to do things myself slowly taught me the skills needed to actually finish things. I'm now at the point in my life where I can start a small business, manage the finances, taxes, and logistics, design and make things from start to finish, and automate things to free up more time. I can solve most problems I encounter, given enough time and energy. 

If I could pass on any hard wom advice to others, it would be to master social skills above all else, and conquer your fear of failure so you can try new things and learn new skills. People skills are absolutely vital in life, and failure is the best teacher. Learn people, get comfortable with failure. Create things and solve problems yourself.

I hope this has been a good read. I had to piece it together between work, sleep, and the general chaos of my current life.

Cheers

Back to blog

Leave a comment