• Updated 2023-07-12: Hello, Guest! Welcome back, and be sure to check out this follow-up post about our outage a week or so ago.

Emulation: Infinite Mac

CC_333

Well-known member
This is very interesting!

But, how does it compare to emulators like SheepShaver, and, for 68k, Basilisk, Mini vMac, QEMU and, what is it, MAME or MESS?

If I'm not mistaken, it seems to be an attempt to create a new, more accurate emulator from scratch, yes?

c
 

Snial

Well-known member
This is very interesting!

But, how does it compare to emulators like SheepShaver, and, for 68k, Basilisk, Mini vMac, QEMU and, what is it, MAME or MESS?

If I'm not mistaken, it seems to be an attempt to create a new, more accurate emulator from scratch, yes?

c
All the different emulators are most suitable for different purposes. Mini VMac is simpler and better for early Macs; Basilisk for Macs with MMUs (68030 and 68040); QEMU is very versatile, but quite resource heavy, MAME (I think) is more game oriented.

Dingus PPC is a low overhead PPC 601 emulator with MMU support, hence the interest (maybe it also does PPC 603e).

MAME is suddenly more* interesting to me, because recently it's incorporated support for the M88K. I've been looking at the Datasheets for the CPU and it's interesting to imagine what Gary's Dividian's M88K would have been like. I can tell, already that it could only achieve about 1 emulated MIP max with a 25MHz CPU:

Code:
ld.w r19,rIp,0 ;rIp^instruction, r19=opcode.
ld.l r20,rVecBase,r19<<2;dependecy on r19.
jmp.n r20 ;jump with delayed branch again, dep on r19.
add rIp,2 ;6c.


;So, NOPs at 8c each? So, at 25MHz, that's about 3MIPs max.
;Simple Ins:
ld.l r5,rDRegs,n
ld.l r6,rDRegs,m
add.u r5,r5,r6 ;update flags too.
;save flags (flags need translating for a number of scenarios).
st.l r5,rDRegs,n ;store result.
;Next. So, 7cycles to 10 cycles, so 18c, so 1MIP.

So, all the performance would need to come from native code.

*Clarification: by 'more' I just mean MAME is more interesting than it previously was. I'm impressed by Dingus PPC & looking forward to seeing it realise its full potential!
 
Last edited:

Arbee

Well-known member
MAME isn't particularly game-oriented, although you can of course play games on it. MAME's big things are that 1) every Mac model we support* is correctly represented and built from emulations of the actual chips that were in that machine and 2) machines with slots can be freely configured with whatever cards we emulate. If you want 6 video cards in an emulated II or IIx, we've done that. If you want a video card, an Ethernet card, a 4-port serial card, and a BootBug we can do that. If you want an SE/30, or an LC, or an LC550 with Ethernet, we can do that too. And for people developing new 68K software MAME has an extensive multi-window GUI debugger that displays in native Win32 on Windows, native Cocoa on macOS, or Qt on Linux. Dark mode is even supported on Mac and Windows.

Of the other Mac emulators, Basilisk and SheepShaver don't even attempt to emulate any specific real Mac at the hardware level, they just patch the ROM drivers to fit what they do emulate (which is more like an Atari ST). DingusPPC is as detail-oriented as I am, and I love them for it. Mini vMac is somewhere in between.

* Supported Macs currently include every non-prototype desktop M68K machine except the IIfx, Q900/950, and the Quadra AVs. PowerBooks and PowerPC are coming, including PPC upgrade cards and the Pippin, and if ROMs surface for a prototype M88K machine that can certainly be supported.
 

joevt

Well-known member
So, I guess this is for a native macOS emulator rather than InfiniteMac's web-based emulator (which I understand is a WebAssembly conversion of DingusPPC)? I've only been trying the InfiniteMac version, which still only allows 8MB of real RAM even with the latest build: cd67940
The mihaip (InfiniteMac) fork is based mostly on the dingusdev upstream fork. It has all the same code and only replaces some UI bits to make it work in WebAssembly. The dingusdev fork will eventually get the memory upgrade commits from the joevt fork and those will eventually end up in the mihaip fork. Or the mihaip fork can cherry pick the commits from my fork instead of waiting.

