diff options
author | KuroiIeWa5Da <tyuki@adu.me> | 2012-01-23 03:59:25 -0600 |
---|---|---|
committer | KuroiIeWa5Da <tyuki@adu.me> | 2012-01-23 03:59:25 -0600 |
commit | a297c105b5269f51d85b07308aa1c0c87eb9daca (patch) | |
tree | d96aa0ab800f1846a67305264c4ec715a3cb4dec | |
parent | 7b5159fb06fd66f79abb62bf35306a727a269987 (diff) |
updated disassembly program to support a custom stop address
hg-commit-id: a2bee0bdb345
-rw-r--r-- | music/pokeredmusicdisasm/Parser.cpp | 14 | ||||
-rw-r--r-- | music/pokeredmusicdisasm/Parser.h | 6 | ||||
-rw-r--r-- | music/pokeredmusicdisasm/main.cpp | 36 |
3 files changed, 52 insertions, 4 deletions
diff --git a/music/pokeredmusicdisasm/Parser.cpp b/music/pokeredmusicdisasm/Parser.cpp index a548b015..f11d57b6 100644 --- a/music/pokeredmusicdisasm/Parser.cpp +++ b/music/pokeredmusicdisasm/Parser.cpp @@ -9,6 +9,7 @@ Parser::Parser() fileLength = 0;
filePos = 0;
stop = false;
+ stopAddress = 0;
}
Parser::Parser(std::string filename)
@@ -46,6 +47,16 @@ void Parser::SetFilename(std::string value) Read();
}
+unsigned int Parser::GetStopAddress()
+{
+ return stopAddress;
+}
+
+void Parser::SetStopAddress(unsigned int value)
+{
+ stopAddress = value;
+}
+
string Parser::GetParsedAsm()
{
string tmpStr;
@@ -192,6 +203,9 @@ void Parser::ParseNext() // Parses the block immidiately following unkCode << "db $" << hex << uppercase << (short)rawBytesFixed[i];
parsedString.push_back(unkCode.str());
}
+
+ // If the stop address parameter is set, break when we get there
+ if( (stopAddress != 0) && (i >= stopAddress) ) break;
}
// Now record the postion we left off
diff --git a/music/pokeredmusicdisasm/Parser.h b/music/pokeredmusicdisasm/Parser.h index 9f7550c0..515d07ad 100644 --- a/music/pokeredmusicdisasm/Parser.h +++ b/music/pokeredmusicdisasm/Parser.h @@ -37,6 +37,9 @@ public: std::string GetFilename();
void SetFilename(std::string value);
+ unsigned int GetStopAddress();
+ void SetStopAddress(unsigned int value);
+
std::string GetParsedAsm();
// File Operations
@@ -56,6 +59,9 @@ private: unsigned int filePos;
bool stop;
+ // Optional Settings
+ unsigned int stopAddress;
+
// A lot of tmp classes
Call tmpCall;
Duty tmpDuty;
diff --git a/music/pokeredmusicdisasm/main.cpp b/music/pokeredmusicdisasm/main.cpp index 919fd719..40fca2ae 100644 --- a/music/pokeredmusicdisasm/main.cpp +++ b/music/pokeredmusicdisasm/main.cpp @@ -7,31 +7,59 @@ using namespace std; int main(int argc, char** argv)
{
+ const unsigned char parameters = 2;
+ const unsigned char self = 1;
+ const unsigned char _max_argc = parameters + self;
+
string arg1; // Offset
- string arg2; // File
+ string arg2; // File or "--" (if "--" then the file is assumed)
+
+ string paramStopAddr;
- if(argc >= 3)
+ if(argc >= _max_argc)
{
arg1 = argv[1];
arg2 = argv[2];
}
- else if(argc == 2)
+ else if(argc == (_max_argc - 1))
{
arg1 = argv[1];
arg2 = "../baserom.gbc";
}
+ // Process any parameters
+ if(argc > _max_argc)
+ {
+ for(int i = _max_argc; i < argc; i++)
+ {
+ string tmpArgv = argv[i];
+ if(tmpArgv.substr(0, 7) == "--stop=") paramStopAddr = tmpArgv.substr(7);
+ }
+ }
+
if(arg1 == "") Console::Ask("What offset in the file in hex (0x----): ", arg1);
if(arg2 == "") Console::Ask("What file: ", arg2);
// Weird way of converting arg1 to an unsigned integer
+ Parser p(arg2);
+
stringstream arg1Conv;
unsigned int arg1ConvNum;
arg1Conv << arg1;
arg1Conv << hex;
arg1Conv >> arg1ConvNum;
- Parser p(arg2);
+ if(paramStopAddr != "")
+ {
+ stringstream paramStopAddrConv;
+ unsigned int paramStopAddrNum = 0;
+ paramStopAddrConv.str("");
+ paramStopAddrConv << paramStopAddr;
+ paramStopAddrConv << hex;
+ paramStopAddrConv >> paramStopAddrNum;
+ p.SetStopAddress(paramStopAddrNum);
+ }
+
p.Parse(arg1ConvNum);
Console::PrintLn(p.GetParsedAsm().c_str());
|