Pointer-ified the M377xx.

This commit is contained in:
R. Belmont 2008-11-23 02:55:26 +00:00
parent 2b5f8f5f0e
commit 987696750a
4 changed files with 862 additions and 874 deletions

File diff suppressed because it is too large Load Diff

View File

@ -85,12 +85,6 @@ enum
M37710_SER0_XMIT, M37710_SER1_REC, M37710_SER1_XMIT
};
/* ======================================================================== */
/* ============================== PROTOTYPES ============================== */
/* ======================================================================== */
extern int m37710_ICount; /* cycle count */
/* ======================================================================== */
/* ================================= MAME ================================= */
/* ======================================================================== */
@ -106,13 +100,13 @@ void m37710_state_load(void *file);
#undef M37710_CALL_DEBUGGER
#define M37710_CALL_DEBUGGER(x) debugger_instruction_hook(m37710i_cpu.device, x)
#define m37710_read_8(addr) memory_read_byte_16le(m37710i_cpu.program, addr)
#define m37710_write_8(addr,data) memory_write_byte_16le(m37710i_cpu.program, addr,data)
#define m37710_read_8_immediate(A) memory_read_byte_16le(m37710i_cpu.program, A)
#define m37710_read_16(addr) memory_read_word_16le(m37710i_cpu.program, addr)
#define m37710_write_16(addr,data) memory_write_word_16le(m37710i_cpu.program, addr,data)
#define m37710_jumping(A) change_pc(A)
#define M37710_CALL_DEBUGGER(x) debugger_instruction_hook(m37710i_cpu->device, x)
#define m37710_read_8(addr) memory_read_byte_16le(m37710i_cpu->program, addr)
#define m37710_write_8(addr,data) memory_write_byte_16le(m37710i_cpu->program, addr,data)
#define m37710_read_8_immediate(A) memory_read_byte_16le(m37710i_cpu->program, A)
#define m37710_read_16(addr) memory_read_word_16le(m37710i_cpu->program, addr)
#define m37710_write_16(addr,data) memory_write_word_16le(m37710i_cpu->program, addr,data)
#define m37710_jumping(A) change_pc(A)
#define m37710_branching(A)

View File

