Přejít k navigační liště

Zdroják » Různé » Pocta C64

Pocta C64

Články Různé

Za prvopočátek své programátorské kariéry vděčím počítači Commodore 64. Tehdy jsem genialitu návrhu nemohl docenit. Dnes dokážu lehce nahlédnout pod pokličku. Chtěl bych se o to s vámi podělit a vzdát mu hold.

Nálepky:

Text vyšel původně na webu autora a původně byl připraven jako přednáška na ne-konferenci jOpenSpace 2023, existuje i její videozáznam.

Úvod

Jsem kluk z vesnice. Moji vrstevníci jezdili na pionýrech a naučili se je opravovat. Já měl k dispozici novější a spolehlivější stroj se složitějším zapalováním, Simson S51, takže se ze mě automechanik nestal. Zato jsem dostal počítač Commodore 64 (aka C64). Když jsem ho zapnul, vyskočila na mě konzole, se kterou jsem musel nějak interagovat, pakliže jsem si chtěl spustit hru.

Terminál

Historie

Psal se rok 1991, chodil jsem do první třídy. Na celé škole jsme měli počítač asi jen dva lidi. Jako monitor jste mohli použít Tesla Merkur nebo v lepším případě Color. Moji rodiče nejsou ani vzdělaní, ani bohatí, ale byli dost osvícení na to, aby vrazili spoustu peněz do takové hračky. U počítače byly přibalené dvě knihy, jedna anglicky, druhá německy, moc jsem si nepočetl.

Historie firmy Commodore sahá do 50. let 20. století, kdy se zabývali importem a výrobou psacích strojů v československé licenci. Vyráběli i kalkulačky, ale proslavili se osobním počítačem Commodore 64 z roku 1982. Jednalo se o domácí počítač v ceně pod tisíc amerických dolarů, konkrétně 595 USD (v přepočtu to v roce 2022 činilo 1 700 USD) a cena později klesala. Prodalo se kolem neuvěřitelných 17 miliónů kusů. To se samozřejmě s dnešními prodeji, kdy má doma každý počítačů několik, nedá srovnávat.

Zdroj: Evan-Amos, public domain

Architektura

Následujícím obrázkem z datasheetu vás nechci vyděsit, ale ukázat, že počítač byl osmibitový. Šířka slova, počet vodičů na datové sběrnici (červené zvýraznění) určuje největší číslo, které může počítač zpracovat během jedné operace. Zatímco k adresaci paměti (zelené zvýraznění) slouží šestnáct bitů.

datasheet mos6510

Jedná se o mikroprocesoru MOS Technology 6510 taktovaný na 1 MHz. Technologie 5 µm. U dnešních čipů měříme číslo v nanometrech. A proč je důležité honit se za co nejmenším číslem? Pro menší spotřebu, úsporu na chlazení a zkrácení vzdáleností zrychlí signál. Z další čísel uveďme ještě 64 KB RAM a 20 KB ROM. Displej 320×200 v 16 barvách nebo textový režim 40×25 znaků.

Zvuk

Jestli se něčím Commodore 64 proslavil, tak to byl jeho zvukový čip SID. Uměl 3 hlasy v rozsahu 8 oktáv. Šlo ovlivňovat průběh signálu ASDR (náběh, útlum, podržení a uvolnění) spolu s tvarem vlny (hrana, pila, trojúhelník nebo šum). To zní hrozně abstraktně. Na osciloskopu to mohlo vypadat třeba takhle: C64 Wizball: Title Theme

Můj první PC (AMD K5) měl později jednu z prvních zvukových karet Sound Blaster. Subjektivně šlo o horší zvuk, což objektivně můžu ověřit zpětným ohlédnutím do technické specifikace. Commodore používal pokročilou FM (frekvenční modulace) syntézu zatímco Sound Blaster paměťově náročné PCM samply při vzorkovací frekvenci 22kHz. Zvídavé čtenáře nad rámec článku odkážu na aliasing a Nyquistův/Shannonův vzorkovací teorém. Sound Blaster měl kvůli MIDI asi taky nějaký čip na FM syntézu, ale to hrálo strašně.

