之前说过两个主流的68k Mac模拟器,Mini vMac和BasiliskII。不过它们都没有真正的硬盘模拟,都是通过外置的软驱接口连接的“硬盘”。那么这篇文章将介绍三款非主流的68k Mac模拟器 —— pce-macplus,SoftMac和FUSION PC。
pce-macplus是一款开源的68000 Mac的模拟器,可以说是目前最完整也是最难用的68000 Mac模拟器了。它支持SCSI硬盘的模拟,对8MHz 68000处理器速度的还原也比较准确,而且它可能是目前唯一可以启动Macintosh Classic ROM中的System 6.0.3的模拟器了。缺点是它的配置文件看起来莫名其妙,而且文档也只有寥寥数语,使用起来非常不方便。
SoftMac能模拟68000到68040的Mac,支持System 6,System 7和Mac OS 8系统,图形化的配置界面,相对来说更容易使用,但这个模拟器的兼容性不是很好(应该说是很不好)。一是不兼容64位Windows,因此只能在32位Windows下运行。二是对Mac硬件的模拟可能也很不完善,经常出现崩溃的情况。(实话说,尝试过N种不同的ROM,尝试过N次安装Mac OS,就很少出现成功的情况。)如果你想体验Classic Mac的“炸弹”信息,以及Sad Mac,那么SoftMac是一个不错的选择。
FUSION PC最后更新于2000年,能够模拟68030和68040处理器的Mac。但只能在DOS操作系统中运行,要求主机CPU至少为486。只支持Sound Blaster系列声卡(及兼容卡)。FUSION在DOSBox中运行良好,只是速度较慢,毕竟有两层模拟。如果有一台古董电脑,并且声卡兼容Sound Blaster也有DOS驱动的话,可以试试FUSION PC模拟器。
pce-macplus
先来看看pce-macplus这款最难用的Mac模拟器。
pce系列的模拟器不仅仅可以模拟68000处理器都Mac,还能模拟IBM PC和Atari ST机型。目前最新版本是0.2.2版,建议使用pce-0.2.2-macplus.zip压缩包,这是Windows版的模拟器,里面有Macintosh Plus,Macintosh SE和Macintosh Classic三种机型的ROM以及System 7镜像,还有一个工具磁盘,而且默认已经配置好了。
获取pce-macplus:PCE - PC Emulator
Linux和Mac OS X用户可参考此教程进行编译和配置:http://www.toughdev.com/content/2016/11/pcemacplus-the-ultimate-68k-classic-macintosh-emulator/
其中disk1.img是空白800K软盘镜像,hd1.img是System 7硬盘镜像,hd2.img是工具磁盘镜像。.cfg结尾的文件是已经写好的机型配置文件,.bat文件是启动模拟器的脚本文件,.dat是该配置文件对应的机型PRAM文件。三个目录,bin目录存放了模拟器程序和一些工具,doc目录存放的是模拟器的文档和说明,rom目录中含有各Mac机型的ROM。
运行其中一个bat文件就可以启动模拟器,默认是启动hd1.img的System 7,可以按Ctrl-Alt释放鼠标。如果需要自己创建磁盘镜像并安装系统,需要先了解一下模拟器配置文件。
pce的配置文件
建议在查看此节之前,先体验一次默认设置下的pce-macplus模拟器。并简单了解以下Macintosh Plus,Macintosh SE和Macintosh Classic机型的信息。
以下为配置文件详解,重点的内容将以粗体标出,其余内容可以忽略。
path
path = ""定义的是路径,模拟器会在这些路径中寻找ROM和磁盘镜像。例如可以在pce的文件夹中创建一个叫“img”的目录用于存放软盘镜像,就可以在配置文件中添加一行 path = "img"。
memtest = 0
memtest = 0意思是跳过Mac启动时的内存检测,如果需要模拟得更真实些,可以把内存检测打开,即把“0”改为“1”。
system {
# The Macintosh model to emulate. Valid models are:
# mac-plus: A Macintosh 128K, 512K, 512Ke or Plus
# mac-se: A Macintosh SE or SE-FDHD
# mac-classic: A Macintosh Classic
model = "mac-plus"
}
system中的model = "mac-plus"指的是模拟机型为Macintosh Plus,当然如果需要模拟128K,512K和512Ke都可以使用“mac-plus”机型。如果要模拟Macintosh SE则改位“mac-se”,同理,“mac-classic”模拟的是Macintosh Classic。
cpu {
# The CPU model. Valid models are "68000" and "68010".
model = "68000"
# The CPU speed multiplier. A value of 1 emulates a
# 7.8336 MHz CPU. A higher value emulates a faster CPU
# but also takes up more host CPU time. A value of 0
# dynamically adjusts the CPU speed.
speed = 0
}
cpu中的model = "68000"指的是CPU为摩托罗拉68000,可以改为68010但Mac从没用过68010处理器。speed = 0指的是自动调整模拟器速度。但这样设置,在现代电脑上运行时,模拟的CPU会非常快。这个数值控制的是处理器的“倍频”,如果需要较准确地还原模拟器CPU的速度,可以将它设置为“1”,即运行在1 x 7.8336 MHz。
# Multiple "ram" sections may be present.
ram {
# The base address
address = 0
# The memory block size
size = 4096K
# The memory block is initialized with this value.
default = 0x00
}
ram中需要修改的一般只有size = 4096K这一项。这一项修改的是内存大小,单位为KB,但注意不要删除了后面的字母K。
# Multiple "rom" sections may be present.
rom {
# The file from which the rom code is loaded
file = "mac-se.rom"
# The base address
address = 0x400000
# The rom size
size = (system.model == "mac-classic") ? 512K : 256K
# The memory block is initialized with this value.
default = 0xff
}
rom {
# This is the PCE extension ROM.
address = 0xf80000
size = 256K
file = "macplus-pcex.rom"
# The memory block is initialized with this value.
default = 0xff
}
ROM选项不需要修改,除非你需要加载自己的ROM文件,或者ROM初始块的位置。
terminal {
driver = "sdl"
# The terminal escape key. The default is "ESC".
#escape = "CtrlRight"
#escape = "ESC"
#escape = "F12"
#escape = "Menu"
# The terminal scale factor. Only integral values are
# allowed.
scale = 1
# The terminal aspect ratio.
aspect_x = 3
aspect_y = 2
# Add a border around the image
border = 0
# Start in fullscreen mode.
fullscreen = 0
# The mouse speed. The host mouse speed is multiplied by
# (mouse_mul_x / mouse_div_x) and (mouse_mul_y / mouse_div_y)
mouse_mul_x = 1
mouse_div_x = 1
mouse_mul_y = 1
mouse_div_y = 1
}
同样terminal里的选项一般也不需要修改。terminal定义的是输出终端的类型,默认是SDL输出,如果SDL不可用时会使用x11。其中 scale = 1 指的是窗口缩放比例为1x,可以改位其他的整数倍,比如改为2。fullscreen = 0指的是启动时不进入全屏模式,如果改为1则启动时全屏显示。
sound {
# Apply a low-pass filter with the specified cut-off
# frequency in Herz. This is separate from the low-pass
# filter in the sound driver. If the frequency is 0,
# the filter is disabled.
lowpass = 8000
#driver = "null"
#driver = "wav:wav=speaker.wav:lowpass=0:wavfilter=0"
#driver = "oss:dev=/dev/dsp:wav=speaker.wav:lowpass=0:wavfilter=0"
driver = "sdl:wav=speaker.wav:lowpass=0:wavfilter=0"
}
sound中有两个设置。一个是lowpass = 8000,此选项是音频输出的低频滤镜,低于8000Hz的声音将被过滤掉。如果不希望过滤掉8000Hz以下的声音,可以将此值改为0。而另一个选项,driver = "sdl:wav=speaker.wav:lowpass=0:wavfilter=0",一般情况下不需要修改,默认是使用SDL输出声音。
rtc {
# On startup the parameter RAM is loaded from this file. On
# shutdown it is written back.
file = "pram-mac-se.dat"
realtime = 1
# Set the startup disk to the ROM disk. This only works with
# the Macintosh Classic ROM.
romdisk = 0
}
一般rtc里的内容也不需要修改。如果是模拟Macintosh Classic机型,希望从ROM中的磁盘启动时可以将romdisk = 的值改为1。
sony {
# The floppy disk insertion delay. Set this to:
# 0: never automatically insert the disk
# 1: have the disk inserted immediately on startup.
# The System will then either boot from the disk or
# eject it.
# x: delay insertion by x (emulated) seconds.
insert_delay = 15
# The insertion delay can be set for each floppy disk
# drive individually.
#insert_delay_1 = 1
#insert_delay_2 = 15
#insert_delay_3 = 15
}
sony中的选项,一般只有insert_delay = 15,意思是当模拟器启动时,在(模拟器的)几秒钟之后再插入软盘镜像。默认值是15,意思是(模拟器的)15秒后才会插入软盘。当然,15秒后,基本上机器已经判断为是软驱中没有软盘了,会自动从硬盘启动。如果需要开机从软盘启动,可以将这个值改为1。如果是0,则不会在模拟器启动时自动插入软盘。
scsi {
device {
# The SCSI ID
id = 6
# The drive number. This number is used to identify
# a "disk" section. The number itself is meaningless.
drive = 128
# The vendor and product strings are returned by
# the SCSI Inquiry command.
#vendor = "PCE "
#product = "PCEDISK "
}
device {
id = 4
drive = 129
}
device {
id = 2
drive = 130
}
}
scsi中定义的是SCSI硬盘的选项。这里默认定义了三个SCSI设备(device),其中第一个设备的SCSI ID = 6,这是Mac OS系统中检测的SCSI设备ID,而它对应的驱动器号为128,这个drive = 128则是模拟器配置文件中的概念,在下文的disk部分会提到。 SCSI中的设置一般默认即可,不需要手动修改。
之后的serial和video选项都不需要改。直到翻到最后的disk部分。
disk {
drive = 1
type = "auto"
file = "disk1.img"
optional = 1
}
disk {
drive = 2
type = "auto"
file = "disk2.img"
optional = 1
}
disk {
drive = 3
type = "auto"
file = "disk3.img"
optional = 1
}
disk {
drive = 128
type = "auto"
file = "hd1.img"
optional = 0
}
disk {
drive = 129
type = "auto"
file = "hd2.img"
optional = 1
}
disk {
drive = 130
type = "auto"
file = "hd3.img"
optional = 1
}
这里定义了6个磁盘。每一个disk{ }顶一个是一个磁盘,里面都有drive = 表示驱动器号(模拟器里的概念),type = "auto"定义类型(这个不用管),file = "disk1.img"表示镜像文件。 前三个disk{ }都是定义软盘的,后面三个定义的是硬盘。optional = 0或1表示该磁盘是不是可选的磁盘,目前不清楚其作用。
如果定义的磁盘中file = 的文件不存在,则会忽略这个磁盘。即使optional = 0设置后还是会忽略。
这里需要修改的是file = "",改为实际的镜像文件名称。还要注意,标注了drive = 128的磁盘是SCSI 6, drive = 129是SCSI 4,而drive = 130是SCSI 2,这些是在上面SCSI部分就设置了的。
这里建议把镜像文件都放在pce的目录中,或者指定了path的目录中。而且文件名也建议不要包含空格、中文和特殊符号等。
启动pce
运行bat文件即可启动pce模拟器。
bat文件内容如下所示
binpce-macplus.exe -v -c pce-mac-se.cfg -l pce-mac-se.log -r
其中binpce-macplus.exe指的是运行bin目录下的pce-macplus.exe。
-v参数指的是详细输出。
-c pce-mac-se.cfg指的是加载pce-mac-se.cfg配置文件。
-l pce-mac-se.log指的是日志输出到pce-mac-se.log文件。 (此处的"-l"是小写的"L"而不是大写的"i",这一点需要注意。)
-r指的是启动后开始运行模拟器,如果不指定此参数,则启动时模拟器不会开始运行,需要在控制台(monitor)中输入“g”命令才会运行。
如果是Macintosh Classic机型,也可以在 -r 参数前加上 -I rtc.romdisk=1 来从ROM磁盘启动(注意"-I"是大写的"i"而不是小写的"L")。
如果需要释放鼠标指针,默认设定是按Ctrl+Alt键。
pce的控制台
如果要在模拟器中更换磁盘镜像或进行其他一些操作,需要进入控制台。方法是在模拟器窗口中按下Ctrl+` (即“~”键),然后切换到旁边的控制台窗口。此时模拟器会暂停运行。
进入控制台后会看到一个“ - ”的提示符,此时就可以输入命令了。
控制台命令可以在docmonitor.txt文件中找到。其中最常用的还是m命令(message),给模拟器发送消息,这些消息其实也可以理解成是命令,具体可以参考docmessages.txt文件。
常用的控制台命令有
- h 获得帮助
- g 继续运行模拟器
- m 给模拟器发送消息(命令)
- reset 重启模拟器
- q 退出模拟器
而如果需要切换磁盘镜像,则需要使用 m 命令为模拟器发送消息,如:
m emu.disk.insert 1:Install-1.img
emu.disk.insert指的是插入磁盘镜像,1指的是驱动器1(配置文件中定义的软驱1),Install-1.img是镜像名称。驱动器名称和镜像文件名用英文冒号隔开。
其中emu.disk.insert这条消息可简写成disk.insert或直接写成insert,即命令为:
m disk.insert 1:Install-1.img 或 m insert 1:Install-1.img
到这里,是不是觉得比Qemu还难用?
当然,使用m emu.disk.insert切换了磁盘镜像之后,还需要执行
m mac.insert
才能让模拟器中的System认为磁盘已经插入了。
切换完磁盘,还需要执行 g 命令,让模拟器继续运行。在安装系统时经常需要切换磁盘,可以用这种方法来完成安装。
常用的模拟器messages(消息)
- m emu.disk.insert 驱动器号:文件名 ,将镜像文件加载到驱动器。
- m emu.disk.eject 驱动器号(多个驱动器用英文冒号隔开), 弹出驱动器。
- m emu.disk.ro 驱动器号, 将驱动器中镜像设置为只读。
- m emu.disk.rw 驱动器号, 取消驱动器中的只读设置。
- m mac.insert ,模拟Mac的插入磁盘动作(如果之前有一个驱动器图标被拖拽到了废纸篓,则重新挂载该镜像。)
- m emu.reset ,重启模拟器。
小结一下换盘步骤
- 在模拟器窗口按Ctrl+` ,再切换到控制台窗口
- 执行 m emu.disk.insert 1:Install-1.img 命令
- 执行 m mac.insert 命令
- 执行 g 命令,然后返回模拟器
确实,pce对用户一点也不友好,又是一款典型的自由软件。(嗯,本文作者确实对某些自由软件有偏见。)
SoftMac
SoftMac是Emulators Inc出品的一款Mac模拟器。虽然功能强大,但并不稳定。SoftMac模拟的68020到68040机器也有MMU(内存管理单元),但并不支持虚拟内存。
目前SoftMac不支持64位Windows系统。有兴趣的读者可以尝试用虚拟机装一个32位的Windows XP再运行SoftMac,也可以在老机器上运行。
需要注意的是,SoftMac的ROM文件建议放在同一个文件夹中,而且ROM文件名不宜太长(好几次因为太长的文件名而无法加载)。
还要注意,当模拟器卡死时,标题栏会提示Not Running。
有时候模拟器甚至会直接崩溃,然后弹出Windows错误报告窗口。
SoftMac和Fusion都可以在这里下载到 Emulators Online - Free Downloads
SoftMac还有个9.0 Beta4版本(此版本已经不支持Win9x了):http://www.emulators.com/beta/GEM9BETA.ZIP
SoftMac支持的ROM(页面最下面):http://www.emulators.com/softmac.htm
SoftMac官方的Mac OS 8安装教程:http://www.emulators.com/docs/StpByStp.htm
E-Maculation上的教程:SoftMac 2008 Setup Guide
SoftMac的可执行文件说明:softmac.exe是基本的模拟器,没有声音支持;softmac2.exe是针对Pentium 4优化的版本,可以模拟声音,也可以设置更高分辨率等等;softmac9.exe是SoftMac 9的Beta 4版本。如果有的系统或者镜像在SoftMac2.exe下运行不正常,可以用SoftMac9.exe试试,反之亦然。
Fusion PC
相对于SoftMac,Fusion PC就稳定多了。同样也有MMU(内存管理单元)的模拟,但也不支持虚拟内存。
只是Fusion只能在DOS下运行,在Windows 9x下运行时容易出问题,在Windows 2000和32位XP下则基本无法运行。
FUSION支持的ROM(页面最下面):http://www.emulators.com/softmac.htm
同样,附上一个E-Maculation上的教程链接(在DOSBox下设置):FUSION Setup Guide
关于SoftMac和Fusion的内容,有可能以后会继续更新。