🎨

FreeDOS上でFreeDOS kernelをビルド

2021/12/11に公開

はじめに

FreeDOS上でFreeDOS kernelをビルドする方法を書きます。

基本的にコード内に含まれるドキュメント通りに
すればよいのですが、一部(?)嵌ったところがあったので対処方法(※)を記載します。

※ベストな方法かは謎

ここに書く結果はVirtual Box上での動作の結果です。

FreeDOS kernelのビルド

コードの取得をします。現時点の最新はversion 2.43のようです。

$ git clone https://github.com/FDOS/kernel.git fdk
$ cd fdk
$ git checkout -b ke2043

config.bをベースにconfig.batを作成します。
(コメント行は削除しています。)

config.bat
set XNASM=nasm
set COMPILER=WATCOM
						
set WATCOM=c:\DEVEL\OW
set PATH=%PATH%;%WATCOM%\binw
set XUPX=
set XLINK=C:\DEVEL\OW\BINW\WLINK.EXE
set MAKE=C:\DEVEL\OW\BINW\WMAKE.EXE /ms
set XCPU=386
set XFAT=32

これでビルドします。
残念ですが、これだと失敗します。

C:\FDK>build
USING OPTIONS of C=[] ASM=[]

Process UTILS ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Open Watcom Make Version 1.9
Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
        wcl -zq-zp1-os-s-we-e3-wx-bt=DOS -mt -Ic:\DEVEL\OW\H -I..\hdr patchobj.c
        wcl -mc-zq-zp1-os-s-we-e3-wx-bt=DOS -Ic:\DEVEL\OW\H -I..\hdr exeflat.c

Process LIB ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Open Watcom Make Version 1.9
Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
        ..\utils\rmfiles libm.lib
        wlib -q c:\DEVEL\OW\lib286\dos\clibm.lib *i4m
        C:\FDOS\BIN\COMMAND.COM /c for %i in (*.obj) do ..\utils\patchobj CODE=LCODE %i
C:\FDK\LIB>..\utils\patchobj CODE=LCODE I4M.OBJ
C:\FDK\LIB>..\utils\patchobj CODE=LCODE I4M.OBJ
        wlib -q libm +i4m
        ..\utils\rmfiles *.OBJ

Process DRIVERS ++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Open Watcom Make Version 1.9
Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 floppy.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 rdpcclk.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 wrpcclk.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 wratclk.asm
        ..\utils\rmfiles device.lib
        wlib -q  device.lib floppy.obj rdpcclk.obj wrpcclk.obj wratclk.obj
        copy device.lib ..\lib
device.lib =>> ..\lib\device.lib

Process BOOT +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Open Watcom Make Version 1.9
Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
        nasm -dISFAT12 boot.asm -lfat12com.lst -ofat12com.bin
        nasm -dISFAT16 boot.asm -lfat16com.lst -ofat16com.bin
        nasm boot32.asm -lfat32chs.lst -ofat32chs.bin
        nasm boot32lb.asm -lfat32lba.lst -ofat32lba.bin
        nasm -dISFAT12 oemboot.asm -loemfat12.lst -ooemfat12.bin
        nasm -dISFAT16 oemboot.asm -loemfat16.lst -ooemfat16.bin

Process SYS ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Open Watcom Make Version 1.9
Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
        wcl -mc-zq-zp1-os-s-we-e3-wx-bt=DOS -Ic:\DEVEL\OW\H bin2c.c
        .\bin2c.exe ../boot/fat12com.bin fat12com.h fat12com
        .\bin2c.exe ../boot/fat16com.bin fat16com.h fat16com
        .\bin2c.exe ../boot/fat32chs.bin fat32chs.h fat32chs
        .\bin2c.exe ../boot/fat32lba.bin fat32lba.h fat32lba
        .\bin2c.exe ../boot/oemfat12.bin oemfat12.h oemfat12
        .\bin2c.exe ../boot/oemfat16.bin oemfat16.h oemfat16
        wcc -Ic:\DEVEL\OW\H -I..\hdr -DFORSYS -DWITHFAT32 -zq-zp1-os-s-we-e3-wx-bt=DOS sys.c
        wcc -Ic:\DEVEL\OW\H -I..\hdr -DFORSYS -DWITHFAT32 -zq-zp1-os-s-we-e3-wx-bt=DOS fdkrncfg.c
        wcc -Ic:\DEVEL\OW\H -I..\hdr -DFORSYS -DWITHFAT32 -zq-zp1-os-s-we-e3-wx-bt=DOS ..\kernel\prf.c
        wcc -Ic:\DEVEL\OW\H -I..\hdr -DFORSYS -DWITHFAT32 -zq-zp1-os-s-we-e3-wx-bt=DOS talloc.c
        wcl -zq-zp1-os-s-we-e3-wx-bt=DOS -mt sys.obj fdkrncfg.obj prf.obj talloc.obj
        copy sys.com ..\bin
