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