diff --git a/bin/driver7M5.bin b/bin/driver7M5.bin index 651bd30..155c930 100755 Binary files a/bin/driver7M5.bin and b/bin/driver7M5.bin differ diff --git a/bin/rom8M.bin b/bin/rom8M.bin index 3667c1e..88e87c2 100755 Binary files a/bin/rom8M.bin and b/bin/rom8M.bin differ diff --git a/rdisk.c b/rdisk.c index 18e564d..c16634b 100644 --- a/rdisk.c +++ b/rdisk.c @@ -57,17 +57,23 @@ void C24(Ptr sourcePtr, Ptr destPtr, unsigned long byteCount) { } // Switch to 32-bit mode and patch -void P24(Ptr ramdisk, char dbgEN, char cdromEN) { +void P24(Ptr dbg, Ptr cdrom, char dbgByte, char cdromByte) { signed char mode = true32b; SwapMMUMode(&mode); - register Ptr dbg __asm__("%a1") = &ramdisk[*RDiskDBGDisPos]; - register Ptr cdrom __asm__("%a2") = &ramdisk[*RDiskCDROMDisPos]; // Patch debug and CD-ROM disable bytes - //if (!dbgEN) { *dbg = *RDiskDBGDisByte; } - if (!cdromEN) { *cdrom = *RDiskCDROMDisByte; } + if (dbg) { *dbg = dbgByte; } + if (cdrom) { *cdrom = cdromByte; } SwapMMUMode(&mode); } +typedef void (*RDiskPatch_t)(Ptr, Ptr, char, char); +static void patch24(Ptr buf, char dbgEN, char cdromEN) { + RDiskPatch_t fun = (RDiskPatch_t)P24; + fun(/*dbgEN ?*/ buf + *RDiskDBGDisPos /*: (Ptr)0*/, + /*cdromEN ?*/ buf + *RDiskCDROMDisPos /*: (Ptr)0*/, + *RDiskDBGDisByte, *RDiskCDROMDisPos); +} + // Figure out the first available drive number >= 5 static int RDFindDrvNum() { DrvQElPtr dq; diff --git a/rdisk.h b/rdisk.h index efd6492..abf3a86 100644 --- a/rdisk.h +++ b/rdisk.h @@ -34,8 +34,6 @@ typedef struct RDiskStorage_s { typedef void (*RDiskCopy_t)(Ptr, Ptr, unsigned long); #define copy24(s, d, b) { RDiskCopy_t copy24 = (RDiskCopy_t)C24; copy24(s, d, b); } -typedef void (*RDiskPatch_t)(Ptr, char, char); -#define patch24(s, d, b) { RDiskPatch_t patch24 = (RDiskPatch_t)P24; patch24(s, d, b); } #define PackBits_Repeat(count) (-1 * (count - 1)) #define PackBits_Literal(count) (count - 1)