1984 · Mastertronic

Chiller

This minisite was curated by unorig, air.

Hear the first release and the replacement tune, then follow the sound code.

Music

The tune that got the game withdrawn

The first release played a rendition of Michael Jackson's Thriller during play, and Mastertronic withdrew it; the re-release has a new tune.27 Both are played here by the game's own driver, ported line by line. Play the in-play tune and switch the release to hear the other.

Every sound-chip write the port makes matches the game's own driver, in the same order. The game sets the sound chip's filter once and keeps it on voice 1, the bass, for the whole tune (music_init_filter, $60A0). The Filter switch plays it three ways, even while it plays. Off leaves the filter out. 6581, the chip in every C64 in 1984, darkens voice 1 as the game meant, on the curve the reSID emulator measured from one chip. 8580, the chip of later C64s, barely changes it. Real 6581s differ from one another and they distort, which this model does not. It plays at PAL speed, so the notes are flat, as they were on PAL machines.

The re-release changed only the in-play tune and one byte of the driver.11 The level-start and game-over tunes are the same in both. The driver change is the compare at $60B6: this copy cuts each note off three interrupts before the next step, and the re-release cuts it one before, so its notes ring on longer.

Both tunes are tuned for an NTSC C64. Of the first release's in-play tune's 478 frequency values, 464 land within two cents of a note on an NTSC machine, the kind sold in North America. A PAL machine, the kind sold in Europe, runs about 4 % slower, so there every note plays about a third of a semitone flat.

The driver runs on the system interrupt, 60 times a second, on two voices. Each command is one byte, and the byte is the low half of its handler's address in page $61. music_next_command ($6100) writes it into its own JMP at $610B and jumps, so the tune data is a list of jump targets.

ByteHandlerWhat it does
$0E, $26$610E, $6126a note on voice 1 or 2: frequency high, low; gate off and on
$3E$613Ea note on both voices
$56$6156retrigger both voices
$6B$616Bset the tempo: interrupts per step
$74$6174end the step: wait for the tempo
$7C$617Ccount: tells the game the tune has reached its end
$82, $91, $ACwaveforms, envelopes, pulse widths
$C7$61C7loop to the start

The count command is how the music talks to the game. The card at the start of each level stays up until the level-start tune counts (card_wait, $7610), and GAME OVER stays up until the game-over tune does ($5DA9). The in-play tunes never count. The first release's loops after about 69 seconds.