MRM Booter

Z PMD 85 Infoserver

MRM Booter


Obsah

MEGA ROM Modul Booter je program, ktorý umožňuje spúšťať programy uložené v ROM Module. Vďaka "Boot" sekvencii na začiatku ROM Modulu sa na PMD 85-2/2A spustí automaticky po Resete. Na PMD 85-3 po prejdení do režimu kompatibility príkazom JUMP FFF0. Na PMD 85-1 je možné spustenie pomocou príkazu JOB 0000010DC1B2, na počítači Maťo príkazom JOB 0000000DC1B2.

Samotný MRM Booter je napísaný univerzálne pre všetky vyššie uvedené počítače. Programy, ktoré už budú spúšťané, musia byť vhodne pripravené pre konkrétny počítač. Obvykle sa pre všetky 4 modely PMD 85 (1/2/2A/3) dajú programy a hry bez veľkého úsilia pripraviť jednotne. Výnimku tvoria hry, ktoré vyžadujú AllRAM režim, kde tieto hry budú fungovať iba na PMD 85-2A a PMD 85-3. Pre počítač Maťo je pochopiteľne nutné urobiť zásadnejšie zmeny kvôli niektorým hardvérovým rozdielom - hlavne rutiny testu klávesnice a ovládanie akustického meniča. Ak je počítač Maťo upravený pre AllRAM režim, tak na ňom budú, samozrejme, bežať aj hry vyžadujúce AllRAM režim.

Aktuálna verzia MRM Bootera (mrm-boot.bin) má 1 kB a nahrá a spustí sa od adresy 7000h. V tejto časti pamäte zaberá asi 600 bytov, plus za MRM Booterom sa využije ešte maximálne 256 bytov na zoznam čísel adresárových položiek, ktoré sa majú zozbraziť v zozname. MRM Booter zároveň po spustení pripraví do pamäte vedľa VideoRAM rezidentnú časť o veľkosti asi 400 bytov s jeho službami.

Štruktúra MRM súboru

Štruktúra MRM súboru

Obsah EPROM MEGA ROM Modulu - súbor MRM - je organizovaný ako "disková jednotka" rozdelená na sektory o veľkosti 128 bytov. Pochopiteľne, je to "disková jednotka" iba s R/O prístupom. Pomocou konzolovej utility MRM Manager je však možné vytvárať nové obrazy (image) MEGA ROM Modulu v rôznych veľkostiach a robiť zmeny v týchto obrazoch pridávaním či mazaním súborov.

Maximálna kapacita MEGA ROM Modulu je 65536 sektorov, teda 65536 * 128 = 8 MB. Z hardvérového pohľadu je to 256 stránok po 32 kB. A teda v jednej stránke je 256 sektorov: 256 * 128 bytov = 32 kB. Prvých 16 bytov 0. sektora obsahuje tzv. Prolog, ktorý obsahuje spúšťací kód, ktorý zabezpečí načítanie MRM Bootera do pamäte a jeho spustenie. Spúšťací kód má vždy 12 bytov a za ním nasledujú 4 definičné byty určujúce "geometriu" MEGA ROM Modulu: počiatočný sektor adresára, veľkosť adresára v sektoroch a kapacitu MEGA ROM Modulu v sektoroch. Kapacita MEGA ROM Modulu je informácia určená hlavne pre konzolovú utilitu pri práci so súborom obrazu MEGA ROM Modulu.

Počiatočný sektor adresára je vlastne daný veľkosťou MRM Bootera, ktorý nasleduje ihneď za Prologom v 0. sektore od offsetu 16. Adresár teda nasleduje za MRM Booterom. Počet sektorov adresára je možné zvoliť pri vytváraní súboru obrazu ROM Modulu vhodne podľa celkovej veľkosti MEGA ROM Modulu (EPROM) a počtu predpokladaných súborov. Jedna adresárová položka zaberá 32 bytov, takže v jednom sektore môžu byť 4 položky adresára. Maximálny počet adresárových položiek je 256 a teda maximálny počet sektorov adresára je 64. Minimálny počet adresárových položiek je 4, teda 1 sektor.

Za adresárom sú už uložené samotné súbory, ktoré nikdy nie sú fragmentované a teda vždy nasledujú celistvo za sebou. Ich počiatočné čísla sektorov a veľkosti sú zaznamenané v príslušnej adresárovej položke. Konzolová utilita pri vymazaní súboru z ROM Modulu vždy adresár aj súbory "strasie", aby nevznikali diery.

