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

cram-exl100.mjs (2359B)


      1 // Exelmémoire sur l'EXL 100 (CROS 16K en ligne de commande) : DIR sur CRAM vierge, FMT, DIR,
      2 // sauvegarde localStorage, rechargement de la page, DIR : le volume doit être là.
      3 //   node test/cram-exl100.mjs [url]
      4 import { open, sleep } from './cdp.mjs';
      5 
      6 const url = process.argv[2] ?? 'http://127.0.0.1:8195/?exelmem=1';
      7 const KEY = 'exl100.cram.exl100';
      8 
      9 const key = async (page, k, code, vk) => {
     10   await page.send('Input.dispatchKeyEvent', { type: 'keyDown', key: k, code, windowsVirtualKeyCode: vk });
     11   await sleep(60);
     12   await page.send('Input.dispatchKeyEvent', { type: 'keyUp', key: k, code, windowsVirtualKeyCode: vk });
     13   await sleep(260);
     14 };
     15 const enter = (p) => key(p, 'Enter', 'Enter', 13);
     16 const typeSlow = async (p, text) => {
     17   for (const ch of text.toUpperCase()) await key(p, ch.toLowerCase(), 'Key' + ch, ch.charCodeAt(0));
     18 };
     19 const lsLen = (p) => p.evaluate(`(localStorage.getItem(${JSON.stringify(KEY)}) || '').length`);
     20 
     21 let page = await open(url, { width: 900, height: 1100 });
     22 await page.evaluate(`localStorage.removeItem(${JSON.stringify(KEY)})`);
     23 await sleep(8000);                                   // boot -> CROS 16K
     24 await page.screenshot('/tmp/x-0-cros.png');
     25 await enter(page); await sleep(1500);                // DIR (vierge)
     26 await page.screenshot('/tmp/x-1-dir-vierge.png');
     27 await typeSlow(page, 'FMT'); await enter(page); await sleep(2500);
     28 await page.screenshot('/tmp/x-2-fmt.png');
     29 await typeSlow(page, 'Y'); await enter(page); await sleep(2500);   // confirmation éventuelle
     30 await page.screenshot('/tmp/x-3-fmt-after.png');
     31 await typeSlow(page, 'DIR'); await enter(page);
     32 await page.screenshot('/tmp/x-4a-dir-300ms.png'); await sleep(600);
     33 await page.screenshot('/tmp/x-4b-dir-900ms.png'); await sleep(900);
     34 await page.screenshot('/tmp/x-4c-dir-1800ms.png');
     35 await sleep(4000);
     36 console.log('Phase 1 : localStorage =', await lsLen(page), 'car.');
     37 page.close(); await sleep(800);
     38 
     39 page = await open(url, { width: 900, height: 1100 });
     40 console.log('Phase 2 : clé au rechargement =', await lsLen(page), 'car.');
     41 await sleep(8000);
     42 await page.screenshot('/tmp/x-5-reload.png');
     43 await enter(page); await sleep(2000);                // DIR
     44 await page.screenshot('/tmp/x-6-dir-reload.png');
     45 console.log('restauration :', page.logs.filter((l) => /Exelmémoire restaurée/.test(l)).join(' | ') || '(aucune)');
     46 page.close();