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 -----
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)]