-
Notifications
You must be signed in to change notification settings - Fork 2
20 April 2026
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).
It originally started as an .mp3, so I used ffmpeg (with much Claude handholding) to convert it to the right 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.
I used John-K's codec to encode the trimmed WAV from step 2 to an .a18.
I used the codec to decode the trim.a18 back to a WAV. Successfully plays the sample.
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.
If it works = we got our first custom audio upload!!!
If it crashes = back to the drawing board 😢
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.
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.
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
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 ⟶ |
|---|