Create Simulator target scaffold

This commit is contained in:
Lukas Höppner
2026-08-09 16:29:38 +02:00
parent 2f48b3efc8
commit 7ea52cb96a
14 changed files with 275 additions and 101 deletions
+18 -2
View File
@@ -4,7 +4,7 @@
* **Project Name:** Nova64
* **Architecture Model:** Dual-target modular system featuring a native execution core (`nova64_core`) running on top of **FreeRTOS**.
* **Target Microcontroller:** **ESP32-P4** (RISC-V architecture) driving local display output, audio generation, custom expansion bus, and network interfaces.
* **Desktop Simulator / Tooling:** Native C core compiled as a shared library (`.dll` / `.so`) and driven by a **C# Host Application** via P/Invoke. Hardware dependencies are injected at runtime via function pointer callbacks (Dependency Injection pattern).
* **Desktop Simulator / Tooling:** Native C core compiled as a shared library (`.dll` / `.so`) and driven by a **Desktop Host Application** via FFI. Hardware dependencies are injected at runtime via function pointer callbacks (Dependency Injection pattern).
* **Central Unit Input Constraint:** The base display unit **contains no (or only limited) built-in physical input controls** (no onboard buttons or D-pad). Control inputs are provided externally via connected cartridges, expansion modules, network interfaces, or desktop simulator inputs.
---
@@ -21,6 +21,22 @@
---
## 2.1 Storage & Volume Model
* **Internal System Store:** A dedicated internal non-removable storage volume holds the app launcher, system UI assets, status bar content, and core system resources.
* The launcher and persistent status bar always load from internal storage so they remain available even when no cartridge is present.
* This internal store is the trusted root for firmware updates, system apps, and a shared application bundle repository.
* **External Cartridge Volumes:** Each cartridge slot can expose storage as a removable volume, such as SDMMC media, flash-backed smart cartridge storage, or USB mass-storage from an attached peripheral.
* Cartridge insertion is detected dynamically; the runtime exposes each detected volume through the storage manager.
* Volumes are treated as detachable devices separate from the internal system store.
* **Namespace:** A custom volume namespace is preferred for clarity and platform identity.
* Example mapping: `SYS:` = internal system store, `EXA:` = cartridge slot 0, `EXB:` = cartridge slot 1, etc.
* **Access Semantics:**
* The app launcher and status overlay use the internal volume as their primary source.
* WASM applications may access external cartridge volumes via the exposed volume API, with explicit slot or volume identifier selection.
* Cartridges may support read-only system assets, writable data partitions, or secure application storage depending on their hardware capabilities.
---
## 3. Networking Interface (10BASE-T1L)
* **Protocol:** **10BASE-T1L** (Single-Pair Ethernet) for long-distance, industrial-grade point-to-point and networked communication between decks/modules.
* **Physical Cabling:** routed through **audio-style connectors/cables** (e.g., 3.5mm/6.3mm jacks) to fit the cyberpunk aesthetic while maintaining robust single-pair data transmission.
@@ -31,7 +47,7 @@
## 4. WASM Application Runtime (WAMR)
* **Runtime Engine:** **WAMR (WebAssembly Micro Runtime)** embedded directly into `nova64_core`.
* **Execution Model:** Sandboxed application layer for dynamic software, games, and cartridge binaries.
* **Cross-Platform Parity:** Uncompiled WASM bytecode runs identically on both the physical ESP32-P4 hardware and the C# Desktop Simulator.
* **Cross-Platform Parity:** Uncompiled WASM bytecode runs identically on both the physical ESP32-P4 hardware and the Desktop Simulator.
* **Host Bindings:** WAMR exports host functions bound to the internal `nova64_core` APIs, allowing sandboxed WASM applications to draw to the framebuffer, play audio, and read cartridge storage safely.
---