O.C.C.A.M.

Obsolete Computers, Consoles And Microelectronics

What is this?

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.

Status

Core functionality
Sectionoriginal sourcefinishedcomment 
System environmentnew60%from scratch based on ideas found in MAME 
Timer systemMAME99%lots of renaming, basically the same as MAME 
Memory interfaceMAME90%lots of renaming, basically the same as MAME 
CPU interfaceMAME90%lots of renaming, some MAME specific things left out 
Sound interfaceMAME90%some renaming, few drivers yet 
Memory regionsnew80%names based on MAME 
ROM loadingnew40%macros based on MAME 
GUIMAME80%based on MAME window.c/h; large parts rewritten 
Debuggernew20%rewritten from scratch 
OS dependenciesnew50%from scratch; so far only the SDL on *nix 
 
Emulated Central Processing Units
CPU namegeneratoraccuracycommentsystem cross reference
non-CPU logicnone50%doesn't work yetPONG (the simulation works)
Intel 4004COMIC80%seems goodWeinrich's i4004 Tic-Tac-Toe
Intel 4040COMIC60%(?)untested in OCCAMnone yet
Intel 8080COMIC80%untested in OCCAMnone yet
Intel 8085ACOMIC80%seems goodTRS-80 Model 100
Signetics 2650COMIC99%seems perfectEmerson Arcadia 2001
Zilog Z80COMIC99%seems perfectTandy TRS-80, EACA Colour Genie
Gameboy Z80COMIC25%written down the code, untestedGameboy, Gameboy Color, Super Gameboy
Intel 8086GENEM90%T flag supportIBM PC-XT
Intel 80186GENEM90%untestednone yet
Intel 80286GENEM90%untestednone yet
 
Emulated Sound Chips
Chip nameoriginal sourceaccuracycommentsystem cross reference
PC speakernew99%written from scratchIBM PC-XT
TRS-80 speakernew99%written from scratchIBM PC-XT
AY-8910MAME99%rewritten to fit in the OCCAM naming conventionsEACA Colour Genie
 
Emulated Video Chips
Chip nameoriginal sourceaccuracycommentsystem cross reference
Motorola 6845 (CRTC)MESS95%rewritten large partsIBM PC-XT
Signetics 2637new90%written from scratch based on MESS driver info and data-sheetEmerson Arcadia 2001
Color Graphics Adapter (CGA)new90%written from scratch, uses 6845IBM PC-XT
Hercules Graphics Card (HGC)new90%written from scratch, uses 6845IBM PC-XT
Tseng ET-4000 (VGA)MESS75%mostly rewrittenIBM PC-XT
 
Emulated Floppy Disk Controllers (FDC)
Chip nameoriginal sourceaccuracycommentsystem cross reference
Nippon Electronics Comp. NEC 765MESS80%rewritten to fit in the OCCAM naming conventionsIBM PC-XT
Western Digital WD 179xMESS60%written based on MESS and old emulator codeTandy TRS-80, EACA Colour Genie
 
Emulated Hard Disk Controllers (HDC)
Chip nameoriginal sourceaccuracycommentsystem cross reference
Western Digital WD 1004AMESS60%rewritten (almost from scratch)IBM PC-XT
 
Various Chips
Chip nameoriginal sourceaccuracycommentsystem cross reference
Intel 8237 (DMA)MESS75%rewritten the interface and quite some codeIBM PC-XT
Intel 8250 (UART)MESS50%rewritten the interface and some codeIBM PC-XT
Intel 8253 (PIT)MESS85%rewritten the interface and timer codeIBM PC-XT
Intel 8255 (PPI)MESS90%rewritten the interfaceIBM PC-XT
Intel 8259 (PIC)MESS90%rewritten the interface and some codeIBM PC-XT

Links

  1. C.O.M.I.C. (Commonly Oriented Micro Instruction Compiler)
  2. genem emulator generator for the x86 family (8086 to 80286 so far)
  3. M.A.M.E. (Multiple Arcade Machine Emulator)
  4. M.E.S.S. (Multiple Emulation Super System)
  5. CVS repository (How to get the source)
  6. OCCAM CVSweb CVS module (defunct)