19. 12. 2007

Něco málo o HDD na MB-02+

Pamětníci si jistě pamatují náš SpeccyMan. SpeccyWeb se snaží na SpeccyMana navázat. Jelikož ale SpeccyMan neexistuje, rádi by jsme vám znovu připomněli pár článku, které se zachovali do současné doby. Dnešní článek se věnuje vytváření VDT tabulky pro HDD Patch v BS Dosu 3.08...Jelikož hodně lidí tvrdí, že MB-02+ je málo dokumentované, snažíme se to napravit. Dnes vám ukážeme Dronovo manuál, který dodával s HDD Patchem 1.65 pro BS Dos 3.08. Podařilo se mi ho od Drona vysomrovat, neboť jsem od 8bc žádný manuál nedostal (prostě jsem dostal jen fungující sestavu... :) ). Takže příjemné čtení přeji....
HddPatch - InLine dokumentace v 1.65
Strukura HddPatche

offset délka
-------------------------------------------
0 3 jp install (neměnit !)
3 1032 VDT (viz. speciální kapitola)
1035 8 adresy portu vašeho IDEface
1043 ??? vlastní hdd patch

Adresy portu IDEfacePortu je 8 a ja je mám zapojeny takto (POZOR ! Moje zapojeni je poněkud nestandartní ! Zkontrolujte si, jestli zde mate správné hodnoty !!!)

Název portu moje adresa standartní adresa
-------------------------------------------------
Data 195 163
Error 199 167
Počet sektoru 203 171
Číslo sektoru 207 175
Cylindr Low 211 179
Cylindr High 215 183
Hlavička 219 187
Příkaz 223 191

VDT - Virtual Disk Table (Tabulka virtuálních disků)HddPatch vzhledem k možnostem BS-DOSu 308 simuluje na harddisku až 255 disketových mechanik. Počítejte se mnou. 0 je kazeťák, 1 a 2 (teoreticky i 3 a 4) jsou disketové mechaniky (ale HddPatch je může přebít) a zbytek do 255 je pro naši potřebu.
Na jeden IDE řadič lze připojit dva harddisky. Na každém harddisku můžeme mít až 4 partišny. Tabulka VDT říká BS-DOSu, kde se který disk (1-255) fyzicky nachází. Máme-li připojené dva harddisky, mužeme jejich diskimage vkládat do BS-DOSu jako zcela libovolne disky. Pomoci vhodneho software (který ještě neexistuje ;-) to mužeme dělat i přímo při práci.
VDT má v současnosti tento formát:

offset délka
------------------------------------------------------------------------
0 4 sec,head,cyl pro hdd_a
4 4 sec,head,cyl pro hdd_b
8 4 0,0,0,0 (tady je kazetak)
12 4 umístění disku č.1 (tady je fdd, raději neměnit)
16 4 umístění disku č.2 (tady je fdd, raději neměnit)
20 4 umístění disku č.3
. .
. .
1028 4 umístění disku č.255

Délka tabulky je tedy 1032 bajtů.Datová položka "umístění disku" vypadá takto (4 bajty):

ssssssss ssssssss ssssssss 000xyyyz

s: log. číslo sektoru
x: 0 - disk je připojený jako master
1 - disk je připojený jako slave
z: write protect
0 - povolený zápis
1 - zakazaný zápisy
yy: metoda přístupu k harddisku
(ukazuje co všechno váš harddisk umí)
000 - uplný základ (čte se 2x jeden sektor)
001 - čtou se dva sektory najednou
010 - LBA mód a dva sektory najednou
011 - LBA mód a 1024 bajtu jako 1 sektor

Pozn. Čtení 2x po jednom sektoru může vypadat jako pěkná blbost, ale přestože možnost určit kolik sektorů se má číst najednou je u všech (i těch nejstarších) disků implementována, můj 50 Mb disk při této "velmi háklivé" operaci občas (pravidelně) vytuhne. Čím víc váš disk umí, tím jednodušší je pro spectrum přenos dat a mělo by docházet ke zrychlení. Jinými slovy se dá říct, že čím novější disk, tím by měl být (a bude) rychlejší, protože nové disky mají zpravidla velké cache pameti a znají LBA mod.
První diskimage na partišně má log. číslo sektoru shodné s prvním sektorem této partišny, další diskimage je o 4096 sektorů dále atd. dokud nejsme na konci partišny. Log. číslo prvního sektoru partišny se da vyčíst z MBR (Master Boot Record - první sektor na disku).
Formát MBR

offset délka
-------------------------------------------------------------------
446 1 0 - not bootable, 128 - bootable
447 3 cyl,head,sec pro první sektor partišny
450 1 typ operačního systému
451 3 cyl,head,sec pro poslední sektor partišny
454 4 Log. číslo prvního sektoru partišny (start)
458 4 Počet sektorů partišny (délka)
462 16 tabulka pro 2. partišn
478 16 tabulka pro 3. partišn
494 16 tabulka pro 4. partišn

Pro HddPatch je duležité Log. číslo prvního sektoru a délka. CSH údaj u větších disků raději neberte v potaz. Typ operačního systému říká, který systém okupuje tuto partišn.

#47 - HddPatch
#48 - SFS

(Samozřejmě zde jsou kvanta dalších systemů, ale nemám teď po ruce tabulku)

Jeden praktický příklad jak vytvořit VDT tabulku
Máme připojený a dokonce i funkční IDEface. Připojíme jeden... no radeji rovnou dva harddisky. Samozřejmě je správně naswitchujeme (mastra, jako master, slejva jako slave) a ověříme si funkčnost nejlépe tnt&pvl's IDEinfem. Mě například vypsalo toto (jen to nejduležitější):

