< [Voltar](chapter-7.md) | [SumĂĄrio](table-of-contens.md) | [Adiante](chapter-9.md) > # 📀 PerifĂ©rico MEMCARD (Sistema de save/load) ## 1. VisĂŁo Geral O **MEMCARD** Ă© o perifĂ©rico responsĂĄvel pela **persistĂȘncia explĂ­cita de dados do jogo** no PROMETEU. Ele simula o comportamento de *memory cards* clĂĄssicos (PS1, GameCube), fornecendo: - armazenamento limitado - custo explĂ­cito de I/O - controle total do jogo sobre quando salvar - portabilidade entre plataformas O MEMCARD **nĂŁo Ă© um save state**. Ele representa **dados que o prĂłprio jogo decide persistir**. --- ## 2. PrincĂ­pios de Design O perifĂ©rico MEMCARD segue os seguintes princĂ­pios: - ✅ **PersistĂȘncia explĂ­cita** (nada automĂĄtico) - ✅ **Tamanho limitado e conhecido** - ✅ **Commit obrigatĂłrio** - ✅ **Custo de tempo (ciclos) mensurĂĄvel** - ✅ **Formato estĂĄvel e documentado** - ✅ **Independente de plataforma** - ❌ Sem sistema de arquivos complexo (no v0.1) - ❌ Sem mĂșltiplos arquivos internos (no v0.1) --- ## 3. Modelo Conceitual Cada cartucho PROMETEU pode acessar **um ou mais slots de MEMCARD**, sendo o modelo padrĂŁo: - **Slot A** — principal - **Slot B** — opcional (futuro) Cada slot corresponde a **um arquivo no host**: ``` MyGame_A.mem MyGame_B.mem ``` O runtime monta esse arquivo como um **dispositivo de armazenamento persistente**. --- ## 4. Capacidade e CAP O tamanho do MEMCARD Ă© **fixo**, definido pelo perfil de execução (CAP). ### Tamanhos sugeridos | Perfil | Tamanho | | --- | --- | | JAM | 8 KB | | STANDARD | 32 KB | | ADVANCED | 128 KB | O jogo **nĂŁo pode exceder** esse tamanho. Tentativas de escrita acima do limite resultam em erro. --- ## 5. API do PerifĂ©rico (v0.1) ### 5.1 Interface LĂłgica O MEMCARD expĂ”e uma API **simples de blob Ășnico**: ``` mem.read_all() -> byte[] mem.write_all(byte[]) mem.commit() mem.clear() mem.size() -> int ``` --- ### 5.2 SemĂąntica das OperaçÔes ### `read_all()` - Retorna todo o conteĂșdo persistido - Se o cartĂŁo estiver vazio, retorna um buffer zerado - Custo em ciclos proporcional ao tamanho --- ### `write_all(bytes)` - Escreve o buffer **em memĂłria temporĂĄria** - NĂŁo persiste imediatamente - Falha se `bytes.length > mem.size()` --- ### `commit()` - Persiste os dados no dispositivo - Operação **obrigatĂłria** - Simula flush de hardware - Pode falhar (ex.: I/O, corrupção simulada) --- ### `clear()` - Zera o conteĂșdo do cartĂŁo - Requer `commit()` para persistir --- ### `size()` - Retorna a capacidade total do cartĂŁo em bytes --- ## 6. Commit ExplĂ­cito (Regra Fundamental) O PROMETEU **nĂŁo salva automaticamente**. Sem `commit()`: - dados permanecem volĂĄteis - podem ser perdidos ao encerrar o jogo - simulam desligamento abrupto de hardware 👉 Isso ensina: - flush de dados - atomicidade - risco de corrupção - custo real de persistĂȘncia --- ## 7. Custo de Execução (Ciclos) Todas as operaçÔes de MEMCARD tĂȘm custo explĂ­cito. ### Exemplo (valores ilustrativos) | Operação | Custo | | --- | --- | | read_all | 1 ciclo / 256 bytes | | write_all | 1 ciclo / 256 bytes | | commit | custo fixo + proporcional | Esses custos aparecem: - no profiler - na timeline de frame - no relatĂłrio de CAP --- ## 8. Formato do Arquivo `.mem` O arquivo de MEMCARD possui um formato simples e robusto. ### 8.1 Header | Campo | Tamanho | | --- | --- | | Magic (`PMEM`) | 4 bytes | | Version | 1 byte | | Cart ID | 8 bytes | | Payload Size | 4 bytes | | CRC32 | 4 bytes | --- ### 8.2 Payload - Buffer binĂĄrio definido pelo jogo - Tamanho fixo - ConteĂșdo interpretado apenas pelo jogo --- ## 9. Integridade e Segurança - CRC valida corrupção - Cart ID impede uso de save errado - VersĂŁo permite evolução futura do formato - Runtime pode: - avisar corrupção - permitir reset do cartĂŁo --- ## 10. Integração com o Editor / GUI A ferramenta principal pode fornecer um **Memory Card Manager**: - criar/resetar cartĂŁo - ver tamanho e uso - importar/exportar `.mem` - visualizar Ășltimos commits - associar cartĂ”es a projetos Nenhuma dessas operaçÔes altera o runtime. --- ## 11. EvoluçÔes Planejadas (fora do v0.1) - API de blocos (`read_block`, `write_block`) - mĂșltiplos slots internos - wear simulation - versionamento de saves - criptografia opcional (educacional) --- ## 12. Resumo O perifĂ©rico MEMCARD no PROMETEU: - simula hardware real - força decisĂ”es de design - ensina persistĂȘncia corretamente - Ă© simples de usar - Ă© difĂ­cil de abusar - cresce sem quebrar compatibilidade < [Voltar](chapter-7.md) | [SumĂĄrio](table-of-contens.md) | [Adiante](chapter-9.md) >