Windows 9xのインストール用FDをCDから生成する

Windows 95,98,MeのインストールCD-ROMを使う際に用いる起動ディスクに関する情報を雑多にまとめました。

# アップグレード版は本記事の対象外

ブートFDが付属したのは新規インストール用のみで、アップグレード版では添付されていません。

インストール用ブートFDではCD-ROM内のOEMSETUP.EXEを呼び出す構造になっていますが、アップグレード版ではそもそもOEMSETUP.EXEが存在しません。従って、コントロールパネルから作成できる起動ディスクから手動でインストールする手法と同じ方法でインストールすることになります。


また、95ではCD版がアップグレード用しか存在せず、CD版の新規インストール用がないので、インストール用FDもありません。

# 用意するもの

- Windows 9x の純正インストールCD　（Microsoft純正のOEMインストールCDでも良い）

95/98ではコンパネ産起動FDを基にファイルを差し替えるという形で作成します。
Meについては裏技が存在するのでそちらをご覧ください。


# コントロールパネル産起動FDを作る (95/98)

このツールからコンパネ産起動FDを作成していじってください。

Windows 95/98/98SE/Meの起動ディスクイメージを作成
http://radioc.web.fc2.com/soflib/mkw9ximg/mkimage.htm

## Windows 95 OSR (Companion以外)
### PC/AT互換機 CD-ROMセットアップ起動ディスク
OSRはOEM供給用Windows 95です。
自作PCショップでハードウェアと抱き合わせで販売されていたFD+CD版について述べます。PC-9800版OSRディスクもあるみたいですが、未所持なのでよくわかりません。

AUTOEXEC.BAT, CONFIG.SYS, DRVCOPY.INFを見る限り、**自分でCDドライバを調達**してこないとインストールできない仕組みになっています。中古などで手に入れた品にCDドライバが組み込まれていた場合、前の所有者が組み込んだか、メーカーPC購入時に添付されたものと推測できます。

```
(PRECOPY1.CAB)
COMMAND.COM
WINBOOT.SYS -> IO.SYS

(WIN95_03.CAB)
ANK16.FNT
ANK19.FNT
BILING.SYS
FDISK.EXE
HIMEM.SYS
JDISP.SYS
JFONT.SYS
JKEYB.SYS
JKEYBRD.SYS
KANJI16.FNT
MSCDEX.EXE

(新規作成)
MSDOS.SYS
AUTOEXEC.BAT
CONFIG.SYS
DRVCOPY.INF
```

```MSDOS.SYS
（空ファイル）
```

```AUTOEXEC.BAT
@echo off

REM ===================
REM Notes for OEM:
REM - You should remove these remarks for the final disks you send to customers.
REM - You MUST explicitly specify the CD ROM Drive Letter for MSCDEX.
REM - You must switch to the CDROM drive, and then CD to the directory.
REM - the string CD001 must explicitly match the same string in CONFIG.SYS.
REM - The file DRVCOPY.INF MUST be modified to refer to the proper
REM - real-mode CD ROM driver. This driver will be copied to the
REM - hard disk during installation by the DRVCOPY.INF file.
REM - (Note: The user will have to type in the drive letter for the floppy disk
REM - when prompted at the end of setup.)

ECHO Warning - This system may not be setup to use the CD ROM.
ECHO Please contact your PC Manufacturer if Setup does not start automatically.
PAUSE
REM ===================

MSCDEX.EXE /D:OEMCD001 /L:D
d:
cd \win95
oemsetup /k "a:\drvcopy.inf"
```

```CONFIG.SYS
DEVICE=HIMEM.SYS
BUFFERS=20
FILES=60
DEVICE=BILING.SYS
DEVICE=JFONT.SYS /MSG=OFF
DEVICE=JDISP.SYS /HS=LC
DEVICE=JKEYB.SYS
　　
REM OEM Notes - remove these remarks before shipping to customers.
REM - You need to include the correct CD driver information for your
REM - IDE or SCSI CDROM Drivers below.
　　
REM DEVICE=YOUR_DRIVER.SYS /D:OEMCD001
```

