The Amiga 500 – the most awesome computer ever made. (Photo copyright: Bill Bertram 2006 CC-BY-2.5)
The Commodore Amiga 500 was a home computer that had its heyday in the late 1980s and early 90s. For a while, at least in Europe, it was the computer for games and for demos – and for a whole generation of programmers who cut their teeth programming Motorola 680x0 assembler, AmigaBASIC, and C.
This website runs an emulator of the Amiga 500 inside of Chrome by using Portable Native Client, a way to run existing C/C++ in the browser in a safe way across operating systems and across machine architectures. On the main page you can boot the Amiga, insert floppy disks, play the games, and generally pretend it's still the late 80s. (We recommend some Enigma music or the soundtrack from the movie Top Gun in the background.)
The code was forked from PUAE, the Portable Universal Amiga Emulator, from GnoStiC's GitHub repo. A huge thank you to Bernd Schmidt, Toni Wilen, Mathias Ortmann, Richard Drummond, Mustafa Tufan (GnoStiC), and the many other developers who have contributed to the various generations of UAE over time. You guys rock!
Cloanto has kindly provided the Amiga Kickstart ROM for use with the Amiga Workbench 1.3 and the First Demos disks in this demo. To use other disks with the emulator, users can obtain a Kickstart ROM license by getting the Amiga Forever Essentials bundle for Chrome. If you are looking for a desktop Amiga emulator for Windows, check out Amiga Forever.
If you already have the disks as .adf files, just get a kickstart ROM license (see the previous question), and you should be good to go. If not, well, then it's complicated. Maybe try this search on Google.
All Chrome desktop devices, that is, any somewhat recent device running Mac OS, Microsoft Windows, Linux, or Chrome OS.
They do, but they are probably assigned to a joystick port. When they are assigned to a joystick port, they will not work as normal keys.
By design there is no way to disable Chrome's reservation of the escape key. Here are some substitute key mappings to use inside the Amiga:
JavaScript does not get notifications for all keys that the Amiga knows about. This being a demo, we didn't include a "send special key to emulator" feature except from those mention above.
We could potentially. File a request (see below).
Sorries, that feature didn't make the cut in this version. If enough people want to use NTSC content, I'll add that feature. The emulator was set up in PAL mode, as that's the mode that the largest amount of Amiga content was built for.
If full-screen mode is not actually filling up the entire screen, it's because Chrome does not support hardware accelerated graphics on your machine (or with your current driver).
This port doesn't have all the features that the Universal Amiga Emulator has. For some, such as saving games and connecting cartridges, they weren't deemed important for the demo; for others such as mounting local file systems they don't work in a web context. If you want a full-featured Amiga emulator, look as FS-UAE (free) or Amiga Forever.
See the official Portable Native Client developer documentation.
It doesn't work terribly well, but we were able to boot a few titles with the AROS ROM. YMMV. It is not enabled in the demo because it wasn't working reliably enough with the titles we tried.
PUAE's code base seemed the most accessible one to me at the time.
Probably. You could try using Emscripten/asm.js. Since the Portable Native Client tools spit out LLVM bitcode, it should be possible to generate asm.js-compliant JavaScript code from that. One challenge is that the Amiga emulator is currently multi-threaded, but it can probably be made single-threaded.
The emulator is something like 400,000 lines of C code. The original port to Native Client was done in four days. However, there was a lot of polishing afterwards, taking at least four times as long as the original port.
Good point. In fact, an SDL port for Native Client does exist in the nacl_ports repository. At the time when the bulk of the porting work was being done, however, the NaCl SDL port didn't have performant support for both Graphics2D and Graphics3D. And, yes, I wanted an excuse to familiarize myself with the Pepper interfaces.
Certainly. I've left suggestions here and there in the code, so check out the code and go to town! E.g., currently, rendering happens on the emulator thread; an obvious thing to try is to render on a separate thread.
Here are some things to try:
In general, look at the line of indicators at the bottom of the Amiga. The third box contains the number of frames per second. This is a PAL-mode Amiga, so your sound will be choppy if it not able to hit 50 frames per second on average. On the other hand, even if you get 50 frames per seconds perfectly, it may still look slightly uneven. This is because a modern display runs 60 Hz, so approximately every fifth frame will be doubled.
If you get stutter while choosing disks to insert, that's a known issues. We're working on it.
Yes. We'll fix it if it turns out to be a problem, but it's just so nice to have smooth scrolling when it's possible.
It sort of works. Use the dropdowns to select gamepad input, then press a few buttons on the gamepad to allow Chrome to connect it. Reset the Amiga if it doesn't work. And please report any issues.
First check the issue list to see if it has already been reported. If it has, just add any new information you may have and star the issue to vote for it.
If it hasn't already been reported use this form. Always remember to include the five 'A's:
Thanks!
The emulator code is GPL2 – check out the source. The Amiga ROM, OS, and First Demos files are provided under license by Cloanto. Amiga is a trademark of Amiga Inc. The favicon is provided with permission by Cloanto.
Oh, hai! I work for Google. I was a member of the Chrome team, and more specifically the Native Client team, from August 2010 to June 2013. You can find me on Google+