MEGA ROM Modul Prolog
Offset Dĺžka Význam
0 12 "Boot" kód pre nahratie a spustenie MRM Bootera
12 1 Prvý sektor adresára
13 1 Počet sektorov adresára (max. 64)
14 2 Celková veľkosť MEGA ROM Modulu v sektoroch -1

Adresárová položka obsahuje typ a meno súboru, číslo počiatočného sektora, počiatočnú/cieľovú adresu v RAM (štart adresu), dĺžku, atribúty súboru a dlhý názov. Krátke meno súboru slúži pre obvyklú identifikáciu pri vyhľadávaní súboru. Dlhé meno súboru sa používa pre zobrazenie v zozname spustiteľných súborov.

Aktuálne sú podporované 2 atribúty. Atribút List slúži pre označenie súboru, ktorý je "spustiteľný" a má sa teda zobraziť v zozname programov na spustenie. Atribút AllRAM označuje, že daný súbor je potrebné načítať do pamäte v AllRAM režime.

Adresárová položka
Offset Dĺžka Význam
0 1 Typ: znaky '!' až '~', ostatné byty mimo ASCII znamenajú neplatnú položku
1 8 Meno súboru: ASCII znaky - kratšie meno je doplnené medzerami
9 2 Číslo počiatočného sektora v MEGA ROM Module
11 2 Adresa načítania do pamäte: <0, 65535>
13 2 Dĺžka v bytoch: <0, 65535>
15 1 Atribúty súboru
0: List - súbor sa zobrazí v zozname súborov
1: AllRAM - pred nahraním do pamäte sa nastaví AllRAM
16 16 Dlhý názov súboru pre zobrazenie v zozname: ASCII znaky - kratšie meno je doplnené medzerami.
Ak dlhý názov nie je uvedený, v zobrazovanom zozname sa použije meno súboru.

Zoznam súborov

Zoznam súborov v MRM Booteri
Zoznam súborov v MRM Booteri

Po svojom spustení si MRM Booter prejde celý adresár a vyhľadá všetky platné položky adresára, ktoré nie sú skryté (majú nastavený atribút List). Následne zobrazí jednu stránku zoznamu súborov, kde sú pred menami písmená AZ, ktoré označujú kláves, ktorým sa daný súbor načíta do pamäte a spustí. Ak je súborov na stránke menej ako 14, zobrazia sa súbory v jednom stĺpci v strede obrazovky. Ak je súborov na stránke viac ako 13, zobrazia sa v dvoch stĺpcoch.

Ak je súborov na zobrazenie viac ako 26, pod zoznamom súborov je zobrazený text SPC:Dalsie | 0:Monitor. Stlačením medzerníka sa zobrazí ďalšia stránka súborov. Ak súborov nie je viac ako 26, tak sa pod zoznamom zobrazí iba text 0:Monitor. Stlačením klávesu 0 je možné prejsť do Monitora.


Spustenie súboru

Po stlačení písmenového klávesu sa načíta daný súbor do pamäte na adresu, ktorú má uvedenú v adresárovej položke a na túto adresu sa zároveň skočí. Ak má súbor nastavený atribút AllRAM, tak sa ešte pred nahraním súboru do pamäte nastaví AllRAM režim. Toto samozrejme platí iba pre PMD 85-2A a upravený počítač Maťo. PMD 85-3 je v AllRAM režime implicitne po prejdení do režimu kompatibility. Ak atribút pre AllRAM režim nie je nastavený, tak je v prípade PMD 85-2A stránkovanie cielene vypnuté, pretože to tak potrebujú pôvodné programy a hry.

Pred skokom na štart adresu sa pre spúšťaný program do niektorých registrov pripravia tieto hodnoty:

  • SP: 8000h
  • HL: adresa služieb MRM Bootera (viď ďalej)
  • A: typ počítača
    • 1 : PMD 85-1
    • 2 : PMD 85-2
    • 3 : PMD 85-2A
    • 4 : PMD 85-3
    • 6 : Maťo

Služby MRM Bootera

MRM Booter po svojom spustení presunie do pamäte "vedľa" VideoRAM rezidentnú časť kódu, ktorá poskytuje niekoľko služieb, ktoré spusteným programom umožnia načítavať do pamäte ďalšie súbory. Ako bolo spomenuté vyššie, spustený program získa adresu volania služieb v registri HL. Rezidentná časť aktuálne zaberá 25 16-bytových blokov vedľa VRAM, teda 400 bytov (0C470h0CA7Fh). Číslo služby sa predáva v registri C, ostatné parametre podľa potreby v ďalších registroch.