```DRVCOPY.INF
; DRVCOPY.INF
;
; This is the Driver Copy information file for
; real-mode CD-ROM drivers.
;
; These driver(s) are copied to the root of the hard disk
; during setup, and are installed in config.sys and autoexec.bat
;
; This file MUST be modified by the OEM prior to shipping
; to end users.
;
; OEMs will need to modify this to add the proper name(s)
; for their real-mode CD ROM drivers.
; Lines that must be modified are marked OEM_Modify
; You can also copy additional drivers and add lines to autoexec.bat
; and config.sys using this file.


[version]
; Do not change this section
signature=$chicago$

[DestinationDirs]


; Do not change this section
RM.driver.dest.copy = 30 ; root directory

[install]
; Do not change this section
copyfiles=RM.driver.dest.copy
updatecfgsys=RM.Sys.upd
updateautobat=RM.Auto.upd

[RM.driver.dest.copy]
; OEM_Modify - Change the name from SAMPLE.SYS to your CD ROM drivers.
; - You can insert additional filenames for your real
; mode driver(s).
; This file name will be copied to the hard disk.
SAMPLE.SYS

[RM.Sys.upd]
; OEM_Modify - Change the name from SAMPLE.SYS to your CD ROM drivers.
: - You can also change the driver name here and below.
; This line will be added to the user's CONFIG.SYS.
DevAddDev=SAMPLE.SYS,device,,"/D:OEMCD001"

[RM.Auto.upd]
; OEM_Modify - Change the "D" in L:D to represent the default drive
; letter for your CD ROM.
; - The OEMCD001 parameter should agree with the
; config.sys parameter above.
; This line will be added to the user's AUTOEXEC.BAT
CmdAdd=MSCDEX.EXE,"/D:OEMCD001 /L:D"

[SourceDisksNames]
; Do not change this section
100="%oem.boot.desc%",,5

[SourceDisksFiles]
; OEM_Modify - Change the name from SAMPLE.SYS to your CD ROM drivers.
; Do not change the 100,,2000
; This file will be copied to the hard disk root directory.
SAMPLE.SYS=100,,2000

[Strings]
; This string is displayed to the user. It can be localized as
; necessary.
oem.boot.desc="Setup Boot Disk"
```

## CD版OSRからFD版OSRを生成する
WIN95_XX.CABのサイズが1,716,224バイトであればFD版の生成が可能です。

### Windows 95 OSR 2.1 (FD版)

```DISK.0
起動用FD, 1.44MBフォーマット
IO.SYS
MSDOS.SYS
DRVSPACE.BIN
COMMAND.COM
ANK16.FNT
ANK19.FNT
AUTOEXEC.BAT
BILING.SYS
CONFIG.SYS
FDISK.EXE
FORMAT.COM
HIMEM.SYS
JDISK.SYS
JFONT.SYS
JKEYB.SYS
JKEYBRD.SYS
KANJI16.FNT
MSCDEX.EXE

OEMSETUP.EXE
OEMSETUP.BIN
SETUP.TXT
```

```AUTOEXEC.BAT
@echo off
oemsetup
```

```CONFIG.SYS
DEVICE=HIMEM.SYS
BUFFERS=20
FILES=60
DEVICE=BILING.SYS
DEVICE=JFONT.SYS /MSG=OFF
DEVICE=JDISP.SYS /HS=LC
DEVICE=JKEYB.SYS
```

```DISK.1
1.44MBフォーマット
DELTEMP.COM
DOSSETUP.BIN
EXTRACT.EXE
MINI.CAB
README.TXT
SAVE32.COM
SCANDISK.EXE
SCANDISK.COM
SCANPROG.EXE
SCANDISK.PIF
SCANDSK2.EXE
SETUP.EXE
SMARTDRV.EXE
WINSETUP.BIN
```

```DISK.2
1.44MBフォーマット
MINI1.CAB
PRECOPY1.CAB
WB16OFF.EXE
XMSMMGR.EXE
```

