Skip to content

23 August 2026

M. T. Kimmins edited this page Aug 28, 2026 · 3 revisions

TEST: Iterate through .a18 per Region

Let us retain the MVP and change Region 2 to be each Region's .a18 data. Retaining Region 1 as the beep will also help determine if the projector reads the data all at once, or crashes upon reading incompatible data.

  • If Region 1 plays, but Region 2 crashes, we can conclude that the projector reads data in a stream as opposed to a bulk pre-load. If this is true, this may help us locate corruption in the data by trying to time the crash/errors to digital addresses (we know 40-bytes = 20ms).

Procedure

  • Copy mvp-s2.bin
    • using the mvp with magic numbers to allow function of dreamsmith and dreamprojector
  • Copy f1.a18
  • Insert f1.a18 into the MVP template in Region 2
  • Track new addresses per Region
  • Update Segment 1 pointers
  • Validate pointers
  • Ensure 1MiB file size
  • dreamsmith extract
    • successful extract
    • all Regions' audio re-converted to .WAV without error = success
  • dreamprojector
    • 14 Regions appear; Region 2 is custom audio played correctly; remaining Regions are test beep = successful
  • Flash to cartridge
  • Play in projector
    • Hypothesis 1: Crash on slide 1 = all data is pre-loaded, and the error is read upon initial projection. We cannot use error attributes to triangulate location of errors.
    • Hypothesis 2: Crash on slide 2 = data is read in a stream, thus we may be able to triangulate problematic data with error/crash observations.
    • OBSERVATIONS = Frame 1 played correctly, successful carousel spin to Frame 2; Frame 2 played custom audio to "Welcome to", then crashed.
    • CONCLUSION = data is streamed, thus we can triangulate corruption by error observations.

New Addresses of f1-inject.bin

Region (#) Address (Hex) Little Endian (Hex)
1 0x6C 6C 00 00 00
2 0x847 47 08 00 00
3 0x29C4 C4 29 00 00
4 0x31A0 A0 31 00 00
5 0x397C 7C 39 00 00
6 0x4158 58 41 00 00
7 0x4934 34 49 00 00
8 0x5110 10 51 00 00
9 0x58EC EC 58 00 00
10 0x60C8 C8 60 00 00
11 0x68A4 A4 68 00 00
12 0x7080 80 70 00 00

Next Steps

  • Triangulate where the corruption is in f1.a18 based off the length of audio that was played.
    • From VLC playback, it seems that around the 1-second mark is when it crashed.
    • $1000{ms}(40{bytes}/20{ms})=2000{bytes}(40{bytes}/{block}=50{blocks})
    • There seems to be some corruption resulting in a crash around 2000-bytes in.
  • Back-titrate ratadon3.bin by iteratively replacing each Region with blanks or tests.
  • Understand what the data in an .a18 file represents; see John-K's repo.

Ratadon3 Titration

Test 1 (can I just blank an entire Region with 00s?)

  • Copy ratadon3.bin
  • Replace audio payload of Region 1 with 00
    • We know the lengths of these custom payloads are appropriate, thus we do not have to worry about lengths, just content.
    • Keep Region header the same.
    • Keep Region light table data the same.
    • 1MiB size retained, no action required
  • Flash to cartridge
  • Play on projector
    • Hypothesis 1: Immediate crash = cannot replace everything with 00; must use test beep data.
    • Hypothesis 2: Crash on Region 2 = this is a validated titration method; quickly make copies of all titration states to flash later.
    • OBSERVATIONS = Frame 1 was all white noise, but played to the established duration, then rotated the carousel; Frame 2 played a brief portion of audio before encountering errors (light flickers, eventual crash after ~1s).
    • CONCLUSIONS = 00ing out a properly-sized Region's audio is a valid way of testing: expect white noise; second confirmation that data is streamed as opposed to pre-loaded and read. Since the crash was about the same distance into the Region, I would be more reluctant to "triangulate" error using roughly subjective timestamping. The best approach would be to read John-K's repo and study the test beep data. Why does white noise play instead of silence?

⟵ Older Table of Contents Newer ⟶

Clone this wiki locally