FreeDOSでBIOSアップデートしてみる

BIOSのupdateにDOS起動が必要とか、いまどき前時代な感じがしますよ。
でも、TX-50のBIOSをアップデートするのには、そういう環境がいるのだよね。
いまさらDOSとかないし。
いや、あるけどFDDなんてもう読めないのじゃ?
Windowsから作るのもなんだし、FreeDOSでやってみることにした。
USB FloppyDIskとかないので、こちらもUSBメモリから起動することにする。


まずは、syslinux入れる。

# apt-get install syslinux
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libcrypt-passwdmd5-perl libdigest-sha1-perl syslinux-common
Suggested packages:
  dosfstools mtools
The following NEW packages will be installed:
  libcrypt-passwdmd5-perl libdigest-sha1-perl syslinux syslinux-common
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 1401 kB of archives.
After this operation, 3883 kB of additional disk space will be used.
Do you want to continue [Y/n]? 
Get:1 http://ftp.jp.debian.org/debian/ squeeze/main libcrypt-passwdmd5-perl all 1.3-9 [10.3 kB]
Get:2 http://ftp.jp.debian.org/debian/ squeeze/main libdigest-sha1-perl amd64 2.13-1 [26.5 kB]
Get:3 http://ftp.jp.debian.org/debian/ squeeze/main syslinux-common all 2:4.02+dfsg-7 [1271 kB]
Get:4 http://ftp.jp.debian.org/debian/ squeeze/main syslinux amd64 2:4.02+dfsg-7 [93.3 kB]
Fetched 1401 kB in 15s (88.7 kB/s)                                             
Selecting previously deselected package libcrypt-passwdmd5-perl.
(Reading database ... 26751 files and directories currently installed.)
Unpacking libcrypt-passwdmd5-perl (from .../libcrypt-passwdmd5-perl_1.3-9_all.deb) ...
Selecting previously deselected package libdigest-sha1-perl.
Unpacking libdigest-sha1-perl (from .../libdigest-sha1-perl_2.13-1_amd64.deb) ...
Selecting previously deselected package syslinux-common.
Unpacking syslinux-common (from .../syslinux-common_2%3a4.02+dfsg-7_all.deb) ...
Selecting previously deselected package syslinux.
Unpacking syslinux (from .../syslinux_2%3a4.02+dfsg-7_amd64.deb) ...
Processing triggers for man-db ...
Setting up libcrypt-passwdmd5-perl (1.3-9) ...
Setting up libdigest-sha1-perl (2.13-1) ...
Setting up syslinux-common (2:4.02+dfsg-7) ...
Setting up syslinux (2:4.02+dfsg-7) ...


USBメモリか...
とりあえず32MB(!)と書いてあるのが転がっているので、これでいいか。
sdcとして認識された。
パーティションはこんなの。

# fdisk -l /dev/sdc

Disk /dev/sdc: 31 MB, 31571968 bytes
129 heads, 41 sectors/track, 11 cylinders
Units = cylinders of 5289 * 512 = 2707968 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *           1          12       30811+   4  FAT16 <32M
Partition 1 has different physical/logical endings:
     phys=(10, 128, 41) logical=(11, 84, 41)

めんどくさいのでパーティション切り直して、再フォーマットする。
ついでにMBRもクリーンに再構築。

# dd if=/dev/zero of=/dev/sdc bs=1024 count=1
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 0.0150349 s, 68.1 kB/s

きれいになった。

# fdisk -l /dev/sdc

Disk /dev/sdc: 31 MB, 31571968 bytes
1 heads, 61 sectors/track, 1010 cylinders
Units = cylinders of 61 * 512 = 31232 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdc doesn't contain a valid partition table

mbrを安全に実行するのにliloを使う。ダウンロードとインストール。

# apt-get install lilo
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  mbr
Suggested packages:
  lilo-doc
The following NEW packages will be installed:
  lilo mbr
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 428 kB of archives.
After this operation, 1368 kB of additional disk space will be used.
Do you want to continue [Y/n]? 
Get:1 http://ftp.jp.debian.org/debian/ squeeze/main mbr amd64 1.1.10-2 [23.6 kB]
Get:2 http://ftp.jp.debian.org/debian/ squeeze/main lilo amd64 1:22.8-10 [405 kB]
Fetched 428 kB in 5s (83.0 kB/s)
Preconfiguring packages ...
Selecting previously deselected package mbr.
(Reading database ... 27014 files and directories currently installed.)
Unpacking mbr (from .../mbr_1.1.10-2_amd64.deb) ...
Selecting previously deselected package lilo.
Unpacking lilo (from .../lilo_1%3a22.8-10_amd64.deb) ...
Processing triggers for man-db ...
Setting up mbr (1.1.10-2) ...
Setting up lilo (1:22.8-10) ...

