From d38e80ee04afe582e70150d3884e56c05f3fd7a8 Mon Sep 17 00:00:00 2001 From: pixel Date: Sat, 27 Nov 2004 21:44:44 +0000 Subject: Large dos2unix commit... --- lib/mipsdump.cpp | 414 +++++++++++++++++++++++++++---------------------------- 1 file changed, 207 insertions(+), 207 deletions(-) (limited to 'lib/mipsdump.cpp') diff --git a/lib/mipsdump.cpp b/lib/mipsdump.cpp index 1eb59f7..1e427e1 100644 --- a/lib/mipsdump.cpp +++ b/lib/mipsdump.cpp @@ -1,207 +1,207 @@ -/* - * PSX-Tools Bundle Pack - * Copyright (C) 2002-2003 Nicolas "Pixel" Noble - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* $Id: mipsdump.cpp,v 1.2 2004-11-27 21:44:48 pixel Exp $ */ - -#include "mipsdump.h" -#include "mips.h" - -TDump::TDump(mipsmem * mm) : TDis(mm) { - reset(); -} - -void TDump::reset() { - invalid = false; - hasbr = false; - hastg = false; - hasfc = false; - name = ""; - comments = ""; - args.clear(); -} - -void TDump::add_branch(Uint32 _tg) { - tg = _tg; - hasbr = true; -} - -void TDump::add_jump(Uint32 _tg) { - tg = _tg; - hastg = true; -} - -void TDump::add_function(Uint32 _tg) { - tg = _tg; - hasfc = true; -} - -void TDump::SetTag(Uint32 a, int t, bool v) { -} - -void TDump::Name(const String & _name) { - name = _name; -} - -void TDump::PushGPReg(int r) { - pairarg p; - - p.left = T_GPREGISTER; - p.right.v = r; - - args.push_back(p); -} - -void TDump::PushCPReg(int r) { - pairarg p; - - p.left = T_CPREGISTER; - p.right.v = r; - - args.push_back(p); -} - -void TDump::PushImm(Uint32 imm) { - pairarg p; - - p.left = T_IMM16; - p.right.v = imm; - - args.push_back(p); -} - -void TDump::PushTarget(Uint32 target) { - pairarg p; - - p.left = T_IMM32; - p.right.v = target; - - args.push_back(p); -} - -void TDump::PushSa(Uint32 sa) { - pairarg p; - - p.left = T_IMM8; - p.right.v = sa; - - args.push_back(p); -} - -void TDump::PushOfB(int reg, Uint32 offset, int width) { - pairarg p; - - p.left = T_OFB; - p.right.OfB.o = offset; - p.right.OfB.r = reg; - p.right.OfB.w = width; - - args.push_back(p); -} - -void TDump::PushOffset(Uint32 offset) { - pairarg p; - - p.left = T_IMM32; - p.right.v = offset; - - args.push_back(p); -} - -void TDump::PushFull(Uint32 full) { - pairarg p; - - p.left = T_IMM32; - p.right.v = full; - - args.push_back(p); -} - -void TDump::Invalid() { - invalid = true; -} - -void TDump::Suspect() { -} - -void TDump::Comment(const String & c) { - comments = c; -} - -Dumper::Dumper(mipsmem * _mm) : dump(new TDump(_mm)), mm(_mm) { -} - -void Dumper::process() { - Uint32 pc, code; - memdata * mem; - - for (pc = 0x80000000; pc < (0x80000000 + PSXMEM); pc++) { - if (mm->GetTag(pc, CODE)) { - decode(dump, pc); - code = mm->Read32(pc); - printm(M_STATUS, "%8.8lX %8.8lX: " + dump->name + "\t", pc, code); - for (std::vector::iterator i = dump->args.begin(); i != dump->args.end(); i++) { - switch(i->left) { - case T_GPREGISTER: - printm(M_BARE, "$%s", registers[i->right.v]); - break; - case T_CPREGISTER: - printm(M_BARE, "$%s", CP0registers[i->right.v]); - break; - case T_IMM8: - printm(M_BARE, "0x%2.2lX", i->right.v); - break; - case T_IMM16: - printm(M_BARE, "0x%4.4lX", i->right.v); - break; - case T_IMM32: - printm(M_BARE, "0x%8.8lX", i->right.v); - break; - case T_OFB: - printm(M_BARE, "0x%4.4lX($%s)", i->right.OfB.o, registers[i->right.OfB.r]); - break; - } - if ((i + 1) != dump->args.end()) { - printm(M_BARE, ", "); - } - } - if (dump->comments != "") { - printm(M_BARE, "\t; " + dump->comments); - } - printm(M_BARE, "\n"); - mem = mm->GetDatas(pc); - if (mem) { - reffrom_t * from; - refto_t * to; - - from = mem->getreffrom(); - to = mem->getrefto(); - - for (from = mem->getreffrom(); from; from = from->getnext()) { - printm(M_STATUS, " Reference from 0x%8.8lX\n", from->getref()->getaddress()); - } - - if (to) { - printm(M_STATUS, " Reference to 0x%8.8lX\n", to->getref()->getaddress()); - } - } - pc += 3; - dump->reset(); - } - } -} +/* + * PSX-Tools Bundle Pack + * Copyright (C) 2002-2003 Nicolas "Pixel" Noble + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* $Id: mipsdump.cpp,v 1.3 2004-11-27 21:47:56 pixel Exp $ */ + +#include "mipsdump.h" +#include "mips.h" + +TDump::TDump(mipsmem * mm) : TDis(mm) { + reset(); +} + +void TDump::reset() { + invalid = false; + hasbr = false; + hastg = false; + hasfc = false; + name = ""; + comments = ""; + args.clear(); +} + +void TDump::add_branch(Uint32 _tg) { + tg = _tg; + hasbr = true; +} + +void TDump::add_jump(Uint32 _tg) { + tg = _tg; + hastg = true; +} + +void TDump::add_function(Uint32 _tg) { + tg = _tg; + hasfc = true; +} + +void TDump::SetTag(Uint32 a, int t, bool v) { +} + +void TDump::Name(const String & _name) { + name = _name; +} + +void TDump::PushGPReg(int r) { + pairarg p; + + p.left = T_GPREGISTER; + p.right.v = r; + + args.push_back(p); +} + +void TDump::PushCPReg(int r) { + pairarg p; + + p.left = T_CPREGISTER; + p.right.v = r; + + args.push_back(p); +} + +void TDump::PushImm(Uint32 imm) { + pairarg p; + + p.left = T_IMM16; + p.right.v = imm; + + args.push_back(p); +} + +void TDump::PushTarget(Uint32 target) { + pairarg p; + + p.left = T_IMM32; + p.right.v = target; + + args.push_back(p); +} + +void TDump::PushSa(Uint32 sa) { + pairarg p; + + p.left = T_IMM8; + p.right.v = sa; + + args.push_back(p); +} + +void TDump::PushOfB(int reg, Uint32 offset, int width) { + pairarg p; + + p.left = T_OFB; + p.right.OfB.o = offset; + p.right.OfB.r = reg; + p.right.OfB.w = width; + + args.push_back(p); +} + +void TDump::PushOffset(Uint32 offset) { + pairarg p; + + p.left = T_IMM32; + p.right.v = offset; + + args.push_back(p); +} + +void TDump::PushFull(Uint32 full) { + pairarg p; + + p.left = T_IMM32; + p.right.v = full; + + args.push_back(p); +} + +void TDump::Invalid() { + invalid = true; +} + +void TDump::Suspect() { +} + +void TDump::Comment(const String & c) { + comments = c; +} + +Dumper::Dumper(mipsmem * _mm) : dump(new TDump(_mm)), mm(_mm) { +} + +void Dumper::process() { + Uint32 pc, code; + memdata * mem; + + for (pc = 0x80000000; pc < (0x80000000 + PSXMEM); pc++) { + if (mm->GetTag(pc, CODE)) { + decode(dump, pc); + code = mm->Read32(pc); + printm(M_STATUS, "%8.8lX %8.8lX: " + dump->name + "\t", pc, code); + for (std::vector::iterator i = dump->args.begin(); i != dump->args.end(); i++) { + switch(i->left) { + case T_GPREGISTER: + printm(M_BARE, "$%s", registers[i->right.v]); + break; + case T_CPREGISTER: + printm(M_BARE, "$%s", CP0registers[i->right.v]); + break; + case T_IMM8: + printm(M_BARE, "0x%2.2lX", i->right.v); + break; + case T_IMM16: + printm(M_BARE, "0x%4.4lX", i->right.v); + break; + case T_IMM32: + printm(M_BARE, "0x%8.8lX", i->right.v); + break; + case T_OFB: + printm(M_BARE, "0x%4.4lX($%s)", i->right.OfB.o, registers[i->right.OfB.r]); + break; + } + if ((i + 1) != dump->args.end()) { + printm(M_BARE, ", "); + } + } + if (dump->comments != "") { + printm(M_BARE, "\t; " + dump->comments); + } + printm(M_BARE, "\n"); + mem = mm->GetDatas(pc); + if (mem) { + reffrom_t * from; + refto_t * to; + + from = mem->getreffrom(); + to = mem->getrefto(); + + for (from = mem->getreffrom(); from; from = from->getnext()) { + printm(M_STATUS, " Reference from 0x%8.8lX\n", from->getref()->getaddress()); + } + + if (to) { + printm(M_STATUS, " Reference to 0x%8.8lX\n", to->getref()->getaddress()); + } + } + pc += 3; + dump->reset(); + } + } +} -- cgit v1.2.3