Elektrotehniški vestnik 85(4): 185-191, 2018 Izvirni znanstveni članek Emulacija računalnika Iskra Delta Partner Matej Horvat, Jurij Mihelič Univerza v Ljubljani, Fakulteta za računalništvo in informatiko, VeČina pot 113, 1000 Ljubljana, Slovenija E-pošta: matej.horvat@guest.arnes.si, jurij.mihelič@fri.uni-lj.si Povzetek. V osemdesetih letih prejšnjega stoletja je bila slovenska računalniška industrija na višku svojega razvoja, dandanes pa njenih dosežkov tako rekoč ni nikjer več zaslediti. Ohranjanje slovenske računalniške dediščine ima velik pomen iz več zornih kotov: od izobraževalnega in raziskovalnega do ohranjanja nacionalne identitete. V tem članku predstavimo dejavnosti, ki smo jih izvedli za ohranjanje enega pomembnejših slovenskih računalnikov (Iskra Delta Partner). Pri tem se osredinimo predvsem na izdelavo emulatorja računalnika, kar vključuje emulačijo pročesorja in več različnih pripadajočih naprav. Emulator smo izdelali v programskem jeziku C in s tem omogočili njegovo učinkovitost in prenosljivost, pri čemer ga je s pomočjo ustreznih orodij mogočše izvajati čelo v spletnem brskalniku. V prvem delu čšlanka predstavimo osnovne končepte emulačije, nato sledi kratka predstavitev emuliranega račšunalnika. V glavnem delu pa predstavimo izdelavo emulatorja, pri čšemer podrobno opisšemo tudi emulačijo posameznih naprav. Ključne besede: arhiviranje, CP/M, emulator, navidezni stroj, obratni inzeniring, ohranitev, Z80 Emulation of the Iskra Delta Partner computer In the 1980s, the computer industry in Slovenia was at its peak of development, and nowadays its achievements are practicaly nowhere to be found. Preservation of the Slovene computer heritage is of great importance from several perspectives, from educational and research to preservation of the national identity. In this paper we present various activities that we carried out for the conservation of one of the most important Slovenian computers, the Iskra Delta Partner. In doing so, we focus primarily on creating a computer emulator, which involves emulation of the processor and several related devices. We created the emulator in the C programming language, thus enabling its efficiency and portability, while with the help of appropriate tools, it can also be executed within a Web browser environment. In the first part of the paper we discuss the basic concepts of emulation and briefly examine the emulated computer. In the main part we present the emulator, its construction, and give a detailed description of the emulated devices. 1 Uvod V današnjem casu v svetu pretežno prevladujeta računalniška tehnologija in oprema, zasnovani v zahodnih in izdelani v vzhodnih državah. Verjetno si le malokdo predstavlja, da je nekoc 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 racunalnike -, namenjeno poslovni rabi, in programsko opremo zanje [1]. V primerjavi s hišnimi racunalniki tistega casa je te racš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 teZko najti; enako velja za ljudi, ki imajo specifične informacije o njih. Poleg tega se strojna oprema in povezana tehnologija zelo hitro starata, zato na slovenske staro-dobne računalnike prezi nevarnost pozabe. Fizično ohranjanje starodobne strojne opreme lahko sčasoma postane zapleten izziv (npr. odpoved posameznih 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, dokumentačijo in seveda znanje s področja temeljnih ved o delovanju računalnikov, npr. po-dročšij račšunalnisš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. Področje, ki se ukvarja s tem, se imenuje digitalno ohranjanje (angl. digital preservation), emulačija pa je le ena od spečifičnih tehnik [2], [3] tega področja. Dobro programsko posnemanje strojne opreme lahko dosezemo tako, da ustvarimo program, ki izvaja funkčije in opravila pročesorja in pripadajočših vhodno-izhodnih (V/I) naprav enako kot imitirani računalnik. Takemu programu pravimo emulator in omogoča izvajanje programske opreme na drugem računalniku (gostitelj) kot na tistem, za katerega je bila prvotno razvita (gost). Emulirati pomeni implementirati vmesnik in funkčio-nalnost nekega sistema na sistemu z drugačšnim vmesnikom in funkčionalnostjo [4]. Poleg izvajanja programske 186 opreme na drugem procesorju (kar omogoča navidezni stroj) emulator poustvarja tudi V/I naprave; tako gostujoči program praviloma ne more ugotoviti, da se ne izvaja na prvotni strojni opremi. Emulacija se pogosto uporablja tudi v izobraZevalne namene [5], [6], tako imenovana emulacija celotnega sistema [7] pa je pogosto edini dolgorocni in celoviti nacin za njegovo ohranitev [8], [9], [10]. V nadaljevanju clanka predstavimo razvoj in implementacijo emulatorja za racunalnik Partner podjetja Iskra Delta. Emulator kot gostitelja uporablja danes "standardni" PC (angl. personal computer) ali Mac racunalnik. V naslednjem razdelku opišemo tehnicne lastnosti racunalnika s poudarkom na procesorju, pomnilniku in nekaterih V/I napravah. Poleg tega podamo še nekaj podrobnosti o operacijskem sistemu CP/M, ki ga uporablja Partner. Glavni prispevek clanka 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 cetrtem poglavju podamo kratko ovrednotenje naše rešitve, opišemo zanimivejše tezave in rešitve iz ozadja razvoja emulatorja in obratnega inzeniringa, ki je bilo potrebno za pridobivanje pravih informacij o Partnerju. 2 Iskra Delta Partner Namizni racunalnik Iskra Delta Partner je bil prvic 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 vkljucuje zaslon, trdi disk, disketni pogon in sam racunalnik, tipkovnica pa je locena in z osnovno enoto povezana s kablom. V nadaljevanju tega razdelka na kratko opisšemo osnovne lastnosti racunalnika Partner, pri cemer smo številne od njih ugotovili preko obratnega inzeniringa. 2.1 Procesor in pomnilnik V racunalnik 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 zdruzeni v pare, da sestavljajo 16-bitne razlicice, tako so na voljo naslednji registrski pari: AF, BC, DE in HL, pri cemer 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. HORVAT, MIHELIC Slika 1: Iskra Delta Partner WF/G, na zaslonu je prikazan program URASET Procesor podpira razlicne odzive na prekinitve, pri cemer Partner uporablja naslednji nacin. 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[28 • I + data]. Procesor podpira dva locena naslovna prostora: 16-bitni pomnilnisš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. Racunalnik 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. banka 1 'č o E C ___Q__ Q_ Q- C 1/1 rs banka 2 _Q 0 2000 F400 FFFF Slika 2: Organizacija pomnilnika v Iskra Delta Partnerju ROM ob zagonu racunalnika zaseda spodnjih 8 kB. Njegova glavna naloga je nalaganje operacijskega sistema, ki ga nato izkljuci in prostor zasedeta banki. 2.2 V/I naprave Racšunalnik Partner ima vgrajen disketni pogon za 5,25-palcne diskete, pri cemer 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 mikroracunalnike 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 vec delov. Prvi del je BIOS, ki se razlikuje glede na racunalnik in ga priskrbi izdelovalec racunalnika. Partnerjev BIOS poleg zahtevanih funkcij za CP/M vsebuje še funkcije za risanje graficnih primitivov [13]. Njegove funkcije klice drugi del, ki se imenuje BDOS (angl. basic disk operating system) in je neodvisen od strojne opreme ter implementira višjenivojske funkcije, ki jih klicejo 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 racšunalniku tudi v emulatorju navidezna centralna procesna enota (CPE) nadzira in usklajuje delovanje 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 cšlovek (tipkovnica, misška, zaslon), zahtevajo posebno obravnavo. Na pravem Partnerju se slika na zaslonu osvezuje s frekvenco 50 Hz socasno z delovanjem procesorja, v emulatorju pa se zaradi enostavnosti emulacija procesorja in izrisovanje izvajata izmenicno. Natancneje, v vsaki iteraciji glavne zanke se izvede 4 MHz/50 Hz = 80000 procesorskih ciklov, nato se izriše zaslonska slika, ce se je spremenila. Sprozijo se tudi morebitne cakajoce prekinitve. Potem emulator caka 20 ms (1/50 s) ali manj (odvisno od tega, kako dolgo je trajalo izrisovanje slike) in zanka se ponovi. Tako emulirani procesor doseze hitrost, ki je priblizno enaka kot v pravem Partnerju (morebitne zakasnitve, ki jih zahteva DRAM (angl. dynamic RAM), se ne uposštevajo). Hkrati emulator preverja, ali je bila pri-tisnjena tipka na tipkovnici, ali je bil pritisnjen ali spušcen 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 sprozši prekinitev, da obvesti programsko opremo o pritisku tipke. 3.2 Centralna procesna enota Za emulacijo CPE smo uporabili knjizšnico Zymosis [16]. Uporaba knjiznice je tako rekoc poljubna, ker je avtor knjiznico deklariral kot javno dobro (angl. public domain). Knjizšnica natancšno implementira emu-lacijo procesorja Z80, vkljucno z nedokumentiranimi inštrukcijami in drugimi podrobnostmi. Za vecjo prenosljivost smo knjiznico še nekoliko prilagodili. Emulirani procesor se z napravami povezuje preko mehanizma povratnih klicev (angl. callback). To je mehanizem, kjer knjiznici 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 poklice 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 (vkljucšno z glavnim pomnilnikom) s CPE izvedemo tako, da za vsako napravo implementiramo vsaj naslednje funkcije: • Ponastavitev naprave: Funkcijo za ponastavitev naprave knjiznica poklice ob zacetku emulacije in vsakic 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 zapisše v napravo. Ta nato glede na zapisano vrednost izvede ustrezno operacijo. Naprave lahko tudi sprozajo prekinitve, vendar ker je vsaka naprava drugacne 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 pomnilnisš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 graficno predstavljen na sliki 2. Polje, ki predstavlja pomnilnik, je treba na zacetku emulacije inicializirati, tako da se v zacetek polja nalozi vnaprej pripravljena slika bralnega pomnilnika. 188 HORVAT, MIHELIC 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 cipu Signetics SCN2674 [17]. Cip lahko deluje na različne načine, v Partnerju pa se uporablja t. i. samostojni nacin, kjer ima AVDC svoj pomnilnik, ki ni neposredno dostopen, temvec ga procesor upravlja s pošiljanjem posebnih ukazov. Pomnilnik je sestavljen iz dveh delov velikosti 4 kB, pri cemer 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 vecš enakih znakov in atributov. Vec podrobnosti o uporabi cipa v racunalniku Partner je predstavljenih v [18]. Kot je razvidno iz [17], cip AVDC za generiranje slike uporablja še generator zaslonskih znakov (vsebuje bitne slike znakov) in krmilnik graficnih atributov (nadzoruje utripanje, podcrtavanje, osvetlitev io barvo znakov), ki pa procesorju nista neposredno dostopna, zato ju ni treba posebej emulirati. Njune funkcije, pomembne za delovanje AVDC, zabo izvedemo kar v istem modulu. Tekstovna slika je sestavljena iz vec vrstic, -vsaka od njih pa naprej iz vec 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 jugoslovanskega 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. i rl4~---_H-Lrl iZttf ! ()#+,-. /0123^56789: ; < =>? eABCDEFGHIJKLMNOPQRSTUUNXYZ[\]A_ ' abcde-f ghi jklrrinopqrs-fcuvwxyzi! A AG/aČČQ£NO!3§ŠLIŽ:odd3&Č čdčroafcšliži titličs5**