# 互联网上找到的相关资源
internet-resource:
  site:
    - https://computerhistory.org/
  bitsavers.org:
    PC-DOS: http://bitsavers.org/pdf/ibm/pc/dos/
    MS-DOS: http://bitsavers.org/pdf/microsoft/dos/
  WinWorld:
    MS-DOS: https://winworldpc.com/product/ms-dos/622
    PC-DOS: https://winworldpc.com/product/pc-dos/2000
    doc:
      "Microsoft MS-DOS 1.25 [TI Professional Computer OEM r1.13] Manual.pdf": |
        Texas Instruments Professional Computer 上使用 DOS 1.25 的用户手册, 包含常用命令和 edlin debug 等命令的使用说明。
        开头提到 DOS 核心包含 IO.SYS MSDOS.SYS COMMAND.COM 这 3 个文件 (前两个是保存在磁盘特定区域的隐藏文件),
        附录包含简单的技术说明。类似 IBM PC-DOS 1.10 手册。
      "Microsoft MS-DOS 2.11 [TI Professional Computer OEM r2.13].Manuals":
        "TI DOS 2.13 Getting Started.pdf": |
          Texas Instruments Professional Computer 上使用 DOS 2.x 的简单用户手册, 价值不大。
      "Microsoft MS-DOS 1.25 [Compaq OEM r1.1x] Manual":
        "Microsoft MS-DOS 1.25 [Compaq OEM r1.1x] Manual.pdf": |
          COMPAQ PORTABLE COMPUTER 上使用 DOS 1.25 的用户手册, 包含常用命令和 sys edlin debug link 等命令的使用说明。
          开头提到 DOS 核心组件文件和其在双面 5.25 英寸软盘上的扇区布局。
          附录包含简单的技术说明。类似 IBM PC-DOS 1.10 手册。
      "IBM PC-DOS 1.10 Manual May82":
        "IBM_DOS_1.1_May82.pdf": |
          在 IBM PC 上使用 DOS 1.x 的用户手册, 包含 DOS 组件和功能的技术层简单介绍,
          包含 format sys edlin debug link 等命令的使用说明, 附录包含技术细节介绍。
          文档质量较好。
      "IBM PC-DOS 2.10 Manuals Sep83":
        "1502343_DOS_2.10_Reference_Sep83.pdf": |
          在 IBM PC 上使用 DOS 2.x 的用户手册, 技术介绍移动到了单独的技术参考文档。
        "1502346_DOS_2.10_Technical_Reference_Sep83.pdf": |
          IBM PC 上 DOS 2.x 提供给高级用户和系统程序员的技术参考文档。
          正文约 160 页, 很好的早期 DOS 技术资料。
      "IBM PC-DOS 7.x Manuals Feb95":
        "83G9260_IBM_PC_DOS_7.0_Users_Guide_Jan95.pdf": |
          PC-DOS 7 用户文档, 全面的 DOS 使用文档。
        "GG24-4459-00_PC_DOS_7_Technical_Update_Feb95.pdf": |
          PC-DOS 7 提供给 DOS 程序员的技术参考文档, DOS 5.02 技术文档 (网上未找到) 的升级。
          良好 (原生?) 的 PDF 格式, 包含良好组织的 PDF 目录, 包含约 370 页 "正文" 内容, 珍贵全面的 DOS 技术资料。
  wiki:
    MS-DOS: https://en.wikipedia.org/wiki/MS-DOS
    PC-DOS: https://en.wikipedia.org/wiki/IBM_PC_DOS
    pc: https://en.wikipedia.org/wiki/Personal_computer
    pc_history: https://en.wikipedia.org/wiki/History_of_personal_computers
    cpu: https://en.wikipedia.org/wiki/Central_processing_unit
    intel8086: https://en.wikipedia.org/wiki/Intel_8086
  baidu:
    计算机: https://baike.baidu.com/item/%E8%AE%A1%E7%AE%97%E6%9C%BA/140338
    常规内存: https://baike.baidu.com/item/%E5%B8%B8%E8%A7%84%E5%86%85%E5%AD%98
    常驻程序: https://baike.baidu.com/item/%E5%B8%B8%E9%A9%BB%E7%A8%8B%E5%BA%8F
  apple-II: http://www.pc-history.org/apple.htm
  vga:
    - https://en.wikipedia.org/wiki/Mode_13h
    - |
      Introduction to VGA Graphics Programming Using Mode 13h
      http://atrevida.comprenica.com/atrtut07.html

