Skip to content

20 April 2026

M. T. Kimmins edited this page Apr 26, 2026 · 11 revisions

TL;DR - SUCCESS! (Kinda...)

Another Attempt Setup

Based on what John-K and Claude suggest, I must have a WAV that is mono, 16-bit signed at 16000hz. So, I got another royalty-free music sample. I realized that cutting the already-converted .a18 file would distort the data. So, I planned to take Region 1 (since I have already successfully tested a direct data-transplant between cartridges, preserving the first slide is no longer required), take the size (from the start to the beginning of the light table).

Step 1: The Right WAV

It originally started as an .mp3, so I used ffmpeg (with much Claude handholding) to convert it to the right WAV.

Step 2: Cut the WAV

I calculate how long of the WAV I must cut to properly convert to .a18 to exactly fit into Region 1's body. BSLSBS's Region 1 size is 34886 bytes. I must cut this music sample to 17.44 seconds.

Step 3: A1800 Encode

I used John-K's codec to encode the trimmed WAV from step 2 to an .a18.

Step 4: A1800 Decode Roundtrip

I used the codec to decode the trim.a18 back to a WAV. Successfully plays the sample.

Step 4: Injection

I verify with ImHex that the trimmed .a18 is exactly 34886 bytes, which it is. I take the whole thing and overwrite Region1-body with it. Perfect fit. Now... the true test is to upload it to a cartridge and play it. Like we have discovered last time, there will be the preamble audio for the cartridge before Region 1 is read, so this will stand in for our 'control' audio. I will flash this on an unrelated cartridge (eg: Tawny Scrawny Lion) for explicit 'control' audio to show that there is direct data-transplant for our control preamble audio.

Results?!

If it works = we got our first custom audio upload!!!

If it crashes = back to the drawing board 😢

Results 1

It crashed. A bit of a light seizure, then shutdown, and then it rebooted the projector.

A re-flash of another cartridge's data successfully played.

I find it obvious now, but the preamble audio was missing. It is plain to see that the preamble is a part of Region 1. However, this indicates that a signal to display no lights for a prolonged time must make up a portion of all Region 1 Light Tables across cartridges. I should diff all cartridges' Region 1s to isolate the command for duration and no lights.

Next Steps

I will decode a few Region-bodies and see what they look like decoded. This may give me the pattern I need to replicate for a successful data injection.

To do so, I must get a collection of Region-bodies. I see that I was part-way through dividing up the Big Shark Little Shark Baby Shark (BSLSBS) cartridge data.

Upon attempting to decode what I have for the body, it threw an error that the bitrate was unexpected. However, I inspected that datafile and saw that the initial file length was trimmed off. So I will redo the stratification with the lengths intact with the body. I think this is the format the codec expects. Then, I will compare decodings with WAV-natural and .bin-derived data.

I will also extract the light tables.

Results 2

Ok, so good news and bad news.

Good news: I got the audio to play (to some extent) on the LTSDM!
It played about 6 seconds of the 17.44 seconds flashed on the P25D80SH.

Bad news: It seized the entire time

How

I noticed that trimmed.a18 had binary that started off as nonesense (00 and FF and random bytes), then it started to solidly encode something. I realized that the a1800 codec was likely taking the initial part of the WAV file (the explicit headers) and translating those bytes as well, thus making garbage. So I hand-cut the obvious start of the data and pasted it into the Region 1 slot after the chunk-size bytes and the two bitrate bytes (80 3E). The binary that I uploaded with semi-success was injected-complete.bin. Perhaps there is a bit of chunk-size mis-match. I think I messed up the chunk-size again, trying to account for the header for the chunk-size and bitrate. I think if I fix this, then we may prevent a seizure... Here is a video recording of what happened (proof or it didn't happen...)

⟵ Older Table of Contents Newer ⟶

Clone this wiki locally