Example #1
0
int vgm_dump_stop(void)
{
	UINT8 curchip;
	UINT8 chip_unused;
	
	if (! VGM_Dumping)
		return -1;
	
	chip_unused = 0x00;
	for (curchip = 0x00; curchip < CHIP_COUNT; curchip ++)
	{
		if (! VgmChip[curchip].HadWrite && VgmChip[curchip].ChipType != 0xFF)
		{
			chip_unused ++;
			switch(CHIP_LIST[curchip])
			{
			case VGMC_SN76496:
				VgmFile.Header.lngHzPSG = 0x00;
				VgmFile.Header.shtPSG_Feedback = 0x00;
				VgmFile.Header.bytPSG_STWidth = 0x00;
				VgmFile.Header.bytPSG_Flags = 0x00;
				break;
			case VGMC_YM2612:
				VgmFile.Header.lngHz2612 = 0x00;
				break;
			case VGMC_RF5C164:
				VgmFile.Header.lngHzRF5C164 = 0x00;
				break;
			case VGMC_PWM:
				VgmFile.Header.lngHzPWM = 0x00;
				break;
			case VGMC_UPD7759:
				VgmFile.Header.lngHzUPD7759 = 0x00;
				break;
			}
		}
	}
//	if (chip_unused)
//		printf("Header Data of %hu unused Chips removed.\n", chip_unused);
	
	vgm_close();
	
	VGM_Dumping = 0x00;
	
	return 0;
}
Example #2
0
int main(int argc, char* argv [])
{
    char trunc_name[FILENAME_MAX], filename[FILENAME_MAX];
    char *temp;
    char *output_name;  // VGM filename
    char *input_name;

    uint8_t *source = 0;
    uint8_t *samplerom = 0;

    int has_input_name=0, has_output_name=0, write_samplerom=0;
    mod_panning=0;
    use_ram=1;
    rom_offset=0x200000;
    int i;

    for(i=1;i<argc;i++)
    {
        if(!strcmp(argv[i],"-v"))
        {
            verbose_level=1;
        }
        else if(!strcmp(argv[i],"-vv"))
        {
            verbose_level=2;
        }
        else if(!strcmp(argv[i],"-s"))
        {
            write_samplerom=1;
        }
        else if(!strcmp(argv[i],"-p"))
        {
            mod_panning=1;
        }
        else if(!strcmp(argv[i],"-pp")) // fixes 800 = 810 for OPL4 panning.
        {
            mod_panning=2;
        }
        else if(!strcmp(argv[i],"-r"))
        {
            use_ram=0;
            rom_offset=0;
        }
        else if(!has_input_name)
        {
            input_name = argv[i];
            has_input_name=1;
        }
        else if(!has_output_name)
        {
            output_name = argv[i];
            has_output_name=1;
        }
        else
            break;
	}

    if(!has_input_name)
    {
        printf("\nmod2vgm by ctr\n"
               "Converts module music to OPL4 VGMs\n\n"
               "\tusage: %s [options] input.mod [output.vgm]\n\n"
               "Options:\n"
               "\t-v\tverbose\n"
               "\t-vv\teven more verbose (suggest redirecting output to a file)\n"
               "\t-s\twrite sample ROM to file\n",argv[0]);
        return -1;
    }

    if(has_output_name)
        strcpy(trunc_name,output_name);
    else
        strcpy(trunc_name,input_name);

    temp = strrchr(trunc_name,'.');
    if(temp)
        *temp = 0;  // truncate

    uint32_t sourcefile_size = 0;

    if(read_file(input_name, &source, &sourcefile_size))
        exit(EXIT_FAILURE);

    if(sourcefile_size < 2048)
    {
        fprintf(stderr,"Size < 2048 - Probably not a valid module.\n");
        exit(EXIT_FAILURE);
    }

	chip = opl4_define_parameters();

    uint8_t* p = mod_parse_file(source);
	chip->max_sample_entries -= mod.num_samples;

    mod.num_sampleoffsets=0;
    read_sample_offsets();

    printf("%d samples\n%d sample offsets used\nTotal: %d\n",mod.num_samples,mod.num_sampleoffsets,mod.num_samples+mod.num_sampleoffsets);

    verbose(1,"Sample data starts at %08x\n", p-source);

    samplerom = (uint8_t*)malloc(2097152); // 2MB samples max

    memset(samplerom,0,2097152);

    uint32_t samplelen=opl4_build_samplerom(samplerom, p, source+sourcefile_size);

    if(write_samplerom)
    {
        sprintf(filename, "%s_samples.bin", trunc_name);
        write_file(filename,samplerom,samplelen);
    }

    sprintf(filename, "%s.vgm", trunc_name);

    //vgm_open(filename, samplerom, samplelen, rom_offset);
    vgm_open(filename);
    opl4_init(mod.num_channels, samplerom, samplelen, rom_offset);

    vgm_delay(1000);

    process_song();

    vgm_stop();
    vgm_write_tag(mod.name);
    vgm_close(mod.name);

    return 0;
}