Blog:MIKROS na PMD 85

Z PMD 85 Infoserver

MIKROS na PMD 85



Obsah


48kB MIKROS V2.2 pre 4 mechaniky na počítači PMD 85-3 alebo PMD 85-2A
48kB MIKROS V2.2 pre 4 mechaniky na počítači PMD 85-3 alebo PMD 85-2A
32kB MIKROS V2.2 pre 4 mechaniky na počítači PMD 85-2
32kB MIKROS V2.2 pre 4 mechaniky na počítači PMD 85-2

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á 82 16-bytových blokov vedľa VRAM, teda 1312 bytov (0C470h až 0D8BFh).

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á 1444 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.

Vzhľadom na to, že pre kód a dáta BIOSu je pomerne málo miesta (asi 640 bytov), tak nie je vôbec implementovaný IOBYTE a ani služby READER a PUNCH. Služba READER vracia vždy EOF (1Ah). Služby LIST a LISTST implementované sú.

Vstup z konzoly (služby CONST a CONIN) na PMD 85, z pohľadu kontrolných klávesov, nie je vyriešený najšťastnejšie. Klávesnica PMD 85 neobsahuje obvyklý kláves CTRL a tak konzola vracia kódy kontrolných klávesov stlačením bežných kľúčových klávesov K0K11, prípadne riadiacich klávesov.
Síce bola úvaha zmeniť to na použitie klávesu STOP ako CTRL, ale keďže ten sa v PMD 85-3 používa na zadávanie znakov s diakritikou, čo je už pevne dané rutinami v ROM, bolo toto nešťastné riašenie ponechané.

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 (služba CONOUT) je umiestnený v ovládači a pozná riadiace kódy uvedené v nasledujúcej tabuľke. Výnimkou je iba kód BELL (07h) - pípnutie, ktorý už v pôvodnom ovládači z PMD 85-3 chýba a tak je obslúžený na úrovni BIOSu.

Riadiace kódy pre výstup na konzolu
Názov kód HEXA Popis
ATTR0 01h zobrazovanie farbou 0
ATTR1 02h zobrazovanie farbou 1
ATTR2 03h zobrazovanie farbou 2
ATTR3 04h zobrazovanie farbou 3
BELL 07h pípnutie
LEFT 08h posun kurzora doľava
HTAB 09h horizontálny tabulátor - posun kurzora o 8 znakov doprava
DOWN 0Ah kurzor dole (LF)
CR 0Dh kurzor na začiatok riadku
RIGHT 0Eh posun kurzora doprava
UP 0Fh kurzor hore
NORM 1Ah normálne zobrazovanie (neinverzne)
ESC 1Bh nastavenie pozície kurzora, za tým - riadok + 32, stĺpec + 32
CLRL 1Ch zrušenie aktuálneho riadku (nasledujúce sa odrolujú hore)
INV 1Dh inverzné zobrazovanie (pozor, funguje, ako prepínač)
HOME 1Eh kurzor do ľavého horného rohu obrazovky
CLS 1Fh zmazanie celej obrazovky + HOME

Definičná tabuľka PMD 32-SD

Za skokovými vektormi na služby BIOSu je umiestnená definičná tabuľka pre PMD 32-SD pre priame volanie rutín ovládača PMD 32. Program, ktorý potrebuje priamo komunikovať s PMD 32-SD (napr. utilita CD), vyhľadá za skokovými vektormi túto tabuľku a tak získa informácie o podporovaných diskoch a adresách rutín.

DB	"32"		; značka pre vyhľadanie tabuľky
DB	4*16+0		; 4 disky od A:
DB	91		; CRC = 256 - ("3" + "2" + (4 * 16 + 0))
DB	"P32"		; predvolená prípona súboru
DW	0		; bez stránkovacej rutiny
DW	ReadByte	; 9 vektorov "služieb" ovládača PMD 32-SD
DW	SendCommand
DW	SendByte
DW	SndCrcRdAckErr
DW	ReadAckErr
DW	WaitErrT15
DW	WaitErrT
DW	SndCrcRdAck
DW	ReadCheckCrc


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.macbios4uni.mac nového BOOTu a BIOSu
  • MIKROS - obrazy systémových diskov s novo vygenerovaným systémom a
    • 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
  • Ďalšie obrazy diskov sú na stránke downloadov