Mame32, callus and NeoRageX have long been favourites in my playgrounds. Wandering around the web I stumbled on a document describing a machine that I remembered vaguely from my childhood days of reading "Electronics Australia". The Chip8 family (sometimes known as ETI 660 and the DREAM 6800).
So - what is CHIP-8?
CHIP-8 is a language interpreter which was used in the late 70s and early 80s on some small commercial computers like RCAs TELMAC 1800 and COSMAC VIP, and these El-Cheapo Make-It-Yourself Hobbyist computers of these times like the ETI 660 and the DREAM 6800... CHIP-8 allowed to program video games easily. The TELMAC 1800 and the COSMAC VIP were based on RCAs CDP-1802 processor. Both came with an audiocassette containing more than 12 games, dated 1977 (the complete listings of these programs, as well as these of the interpreter and the computer ROM were listed in the manuals of the COSMAC and the TELMAC). This interpreter has less than 40 instructions including arithmetic, control flow, graphics and sound.The interpreter had to be very compact because of the memory limitation of these machines: the COSMAC VIP had 2Kb (although it could be expanded to 32Kb), and the TELMAC had 4Kb. CHIP-8 was only 512 bytes long. The simplicity of this early language allowed to program these Pong, Brix, Invaders and Tank games we used to see at this early time of the videogame. A good programmer could make these games fit into less than 256 bytes.
What is an emulator ?
An emulator is the computer program that lets your computer emulate another computing device, as compared to simulation (an attempt to imitate functions of a computing device).
For example, a program imitating the Pacman arcade hardware and running real Pacman ROM on it is an emulator. A Pacman game written for your computer but using graphics similar to the real arcade is a simulator.
Why write an emulator in Java?
Im curious to know how fast java can go. First version (current version) is running quite slowly. I need to display instructions-per-second so improvements can be measured. I have a lot of experience optimising c++ (and even c) code (especially graphics routines) I have not had much experience (or need in the real-world) optimising the performance of a Java application. If I can successfully improve the performance of this application to allow a 233Mhz pc to run the emulation at a reasonable rate, I will move to phase 2 - a more advanced emulator (Currently Im considering either the nintendo gameboy, or the commodore c64)