PROGRAM: hdd_patch 1.61


AUTOR: Dron

Nejnovější verze hdd_patche. Bohužel, neexistuje žádný program, který vám vytvoří VDT, a tak si ji musíte vytvořit ručně, např. v devastaci. K tomu potřebujete vědět jak to udělat. Ještě než přikročíme k samotnému info, řekněme si, že tato verze podporuje DMA přenos jak na 128K tak na +2A, umí i LBA mód a podporuje write protect virtuálních disků. Bohužel, verze 1.61 nefunguje spolehlivě se všemi harddisky (sám používám ještě 1.21). Mám od Drona doma ještě několik jiných verzí, takže když je budete chtít, pošlu vám je.


HddPatch - InLine dokumentace v 1.61 (DRON)


Strukura HddPatche:

offsetdelka
0 3 jp install (nemenit !)
3 1032 VDT (viz. specialni kapitola)
1035 8 adresy portu vaseho IDEface
1043 ??? vlastni hdd patch


Adresy portu IDEface

Portu je 8 a ja je mam zapojeny takto (POZOR ! Moje zapojeni je ponekud nestandartni ! Zkontrolujte si, jestli zde mate spravne hodnoty !!!)
Nazev portu moje adresa standartni adresa
Data 195 163
Error 199 167
Pocet sektoru 203 171
Cislo sektoru 207 175
Cylindr Low 211 179
Cylindr High 215 183
Hlavicka 219 187
Prikaz 223 191


VDT - Virtual Disk Table (Tabulka virtualnich disku)

HddPatch vzhledem k moznostem BS-DOSu 308 simuluje na harddisku az 255 disketovych mechanik. Pocitejte se mnou. 0 je kazetak, 1 a 2 (teoreticky i 3 a 4) jsou disketove mechaniky (ale HddPatch je muze prebit) a zbytek do 255 je pro nasi potrebu.

Na jeden IDE radic lze pripojit az dva harddisky. Na kazdem harddisku muzeme mit az 4 partisny. Tabulka VDT rika BS-DOSu, kde se ktery disk (1-255) fyzicky nachazi. Mame-li pripojeny dva harddisky, muzeme jejich diskimage vkladat do BS-DOSu jako zcela libovolne disky. Pomoci vhodneho software (ktery jeste neexistuje ;-) to muzeme delat i primo pri praci.

VDT ma v soucasnosti tento format:
offset delka
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 umisteni disku c.1 (tady je fdd, radeji nemenit)
16 4 umisteni disku c.2 (tady taky muze byt fdd)
- - -
- - -
- - -
1028 4 umisteni disku c.255

delka tabulky je tedy 1032 bajtu


Datova polozka "umisteni disku" vypada takto:

xxxxxxxx xxxxxxxx xxxxxxxx 0x0yqqqz
--- log. cislo sektoru ---


x - metoda pristupu k harddisku y - 0 - disk je pripojeny jako master
    1 - disk je pripojeny jako slave

z - write protect qqq - metoda pristupu k harddisku (ukazuje co vsechno vas harddisk umi) Pozn. Cteni 2x po jednom sektoru muze vypadat jako pekna blbost, ale presto, ze moznost urcit kolik sektoru se ma cist najednou je u vsech (i tech nejstarsich) disku implementovana, muj 50 Mb disk pri teto "velmi haklive" operaci obcas (pravidelne) vytuhne. Cim vic vas disk umi, tim jednodussi je pro spectrum prenos dat a melo by dochazet ke zrychleni.

Prvni diskimage na partisne ma log. cislo sektoru shodne s prvnim sektorem teto partisny, dalsi diskimage je o 4096 sektoru dale atd. dokud nejsme na konci partisny. Log. cislo prvniho sektoru partisny se da vycist z MBR (Master Boot Record - prvni sektor na disku).

Format MBR:
offset delka
446 1 0 - not bootable, 128 - bootable
447 3 cyl,head,sec pro prvni sektor partisny
450 1 typ operacniho systemu
451 3 cyl,head,sec pro posledni sektor partisny
454 4 Log. cislo prvniho sektoru partisny (start)
458 4 Pocet sektoru partisny (delka)
462 16 tabulka pro 2. partisn
478 16 tabulka pro 3. partisn
494 16 tabulka pro 4. partisn


rozsah partisny je urcen obema (CSH i log. cislem) udaji. Pro HddPatch je dulezite Log. cislo prvniho sektoru a delka. CSH udaj u vetsich disku obvykle neodpovida skutecnosti!

