}); } if (count($argv) < 2) { throw new \RuntimeException('You need to pass the ROM file name (Ex: drmario.rom)'); } $filename = $argv[1]; if (!file_exists($filename)) { throw new \RuntimeException(sprintf('"%s" does not exist', $filename)); } if (extension_loaded('xdebug')) { fwrite(STDERR, 'Running php-gameboy with Xdebug enabled reduces its speed considerably.' . PHP_EOL); fwrite(STDERR, 'You should consider to disable it before execute php-gameboy.' . PHP_EOL); sleep(1); } $rom = file_get_contents($filename); $canvas = new TerminalCanvas(); $core = new Core($rom, $canvas); $keyboard = new Keyboard($core); $core->start(); if (($core->stopEmulator & 2) == 0) { throw new \RuntimeException('The GameBoy core is already running.'); } if ($core->stopEmulator & 2 != 2) { throw new \RuntimeException('GameBoy core cannot run while it has not been initialized.'); } $core->stopEmulator &= 1; $core->lastIteration = (int) (microtime(true) * 1000); while (true) { $core->run(); $keyboard->check(); }
/** * Opcode #0xFF. * * RST 0x38 * * @param Core $core */ public static function opcode255(Core $core) { $core->stackPointer = $core->unswtuw($core->stackPointer - 1); $core->memoryWrite($core->stackPointer, $core->programCounter >> 8); $core->stackPointer = $core->unswtuw($core->stackPointer - 1); $core->memoryWrite($core->stackPointer, $core->programCounter & 0xff); $core->programCounter = 0x38; }