Datové nosiče

Zdroj: George Chernilevsky, public domain

Vezměmě to od těch nejmladších datových nosičů. Z PC si můžete pamatovat 3,5” disketu, nebo dokonce 5,25” ty se používaly právě na Commodoru. (8” vím, že existovaly, ale na vlastní oči jsem neviděl). Jenže disketová jednotka stála zhruba stejně jako celý počítač. Proto si pamatuju jediného kámoše, který ji vlastnil.

Zdroj: Kausalkette, public domain

Zato jsem měl, stejně jako jiní ve východním bloku, kazetový přehrávač. Povšimněte si především počitadla otáček. V praxi to znamenalo, že jste měli obal kazety popsaný seznamem her a pozicí, odkud začít nahrávat.

Zdroj: Evan-Amos, public domain

Ale jak na analogové médium dostat digitální informaci? Existovalo kódování pulzů logické nuly a jedničky, návěstí pro byte atd. Reálně jste slyšeli pískání. Někdo si možná spíš pamatujete z modemů a vytáčeného internetového připojení. Nahrávání bylo hrozně pomalé, pouhých 300 bit/s, takže celých 64KB by trvalo zhruba 30 minut. Je skvělé, že existuje i odnož stackexchange.com pro retrocomputing, tady odpověď Martina Malého. Pomalost byla zapříčiněná délkou pulzů a detekcí a korekcí chyb, obecný princip zmiňoval František Řezáč ve starší přednášce K čemu je pravda. Velmi doporučuji How Old-School Cassette Tape Drives Played Games.

Naštěstí existovaly nástroje nazývané turbo, nebo fastloader. Já si pamatuju Turbo 250, které dokázalo zrychlit nahrávání až na jednotky kbit/s. Důsledkem byla i horší korekce chyb, náchylnost na správné nastavení čtecí hlavy a v pokoji nesměl nikdo dupat.

Tady si dovolím malou odbočku k nástrojům jako ChatGPT. Hrozně jsem toužil po tom, pochopit jak to tenkrát fungovalo, ale nenašel jsem moc zdrojů, Zkusil jsem tedy i chatboty, ale (zatím?) se chovají jako studenti u zkoušky, neřeknou, že neví. Dal jsem šanci Bardovi, který by měl být schopný zdrojovat (nebyl). Ptám se ho, jak to víš? On na to, ze zkušenosti a z manuálů. Říkám, dej mi odkaz na manuál. Prý nedá.

Uznejte, že na tom se přednáška a článek postavit nedají.

Posledním médiem je cartridge, zásuvný modul. Na tom jsem hru neviděl na vlastní oči žádnou, ale poštěstilo se mi vlastnit právě exemplář s turbem.

Jak si na to sáhnout

Počítač jsem kdysi prodal. Je to jako s motorkami, nechtěl jsem hromadit věci a hlavně jsem potřeboval peníze. U motorek lituju hodně, tady trochu. Asi bych ho totiž nechtěl provozovat a řešit kompozitní video přes DIN konektor, problémy s přepětím na originálním zdroji, který může odpálit počítač. Každopádně Michal Tauchman napsal na root.cz moc pěkný seriál o renovaci C64.

Zato jsem si koupil repliku. Má HDMI výstup, USB a na rozdíl o originálu si můžete ukládat pozice u her.

Programování

Příklad z Commodore 64 Users Guide.

5 INPUT "ENTER UPPER LIMIT FOR GUESS ";LI
10 NM = INT(LI*RND(1))+1
15 CN = 0
20 PRINT "I'VE GOT THE NUMBER. " :PRINT
30 INPUT "WHAT'S YOUR GUESS"; GU
35 CN = CN + 1
40 IF GU > NM THEN PRINT "MY NUMBER IS LOWER": PRINT: GOTO 30
50 IF GU < NM THEN PRINT "MY NUMBER IS HIGHER": PRINT: GOTO 30
60 PRINT "GREAT! YOU GOT MY NUMBER"
65 PRINT "IN ONLY "; CN ;"GUESSES. ":PRINT
70 PRINT "DO YOU WANT TO TRY ANOTHER (Y/N)";
80 GET AN$: IF AN$ = "" THEN 80
90 IF AN$ = "Y" THEN 5
100 IF AN$ <> "N" THEN 70
110 END

