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

  1. Zero valeur en dur : toute constante machine provient du JSON
  2. Code en francais : variables, fonctions, commentaires
  3. Tests systematiques : chaque module a ses tests unitaires
  4. Validation au chargement : les definitions sont verifiees a l'instanciation
  5. Chevauchement memoire : supporte via le champ chevauchable