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 nebo 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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Neco malo o upravach MSX her pro SORD m.5 ========================================= Protoze vetsinou mame zajem na tom, aby nami upravene programy fungovaly i na originalu MSX, musime dodrzovat urcita pravidla hry. Zmeny tedy nebudeme pro- vadet primo, ale podminene, podle pocitace, na kterem program prave bezi. Na adrese 0006H ma BIOS-MSX cislo datoveho portu videoprocesoru. V originalu je tam 98H, zatim co v emulatoru je cislo 10H. Z tohoto poznatku se vychazi pri testu pocitace. Priklad ukazuje jak: 8000 4142 DB 41,42 ;zacatek hry ( puvodne byla v kartridzi ) 8002 1080 DW 8010 ;startovaci adresa 8004 .... 8140 D399 OUT (99),A ;zde napriklad zapis do VDP 8142 .... 8145 D399 OUT (99),A 8147 .... 814A D398 OUT (98),A 814C .... 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 C200C0 JP NZ,0C000 ;neni, je MSX - skoc C00C 324B81 LD (814B),A ;zmena datoveho portu VDP, v A mame 10H C011 INC A ;A=11 C012 324181 LD (8141),A ;zmeny poveloveho portu VDP C015 324681 LD (8146),A C018 C300C0 JP 0C000 ;a skok na puvodni start Pro blizsi seznameni se s touto problematikou doporucuji prozkoumat hru COMPUTER BILLIARDS firmy KONAMI, ve ktere jsem dusledne provadel upravy obrazu, zvuku, klavesnice a joysticku. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Vektory MSX =========== 0041 zakaze zobrazovani; IN: nic; OUT: nic; meni: AF, BC, EI 0044 povoli zobrazovani; IN: nic; OUT: nic; meni: AF, BC, EI 0047 zapise do registru VDP; IN: C - registr, B - data; meni: AF, B, EI 004A precte do A bajt z adresy HL ve VRAM; meni: AF, EI 004D zapise bajt v A do VRAM na adresu HL; meni: AF, EI 0050 nastavi VDP pro cteni; IN: HL - adresa; OUT: nic; meni: AF, EI 0053 nastavi VDP pro zapis; IN: HL - adresa; OUT: nic; meni: AF, EI 0056 zaplni VRAM od adresy HL v delce BC kodem v A; meni: AF, BC, EI 0059 presun od HL z VRAM na DE v RAM v delce BC; meni: AF, BC, DE, EI 005C presun od HL z RAM na DE ve VRAM v delce BC; meni: AF, BC, DE, HL, EI 0093 zapise data do registru PSG; IN: A - registr, E - data; meni: EI 0096 precte data z registru PSG; IN: A - registr; OUT: A - data; meni: AF 00D5 smer joy; IN: A=0~2; OUT: A= 1-^, 3->, 5-v, 7-<; meni: AF,B,DE,HL,EI 00D8 fire: IN: A=0-SP,1-A1,2-A2,3-B1,4-B2; OUT: A-NZ=stisk; meni: AF,BC,EI 013E precte status registr VPD; IN: nic; OUT: A - status registr; meni: A 0141 cte redu klaves; IN: A-rada; OUT: A-bit=0 stisknuto; meni: AF,C,EI 0156 smaze bafr klavesnice; IN: nic; OUT: nic; meni: HL Promenne MSX ============ F3DB pipani klaves; =0 nepipat, <>0 pipat F3E9 barva popredi ( foreground color ) F3EA barva pozadi znaku ( background color ) F3EB barva pozadi obrazovky ( border color ) F414 cislo posledni chyby F676 zacatek basiku F6B3 cislo programove radky s chybou F6C2 konec basiku F91F DB 00 ;Slot ID a adresa znakoveho generatoru v BIOSu pro rutiny F920 DW 1BBF ;INITXT a INIT32 FCAB caps lock =0 vypnut, <>0 zapnut FCAF rezim obrazovky 0-TEXT, 1-GI, 2-GII, 3-MULTICOLOR FCB0 predchazejici rezim obrazovky FD9A hacek Interrupt handler - pred IN A,(11) - ( chyba vnoreni! POP ) FD9F hacek Interrupt handler - po IN A,(11) Bafry MSX ========= F41F DS 318T ;bafr tokenovane formy prikazoveho radku F55E DS 259T ;bafr pro text z konzoly pro INLIN F6E8 DS 100T ;bafr pro lokalni promenne "FN" F750 DS 100T ;bafr pro sestavovani lokalnich promennych "FN" F7F6 DS 16T ;primarni akumulator interpretru behem vycislovani vyrazu F806 DS 65T ;ulozeni prvniho operandu pri nasobeni "double precision" F847 DS 16T ;sekundarni akumulator interpretru behem vycislovani vyrazu F857 DS 8 ;bafr pro nahodna cisla ( "double precision" ) F87F DS 160T ;bafr pro 10 16ti znakovych funkcnich klaves; prikaz "KEY" F975 DS 128T ;Voice A queue F9F5 DS 128T ;Voice B queue FA75 DS 128T ;Voice C queue FAF5 DS 64T ;RS232 input queue FB66 DS 37T ;play FB8B DB 37T ;play FBB2 DS 24T ;play FBCE DS 10T ;=1 "KEY (n) ON" FC82 DS 24T ;nevyuzito FD09 DS 128T ;bafr pro sloty FD89 DS 16T ;bafr pro jmeno nebo prikaz pro slot 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: není známo (někdy v roce 1988), sestaveno z několika různých materiálů do této podoby ============== Napsal Roman Štec z teamu LZR Soft ==============