S.Elliott's blog

Ultima V MIDI with hidden arrangements

For preservation:

A collection of MIDI files extracted from Ultima V in 1995, copied through a MIDI cable to a Roland SCC-1, saved for decades on a 3½" floppy disk, reproduced here on a GS-compatible Roland MT-120.

A full performance is recorded here, and on YouTube.

Artifacts hidden inside the MIDI data reveal hidden arrangements and sound effects that were not reproduced during game play -- including percussion and sound fx that were probably reproducible only on the original composer's equipment.

Using the "Phi1 Echo" to distinguish disk controllers

Apple hid a quirky feature inside its disk drives, a full-loop signal path via addressable latch Q1, via stepper phase-1, via the motor control board, via the write-protect switch, via the analog board in the disk drive, via the shift-right input into the data register, and back onto the bus.  This signal path can be used to distinguish between the various Apple II disk controllers.
  • Apple Disk II controller prints 2 inverse bytes: 7F 00
  • Micro Sci A2 controller prints 2 inverse bytes: 80 00
  • (untested guess) IWM in Apple //c: A0 20
  • (untested guess) IWM in Apple //c+: AF 2F [EDIT: this guess was wrong]

Quick ref: Pass arguments to machine code from the Monitor

When calling a machine code subroutine from the Monitor, one or two additional arguments can be passed by taking advantage of the way the Monitor uses delimiters to parse arguments from its command-line and stores them in the zero-page pointers A1, A2, A3, A4...in an arbitrarily-strange order:
  • The default argument is always the subroutine address, stored in A1.
  • Appending a '.' delimiter allows another argument to be stored in A2.
  • Inserting a '<' delimiter allows an argument to be stored in A4.


Subscribe to RSS - S.Elliott's blog