nes-js
This is JavaScript NES(Famicom) emulator which runs on browser.
Demo
Demo with Three.js (It has a performance issue!)
WebVR Demo with Three.js (It has a serious performance issue!)
AR Demo with Three.js and jsartoolkit5 (It has a performance issue!)
Screenshot
Features
- iNES format rom image support
- Renders with Canvas
- Audio support with WebAudio
- Runs on browser
Browser
How to use
<head>
<script type="text/javascript" src="https://cdn.rawgit.com/takahirox/nes-js/v0.0.1/build/nes.min.js"></script>
<script type="text/javascript" >
function init() {
var url = 'url to rom image';
var request = new XMLHttpRequest();
request.responseType = 'arraybuffer';
request.onload = function() {
var buffer = request.response;
var nes = new NesJs.Nes();
nes.setRom(new NesJs.Rom(buffer));
nes.setDisplay(new NesJs.Display(document.getElementById('gameCanvas')));
nes.setAudio(new NesJs.Audio());
window.onkeydown = function(e) { nes.handleKeyDown(e); };
window.onkeyup = function(e) { nes.handleKeyUp(e); };
nes.bootup();
nes.run();
};
request.open('GET', url, true);
request.send(null);
}
</script>
</head>
<body onload="init()">
<p>
<canvas id="gameCanvas" width="256" height="240"></canvas>
</p>
</body>
NPM
How to install
$ npm install nes-js
How to build
$ npm install
$ npm run all
Default key configuration
This table shows the key - joypad configuration set by
window.onkeydown = function(e) { nes.handleKeyDown(e); };
window.onkeyup = function(e) { nes.handleKeyUp(e); };
key | joypad |
---|---|
enter | start |
space | select |
cursor-left | left |
cursor-up | up |
cursor-right | right |
cursor-down | down |
x | A |
z | B |
APIs
T.B.D.
- NesJs
- Nes
- setRom()
- setDisplay()
- setAudio()
- bootup()
- run()
- handleKeyDown()
- handleKeyUp()
- Rom
- Display
- Audio
- Nes
TODO
- Performance optimization
- Support more many mappers
- Support unofficial CPU instructions
- Gamepad API support
Links
- Nes Dev
- VR/AR