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