www.pudn.com > ncdzsrc.rar > m68000.h
/***************************************************************************
m68000.h
M68000 CPU インターフェイス用ヘッダ (ASM/C共用)
***************************************************************************/
#ifndef M68000__HEADER
#define M68000__HEADER
#include "osd_cpu.h"
enum
{
/* NOTE: M68K_SP fetches the current SP, be it USP, ISP, or MSP */
M68K_PC=1, M68K_SP, M68K_ISP, M68K_USP, M68K_MSP, M68K_SR, M68K_VBR,
M68K_SFC, M68K_DFC, M68K_CACR, M68K_CAAR, M68K_PREF_ADDR, M68K_PREF_DATA,
M68K_D0, M68K_D1, M68K_D2, M68K_D3, M68K_D4, M68K_D5, M68K_D6, M68K_D7,
M68K_A0, M68K_A1, M68K_A2, M68K_A3, M68K_A4, M68K_A5, M68K_A6, M68K_A7
};
extern int m68k_ICount;
/* Redirect memory calls */
struct m68k_memory_interface
{
offs_t opcode_xor; // Address Calculation
UINT8 (*read8)(offs_t); // Normal read 8 bit
UINT16 (*read16)(offs_t); // Normal read 16 bit
UINT32 (*read32)(offs_t); // Normal read 32 bit
void (*write8)(offs_t, UINT8); // Write 8 bit
void (*write16)(offs_t, UINT16); // Write 16 bit
void (*write32)(offs_t, UINT32); // Write 32 bit
void (*changepc)(offs_t); // Change PC routine
// For Encrypted Stuff
UINT8 (*read8pc)(offs_t); // PC Relative read 8 bit
UINT16 (*read16pc)(offs_t); // PC Relative read 16 bit
UINT32 (*read32pc)(offs_t); // PC Relative read 32 bit
UINT16 (*read16d)(offs_t); // Direct read 16 bit
UINT32 (*read32d)(offs_t); // Direct read 32 bit
};
/* The MAME API for MC68000 */
#define MC68000_INT_NONE 0
#define MC68000_IRQ_1 1
#define MC68000_IRQ_2 2
#define MC68000_IRQ_3 3
#define MC68000_IRQ_4 4
#define MC68000_IRQ_5 5
#define MC68000_IRQ_6 6
#define MC68000_IRQ_7 7
#define MC68000_INT_ACK_AUTOVECTOR -1
#define MC68000_INT_ACK_SPURIOUS -2
#define m68000_ICount m68k_ICount
#ifdef A68K0
extern const struct m68k_memory_interface a68k_memory_intf;
#define m68k_read_memory_8(address) (*a68k_memory_intf.read8)(address)
#define m68k_read_memory_16(address) (*a68k_memory_intf.read16)(address)
#define m68k_read_memory_32(address) (*a68k_memory_intf.read32)(address)
#define m68k_write_memory_8(address, value) (*a68k_memory_intf.write8)(address, value)
#define m68k_write_memory_16(address, value) (*a68k_memory_intf.write16)(address, value)
#define m68k_write_memory_32(address, value) (*a68k_memory_intf.write32)(address, value)
#endif
extern void m68000_init(void);
extern void m68000_reset(int param);
extern void m68000_exit(void);
extern int m68000_execute(int cycles);
extern void m68000_set_irq_line(int irqline, int state);
extern unsigned m68000_get_reg(int regnum);
extern void m68000_set_reg(int regnum, unsigned value);
extern void m68000_set_irq_callback(int (*callback)(int irqline));
void m68000_save_context(void);
void m68000_restore_context(void);
#if (M68K_DEBUG == 1)
extern unsigned m68000_dasm(char *buffer, unsigned pc);
#endif
#ifndef A68K0
// C Core header
#include "m68kncdz.h"
#endif
#endif /* M68000__HEADER */