Upravte si MSX programy pro SORD m.5 s podtitulem System ktery propadl bohatym zdrojem softwaru Hned na zacatku tohoto clanku bych chtel reagovat na sdeleni, ktera jsme se mohli v poslednich letech docist v ruznych technicky zamerenych casopisech. Totiz, ze system MSX se neprosadil, popripade, ze uplne zanikl. Jiste, srovnavat rozsirenost systemu MSX s IBM PC/XT/AT nelze, nicmene MSX je v teritoriu, kde se uchytil, rozsiren srovnatelne s jinymi osmibitovymi pocitaci. Opravdovou popelkou mezi pocitaci je, vedle nekterych nasich vyrobku, i drive Tuzexem prodavany SORD m.5 ( dale jen M5 ). Jelikoz bylo vyrobeno jen nekolik tisic kusu tohoto pocitace, zustal stranou zajmu malych i velkych softwarovych firem. Veskery software, ktery se dal pro M5 "venku" sehnat, by se dal spocitat na prstech. Proto sbirku asi dvou tisic programu, kterou mam, tvori prevazne programy vytvorene v Ceskoslovensku. Zlate ceske ( vlastne moravske a slovenske ) rucicky take napsaly a zprovoznily emulator systemu MSX verze 1.0 a emulator procitace ZX Spectrum ( zde bych chtel obema autorum podekovat ). Tim ze bylo "najednou" mozne poustet programy napsane pro tyto pocitace i na M5, se programova nabidka zacala zvolna rozsirovat. A to predevsim diky programum pro system MSX, jehoz emulator se objevil drive. Zvolna proto, ze nektere programy se odkazuji primo na hardware "sveho" pocitace a proto se musi pro M5 nejprve upravit. A temto upravam se nyni budu venovat. Jak funguje emulator -------------------- Nechytejte me za slovo, pokud budete mit dojem, ze se nejedna o emulator, ale o simulator. Po hardwarove strance jsou si systemy M5 a MSX vcelku podobne, oba maji stejny mikroprocesor Z80 a stejny typ videoprocesoru TMS. Zvukove cipy se od sebe svymi schopnostmi nepatrne lisi. Naprosto rozdilne je pak zapojeni klavesnice, joysticku, tiskarny a magnetofonu. Emulator funguje tak, ze v pameti pocitace M5 bezi program, ktery neni nic jineho nez upravena ROM pocitace MSX. Veskere zmeny v teto ROM se tykaji pouze odkazu na hardware. Jsou precislovany kanaly videoprocesoru, je emulovan zvukovy cip, zcela je prepracovan prerusovaci system a s nim i obsluha klavesnice. Rutiny se tedy navenek tvari stejne jako v pocitaci MSX, ale uvnitr pracuji jinak. Program z teto ROM se z pochopitelnych duvodu v pocitaci M5 nachazi v pameti RAM, jejiz velikost je v tomto pripade 64KB. Vzhledem k povaze tohoto clanku z neho mohou cerpat nove poznatky i majitele pocitacu MSX. Vedle experimentalne ziskanych zkusenosti, jsem vedomosti cerpal z [1] a [2]. Provadeni uprav --------------- Protoze vetsinou mame zajem na tom, aby nami upravene programy fungovaly i na originalu MSX, musime dodrzovat urcita pravidla hry. Zmeny tedy nebudeme provadet primo, ale podminene, podle pocitace, na kterem program prave bezi. V basiku to provedeme tak, ze se v podmince ptame na typ pocitace a podle vysledku pak vykoname puvodni prikaz pro original MSX nebo upraveny prikaz pro emulator. Na adrese 0006h ma BIOS-MSX konstantu, ktera obsahuje cislo datoveho portu videoprocesoru. V originalu je 98h, zatim co v emulatoru je 10h. Dotazem na tuto hodnotu lze tedy programove rozlisit original MSX od jeho emulatoru. Basic ----- Nejmin prace je s programy napsanymi v MSX basiku. Drtiva vetsina z nich funguje hned a neni potreba je nijak upravovat. Vyjimku tvori ty programy, ve kterych se vyskytuji prikazy IN a OUT, eventuelne ve kterych se strankuji sloty. Pri upravach se predpoklada znalost MSX basiku a proto konkretni reseni uprav zalezi predevsim na vasem umu. Strojovy kod ------------ Zde se predpoklada dobra znalost assembleru a nejakeho monitorovaciho programu, kterym budeme programy prohlizet. MSX programy, ktere se dusledne odkazuji na BIOS MSX se upravovat nemusi. Jedinou vyjimku tvori ty programy, ktere strankuji sloty a vyuzivaji pridavne pameti. Ty zpravidla zprovoznit nelze. Vsechny rutiny emulatoru pracuji shodne s originalem MSX. Jedinou vyjimku tvori odkazy na rutinu SNSMAT na vektoru 0141h, ktera cte podle cisla v akumulatoru radu klaves. MSX ma klavesy pochopitelne rozmisteny jinak nez M5, takze dochazi k rozdilum. Neadekvatni vysledky dava take pouziti rutin pro strankovani slotu, v emulatoru se zadne sloty nepredpokladaji. Poznamka: vsechny nize uvedene adresy a konstanty jsou hexadecimalni, cisla za kterymi nasleduje T jsou dekadicka. Jednodilne programy ve strojovem kodu ------------------------------------- Vetsina z nas se pri ziskani noveho programu MSX pokusi jej hned bez jakychkoliv uprav spustit. Ja doporucuji zjistit si nejprve jeho umisteni v pameti, napriklad pomoci programu MOBZ-CAT. Pak jej teprve nahrat a pokud nezacina na adrese 8000, jednoduchym basickym cyklem nahradit v programu kombinace bajtu D398, DB98, D399, DB99, DBA2 a DBA9 bajty D310, DB10, D311, DB11, DB37 a DB34. Pote teprve program spustime a piseme si poznamky o tom, ktere klavesy nam program nabizi, funguji-li joysticky, je-li obraz vporadku a podobne. Podle vysledku tohoto pokusu se pak program bude upravovat na trvalo. Upravy nutne ------------ Videoprocesor ------------- MSX ma stejny videoprocesor ( dale jen VDP ) jako M5. Avsak ma jej zapojeny na portech 98 a 99, zatim co M5 na portech 10 a 11. Proto je potreba vsechny odkazy ( instrukce IN a OUT ) presmerovat. V programu proto hledame kody D398, DB98, D399 a DB99 a zapisujeme si adresy na kterych lezi konstanta s cislem portu. Nachazi-li se napriklad bajty D398, t.j. instrukce OUT (98),A na adrese 9CB4, do poznamek si uvedeme 9CB5 - 10. Pro jistotu prohledneme program jeste i okolo instrukci OUT (C),r , neodkazuji-li se na VDP. Pri zapisu do registru 0 a 1 VDP dochazi k neshode v nekterych bitech. Rozdily jsou v tabulce 1. Pokud nam pri pokusnem startu vypadl obraz ( sikme pruhy pres obrazovku ), je to tim, ze program zapsal do registru 0 bajt se shozenym bitem EXTVI nebo se nastavil jiny typ pameti VRAM. Pokud mame na barevne televizi zelenocerne pozadi, je to tim, ze jako BCOL byla nastavena barva transparent ( pruhledna ). MSX ji zobrazuje jako cernou. Proto musime v programu tyto bajty najit a poznamenat si jejich adresy a konstanty, kterymi budou nahrazeny. Rutina pro zapis dat do registru VDP muze vypadat nasledovne: ... LD HL,REGVDP ;zacatek tabulky registru LD BC,0800 ;registru je 8 a zacina se od 0 NEXT LD A,(HL) ;nacti data OUT (98),A ;a vysli je do VDP LD A,C ;v cisle registru OR 80 ;nastavit nejvyssi bit OUT (98),A ;a vyslat za daty INC HL ;posunout se INC C DJNZ NEXT ;a cyklit ... REGVDP DB 02,62,11,23,21,33,11,E0 Tabulka bude posleze zmenena: REGVDP DB 03,E2,11,23,21,33,11,E1 Klavesnice ---------- MSX cte klavesnici tak, ze nejprve nastavi radu klaves ktera se bude cist ( brana 0AA PPI ) a pak ji teprve precte ( brana 0A9 PPI ). Ma proto vyhrazene jen dva porty. M5 ma vyhrazeno 7 portu, proto cte radu klaves rovnou ( brany 30 az 36 ). V systemu MSX pri precteni rady klaves reprezentuji nastavene bity nestisknute klavesy a shozene stisknute. U M5 je tomu naopak. Nasledujici priklady demonstruji jak lze precist radu klaves v systemu MSX: IN A,(0AA) ;nacti stav AND 0F0 ;akceptuj jen vyssi bity OR KEYROW ;pripoj radu, zde muze byt ADD A,KEYROW OUT (0AA),A ;zapis puvodni stav a novou radu IN A,(0A9) ;nacti stav stisklych klaves nebo jen LD A,KEYROW ;zde byva 0Fn OUT (0AA),A ;nastav IN A,(0A9) ;nacti a nebo jen LD A,KEYROW ;cislo rady CALL 0141 ;volej SNSMAT Vetsinou staci zjistit, ktere klavesy z nactene rady jsou v programu dale zpracovavany a podle toho program zmenit. Napriklad: hra nam na zacatku nabizi vyber ze ctyr moznosti - 1 nebo 2 hraci z joysticku nebo klavesnice. Volba se provadi stiskem klaves 1, 2, 3 a 4. Realizace v programu muze vypadat nasledovne: 9123 3EF0 LD A,0F0 ;rada klaves 0 az 7 a nic nesvitit 9125 D3AA OUT (0AA),A ;nastav 9127 DBA9 IN A,(0A9) ;precti 9129 .... nebo 9123 AF XOR A ;rada klaves 0 az 7 9124 CD4101 CALL 0141 ;nacti stav 9127 .... Upravu muzeme provest pozdejsi zmenou tento stav: 9123 00 NOP ;zbyle misto 9124 00 NOP 9125 DB31 IN A,(31) ;nacti radu klaves 1 az 8 9127 07 RLCA ;a zarotuj tak, aby bity odpovidaly 9128 2F CPL ;zneguj na 0-stisknuto, 1-nestisknuto 9129 .... nebo 9123 DB31 IN A,(31) 9125 07 RLCA 9126 2F CPL 9127 .... Pokud by program vyzadoval i klavesu 0, pak by jsme museli napsat kratky podprogram, ktery musi byt umisten mimo program a mimo oblast pameti programem vyuzivanou. V nasledujicim prikladu je po navratu z podprogramu v akumulatoru totez, co by se precetlo na originalu MSX. CALL ROW0 ;volej podprogram .... ROW0 IN A,(35) ;nacti klavesy 9 az \ RRCA ;posun vpravo RRCA ;posun vpravo - stav klavesy 0 do CY IN A,(31) ;nacti klavesy 1 az 8 RLA ;posun vlevo - bity ted odpovidaji klavesam 0 az 7 CPL ;neguj RET ;a ven Podobnym zpusobem lze upravit i cteni ostatnich rad klaves. Postupuje se podle tabulky 2. K tomu bych chtel jeste doplnit, ze na M5 neexistujici ridici klavesy ( HOME, INS, ESC, ... ), se zpravidla nenahrazuji, protoze jejich cteni pres SNSMAT se "strefuje" na M5 do normalnich klaves, ktere tyto plne nahradi. Totez plati pro cteni kurzorovych sipek ( smery ) a mezerniku ( trigger ), ktere se pouzivaji podobne jako joystick. Pri cteni instrukci IN se jen meni cislo portu, takze cteni ridicich klaves, sipek a mezerniku ( rady 06, 07 a 08 ) se nasmeruje na M5 na rady 32,33 a 34. Joystick -------- MSX ma joystick napojeny na zvukovy generator. Proto se cte joystick jako jeho 14ty registr. V registru 15 urcuje bit 6 ktery joystick je aktivni. Realizace v programu muze vypadat podle tohoto prikladu: DI LD A,0F ;nastav registr 15 OUT (0A0),A IN A,(0A2) ;a precti jak je nastaven AND 0DF ;shod bit vyberu joysticku - nastaven joystick 1 nebo OR 40 ;nastav bit vyberu joysticku - nastaven joystick 2 OUT (0A1),A ;a zapis do registu 15 LD A,0E ;nastav registr 14 OUT (0A0),A IN A,(0A2) ;a precti jej ... Protoze v M5 je joystick zapojeny uplne jinak, nelze instrukce jednoduchym zpusobem nahradit a musi se volat rutiny BIOSu. LD A,0F ;precti registr 15 CALL 0096 RES 6,A ;shod bit vyberu joysticku - nastaven joystick 1 nebo SET 6,A ;nastav bit vyberu joysticku - nastaven joystick 2 PUSH DE ;schovej E LD E,A ;priprav data LD A,0F ;nastav registr 15 CALL 0093 ;zapis do PSG POP DE ;obnov E LD A,0E ;precti registr 14 CALL 0096 ... protoze prvni cast podporgramu ma vyznam jen v originalu MSX, muzeme zkratit: LD A,0F ;nastav registr 15 PUSH DE ;schovej E LD E,00 ;bit vyberu joysticku schozen - nastaven joystick 1 nebo LD E,40 ;bit vyberu joysticku nastaven - nastaven joystick 2 CALL 0093 ;zapis do PSG POP DE ;obnov E LD A,0E ;precti registr 14 CALL 0096 ... Odkazuje-li se program na BIOS, muze cist joystick take pres vektory TRGSTA a JOYSTA na adresach 00D5 a 00D8. V takovem pripade se nemusi nic upravovat. Upravy mozne ------------ Zvuk ---- MSX obsahuje jiny zvukovy generator ( Programing Sound Generator, dale jen PSG ) nez M5 ( SGC ) a proto je v emulatoru rutina, ktera emuluje originalni PSG. Tato emulace neni uplne dokonala diky o dve oktavy mensimu rozsahu SGC. Nahrazovat odkazy na PSG v programu novymi odkazy do emulatoru nemusime, ale program pak zustane "nemy". V dalsim prikaldu je ukazka mozneho programovani PSG: LD A,REGISTR PUSH AF LD E,DATA OUT (0A0),A ;nastav registr LD A,E OUT (0A1),A ;a zapis do nej POP AF ... LD A,REGISTR OUT (0A0),A ;nastav registr IN A,(0A2) ;a precti ho ... nahrazuje se: LD A,REGISTR NOP LD E,DATA CALL 0093 NOP NOP NOP ... LD A,REGISTR CALL 0096 NOP ... Konkretni realizace uprav ------------------------- Zakladni sestava pocitace MSX predpoklada 32KB ROM ( 0000-7FFF ) a minimalne 8KB RAM ( E000-FFFF ). Bezne se vsak dodavaji pocitace s 64KB RAM. V takovem pripade je 32 KB RAM "skryto" pod ROM a 32 KB RAM je volne k dispozici. Programy se proto nahravaji z magnetofonu do adresove oblasti od 8000 do priblizne F000. Nektere z nich pak v originalu odpoji ROM, nebo jen jeji polovinu, misto ktere se pripoji RAM, do te se pak presunou a tam se teprve spousti. V M5 to vede k tomu, ze znici cast emulatoru, zpravidla jen cast basiku MSX. Ukoncit tento program a navratit se do prostredi basiku MSX pak pochopitelne nelze. Proto byla dohodnuta konvence, podle ktere je umozneno i tyto programy ukoncit s navratem do MSX basiku. Vychazi se z predpokladu, ze vetsina programu se premistuje do prostoru od adresy 4000 v delce 8mi nebi 16ti KB, pricemz pak pro sve potreby vyuzivaji oblast RAM od adresy E000. Oblast od 8000 do DFFF tim padem muze byt vyuzita pro nase potreby. Proto se v M5 pri premistovani programu neprovadi obycejny presun, nybrz zamena dvou oblasti RAM. Tim se program dostane na misto, kde ma bezet, a cast emulatoru, ktera by tim byla ztracena, je premistena na jeho puvodni misto. Pred ukoncenim behu programu se takto zamenene oblasti stejnym zpusobem vraci zpet na sve puvodni misto. Bezici program se ukoncuje zasadne stiskem obou klaves SHIFT. Proto je potreba se v hlavni smycce programu na tyto klavesy kratkym podprogramem dotazovat. Zpravidla se to resi tim, ze se tento podprogram "napichne na hacek" prerusovaciho systemu. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Programy, ktere se premistuji do prostoru od adresy 0000, se na BIOS odkazovat nemohou a nam nezbyva nez je cele prepracovat. Typickym prikladem je hra JUNO FIRST od firmy Konami. Priklad konkretni realizace u hry COMPUTER BILLIARDS od firmy Konami je uveden v prikaldu 18. Tato hra se po nahrani z magnetofonu nachazi v oblasti 9000 az ____. Startuje se od adresy ____, kde je odpojeni ROM, presun na adresu 4000 a vlastni start. Program ve strojovem kodu zacina napriklad na adrese 8000, konci na adrese C003 a startuje se na adrese C000. A vyuziva pro sve potreby oblast RAM od E000. Proto muzeme nase upravy "prilepit" hned za program. Jako prvni se testuje, jestli se nachazime v M5 nebo v MSX. Pak nasleduje bud skok na start MSX nebo pokracujeme v programu, ktery provede upravy. 8000 4142 DB 41,42 ;zacatek programu 8002 ____ DW ____ ;startovaci adresa 8004 .... ;zde napriklad zapis do VDP 8140 D398 OUT (98),A 8142 .... 8155 D398 OUT (98),A 8157 .... ;zde napriklad cteni klaves 9123 3E LD A,0F0 ;rada klaves 0 az 7 9125 D3AA OUT (0AA),A ;nastav 9127 DBA9 IN A,(0A9) ;precti 9129 2F CPL 912A E61E AND 1E 912C .... ;a zde start C000 2A0280 LD HL,(8002) ;puvodni start C003 E JP (HL) C004 3A0600 LD A,(0006) ;datovy port VDP C007 FE10 CP 10 ;je M5? C009 C 00C0 JP NZ,0C000 ;neni, je MSX - skoc C00C 3E10 LD A,10 ;datovy port VDP; tato instrukce tu nemusi ;byt, protoze v A 10ku mame C00E 324181 LD (8141),A ;zmena VDP C011 INC A ;povelovy port VDP, A=11 C012 325681 LD (8156),A C300C0 JP 0C000 ;a skok na puvodni start ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tabulky ------- 1. 7 6 5 4 3 2 1 0 bit/reg. VDP ,-------+-------+-------+-------+-------+-------+-------+-------. | 0 | 0 | 0 | 0 | 0 | 0 | M3 | EXTVI | R0 +-------+-------+-------+-------+-------+-------+-------+-------+ | VRAM | BLANK | INTEN | M1 | M2 | 0 | SIZE | MAG | R1 +-------+-------+-------+-------+-------+-------+-------+-------+ | 0 | 0 | 0 | 0 | adresa obrazovky | R2 +-------+-------+-------+-------+-------+-------+-------+-------+ | adresa tabulky barev | R3 +-------+-------+-------+-------+-------+-------+-------+-------+ | 0 | 0 | 0 | 0 | 0 | adresa predloh znaku | R4 +-------+-------+-------+-------+-------+-------+-------+-------+ | 0 | adresa tabulky spritu | R5 +-------+-------+-------+-------+-------+-------+-------+-------+ | 0 | 0 | 0 | 0 | 0 | adresa predloh spritu | R6 +-------+-------+-------+-------+-------+-------+-------+-------+ | barva popredi FCOL | barva pozadi BCOL | R7 `-------+-------+-------+-------+-------+-------+-------+-------' EXTVI - MSX=0, M5=1; exiterni video VRAM - MSX=0 nebo 1, M5=1; vyber VRAM: 0 = 4207 ; 1 = 4108 / 4116 2. klavesnice MSX 7 6 5 4 3 2 1 0 bit/brana ,-------+-------+-------+-------+-------+-------+-------+-------. | KEYBOARD COLUMN INPUTS | 0A9 | nacteni sloupce klaves | +-------+-------+-------+-------+-------+-------+-------+-------+ | KEY | CAP | CAS | CAS | KEYBOARD ROW SELECT | 0AA | CLICK | LED | OUT | MOTOR | vyber rady klaves | `-------+-------+-------+-------+-------+-------+-------+-------' 7 6 5 4 3 2 1 0 bit/rada ,-------+-------+-------+-------+-------+-------+-------+-------. | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 00 +-------+-------+-------+-------+-------+-------+-------+-------+ | ; | ] | [ | \ | = | - | 9 | 8 | 01 +-------+-------+-------+-------+-------+-------+-------+-------+ | B | A | # | / | . | , | ` | ' | 02 +-------+-------+-------+-------+-------+-------+-------+-------+ | J | I | H | G | F | E | D | C | 03 +-------+-------+-------+-------+-------+-------+-------+-------+ | R | Q | P | O | N | M | L | K | 04 +-------+-------+-------+-------+-------+-------+-------+-------+ | Z | Y | X | W | V | U | T | S | 05 +-------+-------+-------+-------+-------+-------+-------+-------+ | F3 | F2 | F1 | CODE | CAP | GRAPH | CTRL | SHIFT | 06 +-------+-------+-------+-------+-------+-------+-------+-------+ | ENTER | SEL | BS | STOP | TAB | ESC | F5 | F4 | 07 +-------+-------+-------+-------+-------+-------+-------+-------+ | | | | ^ | | | | | | | --> | | | | | <-- | DEL | INS | HOME | SPACE | 08 | | v | | | | | | | | +-------+-------+-------+-------+-------+-------+-------+-------+ | 4 | 3 | 2 | 1 | 0 | --- | --- | --- | 09 +-------+-------+-------+-------+-------+-------+-------+-------+ | . | , | - | 9 | 8 | 7 | 6 | 5 | 0A `-------+-------+-------+-------+-------+-------+-------+-------' klavesnice M5 7 6 5 4 3 2 1 0 bit/rada ,-------+-------+-------+-------+-------+-------+-------+-------. | ENTER | SPACE | --- | --- |P.SHIFT|L.SHIFT| FUNC | CTRL | 30 +-------+-------+-------+-------+-------+-------+-------+-------+ | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 31 +-------+-------+-------+-------+-------+-------+-------+-------+ | I | U | Y | T | R | E | W | Q | 32 +-------+-------+-------+-------+-------+-------+-------+-------+ | K | J | H | G | F | D | S | A | 33 +-------+-------+-------+-------+-------+-------+-------+-------+ | , | M | N | B | V | C | X | Z | 34 +-------+-------+-------+-------+-------+-------+-------+-------+ | \ | _ | / | . | ^ | - | 0 | 9 | 35 +-------+-------+-------+-------+-------+-------+-------+-------+ | ] | : | ; | L | [ | @ | P | O | 36 `-------+-------+-------+-------+-------+-------+-------+-------' 3. joystick MSX 7 6 5 4 3 2 1 0 bit/reg. PSG ,-------+-------+-------+-------+-------+-------+-------+-------. | CAS | KBD | JOY | JOY | JOY | JOY | JOY | JOY | 0E | | | | | | | | | ^ | | INPUT | MODE | TRG A | TRG B | --> | <-- | | | | | | | | | | | | v | | | +-------+-------+-------+-------+-------+-------+-------+-------+ | KANA | JOY | PULSE | PULSE | 1 | 1 | 1 | 1 | 0F | LED |SELECT | 2 | 1 | | | | | `-------+-------+-------+-------+-------+-------+-------+-------' JOY SELECT: 0=connector 1, 1=connector 2 joystick M5 7 6 5 4 3 2 1 0 bit/rada ,-------+-------+-------+-------+-------+-------+-------+-------. | ___ | ___ | P.JOY | P.JOY | ___ | ___ | L.JOY | L.JOY | 31 | | | TRG B | TRG A | | | TRG B | TRG A | +-------+-------+-------+-------+-------+-------+-------+-------+ | P.JOY | P.JOY | P.JOY | P.JOY | L.JOY | L.JOY | L.JOY | L.JOY | 37 | | | | ^ | | | | | ^ | | | | | <-- | | | --> | | | <-- | | | --> | | v | | | | | v | | | | | `-------+-------+-------+-------+-------+-------+-------+-------' Spoustece jsou napojeny na klavesy 1, 2, 5 a 6. literatura ---------- [1] The MSX Red Book (C) Copyright 1985 AVALON SOFTWARE; ISBN 07457-0178-7 [2] Zpravodaj 602. ZO Svazarmu SORD/SCHNEIDER c. 1/88 a 2/88 [3] Amaterske radio c. 3/1986 a 4/1986 [4] VTM .... Datum poslední editace: neni znamo (nekdy v roce 1988) ============== Napsal Roman Štec z teamu LZR Soft ==============