sys.com =>> ..\bin\sys.com

Process KERNEL +++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Open Watcom Make Version 1.9
Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
        ..\utils\rmfiles *.lnk
        ..\utils\echoto KWC38632.lnk kernel.obj entry.obj io.obj console.obj serial.obj printer.obj dsk.obj sysclk.obj+
        ..\utils\echoto KWC38632.lnk asmsupt.obj execrh.obj nlssupt.obj procsupt.obj dosidle.obj int2f.obj nls_hc.obj+
        ..\utils\echoto KWC38632.lnk apisupt.obj intr.obj irqstack.obj blockio.obj chario.obj systime.obj error.obj+
        ..\utils\echoto KWC38632.lnk break.obj dosfns.obj fatdir.obj fatfs.obj fattab.obj fcbfns.obj inthndlr.obj+
        ..\utils\echoto KWC38632.lnk ioctl.obj memmgr.obj task.obj newstuff.obj nls.obj network.obj+
        ..\utils\echoto KWC38632.lnk prf.obj misc.obj strings.obj syspack.obj lfnapi.obj iasmsupt.obj memdisk.obj+
        ..\utils\echoto KWC38632.lnk main.obj config.obj initoem.obj inithma.obj dyninit.obj iprf.obj+
        ..\utils\echoto KWC38632.lnk initdisk.obj initclk.obj cpu.obj
        ..\utils\echoto KWC38632.lnk kernel.exe
        ..\utils\echoto KWC38632.lnk kernel.map
        ..\utils\echoto KWC38632.lnk ..\lib\device.lib ..\lib\libm.lib
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 kernel.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 entry.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 io.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 console.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 serial.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 printer.asm
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT dsk.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT sysclk.c
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 asmsupt.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 execrh.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 nlssupt.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 procsupt.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 dosidle.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 int2f.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 nls_hc.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 apisupt.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 intr.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 irqstack.asm
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT blockio.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT chario.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT systime.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT error.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT break.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT dosfns.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT fatdir.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT fatfs.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT fattab.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT fcbfns.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT inthndlr.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT ioctl.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT memmgr.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT task.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT newstuff.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT nls.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT network.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT prf.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT misc.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT strings.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT syspack.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntHMA_TEXT lfnapi.c
        nasm -DWATCOM -D_INIT -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 -o iasmsupt.obj asmsupt.asm
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 memdisk.asm
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntINIT_TEXT-gTGROUP-ndI main.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntINIT_TEXT-gTGROUP-ndI config.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntINIT_TEXT-gTGROUP-ndI initoem.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntINIT_TEXT-gTGROUP-ndI inithma.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntINIT_TEXT-gTGROUP-ndI dyninit.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntINIT_TEXT-gTGROUP-ndI iprf.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntINIT_TEXT-gTGROUP-ndI initdisk.c
        wcc -I..\hdr -3 -DI386 -DWITHFAT32-zq-os-s-e5-j-zl-zp1-wx-we-zgf-zff-r-ntINIT_TEXT-gTGROUP-ndI initclk.c
        nasm -DWATCOM -f obj  -DWITHFAT32 -i../hdr/ -DXCPU=386 cpu.asm
        C:\DEVEL\OW\BINW\WLINK.EXE @KWC38632.lnk;
Open Watcom Linker Version 1.9
Portions Copyright (c) 1985-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
Error! E3033: file KWC38632.lnk;: line(1): directive error near 'kernel.obj'
Error(E42): Last command making (kernel.exe) returned a bad status
Error(E02): Make execution terminated
Compilation was aborted!

なんかリンクで失敗しているように見えます。

KWC38632.lnkとは

ビルドの流れを追うと、*.lnk というファイルを作成します。
ここでは(KWC38632.lnk。config.batの記載内容でファイル名は変わるようです。)

で、このファイルの中はテキストで以下のように書かれています。