Master: Quantum LP52A
Device type: HDD
Geometry (C/H/S): 751/8/17
LBA supp: no
Partitions: hda1 hda2

Slave: ST3660A
Device type: HDD
Geometry (C/H/S): 1057/16/63
LBA supp: yes
Partitions: hdb1 hdb2

Máme tedy dva harddisky, ten druhý dokonce umí LBA mód. hda1 hda2 nám říká, že na disku 1 jsou dvě primární partišny (IDEinfo umí najít i dosovské (jaxetomu říká?) sekundární, ale to je jenom pro zmateni věci). Dokud nemáme nějaký rozumný Fdisk na Spectru, musime si disk rozdělit na PC. Já to udělal a hda1 je dosovská partišna a s hda2 počítám na HddPatch. Prozatím je HddPatchi úplně jedno, jakou identifikacni značku partišna má. Hlavně ať to je primární partišn. To samé jsem udělal i s druhým diskem. Jestli chcete mít na disku jenom HddPatch, tak si samozřejmě vytvořte jenom jednu partišnu. Jestli toho tam chcete mít víc, tak víc (max. 4 !).
Nyní můžeme použít můj nouzový prohližeč MBR. Problém bude s adresama portu (používám nestandartní). Sežeňte si buď správnou verzi, nebo si adresy změňte pomocí devastace (týká se to instrukcí out (xxx),a in a,(xxx) a jednoho ld bc,xxxxx před inir) No a mě se po spuštění vypsalo tohle (opět jen to důležité):

MASTER

Partition: 1
First sec.: 17 -> 17,0,0,0
Total sec.: 41055 -> 95,160,0,0

Partition: 2
First sec.: 41072 -> 112,160,0,0
Total sec.: 60928 -> 0,238,0,0

SLAVE

Partition: 1
First sec.: 63 -> 63,0,0,0
Total sec.: 409185 -> 97,62,6,0

Partition: 2
First sec.: 409248 -> 160,62,6,0
Total sec.: 655200 -> 96,255,9,0

Nyní je potřeba si vzpomenout na kterých partišnách jsme chtěli ten HddPatch vlastně mít. Už to mám, na obou discích na těch druhých...
Začneme tvořit VDT a hezky od adresy 32771...

nejdřív sec,head,cyl pro hdd_a a hdd_b

17,8,239,2 - (2*256+239 = 751)63,16,33,4 - (4*256+33 = 1057)

a teď vlastní disky...

0,0,0,0 - (disk 0 - tady je kazeťák)
0,0,0,0 - (disk 1 - tady je fdd 1)
0,0,0,0 - (disk 2 - tady je fdd 2 - heč, mám dvě disketovky)

a teď už je jenom na nás, kam si který fyzický disk naasignujeme do BS-DOSu Začneme třeba hdd_a

112,160,0,0 (disk 3 - hdd_a, začátek druhé partišny, master, mode 000, read/write)
112,176,0,0 (disk 4 - hdd_a, o 4096 harddiskových sektrů dál, prostě vždycky přičtete
ke druhému číslo 16 dokud se nedostanete přes 255, pak přičtete jedničku ke třetímu
číslu a pokračujte dokud nevyčerpáte všechno volné místo na partišně -
60928/4096 = 14.875 = 14 disku se vleze na tuto partišnu)
112,192,0,0 (disk 5)
112,208,0,0 (disk 6)
112,224,0,0 (disk 7)
112,240,0,0 (disk 8)
112,0,1,0 (disk 9)
112,16,1,0 (disk 10)
112,32,1,0 (disk 11)
112,48,1,0 (disk 12)
112,64,1,0 (disk 13)
112,80,1,0 (disk 14)
112,96,1,0 (disk 15)
112,112,1,0 (disk 16 - a tím jsme vyčerpali celou naši partišnu na disku hdd_a)

Teď sem naplácáme druhý disk. Ten je o dost šikovnějši - umí LBA mod.

160,62,6,010100 = 18 (disk 17, hdd_b, slave, mode 010, read/write)
160,78,6,18 (disk 18)
.
.
.

až je všechno hotovo, tak napište: SAVE "moje1VDT" CODE 32771,1032 a potom ještě tohle...

LOAD "HddPatch16" CODE: LOAD "moje1VDT" CODE: RANDOMIZE USR 32768

zkuste:
@1CAT

funguje ?

@2CAT

funguje ?
@3CAT

nespadlo to ? ne ?

Jestli tohle děláte poprvé, tak na vás asi vybafne hláška UNKNOWN FORMAT, ale to je v pořádku. Spusťte ff17 a zadejte tyto parametry:

drv = který disk chcete formátovat ? asi tu trojku, ne ?
hdd=1
trk = 127 (hmm, tady by mělo být 128, ale buď je chyba v BS-DOSu, nebo ve formatovači, ale s touto hodnotou se už disk nenaformátuje :-(
sec=8

A zvesela formátujte... jde to pomalu, co ? no ale nebrečte, čtení je báječně rychlé. Tak to udělejte se všemi vašimi novými disky... alespoň do té doby, než na to budou nějaké programy...
Jestli chcete používat disk, který neumí LBA, zkuste mód 001. Kdyby vám disk vytuhával (přestaval reagovat, hlásil TIME OUT), tak přejděte na mód 000.
Pokud vám něco nefunguje, tak napiště svůj problém do příspěvků pod tímto článkem.
MB-02+ rox!

Žádné komentáře: