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