06.10.2010 21:08

D80 obrazy ve Fuse emulátoru

Fuse emulator v Linuxu nepodporuje mechaniky D80. Je v něm ovšem podpora "všemocného" DivIDE. Divide umožňuje nahrávat různé "firmwary". Mezi nimi je i MDOS3, který by měl umět pracovat s D80 obrazy na HDD. Návody jsou ovšem jako z jiného světa nebo neexistují vůbec. Pro ochutnání DivIDE a MDOS3 doporučuji Velesoftovu stránku divide-mdos3.

První problém je, že FUSE podporuje jako image pro DivIDE pouze HDF. HDF je jakýsi formát, který kdysi vymyslel autor RealSpectrum emulátoru. Jeho popis už ovšem najdete akorát tak ve webarchivu. Stručne:

0x00    "RS-IDE"    ASCII[6]    HDF signature
0x06    0x1A    BYTE    Termination marker
0x07    0x11    BYTE    HDF revision number
Represented in BCD form: 0x11 = v1.1
0x08    -   BYTE    Flags
b0: halved sector data (only LSB of sector words is stored)
b1: ATAPI device (e.g. CDROM)
0x09    DOFS    WORD    Image data offset
This is the absolute offset in the HDF file where the actual hard-disk data dump starts.
In HDF version 1.1 this is 0x216.
0x0B    0x00    BYTE[11]    Reserved (must be set to zero)
0x16    -   WORD[256]   IDE/ATA device identification data
This is the dummy sector information returned by ATA command 0xEC or ATAPI command 0xA1 (see bit 1 of the flags to determine which is the case)
Data are stored in words using the ATA convention (big endian), e.g. ASCII string "Hello!" is stored as "eHll!o"
DOFS    -   -   Raw disk data dump
Tracks are stored in the following order: C0 H0, C0 H1 ... C0 H15, C1 H0, C1 H1 ... 

Jsem si sám přeložil tak, že na začátku HDF je 534 bajtů dlouhá hlavička, která jinak neobsahuje nic zajímavého.

Vytvořit libovolný HDF můžete příkazem createhdf, např.:

createhdf 2 255 63 test.hdf

pro nás ale bude zajímavější příkaz raw2hdf.

Nejdříve ale musíme pochopit co a jak a vytvořit MDOS3 disk se správnou strukturou. To je v zásadě popsáno v howto k MDOS3, prakticky to vypadá takto.

  1. vezmu prázdnou 16MB flash kartu (bohužel se mi nepodařilo nasimulovat celý postup jen pomocí souboru na disku).
  2. fdisk /dev/sdX
    d (smažte všechny oddíly), n (vytvořte jeden nový přes celý disk - p, 1, enter, enter), t (změňte typ na 49 - neznámý), w uložte
  3. na disk /dev/sdX1 naperte bootdisk, freedisk, freedisk -
    cat images/bootdisk images/freedisk images/freedisk > /dev/sdX1
  4. vytvořte HDF image
    dd if=/dev/sdX of=mdos3disk bs=512; raw2hdf mdos3disk mdos3disk.hdf
  5. ve Fuse zvolte Options/Peripherals... vyberte Divide
  6. dále Media/IDE/Divide/Master/Insert a vyberte mdos3disk.hdf
  7. Open... soubor bootloader/bootloader.tap, nechte nahrat bootloader do Divide
  8. vyvolejte NMI (Machine/NMI)
Loading kernel 2.3.2010         OK
Checking devices
 master: Created by raw2hdf
 slave:                         OK
Checking bootable MDOS3 partition FAILED

Searching for first MDOS3 image:hda OK
Reading bootconf

Nahraje se menu s výběrem operačního systému. Zvolte MDOS3 v jedné ze dvou variant. Stroj se zresetuje, po opětovném vyvolání NMI se objeví menu pro výběr obrazů disket, které se mají připojit k mechanikám A-D. Stiskněte např. A, vyberte jako disk hda1, objeví se výběr

bootdisk
freedisk
freedisk

Zvolte bootdisk. Stiskněte Q, v BASICu napiště příkaz RUN.

Pokud chcete dostat na disk místo freedisku disk .D80 musíte v kroku kde se kopíruje obsah na disk /dev/sdX1 modifikovat následovně:

cat images/bootdisk images/infosec.bin images/free.d80 images/free.bin > mdos3disk

místo free.d80 vložte svůj obraz .d80, který musí být 737280B dlouhý.


Ahoj, s HDF a strukturou ve však obtěžovat nemusíš. Mám už připravený HDF s poslední verzí MDOS3:
http://ci5.speccy.cz/news/hdf-image-s-md..

sweet (URL) - 07.03.2011 07:57

Email comment