cram-import.mjs (2308B)
1 // Compatibilité .cram DCExel : place les images « formatées » de DCExel dans le localStorage 2 // (ce que fait l'import de la page), démarre et vérifie que CROS voit le volume (« 16K » / « 64K »). 3 // node test/cram-import.mjs <base-url> <cram_formatee_16k.cram> <cram_formatee_64k.cram> 4 import { open, sleep } from './cdp.mjs'; 5 import { readFileSync } from 'node:fs'; 6 7 const base = process.argv[2] ?? 'http://127.0.0.1:8195'; 8 const b64 = (buf) => Buffer.from(buf).toString('base64'); 9 const img16 = readFileSync(process.argv[3]); 10 const img64 = readFileSync(process.argv[4]).subarray(0x8000, 0xc000); 11 12 const key = async (page, 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 19 // EXL 100 : image 16K -> boot CROS, DIR (Entrée) 20 let page = await open(base + '/?exelmem=1', { width: 900, height: 1100 }); 21 await page.evaluate(`localStorage.setItem('exl100.cram.exl100', ${JSON.stringify(b64(img16))})`); 22 await page.evaluate('location.reload()'); 23 await sleep(9000); 24 await key(page, 'Enter', 'Enter', 13); await sleep(1500); 25 await page.screenshot('/tmp/i-exl100-dir.png'); 26 console.log('exl100 restauration :', page.logs.filter((l) => /restaurée/.test(l)).length); 27 page.close(); await sleep(800); 28 29 // EXELTEL : image 64K (tranche $8000) -> Périphériques -> Exelmémoire -> en-tête CROS64 30 page = await open(base + '/?game=exeltel&rom=/roms/exeltel.zip', { width: 900, height: 1100 }); 31 await page.evaluate(`localStorage.setItem('exl100.cram.exeltel', ${JSON.stringify(b64(img64))})`); 32 await page.evaluate('location.reload()'); 33 await sleep(9000); 34 for (let i = 0; i < 3; i++) await key(page, 'ArrowDown', 'ArrowDown', 40); 35 await key(page, 'Enter', 'Enter', 13); await sleep(1200); await key(page, 'Enter', 'Enter', 13); await sleep(3500); 36 await key(page, 'ArrowDown', 'ArrowDown', 40); await key(page, 'Enter', 'Enter', 13); await sleep(900); 37 await key(page, 'Enter', 'Enter', 13); await sleep(1800); // Directory -> Screen 38 await page.screenshot('/tmp/i-exeltel-dir.png'); 39 console.log('exeltel restauration :', page.logs.filter((l) => /restaurée/.test(l)).length); 40 page.close();