typ operacniho systemu rika, ktery system okupuje tuto partisn.

#47 - HddPatch
#48 - SFS

Jeden prakticky priklad jak vytvorit VDT tabulku

Mame pripojeny a dokonce i funkcni IDEface. Pripojime jeden... no radeji rovnou dva harddisky. Samozrejme je spravne naswitchujeme (mastra, jako master, slejva jako slave) a overime si funkcnost nejlepe tnt&pvl's IDEinfem. Me napriklad vypsalo toto (jen to nejdulezitejsi):

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

Mame tedy dva harddisky, ten druhy dokonce umi LBA mod. hda1 hda2 nam rika, ze na disku 1 jsou dve primarni partisny (IDEinfo umi najit i dosovske (jaxetomu rika?) sekundarni, ale to je jenom pro zmateni veci). Dokud nemame nejaky rozumny Fdisk na Spectru, musime si disk rozdelit na PC. Ja to udelal a hda1 je dosovska partisna a s hda2 pocitam na HddPatch. Prozatim je HddPatchi uplne jedno, jakou identifikacni znacku partisna ma. Hlavne at to je primarni partisn. To same jsem udelal i s druhym diskem. Jestli chcete mit na disku jenom HddPatch, tak si samozrejme vytvorte jenom jednu partisnu. Jestli toho tam chcete mit vi, tak vic (max. 4 !).

Nyni muzeme pouzit muj nouzovy prohlizec MBR. Problem bude s adresama portu (pouzivam nestandartni). Sezente si bud spravnou verzi, nebo si adresy zmente pomoci devastace (tyka se to instrukci out (xxx),a in a,(xxx) a jednoho ld bc,xxxxx pred inir) No a me se po spusteni vypsalo tohle (opet jen to dulezite):

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

Nyni je potreba si vzpomenout na kterych partisnach jsme chteli ten HddPatch vlastne mit. Uz to mam, na obou discich na tech druhych...

Zacneme tvorit VDT a hezky od adresy 32771 ...
nejdriv 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 ted vlastni disky...

0,0,0,0     (disk 0 - tady je kazetak)
0,0,0,0     (disk 1 - tady je fdd 1)
0,0,0,0     (disk 2 - tady je fdd 2 - hec, mam dve disketovky)

a ted uz je jenom na nas, kam si ktery fyzicky disk naasignujeme do BS-DOSu Zacneme treba hdd_a

112,160,0,0    (disk 3 - hdd_a, zacatek druhe partisny, master, mode 000, read/write)
112,176,0,0    (disk 4 - hdd_a, o 4096 harddiskovych sektoru dal, proste vzdycky prictete ke druhemu cislo 16 dokud se nedostanete pres 255, pak prictete jednicku ke trtimu cislu a pokracujte dokud nevycerpate vsechno volne misto na partisne - 60928/4096 = 14.875 = 14 disku se vleze na tuto partisnu)
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 tim jsme vycerpali celou nasi partisnu na disku hdd_a)

Ted sem naplacame druhy disk. Ten je o dost sikovnejsi - umi LBA mod.

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

az je vsechno hotovo, tak napiste: SAVE "moje1VDT" CODE 32771,1032 a potom jeste tohle...

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

skuste:
@1
CAT
funguje ?
@2
cat
funguje ?
@3
cat
nespadlo to ? ne ?

jestli tohle delate poprve, tak na vas asi vybafne hlaska UNKNOWN FORMAT, ale to je vporadku. Spuste ff17 a zadejte tyto parametry:

drv=ktery disk chcete formatovat ? asi tu trojku, ne ?
hdd=1
trk=127 (hmm, tady by melo byt 128, ale bud je chyba v BS-DOSu, nebo ve formatovaci, ale s touto hodnotou se uz disk nenaformatuje :-(
sec=8

a zvesela formatujte... jde to pomalu, co ? no ale nebrecte, cteni je bajecne rychle. tak to udelejte se vsemi vasimi novymi disky... alespon do te doby, nez na to budou nejake programy...

jestli chcete pouzivat disk, ktery neumi LBA, skuste mod 001. Kdyby vam disk vytuhaval (prestaval reagovat, hlasil TIME OUT), tak prejdete na mod 000.

jestli vam neco nefunguje, a jestli ste si jisti, ze chyba neni na vasi strane, tak se na me obrate nejlepe skrz konferenci speccy@pandora.cz