Přejít na obsah
ARCHIVEKArchiv e-mailových konferencí o 8bitových počítačích Archiv Pandory 1999 až 2013

Zpět na zprávu

Celé vlákno · 3 zprávy

Podrobnosti o funkčním FDC s DP8473

Petr Žydek SHARP MZ-800


Co jsem měl k dispozici pro testy


Celkem 12 řadičů na bázi 8272, z toho:

1x s DP8473V (National, PLCC52)
2x s DP8473N (National, DIP48)

2x s uPD765A (NEC, přímý ekvivalent 8272)
2x s UM8388 (UMC, zaměřen jen na PC, DIP48)
1x s UM8397 (UMC, do PC XT, DIP48)
3x s GM82C765A (Goldstar, totéž co WD37C65B)
1x s WD37C65B (Western, totéž co Goldstar)

Pak mám nějaké vypájené UMC a 37C65
(od WD a SMC, PLCC44).


Jak jsem testoval

Mechaniku 3.5" jsem napájel z externího
zdroje z PC, standardní "PC kšandou"
jsem ji připojil do příslušného řadiče
a ten připojil do Sharpa mým udělátkem
"Sharp to ISA" (kritizovaným MUDr. Punťou).
Připravil jsem si v monitoru pár primitivních
podprogramů:

1000h:
LD,14h
OUT (F2h),A
RET

1008h:
LD,00h
OUT (F2h),A
RET

1010h:
IN A,(F4h)
CAll 03C3h
RET

1018h:
IN A,(F5h)
CAll 03C3h
RET

1020h:
LD,03h
OUT (F5h),A
RET

1028h:
LD,A0h
OUT (F5h),A
RET


1030h:
LD,01h
OUT (F5h),A
RET

1040h:
LD,46h
OUT (F5h),A
RET
CAll 03C3h

1048h:
LD,00h
OUT (F5h),A
RET
CAll 03C3h

1050h:
LD,00h
OUT (F5h),A
RET
CAll 03C3h

1058h:
LD,00h
OUT (F5h),A
RET
CAll 03C3h

1060h:
LD,01h
OUT (F5h),A
RET
CAll 03C3h

1068h:
LD,02h
OUT (F5h),A
RET
CAll 03C3h

1070h:
LD,01h
OUT (F5h),A
RET
CAll 03C3h

1078h:
LD,01h
OUT (F5h),A
RET
CAll 03C3h

1080h:
LD HL,2000h
LD BC,0F5h
LD A,FFh
OUT (F5h),A
108Ah:
IN A,(F4h)
CP F0h
JP NZ,108Ah
INI
JP NZ,108Ah
1096h:
IN A,(F4h)
CP F0h
JP NZ,108Ah
INI
JP NZ,108Ah
RET

