diff --git a/Cargo.lock b/Cargo.lock index 5f883645..ca679389 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1914,7 +1914,21 @@ dependencies = [ ] [[package]] -name = "prometeu-core" +name = "prometeu-firmware" +version = "0.1.0" +dependencies = [ + "prometeu-abi", + "prometeu-bytecode", + "prometeu-hardware", + "prometeu-hardware-contract", + "prometeu-kernel", + "prometeu-vm", + "serde", + "serde_json", +] + +[[package]] +name = "prometeu-hardware" version = "0.1.0" dependencies = [ "prometeu-abi", @@ -1927,20 +1941,6 @@ dependencies = [ "url", ] -[[package]] -name = "prometeu-firmware" -version = "0.1.0" -dependencies = [ - "prometeu-abi", - "prometeu-bytecode", - "prometeu-core", - "prometeu-hardware-contract", - "prometeu-kernel", - "prometeu-vm", - "serde", - "serde_json", -] - [[package]] name = "prometeu-hardware-contract" version = "0.1.0" @@ -1957,10 +1957,9 @@ version = "0.1.0" dependencies = [ "prometeu-abi", "prometeu-bytecode", - "prometeu-core", + "prometeu-hardware", "prometeu-hardware-contract", "prometeu-vm", - "serde", "serde_json", ] @@ -1981,8 +1980,11 @@ dependencies = [ "clap", "cpal", "pixels", - "prometeu-core", + "prometeu-abi", "prometeu-firmware", + "prometeu-hardware", + "prometeu-hardware-contract", + "prometeu-kernel", "ringbuf", "serde_json", "winit", diff --git a/Cargo.toml b/Cargo.toml index 5eb161d7..19c089b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ members = [ "crates/prometeu-abi", "crates/prometeu-vm", "crates/prometeu-kernel", - "crates/prometeu-core", + "crates/prometeu-hardware", "crates/prometeu-runtime-desktop", "crates/prometeu", "crates/prometeu-bytecode", diff --git a/README.md b/README.md index 376ea476..9b0c6b9b 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ This repository is organized as a Rust workspace and contains several components - **[crates/](./crates)**: Software implementation in Rust. - **[prometeu](./crates/prometeu)**: Unified command-line interface (CLI). - - **[prometeu-core](./crates/prometeu-core)**: The logical core, VM, and internal OS. + - **[prometeu-hardware](./crates/prometeu-hardware)**: The virtual hardware (GPU, SPU, Input). - **[prometeu-runtime-desktop](crates/prometeu-runtime-desktop)**: Host for execution on Desktop systems. - **[docs/](./docs)**: Technical documentation and system specifications. - **[devtools-protocol/](devtools)**: Definition of the communication protocol for development tools. diff --git a/crates/prometeu-core/src/hardware/mod.rs b/crates/prometeu-core/src/hardware/mod.rs deleted file mode 100644 index db9fa69c..00000000 --- a/crates/prometeu-core/src/hardware/mod.rs +++ /dev/null @@ -1,20 +0,0 @@ -mod asset; -mod gfx; -mod pad; -mod touch; -mod audio; -mod memory_banks; -pub mod hardware; - -pub use crate::model::HandleId; -pub use asset::AssetManager; -pub use audio::{Audio, AudioCommand, Channel, MAX_CHANNELS, OUTPUT_SAMPLE_RATE}; -pub use gfx::Gfx; -pub use memory_banks::MemoryBanks; -pub use pad::Pad; -pub use touch::Touch; - -pub use prometeu_hardware_contract::{ - AssetBridge, AudioBridge, BlendMode, GfxBridge, HardwareBridge, InputSignals, LoopMode, - PadBridge, TouchBridge, -}; diff --git a/crates/prometeu-core/src/lib.rs b/crates/prometeu-core/src/lib.rs deleted file mode 100644 index 23c3b312..00000000 --- a/crates/prometeu-core/src/lib.rs +++ /dev/null @@ -1,35 +0,0 @@ -//! # Prometeu Core -//! -//! This crate contains the engine and hardware definitions for the Prometeu Virtual Console. -//! It serves as the bridge between the physical host (desktop/web) and the virtualized -//! environment where games and apps run. -//! -//! ## Main Components: -//! - [`hardware`]: Virtual peripheral definitions (Graphics, Audio, Input). -//! - [`virtual_machine`]: The stack-based execution engine for Prometeu ByteCode. -//! - [`prometeu_os`]: Resource management, filesystem access, and syscall dispatching. -//! - [`model`]: Common data structures (Colors, Sprites, Cartridges). -//! - [`fs`]: Virtualized filesystem abstraction for sandboxed access. -//! - [`log`]: Centralized logging and telemetry service. -//! -//! The "Source of Truth" for the console's behavior lives here. - -pub mod hardware; -// pub mod fs; - -pub mod fs { - pub use prometeu_kernel::fs::*; -} - -pub mod prometeu_os { - pub use prometeu_kernel::*; -} - -// Facade/reexports for ABI modules (temporary during PR-00.x) -pub use prometeu_abi as abi; -pub use prometeu_abi::debugger_protocol; -pub use prometeu_abi::log; -pub use prometeu_abi::model; -pub use prometeu_abi::telemetry; - -pub use hardware::hardware::Hardware; diff --git a/crates/prometeu-firmware/Cargo.toml b/crates/prometeu-firmware/Cargo.toml index b7a0336c..b78f4e40 100644 --- a/crates/prometeu-firmware/Cargo.toml +++ b/crates/prometeu-firmware/Cargo.toml @@ -5,7 +5,7 @@ edition = "2024" license.workspace = true [dependencies] -prometeu-core = { path = "../prometeu-core" } +prometeu-hardware = { path = "../prometeu-hardware" } prometeu-vm = { path = "../prometeu-vm" } prometeu-kernel = { path = "../prometeu-kernel" } prometeu-bytecode = { path = "../prometeu-bytecode" } diff --git a/crates/prometeu-firmware/src/firmware/firmware.rs b/crates/prometeu-firmware/src/firmware/firmware.rs index 9e81204e..fadf78ab 100644 --- a/crates/prometeu-firmware/src/firmware/firmware.rs +++ b/crates/prometeu-firmware/src/firmware/firmware.rs @@ -1,13 +1,12 @@ +use prometeu_abi::model::Cartridge; +use prometeu_abi::telemetry::CertificationConfig; +use prometeu_hardware_contract::{HardwareBridge, InputSignals}; +use prometeu_kernel::PrometeuOS; use prometeu_vm::VirtualMachine; use crate::firmware::boot_target::BootTarget; use crate::firmware::firmware_state::{FirmwareState, LoadCartridgeStep, ResetStep}; use crate::firmware::prometeu_context::PrometeuContext; -use prometeu_core::hardware::{HardwareBridge, InputSignals}; -use prometeu_core::abi::model::Cartridge; use crate::prometeu_hub::PrometeuHub; -use prometeu_core::prometeu_os::PrometeuOS; - -use prometeu_core::abi::telemetry::CertificationConfig; /// PROMETEU Firmware. /// diff --git a/crates/prometeu-firmware/src/firmware/firmware_step_crash_screen.rs b/crates/prometeu-firmware/src/firmware/firmware_step_crash_screen.rs index d2e6d72b..b2832887 100644 --- a/crates/prometeu-firmware/src/firmware/firmware_step_crash_screen.rs +++ b/crates/prometeu-firmware/src/firmware/firmware_step_crash_screen.rs @@ -1,7 +1,7 @@ +use prometeu_abi::log::{LogLevel, LogSource}; +use prometeu_abi::model::Color; use crate::firmware::firmware_state::{FirmwareState, LaunchHubStep}; use crate::firmware::prometeu_context::PrometeuContext; -use prometeu_core::abi::log::{LogLevel, LogSource}; -use prometeu_core::abi::model::Color; #[derive(Debug, Clone)] pub struct AppCrashesStep { diff --git a/crates/prometeu-firmware/src/firmware/firmware_step_game_running.rs b/crates/prometeu-firmware/src/firmware/firmware_step_game_running.rs index c83bda42..a8017936 100644 --- a/crates/prometeu-firmware/src/firmware/firmware_step_game_running.rs +++ b/crates/prometeu-firmware/src/firmware/firmware_step_game_running.rs @@ -1,6 +1,6 @@ +use prometeu_abi::log::{LogLevel, LogSource}; use crate::firmware::firmware_state::{AppCrashesStep, FirmwareState}; use crate::firmware::prometeu_context::PrometeuContext; -use prometeu_core::abi::log::{LogLevel, LogSource}; #[derive(Debug, Clone)] pub struct GameRunningStep; diff --git a/crates/prometeu-firmware/src/firmware/firmware_step_hub_home.rs b/crates/prometeu-firmware/src/firmware/firmware_step_hub_home.rs index 2f59e7e2..9388820f 100644 --- a/crates/prometeu-firmware/src/firmware/firmware_step_hub_home.rs +++ b/crates/prometeu-firmware/src/firmware/firmware_step_hub_home.rs @@ -1,6 +1,6 @@ use crate::firmware::firmware_state::{AppCrashesStep, FirmwareState}; use crate::firmware::prometeu_context::PrometeuContext; -use prometeu_core::abi::log::{LogLevel, LogSource}; +use prometeu_abi::log::{LogLevel, LogSource}; #[derive(Debug, Clone)] pub struct HubHomeStep; diff --git a/crates/prometeu-firmware/src/firmware/firmware_step_launch_hub.rs b/crates/prometeu-firmware/src/firmware/firmware_step_launch_hub.rs index 816eb426..1989caa9 100644 --- a/crates/prometeu-firmware/src/firmware/firmware_step_launch_hub.rs +++ b/crates/prometeu-firmware/src/firmware/firmware_step_launch_hub.rs @@ -1,8 +1,8 @@ use crate::firmware::boot_target::BootTarget; use crate::firmware::firmware_state::{FirmwareState, HubHomeStep, LoadCartridgeStep}; use crate::firmware::prometeu_context::PrometeuContext; -use prometeu_core::abi::log::{LogLevel, LogSource}; -use prometeu_core::abi::model::CartridgeLoader; +use prometeu_abi::log::{LogLevel, LogSource}; +use prometeu_abi::model::CartridgeLoader; #[derive(Debug, Clone)] pub struct LaunchHubStep; diff --git a/crates/prometeu-firmware/src/firmware/firmware_step_load_cartridge.rs b/crates/prometeu-firmware/src/firmware/firmware_step_load_cartridge.rs index 906c5ac7..e383d3fa 100644 --- a/crates/prometeu-firmware/src/firmware/firmware_step_load_cartridge.rs +++ b/crates/prometeu-firmware/src/firmware/firmware_step_load_cartridge.rs @@ -1,7 +1,7 @@ use crate::firmware::firmware_state::{FirmwareState, GameRunningStep, HubHomeStep}; use crate::firmware::prometeu_context::PrometeuContext; -use prometeu_core::abi::log::{LogLevel, LogSource}; -use prometeu_core::abi::model::{AppMode, Cartridge, Color, Rect}; +use prometeu_abi::log::{LogLevel, LogSource}; +use prometeu_abi::model::{AppMode, Cartridge, Color, Rect}; #[derive(Debug, Clone)] pub struct LoadCartridgeStep { diff --git a/crates/prometeu-firmware/src/firmware/firmware_step_reset.rs b/crates/prometeu-firmware/src/firmware/firmware_step_reset.rs index f14284e0..e727057d 100644 --- a/crates/prometeu-firmware/src/firmware/firmware_step_reset.rs +++ b/crates/prometeu-firmware/src/firmware/firmware_step_reset.rs @@ -1,7 +1,7 @@ +use prometeu_abi::log::{LogLevel, LogSource}; use crate::firmware::boot_target::BootTarget; use crate::firmware::firmware_state::{FirmwareState, LaunchHubStep, SplashScreenStep}; use crate::firmware::prometeu_context::PrometeuContext; -use prometeu_core::abi::log::{LogLevel, LogSource}; #[derive(Debug, Clone)] pub struct ResetStep; diff --git a/crates/prometeu-firmware/src/firmware/firmware_step_splash_screen.rs b/crates/prometeu-firmware/src/firmware/firmware_step_splash_screen.rs index 1834512d..45c9b5ff 100644 --- a/crates/prometeu-firmware/src/firmware/firmware_step_splash_screen.rs +++ b/crates/prometeu-firmware/src/firmware/firmware_step_splash_screen.rs @@ -1,7 +1,7 @@ use crate::firmware::firmware_state::{FirmwareState, LaunchHubStep}; use crate::firmware::prometeu_context::PrometeuContext; -use prometeu_core::abi::log::{LogLevel, LogSource}; -use prometeu_core::abi::model::Color; +use prometeu_abi::log::{LogLevel, LogSource}; +use prometeu_abi::model::Color; #[derive(Debug, Clone)] pub struct SplashScreenStep { diff --git a/crates/prometeu-firmware/src/firmware/prometeu_context.rs b/crates/prometeu-firmware/src/firmware/prometeu_context.rs index 5f69a910..f392fa6d 100644 --- a/crates/prometeu-firmware/src/firmware/prometeu_context.rs +++ b/crates/prometeu-firmware/src/firmware/prometeu_context.rs @@ -1,8 +1,8 @@ +use prometeu_hardware_contract::{HardwareBridge, InputSignals}; +use prometeu_kernel::PrometeuOS; use prometeu_vm::VirtualMachine; use crate::firmware::boot_target::BootTarget; -use prometeu_core::hardware::{HardwareBridge, InputSignals}; use crate::prometeu_hub::PrometeuHub; -use prometeu_core::prometeu_os::PrometeuOS; pub struct PrometeuContext<'a> { pub vm: &'a mut VirtualMachine, diff --git a/crates/prometeu-firmware/src/prometeu_hub/prometeu_hub.rs b/crates/prometeu-firmware/src/prometeu_hub/prometeu_hub.rs index 4a267938..9ea5ffcd 100644 --- a/crates/prometeu-firmware/src/prometeu_hub/prometeu_hub.rs +++ b/crates/prometeu-firmware/src/prometeu_hub/prometeu_hub.rs @@ -1,8 +1,8 @@ -use prometeu_core::hardware::HardwareBridge; -use prometeu_core::abi::log::{LogLevel, LogSource}; -use prometeu_core::abi::model::{Color, Rect}; +use prometeu_abi::log::{LogLevel, LogSource}; +use prometeu_abi::model::{Color, Rect}; +use prometeu_hardware_contract::HardwareBridge; +use prometeu_kernel::PrometeuOS; use crate::prometeu_hub::window_manager::WindowManager; -use prometeu_core::prometeu_os::PrometeuOS; /// PrometeuHub: Launcher and system UI environment. pub struct PrometeuHub { diff --git a/crates/prometeu-firmware/src/prometeu_hub/window_manager.rs b/crates/prometeu-firmware/src/prometeu_hub/window_manager.rs index e401fe42..a6b6b1aa 100644 --- a/crates/prometeu-firmware/src/prometeu_hub/window_manager.rs +++ b/crates/prometeu-firmware/src/prometeu_hub/window_manager.rs @@ -1,4 +1,4 @@ -use prometeu_core::abi::model::{Color, Rect, Window, WindowId}; +use prometeu_abi::model::{Color, Rect, Window, WindowId}; /// PROMETEU Window Manager. pub struct WindowManager { @@ -50,7 +50,7 @@ impl WindowManager { #[cfg(test)] mod tests { use super::*; - use prometeu_core::abi::model::Rect; + use prometeu_abi::model::Rect; #[test] fn test_window_manager_focus() { diff --git a/crates/prometeu-core/Cargo.toml b/crates/prometeu-hardware/Cargo.toml similarity index 94% rename from crates/prometeu-core/Cargo.toml rename to crates/prometeu-hardware/Cargo.toml index 004d0790..fdebbcd5 100644 --- a/crates/prometeu-core/Cargo.toml +++ b/crates/prometeu-hardware/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "prometeu-core" +name = "prometeu-hardware" version = "0.1.0" edition = "2024" license.workspace = true diff --git a/crates/prometeu-core/README.md b/crates/prometeu-hardware/README.md similarity index 100% rename from crates/prometeu-core/README.md rename to crates/prometeu-hardware/README.md diff --git a/crates/prometeu-core/src/hardware/asset.rs b/crates/prometeu-hardware/src/asset.rs similarity index 99% rename from crates/prometeu-core/src/hardware/asset.rs rename to crates/prometeu-hardware/src/asset.rs index 3810902f..a86c9743 100644 --- a/crates/prometeu-core/src/hardware/asset.rs +++ b/crates/prometeu-hardware/src/asset.rs @@ -1,10 +1,10 @@ -use crate::hardware::memory_banks::{SoundBankPoolInstaller, TileBankPoolInstaller}; -use crate::model::{AssetEntry, BankStats, BankType, Color, HandleId, LoadStatus, PreloadEntry, Sample, SlotRef, SlotStats, SoundBank, TileBank, TileSize}; use std::collections::HashMap; use std::sync::{Arc, Mutex, RwLock}; use std::thread; use std::time::Instant; +use prometeu_abi::model::{AssetEntry, BankStats, BankType, Color, HandleId, LoadStatus, PreloadEntry, Sample, SlotRef, SlotStats, SoundBank, TileBank, TileSize}; use prometeu_hardware_contract::AssetBridge; +use crate::memory_banks::{SoundBankPoolInstaller, TileBankPoolInstaller}; /// Resident metadata for a decoded/materialized asset inside a BankPolicy. #[derive(Debug)] @@ -673,7 +673,7 @@ impl AssetManager { #[cfg(test)] mod tests { use super::*; - use crate::hardware::memory_banks::{MemoryBanks, SoundBankPoolAccess, TileBankPoolAccess}; + use crate::memory_banks::{MemoryBanks, SoundBankPoolAccess, TileBankPoolAccess}; #[test] fn test_asset_loading_flow() { diff --git a/crates/prometeu-core/src/hardware/audio.rs b/crates/prometeu-hardware/src/audio.rs similarity index 99% rename from crates/prometeu-core/src/hardware/audio.rs rename to crates/prometeu-hardware/src/audio.rs index caa4986b..a4ded93a 100644 --- a/crates/prometeu-core/src/hardware/audio.rs +++ b/crates/prometeu-hardware/src/audio.rs @@ -1,6 +1,5 @@ -use crate::hardware::memory_banks::SoundBankPoolAccess; -use crate::model::Sample; use std::sync::Arc; +use prometeu_abi::model::Sample; use prometeu_hardware_contract::AudioBridge; /// Maximum number of simultaneous audio voices supported by the hardware. @@ -10,6 +9,7 @@ pub const OUTPUT_SAMPLE_RATE: u32 = 48000; /// Looping mode for samples (re-exported from the hardware contract). pub use prometeu_hardware_contract::LoopMode; +use crate::memory_banks::SoundBankPoolAccess; /// State of a single playback voice (channel). /// diff --git a/crates/prometeu-core/src/hardware/gfx.rs b/crates/prometeu-hardware/src/gfx.rs similarity index 98% rename from crates/prometeu-core/src/hardware/gfx.rs rename to crates/prometeu-hardware/src/gfx.rs index 7df33484..65012255 100644 --- a/crates/prometeu-core/src/hardware/gfx.rs +++ b/crates/prometeu-hardware/src/gfx.rs @@ -1,5 +1,5 @@ -use crate::hardware::memory_banks::TileBankPoolAccess; -use crate::model::{Color, HudTileLayer, ScrollableTileLayer, Sprite, TileBank, TileMap, TileSize}; +use crate::memory_banks::TileBankPoolAccess; +use prometeu_abi::model::{Color, HudTileLayer, ScrollableTileLayer, Sprite, Tile, TileBank, TileMap, TileSize}; use std::sync::Arc; use prometeu_hardware_contract::GfxBridge; @@ -119,7 +119,7 @@ impl Gfx { /// Initializes the graphics system with a specific resolution and shared memory banks. pub fn new(w: usize, h: usize, tile_banks: Arc) -> Self { const EMPTY_SPRITE: Sprite = Sprite { - tile: crate::model::Tile { id: 0, flip_x: false, flip_y: false, palette_id: 0 }, + tile: Tile { id: 0, flip_x: false, flip_y: false, palette_id: 0 }, x: 0, y: 0, bank_id: 0, @@ -483,7 +483,7 @@ impl Gfx { /// Internal helper to copy a single tile's pixels to the framebuffer. /// Handles flipping and palette resolution. - fn draw_tile_pixels(back: &mut [u16], screen_w: usize, screen_h: usize, x: i32, y: i32, tile: crate::model::Tile, bank: &TileBank) { + fn draw_tile_pixels(back: &mut [u16], screen_w: usize, screen_h: usize, x: i32, y: i32, tile: Tile, bank: &TileBank) { let size = bank.tile_size as usize; for local_y in 0..size { @@ -662,7 +662,7 @@ impl Gfx { #[cfg(test)] mod tests { use super::*; - use crate::hardware::MemoryBanks; + use crate::memory_banks::MemoryBanks; #[test] fn test_draw_pixel() { diff --git a/crates/prometeu-core/src/hardware/hardware.rs b/crates/prometeu-hardware/src/hardware.rs similarity index 88% rename from crates/prometeu-core/src/hardware/hardware.rs rename to crates/prometeu-hardware/src/hardware.rs index 3a71f64d..07338da3 100644 --- a/crates/prometeu-core/src/hardware/hardware.rs +++ b/crates/prometeu-hardware/src/hardware.rs @@ -1,6 +1,11 @@ -use crate::hardware::memory_banks::{SoundBankPoolAccess, SoundBankPoolInstaller, TileBankPoolAccess, TileBankPoolInstaller}; -use crate::hardware::{AssetBridge, AssetManager, Audio, AudioBridge, Gfx, GfxBridge, HardwareBridge, MemoryBanks, Pad, PadBridge, Touch, TouchBridge}; use std::sync::Arc; +use prometeu_hardware_contract::{AssetBridge, AudioBridge, GfxBridge, HardwareBridge, PadBridge, TouchBridge}; +use crate::asset::AssetManager; +use crate::audio::Audio; +use crate::gfx::Gfx; +use crate::memory_banks::{MemoryBanks, SoundBankPoolAccess, SoundBankPoolInstaller, TileBankPoolAccess, TileBankPoolInstaller}; +use crate::pad::Pad; +use crate::touch::Touch; /// Aggregate structure for all virtual hardware peripherals. /// diff --git a/crates/prometeu-hardware/src/lib.rs b/crates/prometeu-hardware/src/lib.rs new file mode 100644 index 00000000..3b7318dc --- /dev/null +++ b/crates/prometeu-hardware/src/lib.rs @@ -0,0 +1,14 @@ +mod asset; +mod gfx; +mod pad; +mod touch; +mod audio; +mod memory_banks; +pub mod hardware; + +pub use crate::asset::AssetManager; +pub use crate::audio::{Audio, AudioCommand, Channel, MAX_CHANNELS, OUTPUT_SAMPLE_RATE}; +pub use crate::gfx::Gfx; +pub use crate::memory_banks::MemoryBanks; +pub use crate::pad::Pad; +pub use crate::touch::Touch; \ No newline at end of file diff --git a/crates/prometeu-core/src/hardware/memory_banks.rs b/crates/prometeu-hardware/src/memory_banks.rs similarity index 98% rename from crates/prometeu-core/src/hardware/memory_banks.rs rename to crates/prometeu-hardware/src/memory_banks.rs index fcfd9bd6..0d436ec5 100644 --- a/crates/prometeu-core/src/hardware/memory_banks.rs +++ b/crates/prometeu-hardware/src/memory_banks.rs @@ -1,5 +1,5 @@ -use crate::model::{SoundBank, TileBank}; use std::sync::{Arc, RwLock}; +use prometeu_abi::model::{SoundBank, TileBank}; /// Non-generic interface for peripherals to access graphical tile banks. pub trait TileBankPoolAccess: Send + Sync { diff --git a/crates/prometeu-core/src/hardware/pad.rs b/crates/prometeu-hardware/src/pad.rs similarity index 95% rename from crates/prometeu-core/src/hardware/pad.rs rename to crates/prometeu-hardware/src/pad.rs index af7406b4..7521cef6 100644 --- a/crates/prometeu-core/src/hardware/pad.rs +++ b/crates/prometeu-hardware/src/pad.rs @@ -1,6 +1,5 @@ -use prometeu_hardware_contract::PadBridge; -use crate::hardware::InputSignals; -use crate::model::Button; +use prometeu_abi::model::Button; +use prometeu_hardware_contract::{InputSignals, PadBridge}; #[derive(Default, Clone, Copy, Debug)] pub struct Pad { diff --git a/crates/prometeu-core/src/hardware/touch.rs b/crates/prometeu-hardware/src/touch.rs similarity index 84% rename from crates/prometeu-core/src/hardware/touch.rs rename to crates/prometeu-hardware/src/touch.rs index b26565fa..6be1af58 100644 --- a/crates/prometeu-core/src/hardware/touch.rs +++ b/crates/prometeu-hardware/src/touch.rs @@ -1,6 +1,5 @@ -use prometeu_hardware_contract::TouchBridge; -use crate::hardware::InputSignals; -use crate::model::Button; +use prometeu_abi::model::Button; +use prometeu_hardware_contract::{InputSignals, TouchBridge}; #[derive(Default, Clone, Copy, Debug)] pub struct Touch { diff --git a/crates/prometeu-core/tests/heartbeat.rs b/crates/prometeu-hardware/tests/heartbeat.rs similarity index 98% rename from crates/prometeu-core/tests/heartbeat.rs rename to crates/prometeu-hardware/tests/heartbeat.rs index d15f0793..da475512 100644 --- a/crates/prometeu-core/tests/heartbeat.rs +++ b/crates/prometeu-hardware/tests/heartbeat.rs @@ -1,7 +1,7 @@ -use prometeu_core::Hardware; use std::fs; use std::path::Path; use prometeu_abi::virtual_machine::{Value, VmFault}; +use prometeu_hardware::hardware::Hardware; use prometeu_hardware_contract::{HostContext, HostReturn, NativeInterface}; use prometeu_vm::{LogicalFrameEndingReason, VirtualMachine}; diff --git a/crates/prometeu-kernel/Cargo.toml b/crates/prometeu-kernel/Cargo.toml index 81093833..1c736074 100644 --- a/crates/prometeu-kernel/Cargo.toml +++ b/crates/prometeu-kernel/Cargo.toml @@ -5,7 +5,6 @@ edition = "2024" license.workspace = true [dependencies] -serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.149" prometeu-vm = { path = "../prometeu-vm" } prometeu-bytecode = { path = "../prometeu-bytecode" } @@ -13,4 +12,4 @@ prometeu-abi = { path = "../prometeu-abi" } prometeu-hardware-contract = { path = "../prometeu-hardware-contract" } [dev-dependencies] -prometeu-core = { path = "../prometeu-core" } +prometeu-hardware = { path = "../prometeu-hardware" } diff --git a/crates/prometeu-kernel/src/prometeu_os.rs b/crates/prometeu-kernel/src/prometeu_os.rs index 1c772983..1d80b55c 100644 --- a/crates/prometeu-kernel/src/prometeu_os.rs +++ b/crates/prometeu-kernel/src/prometeu_os.rs @@ -415,11 +415,11 @@ impl PrometeuOS { #[cfg(test)] mod tests { - use prometeu_abi::virtual_machine::Value; + use prometeu_hardware::hardware::Hardware; +use prometeu_abi::virtual_machine::Value; use prometeu_hardware_contract::{HostReturn, InputSignals}; use super::*; use prometeu_abi::model::{AppMode, Cartridge}; - use prometeu_core::Hardware; fn call_syscall(os: &mut PrometeuOS, id: u32, vm: &mut VirtualMachine, hw: &mut dyn HardwareBridge) -> Result<(), VmFault> { let args_count = Syscall::from_u32(id).expect(&format!("Invalid syscall id: 0x{:08X}", id)).args_count(); diff --git a/crates/prometeu-runtime-desktop/Cargo.toml b/crates/prometeu-runtime-desktop/Cargo.toml index 5b1ed87c..220ae59c 100644 --- a/crates/prometeu-runtime-desktop/Cargo.toml +++ b/crates/prometeu-runtime-desktop/Cargo.toml @@ -14,8 +14,11 @@ dist = true include = ["../../VERSION.txt"] [dependencies] -prometeu-core = { path = "../prometeu-core" } +prometeu-abi = { path = "../prometeu-abi" } prometeu-firmware = { path = "../prometeu-firmware" } +prometeu-kernel = { path = "../prometeu-kernel" } +prometeu-hardware = { path = "../prometeu-hardware" } +prometeu-hardware-contract = { path="../prometeu-hardware-contract" } winit = "0.30.12" pixels = "0.15.0" cpal = "0.15.3" diff --git a/crates/prometeu-runtime-desktop/src/audio.rs b/crates/prometeu-runtime-desktop/src/audio.rs index 858767f9..2aadab7b 100644 --- a/crates/prometeu-runtime-desktop/src/audio.rs +++ b/crates/prometeu-runtime-desktop/src/audio.rs @@ -1,9 +1,10 @@ use cpal::traits::{DeviceTrait, HostTrait, StreamTrait}; -use prometeu_core::hardware::{AudioCommand, Channel, LoopMode, MAX_CHANNELS, OUTPUT_SAMPLE_RATE}; +use prometeu_hardware::{AudioCommand, Channel, MAX_CHANNELS, OUTPUT_SAMPLE_RATE}; use ringbuf::traits::{Consumer, Producer, Split}; use ringbuf::HeapRb; use std::sync::Arc; use std::time::Duration; +use prometeu_hardware_contract::LoopMode; pub struct HostAudio { pub producer: Option>>>, diff --git a/crates/prometeu-runtime-desktop/src/cap.rs b/crates/prometeu-runtime-desktop/src/cap.rs index a0a09d4d..ed36e5b8 100644 --- a/crates/prometeu-runtime-desktop/src/cap.rs +++ b/crates/prometeu-runtime-desktop/src/cap.rs @@ -1,4 +1,4 @@ -use prometeu_core::telemetry::CertificationConfig; +use prometeu_abi::telemetry::CertificationConfig; pub fn load_cap_config(path: &str) -> Option { let content = std::fs::read_to_string(path).ok()?; diff --git a/crates/prometeu-runtime-desktop/src/debugger.rs b/crates/prometeu-runtime-desktop/src/debugger.rs index b98b84c0..36e43689 100644 --- a/crates/prometeu-runtime-desktop/src/debugger.rs +++ b/crates/prometeu-runtime-desktop/src/debugger.rs @@ -1,9 +1,9 @@ -use prometeu_core::debugger_protocol::*; +use prometeu_abi::debugger_protocol::*; use prometeu_firmware::{BootTarget, Firmware}; -use prometeu_core::abi::model::CartridgeLoader; -use prometeu_core::Hardware; +use prometeu_abi::model::CartridgeLoader; use std::io::{Read, Write}; use std::net::{TcpListener, TcpStream}; +use prometeu_hardware::hardware::Hardware; /// Host-side implementation of the PROMETEU DevTools Protocol. /// diff --git a/crates/prometeu-runtime-desktop/src/fs_backend.rs b/crates/prometeu-runtime-desktop/src/fs_backend.rs index afb6f0f3..2462e342 100644 --- a/crates/prometeu-runtime-desktop/src/fs_backend.rs +++ b/crates/prometeu-runtime-desktop/src/fs_backend.rs @@ -1,6 +1,6 @@ -use prometeu_core::fs::{FsBackend, FsEntry, FsError}; use std::fs; use std::path::PathBuf; +use prometeu_kernel::fs::{FsBackend, FsEntry, FsError}; pub struct HostDirBackend { root: PathBuf, diff --git a/crates/prometeu-runtime-desktop/src/input.rs b/crates/prometeu-runtime-desktop/src/input.rs index 3632f0fe..3e506daf 100644 --- a/crates/prometeu-runtime-desktop/src/input.rs +++ b/crates/prometeu-runtime-desktop/src/input.rs @@ -1,8 +1,8 @@ -use prometeu_core::hardware::InputSignals; -use prometeu_core::Hardware; use winit::event::{ElementState, MouseButton, WindowEvent}; use winit::keyboard::{KeyCode, PhysicalKey}; use winit::window::Window; +use prometeu_hardware::hardware::Hardware; +use prometeu_hardware_contract::InputSignals; pub struct HostInputHandler { pub signals: InputSignals, diff --git a/crates/prometeu-runtime-desktop/src/log_sink.rs b/crates/prometeu-runtime-desktop/src/log_sink.rs index db300b67..27c9dcfb 100644 --- a/crates/prometeu-runtime-desktop/src/log_sink.rs +++ b/crates/prometeu-runtime-desktop/src/log_sink.rs @@ -1,4 +1,4 @@ -use prometeu_core::log::{LogEvent, LogLevel, LogSource}; +use prometeu_abi::log::{LogEvent, LogLevel, LogSource}; pub struct HostConsoleSink { last_seq: Option, diff --git a/crates/prometeu-runtime-desktop/src/runner.rs b/crates/prometeu-runtime-desktop/src/runner.rs index 8a7d2a2e..05d35ee8 100644 --- a/crates/prometeu-runtime-desktop/src/runner.rs +++ b/crates/prometeu-runtime-desktop/src/runner.rs @@ -8,7 +8,6 @@ use crate::utilities::draw_rgb565_to_rgba8; use pixels::wgpu::PresentMode; use pixels::{Pixels, PixelsBuilder, SurfaceTexture}; use prometeu_firmware::{BootTarget, Firmware}; -use prometeu_core::Hardware; use std::time::{Duration, Instant}; use winit::application::ApplicationHandler; use winit::dpi::LogicalSize; @@ -16,8 +15,10 @@ use winit::event::{ElementState, WindowEvent}; use winit::event_loop::{ActiveEventLoop, ControlFlow}; use winit::keyboard::{KeyCode, PhysicalKey}; use winit::window::{Window, WindowAttributes, WindowId}; - -use prometeu_core::telemetry::CertificationConfig; +use prometeu_abi::model::Color; +use prometeu_abi::telemetry::CertificationConfig; +use prometeu_hardware::hardware::Hardware; +use prometeu_hardware::AudioCommand; /// The Desktop implementation of the PROMETEU Runtime. /// @@ -124,9 +125,9 @@ impl HostRunner { fn display_dbg_overlay(&mut self) { let tel = &self.firmware.os.telemetry_last; - let color_text = prometeu_core::model::Color::WHITE; - let color_bg = prometeu_core::model::Color::INDIGO; // Dark blue to stand out - let color_warn = prometeu_core::model::Color::RED; + let color_text = Color::WHITE; + let color_bg = Color::INDIGO; // Dark blue to stand out + let color_warn = Color::RED; self.hardware.gfx.fill_rect(5, 5, 175, 100, color_bg); self.hardware.gfx.draw_text(10, 10, &format!("FPS: {:.1}", self.stats.current_fps), color_text); @@ -259,7 +260,7 @@ impl ApplicationHandler for HostRunner { // 2. Maintain filesystem connection if it was lost (e.g., directory removed). if let Some(root) = &self.fs_root { - use prometeu_core::fs::FsState; + use prometeu_kernel::fs::FsState; if matches!(self.firmware.os.fs_state, FsState::Unmounted | FsState::Error(_)) { if std::path::Path::new(root).exists() { let backend = HostDirBackend::new(root); @@ -298,9 +299,9 @@ impl ApplicationHandler for HostRunner { if is_paused != self.last_paused_state { self.last_paused_state = is_paused; let cmd = if is_paused { - prometeu_core::hardware::AudioCommand::MasterPause + AudioCommand::MasterPause } else { - prometeu_core::hardware::AudioCommand::MasterResume + AudioCommand::MasterResume }; self.hardware.audio.commands.push(cmd); } @@ -343,10 +344,10 @@ impl ApplicationHandler for HostRunner { #[cfg(test)] mod tests { use super::*; - use prometeu_core::debugger_protocol::DEVTOOLS_PROTOCOL_VERSION; use prometeu_firmware::BootTarget; use std::io::{Read, Write}; use std::net::TcpStream; + use prometeu_abi::debugger_protocol::DEVTOOLS_PROTOCOL_VERSION; #[test] fn test_debug_port_opens() { diff --git a/crates/prometeu-runtime-desktop/src/stats.rs b/crates/prometeu-runtime-desktop/src/stats.rs index 6aeb4a75..25242a0d 100644 --- a/crates/prometeu-runtime-desktop/src/stats.rs +++ b/crates/prometeu-runtime-desktop/src/stats.rs @@ -1,7 +1,7 @@ use prometeu_firmware::Firmware; -use prometeu_core::Hardware; use std::time::{Duration, Instant}; use winit::window::Window; +use prometeu_hardware::hardware::Hardware; pub struct HostStats { pub last_stats_update: Instant, diff --git a/test-cartridges/canonical/golden/program.pbc b/test-cartridges/canonical/golden/program.pbc index b06b91ca..666448e9 100644 Binary files a/test-cartridges/canonical/golden/program.pbc and b/test-cartridges/canonical/golden/program.pbc differ