虚拟机中安装Win98
文章目录
- 一、下载Win98
- 二、制作可启动光盘
- 三、VMware中安装Win98
- 四、Qemu中安装Win98
- 1. Qemu的安装
- 2. 安装Win98
Win98是微软于1998年发布的16位与32位混合的操作系统,也是一代经典的操作系统,期间出现了不少经典的软件与游戏,还是值得怀念的。
本文笔者就介绍一下在VMWare中以及Qemu中安装Win98。
一、下载Win98
可以去https://msdn.itellyou.cn/下载,这里把Win98中文版的下载链接复制过来:
ed2k://|file|SC_WIN98SE.exe|278540368|939909E688963174901F822123E55F7E|/
这是一个自解压EXE文件,运行即解压出两个文件夹:WIN98
和WIN98SE
,前者为第一版,后者为第二版。
二、制作可启动光盘
由于下载的不是可启动光盘,所以只适用于硬盘安装,比较麻烦。为了支持光盘安装,需要将之制作为可启动的光盘镜像,ISO文件,方便后面虚拟机中安装使用。
- 下载
win98.bif
由于前面下载win98文件不包括光盘启动信息,所以需要一个win98的光盘引导文件,网上有资源,可以去网上搜索win98.bif
,也可以去下载笔者使用过的win98.bif
- 制作光盘
在另一个目录新建一个目录win98se
,然后将之前解压出来的WIN98SE
复制到新建的目录中,并将之改名为WIN98
。然后打开UltraISO
,使用添加目录
将win98se
目录添加进来,或者在win98se
目录右键,在UltraISO
菜单中执行添加到win98se.iso
。
使用UltraISO
打开ISO可以看到光盘是不可引导的光盘:
在启动中执行加载引导文件...
把之前下载的win98.bif
文件添加进来,此时变为“可引导光盘”了,最后记得保存,Win98的可启动光盘镜像就制作好了。
三、VMware中安装Win98
在新建虚拟机时一定要选择自定义配置,不能使用推荐配置,因为推荐配置中硬盘是使用的IDE接口,在VMWare虚拟机中需要使用SATA接口,否则会报错:
由于前面已经制作好了Win98的可启动光盘镜像,这里直接使用,VMWare可以识别到是Windows 98系统。
如果宿主机的内存充裕,可以选择512M的内存,但不能选择太大的内存,Win98支持不了。
注意:这里一定要选择SATA类型的虚拟磁盘:
设置好虚拟硬件后,就可以启动虚拟机,安装Win98了:
安装程序会默认配置使用整个未分配的磁盘空间:
启用大磁盘支持:
安装程序会自动格式化C盘:
安装程序自动填充好产品密钥,可以不用修改:
这里需要设置计算机名
与工作组
:
安装完成后,第一次进入系统:
为了更好的体验,需要安装VMWare Tools
:
安装好VMWare Tools
后,就可以设置更高的分辨率和色彩了:
此时还有一些设备没有安装好驱动,比如声卡与USB设备,这需要使用之前笔者上传的windows 98驱动.7z,它也是一个ISO文件,使用VMWare虚拟机加载光盘为该ISO文件即可。
安装好驱动后,重启就可以看到音量图标和AudioPCI Mixer
图标了:
至于USB,将硬件设置USB兼容性设置为USB 1.1
即可:
强烈建议安装一下chip
目录中setup
安装程序,可以安装不少驱动:
至此,就可以怀念一下Win98的风采了。
Win98下可以安装的Firefox版本最高为2.0
可以安装Qt 4.4.3:
还可以安装C++ Builder 6
以及Delphi 7
,说到它们,可是当年风光无限的开发软件,想必如今还有不少使用它们开发的软件还在运行吧,或者还有公司在使用它们开发或者维护软件吧,可即便如此,还是挡不住Borland
的没落,着实可惜了。
笔者也使用过C++ Builder 6
以及Delphi 7
,确实好用,为此笔者特意尝试了一下在Win98下使用C++ Builder 6
编译一个程序然后在Win10下来运行:
可以看到运行得非常好,而且依赖是相当少,仅依赖3个文件,这三个文件还只有3.33M。
四、Qemu中安装Win98
VMWare对Win98的支持还是不错的,安装过程还是非常顺利的(唯一注意的点就是硬盘类型要选择SATA),各种驱动程序也比较容易找到,但是随着VMWare版本的提升,发现Win98在使用过程中会卡死,显示画面不同步等等情况。于是笔者想尝试使用Qemu来安装一下Win98。
1. Qemu的安装
可以去Qemu官网查看Windows的安装方法,可以直接下载编译好的安装包,也可以在MSYS2中安装:
由于笔者是安装了MSYS2,所以这里笔者选择在MSYS2中安装Qemu的最版本8.2.1
:
2. 安装Win98
由于Qemu是使用命令行的方式来执行的,就没VMWare简单、直观,上手难度还是非常大的,需要熟悉各参数的用法及意义。
首先,创建磁盘:
qemu-img create -f qcow2 win98 5G
-f qcow2
是表示创建qcow2
格式的磁盘,它支持创建的磁盘格式有:
- raw
- qcow2
- vmdk
- vdi
- vhd(vpc)
- vhdx
- qcow1
- QED
等等,可以使用qemu-img --help
查看:
Supported formats: blkdebug blklogwrites blkverify bochs cloop compress copy-before-write copy-on-read dmg file ftp ft
ps host_device http https luks nbd nfs null-aio null-co parallels preallocate qcow qcow2 qed quorum raw replication sn
apshot-access ssh throttle vdi vhdx vmdk vpc vvfat
这里选择qcow2
可以尽量减少宿主的磁盘占用。
创建好磁盘后就可以使用前面的ISO安装镜像进行安装了:
qemu-system-i386 -m 512 -smp 1 -boot c -k -rtc base=localtime,clock=host --accel tcg,thread=multi -cpu pentium3 -device sb16 -vga std -hda "win98" -cdrom "vmware_win98.iso" -drive file="win98se.iso",if=ide,media=cdrom
全部是命令行参数,这里做一个简单说明:
- -m 512 设定内存大小为512M
- smp 1 设置SMP的CPU个数为1
- -boot c 设置设备启动顺序:a为软件;c为硬盘;d为光盘;n为网络
- -rtc base=localtime,clock=host 设置虚拟机使用宿主机器的本地时间
- –accel tcg,thread=multi 设置加速方式,这里是设置多线程TCG的方式。可以使用
qemu-system-i386 -accel help
查看可使用的加速方式,笔者的为tcg
与whpx
,前者为默认;后者为Win10的Hyper-V。Hyper-V需要在Win10中安装启用,但是与VMWare有冲突,启用后,会导致VMWare中的虚拟机很卡,很慢。 - -cpu pentium3 设置cpu为奔腾3,可以使用
qemu-system-i386 -cpu help
查看可用的CPU列表。 - -device sb16 设置声卡设备,sb16为
Creative Sound Blaster 16
声卡,win98有相应的驱动程序。想要添加更多设备,可以使用qemu-system-i386 -device help
查看各种支持的设备列表。 - -vga std 设置显卡为标准显卡。
- -hda “win98” 设置硬盘,可以设置4个硬盘分别为hda,hdb,hdc,hdd,分别代表0、1、2、3号硬盘。fda、fdb代表0、1号软盘。
- -drive file=“win98se.iso”,if=ide,media=cdrom 设置驱动器,包括镜像文件,驱动接口类型以及驱动媒介类型,该方式的挂载优先级高于使用-cdrom的方式。
- -cdrom “vmware_win98.iso” 设置光驱镜像文件。
后面就与VMWare中安装一样了。
使用Qemu安装要比VMWare慢得多,需要耐心等待。由于前面直接设置了声卡为SB16,Win98在安装时自动安装好了驱动,第一次启动进入系统即可听到声音,看到音量图标:
安装好系统后就是安装驱动程序了,最主要的是显卡的驱动程序,不然只有16色的640*480分辨率。
-vga
选项支持:std|cirrus|vmware|qxl|xenfb|tcx|cg3|virtio|none
,可以看到支持vmware,是不是可以使用VMWare中的显卡驱动呢?笔者尝试了一下,不行。Win98原生支持cirrus显卡,有显卡驱动,但是分辨率与颜色最高只能是16位色的800*600了,再高就不支持了。
为了支持更高的色彩与分辨率,笔者从WIKI上查到一个非商业许可的VBE兼容的显卡驱动。可以下载:
140131.zip
140214.zip
然后把它解压出来使用UltraISO制作成ISO文件,启动时加载成光驱:
qemu-system-i386 -m 512 -smp 1 -boot c -k pci-ohci -rtc base=localtime,clock=host --accel tcg,thread=multi -cpu athlon -device sb16 -vga std -hda "win98" -cdrom "vmware_win98.iso" -drive file="win98se.iso",if=ide,media=cdrom -drive file="140131.iso",if=ide,media=cdrom
这里-vga选项可以选择所有支持VBE兼容的显卡,然后安装前面下载的驱动。
进入系统后按如下设置:
重启后就可以选择32位色,并且最高可达1920*1080的分辨率了,但不能再高,否则Win98支持不了:
在Qemu中如果不全屏的话,经常会出现鼠标不同步的情况。还有就是目前没有合适的网卡及驱动程序。
希望能在你怀念Win98的过程中帮助到你,欢迎点赞收藏!
相关文章:

