Architecture
Decision : IDE agnostique machine
Toute specificite machine est decrite dans des fichiers de definition externes (JSON). Le code de l'IDE manipule exclusivement des abstractions generiques. Ajouter une machine = ajouter un fichier JSON.
- Aucun nom de machine (Oric, ZX81, etc.) n'apparait dans le code source Go
- Les interfaces et structures sont concues pour le cas general
- Le validateur verifie la coherence des definitions au chargement
Choix de Go
- Infrastructure de tests integree (
go test) - Gestion native du JSON
- Cross-compilation triviale (Linux, macOS, Windows)
- Modules et dependances integres (
go mod)
Structure des modules
OricForge/
├── cmd/oricforge/ Point d'entree CLI
├── internal/
│ ├── forgecore/ Abstractions generiques
│ │ ├── cpu.go DefinitionCPU, Instruction, Registre, Flag
│ │ ├── memoire.go DefinitionMemoire, ZoneMemoire
│ │ ├── video.go DefinitionVideo, ModeVideo, Couleur
│ │ ├── son.go DefinitionSon, CanalAudio
│ │ ├── peripherique.go DefinitionPeripherique
│ │ ├── format.go DefinitionFormat, TokenBASIC
│ │ └── machine.go DefinitionMachine (racine)
│ └── forgemachine/ Chargement et validation
│ └── chargeur.go ChargerMachine, ValiderMachine
├── machines/ Definitions machine (JSON)
└── docs/
Flux de donnees
Fichier JSON (machines/oric1.json)
│
▼
forgemachine.ChargerMachine() ── lecture + parsing JSON
│
▼
forgemachine.ValiderMachine() ── verification coherence
│
▼
forgecore.DefinitionMachine ── structure Go instanciee
│
├──▶ DefinitionCPU (instructions, registres, flags)
├──▶ DefinitionMemoire (zones, banking, permissions)
├──▶ DefinitionVideo (modes, palette, charsets)
├──▶ DefinitionSon (canaux, registres, enveloppes)
├──▶ DefinitionBASIC (tokens, version)
└──▶ DefinitionFormat (TAP, DSK, etc.)
Regles de developpement
- Zero valeur en dur : toute constante machine provient du JSON
- Code en francais : variables, fonctions, commentaires
- Tests systematiques : chaque module a ses tests unitaires
- Validation au chargement : les definitions sont verifiees a l'instanciation
- Chevauchement memoire : supporte via le champ
chevauchable