From d3219cae7c85b9fe2eaa29762c2417db74280057 Mon Sep 17 00:00:00 2001 From: Zane Kaminski Date: Mon, 20 Dec 2021 01:22:12 -0500 Subject: [PATCH] New approach to mounting under other boot volume --- bin/GWSys6_4M.bin | Bin 4194304 -> 4194304 bytes bin/GWSys6_8M.bin | Bin 8388608 -> 8388608 bytes bin/GWSys71_8M.bin | Bin 8388608 -> 8388608 bytes bin/GWSys7Diagnostics_8M.bin | Bin 8388608 -> 8388608 bytes bin/baserom_romdisk_noramtest.bin | Bin 524288 -> 524288 bytes bin/baserom_romdisk_ramtest.bin | Bin 524288 -> 524288 bytes bin/driver.bin | Bin 1925 -> 2163 bytes rdisk.c | 122 +++++++++++++++++------------- rdisk.h | 4 +- 9 files changed, 72 insertions(+), 54 deletions(-) diff --git a/bin/GWSys6_4M.bin b/bin/GWSys6_4M.bin index a8bfc930f020fe433c57a3d1d023b51bde70d074..1ee3ff6303d3b30cd41ee0b23ed05ac1c42aa43a 100755 GIT binary patch delta 1797 zcmZ9Me{54#6vxl&59qLtM=e|3x^nk;E!{fWii3?g;jOE&dyY~@kdYWuW$W9BY|UJW zCQaIf0n;qbKL}GpOifJOgcw6qkPsP(;je|@0?`lxM3#VPfFRb(kCE55n5wln` ze1(KVtb>4HvmGwN`e zKgryU+z^9ui#ksB1kvS4kNzik0R8~?!SCQ+^khE0`3^Z$zkW}%CVy$YZMEpr(O07> zXzpu7W5H@Nk-})LLMGOTTv|Vq+!3;CQ)|<7h@@N<+eLOyY{!WI6p_)wwzrS4t_&IW znAM>~f9c!GzKSuD3;%I)*QIp}8A{VAxv8$1taZD{LB(u6ypHx2{XABukZpBZ+2rm@!n(<>4rye_dt$1OTnQ4Y3+cJAqz>|6 zjxP@$g1@6D=hPh|xF*aEL**hTDO~oVU-YUKX+xN?IT~l z`?_iC-oz#K2(j%GEfe9a&9Be3oS7KVHmLR1V;Tv4qwUPxoMDoWnCRE@>Hw7CLYQ!g zkK~JIqTed}Rwyzr>fx{d;zjFN@YW07!Gd=X-tGl&)vrI)Od%f`F`7k0Pq1dbr|Z#E z?AZw2d4@GTjmi)X(5IE=^2`?!j*GX7hbu7D+=(~b^_>p{>!NRbDGEJ z4a+32$Nb^RUt&eMZIZ$=*vmptJ;?Ls^_UtbneRuh<(l^gaCq3VBP3gh?^+|>iNogQ zHpabi?hD=}|9W>7yxkUpmjM+tCP)|207D|IW;KPcz$5Z{wrfk6NkTc1-%rev+r|_w zFQk_5^Wj5JJ;Z8L6hw2JLs}1 zZyCKQnKv)LLRaXfP;6DGNlROmq5!V?+0oXOW?x46aB>q)mTM|$kzT^xW>3I@x^sz;(A7ECP#x1r&iL;0a&_Pl95w6o_CMuz{z59V`bWpcFX3)1VBL11G2e zF0cYHPzfZk63D;}JYW^@f+|oAe4qxb27V9#LGTP%1D*x7U@ce&>OehM4;sL8pb(^b delta 1782 zcmZ9Me`phD7{{Nx+%;*9HD>)0Ynoo;B~5>&v09gErq`rGdX%)*U+oz7begL=O9-nt z7naCc*SSIbLyU+kVT{_&A)`3mK(H|I4+T+C86tL!L0uW{4~KTHc>7+o{#f9Xd!P4t z-uL<5bI<#xQYkj2Gsq0GgN8xw9Dkv_h1#bK6d4Fl)8ux_n|R$~uIQHHeD32O>z28X z7%GbvzFZ+^X3KdobH~AdmHazAZSlF=%yKkVK)`Y!zvjH+@1DXazvBF+%44=IeOCL10wXVpP@iafEER%5=bJ8$T zPRpiJi9~p|$Q(Qe{^xPQvs30(Yjc9_Ca15CIFbZvmWY#~3M;l`?pN}zBze3f{y4mo z=&`eoEH?)y^zn?{UqcnBng}l%6j$MMeVs>I-#$bNWJgRS*KoD5dpJK z?0fxCwM3Ts7V-oog`Qm&^0S+rxm|LvU{lT|b4kyVh)pi)9$2l@dC^nTD2pgvK(7TS)C=;ALWdo2}0Z=k-r#o7Ls<0bRs=aFBN!j6*ewc!TH{rGZ;c$d=JwWW(1yN%wKO~H{q$Q&mOsWkOz#w1oA-vSOCmmAt(fkfCVfDR`3=m z0>z*NlmZ)A0?NQrUd(0Pz`E8EvN(azzZ6H4=e||?iFAq cXacLi+rST+!D_Gu1i(9B?S)6KbqnwQ2a=B=ZU6uP diff --git a/bin/GWSys6_8M.bin b/bin/GWSys6_8M.bin index 12ee71e7ebf034c820159984791488f06a313a87..e2b54c2aea7674a26b660471212f41ea0d37fbc3 100644 GIT binary patch delta 3593 zcmeH|?{8C87{{O6AJAbPms+;Et>vuTmTnzg#lgm$aNE_mT}LS+$ViN-vh{96wq~wG zlP2xLfMFKL3&PY8Qxg+6A;u6DBt%AHc(o8*AR0n|$Py3@5JZ@=_4+-nL*k!c_TqEz zdCv2kbDr}&=bR^6X?0G5{>#R$v`rr)iN1a1AJ-u%;{<(t2((lNr%XpsbD+E>W*w1_MIZqo7mR2 zVb+-<-7cdt80#y3SKebEB`NnGBUf!wGm)-1iI5v=8_8U|gKSjD*23y&Z^6%_wK7>& zCgnY@A#FPFE4f!TX)|zi8qBP35bUGp(YwH}U*)C3T=>I5IZB$s-PFlfHMHASby8}< zH~YH{?t<3cEP}3g!il}Dp^fp5ZUiX&D)xWFR)?t{c$!%kS(QPRbXj*q@scA(LS@c9 z2bR=87R>VH!6Wcj_~fjzZFnqElca`=KO%Z%?gm;Ml*Kxsk0;AgCnVPFBwLPcJZE}jX0EALq*OFXEDzy6a4t$of~%USz#)_z#K=ByQ;_DD4Zy`)EL1~a<- zRr#E*MNYA2J^Icwtm$r$2XTNtEjN~?zHs8Wcq&LbG1yK*##u$;G|i&)-!I?D{KG2`R=i?LirKj5Q|rMDA(my-`amM=4C7*=q4NIKtNA(L1hAP>)_ z;10s!6h1R{S)0W_3y|3Ct`$j2BZ2wJk2-S_OLCuiTpW|I$ta{!cH-j9T<@~NVwogp zPUJM#{-be0Gr{ALKRnq>tRS<+DYF#zGB>H_=YI2eOpcMn_oLPDo&)_jJZ#Akl1#*R zt&&!T!{*^S#;tMgbJj)wSa;^ET_%E+4iVJHNE49&T`Z)eRhh5AXXNp0Qx`FV6XAq^ zKQU8g3zNA#=Ti3j_*Bd7GMjdd-_`i(=)L&4=xq5dq zl4Mo(Bg=}kY2>EUxN+$fxMD{I7n5OK5Hy_b2h_R!4`>=ZKk? z@~iH^*F^d!^?q+Y=D6^N=;%wg$X%{bS@h#|7^YJfl_!Y|OVIItt|g*1z=!ash!6Sq z#VD7dBds$&g>U=F8p(Ki-*uM}EC36E2^4@u;3;4RPlH0R7>HmAuz+WP6)XispcvS| zv!Dc&f-+zS4zLU`P!616Igo%0xWNkG0TrMUctI6d34EX$_`!2v6?h)hfYo3Ps0DRk zEvN@CfClg)SO?Yv83aHOG#I9~(jYanXF|FQ<6-mSM^ F`Ws#Zrwaf8 delta 3563 zcmeH|{cBTa6vxlKxwlDctg-7$tZjN5Z_@WPR_jvD?9EMu^itAV-`X+k)oD_7mJn8P zE-aC?u5*L7BfnZ_79~4AIWr)}@26bh)9~|1b;@$T~>&yOx(ZDD7 zInO!IbIv{YJkLoa5?n%OfEi#13<>)Q#5T$re^p{G>ym1JrsE#z zlDU@{Dh}noSfQk5N_jDL+s1zp|0^(MaXVX;G0G2{WvT6f*`(bMZVmSP9%zrFT!aZo zZYI56acPhD{vvpZn6^{)iU6#Mj-{)FJ(MqYbSGUGhzurSOIK3pC3YXL4241kA4r3x zqaT9En`rj0qm2^f)y1Siaaf!2O_Q@Opv?yQ zv>7nl>}5(vuVFUJZD^>b+)P+Om9$_(FJ+zkw2yOUcYZ8%sD~oIV|I10|4?U3dt_%H z5p^d6Q)R1b1C_19F3MMi!eq#Cc9hhREfgo_PLUpwtvfl^FCzYR)8wu8(jr+Z^f2$U z24buprk~}s#E>DBr&|d{UCD0`Z|61)hVIG+-=E}snI}jUQT|2NxDe43YdtxOIhH5J z#1SEHR}1T@Lf_fO*;ylTEJr4pm$Q`9By5>zooM~>QX;%o@tDVT1gZ+q$3EAeN+RuE%9AIJ$(%2w#vQg$$%F!xigRW5Tr;geAvMp9i|Wr%D%z z-w*8|dStI9%Z-6?eLS7#BBPlh7Qv_OeI#TuBnh10PrLNog-SBDbX;FEo_N=jkxo9B zf&ymk*!SAODv2z0KB|-@m7ZP_veTRFnO!okU{%k?GfvNth)pi&<0A(JxLbUhL=)+b z!XxVVD>fsq**Hw39z~djP#SN=hCE6lyi#AE2{%XJ>N zIA)fz>+z*8r@SIx6Q|UbR+NU#8Zp`Z!fq0-UkM)V`0U(ld?xe<4*X<^sRJdj&vHAd z-c+g)_OzPTpWzekYBC2V+%Yny>($TQRj5>HQd@z~g+pv2!)yApI5^I7g-X<~v6>C% zl*fp;#S$h?WQG=uj=VhV<+>)3xeaV9Vq`--z=2*5x&!1Vq~}80o)R7W#dwdUOy~)5 zX-;Lo;?^dD*X=z*PoyB-_hP(cZv4#hOH$bp(zRCH0GS_ODiQBcTRJy)QbU)~<=ZH? zw{P4Ttrc1)(z?aEBSfsXC1Z@g62`+QfQ+vAGh2q7Rg~YCr{9BY^pwqMLY~ho^Hcut zEHw!2awRSGKcUg`R?170(o2?mn8y`#*y&$2N>-DH49tfp-vfcE=BLqNi--A#C0ewB z`rckXt7!{{yW8u%@9hmojn?c7a}A$7bnqYx7=a07gB-8`n88Aj3l;$j zSPb&O8z3JPfI?6NtY8T!21`K+C|hxXfde=}1*im7pc>SGT2KdEpdPrv za-he(0;~j$U=?^1ct8_a4b}iJcnhor%|HS^AOrvThmMw?9?v(u`KCAD^ya$AeAAn6 TdU^w#Z+icOriTXCyztJy3sXhy diff --git a/bin/GWSys71_8M.bin b/bin/GWSys71_8M.bin index b097fc7700b088777b39858a7ad5587061f4988d..c2bdc7d5078d9fc435f32d1379c21dac4a4c2c04 100755 GIT binary patch delta 2053 zcmZA1e{2(F7zgm@`U5(wqtvn0{pjA6Yw6apRUB;03Ae6DcZ{wZ0z(lCY`qO(t7Apb zYP&FCn8o=AVQPq}iHVyKV~7e8A|o;UwGdn&8bW}`5)cg#M4Ynq{Jxz-;vb*8d*AoD z_ult;-}mD2xGv812tAq}ZIA9N{qel&lXX|M>#(JgUYJ!PS}9OcHlDu z7OVb~*j?WZlUuBnhbSXNblKOg{s|A@54aD%!#)4WWVHScS>zJ+o?;CDQg_>EP{;fm z{SnmMSBM7PMWiE%(ISa-tO{eP`^;wdQHC$1-(PZyNNZs0n)+F5 zj5Is-a&M?BYqzvFZ;-^)eTeMkQPn`2tSC~hE3YAA`Bt(}I$MIMqn&9#50*=0UJ#Y` z+WXY;>R-vRz^6`NpyM#HtV+lmJdfHLZtX%BrKi&G_eeofWj;)ebXCQ3)52DY&G_a( zyUvl;xQ7K$waXvb*XXSex3nWc{Oe&DQSZImJRDx^s|0i_cH&AQclLYL$t#MTYh4twL~5_Pin%y74|RIV@{Q%L9>Xkz-B7_+&EnM%~8+>J_a zsvB>ni^Pj({NGA@^Cgid_3+n!@uW3RN2{r5cPiSAX!~@uT%tZybRHLJ@ic)R9q!_( zHC=)=#hkUMJJ0YR*V!AdzJxd}H zEhkbf*Z$XHN6QG$$JFLYUSes9H8zRGFqi30RW~0u&&TKxiF`h48LxT28=HsCIYOd= z_^cIDbFtZ+yp8c_?E6%7=D*Rcsc5@_5T!u|wINbXSO87PE5{Xye}VVN^Vy`#Vmcer ziShl!42d;N;^pZfCBF}k)!ojusMq*e4WAC)3!e+#4qph~@<;YJdIOzp+gpel`thHu zbkt&zGUNkTWm#+(xM|bZ&%Hud=%$cvl&D&X8l|*S9QCsUb@TMDnDpVuD(o!lXxLy| ziL=dq81Wwp^qrW9jfZ~oNcgK!0DrX=cgPgHAQxd0w}J_NS3bfaH2Q|!QT%jEgMFy8 zhKzIhQMcl1AnoJrZr4=Kao}~q!R5EeQ6N)p@Z+U;O{2^zh!W}MpyIvMlL=2f{1yHy z;;;Po$0(4{Mrvz#4AgIF4zrk!dno9 Ox8a@R*X^;qOaB1V2hGU< delta 2006 zcmZA1eM}Q)90%~LldJ$&0>r!a|w`OBX-~G#FsVs^zOOm z_uTWl-#yR8<8d}F8(;<$1IhvREO)-xLCup&@`}qhlF;mPL6Swu;SFyj`Q(BwZBc7t%fW|2_Kh&sG54;<^5y!*S<1iay+=7is zt`@DS$Nj(XjYLfINkf?%(L_g+<@`3vHTt@Strv)tYQCd$nC~OSPEH*1`}1}SgT-TH zOdn5?sXm%glOivQY}k4iY3jF;E=JjW1H!%yXZ|`?FHlZ(R2Vdlq-Gq`WUh9nX5GQm z49u=9o8OrM$I$lyUC!AZyNS{fzfX2SUH&>T+-7Kx6f7hvW{7L2)bwaBw%ssCf>nD1mt08kCtKf)H zvqY%d)%+SNlkco&4GI;p3YOGP&Y2;eCcb0BGvWE^QarFiv}?xY;Dou9bHxhzO5)KR z6;-(BXnrLbZ%ufA6bAJNjB=e%eE+vx#-6#jW1>9wF~phX;=~M$Kklp~rO2W0Na$ko z7*Zhlq#;OrxI0cEGUg9&8YYpkUq#r>iosFd@Jwry^KV@+r@aGP9C35H;ZQtNEej|^XlYU9upf}&nBkS zhR|g=NNsTOTZzAZ#e2l}#ktwojQ;MR(^67C29Db*NaLQcMM;&ck-oH*W2Fj{sik;b*u-j5zS4gd8^>HKQjzox zMk@kYrBNbwfq)Cg)2CXT9e%OdOXZ$;`fH$H8YMl}116BygFFH19FI|Kdx9H&LlOpwzpDkr^@PR zbGEd!^@gi>&qPv=Saq04(b$v@#$OR*XGEa6P=?IqlpD;EKYNPsNxfN(vYuJ&qTG>L zs^wdp7Fy(bLSv;K%1M&gN7{R{R9A~n&LOjF*%;~6c2Y8Xv0V4Kr&c}1$nT;Lw!l`{2HT+@g76`P;3Ejb$FKt;uoFIkU9cPWz+Q;Lr?Bt* JeN(LX&c98sj`08h diff --git a/bin/GWSys7Diagnostics_8M.bin b/bin/GWSys7Diagnostics_8M.bin index cf2629fd3f0efc326076a7b913daba3c5389e7dc..9f86f991afe00ed4e68b381d83ea37e4fb81d978 100755 GIT binary patch delta 2053 zcmZA1e{2(F7zgm@`U5(wqtvn0{pjA6Yw6apRUB;03Ae6DcZ{wZ0z(lCY`qO(t7Apb zYP&FCn8o=AVQPq}iHVyKV~7e8A|o;UwGdn&8bW}`5)cg#M4Ynq{Jxz-;vb*8d*AoD z_ult;-}mD2xGv812tAq}ZIA9N{qel&lXX|M>#(JgUYJ!PS}9OcHlDu z7OVb~*j?WZlUuBnhbSXNblKOg{s|A@54aD%!#)4WWVHScS>zJ+o?;CDQg_>EP{;fm z{SnmMSBM7PMWiE%(ISa-tO{eP`^;wdQHC$1-(PZyNNZs0n)+F5 zj5Is-a&M?BYqzvFZ;-^)eTeMkQPn`2tSC~hE3YAA`Bt(}I$MIMqn&9#50*=0UJ#Y` z+WXY;>R-vRz^6`NpyM#HtV+lmJdfHLZtX%BrKi&G_eeofWj;)ebXCQ3)52DY&G_a( zyUvl;xQ7K$waXvb*XXSex3nWc{Oe&DQSZImJRDx^s|0i_cH&AQclLYL$t#MTYh4twL~5_Pin%y74|RIV@{Q%L9>Xkz-B7_+&EnM%~8+>J_a zsvB>ni^Pj({NGA@^Cgid_3+n!@uW3RN2{r5cPiSAX!~@uT%tZybRHLJ@ic)R9q!_( zHC=)=#hkUMJJ0YR*V!AdzJxd}H zEhkbf*Z$XHN6QG$$JFLYUSes9H8zRGFqi30RW~0u&&TKxiF`h48LxT28=HsCIYOd= z_^cIDbFtZ+yp8c_?E6%7=D*Rcsc5@_5T!u|wINbXSO87PE5{Xye}VVN^Vy`#Vmcer ziShl!42d;N;^pZfCBF}k)!ojusMq*e4WAC)3!e+#4qph~@<;YJdIOzp+gpel`thHu zbkt&zGUNkTWm#+(xM|bZ&%Hud=%$cvl&D&X8l|*S9QCsUb@TMDnDpVuD(o!lXxLy| ziL=dq81Wwp^qrW9jfZ~oNcgK!0DrX=cgPgHAQxd0w}J_NS3bfaH2Q|!QT%jEgMFy8 zhKzIhQMcl1AnoJrZr4=Kao}~q!R5EeQ6N)p@Z+U;O{2^zh!W}MpyIvMlL=2f{1yHy z;;;Po$0(4{Mrvz#4AgIF4zrk!dno9 Ox8a@R*X^;qOaB1V2hGU< delta 2006 zcmZA1eM}Q)90%~*XZjSwq77os`-x2VZM(PJ2`R4@6X#U3>J@( zF?~Emrut|~O^UoIvSI68q^aLVx)^2i4G8--ocZfmy+AqDQDM+HlA3W$leyZRnso)L7X_^PNJzo!OyK z5~H&-5e1uy4=MdQaui?CIsDzBP3)RM|6Qlj@h6#I)CsM!F!#J_te@zKu7=Eotb!v( z%@Uz*SMzJAOun<8H7HcXDp*oGIcJ7=n)r?h&xGfvOYy)8(XJVngA?Xb&J`=RTZ%ufA6bAJNjB=e%eE+vx#-6#jW1>9wF~phX;=~M$Kkl@UQsmHgBy_QP za{Wx_us4Fd7{7ilt6j`KW)Bl(P{vv(>r^>8iLz4VPNm!-JxClia3vi&^frmA0HwCx zniYnK(z&!12xLT0yU3zv*Z+D<=;;x;Ku$wc(Mbkd6|p4n)F2QmA}fq&PuwfzOff3A zlJSS39->EvD$?E<7?;ndbF8G&Fr+~8NkfqMbcF<-vs7A=F!JEFEXf$$`7$vTFur&0#klNtlw-SH-iuZ``i*vKF8UG*H@RLPqAC|yQ z?d@UdrdWxzr=_HP3>>#rlEyt@i;^l?BYkPBz)BS+Q%mu>u!+^Ae5L;^HjcSeq$24X zj8+7)N~1*V0s$9}r%$ywJN#m^m&!fy^w&VYG)j7`2TUNZ2YCY2$1m3+wJBjVaTiV9 z+7iCo&n8((@in_5?!9j4=DS0A$>8(zg~?#Tm$c-^blCCfA6G08XOfy)+gqu&Q)P9u zIa^xVdc#$`XCf&_tU64jXlzOc$nT;Lw!l`{2HT+@g76`P;3Ejb$FKt;uoFIkU9cPWz+Q;Lr?Bt* JeN(LX&c6x8k2nAT diff --git a/bin/baserom_romdisk_noramtest.bin b/bin/baserom_romdisk_noramtest.bin index a0f508368df938fb91c91fd62f32a15d191af925..4cf91860a47f1e181194d102a3e26780fc8f8059 100755 GIT binary patch delta 1571 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 ITy|gk7kdG4 tmax) { break; } } - // Read PRAM - char legacy_startup, legacy_ram; - RDiskReadXPRAM(1, 4, &legacy_startup); - RDiskReadXPRAM(1, 5, &legacy_ram); - // Decode settings: unmount (don't boot), mount (after boot), RAM disk - if (r) { // R boots from ROM disk + if (r || a) { // R/A boots from ROM disk *unmountEN = 0; // Don't unmount so we boot from this drive *mountEN = 0; // No need to mount later since we are boot disk *ramEN = a; // A enables RAM disk *dbgEN = 0; *cdrEN = 0; + } +} + +// Decode PRAM settings +static void RDDecodePRAMSettings(Ptr inhibitEN, Ptr unmountEN, Ptr mountEN, Ptr ramEN, Ptr dbgEN, Ptr cdrEN) { + // Read PRAM + char legacy_startup, legacy_ram; + RDReadXPRAM(1, 4, &legacy_startup); + RDReadXPRAM(1, 5, &legacy_ram); + + // Decode settings based on PRAM values: + // unmount (don't boot), mount (after boot), RAM disk + if (legacy_startup & 0x80) { + *inhibitEN = 1; + } else if (legacy_startup & 0x01) { // Boot from ROM disk + *inhibitEN = 0; // Don't inhibit + *unmountEN = 0; // Don't unmount so we boot from this drive + *mountEN = 0; // No need to mount later since we are boot disk + *ramEN = legacy_ram & 0x01; // Allocate RAM disk if bit 0 == 1 + *dbgEN = legacy_startup & 0x04; // MacsBug enabled if bit 2 == 1 + *cdrEN = legacy_startup & 0x08; // CD-ROM enabled if bit 3 == 1 + } else if (!(legacy_startup & 0x02)) { // Mount ROM diskk + *inhibitEN = 0; // Don't inhibit + *unmountEN = 1; // Unmount to not boot from our disk + *mountEN = 1; // Mount in accRun + *ramEN = legacy_ram & 0x01; // Allocate RAM disk if bit 0 == 1 + *dbgEN = 1; // CD-ROM ext. always enabled in mount mode + *cdrEN = 1; // MacsBug always enabled in mount mode } else { - if (legacy_startup & 0x01) { // Boot from ROM disk - *unmountEN = 0; // Don't unmount so we boot from this drive - *mountEN = 0; // No need to mount later since we are boot disk - *ramEN = legacy_ram & 0x01; // Allocate RAM disk if bit 0 == 1 - *dbgEN = legacy_startup & 0x04; // MacsBug enabled if bit 2 == 1 - *cdrEN = legacy_startup & 0x08; // CD-ROM enabled if bit 3 == 1 - } else if (!(legacy_startup & 0x02)) { // Mount ROM disk - *unmountEN = 1; // Unmount to not boot from our disk - *mountEN = 1; // Mount in accRun - *ramEN = legacy_ram & 0x01; // Allocate RAM disk if bit 0 == 1 - *dbgEN = 1; // CD-ROM ext. always enabled in mount mode - *cdrEN = 1; // MacsBug always enabled in mount mode - } else { - *unmountEN = 1; // Unmount - *mountEN = 0; // Don't mount again - *ramEN = 0; // Don't allocate RAM disk - *dbgEN = 1; // CD-ROM ext. always enabled in unmount mode - *cdrEN = 1; // MacsBug always enabled in unmount mode - } + *inhibitEN = 0; // Don't inhibit + *unmountEN = 1; // Unmount + *mountEN = 0; // Don't mount again + *ramEN = 0; // Don't allocate RAM disk + *dbgEN = 1; // CD-ROM ext. always enabled in unmount mode + *cdrEN = 1; // MacsBug always enabled in unmount mode } } @@ -98,19 +108,26 @@ static int RDFindDrvNum() { OSErr RDOpen(IOParamPtr p, DCtlPtr d) { int drvNum; RDiskStorage_t *c; - char legacy_startup; + char inhibitEN, unmountEN, mountEN, ramEN, dbgEN, cdrEN; // Do nothing if already opened if (d->dCtlStorage) { return noErr; } // Do nothing if inhibited - RDiskReadXPRAM(1, 4, &legacy_startup); - if (legacy_startup & 0x80) { return noErr; } + RDDecodePRAMSettings(&inhibitEN, &unmountEN, &mountEN, &ramEN, &dbgEN, &cdrEN); + if (inhibitEN) { return openErr; } + + // Iff mount enabled, enable accRun to post disk inserted event later + if (mountEN) { d->dCtlFlags |= dNeedTimeMask; } + else { d->dCtlFlags &= ~dNeedTimeMask; } // Allocate storage struct d->dCtlStorage = NewHandleSysClear(sizeof(RDiskStorage_t)); if (!d->dCtlStorage) { return openErr; } + // Set accRun delay + d->dCtlDelay = 150; // (150 ticks is 2.5 sec.) + // Lock our storage struct and get master pointer HLock(d->dCtlStorage); c = *(RDiskStorage_t**)d->dCtlStorage; @@ -148,12 +165,13 @@ OSErr RDOpen(IOParamPtr p, DCtlPtr d) { } // Init is called at beginning of first prime (read/write) call -static void RDInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) { - char unmountEN, mountEN, ramEN, dbgEN, cdrEN; +static void RDBootInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) { + char inhibitEN, unmountEN, mountEN, ramEN, dbgEN, cdrEN; // Mark init done c->initialized = 1; - // Decode settings - RDDecodeSettings(&unmountEN, &mountEN, &ramEN, &dbgEN, &cdrEN); + // Decode key settings + RDDecodePRAMSettings(&inhibitEN, &unmountEN, &mountEN, &ramEN, &dbgEN, &cdrEN); + RDDecodeKeySettings(&unmountEN, &mountEN, &ramEN, &dbgEN, &cdrEN); // If RAM disk enabled, try to allocate RAM disk buffer if not already if (ramEN & !c->ramdisk) { @@ -181,7 +199,7 @@ static void RDInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) { // That's not the worst, since the system would just crash, // but it would be better to switch to read-only status copy24(RDiskBuf, c->ramdisk, RDiskSize); - // Clearing write protect marks RAM disk enabled + // Clearing write protect marks RAM disk enableds c->status.writeProt = 0; } } @@ -205,11 +223,15 @@ static void RDInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) { // Unmount if not booting from ROM disk if (unmountEN) { c->status.diskInPlace = 0; } - // If mount enabled, enable accRun to post disk inserted event later - if (mountEN) { - d->dCtlDelay = 600; // Set accRun delay (600 ticks is 10 sec.) - d->dCtlFlags |= dNeedTimeMask; // Enable accRun - } + // Iff mount enabled, enable accRun to post disk inserted event later + if (mountEN) { d->dCtlFlags |= dNeedTimeMask; } + else { d->dCtlFlags &= ~dNeedTimeMask; } +} + +static void RDFinderInit(CntrlParamPtr p, DCtlPtr d, RDiskStorage_t *c) { + // Mark init done + c->initialized = 1; + c->status.diskInPlace = 8; // 8 is nonejectable disk } #pragma parameter __D0 RDPrime(__A0, __A1) @@ -224,7 +246,7 @@ OSErr RDPrime(IOParamPtr p, DCtlPtr d) { c = *(RDiskStorage_t**)d->dCtlStorage; // Initialize if this is the first prime call - if (!c->initialized) { RDInit(p, d, c); } + if (!c->initialized) { RDBootInit(p, d, c); } // Return disk offline error if virtual disk not inserted if (!c->status.diskInPlace) { return offLinErr; } @@ -272,8 +294,6 @@ OSErr RDCtl(CntrlParamPtr p, DCtlPtr d) { c = *(RDiskStorage_t**)d->dCtlStorage; // Handle control request based on csCode switch (p->csCode) { - case killCode: - return noErr; case kFormat: if (!c->status.diskInPlace || c->status.writeProt || !c->ramdisk) { return controlErr; } @@ -295,9 +315,9 @@ OSErr RDCtl(CntrlParamPtr p, DCtlPtr d) { } return controlErr; // Eject not allowed so return error case accRun: - d->dCtlFlags &= ~dNeedTimeMask; // Disable accRun - c->status.diskInPlace = 8; // 8 is nonejectable disk + if (!c->initialized) { RDFinderInit(p, d, c); } PostEvent(diskEvt, c->status.dQDrive); // Post disk inserted event + d->dCtlFlags &= ~dNeedTimeMask; // Disable accRun return noErr; case kDriveIcon: case kMediaIcon: // Get icon #ifdef RDISK_COMPRESS_ICON_ENABLE @@ -313,13 +333,11 @@ OSErr RDCtl(CntrlParamPtr p, DCtlPtr d) { if (c->status.writeProt) { *(long*)p->csParam = 0x00000411; } else { *(long*)p->csParam = 0x00000410; } return noErr; + case 2351: // Post-boot + d->dCtlFlags |= dNeedTimeMask; // Enable accRun case 24: // Return SCSI partition size *(long*)p->csParam = RDiskSize / 512; - return noErr; - case 2351: // Post-boot - c->initialized = 1; // Skip initialization - d->dCtlDelay = 30; // Set accRun delay (30 ticks is 0.5 sec.) - d->dCtlFlags |= dNeedTimeMask; // Enable accRun + case killCode: return noErr; default: return controlErr; } diff --git a/rdisk.h b/rdisk.h index 01638cf..4941404 100644 --- a/rdisk.h +++ b/rdisk.h @@ -14,8 +14,8 @@ #define RDISK_COMPRESS_ICON_ENABLE -#pragma parameter __D0 RDiskReadXPRAM(__D0, __D1, __A0) -OSErr RDiskReadXPRAM(short numBytes, short whichByte, Ptr dest) = {0x4840, 0x3001, 0xA051}; +#pragma parameter __D0 RDReadXPRAM(__D0, __D1, __A0) +OSErr RDReadXPRAM(short numBytes, short whichByte, Ptr dest) = {0x4840, 0x3001, 0xA051}; #pragma parameter __D0 RDiskAddDrive(__D1, __D0, __A0) OSErr RDiskAddDrive(short drvrRefNum, short drvNum, DrvQElPtr dq) = {0x4840, 0x3001, 0xA04E};