pydmcsid
Pure-Python reader and player for DMC (Demo Music Creator) SID tunes — the
C64 player by Brian/Graffity ("-PLAYER (C) BRIAN/GRAFFITY!").
A DMC .sid is the player binary plus the per-tune song data resident in the same
image. pydmcsid loads the image, locates the per-tune table bases from the player
code operands (no baked addresses — a differently-sized tune relocates its tables),
and runs a faithful integer transcription of the 6502 play routine, exposing the
per-frame SID register writes.
Usage
import pydmcsid
song = pydmcsid.read("tune.sid")
for w in pydmcsid.iter_register_writes(song, max_frames=50 * 60):
print(w.clock, w.reg, w.val) # absolute CPU cycle, $D4xx reg offset, value
iter_register_writes follows the shared py* register-log convention
(pygoattracker / pymusicassembler): one RegWrite(clock, reg, val) per SID
write, frames cycles_per_frame apart. The DMC player emits one tight write burst
per VBI play call.
What it models
Tempo divider, per-voice orderlist walk (transpose / loop / stop), pattern walk
(note / instrument-select / duration / effect / gate), stride-11 instrument records
driving PW init + a 16-bit PW sweep, the $FF-arp wavetable, triangle vibrato,
glide, the pitch-slide effect and a 6-step filter sweep, the hard-restart window,
and the final per-voice frequency compose. Transcribed from the DMC disassembly.
License
Apache-2.0.
Metadata
Release files for pydmcsid 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pydmcsid-0.1.0.tar.gz | 21.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pydmcsid-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 41.0 kB
Release files / pydmcsid-0.1.0.tar.gz
| Download URL | pydmcsid-0.1.0.tar.gz |
|---|---|
| Size | 21.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b3d34c9024a1fb53f8991e59218ed02c13b43c7dd4a03da7ca2e58e7de428f3b
|
|
BLAKE2b-256 checksum How to use checksums |
b17ba59b953b56daa2e1ae01368bdcba5a11098ecb0b9db8bbdb9482bec7cdcd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 26, 2026.
Transparency logRelease files / pydmcsid-0.1.0-py3-none-any.whl
| Download URL | pydmcsid-0.1.0-py3-none-any.whl |
|---|---|
| Size | 19.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
db93ebaf60aba0177ad9706075c11f420e5e04a93b1a2ce8afb9cf399704ec7a
|
|
BLAKE2b-256 checksum How to use checksums |
d5dcf52910e07f9402a289142d0d375e0fd03f9b0bedcc0bf67019e006a7a853
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 26, 2026.
Transparency log