commit 3da5302ad38c51745e3a88f83f8ef4b3560d5ed5
parent eecc137b8f984d7e02587b5ca93c069ae5b5fe2a
Author: Jean Schurger <jean@schurger.org>
Date: Wed, 4 Nov 2026 19:02:17 -0500
EXELTEL : la bibliothèque de programmes marche aussi (rétrocompat EXL 100)
L'EXELTEL lit les cartouches et cassettes EXL 100 (elles répondent en page 6
au démarrage). On n'masque donc plus le bouton « Choisir un programme » : la
modale fonctionne, les programmes sont lancés en --game exeltel. Sans programme
choisi, l'EXELTEL démarre sur son menu télématique. Vérifié : Capitaine Menkar
(cartouche) et Donkey Kong (cassette, auto-chargement) tournent sur l'EXELTEL.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9
Diffstat:
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/web/shell.html.in b/web/shell.html.in
@@ -233,6 +233,12 @@
const $ = (id) => document.getElementById(id);
const statusEl = $('status'), outputEl = $('output'), canvas = $('canvas');
const typeSel = $('mtype'), driverSel = $('driver'), romInput = $('rom');
+ // Machine courante : EXL 100 (défaut) ou EXELTEL (terminal 64 Ko). L'EXELTEL est rétrocompatible
+ // avec les cartouches/cassettes EXL 100 (elles répondent en page 6 au démarrage), donc la
+ // bibliothèque de programmes marche aussi sur l'EXELTEL, lancée en mode exeltel.
+ const onExeltel = new URLSearchParams(location.search).get('game') === 'exeltel';
+ const gameName = onExeltel ? 'exeltel' : 'exl100';
+ const biosZip = onExeltel ? '/roms/exeltel.zip' : '/roms/exl100.zip';
let drivers = []; // [{name, title, type, aliases}] from dsp_web_list()
let waitingForRom = false; // a driver was picked and the file dialog is open
@@ -347,7 +353,7 @@
const token = ++bootToken;
markActive(value);
if (modal.open) modal.close();
- const args = ['--game', 'exl100'];
+ const args = ['--game', gameName];
let cassette = false;
if (value.startsWith('cart:')) {
args.push('--tape', '/roms/cartridges/' + value.slice(5));
@@ -355,7 +361,7 @@
args.push('--tape', '/roms/cartridges/exelbasic.bin', '--tape', '/roms/tapes/' + value.slice(5));
cassette = true;
}
- args.push('/roms/exl100.zip');
+ args.push(biosZip);
launch(args);
if (cassette) autoLoadCassette(token);
}
@@ -416,7 +422,8 @@
}
function populatePrograms() {
programsEl.innerHTML = '';
- addRow('', 'Logo Exelvision', 'aucune cartouche', '');
+ addRow('', onExeltel ? 'Menu EXELTEL' : 'Logo Exelvision',
+ onExeltel ? 'terminal télématique, sans programme' : 'aucune cartouche', '');
addGroup('Cartouches', '/roms/cartridges/titles.json', 'cart:');
addGroup('Cassettes BASIC', '/roms/tapes/titles.json', 'tape:');
}
@@ -448,16 +455,16 @@
}
// Sélecteur de machine : EXL 100 (défaut) ou EXELTEL, le terminal télématique à 64 Ko de la même
- // famille (même driver exelv). On recharge la page avec ?game=exeltel ; sur EXELTEL, la bibliothèque
- // de programmes EXL 100 (cartouches/cassettes) ne s'applique pas, on masque son bouton.
+ // famille (même driver exelv). On recharge la page avec ?game=exeltel. La bibliothèque de
+ // programmes reste offerte (l'EXELTEL lit les cartouches/cassettes EXL 100) ; sans programme choisi,
+ // l'EXELTEL démarre sur son menu télématique.
const machineSel = $('machine');
- const onExeltel = new URLSearchParams(location.search).get('game') === 'exeltel';
if (onExeltel) {
machineSel.value = 'exeltel';
- $('pick').classList.add('hidden');
document.querySelector('header .sub').textContent =
"L'EXELTEL (1986), le terminal télématique de la même famille, à processeur TMS7000 et 64 Ko : " +
- "Minitel intégré, répondeur et téléphone. Son menu s'affiche au démarrage (mode local, sans ligne).";
+ "Minitel intégré, répondeur et téléphone. Sans programme choisi, son menu s'affiche (mode local, " +
+ "sans ligne) ; il lit aussi les cartouches et cassettes EXL 100 ci-dessous.";
document.querySelector('header h1').innerHTML =
'<span class="logo">EXEL<span>TEL</span></span> dans le navigateur';
}