JSNES, an NES emulator in your browser

There is certainly a great amount of hype surrounding HTML5, and even while the standard itself is years away from completion, some of its juiciest bits have already started leaking into browsers.

Besides the video and audio tags, one of the most prominent component of the HTML5 specification would have to be the canvas tag. This HTML5 element places within your browser a blank area which allows manipulation of its pixels by client-side scripts. Using a canvas in an HTML5 document, Javascrript can draw bitmaps which are rendered on the client side.

To give you a taste of its power, here we have an entire NES emulator written entirely in JavaScript, which renders Nintendo games on a canvas element!

This little emulator allows you to load up a ROM from a list of games, and after a short period of downloading, play it right in your browser; no plugins required.

This is a brilliant look into the shape of the web in the future, where browsers will be able to run complicated applications without the need of any plugins, using just web-standard technologies.

You can look at this development as either a sign of the power of web browsers, or an indication of just how long it's been since the NES came out, that even an inefficient interpreted scripting language like JavaScript can now emulate its working.

This is certainly not the first project to allow you to play NES games right in your browser. The VirtualNES (vNES) website which has been around much longer, allows you to do just that by running an emulator written in Java; it performs and looks much better. JSNES is infact a "port" of vNES in JavaScript.

Despite the obvious disadvantages of playing a game with clunky controls, at slow speed in a small window, this demonstration is significant, as it demonstrates what the browser is capable of even on its own.

Check out the project in action at https://benfirshman.com/projects/jsnes/

The author of JSNES highly recommends using Chrome, as it runs the code significantly faster.