exl100

Émulateur Exelvision EXL 100 (1984) dans le navigateur : dsp-cpp en WebAssembly, cartouches et cassettes BASIC
git clone https://git.schurger.org/exl100.git
Log | Files | Refs | README

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:
Mweb/shell.html.in | 23+++++++++++++++--------
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'; }