```DISK.3
DMFフォーマット
PRECOPY2.CAB
WIN95_03.CAB
```

```DISK.4 - 34
DMFフォーマット
WIN95_xx.CAB (ディスクの番号と対応するCABを格納する)
```

# Windows 98
リテール販売された版として98と98SEの2種類がありますが、起動FDは殆ど同じ内容です。
インストール用FDにしかないファイル "FINDCD.EXE"についてはコマンドで代用します。（後述）

### PC/AT互換機 インストール用FD (2枚)

```DISK.1
(BASE5.CAB)
ANK16.FNT
ANK19.FNT
COMMAND.COM
DRVSPACE.BIN
EXTRACT.EXE
FDISK.EXE
KANJI16.FNT
MSCDEX.EXE (コンパネ産にはない)

(BASE6.CAB)
ASPI2DOS.SYS
ASPI4DOS.SYS
ASPI8DOS.SYS
ASPI8U2.SYS
ASPICD.SYS
BILING.SYS
BTCDROM.SYS
BTDOSM.SYS
FLASHPT.SYS
HIMEM.SYS
JDISP.SYS
JFONT.SYS
JKEYB.SYS
JKEYBRD.SYS
OAKCDROM.SYS
RAMDRIVE.SYS
WINBOOT.SYS -> IO.SYS

(新規作成)
AUTOEXEC.BAT
CONFIG.SYS
MSDOS.SYS

(CD内に無い)
FINDCD.EXE
```

```DISK.2
(BASE5.CAB)
EBD.CAB
```

```MSDOS.SYS
;W98EBD
```
```AUTOEXEC.BAT
@ECHO OFF
set EXPAND=YES
SET DIRCMD=/O:N
cls
set temp=c:\
set tmp=c:\
path=a:\

IF "%config%"=="NOCD" GOTO QUIT
LH MSCDEX.EXE /D:oemcd001 /L:D

echo.
IF "%config%"=="SETUP_CD" goto AUTOSETUP
GOTO QUIT

:AUTOSETUP
set CDROM=FOO23
FINDCD.EXE
if "%CDROM%"=="FOO23" goto NOCDROM
path=a:\;%CDROM%\
%CDROM%
cd \WIN98
echo.
OEMSETUP.EXE
goto QUIT

:NOCDROM
echo.
echo Windows 98 セットアップ ファイルが見つかりませんでした。
echo.

:QUIT
```
```CONFIG.SYS
[menu]
menuitem=SETUP_CD, Start Windows 98 Setup from CD-ROM.
menuitem=CD, Start computer with CD-ROM support.
menuitem=NOCD, Start computer without CD-ROM support.
menudefault=SETUP_CD,30
menucolor=7,0

[SETUP_CD]
device=himem.sys /testmem:off
device=oakcdrom.sys /D:oemcd001
device=btdosm.sys
device=flashpt.sys
device=btcdrom.sys /D:oemcd001
device=aspi2dos.sys
device=aspi8dos.sys
device=aspi4dos.sys
device=aspi8u2.sys
device=aspicd.sys /D:oemcd001

[CD]
device=himem.sys /testmem:off
device=oakcdrom.sys /D:oemcd001
device=btdosm.sys
device=flashpt.sys
device=btcdrom.sys /D:oemcd001
device=aspi2dos.sys
device=aspi8dos.sys
device=aspi4dos.sys
device=aspi8u2.sys
device=aspicd.sys /D:oemcd001

[NOCD]
device=himem.sys /testmem:off

[COMMON]
DEVICEHigh=EMM386.EXE noems
DEVICEHigh=BILING.SYS
DEVICEHigh=JFONT.SYS /MSG=OFF
DEVICEHigh=JDISP.SYS /HS=LC
DEVICEHigh=JKEYB.SYS
files=60
buffers=20
dos=high,umb
stacks=9,256
lastdrive=z
```