1000h: vybere mechaniku A:, zapne motor,
deaktivuje softwarový reset řadiče,
zakazuje DMA piny
1008: provede deselekt mechaniky, vypne
motor, drží řadič v softwarovém resetu
1010: přečte hodnotu z portu F4h
(main status register)
1018: přečte hodnotu z portu F5h
(data register, má význam při výsledkové
fázi příkazu čtení dat)
1020h-1030h: pošle řadiči příkaz specify:
03h: kód příkazu
A0h: krokování 6ms, prodleva - motor off 0ms
01h: prodleva - motor on 0ms, non DMA mode!!!
(Tady je v manuálu GM82C765 chyba, v přehledu
příkazu na str. 27 je v tabulce určené pro
bit non DMA nějaký morseovkový paskvil a
v podrobném popisu příkazu na str. 35-36
není ani zmínka)
Vhodnou změnou v instrukcích LD A, xxh
zde lze vykonat příkazy seek a recalibrate
(a tím ověřit vykonání specify), recalibrate
se ovšem posílá jen dvěma bajty, je-li hlava
na 80. stopě, musí se opakovat (pozůstatek
z jednotek 8" se 77 stopami)
U DP8473 drží hodnoty nastavené příkazem
specify i po Hw/Sw resetu
1040h-1078h: pošle řadiči příkaz read data:
46h: multitrack, skip sektor=no; MFM=yes
00h: implied seek=no; head, drive=0
00h: track=0
00h: drive head number=0
01h: sector number=1
02h: number of bytes per sector=2 ---> 512B
(pro Sharp má význam ještě 1 ---> 256B)
01h: end of track sector number=1
(pro čtení jediného sektoru musí mít hodnotu
jako parametr sector number - při čtení v non
DMA režimu)
1Bh: intersector gap length=1Bh
(pro Sharp má význam ještě 20h, stopa 16x256B)
Jednotlivé bajty jsem zprvu posílal sólo
(měření sondou, čtení statusu po každém bajtu),
když se RETy nahradí NOPy, proběhne celá
sekvence najednou s výpisem odesílaných bajtů
(výpis akumulátoru zajistí potřebné prodlevy)

1080h: pošle řadiči poslední bajt příkazu
read data
ffh: data length (doporučená hodnota pro
velikost sektoru 256 a 512B)
a vykoná čtení 512ti bajtů 1. sektoru 0. stopy
Čeká na hodnotu statusu F0h:
request for master bit 7=1
data direction bit 6=1
non DMA execution bit 5=1
command in progress bit 4=1

Není-li disketa v mechanice nebo čtení
nezapočne, rutina se sekne - ošetření mezních
stavů patří do O.S., při testech mě to
nezajímá.

Jak se choval úspěšný DP8473V, jak jsem postupoval

1) vložení diskety do mechaniky - zděšení: točí
se motor bez selektu (po Hw resetu!!!)
2)*G1008 (vypne motor, deselekt, Sw reset),
pauza na čaj
3)*G1000 (rozjede mechaniku)
4)*G1010 (vypíše 80h: čeká na příkaz)
5)*G1040 .. G1078 (odešle bajty příkazu řadiče,
průběžné čtení statusu oznamuje 90h: příkaz probíhá)
6)*G1080 (vrátil se na prompt monitoru, malá prodleva;
zjistil jsem, že výchozí nastavení určená příkazem
specify jsou ta nejpomalejší: seek, motor on/off)
7)*G1010 (status hlásí D0h, bit non DMA v nule
oznamuje přechod na výsledkovou fázi)
8)*G1018 (čtení výsledkových bajtů, s i bez
prokládání čtením statusu: D0h):
40h: abnormal termination of command
80h: end of track bit=1
00h: OK
00h: track=0
00h: head=0
01h: sector=1
02h: bytes/sector=2 tj. 512B
9)*G1010 (vypíše 80h: čeká na příkaz)
10)*G1008 (vypne motor, deselekt, Sw reset)

Od adresy 2000h je v paměti správně načtený sektor
(z čistého formátu 720ky v PC, ověřeno diskeditem).
Střídal jsem dvě diskety pořád dokola, bez chyby,
ta druhá měla tentýž sektor popsaný vyjmenovanými
slovy jazyka českého (velká ASCII písmena se dají
ověřit v monitoru i v diskeditu v PC). Po 50ti
cyklech jsem toho nechal.

Poznatky
je-li po "*G1000" odeslán příkaz specify, prodleva
při čtení sektoru je minimální
hodnota 40h ve výsledkové fázi je OK, nativní
režim řadiče je DMA, konec čtení dat je signalizován
pinem TC=HIGH, tento je zde neaktivní a přenos
je zakončen tím, že je vhodně nastaven bajt
"end of track sector number" v příkazu read data

manuál DP8473 str. 16 odst. 2:
"In DMA mode the Read Data command continues to read
until the TC pin is set. This means that the DMA controller
should be programmed to transfer the correct number of
bytes. TC could be controlled by the mP and be asserted
when enough bytes are received. An alternative to these
methods of stopping the Read Data command is to program
the End of Track Sector Number to be the last sector number
that needs to be read. The controller will stop reading
the disk with an error indicating that it tried to access a
sector number beyond the end of the track."

