🦠
FreeDOS環境でお勉強するときの環境構築例
はじめに
FreeDOS環境をVirtual BOX上で動かして
いろいろお勉強しているのですが、何かと不便なことがあります。
私が使用したい環境は以下。
- コードの編集をVSCodeで行いたい。
- で、修正した結果をFreeDOS上でビルドしたい。
- ビルドしたときのコマンドライン上に出力されたログ(例:コンパイルエラー出力)をコピーして、貼り付けしたい(例 : Zennの記事に貼り付けたい)
作った環境
作った環境は以下。
Ubuntu上でQemu+FreeDOS環境を動かすようにしました。
┌────────────────────────────────────────────┐
│ Virtual Box │
│ ┌────────────────────────────────────────┐ │
│ │ Ubuntu │ │
│ │ │ │
│ │ ┌──────────────────────────────────┐ │ │
│ │ │ Qemu │ │ │
│ │ │ ┌──────────────────┐ │ │ │
│ │ │ │ FreeDOS │ │ │ │
│ │ │ └──────────────────┘ │ │ │
│ │ └──────────────────────────────────┘ │ │
│ │ │ │
│ └────────────────────────────────────────┘ │
│ │
└────────────────────────────────────────────┘
FreeDOSのインストール
参考にしたページは以下
FreeDOSのイメージファイルのマウント
インストールしたFreeDOSイメージファイル(ここではtiny.imgというファイル名)を
マウントします。
sudo mount -t msdos -o loop,offset=32256,uid=$(id -u),gid=$(id -g) tiny.img mnt
参考にしたサイトは以下。
これでLinux上からFreeDOSをインストールしたイメージにアクセス出来ます。
ここではmount コマンドの引数に指定した mnt
ディレクトリ内に
FreeDOS環境が見えるようになります。
$ ls mnt/
apps command.com fdconfig.sys kernel.sys pgme
blocek fdauto.bat fdos games net util
FreeDOSの起動
以下の引数でqemuを実行します。
qemu-system-i386 -nographic -curses -m 32 -hda tiny.img -boot order=c
ちょっと表示は崩れますが、ターミナル上に出力されます。
普通にスクロールバーを上に戻せば出力内容を見れます。
出力例は以下(一部空白行を削除しています。)
SeaBIOS (version 1.13.0-1ubuntu1.1
SeaBIOS (version 1.13.0-1ubuntu1.1)
)
iPXE (http://ipxe.org) 00:03.0 CA00 PCI2.10 Pn0
FreeDOS kerneel 2042 (build 2042 OEM:0xfd) [compiled May 11 2016]
Kernel compatibility 7.10 - WATCOMC - FAT32 support
Booting from Hard Disk...
(C) Copyright 1995-2012 Pasquale J. Villani and The FreeDOS Project.iled May 1]
All Rights Reserved. This is free software and comes with ABSOLUTELY NO
WARRANTY; you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation;
either version 2,, or (at your option) any later version.
- InitDiskWARNING: using suspect partition Pri:1 FS 0b: with calculated values
261-254-63 instead of 262-254-63
C: HD1, Pri[ 1], CHS= 0--1-1, start= 0 MB, size= 2055 MB FS 0b: with cas
WARNING: using suspect partition Ext:1 FS 0b: with calculated values 521-254-63
instead of 5222-254-63t= 0 MB, size= 2055 MB
D: HD1, Ext[ 1], CHS= 262-1-1, start= 2055 MB, size= 2039 MB254-63
B
1 - Load FreeDOS with JEMMEX, no EMS (most UMBs), max RAM freee
e
)2 - Load FreeDOS with JEMM386 (Expanded Memory 2 - Load FreeDOS with JEMM386 ()
4 - Load Free4 - Load FreeeDOS without drivers (Emergency Mode)
DOS without drivers (Emergency Mode)ers (Safe Mode)
Select from Menu [1234], or press [ENTER] (Selection=1) - 4
1 - Load FreeDOS with JEMMEX, no EMS (most UMBs), max RAM free
JemmEJemmExx v5.79 [02/02/20]
JemmEx loadedv5.79 [02/02/20]
d
Aernel: allocated 45 Diskbuffers = 23940 Bytes in HMKernel: allocated 45 DiskbuA
FreeCom ver]
]reeCom version 0.84-pre7 - WATCOMC - XMS_Swap [Dec 29 2019 15:32:39
C:\FDOSBINKEYBOARD.SYS: Specified file could not be opened.2.0
CuteMouse v2.
Installed at PS/2 portFreeDOS]
UDVD2, 3-05-2015. CD/DVD name is FDCD0001.
BAD Controller at I-O address C040h, Chip I.D. 80867010h.
Modules using memory below 1 MB:
CD0: IDE0 Secondary-master, QEMU DVD-ROM, PIO.
Name Total Conventional Upper M
-------- ---------------- ---------------- ----------------
SYSTEM 16,976 (17K) 10,672 (10K) 6,304 (6K)
COMMAND 3,376 (3K) 0 (0K) 3,376 (3K)
FDAPM 928 (1K) 0 (0K) 928 (1K)
CTMOUSE 3,104 (3K) 0 (0K) 3,104 (3K)
SHSUCDX 11,024 (11K) 0 (0K) 11,024 (11K)
UDVD2 1,984 (2K) 0 (0K) 1,984 (2K)
Free 722,544 (706K) 643,264 (628K) 79,280 (77K)
Drives Assigned
Drive Driver Unit
E: FDCD0001 0
2 drive(s) available.
Done processing startup files C:\FDCONFIG.SYS and C:\FDAUTO.BAT
Type HELP to get support on commands and navigation.
Welcome to the FreeDOS 1.3-RC4 operating system (http://www.freedos.org)
C:\>
Linux上で修正した環境を反映
たとえば、先程マウントしたイメージを変更(例Linux上からファイルを修正)した場合、
FreeDOS環境に反映するには一度FreeDOSをシャットダウンして
再度qemuを実行します。
まず、 FreeDOS上でshutdown
コマンドを入力し、FreeDOSをシャットダウンします。
C:\>shutdown
Performing action: POWEROFF
Turning OFF system...
Calling int28 so MSCLIENT can flush...
Resetting DOS filesystem and BIOS disk handler..H.done.
Giving disk handlers some time... Spinning down.....
$
その後、再度qemuを実行します。
qemu-system-i386 -nographic -curses -m 32 -hda tiny.img -boot order=c
(ここが一番嫌。即時反映できないかな)
まとめ
最初、Windows環境で似たようなことをやろうとしていたのですが、
Windows側でイメージファイルをマウントすると、qemuの実行ができませんでした。
だめもとでLinux環境でやったらできたので今回の記事を書いた次第です。
Discussion