PHP Classes

File: boot.php

Recommend this page to a friend!
  Classes of Gabriel Couto   PHP Gameboy Emulator   boot.php   Download  
File: boot.php
Role: Example script
Content type: text/plain
Description: Example script
Class: PHP Gameboy Emulator
Emulate Gameboy console in a terminal in pure PHP
Author: By
Last change: Merge pull request #45 from hasegawa-tomoki/fix-error-handler-for-php7

PHP7 wants Throwable for 1st parameter of set_exception_handler's closure.
Update boot.php
Date: 7 years ago
Size: 1,700 bytes
 

Contents

Class file image Download
<?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();
}