Súčasťou rezidentnej časti sú aj dva 16-bytové bloky, kde je umiestnená pracovná adresárová položka. Túto adresárovú položku používajú niektoré služby a jej adresu možno získať volaním týchto služieb. V popise je ich označenie DirItem a DirItem2.


0 - STAT

Vráti rôzne informačné údaje.

  • Vstup:
    • C=0
  • Výstup:
    • A=aktuálne číslo stránky
    • B=maximálny počet položiek adresára
    • C=číslo verzie MRM Bootera
    • HL=adresa začiatku adresára v ROM Module
  • Mení:
    • AF, BC, HL


1 - SET RMM PAGE

Nastavenie stránky MEGA ROM Modulu.

  • Vstup:
    • C=1
    • A=číslo RMM stránky
  • Výstup:
    • -
  • Mení:
    • -


2 - CALC PAGE AND OFFSET FOR SECTOR

Prevedie číslo sektora na číslo stránky a offset v stránke.

  • Vstup:
    • C=2
    • HL=číslo sektora
  • Výstup:
    • A=číslo stránky <0, 255>
    • HL=offset <0, 32640> (v násobkoch 128)
  • Mení:
    • AF, HL


3 - READ DIRECTORY ITEM

Prečítanie položky adresára. Pozor: Zmení RMM stránku na 0.

  • Vstup:
    • C=3
    • B=číslo položky adresára
  • Výstup:
    • HL=DirItem
    • DE=DirItem2
  • Mení:
    • všetky


4 - FIND FILE

Vyhľadanie súboru podľa mena. Pozor: Zmení RMM stránku na 0.

  • Vstup:
    • C=4
    • DE=adresa reťazca mena súboru 1+8 znakov - TNNNNNNNN
  • Výstup:
    • CY=0 - našlo sa
      • A=číslo adresárovej položky
      • HL=DirItem
      • DE=DirItem2
    • CY=1 - nenašlo sa
  • Mení:
    • všetky


5 - LOAD FILE BY NUMBER

Nahranie súboru do pamäte podľa čísla položky v adresári. Rutina si sama nastaví príslušnú stránku v MEGA ROM Module. Pozor: Rutina automaticky nastaví AllRAM, ak je nastavený atribút AllRAM v adresárovej položke.

  • Vstup:
    • C=5
    • B=číslo položky adresára
  • Výstup:
    • A=255
    • BC=0
    • DE=adr_ram+length
    • HL=adr_rmm+length
  • Mení:
    • všetky


6 - LOAD FILE BY DIR ITEM

Nahranie súboru do pamäte podľa pripravenej položky adresára. Rutina si sama nastaví príslušnú stránku v MEGA ROM Module. Pozor: Rutina automaticky nastaví AllRAM, ak je nastavený atribút AllRAM v adresárovej položke.

  • Vstup:
    • C=6
    • [DirItem]=pripravená adresárová položka
  • Výstup:
    • A=255
    • BC=0
    • DE=adr_ram+length
    • HL=adr_rmm+length
  • Mení:
    • všetky


7 - READ FROM RMM

Prečítanie dát z MEGA ROM Modulu. Rutina automaticky prejde na nasledujúcu stránku pri dosiahnutí adresy 8000h.

  • Vstup:
    • C=7
    • A=číslo stránky
    • HL=adresa začiatku v stránke MEGA ROM modulu (adr_rmm)
    • DE=adresa uloženia v RAM (adr_ram)
    • BC=počet čítaných bytov (length)
  • Výstup:
    • A=255
    • BC=0
    • DE=adr_ram+length
    • HL=adr_rmm+length
  • Mení:
    • všetky

Univerzálny loader

Väčšinu programov/hier je obvykle možné pripraviť tak, aby pozostávali iba z dvoch súborov. Zo spakovaného obrázku a (spakovaného) kódu hry. V tomto prípade sa hodí jednoduchý Loader, ktorý najprv nahrá do pamäte obrázok, rozbalí ho a zobrazí. Následne nahrá samotný kód hry a ten spustí. Tento jednoduchý Loader je súčasťou archívu s MRM Booterom a MRM Managerom ako súbor s názvom mrm-ldr.bin.

