VM上で動かしているFreeDOSの出力をホスト側にコピーしたい
やりたいこと
FreeDOSをVirtualbox上で動かして勉強して(遊んで)います。
少し不便なのが、出力されたテキストをコピーできないことです。
例えばですが、起動直後は以下のように出力されるのですが、
この出力(テキスト)をコピーできない。
これをコピーする方法をこれから記載します。
FreeDOSのVirtualBoxへのインストールについては以下が参考になります。
qemuを使う
qemuを使います。
今回はhttps://qemu.weilnetz.de/w64/qemu-w64-setup-20210825.exe
を使用しました。
イメージファイルの変換
Virtualboxでは*.vhdというフォーマットのイメージファイルを使用していました。
VBoxManage.exe
を使用して、*.imgのフォーマットに変換します。
コマンドは以下。
VBoxManage.exe clonehd FreeDOS1.vhd freedos.img --format RAW
Windows Terminalのインストール
Windows Terminalをインストールします。
qemuの起動
以下のようにして、qemuを起動します。ポイントは-nographic
を指定することです。
公式のドキュメントはこのあたりでしょうか。
qemu-system-i386.exe -nographic -m 32 freedos.img -boot order=c
これでFreeDOSの出力がTerminal上に出ます。
普通に選択出来ます。
(普通に画面のスクロールも出来ます。)
まとめ
Virtualboxが使い慣れているので
なんとか、Virtualboxだけで済ます方法を探してみましたが、
なかなかいい方法が見つかりませんでした。
qemuの-nographic
オプションが使えることがわかり、今回この記事を書いてみました。
bochsも使ってみたのですが、
こちらでもFreeDOSの出力をテキストでコピーは出来たのですが、
画面のスクロールが出来ませんでした(やり方があるのかも知れませんがわかりませんでした)
おまけ
Helloを出力するだけのcプログラムを
i16gccで
-v
オプションをつけてビルドしたときのログをいかに書きます(コピペ)。
C:\>more hello.c
#include <stdio.h>
int main(void)
{
printf("hello\n");
return 0;
}
C:\>i16gcc -v -o hello.com hello.c
Using built-in specs.
COLLECT_GCC=c:/gcc/devel/i16gnu/bin/i16gcc.exe
Target: ia16-elf
Configured with: ../gcc-ia16/configure --host=i586-pc-msdosdjgpp --target=ia16-e
lf --program-prefix=i16 --with-gcc-major-version-only --prefix=/home/user/.local
/build-ia16/prefix-djgpp --datadir=/home/user/.local/build-ia16/prefix-djgpp/ia1
6-elf --infodir=/home/user/.local/build-ia16/prefix-djgpp/ia16-elf/info --locale
dir=/home/user/.local/build-ia16/prefix-djgpp/ia16-elf/locale --enable-libssp --
disable-libquadmath --disable-nls --disable-plugin --disable-lto --enable-langua
ges=c --with-gmp=/home/user/.local/build-ia16/prefix-djgpp-prereqs --with-mpfr=/
home/user/.local/build-ia16/prefix-djgpp-prereqs --with-mpc=/home/user/.local/bu
ild-ia16/prefix-djgpp-prereqs --with-isl=/home/user/.local/build-ia16/prefix-djg
pp-prereqs
Thread model: single
gcc version 6.3.0 (GCC)
COLLECT_GCC_OPTIONS='-v' '-o' 'hello.com'
c:/gcc/devel/i16gnu/bin/../libexec/gcc/ia16-elf/6/cc1.exe -quiet -v -iprefix c:
/gcc/devel/i16gnu/bin/../lib/gcc/ia16-elf/6/ hello.c -quiet -dumpbase hello.c -a
uxbase hello -version -o c:/gcc/devel/djgpp/tmp/ccWAmkKl.s
GNU C11 (GCC) version 6.3.0 (ia16-elf)
compiled by GNU C version 7.2.0, GMP version 6.1.2, MPFR version 3.1.5,
MPC version 1.0.3, isl version 0.15
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
ignoring duplicate directory "c:/gcc/devel/i16gnu/lib/gcc/../../lib/gcc/ia16-elf
/6/include"
ignoring duplicate directory "c:/gcc/devel/i16gnu/lib/gcc/../../lib/gcc/ia16-elf
/6/include-fixed"
ignoring duplicate directory "c:/gcc/devel/i16gnu/lib/gcc/../../lib/gcc/ia16-elf
/6/../../../../ia16-elf/sys-include"
ignoring duplicate directory "c:/gcc/devel/i16gnu/lib/gcc/../../lib/gcc/ia16-elf
/6/../../../../ia16-elf/include"
#include "..." search starts here:
#include <...> search starts here:
c:/gcc/devel/i16gnu/bin/../lib/gcc/ia16-elf/6/include
c:/gcc/devel/i16gnu/bin/../lib/gcc/ia16-elf/6/include-fixed
c:/gcc/devel/i16gnu/bin/../lib/gcc/ia16-elf/6/../../../../ia16-elf/sys-include
c:/gcc/devel/i16gnu/bin/../lib/gcc/ia16-elf/6/../../../../ia16-elf/include
End of search list.
GNU C11 (GCC) version 6.3.0 (ia16-elf)
compiled by GNU C version 7.2.0, GMP version 6.1.2, MPFR version 3.1.5,
MPC version 1.0.3, isl version 0.15
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
Compiler executable checksum: f1b48dea6d1e973dcf146c614a797f6c
COLLECT_GCC_OPTIONS='-v' '-o' 'hello.com'
c:/gcc/devel/i16gnu/bin/../lib/gcc/ia16-elf/6/../../../../ia16-elf/bin/as.exe -
o c:/gcc/devel/djgpp/tmp/ccBXvHtt.o c:/gcc/devel/djgpp/tmp/ccWAmkKl.s
COMPILER_PATH=c:/gcc/devel/i16gnu/bin/../libexec/gcc/ia16-elf/6/;c:/gcc/devel/i1
6gnu/bin/../libexec/gcc/;c:/gcc/devel/i16gnu/bin/../lib/gcc/ia16-elf/6/../../../
../ia16-elf/bin/
LIBRARY_PATH=c:/gcc/devel/i16gnu/bin/../lib/gcc/ia16-elf/6/;c:/gcc/devel/i16gnu/
bin/../lib/gcc/;c:/gcc/devel/i16gnu/bin/../lib/gcc/ia16-elf/6/../../../../ia16-e
lf/lib/
COLLECT_GCC_OPTIONS='-v' '-o' 'hello.com'
c:/gcc/devel/i16gnu/bin/../libexec/gcc/ia16-elf/6/collect2.exe -o hello.com -Lc
:/gcc/devel/i16gnu/bin/../lib/gcc/ia16-elf/6 -Lc:/gcc/devel/i16gnu/bin/../lib/gc
c -Lc:/gcc/devel/i16gnu/bin/../lib/gcc/ia16-elf/6/../../../../ia16-elf/lib c:/gc
c/devel/djgpp/tmp/ccBXvHtt.o -lgcc --script c:/gcc/devel/i16gnu/bin/../lib/gcc/i
a16-elf/6/../../../../ia16-elf/lib/dos-mtsl.ld -lgcc
COLLECT_GCC_OPTIONS='-v' '-o' 'hello.com'
C:\>hello.com
hello
Discussion