BizHawk/yabause/src/error.c

116 lines
4.2 KiB
C

/* Copyright 2005-2006 Theo Berkau
This file is part of Yabause.
Yabause is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
Yabause is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Yabause; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "error.h"
#include "yui.h"
//////////////////////////////////////////////////////////////////////////////
static void AllocAmendPrintString(const char *string1, const char *string2)
{
char *string;
if ((string = (char *)malloc(strlen(string1) + strlen(string2) + 2)) == NULL)
return;
sprintf(string, "%s%s\n", string1, string2);
YuiErrorMsg(string);
free(string);
}
//////////////////////////////////////////////////////////////////////////////
void YabSetError(int type, const void *extra)
{
char tempstr[512];
SH2_struct *sh;
switch (type)
{
case YAB_ERR_FILENOTFOUND:
AllocAmendPrintString(_("File not found: "), extra);
break;
case YAB_ERR_MEMORYALLOC:
YuiErrorMsg(_("Error allocating memory\n"));
break;
case YAB_ERR_FILEREAD:
AllocAmendPrintString(_("Error reading file: "), extra);
break;
case YAB_ERR_FILEWRITE:
AllocAmendPrintString(_("Error writing file: "), extra);
break;
case YAB_ERR_CANNOTINIT:
AllocAmendPrintString(_("Cannot initialize "), extra);
break;
case YAB_ERR_SH2INVALIDOPCODE:
sh = (SH2_struct *)extra;
SH2GetRegisters(sh, &sh->regs);
sprintf(tempstr, "%s SH2 invalid opcode\n\n"
"R0 = %08lX\tR12 = %08lX\n"
"R1 = %08lX\tR13 = %08lX\n"
"R2 = %08lX\tR14 = %08lX\n"
"R3 = %08lX\tR15 = %08lX\n"
"R4 = %08lX\tSR = %08lX\n"
"R5 = %08lX\tGBR = %08lX\n"
"R6 = %08lX\tVBR = %08lX\n"
"R7 = %08lX\tMACH = %08lX\n"
"R8 = %08lX\tMACL = %08lX\n"
"R9 = %08lX\tPR = %08lX\n"
"R10 = %08lX\tPC = %08lX\n"
"R11 = %08lX\n", sh->isslave ? "Slave" : "Master",
(long)sh->regs.R[0], (long)sh->regs.R[12],
(long)sh->regs.R[1], (long)sh->regs.R[13],
(long)sh->regs.R[2], (long)sh->regs.R[14],
(long)sh->regs.R[3], (long)sh->regs.R[15],
(long)sh->regs.R[4], (long)sh->regs.SR.all,
(long)sh->regs.R[5], (long)sh->regs.GBR,
(long)sh->regs.R[6], (long)sh->regs.VBR,
(long)sh->regs.R[7], (long)sh->regs.MACH,
(long)sh->regs.R[8], (long)sh->regs.MACL,
(long)sh->regs.R[9], (long)sh->regs.PR,
(long)sh->regs.R[10], (long)sh->regs.PC,
(long)sh->regs.R[11]);
YuiErrorMsg(tempstr);
break;
case YAB_ERR_SH2READ:
YuiErrorMsg(_("SH2 read error\n")); // fix me
break;
case YAB_ERR_SH2WRITE:
YuiErrorMsg(_("SH2 write error\n")); // fix me
break;
case YAB_ERR_SDL:
AllocAmendPrintString(_("SDL Error: "), extra);
break;
case YAB_ERR_OTHER:
YuiErrorMsg((char *)extra);
break;
case YAB_ERR_UNKNOWN:
default:
YuiErrorMsg(_("Unknown error occurred\n"));
break;
}
}
//////////////////////////////////////////////////////////////////////////////