Loader je skompilovaný na beh od adresy 7F00h, aby "nezavadzal" nahrávanému programu (jeho dĺžka je 227 bytov). Na svojom začiatku má priestor pre vyplnenie mien súborov obrázka a kódu hry. Zároveň je možné zvoliť adresu spustenia a ktorý Monitor (1 alebo 2) sa má pred štartom nahrať v AllRAM režime do pamäte (to má, samozrejme, zmysel iba pre programy, ktoré pre svoj beh potrebujú konkrétny Monitor a je to použiteľné iba pre PMD 85-2A a PMD 85-3, prípadne (ale veľmi nepravdepodobne) pre počítač Maťo s AllRAM).

Vytvorenie "nakonfigurovaného" súboru Loadera je možné pomocou MRM Managera použitím prepínača -ml. Nasledujúci popis konfigurácie loadera je teda iba pre pochopenie detailov.

Konfigurácia loadera

Nasledujúci fragment "kódu" ukazuje začiatok Loadera. Ako prvá je tam skoková inštrukcia, ktorá iba preskočí "konfiguračnú" časť. Za ňou už nasleduje meno súboru obrázku (PicFile) a meno súboru kódu hry (CodeFile) v tvare TNNNNNNNN. Adresa JumpAdr určuje štart adresu pre spustenie kódu hry. Ak hodnota zostane 0FFFFh, použije sa štart adresa z adresárovej položky súboru kódu hry.

Offset   Kód/Data
-------------------------------------------
0000     Start: 	jmp	StartX
0003     PicFile:	db	(1+8) dup (' ')
000C     CodeFile:	db	(1+8) dup (' ')
0015     JumpAdr:	dw	0FFFFh
0017     Config:	db	0		; konfiguračné bity
	 1:0 - 0 = bez Monitora, 1 = Monitor 1, 2 = Monitor 2, 3 = vlastný
	 2 - 1/0 = ne/robiť inicializáciu Monitora (iba pre 1 a 2)
	 3 - 1/0 = ne/zmazať obrazovku po spustení Loadera
0018     MonitFile:	db	"?MONIT   "

Konfiguračnými bitmi (Config) možno:

  • zvoliť typ Monitora: žiadny, 1, 2 alebo vlastný
  • potlačiť inicializáciu nahraného Monitora
  • potlačiť zmazanie obrazovky po spustení Loadera (pred zobrazením obrázku)

Ak niektorý program vyžaduje nahranie Monitora, v MRM obraze musia byť príslušné súbory MONIT1.? a/alebo MONIT2.?. Tieto súbory musia mať štart adresu nastavenú na 8000h a nastavený atribút AllRAM. Ak je zvolený vlastný (iný) Monitor, jeho meno súboru musí byť uvedené od návestia MonitFile.

Obrázok

Loader v PicFile očakáva, že Typ obrázku bude Q (obrázok spakovaný utilitou QuidoScr) alebo C (obrázok spakovaný programom GRED). Ak je typ iný, nahranie obrázku sa vynechá.

Súčasťou súboru spakovaného obrázku musí byť aj rozpakovacia rutina. Pre typ Q je potrebné v Utilite QuidoScr použiť prepínač -a 0x1000. V prípade typu C z GREDu je potrebné pred spakované dáta vložiť rozpakovaciu rutinu zo súboru unpckpsc.bin (rutina je preložená pre beh od adresy 1000h, súbor je priložený v archíve MRM Bootera a MRM Managera). Pri pridávaní obrázku do MRM obrazu pomocou MRM Managera - prepínač -fa - je teda potrebné použiť prepínač pre štart adresu -sa 0x1000. Plus, ak je to obrázok z programu GRED ešte bez rozpakovacej rutiny, je treba použiť naviac prepínač -psc. Loader po nahraní súboru obrázku do pamäte zavolá rutinu na štartovacej adrese súboru, čím sa obrázok rozpakuje priamo do obrazovky.

Kód hry

Súbor kódu hry sa nahrá na jeho štart adresu a z nej sa aj spustí (ak to nie je zmenené pomocou JumpAdr). Ak je kód hry spakovaný utilitou Quido, tak musí byť pri pakovaní prepínačom -ja nastavená adresa spustenia (ak nie je spustenie po rozpakovaní zabezpečené inak). Ako bolo uvedené vyššie, pred spustením sa podľa potreby nahrá v AllRAM režime aj príslušný Monitor. Loader naviac ešte uloží na adresu 0FFFEh adresu služieb Bootera, čo môže spúšťaný program využiť pre ďalšie nahrávanie súborov z MEGA ROM Modulu.

Na stiahnutie