From d1362c02187e75bed546a1d402cbc6f32bfc55cd Mon Sep 17 00:00:00 2001 From: OmniaX-Dev Date: Fri, 20 Mar 2026 23:23:28 +0100 Subject: [PATCH] Accomodated refactor of ostd::Utils in OmniaFramework --- extra/dragon/disk1.dr | Bin 4194304 -> 4194304 bytes extra/dss/DragonOS/kernel0/kernel0.dss | 4 +- extra/dss/sdk/bios_api.dss | 2 +- other/build.nr | 2 +- src/assembler/Assembler.cpp | 46 ++++--- src/assembler/Assembler.hpp | 3 +- src/assembler/DASMApp.cpp | 16 ++- src/debugger/Debugger.cpp | 161 +++++++++++++------------ src/debugger/Debugger.hpp | 1 - src/debugger/DebuggerNew.cpp | 30 ++--- src/debugger/DebuggerNew.hpp | 5 +- src/debugger/DisassemblyLoader.cpp | 6 +- src/debugger/DisassemblyLoader.hpp | 2 +- src/hardware/IMemoryDevice.hpp | 2 +- src/hardware/MemoryMapper.cpp | 5 +- src/hardware/VirtualCPU.cpp | 48 ++++---- src/hardware/VirtualCPU.hpp | 6 +- src/hardware/VirtualHardDrive.hpp | 2 +- src/hardware/VirtualIODevices.cpp | 54 ++++----- src/runtime/ConfigLoader.cpp | 1 - src/runtime/ConfigLoader.hpp | 2 +- src/runtime/DragonRuntime.cpp | 84 ++++++------- src/runtime/runtime_main.cpp | 1 - src/tools/GlobalData.hpp | 4 +- src/tools/Tools.cpp | 30 ++--- src/tools/Utils.cpp | 1 - src/tools/Utils.hpp | 2 +- 27 files changed, 272 insertions(+), 248 deletions(-) diff --git a/extra/dragon/disk1.dr b/extra/dragon/disk1.dr index 0612569bb8b3bf810437f452e099dfe1e1d88baa..8d132cfdb00732cac9e9d48cb2c68203c06679e8 100644 GIT binary patch delta 338 zcmW;BNlpS`7=+>em}db|ltE-h_#Kd0L3XS=Atbo>5^l`j2?!RTN@XvbF;_V!m!>*7&)!a2 z(vjcw%o4cZh6i5w;70&Kgb+pqQN(bCI1)(W8Y$f17HQn!9vNhjLmm$(;1NZXP(}q+ q)KEtQPiUeAg=f6r6>n(c9UXMhLmvYSF~SEvF~$U6yO}jT{G9;-4snhE delta 337 zcmW;BNlpS`7=+>eKqh4tL_lR8gddebZ~)n{?t~CH0Eb{@{!UCdLN7T3i3x-~hwvh- zed)zhsZ?pLUHa@-hT0x!8A#9G{>ak)(-LaUOv5k@nW~Mc{7zXURQ9|XQ+0H5ZmN^> z?CrQEU0JOsmcRu!F5rO|KKK#9C9V)e2w_AJMGSFVBY`Atkisp}$RLY5+~WZ`%H?hWt?|-i2ax(w` diff --git a/extra/dss/DragonOS/kernel0/kernel0.dss b/extra/dss/DragonOS/kernel0/kernel0.dss index 63145fb..4ae66be 100644 --- a/extra/dss/DragonOS/kernel0/kernel0.dss +++ b/extra/dss/DragonOS/kernel0/kernel0.dss @@ -3,10 +3,10 @@ .entry _kernel0_main .header KERNEL0_BOOT -@include +@include @include <../drivers/display_driver.dss> @include <../drivers/keyboard_driver.dss> -@include +@include ## ========================================================================================================================= diff --git a/extra/dss/sdk/bios_api.dss b/extra/dss/sdk/bios_api.dss index b62fc46..b073ae5 100644 --- a/extra/dss/sdk/bios_api.dss +++ b/extra/dss/sdk/bios_api.dss @@ -1,5 +1,5 @@ ## -- -## -- This file is automatically generated by the DragonAssembler (version 0.4.1642) +## -- This file is automatically generated by the DragonAssembler (version 0.4.1645) ## -- Please do not modify this file in any way. ## -- diff --git a/other/build.nr b/other/build.nr index 138f1a9..da66d92 100644 --- a/other/build.nr +++ b/other/build.nr @@ -1 +1 @@ -1643 +1646 diff --git a/src/assembler/Assembler.cpp b/src/assembler/Assembler.cpp index 508ae09..ec17b92 100644 --- a/src/assembler/Assembler.cpp +++ b/src/assembler/Assembler.cpp @@ -2,9 +2,10 @@ #include #include #include -#include #include #include +#include +#include #include "../tools/GlobalData.hpp" #include "../hardware/VirtualHardDrive.hpp" @@ -50,6 +51,8 @@ namespace dragon replaceLabelRefs(); combineDataAndCode(); createExportFiles(); + if (Application::args.disassembly_file_path.trim() != "") + saveCurrentStageToFile(); m_programSize = m_code.size(); if (m_fixedSize > 0 && m_code.size() > m_fixedSize) std::cout << "Warning: Fixed size specified but exceeded: (" << (int)m_code.size() << "/" << (int)m_fixedSize << " bytes)\n"; @@ -66,7 +69,7 @@ namespace dragon { assembleFromFile(sourceFileName); if (m_code.size() == 0) return { }; - ostd::Utils::saveByteStreamToFile(m_code, binaryFileName); + ostd::Memory::saveByteStreamToFile(m_code, binaryFileName); return m_code; } @@ -118,11 +121,11 @@ namespace dragon out.fg(ostd::ConsoleColors::Yellow).p("Symbols:").nl(); for (auto& symbol : m_symbolTable) { - out.fg(ostd::ConsoleColors::Red).p(ostd::Utils::getHexStr(symbol.second.address, true, 2)); + out.fg(ostd::ConsoleColors::Red).p(ostd::String::getHexStr(symbol.second.address, true, 2)); out.fg(ostd::ConsoleColors::Magenta).p(" ").p(symbol.first); out.fg(ostd::ConsoleColors::Blue).nl().p(" "); for (auto& b : symbol.second.bytes) - out.p(ostd::Utils::getHexStr(b, false, 1)).p("."); + out.p(ostd::String::getHexStr(b, false, 1)).p("."); out.nl(); } if (m_symbolTable.size() > 0) @@ -133,7 +136,7 @@ namespace dragon for (auto& label : m_labelTable) { out.fg(ostd::ConsoleColors::Magenta).p(label.first.new_fixedLength(symbol_len)); - out.fg(ostd::ConsoleColors::Red).p(ostd::Utils::getHexStr(label.second.address, true, 2)).nl(); + out.fg(ostd::ConsoleColors::Red).p(ostd::String::getHexStr(label.second.address, true, 2)).nl(); } if (m_labelTable.size() > 0) out.nl(); @@ -155,9 +158,9 @@ namespace dragon out.fg(ostd::ConsoleColors::Cyan).p(ostd::String("Fixed Size: ").new_fixedLength(symbol_len)).fg(ostd::ConsoleColors::BrightRed).p((int)m_fixedSize).p(" bytes").nl(); out.fg(ostd::ConsoleColors::Cyan).p(ostd::String("Program Size:").new_fixedLength(symbol_len)).fg(ostd::ConsoleColors::BrightRed).p((int)m_programSize).p(" bytes").nl(); out.fg(ostd::ConsoleColors::Cyan).p(ostd::String("Data Size: ").new_fixedLength(symbol_len)).fg(ostd::ConsoleColors::BrightRed).p((int)m_dataSize).p(" bytes").nl(); - out.fg(ostd::ConsoleColors::Cyan).p(ostd::String("Fixed Fill: ").new_fixedLength(symbol_len)).fg(ostd::ConsoleColors::BrightRed).p(ostd::Utils::getHexStr(m_fixedFillValue, true, 1)).nl(); - out.fg(ostd::ConsoleColors::Cyan).p(ostd::String("Load Address:").new_fixedLength(symbol_len)).fg(ostd::ConsoleColors::BrightRed).p(ostd::Utils::getHexStr(m_loadAddress, true, 2)).nl(); - out.fg(ostd::ConsoleColors::Cyan).p(ostd::String("Entry Point: ").new_fixedLength(symbol_len)).fg(ostd::ConsoleColors::BrightRed).p(ostd::Utils::getHexStr(m_dataSize + m_loadAddress + 3, true, 2)).nl(); + out.fg(ostd::ConsoleColors::Cyan).p(ostd::String("Fixed Fill: ").new_fixedLength(symbol_len)).fg(ostd::ConsoleColors::BrightRed).p(ostd::String::getHexStr(m_fixedFillValue, true, 1)).nl(); + out.fg(ostd::ConsoleColors::Cyan).p(ostd::String("Load Address:").new_fixedLength(symbol_len)).fg(ostd::ConsoleColors::BrightRed).p(ostd::String::getHexStr(m_loadAddress, true, 2)).nl(); + out.fg(ostd::ConsoleColors::Cyan).p(ostd::String("Entry Point: ").new_fixedLength(symbol_len)).fg(ostd::ConsoleColors::BrightRed).p(ostd::String::getHexStr(m_dataSize + m_loadAddress + 3, true, 2)).nl(); } out.nl(); @@ -426,7 +429,7 @@ namespace dragon m_structDefs.push_back(struct_def); ostd::String size_def = "@define "; size_def.add(struct_def.name).add(".").add("SIZE").add(" "); - size_def.add(ostd::Utils::getHexStr(struct_def.size, true, 2)); + size_def.add(ostd::String::getHexStr(struct_def.size, true, 2)); newLines.push_back(size_def); in_struct = false; continue; @@ -526,7 +529,7 @@ namespace dragon // { // std::cout << " " << d.first << " "; // for (auto& b : d.second) - // std::cout << ostd::Utils::getHexStr(b) << " "; + // std::cout << ostd::String::getHexStr(b) << " "; // } // std::cout << "\n"; // } @@ -614,9 +617,9 @@ namespace dragon for (int32_t i = 0; i < member.data.size(); i++, data_index++) { if (has_init_data) - newLine.add(ostd::Utils::getHexStr(init_data[data_index], true, 2)); + newLine.add(ostd::String::getHexStr(init_data[data_index], true, 2)); else - newLine.add(ostd::Utils::getHexStr(member.data[i], true, 2)); + newLine.add(ostd::String::getHexStr(member.data[i], true, 2)); newLine.add(","); } newLine.substr(0, newLine.len() - 1); @@ -769,6 +772,11 @@ namespace dragon } } + void Assembler::saveCurrentStageToFile(void) + { + + } + void Assembler::parseSections(void) @@ -1292,7 +1300,7 @@ namespace dragon if (opType == eOperandType::Immediate || opType == eOperandType::Label) { // if (opType == eOperandType::Label) - // std::cout << ostd::Utils::getHexStr(word, true, 2) << "\n"; + // std::cout << ostd::String::getHexStr(word, true, 2) << "\n"; m_code[m_code.size() - 1] = data::OpCodes::PushImm; // m_code.push_back(data::OpCodes::PushImm); m_code.push_back((uint8_t)((word & 0xFF00) >> 8)); @@ -2512,7 +2520,7 @@ namespace dragon newCode.push_back((uint8_t)(entryAddr & 0x00FF)); if (m_dataSize > 0) m_disassembly.insert(m_disassembly.begin(), { (uint16_t)(m_loadAddress + 3), "[----------DATA_SECTION----------]" }); - m_disassembly.insert(m_disassembly.begin(), { m_loadAddress, ostd::String("jmp ").add(ostd::Utils::getHexStr(entryAddr, true, 2)) }); + m_disassembly.insert(m_disassembly.begin(), { m_loadAddress, ostd::String("jmp ").add(ostd::String::getHexStr(entryAddr, true, 2)) }); for (auto& d : m_symbolTable) { symbols.push_back(d.second); @@ -2552,7 +2560,7 @@ namespace dragon // std::cout << "SYMBOL: " << symbol.first << "\n"; // std::cout << "LINE: " << lineEdit << "\n"; // std::cout << "REGEX: " << regex << "\n"; - lineEdit.regexReplace(regex, ostd::Utils::getHexStr(symbol.second.address, true, 2), false); + lineEdit.regexReplace(regex, ostd::String::getHexStr(symbol.second.address, true, 2), false); // std::cout << "NEW_LINE: " << lineEdit << "\n\n"; } return lineEdit; @@ -2630,15 +2638,15 @@ namespace dragon m_labelTable[opEdit].references.push_back(m_code.size()); outOp = (int16_t)labelAddr; // std::cout << "LABEL: " << opEdit << "\n"; - // std::cout << " : " << ostd::Utils::getHexStr(labelAddr, true, 2) << "\n"; - // std::cout << " : " << ostd::Utils::getHexStr(outOp, true, 2) << "\n"; + // std::cout << " : " << ostd::String::getHexStr(labelAddr, true, 2) << "\n"; + // std::cout << " : " << ostd::String::getHexStr(outOp, true, 2) << "\n"; return eOperandType::Label; } if (opEdit.startsWith("{") && opEdit.endsWith("}")) { opEdit = opEdit.substr(1, opEdit.len() - 1); opEdit.trim(); - outOp = (int16_t)ostd::Utils::solveIntegerExpression(opEdit); + outOp = (int16_t)ostd::MathUtils::solveIntegerExpression(opEdit); return eOperandType::Immediate; } if (opEdit.startsWith("[") && opEdit.endsWith("]")) @@ -2649,7 +2657,7 @@ namespace dragon { opEdit = opEdit.substr(1, opEdit.len() - 1); opEdit.trim(); - outOp = (int16_t)ostd::Utils::solveIntegerExpression(opEdit); + outOp = (int16_t)ostd::MathUtils::solveIntegerExpression(opEdit); return eOperandType::DerefMemory; } if (!opEdit.isNumeric()) diff --git a/src/assembler/Assembler.hpp b/src/assembler/Assembler.hpp index 02b2381..75d4b31 100644 --- a/src/assembler/Assembler.hpp +++ b/src/assembler/Assembler.hpp @@ -1,6 +1,5 @@ #pragma once -#include #include #include #include @@ -96,6 +95,7 @@ namespace dragon bool debug_mode { false }; bool save_exports { true }; ostd::String disassembly_file_path { "" }; + ostd::String final_stage_path { "" }; std::vector cpu_extensions; std::vector include_directories; }; @@ -133,6 +133,7 @@ namespace dragon static void createExports(void); static void replaceExportBuiltinVars(void); static void createExportFiles(void); + static void saveCurrentStageToFile(void); static void parseSections(void); static void parseDataSection(void); diff --git a/src/assembler/DASMApp.cpp b/src/assembler/DASMApp.cpp index 85aa5d1..8eada0e 100644 --- a/src/assembler/DASMApp.cpp +++ b/src/assembler/DASMApp.cpp @@ -1,6 +1,7 @@ #include "Assembler.hpp" #include #include +#include namespace dragon { @@ -57,6 +58,16 @@ namespace dragon args.disassembly_file_path = argv[i]; args.save_disassembly = true; } + else if (edit == "--save-final-stage") + { + if (i == argc - 1) + return RETURN_VAL_MISSING_PARAM; + i++; + ostd::String final_path = argv[i]; + if (!ostd::FileSystem::ensureFile(final_path)) + return RETURN_VAL_INVALID_PARAM; + args.final_stage_path = final_path; + } else if (edit == "--help") { print_application_help(); @@ -88,7 +99,7 @@ namespace dragon if (!disable_extmov) args.cpu_extensions.push_back("extmov"); if (args.save_disassembly && args.disassembly_file_path == "") - args.disassembly_file_path = "disassembly/" + ostd::Utils::md5(args.dest_file_path) + ".dds"; + args.disassembly_file_path = "disassembly/" + ostd::Hash::md5(args.dest_file_path) + ".dds"; } return RETURN_VAL_EXIT_SUCCESS; } @@ -101,6 +112,9 @@ namespace dragon ostd::String tmpCommand = "--save-disassembly "; tmpCommand.addRightPadding(commandLength); out.fg(ostd::ConsoleColors::Blue).p(tmpCommand).fg(ostd::ConsoleColors::Green).p("Saves debug information in the destination directory. (Enabled by default in debug mode.)").reset().nl(); + tmpCommand = "--save-final-stage "; + tmpCommand.addRightPadding(commandLength); + out.fg(ostd::ConsoleColors::Blue).p(tmpCommand).fg(ostd::ConsoleColors::Green).p("Saves the final full stripped code to the specified file.").reset().nl(); tmpCommand = "--verbose"; tmpCommand.addRightPadding(commandLength); out.fg(ostd::ConsoleColors::Blue).p(tmpCommand).fg(ostd::ConsoleColors::Green).p("Shows more information about the assembled program.").reset().nl(); diff --git a/src/debugger/Debugger.cpp b/src/debugger/Debugger.cpp index 358d289..43d62e8 100644 --- a/src/debugger/Debugger.cpp +++ b/src/debugger/Debugger.cpp @@ -2,6 +2,9 @@ #include "../runtime/DragonRuntime.hpp" #include "DisassemblyLoader.hpp" #include +#include +#include +#include namespace dragon { @@ -84,11 +87,11 @@ namespace dragon void Debugger::Utils::clearConsoleLine(void) { - for (int32_t i = 0; i < ostd::Utils::getConsoleWidth(); i++) + for (int32_t i = 0; i < ostd::BasicConsole::getConsoleWidth(); i++) out.p("\b"); - for (int32_t i = 0; i < ostd::Utils::getConsoleWidth(); i++) + for (int32_t i = 0; i < ostd::BasicConsole::getConsoleWidth(); i++) out.p(" "); - for (int32_t i = 0; i < ostd::Utils::getConsoleWidth(); i++) + for (int32_t i = 0; i < ostd::BasicConsole::getConsoleWidth(); i++) out.p("\b"); } @@ -102,7 +105,7 @@ namespace dragon ostd::eKeys key = ostd::eKeys::NoKeyPressed; while ((key = kbc.waitForKeyPress()) != ostd::eKeys::Escape) { - ostd::Utils::sleep(120); + ostd::Time::sleep(120); } return true; } @@ -111,16 +114,16 @@ namespace dragon ostd::ConsoleOutputHandler& Debugger::Utils::printFullLine(char c, const ostd::ConsoleColors::tConsoleColor& foreground) { - int32_t cw = ostd::Utils::getConsoleWidth(); - ostd::String str = ostd::Utils::duplicateChar(c, cw); + int32_t cw = ostd::BasicConsole::getConsoleWidth(); + ostd::String str = ostd::String::duplicateChar(c, cw); out.fg(foreground).p(str).reset().nl(); return out; } ostd::ConsoleOutputHandler& Debugger::Utils::printFullLine(char c, const ostd::ConsoleColors::tConsoleColor& foreground, const ostd::ConsoleColors::tConsoleColor& background) { - int32_t cw = ostd::Utils::getConsoleWidth(); - ostd::String str = ostd::Utils::duplicateChar(c, cw); + int32_t cw = ostd::BasicConsole::getConsoleWidth(); + ostd::String str = ostd::String::duplicateChar(c, cw); out.bg(background).fg(foreground).p(str).reset().nl(); return out; } @@ -176,7 +179,7 @@ namespace dragon if (index + labelEdit.len() < instEdit.len() && Utils::isValidLabelNameChar(instEdit.at(index + labelEdit.len()))) continue; ostd::String instStr = instEdit; - instStr.cpp_str_ref().replace(index, labelEdit.len(), labelEdit.cpp_str() + "[@@ style foreground:brightgray](" + ostd::Utils::getHexStr(label.addr, true, 2).cpp_str() + ")[@@/]"); + instStr.cpp_str_ref().replace(index, labelEdit.len(), labelEdit.cpp_str() + "[@@ style foreground:brightgray](" + ostd::String::getHexStr(label.addr, true, 2).cpp_str() + ")[@@/]"); instEdit = instStr; } } @@ -238,7 +241,7 @@ namespace dragon out.fg(ostd::ConsoleColors::Gray).p(label.cpp_str()).p(" "); if (currentLine) { - out.fg(ostd::ConsoleColors::Black).bg(ostd::ConsoleColors::Yellow).p(ostd::Utils::getHexStr(_da.addr, true, 2).cpp_str()).p(" ").reset();; + out.fg(ostd::ConsoleColors::Black).bg(ostd::ConsoleColors::Yellow).p(ostd::String::getHexStr(_da.addr, true, 2).cpp_str()).p(" ").reset();; } else { @@ -248,7 +251,7 @@ namespace dragon out.fg(ostd::ConsoleColors::Red); else out.fg(ostd::ConsoleColors::BrightGray); - out.p(ostd::Utils::getHexStr(_da.addr, true, 2).cpp_str()).p(" "); + out.p(ostd::String::getHexStr(_da.addr, true, 2).cpp_str()).p(" "); } if (specialSection) out.fg(ostd::ConsoleColors::Cyan).p(_da.code.cpp_str()).nl(); @@ -328,14 +331,14 @@ namespace dragon //Instruction Address { - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionAddress, true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionAddress, true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_INST_ADDR%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionAddress, true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionAddress, true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionAddress != minfo.previousInstructionAddress) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -351,7 +354,7 @@ namespace dragon ostd::String prevCode = " ("; prevCode.add(minfo.previousInstructionOpCode).add(") "); for (int32_t i = 0; i < minfo.previousInstructionFootprintSize; i++) - prevCode.add(ostd::Utils::getHexStr(minfo.previousInstructionFootprint[i], false, 1)).add(" "); + prevCode.add(ostd::String::getHexStr(minfo.previousInstructionFootprint[i], false, 1)).add(" "); tmp.add(prevCode); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; @@ -362,7 +365,7 @@ namespace dragon // ostd::String currCode = " ("; // currCode.add(minfo.currentInstructionOpCode).add(") "); // for (int32_t i = 0; i < minfo.currentInstructionFootprintSize; i++) - // currCode.add(ostd::Utils::getHexStr(minfo.currentInstructionFootprint[i], false, 1)).add(" "); + // currCode.add(ostd::String::getHexStr(minfo.currentInstructionFootprint[i], false, 1)).add(" "); // tmp.add(currCode); // tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); // // if (currCode != prevCode) @@ -376,14 +379,14 @@ namespace dragon //Stack Frame { tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionStackFrameSize, true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionStackFrameSize, true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_STACK_FRAME%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionStackFrameSize, true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionStackFrameSize, true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionStackFrameSize != minfo.previousInstructionStackFrameSize) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -479,14 +482,14 @@ namespace dragon //System Registers { tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::IP], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::IP], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_IP%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::IP], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::IP], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::IP] != minfo.previousInstructionRegisters[dragon::data::Registers::IP]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -499,14 +502,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::SP], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::SP], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_SP%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::SP], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::SP], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::SP] != minfo.previousInstructionRegisters[dragon::data::Registers::SP]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -519,14 +522,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::FP], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::FP], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_FP%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::FP], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::FP], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::FP] != minfo.previousInstructionRegisters[dragon::data::Registers::FP]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -539,14 +542,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::RV], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::RV], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_RV%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::RV], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::RV], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::RV] != minfo.previousInstructionRegisters[dragon::data::Registers::RV]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -559,14 +562,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::PP], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::PP], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_PP%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::PP], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::PP], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::PP] != minfo.previousInstructionRegisters[dragon::data::Registers::PP]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -579,14 +582,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::FL], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::FL], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_FL%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::FL], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::FL], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::FL] != minfo.previousInstructionRegisters[dragon::data::Registers::FL]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -599,14 +602,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::ACC], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::ACC], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_ACC%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::ACC], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::ACC], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::ACC] != minfo.previousInstructionRegisters[dragon::data::Registers::ACC]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -620,14 +623,14 @@ namespace dragon //General Registers { tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R1], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R1], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_R1%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R1], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R1], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::R1] != minfo.previousInstructionRegisters[dragon::data::Registers::R1]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -640,14 +643,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R2], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R2], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_R2%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R2], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R2], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::R2] != minfo.previousInstructionRegisters[dragon::data::Registers::R2]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -660,14 +663,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R3], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R3], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_R3%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R3], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R3], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::R3] != minfo.previousInstructionRegisters[dragon::data::Registers::R3]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -680,14 +683,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R4], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R4], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_R4%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R4], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R4], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::R4] != minfo.previousInstructionRegisters[dragon::data::Registers::R4]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -700,14 +703,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R5], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R5], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_R5%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R5], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R5], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::R5] != minfo.previousInstructionRegisters[dragon::data::Registers::R5]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -720,14 +723,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R6], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R6], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_R6%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R6], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R6], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::R6] != minfo.previousInstructionRegisters[dragon::data::Registers::R6]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -740,14 +743,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R7], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R7], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_R7%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R7], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R7], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::R7] != minfo.previousInstructionRegisters[dragon::data::Registers::R7]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -760,14 +763,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R8], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R8], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_R8%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R8], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R8], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::R8] != minfo.previousInstructionRegisters[dragon::data::Registers::R8]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -780,14 +783,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R9], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R9], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_R9%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R9], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R9], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::R9] != minfo.previousInstructionRegisters[dragon::data::Registers::R9]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -800,14 +803,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R10], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::R10], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_R10%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R10], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::R10], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::R10] != minfo.previousInstructionRegisters[dragon::data::Registers::R10]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -820,14 +823,14 @@ namespace dragon //Special Registers { tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::S1], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::S1], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_S1%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::S1], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::S1], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::S1] != minfo.previousInstructionRegisters[dragon::data::Registers::S1]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -840,14 +843,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::S2], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::S2], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_S2%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::S2], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::S2], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::S2] != minfo.previousInstructionRegisters[dragon::data::Registers::S2]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -860,14 +863,14 @@ namespace dragon tmp = " ", tmpStyle = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::OFFSET], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionRegisters[dragon::data::Registers::OFFSET], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); tmpStyle = "[@@style foreground:Blue]"; tmpStyle.add(tmp).add("[@@/]"); str.replaceAll("%PREV_OF%", tmpStyle); tmp = " "; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::OFFSET], true, 2)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionRegisters[dragon::data::Registers::OFFSET], true, 2)); tmp.addPadding(item_len, ' ', ostd::String::ePaddingBehavior::AllowOddExtraLeft); if (minfo.currentInstructionRegisters[dragon::data::Registers::OFFSET] != minfo.previousInstructionRegisters[dragon::data::Registers::OFFSET]) tmpStyle = "[@@style foreground:Black,background:BrightRed]"; @@ -901,7 +904,7 @@ namespace dragon const int32_t prev_len = 35; const dragon::DragonRuntime::tMachineDebugInfo& minfo = dragon::DragonRuntime::getMachineInfoDiff(); if (minfo.trackedAddresses.size() == 0) return; - int32_t cw = ostd::Utils::getConsoleWidth(); + int32_t cw = ostd::BasicConsole::getConsoleWidth(); ostd::String header = "|Symbol"; header.addRightPadding(symbol_len); header.add("|Bytes"); @@ -915,13 +918,13 @@ namespace dragon header.add("|Current"); header.fixedLength(cw - 1); header.addChar('|'); - ostd::String border = ostd::Utils::duplicateChar('=', cw); + ostd::String border = ostd::String::duplicateChar('=', cw); out.fg(ostd::ConsoleColors::Blue).p(border).nl(); ostd::RegexRichString rgx(header); rgx.fg("\\|", "blue"); rgx.fg("Symbol|Bytes|Addr|Map|Previous|Current", "yellow"); out.pStyled(rgx).reset().nl(); - ostd::String h_sep = ostd::Utils::duplicateChar('=', cw); + ostd::String h_sep = ostd::String::duplicateChar('=', cw); h_sep.put(0, '|'); h_sep.put(symbol_len, '|'); h_sep.put(symbol_len + size_len, '|'); @@ -958,7 +961,7 @@ namespace dragon out.fg(ostd::ConsoleColors::Blue).p("|").fg(ostd::ConsoleColors::BrightCyan).p(tmp).reset(); tmp = ""; - tmp.add(ostd::Utils::getHexStr(addr, true, 2)); + tmp.add(ostd::String::getHexStr(addr, true, 2)); tmp.fixedLength(addr_len - 1); if (no_symbol) out.fg(ostd::ConsoleColors::Blue).p("|").fg(ostd::ConsoleColors::Gray).p(tmp).reset(); @@ -974,9 +977,9 @@ namespace dragon out.fg(ostd::ConsoleColors::Blue).p("|").fg(ostd::ConsoleColors::BrightYellow).p(tmp).reset(); tmp = ""; - tmp.add(ostd::Utils::getHexStr(minfo.previousInstructionTrackedValues[i], false, 1)); + tmp.add(ostd::String::getHexStr(minfo.previousInstructionTrackedValues[i], false, 1)); for (int32_t j = 1; j < data_size; j++) - tmp.add(".").add(ostd::Utils::getHexStr(minfo.previousInstructionTrackedValues[i + j], false, 1)); + tmp.add(".").add(ostd::String::getHexStr(minfo.previousInstructionTrackedValues[i + j], false, 1)); tmp.fixedLength(prev_len - 1); if (no_symbol) out.fg(ostd::ConsoleColors::Blue).p("|").fg(ostd::ConsoleColors::Red).p(tmp).reset(); @@ -984,10 +987,10 @@ namespace dragon out.fg(ostd::ConsoleColors::Blue).p("|").fg(ostd::ConsoleColors::BrightRed).p(tmp).reset(); tmp = ""; - tmp.add(ostd::Utils::getHexStr(minfo.currentInstructionTrackedValues[i], false, 1)); + tmp.add(ostd::String::getHexStr(minfo.currentInstructionTrackedValues[i], false, 1)); uint32_t tmp_i = i; for (int32_t j = 1; j < data_size; j++, i++) - tmp.add(".").add(ostd::Utils::getHexStr(minfo.currentInstructionTrackedValues[i + 1], false, 1)); + tmp.add(".").add(ostd::String::getHexStr(minfo.currentInstructionTrackedValues[i + 1], false, 1)); tmp.fixedLength(prev_len - 1); bool data_different = false; for (int32_t j = 0; j < data_size; j++) @@ -1048,7 +1051,7 @@ namespace dragon out.fg(ostd::ConsoleColors::Yellow).p("Stack view: ").reset().nl(); uint16_t stack_ptr = DragonRuntime::cpu.readRegister(data::Registers::SP); - ostd::Utils::printByteStream(*DragonRuntime::ram.getByteStream(), startAddr, ncols, nrows, out, stack_ptr, 2, "Stack"); + ostd::Memory::printByteStream(*DragonRuntime::ram.getByteStream(), startAddr, ncols, nrows, out, stack_ptr, 2, "Stack"); out.nl().nl().fg(ostd::ConsoleColors::Yellow).p("Pres to go back...").nl().reset(); Utils::isEscapeKeyPressed(true); @@ -1075,18 +1078,18 @@ namespace dragon for (auto& call : callStack) { ostd::String call_info = call.info.new_trim().toLower(); - ostd::String subroutine_addr = ostd::Utils::getHexStr(call.addr, true, 2); + ostd::String subroutine_addr = ostd::String::getHexStr(call.addr, true, 2); ostd::String subroutine_name = Utils::findSymbol(debugger.labels, call.addr); ostd::String call_str = ""; bool dec_lvl = false; if (call_info == "int") { - call_str = ch_ang_u + "int " + ostd::Utils::getHexStr(call.addr, true, 1); + call_str = ch_ang_u + "int " + ostd::String::getHexStr(call.addr, true, 1); level++; } else if (call_info == "hw int") { - call_str = ch_ang_u + "hwi " + ostd::Utils::getHexStr(call.addr, true, 1) + " (" + data::InterruptCodes::getInterruptName(call.addr) + ")"; + call_str = ch_ang_u + "hwi " + ostd::String::getHexStr(call.addr, true, 1) + " (" + data::InterruptCodes::getInterruptName(call.addr) + ")"; level++; } else if (call_info == "ret") @@ -1129,7 +1132,7 @@ namespace dragon out.fg(ostd::ConsoleColors::BrightGray); else out.fg(ostd::ConsoleColors::Magenta); - out.p(ostd::Utils::getHexStr(call.inst_addr, true, 2)); + out.p(ostd::String::getHexStr(call.inst_addr, true, 2)); out.fg(ostd::ConsoleColors::BrightGray).p("| > ").reset(); out.pStyled(rgx).nl().reset(); @@ -1246,7 +1249,7 @@ namespace dragon while (dragon::data::ErrorHandler::hasError()) { auto err = dragon::data::ErrorHandler::popError(); - out.nl().fg(ostd::ConsoleColors::Red).p("Error ").p(ostd::Utils::getHexStr(err.code, true, 8).cpp_str()).p(": ").p(err.text.cpp_str()).nl(); + out.nl().fg(ostd::ConsoleColors::Red).p("Error ").p(ostd::String::getHexStr(err.code, true, 8).cpp_str()).p(": ").p(err.text.cpp_str()).nl(); } debugger.args.step_exec = true; } @@ -1483,14 +1486,14 @@ namespace dragon uint16_t addr = data().command.toInt(); uint16_t end_addr = addr; ostd::String tmp = ""; - tmp.add("*(").add(ostd::Utils::getHexStr(addr, true, 2)); + tmp.add("*(").add(ostd::String::getHexStr(addr, true, 2)); if (type != TYPE_BYTE) { end_addr = addr + type - 1; if (end_addr < addr) end_addr = addr; else - tmp.add("-").add(ostd::Utils::getHexStr(end_addr, true, 2)); + tmp.add("-").add(ostd::String::getHexStr(end_addr, true, 2)); } tmp.add(")"); ostd::RegexRichString rgx(tmp); @@ -1503,7 +1506,7 @@ namespace dragon for (uint16_t a = addr; a <= end_addr; a++) { uint8_t value = DragonRuntime::memMap.read8(a); - output().fg(ostd::ConsoleColors::BrightRed).p(ostd::Utils::getHexStr(value, true, 1)); + output().fg(ostd::ConsoleColors::BrightRed).p(ostd::String::getHexStr(value, true, 1)); if (a < end_addr) output().p(" "); } @@ -1521,9 +1524,9 @@ namespace dragon else { ostd::String tmp = ""; - tmp.add("*(").add(ostd::Utils::getHexStr(addr, true, 2)); + tmp.add("*(").add(ostd::String::getHexStr(addr, true, 2)); if (size > 1) - tmp.add("-").add(ostd::Utils::getHexStr((uint16_t)(addr + size - 1), true, 2)); + tmp.add("-").add(ostd::String::getHexStr((uint16_t)(addr + size - 1), true, 2)); tmp.add(")"); ostd::RegexRichString rgx(tmp); rgx.fg("\\(|\\)|-", "darkgray"); @@ -1542,7 +1545,7 @@ namespace dragon output().fg(ostd::ConsoleColors::BrightRed).pChar((char)value); continue; } - output().fg(ostd::ConsoleColors::BrightRed).p(ostd::Utils::getHexStr(value, true, 1)); + output().fg(ostd::ConsoleColors::BrightRed).p(ostd::String::getHexStr(value, true, 1)); if (a < addr + size - 1) output().p(" "); } @@ -1586,12 +1589,12 @@ namespace dragon if (Utils::isBreakPoint(addr)) { Utils::removeBreakPoint(addr); - output().fg(ostd::ConsoleColors::Yellow).p("Breakpoint removed at address: ").p(ostd::Utils::getHexStr(addr, true, 2)).reset().nl(); + output().fg(ostd::ConsoleColors::Yellow).p("Breakpoint removed at address: ").p(ostd::String::getHexStr(addr, true, 2)).reset().nl(); } else { Utils::addBreakPoint(addr); - output().fg(ostd::ConsoleColors::Yellow).p("Breakpoint set at address: ").p(ostd::Utils::getHexStr(addr, true, 2)).reset().nl(); + output().fg(ostd::ConsoleColors::Yellow).p("Breakpoint set at address: ").p(ostd::String::getHexStr(addr, true, 2)).reset().nl(); } } Display::printPrompt(); diff --git a/src/debugger/Debugger.hpp b/src/debugger/Debugger.hpp index 50b7c7a..8332b6b 100644 --- a/src/debugger/Debugger.hpp +++ b/src/debugger/Debugger.hpp @@ -1,6 +1,5 @@ #pragma once -#include #include #include "../assembler/Assembler.hpp" diff --git a/src/debugger/DebuggerNew.cpp b/src/debugger/DebuggerNew.cpp index ad3ca52..4d3c292 100644 --- a/src/debugger/DebuggerNew.cpp +++ b/src/debugger/DebuggerNew.cpp @@ -3,11 +3,11 @@ #include #include #include +#include #include #include #include #include -#include #include "DisassemblyLoader.hpp" #include "../runtime/DragonRuntime.hpp" @@ -256,7 +256,7 @@ namespace dragon while (dragon::data::ErrorHandler::hasError()) { auto err = dragon::data::ErrorHandler::popError(); - out.nl().fg(ostd::ConsoleColors::Red).p("Error ").p(ostd::Utils::getHexStr(err.code, true, 8).cpp_str()).p(": ").p(err.text.cpp_str()).nl(); + out.nl().fg(ostd::ConsoleColors::Red).p("Error ").p(ostd::String::getHexStr(err.code, true, 8).cpp_str()).p(": ").p(err.text.cpp_str()).nl(); } debugger.args.step_exec = true; } @@ -428,14 +428,14 @@ namespace dragon uint16_t addr = data().command.toInt(); uint16_t end_addr = addr; ostd::String tmp = ""; - tmp.add("*(").add(ostd::Utils::getHexStr(addr, true, 2)); + tmp.add("*(").add(ostd::String::getHexStr(addr, true, 2)); if (type != TYPE_BYTE) { end_addr = addr + type - 1; if (end_addr < addr) end_addr = addr; else - tmp.add("-").add(ostd::Utils::getHexStr(end_addr, true, 2)); + tmp.add("-").add(ostd::String::getHexStr(end_addr, true, 2)); } tmp.add(")"); ostd::RegexRichString rgx(tmp); @@ -448,7 +448,7 @@ namespace dragon for (uint16_t a = addr; a <= end_addr; a++) { uint8_t value = DragonRuntime::memMap.read8(a); - output().fg(ostd::ConsoleColors::BrightRed).p(ostd::Utils::getHexStr(value, true, 1)); + output().fg(ostd::ConsoleColors::BrightRed).p(ostd::String::getHexStr(value, true, 1)); if (a < end_addr) output().p(" "); } @@ -466,9 +466,9 @@ namespace dragon else { ostd::String tmp = ""; - tmp.add("*(").add(ostd::Utils::getHexStr(addr, true, 2)); + tmp.add("*(").add(ostd::String::getHexStr(addr, true, 2)); if (size > 1) - tmp.add("-").add(ostd::Utils::getHexStr((uint16_t)(addr + size - 1), true, 2)); + tmp.add("-").add(ostd::String::getHexStr((uint16_t)(addr + size - 1), true, 2)); tmp.add(")"); ostd::RegexRichString rgx(tmp); rgx.fg("\\(|\\)|-", "darkgray"); @@ -487,7 +487,7 @@ namespace dragon output().fg(ostd::ConsoleColors::BrightRed).pChar((char)value); continue; } - output().fg(ostd::ConsoleColors::BrightRed).p(ostd::Utils::getHexStr(value, true, 1)); + output().fg(ostd::ConsoleColors::BrightRed).p(ostd::String::getHexStr(value, true, 1)); if (a < addr + size - 1) output().p(" "); } @@ -531,12 +531,12 @@ namespace dragon if (isBreakPoint(addr)) { removeBreakPoint(addr); - output().fg(ostd::ConsoleColors::Yellow).p("Breakpoint removed at address: ").p(ostd::Utils::getHexStr(addr, true, 2)).reset().nl(); + output().fg(ostd::ConsoleColors::Yellow).p("Breakpoint removed at address: ").p(ostd::String::getHexStr(addr, true, 2)).reset().nl(); } else { addBreakPoint(addr); - output().fg(ostd::ConsoleColors::Yellow).p("Breakpoint set at address: ").p(ostd::Utils::getHexStr(addr, true, 2)).reset().nl(); + output().fg(ostd::ConsoleColors::Yellow).p("Breakpoint set at address: ").p(ostd::String::getHexStr(addr, true, 2)).reset().nl(); } } // Display::printPrompt(); @@ -587,7 +587,7 @@ namespace dragon if (index + labelEdit.len() < instEdit.len() && isValidLabelNameChar(instEdit.at(index + labelEdit.len()))) continue; ostd::String instStr = instEdit; - instStr.cpp_str_ref().replace(index, labelEdit.len(), labelEdit.cpp_str() + "[@@ style foreground:brightgray](" + ostd::Utils::getHexStr(label.addr, true, 2).cpp_str() + ")[@@/]"); + instStr.cpp_str_ref().replace(index, labelEdit.len(), labelEdit.cpp_str() + "[@@ style foreground:brightgray](" + ostd::String::getHexStr(label.addr, true, 2).cpp_str() + ")[@@/]"); instEdit = instStr; } } @@ -644,7 +644,7 @@ namespace dragon m_wout.fg(ostd::ConsoleColors::Gray).p(label.cpp_str()).p(" "); if (currentLine) { - m_wout.fg(ostd::ConsoleColors::Black).bg(ostd::ConsoleColors::Yellow).p(ostd::Utils::getHexStr(_da.addr, true, 2).cpp_str()).p(" ").reset();; + m_wout.fg(ostd::ConsoleColors::Black).bg(ostd::ConsoleColors::Yellow).p(ostd::String::getHexStr(_da.addr, true, 2).cpp_str()).p(" ").reset();; } else { @@ -654,7 +654,7 @@ namespace dragon m_wout.fg(ostd::ConsoleColors::Red); else m_wout.fg(ostd::ConsoleColors::BrightGray); - m_wout.p(ostd::Utils::getHexStr(_da.addr, true, 2).cpp_str()).p(" "); + m_wout.p(ostd::String::getHexStr(_da.addr, true, 2).cpp_str()).p(" "); } if (specialSection) m_wout.fg(ostd::ConsoleColors::Cyan).p(_da.code.cpp_str()).nl(); @@ -700,7 +700,7 @@ namespace dragon m_wout.setWrapMode(ogfx::WindowBaseOutputHandler::eWrapMode::TripleDots); m_wout.setDefaultForegroundColor({ 180, 180, 180, 255 }); - std::cout << STR_BOOL(ostd::Utils::loadByteStreamFromFile("./bios.bin", m_test)) << "\n"; + std::cout << STR_BOOL(ostd::Memory::loadByteStreamFromFile("./bios.bin", m_test)) << "\n"; } void DebuggerNew::handleSignal(ostd::tSignal& signal) @@ -746,7 +746,7 @@ namespace dragon m_gfx.outlinedRect(m_wout.getConsoleBounds(), { 0, 0, 20, 255 }, { 255, 255, 255, 200 }, 2); m_wout.beginFrame(); - ostd::Utils::printByteStream(m_test, 0, 16, 16, m_wout, 8, 4, "HELLO"); + ostd::Memory::printByteStream(m_test, 0, 16, 16, m_wout, 8, 4, "HELLO"); // printStep(); m_textInput.render(m_gfx); diff --git a/src/debugger/DebuggerNew.hpp b/src/debugger/DebuggerNew.hpp index 1a71581..bf7087c 100644 --- a/src/debugger/DebuggerNew.hpp +++ b/src/debugger/DebuggerNew.hpp @@ -1,9 +1,8 @@ #pragma once -#include +#include #include -#include -#include +#include #include #include #include diff --git a/src/debugger/DisassemblyLoader.cpp b/src/debugger/DisassemblyLoader.cpp index 5c9bf15..f464413 100644 --- a/src/debugger/DisassemblyLoader.cpp +++ b/src/debugger/DisassemblyLoader.cpp @@ -2,9 +2,11 @@ #include #include +#include #include #include +#include namespace dragon { @@ -13,7 +15,7 @@ namespace dragon void DisassemblyTable::init(const ostd::String& filePath) { ostd::ByteStream stream; - if (!ostd::Utils::loadByteStreamFromFile(filePath, stream)) + if (!ostd::Memory::loadByteStreamFromFile(filePath, stream)) { m_initialized = false; return; @@ -75,7 +77,7 @@ namespace dragon int32_t opCodeLen = 10; if (part1.len() < opCodeLen) { - codeEdit = part1 + ostd::Utils::duplicateChar(' ', opCodeLen - part1.len()) + part2; + codeEdit = part1 + ostd::String::duplicateChar(' ', opCodeLen - part1.len()) + part2; line.code = codeEdit; } } diff --git a/src/debugger/DisassemblyLoader.hpp b/src/debugger/DisassemblyLoader.hpp index b3e2684..7a210d9 100644 --- a/src/debugger/DisassemblyLoader.hpp +++ b/src/debugger/DisassemblyLoader.hpp @@ -2,7 +2,7 @@ #include "../assembler/Assembler.hpp" -#include +#include namespace dragon { diff --git a/src/hardware/IMemoryDevice.hpp b/src/hardware/IMemoryDevice.hpp index ac0f776..9f337ac 100644 --- a/src/hardware/IMemoryDevice.hpp +++ b/src/hardware/IMemoryDevice.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include namespace dragon { diff --git a/src/hardware/MemoryMapper.cpp b/src/hardware/MemoryMapper.cpp index 8fe11c2..a5feb9a 100644 --- a/src/hardware/MemoryMapper.cpp +++ b/src/hardware/MemoryMapper.cpp @@ -1,7 +1,6 @@ #include "MemoryMapper.hpp" #include -#include -#include +#include #include "../tools/GlobalData.hpp" @@ -69,7 +68,7 @@ namespace dragon if (address >= region.startAddress && address <= region.endAddress) return ®ion; } - data::ErrorHandler::pushError(data::ErrorCodes::MM_RegionNotFound, ostd::String("Memory device not found for address: ").add(ostd::Utils::getHexStr(address, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::MM_RegionNotFound, ostd::String("Memory device not found for address: ").add(ostd::String::getHexStr(address, true, 2))); return nullptr; //TODO: Error } } diff --git a/src/hardware/VirtualCPU.cpp b/src/hardware/VirtualCPU.cpp index c061083..96fb923 100644 --- a/src/hardware/VirtualCPU.cpp +++ b/src/hardware/VirtualCPU.cpp @@ -2,7 +2,7 @@ #include "../tools/GlobalData.hpp" #include -#include +#include #include "../runtime/DragonRuntime.hpp" @@ -233,7 +233,7 @@ namespace dragon break; case data::OpCodes::DEBUG_DumpRAM: { - ostd::Utils::saveByteStreamToFile(*DragonRuntime::ram.getByteStream(), "ram_dump.bin"); + ostd::Memory::saveByteStreamToFile(*DragonRuntime::ram.getByteStream(), "ram_dump.bin"); m_isDebugBreakPoint = true; m_ramDumped = true; } @@ -259,7 +259,7 @@ namespace dragon tu = ostd::eTimeUnits::Nanoseconds; else if (static_cast(timeUnit) == eDebugProfilerTimeUnits::Secs) tu = ostd::eTimeUnits::Seconds; - m_profilerTimer.start(true, ostd::String("DebugProfiler [").add(ostd::Utils::getHexStr(id, true, 1)).add("]"), tu); + m_profilerTimer.start(true, ostd::String("DebugProfiler [").add(ostd::String::getHexStr(id, true, 1)).add("]"), tu); m_debugProfilerStarted = true; } break; @@ -812,7 +812,7 @@ namespace dragon writeRegister16(data::Registers::IP, subroutineAddr); if (test) { - std::cout << ostd::Utils::getHexStr(subroutineAddr, true, 2) << "\n"; + std::cout << ostd::String::getHexStr(subroutineAddr, true, 2) << "\n"; std::cin.get(); } m_subroutineCounter++; @@ -838,7 +838,7 @@ namespace dragon { if (isInDebugBreakPoint()) { - std::cout << ostd::Utils::getHexStr(readRegister(data::Registers::IP)); + std::cout << ostd::String::getHexStr(readRegister(data::Registers::IP)); std::cin.get(); } uint8_t regAddr = fetch8(); @@ -847,7 +847,7 @@ namespace dragon int16_t arg_data = m_memory.read16(pp_val); writeRegister16(data::Registers::PP, pp_val - 2); writeRegister16(regAddr, arg_data); - // std::cout << ostd::Utils::getHexStr(readRegister(data::Registers::IP), true, 2) << "\n"; + // std::cout << ostd::String::getHexStr(readRegister(data::Registers::IP), true, 2) << "\n"; } break; case data::OpCodes::RetInt: @@ -903,14 +903,14 @@ namespace dragon case data::OpCodes::Ext15: case data::OpCodes::Ext16: { - data::ErrorHandler::pushError(data::ErrorCodes::CPU_UnsupportedExtension, ostd::String("Unsupported Extension: ").add(ostd::Utils::getHexStr(inst, true, 1))); + data::ErrorHandler::pushError(data::ErrorCodes::CPU_UnsupportedExtension, ostd::String("Unsupported Extension: ").add(ostd::String::getHexStr(inst, true, 1))); m_halt = true; return false; } break; default: { - data::ErrorHandler::pushError(data::ErrorCodes::CPU_UnknownInstruction, ostd::String("Unknown instruction: ").add(ostd::Utils::getHexStr(inst, true, 1))); + data::ErrorHandler::pushError(data::ErrorCodes::CPU_UnknownInstruction, ostd::String("Unknown instruction: ").add(ostd::String::getHexStr(inst, true, 1))); m_halt = true; return false; } @@ -931,44 +931,44 @@ namespace dragon else argStartAddr += (argCount * 2); - stackFrameString.add("args: ").add(ostd::Utils::getHexStr(argStartAddr, true, 2)).add(", argc: ").add(argCount).add("\n"); + stackFrameString.add("args: ").add(ostd::String::getHexStr(argStartAddr, true, 2)).add(", argc: ").add(argCount).add("\n"); pushToStack(readRegister(data::Registers::R1)); - stackFrameString.add("R1: ").add(ostd::Utils::getHexStr(readRegister(data::Registers::R1), true, 2)); + stackFrameString.add("R1: ").add(ostd::String::getHexStr(readRegister(data::Registers::R1), true, 2)); pushToStack(readRegister(data::Registers::R2)); - stackFrameString.add(" R2: ").add(ostd::Utils::getHexStr(readRegister(data::Registers::R2), true, 2)); + stackFrameString.add(" R2: ").add(ostd::String::getHexStr(readRegister(data::Registers::R2), true, 2)); pushToStack(readRegister(data::Registers::R3)); - stackFrameString.add(" R3: ").add(ostd::Utils::getHexStr(readRegister(data::Registers::R3), true, 2)); + stackFrameString.add(" R3: ").add(ostd::String::getHexStr(readRegister(data::Registers::R3), true, 2)); pushToStack(readRegister(data::Registers::R4)); - stackFrameString.add(" R4: ").add(ostd::Utils::getHexStr(readRegister(data::Registers::R4), true, 2)); + stackFrameString.add(" R4: ").add(ostd::String::getHexStr(readRegister(data::Registers::R4), true, 2)); pushToStack(readRegister(data::Registers::R5)); - stackFrameString.add(" R5: ").add(ostd::Utils::getHexStr(readRegister(data::Registers::R5), true, 2)); + stackFrameString.add(" R5: ").add(ostd::String::getHexStr(readRegister(data::Registers::R5), true, 2)); pushToStack(readRegister(data::Registers::R6)); - stackFrameString.add(" R6: ").add(ostd::Utils::getHexStr(readRegister(data::Registers::R6), true, 2)); + stackFrameString.add(" R6: ").add(ostd::String::getHexStr(readRegister(data::Registers::R6), true, 2)); pushToStack(readRegister(data::Registers::R7)); - stackFrameString.add(" R7: ").add(ostd::Utils::getHexStr(readRegister(data::Registers::R7), true, 2)); + stackFrameString.add(" R7: ").add(ostd::String::getHexStr(readRegister(data::Registers::R7), true, 2)); pushToStack(readRegister(data::Registers::R8)); - stackFrameString.add(" R8: ").add(ostd::Utils::getHexStr(readRegister(data::Registers::R8), true, 2)); + stackFrameString.add(" R8: ").add(ostd::String::getHexStr(readRegister(data::Registers::R8), true, 2)); pushToStack(readRegister(data::Registers::R9)); - stackFrameString.add(" R9: ").add(ostd::Utils::getHexStr(readRegister(data::Registers::R9), true, 2)); + stackFrameString.add(" R9: ").add(ostd::String::getHexStr(readRegister(data::Registers::R9), true, 2)); pushToStack(readRegister(data::Registers::R10)); - stackFrameString.add(" R10: ").add(ostd::Utils::getHexStr(readRegister(data::Registers::R10), true, 2)); + stackFrameString.add(" R10: ").add(ostd::String::getHexStr(readRegister(data::Registers::R10), true, 2)); stackFrameString.add("\n"); pushToStack(readRegister(data::Registers::PP)); - stackFrameString.add("PP: ").add(ostd::Utils::getHexStr(readRegister(data::Registers::PP), true, 2)); + stackFrameString.add("PP: ").add(ostd::String::getHexStr(readRegister(data::Registers::PP), true, 2)); pushToStack(readRegister(data::Registers::ACC)); - stackFrameString.add(" ACC: ").add(ostd::Utils::getHexStr(readRegister(data::Registers::ACC), true, 2)); + stackFrameString.add(" ACC: ").add(ostd::String::getHexStr(readRegister(data::Registers::ACC), true, 2)); pushToStack(readRegister(data::Registers::IP)); - stackFrameString.add(" IP: ").add(ostd::Utils::getHexStr(readRegister(data::Registers::IP), true, 2)); + stackFrameString.add(" IP: ").add(ostd::String::getHexStr(readRegister(data::Registers::IP), true, 2)); pushToStack(readRegister(data::Registers::FP)); - stackFrameString.add(" FP: ").add(ostd::Utils::getHexStr(readRegister(data::Registers::FP), true, 2)); + stackFrameString.add(" FP: ").add(ostd::String::getHexStr(readRegister(data::Registers::FP), true, 2)); stackFrameString.add("\n"); pushToStack(m_stackFrameSize); stackFrameString.add("StackFrame: ").add(m_stackFrameSize).add(", "); writeRegister16(data::Registers::PP, argStartAddr); writeRegister16(data::Registers::FP, readRegister(data::Registers::SP)); - stackFrameString.add("New FP: ").add(ostd::Utils::getHexStr(readRegister(data::Registers::FP), true, 2)); + stackFrameString.add("New FP: ").add(ostd::String::getHexStr(readRegister(data::Registers::FP), true, 2)); m_stackFrameSize = 0; m_debug_stackFrameStrings.push_back(stackFrameString); diff --git a/src/hardware/VirtualCPU.hpp b/src/hardware/VirtualCPU.hpp index b8dbdd1..980aaf6 100644 --- a/src/hardware/VirtualCPU.hpp +++ b/src/hardware/VirtualCPU.hpp @@ -1,8 +1,8 @@ #pragma once -#include -#include -#include +#include +#include +#include #include "IMemoryDevice.hpp" #include "../debugger/Debugger.hpp" diff --git a/src/hardware/VirtualHardDrive.hpp b/src/hardware/VirtualHardDrive.hpp index cfddb76..36aa9d8 100644 --- a/src/hardware/VirtualHardDrive.hpp +++ b/src/hardware/VirtualHardDrive.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include +#include namespace dragon { diff --git a/src/hardware/VirtualIODevices.cpp b/src/hardware/VirtualIODevices.cpp index 697e055..df0212c 100644 --- a/src/hardware/VirtualIODevices.cpp +++ b/src/hardware/VirtualIODevices.cpp @@ -1,5 +1,4 @@ #include "VirtualIODevices.hpp" -#include #include "VirtualHardDrive.hpp" #include "MemoryMapper.hpp" @@ -7,6 +6,7 @@ #include "../runtime/DragonRuntime.hpp" #include +#include //TODO: Fix all access functions (reads and writes) ensuring the address is not out of bounds. // Right now the check is done, but just to push an error if out of bounds; the address @@ -19,38 +19,38 @@ namespace dragon { void VirtualBIOS::init(const ostd::String& biosFilePath) { - bool loaded = ostd::Utils::loadByteStreamFromFile(biosFilePath, m_bios); + bool loaded = ostd::Memory::loadByteStreamFromFile(biosFilePath, m_bios); if (!loaded) data::ErrorHandler::pushError(data::ErrorCodes::BIOS_FailedToLoad, "Failed to load BIOS data."); if (m_bios.size() != 4096) //TODO: Hardcoded - data::ErrorHandler::pushError(data::ErrorCodes::BIOS_InvalidSize, ostd::String("Invalid BIOS size: ").add(ostd::Utils::getHexStr(m_bios.size(), true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::BIOS_InvalidSize, ostd::String("Invalid BIOS size: ").add(ostd::String::getHexStr(m_bios.size(), true, 2))); m_initialized = true; } int8_t VirtualBIOS::read8(uint16_t addr) { if (addr >= m_bios.size()) - data::ErrorHandler::pushError(data::ErrorCodes::BIOS_InvalidAddress, ostd::String("Invalid Byte BIOS location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::BIOS_InvalidAddress, ostd::String("Invalid Byte BIOS location at address: ").add(ostd::String::getHexStr(addr, true, 2))); return m_bios[addr]; } int16_t VirtualBIOS::read16(uint16_t addr) { if (addr >= m_bios.size() - 1) - data::ErrorHandler::pushError(data::ErrorCodes::BIOS_InvalidAddress, ostd::String("Invalid Word BIOS location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::BIOS_InvalidAddress, ostd::String("Invalid Word BIOS location at address: ").add(ostd::String::getHexStr(addr, true, 2))); return ((m_bios[addr + 0] << 8) & 0xFF00U) | ( m_bios[addr + 1] & 0x00FFU); } int8_t VirtualBIOS::write8(uint16_t addr, int8_t value) { - data::ErrorHandler::pushError(data::ErrorCodes::BIOS_WriteAttempt, ostd::String("Attempting to write to BIOS memory map: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::BIOS_WriteAttempt, ostd::String("Attempting to write to BIOS memory map: ").add(ostd::String::getHexStr(addr, true, 2))); return 0x00; } int16_t VirtualBIOS::write16(uint16_t addr, int16_t value) { - data::ErrorHandler::pushError(data::ErrorCodes::BIOS_WriteAttempt, ostd::String("Attempting to write to BIOS memory map: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::BIOS_WriteAttempt, ostd::String("Attempting to write to BIOS memory map: ").add(ostd::String::getHexStr(addr, true, 2))); return 0x0000; } @@ -73,14 +73,14 @@ namespace dragon int8_t InterruptVector::read8(uint16_t addr) { if (addr >= m_data.size()) - data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Byte IntVector location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Byte IntVector location at address: ").add(ostd::String::getHexStr(addr, true, 2))); return m_data[addr]; } int16_t InterruptVector::read16(uint16_t addr) { if (addr >= m_data.size() - 1) - data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Word IntVector location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Word IntVector location at address: ").add(ostd::String::getHexStr(addr, true, 2))); return ((m_data[addr + 0] << 8) & 0xFF00U) | ( m_data[addr + 1] & 0x00FFU); } @@ -88,7 +88,7 @@ namespace dragon int8_t InterruptVector::write8(uint16_t addr, int8_t value) { if (addr >= m_data.size()) - data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Word IntVector location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Word IntVector location at address: ").add(ostd::String::getHexStr(addr, true, 2))); m_data[addr] = value; return value; } @@ -96,7 +96,7 @@ namespace dragon int16_t InterruptVector::write16(uint16_t addr, int16_t value) { if (addr >= m_data.size() - 1) - data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Word IntVector location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Word IntVector location at address: ").add(ostd::String::getHexStr(addr, true, 2))); m_data[addr + 0] = (value >> 8) & 0xFF; m_data[addr + 1] = value & 0xFF; return value; @@ -126,14 +126,14 @@ namespace dragon int8_t VirtualKeyboard::read8(uint16_t addr) { if (addr >= m_data.size()) - data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Byte KeyboardController location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Byte KeyboardController location at address: ").add(ostd::String::getHexStr(addr, true, 2))); return m_data[addr]; } int16_t VirtualKeyboard::read16(uint16_t addr) { if (addr >= m_data.size() - 1) - data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Word KeyboardController location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Word KeyboardController location at address: ").add(ostd::String::getHexStr(addr, true, 2))); return ((m_data[addr + 0] << 8) & 0xFF00U) | ( m_data[addr + 1] & 0x00FFU); } @@ -141,10 +141,10 @@ namespace dragon int8_t VirtualKeyboard::write8(uint16_t addr, int8_t value) { if (addr >= m_data.size()) - data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Word KeyboardController location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Word KeyboardController location at address: ").add(ostd::String::getHexStr(addr, true, 2))); if (!DragonRuntime::cpu.isInBIOSMOde()) { - data::ErrorHandler::pushError(data::ErrorCodes::AccessViolation_BiosModeRequired, ostd::String("Attempting to write byte to KeyboardController while not in BIOS mode. Address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::AccessViolation_BiosModeRequired, ostd::String("Attempting to write byte to KeyboardController while not in BIOS mode. Address: ").add(ostd::String::getHexStr(addr, true, 2))); return 0; } return __write8(addr, value); @@ -153,10 +153,10 @@ namespace dragon int16_t VirtualKeyboard::write16(uint16_t addr, int16_t value) { if (addr >= m_data.size() - 1) - data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Word KeyboardController location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Word KeyboardController location at address: ").add(ostd::String::getHexStr(addr, true, 2))); if (!DragonRuntime::cpu.isInBIOSMOde()) { - data::ErrorHandler::pushError(data::ErrorCodes::AccessViolation_BiosModeRequired, ostd::String("Attempting to write word to KeyboardController while not in BIOS mode. Address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::AccessViolation_BiosModeRequired, ostd::String("Attempting to write word to KeyboardController while not in BIOS mode. Address: ").add(ostd::String::getHexStr(addr, true, 2))); return 0; } return __write16(addr, value); @@ -398,14 +398,14 @@ namespace dragon int8_t VirtualBootloader::read8(uint16_t addr) { if (addr >= m_mbr.size()) - data::ErrorHandler::pushError(data::ErrorCodes::BIOS_InvalidAddress, ostd::String("Invalid Byte MBR location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::BIOS_InvalidAddress, ostd::String("Invalid Byte MBR location at address: ").add(ostd::String::getHexStr(addr, true, 2))); return m_mbr[addr]; } int16_t VirtualBootloader::read16(uint16_t addr) { if (addr >= m_mbr.size() - 1) - data::ErrorHandler::pushError(data::ErrorCodes::BIOS_InvalidAddress, ostd::String("Invalid Word MBR location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::BIOS_InvalidAddress, ostd::String("Invalid Word MBR location at address: ").add(ostd::String::getHexStr(addr, true, 2))); return ((m_mbr[addr + 0] << 8) & 0xFF00U) | ( m_mbr[addr + 1] & 0x00FFU); } @@ -413,7 +413,7 @@ namespace dragon int8_t VirtualBootloader::write8(uint16_t addr, int8_t value) { if (addr >= m_mbr.size()) - data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Word IntVector location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Word IntVector location at address: ").add(ostd::String::getHexStr(addr, true, 2))); m_mbr[addr] = value; return value; } @@ -421,7 +421,7 @@ namespace dragon int16_t VirtualBootloader::write16(uint16_t addr, int16_t value) { if (addr >= m_mbr.size() - 1) - data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Word IntVector location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::IntVector_InvalidAddress, ostd::String("Invalid Word IntVector location at address: ").add(ostd::String::getHexStr(addr, true, 2))); m_mbr[addr + 0] = (value >> 8) & 0xFF; m_mbr[addr + 1] = value & 0xFF; return value; @@ -887,7 +887,7 @@ namespace dragon } if (addr >= m_size) { - data::ErrorHandler::pushError(data::ErrorCodes::CMOS_InvalidAddress, ostd::String("Invalid Byte CMOS location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::CMOS_InvalidAddress, ostd::String("Invalid Byte CMOS location at address: ").add(ostd::String::getHexStr(addr, true, 2))); return false; } int8_t value = 0; @@ -905,7 +905,7 @@ namespace dragon } if (addr >= m_size - 1) { - data::ErrorHandler::pushError(data::ErrorCodes::CMOS_InvalidAddress, ostd::String("Invalid Word CMOS location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::CMOS_InvalidAddress, ostd::String("Invalid Word CMOS location at address: ").add(ostd::String::getHexStr(addr, true, 2))); return 0; } int8_t b1 = read8(addr); @@ -923,12 +923,12 @@ namespace dragon } if (addr >= m_size) { - data::ErrorHandler::pushError(data::ErrorCodes::CMOS_InvalidAddress, ostd::String("Invalid Byte CMOS location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::CMOS_InvalidAddress, ostd::String("Invalid Byte CMOS location at address: ").add(ostd::String::getHexStr(addr, true, 2))); return 0; } if (!DragonRuntime::cpu.isInBIOSMOde()) { - data::ErrorHandler::pushError(data::ErrorCodes::AccessViolation_BiosModeRequired, ostd::String("Attempting to write byte to CMOS while not in BIOS mode. Address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::AccessViolation_BiosModeRequired, ostd::String("Attempting to write byte to CMOS while not in BIOS mode. Address: ").add(ostd::String::getHexStr(addr, true, 2))); return 0; } m_dataFile.seekp(addr); @@ -945,12 +945,12 @@ namespace dragon } if (addr >= m_size - 1) { - data::ErrorHandler::pushError(data::ErrorCodes::CMOS_InvalidAddress, ostd::String("Invalid Word CMOS location at address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::CMOS_InvalidAddress, ostd::String("Invalid Word CMOS location at address: ").add(ostd::String::getHexStr(addr, true, 2))); return 0; } if (!DragonRuntime::cpu.isInBIOSMOde()) { - data::ErrorHandler::pushError(data::ErrorCodes::AccessViolation_BiosModeRequired, ostd::String("Attempting to write word to CMOS while not in BIOS mode. Address: ").add(ostd::Utils::getHexStr(addr, true, 2))); + data::ErrorHandler::pushError(data::ErrorCodes::AccessViolation_BiosModeRequired, ostd::String("Attempting to write word to CMOS while not in BIOS mode. Address: ").add(ostd::String::getHexStr(addr, true, 2))); return 0; } int8_t b1 = (value >> 8) & 0xFF; diff --git a/src/runtime/ConfigLoader.cpp b/src/runtime/ConfigLoader.cpp index c5becf5..31b52ec 100644 --- a/src/runtime/ConfigLoader.cpp +++ b/src/runtime/ConfigLoader.cpp @@ -1,6 +1,5 @@ #include "ConfigLoader.hpp" #include -#include #include "../hardware/CPUExtensions.hpp" namespace dragon diff --git a/src/runtime/ConfigLoader.hpp b/src/runtime/ConfigLoader.hpp index 1e5ad5d..0f36a84 100644 --- a/src/runtime/ConfigLoader.hpp +++ b/src/runtime/ConfigLoader.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include #include #include "../tools/GlobalData.hpp" diff --git a/src/runtime/DragonRuntime.cpp b/src/runtime/DragonRuntime.cpp index 5fff6b7..e6e21d7 100644 --- a/src/runtime/DragonRuntime.cpp +++ b/src/runtime/DragonRuntime.cpp @@ -1,5 +1,7 @@ #include "DragonRuntime.hpp" #include +#include +#include namespace dragon { @@ -25,39 +27,39 @@ namespace dragon void DragonRuntime::printRegisters(dragon::hw::VirtualCPU& cpu) { - out.fg("green").p("IP: ").fg("white").p(ostd::Utils::getHexStr(cpu.readRegister(dragon::data::Registers::IP), true, 2).cpp_str()); + out.fg("green").p("IP: ").fg("white").p(ostd::String::getHexStr(cpu.readRegister(dragon::data::Registers::IP), true, 2).cpp_str()); out.p(" "); - out.fg("yellow").p("R1: ").fg("white").p(ostd::Utils::getHexStr(cpu.readRegister(dragon::data::Registers::R1), true, 2).cpp_str()); + out.fg("yellow").p("R1: ").fg("white").p(ostd::String::getHexStr(cpu.readRegister(dragon::data::Registers::R1), true, 2).cpp_str()); out.p(" "); - out.fg("yellow").p("R2: ").fg("white").p(ostd::Utils::getHexStr(cpu.readRegister(dragon::data::Registers::R2), true, 2).cpp_str()).nl(); + out.fg("yellow").p("R2: ").fg("white").p(ostd::String::getHexStr(cpu.readRegister(dragon::data::Registers::R2), true, 2).cpp_str()).nl(); - out.fg("green").p("SP: ").fg("white").p(ostd::Utils::getHexStr(cpu.readRegister(dragon::data::Registers::SP), true, 2).cpp_str()); + out.fg("green").p("SP: ").fg("white").p(ostd::String::getHexStr(cpu.readRegister(dragon::data::Registers::SP), true, 2).cpp_str()); out.p(" "); - out.fg("yellow").p("R3: ").fg("white").p(ostd::Utils::getHexStr(cpu.readRegister(dragon::data::Registers::R3), true, 2).cpp_str()); + out.fg("yellow").p("R3: ").fg("white").p(ostd::String::getHexStr(cpu.readRegister(dragon::data::Registers::R3), true, 2).cpp_str()); out.p(" "); - out.fg("yellow").p("R4: ").fg("white").p(ostd::Utils::getHexStr(cpu.readRegister(dragon::data::Registers::R4), true, 2).cpp_str()).nl(); + out.fg("yellow").p("R4: ").fg("white").p(ostd::String::getHexStr(cpu.readRegister(dragon::data::Registers::R4), true, 2).cpp_str()).nl(); - out.fg("green").p("FP: ").fg("white").p(ostd::Utils::getHexStr(cpu.readRegister(dragon::data::Registers::FP), true, 2).cpp_str()); + out.fg("green").p("FP: ").fg("white").p(ostd::String::getHexStr(cpu.readRegister(dragon::data::Registers::FP), true, 2).cpp_str()); out.p(" "); - out.fg("yellow").p("R5: ").fg("white").p(ostd::Utils::getHexStr(cpu.readRegister(dragon::data::Registers::R5), true, 2).cpp_str()); + out.fg("yellow").p("R5: ").fg("white").p(ostd::String::getHexStr(cpu.readRegister(dragon::data::Registers::R5), true, 2).cpp_str()); out.p(" "); - out.fg("yellow").p("R6: ").fg("white").p(ostd::Utils::getHexStr(cpu.readRegister(dragon::data::Registers::R6), true, 2).cpp_str()).nl(); + out.fg("yellow").p("R6: ").fg("white").p(ostd::String::getHexStr(cpu.readRegister(dragon::data::Registers::R6), true, 2).cpp_str()).nl(); - out.fg("green").p("RV: ").fg("white").p(ostd::Utils::getHexStr(cpu.readRegister(dragon::data::Registers::RV), true, 2).cpp_str()); + out.fg("green").p("RV: ").fg("white").p(ostd::String::getHexStr(cpu.readRegister(dragon::data::Registers::RV), true, 2).cpp_str()); out.p(" "); - out.fg("yellow").p("R7: ").fg("white").p(ostd::Utils::getHexStr(cpu.readRegister(dragon::data::Registers::R7), true, 2).cpp_str()); + out.fg("yellow").p("R7: ").fg("white").p(ostd::String::getHexStr(cpu.readRegister(dragon::data::Registers::R7), true, 2).cpp_str()); out.p(" "); - out.fg("yellow").p("R8: ").fg("white").p(ostd::Utils::getHexStr(cpu.readRegister(dragon::data::Registers::R8), true, 2).cpp_str()).nl(); + out.fg("yellow").p("R8: ").fg("white").p(ostd::String::getHexStr(cpu.readRegister(dragon::data::Registers::R8), true, 2).cpp_str()).nl(); - out.fg("green").p("PP: ").fg("white").p(ostd::Utils::getHexStr(cpu.readRegister(dragon::data::Registers::PP), true, 2).cpp_str()); + out.fg("green").p("PP: ").fg("white").p(ostd::String::getHexStr(cpu.readRegister(dragon::data::Registers::PP), true, 2).cpp_str()); out.p(" "); - out.fg("yellow").p("R9: ").fg("white").p(ostd::Utils::getHexStr(cpu.readRegister(dragon::data::Registers::R9), true, 2).cpp_str()); + out.fg("yellow").p("R9: ").fg("white").p(ostd::String::getHexStr(cpu.readRegister(dragon::data::Registers::R9), true, 2).cpp_str()); out.p(" "); - out.fg("yellow").p("R10: ").fg("white").p(ostd::Utils::getHexStr(cpu.readRegister(dragon::data::Registers::R10), true, 2).cpp_str()).nl(); + out.fg("yellow").p("R10: ").fg("white").p(ostd::String::getHexStr(cpu.readRegister(dragon::data::Registers::R10), true, 2).cpp_str()).nl(); - out.fg("green").p("ACC: ").fg("white").p(ostd::Utils::getHexStr(cpu.readRegister(dragon::data::Registers::ACC), true, 2).cpp_str()); + out.fg("green").p("ACC: ").fg("white").p(ostd::String::getHexStr(cpu.readRegister(dragon::data::Registers::ACC), true, 2).cpp_str()); out.p(" "); - out.fg("yellow").p("FL: ").fg("white").p(ostd::Utils::getBinStr(cpu.readRegister(dragon::data::Registers::FL), true, 2).cpp_str()); + out.fg("yellow").p("FL: ").fg("white").p(ostd::String::getBinStr(cpu.readRegister(dragon::data::Registers::FL), true, 2).cpp_str()); } void DragonRuntime::processErrors(void) @@ -65,7 +67,7 @@ namespace dragon while (dragon::data::ErrorHandler::hasError()) { auto err = dragon::data::ErrorHandler::popError(); - out.nl().fg(ostd::ConsoleColors::Red).p("Error ").p(ostd::Utils::getHexStr(err.code, true, 8).cpp_str()).p(": ").p(err.text.cpp_str()).nl(); + out.nl().fg(ostd::ConsoleColors::Red).p("Error ").p(ostd::String::getHexStr(err.code, true, 8).cpp_str()).p(": ").p(err.text.cpp_str()).nl(); } } @@ -183,9 +185,9 @@ namespace dragon out.fg(ostd::ConsoleColors::Magenta).p(" Initializing Memory Mapper:").nl(); out.fg(ostd::ConsoleColors::Magenta).p(" vBIOS: "); out.fg(ostd::ConsoleColors::BrightYellow); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::BIOS_Start, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::BIOS_Start, true, 2).cpp_str()); out.p(" to "); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::BIOS_End, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::BIOS_End, true, 2).cpp_str()); out.p(" (remap=false)").nl(); } memMap.mapDevice(vBIOS, dragon::data::MemoryMapAddresses::BIOS_Start, dragon::data::MemoryMapAddresses::BIOS_End, false, "BIOS"); @@ -193,9 +195,9 @@ namespace dragon { out.fg(ostd::ConsoleColors::Magenta).p(" vCMOS: "); out.fg(ostd::ConsoleColors::BrightYellow); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::CMOS_Start, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::CMOS_Start, true, 2).cpp_str()); out.p(" to "); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::CMOS_End, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::CMOS_End, true, 2).cpp_str()); out.p(" (remap=true)").nl(); } memMap.mapDevice(vCMOS, dragon::data::MemoryMapAddresses::CMOS_Start, dragon::data::MemoryMapAddresses::CMOS_End, true, "CMOS"); @@ -203,9 +205,9 @@ namespace dragon { out.fg(ostd::ConsoleColors::Magenta).p(" intVec: "); out.fg(ostd::ConsoleColors::BrightYellow); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::IntVector_Start, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::IntVector_Start, true, 2).cpp_str()); out.p(" to "); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::IntVector_End, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::IntVector_End, true, 2).cpp_str()); out.p(" (remap=true)").nl(); } memMap.mapDevice(intVec, dragon::data::MemoryMapAddresses::IntVector_Start, dragon::data::MemoryMapAddresses::IntVector_End, true, "intVec"); @@ -213,9 +215,9 @@ namespace dragon { out.fg(ostd::ConsoleColors::Magenta).p(" vKeyboard: "); out.fg(ostd::ConsoleColors::BrightYellow); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::Keyboard_Start, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::Keyboard_Start, true, 2).cpp_str()); out.p(" to "); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::Keyboard_End, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::Keyboard_End, true, 2).cpp_str()); out.p(" (remap=false)").nl(); } memMap.mapDevice(vKeyboard, dragon::data::MemoryMapAddresses::Keyboard_Start, dragon::data::MemoryMapAddresses::Keyboard_End, true, "Keyb."); @@ -223,9 +225,9 @@ namespace dragon { out.fg(ostd::ConsoleColors::Magenta).p(" vMouse: "); out.fg(ostd::ConsoleColors::BrightYellow); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::Mouse_Start, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::Mouse_Start, true, 2).cpp_str()); out.p(" to "); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::Mouse_End, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::Mouse_End, true, 2).cpp_str()); out.p(" (remap=false)").nl(); } memMap.mapDevice(vMouse, dragon::data::MemoryMapAddresses::Mouse_Start, dragon::data::MemoryMapAddresses::Mouse_End, false, "Mouse"); @@ -233,9 +235,9 @@ namespace dragon { out.fg(ostd::ConsoleColors::Magenta).p(" vMBR: "); out.fg(ostd::ConsoleColors::BrightYellow); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::MBR_Start, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::MBR_Start, true, 2).cpp_str()); out.p(" to "); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::MBR_End, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::MBR_End, true, 2).cpp_str()); out.p(" (remap=true)").nl(); } memMap.mapDevice(vMBR, dragon::data::MemoryMapAddresses::MBR_Start, dragon::data::MemoryMapAddresses::MBR_End, true, "MBR"); @@ -243,9 +245,9 @@ namespace dragon { out.fg(ostd::ConsoleColors::Magenta).p(" vDiskInterface: "); out.fg(ostd::ConsoleColors::BrightYellow); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::DiskInterface_Start, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::DiskInterface_Start, true, 2).cpp_str()); out.p(" to "); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::DiskInterface_End, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::DiskInterface_End, true, 2).cpp_str()); out.p(" (remap=true)").nl(); } memMap.mapDevice(vDiskInterface, dragon::data::MemoryMapAddresses::DiskInterface_Start, dragon::data::MemoryMapAddresses::DiskInterface_End, true, "Disk"); @@ -253,9 +255,9 @@ namespace dragon { out.fg(ostd::ConsoleColors::Magenta).p(" vGraphicsInterface: "); out.fg(ostd::ConsoleColors::BrightYellow); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::VideoCardInterface_Start, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::VideoCardInterface_Start, true, 2).cpp_str()); out.p(" to "); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::VideoCardInterface_End, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::VideoCardInterface_End, true, 2).cpp_str()); out.p(" (remap=true)").nl(); } memMap.mapDevice(vGraphicsInterface, dragon::data::MemoryMapAddresses::VideoCardInterface_Start, dragon::data::MemoryMapAddresses::VideoCardInterface_End, true, "VGA"); @@ -263,9 +265,9 @@ namespace dragon { out.fg(ostd::ConsoleColors::Magenta).p(" vSerialInterface: "); out.fg(ostd::ConsoleColors::BrightYellow); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::SerialInterface_Start, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::SerialInterface_Start, true, 2).cpp_str()); out.p(" to "); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::SerialInterface_End, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::SerialInterface_End, true, 2).cpp_str()); out.p(" (remap=true)").nl(); } memMap.mapDevice(vSerialInterface, dragon::data::MemoryMapAddresses::SerialInterface_Start, dragon::data::MemoryMapAddresses::SerialInterface_End, true, "serial"); @@ -273,9 +275,9 @@ namespace dragon { out.fg(ostd::ConsoleColors::Magenta).p(" RAM: "); out.fg(ostd::ConsoleColors::BrightYellow); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::Memory_Start, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::Memory_Start, true, 2).cpp_str()); out.p(" to "); - out.p(ostd::Utils::getHexStr(dragon::data::MemoryMapAddresses::Memory_End, true, 2).cpp_str()); + out.p(ostd::String::getHexStr(dragon::data::MemoryMapAddresses::Memory_End, true, 2).cpp_str()); out.p(" (remap=false)").nl(); } memMap.mapDevice(ram, dragon::data::MemoryMapAddresses::Memory_Start, dragon::data::MemoryMapAddresses::Memory_End, false, "RAM"); @@ -285,7 +287,7 @@ namespace dragon uint16_t reset_ip_addr = 0x0000; if (verbose) - out.fg(ostd::ConsoleColors::BrightYellow).p(" Reset IP register: ").p(ostd::Utils::getHexStr(reset_ip_addr, true, 2).cpp_str()).nl(); + out.fg(ostd::ConsoleColors::BrightYellow).p(" Reset IP register: ").p(ostd::String::getHexStr(reset_ip_addr, true, 2).cpp_str()).nl(); cpu.writeRegister16(dragon::data::Registers::IP, reset_ip_addr); if (verbose) @@ -394,7 +396,7 @@ namespace dragon acc++; acc2++; if (_time < clock_speed_us && fixed_clock) - ostd::Utils::sleep(clock_speed_us - _time, ostd::eTimeUnits::Microseconds); + ostd::Time::sleep(clock_speed_us - _time, ostd::eTimeUnits::Microseconds); } } @@ -425,7 +427,7 @@ namespace dragon void DragonRuntime::forceLoad(const ostd::String& filePath, uint16_t loadAddress) { ostd::ByteStream code; - ostd::Utils::loadByteStreamFromFile(filePath, code); + ostd::Memory::loadByteStreamFromFile(filePath, code); int16_t index = 0; for (auto& b : code) diff --git a/src/runtime/runtime_main.cpp b/src/runtime/runtime_main.cpp index cce81ec..cdaaefa 100644 --- a/src/runtime/runtime_main.cpp +++ b/src/runtime/runtime_main.cpp @@ -1,5 +1,4 @@ #include -#include #include "DragonRuntime.hpp" int main(int argc, char** argv) diff --git a/src/tools/GlobalData.hpp b/src/tools/GlobalData.hpp index 6c1397e..15e3d36 100644 --- a/src/tools/GlobalData.hpp +++ b/src/tools/GlobalData.hpp @@ -1,7 +1,7 @@ #pragma once -#include -#include +#include +#include namespace dragon { diff --git a/src/tools/Tools.cpp b/src/tools/Tools.cpp index 34ca0f4..cae23a9 100644 --- a/src/tools/Tools.cpp +++ b/src/tools/Tools.cpp @@ -1,12 +1,12 @@ #include "Tools.hpp" -#include +#include #include -#include #include #include "../hardware/VirtualHardDrive.hpp" #include "GlobalData.hpp" #include "debugger/DisassemblyLoader.hpp" +#include #include namespace dragon @@ -84,12 +84,12 @@ namespace dragon } ostd::String dest = argv[2]; ostd::String str_size = argv[3]; - if (!ostd::Utils::isInt(str_size)) + if (!str_size.isInt()) { out.fg(ostd::ConsoleColors::Red).p("Error: parameter must be integer.").reset().nl(); return ErrorNewVDiskNonIntSize; } - bool result = createVirtualHardDrive(ostd::Utils::strToInt(str_size), dest); + bool result = createVirtualHardDrive(str_size.toInt(), dest); if (!result) { out.fg(ostd::ConsoleColors::Red).p("Error: Unable to create virtual disk.").reset().nl(); @@ -112,7 +112,7 @@ namespace dragon ostd::String vdisk_file = argv[2]; ostd::String data_file = argv[3]; ostd::String str_addr = argv[4]; - if (!ostd::Utils::isInt(str_addr)) + if (!str_addr.isInt()) { out.fg(ostd::ConsoleColors::Red).p("Error: parameter must be integer.").reset().nl(); return ErrorLoadProgNonIntAddr; @@ -124,13 +124,13 @@ namespace dragon return ErrorLoadProgUnableToLoadVDisk; } ostd::ByteStream code; - if (!ostd::Utils::loadByteStreamFromFile(data_file, code)) + if (!ostd::Memory::loadByteStreamFromFile(data_file, code)) { out.fg(ostd::ConsoleColors::Red).p("Error: Unable to load data file.").reset().nl(); return ErrorLoadProgUnableToLoadDataFile; } int16_t index = 0; - uint32_t addr = (uint32_t)ostd::Utils::strToInt(str_addr); + uint32_t addr = (uint32_t)str_addr.toInt(); for (auto& b : code) { vHDD.write(addr + index, b); @@ -140,7 +140,7 @@ namespace dragon out.nl().fg(ostd::ConsoleColors::Green).p("Success. Data written to Virtual Disk:").nl(); out.p(" Data Path: ").p(data_file.cpp_str()).nl(); out.p(" Disk Path: ").p(vdisk_file.cpp_str()).nl(); - out.p(" Data Address: ").p(ostd::Utils::getHexStr(addr, true, 4).cpp_str()).nl(); + out.p(" Data Address: ").p(ostd::String::getHexStr(addr, true, 4).cpp_str()).nl(); out.p(" Size: ").p(code.size()).reset().nl(); return ErrorNoError; } @@ -248,8 +248,8 @@ namespace dragon out.fg(ostd::ConsoleColors::Cyan).p(" "); out.p(part.label.new_fixedLength(len)); print_part_size(part.size, out, len); - out.p(ostd::Utils::getHexStr(part.startAddress, true, 4).new_fixedLength(len)); - out.p(ostd::Utils::getHexStr(part.startAddress + part.size, true, 4).new_fixedLength(len)); + out.p(ostd::String::getHexStr(part.startAddress, true, 4).new_fixedLength(len)); + out.p(ostd::String::getHexStr(part.startAddress + part.size, true, 4).new_fixedLength(len)); ostd::String flags_str = ""; for (uint8_t bit = 0; bit < sizeof(part.flags) * 8; bit++) { @@ -365,7 +365,7 @@ namespace dragon out.fg(ostd::ConsoleColors::Red).p("Error: No partition size specified.").reset().nl(); return ErrorNewDPTNoPartitionSize; } - else if (!ostd::Utils::isInt(argv[arg_index + 1])) + else if (!ostd::String(argv[arg_index + 1]).isInt()) { out.fg(ostd::ConsoleColors::Red).p("Error: Partition size must be an integer.").reset().nl(); return ErrorNewDPTInvalidPartitionSize; @@ -446,7 +446,7 @@ namespace dragon vHDD.unmount(); out.nl().fg(ostd::ConsoleColors::Green).p("Success. DPT Block created on Virtual Disk:").nl(); out.p(" Disk Path: ").p(vdisk_file.cpp_str()).nl(); - out.p(" DPT Block Address: ").p(ostd::Utils::getHexStr(data::DPTStructure::DiskAddress, true, 4).cpp_str()).nl(); + out.p(" DPT Block Address: ").p(ostd::String::getHexStr(data::DPTStructure::DiskAddress, true, 4).cpp_str()).nl(); out.p(" DPT Block Size: ").p(data::DPTStructure::DPTBlockSizeBytes).nl(); return ErrorNoError; } @@ -499,7 +499,7 @@ namespace dragon out.bg(ostd::ConsoleColors::White).fg(ostd::ConsoleColors::Black).p("DATA:").reset().nl(); for (const auto& line : dataTable) { - out.fg(ostd::ConsoleColors::BrightGray).p(ostd::Utils::getHexStr(line.addr, true, 2)).p("\t\t"); + out.fg(ostd::ConsoleColors::BrightGray).p(ostd::String::getHexStr(line.addr, true, 2)).p("\t\t"); out.fg(ostd::ConsoleColors::Green).p(line.code).p("\t\t"); out.fg(ostd::ConsoleColors::Blue).p(line.size).p(" bytes\t\t"); out.reset().nl(); @@ -508,7 +508,7 @@ namespace dragon out.bg(ostd::ConsoleColors::White).fg(ostd::ConsoleColors::Black).p("LABELS:").reset().nl(); for (const auto& line : labelTable) { - out.fg(ostd::ConsoleColors::BrightGray).p(ostd::Utils::getHexStr(line.addr, true, 2)).p("\t\t"); + out.fg(ostd::ConsoleColors::BrightGray).p(ostd::String::getHexStr(line.addr, true, 2)).p("\t\t"); out.fg(ostd::ConsoleColors::Green).p(line.code).p("\t\t"); out.reset().nl(); } @@ -516,7 +516,7 @@ namespace dragon out.bg(ostd::ConsoleColors::White).fg(ostd::ConsoleColors::Black).p("CODE:").reset().nl(); for (const auto& line : codeTable) { - out.fg(ostd::ConsoleColors::BrightGray).p(ostd::Utils::getHexStr(line.addr, true, 2)).p("\t\t"); + out.fg(ostd::ConsoleColors::BrightGray).p(ostd::String::getHexStr(line.addr, true, 2)).p("\t\t"); out.fg(ostd::ConsoleColors::Green).p(line.code).p("\t\t"); out.reset().nl(); } diff --git a/src/tools/Utils.cpp b/src/tools/Utils.cpp index 4b6720d..ff1627a 100644 --- a/src/tools/Utils.cpp +++ b/src/tools/Utils.cpp @@ -1,6 +1,5 @@ #include "Utils.hpp" #include -#include #include namespace dragon diff --git a/src/tools/Utils.hpp b/src/tools/Utils.hpp index 0db4b89..48e9928 100644 --- a/src/tools/Utils.hpp +++ b/src/tools/Utils.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include #include namespace dragon