diff --git a/bin/driver7M5.bin b/bin/driver7M5.bin index 743a23b..7e8613d 100755 Binary files a/bin/driver7M5.bin and b/bin/driver7M5.bin differ diff --git a/bin/rom8M.bin b/bin/rom8M.bin index d17ff5e..c683532 100755 Binary files a/bin/rom8M.bin and b/bin/rom8M.bin differ diff --git a/rdisk.c b/rdisk.c index 784fe40..75ffb7a 100644 --- a/rdisk.c +++ b/rdisk.c @@ -53,9 +53,8 @@ void C24(Ptr sourcePtr, Ptr destPtr, unsigned long byteCount) { } // Switch to 32-bit mode and patch -typedef void (*RDiskPatch_t)(Ptr, char*); #pragma parameter P24(__A0, __A1) -void __attribute__ ((noinline)) P24(Ptr ptr, char *patch) { +void __attribute__ ((noinline)) P24(Ptr ptr, Ptr patch) { signed char mode = true32b; SwapMMUMode(&mode); *ptr = *patch; // Patch byte @@ -165,9 +164,8 @@ static void RDInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) { // Patch debug and CD-ROM enable bytes if (c->ramdisk) { - RDiskPatch_t fun = P24; - if (!dbgEN /*&& *RDiskDBGDisPos >= 0*/) { fun(c->ramdisk + 0x00000031UL, RDiskDBGDisByte); } - if (!cdrEN /*&& *RDiskCDRDisPos >= 0*/) { fun(c->ramdisk + 0x00012CAFUL, RDiskCDRDisByte); } + if (!dbgEN /*&& *RDiskDBGDisPos >= 0*/) { patch24(c->ramdisk + 0x00000031UL, RDiskDBGDisByte); } + if (!cdrEN /*&& *RDiskCDRDisPos >= 0*/) { patch24(c->ramdisk + 0x00012CAFUL, RDiskCDRDisByte); } } // Unmount if not booting from ROM disk @@ -234,15 +232,12 @@ OSErr RDCtl(CntrlParamPtr p, DCtlPtr d) { switch (p->csCode) { case killCode: return noErr; - /*case kFormat: + case kFormat: if (!c->status.diskInPlace || c->status.writeProt || !c->ramdisk) { return controlErr; } - long zero[32]; - for (int i = 0; i < 32; i++) { zero[i] = 0; } - for (int i = 0; i < 32; i++) { - copy24((Ptr)zero, c->ramdisk + i * sizeof(zero), sizeof(zero)); - } - return noErr;*/ + char zero = 0; + patch24(c->ramdisk, &zero); + return noErr; case kVerify: if (!c->status.diskInPlace) { return controlErr; } return noErr; diff --git a/rdisk.h b/rdisk.h index 3983a5b..0812bda 100644 --- a/rdisk.h +++ b/rdisk.h @@ -35,7 +35,10 @@ typedef struct RDiskStorage_s { } RDiskStorage_t; typedef void (*RDiskCopy_t)(Ptr, Ptr, unsigned long); -#define copy24(s, d, b) { RDiskCopy_t copy24 = C24; copy24(s, d, b); } +#define copy24(s, d, b) { RDiskCopy_t f = C24; f(s, d, b); } + +typedef void (*RDiskPatch_t)(Ptr, Ptr); +#define patch24(d, s) { RDiskPatch_t f = P24; f(d, s); } #define PackBits_Repeat(count) (-1 * (count - 1)) #define PackBits_Literal(count) (count - 1)