This commit is contained in:
bQUARKz 2026-02-04 02:46:45 +00:00
parent 92df0ae074
commit 97c6ccb6f2
Signed by: bquarkz
SSH Key Fingerprint: SHA256:Z7dgqoglWwoK6j6u4QC87OveEq74WOhFN+gitsxtkf8
40 changed files with 113 additions and 146 deletions

38
Cargo.lock generated
View File

@ -1914,7 +1914,21 @@ dependencies = [
] ]
[[package]] [[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" version = "0.1.0"
dependencies = [ dependencies = [
"prometeu-abi", "prometeu-abi",
@ -1927,20 +1941,6 @@ dependencies = [
"url", "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]] [[package]]
name = "prometeu-hardware-contract" name = "prometeu-hardware-contract"
version = "0.1.0" version = "0.1.0"
@ -1957,10 +1957,9 @@ version = "0.1.0"
dependencies = [ dependencies = [
"prometeu-abi", "prometeu-abi",
"prometeu-bytecode", "prometeu-bytecode",
"prometeu-core", "prometeu-hardware",
"prometeu-hardware-contract", "prometeu-hardware-contract",
"prometeu-vm", "prometeu-vm",
"serde",
"serde_json", "serde_json",
] ]
@ -1981,8 +1980,11 @@ dependencies = [
"clap", "clap",
"cpal", "cpal",
"pixels", "pixels",
"prometeu-core", "prometeu-abi",
"prometeu-firmware", "prometeu-firmware",
"prometeu-hardware",
"prometeu-hardware-contract",
"prometeu-kernel",
"ringbuf", "ringbuf",
"serde_json", "serde_json",
"winit", "winit",

View File

@ -3,7 +3,7 @@ members = [
"crates/prometeu-abi", "crates/prometeu-abi",
"crates/prometeu-vm", "crates/prometeu-vm",
"crates/prometeu-kernel", "crates/prometeu-kernel",
"crates/prometeu-core", "crates/prometeu-hardware",
"crates/prometeu-runtime-desktop", "crates/prometeu-runtime-desktop",
"crates/prometeu", "crates/prometeu",
"crates/prometeu-bytecode", "crates/prometeu-bytecode",

View File

@ -31,7 +31,7 @@ This repository is organized as a Rust workspace and contains several components
- **[crates/](./crates)**: Software implementation in Rust. - **[crates/](./crates)**: Software implementation in Rust.
- **[prometeu](./crates/prometeu)**: Unified command-line interface (CLI). - **[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. - **[prometeu-runtime-desktop](crates/prometeu-runtime-desktop)**: Host for execution on Desktop systems.
- **[docs/](./docs)**: Technical documentation and system specifications. - **[docs/](./docs)**: Technical documentation and system specifications.
- **[devtools-protocol/](devtools)**: Definition of the communication protocol for development tools. - **[devtools-protocol/](devtools)**: Definition of the communication protocol for development tools.

View File

@ -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,
};

View File

@ -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;

View File

@ -5,7 +5,7 @@ edition = "2024"
license.workspace = true license.workspace = true
[dependencies] [dependencies]
prometeu-core = { path = "../prometeu-core" } prometeu-hardware = { path = "../prometeu-hardware" }
prometeu-vm = { path = "../prometeu-vm" } prometeu-vm = { path = "../prometeu-vm" }
prometeu-kernel = { path = "../prometeu-kernel" } prometeu-kernel = { path = "../prometeu-kernel" }
prometeu-bytecode = { path = "../prometeu-bytecode" } prometeu-bytecode = { path = "../prometeu-bytecode" }

View File

@ -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 prometeu_vm::VirtualMachine;
use crate::firmware::boot_target::BootTarget; use crate::firmware::boot_target::BootTarget;
use crate::firmware::firmware_state::{FirmwareState, LoadCartridgeStep, ResetStep}; use crate::firmware::firmware_state::{FirmwareState, LoadCartridgeStep, ResetStep};
use crate::firmware::prometeu_context::PrometeuContext; use crate::firmware::prometeu_context::PrometeuContext;
use prometeu_core::hardware::{HardwareBridge, InputSignals};
use prometeu_core::abi::model::Cartridge;
use crate::prometeu_hub::PrometeuHub; use crate::prometeu_hub::PrometeuHub;
use prometeu_core::prometeu_os::PrometeuOS;
use prometeu_core::abi::telemetry::CertificationConfig;
/// PROMETEU Firmware. /// PROMETEU Firmware.
/// ///

View File

@ -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::firmware_state::{FirmwareState, LaunchHubStep};
use crate::firmware::prometeu_context::PrometeuContext; use crate::firmware::prometeu_context::PrometeuContext;
use prometeu_core::abi::log::{LogLevel, LogSource};
use prometeu_core::abi::model::Color;
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct AppCrashesStep { pub struct AppCrashesStep {

View File

@ -1,6 +1,6 @@
use prometeu_abi::log::{LogLevel, LogSource};
use crate::firmware::firmware_state::{AppCrashesStep, FirmwareState}; use crate::firmware::firmware_state::{AppCrashesStep, FirmwareState};
use crate::firmware::prometeu_context::PrometeuContext; use crate::firmware::prometeu_context::PrometeuContext;
use prometeu_core::abi::log::{LogLevel, LogSource};
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct GameRunningStep; pub struct GameRunningStep;

View File

@ -1,6 +1,6 @@
use crate::firmware::firmware_state::{AppCrashesStep, FirmwareState}; use crate::firmware::firmware_state::{AppCrashesStep, FirmwareState};
use crate::firmware::prometeu_context::PrometeuContext; use crate::firmware::prometeu_context::PrometeuContext;
use prometeu_core::abi::log::{LogLevel, LogSource}; use prometeu_abi::log::{LogLevel, LogSource};
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct HubHomeStep; pub struct HubHomeStep;

View File

@ -1,8 +1,8 @@
use crate::firmware::boot_target::BootTarget; use crate::firmware::boot_target::BootTarget;
use crate::firmware::firmware_state::{FirmwareState, HubHomeStep, LoadCartridgeStep}; use crate::firmware::firmware_state::{FirmwareState, HubHomeStep, LoadCartridgeStep};
use crate::firmware::prometeu_context::PrometeuContext; use crate::firmware::prometeu_context::PrometeuContext;
use prometeu_core::abi::log::{LogLevel, LogSource}; use prometeu_abi::log::{LogLevel, LogSource};
use prometeu_core::abi::model::CartridgeLoader; use prometeu_abi::model::CartridgeLoader;
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct LaunchHubStep; pub struct LaunchHubStep;

View File

@ -1,7 +1,7 @@
use crate::firmware::firmware_state::{FirmwareState, GameRunningStep, HubHomeStep}; use crate::firmware::firmware_state::{FirmwareState, GameRunningStep, HubHomeStep};
use crate::firmware::prometeu_context::PrometeuContext; use crate::firmware::prometeu_context::PrometeuContext;
use prometeu_core::abi::log::{LogLevel, LogSource}; use prometeu_abi::log::{LogLevel, LogSource};
use prometeu_core::abi::model::{AppMode, Cartridge, Color, Rect}; use prometeu_abi::model::{AppMode, Cartridge, Color, Rect};
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct LoadCartridgeStep { pub struct LoadCartridgeStep {

View File

@ -1,7 +1,7 @@
use prometeu_abi::log::{LogLevel, LogSource};
use crate::firmware::boot_target::BootTarget; use crate::firmware::boot_target::BootTarget;
use crate::firmware::firmware_state::{FirmwareState, LaunchHubStep, SplashScreenStep}; use crate::firmware::firmware_state::{FirmwareState, LaunchHubStep, SplashScreenStep};
use crate::firmware::prometeu_context::PrometeuContext; use crate::firmware::prometeu_context::PrometeuContext;
use prometeu_core::abi::log::{LogLevel, LogSource};
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct ResetStep; pub struct ResetStep;

View File

@ -1,7 +1,7 @@
use crate::firmware::firmware_state::{FirmwareState, LaunchHubStep}; use crate::firmware::firmware_state::{FirmwareState, LaunchHubStep};
use crate::firmware::prometeu_context::PrometeuContext; use crate::firmware::prometeu_context::PrometeuContext;
use prometeu_core::abi::log::{LogLevel, LogSource}; use prometeu_abi::log::{LogLevel, LogSource};
use prometeu_core::abi::model::Color; use prometeu_abi::model::Color;
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct SplashScreenStep { pub struct SplashScreenStep {

View File

@ -1,8 +1,8 @@
use prometeu_hardware_contract::{HardwareBridge, InputSignals};
use prometeu_kernel::PrometeuOS;
use prometeu_vm::VirtualMachine; use prometeu_vm::VirtualMachine;
use crate::firmware::boot_target::BootTarget; use crate::firmware::boot_target::BootTarget;
use prometeu_core::hardware::{HardwareBridge, InputSignals};
use crate::prometeu_hub::PrometeuHub; use crate::prometeu_hub::PrometeuHub;
use prometeu_core::prometeu_os::PrometeuOS;
pub struct PrometeuContext<'a> { pub struct PrometeuContext<'a> {
pub vm: &'a mut VirtualMachine, pub vm: &'a mut VirtualMachine,

View File

@ -1,8 +1,8 @@
use prometeu_core::hardware::HardwareBridge; use prometeu_abi::log::{LogLevel, LogSource};
use prometeu_core::abi::log::{LogLevel, LogSource}; use prometeu_abi::model::{Color, Rect};
use prometeu_core::abi::model::{Color, Rect}; use prometeu_hardware_contract::HardwareBridge;
use prometeu_kernel::PrometeuOS;
use crate::prometeu_hub::window_manager::WindowManager; use crate::prometeu_hub::window_manager::WindowManager;
use prometeu_core::prometeu_os::PrometeuOS;
/// PrometeuHub: Launcher and system UI environment. /// PrometeuHub: Launcher and system UI environment.
pub struct PrometeuHub { pub struct PrometeuHub {

View File

@ -1,4 +1,4 @@
use prometeu_core::abi::model::{Color, Rect, Window, WindowId}; use prometeu_abi::model::{Color, Rect, Window, WindowId};
/// PROMETEU Window Manager. /// PROMETEU Window Manager.
pub struct WindowManager { pub struct WindowManager {
@ -50,7 +50,7 @@ impl WindowManager {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use prometeu_core::abi::model::Rect; use prometeu_abi::model::Rect;
#[test] #[test]
fn test_window_manager_focus() { fn test_window_manager_focus() {

View File

@ -1,5 +1,5 @@
[package] [package]
name = "prometeu-core" name = "prometeu-hardware"
version = "0.1.0" version = "0.1.0"
edition = "2024" edition = "2024"
license.workspace = true license.workspace = true

View File

@ -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::collections::HashMap;
use std::sync::{Arc, Mutex, RwLock}; use std::sync::{Arc, Mutex, RwLock};
use std::thread; use std::thread;
use std::time::Instant; 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 prometeu_hardware_contract::AssetBridge;
use crate::memory_banks::{SoundBankPoolInstaller, TileBankPoolInstaller};
/// Resident metadata for a decoded/materialized asset inside a BankPolicy. /// Resident metadata for a decoded/materialized asset inside a BankPolicy.
#[derive(Debug)] #[derive(Debug)]
@ -673,7 +673,7 @@ impl AssetManager {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::hardware::memory_banks::{MemoryBanks, SoundBankPoolAccess, TileBankPoolAccess}; use crate::memory_banks::{MemoryBanks, SoundBankPoolAccess, TileBankPoolAccess};
#[test] #[test]
fn test_asset_loading_flow() { fn test_asset_loading_flow() {

View File

@ -1,6 +1,5 @@
use crate::hardware::memory_banks::SoundBankPoolAccess;
use crate::model::Sample;
use std::sync::Arc; use std::sync::Arc;
use prometeu_abi::model::Sample;
use prometeu_hardware_contract::AudioBridge; use prometeu_hardware_contract::AudioBridge;
/// Maximum number of simultaneous audio voices supported by the hardware. /// 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). /// Looping mode for samples (re-exported from the hardware contract).
pub use prometeu_hardware_contract::LoopMode; pub use prometeu_hardware_contract::LoopMode;
use crate::memory_banks::SoundBankPoolAccess;
/// State of a single playback voice (channel). /// State of a single playback voice (channel).
/// ///

View File

@ -1,5 +1,5 @@
use crate::hardware::memory_banks::TileBankPoolAccess; use crate::memory_banks::TileBankPoolAccess;
use crate::model::{Color, HudTileLayer, ScrollableTileLayer, Sprite, TileBank, TileMap, TileSize}; use prometeu_abi::model::{Color, HudTileLayer, ScrollableTileLayer, Sprite, Tile, TileBank, TileMap, TileSize};
use std::sync::Arc; use std::sync::Arc;
use prometeu_hardware_contract::GfxBridge; use prometeu_hardware_contract::GfxBridge;
@ -119,7 +119,7 @@ impl Gfx {
/// Initializes the graphics system with a specific resolution and shared memory banks. /// Initializes the graphics system with a specific resolution and shared memory banks.
pub fn new(w: usize, h: usize, tile_banks: Arc<dyn TileBankPoolAccess>) -> Self { pub fn new(w: usize, h: usize, tile_banks: Arc<dyn TileBankPoolAccess>) -> Self {
const EMPTY_SPRITE: Sprite = Sprite { 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, x: 0,
y: 0, y: 0,
bank_id: 0, bank_id: 0,
@ -483,7 +483,7 @@ impl Gfx {
/// Internal helper to copy a single tile's pixels to the framebuffer. /// Internal helper to copy a single tile's pixels to the framebuffer.
/// Handles flipping and palette resolution. /// 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; let size = bank.tile_size as usize;
for local_y in 0..size { for local_y in 0..size {
@ -662,7 +662,7 @@ impl Gfx {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::hardware::MemoryBanks; use crate::memory_banks::MemoryBanks;
#[test] #[test]
fn test_draw_pixel() { fn test_draw_pixel() {

View File

@ -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 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. /// Aggregate structure for all virtual hardware peripherals.
/// ///

View File

@ -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;

View File

@ -1,5 +1,5 @@
use crate::model::{SoundBank, TileBank};
use std::sync::{Arc, RwLock}; use std::sync::{Arc, RwLock};
use prometeu_abi::model::{SoundBank, TileBank};
/// Non-generic interface for peripherals to access graphical tile banks. /// Non-generic interface for peripherals to access graphical tile banks.
pub trait TileBankPoolAccess: Send + Sync { pub trait TileBankPoolAccess: Send + Sync {

View File

@ -1,6 +1,5 @@
use prometeu_hardware_contract::PadBridge; use prometeu_abi::model::Button;
use crate::hardware::InputSignals; use prometeu_hardware_contract::{InputSignals, PadBridge};
use crate::model::Button;
#[derive(Default, Clone, Copy, Debug)] #[derive(Default, Clone, Copy, Debug)]
pub struct Pad { pub struct Pad {

View File

@ -1,6 +1,5 @@
use prometeu_hardware_contract::TouchBridge; use prometeu_abi::model::Button;
use crate::hardware::InputSignals; use prometeu_hardware_contract::{InputSignals, TouchBridge};
use crate::model::Button;
#[derive(Default, Clone, Copy, Debug)] #[derive(Default, Clone, Copy, Debug)]
pub struct Touch { pub struct Touch {

View File

@ -1,7 +1,7 @@
use prometeu_core::Hardware;
use std::fs; use std::fs;
use std::path::Path; use std::path::Path;
use prometeu_abi::virtual_machine::{Value, VmFault}; use prometeu_abi::virtual_machine::{Value, VmFault};
use prometeu_hardware::hardware::Hardware;
use prometeu_hardware_contract::{HostContext, HostReturn, NativeInterface}; use prometeu_hardware_contract::{HostContext, HostReturn, NativeInterface};
use prometeu_vm::{LogicalFrameEndingReason, VirtualMachine}; use prometeu_vm::{LogicalFrameEndingReason, VirtualMachine};

View File

@ -5,7 +5,6 @@ edition = "2024"
license.workspace = true license.workspace = true
[dependencies] [dependencies]
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.149" serde_json = "1.0.149"
prometeu-vm = { path = "../prometeu-vm" } prometeu-vm = { path = "../prometeu-vm" }
prometeu-bytecode = { path = "../prometeu-bytecode" } prometeu-bytecode = { path = "../prometeu-bytecode" }
@ -13,4 +12,4 @@ prometeu-abi = { path = "../prometeu-abi" }
prometeu-hardware-contract = { path = "../prometeu-hardware-contract" } prometeu-hardware-contract = { path = "../prometeu-hardware-contract" }
[dev-dependencies] [dev-dependencies]
prometeu-core = { path = "../prometeu-core" } prometeu-hardware = { path = "../prometeu-hardware" }

View File

@ -415,11 +415,11 @@ impl PrometeuOS {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use prometeu_hardware::hardware::Hardware;
use prometeu_abi::virtual_machine::Value; use prometeu_abi::virtual_machine::Value;
use prometeu_hardware_contract::{HostReturn, InputSignals}; use prometeu_hardware_contract::{HostReturn, InputSignals};
use super::*; use super::*;
use prometeu_abi::model::{AppMode, Cartridge}; 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> { 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(); let args_count = Syscall::from_u32(id).expect(&format!("Invalid syscall id: 0x{:08X}", id)).args_count();

View File

@ -14,8 +14,11 @@ dist = true
include = ["../../VERSION.txt"] include = ["../../VERSION.txt"]
[dependencies] [dependencies]
prometeu-core = { path = "../prometeu-core" } prometeu-abi = { path = "../prometeu-abi" }
prometeu-firmware = { path = "../prometeu-firmware" } 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" winit = "0.30.12"
pixels = "0.15.0" pixels = "0.15.0"
cpal = "0.15.3" cpal = "0.15.3"

View File

@ -1,9 +1,10 @@
use cpal::traits::{DeviceTrait, HostTrait, StreamTrait}; 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::traits::{Consumer, Producer, Split};
use ringbuf::HeapRb; use ringbuf::HeapRb;
use std::sync::Arc; use std::sync::Arc;
use std::time::Duration; use std::time::Duration;
use prometeu_hardware_contract::LoopMode;
pub struct HostAudio { pub struct HostAudio {
pub producer: Option<ringbuf::wrap::CachingProd<Arc<HeapRb<AudioCommand>>>>, pub producer: Option<ringbuf::wrap::CachingProd<Arc<HeapRb<AudioCommand>>>>,

View File

@ -1,4 +1,4 @@
use prometeu_core::telemetry::CertificationConfig; use prometeu_abi::telemetry::CertificationConfig;
pub fn load_cap_config(path: &str) -> Option<CertificationConfig> { pub fn load_cap_config(path: &str) -> Option<CertificationConfig> {
let content = std::fs::read_to_string(path).ok()?; let content = std::fs::read_to_string(path).ok()?;

View File

@ -1,9 +1,9 @@
use prometeu_core::debugger_protocol::*; use prometeu_abi::debugger_protocol::*;
use prometeu_firmware::{BootTarget, Firmware}; use prometeu_firmware::{BootTarget, Firmware};
use prometeu_core::abi::model::CartridgeLoader; use prometeu_abi::model::CartridgeLoader;
use prometeu_core::Hardware;
use std::io::{Read, Write}; use std::io::{Read, Write};
use std::net::{TcpListener, TcpStream}; use std::net::{TcpListener, TcpStream};
use prometeu_hardware::hardware::Hardware;
/// Host-side implementation of the PROMETEU DevTools Protocol. /// Host-side implementation of the PROMETEU DevTools Protocol.
/// ///

View File

@ -1,6 +1,6 @@
use prometeu_core::fs::{FsBackend, FsEntry, FsError};
use std::fs; use std::fs;
use std::path::PathBuf; use std::path::PathBuf;
use prometeu_kernel::fs::{FsBackend, FsEntry, FsError};
pub struct HostDirBackend { pub struct HostDirBackend {
root: PathBuf, root: PathBuf,

View File

@ -1,8 +1,8 @@
use prometeu_core::hardware::InputSignals;
use prometeu_core::Hardware;
use winit::event::{ElementState, MouseButton, WindowEvent}; use winit::event::{ElementState, MouseButton, WindowEvent};
use winit::keyboard::{KeyCode, PhysicalKey}; use winit::keyboard::{KeyCode, PhysicalKey};
use winit::window::Window; use winit::window::Window;
use prometeu_hardware::hardware::Hardware;
use prometeu_hardware_contract::InputSignals;
pub struct HostInputHandler { pub struct HostInputHandler {
pub signals: InputSignals, pub signals: InputSignals,

View File

@ -1,4 +1,4 @@
use prometeu_core::log::{LogEvent, LogLevel, LogSource}; use prometeu_abi::log::{LogEvent, LogLevel, LogSource};
pub struct HostConsoleSink { pub struct HostConsoleSink {
last_seq: Option<u64>, last_seq: Option<u64>,

View File

@ -8,7 +8,6 @@ use crate::utilities::draw_rgb565_to_rgba8;
use pixels::wgpu::PresentMode; use pixels::wgpu::PresentMode;
use pixels::{Pixels, PixelsBuilder, SurfaceTexture}; use pixels::{Pixels, PixelsBuilder, SurfaceTexture};
use prometeu_firmware::{BootTarget, Firmware}; use prometeu_firmware::{BootTarget, Firmware};
use prometeu_core::Hardware;
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use winit::application::ApplicationHandler; use winit::application::ApplicationHandler;
use winit::dpi::LogicalSize; use winit::dpi::LogicalSize;
@ -16,8 +15,10 @@ use winit::event::{ElementState, WindowEvent};
use winit::event_loop::{ActiveEventLoop, ControlFlow}; use winit::event_loop::{ActiveEventLoop, ControlFlow};
use winit::keyboard::{KeyCode, PhysicalKey}; use winit::keyboard::{KeyCode, PhysicalKey};
use winit::window::{Window, WindowAttributes, WindowId}; use winit::window::{Window, WindowAttributes, WindowId};
use prometeu_abi::model::Color;
use prometeu_core::telemetry::CertificationConfig; use prometeu_abi::telemetry::CertificationConfig;
use prometeu_hardware::hardware::Hardware;
use prometeu_hardware::AudioCommand;
/// The Desktop implementation of the PROMETEU Runtime. /// The Desktop implementation of the PROMETEU Runtime.
/// ///
@ -124,9 +125,9 @@ impl HostRunner {
fn display_dbg_overlay(&mut self) { fn display_dbg_overlay(&mut self) {
let tel = &self.firmware.os.telemetry_last; let tel = &self.firmware.os.telemetry_last;
let color_text = prometeu_core::model::Color::WHITE; let color_text = Color::WHITE;
let color_bg = prometeu_core::model::Color::INDIGO; // Dark blue to stand out let color_bg = Color::INDIGO; // Dark blue to stand out
let color_warn = prometeu_core::model::Color::RED; let color_warn = Color::RED;
self.hardware.gfx.fill_rect(5, 5, 175, 100, color_bg); 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); 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). // 2. Maintain filesystem connection if it was lost (e.g., directory removed).
if let Some(root) = &self.fs_root { 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 matches!(self.firmware.os.fs_state, FsState::Unmounted | FsState::Error(_)) {
if std::path::Path::new(root).exists() { if std::path::Path::new(root).exists() {
let backend = HostDirBackend::new(root); let backend = HostDirBackend::new(root);
@ -298,9 +299,9 @@ impl ApplicationHandler for HostRunner {
if is_paused != self.last_paused_state { if is_paused != self.last_paused_state {
self.last_paused_state = is_paused; self.last_paused_state = is_paused;
let cmd = if is_paused { let cmd = if is_paused {
prometeu_core::hardware::AudioCommand::MasterPause AudioCommand::MasterPause
} else { } else {
prometeu_core::hardware::AudioCommand::MasterResume AudioCommand::MasterResume
}; };
self.hardware.audio.commands.push(cmd); self.hardware.audio.commands.push(cmd);
} }
@ -343,10 +344,10 @@ impl ApplicationHandler for HostRunner {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use prometeu_core::debugger_protocol::DEVTOOLS_PROTOCOL_VERSION;
use prometeu_firmware::BootTarget; use prometeu_firmware::BootTarget;
use std::io::{Read, Write}; use std::io::{Read, Write};
use std::net::TcpStream; use std::net::TcpStream;
use prometeu_abi::debugger_protocol::DEVTOOLS_PROTOCOL_VERSION;
#[test] #[test]
fn test_debug_port_opens() { fn test_debug_port_opens() {

View File

@ -1,7 +1,7 @@
use prometeu_firmware::Firmware; use prometeu_firmware::Firmware;
use prometeu_core::Hardware;
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use winit::window::Window; use winit::window::Window;
use prometeu_hardware::hardware::Hardware;
pub struct HostStats { pub struct HostStats {
pub last_stats_update: Instant, pub last_stats_update: Instant,