Konference: Počítač SHARP MZ-800 a emulátory

Od: Anonym
Datum: 27.5.2003 11:10
Předmět: Re: 2. service packec pro MZ-IDE 16bit


To riešene s 8255 sa mi zdá ešte pomalšie (až 3 inštrukcie OUT na zápis dvoch bajtov!) To radšej zostaňme u pôvodného Petrovho návrhu (tiež je možné využiť až 4 zaridenia, napr. sekundárny kanál na adresách 67h..6Fh - pri použití EPROM ako dekodéru by to nemal byť žiadny problém).
 
Trochu som počítal strojové cykly:
 
1. najrýchlejší výstup dvoch bajtov:
 
OUTI
OUTI
 
16+16=32T
 
versus
 
LD A,(HL)
INC HL
LD B,(HL)
INC HL
OUT (C),A
 
7+6+7+6+12=38T, čo neni až tak zlé. Dokonca rýchlejšie než OTIR (21+21=42T)!
 
2. najrýchlejší vstup dvoch bajtov:
 
INI
INI
 
16+16=32T
 
versus
 
IN A,(78H)
LD (HL),A
INC HL
IN A,(77H)
LD (HL),A
INC HL
 
11+7+6+11+7+6=48T, čo je už horšie, ale iba o 50%.
 
Tento mierny pokles rýchlosti je na druhú stranu vyvážený jednoduchosťou zapojenia, takže zvažujme...
 
Marek.
----- Original Message -----
From: rdolejsi tu byla ta zakroucena vec eurotel.cz (sharpemu tu byla ta zakroucena vec pandora.cz)
To: Konference Počítač SHARP MZ-800 a emulátory
Sent: Tuesday, May 27, 2003 7:53 AM
Subject: Re: 2. service packec pro MZ-IDE 16bit



Jen pro úplnost:

  - zdaleka nejrozšířenější 16-bit IDE interface na ZX využívá obvodu 8255.
Je připojen tak, že porty A a B jsou Low/High datové sběrnice
a port C obsahuje A0-A2, IORD/IOWR signály, CS0 first IDE, CS0 second IDE.
Interface umožňuje připojit až 4 IDE zařízení (dva kabely)
a podporuje 16-bit porty pro všechny adresy, což však vzhledem k ATA
designu samozřejmě není potřeba. Ovládání pak vypadá nějak takto:

Zápis:
OUT Ctrl, 0x80          ; přepnutí 8255 do output módu
OUT A, data_low
OUT B, data_high
OUT C, IOWR+CS0+address

Čtení je obdobné..

  Osobně jsem ale spíše za zachování jednoduchosti a snadnosti ovládání z
ASM a tak hlasuji za již dříve Markem popsané řešení (překlápění lo/hi pro
datový port).

R.



|---------+--------------------------->
|         |           "rdolejsi tu byla ta zakroucena vec eurote|
|         |           l.cz (sharpemu  |
|         |           27.05.2003 07:38|
|         |           Odpovězte prosím|
|         |           uživateli       |
|         |           "Konference     |
|         |           "Počítač SHARP  |
|         |           MZ-800 a        |
|         |           emulátory""     |
|         |                           |
|---------+--------------------------->
  >--------------------------------------------------------------------------------------------------------------------------------|
  |                                                                                                                               |
  |        Komu:    "Konference "Počítač SHARP MZ-800 a emulátory"" <sharpemu tu byla ta zakroucena vec pandora.cz>                                         |
  |        Kopie:                                                                                                                 |
  |        Předmět: Re: 2. service packec pro MZ-IDE 16bit                                                                        |
  |                                                                                                                               |
  |                                                                                                                               |
  >--------------------------------------------------------------------------------------------------------------------------------|





Ahoj,

  taky jsem pro takovéto řešení. Na ZX to implementovali přesně tímto
způsobem (trio DTP; (P)VL byl na NP) a nemají s tím sebemenší problém.
Čtení/zápis provádějí přes INI(R)/OTI(R) a nic jim neschází ;-) Jen si
nejsem jistý, jestli jim vychází časování tak, aby sektor přečetli párem
INIR instrukcí, ale myslím, že ano.

R.

P.S.: Navíc MCE už tento způsob čtení IDE podporuje, tak si ho, Marku,
můžeš otestovat ;-) .. (port-type=16bit-lohi)



