From 3123ae6231ecd1650a0c98e7c84bc6eaf2864ddc Mon Sep 17 00:00:00 2001 From: OmniaX-Dev Date: Sat, 21 Mar 2026 00:17:56 +0100 Subject: [PATCH] Added --save-final-stage option to dasm --- extra/dragon/disk1.dr | Bin 4194304 -> 4194304 bytes extra/dss/DragonOS/kernel0/kernel0.dss | 4 ++-- extra/dss/DragonOS/kernel0/memory.dss | 3 +-- extra/reload_env.sh | 2 +- src/assembler/Assembler.cpp | 6 ++++-- src/hardware/VirtualCPU.cpp | 15 --------------- 6 files changed, 8 insertions(+), 22 deletions(-) diff --git a/extra/dragon/disk1.dr b/extra/dragon/disk1.dr index 8d132cfdb00732cac9e9d48cb2c68203c06679e8..c49dec6b306c6b330388beac26886cffbc68afcc 100644 GIT binary patch delta 416 zcmW;ENlwC07{Kv9P{bly3OM0V2ORJ{EsEj*!Uarf2;u?UYhsK>Sv*V=kIzEF`iJA`TT2w_Pc=g3a@To=mr0p4oXNZ=3_GB_D&P7fZ z!lBWUA5rXh@+Vrocjfn=$eQ+}l`zuRs%)N`;X*YtiTIUj1a42{OLxtbEeolxYDAB$ ztWo@R>Dp&DXU?tag!%qPb^4b*@e+G-e1R~>F@QlNFoYzAVIqYQq%n#ySjfOe7CGcG zjtNX+3ezZH2D6yMJRB@w5ldJ`5i3~58rD(51|$?Vu>}`pY-0x%>|zg9?Bf83I6@6| L9QPf+@%8Wz^0s>7 delta 431 zcmW;E$xgyh6vpv;0TEl#(&AV|9B{l>a6lXYeS{KHqkA7fV~kNrtfq;Nz}7b~CMLu; zaqT0xaH;;=#qSK?Nlp+1i6HVW8-etDl)9|--a>ia`wV3E!4tw0vZG!+m5GP5ymF&V zbW|a(r=I$WFCSg?{pT3=la&_PD_t?#MwIJTE}gv4O(ENcV=A|8l6oTPiBw139-Fpu z&8}|7Z!JfZf2(Z%iOrYNjiLQ$xVzSV|MF43CZ3C-MAVZ=VE}0iB7-3qFfoiQMlcEs zIoNQJ#~8*jfk{kZ8ZHW$K@qbkVGi?Hz#__6!ZKE{iZ!f5L1P0IRI!OIY-0yC?4pi6 S?Bf83XrPH!zZf2U-Twpo!Fu`t diff --git a/extra/dss/DragonOS/kernel0/kernel0.dss b/extra/dss/DragonOS/kernel0/kernel0.dss index 4ae66be..281eb66 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 <../drivers/display_driver.dss> @include <../drivers/keyboard_driver.dss> @include +@include ## ========================================================================================================================= @@ -28,7 +28,7 @@ _kernel0_main: push $test_str push 1 call $_print_string - ## debug_break + debug_break _infinite_loop_0: ## jmp $_infinite_loop_0 diff --git a/extra/dss/DragonOS/kernel0/memory.dss b/extra/dss/DragonOS/kernel0/memory.dss index 31899b9..a1177ba 100644 --- a/extra/dss/DragonOS/kernel0/memory.dss +++ b/extra/dss/DragonOS/kernel0/memory.dss @@ -11,6 +11,5 @@ .code _init_memory_handler: + nop ret - -_alloc_memory: \ No newline at end of file diff --git a/extra/reload_env.sh b/extra/reload_env.sh index e6c6e06..dc5167c 100755 --- a/extra/reload_env.sh +++ b/extra/reload_env.sh @@ -18,7 +18,7 @@ printf "\n${green}2) bootsector.dss\n${clear}" printf "\n${green}Compiling DragonOS...\n${clear}" printf "\n${green}1) kernel0.dss\n${clear}" -./dasm dss/DragonOS/kernel0/kernel0.dss -o dragon/kernel0.bin -I dss $1 +./dasm dss/DragonOS/kernel0/kernel0.dss -o dragon/kernel0.bin -I dss --save-final-stage ./kernel0_final_stage.txt $1 ./dtools load-binary dragon/disk1.dr dragon/kernel0.bin 0x00018000 printf "\n" diff --git a/src/assembler/Assembler.cpp b/src/assembler/Assembler.cpp index ec17b92..3372386 100644 --- a/src/assembler/Assembler.cpp +++ b/src/assembler/Assembler.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -51,7 +52,7 @@ namespace dragon replaceLabelRefs(); combineDataAndCode(); createExportFiles(); - if (Application::args.disassembly_file_path.trim() != "") + if (Application::args.final_stage_path.trim() != "") saveCurrentStageToFile(); m_programSize = m_code.size(); if (m_fixedSize > 0 && m_code.size() > m_fixedSize) @@ -774,7 +775,8 @@ namespace dragon void Assembler::saveCurrentStageToFile(void) { - + std::cout << "LINES: " << (int)m_lines.size() << "\n"; + ostd::FileSystem::writeTextFile(Application::args.final_stage_path, m_lines); } diff --git a/src/hardware/VirtualCPU.cpp b/src/hardware/VirtualCPU.cpp index 96fb923..676ecff 100644 --- a/src/hardware/VirtualCPU.cpp +++ b/src/hardware/VirtualCPU.cpp @@ -1,7 +1,6 @@ #include "VirtualCPU.hpp" #include "../tools/GlobalData.hpp" -#include #include #include "../runtime/DragonRuntime.hpp" @@ -804,17 +803,9 @@ namespace dragon break; case data::OpCodes::CallImm: { - bool test = false; - if (readRegister(data::Registers::IP) == 0x2CF1) - test = true; uint16_t subroutineAddr = fetch16(); pushStackFrame(); writeRegister16(data::Registers::IP, subroutineAddr); - if (test) - { - std::cout << ostd::String::getHexStr(subroutineAddr, true, 2) << "\n"; - std::cin.get(); - } m_subroutineCounter++; } break; @@ -836,18 +827,12 @@ namespace dragon break; case data::OpCodes::ArgReg: { - if (isInDebugBreakPoint()) - { - std::cout << ostd::String::getHexStr(readRegister(data::Registers::IP)); - std::cin.get(); - } uint8_t regAddr = fetch8(); if (!isInSubRoutine()) break; int16_t pp_val = readRegister(data::Registers::PP); int16_t arg_data = m_memory.read16(pp_val); writeRegister16(data::Registers::PP, pp_val - 2); writeRegister16(regAddr, arg_data); - // std::cout << ostd::String::getHexStr(readRegister(data::Registers::IP), true, 2) << "\n"; } break; case data::OpCodes::RetInt: