Blog:MIKROS na PMD 85
Z PMD 85 Infoserver
D (Doplnený rozsah adries ovládača) |
(Upravené údaje o Booteri.) |
||
Riadok 30: | Riadok 30: | ||
V prvom prípade je najideálnejším miestom nevyužitá oblasť "vedľa" Videoram, ktorá je z časti využívaná Monitorom, prípadne aj BASICom, ako zápisníková oblasť (systémové premenné). Pre ovládač je však stále k dispozícii viac než 3,7 kB. Nepríjemnou vecou je iba skutočnosť, že táto oblasť je rozkúskovaná na 16 bytové bloky a tomu je treba prispôsobiť implementáciu samotného ovládača. Výhodou ale je, že dolná pamäť je voľná pre MIKROS a aplikácie. | V prvom prípade je najideálnejším miestom nevyužitá oblasť "vedľa" Videoram, ktorá je z časti využívaná Monitorom, prípadne aj BASICom, ako zápisníková oblasť (systémové premenné). Pre ovládač je však stále k dispozícii viac než 3,7 kB. Nepríjemnou vecou je iba skutočnosť, že táto oblasť je rozkúskovaná na 16 bytové bloky a tomu je treba prispôsobiť implementáciu samotného ovládača. Výhodou ale je, že dolná pamäť je voľná pre MIKROS a aplikácie. | ||
- | Keďže som si to nechcel veľmi komplikovať, ovládač je napísaný podľa pôvodného kódu z PMD 85-3 s tým, že sú niektoré jeho časti optimalizované a opravené. Pochopiteľne sú príslušne zmenené adresy volania rutín Monitora. To má ale za následok, že toto riešenie je použiteľné iba pre PMD 85-2 a PMD 85-2A. PMD 85-1 má iný Monitor a nebolo by úplne priamočiare upraviť existujúce riešenie aj pre tento model. Celý ovládač zaberá | + | Keďže som si to nechcel veľmi komplikovať, ovládač je napísaný podľa pôvodného kódu z PMD 85-3 s tým, že sú niektoré jeho časti optimalizované a opravené. Pochopiteľne sú príslušne zmenené adresy volania rutín Monitora. To má ale za následok, že toto riešenie je použiteľné iba pre PMD 85-2 a PMD 85-2A. PMD 85-1 má iný Monitor a nebolo by úplne priamočiare upraviť existujúce riešenie aj pre tento model. Celý ovládač zaberá 83 16-bytových blokov vedľa VRAM, teda 1328 bytov (0C470h až 0D8FFh). |
- | Ovládač sa do pamäti dostane z ROM Modulu. Najprv som uvažoval, že sa ovládač zavedie do pamäti "klasicky" z BASICu príkazom <code>ROM x</code>, ale nakoniec som sa rozhodol, že je to zbytočne "naokolo" a opatrím ovládač "boot" kódom, ktorý ovládač natiahne do pamäti ihneď po resete. Celý "Booter" vrátene ovládača má | + | Ovládač sa do pamäti dostane z ROM Modulu. Najprv som uvažoval, že sa ovládač zavedie do pamäti "klasicky" z BASICu príkazom <code>ROM x</code>, ale nakoniec som sa rozhodol, že je to zbytočne "naokolo" a opatrím ovládač "boot" kódom, ktorý ovládač natiahne do pamäti ihneď po resete. Celý "Booter" vrátene ovládača má 1461 bytov a tak zaberie v ROM Module prvé dve pozície (dve 1kB EPROM). BASIC sa musí posunúť o dve pozície ďalej. V prípade 32k ROM Modulu je Booter v 2kB EPROM a BASIC sa posunie o 1 pozíciu. |
''Booter'' po zapnutí počítača alebo po resete zobrazí text '''B-BASIC M-MONIT P-PMD 32''' a je možné zvoliť ďalšiu činnosť. | ''Booter'' po zapnutí počítača alebo po resete zobrazí text '''B-BASIC M-MONIT P-PMD 32''' a je možné zvoliť ďalšiu činnosť. |
Verzia zo dňa a času 08:49, 19. apríl 2015
Obsah |
MIKROS 2.2 je čistokrvné CP/M 2.2, ktoré bolo "prekrstené" vo Výskumnom ústave výpočtovej techniky v Žiline (VÚVT Žilina). Pôvodná signatúra "COPYRIGHT (C) 1979, DIGITAL RESEARCH", umiestnená v editačnom buffri CCP, je nahradená textom "MIKROS V2.2, VUVT ZILINA, 12/1981". V prípade implementácie pre PMD 85 je naviac, z dôvodu zobrazenia iba 48 znakov na riadok, upravený príkaz DIR v CCP tak, že výpis súborov je iba v dvoch stĺpcoch, namiesto pôvodných štyroch.
Implementácia systému MIKROS pre PMD 85 bola podnietená vývojom posledného modelu PMD 85-3, ktorého koncepcia bola tomu prispôsobená. Má 64kB RAM a možnosť odpojenia ROM so základným Monitorom, ktorý bol presunutý na koniec pamäti od adresy 0E000h a prekrýva sa s VRAM. Základný Monitor je kompatibilný s predchádzajúcimi modelmi 2 a 2A, ale čo je v tomto prípade podstatné, obsahuje naviac (okrem iného aj) základ konzolových rutín BIOSu pre MIKROS a ovládač disketovej jednotky PMD 32, ktorú vyrábalo pre tento účel JZD Pokrok Otice.
Neskôr údajne existovala úprava a implementácia systému MIKROS aj pre PMD 85-2A, ktoré má tiež 64kB RAM, ale osobne som sa s touto implementáciou nestretol (viď. ale ďalej).
Okrem systému MIKROS existoval pre PMD 85 aj DOS PMD 32, čo je alternatívny systém vychádzajúci zo samotného MIKROSu, umožňujúci čítanie a zápis programov v BASICu.
Modifikácie systému
Pri stavbe PMD 32-SD sa okamžite rozhodlo, že sa musí využiť skutočnosť, že pôvodný ovládač PMD 32 v Monitore PMD 85-3 má rezervu a je možné zabezpečiť ovládanie až štyroch mechaník, namiesto pôvodných dvoch. Z pohľadu základného ovládača teda žiadna zmena potrebná nebola, ale pochopiteľne bolo potrebné modifikovať BIOS MIKROSu a doplniť potrebné tabuľky a kód.
Našťastie, pôvodná systémová disketa, dodávaná k disketovej jednotke PMD 32, obsahovala kompletné nástroje a zdroje pre vygenerovanie systému a tak vygenerovanie nového systému s modifikovaným BIOSom nečinil žiadny problém. Tak vznikla prvá verzia systému MIKROS pre PMD 85 pre 4 mechaniky.
Nedalo mi to však a rozhodol som sa, že zrealizujem svoju dávnu myšlienku, rozchodiť MIKROS aj na starších modeloch PMD 85. To si vyžadovalo vyriešiť niekoľko drobností:
- niekam umistniť kód konzolových operácií pre BIOS a ovládač PMD 32, ktorý je v prípade PMD 85-3 priamo v ROM Monitore
- upraviť kód BOOTu a BIOSu, aby sa využívali správne vstupné body pre volanie rutín konzolových operácií a ovládača PMD 32
- upraviť dávkový súbor GENER.SUB pre generovanie systému a vygenerovať nanovo 48kB MIKROS pre PMD 85-3 a PMD 85-2A a 32kB MIKROS pre PMD 85-2
Ovládač
V prvom prípade je najideálnejším miestom nevyužitá oblasť "vedľa" Videoram, ktorá je z časti využívaná Monitorom, prípadne aj BASICom, ako zápisníková oblasť (systémové premenné). Pre ovládač je však stále k dispozícii viac než 3,7 kB. Nepríjemnou vecou je iba skutočnosť, že táto oblasť je rozkúskovaná na 16 bytové bloky a tomu je treba prispôsobiť implementáciu samotného ovládača. Výhodou ale je, že dolná pamäť je voľná pre MIKROS a aplikácie.
Keďže som si to nechcel veľmi komplikovať, ovládač je napísaný podľa pôvodného kódu z PMD 85-3 s tým, že sú niektoré jeho časti optimalizované a opravené. Pochopiteľne sú príslušne zmenené adresy volania rutín Monitora. To má ale za následok, že toto riešenie je použiteľné iba pre PMD 85-2 a PMD 85-2A. PMD 85-1 má iný Monitor a nebolo by úplne priamočiare upraviť existujúce riešenie aj pre tento model. Celý ovládač zaberá 83 16-bytových blokov vedľa VRAM, teda 1328 bytov (0C470h až 0D8FFh).
Ovládač sa do pamäti dostane z ROM Modulu. Najprv som uvažoval, že sa ovládač zavedie do pamäti "klasicky" z BASICu príkazom ROM x
, ale nakoniec som sa rozhodol, že je to zbytočne "naokolo" a opatrím ovládač "boot" kódom, ktorý ovládač natiahne do pamäti ihneď po resete. Celý "Booter" vrátene ovládača má 1461 bytov a tak zaberie v ROM Module prvé dve pozície (dve 1kB EPROM). BASIC sa musí posunúť o dve pozície ďalej. V prípade 32k ROM Modulu je Booter v 2kB EPROM a BASIC sa posunie o 1 pozíciu.
Booter po zapnutí počítača alebo po resete zobrazí text B-BASIC M-MONIT P-PMD 32 a je možné zvoliť ďalšiu činnosť.
Pre úplnosť tu ešte uvediem adresy vstupných bodov dôležitých rutín v ovládači. Za normálnych okolností je väčšina uvedených rutín volaných z BIOSu a nie je účelné používať tieto rutiny priamo v aplikáciách. Výnimku tvoria programy, ktoré potrebujú pristupovať napr. k PMD 32 na najnižšej úrovni (napr. FORMAT.COM, či CD.COM).
Adresy vstupných bodov | |||
Názov | PMD 85-3 | PMD 85-2(A) | Popis |
---|---|---|---|
QBOOT | 0F91Fh | 0C470h | test pripojenia PMD 32, načítanie BOOT sektora z mechaniky A: na adresu 80h a skok na adresu 80h |
SELDSK | 0FF4Ch | 0C473h | výber aktívnej mechaniky |
CONIN | 0FF4Fh | 0C476h | vstup z konzoly |
CONOUT | 0FF52h | 0C479h | výstup na konzolu |
CONST | 0FF55h | 0C47Ch | zistenie stavu konzoly |
QREAD | 0FF58h | 0C4B0h | prečítanie sektora z disku |
QWRITE | 0FF5Bh | 0C4B3h | zápis sektora na disk |
SETSEC | 0FF5Eh | 0C4B6h | nastavenie čísla sektora pre QREAD a QWRITE |
SETTRK | 0FF61h | 0C4B9h | nastavenie čísla stopy pre QREAD a QWRITE |
SETDMA | 0FF64h | 0C4BCh | nastavenie adresy v pamäti pre QREAD a QWRITE |
LIST | 0FF67h | 0C4F0h | výstup znaku na tlačiareň |
LISTST | 0FF6Ah | 0C4F3h | test pripravenosti tlačiarne pre výstup znaku |
QLOAD | 0FF6Dh | 0C4F6h | čítanie skupiny sektorov zo systémovej oblasti disku |
ReadByte | 0F943h | 0C4F9h | prijatie bytu z PMD 32 |
SendCommand | 0F94Eh | 0C4FCh | odoslanie povelu do PMD 32 |
SendByte | 0F958h | 0C530h | odoslanie bytu do PMD 32 |
SndCrcRdAckErr | 0F9FDh | 0C533h | odoslanie CRC bytu do PMD 32 a prijatie ACK bytu a chybového kódu |
ReadAckErr | 0FA02h | 0C536h | prijatie ACK bytu a chybového kódu z PMD 32 |
WaitErrT15 | 0FA0Dh | 0C539h | čakanie na výsledok povelu - timeout 15 sekúnd |
WaitErrT | 0FA10h | 0C53Ch | čakanie na výsledok povelu - timeout voliteľný |
SndCrcRdAck | 0FA1Eh | 0C570h | odoslanie CRC bytu a prijatie ACK |
ReadCheckCrc | 0FA33h | 0C573h | prijatie CRC bytu a jeho kontrola |
Adresy premenných | |||
Drive | 0BFF8h | 0C47Fh | číslo aktuálnej mechaniky |
Sector | 0BFFCh | 0C4BFh | číslo sektora + číslo aktuálnej mechaniky |
Track | 0BFFEh | 0C4FFh | číslo stopy |
Dma | 0BFF6h | 0C5BEh | adresa v pamäti pre QREAD a QWRITE |
BOOT a BIOS
Aby pre PMD 85 MIKROS zbytočne neexistovalo niekoľko verzií BOOTu a BIOSu, prepísal, opravil a optimalizoval som existujúce zdrojáky tak, že sa automaticky podľa modelu počítača premodifikujú. To zároveň umožňuje vygenerovať systém MIKROS naraz pre všetky modely (PMD 85-2,2A,3) počítača. Nové zdrojové súbory sú pomenované BOOT4UNI.MAC a BIOS4UNI.MAC.
Vstup z konzoly na PMD 85, z pohľadu kontrolných kláves, nie je vyriešený najšťastnejšie. Klávesnica PMD 85 neobsahuje obvyklú klávesu CTRL a tak konzola vracia kódy kontrolných kláves stlačením bežných kľúčových kláves K0 až K11, prípadne riadiacich kláves. Nasledujúca tabuľka ukazuje jednotlivé kombinácie pre dosiahnutie príslušných kontrolných kódov:
Rozloženie kontrolných kláves MIKROSu na klávesnici PMD 85 | |||
MIKROS | kód HEXA | PMD 85 | |
---|---|---|---|
CTRL-A | 01h | Shift + CLR | K0 |
CTRL-B | 02h | K1 | |
CTRL-C | 03h | END | K2 |
CTRL-D | 04h | K3 | |
CTRL-E | 05h | K4 | |
CTRL-F | 06h | Shift + C-D | K5 |
CTRL-G | 07h | Shift + WRK | K6 |
CTRL-H | 08h | <--- | K7 |
CTRL-I | 09h | Shift + --->| | K8 |
CTRL-J | 0Ah | Shift + |<--- | K9 |
CTRL-K | 0Bh | WRK | K10 |
CTRL-L | 0Ch | šikmá <--- | K11 |
CTRL-M | 0Dh | EOL | Shift + K0 |
CTRL-N | 0Eh | Shift + RCL | Shift + K1 |
CTRL-O | 0Fh | PTL | Shift + K2 |
CTRL-P | 10h | Shift + END | Shift + K3 |
CTRL-Q | 11h | Shift + ---> | Shift + K4 |
CTRL-R | 12h | Shift + DEL | Shift + K5 |
CTRL-S | 13h | Shift + <--- | Shift + K6 |
CTRL-T | 14h | Shift + K7 | |
CTRL-U | 15h | Shift + K8 | |
CTRL-V | 16h | Shift + K9 | |
CTRL-W | 17h | RCL | Shift + K10 |
CTRL-X | 18h | ---> | Shift + K11 |
CTRL-Y | 19h | --->| | |
CTRL-Z | 1Ah | |<--- | |
CTRL-[ | 1Bh | CLR | |
CTRL-\ | 1Ch | INS | |
CTRL-] | 1Dh | ||
CTRL-^ | 1Eh | C-D | |
CTRL-_ | 1Fh | Shift + šikmá <--- | |
DEL | 7Fh | DEL |
Výstup na konzolu pozná nasledujúce riadiace kódy:
Riadiace kódy pre výstup na konzolu | ||
Názov | kód HEXA | Popis |
---|---|---|
ATTR0 | 01 | zobrazovanie farbou 0 |
ATTR1 | 02 | zobrazovanie farbou 1 |
ATTR2 | 03 | zobrazovanie farbou 2 |
ATTR3 | 04 | zobrazovanie farbou 3 |
LEFT | 08 | posun kurzora doľava |
HTAB | 09 | horizontálny tabulátor - posun kurzora o 8 znakov doprava |
DOWN | 0A | kurzor dole (LF) |
CR | 0D | kurzor na začiatok riadku |
RIGHT | 0E | posun kurzora doprava |
UP | 0F | kurzor hore |
NORM | 1A | normálne zobrazovanie (neinverzne) |
ESC | 1B | nastavenie pozície kurzora, za tým - riadok + 32, stĺpec + 32 |
CLRL | 1C | zrušenie aktuálneho riadku (nasledujúce sa odrolujú hore) |
INV | 1D | inverzné zobrazovanie |
HOME | 1E | kurzor do ľavého horného rohu obrazovky |
CLS | 1F | zmazanie celej obrazovky + HOME |
Generovanie systému
Pre generovanie systému obsahovala pôvodná systémová disketa dodávaná k PMD 32 kompletné nástroje a zdroje pre skompilovanie a vygenerovanie systému MIKROS. V prvom rade:
- zdrojové súbory BOOT0.MAC, BOOT1.MAC, BIOS.MAC
- predkompilovaný systém MIKROS MIKSYS0.HEX od adresy 0000h a MIKSYS1.HEX od adresy 0100h
- základ relokátora systému MIKMOV.COM
- dávkový súbor GENER.SUB
plus tieto nástroje:
- SUBMIT.COM a XSUB.COM pre spracovanie dávky
- M80.COM a L80.COM pre kompiláciu a zlinkovanie BOOTu a BIOSu
- SLAP.COM debugger použitý pre spájanie potrebných častí dohromady v pamäti
- GENHEX.COM pre vytvorenie HEX súboru z COM
- PIP.COM kopírovací program použitý na spojenie HEX súborov
- GENMOD.COM pre vytvorenie relokovateľneho systému
- SYSGEN.COM pre kopírovanie a ukladanie systému
V našom prípade sú pôvodné zdrojové súbory MAC nahradené novými a dávkový súbor je upravený tak, že nie sú potrebné zdvojené zdrojové súbory pre kompiláciu BOOT kódu, plus ďalšie s tým súvisiace drobnosti.
Generovanie systému sa zaháji z disku A: príkazom
A>SUBMIT GENER
Po troch minútach je výsledkom súbor MOVOS.COM, ktorým sa následne pripraví systém pre danú pamäťovú konfiguráciu:
48kB systém A>MOVOS 48 * A>SYSGEN
32kB systém A>MOVOS 32 * A>SYSGEN
Odlišnosti sytému MIKROS na jednotlivých modeloch
Napriek tomu, že som "zuniverzálnil" BOOT a BIOS a systém bol vygenerovaný spoločne pre všetky tri (do úvahy prichádzajúce) modely, existujú nasledujúce odlišnosti:
- PMD 85-2 a PMD 85-2A neumožňujú, na rozdiel od PMD 85-3, zobrazovať znaky s diakritikou a nemajú ani možnosť z klávesnice zapnúť, či vypnúť CapsLock
- na PMD 85-2 je systém iba vo verzii 32kB, na rozdiel od PMD 85-2A a PMD 85-3, kde je systém vo verzii 48kB
- PMD 85-2 a PMD 85-2A vyžadujú mať v ROM module v prvých dvoch pozíciách booter, ktorý zavedie ovládač do VRAM a zabezpečí zavedenie systému z disku
Umistnenie jednotlivých vrstiev MIKROSu v pamäti | ||
Vrstva | PMD 85-2A a PMD 85-3 - 48kB MIKROS | PMD 85-2 - 32kB MIKROS |
---|---|---|
CCP | 0A600h | 6600h |
BDOS | 0AE00h | 6E00h |
BIOS | 0BC00h | 7C00h |
Čo je potrebné dokončiť
Vzhľadom na známe odlišnosti je potrebné niektoré programy, ktoré boli pôvodne písané iba pre PMD 85-3 drobne upraviť:
- program FORMAT.COM
- upraviť volania rutín ovládača podľa modelu počítača, podobne ako to robí BIOS
- doplniť možnosť formátovať diskety vo všetkých štyroch mechanikách A: až D:
- utilita CD.COM
- upraviť volania rutín ovládača aj pre PMD 85-2 a PMD 85-2A - úprava už bola urobená, viď. CD
- program RUNNER.COM
- upraviť pre PMD 85-2A - úprava už bola urobená, viď. RUNNER2
- tento program nemôže bežať na PMD 85-2, z dôvodu neexistencie RAM v oblasti 8000h až 0BFFFh!
Naviac by bolo vhodné ešte vytvoriť úpravu BASICu, možno podľa vzoru Zbrojováčka, ktorá bude umožňovať inteligentným spôsobom zapisovať a čítať programy v BASICu na disketu.
Na stiahnutie
- Booter PMD 32 - zdrojový text Bootera PMD 32 a hotové binárky pre napálenie do EPROM resp. pre použitie v emulátore
- Sysgen - obraz disku sysgen.p32 s kompletnými zdrojmi pre vygenerovanie systému; zdrojové súbory boot4uni.mac a bios4uni.mac nového BOOTu a BIOSu
- MIKROS - obrazy diskov
- mikros48.p32 - MIKROS 48kB pre PMD 85-3 a PMD 85-2A; mikros48.bin - extrahovaný systém
- mikros32.p32 - MIKROS 32kB pre PMD 85-2; mikros32.bin - extrahovaný systém