KWC38632.lnk
kernel.obj entry.obj io.obj console.obj serial.obj printer.obj dsk.obj sysclk.obj+
asmsupt.obj execrh.obj nlssupt.obj procsupt.obj dosidle.obj int2f.obj nls_hc.obj+
apisupt.obj intr.obj irqstack.obj blockio.obj chario.obj systime.obj error.obj+
break.obj dosfns.obj fatdir.obj fatfs.obj fattab.obj fcbfns.obj inthndlr.obj+
ioctl.obj memmgr.obj task.obj newstuff.obj nls.obj network.obj+
prf.obj misc.obj strings.obj syspack.obj lfnapi.obj iasmsupt.obj memdisk.obj+
main.obj config.obj initoem.obj inithma.obj dyninit.obj iprf.obj+
initdisk.obj initclk.obj cpu.obj
kernel.exe
kernel.map
..\lib\device.lib ..\lib\libm.lib

リンクするオブジェクトファイル、出力ファイル、マップファイル、ライブラリが書かれています。
なんで、いちいちファイルに書き出しているのか最初はわからなかったのですが、
どうもリンカ(WLINK.EXE)に渡せる引数の数に制約があるようでした。
試しに適当な値を渡してみたら以下のようなエラーが出ました。

C:\DEVEL\OW>WLINK a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a
Stub exec failed:
C:\DEVEL\OW\BINW\dos4gw.exe
Arg list too big

makefileの修正

いろいろ調べてみた結果、KWC38632.lnkの中身はいかのようにすると
良さそうなのでは?と思うようになりました。

KWC38632.lnk
F {
kernel.obj entry.obj io.obj console.obj serial.obj printer.obj dsk.obj sysclk.obj
asmsupt.obj execrh.obj nlssupt.obj procsupt.obj dosidle.obj int2f.obj nls_hc.obj
apisupt.obj intr.obj irqstack.obj blockio.obj chario.obj systime.obj error.obj
break.obj dosfns.obj fatdir.obj fatfs.obj fattab.obj fcbfns.obj inthndlr.obj
ioctl.obj memmgr.obj task.obj newstuff.obj nls.obj network.obj
prf.obj misc.obj strings.obj syspack.obj lfnapi.obj iasmsupt.obj memdisk.obj
main.obj config.obj initoem.obj inithma.obj dyninit.obj iprf.obj
initdisk.obj initclk.obj cpu.obj
} L ..\lib\device.lib L ..\lib\libm.lib N kernel.exe

参考にしたページは以下

https://users.pja.edu.pl/~jms/qnx/help/watcom/compiler-tools/wlink.html#FileDirective

kernel/makefileを以下のように修正をしました。

diff --git a/kernel/makefile b/kernel/makefile
index aa0fd1c..9fde439 100644
--- a/kernel/makefile
+++ b/kernel/makefile
@@ -56,17 +56,16 @@ clean:

 $(TARGET).lnk: turboc.cfg makefile ../mkfiles/generic.mak ../mkfiles/$(COMPILER).mak
                -$(RM) *.lnk
-               $(ECHOTO) $(TARGET).lnk $(OBJS1)+
-               $(ECHOTO) $(TARGET).lnk $(OBJS2)+
-               $(ECHOTO) $(TARGET).lnk $(OBJS3)+
-               $(ECHOTO) $(TARGET).lnk $(OBJS4)+
-               $(ECHOTO) $(TARGET).lnk $(OBJS5)+
-               $(ECHOTO) $(TARGET).lnk $(OBJS6)+
-               $(ECHOTO) $(TARGET).lnk $(OBJS7)+
+               $(ECHOTO) $(TARGET).lnk  F { 
+               $(ECHOTO) $(TARGET).lnk $(OBJS1)
+               $(ECHOTO) $(TARGET).lnk $(OBJS2)
+               $(ECHOTO) $(TARGET).lnk $(OBJS3)
+               $(ECHOTO) $(TARGET).lnk $(OBJS4)
+               $(ECHOTO) $(TARGET).lnk $(OBJS5)
+               $(ECHOTO) $(TARGET).lnk $(OBJS6)
+               $(ECHOTO) $(TARGET).lnk $(OBJS7)
                $(ECHOTO) $(TARGET).lnk $(OBJS8)
-               $(ECHOTO) $(TARGET).lnk kernel.exe
-               $(ECHOTO) $(TARGET).lnk kernel.map
-               $(ECHOTO) $(TARGET).lnk $(LIBS)
+               $(ECHOTO) $(TARGET).lnk  } L ..\lib\device.lib L ..\lib\libm.lib N kernel.exe

 #               *Individual File Dependencies*
 apisupt.obj:   apisupt.asm segs.inc                    $(TARGET).lnk