Trying to boot the HD image of 7.1.2 on Infinite Mac's PM6100 emulator hangs (though as you can see from earlier comments, 7.1.2 disk tools could boot).
I have also seen this issue. I'm not sure why this happens. Why is floppy and CD working by HD is not working? Could it be the SCSI drivers in the HD image? But aren't those 68K? I haven't investigated. What if it boots with CD and has HD for data?

pm7200 and later can boot from HD but require 7.5.3 or later.

The PM7200 is an interesting machine to me, being the first PCI Mac! The 7500 emulator on InfiniteMac won't boot properly, it does a slow screen clear to black and then the pointer cursor appears within a grey 16x16 block against that black background. Then Mac OS (I've tried 7.5.3) doesn't boot (but the mouse moves).
Probably 7500 just needs some commits from the joevt fork. That machine type has an 8500 variant (includes sixty6 video out; planb video in may be added later) and a 9500 variant (includes bandit2). For 9500, a PCI graphics card needs to be added. We have the ATIs for the Beige G3 but probably need to add their fcode as a PCI option ROM to make them work.

But, how does it compare to emulators like SheepShaver, and, for 68k, Basilisk, Mini vMac, QEMU and, what is it, MAME or MESS?

If I'm not mistaken, it seems to be an attempt to create a new, more accurate emulator from scratch, yes?
SheepShaver is faster (has a JIT compiler and maybe some harddrive and graphics acceleration) but is limited to System 7.5.2 to 9.0.4. It patches the ROMs in order to work. SheepShaver can share host files. I don't think aliases to host files work between boots.

I'm not sure what kind of Mac QEMU emulates. mac99? That's like a G4? They replace Open Firmware with OpenBIOS.

DingusPPC tries to emulate the chips used in real Macs (for storage, graphics, input/output devices). It does not patch ROMs or the OS. It should be able to emulate CPUs from the 601 to the G3. G4 (Altivec) may be added later. You can use Open Firmware and virtual memory. It should be able to support System 7.1.2 to Mac OS X 10.4.11 and other OS's supported by the emulated Macs. I think 10.5.8 requires a G4? It doesn't have a JIT compiler so it is slower. There are some optimizations that can be made even before adding a JIT compiler. DingusPPC doesn't yet have access to host files or networking. DingusPPC supports adding PCI devices but we don't have very many implemented. We'll need USB for later Power Macs. We have some ATI graphics devices (but no 2D or 3D acceleration yet). I added some Nvidia GeForce 6600 and 7800 GT stubs to test Open Firmware PCI option-ROM patches that allows them to work in earlier Power Macs. We have a PCI bridge so you can add as many PCI cards as you like. How many displays can be added? Now you can find out.
 

Snial

Well-known member
Hi @jeovt! Sorry about the lack of a reply until now.
The mihaip (InfiniteMac) fork [Summary mihaip <= dingusdev <= jeovt forks, but mihaip could bypass]

I have also seen this issue. I'm not sure why this happens. Why is floppy and CD working by HD is not working? Could it be the SCSI drivers in the HD image? But aren't those 68K? I haven't investigated. What if it boots with CD and has HD for data?
I wouldn't know how to reboot the PM6100 on CD in VM mode, but using the HD for swap. I always assumed swap was on the boot drive. Oh, of course, there's a drop-down in the memory panel to choose it, but I never thought about that.
pm7200 and later can boot from HD but require 7.5.3 or later.
Probably 7500 just needs some commits from the joevt fork [.. some interesting HW explanations for why it's possible and/or not too much effort based on related models].
So they'll be able to eventually. @mihai , currently looking at the f28bd59 commit. I'm finding the PM7500 boots into a black screen with a movable cursor (but the green activity led never starts flickering).

1711365385638.png


SheepShaver .. QEMU.. DingusPPC tries to [summary: emulate PPC601.. G3 & the chipsets instead of modifying drivers by ROM-patching. OF and VM should work and Mac OS 7.1.2 to Mac OS X 10.4.11. Not JIT. No host FS/ Networking yet. PCI bridge, but few PCI devices & no USB. Basic ATI card & multiple display support.].
I'm excited about Dingus PPC, because it handles VM and PPC601, 603(e). I'm hoping there will be some kind of early 603(e) model support at some point (maybe 5200 as it would be fun to present the all-in-one look of the 5200).

@mihai , I always look forward to the updates, so sorry to have a downer on the latest commit, but from a PM 6100 viewpoint it's slightly worse. I still can't choose anything more than 8MB of RAM, but also VM doesn't work any more. Instead (and I've tried on 7.5.3, 7.5.5, and 7.6) trying to restart with VM just leads to a hang before it can restart:

