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-exelquad.mjs (1749B)


      1 // Programme Exelmémoire sur l'EXELTEL : charge un volume .cram (16 Ko) dans le localStorage,
      2 // démarre, va dans le menu « Exelquad » (7e) et capture ce qui se passe.
      3 //   node test/cram-exelquad.mjs <volume.cram> [base-url]
      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:8195';
      9 const page = await open(base + '/?game=exeltel&rom=/roms/exeltel.zip', { width: 900, height: 1100 });
     10 await page.evaluate(`localStorage.setItem('exl100.cram.exeltel', ${JSON.stringify(Buffer.from(img).toString('base64'))})`);
     11 await page.evaluate('location.reload()');
     12 const key = async (k, code, vk) => {
     13   await page.send('Input.dispatchKeyEvent', { type: 'keyDown', key: k, code, windowsVirtualKeyCode: vk });
     14   await sleep(60);
     15   await page.send('Input.dispatchKeyEvent', { type: 'keyUp', key: k, code, windowsVirtualKeyCode: vk });
     16   await sleep(320);
     17 };
     18 await sleep(9000);
     19 for (let i = 0; i < 6; i++) await key('ArrowDown', 'ArrowDown', 40);   // Exelquad
     20 await page.screenshot('/tmp/q-0-menu.png');
     21 await key('Enter', 'Enter', 13); await sleep(1200);
     22 await page.screenshot('/tmp/q-1-exelquad.png');
     23 await sleep(5000);
     24 await page.screenshot('/tmp/q-2-6s.png');
     25 await sleep(8000);
     26 await page.screenshot('/tmp/q-3-14s.png');
     27 console.log('restauration :', page.logs.filter((l) => /restaurée/.test(l)).length);
     28 const fr = page.logs.map((l) => l.replace(/^\[\w+\]\s*/, '')).filter((l) => /^FR\d+ PC=/.test(l));
     29 const inCram = fr.filter((l) => /PC=[89ab]/.test(l)).length;
     30 console.log('frames avec PC en $8000-$BFFF (CRAM) :', inCram, '/', fr.length, '; derniers :', fr.slice(-12).map((l) => l.split('PC=')[1]).join(' '));
     31 page.close();