SIDin #8 — Aleksi Eeben interview (Stefano Tognon, 2005)

author Stefano Tognon (ice00), SIDin magazine; answers by Aleksi Eeben
date 2005-07-30
article SIDin issue 8 (version 1.00, 30 July 2005), pp. 18–20: 'Aleksi Eeben Interview!' — a single interview (about Eeben, John Player, Polly Tracker's mixing method, the standard closing questions)
created 2026-08-30 · updated 2026-08-30

Tognon interviews aleksi-eeben, "a coder and a musician that had created some useful tools for creating music" — the low-rastertime C64 editor John Player and the four-channel sample tracker Polly Tracker, released the month of the issue. The technical centre of the interview is how Polly mixes four sample channels on a 1 MHz C64 by polling the CIA timers instead of using interrupts.

Key claims#

  • Who: 29 years old in July 2005, living in Southern Finland ("strongly prefer North for it's nature, space and quietness"); "Sound designer by trade, employed and underpaid by a mobile phone company"; likes jazz "but also Venetian Snares". Has composed and programmed for C64, Amiga, PC and Game Boy; "I like VIC 20 the best, because it's the most limited and least explored so far"; has "studied Colecovision and Game Boy Advance a bit"; never liked PCs "except of course nowadays they can be used as professional sound workstations".
  • John Player (Tognon: "one on the less rasterline consuming editor around"): "I wanted to compose some C64 sounds, but found all other editors too difficult to learn, so I wrote my own. Low rastertime came as a bonus, as I wanted to keep it as simple as possible." (sid-player-routine, tracker)
  • Polly Tracker — "a 4 channels sample editor you release this month" — grew out of the 3-channel "mod" player Eeben wrote for the VIC 20 demo Back in the Good Old Days (Assembly 2004).
  • How Polly mixes (chip-samples):
    • "Instead of using interrupts I'm polling the timers in a busy loop, hence the name Polly." Whenever at least one channel pointer has moved to its next sample, all four channels are mixed and written out through the "'4-bit DAC' volume register $D418".
    • "C64 has 4 timers. In Polly each timer controls the pitch of one channel." (the two CIAs' timers A and B)
    • The CIA timer-B bug: the chip "clears the timer B interrupt flag if the interrupt register is read on the same cycle when timer B runs to zero", so a channel on timer B cannot hold a constant pitch — "The aural output suggests that there's not enough CPU time, but that's a wrong conclusion." Workaround: check timer B before reading the interrupt register and spend one more cycle if a clash is about to happen — cpy $dc06 / beq .1 (Y = 6: check timer B, one extra cycle on a clash) / .1 lda $dc0d ("now it's safe to read interrupt flags").
    • Tempo from SID voice 3: a muted voice 3 plays a low-frequency square wave; "whenever this value [read from $D41B] has changed, it's time to step in the sequencer and read new note data" (sid).
    • Why not a fixed mixing rate: fractional waveform pointers are "cumbersome with 8-bit processor"; with 4 channels "you cannot reach very high mixing rate on 1 MHz C64, the limit is probably around 6-7 kHz", and resampling "produces quite nasty artifacts, especially when samples are skipped". Timer polling reaches "9 kHz sample rate on all four channels" with no resampling artifacts "because samples are never skipped" — they are only "very slightly delayed", and "you cannot bribe the timers, so the frequency output remains stable".
  • Mixing SID voices with samples would need a different player: 3 SID voices plus 2–4 sampled voices, the samples "driven with interrupts then"; possibly two mixing modes — Polly-style busy-loop mixing while the SID part is idle, slower interrupt mixing while the SID voice code runs at the raster interrupt — with the SID code avoiding X and Y so the interrupt is cheaper; "Fixed mixing rate for sample channels could be tried too."
  • Standard questions: "Always test on the real machine, but emulators are great for cross-development. For sound, reSID is quite accurate except for the filter. This could be improved a lot by trying different cliptables before the filter input." — 6581 "definately. It's the SID sound for me." — worst/best own SID: "I like them all. But it's kind of silly that HVSC seems to hold every single 10 second test song I've made for for example John Player." (hvsc) — favourite authors: TBB, AMJ, GRG, Goto80, Reed, Abaddon, Agemixer, Ed, Dane; best SIDs: "Unsound Minds tunes by AMJ."
  • Download given: http://pleco.mikrolahti.fi/~ae/download/pollytracker.zip.

Practical takeaways#

  • A four-channel sample player on a stock C64 is feasible at about 9 kHz per channel if pitch comes from the four CIA timers and mixing happens only when a channel actually advances — no resampling, no skipped samples (chip-samples).
  • Any code that reads $DC0D/$DD0D while a timer B is running must guard against the timer-B flag bug; the guard costs one compare and one branch.
  • A muted SID voice is a free, stable clock: read $D41B (oscillator 3 output) and step the sequencer on change.
  • Editor design lesson from John Player: simplicity first, rastertime follows.

Notable quotes#

"Instead of using interrupts I'm polling the timers in a busy loop, hence the name Polly."

"Every SID composer out there, start learning an instrument so we can play when everyone's 50."

Relevance to the wiki#

Creates aleksi-eeben; the only first-hand description in the wiki of a timer-polled multi-channel sample mixer on the C64 (chip-samples); a composer's verdict on reSID's filter and the 6581 for sid; his 256-byte compo entry Electronic is analysed in s-sidin09-tiny-sid-256b (tiny-sid-compo).

Pages touched#

aleksi-eeben · chip-samples · sid · sid-player-routine · hvsc · tiny-sid-compo · sidin

source file wiki/summaries/s-sidin08-eeben-interview.md · graph