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