虚拟机中安装Win98
文章目录 一、下载Win98二、制作可启动光盘三、VMware中安装Win98四、Qemu中安装Win981. Qemu的安装2. 安装Win98 Win98是微软于1998年发布的16位与32位混合的操作系统,也是一代经典的操作系统,期间出现了不少经典的软件与游戏,还是值得怀念的…...
《C++游戏编程入门》第4章 标准模板库: Hangman
《C游戏编程入门》第4章 标准模板库: Hangman 4.1 标准模板库4.2 vector04.heros_inventory2.cpp 4.3 使用迭代器04.heros_inventory3.cpp 4.4 使用算法04.high_scores.cpp 4.5 理解向量性能4.6 其他STL容器4.7 Hangman简介04.hangman.cpp 4.1 标准模板库 Standard Template L…...

Linux最小系统安装无法查看IP地址
1,出现原因 服务器重启完成之后,我们可以通过linux的指令 ip addr 来查询Linux系统的IP地址,具体信息如下: 从图中我们可以看到,并没有获取到linux系统的IP地址,这是为什么呢?这是由于启动服务器时未加载网…...

分享个好用的GPT网站
目录 一、背景 二、功能描述 1、写代码 2、联网查询 3、AI绘图 一、背景 我现在的开发工作都依靠ChatGPT,效率提升了好几倍。这样一来,我有更多时间来摸鱼,真是嘎嘎香~ ⭐⭐⭐点击直达 ⭐⭐⭐ 二、功能描述 1、写代码 import java.ut…...

