🦠

FreeDOS環境でお勉強するときの環境構築例

2021/11/21に公開

はじめに

FreeDOS環境をVirtual BOX上で動かして
いろいろお勉強しているのですが、何かと不便なことがあります。

私が使用したい環境は以下。

  • コードの編集をVSCodeで行いたい。
  • で、修正した結果をFreeDOS上でビルドしたい。
  • ビルドしたときのコマンドライン上に出力されたログ(例:コンパイルエラー出力)をコピーして、貼り付けしたい(例 : Zennの記事に貼り付けたい)

作った環境

作った環境は以下。
Ubuntu上でQemu+FreeDOS環境を動かすようにしました。

┌────────────────────────────────────────────┐
│ Virtual Box                                │
│ ┌────────────────────────────────────────┐ │
│ │ Ubuntu                                 │ │
│ │                                        │ │
│ │  ┌──────────────────────────────────┐  │ │
│ │  │ Qemu                             │  │ │
│ │  │     ┌──────────────────┐         │  │ │
│ │  │     │  FreeDOS         │         │  │ │
│ │  │     └──────────────────┘         │  │ │
│ │  └──────────────────────────────────┘  │ │
│ │                                        │ │
│ └────────────────────────────────────────┘ │
│                                            │
└────────────────────────────────────────────┘

FreeDOSのインストール

参考にしたページは以下
https://opensource.com/article/21/6/freedos-embedded-system

FreeDOSのイメージファイルのマウント

インストールしたFreeDOSイメージファイル(ここではtiny.imgというファイル名)を
マウントします。

sudo mount -t msdos -o loop,offset=32256,uid=$(id -u),gid=$(id -g) tiny.img mnt

参考にしたサイトは以下。

https://www.linuxquestions.org/questions/linux-software-2/how-to-mount-dos-img-file-4175430554/

これで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