cram-tape.mjs (2262B)
1 // Tape->Cram sur l'EXELTEL : cassette montée au démarrage, CROS64, Format (volume vierge), 2 // puis Tape->Cram avec un nom, et Directory. Captures à chaque étape. 3 // node test/cram-tape.mjs [url] 4 import { open, sleep } from './cdp.mjs'; 5 6 const url = process.argv[2] ?? 7 'http://127.0.0.1:8195/?game=exeltel&rom=/roms/exeltel.zip&args=' + encodeURIComponent('--tape /roms/tapes/air-ball.k7'); 8 const page = await open(url, { width: 900, height: 1100 }); 9 await page.evaluate(`localStorage.removeItem('exl100.cram.exeltel')`); 10 const key = async (k, code, vk, hold = 60, gap = 320) => { 11 await page.send('Input.dispatchKeyEvent', { type: 'keyDown', key: k, code, windowsVirtualKeyCode: vk }); 12 await sleep(hold); 13 await page.send('Input.dispatchKeyEvent', { type: 'keyUp', key: k, code, windowsVirtualKeyCode: vk }); 14 await sleep(gap); 15 }; 16 const down = () => key('ArrowDown', 'ArrowDown', 40); 17 const up = () => key('ArrowUp', 'ArrowUp', 38); 18 const enter = () => key('Enter', 'Enter', 13); 19 const typeSlow = async (text) => { for (const ch of text) await key(ch.toLowerCase(), 'Key' + ch, ch.charCodeAt(0), 80, 400); }; 20 21 await sleep(8000); 22 await down(); await down(); await down(); await enter(); await sleep(1200); await enter(); await sleep(3500); // CROS64 23 for (let i = 0; i < 7; i++) await down(); // Format 24 await enter(); await sleep(1200); await enter(); await sleep(2500); // nom vide 25 await page.screenshot('/tmp/t-1-formatted.png'); 26 await down(); await down(); await down(); // après Format le curseur revient en haut : Tape->Cram = 4e 27 await enter(); await sleep(1200); 28 await typeSlow(process.argv[3] ?? 'AIR'); // nom du fichier SUR la bande (air-ball.k7 = « AIR ») 29 await page.screenshot('/tmp/t-2-name.png'); 30 await enter(); await sleep(2500); 31 await page.screenshot('/tmp/t-3-loading.png'); 32 await sleep(10000); 33 await page.screenshot('/tmp/t-4-after.png'); 34 await down(); // curseur revenu en haut : Directory = 2e 35 await enter(); await sleep(900); await enter(); await sleep(1800); 36 await page.screenshot('/tmp/t-5-dir.png'); 37 console.log(page.logs.filter((l) => /TAPE|k7|cassette|TRAP|charg/.test(l)).slice(0, 70).join('\n') || '(pas de log cassette)'); 38 page.close();