Vladimir Vince: Galaksija – moja priča

Tokom pandemije koronavirusa neočekivano sam se vratio starom hobiju – popravljanju stare elektronike. Počelo je u travnju, s nešto starijim, ali ipak relativno modernim Macbookom. Uskoro sam se uhvatio IBM Model M tastature iz 1993., da bih se početkom ljeta primio prve ozbiljne samogradnje: originalne Galaksije Voje Antonića iz 1983. Ključan je bio moj prvi posjet muzeju PEEK&POKE u Rijeci

Muzej me potpuno oduševio, ali unatoč fantastičnoj kolekciji u prizemlju koja uključuje IBM PC, Macove svih vrsta, Apple II-eve i NeXT workstatione, zapravo me jedinstvena kolekcija domaćih računala i kalkulatora na prvom katu najviše zainteresirala. Kako sam odrastao u 90-ima i ranim dvijetisućitim, nisam imao prilike iskusiti razdoblje 8-bitnih mikro kompjutera, a školski kurikulum informatike nije se bavio starim domaćim primjercima poput Galeba, Orla ili Galaksije. Bilo je iznimno uzbudljivo vidjeti ih skupljene na jednom mjestu, tako da me ova posjeta inspirirala na dublje istraživanje te teme. Vrlo brzo sam našao projekte Josipa Perušanca; emulatore Orla i Galeba, samogradnje Orla i nove Galaksije. Stranica Tomaža Kaca mi je bila otkriće: gotovo stotine skenova starih časopisa sa skicama, listinzima i ostalim pričama iz perioda računarstva koje nisam iskusio. Odluka je pala: kako bih bolje razumio tu staru tehnologiju, ali i informatičku kulturu kojoj i danas puno dugujemo, primit ću se samogradnje jednog od tih kompjutera. 

Zbog raširene dokumentacije, ali i činjenice da je originalno dizajnirana za samogradnju, odlučio sam se za Galaksiju. Taman u to vrijeme je započeta crowdfunding kampanja za dovršetak dokumentarca o Galaksiji kroz koju se nudila opcija naručivanja Galaksije u kitu. Nećkao sam se da li da čekam sljedeću godinu kad bi kitovi trebali početi stizati, ali ipak sam se odlučio umjesto toga krenuti u samostalnu samogradnju: zaključio sam da ću tako više naučiti. To se u konačnici pokazalo točnim, ali je također dovelo do popriličnog rasta troškova uzrokovanog naručivanjem krivih dijelova. Neovisno o tome, u slaganju Galaksije sam iznimno uživao.

Slijedi priča o samogradnji.

Kao i svoje druge projekte, i ovaj sam dokumentirao na Twitteru. Počeo sam s nekoliko pravila koje sam sebi zadao:

  • Koliko je god moguće, koristit ću iste dijelove kao u osamdesetima
  • Prvenstveno ću se koristiti DIY vodičem iz prvog broja Računara u vašoj kući. Dopustio sam si korištenje drugih izvora, ali samo za pomoć
  • Izgradit ću originalnu Galaksiju s 8 KB ROM-a (ROM A i ROM B) i 6 KB statične memorije
  • Neću sastavljati svoj ispravljač već ću kupiti 5V/2A adapter (iako su originalne instrukcije uključivale shemu za ispravljač)

Prvo je krenulo s dijelovima. Napravio sam tablicu i počeo tražiti ekvivalente komponenti izlistanih na stranici 54 Računara 1:

Većinu dijelova sam bez problema našao na Mouser Electronics. Iznimke su bile:

  • 2 EPROM-a 2732 i 1 EPROM 2716: naručeni na eBayu (naručena dva para 2732 zbog problema s EPROM programatorom)
  • 6116 RAM: originalno naručeni preko Mousera bio je krive širine. Naručio sam zamjenske na eBayu
  • Z80A procesor: originalno sam greškom naručio potpuno krivi CPU preko Mousera. Zatim sam naručio “new old stock” SGS Z80 iz 1983. preko eBaya
  • Tipke: naručio sam ih preko KBDfans

Uz obavezne komponente, naručio sam još i EPROM programator i brisač EPROM-a. Pokazat će se da sam u namjeri da uštedim na programatoru naručio vjerojatno najgori mogući za moje potrebe, ali o tom potom.

