summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/spc700/spc700.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/spc700/spc700.h')
-rw-r--r--src/emu/cpu/spc700/spc700.h154
1 files changed, 154 insertions, 0 deletions
diff --git a/src/emu/cpu/spc700/spc700.h b/src/emu/cpu/spc700/spc700.h
new file mode 100644
index 00000000000..41407488485
--- /dev/null
+++ b/src/emu/cpu/spc700/spc700.h
@@ -0,0 +1,154 @@
+#ifndef SPC700__HEADER
+#define SPC700__HEADER
+
+/* ======================================================================== */
+/* ============================= Configuration ============================ */
+/* ======================================================================== */
+
+#ifndef INLINE
+#define INLINE static
+#endif
+
+/* Turn on optimizations for SNES since it doesn't hook up the interrupt lines */
+#define SPC700_OPTIMIZE_SNES 1
+
+
+/* ======================================================================== */
+/* ============================== PROTOTYPES ============================== */
+/* ======================================================================== */
+
+enum
+{
+ SPC700_PC=1, SPC700_S, SPC700_P, SPC700_A, SPC700_X, SPC700_Y
+};
+
+#define SPC700_INT_NONE 0
+#define SPC700_INT_IRQ 1
+#define SPC700_INT_NMI 2
+
+
+
+/* ======================================================================== */
+/* ============================= INTERFACE API ============================ */
+/* ======================================================================== */
+
+/* This is the interface, not the implementation. Please call the */
+/* implementation APIs below. */
+
+
+void spc700_init(int index, int clock, const void *config, int (*irqcallback)(int));
+
+/* Pulse the RESET pin on the CPU */
+void spc700_reset(void);
+
+/* Set the RESET line on the CPU */
+void spc700_set_reset_line(int state, void* param);
+
+/* Clean up after the emulation core - Not used in this core - */
+void spc700_exit(void);
+
+/* Get the current CPU context */
+unsigned spc700_get_context(void *dst);
+
+/* Set the current CPU context */
+void spc700_set_context(void *src);
+
+/* Get the current Program Counter */
+unsigned spc700_get_pc(void);
+
+/* Set the current Program Counter */
+void spc700_set_pc(unsigned val);
+
+/* Get the current Stack Pointer */
+unsigned spc700_get_sp(void);
+
+/* Set the current Stack Pointer */
+void spc700_set_sp(unsigned val);
+
+/* Get a register from the core */
+unsigned spc700_get_reg(int regnum);
+
+/* Set a register in the core */
+void spc700_set_reg(int regnum, unsigned val);
+
+/* Note about NMI:
+ * NMI is a one-shot trigger. In order to trigger NMI again, you must
+ * clear NMI and then assert it again.
+ */
+void spc700_set_nmi_line(int state);
+
+/* Assert or clear the IRQ pin */
+void spc700_set_irq_line(int line, int state);
+
+/* Set the callback that will be called when an interrupt is serviced */
+void spc700_set_irq_callback(int (*callback)(int));
+
+/* Save the current CPU state to disk */
+void spc700_state_save(void *file);
+
+/* Load a CPU state from disk */
+void spc700_state_load(void *file);
+
+/* Get a formatted string representing a register and its contents */
+const char *spc700_info(void *context, int regnum);
+
+
+/* Pulse the SO (Set Overflow) pin on the CPU */
+void spc700_pulse_so(void);
+
+extern int spc700_ICount; /* cycle count */
+
+int spc700_execute(int clocks);
+
+
+/* ======================================================================== */
+/* =================== Functions Implemented by the Host ================== */
+/* ======================================================================== */
+
+/* Read data from RAM */
+unsigned int spc700_read_8(unsigned int address);
+
+/* Read data from the direct page */
+unsigned int spc700_read_8_direct(unsigned int address);
+
+/* Read data from ROM */
+unsigned int spc700_read_8_immediate(unsigned int address);
+unsigned int spc700_read_8_instruction(unsigned int address);
+
+/* Write data to RAM */
+void spc700_write_8(unsigned int address, unsigned int value);
+void spc700_write_8_direct(unsigned int address, unsigned int value);
+
+void spc700_jumping(unsigned int new_pc);
+void spc700_branching(unsigned int new_pc);
+
+
+
+/* ======================================================================== */
+/* ================================= MAME ================================= */
+/* ======================================================================== */
+
+#include "cpuintrf.h"
+
+extern void spc700_get_info(UINT32 state, cpuinfo *info);
+
+#define spc700_read_8(addr) program_read_byte_8(addr)
+#define spc700_write_8(addr,data) program_write_byte_8(addr,data)
+
+#define spc700_read_8_direct(A) spc700_read_8(A)
+#define spc700_write_8_direct(A, V) spc700_write_8(A, V)
+//#define spc700_read_instruction(A) cpu_readop(A)
+//#define spc700_read_8_immediate(A) cpu_readop_arg(A)
+#define spc700_read_instruction(A) program_read_byte_8(A)
+#define spc700_read_8_immediate(A) program_read_byte_8(A)
+#define spc700_jumping(A) change_pc(A)
+#define spc700_branching(A) change_pc(A)
+
+
+
+/* ======================================================================== */
+/* ============================== END OF FILE ============================= */
+/* ======================================================================== */
+
+#endif /* SPC700__HEADER */
+