From e4b2775f11d7bc2bd925d8accc2975927b61e027 Mon Sep 17 00:00:00 2001 From: Zane Kaminski Date: Fri, 2 Apr 2021 04:21:40 -0400 Subject: [PATCH] ... --- bin/driver7M5.bin | Bin 1733 -> 1867 bytes bin/rom8M.bin | Bin 8388608 -> 8388608 bytes rdisk.c | 46 ++++++++++++++++++++++++++++++++-------------- rdisk.h | 10 ++++++++-- 4 files changed, 40 insertions(+), 16 deletions(-) diff --git a/bin/driver7M5.bin b/bin/driver7M5.bin index 52eb8ad69e98d9789e0048d20df6b2561d7e307b..477b7eb2050d64e54e7f9e9c9661ae57e6a87d04 100755 GIT binary patch delta 716 zcmZ9IO-K}B7{~wb?5n%VB*V72BD(uB4Z66WMBo}8-rXqIK?Wtlias`wouVa{MMGl1 zE!WsnDg)BN!yc_}cBxZKRF}d-C3I5gkVuDa;X$-_rZuX|!}I$;|Mz`9-X443v6Rh{ zz}U72#!PMpjT>mS{wDIqp}hLLMmHRiZ-St^(DCO*V7Z#-VN0mq%nx`KrG8bZD1Pnw z#YJOge&pmS;L>8U{eK5*I;z4khUKj|Id99PB570hBVx==EarB?r(?OuD7%G#UNa$m z?HlioB2)lb4?68aqTN85mPn4LNPR+3wA^w;N)iKln#>eIdV11iT51K^Z3Hvz9KPMg zAj#6iFkc9jHH$CwK2B!P$3~2$eh$r5=2n{+ac$$SxaMdn-L~HVThU3;EKkvF$5+7ljn*JdRD^OE0P;iDJ4yuc; zX3d`VoH$D(321T^vp^B}sm7putjhPB{LP<$S0<1Oz^Zx&%-wmIQFf-DaIR74Vo_-J z7tcW8V2`!cFR0up8ZX82f&2@*lZGW`+Jp4k@j_`s%$qNL7V&bnRm2C+*J!Ww3$vfW AhyVZp delta 528 zcmX@jca(R6lM}-^pZm-Vex)AI84e^euzo}4G1h^22}%$-77q}QCxd~JK`M<8uA^^a zOTuI=Ms>!3$w7<_Ov?8rUt#pCkL>q&E@P$Rq2Z~J$spp@k*C#26H=VifInxiCO!C1n?z`!WQ$i&LPqQc1K z#K7_LkUFCii_5`uoudB<1{{nG4C!nF`V8_3*CZI3SQwZ%!WkJDfmS+!1VNfB7|R$- z7?ms?T4iTQF{?W=sCYG{Gcardi_8J?HN-1{aw`~g!1PK6U9Z&)3gHJm4|*Or(3tMv zWx=xvsJ>&e0JFWjmV!2eN-hu3Gdfof`0aFPl?wo>*2onCiKt{VC|rHbpaKPyoBhLV-oWd4V3-MIw{qShPg`YbbCo z2vu?bNq`+8lCWp;92R*dm7K|YS>lAJ6`V_8_&1^83Xtq_Vn|^4du+2Ft1J@$Jd}`; diff --git a/bin/rom8M.bin b/bin/rom8M.bin index 399416d768d9be54068ba31a0bd9bd1b30102434..dd4ab3369ec6a37b17db4af88899ea3ab6d3210e 100755 GIT binary patch delta 1243 zcmZ9|OK=Nu90%~z2Ab$dK3{#u{1R3txnd# zp*OEv$4t49gK;uBc$~~IV+>;)j2UAbO!;n*H|NbADOh(LDvMeiPi?ZTf zY1kEI&i2r`#?oHvUfRk(CniuQ@SqCEGq?RF$0YXNA-J;*t`o$3VR#@`+09 z_Mz?ejNPH^+%y>P>2GbCL$rA?RQ`VlAM41Xqn*sSTMDqXrs0+{g3@JbQ7zt z4zuGzF|iN1ib%Oir5|$hSyT+Rs2AO7#ZWK0u7x60$6Mo9>Qzz-mA>m^(OYQiC=_p6 zwF;H|g>-8y1>_Lb=?>)}DKEaO14O^OwEjZX`%g8X-66g)*OqI0{3N5RTG%$M6Wwk! zm`%3Jk!Rn3SbqqcOLOr##R zzuxw(15aN{M0#m;hI3FmF4ZmXgx@>lKV(8V>MEPbMzZ88(J@`)@=Mf?(a<8 zGcVOh9)auTjT&jkZ+#W4tg@DN8QF{CsHk*24za2%BItY=Nz?4YtD$*a->P1-oGnbirOof)4v&KOBIA&<%&+FdTst9ECI- cgX7QxC*UOX!YMcnXTX57aBd{8^fkTw2|0$L4*&oF delta 1150 zcmYk%QA`te90%~<|9XEY*f9p3Fr;_abG1MG<-%d(KYY{oqi6SKu=;bGZRAC|e8EE&cZ;+AMaj1Mkazpc3J;dA%@{(k@e z{ePECCdFhk;k#|Uo9jsm6C16V zz?Y=9ha@G$I1Bol*kT`&oZv50StCihkBvmtQXd-@h*%X9IEfl74v_W!ii-urj^&6a zku{pEj3`o2+DNkTM!I`or&TI$7i z_fT1`qMaq>_CKU;)Oo}gs3(gqhIhtq^{gKC9i9t~U~0-9Fx^frvsqJj@-6I|8Fum- z4B{otmZCADDABs=q0-+{wyBMLugpt@Hbz32XhDsUlAp_`h)VmSH$Rl!%s6?SJ?mDA z7W-9yu9F|cZrm_!DwhQ!hW6-m&;=kkhWq=HN`pfliRqhZv7h0kuX6O6o zg0bvmoMa09Oh2~DwPTibvbH_>x7zuuWnJ%zlr(oy!8tLWHiY=CR&vF%cgWpT*z=$= znN66n<`%hJ{$BFVgq~#oRtJ^AMH#ER=FQ<<>g9~ap#TcO3Pn&1o4^LIKnc7GrSKY* zK{?prb=V9QPzi596>NcOaDW6dDBy(Ly)~f0R@eqEa6>KBK|Oe&0ld%%O|Ttyz?-lW z-h#Jb7x;XTtK>*sJ13KY7=z<`0gARM42lhb-_Cqi9!2x(54njX1 zf&n-TN8kha5RSqzI1YngzzO&WK8BNU3c?V9({KhpfwK^WA&9{_h{LClfX`qUMqm^^ WhcOt3FW@{(zy+ARp3yGu`13g;&y%A7 diff --git a/rdisk.c b/rdisk.c index 69b2c36..252857b 100644 --- a/rdisk.c +++ b/rdisk.c @@ -52,12 +52,30 @@ void C24(Ptr sourcePtr, Ptr destPtr, unsigned long byteCount) { SwapMMUMode(&mode); } -// Switch to 32-bit mode and patch -#pragma parameter P24(__A2, __D3) -void __attribute__ ((noinline)) P24(Ptr pos, char patch) { +// Switch to 32-bit mode and get +#pragma parameter G24(__A2) +char __attribute__ ((noinline)) G24(Ptr pos) { signed char mode = true32b; SwapMMUMode(&mode); - *pos = patch; // Patch byte + return *pos; // Peek + SwapMMUMode(&mode); +} + +// Switch to 32-bit mode and get +#pragma parameter G24L(__A2) +long __attribute__ ((noinline)) G24L(long *pos) { + signed char mode = true32b; + SwapMMUMode(&mode); + return *pos; // Peek + SwapMMUMode(&mode); +} + +// Switch to 32-bit mode and set +#pragma parameter S24(__A2, __D3) +void __attribute__ ((noinline)) S24(Ptr pos, char patch) { + signed char mode = true32b; + SwapMMUMode(&mode); + *pos = patch; // Poke SwapMMUMode(&mode); } @@ -128,10 +146,12 @@ static void RDInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) { // Decode settings RDDecodeSettings(&unmountEN, &mountEN, &ramEN, &dbgEN, &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); + peek24L((long*)0x40851D98, c->dbgDisPos); + peek24L((long*)0x40851D9C, c->cdrDisPos); + peek24((char*)0x40851DA8, c->dbgDisByte); + peek24((char*)0x40851DA9, c->cdrDisByte); + if (dbgEN) { peek24(RDiskBuf + c->dbgDisPos, c->dbgDisByte); } + if (cdrEN) { peek24(RDiskBuf + c->cdrDisPos, c->cdrDisByte); } // If RAM disk enabled, try to allocate RAM disk buffer if not already if (ramEN & !c->ramdisk) { @@ -167,9 +187,9 @@ static void RDInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) { // Apply patches to RAM disk if (c->ramdisk) { // Patch debugger enable byte - if (c->dbgDisPos >=0) { patch24(c->ramdisk + c->dbgDisPos, c->dbgDisByte); } + poke24(c->ramdisk + c->dbgDisPos, c->dbgDisByte); // Patch CD-R enable byte - if (c->cdrDisPos >=0) { patch24(c->ramdisk + c->dbgDisPos, c->dbgDisByte); } + poke24(c->ramdisk + c->cdrDisPos, c->cdrDisByte); } // Unmount if not booting from ROM disk @@ -211,13 +231,11 @@ 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 && + if (!c->ramdisk && 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 && + if (!c->ramdisk && c->cdrDisPos >= d->dCtlPosition && c->cdrDisPos < d->dCtlPosition + p->ioReqCount) { p->ioBuffer[c->cdrDisPos - d->dCtlPosition] = c->cdrDisByte; } diff --git a/rdisk.h b/rdisk.h index ff92333..e6961c6 100644 --- a/rdisk.h +++ b/rdisk.h @@ -35,8 +35,14 @@ typedef struct RDiskStorage_s { typedef void (*RDiskCopy_t)(Ptr, Ptr, unsigned long); #define copy24(s, d, b) { RDiskCopy_t f = C24; f(s, d, b); } -typedef void (*RDiskPatch_t)(Ptr, char); -#define patch24(a, d) { RDiskPatch_t f = P24; f(a, d); } +typedef char (*RDiskPeek_t)(Ptr); +#define peek24(a, d) { RDiskPeek_t f = G24; d = f(a); } + +typedef long (*RDiskPeekL_t)(long*); +#define peek24L(a, d) { RDiskPeekL_t f = G24L; d = f(a); } + +typedef void (*RDiskPoke_t)(Ptr, char); +#define poke24(a, d) { RDiskPoke_t f = S24; f(a, d); } #define PackBits_Repeat(count) (-1 * (count - 1)) #define PackBits_Literal(count) (count - 1)