Blog:Pripojenie PMD 32-SD k C2717
Z PMD 85 Infoserver
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
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 (PC4 až PC7). 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
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 F0 až F11 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
- I2717-Plus.zip - Schéma a podklady pre výrobu DPS interfejsu
- I2717-Plus-GAL.zip - Podklady pre naprogramovanie GALu
- C2717-Konektory.zip - Podklady pre výrobu DPS konektorov
- C2717-PMD32.zip - Diskový ovládač pre PMD 32-SD a upravený BOOT a BIOS (zdrojové kódy aj výsledné binárky)
- C2717-diskety-dz8.zip - Obrazy diskov typu DZ8 pre C2717 s novým systémom pre PMD 32-SD