important-version:
  - PC-DOS 1.x:
      date: 1981
      desc: |
        Minimal OS, No subdirectories, redirection, pipes, or device drivers were supported.
        Most of these images need to be written with ImageDisk, or some other DOS based disk writer.
        WinImage can not handle the file system on most DOS 1.x disks.
      "1.0": only supports single sided 8-sector 160k 5.25 inch floppy disks.
      "1.1": adds support for double sided 320k disks.
      command: DIR, TYPE, COPY, ERASE, RENAME, PAUSE, REM
      file: .com .exe .bat
  - PC-DOS 2.x:
      date: 1983
      desc: |
        Introduced various features inspired from Unix, subdirectories, file redirection, and file handles.
        Also introduced loadable device drivers, hard drive support,
        Support for partitioned media, and thereby the master boot record (MBR),
        in order to support the 10 MB hard disk of the then-new IBM Personal Computer XT,
        still using the FAT12 file system.
  - PC-DOS/MS-DOS 5.x:
      date: 1991
      supersede:
        "PC-DOS 3.x":
          date: 1984
          desc: |
            Adds support for 1.44mb floppy drives, and extended hard disk partitions.
            Adds features for use with networking.
        "PC-DOS 4.x":
          date: 1988
          desc: |
            Adds support for drives up 2 gigabytes and a graphical DOS shell.
            It used much more of the base 640K.
      desc: |
        A full screen text editor EDIT has replaced the former line editor EDLIN.
        Microsoft QBasic also shipped in DOS 5 replacing GW-BASIC.
        Supported hard disks up to 2GB in size.
        The memory management was rewritten to allow DOS to utilize the High Memory Area and Upper Memory Area
        to reduce its usage of conventional memory.
  - PC-DOS 7.1:
      date: 1999 - 2003
      supersede:
        PC-DOS 2000:
          date: 1998
          desc: Fixes Y2K bugs.
      desc: Added support for Logical Block Addressing (LBA) and FAT32 partitions.
  - MS-DOS 7.x:
      date: 1995 - 2001
      desc: |
        As part of Windows 9x.
        Support for VFAT long file names, Added support for the FAT32 file system.

