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