Blog:Pripojenie PMD 32-SD k C2717

Z PMD 85 Infoserver

Pripojenie PMD 32-SD k C2717


Consul 2717 52 kB CP/M pre 4 mechaniky s PMD 32-SD
Consul 2717 52 kB CP/M pre 4 mechaniky s PMD 32-SD

Obsah

Consul 2717 Zbrojováček umožňuje pripojenie disketových jednotiek a tak má vo svojom rozšírenom Monitore tzv. diskové rozšírenie, teda ovládač pre obsluhu jednej alebo dvoch disketových jednotiek. Pôvodné 2 kB EPROM s označeniami 603.511/01 až 603.518/01 umožňovali používať iba 8" mechaniky, no neskôr bol ovládač upravený, aby bolo možné používať aj 5,25" mechaniky (EPROMky s označením 603.513/01 a 603.514/01 sa nahradili za 603.513/02 a 603.514/02). Jedná sa o oblasť pamäte od 9000h do 9BFFh, čo je vlastne rozšírený monitor o veľkosti 3kB. 1kB z druhej EPROM je časť BASICu, ktorá sa nezmenila. Zmeny sa týkajú iba diskového ovládača. Terminálová časť (vstup z klávesnice, zobrazenie 64 znakov na riadok) a časť Sieťové služby sa nezmenili, sú však na iných adresách, keďže disková časť sa posunula a predĺžila. Podstatné ale je, že to neovplyvnilo žiadne programy, keďže rozšírený monitor obsahuje na začiatku skokovú tabuľku vstupných bodov, ktoré sú volané CP/M BIOSom.

Pôvodné disketové jednotky pre Zbrojováčka sú už vo veľkej miere ťažko zohnateľné, takže tu bol nápad pripojiť k Zbrojováčku PMD 32-SD. Tá sa ale pripája cez paralelený interfejs (MHB 8255), ktorý Zbrojováček priamo nemá. Ku Zbrojováčku sa síce vyrábali tzv. Inteligentné káble s MHB 8255 pre pripojenie tlačiarní a podobne, ale tie sú, podobne, ako samotné disketové jednotky, prakticky nezohnateľné a aj tak by sa museli nejako upraviť. Existoval tiež (polo-amatérsky) paralelný interfejs s MHB 8255 z výrobného družstva KRET s názvom I2717, ktorý skôr kopíroval zapojenie z interfejsovej dosky PMD 85, ale naviac obsahoval aj port a prepojky pre určenie čísla počítača v sieti. Tento interfejs som tiež videl iba v jedinom exemplári.

Paralelný interfejs I2717-Plus

Paralelný interfejs I2717-Plus
Paralelný interfejs I2717-Plus
Zostavený paralelný interfejs I2717-Plus
Zostavený paralelný interfejs I2717-Plus

I2717-Plus je paralelný interfejs, ktorý umožňuje priamo pripojiť PMD 32-SD, Tlačiareň a Joystick. Ako paralelný interfejs je samozrejme použítý obvod PIO MHB 8255. Jeho port PA slúži ako obojsmerná dátová zbernica (strobovaný vstup/výstup v móde 2) pre PMD 32-SD, ku ktorej patria ešte riadiace signály z hornej časti portu PC (PC4PC7). Port PB je zdieľaný medzi Tlačiarňou (strobovaný výstup v móde 1) a Joystickom (vstup v móde 0). PC1 je výstup, ktorý slúži ako signál -STB pre tlačiareň. Impulz na tomto výstupe môže byť, v závislosti od toho, ako rýchlo príde potvrdzovací impulz -ACK z tlačiarne, pomerne dlhý a tak je pomocou dvoch invertorov a RC člena skrátený asi na 1µs, čo je postačujúca dĺžka strobovacieho impulzu pre tlačiareň. PC2 je vstup potvrdzovacieho impulzu -ACK z tlačiarne. PC0 a PC3 nie sú využité, ale v skutočnosti sú to výstupy prerušovacích signálov pre strobovacie módy portov PA a PB.

Signály (smery) Joysticku sú na port pripojené rovnako, ako to má Joystick 4004/482 pre PMD 85, sú ale vyvedené na Cannon konektor pre možnosť pripojenia bežného Atari Joysticku. Jednotlivé signály majú pull-up odpory 22k pre nastavenie kľudovej úrovne a zároveň sú oddelené odpormi 1k, aby sa chránil port PB, ak je naprogramovaný na výstup. Vzhľadom na to, že je Joystick pripojený na port PB, tak je nutné v hrách zmeniť čítanie Joysticku z portu PA na port PB.

