HomeForumsWhat's newResources 
 
 
Project : convert yamaha YMxxx FM to saturn scsp FM
vbt - Sep 18, 2016

 < Prev  1  2  3  4  Next> 

 vbt Feb 26, 2020

DamageX said:

Congrats for this demo, i'll try to recompile it and test it nobody here knew you did such work including a FM driver !

 DamageX Feb 27, 2020
I just found out that KbMedia player with AOSSF plugin can handle SCSP FM synth. I thought it didn't because last time I tried to make an .SSF it didn't work right for some reason. Go figure.

So I put together a quick and dirty YM-2203 player using my compiler. It's woefully incomplete but it sounds like FM when played in KbM or using Saturn USB.


edit: re-uploaded the archive because a couple files were missing (oops)

 vbt Feb 29, 2020
@DamageX... would you come on irc or discord ?

 DamageX Feb 29, 2020
where is the IRC channel?

 vbt Feb 29, 2020

DamageX said:

Let's say #yabause at freenode

 DamageX Feb 29, 2020
sorry nevermind. I registered for discord

 DamageX Mar 5, 2020
Here is a preliminary release of the (dual) YM-2203 player for Saturn, if anyone wants to try it.

This is a demonstration program. Press A to start playing a VGM, B to stop, C to play the other VGM. Up/down/left/right shows different register dumps on the screen (OPN or SCSP). The 1943 arcade track uses two OPNs, but doesn't use the SSG portion so I don't know if both of those are working. The noise generator is not emulated in any case.

This is the bare 68K driver. The sequence for starting a VGM is like this:
1) load driver at $5A00000
2) wait until the word at $25A0010C is 0 (this is the status word, 1 means busy)
3) read the dword at $25A00100 to find out the end address of the driver. Be sure to add $5A00000 to obtain the SH2 address.
4) write a VGM file to a free area in sound RAM (after the address calculated in step 3)
5) write the address (dword) of the VGM file to $5A00104 (subtract $5A00000 or mask off the upper bits first so it becomes a 68000 address)
6) write a word=1 to $5A00108

to stop: wait for the status word, then write a word=2 to $5A00108

Hopefully I got the instructions correct The source code is also here, of course it is written in NOWUT

 vbt Mar 8, 2020


1943 is on the way, next step is using your VGM driver

EDIT : driver loaded :


 vbt Mar 8, 2020
I did that :
Code:
  
//-------------------------------------------------------------------------------------------------------------------------------------
void DrvInitDamageXsound()
{
// init controller port
    *(UINT8 *)(0x2010007F)=0;
    *(UINT8 *)(0x2010007D)=3;
    *(UINT8 *)(0x20100079)=96;
    *(UINT8 *)(0x2010007B)=96;

// turn off the 68000
    *(UINT8 *)(0x2010001F)=7;
    for(int w=0;w<500;w++)
    {
        asm("nop\n"); // waste time
    }
    *(UINT16 *)(0x5B00400)=0x20F;

    for(int w=0;w<500;w++)
    {
        asm("nop\n"); // waste time
    }

    *(UINT16 *)(0x5B00402)=0x3F;

    for(int w=0;w<500;w++)
    {
        asm("nop\n"); // waste time
    }

    GFS_Load(GFS_NameToId("VGM68.BIN"),0,(void *)0x5A00000,4640);

// turn on the 68000
    *(UINT8 *)(0x2010001F)=6;

    while(*(UINT16 *)(0x25A0010C)!=0)
    {
        for(int w=0;w<500;w++)
        {
            asm("nop\n"); // waste time
        }
    }

    UINT32 end = *(UINT32 *)(0x25A00100);

    GFS_Load(GFS_NameToId("02.VGM"),0,(void *)(0x5A00000+end),14952);

//   memcpy((UINT16 *)(0x25A00104),(UINT16 *)(0x25A00100),sizeof(UINT16));//
*(UINT32 *)(0x25A00104)=end;
    *(UINT16 *)(0x25A00108)=1;

and it works !!! but it doesn't play all
super good job @DamageX... !

 DamageX Mar 9, 2020
init controller port is for being able to read the gamepad from SMPC registers, not sure if you need that (or the delays... except the last one)

Try this build of the driver http://www.hyakushiki.net/satdev/vgm68-2.bin...

I tested it with all the 1943 tracks. http://www.hyakushiki.net/satdev/satmload.iso...

 DamageX Mar 18, 2020
The other VGM files were the same indeed. I couldn't reproduce any problems. Are you loading them all at 4-byte aligned boundaries?

How about this build?

 vbt Mar 20, 2020

DamageX said:

This one is working well, now i think, in some cases it stops because i don't have the sfx, i continue on 1943, we must beat capcom generations

Should i do a version of Rockin'-b Sound player with your Driver ?

with vgm,mdx support


 DamageX Mar 21, 2020
It can load files from CD? That would be cool.

 vbt Mar 21, 2020

DamageX said:

Naturally it will, i'll do my best

 DamageX Mar 24, 2020
#4 was crashing on the Saturn because of a typo, so here is a new one. MDX files have some $EC vibrato using SCSP LFOs now


here is an ISO for the fun of it (press B then A or press B then C to change song) http://www.hyakushiki.net/satdev/snddrv2.iso...

 DamageX Apr 4, 2020
latest build: http://www.hyakushiki.net/satdev/vgm68-6.bin... http://www.hyakushiki.net/satdev/vgm68-6.no...
MDX tweaks, YM2612 LFO, detune tweaked, key scaling (?)

 vbt Apr 6, 2020
just a WIP
it should combine all stuff done by Rockin'-B + @DamageX... FM driver !


 DamageX Apr 10, 2020
driver with mod player inside: http://www.hyakushiki.net/satdev/vgm68-7.bin... http://www.hyakushiki.net/satdev/vgm68-7.no...
Playback address should default to the same as the driver end address. Use command 4 to play mods

 vbt Apr 11, 2020
here is first beta, there are still many bugs but i've fixed some issues from the original program.
There is not yet a good switch between drivers. VGM flies play well, i can't play MOD & MDX yet.

source code is here :


 DamageX Apr 11, 2020

Code:
Code:
  
251	        case PLAYVGM_MENU_PLAY:
252				if(sndSlots[slot].playing == 0) {
253				*(Uint16 *)(0x25A00108)=1; // start				
254					sndSlots[slot].playing = 1;
255					sndSlots[slot].frame = 0;
256				}   
257	            return;

This part needs to use 1, 3, or 4 depending on VGM, MDX, or MOD.

Code:
Code:
  
261				*(Uint16 *)(0x25A00108)= 2; // stop
262				sndSlots[slot].playing = 0;
263				Uint32 msk;
264	
265				msk = get_imask();
266				set_imask(15);
267				
268				while(*(Uint16 *)(0x25A0010C)!=0)
269				{
270					for(int w=0;w<500;w++)
271					{
272						asm("nop\n"); // waste time
273					}
274				}

Try changing 0x25A0010C to 0x25A00108 instead. (Only test 10C after loading the driver and turning on the 68000.) And send the stop command before you load the data from CD...
Hope this helps

 < Prev  1  2  3  4  Next>