@ -96,18 +96,21 @@ struct _m37710i_cpu_struct
uint im4; /* Immediate load target */
uint irq_delay; /* delay 1 instruction before checking irq */
uint irq_level; /* irq level */
int ICount; /* cycle count */
uint source; /* temp register */
uint destination; /* temp register */
cpu_irq_callback int_ack;
const device_config *device;
const address_space *program;
const address_space *io;
uint stopped; /* Sets how the CPU is stopped */
void (*const *opcodes)(void); /* opcodes with no prefix */
void (*const *opcodes42)(void); /* opcodes with 0x42 prefix */
void (*const *opcodes89)(void); /* opcodes with 0x89 prefix */
uint (*get_reg)(int regnum);
void (*set_reg)(int regnum, uint val);
void (*set_line)(int line, int state);
int (*execute)(int cycles);
void (*const *opcodes)(m37710i_cpu_struct *m37710i_cpu); /* opcodes with no prefix */
void (*const *opcodes42)(m37710i_cpu_struct *m37710i_cpu); /* opcodes with 0x42 prefix */
void (*const *opcodes89)(m37710i_cpu_struct *m37710i_cpu); /* opcodes with 0x89 prefix */
uint (*get_reg)(m37710i_cpu_struct *m37710i_cpu, int regnum);
void (*set_reg)(m37710i_cpu_struct *m37710i_cpu, int regnum, uint val);
void (*set_line)(m37710i_cpu_struct *m37710i_cpu, int line, int state);
int (*execute)(m37710i_cpu_struct *m37710i_cpu, int cycles);
// on-board peripheral stuff
UINT8 m37710_regs[128];
@ -116,62 +119,54 @@ struct _m37710i_cpu_struct
};
extern m37710i_cpu_struct m37710i_cpu;
extern int m37710_ICount;
extern uint m37710i_source;
extern uint m37710i_destination;
extern uint m37710i_adc_tbl[];
extern uint m37710i_sbc_tbl[];
extern void (*const *const m37710i_opcodes[])(void);
extern void (*const *const m37710i_opcodes2[])(void);
extern void (*const *const m37710i_opcodes3[])(void);
extern uint (*const m37710i_get_reg[])(int regnum);
extern void (*const m37710i_set_reg[])(int regnum, uint val);
extern void (*const m37710i_set_line[])(int line, int state);
extern int (*const m37710i_execute[])(int cycles);
extern void (*const *const m37710i_opcodes[])(m37710i_cpu_struct *m37710i_cpu);
extern void (*const *const m37710i_opcodes2[])(m37710i_cpu_struct *m37710i_cpu);
extern void (*const *const m37710i_opcodes3[])(m37710i_cpu_struct *m37710i_cpu);
extern uint (*const m37710i_get_reg[])(m37710i_cpu_struct *m37710i_cpu,int regnum);
extern void (*const m37710i_set_reg[])(m37710i_cpu_struct *m37710i_cpu,int regnum, uint val);
extern void (*const m37710i_set_line[])(m37710i_cpu_struct *m37710i_cpu,int line, int state);
extern int (*const m37710i_execute[])(m37710i_cpu_struct *m37710i_cpu, int cycles);
#define REG_A m37710i_cpu.a /* Accumulator */
#define REG_B m37710i_cpu.b /* Accumulator hi byte */
#define REG_BA m37710i_cpu.ba /* Secondary Accumulator */
#define REG_BB m37710i_cpu.bb /* Secondary Accumulator hi byte */
#define REG_X m37710i_cpu.x /* Index X Register */
#define REG_Y m37710i_cpu.y /* Index Y Register */
#define REG_S m37710i_cpu.s /* Stack Pointer */
#define REG_PC m37710i_cpu.pc /* Program Counter */
#define REG_PPC m37710i_cpu.ppc /* Previous Program Counter */
#define REG_PB m37710i_cpu.pb /* Program Bank */
#define REG_DB m37710i_cpu.db /* Data Bank */
#define REG_D m37710i_cpu.d /* Direct Register */
#define FLAG_M m37710i_cpu.flag_m /* Memory/Accumulator Select Flag */
#define FLAG_X m37710i_cpu.flag_x /* Index Select Flag */
#define FLAG_N m37710i_cpu.flag_n /* Negative Flag */
#define FLAG_V m37710i_cpu.flag_v /* Overflow Flag */
#define FLAG_D m37710i_cpu.flag_d /* Decimal Mode Flag */
#define FLAG_I m37710i_cpu.flag_i /* Interrupt Mask Flag */
#define FLAG_Z m37710i_cpu.flag_z /* Zero Flag (inverted) */
#define FLAG_C m37710i_cpu.flag_c /* Carry Flag */
#define LINE_IRQ m37710i_cpu.line_irq /* Status of the IRQ line */
#define REG_IR m37710i_cpu.ir /* Instruction Register */
#define REG_IM m37710i_cpu.im /* Immediate load value */
#define REG_IM2 m37710i_cpu.im2 /* Immediate load target */
#define REG_IM3 m37710i_cpu.im3 /* Immediate load target */
#define REG_IM4 m37710i_cpu.im4 /* Immediate load target */
#define INT_ACK m37710i_cpu.int_ack /* Interrupt Acknowledge function pointer */
#define CLOCKS m37710_ICount /* Clock cycles remaining */
#define IRQ_DELAY m37710i_cpu.irq_delay /* Delay 1 instruction before checking IRQ */
#define CPU_STOPPED m37710i_cpu.stopped /* Stopped status of the CPU */
#define REG_A m37710i_cpu->a /* Accumulator */
#define REG_B m37710i_cpu->b /* Accumulator hi byte */
#define REG_BA m37710i_cpu->ba /* Secondary Accumulator */
#define REG_BB m37710i_cpu->bb /* Secondary Accumulator hi byte */
#define REG_X m37710i_cpu->x /* Index X Register */
#define REG_Y m37710i_cpu->y /* Index Y Register */
#define REG_S m37710i_cpu->s /* Stack Pointer */
#define REG_PC m37710i_cpu->pc /* Program Counter */
#define REG_PPC m37710i_cpu->ppc /* Previous Program Counter */
#define REG_PB m37710i_cpu->pb /* Program Bank */
#define REG_DB m37710i_cpu->db /* Data Bank */
#define REG_D m37710i_cpu->d /* Direct Register */
#define FLAG_M m37710i_cpu->flag_m /* Memory/Accumulator Select Flag */
#define FLAG_X m37710i_cpu->flag_x /* Index Select Flag */
#define FLAG_N m37710i_cpu->flag_n /* Negative Flag */
#define FLAG_V m37710i_cpu->flag_v /* Overflow Flag */
#define FLAG_D m37710i_cpu->flag_d /* Decimal Mode Flag */
#define FLAG_I m37710i_cpu->flag_i /* Interrupt Mask Flag */
#define FLAG_Z m37710i_cpu->flag_z /* Zero Flag (inverted) */
#define FLAG_C m37710i_cpu->flag_c /* Carry Flag */
#define LINE_IRQ m37710i_cpu->line_irq /* Status of the IRQ line */
#define REG_IR m37710i_cpu->ir /* Instruction Register */
#define REG_IM m37710i_cpu->im /* Immediate load value */
#define REG_IM2 m37710i_cpu->im2 /* Immediate load target */
#define REG_IM3 m37710i_cpu->im3 /* Immediate load target */
#define REG_IM4 m37710i_cpu->im4 /* Immediate load target */
#define INT_ACK m37710i_cpu->int_ack /* Interrupt Acknowledge function pointer */
#define CLOCKS m37710i_cpu->ICount /* Clock cycles remaining */
#define IRQ_DELAY m37710i_cpu->irq_delay /* Delay 1 instruction before checking IRQ */
#define CPU_STOPPED m37710i_cpu->stopped /* Stopped status of the CPU */
#define FTABLE_OPCODES m37710i_cpu.opcodes
#define FTABLE_OPCODES2 m37710i_cpu.opcodes42
#define FTABLE_OPCODES3 m37710i_cpu.opcodes89
#define FTABLE_GET_REG m37710i_cpu.get_reg
#define FTABLE_SET_REG m37710i_cpu.set_reg
#define FTABLE_SET_LINE m37710i_cpu.set_line
#define FTABLE_EXECUTE m37710i_cpu.execute
#define FTABLE_GET_REG m37710i_cpu->get_reg
#define FTABLE_SET_REG m37710i_cpu->set_reg
#define FTABLE_SET_LINE m37710i_cpu->set_line
#define SRC m37710i_source /* Source Operand */
#define DST m37710i_destination /* Destination Operand */
#define SRC m37710i_cpu->source /* Source Operand */
#define DST m37710i_cpu->destination /* Destination Operand */
#define STOP_LEVEL_WAI 1
#define STOP_LEVEL_STOP 2
@ -181,15 +176,15 @@ extern int (*const m37710i_execute[])(int cycles);
#define EXECUTION_MODE_M1X0 2
#define EXECUTION_MODE_M1X1 3
INLINE void m37710i_set_execution_mode(uint mode)
INLINE void m37710i_set_execution_mode(m37710i_cpu_struct *m37710i_cpu, uint mode)
{
FTABLE_OPCODES = m37710i_opcodes[mode];
FTABLE_OPCODES2 = m37710i_opcodes2[mode];
FTABLE_OPCODES3 = m37710i_opcodes3[mode];
m37710i_cpu->opcodes = m37710i_opcodes[mode];
m37710i_cpu->opcodes42 = m37710i_opcodes2[mode];
m37710i_cpu->opcodes89 = m37710i_opcodes3[mode];
FTABLE_GET_REG = m37710i_get_reg[mode];
FTABLE_SET_REG = m37710i_set_reg[mode];
FTABLE_SET_LINE = m37710i_set_line[mode];
FTABLE_EXECUTE = m37710i_execute[mode];
m37710i_cpu->execute = m37710i_execute[mode];
}
/* ======================================================================== */
@ -317,7 +312,7 @@ INLINE void m37710i_set_execution_mode(uint mode)
#define CFLAG_AS_1() ((FLAG_C>>8)&1)
/* update IRQ state (internal use only) */
void m37710i_update_irqs(void);
void m37710i_update_irqs(m37710i_cpu_struct *m37710i_cpu);
/* ======================================================================== */
/* ================================== CPU ================================= */

File diff suppressed because it is too large Load Diff