Hradlové pole GAL16V8D spolu s dvoma NAND hradlami plní funkciu adresového dekodéra, ale zároveň je to aj port pre prečítanie čísla počítača v sieti, ktoré možno nastaviť DIP prepínačmi. Do adresného dekodéra nevstupujú A5 a A1, takže sa adresy portov zrkadlia aj v oblasti "rezervných adries", to ale nie je problém. MHB 8255 počúva na portoch 4Ch až 4Fh (zrkadlí sa na 6Ch až 6Fh), port čísla terminálu je na adrese 49h (zrkadlí sa na 4Bh, 69h a 6Bh).

Pre PMD 32-SD je teda na doske interfejsu konektor Cannon M15 a prepojovací kábel s dvoma 15 pinovými konektormi Cannon (samec a sanmica) o dĺžke asi 30 cm je zapojený 1:1.
Pre tlačiareň je na doske interfejsu konektor Cannon F25 a tak je možné pre pripojenie tlačiarne použiť bežný kábel, ktorý sa používa aj na PC. Dôležité upozornenie: na konektor sú okrem GND (piny 18 až 24) a dátových signálov (piny 2 až 9) pripojené už iba /STROBE (pin 1) a /ACK (pin 10). To znamená, že pripájanej tlačiarni musia tieto dva potvrdzovacie signály stačiť (obvykle tlačiarne s rozhraním Centronics).
Pre joystick je na doske interfejsu konektor Cannon M9 a ako bolo spomenuté vyššie, je určený pre bežný Atari joystick.

Pripojenie k počítaču je pomocou 19 žilového kábla o dĺžke asi 1 m. Konektor je vlastne malý plošný spoj s označením 604 409. Ak sa na konektor pozeráme tak, ako je vidieť na fotografii, tak jednotlivé piny sú číslované zľava do prava, piny s nepárnymi číslami 1 až 25 sú na spodnej strane dosky a piny s párnymi číslami 2 až 26 sú na strane hornej. Kľúč je na pinoch 21 a 22. Na doske intrfejsu sú prípojné body označené príslušnými číslami pinov na konektore.

A ešte jedna poznámka. Na fotografii je vidieť, že je v pätici CMOS verzia PIO NEC 82C55. S touto CMOS verziou však nebol interfejs "stabilný" a spoľahlivo fungoval iba s TESLA MHB 8255. Nerobil som ďalšie experimenty s CMOS verziou, ale je možné, že by tomu pomohli nejaké pull-up alebo pull-down odpory na dátovej zbernici. Ak by som navrhoval novú verziu dosky, zrejme by som tam tieto odpory preventívne pridal.

Diskový ovládač pre PMD 32-SD

EPROM C2717 s osadenou EPROM 603.513/32
EPROM C2717 s osadenou EPROM 603.513/32

Pôvodný diskový ovládač v rozšírenom ROM Monitore Zbrojováčka predstavujú rutiny, ktoré komunikujú s diskovým radičom na najspodnejšej úrovni. Ako bolo spomenuté vyššie, pôvodný ovládač bol iba pre 8" mechaniky a ten novší bol univerzálny pre oba typy mechaník, 8" a aj 5,25".

V našom prípade bude ale pôvodný ovládač pre 8" mechaniky nahradený ovládačom pre PMD 32-SD. Vzhľadom na úplne odlišnú komunikáciu s PMD 32-SD oproti komunikácii s FDC radičom, v novom ovládači sú implementované iba tri z pôvodných služieb: ReadSector, WriteSector a MoveIntr. Všetky ostatné služby sú úzko viazané na FDC radič a v tomto prípade teda vracajú iba chybový príznak.

Naopak, pre potreby špecializovaných programov (napr. CD.COM), ktoré potrebujú komunikovať s PMD 32-SD na najnižšej úrovni, boli pridané nové služby ovládača PMD 32-SD.

Dôležitou zmenou oproti pôvodnému ovládaču je, že pri BOOTovaní sa v BOOTe disku očakáva identifikačný reťazec "C2717S" namiesto "C2717 ". Tým sa zamedzí potenciálnemu "zhavarovaniu" systému pri vykonaní "nekompatibilného" kódu z BOOTu diskety. Samozrejme, disketu so starším systémom možno normálne použiť, pokiaľ má správny formát (viď. popis BIOSu).

