-
-
Notifications
You must be signed in to change notification settings - Fork 78
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Investigate DingusPPC #219
Comments
More correct behavior (and makes the Infinite Mac wrapper not close the emulated Mac, which it does when it thinks there was a graceful shutdown). Updates mihaip/infinite-mac#219
Disable stack traces in loguru (excinfo.h is not available in Emscripten) and set Emscripten linker flags. Updates mihaip/infinite-mac#219
Loads the Emscripten/Wasm build of DingusPPC and uses it with a hidden System 7.5 Disk Tools/6100 ROM combination. Does not actually start successfully, since it assumes that we're using SDL2 (and have some runtime support libraries for it). Updates #219
What do you believe DingusPPC can bring to the table? I'm really wondering if we'll ever see OpenGL 1.1 or 1.2 support and far in the future perhaps even 3D acceleration on any of those PPC emulator? Probably QEMU but who knows if a new challenger could come and smash this boundary for us? |
I briefly looked into QEMU, and it's massive project. Both from a code complexity of adapting it to run on the web and the performance side. The native binary is 17MB, and the qemu.js demo is ~40MB. The performance on the KolibriOS demo is also very slow, and that's a very small and fast OS. DingusPPC has been making progress, and may be an interesting foundation for more accurate emulation (it has a MMU, so it's not limited to 9.0.4, unlike SheepShaver). |
Indeed, QEMU is accurate, but it's slow as F. |
While Emscripten has an SDL compabtility layer, it assumes that the code is executing in the main browser process (and thus has access to them DOM). The Infinite Mac project runs emulators in a worker thread (for better performance) and has a custom API for the display, sound, input, etc. Similarly, we don't need the cross-platform sound support from cubeb, there there is a sound API as well. This commit makes SDL (*_sdl.cpp) and cubeb-based (*_cubeb.cpp) code be skipped when targeting Emscripten, and instead *_js.cpp files are used instead (this is the cross-platform convention used by Chromium[^1]). For hostevents.cpp and soundserver.cpp the entire file was replaced, whereas for videoctrl.cpp there was enough shared logic that it was kept, and the platform-specific bits were moved behind a Display class that can have per-platform implementations. For cases where we need additional private fields in the platform-specific classes, we use a PIMPL pattern. For now the _js files are stubs, but they do allow the Emscripten build to make it further into the startup process. Updates mihaip/infinite-mac#219 [^1]: https://www.chromium.org/developers/design-documents/conventions-and-patterns-for-multi-platform-development/
Picks up changes from mihaip/dingusppc@ffd66a2 Updates #219
Turns out to be on the critical path to getting boot. If we don't pull data from the audio DMA channel it appears to fill up and the boot process hangs very early. We would have just had a no-op read, but might as well actually send the data to the JS side. We use a 1khz polling loop, which is perhaps too frequent, but it works for now. The 6100 guitar chord startup chime now plays, but there is some glitching after, and then a continous hum. Polling for input also turns out to be on the critical path, since we need to consume the input buffer to get the "audio context running" flag sent from the browser process to the worker. We don't actually do anything with the input data yet. Updates mihaip/infinite-mac#219
Shipped with the initial set of Power Macs, should be a good test of DingusPPC's 6100 emulation. Updates #219
Includes making stereo audio work, we were only populating the first channel until now. Updates #219
Audio playback requires a gesture to start, and we were immediately starting the emulator. Since the only thing that DingusPPC can play is the initial boot chime, it required clicking at just the right time to be able to hear it. By making emulator start behind a click, we can more deterministically trigger it. Updates #219
Extracted from the 7.1.2 CD-ROM image. More interesting as a DingusPPC testbed, since no emulator can currently run the PowerPC version of 7.1.2. Updates #219
It only supports relative mouse movement, so we need to start sending that to the worker too. Updates #219
It defaults to the HiRes12-14in mode, which is 640x480. Updates #219
Allows different implementations for native (C++ streams) and JS (workerApi.disks.* functions) versions. Updates mihaip/infinite-mac#219
Fix red and green channels being swapped due to different assumptions in channel ordering between DingusPPC and the JS side. Add content hashing of the frame buffer so that we don't need to blit to the JS side if the content hasn't changed. Uses xxHash3 since it has the best performance. Updates mihaip/infinite-mac#219 Updates mihaip/infinite-mac#18
Reuses the approach from 95ec7a1 more broadly so that the JS port can provide disk images. Updates mihaip/infinite-mac#219
Does not work with existing system images since they're bare HFS partitions and DingusPPC expects them to be wrapped in a full disk image with a partition table. But that can be solved on this side, without any DingusPPC changes. Updates #219
The JS side will be using pointer lock to get raw mouse input and not worry about the cursor moving beyond the bounds of the screen, so we can assume that the mouse deltas are raw. Updates mihaip/infinite-mac#219
Required to get it too boot with with DingusPPC (which can now do it - make it the default). Updates #219
Only works in the 6100 and 7500 for now, because the mon_id option is not respected for the dynamically-registered ATI PCI card device in the Beige G3. Updates #219
Currently not that interesting, but it does exercise the ability to add machine-specific files (a ROM is is required for the ATI Mach64 GPU). File sources: - Power-Macintosh-G3-BW-Boot.rom is PowerMacG3BW_BootROM.bin from https://discord.com/channels/394224641654259712/441411517297065994/1072499928330412083 - ATI-Mach64.rom is 113-32900-004_Apple_MACH64.bin from https://bitsavers.computerhistory.org/pdf/ati/109-32900-10_Mach64_Mac_1995/ Updates #219
Picks up dingusdev/dingusppc@a941836 which allows custom screen size support for the Beige G3. Updates #219
Picks up dingusdev/dingusppc@564c43c which helps with performance a bit. Updates #219
Picks up dingusdev/dingusppc@b759f25 which helps with performance a bit. Updates #219
It's the same ROM as the 7500 but the hardware components are different enough that it's worth testing separately. Updates #219
Picks up dingusdev/dingusppc@05658ad which makes the Power Macintosh 7200 correctly detect monitors. Updates #219
Enables verbose booting so that it's easier to see when it gets stuck. Updates #219
That issue also happens with the setup too. I'm suspecting issues in the FPU. While we did fix some issues regarding that last year, it's harder to debug. It could also be some issue in the ATI Rage emulation. |
mihai just fixed the Finder up for Mac OS X. There's some weird eccentricity with the FPU going on. |
Are you still working on DPPC?
|
I discovered some missing functionality in DingusPPC while researching PearPC, so I implemented that: dingusdev/dingusppc#135 |
Picks up dingusdev/dingusppc@acc6e77 which helps with some Mac OS X graphical issues. Updates #219
I managed to get it booting and working almost perfectly, no major issues with no device specified (auto config). But whenever I go to type with the keyboard, it just spits out garbled text. |
I tried Mac OS X 10.2 recently through DPPC and had no issues with the keyboard, on the other hand. There are sometimes still issues in getting it to boot to the desktop though. |
https://github.com/dingusdev/dingusppc is actively being developed and making progress (thread).
setjmp
/longjmp
appears to have a lot of overheaddraw_fb
optimization (ATI ones do) then we don't need to do our own framebuffer checksumming/checkTimerInfo
s instead of always creating new ones for the all the one-shot timers we go throughCUDA_RESTART_SYSTEM
support so that we can operate with an empty nvram fileThe text was updated successfully, but these errors were encountered: