Konference: Počítač SHARP MZ-800 a emulátory
Od: | Zdenek Adler |
Datum: | 23.3.2006 08:13 |
Předmět: | Re: Podrobnosti o funkčním FDC s DP8473/( kritizov aným MUDr. Punťou). |
debile,
ja jsem Te v zadnem pripade neurazel, ani nekritizoval. Mne zajimalo, jak k tomu sikovnemu "udelatku" prijit, protoze nejsem v technice tak zdatny jako Ty. Ty jsi ale jen sprostej VUL. Takze sorry :-((
MUDr. Josef Puta
P.S. mudrcu a kritiku je na Internetu opravdu hodne, takze si vsichni strcte kritiku na muj prispevek za klobouk. Sharpa s pomoci kamaradu upgraduji od roku 1986. Je to stale muj zivy a prvni pocitac a je smutne, ze za jeho "postprukopniky" se nachazeji takovi Edisonove, jako jsi Ty, chudaku.
----- Původní zpráva -----
Odesílatel: Petr Žydek (sharpemu tu byla ta zakroucena vec pandora.cz) <judeware tu byla ta zakroucena vec volny.cz>
Datum: Středa 22. března 2006, 10:32
Předmět: Podrobnosti o funkčním FDC s DP8473
Komu: Konference "Počítač SHARP MZ-800 a emulátory" <sharpemu tu byla ta zakroucena vec pandora.cz>
<p><P><BR>Co jsem měl k dispozici pro testy</P>
<P><BR>Celkem 12 řadičů na bázi 8272, z toho:</P>
<P>1x s DP8473V (National, PLCC52)<BR>2x s DP8473N (National, DIP48)</P>
<P>2x s uPD765A (NEC, přímý ekvivalent 8272)<BR>2x s UM8388 (UMC, zaměřen jen na PC, DIP48)<BR>1x s UM8397 (UMC, do PC XT, DIP48)<BR>3x s GM82C765A (Goldstar, totéž co WD37C65B)<BR>1x s WD37C65B (Western, totéž co Goldstar)</P>
<P>Pak mám nějaké vypájené UMC a 37C65<BR>(od WD a SMC, PLCC44).</P>
<P><BR>Jak jsem testoval</P>
<P>Mechaniku 3.5" jsem napájel z externího<BR>zdroje z PC, standardní "PC kšandou"<BR>jsem ji připojil do příslušného řadiče<BR>a ten připojil do Sharpa mým udělátkem<BR>"Sharp to ISA" (kritizovaným MUDr. Punťou).<BR>Připravil jsem si v monitoru pár primitivních<BR>podprogramů:</P>
<P>1000h:<BR>LD,14h<BR>OUT (F2h),A<BR>RET</P>
<P>1008h:<BR>LD,00h<BR>OUT (F2h),A<BR>RET</P>
<P>1010h:<BR>IN A,(F4h)<BR>CAll 03C3h<BR>RET</P>
<P>1018h:<BR>IN A,(F5h)<BR>CAll 03C3h<BR>RET</P>
<P>1020h:<BR>LD,03h<BR>OUT (F5h),A<BR>RET</P>
<P>1028h:<BR>LD,A0h<BR>OUT (F5h),A<BR>RET</P>
<P><BR>1030h:<BR>LD,01h<BR>OUT (F5h),A<BR>RET</P>
<P>1040h:<BR>LD,46h<BR>OUT (F5h),A<BR>RET<BR>CAll 03C3h</P>
<P>1048h:<BR>LD,00h<BR>OUT (F5h),A<BR>RET<BR>CAll 03C3h</P>
<P>1050h:<BR>LD,00h<BR>OUT (F5h),A<BR>RET<BR>CAll 03C3h</P>
<P>1058h:<BR>LD,00h<BR>OUT (F5h),A<BR>RET<BR>CAll 03C3h</P>
<P>1060h:<BR>LD,01h<BR>OUT (F5h),A<BR>RET<BR>CAll 03C3h</P>
<P>1068h:<BR>LD,02h<BR>OUT (F5h),A<BR>RET<BR>CAll 03C3h</P>
<P>1070h:<BR>LD,01h<BR>OUT (F5h),A<BR>RET<BR>CAll 03C3h</P>
<P>1078h:<BR>LD,01h<BR>OUT (F5h),A<BR>RET<BR>CAll 03C3h</P>
<P>1080h:<BR>LD HL,2000h<BR>LD BC,0F5h<BR>LD A,FFh<BR>OUT (F5h),A<BR>108Ah:<BR>IN A,(F4h)<BR>CP F0h<BR>JP NZ,108Ah<BR>INI<BR>JP NZ,108Ah<BR>1096h:<BR>IN A,(F4h)<BR>CP F0h<BR>JP NZ,108Ah<BR>INI<BR>JP NZ,108Ah<BR>RET</P>
<P>1000h: vybere mechaniku A:, zapne motor,<BR>deaktivuje softwarový reset řadiče,<BR>zakazuje DMA piny<BR>1008: provede deselekt mechaniky, vypne<BR>motor, drží řadič v softwarovém resetu<BR>1010: přečte hodnotu z portu F4h<BR>(main status register)<BR>1018: přečte hodnotu z portu F5h<BR>(data register, má význam při výsledkové<BR>fázi příkazu čtení dat)<BR>1020h-1030h: pošle řadiči příkaz specify:<BR>03h: kód příkazu<BR>A0h: krokování 6ms, prodleva - motor off 0ms<BR>01h: prodleva - motor on 0ms, non DMA mode!!!<BR>(Tady je v manuálu GM82C765 chyba, v přehledu<BR>příkazu na str. 27 je v tabulce určené pro<BR>bit non DMA nějaký morseovkový paskvil a<BR>v podrobném popisu příkazu na str. 35-36<BR>není ani zmínka)<BR>Vhodnou změnou v instrukcích LD A, xxh<BR>zde lze vykonat příkazy seek a recalibrate<BR>(a tím ověřit vykonání specify), recalibrate <BR>se ovšem posílá jen dvěma bajty, je-li hlava<BR>na 80. stopě, musí se opakovat (pozůstatek<BR>z jednotek 8" se 77 stopami)<BR>U!
DP8473 drží hodnoty nastavené příkazem<BR>specify i po Hw/Sw resetu<BR>1040h-1078h: pošle řadiči příkaz read data:<BR>46h: multitrack, skip sektor=no; MFM=yes<BR>00h: implied seek=no; head, drive=0<BR>00h: track=0<BR>00h: drive head number=0<BR>01h: sector number=1<BR>02h: number of bytes per sector=2 ---> 512B<BR>(pro Sharp má význam ještě 1 ---> 256B)<BR>01h: end of track sector number=1<BR>(pro čtení jediného sektoru musí mít hodnotu<BR>jako parametr sector number - při čtení v non<BR>DMA režimu)<BR>1Bh: intersector gap length=1Bh<BR>(pro Sharp má význam ještě 20h, stopa 16x256B)<BR>Jednotlivé bajty jsem zprvu posílal sólo<BR>(měření sondou, čtení statusu po každém bajtu),<BR>když se RETy nahradí NOPy, proběhne celá<BR>sekvence najednou s výpisem odesílaných bajtů<BR>(výpis akumulátoru zajistí potřebné prodlevy)</P>
<P>1080h: pošle řadiči poslední bajt příkazu<BR>read data<BR>ffh: data length (doporučená hodnota pro<BR>velikost sektoru 256 a 512B)<BR>a vykoná čtení 512ti bajtů 1. sektoru 0. stopy<BR>Čeká na hodnotu statusu F0h:<BR>request for master bit 7=1<BR>data direction bit 6=1<BR>non DMA execution bit 5=1<BR>command in progress bit 4=1</P>
<P>Není-li disketa v mechanice nebo čtení<BR>nezapočne, rutina se sekne - ošetření mezních<BR>stavů patří do O.S., při testech mě to<BR>nezajímá.</P>
<P>Jak se choval úspěšný DP8473V, jak jsem postupoval</P>
<P>1) vložení diskety do mechaniky - zděšení: točí<BR>se motor bez selektu (po Hw resetu!!!)<BR>2)*G1008 (vypne motor, deselekt, Sw reset),<BR>pauza na čaj<BR>3)*G1000 (rozjede mechaniku)<BR>4)*G1010 (vypíše 80h: čeká na příkaz)<BR>5)*G1040 .. G1078 (odešle bajty příkazu řadiče,<BR>průběžné čtení statusu oznamuje 90h: příkaz probíhá)<BR>6)*G1080 (vrátil se na prompt monitoru, malá prodleva;<BR>zjistil jsem, že výchozí nastavení určená příkazem<BR>specify jsou ta nejpomalejší: seek, motor on/off)<BR>7)*G1010 (status hlásí D0h, bit non DMA v nule<BR>oznamuje přechod na výsledkovou fázi)<BR>8)*G1018 (čtení výsledkových bajtů, s i bez<BR>prokládání čtením statusu: D0h):<BR>40h: abnormal termination of command<BR>80h: end of track bit=1<BR>00h: OK<BR>00h: track=0<BR>00h: head=0<BR>01h: sector=1<BR>02h: bytes/sector=2 tj. 512B<BR>9)*G1010 (vypíše 80h: čeká na příkaz)<BR>10)*G1008 (vypne motor, deselekt, Sw reset)</P>
<P>Od adresy 2000h je v paměti správně načtený sektor<BR>(z čistého formátu 720ky v PC, ověřeno diskeditem).<BR>Střídal jsem dvě diskety pořád dokola, bez chyby,<BR>ta druhá měla tentýž sektor popsaný vyjmenovanými<BR>slovy jazyka českého (velká ASCII písmena se dají<BR>ověřit v monitoru i v diskeditu v PC). Po 50ti<BR>cyklech jsem toho nechal.</P>
<P>Poznatky<BR>je-li po "*G1000" odeslán příkaz specify, prodleva<BR>při čtení sektoru je minimální<BR>hodnota 40h ve výsledkové fázi je OK, nativní<BR>režim řadiče je DMA, konec čtení dat je signalizován<BR>pinem TC=HIGH, tento je zde neaktivní a přenos<BR>je zakončen tím, že je vhodně nastaven bajt<BR>"end of track sector number" v příkazu read data</P>
<P>manuál DP8473 str. 16 odst. 2:<BR>"In DMA mode the Read Data command continues to read<BR>until the TC pin is set. This means that the DMA controller<BR>should be programmed to transfer the correct number of<BR>bytes. TC could be controlled by the mP and be asserted<BR>when enough bytes are received. An alternative to these<BR>methods of stopping the Read Data command is to program<BR>the End of Track Sector Number to be the last sector number<BR>that needs to be read. The controller will stop reading<BR>the disk with an error indicating that it tried to access a<BR>sector number beyond the end of the track."</P>
<P>manuál k DP8473 taky jediný zmiňuje metodu dotazování<BR>status registru (a ne spolupráci přes IRQ v non DMA režimu,<BR>tak non DMA režim chápou všichni ostatní brouci)<BR>str. 13 ostavec Software polling:<BR>"If the non-DMA mode is selected and interrupts are not<BR>suitable, the mP can poll the Main Status Register during the<BR>Execution Phase to determine when a byte is ready to be<BR>transferred. In the non-DMA mode, bit 7 of the Main Status<BR>Register reflects the state of the interrupt pin. Otherwise,<BR>the data transfer is similar to the Interrupt Mode described<BR>above."</P>
<P><BR>Odlišnosti u DP8473N DIP48</P>
<P>Výše uvedený postup nezabral, proto jsem si dočasně upravil<BR>podprogram čtení sektoru:<BR>108A:<BR>CALL 03C3h<BR>DJNZ 108A<BR>RET<BR>Poté, co se odešle poslední bajt příkazu read data<BR>se 256x přečte status a skončí.</P>
<P>Co načetl: samé 10h tj. příkaz probíhá, non DMA=no<BR>Dodatečný status vypsal D0h tj. zahájení čtení výsledků<BR>a bajty z portu F5 určily:<BR>nedokončený příkaz<BR>"data utekla".</P>
<P>Po rozjetí mechaniky proto MUSÍ následovat příkaz specify,<BR>status po zahájení příkazu read data ohlásí:<BR>10h (jedinkrát) příkaz probíhá<BR>30h (mockrát) příkaz probíhá, non DMA execution<BR>F0h (cca 20x) příkaz probíhá, non DMA, čti bajt<BR>D0h (ve fázi result neustále do doby načtení výsledků<BR>z portu F5).</P>
<P>Tuto rutinu uplatňuju i u všech ostatních brouků,<BR>zatím se nedaří přečíst stav F0h po zadání read data.</P>
<P>Po Hw resetu nebo při pokusu načíst 1.44MB disketu<BR>se čtecí rutina seká, takže komplexní řešení pro (nejen)<BR>DP8473 je:<BR>po rozjetí mechaniky aplikovat příkaz specify,<BR>poslat na port F7h hodnotu 02h (data rate 250kbit/s),<BR>zadat příkaz read data. Pak chodily všechny tři<BR>DP8473x.<BR>Myslím, že se Zilogem >6MHz by prošlo sw čtení<BR>sektoru i na 1.44MB disketě :-))))</P>
<P>PDF manuál DP8473 je na:<BR><A href="http://www.mz-800.xf.cz/files/tech/dp8473.pdf" target="1">http://www.mz-800.xf.cz/files/tech/dp8473.pdf</A></P>
<P>Co jsem nestihl, příště.</P>
<P>Petr de Zviqov<BR></P><pre></pre><p><br>--- <br>
Vše o mobilech najdete v novém přehledném katalogu mobilů: <a href="http://mobil.idnes.cz/katalog.asp" target="1">http://mobil.idnes.cz/katalog.asp</a>
---
Vše o mobilech najdete v novém přehledném katalogu mobilů: http://mobil.idnes.cz/katalog.asp
Ostatní příspěvky vlákna:
[2006/1 (19)] [2006/2 (19)] [2006/3 (34)] [2006/4 (8)] [2006/5 (14)] [2006/6 (2)] [2006/7 (3)] [2006/8 (20)] [2006/9 (3)] [2006/10 (3)] [2006/11 (2)] [2006/12 (55)]