クリーンなMRRを書き込み。

# lilo -M /dev/sdc mbr
Backup copy of /dev/sdc in /boot/boot.0820
The Master Boot Record of  /dev/sdc  has been updated.

パーティションを1つ作成。

# fdisk /dev/sdc

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (2-1010, default 2): 
Using default value 2
Last cylinder, +cylinders or +size{K,M,G} (2-1010, default 1010): 
Using default value 1010

Command (m for help): a
Partition number (1-4): 1

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): c
Changed system type of partition 1 to c (W95 FAT32 (LBA))

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.

確認。

# fdisk -l /dev/sdc

Disk /dev/sdc: 31 MB, 31571968 bytes
1 heads, 61 sectors/track, 1010 cylinders
Units = cylinders of 61 * 512 = 31232 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x19391b1e

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *           2        1010       30774+   c  W95 FAT32 (LBA)

FATでフォーマット。
dosfstoolsも入ってない(^^;。

# apt-get install dosfstools
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  dosfstools
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 92.2 kB of archives.
After this operation, 197 kB of additional disk space will be used.
Get:1 http://ftp.jp.debian.org/debian/ squeeze/main dosfstools amd64 3.0.9-1 [92.2 kB]
Fetched 92.2 kB in 3s (26.4 kB/s)     
Selecting previously deselected package dosfstools.
(Reading database ... 27079 files and directories currently installed.)
Unpacking dosfstools (from .../dosfstools_3.0.9-1_amd64.deb) ...
Processing triggers for man-db ...
Setting up dosfstools (3.0.9-1) ...

フォーマット。

# mkfs.vfat /dev/sdc1
mkfs.vfat 3.0.9 (31 Jan 2010)

syslinuxをインストール。

# syslinux -m /dev/sdc1
sh: mcopy: not found
syslinux: failed to create ldlinux.sys

あれ? mtoolsがないのか。

# apt-get install mtools
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  floppyd
The following NEW packages will be installed:
  mtools
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 188 kB of archives.
After this operation, 418 kB of additional disk space will be used.
Get:1 http://ftp.jp.debian.org/debian/ squeeze/main mtools amd64 4.0.12-1 [188 kB]
Fetched 188 kB in 2s (85.5 kB/s) 
Selecting previously deselected package mtools.
(Reading database ... 27105 files and directories currently installed.)
Unpacking mtools (from .../mtools_4.0.12-1_amd64.deb) ...
Processing triggers for man-db ...
Processing triggers for install-info ...
Setting up mtools (4.0.12-1) ...

再度。

# syslinux -m /dev/sdc1

マウントしてみる。

# mount /dev/sdc1 /mnt/    
# cat /proc/mounts | grep /mnt
/dev/sdc1 /mnt vfat rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=utf8,shortname=mixed,errors=remount-ro 0 0
# ls -la /mnt
total 52
drwxr-xr-x  2 root root 16384 Jan  1  1970 .
drwxr-xr-x 21 root root  4096 May 13 17:11 ..
-r-xr-xr-x  1 root root 32768 Jul 30  2011 ldlinux.sys


FreeDOSを落とす。8Mのisoが最小のだな。

# wget wget ftp://ftp.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.0/fdbasecd.iso

md5sumの確認。

# md5sum fdbasecd.iso 
c9bfcf2d08dbe8bdb1fe95fb339e0b2b  fdbasecd.iso

マウントしてみる。

# mount -o loop fdbasecd.iso /media/cdrom

なんかいろいろアーカイブされているのねぇ。
knoppixの残骸が設定にいっぱい。
とりあえず、必要なのは、kernel.sysとcommnad.comだけ。

# cp /media/cdrom/freedos/packages/base/sysx.zip freedos/
# cp /media/cdrom/freedos/packages/base/commandx.zip freedos/

展開。

# unzip -L freedos/sysx.zip -d freedos
Archive:  freedos/sysx.zip
  inflating: freedos/appinfo/country.lsm  
  inflating: freedos/appinfo/fdkernel.lsm  
  inflating: freedos/appinfo/sys.lsm  
  inflating: freedos/bin/country.sys  
  inflating: freedos/bin/kernel.sys  
  inflating: freedos/bin/kernel16.sys  
  inflating: freedos/bin/kernel32.sys  
  inflating: freedos/bin/krnlupdt.bat  
  inflating: freedos/bin/sys.com     
  inflating: freedos/bin/winkern.sys  
  inflating: freedos/config.sys      
   creating: freedos/doc/kernel/
  inflating: freedos/doc/kernel/bugs.txt  
  inflating: freedos/doc/kernel/build.txt  
  inflating: freedos/doc/kernel/config.txt  
  inflating: freedos/doc/kernel/contrib.txt  
  inflating: freedos/doc/kernel/history.txt  
  inflating: freedos/doc/kernel/intfns.txt  
  inflating: freedos/doc/kernel/lfnapi.txt  
  inflating: freedos/doc/kernel/mkboot.txt  
  inflating: freedos/doc/kernel/nls.txt  
  inflating: freedos/doc/kernel/readme.cvs  
  inflating: freedos/doc/kernel/readme.txt  
  inflating: freedos/doc/kernel/sys.txt  
  inflating: freedos/help/sys.en     
   creating: freedos/packages/sysx/
  inflating: freedos/packages/sysx/remove.bat  

# unzip -L freedos/commandx.zip -d freedos
Archive:  freedos/commandx.zip
   creating: freedos/appinfo/
  inflating: freedos/appinfo/command.lsm  
   creating: freedos/bin/
  inflating: freedos/bin/command.com  
  inflating: freedos/bin/fdcom.ico   
   creating: freedos/doc/
   creating: freedos/doc/freecom/
  inflating: freedos/doc/freecom/cmd.html  
  inflating: freedos/doc/freecom/file_id.diz  
  inflating: freedos/doc/freecom/freecom.html  
  inflating: freedos/doc/freecom/k-swap.txt  
  inflating: freedos/doc/freecom/read1st.txt  
  inflating: freedos/doc/freecom/readme.txt  
 extracting: freedos/doc/freecom/version.txt  
  inflating: freedos/doc/freecom/vspawn.txt  
   creating: freedos/help/
 extracting: freedos/help/command.en  
  inflating: freedos/help/freecom.en  
   creating: freedos/nls/
  inflating: freedos/nls/cmd-de.com  
  inflating: freedos/nls/cmd-en.com  
  inflating: freedos/nls/cmd-es.com  
  inflating: freedos/nls/cmd-fr.com  
  inflating: freedos/nls/cmd-it.com  
  inflating: freedos/nls/cmd-nl.com  
  inflating: freedos/nls/cmd-pl.com  
  inflating: freedos/nls/cmd-pt.com  
  inflating: freedos/nls/cmd-ru.com  
  inflating: freedos/nls/cmd-sv.com  
  inflating: freedos/nls/cmd-ua.com  
  inflating: freedos/nls/cmd-yu.com  
  inflating: freedos/nls/cmd-yu43.com  
  inflating: freedos/nls/makecmd.bat  
   creating: freedos/packages/
   creating: freedos/packages/commandx/

# cp freedos/bin/kernel.sys /mnt/            
# cp freedos/bin/command.com /mnt/

これだけでは起動できない。
チェーンローダー経由で起動するのに入れる。

# dpkg -L syslinux-common | grep chain.c32
/usr/lib/syslinux/chain.c32
# cp /usr/lib/syslinux/chain.c32 /mnt/
# vi /mnt/syslinux.cfg
default freedos
prompt 1
timeout 30
label freedos
kernel chain.c32
append freedos=/kernel.sys

こんでどを?
よし、出来た。
起動を確認。
安全な運用のためには、autoexec.batを作ったほうがいいけど、めんどくさいからやらない。


BIOSのexeをUSBメモリにコピー。
TX-50にこのUSBメモリを挿して起動すると、USBメモリ側から起動してきた。
DOSプロンプトになる。
日付と時間入れるとか、なつかしーねー。入れないけど。
実行すると、アップデータが起動、書き換え後に自分で再起動した。
BIOS画面からは、バージョンの確認はできない。
VGAなしで起動してみた。
とりあえず、NICさしたら通信しているようなので、起動している模様。