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) { - string arg1; // Offset - string arg2; // File + const unsigned char parameters = 2; + const unsigned char self = 1; + const unsigned char _max_argc = parameters + self; - if(argc >= 3) + string arg1; // Offset + string arg2; // File or "--" (if "--" then the file is assumed) + + string paramStopAddr; + + 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());