Najbitnija komponenta bila je PCB ploča. U Računarima je objavljena skica štampanog kola koju se može koristiti za samogradnju, ali takav projekt je trenutno van mojih mogućnosti. Uostalom, većina samograditelja Galaksije u 80-ima je naručivala ploču preko Računara, tako da sam se i ja odlučio naručiti svoju ploču. Srećom, 2020. relativno jeftino možemo naručiti profesionalnu PCB ploču, a zahvaljujući odličnim gerber fileovima na ruskoj stranici o Galaksiji nije bilo potrebe niti da konvertiram stari sken. Dobio sam poprilično dobru cijenu na jlpcb.com, ali minimalna narudžba je bila 5 ploča. Odlučio sam se ipak ih naručiti – na kraju su dvije poslane u Hrvatsku, a jedna u Makedoniju, tako da bi na kraju ovog projekta mogli imati 4 nove Galaksije (peta ploča je iskorištena kao test za kućište).

Kad je ploča stigla, krenuo sam s lemljenjem 119 kratkospojnika. Već sam kroz čitanje uputa u Računarima znao da se radi o iznimno napornom poslu: da sam bar to malo ozbiljnije shvatio! Zbog nepažnje nisam ih dobro prebrojao, i ispalo je da su mi dva ključna promakla. To sam saznao dosta kasnije, ali i o tom – potom. Koristio sam bakrene žice iz CAT 5 kablova, kao određeni hommage sugestiji iz Računara u kojima je sugerirano da se koristi telefonska žica. Nakon kratkospojnika bacio sam se na podnožja čipova. I ovdje sam napravio nekoliko grešaka pri narudžbi, no najveća je bila nabavka nekvalitetnih podnožja za RAM. Nakon kratkospojnika sam zalemio kondenzatore i otpornike koji su nakon 117 (!) kratkospojnika bili mačji kašalj.

Zatim sam se uhvatio tastature. S njom sam također imao popriličnih problema: zbog razlike u spojevima modernih tastera i spojeva na ploči koja je dizajnirana za one iz 80-ih nisam ih mogao direktno zalemiti. Na kraju sam svakom tasteru dodao komad bakrene žice te isprovizirao spojeve. Ta je improvizacija ispala upotrebljiva, ali ne i idealna. Srećom nisam imao nikakvih problema s tipkanjem, osim lagane nestabilnosti određenih tipki. Voja Antonić je nedavno na Hackadayu objavio novu verziju ploče na kojoj su konektori prikladno razmaknuti za moderne tastere, uz par drugih detalja (uključujući i dvoslojni PCB kod kojeg nisu potrebni kratkospojnici!).

Potom su stigli EPROM-ovi i EPROM programator! EPROM 2716 od 2 KB koji Galaksija koristi kao “character generator ROM” na kojem su spremljene grafike za slova nije predstavljao nikakav problem za moj LAQIYA TL866Ⅱ Plus programator. Međutim, dva 2732 EPROM-a od 4 KB na kojima su spremljeni ROM A i ROM B nikako se nisu dali “zapržiti”. Nakon dosta muke sam shvatio da sam nabavio modele koji se programiraju na 21V, a moj programator može pržiti samo do 18V. I to sam nekako savladao spojivši nožicu za programiranje na 21V, ali EPROM se i dalje nije dao programirati… Mogao sam snimiti samo prvi od svakih 8 bajtova. Neću ulaziti u detalje u ovom tekstu, ali ako vas interesira pročitajte čitavu epopeju na Twitteru. Na kraju sam jedan 2732 uništio, a drugi isprogramirao uz kombinaciju Excela i 32 “prženja”. To je riješilo ROM A, za ROM B sam naručio 2732B EPROM koji se programira na 12V. Međutim ni on se nije dao – problem je naime bio u duljini pulsa za programiranje. 2732 se programiraju s pulsom od 50ms, a nesretni TL866II Plus niti to ne može. Tako da ukoliko birate programator za 2732 bježite što dalje od ovoga. Na kraju sam to riješio uz skriptu koja je ponovila prženje 1000 puta kako bi snimila mizernih 4 KB… 

Epizoda s EPROMovima je bila iznimno frustrirajuća, ali tokom nje sam dosta naučio ne samo o tehnologiji EPROM-a, već i o samim Galaksijinim ROM-ovima. Najviše sam naučio iz kompletnog dissasemblya ROM-a A Tomaža Šolca, dokumenta kojem sam se stalno vraćao i koji još uvijek proučavam. 

Nakon što je ROM A programiran, stigla je i 6116 memorija: u pola širine! Ne bilo mi teško, improvizirao sam nekakav adapter koji se pokazao poprilično beskorisnim s obzirom na to da mi sama postolja zalemljena na ploču nisu držala dobar kontakt. Tada sam konačno instalirao i procesor te se iznimno razočarao kad sam shvatio da nisam naručio Z80A već neki potpuno nevezani 40 pinski procesor. Kako je došlo do takve greške – ne znam, ali morao sam se vratiti na eBay. 