1711366184230.png
(half-erased Control Strip). Mac OS 8.0 and 8.1 just generate a dialog saying it's the wrong installer and nothing later will run in 8MB. Previously I could reboot into VM mode, but couldn't run MacBench 4.0 as it would hang while checking SCSI.
 

joevt

Well-known member
I wouldn't know how to reboot the PM6100 on CD in VM mode, but using the HD for swap. I always assumed swap was on the boot drive. Oh, of course, there's a drop-down in the memory panel to choose it, but I never thought about that.
I didn't think about virtual memory not being possible with CD boot. I guess booting with CD is one way to make sure VM is not enabled. So your theory is that HD doesn't boot because of problems VM?

Privileged mode PowerPC instructions are hard to make tests for (instructions that handle memory management and exceptions). DPPC testppc has tests based on DolphinPPCTests. I have a fork of DolphinPPCTests. I also have a fork of risu which qemu uses (or used in the past - they haven't been updated in awhile). Both test apps only support user mode instructions. I am going to try to update risu to work with classic MacOS so it can capture info about MPC601 instructions since Mac OS X can't boot on MPC601 and I don't know how well Linux works on NuBus Power Macs.

I'm excited about Dingus PPC, because it handles VM and PPC601, 603(e). I'm hoping there will be some kind of early 603(e) model support at some point (maybe 5200 as it would be fun to present the all-in-one look of the 5200).
It depends on the documentation and info that can be found. Some of the info can be gleaned from the ROM of the Mac. All the ROMs are available online in various places. What's not available is the Power Express ROM and New World ROMs (not the ROM files from classic Mac OS which don't contain the Open Firmware parts needed to boot - Sheep Shaver bypasses Open Firmware and qemu uses OpenBIOS). Other useful info would come from running certain commands in Open Firmware (device tree and properties, aliases, lspci, and dumping registers from the Mac IO controller).
 

Snial

Well-known member
Hi @jeovt! Sorry about the lack of a reply until now.

I wouldn't know how to reboot the PM6100 on CD in VM mode, but using the HD for swap. I always assumed swap was on the boot drive. Oh, of course, there's a drop-down in the memory panel to choose it, but I never thought about that.

So they'll be able to eventually. @mihai , currently looking at the f28bd59 commit. I'm finding the PM7500 boots into a black screen with a movable cursor (but the green activity led never starts flickering).

View attachment 71493



I'm excited about Dingus PPC, because it handles VM and PPC601, 603(e). I'm hoping there will be some kind of early 603(e) model support at some point (maybe 5200 as it would be fun to present the all-in-one look of the 5200).

@mihai , I always look forward to the updates, so sorry to have a downer on the latest commit, but from a PM 6100 viewpoint it's slightly worse. I still can't choose anything more than 8MB of RAM, but also VM doesn't work any more. Instead (and I've tried on 7.5.3, 7.5.5, and 7.6) trying to restart with VM just leads to a hang before it can restart:

View attachment 71494
(half-erased Control Strip). Mac OS 8.0 and 8.1 just generate a dialog saying it's the wrong installer and nothing later will run in 8MB. Previously I could reboot into VM mode, but couldn't run MacBench 4.0 as it would hang while checking SCSI.
@mihai, @joevt - actually just trying to restart the 6100 causes the hang, it's not specific to trying to reboot into VM. It happens even if there's no infinite HD, just a boot drive too.
 

