-
Status and Notes for the curious
01/15/2017 at 03:59 • 0 commentsAt long last, two years and then some after starting this project, I have finished it. I can even play games on the Nintendo 64, albeit slowly. My github repository for this project has several useful files, however it is an absolute mess.
Here are the things that you might want that I have developed:
- Service files. I used SysV instead of systemd, because I decided to use DietPi to build my emulator, and it does not have a full systemd stack, I'm pretty sure. Regardless, when I started this I didn't know what systemd was, and since I know both systems, I stuck with SysV for this. The files are drag-and-droppable for any Linux system, it probably works on systemd too considering it's legacy support for SysV scripts. You'll need to change some configs in order to make them work, but it should be fairly simple, I tried to make them configurable.
- asplashscreen: Show a splashscreen over the bootup text. It just looks pretty.
- depends: fbi
- retrogame: Runs the GPIO-to-EV_KEY program in the background.
- depends: start-stop-daemon retrogame
- syncservice: automates rsync for updates, ie allowing the user to update the system without internet or a keyboard or opening the case.
- depends: rsync
I've learned a lot doing this. I am not a professional by any means, I'm just starting college now and in my winter break I have managed to finish this thing up, but I have definitely greatly advanced my understanding of many things by doing this. One of the things I think I should pass on is that if you are blazing a trail where there is little documentation, _you will have many difficulties_. It's not easy, even if you do know what you're doing. When something goes wrong, you are lost, as I have found myself time and time again.
Below are some of the tips I have collected, or at least the ones I recall.
- Don't be afraid of git. Use it to your advantage, it can be very handy. A `git log` can get you a lot of information you might not otherwise have. `git tag` allows you to see tagged releases, which could be useful for finding a last-stable branch, for example. You can `git checkout` a tag name.
- The bleeding edge helps sometimes. Just wait it out if you're having trouble, sometimes someone else will fix it later. Programs like these have maintainers for a reason: they know what they are doing. You can submit a patch if you're adventurous, just make sure it works first.
- Compile-time options. You can specifiy these yourself if the ones that are made by those configure scripts aren't good enough. I recommend `CFLAGS=-O3` at least, `-funroll-loops` isn't a bad idea either. There's plenty more that I've forgotten. Some cores require a platform which the configure scripts are bad at detecting on occasion. Try setting `platform=` to something, you can check the makefile for hints as to what it should be. I like `platform=rpi`, which works great for mupen64plus.
-`collect2...` Linker errors, probably. Check that you have all your libraries in place, and that the compiler knows where they are. If your platform isn't set, that could cause issues. Don't forget that you can specify extras at compile time too, either edit the makefile looking for `LIBS` or `LDFLAGS` or similar. Technically libraries can be added to `CFLAGS` at compile time instead of link time, but this is bad practice. Do it only if you have to.
That's all I've got for now. Good luck, and if you're making something like this and you don't want to follow the tutorials for RetroPie and the like, and you prefer a lighter, more optimized setup, I may be able to help you.
-
2016
03/25/2016 at 15:54 • 0 commentsSomeone told me to submit this to the Hackaday Prize 2016. I'm over 18 now, so I guess I can, and I did. Here goes!
I have been doing work on and off with this, most of the issue residing with my CNC machine more than with this project.
Here's a list of new developments:- We no longer need to search for old DMG cases to dismantle and put new components in, Kitsch-Bent makes custom ones that are identical to the originals! (almost) Unfortunately, new holes will still have to be drilled for at least the X and Y buttons, and L/R shoulder buttons are still a work in progress.
- Those 7.5mm buttons look just about perfect!
- The software should be working now, it's just a matter of fixing tri-state logic issues with some resistors. The circuit board has all that built in, so once it's cut, that should be fixed.
That's all for now, I think. Maybe I'll have a picture of the Real Deal(tm) ready soon.
-
Update #1
02/13/2016 at 01:57 • 0 commentsI've been working pretty hard on this one in recent weeks. Latest update: There's a power connector on the pcb. Revolutionary, I know. Better yet, a few other errors are fixed since last time, and now I am ready to actually cut this thing out. My CNC machine is giving me issues now, so there will be delay on getting real-deal photographs on this page.
Every new advance leads to new questions, the latest issue is that the DMG uses strange 10.43mm buttons, which are made of pure unobtanium. 8mm and 12mm can be sourced, but only for certain types of tactile buttons, therefore, more research and specialized parts have to be sourced for this project. I found that Kitsch-Bent has custom injection molded parts that can be ordered for relatively cheap, considering that they are completely custom and exact analogs of the originals. One can even purchase a whole DMG case from them! A worthwhile site, I'll add a link to this project ASAP. The other issue is the tactile switches. The standard 6mm square buttons are not tall enough. The actuator on top of them is not tall enough to allow the cap (DMG buttons, in this case) to press the actuator without colliding with the housing of the button first. Currently, I'm waiting on some 7.5mm tall buttons to ship, with the hope that they will be tall enough.
-
Introduction
02/06/2016 at 21:32 • 0 commentsI should mention that this project has been going on for the better part of two years before I decided "Gee, it would be a good idea to document this." I started out with no knowledge of PCB manufacturing, Gcode, how to make circuit boards, or how virtual devices work in Linux or why on earth OpenGL and GLES are not compatible. It's been an absolutely insane amount of work to learn all this for one project, but hopefully, in the end, it will all be worth it!
I can't even remember why I thought it would be a good idea to make this in the first place, I probably saw a case mod somewhere and said "I can do better than that," thinking I was actually even remotely capable of doing anything of the sort. Everything I have done is on Github, but I started work on it long before the commit history on Github begins as well - I learned how to use Git while doing this as well. I decided to fork it from Adafruit's "retrogame" repository because I decided to use some of their code for the GPIO work instead of writing my own - one of the many beauties of Open Source. I have made modifications and am confident that it (almost) functions perfectly with my own system now!
At the time of writing, I'm working on the PCB, specifically, I'm trying to figure out how on earth to make clean, consistent cuts on my CNC machine, which I also built, probably four years ago at this point. It has also been through _many_ revisions... Everything takes me two years to get right, I guess.