### PC-9800シリーズ インストール用FD (1枚)
```
（BASE4.CAB）
DRVSPACE.BIN
EBD.CAB

（BASE5.CAB）
COMMAND.COM
DISKINIT.EXE
EXTRACT.EXE
FDISK.EXE
HIMEM.SYS
NECCDB.SYS
NECCDD.SYS
NECCDJ.SYS
NECCDK.SYS
NECCDM.SYS
RAMDRIVE.SYS
WINBOOT.SYS -> IO.SYS

(EBD.CABから抽出してフロッピーへコピーする)
MSCDEX.EXE
SYS.COM

(新規作成)
MSDOS.SYS
AUTOEXEC.BAT
CONFIG.SYS
DRVCOPY <DIR>

(CD内に無い)
FINDCD.EXE
```

```MSDOS.SYS
;W98EBD
```

```AUTOEXEC.BAT
@ECHO OFF
set EXPAND=YES
SET DIRCMD=/O:N
cls
set temp=\
set tmp=\
path=\

IF "%config%"=="CD-ROM／CD-R／DVD-ROMドライブを使用しない" GOTO QUIT
LH MSCDEX.EXE /D:oemcd001 /L:Q

echo.

:AUTOSETUP
set CDROM=FOO23
FINDCD.EXE
if "%CDROM%"=="FOO23" goto NOCDROM
path=\;%CDROM%\
%CDROM%
cd \WIN98N
echo.
OEMSETUP.EXE
goto QUIT

:NOCDROM
echo.
echo Windows 98 セットアップ ファイルが見つかりませんでした。
echo.

:QUIT
```

```CONFIG.SYS
[Menu]
menuitem = CD-ROM／CD-R／DVD-ROMドライブを使用しない
menuitem = PC-98GS／PC-9821／Ce／Ap2／An／XaC10W内蔵用
menuitem = PC-CD103／60／60D／60F／170／170N／180／180X／600／800増設用
menuitem = PC-9821Cs2／Xs／Xp／Xn／XaC9W／Ce2／Xt／As3／Ap3／Cb／Xf内蔵用
menuitem = PC-CD60D増設用
menuitem = PC-9821Ct20／V200M7内蔵用
menuitem = PC-9821Rs20／Rv20／RsⅡ26／RvⅡ26内蔵用
menuitem = 上記ドライバで使用不可の内蔵CD-ROM／CD-R／DVD-ROMドライブ用
menudefault= 上記ドライバで使用不可の内蔵CD-ROM／CD-R／DVD-ROMドライブ用
menucolor=7,0

[CD-ROM／CD-R／DVD-ROMドライブを使用しない]
DEVICE=HIMEM.SYS /testmem:off

[PC-98GS／PC-9821／Ce／Ap2／An／XaC10W内蔵用]
DEVICE=HIMEM.SYS /testmem:off
DEVICE=NECCDB.SYS /D:oemcd001

[PC-CD103／60／60D／60F／170／170N／180／180X／600／800増設用]
DEVICE=HIMEM.SYS /testmem:off
DEVICE=NECCDB.SYS /D:oemcd001

[PC-9821Cs2／Xs／Xp／Xn／XaC9W／Ce2／Xt／As3／Ap3／Cb／Xf内蔵用]
DEVICE=HIMEM.SYS /testmem:off
DEVICE=NECCDD.SYS /D:oemcd001

[PC-CD60D増設用]
DEVICE=HIMEM.SYS /testmem:off
DEVICE=NECCDD.SYS /D:oemcd001

[PC-9821Ct20／V200M7内蔵用]
DEVICE=HIMEM.SYS /testmem:off
DEVICE=NECCDJ.SYS /D:oemcd001

[PC-9821Rs20／Rv20／RsⅡ26／RvⅡ26内蔵用]
DEVICE=HIMEM.SYS /testmem:off
DEVICE=NECCDK.SYS /D:oemcd001

[上記ドライバで使用不可の内蔵CD-ROM／CD-R／DVD-ROMドライブ用]
DEVICE=HIMEM.SYS /testmem:off
DEVICE=NECCDM.SYS /D:oemcd001

[COMMON]
files=60
buffers=20
dos=high,umb
lastdrive=z
```