Snial

Well-known member
Hi @mihai , (and @jeovt). Checking out the latest: 2fcb4fe commit on the PM6100 emulation. Firstly, wow! Great to see that it supports higher RAM sizes: 12MB, 24MB, 40MB, 72MB and 136MB (every 8MB+(4<<x) MB except for x=1 curiously). And in About The Finder will report the right amount of RAM. I've tested Mac OS 7.5.3. In theory this means that despite it still being able to reboot (and thus VM can't be made to work), apps that bust the 8MB boundary can run.

Bad news: The HD images for Mac OS 8.0 to 9.22 won't boot - the Mac puts up a dialog to say it's the wrong installation. Also, as before, MacBench 4.0 won't run. Also, I can't reboot the PM6100 under any OS. I tried to run a few CD images, but 8.0 failed loading a chunk from the CD; 8.1 said it was the wrong type of installation (as per the boot HDs); 8.5 and 9.2.2 just seemed to hang.

PowerMac 7500 emulation has the same problem as before: it does a slow screen clear and then you just see a Mouse pointer with a checkerboard background in what appears to be a 16x16 pixel area.
 

Snial

Well-known member
I did some experimentation and the error only showed in FireFox on my Android phone (worked in another browser). I updated FireFox and now it works.
Hmm, I wonder if any of the issues I see are due to the browser (Safari on M2)?
 

joevt

Well-known member
Hi @mihai , (and @joevt). Checking out the latest: 2fcb4fe commit on the PM6100 emulation. Firstly, wow! Great to see that it supports higher RAM sizes: 12MB, 24MB, 40MB, 72MB and 136MB (every 8MB+(4<<x) MB except for x=1 curiously). And in About The Finder will report the right amount of RAM. I've tested Mac OS 7.5.3. In theory this means that despite it still being able to reboot (and thus VM can't be made to work), apps that bust the 8MB boundary can run.
Infinite Mac has a limit of 256MB. Maybe that could be increased to support the 264MB option for PM6100. Round the max up to 384MB so that PM6100 is not the machine with the most allowed RAM? DPPC emulating outside Infinite Mac allows up to 1.5 GB for some Macs.

Bad news: The HD images for Mac OS 8.0 to 9.22 won't boot - the Mac puts up a dialog to say it's the wrong installation.
I tried to run a few CD images, but 8.0 failed loading a chunk from the CD; 8.1 said it was the wrong type of installation (as per the boot HDs); 8.5 and 9.2.2 just seemed to hang.
PM6100 can boot Disk Tools 8.1 floppy. I haven't found a CD or HD that PM6100 can boot for >= 8.0 but I haven't really looked.

Also, as before, MacBench 4.0 won't run.
DPPC doesn't have timers that would give accurate results anyway but that shouldn't stop MacBench 4.0 from running. I'll give it a try later.

Also, I can't reboot the PM6100 under any OS.
Reboot should work. I'll do more testing later.

PowerMac 7500 emulation has the same problem as before: it does a slow screen clear and then you just see a Mouse pointer with a checkerboard background in what appears to be a 16x16 pixel area.
I'll compare upstream fork with my fork to see if Infinite Mac could be improved with existing commits from my fork.
 

Snial

