<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>exl100, branch HEAD</title>
<subtitle>Émulateur Exelvision EXL 100 (1984) dans le navigateur : dsp-cpp en WebAssembly, cartouches et cassettes BASIC
</subtitle>
<entry>
<id>903d30aceaab7ef0bb8d8e10f92dc125519be155</id>
<published>2026-11-05T21:56:36Z</published>
<updated>2026-11-05T21:56:36Z</updated>
<title>Aide : bibliothèque, Exelmémoire, Disquette et clavier mis à jour ; section « Limites actuelles »</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/903d30aceaab7ef0bb8d8e10f92dc125519be155.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 903d30aceaab7ef0bb8d8e10f92dc125519be155
parent 83ae722193a12c86417efa52775fa090e15feb11
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 16:56:36 -0500

Aide : bibliothèque, Exelmémoire, Disquette et clavier mis à jour ; section « Limites actuelles »

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>83ae722193a12c86417efa52775fa090e15feb11</id>
<published>2026-11-05T21:50:49Z</published>
<updated>2026-11-05T21:50:49Z</updated>
<title>Faces : la barre nomme la face en place (📂 Titre — Face A) et le bouton d&#39;échange dit « ⏏ Insérer Face B »</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/83ae722193a12c86417efa52775fa090e15feb11.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 83ae722193a12c86417efa52775fa090e15feb11
parent 3f982c043647492b54833ee96aded3b320eb558f
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 16:50:49 -0500

Faces : la barre nomme la face en place (📂 Titre — Face A) et le bouton d&#39;échange dit « ⏏ Insérer Face B »

Le bouton 📼 Face B se lisait comme un état (« la face B est chargée ») alors qu&#39;il proposait l&#39;insertion.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>3f982c043647492b54833ee96aded3b320eb558f</id>
<published>2026-11-05T21:30:20Z</published>
<updated>2026-11-05T21:30:20Z</updated>
<title>Bibliothèque : plus de lignes surlignées à tort quand aucun programme n&#39;est actif</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/3f982c043647492b54833ee96aded3b320eb558f.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 3f982c043647492b54833ee96aded3b320eb558f
parent 1e850bb69f183c92f85215c1b54c98df59d11fa9
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 16:30:20 -0500

Bibliothèque : plus de lignes surlignées à tort quand aucun programme n&#39;est actif

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>1e850bb69f183c92f85215c1b54c98df59d11fa9</id>
<published>2026-11-05T21:30:06Z</published>
<updated>2026-11-05T21:30:06Z</updated>
<title>Bibliothèque : une ligne par programme à plusieurs cassettes, faces en boutons en ligne</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/1e850bb69f183c92f85215c1b54c98df59d11fa9.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 1e850bb69f183c92f85215c1b54c98df59d11fa9
parent c1ebc5406989d2568924320349ef79851c1f54b7
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 16:30:06 -0500

Bibliothèque : une ligne par programme à plusieurs cassettes, faces en boutons en ligne

Le lien des faces porte un titre de groupe (« Arcade », « Initiation à l&#39;Exelbasic »…) ; la liste n&#39;affiche
plus « Titre (1) », « Titre (2) » mais une ligne avec un bouton par face/cassette (démarre dessus). Le bouton
de la barre reprend le titre seul (il concaténait le badge et « ⏏ insérer »). Recherche sur les titres des
faces.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>c1ebc5406989d2568924320349ef79851c1f54b7</id>
<published>2026-11-05T21:14:13Z</published>
<updated>2026-11-05T21:14:13Z</updated>
<title>Bibliothèque : le filtre trouve aussi les faces (« face b »)</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/c1ebc5406989d2568924320349ef79851c1f54b7.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit c1ebc5406989d2568924320349ef79851c1f54b7
parent b22fb3ea017057642622fb313e17c63b65f1f268
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 16:14:13 -0500

Bibliothèque : le filtre trouve aussi les faces (« face b »)

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>b22fb3ea017057642622fb313e17c63b65f1f268</id>
<published>2026-11-05T21:13:12Z</published>
<updated>2026-11-05T21:13:12Z</updated>
<title>Cassettes à plusieurs faces : liaison DCExel, badge, bouton 📼 Face B, changement de cassette à chaud</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/b22fb3ea017057642622fb313e17c63b65f1f268.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit b22fb3ea017057642622fb313e17c63b65f1f268
parent 199733e0fedfdcec0b7ccb47b9ff48bd1b0ae291
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 16:13:12 -0500

Cassettes à plusieurs faces : liaison DCExel, badge, bouton 📼 Face B, changement de cassette à chaud

get_dcexel.py --link : les archives DCExel à plusieurs .k7 (arcade-a/-b, musical-A/-B, solfege1a…, citadelle
intro/oran/irun/kran, pluriel-1/-2…) relient leurs entrées déjà importées (par CRC) via `sides` [{f, l}] dans
roms/tapes/titles.json (19 programmes). Page : badge « 2 faces : Face A / Face B » dans la bibliothèque, après
lancement des boutons 📼 dans la barre pour insérer l&#39;autre face sans redémarrer (export dsp_web_tape_load →
load_media), « ⏏ insérer » sur chaque cassette de la liste pour en changer à chaud. Test tape-sides.mjs.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>199733e0fedfdcec0b7ccb47b9ff48bd1b0ae291</id>
<published>2026-11-05T20:55:43Z</published>
<updated>2026-11-05T20:55:43Z</updated>
<title>Modales : display flex seulement ouvertes (fermées, elles restaient visibles)</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/199733e0fedfdcec0b7ccb47b9ff48bd1b0ae291.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 199733e0fedfdcec0b7ccb47b9ff48bd1b0ae291
parent 80f9591301c79d03987a5c677c933431623fd013
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 15:55:43 -0500