Kad je stigla zamjena, talijanski SGS Z80 iz 1983., poveselio sam se da ću konačno dobiti neku sinkronizaciju slike – kad ono opet ništa! Uz pomoć logičke sonde našao sam problem na dekadnom brojaču CD4017: ispalo je da to uopće nije CD4017 već CD40175BEE4 flip flop gotovo identičnog imena… Svi ovi problemi s komponentama su bili rezultat mog popriličnog neiskustva, a kopija Galaksijine sheme iz Računara počela se puniti mojim bilješkama kojima sam pokušavao otkloniti kvarove.

Kad je pravi CD4017 konačno stigao, uslijedilo je oduševljenje, a zatim i razočaranje. Konačno sam dobio sliku preko RCA/HDMI adaptera koji sam koristio na modernom monitoru. Slika je sinkronizirana, adapter se prebacio na PAL, ali osim toga slika je bila potpuno bijela. Bacio sam se u potragu za rješenjem, pročitao sam svaki tekst o problemima sa slikom na Galaksiji koji sam mogao naći. Prepoznao sam se u članku “Ubiću se, neće da radi” iz Računara 3… Ali bez uspjeha. S obzirom na to da je moj Z80 vrlo sličan procesoru koji je Tomaž Šolc našao u jednoj staroj Galaksiji koja je imala problema sa slikom, uvjerio sam se da se kod mene radi o istom problemu. Bivši vlasnik te Galaksije je sagradio mali sklop kako bi sinkronizirao 74LS166 shift register s procesorom. Na kraju sam i ja sagradio identičan sklop, naravno bez ikakvih rezultata s obzirom na to da se kod mene uopće nije radio o problemu s tajmingom, ali kroz izradu tog sklopa sam dosta naučio o tome kako Galaksija generira sliku i uostalom kako uopće funkcionira analogna slika.

U međuvremenu sam nabavio maleni osciloskop (YEAPOOK ADS5012h) i počeo analizirati signale između procesora, ROM-a, memorije… Vrlo brzo sam primjetio da se na WAIT i IORQ nožicama procesora ništa ne događa. No nikako mi nije bilo jasno zašto. Nakon duge potrage konačno sam našao krivce: dva kratkospojnika na samom vrhu ploče koji su mi potpuno promakli. Osjećao sam se poprilično blesavo, pogotovo zato jer sam ih na kraju našao uz mukotrpnu analizu signala, a ne jednostavnim brojanjem kratkospojnika ili čistim blejanjem u ploču. No, problem je konačno riješen, a ja sam dobio prve znakove na slici! 

Teško je opisati koliko me razveselilo vidjeti to prvo READY na slici! Jest da su redovi bili dupli, znakovima su falili pikseli, kontrast je bio užasan, a Galaksija nije mogla odraditi niti najjednostavniju PRINT komandu, ali nakon puno muke ipak se nešto pojavilo na ekranu. Što se tiče popravljanja slike – relativno brzo sam riješio problem kontrasta i treperenja. Radilo se o kombinaciji eksperimentiranja s otpornicima R9 i R10, smanjivanju napona čitavog napajanja na ~ 4.63V te prebacivanja mog RCA/HDMI adaptera na isti napon kao i ostatak Galaksije. Međutim, pikseli koji nedostaju, dupli redovi i nemogućnost izvođenja naredbi su me i dalje zbunjivali.

Konačno sam potpuno slučajno primjetio da ako dotaknem prvi 6116 čip (u međuvremenu su mi stigli novi s eBaya točne širine) da se slika odjednom stabilizira. To je bio manje više zadnji eureka moment – ispalo je da su podnožja nekvalitetna i da 6116 čipovi nemaju dobru vezu s pločom. Brzo sam izvadio podnožja i zalemio RAM direktno na ploču. Dobio sam jasnu sliku i naredbe su odmah proradile!

Kad je Galaksija konačno proradila, bacio sam se na isprobavanje programa i igri. Stranica Tomaža Kaca je ponovno bila fantastičan izvor s gomilom programa i odličnom dokumentacijom. Osim toga, puno programa sam našao u odličnom dumpu WAV programa Marka Šolajića. Posebno mi je bilo drago isprobati i novo Retroinfo izdanje Žaboglavca

Što se tiče samog učitavanja programa, kako nemam kazetofon koristio sam laptop. Na početku sam imao problema s učitavanjem zbog nedovoljne jačine zvuka, ali nakon što sam uklonio otpornik R14 sve je proradilo bez problema. Slijedećih dana sam uživao u Galaksiji i isprobao manje-više svaki program i igru koji su dostupni na internetu. Potom sam odlučio završiti ovaj projekt uz tri mini projekta:

  • HDMI: integrirao sam RCA/HDMI adapter s pločom
  • 3D printano kućište: napravio sam 3D model kućišta koje je 3D printano
  • dump2gtp: napisao sam mini tool za backup Galaksijinih programa u wav-u u popularni gtp format. Tool se zove dump2gtp zato jer zahtjeva MAME za dumpanje audio datoteka, ali još uvijek radim na njemu i konačna verzija bi trebala direktno konvertirati wav u gtp

