From fe692f640020be3d5ad170c157a2a7540187bf3c Mon Sep 17 00:00:00 2001 From: David Schmidt <1110325+david-schmidt@users.noreply.github.com> Date: Mon, 12 Oct 2026 01:05:24 -0400 Subject: [PATCH] Add files via upload (#3) * Add Rob Justice's 6502Bench disassembly of Duofile Signed-off-by: David Schmidt <1110325+david-schmidt@users.noreply.github.com> --- .gitignore | 3 + drivers/duofile/.gitignore | 1 + drivers/duofile/DUOFILE.DRVR | Bin 0 -> 4096 bytes drivers/duofile/README.md | 6 + drivers/duofile/df1.driver_code_0x2000 | Bin 0 -> 1962 bytes drivers/duofile/df1.driver_code_0x2000.dis65 | 1622 +++++++++++++ .../duofile/df1.driver_code_0x2000_cc65.cfg | 9 + drivers/duofile/df1.driver_code_0x2000_cc65.s | 818 +++++++ drivers/unifile/.gitignore | 1 + drivers/unifile/README.md | 7 + drivers/unifile/UNIFILE.DRVR | Bin 0 -> 3584 bytes drivers/unifile/df1.driver_code_0x2000 | Bin 0 -> 1942 bytes drivers/unifile/df1.driver_code_0x2000.dis65 | 2142 +++++++++++++++++ .../unifile/df1.driver_code_0x2000_cc65.cfg | 9 + drivers/unifile/df1.driver_code_0x2000_cc65.s | 828 +++++++ 15 files changed, 5446 insertions(+) create mode 100644 drivers/duofile/.gitignore create mode 100644 drivers/duofile/DUOFILE.DRVR create mode 100644 drivers/duofile/README.md create mode 100644 drivers/duofile/df1.driver_code_0x2000 create mode 100644 drivers/duofile/df1.driver_code_0x2000.dis65 create mode 100644 drivers/duofile/df1.driver_code_0x2000_cc65.cfg create mode 100644 drivers/duofile/df1.driver_code_0x2000_cc65.s create mode 100644 drivers/unifile/.gitignore create mode 100644 drivers/unifile/README.md create mode 100644 drivers/unifile/UNIFILE.DRVR create mode 100644 drivers/unifile/df1.driver_code_0x2000 create mode 100644 drivers/unifile/df1.driver_code_0x2000.dis65 create mode 100644 drivers/unifile/df1.driver_code_0x2000_cc65.cfg create mode 100644 drivers/unifile/df1.driver_code_0x2000_cc65.s diff --git a/.gitignore b/.gitignore index d8fe4fa..16e441b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ /.project +# Ignore macOS system files +.DS_Store +**/.DS_Store diff --git a/drivers/duofile/.gitignore b/drivers/duofile/.gitignore new file mode 100644 index 0000000..78a0e8a --- /dev/null +++ b/drivers/duofile/.gitignore @@ -0,0 +1 @@ +df1.driver_code_0x2000_cc65 diff --git a/drivers/duofile/DUOFILE.DRVR b/drivers/duofile/DUOFILE.DRVR new file mode 100644 index 0000000000000000000000000000000000000000..16c4502a96e73c26a2c813a4ba704cd3ffde14c3 GIT binary patch literal 4096 zcmeHJjdN2~7C-mC_wv&8>orLsZDM((rAfXf@IH4#c^k6`~!CO zKt-&!$rekT>yV3N zZ2rhN=SoIO63SfKc*_!?f+$!F767$guP;{vCln{^WCI9-cvm{&2q{SzrB=Q^}=f{>_II~Yfi$#-N+aTz)K<%BWC7KaR&X9A0h>uqD> zevSE~EC%LxOu>X4mS28FJpW9a5%nnBQ`LpYixbk&kBZ!xJR$e36R49|0w$DY15eALT$T(n>Lr6-TaNXX(=3_E4xVP2 zk)vJB^E~3s>|wl2mQv6?tAY`7jLV|%Y6)fZi6hS0O2kX?dQE0)X(lbh?KGRq&1OL7 z>_I!$g?>>$%EI_Gi?Y1poI)9zi_B$!MqFkF6H6cSkDn`CXVz*|8m$=+hExvbNmeVv zna#P@B8EqS<;{X2ATG1MGMTNz_$F2_HjxpF6UWDyJ}z6WlbAm}OFhmRF5VZGr-~6) z%&M2M`a(vm0|>|Q2U<1U8z!0LGOP#7!w^|0vkJ?wo-&lnnB82CvLT1hVtr>acHA_K zH)FTi2I78!0gtgZ37e-)!8+pGih2NSfR#mN{uyT-VEW+>U_9ne1}Igrez5o^ISY6e zE{B~{gcsR{Io8i)Yyjh|0mFLC2P?(xEeA(Zk}4_5!Om%%QVfPdgCPZMnFvLa)a7Yu zqqAU6^-Sl~Iq_YK5BAaa(M6R-P@G+yJt1d8&crbj$4q*7Qr4Zhcjh{*4r_^}#8Q}F zm_P23aii`Ud)L^7FPm0fdLS+B+Al|rJTp}gF3;9#znQDoe>*=TF4fENVqsN zH8na*k`~k&jlX*3jyqhhx?cV2ZbGii(doifJRg~+QuX~p6wg+x)#s;cH2wD_CSGtR zB~31!T$*RjGk^C`X6E&I2E*wo95+-mV#L??P&zmxC1v3L z3i&6tZCO&beC5lt>ejB?wPWtQ36)P(IX#Ze)o(2_-%Xl0qhj>U>)!URnzRlt%{Fz1TJx~T}2>M5&&XUh3a8g(SN|mk1zns zlzjQ_S+kr|Q+Yu-%}8@;xr-3xnBTz zCwMo>shk&NbA}7m8h@f@M@J7-cPLQp^2)L$!<)+n3l2qOGg-~u;NFM#;RF1A0jD_I zYfxC(`x^Mt!SM9s;C>vu!tO<|>o*|lGW-Ro)*!i`1}~9M(FTp2&BbT_RG&rZ{w&IO z`+~guisfhu%j^$Xbi| z?OC-)X-*34Inul#u&1{D-Sod;Tlths+83>u|Mx=w1OnGq|6D){lZ> z>!Bd$v}Cj%KAH)w9}gJ8JI;SmUQNBWhO@2~)lkn+kD^G|2bV&S8(aohWAC%zYVGM> z(=cLpk6ubUwb7s4qQ2FwAJJXYtti2(xT-T>*;)&Vbj{(*S0rQp68Caw5jtzBZ8-!* z^!JT7&!wR3@>vx_;bkwl3Zy)FY$aw?(|TyS{{i>2U|4h*mw92)$L{CBmkCFggU<*9 z&qG6T>tXj&%+|dOS`TbLSg*X^zWm4AZIuA1Oi>^;6>j-eT!;qj~>H)>u?!d zzHD$m2l60o5PF}3;E>DfaW4T6?0yAK4U-dN+o09t%2;LwM`G~WwQ z--Y{LOuDI`b2bxa7k0AyR#e7Oh~KLWzPiJ}UlgyZek=Y#)QYz=@j%B?z8QKt zmI}>qq+_Y78IE==6`P?q5Io~m-A)rPE8e8!VWz?h<;>$T>q6q{ZfMx&e2}c?|41lo zjFi+xcqt;>7XpJ_@@s2~NyJ_eSIt0GNH-ADb=F!#x+{x?kZymi9Ma9NHOlrHd&PEp zL4TjBn9ADiT59YLXHNE)_)FXEQj!qPOb+QaA>E1_$!t)EbQkQB=E6xdZW!U{cg8}x z_w15sb**u8N>jC6D!sS`9Q~#>YpS=0WBn@6+0v_@Al9Khb-K!aI-FJ#)|H-Yk7rfv z219!!(=qJd4mZ*<0?|heiPAXqDi(`NS{y_?!W8_ z*M)6fIKNn^DlT4sDHhd4HO|B}y_O4}K?pDAqi5D%j_^WA|2^7cPM%p%uks8=h4q)6 zbm0fF7_-Q;S&`? z>BJVBerdR!R%}MRD-XpFK)W4Q8bj$bFQngGG0*NK2R>@*y|rso)9zdIv}``l{?{`w zf7D*>nFAl)e5tAT=IW;1HTw`)sEV+3hp!VDcp`EvNF&E1Cvg0{ z_1Mvs(0Y8}MQ8}S@M`$RfO{?Ya=~2>2uJ^K;@jhm+jD%`pnlK6z)t+T90Wh`ARiXN zMtB>xLJPbHe**=MKraO0AMh!J;24~Mf5AxzLm%|RAY6eVxCH{ykW`{4Ii!G;kqUAT zxtGi!50Dz-B9D@ds-pFHG)x9_fJZz6bcFD zN23WRB{W-d)V9{F)>_Gm=7>vjv7@32SIKG;p!ONu`v)tbVnpKNq~r$N~dORAkq$PcN4Y4vbAvsEqx~FE_ezGDSjpmsd zAtk#?;a7Y2x_85_*I(QF#_xCk4t~97R|T-!tG68l=DB_Uk9{c=OXOu~@jZ~skbNPm z27k9; z%31yqRMw%nrnxiTtk#ip!Np0q z=EO3|Qh8q>Tm|ETpVeSQ4WTQqMt;k`50=KOxJ@99-|`=TXoc&?K(xWa2jHy=UFDlG zTD}EBV}0Wt(%EE?vb^gFNW`m|?McStu{`;nIBx3Ie~~nyyMI@67EW{me-vQR;iXeY zL0;yBAb$jcWato#cE>6Wo${m95s)9CEtY~>WPFK)O1!Af7(=64MNzHK#JKZ3Na7jb zizKlF_^lFV)hUV1z&j+d1$et8ehhrEB%TG{CB^izSs-XD7*U3tOByPIb9O1FmGgsS zcpRm1q%Mi;)hJ`xS_#Q|Nu{-dUA?(m4zJez7dw{YbCtD-$yGB{6QuVX1Fv@fRcELC z&^ONMpoUOEeY6#P`TB3gIA?v7z56Hl@# zrC0l^u&6$2DZ;)|{hx9@EdG=0Q&)j&Es`LKHWvj*GTOW~K(0lbiv#3(wAmFPskl5X z=-0x;X2nj*fBMm5L%Cf=7_qW=BZD4oyu@!SO`YH+v`U)spLb3iLvOTgR z%rYBj#hRZs8Pdk%kMmWMmp0C`jA8yZD!VsV&$)AH z<@WaaJ|#D&56Lc&^SWJt$yjda9AN*GPajkSVj0Hp6l;hb~n+=?k&WIN(|OarOl{U zZ0j17(-;wnEZ5zsshf(qHE;fyF&MHN%5!Pc3m#?eeo*l!21X5|m71rTP* zNn6_d`n-AN_&(OH8N2LHJsIrr4?Wpepz{0JucpcVS1uGxk6m8*(4Sgq^AD}G%$vjK zXD-hCL!SGbbZ?GK`}YNBsRJr?9C)kvE;X>I%ELGMdjueB=iLiTI5CgcvCSs{s*p1&cQRTUM)eGt;`$7H$2jZCAG< zRoAJc1=?k0YPT7;Fh&jFtlfbf>7v#)c___vwi(pz>ediZ5QBfUTWa>)N9}fIXZGaf zo_o&u?)kg-zIn?RFBi*}RW36tIG9^8XW8=d72+d`i%-n8SR9~athN~zi_Epid1i8M zs?6D5r~3USPT{bl}@KCRROCgOw@`7P$>ABdc-kIQQQQT3S~vHFt)BJ z&Y(iSOj;hUQ!+$1*&@hXi*{C_h*zl`l%q)H@sk8uMvi`2MOLB3Ap+(ZN8{pp+hp0V zF?WK+K>cRrP0ghF<<64xPq!ISkFtH7Dj#`aTr&DmGSd@NWPgQ;dO6?66H}2tA{8Z2 z0ahieusHnbKvkkPSu!yHY(d2p|nZZQU$Nc4Uh3m{3wNkAy1HzC>!92}sr8u)W z+gd>JDA2rVFa*dl?JJe(I*f0k^)_#^Ec>kXAmVhPrR!CSNz4F_hRdYq z6yXK7F^=_985=-3ZNQiw^TA4SdrQHQkf2ORaL{uqQeY!<+C`P}m# z9o$&5^|c*Ks(0@@c6i0gsk7IYIX#X874NOdcj+w8L7gf=Fw}{eCR@AZL`Npxhy+1r zFp0Ib?Y0vg0F8VW>;*2bY@U6rRq|L(V1$JhB?D@K1&HAeje!b&1_HwT1Ol+k%@yY? zS>h}g=Pq8jE+R-DE~S@$a-9tLlt zsAjz&n$ujUR=3Bi4|fKjqSFr*F0UwB(!AMpu;4I-d6(J2-e)_Y1G?~c2`;g=U64P! zcNh5dVA!w@-0Q%rXnhurJqMyTt$i}8)ky9t@G{~hQl}O(Sb5f-;Il}9ucBPQ7i3&s zOOSZ8+%EzR1&8bX{(8T7nGrLI*hktIc~xQ->pg;rQgN0zheU-s7O}nSp>;h7mvMS% zrw6*K1NBlD1nSRqRr~9EyTD%`l>EYgmw1>>)MY#g9(8$h5Kg_LuRC4^y7ufmE;S|i zkDqI*^&jtTN(dYeHq{393D z5wmq~g67jLXZA>YdpyMOLUoe_b<99xkKf;|3f}Ua(H&BL(4)g}-#J_cmv0idUk33y zsZ;d648i*@ugCooc%Zckx@x=g)%$`EdS8Oz9mL`}peM|2kwJg7v-q=!h~>=PciJm8JhpYfx`w-wHw3MTtrfj!;0?|Dps zw6o6l80RP0$-u*?h@(QjR64GrQ_JC{qVdPGQRP;?nor~(W#WO(4O|oSbZ$^I!MV;2 z$|gA9xq)wjUVpIPt9+Cu-c-CsiDOKOx5;VdFzbBA6{xH0a4uo?bAMn6yb~#^j&MRm z@ni@LcA;HUS;$1}vt-pGRE4xRL)xzG){yp2l_I1)xm^rtS8X?n_DcJ#7JJ^{HDw_Y zH7y!q4208Xv=_A(x7mdRML0b%q*I5q+rCevgDRvQvJ2{=%V?}kaSS?RA?=^-f@#-w zmWD=O*J(YE#cUp(lbze?+e5_G*_;c*{_C^i^AIC%WZO2g>EpkMbaH( z{_XI+9wQ)2%1$RO>4x{OMUwZpwTDnTrah_fr#DDnw6%pHBVtUoi?W9jtm~tU@+w8R zJOhkq#ANj(q(^($$XAAUVn)z@f8N#E^R9F|nKgGKYIQWh77OX(s>6e~J>lxG%?mfG z6lH~l`$u9?byV$)uj#c6d4?fe#YOw~-;QvKknRVx$DACspkC=2jw<%wc9J!Ji^ZtL z))*OAQys1%`$wV*C;6EJgn0&Po)0VIPfQp*p&2~JoR*I1PyVJsvc)25rXzA%im3G` zUu}?1?xMPio1G&j2Y!(aP6jUAx4PYk5yioWf$j#t7%1TsKO_z2ZDAP1fWHynWX0sX*YFMW!*v*f5x5JZz%nW(kTps{xyC({|3LC{~iApAB+9>^Ws0|L=Juc literal 0 HcmV?d00001 diff --git a/drivers/unifile/df1.driver_code_0x2000 b/drivers/unifile/df1.driver_code_0x2000 new file mode 100644 index 0000000000000000000000000000000000000000..c1a9f7ae7b02fe61b2da82884798cb265f21bc9b GIT binary patch literal 1942 zcmZWpe@q+q761C|bEtvtg6-77UHWVTCMiW+`G;haLKPCR&P~&)LrGgzCv8Y=32lCr ztWBjDS|T*K#P%vSYprCV8gam3qeT^#aOXghp3jMU|HOhIEs=5<5`M%a4a*c3?;Tmv zXgmAfz3=G4uzMNj&TI$~n3#pp8wq(XoJbbrXz>G3wjujW zPS1Y~FaSa?m|Ow@=VlJYrf8vQAeMy2m;{ZS08qJEsL)6yl9wERa(w1mb&bIo#PK%+ zGp?$3sHso4gJ=a?Ycuf8AkZVfgW=x;m^VjXM6n4Uz6Asw%s71}*y38}qD5k*oV=1V zBt=EX36%;Zl=B~~`y&H>N%Bi@%>iXjm~uw<3I$N^5(Y6)ZMhR(apoAG9wSO0gpq^5 zTtl|+WQfGQNxvK?N&ls|SMsOhMDi=L#LNp+NOxE>S?E-TIKhqTnsu~wSD?{!=;Wvz zERseq1$(5?bg(EnsswwIUChlVK2!ha^PFY`?Zvq8IsO=kPT&th_`I?qd_mEBDmRBO zUM_|3_e*vVUW(p^&zwS)Z=UNjuBKK~vdr9HJ_L$>`7q!a)2+aTQ^^kBrje9|*?9d- zw79R}VbZcG*_4!Jdc;v2Q)ZAAvqP-sY@20?G!o_oLwEWL$IN zHrZBlM<84^Mt6vR@vd;~;0EFA@3ZTKR82&3f> zLwKTpvQs{l3Q@NAy+N7ybo0F_NlFwbx5Y_IpYiLI1>OCtjI!C*A?KDy%HXs^PUw~55E-3B zsf5%mbA38>BG(`zDU>zZAUL#}n{xW}o-+=t#iuH38I!AJs6IsRJpw-cfpe}d<(_|% zGeA9|LdMu9;GgVb?sFj`#z?#GdYNUXIiNK&!Z@*uesYpn>9%du8>kfbGLRxmye z6FU{#sQA&xh~4CImSNO2Ixgw+jd}Jtx($EUQRGZ^yEkiKvh=Sr#KtnwlBQZ+mfg87 z+KZx$c`0L#pV*c$-)*5Y=J6AdF&{W#2eygb+0Rxl%o%GbDCsYu>`Ars7t!s}9TAo( zqSeykjK!2Ow>>Dds%=7Ih?03&zm=j(b0#Ze7Xs8x8CYb>nu`yyIGAJ*rxs*dp1|x<~d|^1zB7@bhd%Db-(U z`|DhGV<&I!!_}~PoR&%h@(+=SO15O}&#|y>;g@)>Z?^1iq1D}6h#f%;)=Fiph^zJu zP3lREh(uTS+^FAkJ>k*4^JCUz$`w`RGnQw(>cX9n>Q$=*a;t@IsIBc@$>&Ttlc%sF zUAY)qCTfczH`{$DYoIfhe(S;vnD<+Vge8Bl zXRNO;TG!h4vmV{V`9S*NaBpDb;rx GNB#o?n>4uq literal 0 HcmV?d00001 diff --git a/drivers/unifile/df1.driver_code_0x2000.dis65 b/drivers/unifile/df1.driver_code_0x2000.dis65 new file mode 100644 index 0000000..8e32f32 --- /dev/null +++ b/drivers/unifile/df1.driver_code_0x2000.dis65 @@ -0,0 +1,2142 @@ +### 6502bench SourceGen dis65 v1.0 ### +{ +"_ContentVersion":5, +"FileDataLength":1942, +"FileDataCrc32":-580850467, +"ProjectProps":{ +"CpuName":"6502", +"IncludeUndocumentedInstr":false, +"TwoByteBrk":true, +"EntryFlags":32702671, +"AutoLabelStyle":"Simple", +"AnalysisParams":{ +"AnalyzeUncategorizedData":false, +"DefaultTextScanMode":"LowHighAscii", +"MinCharsForString":4, +"SeekNearbyTargets":true, +"UseRelocData":false, +"SmartPlpHandling":false, +"SmartPlbHandling":true}, + +"PlatformSymbolFileIdentifiers":["RT:Apple/A3-ROM.sym65", +"RT:Apple/A3-IO.sym65", +"RT:Apple/SOS.sym65"], +"ExtensionScriptFileIdentifiers":["RT:Apple/SOS.cs"], +"ProjectSyms":{ +"AllocSIR":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"AllocSIR", +"Value":6419, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"CSList":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"CSList", +"Value":195, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"CtlStat":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"CtlStat", +"Value":194, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"Ph2Off":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"Ph2Off", +"Value":49284, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"QtyRead":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"QtyRead", +"Value":200, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"ReqCnt":{ +"DataDescriptor":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":true, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"ReqCnt", +"Value":196, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"ReqCode":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"ReqCode", +"Value":192, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"SelC800":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"SelC800", +"Value":6434, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"SIR_Len":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"SIR_Len", +"Value":5, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"SOS_Unit":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"SOS_Unit", +"Value":193, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"SosBlk":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"SosBlk", +"Value":198, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"SosBuf":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"SosBuf", +"Value":194, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"SysErr":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"SysErr", +"Value":6440, +"Source":"Project", +"Type":"ExternalAddr", +"LabelAnno":"None"}, + +"XBADOP":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"XBADOP", +"Value":38, +"Source":"Project", +"Type":"Constant", +"LabelAnno":"None"}, + +"XBLKNUM":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"XBLKNUM", +"Value":45, +"Source":"Project", +"Type":"Constant", +"LabelAnno":"None"}, + +"XBYTECNT":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"XBYTECNT", +"Value":44, +"Source":"Project", +"Type":"Constant", +"LabelAnno":"None"}, + +"XCTLCODE":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"XCTLCODE", +"Value":33, +"Source":"Project", +"Type":"Constant", +"LabelAnno":"None"}, + +"XNODRIVE":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"XNODRIVE", +"Value":40, +"Source":"Project", +"Type":"Constant", +"LabelAnno":"None"}, + +"XNORESRC":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"XNORESRC", +"Value":37, +"Source":"Project", +"Type":"Constant", +"LabelAnno":"None"}, + +"XREQCODE":{ +"DataDescriptor":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"Comment":"", +"HasWidth":false, +"Direction":"ReadWrite", +"MultiMask":null, +"Label":"XREQCODE", +"Value":32, +"Source":"Project", +"Type":"Constant", +"LabelAnno":"None"}}}, + +"AddressMap":[{ +"Offset":0, +"Addr":8192, +"Length":1942, +"PreLabel":"", +"IsRelative":false}], +"TypeHints":[{ +"Low":0, +"High":1, +"Hint":"InlineData"}, + +{ +"Low":37, +"High":37, +"Hint":"InlineData"}, + +{ +"Low":134, +"High":134, +"Hint":"Code"}, + +{ +"Low":136, +"High":136, +"Hint":"Code"}, + +{ +"Low":200, +"High":200, +"Hint":"Data"}, + +{ +"Low":220, +"High":220, +"Hint":"Code"}, + +{ +"Low":630, +"High":630, +"Hint":"Code"}, + +{ +"Low":893, +"High":893, +"Hint":"Code"}, + +{ +"Low":898, +"High":898, +"Hint":"Code"}, + +{ +"Low":988, +"High":988, +"Hint":"Code"}, + +{ +"Low":993, +"High":993, +"Hint":"Code"}, + +{ +"Low":1015, +"High":1015, +"Hint":"Code"}, + +{ +"Low":1043, +"High":1043, +"Hint":"Data"}, + +{ +"Low":1048, +"High":1052, +"Hint":"InlineData"}, + +{ +"Low":1133, +"High":1776, +"Hint":"InlineData"}, + +{ +"Low":1777, +"High":1777, +"Hint":"Code"}, + +{ +"Low":1778, +"High":1779, +"Hint":"InlineData"}, + +{ +"Low":1780, +"High":1780, +"Hint":"Code"}, + +{ +"Low":1781, +"High":1781, +"Hint":"InlineData"}, + +{ +"Low":1782, +"High":1782, +"Hint":"Code"}, + +{ +"Low":1806, +"High":1806, +"Hint":"Code"}, + +{ +"Low":1811, +"High":1811, +"Hint":"Code"}, + +{ +"Low":1906, +"High":1906, +"Hint":"Code"}, + +{ +"Low":1909, +"High":1909, +"Hint":"Code"}, + +{ +"Low":1914, +"High":1914, +"Hint":"Code"}, + +{ +"Low":1921, +"High":1921, +"Hint":"Code"}, + +{ +"Low":1930, +"High":1930, +"Hint":"Code"}], +"StatusFlagOverrides":{ +}, + +"Comments":{ +"0":"Link pointer to next DIB", +"2":"Entry pointer", +"4":"Name length byte", +"5":"Device name", +"20":"Active, no page alignment", +"21":"Slot number", +"22":"Unit number", +"23":"Type", +"24":"Subtype", +"25":"Filler", +"26":"# Blocks in device", +"28":"Manufacturer", +"30":"Driver version", +"32":"DCB length followed by DCB", +"37":"Link pointer to next DIB", +"39":"Entry pointer", +"41":"Name length byte", +"42":"Device name", +"57":"Active, no page alignment", +"58":"Slot number", +"59":"Unit number", +"60":"Type", +"61":"Subtype", +"62":"Filler", +"63":"# Blocks in device", +"65":"Manufacturer", +"67":"Driver version", +"69":"DCB length followed by DCB", +"185":"Bad request code!", +"190":"Invalid operation!", +"193":"Drive not connected", +"200":"0 Read request", +"202":"1 Write request", +"204":"2 Status request", +"206":"3 Control request", +"208":"4 Unused", +"210":"5 Unused", +"212":"6 Unused", +"214":"7 Unused", +"216":"8 Init request", +"218":"9 Repeat last read or write request", +"290":"Drive not connected", +"294":"Resource not available", +"302":"Zero # bytes read", +"399":"I/O error", +"492":"Positive request count, continue", +"496":"Positive request count, continue", +"511":"Block number too large", +"518":"Byte count not a multiple of 512", +"579":"Copy 7 Control/Status list bytes from device", +"689":"set up buffer pointer one", +"693":"now set up 3 more pointers, in $80 increments", +"712":"set up the xbyte for the pointers", +"910":"Invalid control/status code", +"1015":"CtlStat", +"1017":"Format the device", +"1081":"This would be pulling data from beyond the Z8 block???", +"1765":"these look familiar for low level disk nibbles"}, + +"LongComments":{ +"-2147483647":{ +"Text":"6502bench SourceGen v1.8.1", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"0":{ +"Text":" UNIFILE / DUOFILE SOS Driver Version 1.00A\r\n \r\n Device identification Block (DIB) #0\r\n \r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"37":{ +"Text":"\r\n Device identification Block (DIB) #1\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"200":{ +"Text":"\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"190":{ +"Text":"\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"195":{ +"Text":"\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"409":{ +"Text":"\r\nD_WRITE call processing\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"967":{ +"Text":"\r\nstatus code $01\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"1806":{ +"Text":"\r\ncontrol code $04\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"71":{ +"Text":" ", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"1053":{ +"Text":"\r\ncontrol code $fe\r\nformat disk??\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"1133":{ +"Text":"maybe Z8 code to do the formatting of the disk", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"1909":{ +"Text":"\r\ncontrol code $02\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"1930":{ +"Text":"\r\ncontrol code $02\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"988":{ +"Text":"\r\nD_REPEAT - repeat the last D_READ or D_WRITE call\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"685":{ +"Text":"Sets up 4 zero page pointers ca, cc, ce, d0 to be able to copy the 512 bytes\r\nof data in four 128 byte chunks\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"220":{ +"Text":"\r\nD_INIT call processing\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"99":{ +"Text":" ", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"302":{ +"Text":"\r\nD_READ call processing\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"404":{ +"Text":"\r\nD_WRITE call processing\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"893":{ +"Text":"\r\nD_STATUS call processing\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"1015":{ +"Text":"\r\nD_CONTROL call processing\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"1043":{ +"Text":"\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"1777":{ +"Text":"\r\ncontrol code $01\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"798":{ +"Text":"\r\ncontrol code $00\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}, + +"978":{ +"Text":"\r\nstatus code fe\r\n\r\n", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}}, + +"Notes":{ +}, + +"UserLabels":{ +"0":{ +"Label":"DIB0", +"Value":8192, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"37":{ +"Label":"DIB1", +"Value":8229, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"134":{ +"Label":"Entry", +"Value":8326, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"404":{ +"Label":"DWrite", +"Value":8596, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"893":{ +"Label":"DStatus", +"Value":9085, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1015":{ +"Label":"DControl", +"Value":9207, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"185":{ +"Label":"BadReq", +"Value":8377, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"190":{ +"Label":"BadOp", +"Value":8382, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"220":{ +"Label":"DInit", +"Value":8412, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"988":{ +"Label":"DRepeat", +"Value":9180, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"200":{ +"Label":"DoTable", +"Value":8392, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"399":{ +"Label":"IO_Error", +"Value":8591, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"21":{ +"Label":"DIB0_Slot", +"Value":8213, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"26":{ +"Label":"DIB0_Blks", +"Value":8218, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"99":{ +"Label":"SIR_Addr", +"Value":8291, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"302":{ +"Label":"DRead", +"Value":8494, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"133":{ +"Label":"Var21", +"Value":8325, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"101":{ +"Label":"Var01", +"Value":8293, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"102":{ +"Label":"Var02", +"Value":8294, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"103":{ +"Label":"Var03", +"Value":8295, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"104":{ +"Label":"Var04", +"Value":8296, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"105":{ +"Label":"Var05", +"Value":8297, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"106":{ +"Label":"LastError", +"Value":8298, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"107":{ +"Label":"SlotNum", +"Value":8299, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"108":{ +"Label":"Var08", +"Value":8300, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"109":{ +"Label":"Var09", +"Value":8301, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"110":{ +"Label":"Var0A", +"Value":8302, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"111":{ +"Label":"Var0B", +"Value":8303, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"112":{ +"Label":"Var0C", +"Value":8304, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"113":{ +"Label":"Var0D", +"Value":8305, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"114":{ +"Label":"Var0E", +"Value":8306, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"115":{ +"Label":"Var0F", +"Value":8307, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"116":{ +"Label":"LastUnit", +"Value":8308, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"121":{ +"Label":"StatusList", +"Value":8313, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"129":{ +"Label":"InitStatus", +"Value":8321, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"130":{ +"Label":"Var1E", +"Value":8322, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"131":{ +"Label":"Var1F", +"Value":8323, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"132":{ +"Label":"Var20", +"Value":8324, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1777":{ +"Label":"DCtrl01", +"Value":9969, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1806":{ +"Label":"DCtrl04", +"Value":9998, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1909":{ +"Label":"DCtrl02", +"Value":10101, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"798":{ +"Label":"DCtrl00", +"Value":8990, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1043":{ +"Label":"CtrlDispatch", +"Value":9235, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1921":{ +"Label":"DCtrl03", +"Value":10113, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1053":{ +"Label":"CtrlFE", +"Value":9245, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1038":{ +"Label":"BadCtl", +"Value":9230, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"967":{ +"Label":"DStat01", +"Value":9159, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"915":{ +"Label":"DStat00", +"Value":9107, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"978":{ +"Label":"DStatFE", +"Value":9170, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1782":{ +"Label":"DCtrlErr", +"Value":9974, +"Source":"User", +"Type":"NonUniqueLocalAddr", +"LabelAnno":"None"}, + +"1785":{ +"Label":"DCtrlOk", +"Value":9977, +"Source":"User", +"Type":"NonUniqueLocalAddr", +"LabelAnno":"None"}, + +"290":{ +"Label":"InitNoDrive", +"Value":8482, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"294":{ +"Label":"InitNoResource", +"Value":8486, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"34":{ +"Label":"DCB_Bytes", +"Value":8226, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"498":{ +"Label":"WriteError", +"Value":8690, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"289":{ +"Label":"DInitDone", +"Value":8481, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"744":{ +"Label":"Done", +"Value":8936, +"Source":"User", +"Type":"NonUniqueLocalAddr", +"LabelAnno":"None"}, + +"892":{ +"Label":"Done", +"Value":9084, +"Source":"User", +"Type":"NonUniqueLocalAddr", +"LabelAnno":"None"}, + +"1133":{ +"Label":"Z8Block1", +"Value":9325, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1389":{ +"Label":"Z8Block2", +"Value":9581, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1645":{ +"Label":"Z8Block3", +"Value":9837, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"117":{ +"Label":"LastReq", +"Value":8309, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1012":{ +"Label":"DRepeatErr", +"Value":9204, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"1005":{ +"Label":"Write", +"Value":9197, +"Source":"User", +"Type":"NonUniqueLocalAddr", +"LabelAnno":"None"}, + +"118":{ +"Label":"Var12", +"Value":8310, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"119":{ +"Label":"Var13", +"Value":8311, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"120":{ +"Label":"Var14", +"Value":8312, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"128":{ +"Label":"Var1C", +"Value":8320, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"579":{ +"Label":"CpyCSList", +"Value":8771, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}}, + +"OperandFormats":{ +"0":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"DIB1", +"Part":"Low"}}, + +"2":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"Entry", +"Part":"Low"}}, + +"5":{ +"Length":4, +"Format":"StringGeneric", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"9":{ +"Length":11, +"Format":"Fill", +"SubFormat":"None", +"SymbolRef":null}, + +"24":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"25":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"26":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"28":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"30":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"32":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"37":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"39":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"Entry", +"Part":"Low"}}, + +"41":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"42":{ +"Length":4, +"Format":"StringGeneric", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"46":{ +"Length":11, +"Format":"Fill", +"SubFormat":"None", +"SymbolRef":null}, + +"63":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"65":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"67":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"69":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"71":{ +"Length":28, +"Format":"StringGeneric", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"99":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"None", +"SymbolRef":null}, + +"121":{ +"Length":7, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"164":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"SelC800", +"Part":"Low"}}, + +"185":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"SOS_BADREQCODE", +"Part":"Low"}}, + +"190":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"SOS_BADOP", +"Part":"Low"}}, + +"195":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"XNODRIVE", +"Part":"Low"}}, + +"200":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"DRead", +"Part":"Low"}}, + +"202":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"DWrite", +"Part":"Low"}}, + +"204":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"DStatus", +"Part":"Low"}}, + +"206":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"DControl", +"Part":"Low"}}, + +"208":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"BadReq", +"Part":"Low"}}, + +"210":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"BadReq", +"Part":"Low"}}, + +"212":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"BadOp", +"Part":"Low"}}, + +"214":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"BadOp", +"Part":"Low"}}, + +"216":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"DInit", +"Part":"Low"}}, + +"218":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"DRepeat", +"Part":"Low"}}, + +"238":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"SIR_Len", +"Part":"Low"}}, + +"290":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"XNODRIVE", +"Part":"Low"}}, + +"294":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"SOS_NORESC", +"Part":"Low"}}, + +"399":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"SOS_IOERR", +"Part":"Low"}}, + +"506":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"SosBlk", +"Part":"Low"}}, + +"511":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"SOS_BLKNUM", +"Part":"Low"}}, + +"518":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"SOS_BYTECNT", +"Part":"Low"}}, + +"523":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"656":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"SosBlk", +"Part":"Low"}}, + +"680":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"SosBlk", +"Part":"Low"}}, + +"685":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"SosBuf", +"Part":"Low"}}, + +"687":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"SosBuf", +"Part":"Low"}}, + +"801":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"Ph2Off", +"Part":"Low"}}, + +"910":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"XCTLCODE", +"Part":"Low"}}, + +"988":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"LastUnit", +"Part":"Low"}}, + +"993":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"DRepeatErr", +"Part":"Low"}}, + +"1038":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"XCTLCODE", +"Part":"Low"}}, + +"1043":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"DCtrl00", +"Part":"Low"}}, + +"1045":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"DCtrl01", +"Part":"Low"}}, + +"1047":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"DCtrl02", +"Part":"Low"}}, + +"1049":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"DCtrl03", +"Part":"Low"}}, + +"1051":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"DCtrl04", +"Part":"Low"}}, + +"1133":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1141":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1149":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1157":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1165":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1173":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1181":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1189":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1197":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1205":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1213":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1221":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1229":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1237":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1245":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1253":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1261":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1269":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1277":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1285":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1293":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1301":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1309":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1317":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1325":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1333":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1341":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1349":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1357":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1365":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1373":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1381":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1389":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1397":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1405":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1413":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1421":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1429":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1437":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1445":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1453":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1461":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1469":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1477":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1485":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1493":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1501":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1509":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1517":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1525":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1533":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1541":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1549":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1557":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1565":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1573":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1581":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1589":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1597":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1605":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1613":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1621":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1629":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1637":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1645":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1653":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1661":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1669":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1677":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1685":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1693":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1701":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1709":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1717":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1725":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1733":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1741":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1749":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1757":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1765":{ +"Length":8, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1773":{ +"Length":4, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}, + +"1941":{ +"Length":1, +"Format":"Dense", +"SubFormat":"None", +"SymbolRef":null}}, + +"LvTables":{ +}, + +"Visualizations":[], +"VisualizationAnimations":[], +"VisualizationSets":{ +}, + +"RelocList":{ +}, + +"DbrValues":{ +}} diff --git a/drivers/unifile/df1.driver_code_0x2000_cc65.cfg b/drivers/unifile/df1.driver_code_0x2000_cc65.cfg new file mode 100644 index 0000000..b6613f2 --- /dev/null +++ b/drivers/unifile/df1.driver_code_0x2000_cc65.cfg @@ -0,0 +1,9 @@ +# 6502bench SourceGen generated linker script for df1.driver_code_0x2000 +MEMORY { + MAIN: file=%O, start=%S, size=65536; +} +SEGMENTS { + CODE: load=MAIN, type=rw; +} +FEATURES {} +SYMBOLS {} diff --git a/drivers/unifile/df1.driver_code_0x2000_cc65.s b/drivers/unifile/df1.driver_code_0x2000_cc65.s new file mode 100644 index 0000000..7f4bc58 --- /dev/null +++ b/drivers/unifile/df1.driver_code_0x2000_cc65.s @@ -0,0 +1,828 @@ +; Target assembler: cc65 v2.18.0 [--target none -C df1.driver_code_0x2000_cc65.cfg] +; 6502bench SourceGen v1.8.1 + .setcpu "6502" +SOS_BADREQCODE = $20 +XCTLCODE = $21 +SOS_NORESC = $25 +SOS_BADOP = $26 +SOS_IOERR = $27 +XNODRIVE = $28 +SOS_BYTECNT = $2c +SOS_BLKNUM = $2d + +SIR_Len = $05 +ReqCode = $c0 +SOS_Unit = $c1 +CtlStat = $c2 +SosBuf = $c2 +CSList = $c3 +ReqCnt = $c4 +SosBlk = $c6 +QtyRead = $c8 +AllocSIR = $1913 +SelC800 = $1922 +SysErr = $1928 +Ph2Off = $c084 +MOTOROFF = $c088 +Q6L = $c08c + +; UNIFILE / DUOFILE SOS Driver Version 1.00A +; +; Device identification Block (DIB) #0 +; + .org $2000 +DIB0: .word DIB1 ;Link pointer to next DIB + .word Entry ;Entry pointer + .byte $04 ;Name length byte + .byte ".DF1" ;Device name + .res 11,$00 + .byte $80 ;Active, no page alignment +DIB0_Slot: + .byte $02 ;Slot number + .byte $00 ;Unit number + .byte $f1 ;Type + .byte $03 ;Subtype + .byte $00 ;Filler +DIB0_Blks: + .word $06a6 ;# Blocks in device + .word $0001 ;Manufacturer + .word $100a ;Driver version + .word $0003 ;DCB length followed by DCB +DCB_Bytes: + .byte $00 + .byte $ff + .byte $02 +; +; Device identification Block (DIB) #1 +; +DIB1: .word $0000 ;Link pointer to next DIB + .word Entry ;Entry pointer + .byte $04 ;Name length byte + .byte ".DF2" ;Device name + .res 11,$00 + .byte $00 ;Active, no page alignment + .byte $02 ;Slot number + .byte $01 ;Unit number + .byte $f1 ;Type + .byte $03 ;Subtype + .byte $00 ;Filler + .word $06a6 ;# Blocks in device + .word $0001 ;Manufacturer + .word $100a ;Driver version + .word $0000 ;DCB length followed by DCB +; + .byte "(C) APPLE COMPUTER INC. 1982" +; +SIR_Addr: + .word $2065 +Var01: .byte $10 +Var02: .byte $00 +Var03: .byte $00 +Var04: .byte $00 +Var05: .byte $00 +LastError: + .byte $00 +SlotNum: .byte $00 +Var08: .byte $00 +Var09: .byte $00 +Var0A: .byte $00 +Var0B: .byte $00 +Var0C: .byte $00 +Var0D: .byte $00 +Var0E: .byte $00 +Var0F: .byte $00 +LastUnit: + .byte $00 +LastReq: .byte $00 +Var12: .byte $00 +Var13: .byte $00 +Var14: .byte $00 +StatusList: + .byte $00,$00,$00,$00,$00,$00,$00 +Var1C: .byte $00 +InitStatus: + .byte $00 +Var1E: .byte $06 +Var1F: .byte $00 +Var20: .byte $00 +Var21: .byte $17 + +Entry: lda ReqCode + cmp #$08 + beq @L2091 + lda LastError + bne L20BB +@L2091: lda ReqCode + cmp #$09 + beq @L209A + sta LastReq +@L209A: jsr @L20A8 + lda #$96 + jsr L230A + lda #$00 + jsr SelC800 + rts + +@L20A8: lda ReqCode + cmp #$0a + bcs BadReq + asl A + tay + lda DoTable+1,y + pha + lda DoTable,y + pha + rts + +BadReq: lda #SOS_BADREQCODE ;Bad request code! +L20BB: jsr SysErr +; +BadOp: lda #SOS_BADOP ;Invalid operation! + jsr SysErr +; + lda #XNODRIVE + jsr SysErr +; +; +DoTable: .word DRead-1 ;0 Read request + .word DWrite-1 ;1 Write request + .word DStatus-1 ;2 Status request + .word DControl-1 ;3 Control request + .word BadReq-1 ;4 Unused + .word BadReq-1 ;5 Unused + .word BadOp-1 ;6 Unused + .word BadOp-1 ;7 Unused + .word DInit-1 ;8 Init request + .word DRepeat-1 ;9 Repeat last read or write request + +; +; D_INIT call processing +; +DInit: bit InitStatus + bmi DInitDone + dec InitStatus + lda DIB0_Slot + clc + adc Var01 + sta Var01 + lda #SIR_Len + ldx SIR_Addr + ldy SIR_Addr+1 + jsr AllocSIR + bcs InitNoResource + lda DIB0_Slot + asl A + asl A + asl A + asl A + sta SlotNum + lda #$01 + jsr L22DB + bcc @L2116 + jsr DCtrl00 + lda #$01 + jsr L22DB + bcs InitNoDrive +@L2116: lda $ca28 + cmp #$d5 + beq DInitDone + cmp #$ad + bne InitNoDrive +DInitDone: + rts + +InitNoDrive: + lda #XNODRIVE ;Drive not connected + bne L2128 + +InitNoResource: + lda #SOS_NORESC ;Resource not available +L2128: sta LastError + jsr SysErr +; +; D_READ call processing +; +DRead: lda #$00 ;Zero # bytes read + tay + sta (QtyRead),y + iny + sta (QtyRead),y + jsr L21DF +L2139: jsr L2224 + jsr L22D8 + bcs IO_Error +L2141: lda #$08 + jsr L2325 + lda #$aa + jsr L230A + jsr L22D8 + bcs IO_Error +L2150: jsr L2241 + beq @L2165 + bcc @L215A + jsr SysErr +@L215A: dec Var08 + ldx Var08 + bpl L2141 + jsr SysErr +@L2165: ldx #$7f + ldy #$00 +@L2169: lda $c980,x + sta ($ca),y + lda $c900,x + sta ($cc),y + lda $c880,x + sta ($ce),y + lda $c800,x + sta ($d0),y + dex + iny + bpl @L2169 + lda #$02 + ldy #$01 + adc (QtyRead),y + sta (QtyRead),y + jsr L220B + bne L2139 + rts + +IO_Error: + lda #SOS_IOERR ;I/O error + jsr SysErr +; +; D_WRITE call processing +; +DWrite: jsr L21DF +@L2197: jsr L22D8 + bcs IO_Error + lda #$05 + jsr L2325 + ldy #$7f +@L21A3: lda ($ca),y + sta $c80c,y + lda ($cc),y + sta $c88c,y + lda ($ce),y + sta $c90c,y + lda ($d0),y + sta $c98c,y + dey + bpl @L21A3 + lda #$aa + jsr L230A + jsr L22D8 + bcs IO_Error + jsr L2241 + beq @L21D9 + bcc @L21CE + jsr SysErr +@L21CE: dec Var08 + ldx Var08 + bpl @L2197 + jsr SysErr +@L21D9: jsr L220B + bne @L2197 + rts + +L21DF: lda SOS_Unit + sta LastUnit + lda DCB_Bytes + sta Var08 + lda ReqCnt + bne L21F5 ;Positive request count, continue + lda ReqCnt+1 + bne L21F5 ;Positive request count, continue +WriteError: + jmp SysErr + +L21F5: lda SosBlk + cmp DIB0_Blks + lda SosBlk+1 + sbc DIB0_Blks+1 + lda #SOS_BLKNUM ;Block number too large + bcs WriteError + jsr L227C + lda #SOS_BYTECNT ;Byte count not a multiple of 512 + bcc WriteError + rts + +L220B: ldx #$06 +@L220D: inc $cb,x + inc $cb,x + dex + dex + bpl @L220D + inc Var0C + bne @L221D + inc Var0D +@L221D: jsr L2224 + dec Var09 + rts + +L2224: lda $cb + cmp #$82 + bcc @L2240 + ldx $14cb + bpl @L2240 + cpx #$8f + bcs @L2240 + ldx #$08 +@L2235: inc $14c9,x + asl $c9,x + lsr $c9,x + dex + dex + bne @L2235 +@L2240: rts + +L2241: ldx #$06 +CpyCSList: + lda $ca29,x ;Copy 7 Control/Status list bytes from device + sta StatusList,x + dex + bpl CpyCSList + sec + lda $ca29 + bpl @L226D + and #$70 + sta Var0E + ldx #$05 +@L2259: lda @L2276,x + bit Var0E + bne @L2268 + dex + dex + bpl @L2259 +@L2265: lda #$27 + rts + +@L2268: dex + lda @L2276,x + rts + +@L226D: lda $ca2a + clc + bmi @L2265 + lda #$00 + rts + +@L2276: rol DCtrl04+2 + jsr $402b +L227C: lda ReqCnt + bne @L22D6 + lda ReqCnt+1 + lsr A + bcs @L22D6 + sta Var09 + clc + adc SosBlk + sta Var0E + lda #$00 + adc SosBlk+1 + sta Var0F + lda DIB0_Blks + cmp Var0E + lda DIB0_Blks+1 + sbc Var0F + bcc @L22D6 + lda SosBlk + sta Var0C + lda SosBlk+1 + sta Var0D +; Sets up 4 zero page pointers ca, cc, ce, d0 to be able to copy the 512 bytes +; of data in four 128 byte chunks + lda SosBuf + ldx SosBuf+1 + sta $ca ;set up buffer pointer one + stx $cb + ldy #$02 ;now set up 3 more pointers, in $80 increments +@L22B7: clc + adc #$80 + sta $00ca,y + bcc @L22C0 + inx +@L22C0: stx $cb,y + iny + iny + cpy #$08 + bne @L22B7 + lda $14c3 ;set up the xbyte for the pointers + ldx #$06 +@L22CD: sta $14cb,x + dex + dex + bpl @L22CD + sec + rts + +@L22D6: clc + rts + +L22D8: lda DCB_Bytes+1 +L22DB: sta Var0B +@L22DE: jsr @L22E9 + bcc @Done + dec Var0B + bne @L22DE +@Done: rts + +@L22E9: lda #$a0 + sta Var0A + ldy #$00 + ldx SlotNum +@L22F3: lda Q6L,x + bmi @L2302 + dey + bne @L22F3 + dec Var0A + bne @L22F3 + sec + rts + +@L2302: clc + lda DIB0_Slot + jsr SelC800 + rts + +L230A: sta $ca28 + ldx SlotNum + ldy #$00 +@L2312: lda MOTOROFF,x + bpl @L231C + dey + bne @L2312 + sec + rts + +@L231C: clc + rts + +; +; control code $00 +; +DCtrl00: ldx SlotNum + lda Ph2Off,x + rts + +L2325: tay + sta $ca20 + lda Var1E + sta $ca24 + lda Var1F + sta $ca25 + lda SOS_Unit + sta $ca23 + lda Var0C + sta $ca22 + lda Var0D + sta $ca21 + lda Var21 + sta $ca26 + lda Var20 + sta $ca27 + cpy #$06 + bne @L236B + lda #$00 + sta $ca24 + lda #$13 + sta $ca26 + lda #$00 + sta $ca27 + ldx DCB_Bytes+2 + stx $ca21 +@L236B: cpy #$03 + bne @Done + ldy #$00 + lda (CSList),y + sta $ca26 + iny + lda (CSList),y + sta $ca27 +@Done: rts + +; +; D_STATUS call processing +; +DStatus: ldx #$01 + cpx CtlStat + beq DStat01 + dex + cpx CtlStat + beq DStat00 + dex + dex + cpx CtlStat + beq DStatFE + lda #XCTLCODE ;Invalid control/status code + jsr SysErr +DStat00: jsr L22D8 + bcc @L239B +@L2398: jmp IO_Error + +@L239B: lda #$01 + jsr L2325 + lda #$aa + jsr L230A + jsr L22D8 + bcs @L2398 + lda $ca29 + sta Var0E + lda #$40 + ldy #$05 +@L23B4: lsr Var0E + bcc @L23BC + eor @L23C2-1,y +@L23BC: dey + bne @L23B4 + sta (CSList),y + rts + +@L23C2: .byte $04 + .byte $20 + .byte $40 + .byte $00 + .byte $02 + +; +; status code $01 +; +DStat01: ldy #$06 +@L23C9: lda StatusList,y + sta (CSList),y + dey + bpl @L23C9 + rts + +; +; status code fe +; +DStatFE: ldy #$00 + lda #$ff + sta (CSList),y + iny + sta (CSList),y + rts + +; +; D_REPEAT - repeat the last D_READ or D_WRITE call +; +DRepeat: lda LastUnit + cmp SOS_Unit + bne DRepeatErr + lda LastReq + sta ReqCode + bne @Write + jmp DRead + +@Write: cmp #$02 + bcs DRepeatErr + jmp DWrite + +DRepeatErr: + jmp BadOp + +; +; D_CONTROL call processing +; +DControl: + lda CtlStat ;CtlStat + cmp #$fe ;Format the device + beq CtrlFE + lda CtlStat + cmp #$05 + bcs BadCtl + asl A + tay + lda CtrlDispatch+1,y + pha + lda CtrlDispatch,y + pha + rts + +BadCtl: lda #XCTLCODE + jsr SysErr +; +CtrlDispatch: + .word DCtrl00-1 + .word DCtrl01-1 + .word DCtrl02-1 + .word DCtrl03-1 + .word DCtrl04-1 +; +; control code $fe +; format disk?? +CtrlFE: jsr L22D8 + bcc @L2425 +@L2422: jmp IO_Error + +@L2425: ldy #$00 +@L2427: lda Z8Block1,y + sta $cb00,y + lda Z8Block2,y + sta $cc00,y + lda Z8Block3,y + sta $cd00,y + lda L276D,y ;This would be pulling data from beyond the Z8 block??? + sta $ce00,y + iny + bne @L2427 + lda #$06 + jsr L2325 + lda #$aa + jsr L230A + lda #$00 + jsr L22DB + bcc @L2460 + lda #$00 + jsr L22DB + bcc @L2460 + jsr DCtrl00 + jmp @L2422 + +@L2460: lda $ca29 + bmi @L2466 + rts + +@L2466: cmp #$90 + bcc @L2422 + jmp L2150 + +; maybe Z8 code to do the formatting of the disk +Z8Block1: + .byte $8b,$04,$97,$01,$02,$00,$8f,$e6 + .byte $39,$80,$e6,$04,$10,$e6,$05,$4b + .byte $d6,$00,$18,$31,$10,$b0,$12,$56 + .byte $33,$01,$e6,$31,$3f,$e6,$04,$10 + .byte $e6,$05,$4e,$d6,$00,$18,$d6,$13 + .byte $ed,$d6,$13,$bd,$7b,$2a,$d6,$13 + .byte $f3,$6b,$05,$d6,$13,$bc,$7b,$20 + .byte $d6,$13,$59,$7b,$1b,$20,$31,$56 + .byte $31,$3f,$a6,$31,$2e,$eb,$e7,$06 + .byte $33,$02,$20,$12,$a6,$12,$02,$1b + .byte $c9,$e4,$1a,$3b,$b0,$39,$b0,$3a + .byte $af,$31,$10,$0c,$05,$e4,$1a,$0d + .byte $d6,$14,$0a,$d6,$13,$76,$fb,$0d + .byte $d6,$13,$76,$fb,$08,$d6,$13,$ec + .byte $31,$10,$0a,$ec,$df,$af,$31,$10 + .byte $8c,$16,$38,$eb,$4c,$ff,$d6,$13 + .byte $b3,$31,$10,$1c,$81,$7b,$1b,$98 + .byte $0e,$92,$48,$31,$10,$3a,$ef,$9c + .byte $00,$38,$eb,$1c,$82,$82,$48,$a6 + .byte $e4,$ff,$eb,$06,$a0,$e8,$3a,$f5 + .byte $cf,$af,$31,$10,$38,$12,$e0,$e3 + .byte $44,$31,$e3,$e4,$11,$39,$e4,$13 + .byte $3a,$df,$af,$e6,$04,$10,$e6,$05 + .byte $33,$8d,$00,$18,$af,$e6,$1a,$38 + .byte $d6,$14,$0a,$d6,$13,$76,$31,$00 + .byte $fb,$15,$d6,$13,$76,$31,$00,$fb + .byte $0e,$26,$1a,$02,$a6,$1a,$18,$9b + .byte $e7,$e6,$11,$85,$8d,$13,$a2,$26 + .byte $1a,$02,$ac,$13,$bc,$05,$c8,$1a + .byte $92,$ca,$cf,$af,$af,$e4,$00,$1e + .byte $e6,$1b,$17,$31,$20,$e6,$04,$10 + .byte $e6,$05,$3c,$d6,$00,$18,$a4,$1e +Z8Block2: + .byte $45,$6b,$05,$e4,$45,$1e,$00,$1b + .byte $af,$af,$e4,$1a,$0d,$d6,$15,$02 + .byte $d6,$15,$17,$31,$20,$e4,$1b,$07 + .byte $56,$e4,$7f,$92,$48,$31,$00,$b0 + .byte $f6,$46,$e3,$40,$46,$e0,$c0,$4c + .byte $01,$5c,$f4,$e6,$0a,$0a,$f0,$0c + .byte $2c,$ff,$d6,$14,$09,$80,$e4,$eb + .byte $f2,$a0,$e4,$80,$e4,$2c,$a9,$00 + .byte $ea,$6b,$05,$44,$33,$33,$8b,$f1 + .byte $ff,$f0,$0a,$f0,$0a,$4c,$0b,$82 + .byte $ce,$28,$ec,$a0,$ee,$00,$e4,$6b + .byte $04,$f0,$e5,$8b,$f2,$e6,$04,$05 + .byte $d6,$14,$fd,$44,$33,$33,$ff,$4c + .byte $04,$82,$ce,$28,$ec,$00,$e4,$6b + .byte $06,$a0,$ee,$f0,$05,$8b,$f2,$4c + .byte $02,$5c,$bf,$ff,$ff,$44,$33,$33 + .byte $ff,$2c,$96,$e6,$0f,$82,$80,$e4 + .byte $6b,$02,$8b,$f1,$f0,$05,$4c,$02 + .byte $82,$ce,$28,$ec,$a0,$ee,$00,$e4 + .byte $6b,$04,$f0,$05,$8b,$f2,$a0,$e8 + .byte $82,$68,$e4,$06,$0b,$b4,$1f,$eb + .byte $b4,$12,$eb,$ac,$01,$c2,$ca,$ac + .byte $15,$bc,$7a,$92,$ca,$2c,$ff,$e6 + .byte $0a,$01,$b8,$e6,$c2,$ca,$e6,$0a + .byte $15,$bc,$77,$92,$ca,$bc,$81,$92 + .byte $ca,$2c,$ff,$48,$ed,$fc,$73,$d6 + .byte $14,$f1,$f0,$ea,$d6,$14,$fd,$f0 + .byte $04,$ff,$00,$e7,$ed,$14,$4d,$44 + .byte $33,$33,$e6,$f6,$ff,$56,$e0,$3f + .byte $31,$20,$46,$e4,$80,$92,$48,$31 + .byte $00,$af,$44,$33,$33,$44,$33,$33 + .byte $f0,$05,$d6,$15,$01,$2c,$ff,$4a +Z8Block3: + .byte $f1,$af,$e6,$04,$10,$e6,$05,$2a + .byte $d6,$00,$18,$e6,$04,$10,$e6,$05 + .byte $5a,$d6,$00,$18,$31,$10,$af,$31 + .byte $00,$78,$1b,$d6,$15,$4f,$ec,$15 + .byte $fc,$76,$58,$31,$4c,$01,$c2,$c4 + .byte $92,$ce,$fe,$ac,$96,$92,$ae,$fe + .byte $58,$12,$c2,$c4,$92,$ce,$58,$31 + .byte $b6,$e5,$00,$59,$1f,$b4,$12,$e5 + .byte $c2,$c4,$fc,$7a,$92,$ce,$fc,$81 + .byte $92,$ae,$fc,$73,$ec,$15,$af,$a8 + .byte $e7,$b8,$e7,$be,$d0,$eb,$9c,$00 + .byte $8c,$16,$b0,$e5,$92,$58,$a0,$e8 + .byte $02,$5b,$92,$58,$a0,$e8,$22,$5b + .byte $5e,$26,$ea,$02,$ab,$ee,$9c,$00 + .byte $8c,$16,$af,$d5,$aa,$96,$ab,$ab + .byte $ab,$96,$ab,$de,$aa,$ff,$d5,$aa ;these look familiar for low level disk nibbles + .byte $ad,$ab,$de,$aa +; +; control code $01 +; +DCtrl01: jsr L22D8 + bcc DCtrlOk +DCtrlErr: + jmp IO_Error + +DCtrlOk: lda #$03 + jsr L2325 + lda #$aa + jsr L230A + jsr L22D8 + bcs DCtrlErr + lda $ca2a + bmi DCtrlErr + rts + +; +; control code $04 +; +DCtrl04: jsr L22D8 + bcs DCtrlErr + lda #$02 + jsr L2325 + ldy #$00 + jsr L278D + stx $d8 + sta $d9 + lda (CSList),y + sta $14d9 + iny + jsr L278D + pha + txa + clc + adc $d8 + sta Var12 + pla + adc $d9 + sta Var13 + jsr L278D + stx $da + stx $ca27 + sta $ca26 + clc + adc #$b8 + sta $db + jsr @L2756 + lda #$aa + jsr L230A +@L2750: jsr L22D8 + bcs @L2750 + rts + +@L2756: ldy #$00 +L2758: lda ($d8),y + sta ($da),y + inc $d8 + bne @L2762 + inc $d9 +@L2762: inc $da + bne @L2768 + inc $db +@L2768: lda $d8 + cmp Var12 +L276D: lda $d9 + sbc Var13 + bcc L2758 + rts + +; +; control code $02 +; +DCtrl02: ldy #$00 + jsr L278D + stx Var20 + sta Var21 + rts + +DCtrl03: ldy #$00 + jsr L278D + stx Var1E + sta Var1F + rts + +L278D: lda (CSList),y + iny + tax + lda (CSList),y + iny + rts + + .byte $00