MS-DOS:
  "desc": |
    Originally 86-DOS, written by Tim Paterson of Seattle Computer Products,
    DOS was a rough clone of CP/M for 8086 based hardware.
    Microsoft purchased it and licensed it to IBM for use with Microsoft's IBM PC language products.
    In 1982, Microsoft began licensing DOS to other OEMs that ported it to their custom x86 hardware and IBM PC clones.
  "1.x":
    date: 1981
    pc: IBM PC 5150
    desc: |
      IBM PC-DOS 1.0 was a port of 86-DOS purchased by Microsoft in 1981 for use on the IBM PC.
      1.0 only supports single sided 8-sector 160k 5.25 inch floppy disks.
      1.1 adds support for double sided 320k disks. Directory support did not exist with this version of DOS.

      DOS 1.x was very limited in what it could do.
      It could start applications (.COM and .EXE), and process batch files (.BAT).
      DOS 1.0 worked with 160KB floppies and did not support folders (all files had to be in the root).
      The command interpertor supported the following commands:
      - DIR, TYPE, COPY, ERASE, RENAME
      - PAUSE, REM
      No pipes, redirection, or device drivers were supported.

      MS-DOS 1.25, the equivalent of PC-DOS 1.10 (adds support for double sided 320k disks),
      was the first version licensed to OEMs beyond IBM or Seattle Computer Products.

      Most of these images need to be written with ImageDisk, or some other DOS based disk writer.
      WinImage can not handle the file system on most DOS 1.x disks.
  "2.x":
    date: 1983
    pc: IBM XT 5160
    desc: |
      PC-DOS 2.0 was IBM's PC-specific adaption of MS-DOS 2.0.
      Version 2.0 introduced various features inspired by Xenix, a variant of Unix sold by Microsoft.
      These features included subdirectories, file redirection, and file handles.
      DOS 2.0 also introduced loadable device drivers,
      hard drive support (larger (as in 10 MB) disks), and 9-sector 180k/360k floppy disk support.
    fat12: https://en.wikipedia.org/wiki/File_Allocation_Table#FAT12
    mbr:
      fullname: Master boot record
      wiki: https://en.wikipedia.org/wiki/Master_boot_record
      desc: |
        Support for partitioned media, and thereby the master boot record (MBR),
        was introduced with IBM PC DOS 2.0 in March 1983
        in order to support the 10 MB hard disk of the then-new IBM Personal Computer XT,
        still using the FAT12 file system.
  "3.x":
    date: 1984
    desc: |
      PC-DOS 3.x was introduced for IBM's 286 based AT computer.
      It adds support for IBM's 1.2mb floppy drive, hard disk partitions up to 32mb,
      and adds features for use with networking.
    fat16: https://en.wikipedia.org/wiki/File_Allocation_Table#Initial_FAT16
    "3.00": |
      DOS 3.0 adds support for FAT16 partitions up to 32MB, 1.2MB floppy drives, and the IBM AT internal clock.
    "3.30":
      desc: |
        MS-DOS 3.30 adds support for 1.44mb floppy drives. and extended hard disk partitions.
        MS-DOS 3.30 was a very popular version of MS-DOS.
        Due to the problems with 4.0, and 3.31 only being available via OEM,
        many users stuck with 3.30 unless they needed larger hard drive support.
    "3.31":
      desc: |
        MS-DOS 3.31 was only sold through a few OEMs, mainly Compaq.
        This version adds support for hard drives up to 512MB.
        It also does not use as much conventional memory as DOS 4.x or later,
        making it a good choice for 8088/8086 based computers.
  "4.x":
    date: 1988
    desc: |
      IBM DOS 4.00 was IBM's first in-house development effort with DOS.
      Prior to this release, all DOS code had been managed by Microsoft on IBM's behalf (hence the parallel releases).
      With this version, IBM re-engineered the source and added their own enhancements.
      The initial release of IBM PC-DOS 4.00 was extremely buggy.
      It was quickly followed up by a 4.01 update.

      PC-DOS 4.00 adds support for drives up 2 gigabytes and a graphical DOS shell.

      MS-DOS 4 added support for hard drive partitions up to 2GB. It used much more of the base 640K.
  "5.x":
    date: 1991
    desc:
      PC-DOS 5 was much improved over DOS 4. It reduced base 640k memory usage by making use of HMA on 286+ CPUs.

      MS-DOS 5 introduced numerous new features and was a flagship release for Microsoft.
      A full screen text editor EDIT has replaced the former line editor EDLIN supplied since the early days of DOS.
      Microsoft QBasic also shipped in DOS 5 replacing GW-BASIC.
      MS-DOS 5 also supported 2.88MB 3.5" floppy disks as well as hard disks up to 2GB in size.
      The memory management was rewritten to allow DOS to utilize the High Memory Area and Upper Memory Area
      to reduce its usage of conventional memory.
      Numerous bugs were noticed shortly after launch which lead to the 5.0a update.
  "win 3.x":
    date:
      "3.1": 1992
      "3.11": 1993
    desc:
      Windows 3.1 requires an installation of either MS-DOS or PC-DOS
      and we recommend using MS-DOS 6.22 if you are unsure of a version.
    note:
      1992 推出 3.1 台湾字库中文版，存在诸多问题。
      1993 年与中国政府合作推出简体中文版，引入中易宋体和郑码输入法，1994 年更新为 3.2 简体中文版。
  "6.0":
    date: 1993
    desc: |
      MS-DOS 6.0 includes many new utilities and features,
      including a disk defragmenter, disk compression, anti-virus, a new backup system,
      and pc-pc file transfer tools.
  "6.22":
    date: 1994
    desc: |
      Microsoft DOS 6.22 was the last standalone version from Microsoft.
      It was also the last from Microsoft to run on an 8088, 8086, or 286.
  "7.x":
    date: 1995 - 2001
    desc: As part of Windows 9x.
    p.s.:
      LBA:
        name: "Logical Block Addressing"
        link: https://en.wikipedia.org/wiki/Logical_block_addressing
        desc: |
          In 1996, support for logical block addressing (LBA) was introduced in Windows 95B and DOS 7.10
          in order to support disks larger than 8 GB.
          However, this design rule was partially compromised in more recent Microsoft implementations of the MBR,
          which enforce CHS access for FAT16B and FAT32 partition types 0x06/0x0B, whereas LBA is used for 0x0E/0x0C.
    win95: |
      Support for VFAT long file names.
      JO.SYS is an alternative filename of the IO.SYS kernel file and used as such for "special purposes".
      JO.SYS allows booting from either CD-ROM drive or hard disk.
      Last version to recognize only the first 8.4 GB of a hard disk.
      The VER internal command reports the Windows version 4.00.950,
      applications through the MS-DOS API would be reported a version number of 7.00.
    win95osr2/win98se: |
      Added support for the FAT32 file system, and was the last version that could boot to the command line from a hard disk.
      The VER internal command reports the Windows version 4.00.1111, 4.10.1998, or 4.10.2222 depending on the version of Windows,
      while applications through the API would report version 7.10.
    win me: |
      Booting from the hard disk to a command line only was no longer permitted,
      AUTOEXEC.BAT and CONFIG.SYS files were no longer loaded nor parsed before loading the Windows GUI;
      booting from floppy disk was still permitted to allow for emergency recovery
      and this version is included in Windows XP and later versions for creating MS-DOS Startup Disks.
      The VER internal command reports the Windows version 4.90.3000, or 5.1 when created from newer versions of Windows.
      Applications requesting the version through the API would report version 8.00 .
  "7.1 (CDU)":
    desc: |
      MS-DOS "7.1" CDU is a popular custom compilation of MS-DOS and useful utities created by China DOS Union.

