shithub: pokered

Download patch

ref: a297c105b5269f51d85b07308aa1c0c87eb9daca
parent: 7b5159fb06fd66f79abb62bf35306a727a269987
author: KuroiIeWa5Da <tyuki@adu.me>
date: Sun Jan 22 22:59:25 EST 2012

updated disassembly program to support a custom stop address

hg-commit-id: a2bee0bdb345


--- a/music/pokeredmusicdisasm/Parser.cpp
+++ b/music/pokeredmusicdisasm/Parser.cpp
@@ -9,6 +9,7 @@
 	fileLength = 0;
 	filePos = 0;
 	stop = false;
+	stopAddress = 0;
 }
 
 Parser::Parser(std::string filename)
@@ -46,6 +47,16 @@
 	Read();
 }
 
+unsigned int Parser::GetStopAddress()
+{
+	return stopAddress;
+}
+
+void Parser::SetStopAddress(unsigned int value)
+{
+	stopAddress = value;
+}
+
 string Parser::GetParsedAsm()
 {
 	string tmpStr;
@@ -192,6 +203,9 @@
 			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
--- a/music/pokeredmusicdisasm/Parser.h
+++ b/music/pokeredmusicdisasm/Parser.h
@@ -37,6 +37,9 @@
 	std::string GetFilename();
 	void SetFilename(std::string value);
 
+	unsigned int GetStopAddress();
+	void SetStopAddress(unsigned int value);
+
 	std::string GetParsedAsm();
 
 	// File Operations
@@ -55,6 +58,9 @@
 	unsigned int fileLength;
 	unsigned int filePos;
 	bool stop;
+
+	// Optional Settings
+	unsigned int stopAddress;
 
 	// A lot of tmp classes
 	Call tmpCall;
--- a/music/pokeredmusicdisasm/main.cpp
+++ b/music/pokeredmusicdisasm/main.cpp
@@ -7,24 +7,42 @@
 
 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)
 
-	if(argc >= 3)
+	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;
@@ -31,7 +49,17 @@
 	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());