From e32d6e2d5dab48aedeae16d5e43057d19bdfb143 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Thu, 15 Dec 2022 21:25:56 +0800 Subject: [PATCH] vgmplay updates Still not in a terrific state but better --- Binary/Apps/Tunes/ReadMe.txt | 2 +- Source/Apps/TEST/sound/Scales.asm | 145 +++++++ Source/Apps/VGM/Build.cmd | 2 +- Source/Apps/VGM/Makefile | 3 + Source/Apps/VGM/Tunes/AGGRESS.VGM | Bin 0 -> 29942 bytes Source/Apps/VGM/Tunes/ANNA.VGM | Bin 0 -> 29440 bytes Source/Apps/VGM/Tunes/BGM.VGM | Bin 0 -> 4103 bytes Source/Apps/VGM/Tunes/DESCENT.VGM | Bin 0 -> 39552 bytes Source/Apps/VGM/Tunes/ENDING.VGM | Bin 0 -> 24213 bytes Source/Apps/VGM/Tunes/FIELDMAP.VGM | Bin 0 -> 5888 bytes Source/Apps/VGM/Tunes/FOREST.VGM | Bin 0 -> 41088 bytes Source/Apps/VGM/Tunes/INCHINA.VGM | Bin 0 -> 44928 bytes Source/Apps/VGM/Tunes/QIX.VGM | Bin 0 -> 24696 bytes Source/Apps/VGM/Tunes/SHIRAKAW.VGM | Bin 0 -> 31104 bytes Source/Apps/VGM/Tunes/STARTDEM.VGM | Bin 0 -> 29312 bytes Source/Apps/VGM/Tunes/TEDDY.VGM | Bin 0 -> 51584 bytes Source/Apps/VGM/Tunes/filthy01.vgm | Bin 27392 -> 0 bytes Source/Apps/VGM/YM2612.ASM | 2 +- Source/Apps/VGM/vgmplay.asm | 649 +++++++++++++++++++++-------- Source/HBIOS/sn76489.asm | 4 +- 20 files changed, 635 insertions(+), 172 deletions(-) create mode 100644 Source/Apps/TEST/sound/Scales.asm create mode 100644 Source/Apps/VGM/Tunes/AGGRESS.VGM create mode 100644 Source/Apps/VGM/Tunes/ANNA.VGM create mode 100644 Source/Apps/VGM/Tunes/BGM.VGM create mode 100644 Source/Apps/VGM/Tunes/DESCENT.VGM create mode 100644 Source/Apps/VGM/Tunes/ENDING.VGM create mode 100644 Source/Apps/VGM/Tunes/FIELDMAP.VGM create mode 100644 Source/Apps/VGM/Tunes/FOREST.VGM create mode 100644 Source/Apps/VGM/Tunes/INCHINA.VGM create mode 100644 Source/Apps/VGM/Tunes/QIX.VGM create mode 100644 Source/Apps/VGM/Tunes/SHIRAKAW.VGM create mode 100644 Source/Apps/VGM/Tunes/STARTDEM.VGM create mode 100644 Source/Apps/VGM/Tunes/TEDDY.VGM delete mode 100644 Source/Apps/VGM/Tunes/filthy01.vgm diff --git a/Binary/Apps/Tunes/ReadMe.txt b/Binary/Apps/Tunes/ReadMe.txt index 366efefe..3c41d421 100644 --- a/Binary/Apps/Tunes/ReadMe.txt +++ b/Binary/Apps/Tunes/ReadMe.txt @@ -7,4 +7,4 @@ *********************************************************************** This directory contains some sample ProTracker and MYM sound -files that can be played by the TUNE application. \ No newline at end of file +files that can be played by the TUNE or VGMPLAY application. \ No newline at end of file diff --git a/Source/Apps/TEST/sound/Scales.asm b/Source/Apps/TEST/sound/Scales.asm new file mode 100644 index 00000000..bf91ea81 --- /dev/null +++ b/Source/Apps/TEST/sound/Scales.asm @@ -0,0 +1,145 @@ +; + + .ORG $0100 + +; SCALES ON ALL THREE CHANNELS + +; JR SKIP + + LD B,3 +NEXTCH0 LD A,B + DEC A + LD (CHANNEL),A + PUSH BC ; ACROSS + CALL SCALE ; ALL + POP BC ; CHANNELS + DJNZ NEXTCH0 + +; CONSTANT TONE ON ALL THREE CHANNELS, SCALE VOLUME +SKIP: + LD HL,332+48 ; TONE + LD (NOTE),HL +; + LD B,3 +NEXTCH1 LD A,B + DEC A + LD (CHANNEL),A + PUSH BC ; ACROSS + CALL TONE ; ALL + POP BC ; CHANNELS + DJNZ NEXTCH1 + + RET + +TONE: LD B,50H ; RESET + LD C,0 + RST 08 +; +NEXT1: LD B,51H ; VOLUME + LD C,0 + LD A,(VOLUME) + LD L,A + RST 08 +; + LD B,53H ; NOTE + LD C,0 + LD HL,(NOTE) + RST 08 +; + LD B,54H ; PLAY + LD C,0 + LD A,(CHANNEL) + LD D,A + RST 08 +; + CALL DELAY +; + LD A,(VOLUME) + DEC A + LD (VOLUME),A + JR NZ,NEXT1 +; + LD B,51H ; VOLUME + LD C,0 + LD L,00H + RST 08 +; + LD B,54H ; PLAY + LD C,0 + LD A,(CHANNEL) + LD D,A + RST 08 +; + RET +; +; +; +SCALE: LD B,50H ; RESET + LD C,0 + RST 08 +; + LD B,51H ; VOLUME + LD C,0 + LD L,80H + RST 08 +; + LD HL,380 + LD (NOTE),HL +; +NEXT0: LD B,53H ; NOTE + LD C,0 + LD HL,(NOTE) + RST 08 +; + LD B,54H ; PLAY + LD C,0 + LD A,(CHANNEL) + LD D,A + RST 08 +; + OR A + JR Z,NEXT2 + LD C,9 + LD DE,BADFLAG + CALL 5 + JR NEXT3 +; +NEXT2: CALL DELAY +; +NEXT3: LD HL,(NOTE) + DEC HL + LD A,L + LD (NOTE),A + LD A,H + LD (NOTE+1),A + OR L +; + JR NZ,NEXT0 +; + LD B,51H ; VOLUME + LD C,0 + LD L,00H + RST 08 +; + LD B,54H ; PLAY + LD C,0 + LD A,(CHANNEL) + LD D,A + RST 08 +; + RET +; +DELAY: LD HL,-1 +DELAY1: DEC HL + LD A,H + OR L + JR NZ,DELAY1 + RET +; +BADFLAG .DB '*', $0D, $0A, '$' +NOTE .DW 128 +VOLUME .DB 0 +CHANNEL .DB 0 +; + .END + diff --git a/Source/Apps/VGM/Build.cmd b/Source/Apps/VGM/Build.cmd index cdd1711e..ac9cfc07 100644 --- a/Source/Apps/VGM/Build.cmd +++ b/Source/Apps/VGM/Build.cmd @@ -9,4 +9,4 @@ tasm -t180 -g3 -fFF -dWBW vgmplay.asm vgmplay.com vgmplay.lst || exit /b tasm -t180 -g3 -fFF -dWBW ym2612.asm ym2612.com ym2612.lst || exit /b copy /Y vgmplay.com ..\..\..\Binary\Apps\ || exit /b -copy /Y Tunes\*.* ..\..\..\Binary\Apps\Tunes\ || exit /b \ No newline at end of file +copy /Y Tunes\*.* ..\..\..\Binary\Apps\Tunes\ || exit /b diff --git a/Source/Apps/VGM/Makefile b/Source/Apps/VGM/Makefile index c410aec2..58cc9428 100644 --- a/Source/Apps/VGM/Makefile +++ b/Source/Apps/VGM/Makefile @@ -10,6 +10,9 @@ DEPS := vgmplay.asm $(shell find . -name '*.inc') vgmplay.com: $(DEPS) $(TASM) -dWBW vgmplay.asm vgmplay.com vgmplay.lst +ym2612.com: + $(TASM) -dWBW ym2612.asm ym2612.com ym2612.lst + all:: mkdir -p $(DEST)/Tunes cp Tunes/* $(DEST)/Tunes diff --git a/Source/Apps/VGM/Tunes/AGGRESS.VGM b/Source/Apps/VGM/Tunes/AGGRESS.VGM new file mode 100644 index 0000000000000000000000000000000000000000..fd0a392453b381fcd165b8843bc16ae721f34bed GIT binary patch literal 29942 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 V@bhx@9rSpmdJ&&rseV~=|3AiE12X^s literal 0 HcmV?d00001 diff --git a/Source/Apps/VGM/Tunes/ANNA.VGM b/Source/Apps/VGM/Tunes/ANNA.VGM new file mode 100644 index 0000000000000000000000000000000000000000..cf8f6a64325e4e76758f37e944e6d7cd60ab3c6d GIT binary patch literal 29440 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 literal 0 HcmV?d00001 diff --git a/Source/Apps/VGM/Tunes/BGM.VGM b/Source/Apps/VGM/Tunes/BGM.VGM new file mode 100644 index 0000000000000000000000000000000000000000..e71c431b28ec3b4ef5613337024aae9621647fe8 GIT binary patch literal 4103 zcmbW4F>f4I6ouc;?s{itcfIsZq);Oy2q=OofhH755F|nrG-go{LXeJsK*JA6hxFQn zf)=DW62Ae(sbl|zG)S?{cg}q?v+KA@BCluPynD{Q=iYbk^H<;hbY=WjN?(jp|L@mT zO8@N7(vPe>{ASj#cMrF^hd2Cv>+`+da{up9{x_}p$@OlY{gu;c9;Mu_^5nlf9q+$0 z&F$_wH@mqy&0{vLytHH~o)+tzPS!F`k1^BR>clo|1zeVo*STHlO|#-j7LW8wBzN+3 ziZyucuGXqYe4B#>!LnG@STu8Bu+<)M{Q<~R5P0J?Ia#mF#;fY7@t146DJqd3Kmz42 zc{(wSN!fhhZ;(E@fb@xNMR}kI(xEWmR5XNkP(lUf@FLDE z+Ln$>l$}B)%I7d1v$mnDw;u(ek|$lYCT%L#rRxhVSXs2GEuEx&(UTqxQ93!^--mlt z(o`dSh4-(~6R%vCXLBLpZN-|TI?ipo|9edlTa7x^`=*{ zyqrg)O(qIaOqcVRsLzpIVq?wEN~+*lbtzJZD0?A_cs51Z3-{RP_|x5@g(RH^(Uv{mHAc7Z4}R4{%XC1eU2DHZ%)NdD+6uTC2BpgHfxXsUm>@d4k7HLw>b@>l4Wp*fMVj zT7^sT)wOgIbVJYq&6a2^O)VU-@x=V>hSfax?{1M zStm5OW(CknZTJjBFZm1$P7pr7(G;rdMJc!O z(oPlpx&Hi`<41JV0;c&g_i4lD7w#{6r9Il)a&W|O1cM`TC+&_waTP~1$)~fOv`IbC|b=3Q=@sgdA+*Gb){0ENyXt>g< z@y9!g;?K=@Mz=oB)siIp?&x?c>@{)`vtO7gip_c{%A9%?CumQiS(K=)Nt)A+16HjQo~3}@WdL@sV=;5JO@ zk^`_IM%8j78CV&jk#Htvxmh?+C$_0g4mv@DJ}{TR8hQfGG7fk!TR1sC%gxO8z9Yy1 zO=X-HJNYVQq9Khfv$G$zI~s@O?12n9$eiwO_zaz}_UM+q=CY0-YQ!zg6I%%cA8yU& z0l|JTOfh6M_rw!T+d>@3aD#j%O*(c_FiA0u$sCuOac;()DZnu5uP`%ej>Rw;y8^Lf zaz;CgF(1>~pKcexLk#?x^I6&qyo@-k8Ed+Wg)N;(7w}C2$h*)!sJc zhG|W}$`{y>f_G(PU&v?%un6#+pK(@uJUGh(!Tf8$NYaUz01#s cd|pl0Z2chpoPJ2_bR|7V_xb!Ny{+x(e^@fVQ2+n{ literal 0 HcmV?d00001 diff --git a/Source/Apps/VGM/Tunes/DESCENT.VGM b/Source/Apps/VGM/Tunes/DESCENT.VGM new file mode 100644 index 0000000000000000000000000000000000000000..0e72d80237ab584685036fb58dbc6437f3ded760 GIT binary patch literal 39552 zcmeHQYmimdl|HxaZkh%Kq>-1}(3-IWN$hSO!$XM>KtLePT0jJOcu)u+5cl?8Xo%22 z0YM6gvCyFS00v1iNhZRmW0g~dWy-2a@?(TaO9x2psTX!~~e-R$-L*0T`9V|mG2H{O2AW6bWc0q(@s;{ zd1^aNYv*b0G`*dtx6_Pvp3zP-+j(X?&1&aa?KHccXSdUwcAnEtbK7}tJI!n7dF?d6 zo#(ex>r34FJ6doPFL;UQC8poe!Vh@iyR>K_FZzHMf5401rTbU%{qNI~KD=ZlEnUe= z-=}3OdD%0xdnnJD4Q=Sn8+y^k6mRTJn|kx6Ui9eo{AeFiy;xmO`g+!VC|%F#I?B{? zrk*y}^X58gtKznRw)W+%RkW>&w*~Zgz>inc_DbF!(2jt2RMXBj-noo+9pznZw7ZRW zFQYx@c+ab}_YK~Aj`p47eXr8~S-k&FdZLY=m_-L>@qs((U_BrFA{{!$hwABYJs4k)z4kW0_8z_d9>4w;Gy$TAtRY-cJm>=y z01}6Y8&gmcXa&?j4ZK<9n#_!q-1*-Pszn9>?#u@cU1#FSVX){h;+TYUmRV z!wq~%(W_IbX}qR;W@&2uwWbGehL&jB`7H(M&;;E^v+kz*|6SACK8o7<(*FB2L_%X% zX`22OO$+C0dieX49;|53-yl6rcQs^a?roZuEmpMQJM{QKO$UFbAv8KQM$_?ksPTOG z*E?{T;oJbn(C!f0ox&YL;}o48LgN(qhtN0$4$+1~xHD)R!kt0WsTMlEN6R5zNDh(4 zA#f4J&!BM=8Qg@%Rk)kbxC-2a973+b-Gstb;3hgd#27mMfH_3_sQ4xn4x#f;q3liQ zEO96tLMP(zZbDgc=;RPv>`iD$BmX9p+{9OJpoV@KIy0DFyQryoK$@oBplQKxG=)1! z4bZgf=P*)D6IGgK*JxUDi>7t(5koXRQKMj+G%jqT8GUKdP))1xg>WW&D-_I_?pAFy zuZEV_YueaP(e`>e^t^`cYI=D%ofwTf_$Y+ih5K&kr|IlqO|Rn!Edw$%?FL2k8(Otf zlg1Ht{~R7d!(*pu4vw(&7Fv)0-G(C^sDWS5G(Jqz%)Xiy;|y?zoAHkOD&RvDO;H(| zkMCK5Pi^W)JL(l3#v$N0P7l*`@?C2DINUWv4!k2HB^URj>WUO+kf(9aL zp|X`z^gPB{;bqp~bS^g%BqKP7GKSG7WuwgB}(dicaF30e7EN;Jm0P0H$^M5 ze0K|cHzLaU@OV#9iY?|QkOwu~p!rNn^J{NwZtkyn>PTL2lj86?%}8^09o0xJcw(#O z*&{VC>7y74($>D3k(WFhXdZ`enQ@b5BxI{=6=!NSBZqk!uiV|5;duiTBMsY#pTE6Q zGcp%AE`E6+pLhrIxES6Mse^MDq7BYnNc{5LMcTy<38RU-P@X8V-G%bPsB;%8b{BC3 z`+|sK3sQ~n8_`X87ol(y?jkg90vDm(O}LBDxCvZ@b~oWJLg6OdMQGdvE@BHV0{5WZ zMc^K^y@)zK@oiYg#qbN!MTlJ#cU16G`F5dP5Y3L{Vi%qHDRG;|F81Flcd)fjUMMZS zb=ah0X(SHi|Z5Qm05pqC;Jm93c2OA&`tOqH#eI#EpJ6jLXPsba+xc@$L4D80M- zam@PcN@Jco>@A#y`MeJEY=Ny!8_5LoTm|#gy?8gw6KVe>nCBea&r+D@`byr0TQ~r% zM6y2~-!c=ows;}0fq8C*dG31yMS-d$#v1ZuvU83>3Qp%VD33eWs=<3QEu%eT8UZ*fqYkFAl>dMB;hWcSoo3S zUL%mNd#8x3G~ZwO>4fuFIq8I?{mx$%Nc&wrk)$`Vzw$yy`7-XuldF)V#tFo;5OLjJ z5RKA)iK2Me!PL5nxHk6!dYN2>AOxj7 zh14D6%7e~r-l-OZ-wpu=iu`Llw$-$#oGi;t$=K9>IC-VQwZ~`KG z?~DZ$H4sG&NKsi#Q3F)e7FE=M6}80`6@W!;kwtBxMGb6G16))VUDOs{)W8=r02mbz zMr|QR4UAD+kWpKdF`Q`=i!+lIz4j0_1LvEHaJb-B07yef0Ug=3RslhxiCWWa;4@1G z(mH@KTdM&eO#ptRXk3$~8Gv~f)zRvk0U%Xr+S>pCNzvUwhUWFxw7egnYz+iS(V-t$ z1ZfnV5Ge1%aHW^nL?E8?Rt0by0r9#en#Vq~{qOQhkLVZ<9q@u!0;=W|=2wW~nHZJ^ zfE2ns@62QkaVRGbCk_pHKpfhNLpgB(&#OK|hjIjMh{^r8=fSSozVU`T>?!&s>WZZHIB~NX{eSa7p8YlsExe4oxQ!vsBMq0sB z2Q%_r4uMCizKjIR;JX@)hoNXZ4Ai`?p0`#jeqw@!+mWIp-{nPhjC_|fRf_jE*v13$ zZRESWydUs(#Yijo&<`x$KH4@O{!%dCRme15g5@|HdEo#MlH)zlE&~+ z&+y;XxQeRq`zGad#fVi=mvTxmBsr%mhCDlU#gNL*zNHvKErf158qb+3)Iu7?ke_q9 zV#sCRXs5@;kjcLN%D7v&9UU?nz^Xt{H|@bxQk|DPs7nYj-P&VGX3=v(NYpbHsQIc_ zg}4ffZ1#++u(`JnZAx7jHDvPLR#X>uwO`t`F32N2LM^;Hq%h#^ai1dSzuS37Hp!AW zc7tNup>qv7jSihghYk%og$^AWblU6Cp+Tq7p;PG4p+TozhYk%ojSihghYk%omD8a^ zgHC04==kKPh^C)}xBCT1aipMN-&km94l%hzK1H14EglN0Ai9NB;qNQ(5ubc0JX2#o zwJID5c4?4A+Q@n@k?|od{`}5%(GHEY5FH`N0MN4obFRiPjRQ(!^V9H`x8q#f1rlB; z($h|QD(SC^^mJB#Rk{AE&g-wLq`xZC^ZKi4*I(6H{Z(a;0nXGXA^4CM+;HV%)I)Rq zRj-G3Rfs6%#x`s{Zw(2#`5k~PAr3m5B6Pc{1<25}k(%fxf;33?0)_3UrLeUsnlqA? zBA16T(YC&XZnved^{1IPDS|Q4np%Q1Xx|$e6gHaDx`pNspcTNZHUR_OQAvl734u+4 z!A2(q1N}JRU$QGBaM>GaS?kJ8y;*!S6#n`%WRk0S%BFmQ0Jn4VjK zUMlFNF6dU2Yy9WC6>0p#t!TIv^!?kQm#*!v;Z@M~*S7Cp$0xsSyvl#$D5fofv)-hxw4#F4brUum zU7}h$;k^Qh2~dcT%=uov?`XHAexOuXPl_GLpOo-2At_yhbCjae0kKVndTm zUIS`=AD7o?BsMOuQAlh+&0mPTM!UoYd5uP5lSX0#YW@(H*l1)nHnACqxgC?(#A&9N z*LYMEFU`C+~Zdj#-jiO&!VmCO_1WgZx@0Bp+<3z!E+ zEMOkwhy~1pRy25hv4DBti3Q5}QNl6JSIz>=gYHCPExdCJ@aXEWj|e0qqIp!*G>!Xk zS}OP9t^@t1VhOurjrG$(-mdDjtzQ-?iD z>)$crrS)Gh(eviYE~TLNu*d&3-R?MsKqOJF>G=y6LoSKsdPxL24`nJj0vdh3W=lUU^R&?22ENyZ!B#C>KsxS_YAv%u3||1C;$DE_p5ME`~e2EU;L+KuTj ziC`n!XwI#)^lOUNgPOE0z-*bT%*W77u$dPB3YGaT+Kj?`-zZy|4``$LLum!RWz!&3 z<^dhXw}6LEr$6MWtbkJame0CJS z{*DZnDV|mVNb@CL1;T}{0i^jW+q-H;_oJ4Vt^}lsSGHC20U)}jcNOqVjGQgTD{BVw z<|;Hl-n1Zd#TK4l!z=K@Cg9jR2Jqq00y3ldaU*8SV5Xmhj|F^YB4b`2yGFqNsNn@5 zYJ~U_74RUOfgWP!PVs3&|ETBHV1ZAcuw|XfEFSVz?gv^jfgJ$6=}%05{mB{3%WOO>19Vi_uk2mV2Km!e^@9vej} zfC`MasKCe!%|xZV_@Euw$1D558kcs*ShPFpXvGn?f zSdM+dJV68T0fWx%GagQsv|H++d>Tm6QcN)S!qbl(&g9w+A13vefdn)WV(Y}{XN4+g zooG0Sbz=0hfOTqEr|P10V)Rq26a9`)!l`1N=(SvQ)`?kYW1hCxQst}@x6Nl*HXwj?-c9Quug5ZyTsP1VV=%9rPst0 zTDHJCVVr0+8S8{`+E&xZEig`Jn`kvvz&3S`al$q=j8nllVVjyy4TEjMIa~+@eH<*-B@hXKqa-}2uhxvFit>r zrsRQjVw;As&Nt9IuMQ<#RfY0#5H^Z^c6*N7p*H&6$*)D~h*9KsBw9FiM5}zL3l?@1 zxmnavK_8tuViftuE?8g`*+dJdBUf?7CQ^rA#Sp5U4}*+6 zfV?rvO$IcHxn`2+A-NrbhghrRc1Z2STER^ z4$(uo#Q}p1mtl*+y8jE2JqW*2TpG&4s$!&GEO)S~%FneO_^%T1KSG&R(OkQbG=%T# zwZ)3YatEu*Je3Tqdz%b8Ldy(Fm-6Lm$0a_%a>=n!}1@MUR(xQh^X<+>ms zw?;*WkXzxcwxH;6H3tU$DxFsP-YQ-+QqnXp28~V|1AV|4=)}*nO85rq_#_1k6nqjf zP;B;CnQx%rlORD{ys~&W^$gVVNx+`5n>{LwflAOwg`ZyomA17>wx_#V6vQIV{o>uOQSc2SGU<{uu16xf!c8rd#NQ4ouwQZ!0-vHB+}MHOmMei@~p zG<+_ad5lhyT~~@;m1Gxsm{g*I?o&&HSBXlptFkLmNp=D6=TxFwP>H%+SJUQ-&I(cR z?uJM0>E`Q@<*r)g@;kG{d*>+X< z2NSeD#ZtX87NA(`myo_nl|r;2g@9t75662Ipekq+g3o|$2fHX#0g6$e0u-ANe8yFP zC;+hys|M(dn1mF7KxbqdmV!;dBn&(=UJ5|v3cv`T0X!oGph5)*c*YfgZMFc!Fuq>^ z`tS_U8L0prJcDWcu^<~7c*a$L0?#BBAkx?ip)m@OQB4J?vW)^QufSD+%Cx*%(DJHx z=!{f=KxY)-85DqRiA|`)CcxP+1)xF!=+GG{0By@FHj0^I6yYBQ6$vLeYsf*$oHfWE ztl~%+yi*QP=BxpGuw+ikl;X}iVGouOh4oIx8fs91R-!Ln1<cDcpUk#sd63iMs)RxLH@S6AB|KT|5^K?Nfm2T%T&&6gPA|tf zI>U^Dm4H&Y!Aiq0(+M(@gPRI8<8afW(2O!$c*nLScBvd}n%Jd5X7Kj1=hT>`#46>2 z6;M+#O9@tpRkjn|k^{`BY}8bM8EiQfyA;&a17^f71vYiSOl+4jaPe_i0fVRxxktgK zCS(e+sM76hxCWelK7mu==o|BNZ4GerL2K`*t>Kwx@wSF%pRTJR_KC1*m)OKzja>5t zQ3RXyrVT1;p7~J|TZm)aw77W|3Y*qEPZ`|w1%sRZa~^IgIaJ~CqvESnq7|dA^6zYw zikm-*5h-+f8v3LYAVz|PYqF{ACYyutrOv}7N7Q8F@rd8H&T~yRmB6M^u)qe#93UpD z^Ztk>|E8_-ZHeDUjPoi2o9aBGTMlgM5#1ae^BQb=Mby-5u<13}v;b@>U7u9=rtx0a zU{kl1c#zi%mL^YOZ>0*-a$PUDb8qDp9XYhzm_i>>FtdBXLZNr~@uf^^7R8T~r#%>W zN~q(X=e9FINO=^27$5>CdR&)LQ*BXG zuM%|#kwU8571R`*XaGc?0;BpkoR*K8-sa&%9V2%6C^k0v8yNeN5xaK{VmAuWsw#Zn zpr*Cu?Ql&t_zYIwMy|SW#$R-T;_?;_cnQCQXS`N|MlT`1m5>jcVr#uY>$)fe=_F_m zHWlw^%0HFxW~BV{cr(iKW*lrP)t>@7lkjHREN=!YO!1Rr-i#Q9klL`r^hiO})Sxpl zZ>E4zIMh^H2@am|P*Y`5QyCOUP}3Zn5Y!ZtZgoPNDOmm`MqwISrsxSxA3?CPZWV?P zojMR(pwn0y)+7Wvtpapf5x!zlIkRlSW3ydqlPWsQo?)%MF{_}EzsW+{4jA#AxMIvXAi)qQj}tj#zH z<@-4Nt09~AEYvjIC5Wk^n|>Fj8iZvcPxXKSRZAp;|F(=%X>2$P6~?JY@pGJ^jwybQ zaViwQ#6k=6!3#1@#Y822$#43)zJ@SPJwmwaYe<_*A#!%9>Fa!T)YmYKQ;!ecIdJM4 zj*btmzz5HCl@BhI(*!w1o9#k4#qYwSu_4H5P8U9%-GvuEcsAu!pi?}+4GhPaa_V(9 zqS)zmHWXSLbUL=tpCU?Chu5IfEa=pK0CX4vaLeM4$AGv?2E{r22rvlI0uuMk>oUyl#&-OVjc44G%xHZ0NZ9F!-rPQ6AAw zv++||DR3E&%XRo^;V0F4vo!k+|JI|0f8LC=hXbezJ~P@1QZUSCHb_nn|z^XGw!byl)ikExr3h=h^M)sEA>&bSXw%g(L%NC08(`Lu=w)c&PKOKM-TUo`wzw2f(RfA;O_EoVx%5Y}W*k!_`m(8850boT?O7)k{>r zS9HR)<03+l7dy0#9YQE_%U`_MkwYl*Vn^{Q21_W4>kb)lxw^|=w0(TCqQ?j7_{sNi z@QA6xvSUF;Yy|Rly<%B`l8o3C9y=>OV&iW>$y>5;Gn}_c@|;rIB(J3ILJ-W0;onem zRfcaNnWze%l*jPEU8KyCg}4SQ9b`1zKKJpX&~909+=Z)%Wojq|bizJweYAE%<5R_j zr?a=>IQqCuUFjt6&tU8dJKhUy#gQ%ucD(0o#qkq=Z!3=Nf*{qC$Jt#7Z@%8lBA&&g zBwxRX76|gQX*ERXN1By5*fNL}8&6@&AYPb*-%Ihz`g-jD2cu?)-H3zF&cwpe#r3oX ze{IHMhkcE9wgcNeF<(bFhlkkNjygJd4m$C1coVe2@&?`$7lB7aRD^@0 z&=KJis6q*PDQ31h2?Bu*W7gzQdTbV#4ScHOGv@*fsM-7?SEk$_6$^;_8 z7#unsu}rYLcmPC#B}GOi5Q$w=|h46bw@+wUa2+7?YRcYKqhpMTeoB66~i7j1FP3(i|?^IJR zf=(k`oIEG085mBmiCl?VdSnu9;oPg-bCK0$cq*&ce~L1id^oqmjOMadBaMQe!n>ch z-O?Och)&uOFeqZIlj0|wn-HCZO4`xPSQes_a1&^hiknb0C3X{{l#qpTN{Q!$Ko%H` z{aBWF+38dlId%4wjR%j2o0R2YGM<{fJgk75)OHGP3wTzpBA5L{S-oQX>o0`QLMJQ2 z|1^b%?7>M%Zevl3ICMn`O+Lbpd?s3h<01T4G|wS8LD|;e#EuHX(ut#z;NcvVGV{8| zQRM^=I4UsDd`IO44-5uIS^?^r(FzO(O7IX*RUmj|Ev@oqmW7ep?Fp5eSq3FFc2z%> zG}pMQO{hjwMkmVM^)X4VAZK3PbA^kf747*O9f3ISYRJ&s+X^PRaphwWlAPhIY`VBg zw%`cm%v-XdFskbfUu7@ZP&}m~8oqK%HdL|&Ct?s7M{$MuRN*ayUCXC-z*CrQmtY}Q zhmVL_gx7Jd5#XaaM5#gboO&}@ZinpIXYn4_|MV7=EdkaIw;do+nML+ z05*Z%N6*o@F&gd15Sm4W93~xr+9IFC&W&18kG-Pb>N%l%l1yqn-}`z-^OuqxFBb zPc(;CPNr8M0=SR2zXxyMdMiDMw|^9GzjLj7xVolUL+Sp3c*;DIm$qu!Kf&$-!n;pL zDzgyn&4+KMH1eZ84OS`PDCQz&EW;DcH>BuseA_|1|MLNzLimuq3V$*=ewL%o?``A^ z-Z{|HpC^G0qqU#;G%s2E>4=!J_A`fwsT>otE4ZP*_wx@;qK%(@ z7XBZoPbv8z{Xvv%{?hbo{Qa}0AYgpOH}UgE1oPsLrsKQU1)K5zBZ52e z`(E=?3%PBp!cpE3tu5#qEXf@%0WgZJHlGo*tr;WIPw8O*Zd zd*$CdB3NvG%47Igo3D|7TXQfG|Bb=BHRHcKgQno`@!2oqp61|$-@r%q*RZSc>;C~Q CmwGS& literal 0 HcmV?d00001 diff --git a/Source/Apps/VGM/Tunes/ENDING.VGM b/Source/Apps/VGM/Tunes/ENDING.VGM new file mode 100644 index 0000000000000000000000000000000000000000..dcd349bca227864a77b8bd20ab5066ed8a67bf56 GIT binary patch literal 24213 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 literal 0 HcmV?d00001 diff --git a/Source/Apps/VGM/Tunes/FOREST.VGM b/Source/Apps/VGM/Tunes/FOREST.VGM new file mode 100644 index 0000000000000000000000000000000000000000..11d43f0d3c2efa2c8f4e15023086b22d5e4cd305 GIT binary patch literal 41088 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 literal 0 HcmV?d00001 diff --git a/Source/Apps/VGM/Tunes/INCHINA.VGM b/Source/Apps/VGM/Tunes/INCHINA.VGM new file mode 100644 index 0000000000000000000000000000000000000000..cb73e2c728a3d1b110c6e9c6b70657c73397384e GIT binary patch literal 44928 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 NzKXy2-zDk4{|gcqDog+X literal 0 HcmV?d00001 diff --git a/Source/Apps/VGM/Tunes/QIX.VGM b/Source/Apps/VGM/Tunes/QIX.VGM new file mode 100644 index 0000000000000000000000000000000000000000..f3d46790c86f132f33cec7ec388a05ea91a94d08 GIT binary patch literal 24696 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 H{O^AO@OUb_ literal 0 HcmV?d00001 diff --git a/Source/Apps/VGM/Tunes/SHIRAKAW.VGM b/Source/Apps/VGM/Tunes/SHIRAKAW.VGM new file mode 100644 index 0000000000000000000000000000000000000000..c6cf01b6e0b2f726891fa3b9355db0f56d22122f GIT binary patch literal 31104 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 NwF0k|npXVZp8+p@n&bcg literal 0 HcmV?d00001 diff --git a/Source/Apps/VGM/Tunes/STARTDEM.VGM b/Source/Apps/VGM/Tunes/STARTDEM.VGM new file mode 100644 index 0000000000000000000000000000000000000000..66b578175503cf8fcd27297949f75d611b2e72ea GIT binary patch literal 29312 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 literal 0 HcmV?d00001 diff --git a/Source/Apps/VGM/Tunes/TEDDY.VGM b/Source/Apps/VGM/Tunes/TEDDY.VGM new file mode 100644 index 0000000000000000000000000000000000000000..4b30c5620e2e34661fa40bb7fb5578c364bc3d6d GIT binary patch literal 51584 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 IywZRF2mQwCp8x;= diff --git a/Source/Apps/VGM/YM2612.ASM b/Source/Apps/VGM/YM2612.ASM index bd27b33b..367dc5d6 100644 --- a/Source/Apps/VGM/YM2612.ASM +++ b/Source/Apps/VGM/YM2612.ASM @@ -26,7 +26,7 @@ ctcbase .equ $cc #DEFCONT \ rlca #DEFCONT \ jp c,$-3 -init: call ctc_config +init: ;call ctc_config setreg($22,$00) ; lfo off YM2612 initialization setreg($27,$00) ; note off ch 0 diff --git a/Source/Apps/VGM/vgmplay.asm b/Source/Apps/VGM/vgmplay.asm index e4581e1d..423843d2 100644 --- a/Source/Apps/VGM/vgmplay.asm +++ b/Source/Apps/VGM/vgmplay.asm @@ -9,122 +9,175 @@ ; YM2151 support from Ed Brindley ; ; YM2162/YM3484, GD3 support, VGM Chip identification, -; default file type, basic file size checking added by Phil Summers +; default file type, basic file size checking, polled CTC mode +; added by Phil Summers ; ; Bugs: YM2151 playback untested & no mute. +; CTC polled timing - predicted 44100 divider is too slow ; ; Assemble with: ; ; TASM -80 -b VGMPLAY.ASM VGMPLAY.COM ; +; +; A VGM file can play 44100 samples a second. This may be sound chip +; register commands or PCM data. This player does not support PCM playback +; due to the high processor speed and file size required. Typical VGM files +; available use a much lower sample rate and are playable. Where the processor +; speed is low and the sample rate is high, the playback overhead will cause +; playback speed to be inaccurate. + ;------------------------------------------------------------------------------ ; Device and system specific definitions ;------------------------------------------------------------------------------ ; -P8X180 .EQU 0 ; System configuration -RC2014 .EQU 0 -SBCECB .EQU 1 -MBC .EQU 0 -; - .IF P8X180 -RSEL .EQU 82H ; Primary AY-3-8910 Register selection -RDAT .EQU 83H ; Primary AY-3-8910 Register data -RSEL2 .EQU 88H ; Secondary AY-3-8910 Register selection -RDAT2 .EQU 89H ; Secondary AY-3-8910 Register data -PSG1REG .EQU 84H ; Primary SN76489 -PSG2REG .EQU 8AH ; Secondary SN76489 -YM2151_SEL1 .EQU 0B0H ; Primary YM2151 register selection -YM2151_DAT1 .EQU 0B1H ; Primary YM2151 register data -YM2151_SEL2 .EQU 0B2H ; Secondary YM2151 register selection -YM2151_DAT2 .EQU 0B3H ; Secondary YM2151 register data -FRAME_DLY .EQU 48 ; Frame delay (~ 1/44100) - .ENDIF -; - .IF RC2014 -RSEL .EQU 0D8H ; Primary AY-3-8910 Register selection -RDAT .EQU 0D0H ; Primary AY-3-8910 Register data -RSEL2 .EQU 0A0H ; Secondary AY-3-8910 Register selection -RDAT2 .EQU 0A1H ; Secondary AY-3-8910 Register data -PSG1REG .EQU 0FFH ; Primary SN76489 -PSG2REG .EQU 0FBH ; Secondary SN76489 -YM2151_SEL1 .EQU 0FEH ; Primary YM2151 register selection -YM2151_DAT1 .EQU 0FFH ; Primary YM2151 register data -YM2151_SEL2 .EQU 0D0H ; Secondary YM2151 register selection -YM2151_DAT2 .EQU 0D1H ; Secondary YM2151 register data -FRAME_DLY .EQU 15 ; Frame delay (~ 1/44100) - .ENDIF -; - .IF SBCECB -RSEL .EQU 0D8H ; Primary AY-3-8910 Register selection -RDAT .EQU 0D0H ; Primary AY-3-8910 Register data -RSEL2 .EQU 0A0H ; Secondary AY-3-8910 Register selection -RDAT2 .EQU 0A1H ; Secondary AY-3-8910 Register data -YMSEL .EQU 0C0H ; Primary YM2162 11000000 a1=0 a0=0 -YMDAT .EQU 0C1H ; Primary YM2162 11000001 a1=0 a0=1 -YM2SEL .EQU 0C2H ; Secondary YM2162 11000010 a1=1 a0=0 -YM2DAT .EQU 0C3H ; Secondary YM2162 11000011 a1=1 a0=1 -PSG1REG .EQU 0C6H ; Primary SN76489 -PSG2REG .EQU 0C7H ; Secondary SN76489 -YM2151_SEL1 .EQU 0FEH ; Primary YM2151 register selection -YM2151_DAT1 .EQU 0FFH ; Primary YM2151 register data -YM2151_SEL2 .EQU 0FEH ; Secondary YM2151 register selection -YM2151_DAT2 .EQU 0FFH ; Secondary YM2151 register data -FRAME_DLY .EQU 8 ; Frame delay (~ 1/44100) - .ENDIF -; - .IF MBC -RSEL .EQU 0A0H ; Primary AY-3-8910 Register selection -RDAT .EQU 0A1H ; Primary AY-3-8910 Register data -RSEL .EQU 0D8H ; Secondary AY-3-8910 Register selection -RDAT .EQU 0D0H ; Secondary AY-3-8910 Register data -YMSEL .EQU 0C0H ; 11000000 a1=0 a0=0 -YMDAT .EQU 0C1H ; 11000001 a1=0 a0=1 -YM2SEL .EQU 0C2H ; 11000010 a1=1 a0=0 -YM2DAT .EQU 0C3H ; 11000011 a1=1 a0=1 -PSGREG .EQU 0C6H ; Primary SN76489 -PSG2REG .EQU 0C7H ; Secondary SN76489 -YM2151_SEL1 .EQU 0FEH ; Primary YM2151 register selection -YM2151_DAT1 .EQU 0FFH ; Primary YM2151 register data -YM2151_SEL2 .EQU 0FEH ; Secondary YM2151 register selection -YM2151_DAT2 .EQU 0FFH ; Secondary YM2151 register data -FRAME_DLY .EQU 10 ; Frame delay (~ 1/44100) - .ENDIF -; -;------------------------------------------------------------------------------ -; Your customer overrides can go in here i.e. ports -;------------------------------------------------------------------------------ -; -;RSEL .SET 09AH ; Primary AY-3-8910 Register selection -;RDAT .SET 09BH ; Primary AY-3-8910 Register data -; -;------------------------------------------------------------------------------ -; Frame delay overide values for different processor speeds. -;------------------------------------------------------------------------------ -; -;FRAME_DLY .SET 10 ; 1Mhz ; not -;FRAME_DLY .SET 10 ; 2Mhz ; implemented -;FRAME_DLY .SET 10 ; 4Mhz ; yet -;FRAME_DLY .SET 15 ; 8Mhz -;FRAME_DLY .SET 10 ; 10Mhz -;FRAME_DLY .SET 20 ; 12Mhz -; -;------------------------------------------------------------------------------ -; Frame delay values for pal/ntsc -;------------------------------------------------------------------------------ -; -D60 .EQU 735 -D50 .EQU 882 +custom .equ 0 ; System configurations +P8X180 .equ 1 +RC2014 .equ 2 +sbcecb .equ 3 +MBC .equ 4 +; +plt_romwbw .equ 1 ; Build for ROMWBW? +plt_type .equ custom ; Select build configuration +debug .equ 1 ; Debugging output +; +#IF (plt_type=custom) +RSEL .equ 0D8H ; Primary AY-3-8910 Register selection +RDAT .equ 0D0H ; Primary AY-3-8910 Register data +RSEL .SET 09AH ; Primary AY-3-8910 Register selection +RDAT .SET 09BH ; Primary AY-3-8910 Register data +RSEL2 .equ 88H ; Secondary AY-3-8910 Register selection +RDAT2 .equ 89H ; Secondary AY-3-8910 Register data +VGMBASE .equ $C0 +YMSEL .equ VGMBASE+00H ; Primary YM2162 11000000 a1=0 a0=0 +YMDAT .equ VGMBASE+01H ; Primary YM2162 11000001 a1=0 a0=1 +YM2SEL .equ VGMBASE+02H ; Secondary YM2162 11000010 a1=1 a0=0 +YM2DAT .equ VGMBASE+03H ; Secondary YM2162 11000011 a1=1 a0=1 +PSG1REG .equ VGMBASE+08H ; Primary SN76489 +PSG2REG .equ VGMBASE+09H ; Secondary SN76489 +ctcbase .equ VGMBASE+0CH ; CTC base address +YM2151_SEL1 .equ 0FEH ; Primary YM2151 register selection +YM2151_DAT1 .equ 0FFH ; Primary YM2151 register data +YM2151_SEL2 .equ 0FEH ; Secondary YM2151 register selection +YM2151_DAT2 .equ 0FFH ; Secondary YM2151 register data +FRAME_DLY .equ 10 ; Frame delay (~ 1/44100) +plt_cpuspd .equ 6 ; Non ROMWBW cpu speed default +#ENDIF +; +#IF (plt_type=P8X180) +RSEL .equ 82H ; Primary AY-3-8910 Register selection +RDAT .equ 83H ; Primary AY-3-8910 Register data +RSEL2 .equ 88H ; Secondary AY-3-8910 Register selection +RDAT2 .equ 89H ; Secondary AY-3-8910 Register data +PSG1REG .equ 84H ; Primary SN76489 +PSG2REG .equ 8AH ; Secondary SN76489 +YM2151_SEL1 .equ 0B0H ; Primary YM2151 register selection +YM2151_DAT1 .equ 0B1H ; Primary YM2151 register data +YM2151_SEL2 .equ 0B2H ; Secondary YM2151 register selection +YM2151_DAT2 .equ 0B3H ; Secondary YM2151 register data +ctcbase .equ 000H ; CTC base address +YMSEL .equ 000H ; Primary YM2162 11000000 a1=0 a0=0 +YMDAT .equ 000H ; Primary YM2162 11000001 a1=0 a0=1 +YM2SEL .equ 000H ; Secondary YM2162 11000010 a1=1 a0=0 +YM2DAT .equ 000H ; Secondary YM2162 11000011 a1=1 a0=1 +FRAME_DLY .equ 48 ; Frame delay (~ 1/44100) +plt_cpuspd .equ 20 ; Non ROMWBW cpu speed default +#ENDIF +; +#IF (plt_type=RC2014) +RSEL .equ 0D8H ; Primary AY-3-8910 Register selection +RDAT .equ 0D0H ; Primary AY-3-8910 Register data +RSEL2 .equ 0A0H ; Secondary AY-3-8910 Register selection +RDAT2 .equ 0A1H ; Secondary AY-3-8910 Register data +PSG1REG .equ 0FFH ; Primary SN76489 +PSG2REG .equ 0FBH ; Secondary SN76489 +YM2151_SEL1 .equ 0FEH ; Primary YM2151 register selection +YM2151_DAT1 .equ 0FFH ; Primary YM2151 register data +YM2151_SEL2 .equ 0D0H ; Secondary YM2151 register selection +YM2151_DAT2 .equ 0D1H ; Secondary YM2151 register data +ctcbase .equ 000H ; CTC base address +YMSEL .equ 000H ; Primary YM2162 11000000 a1=0 a0=0 +YMDAT .equ 000H ; Primary YM2162 11000001 a1=0 a0=1 +YM2SEL .equ 000H ; Secondary YM2162 11000010 a1=1 a0=0 +YM2DAT .equ 000H ; Secondary YM2162 11000011 a1=1 a0=1 +FRAME_DLY .equ 12 ; Frame delay (~ 1/44100) +plt_cpuspd .equ 7 ; Non ROMWBW cpu speed default +#ENDIF +; +#IF (plt_type=sbcecb) +RSEL .equ 0D8H ; Primary AY-3-8910 Register selection +RDAT .equ 0D0H ; Primary AY-3-8910 Register data +RSEL2 .equ 0A0H ; Secondary AY-3-8910 Register selection +RDAT2 .equ 0A1H ; Secondary AY-3-8910 Register data +VGMBASE .equ $C0 +YMSEL .equ VGMBASE+00H ; Primary YM2162 11000000 a1=0 a0=0 +YMDAT .equ VGMBASE+01H ; Primary YM2162 11000001 a1=0 a0=1 +YM2SEL .equ VGMBASE+02H ; Secondary YM2162 11000010 a1=1 a0=0 +YM2DAT .equ VGMBASE+03H ; Secondary YM2162 11000011 a1=1 a0=1 +PSG1REG .equ VGMBASE+08H ; Primary SN76489 +PSG2REG .equ VGMBASE+09H ; Secondary SN76489 +ctcbase .equ VGMBASE+0CH ; CTC base address +YM2151_SEL1 .equ 0FEH ; Primary YM2151 register selection +YM2151_DAT1 .equ 0FFH ; Primary YM2151 register data +YM2151_SEL2 .equ 0FEH ; Secondary YM2151 register selection +YM2151_DAT2 .equ 0FFH ; Secondary YM2151 register data +FRAME_DLY .equ 13 ; Frame delay (~ 1/44100) +plt_cpuspd .equ 8 ; Non ROMWBW cpu speed default +#ENDIF +; +#IF (plt_type=MBC) +RSEL .equ 0A0H ; Primary AY-3-8910 Register selection +RDAT .equ 0A1H ; Primary AY-3-8910 Register data +RSEL2 .equ 0D8H ; Secondary AY-3-8910 Register selection +RDAT2 .equ 0D0H ; Secondary AY-3-8910 Register data +YMSEL .equ 0C0H ; 11000000 a1=0 a0=0 +YMDAT .equ 0C1H ; 11000001 a1=0 a0=1 +YM2SEL .equ 0C2H ; 11000010 a1=1 a0=0 +YM2DAT .equ 0C3H ; 11000011 a1=1 a0=1 +PSG1REG .equ 0C6H ; Primary SN76489 +PSG2REG .equ 0C7H ; Secondary SN76489 +ctcbase .equ 000H ; CTC base address +YM2151_SEL1 .equ 0FEH ; Primary YM2151 register selection +YM2151_DAT1 .equ 0FFH ; Primary YM2151 register data +YM2151_SEL2 .equ 0FEH ; Secondary YM2151 register selection +YM2151_DAT2 .equ 0FFH ; Secondary YM2151 register data +FRAME_DLY .equ 13 ; Frame delay (~ 1/44100) +plt_cpuspd .equ 8 ; Non ROMWBW cpu speed default +#ENDIF +; +;------------------------------------------------------------------------------ +; Configure timing loop +;------------------------------------------------------------------------------ +; +cpu_loop: .equ 0 +ctc_poll: .equ 1 +ctc_int: .equ 2 ; not implemented +; +delay_type: .equ ctc_poll ; cpu timed loop or utilize ctc +delay_wait .equ 0 ; funny wait mode +; +D60 .equ 735 ; 735x60=44100 Frame delay values for ntsc +D50 .equ 882 ; 882x50=44100 Frame delay values for pal +; +;------------------------------------------------------------------------------ +; CTC Defaults +;------------------------------------------------------------------------------ +; +ctcdiv0 .equ 1 ; Divider chain for 3.579545MHz input +ctcdiv1 .equ 1 ; Ctc with 3 step divider base address +ctcdiv2 .equ 16 +ctcdiv3 .equ 3 ; 3579545 / 1 / 2 / 41 = 43653 = 1% error ; ;------------------------------------------------------------------------------ ; Processor speed control for SBCV2004+ ;------------------------------------------------------------------------------ ; ;#DEFINE SBCV2004 ; My SBC board at 12Mhz needs this to switch to -HB_RTCVAL .EQU 0FFEEH ; 6MHz for it to work with the ECB-VGM reliably. -RTCIO .EQU 070H - +HB_RTCVAL .equ 0FFEEH ; 6MHz for it to work with the ECB-VGM reliably. +RTCIO .equ 070H +; ;------------------------------------------------------------------------------ -; YM2162 Register write macros +; YM2162 Register write macros - with wait and timeout ;------------------------------------------------------------------------------ ; #DEFINE setreg(reg,val) \ @@ -132,53 +185,57 @@ RTCIO .EQU 070H #DEFCONT \ out (YMSEL),a #DEFCONT \ ld a,val #DEFCONT \ out (YMDAT),a +#DEFCONT \ ld b,0 #DEFCONT \ in a,(YMSEL) #DEFCONT \ rlca -#DEFCONT \ jp c,$-3 +#DEFCONT \ jp nc,$+5 +#DEFCONT \ djnz $-6 ; #DEFINE setreg2(reg,val) \ #DEFCONT \ ld a,reg #DEFCONT \ out (YM2SEL),a #DEFCONT \ ld a,val #DEFCONT \ out (YM2DAT),a +#DEFCONT \ ld b,0 #DEFCONT \ in a,(YMSEL) #DEFCONT \ rlca -#DEFCONT \ jp c,$-3 +#DEFCONT \ jp nc,$+5 +#DEFCONT \ djnz $-6 ;------------------------------------------------------------------------------ ; VGM Codes ;------------------------------------------------------------------------------ -VGM_GG_W .EQU 04FH ; GAME GEAR PSG STEREO. WRITE DD TO PORT 0X06 -VGM_PSG1_W .EQU 050H ; PSG (SN76489/SN76496) #1 WRITE VALUE DD -VGM_PSG2_W .EQU 030H ; PSG (SN76489/SN76496) #2 WRITE VALUE DD -VGM_YM26121_W .EQU 052H ; YM2612 #1 WRITE VALUE DD -VGM_YM26122_W .EQU 053H ; YM2612 #2 WRITE VALUE DD -VGM_WNS .EQU 061H ; WAIT N SAMPLES -VGM_W735 .EQU 062H ; WAIT 735 SAMPLES (1/60TH SECOND) -VGM_W882 .EQU 063H ; WAIT 882 SAMPLES (1/50TH SECOND) -VGM_ESD .EQU 066H ; END OF SOUND DATA -VGM_YM21511_W .EQU 054H ; YM2612 #1 WRITE VALUE DD -VGM_YM21512_W .EQU 0A4H ; YM2612 #2WRITE VALUE DD +VGM_GG_W .equ 04FH ; GAME GEAR PSG STEREO. WRITE DD TO PORT 0X06 +VGM_PSG1_W .equ 050H ; PSG (SN76489/SN76496) #1 WRITE VALUE DD +VGM_PSG2_W .equ 030H ; PSG (SN76489/SN76496) #2 WRITE VALUE DD +VGM_YM26121_W .equ 052H ; YM2612 #1 WRITE VALUE DD +VGM_YM26122_W .equ 053H ; YM2612 #2 WRITE VALUE DD +VGM_WNS .equ 061H ; WAIT N SAMPLES +VGM_W735 .equ 062H ; WAIT 735 SAMPLES (1/60TH SECOND) +VGM_W882 .equ 063H ; WAIT 882 SAMPLES (1/50TH SECOND) +VGM_ESD .equ 066H ; END OF SOUND DATA +VGM_YM21511_W .equ 054H ; YM2612 #1 WRITE VALUE DD +VGM_YM21512_W .equ 0A4H ; YM2612 #2 WRITE VALUE DD ;------------------------------------------------------------------------------ ; Generic CP/M definitions ;------------------------------------------------------------------------------ -BOOT .EQU 0000H ; boot location -BDOS .EQU 0005H ; bdos entry point -FCB .EQU 005CH ; file control block -FCBCR .EQU FCB + 20H ; fcb current record -BUFF .EQU 0080H ; DMA buffer -TOPM .EQU 0002H ; Top of memory +BOOT .equ 0000H ; boot location +BDOS .equ 0005H ; bdos entry point +FCB .equ 005CH ; file control block +FCBCR .equ FCB + 20H ; fcb current record +BUFF .equ 0080H ; DMA buffer +TOPM .equ 0002H ; Top of memory -PRINTF .EQU 9 ; BDOS print string function -OPENF .EQU 15 ; BDOS open file function -CLOSEF .EQU 16 ; BDOS close file function -READF .EQU 20 ; BDOS sequential read function +PRINTF .equ 9 ; BDOS print string function +OPENF .equ 15 ; BDOS open file function +CLOSEF .equ 16 ; BDOS close file function +READF .equ 20 ; BDOS sequential read function -CR .EQU 0DH ; carriage return -LF .EQU 0AH ; line feed +CR .equ 0DH ; carriage return +LF .equ 0AH ; line feed ;------------------------------------------------------------------------------ ; Program Start @@ -188,12 +245,29 @@ LF .EQU 0AH ; line feed LD (OLDSTACK),SP ; save old stack pointer LD SP,STACK ; set new stack pointer - - LD DE,MSG_WELC ; Welcome Message - CALL PRTSTR - +; +#IF (delay_type==cpu_loop) + call setfdelay ; Setup the frame delay based on cpu speed +#ENDIF +; +#IF (delay_type==ctc_poll) + call cfgctc_poll ; If building for polled ctc, initialize it +#ENDIF +; +#IF (delay_type==ctc_int) ; If building for interrupt driven ctc, initialize it + call cfgctc_int +#ENDIF +; +#IF (debug) +; LD A,0 ; tone to validate presence +;TST: LD C,PSG1REG +; OUT (C),A +; LD C,PSG2REG +; OUT (C),A +; JR TST +#ENDIF + call welcome ; Welcome message and build debug info CALL READVGM ; Read in the VGM file - CALL VGMINFO ; Check and display VGM Information LD HL, (VGMDATA + 34H) ; Determine start of VGM @@ -209,21 +283,50 @@ _S1 LD DE, VGMDATA + 34H LD (VGMDLY), HL MAINLOOP CALL PLAY ; Play one frame - - LD C,6 ; Check for keypress +; + LD HL,KEYCHK ; Check for keypress + DEC (HL) + JR NZ,NO_CHK + LD C,6 ; Every 256 commands LD E,0FFH CALL BDOS OR A JR NZ,EXIT +NO_CHK: +#IF (delay_type==cpu_loop) + LD HL,(VGMDLY) ; Frame delay +fdelay: .equ $+1 +lp1: LD B,FRAME_DLY ; 44100 one frame = 0.0000226757 seconds + DJNZ $ + DEC HL + LD A,H + OR L + JR NZ,lp1 +#ENDIF - LD HL,(VGMDLY) ; Frame delay -L1 LD B,FRAME_DLY - DJNZ $ - DEC HL - LD A,H - OR L - JR NZ,L1 - +#IF (delay_type==ctc_poll) + LD HL,(VGMDLY) ; Frame delay +lp1: in a,(ctcch3) ; wait for counter to reach zero + dec a + jr nz,lp1 +#IF (delay_wait) +lp2: in a,(ctcch3) ; wait for counter to pass zero + dec a + jr z,lp2 + +lp3: in a,(ctcch3) ; wait for counter to reach zero + dec a + jr nz,lp3 +#ENDIF + DEC HL + LD A,H + OR L + JR NZ,lp1 +#ENDIF +; +#IF (delay_type==ctc_int) +#ENDIF +; JR MAINLOOP ; ;------------------------------------------------------------------------------ @@ -240,6 +343,194 @@ EXIT: CALL VGMDEVICES ; Display devices used EXIT_ERR: CALL PRTSTR ; Generic message or error LD SP, (OLDSTACK) ; Exit to CP/M RST 00H + DI + HALT +; +;------------------------------------------------------------------------------ +; Welcome +;------------------------------------------------------------------------------ +; +welcome: LD DE,MSG_WELC ; Welcome Message + CALL PRTSTR +; +#IF (plt_romwbw) + LD DE,MSG_ROMWBW ; display system type + CALL PRTSTR +#ENDIF +; + LD A,delay_type ; display build type + LD DE,MSG_CPU + CALL PRTIDXDEA +; + LD A,plt_type ; display system type + LD DE,MSG_CUSTOM + CALL PRTIDXDEA + call CRLF +; +#IF (debug) +#IF (delay_type==cpu_loop) + ld a,'f' ; Display frame rate delay + call PRTCHR + call PRTDOT + ld a,(fdelay) + call PRTDECB + LD A,' ' +#ENDIF + CALL PRTCHR + ld a,'c' + call PRTCHR + call PRTDOT + ld a,ctcdiv0 ; Display ctc divider values + call PRTDECB + CALL PRTDOT + ld a,ctcdiv1 + call PRTDECB + CALL PRTDOT + ld a,ctcdiv2 + call PRTDECB + CALL PRTDOT + ld a,ctcdiv3 + call PRTDECB +; +#IF (delay_wait) + ld a,' ' + CALL PRTCHR + LD A,'w' ; Display if using double wait + CALL PRTCHR +#ENDIF +#ENDIF + CALL CRLF + ret +; +;------------------------------------------------------------------------------ +; Setup frame delay value - Loop count for DJNZ $ loop +;------------------------------------------------------------------------------ +; +setfdelay: +#IF (delay_type==cpu_loop) +#IF (plt_romwbw) + LD BC,$F8F0 ; GET CPU SPEED + RST 08 ; FROM HBIOS + LD A,L ; +#ELSE + ld a,plt_cpuspd ; USE STANDALONE CPU SPEED +#ENDIF + LD HL,CLKTBL-1 ; CPU SPEED + ADD A,L ; INDEXES + LD L,A ; INTO + ADC A,H ; TABLE + SUB L + LD H,A ; LOOK IT UP IN THE + LD A,(HL) ; CLOCK TABLE + + LD (fdelay),A ; SAVE LOOP COUNTER FOR CPU SPEED + RET + +;------------------------------------------------------------------------------ +; Frame delay values for different processor speeds. +;------------------------------------------------------------------------------ +; +; 1/44100hz = 22676ns +; 16Mhz = 62.5ns : DJNZ $ = 1 frame delay= 22676ns/13*62.5ns = 27.91 +; 12Mhz = 83.3ns : DJNZ $ = 1 frame delay= 22676ns/13*83.3ns = 20.94 +; 10Mhz = 100ns : DJNZ $ = 1 frame delay= 22676ns/13*100ns = 17.44 +; 8Mhz = 125ns : DJNZ $ = 1 frame delay= 22676ns/13*125ns = 13.95 +; 7.3728Mhz = 135.6ns : DJNZ $ = 1 frame delay= 22676ns/13*135.6ns = 12.86 +; 6Mhz = 166.6s : DJNZ $ = 1 frame delay= 22676ns/13*166.6ns = 10.47 +; 4Mhz = 250ns : DJNZ $ = 1 frame delay= 22676ns/13*250ns = 6.98 +; 2Mhz = 500ns : DJNZ $ = 1 frame delay= 22676ns/13*500ns = 3.49 +; 1Mhz = 1000ns : DJNZ $ = 1 frame delay= 22676ns/13*1000ns = 1.74 +; +CLKTBL: .DB 1 ; 1Mhz ; none of these + .DB 3 ; 2Mhz ; have been + .DB 0 ; 3Mhz ; validated + .DB 6 ; 4Mhz + .DB 0 ; 5Mhz + .DB 10 ; 6Mhz + .DB 12 ; 7Mhz 7.3728Mhz + .DB 13 ; 8Mhz + .DB 0 ; 9Mhz + .DB 17 ; 10Mhz + .DB 0 ; 11Mhz + .DB 20 ; 12Mhz + .DB 0 ; 13Mhz + .DB 0 ; 14Mhz + .DB 0 ; 15Mhz + .DB 27 ; 16Mhz + .DB 0 ; 17Mhz + .DB 0 ; 18Mhz + .DB 0 ; 19Mhz + .DB 0 ; 20Mhz +#ENDIF +; +;------------------------------------------------------------------------------ +; Initialize CTC +;------------------------------------------------------------------------------ +; +; %01010011 ; CTC DEFAULT CONFIG +; %01010111 ; CTC COUNTER MODE CONFIG +; %11010111 ; CTC COUNTER INTERRUPT MODE CONFIG +; |||||||+-- CONTROL WORD FLAG +; ||||||+--- SOFTWARE RESET +; |||||+---- TIME CONSTANT FOLLOWS +; ||||+----- AUTO TRIGGER WHEN TIME CONST LOADED +; |||+------ RISING EDGE TRIGGER +; ||+------- TIMER MODE PRESCALER (0=16, 1=256) +; |+-------- COUNTER MODE +; +--------- INTERRUPT ENABLE +; +cfgctc_poll: +; +ctcch0 .equ ctcbase +ctcch1 .equ ctcbase+1 +ctcch2 .equ ctcbase+2 +ctcch3 .equ ctcbase+3 +; +ctccfg0 .equ %01010011 +ctccfg1 .equ %01010111 +ctccfg2 .equ %01010111 +ctccfg3 .equ %01010111 +; + ld a,ctccfg0 & $7f ; ; Channel 0 + out (ctcch0),a +; + ld a,ctccfg1 & $7f ; Channel 1 + out (ctcch1),a ; + ld a,ctcdiv1 & $ff ; + out (ctcch1),a ; +; + ld a,ctccfg2 & $7f ; Channel 2 + out (ctcch2),a ; + ld a,ctcdiv2 & $ff ; + out (ctcch2),a ; +; + ld a,ctccfg3 & $7f ; Channel 3 + out (ctcch3),a ; + ld a,ctcdiv3 & $ff ; + out (ctcch3),a ; +; + ret +; +#IF (debug) +ctctest: + ld b,0 + +ctclp1: in a,(ctcch3) ; wait for counter to reach zero + dec a + jr nz,ctclp1 + +ctclp2: in a,(ctcch3) ; wait for counter to pass zero + dec a + jr z,ctclp2 + + call PRTDOT +; + djnz ctclp1 +#ENDIF + ret +; +cfgctc_int: + ret ; ;------------------------------------------------------------------------------ ; Read VGM file into memory @@ -406,18 +697,19 @@ NEXT LD A, (HL) LD HL, (VGMDATA + 1CH) ; Loop offset LD A, H OR L - JP Z, EXIT + JP Z, EXIT LD DE, VGMDATA + 1CH ADD HL, DE LD (VGMPOS), HL JR NEXT -NEXT1 CP VGM_GG_W ; Game Gear SN76489 stereo. Ignored - JR NZ, PSG - LD IX,VGM_DEV - SET 0,(IX+1) - INC HL - JR NEXT +NEXT1: +; CP VGM_GG_W ; Game Gear SN76489 stereo. Ignored +; JR NZ, PSG +; LD IX,VGM_DEV +; SET 0,(IX+1) +; INC HL +; JR NEXT ; SN76489 SECTION @@ -426,7 +718,6 @@ PSG CP VGM_PSG1_W ; Write byte to SN76489. LD A, (HL) INC HL OUT (PSG1REG), A - LD IX,VGM_DEV SET 0,(IX+0) JR NEXT @@ -435,7 +726,6 @@ PSG2 CP VGM_PSG2_W ; Write byte to second SN76489. LD A, (HL) INC HL OUT (PSG2REG), A - LD IX,VGM_DEV SET 1,(IX+0) JR NEXT @@ -452,14 +742,12 @@ AY CP 0A0H LD A, (HL) INC HL OUT (RDAT2), A - LD IX,VGM_DEV SET 2,(IX+0) JR NEXT AY1 OUT (RSEL), A LD A, (HL) INC HL OUT (RDAT), A - LD IX,VGM_DEV SET 3,(IX+0) JR NEXT @@ -473,7 +761,6 @@ YM2162_1 CP VGM_YM26121_W LD A,(HL) OUT (YMDAT),A INC HL - LD IX,VGM_DEV SET 4,(IX+0) JP NEXT ; @@ -485,7 +772,6 @@ YM2162_2 CP VGM_YM26122_W LD A,(HL) OUT (YM2DAT),A INC HL - LD IX,VGM_DEV SET 4,(IX+0) ; 2nd channel JP NEXT @@ -499,7 +785,6 @@ YM2151_1 CP VGM_YM21511_W LD A,(HL) OUT (YM2151_DAT1),A INC HL - LD IX,VGM_DEV SET 6,(IX+0) JP NEXT ; @@ -511,7 +796,6 @@ YM2151_2 CP VGM_YM21512_W LD A,(HL) OUT (YM2151_DAT2),A INC HL - LD IX,VGM_DEV SET 7,(IX+0) JP NEXT ; @@ -551,8 +835,7 @@ WAIT1 CP 70H ; WAIT 0-15 SAMPLES LD (VGMDLY), HL RET ; -UNK LD IX,VGM_DEV ; Set flag for - SET 0,(IX+1) ; unknown device +UNK: SET 0,(IX+1) ; unknown device INC HL ; Try and skip JP NEXT ; @@ -609,12 +892,6 @@ CHKDEV: AND %00000011 ; Display CALL PRTCHR ; Skip if not CALL PRTSTR ; used. RET - -DEBUG: PUSH AF - LD A,'*' - CALL PRTCHR - POP AF - RET ; ;------------------------------------------------------------------------------ ; Mute Devices. @@ -939,6 +1216,28 @@ FASTIO: RET ; ;------------------------------------------------------------------------------ +; PRINT THE nTH STRING IN A LIST OF STRINGS WHERE EACH IS TERMINATED BY 0 +; A REGISTER DEFINES THE nTH STRING IN THE LIST TO PRINT AND DE POINTS +; TO THE START OF THE STRING LIST. +;------------------------------------------------------------------------------ +; +PRTIDXDEA: + LD C,A + OR A +PRTIDXDEA1: + JR Z,PRTIDXDEA3 ; FOUND TARGET SO EXIT +PRTIDXDEA2: + LD A,(DE) ; LOOP UNIT + INC DE ; WE REACH + OR A ; END OF STRING + JR NZ,PRTIDXDEA2 + DEC C ; AT STRING END. SO GO + JR PRTIDXDEA1 ; CHECK FOR INDEX MATCH +PRTIDXDEA3: + CALL PRTSTR ; DISPLAY THE STRING + RET +; +;------------------------------------------------------------------------------ ; External routines. ;------------------------------------------------------------------------------ ; @@ -948,8 +1247,8 @@ FASTIO: ; Strings and constants. ;------------------------------------------------------------------------------ ; -MSG_WELC: .DB "VGM Player for RomWBW v0.3, 2-Jul-2022",CR,LF -; .DB "J.B. Langston/Marco Maccaferri/Phil Summers",CR,LF +MSG_WELC: .DB "VGM Player v0.4, 11-Dec-2022" +; .DB CR,LF, "J.B. Langston/Marco Maccaferri/Ed Brindley/Phil Summers",CR,LF .DB 0 MSG_BADF: .DB "Not a VGM file",CR,LF,0 MSG_PO .DB "Played on : ",0 @@ -963,6 +1262,15 @@ MSG_NOFILE: .DB "File not found", CR, LF, 0 MSG_MEM: .DB "File to big", CR, LF, 0 MSG_TITLE: .DB " from: ",0 MSG_TRACK .DB "Playing: ",0 +MSG_CPU .DB "[cpu]",0 +MSG_CTCPOLL .DB "[ctc polled]",0 +MSG_CTCINT .DB "[ctc interrupts]",0 +MSG_ROMWBW .DB " [romwbw] ",0 +MSG_CUSTOM .DB " [custom] ",0 +MSG_P8X180 .DB " [p8x180] ",0 +MSG_RC2014 .DB " [rc2014] ",0 +MSG_SBCECB .DB " [sbc] ",0 +MSG_MBC .DB " [mbc] ",0 ; ;------------------------------------------------------------------------------ ; Variables @@ -970,10 +1278,17 @@ MSG_TRACK .DB "Playing: ",0 ; VGMPOS .DW 0 VGMDLY .DW 0 -VGMUNK_F .DB 0 ; Flag for unknown device -VGM_DEV .DB %00000000 ; yyYYAASS - .DB %00000000 ; Unimplemented device flags - +KEYCHK .DB 0 ; Counter for keypress checks +; +VGM_DEV .DB %00000000 ; IX+0 Flags for devices + ; xx...... ym2151 1 & 2 + ; ..x..... ym2612 2 (not supported) + ; ...x.... ym2612 1 + ; ....xx.. ay-3-8910 1 & 2 + ; ......xx sn76489 1 & 2 + + .DB %00000000 ; IX+1 Unimplemented device flags & future devices +; OLDSTACK .DW 0 ; original stack pointer .DS 40H ; space for stack STACK ; top of stack diff --git a/Source/HBIOS/sn76489.asm b/Source/HBIOS/sn76489.asm index b05bba74..9de9d5c8 100644 --- a/Source/HBIOS/sn76489.asm +++ b/Source/HBIOS/sn76489.asm @@ -13,8 +13,8 @@ ;====================================================================== ; #IF (PLATFORM == PLT_SBC) & (SNMODE == SNMODE_VGM) -SN76489_PORT_LEFT .EQU $C6 ; PORTS FOR ACCESSING THE SN76489 CHIP (LEFT) -SN76489_PORT_RIGHT .EQU $C7 ; PORTS FOR ACCESSING THE SN76489 CHIP (RIGHT) +SN76489_PORT_LEFT .EQU $C8 ; PORTS FOR ACCESSING THE SN76489 CHIP (LEFT) +SN76489_PORT_RIGHT .EQU $C9 ; PORTS FOR ACCESSING THE SN76489 CHIP (RIGHT) ;SN7CLK .EQU 3575950 ; CLOCK SPEED DRIVING THE SN76489 CHIPS #ENDIF