Blog:DOS PMD-32
Z PMD 85 Infoserver
DOS PMD-32
DOS PMD-32 (ďalej iba DOS) je alternatívny systém pre PMD 85-3 v spojení s PMD 32. Slúži ako nadstavba pre BASIC-G pre možnosť ukladania programov na disketu.
Originálny popis systému nemám, takže tu uvediem iba svoje poznatky a skúsenosti. Ak Schotek nascanuje návod na obsluhu PMD 32, ktorý získal na Aukro, možno sa dozvieme viac.
Charakteristika DOSu PMD-32
DOS PMD-32 je v základe upravené CP/M 2.2, resp. Mikros 2.2. Používa rovnaký formát disku a má aj rovnaké konzolové vlastnosti ako Mikros pre PMD 85. Rozdiel je v samotnom systéme.
- BIOS je rovnaký ako v Mikrose.
- BDOS je oklieštený a nemá implementované služby 4, 5, 23, 24, 27 až 31, 33 až 40. Naviac, pre služby 33 až 40 už chýba aj rozskoková tabuľka, takže volanie týchto služieb spôsobí skok na nezmyselné adresy a s najväčšou pravdepodobnosťou rovno reset počítača. Ostatné neimplementované služby spôsobia klasický reboot systému.
- CCP je upravený hlavne v záujme možnosti nahrávať a ukladať programy v BASICu.
CCP poskytuje iba 5 vstavaných príkazov:
-
d:
- nastavenie aktuálnej diskovej jednotky -
DIR [d:][afn]
- výpis zoznamu súborov, ktoré sa nachádzajú na aktuálnom alebo zvolenom disku (afn je nejednoznačné meno súboru) -
ERA afn
- zmazanie súboru alebo skupiny súborov -
SAVE n [d:]ufn
- uloženie obsahu pamäti do súboru (ufn je jednoznačné meno súboru, n je desiatkove číslo určujúce počet stránok (256 bytových blokov pamäti) od začiatku TPA (0100h), ktoré sa do súboru uložia) -
STOR ufn
- uloženie programu v BASICu do súboru
CCP umožňuje samozrejme spúšťať aj súbory s príponou COM
(zapisujú sa bez prípony). Avšak, vzhľadom na oklieštený BDOS, sa mnoho programov ani nespustí. Na originálnej diskete s DOSom sú tieto spustiteľné súbory:
-
PMD.COM
- prevedie skok do Monitora PMD 85-3 -
PMD30.COM
- program pre kopírovanie súborov medzi disketovými jednotkami PMD 30 a PMD 32 -
BASIC-G.COM
- natiahnutie BASIC-G V3.0 z ROM Modulu a jeho spustenie -
COPY.COM
- kopírovanie celých diskiet (z mechaniky A: na mechaniku B:) -
FORMAT.COM
- formátovanie diskety v mechanike A: alebo B:
Nahratie BASIC programu sa robí zadaním mena súboru vrátane prípony BAG
. CCP v takom prípade nahraje daný súbor do pamäti od adresy 2400h a vykoná nasledujúci kód:
CALL 0EC00h ; nacitaj z ROM Modulu zakladne rozsirenie BASICu DEFW 2400h ; adresa v ROM Module DEFW 0401h ; dlzka bloku DEFW 0B800h ; cielova adresa v pamati CALL 0EC00h ; nacitaj z ROM Modulu hlavnu cast BASICu DEFW 000Ch DEFW 23F4h DEFW 0000h CALL 0EC00h ; nacitaj z ROM Modulu diskove rozsirenie BASICu DEFW 2810h DEFW 0A01h DEFW 0A400h CALL 0AA00h ; inicializuj diskove rozsirenie CALL 2296h ; nastav syst. premenne BASICu podla nahraneho programu JMP 0B836h ; nastavenie najpouzivanejsich prikazov do prog. klucov ; a spustenie interpretera
Program BASIC-G.COM
vykonáva rovnaký kód až na to, že nevolá rutinu na adrese 2296h, keďže v pamäti nie je program v BASICu. Doporučujem po spustení BASICu prostredníctvom programu BASIC-G.COM
zadať príkaz NEW
, pretože bez toho sa BASIC chová nejako nepredvídateľne.
Diskové rozšírenie
V článku o PMD 32-SD som písal, že pre DOS PMD-32 nám (ďalej iba DOS) chýba časť "rozšírenia", ktorá umožňuje návrat z BASICu do DOSu a uloženie BASIC programu na disketu.
Nedávno som získal na Aukro hromadu EPROMiek a jedna z nich obsahovala práve ovládač pre PMD 32 a PMD 85-2. Kód je v podstate totožný s tým, ktorý sa nachádza v Monitore PMD 85-3, vrátane časti BIOSu, ale je pochopiteľne na iných adresách a na inú adresu sa aj načítava BOOT z diskety. Z toho aj plynie, že pre túto konfiguráciu, nie je možné použiť verziu diskiet k PMD 85-3. Minimálne z pohľadu systému, ktorý musí byť nakonfigurovaný pre veľkosť pamäti PMD 85-2 (zrejme 32 kB verzia CP/M, či DOSu). Takto nakonfigurovaný systém ale nemáme. CP/M by som ešte vedel vytvoriť, ale pre DOS nemám podklady, na základe ktorých by to šlo.
Okrem spomenutého ovládača PMD 32, kód ešte obsahuje jednu dôležitú vec. Pridanie nového príkazu DISK
do BASICu, ktorý pripraví do systémovej premennej adresu konca programu a prevedie návrat do DOSu (znovunačítaním systému z diskety do pamäti). Po návrate do DOSu je potom možné príkazom STOR
program v BASICu uložiť na disketu. Veľkosť programu sa zistí zo sytémovej premennej uloženej pri návrate do DOSu.
Na základe týchto vedomostí a zo znalosti spôsobu spúšťania BASICu z DOSu som vytvoril jednoduchy programček, ktorý je potrebné napáliť do 2kB EEPROM od adresy 0610h. Táto EPROM musí byť umiestnená v ROM Module v prvej pozícii za BASICom.
ORG 0AA00h INIT: PUSH H LXI H,49C4h ; novy prikaz 'DISK' SHLD 1B15h LXI H,4B53h SHLD 1B17h MVI A,81h ; ukoncenie prikazu STA 1B19h LXI H,EXEC ; adresa exekutivy prikazu SHLD 1974h LXI D,XEXEC ; presun kodu prikazu do volneho miesta MVI B,EXECEND-EXEC ; za strankovacie rutiny INIT2: LDAX D MOV M,A INX D INX H DCR B JNZ INIT2 POP H RET XEXEC: .PHASE 0BF80h ; volny priestor za strankovacimi rutinami EXEC: PUSH H LHLD 0AE7Ah ; odpamataj koniec programu v basicu SHLD 0C430h ; do systemovej oblasti CALL 0F91FH ; nacitaj system z diskety a spusti POP H ; pri chybe sa vrat do BASICu RET EXECEND: .DEPHASE
Pri spúšťaní BASICu z DOSu je z ROM Modulu najprv obvyklým spôsobom natiahnutý BASIC a potom ešte na adresu 0A400h obsah ďalšej EPROM s uvedeným rozšírením. Následne sa volá rutina INIT
, ktorá modifikuje BASIC a prídá príkaz DISK
. Potom už sa prevedie skok do BASICu. Výkonná časť príkazu DISK
iba prekopíruje adresu konca BASIC programu zo sytémovej premennej BASICu (0AE7Ah) do systémovej oblasti na adresu 0C430h a spustí DOS. Za pomoci hodnoty z adresy 0C430h si príkaz STOR
DOSu vypočíta dĺžku programu a uloží program v BASICu na disketu.
= = = Článok ešte nie je hotový a ešte sa na ňom pracuje = = =