Running MSX on SORD M5 Creative Computer

 

     

Emulace MSX

Pokud máte potřebný hardware (upravený Sord M5 + 64KBi nebo 64KBf či 64KRD/KRX) anebo máte čas a náladu hrát si s M5 a emulátorem MSX v MAME, pak tedy pár informací.

MSX emulátor pro M5 existuje v původní verzi 1.B, kterou vyvinuli členové brněnského Sord klubu někdy ke konci osmdesátých let minulého století, jmenovitě Ing. Pavel Janko (verze 1.A ke mně nikdy nedoputovala). Do něj lze načítat zvukové (resp. datové) soubory v originálním MSX formátu. Já s Luďkem (LZR Soft) jsme udělali verzi 1.C, která používá formát kazetového záznamu jakou používá Sord M5.

V té době to mělo smysl, protože použitelný kopírovací program pro formát MSX jsme neměli, zatím co pro Sord M5 v té době existovala celá řada kopírovacích programů, včetně mého Single Copy a nebo našich společných výtvorů SOS Copy a později i Excellent Copy (inspirováno podobnými kopírovacími programy, viz obrázky okolo).

SOS Copy   Single Copy

Piracy

Lady Copy   Speed Copy

Easy Copy   Mr. Copy

Excellent Copy   Excellent Copy

Excellent Copy je plnohodnotný kopírovací program využívající veškerou dostupnou a využitelnou paměť v počítači, tedy nejen RAM, ale i VRAM. Takže stačilo jedenkrát převést MSX tape format na M5 a pak už se kopírovalo jako o život ;-) .

Ještě existuje verze 1.D, kterou jsem vytvořil pro Stuchlíkovu FDD jednotku, tedy místo kazety se využívala disketa ve formátu SKW (Skew, taky můj "vynález").

Kompletní zdrojový kód (disassemblovaný, okomentovaný) verze 1.C je k nahlédnutí zde: MSX_1.C_release_3.ASM

Co znamená IL v názvu souboru?

Pravděpodobně Intelligent Loader. Emulátor MSX je na kazetě zaznamenán po blocích 256 bajtů "pozpátku," to znamená, že na kazetě je jako první blok poslední kus MSXu, pak předposlední a tak dále až k nule. Smysl to má ten, že při hw resetu se sice nesmaže RAM, ale M5 Monitor ROM (BIOS) a Basic-x přepíší obsah paměti od adresy &h7000 (MSX končí na adrese &h7FFFF). Takže loader zkontroluje, které bloky od nuly jsou OK a pak z kazety načte jen ten poškozený konec. Tím se šetří čas.

MSX tape loader   MSX 1.C Function keys

Původ

Dobový dokument od Ing. Jána Grečnera, kterým byli o emulátoru MSX zpraveni i mimobrněnští fanoušci/majitelé SORDa, si můžete přečíst zde.

Protože jsem se snažil dokumentoivat všechno, co jsem na počítači dělal, napsal jsem o MSX dva informační materiály. Oba mají stejný úvod, ale dále se pak věnují v prvním případě práci s magnetofonem a ve druhém obecně emulátoru a jeho verzím. K přečtení jsou zde Problematika práce s magnetofonem a zde Verze emulátorů.

Převod MSX her do M5

V Brně vymysleli, že se přidržením obou kláves shift hra ukončí a řízení se vrátí zpět do MSXu. Tím pádem se MSX v paměti RAM nesmazal a nemusel se načítat znovu z kazety. Což se při HW resetu stalo: část MSXu od adresy 0x7000 vzala za své poté, co naběhl "BIOS" a Basic M5. Druhý případ byl, že hra se sice načetla do volné paměti, ale pak se přesunula na místo Basicu (čímž by ho smazala), takže se na to používala taková finta: Basic a hra si vyměnily místo a při stisku Shiftů se Basic vrátil zpět, čímž se opět nic nesmazalo a MSX mohl normálně nastartovat, aniž by se musel donahrávat z kazety.

Mě celkem iritovalo, že některé hry nejdou hrát s mýma levýma rukama, proto jsem je prohlížel v disassembleru a hledal, kde se v té které hře odečítají životy. Pak jsem napsal rutinu v assembleru, která hlídala stisk klávesy [Reset] a v případě jeho stisku deaktivovala odečítání životů. Jinými slovy, stiskem resetu se zapnula nebo vypnula nesmrtelnost. Rutinu jsem pak připojil k původnímu kódu hry spolu s dalšími podobnými rutinami, které například přemapovávaly porty kláves a joysticku, pokud hra nevolala funkce MSX BIOSu, ale četla přímo z hardware (M5 používá jiné porty, proto se to muselo takto). Her jsem takto upravil nepočítaně, viz stránka "download" s odkazem a pod ním složka SORD_m5_cassette_Zdrojove_Texty_Assembler. Každý zdroják, který má na začátku jména ADJ, je "adjustace" nějaké MSX hry.