PC-DOS:
  wiki: https://en.wikipedia.org/wiki/IBM_PC_DOS
  "desc": |
    IBM PC-DOS was an IBM branded version of MS-DOS licensed from Microsoft for use on the IBM PC system.
    The first version of PC-DOS was released in August 1981 with the IBM PC.
    Versions of PC-DOS paralleled that of MS-DOS up until version 6.x,
    where PC-DOS was independently maintained by IBM up until 7.1, the last version.

    Although not the only OS available for the IBM PC when it came out,
    it quickly became popular due to its low cost in comparison to the others.
  "6.1":
    date: 1993
    desc: |
      IBM skipped version 6.0 to avoid confusion with MS-DOS 6.0.

      QBasic was dropped and the MS-DOS Editor was replaced with the IBM E Editor.
      PC DOS 6.1 reports itself as DOS 6.00.
  "7.0":
    date: 1995
    desc: |
      Adds the REXX Programming language, XDF 1.86MB 3.5" floppy disk support, and Stacker Disk compression.

      Note: The XDF format can not be written on USB floppy drives,
      or under some OSes, and is not compatible with most emulators.
      Physical disks must be written under DOS using the provided XDF disk creation tool.
    XDF:
      fullname: IBM Extended Density Format
      wiki: https://en.wikipedia.org/wiki/IBM_Extended_Density_Format
  "2000":
    date: 1998
    desc: |
      PC-DOS 2000 is a minor update to PC-DOS 7.0 that fixes Y2K bugs.
      It is marketed as "PC-DOS 2000" but it reports itself as "IBM PC DOS 7.00, revision 1".
      7.0/2000 was the last complete release.
  "7.1":
    date: 1999 - 2003
    desc: |
      PC DOS 7.1 added support for Logical Block Addressing (LBA) and FAT32 partitions.
      Various builds from 1999 up to 2003 were not released in retail,
      but used in products such as the IBM ServerGuide Scripting Toolkit.
      A build of this version of DOS appeared in Norton Ghost from Symantec.
      Version 7.1 indicates support for FAT32 also in MS-DOS.

"中文 DOS":
  - name: pdos95
    desc: |
      Windows 98 自带的中文 DOS 系统。
      纯 DOS 下可通过 Windows\Command 目录下的 Pdos95.bat 脚本启动，
      由其中调用的多个文件 (及根目录下的 PDOS.DEF) 组成，
      默认使用 Ctrl+Space 和 Ctrl+Shift 切换输入法。
      其启动为新的外壳程序，执行 quit 退出。
        pbios.exe ∥中文系統內核
        font16.exe∥16＊16字體驅動程序
        hzvio95.exe∥MS－DOS7.00顯示驅動程序
        hzkbd.exe∥通用詞典輸入法
        instdict pinyin∥安裝拼音輸入法
        // instdict pinyin a_f1∥Alt＋F1 轉換至拼音輸入法
        ctrlpan∥安裝控制台程序
  - name: 天汇汉字系统
    desc: 单文件 tw.exe
  - name: ucdos
    desc: |
      希望汉字系统，统一汉字磁盘操作系统 (Universal Chinese Disk Operation System) ，
      20 世纪 80 年代到 90 年代较为流行，可运行 WPS 。
  - name: ccdos
    desc: |
      汉字磁盘操作系统 (Chinese Characters Disk Operation System) ，
      20 世纪 80 年代较为流行，众多中文 DOS 系统的基础。
  - name: 中文之星
    desc: 英文Windows外挂式中文操作系统
extra:
  - topic: RAMDRIVE.SYS
    title: How to Setup a RAM Drive in MS-DOS
    link: http://www.dosdays.co.uk/topics/ram_disks.php
    desc: |
      device=c:\dos\ramdrive.sys [disksize sectorsize [numentries]] [/E|/A]
      - `disksize` the size of the formatted RAM drive in KiB (so 32767 would create a 32 MiB RAM drive).
      - `sectorsize` defines the sector size in bytes. Typically you should use 512.
      - `numentries` restricts the number of files and directories you can have in the root directory of the RAM drive.
        This can be from 2 to 1024, default to 64 .
      - `/E` 使用 1 MiB 以上的扩展内存 XMS (Extended Memory Specification) ，又被称为 UMB (Upper Memory Blocks) 或 UMA (Upper Memory Area).
        需要加载 HIMEM.SYS 驱动，兼容接替 EMS 。推荐开启此选项。
      - `/A` 使用 640 KiB 以上的延伸内存 EMS (Expanded Memory Specification) ，又被称为 HMA (High Memory Area) 。
        需要加载 EMM386.SYS 驱动。此技术已废弃，请使用其接替者 XMS/UMB 。
  - topic: XMSDSK.EXE
    link: https://github.com/IsaacSchemm/netbootcd-source/blob/master/xmsdsk%20README%20(for%20floppy%20distribution).txt
    desc: |
      XMSDSK 程序可在命令行或 AUTOEXEC.BAT 下使用 XMS 内存创建磁盘，可指定盘符，在 DOS 下还可以动态改变大小。
      中文 DOS 7.1 包含此程序。
  - topic: "QEMU virtual network interface card"
    link: https://computernewb.com/wiki/QEMU/Devices/Network
    nic:
      rtl8139:
        speed: 10-100 MB/s
        MinimumOS: [ "Windows 95", "Linux Kernel 2.5.5",  "MS-DOS 3.x" ]
      pcnet:
        speed: 10 MB/s
        MinimumOS: Windows 3.1
  - title: "Why does DOS ask for the current date and time upon booting?"
    link: https://retrocomputing.stackexchange.com/questions/16395/why-does-dos-ask-for-the-current-date-and-time-upon-booting/16396
    desc: |
      早期计算机硬件不包含 RTC 实时时钟电池，因此 DOS 每次启动时 COMMAND.COM 都会提示设置校准当前日期和时间。
      一些设备提供了自动记录时间的功能，AUTOEXEC.BAT 最早的设计用途之一即自动加载这些设备的驱动
      以自动完成时间设置，因此存在 AUTOEXEC.BAT 文件时就不会再提示校准时间了 (DOS 2.x 之后的版本?) 。
      现代计算机都内置了 RTC 实时时钟电池，也将不需要这个功能了。
      MS-DOS 直到 7.0 (Windows 95) 才去掉这个时间校准的设置。
  - topic: "DOS 下安装 Windows 98 简体中文第二版"
    "windows 3.2": |
      MS DOS 6.22 下启动安装 windows 3.2 ，安装成功，但尝试设置从硬盘启动失败。
      经网上搜索，再尝试使用 "fdisk /mbr" 修复 MBR，貌似 MBR 启动记录修复好了，
      但 MBR 还是报找不到操作系统，应该是系统分区设置还是有问题
      (使用 "format /s" 或 "sys" 命令可以正确设置软盘启动，但未能正确设置硬盘主分区启动？) 。
      但安装过 Windows 98 测试后再使用 "format /s" 可以将 C 盘格式化为可启动的 DOS 盘，
      推测是因为之前硬盘创建了两个主分区导致的问题，
      安装 Windows 98 是修改成了 DOS/Windows 传统固定的一个主分区和一个扩展分区布局。
    "windows 98 光盘安装":
      尝试从光盘启动安装时，报错找不到光驱 "OEMCD001" 的驱动程序。
      网上找了一圈，https://github.com/hakuna-m/wubiuefi/blob/master/src/grub4dos/README_GRUB4DOS.txt
      提到可使用 "ELTORITO.SYS" 作为光驱驱动 (DOS 和 Windows 9x 下可访问 grub4dos 模拟的光驱)。
      Example usage of eltorito.sys in CONFIG.SYS
        device=eltorito.sys /D:oemcd001
      Corresponding MSCDEX command which can be placed in AUTOEXEC.BAT
        [LH] MSCDEX /D:oemcd001 [/L:X]
      QEMU 虚拟机可正常启动 FreeDOS 安装光盘，其中应该提供了可用的 DOS 光驱驱动，
      但简单看了下未能直接看到对应的光驱驱动文件，暂放弃设置光驱驱动。
    "windows 98 硬盘安装":
      查看 Windows 98 自带的安装帮助文件 "SETUP.TXT" ，
      其中提到将所有文件拷贝到硬盘后在 DOS 下直接执行 "setup" 安装也是可以的。
      但实际测试时发现执行 setup 总是自动退出了，也看不到任何错误提示。
      参考 "SETUP.TXT" 的提示使用 "setup /is" 跳过检查磁盘后，
      成功启动安装程序了，但很快报读写磁盘失败，安装失败。
      此时我的硬盘分区使用 Linux 下的工具创建了两个主分区，
      第一个主分区 C 盘未格式化，第二个主分区 D 盘保存了 Windows 98 安装文件。
      而使用 DOS 下的 "FDISK" 等工具操作硬盘时，只能创建一个主分区。
      所以应该是 Windows 98 只支持一个主分区加一个扩展分区的固定模式。
      重新分区磁盘为此固定模式，并在 DOS 下把 Windows 安装分区 C 盘也格式化好，
      果然这回安装程序开始正常安装了。
      安装开始会提示创建一张 DOS 启动盘，此即得到 Windows 98 自带的 DOS 7.x 工具盘。
      但重启之后虚拟机就一直黑屏，看不到状态，
      不知道是还在后台安装中但是显示有问题，还是又出现其他问题导致安装过程卡死了，只能再多等等看看。
    "光盘启动":
      desc: |
        http://reboot.pro/index.php?showtopic=9950

        Eltorito.sys is a Dos CD-Rom device driver for use in making PC-bootable CD-Roms
        that (should) boot on any interface (Atapi and SCSI).
        Eltorito.sys will only work when your CD-Rom is in "no emulation" mode,
        it will not work in floppy or harddisk emulation mode!
        To get your CD-Rom in "no emulation" you must use some bootstrap loader,
        like isolinux.bin or diskem1x.bin!

        光盘驱动 "ELTORITO.SYS" 的名字来源于光盘启动技术标准
        [El-Torito](https://wiki.osdev.org/El-Torito) 的名字。
        El-Torito 支持模拟软盘、模拟硬盘及不模拟 3 种方式的可启动光盘。
        顾名思义，"ELTORITO.SYS" 是为了支持在各种硬件环境下加载读取可启动光盘以启动电脑。
        上文提到 "ELTORITO.SYS" 只有在使用 "不模拟" 方式的启动光盘的情况下才能正常工作 (?) 。

        在 "不模拟" 方式下，启动代码需要支持从光盘启动，
        可 [使用 grub](https://wiki.osdev.org/Bootable_El-Torito_CD_with_GRUB_Legacy)
        或 [Syslinux](https://wiki.syslinux.org/wiki/index.php?title=The_Syslinux_Project)
        系列的 ISOLINUX 作为启动器。
        syslinux 是支持在不同设备和环境下启动 Linux 的启动器，也可以用来启动其他系统。
        可从 kernel.org [下载 syslinux 软件包](https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.xz) ，
        其中包含源码与预编译版本。

        syslinux 的 dosutil 下包含了 "eltorito.sys" 。
        看了下 FreeDOS 正是使用 ISOLINUX 制作的启动光盘，
        包含友好的启动菜单，并通过 memdisk 加载 FreeDOS 启动软盘。
        找到 FreeDOS 启动软盘使用了光盘驱动 "UDVD2.SYS" 。

        genisoimage 命令可通过如下选项配置可启动光盘：
        - `-b file` 指定启动代码文件。
        - `-c boot/boot.cat` - Makes the Boot Catalog accessible as data file.
        - `-no-emul-boot` 使用非模拟方式。
        - `-boot-load-size 4` 指定加载启动代码的 512 扇区数。
          默认只加载 4 个 512 扇区共 2048 字节，通常即 1 个光盘扇区。
          启动代码文件大于 2048 字节时必须按需指定。
        - `-boot-info-table` Patches the boot file to contain info about the CD image. It's needed by GRUB.

        另外有个对应的 `geteltorito` 命令，可以从光盘镜像中把启动文件提取出来，
        同时可看到相关的可启动光盘信息。
        操作命令示例: ` -o FD12-iso-boot.img FD12CD.iso` 。

        在 MS-DOS 6.22 和 Windows 98 自带的 MS-DOS 7.1 下测试使用 UDVD2.SYS 驱动访问光驱均未成功。
        回到 FreeDOS 试了下，发现原来之前搞错了，FreeDOS 光盘也未能在 FreeDOS 成功访问光驱，
        仅仅是使用 IOSLINUX 成功加载了 FreeDOS 启动软盘，这与 Windows 98 安装盘的情况是类似的。
        尝试使用当前最新 syslinux 自带的 "ELTORITO.SYS" 也未成功。
        FreeDOS 下有一个 devload 命令，
        可以在命令行下模拟 "CONFIG.SYS" 文件 "DEVICE=" 加载驱动的操作，可以方便的进行驱动测试。

        最后偶然发现是 QEMU 虚拟机启动时设置了机器类型为 `-machine q35,vmport=off` ，
        相对于 DOS 和 Windows 98 来说，这是较新的机器硬件，因此可能存在兼容性问题。
        将机器类型修改为 `-machine pc,vmport=off` 后，再测试就发现一切都顺利了，
        不仅可使用 FreeDOS 的 UDVD2.SYS 驱动访问光驱，
        而且在 MS-DOS 6.22 或 7.1 下使用 Windows 98 自带的 "OAKCDROM.SYS" 光盘驱动也可以成功访问光驱。
        Windows 98 启动光盘自带了多个光驱驱动，应该能够很好的兼容其发行年代的多数机器，
        也应该能够兼容虚拟机软件提供的旧硬件设备，
        这里一不小心按现代系统的习惯使用了较新的机器硬件，算是自己给自己挖了一个很大的坑。

        但经简单测试使用光驱时访问速度非常慢，还是从硬盘安装更方便。
        而且安装文件保留在硬盘上，也更方便后续有需要时从 "安装盘" (硬盘目录) 添加驱动或程序等组件。

        之前安装 Windows 98 重启后黑屏应该也是硬件兼容的问题，
        用回较旧的硬件后再测试，果然 Windows 98 也能顺利的完成安装重启了。
      "MS-DOS 模式": |
        "MS-DOS 模式" 支持以 虚拟86模式 运行 DOS 程序，可使用 "Alt+Enter" 快捷键切换全屏或窗口化显示，
        在窗口化模式下支持显示中文 (但不能直接使用 Windows 的中文输入法?) 。
        全屏模式下可运行图形程序 (如 mario.exe 等) ，可加载中文 DOS 系统以支持中文。
        天汇中文系统在窗口化和全屏模式均可使用，但测试中遇到过窗口化时花屏的问题 (可能是显卡兼容性导致的问题?) 。
        可在虚拟86模式下安装和使用 Turbo C 2 等开发环境。
        Turbo C 2 安装时需要指定相关安装目录，
        后续移动安装目录时可使用其附带的 TCINST.EXE 程序更新相关目录配置。

        一些 DOS 程序要求 DOS 实模式环境，如 pqmagic 或中文 DOS 启动盘附带的 shutdown.com 等，
        这些程序不能在虚拟86模式下执行，需要重启到纯 DOS 下才能执行之。
      "网卡驱动":
        使用 pcnet 网卡测试，某次安装时貌似被识别为 rtl8129 网卡，但未仔细测试是否能正常工作，
        后来重装 Windows 98 后就未能自动识别了，之前可能是识别错误 (?) 。
        在 "控制面板" "添加硬件" 手动安装系统自带的 AMD 的一个 pcnet 驱动，
        提示设置中断请求 IRQ 等资源配置，之后设备管理区可看到网卡，但不能正常工作。
        pcnet 网卡是 PCI 接口，应该不需要手动设置 IRQ ，应该还是驱动不匹配。

        因为 rtl8139 网卡使用非常广泛，网上可看到其在 DOS 和 Windows 98 均有驱动。
        换用 rtl8139 网卡测试，未能自动识别到硬件，怀疑是 Windows 98 默认缺少 rtl8139 的驱动。
        在其厂商 Realtek 的官网找到 rtl8139 最新驱动的下载页面
        https://www.realtek.com/en/component/zoo/category/network-interface-controllers-10-100m-fast-ethernet-pci-software ，
        其提供了各版本 Windows 驱动，还提供了 DOS 下的驱动 (DOS 下的驱动分为设备驱动和 Packet Driver 两部分) 。
        下载测试最新的 2008 年版本的 Windows 98/ME 驱动，
        结果发现 Windows 98 下选择从磁盘安装此驱动时没有正常列出驱动列表，无法安装。
        网上找到其 2003 年版本的带驱动安装程序的支持 Windows 9x 到 XP 的版本
        https://driverscollection.com/?H=RTL8139%28A/B/C/D/8130%29/810X%20Family&By=RealTek ，
        可以安装上驱动文件了，但还是看不到网卡设备。
        网上再找到支持 DOS 到 Windows 9x 的版本 (这里还提供了一张 rtl8139 硬件照片)
        http://www.win3x.org/win3board/viewtopic.php?t=15864&language=en ，
        测试也不行。
        网上再找到有一个网页提供了 qemu 虚拟机的各种驱动
        https://www.claunia.com/qemu/drivers/index.html ，
        其中提供的 rtl8139 驱动是一个 2006 年的支持 Windows 98SE 到 2000 的版本，测试也不行。
        这时怀疑是否 qemu 使用用户态网络 `-nic user` 消耗过多 CPU 导致的问题，
        不使用 qemu 用户态网络测试，结果还是不行。

        最后在一个帖子找到最终原因 (2015 年的发帖, 2020 年的回复)
        https://superuser.com/questions/909206/windows-98-networking-doesnt-work-in-qemu ，
        原因是 Windows 98 不支持 qemu seabios 的即插即用 (Plug&Play) BIOS ，
        因此不能正常识别和使用 PCI 设备，
        在 Windows 设备管理器下确实看到有个即插即用 BIOS 未能正常工作的问题。
        使用 PCI 接口的显卡也未能识别出硬件信息 (仅被作为仅 16 色的标准 VGA 设备使用) 。
        这个问题的根本原因还是 Windows 98 系统的兼容性问题。

        解决办法是换用使用 ISA 接口的 ne2k_isa 网卡，但 ISA 接口的网卡使用稍麻烦一些。
        需要手动安装驱动 "Standard National Semiconductor NE2000Plus" ，
        我自己测试是在 Windows 98 自带驱动的厂商 "National Semiconductor" 下找到 "NE2000Plus" 相关的驱动。
        安装驱动后需要注意配置设备的中断请求 IRQ 和输入输出范围，
        并且这两个配置必须与 qemu ne2k_isa 设备的配置一致。
        如我测试的配置为 `-device ne2k_isa,netdev=net0,mac="${mac}",irq=11,iobase=$(( 0x0260 ))` 。
        开始测试时不小心配错了 IRQ ，结果 Windows 98 下设备管理器显示设备正常工作了，
        但就是无法访问网络，DHCP 无法使用，设置静态 IP 后访问网络也不同，并且没有任何错误提示。
        订正配置后终于可以使用网络了，使用 qemu 的用户态网络也可以让 Windows 自动使用 DHCP 配置了。
        但在 macOS 下尝试使用 vde 连接 vmnet-shared 网络没成功，原因未知 (?) 。
      "CPU Cooler":
        http://www.benchtest.com/cooler.html
        Windows 98 空闲时可能会使 CPU 空转，使用 AmnHLT 等软件可避免或减少 CPU 空转。
      "即插即用 PnP (Plug and Play)":
        link: https://en.wikipedia.org/wiki/Plug_and_play
        desc:
          即插即用 PnP (Plug and Play) 设备指不需要物理硬件配置或用户参与配置避免资源冲突的设备。
          Windows 95 起支持在旧 ISA 接口上支持 PnP ，称为 "Legacy Plug and Play" 。
          新的 PCI 接口支持新的标准的 PnP ，1995 年左右使用 PCI BIOS 技术， 2000 年后使用新的 ACPI 规范。
          USB 等接口进一步还支持热插拔。
      "Unofficial Windows 98 Second Edition Service Pack":
        http://www.htasoft.com/u98sesp/
        有国外网友提供了非官方的 win98 升级包 U98SESP3.EXE ，当然只支持英文版，在中文版上未测试成功。
      "KernelEx":
        开源项目，支持扩展 win98 内核以至此 Firefox 8.0 等较新的程序。
      "PCI bus":
        qemu 支持 `-no-acpi` 选项，
        see https://bugzilla.redhat.com/show_bug.cgi?id=1611516 ,
        what happens here that Seabios doesn't see ACPI tables from QEMU
        and fallbacks to legacy ACPI tables it has built-in.
        To disable this one need to build Seabios with CONFIG_ACPI_DSDT option turned off.

        试了 2021 最新的或 2012 年旧版的 seabios ，尝试设置 `-no-acpi` 等，
        windows 98 还是无法正常使用 "即插即用 BIOS" 。
        尝试使用 bochsbios ，结果开机就看不到显示器输出，应该是与显示设备的兼容设置有问题，未继续深究。

        参考文章 "Install QEMU Tablet Driver on Windows 98"
        https://computernewb.com/wiki/Install_QEMU_Tablet_Driver_on_Windows_98 ，
        Windows 识别到的 "即插即用 BIOS" 实际上应该是 "PCI bus" 设备，
        PCI 支持新的标准即插即用 PnP 规范，可取代 Windows 95 开始引入的 "Legacy PnP" 。
        Windows 98 也开始支持 PCI 接口，只是这里对 qemu 虚拟机的硬件识别有问题 (?) 。
        升级此硬件的驱动程序，手动选择 "所有硬件" ("Show all hardware")
        并选择 "(Standard system devices)" 下的 "PCI bus" 。
        安装 PCI bus 驱动后， Windows 将自动识别出许多硬件设备并重新安装驱动，
        在安装过程中光驱可能不可用，所以需要提前将 Windows 98 安装盘拷贝到硬盘上备用。
        使用 2005 年的新泰 win98 gho 测试，
        安装完成后系统即可自动识别使用网卡 rtl8139 ，声卡 AC97 等设备。

        Windows 98 许多驱动还是 [VxD](https://en.wikipedia.org/wiki/VxD) (Virtual Xxx Driver) 驱动。
        Windows 98 开始引入 [WDM](https://en.wikipedia.org/wiki/Windows_Driver_Model) (Windows Driver Model) 驱动，
        但参考 https://community.osr.com/discussion/35206/wdm-on-windows-98 ，
        貌似需要使用 "Ntkern.vxd" 支持之，
        并且许多硬件的驱动在不同的 Windows 版本上都不同，
        显然 Windows 98 下只能查找使用支持 Windows 98 的驱动，难以移植使用 XP 等新系统的驱动 (?) 。
      显卡驱动:
        使用新泰 win98 测试。
        使用 vmware-svga 显卡，安装 PCI bus 驱动后可被 windows 98 正确识别出来，但未能正常工作。

        可以从 vmware 安装包中解压出 vmware tools 安装光盘，并解压出 vmware-svga 等的驱动程序。

        7z e VMware-workstation-full-12.5.5-5234757.exe -o/media/mem/ Core.cab
        7z e /media/mem/Core.cab -oVMware-workstation-full-12.5.5/ windows.iso winPre2k.iso winPreVista.iso
        rm /media/mem/Core.cab

        7z e VMware-workstation-full-15.5.1-15018445.exe -o/media/mem/ ToolsIsos.cab
        7z x /media/mem/ToolsIsos.cab -oVMware-workstation-full-15.5.1/
        rm /media/mem/ToolsIsos.cab

        cd VMware-workstation-full-15.5.1/
        7z e winPre2k.iso "VMware Tools.msi" -so > /media/mem/VMwareTools.msi
        7z e /media/mem/VMwareTools.msi Data1.cab -o/media/mem/
        7z e /media/mem/Data1.cab VMX_SVGA.DRV VMX_SVGA.vxd vmx_svga.inf9X -ovmx_svga-win9x/
        mv vmx_svga-win9x/vmx_svga.inf{9X,}
        rm /media/mem/{Data1.cab,VMwareTools.msi}

        尝试从 vmware tools 中提取并升级驱动，还是一样的问题。
        查看设备详情，发现是因为资源占用与默认的标准 VGA 设备冲突，
        删除默认的标准 VGA 设备后重启，即显示其可正常工作，
        可设置使用 32 位真彩色，但此时有个问题，即看不到虚拟机的鼠标指针。

        尝试换用 cirrus-vga ，仍然自动识别并安装好驱动 (新泰 win98 自带了此驱动?) 。
        此时虚拟机鼠标指针也能正常使用了，可见 cirrus-vga 的兼容性更好，
        但其只能设置 24 位真彩色。但是从显示效果上看都比较粗糙，没看出差别 (?) 。
