nes-js
Version:
JavaScript NES emulator
145 lines (113 loc) • 4.28 kB
HTML
<html>
<head>
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<style>
body {
font-family: Monospace;
background-color: #fff;
color: #000;
margin: 0px;
overflow: hidden;
}
#info {
color: #000;
position: absolute;
top: 10px;
width: 100%;
text-align: center;
display:block;
}
#info a, .button { color: #f00; font-weight: bold; text-decoration: underline; cursor: pointer }
</style>
<script type="text/javascript" src="utility/utility.js"></script>
<script type="text/javascript" src="src/Register.js"></script>
<script type="text/javascript" src="src/Memory.js"></script>
<script type="text/javascript" src="src/Joypad.js"></script>
<script type="text/javascript" src="src/Rom.js"></script>
<script type="text/javascript" src="src/Mapper.js"></script>
<script type="text/javascript" src="src/Cpu.js"></script>
<script type="text/javascript" src="src/Ppu.js"></script>
<script type="text/javascript" src="src/Apu.js"></script>
<script type="text/javascript" src="src/Nes.js"></script>
<script type="text/javascript" src="src/Display.js"></script>
<script type="text/javascript" src="src/Audio.js"></script>
<script type="text/javascript" src="https://rawgit.com/mrdoob/three.js/dev/build/three.js"></script>
<script type="text/javascript" src="https://rawgit.com/mrdoob/three.js/dev/examples/js/controls/OrbitControls.js"></script>
<script type="text/javascript">
var __nes;
/**
*
*/
function __init() {
var url = '../nes-js-work/roms/Sgt. Helmet - Training Day (2013)(The Mojon Twins)[!].nes';
var request = new XMLHttpRequest();
request.responseType = 'arraybuffer';
request.onload = function() {
__run(request.response);
};
request.onerror = function(e) {
};
request.open('GET', url, true);
request.send(null);
}
/**
*
*/
function __run(buffer) {
var rom = new Rom(buffer);
if(!rom.isNes()) {
return;
}
var canvas = document.createElement('canvas');
var nes = new Nes();
nes.setRom(rom);
var display = new Display(canvas);
nes.setDisplay(display);
window.onkeydown = function(e) { nes.handleKeyDown(e); };
window.onkeyup = function(e) { nes.handleKeyUp(e); };
__nes = nes; // for debug on console.
nes.bootup();
nes.run();
__start(canvas);
}
/**
*
*/
function __start(canvas) {
canvas.width = canvas.height = 256;
var scene, camera, renderer;
var geometry, material, mesh;
var controls;
function init() {
scene = new THREE.Scene();
scene.background = new THREE.Color( 0xffffff );
var gridHelper = new THREE.PolarGridHelper( 100, 20 );
gridHelper.position.y = -15;
scene.add( gridHelper );
camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 10000 );
camera.position.z = 25;
geometry = new THREE.PlaneBufferGeometry( 32, 30 );
material = new THREE.MeshBasicMaterial( { map: new THREE.Texture( canvas ) } );
material.map.needsUpdate = true;
mesh = new THREE.Mesh( geometry, material );
scene.add( mesh );
renderer = new THREE.WebGLRenderer( {antialias: true} );
renderer.setSize( window.innerWidth, window.innerHeight );
controls = new THREE.OrbitControls( camera, renderer.domElement );
controls.enableKeys = false;
document.body.appendChild( renderer.domElement );
}
function animate() {
requestAnimationFrame( animate );
material.map.needsUpdate = true;
renderer.render( scene, camera );
}
init();
animate();
}
</script>
</head>
<body onload="__init()">
</body>
</html>