From a65c7b87076960de53e2450c9a15a227ed0df185 Mon Sep 17 00:00:00 2001 From: Zane Kaminski Date: Fri, 2 Apr 2021 00:43:39 -0400 Subject: [PATCH] Don't inline patch function... --- bin/driver7M5.bin | Bin 1575 -> 1515 bytes bin/rom8M.bin | Bin 8388608 -> 8388608 bytes rdisk.c | 21 +++++++++------------ 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/bin/driver7M5.bin b/bin/driver7M5.bin index aa512ee9001df316dd1c4335c03c792050c8af8f..ec49372317428a8cf8fa2e8cbe617bc12c8a1698 100755 GIT binary patch delta 405 zcmZ3^^O}2tlM}-YpZm-Vex)AI84e^euu38G82doH1SN4yW72iMAY{QG8QElot;hQY<7g27Oq z!EdKSt6YHpdj>AA<}?YAxV{Yoqt1GLpjsq3mh>#33Cv!sX=w%feeTOtMD+WWaxgP6 zq;m-AGsq_}{MV9VW@2SvQUVGxrVD`tK_04NtYEBR1WHReF(!N|1F@7Q*D%YnivU?+ zUaXVnF-tNwP2Ry=C@7-9xgb=@L4ifV8Emo0WGfb9-U|ii5*YrSD!2k9k8G}DS<46j D#Sd}= delta 515 zcmaFOy_{!)lM|zp&wXYFzfzCq391CN(JgFu>sd<{?qyW@KXb^(C}u>uXEH4H8ch6p}Tl~9@*x+(=521cFr zqI(!zI2aIWRpKN1{Yu*l5=)XZj7%69BKtj_%P^>MXmDyVfKA{Bs^u4$xcd>K!{m94 zNj!}IR01Tl8069z80{wWFzLE45wTz_VPaxn6kvYBQN(zl(TPop!HXr0fnnD(ZZ2j9 z#sbD;4Wh0LDx%H|s$Q!Y6v7X9G@~ diff --git a/bin/rom8M.bin b/bin/rom8M.bin index e8268bc0bfcab39c915b7ae53f9f740ecec27584..957951a4f12836cbd428d1d6008cbff5499db052 100755 GIT binary patch delta 986 zcmYk(S!_&U6u|NG&CI2$1~sKd+qpAsEz@OCOHque<+^IrQmVE=&24KNOBoawwY})$ zef21o5F|n*N<>6NJa`ZhUZfI{c#(KB{+CGl@H_d=Ip3Pkwr!v7>Q%j-UT?4OzIL}X zA@7?$dnMUze3ky~q6G(M>WZ7CBL8~cPi|JwAxeU2|Nj-fJI>EiE#lZ^+ArmEvLS6p zfv38nxi~6iX;FKefsj_S>}_GaI_y!RO1xkE8THyuXn`T7FD)`KFg)KYDx+T5MG2`W zYLrUzy67AF4cq89&KOUh*;d@FFSu)o^gC_3R(d*k?`iv3{c`1U(KA^iuJ^<*iCnEs zM8%^=MYm>{7t(=HgDf_(GA$;_hw<}e&8vP$zIiTP?ABuqqN;Dlm^-NFv%1*9Yij9q z=1J4%l5A^VvOCW!V&xUaB$Sd|H0bqc;)zgHR-s#TUvyk$Rga<_OsLe)Bkm~TeCM7+ z0}R)jn&S^^(n zBvzprtFZ=au?{U*j}2(WMzmoQHe(C6VjEJ}jvd&EcI-kL7CO+0F6_o0?8QFphx=a# ea1e)Z7~MF6qsZbIj^hM+a1y5;IOV51KmGyl@k`nO delta 1035 zcmZ9{OKeP09LMqhow;{9t#84t8i4N7G~lofVH*BaK|Ds57F z91c;u&X4X>%J8L#t4vHaA@bzYgaW51Ddm;rTP*=!v(%Wk#n?6+wW7n(%h4Avtz^t> z^4w2~+_1msT19`|gXdiV<9bc27^!qLY-GaML2QgIo{}ui^>UBQC}|$V>Y9in{`E|57OTmK zC6c?*eq?ARdSCpq=}HziX5^;$=hTZTVM7|jqMBTo%-Umyc5>2WBY$wKKWwN*bL?^W zN@bsYyh@ut@onl&T*hCg-Z8!!x?82)QLft68eGVO8~G@}1b8qJg(!j-lTeHjl){I} zn1ZR8hB8b?IVw;I9R{l4M>PVdK`myW4l@x%J!YW+vk}4^%*8y+#{w+GA~d22i?IYt zu?)+x0xJ>5Dn!tX7Och^tVI;9FtHA8SdSPspdA~r37fG6ThW1S*p408iCx%@J=lwV zh@%txaR6O7hy;@8#vvTW5gf%a9LEWya1y6*8a?R68JtBL=WreukikXt4cXQGhu;4L DMgvV6 diff --git a/rdisk.c b/rdisk.c index 683511b..6aa874e 100644 --- a/rdisk.c +++ b/rdisk.c @@ -53,7 +53,8 @@ void C24(Ptr sourcePtr, Ptr destPtr, unsigned long byteCount) { } // Switch to 32-bit mode and patch -void P24(Ptr ramdisk, long index, char patch) { +typedef void (*RDiskPatch_t)(Ptr, long, char); +void __attribute__ ((noinline)) P24(Ptr ramdisk, long index, char patch) { if (index < 0) { return; } // Don't patch if index < 0 signed char mode = true32b; SwapMMUMode(&mode); @@ -61,13 +62,6 @@ void P24(Ptr ramdisk, long index, char patch) { SwapMMUMode(&mode); } -typedef void (*RDiskPatch_t)(Ptr, long, char); -static void patch24(Ptr ramdisk, char dbgEN, char cdrEN) { - RDiskPatch_t fun = P24; - if (!dbgEN) { fun(ramdisk, 0x00000031UL, 0x44); } - if (!cdrEN) { fun(ramdisk, 0x00012CAFUL, 0x44); } -} - // Figure out the first available drive number >= 5 static int RDFindDrvNum() { DrvQElPtr dq; @@ -154,8 +148,6 @@ static void RDInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) { BlockMove(RDiskBuf, c->ramdisk, RDiskSize); // Clearing write protect marks RAM disk enabled c->status.writeProt = 0; - // Patch debug and CD-ROM enable bytes - patch24(c->ramdisk, dbgEN, cdrEN); } } else { // 24-bit mode // Put RAM disk just past 8MB @@ -168,11 +160,16 @@ static void RDInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) { copy24(RDiskBuf, c->ramdisk, RDiskSize); // Clearing write protect marks RAM disk enabled c->status.writeProt = 0; - // Patch debug and CD-ROM enable bytes - patch24(c->ramdisk, dbgEN, cdrEN); } } + // Patch debug and CD-ROM enable bytes + if (c->ramdisk) { + RDiskPatch_t fun = P24; + if (!dbgEN) { fun(c->ramdisk, 0x00000031UL, 0x44); } + if (!cdrEN) { fun(c->ramdisk, 0x00012CAFUL, 0x44); } + } + // Unmount if not booting from ROM disk if (unmountEN) { c->status.diskInPlace = 0; }