Well-known member
Infinite Mac has a limit of 256MB. Maybe that could be increased to support the 264MB option for PM6100. Round the max up to 384MB so that PM6100 is not the machine with the most allowed RAM? DPPC emulating outside Infinite Mac allows up to 1.5 GB for some Macs.
I'm super-impressed that I can choose more than 8MB :) !
PM6100 can boot Disk Tools 8.1 floppy. I haven't found a CD or HD that PM6100 can boot for >= 8.0 but I haven't really looked.
OK.
DPPC doesn't have timers that would give accurate results anyway but that shouldn't stop MacBench 4.0 from running. I'll give it a try later.
Thanks! On my MacBook M2, The PM6100 emulator is far faster than a real 6100 should have been of course, though on my Mac mini late 2012 (Dual core i5 at 2.5GHz) it's quite a lot slower than a real 6100.
Reboot should work. I'll do more testing later.
Thanks!
I'll compare upstream fork with my fork to see if Infinite Mac could be improved with existing commits from my fork.
I think that I should probably get around to contributing instead of just testing with my fixation on the PM6100. Most people seem to be interested in the G3 and faster/later machines, but my interest is in the earliest machines and a relatively authentic experience. However, since I'm not contributing to the project, I don't mind if it takes quite a while for these things to work (unless I start contributing). I think that it'd be quite nice for Infinite Mac to emulate a Performa 5200 at some point, because then the screen could look like a real Performa 5200!
 

rplacd

Well-known member
Posting in here to express my deepest appreciation for what you've done, @mihai, especially drag-and-drop file transfer! It turns out that the fastest way to move files from a Stuffit file to a Mac is to simply drag and drop into Infinite Mac, and then export a disk image. You've made my life so much simpler.
And, congratulations on getting NeXTSTEP running, too! Long may Infinite Mac continue.
 

Snial

Well-known member
Hi @mihai ,

I've updated the Infinite Mac build with the latest upstream DingusPPC code, and the 6100 should be restartable again.
Thanks! I've just run the PM6100 emulation again. It does indeed restart! And VM is supported again! And MacBench gets further: it doesn't crash on initialisation while testing SCSI; I can start to run some tests, but it seems to get stuck in a loop on the FPU tests (the PM6100 didn't crash, it just doesn't complete while the mouse still moves and I gave it a couple of minutes). Speedometer tests run:

1712132181915.png

CPU is 38% faster, FPU about 5x faster, when emulated on my MacBook M2. This means it feels like a 100MHz PPC601 Mac.

Anyway, great progress!
FWIW the fork that I have (https://github.com/mihaip/dingusppc) is just for Infinite Mac-specific changes. I usually rebase it (from the upstream at https://github.com/dingusdev/dingusppc) every week or so.
It really is great stuff!

-cheers from Julz
 

Phipli

Well-known member
Hi @mihai ,


Thanks! I've just run the PM6100 emulation again. It does indeed restart! And VM is supported again! And MacBench gets further: it doesn't crash on initialisation while testing SCSI; I can start to run some tests, but it seems to get stuck in a loop on the FPU tests (the PM6100 didn't crash, it just doesn't complete while the mouse still moves and I gave it a couple of minutes). Speedometer tests run:

View attachment 71927

CPU is 38% faster, FPU about 5x faster, when emulated on my MacBook M2. This means it feels like a 100MHz PPC601 Mac.

Anyway, great progress!

It really is great stuff!

-cheers from Julz
To be honest, the two things that don't run in a lot of different emulators I've found, are benchmarks and TattleTech.

I'd have running Speedometer and MacBench down as "very ambitious". Do they run in SheepShaver, QEMU or other PPC emulators?
 

joevt

Well-known member
PowerMac 7500 emulation has the same problem as before: it does a slow screen clear and then you just see a Mouse pointer with a checkerboard background in what appears to be a 16x16 pixel area.
I'll compare upstream fork with my fork to see if Infinite Mac could be improved with existing commits from my fork.
For TNT machines (7500, etc.) you may be able to boot from floppy (except for a crash that may occur if the machine plays a system beep which it probably will since DPPC doesn't support writing to floppy).

External SCSI needs some commits from my fork. Internal SCSI doesn't work in any case.

TNT machines may have two video controllers: control and sixty6. I think the 7500 needs a newer commit from my fork to disable sixty6 properly. The upstream fork is not removing the sixty6 video window when the has_sixty6 flag is set to 0 (the default value). I don't know if that affects Infinite Mac which is meant to only support one video window.

I don't know if Infinite Mac handles the hardware cursor of TNT machines correctly since it is drawn differently than the hardware cursor of Beige G3 (ATI).
 
Last edited:
Top