chip-8 emulator
by s3ntry
HTML
<h1>chip-8 emulator</h1>
<p>if you are looking at this it's probably broken</p>
<canvas id="canv" width="400" height="200" style="border:1px solid #000000;">
</canvas>
<br>
<button type="button" onclick="loadrom();">Load ROM</button>
CSS
* {
font-family: Roboto, Sans-Serif;
text-align: center;
}
JavaScript
/*
Game hexcode (this may be the only working ROM you try):
12 19 4d 49 53 53 49 4c 45 20 62 79 20 44 61 76 69 64 20 57 49 4e 54 45 52 6c 0c 60 00 61 00 65 08 66 0a 67 00 6e 01 ef bf bd ef bf bd ef bf bd 14 70 08 30 40 12 29 60 00 61 1c ef bf bd ef bf bd ef bf bd 14 ef bf bd ef bf bd ef bf bd 14 3e 01 12 49 70 04 40 38 6e 00 12 4f 70 ef bf bd 40 00 6e 01 ef bf bd 14 ef bf bd 15 ef bf bd 07 3b 00 12 53 62 08 ef bf bd 12 ef bf bd 3c 00 7c ef bf bd 63 1b ef bf bd 00 ef bf bd ef bf bd ef bf bd 31 64 00 ef bf bd 31 73 ef bf bd ef bf bd 31 3f 00 64 01 33 03 12 6d ef bf bd 31 34 01 12 ef bf bd 77 05 75 ef bf bd ef bf bd 00 63 00 ef bf bd ef bf bd ef bf bd 34 45 00 12 ef bf bd 76 ef bf bd 36 00 12 39 ef bf bd ef bf bd ef bf bd 33 ef bf bd 65 63 1b 64 0a ef bf bd 29 ef bf bd 45 73 05 ef bf bd 29 ef bf bd 45 12 ef bf bd 10 38 38 10 38 7c ef bf bd
*/
// Setup canvas
var c = document.getElementById("canv");
var ctx = c.getContext("2d");
// Initialize vars/arrays
var pc = 0x200;
var memory = new Array(4096);
var v = new Array(16);
var opcode;
var stack = new Array(16);
var sp = 0;
var graphics = [new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64), new Array(64)];
/*
For some reason if you do this to make the array:
var graphics = new Array(32);
graphics.fill(new Array(64));
and then change one value of one nested array:
graphics[3][5] = 10;
it changes the values of all arrays within the graphics array.
Javascript is weird.
*/
var i = 0;
var delay;
var sound;
var keys = new Array(16);
function init(){
var pc = 0x200;
var memory = new Array(4096);
var v = new...