|---------+--------------------------->
|         |           "smihla tu byla ta zakroucena vec ceit.sk |
|         |           (sharpemu       |
|         |           26.05.2003 17:38|
|         |           Odpovězte prosím|
|         |           uživateli       |
|         |           "Konference     |
|         |           "Počítač SHARP  |
|         |           MZ-800 a        |
|         |           emulátory""     |
|         |                           |
|---------+--------------------------->
  >
--------------------------------------------------------------------------------------------------------------------------------|

  |
|
  |        Komu:    "Konference "Počítač SHARP MZ-800 a emulátory""
<sharpemu tu byla ta zakroucena vec pandora.cz>                                         |
  |        Kopie:
|
  |        Předmět: Re: 2. service packec pro MZ-IDE 16bit
|
  |
|
  |
|
  >
--------------------------------------------------------------------------------------------------------------------------------|




Ahoj,



Mal som na mysli nasledovné:

Prvý OUT 78h: zápis D0..D7 do záchytného registra.
Druhý OUT 78h: obsah záchytného registra do HDD (D0..D7) plus D0..D7 do HDD
(D8..D15).

A tak dalej striedavo... Podobne pri vstupe:

Prvý IN 78h: D0..D7 z HDD do D0..D7 na MZ, D8..D15 z HDD do záchytného
registra.
Druhý IN 78h: čítanie D0..D7 zo záchytného registra.

Iný sled resp. náväznosť bajtov neprichádza do úvahy (kvôli rýchlosti a
kompatibilite s PC).

V podstate ide o pridanie deličky jedna ku dvom na dekodér adresy 78h,
ktorá by striedavo prepínala medzi HDD a záchytným registrom. To nemôže byť
predsa až tak zložité, v žiadnom prípade netreba GAL či dokonca 8052!

Marek.

P.S. pokiaľ ide o filesystém FAT, už sa na ňom pracuje... ;-)
 ----- Original Message -----
 From: Petr Žydek (sharpemu tu byla ta zakroucena vec pandora.cz)
 To: Konference Počítač SHARP MZ-800 a emulátory
 Sent: Monday, May 26, 2003 10:33 AM
 Subject: 2. service packec pro MZ-IDE 16bit




 Tak tu máme service packec č. 2.
 K aktivitě mě inspirovala reakce Marka
 Šmihly na zveřejněný návrh 16bitového
 rozhraní HDD pro Sharpa. Sice jsem se
 nepokoušel počítat, jak se liší doba
 přenosu jednoho 512ti bajtového sektoru
 přes běžné I/O instrukce se současnou
 manipulací se všemi potřebnými registry
 A, BC, HL oproti použití repetičních
 instrukcí INIR, OTIR, ale přesto jsem zkusil
 podumat nad jinou alternativou...



 Co je třeba dodržet, docílit:
 -potřebujeme 16ti bitový přenos dat, aby
  byla využita celá kapacita HDD
 -možnost přenosu dat z/na porty
  repetičními I/O instrukcemi
 -možnost použít funkci autodetekce
  parametrů disku
 -zařízení by mělo být kompatibilní
  s původní 8bitovou verzí
 -obvodové řešení musí být co možná
  nejjednodušší, malý počet IC snižuje cenu,
  šetří místo v případě vývoje kombo desek
 -v případě manipulace se signálem disku
  /sels se nabízí možnost obsluhy dvou
  HDD, tedy princip master/slave jako u PC
 -pokud by byla akceptována možnost provozu
  dvou HDD, pak se jasně nabízí možnost
  využití souborových systémů FAT(32), tím
  nemyslím přímé začlenění do CP/M, slave
  disk by sloužil jako přenosný element
  Sharp <-> PC. Konverzi souborových
  systémů a vlastních dat může provádět
  aplikační program pod CP/M typu
  file-manažer; stejně tak CP/Movsky
  nahraný disk by byl čitelný pro
  aplikační program v PC, ten by ho
  přečetl celý raz dva


 Jak to tedy vyřešit:


 Tahhle nějak vypadá zápis 512ti bajtového
 sektoru na MZ-IDE 8bit (odhaduju):


 xxx             ; nastav příslušné hodnoty
 xxx             ; do registru stopy,
 xxx             ; sektoru atd.
 LD HL, "odkud"  ; adresa dat v paměti
 LD B,00h        ; 256 bajtů dat
 LD C,78h        ; adresa datového portu HDD
 OTIR***         ; přenese B bajtů na port
                 ; 78h od adresy v HL
 OTIR            ; ještě jednou totéž


 Doufám, že jsem se nespletl, už jsem si
 dlouho v asm Z80 nehrál, je-li pravda, že
 po instrukci *** B=00h, HL="odkud"+256 a C
 se nemění, pak se vykoná přenos jako dvě
 256tice I/O cyklů po sobě pomocí instrukcí
 OTIR (???)


 U PC bych si představil něco podobného, jen
 registry jsou víceslovné (to je výraz!) a
 datová sběrnice je 16ti bitová, takže se
 přenese jedním "OTIRem" (dejme tomu) jediná
 256tice najednou, protože je široká 16 bitů
 a ne 8.


 Pokud by měl na tomto místě fungovat nějaký
 obvodový supervizor, který by datový tok
 na port 78h střídavě přepínal tak, abychom
 docílili připravenosti 16ti bitů dat každé
 dva I/O zápisy a pak by se provedl jeden
 vybavovací zápis do HDD, připomíná mi to
 křižovatku se semafory kde se po každém
 projetém autě mění volný směr jízdy.


 Můj návrh zní: využít toho, že se v každém
 případě přenáší 256 bajtů 2x po sobě, navíc
 obsah registru B sám inkrementuje a posílá
 se na A8-A15 adresové sběrnice Sharpa!!!
 Obvodové řešení by vycházelo z mého
 původního návrhu 16ti bitového rozhraní tj.:
    1x 74LS245
    1x 27xxx
    1-2 další 74LS241, 245 (podle výsledku)
    1x SRAM 6116 2kB


 Příklad zápisu:
 LD HL,"odkud"  ; adresa dat v paměti
 LD B,00h       ; 256 bajtů dat
 LD C,77h       ; adresa pomocného bufferu
 OTIR           ; naplní se pomocný 256ti
                ; bajtový buffer (Statická RAM)
 LD C,78h       ; adresa datového portu HDD
 OTIR           ; přenos 256ti bajtů

Ostatní příspěvky vlákna:

 
[2003/1 (22)] [2003/2 (25)] [2003/3 (14)] [2003/4 (20)] [2003/5 (73)] [2003/6 (108)] [2003/7 (88)] [2003/8 (81)] [2003/9 (146)] [2003/10 (60)] [2003/11 (12)] [2003/12 (5)]


[1999 (1)] [2000 (168)] [2001 (733)] [2002 (459)] [2003 (654)] [2004 (224)] [2005 (105)] [2006 (182)] [2007 (201)] [2008 (294)] [2009 (363)] [2010 (782)] [2011 (522)] [2012 (642)] [2013 (442)]