Example #1
0
void DoFullDump() {
#ifdef SPU2_LOG
	FILE *dump;
	u8 c=0, v=0;

	if(MemDump()) {
		dump=fopen(MemDumpFileName,"wb");
		if (dump) {
			fwrite(_spu2mem,0x200000,1,dump);
			fclose(dump);
		}
	}
	if(RegDump()) {
		dump=fopen(RegDumpFileName,"wb");
		if (dump) {
			fwrite(spu2regs,0x2000,1,dump);
			fclose(dump);
		}
	}

	if(!CoresDump()) return;
	dump=fopen(CoresDumpFileName,"wt");
	if (dump) {
		for(c=0;c<2;c++) {
			fprintf(dump,"#### CORE %d DUMP.\n",c);
			fprintf(dump,"Master Volume for Left Channel: %x\n"
						 "  - Value:     %x\n"
						 "  - Mode:      %x\n"
						 "  - Increment: %x\n",
						 Cores[c].MasterL.Reg_VOL,
						 Cores[c].MasterL.Value,
						 Cores[c].MasterL.Mode,
						 Cores[c].MasterL.Increment);
			fprintf(dump,"Master Volume for Right Channel: %x\n"
						 "  - Value:     %x\n"
						 "  - Mode:      %x\n"
						 "  - Increment: %x\n",
						 Cores[c].MasterR.Reg_VOL,
						 Cores[c].MasterR.Value,
						 Cores[c].MasterR.Mode,
						 Cores[c].MasterR.Increment);
			fprintf(dump,"Volume for External Data Input (Left Channel):  %x\n",Cores[c].ExtL);
			fprintf(dump,"Volume for External Data Input (Right Channel): %x\n",Cores[c].ExtR);
			fprintf(dump,"Volume for Sound Data Input (Left Channel):     %x\n",Cores[c].InpL);
			fprintf(dump,"Volume for Sound Data Input (Right Channel):    %x\n",Cores[c].InpR);
			fprintf(dump,"Volume for Output from Effects (Left Channel):  %x\n",Cores[c].FxL);
			fprintf(dump,"Volume for Output from Effects (Right Channel): %x\n",Cores[c].FxR);
			fprintf(dump,"Interrupt Address:          %x\n",Cores[c].IRQA);
			fprintf(dump,"DMA Transfer Start Address: %x\n",Cores[c].TSA);
			fprintf(dump,"External Input to Direct Output (Left):    %s\n",Cores[c].ExtDryL?"Yes":"No");
			fprintf(dump,"External Input to Direct Output (Right):   %s\n",Cores[c].ExtDryR?"Yes":"No");
			fprintf(dump,"External Input to Effects (Left):          %s\n",Cores[c].ExtWetL?"Yes":"No");
			fprintf(dump,"External Input to Effects (Right):         %s\n",Cores[c].ExtWetR?"Yes":"No");
			fprintf(dump,"Sound Data Input to Direct Output (Left):  %s\n",Cores[c].SndDryL?"Yes":"No");
			fprintf(dump,"Sound Data Input to Direct Output (Right): %s\n",Cores[c].SndDryR?"Yes":"No");
			fprintf(dump,"Sound Data Input to Effects (Left):        %s\n",Cores[c].SndWetL?"Yes":"No");
			fprintf(dump,"Sound Data Input to Effects (Right):       %s\n",Cores[c].SndWetR?"Yes":"No");
			fprintf(dump,"Voice Data Input to Direct Output (Left):  %s\n",Cores[c].InpDryL?"Yes":"No");
			fprintf(dump,"Voice Data Input to Direct Output (Right): %s\n",Cores[c].InpDryR?"Yes":"No");
			fprintf(dump,"Voice Data Input to Effects (Left):        %s\n",Cores[c].InpWetL?"Yes":"No");
			fprintf(dump,"Voice Data Input to Effects (Right):       %s\n",Cores[c].InpWetR?"Yes":"No");
			fprintf(dump,"IRQ Enabled:     %s\n",Cores[c].IRQEnable?"Yes":"No");
			fprintf(dump,"Effects Enabled: %s\n",Cores[c].FxEnable?"Yes":"No");
			fprintf(dump,"Mute Enabled:    %s\n",Cores[c].Mute?"Yes":"No");
			fprintf(dump,"Noise Clock:     %d\n",Cores[c].NoiseClk);
			fprintf(dump,"DMA Bits:        %d\n",Cores[c].DMABits);
			fprintf(dump,"Effects Start:   %x\n",Cores[c].EffectsStartA);
			fprintf(dump,"Effects End:     %x\n",Cores[c].EffectsEndA);
			fprintf(dump,"Registers:\n");
			fprintf(dump,"  - PMON:   %x\n",Cores[c].Regs.PMON);
			fprintf(dump,"  - NON:    %x\n",Cores[c].Regs.NON);
			fprintf(dump,"  - VMIXL:  %x\n",Cores[c].Regs.VMIXL);
			fprintf(dump,"  - VMIXR:  %x\n",Cores[c].Regs.VMIXR);
			fprintf(dump,"  - VMIXEL: %x\n",Cores[c].Regs.VMIXEL);
			fprintf(dump,"  - VMIXER: %x\n",Cores[c].Regs.VMIXER);
			fprintf(dump,"  - MMIX:   %x\n",Cores[c].Regs.VMIXEL);
			fprintf(dump,"  - ENDX:   %x\n",Cores[c].Regs.VMIXER);
			fprintf(dump,"  - STATX:  %x\n",Cores[c].Regs.VMIXEL);
			fprintf(dump,"  - ATTR:   %x\n",Cores[c].Regs.VMIXER);
			for(v=0;v<24;v++) {
				fprintf(dump,"Voice %d:\n",v);
				fprintf(dump,"  - Volume for Left Channel: %x\n"
							 "     - Value:     %x\n"
							 "     - Mode:      %x\n"
							 "     - Increment: %x\n",
							 Cores[c].Voices[v].VolumeL.Reg_VOL,
							 Cores[c].Voices[v].VolumeL.Value,
							 Cores[c].Voices[v].VolumeL.Mode,
							 Cores[c].Voices[v].VolumeL.Increment);
				fprintf(dump,"  - Volume for Right Channel: %x\n"
							 "     - Value:     %x\n"
							 "     - Mode:      %x\n"
							 "     - Increment: %x\n",
							 Cores[c].Voices[v].VolumeR.Reg_VOL,
							 Cores[c].Voices[v].VolumeR.Value,
							 Cores[c].Voices[v].VolumeR.Mode,
							 Cores[c].Voices[v].VolumeR.Increment);
				fprintf(dump,"  - ADSR Envelope: %x & %x\n"
							 "     - Ar: %x\n"
							 "     - Am: %x\n"
							 "     - Dr: %x\n"
							 "     - Sl: %x\n"
							 "     - Sr: %x\n"
							 "     - Sm: %x\n"
							 "     - Rr: %x\n"
							 "     - Rm: %x\n"
							 "     - Phase: %x\n"
							 "     - Value: %x\n",
							 Cores[c].Voices[v].ADSR.Reg_ADSR1,
							 Cores[c].Voices[v].ADSR.Reg_ADSR2,
							 Cores[c].Voices[v].ADSR.Ar,
							 Cores[c].Voices[v].ADSR.Am,
							 Cores[c].Voices[v].ADSR.Dr,
							 Cores[c].Voices[v].ADSR.Sl,
							 Cores[c].Voices[v].ADSR.Sr,
							 Cores[c].Voices[v].ADSR.Sm,
							 Cores[c].Voices[v].ADSR.Rr,
							 Cores[c].Voices[v].ADSR.Rm,
							 Cores[c].Voices[v].ADSR.Phase,
							 Cores[c].Voices[v].ADSR.Value);
				fprintf(dump,"  - Pitch:     %x\n",Cores[c].Voices[v].Pitch);
				fprintf(dump,"  - Modulated: %s\n",Cores[c].Voices[v].Modulated?"Yes":"No");
				fprintf(dump,"  - Source:    %s\n",Cores[c].Voices[v].Noise?"Noise":"Wave");
				fprintf(dump,"  - Direct Output for Left Channel:   %s\n",Cores[c].Voices[v].DryL?"Yes":"No");
				fprintf(dump,"  - Direct Output for Right Channel:  %s\n",Cores[c].Voices[v].DryR?"Yes":"No");
				fprintf(dump,"  - Effects Output for Left Channel:  %s\n",Cores[c].Voices[v].WetL?"Yes":"No");
				fprintf(dump,"  - Effects Output for Right Channel: %s\n",Cores[c].Voices[v].WetR?"Yes":"No");
				fprintf(dump,"  - Loop Start Adress:  %x\n",Cores[c].Voices[v].LoopStartA);
				fprintf(dump,"  - Sound Start Adress: %x\n",Cores[c].Voices[v].StartA);
				fprintf(dump,"  - Next Data Adress:   %x\n",Cores[c].Voices[v].NextA);
				fprintf(dump,"  - Play Start Cycle:   %d\n",Cores[c].Voices[v].PlayCycle);
				fprintf(dump,"  - Play Status:        %s\n",(Cores[c].Voices[v].ADSR.Phase>0)?"Playing":"Not Playing");
				fprintf(dump,"  - Block Sample:       %d\n",Cores[c].Voices[v].SCurrent);
			}
			fprintf(dump,"#### END OF DUMP.\n\n");
		}
	}
	fclose(dump);
	dump=fopen("logs/effects.txt","wt");
	if (dump) {
		for(c=0;c<2;c++) {
			fprintf(dump,"#### CORE %d EFFECTS PROCESSOR DUMP.\n",c);

			fprintf(dump,"  - IN_COEF_L:   %x\n",Cores[c].Revb.IN_COEF_R);
			fprintf(dump,"  - IN_COEF_R:   %x\n",Cores[c].Revb.IN_COEF_L);

			fprintf(dump,"  - FB_ALPHA:    %x\n",Cores[c].Revb.FB_ALPHA);
			fprintf(dump,"  - FB_X:        %x\n",Cores[c].Revb.FB_X);
			fprintf(dump,"  - FB_SRC_A:    %x\n",Cores[c].Revb.FB_SRC_A);
			fprintf(dump,"  - FB_SRC_B:    %x\n",Cores[c].Revb.FB_SRC_B);

			fprintf(dump,"  - IIR_ALPHA:   %x\n",Cores[c].Revb.IIR_ALPHA);
			fprintf(dump,"  - IIR_COEF:    %x\n",Cores[c].Revb.IIR_COEF);
			fprintf(dump,"  - IIR_SRC_A0:  %x\n",Cores[c].Revb.IIR_SRC_A0);
			fprintf(dump,"  - IIR_SRC_A1:  %x\n",Cores[c].Revb.IIR_SRC_A1);
			fprintf(dump,"  - IIR_SRC_B1:  %x\n",Cores[c].Revb.IIR_SRC_B0);
			fprintf(dump,"  - IIR_SRC_B0:  %x\n",Cores[c].Revb.IIR_SRC_B1);
			fprintf(dump,"  - IIR_DEST_A0: %x\n",Cores[c].Revb.IIR_DEST_A0);
			fprintf(dump,"  - IIR_DEST_A1: %x\n",Cores[c].Revb.IIR_DEST_A1);
			fprintf(dump,"  - IIR_DEST_B0: %x\n",Cores[c].Revb.IIR_DEST_B0);
			fprintf(dump,"  - IIR_DEST_B1: %x\n",Cores[c].Revb.IIR_DEST_B1);

			fprintf(dump,"  - ACC_COEF_A:  %x\n",Cores[c].Revb.ACC_COEF_A);
			fprintf(dump,"  - ACC_COEF_B:  %x\n",Cores[c].Revb.ACC_COEF_B);
			fprintf(dump,"  - ACC_COEF_C:  %x\n",Cores[c].Revb.ACC_COEF_C);
			fprintf(dump,"  - ACC_COEF_D:  %x\n",Cores[c].Revb.ACC_COEF_D);
			fprintf(dump,"  - ACC_SRC_A0:  %x\n",Cores[c].Revb.ACC_SRC_A0);
			fprintf(dump,"  - ACC_SRC_A1:  %x\n",Cores[c].Revb.ACC_SRC_A1);
			fprintf(dump,"  - ACC_SRC_B0:  %x\n",Cores[c].Revb.ACC_SRC_B0);
			fprintf(dump,"  - ACC_SRC_B1:  %x\n",Cores[c].Revb.ACC_SRC_B1);
			fprintf(dump,"  - ACC_SRC_C0:  %x\n",Cores[c].Revb.ACC_SRC_C0);
			fprintf(dump,"  - ACC_SRC_C1:  %x\n",Cores[c].Revb.ACC_SRC_C1);
			fprintf(dump,"  - ACC_SRC_D0:  %x\n",Cores[c].Revb.ACC_SRC_D0);
			fprintf(dump,"  - ACC_SRC_D1:  %x\n",Cores[c].Revb.ACC_SRC_D1);

			fprintf(dump,"  - MIX_DEST_A0: %x\n",Cores[c].Revb.MIX_DEST_A0);
			fprintf(dump,"  - MIX_DEST_A1: %x\n",Cores[c].Revb.MIX_DEST_A1);
			fprintf(dump,"  - MIX_DEST_B0: %x\n",Cores[c].Revb.MIX_DEST_B0);
			fprintf(dump,"  - MIX_DEST_B1: %x\n",Cores[c].Revb.MIX_DEST_B1);
			fprintf(dump,"#### END OF DUMP.\n\n");
		}
		fclose(dump);
	}
#endif
}
Example #2
0
void DoFullDump()
{
#ifdef _MSC_VER
#ifdef SPU2_LOG
	FILE *dump;
	u8 c=0, v=0;

	if(MemDump())
	{
		dump = fopen( wxString(MemDumpFileName).ToUTF8(), "wb" );
		if (dump)
		{
			fwrite(_spu2mem,0x200000,1,dump);
			fclose(dump);
		}
	}
	if(RegDump())
	{
		dump = fopen( wxString(RegDumpFileName).ToUTF8(), "wb" );
		if (dump)
		{
			fwrite(spu2regs,0x2000,1,dump);
			fclose(dump);
		}
	}

	if(!CoresDump()) return;
	dump = fopen( wxString(CoresDumpFileName).ToUTF8(), "wt" );
	if (dump)
	{
		for(c=0;c<2;c++)
		{
			fprintf(dump,"#### CORE %d DUMP.\n",c);

			Cores[c].MasterVol.DebugDump( dump, "Master" );

			Cores[c].ExtVol.DebugDump( dump, "External Data Input" );
			Cores[c].InpVol.DebugDump( dump, "Voice Data Input [dry]" );
			Cores[c].FxVol.DebugDump( dump, "Effects/Reverb [wet]" );

			fprintf(dump,"Interrupt Address:          %x\n",Cores[c].IRQA);
			fprintf(dump,"DMA Transfer Start Address: %x\n",Cores[c].TSA);
			fprintf(dump,"External Input to Direct Output (Left):    %s\n",Cores[c].DryGate.ExtL?"Yes":"No");
			fprintf(dump,"External Input to Direct Output (Right):   %s\n",Cores[c].DryGate.ExtR?"Yes":"No");
			fprintf(dump,"External Input to Effects (Left):          %s\n",Cores[c].WetGate.ExtL?"Yes":"No");
			fprintf(dump,"External Input to Effects (Right):         %s\n",Cores[c].WetGate.ExtR?"Yes":"No");
			fprintf(dump,"Sound Data Input to Direct Output (Left):  %s\n",Cores[c].DryGate.SndL?"Yes":"No");
			fprintf(dump,"Sound Data Input to Direct Output (Right): %s\n",Cores[c].DryGate.SndR?"Yes":"No");
			fprintf(dump,"Sound Data Input to Effects (Left):        %s\n",Cores[c].WetGate.SndL?"Yes":"No");
			fprintf(dump,"Sound Data Input to Effects (Right):       %s\n",Cores[c].WetGate.SndR?"Yes":"No");
			fprintf(dump,"Voice Data Input to Direct Output (Left):  %s\n",Cores[c].DryGate.InpL?"Yes":"No");
			fprintf(dump,"Voice Data Input to Direct Output (Right): %s\n",Cores[c].DryGate.InpR?"Yes":"No");
			fprintf(dump,"Voice Data Input to Effects (Left):        %s\n",Cores[c].WetGate.InpL?"Yes":"No");
			fprintf(dump,"Voice Data Input to Effects (Right):       %s\n",Cores[c].WetGate.InpR?"Yes":"No");
			fprintf(dump,"IRQ Enabled:     %s\n",Cores[c].IRQEnable?"Yes":"No");
			fprintf(dump,"Effects Enabled: %s\n",Cores[c].FxEnable?"Yes":"No");
			fprintf(dump,"Mute Enabled:    %s\n",Cores[c].Mute?"Yes":"No");
			fprintf(dump,"Noise Clock:     %d\n",Cores[c].NoiseClk);
			fprintf(dump,"DMA Bits:        %d\n",Cores[c].DMABits);
			fprintf(dump,"Effects Start:   %x\n",Cores[c].EffectsStartA);
			fprintf(dump,"Effects End:     %x\n",Cores[c].EffectsEndA);
			fprintf(dump,"Registers:\n");
			fprintf(dump,"  - PMON:   %x\n",Cores[c].Regs.PMON);
			fprintf(dump,"  - NON:    %x\n",Cores[c].Regs.NON);
			fprintf(dump,"  - VMIXL:  %x\n",Cores[c].Regs.VMIXL);
			fprintf(dump,"  - VMIXR:  %x\n",Cores[c].Regs.VMIXR);
			fprintf(dump,"  - VMIXEL: %x\n",Cores[c].Regs.VMIXEL);
			fprintf(dump,"  - VMIXER: %x\n",Cores[c].Regs.VMIXER);
			fprintf(dump,"  - MMIX:   %x\n",Cores[c].Regs.VMIXEL);
			fprintf(dump,"  - ENDX:   %x\n",Cores[c].Regs.VMIXER);
			fprintf(dump,"  - STATX:  %x\n",Cores[c].Regs.VMIXEL);
			fprintf(dump,"  - ATTR:   %x\n",Cores[c].Regs.VMIXER);
			for(v=0;v<24;v++)
			{
				fprintf(dump,"Voice %d:\n",v);
				Cores[c].Voices[v].Volume.DebugDump( dump, "" );

				fprintf(dump,"  - ADSR Envelope: %x & %x\n"
							 "     - Ar: %x\n"
							 "     - Am: %x\n"
							 "     - Dr: %x\n"
							 "     - Sl: %x\n"
							 "     - Sr: %x\n"
							 "     - Sm: %x\n"
							 "     - Rr: %x\n"
							 "     - Rm: %x\n"
							 "     - Phase: %x\n"
							 "     - Value: %x\n",
							 Cores[c].Voices[v].ADSR.regADSR1,
							 Cores[c].Voices[v].ADSR.regADSR2,
							 Cores[c].Voices[v].ADSR.AttackRate,
							 Cores[c].Voices[v].ADSR.AttackMode,
							 Cores[c].Voices[v].ADSR.DecayRate,
							 Cores[c].Voices[v].ADSR.SustainLevel,
							 Cores[c].Voices[v].ADSR.SustainRate,
							 Cores[c].Voices[v].ADSR.SustainMode,
							 Cores[c].Voices[v].ADSR.ReleaseRate,
							 Cores[c].Voices[v].ADSR.ReleaseMode,
							 Cores[c].Voices[v].ADSR.Phase,
							 Cores[c].Voices[v].ADSR.Value);

				fprintf(dump,"  - Pitch:     %x\n",Cores[c].Voices[v].Pitch);
				fprintf(dump,"  - Modulated: %s\n",Cores[c].Voices[v].Modulated?"Yes":"No");
				fprintf(dump,"  - Source:    %s\n",Cores[c].Voices[v].Noise?"Noise":"Wave");
				fprintf(dump,"  - Direct Output for Left Channel:   %s\n",Cores[c].VoiceGates[v].DryL?"Yes":"No");
				fprintf(dump,"  - Direct Output for Right Channel:  %s\n",Cores[c].VoiceGates[v].DryR?"Yes":"No");
				fprintf(dump,"  - Effects Output for Left Channel:  %s\n",Cores[c].VoiceGates[v].WetL?"Yes":"No");
				fprintf(dump,"  - Effects Output for Right Channel: %s\n",Cores[c].VoiceGates[v].WetR?"Yes":"No");
				fprintf(dump,"  - Loop Start Address:  %x\n",Cores[c].Voices[v].LoopStartA);
				fprintf(dump,"  - Sound Start Address: %x\n",Cores[c].Voices[v].StartA);
				fprintf(dump,"  - Next Data Address:   %x\n",Cores[c].Voices[v].NextA);
				fprintf(dump,"  - Play Start Cycle:    %d\n",Cores[c].Voices[v].PlayCycle);
				fprintf(dump,"  - Play Status:         %s\n",(Cores[c].Voices[v].ADSR.Phase>0)?"Playing":"Not Playing");
				fprintf(dump,"  - Block Sample:        %d\n",Cores[c].Voices[v].SCurrent);
			}
			fprintf(dump,"#### END OF DUMP.\n\n");
		}
		fclose(dump);
	}
	
	dump = fopen( "logs/effects.txt", "wt" );
	if (dump)
	{
		for(c=0;c<2;c++)
		{
			fprintf(dump,"#### CORE %d EFFECTS PROCESSOR DUMP.\n",c);

			fprintf(dump,"  - IN_COEF_L:   %x\n",Cores[c].Revb.IN_COEF_R);
			fprintf(dump,"  - IN_COEF_R:   %x\n",Cores[c].Revb.IN_COEF_L);

			fprintf(dump,"  - FB_ALPHA:    %x\n",Cores[c].Revb.FB_ALPHA);
			fprintf(dump,"  - FB_X:        %x\n",Cores[c].Revb.FB_X);
			fprintf(dump,"  - FB_SRC_A:    %x\n",Cores[c].Revb.FB_SRC_A);
			fprintf(dump,"  - FB_SRC_B:    %x\n",Cores[c].Revb.FB_SRC_B);

			fprintf(dump,"  - IIR_ALPHA:   %x\n",Cores[c].Revb.IIR_ALPHA);
			fprintf(dump,"  - IIR_COEF:    %x\n",Cores[c].Revb.IIR_COEF);
			fprintf(dump,"  - IIR_SRC_A0:  %x\n",Cores[c].Revb.IIR_SRC_A0);
			fprintf(dump,"  - IIR_SRC_A1:  %x\n",Cores[c].Revb.IIR_SRC_A1);
			fprintf(dump,"  - IIR_SRC_B1:  %x\n",Cores[c].Revb.IIR_SRC_B0);
			fprintf(dump,"  - IIR_SRC_B0:  %x\n",Cores[c].Revb.IIR_SRC_B1);
			fprintf(dump,"  - IIR_DEST_A0: %x\n",Cores[c].Revb.IIR_DEST_A0);
			fprintf(dump,"  - IIR_DEST_A1: %x\n",Cores[c].Revb.IIR_DEST_A1);
			fprintf(dump,"  - IIR_DEST_B0: %x\n",Cores[c].Revb.IIR_DEST_B0);
			fprintf(dump,"  - IIR_DEST_B1: %x\n",Cores[c].Revb.IIR_DEST_B1);

			fprintf(dump,"  - ACC_COEF_A:  %x\n",Cores[c].Revb.ACC_COEF_A);
			fprintf(dump,"  - ACC_COEF_B:  %x\n",Cores[c].Revb.ACC_COEF_B);
			fprintf(dump,"  - ACC_COEF_C:  %x\n",Cores[c].Revb.ACC_COEF_C);
			fprintf(dump,"  - ACC_COEF_D:  %x\n",Cores[c].Revb.ACC_COEF_D);
			fprintf(dump,"  - ACC_SRC_A0:  %x\n",Cores[c].Revb.ACC_SRC_A0);
			fprintf(dump,"  - ACC_SRC_A1:  %x\n",Cores[c].Revb.ACC_SRC_A1);
			fprintf(dump,"  - ACC_SRC_B0:  %x\n",Cores[c].Revb.ACC_SRC_B0);
			fprintf(dump,"  - ACC_SRC_B1:  %x\n",Cores[c].Revb.ACC_SRC_B1);
			fprintf(dump,"  - ACC_SRC_C0:  %x\n",Cores[c].Revb.ACC_SRC_C0);
			fprintf(dump,"  - ACC_SRC_C1:  %x\n",Cores[c].Revb.ACC_SRC_C1);
			fprintf(dump,"  - ACC_SRC_D0:  %x\n",Cores[c].Revb.ACC_SRC_D0);
			fprintf(dump,"  - ACC_SRC_D1:  %x\n",Cores[c].Revb.ACC_SRC_D1);

			fprintf(dump,"  - MIX_DEST_A0: %x\n",Cores[c].Revb.MIX_DEST_A0);
			fprintf(dump,"  - MIX_DEST_A1: %x\n",Cores[c].Revb.MIX_DEST_A1);
			fprintf(dump,"  - MIX_DEST_B0: %x\n",Cores[c].Revb.MIX_DEST_B0);
			fprintf(dump,"  - MIX_DEST_B1: %x\n",Cores[c].Revb.MIX_DEST_B1);
			fprintf(dump,"#### END OF DUMP.\n\n");
		}
		fclose(dump);
	}
#endif
#endif
}
Example #3
0
int main( int argc, char ** argv )
{
    char path[_MAX_PATH];

    char buffer[ MAX_COMMAND_LINE + 2 ] = { (char)MAX_COMMAND_LINE };  /* Used with _cgets() - maximum number of characters in must be set in 1st byte */

    int    _argc;
    char * _argv[ MAX_ARGS ],
         * result,
         * fullpath;

    int archive_handle = -1;         /* last attached archive */

    int i, cmd;

    if( !ResInit( NULL )) 
        return( 1 );            /* ResInit failed */

    
    /* these would be called after parsing an .ini file or similar */

    IF_DEBUG( ResDbgLogOpen( "resource.log" ));

    print_heading();

    _getcwd( path, _MAX_PATH );
    printf( "PATH: %s\n", path );

    do {
        do {
#if( !RES_USE_FLAT_MODEL )
            printf( "\n%s> ", GLOBAL_CURRENT_PATH );
#else
            printf( "\nRoot > " );
#endif
    _getcwd( path, _MAX_PATH );
    printf( "[SD: %s]>", path );

            result = GETS( buffer );  /* Input a line of text */
            
        } while( !buffer[1] );


        if( !stricmp( result, "exit" ))
            break;

        _argc = parse_args( result, _argv );

        cmd = COMMAND_ERROR;

        for( i=0; i<COMMAND_COUNT; i++ ) {
            if( !stricmp( result, command[i] )) {
                cmd = i;
                break;
            }
        }

        if( cmd == COMMAND_EXIT && !_argc )
            break;

        if( _argc > 1 ) {
            if( !stricmp( _argv[1], "?" ) || !stricmp( _argv[1], "help" )) {
                show_help( cmd );
                continue;
            }
            else
                if( strchr( _argv[1], ASCII_BACKSLASH )) {
                    res_fullpath( path, _argv[1], _MAX_PATH );
                    fullpath = path;
                }
                else
                    fullpath = _argv[1];
        }

        switch( cmd ) 
        {
            case COMMAND_DIR:
#if( RES_USE_FLAT_MODEL )
                printf( "This function is only meaningful when using the hierarchical model.\n" );
                break;
#endif
                if( _argc > 1 )
                    cmd_dir( _argv[1] );
                else
                    cmd_dir( NULL );
                break;


            case COMMAND_ANALYZE:
            {
#if( !RES_USE_FLAT_MODEL )
                HASH_ENTRY * entry;

                if( _argc == 1 )
                    entry = hash_find( GLOBAL_CURRENT_PATH, GLOBAL_HASH_TABLE );
                else
                    entry = hash_find( fullpath, GLOBAL_HASH_TABLE );

                if( entry ) {
#if( RES_DEBUG_VERSION )
                    if( entry -> dir )
                        dbg_analyze_hash( (HASH_TABLE *)entry -> dir );
                    else
                        printf( "No directory table for this directory.\n" );
#endif /* RES_DEBUG_VERSION */
                }
                else
                    printf( "Directory not found.\n" );
#else
                printf( "This command only meaningful when using the hierarchical model!\n" );
#endif
                break;
            }

            case COMMAND_RUN:
                cmd_run( _argc, _argv );
                break;

            case COMMAND_CD:
                if( _argc > 1 ) {
                    if( !ResSetDirectory( fullpath ))
                        printf( "Error changing to directory %s\n", fullpath );
                }
                else
                    printf( "Current directory is: %s\n", GLOBAL_CURRENT_PATH );

                break;


            case COMMAND_ADD:
                if( _argc > 1 ) {
                    int test = FALSE,
                        flag = -1;

                    if( _argc > 2 )
                        flag = is_bool( _argv[2] );
                    
                    if( flag == -1 )
                        flag = TRUE;

                    if( !GLOBAL_SEARCH_INDEX )
                        test = ResCreatePath( fullpath, flag );
                    else
                        test = ResAddPath( fullpath, flag );

                    if( !test )
                        printf( "Error adding %s to search path\n", fullpath );
                }
                else
                    show_help(cmd);
                break;


            case COMMAND_STREAM:
            {
                FILE * fptr;
                char   c;
                int    test;

                if( _argc < 2 ) {
                    show_help(cmd);
                    break;
                }

                fptr = fopen( _argv[1], "r" );

                if( fptr ) {
                    while( (test = fscanf( fptr, "%c", &c )) != EOF )
                        printf( "%c", c );

                    printf( "\n\n\n\n ************** REWINDING ****************** \n\n\n\n\n\n\n" );

                    fseek( fptr, 0, SEEK_SET );

                    while( (test = fscanf( fptr, "%c", &c )) != EOF )
                        printf( "%c", c );

                    fclose( fptr );

                } else {
                    printf( "Error opening file %s\n", _argv[1] );
                }

                break;
            }


            case COMMAND_PATH:
            {
                int x=0;
                char b[_MAX_PATH];

                if( GLOBAL_PATH_LIST ) {

                    while( ResGetPath( x++, b ))
                        printf( "%s\n", b );
                }
                else
                    printf( "No path created.\n" );

                break;
            }

            case COMMAND_EXTRACT:
            {
                /* extracts the archive to the local directory with the same filename */

                if( _argc < 3 )
                    show_help(cmd);
                else              
                    ResExtractFile( _argv[1], _argv[2] );
                break;
            }            

            case COMMAND_READ:
                if( _argc >= 2 )
                    cmd_read( _argv[1] );
                else
                    show_help(cmd);
                break;


            case COMMAND_ATTACH:
            {
                char dst[_MAX_PATH];
                int  flag = -1;

                if( _argc < 2 ) {
                    show_help(cmd);
                    break;
                }

                if( _argc >= 3 )
                    flag = is_bool( _argv[ _argc - 1 ] );

                if( _argc >= 3 ) res_fullpath( dst, _argv[2], _MAX_PATH );

                if( _argc == 2 )
                    archive_handle = ResAttach( GLOBAL_CURRENT_PATH, fullpath, FALSE );
                else
                    if( _argc == 3 ) {
                        if( flag != -1 )
                            archive_handle = ResAttach( GLOBAL_CURRENT_PATH, fullpath, flag );
                        else
                            archive_handle = ResAttach( fullpath, dst, FALSE );
                    } else
                        if( _argc == 4 )
                            archive_handle = ResAttach( fullpath, dst, flag == -1 ? 0 : flag );
                
                if( archive_handle == -1 )
                    printf( "Error attaching zip file %s\n", fullpath );

                break;
            }

            case COMMAND_DUMP:
                ResDbgDump();
                MemDump();          printf("\n");
                MemFindLevels();    printf("\n");
                MemFindUsage();
                break;

            case COMMAND_DETACH:
                if( archive_handle != -1 )
                {
                    ResDetach( archive_handle );
                    archive_handle = -1;
                }
                else
                    printf( "No archives currently attached.\n" );
                break;

            case COMMAND_MAP:
                if( _argc < 2 )
                    show_help(cmd);
                else
                    cmd_map( _argv[1] );
                break;

            case COMMAND_FIND:
                if( _argc < 2 )
                    show_help(cmd);
                else
                    cmd_find( fullpath );
                break;

            case COMMAND_HELP:
                print_heading();
                show_help(cmd);
                break;

            case COMMAND_ERROR:
            default:
                printf( "Syntax error\n" );
                break;
        }

    } while( TRUE );
    
    ResExit();
    MemDump();
    _getcwd( path, _MAX_PATH );
    printf( "PATH: %s\n", path );

    return(0);
}