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 ==============