Dokumentacija ovih mini projekata i svi fileovi su na mom GitHubu.

HDMI

Kako nemam analogni TV/monitor, od početka sam koristio mali RCA/HDMI adapter kako bih koristio Galaksiju na modernom LCD monitoru. Primjetio sam da je slika puno bolja ako je adapter spojen na isto napajanje kao i ostatak Galaksije, tako da sam izvadio malu pločicu iz njene plastične kutije, izbušio dvije rupe na Galaksijinoj ploči (uz puno opreza da ne presječem koji kontakt!) i direktno zalemio analogni video na nju. Kasnije sam dodao i prekidač između, tako da mogu birati hoću li koristiti kompozitni analog video ili HDMI.

3D printano kućište

Od početka sam želio napraviti kućište koje bi bilo slično kućištu iz samogradnje kakvo je preporučeno u originalnom uputstvu u Računarima 1. To je kućište građeno uz ploče od vitroplasta, kao jeftino rješenje. Iako sam probao eksperimentirati s jednom od svojih PCB ploča, naprosto nisam imao povjerenja u svoje sposobnosti da precizno režem vitroplast. Stoga sam se odlučio na malo moderniju opciju koja je izgledom vrlo slična originalnom predlošku. U SketchUpu sam napravio model i naručio 3D printano kućište preko servisa craftcloud3d. Za dno sam izrezao ploču od pleksiglasa te sam na tvrdom papiru isprintao logotip Galaksije, kombinirajući oznake firmi MIPRO, Elektronika inženjering i Zavoda za udžbenike i nastavna pomagala, tri organizacije koje su sudjelovale u serijskoj izgradnji Galaksija. Poprilično sam zadovoljan kvalitetom izrade, a par izmjena koje sam na svojem kućištu odradio fizički već sam dodao u novu verziju 3D modela koji je dostupan na mom GitHubu.

dump2gtp tool

Nakon što sam konačno osposobio Galaksiju, želio sam mogućnost da spremim programe koje sam fizički napisao na Galaksiji u gtp format da budu portabilni. Gtp je popularni format koji koriste neki emulatori Galaksija, prvenstveno MAME. Radi se o jednostavnom formatu koji umjesto zvuka sprema Galaksijine programe kao hex bin. Dosta programa dostupnih na internetu su dostupni isključivo kao gtp fileovi, a za korištenje na pravoj Galaksiji treba ih prebaciti u wav. Srećom, Tomaž Šolc je još davno napravio gtp2wav tool koji je dostupan u kombinaciji s njegovim drugim odličnim programima za development za Galaksiju. Međutim, nigdje nisam našao tool koji bi napravio obrnuto – prebacio wav file u gtp. Takav tool bi bio iznimno koristan za arhiviranje i čuvanje starih programa nađenih na kazetama, ali i za spremanje novih programa koji su programirani na Galaksiji. Kako nisam nigdje našao tool koji bi mogao napraviti tu konverziju, odlučio sam složio sam mali program koji može napraviti gtp file od MAME memory dumpa. Odlučio sam se na ovakav, pomalo nelogičan proces, zato jer još nisam našao dobar način da konvertiram wav file u binarni ili hex dump. Kako MAME može učitavati Galaksijine programe kroz wav, procedura je slijedeća:

  • Program se savea sa Galaksije na komp kao wav
  • Loada se u MAME koji radi u debug modu
  • Iz MAME se napravi memory dump u txt file
  • moj dump2gtp tool napravi gtp file
  • gtp se provjeri u MAME

Ovaj program je još uvijek u vrlo ranoj fazi razvoja. U konačnoj verziji MAME ne bi trebao biti potreban, a sam program bi trebao postati direktan wav2gtp tool. Za sada je u ranoj fazi, ali za mene je bilo interesantno napisati ga jer sam kroz reverse engineering dosta saznao o tome kako Galaksija snima na kazetu, ali i o samom gtp formatu za koji nisam uspio naći nikakvu dokumentaciju na internetu. Program je dostupan na mom GitHubu.

Bonus

Tokom ovog projekta jako su me interesirali sitni detalji, poput dva različita READY logotipa na različitim Galaksijama. Mislim da je Tomaž Šolc prvi to dokumentirao, ali većina kopija character generator ROM-a koje se mogu naći na internetu imaju samo Elektronika inženjering logo. Stoga sam uz male prepravke napravio verziju koja ima i MIPRO logo, a sad se može lagano zapržiti na 2716 EPROM. Obje verzije su dostupne na mom GitHubu.