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 = = =