summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/m6800/m6800.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/m6800/m6800.h')
-rw-r--r--src/emu/cpu/m6800/m6800.h223
1 files changed, 223 insertions, 0 deletions
diff --git a/src/emu/cpu/m6800/m6800.h b/src/emu/cpu/m6800/m6800.h
new file mode 100644
index 00000000000..7b711d6bc59
--- /dev/null
+++ b/src/emu/cpu/m6800/m6800.h
@@ -0,0 +1,223 @@
+/*** m6800: Portable 6800 class emulator *************************************/
+
+#ifndef _M6800_H
+#define _M6800_H
+
+#include "cpuintrf.h"
+
+enum {
+ M6800_PC=1, M6800_S, M6800_A, M6800_B, M6800_X, M6800_CC,
+ M6800_WAI_STATE };
+
+#define M6800_WAI 8 /* set when WAI is waiting for an interrupt */
+#define M6800_SLP 0x10 /* HD63701 only */
+
+
+#define M6800_IRQ_LINE 0 /* IRQ line number */
+#define M6800_TIN_LINE 1 /* P20/Tin Input Capture line (eddge sense) */
+ /* Active eddge is selecrable by internal reg. */
+ /* raise eddge : CLEAR_LINE -> ASSERT_LINE */
+ /* fall eddge : ASSERT_LINE -> CLEAR_LINE */
+ /* it is usuali to use PULSE_LINE state */
+
+extern void m6800_get_info(UINT32 state, cpuinfo *info);
+
+/****************************************************************************
+ * For now make the 6801 using the m6800 variables and functions
+ ****************************************************************************/
+#if (HAS_M6801)
+#define M6801_A M6800_A
+#define M6801_B M6800_B
+#define M6801_PC M6800_PC
+#define M6801_S M6800_S
+#define M6801_X M6800_X
+#define M6801_CC M6800_CC
+#define M6801_WAI_STATE M6800_WAI_STATE
+#define M6801_NMI_STATE M6800_NMI_STATE
+#define M6801_IRQ_STATE M6800_IRQ_STATE
+
+#define M6801_WAI M6800_WAI
+#define M6801_IRQ_LINE M6800_IRQ_LINE
+
+extern void m6801_get_info(UINT32 state, cpuinfo *info);
+#endif
+
+/****************************************************************************
+ * For now make the 6802 using the m6800 variables and functions
+ ****************************************************************************/
+#if (HAS_M6802)
+#define M6802_A M6800_A
+#define M6802_B M6800_B
+#define M6802_PC M6800_PC
+#define M6802_S M6800_S
+#define M6802_X M6800_X
+#define M6802_CC M6800_CC
+#define M6802_WAI_STATE M6800_WAI_STATE
+#define M6802_NMI_STATE M6800_NMI_STATE
+#define M6802_IRQ_STATE M6800_IRQ_STATE
+
+#define M6802_WAI M6800_WAI
+#define M6802_IRQ_LINE M6800_IRQ_LINE
+
+extern void m6802_get_info(UINT32 state, cpuinfo *info);
+#endif
+
+/****************************************************************************
+ * For now make the 6803 using the m6800 variables and functions
+ ****************************************************************************/
+#if (HAS_M6803)
+#define M6803_A M6800_A
+#define M6803_B M6800_B
+#define M6803_PC M6800_PC
+#define M6803_S M6800_S
+#define M6803_X M6800_X
+#define M6803_CC M6800_CC
+#define M6803_WAI_STATE M6800_WAI_STATE
+#define M6803_NMI_STATE M6800_NMI_STATE
+#define M6803_IRQ_STATE M6800_IRQ_STATE
+
+#define M6803_WAI M6800_WAI
+#define M6803_IRQ_LINE M6800_IRQ_LINE
+#define M6803_TIN_LINE M6800_TIN_LINE
+
+extern void m6803_get_info(UINT32 state, cpuinfo *info);
+#endif
+
+#if (HAS_M6803||HAS_HD63701)
+/* By default, on a port write port bits which are not set as output in the DDR */
+/* are set to the value returned by a read from the same port. If you need to */
+/* know the DDR for e.g. port 1, do m6803_internal_registers_r(M6801_DDR1) */
+
+#define M6803_DDR1 0x00
+#define M6803_DDR2 0x01
+#define M6803_DDR3 0x04
+#define M6803_DDR4 0x05
+
+#define M6803_PORT1 0x100
+#define M6803_PORT2 0x101
+#define M6803_PORT3 0x102
+#define M6803_PORT4 0x103
+#endif
+
+/****************************************************************************
+ * For now make the 6808 using the m6800 variables and functions
+ ****************************************************************************/
+#if (HAS_M6808)
+#define M6808_A M6800_A
+#define M6808_B M6800_B
+#define M6808_PC M6800_PC
+#define M6808_S M6800_S
+#define M6808_X M6800_X
+#define M6808_CC M6800_CC
+#define M6808_WAI_STATE M6800_WAI_STATE
+#define M6808_NMI_STATE M6800_NMI_STATE
+#define M6808_IRQ_STATE M6800_IRQ_STATE
+
+#define M6808_WAI M6800_WAI
+#define M6808_IRQ_LINE M6800_IRQ_LINE
+
+extern void m6808_get_info(UINT32 state, cpuinfo *info);
+#endif
+
+/****************************************************************************
+ * For now make the HD63701 using the m6800 variables and functions
+ ****************************************************************************/
+#if (HAS_HD63701)
+#define HD63701_A M6800_A
+#define HD63701_B M6800_B
+#define HD63701_PC M6800_PC
+#define HD63701_S M6800_S
+#define HD63701_X M6800_X
+#define HD63701_CC M6800_CC
+#define HD63701_WAI_STATE M6800_WAI_STATE
+#define HD63701_NMI_STATE M6800_NMI_STATE
+#define HD63701_IRQ_STATE M6800_IRQ_STATE
+
+#define HD63701_WAI M6800_WAI
+#define HD63701_SLP M6800_SLP
+#define HD63701_IRQ_LINE M6800_IRQ_LINE
+#define HD63701_TIN_LINE M6800_TIN_LINE
+
+extern void hd63701_get_info(UINT32 state, cpuinfo *info);
+
+void hd63701_trap_pc(void);
+
+#define HD63701_DDR1 M6803_DDR1
+#define HD63701_DDR2 M6803_DDR2
+#define HD63701_DDR3 M6803_DDR3
+#define HD63701_DDR4 M6803_DDR4
+
+#define HD63701_PORT1 M6803_PORT1
+#define HD63701_PORT2 M6803_PORT2
+#define HD63701_PORT3 M6803_PORT3
+#define HD63701_PORT4 M6803_PORT4
+
+READ8_HANDLER( hd63701_internal_registers_r );
+WRITE8_HANDLER( hd63701_internal_registers_w );
+
+#endif
+
+/****************************************************************************
+ * For now make the NSC8105 using the m6800 variables and functions
+ ****************************************************************************/
+#if (HAS_NSC8105)
+#define NSC8105_A M6800_A
+#define NSC8105_B M6800_B
+#define NSC8105_PC M6800_PC
+#define NSC8105_S M6800_S
+#define NSC8105_X M6800_X
+#define NSC8105_CC M6800_CC
+#define NSC8105_WAI_STATE M6800_WAI_STATE
+#define NSC8105_NMI_STATE M6800_NMI_STATE
+#define NSC8105_IRQ_STATE M6800_IRQ_STATE
+
+#define NSC8105_WAI M6800_WAI
+#define NSC8105_IRQ_LINE M6800_IRQ_LINE
+#define NSC8105_TIN_LINE M6800_TIN_LINE
+
+extern void nsc8105_get_info(UINT32 state, cpuinfo *info);
+#endif
+
+/****************************************************************************/
+/* Read a byte from given memory location */
+/****************************************************************************/
+/* ASG 971005 -- changed to program_read_byte_8/program_write_byte_8 */
+#define M6800_RDMEM(Addr) ((unsigned)program_read_byte_8(Addr))
+
+/****************************************************************************/
+/* Write a byte to given memory location */
+/****************************************************************************/
+#define M6800_WRMEM(Addr,Value) (program_write_byte_8(Addr,Value))
+
+/****************************************************************************/
+/* M6800_RDOP() is identical to M6800_RDMEM() except it is used for reading */
+/* opcodes. In case of system with memory mapped I/O, this function can be */
+/* used to greatly speed up emulation */
+/****************************************************************************/
+#define M6800_RDOP(Addr) ((unsigned)cpu_readop(Addr))
+
+/****************************************************************************/
+/* M6800_RDOP_ARG() is identical to M6800_RDOP() but it's used for reading */
+/* opcode arguments. This difference can be used to support systems that */
+/* use different encoding mechanisms for opcodes and opcode arguments */
+/****************************************************************************/
+#define M6800_RDOP_ARG(Addr) ((unsigned)cpu_readop_arg(Addr))
+
+#ifndef FALSE
+# define FALSE 0
+#endif
+#ifndef TRUE
+# define TRUE (!FALSE)
+#endif
+
+#ifdef MAME_DEBUG
+offs_t m6800_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram);
+offs_t m6801_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram);
+offs_t m6802_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram);
+offs_t m6803_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram);
+offs_t m6808_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram);
+offs_t hd63701_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram);
+offs_t nsc8105_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram);
+#endif
+
+#endif /* _M6800_H */