1 UVOD V današnjem času v svetu pretežno prevladujeta raču- nalniška tehnologija in oprema, zasnovani v zahodnih in izdelani v vzhodnih državah. Verjetno si le malokdo predstavlja, da je nekoč bila tudi Slovenija (še kot del Jugoslavije) zelo aktivna pri tem razvoju in izdelavi. Med drugim je podjetje Iskra Delta v 80. letih prejšnjega stoletja razvijalo in izdelovalo strojno opremo – tako namizne kot velike računalnike –, namenjeno poslovni rabi, in programsko opremo zanje [1]. V primerjavi s hišnimi računalniki tistega časa je te računalnike uporabljalo relativno malo ljudi. Prav Prejet 24. april, 2018 Odobren 3. julij, 2018 tako niso bili izdelani v velikih količinah, zato je te računalnike in podrobne informacije o njih danes težko najti; enako velja za ljudi, ki imajo specifične informa- cije o njih. Poleg tega se strojna oprema in povezana tehnologija zelo hitro starata, zato na slovenske staro- dobne računalnike preži nevarnost pozabe. Fizično ohranjanje starodobne strojne opreme lahko sčasoma postane zapleten izziv (npr. odpoved posame- znih komponent zahteva dodatno elektrotehnično znanje in morebitne nadomestne dele). Ohraniti programsko opremo pa je relativno lahko, če za to poskrbimo pravočasno, da imamo na voljo še dovolj delujočo strojno opremo, dokumentacijo in seveda znanje s po- dročja temeljnih ved o delovanju računalnikov, npr. po- dročij računalniške arhitekture in sistemske programske opreme. Pri tem je treba izvesti prenos programske opreme na sodoben računalnik, kjer si lahko pomagamo z izdelavo bitnih slik starih pomnilnih medijev (npr. disket in tudi trajnega bralnega pomnilnika računalnika), s čimer zagotovimo popolno istovetnost podatkov. Po- dročje, ki se ukvarja s tem, se imenuje digitalno ohra- njanje (angl. digital preservation), emulacija pa je le ena od specifičnih tehnik [2], [3] tega področja. Dobro programsko posnemanje strojne opreme lahko dosežemo tako, da ustvarimo program, ki izvaja funkcije in opravila procesorja in pripadajočih vhodno-izhodnih (V/I) naprav enako kot imitirani računalnik. Takemu programu pravimo emulator in omogoča izvajanje pro- gramske opreme na drugem računalniku (gostitelj) kot na tistem, za katerega je bila prvotno razvita (gost). Emulirati pomeni implementirati vmesnik in funkcio- nalnost nekega sistema na sistemu z drugačnim vmesni- kom in funkcionalnostjo [4]. Poleg izvajanja programske 186 HORVAT, MIHELIČ opreme na drugem procesorju (kar omogoča navidezni stroj) emulator poustvarja tudi V/I naprave; tako go- stujoči program praviloma ne more ugotoviti, da se ne izvaja na prvotni strojni opremi. Emulacija se pogosto uporablja tudi v izobraževalne namene [5], [6], tako imenovana emulacija celotnega sistema [7] pa je pogosto edini dolgoročni in celoviti način za njegovo ohranitev [8], [9], [10]. V nadaljevanju članka predstavimo razvoj in im- plementacijo emulatorja za računalnik Partner podjetja Iskra Delta. Emulator kot gostitelja uporablja danes “standardni” PC (angl. personal computer) ali Mac računalnik. V naslednjem razdelku opišemo tehnične lastnosti računalnika s poudarkom na procesorju, po- mnilniku in nekaterih V/I napravah. Poleg tega podamo še nekaj podrobnosti o operacijskem sistemu CP/M, ki ga uporablja Partner. Glavni prispevek članka pa je zbran v tretjem poglavju, kjer podrobno predstavimo izdelani emulator. Najprej opišemo njegovo splošno zgradbo, potem pa se osredinimo na posamezne komponente, kjer podrobno opišemo predvsem emulacijo pomembnejših V/I naprav. V četrtem poglavju podamo kratko ovredno- tenje naše rešitve, opišemo zanimivejše težave in rešitve iz ozadja razvoja emulatorja in obratnega inženiringa, ki je bilo potrebno za pridobivanje pravih informacij o Partnerju. 2 ISKRA DELTA PARTNER Namizni računalnik Iskra Delta Partner je bil prvič predstavljen leta 1983 [11] in mišljen kot mali poslovni oz. razvojni sistem [1]. Pozneje so nastali modeli, ki so lahko prikazovali tudi grafiko. Znani so vsaj naslednji trije modeli: • 1F/G z enim disketnim pogonom, • 2F/G z dvema disketnima pogonoma in • WF/G s trdim diskom in enim disketnim pogonom. Zadnji, ki smo ga imeli tudi na voljo za potrebe razvoja emulatorja, je prikazan na sliki 1. Sestavljen je iz enote, ki vključuje zaslon, trdi disk, disketni pogon in sam računalnik, tipkovnica pa je ločena in z osnovno enoto povezana s kablom. V nadaljevanju tega razdelka na kratko opišemo osnovne lastnosti računalnika Partner, pri čemer smo številne od njih ugotovili preko obratnega inženiringa. 2.1 Procesor in pomnilnik V računalnik Partner je vgrajen 8-bitni mikroprocesor Z80A podjetja Zilog, ki je bil predstavljen leta 1976 [12]. Poganja ga ura s frekvenco 4 MHz [13]. Nekateri 8-bitni registri so združeni v pare, da se- stavljajo 16-bitne različice, tako so na voljo naslednji registrski pari: AF, BC, DE in HL, pri čemer je A akumulator, F zastavice, preostali B, C, D, E, H in L pa so splošnonamenski registri. Obstajajo še 16-bitni registri: programski števec PC, skladovni kazalec SP in indeksna registra IX in IY. Slika 1: Iskra Delta Partner WF/G, na zaslonu je prikazan program URASET Procesor podpira različne odzive na prekinitve, pri čemer Partner uporablja naslednji način. Najprej shrani PC na sklad, nato s podatkovnega vodila prebere 8-bitni podatek (data) in iz njega sestavi 16-bitni pomnilniški naslov, kjer zgornjih 8 bitov dobi iz posebnega registra I (gre za bazni register prekinitvenih vektorjev), zatem prebere 16-bitno besedo s tako sestavljenega naslova; ta beseda je naslov isrAddr prekinitveno servisne rutine naprave, t.j, isrAddr = M16[2 8 · I + data]. Procesor podpira dva ločena naslovna prostora: 16- bitni pomnilniški naslovni prostor (prikazuje ga slika 2), ki ga zasedata delovni pomnilnik (RAM), in bralni pomnilnik (ROM), ter 8-bitni vhodno-izhodni naslovni prostor, ki ga zasedajo naprave. Računalnik Partner ima 125 kB delovnega pomnilnika, procesor Z80A pa lahko naslavlja le 64 kB, zato je dostop do celotnega pomnilnika urejen preko dveh t. i. bank. Vsaka banka je velika 61 kB, poleg tega pa je še 3 kB skupnega stalnega pomnilnika; skupaj tako dobimo 2 · 61 kB + 3 kB = 125 kB. Prva banka in skupni del pomnilnika sta rezervirana za operacijski sistem, druga banka pa je namenjena uporabniški programski opremi. Slika 2: Organizacija pomnilnika v Iskra Delta Partnerju ROM ob zagonu računalnika zaseda spodnjih 8 kB. Njegova glavna naloga je nalaganje operacijskega sis- tema, ki ga nato izključi in prostor zasedeta banki. 2.2 V/I naprave Računalnik Partner ima vgrajen disketni pogon za 5,25-palčne diskete, pri čemer je format dvostranski, na EMULATOR RAČUNALNIKA ISKRA DELTA PARTNER 187 vsaki strani je 73 sledi, v vsaki sledi je 18 sektorjev in v vsakem sektorju je 256 bajtov. Skupna kapaciteta disket je tako 657 kB, sektorji pa so prepleteni v razmerju 2:1, vendar BIOS (angl. basic input/output system) to prikrije. Za branje teh disket na sodobnem računalniku je treba uporabiti poseben krmilnik, npr. KryoFlux [14]. Model Partner WF/G vsebuje tudi trdi disk Seagate ST-412 s kapaciteto skoraj 10 MB [13], pri čemer ima ta 1224 sledi, vsaka sled vsebuje 32 sektorjev in vsak sektor 256 bajtov. 2.3 Operacijski sistem Partner za svoj operacijski sistem uporablja CP/M (angl. Control Program for Microcomputers), ki ga je razvilo ameriško podjetje Digital Research. To je enoo- pravilni diskovni operacijski sistem za mikroračunalnike s procesorjem Intel 8080 ali združljivim, kar velja za Zilogov Z80A. CP/M programom nudi osnovne storitve za delo z datotekami in osnovne funkcije za vhodno- izhodne naprave [15]. Operacijski sistem je sestavljen iz več delov. Prvi del je BIOS, ki se razlikuje glede na računalnik in ga priskrbi izdelovalec računalnika. Partnerjev BIOS poleg zahtevanih funkcij za CP/M vsebuje še funkcije za risanje grafičnih primitivov [13]. Njegove funkcije kliče drugi del, ki se imenuje BDOS (angl. basic disk operating system) in je neodvisen od strojne opreme ter implementira višjenivojske funkcije, ki jih kličejo uporabniški programi. Kot tretji del CP/M vsebuje kon- zolski ukazni interpreter CCP (angl. console command processor), ki podpira zaganjanje programov, delo z datotekami in druge sistemske programe. 3 EMULATOR 3.1 Zgradba emulatorja Kot v pravem računalniku tudi v emulatorju navidezna centralna procesna enota (CPE) nadzira in usklajuje de- lovanje preostalih naprav. Emulator na najvišjem nivoju izvaja ukaze v emuliranem procesorju. Ko ta zahteva vhodno-izhodno operacijo, jo izvede in nadaljuje. Naprave, s katerimi dela človek (tipkovnica, miška, zaslon), zahtevajo posebno obravnavo. Na pravem Par- tnerju se slika na zaslonu osvežuje s frekvenco 50 Hz sočasno z delovanjem procesorja, v emulatorju pa se zaradi enostavnosti emulacija procesorja in izrisovanje izvajata izmenično. Natančneje, v vsaki iteraciji glavne zanke se izvede 4 MHz/50 Hz = 80000 procesorskih ciklov, nato se izriše zaslonska slika, če se je spremenila. Sprožijo se tudi morebitne čakajoče prekinitve. Potem emulator čaka 20 ms (1/50 s) ali manj (odvisno od tega, kako dolgo je trajalo izrisovanje slike) in zanka se ponovi. Tako emulirani procesor doseže hitrost, ki je približno enaka kot v pravem Partnerju (morebitne zakasnitve, ki jih zahteva DRAM (angl. dynamic RAM), se ne upoštevajo). Hkrati emulator preverja, ali je bila pri- tisnjena tipka na tipkovnici, ali je bil pritisnjen ali spuščen gumb na miški in ali je bila miška premaknjena. Te dogodke posreduje ustreznemu modulu, ki ustrezno posodobi stanje naprave, ki bo programski opremi vidno ob naslednjem branju, in v primeru tipkovnice sproži prekinitev, da obvesti programsko opremo o pritisku tipke. 3.2 Centralna procesna enota Za emulacijo CPE smo uporabili knjižnico Zymosis [16]. Uporaba knjižnice je tako rekoč poljubna, ker je avtor knjižnico deklariral kot javno dobro (angl. public domain). Knjižnica natančno implementira emu- lacijo procesorja Z80, vključno z nedokumentiranimi inštrukcijami in drugimi podrobnostmi. Za večjo pre- nosljivost smo knjižnico še nekoliko prilagodili. Emulirani procesor se z napravami povezuje preko mehanizma povratnih klicev (angl. callback). To je me- hanizem, kjer knjižnici podamo neki del kode (npr. preko naslova funkcije), ki se nato izvede ob vnaprej predvideni situaciji. Takšna situacija nastopi, ko npr. emulirani procesor potrebuje dostop do pomnilnika ali V/I naprave, zato pokliče ustrezno funkcijo za izvedbo bralne oz. pisalne operacije. Tako za pomnilnik (RAM in ROM) skrbi en par funkcij, za naprave pa se bralno- pisalna zahteva preusmeri na ustrezni modul, ki skrbi za napravo. Povezavo naprav (vključno z glavnim pomnilnikom) s CPE izvedemo tako, da za vsako napravo implemen- tiramo vsaj naslednje funkcije: • Ponastavitev naprave: Funkcijo za ponastavitev na- prave knjižnica pokliče ob začetku emulacije in vsakič ob resetiranju procesorja. • Branje podatkov: Funkcija kot argument prejme naslov vrat, prebere vrednost in jo vrne. • Pisanje podatkov: Funkcija prejme naslov vrat in vrednost, ki jo nato zapiše v napravo. Ta nato glede na zapisano vrednost izvede ustrezno operacijo. Naprave lahko tudi sprožajo prekinitve, vendar ker je vsaka naprava drugačne narave, za to ni enotnega mehanizma. V nadaljevanju opišemo izvedbo emulacije nekaterih pomembnejših naprav. 3.3 Pomnilnik Izvedba pomnilnika kot navidezne naprave je morda najbolj preprosta. V emulatorju je pomnilnik (tako RAM kot ROM) le polje, do katerega emulirani procesor dostopa preko povratnih klicev. Ob vsakem dostopu se pomnilniški naslov prevede iz naslovnega prostora emuliranega procesorja v naslovni prostor gostitelja, kjer se nato izvede še bralna oz. pisalna operacija. Naslovni prostor Partnerja je grafično predstavljen na sliki 2. Polje, ki predstavlja pomnilnik, je treba na začetku emulacije inicializirati, tako da se v začetek po- lja naloži vnaprej pripravljena slika bralnega pomnilnika. 188 HORVAT, MIHELIČ 3.4 Tekstovni prikaz Za krmiljenje zaslona in tekstovni prikaz v Partnerju skrbi napredni zaslonski krmilnik (angl. advanced video display controller, AVDC), ki temelji na čipu Signetics SCN2674 [17]. Čip lahko deluje na različne načine, v Partnerju pa se uporablja t. i. samostojni način, kjer ima AVDC svoj pomnilnik, ki ni neposredno dostopen, temveč ga procesor upravlja s pošiljanjem posebnih ukazov. Pomnilnik je sestavljen iz dveh delov velikosti 4 kB, pri čemer prvi del vsebuje kode znakov, drugi pa njihove atribute [13]. Primer nekaterih podprtih ukazov: • izbira inicializacijskega registra, • vklop oz. izklop kurzorja, • vklop oz. izklop prekinitev, • zapis znaka in atributov na naslov kurzorja, • premik kurzorja na naslednji naslov, • zapis več enakih znakov in atributov. Več podrobnosti o uporabi čipa v računalniku Partner je predstavljenih v [18]. Kot je razvidno iz [17], čip AVDC za generiranje slike uporablja še generator zaslonskih znakov (vsebuje bitne slike znakov) in krmilnik grafičnih atributov (nadzoruje utripanje, podčrtavanje, osvetlitev in barvo znakov), ki pa procesorju nista neposredno dostopna, zato ju ni treba posebej emulirati. Njune funkcije, pomembne za delovanje AVDC, zato izvedemo kar v istem modulu. Tekstovna slika je sestavljena iz več vrstic, vsaka od njih pa naprej iz več vrstic pikslov. V tem vrstnem redu poteka tudi izris slike v čipu AVDC, zato se vsaka vrstica v njegovem pomnilniku prebere večkrat. Emulator pa nima neposrednega dostopa do strojne opreme gostitelja, zato sliko najprej v celoti izriše v vmesni pomnilnik in jo nato posreduje na gostiteljev zaslon. Partner podpira trinajst naborov znakov: poleg ju- goslovanskega in ameriškega nabora še nekatere druge (od teh so trije nedokumentirani). Žal procesor do slik znakov ne more dostopati, zato smo jih za potrebe emulatorja preprosto prerisali. Znaki se tako odebelijo, ločljivost slike pa ostane enaka. BIOS to zastavico v 80-stolpčnem načinu nastavi, v 132-stolpčnem načinu pa jo pobriše, vendar obe stanji delujeta v obeh načinih. To prikazuje slika 3.1. • Zastavica, ki negira sliko; svetli piksli postanejo temni in obratno. • Zastavica, ki jo emulator uporablja za razločevanje med 80-stolpčnim in 132-stolpčnim načinom, drugače pa njen pomen ni znan. V slednjem so znaki ožji. Slika 3.1: Nabor znakov DCGG v 80- in 132-stolpčnem načinu, z odebelitvijo in brez. V emulatorju so registri in pomnilnik AVDC shranjeni v poljih. Slika se izriše kot na pravem AVDC (z izjemo, da procesor medtem stoji); za vsako vrstico se preberejo znaki z naslova, ki je določen v vrstični tabeli, za vsak stolpec se glede na njegove atribute določi barva ospredja (torej barva samega znaka) in ozadja (ki zapolni preostanek pravokotne celice). Potem se znak (oz. polovica ali četrtina znaka, če so znaki v vrstici dvojne širine ali višine) izriše na tistem mestu. Pri tem se tudi skalira in odebeli, če je treba. AVDC lahko tudi sproža prekinitve procesorju. Partnerjev BIOS omogoči le 42 Slika 3: Nabor znakov generatorja zaslonskih znakov v 80- stolpičnem načinu Primer nabora znakov je na sliki 3. Partner podpira 80- in 132-stolpični način prikaza, pri čemer piksle v prvem načinu horizontalno odebeli. Oba načina imata 26 vrstic. Emulator čipa sliko izriše po znakih, pri tem se za vsak znak glede na njegove atribute določi barva ospredja (barva znaka) in barva ozadja, nato se znak (oz. njegova ustrezna polovica ali četrtina, če gre za dvojno širino ali višino) izriše na ustreznem mestu. Pri tem se tudi ustrezno skalira in odebeli, če je treba. Čip AVDC lahko tudi sproži različne prekinitve, pri čemer Partnerjev BIOS omogoči le prekinitev ob intervalu navpičnega vračanja (angl. vertical blanking interval). Posledično smo se odločili le za emulacijo te prekinitve, preostalih pa ne (npr. prekinitve, ki se proži ob začetku izrisa prve vrstice pikslov vsake vrstice). 3.5 Grafični prikaz Grafična različica Partnerja poleg čipa AVDC vsebuje še grafični procesor (angl. graphic display processor, GDP) Thomson EF9367 [19]. GDP ima svoj pomnilnik, velik 128 kB, ki vsebuje dve t. i. strani, katerih ločljivost je lahko 1024×512 ali 1024×256 pikslov, pri čemer vsak piksel zavzame en bit. Medtem ko programska oprema riše na eno stran, lahko GDP prikazuje drugo (ali isto) stran. Grafika na zaslonu prekrije besedilo, ki ga prikazuje AVDC. Tudi do grafičnega pomnilnika CPE nima neposre- dnega dostopa. Bralne in pisalne operacije sproža s pošiljanjem ukazov, npr.: • risanje črt z Bresenhamovim algoritmom v različnih slogih, • risanje besedila v pisavi, vgrajeni v ROM čipa GDP (različna od pisave AVDC), pokončno ali ležeče, vodoravno ali navpično, v poljubni velikosti, • brisanje celotne slike, • določanje, ali se piksli “rišejo” (prižigajo) ali “brišejo” (ugašajo), • branje vrednosti piksla. Več podrobnosti o čipu in njegovi rabi v Partnerju je obrazloženih v [18]. Emulator ukaze za GDP izvaja tako, da spreminja sliko v polju, kjer vsak piksel zaseda en bit. Ko je treba vsebino zaslona osvežiti, se vsebina vidne strani izriše; za prižgane piksle to pomeni, da se svetlosti tistega piksla na zaslonu prišteje neka konstanta. Tako se slika združi s tisto, ki jo je prej narisal AVDC. 3.6 Združitev tekstovnega in grafičnega prikaza Sliki, ki ju generirata AVDC in GDP, sta neodvi- sni. Emulator mora za prikaz sliko celotnega zaslona izrisati v polje kvadratnih pikslov enakih velikosti. Na vprašanje, kaksno ločljivost slike in gostoto pikslov uporablja Partner, ni enotnega odgovora, saj: • AVDC generira sliko 80×26 ali 132×26 znakov. Vsak znak je velik 8×11 pikslov. To je skupaj 640×286 oz. 1056×286 pikslov, pri čemer so v pr- vem primeru piksli še dodatno raztegnjeni v širino. • GDP generira sliko velikosti 1024×256 ali 1024×512 pikslov; le v drugem primeru so piksli kvadratni (gostota je približno 128 dpi v obe dimenziji). EMULATOR RAČUNALNIKA ISKRA DELTA PARTNER 189 Maksimum obeh dimenzij je 1056×512. V resnici pa je slika čipa AVDC nekoliko večja od slike čipa GDP (približno za višino ene vrstice besedila v vsako smer). Treba jo je torej skalirati, vendar dovolj hitro in tako, da je besedilo še vedno dovolj estetsko, saj je treba sliko izrisati do 50-krat na sekundo. Za sliko čipa GDP to ni problem, ker so piksli ali kvadratni ali pa podvojeni v višino. Odločili smo se za ločljivost 1056×572 oz. 1024×572, če je zaslon gostitelja ožji od 1056 pikslov. Pri tem velja: • Višina slike AVDC se v vsakem primeru podvoji (zato višina 572 pikslov). • Če AVDC prikazuje 80 stolpcev, se vsak drugi piksel podvoji v širino; slika AVDC je potem široka 960 pikslov, (kar je manj kot slika GDP, vendar videz večine aplikacij zaradi tega ne trpi) in je vodoravno centrirana. • Če AVDC prikazuje 132 stolpcev in je zaslon ožji od 1056 pikslov, je vsak četrti znak širok samo 7 pikslov namesto 8. Slika AVDC je potem široka 1023 pikslov. • Slika GDP se podvoji v višino, če je izbrana ločljivost 1024×256, drugače pa se ne skalira. V vsakem primeru se navpično centrira. • Če je zaslon širši od 1024 pikslov, se slika GDP vodoravno centrira. 3.7 Serijski vmesnik Partner ima lahko ena ali troja serijska vrata, ki ustrezajo standardu RS-232-C in uporabljajo konektor DB-25 [13]. Zanje skrbita dva krmilnika, od katerih ima vsak dva kanala, pri čemer vsak kanal zaseda dva vhodno-izhodna naslova [13], [20]. Prvi je podatkovni naslov, s pisanjem na katerega se sproži pošiljanje, če je krmilnik na to pripravljen, z branjem pa se dobi čakajoči podatek, če je na voljo. Drugi je naslov, ki se uporablja za branje statusnih informacij (npr. ali je prejel podatek, ki ga mora aplikacija prebrati) in spreminjanje nastavitev (npr. hitrosti komuniciranja). Prejemanje in pošiljanje podatkov poteka sinhrono. Emulator samih vrat posebej ne emulira, emulira pa nekatere naprave, priključene nanje. 3.8 Tipkovnica Partnerjevo tipkovnico (prikazana je na sliki 4) je izdelalo podjetje Gorenje in se priključi na serijska vrata, vendar s konektorjem DIN 5. Z računalnikom komunicira s hitrostjo 300 bitov na sekundo [13]. Tipkovnica ima poleg alfanumeričnih tipk in nu- meričnega dela še nekaj posebnih tipk, ki jih danes standardne tipkovnice nimajo. Emulator jih zato preslika na ustrezne tipke na čim bolj podobnih mestih. Kode, ki jih generirajo tipke, so v večini primerov enake kodam znakov ASCII (angl. American standard code for information interchange), ki jih predstavljajo. Pri tem posebne tipke, kot so SHIFT, CTL in CAPS, vplivajo na generirane kode, same pa kod ne generirajo. Slika 4: Partnerjeva tipkovnica Posledično računalnik neposredno ne zazna teh tipk in med njimi tudi ne loči, npr. med kombinacijo SHIFT+A in tipko A v načinu velikih črk (CAPS). Nadalje je računalnik s prekinitvijo obveščen le o pri- tisku (vendar ne spustu) tipke, če pa je tipka pritisnjena dalj časa, se ustrezna koda pošilja ponavljajoče. Tipkovnica ima tudi osem lučk in zvočnik, ki se lahko oglaša z dolgim, kratkim ali zelo kratkim piskom, kjer se slednji opcijsko proži ob pritisku tipk. Oboje je mogoče upravljati programsko s pošiljanjem 8-bitnih vrednosti, pri čemer nekatere vrednosti spreminjajo način delova- nja tipkovnice, npr.: • ali tipke ob pritisku povzročijo pisk, • ali daljši pritisk tipke sproži ponavljanje kode, • ali je v rabi jugoslovanski (QWERTZ) ali ameriški (QWERTY) razpored tipk. Uporabnik do teh in tudi drugih nastavitev pride preko programa, vgrajenega v BIOS, ki ga prikliče s tipko SET UP. Med razvojem smo ugotovili, da obstajata vsaj dva različna modela tipkovnice, saj se je tista, ki smo jo imeli na voljo, odzivala na drugačne ukaze, kot jih je pošiljal BIOS. Zaradi boljše uporabniške izkušnje smo emulator prilagodili modelu, kot ga predvideva BIOS. Večina aplikacij tipkovnico le bere (preko funkcij BDOS), zato razlika v modelih ne pomeni velike težave. Ko emulator zazna pritisk prave tipke, jo preslika v ustrezno kodo in sproži prekinitev serijskega vmesnika ter pri tem predvaja še ustrezen pisk, če je ta opcija vklopljena. BIOS se potem odzove z branjem podatkov- nega registra serijskih vrat, preko katerega mu emulator poda preslikano kodo tipke. Ob daljšem pritisku tipke in vklopljenem ponavljanju tipk emulator nato še naprej periodično sproža prekinitve, dokler tipka ni spuščena. 3.9 Disketni pogon in trdi disk Partnerjev ROM omogoča zaganjanje operacijskega sistema tako z disketnega pogona kot s trdega diska, ki ga ima le model WF/G. Tega upravlja krmilnik Xebec S1410, o krmilniku prvega pa skorajda nismo imeli nobenih informacij. Zato in tudi iz želje po čim prejšnjem delovanju CP/M smo se odločili za emulacijo na višjem nivoju, tako imenovano virtualizacijo na nivoju gonilnika [4], kjer 190 HORVAT, MIHELIČ smo v emulatorju implementirali prestrezanje diskovnih funkcij. Ta pristop bi se dalo uporabiti tudi za druge naprave, vendar smo se ga zaradi želje po čim boljši emulaciji izogibali. Na srečo CP/M vedno kliče BIOS skozi dokumenti- rane vstopne točke, zato emulator pred izvedbo vsakega strojnega ukaza preveri vrednost v PC in če se ujema s katero od vstopnih točk za diskovne funkcije, emulator izvede želeno operacijo in vrne ukaz RET, ki povzroči, da se prava funkcija ne izvede. Natančneje, emulator to stori za funkcije HOME, SELDSK, SETTRK, SET- SEC, SETDMA, READ, WRITE in SETBNK. Ta metoda dobro deluje, ker je CP/M edini operacijski sistem za Partnerja in ker večina aplikacij ne dostopa do teh naprav neposredno, ampak preko operacijskega sistema. Nam znani izjemi sta predvsem programa WF in DISKETTE, ki sta namenjena prav temu, da preve- rita delovanje trdega diska in njegovega krmilnika oz. trenutno vstavljene diskete, in program FORMAT, ki formatira diskete. Tudi ROM do teh naprav dostopa neposredno (saj drugače ne more začeti nalaganja opera- cijskega sistema), zato emulator prestreže tudi nekatere njegove funkcije. 3.10 Ura realnega časa Poznavanje datuma in ure Partnerju omogoča ura re- alnega časa, ki jo napaja baterija. Procesorju je dostopna kot množica registrov, ki vsebujejo časovne komponente (tisočinke, sekunde, minute, ure, dan, mesec, zadnji dve števki leta) v obliki “packed BCD”. Vsak register ima svoj V/I naslov, ki je namenjen za branje in pisanje. Emulator dobi datum in čas od gostiteljevega ope- racijskega sistema. Ker Partnerjev BIOS in CP/M ne podpirata datumov po letu 1999 (zaradi hroščev se ne izpišejo pravilno; to bi se sicer dalo popraviti), emulator od trenutnega leta odšteje večkratnik 28, da je leto manjše od 2000 (npr. 2018− 28 = 1990). Gregorijanski koledar se namreč ponovi na vsakih 28 let; npr. 1. julij je bila sobota tako leta 2017 kot 1989, 31. julij pa ponedeljek (ta rešitev deluje do 28. februarja 2100). K uri realnega časa spada tudi majhen pomnilnik, namenjen za shranjevanje uporabniških nastavitev. Emu- lator vsebino tega pomnilnika ob zagonu prebere iz datoteke (oz. uporabi privzete vrednosti), ob izhodu pa jo shrani, če so se nastavitve spremenile. 4 RAZPRAVA Preden zaključimo, podajmo še kratko ovrednotenje naše rešitve v smislu smernic ovrednotenja emulacije kot metode digitalnega ohranjanja [21], pri čemer se osre- dinimo predvsem na natančnost emulacije, prenosljivost emulatorja in na uporabniško izkušnjo. Naš glavni cilj pri razvoju je bila kar se da na- tančna emulacija. Kljub temu se delovanje emulatorja v nekaterih podrobnostih razlikuje od delovanja pravega Partnerja. Večina razlik se navezuje na sočasnost delovanja pravih naprav, ki so v emulatorju izvedene zaporedno. To se odraža pri emulaciji AVDC in GDP, kjer se spremembe v njunih registrih oz. pomnilniku uveljavijo le periodično namesto v realnem času, saj emulator ne poustvari delovanja zaslona s katodno cevjo. Druga stvar, povezana s časom, so razne zakasnitve strojne opreme kot posledica njenega sočasnega delovanja. Pri- mer je pomnilnik (DRAM), do katerega je dostop v emulatorju z vidika gosta takojšen. Prenosljivost emulatorja smo dosegli z uporabo pro- gramskega jezika C in knjižnice Simple DirectMedia Layer [22], ki priskrbi enoten vmesnik za upravljanje V/I naprav na številnih operacijskih sistemih (preizkušeno na Windows, Mac OS, OS/2, Haiku). Preko okolja Em- scripten [23], ki kodo iz jezika C prevede v JavaScript, pa je emulator mogoče (omejeno, brez zvočnih učinkov) izvajati tudi v spletnem brskalniku. Uporabniško izkušnjo emulatorja pa smo nadgradili z uporabo zvočnih posnetkov trdega diska, tipkovnice in stikal za vklop oz. izklop in resetiranje. Tudi slika na zaslonu je takoj po “vklopu” črna, šele nato doseže polno svetlost, medtem pa se predvaja zvok zagona trdega diska. Med Partnerjevo programsko opremo, ki zahteva na- tančnejše delovanje emulatorja, najdemo tudi grafično aplikacijo VIGRED, katere zaslonska slika je prikazana na sliki 5. Slika 5: Zaslonska slika aplikacije VIGRED v emulatorju 5 SKLEP Na začetku projekta zaradi težav z disketnim po- gonom in serijskimi vrati ter pomanjkanjem doku- mentacije nismo vedeli, ali nam bo uspelo narediti delujoč emulator. Težave smo uspešno prebrodili in z nekaj znanja, sreče ter obratnega inženiringa nam je vseeno uspelo narediti emulator, ki se z vidika uporabnika obnaša skoraj enako kot pravi Partner. Večina zbrane dokumentacije, kakor tudi končna iz- vedba emulatorja, je na voljo v okviru spletne strani http://matejhorvat.si/sl/slorac/delta/partner/. Projekt je trajal okrog štiri mesece, sama programska koda (brez knjižnic) obsega okrog 3500 vrstic. Poleg EMULATOR RAČUNALNIKA ISKRA DELTA PARTNER 191 tega smo napisali še okrog 1000 vrstic dodatne kode v različnih jezikih, npr. kodo za izdelavo bitne slike trdega diska in bralnega pomnilnika itd. Emulatorju bi lahko dodali še emulacijo nekaterih naprav, kot so npr. tiskalnik, risalnik in grafična tablica, ter tudi funkcije, ki bi izboljšale uporabniško izkušnjo, kot so npr. integracija z datotečnim sistemom gostitelja, skupno odložišče med emulatorjem in gostiteljem itd. Za konec omenimo še, da trenutno na Fakulteti za računalništvo in informatiko Univerze v Ljubljani iz- vajamo študentski projekt, s katerim skušamo pridobiti dokumentacijo in druge vire še o drugih starodobnih slovenskih računalnikih, ki pa so bili morda manj upo- rabljani in izdelani v še manjših količinah kot Partner. Na podlagi teh rezultatov upamo, da v prihodnosti lahko izdelamo še kakšen emulator slovenskega starodobnega računalnika. ZAHVALA Zahvaljujemo se Janezu Kožuhu, ki je muzeju Fakultete za računalništvo in informatiko Univerze v Ljubljani doniral delujoč računalnik Iskra Delta Partner, in izr. prof. dr. Veselku Guštinu za vso pomoč in trud, ki ga vlaga v fakultetni računalniški muzej. Za pomoč pri iz- delavi bitnih slik Partnerjevih disket in iskanju ustreznih disketnih pogonov se zahvaljujemo Tadeju Pečarju in doc. dr. Tomažu Dobravcu. Za fotografiji Partnerja in razne nasvete se zahvaljujemo dr. Gašperju Fele Žoržu in Službi za komuniciranje FRI za izposojo fotoaparata.