Jak všichni víte, IDE Face už máme nějaký ten rok, ale jak je to s používáním HDD na Speccy? Jediné, co je zatím takové použitelné je HDD Patch pro MB02+ co spáchal Dr0n. Matrix? Zatím jsem ho viděl jen jednou. Divide? Baze se snaží, snad bude něco nového, ale přenášet data z jednoho HDD na druhý budeme muset asi s kazeťákem.
Tak mě tam napadlo, že kdyby se trošilinku upravil MDOS, tak místo z disket by to mohlo tahat z HDD. Ovšem s velkými omezeními, která jsem si uvědomil hned na začátku a se kterými jsem souhlasil: Data na HDD jsou řazena za sebou, tedy nebude možnost řadit je do adresářů (i když adresáře by se "simulovat" mohly), Stejná velikost jako disketa, jen 4 mechaniky, ruční výběr určité oblasti disku tlačítkem SNAP a disk nesmí mít vadné sektory. Když taková mínus, tak snad by to mohlo mít nějaké plus: celý systém chci udělat tak, aby na něm běžely i starší a staré programy pro D40/80, včetně toho, že by se HDD dal namapovat i jako mechanika A: nebo B:. Pokud s tímto nesouhlasíte, raději nečtěte dále, mohlo by vám být nevolno.
Popis úpravy (doslovný přepis článku ze ZXM, autor: Pavel Říha):
Jak zařízení IDE Face tak i DIVIDE (dále jen budeme mluvit o DIVIDE s otevřeným JP2) rozšíří ZX o 8 portů, registrů IDE disku (popis: Zilog):
Název registru | čtecí/zápis | hodnota dek. | hodnota hex. |
data reg. | R/W | 163 | A3 |
error/status reg. | error=R, status=W | 167 | A7 |
count sec reg. | R/W | 171 | AB |
sector reg. (LBA 0-7) | R/W | 175 | AF |
cylinder low reg. (LBA 8-15) | R/W | 179 | B3 |
cylinder high reg. (LBA 16-23) | R/W | 183 | B7 |
device/head reg. | R/W | 187 | BB |
status/command reg. | status=R, command=W | 191 | BF |
ld hl,DATA ;nastav kde maji byt data ld bc,LBASEC1 ;nastav vyssi bajty LBA sektoru na disku ld de,LBASEC2 ;nastav nizsi bajty LBA sektoru na disku call READ ;precti ret ;a tahni domu READ ;in=bcde LBA sektor ; =hl adresa dat call TST_BSY ;pockame az bude HDD ready jr nz,ERROR ;pokud vyskoci s timeoutem nastav chybu s skonci ld a,b ;nejvyssi bajt LBA sektoru or %11100000 ;bit 7 a 5 nastavit vzdy ;bit 6 nastaven=LBA ;bit 4 urcuje zarizeni master/slave COMMAND out (187),a ;posli do registru ld a,1 ;pocet sektoru jen jeden out (171),a ;opet posli ld a,e ;nejnizsi bajt LBA sektoru out (175),a ld a,d ;nizsi bajt LBA sektoru out (179),a ld a,c ;vyssi bajt LBA sektoru out (183),a ld a,#21 ;prikaz READ out (191),a ;opet posli do registru call TST_DRQ ;cekame az bude HDD schopen posilat/prijimat data jr nz,ERROR ;pokud vyskoci s timeoutem nastav chybu a skonci ld bc,163 ;registr dat c=163 b=256 inir ;prenes 256 bajtu inir ;prenes dalsich 256 bajtu call TST_ERR ;preneslo se bez chyby? jr nz,ERROR ;ne=nastav chybovy kod xor a ;ano=nastav OK ret WRITE ;write funguje stejne az na rozdil v prikazu ;in=bcde LBA sektor ;a smeru toku dat ; =hl adresa dat call TST_BSY jr nz,ERROR ld a,b or %11100000 out (187),a ld a,1 out (171),a ld a,e out (175),a ld a,d out (179),a ld a,c out (183),a ld a,#31 ;prikaz pro zapis out (191),a call TST_DRQ jr nz,ERROR ld bc,163 otir ;zapisujeme do HDD otir call TST_ERR jr nz,ERROR xor a ret ERROR cp 255 ;zarizeni neexistuje jr nz,ERR1 ld a,1 ;nastav 1 ret ERR1 and %01010011 ;uz ani nevim jr z,ERR2 ;hlavni je bit 0 ld a,8 ;ten totiz indikuje error ret ERR2 ld a,128 ret TST_BSY push hl ;cekaci smycka na shozeni push bc ;signalu DEVICE BUSY ld hl,0 ;pocet pruchodu TST1 dec hl ld a,l or h ;sniz pocitadlo jr z,TOUT1 ;konec timeoutu? in a,(191) ;cti status registr ld b,a ;kopiruj jeho stav do B and %10000000 ;vyber jen bit BSY jr nz,TST1 ;stale BUSY? ld a,b pop bc pop hl ret TOUT1 ld a,255 ;nastav:skoncilo v timeoutu or a pop bc pop hl ret TST_DRQ ;test, zda je HDD pripraven na DATA push hl ;opet s pocitadlem timeoutu ld hl,0 TSTDRQ1 dec hl ;sniz pocitadlo ld a,l or h jr z,TDRQ1 ;konec timeoutu in a,(191) ;cti status registr bit 3,a ;testuj DRQ jr z,TSTDRQ1 ;stale neni? xor a ;normalni navrat pop hl ret TDRQ1 ;opet nastav ze HDD neni pripraven ld a,255 or a pop hl ret TST_ERR in a,(191) ;byla chyba? and 1 ret z ;navrat pokud ne in a,(167) ;cti error registr retVíce informací o registrech, příkazech a jejich parametrech najdete třeba na www.t13.org, nebo v tomto PDF (Thanx to Tritol).
Kvůli jednoduchosti jsem si definoval, že MDOS3 bude umět procházet jen v oddílech primárních a pro ně jsem určil ID 49h. Takový oddíl snadno vytvoříte i na PC s Linuxem, nebo s fdiskem, který napsali PVL a Tritol (Thanx). Pak je třeba takový oddíl naformátovat. To můžete udělat s mým MAKEFS (není nic moc, ale snad funguje).
Popis infosektoru:
OFFSET (dekadicky) | popis obsahu |
0-3 | značka DOSu (text: SDOS) |
4-35 | 32 znaků popisu diskety |
36 | WriteProtect ("0"=R/W, "1"=read only) |
37-511 | volné |
Do MDOS3 menu se vleze stiskem NMI (tlačítko SNAP) a stiskem klávesy M (nejprve NMI a pak M). Další navigace v menu se snadná, na obrazovce jsou vypsány možné klávesy. Integrovaný CD player (vývojová verze - 2001 - DTP) spustíte NMI a C. Jeho ovládání je taktéž snadné. Po resetu se zinicializují i drajvy C a D. Po seek resetu (CAPS+reset) se nastavuje na drive A zařízení fd0 a na drive B pak zařízení fd1 (pokud existuje). Máte možnost si ale toto pak změnit. Například do A vložit virtuální disketu (nejprve přemapovat na HDD a pak vybrat) a do B pak zařízení fd0 původně mechanika A:), nebo Áčku dát normálně fd0 a Béčku pak virtuální disketu a Céčku zase fd0, prostě jak je libo. Po návratu z NMI menu se provádí návrat hlav disketových mechanik na začátek disku (kdyby se to nedělalo, čekala by nás hláška Sector not found) a ještě nějaká nastavení, kdy se drajvům, které jsou mapované na HDD, nastavují parametry mechaniky na 94 stop.
Změna mapování se provádí klávesami 1 až 4. Klávesa 1 je pro mapování logické mechaniky A:, klávesa 2 je pro mapování logické mechaniky B:, klávesa 3 pak pro C: a klávesa 4 pro D:. Logickou mechanikou se rozumí ta mechaniky, s níž se pak budete pracovat (třeba si představte MOVE "d:". Po stisku klávesy si můžete vybrat mapování na : fd0 (fyzická mechanika A:), fd1 (fyzická mechanika B:) a HDD (virtální image). Výběr harddiskových image se provádí klávesami A,B,C a D. Klávesa A náleží pro image, který bude vložen do logické mechaniky A: a analogicky je to i s ostatními klávesami. Klávesou W si vybíráte aktuální oddíl. Na tomto oddílu budou vyhledávány image. Pokud je již oddíl vybrán a chcete použít jiný oddíl a založit image do mechaniky, musíte změnit aktuální oddíl a image vybrat. Po stisku klávesy A-D, si vyberte vstupní masku pro vyhledání image. Pokud ale ještě není vybrán oddíl, nejprve si jej musíte vybrat a pak zadat masku. V masce je možno použít hvězdičkovou i otazníkouvou konvenci. Na velikost písma se nebere ohled, tedy můžete zadat jak malá písmena, tak velká a bude to jedno. Narozdíl od MDOSu hvězdička značí i žádný znak. Po odENTERování se na konec zapsané masky ještě doplní hvězdička, takže na posledním místě hvězdičku psát nemusíte. Pokud tedy na dotaz Mask: jen odešlete prázdný řetězec, budou se vyhledávat všechny image. Příklad: Mask: s znamená, že se vyhledají všechny image, které začínají písmenem S. Mask: *07 pak znamená, že se vyhledají všechny image, které mají v názvu řetězec 07 (třeba: system07). Nalezené image se vypíší na obrazovku po dvaceti a kurzorovými klávesami (vlevo, pravo = o stránku vpřed, vzad) si vyberte a mačkejte ENTER.
Další fičurka, která není v MDOS NMI MENU dlouho je vyhledávání souborů. Klávesa F slouží k vyhledání souboru nezávisle na velikost písma a kombinace kláves CS+F pak vyhlává porovnáváním i velikosti písmen. I v tomto vyhledávání funguje hvězdičková a otazníková konvence, ale na konec zadaného výrazu se hvězdička nedoplňuje. Řetězec se zadává jako "jméno.přípona", pokud příponu nezadáte bude se hledat soubor s jakoukoliv příponou. Přípona se v zadaném textu vyhledává jako první znak za poslední tečkou, tedy pokud potřebujete vyhledat soubor, který obsahuje tečku, je lepší to zadat asi takto: "jmeno.souboru.?". Prostě aby tam byla druhá tečka a přípona (alespoň otazník). Na obrazovku se opět po dvaceti (tento postup je shodný s výběrem image podle jeho názvu). Po výběru si pak ještě musíte vybrat do jaké mechaniky tento image založíte. Během vyhledávání souborů se na obrazovce objevuje jméno image, ve kterém se momentálně vyhledává.
Průběhy hledání (jak podle jména, tak podle souboru) lze přerušit stiskem BREAK (CS+SPACE) a vstupy od uživatele pak klávesou EDIT (CS+1). Návrat do programu, který byl přerušen klávesou Q. Provede se návrat hlav fyzických mechanik na začátek disku. Border zůstane nastaven černý (bohužel to jinak nejde). Nutno podotknout, že ne vždy může být návrat bezpečný.
Od 23.8.2003 je v MDOS3 Disk Menu i moznost vyjet si katalog diskety. Když si vybíráte mezi nepřeberným množstvím virtálních disket a stisknete C, tak vám na disketě, kde právě stál kuzor vyjede seznam souborů (jako u příkazu CAT). V tomto CATu se dozvíte jméno disku, počet souborů a volné místo. U každého souboru jsou vypsány kompletní informace, tedy: délka, počáteční adresa, délka BASICu bez proměnných a atributy souboru. Skryté soubory se nelogicky vypisují.
Od 26.12.2003 při výběru oddílu se vám nabídne celý disk a po potvrzení výběru se najde první virualní image (hledání je zobrazeno a je možné je BREAKnout) na celém disku bez ohledu na nějaké oddíly a filesystémy. Takto je možné naformátovat disk na FAT32 a vyrobit velký soubor a ten do takového oddílu nakopírovat. Výhodu to může mít v tom, že lze jednoduše zálohovat a to tak, že se zkopíruje na PeCi celý soubor. Jediná podmínka je taková, že soubor nesmí být fragmentován.
Když nebudeme uvažovat od programu MAKEFS, který je vysloveně důležitý, máme první program: DISK2HDD. Tento program zjednodušší kopírování disket na harddisk. Stačí vybrat mechaniku a první image a pak jen vyměňovat diskety. Program kopíruje diskety po sektorech a pak jen změní FATku pro formát 94*2. Prográmek má vlastní ošetření chyb, takže když narazíte na disketu s vadnými sektory, program neskončí, ale přeskočí image a jede na další disketu.
Úpravy MDOSu jsem dělal tak, aby co nejvíce programů pro D80 bylo kompatibilních. Něž jste se někdo něco dozvěděli, udělal jsem pár rutinek na čtení a zápis sektoru a vyzkoušel, jak se budou chovat staré a nové programy. Většina programů ani nepoznala, že má tu čest, číst data z hadru. Když jsem viděl, jak je to sqělé a rychlé, byl jsem nadšen. Za dva měsíce jsem k tomu dopsal zbytek a vznikla tak první provozuschopná verze. Několik vad na kráse to však má. Několik programů, které se s tím nevypořádají a taky to, že NMI (původně SNAP) čudlík se taky nedá zmačknout kdykoliv, ale jen když není přistránkovaná ROM D80.
Nekopatibilní programy: EImanager, EIformat, Kmanazer,
Pokud někdo narazíte na nekompatibilní program, dejte mi, prosím, vědět. Zařadít je do tohoto blacklistu
POZOR: formátování virtuálních disket je možné nejen z Basicu (zkoušeno na MFC a TOOLS128), ale přesto doporučuji spíše ten Basic.
Lze použít MDOS3 pro D80 s MDOSem2? Tam, kde je MDOS2 je i jiný řadič mechaniky a tudíž i jiné rutiny, takže tak, jak je teď napsán ne. Patch si musíte upravit pro tento MDOS. Patrně nejlepší řešení je vzít D40 PLV 21 ROM a v něm předělat rutiny pro váš řadič (použít je z MDOS2). Pokud ale nepotřebujete zapisovat na disketu, můžete si MDOS3 nahrát do SRAM zmíněným programem BOOT2. Pak pojede HDD ale disketa ne. Nemůžete po mě chtít abych dělal podporu i pro MDOS2, protože ho prostě nemám.
Škoda, že úprava nejde udělat na Kompaktu. Kompakt má 32KB EPROM, v jedné polovině je ZX ROM a v druhé pak MDOS. Přestránkováním do MDOSu se poze aktivuje jeho druhá polovina signálem A14. Úpravu musíte ještě vylepšit o to, že když bude nastránkována ZX ROM, musí být EPROM aktivní. Pokud nastránkuje MDOS, musí zafungovat úprava a správně vybrat tu SRAM podle outu. Ale to všechno je jen můj dojem.
MDOS3 | Zdroják patche MDOS3 pro PVL ROM D80 |
BOOT | Prográmek pro nahrání PVL ROMky do D80 |
BOOT2 | Prográmek pro nahrátí SRAM v D80 z diskety |
SAVE | Program pro uložení obsahu SRAM na disketu |
DISK2HDD v TAP | DISK2HDD v TAP verzi |
DISK2HDD v D80 | DISK2HDD v D80 verzi |
ALL | Programy BOOT, BOOT2, SAVE a taky DISK2HDD pohromadě |
ATA3.PDF | popis specifikace ATA3 |
FDISK | FDISK pro speccy |
MAKEFS | Program pro formátováni MDOS3 oddílů |
D40 PVL 21 | MDOS1 upravený v PVL a Tritolem |
Dizzy, Tritol, PVL za skvělou úpravu D80,CDPlayer a hlavně za HDD u Speccy, Zilog za divIDE, Baze za pomoc s konverzí LBA na CHS, Dron (aniz bych ho kontaktoval) za ukázky práce s HDD, Hood a Shrek za moral support, TAU za CF, sir Sinclair za skvělý stroj a lidi na které jsem zapoměl.
malá ukázka: snímečky NMI menu v jednom stadiu vývoje.