⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cyclone.txt

📁 motorola ezx 平台下的fba模拟器
💻 TXT
📖 第 1 页 / 共 2 页
字号:

      _____            __                                     
     / ___/__ __ ____ / /___   ___  ___   ___________________ 
    / /__ / // // __// // _ \ / _ \/ -_) ___________________  
    \___/ \_, / \__//_/ \___//_//_/\__/ ___________________   
         /___/                                                
         ___________________  ____ ___   ___   ___   ___      
        ___________________  / __// _ \ / _ \ / _ \ / _ \     
       ___________________  / _ \/ _  // // // // // // /     
                            \___/\___/ \___/ \___/ \___/      
                                                              
___________________________________________________________________________

  Cyclone 68000 (c) Copyright 2004 Dave.   Free for non-commercial use

  Homepage: http://www.finalburn.com/
  Dave's e-mail: dev(atsymbol)finalburn.com
  Replace (atsymbol) with @

  Additional coding and bugfixes done by notaz, 2005, 2006
  Homepage: http://mif.vu.lt/~grig2790/Cyclone/
  e-mail: notasas(atsymbol)gmail.com
___________________________________________________________________________


What is it?
-----------

Cyclone 68000 is an emulator for the 68000 microprocessor, written in ARM 32-bit assembly.
It is aimed at chips such as ARM7 and ARM9 cores, StrongARM and XScale, to interpret 68000
code as fast as possible.

Flags are mapped onto ARM flags whenever possible, which speeds up the processing of opcode.


What's New
----------
v0.0086 notaz
  + 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.
  + Bugs fixed in MOVEP, LINK, ADDQ, DIVS handlers.
  * 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.

v0.0082 Reesy
  + Change 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.

v0.0081 notaz
  + .asm version was broken and did not compile with armasm. Fixed.
  + Finished implementing Stop opcode. Now it really stops the processor.

v0.0080 notaz
  + Added real cmpm opcode, it was using eor handler before this.
    Fixes Dune and Sensible Soccer.

v0.0078 notaz
  note: these bugs were actually found Reesy, I reimplemented these by
        using his changelog as a guide.
  + Fixed a problem with divu which was using long divisor instead of word.
    Fixes gear switching in Top Gear 2.
  + Fixed btst opcode, The bit to test should shifted a max of 31 or 7
    depending on if a register or memory location is being tested.
  + Fixed abcd,sbcd. They did bad decimal correction on invalid BCD numbers
    Score counters in Streets of Rage level end work now.
  + Changed flag handling of abcd,sbcd,addx,subx,asl,lsl,...
    Some ops did not have flag handling at all.
    Some ops must not change Z flag when result is zero, but they did.
    Shift ops must not change X if shift count is zero, but they did.
    There are probably still some flag problems left.
  + Patially implemented Stop and Reset opcodes - Fixes Thunderforce IV

v0.0075 notaz
  + Added missing displacement addressing mode for movem (Fantastic Dizzy)
  + Added OSP <-> A7 swapping code in opcodes, which change privilege mode
  + Implemented privilege violation, line emulator and divide by zero exceptions
  + Added negx opcode (Shining Force works!)
  + Added overflow detection for divs/divu

v0.0072 notaz
  note: I could only get v0.0069 cyclone, so I had to implement these myself using Dave's
        changelog as a guide.
  + Fixed a problem with divs - remainder should be negative when divident is negative
  + Added movep opcode (Sonic 3 works)
  + Fixed a problem with DBcc incorrectly decrementing if the condition is true (Shadow of the Beast)

v0.0069
  + Added SBCD and the flags for ABCD/SBCD. Score and time now works in games such as
    Rolling Thunder 2, Ghouls 'N Ghosts
  + Fixed a problem with addx and subx with 8-bit and 16-bit values.
    Ghouls 'N' Ghosts now works!

v0.0068
  + Added ABCD opcode (Streets of Rage works now!)

v0.0067
  + Added dbCC (After Burner)
  + Added asr EA (Sonic 1 Boss/Labyrinth Zone)
  + Added andi/ori/eori ccr (Altered Beast)
  + Added trap (After Burner)
  + Added special case for move.b (a7)+ and -(a7), stepping by 2
    After Burner is playable! Eternal Champions shows more
  + Fixed lsr.b/w zero flag (Ghostbusters)
    Rolling Thunder 2 now works!
  + Fixed N flag for .b and .w arithmetic. Golden Axe works!

