Port · 2025 · AI kísérlet
A shiru8bit Commodore PET-re írt PETSCII demójának portolása Commodore 64-re, Kick Assemblerben. A kérdés nem az volt, hogy megoldható-e, hanem hogy mennyit bír el belőle egy nyelvi modell — a portot ugyanis végig Claude Opus 5 írta.
Az eredmény működik: mind a tizenöt effekt fut, a zene szól, és a demó végigmegy az elejétől a végéig.
2025. szeptember
Az eredeti demó a Commodore PET-en fut: negyven oszlop, huszonöt sor, semmi szín, semmi sprite, semmi rasztermegszakítás. Csak PETSCII karakterek, amiket a kód elég gyorsan pakol a képernyőmemóriába ahhoz, hogy mozgásnak lássuk. Pont ezért jó portolási feladat: nincs benne semmi, ami a PET egyedi hardveréhez kötné — a képernyőn kívül.
A PET a képernyőmemóriát a $8000-re teszi. A C64 alapból a $0400-ra —
de ha a VIC-et a 2-es bankra állítjuk, a képernyő ugyanoda kerül, mint a PET-en. Ez az egyetlen
döntés viszi el a port nagy részét: az effektek, a sortáblák, a jelenetek memóriakiosztása
egyetlen sort sem igényelt ebből a szempontból.
Ezért maradt tizenöt effektből tizenhárom szó szerint úgy, ahogy az eredetiben volt. A maradék kettő is csak ott változott, ahol a PET hangchipjét szólította meg.
A demó nem működik a C64 saját betűivel: a PET karakterkészlete kell hozzá, különben rossz
karakterek jelennek meg. Ez RAM-ba másolva, a $8800-on ül. Egy csavarral: a PET
hardveresen fordította meg a karaktereket (inverz videó), a C64 nem. A $80–$ff
tartománynak valódi, megfordított rajzolatként kell léteznie — az effektek sűrűségtáblái
ugyanis a $a0-t tekintik a legsötétebb karakternek. Így csak a 128 eredeti rajzolat
utazik a fájlban, a másik felét indításkor egy EOR-ciklus gyártja le.
A PET-en nincs hangchip. A hangot a 6522 shift regisztere adja: egy 8 bites mintát kitol a CB2 lábon, amit egy időzítő üteme határoz meg. Ez — ha jobban megnézzük — nem más, mint egy impulzushullám, aminek a kitöltési tényezője a bitminta, a frekvenciája pedig az időzítő periódusa. Vagyis pontosan egy SID pulse hang, kerülőúttal.
A zene ezért nem újraírt, hanem az eredeti adat szólal meg: ugyanaz a becsomagolt dallamtábla, ugyanaz a lejátszó, csak a két rutin cserélődött ki, amelyik a vasat fogta meg. A hangmagasság a helyén van: felvételről visszamérve minden két képkockánál hosszabb hang 1,1 centen belül szól.
Két jelenet a zene leállítása után maga csinál hangot. Az egyik zajt (a shift regisztert
gyorsabban írja újra, mint ahogy hangmagasságként hallanánk — ez a SID zaj hullámformája
lett), a másik beszédet, 1 bites digiként. Utóbbi a C64 $d418 hangerő-digijére
fordul, és a mintavételi frekvencia ciklusra pontosan ugyanaz maradt: a SID-írás két
ciklusát a ciklus saját töltelékutasításaiból vettük vissza.
Az eredeti azért fér el egy 32K-s PET-ben, mert a becsomagolt adat szándékosan átfed azzal a területtel, ahova a jelenetek kicsomagolódnak: ami elsőként fogy el, az van legfelül, így egy jelenet mindig csak olyasmit ír felül, amivel a demó már végzett. Emiatt nem is indítható újra újratöltés nélkül — sem az eredeti, sem ez.
Ez a port legtörékenyebb öröksége, ezért nem bizalmi kérdés: minden fordításnál végigfut egy ellenőrzés a demó tényleges jelenetsorrendjén, és elhasal, ha bármelyik jelenet olyasmire íródna rá, amire még szükség van — vagy a saját tömörített forrására.
A PAL C64 50 Hz-cel jár a PET 60 Hz-e helyett, így az egész demó nagyjából 17%-kal lassabb
— kép és zene együtt, mert mindkettő képkockához kötött. A beszéd-digi negyed hangköznyivel
mélyebb, mert a C64 PAL órajele nem kerek megahertz. És a $d418-digi 6581-en hangos,
8580-on halk — ez a chip, nem a kód.
Egy jelenet van, aminek nincs PET-es eredetije. Az eredeti demó azzal indul, hogy kigördíti a képernyőt — a PET-en a bekapcsolási üzenetet. A C64-en nem volt mit kigördíteni, így most egy oldalnyi szöveg kerül oda: karakterenként, képkockánként kiírva, villogó kurzorral, terminál módra, majd egy billentyűre vár. Aztán pontosan úgy gördül ki, ahogy az eredeti üzenet.
A port — kód, dokumentáció, hangmunka, ellenőrző eszközök — nagyjából két és fél óra
alatt készült el, végig Claude Opus 5-tel. Az érdekes rész nem az, hogy fordított: az effektek
átalakítása gépies munka. Az érdekes az volt, ahol dönteni kellett — hogy a képernyő maradjon
a $8000-en, hogy a zenei lejátszót ne kicsapni kelljen hanem átvinni, mert a
jelenetek az ő jelzéseire lépnek tovább, és hogy a hangmagasságot ne fülre, hanem felvételről
visszamérve kelljen igazolni.
A teljes forrás, a portolási jegyzet és az ellenőrző eszközök a GitHubon vannak. A demó érdeme viszont változatlanul shiru8bit-é: az effektek, a grafika és a zene mind az övé — ez itt csak átköltöztetés.