Tady je česky okomentovaný zdrojový text v assembleru jako ukázka, o čem to bylo. Samotnému napsání "přílepku" samozřejmě předcházely hodiny hledání s poukování do "živého" programu v paměti RAM a ladění, že to funguje: ADJUKAZK1.ASM. Téměř kompletní (časem snad úplně kompletní) sbírka zrojových textů v assembleru je pro změnu zde.

Klávesnice

MSX má funkční klávesy F1 až F5, Sord M5 má jen tlačítko FUNC, které se v emulátoru používá jako klávesa ESC. F1 až F10 se tedy vyvolává pomocí CTRL+1 až CTRL+5 a případně spolu se stiskem SHIFT (pro F6 - F10). V Emulátoru MSX pro Sord M5 jsou předefinované Fx, tedy jsem na ně napasoval texty, které jsem využíval nejčastěji:

 

  1. CTRL+3 - bload"cmt:",r - načte z kazety binární soubor a rovnou ho spustí
  2. CTRL+1 a CTRL+2 - defusr(0)=&h a :?usr(0) - spustí program ve strojovém kódu,
    například defusr(0)=&h8FF8:?usr(0)

 

Co to znamená? Po resetu hry a návratu do MSX, lze hru znovu spustit. Jediné, co při tom musí uživatel vědět, je adresa startu hry, což lze vyčíst z hlavičky souboru, nebo se to zobrazuje například v programu Excellent Copy (třetí sloupec).

Excellent Copy   Excellent Copy

Na obrázcích výše se většina her startuje skokem na adresu &h8FF8, tedy do stejného místa, v jakém hra v paměti začíná (první sloupec). Originál začínal na &h9000 a "přílepek" je před ním. Nicméně hry HIWAY a HOLE1 se ukládají na adresu &h8000, ale spouští se od adresy &hC000 (přílepek je až za hrou).

Knihovna programů

Co všechno se podařilo, případně nepodařilo v emulátoru zprovoznit? Co funguje bez chyb a co se občas hroutí? To všechno jsem sepsal v tomto dokumentu: Seznam MSX programů a her pro M5. Dlužno podotknout, že první verze textu byla jen plain text bez diakritiky, později, když bylo k dispozici PC/XT se softwarem Text602 jsem text doplnil o diakritiku a formátování. Po třiceti letech jsem se pokusil text převést do Wordu, což se úplně nepovedlo (zmizelo formátování a diakritika se nepřevedla správně), takže jsem text ručně opravoval celý den, plus jsem do něj doplnil alespoň nějaké HTML formátovací značky. Přesto v něm mohou být chyby.

Pár slov k MAME

Tak za prvé, musí se použít starší verze MAME, protože nové mají nějakou chybu a nefunguje tam 64KB RAM. Měl jsem trpělivost testovat verze až do čísla 0.219 - tam to ještě chodí. Ve verzi 0.239 už to nefunguje. Verze mezi těmito dvěmi čísly jsem nezkoumal. Za druhé, MAME se spustí příklazem:

mame64.exe m5p -w -cart1 64kbi -cass cassettes\m5p\SORD_m5_MSX_1C_Athletic_Land_RF-0F.WAV

nebo lze i takto:
mame64.exe m5p -w -cart1 64kbi -cart2 basici -cass cassettes\m5p\SORD_m5_MSX_1C_Athletic_Land_RF-0F.WAV

Pochopitelně, že cesta m5p musí korespondovat s místem, kam soubory nahrajete. Pokud se použije parametr -cart2 basici, pak se musí v Basicu-I napsat příkaz TAPE, aby se začalo načítat z virtuální kazety. Ukázka je například zde:


RF-0F v názvu WAVu říká, že soubor byl zaznamenán s rychlostí &h000F (vyšší, než dovolují běžné fyzické kazety, nejvyšší, kterou umí MAME). Defaultní přenosová rychlost M5 je nastavena na &h0021 a pro rychlé nahrávání na fyzické kazety se osvědčila maximální rychlost &h0014. V bitech je to tedy cca 2000 bitů/s. Změnou systémové proměnné STDLY na adrese &h7019 (za běhu Sorda, nikoli za běhu MSX) lze rychlost nastavit v rozmezí 1600 až 3200 bitů/s - v programu Excellent Copy je to hodnota RF (Rate Factor).

Parametr -w není povinný, jen říká, že se má MAME spustit v okně.

Odkud stahovat

Z mého úložiště Disk Google a možná časem i z mého OneDrive. Každopádně validní odkaz najdete na stránce download.