OCCAM is a software project initiated by Juergen Buchmueller in 2004. It aims to preserve information about obsolete computers, console and microelectronics from the amusement sector (i.e. games). In order to preserve such information in a meaningful way, one has to consider methods how to preserve not only the raw data about the objects, but also the emotions or feelings that were involved in playing the games. How would you do that?
One of the best known ways to transport this kind of information is to actually make the games playable again. Since not every museum can keep samples of every machine - and since some of the machines do not even exist anymore in physical form, or are not easy to acquire, emulating them seems to be the best choice to keep the gaming experience of the generations playing at home in the early 70s, the 80s and 90s of the 20th century alive for their successors.
OCCAM is all about the technical aspects of emulating obsolete machines. OCCAM is a framework allowing programmers to easily collect information regarding a specific system, while it makes it also easier to simulate the system itself and all of its chips and interfaces: keyboard, keypads, joysticks, video display, sound effects and much more.
OCCAM's code base is partially split off M.A.M.E., a project that aims to preserve arcade machines. OCCAM's target is the home sector of entertainment machines, as well as more obscure and non-CPU based hardware that does not fit into the scope of the MAME project. The code, however, was rewritten in large parts and there are quite a few differences between OCCAM and MAME. The focus in OCCAM is shifted towards presenting system information in more detail. That's why the integrated debugger does not only feature disassembly of the system's CPUs, but also gives details about calls, jumps, addresses, bits and pieces.
There have been other approaches to achieve what OCCAM tries to achieve, namely in the form of M.E.S.S., the "Multiple Emulator Super System". Lots of info of the currently existing OCCAM drivers was taken from MESS. I have myself been writing drivers and coding some core functionality for MESS in the years 1998 to 2000. I was unhappy with how things evolved, though, and recently the code base of MESS seems to have turned into something rather unreliable. Whenever I tried to run some of the drivers I wrote for the first builds of MESS, they were no longer running at all or crashing badly. To make a long story short: In my personal opinion MESS has become a mess.
OCCAM (so far) is not a mess and perhaps the choice of name suggest a different direction. I am trying hard to keep the code and dependencies at a sane level, while avoiding obstacles that MESS had to face while trying to keep up the pace of MAME (MESS always followed the MAME core changes very closely). To achieve a stable and sane environment in OCCAM involves rewriting lots of code that can be found in MAME's or MESS' code base, or even writing code from scratch based solely on the information found in those projects. This is what I'm doing now for the most part and for the first systems. The variety of demands of these systems to the OCCAM environment will hopefully define the framework's circumference rather sooner than later.
| Core functionality | ||||
|---|---|---|---|---|
| Section | original source | finished | comment | |
| System environment | new | 60% | from scratch based on ideas found in MAME | |
| Timer system | MAME | 99% | lots of renaming, basically the same as MAME | |
| Memory interface | MAME | 90% | lots of renaming, basically the same as MAME | |
| CPU interface | MAME | 90% | lots of renaming, some MAME specific things left out | |
| Sound interface | MAME | 90% | some renaming, few drivers yet | |
| Memory regions | new | 80% | names based on MAME | |
| ROM loading | new | 40% | macros based on MAME | |
| GUI | MAME | 80% | based on MAME window.c/h; large parts rewritten | |
| Debugger | new | 20% | rewritten from scratch | |
| OS dependencies | new | 50% | from scratch; so far only the SDL on *nix | |
| Emulated Central Processing Units | ||||
| CPU name | generator | accuracy | comment | system cross reference |
| non-CPU logic | none | 50% | doesn't work yet | PONG (the simulation works) |
| Intel 4004 | COMIC | 80% | seems good | Weinrich's i4004 Tic-Tac-Toe |
| Intel 4040 | COMIC | 60%(?) | untested in OCCAM | none yet |
| Intel 8080 | COMIC | 80% | untested in OCCAM | none yet |
| Intel 8085A | COMIC | 80% | seems good | TRS-80 Model 100 |
| Signetics 2650 | COMIC | 99% | seems perfect | Emerson Arcadia 2001 |
| Zilog Z80 | COMIC | 99% | seems perfect | Tandy TRS-80, EACA Colour Genie |
| Gameboy Z80 | COMIC | 25% | written down the code, untested | Gameboy, Gameboy Color, Super Gameboy |
| Intel 8086 | GENEM | 90% | T flag support | IBM PC-XT |
| Intel 80186 | GENEM | 90% | untested | none yet |
| Intel 80286 | GENEM | 90% | untested | none yet |
| Emulated Sound Chips | ||||
| Chip name | original source | accuracy | comment | system cross reference |
| PC speaker | new | 99% | written from scratch | IBM PC-XT |
| TRS-80 speaker | new | 99% | written from scratch | IBM PC-XT |
| AY-8910 | MAME | 99% | rewritten to fit in the OCCAM naming conventions | EACA Colour Genie |
| Emulated Video Chips | ||||
| Chip name | original source | accuracy | comment | system cross reference |
| Motorola 6845 (CRTC) | MESS | 95% | rewritten large parts | IBM PC-XT |
| Signetics 2637 | new | 90% | written from scratch based on MESS driver info and data-sheet | Emerson Arcadia 2001 |
| Color Graphics Adapter (CGA) | new | 90% | written from scratch, uses 6845 | IBM PC-XT |
| Hercules Graphics Card (HGC) | new | 90% | written from scratch, uses 6845 | IBM PC-XT |
| Tseng ET-4000 (VGA) | MESS | 75% | mostly rewritten | IBM PC-XT |
| Emulated Floppy Disk Controllers (FDC) | ||||
| Chip name | original source | accuracy | comment | system cross reference |
| Nippon Electronics Comp. NEC 765 | MESS | 80% | rewritten to fit in the OCCAM naming conventions | IBM PC-XT |
| Western Digital WD 179x | MESS | 60% | written based on MESS and old emulator code | Tandy TRS-80, EACA Colour Genie |
| Emulated Hard Disk Controllers (HDC) | ||||
| Chip name | original source | accuracy | comment | system cross reference |
| Western Digital WD 1004A | MESS | 60% | rewritten (almost from scratch) | IBM PC-XT |
| Various Chips | ||||
| Chip name | original source | accuracy | comment | system cross reference |
| Intel 8237 (DMA) | MESS | 75% | rewritten the interface and quite some code | IBM PC-XT |
| Intel 8250 (UART) | MESS | 50% | rewritten the interface and some code | IBM PC-XT |
| Intel 8253 (PIT) | MESS | 85% | rewritten the interface and timer code | IBM PC-XT |
| Intel 8255 (PPI) | MESS | 90% | rewritten the interface | IBM PC-XT |
| Intel 8259 (PIC) | MESS | 90% | rewritten the interface and some code | IBM PC-XT |