```DRVCOPY.DIR
(フロッピー内にDRVCOPYというフォルダを作り以下のファイルをコピーする)
MSCDEX.EXE
NECCDB.SYS
NECCDD.SYS
NECCDJ.SYS
NECCDK.SYS
NECCDM.SYS

(新規作成)
AUTOEXEC.BAT
CONFIG.SYS
W98CONF.SRC
```

```AUTOEXEC.BAT(DRVCOPY)
@ECHO OFF

REM Windows 98 のセットアップ後、
REM "IF NOT EXIST W98CONF.SRC GOTO BOOT2ND" 行から
REM ":BOOT2ND" 行までは
REM 削除することができます。

IF NOT EXIST W98CONF.SRC GOTO BOOT2ND

IF "%config%"=="PC-98GS／PC-9821／Ce／Ap2／An／XaC10W内蔵用" GOTO CD_B
IF "%config%"=="PC-CD103／60／60D／60F／170／170N／180／180X／600／800増設用" GOTO CD_B
IF "%config%"=="PC-9821Cs2／Xs／Xp／Xn／XaC9W／Ce2／Xt／As3／Ap3／Cb／Xf内蔵用" GOTO CD_D
IF "%config%"=="PC-CD60D増設用" GOTO CD_D
IF "%config%"=="PC-9821Ct20／V200M7内蔵用" GOTO CD_J
IF "%config%"=="PC-9821Rs20／Rv20／RsⅡ26／RvⅡ26内蔵用" GOTO CD_K
IF "%config%"=="上記ドライバで使用不可の内蔵CD-ROM／CD-R／DVD-ROMドライブ用" GOTO CD_M

:NOCDROM
echo.
echo Windows 98 セットアップ ファイルが見つかりませんでした。
echo.
GOTO QUIT

:CD_B
echo DEVICE=NECCDB.SYS /D:oemcd001 >> W98CONF.SRC
GOTO REWRITE

:CD_D
echo DEVICE=NECCDD.SYS /D:oemcd001 >> W98CONF.SRC
GOTO REWRITE

:CD_J
echo DEVICE=NECCDJ.SYS /D:oemcd001 >> W98CONF.SRC
GOTO REWRITE

:CD_K
echo DEVICE=NECCDK.SYS /D:oemcd001 >> W98CONF.SRC
GOTO REWRITE

:CD_M
echo DEVICE=NECCDM.SYS /D:oemcd001 >> W98CONF.SRC

:REWRITE
COPY /Y W98CONF.SRC CONFIG.SYS
DEL W98CONF.SRC

:BOOT2ND
LH MSCDEX.EXE /D:oemcd001 /L:Q
Q:\WIN98N\OEMSETUP.EXE /K "/IF /IJ"

:QUIT
REM Q:\WIN98N\
```

