From 6782c543542a03c500a1ba4d8f37e27e75f0d4e4 Mon Sep 17 00:00:00 2001 From: bQUARKz Date: Fri, 9 Jan 2026 09:26:05 +0000 Subject: [PATCH] first commit --- .gitignore | 48 +++++++++++ Cargo.lock | 15 ++++ Cargo.toml | 7 ++ README.md | 143 ++++++++++++++++++++++++++++++++ crates/cart_demo/Cargo.toml | 6 ++ crates/cart_demo/src/lib.rs | 14 ++++ crates/core/Cargo.toml | 6 ++ crates/core/src/lib.rs | 14 ++++ crates/host_desktop/Cargo.toml | 6 ++ crates/host_desktop/src/main.rs | 3 + rust-toolchain.toml | 3 + 11 files changed, 265 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 README.md create mode 100644 crates/cart_demo/Cargo.toml create mode 100644 crates/cart_demo/src/lib.rs create mode 100644 crates/core/Cargo.toml create mode 100644 crates/core/src/lib.rs create mode 100644 crates/host_desktop/Cargo.toml create mode 100644 crates/host_desktop/src/main.rs create mode 100644 rust-toolchain.toml diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..cbee5a1b --- /dev/null +++ b/.gitignore @@ -0,0 +1,48 @@ +# ===== Rust / Cargo ===== +/target/ +**/target/ + +# Cargo lock +# (descomente se este NÃO for um binário final e você não quiser versionar o lock) +# Cargo.lock + +# ===== IDEs ===== +# RustRover / IntelliJ +.idea/ +*.iml + +# VS Code +.vscode/ + +# ===== OS ===== +# macOS +.DS_Store +.AppleDouble +.LSOverride + +# Windows +Thumbs.db +ehthumbs.db + +# ===== Logs ===== +*.log + +# ===== Temporary / Backup ===== +*~ +*.swp +*.swo + +# ===== Coverage / profiling ===== +*.prof +*.gcda +*.gcno +*.lcov + +# ===== Rustfmt / Clippy caches (if any) ===== +.rustfmt.toml.bak + + +# Local env +.env +.env.* + diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 00000000..1479fd17 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,15 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "cart_demo" +version = "0.1.0" + +[[package]] +name = "core" +version = "0.1.0" + +[[package]] +name = "host_desktop" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 00000000..f273094a --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,7 @@ +[workspace] +members = [ + "crates/core", + "crates/host_desktop", + "crates/cart_demo", +] +resolver = "2" diff --git a/README.md b/README.md new file mode 100644 index 00000000..68c833be --- /dev/null +++ b/README.md @@ -0,0 +1,143 @@ +# PROMETEU Runtime + +PROMETEU é um **runtime educacional e experimental** inspirado em consoles clássicos, +com foco em **ensinar programação, arquitetura de sistemas e conceitos de hardware +através de software**. + +Este repositório contém o **runtime do PROMETEU**, implementado em Rust, responsável por: + +- simular um “hardware lógico” simples +- executar programas (futuros cartuchos) em um loop determinístico +- abstrair plataformas modernas (desktop, mobile, etc.) de forma consistente + +> PROMETEU é uma máquina virtual simples, explícita e didática. + +--- + +## 🎯 Objetivos do Runtime + +- Executar um loop fixo (60 Hz) +- Manter um framebuffer de baixa resolução (estilo console) +- Fornecer periféricos simples e determinísticos: + - GFX (framebuffer + double buffer) + - INPUT (D-Pad, botões) + - TOUCH (ponteiro absoluto, single-touch) +- Garantir **portabilidade total** entre plataformas +- Servir como base para ensino, game jams e experimentação + +--- + +## 🧠 Filosofia de Design + +- **Sem magia**: tudo é explícito +- **Sem heurística implícita**: o runtime não “adivinha intenções” +- **Determinístico**: mesmo input → mesmo resultado +- **Hardware-first**: APIs modelam periféricos, não frameworks modernos +- **Portável por definição**: se não funciona em todas as plataformas, não existe + +--- + +## 📦 Estrutura do Projeto (Monorepo) + +Este repositório usa um **Cargo Workspace** (monorepo): + +``` +runtime/ + Cargo.toml # Workspace root + rust-toolchain.toml # Versão do Rust (fixa) + crates/ + core/ # PROMETEU Core (hardware lógico) + host_desktop/ # Host desktop (janela, input real, present) + cart_demo/ # Cartucho/demo hardcoded (temporário) +``` + +### crates/core +Contém o **núcleo do PROMETEU**: +- loop lógico +- periféricos +- framebuffer +- nenhuma dependência de sistema operacional + +### crates/host_desktop +Implementação de host para desktop: +- cria janela +- traduz teclado/mouse/touch do SO para o core +- apresenta o framebuffer na tela + +### crates/cart_demo +Código de demonstração hardcoded. +Será substituído futuramente por: +- cartuchos +- bytecode +- scripts + +--- + +## 🖥️ Plataformas + +Atualmente: +- Desktop (primeiro alvo) + +Planejado: +- Mobile +- Steam Deck +- Hardware dedicado (experimental, longo prazo) + +--- + +## 🛠️ Requisitos + +- Rust (via `rustup`) +- Toolchain definido em `rust-toolchain.toml` + +Instalação do Rust: + +```bash +rustup-init +``` + +--- + +## ▶️ Como rodar + +Na raiz do repositório: + +```bash +cargo build +cargo run -p host_desktop +``` + +No início, o host apenas valida: +- loop 60 Hz +- execução do core +- estrutura do runtime + +--- + +## 🚧 Status do Projeto + +⚠️ **Em estágio inicial (bootstrap)** + +O foco atual é: +- validar arquitetura +- validar loop e periféricos +- manter simplicidade máxima + +Nada aqui deve ser considerado API estável ainda. + +--- + +## 📜 Licença + +A definir. + +--- + +## ✨ Nota Final + +PROMETEU é tanto um projeto técnico quanto pedagógico. + +A ideia não é esconder complexidade, +mas **expor a complexidade certa**, no nível certo, +para que ela possa ser entendida, estudada e explorada. + diff --git a/crates/cart_demo/Cargo.toml b/crates/cart_demo/Cargo.toml new file mode 100644 index 00000000..7337faaf --- /dev/null +++ b/crates/cart_demo/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "cart_demo" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/crates/cart_demo/src/lib.rs b/crates/cart_demo/src/lib.rs new file mode 100644 index 00000000..b93cf3ff --- /dev/null +++ b/crates/cart_demo/src/lib.rs @@ -0,0 +1,14 @@ +pub fn add(left: u64, right: u64) -> u64 { + left + right +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn it_works() { + let result = add(2, 2); + assert_eq!(result, 4); + } +} diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml new file mode 100644 index 00000000..143436c4 --- /dev/null +++ b/crates/core/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "core" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs new file mode 100644 index 00000000..b93cf3ff --- /dev/null +++ b/crates/core/src/lib.rs @@ -0,0 +1,14 @@ +pub fn add(left: u64, right: u64) -> u64 { + left + right +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn it_works() { + let result = add(2, 2); + assert_eq!(result, 4); + } +} diff --git a/crates/host_desktop/Cargo.toml b/crates/host_desktop/Cargo.toml new file mode 100644 index 00000000..d0dd8bde --- /dev/null +++ b/crates/host_desktop/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "host_desktop" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/crates/host_desktop/src/main.rs b/crates/host_desktop/src/main.rs new file mode 100644 index 00000000..e7a11a96 --- /dev/null +++ b/crates/host_desktop/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 00000000..73cb934d --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,3 @@ +[toolchain] +channel = "stable" +components = ["rustfmt", "clippy"]