summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/i8039/i8039.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/i8039/i8039.h')
-rw-r--r--src/emu/cpu/i8039/i8039.h175
1 files changed, 175 insertions, 0 deletions
diff --git a/src/emu/cpu/i8039/i8039.h b/src/emu/cpu/i8039/i8039.h
new file mode 100644
index 00000000000..85926da010a
--- /dev/null
+++ b/src/emu/cpu/i8039/i8039.h
@@ -0,0 +1,175 @@
+/**************************************************************************
+ * Intel 8039 Portable Emulator *
+ * *
+ * Copyright (C) 1997 by Mirko Buffoni *
+ * Based on the original work (C) 1997 by Dan Boris, an 8048 emulator *
+ * You are not allowed to distribute this software commercially *
+ * Please, notify me, if you make any changes to this file *
+ **************************************************************************/
+
+#ifndef _I8039_H
+#define _I8039_H
+
+#ifndef INLINE
+#define INLINE static inline
+#endif
+
+#include "cpuintrf.h"
+
+
+/**************************************************************************
+ Internal Clock divisor
+
+ External Clock is divided internally by 3 to produce the machine state
+ generator. This is then divided by 5 for the instruction cycle times.
+ (Each instruction cycle passes through 5 machine states).
+*/
+
+#define I8039_CLOCK_DIVIDER (3*5)
+
+
+
+enum { I8039_PC=1, I8039_SP, I8039_PSW, I8039_A, I8039_TC,
+ I8039_P1, I8039_P2, I8039_R0, I8039_R1, I8039_R2,
+ I8039_R3, I8039_R4, I8039_R5, I8039_R6, I8039_R7
+};
+
+extern void i8039_get_info(UINT32 state, cpuinfo *info);
+
+/* This handling of special I/O ports should be better for actual MAME
+ * architecture. (i.e., define access to ports { I8039_p1, I8039_p1, dkong_out_w })
+ */
+
+#define I8039_p0 0x100 /* Not used */
+#define I8039_p1 0x101
+#define I8039_p2 0x102
+#define I8039_p4 0x104
+#define I8039_p5 0x105
+#define I8039_p6 0x106
+#define I8039_p7 0x107
+#define I8039_t0 0x110
+#define I8039_t1 0x111
+#define I8039_bus 0x120
+
+/**************************************************************************
+ * I8035 section
+ **************************************************************************/
+#if (HAS_I8035)
+#define I8035_PC I8039_PC
+#define I8035_SP I8039_SP
+#define I8035_PSW I8039_PSW
+#define I8035_A I8039_A
+#define I8035_TC I8039_TC
+#define I8035_P1 I8039_P1
+#define I8035_P2 I8039_P2
+#define I8035_R0 I8039_R0
+#define I8035_R1 I8039_R1
+#define I8035_R2 I8039_R2
+#define I8035_R3 I8039_R3
+#define I8035_R4 I8039_R4
+#define I8035_R5 I8039_R5
+#define I8035_R6 I8039_R6
+#define I8035_R7 I8039_R7
+
+#define I8035_CLOCK_DIVIDER I8039_CLOCK_DIVIDER
+#define i8035_ICount i8039_ICount
+
+extern void i8035_get_info(UINT32 state, cpuinfo *info);
+#endif
+
+/**************************************************************************
+ * I8048 section
+ **************************************************************************/
+#if (HAS_I8048)
+#define I8048_PC I8039_PC
+#define I8048_SP I8039_SP
+#define I8048_PSW I8039_PSW
+#define I8048_A I8039_A
+#define I8048_TC I8039_TC
+#define I8048_P1 I8039_P1
+#define I8048_P2 I8039_P2
+#define I8048_R0 I8039_R0
+#define I8048_R1 I8039_R1
+#define I8048_R2 I8039_R2
+#define I8048_R3 I8039_R3
+#define I8048_R4 I8039_R4
+#define I8048_R5 I8039_R5
+#define I8048_R6 I8039_R6
+#define I8048_R7 I8039_R7
+
+#define I8048_CLOCK_DIVIDER I8039_CLOCK_DIVIDER
+#define i8048_ICount i8039_ICount
+
+extern void i8048_get_info(UINT32 state, cpuinfo *info);
+#endif
+
+/**************************************************************************
+ * N7751 section
+ **************************************************************************/
+#if (HAS_N7751)
+#define N7751_PC I8039_PC
+#define N7751_SP I8039_SP
+#define N7751_PSW I8039_PSW
+#define N7751_A I8039_A
+#define N7751_TC I8039_TC
+#define N7751_P1 I8039_P1
+#define N7751_P2 I8039_P2
+#define N7751_R0 I8039_R0
+#define N7751_R1 I8039_R1
+#define N7751_R2 I8039_R2
+#define N7751_R3 I8039_R3
+#define N7751_R4 I8039_R4
+#define N7751_R5 I8039_R5
+#define N7751_R6 I8039_R6
+#define N7751_R7 I8039_R7
+
+#define N7751_CLOCK_DIVIDER I8039_CLOCK_DIVIDER
+#define n7751_ICount i8039_ICount
+
+extern void n7751_get_info(UINT32 state, cpuinfo *info);
+#endif
+
+/*
+ * Input a UINT8 from given I/O port
+ */
+#define I8039_In(Port) ((UINT8)io_read_byte_8(Port))
+
+
+/*
+ * Output a UINT8 to given I/O port
+ */
+#define I8039_Out(Port,Value) (io_write_byte_8(Port,Value))
+
+
+/*
+ * Read a UINT8 from given memory location
+ */
+#define I8039_RDMEM(A) ((unsigned)program_read_byte_8(A))
+
+
+/*
+ * Write a UINT8 to given memory location
+ */
+#define I8039_WRMEM(A,V) (program_write_byte_8(A,V))
+
+
+/*
+ * I8039_RDOP() is identical to I8039_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 I8039_RDOP(A) ((unsigned)cpu_readop(A))
+
+
+/*
+ * I8039_RDOP_ARG() is identical to I8039_RDOP() except it is used for reading
+ * opcode arguments. This difference can be used to support systems that
+ * use different encoding mechanisms for opcodes and opcode arguments
+ */
+#define I8039_RDOP_ARG(A) ((unsigned)cpu_readop_arg(A))
+
+#ifdef MAME_DEBUG
+offs_t i8039_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram);
+#endif
+
+#endif /* _I8039_H */