From dd24df4f34f067aa6b3b2080930bd954fa396e35 Mon Sep 17 00:00:00 2001 From: Zane Kaminski Date: Thu, 2 Jul 2020 03:58:25 -0400 Subject: [PATCH] Add format capability --- bin/driver.bin | Bin 1823 -> 1965 bytes bin/rom.bin | Bin 2097152 -> 2097152 bytes rdisk.c | 37 +++++++++++++++++++++++++++---------- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/bin/driver.bin b/bin/driver.bin index b50f59631279da71398916574b6b2459ec103715..db6de75f0a2ca5dfeea871294ec1ee50f3fbed2b 100755 GIT binary patch delta 1135 zcmYjQUuaup6#soUH(8KNSGK5G9qqTfyO<`IB-pWqQP|h4mb*(#L)Q+4A=l~dZBrM5 z8W<&zXr0V3Y)wXA4T7MPNwxmL2QeZ-eN%)gdsw9pYqy65_U5RK=iYYU!#U?W=X~ey z_xnETxwU_B_;?_cUH2hZHa5|I1+3y~mb$CSma8e#VCb`Z9^dgdJ}muNEtJG3{hG17 z4LB1ep&BFqh^zg{G-nrO(&!^@8zXWHV#z?;sfqHkcWvi`jE3w-Ab*5Ro$W_S+5_9xMaWVwQ_;1CsKouC9&S6 zKPi)Mz>&$ysWkmp+K^(jQx)uMCCU24k&3vg0f#dpyPgeGL6Iv{V-JZQ5Zx!bOSD0B Rhv;^$eBImQ%C!GG_8(&(G^79k delta 978 zcmYjQOK1~O6g_V;X-gSmsh@@_>2o^9{Ky1bG)ll{j3o{w4Fv^7>L@hn$A&=-NC`CJ z2NkhOK*WuqsGz9S`axZ2Rg?-YbffMB7m8HcjSGdEdMB;m;=S|E{ol)dx0hUTosYFU zPj-HGAeB#k!{k1&%QiFB1ty=fnbHS_=8Wr~jZ?m0eH;N!S>l>UOODS0*__mDrE=2gME{||E~_^O>>5pe zTeV3``nGclSuGKg`Kgq|!grUs!BPx)AT0HKH^2`o_r7|A*bZQD*m(7pcC zG36K)iUVLTcmRExQe32uxOo5a?%X1~(;Psp;)Fy_9zsV3Y>d)Lgx8IuB)w`xl?lRb zHNgkKXcHgjov#v3qnL4hIcu@0VuOwra`qj8`I8$ra`b+<`VCXoZii~QlY$q-DWDvVQ(2^o ztu3GkK;=Pr%R54XP%ZD!V|GhA^jOq3PhGUlyJn$~OT8~<%S=@6c&T2(*WLiagime$ z;b!$cQM%>O(*HMQ?pes;6`=uW)HtU+F3KUNO4ZO)|MUSG%A($>%Q_bIs9Y*>In*ct zY?v9ywl7Sx@~iYiTDhU--t%5mo}{O#vASV)gxN2{nZchjRqrt5?Cy;PT!b14*;~f3 zk+#h2DD}uIM?!Fq_n|I}N)JzKIn+Fu%FK|RdwifO?Pw~{M`*F*3_qjA6RG@}>dK`L z_7C;a{PcQ_mhHa%A2M2Z#D`{Dp)J{PZbgllpSIU(fA{KwIMI3#t7wlKNm9(zFSn!e zxQLmOHLLASYF0e(T8M4 zKh?Zn+lbrOEy9mpQ73qiHK6G@wz`2FXvH+Q2a&0VNdO$9PHomUmO(vTi7olO78 z{D7nDW?cP-{)XPKWudVrJg!3^yi|Va6dJT{G%$)LUa=s3)l>~=ie8F9OJh6U5SQLJ z<5J-gq-lT5zJhc;FArd0>g+H5idjw%u3pPai)Ay0w#+i2kv_W2gJvLW7* z{=-lgqVyAXymZU?&Q<@`lwj)ry|B*hqz#Km7D4t)tBuC$V~Dwv*X``q;;1&Szm@9KcI8ls!kfDYZw6bpv{Wz$&$o-|$F>~j zvd(CwsYs=_*%zGn(W)d1(~jIy?~Yx%z{7?%wik>w|I0zD?T#&a<_Hbew(R{8kZrQPE_npotez|99=B&RgOcq zGu5J2X`P1*I`vqza{3LYlye+C+S3WQELOJpFx{MM%eXnJF*P48JER&5Jw?>jVjSJm zUKCe?Kubalt_=E_P$Ua1>$v)yE`^f=vkoZXxX(oqA3ki_c`9Me8U(5dit-4gP delta 1225 zcmYk5e`s4(6vw~!<-Io6XBNA5&D#99eND484N0)YbyDnYR!jCMuc0tO8Oxi{q(5Bt zmC``5Rg?-M+dotMXG39Q4(vZ7DmC%Ev>X2Mx#!0{ z_ndn!=i0W-Y=au}p2-l3#Z$bp{NbdC&bA zMXuZmC_gR&%a(X27|yJ10fnL^w9M$=;!Mz8P4IcNRr{P(%clDfBtisFuR`n55y{?# zw7U#9TmuK84$Q*`&p=rPTGO*=OZ7vBn8bboIWvo<5!Xl`JjQ2~dn|h{ElkwM`1~T3 z=&|mSG1OQeGfJ;cjm^F=KWR-DfoINT?)aYwXQGEVrEFXgk`&46{csh)wnzpGz>3xn zjcg;z24je)BuQYGD!|A$LDGqx&;_lJ|8!bCO&7)UU|;bVX2PnyV}8oT^{+qN+OaNn z#?Y)Pkmyj5q$>}$Lggfq@9Hm+_kup8ULrZAjqy2fdaoG5y#mo2cHcpGc^qD{66vQ* zu(^&(J)~%h{or)|tapgLs1LEyajF>I6@Rx9&i=nG^T>9Qh=|W2 zOs#V&Du4) z(U;SxeV)BXy}1|IDduRplE=SQYQUw-g=Y_xaUNPK?o1lT0h%;(yz)c0(zO_eZ*2zd z0%}KjHe5v0#~bUH(zvGOydj>;%T;Dd7ub`was7cuCXc-B z;W?|lT701IZRoEAdKIFHXeQjmLqrSlFrgBU5FTO|;Uyj=T8Z668_`beAvy>jv6tv1 Rx(GiJAc9u{y`f)!{trK^Jox|s diff --git a/rdisk.c b/rdisk.c index fc0cd5a..b2c69c8 100644 --- a/rdisk.c +++ b/rdisk.c @@ -149,10 +149,10 @@ OSErr RDiskOpen(IOParamPtr p, DCtlPtr d) { c = *(RDiskStorage_t**)d->dCtlStorage; // Initialize storage struct fields - c->initialized = 0; - c->removed = 0; - c->postBoot = 0; - c->ramdisk = NULL; + //c->initialized = 0; + //c->removed = 0; + //c->postBoot = 0; + //c->ramdisk = NULL; c->copy24 = (RDiskCopy_t)copy24; // Set drive status @@ -164,9 +164,9 @@ OSErr RDiskOpen(IOParamPtr p, DCtlPtr d) { c->status.driveS1 = (RDiskSize / 512) >> 16; // Set driver flags - d->dCtlFlags |= dReadEnableMask | dWritEnableMask | + /*d->dCtlFlags |= dReadEnableMask | dWritEnableMask | dCtlEnableMask | dStatEnableMask | - dNeedLockMask; // 0x4F + dNeedLockMask;*/ // 0x4F // Add drive to drive queue and return RDiskAddDrive(c->status.dQRefNum, drvNum, (DrvQElPtr)&c->status.qLink); @@ -218,7 +218,7 @@ static OSErr RDiskInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) { BlockMove(RDiskBuf, c->ramdisk, RDiskSize); // Clearing write protect marks RAM disk enabled c->status.writeProt = 0; - } else { c->status.writeProt = -1; } // Not enough RAM. Stay write-only + } } else { // 24-bit mode // Put RAM disk just past 8MB c->ramdisk = (char*)(8 * 1024 * 1024); @@ -232,7 +232,7 @@ static OSErr RDiskInit(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 } - } else { c->status.writeProt = -1; } // Otherwise write-only + } // If boot disabled... if (!bootEN) { @@ -329,8 +329,25 @@ OSErr RDiskControl(CntrlParamPtr p, DCtlPtr d) { c = *(RDiskStorage_t**)d->dCtlStorage; // Handle control request based on csCode switch (p->csCode) { - case 6: // Format not implemented - case 5: return controlErr; // Verify (after format) not implemented + case 6: // Format + if (!c->status.diskInPlace || c->status.writeProt || !c->ramdisk) { + return controlErr; + } else { + char zero[64]; + for (int i = 0; i < sizeof(zero); i++) { zero[i] = 0; } + for (int i = 0; i < RDiskSize / 64; i++) { + if (*MMU32bit) { BlockMove(zero, c->ramdisk, sizeof(zero)); } + else { + ((RDiskCopy_t)StripAddress(c->copy24))( + StripAddress(zero), c->ramdisk, sizeof(zero)); + } + } + } + return noErr; + case 5: // Verify (after format) + if (!c->status.diskInPlace || c->status.writeProt || !c->ramdisk) { + return controlErr; + } else { return noErr; } case accRun: // Disable accRun d->dCtlFlags &= ~dNeedTimeMask;