bool MipsAssembleOpcode(const char* line, DebugInterface* cpu, u32 address) { #if defined(_WIN32) || defined(ANDROID) PspAssemblerFile file; StringList errors; wchar_t str[64]; swprintf(str,64,L".psp\n.org 0x%08X\n",address); ArmipsArguments args; args.mode = ArmipsMode::Memory; args.content = str + ConvertUTF8ToWString(line); args.silent = true; args.memoryFile = &file; args.errorsResult = &errors; symbolMap.GetLabels(args.labels); errorText = L""; if (!runArmips(args)) { for (size_t i = 0; i < errors.size(); i++) { errorText += errors[i]; if (i != errors.size()-1) errorText += L"\n"; } return false; } return true; #else errorText = L"Unsupported platform"; return false; #endif }
int wmain(int argc, wchar_t* argv[]) { ArmipsArguments parameters; #ifdef ARMIPS_TESTS std::wstring name; if (argc < 2) return !runTests(L"Tests"); else return !runTests(argv[1]); #endif Logger::printLine(ARMIPSNAME " Assembler v0.7d (" __DATE__ " " __TIME__ ") by Kingcom"); StringList arguments = getStringListFromArray(argv,argc); if (arguments.size() < 2) { Logger::printLine(L"Usage: armips.exe file.asm [-temp temp.txt] [-sym symfile.sym]"); return 1; } parameters.inputFileName = arguments[1]; if (fileExists(parameters.inputFileName) == false) { Logger::printLine(L"File %S not found\n",parameters.inputFileName); return 1; } size_t argpos = 2; while (argpos < arguments.size()) { if (arguments[argpos] == L"-temp") { parameters.tempFileName = arguments[argpos+1]; argpos += 2; } else if (arguments[argpos] == L"-sym") { parameters.symFileName = arguments[argpos+1]; parameters.symFileVersion = 1; argpos += 2; } else if (arguments[argpos] == L"-sym2") { parameters.symFileName = arguments[argpos+1]; parameters.symFileVersion = 2; argpos += 2; } else if (arguments[argpos] == L"-erroronwarning") { parameters.errorOnWarning = true; argpos += 1; } else if (arguments[argpos] == L"-equ") { std::wstring name = arguments[argpos + 1]; std::wstring replacement = arguments[argpos + 2]; parameters.equList.push_back(name + L" equ " + replacement); argpos += 3; } else { Logger::printLine(L"Invalid parameter %S\n",arguments[argpos]); return 1; } } bool result = runArmips(parameters); if (result == false) { Logger::printLine(L"Aborting."); return 1; } Logger::printLine(L"Done."); return 0; }