Blog:DOS PMD-32

Z PMD 85 Infoserver

Revízia z 20:38, 6. október 2009; Rombor (Diskusia | príspevky)
(rozdiel) ← Staršia verzia | Zobrazenie aktuálnej úpravy (rozdiel) | Novšia verzia → (rozdiel)

DOS PMD-32

DOS PMD-32 (ďalej iba DOS) je alternatívny systém pre PMD 32 v spojení s PMD 85-3. Umožňuje v podstate iba čítať a zapisovať programy v BASICu.

Originálny popis systému nemám, takže tu uvediem iba svoje poznatky a skúsenosti. Pokiaľ 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, resp. Mikros.

  • 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 reboot systému.
  • CCP je upravený hlavne v záujme základnej myšlienky, kvôli čomu bol DOS zrejme vytvorený. Tou myšlinkou je používanie pôvodného BASICu V3.0. Žiaľ, táto myšlienka nebola veľmi dotiahnutá, resp. jediné čo autori "vymysleli" bola možnosť spustiť interpretér BASICu buď osamote alebo spolu so zvoleným BASIC programom, plus možnosť návratu z BASICu do DOSu a uloženie rozpracovaného programu na disketu. Žiaľ, v samotnom BASICu nie je možnosť s disketou, resp. so súbormi na diskete pracovať.

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í. V konečnom dôsledku to ani nie je potrebné. Na originálnej diskete s DOSom boli 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 BASICu C3.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:


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.