```CONFIG.SYS(DRVCOPY)
[Menu]
menuitem = PC-98GS／PC-9821／Ce／Ap2／An／XaC10W内蔵用
menuitem = PC-CD103／60／60D／60F／170／170N／180／180X／600／800増設用
menuitem = PC-9821Cs2／Xs／Xp／Xn／XaC9W／Ce2／Xt／As3／Ap3／Cb／Xf内蔵用
menuitem = PC-CD60D増設用
menuitem = PC-9821Ct20／V200M7内蔵用
menuitem = PC-9821Rs20／Rv20／RsⅡ26／RvⅡ26内蔵用
menuitem = 上記ドライバで使用不可の内蔵CD-ROM／CD-R／DVD-ROMドライブ用
menudefault=上記ドライバで使用不可の内蔵CD-ROM／CD-R／DVD-ROMドライブ用
menucolor=7,0

[PC-98GS／PC-9821／Ce／Ap2／An／XaC10W内蔵用]
DEVICE=HIMEM.SYS /testmem:off
DEVICE=NECCDB.SYS /D:oemcd001

[PC-CD103／60／60D／60F／170／170N／180／180X／600／800増設用]
DEVICE=HIMEM.SYS /testmem:off
DEVICE=NECCDB.SYS /D:oemcd001

[PC-9821Cs2／Xs／Xp／Xn／XaC9W／Ce2／Xt／As3／Ap3／Cb／Xf内蔵用]
DEVICE=HIMEM.SYS /testmem:off
DEVICE=NECCDD.SYS /D:oemcd001

[PC-CD60D増設用]
DEVICE=HIMEM.SYS /testmem:off
DEVICE=NECCDD.SYS /D:oemcd001

[PC-9821Ct20／V200M7内蔵用]
DEVICE=HIMEM.SYS /testmem:off
DEVICE=NECCDJ.SYS /D:oemcd001

[PC-9821Rs20／Rv20／RsⅡ26／RvⅡ26内蔵用]
DEVICE=HIMEM.SYS /testmem:off
DEVICE=NECCDK.SYS /D:oemcd001

[上記ドライバで使用不可の内蔵CD-ROM／CD-R／DVD-ROMドライブ用]
DEVICE=HIMEM.SYS /testmem:off
DEVICE=NECCDM.SYS /D:oemcd001

[COMMON]
files=60
buffers=20
dos=high,umb
lastdrive=z
```

```W98CONF.SRC
FILES=30
LASTDRIVE=Z
DEVICE=HIMEM.SYS
```

## FINDCD.EXEについて
このファイルは実行するとA:\WIN98\SETUP.EXE, B:\WIN98\SETUP.EXE ...　という風に順に検索していき、存在したら%CDROM%にドライブレターを格納するというようなファイルになっています。
PC-9800シリーズでも A:\WIN98N\SETUP.EXE, B:\WIN98N\SETUP.EXE ... という感じで検索していきます。そのため、PC/AT版とPC-9800版とでは内容が異なります。

とはいえ、MSCDEX.EXEでドライブレターが指定されるのでAUTOEXEC.BATのFINDCD.EXEの行を以下のように変えればOKです。


```AUTOEXEC.BAT(PC/AT)
if exist "D:\WIN98\SETUP.EXE" set CDROM=D:
```

```AUTOEXEC.BAT(PC-9800)
if exist "Q:\WIN98N\SETUP.EXE" set CDROM=Q:
```

ただPC/AT側もMSCDEX.EXEをDドライブからQドライブに変更したほうがいいかもしれません。

# Windows Me, Windows 98/98SE 純正OEM (PC/AT)
95とリテールの98とは異なり98のOEM版とMeはCDブートが可能です。

CDのヘッダに1.44MBのフロッピーディスクイメージが格納されているので、このイメージを抽出・加工します。

おおまかに
1. CDをISOイメージ化
2. ISOのブータブル領域からフロッピーイメージを取り出す
3. JO.SYSを削除

という操作をしていきます。

### 1. インストールCDをISOイメージ化する

IMGBURNを使うといいです。

### 2. ISOのブータブル領域からフロッピーイメージを取り出す
バイナリエディタで文字列「BOOTCD」を検索します。一番先頭の領域にあるものがFDイメージの最初の部分になります。

そのちょっと前の部分を先頭に00000000-00167FFF分のバイナリを取り出し、ファイルとして保存します。

私が持っているCDではBOOTCDの文字列が0000A82Bにありました。そこの箇所の先頭「0000A800」から00167FFFを足した「001727FF」までをファイルとして保存します。ファイル名はなんでもいいですが、拡張子は.IMGとします。（多分どのディスクも同じ範囲で、A800~1727FFまでに位置していると思います)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567899/9a3c3800-12a6-24ed-43cc-5d6acb098cee.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567899/b2d95241-7b79-dac3-86af-124f5d2dfc6a.png)


### 3. JO.SYSを削除する
このままFDイメージをフロッピーに書き込んでもいけますが、起動時に以下のようなメッセージが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567899/98a65901-8916-5af8-63c5-936e2b71e518.png)

このメニューはFDイメージ内の「JO.SYS」によるものです。削除すれば表示しなくなります。