<?php 
 
 
foreach (['../../autoload.php', '../vendor/autoload.php', 'vendor/autoload.php'] as $autoload) { 
    $autoload = __DIR__.'/'.$autoload; 
    if (file_exists($autoload)) { 
        require $autoload; 
        break; 
    } 
} 
unset($autoload); 
 
use GameBoy\Canvas\TerminalCanvas; 
use GameBoy\Core; 
use GameBoy\Keyboard; 
 
if (PHP_VERSION_ID >= 70000) { 
    set_exception_handler(function (\Throwable $exception) { 
        fwrite(STDERR, $exception->getMessage() . PHP_EOL); 
        exit(254); 
    }); 
} else { 
    set_exception_handler(function (Exception $exception) { 
        fwrite(STDERR, $exception->getMessage() . PHP_EOL); 
        exit(254); 
    }); 
} 
 
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(); 
} 
 
 |