From dfd35cef2dbcab33be166ec3e926117992935e8e Mon Sep 17 00:00:00 2001 From: Zane Kaminski Date: Fri, 2 Apr 2021 03:51:40 -0400 Subject: [PATCH] Add ROM disk disable --- bin/driver7M5.bin | Bin 1597 -> 1733 bytes bin/rom8M.bin | Bin 8388608 -> 8388608 bytes rdisk.c | 36 +++++++++++++++++++++++------------- rdisk.h | 10 ++++------ 4 files changed, 27 insertions(+), 19 deletions(-) diff --git a/bin/driver7M5.bin b/bin/driver7M5.bin index 20e393cfb7e3a379c3fc22cf71d4b621b3b8cbb9..52eb8ad69e98d9789e0048d20df6b2561d7e307b 100755 GIT binary patch delta 723 zcmY*VOK1~O6g_V;v9U}whGHdX`WS{bnrRxa$V3FEqu6u^p&yDaL`IN|VyYoDr9v@{ zq!3)xN=oU%MQ|aNf{WCR;3pAuDI&H@3nGZR5L}2Gjd!LE=;pq6&i$Nw?lb9C$KvSG zpUEu`Qu)MZ)GvbFbdV))BQfD1=`t9C={>C)@50?ugC#3x*ihSt=C8r8h*p+ZvT*RY zng|c`E9f-KHiY{BIa}xf&%nP~mR0zrB4&ULT`?SmB9*og zemJ>zrB)Un15va|3_==Mk*|TfJ~S@!Q`M;BqA=O%wAALVA0rsv`KLH>G7WxPJgmdt zN9QqgS~<*jS0`lMX?N{)T2EcUM^I?ObLYQUT*i!$v=!a44%PH+;ITf%5w$bPc$XF2U8 N#l4J0*JIue_7@Auy}$qf delta 588 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 diff --git a/rdisk.c b/rdisk.c index 3c2c0c3..69b2c36 100644 --- a/rdisk.c +++ b/rdisk.c @@ -54,10 +54,10 @@ void C24(Ptr sourcePtr, Ptr destPtr, unsigned long byteCount) { // Switch to 32-bit mode and patch #pragma parameter P24(__A2, __D3) -void __attribute__ ((noinline)) P24(Ptr ptr, char patch) { +void __attribute__ ((noinline)) P24(Ptr pos, char patch) { signed char mode = true32b; SwapMMUMode(&mode); - *ptr = patch; // Patch byte + *pos = patch; // Patch byte SwapMMUMode(&mode); } @@ -127,10 +127,12 @@ static void RDInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) { c->initialized = 1; // Decode settings RDDecodeSettings(&unmountEN, &mountEN, &ramEN, &dbgEN, &cdrEN); - // Set debug and CD-ROM enable flags in storage struct - c->dbgEN = dbgEN; - c->cdrEN = cdrEN; - + // Set debug and CD-ROM disable stuff in storage struct + c->dbgDisPos = dbgEN ? *((long*)0x40851D98) : -1; + c->cdrDisPos = cdrEN ? *((long*)0x40851D9C) : -1; + c->dbgDisByte = *((char*)0x40851DA8); + c->cdrDisByte = *((char*)0x40851DA9); + // If RAM disk enabled, try to allocate RAM disk buffer if not already if (ramEN & !c->ramdisk) { if (*MMU32bit) { // 32-bit mode @@ -162,14 +164,12 @@ static void RDInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) { } } - // Patch debug and CD-ROM enable bytes + // Apply patches to RAM disk if (c->ramdisk) { - Ptr pos = c->ramdisk + *((long*)0x40851D98); - char patch = *((char*)0x40851DA8); - if (!dbgEN /*&& *RDiskDBGDisPos >= 0*/) { patch24(pos, patch); } - pos = c->ramdisk + *((long*)0x40851D9C); - patch = *((char*)0x40851DA9); - if (!cdrEN /*&& *RDiskCDRDisPos >= 0*/) { patch24(pos, patch); } + // Patch debugger enable byte + if (c->dbgDisPos >=0) { patch24(c->ramdisk + c->dbgDisPos, c->dbgDisByte); } + // Patch CD-R enable byte + if (c->cdrDisPos >=0) { patch24(c->ramdisk + c->dbgDisPos, c->dbgDisByte); } } // Unmount if not booting from ROM disk @@ -211,6 +211,16 @@ OSErr RDPrime(IOParamPtr p, DCtlPtr d) { // Read from disk into buffer. if (*MMU32bit) { BlockMove(disk, p->ioBuffer, p->ioReqCount); } else { copy24(disk, StripAddress(p->ioBuffer), p->ioReqCount); } + if (c->dbgDisPos >= 0 && + c->dbgDisPos >= d->dCtlPosition && + c->dbgDisPos < d->dCtlPosition + p->ioReqCount) { + p->ioBuffer[c->dbgDisPos - d->dCtlPosition] = c->dbgDisByte; + } + if (c->dbgDisPos >= 0 && + c->cdrDisPos >= d->dCtlPosition && + c->cdrDisPos < d->dCtlPosition + p->ioReqCount) { + p->ioBuffer[c->cdrDisPos - d->dCtlPosition] = c->cdrDisByte; + } } else if (cmd == aWrCmd) { // Write // Fail if write protected or RAM disk buffer not set up if (c->status.writeProt || !c->ramdisk) { return wPrErr; } diff --git a/rdisk.h b/rdisk.h index 7267cff..ff92333 100644 --- a/rdisk.h +++ b/rdisk.h @@ -2,10 +2,6 @@ #define RDISK_H #define RDiskBuf ((char*)0x40880000) -extern uint32_t *RDiskDBGDisPos; -extern char *RDiskDBGDisByte; -extern uint32_t *RDiskCDRDisPos; -extern char *RDiskCDRDisByte; #define BufPtr ((Ptr*)0x10C) #define MemTop ((Ptr*)0x108) #define MMU32bit ((char*)0xCB2) @@ -27,8 +23,10 @@ typedef struct RDiskStorage_s { DrvSts2 status; char initialized; Ptr ramdisk; - char dbgEN; - char cdrEN; + long dbgDisPos; + long cdrDisPos; + char dbgDisByte; + char cdrDisByte; #ifdef RDISK_COMPRESS_ICON_ENABLE char icon[RDISK_ICON_SIZE]; #endif