Modales : display flex seulement ouvertes (fermées, elles restaient visibles)

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>80f9591301c79d03987a5c677c933431623fd013</id>
<published>2026-11-05T20:51:53Z</published>
<updated>2026-11-05T20:51:53Z</updated>
<title>Modales Exelmémoire / Disquette : le corps défile, la page derrière est verrouillée</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/80f9591301c79d03987a5c677c933431623fd013.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 80f9591301c79d03987a5c677c933431623fd013
parent cbd1d1d98f22b1e12657be4c4799ea92647dcbb0
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 15:51:53 -0500

Modales Exelmémoire / Disquette : le corps défile, la page derrière est verrouillée

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>cbd1d1d98f22b1e12657be4c4799ea92647dcbb0</id>
<published>2026-11-05T20:45:34Z</published>
<updated>2026-11-05T20:45:34Z</updated>
<title>Pied de page : tout n&#39;a pas été testé, écrire à jean@schurger.org en cas de problème</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/cbd1d1d98f22b1e12657be4c4799ea92647dcbb0.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit cbd1d1d98f22b1e12657be4c4799ea92647dcbb0
parent ae631fe0726872740e0b878586f7d6f3c9dabed6
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 15:45:34 -0500

Pied de page : tout n&#39;a pas été testé, écrire à jean@schurger.org en cas de problème

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>ae631fe0726872740e0b878586f7d6f3c9dabed6</id>
<published>2026-11-05T20:44:55Z</published>
<updated>2026-11-05T20:44:55Z</updated>
<title>Modale « Disquette » : contenu de l&#39;image .fd, clic sur un programme = lancement</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/ae631fe0726872740e0b878586f7d6f3c9dabed6.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit ae631fe0726872740e0b878586f7d6f3c9dabed6
parent f1331831fe003c6d1297acfc686756f1b6cdfd4d
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 15:44:55 -0500

Modale « Disquette » : contenu de l&#39;image .fd, clic sur un programme = lancement

À chaque disquette choisie (bibliothèque ou dépôt), le répertoire EXELDOS est lu dans la page (entrées de
18 octets, FDR : enregistrements × longueur, AU) et une modale liste les fichiers ; bouton 💽 Disquette
dans la barre. Clic sur un .BAS → redémarrage sur la disquette avec ExelBASIC puis LOADRUN NOM.BAS tapé à
l&#39;invite ; .BIN → EXEC NOM puis « O » (chargeur Jester, Exelmémoire) ; .OBJ → la commande. Vérifié headless :
PING.BAS (37 fichiers listés) et KONG.BIN. Test disk-modal.mjs.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>f1331831fe003c6d1297acfc686756f1b6cdfd4d</id>
<published>2026-11-05T20:10:24Z</published>
<updated>2026-11-05T20:10:24Z</updated>
<title>Page : l&#39;émulateur capture le clavier au clic (centrage, message, plus de défilement) ; ExelBASIC inséré d&#39;office pour les disquettes .BAS</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/f1331831fe003c6d1297acfc686756f1b6cdfd4d.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit f1331831fe003c6d1297acfc686756f1b6cdfd4d
parent e4e47b5faf95b0ea96c41fec60f0e9c3513ac23f
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 15:10:24 -0500

Page : l&#39;émulateur capture le clavier au clic (centrage, message, plus de défilement) ; ExelBASIC inséré d&#39;office pour les disquettes .BAS

Clic sur l&#39;écran : focus, scrollIntoView centré, message « Le clavier est pris par l&#39;émulateur… » ; espace,
flèches, Page, Début/Fin et Tab ne font plus défiler la page tant que le canevas a le focus. Le répertoire
EXELDOS d&#39;une image .fd est lu dans la page (entrées de 18 octets à l&#39;AU 1) : des fichiers .BAS font insérer
la cartouche ExelBASIC (vérifié : LOADRUN PING.BAS lance le programme). Test focus-grab.mjs.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>e4e47b5faf95b0ea96c41fec60f0e9c3513ac23f</id>
<published>2026-11-05T19:55:18Z</published>
<updated>2026-11-05T19:55:18Z</updated>
<title>Exeldisk : l&#39;Exelmémoire reste branchée au lancement d&#39;une disquette (EXEC de Jester y charge)</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/e4e47b5faf95b0ea96c41fec60f0e9c3513ac23f.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit e4e47b5faf95b0ea96c41fec60f0e9c3513ac23f
parent 5f6e1572ab1cbb291378090c44d2dc83422ea7da
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 14:55:18 -0500

Exeldisk : l&#39;Exelmémoire reste branchée au lancement d&#39;une disquette (EXEC de Jester y charge)

Depuis l&#39;EXELTEL ou après débranchement dans la page, rechargement EXL 100 puis relance (sessionStorage
exl100.exec). Test library-disk.mjs : EXELMEM/AFTER pour répondre aux questions du programme.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>5f6e1572ab1cbb291378090c44d2dc83422ea7da</id>
<published>2026-11-05T19:48:56Z</published>
<updated>2026-11-05T19:48:56Z</updated>
<title>Exeldisk : lecteur de disquettes WD1770, EXELDOS démarre, disquettes dans la bibliothèque</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/5f6e1572ab1cbb291378090c44d2dc83422ea7da.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 5f6e1572ab1cbb291378090c44d2dc83422ea7da
parent afef40a0af426b741289ae0e89306a97987dff72
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 14:48:56 -0500