Ako bolo v úvode spomenuté, rozšírenie Monitora je v EPROM 603.513/01 a 603.514/01 (pre 8" mechaniky), resp. 603.513/02 a 603.514/02 (pre 8" aj 5,25" mechaniky). Nový ovládač pre PMD 32-SD vychádza z 8" ovládača a tak v prvom prípade stačí vymeniť iba EPROM 603.513/01 za novú EPROM 603.513/32 (ovládač PMD 32-SD). V druhom prípade je nutné vymeniť EPROM 603.513/02 za novú EPROM 603.513/32 a EPROM 603.514/02 za EPROM 603.514/01.

Adresy vstupných bodov diskového ovládača v rozšírenom Monitore
Názov Adresa vstupného bodu Popis
Recalibrate 900Fh Neimplementované
SeekTrack 9012h Neimplementované
ReadSector 9015h Prečítanie skupiny sektorov na jednom cylindri (dve stopy nad sebou).
WriteSector 9018h Zápis skupiny sektorov na jednom cylindri (dve stopy nad sebou).
Specify 901Bh Neimplementované
SenseDrive 901Eh Neimplementované
SenseInt 9021h Neimplementované
RecalibrateCmd 9024h Neimplementované
SeekCmd 9027h Neimplementované
ReadIdCmd 902Ah Neimplementované
ReadCmd 902Dh Neimplementované
WriteCmd 9030h Neimplementované
FormatCmd 9033h Neimplementované
ResultCmd 9036h Neimplementované
MoveIntr 9039h Presunutie kódu pre transfer dát do RAM od adresy 003Bh.
Adresy priamych vstupných bodov ovládača PMD 32-SD
ReadByte 905Ah prijatie bytu z PMD 32
SendCommand 905Dh odoslanie povelu do PMD 32
SendByte 9060h odoslanie bytu do PMD 32
SndCrcRdAckErr 9063h odoslanie CRC bytu do PMD 32 a prijatie ACK bytu a chybového kódu
ReadAckErr 9066h prijatie ACK bytu a chybového kódu z PMD 32
WaitErrT15 9069h čakanie na výsledok povelu - timeout 15 sekúnd
WaitErrT 906Ch čakanie na výsledok povelu - timeout voliteľný
SndCrcRdAck 906Fh odoslanie CRC bytu a prijatie ACK
ReadCheckCrc 9072h prijatie CRC bytu a jeho kontrola

BOOT a BIOS pre PMD 32-SD

CP/M sa skladá zo 4 častí: BOOT, CCP, BDOS a BIOS. Zatiaľčo CCP a BDOS sú nezávislé od hardvéru, BOOT a BIOS sa musia prispôsobiť konkrétnemu počítaču a jeho hardvéru. Preto bolo nutné BOOT a BIOS pre PMD 32-SD upraviť.

Umiestnenie jednotlivých vrstiev CP/M v pamäti C2717
Vrstva Adresa v pamäti
BOOT 0080h
CCP 0B500h
BDOS 0BD00h
BIOS 0CB00h

BOOT

BOOT sektor je po štarte počítača a detekcii PMD 32-SD diskovým ovládačom načítaný z 0. stopy a 1. sektora disku v mechanike A: do pamäte od adresy 0080h a od tejto adresy je BOOT kód spustený. Kód BOOTu je veľmi jednoduchý a jeho úlohou je iba načítať celý systém volaním služby ReadSector diskového ovládača z prvých dvoch stôp disku do pamäte a spustiť ho. BOOT kód okrem toho ešte odpojí ROM (nastaví AllRAM mód) a zapne preadresovanie pamäte 0CXXXh. V BOOTe je dôležitý už spomenutý identifikačný reťazec "C2717S", podľa ktorého diskový ovládač rozpozná správny BOOTovací disk.

BIOS

BIOS poskytuje BDOSu definované služby volaním príslušných služieb v diskovom ovládači v rozšírenom Monitore. Je teda akousi "obálkou" diskového ovládača v rozšírenom Monitore, avšak zároveň obsahuje ďalšie dôležité rutiny, tabuľky a definície diskov. Na začiatku BIOSu je štandardný zoznam skokových vektorov na všetky jeho služby.

Adresy vstupných bodov CP/M BIOSu
Názov Adresa vstupného bodu Popis
CBOOT 0CB00h Studený štart systému
WBOOT 0CB03h Teplý štart systému
CONST 0CB06h Test stavu konzoly (zariadenie CON:)
CONIN 0CB09h Čítanie znaku z konzoly (zariadenie CON:)
CONOUT 0CB0Ch Výstup znaku na konzolu (zariadenie CON:)
LIST 0CB0Fh Výstup znaku na tlačiareň (zariadenie LST:)
PUNCH 0CB12h Výstup znaku na logické zariadenie výstupu (Neimplementované)
READER 0CB15h Vstup znaku z logického zariadenia vstupu (Neimplementované, vráti vždy EOF)
HOME 0CB18h Hlava vybraného disku na 0. stopu
SELDSK 0CB1Bh Výber disku
SETTRK 0CB1Eh Nastavenie požadovanej stopy
SETSEC 0CB21h Nastavenie požadovaného sektora
SETDMA 0CB24h Nastavenie zdrojovej/cieľovej adresy pamäte pre čítanie/zápis
READ 0CB27h Prečítanie zvoleného sektora (skupiny sektorov)
WRITE 0CB2Ah Zápis do zvoleného sektora (skupiny sektorov)
LISTST 0CB2Dh Test stavu tlačiarne (zariadenia LST:)
SECTRN 0CB30h Prepočet logického/fyzického sektora

Vstup z konzoly

Služby CONST a CONIN volajú pre test klávesnice rutiny z rozšíreného Monitora a na úrovni BIOSu je riešený iba Auto-Repeat klávesov. K tomu sa používajú dva zreťazené časovače obvodu PIT 8253. V pôvodných BIOSoch sa používa PIT 8253, ktorý je súčasťou disketových jednotiek. Keďže ale pri použití PMD 32-SD tento "externý" obvod chýba, používa sa obvod PIT 8253, ktorý je priamo v počítači (dva jeho časovače sú tiež zreťazené).

Na klávesnici je v úlohe klávesu CTRL kláves STOP, ktorý ak je stlačený s nejakým iným klávesom (obvykle A až Z), produkuje kódy 01h až 1Fh. Tieto kontrolné kódy majú svoje ekvivalenty aj v riadiacich klávesoch na klávesnici C2717, ako ukazuje nasledujúca tabuľka. Funkčné klávesy F0F11 produkujú kódy 0A8h až 0B3h, stlačené so Shifom potom kódy 0B4h až 0BFh. 4 neoznačené klávesy v dolnom rade majú nasledujúcu funkciu:

  • znak ~ alebo so Shiftom |
  • Caps Lock (aj so Shiftom)
  • diakritické znamienka mäkčeň, krúžok, vokáň alebo so Shiftom dĺžeň
  • diakritické znamienko dvojbodka (prehláska) alebo so Shiftom opäť mäkčeň, krúžok, vokáň

Posledné tri klávesy nemajú svoje vlastné kódy a sú odchytávané v rutinách rozšíreného Monitora a nastavujú iba príslušné príznaky, ktoré menia znak, ktorý je po nich stlačený. Znaky s diakritikou majú kódy od 0C0h a sú v kódovaní KOI-8čs.

Rozloženie kontrolných klávesov na klávesnici Consul 2717
Controlný kláves kód HEXA Consul 2717
CTRL-A 01h |<---
CTRL-B 02h C-D
CTRL-C 03h Shift + --->|
CTRL-D 04h --->
CTRL-E 05h Shift + <---
CTRL-F 06h --->|
CTRL-G 07h
CTRL-H 08h <---
CTRL-I 09h
CTRL-J 0Ah RCL
CTRL-K 0Bh
CTRL-L 0Ch
CTRL-M 0Dh EOL
CTRL-N 0Eh
CTRL-O 0Fh CLEAR
CTRL-P 10h PRINT (Shift + INS)
CTRL-Q 11h šikmá <---
CTRL-R 12h Shift + |<---
CTRL-S 13h Shift + C-D
CTRL-T 14h END
CTRL-U 15h Shift + WRK
CTRL-V 16h INS
CTRL-W 17h
CTRL-X 18h Shift + --->
CTRL-Y 19h
CTRL-Z 1Ah Shift + DEL
CTRL-[ 1Bh WRK
CTRL-\ 1Ch Shift + END
CTRL-] 1Dh Shift + RCL
CTRL-^ 1Eh Shift + šikmá <---
CTRL-_ 1Fh Shift + CLEAR
DEL 7Fh DEL

Výstup na konzolu

Služba CONOUT volá pre výstup znaku na konzolu rutinu z rozšíreného Monitora. Tá ošetruje aj niektoré riadiace kódy:

Riadiace kódy pre výstup na konzolu
Názov kód HEXA Popis
NORM 01 normálne zobrazovanie (neinverzne)
INVE 02 inverzné zobrazovanie
DELL 05 zrušenie aktuálneho riadku (nasledujúce sa odrolujú hore)
INSL 06 vloženie riadku (aktuálny a nasledujúce sa odrolujú dole)
BELL 07 pípnutie
LEFT 08 posun kurzora doľava
DOWN 0A posun kurzora o riadok dole s prípadným odrolovaním hore (LF)
CR 0D kurzor na začiatok riadku
HCUR 0E skrytie kurzora
SCUR 0F zobrazenie kurzora
RIGHT 18 posun kurzora doprava
UP 1A posun kurzora o riadok vyššie
ESC 1B nastavenie pozície kurzora, za tým - 32 + riadok [0-20], 32 + stĺpec [0-63]
HOME 1D kurzor do ľavého horného rohu obrazovky
ERSL 1E vymazanie od kurzora do konca riadku
ERSS 1F vymazanie od kurzora do konca obrazovky

Výstup na tlačiareň

Služby LIST a LISTST pre výstup znaku na tlačiareň používajú strobovaný výstup na porte B na PIO 8255, ktorý je na interfejse. Na konektor pre Cannon F25 pre tlačiareň sú vyvedené iba handshake signály /ACK a /STROBE.

Definičná tabuľka ovládača PMD 32-SD

Za štandardnými skokovými vektormi BIOSu nasleduje definícia ovládača PMD 32-SD a jeho najspodnejších rutín, ktoré je možné volať zo špecializovaných programov (napr. CD.COM). Programy, ktoré chcú priamo komunikovať s PMD 32-SD, vyhľadajú túto definičnú tabuľku a tým získajú adresy k týmto rutinám.

Definičná tabuľka pre rutiny ovládača PMD 32-SD
Adresa Obsah Popis
0CB33h db "32" Značka pre vyhľadanie tabuľky
0CB35h db 4*16+0 4 disky od A:
0CB36h db 91 CRC = 256 - ("3" + "2" + (4 * 16 + 0))
0CB37h db "DZ8" Predvolená prípona obrazu disku
0CB3Ah dw Paging Adresa stránkovacej rutiny
0CB3Ch dw ReadByte 9 vektorov “služieb” ovládača PMD 32-SD
0CB3Eh dw SendCommand
0CB40h dw SendByte
0CB42h dw SndCrcRdAckErr
0CB44h dw ReadAckErr
0CB46h dw WaitErrT15
0CB48h dw WaitErrT
0CB4Ah dw SndCrcRdAck
0CB4Ch dw ReadCheckCrc

Definícia diskových parametrov

Na rozdiel od pôvodných implementácií BIOSu pre floppy mechaniky, kde boli dostupné 1 alebo 2 disky, tento BIOS definuje 4 disky A: až D:, keďže to umožňuje samotná PMD 32-SD. Otázka bola, aký formát disku zvoliť. Nakoniec bol zvolený formát pre obojstranné 8" disky, kde je formátovaná kapacita 500,5 kB, na rozdiel od 5,25" diskov, kde je to maximálne 360 kB.

Prípona súboru pre obraz disku je DZ8 a tabuľka diskových parametrov je definovaná takto:

  • 26 sektorov o veľkosti 128 bytov na stopu
  • 77 stôp na stranu
  • 2 strany
  • 2 kB alokačný blok
  • 247 alokačných blokov
  • kapacita disku 494 kB
  • 128 adresárových položiek
  • 2 systémové stopy

Pre CP/M Image Manager je treba do cim.ini pridať takúto definíciu:

; Consul 2717 - Zbrojovacek - 8" obojstranne
[DZ8]
SPT=26
XLT=1,7,13,19,25,5,11,17,23,3,9,15,21,2,8,14,20,26,6,12,18,24,4,10,16,22
BLS=2
EXM=1
DSM=246
DRM=127
OFF=2

Do súboru images.cfg v koreňovom adresári SD karty je treba pridať nasledujúci riadok, aby firmvér v PMD 32-SD poznal "geometriu" obrazu disku:
DZ8 154 26 0

Na stiahnutie