mirror of
https://github.com/garrettsworkshop/MacIIROMDiskDriver.git
synced 2025-02-19 10:30:45 +00:00
Make CD and debug patches explicit
This commit is contained in:
parent
8f8dbc83d5
commit
a62d310c6f
Binary file not shown.
BIN
bin/rom8M.bin
BIN
bin/rom8M.bin
Binary file not shown.
12
entry.s
12
entry.s
@ -8,9 +8,9 @@
|
|||||||
.GLOBAL RDiskDBGNamePos
|
.GLOBAL RDiskDBGNamePos
|
||||||
.GLOBAL RDiskDBGDisPos
|
.GLOBAL RDiskDBGDisPos
|
||||||
.GLOBAL RDiskDBGDisByte
|
.GLOBAL RDiskDBGDisByte
|
||||||
.GLOBAL RDiskCDROMNamePos
|
.GLOBAL RDiskCDRNamePos
|
||||||
.GLOBAL RDiskCDROMDisPos
|
.GLOBAL RDiskCDRDisPos
|
||||||
.GLOBAL RDiskCDROMDisByte
|
.GLOBAL RDiskCDRDisByte
|
||||||
|
|
||||||
dc.l 0x00000000, 0x00000000, 0x00000000, 0x00000000
|
dc.l 0x00000000, 0x00000000, 0x00000000, 0x00000000
|
||||||
dc.l 0x00000000, 0x00000000, 0x00000000, 0x00000000
|
dc.l 0x00000000, 0x00000000, 0x00000000, 0x00000000
|
||||||
@ -20,15 +20,15 @@ RDiskSig:
|
|||||||
.align 4
|
.align 4
|
||||||
RDiskDBGDisPos:
|
RDiskDBGDisPos:
|
||||||
dc.l 0x00000031
|
dc.l 0x00000031
|
||||||
RDiskCDROMDisPos:
|
RDiskCDRDisPos:
|
||||||
dc.l 0x00012CAF
|
dc.l 0x00012CAF
|
||||||
RDiskDBGNameAddr:
|
RDiskDBGNameAddr:
|
||||||
dc.l 0x4088002A
|
dc.l 0x4088002A
|
||||||
RDiskCDROMNameAddr:
|
RDiskCDRNameAddr:
|
||||||
dc.l 0x40892C96
|
dc.l 0x40892C96
|
||||||
RDiskDBGDisByte:
|
RDiskDBGDisByte:
|
||||||
dc.b 0x44
|
dc.b 0x44
|
||||||
RDiskCDROMDisByte:
|
RDiskCDRDisByte:
|
||||||
dc.b 0x44
|
dc.b 0x44
|
||||||
RDiskRAMRequired:
|
RDiskRAMRequired:
|
||||||
.ascii "16"
|
.ascii "16"
|
||||||
|
37
rdisk.c
37
rdisk.c
@ -9,7 +9,7 @@
|
|||||||
#include "rdisk.h"
|
#include "rdisk.h"
|
||||||
|
|
||||||
// Decode keyboard/PRAM settings
|
// 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
|
// Read PRAM
|
||||||
char legacy_startup, legacy_ram;
|
char legacy_startup, legacy_ram;
|
||||||
RDiskReadXPRAM(1, 4, &legacy_startup);
|
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
|
// MacsBug enabled if bit 2 == 1 or not boot
|
||||||
*dbgEN = *unmountEN ||
|
*dbgEN = *unmountEN || (legacy_startup & 0x04);
|
||||||
(legacy_startup & 0x04) ||
|
|
||||||
(*RDiskDBGDisPos == 0);
|
|
||||||
|
|
||||||
// CDROM enabled if bit 3 == 0 or CDROMDis addr invalid or not boot
|
// CD-ROM enabled if bit 3 == 0 or not boot
|
||||||
*cdromEN = *unmountEN ||
|
*cdrEN = *unmountEN || !(legacy_startup & 0x08);
|
||||||
!(legacy_startup & 0x08) ||
|
|
||||||
(*RDiskCDROMDisPos == 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Switch to 32-bit mode and copy
|
// 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
|
// 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;
|
signed char mode = true32b;
|
||||||
SwapMMUMode(&mode);
|
SwapMMUMode(&mode);
|
||||||
// Patch debug and CD-ROM disable bytes
|
romdisk[index] = patch; // Patch byte
|
||||||
romdisk[0x31] = 0x44;
|
|
||||||
//if (dbg) { *dbg = 0x44; }
|
|
||||||
//if (cdrom) { *cdrom = 0x44; }
|
|
||||||
SwapMMUMode(&mode);
|
SwapMMUMode(&mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef void (*RDiskPatch_t)(Ptr, char, char);
|
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;
|
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
|
// 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
|
// Init is called at beginning of first prime (read/write) call
|
||||||
static void RDInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) {
|
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
|
// Mark init done
|
||||||
c->initialized = 1;
|
c->initialized = 1;
|
||||||
// Decode settings
|
// Decode settings
|
||||||
RDDecodeSettings(&unmountEN, &mountEN, &ramEN, &dbgEN, &cdromEN);
|
RDDecodeSettings(&unmountEN, &mountEN, &ramEN, &dbgEN, &cdrEN);
|
||||||
// Set debug and CD-ROM enable flags in storage struct
|
// Set debug and CD-ROM enable flags in storage struct
|
||||||
c->dbgEN = dbgEN;
|
c->dbgEN = dbgEN;
|
||||||
c->cdromEN = cdromEN;
|
c->cdrEN = cdrEN;
|
||||||
|
|
||||||
// If RAM disk enabled, try to allocate RAM disk buffer if not already
|
// If RAM disk enabled, try to allocate RAM disk buffer if not already
|
||||||
if (ramEN & !c->ramdisk) {
|
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
|
// Clearing write protect marks RAM disk enabled
|
||||||
c->status.writeProt = 0;
|
c->status.writeProt = 0;
|
||||||
// Patch debug and CD-ROM enable bytes
|
// Patch debug and CD-ROM enable bytes
|
||||||
patch24(c->ramdisk, dbgEN, cdromEN);
|
patch24(c->ramdisk, dbgEN, cdrEN);
|
||||||
}
|
}
|
||||||
} else { // 24-bit mode
|
} else { // 24-bit mode
|
||||||
// Put RAM disk just past 8MB
|
// 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
|
// Clearing write protect marks RAM disk enabled
|
||||||
c->status.writeProt = 0;
|
c->status.writeProt = 0;
|
||||||
// Patch debug and CD-ROM enable bytes
|
// Patch debug and CD-ROM enable bytes
|
||||||
patch24(c->ramdisk, dbgEN, cdromEN);
|
patch24(c->ramdisk, dbgEN, cdrEN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
6
rdisk.h
6
rdisk.h
@ -4,8 +4,8 @@
|
|||||||
#define RDiskBuf ((char*)0x40880000)
|
#define RDiskBuf ((char*)0x40880000)
|
||||||
extern uint32_t *RDiskDBGDisPos;
|
extern uint32_t *RDiskDBGDisPos;
|
||||||
extern char *RDiskDBGDisByte;
|
extern char *RDiskDBGDisByte;
|
||||||
extern uint32_t *RDiskCDROMDisPos;
|
extern uint32_t *RDiskCDRDisPos;
|
||||||
extern char *RDiskCDROMDisByte;
|
extern char *RDiskCDRDisByte;
|
||||||
#define BufPtr ((Ptr*)0x10C)
|
#define BufPtr ((Ptr*)0x10C)
|
||||||
#define MemTop ((Ptr*)0x108)
|
#define MemTop ((Ptr*)0x108)
|
||||||
#define MMU32bit ((char*)0xCB2)
|
#define MMU32bit ((char*)0xCB2)
|
||||||
@ -26,7 +26,7 @@ typedef struct RDiskStorage_s {
|
|||||||
char initialized;
|
char initialized;
|
||||||
Ptr ramdisk;
|
Ptr ramdisk;
|
||||||
char dbgEN;
|
char dbgEN;
|
||||||
char cdromEN;
|
char cdrEN;
|
||||||
#ifdef RDISK_COMPRESS_ICON_ENABLE
|
#ifdef RDISK_COMPRESS_ICON_ENABLE
|
||||||
char icon[RDISK_ICON_SIZE];
|
char icon[RDISK_ICON_SIZE];
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user