From 412b3601fc35dd0cae2f57e91e8154134a668d47 Mon Sep 17 00:00:00 2001 From: Syl4r39 Date: Thu, 1 May 2025 13:18:54 +0200 Subject: [PATCH] Sync push --- extra/dragon/cmos.dr | Bin 128 -> 128 bytes extra/dragon/disk1.dr | Bin 4194304 -> 4194304 bytes extra/dss/DragonOS/kernel0/kernel0.dss | 6 +++--- extra/dss/DragonOS/kernel0/memory.dss | 13 +++++++++++-- extra/dss/bios/data.dss | 1 + extra/dss/sdk/bios_api.dss | 3 ++- src/assembler/IncludePreprocessor.cpp | 2 -- src/hardware/VirtualCPU.cpp | 7 +++++++ src/runtime/DragonRuntime.cpp | 1 + src/tools/GlobalData.hpp | 2 ++ 10 files changed, 27 insertions(+), 8 deletions(-) diff --git a/extra/dragon/cmos.dr b/extra/dragon/cmos.dr index 83fed246f22509159f6a23ea55a199e81ff4be6c..a0182436ccd44db78ec1e0f307dfc9ff9ca9daaa 100644 GIT binary patch literal 128 acmWf4`2SzHgNq@GL6iXu1RxZhNJap!^8!2?PK1jt0i0 z`Y<5@VFm^PL52nY6hcD-7#IQ=7=v}@2k3Bs84-*kI?^CPhG3neU@|;F=Q~(xM~%+s z|H52CO#*BTyv4c(TtGUpT-OdnSCsja{!N`Z7BmoT@EbRaiSbpQi%00T>~PL~6>kd8EW qjjj{eSfKT){|tb<(EnhtS)FqS( -@include <../../sdk/palette.dss> -@include <../drivers/keyboard_driver.dss> @include <../drivers/display_driver.dss> +@include <../drivers/keyboard_driver.dss> +@include <../../sdk/bios_api.dss> @include +@include <../../sdk/palette.dss> ## ========================================================================================================================= diff --git a/extra/dss/DragonOS/kernel0/memory.dss b/extra/dss/DragonOS/kernel0/memory.dss index 222561a..31899b9 100644 --- a/extra/dss/DragonOS/kernel0/memory.dss +++ b/extra/dss/DragonOS/kernel0/memory.dss @@ -1,7 +1,16 @@ @guard _MEMORY_DSS_ +@define _REG_OFFSET 0x09 +@define _REG_S1 0x07 +@define _REG_S2 0x08 + +@define _USABLE_MEM_START 0x353F +@define _USABLE_MEM_SIZE 0xBAC0 +@define _MEM_TABLE_ADDR 0x30FF + .code _init_memory_handler: - mov R6, 0xFAAA - ret \ No newline at end of file + ret + +_alloc_memory: \ No newline at end of file diff --git a/extra/dss/bios/data.dss b/extra/dss/bios/data.dss index 38c43a1..a01b343 100644 --- a/extra/dss/bios/data.dss +++ b/extra/dss/bios/data.dss @@ -32,6 +32,7 @@ SCREEN_WIDTH { MemoryAddresses.CMOS + 0x0007 } SCREEN_HEIGHT { MemoryAddresses.CMOS + 0x0009 } BOOT_DISK { MemoryAddresses.CMOS + 0x0010 } + STACK_SIZE { MemoryAddresses.CMOS + 0x0011 } DISK_LIST { MemoryAddresses.CMOS + 0x007E } @end diff --git a/extra/dss/sdk/bios_api.dss b/extra/dss/sdk/bios_api.dss index 850645d..8519c3d 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.1620) +## -- This file is automatically generated by the DragonAssembler (version 0.4.1621) ## -- Please do not modify this file in any way. ## -- @@ -24,6 +24,7 @@ SCREEN_WIDTH { MemoryAddresses.CMOS + 0x0007 } SCREEN_HEIGHT { MemoryAddresses.CMOS + 0x0009 } BOOT_DISK { MemoryAddresses.CMOS + 0x0010 } + STACK_SIZE { MemoryAddresses.CMOS + 0x0011 } DISK_LIST { MemoryAddresses.CMOS + 0x007E } @end ## -- diff --git a/src/assembler/IncludePreprocessor.cpp b/src/assembler/IncludePreprocessor.cpp index cf292f2..926f286 100644 --- a/src/assembler/IncludePreprocessor.cpp +++ b/src/assembler/IncludePreprocessor.cpp @@ -66,8 +66,6 @@ namespace dragon { ostd::String line = lines[i]; line.trim(); - if (line.new_toLower().contains("memory.dss")) - std::cout << line << "\n"; if (line.new_toLower().startsWith("@include") && line.len() > 8) { line.substr(8).trim(); diff --git a/src/hardware/VirtualCPU.cpp b/src/hardware/VirtualCPU.cpp index e47f3bc..28a0d0b 100644 --- a/src/hardware/VirtualCPU.cpp +++ b/src/hardware/VirtualCPU.cpp @@ -61,6 +61,13 @@ namespace dragon void VirtualCPU::pushToStack(int16_t value) { uint16_t stackAddr = readRegister(data::Registers::SP); + uint16_t stack_size = DragonRuntime::vCMOS.read16(data::CMOSRegisters::StackSize); + if (stackAddr <= 0xFFFF - stack_size) + { + data::ErrorHandler::pushError(data::ErrorCodes::CPU_StackOverflow, "Stack Overflow: "); + m_halt = true; + return; + } m_memory.write16(stackAddr, value); writeRegister16(data::Registers::SP, stackAddr - 2); m_stackFrameSize += 2; diff --git a/src/runtime/DragonRuntime.cpp b/src/runtime/DragonRuntime.cpp index c029760..92865e3 100644 --- a/src/runtime/DragonRuntime.cpp +++ b/src/runtime/DragonRuntime.cpp @@ -322,6 +322,7 @@ namespace dragon vCMOS.write8(data::CMOSRegisters::ScreenRedrawRate, machine_config.screen_redraw_rate_per_second); vCMOS.write16(data::CMOSRegisters::ScreenWidth, static_cast(RawTextRenderer::CONSOLE_CHARS_H)); vCMOS.write16(data::CMOSRegisters::ScreenHeight, static_cast(RawTextRenderer::CONSOLE_CHARS_V)); + vCMOS.write16(data::CMOSRegisters::StackSize, 0x1000); ostd::BitField_16 disk_list_bitfield; disk_list_bitfield.value = 0; for (int32_t i = 0; i < 16; i++) diff --git a/src/tools/GlobalData.hpp b/src/tools/GlobalData.hpp index 508560e..1f7a73a 100644 --- a/src/tools/GlobalData.hpp +++ b/src/tools/GlobalData.hpp @@ -20,6 +20,7 @@ namespace dragon inline static constexpr uint64_t CPU_UnknownInstruction = 0x2000000000000000; inline static constexpr uint64_t CPU_UnsupportedExtension = 0x2000000000000001; + inline static constexpr uint64_t CPU_StackOverflow = 0x2000000000000002; inline static constexpr uint64_t BIOS_FailedToLoad = 0x3000000000000000; inline static constexpr uint64_t BIOS_InvalidSize = 0x3000000000000001; @@ -223,6 +224,7 @@ namespace dragon inline static constexpr uint8_t ScreenWidth = 0x07; inline static constexpr uint8_t ScreenHeight = 0x09; inline static constexpr uint8_t BootDisk = 0x10; + inline static constexpr uint8_t StackSize = 0x11; inline static constexpr uint8_t DiskList = 0x7E; };