Hello, my name's James! You can find me on github and discord, as well as many other places where I go by GrateJames.

My passions range widely from retro-tech through to a touch modern cryptography, many of which are exhibited below. Some personal favorites are the GHOST project, as well as my WIP 3DS mastodon client. Aside from programming, I also do a bit of everything: sketching, guitar, crocheting, and photography.

I'm proficient in C++ and Python, and generally familiar with: HTML, PHP, SQL, JS, Java, C#, and more. I currently daily drive a monstrositry of debian, i3, and a mash of custom forks and tools. Needless to say, I'm very comfortable working with linux and the terminal.

Vintage Apple Computers

09/01/2026

I recently purchased an Apple //e and a Macintosh Classic on the second hand market!

I was a little disappointed that the Apple //e worked right away, but the Macintosh needed quite a bit of work. Luckily it wasn't battery-bombed, but I still got to recap both the Logic Board and the Analog Board, and spend days troubleshooting what was stopping the processor from coming out of reset correctly. Eventually I realized the hard disk that came with it (40MB!) was likely seized inside, and removing it fixed all my issues! It seems likely that the old drive is seized inside. It has since been replaced by a BlueSCSI, a SCSI drive emulator based around the Raspberry PI Pico 2 W that has a variety of other cool features, like Wi-Fi connectivity. Hmmm....


Websocket Engine

08/30/2026

I wanted to take a card game I love playing with friends and turn it into an accessible web game that I could play with a blind friend of mine.

I quickly got carried away though. Taking inspiration from the IRC and MultiUser Dungeons (MUDs) of old, I created a room-based architecture that allows users to connect to the server and join rooms where they can talk amongst themselves, and optionally register a Handler. This Handler can then take commands from the chat and execute them within the context of the room. For the card game engine I'm still working on, this could be commands like /deal or /draw 3, but the commands could be anything you can imagine!


Dot Matrix Wireless Card

05/18/2026

I have always been fascinated by old printing technologies, and recently found a used Epson dot matrix printer for cheap online, and decided it would be awesome to add to my collection!

When I opened it up I started to get even more excited, it has breakout pins inside that expose all the same connections that are in the parallel port on the back! In theory, one could make a card that plugs in and connects to the network, perhaps powered by a little ESP8266, and exposes itself as a networked printer...

I've never had good luck with printers, so my first goal is simply to wire up the ESP8266, and configure it to host a little webpage where you can go type in text and see it printed.

Then I can either make use of open-source software that already offers the IPP functionality, orrrr I could potentially wire it up to my homelab with a simple API. I could hook it up to print out errors in my homelab, perhaps integrate it with the NTFY push notification library so it can receive notifications, or just set up a little service where I can type reminders into it while I'm out and about, and come home to see them printed out on the printer! So many ideas are possible...


Failed Raspberry PI Repair

03/19/2026

I recently found a Raspberry PI 4B in the trash and wanted to try to repair it.

Plugging it in, there were a couple hot-spots on the board and checking with a multimeter revealed that the 3.3v line was almost totally shorted to ground, with only 100ohms of resistance. Feeling the board when it was powered, both the VLI USB chip and the DA9090 power regulator got quite hot to the touch.

After removing both of those chips, however, the SoC gets quite warm. It's not hot enough for me to be sure there's still a short, but it seems likely given how these devices usually seem to fail. Unfortunately replacement DA9090 chips are not available; some hackers online have gotten the MXL7704 to work instead by running the I2C communication lines through an Arduino first to translate the Pi's request to the correct I2C address. Quite the process, when I'm already pretty sure that the SoC is toast, but maybe I'll come back to it at some point.


The GHOST Simulator set

09/16/2025 - github/Ghost

Ghost is a computer architecture I made as a thought experiment, and also as an easy way to introduce people to the ideas of assembly. I've dubbed it a 'fantasy CPU': think a 'fantasy console' except it's just a CPU architecture.

This project has many components, each in their own folder.

Simulator

This is the heart of the projects. It steps through given programs and executes them, drawing on the screen, and handling other IO. It also includes a debugger, with breakpoints, and a full memory and register inspector that also helps parse the hardware stack pointers. Features such as: break on access of a certain memory location, manually editing registers, and arbitrary jumps are planned, but not yet implemented.

Assembler

This is the go-to home for development for GHOST. It takes the custom assembly language, and converts it to bytes for the simulator to execute. See the docs for the instruction set, and other notes on the architecture such as memory layout.

Programs

Various assembly programs, including:

Lang

The beginnnings of a C compiler, built in python, targeting GHOST

Hmm

This is a WIP circuit-level logisim model of the GHOST computer. As of the most recent change, I believe many core instructions are implemented. However I haven't added interrupts yet, and graphics might be impractical, given the speed of the simulation.

Docs

Documentation, including to-do lists, system architecture notes, IO notes, memory layout notes, instruction set notes, program notes, and more scattered notes. Also contains various helper files: sublime syntax highlighting for the assembly, sublime build system for assembly, a script to read the instruction set from the docs and parse it into cpp code, then inject it into the simulator source code.


Masto3DS

03/04/2025 - github/Masto3DS

I've always loved implementations of modern software on obsolete hardware, so-called 'de-makes'; Remakes, but accomodation the limitations of the system they're being ported to. This is my attempt to make a mastodon client for the 3DS. Luckily, the Mastodon API is enjoyably well-documented online, and the process has gone relatively smoothly when I have time to dedicate to it.


Reverse Engineering the TI-89 StudyCards File Format

09/02/2024 - github/RETTI89SCFF

After stalling 2 years ago, I finally sat down and reverse engineered the StudyCard appvariable file format for my ti89 titanium. Why? Bacause the original software is old and unsuited to my use case: I want to paste in a list of a hundred vocab terms, not mess around with manually formatting the front and back of each card. For the specifics of my work, you can download the writeup underneath.

Things that haven't been explored:


VComic

04/13/2024 - github/VComic

This is basically a simplified web browser with some extra features that make it convenient to use to read webcomics. This isn't a scraper, it pulls up the original websites so the creators get ad revenue. It keeps all your comics in a list/spinner you can select from, and as you read the link in the database is updated. You can give each comic a name, and reorder them, but that's about it.


JCatcher

04/03/2024 - github/JCatcher

This is a simple 3DS program that's designed to parse RSS feeds and download mp3s so that they can be played by another app. Currently nearly all the features are working except for the onscreen keyboard, so your stuck with Offbeat Oregon as your only option. Also, apparently, I started this before I knew to split things into their own files. Enjoy a horrific main.cpp, and not much else.

Also, this program uses curl, which means that while it supports modern HTTPS certs, it is dreadfully slow. Probably runs at 1/3 playback speed. So a 15 minute podcast could take up to 5 minutes to download. This is obviously unacceptable for real-world use, but this is just a passion project. Also, I see no way around it.


Abstract Syntax Tree

06/07/2023 - github/CustomLanguage - Try out here!

I'be been toying with the idea of making a custom programming language. The idea is to have it similar in ease of learning to python, but with stricter typing. So far, I've built a demo in python. Above is a demo that hacks together the python code from github with jsgo.


FishML

05/01/2023 - github/FishML

This was a super simple little program I wrote to interface with code.org's introduction to AI. This program will use user input to train the neural network, and once its trained it can automatically complete the code.org process of training their 'AI' interface. (https://studio.code.org/s/aiml-2021/lessons/1/levels/1M, Intro to computer science principles, AI/ML, lesson 1)

There are two different progams: BW, which converts to black and white and only identifies outlines for the fish/not a fish excercize, and the Characteriostics versions, which lets you choose a characteristic (Circular, Rectangular, Triangular, Blue, Red, Green, Yellow) to filter for


M5Stack Games

04/25/2023 - github/M5Stack-Games

This is a random collection on projects for the m5stack, built on vanilla micropython and russhughes's ili9342 library. It looks like he might even be providing pre-compiled mp binary, but I've not tested it.

It contains:

As a rule, the apps in ./sd are finished, those in ./dev are not, and those in ./ are drivers or other tools


CHKN

04/25/2023 - github/CHKNnfl

A little game I made for my younger sister, it is designed to be a simple clone of Happy Ms. Chicken (from Peppa Pig). Click the A button and the chicken teleports around the screen and lays an egg at that position. Works forever (without running out of memory) because the new eggs are stamped to the background. An update could make the chicken instead initiate an egg sprite that will, after a delay, hatch and stamp a chick to the background; which is what she really wants.


Inventory Manager

03/14/2023 - github/InventoryManager

This is a super simple app designed to track inventory stock. Items are tracked by their name, modifier (Color, size, etc...), and location. On either the add screen or search screen you can tap an item to filter by that name/modifier.


Raycaster

03/14/2023 - github/Raycast

A super fun little raycasting demo loosely based on the tutorial series by Griffpatch. Loads a basic little map and renders it, has some lens corrections, and supports shading based on compass direction. Could possibly support more detailed maps later.

Key Action
n/m Resolution
v/b FOV
x/c Depth Res
z Smoothing

HackerCalc

01/03/2023 - downloads/main.py

Super simple calculator script that uses pythons builtin eval function, but ouputs in hex, binary, and decimal. Super useful for debugging GHOST.


Digger

08/17/2022 - github/Digger

A super simple game! The idea is that you dig around to mine ores to upgrade your robot. It's currently unplayable, but was an interesting proof of concept.


MENACE

09/06/2021 - downloads/TicTacToe.py

Or, Matchbox Educable Noughts and Crosses Engine. A learning tic-tac-toe playter base on the MENACE concept, which manuipulates the chances of the computer making any given move based on whether that move was included in a previous game's win or loss.


Pygame Maze Generator

06/04/2020 - downloads/maze.py

A super simple maze generator copied almost entirely from my scratch project.