[CDG5] Booting 9 from driver-less disks

Elliot Nunn elliotnunn at fastmail.com
Sun Aug 25 22:32:18 AWST 2019


Got it, for real!

https://github.com/elliotnunn/tbxi-patches/commit/a8c1a4d <https://github.com/elliotnunn/tbxi-patches/commit/a8c1a4d>

The commit message describes some of the hurdles.

> On 24 Aug 2019, at 9:19 am, Elliot Nunn <elliotnunn at fastmail.com> wrote:
> 
> Got it! …kind of
> 
> This commit adds an ATALoad patch to the tbxi-patches library:
> 
> https://github.com/elliotnunn/tbxi-patches/commit/9351898
> 
> ATALoad reliably falls back on the ROM ATADisk driver when no driver partition
> is present. In QEMU, this enables a successful boot. Not so on my Mac mini. On
> that machine, the ROM driver does not recognise the bootable partition as being
> bootable, and we get stuck at the question mark.
> 
>> On 20 Aug 2019, at 2:32 pm, Elliot Nunn <elliotnunn at fastmail.com> wrote:
>> 
>> Hi all,
>> 
>> The classic Mac OS requires non-floppy disks to have a driver partition to be
>> bootable. The ROM ATA/SCSI/FW/USB Manager has a special code path to load a DRVR
>> from this partition, and then the DRVR takes over. (After boot is completed,
>> DRVRs can come from other sources.)
>> 
>> This was fine when Macintosh formatting utilities routinely wrote out this
>> driver partition. But many 9-compatible Macs either shipped with, or have ended
>> up with, driver-less HFS boot disks. Open Firmware can read the NewWorld ROM
>> from these disks, but the ROM then leaves the machine with an OldWorld-style
>> blinking-question-mark-on-floppy-disk. (For reasons that I don't understand yet,
>> the ROM sometimes relents after 25 seconds of blinking, and uses its own DRVR.)
>> 
>> For Mac OS 8/9 to boot, the disk then needs to be reinitialised by Drive Setup
>> or similar. This is inconvenient for tinkerers, and a show-stopper on machines
>> with limited I/O options.
>> 
>> By the time this problem is encountered, the NewWorld ROM is already safely
>> loaded into RAM. Now, with our ability to patch the NewWorld ROM, we have an
>> opportunity to produce a workaround.
>> 
>> I have looked into this, and I think I am close to a solution. These are some of
>> my findings about the ROM boot process, which I don't think are documented
>> elsewhere. They focus on the ATA Manager, but the Monster Disk Driver Technote
>> suggests that SCSI will work the same way.
>> 
>> The .ATALoad DRVR in ROM (ID -20175) uses accRun time to scan for new ATA
>> drives, and load their ATA drivers. It can be signalled to do this by the 10.x
>> ROM function at offset 0x5D940, and possibly by another mechanism as more disks
>> come online. The 0x5D940 function is called in every search iteration of the ROM
>> function FindStartupDevice. The ATA Manager has a horrible and poorly documented
>> calling convention, but using IDA I have gotten a decent idea of the ATA Manager
>> calls that .ATALoad makes. ATA Manager calls are used to load the driver from
>> disk, then the driver has a special entry point at offset 8 to determine whether
>> a given partition is bootable. At this point, I think, the driver calls the ATA
>> Manager to "open" itself and get a slot in the unit table.
>> 
>> So one option is to patch ATALoad to "see" a driver partition where there is
>> none. It would be difficult to automate such a patch to work with different
>> versions, because the relevant function is compiled from C, so register
>> allocations might change frequently.
>> 
>> At the moment I am not near a real Mac, but in Qemu, I have noticed that the 68k
>> ROM glue to the StartLib function GetStartupDevice returns an error when the
>> driver partition is missing. This suggests that the native StartLib parcel PEF
>> is unable to interpret the "bootpath" property of the "chosen" node without the
>> help of the DRVR. I think the most elegant solution would still be to fake the
>> presence of a driver partition.
>> 
>> Cheers,
>> 
>> Elliot
>> 
>> _______________________________________________
>> cdg5 mailing list
>> cdg5 at ucc.asn.au
>> https://lists.ucc.gu.uwa.edu.au/mailman/listinfo/cdg5
> 
> _______________________________________________
> cdg5 mailing list
> cdg5 at ucc.asn.au
> https://lists.ucc.gu.uwa.edu.au/mailman/listinfo/cdg5

-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.ucc.gu.uwa.edu.au/pipermail/cdg5/attachments/20190825/dde3c243/attachment.htm 


More information about the cdg5 mailing list