hyperf 二十六 数据迁移 二
教程:Hyperf 参考文章hyperf 二十五 数据迁移 一-CSDN博客 根据之前写的数据迁移的文章,已经说明Hyperf\Database\Schema\Schema::create()实际运行Hyperf\Database\Schema\Grammars\MySqlGrammar::compileCreate()生成的sql字符串。 文档所谓"在…...
linux下如何hook第三方播放器的视频数据?
背景 作为显卡生产商,当用户使用我们的显卡硬解码播放视频时,如果出现比如花屏等问题,为了快速确定问题原因,我们需要一个工具来帮助判断出问题是出在原始视频端,亦或者是应用程序端,亦或者是显卡端。因此我们需要一种方法,来对目标播放器程序进行监控,并捕获到视频源的…...
如何通过Python代码连接OceanBase Oracle租户
背景 目前,连接数据库的Oracle租户,只能通过Java和C的驱动程序,无法通过其他语言的驱动程序。为了满足社区中用户希望在Python代码中连接Oracle租户的需求,这里提供一种替代方案。通过结合使用JayDeBeApi和JDBC,我们可…...

2 月 Web3 游戏行业动态
作者:stellafootprint.network 数据来源:区块链游戏研究页面 - Footprint Analytics 2024 年 2 月,区块链游戏领域在加密货币价格上涨和活跃用户激增的推动下,实现了显著增长。然而,行业在维持用户参与度和留存率方面…...

