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-quad2.mjs (2740B)


      1 // Exelquad APRÈS initialisation de CROS64 : volume chargé, Périphériques -> Exelmémoire -> Quit,
      2 // puis Exelquad (et Autostart). Captures + PC en CRAM + entrées CROS64 lues.
      3 //   node test/cram-quad2.mjs <volume.cram> [base-url] [prefix]
      4 import { open, sleep } from './cdp.mjs';
      5 import { readFileSync } from 'node:fs';
      6 
      7 const img = readFileSync(process.argv[2]);
      8 const base = process.argv[3] ?? 'http://127.0.0.1:8194';
      9 const prefix = process.argv[4] ?? '/tmp/q2';
     10 const page = await open(base + '/?game=exeltel&rom=/roms/exeltel.zip', { width: 900, height: 1100 });
     11 await page.evaluate(`localStorage.setItem('exl100.cram.exeltel', ${JSON.stringify(Buffer.from(img).toString('base64'))})`);
     12 await page.evaluate('location.reload()');
     13 const key = async (k, code, vk) => {
     14   await page.send('Input.dispatchKeyEvent', { type: 'keyDown', key: k, code, windowsVirtualKeyCode: vk });
     15   await sleep(60);
     16   await page.send('Input.dispatchKeyEvent', { type: 'keyUp', key: k, code, windowsVirtualKeyCode: vk });
     17   await sleep(320);
     18 };
     19 const down = () => key('ArrowDown', 'ArrowDown', 40);
     20 const enter = () => key('Enter', 'Enter', 13);
     21 const mark = (s) => page.logs.push('=== ' + s);
     22 await sleep(9000);
     23 await down(); await down(); await down(); await enter(); await sleep(1200); await enter(); await sleep(3500);  // CROS64
     24 await page.screenshot(prefix + '-0-cros64.png');
     25 mark('QUIT');
     26 for (let i = 0; i < 8; i++) await down();                       // Quit (9e)
     27 await enter(); await sleep(3000);
     28 await page.screenshot(prefix + '-1-after-quit.png');
     29 // Après Quit on est revenu dans le sous-menu Périphériques, « Exelmémoire » surligné.
     30 mark('AUTOSTART');
     31 for (let i = 0; i < 4; i++) await down();                       // Autostart (5e)
     32 await enter(); await sleep(3000);
     33 await page.screenshot(prefix + '-2-autostart.png');
     34 await key('Escape', 'Escape', 27); await sleep(800);
     35 await key('Escape', 'Escape', 27); await sleep(800);            // quitte le sous-menu -> Périphériques surligné
     36 mark('EXELQUAD');
     37 await down(); await down(); await down();                       // Pages, Terminal, Exelquad
     38 await enter(); await sleep(6000);
     39 await page.screenshot(prefix + '-3-exelquad.png');
     40 const logs = page.logs.map((l) => l.replace(/^\[\w+\]\s*/, ''));
     41 for (const ph of ['AUTOSTART', 'EXELQUAD']) {
     42   const i = logs.indexOf('=== ' + ph); const j = ph === 'AUTOSTART' ? logs.indexOf('=== EXELQUAD') : logs.length;
     43   const seg = logs.slice(i, j); const fr = seg.filter((l) => /^FR\d+ PC=/.test(l));
     44   console.log(ph, ': frames PC en CRAM', fr.filter((l) => /PC=[89ab]/.test(l)).length, '/', fr.length,
     45     '; OS lus :', seg.filter((l) => /^OS /.test(l)).slice(0, 10).map((l) => l.split(' ')[1]).join(' ') || '(aucun)');
     46 }
     47 page.close();