Skip to content
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

BeOS? #35

Open
memsom opened this issue Oct 14, 2022 · 27 comments
Open

BeOS? #35

memsom opened this issue Oct 14, 2022 · 27 comments
Labels
feature-request Request support for some feature

Comments

@memsom
Copy link

memsom commented Oct 14, 2022

There is currently no emulator that can emulate the PowerPC version of BeOS. If you were to get to the point this boots to MacOS, and emulates a PCI Mac with a 603 or 604 processor, it would be very cool to get BeOS running on it. BeOS booted on 7300, 8500, 9500 among others. Any chance one of those might work in the future?

@maximumspatium
Copy link
Collaborator

maximumspatium commented Oct 15, 2022

In short, the chances to get BeOS emulated in dingusppc are good.

I already created a basic emulator for TNT-style machines, see https://github.com/dingusdev/dingusppc/blob/master/machines/machinetnt.cpp
We even made a significant progress towards emulation of the on-board video for those Macs. Open Firmware 1.0.5 resided in a TNT ROM works well in dingusppc.

Booting to Mac OS doesn't currently work due to incomplete SCSI hard disk emulation. That's what we're currently working on.
Booting to BeOS will probably require a working SCSI CD-ROM too.

We will actually get there but it will take some time.

@maximumspatium maximumspatium added enhancement New feature or request feature-request Request support for some feature and removed enhancement New feature or request labels Oct 15, 2022
@memsom
Copy link
Author

memsom commented Jan 18, 2023

@maximumspatium how is the progress on the hard disk emulation? I saw a branch with a lot of commits - is it anywhere near worth trying out yet?

@maximumspatium
Copy link
Collaborator

While a basic SCSI hard disk and CD-ROM emulation has been recently added to Dingusppc the machines you'd need for BeOS don't boot yet. There are still missing parts, most notably ADB emulation responsible for user input (keyboard & mouse).
I'm currently working on ADB support. It will take a couple of weeks.
I'm going to try out BeOS as soon as our virtual TNT/Gazelle machines are able to boot into Mac OS.

@memsom
Copy link
Author

memsom commented Jan 23, 2023

That is great news. If you need any support let me know. I do have a known working image from an SD to IDE adapter (Action Retro used it on his youtube channel to boot BeOS) and so if that in any way helps, I can link you it. The image will mount in MacOS X and you can extract the individual partitions, so you might be able to use them even under a scsi emulation.

The Mac hfs partition is super small (~2mb) so it has a lot less going on than a regular MacOS install (based on an 8.1 Disk Tools image.) It is just there to bootstrap BeOS.

@Lucas-mother3
Copy link

Hmmm, I'm interested with this project as currently, BeOS before R3.0 is not emulated enough. I'm also interested with this to try out Mac OS functionality. That raises the question of what exactly is happening with the support. Is it now kinda possible to boot from those CDs or are there hurdles to jump over?

@memsom
Copy link
Author

memsom commented Nov 23, 2023

Hmmm, I'm interested with this project as currently, BeOS before R3.0 is not emulated enough.

BeOS for PowerPC is not emulated at all. I don't know what the status is currently, but I think you would only be able to go back to PR1, maybe AA with this solution. Anything prior to that is problematic as there was only one release of BeOS from the DR days that supported Mac and that version is hard to come by in an installable state because the installer has expired now.

@Lucas-mother3
Copy link

Anything prior to that is problematic as there was only one release of BeOS from the DR days that supported Mac and that version is hard to come by in an installable state because the installer has expired now.

DR8? Or the MacWorld Preview? Either way, I do think it might work if you could set the time back to when it didn't expire but that's on me, I don't really know if it's possible actually.

@xmine64
Copy link

xmine64 commented Jul 13, 2024

I tried booting to BeOS (from Mac OS 8.1 on G3) and I made it this far but I'm not sure if it's stuck or it just takes a more than 5 minutes to boot.

I tried to do these in QEMU and SheepShaver as well but they couldn't even make it to these.

image

image

Here is the log:

(   0.000s)              loguru.cpp:841   INFO| Logging to 'dingusppc.log', mode: 'a', verbosity: 0
(   0.000s)                main.cpp:139   INFO| Machine option was passed in: pmg3dt
(   0.008s)      machinefactory.cpp:141   INFO| Initializing Power Macintosh G3 (Beige) Desktop hardware...
(   0.011s)   soundserver_cubeb.cpp:75    INFO| Connected to backend: wasapi
(   0.011s)         memctrlbase.cpp:297   INFO| Added mmio region 0xFE000000..0xFE00FFFF (Grackle)
(   0.011s)         memctrlbase.cpp:297   INFO| Added mmio region 0xFEC00000..0xFEEFFFFF (Grackle)
(   0.012s)       atabasedevice.cpp:45    INFO| ATA-HD: hard-reset triggered
(   0.012s)       atabasedevice.cpp:45    INFO| ATAPI-CDROM: hard-reset triggered
(   0.012s)     machinegossamer.cpp:95    INFO| Building machine Gossamer...
(   0.012s)         memctrlbase.cpp:297   INFO| Added mmio region 0xFF000000..0xFF000FFF (Machine-id)
(   0.013s)         memctrlbase.cpp:179   INFO| Added mem region 0xFFC00000..0xFFFFFFFF (ROM,) -> 0x0
(   0.013s)                spdram.h:96    INFO| SDRAM capacity set to 256MB, I2C addr = 0x57
(   0.013s)                   i2c.h:57    INFO| New I2C device, address = 0x57
(   0.013s)                spdram.h:96    INFO| SDRAM capacity set to 256MB, I2C addr = 0x56
(   0.013s)                   i2c.h:57    INFO| New I2C device, address = 0x56
(   0.013s)                   i2c.h:57    INFO| New I2C device, address = 0x28
(   0.013s)                   i2c.h:57    INFO| New I2C device, address = 0x53
(   0.014s)               atahd.cpp:221   INFO| ATA-HD: total sectors 2097152
(   0.014s)               atahd.cpp:263   INFO| ATA-HD: C=4096, H=16, S=32
(   0.150s)                   i2c.h:57    INFO| New I2C device, address = 0x45
(   0.150s)      machinefactory.cpp:165   INFO| Initialization completed.
(   0.154s)         memctrlbase.cpp:297   INFO| Added mmio region 0xF3000000..0xF307FFFF (mac-io/heathrow)
(   0.154s)            heathrow.cpp:117   INFO| mac-io/heathrow: base address set to 0xF3000000
(   0.154s)             viacuda.cpp:194   WARN| Attempted write to VIA Port A!
(   0.154s)             viacuda.cpp:294   INFO| VIA SR interrupt enabled
(   0.155s)             viacuda.cpp:706   INFO| Cuda: send 1 to PB0
(   2.743s)             viacuda.cpp:781   WARN| Unsupported I2C device 0x55
(   2.835s)         memctrlbase.cpp:179   INFO| Added mem region 0x0..0x1FFFFFFF (RAM,) -> 0x0
(   2.893s)            heathrow.cpp:339   WARN| Attempted to write f0701079 to MIO:ID at 34; Address : ff80afbc
(   2.915s)       atabasedevice.cpp:45    INFO| ATA-HD: soft-reset triggered
(   2.930s)       atabasedevice.cpp:45    INFO| ATAPI-CDROM: soft-reset triggered
(   2.951s)             viacuda.cpp:582   INFO| Cuda: autopoll started, rate: 11 ms
(   3.016s)              mpc106.cpp:134    ERR| Grackle err: read attempt from non-existent PCI device 00:0c.0 @00.l
(   3.016s)              mpc106.cpp:134    ERR| Grackle err: read attempt from non-existent PCI device 00:0d.0 @00.l
(   3.016s)              mpc106.cpp:134    ERR| Grackle err: read attempt from non-existent PCI device 00:0e.0 @00.l
(   3.016s)              mpc106.cpp:134    ERR| Grackle err: read attempt from non-existent PCI device 00:0f.0 @00.l
(   3.017s)             atirage.cpp:181   INFO| ati-rage: I/O space address set to 0x00000000
(   3.029s)             atirage.cpp:181   INFO| ati-rage: I/O space address set to 0x00000400
(   3.039s)             atirage.cpp:838   INFO| ati-rage: primary CRT controller enabled:
(   3.039s)             atirage.cpp:840   INFO| Video mode: extended
(   3.039s)             atirage.cpp:841   INFO| Video width: 640 px
(   3.039s)             atirage.cpp:842   INFO| Video height: 480 px
(   3.039s)             atirage.cpp:670   INFO| Pixel format: 8 bpp with DAC palette
(   3.039s)             atirage.cpp:844   INFO| VPLL frequency: 120.909072 MHz
(   3.039s)             atirage.cpp:845   INFO| Pixel (dot) clock: 30.227268 MHz
(   3.039s)             atirage.cpp:846   INFO| Refresh rate: 66.638603 Hz
(   3.353s)         memctrlbase.cpp:297   INFO| Added mmio region 0x82000000..0x82DFFFFF (ati-rage)
(   3.353s)             atirage.cpp:161   INFO| ati-rage: aperture[0] set to 0x82000000
(   3.396s)             viacuda.cpp:194   WARN| Attempted write to VIA Port A!
(   3.397s)             viacuda.cpp:194   WARN| Attempted write to VIA Port A!
(   3.397s)             viacuda.cpp:294   INFO| VIA T2 interrupt enabled
(   3.402s)             viacuda.cpp:294   INFO| VIA SR interrupt enabled
(   3.409s)             viacuda.cpp:745   WARN| Unsupported I2C device 0x20
(   3.409s)             viacuda.cpp:745   WARN| Unsupported I2C device 0x27
(   3.409s)             viacuda.cpp:745   WARN| Unsupported I2C device 0x5A
(   3.409s)             viacuda.cpp:745   WARN| Unsupported I2C device 0x48
(   3.409s)             viacuda.cpp:745   WARN| Unsupported I2C device 0x40
(   3.410s)             viacuda.cpp:745   WARN| Unsupported I2C device 0x60
(   3.410s)             viacuda.cpp:781   WARN| Unsupported I2C device 0x14
(   3.410s)             viacuda.cpp:745   WARN| Unsupported I2C device 0x38
(   3.410s)             viacuda.cpp:745   WARN| Unsupported I2C device 0x4E
(   3.421s)             viacuda.cpp:294   INFO| VIA SR interrupt enabled
(   3.421s)             viacuda.cpp:294   INFO| VIA T2 interrupt enabled
(   3.704s)             viacuda.cpp:690   INFO| Cuda: One Second Interrupt Mode: 3
(   3.723s)               dbdma.cpp:121    ERR| mesh: Invalid key 0 in LOAD_QUAD
(   3.917s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fe000.l = 00000000
(   3.917s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdffc.l = 00000001
(   3.917s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff8.l = 00000002
(   3.917s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff4.l = 00000003
(   3.917s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff0.l = 00000004
(   3.917s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfec.l = 00000005
(   3.917s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe8.l = 00000006
(   3.917s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe4.l = 00000007
(   3.917s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe0.l = 00000008
(   3.917s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfdc.l = 00000009
(   3.917s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd8.l = 0000000a
(   3.917s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd4.l = 0000000b
(   3.917s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd0.l = 0000000c
(   3.917s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfcc.l = 0000000d
(   3.917s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfc8.l = 0000000e
(   3.917s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfc4.l = 0000000f
(   3.917s)             atirage.cpp:585   WARN| ati-rage: read  unmapped aperture[0] region 003fe000.l
(   3.917s)             atirage.cpp:585   WARN| ati-rage: read  unmapped aperture[0] region 003fdffc.l
(   3.918s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fe000.l = 00000000
(   3.918s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdffc.l = 00000001
(   3.918s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff8.l = 00000002
(   3.918s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff4.l = 00000003
(   3.918s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff0.l = 00000004
(   3.918s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfec.l = 00000005
(   3.918s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe8.l = 00000006
(   3.918s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe4.l = 00000007
(   3.918s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe0.l = 00000008
(   3.918s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfdc.l = 00000009
(   3.918s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd8.l = 0000000a
(   3.918s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd4.l = 0000000b
(   3.918s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd0.l = 0000000c
(   3.918s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfcc.l = 0000000d
(   3.918s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfc8.l = 0000000e
(   3.918s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfc4.l = 0000000f
(   3.918s)             atirage.cpp:585   WARN| ati-rage: read  unmapped aperture[0] region 003fe000.l
(   3.918s)             atirage.cpp:585   WARN| ati-rage: read  unmapped aperture[0] region 003fdffc.l
(   3.921s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fe000.l = 00000000
(   3.921s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdffc.l = 00000001
(   3.921s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff8.l = 00000002
(   3.921s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff4.l = 00000003
(   3.921s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff0.l = 00000004
(   3.921s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfec.l = 00000005
(   3.921s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe8.l = 00000006
(   3.921s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe4.l = 00000007
(   3.921s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe0.l = 00000008
(   3.921s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfdc.l = 00000009
(   3.921s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd8.l = 0000000a
(   3.921s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd4.l = 0000000b
(   3.921s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd0.l = 0000000c
(   3.921s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfcc.l = 0000000d
(   3.921s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfc8.l = 0000000e
(   3.921s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfc4.l = 0000000f
(   3.921s)             atirage.cpp:585   WARN| ati-rage: read  unmapped aperture[0] region 003fe000.l
(   3.921s)             atirage.cpp:585   WARN| ati-rage: read  unmapped aperture[0] region 003fdffc.l
(   3.922s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fe000.l = 00000000
(   3.922s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdffc.l = 00000001
(   3.922s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff8.l = 00000002
(   3.922s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff4.l = 00000003
(   3.922s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff0.l = 00000004
(   3.922s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfec.l = 00000005
(   3.922s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe8.l = 00000006
(   3.922s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe4.l = 00000007
(   3.922s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe0.l = 00000008
(   3.922s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfdc.l = 00000009
(   3.922s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd8.l = 0000000a
(   3.922s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd4.l = 0000000b
(   3.922s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd0.l = 0000000c
(   3.922s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfcc.l = 0000000d
(   3.922s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfc8.l = 0000000e
(   3.922s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfc4.l = 0000000f
(   3.922s)             atirage.cpp:585   WARN| ati-rage: read  unmapped aperture[0] region 003fe000.l
(   3.922s)             atirage.cpp:585   WARN| ati-rage: read  unmapped aperture[0] region 003fdffc.l
(   3.924s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fe000.l = 00000000
(   3.924s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdffc.l = 00000001
(   3.924s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff8.l = 00000002
(   3.924s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff4.l = 00000003
(   3.924s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff0.l = 00000004
(   3.924s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfec.l = 00000005
(   3.924s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe8.l = 00000006
(   3.924s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe4.l = 00000007
(   3.924s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe0.l = 00000008
(   3.924s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfdc.l = 00000009
(   3.924s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd8.l = 0000000a
(   3.924s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd4.l = 0000000b
(   3.924s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd0.l = 0000000c
(   3.924s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfcc.l = 0000000d
(   3.924s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfc8.l = 0000000e
(   3.924s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfc4.l = 0000000f
(   3.924s)             atirage.cpp:585   WARN| ati-rage: read  unmapped aperture[0] region 003fe000.l
(   3.924s)             atirage.cpp:585   WARN| ati-rage: read  unmapped aperture[0] region 003fdffc.l
(   3.925s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fe000.l = 00000000
(   3.925s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdffc.l = 00000001
(   3.925s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff8.l = 00000002
(   3.925s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff4.l = 00000003
(   3.925s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdff0.l = 00000004
(   3.925s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfec.l = 00000005
(   3.925s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe8.l = 00000006
(   3.925s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe4.l = 00000007
(   3.925s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfe0.l = 00000008
(   3.925s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfdc.l = 00000009
(   3.925s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd8.l = 0000000a
(   3.925s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd4.l = 0000000b
(   3.925s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfd0.l = 0000000c
(   3.925s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfcc.l = 0000000d
(   3.925s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfc8.l = 0000000e
(   3.925s)             atirage.cpp:632   WARN| ati-rage: write unmapped aperture[0] region 003fdfc4.l = 0000000f
(   3.925s)             atirage.cpp:585   WARN| ati-rage: read  unmapped aperture[0] region 003fe000.l
(   3.925s)             atirage.cpp:585   WARN| ati-rage: read  unmapped aperture[0] region 003fdffc.l
(   3.940s)             atirage.cpp:838   INFO| ati-rage: primary CRT controller enabled:
(   3.940s)             atirage.cpp:840   INFO| Video mode: extended
(   3.940s)             atirage.cpp:841   INFO| Video width: 640 px
(   3.940s)             atirage.cpp:842   INFO| Video height: 480 px
(   3.940s)             atirage.cpp:670   INFO| Pixel format: 8 bpp with DAC palette
(   3.940s)             atirage.cpp:844   INFO| VPLL frequency: 131.900800 MHz
(   3.940s)             atirage.cpp:845   INFO| Pixel (dot) clock: 32.975200 MHz
(   3.940s)             atirage.cpp:846   INFO| Refresh rate: 72.696655 Hz
(   4.011s)             atirage.cpp:838   INFO| ati-rage: primary CRT controller enabled:
(   4.011s)             atirage.cpp:840   INFO| Video mode: extended
(   4.011s)             atirage.cpp:841   INFO| Video width: 640 px
(   4.011s)             atirage.cpp:842   INFO| Video height: 480 px
(   4.011s)             atirage.cpp:670   INFO| Pixel format: 8 bpp with DAC palette
(   4.011s)             atirage.cpp:844   INFO| VPLL frequency: 181.363616 MHz
(   4.011s)             atirage.cpp:845   INFO| Pixel (dot) clock: 30.227270 MHz
(   4.011s)             atirage.cpp:846   INFO| Refresh rate: 66.638603 Hz
(   4.162s)             viacuda.cpp:585   INFO| Cuda: autopoll stopped
(   4.256s)             viacuda.cpp:582   INFO| Cuda: autopoll started, rate: 11 ms
(   4.414s)            heathrow.cpp:161   WARN| Unsupported DMA channel write, offset=0xB00, val=0x80
(   4.414s)            heathrow.cpp:137   WARN| Unsupported DMA channel read, offset=0xB04
(   4.424s)            heathrow.cpp:161   WARN| Unsupported DMA channel write, offset=0xC00, val=0x80
(   4.424s)            heathrow.cpp:137   WARN| Unsupported DMA channel read, offset=0xC04
(   4.431s)            heathrow.cpp:349   WARN| write 100000 to unknown MIO register at 2c
(   4.431s)                mesh.cpp:175   INFO| MESH: FlushFIFO stub invoked
(   4.492s)            heathrow.cpp:349   WARN| write 100000 to unknown MIO register at 2c
(   4.492s)                mesh.cpp:175   INFO| MESH: FlushFIFO stub invoked
(   4.492s)            heathrow.cpp:349   WARN| write 100000 to unknown MIO register at 2c
(   4.492s)                mesh.cpp:175   INFO| MESH: FlushFIFO stub invoked
(   4.552s)            heathrow.cpp:349   WARN| write 100000 to unknown MIO register at 2c
(   4.552s)                mesh.cpp:175   INFO| MESH: FlushFIFO stub invoked
(   4.552s)            heathrow.cpp:349   WARN| write 100000 to unknown MIO register at 2c
(   4.552s)                mesh.cpp:175   INFO| MESH: FlushFIFO stub invoked
(   4.611s)            heathrow.cpp:349   WARN| write 100000 to unknown MIO register at 2c
(   4.611s)                mesh.cpp:175   INFO| MESH: FlushFIFO stub invoked
(   4.611s)            heathrow.cpp:349   WARN| write 100000 to unknown MIO register at 2c
(   4.611s)                mesh.cpp:175   INFO| MESH: FlushFIFO stub invoked
(   4.671s)            heathrow.cpp:349   WARN| write 100000 to unknown MIO register at 2c
(   4.671s)                mesh.cpp:175   INFO| MESH: FlushFIFO stub invoked
(   4.671s)            heathrow.cpp:349   WARN| write 100000 to unknown MIO register at 2c
(   4.671s)                mesh.cpp:175   INFO| MESH: FlushFIFO stub invoked
(   4.730s)            heathrow.cpp:349   WARN| write 100000 to unknown MIO register at 2c
(   4.730s)                mesh.cpp:175   INFO| MESH: FlushFIFO stub invoked
(   4.730s)            heathrow.cpp:349   WARN| write 100000 to unknown MIO register at 2c
(   4.730s)                mesh.cpp:175   INFO| MESH: FlushFIFO stub invoked
(   4.790s)            heathrow.cpp:349   WARN| write 100000 to unknown MIO register at 2c
(   4.790s)                mesh.cpp:175   INFO| MESH: FlushFIFO stub invoked
(   4.790s)            heathrow.cpp:349   WARN| write 100000 to unknown MIO register at 2c
(   4.790s)                mesh.cpp:175   INFO| MESH: FlushFIFO stub invoked
(   4.850s)            heathrow.cpp:349   WARN| write 100000 to unknown MIO register at 2c
(   4.850s)                mesh.cpp:175   INFO| MESH: FlushFIFO stub invoked
(   4.867s)       atabasedevice.cpp:45    INFO| ATA-HD: soft-reset triggered
(   4.875s)               atahd.cpp:148   INFO| ATA-HD: PIO transfer mode set to 0x0
(   4.875s)               atahd.cpp:162   WARN| ATA-HD: unsupported SET_FEATURES subcommand code 0x88
(   4.875s)               atahd.cpp:162   WARN| ATA-HD: unsupported SET_FEATURES subcommand code 0x99
(   4.875s)               atahd.cpp:162   WARN| ATA-HD: unsupported SET_FEATURES subcommand code 0xAA
(   4.877s)               atahd.cpp:148   INFO| ATA-HD: PIO transfer mode set to 0x0
(   5.356s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(   5.365s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(   5.371s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(   5.379s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(   5.386s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(   5.392s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(   5.400s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(   5.409s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(   5.414s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(   5.422s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(   5.427s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(   5.434s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(   5.442s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(   5.455s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(   5.462s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(   8.392s)             viacuda.cpp:722    ERR| Cuda: unsupported pseudo command 0x21
(   8.392s)             viacuda.cpp:722    ERR| Cuda: unsupported pseudo command 0x21
(   8.393s)             viacuda.cpp:781   WARN| Unsupported I2C device 0x50
(   8.496s)             viacuda.cpp:745   WARN| Unsupported I2C device 0x26
(   8.518s)             viacuda.cpp:781   WARN| Unsupported I2C device 0x14
(   9.433s)             atirage.cpp:838   INFO| ati-rage: primary CRT controller enabled:
(   9.433s)             atirage.cpp:840   INFO| Video mode: extended
(   9.433s)             atirage.cpp:841   INFO| Video width: 1024 px
(   9.433s)             atirage.cpp:842   INFO| Video height: 768 px
(   9.433s)             atirage.cpp:670   INFO| Pixel format: 8 bpp with DAC palette
(   9.433s)             atirage.cpp:844   INFO| VPLL frequency: 157.066096 MHz
(   9.433s)             atirage.cpp:845   INFO| Pixel (dot) clock: 78.533048 MHz
(   9.433s)             atirage.cpp:846   INFO| Refresh rate: 74.821884 Hz
(  14.900s)             pcibase.cpp:73    WARN| mac-io/heathrow: read  unimplemented config register @28.l
(  14.900s)             pcibase.cpp:73    WARN| ati-rage: read  unimplemented config register @28.l
(  14.901s)             viacuda.cpp:294   INFO| VIA SR interrupt enabled
(  14.901s)             viacuda.cpp:294   INFO| VIA T2 interrupt enabled
(  15.086s)       atabasedevice.cpp:45    INFO| ATA-HD: soft-reset triggered
(  15.104s)       atabasedevice.cpp:45    INFO| ATAPI-CDROM: soft-reset triggered
(  15.123s)               atahd.cpp:173    ERR| ATA-HD: unknown ATA command 0xa1
(  15.148s)       atabasedevice.cpp:45    INFO| ATA-HD: soft-reset triggered
(  15.168s)          atapicdrom.cpp:75    WARN| ATAPI-CDROM: doing_sector_areas reset
(  15.177s)       atabasedevice.cpp:45    INFO| ATAPI-CDROM: soft-reset triggered
(  15.237s)                mesh.cpp:137   WARN| MESH: write to unimplemented register at offset 0x0
(  15.237s)                mesh.cpp:137   WARN| MESH: write to unimplemented register at offset 0x1
(  15.237s)                mesh.cpp:175   INFO| MESH: FlushFIFO stub invoked
(  15.285s)                mesh.cpp:159   INFO| MESH: BusFree stub invoked
(  92.813s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(  92.819s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(  92.827s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(  92.834s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(  92.840s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress
(  92.847s)             viacuda.cpp:523   WARN| Cuda transaction probably in progress

@joevt
Copy link
Contributor

joevt commented Jul 13, 2024

Probably need to wait until mesh emulation is finished. Then probably more stuff after that.

@memsom
Copy link
Author

memsom commented Jul 13, 2024

@xmine64 Was this emulating a G3? BeOS will not generally boot on a G3 Mac, and I believe that is as far as it gets. If you emulate a Mac that had a 603 or 604 you'd maybe have more luck. I'm on mobile but I'll have a look when I'm back at home.

@memsom
Copy link
Author

memsom commented Jul 13, 2024

Also - try holding shift when the 3D logo appears. It will go to the boot menu. I think that should work.

@xmine64
Copy link

xmine64 commented Jul 13, 2024

Was this emulating a G3? BeOS will not generally boot on a G3 Mac

Yeah, I forgot about that

try holding shift when the 3D logo appears. It will go to the boot menu. I think that should work.

Nothing happened on G3

I tried 604 machines, pm9600 doesn't have a display (ig it's not implemented yet), and others crash when I try to initialize hard disk, with this error message:

dbdma.cpp:298   FATL| ABORT: curio_scsi: non-DWORD read from a DMA channel not supported

Also 8600 has 2 display outputs, and one is always black.

@joevt
Copy link
Contributor

joevt commented Jul 14, 2024

For pm9600, you need to attach a graphics card.
pci_A1=AtiMach64Gx

For pm8600, enable the second display by using one or both of these:
--has_svideo=1
--has_composite=1

Initialize hard disks outside of dingusppc using Disk Jockey.
https://68kmla.org/bb/index.php?threads/disk-jockey-a-simple-hd-image-creator.41075/

For sure dingusppc should not abort when doing non-DWORD read from a DMA channel, so that should be fixed. I don't think it happens in my fork.

@xmine64
Copy link

xmine64 commented Jul 14, 2024

For pm9600, you need to attach a graphics card.

Oh I didn't know this, thanks! I tried pci_GPU though but it didn't work.

enable the second display by using one or both of these

Oh I thought it's a bug

Initialize hard disks outside of dingusppc using Disk Jockey.

The disk is already initialized but for some reason it's not detected. I thought maybe it's because I initialized it with a newer version of Mac OS.

@memsom
Copy link
Author

memsom commented Jul 14, 2024

For pm9600, you need to attach a graphics card.

Oh I didn't know this, thanks! I tried pci_GPU though but it didn't work.

The 9600 should work, but possibly not the Kansas version. BeOS was known not to like it.

Initialize hard disks outside of dingusppc using Disk Jockey.

I have an image shared on Dropbox. It is R5 and has a cut down Mac system that only boots the disk tools then launched BeOS. It was from and IDE drive though so no idea how well it would work with SCSI.

The disk is already initialized but for some reason it's not detected. I thought maybe it's because I initialized it with a newer version of Mac OS.

I have never tried a disk initialised by an OS that doesn't run on a BeOS capable Mac, but pretty sure it can boot from a MacOS 9 partitioned drive, so long as the boot OS is 7.5 - 8.1 (possibly 8.5 but it is a bit iffy).

I never tried booting from a drive formatted by a third party tool though.

BeOS should be able to detect the hardware. The boot loader does do some boot strapping from the device tree MacOS loads. That might need to be updated to make it work. I am going to be doing some research on this so I will report back when I know more.

@memsom
Copy link
Author

memsom commented Jul 14, 2024

Are the serial ports emulated and if so can we get the output logged anywhere? It is possible to get BeOS to produce logs when it boots. For PowerPC this is only ever over the serial port, I believe the modem port. You can force it always on with config, but F1 (or possibly del) should start it once the 3D logo is showing fully rendered. It might help in diagnosing what BeOS is doing.

@joevt
Copy link
Contributor

joevt commented Jul 15, 2024

Multiple display support needs some work. I have connected up to 14 displays to dingusppc which works in classic MacOS (had to add code to connect the extra PCI bridges and graphics controllers). A graphics controller that doesn't have a display connected probably doesn't need to have a window, but you want at least one window to appear to do GUI stuff (if controls are added to the window some day in the future). One might want to hide and unhide windows or close them temporarily. One might want to be able to connect a display after booting the guest, since some guest OSes do support hot plugging displays.

pci_GPU is for replacing the built-in graphics controller of the Beige G3.

BeOS can work on Kansas. dingusppc doesn't yet support Kansas.
https://forums.macrumors.com/threads/powersurging-to-mac-os-x-10-5-8-power-macintosh-9600-fun.2144305/post-33258119

The modem port can be accessed using a Unix socket using this parameter:
--serial_backend=socket
which you can access in another Terminal window like this:
socat UNIX-CLIENT:dingussocket -,cs8,parenb=0,echo=0,icanon=0,isig=0,icrnl=0
This socket backend doesn't work for Windows; use --serial_backend=stdio in that case.

This socket backend is used mostly for accessing Open Firmware. It allows input/output in a separate window than the one used for dingusppc so that the stdout logging of dingusppc doesn't get mixed with the output from Open Firmware (or from OS X booting).

@memsom
Copy link
Author

memsom commented Jul 15, 2024

@joevt thanks for all the info. Super helpful!

Tsunami was always the best supported hardware in my opinion - is that on the cards?

@joevt
Copy link
Contributor

joevt commented Jul 15, 2024

Tsunami was always the best supported hardware in my opinion - is that on the cards?

Tsunami (pm9500) is mostly done already, same as Nitro (pm8500). They are based on Tnt (pm7500) in dingusppc. Would Power Surge be a better name for all these than Tnt ?

@memsom
Copy link
Author

memsom commented Aug 13, 2024

Tsunami (pm9500) is mostly done already, same as Nitro (pm8500).

The 9500 is probably problematic for BeOS because we'd also need to emulate a video card that is compatible with it (and the list is short) but the 8500 has onboard video, right? BeOS supported that. 8500 might be the one to use as a target if it emulates the onboard graphics.

How close is almost? I will sit down in a week or so and try it out as I have a week of leave booked end of August. If I can help with the code I will, but I'm not a hardware guy so developing an emulator is probably outside of my current skill set. I'm open to learning though. I really want PowePC BeOS emulation.

@joevt
Copy link
Contributor

joevt commented Aug 13, 2024

8500/9500 can boot classic Mac OS but there are issues for other OS's such as Mac OS X and BeOS. There may be some CPU issues as well as hardware issues. The 7500/8500/8600 built-in display output works. The 8500/8600 also have working Composite/S-Video output. mesh (internal SCSI controller) emulation was fully implemented recently (July 14). I haven't tried it yet to see if it helps BeOS.

@memsom
Copy link
Author

memsom commented Aug 13, 2024

mesh (internal SCSI controller) emulation was fully implemented recently (July 14). I haven't tried it yet to see if it helps BeOS.

It will as it is one of the controllers that are supported.

@maximumspatium
Copy link
Collaborator

How close is almost? I will sit down in a week or so and try it out as I have a week of leave booked end of August. If I can help with the code I will, but I'm not a hardware guy so developing an emulator is probably outside of my current skill set. I'm open to learning though. I really want PowePC BeOS emulation.

I'm going to push more SCSI fixes next week. MESH still needs some more work, especially the DMA part. I want to get DriveSetup (the successor of Apple HD SC Setup) working in DingusPPC first before trying BeOS.

@memsom
Copy link
Author

memsom commented Dec 4, 2024

I had a go - the emulator crashed when the emulated computer transitions from MacOS to BeOS. You do see the BeOS "Be" logo, but it falls back to the debugger. When I have more time I will see what works.

For anyone wanting to try this, I used:

  • a BeOS image for BlueSCSI from Macintosh Garden
  • a BeOS tools image from Macintosh Garden
  • a MacOS 8.0 CD image from Archive.org.

I got it to boot to MacOS, but I couldn't initialise a drive to install it, so I used the other images to open the LoadBeOS app and boot BeOS. I don't think it actually got as far as booting BeOS though.

@classilla
Copy link

I wonder if it fails at the point where it uses that infamous undocumented trick to switch back to supervisor mode.

@memsom
Copy link
Author

memsom commented Dec 4, 2024

I wonder if it fails at the point where it uses that infamous undocumented trick to switch back to supervisor mode.

Yeah, probably. It is pretty easy to recreate. I used the 8500 rom and set it to have 128mb ram. But nothing else other than the files I mentioned are needed. If I get a chance I'll run again and get the address if faults at.

@dingusdev
Copy link
Owner

dingusdev commented Dec 5, 2024

I have a pre-installed hard disk image of BeOS. It gets stuck on an infinite loop with this:

(  17.588s)              ppcmmu.cpp:648   WARN|                                                          ... phys_addr=0x666666E2
(  17.588s)              ppcmmu.cpp:651   WARN| Access to unmapped physical memory, phys_addr=0x666666FA
(  17.588s)              ppcmmu.cpp:648   WARN|                                                          ... phys_addr=0x66666702
(  17.588s)              ppcmmu.cpp:651   WARN| Access to unmapped physical memory, phys_addr=0x666666EE
(  17.588s)              ppcmmu.cpp:648   WARN|                                                          ... phys_addr=0x666666F2
(  17.588s)              ppcmmu.cpp:651   WARN| Access to unmapped physical memory, phys_addr=0x66666706
(  17.588s)              ppcmmu.cpp:648   WARN|                                                          ... phys_addr=0x6666670A
(  17.588s)              ppcmmu.cpp:651   WARN| Access to unmapped physical memory, phys_addr=0x66666716
(  17.588s)              ppcmmu.cpp:648   WARN|                                                          ... phys_addr=0x66666722
(  17.588s)              ppcmmu.cpp:651   WARN| Access to unmapped physical memory, phys_addr=0x66666766
(  17.588s)              ppcmmu.cpp:648   WARN|                                                          ... phys_addr=0x666667C2
(  17.588s)              ppcmmu.cpp:651   WARN| Access to unmapped physical memory, phys_addr=0x6666670E
(  17.589s)              ppcmmu.cpp:651   WARN| Access to unmapped physical memory, phys_addr=0x66666726
(  17.589s)              ppcmmu.cpp:651   WARN| Access to unmapped physical memory, phys_addr=0x666666E6
(  17.589s)              ppcmmu.cpp:648   WARN|                                                          ... phys_addr=0x666666EA
(  17.589s)              ppcmmu.cpp:651   WARN| Access to unmapped physical memory, phys_addr=0x6666666E

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature-request Request support for some feature
Projects
None yet
Development

No branches or pull requests

7 participants