IDE vezérlő kártya
A kártya két szabvány 16 bites IDE csatornát valósít meg szabvány EP buszhoz illeszkedve (gép vagy buszbővítő), mivel az IDE szabvány 2 eszközt enged meg egy kábelen, így összesen 4 eszközt lehet csatlakoztatni egy kártyára (amikor készült, azt hittük, hogy majd pc-ből levetett 40 megás vinyókat fogunk használni halomszámra, sőt akár két kártya is lehet a géphez kötve...). A szoftver detektálja a kártyákat, aztán a kártyákra kötött valamennyi vinyót. Jelenleg max. 128GB-osok támogatva, kis programváltoztatással a következő verzióban 2 TB lesz a maximum. Ezután összegyűjti az összes vinyóról a FAT partíciókat egy saját táblázatba. (Elsődleges, kiterjesztett partíciók egyaránt támogatva). Ezekből a jelenlegi EXDOS korlátjai miatt (hiszen a FAT16 csak 1984 augusztusában jelent meg az IBM PC AT-hez - és az akkor hatalmas kapacitásúnak számító új 20 Megabyte-os HDD-hez - elkészült MS DOS 3.0-ban), csak a FAT12-esek használhatóak, ezeket egy megfelelő EXDOS bővítés segítségével be is láncolja a rendszerbe. Innentől F:, G:, stb meghajtókon szabadon lehet garázdálkodni. A kártya 4 portot hoz létre, alapállapotban ECH-EFH címeken, jumperrel máshova is állítható, a program a teljes E0H-EFH tartományban keresi, így elméletileg akár 4 kártya is lehetne egy géphez csatolva! (Amikor készült akkor még a PC-kből kidobott 20-40 megás merevlemezekre gondoltam, mint EP-sek számára elérhető vinyó, ezekből jó sok kéne...)
A kártya 0. portja az alsó 8 bit adatportja, az 1. a felső 8 bit portja, mivel az IDE busz számunkra sajnálatos módon 16 bites. A maradék két port 1-1 parancsport a kártya 2 csatlakozója számára. A parancsport alsó három bitje az IDE címbitek, a következő a CS0/CS1 címbit, következő kettő pedig az írás/olvasási jelek az IDE buszra. A maradék kettő kifelé nincs bekötve, befelé az IDE busz INT és PDIAG jele olvasható.
Az alsó 6 bit ki és bemenet össze van kötve, vagyis a parancsportokon visszaolvasható a legutóbb kiírt érték alsó 6 bitje. A szoftver ennek segítségével keresi meg a kártyát, az alsó 4 bitet (a maradék kettőt azért nem, hogy ne piszkálja az IDE buszt) végig teszteli 0-15 értékekkel, hogy visszaolvasható-e.
Írás az IDE buszra úgy történik, hogy a két 8 bites adatportra bekészítjük a 16 bites érték két darabját, a cím pedig a parancsportra megy, ahol az írás bit segítségével az egész egyszerre kikerül az IDE buszra.
Olvasás fordítva, a cím bitek és olvasás bit segítségével a parancsporton keresztül megtörténik az olvasási művelet az IDE buszon, a 16 bites érték eltárolódik a kártyán, és a két 8 bites adatporton kiolvasható.
Maga a merevlemezek programozása megtalálható az ATA szabványban. Jelenleg ebből számunkra az IDENTIFY DEVICE, INITIALIZE DEVICE PARAMETERS, READ SECTORS, READ MULTIPLE, WRITE SECTORS, WRITE MULTIPLE, SET MULTIPLE parancsok érdekesek.
A címzés elsősorban LBA módban történik, mivel maga a program is 32 bites LBA címzést használ belsőleg. Végszükség esetén, ha a vinyó nem támogatja (vagyis legalább vagy 10-12 éves...), akkor kerül átszámolásra CHS-re a cím.
Az IDE ROM parancsai
Paraméterek, minden esetben hexadecimális alakban, és megfelelő hosszban írandóak:
IDEINFO ss,aaaa
Megadott pufferbe másolja az IDE ROM-mal kapcsolatos információkat.
00: IDE bővítő ROM verziószáma (BCD),
01: IDE ROM szegmensszáma,
02: IDE RAM területének szegmensszáma,
03-04: RAM terület címe,
05: kontrollerek száma,
06: merevlemezek száma,
07: detektált partíciók száma.IDEIDENTIFY ss,aaaa,d
A megadott pufferbe lekéri a megadott merevlemez 512 bájtos ATA azonosító blokkját, ebből megtudható a név, típus, méret, stb, részletes leírás az ATA szabványokban található.IDEREAD ss,aaaa,d,nnnnnnnn,cc
Szektorok olvasása értelemszerű paraméterekkel.IDEWRITE ss,aaaa,d,nnnnnnnn,cc
Szektorok írása, szintén értelemszerű paraméterekkel.
Az FDISK.BAS-ban megtekinthető a parancsok használata.
A kártya közvetlen programozása
Így néz ki a kártyák detektálása:
PDET NEMZ |
LD IX,VEGE CALL PDETECT LD (IX),0 LD (IX+1),55H |
; felhasznált memória címe ; kártyák keresése az EF portról ; ha talált, akkor letároljuk ; két parancs port utám ; a két adat portot ; kihagyjuk ; DF-nél vége ; port lista lezárása |
PDETECT: PDETC |
LD B,11110000B XOR B |
Sajnos a NYÁK tervezése során történt egy kis baki, és az A1,A0 címvezeték fel lett cserélve. Mondjuk nagy gondot nem okoz, csak ennek megfelelően kellett definiálnom a konstansokat a programban.
Eredetileg az IDE-n 3 címbit van, és két Chip Select jel (ezek ha jól sejtem valami ősi MFM vezérlős időkből erednek...). Mivel a két CS jel közül úgyis csak az egyik van használva egyszerre, ezért ezt én egy újabb címbittel helyettesítettem. Ezek figyelembe vételével ezek a regisztercímek EP-n:
0000: Data
0010: Error / Features
0001: Sector Count
0011: Sector Number / LBA(7:0)
0100: Cylinder Low / LBA(15:8 )
0110: Cylinder High / LBA(23:16)
0101: Device/Head / LBA(27:24)
0111: Status / Command
1101: Alternate Status / Device Control
1111: Drive Address (ez csak az ATA-1 szabványban szerepel, többiben mint elavult említik)
Nézzük meg, hogyan néz ki egy IDE regiszter írás/olvasás EP-n. Az egyszerűség kedvéért van definiálva egy rakás konstans:
RD |
equ 32 |
;OLVASÁS |
Ezek nagyrésze a korábban említett IDE regiszterek címei. Az RD konstans pedig a parancsport 4. bitjét nullázza, a WR pedig az 5. bitet. Ezzel tudjuk kiváltani az IDE buszon a megfelelő I/O műveletet. Használat után mindkettőt vissza kell állítani 1-re. |
||
LD C,0ECH |
; adatport alsó 8 bit ; adatport felső 8 bit ; írás művelet+a regiszter címe ; parancsport ; írás+olvasás bitek visszaállítása 1-re |
|
Csak a DATA regiszter 16 bites, a többi esetén az adatport felső 8 bitjét nem kell kiküldeni. |
||
LD A,RD+DATA |
; olvasás művelet+a regiszter címe ; parancsport ; írás+olvasás bitek visszaállítása 1-re ; adatport alsó 8 bit ; adatport felső 8 bit |
|
Szintén csak a DATA regiszternél kell a felső 8 bitet is kiolvasni. |
Kapcsolási rajz, beültetési terv
A hardware-hez program is tartozik. Az 1.0-ás verziószámú IDE vezérlő program, 15 partíciót (F:-T:) tud kezelni.
A ROM 128K-nál több memória esetén saját szegmenst foglal, így nem fogy az értékes hely a rendszerszegmensben. Ehhez a módhoz EXOS 2.1-nél újabb kell, mert a 2.0 és a 2.1 bugos abban az esetben, ha nem a rendszerszegmensben kér a bővítő RAM-ot. Természetesen ellenőrzi az EXOS verziót.
Az UTIL rovatban letölthető olyan EXDOS-verzió, amely az E:, F:, B:, A: meghajtókon keres EXDOS.INI file-t.
Pár további IDE fotó, hogy ne csak a prototípusról legyen kép, illetve arról, hogy két kártya is lehet egyszerre a rendszerben:
Zozosoft |