示例#1
0
void agbPrintFlush()
{
    u16 get = debuggerReadHalfWord(0x9fe20fc);
    u16 put = debuggerReadHalfWord(0x9fe20fe);

    u32 address = (debuggerReadHalfWord(0x9fe20fa) << 16);
    if(address != 0xfd0000 && address != 0x1fd0000) {
        dbgOutput("Did you forget to call AGBPrintInit?\n", 0);
        // get rid of the text otherwise we will continue to be called
        debuggerWriteHalfWord(0x9fe20fc, put);
        return;
    }

    u8 *data = &gMem.rom[address];

    while(get != put) {
        char c = data[get++];
        char s[2];
        s[0] = c;
        s[1] = 0;

        if(systemVerbose & VERBOSE_AGBPRINT)
            dbgOutput(s, 0);
        if(c == '\n')
            break;
    }
    debuggerWriteHalfWord(0x9fe20fc, get);
}
示例#2
0
bool agbPrintWrite(uint32_t address, uint16_t value)
{
    if (agbPrintEnabled) {
        if (address == 0x9fe2ffe) { // protect
            agbPrintProtect = (value != 0);
            debuggerWriteHalfWord(address, value);
            return true;
        } else {
            if (agbPrintProtect && ((address >= 0x9fe20f8 && address <= 0x9fe20ff) // control structure
                                       || (address >= 0x8fd0000 && address <= 0x8fdffff)
                                       || (address >= 0x9fd0000 && address <= 0x9fdffff))) {
                debuggerWriteHalfWord(address, value);
                return true;
            }
        }
    }
    return false;
}
示例#3
0
void debuggerApplyBreakpoint(u32 address, int num, int size)
{
  if(size)
    debuggerWriteMemory(address, (u32)(0xe1200070 | 
                                       (num & 0xf) | 
                                       ((num<<4)&0xf0)));
  else
    debuggerWriteHalfWord(address, 
                          (u16)(0xbe00 | num));
}
示例#4
0
void debuggerDisableBreakpoints()
{
  for(int i = 0; i < debuggerNumOfBreakpoints; i++) {
    if(debuggerBreakpointList[i].size)
      debuggerWriteMemory(debuggerBreakpointList[i].address,
                          debuggerBreakpointList[i].value);
    else
      debuggerWriteHalfWord(debuggerBreakpointList[i].address,
                            debuggerBreakpointList[i].value);      
  }
}