普发Pfeiffer Prisma QMS200四极质谱计内部电路图装配3D图电路板接口详细注解
普发Pfeiffer Prisma QMS200四极质谱计内部电路图装配3D图电路板接口详细注解...
2024.03.04——2024.03.10 力扣练习总结及专项巩固(二)
1. (22. 括号生成)这里只讨论第二种做法回溯法。在回溯法的函数void backtrack(vector<string>& ans, string& current, int open, int close, int n); 中,可分为三个if条件判断,分别判断当current.size() 2*n,ope…...
前端NodeJs笔记之包结构到进程和线程到命令行到Node模块化讲解
包结构 包实际上是一个压缩文件,解压以后还原为目录,符合规范的目录应该包含如下文件: -package.json 描述文件 -bin 可执行二进制文件 -lib js代码 -doc …...
【Java】获取手机文件名称补充
本地的 ADB 工具路径指的是你电脑上安装的 Android Debug Bridge(ADB)工具的路径。ADB 是 Android SDK 中的一个工具,用于与连接到计算机上的 Android 设备进行通信。你需要确保 ADB 已正确安装,并知道其在你计算机上的位置。 通…...
YoloV8改进策略:BackBone改进|TransNeXt:ViT的鲁棒Foveal视觉感知
文章目录 摘要论文:《TransNeXt:ViT的鲁棒Foveal视觉感知》1、引言2、相关工作3、方法3.1、聚合像素焦点注意力3.1.1、像素焦点注意力3.1.2、在单个混合器中聚合不同的注意力3.1.3、克服多尺度图像输入3.1.4、特征分析3.2、卷积门控单元(Convolutional GLU)3.2.1、动机3.2.…...
三维的旋转平移矩阵形式
在三维空间中,一个物体或坐标系的旋转和平移可以通过一个4x4的变换矩阵来表示。这个矩阵通常被称为仿射变换矩阵或齐次变换矩阵。它结合了旋转矩阵和平移向量的功能,能够同时表示旋转和平移操作。 一个4x4的旋转平移矩阵通常具有以下形式: 复…...

ChatGPT+MATLAB应用
MatGPT是一个由chatGPT类支持的MATLAB应用程序,由官方Toshiaki Takeuchi开发,允许您轻松访问OpenAI提供的chatGPT API。作为官方发布的内容,可靠性较高,而且也是完全免费开源的,全程自己配置,无需注册码或用…...

C语言—冒泡排序
C语言—冒泡排序 原理过程讲解代码1、直接在主函数里面实现2、编写函数进行实现 原理 冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。 以从小到大排序…...

Discord OAuth2授权以及机器人监听群事件
下面文章讲解获取OAuth2授权整个流程,创建机器人,使用机器人监听工会(工会就是创建的服务器)成员变化等等,对接国外的都是需要VPN的哦,对接的时候记得提前准备。 创建应用 点击 此页面添加应用,ÿ…...
微信小程序返回上一页刷新组件数据
在父页面的onShow和onHide里面添加一个标志 onShow() {this.setData({show:true})},onHide() {this.setData({show:false})}, 把这个值传给子组件 <importantList slot"importantConcern" flag"{{barSelect}}" flag2"{{show}}" /> 在子组…...

Aging Cell:匈牙利学者发现肠道微生物组的变化和衰老密切相关
基于DNA甲基化衰老时钟的开发可以准确用来测量生物年龄,生物年龄在很大程度上受生活方式、环境和遗传等因素的影响,大量证据也表明健康生活方式可以延缓衰老并延长寿命。 先前大规模微生物组分析表明,随着年龄的增长,微生物组菌群…...
837. 连通块中点的数量(acwing)
文章目录 837. 连通块中点的数量题目描述维护size的并查集 837. 连通块中点的数量 题目描述 给定一个包含 n 个点(编号为 1~n)的无向图,初始时图中没有边。 现在要进行 m 个操作,操作共有三种: C a b&a…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...