manuál k DP8473 taky jediný zmiňuje metodu dotazování
status registru (a ne spolupráci přes IRQ v non DMA režimu,
tak non DMA režim chápou všichni ostatní brouci)
str. 13 ostavec Software polling:
"If the non-DMA mode is selected and interrupts are not
suitable, the mP can poll the Main Status Register during the
Execution Phase to determine when a byte is ready to be
transferred. In the non-DMA mode, bit 7 of the Main Status
Register reflects the state of the interrupt pin. Otherwise,
the data transfer is similar to the Interrupt Mode described
above."


Odlišnosti u DP8473N DIP48

Výše uvedený postup nezabral, proto jsem si dočasně upravil
podprogram čtení sektoru:
108A:
CALL 03C3h
DJNZ 108A
RET
Poté, co se odešle poslední bajt příkazu read data
se 256x přečte status a skončí.

Co načetl: samé 10h tj. příkaz probíhá, non DMA=no
Dodatečný status vypsal D0h tj. zahájení čtení výsledků
a bajty z portu F5 určily:
nedokončený příkaz
"data utekla".

Po rozjetí mechaniky proto MUSÍ následovat příkaz specify,
status po zahájení příkazu read data ohlásí:
10h (jedinkrát) příkaz probíhá
30h (mockrát) příkaz probíhá, non DMA execution
F0h (cca 20x) příkaz probíhá, non DMA, čti bajt
D0h (ve fázi result neustále do doby načtení výsledků
z portu F5).

Tuto rutinu uplatňuju i u všech ostatních brouků,
zatím se nedaří přečíst stav F0h po zadání read data.

Po Hw resetu nebo při pokusu načíst 1.44MB disketu
se čtecí rutina seká, takže komplexní řešení pro (nejen)
DP8473 je:
po rozjetí mechaniky aplikovat příkaz specify,
poslat na port F7h hodnotu 02h (data rate 250kbit/s),
zadat příkaz read data. Pak chodily všechny tři
DP8473x.
Myslím, že se Zilogem >6MHz by prošlo sw čtení
sektoru i na 1.44MB disketě :-))))

PDF manuál DP8473 je na:
http://www.mz-800.xf.cz/files/tech/dp8473.pdf

Co jsem nestihl, příště.

Petr de Zviqov

Přílohy

  • Testovaci_podprogramy.jpg
    image/jpeg · 172 kB · 1024 x 768 px

Re: Podrobnosti o funkčním FDC s DP8473/( kritizovaným MUDr. Punťou).

Anonym SHARP MZ-800

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.

Zobrazit citovaný text



----- Původní zpráva -----
Odesílatel: Petr Žydek (sharpemupandora.cz) <judeware[doména skryta]>
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" <sharpemupandora.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 ---&gt; 512B<BR>(pro Sharp má význam ještě 1 ---&gt; 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 &gt;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>

Re: Podrobnosti o funkčním FDC s DP8473/( kritizov aným MUDr. Punťou).

Zdenek Adler SHARP MZ-800

Ehm... Někdo použije pro vyjádření nesouhlasu s tím druhým slovní hříčku, někdo použije hrubé urážky které se jistě dotkly nejenom Petra, mě, ale i každého slušného člověka v této konferenci. Z konference nechci nikoho vyhazovat, tak aspoň prosím o to aby si někteří její členové uvědomili k čemu je vlastně určená. Pokud někdo není nadšený z nových příspěvků a dění okolo MZ-800, je velmi jednoduchá cesta k tomu si prostě zasílání příspěvků z Pandory zablokovat, případně se zcela odhlásit. Asi bych toho měl na jazyku víc, ale raději taktně pomlčím a budu doufat že podobné příspěvky které nemají pro MZ-800 nadšence žádnou hodnotu se už nebudou opakovat.
 
Z.
 
 
 
 
 
----- Original Message -----
From: puta[doména skryta] (sharpemupandora.cz)
To: Konference "Počítač SHARP MZ-800 a emulátory"
Sent: Wednesday, March 22, 2006 6:50 PM
Subject: Re: Podrobnosti o funkčním FDC s DP8473/( kritizovaný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 (sharpemupandora.cz) <judeware[doména skryta]>
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" <sharpemupandora.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 ---&gt; 512B<BR>(pro Sharp má význam ještě 1 ---&gt; 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 &gt;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