Programovalo se v jazyku BASIC (Beginners’ All-purpose Symbolic Instruction Code). Měl by vám být povědomý. Asi vás překvapí číslování řádek, to je nutné kvůli skokům jako GOTO či GOSUB. Tenkrát se samozřejmě psalo bez zvýrazňování syntaxe a kontextové nápovědy.

Dneska bych podobný příklad děti učil v kostkovém jazyce Scratch nějak takhle.

Každopádně k BASIC doporučuji tenhle zajímavý úvod: Introduction to Commodore 64 BASIC and Why You Should Learn It

Bylo možné programovat i v assembleru, ale to už jsem neměl vůbec šanci pochopit.

Základním prvkem her je tzv. sprite. C64 jich podporoval 8. Šlo měnit jejich barvu, velikost a detekovat kolizi. Obrázek jste zakódovali do několika bytů.

Byty jste načetli pomocí DATA a pak zapisovali na konkrétní „magické” adresy paměti pomocí POKE.

10 V=53248 : REM START OF DISPLAY CHIP
11 POKE V+21,4 : REM ENABLE SPRITE 2
12 POKE 2042,13 : REM SPRITE 2 DATA FROM 13TH BLK
20 FOR N = 0 TO 62: READ Q : POKE 832+N,Q: NEXT
30 FOR X = N TO 209
40 POKE V+4,X: REM UPDATE X COORDINATES
50 POKE V+5,X: REM UPDATE Y COORDINATES
60 NEXT X
70 GOTO 30
200 DATA 0,127,0,1,255,192,3,255,224,3,231,224
210 DATA 7,217,240,7,223,240,7,217,240,3,231,224
220 DATA 3,255,224,3,255,224,2,255,160,1,127,64
230 DATA 1,62,64,0,156,128,0,156,128,0,73,0,0,73,0
240 DATA 0,62,0,0,62,0,0,62,0,0,28,0

Vyzkoušet lze například v tomto emulátoru.

Vývoj her narážel na mnohé limity. Tady je jeden názorný příklad, jak se jim je tenkrát dařilo obcházet. Rychlým střídáním barev navodili iluzi barvy, která v původní paletě neexistovala.

Hry

Jak jsem předeslal, C64 pro mě byl hlavně hry. Začněme textovými jako Chammurapi. Matně si vzpomínám, že jsem byl schopný si zdroják zobrazit a upravit.

Z dalších jmenujme namátkou The Last Ninja.

C64 uměl multiplayer až 4 hráčů, ať už na jedné obrazovce nebo split screen, například Pitstop II.

Hry vznikají a prodávají se i dnes. Například Strikeback na podporu Ukrajiny a oslavu dronu Bayraktar.

Filmy

Doporučuji šestidílný seriál na Netflix High Score. O C64 se tam mluví málo, ale seznámí vás s historií her od textovek, Pac-Man, Mortal Kombat až po Doom. Zároveň je tam vidět, jaký zásadní posun přinesla změna architektury na 16 a později 32 bitů.

Běžela kampaň na podporu vzniku dokumentu I Adore My 64. Bohužel zatím nevybrali dost peněz. Snad to jednou klapne, rád bych to viděl.

Závěr

Chtěl jsem zavzpomínat na svoje dětství a poděkovat C64, že mě nasměroval v mé kariéře. Strávil jsem několik večerů hledáním zdrojů a náramně jsem si to užil. Věřím, že vás alespoň některé z informací mohla zaujmout. Osobně se k tomu chci ještě vrátit a pár věcí dostudovat.

Související

Komentáře

Subscribe
Upozornit na
guest
1 Komentář
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Dušan Kreheľ

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.