v0.0066
  + Fixed a stupid typo for exg (orr r10,r10, not orr r10,r8), which caused alignment
    crashes on Strider

v0.0065
  + Fixed a problem with immediate values - they weren't being shifted up correctly for some
    opcodes. Spiderman works, After Burner shows a bit of graphics.
  + Fixed a problem with EA:"110nnn" extension word. 32-bit offsets were being decoded as 8-bit
    offsets by mistake. Castlevania Bloodlines seems fine now.
  + Added exg opcode
  + Fixed asr opcode (Sonic jumping left is fixed)
  + Fixed a problem with the carry bit in rol.b (Marble Madness)

v0.0064
  + Added rtr
  + Fixed addq/subq.l (all An opcodes are 32-bit) (Road Rash)
  + Fixed various little timings

v0.0063
  + Added link/unlk opcodes
  + Fixed various little timings
  + Fixed a problem with dbCC opcode being emitted at set opcodes
  + Improved long register access, the EA fetch now does ldr r0,[r7,r0,lsl #2] whenever
     possible, saving 1 or 2 cycles on many opcodes, which should give a nice speed up.
  + May have fixed N flag on ext opcode?
  + Added dasm for link opcode.

v0.0062
  * I was a bit too keen with the Arithmetic opcodes! Some of them should have been abcd,
    exg and addx. Removed the incorrect opcodes, pending re-adding them as abcd, exg and addx.
  + Changed unknown opcodes to act as nops.
    Not very technical, but fun - a few more games show more graphics ;)

v0.0060
  + Fixed divu (EA intro)
  + Added sf (set false) opcode - SOR2
  * Todo: pea/link/unlk opcodes

v0.0059: Added remainder to divide opcodes.


The new stuff
-------------

Before using Cyclone, be sure to customize config.h to better suit your project. All options
are documented inside that file.

IrqCallback has been changed a bit, unlike in previous version, it should not return anything.
If you need to change IRQ level, you can safely do that in your handler.

Cyclone has changed quite a bit from the time when Dave stopped updating it, but the rest of
documentation still applies, so read it if you haven't done that yet. If you have, check the
"Accessing ..." parts.


ARM Register Usage
------------------

See source code for up to date of register usage, however a summary is here:

  r0-3: Temporary registers
  r4  : Current PC + Memory Base (i.e. pointer to next opcode)
  r5  : Cycles remaining
  r6  : Pointer to Opcode Jump table
  r7  : Pointer to Cpu Context
  r8  : Current Opcode
  r9  : Flags (NZCV) in highest four bits
 (r10 : Temporary source value or Memory Base)
 (r11 : Temporary register)


How to Compile
--------------

Like Starscream and A68K, Cyclone uses a 'Core Creator' program which calculates and outputs
all possible 68000 Opcodes and a jump table into files called Cyclone.s and .asm
It then assembles these files into Cyclone.o and .obj

Cyclone.o is the GCC assembled version and Cyclone.obj is the Microsoft assembled version.

First unzip "Cyclone.zip" into a "Cyclone" directory.
If you are compiling for Windows CE, find ARMASM.EXE (the Microsoft ARM assembler) and
put it in the directory as well or put it on your path.

Open up Cyclone.dsw in Visual Studio 6.0, compile and run the project.
Cyclone.obj and Cyclone.o will be created.


Compiling without Visual C++
----------------------------
If you aren't using Visual C++, it still shouldn't be too hard to compile, just get a C compiler,
compile all the CPPs and C file, link them into an EXE, and run the exe.

  e.g. gcc Main.cpp OpAny.cpp OpArith.cpp OpBranch.cpp OpLogic.cpp OpMove.cpp Disa.c
  Main.exe


Adding to your project
----------------------

To add Cyclone to you project, add Cyclone.o or obj, and include Cyclone.h
There is one structure: 'struct Cyclone', and one function: CycloneRun

Don't worry if this seem very minimal - its all you need to run as many 68000s as you want.
It works with both C and C++.

Byteswapped Memory
------------------

If you have used Starscream, A68K or Turbo68K or similar emulators you'll be familiar with this!

Any memory which the 68000 can access directly must be have every two bytes swapped around.
This is to speed up 16-bit memory accesses, because the 68000 has Big-Endian memory
and ARM has Little-Endian memory.

Now you may think you only technically have to byteswap ROM, not RAM, because
16-bit RAM reads go through a memory handler and you could just return (mem[a]<<8) | mem[a+1].

This would work, but remember some systems can execute code from RAM as well as ROM, and

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -