first commit
This commit is contained in:
commit
b78ccbc62d
48
.gitignore
vendored
Normal file
48
.gitignore
vendored
Normal file
@ -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.*
|
||||
|
||||
15
Cargo.lock
generated
Normal file
15
Cargo.lock
generated
Normal file
@ -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"
|
||||
7
Cargo.toml
Normal file
7
Cargo.toml
Normal file
@ -0,0 +1,7 @@
|
||||
[workspace]
|
||||
members = [
|
||||
"crates/core",
|
||||
"crates/host_desktop",
|
||||
"crates/cart_demo",
|
||||
]
|
||||
resolver = "2"
|
||||
143
README.md
Normal file
143
README.md
Normal file
@ -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.
|
||||
|
||||
6
crates/cart_demo/Cargo.toml
Normal file
6
crates/cart_demo/Cargo.toml
Normal file
@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "cart_demo"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
14
crates/cart_demo/src/lib.rs
Normal file
14
crates/cart_demo/src/lib.rs
Normal file
@ -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);
|
||||
}
|
||||
}
|
||||
6
crates/core/Cargo.toml
Normal file
6
crates/core/Cargo.toml
Normal file
@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "core"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
14
crates/core/src/lib.rs
Normal file
14
crates/core/src/lib.rs
Normal file
@ -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);
|
||||
}
|
||||
}
|
||||
6
crates/host_desktop/Cargo.toml
Normal file
6
crates/host_desktop/Cargo.toml
Normal file
@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "host_desktop"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
3
crates/host_desktop/src/main.rs
Normal file
3
crates/host_desktop/src/main.rs
Normal file
@ -0,0 +1,3 @@
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
}
|
||||
3
rust-toolchain.toml
Normal file
3
rust-toolchain.toml
Normal file
@ -0,0 +1,3 @@
|
||||
[toolchain]
|
||||
channel = "stable"
|
||||
components = ["rustfmt", "clippy"]
|
||||
Loading…
x
Reference in New Issue
Block a user