TIMING COMES FROM THE MUSIC

Parts do not wait for a number of frames. They ask the music where it is, through a resident interrupt server on int 0FCh:

  dis_sync()       which section of the song we have reached
  dis_musrow()     the row playing in the current pattern
  dis_musplus()    signed distance to the nearest sync marker
  dis_getmframe()  a counter fed by the same interrupt chain

The +++ entries in the order list are ordinary Scream Tracker “skip this order” markers (order byte 254) that Future Crew repurposed as beacons. dis_musplus() returns a signed distance to one, so a part can say “wait until fifteen rows before the next marker” and land on a musical moment exactly.

The port models each of these against the real S3M, so a gate fires at the same musical position it did in 1993 — and where a live position is available from the audio engine, it uses that in preference to any simulation.

One caveat worth stating: dis_getmframe() is fed by an interrupt, and under heavy per-pixel load the handler misses ticks, so it runs slower than the vertical refresh. Parts that gate on it are calibrated to its real rate rather than to a nominal 70 Hz.