Cyclone 68000


Cyclone 68000 is an emulator for the 68000 microprocessor, written in ARM 32-bit assembly. It is aimed at ARM chips such as ARM7 and ARM9 cores, StrongARM and XScale, to interpret 68000 code as fast as possible. It can emulate all 68000 instructions quite accurately, instruction timing was synchronized with MAME's Musashi. Most 68k features are emulated (trace mode, address errors), but prefetch is not emulated.

Cyclone was started by fDave, I just added features on top of his design and fixed many bugs.

Release history

Latest code is available at github
Some of the older releases are available below:

0.0088    latest     download
  • Reduced amount of code in opcode handlers by ~23% by doing the following:
    • Removed duplicate opcode handlers
    • Optimized code to use less ARM instructions
    • Merged some duplicate handler endings
  • Cyclone now does better job avoiding pipeline interlocks.
  • Replaced incorrect handler of DBT with proper one.
  • Changed "MOVEA (An)+ An" behavior.
  • Fixed flag behavior of ROXR, ASL, LSR and NBCD in certain situations. Hopefully got them right now.
  • Cyclone no longer sets most significant bits while pushing PC to stack. Amiga Kickstart depends on this.
  • Added optional trace mode emulation.
  • Added optional address error emulation.
  • Additional functionality added for MAME and other ports (see config.h).
  • Added return value for IrqCallback to make it suitable for emulating devices which pass the vector number during interrupt acknowledge cycle. For usual autovector processing this function must return CYCLONE_INT_ACK_AUTOVECTOR, so those who are upgrading must add "return CYCLONE_INT_ACK_AUTOVECTOR;" to their IrqCallback functions.
  • Updated documentation.
0.00861    download
  • Fixed a minor issue with compressed jumptable (it was allocating 16 bytes less then needed for jumptable, so uncompression code was overwriting 16 bytes of whatever was after jumptable in the data segment).
  • Cyclone now can be customized to better suit your project, see config.h
  • Added an option to compress the jumptable at compile-time. Must call CycloneInit() at runtime to decompress it if enabled (see config.h).
  • Added missing CHK opcode handler (used by SeaQuest DSV).
  • Added missing TAS opcode handler (Gargoyles,Bubba N Stix,...). As in real genesis, memory write-back phase is ignored (but can be enabled in config.h if needed).
  • Added missing NBCD and TRAPV opcode handlers.
  • Added missing addressing mode for CMP/EOR.
  • Added some minor optimizations.
  • Removed 216 handlers for 2927 opcodes which were generated for invalid addressing modes.
  • Fixed flags for ASL, NEG, NEGX, DIVU, ADDX, SUBX, ROXR.
  • Undocumented flags for CHK, ABCD, SBCD and NBCD are now emulated the same way as in Musashi.
  • Added Uninitialized Interrupt emulation.
  • Altered timing for about half of opcodes to match Musashi's.
0.0082 - contributed by Reesy
  • Changed cyclone to clear cycles before returning when halted
  • Added Irq call back function. This allows emulators to be notified when cyclone has taken an interrupt allowing them to set internal flags which can help fix timing problems. See Cyclone.txt for details.
  • .asm version was broken and did not compile with armasm. Fixed.
  • Finished implementing Stop opcode. Now it really stops the processor
  • Initial release. See Cyclone.txt for changes from Dave's version.