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();