diff --git a/bin/driver7M5.bin b/bin/driver7M5.bin index 9969f77..f75c51c 100755 Binary files a/bin/driver7M5.bin and b/bin/driver7M5.bin differ diff --git a/bin/rom8M.bin b/bin/rom8M.bin index 583aab8..3a20d54 100755 Binary files a/bin/rom8M.bin and b/bin/rom8M.bin differ diff --git a/entry.s b/entry.s index 468bbd8..ea864cf 100644 --- a/entry.s +++ b/entry.s @@ -8,9 +8,9 @@ .GLOBAL RDiskDBGNamePos .GLOBAL RDiskDBGDisPos .GLOBAL RDiskDBGDisByte -.GLOBAL RDiskCDROMNamePos -.GLOBAL RDiskCDROMDisPos -.GLOBAL RDiskCDROMDisByte +.GLOBAL RDiskCDRNamePos +.GLOBAL RDiskCDRDisPos +.GLOBAL RDiskCDRDisByte dc.l 0x00000000, 0x00000000, 0x00000000, 0x00000000 dc.l 0x00000000, 0x00000000, 0x00000000, 0x00000000 @@ -20,15 +20,15 @@ RDiskSig: .align 4 RDiskDBGDisPos: dc.l 0x00000031 -RDiskCDROMDisPos: +RDiskCDRDisPos: dc.l 0x00012CAF RDiskDBGNameAddr: dc.l 0x4088002A -RDiskCDROMNameAddr: +RDiskCDRNameAddr: dc.l 0x40892C96 RDiskDBGDisByte: dc.b 0x44 -RDiskCDROMDisByte: +RDiskCDRDisByte: dc.b 0x44 RDiskRAMRequired: .ascii "16" diff --git a/rdisk.c b/rdisk.c index 7445554..e994c9e 100644 --- a/rdisk.c +++ b/rdisk.c @@ -9,7 +9,7 @@ #include "rdisk.h" // Decode keyboard/PRAM settings -static void RDDecodeSettings(Ptr unmountEN, Ptr mountEN, Ptr ramEN, Ptr dbgEN, Ptr cdromEN) { +static void RDDecodeSettings(Ptr unmountEN, Ptr mountEN, Ptr ramEN, Ptr dbgEN, Ptr cdrEN) { // Read PRAM char legacy_startup, legacy_ram; RDiskReadXPRAM(1, 4, &legacy_startup); @@ -36,15 +36,11 @@ static void RDDecodeSettings(Ptr unmountEN, Ptr mountEN, Ptr ramEN, Ptr dbgEN, P } } - // MacsBug enabled if bit 2 == 1 or DBGDis addr invalid or not boot - *dbgEN = *unmountEN || - (legacy_startup & 0x04) || - (*RDiskDBGDisPos == 0); + // MacsBug enabled if bit 2 == 1 or not boot + *dbgEN = *unmountEN || (legacy_startup & 0x04); - // CDROM enabled if bit 3 == 0 or CDROMDis addr invalid or not boot - *cdromEN = *unmountEN || - !(legacy_startup & 0x08) || - (*RDiskCDROMDisPos == 0); + // CD-ROM enabled if bit 3 == 0 or not boot + *cdrEN = *unmountEN || !(legacy_startup & 0x08); } // Switch to 32-bit mode and copy @@ -57,20 +53,19 @@ void C24(Ptr sourcePtr, Ptr destPtr, unsigned long byteCount) { } // Switch to 32-bit mode and patch -void P24(Ptr romdisk, char dbgByte, char cdromByte) { +void P24(Ptr romdisk, int32_t index, char patch) { + if (index < 0) { return; } // Don't patch if index < 0 signed char mode = true32b; SwapMMUMode(&mode); - // Patch debug and CD-ROM disable bytes - romdisk[0x31] = 0x44; - //if (dbg) { *dbg = 0x44; } - //if (cdrom) { *cdrom = 0x44; } + romdisk[index] = patch; // Patch byte SwapMMUMode(&mode); } typedef void (*RDiskPatch_t)(Ptr, char, char); -static void patch24(Ptr romdisk, char dbgEN, char cdromEN) { +static void patch24(Ptr romdisk, char dbgEN, char cdrEN) { RDiskPatch_t fun = (RDiskPatch_t)P24; - fun(romdisk, dbgEN, cdromEN); + if (dbgEN) { fun(romdisk, 0x00000031, 0x44); } + if (cdrEN) { fun(romdisk, 0x00012CAF, 0x44); } } // Figure out the first available drive number >= 5 @@ -134,14 +129,14 @@ OSErr RDOpen(IOParamPtr p, DCtlPtr d) { // Init is called at beginning of first prime (read/write) call static void RDInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) { - char unmountEN, mountEN, ramEN, dbgEN, cdromEN; + char unmountEN, mountEN, ramEN, dbgEN, cdrEN; // Mark init done c->initialized = 1; // Decode settings - RDDecodeSettings(&unmountEN, &mountEN, &ramEN, &dbgEN, &cdromEN); + RDDecodeSettings(&unmountEN, &mountEN, &ramEN, &dbgEN, &cdrEN); // Set debug and CD-ROM enable flags in storage struct c->dbgEN = dbgEN; - c->cdromEN = cdromEN; + c->cdrEN = cdrEN; // If RAM disk enabled, try to allocate RAM disk buffer if not already if (ramEN & !c->ramdisk) { @@ -160,7 +155,7 @@ static void RDInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) { // Clearing write protect marks RAM disk enabled c->status.writeProt = 0; // Patch debug and CD-ROM enable bytes - patch24(c->ramdisk, dbgEN, cdromEN); + patch24(c->ramdisk, dbgEN, cdrEN); } } else { // 24-bit mode // Put RAM disk just past 8MB @@ -174,7 +169,7 @@ static void RDInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) { // Clearing write protect marks RAM disk enabled c->status.writeProt = 0; // Patch debug and CD-ROM enable bytes - patch24(c->ramdisk, dbgEN, cdromEN); + patch24(c->ramdisk, dbgEN, cdrEN); } } diff --git a/rdisk.h b/rdisk.h index abf3a86..5502ac2 100644 --- a/rdisk.h +++ b/rdisk.h @@ -4,8 +4,8 @@ #define RDiskBuf ((char*)0x40880000) extern uint32_t *RDiskDBGDisPos; extern char *RDiskDBGDisByte; -extern uint32_t *RDiskCDROMDisPos; -extern char *RDiskCDROMDisByte; +extern uint32_t *RDiskCDRDisPos; +extern char *RDiskCDRDisByte; #define BufPtr ((Ptr*)0x10C) #define MemTop ((Ptr*)0x108) #define MMU32bit ((char*)0xCB2) @@ -26,7 +26,7 @@ typedef struct RDiskStorage_s { char initialized; Ptr ramdisk; char dbgEN; - char cdromEN; + char cdrEN; #ifdef RDISK_COMPRESS_ICON_ENABLE char icon[RDISK_ICON_SIZE]; #endif