From fc8385b1091c52f50217781546985cd98dc3aa30 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 20 Sep 2020 21:25:56 +0200 Subject: [PATCH] put something meaningful instead of C65 DOS version string --- bin/basic_generic.rom | Bin 8192 -> 8192 bytes bin/basic_ultimate64.rom | Bin 8192 -> 8192 bytes bin/kernal_generic.rom | Bin 8192 -> 8192 bytes bin/kernal_ultimate64.rom | Bin 8192 -> 8192 bytes bin/mega65.rom | Bin 131072 -> 131072 bytes bin/mega65_pxlfont.rom | Bin 131072 -> 131072 bytes src/dos_m65/4010.dos_datestr.s | 7 ++ ...000.dos_vectable.s => 4020.dos_vectable.s} | 0 src/kernal/iec_fast/m65dos_bridge.s | 22 +++--- tools/release.cc | 63 ++++++++++++++---- 10 files changed, 68 insertions(+), 24 deletions(-) create mode 100644 src/dos_m65/4010.dos_datestr.s rename src/dos_m65/{4000.dos_vectable.s => 4020.dos_vectable.s} (100%) diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom index fbaa3d1db264cd5b4558fb963ed90639e8f2a44d..5142820f12ad1f5bba6a0f6b67c528bcb77d263d 100644 GIT binary patch delta 2924 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 X*L^W03-i|fj-dx`6-)KgMzQoCYMTnz delta 2913 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 diff --git a/bin/basic_ultimate64.rom b/bin/basic_ultimate64.rom index ab9365d22c3d7dde45b2820b720b4e3955479b75..4334a7936e96d01f9f385b9248d6c872f05ab120 100644 GIT binary patch delta 1899 zcmZuyYj6|S72by}*}}F2$moF|7fY6H9;t)OSWVi1lgP-)<()81(!$EdU?9}_K{73r z4xRBfjN_zIZy%x4w7V-`nKjsvEvb$b8;7>WYy&|}r|l$6TM1z>q|;H!kA~8Yde)hC z_|cu&d(NJ7_wIRo-`SI!PHqa#g;C2o-|glQubBj&KzGizq>Jc|S+C$znfb;us7k?e zS&2cXvNw;Vxtqs@@E!Nk*0Z5|6U-iYqbsK)dsswsU-cYLX+V<|XL{+=L0)}KfWP8Gv!-LLH; z-zu&(o}g(Shf_o;_OMB!6@TTiwuHn`e|YmH+764#z!Kh!FH%9R|8MzdrB;B~5>Y{r zmP|Ivry2f~B%S@V|#tMz`E5Kp{IuT<9tvO`U9uc%Q;OueWtm3$_BJWHx`K99aBrEPna^lYZ0CMJfh8GqV($`go zxI$ea+61EVd%sA(AlA`l(M4Ue>(fSBH~Vm!6;L)Cv!br7$|E%gHh20i`0LYurS-7W zE!N?V1nITDQuogUfF@LcdI3bVXdr-JnD`%(mQCqgQk|>Vm&yB1C;6AP-!hUsZD3Eq zJy6X4t%w!k3zY`81{kOhiu^r|$v-))$^rFgAj9TsGVeqGr%9R3p%l#1|EQjZu!D`rqiM#mELh}cbE6!+1?Vi!Fmc4A1N zd*vQmd)6-Csdw;~r*s@XrF0-~1X~j1J|+b;^lpfUqv)=H!YrUxg;oZrHSivjzx&-FYRi#T)qA$m zukG0@1SdN0{^8;e99{c9eXV=HVU9o0bMV`T&J+&cdhy8DU+DedgO?OpzeeThL}DT( z%Tw^2RFYttk(EhVSKg7MQJGw+cJ8oKZ})c53%qX;Q2P+Xa5YNHEH3qYKs_AzKhXda zMn=^F-gq7)+CP)#@n;h#FbNWVO(!Vv)ofx%$Tw?RIdhJT*F51UmP2K9`)m+)6x~4P z91Th^ZqbiZq@s2kx4xO|t@V__7=JY12vZS$dL&%i>VVdQ4d;#8mVBvxw2;A7Nmxm? Gw)Q_!vn==k delta 1865 zcmZuxe{2)?6~FH}aftJC!6wcx=Rp!Dfe;0fHWuARXq)7+UdRt9nn0tMLfTM<+DTod zkx?-zS5O9$-S1XGHMTn^-%Br);N+Z|7>9s5AYKc&(Wa@Liel1`Fr?L`(weN=yyqZR z{@Cg6-n)BWeZTL0-urxxHXLnmUoU~a!SGnjB;L{_JFD$(muubp-8#vobMqDNf!`}$ zkJ1WKTE5xq&S1gHC0shA>6{#pV590IQn$7wzm2X$$@|PxV-oAn!p^hswjp+Ufd*l-m)_)m$lq3IAzzTnJ-X;-Q(MKu zIG#GALBSB(TN>Ya&81mSqji|$xbp% z|D62emL)^sSfi(Tnl<4|=kVoe7B8|#$)c6?vPS?hTR4t8_%%sV(kA|{oaRi&v%gW2 zCjP0=SIozF^DO<^T-n;I`gl1g>7+{Mz!QWF6?)Z`8s#9C$1L!dIDQUm61JuZk;dM+ zld%$)BsXFe0IJV|ffbJ)NNFM=>Py*7I69ZIYjxAOnD<`4Fv1c0fumAieclon-F@IQ;v=8Q3ZNu}Rrj9FMycxNPuHHLT4KxP&Hxk~3V z&*b97`=Zj+hs(Rloa_EIK02y=F*Gm~pr^B(JhuBvR$0Lj=Bt3#IdQ8GheOGzQZmI? zePEnVj04GDpIEjr8~B_#+Lm2vshJZd*5Z>hXB^4yCy7i`b4t({)j2;WX$l9&qjwKS z_`ALIC&a#qwMU2q3zJB#hy`X8otN9i8Rc5Lopm5PI}n{t)~;}#j#JZ~4!miDwUB>l zj_$SQ7jXWz_Qvhd+19!Pn%X+yd2we;>$aVZ@MIm$G?mfA);GwP^egLX`kd|Lraj}Q z&Ez;fCz8oOlJHdHJjzusp_akzNo~s_0z}>y z1aVJ*-pOyPLpnHJ^Ifvj$6qUF<=H0js?MBp7p$3rRux|LvqN$>`>DL29hCR6SL7E( ztgpLZZ|<{EyCjA#h(8D=2J%PV7WmXF{&j$UR#39m=Is}Pvy#swUeS7nr9|Y|h)%rQ zl&{3excI4;ItmZ*pBVIH;i2*s9hs0|=%O2Yr?DM^ms^C-Rb~^IRk+N>9=z2Bzn-OQ zi}r4BA35(E9Sax_KDzjuJpcIDPks$qAgLDNH#X6e}_`Xxa>DEyyn z`USYI=y7rDCA9F;6axCrI0zGHQQpsuP?w{DcpuT#F>+`Vl_)mWf;RQGS;$%YNgKKmZ{oSV2Rn#p_X#3)mB z1)oP8E7e;WH6SK3Z*=$Q*yt{i>fY*}k?PUv0h05XyM1yRv+Cpy#$G0&J(IIZDp2@*(X}|@>1cf^bHZUe!;8J+LcO_G6fY0;2#{wjl2BrqI22Nml z7PK^A0mH<=87C$N0ujVMmadELK<`ZUWtQdHXxplC0!XO(bUdD1$S69wn_1U*_IgIH zlotXZpDFY$Q7~UUf!XKMGKH2UK>GYLg#`<{JZ5+Rsf7AB0l#PO@7Us&(*U; z!Dt~+nS$Zu6c#-upcPYC4ET)<^xT~F3>g>{Uhni_T(kKyiw`U3rK{(x7|xtOcx1B% H*9}nsv@)3Y delta 418 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 SPpfI#uH`1pE5G|CQ~wJH`FL~y delta 8411 zcmY*<3tSUdzJD?y1OiF~!Dy`>0eSdDsl8~c;?_sBV+(>0(5{0Pi>=+db=&%sG_#rG&0}-fnc`PAW`b8gxkloxcI2u%ln}v8HhjxA@_HJ-tB)r5;G{p-*DDM=e%N%$!Bi;agjGn=YbtX1Jx6F$%$O}Kj0^ngB^fQB}r zqX{M#bO-YsdI@qRMwD5N}dmlsCjSU9_)4$k0j2Qy71f$ zbG12rXqJeI6SvSp&wkX?yM`KQ?~ei7RZWK=qcdN%MB!m0EZ8+j>vlGm~&=%++e zsHotjt4^{f<93yp?1Z8cDMAr^41R}^z?Cot-#AnM_{jpQNq|3t1PbE>Ax2>g6l}33 zb*)3@65)5~)C&V@Mlazd$0f4k z66!c5sl$7dlEwo>{oy4lFPp{WhlcRaNz=UGY>#4R(tFbP@ZRKAzLOJ8@u)KaW#J3S zlc#qkm1rm`z0oKoftrafWm; z?%o(9MR>}lZCaNcpfdhl4hR8oMx7k+0vL@S$N@b7mGR&PbH*m{uCZ}GK=(gtqf5R! z0Z`48*&oOmW3D`AJJ%pC{uQJQ-Q84H0L;Ly9#MNl;1TqO=?@b@3ZJ=CAQ!cMPuxAz z@(fU)(1{HCFcB6|lLd&F{^#yT_ifxxZ`_X9&FEy3$p^i+8I>dhkY`8ftQ68)x6#z6 zmsFjx$(=jpHmT@ilL?viBlN;#?>ZCEBp(_v)YM)M*$U9^oe zvsbt?>}7_#!d~Jov)?jkGsc_WSmToOe!2Z}v~r8ikM|+1=q=CzWT+dtUN?AouJi`) z$d%t@Gz3_)6TXm0>s5oCG*>AFi*gb@mt-1-8<51Kx2=}}Il%#hQgj;so-%XhhU7xR z2Lg50JVbV5B6cp z5R-dIUW#f5t)W|ULj>#Ot+@*XbQYgZeU;idiYIRUa)vhX!$dYQC-L*-FOt7Z{ztMt z`Kx3@@~Pya8~JofHcV7nA~zVMe5qkgUEzO z|2%ij&QZ4ES_9W`Yv*X5cSj@O)4(;VWGH1j*LW*sBu|F2x9g;L5wi)sf;Vq}EykmY z-I6h7L=~Hm-xkouu?7)ykBoz+z-G^=hQK8EZIAGNbKi%5yYz0=im+I`60edT!3S}y zbTYnxLuB;XeYg?N_cbacJyL0|LW2DZexo|A_+G&d%KtQe@w1}YtM{cM%i9J&C^Azo zB<%ZIiZ)e^wIt9o_>T>&*k?(=(~d?--@t2*uGgO2hYr4t3~!@dRrIbZgAZ9^CKUWe z{YCoZK7NY+fH0MROaHzQ!YAwhCaCzG`h9|ue;!INUa!wY=6#@ii=qR>)wTdJs??gi z54}(Y1W{aM6Gi1ZxCl|FsH<93YQ0WI>x3W4glbLQG;*i$3Bfx-^$bQ&*Ol?sg!#ko?Ez7`VhZX819$6PaK~k zxbz{nuA5I3o|noM`et;}oOFf+F-n8C_F>j+jHe;^`-c=p+mJr;&6gk}mGCE||@5^Vv0A46ETZR~HIC+?uNk z1Pc7~`)v({&w%HiVl@jv=m3W=1>r~@QKy3NT0SN!wY*-iXYI;hlh~KD(@|#oW3kbq>E; zJbjkdN}p}zX2*3)*-UOuw}gF{iQ^^hQKyk#GyQS1nu|?OU}N*Bj;FA>IG(y&j{A$l z7T+yr$QILT%qE1EYpsbC!a?-IG(+uMhddU-B| z?CRWSw&pGR`lr8@t{h*yW=d%_S5sYc&U&$`xb?iH#L*(Q^tSZ1I9u+w^yB>U8Ti-A zmFPCNgPqB}jFy?$(CjczCmnrS&h7M2KP|@>szc^2Gc`$s-__}1rcO4DK_btM3##?! z(rn%h-}>t%S)o~BS>dR+8GX`XHu>Wx&xI7{&)hF_^^^2!Tt`fumg(k3lFBxx!!f1*67 zEPYR`Y?6w8O_VsfNhU_pdoAcevrXdsi_)ev?^eQu-!G0)wkd61=FNoiRM{A1ozg~` zS1Fa+()Thei@(aF_F1&HiCZdP=3Lf~rZzd_`njd*-Cm$H%XWj(=qY#< zc5xjkmw*Lmig$MVHf?vd`CiVXm!Dyh+nAy#qEh>s86qXh$5P@?8Vr{vhH`sVQ##Ux zkdBvyzz*yv3&C^B(Kb;=Ct8aA(3OiI1ClG}^{rpE8d^`a7PX$_xYp%ox=c4spS9#$ zi(5-tliNzqpKj$_EoTd=zd2jlTGm?LdctaK{jN2~TG85GRoQB4t!k~UI@7w>ve#m6 z#d}N}{!CCU5)*A-I{zfSoQbYkZ1KVb@&+;&4!|7j7l*F9bV0Ti4Q3yp=1n40w-Sgb z$4UT7jO8)?i<^Ni>a>C|=eZGRP6U`p^WS~&$0gGgFZpOR^x8@sRJCT6DC({v&=h}* z&PwV*r|xS~uNlx8J@j@RN9uV4x-UrmpjkJb)bbXcH>s~#=p$zQkE$7S5ty#5BEtTe zhEocLO^D+%+Y{JK(42P}V8MJ?p$jB+wgP-kPt`l>YgN2kHwj&$tl$5(g3*P*_MQdX&OQ+ffW&fu2|)?}?ty^$r1kGb?{QN~+Dfu3KCR}?^D~L@ zOp|iKHn(%R6gQVIoTI2a^mPYUO7a&n=pVZo17UM;UykJO;N^ z&zla9k>*Ss<#sz|GH%zZzp%S_JsSZ_MsmB+t~NaXyjq>ohPI#QUT4#}J?zWeYwS+$ zRdxq(jklj)+}YIxuyt*DU?H^gOg@xe+vw#iBko~tzkey4J-7$wAIbcW|wkv*kw#s7#phhstRRa&w&D;uS9s- z1$9~q1Q7tf=LEQjZXFw8^5G)8C3!!>u|zhk8R8u@9gzZAa1R*);=%MNHVOju zG3slC3WS5{k!+-A<5$r#?0s?bw3yg=tDl>I{5P%I;@G0V5KDHWS7=Ku}r=cXlQl~NQwo2+4PF{-SWWYM} z0}Y7;FKB*(VmXZ4LcNwXL4RNKDH8XqTlTGw>yF8j*_0$DbgCJ0HgLdcPP3GV;K$D8 zKiWzfE;VLkfLCESle|g{FnFWhv&Mq2b=}MaOl@WZiWeGM_OvbZYw@%sH zMsI0h#+2H^(5b~l(54Wv!o4jMwIC(**Db)LEE2LKhRyW#^I)&^Qt)Cni68^>%H_w% z=+g73y#(AJUEliX+1IcM1e-)sY~UkVDf4LH)%?)9E4zikLckg@+CjQ$!k}jg*<12h zwyAhs|8`c1rrPxq8Y201ZJ=EcZYym|7~2Yf1L9DI0i(H~5_Bknjbx+PXm%E(PLE(C z;P4~C;H$Y%2u?%usB2-5_g`~$6=dM5)?8f;hk{>d4x6y7>E6(b8>p45HqBcY6SFub z7GG;i+6ewlP8^#I>D%e|M^UOB{nd`2o`g==A$~pP@{MPUAn$gHULk_l!>59HonC$X zmLx|tWKbh_cfD$e-qp^Y&8o>hPn5iYZA5RF|I)r*I=Qw-lr>aOL`(XL8^6A#3Pe2} zJj(wW)#B?N{}uS69cC9~4#6G_TG>wTAI491rfZM%Kq92D2Oa4_3p&x4JqCrK;7*A$ zWDvQcb!-ttLhCzeV<(F5M5UfNr9JhkU$+?CM#*m~pL)Rs=cMeUsm|h?q8v=!gMp$3 zad~Z&F#fXh^3R4yh_z&0wBHc2+Oryfx5BvghSH*j9H3rnps}9opo+eq5mF*{zTDq8@#*GWokgv22Iz26xD9}foIqvv_dppK{=x7BKoe2tsq4u zXMtCnZ`lg&5?hHb;X_?dQ=<-irE8&jrh~lKNi4S|fM;E;TIh!)XD`}>$9F%wbd|#c z@3qG8TPjQ^Js<~j%8sW7k;CAZ(^eOw;R*yrM}azn{S5TQj(-YNqc=J`3h1}+N8M%c zHXM6*_P94h5}`mou%QP{HNSRul5ErEOFzWL0QlcC2KQmf9fklmOv;#H#-OZMjlkKqxhzX|H6!s+sZmr+96(m}vkgIFbtwNbJ%5OgpTn_7`%b_`{5I^0>1J?1`k5W24!aqx;s22vK zV6`X!NI#RT?FSOZol^Pn5>XB+1rK?O;jj?QU4k-ztF-x;d`XDw6-QrpF_0@|?T|TT zd(_4c<>~j>dyr2}|DFAvacS0RA?smN?vA+$(7PZN=xGD?o?zHJNT4fH>5H-aG#710q;E#KkXiIyz0=lA?y#au5Cu}n3 zc3-l}pC3kL4#hE0z-m!jGKaVukXJ~xTVAJZjNnal{2zVtv15b?t=Mjy%iXNjjh zO9YW6(&VtjG|v(z==puH!WXVwmLhsYK0&}Cki<$S+r@$`b=XZ2uo*gmPxghzJWDAg z@Bmx&Ko<6m9r;9Bj_Fyc}DZ-4@ZqGEn`LWn~ zXljP;a!Alqqp>|3Ri{ZzCZ0V)@E$>jr-=^xm|Ckc)U%R%2fj5{5_d_8^ zTbg;W_!uN=;Xpl!+F!;JwejeKA&@7WbU#$Pq^~X~rmV_lL*igvR-Im&CFEpX7f-=V z)HaxR4%PRq_?JJuxyClVmw}CF>GAH&<&@OX+2n1NL0W9m@yyxzam=FAPm)?Ya2={rMS(dVUAeDsDi0R_`__ ztT%gLqP44Mob-;(El#d=3*majt(!f9Z=w3Yxt`PX*8UuoBPO6;bsats`5@2zVi+IK zUS*8ZJJA7p*)4iN^vY4W7)$a1+i%%2zz#qH^ppO1l(i3^?~k2Am?td%@DNxw$gMKn zZy)psGBAVKXCQRp;=v3?!@J=d3tBvAJS=A$jGxNEZAabBfCw1@?&HV#DHIBd8u(`5 zn|8SHwt>mgP5AABJ=#@{;>IrU`*h?3E??!vyTRh}5=OmSmq+csNUt3RF}lv)WWOW2 zAu5Sh$U7QQ(gQjlQubHQLjLJZSKXDfYC#$YV(~^NjRxt|Zt~5=|8~V8xfQ+!uysRB zoH0+{b65^-rs%8~4CWRD?wCu(SwQMNO%QxK%Za1fr{apiY1DW3@sER3Vn9-zr-z8{ zOcc%k9DuGbgM#d4et_Q7XYl&%uY;nzUge5otT}_F*0%@o@L)8A0)@Vc({;5`d6Ygf zs{wo;kVNmC!e|#udiWJr7_M~9#0On7BT*gM|Afm|Bu>{L^JtSvM%UXJn<~%S#)x3o z)C|7vT0cInFIRqtDQdLblK3Dip8ud=-K5TLiy5C407_a*msVBzke%KGbCCC9V`HdN*QgA1SahVh0>W6`$aSjmW0%Ddj za)SlBZ3q>+Ouz5HDKofFpaXqqxF6de&JE5T{6B$cA_B3{4IvMX8Ho;_JbB?k!-OV( z!T&UOU4B#aDuiGZ|79efY80__bP}nij6OO4gdKcOcrSN?SkB;kj0V^m?iXZxC>?5c zgJgYh7dSDoReM5YQ3(ln*XUa50c;u#O}PW_44_g!+oI|HUw~3qzseD zVMaqiOqn>|rVy1}C3#n>prN=#THlh^7b=?}2By(6H?*yW8R!n4?Vhak#9s)?Q}_k< z^rWbEv)VDHPs^R=aSnP`pGa?Y)2Bx0gb_M;gq|`&C->4pc6zy!o;gaFkI=u|r~h9c zz28B<-c5)1f|}D4MLMdTPPfxlJ@oc=TCEGJgwr7rvZfK*Gy|l7jf5#wU YKAU;p-tusNJNZwAs)QH*@Uu|=3wJZezyJUM diff --git a/bin/mega65_pxlfont.rom b/bin/mega65_pxlfont.rom index 3f2626dd884af556fc5e997bd2deb7514e5735c7..a04ae20e0a3b8dceac0c5b35457def4a4baafda8 100644 GIT binary patch delta 8275 zcmY*e3tSUd)=wr3;h_>iG`_E(Jbb32F7;9ARwZ`F76eq#T?Z`|t$pmecKxs|>6THn z#X_&Gpsh_K0}ju`Y}Fu$Rk4KDc3Ko)waY^Utb~Dx2_WPU_CA(qVCooL>4{V%(=gw*`K6O$XUO2ooO1Q!mq}>pPm;}^O>=a z$%{dQ2`Ded=!B*tyGt)a1F<26e4*7P(zU7{ji;3oAE?<#R`AS1B67qSRcQZOqwnQH zQJES3p4d+MkkHD1PPz|B=KG(sdjuJGr4)(W=fE&3(63!gd8?q~z875FRsKi&LgCIR zG(Nt#URJuFdhkgzT7q}SZk(AHlkJZtt|QV+KxmyHgB8^*P{7Idf*!TtDgFje%ftP# z^W+0~=Gr-{Js+XJNl1v@z;t)+L616xHC&sph-()Xavi`%-#L)9R-h10V)O}uoI56@ zbA{;VSYwc+6yz(9amOOJ6&h{mXRKd4$-6oRRmT`)s2bO-4Np(m05UjfL6y}<1Jz3l z@+=oE=(2`LbC48vTA;F?(1MsXK$`tDGkSwi&3%HXSfj>pLGQ8e2ntzCbeJhVDmYRn zc9Nd425&c4>eI{a6^aj`Q71lDvwE2z%abYcWK zl1d~Ao1mdY4SvTKS3i8#^cs)O7EvZRiz)$pdnCPsg4GH zff`HSr$Kw5RMxFG7&AOTa1Qqie!73FOZ(~VF`(6Kg>8UlOS5RrX1-o}_70#2b*?Ku z48p)u-4J@p5D>Hm7%mpjwd9w>w3O~U@xiI)CBU7ilUT&X!UAft0D<3sXFr{nu$f8N zj561w<8ekWl)fGn#e*Wx3^5srq_rl&*rS)3PFZO?OIziVmsKJD1gNsW5HxX5!chGZ8cl_sH3{bVG?TxHH*=TyQ`{w%zsz0aFLB?nC<$k;e-m^hD6$+x zGw8()I$zL;gGTcV>ZV z{z#V#wCt1BO|aWTPsn;iu=<#2o+}XoxKjN7hEJZ)S+Bc~9wg|RO1F#NURm2k-3_3^ z9lA$E+e_j>`w??wB_Gk2`0mAj0-ah>{nxHL=+#8G?$CG~pBOZ2cMK|yLG>}{_C}=I zgzm)Qw{<_|C!^!9_nuj)X|7czOB%E8OCeB>b6 zF|;bqH~XDk<+8T(=Em+|`eui_2yC*t$t`S^nP!uUCfK8Y9BeT?fju98RN z37e9kd}mYm)W}%WGr;r@pvYLp^9j+y^e21JKsg37Q5>4&#}>DN$E$9z-G@`pcZz@!eegm3qGZR(yB1=lurIPd(qD zQlP}me8a7+L)i+nZ?jJR0Bv1|a`F1juW8&S+94Y@Qe;|(MiVO?CJ6l9*ar)Ohb>X{ zgA4B29OAiq*FXP$aj$7wNCbW!uatj^_v481>N{I8aEaVmnvXn*KBHcZF z4bM~Z%1*hQQ{oYa?^3OW__xDbsNfR(@~8Q;R_{tembVSQP^2ZDkK6UN9IZ1AQ!=0o zBZfOx?6Sn+DW8SO58&v})}$Zbg$}-r3~!@tCT5$-;6;|00fmsDuV#+#5+>;16(0LzLa6f64)lUj5s#?Dby<`H0BrUW`lFy6q zN0>Tgt!ZIVRRig*6@MTDDzvpz$V~OSGWpS`UCeK9vmlGXA7nrW@H0mOl_26a6VPjp z{A<)UP{%HA5lY&ftrcFvez}t<`QP!J+-341{95jG-}SqsQJJDsKlWCG`DpGrIsKd7 zf{vS$j{a3Xd6`Y{)BB+c7uvlG?K6SYX?9*_oo+uXLx*ttvFY+dc;x5v=_4jB`q;eU z^9JR(sxsp=y^N2}iKykZIT6IQHz8vgekT9uqT`*sQo2;2ER|8#DElT)>t?$u5G^kz zZB6zI)@O~&c_rrs&{4uKO`y2FD8B&9`H6p+U4jCed1Z~4q(G)Z=5RjJ7BdHU^ocph zBZ`^a&#$ts7Crct)_4}t%~qKdYz?ZPG6uUW;pr^;S1B1d#yv16VDeZpWU6G3x`M z^I`Qc2M1U^%!df)ylI&8et?xSze6}_SP0i| zrplrBu!I)k9R*Wo`nND=TKHL!9da&>pWPwj_Oj?3i;?0gSYZZwrovp~&j(sv_7nct zTo6S~HR9fa;Pk0R_QRGB^55Yn6y7V`SN3rQe~u_6Uy8LJw-@?cN<&vH)+li_iI3)> z(`U_TVP zdux3O))h_n*@;Dk>|gs!atg=PJu^d+}U+ zszQU+XP?QL_F*6+31~{Cxz1PcA(*-7TQDX+5SvRkQTQGnT{d;3;T}pa2WxI>LP^DV zS=mybNsR|VK?h0mgR)sz)iN;xO{mJ2v(raJ%UTT{BPeN9lO6@a_Uv85?nr%@0HG6*Iexp-{J3jCmC4SvqJ)=Th2H3FL1h$o+1g9A*_D;p$T4T42RSaemSKHjPO zn$#ycb){~8tBxo2+{d~vNZr@Od}1a9-K^^+^%aY*6Mt!%=Gj#BF7IE7yPL-Z5W}<; znhz;;{-oZg1UK7h`iJ^hx!}@`L&wU=#y_IT#+{z9as1Ay>64yfIh9K;VuDW^Jigxk zX>y&aPoqHh%W&nXa0;YuJM|*9tr|y||3pn{H0#U}9%Co8z;@QX;jr&P#0N;Q zo|*V8*jNM)W=0GTKXls>i@+6RSe_Palnuya&QNlh`G-s9&m{i0v?1eam%8j(bZ-hv1QWl zW1TIv!T?&l3kSk7Q;p!dt(dlaOwlFyGfToo|K*>^z`MgbWGP0PWL+aov1%m+alyp5 z*Kcv5>s>IL`LhK@^UM!tpoD!|n2W_AF%x_qo~4DMuw&y2ZVWijK(gB53cRW!I=-}= zCGIt{Lj%_41J-t%-@?t{UqL&KT+qH?cOwPWSMXciTtY}nJ_VltnuQPIw(!B+RsiHq zW1~!bs7?tswsFC@sbbz#P*$=%c8K3@S19;xE8pO@33@IBo*v3?N2)43@0?n#s6w01 z@vn0!{7&u_{xxnZzk}NXO2C`Xt@JK&3kDm*rRTy{|60s+R-sLeaPH=uK{$AG<{Z0i035_^YmpVv{v zh2ORWwR~^7YKpj5bnXY!k0#3*Wz*?1qUk5o&!+Fr)|-yDOlY}gYBgOqHJEOgoM&#D z-m<)9xn*KTScr7QyMqu~(9?=mxPOeEsLi$WiHpq$-WLQ>M{-V(6jaNApnGMiq;RJi`n$G}DNjm7-rCRYIv<9*O|m$~jHD}-?1MNDbjvRWvfqn9yz z?x9(g0HXnXyz$l9Q;knS`pQiJsZoJGY7u4?%*mgNZo152Pv?6a{3#mdVNKIS>UcB$ z9lmle&JW@_ngntRq;F;38^V8eOqvPd96k{s==AEm zTe3`5zd?;$9d)XHW?Sn>mjeEY(bsbg=z#f+);03+O`VdWzG4j8+f&f+^(~b@>bx(Y zoS#q=zIOi){%JNCeK@V3$#b%$vb(AQ7Ef+VNgvk+d5W4&G_DOj(}paa2BoOvPe=;n z)6M6<$mN4AuW4gS+fY;++T2RUY;LVn-PvGpkwv`fM5ji<__Q%pTft3<2G^Hl%deM~ zUkDRNU9w;L$q)*`iK3nH?MHWQ8TBArZe(kHQGR_UaIe%eSl+JL_?eThK=UN#WmoDj zanQ-1u_vj}cSF!#DH(6WWxK*@tVgeR7_R}#AQ`U;ESHa>9~&>D>D|U^^ldv=Mv8LY zB6{)PaAo{Ot{gqaAGI%{=1KT+`+W6*F7iSpv)q<}K5H+i#a_rQcB8lPsE(z}Qo7vg zz0xrKmI^a*edyaq=#mXj3V__>31K<2)(N1ydbRz(#5Nh8qojutS}OSaREW$oy|n|pcSpm zo&mItlm?$V)gU`tb~k2#oRDUK<<4YO?mNeFXEQAODp)?xo}yqjb%PR3KUonAu~5z> zW?sJ#HCuR|ld&={l^TU2T=|8Ewgt(ysm!scjBvEVOu6hX(+YI+eb#j=4kW9mVAnpfJ&oy~tabXPADxA&d>vLfY$me79xm(8*NXB~47{u^7l- zgwl^Mw|W`9$%~vvBy$bWHG>$GFF=$(p@K}FM1xJjeowHslf3qz#5T9Z%~UDtL`N7{ zTo|aBxz#z7zamnREF`bANszZnOI5RBF);v@e^DSBUf0XK;M$W-T{!`Vv#o6cis;hv z`Qd&=Rl#mT(iR*hwogm=K=nPr}mrBUvb5wXh9o z{rn9`uz&l=@;YT@MNeY8U-r<$iiVrUX@e$+6W?_Z4fL9GpIEk1644Z1Hqxr7*O4}t zM??i6eeQf}YKwe?L}F{3-RFfHhS>iuvCh3j09j%d4NE-dUg9V-uLoB6()q`z{Duo^ z<4DUbnaT_7Tcgmw%<4l~c)BqJ9)>FLv7R7J7DutL0q`xiX%y@l_ANF+PJBxn@h#26 ztUE&Tune6&>hy9am#+pxA5J4mFe0hLJxpl&53t-kHOq{bWN5(<;4@E9a7S4o8qgxd zLBWD5@^d9srX`W8ISUtCw)29FdD)(yd%*`#nC0Zp<|R^mMc!75x8%J})n??vny}d( z#SArTa2=BU!tN;@Ey4qT?E;vDE4jmZ7pm?g^uHgVBUrFMJ8zZS!xPBx`B|gIefdmf zJG+!p%E(I-eCz~A*krXL$x)k8tCwepnHkrl6EG6BJF?HBx^5WCs2^oq-gjxIM!{i{qvkJX zT!ek|6;`=@%z#yC_ZvW`ZTNjVv)ZNQ4@(}AXm498BpaP9?9EhlY5eL`*DkmuFXWyt1q)GJ4O=SzCEQQ1xYhSq^2k&eoVu49QGiU1*1ii+t7Y;S`nuu@Fr?T*M>Je9xs0zzx{Y;dP-M8Lp$8(OlTjU zqw)}3u&N+qM~(DVDwP!V`1Iq`t?&n5J2)GB``|j&rT?T;e&c?FFCr-qxrgNLzsB9< zz9q<)dck#Tw!!MS0nmhkyd(&3aRnZk^i?I#$`SweFZG9E@$J-V;gPq^E1v~f# z$dEUH1bl;4Eh^B1_WPs-@>~eDf263*s8=<^awGebQD{V~VH2|1Ql)WP1Er^+ovMY{IMpf_X+tXX7-WZ# z*sdBhctZU^BxZ?k+Ykpnl_d4mlsl;pvK*wp&H3rS$^4B2)5hj@F>T$#X|7jjm>EuC|xV5HBq{|q@Ew8 zyH4r_QM#*pzy{#DLDjy)eyRv=nM1hPj&Q{j|DX+BfZ)T#Tcu_Nip;%!bkb>jxaX$A z;5v#1?8vhV+n&q`EOY4Pdo2H;^4_Luzdt~UkFH$Vz+%l{cp&!$d(betafCSHB!7** zDS6~V?1|qP%%Qv;SUxn4R1=0K&#SP(l@!^-A0-Yo@HbWqVtICnik*}WHMxum=KTjC ziIFqy9IF^Vem>qdv|4V(#-X4@8@z}?$matg9|StJ3|vY47peh+ACD!||yPF(re{&ySd@9!BV5o^vpf zJxo#uvr=LV62sY;pF5fF0G+O>(}HX}!xTGbDt69RF!lGCN{R7l)&F9Uv7gQu)7AWB SPpfI#uH`1pE5G|CQ~wJH`FL~y delta 8411 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 YKAU;p-tusNJNZwAs)QH*@Uu|=3wJZezyJUM diff --git a/src/dos_m65/4010.dos_datestr.s b/src/dos_m65/4010.dos_datestr.s new file mode 100644 index 00000000..ec666df1 --- /dev/null +++ b/src/dos_m65/4010.dos_datestr.s @@ -0,0 +1,7 @@ + +; A replacement for the original 'VYYMMDD' version string + +!pet "o" ; to mark this is Open ROMs +!pet "xxxxxx" ; date, in YYMMDD format +!pet "xx" ; two most significand digits of the year +!pet " " ; reserved for future use diff --git a/src/dos_m65/4000.dos_vectable.s b/src/dos_m65/4020.dos_vectable.s similarity index 100% rename from src/dos_m65/4000.dos_vectable.s rename to src/dos_m65/4020.dos_vectable.s diff --git a/src/kernal/iec_fast/m65dos_bridge.s b/src/kernal/iec_fast/m65dos_bridge.s index 0c39b5b2..f0d2b00b 100644 --- a/src/kernal/iec_fast/m65dos_bridge.s +++ b/src/kernal/iec_fast/m65dos_bridge.s @@ -6,17 +6,17 @@ ; -!addr VDOS_INIT = $4000 + 0 * 2 -!addr VDOS_CHKUNIT = $4000 + 1 * 2 -!addr VDOS_SETUNIT = $4000 + 2 * 2 -!addr VDOS_ACPTR = $4000 + 3 * 2 -!addr VDOS_CIOUT = $4000 + 4 * 2 -!addr VDOS_LISTEN = $4000 + 5 * 2 -!addr VDOS_SECOND = $4000 + 6 * 2 -!addr VDOS_TALK = $4000 + 7 * 2 -!addr VDOS_TKSA = $4000 + 8 * 2 -!addr VDOS_UNTLK = $4000 + 9 * 2 -!addr VDOS_UNLSN = $4000 + 10 * 2 +!addr VDOS_INIT = $4020 + 0 * 2 +!addr VDOS_CHKUNIT = $4020 + 1 * 2 +!addr VDOS_SETUNIT = $4020 + 2 * 2 +!addr VDOS_ACPTR = $4020 + 3 * 2 +!addr VDOS_CIOUT = $4020 + 4 * 2 +!addr VDOS_LISTEN = $4020 + 5 * 2 +!addr VDOS_SECOND = $4020 + 6 * 2 +!addr VDOS_TALK = $4020 + 7 * 2 +!addr VDOS_TKSA = $4020 + 8 * 2 +!addr VDOS_UNTLK = $4020 + 9 * 2 +!addr VDOS_UNLSN = $4020 + 10 * 2 m65dos_init: diff --git a/tools/release.cc b/tools/release.cc index 573d0dba..425fb7c5 100644 --- a/tools/release.cc +++ b/tools/release.cc @@ -22,6 +22,7 @@ typedef struct size_t fileSize; size_t signatureOffset1; // offset to 'OR' string size_t signatureOffset2; // offset to 'OR' string + size_t dosDateOffset; // offset to date of internal DOS size_t idBasicOffset; // offset to BASIC identification string size_t idKernalOffset; // offset to KERNAL identification byte @@ -34,6 +35,7 @@ const std::vector ROM_DEFINITIONS = 8192, // file size 0x1F52, // signature offset 1 0, // signature offset 2 + 0, // DOS date offset 0x0007, // BASIC ID offset 0 // KERNAL ID offset }, @@ -43,6 +45,7 @@ const std::vector ROM_DEFINITIONS = 8192, // file size 0x04B9, // signature offset 1 0, // signature offset 2 + 0, // DOS date offset 0, // BASIC ID offset 0x1F80 // KERNAL ID offset }, @@ -52,6 +55,7 @@ const std::vector ROM_DEFINITIONS = 128 * 1024, // file size 0xBF52, // signature offset 1 0xE4B9, // signature offset 2 + 0x10, // DOS date offset 0xA007, // BASIC ID offset 0xFF80 // KERNAL ID offset }, @@ -64,6 +68,7 @@ const std::vector STR_OR = { 0x4F, 0x52 }; const std::vector STR_SNAPSHOT = { 0x28, 0x44, 0x45, 0x56, 0x45, 0x4C, 0x20, 0x53, 0x4E, 0x41, 0x50, 0x53, 0x48, 0x4F, 0x54, 0x29, 0x00 }; +const std::vector STR_DOSDATE = { 0x4F, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58 }; const std::string STR_DEV = "DEV."; @@ -78,6 +83,7 @@ std::list CMD_fileList; std::string ENV_developerId; std::string ENV_dateString; +std::string ENV_dateStringExt; // // Common helper functions @@ -100,7 +106,7 @@ public: ROMFile(const std::string &baseFileName); - void embedRevisionStr(const std::string &newRevisionStr); + void embedRevisionStr(const std::string &newRevisionStr, const std::string &newRevisionStrDOS); void save(); const ROMTypeDescriptionEntry *descPtr; @@ -194,17 +200,20 @@ void getDate() time_t t = time(NULL); struct tm tm = *localtime(&t); - const std::string year = std::to_string(tm.tm_year % 100); - const std::string month = std::to_string(tm.tm_mon + 1); - const std::string day = std::to_string(tm.tm_mday); + const std::string year = std::to_string(tm.tm_year % 100); + const std::string yearExt = std::to_string((tm.tm_year + 1900) / 100); + const std::string month = std::to_string(tm.tm_mon + 1); + const std::string day = std::to_string(tm.tm_mday); - const std::string zero = "0"; + const std::string zero = "0"; - ENV_dateString = (year.size() == 2 ? year : zero + year) + - (month.size() == 2 ? month : zero + month) + - (day.size() == 2 ? day : zero + day); + ENV_dateString = (year.size() == 2 ? year : zero + year) + + (month.size() == 2 ? month : zero + month) + + (day.size() == 2 ? day : zero + day); - if (ENV_dateString.size() != 6) ERROR("could not retrieve date"); + ENV_dateStringExt = (yearExt.size() == 2 ? yearExt : zero + yearExt); + + if (ENV_dateString.size() != 6 || ENV_dateStringExt.size() != 2) ERROR("could not retrieve date"); } void printBanner() @@ -267,11 +276,12 @@ void saveFiles() // Create a new revision string - const std::string newRevStr = STR_DEV + ENV_dateString + "." + ENV_developerId + "." + std::to_string(relId); + const std::string newRevStr = STR_DEV + ENV_dateString + "." + ENV_developerId + "." + std::to_string(relId); + const std::string newRevStrDOS = ENV_dateString + ENV_dateStringExt; for (auto &file : GLOBAL_ROMFiles) { - file.embedRevisionStr(newRevStr); + file.embedRevisionStr(newRevStr, newRevStrDOS); } std::cout << "Files for release '" << newRevStr << "':\n\n"; @@ -404,6 +414,21 @@ void ROMFile::recognizeSrcFile() return true; }; + auto checkDosDate = [this](size_t dosDateOffset) -> bool + { + if (dosDateOffset == 0) + { + return true; + } + + if (memcmp(&srcFileContent[dosDateOffset], STR_DOSDATE.data(), STR_DOSDATE.size()) != 0) + { + return false; + } + + return true; + }; + for (auto &SPEC : ROM_DEFINITIONS) { if (srcFileContent.size() != SPEC.fileSize) continue; @@ -419,6 +444,11 @@ void ROMFile::recognizeSrcFile() continue; } + if (!checkDosDate(SPEC.dosDateOffset)) + { + continue; + } + if (!checkSignature(SPEC.signatureOffset1) || !checkSignature(SPEC.signatureOffset2)) { continue; @@ -565,9 +595,9 @@ void ROMFile::analyzeContent() oldDailyRelId = dstFileContent[idx + devIdLen + 2] - '0'; } -void ROMFile::embedRevisionStr(const std::string &newRevisionStr) +void ROMFile::embedRevisionStr(const std::string &newRevisionStr, const std::string &newRevisionStrDOS) { - std::string revStr = newRevisionStr; + std::string revStr = newRevisionStr; while (revStr.length() < 16) revStr = revStr + '\0'; @@ -582,6 +612,13 @@ void ROMFile::embedRevisionStr(const std::string &newRevisionStr) memcpy(&srcFileContent[descPtr->signatureOffset2 + 3], revStr.data(), revStr.size()); } + + if (descPtr->dosDateOffset != 0) + { + memcpy(&srcFileContent[descPtr->dosDateOffset + 1], + newRevisionStrDOS.data(), newRevisionStrDOS.size()); + } + } void ROMFile::save()