/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Mupen64plus - debugger.c * * Mupen64Plus homepage: http://code.google.com/p/mupen64plus/ * * Copyright (C) 2008 DarkJeztr * * Copyright (C) 2002 davFr * * * * This program 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. * * * * This program 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 this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ //#include #include "debugger.h" // State of the Emulation Thread: // 0 -> pause, 2 -> run. int g_DebuggerEnabled = 0; // wether the debugger is enabled or not int debugger_mode; int run; SDL_cond *debugger_done_cond; SDL_mutex *mutex; uint32 previousPC; //]=-=-=-=-=-=-=-=-=-=-=[ Initialisation du Debugger ]=-=-=-=-=-=-=-=-=-=-=-=[ void init_debugger() { debugger_mode = 1; run = 0; init_debugger_frontend(); init_host_disassembler(); mutex = SDL_CreateMutex(); debugger_done_cond = SDL_CreateCond(); } void uninit_debugger() { SDL_DestroyMutex(mutex); mutex = NULL; SDL_DestroyCond(debugger_done_cond); debugger_done_cond = NULL; } //]=-=-=-=-=-=-=-=-=-=-=-=-=[ Mise-a-Jour Debugger ]=-=-=-=-=-=-=-=-=-=-=-=-=[ void update_debugger() // Update debugger state and display. // Should be called after each R4300 instruction. { int bpt; if(run==2) { bpt = check_breakpoints(PC->addr); if( bpt==-1 ) { previousPC = PC->addr; return; } else { run = 0; switch_button_to_run(); if(BPT_CHECK_FLAG(g_Breakpoints[bpt], BPT_FLAG_LOG)) log_breakpoint(PC->addr, BPT_FLAG_EXEC, 0); } } else if ( previousPC == PC->addr ) { return; } update_debugger_frontend(); previousPC = PC->addr; // Emulation thread is blocked until a button is clicked. SDL_CondWait(debugger_done_cond, mutex); }