Skip to content

🎼 Support Amiga — Autostart, multi-disques et intĂ©gration vAmigaWeb #13

Description

@aciderix

🎼 Support Amiga — Autostart, multi-disques et intĂ©gration vAmigaWeb

Contexte

Le repo dispose déjà d'un packer Amiga dédié (packers/amiga/) basé sur vAmigaWeb (émulateur WASM natif), distinct du packer universel (EmulatorJS). Ce packer fonctionne mais utilise des scripts per-game (ex: Jimmy Willburne). L'objectif est de rendre le support Amiga générique et automatisé.

État actuel

Packer Amiga existant (packers/amiga/)

Fichier RĂŽle
amiga-packer.md Documentation
pack_jimmy.py Script de packing spécifique à Jimmy Willburne
template_amiga_1disk.html Template HTML pour jeux 1 disque
template_amiga_2disks.html Template HTML pour jeux 2 disques
vAmiga.js / vAmiga.wasm Émulateur vAmigaWeb compilĂ©

Pourquoi vAmigaWeb et pas EmulatorJS/puae ?

Aspect EmulatorJS (puae) vAmigaWeb
Multi-disques ❌ CassĂ© — TypeError dans emulator.min.js, M3U non supportĂ© ✅ DF0-DF3 prĂ©-chargĂ©s
Kickstart ProblÚme de distribution (copyright) Embarqué dans le HTML
Autostart Pas de core_option fiable ✅ Boot automatique depuis DF0
Taille HTML ~1-2 MB ~5-10 MB (WASM complet)
Qualité émulation Correcte (libretro) TrÚs bonne (cycle-exact)

Conclusion : vAmigaWeb est le bon choix pour l'Amiga dans ce projet.


Investigation : mécanisme d'autostart

Analyse des disquettes Jimmy Willburne

Analyse réalisée sur les 3 ADF originaux du jeu Jimmy Willburne :

Disk 1 — Original (jimmy_disk1.adf)

Fichiers Ă  la racine:
  Jimmy                    FILE (386708 bytes)  ← exĂ©cutable du jeu
  Jimmy.info               FILE (7231 bytes)    ← icîne Workbench
  Info_Jimmy               FILE (6537 bytes)
  Data1                    FILE (375341 bytes)  ← donnĂ©es
  Sauvegarde.JW            FILE (3680 bytes)
  + C/, Devs/, Fonts/, Libs/, S/

S/startup-sequence (14 bytes):
  Loadwb
  endcli

→ Charge le Workbench (bureau Amiga). L'utilisateur doit manuellement double-cliquer sur Jimmy.info.

Disk 3 — Intro (jimmy_disk3.adf)

Fichiers Ă  la racine:
  Intro_Jimmy              FILE (22268 bytes)
  SetChipRev               FILE (8344 bytes)
  Data3                    FILE (329262 bytes)

s/startup-sequence (12 bytes):
  intro_jimmy

→ Lance l'intro directement (autostart natif).

Disk 2 — DonnĂ©es (jimmy_disk2.adf)

  • Disque de donnĂ©es pur, label "Jimmy_Disk_222"
  • Pas de startup-sequence

La modification pour l'autostart

Le fichier jimmy_disk1_mod.adf dans le repo est une version modifiĂ©e du disk 1 oĂč la S/startup-sequence a Ă©tĂ© changĂ©e de :

Loadwb
endcli

en :

Jimmy

→ Le jeu se lance directement au boot sans passer par le Workbench.

Mécanisme multi-disques

Le packer vAmigaWeb charge les disques dans DF0 + DF1 avant le boot :

floppy_drive_count = 2
DF0 ← disk1 (boot)
DF1 ← disk2 (donnĂ©es)

Les deux disques sont insĂ©rĂ©s avant le boot → pas de swap nĂ©cessaire. L'Amiga voit les 2 drives directement. Extensible Ă  DF0-DF3 pour ≀4 disques.


Problématique : automatiser l'autostart

Chaque jeu Amiga a un exécutable différent (Jimmy, Turrican, Xenon2, etc.). Comment détecter automatiquement quel programme lancer ?

Catégories de jeux Amiga

Catégorie Autostart Patchable ? % estimé
Trackloaders ✅ Boot direct (bootblock custom, pas de filesystem) Non nĂ©cessaire ~30%
AmigaDOS — startup lance le jeu ✅ DĂ©jĂ  autostart Non nĂ©cessaire ~15%
AmigaDOS — Loadwb/endcli ❌ Charge Workbench ✅ Oui — patcher startup-sequence ~35%
WHDLoad ⚠ NĂ©cessite slave + assigns đŸ”¶ Complexe ~15%
Multi-exe (intro + jeu) ⚠ Choix nĂ©cessaire đŸ”¶ Moyen ~5%

