From 8aa5ff099ca708e9a39b921b8b9adcabcd699d9e Mon Sep 17 00:00:00 2001 From: Waverider <33787286+liaminventions@users.noreply.github.com> Date: Mon, 19 Dec 2022 13:50:39 -0500 Subject: [PATCH 01/12] Update about.cpp --- src/gui/about.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/about.cpp b/src/gui/about.cpp index b840d7c7d..e685b50a1 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -71,6 +71,7 @@ const char* aboutLine[]={ "DeMOSic", "DevEd", "Dippy", + "dumbut", "FΛDE", "Forte", "Fragmare", From 920b8d6086156c3d12d46a38ae75eebaa56642df Mon Sep 17 00:00:00 2001 From: Waverider <33787286+liaminventions@users.noreply.github.com> Date: Mon, 19 Dec 2022 14:05:33 -0500 Subject: [PATCH 02/12] hopefully this is my last demo song --- demos/specs2/object.fur | Bin 0 -> 10991 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/specs2/object.fur diff --git a/demos/specs2/object.fur b/demos/specs2/object.fur new file mode 100644 index 0000000000000000000000000000000000000000..6ae76eea097b85491e2d168b24e0e3b7b3e2e509 GIT binary patch literal 10991 zcmY+pbx<9=6Zea|ySqCShvF2sV#T4jI}|-gad&rjclYA%c5rvs^YXiM=e^JUCo`EO zyPJHzyO~M;WL^-%ieN3@+V=clWeCR@WC^HyLRe9$ER~TEl|)bc9ThKO964N5TroRH zWyMs7=%#Z1Te3GeKezPW&0WXt>I$58MCDRZ@nE9c#6&+Mjpu4|;$pp}qdFTsug_N% zBGWABSqciel?4in*T0_AA+_WQ@2|K65rm=J_Es-OZZfwnIFzR&hy-S_WQ#vO`qB_S zzhY=zAwgUW@?G4F51FWR?E5*aA>L0Tv_d;@QFlK4^)T?~+4T7=NU%3y2$5AHKhaCw z7)7x6QTp;4T(G(UFbg3Vzh@<|Uua;xlVo7Q!H^DC=wQOE&?21(ev;de4rV-HEl&`! zo?w1rihV08VCPC;Gv}OOS<_C=P9%OeDPXA{*nZPBkhQNkU>R3nwLI{Csc&E#vM@kP z1Tg3_u-p@{l`e=}OB}E)CvZGvFuxisKYXf@2ymbPHCRR~`9&X@gEp9d#&0-5_7IV7 zY$!AVxRs?KkpvjD<6|grR$RD9YZU+9CA441DE{gfp~O%QN`K=;8$r>a z;W+z2*PJ!2i&J|@XO(La7~DggCgr}8sJ?Loa`M8d}Lu@ahM+d^UEc<%=e?87k`C?dSRv;`VI;4PWz^irj`Bx4~GaJ z4u^^a&%%s{nSY9X$YbrM+&kl^MG1)uWy(~z73)C!S$w}lF zNh)@p@q?P%GPtg~Pt4>lQ+bf|bUr(LZT#DPn8;$cbD35jn1m%|%N< zs+KSfoR@81!h5Q~U4W)eLE5O%SI&Wy>xErG&C*o(NGS8KbG4-N$&O(W^7gBG@Sl$b z>!{@HeU*BClak<-lz4Uqr9MhBL5Os(jAmx69>0Miyk0( z`Yi2<%n!cMI3W*tN z5*jAJi0EOC8cN7|&+O0am*;>>DNuP`#z=%V^;t?~;C%u<=Nt@E9z0V!qCZ#SntW@s%Dm$_ry6}WpgZ`e;9=x)`Cc&E8`YOxFA41l{f4LI=uPfAlO+qsS7_r~w zAa8qtwbwJDTHt*^v=ImgT;y8J`R>wfK1M408>Z(d6R)#iu1hP3t z1rgH#+C&`p&l&NPu{mV|;M$g@889)823;mk_Hy~Rsp}9t{g67~LCYjA$&bO2@_aKr z@Q{e}P-M~>QcBkq?HvOa6o8RcCMsZg$JpjPZjYToQIpQksS0U)HmCe5NUG=kDS+O_ z>vN3$qGl<9l17YXgE5O|A!#h2>?A9DcaN2Sqv=ep-qb6`3-pcfDmT~9iL$|~yhkAJo23R@x8^t@k;y-86{>ebD=qo?uHJm|h0W`~*kY!egf0m% za&Swx8_}^aaDevhG4!GYxw66f78NYz>a1gysInx`8c#VB(EHNL5717gecBnmb)PSY zCJA3SK&Jm64pdS5xjbt;GRNmYD6Y4 z6}qZli%I`~i%qP3t~sgxeHLv6p&+E0^N)0hP#Z0gB%(IdSVDYgq?IN{z52wLpJ_Mo zGPS_rq0pi16G`*YEnxDip>;7?j;rvidY5vG>T^A~6vO=Aw7$-3UkWi47kfCIQ?3f1 zQ`{j}>?7X+r$Mi(Xt%AzKV9%pUsyEHlhgoDA|BRY{pjIqE8eBXowf$X>sem}uD%ja z9kP}xBz=L%{4a>a>WA6oSh|ZU--!GBUc-`6U!&pUGe|5@vG`#XD+su;KqLg$ycG^z6KA^?OSX6le&HaSS&eIFAl3^ zf$VEfMtn~(m-^Sf^!~fAzLq6eb@2duL(6Mq1f*;nw6TvpPU;2L3C`^@XiI;FGR@NP z!o&1(t13x|&5@j@1n#WgK6g?%|I^e*(tpF~{i;X{v3_2vA5+YLOW_hQz#{0g*s%fE zVo1le=`9%Nr3+ zZoJq(K38wmolJz<2Rb&fDc?C(y16wKy1R^MqhKAT-ss-ciGc zXgt+X<3U&TWwl1oa-LCxhtysnSyMqTnf^a@y0hxRQEl6eG6V(GS^_!qe2HNP)5}tV zq3o0S)CPr>Lf`Z=*(u~WrCA1ZO3`4aqdrG&q-Sl*-Fj}V;-vh?_p_)bKHFk4&tA$j zt~tuK{79B*4dLi^+V(v+pMxT1^E6B?711{z_o(mfigl*@r_?8T9bN7%v^vpNu3d|X zheyKNhp{Hcrro+CWL?-1Cc=lCqq*50g;1L@?FlYjqX$BDgi4>77cRMHm-;FO=1u22 zL|ec+^@O7*y{q=-ldo-@N8;|Q}8RT@C_q$5#NaYKIEzZU>$)4PT8fU|2um44V^0i#xsU?EUH z`6FUSX@KN2-Jhcw|B9H@a~Zc>8*UZ z6H|=rS~8Z4fEwv=HD7{n#$B^(T49wBk(}7bcjRN#H!F$u#Bxn(-+Wk0j3AuO7QWQb}^Nm^2zu+ZFk-wpGo-Vw1ZLxR%jh`CDRaMfKg2x?mZ2y^LKY1 zLdx?IZwA8Akl9-z2ji~JNLtk)E}MxsHsk#^LG5wpVQ?@5c-nino#X4-_(tvoIIZKm z!Qg0T=RY>*cnw)!MTOaf46^|NgVhz%ibmK5A@yY~^X<&2eWFv&DTx zuRAvs-^F`*X9dzchDzUc`g!iOK~YJHH7i@tda1E#&s$Jz?b4#L-wMVNk;vS^Dut|XtcXG6kp)u^_A#C zeVePZ&*N@dS2jz@Xd~pdT9M%@W8O2QmXAlmK$ZkL=zC(SO_p?Oi^m-6?d)rfD=-Mo(z7nb@QF7|fs`PNx1 zG((mA#k}vlR)+F{&puie)c#fcp56C8K#-x;WnsRGf?#yB&Y6wbfZ_UaVgSo(bB&!4 zAeJCwj=Jr#Yt}uNkeEeaP)NYYW8dYzTeWT3SKb-ImRL_<9cer*RlxK-u^LkV$^E!t z+@~`kL|xT|7eC?baqL5Dn|3Qhrc^UUe>&e&IqHizGVnsHT*q4{)n ztn4a=GQ{_F?rOG##MqaBx667v`5Wl@yuX>gE9PGhdC#pO+=lG; zXEN$K;Nv-AK=b0XeB;uz|Lxx^9ekHK!;`3oEJCI<7}$|?PW%9WH#Hr zXid)A=f3ywA#sA-c@lO$G8wB2 zlv*Z66>0!k1->b9Ofh!ZVo#d6q+J|*-`!?s9C0H#;BwLE@yJSVI$twPY{Rf&K?1yt z7^f8C@=O`%J4Op;IliyN`B~f_N2>DSLShgIO8r~Ma4+ewE$}K3e~rE;nm4-d-%)|o zczl1^vrlJp?Z)z{NKNB8dASWKyP4k$pL+XJ2nnXo+jTZw!=8_^z-H<@-FI{0&MCW} z-`*7IKeUlI59jR@Gp38kE8YZLn(S1M3NX3lt{e6rDxXW*+;z5folaiy-v=v?OT{}- zu_c9txj;@ih4yo_v0g(v(O!C*u87z2c#&z(?(q3J+ zUY(pqnj2Zp3!^eppZr*E4r4nJBhAAk?d%UKMs8658W7ywYy~<-@TWV(m%Ntm^acJT zjyzl%k>*&gP3488(XQxUyT87N6xh4Bo&PcWSH~WbfI7i@Ox$&nxOZ?9){*TY4U6$~ z%4vMKzbt-lX+6(ayE;C(gvuzAFq)rn^7Rl3-x zglfQli2XL{x}Rqo9FQ+DKorags_arw@`@pWOhFnWaVQ2{Wt$6}TOAy6&O8#$W=4;8 zzq;uE^xX*l<*+M}IGyJiA}sW(F29guBqNZWhC7s7T9t8^&E3y}-<2f@zyp3a^bgUr zZ$v!pZVF2Y4Dmp}*PLBT@fh8=-MuwnPl%S3>QnKT`l;mB3bq}t(4A8kmrkeq%e;Qv zvjsCNftB!~D$!1L&@ zvCZe={h&vgna6L_c&fIoVVd;~H+O`yn_73PoE*>Ple+HtKTpExl6>8@(Nt4&t9;p( z)lb?Rtqw+(^5TcFaRT5ZNn6$l-s)tf`Jd_W%?x+G zS(fsqm~qz-vT=MoMW3Wio`?R;2cCBQ`tU6DZ(J}@wl4JV!_6J~WvC4~swdA#)(ei_ z^DwqHYwNDf=LqdMZWzs|HhZh*b^~E8spN4wrmTr}X6}2Kljf@*dZ6Zc=9HqzOYWYPjgD1}6nw?1GvUU~ z-)>ksxyO1~@eiwaGW2gGOl@z1>;g9ccXy%El-ucVZxh4N+saG}O23xtdp@Qg<_WYo zHQH_LA-L+SGUw>(g?{(+?OKCFK*z_w3*ie*m-^2NtxYR{dbyR*jjI<-$^RZYM z?$pkH8e7Zm{#X%dODwdILP?yZ{pjF)nFoC*PF%azQhY5&GM$R($64Sv<+fs!<>YC2 z8S<6yLV3s{NacwY5UlnZz3jxMUX?cyw@p=;3-Y*~@MXmn7ETW?d?~*0qLFKvk{-R( z7a2#u!@ox}pxd%!pDB*`*l+hb)#7KWPBAcVCbscejKtEF5L>m||0^cwZgn`ELOY+3 z-Q$^^MFP65mzj7f2W z=FC{p&8=wzXj->PF1ykl~L(mMJUZ2F$&$mHzd=4+=d zsS zHr&ESv&(ZsPMwnJtG13jMx>b{C=BKtLi-4o4Pw*p{Tp^|$j&^6mt$wDY=y_AHr!l_ zJBY*No7YJGEh{7EVIILlSmPwg&P;~R8l9ng!nh|8XhDfCDSFJ_sif&o*40XvS8aE9 z7`H7rTS>3+8uI*vh*e@bXaF^8|l(=)ee@N9X&1{E$zoa~-mBmtxXEvjq6rA9f`^5U7vj_u( z5rMCU3*EcEuvnVyBnLdd*W4A{ejwoBGDKXCW9`!&5}ZM9imU-KTR(4pYv0zaiZ@6% zkWwoQe*ERVVNOSR(6}^$QLVl``RS-q(60ymhMrr4h@N~#BSA4d&-x|6OdJ@qz zXtEGAh7%icQWZ`+2IBx&faJlf#JI$sM7zReMH>lSf-8dZ7nb;hb=5dzzfr694mhVg z0p`;Nl?4q%WEKsW@*D^&Z*u_ZHAP8~jPajgz!|YZ-NUcKHN&POG!XCLi2#xB5D%IR zX;Nx&-i48|ON`o@yd`Yy*A4mfa~7)(_2{-G4nNyPZP9hkA+}_Ij5cKHjOk?U6rB{Q ziV{Yev3oODV_f0eCnYAioh>%eSjjjz$gyKZOv`WZ4?GR=9~ex2A2Vjpj{Uk8X@H-ydLX|TvD?Tq|$Mulo_lCs!7I*qk-)fRd8&a2cfbYtP8>VoPtqO@@b zso!pbfKqua79AE@(iB!yo#OX{fwPj=5NM;HQzptrCc0&RHnEfNuN|z`X|NFl# zk(DKashvubrfUs&t+2MD!M~Rsto_@rYh$st&>t~TFoA<&=X6e}V`>;SJcpX)$TI)F zN_J7+Tuvc{Rwk3^rASqQ4kJljPXM_C3K+vyV%3f9* za7@vbLW212+md?Ydd}59ZIG*e1mZcrJ6Fud?8$LWU>SM^&`9B@;QsdO_UZOr4eILt zg(mmPI~p54hxj3TLB=ym`mcCY&}66HdzJl#FFyB(UCgb<31YCHaaOmI-H4HwLgcSj zfI~INdxHp3GCxnZNT4GCeTH^a{1#$0g+qAtiG%UQ$Ae%s@-xVCYMA~=%r#b68P8sh z6Dt!Vw?8F7DiZ9<1z-A#sD=TeTPkY#=otM1$) z7QrVtQ>3Am^W9wR2Us6T0GZ7-mJ7R>s6SBXEeztfohqs{?yaA9kavcz7zqWS=y4W$ z0xudwc8s)vmF4f_4-mt`*o0z+W`~maR|jcj5)(;-zscH>v@iRl1o55lri3Gx|ERZgg!lDyxJ>*gBQMB0*zQT}uzHh<%Hq$$@ zlNr|h!1-U;!qGkSaMos(ONiTm+pz=_(G$5o`ei_H0HlP_C&U}3ZJpsMOf>zkz=;3mC6Vd;Oo~js6-AcUQs4gF2YYp~C?*0e^Olf0J!Nbp%57 zvi8bTS3IY@r0a_hB^XP?&ZT9_945S#^&BTe%I}nIAR**cOM?-Fx(?OsxWW_eVqJ#1 z51$smJK+5dc(7rG9@|&ZP(urgqjw7O7Sxi^&t;i?k;i?6HATPn=b>Dl`EzdHNm=(d zlrZvI%y zhWJtf3T+P_T8IF3P*9n#6U7Sdv7Qo(J2KwtpXE&WL?Ys-C6)YU9)>0LUZ0&ty&=&% z?Fb0wk#H*@RmNMa_E}mG>@4cAkC9BEHj213mW}E_WRjYBl&K9LUjm^lWWiXw6mRNM z4Iz*I+KvicVXzrk)%v*y&nJXO8q*{-50pgfi|T=G@pYmnv_i3*dT1d#ip5bQc!+OS zmp3U$bW?^SiYm;FskQw>NKx7fQrYL6@sobXVBba~%i z#BZ=00)%9^idf=wMiUCDoBRnB+|4_&8dj>tN^-%^gCa%W46&Nggd^=oLiR%Hq%0tA zQ3ZqMLD+6p6p32WR|Ti4C8Lx3=yQ?U(;hkc6NZv>C7_gEe3AfpiSKOC%OJE709!Y# zoJb8t2GB7UZm@Qn&Wvs6-maX)H9X-H%2ND8)aM7P$uI-Os)gN0Ti;%6*)f~ld)yza zPh24|5Nt~M zz_fq5E)ZtXtb5P)!(O|DwR^`s|Bf7_==5F$1oU<$y~XTvsTRB$E$UL7-?oG2^(X>k?%>hmd)YlNqv4@;u1WiTQ;wO#&sq zzSQ_$@i2B5hf#egaAT)A6x$R0pO#5-6aHi3r6#GDXveN?Sj>ycr#-K9Kp zkk#Wu(|6}2L%uX&c8VZzh1^#a-v#n=%8yK;sdLRtlY~SLLuek6i5b{q3MS-l0}-`R zc)_mXU9pd~eD`V|nVaP+eH;0N^8nRuT@bw*=VH`Up>bM4IHFBBh6qY6;_ry!T)A3v zU6A*=d8DN9VZIb1o_~De+iFxe^91%<+?H6>-hPfOamnip^u79FxsewUNwmGl=DDF)kV-*-7$t)ZB4A& zL23|sQcTmZruB1m1yt+Z$i9Y97vd~Z>4f=K^_$o^zIjIjXi*J9Vn`+s6Q6)QMBxF+ znu?cVZXjAl;pA7;G1(!T|K9$cw(;utgX;R5gW3z_ThXo#O?Y!IAn%9M9j=64p|=Hi z!Y~yhhZeX6%ERG#53y{%bsbSONX`cT5vl3N83md*>U+g|a#qQ6z^WYL2`TUNfhe@9 zW@%j`UqYXtrnHvz3=RPts#JR(*c<%#-fM}mfnkgayH(h~ybQyNTSRV&y4Y12<9q(< z9$c=Fb{U_ss%?tPWkO~CfXf-_72K1M-4)Nu*fS8)8&O9D1zog>_)(wdfiAb-9RM&V zYsGb-;PKN)O^_?i%>?g9H5x+(1gZsvIVeyWz8Riz_f>f4(5OX)K&97m#6KH!fF-Y<}@P3sSk?FTx^$>)_)4Z?Wj5*v-%hj%QcwIN^Gdh_PbNLXD)} zRhj+KKjqDQi;ETztmwG>(x->A(b~C;i_sdQ$Etf%B1rQ>S+#N3!{c;8CN?;3B$FZ> zz>FEUTIrK<6b*U9rMZ`dDW; zc(A`~1{wd@mFo<2h48;Uz*saY;s~VUgWdYrVIbp=#Ps@1gO)GbjCk%rr` zYQknqnG6)1t*{T$TWMJ33v^Yv#SaoKX8gg6`*6KBHA~g?wY+5bJQ^*3KqTohY+xV( zqRtpJ$8Cyz<4=(vCid(@Q}88LuV`FNO%aj7Ntfxu7Z%7C5SwXWR5Bd5$hN-eo1sx- z8iq%Nj%*`GJ4J_p*)I+M^4Z4HTbSz^!NS&e{85LWX{JYn3lUX2Do?%NZr z#wTa6>qxdiP6n3SN^wwh13YSJinB8>yqMgBIWNk zGu8mp8CQPYo)xTX?-(f%vwjP$pN1`CRPQN!)}tW-DeaiT^j&fMFBERL2W$y-&3g(; zy$8YwMfK-(A*{#dlZ^1}ihk-JyNI{~$1SwNdDbcLEL`xuDPbd^`9Eo*$2}M2-7Anl zXJwDJ(>c{B9>}B=O!db_g$9PsG?IIdG>^3L`Lcd8w6Eien0N&?DVV7)H1xr!IHtfK zzyWhT_kfNhpxiHfK=-sinIi^-e_xw33!k%HnK5EV6c9$jTg%8$+j~D@oMr<>x-zMkOc`S9e$51=spwc*q1T&@2a-oYDd2%L`cCsGDj3hH2>d7Mnko! z$YL_EqOrGktN4ifrCpHv#)&V*(ShS?}Vz;||sY0@_8Q z1aJYcjow~=88N{l=58$so-L3&0qoUw+pv{0`H&3EBdtG0*?ktRanxGPJS00A_|;>c zCfB^cO!-!bN_fS{L2jOfRx;IsrSKjYERJa z_J0rntuZ4W8w(DE4lu`y-4kRCUVj_+kD^NBot&@DAi`Uv)wB#Iohrk*e_`8l9+b&8 z-`X-<=_CoN@2u5_iJ0>KR6M*D7O*a{LryAbKGEo?ktpbbQZuMFLQA^fSlp7?L(cb1 z0};X)F?Ie7EIn6GZgQWK-z2-IKSIvu_~>ka6Yazd`~q3C_!SMDAAgs7-WSVlTzwm~ zQY%z_xCNQAxM#tfqdQQZcbYg|8>*_4Zqfd59$aW&2afd6HqyP1-eHY;O*_E4SS4RC z=CpKq$N=}_Nyx~aujU0g>`4@4dk0wG18je&$JALoF7vR``w%G%kSA`01VreGnPsZnC&b0kwUsehmJ!^Ka7e2Gh%T4>Sff zZg9NHfRL?T1vsJUBjH@Z_hi%`T|TdLwRFsw{yxF$&R^P)p@zjCL!q&BSI&aM>K+2` zvVCpR>wfy~+xT1-&6A?^MwMB1Qo?-<>Z%5DgeZSvb6hEqeVKcC*BKueilG4`gAfoc zx)>)C8!Gv*8UXu$WEXtI?1%p(H!$Jg#o`P{JV6^Y5!Sx=6PdN_ z0EfL@_DBO+s!N{mC&aMurqep)I`8Dk=Z>clBv8ZZ{54MhL<3owNe)Vw`?WV4LRxJM zzEHTe@bK3C(sS`(G-&WY6Pk126_4ClUn%1K2{~4=O<(E;+jJ3OSFA|N?2}Uiw-4dk zR(OwNZ`xY75BSFC1?h95W==iVBk zEUEsAK%&8NtJ=|Elq5)R%pgg$NA81=qQuPO>z$k9!x|4tw~y=|TY1^9+?sMGPtfP& zEdB2q6F^~{v7jcVdMns>3)jbI*v{}Tu*deE+hK8@+cYlMN!OVYa`D>2B5CVxvuT;7 zM%GO4zT#Ae_@mrpUJ7RN(MmTX`m{#tgtcJVcI@jW^7*&Mt)h;9ww_v=-pr0OxmL?2 z{5PmZuX?zGJv97j$0|d#a~!^s8Rn+@>q8lN2=8F=t5UxycZzm;5Q=y92px2a;?V?} ud2!hRm5RfkjJDR7aAWSC-}=Xqb~k<3rIDDn@L5TY9J_8nkUV_8ng0hFm(aWb literal 0 HcmV?d00001 From 71705123cb2858ecc0bbd5dd6eac83ac037c6ad6 Mon Sep 17 00:00:00 2001 From: Waverider <33787286+liaminventions@users.noreply.github.com> Date: Mon, 19 Dec 2022 14:07:31 -0500 Subject: [PATCH 03/12] fix --- demos/specs2/object.fur | Bin 10991 -> 10073 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/demos/specs2/object.fur b/demos/specs2/object.fur index 6ae76eea097b85491e2d168b24e0e3b7b3e2e509..c9a6e8ea4b2bb333dbd12847d24a7eae652612a8 100644 GIT binary patch literal 10073 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 literal 10991 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 From aa2020154b0cfbc20b86cfd95015184eda9ef3dd Mon Sep 17 00:00:00 2001 From: Waverider <33787286+liaminventions@users.noreply.github.com> Date: Mon, 19 Dec 2022 14:28:05 -0500 Subject: [PATCH 04/12] Add files via upload --- demos/amiga/furnace0.6crk.fur | Bin 0 -> 6076 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/amiga/furnace0.6crk.fur diff --git a/demos/amiga/furnace0.6crk.fur b/demos/amiga/furnace0.6crk.fur new file mode 100644 index 0000000000000000000000000000000000000000..0966f17b08431176e2689ce0bb5ab8f84ce96fc0 GIT binary patch literal 6076 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 literal 0 HcmV?d00001 From 5ee41c5f5e36d6e1ee2043e6496fef50fb4131db Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 21 Dec 2022 13:39:43 -0500 Subject: [PATCH 05/12] GUI: fix possible issue when changing sample depth --- src/gui/sampleEdit.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/sampleEdit.cpp b/src/gui/sampleEdit.cpp index 2f80a04f8..43fdac722 100644 --- a/src/gui/sampleEdit.cpp +++ b/src/gui/sampleEdit.cpp @@ -227,11 +227,11 @@ void FurnaceGUI::drawSampleEdit() { if (sampleDepths[i]==NULL) continue; if (ImGui::Selectable(sampleDepths[i])) { sample->prepareUndo(true); - e->lockEngine([sample]() { + e->lockEngine([this,sample,i]() { sample->render(); + sample->depth=(DivSampleDepth)i; + e->renderSamples(); }); - sample->depth=(DivSampleDepth)i; - e->renderSamplesP(); updateSampleTex=true; MARK_MODIFIED; } From 2ccc525293eb5f33600da09f6dfebdcd508b97f8 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 21 Dec 2022 16:26:06 -0500 Subject: [PATCH 06/12] K007232: ??? issue #797 --- src/engine/platform/k007232.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/engine/platform/k007232.cpp b/src/engine/platform/k007232.cpp index aa19773d5..ce15f115c 100644 --- a/src/engine/platform/k007232.cpp +++ b/src/engine/platform/k007232.cpp @@ -529,10 +529,10 @@ void DivPlatformK007232::renderSamples(int sysID) { } const int length=s->getLoopEndPosition(DIV_SAMPLE_DEPTH_8BIT); - int actualLength=MIN((int)(getSampleMemCapacity()-memPos)-1,length); + int actualLength=MIN((int)(getSampleMemCapacity()-memPos)-2,length); if (actualLength>0) { - if (actualLength>131072-1) { - actualLength=131072-1; + if (actualLength>131072-2) { + actualLength=131072-2; } if ((memPos&0xfe0000)!=((memPos+actualLength+1)&0xfe0000)) { memPos=(memPos+0x1ffff)&0xfe0000; From dc4ad09903abb062885023fe780dd00cad101386 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 21 Dec 2022 16:33:32 -0500 Subject: [PATCH 07/12] MSM6295: 127!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --- src/engine/platform/msm6295.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/msm6295.cpp b/src/engine/platform/msm6295.cpp index f1f61122c..292229a18 100644 --- a/src/engine/platform/msm6295.cpp +++ b/src/engine/platform/msm6295.cpp @@ -356,7 +356,7 @@ void DivPlatformMSM6295::renderSamples(int sysID) { // sample data size_t memPos=128*8; int sampleCount=parent->song.sampleLen; - if (sampleCount>128) sampleCount=128; + if (sampleCount>127) sampleCount=127; for (int i=0; isong.sample[i]; if (!s->renderOn[0][sysID]) { From 50e6409348d000b95a4416f5c8a24de9380da1de Mon Sep 17 00:00:00 2001 From: Kagamiin <102362203+Kagamiin@users.noreply.github.com> Date: Wed, 21 Dec 2022 21:45:14 +0000 Subject: [PATCH 08/12] Adding demos/sms/thunderblade-type-ii.fur (#794) * Adding demos/sms/thunderblade-type-ii.fur * Adding my name to about.cpp --- demos/sms/thunderblade-type-ii.fur | Bin 0 -> 6983 bytes src/gui/about.cpp | 1 + 2 files changed, 1 insertion(+) create mode 100644 demos/sms/thunderblade-type-ii.fur diff --git a/demos/sms/thunderblade-type-ii.fur b/demos/sms/thunderblade-type-ii.fur new file mode 100644 index 0000000000000000000000000000000000000000..d2f922fa99be3ed607c4fab798d7bf254f543fe2 GIT binary patch literal 6983 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≫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 literal 0 HcmV?d00001 diff --git a/src/gui/about.cpp b/src/gui/about.cpp index e685b50a1..0d14465dd 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -79,6 +79,7 @@ const char* aboutLine[]={ "iyatemu", "JayBOB18", "Jimmy-DS", + "Kagamiin~", "kleeder", "jaezu", "Laggy", From e9652af5a9075960370a12627f30f190df0c9b33 Mon Sep 17 00:00:00 2001 From: freq-mod <32672779+freq-mod@users.noreply.github.com> Date: Wed, 21 Dec 2022 22:06:34 +0000 Subject: [PATCH 09/12] add RF5C164 demo song (#784) * add RF5C164 demo song * fix note cuts * 8 channels * move to directory * aaaaaaaa --- demos/megacd/rf5wapianoroll.fur | Bin 0 -> 19979 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/megacd/rf5wapianoroll.fur diff --git a/demos/megacd/rf5wapianoroll.fur b/demos/megacd/rf5wapianoroll.fur new file mode 100644 index 0000000000000000000000000000000000000000..4b2919f3f72d2e88331315d2c6e9987d21d36ce8 GIT binary patch literal 19979 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 literal 0 HcmV?d00001 From 44b90b6a1079a2ff57fd0973f4bca3a3e8551ab0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 21 Dec 2022 17:07:12 -0500 Subject: [PATCH 10/12] move --- demos/{megacd => misc}/rf5wapianoroll.fur | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename demos/{megacd => misc}/rf5wapianoroll.fur (100%) diff --git a/demos/megacd/rf5wapianoroll.fur b/demos/misc/rf5wapianoroll.fur similarity index 100% rename from demos/megacd/rf5wapianoroll.fur rename to demos/misc/rf5wapianoroll.fur From 2a65f24b3ff6575dc9ce56ec2d5fd48543a83f37 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 21 Dec 2022 17:55:38 -0500 Subject: [PATCH 11/12] port ExtCh op macro code to OPN family, part 1 --- src/engine/platform/ym2203ext.cpp | 44 +++++++++++++++++++++++++---- src/engine/platform/ym2608ext.cpp | 45 +++++++++++++++++++++++++----- src/engine/platform/ym2610bext.cpp | 45 +++++++++++++++++++++++++----- src/engine/platform/ym2610ext.cpp | 45 +++++++++++++++++++++++++----- 4 files changed, 152 insertions(+), 27 deletions(-) diff --git a/src/engine/platform/ym2203ext.cpp b/src/engine/platform/ym2203ext.cpp index add360b06..f4ad294fa 100644 --- a/src/engine/platform/ym2203ext.cpp +++ b/src/engine/platform/ym2203ext.cpp @@ -41,15 +41,32 @@ int DivPlatformYM2203Ext::dispatch(DivCommand c) { switch (c.cmd) { case DIV_CMD_NOTE_ON: { DivInstrument* ins=parent->getIns(opChan[ch].ins,DIV_INS_FM); + + if (opChan[ch].insChanged) { + chan[2].state.alg=ins->fm.alg; + chan[2].state.fb=ins->fm.fb; + chan[2].state.fms=ins->fm.fms; + chan[2].state.ams=ins->fm.ams; + chan[2].state.op[ordch]=ins->fm.op[ordch]; + } + + if (noExtMacros) { + opChan[ch].macroInit(NULL); + } else { + opChan[ch].macroInit(ins); + } + if (!opChan[ch].std.vol.will) { + opChan[ch].outVol=opChan[ch].vol; + } unsigned short baseAddr=chanOffs[2]|opOffs[ordch]; - DivInstrumentFM::Operator op=ins->fm.op[ordch]; + DivInstrumentFM::Operator& op=chan[2].state.op[ordch]; // TODO: how does this work?! if (isOpMuted[ch]) { rWrite(baseAddr+0x40,127); } else { if (opChan[ch].insChanged) { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch].vol&0x7f,127)); + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch].outVol&0x7f,127)); } } if (opChan[ch].insChanged) { @@ -62,13 +79,15 @@ int DivPlatformYM2203Ext::dispatch(DivCommand c) { opChan[ch].mask=op.enable; } if (opChan[ch].insChanged) { // TODO how does this work? - rWrite(chanOffs[2]+0xb0,(ins->fm.alg&7)|(ins->fm.fb<<3)); + rWrite(chanOffs[2]+0xb0,(chan[2].state.alg&7)|(chan[2].state.fb<<3)); + rWrite(chanOffs[2]+0xb4,(IS_EXTCH_MUTED?0:(opChan[ch].pan<<6))|(chan[2].state.fms&7)|((chan[2].state.ams&3)<<4)); } opChan[ch].insChanged=false; if (c.value!=DIV_NOTE_NULL) { opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11); opChan[ch].portaPause=false; + opChan[ch].note=c.value; opChan[ch].freqChanged=true; } opChan[ch].keyOn=true; @@ -80,15 +99,28 @@ int DivPlatformYM2203Ext::dispatch(DivCommand c) { opChan[ch].keyOn=false; opChan[ch].active=false; break; + case DIV_CMD_NOTE_OFF_ENV: + if (noExtMacros) break; + opChan[ch].keyOff=true; + opChan[ch].keyOn=false; + opChan[ch].active=false; + opChan[ch].std.release(); + break; + case DIV_CMD_ENV_RELEASE: + if (noExtMacros) break; + opChan[ch].std.release(); + break; case DIV_CMD_VOLUME: { opChan[ch].vol=c.value; - DivInstrument* ins=parent->getIns(opChan[ch].ins,DIV_INS_FM); + if (!opChan[ch].std.vol.has) { + opChan[ch].outVol=c.value; + } unsigned short baseAddr=chanOffs[2]|opOffs[ordch]; - DivInstrumentFM::Operator op=ins->fm.op[ordch]; + DivInstrumentFM::Operator& op=chan[2].state.op[ordch]; if (isOpMuted[ch]) { rWrite(baseAddr+0x40,127); } else { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch].vol&0x7f,127)); + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch].outVol&0x7f,127)); } break; } diff --git a/src/engine/platform/ym2608ext.cpp b/src/engine/platform/ym2608ext.cpp index 179a632a8..f08bdfad4 100644 --- a/src/engine/platform/ym2608ext.cpp +++ b/src/engine/platform/ym2608ext.cpp @@ -41,15 +41,32 @@ int DivPlatformYM2608Ext::dispatch(DivCommand c) { switch (c.cmd) { case DIV_CMD_NOTE_ON: { DivInstrument* ins=parent->getIns(opChan[ch].ins,DIV_INS_FM); + + if (opChan[ch].insChanged) { + chan[2].state.alg=ins->fm.alg; + chan[2].state.fb=ins->fm.fb; + chan[2].state.fms=ins->fm.fms; + chan[2].state.ams=ins->fm.ams; + chan[2].state.op[ordch]=ins->fm.op[ordch]; + } + + if (noExtMacros) { + opChan[ch].macroInit(NULL); + } else { + opChan[ch].macroInit(ins); + } + if (!opChan[ch].std.vol.will) { + opChan[ch].outVol=opChan[ch].vol; + } unsigned short baseAddr=chanOffs[2]|opOffs[ordch]; - DivInstrumentFM::Operator op=ins->fm.op[ordch]; + DivInstrumentFM::Operator& op=chan[2].state.op[ordch]; // TODO: how does this work?! if (isOpMuted[ch]) { rWrite(baseAddr+0x40,127); } else { if (opChan[ch].insChanged) { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch].vol&0x7f,127)); + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch].outVol&0x7f,127)); } } if (opChan[ch].insChanged) { @@ -62,14 +79,15 @@ int DivPlatformYM2608Ext::dispatch(DivCommand c) { opChan[ch].mask=op.enable; } if (opChan[ch].insChanged) { // TODO how does this work? - rWrite(chanOffs[2]+0xb0,(ins->fm.alg&7)|(ins->fm.fb<<3)); - rWrite(chanOffs[2]+0xb4,(opChan[ch].pan<<6)|(ins->fm.fms&7)|((ins->fm.ams&3)<<4)); + rWrite(chanOffs[2]+0xb0,(chan[2].state.alg&7)|(chan[2].state.fb<<3)); + rWrite(chanOffs[2]+0xb4,(IS_EXTCH_MUTED?0:(opChan[ch].pan<<6))|(chan[2].state.fms&7)|((chan[2].state.ams&3)<<4)); } opChan[ch].insChanged=false; if (c.value!=DIV_NOTE_NULL) { opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11); opChan[ch].portaPause=false; + opChan[ch].note=c.value; opChan[ch].freqChanged=true; } opChan[ch].keyOn=true; @@ -81,15 +99,28 @@ int DivPlatformYM2608Ext::dispatch(DivCommand c) { opChan[ch].keyOn=false; opChan[ch].active=false; break; + case DIV_CMD_NOTE_OFF_ENV: + if (noExtMacros) break; + opChan[ch].keyOff=true; + opChan[ch].keyOn=false; + opChan[ch].active=false; + opChan[ch].std.release(); + break; + case DIV_CMD_ENV_RELEASE: + if (noExtMacros) break; + opChan[ch].std.release(); + break; case DIV_CMD_VOLUME: { opChan[ch].vol=c.value; - DivInstrument* ins=parent->getIns(opChan[ch].ins,DIV_INS_FM); + if (!opChan[ch].std.vol.has) { + opChan[ch].outVol=c.value; + } unsigned short baseAddr=chanOffs[2]|opOffs[ordch]; - DivInstrumentFM::Operator op=ins->fm.op[ordch]; + DivInstrumentFM::Operator& op=chan[2].state.op[ordch]; if (isOpMuted[ch]) { rWrite(baseAddr+0x40,127); } else { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch].vol&0x7f,127)); + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch].outVol&0x7f,127)); } break; } diff --git a/src/engine/platform/ym2610bext.cpp b/src/engine/platform/ym2610bext.cpp index adde670a7..a68747f3a 100644 --- a/src/engine/platform/ym2610bext.cpp +++ b/src/engine/platform/ym2610bext.cpp @@ -37,15 +37,32 @@ int DivPlatformYM2610BExt::dispatch(DivCommand c) { switch (c.cmd) { case DIV_CMD_NOTE_ON: { DivInstrument* ins=parent->getIns(opChan[ch].ins,DIV_INS_FM); + + if (opChan[ch].insChanged) { + chan[extChanOffs].state.alg=ins->fm.alg; + chan[extChanOffs].state.fb=ins->fm.fb; + chan[extChanOffs].state.fms=ins->fm.fms; + chan[extChanOffs].state.ams=ins->fm.ams; + chan[extChanOffs].state.op[ordch]=ins->fm.op[ordch]; + } + + if (noExtMacros) { + opChan[ch].macroInit(NULL); + } else { + opChan[ch].macroInit(ins); + } + if (!opChan[ch].std.vol.will) { + opChan[ch].outVol=opChan[ch].vol; + } unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[ordch]; - DivInstrumentFM::Operator op=ins->fm.op[ordch]; + DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[ordch]; // TODO: how does this work?! if (isOpMuted[ch]) { rWrite(baseAddr+0x40,127); } else { if (opChan[ch].insChanged) { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch].vol&0x7f,127)); + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch].outVol&0x7f,127)); } } if (opChan[ch].insChanged) { @@ -58,14 +75,15 @@ int DivPlatformYM2610BExt::dispatch(DivCommand c) { opChan[ch].mask=op.enable; } if (opChan[ch].insChanged) { // TODO how does this work? - rWrite(chanOffs[extChanOffs]+0xb0,(ins->fm.alg&7)|(ins->fm.fb<<3)); - rWrite(chanOffs[extChanOffs]+0xb4,(opChan[ch].pan<<6)|(ins->fm.fms&7)|((ins->fm.ams&3)<<4)); + rWrite(chanOffs[extChanOffs]+0xb0,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + rWrite(chanOffs[extChanOffs]+0xb4,(IS_EXTCH_MUTED?0:(opChan[ch].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); } opChan[ch].insChanged=false; if (c.value!=DIV_NOTE_NULL) { opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11); opChan[ch].portaPause=false; + opChan[ch].note=c.value; opChan[ch].freqChanged=true; } opChan[ch].keyOn=true; @@ -77,15 +95,28 @@ int DivPlatformYM2610BExt::dispatch(DivCommand c) { opChan[ch].keyOn=false; opChan[ch].active=false; break; + case DIV_CMD_NOTE_OFF_ENV: + if (noExtMacros) break; + opChan[ch].keyOff=true; + opChan[ch].keyOn=false; + opChan[ch].active=false; + opChan[ch].std.release(); + break; + case DIV_CMD_ENV_RELEASE: + if (noExtMacros) break; + opChan[ch].std.release(); + break; case DIV_CMD_VOLUME: { opChan[ch].vol=c.value; - DivInstrument* ins=parent->getIns(opChan[ch].ins,DIV_INS_FM); + if (!opChan[ch].std.vol.has) { + opChan[ch].outVol=c.value; + } unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[ordch]; - DivInstrumentFM::Operator op=ins->fm.op[ordch]; + DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[ordch]; if (isOpMuted[ch]) { rWrite(baseAddr+0x40,127); } else { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch].vol&0x7f,127)); + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch].outVol&0x7f,127)); } break; } diff --git a/src/engine/platform/ym2610ext.cpp b/src/engine/platform/ym2610ext.cpp index a86df5858..4bc15389c 100644 --- a/src/engine/platform/ym2610ext.cpp +++ b/src/engine/platform/ym2610ext.cpp @@ -37,15 +37,32 @@ int DivPlatformYM2610Ext::dispatch(DivCommand c) { switch (c.cmd) { case DIV_CMD_NOTE_ON: { DivInstrument* ins=parent->getIns(opChan[ch].ins,DIV_INS_FM); + + if (opChan[ch].insChanged) { + chan[extChanOffs].state.alg=ins->fm.alg; + chan[extChanOffs].state.fb=ins->fm.fb; + chan[extChanOffs].state.fms=ins->fm.fms; + chan[extChanOffs].state.ams=ins->fm.ams; + chan[extChanOffs].state.op[ordch]=ins->fm.op[ordch]; + } + + if (noExtMacros) { + opChan[ch].macroInit(NULL); + } else { + opChan[ch].macroInit(ins); + } + if (!opChan[ch].std.vol.will) { + opChan[ch].outVol=opChan[ch].vol; + } unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[ordch]; - DivInstrumentFM::Operator op=ins->fm.op[ordch]; + DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[ordch]; // TODO: how does this work?! if (isOpMuted[ch]) { rWrite(baseAddr+0x40,127); } else { if (opChan[ch].insChanged) { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch].vol&0x7f,127)); + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch].outVol&0x7f,127)); } } if (opChan[ch].insChanged) { @@ -58,14 +75,15 @@ int DivPlatformYM2610Ext::dispatch(DivCommand c) { opChan[ch].mask=op.enable; } if (opChan[ch].insChanged) { // TODO how does this work? - rWrite(chanOffs[extChanOffs]+0xb0,(ins->fm.alg&7)|(ins->fm.fb<<3)); - rWrite(chanOffs[extChanOffs]+0xb4,(opChan[ch].pan<<6)|(ins->fm.fms&7)|((ins->fm.ams&3)<<4)); + rWrite(chanOffs[extChanOffs]+0xb0,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + rWrite(chanOffs[extChanOffs]+0xb4,(IS_EXTCH_MUTED?0:(opChan[ch].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); } opChan[ch].insChanged=false; if (c.value!=DIV_NOTE_NULL) { opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11); opChan[ch].portaPause=false; + opChan[ch].note=c.value; opChan[ch].freqChanged=true; } opChan[ch].keyOn=true; @@ -77,15 +95,28 @@ int DivPlatformYM2610Ext::dispatch(DivCommand c) { opChan[ch].keyOn=false; opChan[ch].active=false; break; + case DIV_CMD_NOTE_OFF_ENV: + if (noExtMacros) break; + opChan[ch].keyOff=true; + opChan[ch].keyOn=false; + opChan[ch].active=false; + opChan[ch].std.release(); + break; + case DIV_CMD_ENV_RELEASE: + if (noExtMacros) break; + opChan[ch].std.release(); + break; case DIV_CMD_VOLUME: { opChan[ch].vol=c.value; - DivInstrument* ins=parent->getIns(opChan[ch].ins,DIV_INS_FM); + if (!opChan[ch].std.vol.has) { + opChan[ch].outVol=c.value; + } unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[ordch]; - DivInstrumentFM::Operator op=ins->fm.op[ordch]; + DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[ordch]; if (isOpMuted[ch]) { rWrite(baseAddr+0x40,127); } else { - rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch].vol&0x7f,127)); + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[ch].outVol&0x7f,127)); } break; } From 0eb2449c57db46322647cb7293a764341f385560 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 21 Dec 2022 18:02:00 -0500 Subject: [PATCH 12/12] port ExtCh op macro code to OPN family, part 2 --- src/engine/platform/fmshared_OPN.h | 2 ++ src/engine/platform/genesisext.cpp | 1 - src/engine/platform/ym2203ext.cpp | 3 --- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/engine/platform/fmshared_OPN.h b/src/engine/platform/fmshared_OPN.h index 769a1814b..6ab448e6d 100644 --- a/src/engine/platform/fmshared_OPN.h +++ b/src/engine/platform/fmshared_OPN.h @@ -83,6 +83,8 @@ return 2; \ } +#define IS_EXTCH_MUTED (isOpMuted[0] && isOpMuted[1] && isOpMuted[2] && isOpMuted[3]) + class DivPlatformOPN: public DivPlatformFMBase { protected: const unsigned short ADDR_MULT_DT=0x30; diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index 6443729ff..8e16071af 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -25,7 +25,6 @@ #define CHIP_DIVIDER fmDivBase #define IS_REALLY_MUTED(x) (isMuted[x] && (x<5 || !softPCM || (isMuted[5] && isMuted[6]))) -#define IS_EXTCH_MUTED (isOpMuted[0] && isOpMuted[1] && isOpMuted[2] && isOpMuted[3]) int DivPlatformGenesisExt::dispatch(DivCommand c) { if (c.chan<2) { diff --git a/src/engine/platform/ym2203ext.cpp b/src/engine/platform/ym2203ext.cpp index f4ad294fa..b8c40f68c 100644 --- a/src/engine/platform/ym2203ext.cpp +++ b/src/engine/platform/ym2203ext.cpp @@ -45,8 +45,6 @@ int DivPlatformYM2203Ext::dispatch(DivCommand c) { if (opChan[ch].insChanged) { chan[2].state.alg=ins->fm.alg; chan[2].state.fb=ins->fm.fb; - chan[2].state.fms=ins->fm.fms; - chan[2].state.ams=ins->fm.ams; chan[2].state.op[ordch]=ins->fm.op[ordch]; } @@ -80,7 +78,6 @@ int DivPlatformYM2203Ext::dispatch(DivCommand c) { } if (opChan[ch].insChanged) { // TODO how does this work? rWrite(chanOffs[2]+0xb0,(chan[2].state.alg&7)|(chan[2].state.fb<<3)); - rWrite(chanOffs[2]+0xb4,(IS_EXTCH_MUTED?0:(opChan[ch].pan<<6))|(chan[2].state.fms&7)|((chan[2].state.ams&3)<<4)); } opChan[ch].insChanged=false;