再度ビルド

再度ビルドをしてみます。

C:\FDK>build
... 省略
        C:\DEVEL\OW\BINW\WLINK.EXE @KWC38632.lnk;
Open Watcom Linker Version 1.9
Portions Copyright (c) 1985-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
loading object files
searching libraries
creating a DOS executable
        ..\utils\exeflat.exe kernel.exe kernel.sys 0x60 -S0x10 -S0x78 -S0x79
header len = 336 = 0x150
image size (less header) = 69218 = 0x10e62
first relocation offset = 32 = 0x20
relocation at 0x0000:0x0027 ->020a
relocation at 0x020a:0xa27d ->0fec
relocation at 0x020a:0xa661 ->0000
relocation at 0x020a:0xcbab ->020a

Processed 76 relocations, 72 not shown
        copy kernel.sys ..\bin
kernel.sys =>> ..\bin\kernel.sys
        copy kernel.sys ..\bin\KWC38632.sys
kernel.sys =>> ..\bin\KWC38632.sys
        copy kernel.map ..\bin\KWC38632.map
Unable to open file 'kernel.map'
        nasm -o ../bin/country.sys country.asm

Process SETVER +++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Open Watcom Make Version 1.9
Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
        nasm -o ..\bin\setver.sys setver.asm

Processing is done.

成功しました!
BINディレクトリの中にビルドされたイメージが作成されます。

C:\FDK\BIN>dir
 Volume in drive C is FREEDOS2021
 Volume Serial Number is 3668-1A1E

 Directory of C:\FDK\BIN

.                    <DIR>  12-11-2021  2:55p
..                   <DIR>  12-11-2021  2:55p
AUTOEXEC BAT            72  12-11-2021  2:55p
CONFIG   SYS            90  12-11-2021  2:55p
COUNTRY  SYS        30,250  12-11-2021  3:46p
INSTALL  BAT           671  12-11-2021  2:55p
KERNEL   SYS        69,218  12-11-2021  3:46p
KWC38632 SYS        69,218  12-11-2021  3:46p
SETVER   SYS           109  12-11-2021  3:46p
SYS      COM        20,302  12-11-2021  3:46p
         8 file(s)        189,930 bytes
         2 dir(s)   2,025,521,152 bytes free

C:\FDK\BIN>

イメージのコピー

このディレクトリの中にあるINSTALL.BATを実行すると
必要なファイルをAドライブにコピーしてくれます。

Virtual Box上でFloppyイメージを追加します。
追加した状態の画面は以下のようになります。ここでは
FDOS_2.imgというファイル名にしています(適当です)。
(追加手順は省略)

Floppyが追加できたので
起動して、install.batを実行します。

C:\FDK\BIN>install
This utility will create a distribution floppy on the disk in drive A:
Press any key to continue . . .
SYS: failed to open "C:COMMAND.COM"
SYS: Trying shell from %COMSPEC%="C:\FDOS\BIN\COMMAND.COM"
System transferred.

copying remaining files...
copying autoexec.bat...
autoexec.bat =>> A:autoexec.bat
copying config.sys..
config.sys =>> A:config.sys
copying sys.com..
sys.com =>> A:sys.com

Aドライブの中を確認すると、イメージがコピーされています。

C:\FDK\BIN>dir a:\
 Volume in drive A is FREEDOS
 Volume Serial Number is 1D13-17E9

 Directory of A:\

AUTOEXEC BAT            72  12-11-2021  2:55p
COMMAND  COM        85,048  04-30-2021 12:54p
CONFIG   SYS            90  12-11-2021  2:55p
KERNEL   SYS        69,218  12-11-2021  3:46p
SYS      COM        20,302  12-11-2021  3:46p
         5 file(s)        174,730 bytes
         0 dir(s)       1,281,024 bytes free

フロッピーから起動

フロッピーから起動できるか確認してみます。
設定は以下のように、フロッピーの起動順序を一番高くします。

起動してみると以下のようになります。

一行目に
FreeDOS kernel - GIT (build 2043 MEM:0xfd) [compiled Dec 11 2021]
ビルドしたバージョン(2.43)、ビルド日(Dec 11 2021)が出ているので
ちゃんとビルドできているようです。

まとめ

FreeDOS上でFreeDOS kernelのビルドができるか試してみましたができてよかったです。
何度かメーリングリストの助けを借りたりしてやっとできました。

次回は(?) FreeCOMをFreeDOS上でビルドする方法を書きます(もうビルドはできてます)。

Discussion