Exeldisk : lecteur de disquettes WD1770, EXELDOS démarre, disquettes dans la bibliothèque

Étape 3. D&#39;\&#39;&#39;après EXELDOS.equ du devkit Jester et le ROM d&#39;\&#39;&#39;amorçage (exeldisk_150.rom de DCExel, versionné
dans roms/) : contrôleur WD1770 derrière P64-P67 ($0140-$0143, lecture en deux temps P66/P67, DRQ sur PA.1),
verrou DSKCTL qui choisit la carte mémoire ($8000 ROM boot/CRAM, $D000 RAM DOS/COS, $0200 RAM/cartouche),
ROM 8 Ko en $8000 et en fenêtre $C800, RAM 31,5 Ko + RAM DOS 8 Ko. Image .fd = 640 Ko à plat (80 pistes,
2 faces, 16 secteurs de 256). Classe ExelDisk (exelv_disk.{h,cpp}) : seek/restore, lecture/écriture de
secteur, WRITE TRACK décodé (formatage), read address. L&#39;\&#39;&#39;Exeldisk n&#39;\&#39;&#39;est vu que si une image est montée
(--tape x.fd), sinon le logo.

Page : groupe « Disquettes (Exeldisk, EXELDOS) » et puce dans la bibliothèque (roms/disks/, ignoré),
dépôt d&#39;\&#39;&#39;une image .fd, aide « L&#39;\&#39;&#39;Exeldisk ». Vérifié headless : ExelDOS 1.4 et les six autres disquettes
amorcent (BOOT V1.5, INIBAS.SVC, EXELDOS V1.4) et DIR liste leurs fichiers ; EXEC (Jester) se lance.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>afef40a0af426b741289ae0e89306a97987dff72</id>
<published>2026-11-05T18:43:56Z</published>
<updated>2026-11-05T18:43:56Z</updated>
<title>Jeux Exelmémoire : .bkp décodé par blocs, lancement EXL 100 automatique (CALL EXEC)</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/afef40a0af426b741289ae0e89306a97987dff72.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit afef40a0af426b741289ae0e89306a97987dff72
parent 497c1defe31d3b3bdeeea70e2bcedf13fb54a3e0
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 13:43:56 -0500

Jeux Exelmémoire : .bkp décodé par blocs, lancement EXL 100 automatique (CALL EXEC)

Les sauvegardes .BKP de webmo ne sont pas un simple dump inversé : à partir de l&#39;\&#39;&#39;offset $200, 64 blocs de
258 octets ($01 $00 + 256 octets). Sans retirer les marqueurs, l&#39;\&#39;&#39;image glissait de 2 octets par bloc et
les CALL des jeux tombaient dans du texte (Kamicar : $8574 attendu, trouvé à $8500). Corrigé dans
get_cram.py et dans la zone de dépôt.