Stratégie de détection automatique

Utilisateur charge un .adf
    ↓
Parser le filesystem AmigaDOS
    ↓
├── Pas de filesystem (trackloader)
│   → Pas de patch, boot direct (fonctionne tout seul)
│
├── Startup-sequence lance dĂ©jĂ  le jeu
│   → Pas besoin de patcher, on garde tel quel
│
├── Startup-sequence = Loadwb/endcli (ou vide)
│   → DĂ©tection heuristique de l'exĂ©cutable :
│   │
│   ├── 1. Chercher le plus gros fichier à la racine
│   │    (exclure C/, Libs/, Devs/, Fonts/, S/, *.info, *.font)
│   │
│   ├── 2. Chercher les .info Ă  la racine → nom sans .info = exĂ©cutable
│   │
│   ├── 3. Si trouvĂ© → proposer "Lancer [NomExe] au boot ?"
│   │
│   └── 4. Si pas trouvĂ© → champ manuel

Heuristiques détaillées

  1. Lire la startup-sequence existante — si elle lance dĂ©jĂ  quelque chose (pas Loadwb/endcli/echo), on la garde
  2. Plus gros fichier exĂ©cutable Ă  la racine — exclure les rĂ©pertoires systĂšme (C/, Libs/, Devs/, Fonts/, S/) et les fichiers non-exe (.info, .font, donnĂ©es < 10KB)
  3. Fichiers .info Ă  la racine — un .info correspond souvent Ă  un exĂ©cutable du mĂȘme nom
  4. Fallback — champ texte pour que l'utilisateur spĂ©cifie manuellement

Exemple avec Jimmy Willburne :

  • Jimmy = 386 KB (plus gros fichier racine) ✅
  • Jimmy.info existe → confirme que Jimmy est l'exĂ©cutable ✅
  • DĂ©tection automatique rĂ©ussie

Proposition d'implémentation

Phase 1 — Packer Amiga gĂ©nĂ©rique (single-disk)

  • CrĂ©er pack_amiga.py gĂ©nĂ©rique (remplacer pack_jimmy.py)
  • Parser les ADF en Python (filesystem AmigaDOS)
  • DĂ©tection automatique de l'exĂ©cutable principal
  • Patcher la S/startup-sequence dans l'ADF si nĂ©cessaire
  • Champ optionnel "ExĂ©cutable Amiga" si la dĂ©tection Ă©choue
  • Embarquer le Kickstart 1.3 (A500) par dĂ©faut
  • Template HTML single-disk existant

Phase 2 — Multi-disques

  • Support 2-4 disques (DF0-DF3)
  • Interface pour uploader plusieurs ADF
  • SĂ©lection du disque de boot
  • Template HTML multi-disk existant

Phase 3 — IntĂ©gration packer web (optionnel)

  • Ajouter l'option Amiga dans pack_game_fr.html / pack_game_en.html
  • Ou garder le packer Amiga sĂ©parĂ© (la taille WASM ~5MB rend l'intĂ©gration lourde)

Phase 4 — Cas avancĂ©s

  • Support WHDLoad (.lha) — nĂ©cessite AROS ou vrai Kickstart
  • DĂ©tection du modĂšle Amiga requis (A500/A1200) via les donnĂ©es du jeu
  • Gestion des Assign nĂ©cessaires

Kickstart / BIOS

Kickstart ModĂšle Usage
kick13.A500 (256 KB) Amiga 500 ~80% des jeux (la majorité)
kick20.A500 Amiga 500+ Quelques jeux
kick31.A1200 Amiga 1200 Jeux AGA (graphismes avancés)

Note lĂ©gale : Les Kickstart ROM sont sous copyright Cloanto/Amiga Inc. Ils ne peuvent pas ĂȘtre distribuĂ©s librement. Options :

  1. L'utilisateur fournit son propre Kickstart (via --bios ou upload dans le packer web)
  2. Le Kickstart est embarqué dans le HTML par l'utilisateur au moment du packing (pas distribué dans le repo)
  3. Fallback AROS (open-source) — compatibilitĂ© ~60%

Le packer actuel (packers/amiga/) embarque déjà kick13.A500 dans les templates.


Fichiers de référence

  • Packer actuel : packers/amiga/pack_jimmy.py
  • Templates : packers/amiga/template_amiga_1disk.html, template_amiga_2disks.html
  • vAmigaWeb : packers/amiga/vAmiga.js, vAmiga.wasm
  • Packer universel : packers/universal/pack_game.py (Amiga = core puae, mais pas recommandĂ©)
  • ROMs test : jimmy_disk1.adf, jimmy_disk1_mod.adf, jimmy_disk2.adf, jimmy_disk3.adf

Liens utiles

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions