-
Notifications
You must be signed in to change notification settings - Fork 2
23 August 2026
M. T. Kimmins edited this page Aug 28, 2026
·
3 revisions
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).
- Copy
mvp-s2.bin- using the mvp with magic numbers to allow function of
dreamsmithanddreamprojector
- using the mvp with magic numbers to allow function of
- Copy
f1.a18 - Insert
f1.a18into the MVP template in Region 2 - Track new addresses per Region
- Update Segment 1 pointers
- Validate pointers
- Ensure 1MiB file size
-
dreamsmithextract- successful extract
- all Regions' audio re-converted to
.WAVwithout 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 |
- Triangulate where the corruption is in
f1.a18based 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.binby iteratively replacing each Region with blanks or tests. - Understand what the data in an
.a18file represents; see John-K's repo.
- 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?
- Hypothesis 1: Immediate crash = cannot replace everything with
| ⟵ Older | Table of Contents | Newer ⟶ |
|---|