Ces programmes sont du code machine EXL 100 (ils appellent ExelBASIC et le moniteur de l&#39;\&#39;&#39;EXL 100) :
la bibliothèque les lance maintenant sur l&#39;\&#39;&#39;EXL 100 — volume dans l&#39;\&#39;&#39;Exelmémoire, ExelBASIC, puis
« CALL EXEC(entrée) » tapé automatiquement (typist partagé avec le chargement de cassette). Entrée
déduite de l&#39;\&#39;&#39;image (BR @ en $8000 = 32768, $AA puis BR = 32769) sinon des étoiles de webmo.
Les 11 volumes démarrent (vérifié headless). L&#39;\&#39;&#39;Autostart EXELTEL marche aussi (Kamicar).

Tests : cram-autostart rythmé sur les trames émulées, library-cram sur l&#39;\&#39;&#39;EXL 100, CDP_PORT.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>497c1defe31d3b3bdeeea70e2bcedf13fb54a3e0</id>
<published>2026-11-05T17:27:12Z</published>
<updated>2026-11-05T17:27:12Z</updated>
<title>Page : modale Programmes plus large (filtres sur une ligne) + croix à droite</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/497c1defe31d3b3bdeeea70e2bcedf13fb54a3e0.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 497c1defe31d3b3bdeeea70e2bcedf13fb54a3e0
parent ece27b18ee7401946a74e083d011685175ac3fb6
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 12:27:12 -0500

Page : modale Programmes plus large (filtres sur une ligne) + croix à droite

#modal élargi à min(960px, 96vw) pour que les 8 puces de filtre tiennent sur une
seule ligne. La croix de fermeture passe à droite (margin-left:auto sur .modal-head
.x), visible surtout dans la modale Exelmémoire. Test modal-shot.mjs.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>ece27b18ee7401946a74e083d011685175ac3fb6</id>
<published>2026-11-05T16:57:56Z</published>
<updated>2026-11-05T16:57:56Z</updated>
<title>Page : regrouper toutes les fonctions Exelmémoire dans une modale</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/ece27b18ee7401946a74e083d011685175ac3fb6.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit ece27b18ee7401946a74e083d011685175ac3fb6
parent 75f1acb0e01eaadf6d41cd2aeb0210d68eb1c237
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 11:57:56 -0500

Page : regrouper toutes les fonctions Exelmémoire dans une modale

La barre n&#39;a plus qu&#39;un bouton « 💾 Exelmémoire » ; la case à cocher, l&#39;explorateur
du volume, l&#39;import/export .cram et le bouton Vider passent dans une modale dédiée
(brancher/débrancher avec une note selon la machine, résumé du volume, liste des
fichiers, Importer/Exporter/Vider). L&#39;import de la modale utilise la même détection
que la zone de dépôt (.cram 16 Ko, image 64 Ko, .bkp). Explorateur rafraîchi à
l&#39;ouverture et à chaque sauvegarde. Test cram-panel.mjs mis à jour (ouvre la modale).

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>75f1acb0e01eaadf6d41cd2aeb0210d68eb1c237</id>
<published>2026-11-05T16:41:47Z</published>
<updated>2026-11-05T16:41:47Z</updated>
<title>Page : explorateur de l&#39;Exelmémoire (volume, fichiers, octets libres, bouton Vider)</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/75f1acb0e01eaadf6d41cd2aeb0210d68eb1c237.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 75f1acb0e01eaadf6d41cd2aeb0210d68eb1c237
parent f60548f5aeaa7b289dfde2efe2afe83f98afbfa4
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 11:41:47 -0500

Page : explorateur de l&#39;Exelmémoire (volume, fichiers, octets libres, bouton Vider)

Panneau repliable sous la barre, visible quand l&#39;Exelmémoire est branchée : nom du volume,
formaté ou non, octets libres, et la liste des fichiers (nom, extension, taille, longueur
d&#39;enregistrement, drapeaux, commentaire), décodée côté page d&#39;après le format CROS64 :
bloc de contrôle $BFCB-$BFE4 (bas du répertoire $BFDF:$BFE0, zone libre $BFE3:$BFE4,
libres = bas - zone libre - 5) et enregistrements contigus en descendant depuis $BFD0
(type, $FFFC, taille = $10006 - C, longueur d&#39;enregistrement, nom et extension à l&#39;envers,
commentaire, données). Rafraîchi au lancement et à chaque sauvegarde. Test cram-panel.mjs.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>f60548f5aeaa7b289dfde2efe2afe83f98afbfa4</id>
<published>2026-11-05T16:30:15Z</published>
<updated>2026-11-05T16:30:15Z</updated>
<title>Bibliothèque : catégorie « Exelmémoire » avec les 11 volumes webmo et deux volumes vierges</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/f60548f5aeaa7b289dfde2efe2afe83f98afbfa4.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit f60548f5aeaa7b289dfde2efe2afe83f98afbfa4
parent a60305b7c88ce95afd964e7caaae6a6556600113
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 11:30:15 -0500

Bibliothèque : catégorie « Exelmémoire » avec les 11 volumes webmo et deux volumes vierges

tools/get_cram.py convertit les sauvegardes .BKP de webmo.fr (514 octets d&#39;en-tête puis
la CRAM à l&#39;envers) en volumes 16 Ko, pose l&#39;amorce d&#39;autostart EXELTEL ($BFE8 = $AA,
BR @$BFE9 vers l&#39;entrée « CALL EXEC » donnée par webmo) et ajoute les volumes formatés
de DCExel. Dans la page : puce « Exelmémoire », groupe « Exelmémoire (volumes CROS64) »,
et un clic charge le volume dans la machine visée (EXELTEL) puis redémarre avec un message
indiquant Périphériques → Exelmémoire / Autostart. Test : test/library-cram.mjs.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>a60305b7c88ce95afd964e7caaae6a6556600113</id>
<published>2026-11-05T16:24:03Z</published>
<updated>2026-11-05T16:24:03Z</updated>
<title>Page : une seule zone « Déposer ou choisir un fichier », type détecté et lancement adapté</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/a60305b7c88ce95afd964e7caaae6a6556600113.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit a60305b7c88ce95afd964e7caaae6a6556600113
parent 39d83c4c86d93def618d729268185ff3faaafba3
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 11:24:03 -0500

Page : une seule zone « Déposer ou choisir un fichier », type détecté et lancement adapté

Remplace le sélecteur « cartouche / cassette » + champ fichier par une zone de dépôt (clic ou
glisser-déposer, aussi sur l&#39;écran). Le type est détecté par l&#39;extension puis le contenu :
cassette (.k7, .wav ; leader $55) -&gt; ExelBASIC + auto-chargement ; cartouche (.bin/.rom ;
8/16/32 Ko) -&gt; démarrage direct ; image Exelmémoire (.cram 16 Ko, image 64 Ko DCExel,
.bkp webmo = 514 octets d&#39;en-tête + 16 Ko à l&#39;envers) -&gt; volume chargé puis rechargement ;
disquette (.fd, .td0) -&gt; « pas encore prise en charge ». Message d&#39;état explicite. Le bouton
« Démarrer » générique de dsp est masqué. Test : test/upload.mjs (injection CDP d&#39;un fichier).

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>39d83c4c86d93def618d729268185ff3faaafba3</id>
<published>2026-11-05T15:38:59Z</published>
<updated>2026-11-05T15:38:59Z</updated>
<title>Bibliothèque : 169 cassettes et 2 cartouches de plus, moissonnées sur DCExel</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/39d83c4c86d93def618d729268185ff3faaafba3.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 39d83c4c86d93def618d729268185ff3faaafba3
parent 0d7601e8c787ad09d15381d777e9cd0dd4e8f35b
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 10:38:59 -0500

Bibliothèque : 169 cassettes et 2 cartouches de plus, moissonnées sur DCExel

tools/get_dcexel.py parcourt les 159 pages de programmes de DCExel (Daniel Coulom) et
prend les .k7/.rom propres (&lt;titre&gt;_exl100k7.zip, _exl100rom.zip) qui manquent à TOSEC
et webmo (même CRC ou même titre normalisé = doublon), avec éditeur, année, catégorie et
la source. Lancé après get_cartridges.py par la cible cartridges. La bibliothèque passe
à 297 entrées (Solfège, Cité d&#39;Or, World War 3, Opéral, Monkey Kong, pédagogiciels…),
dsp.data à 7,4 Mo (4,4 Mo gzippés). Crédit DCExel dans la modale et le pied de page.

Les gros programmes BASIC mettent jusqu&#39;à une minute à s&#39;initialiser après le RUN
automatique (« un peu de patience… ») : le message d&#39;attente le dit. Une apostrophe
dans cette phrase (chaîne JS à guillemets simples) a cassé la page en prod quelques
minutes : test/syntax.mjs vérifie désormais les scripts inline dans make test.

Tests de la session Exelmémoire : cram-basic/-exec/-exelquad/-autostart/-dir,
key-probe (( = Shift+5, ) = Shift+-), library-run, tape-timing.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>0d7601e8c787ad09d15381d777e9cd0dd4e8f35b</id>
<published>2026-11-05T14:05:48Z</published>
<updated>2026-11-05T14:05:48Z</updated>
<title>Exelmémoire : import/export .cram (format DCExel), tests Tape-&gt;Cram et import</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/0d7601e8c787ad09d15381d777e9cd0dd4e8f35b.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 0d7601e8c787ad09d15381d777e9cd0dd4e8f35b
parent 2790704e4ac055f0b1f0c10cad25efe0a8577157
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 09:05:48 -0500

Exelmémoire : import/export .cram (format DCExel), tests Tape-&gt;Cram et import

Boutons « .cram » dans la barre quand l&#39;Exelmémoire est branchée : export du volume
(16 Ko bruts pour l&#39;EXL 100 ; image de 64 Ko de l&#39;espace d&#39;adresses pour l&#39;EXELTEL,
comme DCExel) et import (16 384 ou 65 536 octets, tranche $8000-$BFFF) via le
localStorage puis rechargement. Les images « Exelmémoires 16K et 64K formatées » de
DCExel se chargent telles quelles (volumes « 16K » / « 64K », 16327 octets libres).

Trace du chargeur cassette sous CRAM_DBG : Tape-&gt;Cram lit bien la bande (en-têtes
des deux blocs) mais refuse les cassettes ExelBASIC (I/O ERROR 16) : il attend son
propre format d&#39;enregistrements, écrit par Cram-&gt;Tape.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>2790704e4ac055f0b1f0c10cad25efe0a8577157</id>
<published>2026-11-05T13:44:40Z</published>
<updated>2026-11-05T13:44:40Z</updated>
<title>Exelmémoire sur l&#39;EXL 100 : CROS 16K, interrupteur dans la page, aide</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/2790704e4ac055f0b1f0c10cad25efe0a8577157.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 2790704e4ac055f0b1f0c10cad25efe0a8577157
parent d015692c45f4c8b34b2920bf9931e486f2ac3846
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 08:44:40 -0500

Exelmémoire sur l&#39;EXL 100 : CROS 16K, interrupteur dans la page, aide

roms/cros64_exl100.rom (exelmemoire_16k.rom) donne à l&#39;EXL 100 la même carte que
l&#39;EXELTEL (OS $D000-$EFFF, CRAM $8000-$BFFF), sans RAM basse. Le BIOS sonde $8000 :
$AA -&gt; lance $8001 ; cette amorce (AA 8C E6 2A, BR @$E62A) est écrite par CROS au
Format, donc le driver la sème sur CRAM vierge, comme la cartouche livrée initialisée.
On démarre sur « CMOS RAM OPERATING SYSTEM V1.5 » (DIR, FMT, MFP, DEL, REN, CPF, BKP,
STR, TST).

Comme ça remplace le logo, la page a une case « Exelmémoire » (EXL 100 seulement,
défaut débranchée, ?exelmem=1|0, préférence mémorisée) : débranchée, le fichier est
retiré du MEMFS avant le démarrage. Volume sauvegardé par machine. Paragraphe d&#39;aide.
Test headless test/cram-exl100.mjs.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>d015692c45f4c8b34b2920bf9931e486f2ac3846</id>
<published>2026-11-05T13:29:26Z</published>
<updated>2026-11-05T13:29:26Z</updated>
<title>Exelmémoire (CRAM) utilisable sur l&#39;EXELTEL : CROS64, Format, Directory, persistance</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/d015692c45f4c8b34b2920bf9931e486f2ac3846.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit d015692c45f4c8b34b2920bf9931e486f2ac3846
parent a9715c897c365d30ddbf00e347da04e81100618f
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Thu,  5 Nov 2026 08:29:26 -0500

Exelmémoire (CRAM) utilisable sur l&#39;EXELTEL : CROS64, Format, Directory, persistance

Le driver exelv mappe la cartouche Exelmémoire quand roms/cros64.rom (OS CROS64 V 1.1,
= exelmemoire_64k.rom de DCExel) est embarquée : OS à $D000-$EFFF, RAM CRAM 16 Ko à
$8000-$BFFF, et une RAM $0200-$0FFF en pages 0/1 où CROS64 tient sa pile logicielle
(R16=$02D7), ses variables et le volume A. Sans cette dernière, la restauration de
contexte après Format relisait $FF et remettait le vecteur timer BRTIME ($C004) à $FFFF :
le handler INT2 appelait $FFFF, TRAP 0, reset logiciel, écran rouge.

La page sauve la CRAM en localStorage (base64, exports dsp_web_cram_*) dès qu&#39;elle change
et la restaure au lancement, comme le fichier .cram de DCExel. Patch amont regroupé dans
patches/exl100.patch ; tests headless test/cram-format-trace.mjs et test/cram-persist.mjs.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>a9715c897c365d30ddbf00e347da04e81100618f</id>
<published>2026-11-05T00:34:06Z</published>
<updated>2026-11-05T00:34:06Z</updated>
<title>Son : débloquer le contexte audio au premier geste (autoplay)</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/a9715c897c365d30ddbf00e347da04e81100618f.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit a9715c897c365d30ddbf00e347da04e81100618f
parent 3da5302ad38c51745e3a88f83f8ef4b3560d5ed5
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Wed,  4 Nov 2026 19:34:06 -0500

Son : débloquer le contexte audio au premier geste (autoplay)

Le contexte Web Audio ouvert par SDL démarre « suspended » (politique d&#39;autoplay
des navigateurs) : sans reprise, aucun son ne sort (parole, Exeldrums…). On le
reprend à chaque geste réel (clic/touche) tant qu&#39;il est suspendu, via des
écouteurs persistants (le contexte peut n&#39;exister qu&#39;après le démarrage d&#39;un
programme). Vérifié : l&#39;émulateur produisait bien le son (pics ~18000/32767 sur
les coups de batterie), seul le contexte restait suspendu → passe à « running ».

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>3da5302ad38c51745e3a88f83f8ef4b3560d5ed5</id>
<published>2026-11-05T00:02:17Z</published>
<updated>2026-11-05T00:02:17Z</updated>
<title>EXELTEL : la bibliothèque de programmes marche aussi (rétrocompat EXL 100)</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/3da5302ad38c51745e3a88f83f8ef4b3560d5ed5.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 3da5302ad38c51745e3a88f83f8ef4b3560d5ed5
parent eecc137b8f984d7e02587b5ca93c069ae5b5fe2a
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Wed,  4 Nov 2026 19:02:17 -0500

EXELTEL : la bibliothèque de programmes marche aussi (rétrocompat EXL 100)

L&#39;EXELTEL lit les cartouches et cassettes EXL 100 (elles répondent en page 6
au démarrage). On n&#39;masque donc plus le bouton « Choisir un programme » : la
modale fonctionne, les programmes sont lancés en --game exeltel. Sans programme
choisi, l&#39;EXELTEL démarre sur son menu télématique. Vérifié : Capitaine Menkar
(cartouche) et Donkey Kong (cassette, auto-chargement) tournent sur l&#39;EXELTEL.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>eecc137b8f984d7e02587b5ca93c069ae5b5fe2a</id>
<published>2026-11-04T23:53:13Z</published>
<updated>2026-11-04T23:53:13Z</updated>
<title>EXELTEL : seconde machine (terminal télématique 64 Ko)</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/eecc137b8f984d7e02587b5ca93c069ae5b5fe2a.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit eecc137b8f984d7e02587b5ca93c069ae5b5fe2a
parent 3b8a0138b9fa6d21aa5dd1efede3913574f8f2cf
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Wed,  4 Nov 2026 18:53:13 -0500

EXELTEL : seconde machine (terminal télématique 64 Ko)

Sélecteur « Machine » dans la page : EXL 100 (défaut) ou EXELTEL, le terminal
télématique de la même famille (TMS7000, 64 Ko, même driver exelv). Sur EXELTEL
on masque la bibliothèque de programmes EXL 100 et on recharge via ?game=exeltel.
L&#39;EXELTEL démarre sur son menu (MODE LOCAL : Téléphone, Répondeur, Communication,
Périphériques, Pages, Terminal, Exelquad). ROM embarquée (roms/exeltel.zip).

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>3b8a0138b9fa6d21aa5dd1efede3913574f8f2cf</id>
<published>2026-11-04T23:16:31Z</published>
<updated>2026-11-04T23:16:31Z</updated>
<title>Couverture : +3 cartouches webmo (Pindo/Edigraf/Exelvox), +démos ; cassettes webmo écartées</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/3b8a0138b9fa6d21aa5dd1efede3913574f8f2cf.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 3b8a0138b9fa6d21aa5dd1efede3913574f8f2cf
parent 3d2d82a0d2217761372fcbbe78f64e4c8f7dac8f
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Wed,  4 Nov 2026 18:16:31 -0500

Couverture : +3 cartouches webmo (Pindo/Edigraf/Exelvox), +démos ; cassettes webmo écartées

Vérification de webmo.fr : les 17 cartouches EXL 100 y sont toutes (TOSEC en avait 15 ;
PINDO/EDIGRAF/EXELVOX ajoutées de webmo). Démos TOSEC intégrées (Faites parler votre EXL100).
Les cassettes exclusives à webmo n&#39;existent qu&#39;en .wav analogiques : un convertisseur .wav-&gt;.k7
(tools/wav2k7.cpp, décodeur de dsp en wasm/Node) les rend compactes et elles se MONTENT, mais
les données ne se chargent pas en programme fiable (décodage avec pertes) — écartées pour ne pas
polluer la liste de programmes cassés. Résultat : 18 cartouches + 108 cassettes.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>3d2d82a0d2217761372fcbbe78f64e4c8f7dac8f</id>
<published>2026-11-04T22:30:16Z</published>
<updated>2026-11-04T22:30:16Z</updated>
<title>Couverture webmo.fr : +3 cartouches (Pindo, Edigraf, Exelvox) et +démos</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/3d2d82a0d2217761372fcbbe78f64e4c8f7dac8f.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 3d2d82a0d2217761372fcbbe78f64e4c8f7dac8f
parent dc75262734fe3bd87e4f285475ccd10f6dfb5a3c
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Wed,  4 Nov 2026 17:30:16 -0500

Couverture webmo.fr : +3 cartouches (Pindo, Edigraf, Exelvox) et +démos

Vérification de la couverture du site de préservation webmo.fr (ti99/exelvision) : il
manquait 3 cartouches absentes du pack TOSEC (PINDO = hash MAME 16K ; EDIGRAF et EXELVOX
= dumps 32768 qui se chargent quand même), téléchargées de webmo.fr par get_cartridges.py.
Cassettes élargies à la catégorie Démos (dont « Faites parler votre EXL100 »), cap 160 :
18 cartouches + 108 cassettes. Puce de filtre « Démos » ajoutée. Restent hors couverture
les cassettes webmo exclusives en .wav uniquement et celles à 64 Ko (extension mémoire).

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>dc75262734fe3bd87e4f285475ccd10f6dfb5a3c</id>
<published>2026-11-04T22:21:11Z</published>
<updated>2026-11-04T22:21:11Z</updated>
<title>Modale : filtres par catégorie + correctif du défilement</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/dc75262734fe3bd87e4f285475ccd10f6dfb5a3c.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit dc75262734fe3bd87e4f285475ccd10f6dfb5a3c
parent 92da98c03c9de96e218c2a3d063f0ceb1f4fd7bc
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Wed,  4 Nov 2026 17:21:11 -0500

Modale : filtres par catégorie + correctif du défilement

Puces Tous / Cartouches / Cassettes / Jeux / Applications / Éducatif (catégorie extraite
du dossier TOSEC, stockée dans titles.json), combinées au filtre texte. Le défilement de
la modale ne fait plus défiler la page : overscroll-behavior: contain + verrou
body.overflow à l&#39;ouverture, rendu à la fermeture (Échap/croix/fond via l&#39;événement close).

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>92da98c03c9de96e218c2a3d063f0ceb1f4fd7bc</id>
<published>2026-11-04T22:15:32Z</published>
<updated>2026-11-04T22:15:32Z</updated>
<title>Choix des programmes dans une modale, avec la provenance du contenu</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/92da98c03c9de96e218c2a3d063f0ceb1f4fd7bc.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 92da98c03c9de96e218c2a3d063f0ceb1f4fd7bc
parent 796b91dd4c63661b937b21b1576816086c86e573
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Wed,  4 Nov 2026 17:15:32 -0500

Choix des programmes dans une modale, avec la provenance du contenu

La liste en ligne (peu pratique) passe dans une boîte de dialogue ouverte par le bouton
« Choisir un programme… » : filtre, liste groupée titre + source (éditeur, année), clic
qui ferme et charge, bouton qui affiche le programme courant. Une note dit d&#39;où vient le
contenu : pack TOSEC sur archive.org, ROM système MAME. Page dégagée (bouton + écran).

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>796b91dd4c63661b937b21b1576816086c86e573</id>
<published>2026-11-04T22:09:14Z</published>
<updated>2026-11-04T22:09:14Z</updated>
<title>Liste de programmes avec source (éditeur, année) au lieu d&#39;un menu déroulant</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/796b91dd4c63661b937b21b1576816086c86e573.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 796b91dd4c63661b937b21b1576816086c86e573
parent 995e15de01d77f234fd83e900c96f7f1b8ecb7f4
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Wed,  4 Nov 2026 17:09:14 -0500

Liste de programmes avec source (éditeur, année) au lieu d&#39;un menu déroulant

tools/get_cartridges.py extrait l&#39;éditeur et l&#39;année du nom TOSEC (titles.json devient
{t,by,y}). La page remplace le &lt;select&gt; par une liste cliquable, groupée (Cartouches /
Cassettes BASIC), chaque entrée montrant son titre et sa source, avec un filtre texte et
la surbrillance de l&#39;actif. 107 entrées.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>995e15de01d77f234fd83e900c96f7f1b8ecb7f4</id>
<published>2026-11-04T21:55:05Z</published>
<updated>2026-11-04T21:55:05Z</updated>
<title>Bibliothèque élargie : 91 cassettes BASIC (jeux, applications, éducatif)</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/995e15de01d77f234fd83e900c96f7f1b8ecb7f4.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 995e15de01d77f234fd83e900c96f7f1b8ecb7f4
parent 603d9cba2e900619a4483b204eac4184d582c8e1
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Wed,  4 Nov 2026 16:55:05 -0500

Bibliothèque élargie : 91 cassettes BASIC (jeux, applications, éducatif)

Plafond d&#39;extraction porté à 120 : toutes les cassettes [K7] de base du pack TOSEC
(jeux + applications + éducatif, hors 64kb/variantes/multi-faces) sont intégrées,
soit 91 programmes. Même corpus que webmo.fr mais dumps TOSEC. Auto-chargement
LOAD&quot;1&quot;/RUN pour la plupart (vérifié p. ex. Formule 1) ; repli en consigne pour
ceux dont le chargement sort du cas standard.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>603d9cba2e900619a4483b204eac4184d582c8e1</id>
<published>2026-11-04T21:49:57Z</published>
<updated>2026-11-04T21:49:57Z</updated>
<title>Couleurs TMS3556 : fond de zone par délimiteurs (d&#39;après MAME)</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/603d9cba2e900619a4483b204eac4184d582c8e1.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 603d9cba2e900619a4483b204eac4184d582c8e1
parent 7207ae1c02403917ef9066ba08756055cc8f4d69
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Wed,  4 Nov 2026 16:49:57 -0500

Couleurs TMS3556 : fond de zone par délimiteurs (d&#39;après MAME)

Le port dsp-cpp du VDP TMS3556 utilisait un fond global au lieu du fond de zone
porté par des cellules délimiteur (code $20), et testait le mode alphanumérique
sur le mauvais registre. En vidéo inverse le premier plan doit devenir le fond de
zone, pas le fond global — d&#39;où le noir sur noir des menus (Exeldrums) et les
couleurs fausses (Imagix). draw_line_text_common réécrite d&#39;après MAME
tms3556.cpp (délimiteurs, zone_bg, zones masquées). Corrige Exeldrums (surbrillance
verte) et Imagix (titre correct) ; Capitaine Menkar, Tennis, Guppy, ExelBASIC
inchangés. Correctifs source regroupés dans patches/exl100.patch (appliqué par
git apply au lieu des sed).

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>7207ae1c02403917ef9066ba08756055cc8f4d69</id>
<published>2026-11-04T20:39:16Z</published>
<updated>2026-11-04T20:39:16Z</updated>
<title>Cassettes BASIC : 48 programmes au menu, auto-chargement d&#39;un clic</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/7207ae1c02403917ef9066ba08756055cc8f4d69.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 7207ae1c02403917ef9066ba08756055cc8f4d69
parent 96f265c5c17b1192acfbd1ad8b0132df31dbc7d1
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Wed,  4 Nov 2026 15:39:16 -0500

Cassettes BASIC : 48 programmes au menu, auto-chargement d&#39;un clic

Pack TOSEC (archive.org), extraites par tools/get_cartridges.py (cassettes [K7] de base,
jeux + applications, curées) dans roms/tapes/ (non versionné), embarquées dans dsp.data.
Menu à deux groupes (Cartouches / Cassettes BASIC). À la sélection d&#39;une cassette, la page
monte ExelBASIC + la cassette puis tape elle-même LOAD&quot;1&quot;, Échap et RUN (événements clavier
synthétiques sur #canvas, vraie touche Shift pour le &quot; = Shift+3), avec repli en consigne.
Vérifié : Donkey Kong et Échecs-Dames se chargent et tournent.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>96f265c5c17b1192acfbd1ad8b0132df31dbc7d1</id>
<published>2026-11-04T20:23:26Z</published>
<updated>2026-11-04T20:23:26Z</updated>
<title>Correctif son : parole TMS5220 ~4,8x trop rapide (double avancée de la puce)</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/96f265c5c17b1192acfbd1ad8b0132df31dbc7d1.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 96f265c5c17b1192acfbd1ad8b0132df31dbc7d1
parent 20685ca848b0b7c749cc072ac2121eb36ca24837
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Wed,  4 Nov 2026 15:23:26 -0500

Correctif son : parole TMS5220 ~4,8x trop rapide (double avancée de la puce)

Dans on_main_cycles, la puce était avancée deux fois : par speech_.tick(cycles CPU,
~2,46 MHz traités comme horloges-puce) ET par speech_.update() (qui l&#39;avance déjà au bon
rythme 640 kHz / 44100). Net : ~4,8x trop vite, voix aiguë. On retire le tick redondant
(patch build-time sur exelv.cpp) ; io_ready reste décompté par update() (16 horloges-puce
= 25 us, le vrai timing). Les 15 programmes tournent toujours.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>20685ca848b0b7c749cc072ac2121eb36ca24837</id>
<published>2026-11-04T20:04:06Z</published>
<updated>2026-11-04T20:04:06Z</updated>
<title>Menu Programme : 15 cartouches EXL 100 embarquées, exécution sans téléchargement</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/20685ca848b0b7c749cc072ac2121eb36ca24837.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 20685ca848b0b7c749cc072ac2121eb36ca24837
parent 7871d5a663cf913e757ba6b2ea717beee4edde94
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Wed,  4 Nov 2026 15:04:06 -0500

Menu Programme : 15 cartouches EXL 100 embarquées, exécution sans téléchargement

Pack TOSEC (archive.org) extrait par tools/get_cartridges.py dans roms/cartridges/ (non
versionné), embarqué dans dsp.data ; CRC identiques aux hachages MAME. La page lit
titles.json depuis le système de fichiers et offre un menu Programme (ExelBASIC, Tennis,
Guppy, Virus, Exelpaint…) ; chaque choix relance l&#39;EXL 100 avec la cartouche en --tape.
Sources citées en pied (Exelvision, TOSEC/archive.org, ti99.com, MAME, dsp-cpp).

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
<entry>
<id>7871d5a663cf913e757ba6b2ea717beee4edde94</id>
<published>2026-11-04T19:48:10Z</published>
<updated>2026-11-04T19:48:10Z</updated>
<title>Exelvision EXL 100 (1984) dans le navigateur : dsp-cpp en WebAssembly</title>
<link rel="alternate" type="text/html" href="https://git.schurger.org/exl100/commit/7871d5a663cf913e757ba6b2ea717beee4edde94.html" />
<author>
<name>Jean Schurger</name>
<email>jean@schurger.org</email>
</author>
<content>commit 7871d5a663cf913e757ba6b2ea717beee4edde94
Author: Jean Schurger &lt;jean@schurger.org&gt;
Date:   Wed,  4 Nov 2026 14:48:10 -0500

Exelvision EXL 100 (1984) dans le navigateur : dsp-cpp en WebAssembly

Émulateur dsp-cpp de Chusogar (driver exelv d&#39;après MAME, TMS7020 + TMS3556 + TMS5220),
cloné et compilé en WebAssembly par Emscripten, driver exelv seul, ROM système (BIOS)
embarquée. La page démarre sur le logo Exelvision et charge cartouches/cassettes.
Patch Emscripten d&#39;une ligne sur mpeg_audio.cpp (abort sans &lt;cstdlib&gt;).

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QyJB9yqUAYm3wRQi4uytj9

</content>
</entry>
</feed>
