(device).m_drq_handler.set_callback(object); }
int dack_r();
+ int dack_rs();
void dack_w(int data);
void dack_ws(int data);
@@ -50,6 +51,7 @@ public:
UINT8 status_r();
void set_ready();
UINT8 get_command() { return buffer[0]; }
+ bool install_rom() { return (m_type != EC1841); }
protected:
// device-level overrides
@@ -61,6 +63,7 @@ protected:
int no_dma(void);
int get_lbasector();
void execute_read();
+ void execute_readsbuff();
void execute_write();
void execute_writesbuff();
void get_drive();
diff --git a/src/devices/bus/ti99x/datamux.cpp b/src/devices/bus/ti99x/datamux.cpp
index 996096a1a49..1df66bc5c1e 100644
--- a/src/devices/bus/ti99x/datamux.cpp
+++ b/src/devices/bus/ti99x/datamux.cpp
@@ -237,8 +237,9 @@ UINT16 ti99_datamux_device::debugger_read(address_space& space, UINT16 addr)
UINT8 lval = 0;
UINT8 hval = 0;
- if ((addr & 0xe000)==0x6000)
+ if ((addrb & 0xe000)==0x6000)
{
+ m_gromport->romgq_line(ASSERT_LINE);
m_gromport->readz(space, addrb+1, &lval);
m_gromport->readz(space, addrb, &hval);
}
@@ -272,8 +273,9 @@ void ti99_datamux_device::debugger_write(address_space& space, UINT16 addr, UINT
if (base32k != 0) m_ram16b[(addrb-base32k)>>1] = data;
else
{
- if ((addr & 0xe000)==0x6000)
+ if ((addrb & 0xe000)==0x6000)
{
+ m_gromport->romgq_line(ASSERT_LINE);
m_gromport->write(space, addr+1, data & 0xff);
m_gromport->write(space, addr, (data>>8) & 0xff);
}
diff --git a/src/devices/cpu/alto2/a2curt.cpp b/src/devices/cpu/alto2/a2curt.cpp
index 1980408f2b5..cf334a287cf 100644
--- a/src/devices/cpu/alto2/a2curt.cpp
+++ b/src/devices/cpu/alto2/a2curt.cpp
@@ -37,31 +37,11 @@ void alto2_cpu_device::f2_late_load_csr()
/**
* @brief curt_activate: called by the CPU when the cursor task becomes active
- *
- * Shift CSR to xpreg % 16 position to make it easier to
- * to handle the word xor in unload_word().
- *
- * xpreg % 16 cursor bits
- * [ first word ][ second word ]
- * ----------------------------------------------
- * 0 xxxxxxxxxxxxxxxx0000000000000000
- * 1 0xxxxxxxxxxxxxxxx000000000000000
- * 2 00xxxxxxxxxxxxxxxx00000000000000
- * ...
- * 14 00000000000000xxxxxxxxxxxxxxxx00
- * 15 000000000000000xxxxxxxxxxxxxxxx0
- *
*/
void alto2_cpu_device::activate_curt()
{
m_task_wakeup &= ~(1 << m_task);
m_dsp.curt_wakeup = false;
-
- int x = 01777 - m_dsp.xpreg;
- UINT32 bits = m_dsp.csr << (16 - (x & 15));
- m_dsp.cursor0 = static_cast(bits >> 16);
- m_dsp.cursor1 = static_cast(bits);
- m_dsp.curxpos = x / 16;
}
/** @brief initialize the cursor task F1 and F2 functions */
@@ -79,6 +59,4 @@ void alto2_cpu_device::reset_curt()
m_dsp.curt_blocks = false;
m_dsp.xpreg = 0;
m_dsp.csr = 0;
- m_dsp.curxpos = 0;
- m_dsp.cursor0 = m_dsp.cursor1 = 0;
}
diff --git a/src/devices/cpu/alto2/a2disp.cpp b/src/devices/cpu/alto2/a2disp.cpp
index e7a0474ea7c..f2c5b06a77f 100644
--- a/src/devices/cpu/alto2/a2disp.cpp
+++ b/src/devices/cpu/alto2/a2disp.cpp
@@ -245,11 +245,12 @@ static const UINT16 double_bits[256] = {
//! update the internal frame buffer and draw the scanline segment if changed
void alto2_cpu_device::update_framebuf_word(UINT16* framebuf, int x, int y, UINT16 word)
{
+ int xpword = (m_dsp.xpreg ^ 01777) / 16;
// mixing with the cursor
- if (x == m_dsp.curxpos + 0)
- word ^= m_dsp.cursor0;
- if (x == m_dsp.curxpos + 1)
- word ^= m_dsp.cursor1;
+ if (x == xpword++)
+ word ^= (m_dsp.csr << (m_dsp.xpreg % 16)) >> 16;
+ if (x == xpword)
+ word ^= (m_dsp.csr << (m_dsp.xpreg % 16)) & 0xffff;
// no change?
if (word == framebuf[x])
return;
@@ -263,14 +264,14 @@ void alto2_cpu_device::update_framebuf_word(UINT16* framebuf, int x, int y, UINT
void alto2_cpu_device::unload_word()
{
int x = m_unload_word;
- int y = ((m_dsp.hlc - m_dsp.vblank) & ~02001) ^ HLC1024;
+ int y = m_dsp.scanline;
- if (y < 0 || y >= ALTO2_DISPLAY_HEIGHT || x >= ALTO2_DISPLAY_VISIBLE_WORDS)
+ if (y < 0 || y >= ALTO2_DISPLAY_TOTAL_HEIGHT || x >= ALTO2_DISPLAY_VISIBLE_WORDS)
{
m_unload_time = -1;
return;
}
- UINT16* framebuf = m_dsp.framebuf.get() + y * ALTO2_DISPLAY_SCANLINE_WORDS;
+ UINT16* framebuf = m_dsp.framebuf.get() + y * ALTO2_DISPLAY_SCANLINE_WORDS;
UINT16 word = m_dsp.inverse;
UINT8 a38 = m_disp_a38[m_dsp.ra * 16 + m_dsp.wa];
if (FIFO_MBEMPTY(a38))
@@ -329,8 +330,14 @@ void alto2_cpu_device::display_state_machine()
{
// count horizontal line counters and wrap
m_dsp.hlc += 1;
- if (m_dsp.hlc > ALTO2_DISPLAY_HLC_END)
+ if (m_dsp.hlc > ALTO2_DISPLAY_HLC_END) {
m_dsp.hlc = ALTO2_DISPLAY_HLC_START;
+ m_dsp.scanline = 30;
+ m_dsp.vsync = true;
+ } else if (m_dsp.hlc == 1024) {
+ m_dsp.vsync = true;
+ m_dsp.scanline = 31;
+ }
// wake up the memory refresh task _twice_ on each scanline
m_task_wakeup |= 1 << task_mrt;
}
@@ -342,9 +349,6 @@ void alto2_cpu_device::display_state_machine()
if (A66_VBLANK(a66))
{
- // Rising edge of VBLANK: remember HLC[1-10] where the VBLANK starts
- m_dsp.vblank = m_dsp.hlc & ~(1 << 10);
-
LOG((this,LOG_DISPL,1, " VBLANK"));
// VSYNC is always within VBLANK, thus we handle it only here
@@ -357,6 +361,7 @@ void alto2_cpu_device::display_state_machine()
*/
m_task_wakeup |= 1 << task_dvt;
}
+ m_dsp.inverse = 0xffff;
}
else
{
@@ -385,9 +390,10 @@ void alto2_cpu_device::display_state_machine()
}
if (!A63_HBLANK(a63) && A63_HBLANK(m_dsp.a63))
{
+ m_dsp.scanline += 2;
// Falling edge of a63 HBLANK starts unloading of FIFO words
LOG((this,LOG_DISPL,1, " HBLANK\\ UNLOAD"));
- m_unload_time = ALTO2_DISPLAY_BITTIME(m_dsp.halfclock ? 32 : 16);
+ m_unload_time = ALTO2_DISPLAY_BITTIME(m_dsp.halfclock ? 40+32 : 40+16);
m_unload_word = 0;
}
}
@@ -470,7 +476,7 @@ void alto2_cpu_device::display_state_machine()
*/
void alto2_cpu_device::f2_late_evenfield()
{
- UINT16 r = HLC1024 ^ 1;
+ UINT16 r = m_dsp.odd ? 0 : 1;
LOG((this,LOG_DISPL,2," EVENFIELD branch (%#o | %#o)\n", m_next2, r));
m_next2 |= r;
}
@@ -499,12 +505,8 @@ void alto2_cpu_device::init_disp()
save_item(NAME(m_dsp.dwt_blocks));
save_item(NAME(m_dsp.curt_blocks));
save_item(NAME(m_dsp.curt_wakeup));
- save_item(NAME(m_dsp.vblank));
save_item(NAME(m_dsp.xpreg));
save_item(NAME(m_dsp.csr));
- save_item(NAME(m_dsp.curxpos));
- save_item(NAME(m_dsp.cursor0));
- save_item(NAME(m_dsp.cursor1));
m_disp_a38 = prom_load(machine(), &pl_displ_a38, memregion("displ_a38")->base());
m_disp_a63 = prom_load(machine(), &pl_displ_a63, memregion("displ_a63")->base());
@@ -512,7 +514,7 @@ void alto2_cpu_device::init_disp()
m_dsp.hlc = ALTO2_DISPLAY_HLC_START;
- m_dsp.framebuf = std::make_unique(ALTO2_DISPLAY_HEIGHT * ALTO2_DISPLAY_SCANLINE_WORDS);
+ m_dsp.framebuf = std::make_unique(ALTO2_DISPLAY_TOTAL_HEIGHT * ALTO2_DISPLAY_SCANLINE_WORDS);
m_dsp.patterns = auto_alloc_array(machine(), UINT8, 65536 * 16);
for (int y = 0; y < 65536; y++) {
UINT8* dst = m_dsp.patterns + y * 16;
@@ -520,7 +522,8 @@ void alto2_cpu_device::init_disp()
*dst++ = (~y >> (15 - x)) & 1;
}
- m_dsp.bitmap = std::make_unique(ALTO2_DISPLAY_WIDTH, ALTO2_DISPLAY_HEIGHT);
+ // Allocate a bitmap including the V/H blank areas
+ m_dsp.bitmap = std::make_unique(ALTO2_DISPLAY_TOTAL_WIDTH, ALTO2_DISPLAY_TOTAL_HEIGHT);
m_dsp.state = 0;
}
@@ -537,6 +540,7 @@ void alto2_cpu_device::reset_disp()
m_dsp.a66 = 0;
m_dsp.setmode = 0;
m_dsp.inverse = 0;
+ m_dsp.scanline = 30;
m_dsp.halfclock = false;
m_dsp.wa = 0;
m_dsp.ra = 0;
@@ -544,12 +548,10 @@ void alto2_cpu_device::reset_disp()
m_dsp.dwt_blocks = false;
m_dsp.curt_blocks = false;
m_dsp.curt_wakeup = false;
- m_dsp.vblank = 0;
+ m_dsp.vsync = false;
+ m_dsp.odd = false;
m_dsp.xpreg = 0;
m_dsp.csr = 0;
- m_dsp.curxpos = 0;
- m_dsp.cursor0 = 0;
- m_dsp.cursor1 = 0;
memset(m_dsp.framebuf.get(), 1, sizeof(UINT16) * ALTO2_DISPLAY_HEIGHT * ALTO2_DISPLAY_SCANLINE_WORDS);
}
@@ -557,10 +559,7 @@ void alto2_cpu_device::reset_disp()
UINT32 alto2_cpu_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
copybitmap(bitmap, *m_dsp.bitmap, 0, 0, 0, 0, cliprect);
+ m_dsp.vsync = false;
+ m_dsp.odd = !m_dsp.odd;
return 0;
}
-
-void alto2_cpu_device::screen_eof(screen_device &screen, bool state)
-{
- // FIXME: do we need this in some way?
-}
diff --git a/src/devices/cpu/alto2/a2disp.h b/src/devices/cpu/alto2/a2disp.h
index 282ccd94f56..823114e3066 100644
--- a/src/devices/cpu/alto2/a2disp.h
+++ b/src/devices/cpu/alto2/a2disp.h
@@ -39,7 +39,7 @@
* scanlines to the monitor. The frame rate is 60Hz, which is actually the rate
* of the half-frames. The rate for full frames is thus 30Hz.
*/
-#define ALTO2_DISPLAY_TOTAL_HEIGHT ((ALTO2_DISPLAY_HLC_END - ALTO2_DISPLAY_HLC_START) / 2)
+#define ALTO2_DISPLAY_TOTAL_HEIGHT ((ALTO2_DISPLAY_HLC_END + 1 - ALTO2_DISPLAY_HLC_START) / 2)
/**
* @brief display total width, including horizontal blanking
@@ -80,7 +80,8 @@
#define ALTO2_DISPLAY_HEIGHT 808
//! Visible width of the display; 38 x 16 bit words - 2 pixels.
-#define ALTO2_DISPLAY_WIDTH 606
+//#define ALTO2_DISPLAY_WIDTH 606
+#define ALTO2_DISPLAY_WIDTH 608
//! Visible words per scanline.
#define ALTO2_DISPLAY_VISIBLE_WORDS ((ALTO2_DISPLAY_WIDTH+15)/16)
@@ -197,7 +198,10 @@ struct {
UINT32 hlc; //!< horizontal line counter
UINT32 setmode; //!< value written by last SETMODE<-
UINT32 inverse; //!< set to 0xffff if line is inverse, 0x0000 otherwise
+ UINT32 scanline; //!< current scanline
bool halfclock; //!< false for normal pixel clock, true for half pixel clock
+ bool vsync; //!< true after vsync, false when end_of_frame was called
+ bool odd; //!< true if odd field
UINT16 fifo[ALTO2_DISPLAY_FIFO]; //!< display word fifo
UINT32 wa; //!< fifo input pointer (write address; 4-bit)
UINT32 ra; //!< fifo output pointer (read address; 4-bit)
@@ -207,12 +211,8 @@ struct {
bool dwt_blocks; //!< set true, if the DWT executed BLOCK
bool curt_blocks; //!< set true, if the CURT executed BLOCK
bool curt_wakeup; //!< set true, if CURT wakeups are generated
- UINT32 vblank; //!< most recent HLC with VBLANK still high (11-bit)
UINT32 xpreg; //!< cursor cursor x position register (10-bit)
UINT32 csr; //!< cursor shift register (16-bit)
- UINT32 curxpos; //!< helper: first cursor word in scanline
- UINT32 cursor0; //!< helper: shifted cursor data for left word
- UINT32 cursor1; //!< helper: shifted cursor data for right word
std::unique_ptr framebuf; //!< array of words of the raw bitmap that is displayed
UINT8 *patterns; //!< array of 65536 patterns (16 bytes) with 1 byte per pixel
std::unique_ptr bitmap; //!< MAME bitmap with 16 bit indices
diff --git a/src/devices/cpu/alto2/a2dwt.cpp b/src/devices/cpu/alto2/a2dwt.cpp
index 40bbe456a0e..c3ac954b432 100644
--- a/src/devices/cpu/alto2/a2dwt.cpp
+++ b/src/devices/cpu/alto2/a2dwt.cpp
@@ -42,25 +42,27 @@
#define FIFO_STOPWAKE(a38) (0 == (a38 & disp_a38_STOPWAKE) ? true : false)
/**
- * @brief block the display word task
+ * @brief Block the display word task.
*/
void alto2_cpu_device::f1_early_dwt_block()
{
m_dsp.dwt_blocks = true;
- /* clear the wakeup for the display word task */
+ // Clear the wakeup for the display word task
m_task_wakeup &= ~(1 << m_task);
LOG((this,LOG_DWT,2," BLOCK %s\n", task_name(m_task)));
- /* wakeup the display horizontal task, if it didn't block itself */
+ // Wakeup the display horizontal task, if it didn't block itself
if (!m_dsp.dht_blocks)
m_task_wakeup |= 1 << task_dht;
}
/**
- * @brief load the display data register
+ * @brief Load the display data register
+ * Pushes the word on the bus to the display FIFO.
+ * If the FIFO becomes full, the wakeup flag for task_dwt is reset.
*/
-void alto2_cpu_device::f2_late_dwt_load_ddr()
+void alto2_cpu_device::f2_late_load_ddr()
{
LOG((this,LOG_DWT,2," DDR<- BUS (%#o)\n", m_bus));
m_dsp.fifo[m_dsp.wa] = m_bus;
diff --git a/src/devices/cpu/alto2/a2dwt.h b/src/devices/cpu/alto2/a2dwt.h
index 74c6c94939b..788af460369 100644
--- a/src/devices/cpu/alto2/a2dwt.h
+++ b/src/devices/cpu/alto2/a2dwt.h
@@ -17,7 +17,7 @@ enum {
};
void f1_early_dwt_block(); //!< F1 func: block the display word task
-void f2_late_dwt_load_ddr(); //!< F2 func: load the display data register
+void f2_late_load_ddr(); //!< F2 func: load the display data register
void init_dwt(int task = task_dwt); //!< initialize the display word task
void exit_dwt(); //!< deinitialize the display word task
void reset_dwt(); //!< reset the display word task
diff --git a/src/devices/cpu/alto2/a2hw.cpp b/src/devices/cpu/alto2/a2hw.cpp
index 9c436433453..5a85c8c8083 100644
--- a/src/devices/cpu/alto2/a2hw.cpp
+++ b/src/devices/cpu/alto2/a2hw.cpp
@@ -230,7 +230,7 @@ WRITE16_MEMBER( alto2_cpu_device::mouse_buttons_w ) { X_WRBITS(m_hw.utilin,16,13
/**
* @brief read the UTILIN port
*
- * @param addr memory mapped I/O address to be read
+ * @param offset memory mapped I/O address to be read
* @return current value on the UTILIN port
*/
READ16_MEMBER( alto2_cpu_device::utilin_r )
@@ -250,7 +250,7 @@ READ16_MEMBER( alto2_cpu_device::utilin_r )
/**
* @brief read the XBUS port
*
- * @param addr memory mapped I/O address to be read
+ * @param offset memory mapped I/O address to be read
* @return current value on the XBUS port latch
*/
READ16_MEMBER( alto2_cpu_device::xbus_r )
diff --git a/src/devices/cpu/alto2/a2ram.cpp b/src/devices/cpu/alto2/a2ram.cpp
index f482b82f94f..14fe24dd21e 100644
--- a/src/devices/cpu/alto2/a2ram.cpp
+++ b/src/devices/cpu/alto2/a2ram.cpp
@@ -7,16 +7,13 @@
*****************************************************************************/
#include "alto2cpu.h"
-#define DEBUG_WRTRAM 0 //!< define to 1 to printf disassembled CRAM writes
+#define DEBUG_WRTRAM 0 //!< define to 1 to print CRAM writes
+#define DEBUG_RDRAM 0 //!< define to 1 to print CRAM reads
+#define DEBUG_BRANCH 0 //!< define to 1 to print branching to ROM/RAM
//! direct read access to the microcode CRAM
#define RD_CRAM(addr) (*reinterpret_cast(m_ucode_cram.get() + addr * 4))
-//! direct write access to the microcode CRAM
-#define WR_CRAM(addr,data) do { \
- *reinterpret_cast(m_ucode_cram.get() + addr * 4) = data; \
-} while (0)
-
/**
* @brief read the microcode ROM/RAM halfword
*
@@ -88,17 +85,30 @@ void alto2_cpu_device::rdram()
}
m_rdram_flag = false;
- if (ALTO2_UCODE_RAM_BASE + addr >= ALTO2_UCODE_SIZE) {
+ if (m_ucode_ram_base + addr >= m_ucode_size) {
value = 0177777; /* ??? */
LOG((this,LOG_CPU,0,"invalid address (%06o)\n", addr));
+#if DEBUG_RDRAM
+ printf("RD CRAM_BANKSEL=%d RAM%d [%04o] invalid address!\n",
+ GET_CRAM_BANKSEL(m_cram_addr), bank, wordaddr);
+#endif
return;
}
- value = RD_CRAM(addr) ^ ALTO2_UCODE_INVERTED;
+ value = *reinterpret_cast(m_ucode_cram.get() + addr * 4) ^ ALTO2_UCODE_INVERTED;
+#if DEBUG_RDRAM
+ char buffer[256];
+ UINT8* oprom = m_ucode_cram.get() + 4 * wordaddr;
+ disasm_disassemble(buffer, wordaddr, oprom, oprom, 0);
+ printf("RD CRAM_BANKSEL=%d RAM%d [%04o] upper:%06o lower:%06o value:%011o '%s'\n",
+ GET_CRAM_BANKSEL(m_cram_addr), bank, wordaddr, m_myl, m_alu,
+ value, buffer);
+#endif
if (GET_CRAM_HALFSEL(m_cram_addr)) {
- value = value >> 16;
- LOG((this,LOG_CPU,0,"upper:%06o\n", value & 0177777));
+ value >>= 16;
+ LOG((this,LOG_CPU,0,"upper:%06o\n", value));
} else {
- LOG((this,LOG_CPU,0,"lower:%06o\n", value & 0177777));
+ value &= 0177777;
+ LOG((this,LOG_CPU,0,"lower:%06o\n", value));
}
m_bus &= value;
}
@@ -115,25 +125,29 @@ void alto2_cpu_device::rdram()
*/
void alto2_cpu_device::wrtram()
{
- UINT32 bank = GET_CRAM_BANKSEL(m_cram_addr);
- UINT32 wordaddr = GET_CRAM_WORDADDR(m_cram_addr);
- UINT32 value = ((m_myl << 16) | m_alu) ^ ALTO2_UCODE_INVERTED;
+ const UINT32 bank = GET_CRAM_BANKSEL(m_cram_addr);
+ const UINT32 wordaddr = GET_CRAM_WORDADDR(m_cram_addr);
+ const UINT32 addr = bank * ALTO2_UCODE_PAGE_SIZE + wordaddr; // write RAM 0,1,2
+ const UINT32 value = (m_myl << 16) | m_alu;
- UINT32 addr = bank * ALTO2_UCODE_PAGE_SIZE + wordaddr; // write RAM 0,1,2
LOG((this,LOG_CPU,0," wrtram: RAM%d [%04o] upper:%06o lower:%06o", bank, wordaddr, m_myl, m_alu));
-#if DEBUG_WRTRAM
- printf("WR CRAM_BANKSEL=%d RAM%d [%04o] upper:%06o lower:%06o\n",
- GET_CRAM_BANKSEL(m_cram_addr), bank, wordaddr, m_myl, m_alu);
-#endif
-
m_wrtram_flag = false;
- if (ALTO2_UCODE_RAM_BASE + addr >= ALTO2_UCODE_SIZE) {
+ if (m_ucode_ram_base + addr >= m_ucode_size) {
LOG((this,LOG_CPU,0," invalid address %06o\n", addr));
return;
}
LOG((this,LOG_CPU,0,"\n"));
- WR_CRAM(addr, value);
+ *reinterpret_cast(m_ucode_cram.get() + addr * 4) = value ^ ALTO2_UCODE_INVERTED;
+
+#if DEBUG_WRTRAM
+ char buffer[256];
+ UINT8* oprom = m_ucode_cram.get() + 4 * wordaddr;
+ disasm_disassemble(buffer, wordaddr, oprom, oprom, 0);
+ printf("WR CRAM_BANKSEL=%d RAM%d [%04o] upper:%06o lower:%06o value:%011o '%s'\n",
+ GET_CRAM_BANKSEL(m_cram_addr), bank, wordaddr, m_myl, m_alu,
+ value, buffer);
+#endif
}
/**
@@ -183,6 +197,9 @@ void alto2_cpu_device::bs_late_load_sreg()
void alto2_cpu_device::branch_ROM(const char *from, int page)
{
(void)from;
+#if DEBUG_BRANCH
+ printf("SWMODE: branch from %s to ROM%d (%#o)\n", from, page, m_next2);
+#endif
m_next2 = (m_next2 & ALTO2_UCODE_PAGE_MASK) + page * ALTO2_UCODE_PAGE_SIZE;
LOG((this,LOG_RAM,2," SWMODE: branch from %s to ROM%d (%#o)\n", from, page, m_next2));
}
@@ -193,7 +210,10 @@ void alto2_cpu_device::branch_ROM(const char *from, int page)
void alto2_cpu_device::branch_RAM(const char *from, int page)
{
(void)from;
- m_next2 = (m_next2 & ALTO2_UCODE_PAGE_MASK) + ALTO2_UCODE_RAM_BASE + page * ALTO2_UCODE_PAGE_SIZE;
+#if DEBUG_BRANCH
+ printf("SWMODE: branch from %s to RAM%d (%#o)\n", from, page, m_next2);
+#endif
+ m_next2 = (m_next2 & ALTO2_UCODE_PAGE_MASK) + m_ucode_ram_base + page * ALTO2_UCODE_PAGE_SIZE;
LOG((this,LOG_RAM,2," SWMODE: branch from %s to RAM%d\n", from, page, m_next2));
}
@@ -211,147 +231,152 @@ void alto2_cpu_device::branch_RAM(const char *from, int page)
*/
void alto2_cpu_device::f1_late_swmode()
{
- /* currently executing in what page? */
- UINT16 current = m_mpc / ALTO2_UCODE_PAGE_SIZE;
+ // Currently executing in what CROM/CRAM page?
+ UINT16 page = m_mpc / ALTO2_UCODE_PAGE_SIZE;
+ UINT16 next;
-#if (ALTO2_UCODE_ROM_PAGES == 1 && ALTO2_UCODE_RAM_PAGES == 1)
- switch (current) {
- case 0:
- branch_RAM("ROM0", 0);
- break;
- case 1:
- branch_ROM("RAM0", 0);
- break;
- default:
- fatal(1, "Impossible current mpc %d\n", current);
- }
-#endif
-#if (ALTO2_UCODE_ROM_PAGES == 2 && ALTO2_UCODE_RAM_PAGES == 1)
- UINT16 next = X_RDBITS(m_next2,10,1,1);
-
- switch (current) {
- case 0: /* ROM0 to RAM0 or ROM1 */
- switch (next) {
+ switch (m_cram_config) {
+ case 1: // 1K CROM, 1K CRAM
+ switch (page) {
case 0:
branch_RAM("ROM0", 0);
break;
case 1:
- branch_ROM("ROM0", 1);
- break;
- default:
- fatal(1, "Impossible next %d\n", next);
- }
- break;
- case 1: /* ROM1 to ROM0 or RAM0 */
- switch (next) {
- case 0:
- branch_ROM("ROM1", 0);
- break;
- case 1:
- branch_RAM("ROM1", 0);
- break;
- default:
- fatal(1, "Impossible next %d\n", next);
- }
- break;
- case 2: /* RAM0 to ROM0 or ROM1 */
- switch (next) {
- case 0:
branch_ROM("RAM0", 0);
break;
- case 1:
- branch_ROM("RAM0", 1);
- break;
default:
- fatal(1, "Impossible next %d\n", next);
+ fatal(1, "Impossible current mpc %u\n", page);
}
break;
- default:
- fatal(1, "Impossible current mpc %d\n", current);
- }
-#endif
-#if (ALTO2_UCODE_ROM_PAGES == 1 && ALTO2_UCODE_RAM_PAGES == 3)
- UINT16 next = X_RDBITS(m_next2,10,1,2);
- switch (current) {
- case 0: /* ROM0 to RAM0, RAM2, RAM1, RAM0 */
- switch (next) {
- case 0:
- branch_RAM("ROM0", 0);
+ case 2: // 2K CROM, 1K CRAM
+ next = X_RDBITS(m_next2,10,1,1);
+ switch (page) {
+ case 0: /* ROM0 to RAM0 or ROM1 */
+ switch (next) {
+ case 0:
+ branch_RAM("ROM0", 0);
+ break;
+ case 1:
+ branch_ROM("ROM0", 1);
+ break;
+ default:
+ fatal(1, "Impossible next %u\n", next);
+ }
break;
- case 1:
- branch_RAM("ROM0", 2);
+ case 1: /* ROM1 to ROM0 or RAM0 */
+ switch (next) {
+ case 0:
+ branch_ROM("ROM1", 0);
+ break;
+ case 1:
+ branch_RAM("ROM1", 0);
+ break;
+ default:
+ fatal(1, "Impossible next %u\n", next);
+ }
break;
- case 2:
- branch_RAM("ROM0", 1);
- break;
- case 3:
- branch_RAM("ROM0", 0);
+ case 2: /* RAM0 to ROM0 or ROM1 */
+ switch (next) {
+ case 0:
+ branch_ROM("RAM0", 0);
+ break;
+ case 1:
+ branch_ROM("RAM0", 1);
+ break;
+ default:
+ fatal(1, "Impossible next %u\n", next);
+ }
break;
default:
- fatal(1, "Impossible next %d\n", next);
+ fatal(1, "Impossible current mpc %u\n", page);
}
break;
- case 1: /* RAM0 to ROM0, RAM2, RAM1, RAM1 */
- switch (next) {
- case 0:
- branch_ROM("RAM0", 0);
+
+ case 3: // 1K CROM, 3K CRAM
+ next = X_RDBITS(m_next2,10,1,2);
+
+ switch (page) {
+ case 0: /* ROM0 to RAM0, RAM2, RAM1, RAM0 */
+ switch (next) {
+ case 0:
+ branch_RAM("ROM0", 0);
+ break;
+ case 1:
+ branch_RAM("ROM0", 2);
+ break;
+ case 2:
+ branch_RAM("ROM0", 1);
+ break;
+ case 3:
+ branch_RAM("ROM0", 0);
+ break;
+ default:
+ fatal(1, "Impossible next %u\n", next);
+ }
break;
- case 1:
- branch_RAM("RAM0", 2);
+ case 1: /* RAM0 to ROM0, RAM2, RAM1, RAM1 */
+ switch (next) {
+ case 0:
+ branch_ROM("RAM0", 0);
+ break;
+ case 1:
+ branch_RAM("RAM0", 2);
+ break;
+ case 2:
+ branch_RAM("RAM0", 1);
+ break;
+ case 3:
+ branch_RAM("RAM0", 1);
+ break;
+ default:
+ fatal(1, "Impossible next %u\n", next);
+ }
break;
- case 2:
- branch_RAM("RAM0", 1);
+ case 2: /* RAM1 to ROM0, RAM2, RAM0, RAM0 */
+ switch (next) {
+ case 0:
+ branch_ROM("RAM1", 0);
+ break;
+ case 1:
+ branch_RAM("RAM1", 2);
+ break;
+ case 2:
+ branch_RAM("RAM1", 0);
+ break;
+ case 3:
+ branch_RAM("RAM1", 0);
+ break;
+ default:
+ fatal(1, "Impossible next %u\n", next);
+ }
break;
- case 3:
- branch_RAM("RAM0", 1);
+ case 3: /* RAM2 to ROM0, RAM1, RAM0, RAM0 */
+ switch (next) {
+ case 0:
+ branch_ROM("RAM2", 0);
+ break;
+ case 1:
+ branch_RAM("RAM2", 1);
+ break;
+ case 2:
+ branch_RAM("RAM2", 0);
+ break;
+ case 3:
+ branch_RAM("RAM2", 0);
+ break;
+ default:
+ fatal(1, "Impossible next %u\n", next);
+ }
break;
default:
- fatal(1, "Impossible next %d\n", next);
- }
- break;
- case 2: /* RAM1 to ROM0, RAM2, RAM0, RAM0 */
- switch (next) {
- case 0:
- branch_ROM("RAM1", 0);
- break;
- case 1:
- branch_RAM("RAM1", 2);
- break;
- case 2:
- branch_RAM("RAM1", 0);
- break;
- case 3:
- branch_RAM("RAM1", 0);
- break;
- default:
- fatal(1, "Impossible next %d\n", next);
- }
- break;
- case 3: /* RAM2 to ROM0, RAM1, RAM0, RAM0 */
- switch (next) {
- case 0:
- branch_ROM("RAM2", 0);
- break;
- case 1:
- branch_RAM("RAM2", 1);
- break;
- case 2:
- branch_RAM("RAM2", 0);
- break;
- case 3:
- branch_RAM("RAM2", 0);
- break;
- default:
- fatal(1, "Impossible next %d\n", next);
+ fatal(1, "Impossible current mpc %u\n", page);
}
break;
default:
- fatal(1, "Impossible current mpc %d\n", current);
+ fatal(1, "Impossible control ROM/RAM config %u (%u CROM pages, %u CRAM pages)\n",
+ m_cram_config, m_ucode_rom_pages, m_ucode_ram_pages);
}
-#else
- fatal(1, "Impossible control ROM/RAM combination %d/%d\n", ALTO2_UCODE_ROM_PAGES, ALTO2_UCODE_RAM_PAGES);
-#endif
}
/**
@@ -372,8 +397,6 @@ void alto2_cpu_device::f1_late_rdram()
LOG((this,LOG_RAM,2," RDRAM\n"));
}
-#if (ALTO2_UCODE_RAM_PAGES == 3)
-
/**
* @brief f1_load_rmr late: load the reset mode register
*
@@ -386,16 +409,17 @@ void alto2_cpu_device::f1_late_load_rmr()
LOG((this,LOG_RAM,2," RMR<-; BUS (%#o)\n", m_bus));
m_reset_mode = m_bus;
}
-#else // ALTO2_UCODE_RAM_PAGES != 3
+
/**
* @brief f1_load_srb late: load the S register bank from BUS[12-14]
+ * F1=013 corresponds to SRB<- in the emulator, if the RAM size is
+ * just 1K. It sets the S register bank for the current task.
*/
void alto2_cpu_device::f1_late_load_srb()
{
- m_s_reg_bank[m_task] = X_RDBITS(m_bus,16,12,14) % ALTO2_SREG_BANKS;
+ m_s_reg_bank[m_task] = X_RDBITS(m_bus,16,12,14) % m_sreg_banks;
LOG((this,LOG_RAM,2," SRB<-; srb[%d] := %#o\n", m_task, m_s_reg_bank[m_task]));
}
-#endif
/**
* @brief RAM related task slots initialization
diff --git a/src/devices/cpu/alto2/a2ram.h b/src/devices/cpu/alto2/a2ram.h
index 0077ded7a99..62745bdc5bd 100644
--- a/src/devices/cpu/alto2/a2ram.h
+++ b/src/devices/cpu/alto2/a2ram.h
@@ -7,35 +7,8 @@
*****************************************************************************/
#ifdef ALTO2_DEFINE_CONSTANTS
-#if (ALTO2_CRAM_CONFIG==1)
-#define ALTO2_UCODE_ROM_PAGES 1 //!< number of microcode ROM pages
-#define ALTO2_UCODE_RAM_PAGES 1 //!< number of microcode RAM pages
-#elif (ALTO2_CRAM_CONFIG==2)
-#define ALTO2_UCODE_ROM_PAGES 2 //!< number of microcode ROM pages
-#define ALTO2_UCODE_RAM_PAGES 1 //!< number of microcode RAM pages
-#elif (ALTO2_CRAM_CONFIG==3)
-#define ALTO2_UCODE_ROM_PAGES 1 //!< number of microcode ROM pages
-#define ALTO2_UCODE_RAM_PAGES 3 //!< number of microcode RAM pages
-#else
-#error "Undefined CROM/CRAM configuration"
-#endif
-
-/**
- * \brief number of S register banks
- * This depends on the number of RAM pages
- * 8 pages in 3K CRAM configuration
- * 1 page in 1K CRAM configurations
- */
-#if (ALTO2_UCODE_RAM_PAGES == 3)
-#define ALTO2_SREG_BANKS 8
-#else
-#define ALTO2_SREG_BANKS 1
-#endif
-
#define ALTO2_UCODE_PAGE_SIZE 02000 //!< number of words of microcode
#define ALTO2_UCODE_PAGE_MASK (ALTO2_UCODE_PAGE_SIZE-1) //!< mask for microcode ROM/RAM address
-#define ALTO2_UCODE_SIZE ((ALTO2_UCODE_ROM_PAGES + ALTO2_UCODE_RAM_PAGES) * ALTO2_UCODE_PAGE_SIZE) //!< total number of words of microcode
-#define ALTO2_UCODE_RAM_BASE (ALTO2_UCODE_ROM_PAGES * ALTO2_UCODE_PAGE_SIZE) //!< base offset for the RAM page(s)
#else // ALTO2_DEFINE_CONSTANTS
#ifndef _A2RAM_H_
@@ -51,11 +24,8 @@ enum {
f1_ram_swmode = f1_task_10, //!< f1 10: switch mode to CROM/CRAM in same page
f1_ram_wrtram = f1_task_11, //!< f1 11: start WRTRAM cycle
f1_ram_rdram = f1_task_12, //!< f1 12: start RDRAM cycle
-#if (ALTO2_UCODE_RAM_PAGES == 3)
f1_ram_load_rmr = f1_task_13, //!< f1 13: load the reset mode register
-#else // ALTO2_UCODE_RAM_PAGES != 3
- f1_ram_load_srb = f1_task_13 //!< f1 14: load the S register bank from BUS[12-14]
-#endif
+ f1_ram_load_srb = f1_task_13 //!< f1 13: load the S register bank from BUS[12-14]
};
void bs_early_read_sreg(); //!< bus source: drive bus by S register or M (MYL), if rsel is = 0
@@ -66,11 +36,8 @@ void branch_RAM(const char *from, int page); //!< branch to RAM page
void f1_late_swmode(); //!< F1 func: switch to micro program counter BUS[6-15] in other bank
void f1_late_wrtram(); //!< F1 func: start WRTRAM cycle
void f1_late_rdram(); //!< F1 func: start RDRAM cycle
-#if (ALTO2_UCODE_RAM_PAGES == 3)
void f1_late_load_rmr(); //!< F1 func: load the reset mode register
-#else // ALTO2_UCODE_RAM_PAGES != 3
void f1_late_load_srb(); //!< F1 func: load the S register bank from BUS[12-14]
-#endif
void init_ram(int task); //!< called by RAM related tasks
void exit_ram(); //!< deinitialize the RAM related tasks
void reset_ram(); //!< reset the RAM related tasks
diff --git a/src/devices/cpu/alto2/alto2cpu.cpp b/src/devices/cpu/alto2/alto2cpu.cpp
index ff9b98f66ab..6a4438c973c 100644
--- a/src/devices/cpu/alto2/alto2cpu.cpp
+++ b/src/devices/cpu/alto2/alto2cpu.cpp
@@ -60,8 +60,7 @@ alto2_log_t logprintf;
//**************************************************************************
DEVICE_ADDRESS_MAP_START( ucode_map, 32, alto2_cpu_device )
- AM_RANGE(0, ALTO2_UCODE_RAM_BASE - 1) AM_READ ( crom_r )
- AM_RANGE(ALTO2_UCODE_RAM_BASE, ALTO2_UCODE_SIZE - 1) AM_READWRITE( cram_r, cram_w )
+ AM_RANGE(0, 4*ALTO2_UCODE_PAGE_SIZE - 1) AM_READWRITE( crom_cram_r, crom_cram_w )
ADDRESS_MAP_END
DEVICE_ADDRESS_MAP_START( const_map, 16, alto2_cpu_device )
@@ -126,6 +125,12 @@ alto2_cpu_device::alto2_cpu_device(const machine_config& mconfig, const char* ta
m_ucode_config("ucode", ENDIANNESS_BIG, 32, 12, -2 ),
m_const_config("const", ENDIANNESS_BIG, 16, 8, -1 ),
m_iomem_config("iomem", ENDIANNESS_BIG, 16, 17, -1 ),
+ m_cram_config(2),
+ m_ucode_rom_pages(1),
+ m_ucode_ram_pages(2),
+ m_ucode_ram_base(ALTO2_UCODE_PAGE_SIZE),
+ m_ucode_size(3*ALTO2_UCODE_PAGE_SIZE),
+ m_sreg_banks(1),
m_ucode_crom(nullptr),
m_const_data(nullptr),
m_icount(0),
@@ -471,10 +476,8 @@ static const prom_load_t pl_ucode[] = {
/* dmap */ DMAP_DEFAULT,
/* dand */ KEEP,
/* type */ sizeof(UINT32)
- }
-
-#if (ALTO2_UCODE_ROM_PAGES > 1)
- ,
+ },
+ // NOTE: the Mesa 5.1 ucode PROM may be used as RAM, if m_cram_config == 3
{ // 02000-03777 RSEL(0)',RSEL(1)',RSEL(2)',RSEL(3)'
"xm51.u54",
nullptr,
@@ -595,7 +598,6 @@ static const prom_load_t pl_ucode[] = {
/* dand */ KEEP,
/* type */ sizeof(UINT32)
}
-#endif // (UCODE_ROM_PAGES > 1)
};
/**
@@ -811,13 +813,14 @@ void alto2_cpu_device::device_start()
// get a pointer to the IO address space
m_iomem = &space(AS_2);
- // decode ALTO2_UCODE_PAGES = 1 or 2 pages of micro code PROMs to CROM
- m_ucode_crom = prom_load(machine(), pl_ucode, memregion("ucode_proms")->base(), ALTO2_UCODE_ROM_PAGES, 8);
+ // Decode 2 pages of micro code PROMs to CROM
+ // If m_cram_config == 1 or 3, only the first page will be used
+ m_ucode_crom = prom_load(machine(), pl_ucode, memregion("ucode_proms")->base(), 2, 8);
- // allocate micro code CRAM
- m_ucode_cram = std::make_unique(sizeof(UINT32) * ALTO2_UCODE_RAM_PAGES * ALTO2_UCODE_PAGE_SIZE);
+ // allocate micro code CRAM for max 3 pages
+ m_ucode_cram = std::make_unique(sizeof(UINT32) * 3 * ALTO2_UCODE_PAGE_SIZE);
// fill with the micro code inverted bits value
- for (offs_t offset = 0; offset < ALTO2_UCODE_RAM_PAGES * ALTO2_UCODE_PAGE_SIZE; offset++)
+ for (offs_t offset = 0; offset < 3 * ALTO2_UCODE_PAGE_SIZE; offset++)
*reinterpret_cast(m_ucode_cram.get() + offset * 4) = ALTO2_UCODE_INVERTED;
// decode constant PROMs to m_const_data
@@ -1015,22 +1018,20 @@ void alto2_cpu_device::state_string_export(const device_state_entry &entry, std:
}
}
-//! read microcode CROM
-READ32_MEMBER ( alto2_cpu_device::crom_r )
+//! read microcode CROM or CRAM
+READ32_MEMBER ( alto2_cpu_device::crom_cram_r )
{
- return *reinterpret_cast(m_ucode_crom + offset * 4);
+ if (offset < m_ucode_ram_base)
+ return *reinterpret_cast(m_ucode_crom + offset * 4);
+ return *reinterpret_cast(m_ucode_cram.get() + (offset - m_ucode_ram_base) * 4);
}
-//! read microcode CRAM
-READ32_MEMBER ( alto2_cpu_device::cram_r )
+//! write microcode CROM or CRAM (CROM of course can't be written)
+WRITE32_MEMBER( alto2_cpu_device::crom_cram_w )
{
- return *reinterpret_cast(m_ucode_cram.get() + offset * 4);
-}
-
-//! write microcode CRAM
-WRITE32_MEMBER( alto2_cpu_device::cram_w )
-{
- *reinterpret_cast(m_ucode_cram.get() + offset * 4) = data;
+ if (offset < m_ucode_ram_base)
+ return;
+ *reinterpret_cast(m_ucode_cram.get() + (offset - m_ucode_ram_base) * 4) = data;
}
//! read constants PROM
@@ -1040,9 +1041,9 @@ READ16_MEMBER ( alto2_cpu_device::const_r )
}
//! direct read access to the microcode CROM or CRAM
-#define RD_UCODE(addr) (addr < ALTO2_UCODE_RAM_BASE ? \
+#define RD_UCODE(addr) (addr < m_ucode_ram_base ? \
*reinterpret_cast(m_ucode_crom + addr * 4) : \
- *reinterpret_cast(m_ucode_cram.get() + (addr - ALTO2_UCODE_RAM_BASE) * 4))
+ *reinterpret_cast(m_ucode_cram.get() + (addr - m_ucode_ram_base) * 4))
//-------------------------------------------------
// device_reset - device-specific reset
@@ -1055,6 +1056,7 @@ void alto2_cpu_device::device_reset()
ioport_port* etherid = ioport(":ETHERID");
if (etherid)
m_ether_id = etherid->read() & 0377;
+
// call all sub-devices' reset_...
reset_memory();
reset_disp();
@@ -2268,13 +2270,18 @@ UINT32 alto2_cpu_device::alu_74181(UINT32 a, UINT32 b, UINT8 smc)
/** @brief flag that tells wheter operation was 0: arithmetic (M=0) or 1: logic (M=1) */
#define ALUM A10_ALUM
-/** @brief execute the CPU for at most nsecs nano seconds */
+/** @brief execute the CPU for the number of cycles in m_icount */
void alto2_cpu_device::execute_run()
{
m_next = m_task_mpc[m_task]; // get current task's next mpc and address modifier
m_next2 = m_task_next2[m_task];
do {
+ if (m_dsp.vsync) {
+ // synchronizing to the vsync signal
+ continue;
+ }
+
m_mpc = m_next; // next instruction's micro program counter
m_mir = RD_UCODE(m_mpc); // fetch the micro code
@@ -2283,15 +2290,16 @@ void alto2_cpu_device::execute_run()
debugger_instruction_hook(this, m_mpc);
m_cycle++;
-
if (f1() == f1_load_mar && check_mem_load_mar_stall(m_rsel)) {
LOG((this,LOG_CPU,3, " MAR<- stall\n"));
continue;
}
+
if (f2() == f2_load_md && check_mem_write_stall()) {
LOG((this,LOG_CPU,3, " MD<- stall\n"));
continue;
}
+
/*
* Bus source decoding is not performed if f1 == f1_const
* or f2 == f2_const. These functions use the MIR BS field to
@@ -2320,33 +2328,32 @@ void alto2_cpu_device::execute_run()
// The constant memory is gated to the bus by F1 == f1_const, F2 == f2_const, or BS >= 4
if (!do_bs || bs() >= bs_task_4) {
const UINT32 addr = 8 * m_rsel + bs();
- // FIXME: is the format of m_const_data endian safe?
const UINT16 data = m_const_data[2*addr] | (m_const_data[2*addr+1] << 8);
m_bus &= data;
LOG((this,LOG_CPU,2," %#o; BUS &= %#o CONST[%03o]\n", m_bus, data, addr));
}
/*
- * early F2 function has to be called before early BS,
+ * Early F2 function has to be called before early BS,
* because the emulator task F2 acsource or acdest may
- * change the m_rsel
+ * change the value of m_rsel
*/
switch (f2()) {
- case f2_task_12: // f2 12 task specific
+ case f2_task_12: // f2 12 task specific
switch (m_task) {
case task_emu: // emulator task
f2_early_load_dns();
break;
}
break;
- case f2_task_13: // f2 13 task specific
+ case f2_task_13: // f2 13 task specific
switch (m_task) {
case task_emu: // emulator task
f2_early_acdest();
break;
}
break;
- case f2_task_16: // f2 16 task specific
+ case f2_task_16: // f2 16 task specific
switch (m_task) {
case task_emu: // emulator task
f2_early_acsource();
@@ -2366,22 +2373,22 @@ void alto2_cpu_device::execute_run()
break;
case bs_task_3: // BUS source is task specific
switch (m_task) {
- case task_emu: // emulator task
+ case task_emu: // emulator task
bs_early_read_sreg();
break;
- case task_ksec: // disk sector task
- case task_kwd: // disk word task
+ case task_ksec: // disk sector task
+ case task_kwd: // disk word task
bs_early_read_kstat();
break;
- case task_ether: // ethernet task
+ case task_ether: // ethernet task
bs_early_eidfct();
break;
- case task_mrt: // memory refresh task
- case task_dwt: // display word task
- case task_curt: // cursor task
- case task_dht: // display horizontal task
- case task_dvt: // display vertical task
- case task_part: // parity task
+ case task_mrt: // memory refresh task
+ case task_dwt: // display word task
+ case task_curt: // cursor task
+ case task_dht: // display horizontal task
+ case task_dvt: // display vertical task
+ case task_part: // parity task
break;
default:
bs_early_bad();
@@ -2389,20 +2396,20 @@ void alto2_cpu_device::execute_run()
break;
case bs_task_4: // BUS source is task specific
switch (m_task) {
- case task_emu: // emulator task
+ case task_emu: // emulator task
bs_early_load_sreg();
break;
- case task_ksec: // disk sector task
- case task_kwd: // disk word task
+ case task_ksec: // disk sector task
+ case task_kwd: // disk word task
bs_early_read_kdata();
break;
- case task_ether: // ethernet task
- case task_mrt: // memory refresh task
- case task_dwt: // display word task
- case task_curt: // cursor task
- case task_dht: // display horizontal task
- case task_dvt: // display vertical task
- case task_part: // parity task
+ case task_ether: // ethernet task
+ case task_mrt: // memory refresh task
+ case task_dwt: // display word task
+ case task_curt: // cursor task
+ case task_dht: // display horizontal task
+ case task_dvt: // display vertical task
+ case task_part: // parity task
break;
default:
bs_early_bad();
@@ -2414,9 +2421,9 @@ void alto2_cpu_device::execute_run()
case bs_mouse: // BUS source is mouse data
bs_early_mouse();
break;
- case bs_disp: // BUS source displacement (emulator task)
+ case bs_disp: // BUS source displacement (emulator task)
switch (m_task) {
- case task_emu: // emulator task
+ case task_emu: // emulator task
bs_early_emu_disp();
break;
default:
@@ -2428,10 +2435,10 @@ void alto2_cpu_device::execute_run()
// early F1 function
switch (f1()) {
- case f1_task: // f1 02 task switch
+ case f1_task: // f1 02 task switch
f1_early_task();
break;
- case f1_block: // f1 03 task block
+ case f1_block: // f1 03 task block
switch (m_task) {
case task_emu: // emulator task
f1_early_emu_block();
@@ -2466,28 +2473,28 @@ void alto2_cpu_device::execute_run()
}
break;
- case f1_task_13: // f1 13 task specific
+ case f1_task_13: // f1 13 task specific
switch (m_task) {
case task_ether: // ethernet task
f1_early_eilfct();
break;
}
break;
- case f1_task_14: // f1 14 task specific
+ case f1_task_14: // f1 14 task specific
switch (m_task) {
case task_ether: // ethernet task
f1_early_epfct();
break;
}
break;
- case f1_task_16: // f1 16 task specific
+ case f1_task_16: // f1 16 task specific
switch (m_task) {
case task_emu: // emulator task
f1_early_rsnf();
break;
}
break;
- case f1_task_17: // f1 17 task specific
+ case f1_task_17: // f1 17 task specific
switch (m_task) {
case task_emu: // emulator task
f1_early_startf();
@@ -2520,27 +2527,27 @@ void alto2_cpu_device::execute_run()
// late F1 function call now
switch (f1()) {
- case f1_load_mar: // f1 01 load memory address register
+ case f1_load_mar: // f1 01 load memory address register
f1_late_load_mar();
break;
- case f1_l_lsh_1: // f1 04 left shift L once
+ case f1_l_lsh_1: // f1 04 left shift L once
f1_late_l_lsh_1();
break;
- case f1_l_rsh_1: // f1 05 right shift L once
+ case f1_l_rsh_1: // f1 05 right shift L once
f1_late_l_rsh_1();
break;
- case f1_l_lcy_8: // f1 06 cycle L 8 times
+ case f1_l_lcy_8: // f1 06 cycle L 8 times
f1_late_l_lcy_8();
break;
- case f1_task_10: // f1 10 task specific
+ case f1_task_10: // f1 10 task specific
switch (m_task) {
case task_emu: // emulator task
f1_late_swmode();
break;
}
break;
- case f1_task_11: // f1 11 task specific
+ case f1_task_11: // f1 11 task specific
switch (m_task) {
case task_emu: // emulator task
f1_late_wrtram();
@@ -2551,7 +2558,7 @@ void alto2_cpu_device::execute_run()
break;
}
break;
- case f1_task_12: // f1 12 task specific
+ case f1_task_12: // f1 12 task specific
switch (m_task) {
case task_emu: // emulator task
f1_late_rdram();
@@ -2562,14 +2569,13 @@ void alto2_cpu_device::execute_run()
break;
}
break;
- case f1_task_13: // f1 13 task specific
+ case f1_task_13: // f1 13 task specific
switch (m_task) {
case task_emu: // emulator task
-#if (ALTO2_UCODE_RAM_PAGES == 3)
- f1_late_load_rmr();
-#else
- f1_late_load_srb();
-#endif
+ if (m_cram_config == 3) // 3K CRAM available?
+ f1_late_load_rmr();
+ else
+ f1_late_load_srb();
break;
case task_ksec: // disk sector task
case task_kwd: // disk word task
@@ -2577,7 +2583,7 @@ void alto2_cpu_device::execute_run()
break;
}
break;
- case f1_task_14: // f1 14 task specific
+ case f1_task_14: // f1 14 task specific
switch (m_task) {
case task_ksec: // disk sector task
case task_kwd: // disk word task
@@ -2585,7 +2591,7 @@ void alto2_cpu_device::execute_run()
break;
}
break;
- case f1_task_15: // f1 15 task specific
+ case f1_task_15: // f1 15 task specific
switch (m_task) {
case task_emu: // emulator task
f1_late_emu_load_esrb();
@@ -2599,7 +2605,7 @@ void alto2_cpu_device::execute_run()
break;
}
break;
- case f1_task_16: // f1 16 task specific
+ case f1_task_16: // f1 16 task specific
switch (m_task) {
case task_ksec: // disk sector task
case task_kwd: // disk word task
@@ -2607,7 +2613,7 @@ void alto2_cpu_device::execute_run()
break;
}
break;
- case f1_task_17: // f1 17 task specific
+ case f1_task_17: // f1 17 task specific
switch (m_task) {
case task_ksec: // disk sector task
case task_kwd: // disk word task
@@ -2619,26 +2625,26 @@ void alto2_cpu_device::execute_run()
// late F2 function call now
switch (f2()) {
- case f2_bus_eq_zero: // f2 01 branch on bus equals 0
+ case f2_bus_eq_zero: // f2 01 branch on bus equals 0
f2_late_bus_eq_zero();
break;
- case f2_shifter_lt_zero: // f2 02 branch on shifter less than 0
+ case f2_shifter_lt_zero: // f2 02 branch on shifter less than 0
f2_late_shifter_lt_zero();
break;
- case f2_shifter_eq_zero: // f2 03 branch on shifter equals 0
+ case f2_shifter_eq_zero: // f2 03 branch on shifter equals 0
f2_late_shifter_eq_zero();
break;
- case f2_bus: // f2 04 branch on BUS[6-15]
+ case f2_bus: // f2 04 branch on BUS[6-15]
f2_late_bus();
break;
- case f2_alucy: // f2 05 branch on (latched) ALU carry
+ case f2_alucy: // f2 05 branch on (latched) ALU carry
f2_late_alucy();
break;
- case f2_load_md: // f2 06 load memory data
+ case f2_load_md: // f2 06 load memory data
f2_late_load_md();
break;
- case f2_task_10: // f2 10 task specific
+ case f2_task_10: // f2 10 task specific
switch (m_task) {
case task_emu: // emulator task
f2_late_busodd();
@@ -2651,7 +2657,7 @@ void alto2_cpu_device::execute_run()
f2_late_eodfct();
break;
case task_dwt: // display word task
- f2_late_dwt_load_ddr();
+ f2_late_load_ddr();
break;
case task_curt: // cursor task
f2_late_load_xpreg();
@@ -2664,7 +2670,7 @@ void alto2_cpu_device::execute_run()
break;
}
break;
- case f2_task_11: // f2 11 task specific
+ case f2_task_11: // f2 11 task specific
switch (m_task) {
case task_emu: // emulator task
f2_late_magic();
@@ -2684,7 +2690,7 @@ void alto2_cpu_device::execute_run()
break;
}
break;
- case f2_task_12: // f2 12 task specific
+ case f2_task_12: // f2 12 task specific
switch (m_task) {
case task_emu: // emulator task
f2_late_load_dns();
@@ -2698,7 +2704,7 @@ void alto2_cpu_device::execute_run()
break;
}
break;
- case f2_task_13: // f2 13 task specific
+ case f2_task_13: // f2 13 task specific
switch (m_task) {
case task_ksec: // disk sector task
case task_kwd: // disk word task
@@ -2709,7 +2715,7 @@ void alto2_cpu_device::execute_run()
break;
}
break;
- case f2_task_14: // f2 14 task specific
+ case f2_task_14: // f2 14 task specific
switch (m_task) {
case task_emu: // emulator task
f2_late_load_ir();
@@ -2723,7 +2729,7 @@ void alto2_cpu_device::execute_run()
break;
}
break;
- case f2_task_15: // f2 15 task specific
+ case f2_task_15: // f2 15 task specific
switch (m_task) {
case task_emu: // emulator task
f2_late_idisp();
@@ -2737,7 +2743,7 @@ void alto2_cpu_device::execute_run()
break;
}
break;
- case f2_task_16: // f2 16 task specific
+ case f2_task_16: // f2 16 task specific
switch (m_task) {
case task_emu: // emulator task
f2_late_acsource();
@@ -2761,7 +2767,7 @@ void alto2_cpu_device::execute_run()
break;
case bs_task_4: // BUS source is task specific
switch (m_task) {
- case task_emu: // emulator task
+ case task_emu: // emulator task
bs_late_load_sreg();
break;
}
@@ -2771,7 +2777,7 @@ void alto2_cpu_device::execute_run()
// update T register, if LOADT is set
if (loadt()) {
- m_cram_addr = m_alu; // latch CRAM address
+ m_cram_addr = m_alu; // latch CRAM address
if (flags & TSELECT) {
m_t = m_alu; // T source is ALU
LOG((this,LOG_CPU,2, " T<- ALU (%#o)\n", m_alu));
@@ -2783,7 +2789,7 @@ void alto2_cpu_device::execute_run()
// update L register and LALUC0 if LOADL is set
if (loadl()) {
- m_l = m_alu; // load L from ALU
+ m_l = m_alu; // load L from ALU
if (flags & ALUM) {
m_laluc0 = 0; // logic operation - put 0 into latched carry
LOG((this,LOG_CPU,2, " L<- ALU (%#o); LALUC0<- %o\n", m_alu, 0));
@@ -2794,7 +2800,8 @@ void alto2_cpu_device::execute_run()
// update M (MYL) register, if a RAM related task is active
if (m_ram_related[m_task]) {
m_myl = m_alu; // load M from ALU, if 'GOODTASK'
- m_s[m_s_reg_bank[m_task]][0] = m_alu; // also writes to S[bank][0], which can't be read
+ // also writes to S[_task][0], which can't be read
+ m_s[m_s_reg_bank[m_task]][0] = m_alu;
LOG((this,LOG_CPU,2, " M<- ALU (%#o)\n", m_alu));
}
}
@@ -2811,14 +2818,19 @@ void alto2_cpu_device::execute_run()
m_task_next2[m_task] = m_next2;
m_task = m_next_task;
LOG((this,LOG_CPU,1, "task switch to %02o:%s (cycle %lld)\n", m_task, task_name(m_task), cycle()));
- m_next = m_task_mpc[m_task]; // get new task's mpc
- m_next2 = m_task_next2[m_task]; // get address modifier after task switch (needed?)
+ // Get the new task's mpc
+ m_next = m_task_mpc[m_task];
+ // Get address modifier after task switch.
+ m_next2 = m_task_next2[m_task];
- // let the task know it becomes active now and (most probably) reset the wakeup
+ // Let the task know it becomes active now and
+ // (most probably) reset the wakeup
switch (m_task) {
case task_emu: // emulator task
+ // No activate_emu();
break;
case task_ksec: // disk sector task
+ // No activate_ksec();
break;
case task_ether: // ethernet task
activate_eth();
@@ -2827,6 +2839,7 @@ void alto2_cpu_device::execute_run()
activate_mrt();
break;
case task_dwt: // display word task
+ // No activate_dwt();
break;
case task_curt: // cursor task
activate_curt();
@@ -2841,6 +2854,7 @@ void alto2_cpu_device::execute_run()
activate_part();
break;
case task_kwd: // disk word task
+ // No activate_kwd();
break;
}
}
@@ -2849,8 +2863,8 @@ void alto2_cpu_device::execute_run()
if (m_dsp_time >= 0) {
/**
* Subtract the microcycle time from the display time accu.
- * If it underflows, call the display state machine and add
- * the time for 32(!) pixel clocks to the accu.
+ * If it underflows, call the display state machine which
+ * adds the time for 32 pixel clocks to the accu.
* This is very close to every seventh CPU cycle
*/
m_dsp_time -= ALTO2_UCYCLE;
@@ -2863,7 +2877,7 @@ void alto2_cpu_device::execute_run()
* Subtract the microcycle time from the unload time accu.
* If it underflows, call the unload word function which adds
* the time for 16 or 32 pixel clocks to the accu, or ends
- * the unloading by leaving m_unload_time at -1.
+ * the FIFO unloading by leaving m_unload_time at -1.
*/
m_unload_time -= ALTO2_UCYCLE;
if (m_unload_time < 0)
@@ -2874,7 +2888,7 @@ void alto2_cpu_device::execute_run()
/**
* Subtract the microcycle time from the bitclk time accu.
* If it underflows, call the disk bitclk function which adds
- * the time for one bit as clocks to the accu, or ends
+ * the time for one bit as clock cycles to the accu, or ends
* the bitclk sequence by leaving m_bitclk_time at -1.
*/
m_bitclk_time -= ALTO2_UCYCLE;
@@ -2882,7 +2896,7 @@ void alto2_cpu_device::execute_run()
}
} while (m_icount-- > 0);
- /* save this task's mpc and address modifier */
+ // Save this task's mpc and address modifier
m_task_mpc[m_task] = m_next;
m_task_next2[m_task] = m_next2;
}
@@ -2900,7 +2914,7 @@ void alto2_cpu_device::hard_reset()
// every task starts at mpc = task number, in either ROM0 or RAM0
m_task_mpc[task] = (m_ctl2k_u38[task] >> 4) ^ 017;
if (0 == (m_reset_mode & (1 << task)))
- m_task_mpc[task] |= ALTO2_UCODE_RAM_BASE;
+ m_task_mpc[task] |= m_ucode_ram_base;
}
init_memory();
@@ -2931,11 +2945,36 @@ void alto2_cpu_device::hard_reset()
/** @brief software initiated reset (STARTF) */
void alto2_cpu_device::soft_reset()
{
+ // Setup the CROM and CRAM configuration
+ ioport_port* config = ioport(":CONFIG");
+ if (config)
+ m_cram_config = (config->read() >> 1) & 3;
+ switch (m_cram_config) {
+ case 0: // invalid, default to 1
+ case 1: // 1K CROM, 1K CRAM, 1 S register bank
+ m_ucode_rom_pages = 1;
+ m_ucode_ram_pages = 1;
+ m_sreg_banks = 1;
+ break;
+ case 2: // 2K CROM, 1K CRAM, 1 S register bank
+ m_ucode_rom_pages = 2;
+ m_ucode_ram_pages = 1;
+ m_sreg_banks = 1;
+ break;
+ case 3: // 1K CROM, 3K CRAM, 8 S register banks
+ m_ucode_rom_pages = 1;
+ m_ucode_ram_pages = 3;
+ m_sreg_banks = 8;
+ break;
+ }
+ m_ucode_ram_base = m_ucode_rom_pages * ALTO2_UCODE_PAGE_SIZE;
+ m_ucode_size = (m_ucode_rom_pages + m_ucode_ram_pages) * ALTO2_UCODE_PAGE_SIZE;
+
for (int task = 0; task < ALTO2_TASKS; task++) {
// every task starts at mpc = task number, in either ROM0 or RAM0
m_task_mpc[task] = (m_ctl2k_u38[task] >> 4) ^ 017;
if (0 == (m_reset_mode & (1 << task)))
- m_task_mpc[task] |= ALTO2_UCODE_RAM_BASE;
+ m_task_mpc[task] |= m_ucode_ram_base;
}
m_next2_task = task_emu; // switch to task 0 (emulator)
m_reset_mode = 0xffff; // all tasks start in ROM0 again
diff --git a/src/devices/cpu/alto2/alto2cpu.h b/src/devices/cpu/alto2/alto2cpu.h
index 823500a56cd..3993e79d816 100644
--- a/src/devices/cpu/alto2/alto2cpu.h
+++ b/src/devices/cpu/alto2/alto2cpu.h
@@ -46,11 +46,6 @@ enum {
#define ALTO2_DEBUG 1
#endif
-#ifndef ALTO2_CRAM_CONFIG
-//! Use default CROM/CRAM configuration 2.
-#define ALTO2_CRAM_CONFIG 2
-#endif
-
//!< Define to 1 to use the F9318 priority encoder code (broken).
#define USE_PRIO_F9318 0
@@ -200,9 +195,6 @@ public:
//! update the screen bitmap
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- //! screen VBLANK handler
- void screen_eof(screen_device &screen, bool state);
-
DECLARE_ADDRESS_MAP( ucode_map, 32 );
DECLARE_ADDRESS_MAP( const_map, 16 );
DECLARE_ADDRESS_MAP( iomem_map, 16 );
@@ -255,18 +247,22 @@ private:
address_space* m_iomem;
+ UINT32 m_cram_config; //!< CROM/CRAM configuration (1 .. 3)
+ UINT32 m_ucode_rom_pages; //!< Number of CROM pages; derived from m_cram_config
+ UINT32 m_ucode_ram_pages; //!< Number of CRAM pages; derived from m_cram_config
+ UINT32 m_ucode_ram_base; //!< Base offset of the CRAM addresses
+ UINT32 m_ucode_size; //!< Size of both, CROM and CRAM together
+ UINT32 m_sreg_banks; //!< Number of S register banks; derived from m_cram_config
+
UINT8* m_ucode_crom;
std::unique_ptr m_ucode_cram;
UINT8* m_const_data;
- //! read microcode CROM
- DECLARE_READ32_MEMBER ( crom_r );
+ //! read microcode CROM or CRAM, depending on m_ucode_ram_base
+ DECLARE_READ32_MEMBER ( crom_cram_r );
- //! read microcode CRAM
- DECLARE_READ32_MEMBER ( cram_r );
-
- //! write microcode CRAM
- DECLARE_WRITE32_MEMBER( cram_w );
+ //! write microcode CRAM, depending on m_ucode_ram_base (ignore writes to CROM)
+ DECLARE_WRITE32_MEMBER( crom_cram_w );
//! read constants PROM
DECLARE_READ16_MEMBER ( const_r );
@@ -568,7 +564,7 @@ private:
UINT16 m_next; //!< current micro instruction's next
UINT16 m_next2; //!< next micro instruction's next
UINT16 m_r[ALTO2_REGS]; //!< R register file
- UINT16 m_s[ALTO2_SREG_BANKS][ALTO2_REGS]; //!< S register file(s)
+ UINT16 m_s[8][ALTO2_REGS]; //!< S register file(s) (1 or 8 are used)
UINT16 m_bus; //!< wired-AND bus
UINT16 m_t; //!< T register
UINT16 m_alu; //!< the current ALU
diff --git a/src/devices/cpu/alto2/alto2dsm.cpp b/src/devices/cpu/alto2/alto2dsm.cpp
index d899cb4f8b5..57571352c53 100644
--- a/src/devices/cpu/alto2/alto2dsm.cpp
+++ b/src/devices/cpu/alto2/alto2dsm.cpp
@@ -344,7 +344,7 @@ offs_t alto2_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8
break;
case 7: // put the constant from PROM (RSELECT,BS) on the bus
pa = (rsel << 3) | bs;
- dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-%05o", const_prom[pa]);
+ dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-%05o ", const_prom[pa]);
break;
default:
dst += snprintf(dst, len - (size_t)(dst - buffer), "F1_%02o ", f1);
@@ -386,6 +386,8 @@ offs_t alto2_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8
dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-F2_%02o ", f2);
break;
}
+ if (dst > buffer && dst[-1] == ' ')
+ *--dst = '\0';
return result;
}
diff --git a/src/devices/cpu/g65816/g65816ds.cpp b/src/devices/cpu/g65816/g65816ds.cpp
index 5965da2e3eb..d27dd67b1dc 100644
--- a/src/devices/cpu/g65816/g65816ds.cpp
+++ b/src/devices/cpu/g65816/g65816ds.cpp
@@ -23,18 +23,81 @@ All rights reserved.
#define ADDRESS_65816(A) ((A)&0xffffff)
-struct g65816_opcode_struct
+namespace {
+
+class g65816_opcode_struct
{
- unsigned char name;
+public:
+ const char *name() const
+ {
+ return s_opnames[unsigned(m_name)];
+ }
+
+ bool is_call() const
+ {
+ switch (m_name)
+ {
+ case op::JSR:
+ case op::JSL:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ bool is_return() const
+ {
+ switch (m_name)
+ {
+ case op::RTI:
+ case op::RTL:
+ case op::RTS:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ static const g65816_opcode_struct &get(unsigned char ins)
+ {
+ return s_opcodes[ins];
+ }
+
unsigned char flag;
unsigned char ea;
+
+protected:
+ enum class op : unsigned
+ {
+ ADC , AND , ASL , BCC , BCS , BEQ , BIT , BMI , BNE , BPL , BRA ,
+ BRK , BRL , BVC , BVS , CLC , CLD , CLI , CLV , CMP , COP , CPX ,
+ CPY , DEA , DEC , DEX , DEY , EOR , INA , INC , INX , INY , JML ,
+ JMP , JSL , JSR , LDA , LDX , LDY , LSR , MVN , MVP , NOP , ORA ,
+ PEA , PEI , PER , PHA , PHB , PHD , PHK , PHP , PHX , PHY , PLA ,
+ PLB , PLD , PLP , PLX , PLY , REP , ROL , ROR , RTI , RTL , RTS ,
+ SBC , SEC , SED , SEI , SEP , STA , STP , STX , STY , STZ , TAX ,
+ TAY , TCS , TCD , TDC , TRB , TSB , TSC , TSX , TXA , TXS , TXY ,
+ TYA , TYX , WAI , WDM , XBA , XCE
+ };
+
+ g65816_opcode_struct(op n, unsigned char f, unsigned char e)
+ : flag(f)
+ , ea(e)
+ , m_name(n)
+ {
+ }
+
+ op m_name;
+
+ static const char *const s_opnames[];
+ static const g65816_opcode_struct s_opcodes[256];
};
enum
{
IMP , ACC , RELB, RELW, IMM , A , AI , AL , ALX , AX , AXI ,
AY , D , DI , DIY , DLI , DLIY, DX , DXI , DY , S , SIY ,
- SIG /*, MVN , MVP , PEA , PEI , PER */
+ SIG , MVN , MVP , PEA , PEI , PER
};
enum
@@ -44,20 +107,7 @@ enum
X /* check x bit */
};
-enum
-{
- ADC , AND , ASL , BCC , BCS , BEQ , BIT , BMI , BNE , BPL , BRA ,
- BRK , BRL , BVC , BVS , CLC , CLD , CLI , CLV , CMP , COP , CPX ,
- CPY , DEA , DEC , DEX , DEY , EOR , INA , INC , INX , INY , JML ,
- JMP , JSL , JSR , LDA , LDX , LDY , LSR , MVN , MVP , NOP , ORA ,
- PEA , PEI , PER , PHA , PHB , PHD , PHK , PHP , PHX , PHY , PLA ,
- PLB , PLD , PLP , PLX , PLY , REP , ROL , ROR , RTI , RTL , RTS ,
- SBC , SEC , SED , SEI , SEP , STA , STP , STX , STY , STZ , TAX ,
- TAY , TCS , TCD , TDC , TRB , TSB , TSC , TSX , TXA , TXS , TXY ,
- TYA , TYX , WAI , WDM , XBA , XCE
-};
-
-static const char *const g_opnames[] =
+const char *const g65816_opcode_struct::s_opnames[] =
{
"ADC", "AND", "ASL", "BCC", "BCS", "BEQ", "BIT", "BMI", "BNE", "BPL", "BRA",
"BRK", "BRL", "BVC", "BVS", "CLC", "CLD", "CLI", "CLV", "CMP", "COP", "CPX",
@@ -70,74 +120,76 @@ static const char *const g_opnames[] =
"TYA", "TYX", "WAI", "WDM", "XBA", "XCE"
};
-static const g65816_opcode_struct g_opcodes[256] =
+const g65816_opcode_struct g65816_opcode_struct::s_opcodes[256] =
{
- {BRK, I, SIG }, {ORA, M, DXI }, {COP, I, SIG }, {ORA, M, S },
- {TSB, M, D }, {ORA, M, D }, {ASL, M, D }, {ORA, M, DLI },
- {PHP, I, IMP }, {ORA, M, IMM }, {ASL, M, ACC }, {PHD, I, IMP },
- {TSB, M, A }, {ORA, M, A }, {ASL, M, A }, {ORA, M, AL },
- {BPL, I, RELB}, {ORA, M, DIY }, {ORA, M, DI }, {ORA, M, SIY },
- {TRB, M, D }, {ORA, M, DX }, {ASL, M, DX }, {ORA, M, DLIY},
- {CLC, I, IMP }, {ORA, M, AY }, {INA, I, IMP }, {TCS, I, IMP },
- {TRB, M, A }, {ORA, M, AX }, {ASL, M, AX }, {ORA, M, ALX },
- {JSR, I, A }, {AND, M, DXI }, {JSL, I, AL }, {AND, M, S },
- {BIT, M, D }, {AND, M, D }, {ROL, M, D }, {AND, M, DLI },
- {PLP, I, IMP }, {AND, M, IMM }, {ROL, M, ACC }, {PLD, I, IMP },
- {BIT, M, A }, {AND, M, A }, {ROL, M, A }, {AND, M, AL },
- {BMI, I, RELB}, {AND, M, DIY }, {AND, M, DI }, {AND, M, SIY },
- {BIT, M, DX }, {AND, M, DX }, {ROL, M, DX }, {AND, M, DLIY},
- {SEC, I, IMP }, {AND, M, AY }, {DEA, I, IMP }, {TSC, I, IMP },
- {BIT, M, AX }, {AND, M, AX }, {ROL, M, AX }, {AND, M, ALX },
- {RTI, I, IMP }, {EOR, M, DXI }, {WDM, I, IMP }, {EOR, M, S },
- {MVP, I, MVP }, {EOR, M, D }, {LSR, M, D }, {EOR, M, DLI },
- {PHA, I, IMP }, {EOR, M, IMM }, {LSR, M, ACC }, {PHK, I, IMP },
- {JMP, I, A }, {EOR, M, A }, {LSR, M, A }, {EOR, M, AL },
- {BVC, I, RELB}, {EOR, M, DIY }, {EOR, M, DI }, {EOR, M, SIY },
- {MVN, I, MVN }, {EOR, M, DX }, {LSR, M, DX }, {EOR, M, DLIY},
- {CLI, I, IMP }, {EOR, M, AY }, {PHY, I, IMP }, {TCD, I, IMP },
- {JMP, I, AL }, {EOR, M, AX }, {LSR, M, AX }, {EOR, M, ALX },
- {RTS, I, IMP }, {ADC, M, DXI }, {PER, I, PER }, {ADC, M, S },
- {STZ, M, D }, {ADC, M, D }, {ROR, M, D }, {ADC, M, DLI },
- {PLA, I, IMP }, {ADC, M, IMM }, {ROR, M, ACC }, {RTL, I, IMP },
- {JMP, I, AI }, {ADC, M, A }, {ROR, M, A }, {ADC, M, AL },
- {BVS, I, RELB}, {ADC, M, DIY }, {ADC, M, DI }, {ADC, M, SIY },
- {STZ, M, DX }, {ADC, M, DX }, {ROR, M, DX }, {ADC, M, DLIY},
- {SEI, I, IMP }, {ADC, M, AY }, {PLY, I, IMP }, {TDC, I, IMP },
- {JMP, I, AXI }, {ADC, M, AX }, {ROR, M, AX }, {ADC, M, ALX },
- {BRA, I, RELB}, {STA, M, DXI }, {BRL, I, RELW}, {STA, M, S },
- {STY, X, D }, {STA, M, D }, {STX, X, D }, {STA, M, DLI },
- {DEY, I, IMP }, {BIT, M, IMM }, {TXA, I, IMP }, {PHB, I, IMP },
- {STY, X, A }, {STA, M, A }, {STX, X, A }, {STA, M, AL },
- {BCC, I, RELB}, {STA, M, DIY }, {STA, M, DI }, {STA, M, SIY },
- {STY, X, DX }, {STA, M, DX }, {STX, X, DY }, {STA, M, DLIY},
- {TYA, I, IMP }, {STA, M, AY }, {TXS, I, IMP }, {TXY, I, IMP },
- {STZ, M, A }, {STA, M, AX }, {STZ, M, AX }, {STA, M, ALX },
- {LDY, X, IMM }, {LDA, M, DXI }, {LDX, X, IMM }, {LDA, M, S },
- {LDY, X, D }, {LDA, M, D }, {LDX, X, D }, {LDA, M, DLI },
- {TAY, I, IMP }, {LDA, M, IMM }, {TAX, I, IMP }, {PLB, I, IMP },
- {LDY, X, A }, {LDA, M, A }, {LDX, X, A }, {LDA, M, AL },
- {BCS, I, RELB}, {LDA, M, DIY }, {LDA, M, DI }, {LDA, M, SIY },
- {LDY, X, DX }, {LDA, M, DX }, {LDX, X, DY }, {LDA, M, DLIY},
- {CLV, I, IMP }, {LDA, M, AY }, {TSX, I, IMP }, {TYX, I, IMP },
- {LDY, X, AX }, {LDA, M, AX }, {LDX, X, AY }, {LDA, M, ALX },
- {CPY, X, IMM }, {CMP, M, DXI }, {REP, I, IMM }, {CMP, M, S },
- {CPY, X, D }, {CMP, M, D }, {DEC, M, D }, {CMP, M, DLI },
- {INY, I, IMP }, {CMP, M, IMM }, {DEX, I, IMP }, {WAI, I, IMP },
- {CPY, X, A }, {CMP, M, A }, {DEC, M, A }, {CMP, M, AL },
- {BNE, I, RELB}, {CMP, M, DIY }, {CMP, M, DI }, {CMP, M, SIY },
- {PEI, I, PEI }, {CMP, M, DX }, {DEC, M, DX }, {CMP, M, DLIY},
- {CLD, I, IMP }, {CMP, M, AY }, {PHX, I, IMP }, {STP, I, IMP },
- {JML, I, AI }, {CMP, M, AX }, {DEC, M, AX }, {CMP, M, ALX },
- {CPX, X, IMM }, {SBC, M, DXI }, {SEP, I, IMM }, {SBC, M, S },
- {CPX, X, D }, {SBC, M, D }, {INC, M, D }, {SBC, M, DLI },
- {INX, M, IMP }, {SBC, M, IMM }, {NOP, I, IMP }, {XBA, I, IMP },
- {CPX, X, A }, {SBC, M, A }, {INC, M, A }, {SBC, M, AL },
- {BEQ, I, RELB}, {SBC, M, DIY }, {SBC, M, DI }, {SBC, M, SIY },
- {PEA, I, PEA }, {SBC, M, DX }, {INC, M, DX }, {SBC, M, DLIY},
- {SED, I, IMP }, {SBC, M, AY }, {PLX, I, IMP }, {XCE, I, IMP },
- {JSR, I, AXI }, {SBC, M, AX }, {INC, M, AX }, {SBC, M, ALX }
+ {op::BRK, I, SIG }, {op::ORA, M, DXI }, {op::COP, I, SIG }, {op::ORA, M, S },
+ {op::TSB, M, D }, {op::ORA, M, D }, {op::ASL, M, D }, {op::ORA, M, DLI },
+ {op::PHP, I, IMP }, {op::ORA, M, IMM }, {op::ASL, M, ACC }, {op::PHD, I, IMP },
+ {op::TSB, M, A }, {op::ORA, M, A }, {op::ASL, M, A }, {op::ORA, M, AL },
+ {op::BPL, I, RELB}, {op::ORA, M, DIY }, {op::ORA, M, DI }, {op::ORA, M, SIY },
+ {op::TRB, M, D }, {op::ORA, M, DX }, {op::ASL, M, DX }, {op::ORA, M, DLIY},
+ {op::CLC, I, IMP }, {op::ORA, M, AY }, {op::INA, I, IMP }, {op::TCS, I, IMP },
+ {op::TRB, M, A }, {op::ORA, M, AX }, {op::ASL, M, AX }, {op::ORA, M, ALX },
+ {op::JSR, I, A }, {op::AND, M, DXI }, {op::JSL, I, AL }, {op::AND, M, S },
+ {op::BIT, M, D }, {op::AND, M, D }, {op::ROL, M, D }, {op::AND, M, DLI },
+ {op::PLP, I, IMP }, {op::AND, M, IMM }, {op::ROL, M, ACC }, {op::PLD, I, IMP },
+ {op::BIT, M, A }, {op::AND, M, A }, {op::ROL, M, A }, {op::AND, M, AL },
+ {op::BMI, I, RELB}, {op::AND, M, DIY }, {op::AND, M, DI }, {op::AND, M, SIY },
+ {op::BIT, M, DX }, {op::AND, M, DX }, {op::ROL, M, DX }, {op::AND, M, DLIY},
+ {op::SEC, I, IMP }, {op::AND, M, AY }, {op::DEA, I, IMP }, {op::TSC, I, IMP },
+ {op::BIT, M, AX }, {op::AND, M, AX }, {op::ROL, M, AX }, {op::AND, M, ALX },
+ {op::RTI, I, IMP }, {op::EOR, M, DXI }, {op::WDM, I, IMP }, {op::EOR, M, S },
+ {op::MVP, I, MVP }, {op::EOR, M, D }, {op::LSR, M, D }, {op::EOR, M, DLI },
+ {op::PHA, I, IMP }, {op::EOR, M, IMM }, {op::LSR, M, ACC }, {op::PHK, I, IMP },
+ {op::JMP, I, A }, {op::EOR, M, A }, {op::LSR, M, A }, {op::EOR, M, AL },
+ {op::BVC, I, RELB}, {op::EOR, M, DIY }, {op::EOR, M, DI }, {op::EOR, M, SIY },
+ {op::MVN, I, MVN }, {op::EOR, M, DX }, {op::LSR, M, DX }, {op::EOR, M, DLIY},
+ {op::CLI, I, IMP }, {op::EOR, M, AY }, {op::PHY, I, IMP }, {op::TCD, I, IMP },
+ {op::JMP, I, AL }, {op::EOR, M, AX }, {op::LSR, M, AX }, {op::EOR, M, ALX },
+ {op::RTS, I, IMP }, {op::ADC, M, DXI }, {op::PER, I, PER }, {op::ADC, M, S },
+ {op::STZ, M, D }, {op::ADC, M, D }, {op::ROR, M, D }, {op::ADC, M, DLI },
+ {op::PLA, I, IMP }, {op::ADC, M, IMM }, {op::ROR, M, ACC }, {op::RTL, I, IMP },
+ {op::JMP, I, AI }, {op::ADC, M, A }, {op::ROR, M, A }, {op::ADC, M, AL },
+ {op::BVS, I, RELB}, {op::ADC, M, DIY }, {op::ADC, M, DI }, {op::ADC, M, SIY },
+ {op::STZ, M, DX }, {op::ADC, M, DX }, {op::ROR, M, DX }, {op::ADC, M, DLIY},
+ {op::SEI, I, IMP }, {op::ADC, M, AY }, {op::PLY, I, IMP }, {op::TDC, I, IMP },
+ {op::JMP, I, AXI }, {op::ADC, M, AX }, {op::ROR, M, AX }, {op::ADC, M, ALX },
+ {op::BRA, I, RELB}, {op::STA, M, DXI }, {op::BRL, I, RELW}, {op::STA, M, S },
+ {op::STY, X, D }, {op::STA, M, D }, {op::STX, X, D }, {op::STA, M, DLI },
+ {op::DEY, I, IMP }, {op::BIT, M, IMM }, {op::TXA, I, IMP }, {op::PHB, I, IMP },
+ {op::STY, X, A }, {op::STA, M, A }, {op::STX, X, A }, {op::STA, M, AL },
+ {op::BCC, I, RELB}, {op::STA, M, DIY }, {op::STA, M, DI }, {op::STA, M, SIY },
+ {op::STY, X, DX }, {op::STA, M, DX }, {op::STX, X, DY }, {op::STA, M, DLIY},
+ {op::TYA, I, IMP }, {op::STA, M, AY }, {op::TXS, I, IMP }, {op::TXY, I, IMP },
+ {op::STZ, M, A }, {op::STA, M, AX }, {op::STZ, M, AX }, {op::STA, M, ALX },
+ {op::LDY, X, IMM }, {op::LDA, M, DXI }, {op::LDX, X, IMM }, {op::LDA, M, S },
+ {op::LDY, X, D }, {op::LDA, M, D }, {op::LDX, X, D }, {op::LDA, M, DLI },
+ {op::TAY, I, IMP }, {op::LDA, M, IMM }, {op::TAX, I, IMP }, {op::PLB, I, IMP },
+ {op::LDY, X, A }, {op::LDA, M, A }, {op::LDX, X, A }, {op::LDA, M, AL },
+ {op::BCS, I, RELB}, {op::LDA, M, DIY }, {op::LDA, M, DI }, {op::LDA, M, SIY },
+ {op::LDY, X, DX }, {op::LDA, M, DX }, {op::LDX, X, DY }, {op::LDA, M, DLIY},
+ {op::CLV, I, IMP }, {op::LDA, M, AY }, {op::TSX, I, IMP }, {op::TYX, I, IMP },
+ {op::LDY, X, AX }, {op::LDA, M, AX }, {op::LDX, X, AY }, {op::LDA, M, ALX },
+ {op::CPY, X, IMM }, {op::CMP, M, DXI }, {op::REP, I, IMM }, {op::CMP, M, S },
+ {op::CPY, X, D }, {op::CMP, M, D }, {op::DEC, M, D }, {op::CMP, M, DLI },
+ {op::INY, I, IMP }, {op::CMP, M, IMM }, {op::DEX, I, IMP }, {op::WAI, I, IMP },
+ {op::CPY, X, A }, {op::CMP, M, A }, {op::DEC, M, A }, {op::CMP, M, AL },
+ {op::BNE, I, RELB}, {op::CMP, M, DIY }, {op::CMP, M, DI }, {op::CMP, M, SIY },
+ {op::PEI, I, PEI }, {op::CMP, M, DX }, {op::DEC, M, DX }, {op::CMP, M, DLIY},
+ {op::CLD, I, IMP }, {op::CMP, M, AY }, {op::PHX, I, IMP }, {op::STP, I, IMP },
+ {op::JML, I, AI }, {op::CMP, M, AX }, {op::DEC, M, AX }, {op::CMP, M, ALX },
+ {op::CPX, X, IMM }, {op::SBC, M, DXI }, {op::SEP, I, IMM }, {op::SBC, M, S },
+ {op::CPX, X, D }, {op::SBC, M, D }, {op::INC, M, D }, {op::SBC, M, DLI },
+ {op::INX, M, IMP }, {op::SBC, M, IMM }, {op::NOP, I, IMP }, {op::XBA, I, IMP },
+ {op::CPX, X, A }, {op::SBC, M, A }, {op::INC, M, A }, {op::SBC, M, AL },
+ {op::BEQ, I, RELB}, {op::SBC, M, DIY }, {op::SBC, M, DI }, {op::SBC, M, SIY },
+ {op::PEA, I, PEA }, {op::SBC, M, DX }, {op::INC, M, DX }, {op::SBC, M, DLIY},
+ {op::SED, I, IMP }, {op::SBC, M, AY }, {op::PLX, I, IMP }, {op::XCE, I, IMP },
+ {op::JSR, I, AXI }, {op::SBC, M, AX }, {op::INC, M, AX }, {op::SBC, M, ALX }
};
+} // anonymous namespace
+
static const UINT8 *base_oprom;
static UINT32 base_pc;
@@ -206,28 +258,17 @@ unsigned g65816_disassemble(char* buff, unsigned int pc, unsigned int pb, const
base_pc = address;
instruction = read_8(address);
- opcode = g_opcodes + instruction;
+ opcode = &g65816_opcode_struct::get(instruction);
- strcpy(buff, g_opnames[opcode->name]);
+ strcpy(buff, opcode->name());
ptr = buff + strlen(buff);
- switch(opcode->name)
- {
- case JSR:
- case JSL:
- dasm_flags = DASMFLAG_STEP_OVER;
- break;
-
- case RTI:
- case RTL:
- case RTS:
- dasm_flags = DASMFLAG_STEP_OUT;
- break;
-
- default:
- dasm_flags = 0;
- break;
- }
+ if (opcode->is_call())
+ dasm_flags = DASMFLAG_STEP_OVER;
+ else if (opcode->is_return())
+ dasm_flags = DASMFLAG_STEP_OUT;
+ else
+ dasm_flags = 0;
switch(opcode->ea)
{
diff --git a/src/devices/cpu/i86/i186.cpp b/src/devices/cpu/i86/i186.cpp
index 6f26f9faabe..f79505f0353 100644
--- a/src/devices/cpu/i86/i186.cpp
+++ b/src/devices/cpu/i86/i186.cpp
@@ -1308,7 +1308,7 @@ READ16_MEMBER(i80186_cpu_device::internal_port_r)
switch (offset)
{
case 0x11:
- logerror("%05X:ERROR - read from 80186 EOI\n", pc());
+ if (LOG_PORTS) logerror("%05X:ERROR - read from 80186 EOI\n", pc());
break;
case 0x12:
@@ -1397,7 +1397,7 @@ READ16_MEMBER(i80186_cpu_device::internal_port_r)
case 0x2a:
case 0x2e:
- logerror("%05X:read 80186 Timer %d max B\n", pc(), (offset - 0x2a) / 4);
+ if (LOG_PORTS) logerror("%05X:read 80186 Timer %d max B\n", pc(), (offset - 0x2a) / 4);
which = (offset - 0x2a) / 4;
return m_timer[which].maxB;
@@ -1468,7 +1468,7 @@ READ16_MEMBER(i80186_cpu_device::internal_port_r)
return m_reloc;
default:
- logerror("%05X:read 80186 port %02X\n", pc(), offset);
+ if (LOG_PORTS) logerror("%05X:read 80186 port %02X\n", pc(), offset);
break;
}
@@ -1494,11 +1494,11 @@ WRITE16_MEMBER(i80186_cpu_device::internal_port_w)
break;
case 0x12:
- logerror("%05X:ERROR - write to 80186 interrupt poll = %04X\n", pc(), data);
+ if (LOG_PORTS) logerror("%05X:ERROR - write to 80186 interrupt poll = %04X\n", pc(), data);
break;
case 0x13:
- logerror("%05X:ERROR - write to 80186 interrupt poll status = %04X\n", pc(), data);
+ if (LOG_PORTS) logerror("%05X:ERROR - write to 80186 interrupt poll status = %04X\n", pc(), data);
break;
case 0x14:
@@ -1704,7 +1704,7 @@ WRITE16_MEMBER(i80186_cpu_device::internal_port_w)
break;
default:
- logerror("%05X:80186 port %02X = %04X\n", pc(), offset, data);
+ if (LOG_PORTS) logerror("%05X:80186 port %02X = %04X\n", pc(), offset, data);
break;
}
}
diff --git a/src/devices/cpu/i86/i86.h b/src/devices/cpu/i86/i86.h
index 978fa7d1690..f268c3c1671 100644
--- a/src/devices/cpu/i86/i86.h
+++ b/src/devices/cpu/i86/i86.h
@@ -130,7 +130,7 @@ protected:
virtual void state_string_export(const device_state_entry &entry, std::string &str) const override;
virtual void interrupt(int int_num, int trap = 1);
- bool common_op(UINT8 op);
+ virtual bool common_op(UINT8 op);
// Accessing memory and io
inline UINT8 read_byte(UINT32 addr);
diff --git a/src/devices/cpu/lh5801/5801dasm.cpp b/src/devices/cpu/lh5801/5801dasm.cpp
index bef5fb4df4b..11fb6d38f4e 100644
--- a/src/devices/cpu/lh5801/5801dasm.cpp
+++ b/src/devices/cpu/lh5801/5801dasm.cpp
@@ -13,82 +13,100 @@
#include "lh5801.h"
-enum Adr
-{
- Imp,
- Reg,
- Vec, // imm byte (vector at 0xffxx)
- Vej,
- Imm,
- RegImm,
- Imm16,
- RegImm16,
- ME0,
- ME0Imm,
- Abs,
- AbsImm,
- ME1,
- ME1Imm,
- ME1Abs,
- ME1AbsImm,
- RelP,
- RelM
-};
-
-enum Regs
-{
- RegNone,
- A,
- XL, XH, X,
- YL, YH, Y,
- UL, UH, U,
- P, S
-};
-
-static const char *const RegNames[]= {
- nullptr, "A", "XL", "XH", "X", "YL", "YH", "Y", "UL", "UH", "U", "P", "S"
-};
-
#if defined(SEC)
#undef SEC
#endif
-enum Ins
+namespace {
+
+class Entry
{
- ILL, ILL2, PREFD, NOP,
+public:
+ enum Ins
+ {
+ ILL, ILL2, PREFD, NOP,
- LDA, STA, LDI, LDX, STX,
- LDE, SDE, LIN, SIN,
- TIN, // (x++)->(y++)
- ADC, ADI, ADR, SBC, SBI,
- DCA, DCS, // bcd add and sub
- CPA, CPI, CIN, // A compared with (x++)
- AND, ANI, ORA, ORI, EOR, EAI, BIT, BII,
- INC, DEC,
- DRL, DRR, // digit rotates
- ROL, ROR,
- SHL, SHR,
- AEX, // A nibble swap
+ LDA, STA, LDI, LDX, STX,
+ LDE, SDE, LIN, SIN,
+ TIN, // (x++)->(y++)
+ ADC, ADI, ADR, SBC, SBI,
+ DCA, DCS, // bcd add and sub
+ CPA, CPI, CIN, // A compared with (x++)
+ AND, ANI, ORA, ORI, EOR, EAI, BIT, BII,
+ INC, DEC,
+ DRL, DRR, // digit rotates
+ ROL, ROR,
+ SHL, SHR,
+ AEX, // A nibble swap
- BCR, BCS, BHR, BHS, BZR, BZS, BVR, BVS,
- BCH, LOP, // loop with ul
- JMP, SJP, RTN, RTI, HLT,
- VCR, VCS, VHR, VHS, VVS, VZR, VZS,
- VMJ, VEJ,
- PSH, POP, ATT, TTA,
- REC, SEC, RIE, SIE,
+ BCR, BCS, BHR, BHS, BZR, BZS, BVR, BVS,
+ BCH, LOP, // loop with ul
+ JMP, SJP, RTN, RTI, HLT,
+ VCR, VCS, VHR, VHS, VVS, VZR, VZS,
+ VMJ, VEJ,
+ PSH, POP, ATT, TTA,
+ REC, SEC, RIE, SIE,
- AM0, AM1, // load timer reg
- ITA, // reads input port
- ATP, // akku send to data bus
- CDV, // clears internal divider
- OFF, // clears bf flip flop
- RDP, SDP,// reset display flip flop
- RPU, SPU,// flip flop pu off
- RPV, SPV // flip flop pv off
+ AM0, AM1, // load timer reg
+ ITA, // reads input port
+ ATP, // akku send to data bus
+ CDV, // clears internal divider
+ OFF, // clears bf flip flop
+ RDP, SDP,// reset display flip flop
+ RPU, SPU,// flip flop pu off
+ RPV, SPV // flip flop pv off
+ };
+
+ enum Adr
+ {
+ Imp,
+ Reg,
+ Vec, // imm byte (vector at 0xffxx)
+ Vej,
+ Imm,
+ RegImm,
+ Imm16,
+ RegImm16,
+ ME0,
+ ME0Imm,
+ Abs,
+ AbsImm,
+ ME1,
+ ME1Imm,
+ ME1Abs,
+ ME1AbsImm,
+ RelP,
+ RelM
+ };
+
+ enum Regs
+ {
+ RegNone,
+ A,
+ XL, XH, X,
+ YL, YH, Y,
+ UL, UH, U,
+ P, S
+ };
+
+ const char *ins_name() const { return ins_names[ins]; }
+ const char *reg_name() const { return reg_names[reg]; }
+
+ Ins ins;
+ Adr adr;
+ Regs reg;
+
+ static const Entry table[0x100];
+ static const Entry table_fd[0x100];
+
+protected:
+ Entry(Ins i, Adr a = Imp, Regs r = RegNone) : ins(i), adr(a), reg(r) { }
+
+ static const char *const ins_names[];
+ static const char *const reg_names[];
};
-static const char *const InsNames[]={
+const char *const Entry::ins_names[]={
"ILL", "ILL", nullptr, "NOP",
"LDA", "STA", "LDI", "LDX", "STX",
"LDE", "SDE", "LIN", "SIN",
@@ -120,9 +138,11 @@ static const char *const InsNames[]={
"RPV", "SPV",
};
-struct Entry { Ins ins; Adr adr; Regs reg; };
+const char *const Entry::reg_names[]= {
+ nullptr, "A", "XL", "XH", "X", "YL", "YH", "Y", "UL", "UH", "U", "P", "S"
+};
-static const Entry table[0x100]={
+const Entry Entry::table[0x100]={
{ SBC, Reg, XL }, // 0
{ SBC, ME0, X },
{ ADC, Reg, XL },
@@ -380,7 +400,8 @@ static const Entry table[0x100]={
{ ILL },
{ ILL }
};
-static const Entry table_fd[0x100]={
+
+const Entry Entry::table_fd[0x100]={
{ ILL2 }, // 0x00
{ SBC, ME1, X },
{ ILL2 },
@@ -639,6 +660,9 @@ static const Entry table_fd[0x100]={
{ ILL2 }
};
+} // anonymous namespace
+
+
CPU_DISASSEMBLE( lh5801 )
{
int pos = 0;
@@ -648,75 +672,75 @@ CPU_DISASSEMBLE( lh5801 )
int temp;
oper=oprom[pos++];
- entry=table+oper;
+ entry=Entry::table+oper;
- if (table[oper].ins==PREFD) {
+ if (Entry::table[oper].ins==Entry::PREFD) {
oper=oprom[pos++];
- entry=table_fd+oper;
+ entry=Entry::table_fd+oper;
}
switch (entry->ins) {
- case ILL:
- sprintf(buffer,"%s %.2x", InsNames[entry->ins], oper);break;
- case ILL2:
- sprintf(buffer,"%s fd%.2x", InsNames[entry->ins], oper);break;
+ case Entry::ILL:
+ sprintf(buffer,"%s %.2x", entry->ins_name(), oper);break;
+ case Entry::ILL2:
+ sprintf(buffer,"%s fd%.2x", entry->ins_name(), oper);break;
default:
switch(entry->adr) {
- case Imp:
- sprintf(buffer,"%s", InsNames[entry->ins]);break;
- case Reg:
- sprintf(buffer,"%s %s", InsNames[entry->ins],RegNames[entry->reg]);break;
- case RegImm:
- sprintf(buffer,"%s %s,%.2x", InsNames[entry->ins],
- RegNames[entry->reg], oprom[pos++]);
+ case Entry::Imp:
+ sprintf(buffer,"%s", entry->ins_name());break;
+ case Entry::Reg:
+ sprintf(buffer,"%s %s", entry->ins_name(),entry->reg_name());break;
+ case Entry::RegImm:
+ sprintf(buffer,"%s %s,%.2x", entry->ins_name(),
+ entry->reg_name(), oprom[pos++]);
break;
- case RegImm16:
+ case Entry::RegImm16:
absolut=oprom[pos++]<<8;
absolut|=oprom[pos++];
- sprintf(buffer,"%s %s,%.4x", InsNames[entry->ins],RegNames[entry->reg],absolut );
+ sprintf(buffer,"%s %s,%.4x", entry->ins_name(),entry->reg_name(),absolut );
break;
- case Vec:
- sprintf(buffer,"%s (ff%.2x)", InsNames[entry->ins],oprom[pos++]);break;
- case Vej:
- sprintf(buffer,"%s (ff%.2x)", InsNames[entry->ins], oper);break;
- case Imm:
- sprintf(buffer,"%s %.2x", InsNames[entry->ins],oprom[pos++]);break;
- case Imm16:
+ case Entry::Vec:
+ sprintf(buffer,"%s (ff%.2x)", entry->ins_name(),oprom[pos++]);break;
+ case Entry::Vej:
+ sprintf(buffer,"%s (ff%.2x)", entry->ins_name(), oper);break;
+ case Entry::Imm:
+ sprintf(buffer,"%s %.2x", entry->ins_name(),oprom[pos++]);break;
+ case Entry::Imm16:
absolut=oprom[pos++]<<8;
absolut|=oprom[pos++];
- sprintf(buffer,"%s %.4x", InsNames[entry->ins],absolut );break;
- case RelP:
+ sprintf(buffer,"%s %.4x", entry->ins_name(),absolut );break;
+ case Entry::RelP:
temp=oprom[pos++];
- sprintf(buffer,"%s %.4x", InsNames[entry->ins],pc+pos+temp );break;
- case RelM:
+ sprintf(buffer,"%s %.4x", entry->ins_name(),pc+pos+temp );break;
+ case Entry::RelM:
temp=oprom[pos++];
- sprintf(buffer,"%s %.4x", InsNames[entry->ins],pc+pos-temp );break;
- case Abs:
+ sprintf(buffer,"%s %.4x", entry->ins_name(),pc+pos-temp );break;
+ case Entry::Abs:
absolut=oprom[pos++]<<8;
absolut|=oprom[pos++];
- sprintf(buffer,"%s (%.4x)", InsNames[entry->ins],absolut );break;
- case ME1Abs:
+ sprintf(buffer,"%s (%.4x)", entry->ins_name(),absolut );break;
+ case Entry::ME1Abs:
absolut=oprom[pos++]<<8;
absolut|=oprom[pos++];
- sprintf(buffer,"%s #(%.4x)", InsNames[entry->ins],absolut );break;
- case AbsImm:
+ sprintf(buffer,"%s #(%.4x)", entry->ins_name(),absolut );break;
+ case Entry::AbsImm:
absolut=oprom[pos++]<<8;
absolut|=oprom[pos++];
- sprintf(buffer,"%s (%.4x),%.2x", InsNames[entry->ins],absolut,
+ sprintf(buffer,"%s (%.4x),%.2x", entry->ins_name(),absolut,
oprom[pos++]);break;
- case ME1AbsImm:
+ case Entry::ME1AbsImm:
absolut=oprom[pos++]<<8;
absolut|=oprom[pos++];
- sprintf(buffer,"%s #(%.4x),%.2x", InsNames[entry->ins],absolut,
+ sprintf(buffer,"%s #(%.4x),%.2x", entry->ins_name(),absolut,
oprom[pos++]);break;
- case ME0:
- sprintf(buffer,"%s (%s)", InsNames[entry->ins],RegNames[entry->reg] );break;
- case ME0Imm:
- sprintf(buffer,"%s (%s),%.2x", InsNames[entry->ins],RegNames[entry->reg],oprom[pos++] );
+ case Entry::ME0:
+ sprintf(buffer,"%s (%s)", entry->ins_name(),entry->reg_name() );break;
+ case Entry::ME0Imm:
+ sprintf(buffer,"%s (%s),%.2x", entry->ins_name(),entry->reg_name(),oprom[pos++] );
break;
- case ME1:
- sprintf(buffer,"%s #(%s)", InsNames[entry->ins],RegNames[entry->reg] );break;
- case ME1Imm:
- sprintf(buffer,"%s #(%s),%.2x", InsNames[entry->ins],RegNames[entry->reg],oprom[pos++] );
+ case Entry::ME1:
+ sprintf(buffer,"%s #(%s)", entry->ins_name(),entry->reg_name() );break;
+ case Entry::ME1Imm:
+ sprintf(buffer,"%s #(%s),%.2x", entry->ins_name(),entry->reg_name(),oprom[pos++] );
break;
}
}
diff --git a/src/devices/cpu/m37710/m7700ds.cpp b/src/devices/cpu/m37710/m7700ds.cpp
index 8ccf269dc46..b53980bd939 100644
--- a/src/devices/cpu/m37710/m7700ds.cpp
+++ b/src/devices/cpu/m37710/m7700ds.cpp
@@ -18,18 +18,59 @@ Based on G65C816 CPU Emulator by Karl Stenerud
#define ADDRESS_24BIT(A) ((A)&0xffffff)
-struct m7700_opcode_struct
+namespace {
+
+class m7700_opcode_struct
{
- unsigned char name;
+public:
+ bool is_call() const { return m_name == op::JSR; }
+ bool is_return() const { return (m_name == op::RTS) || (m_name == op::RTI); }
+ const char *name() const { return s_opnames[unsigned(m_name)]; }
+
+ static const m7700_opcode_struct &get(unsigned char ins) { return s_opcodes[ins]; }
+ static const m7700_opcode_struct &get_prefix42(unsigned char ins) { return s_opcodes_prefix42[ins]; }
+ static const m7700_opcode_struct &get_prefix89(unsigned char ins) { return s_opcodes_prefix89[ins]; }
+
unsigned char flag;
unsigned char ea;
+
+protected:
+ enum class op : unsigned
+ {
+ ADC , AND , ASL , BCC , BCS , BEQ , BIT , BMI , BNE , BPL , BRA ,
+ BRK , BRL , BVC , BVS , CLC , CLD , CLI , CLV , CMP , COP , CPX ,
+ CPY , DEA , DEC , DEX , DEY , EOR , INA , INC , INX , INY , JML ,
+ JMP , JSL , JSR , LDA , LDX , LDY , LSR , MVN , MVP , NOP , ORA ,
+ PEA , PEI , PER , PHA , PHT , PHD , PHK , PHP , PHX , PHY , PLA ,
+ PLB , PLD , PLP , PLX , PLY , CLP , ROL , ROR , RTI , RTL , RTS ,
+ SBC , SEC , SED , SEI , SEP , STA , STP , STX , STY , STZ , TAX ,
+ TAY , TCS , TCD , TDC , TRB , TSB , TSC , TSX , TXA , TXS , TXY ,
+ TYA , TYX , WAI , WDM , XBA , XCE , MPY , DIV , MPYS, DIVS, RLA ,
+ EXTS, EXTZ , LDT , LDM , UNK , SEB , SEM , CLM , STB , LDB , ADCB ,
+ SBCB, EORB , TBX , CMPB, INB , DEB , TXB , TYB , LSRB, ORB , CLB ,
+ BBC, BBS, TBY, ANDB, PUL , PSH , PLAB, XAB , PHB
+ };
+
+ m7700_opcode_struct(op n, unsigned char f, unsigned char e)
+ : flag(f)
+ , ea(e)
+ , m_name(n)
+ {
+ }
+
+ op m_name;
+
+ static const char *const s_opnames[];
+ static const m7700_opcode_struct s_opcodes[256];
+ static const m7700_opcode_struct s_opcodes_prefix42[256];
+ static const m7700_opcode_struct s_opcodes_prefix89[256];
};
enum
{
IMP , ACC , RELB, RELW, IMM , A , AI , AL , ALX , AX , AXI ,
AY , D , DI , DIY , DLI , DLIY, DX , DXI , DY , S , SIY ,
- SIG /*, MVN , MVP , PEA , PEI , PER */, LDM4, LDM5, LDM4X, LDM5X,
+ SIG , MVN , MVP , PEA , PEI , PER , LDM4, LDM5, LDM4X, LDM5X,
BBCD, BBCA, ACCB
};
@@ -40,23 +81,7 @@ enum
X /* check x bit */
};
-enum
-{
- ADC , AND , ASL , BCC , BCS , BEQ , BIT , BMI , BNE , BPL , BRA ,
- BRK , BRL , BVC , BVS , CLC , CLD , CLI , CLV , CMP , COP , CPX ,
- CPY , DEA , DEC , DEX , DEY , EOR , INA , INC , INX , INY , JML ,
- JMP , JSL , JSR , LDA , LDX , LDY , LSR , MVN , MVP , NOP , ORA ,
- PEA , PEI , PER , PHA , PHT , PHD , PHK , PHP , PHX , PHY , PLA ,
- PLB , PLD , PLP , PLX , PLY , CLP , ROL , ROR , RTI , RTL , RTS ,
- SBC , SEC , SED , SEI , SEP , STA , STP , STX , STY , STZ , TAX ,
- TAY , TCS , TCD , TDC , TRB , TSB , TSC , TSX , TXA , TXS , TXY ,
- TYA , TYX , WAI , WDM , XBA , XCE , MPY , DIV , MPYS, DIVS, RLA ,
- EXTS, EXTZ , LDT , LDM , UNK , SEB , SEM , CLM , STB , LDB , ADCB ,
- SBCB, EORB , TBX , CMPB, INB , DEB , TXB , TYB , LSRB, ORB , CLB ,
- BBC, BBS, TBY, ANDB, PUL , PSH , PLAB, XAB , PHB
-};
-
-static const char *const g_opnames[] =
+const char *const m7700_opcode_struct::s_opnames[] =
{
"ADC", "AND", "ASL", "BCC", "BCS", "BEQ", "BIT", "BMI", "BNE", "BPL", "BRA",
"BRK", "BRL", "BVC", "BVS", "CLC", "CLD", "CLI", "CLV", "CMP", "COP", "CPX",
@@ -66,261 +91,263 @@ static const char *const g_opnames[] =
"PLT", "PLD", "PLP", "PLX", "PLY", "CLP", "ROL", "ROR", "RTI", "RTL", "RTS",
"SBC", "SEC", "SED", "SEI", "SEP", "STA", "STP", "STX", "STY", "STZ", "TAX",
"TAY", "TCS", "TCD", "TDC", "TRB", "TSB", "TSC", "TSX", "TXA", "TXS", "TXY",
- "TYA", "TYX", "WAI", "WDM", "XBA", "XCE", "MPY", "DIV", "MPYS", "DIVS", "RLA",
+ "TYA", "TYX", "WAI", "WDM", "XBA", "XCE", "MPY", "DIV", "MPYS","DIVS","RLA",
"EXTS","EXTZ","LDT", "LDM", "UNK", "SEB", "SEM", "CLM", "STB", "LDB", "ADCB",
- "SBCB","EORB","TBX", "CMPB","INB", "DEB", "TXB", "TYB", "LSRB", "ORB", "CLB",
+ "SBCB","EORB","TBX", "CMPB","INB", "DEB", "TXB", "TYB", "LSRB","ORB", "CLB",
"BBC", "BBS", "TBY", "ANDB","PUL", "PSH", "PLB", "XAB", "PHB",
};
-static const m7700_opcode_struct g_opcodes[256] =
+const m7700_opcode_struct m7700_opcode_struct::s_opcodes[256] =
{
- {BRK, I, SIG }, {ORA, M, DXI }, {UNK, I, SIG }, {ORA, M, S },
- {SEB, M, LDM4 }, {ORA, M, D }, {ASL, M, D }, {ORA, M, DLI },
- {PHP, I, IMP }, {ORA, M, IMM }, {ASL, M, ACC }, {PHD, I, IMP },
- {SEB, M, LDM5 }, {ORA, M, A }, {ASL, M, A }, {ORA, M, AL },
+ {op::BRK, I, SIG }, {op::ORA, M, DXI }, {op::UNK, I, SIG }, {op::ORA, M, S },
+ {op::SEB, M, LDM4 }, {op::ORA, M, D }, {op::ASL, M, D }, {op::ORA, M, DLI },
+ {op::PHP, I, IMP }, {op::ORA, M, IMM }, {op::ASL, M, ACC }, {op::PHD, I, IMP },
+ {op::SEB, M, LDM5 }, {op::ORA, M, A }, {op::ASL, M, A }, {op::ORA, M, AL },
// 0x10
- {BPL, I, RELB}, {ORA, M, DIY }, {ORA, M, DI }, {ORA, M, SIY },
- {CLB, M, LDM4}, {ORA, M, DX }, {ASL, M, DX }, {ORA, M, DLIY},
- {CLC, I, IMP }, {ORA, M, AY }, {DEA, I, IMP }, {TCS, I, IMP },
- {CLB, M, LDM5}, {ORA, M, AX }, {ASL, M, AX }, {ORA, M, ALX },
+ {op::BPL, I, RELB }, {op::ORA, M, DIY }, {op::ORA, M, DI }, {op::ORA, M, SIY },
+ {op::CLB, M, LDM4 }, {op::ORA, M, DX }, {op::ASL, M, DX }, {op::ORA, M, DLIY },
+ {op::CLC, I, IMP }, {op::ORA, M, AY }, {op::DEA, I, IMP }, {op::TCS, I, IMP },
+ {op::CLB, M, LDM5 }, {op::ORA, M, AX }, {op::ASL, M, AX }, {op::ORA, M, ALX },
// 0x20
- {JSR, I, A }, {AND, M, DXI }, {JSL, I, AL }, {AND, M, S },
- {BBS, M, BBCD}, {AND, M, D }, {ROL, M, D }, {AND, M, DLI },
- {PLP, I, IMP }, {AND, M, IMM }, {ROL, M, ACC }, {PLD, I, IMP },
- {BBS, M, BBCA}, {AND, M, A }, {ROL, M, A }, {AND, M, AL },
+ {op::JSR, I, A }, {op::AND, M, DXI }, {op::JSL, I, AL }, {op::AND, M, S },
+ {op::BBS, M, BBCD }, {op::AND, M, D }, {op::ROL, M, D }, {op::AND, M, DLI },
+ {op::PLP, I, IMP }, {op::AND, M, IMM }, {op::ROL, M, ACC }, {op::PLD, I, IMP },
+ {op::BBS, M, BBCA }, {op::AND, M, A }, {op::ROL, M, A }, {op::AND, M, AL },
// 0x30
- {BMI, I, RELB}, {AND, M, DIY }, {AND, M, DI }, {AND, M, SIY },
- {BBC, M, BBCD}, {AND, M, DX }, {ROL, M, DX }, {AND, M, DLIY},
- {SEC, I, IMP }, {AND, M, AY }, {INA, I, IMP }, {TSC, I, IMP },
- {BBC, M, BBCA}, {AND, M, AX }, {ROL, M, AX }, {AND, M, ALX },
+ {op::BMI, I, RELB }, {op::AND, M, DIY }, {op::AND, M, DI }, {op::AND, M, SIY },
+ {op::BBC, M, BBCD }, {op::AND, M, DX }, {op::ROL, M, DX }, {op::AND, M, DLIY },
+ {op::SEC, I, IMP }, {op::AND, M, AY }, {op::INA, I, IMP }, {op::TSC, I, IMP },
+ {op::BBC, M, BBCA }, {op::AND, M, AX }, {op::ROL, M, AX }, {op::AND, M, ALX },
// 0x40
- {RTI, I, IMP }, {EOR, M, DXI }, {WDM, I, IMP }, {EOR, M, S },
- {MVP, I, MVP }, {EOR, M, D }, {LSR, M, D }, {EOR, M, DLI },
- {PHA, I, IMP }, {EOR, M, IMM }, {LSR, M, ACC }, {PHK, I, IMP },
- {JMP, I, A }, {EOR, M, A }, {LSR, M, A }, {EOR, M, AL },
+ {op::RTI, I, IMP }, {op::EOR, M, DXI }, {op::WDM, I, IMP }, {op::EOR, M, S },
+ {op::MVP, I, MVP }, {op::EOR, M, D }, {op::LSR, M, D }, {op::EOR, M, DLI },
+ {op::PHA, I, IMP }, {op::EOR, M, IMM }, {op::LSR, M, ACC }, {op::PHK, I, IMP },
+ {op::JMP, I, A }, {op::EOR, M, A }, {op::LSR, M, A }, {op::EOR, M, AL },
// 0x50
- {BVC, I, RELB}, {EOR, M, DIY }, {EOR, M, DI }, {EOR, M, SIY },
- {MVN, I, MVN }, {EOR, M, DX }, {LSR, M, DX }, {EOR, M, DLIY},
- {CLI, I, IMP }, {EOR, M, AY }, {PHY, I, IMP }, {TCD, I, IMP },
- {JMP, I, AL }, {EOR, M, AX }, {LSR, M, AX }, {EOR, M, ALX },
+ {op::BVC, I, RELB }, {op::EOR, M, DIY }, {op::EOR, M, DI }, {op::EOR, M, SIY },
+ {op::MVN, I, MVN }, {op::EOR, M, DX }, {op::LSR, M, DX }, {op::EOR, M, DLIY },
+ {op::CLI, I, IMP }, {op::EOR, M, AY }, {op::PHY, I, IMP }, {op::TCD, I, IMP },
+ {op::JMP, I, AL }, {op::EOR, M, AX }, {op::LSR, M, AX }, {op::EOR, M, ALX },
// 0x60
- {RTS, I, IMP }, {ADC, M, DXI }, {PER, I, PER }, {ADC, M, S },
- {LDM, M, LDM4 }, {ADC, M, D }, {ROR, M, D }, {ADC, M, DLI },
- {PLA, I, IMP }, {ADC, M, IMM }, {ROR, M, ACC }, {RTL, I, IMP },
- {JMP, I, AI }, {ADC, M, A }, {ROR, M, A }, {ADC, M, AL },
+ {op::RTS, I, IMP }, {op::ADC, M, DXI }, {op::PER, I, PER }, {op::ADC, M, S },
+ {op::LDM, M, LDM4 }, {op::ADC, M, D }, {op::ROR, M, D }, {op::ADC, M, DLI },
+ {op::PLA, I, IMP }, {op::ADC, M, IMM }, {op::ROR, M, ACC }, {op::RTL, I, IMP },
+ {op::JMP, I, AI }, {op::ADC, M, A }, {op::ROR, M, A }, {op::ADC, M, AL },
// 0x70
- {BVS, I, RELB}, {ADC, M, DIY }, {ADC, M, DI }, {ADC, M, SIY },
- {LDM, M, LDM4X }, {ADC, M, DX }, {ROR, M, DX }, {ADC, M, DLIY},
- {SEI, I, IMP }, {ADC, M, AY }, {PLY, I, IMP }, {TDC, I, IMP },
- {JMP, I, AXI }, {ADC, M, AX }, {ROR, M, AX }, {ADC, M, ALX },
+ {op::BVS, I, RELB }, {op::ADC, M, DIY }, {op::ADC, M, DI }, {op::ADC, M, SIY },
+ {op::LDM, M, LDM4X}, {op::ADC, M, DX }, {op::ROR, M, DX }, {op::ADC, M, DLIY },
+ {op::SEI, I, IMP }, {op::ADC, M, AY }, {op::PLY, I, IMP }, {op::TDC, I, IMP },
+ {op::JMP, I, AXI }, {op::ADC, M, AX }, {op::ROR, M, AX }, {op::ADC, M, ALX },
// 0x80
- {BRA, I, RELB}, {STA, M, DXI }, {BRL, I, RELW}, {STA, M, S },
- {STY, X, D }, {STA, M, D }, {STX, X, D }, {STA, M, DLI },
- {DEY, I, IMP }, {BIT, M, IMM }, {TXA, I, IMP }, {PHT, I, IMP },
- {STY, X, A }, {STA, M, A }, {STX, X, A }, {STA, M, AL },
+ {op::BRA, I, RELB }, {op::STA, M, DXI }, {op::BRL, I, RELW}, {op::STA, M, S },
+ {op::STY, X, D }, {op::STA, M, D }, {op::STX, X, D }, {op::STA, M, DLI },
+ {op::DEY, I, IMP }, {op::BIT, M, IMM }, {op::TXA, I, IMP }, {op::PHT, I, IMP },
+ {op::STY, X, A }, {op::STA, M, A }, {op::STX, X, A }, {op::STA, M, AL },
// 0x90
- {BCC, I, RELB}, {STA, M, DIY }, {STA, M, DI }, {STA, M, SIY },
- {STY, X, DX }, {STA, M, DX }, {STX, X, DY }, {STA, M, DLIY},
- {TYA, I, IMP }, {STA, M, AY }, {TXS, I, IMP }, {TXY, I, IMP },
- {LDM, M, LDM5 }, {STA, M, AX }, {LDM, M, LDM5X }, {STA, M, ALX },
+ {op::BCC, I, RELB }, {op::STA, M, DIY }, {op::STA, M, DI }, {op::STA, M, SIY },
+ {op::STY, X, DX }, {op::STA, M, DX }, {op::STX, X, DY }, {op::STA, M, DLIY },
+ {op::TYA, I, IMP }, {op::STA, M, AY }, {op::TXS, I, IMP }, {op::TXY, I, IMP },
+ {op::LDM, M, LDM5 }, {op::STA, M, AX }, {op::LDM, M, LDM5X},{op::STA, M, ALX },
// 0xA0
- {LDY, X, IMM }, {LDA, M, DXI }, {LDX, X, IMM }, {LDA, M, S },
- {LDY, X, D }, {LDA, M, D }, {LDX, X, D }, {LDA, M, DLI },
- {TAY, I, IMP }, {LDA, M, IMM }, {TAX, I, IMP }, {PLB, I, IMP },
- {LDY, X, A }, {LDA, M, A }, {LDX, X, A }, {LDA, M, AL },
+ {op::LDY, X, IMM }, {op::LDA, M, DXI }, {op::LDX, X, IMM }, {op::LDA, M, S },
+ {op::LDY, X, D }, {op::LDA, M, D }, {op::LDX, X, D }, {op::LDA, M, DLI },
+ {op::TAY, I, IMP }, {op::LDA, M, IMM }, {op::TAX, I, IMP }, {op::PLB, I, IMP },
+ {op::LDY, X, A }, {op::LDA, M, A }, {op::LDX, X, A }, {op::LDA, M, AL },
// 0xB0
- {BCS, I, RELB}, {LDA, M, DIY }, {LDA, M, DI }, {LDA, M, SIY },
- {LDY, X, DX }, {LDA, M, DX }, {LDX, X, DY }, {LDA, M, DLIY},
- {CLV, I, IMP }, {LDA, M, AY }, {TSX, I, IMP }, {TYX, I, IMP },
- {LDY, X, AX }, {LDA, M, AX }, {LDX, X, AY }, {LDA, M, ALX },
+ {op::BCS, I, RELB }, {op::LDA, M, DIY }, {op::LDA, M, DI }, {op::LDA, M, SIY },
+ {op::LDY, X, DX }, {op::LDA, M, DX }, {op::LDX, X, DY }, {op::LDA, M, DLIY },
+ {op::CLV, I, IMP }, {op::LDA, M, AY }, {op::TSX, I, IMP }, {op::TYX, I, IMP },
+ {op::LDY, X, AX }, {op::LDA, M, AX }, {op::LDX, X, AY }, {op::LDA, M, ALX },
// 0xC0
- {CPY, X, IMM }, {CMP, M, DXI }, {CLP, I, IMM }, {CMP, M, S },
- {CPY, X, D }, {CMP, M, D }, {DEC, M, D }, {CMP, M, DLI },
- {INY, I, IMP }, {CMP, M, IMM }, {DEX, I, IMP }, {WAI, I, IMP },
- {CPY, X, A }, {CMP, M, A }, {DEC, M, A }, {CMP, M, AL },
+ {op::CPY, X, IMM }, {op::CMP, M, DXI }, {op::CLP, I, IMM }, {op::CMP, M, S },
+ {op::CPY, X, D }, {op::CMP, M, D }, {op::DEC, M, D }, {op::CMP, M, DLI },
+ {op::INY, I, IMP }, {op::CMP, M, IMM }, {op::DEX, I, IMP }, {op::WAI, I, IMP },
+ {op::CPY, X, A }, {op::CMP, M, A }, {op::DEC, M, A }, {op::CMP, M, AL },
// 0xD0
- {BNE, I, RELB}, {CMP, M, DIY }, {CMP, M, DI }, {CMP, M, SIY },
- {PEI, I, PEI }, {CMP, M, DX }, {DEC, M, DX }, {CMP, M, DLIY},
- {CLM, I, IMP }, {CMP, M, AY }, {PHX, I, IMP }, {STP, I, IMP },
- {JML, I, AI }, {CMP, M, AX }, {DEC, M, AX }, {CMP, M, ALX },
+ {op::BNE, I, RELB }, {op::CMP, M, DIY }, {op::CMP, M, DI }, {op::CMP, M, SIY },
+ {op::PEI, I, PEI }, {op::CMP, M, DX }, {op::DEC, M, DX }, {op::CMP, M, DLIY },
+ {op::CLM, I, IMP }, {op::CMP, M, AY }, {op::PHX, I, IMP }, {op::STP, I, IMP },
+ {op::JML, I, AI }, {op::CMP, M, AX }, {op::DEC, M, AX }, {op::CMP, M, ALX },
// 0xE0
- {CPX, X, IMM }, {SBC, M, DXI }, {SEP, I, IMM }, {SBC, M, S },
- {CPX, X, D }, {SBC, M, D }, {INC, M, D }, {SBC, M, DLI },
- {INX, M, IMP }, {SBC, M, IMM }, {NOP, I, IMP }, {PSH, I, IMM },
- {CPX, X, A }, {SBC, M, A }, {INC, M, A }, {SBC, M, AL },
+ {op::CPX, X, IMM }, {op::SBC, M, DXI }, {op::SEP, I, IMM }, {op::SBC, M, S },
+ {op::CPX, X, D }, {op::SBC, M, D }, {op::INC, M, D }, {op::SBC, M, DLI },
+ {op::INX, M, IMP }, {op::SBC, M, IMM }, {op::NOP, I, IMP }, {op::PSH, I, IMM },
+ {op::CPX, X, A }, {op::SBC, M, A }, {op::INC, M, A }, {op::SBC, M, AL },
// 0xF0
- {BEQ, I, RELB}, {SBC, M, DIY }, {SBC, M, DI }, {SBC, M, SIY },
- {PEA, I, PEA }, {SBC, M, DX }, {INC, M, DX }, {SBC, M, DLIY},
- {SEM, I, IMP }, {SBC, M, AY }, {PLX, I, IMP }, {PUL, I, IMM },
- {JSR, I, AXI }, {SBC, M, AX }, {INC, M, AX }, {SBC, M, ALX }
+ {op::BEQ, I, RELB }, {op::SBC, M, DIY }, {op::SBC, M, DI }, {op::SBC, M, SIY },
+ {op::PEA, I, PEA }, {op::SBC, M, DX }, {op::INC, M, DX }, {op::SBC, M, DLIY },
+ {op::SEM, I, IMP }, {op::SBC, M, AY }, {op::PLX, I, IMP }, {op::PUL, I, IMM },
+ {op::JSR, I, AXI }, {op::SBC, M, AX }, {op::INC, M, AX }, {op::SBC, M, ALX }
};
-static const m7700_opcode_struct g_opcodes_prefix42[256] =
+const m7700_opcode_struct m7700_opcode_struct::s_opcodes_prefix42[256] =
{
- {BRK, I, SIG }, {ORB, M, DXI }, {COP, I, SIG }, {ORB, M, S },
- {TSB, M, D }, {ORB, M, D }, {ASL, M, D }, {ORB, M, DLI },
- {PHP, I, IMP }, {ORB, M, IMM }, {ASL, M, ACCB }, {PHD, I, IMP },
- {TSB, M, A }, {ORB, M, A }, {ASL, M, A }, {ORB, M, AL },
+ {op::BRK, I, SIG }, {op::ORB, M, DXI }, {op::COP, I, SIG }, {op::ORB, M, S },
+ {op::TSB, M, D }, {op::ORB, M, D }, {op::ASL, M, D }, {op::ORB, M, DLI },
+ {op::PHP, I, IMP }, {op::ORB, M, IMM }, {op::ASL, M, ACCB}, {op::PHD, I, IMP },
+ {op::TSB, M, A }, {op::ORB, M, A }, {op::ASL, M, A }, {op::ORB, M, AL },
// 0x10
- {BPL, I, RELB}, {ORB, M, DIY }, {ORB, M, DI }, {ORB, M, SIY },
- {TRB, M, D }, {ORB, M, DX }, {ASL, M, DX }, {ORB, M, DLIY},
- {CLC, I, IMP }, {ORB, M, AY }, {DEB, I, IMP }, {TCS, I, IMP },
- {TRB, M, A }, {ORB, M, AX }, {ASL, M, AX }, {ORB, M, ALX },
+ {op::BPL, I, RELB }, {op::ORB, M, DIY }, {op::ORB, M, DI }, {op::ORB, M, SIY },
+ {op::TRB, M, D }, {op::ORB, M, DX }, {op::ASL, M, DX }, {op::ORB, M, DLIY},
+ {op::CLC, I, IMP }, {op::ORB, M, AY }, {op::DEB, I, IMP }, {op::TCS, I, IMP },
+ {op::TRB, M, A }, {op::ORB, M, AX }, {op::ASL, M, AX }, {op::ORB, M, ALX },
// 0x20
- {JSR, I, A }, {ANDB, M, DXI }, {JSL, I, AL }, {ANDB, M, S },
- {BIT, M, D }, {ANDB, M, D }, {ROL, M, D }, {ANDB, M, DLI },
- {PLP, I, IMP }, {ANDB, M, IMM }, {ROL, M, ACCB }, {PLD, I, IMP },
- {BIT, M, A }, {ANDB, M, A }, {ROL, M, A }, {ANDB, M, AL },
+ {op::JSR, I, A }, {op::ANDB,M, DXI }, {op::JSL, I, AL }, {op::ANDB, M, S },
+ {op::BIT, M, D }, {op::ANDB,M, D }, {op::ROL, M, D }, {op::ANDB, M, DLI },
+ {op::PLP, I, IMP }, {op::ANDB,M, IMM }, {op::ROL, M, ACCB}, {op::PLD, I, IMP },
+ {op::BIT, M, A }, {op::ANDB,M, A }, {op::ROL, M, A }, {op::ANDB, M, AL },
// 0x30
- {BMI, I, RELB}, {AND, M, DIY }, {AND, M, DI }, {AND, M, SIY },
- {BIT, M, DX }, {AND, M, DX }, {ROL, M, DX }, {AND, M, DLIY},
- {SEC, I, IMP }, {AND, M, AY }, {INB, I, IMP }, {TSC, I, IMP },
- {BIT, M, AX }, {AND, M, AX }, {ROL, M, AX }, {AND, M, ALX },
+ {op::BMI, I, RELB }, {op::AND, M, DIY }, {op::AND, M, DI }, {op::AND, M, SIY },
+ {op::BIT, M, DX }, {op::AND, M, DX }, {op::ROL, M, DX }, {op::AND, M, DLIY},
+ {op::SEC, I, IMP }, {op::AND, M, AY }, {op::INB, I, IMP }, {op::TSC, I, IMP },
+ {op::BIT, M, AX }, {op::AND, M, AX }, {op::ROL, M, AX }, {op::AND, M, ALX },
// 0x40
- {RTI, I, IMP }, {EORB, M, DXI }, {WDM, I, IMP }, {EORB, M, S },
- {MVP, I, MVP }, {EORB, M, D }, {LSRB, M, D }, {EORB, M, DLI },
- {PHB, I, IMP }, {EORB, M, IMM }, {LSRB, M, ACC }, {PHK, I, IMP },
- {JMP, I, A }, {EORB, M, A }, {LSRB, M, A }, {EORB, M, AL },
+ {op::RTI, I, IMP }, {op::EORB,M, DXI }, {op::WDM, I, IMP }, {op::EORB, M, S },
+ {op::MVP, I, MVP }, {op::EORB,M, D }, {op::LSRB,M, D }, {op::EORB, M, DLI },
+ {op::PHB, I, IMP }, {op::EORB,M, IMM }, {op::LSRB,M, ACC }, {op::PHK, I, IMP },
+ {op::JMP, I, A }, {op::EORB,M, A }, {op::LSRB,M, A }, {op::EORB, M, AL },
// 0x50
- {BVC, I, RELB}, {EORB, M, DIY }, {EORB, M, DI }, {EORB, M, SIY },
- {MVN, I, MVN }, {EORB, M, DX }, {LSRB, M, DX }, {EORB, M, DLIY},
- {CLI, I, IMP }, {EORB, M, AY }, {PHY, I, IMP }, {TCD, I, IMP },
- {JMP, I, AL }, {EORB, M, AX }, {LSRB, M, AX }, {EORB, M, ALX },
+ {op::BVC, I, RELB }, {op::EORB,M, DIY }, {op::EORB,M, DI }, {op::EORB, M, SIY },
+ {op::MVN, I, MVN }, {op::EORB,M, DX }, {op::LSRB,M, DX }, {op::EORB, M, DLIY},
+ {op::CLI, I, IMP }, {op::EORB,M, AY }, {op::PHY, I, IMP }, {op::TCD, I, IMP },
+ {op::JMP, I, AL }, {op::EORB,M, AX }, {op::LSRB,M, AX }, {op::EORB, M, ALX },
// 0x60
- {RTS, I, IMP }, {ADCB, M, DXI }, {PER, I, PER }, {ADCB, M, S },
- {STZ, M, D }, {ADCB, M, D }, {ROR, M, D }, {ADCB, M, DLI },
- {PLAB,I, IMP }, {ADCB, M, IMM }, {ROR, M, ACC }, {RTL, I, IMP },
- {JMP, I, AI }, {ADCB, M, A }, {ROR, M, A }, {ADCB, M, AL },
+ {op::RTS, I, IMP }, {op::ADCB,M, DXI }, {op::PER, I, PER }, {op::ADCB, M, S },
+ {op::STZ, M, D }, {op::ADCB,M, D }, {op::ROR, M, D }, {op::ADCB, M, DLI },
+ {op::PLAB,I, IMP }, {op::ADCB,M, IMM }, {op::ROR, M, ACC }, {op::RTL, I, IMP },
+ {op::JMP, I, AI }, {op::ADCB,M, A }, {op::ROR, M, A }, {op::ADCB, M, AL },
// 0x70
- {BVS, I, RELB}, {ADCB, M, DIY }, {ADCB, M, DI }, {ADCB, M, SIY },
- {STZ, M, DX }, {ADCB, M, DX }, {ROR, M, DX }, {ADCB, M, DLIY},
- {SEI, I, IMP }, {ADCB, M, AY }, {PLY, I, IMP }, {TDC, I, IMP },
- {JMP, I, AXI }, {ADCB, M, AX }, {ROR, M, AX }, {ADCB, M, ALX },
+ {op::BVS, I, RELB }, {op::ADCB,M, DIY }, {op::ADCB,M, DI }, {op::ADCB, M, SIY },
+ {op::STZ, M, DX }, {op::ADCB,M, DX }, {op::ROR, M, DX }, {op::ADCB, M, DLIY},
+ {op::SEI, I, IMP }, {op::ADCB,M, AY }, {op::PLY, I, IMP }, {op::TDC, I, IMP },
+ {op::JMP, I, AXI }, {op::ADCB,M, AX }, {op::ROR, M, AX }, {op::ADCB, M, ALX },
// 0x80
- {BRA, I, RELB}, {STB, M, DXI }, {BRL, I, RELW}, {STB, M, S },
- {STY, X, D }, {STB, M, D }, {STX, X, D }, {STB, M, DLI },
- {DEY, I, IMP }, {BIT, M, IMM }, {TXB, I, IMP }, {PHB, I, IMP },
- {STY, X, A }, {STB, M, A }, {STX, X, A }, {STB, M, AL },
+ {op::BRA, I, RELB }, {op::STB, M, DXI }, {op::BRL, I, RELW}, {op::STB, M, S },
+ {op::STY, X, D }, {op::STB, M, D }, {op::STX, X, D }, {op::STB, M, DLI },
+ {op::DEY, I, IMP }, {op::BIT, M, IMM }, {op::TXB, I, IMP }, {op::PHB, I, IMP },
+ {op::STY, X, A }, {op::STB, M, A }, {op::STX, X, A }, {op::STB, M, AL },
// 0x90
- {BCC, I, RELB}, {STB, M, DIY }, {STB, M, DI }, {STB, M, SIY },
- {STY, X, DX }, {STB, M, DX }, {STX, X, DY }, {STB, M, DLIY},
- {TYB, I, IMP }, {STB, M, AY }, {TXS, I, IMP }, {TXY, I, IMP },
- {STZ, M, A }, {STB, M, AX }, {STZ, M, AX }, {STB, M, ALX },
+ {op::BCC, I, RELB }, {op::STB, M, DIY }, {op::STB, M, DI }, {op::STB, M, SIY },
+ {op::STY, X, DX }, {op::STB, M, DX }, {op::STX, X, DY }, {op::STB, M, DLIY},
+ {op::TYB, I, IMP }, {op::STB, M, AY }, {op::TXS, I, IMP }, {op::TXY, I, IMP },
+ {op::STZ, M, A }, {op::STB, M, AX }, {op::STZ, M, AX }, {op::STB, M, ALX },
// 0xA0
- {LDY, X, IMM }, {LDB, M, DXI }, {LDX, X, IMM }, {LDB, M, S },
- {LDY, X, D }, {LDB, M, D }, {LDX, X, D }, {LDB, M, DLI },
- {TBY, I, IMP }, {LDB, M, IMM }, {TBX, I, IMP }, {PLB, I, IMP },
- {LDY, X, A }, {LDB, M, A }, {LDX, X, A }, {LDB, M, AL },
+ {op::LDY, X, IMM }, {op::LDB, M, DXI }, {op::LDX, X, IMM }, {op::LDB, M, S },
+ {op::LDY, X, D }, {op::LDB, M, D }, {op::LDX, X, D }, {op::LDB, M, DLI },
+ {op::TBY, I, IMP }, {op::LDB, M, IMM }, {op::TBX, I, IMP }, {op::PLB, I, IMP },
+ {op::LDY, X, A }, {op::LDB, M, A }, {op::LDX, X, A }, {op::LDB, M, AL },
// 0xB0
- {BCS, I, RELB}, {LDB, M, DIY }, {LDB, M, DI }, {LDB, M, SIY },
- {LDY, X, DX }, {LDB, M, DX }, {LDX, X, DY }, {LDB, M, DLIY},
- {CLV, I, IMP }, {LDB, M, AY }, {TSX, I, IMP }, {TYX, I, IMP },
- {LDY, X, AX }, {LDB, M, AX }, {LDX, X, AY }, {LDB, M, ALX },
+ {op::BCS, I, RELB }, {op::LDB, M, DIY }, {op::LDB, M, DI }, {op::LDB, M, SIY },
+ {op::LDY, X, DX }, {op::LDB, M, DX }, {op::LDX, X, DY }, {op::LDB, M, DLIY},
+ {op::CLV, I, IMP }, {op::LDB, M, AY }, {op::TSX, I, IMP }, {op::TYX, I, IMP },
+ {op::LDY, X, AX }, {op::LDB, M, AX }, {op::LDX, X, AY }, {op::LDB, M, ALX },
// 0xC0
- {CPY, X, IMM }, {CMPB, M, DXI }, {CLP, I, IMM }, {CMPB, M, S },
- {CPY, X, D }, {CMPB, M, D }, {DEC, M, D }, {CMPB, M, DLI },
- {INY, I, IMP }, {CMPB, M, IMM }, {DEX, I, IMP }, {WAI, I, IMP },
- {CPY, X, A }, {CMPB, M, A }, {DEC, M, A }, {CMPB, M, AL },
+ {op::CPY, X, IMM }, {op::CMPB,M, DXI }, {op::CLP, I, IMM }, {op::CMPB, M, S },
+ {op::CPY, X, D }, {op::CMPB,M, D }, {op::DEC, M, D }, {op::CMPB, M, DLI },
+ {op::INY, I, IMP }, {op::CMPB,M, IMM }, {op::DEX, I, IMP }, {op::WAI, I, IMP },
+ {op::CPY, X, A }, {op::CMPB,M, A }, {op::DEC, M, A }, {op::CMPB, M, AL },
// 0xD0
- {BNE, I, RELB}, {CMPB, M, DIY }, {CMPB, M, DI }, {CMPB, M, SIY },
- {PEI, I, PEI }, {CMPB, M, DX }, {DEC, M, DX }, {CMPB, M, DLIY},
- {CLD, I, IMP }, {CMPB, M, AY }, {PHX, I, IMP }, {STP, I, IMP },
- {JML, I, AI }, {CMPB, M, AX }, {DEC, M, AX }, {CMPB, M, ALX },
+ {op::BNE, I, RELB }, {op::CMPB,M, DIY }, {op::CMPB,M, DI }, {op::CMPB, M, SIY },
+ {op::PEI, I, PEI }, {op::CMPB,M, DX }, {op::DEC, M, DX }, {op::CMPB, M, DLIY},
+ {op::CLD, I, IMP }, {op::CMPB,M, AY }, {op::PHX, I, IMP }, {op::STP, I, IMP },
+ {op::JML, I, AI }, {op::CMPB,M, AX }, {op::DEC, M, AX }, {op::CMPB, M, ALX },
// 0xE0
- {CPX, X, IMM }, {SBCB, M, DXI }, {SEP, I, IMM }, {SBCB, M, S },
- {CPX, X, D }, {SBCB, M, D }, {INC, M, D }, {SBCB, M, DLI },
- {INX, M, IMP }, {SBCB, M, IMM }, {NOP, I, IMP }, {XBA, I, IMP },
- {CPX, X, A }, {SBCB, M, A }, {INC, M, A }, {SBCB, M, AL },
+ {op::CPX, X, IMM }, {op::SBCB,M, DXI }, {op::SEP, I, IMM }, {op::SBCB, M, S },
+ {op::CPX, X, D }, {op::SBCB,M, D }, {op::INC, M, D }, {op::SBCB, M, DLI },
+ {op::INX, M, IMP }, {op::SBCB,M, IMM }, {op::NOP, I, IMP }, {op::XBA, I, IMP },
+ {op::CPX, X, A }, {op::SBCB,M, A }, {op::INC, M, A }, {op::SBCB, M, AL },
// 0xF0
- {BEQ, I, RELB}, {SBCB, M, DIY }, {SBCB, M, DI }, {SBCB, M, SIY },
- {PEA, I, PEA }, {SBCB, M, DX }, {INC, M, DX }, {SBCB, M, DLIY},
- {SED, I, IMP }, {SBCB, M, AY }, {PLX, I, IMP }, {XCE, I, IMP },
- {JSR, I, AXI }, {SBCB, M, AX }, {INC, M, AX }, {SBCB, M, ALX }
+ {op::BEQ, I, RELB }, {op::SBCB,M, DIY }, {op::SBCB,M, DI }, {op::SBCB, M, SIY },
+ {op::PEA, I, PEA }, {op::SBCB,M, DX }, {op::INC, M, DX }, {op::SBCB, M, DLIY},
+ {op::SED, I, IMP }, {op::SBCB,M, AY }, {op::PLX, I, IMP }, {op::XCE, I, IMP },
+ {op::JSR, I, AXI }, {op::SBCB,M, AX }, {op::INC, M, AX }, {op::SBCB, M, ALX }
};
-static const m7700_opcode_struct g_opcodes_prefix89[256] =
+const m7700_opcode_struct m7700_opcode_struct::s_opcodes_prefix89[256] =
{
- {BRK, I, SIG }, {MPY, M, DXI }, {COP, I, SIG }, {MPY, M, S },
- {TSB, M, D }, {MPY, M, D }, {ASL, M, D }, {MPY, M, DLI },
- {PHP, I, IMP }, {MPY, M, IMM }, {ASL, M, ACC }, {PHD, I, IMP },
- {TSB, M, A }, {MPY, M, A }, {ASL, M, A }, {MPY, M, AL },
+ {op::BRK, I, SIG }, {op::MPY, M, DXI }, {op::COP, I, SIG }, {op::MPY, M, S },
+ {op::TSB, M, D }, {op::MPY, M, D }, {op::ASL, M, D }, {op::MPY, M, DLI },
+ {op::PHP, I, IMP }, {op::MPY, M, IMM }, {op::ASL, M, ACC }, {op::PHD, I, IMP },
+ {op::TSB, M, A }, {op::MPY, M, A }, {op::ASL, M, A }, {op::MPY, M, AL },
// 0x10
- {BPL, I, RELB}, {ORA, M, DIY }, {ORA, M, DI }, {ORA, M, SIY },
- {TRB, M, D }, {MPY, M, DX }, {ASL, M, DX }, {ORA, M, DLIY},
- {CLC, I, IMP }, {MPY, M, AY }, {INA, I, IMP }, {TCS, I, IMP },
- {TRB, M, A }, {ORA, M, AX }, {ASL, M, AX }, {ORA, M, ALX },
+ {op::BPL, I, RELB }, {op::ORA, M, DIY }, {op::ORA, M, DI }, {op::ORA, M, SIY },
+ {op::TRB, M, D }, {op::MPY, M, DX }, {op::ASL, M, DX }, {op::ORA, M, DLIY },
+ {op::CLC, I, IMP }, {op::MPY, M, AY }, {op::INA, I, IMP }, {op::TCS, I, IMP },
+ {op::TRB, M, A }, {op::ORA, M, AX }, {op::ASL, M, AX }, {op::ORA, M, ALX },
// 0x20
- {JSR, I, A }, {AND, M, DXI }, {JSL, I, AL }, {AND, M, S },
- {BIT, M, D }, {AND, M, D }, {ROL, M, D }, {AND, M, DLI },
- {XAB, I, IMP }, {AND, M, IMM }, {ROL, M, ACC }, {PLD, I, IMP },
- {BIT, M, A }, {AND, M, A }, {ROL, M, A }, {AND, M, AL },
+ {op::JSR, I, A }, {op::AND, M, DXI }, {op::JSL, I, AL }, {op::AND, M, S },
+ {op::BIT, M, D }, {op::AND, M, D }, {op::ROL, M, D }, {op::AND, M, DLI },
+ {op::XAB, I, IMP }, {op::AND, M, IMM }, {op::ROL, M, ACC }, {op::PLD, I, IMP },
+ {op::BIT, M, A }, {op::AND, M, A }, {op::ROL, M, A }, {op::AND, M, AL },
// 0x30
- {BMI, I, RELB}, {AND, M, DIY }, {AND, M, DI }, {AND, M, SIY },
- {BIT, M, DX }, {AND, M, DX }, {ROL, M, DX }, {AND, M, DLIY},
- {SEC, I, IMP }, {AND, M, AY }, {DEA, I, IMP }, {TSC, I, IMP },
- {BIT, M, AX }, {AND, M, AX }, {ROL, M, AX }, {AND, M, ALX },
+ {op::BMI, I, RELB }, {op::AND, M, DIY }, {op::AND, M, DI }, {op::AND, M, SIY },
+ {op::BIT, M, DX }, {op::AND, M, DX }, {op::ROL, M, DX }, {op::AND, M, DLIY },
+ {op::SEC, I, IMP }, {op::AND, M, AY }, {op::DEA, I, IMP }, {op::TSC, I, IMP },
+ {op::BIT, M, AX }, {op::AND, M, AX }, {op::ROL, M, AX }, {op::AND, M, ALX },
// 0x40
- {RTI, I, IMP }, {EOR, M, DXI }, {WDM, I, IMP }, {EOR, M, S },
- {MVP, I, MVP }, {EOR, M, D }, {LSR, M, D }, {EOR, M, DLI },
- {PHA, I, IMP }, {RLA, M, IMM }, {LSR, M, ACC }, {PHK, I, IMP },
- {JMP, I, A }, {EOR, M, A }, {LSR, M, A }, {EOR, M, AL },
+ {op::RTI, I, IMP }, {op::EOR, M, DXI }, {op::WDM, I, IMP }, {op::EOR, M, S },
+ {op::MVP, I, MVP }, {op::EOR, M, D }, {op::LSR, M, D }, {op::EOR, M, DLI },
+ {op::PHA, I, IMP }, {op::RLA, M, IMM }, {op::LSR, M, ACC }, {op::PHK, I, IMP },
+ {op::JMP, I, A }, {op::EOR, M, A }, {op::LSR, M, A }, {op::EOR, M, AL },
// 0x50
- {BVC, I, RELB}, {EOR, M, DIY }, {EOR, M, DI }, {EOR, M, SIY },
- {MVN, I, MVN }, {EOR, M, DX }, {LSR, M, DX }, {EOR, M, DLIY},
- {CLI, I, IMP }, {EOR, M, AY }, {PHY, I, IMP }, {TCD, I, IMP },
- {JMP, I, AL }, {EOR, M, AX }, {LSR, M, AX }, {EOR, M, ALX },
+ {op::BVC, I, RELB }, {op::EOR, M, DIY }, {op::EOR, M, DI }, {op::EOR, M, SIY },
+ {op::MVN, I, MVN }, {op::EOR, M, DX }, {op::LSR, M, DX }, {op::EOR, M, DLIY },
+ {op::CLI, I, IMP }, {op::EOR, M, AY }, {op::PHY, I, IMP }, {op::TCD, I, IMP },
+ {op::JMP, I, AL }, {op::EOR, M, AX }, {op::LSR, M, AX }, {op::EOR, M, ALX },
// 0x60
- {RTS, I, IMP }, {ADC, M, DXI }, {PER, I, PER }, {ADC, M, S },
- {STZ, M, D }, {ADC, M, D }, {ROR, M, D }, {ADC, M, DLI },
- {PLA, I, IMP }, {ADC, M, IMM }, {ROR, M, ACC }, {RTL, I, IMP },
- {JMP, I, AI }, {ADC, M, A }, {ROR, M, A }, {ADC, M, AL },
+ {op::RTS, I, IMP }, {op::ADC, M, DXI }, {op::PER, I, PER }, {op::ADC, M, S },
+ {op::STZ, M, D }, {op::ADC, M, D }, {op::ROR, M, D }, {op::ADC, M, DLI },
+ {op::PLA, I, IMP }, {op::ADC, M, IMM }, {op::ROR, M, ACC }, {op::RTL, I, IMP },
+ {op::JMP, I, AI }, {op::ADC, M, A }, {op::ROR, M, A }, {op::ADC, M, AL },
// 0x70
- {BVS, I, RELB}, {ADC, M, DIY }, {ADC, M, DI }, {ADC, M, SIY },
- {STZ, M, DX }, {ADC, M, DX }, {ROR, M, DX }, {ADC, M, DLIY},
- {SEI, I, IMP }, {ADC, M, AY }, {PLY, I, IMP }, {TDC, I, IMP },
- {JMP, I, AXI }, {ADC, M, AX }, {ROR, M, AX }, {ADC, M, ALX },
+ {op::BVS, I, RELB }, {op::ADC, M, DIY }, {op::ADC, M, DI }, {op::ADC, M, SIY },
+ {op::STZ, M, DX }, {op::ADC, M, DX }, {op::ROR, M, DX }, {op::ADC, M, DLIY },
+ {op::SEI, I, IMP }, {op::ADC, M, AY }, {op::PLY, I, IMP }, {op::TDC, I, IMP },
+ {op::JMP, I, AXI }, {op::ADC, M, AX }, {op::ROR, M, AX }, {op::ADC, M, ALX },
// 0x80
- {BRA, I, RELB}, {STA, M, DXI }, {BRL, I, RELW}, {STA, M, S },
- {STY, X, D }, {STA, M, D }, {STX, X, D }, {STA, M, DLI },
- {DEY, I, IMP }, {BIT, M, IMM }, {TXA, I, IMP }, {PHB, I, IMP },
- {STY, X, A }, {STA, M, A }, {STX, X, A }, {STA, M, AL },
+ {op::BRA, I, RELB }, {op::STA, M, DXI }, {op::BRL, I, RELW}, {op::STA, M, S },
+ {op::STY, X, D }, {op::STA, M, D }, {op::STX, X, D }, {op::STA, M, DLI },
+ {op::DEY, I, IMP }, {op::BIT, M, IMM }, {op::TXA, I, IMP }, {op::PHB, I, IMP },
+ {op::STY, X, A }, {op::STA, M, A }, {op::STX, X, A }, {op::STA, M, AL },
// 0x90
- {BCC, I, RELB}, {STA, M, DIY }, {STA, M, DI }, {STA, M, SIY },
- {STY, X, DX }, {STA, M, DX }, {STX, X, DY }, {STA, M, DLIY},
- {TYA, I, IMP }, {STA, M, AY }, {TXS, I, IMP }, {TXY, I, IMP },
- {STZ, M, A }, {STA, M, AX }, {STZ, M, AX }, {STA, M, ALX },
+ {op::BCC, I, RELB }, {op::STA, M, DIY }, {op::STA, M, DI }, {op::STA, M, SIY },
+ {op::STY, X, DX }, {op::STA, M, DX }, {op::STX, X, DY }, {op::STA, M, DLIY },
+ {op::TYA, I, IMP }, {op::STA, M, AY }, {op::TXS, I, IMP }, {op::TXY, I, IMP },
+ {op::STZ, M, A }, {op::STA, M, AX }, {op::STZ, M, AX }, {op::STA, M, ALX },
// 0xA0
- {LDY, X, IMM }, {LDA, M, DXI }, {LDX, X, IMM }, {LDA, M, S },
- {LDY, X, D }, {LDA, M, D }, {LDX, X, D }, {LDA, M, DLI },
- {TAY, I, IMP }, {LDA, M, IMM }, {TAX, I, IMP }, {PLB, I, IMP },
- {LDY, X, A }, {LDA, M, A }, {LDX, X, A }, {LDA, M, AL },
+ {op::LDY, X, IMM }, {op::LDA, M, DXI }, {op::LDX, X, IMM }, {op::LDA, M, S },
+ {op::LDY, X, D }, {op::LDA, M, D }, {op::LDX, X, D }, {op::LDA, M, DLI },
+ {op::TAY, I, IMP }, {op::LDA, M, IMM }, {op::TAX, I, IMP }, {op::PLB, I, IMP },
+ {op::LDY, X, A }, {op::LDA, M, A }, {op::LDX, X, A }, {op::LDA, M, AL },
// 0xB0
- {BCS, I, RELB}, {LDA, M, DIY }, {LDA, M, DI }, {LDA, M, SIY },
- {LDY, X, DX }, {LDA, M, DX }, {LDX, X, DY }, {LDA, M, DLIY},
- {CLV, I, IMP }, {LDA, M, AY }, {TSX, I, IMP }, {TYX, I, IMP },
- {LDY, X, AX }, {LDA, M, AX }, {LDX, X, AY }, {LDA, M, ALX },
+ {op::BCS, I, RELB }, {op::LDA, M, DIY }, {op::LDA, M, DI }, {op::LDA, M, SIY },
+ {op::LDY, X, DX }, {op::LDA, M, DX }, {op::LDX, X, DY }, {op::LDA, M, DLIY },
+ {op::CLV, I, IMP }, {op::LDA, M, AY }, {op::TSX, I, IMP }, {op::TYX, I, IMP },
+ {op::LDY, X, AX }, {op::LDA, M, AX }, {op::LDX, X, AY }, {op::LDA, M, ALX },
// 0xC0
- {CPY, X, IMM }, {CMP, M, DXI }, {LDT, I, IMM }, {CMP, M, S },
- {CPY, X, D }, {CMP, M, D }, {DEC, M, D }, {CMP, M, DLI },
- {INY, I, IMP }, {CMP, M, IMM }, {DEX, I, IMP }, {WAI, I, IMP },
- {CPY, X, A }, {CMP, M, A }, {DEC, M, A }, {CMP, M, AL },
+ {op::CPY, X, IMM }, {op::CMP, M, DXI }, {op::LDT, I, IMM }, {op::CMP, M, S },
+ {op::CPY, X, D }, {op::CMP, M, D }, {op::DEC, M, D }, {op::CMP, M, DLI },
+ {op::INY, I, IMP }, {op::CMP, M, IMM }, {op::DEX, I, IMP }, {op::WAI, I, IMP },
+ {op::CPY, X, A }, {op::CMP, M, A }, {op::DEC, M, A }, {op::CMP, M, AL },
// 0xD0
- {BNE, I, RELB}, {CMP, M, DIY }, {CMP, M, DI }, {CMP, M, SIY },
- {PEI, I, PEI }, {CMP, M, DX }, {DEC, M, DX }, {CMP, M, DLIY},
- {CLD, I, IMP }, {CMP, M, AY }, {PHX, I, IMP }, {STP, I, IMP },
- {JML, I, AI }, {CMP, M, AX }, {DEC, M, AX }, {CMP, M, ALX },
+ {op::BNE, I, RELB }, {op::CMP, M, DIY }, {op::CMP, M, DI }, {op::CMP, M, SIY },
+ {op::PEI, I, PEI }, {op::CMP, M, DX }, {op::DEC, M, DX }, {op::CMP, M, DLIY },
+ {op::CLD, I, IMP }, {op::CMP, M, AY }, {op::PHX, I, IMP }, {op::STP, I, IMP },
+ {op::JML, I, AI }, {op::CMP, M, AX }, {op::DEC, M, AX }, {op::CMP, M, ALX },
// 0xE0
- {CPX, X, IMM }, {SBC, M, DXI }, {SEP, I, IMM }, {SBC, M, S },
- {CPX, X, D }, {SBC, M, D }, {INC, M, D }, {SBC, M, DLI },
- {INX, M, IMP }, {SBC, M, IMM }, {NOP, I, IMP }, {XBA, I, IMP },
- {CPX, X, A }, {SBC, M, A }, {INC, M, A }, {SBC, M, AL },
+ {op::CPX, X, IMM }, {op::SBC, M, DXI }, {op::SEP, I, IMM }, {op::SBC, M, S },
+ {op::CPX, X, D }, {op::SBC, M, D }, {op::INC, M, D }, {op::SBC, M, DLI },
+ {op::INX, M, IMP }, {op::SBC, M, IMM }, {op::NOP, I, IMP }, {op::XBA, I, IMP },
+ {op::CPX, X, A }, {op::SBC, M, A }, {op::INC, M, A }, {op::SBC, M, AL },
// 0xF0
- {BEQ, I, RELB}, {SBC, M, DIY }, {SBC, M, DI }, {SBC, M, SIY },
- {PEA, I, PEA }, {SBC, M, DX }, {INC, M, DX }, {SBC, M, DLIY},
- {SEM, I, IMP }, {SBC, M, AY }, {PLX, I, IMP }, {XCE, I, IMP },
- {JSR, I, AXI }, {SBC, M, AX }, {INC, M, AX }, {SBC, M, ALX }
+ {op::BEQ, I, RELB }, {op::SBC, M, DIY }, {op::SBC, M, DI }, {op::SBC, M, SIY },
+ {op::PEA, I, PEA }, {op::SBC, M, DX }, {op::INC, M, DX }, {op::SBC, M, DLIY },
+ {op::SEM, I, IMP }, {op::SBC, M, AY }, {op::PLX, I, IMP }, {op::XCE, I, IMP },
+ {op::JSR, I, AXI }, {op::SBC, M, AX }, {op::INC, M, AX }, {op::SBC, M, ALX }
};
+} // anonymous namespace
+
static inline unsigned int read_8(const UINT8 *oprom, unsigned int offset)
{
return oprom[offset];
@@ -389,33 +416,33 @@ int m7700_disassemble(char* buff, unsigned int pc, unsigned int pb, const UINT8
// check for prefixes
switch (instruction)
{
- case 0x42:
- address++;
- length++;
- oprom++;
- instruction = read_8(oprom,0);
- opcode = g_opcodes_prefix42 + instruction;
- break;
+ case 0x42:
+ address++;
+ length++;
+ oprom++;
+ instruction = read_8(oprom,0);
+ opcode = &m7700_opcode_struct::get_prefix42(instruction);
+ break;
- case 0x89:
- address++;
- length++;
- oprom++;
- instruction = read_8(oprom,0);
- opcode = g_opcodes_prefix89 + instruction;
- break;
+ case 0x89:
+ address++;
+ length++;
+ oprom++;
+ instruction = read_8(oprom,0);
+ opcode = &m7700_opcode_struct::get_prefix89(instruction);
+ break;
- default:
- opcode = g_opcodes + instruction;
- break;
+ default:
+ opcode = &m7700_opcode_struct::get(instruction);
+ break;
}
- if (opcode->name == JSR)
+ if (opcode->is_call())
flags = DASMFLAG_STEP_OVER;
- else if (opcode->name == RTS || opcode->name == RTI)
+ else if (opcode->is_return())
flags = DASMFLAG_STEP_OUT;
- sprintf(buff, "%s", g_opnames[opcode->name]);
+ sprintf(buff, "%s", opcode->name());
ptr = buff + strlen(buff);
switch(opcode->ea)
diff --git a/src/devices/cpu/tlcs90/tlcs90.cpp b/src/devices/cpu/tlcs90/tlcs90.cpp
index 1ee24461666..5287425c320 100644
--- a/src/devices/cpu/tlcs90/tlcs90.cpp
+++ b/src/devices/cpu/tlcs90/tlcs90.cpp
@@ -16,7 +16,6 @@
#include "debugger.h"
#include "tlcs90.h"
-enum _e_op { UNKNOWN, NOP, EX, EXX, LD, LDW, LDA, LDI, LDIR, LDD, LDDR, CPI, CPIR, CPD, CPDR, PUSH, POP, JP, JR, CALL, CALLR, RET, RETI, HALT, DI, EI, SWI, DAA, CPL, NEG, LDAR, RCF, SCF, CCF, TSET, BIT, SET, RES, INC, DEC, INCX, DECX, INCW, DECW, ADD, ADC, SUB, SBC, AND, XOR, OR, CP, RLC, RRC, RL, RR, SLA, SRA, SLL, SRL, RLD, RRD, DJNZ, MUL, DIV };
static const char *const op_names[] = { "??", "nop", "ex", "exx", "ld", "ldw", "lda", "ldi", "ldir", "ldd", "lddr", "cpi", "cpir", "cpd", "cpdr", "push", "pop", "jp", "jr", "call", "callr", "ret", "reti", "halt", "di", "ei", "swi", "daa", "cpl", "neg", "ldar", "rcf", "scf", "ccf", "tset", "bit", "set", "res", "inc", "dec", "incx", "decx", "incw", "decw", "add", "adc", "sub", "sbc", "and", "xor", "or", "cp", "rlc", "rrc", "rl", "rr", "sla", "sra", "sll", "srl", "rld", "rrd", "djnz", "mul", "div" };
ALLOW_SAVE_TYPE(tlcs90_device::e_mode); // allow save_item on a non-fundamental type
diff --git a/src/devices/cpu/tlcs90/tlcs90.h b/src/devices/cpu/tlcs90/tlcs90.h
index 35c5cc15c77..68f853994e9 100644
--- a/src/devices/cpu/tlcs90/tlcs90.h
+++ b/src/devices/cpu/tlcs90/tlcs90.h
@@ -34,6 +34,8 @@ public:
TIMER_CALLBACK_MEMBER( t90_timer4_callback );
protected:
+ enum _e_op { UNKNOWN, NOP, EX, EXX, LD, LDW, LDA, LDI, LDIR, LDD, LDDR, CPI, CPIR, CPD, CPDR, PUSH, POP, JP, JR, CALL, CALLR, RET, RETI, HALT, DI, EI, SWI, DAA, CPL, NEG, LDAR, RCF, SCF, CCF, TSET, BIT, SET, RES, INC, DEC, INCX, DECX, INCW, DECW, ADD, ADC, SUB, SBC, AND, XOR, OR, CP, RLC, RRC, RL, RR, SLA, SRA, SLL, SRL, RLD, RRD, DJNZ, MUL, DIV };
+
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
diff --git a/src/devices/cpu/upd7810/upd7810_dasm.cpp b/src/devices/cpu/upd7810/upd7810_dasm.cpp
index a203a218462..2a078fe3dc8 100644
--- a/src/devices/cpu/upd7810/upd7810_dasm.cpp
+++ b/src/devices/cpu/upd7810/upd7810_dasm.cpp
@@ -12,191 +12,246 @@
#include "debugger.h"
#include "upd7810.h"
-struct dasm_s {
- UINT8 token;
- const void *args;
-};
+namespace {
-enum
+class dasm_s
{
- illegal=1,
- ACI,
- ADC,
- ADCW,
- ADCX,
- ADD,
- ADDNC,
- ADDNCW,
- ADDNCX,
- ADDW,
- ADDX,
- ADI,
- ADINC,
- ANA,
- ANAW,
- ANAX,
- AND,
- ANI,
- ANIW,
- BIT,
- BLOCK,
- CALB,
- CALF,
- CALL,
- CALT,
- CLC,
- CLR, /* 7807 */
- CMC, /* 7807 */
- DAA,
- DADC,
- DADD,
- DADDNC,
- DAN,
- DCR,
- DCRW,
- DCX,
- DEQ,
- DGT,
- DI,
- DIV,
- DLT,
- DMOV,
- DNE,
- DOFF,
- DON,
- DOR,
- DRLL,
- DRLR,
- DSBB,
- DSLL,
- DSLR,
- DSUB,
- DSUBNB,
- DXR,
- EADD,
- EI,
- EQA,
- EQAW,
- EQAX,
- EQI,
- EQIW,
- ESUB,
- EX, /* 7801 */
- EXA,
- EXH,
- EXX,
- EXR, /* 7807 */
- GTA,
- GTAW,
- GTAX,
- GTI,
- GTIW,
- HALT,
- IN, /* 7801 */
- INR,
- INRW,
- INX,
- JB,
- JEA,
- JMP,
- JR,
- JRE,
- LBCD,
- LDAW,
- LDAX,
- LDEAX,
- LDED,
- LHLD,
- LSPD,
- LTA,
- LTAW,
- LTAX,
- LTI,
- LTIW,
- LXI,
- MOV,
- MUL,
- MVI,
- MVIW,
- MVIX,
- NEA,
- NEAW,
- NEAX,
- NEGA,
- NEI,
- NEIW,
- NOP,
- NOT, /* 7807 */
- OFFA,
- OFFAW,
- OFFAX,
- OFFI,
- OFFIW,
- ONA,
- ONAW,
- ONAX,
- ONI,
- ONIW,
- OR, /* 7807 */
- ORA,
- ORAW,
- ORAX,
- ORI,
- ORIW,
- OUT, /* 7801 */
- PER, /* 7801 */
- PEX, /* 7801 */
- POP,
- PUSH,
- RET,
- RETI,
- RETS,
- RLD,
- RLL,
- RLR,
- RRD,
- SBB,
- SBBW,
- SBBX,
- SBCD,
- SBI,
- SDED,
- SETB, /* 7807 */
- SHLD,
- SIO, /* 7801 */
- SK,
- SKIT,
- SKN,
- SKNIT,
- SLL,
- SLLC,
- SLR,
- SLRC,
- SOFTI,
- SSPD,
- STAW,
- STAX,
- STC,
- STEAX,
- STM, /* 7801 */
- STOP,
- SUB,
- SUBNB,
- SUBNBW,
- SUBNBX,
- SUBW,
- SUBX,
- SUI,
- SUINB,
- TABLE,
- XOR, /* 7807 */
- XRA,
- XRAW,
- XRAX,
- XRI
+public:
+ const char *name() const { return token_names[m_token]; }
+ const char *args() const { return (m_token != prefix) ? reinterpret_cast(m_args) : nullptr; }
+
+ bool is_prefix() const { return m_token == prefix; }
+ bool is_call() const { return (m_token == CALB) || (m_token == CALF) || (m_token == CALL) || (m_token == CALT); }
+ bool is_return() const { return (m_token == RET) || (m_token == RETI); }
+
+ const dasm_s &prefix_get(UINT8 op) const { assert(m_token == prefix); return reinterpret_cast(m_args)[op]; }
+
+ static const dasm_s XX_7810[256];
+ static const dasm_s XX_7807[256];
+
+ static const dasm_s XX_7801[256];
+ static const dasm_s XX_78c05[256];
+
+protected:
+ enum
+ {
+ prefix = 0,
+ illegal,
+ ACI,
+ ADC,
+ ADCW,
+ ADCX,
+ ADD,
+ ADDNC,
+ ADDNCW,
+ ADDNCX,
+ ADDW,
+ ADDX,
+ ADI,
+ ADINC,
+ ANA,
+ ANAW,
+ ANAX,
+ AND,
+ ANI,
+ ANIW,
+ BIT,
+ BLOCK,
+ CALB,
+ CALF,
+ CALL,
+ CALT,
+ CLC,
+ CLR, /* 7807 */
+ CMC, /* 7807 */
+ DAA,
+ DADC,
+ DADD,
+ DADDNC,
+ DAN,
+ DCR,
+ DCRW,
+ DCX,
+ DEQ,
+ DGT,
+ DI,
+ DIV,
+ DLT,
+ DMOV,
+ DNE,
+ DOFF,
+ DON,
+ DOR,
+ DRLL,
+ DRLR,
+ DSBB,
+ DSLL,
+ DSLR,
+ DSUB,
+ DSUBNB,
+ DXR,
+ EADD,
+ EI,
+ EQA,
+ EQAW,
+ EQAX,
+ EQI,
+ EQIW,
+ ESUB,
+ EX, /* 7801 */
+ EXA,
+ EXH,
+ EXX,
+ EXR, /* 7807 */
+ GTA,
+ GTAW,
+ GTAX,
+ GTI,
+ GTIW,
+ HALT,
+ IN, /* 7801 */
+ INR,
+ INRW,
+ INX,
+ JB,
+ JEA,
+ JMP,
+ JR,
+ JRE,
+ LBCD,
+ LDAW,
+ LDAX,
+ LDEAX,
+ LDED,
+ LHLD,
+ LSPD,
+ LTA,
+ LTAW,
+ LTAX,
+ LTI,
+ LTIW,
+ LXI,
+ MOV,
+ MUL,
+ MVI,
+ MVIW,
+ MVIX,
+ NEA,
+ NEAW,
+ NEAX,
+ NEGA,
+ NEI,
+ NEIW,
+ NOP,
+ NOT, /* 7807 */
+ OFFA,
+ OFFAW,
+ OFFAX,
+ OFFI,
+ OFFIW,
+ ONA,
+ ONAW,
+ ONAX,
+ ONI,
+ ONIW,
+ OR, /* 7807 */
+ ORA,
+ ORAW,
+ ORAX,
+ ORI,
+ ORIW,
+ OUT, /* 7801 */
+ PER, /* 7801 */
+ PEX, /* 7801 */
+ POP,
+ PUSH,
+ RET,
+ RETI,
+ RETS,
+ RLD,
+ RLL,
+ RLR,
+ RRD,
+ SBB,
+ SBBW,
+ SBBX,
+ SBCD,
+ SBI,
+ SDED,
+ SETB, /* 7807 */
+ SHLD,
+ SIO, /* 7801 */
+ SK,
+ SKIT,
+ SKN,
+ SKNIT,
+ SLL,
+ SLLC,
+ SLR,
+ SLRC,
+ SOFTI,
+ SSPD,
+ STAW,
+ STAX,
+ STC,
+ STEAX,
+ STM, /* 7801 */
+ STOP,
+ SUB,
+ SUBNB,
+ SUBNBW,
+ SUBNBX,
+ SUBW,
+ SUBX,
+ SUI,
+ SUINB,
+ TABLE,
+ XOR, /* 7807 */
+ XRA,
+ XRAW,
+ XRAX,
+ XRI
+ };
+
+ dasm_s() : m_token(illegal), m_args(nullptr) { }
+ dasm_s(UINT8 t, const char *a) : m_token(t), m_args(a) { }
+ dasm_s(const dasm_s (&a)[256]) : m_token(prefix), m_args(a) { }
+
+ UINT8 m_token;
+ const void *m_args;
+
+ static const char *const token_names[];
+
+ static const dasm_s d48_7810[256];
+ static const dasm_s d48_7807[256];
+ static const dasm_s d4C_7810[256];
+ static const dasm_s d4C_7807[256];
+ static const dasm_s d4D_7810[256];
+ static const dasm_s d4D_7807[256];
+ static const dasm_s d60[256];
+ static const dasm_s d64_7810[256];
+ static const dasm_s d64_7807[256];
+ static const dasm_s d70[256];
+ static const dasm_s d74[256];
+
+ static const dasm_s d48_7801[256];
+ static const dasm_s d4C_7801[256];
+ static const dasm_s d4D_7801[256];
+ static const dasm_s d60_7801[256];
+ static const dasm_s d64_7801[256];
+ static const dasm_s d70_7801[256];
+ static const dasm_s d74_7801[256];
+
+ static const dasm_s d48_78c05[256];
+ static const dasm_s d4C_78c05[256];
+ static const dasm_s d4D_78c05[256];
+ static const dasm_s d60_78c05[256];
+ static const dasm_s d64_78c05[256];
+ static const dasm_s d70_78c05[256];
+ static const dasm_s d74_78c05[256];
};
-static const char *const token[] =
+const char *const dasm_s::token_names[] =
{
"",
"illegal",
@@ -377,3586 +432,3586 @@ static const char *const token[] =
};
-/* prefix 48 */
-static const struct dasm_s dasm48_7810[256] =
+// prefix 48
+const dasm_s dasm_s::d48_7810[256] =
{
- {illegal,nullptr }, /* 00: 0100 1000 0000 0000 */
- {SLRC,"A" }, /* 01: 0100 1000 0000 0001 */
- {SLRC,"B" }, /* 02: 0100 1000 0000 0010 */
- {SLRC,"C" }, /* 03: 0100 1000 0000 0011 */
- {illegal,nullptr }, /* 04: 0100 1000 0000 0100 */
- {SLLC,"A" }, /* 05: 0100 1000 0000 0101 */
- {SLLC,"B" }, /* 06: 0100 1000 0000 0110 */
- {SLLC,"C" }, /* 07: 0100 1000 0000 0111 */
- {SK,"NV" }, /* 08: 0100 1000 0000 1000 */
- {illegal,nullptr }, /* 09: 0100 1000 0000 1001 */
- {SK,"CY" }, /* 0a: 0100 1000 0000 1010 */
- {SK,"HC" }, /* 0b: 0100 1000 0000 1011 */
- {SK,"Z" }, /* 0c: 0100 1000 0000 1100 */
- {illegal,nullptr }, /* 0d: 0100 1000 0000 1101 */
- {illegal,nullptr }, /* 0e: 0100 1000 0000 1110 */
- {illegal,nullptr }, /* 0f: 0100 1000 0000 1111 */
+ { }, // 00: 0100 1000 0000 0000
+ {SLRC, "A" }, // 01: 0100 1000 0000 0001
+ {SLRC, "B" }, // 02: 0100 1000 0000 0010
+ {SLRC, "C" }, // 03: 0100 1000 0000 0011
+ { }, // 04: 0100 1000 0000 0100
+ {SLLC, "A" }, // 05: 0100 1000 0000 0101
+ {SLLC, "B" }, // 06: 0100 1000 0000 0110
+ {SLLC, "C" }, // 07: 0100 1000 0000 0111
+ {SK, "NV" }, // 08: 0100 1000 0000 1000
+ { }, // 09: 0100 1000 0000 1001
+ {SK, "CY" }, // 0a: 0100 1000 0000 1010
+ {SK, "HC" }, // 0b: 0100 1000 0000 1011
+ {SK, "Z" }, // 0c: 0100 1000 0000 1100
+ { }, // 0d: 0100 1000 0000 1101
+ { }, // 0e: 0100 1000 0000 1110
+ { }, // 0f: 0100 1000 0000 1111
- {illegal,nullptr }, /* 10: 0100 1000 0001 0000 */
- {illegal,nullptr }, /* 11: 0100 1000 0001 0001 */
- {illegal,nullptr }, /* 12: 0100 1000 0001 0010 */
- {illegal,nullptr }, /* 13: 0100 1000 0001 0011 */
- {illegal,nullptr }, /* 14: 0100 1000 0001 0100 */
- {illegal,nullptr }, /* 15: 0100 1000 0001 0101 */
- {illegal,nullptr }, /* 16: 0100 1000 0001 0110 */
- {illegal,nullptr }, /* 17: 0100 1000 0001 0111 */
- {SKN,"NV" }, /* 18: 0100 1000 0001 1000 */
- {illegal,nullptr }, /* 19: 0100 1000 0001 1001 */
- {SKN,"CY" }, /* 1a: 0100 1000 0001 1010 */
- {SKN,"HC" }, /* 1b: 0100 1000 0001 1011 */
- {SKN,"Z" }, /* 1c: 0100 1000 0001 1100 */
- {illegal,nullptr }, /* 1d: 0100 1000 0001 1101 */
- {illegal,nullptr }, /* 1e: 0100 1000 0001 1110 */
- {illegal,nullptr }, /* 1f: 0100 1000 0001 1111 */
+ { }, // 10: 0100 1000 0001 0000
+ { }, // 11: 0100 1000 0001 0001
+ { }, // 12: 0100 1000 0001 0010
+ { }, // 13: 0100 1000 0001 0011
+ { }, // 14: 0100 1000 0001 0100
+ { }, // 15: 0100 1000 0001 0101
+ { }, // 16: 0100 1000 0001 0110
+ { }, // 17: 0100 1000 0001 0111
+ {SKN, "NV" }, // 18: 0100 1000 0001 1000
+ { }, // 19: 0100 1000 0001 1001
+ {SKN, "CY" }, // 1a: 0100 1000 0001 1010
+ {SKN, "HC" }, // 1b: 0100 1000 0001 1011
+ {SKN, "Z" }, // 1c: 0100 1000 0001 1100
+ { }, // 1d: 0100 1000 0001 1101
+ { }, // 1e: 0100 1000 0001 1110
+ { }, // 1f: 0100 1000 0001 1111
- {illegal,nullptr }, /* 20: 0100 1000 0010 0000 */
- {SLR,"A" }, /* 21: 0100 1000 0010 0001 */
- {SLR,"B" }, /* 22: 0100 1000 0010 0010 */
- {SLR,"C" }, /* 23: 0100 1000 0010 0011 */
- {illegal,nullptr }, /* 24: 0100 1000 0010 0100 */
- {SLL,"A" }, /* 25: 0100 1000 0010 0101 */
- {SLL,"B" }, /* 26: 0100 1000 0010 0110 */
- {SLL,"C" }, /* 27: 0100 1000 0010 0111 */
- {JEA,nullptr }, /* 28: 0100 1000 0010 1000 */
- {CALB,nullptr }, /* 29: 0100 1000 0010 1001 */
- {CLC,nullptr }, /* 2a: 0100 1000 0010 1010 */
- {STC,nullptr }, /* 2b: 0100 1000 0010 1011 */
- {illegal,nullptr }, /* 2c: 0100 1000 0010 1100 */
- {MUL,"A" }, /* 2d: 0100 1000 0010 1101 */
- {MUL,"B" }, /* 2e: 0100 1000 0010 1110 */
- {MUL,"C" }, /* 2f: 0100 1000 0010 1111 */
+ { }, // 20: 0100 1000 0010 0000
+ {SLR, "A" }, // 21: 0100 1000 0010 0001
+ {SLR, "B" }, // 22: 0100 1000 0010 0010
+ {SLR, "C" }, // 23: 0100 1000 0010 0011
+ { }, // 24: 0100 1000 0010 0100
+ {SLL, "A" }, // 25: 0100 1000 0010 0101
+ {SLL, "B" }, // 26: 0100 1000 0010 0110
+ {SLL, "C" }, // 27: 0100 1000 0010 0111
+ {JEA, nullptr }, // 28: 0100 1000 0010 1000
+ {CALB,nullptr }, // 29: 0100 1000 0010 1001
+ {CLC, nullptr }, // 2a: 0100 1000 0010 1010
+ {STC, nullptr }, // 2b: 0100 1000 0010 1011
+ { }, // 2c: 0100 1000 0010 1100
+ {MUL, "A" }, // 2d: 0100 1000 0010 1101
+ {MUL, "B" }, // 2e: 0100 1000 0010 1110
+ {MUL, "C" }, // 2f: 0100 1000 0010 1111
- {illegal,nullptr }, /* 30: 0100 1000 0011 0000 */
- {RLR,"A" }, /* 31: 0100 1000 0011 0001 */
- {RLR,"B" }, /* 32: 0100 1000 0011 0010 */
- {RLR,"C" }, /* 33: 0100 1000 0011 0011 */
- {illegal,nullptr }, /* 34: 0100 1000 0011 0100 */
- {RLL,"A" }, /* 35: 0100 1000 0011 0101 */
- {RLL,"B" }, /* 36: 0100 1000 0011 0110 */
- {RLL,"C" }, /* 37: 0100 1000 0011 0111 */
- {RLD,nullptr }, /* 38: 0100 1000 0011 1000 */
- {RRD,nullptr }, /* 39: 0100 1000 0011 1001 */
- {NEGA,nullptr }, /* 3a: 0100 1000 0011 1010 */
- {HALT,nullptr }, /* 3b: 0100 1000 0011 1011 */
- {illegal,nullptr }, /* 3c: 0100 1000 0011 1100 */
- {DIV,"A" }, /* 3d: 0100 1000 0011 1101 */
- {DIV,"B" }, /* 3e: 0100 1000 0011 1110 */
- {DIV,"C" }, /* 3f: 0100 1000 0011 1111 */
+ { }, // 30: 0100 1000 0011 0000
+ {RLR, "A" }, // 31: 0100 1000 0011 0001
+ {RLR, "B" }, // 32: 0100 1000 0011 0010
+ {RLR, "C" }, // 33: 0100 1000 0011 0011
+ { }, // 34: 0100 1000 0011 0100
+ {RLL, "A" }, // 35: 0100 1000 0011 0101
+ {RLL, "B" }, // 36: 0100 1000 0011 0110
+ {RLL, "C" }, // 37: 0100 1000 0011 0111
+ {RLD, nullptr }, // 38: 0100 1000 0011 1000
+ {RRD, nullptr }, // 39: 0100 1000 0011 1001
+ {NEGA, nullptr }, // 3a: 0100 1000 0011 1010
+ {HALT, nullptr }, // 3b: 0100 1000 0011 1011
+ { }, // 3c: 0100 1000 0011 1100
+ {DIV, "A" }, // 3d: 0100 1000 0011 1101
+ {DIV, "B" }, // 3e: 0100 1000 0011 1110
+ {DIV, "C" }, // 3f: 0100 1000 0011 1111
- {SKIT,"NMI" }, /* 40: 0100 1000 0100 0000 */
- {SKIT,"FT0" }, /* 41: 0100 1000 0100 0001 */
- {SKIT,"FT1" }, /* 42: 0100 1000 0100 0010 */
- {SKIT,"F1" }, /* 43: 0100 1000 0100 0011 */
- {SKIT,"F2" }, /* 44: 0100 1000 0100 0100 */
- {SKIT,"FE0" }, /* 45: 0100 1000 0100 0101 */
- {SKIT,"FE1" }, /* 46: 0100 1000 0100 0110 */
- {SKIT,"FEIN" }, /* 47: 0100 1000 0100 0111 */
- {SKIT,"FAD" }, /* 48: 0100 1000 0100 1000 */
- {SKIT,"FSR" }, /* 49: 0100 1000 0100 1001 */
- {SKIT,"FST" }, /* 4a: 0100 1000 0100 1010 */
- {SKIT,"ER" }, /* 4b: 0100 1000 0100 1011 */
- {SKIT,"OV" }, /* 4c: 0100 1000 0100 1100 */
- {illegal,nullptr }, /* 4d: 0100 1000 0100 1101 */
- {illegal,nullptr }, /* 4e: 0100 1000 0100 1110 */
- {illegal,nullptr }, /* 4f: 0100 1000 0100 1111 */
+ {SKIT, "NMI" }, // 40: 0100 1000 0100 0000
+ {SKIT, "FT0" }, // 41: 0100 1000 0100 0001
+ {SKIT, "FT1" }, // 42: 0100 1000 0100 0010
+ {SKIT, "F1" }, // 43: 0100 1000 0100 0011
+ {SKIT, "F2" }, // 44: 0100 1000 0100 0100
+ {SKIT, "FE0" }, // 45: 0100 1000 0100 0101
+ {SKIT, "FE1" }, // 46: 0100 1000 0100 0110
+ {SKIT, "FEIN" }, // 47: 0100 1000 0100 0111
+ {SKIT, "FAD" }, // 48: 0100 1000 0100 1000
+ {SKIT, "FSR" }, // 49: 0100 1000 0100 1001
+ {SKIT, "FST" }, // 4a: 0100 1000 0100 1010
+ {SKIT, "ER" }, // 4b: 0100 1000 0100 1011
+ {SKIT, "OV" }, // 4c: 0100 1000 0100 1100
+ { }, // 4d: 0100 1000 0100 1101
+ { }, // 4e: 0100 1000 0100 1110
+ { }, // 4f: 0100 1000 0100 1111
- {SKIT,"AN4" }, /* 50: 0100 1000 0101 0000 */
- {SKIT,"AN5" }, /* 51: 0100 1000 0101 0001 */
- {SKIT,"AN6" }, /* 52: 0100 1000 0101 0010 */
- {SKIT,"AN7" }, /* 53: 0100 1000 0101 0011 */
- {SKIT,"SB" }, /* 54: 0100 1000 0101 0100 */
- {illegal,nullptr }, /* 55: 0100 1000 0101 0101 */
- {illegal,nullptr }, /* 56: 0100 1000 0101 0110 */
- {illegal,nullptr }, /* 57: 0100 1000 0101 0111 */
- {illegal,nullptr }, /* 58: 0100 1000 0101 1000 */
- {illegal,nullptr }, /* 59: 0100 1000 0101 1001 */
- {illegal,nullptr }, /* 5a: 0100 1000 0101 1010 */
- {illegal,nullptr }, /* 5b: 0100 1000 0101 1011 */
- {illegal,nullptr }, /* 5c: 0100 1000 0101 1100 */
- {illegal,nullptr }, /* 5d: 0100 1000 0101 1101 */
- {illegal,nullptr }, /* 5e: 0100 1000 0101 1110 */
- {illegal,nullptr }, /* 5f: 0100 1000 0101 1111 */
+ {SKIT, "AN4" }, // 50: 0100 1000 0101 0000
+ {SKIT, "AN5" }, // 51: 0100 1000 0101 0001
+ {SKIT, "AN6" }, // 52: 0100 1000 0101 0010
+ {SKIT, "AN7" }, // 53: 0100 1000 0101 0011
+ {SKIT, "SB" }, // 54: 0100 1000 0101 0100
+ { }, // 55: 0100 1000 0101 0101
+ { }, // 56: 0100 1000 0101 0110
+ { }, // 57: 0100 1000 0101 0111
+ { }, // 58: 0100 1000 0101 1000
+ { }, // 59: 0100 1000 0101 1001
+ { }, // 5a: 0100 1000 0101 1010
+ { }, // 5b: 0100 1000 0101 1011
+ { }, // 5c: 0100 1000 0101 1100
+ { }, // 5d: 0100 1000 0101 1101
+ { }, // 5e: 0100 1000 0101 1110
+ { }, // 5f: 0100 1000 0101 1111
- {SKNIT,"NMI" }, /* 60: 0100 1000 0110 0000 */
- {SKNIT,"FT0" }, /* 61: 0100 1000 0110 0001 */
- {SKNIT,"FT1" }, /* 62: 0100 1000 0110 0010 */
- {SKNIT,"F1" }, /* 63: 0100 1000 0110 0011 */
- {SKNIT,"F2" }, /* 64: 0100 1000 0110 0100 */
- {SKNIT,"FE0" }, /* 65: 0100 1000 0110 0101 */
- {SKNIT,"FE1" }, /* 66: 0100 1000 0110 0110 */
- {SKNIT,"FEIN" }, /* 67: 0100 1000 0110 0111 */
- {SKNIT,"FAD" }, /* 68: 0100 1000 0110 1000 */
- {SKNIT,"FSR" }, /* 69: 0100 1000 0110 1001 */
- {SKNIT,"FST" }, /* 6a: 0100 1000 0110 1010 */
- {SKNIT,"ER" }, /* 6b: 0100 1000 0110 1011 */
- {SKNIT,"OV" }, /* 6c: 0100 1000 0110 1100 */
- {illegal,nullptr }, /* 6d: 0100 1000 0110 1101 */
- {illegal,nullptr }, /* 6e: 0100 1000 0110 1110 */
- {illegal,nullptr }, /* 6f: 0100 1000 0110 1111 */
+ {SKNIT, "NMI" }, // 60: 0100 1000 0110 0000
+ {SKNIT, "FT0" }, // 61: 0100 1000 0110 0001
+ {SKNIT, "FT1" }, // 62: 0100 1000 0110 0010
+ {SKNIT, "F1" }, // 63: 0100 1000 0110 0011
+ {SKNIT, "F2" }, // 64: 0100 1000 0110 0100
+ {SKNIT, "FE0" }, // 65: 0100 1000 0110 0101
+ {SKNIT, "FE1" }, // 66: 0100 1000 0110 0110
+ {SKNIT, "FEIN" }, // 67: 0100 1000 0110 0111
+ {SKNIT, "FAD" }, // 68: 0100 1000 0110 1000
+ {SKNIT, "FSR" }, // 69: 0100 1000 0110 1001
+ {SKNIT, "FST" }, // 6a: 0100 1000 0110 1010
+ {SKNIT, "ER" }, // 6b: 0100 1000 0110 1011
+ {SKNIT, "OV" }, // 6c: 0100 1000 0110 1100
+ { }, // 6d: 0100 1000 0110 1101
+ { }, // 6e: 0100 1000 0110 1110
+ { }, // 6f: 0100 1000 0110 1111
- {SKNIT,"AN4" }, /* 70: 0100 1000 0111 0000 */
- {SKNIT,"AN5" }, /* 71: 0100 1000 0111 0001 */
- {SKNIT,"AN6" }, /* 72: 0100 1000 0111 0010 */
- {SKNIT,"AN7" }, /* 73: 0100 1000 0111 0011 */
- {SKNIT,"SB" }, /* 74: 0100 1000 0111 0100 */
- {illegal,nullptr }, /* 75: 0100 1000 0111 0101 */
- {illegal,nullptr }, /* 76: 0100 1000 0111 0110 */
- {illegal,nullptr }, /* 77: 0100 1000 0111 0111 */
- {illegal,nullptr }, /* 78: 0100 1000 0111 1000 */
- {illegal,nullptr }, /* 79: 0100 1000 0111 1001 */
- {illegal,nullptr }, /* 7a: 0100 1000 0111 1010 */
- {illegal,nullptr }, /* 7b: 0100 1000 0111 1011 */
- {illegal,nullptr }, /* 7c: 0100 1000 0111 1100 */
- {illegal,nullptr }, /* 7d: 0100 1000 0111 1101 */
- {illegal,nullptr }, /* 7e: 0100 1000 0111 1110 */
- {illegal,nullptr }, /* 7f: 0100 1000 0111 1111 */
+ {SKNIT, "AN4" }, // 70: 0100 1000 0111 0000
+ {SKNIT, "AN5" }, // 71: 0100 1000 0111 0001
+ {SKNIT, "AN6" }, // 72: 0100 1000 0111 0010
+ {SKNIT, "AN7" }, // 73: 0100 1000 0111 0011
+ {SKNIT, "SB" }, // 74: 0100 1000 0111 0100
+ { }, // 75: 0100 1000 0111 0101
+ { }, // 76: 0100 1000 0111 0110
+ { }, // 77: 0100 1000 0111 0111
+ { }, // 78: 0100 1000 0111 1000
+ { }, // 79: 0100 1000 0111 1001
+ { }, // 7a: 0100 1000 0111 1010
+ { }, // 7b: 0100 1000 0111 1011
+ { }, // 7c: 0100 1000 0111 1100
+ { }, // 7d: 0100 1000 0111 1101
+ { }, // 7e: 0100 1000 0111 1110
+ { }, // 7f: 0100 1000 0111 1111
- {illegal,nullptr }, /* 80: 0100 1000 1000 0000 */
- {illegal,nullptr }, /* 81: 0100 1000 1000 0001 */
- {LDEAX,"(DE)" }, /* 82: 0100 1000 1000 0010 */
- {LDEAX,"(HL)" }, /* 83: 0100 1000 1000 0011 */
- {LDEAX,"(DE++)" }, /* 84: 0100 1000 1000 0100 */
- {LDEAX,"(HL++)" }, /* 85: 0100 1000 1000 0101 */
- {illegal,nullptr }, /* 86: 0100 1000 1000 0110 */
- {illegal,nullptr }, /* 87: 0100 1000 1000 0111 */
- {illegal,nullptr }, /* 88: 0100 1000 1000 1000 */
- {illegal,nullptr }, /* 89: 0100 1000 1000 1001 */
- {illegal,nullptr }, /* 8a: 0100 1000 1000 1010 */
- {LDEAX,"(DE+%b)"}, /* 8b: 0100 1000 1000 1011 xxxx xxxx */
- {LDEAX,"(HL+A)" }, /* 8c: 0100 1000 1000 1100 */
- {LDEAX,"(HL+B)" }, /* 8d: 0100 1000 1000 1101 */
- {LDEAX,"(HL+EA)"}, /* 8e: 0100 1000 1000 1110 */
- {LDEAX,"(HL+%b)"}, /* 8f: 0100 1000 1000 1111 xxxx xxxx */
+ { }, // 80: 0100 1000 1000 0000
+ { }, // 81: 0100 1000 1000 0001
+ {LDEAX, "(DE)" }, // 82: 0100 1000 1000 0010
+ {LDEAX, "(HL)" }, // 83: 0100 1000 1000 0011
+ {LDEAX, "(DE++)" }, // 84: 0100 1000 1000 0100
+ {LDEAX, "(HL++)" }, // 85: 0100 1000 1000 0101
+ { }, // 86: 0100 1000 1000 0110
+ { }, // 87: 0100 1000 1000 0111
+ { }, // 88: 0100 1000 1000 1000
+ { }, // 89: 0100 1000 1000 1001
+ { }, // 8a: 0100 1000 1000 1010
+ {LDEAX, "(DE+%b)" }, // 8b: 0100 1000 1000 1011 xxxx xxxx
+ {LDEAX, "(HL+A)" }, // 8c: 0100 1000 1000 1100
+ {LDEAX, "(HL+B)" }, // 8d: 0100 1000 1000 1101
+ {LDEAX, "(HL+EA)" }, // 8e: 0100 1000 1000 1110
+ {LDEAX, "(HL+%b)" }, // 8f: 0100 1000 1000 1111 xxxx xxxx
- {illegal,nullptr }, /* 90: 0100 1000 1000 0000 */
- {illegal,nullptr }, /* 91: 0100 1000 1000 0001 */
- {STEAX,"(DE)" }, /* 92: 0100 1000 1000 0010 */
- {STEAX,"(HL)" }, /* 93: 0100 1000 1000 0011 */
- {STEAX,"(DE++)" }, /* 94: 0100 1000 1000 0100 */
- {STEAX,"(HL++)" }, /* 95: 0100 1000 1000 0101 */
- {illegal,nullptr }, /* 96: 0100 1000 1000 0110 */
- {illegal,nullptr }, /* 97: 0100 1000 1000 0111 */
- {illegal,nullptr }, /* 98: 0100 1000 1000 1000 */
- {illegal,nullptr }, /* 99: 0100 1000 1000 1001 */
- {illegal,nullptr }, /* 9a: 0100 1000 1000 1010 */
- {STEAX,"(DE+%b)"}, /* 9b: 0100 1000 1000 1011 xxxx xxxx */
- {STEAX,"(HL+A)" }, /* 9c: 0100 1000 1000 1100 */
- {STEAX,"(HL+B)" }, /* 9d: 0100 1000 1000 1101 */
- {STEAX,"(HL+EA)"}, /* 9e: 0100 1000 1000 1110 */
- {STEAX,"(HL+%b)"}, /* 9f: 0100 1000 1000 1111 xxxx xxxx */
+ { }, // 90: 0100 1000 1000 0000
+ { }, // 91: 0100 1000 1000 0001
+ {STEAX, "(DE)" }, // 92: 0100 1000 1000 0010
+ {STEAX, "(HL)" }, // 93: 0100 1000 1000 0011
+ {STEAX, "(DE++)" }, // 94: 0100 1000 1000 0100
+ {STEAX, "(HL++)" }, // 95: 0100 1000 1000 0101
+ { }, // 96: 0100 1000 1000 0110
+ { }, // 97: 0100 1000 1000 0111
+ { }, // 98: 0100 1000 1000 1000
+ { }, // 99: 0100 1000 1000 1001
+ { }, // 9a: 0100 1000 1000 1010
+ {STEAX, "(DE+%b)" }, // 9b: 0100 1000 1000 1011 xxxx xxxx
+ {STEAX, "(HL+A)" }, // 9c: 0100 1000 1000 1100
+ {STEAX, "(HL+B)" }, // 9d: 0100 1000 1000 1101
+ {STEAX, "(HL+EA)" }, // 9e: 0100 1000 1000 1110
+ {STEAX, "(HL+%b)" }, // 9f: 0100 1000 1000 1111 xxxx xxxx
- {DSLR,"EA" }, /* a0: 0100 1000 1010 0000 */
- {illegal,nullptr }, /* a1: 0100 1000 1010 0001 */
- {illegal,nullptr }, /* a2: 0100 1000 1010 0010 */
- {illegal,nullptr }, /* a3: 0100 1000 1010 0011 */
- {DSLL,"EA" }, /* a4: 0100 1000 1010 0100 */
- {illegal,nullptr }, /* a5: 0100 1000 1010 0101 */
- {illegal,nullptr }, /* a6: 0100 1000 1010 0110 */
- {illegal,nullptr }, /* a7: 0100 1000 1010 0111 */
- {TABLE,nullptr }, /* a8: 0100 1000 1010 1000 */
- {illegal,nullptr }, /* a9: 0100 1000 1010 1001 */
- {illegal,nullptr }, /* aa: 0100 1000 1010 1010 */
- {illegal,nullptr }, /* ab: 0100 1000 1010 1011 */
- {illegal,nullptr }, /* ac: 0100 1000 1010 1100 */
- {illegal,nullptr }, /* ad: 0100 1000 1010 1101 */
- {illegal,nullptr }, /* ae: 0100 1000 1010 1110 */
- {illegal,nullptr }, /* af: 0100 1000 1010 1111 */
+ {DSLR, "EA" }, // a0: 0100 1000 1010 0000
+ { }, // a1: 0100 1000 1010 0001
+ { }, // a2: 0100 1000 1010 0010
+ { }, // a3: 0100 1000 1010 0011
+ {DSLL, "EA" }, // a4: 0100 1000 1010 0100
+ { }, // a5: 0100 1000 1010 0101
+ { }, // a6: 0100 1000 1010 0110
+ { }, // a7: 0100 1000 1010 0111
+ {TABLE, nullptr }, // a8: 0100 1000 1010 1000
+ { }, // a9: 0100 1000 1010 1001
+ { }, // aa: 0100 1000 1010 1010
+ { }, // ab: 0100 1000 1010 1011
+ { }, // ac: 0100 1000 1010 1100
+ { }, // ad: 0100 1000 1010 1101
+ { }, // ae: 0100 1000 1010 1110
+ { }, // af: 0100 1000 1010 1111
- {DRLR,"EA" }, /* b0: 0100 1000 1011 0000 */
- {illegal,nullptr }, /* b1: 0100 1000 1011 0001 */
- {illegal,nullptr }, /* b2: 0100 1000 1011 0010 */
- {illegal,nullptr }, /* b3: 0100 1000 1011 0011 */
- {DRLL,"EA" }, /* b4: 0100 1000 1011 0100 */
- {illegal,nullptr }, /* b5: 0100 1000 1011 0101 */
- {illegal,nullptr }, /* b6: 0100 1000 1011 0110 */
- {illegal,nullptr }, /* b7: 0100 1000 1011 0111 */
- {illegal,nullptr }, /* b8: 0100 1000 1011 1000 */
- {illegal,nullptr }, /* b9: 0100 1000 1011 1001 */
- {illegal,nullptr }, /* ba: 0100 1000 1011 1010 */
- {STOP,nullptr }, /* bb: 0100 1000 1011 1011 */ /* 7810 */
- {illegal,nullptr }, /* bc: 0100 1000 1011 1100 */
- {illegal,nullptr }, /* bd: 0100 1000 1011 1101 */
- {illegal,nullptr }, /* be: 0100 1000 1011 1110 */
- {illegal,nullptr }, /* bf: 0100 1000 1011 1111 */
+ {DRLR, "EA" }, // b0: 0100 1000 1011 0000
+ { }, // b1: 0100 1000 1011 0001
+ { }, // b2: 0100 1000 1011 0010
+ { }, // b3: 0100 1000 1011 0011
+ {DRLL, "EA" }, // b4: 0100 1000 1011 0100
+ { }, // b5: 0100 1000 1011 0101
+ { }, // b6: 0100 1000 1011 0110
+ { }, // b7: 0100 1000 1011 0111
+ { }, // b8: 0100 1000 1011 1000
+ { }, // b9: 0100 1000 1011 1001
+ { }, // ba: 0100 1000 1011 1010
+ {STOP, nullptr }, // bb: 0100 1000 1011 1011 7810
+ { }, // bc: 0100 1000 1011 1100
+ { }, // bd: 0100 1000 1011 1101
+ { }, // be: 0100 1000 1011 1110
+ { }, // bf: 0100 1000 1011 1111
- {DMOV,"EA,ECNT" }, /* c0: 0100 1000 1100 0000 */
- {DMOV,"EA,ECPT" }, /* c1: 0100 1000 1100 0001 */ /* 7810 */
- {illegal,nullptr }, /* c2: 0100 1000 1100 0010 */
- {illegal,nullptr }, /* c3: 0100 1000 1100 0011 */
- {illegal,nullptr }, /* c4: 0100 1000 1100 0100 */
- {illegal,nullptr }, /* c5: 0100 1000 1100 0101 */
- {illegal,nullptr }, /* c6: 0100 1000 1100 0110 */
- {illegal,nullptr }, /* c7: 0100 1000 1100 0111 */
- {illegal,nullptr }, /* c8: 0100 1000 1100 1000 */
- {illegal,nullptr }, /* c9: 0100 1000 1100 1001 */
- {illegal,nullptr }, /* ca: 0100 1000 1100 1010 */
- {illegal,nullptr }, /* cb: 0100 1000 1100 1011 */
- {illegal,nullptr }, /* cc: 0100 1000 1100 1100 */
- {illegal,nullptr }, /* cd: 0100 1000 1100 1101 */
- {illegal,nullptr }, /* ce: 0100 1000 1100 1110 */
- {illegal,nullptr }, /* cf: 0100 1000 1100 1111 */
+ {DMOV, "EA,ECNT" }, // c0: 0100 1000 1100 0000
+ {DMOV, "EA,ECPT" }, // c1: 0100 1000 1100 0001 7810
+ { }, // c2: 0100 1000 1100 0010
+ { }, // c3: 0100 1000 1100 0011
+ { }, // c4: 0100 1000 1100 0100
+ { }, // c5: 0100 1000 1100 0101
+ { }, // c6: 0100 1000 1100 0110
+ { }, // c7: 0100 1000 1100 0111
+ { }, // c8: 0100 1000 1100 1000
+ { }, // c9: 0100 1000 1100 1001
+ { }, // ca: 0100 1000 1100 1010
+ { }, // cb: 0100 1000 1100 1011
+ { }, // cc: 0100 1000 1100 1100
+ { }, // cd: 0100 1000 1100 1101
+ { }, // ce: 0100 1000 1100 1110
+ { }, // cf: 0100 1000 1100 1111
- {illegal,nullptr }, /* d0: 0100 1000 1101 0000 */
- {illegal,nullptr }, /* d1: 0100 1000 1101 0001 */
- {DMOV,"ETM0,EA" }, /* d2: 0100 1000 1101 0010 */
- {DMOV,"ETM1,EA" }, /* d3: 0100 1000 1101 0011 */
- {illegal,nullptr }, /* d4: 0100 1000 1101 0100 */
- {illegal,nullptr }, /* d5: 0100 1000 1101 0101 */
- {illegal,nullptr }, /* d6: 0100 1000 1101 0110 */
- {illegal,nullptr }, /* d7: 0100 1000 1101 0111 */
- {illegal,nullptr }, /* d8: 0100 1000 1101 1000 */
- {illegal,nullptr }, /* d9: 0100 1000 1101 1001 */
- {illegal,nullptr }, /* da: 0100 1000 1101 1010 */
- {illegal,nullptr }, /* db: 0100 1000 1101 1011 */
- {illegal,nullptr }, /* dc: 0100 1000 1101 1100 */
- {illegal,nullptr }, /* dd: 0100 1000 1101 1101 */
- {illegal,nullptr }, /* de: 0100 1000 1101 1110 */
- {illegal,nullptr }, /* df: 0100 1000 1101 1111 */
+ { }, // d0: 0100 1000 1101 0000
+ { }, // d1: 0100 1000 1101 0001
+ {DMOV, "ETM0,EA" }, // d2: 0100 1000 1101 0010
+ {DMOV, "ETM1,EA" }, // d3: 0100 1000 1101 0011
+ { }, // d4: 0100 1000 1101 0100
+ { }, // d5: 0100 1000 1101 0101
+ { }, // d6: 0100 1000 1101 0110
+ { }, // d7: 0100 1000 1101 0111
+ { }, // d8: 0100 1000 1101 1000
+ { }, // d9: 0100 1000 1101 1001
+ { }, // da: 0100 1000 1101 1010
+ { }, // db: 0100 1000 1101 1011
+ { }, // dc: 0100 1000 1101 1100
+ { }, // dd: 0100 1000 1101 1101
+ { }, // de: 0100 1000 1101 1110
+ { }, // df: 0100 1000 1101 1111
- {illegal,nullptr }, /* e0: 0100 1000 1110 0000 */
- {illegal,nullptr }, /* e1: 0100 1000 1110 0001 */
- {illegal,nullptr }, /* e2: 0100 1000 1110 0010 */
- {illegal,nullptr }, /* e3: 0100 1000 1110 0011 */
- {illegal,nullptr }, /* e4: 0100 1000 1110 0100 */
- {illegal,nullptr }, /* e5: 0100 1000 1110 0101 */
- {illegal,nullptr }, /* e6: 0100 1000 1110 0110 */
- {illegal,nullptr }, /* e7: 0100 1000 1110 0111 */
- {illegal,nullptr }, /* e8: 0100 1000 1110 1000 */
- {illegal,nullptr }, /* e9: 0100 1000 1110 1001 */
- {illegal,nullptr }, /* ea: 0100 1000 1110 1010 */
- {illegal,nullptr }, /* eb: 0100 1000 1110 1011 */
- {illegal,nullptr }, /* ec: 0100 1000 1110 1100 */
- {illegal,nullptr }, /* ed: 0100 1000 1110 1101 */
- {illegal,nullptr }, /* ee: 0100 1000 1110 1110 */
- {illegal,nullptr }, /* ef: 0100 1000 1110 1111 */
+ { }, // e0: 0100 1000 1110 0000
+ { }, // e1: 0100 1000 1110 0001
+ { }, // e2: 0100 1000 1110 0010
+ { }, // e3: 0100 1000 1110 0011
+ { }, // e4: 0100 1000 1110 0100
+ { }, // e5: 0100 1000 1110 0101
+ { }, // e6: 0100 1000 1110 0110
+ { }, // e7: 0100 1000 1110 0111
+ { }, // e8: 0100 1000 1110 1000
+ { }, // e9: 0100 1000 1110 1001
+ { }, // ea: 0100 1000 1110 1010
+ { }, // eb: 0100 1000 1110 1011
+ { }, // ec: 0100 1000 1110 1100
+ { }, // ed: 0100 1000 1110 1101
+ { }, // ee: 0100 1000 1110 1110
+ { }, // ef: 0100 1000 1110 1111
- {illegal,nullptr }, /* f0: 0100 1000 1111 0000 */
- {illegal,nullptr }, /* f1: 0100 1000 1111 0001 */
- {illegal,nullptr }, /* f2: 0100 1000 1111 0010 */
- {illegal,nullptr }, /* f3: 0100 1000 1111 0011 */
- {illegal,nullptr }, /* f4: 0100 1000 1111 0100 */
- {illegal,nullptr }, /* f5: 0100 1000 1111 0101 */
- {illegal,nullptr }, /* f6: 0100 1000 1111 0110 */
- {illegal,nullptr }, /* f7: 0100 1000 1111 0111 */
- {illegal,nullptr }, /* f8: 0100 1000 1111 1000 */
- {illegal,nullptr }, /* f9: 0100 1000 1111 1001 */
- {illegal,nullptr }, /* fa: 0100 1000 1111 1010 */
- {illegal,nullptr }, /* fb: 0100 1000 1111 1011 */
- {illegal,nullptr }, /* fc: 0100 1000 1111 1100 */
- {illegal,nullptr }, /* fd: 0100 1000 1111 1101 */
- {illegal,nullptr }, /* fe: 0100 1000 1111 1110 */
- {illegal,nullptr } /* ff: 0100 1000 1111 1111 */
+ { }, // f0: 0100 1000 1111 0000
+ { }, // f1: 0100 1000 1111 0001
+ { }, // f2: 0100 1000 1111 0010
+ { }, // f3: 0100 1000 1111 0011
+ { }, // f4: 0100 1000 1111 0100
+ { }, // f5: 0100 1000 1111 0101
+ { }, // f6: 0100 1000 1111 0110
+ { }, // f7: 0100 1000 1111 0111
+ { }, // f8: 0100 1000 1111 1000
+ { }, // f9: 0100 1000 1111 1001
+ { }, // fa: 0100 1000 1111 1010
+ { }, // fb: 0100 1000 1111 1011
+ { }, // fc: 0100 1000 1111 1100
+ { }, // fd: 0100 1000 1111 1101
+ { }, // fe: 0100 1000 1111 1110
+ { } // ff: 0100 1000 1111 1111
};
-static const struct dasm_s dasm48_7807[256] =
+const dasm_s dasm_s::d48_7807[256] =
{
- {illegal,nullptr }, /* 00: 0100 1000 0000 0000 */
- {SLRC,"A" }, /* 01: 0100 1000 0000 0001 */
- {SLRC,"B" }, /* 02: 0100 1000 0000 0010 */
- {SLRC,"C" }, /* 03: 0100 1000 0000 0011 */
- {illegal,nullptr }, /* 04: 0100 1000 0000 0100 */
- {SLLC,"A" }, /* 05: 0100 1000 0000 0101 */
- {SLLC,"B" }, /* 06: 0100 1000 0000 0110 */
- {SLLC,"C" }, /* 07: 0100 1000 0000 0111 */
- {SK,"NV" }, /* 08: 0100 1000 0000 1000 */
- {illegal,nullptr }, /* 09: 0100 1000 0000 1001 */
- {SK,"CY" }, /* 0a: 0100 1000 0000 1010 */
- {SK,"HC" }, /* 0b: 0100 1000 0000 1011 */
- {SK,"Z" }, /* 0c: 0100 1000 0000 1100 */
- {illegal,nullptr }, /* 0d: 0100 1000 0000 1101 */
- {illegal,nullptr }, /* 0e: 0100 1000 0000 1110 */
- {illegal,nullptr }, /* 0f: 0100 1000 0000 1111 */
+ { }, // 00: 0100 1000 0000 0000
+ {SLRC, "A" }, // 01: 0100 1000 0000 0001
+ {SLRC, "B" }, // 02: 0100 1000 0000 0010
+ {SLRC, "C" }, // 03: 0100 1000 0000 0011
+ { }, // 04: 0100 1000 0000 0100
+ {SLLC, "A" }, // 05: 0100 1000 0000 0101
+ {SLLC, "B" }, // 06: 0100 1000 0000 0110
+ {SLLC, "C" }, // 07: 0100 1000 0000 0111
+ {SK, "NV" }, // 08: 0100 1000 0000 1000
+ { }, // 09: 0100 1000 0000 1001
+ {SK, "CY" }, // 0a: 0100 1000 0000 1010
+ {SK, "HC" }, // 0b: 0100 1000 0000 1011
+ {SK, "Z" }, // 0c: 0100 1000 0000 1100
+ { }, // 0d: 0100 1000 0000 1101
+ { }, // 0e: 0100 1000 0000 1110
+ { }, // 0f: 0100 1000 0000 1111
- {illegal,nullptr }, /* 10: 0100 1000 0001 0000 */
- {illegal,nullptr }, /* 11: 0100 1000 0001 0001 */
- {illegal,nullptr }, /* 12: 0100 1000 0001 0010 */
- {illegal,nullptr }, /* 13: 0100 1000 0001 0011 */
- {illegal,nullptr }, /* 14: 0100 1000 0001 0100 */
- {illegal,nullptr }, /* 15: 0100 1000 0001 0101 */
- {illegal,nullptr }, /* 16: 0100 1000 0001 0110 */
- {illegal,nullptr }, /* 17: 0100 1000 0001 0111 */
- {SKN,"NV" }, /* 18: 0100 1000 0001 1000 */
- {illegal,nullptr }, /* 19: 0100 1000 0001 1001 */
- {SKN,"CY" }, /* 1a: 0100 1000 0001 1010 */
- {SKN,"HC" }, /* 1b: 0100 1000 0001 1011 */
- {SKN,"Z" }, /* 1c: 0100 1000 0001 1100 */
- {illegal,nullptr }, /* 1d: 0100 1000 0001 1101 */
- {illegal,nullptr }, /* 1e: 0100 1000 0001 1110 */
- {illegal,nullptr }, /* 1f: 0100 1000 0001 1111 */
+ { }, // 10: 0100 1000 0001 0000
+ { }, // 11: 0100 1000 0001 0001
+ { }, // 12: 0100 1000 0001 0010
+ { }, // 13: 0100 1000 0001 0011
+ { }, // 14: 0100 1000 0001 0100
+ { }, // 15: 0100 1000 0001 0101
+ { }, // 16: 0100 1000 0001 0110
+ { }, // 17: 0100 1000 0001 0111
+ {SKN, "NV" }, // 18: 0100 1000 0001 1000
+ { }, // 19: 0100 1000 0001 1001
+ {SKN, "CY" }, // 1a: 0100 1000 0001 1010
+ {SKN, "HC" }, // 1b: 0100 1000 0001 1011
+ {SKN, "Z" }, // 1c: 0100 1000 0001 1100
+ { }, // 1d: 0100 1000 0001 1101
+ { }, // 1e: 0100 1000 0001 1110
+ { }, // 1f: 0100 1000 0001 1111
- {illegal,nullptr }, /* 20: 0100 1000 0010 0000 */
- {SLR,"A" }, /* 21: 0100 1000 0010 0001 */
- {SLR,"B" }, /* 22: 0100 1000 0010 0010 */
- {SLR,"C" }, /* 23: 0100 1000 0010 0011 */
- {illegal,nullptr }, /* 24: 0100 1000 0010 0100 */
- {SLL,"A" }, /* 25: 0100 1000 0010 0101 */
- {SLL,"B" }, /* 26: 0100 1000 0010 0110 */
- {SLL,"C" }, /* 27: 0100 1000 0010 0111 */
- {JEA,nullptr }, /* 28: 0100 1000 0010 1000 */
- {CALB,nullptr }, /* 29: 0100 1000 0010 1001 */
- {CLC,nullptr }, /* 2a: 0100 1000 0010 1010 */
- {STC,nullptr }, /* 2b: 0100 1000 0010 1011 */
- {illegal,nullptr }, /* 2c: 0100 1000 0010 1100 */
- {MUL,"A" }, /* 2d: 0100 1000 0010 1101 */
- {MUL,"B" }, /* 2e: 0100 1000 0010 1110 */
- {MUL,"C" }, /* 2f: 0100 1000 0010 1111 */
+ { }, // 20: 0100 1000 0010 0000
+ {SLR, "A" }, // 21: 0100 1000 0010 0001
+ {SLR, "B" }, // 22: 0100 1000 0010 0010
+ {SLR, "C" }, // 23: 0100 1000 0010 0011
+ { }, // 24: 0100 1000 0010 0100
+ {SLL, "A" }, // 25: 0100 1000 0010 0101
+ {SLL, "B" }, // 26: 0100 1000 0010 0110
+ {SLL, "C" }, // 27: 0100 1000 0010 0111
+ {JEA, nullptr }, // 28: 0100 1000 0010 1000
+ {CALB, nullptr }, // 29: 0100 1000 0010 1001
+ {CLC, nullptr }, // 2a: 0100 1000 0010 1010
+ {STC, nullptr }, // 2b: 0100 1000 0010 1011
+ { }, // 2c: 0100 1000 0010 1100
+ {MUL, "A" }, // 2d: 0100 1000 0010 1101
+ {MUL, "B" }, // 2e: 0100 1000 0010 1110
+ {MUL, "C" }, // 2f: 0100 1000 0010 1111
- {illegal,nullptr }, /* 30: 0100 1000 0011 0000 */
- {RLR,"A" }, /* 31: 0100 1000 0011 0001 */
- {RLR,"B" }, /* 32: 0100 1000 0011 0010 */
- {RLR,"C" }, /* 33: 0100 1000 0011 0011 */
- {illegal,nullptr }, /* 34: 0100 1000 0011 0100 */
- {RLL,"A" }, /* 35: 0100 1000 0011 0101 */
- {RLL,"B" }, /* 36: 0100 1000 0011 0110 */
- {RLL,"C" }, /* 37: 0100 1000 0011 0111 */
- {RLD,nullptr }, /* 38: 0100 1000 0011 1000 */
- {RRD,nullptr }, /* 39: 0100 1000 0011 1001 */
- {NEGA,nullptr }, /* 3a: 0100 1000 0011 1010 */
- {HALT,nullptr }, /* 3b: 0100 1000 0011 1011 */
- {illegal,nullptr }, /* 3c: 0100 1000 0011 1100 */
- {DIV,"A" }, /* 3d: 0100 1000 0011 1101 */
- {DIV,"B" }, /* 3e: 0100 1000 0011 1110 */
- {DIV,"C" }, /* 3f: 0100 1000 0011 1111 */
+ { }, // 30: 0100 1000 0011 0000
+ {RLR, "A" }, // 31: 0100 1000 0011 0001
+ {RLR, "B" }, // 32: 0100 1000 0011 0010
+ {RLR, "C" }, // 33: 0100 1000 0011 0011
+ { }, // 34: 0100 1000 0011 0100
+ {RLL, "A" }, // 35: 0100 1000 0011 0101
+ {RLL, "B" }, // 36: 0100 1000 0011 0110
+ {RLL, "C" }, // 37: 0100 1000 0011 0111
+ {RLD, nullptr }, // 38: 0100 1000 0011 1000
+ {RRD, nullptr }, // 39: 0100 1000 0011 1001
+ {NEGA, nullptr }, // 3a: 0100 1000 0011 1010
+ {HALT, nullptr }, // 3b: 0100 1000 0011 1011
+ { }, // 3c: 0100 1000 0011 1100
+ {DIV, "A" }, // 3d: 0100 1000 0011 1101
+ {DIV, "B" }, // 3e: 0100 1000 0011 1110
+ {DIV, "C" }, // 3f: 0100 1000 0011 1111
- {SKIT,"NMI" }, /* 40: 0100 1000 0100 0000 */
- {SKIT,"FT0" }, /* 41: 0100 1000 0100 0001 */
- {SKIT,"FT1" }, /* 42: 0100 1000 0100 0010 */
- {SKIT,"F1" }, /* 43: 0100 1000 0100 0011 */
- {SKIT,"F2" }, /* 44: 0100 1000 0100 0100 */
- {SKIT,"FE0" }, /* 45: 0100 1000 0100 0101 */
- {SKIT,"FE1" }, /* 46: 0100 1000 0100 0110 */
- {SKIT,"FEIN" }, /* 47: 0100 1000 0100 0111 */
- {SKIT,"FAD" }, /* 48: 0100 1000 0100 1000 */
- {SKIT,"FSR" }, /* 49: 0100 1000 0100 1001 */
- {SKIT,"FST" }, /* 4a: 0100 1000 0100 1010 */
- {SKIT,"ER" }, /* 4b: 0100 1000 0100 1011 */
- {SKIT,"OV" }, /* 4c: 0100 1000 0100 1100 */
- {illegal,nullptr }, /* 4d: 0100 1000 0100 1101 */
- {illegal,nullptr }, /* 4e: 0100 1000 0100 1110 */
- {illegal,nullptr }, /* 4f: 0100 1000 0100 1111 */
+ {SKIT, "NMI" }, // 40: 0100 1000 0100 0000
+ {SKIT, "FT0" }, // 41: 0100 1000 0100 0001
+ {SKIT, "FT1" }, // 42: 0100 1000 0100 0010
+ {SKIT, "F1" }, // 43: 0100 1000 0100 0011
+ {SKIT, "F2" }, // 44: 0100 1000 0100 0100
+ {SKIT, "FE0" }, // 45: 0100 1000 0100 0101
+ {SKIT, "FE1" }, // 46: 0100 1000 0100 0110
+ {SKIT, "FEIN" }, // 47: 0100 1000 0100 0111
+ {SKIT, "FAD" }, // 48: 0100 1000 0100 1000
+ {SKIT, "FSR" }, // 49: 0100 1000 0100 1001
+ {SKIT, "FST" }, // 4a: 0100 1000 0100 1010
+ {SKIT, "ER" }, // 4b: 0100 1000 0100 1011
+ {SKIT, "OV" }, // 4c: 0100 1000 0100 1100
+ { }, // 4d: 0100 1000 0100 1101
+ { }, // 4e: 0100 1000 0100 1110
+ { }, // 4f: 0100 1000 0100 1111
- {SKIT,"AN4" }, /* 50: 0100 1000 0101 0000 */
- {SKIT,"AN5" }, /* 51: 0100 1000 0101 0001 */
- {SKIT,"AN6" }, /* 52: 0100 1000 0101 0010 */
- {SKIT,"AN7" }, /* 53: 0100 1000 0101 0011 */
- {SKIT,"SB" }, /* 54: 0100 1000 0101 0100 */
- {illegal,nullptr }, /* 55: 0100 1000 0101 0101 */
- {illegal,nullptr }, /* 56: 0100 1000 0101 0110 */
- {illegal,nullptr }, /* 57: 0100 1000 0101 0111 */
- {illegal,nullptr }, /* 58: 0100 1000 0101 1000 */
- {illegal,nullptr }, /* 59: 0100 1000 0101 1001 */
- {illegal,nullptr }, /* 5a: 0100 1000 0101 1010 */
- {illegal,nullptr }, /* 5b: 0100 1000 0101 1011 */
- {illegal,nullptr }, /* 5c: 0100 1000 0101 1100 */
- {illegal,nullptr }, /* 5d: 0100 1000 0101 1101 */
- {illegal,nullptr }, /* 5e: 0100 1000 0101 1110 */
- {illegal,nullptr }, /* 5f: 0100 1000 0101 1111 */
+ {SKIT, "AN4" }, // 50: 0100 1000 0101 0000
+ {SKIT, "AN5" }, // 51: 0100 1000 0101 0001
+ {SKIT, "AN6" }, // 52: 0100 1000 0101 0010
+ {SKIT, "AN7" }, // 53: 0100 1000 0101 0011
+ {SKIT, "SB" }, // 54: 0100 1000 0101 0100
+ { }, // 55: 0100 1000 0101 0101
+ { }, // 56: 0100 1000 0101 0110
+ { }, // 57: 0100 1000 0101 0111
+ { }, // 58: 0100 1000 0101 1000
+ { }, // 59: 0100 1000 0101 1001
+ { }, // 5a: 0100 1000 0101 1010
+ { }, // 5b: 0100 1000 0101 1011
+ { }, // 5c: 0100 1000 0101 1100
+ { }, // 5d: 0100 1000 0101 1101
+ { }, // 5e: 0100 1000 0101 1110
+ { }, // 5f: 0100 1000 0101 1111
- {SKNIT,"NMI" }, /* 60: 0100 1000 0110 0000 */
- {SKNIT,"FT0" }, /* 61: 0100 1000 0110 0001 */
- {SKNIT,"FT1" }, /* 62: 0100 1000 0110 0010 */
- {SKNIT,"F1" }, /* 63: 0100 1000 0110 0011 */
- {SKNIT,"F2" }, /* 64: 0100 1000 0110 0100 */
- {SKNIT,"FE0" }, /* 65: 0100 1000 0110 0101 */
- {SKNIT,"FE1" }, /* 66: 0100 1000 0110 0110 */
- {SKNIT,"FEIN" }, /* 67: 0100 1000 0110 0111 */
- {SKNIT,"FAD" }, /* 68: 0100 1000 0110 1000 */
- {SKNIT,"FSR" }, /* 69: 0100 1000 0110 1001 */
- {SKNIT,"FST" }, /* 6a: 0100 1000 0110 1010 */
- {SKNIT,"ER" }, /* 6b: 0100 1000 0110 1011 */
- {SKNIT,"OV" }, /* 6c: 0100 1000 0110 1100 */
- {illegal,nullptr }, /* 6d: 0100 1000 0110 1101 */
- {illegal,nullptr }, /* 6e: 0100 1000 0110 1110 */
- {illegal,nullptr }, /* 6f: 0100 1000 0110 1111 */
+ {SKNIT, "NMI" }, // 60: 0100 1000 0110 0000
+ {SKNIT, "FT0" }, // 61: 0100 1000 0110 0001
+ {SKNIT, "FT1" }, // 62: 0100 1000 0110 0010
+ {SKNIT, "F1" }, // 63: 0100 1000 0110 0011
+ {SKNIT, "F2" }, // 64: 0100 1000 0110 0100
+ {SKNIT, "FE0" }, // 65: 0100 1000 0110 0101
+ {SKNIT, "FE1" }, // 66: 0100 1000 0110 0110
+ {SKNIT, "FEIN" }, // 67: 0100 1000 0110 0111
+ {SKNIT, "FAD" }, // 68: 0100 1000 0110 1000
+ {SKNIT, "FSR" }, // 69: 0100 1000 0110 1001
+ {SKNIT, "FST" }, // 6a: 0100 1000 0110 1010
+ {SKNIT, "ER" }, // 6b: 0100 1000 0110 1011
+ {SKNIT, "OV" }, // 6c: 0100 1000 0110 1100
+ { }, // 6d: 0100 1000 0110 1101
+ { }, // 6e: 0100 1000 0110 1110
+ { }, // 6f: 0100 1000 0110 1111
- {SKNIT,"AN4" }, /* 70: 0100 1000 0111 0000 */
- {SKNIT,"AN5" }, /* 71: 0100 1000 0111 0001 */
- {SKNIT,"AN6" }, /* 72: 0100 1000 0111 0010 */
- {SKNIT,"AN7" }, /* 73: 0100 1000 0111 0011 */
- {SKNIT,"SB" }, /* 74: 0100 1000 0111 0100 */
- {illegal,nullptr }, /* 75: 0100 1000 0111 0101 */
- {illegal,nullptr }, /* 76: 0100 1000 0111 0110 */
- {illegal,nullptr }, /* 77: 0100 1000 0111 0111 */
- {illegal,nullptr }, /* 78: 0100 1000 0111 1000 */
- {illegal,nullptr }, /* 79: 0100 1000 0111 1001 */
- {illegal,nullptr }, /* 7a: 0100 1000 0111 1010 */
- {illegal,nullptr }, /* 7b: 0100 1000 0111 1011 */
- {illegal,nullptr }, /* 7c: 0100 1000 0111 1100 */
- {illegal,nullptr }, /* 7d: 0100 1000 0111 1101 */
- {illegal,nullptr }, /* 7e: 0100 1000 0111 1110 */
- {illegal,nullptr }, /* 7f: 0100 1000 0111 1111 */
+ {SKNIT, "AN4" }, // 70: 0100 1000 0111 0000
+ {SKNIT, "AN5" }, // 71: 0100 1000 0111 0001
+ {SKNIT, "AN6" }, // 72: 0100 1000 0111 0010
+ {SKNIT, "AN7" }, // 73: 0100 1000 0111 0011
+ {SKNIT, "SB" }, // 74: 0100 1000 0111 0100
+ { }, // 75: 0100 1000 0111 0101
+ { }, // 76: 0100 1000 0111 0110
+ { }, // 77: 0100 1000 0111 0111
+ { }, // 78: 0100 1000 0111 1000
+ { }, // 79: 0100 1000 0111 1001
+ { }, // 7a: 0100 1000 0111 1010
+ { }, // 7b: 0100 1000 0111 1011
+ { }, // 7c: 0100 1000 0111 1100
+ { }, // 7d: 0100 1000 0111 1101
+ { }, // 7e: 0100 1000 0111 1110
+ { }, // 7f: 0100 1000 0111 1111
- {illegal,nullptr }, /* 80: 0100 1000 1000 0000 */
- {illegal,nullptr }, /* 81: 0100 1000 1000 0001 */
- {LDEAX,"(DE)" }, /* 82: 0100 1000 1000 0010 */
- {LDEAX,"(HL)" }, /* 83: 0100 1000 1000 0011 */
- {LDEAX,"(DE++)" }, /* 84: 0100 1000 1000 0100 */
- {LDEAX,"(HL++)" }, /* 85: 0100 1000 1000 0101 */
- {illegal,nullptr }, /* 86: 0100 1000 1000 0110 */
- {illegal,nullptr }, /* 87: 0100 1000 1000 0111 */
- {illegal,nullptr }, /* 88: 0100 1000 1000 1000 */
- {illegal,nullptr }, /* 89: 0100 1000 1000 1001 */
- {illegal,nullptr }, /* 8a: 0100 1000 1000 1010 */
- {LDEAX,"(DE+%b)"}, /* 8b: 0100 1000 1000 1011 xxxx xxxx */
- {LDEAX,"(HL+A)" }, /* 8c: 0100 1000 1000 1100 */
- {LDEAX,"(HL+B)" }, /* 8d: 0100 1000 1000 1101 */
- {LDEAX,"(HL+EA)"}, /* 8e: 0100 1000 1000 1110 */
- {LDEAX,"(HL+%b)"}, /* 8f: 0100 1000 1000 1111 xxxx xxxx */
+ { }, // 80: 0100 1000 1000 0000
+ { }, // 81: 0100 1000 1000 0001
+ {LDEAX, "(DE)" }, // 82: 0100 1000 1000 0010
+ {LDEAX, "(HL)" }, // 83: 0100 1000 1000 0011
+ {LDEAX, "(DE++)" }, // 84: 0100 1000 1000 0100
+ {LDEAX, "(HL++)" }, // 85: 0100 1000 1000 0101
+ { }, // 86: 0100 1000 1000 0110
+ { }, // 87: 0100 1000 1000 0111
+ { }, // 88: 0100 1000 1000 1000
+ { }, // 89: 0100 1000 1000 1001
+ { }, // 8a: 0100 1000 1000 1010
+ {LDEAX, "(DE+%b)" }, // 8b: 0100 1000 1000 1011 xxxx xxxx
+ {LDEAX, "(HL+A)" }, // 8c: 0100 1000 1000 1100
+ {LDEAX, "(HL+B)" }, // 8d: 0100 1000 1000 1101
+ {LDEAX, "(HL+EA)" }, // 8e: 0100 1000 1000 1110
+ {LDEAX, "(HL+%b)" }, // 8f: 0100 1000 1000 1111 xxxx xxxx
- {illegal,nullptr }, /* 90: 0100 1000 1000 0000 */
- {illegal,nullptr }, /* 91: 0100 1000 1000 0001 */
- {STEAX,"(DE)" }, /* 92: 0100 1000 1000 0010 */
- {STEAX,"(HL)" }, /* 93: 0100 1000 1000 0011 */
- {STEAX,"(DE++)" }, /* 94: 0100 1000 1000 0100 */
- {STEAX,"(HL++)" }, /* 95: 0100 1000 1000 0101 */
- {illegal,nullptr }, /* 96: 0100 1000 1000 0110 */
- {illegal,nullptr }, /* 97: 0100 1000 1000 0111 */
- {illegal,nullptr }, /* 98: 0100 1000 1000 1000 */
- {illegal,nullptr }, /* 99: 0100 1000 1000 1001 */
- {illegal,nullptr }, /* 9a: 0100 1000 1000 1010 */
- {STEAX,"(DE+%b)"}, /* 9b: 0100 1000 1000 1011 xxxx xxxx */
- {STEAX,"(HL+A)" }, /* 9c: 0100 1000 1000 1100 */
- {STEAX,"(HL+B)" }, /* 9d: 0100 1000 1000 1101 */
- {STEAX,"(HL+EA)"}, /* 9e: 0100 1000 1000 1110 */
- {STEAX,"(HL+%b)"}, /* 9f: 0100 1000 1000 1111 xxxx xxxx */
+ { }, // 90: 0100 1000 1000 0000
+ { }, // 91: 0100 1000 1000 0001
+ {STEAX, "(DE)" }, // 92: 0100 1000 1000 0010
+ {STEAX, "(HL)" }, // 93: 0100 1000 1000 0011
+ {STEAX, "(DE++)" }, // 94: 0100 1000 1000 0100
+ {STEAX, "(HL++)" }, // 95: 0100 1000 1000 0101
+ { }, // 96: 0100 1000 1000 0110
+ { }, // 97: 0100 1000 1000 0111
+ { }, // 98: 0100 1000 1000 1000
+ { }, // 99: 0100 1000 1000 1001
+ { }, // 9a: 0100 1000 1000 1010
+ {STEAX, "(DE+%b)" }, // 9b: 0100 1000 1000 1011 xxxx xxxx
+ {STEAX, "(HL+A)" }, // 9c: 0100 1000 1000 1100
+ {STEAX, "(HL+B)" }, // 9d: 0100 1000 1000 1101
+ {STEAX, "(HL+EA)" }, // 9e: 0100 1000 1000 1110
+ {STEAX, "(HL+%b)" }, // 9f: 0100 1000 1000 1111 xxxx xxxx
- {DSLR,"EA" }, /* a0: 0100 1000 1010 0000 */
- {illegal,nullptr }, /* a1: 0100 1000 1010 0001 */
- {illegal,nullptr }, /* a2: 0100 1000 1010 0010 */
- {illegal,nullptr }, /* a3: 0100 1000 1010 0011 */
- {DSLL,"EA" }, /* a4: 0100 1000 1010 0100 */
- {illegal,nullptr }, /* a5: 0100 1000 1010 0101 */
- {illegal,nullptr }, /* a6: 0100 1000 1010 0110 */
- {illegal,nullptr }, /* a7: 0100 1000 1010 0111 */
- {TABLE,nullptr }, /* a8: 0100 1000 1010 1000 */
- {illegal,nullptr }, /* a9: 0100 1000 1010 1001 */
- {CMC,nullptr }, /* aa: 0100 1000 1010 1010 */ /* 7807 */
- {illegal,nullptr }, /* ab: 0100 1000 1010 1011 */
- {EXA,nullptr }, /* ac: 0100 1000 1010 1100 */ /* 7807 */
- {EXR,nullptr }, /* ad: 0100 1000 1010 1101 */ /* 7807 */
- {EXH,nullptr }, /* ae: 0100 1000 1010 1110 */ /* 7807 */
- {EXX,nullptr }, /* af: 0100 1000 1010 1111 */ /* 7807 */
+ {DSLR, "EA" }, // a0: 0100 1000 1010 0000
+ { }, // a1: 0100 1000 1010 0001
+ { }, // a2: 0100 1000 1010 0010
+ { }, // a3: 0100 1000 1010 0011
+ {DSLL, "EA" }, // a4: 0100 1000 1010 0100
+ { }, // a5: 0100 1000 1010 0101
+ { }, // a6: 0100 1000 1010 0110
+ { }, // a7: 0100 1000 1010 0111
+ {TABLE, nullptr }, // a8: 0100 1000 1010 1000
+ { }, // a9: 0100 1000 1010 1001
+ {CMC, nullptr }, // aa: 0100 1000 1010 1010 7807
+ { }, // ab: 0100 1000 1010 1011
+ {EXA, nullptr }, // ac: 0100 1000 1010 1100 7807
+ {EXR, nullptr }, // ad: 0100 1000 1010 1101 7807
+ {EXH, nullptr }, // ae: 0100 1000 1010 1110 7807
+ {EXX, nullptr }, // af: 0100 1000 1010 1111 7807
- {DRLR,"EA" }, /* b0: 0100 1000 1011 0000 */
- {illegal,nullptr }, /* b1: 0100 1000 1011 0001 */
- {illegal,nullptr }, /* b2: 0100 1000 1011 0010 */
- {illegal,nullptr }, /* b3: 0100 1000 1011 0011 */
- {DRLL,"EA" }, /* b4: 0100 1000 1011 0100 */
- {illegal,nullptr }, /* b5: 0100 1000 1011 0101 */
- {illegal,nullptr }, /* b6: 0100 1000 1011 0110 */
- {illegal,nullptr }, /* b7: 0100 1000 1011 0111 */
- {illegal,nullptr }, /* b8: 0100 1000 1011 1000 */
- {illegal,nullptr }, /* b9: 0100 1000 1011 1001 */
- {illegal,nullptr }, /* ba: 0100 1000 1011 1010 */
- {illegal,nullptr }, /* bb: 0100 1000 1011 1011 */
- {illegal,nullptr }, /* bc: 0100 1000 1011 1100 */
- {illegal,nullptr }, /* bd: 0100 1000 1011 1101 */
- {illegal,nullptr }, /* be: 0100 1000 1011 1110 */
- {illegal,nullptr }, /* bf: 0100 1000 1011 1111 */
+ {DRLR, "EA" }, // b0: 0100 1000 1011 0000
+ { }, // b1: 0100 1000 1011 0001
+ { }, // b2: 0100 1000 1011 0010
+ { }, // b3: 0100 1000 1011 0011
+ {DRLL, "EA" }, // b4: 0100 1000 1011 0100
+ { }, // b5: 0100 1000 1011 0101
+ { }, // b6: 0100 1000 1011 0110
+ { }, // b7: 0100 1000 1011 0111
+ { }, // b8: 0100 1000 1011 1000
+ { }, // b9: 0100 1000 1011 1001
+ { }, // ba: 0100 1000 1011 1010
+ { }, // bb: 0100 1000 1011 1011
+ { }, // bc: 0100 1000 1011 1100
+ { }, // bd: 0100 1000 1011 1101
+ { }, // be: 0100 1000 1011 1110
+ { }, // bf: 0100 1000 1011 1111
- {DMOV,"EA,ECNT" }, /* c0: 0100 1000 1100 0000 */
- {DMOV,"EA,ECPT0"}, /* c1: 0100 1000 1100 0001 */ /* 7807 */
- {DMOV,"EA,ECPT1"}, /* c2: 0100 1000 1100 0010 */ /* 7807 */
- {illegal,nullptr }, /* c3: 0100 1000 1100 0011 */
- {illegal,nullptr }, /* c4: 0100 1000 1100 0100 */
- {illegal,nullptr }, /* c5: 0100 1000 1100 0101 */
- {illegal,nullptr }, /* c6: 0100 1000 1100 0110 */
- {illegal,nullptr }, /* c7: 0100 1000 1100 0111 */
- {illegal,nullptr }, /* c8: 0100 1000 1100 1000 */
- {illegal,nullptr }, /* c9: 0100 1000 1100 1001 */
- {illegal,nullptr }, /* ca: 0100 1000 1100 1010 */
- {illegal,nullptr }, /* cb: 0100 1000 1100 1011 */
- {illegal,nullptr }, /* cc: 0100 1000 1100 1100 */
- {illegal,nullptr }, /* cd: 0100 1000 1100 1101 */
- {illegal,nullptr }, /* ce: 0100 1000 1100 1110 */
- {illegal,nullptr }, /* cf: 0100 1000 1100 1111 */
+ {DMOV, "EA,ECNT" }, // c0: 0100 1000 1100 0000
+ {DMOV, "EA,ECPT0"}, // c1: 0100 1000 1100 0001 7807
+ {DMOV, "EA,ECPT1"}, // c2: 0100 1000 1100 0010 7807
+ { }, // c3: 0100 1000 1100 0011
+ { }, // c4: 0100 1000 1100 0100
+ { }, // c5: 0100 1000 1100 0101
+ { }, // c6: 0100 1000 1100 0110
+ { }, // c7: 0100 1000 1100 0111
+ { }, // c8: 0100 1000 1100 1000
+ { }, // c9: 0100 1000 1100 1001
+ { }, // ca: 0100 1000 1100 1010
+ { }, // cb: 0100 1000 1100 1011
+ { }, // cc: 0100 1000 1100 1100
+ { }, // cd: 0100 1000 1100 1101
+ { }, // ce: 0100 1000 1100 1110
+ { }, // cf: 0100 1000 1100 1111
- {illegal,nullptr }, /* d0: 0100 1000 1101 0000 */
- {illegal,nullptr }, /* d1: 0100 1000 1101 0001 */
- {DMOV,"ETM0,EA" }, /* d2: 0100 1000 1101 0010 */
- {DMOV,"ETM1,EA" }, /* d3: 0100 1000 1101 0011 */
- {illegal,nullptr }, /* d4: 0100 1000 1101 0100 */
- {illegal,nullptr }, /* d5: 0100 1000 1101 0101 */
- {illegal,nullptr }, /* d6: 0100 1000 1101 0110 */
- {illegal,nullptr }, /* d7: 0100 1000 1101 0111 */
- {illegal,nullptr }, /* d8: 0100 1000 1101 1000 */
- {illegal,nullptr }, /* d9: 0100 1000 1101 1001 */
- {illegal,nullptr }, /* da: 0100 1000 1101 1010 */
- {illegal,nullptr }, /* db: 0100 1000 1101 1011 */
- {illegal,nullptr }, /* dc: 0100 1000 1101 1100 */
- {illegal,nullptr }, /* dd: 0100 1000 1101 1101 */
- {illegal,nullptr }, /* de: 0100 1000 1101 1110 */
- {illegal,nullptr }, /* df: 0100 1000 1101 1111 */
+ { }, // d0: 0100 1000 1101 0000
+ { }, // d1: 0100 1000 1101 0001
+ {DMOV, "ETM0,EA" }, // d2: 0100 1000 1101 0010
+ {DMOV, "ETM1,EA" }, // d3: 0100 1000 1101 0011
+ { }, // d4: 0100 1000 1101 0100
+ { }, // d5: 0100 1000 1101 0101
+ { }, // d6: 0100 1000 1101 0110
+ { }, // d7: 0100 1000 1101 0111
+ { }, // d8: 0100 1000 1101 1000
+ { }, // d9: 0100 1000 1101 1001
+ { }, // da: 0100 1000 1101 1010
+ { }, // db: 0100 1000 1101 1011
+ { }, // dc: 0100 1000 1101 1100
+ { }, // dd: 0100 1000 1101 1101
+ { }, // de: 0100 1000 1101 1110
+ { }, // df: 0100 1000 1101 1111
- {illegal,nullptr }, /* e0: 0100 1000 1110 0000 */
- {illegal,nullptr }, /* e1: 0100 1000 1110 0001 */
- {illegal,nullptr }, /* e2: 0100 1000 1110 0010 */
- {illegal,nullptr }, /* e3: 0100 1000 1110 0011 */
- {illegal,nullptr }, /* e4: 0100 1000 1110 0100 */
- {illegal,nullptr }, /* e5: 0100 1000 1110 0101 */
- {illegal,nullptr }, /* e6: 0100 1000 1110 0110 */
- {illegal,nullptr }, /* e7: 0100 1000 1110 0111 */
- {illegal,nullptr }, /* e8: 0100 1000 1110 1000 */
- {illegal,nullptr }, /* e9: 0100 1000 1110 1001 */
- {illegal,nullptr }, /* ea: 0100 1000 1110 1010 */
- {illegal,nullptr }, /* eb: 0100 1000 1110 1011 */
- {illegal,nullptr }, /* ec: 0100 1000 1110 1100 */
- {illegal,nullptr }, /* ed: 0100 1000 1110 1101 */
- {illegal,nullptr }, /* ee: 0100 1000 1110 1110 */
- {illegal,nullptr }, /* ef: 0100 1000 1110 1111 */
+ { }, // e0: 0100 1000 1110 0000
+ { }, // e1: 0100 1000 1110 0001
+ { }, // e2: 0100 1000 1110 0010
+ { }, // e3: 0100 1000 1110 0011
+ { }, // e4: 0100 1000 1110 0100
+ { }, // e5: 0100 1000 1110 0101
+ { }, // e6: 0100 1000 1110 0110
+ { }, // e7: 0100 1000 1110 0111
+ { }, // e8: 0100 1000 1110 1000
+ { }, // e9: 0100 1000 1110 1001
+ { }, // ea: 0100 1000 1110 1010
+ { }, // eb: 0100 1000 1110 1011
+ { }, // ec: 0100 1000 1110 1100
+ { }, // ed: 0100 1000 1110 1101
+ { }, // ee: 0100 1000 1110 1110
+ { }, // ef: 0100 1000 1110 1111
- {illegal,nullptr }, /* f0: 0100 1000 1111 0000 */
- {illegal,nullptr }, /* f1: 0100 1000 1111 0001 */
- {illegal,nullptr }, /* f2: 0100 1000 1111 0010 */
- {illegal,nullptr }, /* f3: 0100 1000 1111 0011 */
- {illegal,nullptr }, /* f4: 0100 1000 1111 0100 */
- {illegal,nullptr }, /* f5: 0100 1000 1111 0101 */
- {illegal,nullptr }, /* f6: 0100 1000 1111 0110 */
- {illegal,nullptr }, /* f7: 0100 1000 1111 0111 */
- {illegal,nullptr }, /* f8: 0100 1000 1111 1000 */
- {illegal,nullptr }, /* f9: 0100 1000 1111 1001 */
- {illegal,nullptr }, /* fa: 0100 1000 1111 1010 */
- {illegal,nullptr }, /* fb: 0100 1000 1111 1011 */
- {illegal,nullptr }, /* fc: 0100 1000 1111 1100 */
- {illegal,nullptr }, /* fd: 0100 1000 1111 1101 */
- {illegal,nullptr }, /* fe: 0100 1000 1111 1110 */
- {illegal,nullptr } /* ff: 0100 1000 1111 1111 */
+ { }, // f0: 0100 1000 1111 0000
+ { }, // f1: 0100 1000 1111 0001
+ { }, // f2: 0100 1000 1111 0010
+ { }, // f3: 0100 1000 1111 0011
+ { }, // f4: 0100 1000 1111 0100
+ { }, // f5: 0100 1000 1111 0101
+ { }, // f6: 0100 1000 1111 0110
+ { }, // f7: 0100 1000 1111 0111
+ { }, // f8: 0100 1000 1111 1000
+ { }, // f9: 0100 1000 1111 1001
+ { }, // fa: 0100 1000 1111 1010
+ { }, // fb: 0100 1000 1111 1011
+ { }, // fc: 0100 1000 1111 1100
+ { }, // fd: 0100 1000 1111 1101
+ { }, // fe: 0100 1000 1111 1110
+ { } // ff: 0100 1000 1111 1111
};
-/* prefix 4C */
-static const struct dasm_s dasm4C_7810[256] =
+// prefix 4C
+const dasm_s dasm_s::d4C_7810[256] =
{
- {illegal,nullptr }, /* 00: 0100 1100 0000 0000 */
- {illegal,nullptr }, /* 01: 0100 1100 0000 0001 */
- {illegal,nullptr }, /* 02: 0100 1100 0000 0010 */
- {illegal,nullptr }, /* 03: 0100 1100 0000 0011 */
- {illegal,nullptr }, /* 04: 0100 1100 0000 0100 */
- {illegal,nullptr }, /* 05: 0100 1100 0000 0101 */
- {illegal,nullptr }, /* 06: 0100 1100 0000 0110 */
- {illegal,nullptr }, /* 07: 0100 1100 0000 0111 */
- {illegal,nullptr }, /* 08: 0100 1100 0000 1000 */
- {illegal,nullptr }, /* 09: 0100 1100 0000 1001 */
- {illegal,nullptr }, /* 0a: 0100 1100 0000 1010 */
- {illegal,nullptr }, /* 0b: 0100 1100 0000 1011 */
- {illegal,nullptr }, /* 0c: 0100 1100 0000 1100 */
- {illegal,nullptr }, /* 0d: 0100 1100 0000 1101 */
- {illegal,nullptr }, /* 0e: 0100 1100 0000 1110 */
- {illegal,nullptr }, /* 0f: 0100 1100 0000 1111 */
+ { }, // 00: 0100 1100 0000 0000
+ { }, // 01: 0100 1100 0000 0001
+ { }, // 02: 0100 1100 0000 0010
+ { }, // 03: 0100 1100 0000 0011
+ { }, // 04: 0100 1100 0000 0100
+ { }, // 05: 0100 1100 0000 0101
+ { }, // 06: 0100 1100 0000 0110
+ { }, // 07: 0100 1100 0000 0111
+ { }, // 08: 0100 1100 0000 1000
+ { }, // 09: 0100 1100 0000 1001
+ { }, // 0a: 0100 1100 0000 1010
+ { }, // 0b: 0100 1100 0000 1011
+ { }, // 0c: 0100 1100 0000 1100
+ { }, // 0d: 0100 1100 0000 1101
+ { }, // 0e: 0100 1100 0000 1110
+ { }, // 0f: 0100 1100 0000 1111
- {illegal,nullptr }, /* 10: 0100 1100 0001 0000 */
- {illegal,nullptr }, /* 11: 0100 1100 0001 0001 */
- {illegal,nullptr }, /* 12: 0100 1100 0001 0010 */
- {illegal,nullptr }, /* 13: 0100 1100 0001 0011 */
- {illegal,nullptr }, /* 14: 0100 1100 0001 0100 */
- {illegal,nullptr }, /* 15: 0100 1100 0001 0101 */
- {illegal,nullptr }, /* 16: 0100 1100 0001 0110 */
- {illegal,nullptr }, /* 17: 0100 1100 0001 0111 */
- {illegal,nullptr }, /* 18: 0100 1100 0001 1000 */
- {illegal,nullptr }, /* 19: 0100 1100 0001 1001 */
- {illegal,nullptr }, /* 1a: 0100 1100 0001 1010 */
- {illegal,nullptr }, /* 1b: 0100 1100 0001 1011 */
- {illegal,nullptr }, /* 1c: 0100 1100 0001 1100 */
- {illegal,nullptr }, /* 1d: 0100 1100 0001 1101 */
- {illegal,nullptr }, /* 1e: 0100 1100 0001 1110 */
- {illegal,nullptr }, /* 1f: 0100 1100 0001 1111 */
+ { }, // 10: 0100 1100 0001 0000
+ { }, // 11: 0100 1100 0001 0001
+ { }, // 12: 0100 1100 0001 0010
+ { }, // 13: 0100 1100 0001 0011
+ { }, // 14: 0100 1100 0001 0100
+ { }, // 15: 0100 1100 0001 0101
+ { }, // 16: 0100 1100 0001 0110
+ { }, // 17: 0100 1100 0001 0111
+ { }, // 18: 0100 1100 0001 1000
+ { }, // 19: 0100 1100 0001 1001
+ { }, // 1a: 0100 1100 0001 1010
+ { }, // 1b: 0100 1100 0001 1011
+ { }, // 1c: 0100 1100 0001 1100
+ { }, // 1d: 0100 1100 0001 1101
+ { }, // 1e: 0100 1100 0001 1110
+ { }, // 1f: 0100 1100 0001 1111
- {illegal,nullptr }, /* 20: 0100 1100 0010 0000 */
- {illegal,nullptr }, /* 21: 0100 1100 0010 0001 */
- {illegal,nullptr }, /* 22: 0100 1100 0010 0010 */
- {illegal,nullptr }, /* 23: 0100 1100 0010 0011 */
- {illegal,nullptr }, /* 24: 0100 1100 0010 0100 */
- {illegal,nullptr }, /* 25: 0100 1100 0010 0101 */
- {illegal,nullptr }, /* 26: 0100 1100 0010 0110 */
- {illegal,nullptr }, /* 27: 0100 1100 0010 0111 */
- {illegal,nullptr }, /* 28: 0100 1100 0010 1000 */
- {illegal,nullptr }, /* 29: 0100 1100 0010 1001 */
- {illegal,nullptr }, /* 2a: 0100 1100 0010 1010 */
- {illegal,nullptr }, /* 2b: 0100 1100 0010 1011 */
- {illegal,nullptr }, /* 2c: 0100 1100 0010 1100 */
- {illegal,nullptr }, /* 2d: 0100 1100 0010 1101 */
- {illegal,nullptr }, /* 2e: 0100 1100 0010 1110 */
- {illegal,nullptr }, /* 2f: 0100 1100 0010 1111 */
+ { }, // 20: 0100 1100 0010 0000
+ { }, // 21: 0100 1100 0010 0001
+ { }, // 22: 0100 1100 0010 0010
+ { }, // 23: 0100 1100 0010 0011
+ { }, // 24: 0100 1100 0010 0100
+ { }, // 25: 0100 1100 0010 0101
+ { }, // 26: 0100 1100 0010 0110
+ { }, // 27: 0100 1100 0010 0111
+ { }, // 28: 0100 1100 0010 1000
+ { }, // 29: 0100 1100 0010 1001
+ { }, // 2a: 0100 1100 0010 1010
+ { }, // 2b: 0100 1100 0010 1011
+ { }, // 2c: 0100 1100 0010 1100
+ { }, // 2d: 0100 1100 0010 1101
+ { }, // 2e: 0100 1100 0010 1110
+ { }, // 2f: 0100 1100 0010 1111
- {illegal,nullptr }, /* 30: 0100 1100 0011 0000 */
- {illegal,nullptr }, /* 31: 0100 1100 0011 0001 */
- {illegal,nullptr }, /* 32: 0100 1100 0011 0010 */
- {illegal,nullptr }, /* 33: 0100 1100 0011 0011 */
- {illegal,nullptr }, /* 34: 0100 1100 0011 0100 */
- {illegal,nullptr }, /* 35: 0100 1100 0011 0101 */
- {illegal,nullptr }, /* 36: 0100 1100 0011 0110 */
- {illegal,nullptr }, /* 37: 0100 1100 0011 0111 */
- {illegal,nullptr }, /* 38: 0100 1100 0011 1000 */
- {illegal,nullptr }, /* 39: 0100 1100 0011 1001 */
- {illegal,nullptr }, /* 3a: 0100 1100 0011 1010 */
- {illegal,nullptr }, /* 3b: 0100 1100 0011 1011 */
- {illegal,nullptr }, /* 3c: 0100 1100 0011 1100 */
- {illegal,nullptr }, /* 3d: 0100 1100 0011 1101 */
- {illegal,nullptr }, /* 3e: 0100 1100 0011 1110 */
- {illegal,nullptr }, /* 3f: 0100 1100 0011 1111 */
+ { }, // 30: 0100 1100 0011 0000
+ { }, // 31: 0100 1100 0011 0001
+ { }, // 32: 0100 1100 0011 0010
+ { }, // 33: 0100 1100 0011 0011
+ { }, // 34: 0100 1100 0011 0100
+ { }, // 35: 0100 1100 0011 0101
+ { }, // 36: 0100 1100 0011 0110
+ { }, // 37: 0100 1100 0011 0111
+ { }, // 38: 0100 1100 0011 1000
+ { }, // 39: 0100 1100 0011 1001
+ { }, // 3a: 0100 1100 0011 1010
+ { }, // 3b: 0100 1100 0011 1011
+ { }, // 3c: 0100 1100 0011 1100
+ { }, // 3d: 0100 1100 0011 1101
+ { }, // 3e: 0100 1100 0011 1110
+ { }, // 3f: 0100 1100 0011 1111
- {illegal,nullptr }, /* 40: 0100 1100 0100 0000 */
- {illegal,nullptr }, /* 41: 0100 1100 0100 0001 */
- {illegal,nullptr }, /* 42: 0100 1100 0100 0010 */
- {illegal,nullptr }, /* 43: 0100 1100 0100 0011 */
- {illegal,nullptr }, /* 44: 0100 1100 0100 0100 */
- {illegal,nullptr }, /* 45: 0100 1100 0100 0101 */
- {illegal,nullptr }, /* 46: 0100 1100 0100 0110 */
- {illegal,nullptr }, /* 47: 0100 1100 0100 0111 */
- {illegal,nullptr }, /* 48: 0100 1100 0100 1000 */
- {illegal,nullptr }, /* 49: 0100 1100 0100 1001 */
- {illegal,nullptr }, /* 4a: 0100 1100 0100 1010 */
- {illegal,nullptr }, /* 4b: 0100 1100 0100 1011 */
- {illegal,nullptr }, /* 4c: 0100 1100 0100 1100 */
- {illegal,nullptr }, /* 4d: 0100 1100 0100 1101 */
- {illegal,nullptr }, /* 4e: 0100 1100 0100 1110 */
- {illegal,nullptr }, /* 4f: 0100 1100 0100 1111 */
+ { }, // 40: 0100 1100 0100 0000
+ { }, // 41: 0100 1100 0100 0001
+ { }, // 42: 0100 1100 0100 0010
+ { }, // 43: 0100 1100 0100 0011
+ { }, // 44: 0100 1100 0100 0100
+ { }, // 45: 0100 1100 0100 0101
+ { }, // 46: 0100 1100 0100 0110
+ { }, // 47: 0100 1100 0100 0111
+ { }, // 48: 0100 1100 0100 1000
+ { }, // 49: 0100 1100 0100 1001
+ { }, // 4a: 0100 1100 0100 1010
+ { }, // 4b: 0100 1100 0100 1011
+ { }, // 4c: 0100 1100 0100 1100
+ { }, // 4d: 0100 1100 0100 1101
+ { }, // 4e: 0100 1100 0100 1110
+ { }, // 4f: 0100 1100 0100 1111
- {illegal,nullptr }, /* 50: 0100 1100 0101 0000 */
- {illegal,nullptr }, /* 51: 0100 1100 0101 0001 */
- {illegal,nullptr }, /* 52: 0100 1100 0101 0010 */
- {illegal,nullptr }, /* 53: 0100 1100 0101 0011 */
- {illegal,nullptr }, /* 54: 0100 1100 0101 0100 */
- {illegal,nullptr }, /* 55: 0100 1100 0101 0101 */
- {illegal,nullptr }, /* 56: 0100 1100 0101 0110 */
- {illegal,nullptr }, /* 57: 0100 1100 0101 0111 */
- {illegal,nullptr }, /* 58: 0100 1100 0101 1000 */
- {illegal,nullptr }, /* 59: 0100 1100 0101 1001 */
- {illegal,nullptr }, /* 5a: 0100 1100 0101 1010 */
- {illegal,nullptr }, /* 5b: 0100 1100 0101 1011 */
- {illegal,nullptr }, /* 5c: 0100 1100 0101 1100 */
- {illegal,nullptr }, /* 5d: 0100 1100 0101 1101 */
- {illegal,nullptr }, /* 5e: 0100 1100 0101 1110 */
- {illegal,nullptr }, /* 5f: 0100 1100 0101 1111 */
+ { }, // 50: 0100 1100 0101 0000
+ { }, // 51: 0100 1100 0101 0001
+ { }, // 52: 0100 1100 0101 0010
+ { }, // 53: 0100 1100 0101 0011
+ { }, // 54: 0100 1100 0101 0100
+ { }, // 55: 0100 1100 0101 0101
+ { }, // 56: 0100 1100 0101 0110
+ { }, // 57: 0100 1100 0101 0111
+ { }, // 58: 0100 1100 0101 1000
+ { }, // 59: 0100 1100 0101 1001
+ { }, // 5a: 0100 1100 0101 1010
+ { }, // 5b: 0100 1100 0101 1011
+ { }, // 5c: 0100 1100 0101 1100
+ { }, // 5d: 0100 1100 0101 1101
+ { }, // 5e: 0100 1100 0101 1110
+ { }, // 5f: 0100 1100 0101 1111
- {illegal,nullptr }, /* 60: 0100 1100 0110 0000 */
- {illegal,nullptr }, /* 61: 0100 1100 0110 0001 */
- {illegal,nullptr }, /* 62: 0100 1100 0110 0010 */
- {illegal,nullptr }, /* 63: 0100 1100 0110 0011 */
- {illegal,nullptr }, /* 64: 0100 1100 0110 0100 */
- {illegal,nullptr }, /* 65: 0100 1100 0110 0101 */
- {illegal,nullptr }, /* 66: 0100 1100 0110 0110 */
- {illegal,nullptr }, /* 67: 0100 1100 0110 0111 */
- {illegal,nullptr }, /* 68: 0100 1100 0110 1000 */
- {illegal,nullptr }, /* 69: 0100 1100 0110 1001 */
- {illegal,nullptr }, /* 6a: 0100 1100 0110 1010 */
- {illegal,nullptr }, /* 6b: 0100 1100 0110 1011 */
- {illegal,nullptr }, /* 6c: 0100 1100 0110 1100 */
- {illegal,nullptr }, /* 6d: 0100 1100 0110 1101 */
- {illegal,nullptr }, /* 6e: 0100 1100 0110 1110 */
- {illegal,nullptr }, /* 6f: 0100 1100 0110 1111 */
+ { }, // 60: 0100 1100 0110 0000
+ { }, // 61: 0100 1100 0110 0001
+ { }, // 62: 0100 1100 0110 0010
+ { }, // 63: 0100 1100 0110 0011
+ { }, // 64: 0100 1100 0110 0100
+ { }, // 65: 0100 1100 0110 0101
+ { }, // 66: 0100 1100 0110 0110
+ { }, // 67: 0100 1100 0110 0111
+ { }, // 68: 0100 1100 0110 1000
+ { }, // 69: 0100 1100 0110 1001
+ { }, // 6a: 0100 1100 0110 1010
+ { }, // 6b: 0100 1100 0110 1011
+ { }, // 6c: 0100 1100 0110 1100
+ { }, // 6d: 0100 1100 0110 1101
+ { }, // 6e: 0100 1100 0110 1110
+ { }, // 6f: 0100 1100 0110 1111
- {illegal,nullptr }, /* 70: 0100 1100 0111 0000 */
- {illegal,nullptr }, /* 71: 0100 1100 0111 0001 */
- {illegal,nullptr }, /* 72: 0100 1100 0111 0010 */
- {illegal,nullptr }, /* 73: 0100 1100 0111 0011 */
- {illegal,nullptr }, /* 74: 0100 1100 0111 0100 */
- {illegal,nullptr }, /* 75: 0100 1100 0111 0101 */
- {illegal,nullptr }, /* 76: 0100 1100 0111 0110 */
- {illegal,nullptr }, /* 77: 0100 1100 0111 0111 */
- {illegal,nullptr }, /* 78: 0100 1100 0111 1000 */
- {illegal,nullptr }, /* 79: 0100 1100 0111 1001 */
- {illegal,nullptr }, /* 7a: 0100 1100 0111 1010 */
- {illegal,nullptr }, /* 7b: 0100 1100 0111 1011 */
- {illegal,nullptr }, /* 7c: 0100 1100 0111 1100 */
- {illegal,nullptr }, /* 7d: 0100 1100 0111 1101 */
- {illegal,nullptr }, /* 7e: 0100 1100 0111 1110 */
- {illegal,nullptr }, /* 7f: 0100 1100 0111 1111 */
+ { }, // 70: 0100 1100 0111 0000
+ { }, // 71: 0100 1100 0111 0001
+ { }, // 72: 0100 1100 0111 0010
+ { }, // 73: 0100 1100 0111 0011
+ { }, // 74: 0100 1100 0111 0100
+ { }, // 75: 0100 1100 0111 0101
+ { }, // 76: 0100 1100 0111 0110
+ { }, // 77: 0100 1100 0111 0111
+ { }, // 78: 0100 1100 0111 1000
+ { }, // 79: 0100 1100 0111 1001
+ { }, // 7a: 0100 1100 0111 1010
+ { }, // 7b: 0100 1100 0111 1011
+ { }, // 7c: 0100 1100 0111 1100
+ { }, // 7d: 0100 1100 0111 1101
+ { }, // 7e: 0100 1100 0111 1110
+ { }, // 7f: 0100 1100 0111 1111
- {illegal,nullptr }, /* 80: 0100 1100 1000 0000 */
- {illegal,nullptr }, /* 81: 0100 1100 1000 0001 */
- {illegal,nullptr }, /* 82: 0100 1100 1000 0010 */
- {illegal,nullptr }, /* 83: 0100 1100 1000 0011 */
- {illegal,nullptr }, /* 84: 0100 1100 1000 0100 */
- {illegal,nullptr }, /* 85: 0100 1100 1000 0101 */
- {illegal,nullptr }, /* 86: 0100 1100 1000 0110 */
- {illegal,nullptr }, /* 87: 0100 1100 1000 0111 */
- {illegal,nullptr }, /* 88: 0100 1100 1000 1000 */
- {illegal,nullptr }, /* 89: 0100 1100 1000 1001 */
- {illegal,nullptr }, /* 8a: 0100 1100 1000 1010 */
- {illegal,nullptr }, /* 8b: 0100 1100 1000 1011 */
- {illegal,nullptr }, /* 8c: 0100 1100 1000 1100 */
- {illegal,nullptr }, /* 8d: 0100 1100 1000 1101 */
- {illegal,nullptr }, /* 8e: 0100 1100 1000 1110 */
- {illegal,nullptr }, /* 8f: 0100 1100 1000 1111 */
+ { }, // 80: 0100 1100 1000 0000
+ { }, // 81: 0100 1100 1000 0001
+ { }, // 82: 0100 1100 1000 0010
+ { }, // 83: 0100 1100 1000 0011
+ { }, // 84: 0100 1100 1000 0100
+ { }, // 85: 0100 1100 1000 0101
+ { }, // 86: 0100 1100 1000 0110
+ { }, // 87: 0100 1100 1000 0111
+ { }, // 88: 0100 1100 1000 1000
+ { }, // 89: 0100 1100 1000 1001
+ { }, // 8a: 0100 1100 1000 1010
+ { }, // 8b: 0100 1100 1000 1011
+ { }, // 8c: 0100 1100 1000 1100
+ { }, // 8d: 0100 1100 1000 1101
+ { }, // 8e: 0100 1100 1000 1110
+ { }, // 8f: 0100 1100 1000 1111
- {illegal,nullptr }, /* 90: 0100 1100 1001 0000 */
- {illegal,nullptr }, /* 91: 0100 1100 1001 0001 */
- {illegal,nullptr }, /* 92: 0100 1100 1001 0010 */
- {illegal,nullptr }, /* 93: 0100 1100 1001 0011 */
- {illegal,nullptr }, /* 94: 0100 1100 1001 0100 */
- {illegal,nullptr }, /* 95: 0100 1100 1001 0101 */
- {illegal,nullptr }, /* 96: 0100 1100 1001 0110 */
- {illegal,nullptr }, /* 97: 0100 1100 1001 0111 */
- {illegal,nullptr }, /* 98: 0100 1100 1001 1000 */
- {illegal,nullptr }, /* 99: 0100 1100 1001 1001 */
- {illegal,nullptr }, /* 9a: 0100 1100 1001 1010 */
- {illegal,nullptr }, /* 9b: 0100 1100 1001 1011 */
- {illegal,nullptr }, /* 9c: 0100 1100 1001 1100 */
- {illegal,nullptr }, /* 9d: 0100 1100 1001 1101 */
- {illegal,nullptr }, /* 9e: 0100 1100 1001 1110 */
- {illegal,nullptr }, /* 9f: 0100 1100 1001 1111 */
+ { }, // 90: 0100 1100 1001 0000
+ { }, // 91: 0100 1100 1001 0001
+ { }, // 92: 0100 1100 1001 0010
+ { }, // 93: 0100 1100 1001 0011
+ { }, // 94: 0100 1100 1001 0100
+ { }, // 95: 0100 1100 1001 0101
+ { }, // 96: 0100 1100 1001 0110
+ { }, // 97: 0100 1100 1001 0111
+ { }, // 98: 0100 1100 1001 1000
+ { }, // 99: 0100 1100 1001 1001
+ { }, // 9a: 0100 1100 1001 1010
+ { }, // 9b: 0100 1100 1001 1011
+ { }, // 9c: 0100 1100 1001 1100
+ { }, // 9d: 0100 1100 1001 1101
+ { }, // 9e: 0100 1100 1001 1110
+ { }, // 9f: 0100 1100 1001 1111
- {illegal,nullptr }, /* a0: 0100 1100 1010 0000 */
- {illegal,nullptr }, /* a1: 0100 1100 1010 0001 */
- {illegal,nullptr }, /* a2: 0100 1100 1010 0010 */
- {illegal,nullptr }, /* a3: 0100 1100 1010 0011 */
- {illegal,nullptr }, /* a4: 0100 1100 1010 0100 */
- {illegal,nullptr }, /* a5: 0100 1100 1010 0101 */
- {illegal,nullptr }, /* a6: 0100 1100 1010 0110 */
- {illegal,nullptr }, /* a7: 0100 1100 1010 0111 */
- {illegal,nullptr }, /* a8: 0100 1100 1010 1000 */
- {illegal,nullptr }, /* a9: 0100 1100 1010 1001 */
- {illegal,nullptr }, /* aa: 0100 1100 1010 1010 */
- {illegal,nullptr }, /* ab: 0100 1100 1010 1011 */
- {illegal,nullptr }, /* ac: 0100 1100 1010 1100 */
- {illegal,nullptr }, /* ad: 0100 1100 1010 1101 */
- {illegal,nullptr }, /* ae: 0100 1100 1010 1110 */
- {illegal,nullptr }, /* af: 0100 1100 1010 1111 */
+ { }, // a0: 0100 1100 1010 0000
+ { }, // a1: 0100 1100 1010 0001
+ { }, // a2: 0100 1100 1010 0010
+ { }, // a3: 0100 1100 1010 0011
+ { }, // a4: 0100 1100 1010 0100
+ { }, // a5: 0100 1100 1010 0101
+ { }, // a6: 0100 1100 1010 0110
+ { }, // a7: 0100 1100 1010 0111
+ { }, // a8: 0100 1100 1010 1000
+ { }, // a9: 0100 1100 1010 1001
+ { }, // aa: 0100 1100 1010 1010
+ { }, // ab: 0100 1100 1010 1011
+ { }, // ac: 0100 1100 1010 1100
+ { }, // ad: 0100 1100 1010 1101
+ { }, // ae: 0100 1100 1010 1110
+ { }, // af: 0100 1100 1010 1111
- {illegal,nullptr }, /* b0: 0100 1100 1011 0000 */
- {illegal,nullptr }, /* b1: 0100 1100 1011 0001 */
- {illegal,nullptr }, /* b2: 0100 1100 1011 0010 */
- {illegal,nullptr }, /* b3: 0100 1100 1011 0011 */
- {illegal,nullptr }, /* b4: 0100 1100 1011 0100 */
- {illegal,nullptr }, /* b5: 0100 1100 1011 0101 */
- {illegal,nullptr }, /* b6: 0100 1100 1011 0110 */
- {illegal,nullptr }, /* b7: 0100 1100 1011 0111 */
- {illegal,nullptr }, /* b8: 0100 1100 1011 1000 */
- {illegal,nullptr }, /* b9: 0100 1100 1011 1001 */
- {illegal,nullptr }, /* ba: 0100 1100 1011 1010 */
- {illegal,nullptr }, /* bb: 0100 1100 1011 1011 */
- {illegal,nullptr }, /* bc: 0100 1100 1011 1100 */
- {illegal,nullptr }, /* bd: 0100 1100 1011 1101 */
- {illegal,nullptr }, /* be: 0100 1100 1011 1110 */
- {illegal,nullptr }, /* bf: 0100 1100 1011 1111 */
+ { }, // b0: 0100 1100 1011 0000
+ { }, // b1: 0100 1100 1011 0001
+ { }, // b2: 0100 1100 1011 0010
+ { }, // b3: 0100 1100 1011 0011
+ { }, // b4: 0100 1100 1011 0100
+ { }, // b5: 0100 1100 1011 0101
+ { }, // b6: 0100 1100 1011 0110
+ { }, // b7: 0100 1100 1011 0111
+ { }, // b8: 0100 1100 1011 1000
+ { }, // b9: 0100 1100 1011 1001
+ { }, // ba: 0100 1100 1011 1010
+ { }, // bb: 0100 1100 1011 1011
+ { }, // bc: 0100 1100 1011 1100
+ { }, // bd: 0100 1100 1011 1101
+ { }, // be: 0100 1100 1011 1110
+ { }, // bf: 0100 1100 1011 1111
- {MOV,"A,PA" }, /* c0: 0100 1100 1100 0000 */
- {MOV,"A,PB" }, /* c1: 0100 1100 1100 0001 */
- {MOV,"A,PC" }, /* c2: 0100 1100 1100 0010 */
- {MOV,"A,PD" }, /* c3: 0100 1100 1100 0011 */
- {illegal,nullptr }, /* c4: 0100 1100 1100 0100 */
- {MOV,"A,PF" }, /* c5: 0100 1100 1100 0101 */
- {MOV,"A,MKH" }, /* c6: 0100 1100 1100 0110 */
- {MOV,"A,MKL" }, /* c7: 0100 1100 1100 0111 */
- {MOV,"A,ANM" }, /* c8: 0100 1100 1100 1000 */ /* 7810 */
- {MOV,"A,SMH" }, /* c9: 0100 1100 1100 1001 */
- {illegal,nullptr }, /* ca: 0100 1100 1100 1010 */
- {MOV,"A,EOM" }, /* cb: 0100 1100 1100 1011 */
- {illegal,nullptr }, /* cc: 0100 1100 1100 1100 */
- {MOV,"A,TMM" }, /* cd: 0100 1100 1100 1101 */
- {illegal,nullptr }, /* ce: 0100 1100 1100 1110 */
- {illegal,nullptr }, /* cf: 0100 1100 1100 1111 */
+ {MOV, "A,PA" }, // c0: 0100 1100 1100 0000
+ {MOV, "A,PB" }, // c1: 0100 1100 1100 0001
+ {MOV, "A,PC" }, // c2: 0100 1100 1100 0010
+ {MOV, "A,PD" }, // c3: 0100 1100 1100 0011
+ { }, // c4: 0100 1100 1100 0100
+ {MOV, "A,PF" }, // c5: 0100 1100 1100 0101
+ {MOV, "A,MKH" }, // c6: 0100 1100 1100 0110
+ {MOV, "A,MKL" }, // c7: 0100 1100 1100 0111
+ {MOV, "A,ANM" }, // c8: 0100 1100 1100 1000 7810
+ {MOV, "A,SMH" }, // c9: 0100 1100 1100 1001
+ { }, // ca: 0100 1100 1100 1010
+ {MOV, "A,EOM" }, // cb: 0100 1100 1100 1011
+ { }, // cc: 0100 1100 1100 1100
+ {MOV, "A,TMM" }, // cd: 0100 1100 1100 1101
+ { }, // ce: 0100 1100 1100 1110
+ { }, // cf: 0100 1100 1100 1111
- {illegal,nullptr }, /* d0: 0100 1100 1101 0000 */
- {illegal,nullptr }, /* d1: 0100 1100 1101 0001 */
- {illegal,nullptr }, /* d2: 0100 1100 1101 0010 */
- {illegal,nullptr }, /* d3: 0100 1100 1101 0011 */
- {illegal,nullptr }, /* d4: 0100 1100 1101 0100 */
- {illegal,nullptr }, /* d5: 0100 1100 1101 0101 */
- {illegal,nullptr }, /* d6: 0100 1100 1101 0110 */
- {illegal,nullptr }, /* d7: 0100 1100 1101 0111 */
- {illegal,nullptr }, /* d8: 0100 1100 1101 1000 */
- {MOV,"A,RXB" }, /* d9: 0100 1100 1101 1001 */
- {illegal,nullptr }, /* da: 0100 1100 1101 1010 */
- {illegal,nullptr }, /* db: 0100 1100 1101 1011 */
- {illegal,nullptr }, /* dc: 0100 1100 1101 1100 */
- {illegal,nullptr }, /* dd: 0100 1100 1101 1101 */
- {illegal,nullptr }, /* de: 0100 1100 1101 1110 */
- {illegal,nullptr }, /* df: 0100 1100 1101 1111 */
+ { }, // d0: 0100 1100 1101 0000
+ { }, // d1: 0100 1100 1101 0001
+ { }, // d2: 0100 1100 1101 0010
+ { }, // d3: 0100 1100 1101 0011
+ { }, // d4: 0100 1100 1101 0100
+ { }, // d5: 0100 1100 1101 0101
+ { }, // d6: 0100 1100 1101 0110
+ { }, // d7: 0100 1100 1101 0111
+ { }, // d8: 0100 1100 1101 1000
+ {MOV, "A,RXB" }, // d9: 0100 1100 1101 1001
+ { }, // da: 0100 1100 1101 1010
+ { }, // db: 0100 1100 1101 1011
+ { }, // dc: 0100 1100 1101 1100
+ { }, // dd: 0100 1100 1101 1101
+ { }, // de: 0100 1100 1101 1110
+ { }, // df: 0100 1100 1101 1111
- {MOV,"A,CR0" }, /* e0: 0100 1100 1110 0000 */ /* 7810 */
- {MOV,"A,CR1" }, /* e1: 0100 1100 1110 0001 */ /* 7810 */
- {MOV,"A,CR2" }, /* e2: 0100 1100 1110 0010 */ /* 7810 */
- {MOV,"A,CR3" }, /* e3: 0100 1100 1110 0011 */ /* 7810 */
- {illegal,nullptr }, /* e4: 0100 1100 1110 0100 */
- {illegal,nullptr }, /* e5: 0100 1100 1110 0101 */
- {illegal,nullptr }, /* e6: 0100 1100 1110 0110 */
- {illegal,nullptr }, /* e7: 0100 1100 1110 0111 */
- {illegal,nullptr }, /* e8: 0100 1100 1110 1000 */
- {illegal,nullptr }, /* e9: 0100 1100 1110 1001 */
- {illegal,nullptr }, /* ea: 0100 1100 1110 1010 */
- {illegal,nullptr }, /* eb: 0100 1100 1110 1011 */
- {illegal,nullptr }, /* ec: 0100 1100 1110 1100 */
- {illegal,nullptr }, /* ed: 0100 1100 1110 1101 */
- {illegal,nullptr }, /* ee: 0100 1100 1110 1110 */
- {illegal,nullptr }, /* ef: 0100 1100 1110 1111 */
+ {MOV, "A,CR0" }, // e0: 0100 1100 1110 0000 7810
+ {MOV, "A,CR1" }, // e1: 0100 1100 1110 0001 7810
+ {MOV, "A,CR2" }, // e2: 0100 1100 1110 0010 7810
+ {MOV, "A,CR3" }, // e3: 0100 1100 1110 0011 7810
+ { }, // e4: 0100 1100 1110 0100
+ { }, // e5: 0100 1100 1110 0101
+ { }, // e6: 0100 1100 1110 0110
+ { }, // e7: 0100 1100 1110 0111
+ { }, // e8: 0100 1100 1110 1000
+ { }, // e9: 0100 1100 1110 1001
+ { }, // ea: 0100 1100 1110 1010
+ { }, // eb: 0100 1100 1110 1011
+ { }, // ec: 0100 1100 1110 1100
+ { }, // ed: 0100 1100 1110 1101
+ { }, // ee: 0100 1100 1110 1110
+ { }, // ef: 0100 1100 1110 1111
- {illegal,nullptr }, /* f0: 0100 1100 1111 0000 */
- {illegal,nullptr }, /* f1: 0100 1100 1111 0001 */
- {illegal,nullptr }, /* f2: 0100 1100 1111 0010 */
- {illegal,nullptr }, /* f3: 0100 1100 1111 0011 */
- {illegal,nullptr }, /* f4: 0100 1100 1111 0100 */
- {illegal,nullptr }, /* f5: 0100 1100 1111 0101 */
- {illegal,nullptr }, /* f6: 0100 1100 1111 0110 */
- {illegal,nullptr }, /* f7: 0100 1100 1111 0111 */
- {illegal,nullptr }, /* f8: 0100 1100 1111 1000 */
- {illegal,nullptr }, /* f9: 0100 1100 1111 1001 */
- {illegal,nullptr }, /* fa: 0100 1100 1111 1010 */
- {illegal,nullptr }, /* fb: 0100 1100 1111 1011 */
- {illegal,nullptr }, /* fc: 0100 1100 1111 1100 */
- {illegal,nullptr }, /* fd: 0100 1100 1111 1101 */
- {illegal,nullptr }, /* fe: 0100 1100 1111 1110 */
- {illegal,nullptr } /* ff: 0100 1100 1111 1111 */
+ { }, // f0: 0100 1100 1111 0000
+ { }, // f1: 0100 1100 1111 0001
+ { }, // f2: 0100 1100 1111 0010
+ { }, // f3: 0100 1100 1111 0011
+ { }, // f4: 0100 1100 1111 0100
+ { }, // f5: 0100 1100 1111 0101
+ { }, // f6: 0100 1100 1111 0110
+ { }, // f7: 0100 1100 1111 0111
+ { }, // f8: 0100 1100 1111 1000
+ { }, // f9: 0100 1100 1111 1001
+ { }, // fa: 0100 1100 1111 1010
+ { }, // fb: 0100 1100 1111 1011
+ { }, // fc: 0100 1100 1111 1100
+ { }, // fd: 0100 1100 1111 1101
+ { }, // fe: 0100 1100 1111 1110
+ { } // ff: 0100 1100 1111 1111
};
-static const struct dasm_s dasm4C_7807[256] =
+const dasm_s dasm_s::d4C_7807[256] =
{
- {illegal,nullptr }, /* 00: 0100 1100 0000 0000 */
- {illegal,nullptr }, /* 01: 0100 1100 0000 0001 */
- {illegal,nullptr }, /* 02: 0100 1100 0000 0010 */
- {illegal,nullptr }, /* 03: 0100 1100 0000 0011 */
- {illegal,nullptr }, /* 04: 0100 1100 0000 0100 */
- {illegal,nullptr }, /* 05: 0100 1100 0000 0101 */
- {illegal,nullptr }, /* 06: 0100 1100 0000 0110 */
- {illegal,nullptr }, /* 07: 0100 1100 0000 0111 */
- {illegal,nullptr }, /* 08: 0100 1100 0000 1000 */
- {illegal,nullptr }, /* 09: 0100 1100 0000 1001 */
- {illegal,nullptr }, /* 0a: 0100 1100 0000 1010 */
- {illegal,nullptr }, /* 0b: 0100 1100 0000 1011 */
- {illegal,nullptr }, /* 0c: 0100 1100 0000 1100 */
- {illegal,nullptr }, /* 0d: 0100 1100 0000 1101 */
- {illegal,nullptr }, /* 0e: 0100 1100 0000 1110 */
- {illegal,nullptr }, /* 0f: 0100 1100 0000 1111 */
+ { }, // 00: 0100 1100 0000 0000
+ { }, // 01: 0100 1100 0000 0001
+ { }, // 02: 0100 1100 0000 0010
+ { }, // 03: 0100 1100 0000 0011
+ { }, // 04: 0100 1100 0000 0100
+ { }, // 05: 0100 1100 0000 0101
+ { }, // 06: 0100 1100 0000 0110
+ { }, // 07: 0100 1100 0000 0111
+ { }, // 08: 0100 1100 0000 1000
+ { }, // 09: 0100 1100 0000 1001
+ { }, // 0a: 0100 1100 0000 1010
+ { }, // 0b: 0100 1100 0000 1011
+ { }, // 0c: 0100 1100 0000 1100
+ { }, // 0d: 0100 1100 0000 1101
+ { }, // 0e: 0100 1100 0000 1110
+ { }, // 0f: 0100 1100 0000 1111
- {illegal,nullptr }, /* 10: 0100 1100 0001 0000 */
- {illegal,nullptr }, /* 11: 0100 1100 0001 0001 */
- {illegal,nullptr }, /* 12: 0100 1100 0001 0010 */
- {illegal,nullptr }, /* 13: 0100 1100 0001 0011 */
- {illegal,nullptr }, /* 14: 0100 1100 0001 0100 */
- {illegal,nullptr }, /* 15: 0100 1100 0001 0101 */
- {illegal,nullptr }, /* 16: 0100 1100 0001 0110 */
- {illegal,nullptr }, /* 17: 0100 1100 0001 0111 */
- {illegal,nullptr }, /* 18: 0100 1100 0001 1000 */
- {illegal,nullptr }, /* 19: 0100 1100 0001 1001 */
- {illegal,nullptr }, /* 1a: 0100 1100 0001 1010 */
- {illegal,nullptr }, /* 1b: 0100 1100 0001 1011 */
- {illegal,nullptr }, /* 1c: 0100 1100 0001 1100 */
- {illegal,nullptr }, /* 1d: 0100 1100 0001 1101 */
- {illegal,nullptr }, /* 1e: 0100 1100 0001 1110 */
- {illegal,nullptr }, /* 1f: 0100 1100 0001 1111 */
+ { }, // 10: 0100 1100 0001 0000
+ { }, // 11: 0100 1100 0001 0001
+ { }, // 12: 0100 1100 0001 0010
+ { }, // 13: 0100 1100 0001 0011
+ { }, // 14: 0100 1100 0001 0100
+ { }, // 15: 0100 1100 0001 0101
+ { }, // 16: 0100 1100 0001 0110
+ { }, // 17: 0100 1100 0001 0111
+ { }, // 18: 0100 1100 0001 1000
+ { }, // 19: 0100 1100 0001 1001
+ { }, // 1a: 0100 1100 0001 1010
+ { }, // 1b: 0100 1100 0001 1011
+ { }, // 1c: 0100 1100 0001 1100
+ { }, // 1d: 0100 1100 0001 1101
+ { }, // 1e: 0100 1100 0001 1110
+ { }, // 1f: 0100 1100 0001 1111
- {illegal,nullptr }, /* 20: 0100 1100 0010 0000 */
- {illegal,nullptr }, /* 21: 0100 1100 0010 0001 */
- {illegal,nullptr }, /* 22: 0100 1100 0010 0010 */
- {illegal,nullptr }, /* 23: 0100 1100 0010 0011 */
- {illegal,nullptr }, /* 24: 0100 1100 0010 0100 */
- {illegal,nullptr }, /* 25: 0100 1100 0010 0101 */
- {illegal,nullptr }, /* 26: 0100 1100 0010 0110 */
- {illegal,nullptr }, /* 27: 0100 1100 0010 0111 */
- {illegal,nullptr }, /* 28: 0100 1100 0010 1000 */
- {illegal,nullptr }, /* 29: 0100 1100 0010 1001 */
- {illegal,nullptr }, /* 2a: 0100 1100 0010 1010 */
- {illegal,nullptr }, /* 2b: 0100 1100 0010 1011 */
- {illegal,nullptr }, /* 2c: 0100 1100 0010 1100 */
- {illegal,nullptr }, /* 2d: 0100 1100 0010 1101 */
- {illegal,nullptr }, /* 2e: 0100 1100 0010 1110 */
- {illegal,nullptr }, /* 2f: 0100 1100 0010 1111 */
+ { }, // 20: 0100 1100 0010 0000
+ { }, // 21: 0100 1100 0010 0001
+ { }, // 22: 0100 1100 0010 0010
+ { }, // 23: 0100 1100 0010 0011
+ { }, // 24: 0100 1100 0010 0100
+ { }, // 25: 0100 1100 0010 0101
+ { }, // 26: 0100 1100 0010 0110
+ { }, // 27: 0100 1100 0010 0111
+ { }, // 28: 0100 1100 0010 1000
+ { }, // 29: 0100 1100 0010 1001
+ { }, // 2a: 0100 1100 0010 1010
+ { }, // 2b: 0100 1100 0010 1011
+ { }, // 2c: 0100 1100 0010 1100
+ { }, // 2d: 0100 1100 0010 1101
+ { }, // 2e: 0100 1100 0010 1110
+ { }, // 2f: 0100 1100 0010 1111
- {illegal,nullptr }, /* 30: 0100 1100 0011 0000 */
- {illegal,nullptr }, /* 31: 0100 1100 0011 0001 */
- {illegal,nullptr }, /* 32: 0100 1100 0011 0010 */
- {illegal,nullptr }, /* 33: 0100 1100 0011 0011 */
- {illegal,nullptr }, /* 34: 0100 1100 0011 0100 */
- {illegal,nullptr }, /* 35: 0100 1100 0011 0101 */
- {illegal,nullptr }, /* 36: 0100 1100 0011 0110 */
- {illegal,nullptr }, /* 37: 0100 1100 0011 0111 */
- {illegal,nullptr }, /* 38: 0100 1100 0011 1000 */
- {illegal,nullptr }, /* 39: 0100 1100 0011 1001 */
- {illegal,nullptr }, /* 3a: 0100 1100 0011 1010 */
- {illegal,nullptr }, /* 3b: 0100 1100 0011 1011 */
- {illegal,nullptr }, /* 3c: 0100 1100 0011 1100 */
- {illegal,nullptr }, /* 3d: 0100 1100 0011 1101 */
- {illegal,nullptr }, /* 3e: 0100 1100 0011 1110 */
- {illegal,nullptr }, /* 3f: 0100 1100 0011 1111 */
+ { }, // 30: 0100 1100 0011 0000
+ { }, // 31: 0100 1100 0011 0001
+ { }, // 32: 0100 1100 0011 0010
+ { }, // 33: 0100 1100 0011 0011
+ { }, // 34: 0100 1100 0011 0100
+ { }, // 35: 0100 1100 0011 0101
+ { }, // 36: 0100 1100 0011 0110
+ { }, // 37: 0100 1100 0011 0111
+ { }, // 38: 0100 1100 0011 1000
+ { }, // 39: 0100 1100 0011 1001
+ { }, // 3a: 0100 1100 0011 1010
+ { }, // 3b: 0100 1100 0011 1011
+ { }, // 3c: 0100 1100 0011 1100
+ { }, // 3d: 0100 1100 0011 1101
+ { }, // 3e: 0100 1100 0011 1110
+ { }, // 3f: 0100 1100 0011 1111
- {illegal,nullptr }, /* 40: 0100 1100 0100 0000 */
- {illegal,nullptr }, /* 41: 0100 1100 0100 0001 */
- {illegal,nullptr }, /* 42: 0100 1100 0100 0010 */
- {illegal,nullptr }, /* 43: 0100 1100 0100 0011 */
- {illegal,nullptr }, /* 44: 0100 1100 0100 0100 */
- {illegal,nullptr }, /* 45: 0100 1100 0100 0101 */
- {illegal,nullptr }, /* 46: 0100 1100 0100 0110 */
- {illegal,nullptr }, /* 47: 0100 1100 0100 0111 */
- {illegal,nullptr }, /* 48: 0100 1100 0100 1000 */
- {illegal,nullptr }, /* 49: 0100 1100 0100 1001 */
- {illegal,nullptr }, /* 4a: 0100 1100 0100 1010 */
- {illegal,nullptr }, /* 4b: 0100 1100 0100 1011 */
- {illegal,nullptr }, /* 4c: 0100 1100 0100 1100 */
- {illegal,nullptr }, /* 4d: 0100 1100 0100 1101 */
- {illegal,nullptr }, /* 4e: 0100 1100 0100 1110 */
- {illegal,nullptr }, /* 4f: 0100 1100 0100 1111 */
+ { }, // 40: 0100 1100 0100 0000
+ { }, // 41: 0100 1100 0100 0001
+ { }, // 42: 0100 1100 0100 0010
+ { }, // 43: 0100 1100 0100 0011
+ { }, // 44: 0100 1100 0100 0100
+ { }, // 45: 0100 1100 0100 0101
+ { }, // 46: 0100 1100 0100 0110
+ { }, // 47: 0100 1100 0100 0111
+ { }, // 48: 0100 1100 0100 1000
+ { }, // 49: 0100 1100 0100 1001
+ { }, // 4a: 0100 1100 0100 1010
+ { }, // 4b: 0100 1100 0100 1011
+ { }, // 4c: 0100 1100 0100 1100
+ { }, // 4d: 0100 1100 0100 1101
+ { }, // 4e: 0100 1100 0100 1110
+ { }, // 4f: 0100 1100 0100 1111
- {illegal,nullptr }, /* 50: 0100 1100 0101 0000 */
- {illegal,nullptr }, /* 51: 0100 1100 0101 0001 */
- {illegal,nullptr }, /* 52: 0100 1100 0101 0010 */
- {illegal,nullptr }, /* 53: 0100 1100 0101 0011 */
- {illegal,nullptr }, /* 54: 0100 1100 0101 0100 */
- {illegal,nullptr }, /* 55: 0100 1100 0101 0101 */
- {illegal,nullptr }, /* 56: 0100 1100 0101 0110 */
- {illegal,nullptr }, /* 57: 0100 1100 0101 0111 */
- {illegal,nullptr }, /* 58: 0100 1100 0101 1000 */
- {illegal,nullptr }, /* 59: 0100 1100 0101 1001 */
- {illegal,nullptr }, /* 5a: 0100 1100 0101 1010 */
- {illegal,nullptr }, /* 5b: 0100 1100 0101 1011 */
- {illegal,nullptr }, /* 5c: 0100 1100 0101 1100 */
- {illegal,nullptr }, /* 5d: 0100 1100 0101 1101 */
- {illegal,nullptr }, /* 5e: 0100 1100 0101 1110 */
- {illegal,nullptr }, /* 5f: 0100 1100 0101 1111 */
+ { }, // 50: 0100 1100 0101 0000
+ { }, // 51: 0100 1100 0101 0001
+ { }, // 52: 0100 1100 0101 0010
+ { }, // 53: 0100 1100 0101 0011
+ { }, // 54: 0100 1100 0101 0100
+ { }, // 55: 0100 1100 0101 0101
+ { }, // 56: 0100 1100 0101 0110
+ { }, // 57: 0100 1100 0101 0111
+ { }, // 58: 0100 1100 0101 1000
+ { }, // 59: 0100 1100 0101 1001
+ { }, // 5a: 0100 1100 0101 1010
+ { }, // 5b: 0100 1100 0101 1011
+ { }, // 5c: 0100 1100 0101 1100
+ { }, // 5d: 0100 1100 0101 1101
+ { }, // 5e: 0100 1100 0101 1110
+ { }, // 5f: 0100 1100 0101 1111
- {illegal,nullptr }, /* 60: 0100 1100 0110 0000 */
- {illegal,nullptr }, /* 61: 0100 1100 0110 0001 */
- {illegal,nullptr }, /* 62: 0100 1100 0110 0010 */
- {illegal,nullptr }, /* 63: 0100 1100 0110 0011 */
- {illegal,nullptr }, /* 64: 0100 1100 0110 0100 */
- {illegal,nullptr }, /* 65: 0100 1100 0110 0101 */
- {illegal,nullptr }, /* 66: 0100 1100 0110 0110 */
- {illegal,nullptr }, /* 67: 0100 1100 0110 0111 */
- {illegal,nullptr }, /* 68: 0100 1100 0110 1000 */
- {illegal,nullptr }, /* 69: 0100 1100 0110 1001 */
- {illegal,nullptr }, /* 6a: 0100 1100 0110 1010 */
- {illegal,nullptr }, /* 6b: 0100 1100 0110 1011 */
- {illegal,nullptr }, /* 6c: 0100 1100 0110 1100 */
- {illegal,nullptr }, /* 6d: 0100 1100 0110 1101 */
- {illegal,nullptr }, /* 6e: 0100 1100 0110 1110 */
- {illegal,nullptr }, /* 6f: 0100 1100 0110 1111 */
+ { }, // 60: 0100 1100 0110 0000
+ { }, // 61: 0100 1100 0110 0001
+ { }, // 62: 0100 1100 0110 0010
+ { }, // 63: 0100 1100 0110 0011
+ { }, // 64: 0100 1100 0110 0100
+ { }, // 65: 0100 1100 0110 0101
+ { }, // 66: 0100 1100 0110 0110
+ { }, // 67: 0100 1100 0110 0111
+ { }, // 68: 0100 1100 0110 1000
+ { }, // 69: 0100 1100 0110 1001
+ { }, // 6a: 0100 1100 0110 1010
+ { }, // 6b: 0100 1100 0110 1011
+ { }, // 6c: 0100 1100 0110 1100
+ { }, // 6d: 0100 1100 0110 1101
+ { }, // 6e: 0100 1100 0110 1110
+ { }, // 6f: 0100 1100 0110 1111
- {illegal,nullptr }, /* 70: 0100 1100 0111 0000 */
- {illegal,nullptr }, /* 71: 0100 1100 0111 0001 */
- {illegal,nullptr }, /* 72: 0100 1100 0111 0010 */
- {illegal,nullptr }, /* 73: 0100 1100 0111 0011 */
- {illegal,nullptr }, /* 74: 0100 1100 0111 0100 */
- {illegal,nullptr }, /* 75: 0100 1100 0111 0101 */
- {illegal,nullptr }, /* 76: 0100 1100 0111 0110 */
- {illegal,nullptr }, /* 77: 0100 1100 0111 0111 */
- {illegal,nullptr }, /* 78: 0100 1100 0111 1000 */
- {illegal,nullptr }, /* 79: 0100 1100 0111 1001 */
- {illegal,nullptr }, /* 7a: 0100 1100 0111 1010 */
- {illegal,nullptr }, /* 7b: 0100 1100 0111 1011 */
- {illegal,nullptr }, /* 7c: 0100 1100 0111 1100 */
- {illegal,nullptr }, /* 7d: 0100 1100 0111 1101 */
- {illegal,nullptr }, /* 7e: 0100 1100 0111 1110 */
- {illegal,nullptr }, /* 7f: 0100 1100 0111 1111 */
+ { }, // 70: 0100 1100 0111 0000
+ { }, // 71: 0100 1100 0111 0001
+ { }, // 72: 0100 1100 0111 0010
+ { }, // 73: 0100 1100 0111 0011
+ { }, // 74: 0100 1100 0111 0100
+ { }, // 75: 0100 1100 0111 0101
+ { }, // 76: 0100 1100 0111 0110
+ { }, // 77: 0100 1100 0111 0111
+ { }, // 78: 0100 1100 0111 1000
+ { }, // 79: 0100 1100 0111 1001
+ { }, // 7a: 0100 1100 0111 1010
+ { }, // 7b: 0100 1100 0111 1011
+ { }, // 7c: 0100 1100 0111 1100
+ { }, // 7d: 0100 1100 0111 1101
+ { }, // 7e: 0100 1100 0111 1110
+ { }, // 7f: 0100 1100 0111 1111
- {illegal,nullptr }, /* 80: 0100 1100 1000 0000 */
- {illegal,nullptr }, /* 81: 0100 1100 1000 0001 */
- {illegal,nullptr }, /* 82: 0100 1100 1000 0010 */
- {illegal,nullptr }, /* 83: 0100 1100 1000 0011 */
- {illegal,nullptr }, /* 84: 0100 1100 1000 0100 */
- {illegal,nullptr }, /* 85: 0100 1100 1000 0101 */
- {illegal,nullptr }, /* 86: 0100 1100 1000 0110 */
- {illegal,nullptr }, /* 87: 0100 1100 1000 0111 */
- {illegal,nullptr }, /* 88: 0100 1100 1000 1000 */
- {illegal,nullptr }, /* 89: 0100 1100 1000 1001 */
- {illegal,nullptr }, /* 8a: 0100 1100 1000 1010 */
- {illegal,nullptr }, /* 8b: 0100 1100 1000 1011 */
- {illegal,nullptr }, /* 8c: 0100 1100 1000 1100 */
- {illegal,nullptr }, /* 8d: 0100 1100 1000 1101 */
- {illegal,nullptr }, /* 8e: 0100 1100 1000 1110 */
- {illegal,nullptr }, /* 8f: 0100 1100 1000 1111 */
+ { }, // 80: 0100 1100 1000 0000
+ { }, // 81: 0100 1100 1000 0001
+ { }, // 82: 0100 1100 1000 0010
+ { }, // 83: 0100 1100 1000 0011
+ { }, // 84: 0100 1100 1000 0100
+ { }, // 85: 0100 1100 1000 0101
+ { }, // 86: 0100 1100 1000 0110
+ { }, // 87: 0100 1100 1000 0111
+ { }, // 88: 0100 1100 1000 1000
+ { }, // 89: 0100 1100 1000 1001
+ { }, // 8a: 0100 1100 1000 1010
+ { }, // 8b: 0100 1100 1000 1011
+ { }, // 8c: 0100 1100 1000 1100
+ { }, // 8d: 0100 1100 1000 1101
+ { }, // 8e: 0100 1100 1000 1110
+ { }, // 8f: 0100 1100 1000 1111
- {illegal,nullptr }, /* 90: 0100 1100 1001 0000 */
- {illegal,nullptr }, /* 91: 0100 1100 1001 0001 */
- {illegal,nullptr }, /* 92: 0100 1100 1001 0010 */
- {illegal,nullptr }, /* 93: 0100 1100 1001 0011 */
- {illegal,nullptr }, /* 94: 0100 1100 1001 0100 */
- {illegal,nullptr }, /* 95: 0100 1100 1001 0101 */
- {illegal,nullptr }, /* 96: 0100 1100 1001 0110 */
- {illegal,nullptr }, /* 97: 0100 1100 1001 0111 */
- {illegal,nullptr }, /* 98: 0100 1100 1001 1000 */
- {illegal,nullptr }, /* 99: 0100 1100 1001 1001 */
- {illegal,nullptr }, /* 9a: 0100 1100 1001 1010 */
- {illegal,nullptr }, /* 9b: 0100 1100 1001 1011 */
- {illegal,nullptr }, /* 9c: 0100 1100 1001 1100 */
- {illegal,nullptr }, /* 9d: 0100 1100 1001 1101 */
- {illegal,nullptr }, /* 9e: 0100 1100 1001 1110 */
- {illegal,nullptr }, /* 9f: 0100 1100 1001 1111 */
+ { }, // 90: 0100 1100 1001 0000
+ { }, // 91: 0100 1100 1001 0001
+ { }, // 92: 0100 1100 1001 0010
+ { }, // 93: 0100 1100 1001 0011
+ { }, // 94: 0100 1100 1001 0100
+ { }, // 95: 0100 1100 1001 0101
+ { }, // 96: 0100 1100 1001 0110
+ { }, // 97: 0100 1100 1001 0111
+ { }, // 98: 0100 1100 1001 1000
+ { }, // 99: 0100 1100 1001 1001
+ { }, // 9a: 0100 1100 1001 1010
+ { }, // 9b: 0100 1100 1001 1011
+ { }, // 9c: 0100 1100 1001 1100
+ { }, // 9d: 0100 1100 1001 1101
+ { }, // 9e: 0100 1100 1001 1110
+ { }, // 9f: 0100 1100 1001 1111
- {illegal,nullptr }, /* a0: 0100 1100 1010 0000 */
- {illegal,nullptr }, /* a1: 0100 1100 1010 0001 */
- {illegal,nullptr }, /* a2: 0100 1100 1010 0010 */
- {illegal,nullptr }, /* a3: 0100 1100 1010 0011 */
- {illegal,nullptr }, /* a4: 0100 1100 1010 0100 */
- {illegal,nullptr }, /* a5: 0100 1100 1010 0101 */
- {illegal,nullptr }, /* a6: 0100 1100 1010 0110 */
- {illegal,nullptr }, /* a7: 0100 1100 1010 0111 */
- {illegal,nullptr }, /* a8: 0100 1100 1010 1000 */
- {illegal,nullptr }, /* a9: 0100 1100 1010 1001 */
- {illegal,nullptr }, /* aa: 0100 1100 1010 1010 */
- {illegal,nullptr }, /* ab: 0100 1100 1010 1011 */
- {illegal,nullptr }, /* ac: 0100 1100 1010 1100 */
- {illegal,nullptr }, /* ad: 0100 1100 1010 1101 */
- {illegal,nullptr }, /* ae: 0100 1100 1010 1110 */
- {illegal,nullptr }, /* af: 0100 1100 1010 1111 */
+ { }, // a0: 0100 1100 1010 0000
+ { }, // a1: 0100 1100 1010 0001
+ { }, // a2: 0100 1100 1010 0010
+ { }, // a3: 0100 1100 1010 0011
+ { }, // a4: 0100 1100 1010 0100
+ { }, // a5: 0100 1100 1010 0101
+ { }, // a6: 0100 1100 1010 0110
+ { }, // a7: 0100 1100 1010 0111
+ { }, // a8: 0100 1100 1010 1000
+ { }, // a9: 0100 1100 1010 1001
+ { }, // aa: 0100 1100 1010 1010
+ { }, // ab: 0100 1100 1010 1011
+ { }, // ac: 0100 1100 1010 1100
+ { }, // ad: 0100 1100 1010 1101
+ { }, // ae: 0100 1100 1010 1110
+ { }, // af: 0100 1100 1010 1111
- {illegal,nullptr }, /* b0: 0100 1100 1011 0000 */
- {illegal,nullptr }, /* b1: 0100 1100 1011 0001 */
- {illegal,nullptr }, /* b2: 0100 1100 1011 0010 */
- {illegal,nullptr }, /* b3: 0100 1100 1011 0011 */
- {illegal,nullptr }, /* b4: 0100 1100 1011 0100 */
- {illegal,nullptr }, /* b5: 0100 1100 1011 0101 */
- {illegal,nullptr }, /* b6: 0100 1100 1011 0110 */
- {illegal,nullptr }, /* b7: 0100 1100 1011 0111 */
- {illegal,nullptr }, /* b8: 0100 1100 1011 1000 */
- {illegal,nullptr }, /* b9: 0100 1100 1011 1001 */
- {illegal,nullptr }, /* ba: 0100 1100 1011 1010 */
- {illegal,nullptr }, /* bb: 0100 1100 1011 1011 */
- {illegal,nullptr }, /* bc: 0100 1100 1011 1100 */
- {illegal,nullptr }, /* bd: 0100 1100 1011 1101 */
- {illegal,nullptr }, /* be: 0100 1100 1011 1110 */
- {illegal,nullptr }, /* bf: 0100 1100 1011 1111 */
+ { }, // b0: 0100 1100 1011 0000
+ { }, // b1: 0100 1100 1011 0001
+ { }, // b2: 0100 1100 1011 0010
+ { }, // b3: 0100 1100 1011 0011
+ { }, // b4: 0100 1100 1011 0100
+ { }, // b5: 0100 1100 1011 0101
+ { }, // b6: 0100 1100 1011 0110
+ { }, // b7: 0100 1100 1011 0111
+ { }, // b8: 0100 1100 1011 1000
+ { }, // b9: 0100 1100 1011 1001
+ { }, // ba: 0100 1100 1011 1010
+ { }, // bb: 0100 1100 1011 1011
+ { }, // bc: 0100 1100 1011 1100
+ { }, // bd: 0100 1100 1011 1101
+ { }, // be: 0100 1100 1011 1110
+ { }, // bf: 0100 1100 1011 1111
- {MOV,"A,PA" }, /* c0: 0100 1100 1100 0000 */
- {MOV,"A,PB" }, /* c1: 0100 1100 1100 0001 */
- {MOV,"A,PC" }, /* c2: 0100 1100 1100 0010 */
- {MOV,"A,PD" }, /* c3: 0100 1100 1100 0011 */
- {illegal,nullptr }, /* c4: 0100 1100 1100 0100 */
- {MOV,"A,PF" }, /* c5: 0100 1100 1100 0101 */
- {MOV,"A,MKH" }, /* c6: 0100 1100 1100 0110 */
- {MOV,"A,MKL" }, /* c7: 0100 1100 1100 0111 */
- {illegal,nullptr }, /* c8: 0100 1100 1100 1000 */
- {MOV,"A,SMH" }, /* c9: 0100 1100 1100 1001 */
- {illegal,nullptr }, /* ca: 0100 1100 1100 1010 */
- {MOV,"A,EOM" }, /* cb: 0100 1100 1100 1011 */
- {illegal,nullptr }, /* cc: 0100 1100 1100 1100 */
- {MOV,"A,TMM" }, /* cd: 0100 1100 1100 1101 */
- {MOV,"A,PT" }, /* ce: 0100 1100 1100 1110 */ /* 7807 */
- {illegal,nullptr }, /* cf: 0100 1100 1100 1111 */
+ {MOV, "A,PA" }, // c0: 0100 1100 1100 0000
+ {MOV, "A,PB" }, // c1: 0100 1100 1100 0001
+ {MOV, "A,PC" }, // c2: 0100 1100 1100 0010
+ {MOV, "A,PD" }, // c3: 0100 1100 1100 0011
+ { }, // c4: 0100 1100 1100 0100
+ {MOV, "A,PF" }, // c5: 0100 1100 1100 0101
+ {MOV, "A,MKH" }, // c6: 0100 1100 1100 0110
+ {MOV, "A,MKL" }, // c7: 0100 1100 1100 0111
+ { }, // c8: 0100 1100 1100 1000
+ {MOV, "A,SMH" }, // c9: 0100 1100 1100 1001
+ { }, // ca: 0100 1100 1100 1010
+ {MOV, "A,EOM" }, // cb: 0100 1100 1100 1011
+ { }, // cc: 0100 1100 1100 1100
+ {MOV, "A,TMM" }, // cd: 0100 1100 1100 1101
+ {MOV, "A,PT" }, // ce: 0100 1100 1100 1110 7807
+ { }, // cf: 0100 1100 1100 1111
- {illegal,nullptr }, /* d0: 0100 1100 1101 0000 */
- {illegal,nullptr }, /* d1: 0100 1100 1101 0001 */
- {illegal,nullptr }, /* d2: 0100 1100 1101 0010 */
- {illegal,nullptr }, /* d3: 0100 1100 1101 0011 */
- {illegal,nullptr }, /* d4: 0100 1100 1101 0100 */
- {illegal,nullptr }, /* d5: 0100 1100 1101 0101 */
- {illegal,nullptr }, /* d6: 0100 1100 1101 0110 */
- {illegal,nullptr }, /* d7: 0100 1100 1101 0111 */
- {illegal,nullptr }, /* d8: 0100 1100 1101 1000 */
- {MOV,"A,RXB" }, /* d9: 0100 1100 1101 1001 */
- {illegal,nullptr }, /* da: 0100 1100 1101 1010 */
- {illegal,nullptr }, /* db: 0100 1100 1101 1011 */
- {illegal,nullptr }, /* dc: 0100 1100 1101 1100 */
- {illegal,nullptr }, /* dd: 0100 1100 1101 1101 */
- {illegal,nullptr }, /* de: 0100 1100 1101 1110 */
- {illegal,nullptr }, /* df: 0100 1100 1101 1111 */
+ { }, // d0: 0100 1100 1101 0000
+ { }, // d1: 0100 1100 1101 0001
+ { }, // d2: 0100 1100 1101 0010
+ { }, // d3: 0100 1100 1101 0011
+ { }, // d4: 0100 1100 1101 0100
+ { }, // d5: 0100 1100 1101 0101
+ { }, // d6: 0100 1100 1101 0110
+ { }, // d7: 0100 1100 1101 0111
+ { }, // d8: 0100 1100 1101 1000
+ {MOV, "A,RXB" }, // d9: 0100 1100 1101 1001
+ { }, // da: 0100 1100 1101 1010
+ { }, // db: 0100 1100 1101 1011
+ { }, // dc: 0100 1100 1101 1100
+ { }, // dd: 0100 1100 1101 1101
+ { }, // de: 0100 1100 1101 1110
+ { }, // df: 0100 1100 1101 1111
- {illegal,nullptr }, /* e0: 0100 1100 1110 0000 */
- {illegal,nullptr }, /* e1: 0100 1100 1110 0001 */
- {illegal,nullptr }, /* e2: 0100 1100 1110 0010 */
- {illegal,nullptr }, /* e3: 0100 1100 1110 0011 */
- {illegal,nullptr }, /* e4: 0100 1100 1110 0100 */
- {illegal,nullptr }, /* e5: 0100 1100 1110 0101 */
- {illegal,nullptr }, /* e6: 0100 1100 1110 0110 */
- {illegal,nullptr }, /* e7: 0100 1100 1110 0111 */
- {illegal,nullptr }, /* e8: 0100 1100 1110 1000 */
- {illegal,nullptr }, /* e9: 0100 1100 1110 1001 */
- {illegal,nullptr }, /* ea: 0100 1100 1110 1010 */
- {illegal,nullptr }, /* eb: 0100 1100 1110 1011 */
- {illegal,nullptr }, /* ec: 0100 1100 1110 1100 */
- {illegal,nullptr }, /* ed: 0100 1100 1110 1101 */
- {illegal,nullptr }, /* ee: 0100 1100 1110 1110 */
- {illegal,nullptr }, /* ef: 0100 1100 1110 1111 */
+ { }, // e0: 0100 1100 1110 0000
+ { }, // e1: 0100 1100 1110 0001
+ { }, // e2: 0100 1100 1110 0010
+ { }, // e3: 0100 1100 1110 0011
+ { }, // e4: 0100 1100 1110 0100
+ { }, // e5: 0100 1100 1110 0101
+ { }, // e6: 0100 1100 1110 0110
+ { }, // e7: 0100 1100 1110 0111
+ { }, // e8: 0100 1100 1110 1000
+ { }, // e9: 0100 1100 1110 1001
+ { }, // ea: 0100 1100 1110 1010
+ { }, // eb: 0100 1100 1110 1011
+ { }, // ec: 0100 1100 1110 1100
+ { }, // ed: 0100 1100 1110 1101
+ { }, // ee: 0100 1100 1110 1110
+ { }, // ef: 0100 1100 1110 1111
- {illegal,nullptr }, /* f0: 0100 1100 1111 0000 */
- {illegal,nullptr }, /* f1: 0100 1100 1111 0001 */
- {illegal,nullptr }, /* f2: 0100 1100 1111 0010 */
- {illegal,nullptr }, /* f3: 0100 1100 1111 0011 */
- {illegal,nullptr }, /* f4: 0100 1100 1111 0100 */
- {illegal,nullptr }, /* f5: 0100 1100 1111 0101 */
- {illegal,nullptr }, /* f6: 0100 1100 1111 0110 */
- {illegal,nullptr }, /* f7: 0100 1100 1111 0111 */
- {illegal,nullptr }, /* f8: 0100 1100 1111 1000 */
- {illegal,nullptr }, /* f9: 0100 1100 1111 1001 */
- {illegal,nullptr }, /* fa: 0100 1100 1111 1010 */
- {illegal,nullptr }, /* fb: 0100 1100 1111 1011 */
- {illegal,nullptr }, /* fc: 0100 1100 1111 1100 */
- {illegal,nullptr }, /* fd: 0100 1100 1111 1101 */
- {illegal,nullptr }, /* fe: 0100 1100 1111 1110 */
- {illegal,nullptr } /* ff: 0100 1100 1111 1111 */
+ { }, // f0: 0100 1100 1111 0000
+ { }, // f1: 0100 1100 1111 0001
+ { }, // f2: 0100 1100 1111 0010
+ { }, // f3: 0100 1100 1111 0011
+ { }, // f4: 0100 1100 1111 0100
+ { }, // f5: 0100 1100 1111 0101
+ { }, // f6: 0100 1100 1111 0110
+ { }, // f7: 0100 1100 1111 0111
+ { }, // f8: 0100 1100 1111 1000
+ { }, // f9: 0100 1100 1111 1001
+ { }, // fa: 0100 1100 1111 1010
+ { }, // fb: 0100 1100 1111 1011
+ { }, // fc: 0100 1100 1111 1100
+ { }, // fd: 0100 1100 1111 1101
+ { }, // fe: 0100 1100 1111 1110
+ { } // ff: 0100 1100 1111 1111
};
-/* prefix 4D */
-static const struct dasm_s dasm4D_7810[256] =
+// prefix 4D
+const dasm_s dasm_s::d4D_7810[256] =
{
- {illegal,nullptr }, /* 00: 0100 1101 0000 0000 */
- {illegal,nullptr }, /* 01: 0100 1101 0000 0001 */
- {illegal,nullptr }, /* 02: 0100 1101 0000 0010 */
- {illegal,nullptr }, /* 03: 0100 1101 0000 0011 */
- {illegal,nullptr }, /* 04: 0100 1101 0000 0100 */
- {illegal,nullptr }, /* 05: 0100 1101 0000 0101 */
- {illegal,nullptr }, /* 06: 0100 1101 0000 0110 */
- {illegal,nullptr }, /* 07: 0100 1101 0000 0111 */
- {illegal,nullptr }, /* 08: 0100 1101 0000 1000 */
- {illegal,nullptr }, /* 09: 0100 1101 0000 1001 */
- {illegal,nullptr }, /* 0a: 0100 1101 0000 1010 */
- {illegal,nullptr }, /* 0b: 0100 1101 0000 1011 */
- {illegal,nullptr }, /* 0c: 0100 1101 0000 1100 */
- {illegal,nullptr }, /* 0d: 0100 1101 0000 1101 */
- {illegal,nullptr }, /* 0e: 0100 1101 0000 1110 */
- {illegal,nullptr }, /* 0f: 0100 1101 0000 1111 */
+ { }, // 00: 0100 1101 0000 0000
+ { }, // 01: 0100 1101 0000 0001
+ { }, // 02: 0100 1101 0000 0010
+ { }, // 03: 0100 1101 0000 0011
+ { }, // 04: 0100 1101 0000 0100
+ { }, // 05: 0100 1101 0000 0101
+ { }, // 06: 0100 1101 0000 0110
+ { }, // 07: 0100 1101 0000 0111
+ { }, // 08: 0100 1101 0000 1000
+ { }, // 09: 0100 1101 0000 1001
+ { }, // 0a: 0100 1101 0000 1010
+ { }, // 0b: 0100 1101 0000 1011
+ { }, // 0c: 0100 1101 0000 1100
+ { }, // 0d: 0100 1101 0000 1101
+ { }, // 0e: 0100 1101 0000 1110
+ { }, // 0f: 0100 1101 0000 1111
- {illegal,nullptr }, /* 10: 0100 1101 0001 0000 */
- {illegal,nullptr }, /* 11: 0100 1101 0001 0001 */
- {illegal,nullptr }, /* 12: 0100 1101 0001 0010 */
- {illegal,nullptr }, /* 13: 0100 1101 0001 0011 */
- {illegal,nullptr }, /* 14: 0100 1101 0001 0100 */
- {illegal,nullptr }, /* 15: 0100 1101 0001 0101 */
- {illegal,nullptr }, /* 16: 0100 1101 0001 0110 */
- {illegal,nullptr }, /* 17: 0100 1101 0001 0111 */
- {illegal,nullptr }, /* 18: 0100 1101 0001 1000 */
- {illegal,nullptr }, /* 19: 0100 1101 0001 1001 */
- {illegal,nullptr }, /* 1a: 0100 1101 0001 1010 */
- {illegal,nullptr }, /* 1b: 0100 1101 0001 1011 */
- {illegal,nullptr }, /* 1c: 0100 1101 0001 1100 */
- {illegal,nullptr }, /* 1d: 0100 1101 0001 1101 */
- {illegal,nullptr }, /* 1e: 0100 1101 0001 1110 */
- {illegal,nullptr }, /* 1f: 0100 1101 0001 1111 */
+ { }, // 10: 0100 1101 0001 0000
+ { }, // 11: 0100 1101 0001 0001
+ { }, // 12: 0100 1101 0001 0010
+ { }, // 13: 0100 1101 0001 0011
+ { }, // 14: 0100 1101 0001 0100
+ { }, // 15: 0100 1101 0001 0101
+ { }, // 16: 0100 1101 0001 0110
+ { }, // 17: 0100 1101 0001 0111
+ { }, // 18: 0100 1101 0001 1000
+ { }, // 19: 0100 1101 0001 1001
+ { }, // 1a: 0100 1101 0001 1010
+ { }, // 1b: 0100 1101 0001 1011
+ { }, // 1c: 0100 1101 0001 1100
+ { }, // 1d: 0100 1101 0001 1101
+ { }, // 1e: 0100 1101 0001 1110
+ { }, // 1f: 0100 1101 0001 1111
- {illegal,nullptr }, /* 20: 0100 1101 0010 0000 */
- {illegal,nullptr }, /* 21: 0100 1101 0010 0001 */
- {illegal,nullptr }, /* 22: 0100 1101 0010 0010 */
- {illegal,nullptr }, /* 23: 0100 1101 0010 0011 */
- {illegal,nullptr }, /* 24: 0100 1101 0010 0100 */
- {illegal,nullptr }, /* 25: 0100 1101 0010 0101 */
- {illegal,nullptr }, /* 26: 0100 1101 0010 0110 */
- {illegal,nullptr }, /* 27: 0100 1101 0010 0111 */
- {illegal,nullptr }, /* 28: 0100 1101 0010 1000 */
- {illegal,nullptr }, /* 29: 0100 1101 0010 1001 */
- {illegal,nullptr }, /* 2a: 0100 1101 0010 1010 */
- {illegal,nullptr }, /* 2b: 0100 1101 0010 1011 */
- {illegal,nullptr }, /* 2c: 0100 1101 0010 1100 */
- {illegal,nullptr }, /* 2d: 0100 1101 0010 1101 */
- {illegal,nullptr }, /* 2e: 0100 1101 0010 1110 */
- {illegal,nullptr }, /* 2f: 0100 1101 0010 1111 */
+ { }, // 20: 0100 1101 0010 0000
+ { }, // 21: 0100 1101 0010 0001
+ { }, // 22: 0100 1101 0010 0010
+ { }, // 23: 0100 1101 0010 0011
+ { }, // 24: 0100 1101 0010 0100
+ { }, // 25: 0100 1101 0010 0101
+ { }, // 26: 0100 1101 0010 0110
+ { }, // 27: 0100 1101 0010 0111
+ { }, // 28: 0100 1101 0010 1000
+ { }, // 29: 0100 1101 0010 1001
+ { }, // 2a: 0100 1101 0010 1010
+ { }, // 2b: 0100 1101 0010 1011
+ { }, // 2c: 0100 1101 0010 1100
+ { }, // 2d: 0100 1101 0010 1101
+ { }, // 2e: 0100 1101 0010 1110
+ { }, // 2f: 0100 1101 0010 1111
- {illegal,nullptr }, /* 30: 0100 1101 0011 0000 */
- {illegal,nullptr }, /* 31: 0100 1101 0011 0001 */
- {illegal,nullptr }, /* 32: 0100 1101 0011 0010 */
- {illegal,nullptr }, /* 33: 0100 1101 0011 0011 */
- {illegal,nullptr }, /* 34: 0100 1101 0011 0100 */
- {illegal,nullptr }, /* 35: 0100 1101 0011 0101 */
- {illegal,nullptr }, /* 36: 0100 1101 0011 0110 */
- {illegal,nullptr }, /* 37: 0100 1101 0011 0111 */
- {illegal,nullptr }, /* 38: 0100 1101 0011 1000 */
- {illegal,nullptr }, /* 39: 0100 1101 0011 1001 */
- {illegal,nullptr }, /* 3a: 0100 1101 0011 1010 */
- {illegal,nullptr }, /* 3b: 0100 1101 0011 1011 */
- {illegal,nullptr }, /* 3c: 0100 1101 0011 1100 */
- {illegal,nullptr }, /* 3d: 0100 1101 0011 1101 */
- {illegal,nullptr }, /* 3e: 0100 1101 0011 1110 */
- {illegal,nullptr }, /* 3f: 0100 1101 0011 1111 */
+ { }, // 30: 0100 1101 0011 0000
+ { }, // 31: 0100 1101 0011 0001
+ { }, // 32: 0100 1101 0011 0010
+ { }, // 33: 0100 1101 0011 0011
+ { }, // 34: 0100 1101 0011 0100
+ { }, // 35: 0100 1101 0011 0101
+ { }, // 36: 0100 1101 0011 0110
+ { }, // 37: 0100 1101 0011 0111
+ { }, // 38: 0100 1101 0011 1000
+ { }, // 39: 0100 1101 0011 1001
+ { }, // 3a: 0100 1101 0011 1010
+ { }, // 3b: 0100 1101 0011 1011
+ { }, // 3c: 0100 1101 0011 1100
+ { }, // 3d: 0100 1101 0011 1101
+ { }, // 3e: 0100 1101 0011 1110
+ { }, // 3f: 0100 1101 0011 1111
- {illegal,nullptr }, /* 40: 0100 1101 0100 0000 */
- {illegal,nullptr }, /* 41: 0100 1101 0100 0001 */
- {illegal,nullptr }, /* 42: 0100 1101 0100 0010 */
- {illegal,nullptr }, /* 43: 0100 1101 0100 0011 */
- {illegal,nullptr }, /* 44: 0100 1101 0100 0100 */
- {illegal,nullptr }, /* 45: 0100 1101 0100 0101 */
- {illegal,nullptr }, /* 46: 0100 1101 0100 0110 */
- {illegal,nullptr }, /* 47: 0100 1101 0100 0111 */
- {illegal,nullptr }, /* 48: 0100 1101 0100 1000 */
- {illegal,nullptr }, /* 49: 0100 1101 0100 1001 */
- {illegal,nullptr }, /* 4a: 0100 1101 0100 1010 */
- {illegal,nullptr }, /* 4b: 0100 1101 0100 1011 */
- {illegal,nullptr }, /* 4c: 0100 1101 0100 1100 */
- {illegal,nullptr }, /* 4d: 0100 1101 0100 1101 */
- {illegal,nullptr }, /* 4e: 0100 1101 0100 1110 */
- {illegal,nullptr }, /* 4f: 0100 1101 0100 1111 */
+ { }, // 40: 0100 1101 0100 0000
+ { }, // 41: 0100 1101 0100 0001
+ { }, // 42: 0100 1101 0100 0010
+ { }, // 43: 0100 1101 0100 0011
+ { }, // 44: 0100 1101 0100 0100
+ { }, // 45: 0100 1101 0100 0101
+ { }, // 46: 0100 1101 0100 0110
+ { }, // 47: 0100 1101 0100 0111
+ { }, // 48: 0100 1101 0100 1000
+ { }, // 49: 0100 1101 0100 1001
+ { }, // 4a: 0100 1101 0100 1010
+ { }, // 4b: 0100 1101 0100 1011
+ { }, // 4c: 0100 1101 0100 1100
+ { }, // 4d: 0100 1101 0100 1101
+ { }, // 4e: 0100 1101 0100 1110
+ { }, // 4f: 0100 1101 0100 1111
- {illegal,nullptr }, /* 50: 0100 1101 0101 0000 */
- {illegal,nullptr }, /* 51: 0100 1101 0101 0001 */
- {illegal,nullptr }, /* 52: 0100 1101 0101 0010 */
- {illegal,nullptr }, /* 53: 0100 1101 0101 0011 */
- {illegal,nullptr }, /* 54: 0100 1101 0101 0100 */
- {illegal,nullptr }, /* 55: 0100 1101 0101 0101 */
- {illegal,nullptr }, /* 56: 0100 1101 0101 0110 */
- {illegal,nullptr }, /* 57: 0100 1101 0101 0111 */
- {illegal,nullptr }, /* 58: 0100 1101 0101 1000 */
- {illegal,nullptr }, /* 59: 0100 1101 0101 1001 */
- {illegal,nullptr }, /* 5a: 0100 1101 0101 1010 */
- {illegal,nullptr }, /* 5b: 0100 1101 0101 1011 */
- {illegal,nullptr }, /* 5c: 0100 1101 0101 1100 */
- {illegal,nullptr }, /* 5d: 0100 1101 0101 1101 */
- {illegal,nullptr }, /* 5e: 0100 1101 0101 1110 */
- {illegal,nullptr }, /* 5f: 0100 1101 0101 1111 */
+ { }, // 50: 0100 1101 0101 0000
+ { }, // 51: 0100 1101 0101 0001
+ { }, // 52: 0100 1101 0101 0010
+ { }, // 53: 0100 1101 0101 0011
+ { }, // 54: 0100 1101 0101 0100
+ { }, // 55: 0100 1101 0101 0101
+ { }, // 56: 0100 1101 0101 0110
+ { }, // 57: 0100 1101 0101 0111
+ { }, // 58: 0100 1101 0101 1000
+ { }, // 59: 0100 1101 0101 1001
+ { }, // 5a: 0100 1101 0101 1010
+ { }, // 5b: 0100 1101 0101 1011
+ { }, // 5c: 0100 1101 0101 1100
+ { }, // 5d: 0100 1101 0101 1101
+ { }, // 5e: 0100 1101 0101 1110
+ { }, // 5f: 0100 1101 0101 1111
- {illegal,nullptr }, /* 60: 0100 1101 0110 0000 */
- {illegal,nullptr }, /* 61: 0100 1101 0110 0001 */
- {illegal,nullptr }, /* 62: 0100 1101 0110 0010 */
- {illegal,nullptr }, /* 63: 0100 1101 0110 0011 */
- {illegal,nullptr }, /* 64: 0100 1101 0110 0100 */
- {illegal,nullptr }, /* 65: 0100 1101 0110 0101 */
- {illegal,nullptr }, /* 66: 0100 1101 0110 0110 */
- {illegal,nullptr }, /* 67: 0100 1101 0110 0111 */
- {illegal,nullptr }, /* 68: 0100 1101 0110 1000 */
- {illegal,nullptr }, /* 69: 0100 1101 0110 1001 */
- {illegal,nullptr }, /* 6a: 0100 1101 0110 1010 */
- {illegal,nullptr }, /* 6b: 0100 1101 0110 1011 */
- {illegal,nullptr }, /* 6c: 0100 1101 0110 1100 */
- {illegal,nullptr }, /* 6d: 0100 1101 0110 1101 */
- {illegal,nullptr }, /* 6e: 0100 1101 0110 1110 */
- {illegal,nullptr }, /* 6f: 0100 1101 0110 1111 */
+ { }, // 60: 0100 1101 0110 0000
+ { }, // 61: 0100 1101 0110 0001
+ { }, // 62: 0100 1101 0110 0010
+ { }, // 63: 0100 1101 0110 0011
+ { }, // 64: 0100 1101 0110 0100
+ { }, // 65: 0100 1101 0110 0101
+ { }, // 66: 0100 1101 0110 0110
+ { }, // 67: 0100 1101 0110 0111
+ { }, // 68: 0100 1101 0110 1000
+ { }, // 69: 0100 1101 0110 1001
+ { }, // 6a: 0100 1101 0110 1010
+ { }, // 6b: 0100 1101 0110 1011
+ { }, // 6c: 0100 1101 0110 1100
+ { }, // 6d: 0100 1101 0110 1101
+ { }, // 6e: 0100 1101 0110 1110
+ { }, // 6f: 0100 1101 0110 1111
- {illegal,nullptr }, /* 70: 0100 1101 0111 0000 */
- {illegal,nullptr }, /* 71: 0100 1101 0111 0001 */
- {illegal,nullptr }, /* 72: 0100 1101 0111 0010 */
- {illegal,nullptr }, /* 73: 0100 1101 0111 0011 */
- {illegal,nullptr }, /* 74: 0100 1101 0111 0100 */
- {illegal,nullptr }, /* 75: 0100 1101 0111 0101 */
- {illegal,nullptr }, /* 76: 0100 1101 0111 0110 */
- {illegal,nullptr }, /* 77: 0100 1101 0111 0111 */
- {illegal,nullptr }, /* 78: 0100 1101 0111 1000 */
- {illegal,nullptr }, /* 79: 0100 1101 0111 1001 */
- {illegal,nullptr }, /* 7a: 0100 1101 0111 1010 */
- {illegal,nullptr }, /* 7b: 0100 1101 0111 1011 */
- {illegal,nullptr }, /* 7c: 0100 1101 0111 1100 */
- {illegal,nullptr }, /* 7d: 0100 1101 0111 1101 */
- {illegal,nullptr }, /* 7e: 0100 1101 0111 1110 */
- {illegal,nullptr }, /* 7f: 0100 1101 0111 1111 */
+ { }, // 70: 0100 1101 0111 0000
+ { }, // 71: 0100 1101 0111 0001
+ { }, // 72: 0100 1101 0111 0010
+ { }, // 73: 0100 1101 0111 0011
+ { }, // 74: 0100 1101 0111 0100
+ { }, // 75: 0100 1101 0111 0101
+ { }, // 76: 0100 1101 0111 0110
+ { }, // 77: 0100 1101 0111 0111
+ { }, // 78: 0100 1101 0111 1000
+ { }, // 79: 0100 1101 0111 1001
+ { }, // 7a: 0100 1101 0111 1010
+ { }, // 7b: 0100 1101 0111 1011
+ { }, // 7c: 0100 1101 0111 1100
+ { }, // 7d: 0100 1101 0111 1101
+ { }, // 7e: 0100 1101 0111 1110
+ { }, // 7f: 0100 1101 0111 1111
- {illegal,nullptr }, /* 80: 0100 1101 1000 0000 */
- {illegal,nullptr }, /* 81: 0100 1101 1000 0001 */
- {illegal,nullptr }, /* 82: 0100 1101 1000 0010 */
- {illegal,nullptr }, /* 83: 0100 1101 1000 0011 */
- {illegal,nullptr }, /* 84: 0100 1101 1000 0100 */
- {illegal,nullptr }, /* 85: 0100 1101 1000 0101 */
- {illegal,nullptr }, /* 86: 0100 1101 1000 0110 */
- {illegal,nullptr }, /* 87: 0100 1101 1000 0111 */
- {illegal,nullptr }, /* 88: 0100 1101 1000 1000 */
- {illegal,nullptr }, /* 89: 0100 1101 1000 1001 */
- {illegal,nullptr }, /* 8a: 0100 1101 1000 1010 */
- {illegal,nullptr }, /* 8b: 0100 1101 1000 1011 */
- {illegal,nullptr }, /* 8c: 0100 1101 1000 1100 */
- {illegal,nullptr }, /* 8d: 0100 1101 1000 1101 */
- {illegal,nullptr }, /* 8e: 0100 1101 1000 1110 */
- {illegal,nullptr }, /* 8f: 0100 1101 1000 1111 */
+ { }, // 80: 0100 1101 1000 0000
+ { }, // 81: 0100 1101 1000 0001
+ { }, // 82: 0100 1101 1000 0010
+ { }, // 83: 0100 1101 1000 0011
+ { }, // 84: 0100 1101 1000 0100
+ { }, // 85: 0100 1101 1000 0101
+ { }, // 86: 0100 1101 1000 0110
+ { }, // 87: 0100 1101 1000 0111
+ { }, // 88: 0100 1101 1000 1000
+ { }, // 89: 0100 1101 1000 1001
+ { }, // 8a: 0100 1101 1000 1010
+ { }, // 8b: 0100 1101 1000 1011
+ { }, // 8c: 0100 1101 1000 1100
+ { }, // 8d: 0100 1101 1000 1101
+ { }, // 8e: 0100 1101 1000 1110
+ { }, // 8f: 0100 1101 1000 1111
- {illegal,nullptr }, /* 90: 0100 1101 1001 0000 */
- {illegal,nullptr }, /* 91: 0100 1101 1001 0001 */
- {illegal,nullptr }, /* 92: 0100 1101 1001 0010 */
- {illegal,nullptr }, /* 93: 0100 1101 1001 0011 */
- {illegal,nullptr }, /* 94: 0100 1101 1001 0100 */
- {illegal,nullptr }, /* 95: 0100 1101 1001 0101 */
- {illegal,nullptr }, /* 96: 0100 1101 1001 0110 */
- {illegal,nullptr }, /* 97: 0100 1101 1001 0111 */
- {illegal,nullptr }, /* 98: 0100 1101 1001 1000 */
- {illegal,nullptr }, /* 99: 0100 1101 1001 1001 */
- {illegal,nullptr }, /* 9a: 0100 1101 1001 1010 */
- {illegal,nullptr }, /* 9b: 0100 1101 1001 1011 */
- {illegal,nullptr }, /* 9c: 0100 1101 1001 1100 */
- {illegal,nullptr }, /* 9d: 0100 1101 1001 1101 */
- {illegal,nullptr }, /* 9e: 0100 1101 1001 1110 */
- {illegal,nullptr }, /* 9f: 0100 1101 1001 1111 */
+ { }, // 90: 0100 1101 1001 0000
+ { }, // 91: 0100 1101 1001 0001
+ { }, // 92: 0100 1101 1001 0010
+ { }, // 93: 0100 1101 1001 0011
+ { }, // 94: 0100 1101 1001 0100
+ { }, // 95: 0100 1101 1001 0101
+ { }, // 96: 0100 1101 1001 0110
+ { }, // 97: 0100 1101 1001 0111
+ { }, // 98: 0100 1101 1001 1000
+ { }, // 99: 0100 1101 1001 1001
+ { }, // 9a: 0100 1101 1001 1010
+ { }, // 9b: 0100 1101 1001 1011
+ { }, // 9c: 0100 1101 1001 1100
+ { }, // 9d: 0100 1101 1001 1101
+ { }, // 9e: 0100 1101 1001 1110
+ { }, // 9f: 0100 1101 1001 1111
- {illegal,nullptr }, /* a0: 0100 1101 1010 0000 */
- {illegal,nullptr }, /* a1: 0100 1101 1010 0001 */
- {illegal,nullptr }, /* a2: 0100 1101 1010 0010 */
- {illegal,nullptr }, /* a3: 0100 1101 1010 0011 */
- {illegal,nullptr }, /* a4: 0100 1101 1010 0100 */
- {illegal,nullptr }, /* a5: 0100 1101 1010 0101 */
- {illegal,nullptr }, /* a6: 0100 1101 1010 0110 */
- {illegal,nullptr }, /* a7: 0100 1101 1010 0111 */
- {illegal,nullptr }, /* a8: 0100 1101 1010 1000 */
- {illegal,nullptr }, /* a9: 0100 1101 1010 1001 */
- {illegal,nullptr }, /* aa: 0100 1101 1010 1010 */
- {illegal,nullptr }, /* ab: 0100 1101 1010 1011 */
- {illegal,nullptr }, /* ac: 0100 1101 1010 1100 */
- {illegal,nullptr }, /* ad: 0100 1101 1010 1101 */
- {illegal,nullptr }, /* ae: 0100 1101 1010 1110 */
- {illegal,nullptr }, /* af: 0100 1101 1010 1111 */
+ { }, // a0: 0100 1101 1010 0000
+ { }, // a1: 0100 1101 1010 0001
+ { }, // a2: 0100 1101 1010 0010
+ { }, // a3: 0100 1101 1010 0011
+ { }, // a4: 0100 1101 1010 0100
+ { }, // a5: 0100 1101 1010 0101
+ { }, // a6: 0100 1101 1010 0110
+ { }, // a7: 0100 1101 1010 0111
+ { }, // a8: 0100 1101 1010 1000
+ { }, // a9: 0100 1101 1010 1001
+ { }, // aa: 0100 1101 1010 1010
+ { }, // ab: 0100 1101 1010 1011
+ { }, // ac: 0100 1101 1010 1100
+ { }, // ad: 0100 1101 1010 1101
+ { }, // ae: 0100 1101 1010 1110
+ { }, // af: 0100 1101 1010 1111
- {illegal,nullptr }, /* b0: 0100 1101 1011 0000 */
- {illegal,nullptr }, /* b1: 0100 1101 1011 0001 */
- {illegal,nullptr }, /* b2: 0100 1101 1011 0010 */
- {illegal,nullptr }, /* b3: 0100 1101 1011 0011 */
- {illegal,nullptr }, /* b4: 0100 1101 1011 0100 */
- {illegal,nullptr }, /* b5: 0100 1101 1011 0101 */
- {illegal,nullptr }, /* b6: 0100 1101 1011 0110 */
- {illegal,nullptr }, /* b7: 0100 1101 1011 0111 */
- {illegal,nullptr }, /* b8: 0100 1101 1011 1000 */
- {illegal,nullptr }, /* b9: 0100 1101 1011 1001 */
- {illegal,nullptr }, /* ba: 0100 1101 1011 1010 */
- {illegal,nullptr }, /* bb: 0100 1101 1011 1011 */
- {illegal,nullptr }, /* bc: 0100 1101 1011 1100 */
- {illegal,nullptr }, /* bd: 0100 1101 1011 1101 */
- {illegal,nullptr }, /* be: 0100 1101 1011 1110 */
- {illegal,nullptr }, /* bf: 0100 1101 1011 1111 */
+ { }, // b0: 0100 1101 1011 0000
+ { }, // b1: 0100 1101 1011 0001
+ { }, // b2: 0100 1101 1011 0010
+ { }, // b3: 0100 1101 1011 0011
+ { }, // b4: 0100 1101 1011 0100
+ { }, // b5: 0100 1101 1011 0101
+ { }, // b6: 0100 1101 1011 0110
+ { }, // b7: 0100 1101 1011 0111
+ { }, // b8: 0100 1101 1011 1000
+ { }, // b9: 0100 1101 1011 1001
+ { }, // ba: 0100 1101 1011 1010
+ { }, // bb: 0100 1101 1011 1011
+ { }, // bc: 0100 1101 1011 1100
+ { }, // bd: 0100 1101 1011 1101
+ { }, // be: 0100 1101 1011 1110
+ { }, // bf: 0100 1101 1011 1111
- {MOV,"PA,A" }, /* c0: 0100 1101 1100 0000 */
- {MOV,"PB,A" }, /* c1: 0100 1101 1100 0001 */
- {MOV,"PC,A" }, /* c2: 0100 1101 1100 0010 */
- {MOV,"PD,A" }, /* c3: 0100 1101 1100 0011 */
- {illegal,nullptr }, /* c4: 0100 1101 1100 0100 */
- {MOV,"PF,A" }, /* c5: 0100 1101 1100 0101 */
- {MOV,"MKH,A" }, /* c6: 0100 1101 1100 0110 */
- {MOV,"MKL,A" }, /* c7: 0100 1101 1100 0111 */
- {MOV,"ANM,A" }, /* c8: 0100 1101 1100 1000 */ /* 7810 */
- {MOV,"SMH,A" }, /* c9: 0100 1101 1100 1001 */
- {MOV,"SML,A" }, /* ca: 0100 1101 1100 1010 */
- {MOV,"EOM,A" }, /* cb: 0100 1101 1100 1011 */
- {MOV,"ETMM,A" }, /* cc: 0100 1101 1100 1100 */
- {MOV,"TMM,A" }, /* cd: 0100 1101 1100 1101 */
- {illegal,nullptr }, /* ce: 0100 1101 1100 1110 */
- {illegal,nullptr }, /* cf: 0100 1101 1100 1111 */
+ {MOV, "PA,A" }, // c0: 0100 1101 1100 0000
+ {MOV, "PB,A" }, // c1: 0100 1101 1100 0001
+ {MOV, "PC,A" }, // c2: 0100 1101 1100 0010
+ {MOV, "PD,A" }, // c3: 0100 1101 1100 0011
+ { }, // c4: 0100 1101 1100 0100
+ {MOV, "PF,A" }, // c5: 0100 1101 1100 0101
+ {MOV, "MKH,A" }, // c6: 0100 1101 1100 0110
+ {MOV, "MKL,A" }, // c7: 0100 1101 1100 0111
+ {MOV, "ANM,A" }, // c8: 0100 1101 1100 1000 7810
+ {MOV, "SMH,A" }, // c9: 0100 1101 1100 1001
+ {MOV, "SML,A" }, // ca: 0100 1101 1100 1010
+ {MOV, "EOM,A" }, // cb: 0100 1101 1100 1011
+ {MOV, "ETMM,A" }, // cc: 0100 1101 1100 1100
+ {MOV, "TMM,A" }, // cd: 0100 1101 1100 1101
+ { }, // ce: 0100 1101 1100 1110
+ { }, // cf: 0100 1101 1100 1111
- {MOV,"MM,A" }, /* d0: 0100 1101 1101 0000 */
- {MOV,"MCC,A" }, /* d1: 0100 1101 1101 0001 */
- {MOV,"MA,A" }, /* d2: 0100 1101 1101 0010 */
- {MOV,"MB,A" }, /* d3: 0100 1101 1101 0011 */
- {MOV,"MC,A" }, /* d4: 0100 1101 1101 0100 */
- {illegal,nullptr }, /* d5: 0100 1101 1101 0101 */
- {illegal,nullptr }, /* d6: 0100 1101 1101 0110 */
- {MOV,"MF,A" }, /* d7: 0100 1101 1101 0111 */
- {MOV,"TXB,A" }, /* d8: 0100 1101 1101 1000 */
- {illegal,nullptr }, /* d9: 0100 1101 1101 1001 */
- {MOV,"TM0,A" }, /* da: 0100 1101 1101 1010 */
- {MOV,"TM1,A" }, /* db: 0100 1101 1101 1011 */
- {illegal,nullptr }, /* dc: 0100 1101 1101 1100 */
- {illegal,nullptr }, /* dd: 0100 1101 1101 1101 */
- {illegal,nullptr }, /* de: 0100 1101 1101 1110 */
- {illegal,nullptr }, /* df: 0100 1101 1101 1111 */
+ {MOV, "MM,A" }, // d0: 0100 1101 1101 0000
+ {MOV, "MCC,A" }, // d1: 0100 1101 1101 0001
+ {MOV, "MA,A" }, // d2: 0100 1101 1101 0010
+ {MOV, "MB,A" }, // d3: 0100 1101 1101 0011
+ {MOV, "MC,A" }, // d4: 0100 1101 1101 0100
+ { }, // d5: 0100 1101 1101 0101
+ { }, // d6: 0100 1101 1101 0110
+ {MOV, "MF,A" }, // d7: 0100 1101 1101 0111
+ {MOV, "TXB,A" }, // d8: 0100 1101 1101 1000
+ { }, // d9: 0100 1101 1101 1001
+ {MOV, "TM0,A" }, // da: 0100 1101 1101 1010
+ {MOV, "TM1,A" }, // db: 0100 1101 1101 1011
+ { }, // dc: 0100 1101 1101 1100
+ { }, // dd: 0100 1101 1101 1101
+ { }, // de: 0100 1101 1101 1110
+ { }, // df: 0100 1101 1101 1111
- {illegal,nullptr }, /* e0: 0100 1101 1110 0000 */
- {illegal,nullptr }, /* e1: 0100 1101 1110 0001 */
- {illegal,nullptr }, /* e2: 0100 1101 1110 0010 */
- {illegal,nullptr }, /* e3: 0100 1101 1110 0011 */
- {illegal,nullptr }, /* e4: 0100 1101 1110 0100 */
- {illegal,nullptr }, /* e5: 0100 1101 1110 0101 */
- {illegal,nullptr }, /* e6: 0100 1101 1110 0110 */
- {illegal,nullptr }, /* e7: 0100 1101 1110 0111 */
- {MOV,"ZCM,A" }, /* e8: 0100 1101 1110 1000 */ /* 7810 */
- {illegal,nullptr }, /* e9: 0100 1101 1110 1001 */
- {illegal,nullptr }, /* ea: 0100 1101 1110 1010 */
- {illegal,nullptr }, /* eb: 0100 1101 1110 1011 */
- {illegal,nullptr }, /* ec: 0100 1101 1110 1100 */
- {illegal,nullptr }, /* ed: 0100 1101 1110 1101 */
- {illegal,nullptr }, /* ee: 0100 1101 1110 1110 */
- {illegal,nullptr }, /* ef: 0100 1101 1110 1111 */
+ { }, // e0: 0100 1101 1110 0000
+ { }, // e1: 0100 1101 1110 0001
+ { }, // e2: 0100 1101 1110 0010
+ { }, // e3: 0100 1101 1110 0011
+ { }, // e4: 0100 1101 1110 0100
+ { }, // e5: 0100 1101 1110 0101
+ { }, // e6: 0100 1101 1110 0110
+ { }, // e7: 0100 1101 1110 0111
+ {MOV, "ZCM,A" }, // e8: 0100 1101 1110 1000 7810
+ { }, // e9: 0100 1101 1110 1001
+ { }, // ea: 0100 1101 1110 1010
+ { }, // eb: 0100 1101 1110 1011
+ { }, // ec: 0100 1101 1110 1100
+ { }, // ed: 0100 1101 1110 1101
+ { }, // ee: 0100 1101 1110 1110
+ { }, // ef: 0100 1101 1110 1111
- {illegal,nullptr }, /* f0: 0100 1101 1111 0000 */
- {illegal,nullptr }, /* f1: 0100 1101 1111 0001 */
- {illegal,nullptr }, /* f2: 0100 1101 1111 0010 */
- {illegal,nullptr }, /* f3: 0100 1101 1111 0011 */
- {illegal,nullptr }, /* f4: 0100 1101 1111 0100 */
- {illegal,nullptr }, /* f5: 0100 1101 1111 0101 */
- {illegal,nullptr }, /* f6: 0100 1101 1111 0110 */
- {illegal,nullptr }, /* f7: 0100 1101 1111 0111 */
- {illegal,nullptr }, /* f8: 0100 1101 1111 1000 */
- {illegal,nullptr }, /* f9: 0100 1101 1111 1001 */
- {illegal,nullptr }, /* fa: 0100 1101 1111 1010 */
- {illegal,nullptr }, /* fb: 0100 1101 1111 1011 */
- {illegal,nullptr }, /* fc: 0100 1101 1111 1100 */
- {illegal,nullptr }, /* fd: 0100 1101 1111 1101 */
- {illegal,nullptr }, /* fe: 0100 1101 1111 1110 */
- {illegal,nullptr } /* ff: 0100 1101 1111 1111 */
+ { }, // f0: 0100 1101 1111 0000
+ { }, // f1: 0100 1101 1111 0001
+ { }, // f2: 0100 1101 1111 0010
+ { }, // f3: 0100 1101 1111 0011
+ { }, // f4: 0100 1101 1111 0100
+ { }, // f5: 0100 1101 1111 0101
+ { }, // f6: 0100 1101 1111 0110
+ { }, // f7: 0100 1101 1111 0111
+ { }, // f8: 0100 1101 1111 1000
+ { }, // f9: 0100 1101 1111 1001
+ { }, // fa: 0100 1101 1111 1010
+ { }, // fb: 0100 1101 1111 1011
+ { }, // fc: 0100 1101 1111 1100
+ { }, // fd: 0100 1101 1111 1101
+ { }, // fe: 0100 1101 1111 1110
+ { } // ff: 0100 1101 1111 1111
};
-static const struct dasm_s dasm4D_7807[256] =
+const dasm_s dasm_s::d4D_7807[256] =
{
- {illegal,nullptr }, /* 00: 0100 1101 0000 0000 */
- {illegal,nullptr }, /* 01: 0100 1101 0000 0001 */
- {illegal,nullptr }, /* 02: 0100 1101 0000 0010 */
- {illegal,nullptr }, /* 03: 0100 1101 0000 0011 */
- {illegal,nullptr }, /* 04: 0100 1101 0000 0100 */
- {illegal,nullptr }, /* 05: 0100 1101 0000 0101 */
- {illegal,nullptr }, /* 06: 0100 1101 0000 0110 */
- {illegal,nullptr }, /* 07: 0100 1101 0000 0111 */
- {illegal,nullptr }, /* 08: 0100 1101 0000 1000 */
- {illegal,nullptr }, /* 09: 0100 1101 0000 1001 */
- {illegal,nullptr }, /* 0a: 0100 1101 0000 1010 */
- {illegal,nullptr }, /* 0b: 0100 1101 0000 1011 */
- {illegal,nullptr }, /* 0c: 0100 1101 0000 1100 */
- {illegal,nullptr }, /* 0d: 0100 1101 0000 1101 */
- {illegal,nullptr }, /* 0e: 0100 1101 0000 1110 */
- {illegal,nullptr }, /* 0f: 0100 1101 0000 1111 */
+ { }, // 00: 0100 1101 0000 0000
+ { }, // 01: 0100 1101 0000 0001
+ { }, // 02: 0100 1101 0000 0010
+ { }, // 03: 0100 1101 0000 0011
+ { }, // 04: 0100 1101 0000 0100
+ { }, // 05: 0100 1101 0000 0101
+ { }, // 06: 0100 1101 0000 0110
+ { }, // 07: 0100 1101 0000 0111
+ { }, // 08: 0100 1101 0000 1000
+ { }, // 09: 0100 1101 0000 1001
+ { }, // 0a: 0100 1101 0000 1010
+ { }, // 0b: 0100 1101 0000 1011
+ { }, // 0c: 0100 1101 0000 1100
+ { }, // 0d: 0100 1101 0000 1101
+ { }, // 0e: 0100 1101 0000 1110
+ { }, // 0f: 0100 1101 0000 1111
- {illegal,nullptr }, /* 10: 0100 1101 0001 0000 */
- {illegal,nullptr }, /* 11: 0100 1101 0001 0001 */
- {illegal,nullptr }, /* 12: 0100 1101 0001 0010 */
- {illegal,nullptr }, /* 13: 0100 1101 0001 0011 */
- {illegal,nullptr }, /* 14: 0100 1101 0001 0100 */
- {illegal,nullptr }, /* 15: 0100 1101 0001 0101 */
- {illegal,nullptr }, /* 16: 0100 1101 0001 0110 */
- {illegal,nullptr }, /* 17: 0100 1101 0001 0111 */
- {illegal,nullptr }, /* 18: 0100 1101 0001 1000 */
- {illegal,nullptr }, /* 19: 0100 1101 0001 1001 */
- {illegal,nullptr }, /* 1a: 0100 1101 0001 1010 */
- {illegal,nullptr }, /* 1b: 0100 1101 0001 1011 */
- {illegal,nullptr }, /* 1c: 0100 1101 0001 1100 */
- {illegal,nullptr }, /* 1d: 0100 1101 0001 1101 */
- {illegal,nullptr }, /* 1e: 0100 1101 0001 1110 */
- {illegal,nullptr }, /* 1f: 0100 1101 0001 1111 */
+ { }, // 10: 0100 1101 0001 0000
+ { }, // 11: 0100 1101 0001 0001
+ { }, // 12: 0100 1101 0001 0010
+ { }, // 13: 0100 1101 0001 0011
+ { }, // 14: 0100 1101 0001 0100
+ { }, // 15: 0100 1101 0001 0101
+ { }, // 16: 0100 1101 0001 0110
+ { }, // 17: 0100 1101 0001 0111
+ { }, // 18: 0100 1101 0001 1000
+ { }, // 19: 0100 1101 0001 1001
+ { }, // 1a: 0100 1101 0001 1010
+ { }, // 1b: 0100 1101 0001 1011
+ { }, // 1c: 0100 1101 0001 1100
+ { }, // 1d: 0100 1101 0001 1101
+ { }, // 1e: 0100 1101 0001 1110
+ { }, // 1f: 0100 1101 0001 1111
- {illegal,nullptr }, /* 20: 0100 1101 0010 0000 */
- {illegal,nullptr }, /* 21: 0100 1101 0010 0001 */
- {illegal,nullptr }, /* 22: 0100 1101 0010 0010 */
- {illegal,nullptr }, /* 23: 0100 1101 0010 0011 */
- {illegal,nullptr }, /* 24: 0100 1101 0010 0100 */
- {illegal,nullptr }, /* 25: 0100 1101 0010 0101 */
- {illegal,nullptr }, /* 26: 0100 1101 0010 0110 */
- {illegal,nullptr }, /* 27: 0100 1101 0010 0111 */
- {illegal,nullptr }, /* 28: 0100 1101 0010 1000 */
- {illegal,nullptr }, /* 29: 0100 1101 0010 1001 */
- {illegal,nullptr }, /* 2a: 0100 1101 0010 1010 */
- {illegal,nullptr }, /* 2b: 0100 1101 0010 1011 */
- {illegal,nullptr }, /* 2c: 0100 1101 0010 1100 */
- {illegal,nullptr }, /* 2d: 0100 1101 0010 1101 */
- {illegal,nullptr }, /* 2e: 0100 1101 0010 1110 */
- {illegal,nullptr }, /* 2f: 0100 1101 0010 1111 */
+ { }, // 20: 0100 1101 0010 0000
+ { }, // 21: 0100 1101 0010 0001
+ { }, // 22: 0100 1101 0010 0010
+ { }, // 23: 0100 1101 0010 0011
+ { }, // 24: 0100 1101 0010 0100
+ { }, // 25: 0100 1101 0010 0101
+ { }, // 26: 0100 1101 0010 0110
+ { }, // 27: 0100 1101 0010 0111
+ { }, // 28: 0100 1101 0010 1000
+ { }, // 29: 0100 1101 0010 1001
+ { }, // 2a: 0100 1101 0010 1010
+ { }, // 2b: 0100 1101 0010 1011
+ { }, // 2c: 0100 1101 0010 1100
+ { }, // 2d: 0100 1101 0010 1101
+ { }, // 2e: 0100 1101 0010 1110
+ { }, // 2f: 0100 1101 0010 1111
- {illegal,nullptr }, /* 30: 0100 1101 0011 0000 */
- {illegal,nullptr }, /* 31: 0100 1101 0011 0001 */
- {illegal,nullptr }, /* 32: 0100 1101 0011 0010 */
- {illegal,nullptr }, /* 33: 0100 1101 0011 0011 */
- {illegal,nullptr }, /* 34: 0100 1101 0011 0100 */
- {illegal,nullptr }, /* 35: 0100 1101 0011 0101 */
- {illegal,nullptr }, /* 36: 0100 1101 0011 0110 */
- {illegal,nullptr }, /* 37: 0100 1101 0011 0111 */
- {illegal,nullptr }, /* 38: 0100 1101 0011 1000 */
- {illegal,nullptr }, /* 39: 0100 1101 0011 1001 */
- {illegal,nullptr }, /* 3a: 0100 1101 0011 1010 */
- {illegal,nullptr }, /* 3b: 0100 1101 0011 1011 */
- {illegal,nullptr }, /* 3c: 0100 1101 0011 1100 */
- {illegal,nullptr }, /* 3d: 0100 1101 0011 1101 */
- {illegal,nullptr }, /* 3e: 0100 1101 0011 1110 */
- {illegal,nullptr }, /* 3f: 0100 1101 0011 1111 */
+ { }, // 30: 0100 1101 0011 0000
+ { }, // 31: 0100 1101 0011 0001
+ { }, // 32: 0100 1101 0011 0010
+ { }, // 33: 0100 1101 0011 0011
+ { }, // 34: 0100 1101 0011 0100
+ { }, // 35: 0100 1101 0011 0101
+ { }, // 36: 0100 1101 0011 0110
+ { }, // 37: 0100 1101 0011 0111
+ { }, // 38: 0100 1101 0011 1000
+ { }, // 39: 0100 1101 0011 1001
+ { }, // 3a: 0100 1101 0011 1010
+ { }, // 3b: 0100 1101 0011 1011
+ { }, // 3c: 0100 1101 0011 1100
+ { }, // 3d: 0100 1101 0011 1101
+ { }, // 3e: 0100 1101 0011 1110
+ { }, // 3f: 0100 1101 0011 1111
- {illegal,nullptr }, /* 40: 0100 1101 0100 0000 */
- {illegal,nullptr }, /* 41: 0100 1101 0100 0001 */
- {illegal,nullptr }, /* 42: 0100 1101 0100 0010 */
- {illegal,nullptr }, /* 43: 0100 1101 0100 0011 */
- {illegal,nullptr }, /* 44: 0100 1101 0100 0100 */
- {illegal,nullptr }, /* 45: 0100 1101 0100 0101 */
- {illegal,nullptr }, /* 46: 0100 1101 0100 0110 */
- {illegal,nullptr }, /* 47: 0100 1101 0100 0111 */
- {illegal,nullptr }, /* 48: 0100 1101 0100 1000 */
- {illegal,nullptr }, /* 49: 0100 1101 0100 1001 */
- {illegal,nullptr }, /* 4a: 0100 1101 0100 1010 */
- {illegal,nullptr }, /* 4b: 0100 1101 0100 1011 */
- {illegal,nullptr }, /* 4c: 0100 1101 0100 1100 */
- {illegal,nullptr }, /* 4d: 0100 1101 0100 1101 */
- {illegal,nullptr }, /* 4e: 0100 1101 0100 1110 */
- {illegal,nullptr }, /* 4f: 0100 1101 0100 1111 */
+ { }, // 40: 0100 1101 0100 0000
+ { }, // 41: 0100 1101 0100 0001
+ { }, // 42: 0100 1101 0100 0010
+ { }, // 43: 0100 1101 0100 0011
+ { }, // 44: 0100 1101 0100 0100
+ { }, // 45: 0100 1101 0100 0101
+ { }, // 46: 0100 1101 0100 0110
+ { }, // 47: 0100 1101 0100 0111
+ { }, // 48: 0100 1101 0100 1000
+ { }, // 49: 0100 1101 0100 1001
+ { }, // 4a: 0100 1101 0100 1010
+ { }, // 4b: 0100 1101 0100 1011
+ { }, // 4c: 0100 1101 0100 1100
+ { }, // 4d: 0100 1101 0100 1101
+ { }, // 4e: 0100 1101 0100 1110
+ { }, // 4f: 0100 1101 0100 1111
- {illegal,nullptr }, /* 50: 0100 1101 0101 0000 */
- {illegal,nullptr }, /* 51: 0100 1101 0101 0001 */
- {illegal,nullptr }, /* 52: 0100 1101 0101 0010 */
- {illegal,nullptr }, /* 53: 0100 1101 0101 0011 */
- {illegal,nullptr }, /* 54: 0100 1101 0101 0100 */
- {illegal,nullptr }, /* 55: 0100 1101 0101 0101 */
- {illegal,nullptr }, /* 56: 0100 1101 0101 0110 */
- {illegal,nullptr }, /* 57: 0100 1101 0101 0111 */
- {illegal,nullptr }, /* 58: 0100 1101 0101 1000 */
- {illegal,nullptr }, /* 59: 0100 1101 0101 1001 */
- {illegal,nullptr }, /* 5a: 0100 1101 0101 1010 */
- {illegal,nullptr }, /* 5b: 0100 1101 0101 1011 */
- {illegal,nullptr }, /* 5c: 0100 1101 0101 1100 */
- {illegal,nullptr }, /* 5d: 0100 1101 0101 1101 */
- {illegal,nullptr }, /* 5e: 0100 1101 0101 1110 */
- {illegal,nullptr }, /* 5f: 0100 1101 0101 1111 */
+ { }, // 50: 0100 1101 0101 0000
+ { }, // 51: 0100 1101 0101 0001
+ { }, // 52: 0100 1101 0101 0010
+ { }, // 53: 0100 1101 0101 0011
+ { }, // 54: 0100 1101 0101 0100
+ { }, // 55: 0100 1101 0101 0101
+ { }, // 56: 0100 1101 0101 0110
+ { }, // 57: 0100 1101 0101 0111
+ { }, // 58: 0100 1101 0101 1000
+ { }, // 59: 0100 1101 0101 1001
+ { }, // 5a: 0100 1101 0101 1010
+ { }, // 5b: 0100 1101 0101 1011
+ { }, // 5c: 0100 1101 0101 1100
+ { }, // 5d: 0100 1101 0101 1101
+ { }, // 5e: 0100 1101 0101 1110
+ { }, // 5f: 0100 1101 0101 1111
- {illegal,nullptr }, /* 60: 0100 1101 0110 0000 */
- {illegal,nullptr }, /* 61: 0100 1101 0110 0001 */
- {illegal,nullptr }, /* 62: 0100 1101 0110 0010 */
- {illegal,nullptr }, /* 63: 0100 1101 0110 0011 */
- {illegal,nullptr }, /* 64: 0100 1101 0110 0100 */
- {illegal,nullptr }, /* 65: 0100 1101 0110 0101 */
- {illegal,nullptr }, /* 66: 0100 1101 0110 0110 */
- {illegal,nullptr }, /* 67: 0100 1101 0110 0111 */
- {illegal,nullptr }, /* 68: 0100 1101 0110 1000 */
- {illegal,nullptr }, /* 69: 0100 1101 0110 1001 */
- {illegal,nullptr }, /* 6a: 0100 1101 0110 1010 */
- {illegal,nullptr }, /* 6b: 0100 1101 0110 1011 */
- {illegal,nullptr }, /* 6c: 0100 1101 0110 1100 */
- {illegal,nullptr }, /* 6d: 0100 1101 0110 1101 */
- {illegal,nullptr }, /* 6e: 0100 1101 0110 1110 */
- {illegal,nullptr }, /* 6f: 0100 1101 0110 1111 */
+ { }, // 60: 0100 1101 0110 0000
+ { }, // 61: 0100 1101 0110 0001
+ { }, // 62: 0100 1101 0110 0010
+ { }, // 63: 0100 1101 0110 0011
+ { }, // 64: 0100 1101 0110 0100
+ { }, // 65: 0100 1101 0110 0101
+ { }, // 66: 0100 1101 0110 0110
+ { }, // 67: 0100 1101 0110 0111
+ { }, // 68: 0100 1101 0110 1000
+ { }, // 69: 0100 1101 0110 1001
+ { }, // 6a: 0100 1101 0110 1010
+ { }, // 6b: 0100 1101 0110 1011
+ { }, // 6c: 0100 1101 0110 1100
+ { }, // 6d: 0100 1101 0110 1101
+ { }, // 6e: 0100 1101 0110 1110
+ { }, // 6f: 0100 1101 0110 1111
- {illegal,nullptr }, /* 70: 0100 1101 0111 0000 */
- {illegal,nullptr }, /* 71: 0100 1101 0111 0001 */
- {illegal,nullptr }, /* 72: 0100 1101 0111 0010 */
- {illegal,nullptr }, /* 73: 0100 1101 0111 0011 */
- {illegal,nullptr }, /* 74: 0100 1101 0111 0100 */
- {illegal,nullptr }, /* 75: 0100 1101 0111 0101 */
- {illegal,nullptr }, /* 76: 0100 1101 0111 0110 */
- {illegal,nullptr }, /* 77: 0100 1101 0111 0111 */
- {illegal,nullptr }, /* 78: 0100 1101 0111 1000 */
- {illegal,nullptr }, /* 79: 0100 1101 0111 1001 */
- {illegal,nullptr }, /* 7a: 0100 1101 0111 1010 */
- {illegal,nullptr }, /* 7b: 0100 1101 0111 1011 */
- {illegal,nullptr }, /* 7c: 0100 1101 0111 1100 */
- {illegal,nullptr }, /* 7d: 0100 1101 0111 1101 */
- {illegal,nullptr }, /* 7e: 0100 1101 0111 1110 */
- {illegal,nullptr }, /* 7f: 0100 1101 0111 1111 */
+ { }, // 70: 0100 1101 0111 0000
+ { }, // 71: 0100 1101 0111 0001
+ { }, // 72: 0100 1101 0111 0010
+ { }, // 73: 0100 1101 0111 0011
+ { }, // 74: 0100 1101 0111 0100
+ { }, // 75: 0100 1101 0111 0101
+ { }, // 76: 0100 1101 0111 0110
+ { }, // 77: 0100 1101 0111 0111
+ { }, // 78: 0100 1101 0111 1000
+ { }, // 79: 0100 1101 0111 1001
+ { }, // 7a: 0100 1101 0111 1010
+ { }, // 7b: 0100 1101 0111 1011
+ { }, // 7c: 0100 1101 0111 1100
+ { }, // 7d: 0100 1101 0111 1101
+ { }, // 7e: 0100 1101 0111 1110
+ { }, // 7f: 0100 1101 0111 1111
- {illegal,nullptr }, /* 80: 0100 1101 1000 0000 */
- {illegal,nullptr }, /* 81: 0100 1101 1000 0001 */
- {illegal,nullptr }, /* 82: 0100 1101 1000 0010 */
- {illegal,nullptr }, /* 83: 0100 1101 1000 0011 */
- {illegal,nullptr }, /* 84: 0100 1101 1000 0100 */
- {illegal,nullptr }, /* 85: 0100 1101 1000 0101 */
- {illegal,nullptr }, /* 86: 0100 1101 1000 0110 */
- {illegal,nullptr }, /* 87: 0100 1101 1000 0111 */
- {illegal,nullptr }, /* 88: 0100 1101 1000 1000 */
- {illegal,nullptr }, /* 89: 0100 1101 1000 1001 */
- {illegal,nullptr }, /* 8a: 0100 1101 1000 1010 */
- {illegal,nullptr }, /* 8b: 0100 1101 1000 1011 */
- {illegal,nullptr }, /* 8c: 0100 1101 1000 1100 */
- {illegal,nullptr }, /* 8d: 0100 1101 1000 1101 */
- {illegal,nullptr }, /* 8e: 0100 1101 1000 1110 */
- {illegal,nullptr }, /* 8f: 0100 1101 1000 1111 */
+ { }, // 80: 0100 1101 1000 0000
+ { }, // 81: 0100 1101 1000 0001
+ { }, // 82: 0100 1101 1000 0010
+ { }, // 83: 0100 1101 1000 0011
+ { }, // 84: 0100 1101 1000 0100
+ { }, // 85: 0100 1101 1000 0101
+ { }, // 86: 0100 1101 1000 0110
+ { }, // 87: 0100 1101 1000 0111
+ { }, // 88: 0100 1101 1000 1000
+ { }, // 89: 0100 1101 1000 1001
+ { }, // 8a: 0100 1101 1000 1010
+ { }, // 8b: 0100 1101 1000 1011
+ { }, // 8c: 0100 1101 1000 1100
+ { }, // 8d: 0100 1101 1000 1101
+ { }, // 8e: 0100 1101 1000 1110
+ { }, // 8f: 0100 1101 1000 1111
- {illegal,nullptr }, /* 90: 0100 1101 1001 0000 */
- {illegal,nullptr }, /* 91: 0100 1101 1001 0001 */
- {illegal,nullptr }, /* 92: 0100 1101 1001 0010 */
- {illegal,nullptr }, /* 93: 0100 1101 1001 0011 */
- {illegal,nullptr }, /* 94: 0100 1101 1001 0100 */
- {illegal,nullptr }, /* 95: 0100 1101 1001 0101 */
- {illegal,nullptr }, /* 96: 0100 1101 1001 0110 */
- {illegal,nullptr }, /* 97: 0100 1101 1001 0111 */
- {illegal,nullptr }, /* 98: 0100 1101 1001 1000 */
- {illegal,nullptr }, /* 99: 0100 1101 1001 1001 */
- {illegal,nullptr }, /* 9a: 0100 1101 1001 1010 */
- {illegal,nullptr }, /* 9b: 0100 1101 1001 1011 */
- {illegal,nullptr }, /* 9c: 0100 1101 1001 1100 */
- {illegal,nullptr }, /* 9d: 0100 1101 1001 1101 */
- {illegal,nullptr }, /* 9e: 0100 1101 1001 1110 */
- {illegal,nullptr }, /* 9f: 0100 1101 1001 1111 */
+ { }, // 90: 0100 1101 1001 0000
+ { }, // 91: 0100 1101 1001 0001
+ { }, // 92: 0100 1101 1001 0010
+ { }, // 93: 0100 1101 1001 0011
+ { }, // 94: 0100 1101 1001 0100
+ { }, // 95: 0100 1101 1001 0101
+ { }, // 96: 0100 1101 1001 0110
+ { }, // 97: 0100 1101 1001 0111
+ { }, // 98: 0100 1101 1001 1000
+ { }, // 99: 0100 1101 1001 1001
+ { }, // 9a: 0100 1101 1001 1010
+ { }, // 9b: 0100 1101 1001 1011
+ { }, // 9c: 0100 1101 1001 1100
+ { }, // 9d: 0100 1101 1001 1101
+ { }, // 9e: 0100 1101 1001 1110
+ { }, // 9f: 0100 1101 1001 1111
- {illegal,nullptr }, /* a0: 0100 1101 1010 0000 */
- {illegal,nullptr }, /* a1: 0100 1101 1010 0001 */
- {illegal,nullptr }, /* a2: 0100 1101 1010 0010 */
- {illegal,nullptr }, /* a3: 0100 1101 1010 0011 */
- {illegal,nullptr }, /* a4: 0100 1101 1010 0100 */
- {illegal,nullptr }, /* a5: 0100 1101 1010 0101 */
- {illegal,nullptr }, /* a6: 0100 1101 1010 0110 */
- {illegal,nullptr }, /* a7: 0100 1101 1010 0111 */
- {illegal,nullptr }, /* a8: 0100 1101 1010 1000 */
- {illegal,nullptr }, /* a9: 0100 1101 1010 1001 */
- {illegal,nullptr }, /* aa: 0100 1101 1010 1010 */
- {illegal,nullptr }, /* ab: 0100 1101 1010 1011 */
- {illegal,nullptr }, /* ac: 0100 1101 1010 1100 */
- {illegal,nullptr }, /* ad: 0100 1101 1010 1101 */
- {illegal,nullptr }, /* ae: 0100 1101 1010 1110 */
- {illegal,nullptr }, /* af: 0100 1101 1010 1111 */
+ { }, // a0: 0100 1101 1010 0000
+ { }, // a1: 0100 1101 1010 0001
+ { }, // a2: 0100 1101 1010 0010
+ { }, // a3: 0100 1101 1010 0011
+ { }, // a4: 0100 1101 1010 0100
+ { }, // a5: 0100 1101 1010 0101
+ { }, // a6: 0100 1101 1010 0110
+ { }, // a7: 0100 1101 1010 0111
+ { }, // a8: 0100 1101 1010 1000
+ { }, // a9: 0100 1101 1010 1001
+ { }, // aa: 0100 1101 1010 1010
+ { }, // ab: 0100 1101 1010 1011
+ { }, // ac: 0100 1101 1010 1100
+ { }, // ad: 0100 1101 1010 1101
+ { }, // ae: 0100 1101 1010 1110
+ { }, // af: 0100 1101 1010 1111
- {illegal,nullptr }, /* b0: 0100 1101 1011 0000 */
- {illegal,nullptr }, /* b1: 0100 1101 1011 0001 */
- {illegal,nullptr }, /* b2: 0100 1101 1011 0010 */
- {illegal,nullptr }, /* b3: 0100 1101 1011 0011 */
- {illegal,nullptr }, /* b4: 0100 1101 1011 0100 */
- {illegal,nullptr }, /* b5: 0100 1101 1011 0101 */
- {illegal,nullptr }, /* b6: 0100 1101 1011 0110 */
- {illegal,nullptr }, /* b7: 0100 1101 1011 0111 */
- {illegal,nullptr }, /* b8: 0100 1101 1011 1000 */
- {illegal,nullptr }, /* b9: 0100 1101 1011 1001 */
- {illegal,nullptr }, /* ba: 0100 1101 1011 1010 */
- {illegal,nullptr }, /* bb: 0100 1101 1011 1011 */
- {illegal,nullptr }, /* bc: 0100 1101 1011 1100 */
- {illegal,nullptr }, /* bd: 0100 1101 1011 1101 */
- {illegal,nullptr }, /* be: 0100 1101 1011 1110 */
- {illegal,nullptr }, /* bf: 0100 1101 1011 1111 */
+ { }, // b0: 0100 1101 1011 0000
+ { }, // b1: 0100 1101 1011 0001
+ { }, // b2: 0100 1101 1011 0010
+ { }, // b3: 0100 1101 1011 0011
+ { }, // b4: 0100 1101 1011 0100
+ { }, // b5: 0100 1101 1011 0101
+ { }, // b6: 0100 1101 1011 0110
+ { }, // b7: 0100 1101 1011 0111
+ { }, // b8: 0100 1101 1011 1000
+ { }, // b9: 0100 1101 1011 1001
+ { }, // ba: 0100 1101 1011 1010
+ { }, // bb: 0100 1101 1011 1011
+ { }, // bc: 0100 1101 1011 1100
+ { }, // bd: 0100 1101 1011 1101
+ { }, // be: 0100 1101 1011 1110
+ { }, // bf: 0100 1101 1011 1111
- {MOV,"PA,A" }, /* c0: 0100 1101 1100 0000 */
- {MOV,"PB,A" }, /* c1: 0100 1101 1100 0001 */
- {MOV,"PC,A" }, /* c2: 0100 1101 1100 0010 */
- {MOV,"PD,A" }, /* c3: 0100 1101 1100 0011 */
- {illegal,nullptr }, /* c4: 0100 1101 1100 0100 */
- {MOV,"PF,A" }, /* c5: 0100 1101 1100 0101 */
- {MOV,"MKH,A" }, /* c6: 0100 1101 1100 0110 */
- {MOV,"MKL,A" }, /* c7: 0100 1101 1100 0111 */
- {illegal,nullptr }, /* c8: 0100 1101 1100 1000 */
- {MOV,"SMH,A" }, /* c9: 0100 1101 1100 1001 */
- {MOV,"SML,A" }, /* ca: 0100 1101 1100 1010 */
- {MOV,"EOM,A" }, /* cb: 0100 1101 1100 1011 */
- {MOV,"ETMM,A" }, /* cc: 0100 1101 1100 1100 */
- {MOV,"TMM,A" }, /* cd: 0100 1101 1100 1101 */
- {illegal,nullptr }, /* ce: 0100 1101 1100 1110 */
- {illegal,nullptr }, /* cf: 0100 1101 1100 1111 */
+ {MOV, "PA,A" }, // c0: 0100 1101 1100 0000
+ {MOV, "PB,A" }, // c1: 0100 1101 1100 0001
+ {MOV, "PC,A" }, // c2: 0100 1101 1100 0010
+ {MOV, "PD,A" }, // c3: 0100 1101 1100 0011
+ { }, // c4: 0100 1101 1100 0100
+ {MOV, "PF,A" }, // c5: 0100 1101 1100 0101
+ {MOV, "MKH,A" }, // c6: 0100 1101 1100 0110
+ {MOV, "MKL,A" }, // c7: 0100 1101 1100 0111
+ { }, // c8: 0100 1101 1100 1000
+ {MOV, "SMH,A" }, // c9: 0100 1101 1100 1001
+ {MOV, "SML,A" }, // ca: 0100 1101 1100 1010
+ {MOV, "EOM,A" }, // cb: 0100 1101 1100 1011
+ {MOV, "ETMM,A" }, // cc: 0100 1101 1100 1100
+ {MOV, "TMM,A" }, // cd: 0100 1101 1100 1101
+ { }, // ce: 0100 1101 1100 1110
+ { }, // cf: 0100 1101 1100 1111
- {MOV,"MM,A" }, /* d0: 0100 1101 1101 0000 */
- {MOV,"MCC,A" }, /* d1: 0100 1101 1101 0001 */
- {MOV,"MA,A" }, /* d2: 0100 1101 1101 0010 */
- {MOV,"MB,A" }, /* d3: 0100 1101 1101 0011 */
- {MOV,"MC,A" }, /* d4: 0100 1101 1101 0100 */
- {illegal,nullptr }, /* d5: 0100 1101 1101 0101 */
- {illegal,nullptr }, /* d6: 0100 1101 1101 0110 */
- {MOV,"MF,A" }, /* d7: 0100 1101 1101 0111 */
- {MOV,"TXB,A" }, /* d8: 0100 1101 1101 1000 */
- {illegal,nullptr }, /* d9: 0100 1101 1101 1001 */
- {MOV,"TM0,A" }, /* da: 0100 1101 1101 1010 */
- {MOV,"TM1,A" }, /* db: 0100 1101 1101 1011 */
- {illegal,nullptr }, /* dc: 0100 1101 1101 1100 */
- {illegal,nullptr }, /* dd: 0100 1101 1101 1101 */
- {illegal,nullptr }, /* de: 0100 1101 1101 1110 */
- {illegal,nullptr }, /* df: 0100 1101 1101 1111 */
+ {MOV, "MM,A" }, // d0: 0100 1101 1101 0000
+ {MOV, "MCC,A" }, // d1: 0100 1101 1101 0001
+ {MOV, "MA,A" }, // d2: 0100 1101 1101 0010
+ {MOV, "MB,A" }, // d3: 0100 1101 1101 0011
+ {MOV, "MC,A" }, // d4: 0100 1101 1101 0100
+ { }, // d5: 0100 1101 1101 0101
+ { }, // d6: 0100 1101 1101 0110
+ {MOV, "MF,A" }, // d7: 0100 1101 1101 0111
+ {MOV, "TXB,A" }, // d8: 0100 1101 1101 1000
+ { }, // d9: 0100 1101 1101 1001
+ {MOV, "TM0,A" }, // da: 0100 1101 1101 1010
+ {MOV, "TM1,A" }, // db: 0100 1101 1101 1011
+ { }, // dc: 0100 1101 1101 1100
+ { }, // dd: 0100 1101 1101 1101
+ { }, // de: 0100 1101 1101 1110
+ { }, // df: 0100 1101 1101 1111
- {illegal,nullptr }, /* e0: 0100 1101 1110 0000 */
- {illegal,nullptr }, /* e1: 0100 1101 1110 0001 */
- {illegal,nullptr }, /* e2: 0100 1101 1110 0010 */
- {illegal,nullptr }, /* e3: 0100 1101 1110 0011 */
- {illegal,nullptr }, /* e4: 0100 1101 1110 0100 */
- {MOV,"MT,A" }, /* e5: 0100 1101 1110 0101 */ /* 7807 */
- {illegal,nullptr }, /* e6: 0100 1101 1110 0110 */
- {illegal,nullptr }, /* e7: 0100 1101 1110 0111 */
- {illegal,nullptr }, /* e8: 0100 1101 1110 1000 */
- {illegal,nullptr }, /* e9: 0100 1101 1110 1001 */
- {illegal,nullptr }, /* ea: 0100 1101 1110 1010 */
- {illegal,nullptr }, /* eb: 0100 1101 1110 1011 */
- {illegal,nullptr }, /* ec: 0100 1101 1110 1100 */
- {illegal,nullptr }, /* ed: 0100 1101 1110 1101 */
- {illegal,nullptr }, /* ee: 0100 1101 1110 1110 */
- {illegal,nullptr }, /* ef: 0100 1101 1110 1111 */
+ { }, // e0: 0100 1101 1110 0000
+ { }, // e1: 0100 1101 1110 0001
+ { }, // e2: 0100 1101 1110 0010
+ { }, // e3: 0100 1101 1110 0011
+ { }, // e4: 0100 1101 1110 0100
+ {MOV, "MT,A" }, // e5: 0100 1101 1110 0101 7807
+ { }, // e6: 0100 1101 1110 0110
+ { }, // e7: 0100 1101 1110 0111
+ { }, // e8: 0100 1101 1110 1000
+ { }, // e9: 0100 1101 1110 1001
+ { }, // ea: 0100 1101 1110 1010
+ { }, // eb: 0100 1101 1110 1011
+ { }, // ec: 0100 1101 1110 1100
+ { }, // ed: 0100 1101 1110 1101
+ { }, // ee: 0100 1101 1110 1110
+ { }, // ef: 0100 1101 1110 1111
- {illegal,nullptr }, /* f0: 0100 1101 1111 0000 */
- {illegal,nullptr }, /* f1: 0100 1101 1111 0001 */
- {illegal,nullptr }, /* f2: 0100 1101 1111 0010 */
- {illegal,nullptr }, /* f3: 0100 1101 1111 0011 */
- {illegal,nullptr }, /* f4: 0100 1101 1111 0100 */
- {illegal,nullptr }, /* f5: 0100 1101 1111 0101 */
- {illegal,nullptr }, /* f6: 0100 1101 1111 0110 */
- {illegal,nullptr }, /* f7: 0100 1101 1111 0111 */
- {illegal,nullptr }, /* f8: 0100 1101 1111 1000 */
- {illegal,nullptr }, /* f9: 0100 1101 1111 1001 */
- {illegal,nullptr }, /* fa: 0100 1101 1111 1010 */
- {illegal,nullptr }, /* fb: 0100 1101 1111 1011 */
- {illegal,nullptr }, /* fc: 0100 1101 1111 1100 */
- {illegal,nullptr }, /* fd: 0100 1101 1111 1101 */
- {illegal,nullptr }, /* fe: 0100 1101 1111 1110 */
- {illegal,nullptr } /* ff: 0100 1101 1111 1111 */
+ { }, // f0: 0100 1101 1111 0000
+ { }, // f1: 0100 1101 1111 0001
+ { }, // f2: 0100 1101 1111 0010
+ { }, // f3: 0100 1101 1111 0011
+ { }, // f4: 0100 1101 1111 0100
+ { }, // f5: 0100 1101 1111 0101
+ { }, // f6: 0100 1101 1111 0110
+ { }, // f7: 0100 1101 1111 0111
+ { }, // f8: 0100 1101 1111 1000
+ { }, // f9: 0100 1101 1111 1001
+ { }, // fa: 0100 1101 1111 1010
+ { }, // fb: 0100 1101 1111 1011
+ { }, // fc: 0100 1101 1111 1100
+ { }, // fd: 0100 1101 1111 1101
+ { }, // fe: 0100 1101 1111 1110
+ { } // ff: 0100 1101 1111 1111
};
-/* prefix 60 */
-static const struct dasm_s dasm60[256] =
+// prefix 60
+const dasm_s dasm_s::d60[256] =
{
- {illegal,nullptr }, /* 00: 0110 0000 0000 0000 */
- {illegal,nullptr }, /* 01: 0110 0000 0000 0001 */
- {illegal,nullptr }, /* 02: 0110 0000 0000 0010 */
- {illegal,nullptr }, /* 03: 0110 0000 0000 0011 */
- {illegal,nullptr }, /* 04: 0110 0000 0000 0100 */
- {illegal,nullptr }, /* 05: 0110 0000 0000 0101 */
- {illegal,nullptr }, /* 06: 0110 0000 0000 0110 */
- {illegal,nullptr }, /* 07: 0110 0000 0000 0111 */
- {ANA,"V,A" }, /* 08: 0110 0000 0000 1000 */
- {ANA,"A,A" }, /* 09: 0110 0000 0000 1001 */
- {ANA,"B,A" }, /* 0a: 0110 0000 0000 1010 */
- {ANA,"C,A" }, /* 0b: 0110 0000 0000 1011 */
- {ANA,"D,A" }, /* 0c: 0110 0000 0000 1100 */
- {ANA,"E,A" }, /* 0d: 0110 0000 0000 1101 */
- {ANA,"H,A" }, /* 0e: 0110 0000 0000 1110 */
- {ANA,"L,A" }, /* 0f: 0110 0000 0000 1111 */
+ { }, // 00: 0110 0000 0000 0000
+ { }, // 01: 0110 0000 0000 0001
+ { }, // 02: 0110 0000 0000 0010
+ { }, // 03: 0110 0000 0000 0011
+ { }, // 04: 0110 0000 0000 0100
+ { }, // 05: 0110 0000 0000 0101
+ { }, // 06: 0110 0000 0000 0110
+ { }, // 07: 0110 0000 0000 0111
+ {ANA, "V,A" }, // 08: 0110 0000 0000 1000
+ {ANA, "A,A" }, // 09: 0110 0000 0000 1001
+ {ANA, "B,A" }, // 0a: 0110 0000 0000 1010
+ {ANA, "C,A" }, // 0b: 0110 0000 0000 1011
+ {ANA, "D,A" }, // 0c: 0110 0000 0000 1100
+ {ANA, "E,A" }, // 0d: 0110 0000 0000 1101
+ {ANA, "H,A" }, // 0e: 0110 0000 0000 1110
+ {ANA, "L,A" }, // 0f: 0110 0000 0000 1111
- {XRA,"V,A" }, /* 10: 0110 0000 0001 0000 */
- {XRA,"A,A" }, /* 11: 0110 0000 0001 0001 */
- {XRA,"B,A" }, /* 12: 0110 0000 0001 0010 */
- {XRA,"C,A" }, /* 13: 0110 0000 0001 0011 */
- {XRA,"D,A" }, /* 14: 0110 0000 0001 0100 */
- {XRA,"E,A" }, /* 15: 0110 0000 0001 0101 */
- {XRA,"H,A" }, /* 16: 0110 0000 0001 0110 */
- {XRA,"L,A" }, /* 17: 0110 0000 0001 0111 */
- {ORA,"V,A" }, /* 18: 0110 0000 0001 1000 */
- {ORA,"A,A" }, /* 19: 0110 0000 0001 1001 */
- {ORA,"B,A" }, /* 1a: 0110 0000 0001 1010 */
- {ORA,"C,A" }, /* 1b: 0110 0000 0001 1011 */
- {ORA,"D,A" }, /* 1c: 0110 0000 0001 1100 */
- {ORA,"E,A" }, /* 1d: 0110 0000 0001 1101 */
- {ORA,"H,A" }, /* 1e: 0110 0000 0001 1110 */
- {ORA,"L,A" }, /* 1f: 0110 0000 0001 1111 */
+ {XRA, "V,A" }, // 10: 0110 0000 0001 0000
+ {XRA, "A,A" }, // 11: 0110 0000 0001 0001
+ {XRA, "B,A" }, // 12: 0110 0000 0001 0010
+ {XRA, "C,A" }, // 13: 0110 0000 0001 0011
+ {XRA, "D,A" }, // 14: 0110 0000 0001 0100
+ {XRA, "E,A" }, // 15: 0110 0000 0001 0101
+ {XRA, "H,A" }, // 16: 0110 0000 0001 0110
+ {XRA, "L,A" }, // 17: 0110 0000 0001 0111
+ {ORA, "V,A" }, // 18: 0110 0000 0001 1000
+ {ORA, "A,A" }, // 19: 0110 0000 0001 1001
+ {ORA, "B,A" }, // 1a: 0110 0000 0001 1010
+ {ORA, "C,A" }, // 1b: 0110 0000 0001 1011
+ {ORA, "D,A" }, // 1c: 0110 0000 0001 1100
+ {ORA, "E,A" }, // 1d: 0110 0000 0001 1101
+ {ORA, "H,A" }, // 1e: 0110 0000 0001 1110
+ {ORA, "L,A" }, // 1f: 0110 0000 0001 1111
- {ADDNC,"V,A" }, /* 20: 0110 0000 0010 0000 */
- {ADDNC,"A,A" }, /* 21: 0110 0000 0010 0001 */
- {ADDNC,"B,A" }, /* 22: 0110 0000 0010 0010 */
- {ADDNC,"C,A" }, /* 23: 0110 0000 0010 0011 */
- {ADDNC,"D,A" }, /* 24: 0110 0000 0010 0100 */
- {ADDNC,"E,A" }, /* 25: 0110 0000 0010 0101 */
- {ADDNC,"H,A" }, /* 26: 0110 0000 0010 0110 */
- {ADDNC,"L,A" }, /* 27: 0110 0000 0010 0111 */
- {GTA,"V,A" }, /* 28: 0110 0000 0010 1000 */
- {GTA,"A,A" }, /* 29: 0110 0000 0010 1001 */
- {GTA,"B,A" }, /* 2a: 0110 0000 0010 1010 */
- {GTA,"C,A" }, /* 2b: 0110 0000 0010 1011 */
- {GTA,"D,A" }, /* 2c: 0110 0000 0010 1100 */
- {GTA,"E,A" }, /* 2d: 0110 0000 0010 1101 */
- {GTA,"H,A" }, /* 2e: 0110 0000 0010 1110 */
- {GTA,"L,A" }, /* 2f: 0110 0000 0010 1111 */
+ {ADDNC, "V,A" }, // 20: 0110 0000 0010 0000
+ {ADDNC, "A,A" }, // 21: 0110 0000 0010 0001
+ {ADDNC, "B,A" }, // 22: 0110 0000 0010 0010
+ {ADDNC, "C,A" }, // 23: 0110 0000 0010 0011
+ {ADDNC, "D,A" }, // 24: 0110 0000 0010 0100
+ {ADDNC, "E,A" }, // 25: 0110 0000 0010 0101
+ {ADDNC, "H,A" }, // 26: 0110 0000 0010 0110
+ {ADDNC, "L,A" }, // 27: 0110 0000 0010 0111
+ {GTA, "V,A" }, // 28: 0110 0000 0010 1000
+ {GTA, "A,A" }, // 29: 0110 0000 0010 1001
+ {GTA, "B,A" }, // 2a: 0110 0000 0010 1010
+ {GTA, "C,A" }, // 2b: 0110 0000 0010 1011
+ {GTA, "D,A" }, // 2c: 0110 0000 0010 1100
+ {GTA, "E,A" }, // 2d: 0110 0000 0010 1101
+ {GTA, "H,A" }, // 2e: 0110 0000 0010 1110
+ {GTA, "L,A" }, // 2f: 0110 0000 0010 1111
- {SUBNB,"V,A" }, /* 30: 0110 0000 0011 0000 */
- {SUBNB,"A,A" }, /* 31: 0110 0000 0011 0001 */
- {SUBNB,"B,A" }, /* 32: 0110 0000 0011 0010 */
- {SUBNB,"C,A" }, /* 33: 0110 0000 0011 0011 */
- {SUBNB,"D,A" }, /* 34: 0110 0000 0011 0100 */
- {SUBNB,"E,A" }, /* 35: 0110 0000 0011 0101 */
- {SUBNB,"H,A" }, /* 36: 0110 0000 0011 0110 */
- {SUBNB,"L,A" }, /* 37: 0110 0000 0011 0111 */
- {LTA,"V,A" }, /* 38: 0110 0000 0011 1000 */
- {LTA,"A,A" }, /* 39: 0110 0000 0011 1001 */
- {LTA,"B,A" }, /* 3a: 0110 0000 0011 1010 */
- {LTA,"C,A" }, /* 3b: 0110 0000 0011 1011 */
- {LTA,"D,A" }, /* 3c: 0110 0000 0011 1100 */
- {LTA,"E,A" }, /* 3d: 0110 0000 0011 1101 */
- {LTA,"H,A" }, /* 3e: 0110 0000 0011 1110 */
- {LTA,"L,A" }, /* 3f: 0110 0000 0011 1111 */
+ {SUBNB, "V,A" }, // 30: 0110 0000 0011 0000
+ {SUBNB, "A,A" }, // 31: 0110 0000 0011 0001
+ {SUBNB, "B,A" }, // 32: 0110 0000 0011 0010
+ {SUBNB, "C,A" }, // 33: 0110 0000 0011 0011
+ {SUBNB, "D,A" }, // 34: 0110 0000 0011 0100
+ {SUBNB, "E,A" }, // 35: 0110 0000 0011 0101
+ {SUBNB, "H,A" }, // 36: 0110 0000 0011 0110
+ {SUBNB, "L,A" }, // 37: 0110 0000 0011 0111
+ {LTA, "V,A" }, // 38: 0110 0000 0011 1000
+ {LTA, "A,A" }, // 39: 0110 0000 0011 1001
+ {LTA, "B,A" }, // 3a: 0110 0000 0011 1010
+ {LTA, "C,A" }, // 3b: 0110 0000 0011 1011
+ {LTA, "D,A" }, // 3c: 0110 0000 0011 1100
+ {LTA, "E,A" }, // 3d: 0110 0000 0011 1101
+ {LTA, "H,A" }, // 3e: 0110 0000 0011 1110
+ {LTA, "L,A" }, // 3f: 0110 0000 0011 1111
- {ADD,"V,A" }, /* 40: 0110 0000 0100 0000 */
- {ADD,"A,A" }, /* 41: 0110 0000 0100 0001 */
- {ADD,"B,A" }, /* 42: 0110 0000 0100 0010 */
- {ADD,"C,A" }, /* 43: 0110 0000 0100 0011 */
- {ADD,"D,A" }, /* 44: 0110 0000 0100 0100 */
- {ADD,"E,A" }, /* 45: 0110 0000 0100 0101 */
- {ADD,"H,A" }, /* 46: 0110 0000 0100 0110 */
- {ADD,"L,A" }, /* 47: 0110 0000 0100 0111 */
- {illegal,nullptr }, /* 48: 0110 0000 0100 1000 */
- {illegal,nullptr }, /* 49: 0110 0000 0100 1001 */
- {illegal,nullptr }, /* 4a: 0110 0000 0100 1010 */
- {illegal,nullptr }, /* 4b: 0110 0000 0100 1011 */
- {illegal,nullptr }, /* 4c: 0110 0000 0100 1100 */
- {illegal,nullptr }, /* 4d: 0110 0000 0100 1101 */
- {illegal,nullptr }, /* 4e: 0110 0000 0100 1110 */
- {illegal,nullptr }, /* 4f: 0110 0000 0100 1111 */
+ {ADD, "V,A" }, // 40: 0110 0000 0100 0000
+ {ADD, "A,A" }, // 41: 0110 0000 0100 0001
+ {ADD, "B,A" }, // 42: 0110 0000 0100 0010
+ {ADD, "C,A" }, // 43: 0110 0000 0100 0011
+ {ADD, "D,A" }, // 44: 0110 0000 0100 0100
+ {ADD, "E,A" }, // 45: 0110 0000 0100 0101
+ {ADD, "H,A" }, // 46: 0110 0000 0100 0110
+ {ADD, "L,A" }, // 47: 0110 0000 0100 0111
+ { }, // 48: 0110 0000 0100 1000
+ { }, // 49: 0110 0000 0100 1001
+ { }, // 4a: 0110 0000 0100 1010
+ { }, // 4b: 0110 0000 0100 1011
+ { }, // 4c: 0110 0000 0100 1100
+ { }, // 4d: 0110 0000 0100 1101
+ { }, // 4e: 0110 0000 0100 1110
+ { }, // 4f: 0110 0000 0100 1111
- {ADC,"V,A" }, /* 50: 0110 0000 0101 0000 */
- {ADC,"A,A" }, /* 51: 0110 0000 0101 0001 */
- {ADC,"B,A" }, /* 52: 0110 0000 0101 0010 */
- {ADC,"C,A" }, /* 53: 0110 0000 0101 0011 */
- {ADC,"D,A" }, /* 54: 0110 0000 0101 0100 */
- {ADC,"E,A" }, /* 55: 0110 0000 0101 0101 */
- {ADC,"H,A" }, /* 56: 0110 0000 0101 0110 */
- {ADC,"L,A" }, /* 57: 0110 0000 0101 0111 */
- {illegal,nullptr }, /* 58: 0110 0000 0101 1000 */
- {illegal,nullptr }, /* 59: 0110 0000 0101 1001 */
- {illegal,nullptr }, /* 5a: 0110 0000 0101 1010 */
- {illegal,nullptr }, /* 5b: 0110 0000 0101 1011 */
- {illegal,nullptr }, /* 5c: 0110 0000 0101 1100 */
- {illegal,nullptr }, /* 5d: 0110 0000 0101 1101 */
- {illegal,nullptr }, /* 5e: 0110 0000 0101 1110 */
- {illegal,nullptr }, /* 5f: 0110 0000 0101 1111 */
+ {ADC, "V,A" }, // 50: 0110 0000 0101 0000
+ {ADC, "A,A" }, // 51: 0110 0000 0101 0001
+ {ADC, "B,A" }, // 52: 0110 0000 0101 0010
+ {ADC, "C,A" }, // 53: 0110 0000 0101 0011
+ {ADC, "D,A" }, // 54: 0110 0000 0101 0100
+ {ADC, "E,A" }, // 55: 0110 0000 0101 0101
+ {ADC, "H,A" }, // 56: 0110 0000 0101 0110
+ {ADC, "L,A" }, // 57: 0110 0000 0101 0111
+ { }, // 58: 0110 0000 0101 1000
+ { }, // 59: 0110 0000 0101 1001
+ { }, // 5a: 0110 0000 0101 1010
+ { }, // 5b: 0110 0000 0101 1011
+ { }, // 5c: 0110 0000 0101 1100
+ { }, // 5d: 0110 0000 0101 1101
+ { }, // 5e: 0110 0000 0101 1110
+ { }, // 5f: 0110 0000 0101 1111
- {SUB,"V,A" }, /* 60: 0110 0000 0110 0000 */
- {SUB,"A,A" }, /* 61: 0110 0000 0110 0001 */
- {SUB,"B,A" }, /* 62: 0110 0000 0110 0010 */
- {SUB,"C,A" }, /* 63: 0110 0000 0110 0011 */
- {SUB,"D,A" }, /* 64: 0110 0000 0110 0100 */
- {SUB,"E,A" }, /* 65: 0110 0000 0110 0101 */
- {SUB,"H,A" }, /* 66: 0110 0000 0110 0110 */
- {SUB,"L,A" }, /* 67: 0110 0000 0110 0111 */
- {NEA,"V,A" }, /* 68: 0110 0000 0110 1000 */
- {NEA,"A,A" }, /* 69: 0110 0000 0110 1001 */
- {NEA,"B,A" }, /* 6a: 0110 0000 0110 1010 */
- {NEA,"C,A" }, /* 6b: 0110 0000 0110 1011 */
- {NEA,"D,A" }, /* 6c: 0110 0000 0110 1100 */
- {NEA,"E,A" }, /* 6d: 0110 0000 0110 1101 */
- {NEA,"H,A" }, /* 6e: 0110 0000 0110 1110 */
- {NEA,"L,A" }, /* 6f: 0110 0000 0110 1111 */
+ {SUB, "V,A" }, // 60: 0110 0000 0110 0000
+ {SUB, "A,A" }, // 61: 0110 0000 0110 0001
+ {SUB, "B,A" }, // 62: 0110 0000 0110 0010
+ {SUB, "C,A" }, // 63: 0110 0000 0110 0011
+ {SUB, "D,A" }, // 64: 0110 0000 0110 0100
+ {SUB, "E,A" }, // 65: 0110 0000 0110 0101
+ {SUB, "H,A" }, // 66: 0110 0000 0110 0110
+ {SUB, "L,A" }, // 67: 0110 0000 0110 0111
+ {NEA, "V,A" }, // 68: 0110 0000 0110 1000
+ {NEA, "A,A" }, // 69: 0110 0000 0110 1001
+ {NEA, "B,A" }, // 6a: 0110 0000 0110 1010
+ {NEA, "C,A" }, // 6b: 0110 0000 0110 1011
+ {NEA, "D,A" }, // 6c: 0110 0000 0110 1100
+ {NEA, "E,A" }, // 6d: 0110 0000 0110 1101
+ {NEA, "H,A" }, // 6e: 0110 0000 0110 1110
+ {NEA, "L,A" }, // 6f: 0110 0000 0110 1111
- {SBB,"V,A" }, /* 70: 0110 0000 0111 0000 */
- {SBB,"A,A" }, /* 71: 0110 0000 0111 0001 */
- {SBB,"B,A" }, /* 72: 0110 0000 0111 0010 */
- {SBB,"C,A" }, /* 73: 0110 0000 0111 0011 */
- {SBB,"D,A" }, /* 74: 0110 0000 0111 0100 */
- {SBB,"E,A" }, /* 75: 0110 0000 0111 0101 */
- {SBB,"H,A" }, /* 76: 0110 0000 0111 0110 */
- {SBB,"L,A" }, /* 77: 0110 0000 0111 0111 */
- {EQA,"V,A" }, /* 78: 0110 0000 0111 1000 */
- {EQA,"A,A" }, /* 79: 0110 0000 0111 1001 */
- {EQA,"B,A" }, /* 7a: 0110 0000 0111 1010 */
- {EQA,"C,A" }, /* 7b: 0110 0000 0111 1011 */
- {EQA,"D,A" }, /* 7c: 0110 0000 0111 1100 */
- {EQA,"E,A" }, /* 7d: 0110 0000 0111 1101 */
- {EQA,"H,A" }, /* 7e: 0110 0000 0111 1110 */
- {EQA,"L,A" }, /* 7f: 0110 0000 0111 1111 */
+ {SBB, "V,A" }, // 70: 0110 0000 0111 0000
+ {SBB, "A,A" }, // 71: 0110 0000 0111 0001
+ {SBB, "B,A" }, // 72: 0110 0000 0111 0010
+ {SBB, "C,A" }, // 73: 0110 0000 0111 0011
+ {SBB, "D,A" }, // 74: 0110 0000 0111 0100
+ {SBB, "E,A" }, // 75: 0110 0000 0111 0101
+ {SBB, "H,A" }, // 76: 0110 0000 0111 0110
+ {SBB, "L,A" }, // 77: 0110 0000 0111 0111
+ {EQA, "V,A" }, // 78: 0110 0000 0111 1000
+ {EQA, "A,A" }, // 79: 0110 0000 0111 1001
+ {EQA, "B,A" }, // 7a: 0110 0000 0111 1010
+ {EQA, "C,A" }, // 7b: 0110 0000 0111 1011
+ {EQA, "D,A" }, // 7c: 0110 0000 0111 1100
+ {EQA, "E,A" }, // 7d: 0110 0000 0111 1101
+ {EQA, "H,A" }, // 7e: 0110 0000 0111 1110
+ {EQA, "L,A" }, // 7f: 0110 0000 0111 1111
- {illegal,nullptr }, /* 80: 0110 0000 1000 0000 */
- {illegal,nullptr }, /* 81: 0110 0000 1000 0001 */
- {illegal,nullptr }, /* 82: 0110 0000 1000 0010 */
- {illegal,nullptr }, /* 83: 0110 0000 1000 0011 */
- {illegal,nullptr }, /* 84: 0110 0000 1000 0100 */
- {illegal,nullptr }, /* 85: 0110 0000 1000 0101 */
- {illegal,nullptr }, /* 86: 0110 0000 1000 0110 */
- {illegal,nullptr }, /* 87: 0110 0000 1000 0111 */
- {ANA,"A,V" }, /* 88: 0110 0000 1000 1000 */
- {ANA,"A,A" }, /* 89: 0110 0000 1000 1001 */
- {ANA,"A,B" }, /* 8a: 0110 0000 1000 1010 */
- {ANA,"A,C" }, /* 8b: 0110 0000 1000 1011 */
- {ANA,"A,D" }, /* 8c: 0110 0000 1000 1100 */
- {ANA,"A,E" }, /* 8d: 0110 0000 1000 1101 */
- {ANA,"A,H" }, /* 8e: 0110 0000 1000 1110 */
- {ANA,"A,L" }, /* 8f: 0110 0000 1000 1111 */
+ { }, // 80: 0110 0000 1000 0000
+ { }, // 81: 0110 0000 1000 0001
+ { }, // 82: 0110 0000 1000 0010
+ { }, // 83: 0110 0000 1000 0011
+ { }, // 84: 0110 0000 1000 0100
+ { }, // 85: 0110 0000 1000 0101
+ { }, // 86: 0110 0000 1000 0110
+ { }, // 87: 0110 0000 1000 0111
+ {ANA, "A,V" }, // 88: 0110 0000 1000 1000
+ {ANA, "A,A" }, // 89: 0110 0000 1000 1001
+ {ANA, "A,B" }, // 8a: 0110 0000 1000 1010
+ {ANA, "A,C" }, // 8b: 0110 0000 1000 1011
+ {ANA, "A,D" }, // 8c: 0110 0000 1000 1100
+ {ANA, "A,E" }, // 8d: 0110 0000 1000 1101
+ {ANA, "A,H" }, // 8e: 0110 0000 1000 1110
+ {ANA, "A,L" }, // 8f: 0110 0000 1000 1111
- {XRA,"A,V" }, /* 90: 0110 0000 1001 0000 */
- {XRA,"A,A" }, /* 91: 0110 0000 1001 0001 */
- {XRA,"A,B" }, /* 92: 0110 0000 1001 0010 */
- {XRA,"A,C" }, /* 93: 0110 0000 1001 0011 */
- {XRA,"A,D" }, /* 94: 0110 0000 1001 0100 */
- {XRA,"A,E" }, /* 95: 0110 0000 1001 0101 */
- {XRA,"A,H" }, /* 96: 0110 0000 1001 0110 */
- {XRA,"A,L" }, /* 97: 0110 0000 1001 0111 */
- {ORA,"A,V" }, /* 98: 0110 0000 1001 1000 */
- {ORA,"A,A" }, /* 99: 0110 0000 1001 1001 */
- {ORA,"A,B" }, /* 9a: 0110 0000 1001 1010 */
- {ORA,"A,C" }, /* 9b: 0110 0000 1001 1011 */
- {ORA,"A,D" }, /* 9c: 0110 0000 1001 1100 */
- {ORA,"A,E" }, /* 9d: 0110 0000 1001 1101 */
- {ORA,"A,H" }, /* 9e: 0110 0000 1001 1110 */
- {ORA,"A,L" }, /* 9f: 0110 0000 1001 1111 */
+ {XRA, "A,V" }, // 90: 0110 0000 1001 0000
+ {XRA, "A,A" }, // 91: 0110 0000 1001 0001
+ {XRA, "A,B" }, // 92: 0110 0000 1001 0010
+ {XRA, "A,C" }, // 93: 0110 0000 1001 0011
+ {XRA, "A,D" }, // 94: 0110 0000 1001 0100
+ {XRA, "A,E" }, // 95: 0110 0000 1001 0101
+ {XRA, "A,H" }, // 96: 0110 0000 1001 0110
+ {XRA, "A,L" }, // 97: 0110 0000 1001 0111
+ {ORA, "A,V" }, // 98: 0110 0000 1001 1000
+ {ORA, "A,A" }, // 99: 0110 0000 1001 1001
+ {ORA, "A,B" }, // 9a: 0110 0000 1001 1010
+ {ORA, "A,C" }, // 9b: 0110 0000 1001 1011
+ {ORA, "A,D" }, // 9c: 0110 0000 1001 1100
+ {ORA, "A,E" }, // 9d: 0110 0000 1001 1101
+ {ORA, "A,H" }, // 9e: 0110 0000 1001 1110
+ {ORA, "A,L" }, // 9f: 0110 0000 1001 1111
- {ADDNC,"A,V" }, /* a0: 0110 0000 1010 0000 */
- {ADDNC,"A,A" }, /* a1: 0110 0000 1010 0001 */
- {ADDNC,"A,B" }, /* a2: 0110 0000 1010 0010 */
- {ADDNC,"A,C" }, /* a3: 0110 0000 1010 0011 */
- {ADDNC,"A,D" }, /* a4: 0110 0000 1010 0100 */
- {ADDNC,"A,E" }, /* a5: 0110 0000 1010 0101 */
- {ADDNC,"A,H" }, /* a6: 0110 0000 1010 0110 */
- {ADDNC,"A,L" }, /* a7: 0110 0000 1010 0111 */
- {GTA,"A,V" }, /* a8: 0110 0000 1010 1000 */
- {GTA,"A,A" }, /* a9: 0110 0000 1010 1001 */
- {GTA,"A,B" }, /* aa: 0110 0000 1010 1010 */
- {GTA,"A,C" }, /* ab: 0110 0000 1010 1011 */
- {GTA,"A,D" }, /* ac: 0110 0000 1010 1100 */
- {GTA,"A,E" }, /* ad: 0110 0000 1010 1101 */
- {GTA,"A,H" }, /* ae: 0110 0000 1010 1110 */
- {GTA,"A,L" }, /* af: 0110 0000 1010 1111 */
+ {ADDNC, "A,V" }, // a0: 0110 0000 1010 0000
+ {ADDNC, "A,A" }, // a1: 0110 0000 1010 0001
+ {ADDNC, "A,B" }, // a2: 0110 0000 1010 0010
+ {ADDNC, "A,C" }, // a3: 0110 0000 1010 0011
+ {ADDNC, "A,D" }, // a4: 0110 0000 1010 0100
+ {ADDNC, "A,E" }, // a5: 0110 0000 1010 0101
+ {ADDNC, "A,H" }, // a6: 0110 0000 1010 0110
+ {ADDNC, "A,L" }, // a7: 0110 0000 1010 0111
+ {GTA, "A,V" }, // a8: 0110 0000 1010 1000
+ {GTA, "A,A" }, // a9: 0110 0000 1010 1001
+ {GTA, "A,B" }, // aa: 0110 0000 1010 1010
+ {GTA, "A,C" }, // ab: 0110 0000 1010 1011
+ {GTA, "A,D" }, // ac: 0110 0000 1010 1100
+ {GTA, "A,E" }, // ad: 0110 0000 1010 1101
+ {GTA, "A,H" }, // ae: 0110 0000 1010 1110
+ {GTA, "A,L" }, // af: 0110 0000 1010 1111
- {SUBNB,"A,V" }, /* b0: 0110 0000 1011 0000 */
- {SUBNB,"A,A" }, /* b1: 0110 0000 1011 0001 */
- {SUBNB,"A,B" }, /* b2: 0110 0000 1011 0010 */
- {SUBNB,"A,C" }, /* b3: 0110 0000 1011 0011 */
- {SUBNB,"A,D" }, /* b4: 0110 0000 1011 0100 */
- {SUBNB,"A,E" }, /* b5: 0110 0000 1011 0101 */
- {SUBNB,"A,H" }, /* b6: 0110 0000 1011 0110 */
- {SUBNB,"A,L" }, /* b7: 0110 0000 1011 0111 */
- {LTA,"A,V" }, /* b8: 0110 0000 1011 1000 */
- {LTA,"A,A" }, /* b9: 0110 0000 1011 1001 */
- {LTA,"A,B" }, /* ba: 0110 0000 1011 1010 */
- {LTA,"A,C" }, /* bb: 0110 0000 1011 1011 */
- {LTA,"A,D" }, /* bc: 0110 0000 1011 1100 */
- {LTA,"A,E" }, /* bd: 0110 0000 1011 1101 */
- {LTA,"A,H" }, /* be: 0110 0000 1011 1110 */
- {LTA,"A,L" }, /* bf: 0110 0000 1011 1111 */
+ {SUBNB, "A,V" }, // b0: 0110 0000 1011 0000
+ {SUBNB, "A,A" }, // b1: 0110 0000 1011 0001
+ {SUBNB, "A,B" }, // b2: 0110 0000 1011 0010
+ {SUBNB, "A,C" }, // b3: 0110 0000 1011 0011
+ {SUBNB, "A,D" }, // b4: 0110 0000 1011 0100
+ {SUBNB, "A,E" }, // b5: 0110 0000 1011 0101
+ {SUBNB, "A,H" }, // b6: 0110 0000 1011 0110
+ {SUBNB, "A,L" }, // b7: 0110 0000 1011 0111
+ {LTA, "A,V" }, // b8: 0110 0000 1011 1000
+ {LTA, "A,A" }, // b9: 0110 0000 1011 1001
+ {LTA, "A,B" }, // ba: 0110 0000 1011 1010
+ {LTA, "A,C" }, // bb: 0110 0000 1011 1011
+ {LTA, "A,D" }, // bc: 0110 0000 1011 1100
+ {LTA, "A,E" }, // bd: 0110 0000 1011 1101
+ {LTA, "A,H" }, // be: 0110 0000 1011 1110
+ {LTA, "A,L" }, // bf: 0110 0000 1011 1111
- {ADD,"A,V" }, /* c0: 0110 0000 1100 0000 */
- {ADD,"A,A" }, /* c1: 0110 0000 1100 0001 */
- {ADD,"A,B" }, /* c2: 0110 0000 1100 0010 */
- {ADD,"A,C" }, /* c3: 0110 0000 1100 0011 */
- {ADD,"A,D" }, /* c4: 0110 0000 1100 0100 */
- {ADD,"A,E" }, /* c5: 0110 0000 1100 0101 */
- {ADD,"A,H" }, /* c6: 0110 0000 1100 0110 */
- {ADD,"A,L" }, /* c7: 0110 0000 1100 0111 */
- {ONA,"A,V" }, /* c8: 0110 0000 1100 1000 */
- {ONA,"A,A" }, /* c9: 0110 0000 1100 1001 */
- {ONA,"A,B" }, /* ca: 0110 0000 1100 1010 */
- {ONA,"A,C" }, /* cb: 0110 0000 1100 1011 */
- {ONA,"A,D" }, /* cc: 0110 0000 1100 1100 */
- {ONA,"A,E" }, /* cd: 0110 0000 1100 1101 */
- {ONA,"A,H" }, /* ce: 0110 0000 1100 1110 */
- {ONA,"A,L" }, /* cf: 0110 0000 1100 1111 */
+ {ADD, "A,V" }, // c0: 0110 0000 1100 0000
+ {ADD, "A,A" }, // c1: 0110 0000 1100 0001
+ {ADD, "A,B" }, // c2: 0110 0000 1100 0010
+ {ADD, "A,C" }, // c3: 0110 0000 1100 0011
+ {ADD, "A,D" }, // c4: 0110 0000 1100 0100
+ {ADD, "A,E" }, // c5: 0110 0000 1100 0101
+ {ADD, "A,H" }, // c6: 0110 0000 1100 0110
+ {ADD, "A,L" }, // c7: 0110 0000 1100 0111
+ {ONA, "A,V" }, // c8: 0110 0000 1100 1000
+ {ONA, "A,A" }, // c9: 0110 0000 1100 1001
+ {ONA, "A,B" }, // ca: 0110 0000 1100 1010
+ {ONA, "A,C" }, // cb: 0110 0000 1100 1011
+ {ONA, "A,D" }, // cc: 0110 0000 1100 1100
+ {ONA, "A,E" }, // cd: 0110 0000 1100 1101
+ {ONA, "A,H" }, // ce: 0110 0000 1100 1110
+ {ONA, "A,L" }, // cf: 0110 0000 1100 1111
- {ADC,"A,V" }, /* d0: 0110 0000 1101 0000 */
- {ADC,"A,A" }, /* d1: 0110 0000 1101 0001 */
- {ADC,"A,B" }, /* d2: 0110 0000 1101 0010 */
- {ADC,"A,C" }, /* d3: 0110 0000 1101 0011 */
- {ADC,"A,D" }, /* d4: 0110 0000 1101 0100 */
- {ADC,"A,E" }, /* d5: 0110 0000 1101 0101 */
- {ADC,"A,H" }, /* d6: 0110 0000 1101 0110 */
- {ADC,"A,L" }, /* d7: 0110 0000 1101 0111 */
- {OFFA,"A,V" }, /* d8: 0110 0000 1101 1000 */
- {OFFA,"A,A" }, /* d9: 0110 0000 1101 1001 */
- {OFFA,"A,B" }, /* da: 0110 0000 1101 1010 */
- {OFFA,"A,C" }, /* db: 0110 0000 1101 1011 */
- {OFFA,"A,D" }, /* dc: 0110 0000 1101 1100 */
- {OFFA,"A,E" }, /* dd: 0110 0000 1101 1101 */
- {OFFA,"A,H" }, /* de: 0110 0000 1101 1110 */
- {OFFA,"A,L" }, /* df: 0110 0000 1101 1111 */
+ {ADC, "A,V" }, // d0: 0110 0000 1101 0000
+ {ADC, "A,A" }, // d1: 0110 0000 1101 0001
+ {ADC, "A,B" }, // d2: 0110 0000 1101 0010
+ {ADC, "A,C" }, // d3: 0110 0000 1101 0011
+ {ADC, "A,D" }, // d4: 0110 0000 1101 0100
+ {ADC, "A,E" }, // d5: 0110 0000 1101 0101
+ {ADC, "A,H" }, // d6: 0110 0000 1101 0110
+ {ADC, "A,L" }, // d7: 0110 0000 1101 0111
+ {OFFA, "A,V" }, // d8: 0110 0000 1101 1000
+ {OFFA, "A,A" }, // d9: 0110 0000 1101 1001
+ {OFFA, "A,B" }, // da: 0110 0000 1101 1010
+ {OFFA, "A,C" }, // db: 0110 0000 1101 1011
+ {OFFA, "A,D" }, // dc: 0110 0000 1101 1100
+ {OFFA, "A,E" }, // dd: 0110 0000 1101 1101
+ {OFFA, "A,H" }, // de: 0110 0000 1101 1110
+ {OFFA, "A,L" }, // df: 0110 0000 1101 1111
- {SUB,"A,V" }, /* e0: 0110 0000 1110 0000 */
- {SUB,"A,A" }, /* e1: 0110 0000 1110 0001 */
- {SUB,"A,B" }, /* e2: 0110 0000 1110 0010 */
- {SUB,"A,C" }, /* e3: 0110 0000 1110 0011 */
- {SUB,"A,D" }, /* e4: 0110 0000 1110 0100 */
- {SUB,"A,E" }, /* e5: 0110 0000 1110 0101 */
- {SUB,"A,H" }, /* e6: 0110 0000 1110 0110 */
- {SUB,"A,L" }, /* e7: 0110 0000 1110 0111 */
- {NEA,"A,V" }, /* e8: 0110 0000 1110 1000 */
- {NEA,"A,A" }, /* e9: 0110 0000 1110 1001 */
- {NEA,"A,B" }, /* ea: 0110 0000 1110 1010 */
- {NEA,"A,C" }, /* eb: 0110 0000 1110 1011 */
- {NEA,"A,D" }, /* ec: 0110 0000 1110 1100 */
- {NEA,"A,E" }, /* ed: 0110 0000 1110 1101 */
- {NEA,"A,H" }, /* ee: 0110 0000 1110 1110 */
- {NEA,"A,L" }, /* ef: 0110 0000 1110 1111 */
+ {SUB, "A,V" }, // e0: 0110 0000 1110 0000
+ {SUB, "A,A" }, // e1: 0110 0000 1110 0001
+ {SUB, "A,B" }, // e2: 0110 0000 1110 0010
+ {SUB, "A,C" }, // e3: 0110 0000 1110 0011
+ {SUB, "A,D" }, // e4: 0110 0000 1110 0100
+ {SUB, "A,E" }, // e5: 0110 0000 1110 0101
+ {SUB, "A,H" }, // e6: 0110 0000 1110 0110
+ {SUB, "A,L" }, // e7: 0110 0000 1110 0111
+ {NEA, "A,V" }, // e8: 0110 0000 1110 1000
+ {NEA, "A,A" }, // e9: 0110 0000 1110 1001
+ {NEA, "A,B" }, // ea: 0110 0000 1110 1010
+ {NEA, "A,C" }, // eb: 0110 0000 1110 1011
+ {NEA, "A,D" }, // ec: 0110 0000 1110 1100
+ {NEA, "A,E" }, // ed: 0110 0000 1110 1101
+ {NEA, "A,H" }, // ee: 0110 0000 1110 1110
+ {NEA, "A,L" }, // ef: 0110 0000 1110 1111
- {SBB,"A,V" }, /* f0: 0110 0000 1111 0000 */
- {SBB,"A,A" }, /* f1: 0110 0000 1111 0001 */
- {SBB,"A,B" }, /* f2: 0110 0000 1111 0010 */
- {SBB,"A,C" }, /* f3: 0110 0000 1111 0011 */
- {SBB,"A,D" }, /* f4: 0110 0000 1111 0100 */
- {SBB,"A,E" }, /* f5: 0110 0000 1111 0101 */
- {SBB,"A,H" }, /* f6: 0110 0000 1111 0110 */
- {SBB,"A,L" }, /* f7: 0110 0000 1111 0111 */
- {EQA,"A,V" }, /* f8: 0110 0000 1111 1000 */
- {EQA,"A,A" }, /* f9: 0110 0000 1111 1001 */
- {EQA,"A,B" }, /* fa: 0110 0000 1111 1010 */
- {EQA,"A,C" }, /* fb: 0110 0000 1111 1011 */
- {EQA,"A,D" }, /* fc: 0110 0000 1111 1100 */
- {EQA,"A,E" }, /* fd: 0110 0000 1111 1101 */
- {EQA,"A,H" }, /* fe: 0110 0000 1111 1110 */
- {EQA,"A,L" } /* ff: 0110 0000 1111 1111 */
+ {SBB, "A,V" }, // f0: 0110 0000 1111 0000
+ {SBB, "A,A" }, // f1: 0110 0000 1111 0001
+ {SBB, "A,B" }, // f2: 0110 0000 1111 0010
+ {SBB, "A,C" }, // f3: 0110 0000 1111 0011
+ {SBB, "A,D" }, // f4: 0110 0000 1111 0100
+ {SBB, "A,E" }, // f5: 0110 0000 1111 0101
+ {SBB, "A,H" }, // f6: 0110 0000 1111 0110
+ {SBB, "A,L" }, // f7: 0110 0000 1111 0111
+ {EQA, "A,V" }, // f8: 0110 0000 1111 1000
+ {EQA, "A,A" }, // f9: 0110 0000 1111 1001
+ {EQA, "A,B" }, // fa: 0110 0000 1111 1010
+ {EQA, "A,C" }, // fb: 0110 0000 1111 1011
+ {EQA, "A,D" }, // fc: 0110 0000 1111 1100
+ {EQA, "A,E" }, // fd: 0110 0000 1111 1101
+ {EQA, "A,H" }, // fe: 0110 0000 1111 1110
+ {EQA, "A,L" } // ff: 0110 0000 1111 1111
};
-/* prefix 64 */
-static const struct dasm_s dasm64_7810[256] =
+// prefix 64
+const dasm_s dasm_s::d64_7810[256] =
{
- {MVI,"PA,%b" }, /* 00: 0110 0100 0000 0000 xxxx xxxx */
- {MVI,"PB,%b" }, /* 01: 0110 0100 0000 0001 xxxx xxxx */
- {MVI,"PC,%b" }, /* 02: 0110 0100 0000 0010 xxxx xxxx */
- {MVI,"PD,%b" }, /* 03: 0110 0100 0000 0011 xxxx xxxx */
- {illegal,nullptr }, /* 04: 0110 0100 0000 0100 xxxx xxxx */
- {MVI,"PF,%b" }, /* 05: 0110 0100 0000 0101 xxxx xxxx */
- {MVI,"MKH,%b" }, /* 06: 0110 0100 0000 0110 xxxx xxxx */
- {MVI,"MKL,%b" }, /* 07: 0110 0100 0000 0111 xxxx xxxx */
- {ANI,"PA,%b" }, /* 08: 0110 0100 0000 1000 xxxx xxxx */
- {ANI,"PB,%b" }, /* 09: 0110 0100 0000 1001 xxxx xxxx */
- {ANI,"PC,%b" }, /* 0a: 0110 0100 0000 1010 xxxx xxxx */
- {ANI,"PD,%b" }, /* 0b: 0110 0100 0000 1011 xxxx xxxx */
- {illegal,nullptr }, /* 0c: 0110 0100 0000 1100 xxxx xxxx */
- {ANI,"PF,%b" }, /* 0d: 0110 0100 0000 1101 xxxx xxxx */
- {ANI,"MKH,%b" }, /* 0e: 0110 0100 0000 1110 xxxx xxxx */
- {ANI,"MKL,%b" }, /* 0f: 0110 0100 0000 1111 xxxx xxxx */
+ {MVI, "PA,%b" }, // 00: 0110 0100 0000 0000 xxxx xxxx
+ {MVI, "PB,%b" }, // 01: 0110 0100 0000 0001 xxxx xxxx
+ {MVI, "PC,%b" }, // 02: 0110 0100 0000 0010 xxxx xxxx
+ {MVI, "PD,%b" }, // 03: 0110 0100 0000 0011 xxxx xxxx
+ { }, // 04: 0110 0100 0000 0100 xxxx xxxx
+ {MVI, "PF,%b" }, // 05: 0110 0100 0000 0101 xxxx xxxx
+ {MVI, "MKH,%b" }, // 06: 0110 0100 0000 0110 xxxx xxxx
+ {MVI, "MKL,%b" }, // 07: 0110 0100 0000 0111 xxxx xxxx
+ {ANI, "PA,%b" }, // 08: 0110 0100 0000 1000 xxxx xxxx
+ {ANI, "PB,%b" }, // 09: 0110 0100 0000 1001 xxxx xxxx
+ {ANI, "PC,%b" }, // 0a: 0110 0100 0000 1010 xxxx xxxx
+ {ANI, "PD,%b" }, // 0b: 0110 0100 0000 1011 xxxx xxxx
+ { }, // 0c: 0110 0100 0000 1100 xxxx xxxx
+ {ANI, "PF,%b" }, // 0d: 0110 0100 0000 1101 xxxx xxxx
+ {ANI, "MKH,%b" }, // 0e: 0110 0100 0000 1110 xxxx xxxx
+ {ANI, "MKL,%b" }, // 0f: 0110 0100 0000 1111 xxxx xxxx
- {XRI,"PA,%b" }, /* 10: 0110 0100 0001 0000 xxxx xxxx */
- {XRI,"PB,%b" }, /* 11: 0110 0100 0001 0001 xxxx xxxx */
- {XRI,"PC,%b" }, /* 12: 0110 0100 0001 0010 xxxx xxxx */
- {XRI,"PD,%b" }, /* 13: 0110 0100 0001 0011 xxxx xxxx */
- {illegal,nullptr }, /* 14: 0110 0100 0001 0100 xxxx xxxx */
- {XRI,"PF,%b" }, /* 15: 0110 0100 0001 0101 xxxx xxxx */
- {XRI,"MKH,%b" }, /* 16: 0110 0100 0001 0110 xxxx xxxx */
- {XRI,"MKL,%b" }, /* 17: 0110 0100 0001 0111 xxxx xxxx */
- {ORI,"PA,%b" }, /* 18: 0110 0100 0001 1000 xxxx xxxx */
- {ORI,"PB,%b" }, /* 19: 0110 0100 0001 1001 xxxx xxxx */
- {ORI,"PC,%b" }, /* 1a: 0110 0100 0001 1010 xxxx xxxx */
- {ORI,"PD,%b" }, /* 1b: 0110 0100 0001 1011 xxxx xxxx */
- {illegal,nullptr }, /* 1c: 0110 0100 0001 1100 xxxx xxxx */
- {ORI,"PF,%b" }, /* 1d: 0110 0100 0001 1101 xxxx xxxx */
- {ORI,"MKH,%b" }, /* 1e: 0110 0100 0001 1110 xxxx xxxx */
- {ORI,"MKL,%b" }, /* 1f: 0110 0100 0001 1111 xxxx xxxx */
+ {XRI, "PA,%b" }, // 10: 0110 0100 0001 0000 xxxx xxxx
+ {XRI, "PB,%b" }, // 11: 0110 0100 0001 0001 xxxx xxxx
+ {XRI, "PC,%b" }, // 12: 0110 0100 0001 0010 xxxx xxxx
+ {XRI, "PD,%b" }, // 13: 0110 0100 0001 0011 xxxx xxxx
+ { }, // 14: 0110 0100 0001 0100 xxxx xxxx
+ {XRI, "PF,%b" }, // 15: 0110 0100 0001 0101 xxxx xxxx
+ {XRI, "MKH,%b" }, // 16: 0110 0100 0001 0110 xxxx xxxx
+ {XRI, "MKL,%b" }, // 17: 0110 0100 0001 0111 xxxx xxxx
+ {ORI, "PA,%b" }, // 18: 0110 0100 0001 1000 xxxx xxxx
+ {ORI, "PB,%b" }, // 19: 0110 0100 0001 1001 xxxx xxxx
+ {ORI, "PC,%b" }, // 1a: 0110 0100 0001 1010 xxxx xxxx
+ {ORI, "PD,%b" }, // 1b: 0110 0100 0001 1011 xxxx xxxx
+ { }, // 1c: 0110 0100 0001 1100 xxxx xxxx
+ {ORI, "PF,%b" }, // 1d: 0110 0100 0001 1101 xxxx xxxx
+ {ORI, "MKH,%b" }, // 1e: 0110 0100 0001 1110 xxxx xxxx
+ {ORI, "MKL,%b" }, // 1f: 0110 0100 0001 1111 xxxx xxxx
- {ADINC,"PA,%b" }, /* 20: 0110 0100 0010 0000 xxxx xxxx */
- {ADINC,"PB,%b" }, /* 21: 0110 0100 0010 0001 xxxx xxxx */
- {ADINC,"PC,%b" }, /* 22: 0110 0100 0010 0010 xxxx xxxx */
- {ADINC,"PD,%b" }, /* 23: 0110 0100 0010 0011 xxxx xxxx */
- {illegal,nullptr }, /* 24: 0110 0100 0010 0100 xxxx xxxx */
- {ADINC,"PF,%b" }, /* 25: 0110 0100 0010 0101 xxxx xxxx */
- {ADINC,"MKH,%b" }, /* 26: 0110 0100 0010 0110 xxxx xxxx */
- {ADINC,"MKL,%b" }, /* 27: 0110 0100 0010 0111 xxxx xxxx */
- {GTI,"PA,%b" }, /* 28: 0110 0100 0010 1000 xxxx xxxx */
- {GTI,"PB,%b" }, /* 29: 0110 0100 0010 1001 xxxx xxxx */
- {GTI,"PC,%b" }, /* 2a: 0110 0100 0010 1010 xxxx xxxx */
- {GTI,"PD,%b" }, /* 2b: 0110 0100 0010 1011 xxxx xxxx */
- {illegal,nullptr }, /* 2c: 0110 0100 0010 1100 xxxx xxxx */
- {GTI,"PF,%b" }, /* 2d: 0110 0100 0010 1101 xxxx xxxx */
- {GTI,"MKH,%b" }, /* 2e: 0110 0100 0010 1110 xxxx xxxx */
- {GTI,"MKL,%b" }, /* 2f: 0110 0100 0010 1111 xxxx xxxx */
+ {ADINC, "PA,%b" }, // 20: 0110 0100 0010 0000 xxxx xxxx
+ {ADINC, "PB,%b" }, // 21: 0110 0100 0010 0001 xxxx xxxx
+ {ADINC, "PC,%b" }, // 22: 0110 0100 0010 0010 xxxx xxxx
+ {ADINC, "PD,%b" }, // 23: 0110 0100 0010 0011 xxxx xxxx
+ { }, // 24: 0110 0100 0010 0100 xxxx xxxx
+ {ADINC, "PF,%b" }, // 25: 0110 0100 0010 0101 xxxx xxxx
+ {ADINC, "MKH,%b" }, // 26: 0110 0100 0010 0110 xxxx xxxx
+ {ADINC, "MKL,%b" }, // 27: 0110 0100 0010 0111 xxxx xxxx
+ {GTI, "PA,%b" }, // 28: 0110 0100 0010 1000 xxxx xxxx
+ {GTI, "PB,%b" }, // 29: 0110 0100 0010 1001 xxxx xxxx
+ {GTI, "PC,%b" }, // 2a: 0110 0100 0010 1010 xxxx xxxx
+ {GTI, "PD,%b" }, // 2b: 0110 0100 0010 1011 xxxx xxxx
+ { }, // 2c: 0110 0100 0010 1100 xxxx xxxx
+ {GTI, "PF,%b" }, // 2d: 0110 0100 0010 1101 xxxx xxxx
+ {GTI, "MKH,%b" }, // 2e: 0110 0100 0010 1110 xxxx xxxx
+ {GTI, "MKL,%b" }, // 2f: 0110 0100 0010 1111 xxxx xxxx
- {SUINB,"PA,%b" }, /* 30: 0110 0100 0011 0000 xxxx xxxx */
- {SUINB,"PB,%b" }, /* 31: 0110 0100 0011 0001 xxxx xxxx */
- {SUINB,"PC,%b" }, /* 32: 0110 0100 0011 0010 xxxx xxxx */
- {SUINB,"PD,%b" }, /* 33: 0110 0100 0011 0011 xxxx xxxx */
- {illegal,nullptr }, /* 34: 0110 0100 0011 0100 xxxx xxxx */
- {SUINB,"PF,%b" }, /* 35: 0110 0100 0011 0101 xxxx xxxx */
- {SUINB,"MKH,%b" }, /* 36: 0110 0100 0011 0110 xxxx xxxx */
- {SUINB,"MKL,%b" }, /* 37: 0110 0100 0011 0111 xxxx xxxx */
- {LTI,"PA,%b" }, /* 38: 0110 0100 0011 1000 xxxx xxxx */
- {LTI,"PB,%b" }, /* 39: 0110 0100 0011 1001 xxxx xxxx */
- {LTI,"PC,%b" }, /* 3a: 0110 0100 0011 1010 xxxx xxxx */
- {LTI,"PD,%b" }, /* 3b: 0110 0100 0011 1011 xxxx xxxx */
- {illegal,nullptr }, /* 3c: 0110 0100 0011 1100 xxxx xxxx */
- {LTI,"PF,%b" }, /* 3d: 0110 0100 0011 1101 xxxx xxxx */
- {LTI,"MKH,%b" }, /* 3e: 0110 0100 0011 1110 xxxx xxxx */
- {LTI,"MKL,%b" }, /* 3f: 0110 0100 0011 1111 xxxx xxxx */
+ {SUINB, "PA,%b" }, // 30: 0110 0100 0011 0000 xxxx xxxx
+ {SUINB, "PB,%b" }, // 31: 0110 0100 0011 0001 xxxx xxxx
+ {SUINB, "PC,%b" }, // 32: 0110 0100 0011 0010 xxxx xxxx
+ {SUINB, "PD,%b" }, // 33: 0110 0100 0011 0011 xxxx xxxx
+ { }, // 34: 0110 0100 0011 0100 xxxx xxxx
+ {SUINB, "PF,%b" }, // 35: 0110 0100 0011 0101 xxxx xxxx
+ {SUINB, "MKH,%b" }, // 36: 0110 0100 0011 0110 xxxx xxxx
+ {SUINB, "MKL,%b" }, // 37: 0110 0100 0011 0111 xxxx xxxx
+ {LTI, "PA,%b" }, // 38: 0110 0100 0011 1000 xxxx xxxx
+ {LTI, "PB,%b" }, // 39: 0110 0100 0011 1001 xxxx xxxx
+ {LTI, "PC,%b" }, // 3a: 0110 0100 0011 1010 xxxx xxxx
+ {LTI, "PD,%b" }, // 3b: 0110 0100 0011 1011 xxxx xxxx
+ { }, // 3c: 0110 0100 0011 1100 xxxx xxxx
+ {LTI, "PF,%b" }, // 3d: 0110 0100 0011 1101 xxxx xxxx
+ {LTI, "MKH,%b" }, // 3e: 0110 0100 0011 1110 xxxx xxxx
+ {LTI, "MKL,%b" }, // 3f: 0110 0100 0011 1111 xxxx xxxx
- {ADI,"PA,%b" }, /* 40: 0110 0100 0100 0000 xxxx xxxx */
- {ADI,"PB,%b" }, /* 41: 0110 0100 0100 0001 xxxx xxxx */
- {ADI,"PC,%b" }, /* 42: 0110 0100 0100 0010 xxxx xxxx */
- {ADI,"PD,%b" }, /* 43: 0110 0100 0100 0011 xxxx xxxx */
- {illegal,nullptr }, /* 44: 0110 0100 0100 0100 xxxx xxxx */
- {ADI,"PF,%b" }, /* 45: 0110 0100 0100 0101 xxxx xxxx */
- {ADI,"MKH,%b" }, /* 46: 0110 0100 0100 0110 xxxx xxxx */
- {ADI,"MKL,%b" }, /* 47: 0110 0100 0100 0111 xxxx xxxx */
- {ONI,"PA,%b" }, /* 48: 0110 0100 0100 1000 xxxx xxxx */
- {ONI,"PB,%b" }, /* 49: 0110 0100 0100 1001 xxxx xxxx */
- {ONI,"PC,%b" }, /* 4a: 0110 0100 0100 1010 xxxx xxxx */
- {ONI,"PD,%b" }, /* 4b: 0110 0100 0100 1011 xxxx xxxx */
- {illegal,nullptr }, /* 4c: 0110 0100 0100 1100 xxxx xxxx */
- {ONI,"PF,%b" }, /* 4d: 0110 0100 0100 1101 xxxx xxxx */
- {ONI,"MKH,%b" }, /* 4e: 0110 0100 0100 1110 xxxx xxxx */
- {ONI,"MKL,%b" }, /* 4f: 0110 0100 0100 1111 xxxx xxxx */
+ {ADI, "PA,%b" }, // 40: 0110 0100 0100 0000 xxxx xxxx
+ {ADI, "PB,%b" }, // 41: 0110 0100 0100 0001 xxxx xxxx
+ {ADI, "PC,%b" }, // 42: 0110 0100 0100 0010 xxxx xxxx
+ {ADI, "PD,%b" }, // 43: 0110 0100 0100 0011 xxxx xxxx
+ { }, // 44: 0110 0100 0100 0100 xxxx xxxx
+ {ADI, "PF,%b" }, // 45: 0110 0100 0100 0101 xxxx xxxx
+ {ADI, "MKH,%b" }, // 46: 0110 0100 0100 0110 xxxx xxxx
+ {ADI, "MKL,%b" }, // 47: 0110 0100 0100 0111 xxxx xxxx
+ {ONI, "PA,%b" }, // 48: 0110 0100 0100 1000 xxxx xxxx
+ {ONI, "PB,%b" }, // 49: 0110 0100 0100 1001 xxxx xxxx
+ {ONI, "PC,%b" }, // 4a: 0110 0100 0100 1010 xxxx xxxx
+ {ONI, "PD,%b" }, // 4b: 0110 0100 0100 1011 xxxx xxxx
+ { }, // 4c: 0110 0100 0100 1100 xxxx xxxx
+ {ONI, "PF,%b" }, // 4d: 0110 0100 0100 1101 xxxx xxxx
+ {ONI, "MKH,%b" }, // 4e: 0110 0100 0100 1110 xxxx xxxx
+ {ONI, "MKL,%b" }, // 4f: 0110 0100 0100 1111 xxxx xxxx
- {ACI,"PA,%b" }, /* 50: 0110 0100 0101 0000 xxxx xxxx */
- {ACI,"PB,%b" }, /* 51: 0110 0100 0101 0001 xxxx xxxx */
- {ACI,"PC,%b" }, /* 52: 0110 0100 0101 0010 xxxx xxxx */
- {ACI,"PD,%b" }, /* 53: 0110 0100 0101 0011 xxxx xxxx */
- {illegal,nullptr }, /* 54: 0110 0100 0101 0100 xxxx xxxx */
- {ACI,"PF,%b" }, /* 55: 0110 0100 0101 0101 xxxx xxxx */
- {ACI,"MKH,%b" }, /* 56: 0110 0100 0101 0110 xxxx xxxx */
- {ACI,"MKL,%b" }, /* 57: 0110 0100 0101 0111 xxxx xxxx */
- {OFFI,"PA,%b" }, /* 58: 0110 0100 0101 1000 xxxx xxxx */
- {OFFI,"PB,%b" }, /* 59: 0110 0100 0101 1001 xxxx xxxx */
- {OFFI,"PC,%b" }, /* 5a: 0110 0100 0101 1010 xxxx xxxx */
- {OFFI,"PD,%b" }, /* 5b: 0110 0100 0101 1011 xxxx xxxx */
- {illegal,nullptr }, /* 5c: 0110 0100 0101 1100 xxxx xxxx */
- {OFFI,"PF,%b" }, /* 5d: 0110 0100 0101 1101 xxxx xxxx */
- {OFFI,"MKH,%b" }, /* 5e: 0110 0100 0101 1110 xxxx xxxx */
- {OFFI,"MKL,%b" }, /* 5f: 0110 0100 0101 1111 xxxx xxxx */
+ {ACI, "PA,%b" }, // 50: 0110 0100 0101 0000 xxxx xxxx
+ {ACI, "PB,%b" }, // 51: 0110 0100 0101 0001 xxxx xxxx
+ {ACI, "PC,%b" }, // 52: 0110 0100 0101 0010 xxxx xxxx
+ {ACI, "PD,%b" }, // 53: 0110 0100 0101 0011 xxxx xxxx
+ { }, // 54: 0110 0100 0101 0100 xxxx xxxx
+ {ACI, "PF,%b" }, // 55: 0110 0100 0101 0101 xxxx xxxx
+ {ACI, "MKH,%b" }, // 56: 0110 0100 0101 0110 xxxx xxxx
+ {ACI, "MKL,%b" }, // 57: 0110 0100 0101 0111 xxxx xxxx
+ {OFFI, "PA,%b" }, // 58: 0110 0100 0101 1000 xxxx xxxx
+ {OFFI, "PB,%b" }, // 59: 0110 0100 0101 1001 xxxx xxxx
+ {OFFI, "PC,%b" }, // 5a: 0110 0100 0101 1010 xxxx xxxx
+ {OFFI, "PD,%b" }, // 5b: 0110 0100 0101 1011 xxxx xxxx
+ { }, // 5c: 0110 0100 0101 1100 xxxx xxxx
+ {OFFI, "PF,%b" }, // 5d: 0110 0100 0101 1101 xxxx xxxx
+ {OFFI, "MKH,%b" }, // 5e: 0110 0100 0101 1110 xxxx xxxx
+ {OFFI, "MKL,%b" }, // 5f: 0110 0100 0101 1111 xxxx xxxx
- {SUI,"PA,%b" }, /* 60: 0110 0100 0110 0000 xxxx xxxx */
- {SUI,"PB,%b" }, /* 61: 0110 0100 0110 0001 xxxx xxxx */
- {SUI,"PC,%b" }, /* 62: 0110 0100 0110 0010 xxxx xxxx */
- {SUI,"PD,%b" }, /* 63: 0110 0100 0110 0011 xxxx xxxx */
- {illegal,nullptr }, /* 64: 0110 0100 0110 0100 xxxx xxxx */
- {SUI,"PF,%b" }, /* 65: 0110 0100 0110 0101 xxxx xxxx */
- {SUI,"MKH,%b" }, /* 66: 0110 0100 0110 0110 xxxx xxxx */
- {SUI,"MKL,%b" }, /* 67: 0110 0100 0110 0111 xxxx xxxx */
- {NEI,"PA,%b" }, /* 68: 0110 0100 0110 1000 xxxx xxxx */
- {NEI,"PB,%b" }, /* 69: 0110 0100 0110 1001 xxxx xxxx */
- {NEI,"PC,%b" }, /* 6a: 0110 0100 0110 1010 xxxx xxxx */
- {NEI,"PD,%b" }, /* 6b: 0110 0100 0110 1011 xxxx xxxx */
- {illegal,nullptr }, /* 6c: 0110 0100 0110 1100 xxxx xxxx */
- {NEI,"PF,%b" }, /* 6d: 0110 0100 0110 1101 xxxx xxxx */
- {NEI,"MKH,%b" }, /* 6e: 0110 0100 0110 1110 xxxx xxxx */
- {NEI,"MKL,%b" }, /* 6f: 0110 0100 0110 1111 xxxx xxxx */
+ {SUI, "PA,%b" }, // 60: 0110 0100 0110 0000 xxxx xxxx
+ {SUI, "PB,%b" }, // 61: 0110 0100 0110 0001 xxxx xxxx
+ {SUI, "PC,%b" }, // 62: 0110 0100 0110 0010 xxxx xxxx
+ {SUI, "PD,%b" }, // 63: 0110 0100 0110 0011 xxxx xxxx
+ { }, // 64: 0110 0100 0110 0100 xxxx xxxx
+ {SUI, "PF,%b" }, // 65: 0110 0100 0110 0101 xxxx xxxx
+ {SUI, "MKH,%b" }, // 66: 0110 0100 0110 0110 xxxx xxxx
+ {SUI, "MKL,%b" }, // 67: 0110 0100 0110 0111 xxxx xxxx
+ {NEI, "PA,%b" }, // 68: 0110 0100 0110 1000 xxxx xxxx
+ {NEI, "PB,%b" }, // 69: 0110 0100 0110 1001 xxxx xxxx
+ {NEI, "PC,%b" }, // 6a: 0110 0100 0110 1010 xxxx xxxx
+ {NEI, "PD,%b" }, // 6b: 0110 0100 0110 1011 xxxx xxxx
+ { }, // 6c: 0110 0100 0110 1100 xxxx xxxx
+ {NEI, "PF,%b" }, // 6d: 0110 0100 0110 1101 xxxx xxxx
+ {NEI, "MKH,%b" }, // 6e: 0110 0100 0110 1110 xxxx xxxx
+ {NEI, "MKL,%b" }, // 6f: 0110 0100 0110 1111 xxxx xxxx
- {SBI,"PA,%b" }, /* 70: 0110 0100 0111 0000 xxxx xxxx */
- {SBI,"PB,%b" }, /* 71: 0110 0100 0111 0001 xxxx xxxx */
- {SBI,"PC,%b" }, /* 72: 0110 0100 0111 0010 xxxx xxxx */
- {SBI,"PD,%b" }, /* 73: 0110 0100 0111 0011 xxxx xxxx */
- {illegal,nullptr }, /* 74: 0110 0100 0111 0100 xxxx xxxx */
- {SBI,"PF,%b" }, /* 75: 0110 0100 0111 0101 xxxx xxxx */
- {SBI,"MKH,%b" }, /* 76: 0110 0100 0111 0110 xxxx xxxx */
- {SBI,"MKL,%b" }, /* 77: 0110 0100 0111 0111 xxxx xxxx */
- {EQI,"PA,%b" }, /* 78: 0110 0100 0111 1000 xxxx xxxx */
- {EQI,"PB,%b" }, /* 79: 0110 0100 0111 1001 xxxx xxxx */
- {EQI,"PC,%b" }, /* 7a: 0110 0100 0111 1010 xxxx xxxx */
- {EQI,"PD,%b" }, /* 7b: 0110 0100 0111 1011 xxxx xxxx */
- {illegal,nullptr }, /* 7c: 0110 0100 0111 1100 xxxx xxxx */
- {EQI,"PF,%b" }, /* 7d: 0110 0100 0111 1101 xxxx xxxx */
- {EQI,"MKH,%b" }, /* 7e: 0110 0100 0111 1110 xxxx xxxx */
- {EQI,"MKL,%b" }, /* 7f: 0110 0100 0111 1111 xxxx xxxx */
+ {SBI, "PA,%b" }, // 70: 0110 0100 0111 0000 xxxx xxxx
+ {SBI, "PB,%b" }, // 71: 0110 0100 0111 0001 xxxx xxxx
+ {SBI, "PC,%b" }, // 72: 0110 0100 0111 0010 xxxx xxxx
+ {SBI, "PD,%b" }, // 73: 0110 0100 0111 0011 xxxx xxxx
+ { }, // 74: 0110 0100 0111 0100 xxxx xxxx
+ {SBI, "PF,%b" }, // 75: 0110 0100 0111 0101 xxxx xxxx
+ {SBI, "MKH,%b" }, // 76: 0110 0100 0111 0110 xxxx xxxx
+ {SBI, "MKL,%b" }, // 77: 0110 0100 0111 0111 xxxx xxxx
+ {EQI, "PA,%b" }, // 78: 0110 0100 0111 1000 xxxx xxxx
+ {EQI, "PB,%b" }, // 79: 0110 0100 0111 1001 xxxx xxxx
+ {EQI, "PC,%b" }, // 7a: 0110 0100 0111 1010 xxxx xxxx
+ {EQI, "PD,%b" }, // 7b: 0110 0100 0111 1011 xxxx xxxx
+ { }, // 7c: 0110 0100 0111 1100 xxxx xxxx
+ {EQI, "PF,%b" }, // 7d: 0110 0100 0111 1101 xxxx xxxx
+ {EQI, "MKH,%b" }, // 7e: 0110 0100 0111 1110 xxxx xxxx
+ {EQI, "MKL,%b" }, // 7f: 0110 0100 0111 1111 xxxx xxxx
- {MVI,"ANM,%b" }, /* 80: 0110 0100 1000 0000 xxxx xxxx */ /* 7810 */
- {MVI,"SMH,%b" }, /* 81: 0110 0100 1000 0001 xxxx xxxx */
- {illegal,nullptr }, /* 82: 0110 0100 1000 0010 xxxx xxxx */
- {MVI,"EOM,%b" }, /* 83: 0110 0100 1000 0011 xxxx xxxx */
- {illegal,nullptr }, /* 84: 0110 0100 1000 0100 xxxx xxxx */
- {MVI,"TMM,%b" }, /* 85: 0110 0100 1000 0101 xxxx xxxx */
- {illegal,nullptr }, /* 86: 0110 0100 1000 0110 xxxx xxxx */
- {illegal,nullptr }, /* 87: 0110 0100 1000 0111 xxxx xxxx */
- {ANI,"ANM,%b" }, /* 88: 0110 0100 1000 1000 xxxx xxxx */ /* 7810 */
- {ANI,"SMH,%b" }, /* 89: 0110 0100 1000 1001 xxxx xxxx */
- {illegal,nullptr }, /* 8a: 0110 0100 1000 1010 xxxx xxxx */
- {ANI,"EOM,%b" }, /* 8b: 0110 0100 1000 1011 xxxx xxxx */
- {illegal,nullptr }, /* 8c: 0110 0100 1000 1100 xxxx xxxx */
- {ANI,"TMM,%b" }, /* 8d: 0110 0100 1000 1101 xxxx xxxx */
- {illegal,nullptr }, /* 8e: 0110 0100 1000 1110 xxxx xxxx */
- {illegal,nullptr }, /* 8f: 0110 0100 1000 1111 xxxx xxxx */
+ {MVI, "ANM,%b" }, // 80: 0110 0100 1000 0000 xxxx xxxx 7810
+ {MVI, "SMH,%b" }, // 81: 0110 0100 1000 0001 xxxx xxxx
+ { }, // 82: 0110 0100 1000 0010 xxxx xxxx
+ {MVI, "EOM,%b" }, // 83: 0110 0100 1000 0011 xxxx xxxx
+ { }, // 84: 0110 0100 1000 0100 xxxx xxxx
+ {MVI, "TMM,%b" }, // 85: 0110 0100 1000 0101 xxxx xxxx
+ { }, // 86: 0110 0100 1000 0110 xxxx xxxx
+ { }, // 87: 0110 0100 1000 0111 xxxx xxxx
+ {ANI, "ANM,%b" }, // 88: 0110 0100 1000 1000 xxxx xxxx 7810
+ {ANI, "SMH,%b" }, // 89: 0110 0100 1000 1001 xxxx xxxx
+ { }, // 8a: 0110 0100 1000 1010 xxxx xxxx
+ {ANI, "EOM,%b" }, // 8b: 0110 0100 1000 1011 xxxx xxxx
+ { }, // 8c: 0110 0100 1000 1100 xxxx xxxx
+ {ANI, "TMM,%b" }, // 8d: 0110 0100 1000 1101 xxxx xxxx
+ { }, // 8e: 0110 0100 1000 1110 xxxx xxxx
+ { }, // 8f: 0110 0100 1000 1111 xxxx xxxx
- {XRI,"ANM,%b" }, /* 90: 0110 0100 1001 0000 xxxx xxxx */ /* 7810 */
- {XRI,"SMH,%b" }, /* 91: 0110 0100 1001 0001 xxxx xxxx */
- {illegal,nullptr }, /* 92: 0110 0100 1001 0010 xxxx xxxx */
- {XRI,"EOM,%b" }, /* 93: 0110 0100 1001 0011 xxxx xxxx */
- {illegal,nullptr }, /* 94: 0110 0100 1001 0100 xxxx xxxx */
- {XRI,"TMM,%b" }, /* 95: 0110 0100 1001 0101 xxxx xxxx */
- {illegal,nullptr }, /* 96: 0110 0100 1001 0110 xxxx xxxx */
- {illegal,nullptr }, /* 97: 0110 0100 1001 0111 xxxx xxxx */
- {ORI,"ANM,%b" }, /* 98: 0110 0100 1001 1000 xxxx xxxx */ /* 7810 */
- {ORI,"SMH,%b" }, /* 99: 0110 0100 1001 1001 xxxx xxxx */
- {illegal,nullptr }, /* 9a: 0110 0100 1001 1010 xxxx xxxx */
- {ORI,"EOM,%b" }, /* 9b: 0110 0100 1001 1011 xxxx xxxx */
- {illegal,nullptr }, /* 9c: 0110 0100 1001 1100 xxxx xxxx */
- {ORI,"TMM,%b" }, /* 9d: 0110 0100 1001 1101 xxxx xxxx */
- {illegal,nullptr }, /* 9e: 0110 0100 1001 1110 xxxx xxxx */
- {illegal,nullptr }, /* 9f: 0110 0100 1001 1111 xxxx xxxx */
+ {XRI, "ANM,%b" }, // 90: 0110 0100 1001 0000 xxxx xxxx 7810
+ {XRI, "SMH,%b" }, // 91: 0110 0100 1001 0001 xxxx xxxx
+ { }, // 92: 0110 0100 1001 0010 xxxx xxxx
+ {XRI, "EOM,%b" }, // 93: 0110 0100 1001 0011 xxxx xxxx
+ { }, // 94: 0110 0100 1001 0100 xxxx xxxx
+ {XRI, "TMM,%b" }, // 95: 0110 0100 1001 0101 xxxx xxxx
+ { }, // 96: 0110 0100 1001 0110 xxxx xxxx
+ { }, // 97: 0110 0100 1001 0111 xxxx xxxx
+ {ORI, "ANM,%b" }, // 98: 0110 0100 1001 1000 xxxx xxxx 7810
+ {ORI, "SMH,%b" }, // 99: 0110 0100 1001 1001 xxxx xxxx
+ { }, // 9a: 0110 0100 1001 1010 xxxx xxxx
+ {ORI, "EOM,%b" }, // 9b: 0110 0100 1001 1011 xxxx xxxx
+ { }, // 9c: 0110 0100 1001 1100 xxxx xxxx
+ {ORI, "TMM,%b" }, // 9d: 0110 0100 1001 1101 xxxx xxxx
+ { }, // 9e: 0110 0100 1001 1110 xxxx xxxx
+ { }, // 9f: 0110 0100 1001 1111 xxxx xxxx
- {ADINC,"ANM,%b" }, /* a0: 0110 0100 1010 0000 xxxx xxxx */ /* 7810 */
- {ADINC,"SMH,%b" }, /* a1: 0110 0100 1010 0001 xxxx xxxx */
- {illegal,nullptr }, /* a2: 0110 0100 1010 0010 xxxx xxxx */
- {ADINC,"EOM,%b" }, /* a3: 0110 0100 1010 0011 xxxx xxxx */
- {illegal,nullptr }, /* a4: 0110 0100 1010 0100 xxxx xxxx */
- {ADINC,"TMM,%b" }, /* a5: 0110 0100 1010 0101 xxxx xxxx */
- {illegal,nullptr }, /* a6: 0110 0100 1010 0110 xxxx xxxx */
- {illegal,nullptr }, /* a7: 0110 0100 1010 0111 xxxx xxxx */
- {GTI,"ANM,%b" }, /* a8: 0110 0100 1010 1000 xxxx xxxx */ /* 7810 */
- {GTI,"SMH,%b" }, /* a9: 0110 0100 1010 1001 xxxx xxxx */
- {illegal,nullptr }, /* aa: 0110 0100 1010 1010 xxxx xxxx */
- {GTI,"EOM,%b" }, /* ab: 0110 0100 1010 1011 xxxx xxxx */
- {illegal,nullptr }, /* ac: 0110 0100 1010 1100 xxxx xxxx */
- {GTI,"TMM,%b" }, /* ad: 0110 0100 1010 1101 xxxx xxxx */
- {illegal,nullptr }, /* ae: 0110 0100 1010 1110 xxxx xxxx */
- {illegal,nullptr }, /* af: 0110 0100 1010 1111 xxxx xxxx */
+ {ADINC, "ANM,%b" }, // a0: 0110 0100 1010 0000 xxxx xxxx 7810
+ {ADINC, "SMH,%b" }, // a1: 0110 0100 1010 0001 xxxx xxxx
+ { }, // a2: 0110 0100 1010 0010 xxxx xxxx
+ {ADINC, "EOM,%b" }, // a3: 0110 0100 1010 0011 xxxx xxxx
+ { }, // a4: 0110 0100 1010 0100 xxxx xxxx
+ {ADINC, "TMM,%b" }, // a5: 0110 0100 1010 0101 xxxx xxxx
+ { }, // a6: 0110 0100 1010 0110 xxxx xxxx
+ { }, // a7: 0110 0100 1010 0111 xxxx xxxx
+ {GTI, "ANM,%b" }, // a8: 0110 0100 1010 1000 xxxx xxxx 7810
+ {GTI, "SMH,%b" }, // a9: 0110 0100 1010 1001 xxxx xxxx
+ { }, // aa: 0110 0100 1010 1010 xxxx xxxx
+ {GTI, "EOM,%b" }, // ab: 0110 0100 1010 1011 xxxx xxxx
+ { }, // ac: 0110 0100 1010 1100 xxxx xxxx
+ {GTI, "TMM,%b" }, // ad: 0110 0100 1010 1101 xxxx xxxx
+ { }, // ae: 0110 0100 1010 1110 xxxx xxxx
+ { }, // af: 0110 0100 1010 1111 xxxx xxxx
- {SUINB,"ANM,%b" }, /* b0: 0110 0100 1011 0000 xxxx xxxx */ /* 7810 */
- {SUINB,"SMH,%b" }, /* b1: 0110 0100 1011 0001 xxxx xxxx */
- {illegal,nullptr }, /* b2: 0110 0100 1011 0010 xxxx xxxx */
- {SUINB,"EOM,%b" }, /* b3: 0110 0100 1011 0011 xxxx xxxx */
- {illegal,nullptr }, /* b4: 0110 0100 1011 0100 xxxx xxxx */
- {SUINB,"TMM,%b" }, /* b5: 0110 0100 1011 0101 xxxx xxxx */
- {illegal,nullptr }, /* b6: 0110 0100 1011 0110 xxxx xxxx */
- {illegal,nullptr }, /* b7: 0110 0100 1011 0111 xxxx xxxx */
- {LTI,"ANM,%b" }, /* b8: 0110 0100 1011 1000 xxxx xxxx */ /* 7810 */
- {LTI,"SMH,%b" }, /* b9: 0110 0100 1011 1001 xxxx xxxx */
- {illegal,nullptr }, /* ba: 0110 0100 1011 1010 xxxx xxxx */
- {LTI,"EOM,%b" }, /* bb: 0110 0100 1011 1011 xxxx xxxx */
- {illegal,nullptr }, /* bc: 0110 0100 1011 1100 xxxx xxxx */
- {LTI,"TMM,%b" }, /* bd: 0110 0100 1011 1101 xxxx xxxx */
- {illegal,nullptr }, /* be: 0110 0100 1011 1110 xxxx xxxx */
- {illegal,nullptr }, /* bf: 0110 0100 1011 1111 xxxx xxxx */
+ {SUINB, "ANM,%b" }, // b0: 0110 0100 1011 0000 xxxx xxxx 7810
+ {SUINB, "SMH,%b" }, // b1: 0110 0100 1011 0001 xxxx xxxx
+ { }, // b2: 0110 0100 1011 0010 xxxx xxxx
+ {SUINB, "EOM,%b" }, // b3: 0110 0100 1011 0011 xxxx xxxx
+ { }, // b4: 0110 0100 1011 0100 xxxx xxxx
+ {SUINB, "TMM,%b" }, // b5: 0110 0100 1011 0101 xxxx xxxx
+ { }, // b6: 0110 0100 1011 0110 xxxx xxxx
+ { }, // b7: 0110 0100 1011 0111 xxxx xxxx
+ {LTI, "ANM,%b" }, // b8: 0110 0100 1011 1000 xxxx xxxx 7810
+ {LTI, "SMH,%b" }, // b9: 0110 0100 1011 1001 xxxx xxxx
+ { }, // ba: 0110 0100 1011 1010 xxxx xxxx
+ {LTI, "EOM,%b" }, // bb: 0110 0100 1011 1011 xxxx xxxx
+ { }, // bc: 0110 0100 1011 1100 xxxx xxxx
+ {LTI, "TMM,%b" }, // bd: 0110 0100 1011 1101 xxxx xxxx
+ { }, // be: 0110 0100 1011 1110 xxxx xxxx
+ { }, // bf: 0110 0100 1011 1111 xxxx xxxx
- {ADI,"ANM,%b" }, /* c0: 0110 0100 1100 0000 xxxx xxxx */ /* 7810 */
- {ADI,"SMH,%b" }, /* c1: 0110 0100 1100 0001 xxxx xxxx */
- {illegal,nullptr }, /* c2: 0110 0100 1100 0010 xxxx xxxx */
- {ADI,"EOM,%b" }, /* c3: 0110 0100 1100 0011 xxxx xxxx */
- {illegal,nullptr }, /* c4: 0110 0100 1100 0100 xxxx xxxx */
- {ADI,"TMM,%b" }, /* c5: 0110 0100 1100 0101 xxxx xxxx */
- {illegal,nullptr }, /* c6: 0110 0100 1100 0110 xxxx xxxx */
- {illegal,nullptr }, /* c7: 0110 0100 1100 0111 xxxx xxxx */
- {ONI,"ANM,%b" }, /* c8: 0110 0100 1100 1000 xxxx xxxx */ /* 7810 */
- {ONI,"SMH,%b" }, /* c9: 0110 0100 1100 1001 xxxx xxxx */
- {illegal,nullptr }, /* ca: 0110 0100 1100 1010 xxxx xxxx */
- {ONI,"EOM,%b" }, /* cb: 0110 0100 1100 1011 xxxx xxxx */
- {illegal,nullptr }, /* cc: 0110 0100 1100 1100 xxxx xxxx */
- {ONI,"TMM,%b" }, /* cd: 0110 0100 1100 1101 xxxx xxxx */
- {illegal,nullptr }, /* ce: 0110 0100 1100 1110 xxxx xxxx */
- {illegal,nullptr }, /* cf: 0110 0100 1100 1111 xxxx xxxx */
+ {ADI, "ANM,%b" }, // c0: 0110 0100 1100 0000 xxxx xxxx 7810
+ {ADI, "SMH,%b" }, // c1: 0110 0100 1100 0001 xxxx xxxx
+ { }, // c2: 0110 0100 1100 0010 xxxx xxxx
+ {ADI, "EOM,%b" }, // c3: 0110 0100 1100 0011 xxxx xxxx
+ { }, // c4: 0110 0100 1100 0100 xxxx xxxx
+ {ADI, "TMM,%b" }, // c5: 0110 0100 1100 0101 xxxx xxxx
+ { }, // c6: 0110 0100 1100 0110 xxxx xxxx
+ { }, // c7: 0110 0100 1100 0111 xxxx xxxx
+ {ONI, "ANM,%b" }, // c8: 0110 0100 1100 1000 xxxx xxxx 7810
+ {ONI, "SMH,%b" }, // c9: 0110 0100 1100 1001 xxxx xxxx
+ { }, // ca: 0110 0100 1100 1010 xxxx xxxx
+ {ONI, "EOM,%b" }, // cb: 0110 0100 1100 1011 xxxx xxxx
+ { }, // cc: 0110 0100 1100 1100 xxxx xxxx
+ {ONI, "TMM,%b" }, // cd: 0110 0100 1100 1101 xxxx xxxx
+ { }, // ce: 0110 0100 1100 1110 xxxx xxxx
+ { }, // cf: 0110 0100 1100 1111 xxxx xxxx
- {ACI,"ANM,%b" }, /* d0: 0110 0100 1101 0000 xxxx xxxx */ /* 7810 */
- {ACI,"SMH,%b" }, /* d1: 0110 0100 1101 0001 xxxx xxxx */
- {illegal,nullptr }, /* d2: 0110 0100 1101 0010 xxxx xxxx */
- {ACI,"EOM,%b" }, /* d3: 0110 0100 1101 0011 xxxx xxxx */
- {illegal,nullptr }, /* d4: 0110 0100 1101 0100 xxxx xxxx */
- {ACI,"TMM,%b" }, /* d5: 0110 0100 1101 0101 xxxx xxxx */
- {illegal,nullptr }, /* d6: 0110 0100 1101 0110 xxxx xxxx */
- {illegal,nullptr }, /* d7: 0110 0100 1101 0111 xxxx xxxx */
- {OFFI,"ANM,%b" }, /* d8: 0110 0100 1101 1000 xxxx xxxx */ /* 7810 */
- {OFFI,"SMH,%b" }, /* d9: 0110 0100 1101 1001 xxxx xxxx */
- {illegal,nullptr }, /* da: 0110 0100 1101 1010 xxxx xxxx */
- {OFFI,"EOM,%b" }, /* db: 0110 0100 1101 1011 xxxx xxxx */
- {illegal,nullptr }, /* dc: 0110 0100 1101 1100 xxxx xxxx */
- {OFFI,"TMM,%b" }, /* dd: 0110 0100 1101 1101 xxxx xxxx */
- {illegal,nullptr }, /* de: 0110 0100 1101 1110 xxxx xxxx */
- {illegal,nullptr }, /* df: 0110 0100 1101 1111 xxxx xxxx */
+ {ACI, "ANM,%b" }, // d0: 0110 0100 1101 0000 xxxx xxxx 7810
+ {ACI, "SMH,%b" }, // d1: 0110 0100 1101 0001 xxxx xxxx
+ { }, // d2: 0110 0100 1101 0010 xxxx xxxx
+ {ACI, "EOM,%b" }, // d3: 0110 0100 1101 0011 xxxx xxxx
+ { }, // d4: 0110 0100 1101 0100 xxxx xxxx
+ {ACI, "TMM,%b" }, // d5: 0110 0100 1101 0101 xxxx xxxx
+ { }, // d6: 0110 0100 1101 0110 xxxx xxxx
+ { }, // d7: 0110 0100 1101 0111 xxxx xxxx
+ {OFFI, "ANM,%b" }, // d8: 0110 0100 1101 1000 xxxx xxxx 7810
+ {OFFI, "SMH,%b" }, // d9: 0110 0100 1101 1001 xxxx xxxx
+ { }, // da: 0110 0100 1101 1010 xxxx xxxx
+ {OFFI, "EOM,%b" }, // db: 0110 0100 1101 1011 xxxx xxxx
+ { }, // dc: 0110 0100 1101 1100 xxxx xxxx
+ {OFFI, "TMM,%b" }, // dd: 0110 0100 1101 1101 xxxx xxxx
+ { }, // de: 0110 0100 1101 1110 xxxx xxxx
+ { }, // df: 0110 0100 1101 1111 xxxx xxxx
- {SUI,"ANM,%b" }, /* e0: 0110 0100 1110 0000 xxxx xxxx */ /* 7810 */
- {SUI,"SMH,%b" }, /* e1: 0110 0100 1110 0001 xxxx xxxx */
- {illegal,nullptr }, /* e2: 0110 0100 1110 0010 xxxx xxxx */
- {SUI,"EOM,%b" }, /* e3: 0110 0100 1110 0011 xxxx xxxx */
- {illegal,nullptr }, /* e4: 0110 0100 1110 0100 xxxx xxxx */
- {SUI,"TMM,%b" }, /* e5: 0110 0100 1110 0101 xxxx xxxx */
- {illegal,nullptr }, /* e6: 0110 0100 1110 0110 xxxx xxxx */
- {illegal,nullptr }, /* e7: 0110 0100 1110 0111 xxxx xxxx */
- {NEI,"ANM,%b" }, /* e8: 0110 0100 1110 1000 xxxx xxxx */ /* 7810 */
- {NEI,"SMH,%b" }, /* e9: 0110 0100 1110 1001 xxxx xxxx */
- {illegal,nullptr }, /* ea: 0110 0100 1110 1010 xxxx xxxx */
- {NEI,"EOM,%b" }, /* eb: 0110 0100 1110 1011 xxxx xxxx */
- {illegal,nullptr }, /* ec: 0110 0100 1110 1100 xxxx xxxx */
- {NEI,"TMM,%b" }, /* ed: 0110 0100 1110 1101 xxxx xxxx */
- {illegal,nullptr }, /* ee: 0110 0100 1110 1110 xxxx xxxx */
- {illegal,nullptr }, /* ef: 0110 0100 1110 1111 xxxx xxxx */
+ {SUI, "ANM,%b" }, // e0: 0110 0100 1110 0000 xxxx xxxx 7810
+ {SUI, "SMH,%b" }, // e1: 0110 0100 1110 0001 xxxx xxxx
+ { }, // e2: 0110 0100 1110 0010 xxxx xxxx
+ {SUI, "EOM,%b" }, // e3: 0110 0100 1110 0011 xxxx xxxx
+ { }, // e4: 0110 0100 1110 0100 xxxx xxxx
+ {SUI, "TMM,%b" }, // e5: 0110 0100 1110 0101 xxxx xxxx
+ { }, // e6: 0110 0100 1110 0110 xxxx xxxx
+ { }, // e7: 0110 0100 1110 0111 xxxx xxxx
+ {NEI, "ANM,%b" }, // e8: 0110 0100 1110 1000 xxxx xxxx 7810
+ {NEI, "SMH,%b" }, // e9: 0110 0100 1110 1001 xxxx xxxx
+ { }, // ea: 0110 0100 1110 1010 xxxx xxxx
+ {NEI, "EOM,%b" }, // eb: 0110 0100 1110 1011 xxxx xxxx
+ { }, // ec: 0110 0100 1110 1100 xxxx xxxx
+ {NEI, "TMM,%b" }, // ed: 0110 0100 1110 1101 xxxx xxxx
+ { }, // ee: 0110 0100 1110 1110 xxxx xxxx
+ { }, // ef: 0110 0100 1110 1111 xxxx xxxx
- {SBI,"ANM,%b" }, /* f0: 0110 0100 1111 0000 xxxx xxxx */ /* 7810 */
- {SBI,"SMH,%b" }, /* f1: 0110 0100 1111 0001 xxxx xxxx */
- {illegal,nullptr }, /* f2: 0110 0100 1111 0010 xxxx xxxx */
- {SBI,"EOM,%b" }, /* f3: 0110 0100 1111 0011 xxxx xxxx */
- {illegal,nullptr }, /* f4: 0110 0100 1111 0100 xxxx xxxx */
- {SBI,"TMM,%b" }, /* f5: 0110 0100 1111 0101 xxxx xxxx */
- {illegal,nullptr }, /* f6: 0110 0100 1111 0110 xxxx xxxx */
- {illegal,nullptr }, /* f7: 0110 0100 1111 0111 xxxx xxxx */
- {EQI,"ANM,%b" }, /* f8: 0110 0100 1111 1000 xxxx xxxx */ /* 7810 */
- {EQI,"SMH,%b" }, /* f9: 0110 0100 1111 1001 xxxx xxxx */
- {illegal,nullptr }, /* fa: 0110 0100 1111 1010 xxxx xxxx */
- {EQI,"EOM,%b" }, /* fb: 0110 0100 1111 1011 xxxx xxxx */
- {illegal,nullptr }, /* fc: 0110 0100 1111 1100 xxxx xxxx */
- {EQI,"TMM,%b" }, /* fd: 0110 0100 1111 1101 xxxx xxxx */
- {illegal,nullptr }, /* fe: 0110 0100 1111 1110 xxxx xxxx */
- {illegal,nullptr } /* ff: 0110 0100 1111 1111 xxxx xxxx */
+ {SBI, "ANM,%b" }, // f0: 0110 0100 1111 0000 xxxx xxxx 7810
+ {SBI, "SMH,%b" }, // f1: 0110 0100 1111 0001 xxxx xxxx
+ { }, // f2: 0110 0100 1111 0010 xxxx xxxx
+ {SBI, "EOM,%b" }, // f3: 0110 0100 1111 0011 xxxx xxxx
+ { }, // f4: 0110 0100 1111 0100 xxxx xxxx
+ {SBI, "TMM,%b" }, // f5: 0110 0100 1111 0101 xxxx xxxx
+ { }, // f6: 0110 0100 1111 0110 xxxx xxxx
+ { }, // f7: 0110 0100 1111 0111 xxxx xxxx
+ {EQI, "ANM,%b" }, // f8: 0110 0100 1111 1000 xxxx xxxx 7810
+ {EQI, "SMH,%b" }, // f9: 0110 0100 1111 1001 xxxx xxxx
+ { }, // fa: 0110 0100 1111 1010 xxxx xxxx
+ {EQI, "EOM,%b" }, // fb: 0110 0100 1111 1011 xxxx xxxx
+ { }, // fc: 0110 0100 1111 1100 xxxx xxxx
+ {EQI, "TMM,%b" }, // fd: 0110 0100 1111 1101 xxxx xxxx
+ { }, // fe: 0110 0100 1111 1110 xxxx xxxx
+ { } // ff: 0110 0100 1111 1111 xxxx xxxx
};
-static const struct dasm_s dasm64_7807[256] =
+const dasm_s dasm_s::d64_7807[256] =
{
- {MVI,"PA,%b" }, /* 00: 0110 0100 0000 0000 xxxx xxxx */
- {MVI,"PB,%b" }, /* 01: 0110 0100 0000 0001 xxxx xxxx */
- {MVI,"PC,%b" }, /* 02: 0110 0100 0000 0010 xxxx xxxx */
- {MVI,"PD,%b" }, /* 03: 0110 0100 0000 0011 xxxx xxxx */
- {illegal,nullptr }, /* 04: 0110 0100 0000 0100 xxxx xxxx */
- {MVI,"PF,%b" }, /* 05: 0110 0100 0000 0101 xxxx xxxx */
- {MVI,"MKH,%b" }, /* 06: 0110 0100 0000 0110 xxxx xxxx */
- {MVI,"MKL,%b" }, /* 07: 0110 0100 0000 0111 xxxx xxxx */
- {ANI,"PA,%b" }, /* 08: 0110 0100 0000 1000 xxxx xxxx */
- {ANI,"PB,%b" }, /* 09: 0110 0100 0000 1001 xxxx xxxx */
- {ANI,"PC,%b" }, /* 0a: 0110 0100 0000 1010 xxxx xxxx */
- {ANI,"PD,%b" }, /* 0b: 0110 0100 0000 1011 xxxx xxxx */
- {illegal,nullptr }, /* 0c: 0110 0100 0000 1100 xxxx xxxx */
- {ANI,"PF,%b" }, /* 0d: 0110 0100 0000 1101 xxxx xxxx */
- {ANI,"MKH,%b" }, /* 0e: 0110 0100 0000 1110 xxxx xxxx */
- {ANI,"MKL,%b" }, /* 0f: 0110 0100 0000 1111 xxxx xxxx */
+ {MVI, "PA,%b" }, // 00: 0110 0100 0000 0000 xxxx xxxx
+ {MVI, "PB,%b" }, // 01: 0110 0100 0000 0001 xxxx xxxx
+ {MVI, "PC,%b" }, // 02: 0110 0100 0000 0010 xxxx xxxx
+ {MVI, "PD,%b" }, // 03: 0110 0100 0000 0011 xxxx xxxx
+ { }, // 04: 0110 0100 0000 0100 xxxx xxxx
+ {MVI, "PF,%b" }, // 05: 0110 0100 0000 0101 xxxx xxxx
+ {MVI, "MKH,%b" }, // 06: 0110 0100 0000 0110 xxxx xxxx
+ {MVI, "MKL,%b" }, // 07: 0110 0100 0000 0111 xxxx xxxx
+ {ANI, "PA,%b" }, // 08: 0110 0100 0000 1000 xxxx xxxx
+ {ANI, "PB,%b" }, // 09: 0110 0100 0000 1001 xxxx xxxx
+ {ANI, "PC,%b" }, // 0a: 0110 0100 0000 1010 xxxx xxxx
+ {ANI, "PD,%b" }, // 0b: 0110 0100 0000 1011 xxxx xxxx
+ { }, // 0c: 0110 0100 0000 1100 xxxx xxxx
+ {ANI, "PF,%b" }, // 0d: 0110 0100 0000 1101 xxxx xxxx
+ {ANI, "MKH,%b" }, // 0e: 0110 0100 0000 1110 xxxx xxxx
+ {ANI, "MKL,%b" }, // 0f: 0110 0100 0000 1111 xxxx xxxx
- {XRI,"PA,%b" }, /* 10: 0110 0100 0001 0000 xxxx xxxx */
- {XRI,"PB,%b" }, /* 11: 0110 0100 0001 0001 xxxx xxxx */
- {XRI,"PC,%b" }, /* 12: 0110 0100 0001 0010 xxxx xxxx */
- {XRI,"PD,%b" }, /* 13: 0110 0100 0001 0011 xxxx xxxx */
- {illegal,nullptr }, /* 14: 0110 0100 0001 0100 xxxx xxxx */
- {XRI,"PF,%b" }, /* 15: 0110 0100 0001 0101 xxxx xxxx */
- {XRI,"MKH,%b" }, /* 16: 0110 0100 0001 0110 xxxx xxxx */
- {XRI,"MKL,%b" }, /* 17: 0110 0100 0001 0111 xxxx xxxx */
- {ORI,"PA,%b" }, /* 18: 0110 0100 0001 1000 xxxx xxxx */
- {ORI,"PB,%b" }, /* 19: 0110 0100 0001 1001 xxxx xxxx */
- {ORI,"PC,%b" }, /* 1a: 0110 0100 0001 1010 xxxx xxxx */
- {ORI,"PD,%b" }, /* 1b: 0110 0100 0001 1011 xxxx xxxx */
- {illegal,nullptr }, /* 1c: 0110 0100 0001 1100 xxxx xxxx */
- {ORI,"PF,%b" }, /* 1d: 0110 0100 0001 1101 xxxx xxxx */
- {ORI,"MKH,%b" }, /* 1e: 0110 0100 0001 1110 xxxx xxxx */
- {ORI,"MKL,%b" }, /* 1f: 0110 0100 0001 1111 xxxx xxxx */
+ {XRI, "PA,%b" }, // 10: 0110 0100 0001 0000 xxxx xxxx
+ {XRI, "PB,%b" }, // 11: 0110 0100 0001 0001 xxxx xxxx
+ {XRI, "PC,%b" }, // 12: 0110 0100 0001 0010 xxxx xxxx
+ {XRI, "PD,%b" }, // 13: 0110 0100 0001 0011 xxxx xxxx
+ { }, // 14: 0110 0100 0001 0100 xxxx xxxx
+ {XRI, "PF,%b" }, // 15: 0110 0100 0001 0101 xxxx xxxx
+ {XRI, "MKH,%b" }, // 16: 0110 0100 0001 0110 xxxx xxxx
+ {XRI, "MKL,%b" }, // 17: 0110 0100 0001 0111 xxxx xxxx
+ {ORI, "PA,%b" }, // 18: 0110 0100 0001 1000 xxxx xxxx
+ {ORI, "PB,%b" }, // 19: 0110 0100 0001 1001 xxxx xxxx
+ {ORI, "PC,%b" }, // 1a: 0110 0100 0001 1010 xxxx xxxx
+ {ORI, "PD,%b" }, // 1b: 0110 0100 0001 1011 xxxx xxxx
+ { }, // 1c: 0110 0100 0001 1100 xxxx xxxx
+ {ORI, "PF,%b" }, // 1d: 0110 0100 0001 1101 xxxx xxxx
+ {ORI, "MKH,%b" }, // 1e: 0110 0100 0001 1110 xxxx xxxx
+ {ORI, "MKL,%b" }, // 1f: 0110 0100 0001 1111 xxxx xxxx
- {ADINC,"PA,%b" }, /* 20: 0110 0100 0010 0000 xxxx xxxx */
- {ADINC,"PB,%b" }, /* 21: 0110 0100 0010 0001 xxxx xxxx */
- {ADINC,"PC,%b" }, /* 22: 0110 0100 0010 0010 xxxx xxxx */
- {ADINC,"PD,%b" }, /* 23: 0110 0100 0010 0011 xxxx xxxx */
- {illegal,nullptr }, /* 24: 0110 0100 0010 0100 xxxx xxxx */
- {ADINC,"PF,%b" }, /* 25: 0110 0100 0010 0101 xxxx xxxx */
- {ADINC,"MKH,%b" }, /* 26: 0110 0100 0010 0110 xxxx xxxx */
- {ADINC,"MKL,%b" }, /* 27: 0110 0100 0010 0111 xxxx xxxx */
- {GTI,"PA,%b" }, /* 28: 0110 0100 0010 1000 xxxx xxxx */
- {GTI,"PB,%b" }, /* 29: 0110 0100 0010 1001 xxxx xxxx */
- {GTI,"PC,%b" }, /* 2a: 0110 0100 0010 1010 xxxx xxxx */
- {GTI,"PD,%b" }, /* 2b: 0110 0100 0010 1011 xxxx xxxx */
- {illegal,nullptr }, /* 2c: 0110 0100 0010 1100 xxxx xxxx */
- {GTI,"PF,%b" }, /* 2d: 0110 0100 0010 1101 xxxx xxxx */
- {GTI,"MKH,%b" }, /* 2e: 0110 0100 0010 1110 xxxx xxxx */
- {GTI,"MKL,%b" }, /* 2f: 0110 0100 0010 1111 xxxx xxxx */
+ {ADINC, "PA,%b" }, // 20: 0110 0100 0010 0000 xxxx xxxx
+ {ADINC, "PB,%b" }, // 21: 0110 0100 0010 0001 xxxx xxxx
+ {ADINC, "PC,%b" }, // 22: 0110 0100 0010 0010 xxxx xxxx
+ {ADINC, "PD,%b" }, // 23: 0110 0100 0010 0011 xxxx xxxx
+ { }, // 24: 0110 0100 0010 0100 xxxx xxxx
+ {ADINC, "PF,%b" }, // 25: 0110 0100 0010 0101 xxxx xxxx
+ {ADINC, "MKH,%b" }, // 26: 0110 0100 0010 0110 xxxx xxxx
+ {ADINC, "MKL,%b" }, // 27: 0110 0100 0010 0111 xxxx xxxx
+ {GTI, "PA,%b" }, // 28: 0110 0100 0010 1000 xxxx xxxx
+ {GTI, "PB,%b" }, // 29: 0110 0100 0010 1001 xxxx xxxx
+ {GTI, "PC,%b" }, // 2a: 0110 0100 0010 1010 xxxx xxxx
+ {GTI, "PD,%b" }, // 2b: 0110 0100 0010 1011 xxxx xxxx
+ { }, // 2c: 0110 0100 0010 1100 xxxx xxxx
+ {GTI, "PF,%b" }, // 2d: 0110 0100 0010 1101 xxxx xxxx
+ {GTI, "MKH,%b" }, // 2e: 0110 0100 0010 1110 xxxx xxxx
+ {GTI, "MKL,%b" }, // 2f: 0110 0100 0010 1111 xxxx xxxx
- {SUINB,"PA,%b" }, /* 30: 0110 0100 0011 0000 xxxx xxxx */
- {SUINB,"PB,%b" }, /* 31: 0110 0100 0011 0001 xxxx xxxx */
- {SUINB,"PC,%b" }, /* 32: 0110 0100 0011 0010 xxxx xxxx */
- {SUINB,"PD,%b" }, /* 33: 0110 0100 0011 0011 xxxx xxxx */
- {illegal,nullptr }, /* 34: 0110 0100 0011 0100 xxxx xxxx */
- {SUINB,"PF,%b" }, /* 35: 0110 0100 0011 0101 xxxx xxxx */
- {SUINB,"MKH,%b" }, /* 36: 0110 0100 0011 0110 xxxx xxxx */
- {SUINB,"MKL,%b" }, /* 37: 0110 0100 0011 0111 xxxx xxxx */
- {LTI,"PA,%b" }, /* 38: 0110 0100 0011 1000 xxxx xxxx */
- {LTI,"PB,%b" }, /* 39: 0110 0100 0011 1001 xxxx xxxx */
- {LTI,"PC,%b" }, /* 3a: 0110 0100 0011 1010 xxxx xxxx */
- {LTI,"PD,%b" }, /* 3b: 0110 0100 0011 1011 xxxx xxxx */
- {illegal,nullptr }, /* 3c: 0110 0100 0011 1100 xxxx xxxx */
- {LTI,"PF,%b" }, /* 3d: 0110 0100 0011 1101 xxxx xxxx */
- {LTI,"MKH,%b" }, /* 3e: 0110 0100 0011 1110 xxxx xxxx */
- {LTI,"MKL,%b" }, /* 3f: 0110 0100 0011 1111 xxxx xxxx */
+ {SUINB, "PA,%b" }, // 30: 0110 0100 0011 0000 xxxx xxxx
+ {SUINB, "PB,%b" }, // 31: 0110 0100 0011 0001 xxxx xxxx
+ {SUINB, "PC,%b" }, // 32: 0110 0100 0011 0010 xxxx xxxx
+ {SUINB, "PD,%b" }, // 33: 0110 0100 0011 0011 xxxx xxxx
+ { }, // 34: 0110 0100 0011 0100 xxxx xxxx
+ {SUINB, "PF,%b" }, // 35: 0110 0100 0011 0101 xxxx xxxx
+ {SUINB, "MKH,%b" }, // 36: 0110 0100 0011 0110 xxxx xxxx
+ {SUINB, "MKL,%b" }, // 37: 0110 0100 0011 0111 xxxx xxxx
+ {LTI, "PA,%b" }, // 38: 0110 0100 0011 1000 xxxx xxxx
+ {LTI, "PB,%b" }, // 39: 0110 0100 0011 1001 xxxx xxxx
+ {LTI, "PC,%b" }, // 3a: 0110 0100 0011 1010 xxxx xxxx
+ {LTI, "PD,%b" }, // 3b: 0110 0100 0011 1011 xxxx xxxx
+ { }, // 3c: 0110 0100 0011 1100 xxxx xxxx
+ {LTI, "PF,%b" }, // 3d: 0110 0100 0011 1101 xxxx xxxx
+ {LTI, "MKH,%b" }, // 3e: 0110 0100 0011 1110 xxxx xxxx
+ {LTI, "MKL,%b" }, // 3f: 0110 0100 0011 1111 xxxx xxxx
- {ADI,"PA,%b" }, /* 40: 0110 0100 0100 0000 xxxx xxxx */
- {ADI,"PB,%b" }, /* 41: 0110 0100 0100 0001 xxxx xxxx */
- {ADI,"PC,%b" }, /* 42: 0110 0100 0100 0010 xxxx xxxx */
- {ADI,"PD,%b" }, /* 43: 0110 0100 0100 0011 xxxx xxxx */
- {illegal,nullptr }, /* 44: 0110 0100 0100 0100 xxxx xxxx */
- {ADI,"PF,%b" }, /* 45: 0110 0100 0100 0101 xxxx xxxx */
- {ADI,"MKH,%b" }, /* 46: 0110 0100 0100 0110 xxxx xxxx */
- {ADI,"MKL,%b" }, /* 47: 0110 0100 0100 0111 xxxx xxxx */
- {ONI,"PA,%b" }, /* 48: 0110 0100 0100 1000 xxxx xxxx */
- {ONI,"PB,%b" }, /* 49: 0110 0100 0100 1001 xxxx xxxx */
- {ONI,"PC,%b" }, /* 4a: 0110 0100 0100 1010 xxxx xxxx */
- {ONI,"PD,%b" }, /* 4b: 0110 0100 0100 1011 xxxx xxxx */
- {illegal,nullptr }, /* 4c: 0110 0100 0100 1100 xxxx xxxx */
- {ONI,"PF,%b" }, /* 4d: 0110 0100 0100 1101 xxxx xxxx */
- {ONI,"MKH,%b" }, /* 4e: 0110 0100 0100 1110 xxxx xxxx */
- {ONI,"MKL,%b" }, /* 4f: 0110 0100 0100 1111 xxxx xxxx */
+ {ADI, "PA,%b" }, // 40: 0110 0100 0100 0000 xxxx xxxx
+ {ADI, "PB,%b" }, // 41: 0110 0100 0100 0001 xxxx xxxx
+ {ADI, "PC,%b" }, // 42: 0110 0100 0100 0010 xxxx xxxx
+ {ADI, "PD,%b" }, // 43: 0110 0100 0100 0011 xxxx xxxx
+ { }, // 44: 0110 0100 0100 0100 xxxx xxxx
+ {ADI, "PF,%b" }, // 45: 0110 0100 0100 0101 xxxx xxxx
+ {ADI, "MKH,%b" }, // 46: 0110 0100 0100 0110 xxxx xxxx
+ {ADI, "MKL,%b" }, // 47: 0110 0100 0100 0111 xxxx xxxx
+ {ONI, "PA,%b" }, // 48: 0110 0100 0100 1000 xxxx xxxx
+ {ONI, "PB,%b" }, // 49: 0110 0100 0100 1001 xxxx xxxx
+ {ONI, "PC,%b" }, // 4a: 0110 0100 0100 1010 xxxx xxxx
+ {ONI, "PD,%b" }, // 4b: 0110 0100 0100 1011 xxxx xxxx
+ { }, // 4c: 0110 0100 0100 1100 xxxx xxxx
+ {ONI, "PF,%b" }, // 4d: 0110 0100 0100 1101 xxxx xxxx
+ {ONI, "MKH,%b" }, // 4e: 0110 0100 0100 1110 xxxx xxxx
+ {ONI, "MKL,%b" }, // 4f: 0110 0100 0100 1111 xxxx xxxx
- {ACI,"PA,%b" }, /* 50: 0110 0100 0101 0000 xxxx xxxx */
- {ACI,"PB,%b" }, /* 51: 0110 0100 0101 0001 xxxx xxxx */
- {ACI,"PC,%b" }, /* 52: 0110 0100 0101 0010 xxxx xxxx */
- {ACI,"PD,%b" }, /* 53: 0110 0100 0101 0011 xxxx xxxx */
- {illegal,nullptr }, /* 54: 0110 0100 0101 0100 xxxx xxxx */
- {ACI,"PF,%b" }, /* 55: 0110 0100 0101 0101 xxxx xxxx */
- {ACI,"MKH,%b" }, /* 56: 0110 0100 0101 0110 xxxx xxxx */
- {ACI,"MKL,%b" }, /* 57: 0110 0100 0101 0111 xxxx xxxx */
- {OFFI,"PA,%b" }, /* 58: 0110 0100 0101 1000 xxxx xxxx */
- {OFFI,"PB,%b" }, /* 59: 0110 0100 0101 1001 xxxx xxxx */
- {OFFI,"PC,%b" }, /* 5a: 0110 0100 0101 1010 xxxx xxxx */
- {OFFI,"PD,%b" }, /* 5b: 0110 0100 0101 1011 xxxx xxxx */
- {illegal,nullptr }, /* 5c: 0110 0100 0101 1100 xxxx xxxx */
- {OFFI,"PF,%b" }, /* 5d: 0110 0100 0101 1101 xxxx xxxx */
- {OFFI,"MKH,%b" }, /* 5e: 0110 0100 0101 1110 xxxx xxxx */
- {OFFI,"MKL,%b" }, /* 5f: 0110 0100 0101 1111 xxxx xxxx */
+ {ACI, "PA,%b" }, // 50: 0110 0100 0101 0000 xxxx xxxx
+ {ACI, "PB,%b" }, // 51: 0110 0100 0101 0001 xxxx xxxx
+ {ACI, "PC,%b" }, // 52: 0110 0100 0101 0010 xxxx xxxx
+ {ACI, "PD,%b" }, // 53: 0110 0100 0101 0011 xxxx xxxx
+ { }, // 54: 0110 0100 0101 0100 xxxx xxxx
+ {ACI, "PF,%b" }, // 55: 0110 0100 0101 0101 xxxx xxxx
+ {ACI, "MKH,%b" }, // 56: 0110 0100 0101 0110 xxxx xxxx
+ {ACI, "MKL,%b" }, // 57: 0110 0100 0101 0111 xxxx xxxx
+ {OFFI, "PA,%b" }, // 58: 0110 0100 0101 1000 xxxx xxxx
+ {OFFI, "PB,%b" }, // 59: 0110 0100 0101 1001 xxxx xxxx
+ {OFFI, "PC,%b" }, // 5a: 0110 0100 0101 1010 xxxx xxxx
+ {OFFI, "PD,%b" }, // 5b: 0110 0100 0101 1011 xxxx xxxx
+ { }, // 5c: 0110 0100 0101 1100 xxxx xxxx
+ {OFFI, "PF,%b" }, // 5d: 0110 0100 0101 1101 xxxx xxxx
+ {OFFI, "MKH,%b" }, // 5e: 0110 0100 0101 1110 xxxx xxxx
+ {OFFI, "MKL,%b" }, // 5f: 0110 0100 0101 1111 xxxx xxxx
- {SUI,"PA,%b" }, /* 60: 0110 0100 0110 0000 xxxx xxxx */
- {SUI,"PB,%b" }, /* 61: 0110 0100 0110 0001 xxxx xxxx */
- {SUI,"PC,%b" }, /* 62: 0110 0100 0110 0010 xxxx xxxx */
- {SUI,"PD,%b" }, /* 63: 0110 0100 0110 0011 xxxx xxxx */
- {illegal,nullptr }, /* 64: 0110 0100 0110 0100 xxxx xxxx */
- {SUI,"PF,%b" }, /* 65: 0110 0100 0110 0101 xxxx xxxx */
- {SUI,"MKH,%b" }, /* 66: 0110 0100 0110 0110 xxxx xxxx */
- {SUI,"MKL,%b" }, /* 67: 0110 0100 0110 0111 xxxx xxxx */
- {NEI,"PA,%b" }, /* 68: 0110 0100 0110 1000 xxxx xxxx */
- {NEI,"PB,%b" }, /* 69: 0110 0100 0110 1001 xxxx xxxx */
- {NEI,"PC,%b" }, /* 6a: 0110 0100 0110 1010 xxxx xxxx */
- {NEI,"PD,%b" }, /* 6b: 0110 0100 0110 1011 xxxx xxxx */
- {illegal,nullptr }, /* 6c: 0110 0100 0110 1100 xxxx xxxx */
- {NEI,"PF,%b" }, /* 6d: 0110 0100 0110 1101 xxxx xxxx */
- {NEI,"MKH,%b" }, /* 6e: 0110 0100 0110 1110 xxxx xxxx */
- {NEI,"MKL,%b" }, /* 6f: 0110 0100 0110 1111 xxxx xxxx */
+ {SUI, "PA,%b" }, // 60: 0110 0100 0110 0000 xxxx xxxx
+ {SUI, "PB,%b" }, // 61: 0110 0100 0110 0001 xxxx xxxx
+ {SUI, "PC,%b" }, // 62: 0110 0100 0110 0010 xxxx xxxx
+ {SUI, "PD,%b" }, // 63: 0110 0100 0110 0011 xxxx xxxx
+ { }, // 64: 0110 0100 0110 0100 xxxx xxxx
+ {SUI, "PF,%b" }, // 65: 0110 0100 0110 0101 xxxx xxxx
+ {SUI, "MKH,%b" }, // 66: 0110 0100 0110 0110 xxxx xxxx
+ {SUI, "MKL,%b" }, // 67: 0110 0100 0110 0111 xxxx xxxx
+ {NEI, "PA,%b" }, // 68: 0110 0100 0110 1000 xxxx xxxx
+ {NEI, "PB,%b" }, // 69: 0110 0100 0110 1001 xxxx xxxx
+ {NEI, "PC,%b" }, // 6a: 0110 0100 0110 1010 xxxx xxxx
+ {NEI, "PD,%b" }, // 6b: 0110 0100 0110 1011 xxxx xxxx
+ { }, // 6c: 0110 0100 0110 1100 xxxx xxxx
+ {NEI, "PF,%b" }, // 6d: 0110 0100 0110 1101 xxxx xxxx
+ {NEI, "MKH,%b" }, // 6e: 0110 0100 0110 1110 xxxx xxxx
+ {NEI, "MKL,%b" }, // 6f: 0110 0100 0110 1111 xxxx xxxx
- {SBI,"PA,%b" }, /* 70: 0110 0100 0111 0000 xxxx xxxx */
- {SBI,"PB,%b" }, /* 71: 0110 0100 0111 0001 xxxx xxxx */
- {SBI,"PC,%b" }, /* 72: 0110 0100 0111 0010 xxxx xxxx */
- {SBI,"PD,%b" }, /* 73: 0110 0100 0111 0011 xxxx xxxx */
- {illegal,nullptr }, /* 74: 0110 0100 0111 0100 xxxx xxxx */
- {SBI,"PF,%b" }, /* 75: 0110 0100 0111 0101 xxxx xxxx */
- {SBI,"MKH,%b" }, /* 76: 0110 0100 0111 0110 xxxx xxxx */
- {SBI,"MKL,%b" }, /* 77: 0110 0100 0111 0111 xxxx xxxx */
- {EQI,"PA,%b" }, /* 78: 0110 0100 0111 1000 xxxx xxxx */
- {EQI,"PB,%b" }, /* 79: 0110 0100 0111 1001 xxxx xxxx */
- {EQI,"PC,%b" }, /* 7a: 0110 0100 0111 1010 xxxx xxxx */
- {EQI,"PD,%b" }, /* 7b: 0110 0100 0111 1011 xxxx xxxx */
- {illegal,nullptr }, /* 7c: 0110 0100 0111 1100 xxxx xxxx */
- {EQI,"PF,%b" }, /* 7d: 0110 0100 0111 1101 xxxx xxxx */
- {EQI,"MKH,%b" }, /* 7e: 0110 0100 0111 1110 xxxx xxxx */
- {EQI,"MKL,%b" }, /* 7f: 0110 0100 0111 1111 xxxx xxxx */
+ {SBI, "PA,%b" }, // 70: 0110 0100 0111 0000 xxxx xxxx
+ {SBI, "PB,%b" }, // 71: 0110 0100 0111 0001 xxxx xxxx
+ {SBI, "PC,%b" }, // 72: 0110 0100 0111 0010 xxxx xxxx
+ {SBI, "PD,%b" }, // 73: 0110 0100 0111 0011 xxxx xxxx
+ { }, // 74: 0110 0100 0111 0100 xxxx xxxx
+ {SBI, "PF,%b" }, // 75: 0110 0100 0111 0101 xxxx xxxx
+ {SBI, "MKH,%b" }, // 76: 0110 0100 0111 0110 xxxx xxxx
+ {SBI, "MKL,%b" }, // 77: 0110 0100 0111 0111 xxxx xxxx
+ {EQI, "PA,%b" }, // 78: 0110 0100 0111 1000 xxxx xxxx
+ {EQI, "PB,%b" }, // 79: 0110 0100 0111 1001 xxxx xxxx
+ {EQI, "PC,%b" }, // 7a: 0110 0100 0111 1010 xxxx xxxx
+ {EQI, "PD,%b" }, // 7b: 0110 0100 0111 1011 xxxx xxxx
+ { }, // 7c: 0110 0100 0111 1100 xxxx xxxx
+ {EQI, "PF,%b" }, // 7d: 0110 0100 0111 1101 xxxx xxxx
+ {EQI, "MKH,%b" }, // 7e: 0110 0100 0111 1110 xxxx xxxx
+ {EQI, "MKL,%b" }, // 7f: 0110 0100 0111 1111 xxxx xxxx
- {illegal,nullptr }, /* 80: 0110 0100 1000 0000 xxxx xxxx */
- {MVI,"SMH,%b" }, /* 81: 0110 0100 1000 0001 xxxx xxxx */
- {illegal,nullptr }, /* 82: 0110 0100 1000 0010 xxxx xxxx */
- {MVI,"EOM,%b" }, /* 83: 0110 0100 1000 0011 xxxx xxxx */
- {illegal,nullptr }, /* 84: 0110 0100 1000 0100 xxxx xxxx */
- {MVI,"TMM,%b" }, /* 85: 0110 0100 1000 0101 xxxx xxxx */
- {illegal,nullptr }, /* 86: 0110 0100 1000 0110 xxxx xxxx */
- {illegal,nullptr }, /* 87: 0110 0100 1000 0111 xxxx xxxx */
- {illegal,nullptr }, /* 88: 0110 0100 1000 1000 xxxx xxxx */
- {ANI,"SMH,%b" }, /* 89: 0110 0100 1000 1001 xxxx xxxx */
- {illegal,nullptr }, /* 8a: 0110 0100 1000 1010 xxxx xxxx */
- {ANI,"EOM,%b" }, /* 8b: 0110 0100 1000 1011 xxxx xxxx */
- {illegal,nullptr }, /* 8c: 0110 0100 1000 1100 xxxx xxxx */
- {ANI,"TMM,%b" }, /* 8d: 0110 0100 1000 1101 xxxx xxxx */
- {illegal,nullptr }, /* 8e: 0110 0100 1000 1110 xxxx xxxx */
- {illegal,nullptr }, /* 8f: 0110 0100 1000 1111 xxxx xxxx */
+ { }, // 80: 0110 0100 1000 0000 xxxx xxxx
+ {MVI, "SMH,%b" }, // 81: 0110 0100 1000 0001 xxxx xxxx
+ { }, // 82: 0110 0100 1000 0010 xxxx xxxx
+ {MVI, "EOM,%b" }, // 83: 0110 0100 1000 0011 xxxx xxxx
+ { }, // 84: 0110 0100 1000 0100 xxxx xxxx
+ {MVI, "TMM,%b" }, // 85: 0110 0100 1000 0101 xxxx xxxx
+ { }, // 86: 0110 0100 1000 0110 xxxx xxxx
+ { }, // 87: 0110 0100 1000 0111 xxxx xxxx
+ { }, // 88: 0110 0100 1000 1000 xxxx xxxx
+ {ANI, "SMH,%b" }, // 89: 0110 0100 1000 1001 xxxx xxxx
+ { }, // 8a: 0110 0100 1000 1010 xxxx xxxx
+ {ANI, "EOM,%b" }, // 8b: 0110 0100 1000 1011 xxxx xxxx
+ { }, // 8c: 0110 0100 1000 1100 xxxx xxxx
+ {ANI, "TMM,%b" }, // 8d: 0110 0100 1000 1101 xxxx xxxx
+ { }, // 8e: 0110 0100 1000 1110 xxxx xxxx
+ { }, // 8f: 0110 0100 1000 1111 xxxx xxxx
- {illegal,nullptr }, /* 90: 0110 0100 1001 0000 xxxx xxxx */
- {XRI,"SMH,%b" }, /* 91: 0110 0100 1001 0001 xxxx xxxx */
- {illegal,nullptr }, /* 92: 0110 0100 1001 0010 xxxx xxxx */
- {XRI,"EOM,%b" }, /* 93: 0110 0100 1001 0011 xxxx xxxx */
- {illegal,nullptr }, /* 94: 0110 0100 1001 0100 xxxx xxxx */
- {XRI,"TMM,%b" }, /* 95: 0110 0100 1001 0101 xxxx xxxx */
- {illegal,nullptr }, /* 96: 0110 0100 1001 0110 xxxx xxxx */
- {illegal,nullptr }, /* 97: 0110 0100 1001 0111 xxxx xxxx */
- {illegal,nullptr }, /* 98: 0110 0100 1001 1000 xxxx xxxx */
- {ORI,"SMH,%b" }, /* 99: 0110 0100 1001 1001 xxxx xxxx */
- {illegal,nullptr }, /* 9a: 0110 0100 1001 1010 xxxx xxxx */
- {ORI,"EOM,%b" }, /* 9b: 0110 0100 1001 1011 xxxx xxxx */
- {illegal,nullptr }, /* 9c: 0110 0100 1001 1100 xxxx xxxx */
- {ORI,"TMM,%b" }, /* 9d: 0110 0100 1001 1101 xxxx xxxx */
- {illegal,nullptr }, /* 9e: 0110 0100 1001 1110 xxxx xxxx */
- {illegal,nullptr }, /* 9f: 0110 0100 1001 1111 xxxx xxxx */
+ { }, // 90: 0110 0100 1001 0000 xxxx xxxx
+ {XRI, "SMH,%b" }, // 91: 0110 0100 1001 0001 xxxx xxxx
+ { }, // 92: 0110 0100 1001 0010 xxxx xxxx
+ {XRI, "EOM,%b" }, // 93: 0110 0100 1001 0011 xxxx xxxx
+ { }, // 94: 0110 0100 1001 0100 xxxx xxxx
+ {XRI, "TMM,%b" }, // 95: 0110 0100 1001 0101 xxxx xxxx
+ { }, // 96: 0110 0100 1001 0110 xxxx xxxx
+ { }, // 97: 0110 0100 1001 0111 xxxx xxxx
+ { }, // 98: 0110 0100 1001 1000 xxxx xxxx
+ {ORI, "SMH,%b" }, // 99: 0110 0100 1001 1001 xxxx xxxx
+ { }, // 9a: 0110 0100 1001 1010 xxxx xxxx
+ {ORI, "EOM,%b" }, // 9b: 0110 0100 1001 1011 xxxx xxxx
+ { }, // 9c: 0110 0100 1001 1100 xxxx xxxx
+ {ORI, "TMM,%b" }, // 9d: 0110 0100 1001 1101 xxxx xxxx
+ { }, // 9e: 0110 0100 1001 1110 xxxx xxxx
+ { }, // 9f: 0110 0100 1001 1111 xxxx xxxx
- {illegal,nullptr }, /* a0: 0110 0100 1010 0000 xxxx xxxx */
- {ADINC,"SMH,%b" }, /* a1: 0110 0100 1010 0001 xxxx xxxx */
- {illegal,nullptr }, /* a2: 0110 0100 1010 0010 xxxx xxxx */
- {ADINC,"EOM,%b" }, /* a3: 0110 0100 1010 0011 xxxx xxxx */
- {illegal,nullptr }, /* a4: 0110 0100 1010 0100 xxxx xxxx */
- {ADINC,"TMM,%b" }, /* a5: 0110 0100 1010 0101 xxxx xxxx */
- {illegal,nullptr }, /* a6: 0110 0100 1010 0110 xxxx xxxx */
- {illegal,nullptr }, /* a7: 0110 0100 1010 0111 xxxx xxxx */
- {illegal,nullptr }, /* a8: 0110 0100 1010 1000 xxxx xxxx */
- {GTI,"SMH,%b" }, /* a9: 0110 0100 1010 1001 xxxx xxxx */
- {illegal,nullptr }, /* aa: 0110 0100 1010 1010 xxxx xxxx */
- {GTI,"EOM,%b" }, /* ab: 0110 0100 1010 1011 xxxx xxxx */
- {illegal,nullptr }, /* ac: 0110 0100 1010 1100 xxxx xxxx */
- {GTI,"TMM,%b" }, /* ad: 0110 0100 1010 1101 xxxx xxxx */
- {GTI,"PT,%b" }, /* ae: 0110 0100 1010 1110 xxxx xxxx */
- {illegal,nullptr }, /* af: 0110 0100 1010 1111 xxxx xxxx */
+ { }, // a0: 0110 0100 1010 0000 xxxx xxxx
+ {ADINC, "SMH,%b" }, // a1: 0110 0100 1010 0001 xxxx xxxx
+ { }, // a2: 0110 0100 1010 0010 xxxx xxxx
+ {ADINC, "EOM,%b" }, // a3: 0110 0100 1010 0011 xxxx xxxx
+ { }, // a4: 0110 0100 1010 0100 xxxx xxxx
+ {ADINC, "TMM,%b" }, // a5: 0110 0100 1010 0101 xxxx xxxx
+ { }, // a6: 0110 0100 1010 0110 xxxx xxxx
+ { }, // a7: 0110 0100 1010 0111 xxxx xxxx
+ { }, // a8: 0110 0100 1010 1000 xxxx xxxx
+ {GTI, "SMH,%b" }, // a9: 0110 0100 1010 1001 xxxx xxxx
+ { }, // aa: 0110 0100 1010 1010 xxxx xxxx
+ {GTI, "EOM,%b" }, // ab: 0110 0100 1010 1011 xxxx xxxx
+ { }, // ac: 0110 0100 1010 1100 xxxx xxxx
+ {GTI, "TMM,%b" }, // ad: 0110 0100 1010 1101 xxxx xxxx
+ {GTI, "PT,%b" }, // ae: 0110 0100 1010 1110 xxxx xxxx
+ { }, // af: 0110 0100 1010 1111 xxxx xxxx
- {illegal,nullptr }, /* b0: 0110 0100 1011 0000 xxxx xxxx */
- {SUINB,"SMH,%b" }, /* b1: 0110 0100 1011 0001 xxxx xxxx */
- {illegal,nullptr }, /* b2: 0110 0100 1011 0010 xxxx xxxx */
- {SUINB,"EOM,%b" }, /* b3: 0110 0100 1011 0011 xxxx xxxx */
- {illegal,nullptr }, /* b4: 0110 0100 1011 0100 xxxx xxxx */
- {SUINB,"TMM,%b" }, /* b5: 0110 0100 1011 0101 xxxx xxxx */
- {illegal,nullptr }, /* b6: 0110 0100 1011 0110 xxxx xxxx */
- {illegal,nullptr }, /* b7: 0110 0100 1011 0111 xxxx xxxx */
- {illegal,nullptr }, /* b8: 0110 0100 1011 1000 xxxx xxxx */
- {LTI,"SMH,%b" }, /* b9: 0110 0100 1011 1001 xxxx xxxx */
- {illegal,nullptr }, /* ba: 0110 0100 1011 1010 xxxx xxxx */
- {LTI,"EOM,%b" }, /* bb: 0110 0100 1011 1011 xxxx xxxx */
- {illegal,nullptr }, /* bc: 0110 0100 1011 1100 xxxx xxxx */
- {LTI,"TMM,%b" }, /* bd: 0110 0100 1011 1101 xxxx xxxx */
- {LTI,"PT,%b" }, /* be: 0110 0100 1011 1110 xxxx xxxx */
- {illegal,nullptr }, /* bf: 0110 0100 1011 1111 xxxx xxxx */
+ { }, // b0: 0110 0100 1011 0000 xxxx xxxx
+ {SUINB, "SMH,%b" }, // b1: 0110 0100 1011 0001 xxxx xxxx
+ { }, // b2: 0110 0100 1011 0010 xxxx xxxx
+ {SUINB, "EOM,%b" }, // b3: 0110 0100 1011 0011 xxxx xxxx
+ { }, // b4: 0110 0100 1011 0100 xxxx xxxx
+ {SUINB, "TMM,%b" }, // b5: 0110 0100 1011 0101 xxxx xxxx
+ { }, // b6: 0110 0100 1011 0110 xxxx xxxx
+ { }, // b7: 0110 0100 1011 0111 xxxx xxxx
+ { }, // b8: 0110 0100 1011 1000 xxxx xxxx
+ {LTI, "SMH,%b" }, // b9: 0110 0100 1011 1001 xxxx xxxx
+ { }, // ba: 0110 0100 1011 1010 xxxx xxxx
+ {LTI, "EOM,%b" }, // bb: 0110 0100 1011 1011 xxxx xxxx
+ { }, // bc: 0110 0100 1011 1100 xxxx xxxx
+ {LTI, "TMM,%b" }, // bd: 0110 0100 1011 1101 xxxx xxxx
+ {LTI, "PT,%b" }, // be: 0110 0100 1011 1110 xxxx xxxx
+ { }, // bf: 0110 0100 1011 1111 xxxx xxxx
- {illegal,nullptr }, /* c0: 0110 0100 1100 0000 xxxx xxxx */
- {ADI,"SMH,%b" }, /* c1: 0110 0100 1100 0001 xxxx xxxx */
- {illegal,nullptr }, /* c2: 0110 0100 1100 0010 xxxx xxxx */
- {ADI,"EOM,%b" }, /* c3: 0110 0100 1100 0011 xxxx xxxx */
- {illegal,nullptr }, /* c4: 0110 0100 1100 0100 xxxx xxxx */
- {ADI,"TMM,%b" }, /* c5: 0110 0100 1100 0101 xxxx xxxx */
- {illegal,nullptr }, /* c6: 0110 0100 1100 0110 xxxx xxxx */
- {illegal,nullptr }, /* c7: 0110 0100 1100 0111 xxxx xxxx */
- {illegal,nullptr }, /* c8: 0110 0100 1100 1000 xxxx xxxx */
- {ONI,"SMH,%b" }, /* c9: 0110 0100 1100 1001 xxxx xxxx */
- {illegal,nullptr }, /* ca: 0110 0100 1100 1010 xxxx xxxx */
- {ONI,"EOM,%b" }, /* cb: 0110 0100 1100 1011 xxxx xxxx */
- {illegal,nullptr }, /* cc: 0110 0100 1100 1100 xxxx xxxx */
- {ONI,"TMM,%b" }, /* cd: 0110 0100 1100 1101 xxxx xxxx */
- {ONI,"PT,%b" }, /* ce: 0110 0100 1100 1110 xxxx xxxx */
- {illegal,nullptr }, /* cf: 0110 0100 1100 1111 xxxx xxxx */
+ { }, // c0: 0110 0100 1100 0000 xxxx xxxx
+ {ADI, "SMH,%b" }, // c1: 0110 0100 1100 0001 xxxx xxxx
+ { }, // c2: 0110 0100 1100 0010 xxxx xxxx
+ {ADI, "EOM,%b" }, // c3: 0110 0100 1100 0011 xxxx xxxx
+ { }, // c4: 0110 0100 1100 0100 xxxx xxxx
+ {ADI, "TMM,%b" }, // c5: 0110 0100 1100 0101 xxxx xxxx
+ { }, // c6: 0110 0100 1100 0110 xxxx xxxx
+ { }, // c7: 0110 0100 1100 0111 xxxx xxxx
+ { }, // c8: 0110 0100 1100 1000 xxxx xxxx
+ {ONI, "SMH,%b" }, // c9: 0110 0100 1100 1001 xxxx xxxx
+ { }, // ca: 0110 0100 1100 1010 xxxx xxxx
+ {ONI, "EOM,%b" }, // cb: 0110 0100 1100 1011 xxxx xxxx
+ { }, // cc: 0110 0100 1100 1100 xxxx xxxx
+ {ONI, "TMM,%b" }, // cd: 0110 0100 1100 1101 xxxx xxxx
+ {ONI, "PT,%b" }, // ce: 0110 0100 1100 1110 xxxx xxxx
+ { }, // cf: 0110 0100 1100 1111 xxxx xxxx
- {illegal,nullptr }, /* d0: 0110 0100 1101 0000 xxxx xxxx */
- {ACI,"SMH,%b" }, /* d1: 0110 0100 1101 0001 xxxx xxxx */
- {illegal,nullptr }, /* d2: 0110 0100 1101 0010 xxxx xxxx */
- {ACI,"EOM,%b" }, /* d3: 0110 0100 1101 0011 xxxx xxxx */
- {illegal,nullptr }, /* d4: 0110 0100 1101 0100 xxxx xxxx */
- {ACI,"TMM,%b" }, /* d5: 0110 0100 1101 0101 xxxx xxxx */
- {illegal,nullptr }, /* d6: 0110 0100 1101 0110 xxxx xxxx */
- {illegal,nullptr }, /* d7: 0110 0100 1101 0111 xxxx xxxx */
- {illegal,nullptr }, /* d8: 0110 0100 1101 1000 xxxx xxxx */
- {OFFI,"SMH,%b" }, /* d9: 0110 0100 1101 1001 xxxx xxxx */
- {illegal,nullptr }, /* da: 0110 0100 1101 1010 xxxx xxxx */
- {OFFI,"EOM,%b" }, /* db: 0110 0100 1101 1011 xxxx xxxx */
- {illegal,nullptr }, /* dc: 0110 0100 1101 1100 xxxx xxxx */
- {OFFI,"TMM,%b" }, /* dd: 0110 0100 1101 1101 xxxx xxxx */
- {OFFI,"PT,%b" }, /* de: 0110 0100 1101 1110 xxxx xxxx */
- {illegal,nullptr }, /* df: 0110 0100 1101 1111 xxxx xxxx */
+ { }, // d0: 0110 0100 1101 0000 xxxx xxxx
+ {ACI, "SMH,%b" }, // d1: 0110 0100 1101 0001 xxxx xxxx
+ { }, // d2: 0110 0100 1101 0010 xxxx xxxx
+ {ACI, "EOM,%b" }, // d3: 0110 0100 1101 0011 xxxx xxxx
+ { }, // d4: 0110 0100 1101 0100 xxxx xxxx
+ {ACI, "TMM,%b" }, // d5: 0110 0100 1101 0101 xxxx xxxx
+ { }, // d6: 0110 0100 1101 0110 xxxx xxxx
+ { }, // d7: 0110 0100 1101 0111 xxxx xxxx
+ { }, // d8: 0110 0100 1101 1000 xxxx xxxx
+ {OFFI, "SMH,%b" }, // d9: 0110 0100 1101 1001 xxxx xxxx
+ { }, // da: 0110 0100 1101 1010 xxxx xxxx
+ {OFFI, "EOM,%b" }, // db: 0110 0100 1101 1011 xxxx xxxx
+ { }, // dc: 0110 0100 1101 1100 xxxx xxxx
+ {OFFI, "TMM,%b" }, // dd: 0110 0100 1101 1101 xxxx xxxx
+ {OFFI, "PT,%b" }, // de: 0110 0100 1101 1110 xxxx xxxx
+ { }, // df: 0110 0100 1101 1111 xxxx xxxx
- {illegal,nullptr }, /* e0: 0110 0100 1110 0000 xxxx xxxx */
- {SUI,"SMH,%b" }, /* e1: 0110 0100 1110 0001 xxxx xxxx */
- {illegal,nullptr }, /* e2: 0110 0100 1110 0010 xxxx xxxx */
- {SUI,"EOM,%b" }, /* e3: 0110 0100 1110 0011 xxxx xxxx */
- {illegal,nullptr }, /* e4: 0110 0100 1110 0100 xxxx xxxx */
- {SUI,"TMM,%b" }, /* e5: 0110 0100 1110 0101 xxxx xxxx */
- {illegal,nullptr }, /* e6: 0110 0100 1110 0110 xxxx xxxx */
- {illegal,nullptr }, /* e7: 0110 0100 1110 0111 xxxx xxxx */
- {illegal,nullptr }, /* e8: 0110 0100 1110 1000 xxxx xxxx */
- {NEI,"SMH,%b" }, /* e9: 0110 0100 1110 1001 xxxx xxxx */
- {illegal,nullptr }, /* ea: 0110 0100 1110 1010 xxxx xxxx */
- {NEI,"EOM,%b" }, /* eb: 0110 0100 1110 1011 xxxx xxxx */
- {illegal,nullptr }, /* ec: 0110 0100 1110 1100 xxxx xxxx */
- {NEI,"TMM,%b" }, /* ed: 0110 0100 1110 1101 xxxx xxxx */
- {NEI,"PT,%b" }, /* ee: 0110 0100 1110 1110 xxxx xxxx */
- {illegal,nullptr }, /* ef: 0110 0100 1110 1111 xxxx xxxx */
+ { }, // e0: 0110 0100 1110 0000 xxxx xxxx
+ {SUI, "SMH,%b" }, // e1: 0110 0100 1110 0001 xxxx xxxx
+ { }, // e2: 0110 0100 1110 0010 xxxx xxxx
+ {SUI, "EOM,%b" }, // e3: 0110 0100 1110 0011 xxxx xxxx
+ { }, // e4: 0110 0100 1110 0100 xxxx xxxx
+ {SUI, "TMM,%b" }, // e5: 0110 0100 1110 0101 xxxx xxxx
+ { }, // e6: 0110 0100 1110 0110 xxxx xxxx
+ { }, // e7: 0110 0100 1110 0111 xxxx xxxx
+ { }, // e8: 0110 0100 1110 1000 xxxx xxxx
+ {NEI, "SMH,%b" }, // e9: 0110 0100 1110 1001 xxxx xxxx
+ { }, // ea: 0110 0100 1110 1010 xxxx xxxx
+ {NEI, "EOM,%b" }, // eb: 0110 0100 1110 1011 xxxx xxxx
+ { }, // ec: 0110 0100 1110 1100 xxxx xxxx
+ {NEI, "TMM,%b" }, // ed: 0110 0100 1110 1101 xxxx xxxx
+ {NEI, "PT,%b" }, // ee: 0110 0100 1110 1110 xxxx xxxx
+ { }, // ef: 0110 0100 1110 1111 xxxx xxxx
- {illegal,nullptr }, /* f0: 0110 0100 1111 0000 xxxx xxxx */
- {SBI,"SMH,%b" }, /* f1: 0110 0100 1111 0001 xxxx xxxx */
- {illegal,nullptr }, /* f2: 0110 0100 1111 0010 xxxx xxxx */
- {SBI,"EOM,%b" }, /* f3: 0110 0100 1111 0011 xxxx xxxx */
- {illegal,nullptr }, /* f4: 0110 0100 1111 0100 xxxx xxxx */
- {SBI,"TMM,%b" }, /* f5: 0110 0100 1111 0101 xxxx xxxx */
- {illegal,nullptr }, /* f6: 0110 0100 1111 0110 xxxx xxxx */
- {illegal,nullptr }, /* f7: 0110 0100 1111 0111 xxxx xxxx */
- {illegal,nullptr }, /* f8: 0110 0100 1111 1000 xxxx xxxx */
- {EQI,"SMH,%b" }, /* f9: 0110 0100 1111 1001 xxxx xxxx */
- {illegal,nullptr }, /* fa: 0110 0100 1111 1010 xxxx xxxx */
- {EQI,"EOM,%b" }, /* fb: 0110 0100 1111 1011 xxxx xxxx */
- {illegal,nullptr }, /* fc: 0110 0100 1111 1100 xxxx xxxx */
- {EQI,"TMM,%b" }, /* fd: 0110 0100 1111 1101 xxxx xxxx */
- {EQI,"PT,%b" }, /* fe: 0110 0100 1111 1110 xxxx xxxx */
- {illegal,nullptr } /* ff: 0110 0100 1111 1111 xxxx xxxx */
+ { }, // f0: 0110 0100 1111 0000 xxxx xxxx
+ {SBI, "SMH,%b" }, // f1: 0110 0100 1111 0001 xxxx xxxx
+ { }, // f2: 0110 0100 1111 0010 xxxx xxxx
+ {SBI, "EOM,%b" }, // f3: 0110 0100 1111 0011 xxxx xxxx
+ { }, // f4: 0110 0100 1111 0100 xxxx xxxx
+ {SBI, "TMM,%b" }, // f5: 0110 0100 1111 0101 xxxx xxxx
+ { }, // f6: 0110 0100 1111 0110 xxxx xxxx
+ { }, // f7: 0110 0100 1111 0111 xxxx xxxx
+ { }, // f8: 0110 0100 1111 1000 xxxx xxxx
+ {EQI, "SMH,%b" }, // f9: 0110 0100 1111 1001 xxxx xxxx
+ { }, // fa: 0110 0100 1111 1010 xxxx xxxx
+ {EQI, "EOM,%b" }, // fb: 0110 0100 1111 1011 xxxx xxxx
+ { }, // fc: 0110 0100 1111 1100 xxxx xxxx
+ {EQI, "TMM,%b" }, // fd: 0110 0100 1111 1101 xxxx xxxx
+ {EQI, "PT,%b" }, // fe: 0110 0100 1111 1110 xxxx xxxx
+ { } // ff: 0110 0100 1111 1111 xxxx xxxx
};
-/* prefix 70 */
-static const struct dasm_s dasm70[256] =
+// prefix 70
+const dasm_s dasm_s::d70[256] =
{
- {illegal,nullptr }, /* 00: 0111 0000 0000 0000 */
- {illegal,nullptr }, /* 01: 0111 0000 0000 0001 */
- {illegal,nullptr }, /* 02: 0111 0000 0000 0010 */
- {illegal,nullptr }, /* 03: 0111 0000 0000 0011 */
- {illegal,nullptr }, /* 04: 0111 0000 0000 0100 */
- {illegal,nullptr }, /* 05: 0111 0000 0000 0101 */
- {illegal,nullptr }, /* 06: 0111 0000 0000 0110 */
- {illegal,nullptr }, /* 07: 0111 0000 0000 0111 */
- {illegal,nullptr }, /* 08: 0111 0000 0000 1000 */
- {illegal,nullptr }, /* 09: 0111 0000 0000 1001 */
- {illegal,nullptr }, /* 0a: 0111 0000 0000 1010 */
- {illegal,nullptr }, /* 0b: 0111 0000 0000 1011 */
- {illegal,nullptr }, /* 0c: 0111 0000 0000 1100 */
- {illegal,nullptr }, /* 0d: 0111 0000 0000 1101 */
- {SSPD,"%w" }, /* 0e: 0111 0000 0000 1110 llll llll hhhh hhhh */
- {LSPD,"%w" }, /* 0f: 0111 0000 0000 1111 llll llll hhhh hhhh */
+ { }, // 00: 0111 0000 0000 0000
+ { }, // 01: 0111 0000 0000 0001
+ { }, // 02: 0111 0000 0000 0010
+ { }, // 03: 0111 0000 0000 0011
+ { }, // 04: 0111 0000 0000 0100
+ { }, // 05: 0111 0000 0000 0101
+ { }, // 06: 0111 0000 0000 0110
+ { }, // 07: 0111 0000 0000 0111
+ { }, // 08: 0111 0000 0000 1000
+ { }, // 09: 0111 0000 0000 1001
+ { }, // 0a: 0111 0000 0000 1010
+ { }, // 0b: 0111 0000 0000 1011
+ { }, // 0c: 0111 0000 0000 1100
+ { }, // 0d: 0111 0000 0000 1101
+ {SSPD, "%w" }, // 0e: 0111 0000 0000 1110 llll llll hhhh hhhh
+ {LSPD, "%w" }, // 0f: 0111 0000 0000 1111 llll llll hhhh hhhh
- {illegal,nullptr }, /* 10: 0111 0000 0001 0000 */
- {illegal,nullptr }, /* 11: 0111 0000 0001 0001 */
- {illegal,nullptr }, /* 12: 0111 0000 0001 0010 */
- {illegal,nullptr }, /* 13: 0111 0000 0001 0011 */
- {illegal,nullptr }, /* 14: 0111 0000 0001 0100 */
- {illegal,nullptr }, /* 15: 0111 0000 0001 0101 */
- {illegal,nullptr }, /* 16: 0111 0000 0001 0110 */
- {illegal,nullptr }, /* 17: 0111 0000 0001 0111 */
- {illegal,nullptr }, /* 18: 0111 0000 0001 1000 */
- {illegal,nullptr }, /* 19: 0111 0000 0001 1001 */
- {illegal,nullptr }, /* 1a: 0111 0000 0001 1010 */
- {illegal,nullptr }, /* 1b: 0111 0000 0001 1011 */
- {illegal,nullptr }, /* 1c: 0111 0000 0001 1100 */
- {illegal,nullptr }, /* 1d: 0111 0000 0001 1101 */
- {SBCD,"%w" }, /* 1e: 0111 0000 0001 1110 llll llll hhhh hhhh */
- {LBCD,"%w" }, /* 1f: 0111 0000 0001 1111 llll llll hhhh hhhh */
+ { }, // 10: 0111 0000 0001 0000
+ { }, // 11: 0111 0000 0001 0001
+ { }, // 12: 0111 0000 0001 0010
+ { }, // 13: 0111 0000 0001 0011
+ { }, // 14: 0111 0000 0001 0100
+ { }, // 15: 0111 0000 0001 0101
+ { }, // 16: 0111 0000 0001 0110
+ { }, // 17: 0111 0000 0001 0111
+ { }, // 18: 0111 0000 0001 1000
+ { }, // 19: 0111 0000 0001 1001
+ { }, // 1a: 0111 0000 0001 1010
+ { }, // 1b: 0111 0000 0001 1011
+ { }, // 1c: 0111 0000 0001 1100
+ { }, // 1d: 0111 0000 0001 1101
+ {SBCD, "%w" }, // 1e: 0111 0000 0001 1110 llll llll hhhh hhhh
+ {LBCD, "%w" }, // 1f: 0111 0000 0001 1111 llll llll hhhh hhhh
- {illegal,nullptr }, /* 20: 0111 0000 0010 0000 */
- {illegal,nullptr }, /* 21: 0111 0000 0010 0001 */
- {illegal,nullptr }, /* 22: 0111 0000 0010 0010 */
- {illegal,nullptr }, /* 23: 0111 0000 0010 0011 */
- {illegal,nullptr }, /* 24: 0111 0000 0010 0100 */
- {illegal,nullptr }, /* 25: 0111 0000 0010 0101 */
- {illegal,nullptr }, /* 26: 0111 0000 0010 0110 */
- {illegal,nullptr }, /* 27: 0111 0000 0010 0111 */
- {illegal,nullptr }, /* 28: 0111 0000 0010 1000 */
- {illegal,nullptr }, /* 29: 0111 0000 0010 1001 */
- {illegal,nullptr }, /* 2a: 0111 0000 0010 1010 */
- {illegal,nullptr }, /* 2b: 0111 0000 0010 1011 */
- {illegal,nullptr }, /* 2c: 0111 0000 0010 1100 */
- {illegal,nullptr }, /* 2d: 0111 0000 0010 1101 */
- {SDED,"%w" }, /* 2e: 0111 0000 0010 1110 llll llll hhhh hhhh */
- {LDED,"%w" }, /* 2f: 0111 0000 0010 1111 llll llll hhhh hhhh */
+ { }, // 20: 0111 0000 0010 0000
+ { }, // 21: 0111 0000 0010 0001
+ { }, // 22: 0111 0000 0010 0010
+ { }, // 23: 0111 0000 0010 0011
+ { }, // 24: 0111 0000 0010 0100
+ { }, // 25: 0111 0000 0010 0101
+ { }, // 26: 0111 0000 0010 0110
+ { }, // 27: 0111 0000 0010 0111
+ { }, // 28: 0111 0000 0010 1000
+ { }, // 29: 0111 0000 0010 1001
+ { }, // 2a: 0111 0000 0010 1010
+ { }, // 2b: 0111 0000 0010 1011
+ { }, // 2c: 0111 0000 0010 1100
+ { }, // 2d: 0111 0000 0010 1101
+ {SDED, "%w" }, // 2e: 0111 0000 0010 1110 llll llll hhhh hhhh
+ {LDED, "%w" }, // 2f: 0111 0000 0010 1111 llll llll hhhh hhhh
- {illegal,nullptr }, /* 30: 0111 0000 0011 0000 */
- {illegal,nullptr }, /* 31: 0111 0000 0011 0001 */
- {illegal,nullptr }, /* 32: 0111 0000 0011 0010 */
- {illegal,nullptr }, /* 33: 0111 0000 0011 0011 */
- {illegal,nullptr }, /* 34: 0111 0000 0011 0100 */
- {illegal,nullptr }, /* 35: 0111 0000 0011 0101 */
- {illegal,nullptr }, /* 36: 0111 0000 0011 0110 */
- {illegal,nullptr }, /* 37: 0111 0000 0011 0111 */
- {illegal,nullptr }, /* 38: 0111 0000 0011 1000 */
- {illegal,nullptr }, /* 39: 0111 0000 0011 1001 */
- {illegal,nullptr }, /* 3a: 0111 0000 0011 1010 */
- {illegal,nullptr }, /* 3b: 0111 0000 0011 1011 */
- {illegal,nullptr }, /* 3c: 0111 0000 0011 1100 */
- {illegal,nullptr }, /* 3d: 0111 0000 0011 1101 */
- {SHLD,"%w" }, /* 3e: 0111 0000 0011 1110 llll llll hhhh hhhh */
- {LHLD,"%w" }, /* 3f: 0111 0000 0011 1111 llll llll hhhh hhhh */
+ { }, // 30: 0111 0000 0011 0000
+ { }, // 31: 0111 0000 0011 0001
+ { }, // 32: 0111 0000 0011 0010
+ { }, // 33: 0111 0000 0011 0011
+ { }, // 34: 0111 0000 0011 0100
+ { }, // 35: 0111 0000 0011 0101
+ { }, // 36: 0111 0000 0011 0110
+ { }, // 37: 0111 0000 0011 0111
+ { }, // 38: 0111 0000 0011 1000
+ { }, // 39: 0111 0000 0011 1001
+ { }, // 3a: 0111 0000 0011 1010
+ { }, // 3b: 0111 0000 0011 1011
+ { }, // 3c: 0111 0000 0011 1100
+ { }, // 3d: 0111 0000 0011 1101
+ {SHLD, "%w" }, // 3e: 0111 0000 0011 1110 llll llll hhhh hhhh
+ {LHLD, "%w" }, // 3f: 0111 0000 0011 1111 llll llll hhhh hhhh
- {EADD,"EA,V" }, /* 40: 0111 0000 0100 0000 */
- {EADD,"EA,A" }, /* 41: 0111 0000 0100 0001 */
- {EADD,"EA,B" }, /* 42: 0111 0000 0100 0010 */
- {EADD,"EA,C" }, /* 43: 0111 0000 0100 0011 */
- {illegal,nullptr }, /* 44: 0111 0000 0100 0100 */
- {illegal,nullptr }, /* 45: 0111 0000 0100 0101 */
- {illegal,nullptr }, /* 46: 0111 0000 0100 0110 */
- {illegal,nullptr }, /* 47: 0111 0000 0100 0111 */
- {illegal,nullptr }, /* 48: 0111 0000 0100 1000 */
- {illegal,nullptr }, /* 49: 0111 0000 0100 1001 */
- {illegal,nullptr }, /* 4a: 0111 0000 0100 1010 */
- {illegal,nullptr }, /* 4b: 0111 0000 0100 1011 */
- {illegal,nullptr }, /* 4c: 0111 0000 0100 1100 */
- {illegal,nullptr }, /* 4d: 0111 0000 0100 1101 */
- {illegal,nullptr }, /* 4e: 0111 0000 0100 1110 */
- {illegal,nullptr }, /* 4f: 0111 0000 0100 1111 */
+ {EADD, "EA,V" }, // 40: 0111 0000 0100 0000
+ {EADD, "EA,A" }, // 41: 0111 0000 0100 0001
+ {EADD, "EA,B" }, // 42: 0111 0000 0100 0010
+ {EADD, "EA,C" }, // 43: 0111 0000 0100 0011
+ { }, // 44: 0111 0000 0100 0100
+ { }, // 45: 0111 0000 0100 0101
+ { }, // 46: 0111 0000 0100 0110
+ { }, // 47: 0111 0000 0100 0111
+ { }, // 48: 0111 0000 0100 1000
+ { }, // 49: 0111 0000 0100 1001
+ { }, // 4a: 0111 0000 0100 1010
+ { }, // 4b: 0111 0000 0100 1011
+ { }, // 4c: 0111 0000 0100 1100
+ { }, // 4d: 0111 0000 0100 1101
+ { }, // 4e: 0111 0000 0100 1110
+ { }, // 4f: 0111 0000 0100 1111
- {illegal,nullptr }, /* 50: 0111 0000 0101 0000 */
- {illegal,nullptr }, /* 51: 0111 0000 0101 0001 */
- {illegal,nullptr }, /* 52: 0111 0000 0101 0010 */
- {illegal,nullptr }, /* 53: 0111 0000 0101 0011 */
- {illegal,nullptr }, /* 54: 0111 0000 0101 0100 */
- {illegal,nullptr }, /* 55: 0111 0000 0101 0101 */
- {illegal,nullptr }, /* 56: 0111 0000 0101 0110 */
- {illegal,nullptr }, /* 57: 0111 0000 0101 0111 */
- {illegal,nullptr }, /* 58: 0111 0000 0101 1000 */
- {illegal,nullptr }, /* 59: 0111 0000 0101 1001 */
- {illegal,nullptr }, /* 5a: 0111 0000 0101 1010 */
- {illegal,nullptr }, /* 5b: 0111 0000 0101 1011 */
- {illegal,nullptr }, /* 5c: 0111 0000 0101 1100 */
- {illegal,nullptr }, /* 5d: 0111 0000 0101 1101 */
- {illegal,nullptr }, /* 5e: 0111 0000 0101 1110 */
- {illegal,nullptr }, /* 5f: 0111 0000 0101 1111 */
+ { }, // 50: 0111 0000 0101 0000
+ { }, // 51: 0111 0000 0101 0001
+ { }, // 52: 0111 0000 0101 0010
+ { }, // 53: 0111 0000 0101 0011
+ { }, // 54: 0111 0000 0101 0100
+ { }, // 55: 0111 0000 0101 0101
+ { }, // 56: 0111 0000 0101 0110
+ { }, // 57: 0111 0000 0101 0111
+ { }, // 58: 0111 0000 0101 1000
+ { }, // 59: 0111 0000 0101 1001
+ { }, // 5a: 0111 0000 0101 1010
+ { }, // 5b: 0111 0000 0101 1011
+ { }, // 5c: 0111 0000 0101 1100
+ { }, // 5d: 0111 0000 0101 1101
+ { }, // 5e: 0111 0000 0101 1110
+ { }, // 5f: 0111 0000 0101 1111
- {ESUB,"EA,V" }, /* 60: 0111 0000 0110 0000 */
- {ESUB,"EA,A" }, /* 61: 0111 0000 0110 0001 */
- {ESUB,"EA,B" }, /* 62: 0111 0000 0110 0010 */
- {ESUB,"EA,C" }, /* 63: 0111 0000 0110 0011 */
- {illegal,nullptr }, /* 64: 0111 0000 0110 0100 */
- {illegal,nullptr }, /* 65: 0111 0000 0110 0101 */
- {illegal,nullptr }, /* 66: 0111 0000 0110 0110 */
- {illegal,nullptr }, /* 67: 0111 0000 0110 0111 */
- {MOV,"V,(%w)" }, /* 68: 0111 0000 0110 1000 llll llll hhhh hhhh */
- {MOV,"A,(%w)" }, /* 69: 0111 0000 0110 1001 llll llll hhhh hhhh */
- {MOV,"B,(%w)" }, /* 6a: 0111 0000 0110 1010 llll llll hhhh hhhh */
- {MOV,"C,(%w)" }, /* 6b: 0111 0000 0110 1011 llll llll hhhh hhhh */
- {MOV,"D,(%w)" }, /* 6c: 0111 0000 0110 1100 llll llll hhhh hhhh */
- {MOV,"E,(%w)" }, /* 6d: 0111 0000 0110 1101 llll llll hhhh hhhh */
- {MOV,"H,(%w)" }, /* 6e: 0111 0000 0110 1110 llll llll hhhh hhhh */
- {MOV,"L,(%w)" }, /* 6f: 0111 0000 0110 1111 llll llll hhhh hhhh */
+ {ESUB, "EA,V" }, // 60: 0111 0000 0110 0000
+ {ESUB, "EA,A" }, // 61: 0111 0000 0110 0001
+ {ESUB, "EA,B" }, // 62: 0111 0000 0110 0010
+ {ESUB, "EA,C" }, // 63: 0111 0000 0110 0011
+ { }, // 64: 0111 0000 0110 0100
+ { }, // 65: 0111 0000 0110 0101
+ { }, // 66: 0111 0000 0110 0110
+ { }, // 67: 0111 0000 0110 0111
+ {MOV, "V,(%w)" }, // 68: 0111 0000 0110 1000 llll llll hhhh hhhh
+ {MOV, "A,(%w)" }, // 69: 0111 0000 0110 1001 llll llll hhhh hhhh
+ {MOV, "B,(%w)" }, // 6a: 0111 0000 0110 1010 llll llll hhhh hhhh
+ {MOV, "C,(%w)" }, // 6b: 0111 0000 0110 1011 llll llll hhhh hhhh
+ {MOV, "D,(%w)" }, // 6c: 0111 0000 0110 1100 llll llll hhhh hhhh
+ {MOV, "E,(%w)" }, // 6d: 0111 0000 0110 1101 llll llll hhhh hhhh
+ {MOV, "H,(%w)" }, // 6e: 0111 0000 0110 1110 llll llll hhhh hhhh
+ {MOV, "L,(%w)" }, // 6f: 0111 0000 0110 1111 llll llll hhhh hhhh
- {illegal,nullptr }, /* 70: 0111 0000 0111 0000 */
- {illegal,nullptr }, /* 71: 0111 0000 0111 0001 */
- {illegal,nullptr }, /* 72: 0111 0000 0111 0010 */
- {illegal,nullptr }, /* 73: 0111 0000 0111 0011 */
- {illegal,nullptr }, /* 74: 0111 0000 0111 0100 */
- {illegal,nullptr }, /* 75: 0111 0000 0111 0101 */
- {illegal,nullptr }, /* 76: 0111 0000 0111 0110 */
- {illegal,nullptr }, /* 77: 0111 0000 0111 0111 */
- {MOV,"(%w),V" }, /* 78: 0111 0000 0111 1000 llll llll hhhh hhhh */
- {MOV,"(%w),A" }, /* 79: 0111 0000 0111 1001 llll llll hhhh hhhh */
- {MOV,"(%w),B" }, /* 7a: 0111 0000 0111 1010 llll llll hhhh hhhh */
- {MOV,"(%w),C" }, /* 7b: 0111 0000 0111 1011 llll llll hhhh hhhh */
- {MOV,"(%w),D" }, /* 7c: 0111 0000 0111 1100 llll llll hhhh hhhh */
- {MOV,"(%w),E" }, /* 7d: 0111 0000 0111 1101 llll llll hhhh hhhh */
- {MOV,"(%w),H" }, /* 7e: 0111 0000 0111 1110 llll llll hhhh hhhh */
- {MOV,"(%w),L" }, /* 7f: 0111 0000 0111 1111 llll llll hhhh hhhh */
+ { }, // 70: 0111 0000 0111 0000
+ { }, // 71: 0111 0000 0111 0001
+ { }, // 72: 0111 0000 0111 0010
+ { }, // 73: 0111 0000 0111 0011
+ { }, // 74: 0111 0000 0111 0100
+ { }, // 75: 0111 0000 0111 0101
+ { }, // 76: 0111 0000 0111 0110
+ { }, // 77: 0111 0000 0111 0111
+ {MOV, "(%w),V" }, // 78: 0111 0000 0111 1000 llll llll hhhh hhhh
+ {MOV, "(%w),A" }, // 79: 0111 0000 0111 1001 llll llll hhhh hhhh
+ {MOV, "(%w),B" }, // 7a: 0111 0000 0111 1010 llll llll hhhh hhhh
+ {MOV, "(%w),C" }, // 7b: 0111 0000 0111 1011 llll llll hhhh hhhh
+ {MOV, "(%w),D" }, // 7c: 0111 0000 0111 1100 llll llll hhhh hhhh
+ {MOV, "(%w),E" }, // 7d: 0111 0000 0111 1101 llll llll hhhh hhhh
+ {MOV, "(%w),H" }, // 7e: 0111 0000 0111 1110 llll llll hhhh hhhh
+ {MOV, "(%w),L" }, // 7f: 0111 0000 0111 1111 llll llll hhhh hhhh
- {illegal,nullptr }, /* 80: 0111 0000 1000 0000 */
- {illegal,nullptr }, /* 81: 0111 0000 1000 0001 */
- {illegal,nullptr }, /* 82: 0111 0000 1000 0010 */
- {illegal,nullptr }, /* 83: 0111 0000 1000 0011 */
- {illegal,nullptr }, /* 84: 0111 0000 1000 0100 */
- {illegal,nullptr }, /* 85: 0111 0000 1000 0101 */
- {illegal,nullptr }, /* 86: 0111 0000 1000 0110 */
- {illegal,nullptr }, /* 87: 0111 0000 1000 0111 */
- {illegal,nullptr }, /* 88: 0111 0000 1000 1000 */
- {ANAX,"(BC)" }, /* 89: 0111 0000 1000 1001 */
- {ANAX,"(DE)" }, /* 8a: 0111 0000 1000 1010 */
- {ANAX,"(HL)" }, /* 8b: 0111 0000 1000 1011 */
- {ANAX,"(DE+)" }, /* 8c: 0111 0000 1000 1100 */
- {ANAX,"(HL+)" }, /* 8d: 0111 0000 1000 1101 */
- {ANAX,"(DE-)" }, /* 8e: 0111 0000 1000 1110 */
- {ANAX,"(HL-)" }, /* 8f: 0111 0000 1000 1111 */
+ { }, // 80: 0111 0000 1000 0000
+ { }, // 81: 0111 0000 1000 0001
+ { }, // 82: 0111 0000 1000 0010
+ { }, // 83: 0111 0000 1000 0011
+ { }, // 84: 0111 0000 1000 0100
+ { }, // 85: 0111 0000 1000 0101
+ { }, // 86: 0111 0000 1000 0110
+ { }, // 87: 0111 0000 1000 0111
+ { }, // 88: 0111 0000 1000 1000
+ {ANAX, "(BC)" }, // 89: 0111 0000 1000 1001
+ {ANAX, "(DE)" }, // 8a: 0111 0000 1000 1010
+ {ANAX, "(HL)" }, // 8b: 0111 0000 1000 1011
+ {ANAX, "(DE+)" }, // 8c: 0111 0000 1000 1100
+ {ANAX, "(HL+)" }, // 8d: 0111 0000 1000 1101
+ {ANAX, "(DE-)" }, // 8e: 0111 0000 1000 1110
+ {ANAX, "(HL-)" }, // 8f: 0111 0000 1000 1111
- {illegal,nullptr }, /* 90: 0111 0000 1001 0000 */
- {XRAX,"(BC)" }, /* 91: 0111 0000 1001 0001 */
- {XRAX,"(DE)" }, /* 92: 0111 0000 1001 0010 */
- {XRAX,"(HL)" }, /* 93: 0111 0000 1001 0011 */
- {XRAX,"(DE+)" }, /* 94: 0111 0000 1001 0100 */
- {XRAX,"(HL+)" }, /* 95: 0111 0000 1001 0101 */
- {XRAX,"(DE-)" }, /* 96: 0111 0000 1001 0110 */
- {XRAX,"(HL-)" }, /* 97: 0111 0000 1001 0111 */
- {illegal,nullptr }, /* 98: 0111 0000 1001 1000 */
- {ORAX,"(BC)" }, /* 99: 0111 0000 1001 1001 */
- {ORAX,"(DE)" }, /* 9a: 0111 0000 1001 1010 */
- {ORAX,"(HL)" }, /* 9b: 0111 0000 1001 1011 */
- {ORAX,"(DE+)" }, /* 9c: 0111 0000 1001 1100 */
- {ORAX,"(HL+)" }, /* 9d: 0111 0000 1001 1101 */
- {ORAX,"(DE-)" }, /* 9e: 0111 0000 1001 1110 */
- {ORAX,"(HL-)" }, /* 9f: 0111 0000 1001 1111 */
+ { }, // 90: 0111 0000 1001 0000
+ {XRAX, "(BC)" }, // 91: 0111 0000 1001 0001
+ {XRAX, "(DE)" }, // 92: 0111 0000 1001 0010
+ {XRAX, "(HL)" }, // 93: 0111 0000 1001 0011
+ {XRAX, "(DE+)" }, // 94: 0111 0000 1001 0100
+ {XRAX, "(HL+)" }, // 95: 0111 0000 1001 0101
+ {XRAX, "(DE-)" }, // 96: 0111 0000 1001 0110
+ {XRAX, "(HL-)" }, // 97: 0111 0000 1001 0111
+ { }, // 98: 0111 0000 1001 1000
+ {ORAX, "(BC)" }, // 99: 0111 0000 1001 1001
+ {ORAX, "(DE)" }, // 9a: 0111 0000 1001 1010
+ {ORAX, "(HL)" }, // 9b: 0111 0000 1001 1011
+ {ORAX, "(DE+)" }, // 9c: 0111 0000 1001 1100
+ {ORAX, "(HL+)" }, // 9d: 0111 0000 1001 1101
+ {ORAX, "(DE-)" }, // 9e: 0111 0000 1001 1110
+ {ORAX, "(HL-)" }, // 9f: 0111 0000 1001 1111
- {illegal,nullptr }, /* a0: 0111 0000 1010 0000 */
- {ADDNCX,"(BC)" }, /* a1: 0111 0000 1010 0001 */
- {ADDNCX,"(DE)" }, /* a2: 0111 0000 1010 0010 */
- {ADDNCX,"(HL)" }, /* a3: 0111 0000 1010 0011 */
- {ADDNCX,"(DE+)" }, /* a4: 0111 0000 1010 0100 */
- {ADDNCX,"(HL+)" }, /* a5: 0111 0000 1010 0101 */
- {ADDNCX,"(DE-)" }, /* a6: 0111 0000 1010 0110 */
- {ADDNCX,"(HL-)" }, /* a7: 0111 0000 1010 0111 */
- {illegal,nullptr }, /* a8: 0111 0000 1010 1000 */
- {GTAX,"(BC)" }, /* a9: 0111 0000 1010 1001 */
- {GTAX,"(DE)" }, /* aa: 0111 0000 1010 1010 */
- {GTAX,"(HL)" }, /* ab: 0111 0000 1010 1011 */
- {GTAX,"(DE+)" }, /* ac: 0111 0000 1010 1100 */
- {GTAX,"(HL+)" }, /* ad: 0111 0000 1010 1101 */
- {GTAX,"(DE-)" }, /* ae: 0111 0000 1010 1110 */
- {GTAX,"(HL-)" }, /* af: 0111 0000 1010 1111 */
+ { }, // a0: 0111 0000 1010 0000
+ {ADDNCX, "(BC)" }, // a1: 0111 0000 1010 0001
+ {ADDNCX, "(DE)" }, // a2: 0111 0000 1010 0010
+ {ADDNCX, "(HL)" }, // a3: 0111 0000 1010 0011
+ {ADDNCX, "(DE+)" }, // a4: 0111 0000 1010 0100
+ {ADDNCX, "(HL+)" }, // a5: 0111 0000 1010 0101
+ {ADDNCX, "(DE-)" }, // a6: 0111 0000 1010 0110
+ {ADDNCX, "(HL-)" }, // a7: 0111 0000 1010 0111
+ { }, // a8: 0111 0000 1010 1000
+ {GTAX, "(BC)" }, // a9: 0111 0000 1010 1001
+ {GTAX, "(DE)" }, // aa: 0111 0000 1010 1010
+ {GTAX, "(HL)" }, // ab: 0111 0000 1010 1011
+ {GTAX, "(DE+)" }, // ac: 0111 0000 1010 1100
+ {GTAX, "(HL+)" }, // ad: 0111 0000 1010 1101
+ {GTAX, "(DE-)" }, // ae: 0111 0000 1010 1110
+ {GTAX, "(HL-)" }, // af: 0111 0000 1010 1111
- {illegal,nullptr }, /* b0: 0111 0000 1011 0000 */
- {SUBNBX,"(BC)" }, /* b1: 0111 0000 1011 0001 */
- {SUBNBX,"(DE)" }, /* b2: 0111 0000 1011 0010 */
- {SUBNBX,"(HL)" }, /* b3: 0111 0000 1011 0011 */
- {SUBNBX,"(DE+)" }, /* b4: 0111 0000 1011 0100 */
- {SUBNBX,"(HL+)" }, /* b5: 0111 0000 1011 0101 */
- {SUBNBX,"(DE-)" }, /* b6: 0111 0000 1011 0110 */
- {SUBNBX,"(HL-)" }, /* b7: 0111 0000 1011 0111 */
- {illegal,nullptr }, /* b8: 0111 0000 1011 1000 */
- {LTAX,"(BC)" }, /* b9: 0111 0000 1011 1001 */
- {LTAX,"(DE)" }, /* ba: 0111 0000 1011 1010 */
- {LTAX,"(HL)" }, /* bb: 0111 0000 1011 1011 */
- {LTAX,"(DE+)" }, /* bc: 0111 0000 1011 1100 */
- {LTAX,"(HL+)" }, /* bd: 0111 0000 1011 1101 */
- {LTAX,"(DE-)" }, /* be: 0111 0000 1011 1110 */
- {LTAX,"(HL-)" }, /* bf: 0111 0000 1011 1111 */
+ { }, // b0: 0111 0000 1011 0000
+ {SUBNBX, "(BC)" }, // b1: 0111 0000 1011 0001
+ {SUBNBX, "(DE)" }, // b2: 0111 0000 1011 0010
+ {SUBNBX, "(HL)" }, // b3: 0111 0000 1011 0011
+ {SUBNBX, "(DE+)" }, // b4: 0111 0000 1011 0100
+ {SUBNBX, "(HL+)" }, // b5: 0111 0000 1011 0101
+ {SUBNBX, "(DE-)" }, // b6: 0111 0000 1011 0110
+ {SUBNBX, "(HL-)" }, // b7: 0111 0000 1011 0111
+ { }, // b8: 0111 0000 1011 1000
+ {LTAX, "(BC)" }, // b9: 0111 0000 1011 1001
+ {LTAX, "(DE)" }, // ba: 0111 0000 1011 1010
+ {LTAX, "(HL)" }, // bb: 0111 0000 1011 1011
+ {LTAX, "(DE+)" }, // bc: 0111 0000 1011 1100
+ {LTAX, "(HL+)" }, // bd: 0111 0000 1011 1101
+ {LTAX, "(DE-)" }, // be: 0111 0000 1011 1110
+ {LTAX, "(HL-)" }, // bf: 0111 0000 1011 1111
- {illegal,nullptr }, /* c0: 0111 0000 1100 0000 */
- {ADDX,"(BC)" }, /* c1: 0111 0000 1100 0001 */
- {ADDX,"(DE)" }, /* c2: 0111 0000 1100 0010 */
- {ADDX,"(HL)" }, /* c3: 0111 0000 1100 0011 */
- {ADDX,"(DE+)" }, /* c4: 0111 0000 1100 0100 */
- {ADDX,"(HL+)" }, /* c5: 0111 0000 1100 0101 */
- {ADDX,"(DE-)" }, /* c6: 0111 0000 1100 0110 */
- {ADDX,"(HL-)" }, /* c7: 0111 0000 1100 0111 */
- {illegal,nullptr }, /* c8: 0111 0000 1100 1000 */
- {ONAX,"(BC)" }, /* c9: 0111 0000 1100 1001 */
- {ONAX,"(DE)" }, /* ca: 0111 0000 1100 1010 */
- {ONAX,"(HL)" }, /* cb: 0111 0000 1100 1011 */
- {ONAX,"(DE+)" }, /* cc: 0111 0000 1100 1100 */
- {ONAX,"(HL+)" }, /* cd: 0111 0000 1100 1101 */
- {ONAX,"(DE-)" }, /* ce: 0111 0000 1100 1110 */
- {ONAX,"(HL-)" }, /* cf: 0111 0000 1100 1111 */
+ { }, // c0: 0111 0000 1100 0000
+ {ADDX, "(BC)" }, // c1: 0111 0000 1100 0001
+ {ADDX, "(DE)" }, // c2: 0111 0000 1100 0010
+ {ADDX, "(HL)" }, // c3: 0111 0000 1100 0011
+ {ADDX, "(DE+)" }, // c4: 0111 0000 1100 0100
+ {ADDX, "(HL+)" }, // c5: 0111 0000 1100 0101
+ {ADDX, "(DE-)" }, // c6: 0111 0000 1100 0110
+ {ADDX, "(HL-)" }, // c7: 0111 0000 1100 0111
+ { }, // c8: 0111 0000 1100 1000
+ {ONAX, "(BC)" }, // c9: 0111 0000 1100 1001
+ {ONAX, "(DE)" }, // ca: 0111 0000 1100 1010
+ {ONAX, "(HL)" }, // cb: 0111 0000 1100 1011
+ {ONAX, "(DE+)" }, // cc: 0111 0000 1100 1100
+ {ONAX, "(HL+)" }, // cd: 0111 0000 1100 1101
+ {ONAX, "(DE-)" }, // ce: 0111 0000 1100 1110
+ {ONAX, "(HL-)" }, // cf: 0111 0000 1100 1111
- {illegal,nullptr }, /* d0: 0111 0000 1101 0000 */
- {ADCX,"(BC)" }, /* d1: 0111 0000 1101 0001 */
- {ADCX,"(DE)" }, /* d2: 0111 0000 1101 0010 */
- {ADCX,"(HL)" }, /* d3: 0111 0000 1101 0011 */
- {ADCX,"(DE+)" }, /* d4: 0111 0000 1101 0100 */
- {ADCX,"(HL+)" }, /* d5: 0111 0000 1101 0101 */
- {ADCX,"(DE-)" }, /* d6: 0111 0000 1101 0110 */
- {ADCX,"(HL-)" }, /* d7: 0111 0000 1101 0111 */
- {illegal,nullptr }, /* d8: 0111 0000 1101 1000 */
- {OFFAX,"(BC)" }, /* d9: 0111 0000 1101 1001 */
- {OFFAX,"(DE)" }, /* da: 0111 0000 1101 1010 */
- {OFFAX,"(HL)" }, /* db: 0111 0000 1101 1011 */
- {OFFAX,"(DE+)" }, /* dc: 0111 0000 1101 1100 */
- {OFFAX,"(HL+)" }, /* dd: 0111 0000 1101 1101 */
- {OFFAX,"(DE-)" }, /* de: 0111 0000 1101 1110 */
- {OFFAX,"(HL-)" }, /* df: 0111 0000 1101 1111 */
+ { }, // d0: 0111 0000 1101 0000
+ {ADCX, "(BC)" }, // d1: 0111 0000 1101 0001
+ {ADCX, "(DE)" }, // d2: 0111 0000 1101 0010
+ {ADCX, "(HL)" }, // d3: 0111 0000 1101 0011
+ {ADCX, "(DE+)" }, // d4: 0111 0000 1101 0100
+ {ADCX, "(HL+)" }, // d5: 0111 0000 1101 0101
+ {ADCX, "(DE-)" }, // d6: 0111 0000 1101 0110
+ {ADCX, "(HL-)" }, // d7: 0111 0000 1101 0111
+ { }, // d8: 0111 0000 1101 1000
+ {OFFAX, "(BC)" }, // d9: 0111 0000 1101 1001
+ {OFFAX, "(DE)" }, // da: 0111 0000 1101 1010
+ {OFFAX, "(HL)" }, // db: 0111 0000 1101 1011
+ {OFFAX, "(DE+)" }, // dc: 0111 0000 1101 1100
+ {OFFAX, "(HL+)" }, // dd: 0111 0000 1101 1101
+ {OFFAX, "(DE-)" }, // de: 0111 0000 1101 1110
+ {OFFAX, "(HL-)" }, // df: 0111 0000 1101 1111
- {illegal,nullptr }, /* e0: 0111 0000 1110 0000 */
- {SUBX,"(BC)" }, /* e1: 0111 0000 1110 0001 */
- {SUBX,"(DE)" }, /* e2: 0111 0000 1110 0010 */
- {SUBX,"(HL)" }, /* e3: 0111 0000 1110 0011 */
- {SUBX,"(DE+)" }, /* e4: 0111 0000 1110 0100 */
- {SUBX,"(HL+)" }, /* e5: 0111 0000 1110 0101 */
- {SUBX,"(DE-)" }, /* e6: 0111 0000 1110 0110 */
- {SUBX,"(HL-)" }, /* e7: 0111 0000 1110 0111 */
- {illegal,nullptr }, /* e8: 0111 0000 1110 1000 */
- {NEAX,"(BC)" }, /* e9: 0111 0000 1110 1001 */
- {NEAX,"(DE)" }, /* ea: 0111 0000 1110 1010 */
- {NEAX,"(HL)" }, /* eb: 0111 0000 1110 1011 */
- {NEAX,"(DE+)" }, /* ec: 0111 0000 1110 1100 */
- {NEAX,"(HL+)" }, /* ed: 0111 0000 1110 1101 */
- {NEAX,"(DE-)" }, /* ee: 0111 0000 1110 1110 */
- {NEAX,"(HL-)" }, /* ef: 0111 0000 1110 1111 */
+ { }, // e0: 0111 0000 1110 0000
+ {SUBX, "(BC)" }, // e1: 0111 0000 1110 0001
+ {SUBX, "(DE)" }, // e2: 0111 0000 1110 0010
+ {SUBX, "(HL)" }, // e3: 0111 0000 1110 0011
+ {SUBX, "(DE+)" }, // e4: 0111 0000 1110 0100
+ {SUBX, "(HL+)" }, // e5: 0111 0000 1110 0101
+ {SUBX, "(DE-)" }, // e6: 0111 0000 1110 0110
+ {SUBX, "(HL-)" }, // e7: 0111 0000 1110 0111
+ { }, // e8: 0111 0000 1110 1000
+ {NEAX, "(BC)" }, // e9: 0111 0000 1110 1001
+ {NEAX, "(DE)" }, // ea: 0111 0000 1110 1010
+ {NEAX, "(HL)" }, // eb: 0111 0000 1110 1011
+ {NEAX, "(DE+)" }, // ec: 0111 0000 1110 1100
+ {NEAX, "(HL+)" }, // ed: 0111 0000 1110 1101
+ {NEAX, "(DE-)" }, // ee: 0111 0000 1110 1110
+ {NEAX, "(HL-)" }, // ef: 0111 0000 1110 1111
- {illegal,nullptr }, /* f0: 0111 0000 1111 0000 */
- {SBBX,"(BC)" }, /* f1: 0111 0000 1111 0001 */
- {SBBX,"(DE)" }, /* f2: 0111 0000 1111 0010 */
- {SBBX,"(HL)" }, /* f3: 0111 0000 1111 0011 */
- {SBBX,"(DE+)" }, /* f4: 0111 0000 1111 0100 */
- {SBBX,"(HL+)" }, /* f5: 0111 0000 1111 0101 */
- {SBBX,"(DE-)" }, /* f6: 0111 0000 1111 0110 */
- {SBBX,"(HL-)" }, /* f7: 0111 0000 1111 0111 */
- {illegal,nullptr }, /* f8: 0111 0000 1111 1000 */
- {EQAX,"(BC)" }, /* f9: 0111 0000 1111 1001 */
- {EQAX,"(DE)" }, /* fa: 0111 0000 1111 1010 */
- {EQAX,"(HL)" }, /* fb: 0111 0000 1111 1011 */
- {EQAX,"(DE+)" }, /* fc: 0111 0000 1111 1100 */
- {EQAX,"(HL+)" }, /* fd: 0111 0000 1111 1101 */
- {EQAX,"(DE-)" }, /* fe: 0111 0000 1111 1110 */
- {EQAX,"(HL-)" } /* ff: 0111 0000 1111 1111 */
+ { }, // f0: 0111 0000 1111 0000
+ {SBBX, "(BC)" }, // f1: 0111 0000 1111 0001
+ {SBBX, "(DE)" }, // f2: 0111 0000 1111 0010
+ {SBBX, "(HL)" }, // f3: 0111 0000 1111 0011
+ {SBBX, "(DE+)" }, // f4: 0111 0000 1111 0100
+ {SBBX, "(HL+)" }, // f5: 0111 0000 1111 0101
+ {SBBX, "(DE-)" }, // f6: 0111 0000 1111 0110
+ {SBBX, "(HL-)" }, // f7: 0111 0000 1111 0111
+ { }, // f8: 0111 0000 1111 1000
+ {EQAX, "(BC)" }, // f9: 0111 0000 1111 1001
+ {EQAX, "(DE)" }, // fa: 0111 0000 1111 1010
+ {EQAX, "(HL)" }, // fb: 0111 0000 1111 1011
+ {EQAX, "(DE+)" }, // fc: 0111 0000 1111 1100
+ {EQAX, "(HL+)" }, // fd: 0111 0000 1111 1101
+ {EQAX, "(DE-)" }, // fe: 0111 0000 1111 1110
+ {EQAX, "(HL-)" } // ff: 0111 0000 1111 1111
};
-/* prefix 74 */
-static const struct dasm_s dasm74[256] =
+// prefix 74
+const dasm_s dasm_s::d74[256] =
{
- {illegal,nullptr }, /* 00: 0111 0100 0000 0000 */
- {illegal,nullptr }, /* 01: 0111 0100 0000 0001 */
- {illegal,nullptr }, /* 02: 0111 0100 0000 0010 */
- {illegal,nullptr }, /* 03: 0111 0100 0000 0011 */
- {illegal,nullptr }, /* 04: 0111 0100 0000 0100 */
- {illegal,nullptr }, /* 05: 0111 0100 0000 0101 */
- {illegal,nullptr }, /* 06: 0111 0100 0000 0110 */
- {illegal,nullptr }, /* 07: 0111 0100 0000 0111 */
- {ANI,"V,%b" }, /* 08: 0111 0100 0000 1000 xxxx xxxx */
- {ANI,"A,%b" }, /* 09: 0111 0100 0000 1001 xxxx xxxx */
- {ANI,"B,%b" }, /* 0a: 0111 0100 0000 1010 xxxx xxxx */
- {ANI,"C,%b" }, /* 0b: 0111 0100 0000 1011 xxxx xxxx */
- {ANI,"D,%b" }, /* 0c: 0111 0100 0000 1100 xxxx xxxx */
- {ANI,"E,%b" }, /* 0d: 0111 0100 0000 1101 xxxx xxxx */
- {ANI,"H,%b" }, /* 0e: 0111 0100 0000 1110 xxxx xxxx */
- {ANI,"L,%b" }, /* 0f: 0111 0100 0000 1111 xxxx xxxx */
+ { }, // 00: 0111 0100 0000 0000
+ { }, // 01: 0111 0100 0000 0001
+ { }, // 02: 0111 0100 0000 0010
+ { }, // 03: 0111 0100 0000 0011
+ { }, // 04: 0111 0100 0000 0100
+ { }, // 05: 0111 0100 0000 0101
+ { }, // 06: 0111 0100 0000 0110
+ { }, // 07: 0111 0100 0000 0111
+ {ANI, "V,%b" }, // 08: 0111 0100 0000 1000 xxxx xxxx
+ {ANI, "A,%b" }, // 09: 0111 0100 0000 1001 xxxx xxxx
+ {ANI, "B,%b" }, // 0a: 0111 0100 0000 1010 xxxx xxxx
+ {ANI, "C,%b" }, // 0b: 0111 0100 0000 1011 xxxx xxxx
+ {ANI, "D,%b" }, // 0c: 0111 0100 0000 1100 xxxx xxxx
+ {ANI, "E,%b" }, // 0d: 0111 0100 0000 1101 xxxx xxxx
+ {ANI, "H,%b" }, // 0e: 0111 0100 0000 1110 xxxx xxxx
+ {ANI, "L,%b" }, // 0f: 0111 0100 0000 1111 xxxx xxxx
- {XRI,"V,%b" }, /* 10: 0111 0100 0001 0000 xxxx xxxx */
- {XRI,"A,%b" }, /* 11: 0111 0100 0001 0001 xxxx xxxx */
- {XRI,"B,%b" }, /* 12: 0111 0100 0001 0010 xxxx xxxx */
- {XRI,"C,%b" }, /* 13: 0111 0100 0001 0011 xxxx xxxx */
- {XRI,"D,%b" }, /* 14: 0111 0100 0001 0100 xxxx xxxx */
- {XRI,"E,%b" }, /* 15: 0111 0100 0001 0101 xxxx xxxx */
- {XRI,"H,%b" }, /* 16: 0111 0100 0001 0110 xxxx xxxx */
- {XRI,"L,%b" }, /* 17: 0111 0100 0001 0111 xxxx xxxx */
- {ORI,"V,%b" }, /* 18: 0111 0100 0001 1000 xxxx xxxx */
- {ORI,"A,%b" }, /* 19: 0111 0100 0001 1001 xxxx xxxx */
- {ORI,"B,%b" }, /* 1a: 0111 0100 0001 1010 xxxx xxxx */
- {ORI,"C,%b" }, /* 1b: 0111 0100 0001 1011 xxxx xxxx */
- {ORI,"D,%b" }, /* 1c: 0111 0100 0001 1100 xxxx xxxx */
- {ORI,"E,%b" }, /* 1d: 0111 0100 0001 1101 xxxx xxxx */
- {ORI,"H,%b" }, /* 1e: 0111 0100 0001 1110 xxxx xxxx */
- {ORI,"L,%b" }, /* 1f: 0111 0100 0001 1111 xxxx xxxx */
+ {XRI, "V,%b" }, // 10: 0111 0100 0001 0000 xxxx xxxx
+ {XRI, "A,%b" }, // 11: 0111 0100 0001 0001 xxxx xxxx
+ {XRI, "B,%b" }, // 12: 0111 0100 0001 0010 xxxx xxxx
+ {XRI, "C,%b" }, // 13: 0111 0100 0001 0011 xxxx xxxx
+ {XRI, "D,%b" }, // 14: 0111 0100 0001 0100 xxxx xxxx
+ {XRI, "E,%b" }, // 15: 0111 0100 0001 0101 xxxx xxxx
+ {XRI, "H,%b" }, // 16: 0111 0100 0001 0110 xxxx xxxx
+ {XRI, "L,%b" }, // 17: 0111 0100 0001 0111 xxxx xxxx
+ {ORI, "V,%b" }, // 18: 0111 0100 0001 1000 xxxx xxxx
+ {ORI, "A,%b" }, // 19: 0111 0100 0001 1001 xxxx xxxx
+ {ORI, "B,%b" }, // 1a: 0111 0100 0001 1010 xxxx xxxx
+ {ORI, "C,%b" }, // 1b: 0111 0100 0001 1011 xxxx xxxx
+ {ORI, "D,%b" }, // 1c: 0111 0100 0001 1100 xxxx xxxx
+ {ORI, "E,%b" }, // 1d: 0111 0100 0001 1101 xxxx xxxx
+ {ORI, "H,%b" }, // 1e: 0111 0100 0001 1110 xxxx xxxx
+ {ORI, "L,%b" }, // 1f: 0111 0100 0001 1111 xxxx xxxx
- {ADINC,"V,%b" }, /* 20: 0111 0100 0010 0000 xxxx xxxx */
- {ADINC,"A,%b" }, /* 21: 0111 0100 0010 0001 xxxx xxxx */
- {ADINC,"B,%b" }, /* 22: 0111 0100 0010 0010 xxxx xxxx */
- {ADINC,"C,%b" }, /* 23: 0111 0100 0010 0011 xxxx xxxx */
- {ADINC,"D,%b" }, /* 24: 0111 0100 0010 0100 xxxx xxxx */
- {ADINC,"E,%b" }, /* 25: 0111 0100 0010 0101 xxxx xxxx */
- {ADINC,"H,%b" }, /* 26: 0111 0100 0010 0110 xxxx xxxx */
- {ADINC,"L,%b" }, /* 27: 0111 0100 0010 0111 xxxx xxxx */
- {GTI,"V,%b" }, /* 28: 0111 0100 0010 1000 xxxx xxxx */
- {GTI,"A,%b" }, /* 29: 0111 0100 0010 1001 xxxx xxxx */
- {GTI,"B,%b" }, /* 2a: 0111 0100 0010 1010 xxxx xxxx */
- {GTI,"C,%b" }, /* 2b: 0111 0100 0010 1011 xxxx xxxx */
- {GTI,"D,%b" }, /* 2c: 0111 0100 0010 1100 xxxx xxxx */
- {GTI,"E,%b" }, /* 2d: 0111 0100 0010 1101 xxxx xxxx */
- {GTI,"H,%b" }, /* 2e: 0111 0100 0010 1110 xxxx xxxx */
- {GTI,"L,%b" }, /* 2f: 0111 0100 0010 1111 xxxx xxxx */
+ {ADINC, "V,%b" }, // 20: 0111 0100 0010 0000 xxxx xxxx
+ {ADINC, "A,%b" }, // 21: 0111 0100 0010 0001 xxxx xxxx
+ {ADINC, "B,%b" }, // 22: 0111 0100 0010 0010 xxxx xxxx
+ {ADINC, "C,%b" }, // 23: 0111 0100 0010 0011 xxxx xxxx
+ {ADINC, "D,%b" }, // 24: 0111 0100 0010 0100 xxxx xxxx
+ {ADINC, "E,%b" }, // 25: 0111 0100 0010 0101 xxxx xxxx
+ {ADINC, "H,%b" }, // 26: 0111 0100 0010 0110 xxxx xxxx
+ {ADINC, "L,%b" }, // 27: 0111 0100 0010 0111 xxxx xxxx
+ {GTI, "V,%b" }, // 28: 0111 0100 0010 1000 xxxx xxxx
+ {GTI, "A,%b" }, // 29: 0111 0100 0010 1001 xxxx xxxx
+ {GTI, "B,%b" }, // 2a: 0111 0100 0010 1010 xxxx xxxx
+ {GTI, "C,%b" }, // 2b: 0111 0100 0010 1011 xxxx xxxx
+ {GTI, "D,%b" }, // 2c: 0111 0100 0010 1100 xxxx xxxx
+ {GTI, "E,%b" }, // 2d: 0111 0100 0010 1101 xxxx xxxx
+ {GTI, "H,%b" }, // 2e: 0111 0100 0010 1110 xxxx xxxx
+ {GTI, "L,%b" }, // 2f: 0111 0100 0010 1111 xxxx xxxx
- {SUINB,"V,%b" }, /* 30: 0111 0100 0011 0000 xxxx xxxx */
- {SUINB,"A,%b" }, /* 31: 0111 0100 0011 0001 xxxx xxxx */
- {SUINB,"B,%b" }, /* 32: 0111 0100 0011 0010 xxxx xxxx */
- {SUINB,"C,%b" }, /* 33: 0111 0100 0011 0011 xxxx xxxx */
- {SUINB,"D,%b" }, /* 34: 0111 0100 0011 0100 xxxx xxxx */
- {SUINB,"E,%b" }, /* 35: 0111 0100 0011 0101 xxxx xxxx */
- {SUINB,"H,%b" }, /* 36: 0111 0100 0011 0110 xxxx xxxx */
- {SUINB,"L,%b" }, /* 37: 0111 0100 0011 0111 xxxx xxxx */
- {LTI,"V,%b" }, /* 38: 0111 0100 0011 1000 xxxx xxxx */
- {LTI,"A,%b" }, /* 39: 0111 0100 0011 1001 xxxx xxxx */
- {LTI,"B,%b" }, /* 3a: 0111 0100 0011 1010 xxxx xxxx */
- {LTI,"C,%b" }, /* 3b: 0111 0100 0011 1011 xxxx xxxx */
- {LTI,"D,%b" }, /* 3c: 0111 0100 0011 1100 xxxx xxxx */
- {LTI,"E,%b" }, /* 3d: 0111 0100 0011 1101 xxxx xxxx */
- {LTI,"H,%b" }, /* 3e: 0111 0100 0011 1110 xxxx xxxx */
- {LTI,"L,%b" }, /* 3f: 0111 0100 0011 1111 xxxx xxxx */
+ {SUINB, "V,%b" }, // 30: 0111 0100 0011 0000 xxxx xxxx
+ {SUINB, "A,%b" }, // 31: 0111 0100 0011 0001 xxxx xxxx
+ {SUINB, "B,%b" }, // 32: 0111 0100 0011 0010 xxxx xxxx
+ {SUINB, "C,%b" }, // 33: 0111 0100 0011 0011 xxxx xxxx
+ {SUINB, "D,%b" }, // 34: 0111 0100 0011 0100 xxxx xxxx
+ {SUINB, "E,%b" }, // 35: 0111 0100 0011 0101 xxxx xxxx
+ {SUINB, "H,%b" }, // 36: 0111 0100 0011 0110 xxxx xxxx
+ {SUINB, "L,%b" }, // 37: 0111 0100 0011 0111 xxxx xxxx
+ {LTI, "V,%b" }, // 37: 0111 0100 0011 1000 xxxx xxxx
+ {LTI, "A,%b" }, // 39: 0111 0100 0011 1001 xxxx xxxx
+ {LTI, "B,%b" }, // 3a: 0111 0100 0011 1010 xxxx xxxx
+ {LTI, "C,%b" }, // 3b: 0111 0100 0011 1011 xxxx xxxx
+ {LTI, "D,%b" }, // 3c: 0111 0100 0011 1100 xxxx xxxx
+ {LTI, "E,%b" }, // 3d: 0111 0100 0011 1101 xxxx xxxx
+ {LTI, "H,%b" }, // 3e: 0111 0100 0011 1110 xxxx xxxx
+ {LTI, "L,%b" }, // 3f: 0111 0100 0011 1111 xxxx xxxx
- {ADI,"V,%b" }, /* 40: 0111 0100 0100 0000 xxxx xxxx */
- {ADI,"A,%b" }, /* 41: 0111 0100 0100 0001 xxxx xxxx */
- {ADI,"B,%b" }, /* 42: 0111 0100 0100 0010 xxxx xxxx */
- {ADI,"C,%b" }, /* 43: 0111 0100 0100 0011 xxxx xxxx */
- {ADI,"D,%b" }, /* 44: 0111 0100 0100 0100 xxxx xxxx */
- {ADI,"E,%b" }, /* 45: 0111 0100 0100 0101 xxxx xxxx */
- {ADI,"H,%b" }, /* 46: 0111 0100 0100 0110 xxxx xxxx */
- {ADI,"L,%b" }, /* 47: 0111 0100 0100 0111 xxxx xxxx */
- {ONI,"V,%b" }, /* 48: 0111 0100 0100 1000 xxxx xxxx */
- {ONI,"A,%b" }, /* 49: 0111 0100 0100 1001 xxxx xxxx */
- {ONI,"B,%b" }, /* 4a: 0111 0100 0100 1010 xxxx xxxx */
- {ONI,"C,%b" }, /* 4b: 0111 0100 0100 1011 xxxx xxxx */
- {ONI,"D,%b" }, /* 4c: 0111 0100 0100 1100 xxxx xxxx */
- {ONI,"E,%b" }, /* 4d: 0111 0100 0100 1101 xxxx xxxx */
- {ONI,"H,%b" }, /* 4e: 0111 0100 0100 1110 xxxx xxxx */
- {ONI,"L,%b" }, /* 4f: 0111 0100 0100 1111 xxxx xxxx */
+ {ADI, "V,%b" }, // 40: 0111 0100 0100 0000 xxxx xxxx
+ {ADI, "A,%b" }, // 41: 0111 0100 0100 0001 xxxx xxxx
+ {ADI, "B,%b" }, // 42: 0111 0100 0100 0010 xxxx xxxx
+ {ADI, "C,%b" }, // 43: 0111 0100 0100 0011 xxxx xxxx
+ {ADI, "D,%b" }, // 44: 0111 0100 0100 0100 xxxx xxxx
+ {ADI, "E,%b" }, // 45: 0111 0100 0100 0101 xxxx xxxx
+ {ADI, "H,%b" }, // 46: 0111 0100 0100 0110 xxxx xxxx
+ {ADI, "L,%b" }, // 47: 0111 0100 0100 0111 xxxx xxxx
+ {ONI, "V,%b" }, // 48: 0111 0100 0100 1000 xxxx xxxx
+ {ONI, "A,%b" }, // 49: 0111 0100 0100 1001 xxxx xxxx
+ {ONI, "B,%b" }, // 4a: 0111 0100 0100 1010 xxxx xxxx
+ {ONI, "C,%b" }, // 4b: 0111 0100 0100 1011 xxxx xxxx
+ {ONI, "D,%b" }, // 4c: 0111 0100 0100 1100 xxxx xxxx
+ {ONI, "E,%b" }, // 4d: 0111 0100 0100 1101 xxxx xxxx
+ {ONI, "H,%b" }, // 4e: 0111 0100 0100 1110 xxxx xxxx
+ {ONI, "L,%b" }, // 4f: 0111 0100 0100 1111 xxxx xxxx
- {ACI,"V,%b" }, /* 50: 0111 0100 0101 0000 xxxx xxxx */
- {ACI,"A,%b" }, /* 51: 0111 0100 0101 0001 xxxx xxxx */
- {ACI,"B,%b" }, /* 52: 0111 0100 0101 0010 xxxx xxxx */
- {ACI,"C,%b" }, /* 53: 0111 0100 0101 0011 xxxx xxxx */
- {ACI,"D,%b" }, /* 54: 0111 0100 0101 0100 xxxx xxxx */
- {ACI,"E,%b" }, /* 55: 0111 0100 0101 0101 xxxx xxxx */
- {ACI,"H,%b" }, /* 56: 0111 0100 0101 0110 xxxx xxxx */
- {ACI,"L,%b" }, /* 57: 0111 0100 0101 0111 xxxx xxxx */
- {OFFI,"V,%b" }, /* 58: 0111 0100 0101 1000 xxxx xxxx */
- {OFFI,"A,%b" }, /* 59: 0111 0100 0101 1001 xxxx xxxx */
- {OFFI,"B,%b" }, /* 5a: 0111 0100 0101 1010 xxxx xxxx */
- {OFFI,"C,%b" }, /* 5b: 0111 0100 0101 1011 xxxx xxxx */
- {OFFI,"D,%b" }, /* 5c: 0111 0100 0101 1100 xxxx xxxx */
- {OFFI,"E,%b" }, /* 5d: 0111 0100 0101 1101 xxxx xxxx */
- {OFFI,"H,%b" }, /* 5e: 0111 0100 0101 1110 xxxx xxxx */
- {OFFI,"L,%b" }, /* 5f: 0111 0100 0101 1111 xxxx xxxx */
+ {ACI, "V,%b" }, // 50: 0111 0100 0101 0000 xxxx xxxx
+ {ACI, "A,%b" }, // 51: 0111 0100 0101 0001 xxxx xxxx
+ {ACI, "B,%b" }, // 52: 0111 0100 0101 0010 xxxx xxxx
+ {ACI, "C,%b" }, // 53: 0111 0100 0101 0011 xxxx xxxx
+ {ACI, "D,%b" }, // 54: 0111 0100 0101 0100 xxxx xxxx
+ {ACI, "E,%b" }, // 55: 0111 0100 0101 0101 xxxx xxxx
+ {ACI, "H,%b" }, // 56: 0111 0100 0101 0110 xxxx xxxx
+ {ACI, "L,%b" }, // 57: 0111 0100 0101 0111 xxxx xxxx
+ {OFFI, "V,%b" }, // 58: 0111 0100 0101 1000 xxxx xxxx
+ {OFFI, "A,%b" }, // 59: 0111 0100 0101 1001 xxxx xxxx
+ {OFFI, "B,%b" }, // 5a: 0111 0100 0101 1010 xxxx xxxx
+ {OFFI, "C,%b" }, // 5b: 0111 0100 0101 1011 xxxx xxxx
+ {OFFI, "D,%b" }, // 5c: 0111 0100 0101 1100 xxxx xxxx
+ {OFFI, "E,%b" }, // 5d: 0111 0100 0101 1101 xxxx xxxx
+ {OFFI, "H,%b" }, // 5e: 0111 0100 0101 1110 xxxx xxxx
+ {OFFI, "L,%b" }, // 5f: 0111 0100 0101 1111 xxxx xxxx
- {SUI,"V,%b" }, /* 60: 0111 0100 0110 0000 xxxx xxxx */
- {SUI,"A,%b" }, /* 61: 0111 0100 0110 0001 xxxx xxxx */
- {SUI,"B,%b" }, /* 62: 0111 0100 0110 0010 xxxx xxxx */
- {SUI,"C,%b" }, /* 63: 0111 0100 0110 0011 xxxx xxxx */
- {SUI,"D,%b" }, /* 64: 0111 0100 0110 0100 xxxx xxxx */
- {SUI,"E,%b" }, /* 65: 0111 0100 0110 0101 xxxx xxxx */
- {SUI,"H,%b" }, /* 66: 0111 0100 0110 0110 xxxx xxxx */
- {SUI,"L,%b" }, /* 67: 0111 0100 0110 0111 xxxx xxxx */
- {NEI,"V,%b" }, /* 68: 0111 0100 0110 1000 xxxx xxxx */
- {NEI,"A,%b" }, /* 69: 0111 0100 0110 1001 xxxx xxxx */
- {NEI,"B,%b" }, /* 6a: 0111 0100 0110 1010 xxxx xxxx */
- {NEI,"C,%b" }, /* 6b: 0111 0100 0110 1011 xxxx xxxx */
- {NEI,"D,%b" }, /* 6c: 0111 0100 0110 1100 xxxx xxxx */
- {NEI,"E,%b" }, /* 6d: 0111 0100 0110 1101 xxxx xxxx */
- {NEI,"H,%b" }, /* 6e: 0111 0100 0110 1110 xxxx xxxx */
- {NEI,"L,%b" }, /* 6f: 0111 0100 0110 1111 xxxx xxxx */
+ {SUI, "V,%b" }, // 60: 0111 0100 0110 0000 xxxx xxxx
+ {SUI, "A,%b" }, // 61: 0111 0100 0110 0001 xxxx xxxx
+ {SUI, "B,%b" }, // 62: 0111 0100 0110 0010 xxxx xxxx
+ {SUI, "C,%b" }, // 63: 0111 0100 0110 0011 xxxx xxxx
+ {SUI, "D,%b" }, // 64: 0111 0100 0110 0100 xxxx xxxx
+ {SUI, "E,%b" }, // 65: 0111 0100 0110 0101 xxxx xxxx
+ {SUI, "H,%b" }, // 66: 0111 0100 0110 0110 xxxx xxxx
+ {SUI, "L,%b" }, // 67: 0111 0100 0110 0111 xxxx xxxx
+ {NEI, "V,%b" }, // 68: 0111 0100 0110 1000 xxxx xxxx
+ {NEI, "A,%b" }, // 69: 0111 0100 0110 1001 xxxx xxxx
+ {NEI, "B,%b" }, // 6a: 0111 0100 0110 1010 xxxx xxxx
+ {NEI, "C,%b" }, // 6b: 0111 0100 0110 1011 xxxx xxxx
+ {NEI, "D,%b" }, // 6c: 0111 0100 0110 1100 xxxx xxxx
+ {NEI, "E,%b" }, // 6d: 0111 0100 0110 1101 xxxx xxxx
+ {NEI, "H,%b" }, // 6e: 0111 0100 0110 1110 xxxx xxxx
+ {NEI, "L,%b" }, // 6f: 0111 0100 0110 1111 xxxx xxxx
- {SBI,"V,%b" }, /* 70: 0111 0100 0111 0000 xxxx xxxx */
- {SBI,"A,%b" }, /* 71: 0111 0100 0111 0001 xxxx xxxx */
- {SBI,"B,%b" }, /* 72: 0111 0100 0111 0010 xxxx xxxx */
- {SBI,"C,%b" }, /* 73: 0111 0100 0111 0011 xxxx xxxx */
- {SBI,"D,%b" }, /* 74: 0111 0100 0111 0100 xxxx xxxx */
- {SBI,"E,%b" }, /* 75: 0111 0100 0111 0101 xxxx xxxx */
- {SBI,"H,%b" }, /* 76: 0111 0100 0111 0110 xxxx xxxx */
- {SBI,"L,%b" }, /* 77: 0111 0100 0111 0111 xxxx xxxx */
- {EQI,"V,%b" }, /* 78: 0111 0100 0111 1000 xxxx xxxx */
- {EQI,"A,%b" }, /* 79: 0111 0100 0111 1001 xxxx xxxx */
- {EQI,"B,%b" }, /* 7a: 0111 0100 0111 1010 xxxx xxxx */
- {EQI,"C,%b" }, /* 7b: 0111 0100 0111 1011 xxxx xxxx */
- {EQI,"D,%b" }, /* 7c: 0111 0100 0111 1100 xxxx xxxx */
- {EQI,"E,%b" }, /* 7d: 0111 0100 0111 1101 xxxx xxxx */
- {EQI,"H,%b" }, /* 7e: 0111 0100 0111 1110 xxxx xxxx */
- {EQI,"L,%b" }, /* 7f: 0111 0100 0111 1111 xxxx xxxx */
+ {SBI, "V,%b" }, // 70: 0111 0100 0111 0000 xxxx xxxx
+ {SBI, "A,%b" }, // 71: 0111 0100 0111 0001 xxxx xxxx
+ {SBI, "B,%b" }, // 72: 0111 0100 0111 0010 xxxx xxxx
+ {SBI, "C,%b" }, // 73: 0111 0100 0111 0011 xxxx xxxx
+ {SBI, "D,%b" }, // 74: 0111 0100 0111 0100 xxxx xxxx
+ {SBI, "E,%b" }, // 75: 0111 0100 0111 0101 xxxx xxxx
+ {SBI, "H,%b" }, // 76: 0111 0100 0111 0110 xxxx xxxx
+ {SBI, "L,%b" }, // 77: 0111 0100 0111 0111 xxxx xxxx
+ {EQI, "V,%b" }, // 78: 0111 0100 0111 1000 xxxx xxxx
+ {EQI, "A,%b" }, // 79: 0111 0100 0111 1001 xxxx xxxx
+ {EQI, "B,%b" }, // 7a: 0111 0100 0111 1010 xxxx xxxx
+ {EQI, "C,%b" }, // 7b: 0111 0100 0111 1011 xxxx xxxx
+ {EQI, "D,%b" }, // 7c: 0111 0100 0111 1100 xxxx xxxx
+ {EQI, "E,%b" }, // 7d: 0111 0100 0111 1101 xxxx xxxx
+ {EQI, "H,%b" }, // 7e: 0111 0100 0111 1110 xxxx xxxx
+ {EQI, "L,%b" }, // 7f: 0111 0100 0111 1111 xxxx xxxx
- {illegal,nullptr }, /* 80: 0111 0100 1000 0000 */
- {illegal,nullptr }, /* 81: 0111 0100 1000 0001 */
- {illegal,nullptr }, /* 82: 0111 0100 1000 0010 */
- {illegal,nullptr }, /* 83: 0111 0100 1000 0011 */
- {illegal,nullptr }, /* 84: 0111 0100 1000 0100 */
- {illegal,nullptr }, /* 85: 0111 0100 1000 0101 */
- {illegal,nullptr }, /* 86: 0111 0100 1000 0110 */
- {illegal,nullptr }, /* 87: 0111 0100 1000 0111 */
- {ANAW,"%a" }, /* 88: 0111 0100 1000 1000 oooo oooo */
- {illegal,nullptr }, /* 89: 0111 0100 1000 1001 */
- {illegal,nullptr }, /* 8a: 0111 0100 1000 1010 */
- {illegal,nullptr }, /* 8b: 0111 0100 1000 1011 */
- {illegal,nullptr }, /* 8c: 0111 0100 1000 1100 */
- {DAN,"EA,BC" }, /* 8d: 0111 0100 1000 1101 */
- {DAN,"EA,DE" }, /* 8e: 0111 0100 1000 1110 */
- {DAN,"EA,HL" }, /* 8f: 0111 0100 1000 1111 */
+ { }, // 80: 0111 0100 1000 0000
+ { }, // 81: 0111 0100 1000 0001
+ { }, // 82: 0111 0100 1000 0010
+ { }, // 83: 0111 0100 1000 0011
+ { }, // 84: 0111 0100 1000 0100
+ { }, // 85: 0111 0100 1000 0101
+ { }, // 86: 0111 0100 1000 0110
+ { }, // 87: 0111 0100 1000 0111
+ {ANAW, "%a" }, // 88: 0111 0100 1000 1000 oooo oooo
+ { }, // 89: 0111 0100 1000 1001
+ { }, // 8a: 0111 0100 1000 1010
+ { }, // 8b: 0111 0100 1000 1011
+ { }, // 8c: 0111 0100 1000 1100
+ {DAN, "EA,BC" }, // 8d: 0111 0100 1000 1101
+ {DAN, "EA,DE" }, // 8e: 0111 0100 1000 1110
+ {DAN, "EA,HL" }, // 8f: 0111 0100 1000 1111
- {XRAW,"%a" }, /* 90: 0111 0100 1001 0000 oooo oooo */
- {illegal,nullptr }, /* 91: 0111 0100 1001 0001 */
- {illegal,nullptr }, /* 92: 0111 0100 1001 0010 */
- {illegal,nullptr }, /* 93: 0111 0100 1001 0011 */
- {illegal,nullptr }, /* 94: 0111 0100 1001 0100 */
- {DXR,"EA,BC" }, /* 95: 0111 0100 1001 0101 */
- {DXR,"EA,DE" }, /* 96: 0111 0100 1001 0110 */
- {DXR,"EA,HL" }, /* 97: 0111 0100 1001 0111 */
- {ORAW,"%a" }, /* 98: 0111 0100 1001 1000 oooo oooo */
- {illegal,nullptr }, /* 99: 0111 0100 1001 1001 */
- {illegal,nullptr }, /* 9a: 0111 0100 1001 1010 */
- {illegal,nullptr }, /* 9b: 0111 0100 1001 1011 */
- {illegal,nullptr }, /* 9c: 0111 0100 1001 1100 */
- {DOR,"EA,BC" }, /* 9d: 0111 0100 1001 1101 */
- {DOR,"EA,DE" }, /* 9e: 0111 0100 1001 1110 */
- {DOR,"EA,HL" }, /* 9f: 0111 0100 1001 1111 */
+ {XRAW, "%a" }, // 90: 0111 0100 1001 0000 oooo oooo
+ { }, // 91: 0111 0100 1001 0001
+ { }, // 92: 0111 0100 1001 0010
+ { }, // 93: 0111 0100 1001 0011
+ { }, // 94: 0111 0100 1001 0100
+ {DXR, "EA,BC" }, // 95: 0111 0100 1001 0101
+ {DXR, "EA,DE" }, // 96: 0111 0100 1001 0110
+ {DXR, "EA,HL" }, // 97: 0111 0100 1001 0111
+ {ORAW, "%a" }, // 98: 0111 0100 1001 1000 oooo oooo
+ { }, // 99: 0111 0100 1001 1001
+ { }, // 9a: 0111 0100 1001 1010
+ { }, // 9b: 0111 0100 1001 1011
+ { }, // 9c: 0111 0100 1001 1100
+ {DOR, "EA,BC" }, // 9d: 0111 0100 1001 1101
+ {DOR, "EA,DE" }, // 9e: 0111 0100 1001 1110
+ {DOR, "EA,HL" }, // 9f: 0111 0100 1001 1111
- {ADDNCW,"%a" }, /* a0: 0111 0100 1010 0000 oooo oooo */
- {illegal,nullptr }, /* a1: 0111 0100 1010 0001 */
- {illegal,nullptr }, /* a2: 0111 0100 1010 0010 */
- {illegal,nullptr }, /* a3: 0111 0100 1010 0011 */
- {illegal,nullptr }, /* a4: 0111 0100 1010 0100 */
- {DADDNC,"EA,BC" }, /* a5: 0111 0100 1010 0101 */
- {DADDNC,"EA,DE" }, /* a6: 0111 0100 1010 0110 */
- {DADDNC,"EA,HL" }, /* a7: 0111 0100 1010 0111 */
- {GTAW,"%a" }, /* a8: 0111 0100 1010 1000 oooo oooo */
- {illegal,nullptr }, /* a9: 0111 0100 1010 1001 */
- {illegal,nullptr }, /* aa: 0111 0100 1010 1010 */
- {illegal,nullptr }, /* ab: 0111 0100 1010 1011 */
- {illegal,nullptr }, /* ac: 0111 0100 1010 1100 */
- {DGT,"EA,BC" }, /* ad: 0111 0100 1010 1101 */
- {DGT,"EA,DE" }, /* ae: 0111 0100 1010 1110 */
- {DGT,"EA,HL" }, /* af: 0111 0100 1010 1111 */
+ {ADDNCW, "%a" }, // a0: 0111 0100 1010 0000 oooo oooo
+ { }, // a1: 0111 0100 1010 0001
+ { }, // a2: 0111 0100 1010 0010
+ { }, // a3: 0111 0100 1010 0011
+ { }, // a4: 0111 0100 1010 0100
+ {DADDNC, "EA,BC" }, // a5: 0111 0100 1010 0101
+ {DADDNC, "EA,DE" }, // a6: 0111 0100 1010 0110
+ {DADDNC, "EA,HL" }, // a7: 0111 0100 1010 0111
+ {GTAW, "%a" }, // a8: 0111 0100 1010 1000 oooo oooo
+ { }, // a9: 0111 0100 1010 1001
+ { }, // aa: 0111 0100 1010 1010
+ { }, // ab: 0111 0100 1010 1011
+ { }, // ac: 0111 0100 1010 1100
+ {DGT, "EA,BC" }, // ad: 0111 0100 1010 1101
+ {DGT, "EA,DE" }, // ae: 0111 0100 1010 1110
+ {DGT, "EA,HL" }, // af: 0111 0100 1010 1111
- {SUBNBW,"%a" }, /* b0: 0111 0100 1011 0000 oooo oooo */
- {illegal,nullptr }, /* b1: 0111 0100 1011 0001 */
- {illegal,nullptr }, /* b2: 0111 0100 1011 0010 */
- {illegal,nullptr }, /* b3: 0111 0100 1011 0011 */
- {illegal,nullptr }, /* b4: 0111 0100 1011 0100 */
- {DSUBNB,"EA,BC" }, /* b5: 0111 0100 1011 0101 */
- {DSUBNB,"EA,DE" }, /* b6: 0111 0100 1011 0110 */
- {DSUBNB,"EA,HL" }, /* b7: 0111 0100 1011 0111 */
- {LTAW,"%a" }, /* b8: 0111 0100 1011 1000 oooo oooo */
- {illegal,nullptr }, /* b9: 0111 0100 1011 1001 */
- {illegal,nullptr }, /* ba: 0111 0100 1011 1010 */
- {illegal,nullptr }, /* bb: 0111 0100 1011 1011 */
- {illegal,nullptr }, /* bc: 0111 0100 1011 1100 */
- {DLT,"EA,BC" }, /* bd: 0111 0100 1011 1101 */
- {DLT,"EA,DE" }, /* be: 0111 0100 1011 1110 */
- {DLT,"EA,HL" }, /* bf: 0111 0100 1011 1111 */
+ {SUBNBW, "%a" }, // b0: 0111 0100 1011 0000 oooo oooo
+ { }, // b1: 0111 0100 1011 0001
+ { }, // b2: 0111 0100 1011 0010
+ { }, // b3: 0111 0100 1011 0011
+ { }, // b4: 0111 0100 1011 0100
+ {DSUBNB, "EA,BC" }, // b5: 0111 0100 1011 0101
+ {DSUBNB, "EA,DE" }, // b6: 0111 0100 1011 0110
+ {DSUBNB, "EA,HL" }, // b7: 0111 0100 1011 0111
+ {LTAW, "%a" }, // b8: 0111 0100 1011 1000 oooo oooo
+ { }, // b9: 0111 0100 1011 1001
+ { }, // ba: 0111 0100 1011 1010
+ { }, // bb: 0111 0100 1011 1011
+ { }, // bc: 0111 0100 1011 1100
+ {DLT, "EA,BC" }, // bd: 0111 0100 1011 1101
+ {DLT, "EA,DE" }, // be: 0111 0100 1011 1110
+ {DLT, "EA,HL" }, // bf: 0111 0100 1011 1111
- {ADDW,"%a" }, /* c0: 0111 0100 1100 0000 oooo oooo */
- {illegal,nullptr }, /* c1: 0111 0100 1100 0001 */
- {illegal,nullptr }, /* c2: 0111 0100 1100 0010 */
- {illegal,nullptr }, /* c3: 0111 0100 1100 0011 */
- {illegal,nullptr }, /* c4: 0111 0100 1100 0100 */
- {DADD,"EA,BC" }, /* c5: 0111 0100 1100 0101 */
- {DADD,"EA,DE" }, /* c6: 0111 0100 1100 0110 */
- {DADD,"EA,HL" }, /* c7: 0111 0100 1100 0111 */
- {ONAW,"%a" }, /* c8: 0111 0100 1100 1000 oooo oooo */
- {illegal,nullptr }, /* c9: 0111 0100 1100 1001 */
- {illegal,nullptr }, /* ca: 0111 0100 1100 1010 */
- {illegal,nullptr }, /* cb: 0111 0100 1100 1011 */
- {illegal,nullptr }, /* cc: 0111 0100 1100 1100 */
- {DON,"EA,BC" }, /* cd: 0111 0100 1100 1101 */
- {DON,"EA,DE" }, /* ce: 0111 0100 1100 1110 */
- {DON,"EA,HL" }, /* cf: 0111 0100 1100 1111 */
+ {ADDW, "%a" }, // c0: 0111 0100 1100 0000 oooo oooo
+ { }, // c1: 0111 0100 1100 0001
+ { }, // c2: 0111 0100 1100 0010
+ { }, // c3: 0111 0100 1100 0011
+ { }, // c4: 0111 0100 1100 0100
+ {DADD, "EA,BC" }, // c5: 0111 0100 1100 0101
+ {DADD, "EA,DE" }, // c6: 0111 0100 1100 0110
+ {DADD, "EA,HL" }, // c7: 0111 0100 1100 0111
+ {ONAW, "%a" }, // c8: 0111 0100 1100 1000 oooo oooo
+ { }, // c9: 0111 0100 1100 1001
+ { }, // ca: 0111 0100 1100 1010
+ { }, // cb: 0111 0100 1100 1011
+ { }, // cc: 0111 0100 1100 1100
+ {DON, "EA,BC" }, // cd: 0111 0100 1100 1101
+ {DON, "EA,DE" }, // ce: 0111 0100 1100 1110
+ {DON, "EA,HL" }, // cf: 0111 0100 1100 1111
- {ADCW,"%a" }, /* d0: 0111 0100 1101 0000 oooo oooo */
- {illegal,nullptr }, /* d1: 0111 0100 1101 0001 */
- {illegal,nullptr }, /* d2: 0111 0100 1101 0010 */
- {illegal,nullptr }, /* d3: 0111 0100 1101 0011 */
- {illegal,nullptr }, /* d4: 0111 0100 1101 0100 */
- {DADC,"EA,BC" }, /* d5: 0111 0100 1101 0101 */
- {DADC,"EA,DE" }, /* d6: 0111 0100 1101 0110 */
- {DADC,"EA,HL" }, /* d7: 0111 0100 1101 0111 */
- {OFFAW,"%a" }, /* d8: 0111 0100 1101 1000 oooo oooo */
- {illegal,nullptr }, /* d9: 0111 0100 1101 1001 */
- {illegal,nullptr }, /* da: 0111 0100 1101 1010 */
- {illegal,nullptr }, /* db: 0111 0100 1101 1011 */
- {illegal,nullptr }, /* dc: 0111 0100 1101 1100 */
- {DOFF,"EA,BC" }, /* dd: 0111 0100 1101 1101 */
- {DOFF,"EA,DE" }, /* de: 0111 0100 1101 1110 */
- {DOFF,"EA,HL" }, /* df: 0111 0100 1101 1111 */
+ {ADCW, "%a" }, // d0: 0111 0100 1101 0000 oooo oooo
+ { }, // d1: 0111 0100 1101 0001
+ { }, // d2: 0111 0100 1101 0010
+ { }, // d3: 0111 0100 1101 0011
+ { }, // d4: 0111 0100 1101 0100
+ {DADC, "EA,BC" }, // d5: 0111 0100 1101 0101
+ {DADC, "EA,DE" }, // d6: 0111 0100 1101 0110
+ {DADC, "EA,HL" }, // d7: 0111 0100 1101 0111
+ {OFFAW, "%a" }, // d8: 0111 0100 1101 1000 oooo oooo
+ { }, // d9: 0111 0100 1101 1001
+ { }, // da: 0111 0100 1101 1010
+ { }, // db: 0111 0100 1101 1011
+ { }, // dc: 0111 0100 1101 1100
+ {DOFF, "EA,BC" }, // dd: 0111 0100 1101 1101
+ {DOFF, "EA,DE" }, // de: 0111 0100 1101 1110
+ {DOFF, "EA,HL" }, // df: 0111 0100 1101 1111
- {SUBW,"%a" }, /* e0: 0111 0100 1110 0000 oooo oooo */
- {illegal,nullptr }, /* e1: 0111 0100 1110 0001 */
- {illegal,nullptr }, /* e2: 0111 0100 1110 0010 */
- {illegal,nullptr }, /* e3: 0111 0100 1110 0011 */
- {illegal,nullptr }, /* e4: 0111 0100 1110 0100 */
- {DSUB,"EA,BC" }, /* e5: 0111 0100 1110 0101 */
- {DSUB,"EA,DE" }, /* e6: 0111 0100 1110 0110 */
- {DSUB,"EA,HL" }, /* e7: 0111 0100 1110 0111 */
- {NEAW,"%a" }, /* e8: 0111 0100 1110 1000 oooo oooo */
- {illegal,nullptr }, /* e9: 0111 0100 1110 1001 */
- {illegal,nullptr }, /* ea: 0111 0100 1110 1010 */
- {illegal,nullptr }, /* eb: 0111 0100 1110 1011 */
- {illegal,nullptr }, /* ec: 0111 0100 1110 1100 */
- {DNE,"EA,BC" }, /* ed: 0111 0100 1110 1101 */
- {DNE,"EA,DE" }, /* ee: 0111 0100 1110 1110 */
- {DNE,"EA,HL" }, /* ef: 0111 0100 1110 1111 */
+ {SUBW, "%a" }, // e0: 0111 0100 1110 0000 oooo oooo
+ { }, // e1: 0111 0100 1110 0001
+ { }, // e2: 0111 0100 1110 0010
+ { }, // e3: 0111 0100 1110 0011
+ { }, // e4: 0111 0100 1110 0100
+ {DSUB, "EA,BC" }, // e5: 0111 0100 1110 0101
+ {DSUB, "EA,DE" }, // e6: 0111 0100 1110 0110
+ {DSUB, "EA,HL" }, // e7: 0111 0100 1110 0111
+ {NEAW, "%a" }, // e8: 0111 0100 1110 1000 oooo oooo
+ { }, // e9: 0111 0100 1110 1001
+ { }, // ea: 0111 0100 1110 1010
+ { }, // eb: 0111 0100 1110 1011
+ { }, // ec: 0111 0100 1110 1100
+ {DNE, "EA,BC" }, // ed: 0111 0100 1110 1101
+ {DNE, "EA,DE" }, // ee: 0111 0100 1110 1110
+ {DNE, "EA,HL" }, // ef: 0111 0100 1110 1111
- {SBBW,"%a" }, /* f0: 0111 0100 1111 0000 oooo oooo */
- {illegal,nullptr }, /* f1: 0111 0100 1111 0001 */
- {illegal,nullptr }, /* f2: 0111 0100 1111 0010 */
- {illegal,nullptr }, /* f3: 0111 0100 1111 0011 */
- {illegal,nullptr }, /* f4: 0111 0100 1111 0100 */
- {DSBB,"EA,BC" }, /* f5: 0111 0100 1111 0101 */
- {DSBB,"EA,DE" }, /* f6: 0111 0100 1111 0110 */
- {DSBB,"EA,HL" }, /* f7: 0111 0100 1111 0111 */
- {EQAW,"%a" }, /* f8: 0111 0100 1111 1000 oooo oooo */
- {illegal,nullptr }, /* f9: 0111 0100 1111 1001 */
- {illegal,nullptr }, /* fa: 0111 0100 1111 1010 */
- {illegal,nullptr }, /* fb: 0111 0100 1111 1011 */
- {illegal,nullptr }, /* fc: 0111 0100 1111 1100 */
- {DEQ,"EA,BC" }, /* fd: 0111 0100 1111 1101 */
- {DEQ,"EA,DE" }, /* fe: 0111 0100 1111 1110 */
- {DEQ,"EA,HL" } /* ff: 0111 0100 1111 1111 */
+ {SBBW, "%a" }, // f0: 0111 0100 1111 0000 oooo oooo
+ { }, // f1: 0111 0100 1111 0001
+ { }, // f2: 0111 0100 1111 0010
+ { }, // f3: 0111 0100 1111 0011
+ { }, // f4: 0111 0100 1111 0100
+ {DSBB, "EA,BC" }, // f5: 0111 0100 1111 0101
+ {DSBB, "EA,DE" }, // f6: 0111 0100 1111 0110
+ {DSBB, "EA,HL" }, // f7: 0111 0100 1111 0111
+ {EQAW, "%a" }, // f8: 0111 0100 1111 1000 oooo oooo
+ { }, // f9: 0111 0100 1111 1001
+ { }, // fa: 0111 0100 1111 1010
+ { }, // fb: 0111 0100 1111 1011
+ { }, // fc: 0111 0100 1111 1100
+ {DEQ, "EA,BC" }, // fd: 0111 0100 1111 1101
+ {DEQ, "EA,DE" }, // fe: 0111 0100 1111 1110
+ {DEQ, "EA,HL" } // ff: 0111 0100 1111 1111
};
-/* main opcodes */
-static const struct dasm_s dasmXX_7810[256] =
+// main opcodes
+const dasm_s dasm_s::XX_7810[256] =
{
- {NOP,nullptr }, /* 00: 0000 0000 */
- {LDAW,"%a" }, /* 01: 0000 0001 oooo oooo */
- {INX,"SP" }, /* 02: 0000 0010 */
- {DCX,"SP" }, /* 03: 0000 0011 */
- {LXI,"SP,%w" }, /* 04: 0000 0100 llll llll hhhh hhhh */
- {ANIW,"%a,%b" }, /* 05: 0000 0101 oooo oooo xxxx xxxx */
- {illegal,nullptr }, /* 06: */
- {ANI,"A,%b" }, /* 07: 0000 0111 xxxx xxxx */
- {MOV,"A,EAH" }, /* 08: 0000 1000 */
- {MOV,"A,EAL" }, /* 09: 0000 1001 */
- {MOV,"A,B" }, /* 0a: 0000 1010 */
- {MOV,"A,C" }, /* 0b: 0000 1011 */
- {MOV,"A,D" }, /* 0c: 0000 1100 */
- {MOV,"A,E" }, /* 0d: 0000 1101 */
- {MOV,"A,H" }, /* 0e: 0000 1110 */
- {MOV,"A,L" }, /* 0f: 0000 1111 */
+ {NOP, nullptr }, // 00: 0000 0000
+ {LDAW, "%a" }, // 01: 0000 0001 oooo oooo
+ {INX, "SP" }, // 02: 0000 0010
+ {DCX, "SP" }, // 03: 0000 0011
+ {LXI, "SP,%w" }, // 04: 0000 0100 llll llll hhhh hhhh
+ {ANIW, "%a,%b" }, // 05: 0000 0101 oooo oooo xxxx xxxx
+ { }, // 06:
+ {ANI, "A,%b" }, // 07: 0000 0111 xxxx xxxx
+ {MOV, "A,EAH" }, // 08: 0000 1000
+ {MOV, "A,EAL" }, // 09: 0000 1001
+ {MOV, "A,B" }, // 0a: 0000 1010
+ {MOV, "A,C" }, // 0b: 0000 1011
+ {MOV, "A,D" }, // 0c: 0000 1100
+ {MOV, "A,E" }, // 0d: 0000 1101
+ {MOV, "A,H" }, // 0e: 0000 1110
+ {MOV, "A,L" }, // 0f: 0000 1111
- {EXA,nullptr }, /* 10: 0001 0000 */ /* 7810 */
- {EXX,nullptr }, /* 11: 0001 0001 */ /* 7810 */
- {INX,"BC" }, /* 12: 0001 0010 */
- {DCX,"BC" }, /* 13: 0001 0011 */
- {LXI,"BC,%w" }, /* 14: 0001 0100 llll llll hhhh hhhh */
- {ORIW,"%a,%b" }, /* 15: 0001 0101 oooo oooo xxxx xxxx */
- {XRI,"A,%b" }, /* 16: 0001 0110 xxxx xxxx */
- {ORI,"A,%b" }, /* 17: 0001 0111 xxxx xxxx */
- {MOV,"EAH,A" }, /* 18: 0001 1000 */
- {MOV,"EAL,A" }, /* 19: 0001 1001 */
- {MOV,"B,A" }, /* 1a: 0001 1010 */
- {MOV,"C,A" }, /* 1b: 0001 1011 */
- {MOV,"D,A" }, /* 1c: 0001 1100 */
- {MOV,"E,A" }, /* 1d: 0001 1101 */
- {MOV,"H,A" }, /* 1e: 0001 1110 */
- {MOV,"L,A" }, /* 1f: 0001 1111 */
+ {EXA, nullptr }, // 10: 0001 0000 7810
+ {EXX, nullptr }, // 11: 0001 0001 7810
+ {INX, "BC" }, // 12: 0001 0010
+ {DCX, "BC" }, // 13: 0001 0011
+ {LXI, "BC,%w" }, // 14: 0001 0100 llll llll hhhh hhhh
+ {ORIW, "%a,%b" }, // 15: 0001 0101 oooo oooo xxxx xxxx
+ {XRI, "A,%b" }, // 16: 0001 0110 xxxx xxxx
+ {ORI, "A,%b" }, // 17: 0001 0111 xxxx xxxx
+ {MOV, "EAH,A" }, // 18: 0001 1000
+ {MOV, "EAL,A" }, // 19: 0001 1001
+ {MOV, "B,A" }, // 1a: 0001 1010
+ {MOV, "C,A" }, // 1b: 0001 1011
+ {MOV, "D,A" }, // 1c: 0001 1100
+ {MOV, "E,A" }, // 1d: 0001 1101
+ {MOV, "H,A" }, // 1e: 0001 1110
+ {MOV, "L,A" }, // 1f: 0001 1111
- {INRW,"%a" }, /* 20: 0010 0000 oooo oooo */
- {JB,nullptr }, /* 21: 0010 0001 */
- {INX,"DE" }, /* 22: 0010 0010 */
- {DCX,"DE" }, /* 23: 0010 0011 */
- {LXI,"DE,%w" }, /* 24: 0010 0100 llll llll hhhh hhhh */
- {GTIW,"%a,%b" }, /* 25: 0010 0101 oooo oooo xxxx xxxx */
- {ADINC,"A,%b" }, /* 26: 0010 0110 xxxx xxxx */
- {GTI,"A,%b" }, /* 27: 0010 0111 xxxx xxxx */
- {illegal,nullptr }, /* 28: 0010 1000 */
- {LDAX,"(BC)" }, /* 29: 0010 1001 */
- {LDAX,"(DE)" }, /* 2a: 0010 1010 */
- {LDAX,"(HL)" }, /* 2b: 0010 1011 */
- {LDAX,"(DE+)" }, /* 2c: 0010 1100 */
- {LDAX,"(HL+)" }, /* 2d: 0010 1101 */
- {LDAX,"(DE-)" }, /* 2e: 0010 1110 */
- {LDAX,"(HL-)" }, /* 2f: 0010 1111 */
+ {INRW, "%a" }, // 20: 0010 0000 oooo oooo
+ {JB, nullptr }, // 21: 0010 0001
+ {INX, "DE" }, // 22: 0010 0010
+ {DCX, "DE" }, // 23: 0010 0011
+ {LXI, "DE,%w" }, // 24: 0010 0100 llll llll hhhh hhhh
+ {GTIW, "%a,%b" }, // 25: 0010 0101 oooo oooo xxxx xxxx
+ {ADINC, "A,%b" }, // 26: 0010 0110 xxxx xxxx
+ {GTI, "A,%b" }, // 27: 0010 0111 xxxx xxxx
+ { }, // 28: 0010 1000
+ {LDAX, "(BC)" }, // 29: 0010 1001
+ {LDAX, "(DE)" }, // 2a: 0010 1010
+ {LDAX, "(HL)" }, // 2b: 0010 1011
+ {LDAX, "(DE+)" }, // 2c: 0010 1100
+ {LDAX, "(HL+)" }, // 2d: 0010 1101
+ {LDAX, "(DE-)" }, // 2e: 0010 1110
+ {LDAX, "(HL-)" }, // 2f: 0010 1111
- {DCRW,"%a" }, /* 30: 0011 0000 oooo oooo */
- {BLOCK,nullptr }, /* 31: 0011 0001 */ /* 7810 */
- {INX,"HL", }, /* 32: 0011 0010 */
- {DCX,"HL", }, /* 33: 0011 0011 */
- {LXI,"HL,%w" }, /* 34: 0011 0100 llll llll hhhh hhhh */
- {LTIW,"%a,%b" }, /* 35: 0011 0101 oooo oooo xxxx xxxx */
- {SUINB,"A,%b" }, /* 36: 0011 0110 xxxx xxxx */
- {LTI,"A,%b" }, /* 37: 0011 0111 xxxx xxxx */
- {illegal,nullptr }, /* 38: */
- {STAX,"(BC)" }, /* 39: 0011 1001 */
- {STAX,"(DE)" }, /* 3a: 0011 1010 */
- {STAX,"(HL)" }, /* 3b: 0011 1011 */
- {STAX,"(DE+)" }, /* 3c: 0011 1100 */
- {STAX,"(HL+)" }, /* 3d: 0011 1101 */
- {STAX,"(DE-)" }, /* 3e: 0011 1110 */
- {STAX,"(HL-)" }, /* 3f: 0011 1111 */
+ {DCRW, "%a" }, // 30: 0011 0000 oooo oooo
+ {BLOCK, nullptr }, // 31: 0011 0001 7810
+ {INX, "HL", }, // 32: 0011 0010
+ {DCX, "HL", }, // 33: 0011 0011
+ {LXI, "HL,%w" }, // 34: 0011 0100 llll llll hhhh hhhh
+ {LTIW, "%a,%b" }, // 35: 0011 0101 oooo oooo xxxx xxxx
+ {SUINB, "A,%b" }, // 36: 0011 0110 xxxx xxxx
+ {LTI, "A,%b" }, // 37: 0011 0111 xxxx xxxx
+ { }, // 38:
+ {STAX, "(BC)" }, // 39: 0011 1001
+ {STAX, "(DE)" }, // 3a: 0011 1010
+ {STAX, "(HL)" }, // 3b: 0011 1011
+ {STAX, "(DE+)" }, // 3c: 0011 1100
+ {STAX, "(HL+)" }, // 3d: 0011 1101
+ {STAX, "(DE-)" }, // 3e: 0011 1110
+ {STAX, "(HL-)" }, // 3f: 0011 1111
- {CALL,"%w" }, /* 40: 0100 0000 llll llll hhhh hhhh */
- {INR,"A" }, /* 41: 0100 0001 */
- {INR,"B" }, /* 42: 0100 0010 */
- {INR,"C" }, /* 43: 0100 0011 */
- {LXI,"EA,%w" }, /* 44: 0100 0100 llll llll hhhh hhhh */
- {ONIW,"%a,%b" }, /* 45: 0100 0101 oooo oooo xxxx xxxx */
- {ADI,"A,%b" }, /* 46: 0100 0110 xxxx xxxx */
- {ONI,"A,%b" }, /* 47: 0100 0111 xxxx xxxx */
- {0,dasm48_7810 }, /* 48: prefix */
- {MVIX,"BC,%b" }, /* 49: 0100 1001 xxxx xxxx */
- {MVIX,"DE,%b" }, /* 4a: 0100 1010 xxxx xxxx */
- {MVIX,"HL,%b" }, /* 4b: 0100 1011 xxxx xxxx */
- {0,dasm4C_7810 }, /* 4c: prefix */
- {0,dasm4D_7810 }, /* 4d: prefix */
- {JRE,"%d" }, /* 4e: 0100 111d dddd dddd */
- {JRE,"%d" }, /* 4f: 0100 111d dddd dddd */
+ {CALL, "%w" }, // 40: 0100 0000 llll llll hhhh hhhh
+ {INR, "A" }, // 41: 0100 0001
+ {INR, "B" }, // 42: 0100 0010
+ {INR, "C" }, // 43: 0100 0011
+ {LXI, "EA,%w" }, // 44: 0100 0100 llll llll hhhh hhhh
+ {ONIW, "%a,%b" }, // 45: 0100 0101 oooo oooo xxxx xxxx
+ {ADI, "A,%b" }, // 46: 0100 0110 xxxx xxxx
+ {ONI, "A,%b" }, // 47: 0100 0111 xxxx xxxx
+ {d48_7810 }, // 48: prefix
+ {MVIX, "BC,%b" }, // 49: 0100 1001 xxxx xxxx
+ {MVIX, "DE,%b" }, // 4a: 0100 1010 xxxx xxxx
+ {MVIX, "HL,%b" }, // 4b: 0100 1011 xxxx xxxx
+ {d4C_7810 }, // 4c: prefix
+ {d4D_7810 }, // 4d: prefix
+ {JRE, "%d" }, // 4e: 0100 111d dddd dddd
+ {JRE, "%d" }, // 4f: 0100 111d dddd dddd
- {EXH,nullptr }, /* 50: 0101 0000 */ /* 7810 */
- {DCR,"A" }, /* 51: 0101 0001 */
- {DCR,"B" }, /* 52: 0101 0010 */
- {DCR,"C" }, /* 53: 0101 0011 */
- {JMP,"%w" }, /* 54: 0101 0100 llll llll hhhh hhhh */
- {OFFIW,"%a,%b" }, /* 55: 0101 0101 oooo oooo xxxx xxxx */
- {ACI,"A,%b" }, /* 56: 0101 0110 xxxx xxxx */
- {OFFI,"A,%b" }, /* 57: 0101 0111 xxxx xxxx */
- {BIT,"0,%a", }, /* 58: 0101 1000 oooo oooo */ /* 7810 */
- {BIT,"1,%a", }, /* 59: 0101 1001 oooo oooo */ /* 7810 */
- {BIT,"2,%a", }, /* 5a: 0101 1010 oooo oooo */ /* 7810 */
- {BIT,"3,%a", }, /* 5b: 0101 1011 oooo oooo */ /* 7810 */
- {BIT,"4,%a", }, /* 5c: 0101 1100 oooo oooo */ /* 7810 */
- {BIT,"5,%a", }, /* 5d: 0101 1101 oooo oooo */ /* 7810 */
- {BIT,"6,%a", }, /* 5e: 0101 1110 oooo oooo */ /* 7810 */
- {BIT,"7,%a", }, /* 5f: 0101 1111 oooo oooo */ /* 7810 */
+ {EXH, nullptr }, // 50: 0101 0000 7810
+ {DCR, "A" }, // 51: 0101 0001
+ {DCR, "B" }, // 52: 0101 0010
+ {DCR, "C" }, // 53: 0101 0011
+ {JMP, "%w" }, // 54: 0101 0100 llll llll hhhh hhhh
+ {OFFIW, "%a,%b" }, // 55: 0101 0101 oooo oooo xxxx xxx
+ {ACI, "A,%b" }, // 56: 0101 0110 xxxx xxxx
+ {OFFI, "A,%b" }, // 57: 0101 0111 xxxx xxxx
+ {BIT, "0,%a", }, // 58: 0101 1000 oooo oooo 7810
+ {BIT, "1,%a", }, // 59: 0101 1001 oooo oooo 7810
+ {BIT, "2,%a", }, // 5a: 0101 1010 oooo oooo 7810
+ {BIT, "3,%a", }, // 5b: 0101 1011 oooo oooo 7810
+ {BIT, "4,%a", }, // 5c: 0101 1100 oooo oooo 7810
+ {BIT, "5,%a", }, // 5d: 0101 1101 oooo oooo 7810
+ {BIT, "6,%a", }, // 5e: 0101 1110 oooo oooo 7810
+ {BIT, "7,%a", }, // 5f: 0101 1111 oooo oooo 7810
- {0,dasm60 }, /* 60: prefix */
- {DAA,nullptr }, /* 61: 0110 0001 */
- {RETI,nullptr }, /* 62: 0110 0010 */
- {STAW,"%a" }, /* 63: 0110 0011 oooo oooo */
- {0,dasm64_7810 }, /* 64: prefix */
- {NEIW,"%a,%b" }, /* 65: 0110 0101 oooo oooo xxxx xxxx */
- {SUI,"A,%b" }, /* 66: 0110 0110 xxxx xxxx */
- {NEI,"A,%b" }, /* 67: 0110 0111 xxxx xxxx */
- {MVI,"V,%b" }, /* 68: 0110 1000 xxxx xxxx */
- {MVI,"A,%b" }, /* 69: 0110 1001 xxxx xxxx */
- {MVI,"B,%b" }, /* 6a: 0110 1010 xxxx xxxx */
- {MVI,"C,%b" }, /* 6b: 0110 1011 xxxx xxxx */
- {MVI,"D,%b" }, /* 6c: 0110 1100 xxxx xxxx */
- {MVI,"E,%b" }, /* 6d: 0110 1101 xxxx xxxx */
- {MVI,"H,%b" }, /* 6e: 0110 1110 xxxx xxxx */
- {MVI,"L,%b" }, /* 6f: 0110 1111 xxxx xxxx */
+ {d60 }, // 60: prefix
+ {DAA, nullptr }, // 61: 0110 0001
+ {RETI, nullptr }, // 62: 0110 0010
+ {STAW, "%a" }, // 63: 0110 0011 oooo oooo
+ {d64_7810 }, // 64: prefix
+ {NEIW, "%a,%b" }, // 65: 0110 0101 oooo oooo xxxx xxxx
+ {SUI, "A,%b" }, // 66: 0110 0110 xxxx xxxx
+ {NEI, "A,%b" }, // 67: 0110 0111 xxxx xxxx
+ {MVI, "V,%b" }, // 68: 0110 1000 xxxx xxxx
+ {MVI, "A,%b" }, // 69: 0110 1001 xxxx xxxx
+ {MVI, "B,%b" }, // 6a: 0110 1010 xxxx xxxx
+ {MVI, "C,%b" }, // 6b: 0110 1011 xxxx xxxx
+ {MVI, "D,%b" }, // 6c: 0110 1100 xxxx xxxx
+ {MVI, "E,%b" }, // 6d: 0110 1101 xxxx xxxx
+ {MVI, "H,%b" }, // 6e: 0110 1110 xxxx xxxx
+ {MVI, "L,%b" }, // 6f: 0110 1111 xxxx xxxx
- {0,dasm70 }, /* 70: prefix */
- {MVIW,"%a,%b" }, /* 71: 0111 0001 oooo oooo xxxx xxxx */
- {SOFTI,nullptr }, /* 72: 0111 0010 */
- {illegal,nullptr }, /* 73: */
- {0,dasm74 }, /* 74: prefix */
- {EQIW,"%a,%b" }, /* 75: 0111 0101 oooo oooo xxxx xxxx */
- {SBI,"A,%b" }, /* 76: 0111 0110 xxxx xxxx */
- {EQI,"A,%b" }, /* 77: 0111 0111 xxxx xxxx */
- {CALF,"%f" }, /* 78: 0111 1ddd dddd dddd */
- {CALF,"%f" }, /* 79: 0111 1ddd dddd dddd */
- {CALF,"%f" }, /* 7a: 0111 1ddd dddd dddd */
- {CALF,"%f" }, /* 7b: 0111 1ddd dddd dddd */
- {CALF,"%f" }, /* 7c: 0111 1ddd dddd dddd */
- {CALF,"%f" }, /* 7d: 0111 1ddd dddd dddd */
- {CALF,"%f" }, /* 7e: 0111 1ddd dddd dddd */
- {CALF,"%f" }, /* 7f: 0111 1ddd dddd dddd */
+ {d70 }, // 70: prefix
+ {MVIW, "%a,%b" }, // 71: 0111 0001 oooo oooo xxxx xxxx
+ {SOFTI, nullptr }, // 72: 0111 0010
+ { }, // 73:
+ {d74 }, // 74: prefix
+ {EQIW, "%a,%b" }, // 75: 0111 0101 oooo oooo xxxx xxxx
+ {SBI, "A,%b" }, // 76: 0111 0110 xxxx xxxx
+ {EQI, "A,%b" }, // 77: 0111 0111 xxxx xxxx
+ {CALF, "%f" }, // 78: 0111 1ddd dddd dddd
+ {CALF, "%f" }, // 79: 0111 1ddd dddd dddd
+ {CALF, "%f" }, // 7a: 0111 1ddd dddd dddd
+ {CALF, "%f" }, // 7b: 0111 1ddd dddd dddd
+ {CALF, "%f" }, // 7c: 0111 1ddd dddd dddd
+ {CALF, "%f" }, // 7d: 0111 1ddd dddd dddd
+ {CALF, "%f" }, // 7e: 0111 1ddd dddd dddd
+ {CALF, "%f" }, // 7f: 0111 1ddd dddd dddd
- {CALT,"%t" }, /* 80: 100t tttt */
- {CALT,"%t" }, /* 81: 100t tttt */
- {CALT,"%t" }, /* 82: 100t tttt */
- {CALT,"%t" }, /* 83: 100t tttt */
- {CALT,"%t" }, /* 84: 100t tttt */
- {CALT,"%t" }, /* 85: 100t tttt */
- {CALT,"%t" }, /* 86: 100t tttt */
- {CALT,"%t" }, /* 87: 100t tttt */
- {CALT,"%t" }, /* 88: 100t tttt */
- {CALT,"%t" }, /* 89: 100t tttt */
- {CALT,"%t" }, /* 8a: 100t tttt */
- {CALT,"%t" }, /* 8b: 100t tttt */
- {CALT,"%t" }, /* 8c: 100t tttt */
- {CALT,"%t" }, /* 8d: 100t tttt */
- {CALT,"%t" }, /* 8e: 100t tttt */
- {CALT,"%t" }, /* 8f: 100t tttt */
+ {CALT, "%t" }, // 80: 100t tttt
+ {CALT, "%t" }, // 81: 100t tttt
+ {CALT, "%t" }, // 82: 100t tttt
+ {CALT, "%t" }, // 83: 100t tttt
+ {CALT, "%t" }, // 84: 100t tttt
+ {CALT, "%t" }, // 85: 100t tttt
+ {CALT, "%t" }, // 86: 100t tttt
+ {CALT, "%t" }, // 87: 100t tttt
+ {CALT, "%t" }, // 88: 100t tttt
+ {CALT, "%t" }, // 89: 100t tttt
+ {CALT, "%t" }, // 8a: 100t tttt
+ {CALT, "%t" }, // 8b: 100t tttt
+ {CALT, "%t" }, // 8c: 100t tttt
+ {CALT, "%t" }, // 8d: 100t tttt
+ {CALT, "%t" }, // 8e: 100t tttt
+ {CALT, "%t" }, // 8f: 100t tttt
- {CALT,"%t" }, /* 90: 100t tttt */
- {CALT,"%t" }, /* 91: 100t tttt */
- {CALT,"%t" }, /* 92: 100t tttt */
- {CALT,"%t" }, /* 93: 100t tttt */
- {CALT,"%t" }, /* 94: 100t tttt */
- {CALT,"%t" }, /* 95: 100t tttt */
- {CALT,"%t" }, /* 96: 100t tttt */
- {CALT,"%t" }, /* 97: 100t tttt */
- {CALT,"%t" }, /* 98: 100t tttt */
- {CALT,"%t" }, /* 99: 100t tttt */
- {CALT,"%t" }, /* 9a: 100t tttt */
- {CALT,"%t" }, /* 9b: 100t tttt */
- {CALT,"%t" }, /* 9c: 100t tttt */
- {CALT,"%t" }, /* 9d: 100t tttt */
- {CALT,"%t" }, /* 9e: 100t tttt */
- {CALT,"%t" }, /* 9f: 100t tttt */
+ {CALT, "%t" }, // 90: 100t tttt
+ {CALT, "%t" }, // 91: 100t tttt
+ {CALT, "%t" }, // 92: 100t tttt
+ {CALT, "%t" }, // 93: 100t tttt
+ {CALT, "%t" }, // 94: 100t tttt
+ {CALT, "%t" }, // 95: 100t tttt
+ {CALT, "%t" }, // 96: 100t tttt
+ {CALT, "%t" }, // 97: 100t tttt
+ {CALT, "%t" }, // 98: 100t tttt
+ {CALT, "%t" }, // 99: 100t tttt
+ {CALT, "%t" }, // 9a: 100t tttt
+ {CALT, "%t" }, // 9b: 100t tttt
+ {CALT, "%t" }, // 9c: 100t tttt
+ {CALT, "%t" }, // 9d: 100t tttt
+ {CALT, "%t" }, // 9e: 100t tttt
+ {CALT, "%t" }, // 9f: 100t tttt
- {POP,"VA" }, /* a0: 1010 0000 */
- {POP,"BC" }, /* a1: 1010 0001 */
- {POP,"DE" }, /* a2: 1010 0010 */
- {POP,"HL", }, /* a3: 1010 0011 */
- {POP,"EA" }, /* a4: 1010 0100 */
- {DMOV,"EA,BC" }, /* a5: 1010 0101 */
- {DMOV,"EA,DE" }, /* a6: 1010 0110 */
- {DMOV,"EA,HL" }, /* a7: 1010 0111 */
- {INX,"EA" }, /* a8: 1010 1000 */
- {DCX,"EA" }, /* a9: 1010 1001 */
- {EI,nullptr }, /* aa: 1010 1010 */
- {LDAX,"(DE+%b)" }, /* ab: 1010 1011 dddd dddd */
- {LDAX,"(HL+A)" }, /* ac: 1010 1100 */
- {LDAX,"(HL+B)" }, /* ad: 1010 1101 */
- {LDAX,"(HL+EA)" }, /* ae: 1010 1110 */
- {LDAX,"(HL+%b)" }, /* af: 1010 1111 dddd dddd */
+ {POP, "VA" }, // a0: 1010 0000
+ {POP, "BC" }, // a1: 1010 0001
+ {POP, "DE" }, // a2: 1010 0010
+ {POP, "HL", }, // a3: 1010 0011
+ {POP, "EA" }, // a4: 1010 0100
+ {DMOV, "EA,BC" }, // a5: 1010 0101
+ {DMOV, "EA,DE" }, // a6: 1010 0110
+ {DMOV, "EA,HL" }, // a7: 1010 0111
+ {INX, "EA" }, // a8: 1010 1000
+ {DCX, "EA" }, // a9: 1010 1001
+ {EI, nullptr }, // aa: 1010 1010
+ {LDAX, "(DE+%b)" }, // ab: 1010 1011 dddd dddd
+ {LDAX, "(HL+A)" }, // ac: 1010 1100
+ {LDAX, "(HL+B)" }, // ad: 1010 1101
+ {LDAX, "(HL+EA)" }, // ae: 1010 1110
+ {LDAX, "(HL+%b)" }, // af: 1010 1111 dddd dddd
- {PUSH,"VA" }, /* b0: 1011 0000 */
- {PUSH,"BC" }, /* b1: 1011 0001 */
- {PUSH,"DE" }, /* b2: 1011 0010 */
- {PUSH,"HL", }, /* b3: 1011 0011 */
- {PUSH,"EA" }, /* b4: 1011 0100 */
- {DMOV,"BC,EA" }, /* b5: 1011 0101 */
- {DMOV,"DE,EA" }, /* b6: 1011 0110 */
- {DMOV,"HL,EA" }, /* b7: 1011 0111 */
- {RET,nullptr }, /* b8: 1011 1000 */
- {RETS,nullptr }, /* b9: 1011 1001 */
- {DI,nullptr }, /* ba: 1011 1010 */
- {STAX,"(DE+%b)" }, /* bb: 1011 1011 dddd dddd */
- {STAX,"(HL+A)" }, /* bc: 1011 1100 */
- {STAX,"(HL+B)" }, /* bd: 1011 1101 */
- {STAX,"(HL+EA)" }, /* be: 1011 1110 */
- {STAX,"(HL+%b)" }, /* bf: 1011 1111 dddd dddd */
+ {PUSH, "VA" }, // b0: 1011 0000
+ {PUSH, "BC" }, // b1: 1011 0001
+ {PUSH, "DE" }, // b2: 1011 0010
+ {PUSH, "HL", }, // b3: 1011 0011
+ {PUSH, "EA" }, // b4: 1011 0100
+ {DMOV, "BC,EA" }, // b5: 1011 0101
+ {DMOV, "DE,EA" }, // b6: 1011 0110
+ {DMOV, "HL,EA" }, // b7: 1011 0111
+ {RET, nullptr }, // b8: 1011 1000
+ {RETS, nullptr }, // b9: 1011 1001
+ {DI, nullptr }, // ba: 1011 1010
+ {STAX, "(DE+%b)" }, // bb: 1011 1011 dddd dddd
+ {STAX, "(HL+A)" }, // bc: 1011 1100
+ {STAX, "(HL+B)" }, // bd: 1011 1101
+ {STAX, "(HL+EA)" }, // be: 1011 1110
+ {STAX, "(HL+%b)" }, // bf: 1011 1111 dddd dddd
- {JR,"%o" }, /* c0: 11oo oooo */
- {JR,"%o" }, /* c1: 11oo oooo */
- {JR,"%o" }, /* c2: 11oo oooo */
- {JR,"%o" }, /* c3: 11oo oooo */
- {JR,"%o" }, /* c4: 11oo oooo */
- {JR,"%o" }, /* c5: 11oo oooo */
- {JR,"%o" }, /* c6: 11oo oooo */
- {JR,"%o" }, /* c7: 11oo oooo */
- {JR,"%o" }, /* c8: 11oo oooo */
- {JR,"%o" }, /* c9: 11oo oooo */
- {JR,"%o" }, /* ca: 11oo oooo */
- {JR,"%o" }, /* cb: 11oo oooo */
- {JR,"%o" }, /* cc: 11oo oooo */
- {JR,"%o" }, /* cd: 11oo oooo */
- {JR,"%o" }, /* ce: 11oo oooo */
- {JR,"%o" }, /* cf: 11oo oooo */
+ {JR, "%o" }, // c0: 11oo oooo
+ {JR, "%o" }, // c1: 11oo oooo
+ {JR, "%o" }, // c2: 11oo oooo
+ {JR, "%o" }, // c3: 11oo oooo
+ {JR, "%o" }, // c4: 11oo oooo
+ {JR, "%o" }, // c5: 11oo oooo
+ {JR, "%o" }, // c6: 11oo oooo
+ {JR, "%o" }, // c7: 11oo oooo
+ {JR, "%o" }, // c8: 11oo oooo
+ {JR, "%o" }, // c9: 11oo oooo
+ {JR, "%o" }, // ca: 11oo oooo
+ {JR, "%o" }, // cb: 11oo oooo
+ {JR, "%o" }, // cc: 11oo oooo
+ {JR, "%o" }, // cd: 11oo oooo
+ {JR, "%o" }, // ce: 11oo oooo
+ {JR, "%o" }, // cf: 11oo oooo
- {JR,"%o" }, /* d0: 11oo oooo */
- {JR,"%o" }, /* d1: 11oo oooo */
- {JR,"%o" }, /* d2: 11oo oooo */
- {JR,"%o" }, /* d3: 11oo oooo */
- {JR,"%o" }, /* d4: 11oo oooo */
- {JR,"%o" }, /* d5: 11oo oooo */
- {JR,"%o" }, /* d6: 11oo oooo */
- {JR,"%o" }, /* d7: 11oo oooo */
- {JR,"%o" }, /* d8: 11oo oooo */
- {JR,"%o" }, /* d9: 11oo oooo */
- {JR,"%o" }, /* da: 11oo oooo */
- {JR,"%o" }, /* db: 11oo oooo */
- {JR,"%o" }, /* dc: 11oo oooo */
- {JR,"%o" }, /* dd: 11oo oooo */
- {JR,"%o" }, /* de: 11oo oooo */
- {JR,"%o" }, /* df: 11oo oooo */
+ {JR, "%o" }, // d0: 11oo oooo
+ {JR, "%o" }, // d1: 11oo oooo
+ {JR, "%o" }, // d2: 11oo oooo
+ {JR, "%o" }, // d3: 11oo oooo
+ {JR, "%o" }, // d4: 11oo oooo
+ {JR, "%o" }, // d5: 11oo oooo
+ {JR, "%o" }, // d6: 11oo oooo
+ {JR, "%o" }, // d7: 11oo oooo
+ {JR, "%o" }, // d8: 11oo oooo
+ {JR, "%o" }, // d9: 11oo oooo
+ {JR, "%o" }, // da: 11oo oooo
+ {JR, "%o" }, // db: 11oo oooo
+ {JR, "%o" }, // dc: 11oo oooo
+ {JR, "%o" }, // dd: 11oo oooo
+ {JR, "%o" }, // de: 11oo oooo
+ {JR, "%o" }, // df: 11oo oooo
- {JR,"%o" }, /* e0: 11oo oooo */
- {JR,"%o" }, /* e1: 11oo oooo */
- {JR,"%o" }, /* e2: 11oo oooo */
- {JR,"%o" }, /* e3: 11oo oooo */
- {JR,"%o" }, /* e4: 11oo oooo */
- {JR,"%o" }, /* e5: 11oo oooo */
- {JR,"%o" }, /* e6: 11oo oooo */
- {JR,"%o" }, /* e7: 11oo oooo */
- {JR,"%o" }, /* e8: 11oo oooo */
- {JR,"%o" }, /* e9: 11oo oooo */
- {JR,"%o" }, /* ea: 11oo oooo */
- {JR,"%o" }, /* eb: 11oo oooo */
- {JR,"%o" }, /* ec: 11oo oooo */
- {JR,"%o" }, /* ed: 11oo oooo */
- {JR,"%o" }, /* ee: 11oo oooo */
- {JR,"%o" }, /* ef: 11oo oooo */
+ {JR, "%o" }, // e0: 11oo oooo
+ {JR, "%o" }, // e1: 11oo oooo
+ {JR, "%o" }, // e2: 11oo oooo
+ {JR, "%o" }, // e3: 11oo oooo
+ {JR, "%o" }, // e4: 11oo oooo
+ {JR, "%o" }, // e5: 11oo oooo
+ {JR, "%o" }, // e6: 11oo oooo
+ {JR, "%o" }, // e7: 11oo oooo
+ {JR, "%o" }, // e8: 11oo oooo
+ {JR, "%o" }, // e9: 11oo oooo
+ {JR, "%o" }, // ea: 11oo oooo
+ {JR, "%o" }, // eb: 11oo oooo
+ {JR, "%o" }, // ec: 11oo oooo
+ {JR, "%o" }, // ed: 11oo oooo
+ {JR, "%o" }, // ee: 11oo oooo
+ {JR, "%o" }, // ef: 11oo oooo
- {JR,"%o" }, /* f0: 11oo oooo */
- {JR,"%o" }, /* f1: 11oo oooo */
- {JR,"%o" }, /* f2: 11oo oooo */
- {JR,"%o" }, /* f3: 11oo oooo */
- {JR,"%o" }, /* f4: 11oo oooo */
- {JR,"%o" }, /* f5: 11oo oooo */
- {JR,"%o" }, /* f6: 11oo oooo */
- {JR,"%o" }, /* f7: 11oo oooo */
- {JR,"%o" }, /* f8: 11oo oooo */
- {JR,"%o" }, /* f9: 11oo oooo */
- {JR,"%o" }, /* fa: 11oo oooo */
- {JR,"%o" }, /* fb: 11oo oooo */
- {JR,"%o" }, /* fc: 11oo oooo */
- {JR,"%o" }, /* fd: 11oo oooo */
- {JR,"%o" }, /* fe: 11oo oooo */
- {JR,"%o" } /* ff: 11oo oooo */
+ {JR, "%o" }, // f0: 11oo oooo
+ {JR, "%o" }, // f1: 11oo oooo
+ {JR, "%o" }, // f2: 11oo oooo
+ {JR, "%o" }, // f3: 11oo oooo
+ {JR, "%o" }, // f4: 11oo oooo
+ {JR, "%o" }, // f5: 11oo oooo
+ {JR, "%o" }, // f6: 11oo oooo
+ {JR, "%o" }, // f7: 11oo oooo
+ {JR, "%o" }, // f8: 11oo oooo
+ {JR, "%o" }, // f9: 11oo oooo
+ {JR, "%o" }, // fa: 11oo oooo
+ {JR, "%o" }, // fb: 11oo oooo
+ {JR, "%o" }, // fc: 11oo oooo
+ {JR, "%o" }, // fd: 11oo oooo
+ {JR, "%o" }, // fe: 11oo oooo
+ {JR, "%o" } // ff: 11oo oooo
};
-static const struct dasm_s dasmXX_7807[256] =
+const dasm_s dasm_s::XX_7807[256] =
{
- {NOP,nullptr }, /* 00: 0000 0000 */
- {LDAW,"%a" }, /* 01: 0000 0001 oooo oooo */
- {INX,"SP" }, /* 02: 0000 0010 */
- {DCX,"SP" }, /* 03: 0000 0011 */
- {LXI,"SP,%w" }, /* 04: 0000 0100 llll llll hhhh hhhh */
- {ANIW,"%a,%b" }, /* 05: 0000 0101 oooo oooo xxxx xxxx */
- {illegal,nullptr }, /* 06: */
- {ANI,"A,%b" }, /* 07: 0000 0111 xxxx xxxx */
- {MOV,"A,EAH" }, /* 08: 0000 1000 */
- {MOV,"A,EAL" }, /* 09: 0000 1001 */
- {MOV,"A,B" }, /* 0a: 0000 1010 */
- {MOV,"A,C" }, /* 0b: 0000 1011 */
- {MOV,"A,D" }, /* 0c: 0000 1100 */
- {MOV,"A,E" }, /* 0d: 0000 1101 */
- {MOV,"A,H" }, /* 0e: 0000 1110 */
- {MOV,"A,L" }, /* 0f: 0000 1111 */
+ {NOP, nullptr }, // 00: 0000 0000
+ {LDAW, "%a" }, // 01: 0000 0001 oooo oooo
+ {INX, "SP" }, // 02: 0000 0010
+ {DCX, "SP" }, // 03: 0000 0011
+ {LXI, "SP,%w" }, // 04: 0000 0100 llll llll hhhh hhhh
+ {ANIW, "%a,%b" }, // 05: 0000 0101 oooo oooo xxxx xxxx
+ { }, // 06:
+ {ANI, "A,%b" }, // 07: 0000 0111 xxxx xxxx
+ {MOV, "A,EAH" }, // 08: 0000 1000
+ {MOV, "A,EAL" }, // 09: 0000 1001
+ {MOV, "A,B" }, // 0a: 0000 1010
+ {MOV, "A,C" }, // 0b: 0000 1011
+ {MOV, "A,D" }, // 0c: 0000 1100
+ {MOV, "A,E" }, // 0d: 0000 1101
+ {MOV, "A,H" }, // 0e: 0000 1110
+ {MOV, "A,L" }, // 0f: 0000 1111
- {BLOCK,"D+" }, /* 10: 0001 0000 */ /* 7807 */
- {BLOCK,"D-" }, /* 11: 0001 0001 */ /* 7807 */
- {INX,"BC" }, /* 12: 0001 0010 */
- {DCX,"BC" }, /* 13: 0001 0011 */
- {LXI,"BC,%w" }, /* 14: 0001 0100 llll llll hhhh hhhh */
- {ORIW,"%a,%b" }, /* 15: 0001 0101 oooo oooo xxxx xxxx */
- {XRI,"A,%b" }, /* 16: 0001 0110 xxxx xxxx */
- {ORI,"A,%b" }, /* 17: 0001 0111 xxxx xxxx */
- {MOV,"EAH,A" }, /* 18: 0001 1000 */
- {MOV,"EAL,A" }, /* 19: 0001 1001 */
- {MOV,"B,A" }, /* 1a: 0001 1010 */
- {MOV,"C,A" }, /* 1b: 0001 1011 */
- {MOV,"D,A" }, /* 1c: 0001 1100 */
- {MOV,"E,A" }, /* 1d: 0001 1101 */
- {MOV,"H,A" }, /* 1e: 0001 1110 */
- {MOV,"L,A" }, /* 1f: 0001 1111 */
+ {BLOCK, "D+" }, // 10: 0001 0000 7807
+ {BLOCK, "D-" }, // 11: 0001 0001 7807
+ {INX, "BC" }, // 12: 0001 0010
+ {DCX, "BC" }, // 13: 0001 0011
+ {LXI, "BC,%w" }, // 14: 0001 0100 llll llll hhhh hhhh
+ {ORIW, "%a,%b" }, // 15: 0001 0101 oooo oooo xxxx xxxx
+ {XRI, "A,%b" }, // 16: 0001 0110 xxxx xxxx
+ {ORI, "A,%b" }, // 17: 0001 0111 xxxx xxxx
+ {MOV, "EAH,A" }, // 18: 0001 1000
+ {MOV, "EAL,A" }, // 19: 0001 1001
+ {MOV, "B,A" }, // 1a: 0001 1010
+ {MOV, "C,A" }, // 1b: 0001 1011
+ {MOV, "D,A" }, // 1c: 0001 1100
+ {MOV, "E,A" }, // 1d: 0001 1101
+ {MOV, "H,A" }, // 1e: 0001 1110
+ {MOV, "L,A" }, // 1f: 0001 1111
- {INRW,"%a" }, /* 20: 0010 0000 oooo oooo */
- {JB,nullptr }, /* 21: 0010 0001 */
- {INX,"DE" }, /* 22: 0010 0010 */
- {DCX,"DE" }, /* 23: 0010 0011 */
- {LXI,"DE,%w" }, /* 24: 0010 0100 llll llll hhhh hhhh */
- {GTIW,"%a,%b" }, /* 25: 0010 0101 oooo oooo xxxx xxxx */
- {ADINC,"A,%b" }, /* 26: 0010 0110 xxxx xxxx */
- {GTI,"A,%b" }, /* 27: 0010 0111 xxxx xxxx */
- {illegal,nullptr }, /* 28: 0010 1000 */
- {LDAX,"(BC)" }, /* 29: 0010 1001 */
- {LDAX,"(DE)" }, /* 2a: 0010 1010 */
- {LDAX,"(HL)" }, /* 2b: 0010 1011 */
- {LDAX,"(DE+)" }, /* 2c: 0010 1100 */
- {LDAX,"(HL+)" }, /* 2d: 0010 1101 */
- {LDAX,"(DE-)" }, /* 2e: 0010 1110 */
- {LDAX,"(HL-)" }, /* 2f: 0010 1111 */
+ {INRW, "%a" }, // 20: 0010 0000 oooo oooo
+ {JB, nullptr }, // 21: 0010 0001
+ {INX, "DE" }, // 22: 0010 0010
+ {DCX, "DE" }, // 23: 0010 0011
+ {LXI, "DE,%w" }, // 24: 0010 0100 llll llll hhhh hhhh
+ {GTIW, "%a,%b" }, // 25: 0010 0101 oooo oooo xxxx xxxx
+ {ADINC, "A,%b" }, // 26: 0010 0110 xxxx xxxx
+ {GTI, "A,%b" }, // 27: 0010 0111 xxxx xxxx
+ { }, // 28: 0010 1000
+ {LDAX, "(BC)" }, // 29: 0010 1001
+ {LDAX, "(DE)" }, // 2a: 0010 1010
+ {LDAX, "(HL)" }, // 2b: 0010 1011
+ {LDAX, "(DE+)" }, // 2c: 0010 1100
+ {LDAX, "(HL+)" }, // 2d: 0010 1101
+ {LDAX, "(DE-)" }, // 2e: 0010 1110
+ {LDAX, "(HL-)" }, // 2f: 0010 1111
- {DCRW,"%a" }, /* 30: 0011 0000 oooo oooo */
- {AND,"CY,%i" }, /* 31: 0011 0001 bbbb bbbb */ /* 7807 */
- {INX,"HL", }, /* 32: 0011 0010 */
- {DCX,"HL", }, /* 33: 0011 0011 */
- {LXI,"HL,%w" }, /* 34: 0011 0100 llll llll hhhh hhhh */
- {LTIW,"%a,%b" }, /* 35: 0011 0101 oooo oooo xxxx xxxx */
- {SUINB,"A,%b" }, /* 36: 0011 0110 xxxx xxxx */
- {LTI,"A,%b" }, /* 37: 0011 0111 xxxx xxxx */
- {illegal,nullptr }, /* 38: */
- {STAX,"(BC)" }, /* 39: 0011 1001 */
- {STAX,"(DE)" }, /* 3a: 0011 1010 */
- {STAX,"(HL)" }, /* 3b: 0011 1011 */
- {STAX,"(DE+)" }, /* 3c: 0011 1100 */
- {STAX,"(HL+)" }, /* 3d: 0011 1101 */
- {STAX,"(DE-)" }, /* 3e: 0011 1110 */
- {STAX,"(HL-)" }, /* 3f: 0011 1111 */
+ {DCRW, "%a" }, // 30: 0011 0000 oooo oooo
+ {AND, "CY,%i" }, // 31: 0011 0001 bbbb bbbb 7807
+ {INX, "HL", }, // 32: 0011 0010
+ {DCX, "HL", }, // 33: 0011 0011
+ {LXI, "HL,%w" }, // 34: 0011 0100 llll llll hhhh hhhh
+ {LTIW, "%a,%b" }, // 35: 0011 0101 oooo oooo xxxx xxxx
+ {SUINB, "A,%b" }, // 36: 0011 0110 xxxx xxxx
+ {LTI, "A,%b" }, // 37: 0011 0111 xxxx xxxx
+ { }, // 38:
+ {STAX, "(BC)" }, // 39: 0011 1001
+ {STAX, "(DE)" }, // 3a: 0011 1010
+ {STAX, "(HL)" }, // 3b: 0011 1011
+ {STAX, "(DE+)" }, // 3c: 0011 1100
+ {STAX, "(HL+)" }, // 3d: 0011 1101
+ {STAX, "(DE-)" }, // 3e: 0011 1110
+ {STAX, "(HL-)" }, // 3f: 0011 1111
- {CALL,"%w" }, /* 40: 0100 0000 llll llll hhhh hhhh */
- {INR,"A" }, /* 41: 0100 0001 */
- {INR,"B" }, /* 42: 0100 0010 */
- {INR,"C" }, /* 43: 0100 0011 */
- {LXI,"EA,%w" }, /* 44: 0100 0100 llll llll hhhh hhhh */
- {ONIW,"%a,%b" }, /* 45: 0100 0101 oooo oooo xxxx xxxx */
- {ADI,"A,%b" }, /* 46: 0100 0110 xxxx xxxx */
- {ONI,"A,%b" }, /* 47: 0100 0111 xxxx xxxx */
- {0,dasm48_7807 }, /* 48: prefix */
- {MVIX,"BC,%b" }, /* 49: 0100 1001 xxxx xxxx */
- {MVIX,"DE,%b" }, /* 4a: 0100 1010 xxxx xxxx */
- {MVIX,"HL,%b" }, /* 4b: 0100 1011 xxxx xxxx */
- {0,dasm4C_7807 }, /* 4c: prefix */
- {0,dasm4D_7807 }, /* 4d: prefix */
- {JRE,"%d" }, /* 4e: 0100 111d dddd dddd */
- {JRE,"%d" }, /* 4f: 0100 111d dddd dddd */
- {SKN,"%i" }, /* 50: 0101 0000 bbbb bbbb */ /* 7807 */
- {DCR,"A" }, /* 51: 0101 0001 */
- {DCR,"B" }, /* 52: 0101 0010 */
- {DCR,"C" }, /* 53: 0101 0011 */
- {JMP,"%w" }, /* 54: 0101 0100 llll llll hhhh hhhh */
- {OFFIW,"%a,%b" }, /* 55: 0101 0101 oooo oooo xxxx xxxx */
- {ACI,"A,%b" }, /* 56: 0101 0110 xxxx xxxx */
- {OFFI,"A,%b" }, /* 57: 0101 0111 xxxx xxxx */
- {SETB,"%i" }, /* 58: 0101 1000 bbbb bbbb */ /* 7807 */
- {NOT,"%i" }, /* 59: 0101 1001 bbbb bbbb */ /* 7807 */
- {MOV,"%i,CY" }, /* 5a: 0101 1010 bbbb bbbb */ /* 7807 */
- {CLR,"%i" }, /* 5b: 0101 1011 bbbb bbbb */ /* 7807 */
- {OR,"CY,%i" }, /* 5c: 0101 1100 bbbb bbbb */ /* 7807 */
- {SK,"%i" }, /* 5d: 0101 1101 bbbb bbbb */ /* 7807 */
- {XOR,"CY,%i" }, /* 5e: 0101 1110 bbbb bbbb */ /* 7807 */
- {MOV,"CY,%i" }, /* 5f: 0101 1111 bbbb bbbb */ /* 7807 */
+ {CALL, "%w" }, // 40: 0100 0000 llll llll hhhh hhhh
+ {INR, "A" }, // 41: 0100 0001
+ {INR, "B" }, // 42: 0100 0010
+ {INR, "C" }, // 43: 0100 0011
+ {LXI, "EA,%w" }, // 44: 0100 0100 llll llll hhhh hhhh
+ {ONIW, "%a,%b" }, // 45: 0100 0101 oooo oooo xxxx xxxx
+ {ADI, "A,%b" }, // 46: 0100 0110 xxxx xxxx
+ {ONI, "A,%b" }, // 47: 0100 0111 xxxx xxxx
+ {d48_7807 }, // 48: prefix
+ {MVIX, "BC,%b" }, // 49: 0100 1001 xxxx xxxx
+ {MVIX, "DE,%b" }, // 4a: 0100 1010 xxxx xxxx
+ {MVIX, "HL,%b" }, // 4b: 0100 1011 xxxx xxxx
+ {d4C_7807 }, // 4c: prefix
+ {d4D_7807 }, // 4d: prefix
+ {JRE, "%d" }, // 4e: 0100 111d dddd dddd
+ {JRE, "%d" }, // 4f: 0100 111d dddd dddd
+ {SKN, "%i" }, // 50: 0101 0000 bbbb bbbb 7807
+ {DCR, "A" }, // 51: 0101 0001
+ {DCR, "B" }, // 52: 0101 0010
+ {DCR, "C" }, // 53: 0101 0011
+ {JMP, "%w" }, // 54: 0101 0100 llll llll hhhh hhhh
+ {OFFIW, "%a,%b" }, // 55: 0101 0101 oooo oooo xxxx xxxx
+ {ACI, "A,%b" }, // 56: 0101 0110 xxxx xxxx
+ {OFFI, "A,%b" }, // 57: 0101 0111 xxxx xxxx
+ {SETB, "%i" }, // 58: 0101 1000 bbbb bbbb 7807
+ {NOT, "%i" }, // 59: 0101 1001 bbbb bbbb 7807
+ {MOV, "%i,CY" }, // 5a: 0101 1010 bbbb bbbb 7807
+ {CLR, "%i" }, // 5b: 0101 1011 bbbb bbbb 7807
+ {OR, "CY,%i" }, // 5c: 0101 1100 bbbb bbbb 7807
+ {SK, "%i" }, // 5d: 0101 1101 bbbb bbbb 7807
+ {XOR, "CY,%i" }, // 5e: 0101 1110 bbbb bbbb 7807
+ {MOV, "CY,%i" }, // 5f: 0101 1111 bbbb bbbb 7807
- {0,dasm60 }, /* 60: prefix */
- {DAA,nullptr }, /* 61: 0110 0001 */
- {RETI,nullptr }, /* 62: 0110 0010 */
- {STAW,"%a" }, /* 63: 0110 0011 oooo oooo */
- {0,dasm64_7807 }, /* 64: prefix */
- {NEIW,"%a,%b" }, /* 65: 0110 0101 oooo oooo xxxx xxxx */
- {SUI,"A,%b" }, /* 66: 0110 0110 xxxx xxxx */
- {NEI,"A,%b" }, /* 67: 0110 0111 xxxx xxxx */
- {MVI,"V,%b" }, /* 68: 0110 1000 xxxx xxxx */
- {MVI,"A,%b" }, /* 69: 0110 1001 xxxx xxxx */
- {MVI,"B,%b" }, /* 6a: 0110 1010 xxxx xxxx */
- {MVI,"C,%b" }, /* 6b: 0110 1011 xxxx xxxx */
- {MVI,"D,%b" }, /* 6c: 0110 1100 xxxx xxxx */
- {MVI,"E,%b" }, /* 6d: 0110 1101 xxxx xxxx */
- {MVI,"H,%b" }, /* 6e: 0110 1110 xxxx xxxx */
- {MVI,"L,%b" }, /* 6f: 0110 1111 xxxx xxxx */
+ {d60 }, // 60: prefix
+ {DAA, nullptr }, // 61: 0110 0001
+ {RETI, nullptr }, // 62: 0110 0010
+ {STAW, "%a" }, // 63: 0110 0011 oooo oooo
+ {d64_7807 }, // 64: prefix
+ {NEIW, "%a,%b" }, // 65: 0110 0101 oooo oooo xxxx xxxx
+ {SUI, "A,%b" }, // 66: 0110 0110 xxxx xxxx
+ {NEI, "A,%b" }, // 67: 0110 0111 xxxx xxxx
+ {MVI, "V,%b" }, // 68: 0110 1000 xxxx xxxx
+ {MVI, "A,%b" }, // 69: 0110 1001 xxxx xxxx
+ {MVI, "B,%b" }, // 6a: 0110 1010 xxxx xxxx
+ {MVI, "C,%b" }, // 6b: 0110 1011 xxxx xxxx
+ {MVI, "D,%b" }, // 6c: 0110 1100 xxxx xxxx
+ {MVI, "E,%b" }, // 6d: 0110 1101 xxxx xxxx
+ {MVI, "H,%b" }, // 6e: 0110 1110 xxxx xxxx
+ {MVI, "L,%b" }, // 6f: 0110 1111 xxxx xxxx
- {0,dasm70 }, /* 70: prefix */
- {MVIW,"%a,%b" }, /* 71: 0111 0001 oooo oooo xxxx xxxx */
- {SOFTI,nullptr }, /* 72: 0111 0010 */
- {illegal,nullptr }, /* 73: */
- {0,dasm74 }, /* 74: prefix */
- {EQIW,"%a,%b" }, /* 75: 0111 0101 oooo oooo xxxx xxxx */
- {SBI,"A,%b" }, /* 76: 0111 0110 xxxx xxxx */
- {EQI,"A,%b" }, /* 77: 0111 0111 xxxx xxxx */
- {CALF,"%f" }, /* 78: 0111 1ddd dddd dddd */
- {CALF,"%f" }, /* 79: 0111 1ddd dddd dddd */
- {CALF,"%f" }, /* 7a: 0111 1ddd dddd dddd */
- {CALF,"%f" }, /* 7b: 0111 1ddd dddd dddd */
- {CALF,"%f" }, /* 7c: 0111 1ddd dddd dddd */
- {CALF,"%f" }, /* 7d: 0111 1ddd dddd dddd */
- {CALF,"%f" }, /* 7e: 0111 1ddd dddd dddd */
- {CALF,"%f" }, /* 7f: 0111 1ddd dddd dddd */
+ {d70 }, // 70: prefix
+ {MVIW, "%a,%b" }, // 71: 0111 0001 oooo oooo xxxx xxxx
+ {SOFTI, nullptr }, // 72: 0111 0010
+ { }, // 73:
+ {d74 }, // 74: prefix
+ {EQIW, "%a,%b" }, // 75: 0111 0101 oooo oooo xxxx xxxx
+ {SBI, "A,%b" }, // 76: 0111 0110 xxxx xxxx
+ {EQI, "A,%b" }, // 77: 0111 0111 xxxx xxxx
+ {CALF, "%f" }, // 78: 0111 1ddd dddd dddd
+ {CALF, "%f" }, // 79: 0111 1ddd dddd dddd
+ {CALF, "%f" }, // 7a: 0111 1ddd dddd dddd
+ {CALF, "%f" }, // 7b: 0111 1ddd dddd dddd
+ {CALF, "%f" }, // 7c: 0111 1ddd dddd dddd
+ {CALF, "%f" }, // 7d: 0111 1ddd dddd dddd
+ {CALF, "%f" }, // 7e: 0111 1ddd dddd dddd
+ {CALF, "%f" }, // 7f: 0111 1ddd dddd dddd
- {CALT,"%t" }, /* 80: 100t tttt */
- {CALT,"%t" }, /* 81: 100t tttt */
- {CALT,"%t" }, /* 82: 100t tttt */
- {CALT,"%t" }, /* 83: 100t tttt */
- {CALT,"%t" }, /* 84: 100t tttt */
- {CALT,"%t" }, /* 85: 100t tttt */
- {CALT,"%t" }, /* 86: 100t tttt */
- {CALT,"%t" }, /* 87: 100t tttt */
- {CALT,"%t" }, /* 88: 100t tttt */
- {CALT,"%t" }, /* 89: 100t tttt */
- {CALT,"%t" }, /* 8a: 100t tttt */
- {CALT,"%t" }, /* 8b: 100t tttt */
- {CALT,"%t" }, /* 8c: 100t tttt */
- {CALT,"%t" }, /* 8d: 100t tttt */
- {CALT,"%t" }, /* 8e: 100t tttt */
- {CALT,"%t" }, /* 8f: 100t tttt */
+ {CALT, "%t" }, // 80: 100t tttt
+ {CALT, "%t" }, // 81: 100t tttt
+ {CALT, "%t" }, // 82: 100t tttt
+ {CALT, "%t" }, // 83: 100t tttt
+ {CALT, "%t" }, // 84: 100t tttt
+ {CALT, "%t" }, // 85: 100t tttt
+ {CALT, "%t" }, // 86: 100t tttt
+ {CALT, "%t" }, // 87: 100t tttt
+ {CALT, "%t" }, // 88: 100t tttt
+ {CALT, "%t" }, // 89: 100t tttt
+ {CALT, "%t" }, // 8a: 100t tttt
+ {CALT, "%t" }, // 8b: 100t tttt
+ {CALT, "%t" }, // 8c: 100t tttt
+ {CALT, "%t" }, // 8d: 100t tttt
+ {CALT, "%t" }, // 8e: 100t tttt
+ {CALT, "%t" }, // 8f: 100t tttt
- {CALT,"%t" }, /* 90: 100t tttt */
- {CALT,"%t" }, /* 91: 100t tttt */
- {CALT,"%t" }, /* 92: 100t tttt */
- {CALT,"%t" }, /* 93: 100t tttt */
- {CALT,"%t" }, /* 94: 100t tttt */
- {CALT,"%t" }, /* 95: 100t tttt */
- {CALT,"%t" }, /* 96: 100t tttt */
- {CALT,"%t" }, /* 97: 100t tttt */
- {CALT,"%t" }, /* 98: 100t tttt */
- {CALT,"%t" }, /* 99: 100t tttt */
- {CALT,"%t" }, /* 9a: 100t tttt */
- {CALT,"%t" }, /* 9b: 100t tttt */
- {CALT,"%t" }, /* 9c: 100t tttt */
- {CALT,"%t" }, /* 9d: 100t tttt */
- {CALT,"%t" }, /* 9e: 100t tttt */
- {CALT,"%t" }, /* 9f: 100t tttt */
+ {CALT, "%t" }, // 90: 100t tttt
+ {CALT, "%t" }, // 91: 100t tttt
+ {CALT, "%t" }, // 92: 100t tttt
+ {CALT, "%t" }, // 93: 100t tttt
+ {CALT, "%t" }, // 94: 100t tttt
+ {CALT, "%t" }, // 95: 100t tttt
+ {CALT, "%t" }, // 96: 100t tttt
+ {CALT, "%t" }, // 97: 100t tttt
+ {CALT, "%t" }, // 98: 100t tttt
+ {CALT, "%t" }, // 99: 100t tttt
+ {CALT, "%t" }, // 9a: 100t tttt
+ {CALT, "%t" }, // 9b: 100t tttt
+ {CALT, "%t" }, // 9c: 100t tttt
+ {CALT, "%t" }, // 9d: 100t tttt
+ {CALT, "%t" }, // 9e: 100t tttt
+ {CALT, "%t" }, // 9f: 100t tttt
- {POP,"VA" }, /* a0: 1010 0000 */
- {POP,"BC" }, /* a1: 1010 0001 */
- {POP,"DE" }, /* a2: 1010 0010 */
- {POP,"HL", }, /* a3: 1010 0011 */
- {POP,"EA" }, /* a4: 1010 0100 */
- {DMOV,"EA,BC" }, /* a5: 1010 0101 */
- {DMOV,"EA,DE" }, /* a6: 1010 0110 */
- {DMOV,"EA,HL" }, /* a7: 1010 0111 */
- {INX,"EA" }, /* a8: 1010 1000 */
- {DCX,"EA" }, /* a9: 1010 1001 */
- {EI,nullptr }, /* aa: 1010 1010 */
- {LDAX,"(DE+%b)" }, /* ab: 1010 1011 dddd dddd */
- {LDAX,"(HL+A)" }, /* ac: 1010 1100 */
- {LDAX,"(HL+B)" }, /* ad: 1010 1101 */
- {LDAX,"(HL+EA)" }, /* ae: 1010 1110 */
- {LDAX,"(HL+%b)" }, /* af: 1010 1111 dddd dddd */
+ {POP, "VA" }, // a0: 1010 0000
+ {POP, "BC" }, // a1: 1010 0001
+ {POP, "DE" }, // a2: 1010 0010
+ {POP, "HL", }, // a3: 1010 0011
+ {POP, "EA" }, // a4: 1010 0100
+ {DMOV, "EA,BC" }, // a5: 1010 0101
+ {DMOV, "EA,DE" }, // a6: 1010 0110
+ {DMOV, "EA,HL" }, // a7: 1010 0111
+ {INX, "EA" }, // a8: 1010 1000
+ {DCX, "EA" }, // a9: 1010 1001
+ {EI, nullptr }, // aa: 1010 1010
+ {LDAX, "(DE+%b)" }, // ab: 1010 1011 dddd dddd
+ {LDAX, "(HL+A)" }, // ac: 1010 1100
+ {LDAX, "(HL+B)" }, // ad: 1010 1101
+ {LDAX, "(HL+EA)" }, // ae: 1010 1110
+ {LDAX, "(HL+%b)" }, // af: 1010 1111 dddd dddd
- {PUSH,"VA" }, /* b0: 1011 0000 */
- {PUSH,"BC" }, /* b1: 1011 0001 */
- {PUSH,"DE" }, /* b2: 1011 0010 */
- {PUSH,"HL", }, /* b3: 1011 0011 */
- {PUSH,"EA" }, /* b4: 1011 0100 */
- {DMOV,"BC,EA" }, /* b5: 1011 0101 */
- {DMOV,"DE,EA" }, /* b6: 1011 0110 */
- {DMOV,"HL,EA" }, /* b7: 1011 0111 */
- {RET,nullptr }, /* b8: 1011 1000 */
- {RETS,nullptr }, /* b9: 1011 1001 */
- {DI,nullptr }, /* ba: 1011 1010 */
- {STAX,"(DE+%b)" }, /* bb: 1011 1011 dddd dddd */
- {STAX,"(HL+A)" }, /* bc: 1011 1100 */
- {STAX,"(HL+B)" }, /* bd: 1011 1101 */
- {STAX,"(HL+EA)" }, /* be: 1011 1110 */
- {STAX,"(HL+%b)" }, /* bf: 1011 1111 dddd dddd */
+ {PUSH, "VA" }, // b0: 1011 0000
+ {PUSH, "BC" }, // b1: 1011 0001
+ {PUSH, "DE" }, // b2: 1011 0010
+ {PUSH, "HL", }, // b3: 1011 0011
+ {PUSH, "EA" }, // b4: 1011 0100
+ {DMOV, "BC,EA" }, // b5: 1011 0101
+ {DMOV, "DE,EA" }, // b6: 1011 0110
+ {DMOV, "HL,EA" }, // b7: 1011 0111
+ {RET, nullptr }, // b8: 1011 1000
+ {RETS, nullptr }, // b9: 1011 1001
+ {DI, nullptr }, // ba: 1011 1010
+ {STAX, "(DE+%b)" }, // bb: 1011 1011 dddd dddd
+ {STAX, "(HL+A)" }, // bc: 1011 1100
+ {STAX, "(HL+B)" }, // bd: 1011 1101
+ {STAX, "(HL+EA)" }, // be: 1011 1110
+ {STAX, "(HL+%b)" }, // bf: 1011 1111 dddd dddd
- {JR,"%o" }, /* c0: 11oo oooo */
- {JR,"%o" }, /* c1: 11oo oooo */
- {JR,"%o" }, /* c2: 11oo oooo */
- {JR,"%o" }, /* c3: 11oo oooo */
- {JR,"%o" }, /* c4: 11oo oooo */
- {JR,"%o" }, /* c5: 11oo oooo */
- {JR,"%o" }, /* c6: 11oo oooo */
- {JR,"%o" }, /* c7: 11oo oooo */
- {JR,"%o" }, /* c8: 11oo oooo */
- {JR,"%o" }, /* c9: 11oo oooo */
- {JR,"%o" }, /* ca: 11oo oooo */
- {JR,"%o" }, /* cb: 11oo oooo */
- {JR,"%o" }, /* cc: 11oo oooo */
- {JR,"%o" }, /* cd: 11oo oooo */
- {JR,"%o" }, /* ce: 11oo oooo */
- {JR,"%o" }, /* cf: 11oo oooo */
+ {JR, "%o" }, // c0: 11oo oooo
+ {JR, "%o" }, // c1: 11oo oooo
+ {JR, "%o" }, // c2: 11oo oooo
+ {JR, "%o" }, // c3: 11oo oooo
+ {JR, "%o" }, // c4: 11oo oooo
+ {JR, "%o" }, // c5: 11oo oooo
+ {JR, "%o" }, // c6: 11oo oooo
+ {JR, "%o" }, // c7: 11oo oooo
+ {JR, "%o" }, // c8: 11oo oooo
+ {JR, "%o" }, // c9: 11oo oooo
+ {JR, "%o" }, // ca: 11oo oooo
+ {JR, "%o" }, // cb: 11oo oooo
+ {JR, "%o" }, // cc: 11oo oooo
+ {JR, "%o" }, // cd: 11oo oooo
+ {JR, "%o" }, // ce: 11oo oooo
+ {JR, "%o" }, // cf: 11oo oooo
- {JR,"%o" }, /* d0: 11oo oooo */
- {JR,"%o" }, /* d1: 11oo oooo */
- {JR,"%o" }, /* d2: 11oo oooo */
- {JR,"%o" }, /* d3: 11oo oooo */
- {JR,"%o" }, /* d4: 11oo oooo */
- {JR,"%o" }, /* d5: 11oo oooo */
- {JR,"%o" }, /* d6: 11oo oooo */
- {JR,"%o" }, /* d7: 11oo oooo */
- {JR,"%o" }, /* d8: 11oo oooo */
- {JR,"%o" }, /* d9: 11oo oooo */
- {JR,"%o" }, /* da: 11oo oooo */
- {JR,"%o" }, /* db: 11oo oooo */
- {JR,"%o" }, /* dc: 11oo oooo */
- {JR,"%o" }, /* dd: 11oo oooo */
- {JR,"%o" }, /* de: 11oo oooo */
- {JR,"%o" }, /* df: 11oo oooo */
+ {JR, "%o" }, // d0: 11oo oooo
+ {JR, "%o" }, // d1: 11oo oooo
+ {JR, "%o" }, // d2: 11oo oooo
+ {JR, "%o" }, // d3: 11oo oooo
+ {JR, "%o" }, // d4: 11oo oooo
+ {JR, "%o" }, // d5: 11oo oooo
+ {JR, "%o" }, // d6: 11oo oooo
+ {JR, "%o" }, // d7: 11oo oooo
+ {JR, "%o" }, // d8: 11oo oooo
+ {JR, "%o" }, // d9: 11oo oooo
+ {JR, "%o" }, // da: 11oo oooo
+ {JR, "%o" }, // db: 11oo oooo
+ {JR, "%o" }, // dc: 11oo oooo
+ {JR, "%o" }, // dd: 11oo oooo
+ {JR, "%o" }, // de: 11oo oooo
+ {JR, "%o" }, // df: 11oo oooo
- {JR,"%o" }, /* e0: 11oo oooo */
- {JR,"%o" }, /* e1: 11oo oooo */
- {JR,"%o" }, /* e2: 11oo oooo */
- {JR,"%o" }, /* e3: 11oo oooo */
- {JR,"%o" }, /* e4: 11oo oooo */
- {JR,"%o" }, /* e5: 11oo oooo */
- {JR,"%o" }, /* e6: 11oo oooo */
- {JR,"%o" }, /* e7: 11oo oooo */
- {JR,"%o" }, /* e8: 11oo oooo */
- {JR,"%o" }, /* e9: 11oo oooo */
- {JR,"%o" }, /* ea: 11oo oooo */
- {JR,"%o" }, /* eb: 11oo oooo */
- {JR,"%o" }, /* ec: 11oo oooo */
- {JR,"%o" }, /* ed: 11oo oooo */
- {JR,"%o" }, /* ee: 11oo oooo */
- {JR,"%o" }, /* ef: 11oo oooo */
+ {JR, "%o" }, // e0: 11oo oooo
+ {JR, "%o" }, // e1: 11oo oooo
+ {JR, "%o" }, // e2: 11oo oooo
+ {JR, "%o" }, // e3: 11oo oooo
+ {JR, "%o" }, // e4: 11oo oooo
+ {JR, "%o" }, // e5: 11oo oooo
+ {JR, "%o" }, // e6: 11oo oooo
+ {JR, "%o" }, // e7: 11oo oooo
+ {JR, "%o" }, // e8: 11oo oooo
+ {JR, "%o" }, // e9: 11oo oooo
+ {JR, "%o" }, // ea: 11oo oooo
+ {JR, "%o" }, // eb: 11oo oooo
+ {JR, "%o" }, // ec: 11oo oooo
+ {JR, "%o" }, // ed: 11oo oooo
+ {JR, "%o" }, // ee: 11oo oooo
+ {JR, "%o" }, // ef: 11oo oooo
- {JR,"%o" }, /* f0: 11oo oooo */
- {JR,"%o" }, /* f1: 11oo oooo */
- {JR,"%o" }, /* f2: 11oo oooo */
- {JR,"%o" }, /* f3: 11oo oooo */
- {JR,"%o" }, /* f4: 11oo oooo */
- {JR,"%o" }, /* f5: 11oo oooo */
- {JR,"%o" }, /* f6: 11oo oooo */
- {JR,"%o" }, /* f7: 11oo oooo */
- {JR,"%o" }, /* f8: 11oo oooo */
- {JR,"%o" }, /* f9: 11oo oooo */
- {JR,"%o" }, /* fa: 11oo oooo */
- {JR,"%o" }, /* fb: 11oo oooo */
- {JR,"%o" }, /* fc: 11oo oooo */
- {JR,"%o" }, /* fd: 11oo oooo */
- {JR,"%o" }, /* fe: 11oo oooo */
- {JR,"%o" } /* ff: 11oo oooo */
+ {JR, "%o" }, // f0: 11oo oooo
+ {JR, "%o" }, // f1: 11oo oooo
+ {JR, "%o" }, // f2: 11oo oooo
+ {JR, "%o" }, // f3: 11oo oooo
+ {JR, "%o" }, // f4: 11oo oooo
+ {JR, "%o" }, // f5: 11oo oooo
+ {JR, "%o" }, // f6: 11oo oooo
+ {JR, "%o" }, // f7: 11oo oooo
+ {JR, "%o" }, // f8: 11oo oooo
+ {JR, "%o" }, // f9: 11oo oooo
+ {JR, "%o" }, // fa: 11oo oooo
+ {JR, "%o" }, // fb: 11oo oooo
+ {JR, "%o" }, // fc: 11oo oooo
+ {JR, "%o" }, // fd: 11oo oooo
+ {JR, "%o" }, // fe: 11oo oooo
+ {JR, "%o" } // ff: 11oo oooo
};
/*********************************************************
@@ -3965,1391 +4020,1391 @@ static const struct dasm_s dasmXX_7807[256] =
*
*********************************************************/
-static const struct dasm_s dasm48_7801[256] = {
- /* 0x00 - 0x3F */
- { SKIT, "F0" }, { SKIT, "FT" }, { SKIT, "F1" }, { SKIT, "F2" },
- { SKIT, "FS" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { SK, "CY" }, { illegal, nullptr },
- { SK, "Z" }, { illegal, nullptr }, { PUSH, "VA" }, { POP, "VA" },
+const dasm_s dasm_s::d48_7801[256] = {
+ // 0x00 - 0x3F
+ { SKIT, "F0" }, { SKIT, "FT" }, { SKIT, "F1" }, { SKIT, "F2" },
+ { SKIT, "FS" }, { }, { }, { },
+ { }, { }, { SK, "CY" }, { },
+ { SK, "Z" }, { }, { PUSH, "VA" }, { POP, "VA" },
- { SKNIT, "F0" }, { SKNIT, "FT" }, { SKNIT, "F1" }, { SKNIT, "F2" },
- { SKNIT, "FS" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { SKN, "CY" }, { illegal, nullptr },
- { SKN, "Z" }, { illegal, nullptr }, { PUSH, "BC" }, { POP, "BC" },
+ { SKNIT, "F0" }, { SKNIT, "FT" }, { SKNIT, "F1" }, { SKNIT, "F2" },
+ { SKNIT, "FS" }, { }, { }, { },
+ { }, { }, { SKN, "CY" }, { },
+ { SKN, "Z" }, { }, { PUSH, "BC" }, { POP, "BC" },
- { EI, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { DI, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { CLC, nullptr }, { STC, nullptr },
- { PER, nullptr }, { PEX, nullptr }, { PUSH, "DE" }, { POP, "DE" },
+ { EI, nullptr }, { }, { }, { },
+ { DI, nullptr }, { }, { }, { },
+ { }, { }, { CLC, nullptr }, { STC, nullptr },
+ { PER, nullptr }, { PEX, nullptr }, { PUSH, "DE" }, { POP, "DE" },
- { RLL, "A" }, { RLR, "A" }, { RLL, "C" }, { RLR, "C" },
- { SLL, "A" }, { SLR, "A" }, { SLL, "C" }, { SLR, "C" },
- { RLD, nullptr }, { RRD, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { PER, nullptr }, { illegal, nullptr }, { PUSH, "HL" }, { POP, "HL" },
+ { RLL, "A" }, { RLR, "A" }, { RLL, "C" }, { RLR, "C" },
+ { SLL, "A" }, { SLR, "A" }, { SLL, "C" }, { SLR, "C" },
+ { RLD, nullptr }, { RRD, nullptr }, { }, { },
+ { PER, nullptr }, { }, { PUSH, "HL" }, { POP, "HL" },
- /* 0x40 - 0x7F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x40 - 0x7F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- /* 0x80 - 0xBF */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x80 - 0xBF
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- /* 0xC0 - 0xFF */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0xC0 - 0xFF
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { }
};
-static const struct dasm_s dasm4c_7801[256] = {
- /* 0x00 - 0x3F */
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+const dasm_s dasm_s::d4C_7801[256] = {
+ // 0x00 - 0x3F
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- /* 0x40 - 0x7F */
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ // 0x40 - 0x7F
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- /* 0x80 - 0xBF */
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ // 0x80 - 0xBF
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- /* 0xC0 - 0xFF */
- { MOV, "A,PA" }, { MOV, "A,PB" }, { MOV, "A,PC" }, { MOV, "A,MK" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { MOV, "A,S" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0xC0 - 0xFF
+ { MOV, "A,PA" }, { MOV, "A,PB" }, { MOV, "A,PC" }, { MOV, "A,MK" },
+ { }, { }, { }, { },
+ { MOV, "A,S" }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { }
};
-static const struct dasm_s dasm4d_7801[256] = {
- /* 0x00 - 0x3F */
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+const dasm_s dasm_s::d4D_7801[256] = {
+ // 0x00 - 0x3F
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- /* 0x40 - 0x7F */
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ // 0x40 - 0x7F
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- /* 0x80 - 0xBF */
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ // 0x80 - 0xBF
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- /* 0xC0 - 0xFF */
- { MOV, "PA,A" }, { MOV, "PB,A" }, { MOV, "PC,A" }, { MOV, "MK,A" },
- { MOV, "MB,A" }, { MOV, "MC,A" }, { MOV, "TM0,A" }, { MOV, "TM1,A" },
- { MOV, "S,A" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0xC0 - 0xFF
+ { MOV, "PA,A" }, { MOV, "PB,A" }, { MOV, "PC,A" }, { MOV, "MK,A" },
+ { MOV, "MB,A" }, { MOV, "MC,A" }, { MOV, "TM0,A" }, { MOV, "TM1,A" },
+ { MOV, "S,A" }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { }
};
-static const struct dasm_s dasm60_7801[256] = {
- /* 0x00 - 0x3F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { ANA, "V,A" }, { ANA, "A,A" }, { ANA, "B,A" }, { ANA, "C,A" },
- { ANA, "D,A" }, { ANA, "E,A" }, { ANA, "H,A" }, { ANA, "L,A" },
+const dasm_s dasm_s::d60_7801[256] = {
+ // 0x00 - 0x3F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { ANA, "V,A" }, { ANA, "A,A" }, { ANA, "B,A" }, { ANA, "C,A" },
+ { ANA, "D,A" }, { ANA, "E,A" }, { ANA, "H,A" }, { ANA, "L,A" },
- { XRA, "V,A" }, { XRA, "A,A" }, { XRA, "B,A" }, { XRA, "C,A" },
- { XRA, "D,A" }, { XRA, "E,A" }, { XRA, "H,A" }, { XRA, "L,A" },
- { ORA, "V,A" }, { ORA, "A,A" }, { ORA, "B,A" }, { ORA, "C,A" },
- { ORA, "D,A" }, { ORA, "E,A" }, { ORA, "H,A" }, { ORA, "L,A" },
+ { XRA, "V,A" }, { XRA, "A,A" }, { XRA, "B,A" }, { XRA, "C,A" },
+ { XRA, "D,A" }, { XRA, "E,A" }, { XRA, "H,A" }, { XRA, "L,A" },
+ { ORA, "V,A" }, { ORA, "A,A" }, { ORA, "B,A" }, { ORA, "C,A" },
+ { ORA, "D,A" }, { ORA, "E,A" }, { ORA, "H,A" }, { ORA, "L,A" },
- { ADDNC, "V,A" }, { ADDNC, "A,A" }, { ADDNC, "B,A" }, { ADDNC, "C,A" },
- { ADDNC, "D,A" }, { ADDNC, "E,A" }, { ADDNC, "H,A" }, { ADDNC, "L,A" },
- { GTA, "V,A" }, { GTA, "A,A" }, { GTA, "B,A" }, { GTA, "C,A" },
- { GTA, "D,A" }, { GTA, "E,A" }, { GTA, "H,A" }, { GTA, "L,A" },
+ { ADDNC, "V,A" }, { ADDNC, "A,A" }, { ADDNC, "B,A" }, { ADDNC, "C,A" },
+ { ADDNC, "D,A" }, { ADDNC, "E,A" }, { ADDNC, "H,A" }, { ADDNC, "L,A" },
+ { GTA, "V,A" }, { GTA, "A,A" }, { GTA, "B,A" }, { GTA, "C,A" },
+ { GTA, "D,A" }, { GTA, "E,A" }, { GTA, "H,A" }, { GTA, "L,A" },
- { SUBNB, "V,A" }, { SUBNB, "A,A" }, { SUBNB, "B,A" }, { SUBNB, "C,A" },
- { SUBNB, "D,A" }, { SUBNB, "E,A" }, { SUBNB, "H,A" }, { SUBNB, "L,A" },
- { LTA, "V,A" }, { LTA, "A,A" }, { LTA, "B,A" }, { LTA, "C,A" },
- { LTA, "D,A" }, { LTA, "E,A" }, { LTA, "H,A" }, { LTA, "L,A" },
+ { SUBNB, "V,A" }, { SUBNB, "A,A" }, { SUBNB, "B,A" }, { SUBNB, "C,A" },
+ { SUBNB, "D,A" }, { SUBNB, "E,A" }, { SUBNB, "H,A" }, { SUBNB, "L,A" },
+ { LTA, "V,A" }, { LTA, "A,A" }, { LTA, "B,A" }, { LTA, "C,A" },
+ { LTA, "D,A" }, { LTA, "E,A" }, { LTA, "H,A" }, { LTA, "L,A" },
- /* 0x40 - 0x7F */
- { ADD, "V,A" }, { ADD, "A,A" }, { ADD, "B,A" }, { ADD, "C,A" },
- { ADD, "D,A" }, { ADD, "E,A" }, { ADD, "H,A" }, { ADD, "L,A" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x40 - 0x7F
+ { ADD, "V,A" }, { ADD, "A,A" }, { ADD, "B,A" }, { ADD, "C,A" },
+ { ADD, "D,A" }, { ADD, "E,A" }, { ADD, "H,A" }, { ADD, "L,A" },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { ADC, "V,A" }, { ADC, "A,A" }, { ADC, "B,A" }, { ADC, "C,A" },
- { ADC, "D,A" }, { ADC, "E,A" }, { ADC, "H,A" }, { ADC, "L,A" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { ADC, "V,A" }, { ADC, "A,A" }, { ADC, "B,A" }, { ADC, "C,A" },
+ { ADC, "D,A" }, { ADC, "E,A" }, { ADC, "H,A" }, { ADC, "L,A" },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { SUB, "V,A" }, { SUB, "A,A" }, { SUB, "B,A" }, { SUB, "C,A" },
- { SUB, "D,A" }, { SUB, "E,A" }, { SUB, "H,A" }, { SUB, "L,A" },
- { NEA, "V,A" }, { NEA, "A,A" }, { NEA, "B,A" }, { NEA, "C,A" },
- { NEA, "D,A" }, { NEA, "E,A" }, { NEA, "H,A" }, { NEA, "L,A" },
+ { SUB, "V,A" }, { SUB, "A,A" }, { SUB, "B,A" }, { SUB, "C,A" },
+ { SUB, "D,A" }, { SUB, "E,A" }, { SUB, "H,A" }, { SUB, "L,A" },
+ { NEA, "V,A" }, { NEA, "A,A" }, { NEA, "B,A" }, { NEA, "C,A" },
+ { NEA, "D,A" }, { NEA, "E,A" }, { NEA, "H,A" }, { NEA, "L,A" },
- { SBB, "V,A" }, { SBB, "A,A" }, { SBB, "B,A" }, { SBB, "C,A" },
- { SBB, "D,A" }, { SBB, "E,A" }, { SBB, "H,A" }, { SBB, "L,A" },
- { EQA, "V,A" }, { EQA, "A,A" }, { EQA, "B,A" }, { EQA, "C,A" },
- { EQA, "D,A" }, { EQA, "E,A" }, { EQA, "H,A" }, { EQA, "L,A" },
+ { SBB, "V,A" }, { SBB, "A,A" }, { SBB, "B,A" }, { SBB, "C,A" },
+ { SBB, "D,A" }, { SBB, "E,A" }, { SBB, "H,A" }, { SBB, "L,A" },
+ { EQA, "V,A" }, { EQA, "A,A" }, { EQA, "B,A" }, { EQA, "C,A" },
+ { EQA, "D,A" }, { EQA, "E,A" }, { EQA, "H,A" }, { EQA, "L,A" },
- /* 0x80 - 0xBF */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { ANA, "A,V" }, { ANA, "A,A" }, { ANA, "A,B" }, { ANA, "A,C" },
- { ANA, "A,D" }, { ANA, "A,E" }, { ANA, "A,H" }, { ANA, "A,L" },
+ // 0x80 - 0xBF
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { ANA, "A,V" }, { ANA, "A,A" }, { ANA, "A,B" }, { ANA, "A,C" },
+ { ANA, "A,D" }, { ANA, "A,E" }, { ANA, "A,H" }, { ANA, "A,L" },
- { XRA, "A,V" }, { XRA, "A,A" }, { XRA, "A,B" }, { XRA, "A,C" },
- { XRA, "A,D" }, { XRA, "A,E" }, { XRA, "A,H" }, { XRA, "A,L" },
- { ORA, "A,V" }, { ORA, "A,A" }, { ORA, "A,B" }, { ORA, "A,C" },
- { ORA, "A,D" }, { ORA, "A,E" }, { ORA, "A,H" }, { ORA, "A,L" },
+ { XRA, "A,V" }, { XRA, "A,A" }, { XRA, "A,B" }, { XRA, "A,C" },
+ { XRA, "A,D" }, { XRA, "A,E" }, { XRA, "A,H" }, { XRA, "A,L" },
+ { ORA, "A,V" }, { ORA, "A,A" }, { ORA, "A,B" }, { ORA, "A,C" },
+ { ORA, "A,D" }, { ORA, "A,E" }, { ORA, "A,H" }, { ORA, "A,L" },
- { ADDNC, "A,V" }, { ADDNC, "A,A" }, { ADDNC, "A,B" }, { ADDNC, "A,C" },
- { ADDNC, "A,D" }, { ADDNC, "A,E" }, { ADDNC, "A,H" }, { ADDNC, "A,L" },
- { GTA, "A,V" }, { GTA, "A,A" }, { GTA, "A,B" }, { GTA, "A,C" },
- { GTA, "A,D" }, { GTA, "A,E" }, { GTA, "A,H" }, { GTA, "A,L" },
+ { ADDNC, "A,V" }, { ADDNC, "A,A" }, { ADDNC, "A,B" }, { ADDNC, "A,C" },
+ { ADDNC, "A,D" }, { ADDNC, "A,E" }, { ADDNC, "A,H" }, { ADDNC, "A,L" },
+ { GTA, "A,V" }, { GTA, "A,A" }, { GTA, "A,B" }, { GTA, "A,C" },
+ { GTA, "A,D" }, { GTA, "A,E" }, { GTA, "A,H" }, { GTA, "A,L" },
- { SUBNB, "A,V" }, { SUBNB, "A,A" }, { SUBNB, "A,B" }, { SUBNB, "A,C" },
- { SUBNB, "A,D" }, { SUBNB, "A,E" }, { SUBNB, "A,H" }, { SUBNB, "A,L" },
- { LTA, "A,V" }, { LTA, "A,A" }, { LTA, "A,B" }, { LTA, "A,C" },
- { LTA, "A,D" }, { LTA, "A,E" }, { LTA, "A,H" }, { LTA, "A,L" },
+ { SUBNB, "A,V" }, { SUBNB, "A,A" }, { SUBNB, "A,B" }, { SUBNB, "A,C" },
+ { SUBNB, "A,D" }, { SUBNB, "A,E" }, { SUBNB, "A,H" }, { SUBNB, "A,L" },
+ { LTA, "A,V" }, { LTA, "A,A" }, { LTA, "A,B" }, { LTA, "A,C" },
+ { LTA, "A,D" }, { LTA, "A,E" }, { LTA, "A,H" }, { LTA, "A,L" },
- /* 0xC0 - 0xFF */
- { ADD, "A,V" }, { ADD, "A,A" }, { ADD, "A,B" }, { ADD, "A,C" },
- { ADD, "A,D" }, { ADD, "A,E" }, { ADD, "A,H" }, { ADD, "A,L" },
- { ONA, "A,V" }, { ONA, "A,A" }, { ONA, "A,B" }, { ONA, "A,C" },
- { ONA, "A,D" }, { ONA, "A,E" }, { ONA, "A,H" }, { ONA, "A,L" },
+ // 0xC0 - 0xFF
+ { ADD, "A,V" }, { ADD, "A,A" }, { ADD, "A,B" }, { ADD, "A,C" },
+ { ADD, "A,D" }, { ADD, "A,E" }, { ADD, "A,H" }, { ADD, "A,L" },
+ { ONA, "A,V" }, { ONA, "A,A" }, { ONA, "A,B" }, { ONA, "A,C" },
+ { ONA, "A,D" }, { ONA, "A,E" }, { ONA, "A,H" }, { ONA, "A,L" },
- { ADC, "A,V" }, { ADC, "A,A" }, { ADC, "A,B" }, { ADC, "A,C" },
- { ADC, "A,D" }, { ADC, "A,E" }, { ADC, "A,H" }, { ADC, "A,L" },
- { OFFA, "A,V" }, { OFFA, "A,A" }, { OFFA, "A,B" }, { OFFA, "A,C" },
- { OFFA, "A,D" }, { OFFA, "A,E" }, { OFFA, "A,H" }, { OFFA, "A,L" },
+ { ADC, "A,V" }, { ADC, "A,A" }, { ADC, "A,B" }, { ADC, "A,C" },
+ { ADC, "A,D" }, { ADC, "A,E" }, { ADC, "A,H" }, { ADC, "A,L" },
+ { OFFA, "A,V" }, { OFFA, "A,A" }, { OFFA, "A,B" }, { OFFA, "A,C" },
+ { OFFA, "A,D" }, { OFFA, "A,E" }, { OFFA, "A,H" }, { OFFA, "A,L" },
- { SUB, "A,V" }, { SUB, "A,A" }, { SUB, "A,B" }, { SUB, "A,C" },
- { SUB, "A,D" }, { SUB, "A,E" }, { SUB, "A,H" }, { SUB, "A,L" },
- { NEA, "A,V" }, { NEA, "A,A" }, { NEA, "A,B" }, { NEA, "A,C" },
- { NEA, "A,D" }, { NEA, "A,E" }, { NEA, "A,H" }, { NEA, "A,L" },
+ { SUB, "A,V" }, { SUB, "A,A" }, { SUB, "A,B" }, { SUB, "A,C" },
+ { SUB, "A,D" }, { SUB, "A,E" }, { SUB, "A,H" }, { SUB, "A,L" },
+ { NEA, "A,V" }, { NEA, "A,A" }, { NEA, "A,B" }, { NEA, "A,C" },
+ { NEA, "A,D" }, { NEA, "A,E" }, { NEA, "A,H" }, { NEA, "A,L" },
- { SBB, "A,V" }, { SBB, "A,A" }, { SBB, "A,B" }, { SBB, "A,C" },
- { SBB, "A,D" }, { SBB, "A,E" }, { SBB, "A,H" }, { SBB, "A,L" },
- { EQA, "A,V" }, { EQA, "A,A" }, { EQA, "A,B" }, { EQA, "A,C" },
- { EQA, "A,D" }, { EQA, "A,E" }, { EQA, "A,H" }, { EQA, "A,L" }
+ { SBB, "A,V" }, { SBB, "A,A" }, { SBB, "A,B" }, { SBB, "A,C" },
+ { SBB, "A,D" }, { SBB, "A,E" }, { SBB, "A,H" }, { SBB, "A,L" },
+ { EQA, "A,V" }, { EQA, "A,A" }, { EQA, "A,B" }, { EQA, "A,C" },
+ { EQA, "A,D" }, { EQA, "A,E" }, { EQA, "A,H" }, { EQA, "A,L" }
};
-static const struct dasm_s dasm64_7801[256] = {
- /* 0x00 - 0x3F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { ANI, "V,%b" }, { ANI, "A,%b" }, { ANI, "B,%b" }, { ANI, "C,%b" },
- { ANI, "D,%b" }, { ANI, "E,%b" }, { ANI, "H,%b" }, { ANI, "L,%b" },
+const dasm_s dasm_s::d64_7801[256] = {
+ // 0x00 - 0x3F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { ANI, "V,%b" }, { ANI, "A,%b" }, { ANI, "B,%b" }, { ANI, "C,%b" },
+ { ANI, "D,%b" }, { ANI, "E,%b" }, { ANI, "H,%b" }, { ANI, "L,%b" },
- { XRI, "V,%b" }, { XRI, "A,%b" }, { XRI, "B,%b" }, { XRI, "C,%b" },
- { XRI, "D,%b" }, { XRI, "E,%b" }, { XRI, "H,%b" }, { XRI, "L,%b" },
- { ORI, "V,%b" }, { ORI, "A,%b" }, { ORI, "B,%b" }, { ORI, "C,%b" },
- { ORI, "D,%b" }, { ORI, "E,%b" }, { ORI, "H,%b" }, { ORI, "L,%b" },
+ { XRI, "V,%b" }, { XRI, "A,%b" }, { XRI, "B,%b" }, { XRI, "C,%b" },
+ { XRI, "D,%b" }, { XRI, "E,%b" }, { XRI, "H,%b" }, { XRI, "L,%b" },
+ { ORI, "V,%b" }, { ORI, "A,%b" }, { ORI, "B,%b" }, { ORI, "C,%b" },
+ { ORI, "D,%b" }, { ORI, "E,%b" }, { ORI, "H,%b" }, { ORI, "L,%b" },
- { ADINC, "V,%b" }, { ADINC, "A,%b" }, { ADINC, "B,%b" }, { ADINC, "C,%b" },
- { ADINC, "D,%b" }, { ADINC, "E,%b" }, { ADINC, "H,%b" }, { ADINC, "L,%b" },
- { GTI, "V,%b" }, { GTI, "A,%b" }, { GTI, "B,%b" }, { GTI, "C,%b" },
- { GTI, "D,%b" }, { GTI, "E,%b" }, { GTI, "H,%b" }, { GTI, "L,%b" },
+ { ADINC, "V,%b" }, { ADINC, "A,%b" }, { ADINC, "B,%b" }, { ADINC, "C,%b" },
+ { ADINC, "D,%b" }, { ADINC, "E,%b" }, { ADINC, "H,%b" }, { ADINC, "L,%b" },
+ { GTI, "V,%b" }, { GTI, "A,%b" }, { GTI, "B,%b" }, { GTI, "C,%b" },
+ { GTI, "D,%b" }, { GTI, "E,%b" }, { GTI, "H,%b" }, { GTI, "L,%b" },
- { SUINB, "V,%b" }, { SUINB, "A,%b" }, { SUINB, "B,%b" }, { SUINB, "C,%b" },
- { SUINB, "D,%b" }, { SUINB, "E,%b" }, { SUINB, "H,%b" }, { SUINB, "L,%b" },
- { LTI, "V,%b" }, { LTI, "A,%b" }, { LTI, "B,%b" }, { LTI, "C,%b" },
- { LTI, "D,%b" }, { LTI, "E,%b" }, { LTI, "H,%b" }, { LTI, "L,%b" },
+ { SUINB, "V,%b" }, { SUINB, "A,%b" }, { SUINB, "B,%b" }, { SUINB, "C,%b" },
+ { SUINB, "D,%b" }, { SUINB, "E,%b" }, { SUINB, "H,%b" }, { SUINB, "L,%b" },
+ { LTI, "V,%b" }, { LTI, "A,%b" }, { LTI, "B,%b" }, { LTI, "C,%b" },
+ { LTI, "D,%b" }, { LTI, "E,%b" }, { LTI, "H,%b" }, { LTI, "L,%b" },
- /* 0x40 - 0x7F */
- { ADI, "V,%b" }, { ADI, "A,%b" }, { ADI, "B,%b" }, { ADI, "C,%b" },
- { ADI, "D,%b" }, { ADI, "E,%b" }, { ADI, "H,%b" }, { ADI, "L,%b" },
- { ONI, "V,%b" }, { ONI, "A,%b" }, { ONI, "B,%b" }, { ONI, "C,%b" },
- { ONI, "D,%b" }, { ONI, "E,%b" }, { ONI, "H,%b" }, { ONI, "L,%b" },
+ // 0x40 - 0x7F
+ { ADI, "V,%b" }, { ADI, "A,%b" }, { ADI, "B,%b" }, { ADI, "C,%b" },
+ { ADI, "D,%b" }, { ADI, "E,%b" }, { ADI, "H,%b" }, { ADI, "L,%b" },
+ { ONI, "V,%b" }, { ONI, "A,%b" }, { ONI, "B,%b" }, { ONI, "C,%b" },
+ { ONI, "D,%b" }, { ONI, "E,%b" }, { ONI, "H,%b" }, { ONI, "L,%b" },
- { ACI, "V,%b" }, { ACI, "A,%b" }, { ACI, "B,%b" }, { ACI, "C,%b" },
- { ACI, "D,%b" }, { ACI, "E,%b" }, { ACI, "H,%b" }, { ACI, "L,%b" },
- { OFFI, "V,%b" }, { OFFI, "A,%b" }, { OFFI, "B,%b" }, { OFFI, "C,%b" },
- { OFFI, "D,%b" }, { OFFI, "E,%b" }, { OFFI, "H,%b" }, { OFFI, "L,%b" },
+ { ACI, "V,%b" }, { ACI, "A,%b" }, { ACI, "B,%b" }, { ACI, "C,%b" },
+ { ACI, "D,%b" }, { ACI, "E,%b" }, { ACI, "H,%b" }, { ACI, "L,%b" },
+ { OFFI, "V,%b" }, { OFFI, "A,%b" }, { OFFI, "B,%b" }, { OFFI, "C,%b" },
+ { OFFI, "D,%b" }, { OFFI, "E,%b" }, { OFFI, "H,%b" }, { OFFI, "L,%b" },
- { SUI, "V,%b" }, { SUI, "A,%b" }, { SUI, "B,%b" }, { SUI, "C,%b" },
- { SUI, "D,%b" }, { SUI, "E,%b" }, { SUI, "H,%b" }, { SUI, "L,%b" },
- { NEI, "V,%b" }, { NEI, "A,%b" }, { NEI, "B,%b" }, { NEI, "C,%b" },
- { NEI, "D,%b" }, { NEI, "E,%b" }, { NEI, "H,%b" }, { NEI, "L,%b" },
+ { SUI, "V,%b" }, { SUI, "A,%b" }, { SUI, "B,%b" }, { SUI, "C,%b" },
+ { SUI, "D,%b" }, { SUI, "E,%b" }, { SUI, "H,%b" }, { SUI, "L,%b" },
+ { NEI, "V,%b" }, { NEI, "A,%b" }, { NEI, "B,%b" }, { NEI, "C,%b" },
+ { NEI, "D,%b" }, { NEI, "E,%b" }, { NEI, "H,%b" }, { NEI, "L,%b" },
- { SBI, "V,%b" }, { SBI, "A,%b" }, { SBI, "B,%b" }, { SBI, "C,%b" },
- { SBI, "D,%b" }, { SBI, "E,%b" }, { SBI, "H,%b" }, { SBI, "L,%b" },
- { EQI, "V,%b" }, { EQI, "A,%b" }, { EQI, "B,%b" }, { EQI, "C,%b" },
- { EQI, "D,%b" }, { EQI, "E,%b" }, { EQI, "H,%b" }, { EQI, "L,%b" },
+ { SBI, "V,%b" }, { SBI, "A,%b" }, { SBI, "B,%b" }, { SBI, "C,%b" },
+ { SBI, "D,%b" }, { SBI, "E,%b" }, { SBI, "H,%b" }, { SBI, "L,%b" },
+ { EQI, "V,%b" }, { EQI, "A,%b" }, { EQI, "B,%b" }, { EQI, "C,%b" },
+ { EQI, "D,%b" }, { EQI, "E,%b" }, { EQI, "H,%b" }, { EQI, "L,%b" },
- /* 0x80 - 0xBF */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { ANI, "PA,%b" }, { ANI, "PB,%b" }, { ANI, "PC,%b" }, { ANI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x80 - 0xBF
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { ANI, "PA,%b" }, { ANI, "PB,%b" }, { ANI, "PC,%b" }, { ANI, "MK,%b" },
+ { }, { }, { }, { },
- { XRI, "PA,%b" }, { XRI, "PB,%b" }, { XRI, "PC,%b" }, { XRI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { ORI, "PA,%b" }, { ORI, "PB,%b" }, { ORI, "PC,%b" }, { ORI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { XRI, "PA,%b" }, { XRI, "PB,%b" }, { XRI, "PC,%b" }, { XRI, "MK,%b" },
+ { }, { }, { }, { },
+ { ORI, "PA,%b" }, { ORI, "PB,%b" }, { ORI, "PC,%b" }, { ORI, "MK,%b" },
+ { }, { }, { }, { },
- { ADINC, "PA,%b" }, { ADINC, "PB,%b" }, { ADINC, "PC,%b" }, { ADINC, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { GTI, "PA,%b" }, { GTI, "PB,%b" }, { GTI, "PC,%b" }, { GTI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { ADINC, "PA,%b" }, { ADINC, "PB,%b" }, { ADINC, "PC,%b" }, { ADINC, "MK,%b" },
+ { }, { }, { }, { },
+ { GTI, "PA,%b" }, { GTI, "PB,%b" }, { GTI, "PC,%b" }, { GTI, "MK,%b" },
+ { }, { }, { }, { },
- { SUINB, "PA,%b" }, { SUINB, "PB,%b" }, { SUINB, "PC,%b" }, { SUINB, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { LTI, "PA,%b" }, { LTI, "PB,%b" }, { LTI, "PC,%b" }, { LTI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { SUINB, "PA,%b" }, { SUINB, "PB,%b" }, { SUINB, "PC,%b" }, { SUINB, "MK,%b" },
+ { }, { }, { }, { },
+ { LTI, "PA,%b" }, { LTI, "PB,%b" }, { LTI, "PC,%b" }, { LTI, "MK,%b" },
+ { }, { }, { }, { },
- /* 0xC0 - 0xFF */
- { ADI, "PA,%b" }, { ADI, "PB,%b" }, { ADI, "PC,%b" }, { ADI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { ONI, "PA,%b" }, { ONI, "PB,%b" }, { ONI, "PC,%b" }, { ONI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0xC0 - 0xFF
+ { ADI, "PA,%b" }, { ADI, "PB,%b" }, { ADI, "PC,%b" }, { ADI, "MK,%b" },
+ { }, { }, { }, { },
+ { ONI, "PA,%b" }, { ONI, "PB,%b" }, { ONI, "PC,%b" }, { ONI, "MK,%b" },
+ { }, { }, { }, { },
- { ACI, "PA,%b" }, { ACI, "PB,%b" }, { ACI, "PC,%b" }, { ACI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { OFFI, "PA,%b" }, { OFFI, "PB,%b" }, { OFFI, "PC,%b" }, { OFFI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { ACI, "PA,%b" }, { ACI, "PB,%b" }, { ACI, "PC,%b" }, { ACI, "MK,%b" },
+ { }, { }, { }, { },
+ { OFFI, "PA,%b" }, { OFFI, "PB,%b" }, { OFFI, "PC,%b" }, { OFFI, "MK,%b" },
+ { }, { }, { }, { },
- { SUI, "PA,%b" }, { SUI, "PB,%b" }, { SUI, "PC,%b" }, { SUI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { NEI, "PA,%b" }, { NEI, "PB,%b" }, { NEI, "PC,%b" }, { NEI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { SUI, "PA,%b" }, { SUI, "PB,%b" }, { SUI, "PC,%b" }, { SUI, "MK,%b" },
+ { }, { }, { }, { },
+ { NEI, "PA,%b" }, { NEI, "PB,%b" }, { NEI, "PC,%b" }, { NEI, "MK,%b" },
+ { }, { }, { }, { },
- { SBI, "PA,%b" }, { SBI, "PB,%b" }, { SBI, "PC,%b" }, { SBI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { EQI, "PA,%b" }, { EQI, "PB,%b" }, { EQI, "PC,%b" }, { EQI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }
+ { SBI, "PA,%b" }, { SBI, "PB,%b" }, { SBI, "PC,%b" }, { SBI, "MK,%b" },
+ { }, { }, { }, { },
+ { EQI, "PA,%b" }, { EQI, "PB,%b" }, { EQI, "PC,%b" }, { EQI, "MK,%b" },
+ { }, { }, { }, { }
};
-static const struct dasm_s dasm70_7801[256] = {
- /* 0x00 - 0x3F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { SSPD, "%w" }, { LSPD, "%w" },
+const dasm_s dasm_s::d70_7801[256] = {
+ // 0x00 - 0x3F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { SSPD, "%w" }, { LSPD, "%w" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { SBCD, "%w" }, { LBCD, "%w" },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { SBCD, "%w" }, { LBCD, "%w" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { SDED, "%w" }, { LDED, "%w" },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { SDED, "%w" }, { LDED, "%w" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { SHLD, "%w" }, { LHLD, "%w" },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { SHLD, "%w" }, { LHLD, "%w" },
- /* 0x40 - 0x7F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x40 - 0x7F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { MOV, "V,%w" }, { MOV, "A,%w" }, { MOV, "B,%w" }, { MOV, "C,%w" },
- { MOV, "D,%w" }, { MOV, "E,%w" }, { MOV, "H,%w" }, { MOV, "L,%w" },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { MOV, "V,%w" }, { MOV, "A,%w" }, { MOV, "B,%w" }, { MOV, "C,%w" },
+ { MOV, "D,%w" }, { MOV, "E,%w" }, { MOV, "H,%w" }, { MOV, "L,%w" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { MOV, "%w,V" }, { MOV, "%w,A" }, { MOV, "%w,B" }, { MOV, "%w,C" },
- { MOV, "%w,D" }, { MOV, "%w,E" }, { MOV, "%w,H" }, { MOV, "%w,L" },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { MOV, "%w,V" }, { MOV, "%w,A" }, { MOV, "%w,B" }, { MOV, "%w,C" },
+ { MOV, "%w,D" }, { MOV, "%w,E" }, { MOV, "%w,H" }, { MOV, "%w,L" },
- /* 0x80 - 0xBF */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { ANAX, "BC" }, { ANAX, "DE" }, { ANAX, "HL" },
- { ANAX, "DE+" }, { ANAX, "HL+" }, { ANAX, "DE-" }, { ANAX, "HL-" },
+ // 0x80 - 0xBF
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { ANAX, "BC" }, { ANAX, "DE" }, { ANAX, "HL" },
+ { ANAX, "DE+" }, { ANAX, "HL+" }, { ANAX, "DE-" }, { ANAX, "HL-" },
- { illegal, nullptr }, { XRAX, "BC" }, { XRAX, "DE" }, { XRAX, "HL" },
- { XRAX, "DE+" }, { XRAX, "HL+" }, { XRAX, "DE-" }, { XRAX, "HL-" },
- { illegal, nullptr }, { ORAX, "BC" }, { ORAX, "DE" }, { ORAX, "HL" },
- { ORAX, "DE+" }, { ORAX, "HL+" }, { ORAX, "DE-" }, { ORAX, "HL-" },
+ { }, { XRAX, "BC" }, { XRAX, "DE" }, { XRAX, "HL" },
+ { XRAX, "DE+" }, { XRAX, "HL+" }, { XRAX, "DE-" }, { XRAX, "HL-" },
+ { }, { ORAX, "BC" }, { ORAX, "DE" }, { ORAX, "HL" },
+ { ORAX, "DE+" }, { ORAX, "HL+" }, { ORAX, "DE-" }, { ORAX, "HL-" },
- { illegal, nullptr }, { ADDNCX, "BC" }, { ADDNCX, "DE" }, { ADDNCX, "HL" },
- { ADDNCX, "DE+" }, { ADDNCX, "HL+" }, { ADDNCX, "DE-" }, { ADDNCX, "HL-" },
- { illegal, nullptr }, { GTAX, "BC" }, { GTAX, "DE" }, { GTAX, "HL" },
- { GTAX, "DE+" }, { GTAX, "HL+" }, { GTAX, "DE-" }, { GTAX, "HL-" },
+ { }, { ADDNCX, "BC" }, { ADDNCX, "DE" }, { ADDNCX, "HL" },
+ { ADDNCX, "DE+" }, { ADDNCX, "HL+" }, { ADDNCX, "DE-" }, { ADDNCX, "HL-" },
+ { }, { GTAX, "BC" }, { GTAX, "DE" }, { GTAX, "HL" },
+ { GTAX, "DE+" }, { GTAX, "HL+" }, { GTAX, "DE-" }, { GTAX, "HL-" },
- { illegal, nullptr }, { SUBNBX, "BC" }, { SUBNBX, "DE" }, { SUBNBX, "HL" },
- { SUBNBX, "DE+" }, { SUBNBX, "HL+" }, { SUBNBX, }, { SUBNBX, "HL-" },
- { illegal, nullptr }, { LTAX, "BC" }, { LTAX, "DE" }, { LTAX, "HL" },
- { LTAX, "DE+" }, { LTAX, "HL+" }, { LTAX, "DE-" }, { LTAX, "HL-" },
+ { }, { SUBNBX, "BC" }, { SUBNBX, "DE" }, { SUBNBX, "HL" },
+ { SUBNBX, "DE+" }, { SUBNBX, "HL+" }, { SUBNBX, "DE-" }, { SUBNBX, "HL-" },
+ { }, { LTAX, "BC" }, { LTAX, "DE" }, { LTAX, "HL" },
+ { LTAX, "DE+" }, { LTAX, "HL+" }, { LTAX, "DE-" }, { LTAX, "HL-" },
- /* 0xC0 - 0xFF */
- { illegal, nullptr }, { ADDX, "BC" }, { ADDX, "DE" }, { ADDX, "HL" },
- { ADDX, "DE+" }, { ADDX, "HL+" }, { ADDX, "DE-" }, { ADDX, "HL-" },
- { illegal, nullptr }, { ONAX, "BC" }, { ONAX, "DE" }, { ONAX, "HL" },
- { ONAX, "DE+" }, { ONAX, "HL+" }, { ONAX, "DE-" }, { ONAX, "HL-" },
+ // 0xC0 - 0xFF
+ { }, { ADDX, "BC" }, { ADDX, "DE" }, { ADDX, "HL" },
+ { ADDX, "DE+" }, { ADDX, "HL+" }, { ADDX, "DE-" }, { ADDX, "HL-" },
+ { }, { ONAX, "BC" }, { ONAX, "DE" }, { ONAX, "HL" },
+ { ONAX, "DE+" }, { ONAX, "HL+" }, { ONAX, "DE-" }, { ONAX, "HL-" },
- { illegal, nullptr }, { ADCX, "BC" }, { ADCX, "DE" }, { ADCX, "HL" },
- { ADCX, "DE+" }, { ADCX, "HL+" }, { ADCX, "DE-" }, { ADCX, "HL-" },
- { illegal, nullptr }, { OFFAX, "BC" }, { OFFAX, "DE" }, { OFFAX, "HL" },
- { OFFAX, "DE+" }, { OFFAX, "HL+" }, { OFFAX, "DE-" }, { OFFAX, "HL-" },
+ { }, { ADCX, "BC" }, { ADCX, "DE" }, { ADCX, "HL" },
+ { ADCX, "DE+" }, { ADCX, "HL+" }, { ADCX, "DE-" }, { ADCX, "HL-" },
+ { }, { OFFAX, "BC" }, { OFFAX, "DE" }, { OFFAX, "HL" },
+ { OFFAX, "DE+" }, { OFFAX, "HL+" }, { OFFAX, "DE-" }, { OFFAX, "HL-" },
- { illegal, nullptr }, { SUBX, "BC" }, { SUBX, "DE" }, { SUBX, "HL" },
- { SUBX, "DE+" }, { SUBX, "HL+" }, { SUBX, "DE-" }, { SUBX, "HL-" },
- { illegal, nullptr }, { NEAX, "BC" }, { NEAX, "DE" }, { NEAX, "HL" },
- { NEAX, "DE+" }, { NEAX, "HL+" }, { NEAX, "DE-" }, { NEAX, "HL-" },
+ { }, { SUBX, "BC" }, { SUBX, "DE" }, { SUBX, "HL" },
+ { SUBX, "DE+" }, { SUBX, "HL+" }, { SUBX, "DE-" }, { SUBX, "HL-" },
+ { }, { NEAX, "BC" }, { NEAX, "DE" }, { NEAX, "HL" },
+ { NEAX, "DE+" }, { NEAX, "HL+" }, { NEAX, "DE-" }, { NEAX, "HL-" },
- { illegal, nullptr }, { SBBX, "BC" }, { SBBX, "DE" }, { SBBX, "HL" },
- { SBBX, "DE+" }, { SBBX, "HL+" }, { SBBX, "DE-" }, { SBBX, "HL-" },
- { illegal, nullptr }, { EQAX, "BC" }, { EQAX, "DE" }, { EQAX, "HL" },
- { EQAX, "DE+" }, { EQAX, "HL+" }, { EQAX, "DE-" }, { EQAX, "HL-" },
+ { }, { SBBX, "BC" }, { SBBX, "DE" }, { SBBX, "HL" },
+ { SBBX, "DE+" }, { SBBX, "HL+" }, { SBBX, "DE-" }, { SBBX, "HL-" },
+ { }, { EQAX, "BC" }, { EQAX, "DE" }, { EQAX, "HL" },
+ { EQAX, "DE+" }, { EQAX, "HL+" }, { EQAX, "DE-" }, { EQAX, "HL-" },
};
-static const struct dasm_s dasm74_7801[256] = {
- /* 0x00 - 0x3F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+const dasm_s dasm_s::d74_7801[256] = {
+ // 0x00 - 0x3F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- /* 0x40 - 0x7F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x40 - 0x7F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- /* 0x80 - 0xBF */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { ANAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x80 - 0xBF
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { ANAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
- { XRAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { ORAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { XRAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
+ { ORAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
- { ADDNCW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { GTAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { ADDNCW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
+ { GTAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
- { SUBNBW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { LTAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { SUBNBW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
+ { LTAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
- /* 0xC0 - 0xFF */
- { ADDW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { ONAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0xC0 - 0xFF
+ { ADDW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
+ { ONAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
- { ADCW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { OFFAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { ADCW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
+ { OFFAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
- { SUBW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { NEAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { SUBW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
+ { NEAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
- { SBBW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { EQAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }
+ { SBBW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
+ { EQAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { }
};
-static const struct dasm_s dasmXX_7801[256] = {
- /* 0x00 - 0x3F */
- { NOP, nullptr }, { HALT, nullptr }, { INX, "SP" }, { DCX, "SP" },
- { LXI, "SP,%w" }, { ANIW, "%a,%b" }, { illegal, nullptr }, { ANI, "A,%b" },
- { RET, nullptr }, { SIO, nullptr }, { MOV, "A,B" }, { MOV, "A,C" },
- { MOV, "A,D" }, { MOV, "A,E" }, { MOV, "A,H" }, { MOV, "A,L" },
+const dasm_s dasm_s::XX_7801[256] = {
+ // 0x00 - 0x3F
+ { NOP, nullptr }, { HALT, nullptr }, { INX, "SP" }, { DCX, "SP" },
+ { LXI, "SP,%w" }, { ANIW, "%a,%b" }, { }, { ANI, "A,%b" },
+ { RET, nullptr }, { SIO, nullptr }, { MOV, "A,B" }, { MOV, "A,C" },
+ { MOV, "A,D" }, { MOV, "A,E" }, { MOV, "A,H" }, { MOV, "A,L" },
- { EX, nullptr }, { EXX, nullptr }, { INX, "BC" }, { DCX, "BC" },
- { LXI, "BC,%w" }, { ORIW, "%a,%b" }, { XRI, "A,%b" }, { ORI, "A,%b" },
- { RETS, nullptr }, { STM, nullptr }, { MOV, "B,A" }, { MOV, "C,A" },
- { MOV, "D,A" }, { MOV, "E,A" }, { MOV, "H,A" }, { MOV, "L,A" },
+ { EX, nullptr }, { EXX, nullptr }, { INX, "BC" }, { DCX, "BC" },
+ { LXI, "BC,%w" }, { ORIW, "%a,%b" }, { XRI, "A,%b" }, { ORI, "A,%b" },
+ { RETS, nullptr }, { STM, nullptr }, { MOV, "B,A" }, { MOV, "C,A" },
+ { MOV, "D,A" }, { MOV, "E,A" }, { MOV, "H,A" }, { MOV, "L,A" },
- { INRW, "%a" }, { TABLE, nullptr }, { INX, "DE" }, { DCX, "DE" },
- { LXI, "DE,%w" }, { GTIW, "%a,%b" }, { ADINC, "A,%b" }, { GTI, "A,%b" },
- { LDAW, "%a" }, { LDAX, "BC" }, { LDAX, "DE" }, { LDAX, "HL" },
- { LDAX, "DE+" }, { LDAX, "HL+" }, { LDAX, "DE-" }, { LDAX, "HL-" },
+ { INRW, "%a" }, { TABLE, nullptr }, { INX, "DE" }, { DCX, "DE" },
+ { LXI, "DE,%w" }, { GTIW, "%a,%b" }, { ADINC, "A,%b" }, { GTI, "A,%b" },
+ { LDAW, "%a" }, { LDAX, "BC" }, { LDAX, "DE" }, { LDAX, "HL" },
+ { LDAX, "DE+" }, { LDAX, "HL+" }, { LDAX, "DE-" }, { LDAX, "HL-" },
- { DCRW, "%a" }, { BLOCK, nullptr }, { INX, "HL" }, { DCX, "HL" },
- { LXI, "HL,%w" }, { LTIW, "%a,%b" }, { SUINB, "A,%b" }, { LTI, "A,%b" },
- { STAW, "%a" }, { STAX, "BC" }, { STAX, "DE" }, { STAX, "HL" },
- { STAX, "DE+" }, { STAX, "HL+" }, { STAX, "DE-" }, { STAX, "HL-" },
+ { DCRW, "%a" }, { BLOCK, nullptr }, { INX, "HL" }, { DCX, "HL" },
+ { LXI, "HL,%w" }, { LTIW, "%a,%b" }, { SUINB, "A,%b" }, { LTI, "A,%b" },
+ { STAW, "%a" }, { STAX, "BC" }, { STAX, "DE" }, { STAX, "HL" },
+ { STAX, "DE+" }, { STAX, "HL+" }, { STAX, "DE-" }, { STAX, "HL-" },
- /* 0x40 - 0x7F */
- { illegal, nullptr }, { INR, "A" }, { INR, "B" }, { INR, "C" },
- { CALL, "%w" }, { ONIW, "%a,%b" }, { ADI, "A,%b" }, { ONI, "A,%b" },
- { 0, dasm48_7801 }, { MVIX, "BC,%b" }, { MVIX, "DE,%b" }, { MVIX, "HL,%b" },
- { 0, dasm4c_7801 }, { 0, dasm4d_7801 }, { JRE, "%d" }, { JRE, "%d" },
+ // 0x40 - 0x7F
+ { }, { INR, "A" }, { INR, "B" }, { INR, "C" },
+ { CALL, "%w" }, { ONIW, "%a,%b" }, { ADI, "A,%b" }, { ONI, "A,%b" },
+ { d48_7801 }, { MVIX, "BC,%b" }, { MVIX, "DE,%b" }, { MVIX, "HL,%b" },
+ { d4C_7801 }, { d4D_7801 }, { JRE, "%d" }, { JRE, "%d" },
- { illegal, nullptr }, { DCR, "A" }, { DCR, "B" }, { DCR, "C" },
- { JMP, "%w" }, { OFFIW, "%a,%b" }, { ACI, "A,%b" }, { OFFI, "A,%b" },
- { BIT, "0,%a" }, { BIT, "1,%a" }, { BIT," 2,%a" }, { BIT, "3,%a" },
- { BIT, "4,%a" }, { BIT, "5,%a" }, { BIT, "6,%a" }, { BIT, "7,%a" },
+ { }, { DCR, "A" }, { DCR, "B" }, { DCR, "C" },
+ { JMP, "%w" }, { OFFIW, "%a,%b" }, { ACI, "A,%b" }, { OFFI, "A,%b" },
+ { BIT, "0,%a" }, { BIT, "1,%a" }, { BIT, " 2,%a" }, { BIT, "3,%a" },
+ { BIT, "4,%a" }, { BIT, "5,%a" }, { BIT, "6,%a" }, { BIT, "7,%a" },
- { 0, dasm60_7801 }, { DAA, nullptr }, { RETI, nullptr }, { CALB, nullptr },
- { 0, dasm64_7801 }, { NEIW, "%a,%b" }, { SUI, "A,%b" }, { NEI, "A,%b" },
- { MVI, "V,%b" }, { MVI, "A,%b" }, { MVI, "B,%b" }, { MVI, "C,%b" },
- { MVI, "D,%b" }, { MVI, "E,%b" }, { MVI, "H,%b" }, { MVI, "L,%b" },
+ { d60_7801 }, { DAA, nullptr }, { RETI, nullptr }, { CALB, nullptr },
+ { d64_7801 }, { NEIW, "%a,%b" }, { SUI, "A,%b" }, { NEI, "A,%b" },
+ { MVI, "V,%b" }, { MVI, "A,%b" }, { MVI, "B,%b" }, { MVI, "C,%b" },
+ { MVI, "D,%b" }, { MVI, "E,%b" }, { MVI, "H,%b" }, { MVI, "L,%b" },
- { 0, dasm70_7801 }, { MVIW, "%a,%b" }, { SOFTI, nullptr }, { JB, nullptr },
- { 0, dasm74_7801 }, { EQIW, "%a,%b" }, { SBI, "A,%b" }, { EQI, "A,%b" },
- { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" },
- { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" },
+ { d70_7801 }, { MVIW, "%a,%b" }, { SOFTI, nullptr }, { JB, nullptr },
+ { d74_7801 }, { EQIW, "%a,%b" }, { SBI, "A,%b" }, { EQI, "A,%b" },
+ { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" },
+ { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" },
- /* 0x80 - 0xBF */
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ // 0x80 - 0xBF
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
/* 0xC0 - 0xFF */
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }
};
/*********************************************************
*
- * uPD7801
+ * uPD78C05
*
*********************************************************/
-static const struct dasm_s dasm48_78c05[256] = {
- /* 0x00 - 0x3F */
- { SKIT, "F0" }, { SKIT, "FT" }, { SKIT, "F1" }, { illegal, nullptr }, /* TODO: PDF doesn't mention SKIT and SK */
- { SKIT, "FS" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { SK, "CY" }, { illegal, nullptr },
- { SK, "Z" }, { illegal, nullptr }, { PUSH, "VA" }, { POP, "VA" },
+const dasm_s dasm_s::d48_78c05[256] = {
+ // 0x00 - 0x3F
+ { SKIT, "F0" }, { SKIT, "FT" }, { SKIT, "F1" }, { }, // TODO: PDF doesn't mention SKIT and SK
+ { SKIT, "FS" }, { }, { }, { },
+ { }, { }, { SK, "CY" }, { },
+ { SK, "Z" }, { }, { PUSH, "VA" }, { POP, "VA" },
- { SKNIT, "F0" }, { SKNIT, "FT" }, { SKNIT, "F1" }, { illegal, nullptr },
- { SKNIT, "FS" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { SKN, "CY" }, { illegal, nullptr },
- { SKN, "Z" }, { illegal, nullptr }, { PUSH, "BC" }, { POP, "BC" },
+ { SKNIT, "F0" }, { SKNIT, "FT" }, { SKNIT, "F1" }, { },
+ { SKNIT, "FS" }, { }, { }, { },
+ { }, { }, { SKN, "CY" }, { },
+ { SKN, "Z" }, { }, { PUSH, "BC" }, { POP, "BC" },
- { EI, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { DI, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { CLC, nullptr }, { STC, nullptr },
- { illegal, nullptr }, { PEX, nullptr }, { PUSH, "DE" }, { POP, "DE" },
+ { EI, nullptr }, { }, { }, { },
+ { DI, nullptr }, { }, { }, { },
+ { }, { }, { CLC, nullptr }, { STC, nullptr },
+ { }, { PEX, nullptr }, { PUSH, "DE" }, { POP, "DE" },
- { RLL, "A" }, { RLR, "A" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { RLD, nullptr }, { RRD, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { PER, nullptr }, { illegal, nullptr }, { PUSH, "HL" }, { POP, "HL" },
+ { RLL, "A" }, { RLR, "A" }, { }, { },
+ { }, { }, { }, { },
+ { RLD, nullptr }, { RRD, nullptr }, { }, { },
+ { PER, nullptr }, { }, { PUSH, "HL" }, { POP, "HL" },
- /* 0x40 - 0x7F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x40 - 0x7F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- /* 0x80 - 0xBF */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x80 - 0xBF
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- /* 0xC0 - 0xFF */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0xC0 - 0xFF
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { }
};
-static const struct dasm_s dasm4c_78c05[256] = {
- /* 0x00 - 0x3F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+const dasm_s dasm_s::d4C_78c05[256] = {
+ // 0x00 - 0x3F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- /* 0x40 - 0x7F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x40 - 0x7F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- /* 0x80 - 0xBF */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x80 - 0xBF
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- /* 0xC0 - 0xFF */
- { MOV, "A,PA" }, { MOV, "A,PB" }, { MOV, "A,PC" }, { MOV, "A,MK" },
- { MOV, "A,MB" }, { MOV, "A,MC" }, { MOV, "A,TM0" }, { MOV, "A,TM1" },
- { MOV, "A,S" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, /* TODO: Figure out what regsiter C9 indicates */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0xC0 - 0xFF
+ { MOV, "A,PA" }, { MOV, "A,PB" }, { MOV, "A,PC" }, { MOV, "A,MK" },
+ { MOV, "A,MB" }, { MOV, "A,MC" }, { MOV, "A,TM0" }, { MOV, "A,TM1" },
+ { MOV, "A,S" }, { }, { }, { }, // TODO: Figure out what regsiter C9 indicates
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { }
};
-static const struct dasm_s dasm4d_78c05[256] = {
- /* 0x00 - 0x3F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+const dasm_s dasm_s::d4D_78c05[256] = {
+ // 0x00 - 0x3F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- /* 0x40 - 0x7F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x40 - 0x7F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- /* 0x80 - 0xBF */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x80 - 0xBF
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- /* 0xC0 - 0xFF */
- { MOV, "PA,A" }, { MOV, "PB,A" }, { MOV, "PC,A" }, { MOV, "MK,A" },
- { MOV, "MB,A" }, { MOV, "MC,A" }, { MOV, "TM0,A" }, { MOV, "TM1,A" },
- { MOV, "S,A" }, { MOV, "TMM,A" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0xC0 - 0xFF
+ { MOV, "PA,A" }, { MOV, "PB,A" }, { MOV, "PC,A" }, { MOV, "MK,A" },
+ { MOV, "MB,A" }, { MOV, "MC,A" }, { MOV, "TM0,A" }, { MOV, "TM1,A" },
+ { MOV, "S,A" }, { MOV, "TMM,A" }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { }
};
-static const struct dasm_s dasm60_78c05[256] = {
- /* 0x00 - 0x3F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { ANA, "A,A" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+const dasm_s dasm_s::d60_78c05[256] = {
+ // 0x00 - 0x3F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { ANA, "A,A" }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { XRA, "A,A" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { ORA, "A,A" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { XRA, "A,A" }, { }, { },
+ { }, { }, { }, { },
+ { }, { ORA, "A,A" }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { ADDNC, "A,A" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { GTA, "A,A" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { ADDNC, "A,A" }, { }, { },
+ { }, { }, { }, { },
+ { }, { GTA, "A,A" }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { SUBNB, "A,A" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { LTA, "A,A" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { SUBNB, "A,A" }, { }, { },
+ { }, { }, { }, { },
+ { }, { LTA, "A,A" }, { }, { },
+ { }, { }, { }, { },
- /* 0x40 - 0x7F */
- { illegal, nullptr }, { ADD, "A,A" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x40 - 0x7F
+ { }, { ADD, "A,A" }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { ADC, "A,A" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { ADC, "A,A" }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { SUB, "A,A" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { NEA, "A,A" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { SUB, "A,A" }, { }, { },
+ { }, { }, { }, { },
+ { }, { NEA, "A,A" }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { SBB, "A,A" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { EQA, "A,A" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { SBB, "A,A" }, { }, { },
+ { }, { }, { }, { },
+ { }, { EQA, "A,A" }, { }, { },
+ { }, { }, { }, { },
- /* 0x80 - 0xBF */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { ANA, "A,A" }, { ANA, "A,B" }, { ANA, "A,C" },
- { ANA, "A,D" }, { ANA, "A,E" }, { ANA, "A,H" }, { ANA, "A,L" },
+ // 0x80 - 0xBF
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { ANA, "A,A" }, { ANA, "A,B" }, { ANA, "A,C" },
+ { ANA, "A,D" }, { ANA, "A,E" }, { ANA, "A,H" }, { ANA, "A,L" },
- { illegal, nullptr }, { XRA, "A,A" }, { XRA, "A,B" }, { XRA, "A,C" },
- { XRA, "A,D" }, { XRA, "A,E" }, { XRA, "A,H" }, { XRA, "A,L" },
- { illegal, nullptr }, { ORA, "A,A" }, { ORA, "A,B" }, { ORA, "A,C" },
- { ORA, "A,D" }, { ORA, "A,E" }, { ORA, "A,H" }, { ORA, "A,L" },
+ { }, { XRA, "A,A" }, { XRA, "A,B" }, { XRA, "A,C" },
+ { XRA, "A,D" }, { XRA, "A,E" }, { XRA, "A,H" }, { XRA, "A,L" },
+ { }, { ORA, "A,A" }, { ORA, "A,B" }, { ORA, "A,C" },
+ { ORA, "A,D" }, { ORA, "A,E" }, { ORA, "A,H" }, { ORA, "A,L" },
- { illegal, nullptr }, { ADDNC, "A,A" }, { ADDNC, "A,B" }, { ADDNC, "A,C" },
- { ADDNC, "A,D" }, { ADDNC, "A,E" }, { ADDNC, "A,H" }, { ADDNC, "A,L" },
- { illegal, nullptr }, { GTA, "A,A" }, { GTA, "A,B" }, { GTA, "A,C" },
- { GTA, "A,D" }, { GTA, "A,E" }, { GTA, "A,H" }, { GTA, "A,L" },
+ { }, { ADDNC, "A,A" }, { ADDNC, "A,B" }, { ADDNC, "A,C" },
+ { ADDNC, "A,D" }, { ADDNC, "A,E" }, { ADDNC, "A,H" }, { ADDNC, "A,L" },
+ { }, { GTA, "A,A" }, { GTA, "A,B" }, { GTA, "A,C" },
+ { GTA, "A,D" }, { GTA, "A,E" }, { GTA, "A,H" }, { GTA, "A,L" },
- { illegal, nullptr }, { SUBNB, "A,A" }, { SUBNB, "A,B" }, { SUBNB, "A,C" },
- { SUBNB, "A,D" }, { SUBNB, "A,E" }, { SUBNB, "A,H" }, { SUBNB, "A,L" },
- { illegal, nullptr }, { LTA, "A,A" }, { LTA, "A,B" }, { LTA, "A,C" },
- { LTA, "A,D" }, { LTA, "A,E" }, { LTA, "A,H" }, { LTA, "A,L" },
+ { }, { SUBNB, "A,A" }, { SUBNB, "A,B" }, { SUBNB, "A,C" },
+ { SUBNB, "A,D" }, { SUBNB, "A,E" }, { SUBNB, "A,H" }, { SUBNB, "A,L" },
+ { }, { LTA, "A,A" }, { LTA, "A,B" }, { LTA, "A,C" },
+ { LTA, "A,D" }, { LTA, "A,E" }, { LTA, "A,H" }, { LTA, "A,L" },
- /* 0xC0 - 0xFF */
- { illegal, nullptr }, { ADD, "A,A" }, { ADD, "A,B" }, { ADD, "A,C" },
- { ADD, "A,D" }, { ADD, "A,E" }, { ADD, "A,H" }, { ADD, "A,L" },
- { illegal, nullptr }, { ONA, "A,A" }, { ONA, "A,B" }, { ONA, "A,C" },
- { ONA, "A,D" }, { ONA, "A,E" }, { ONA, "A,H" }, { ONA, "A,L" },
+ // 0xC0 - 0xFF
+ { }, { ADD, "A,A" }, { ADD, "A,B" }, { ADD, "A,C" },
+ { ADD, "A,D" }, { ADD, "A,E" }, { ADD, "A,H" }, { ADD, "A,L" },
+ { }, { ONA, "A,A" }, { ONA, "A,B" }, { ONA, "A,C" },
+ { ONA, "A,D" }, { ONA, "A,E" }, { ONA, "A,H" }, { ONA, "A,L" },
- { illegal, nullptr }, { ADC, "A,A" }, { ADC, "A,B" }, { ADC, "A,C" },
- { ADC, "A,D" }, { ADC, "A,E" }, { ADC, "A,H" }, { ADC, "A,L" },
- { illegal, nullptr }, { OFFA, "A,A" }, { OFFA, "A,B" }, { OFFA, "A,C" },
- { OFFA, "A,D" }, { OFFA, "A,E" }, { OFFA, "A,H" }, { OFFA, "A,L" },
+ { }, { ADC, "A,A" }, { ADC, "A,B" }, { ADC, "A,C" },
+ { ADC, "A,D" }, { ADC, "A,E" }, { ADC, "A,H" }, { ADC, "A,L" },
+ { }, { OFFA, "A,A" }, { OFFA, "A,B" }, { OFFA, "A,C" },
+ { OFFA, "A,D" }, { OFFA, "A,E" }, { OFFA, "A,H" }, { OFFA, "A,L" },
- { illegal, nullptr }, { SUB, "A,A" }, { SUB, "A,B" }, { SUB, "A,C" },
- { SUB, "A,D" }, { SUB, "A,E" }, { SUB, "A,H" }, { SUB, "A,L" },
- { illegal, nullptr }, { NEA, "A,A" }, { NEA, "A,B" }, { NEA, "A,C" },
- { NEA, "A,D" }, { NEA, "A,E" }, { NEA, "A,H" }, { NEA, "A,L" },
+ { }, { SUB, "A,A" }, { SUB, "A,B" }, { SUB, "A,C" },
+ { SUB, "A,D" }, { SUB, "A,E" }, { SUB, "A,H" }, { SUB, "A,L" },
+ { }, { NEA, "A,A" }, { NEA, "A,B" }, { NEA, "A,C" },
+ { NEA, "A,D" }, { NEA, "A,E" }, { NEA, "A,H" }, { NEA, "A,L" },
- { illegal, nullptr }, { SBB, "A,A" }, { SBB, "A,B" }, { SBB, "A,C" },
- { SBB, "A,D" }, { SBB, "A,E" }, { SBB, "A,H" }, { SBB, "A,L" },
- { illegal, nullptr }, { EQA, "A,A" }, { EQA, "A,B" }, { EQA, "A,C" },
- { EQA, "A,D" }, { EQA, "A,E" }, { EQA, "A,H" }, { EQA, "A,L" }
+ { }, { SBB, "A,A" }, { SBB, "A,B" }, { SBB, "A,C" },
+ { SBB, "A,D" }, { SBB, "A,E" }, { SBB, "A,H" }, { SBB, "A,L" },
+ { }, { EQA, "A,A" }, { EQA, "A,B" }, { EQA, "A,C" },
+ { EQA, "A,D" }, { EQA, "A,E" }, { EQA, "A,H" }, { EQA, "A,L" }
};
-static const struct dasm_s dasm64_78c05[256] = {
- /* 0x00 - 0x3F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { ANI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+const dasm_s dasm_s::d64_78c05[256] = {
+ // 0x00 - 0x3F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { ANI, "A,%b" }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { XRI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { ORI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { XRI, "A,%b" }, { }, { },
+ { }, { }, { }, { },
+ { }, { ORI, "A,%b" }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { ADINC, "A,%b" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { GTI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { ADINC, "A,%b" }, { }, { },
+ { }, { }, { }, { },
+ { }, { GTI, "A,%b" }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { SUINB, "A,%b" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { LTI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { SUINB, "A,%b" }, { }, { },
+ { }, { }, { }, { },
+ { }, { LTI, "A,%b" }, { }, { },
+ { }, { }, { }, { },
- /* 0x40 - 0x7F */
- { illegal, nullptr }, { ADI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { ONI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x40 - 0x7F
+ { }, { ADI, "A,%b" }, { }, { },
+ { }, { }, { }, { },
+ { }, { ONI, "A,%b" }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { ACI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { OFFI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { ACI, "A,%b" }, { }, { },
+ { }, { }, { }, { },
+ { }, { OFFI, "A,%b" }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { SUI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { NEI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { SUI, "A,%b" }, { }, { },
+ { }, { }, { }, { },
+ { }, { NEI, "A,%b" }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { SBI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { EQI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { SBI, "A,%b" }, { }, { },
+ { }, { }, { }, { },
+ { }, { EQI, "A,%b" }, { }, { },
+ { }, { }, { }, { },
- /* 0x80 - 0xBF */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { ANI, "PA,%b" }, { ANI, "PB,%b" }, { ANI, "PC,%b" }, { ANI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x80 - 0xBF
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { ANI, "PA,%b" }, { ANI, "PB,%b" }, { ANI, "PC,%b" }, { ANI, "MK,%b" },
+ { }, { }, { }, { },
- { XRI, "PA,%b" }, { XRI, "PB,%b" }, { XRI, "PC,%b" }, { XRI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { ORI, "PA,%b" }, { ORI, "PB,%b" }, { ORI, "PC,%b" }, { ORI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { XRI, "PA,%b" }, { XRI, "PB,%b" }, { XRI, "PC,%b" }, { XRI, "MK,%b" },
+ { }, { }, { }, { },
+ { ORI, "PA,%b" }, { ORI, "PB,%b" }, { ORI, "PC,%b" }, { ORI, "MK,%b" },
+ { }, { }, { }, { },
- { ADINC, "PA,%b" }, { ADINC, "PB,%b" }, { ADINC, "PC,%b" }, { ADINC, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { GTI, "PA,%b" }, { GTI, "PB,%b" }, { GTI, "PC,%b" }, { GTI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { ADINC, "PA,%b" }, { ADINC, "PB,%b" }, { ADINC, "PC,%b" }, { ADINC, "MK,%b" },
+ { }, { }, { }, { },
+ { GTI, "PA,%b" }, { GTI, "PB,%b" }, { GTI, "PC,%b" }, { GTI, "MK,%b" },
+ { }, { }, { }, { },
- { SUINB, "PA,%b" }, { SUINB, "PB,%b" }, { SUINB, "PC,%b" }, { SUINB, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { LTI, "PA,%b" }, { LTI, "PB,%b" }, { LTI, "PC,%b" }, { LTI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { SUINB, "PA,%b" }, { SUINB, "PB,%b" }, { SUINB, "PC,%b" }, { SUINB, "MK,%b" },
+ { }, { }, { }, { },
+ { LTI, "PA,%b" }, { LTI, "PB,%b" }, { LTI, "PC,%b" }, { LTI, "MK,%b" },
+ { }, { }, { }, { },
- /* 0xC0 - 0xFF */
- { ADI, "PA,%b" }, { ADI, "PB,%b" }, { ADI, "PC,%b" }, { ADI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { ONI, "PA,%b" }, { ONI, "PB,%b" }, { ONI, "PC,%b" }, { ONI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0xC0 - 0xFF
+ { ADI, "PA,%b" }, { ADI, "PB,%b" }, { ADI, "PC,%b" }, { ADI, "MK,%b" },
+ { }, { }, { }, { },
+ { ONI, "PA,%b" }, { ONI, "PB,%b" }, { ONI, "PC,%b" }, { ONI, "MK,%b" },
+ { }, { }, { }, { },
- { ACI, "PA,%b" }, { ACI, "PB,%b" }, { ACI, "PC,%b" }, { ACI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { SUI, "PA,%b" }, { SUI, "PB,%b" }, { SUI, "PC,%b" }, { SUI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { ACI, "PA,%b" }, { ACI, "PB,%b" }, { ACI, "PC,%b" }, { ACI, "MK,%b" },
+ { }, { }, { }, { },
+ { SUI, "PA,%b" }, { SUI, "PB,%b" }, { SUI, "PC,%b" }, { SUI, "MK,%b" },
+ { }, { }, { }, { },
- { NEI, "PA,%b" }, { NEI, "PB,%b" }, { NEI, "PC,%b" }, { NEI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { SBI, "PA,%b" }, { SBI, "PB,%b" }, { SBI, "PC,%b" }, { SBI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { NEI, "PA,%b" }, { NEI, "PB,%b" }, { NEI, "PC,%b" }, { NEI, "MK,%b" },
+ { }, { }, { }, { },
+ { SBI, "PA,%b" }, { SBI, "PB,%b" }, { SBI, "PC,%b" }, { SBI, "MK,%b" },
+ { }, { }, { }, { },
- { SBI, "PA,%b" }, { SBI, "PB,%b" }, { SBI, "PC,%b" }, { SBI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { EQI, "PA,%b" }, { EQI, "PB,%b" }, { EQI, "PC,%b" }, { EQI, "MK,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }
+ { SBI, "PA,%b" }, { SBI, "PB,%b" }, { SBI, "PC,%b" }, { SBI, "MK,%b" },
+ { }, { }, { }, { },
+ { EQI, "PA,%b" }, { EQI, "PB,%b" }, { EQI, "PC,%b" }, { EQI, "MK,%b" },
+ { }, { }, { }, { }
};
-static const struct dasm_s dasm70_78c05[256] = {
- /* 0x00 - 0x3F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { SSPD, "%w" }, { LSPD, "%w" },
+const dasm_s dasm_s::d70_78c05[256] = {
+ // 0x00 - 0x3F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { SSPD, "%w" }, { LSPD, "%w" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { SBCD, "%w" }, { LBCD, "%w" },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { SBCD, "%w" }, { LBCD, "%w" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { SDED, "%w" }, { LDED, "%w" },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { SDED, "%w" }, { LDED, "%w" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { SHLD, "%w" }, { LHLD, "%w" },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { SHLD, "%w" }, { LHLD, "%w" },
- /* 0x40 - 0x7F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x40 - 0x7F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { MOV, "A,%w" }, { MOV, "B,%w" }, { MOV, "C,%w" },
- { MOV, "D,%w" }, { MOV, "E,%w" }, { MOV, "H,%w" }, { MOV, "L,%w" },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { MOV, "A,%w" }, { MOV, "B,%w" }, { MOV, "C,%w" },
+ { MOV, "D,%w" }, { MOV, "E,%w" }, { MOV, "H,%w" }, { MOV, "L,%w" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { MOV, "%w,A" }, { MOV, "%w,B" }, { MOV, "%w,C" },
- { MOV, "%w,D" }, { MOV, "%w,E" }, { MOV, "%w,H" }, { MOV, "%w,L" },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { MOV, "%w,A" }, { MOV, "%w,B" }, { MOV, "%w,C" },
+ { MOV, "%w,D" }, { MOV, "%w,E" }, { MOV, "%w,H" }, { MOV, "%w,L" },
- /* 0x80 - 0xBF */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { ANAX, "BC" }, { ANAX, "DE" }, { ANAX, "HL" },
- { ANAX, "DE+" }, { ANAX, "HL+" }, { ANAX, "DE-" }, { ANAX, "HL-" },
+ // 0x80 - 0xBF
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { ANAX, "BC" }, { ANAX, "DE" }, { ANAX, "HL" },
+ { ANAX, "DE+" }, { ANAX, "HL+" }, { ANAX, "DE-" }, { ANAX, "HL-" },
- { illegal, nullptr }, { XRAX, "BC" }, { XRAX, "DE" }, { XRAX, "HL" },
- { XRAX, "DE+" }, { XRAX, "HL+" }, { XRAX, "DE-" }, { XRAX, "HL-" },
- { illegal, nullptr }, { ORAX, "BC" }, { ORAX, "DE" }, { ORAX, "HL" },
- { ORAX, "DE+" }, { ORAX, "HL+" }, { ORAX, "DE-" }, { ORAX, "HL-" },
+ { }, { XRAX, "BC" }, { XRAX, "DE" }, { XRAX, "HL" },
+ { XRAX, "DE+" }, { XRAX, "HL+" }, { XRAX, "DE-" }, { XRAX, "HL-" },
+ { }, { ORAX, "BC" }, { ORAX, "DE" }, { ORAX, "HL" },
+ { ORAX, "DE+" }, { ORAX, "HL+" }, { ORAX, "DE-" }, { ORAX, "HL-" },
- { illegal, nullptr }, { ADDNCX, "BC" }, { ADDNCX, "DE" }, { ADDNCX, "HL" },
- { ADDNCX, "DE+" }, { ADDNCX, "HL+" }, { ADDNCX, "DE-" }, { ADDNCX, "HL-" },
- { illegal, nullptr }, { GTAX, "BC" }, { GTAX, "DE" }, { GTAX, "HL" },
- { GTAX, "DE+" }, { GTAX, "HL+" }, { GTAX, "DE-" }, { GTAX, "HL-" },
+ { }, { ADDNCX, "BC" }, { ADDNCX, "DE" }, { ADDNCX, "HL" },
+ { ADDNCX, "DE+" }, { ADDNCX, "HL+" }, { ADDNCX, "DE-" }, { ADDNCX, "HL-" },
+ { }, { GTAX, "BC" }, { GTAX, "DE" }, { GTAX, "HL" },
+ { GTAX, "DE+" }, { GTAX, "HL+" }, { GTAX, "DE-" }, { GTAX, "HL-" },
- { illegal, nullptr }, { SUBNBX, "BC" }, { SUBNBX, "DE" }, { SUBNBX, "HL" },
- { SUBNBX, "DE+" }, { SUBNBX, "HL+" }, { SUBNBX, "DE-" }, { SUBNBX, "HL-" },
- { illegal, nullptr }, { LTAX, "BC" }, { LTAX, "DE" }, { LTAX, "HL" },
- { LTAX, "DE+" }, { LTAX, "HL+" }, { LTAX, "DE-" }, { LTAX, "HL-" },
+ { }, { SUBNBX, "BC" }, { SUBNBX, "DE" }, { SUBNBX, "HL" },
+ { SUBNBX, "DE+" }, { SUBNBX, "HL+" }, { SUBNBX, "DE-" }, { SUBNBX, "HL-" },
+ { }, { LTAX, "BC" }, { LTAX, "DE" }, { LTAX, "HL" },
+ { LTAX, "DE+" }, { LTAX, "HL+" }, { LTAX, "DE-" }, { LTAX, "HL-" },
- /* 0xC0 - 0xFF */
- { illegal, nullptr }, { ADDX, "BC" }, { ADDX, "DE" }, { ADDX, "HL" },
- { ADDX, "DE+" }, { ADDX, "HL+" }, { ADDX, "DE-" }, { ADDX, "HL-" },
- { illegal, nullptr }, { ONAX, "BC" }, { ONAX, "DE" }, { ONAX, "HL" },
- { ONAX, "DE+" }, { ONAX, "HL+" }, { ONAX, "DE-" }, { ONAX, "HL-" },
+ // 0xC0 - 0xFF
+ { }, { ADDX, "BC" }, { ADDX, "DE" }, { ADDX, "HL" },
+ { ADDX, "DE+" }, { ADDX, "HL+" }, { ADDX, "DE-" }, { ADDX, "HL-" },
+ { }, { ONAX, "BC" }, { ONAX, "DE" }, { ONAX, "HL" },
+ { ONAX, "DE+" }, { ONAX, "HL+" }, { ONAX, "DE-" }, { ONAX, "HL-" },
- { illegal, nullptr }, { ADCX, "BC" }, { ADCX, "DE" }, { ADCX, "HL" },
- { ADCX, "DE+" }, { ADCX, "HL+" }, { ADCX, "DE-" }, { ADCX, "HL-" },
- { illegal, nullptr }, { OFFAX, "BC" }, { OFFAX, "DE" }, { OFFAX, "HL" },
- { OFFAX, "DE+" }, { OFFAX, "HL+" }, { OFFAX, "DE-" }, { OFFAX, "HL-" },
+ { }, { ADCX, "BC" }, { ADCX, "DE" }, { ADCX, "HL" },
+ { ADCX, "DE+" }, { ADCX, "HL+" }, { ADCX, "DE-" }, { ADCX, "HL-" },
+ { }, { OFFAX, "BC" }, { OFFAX, "DE" }, { OFFAX, "HL" },
+ { OFFAX, "DE+" }, { OFFAX, "HL+" }, { OFFAX, "DE-" }, { OFFAX, "HL-" },
- { illegal, nullptr }, { SUBX, "BC" }, { SUBX, "DE" }, { SUBX, "HL" },
- { SUBX, "DE+" }, { SUBX, "HL+" }, { SUBX, "DE-" }, { SUBX, "HL-" },
- { illegal, nullptr }, { NEAX, "BC" }, { NEAX, "DE" }, { NEAX, "HL" },
- { NEAX, "DE+" }, { NEAX, "HL+" }, { NEAX, "DE-" }, { NEAX, "HL-" },
+ { }, { SUBX, "BC" }, { SUBX, "DE" }, { SUBX, "HL" },
+ { SUBX, "DE+" }, { SUBX, "HL+" }, { SUBX, "DE-" }, { SUBX, "HL-" },
+ { }, { NEAX, "BC" }, { NEAX, "DE" }, { NEAX, "HL" },
+ { NEAX, "DE+" }, { NEAX, "HL+" }, { NEAX, "DE-" }, { NEAX, "HL-" },
- { illegal, nullptr }, { SBBX, "BC" }, { SBBX, "DE" }, { SBBX, "HL" },
- { SBBX, "DE+" }, { SBBX, "HL+" }, { SBBX, "DE-" }, { SBBX, "HL-" },
- { illegal, nullptr }, { EQAX, "BC" }, { EQAX, "DE" }, { EQAX, "HL" },
- { EQAX, "DE+" }, { EQAX, "HL+" }, { EQAX, "DE-" }, { EQAX, "HL-" },
+ { }, { SBBX, "BC" }, { SBBX, "DE" }, { SBBX, "HL" },
+ { SBBX, "DE+" }, { SBBX, "HL+" }, { SBBX, "DE-" }, { SBBX, "HL-" },
+ { }, { EQAX, "BC" }, { EQAX, "DE" }, { EQAX, "HL" },
+ { EQAX, "DE+" }, { EQAX, "HL+" }, { EQAX, "DE-" }, { EQAX, "HL-" },
};
-static const struct dasm_s dasm74_78c05[256] = {
- /* 0x00 - 0x3F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+const dasm_s dasm_s::d74_78c05[256] = {
+ // 0x00 - 0x3F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- /* 0x40 - 0x7F */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x40 - 0x7F
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- /* 0x80 - 0xBF */
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { ANAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0x80 - 0xBF
+ { }, { }, { }, { },
+ { }, { }, { }, { },
+ { ANAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
- { XRAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { ORAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { XRAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
+ { ORAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
- { ADDNCW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { GTAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { ADDNCW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
+ { GTAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
- { SUBNBW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { LTAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { SUBNBW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
+ { LTAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
- /* 0xC0 - 0xFF */
- { ADDW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { ONAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ // 0xC0 - 0xFF
+ { ADDW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
+ { ONAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
- { ADCW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { OFFAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { ADCW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
+ { OFFAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
- { SUBW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { NEAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { SUBW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
+ { NEAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
- { SBBW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { EQAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { SBBW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
+ { EQAW, "%a" }, { }, { }, { },
+ { }, { }, { }, { },
};
-static const struct dasm_s dasmXX_78c05[256] = {
- /* 0x00 - 0x3F */
- { NOP, nullptr }, { HALT, nullptr }, { INX, "SP" }, { DCX, "SP" },
- { LXI, "SP,%w" }, { ANIW, "%a,%b" }, { illegal, nullptr }, { ANI, "A,%b" },
- { RET, nullptr }, { SIO, nullptr }, { MOV, "A,B" }, { MOV, "A,C" },
- { MOV, "A,D" }, { MOV, "A,E" }, { MOV, "A,H" }, { MOV, "A,L" },
+const dasm_s dasm_s::XX_78c05[256] = {
+ // 0x00 - 0x3F
+ { NOP, nullptr }, { HALT, nullptr }, { INX, "SP" }, { DCX, "SP" },
+ { LXI, "SP,%w" }, { ANIW, "%a,%b" }, { }, { ANI, "A,%b" },
+ { RET, nullptr }, { SIO, nullptr }, { MOV, "A,B" }, { MOV, "A,C" },
+ { MOV, "A,D" }, { MOV, "A,E" }, { MOV, "A,H" }, { MOV, "A,L" },
- { illegal, nullptr }, { illegal, nullptr }, { INX, "BC" }, { DCX, "BC" },
- { LXI, "BC,%w" }, { ORIW, "%a,%b" }, { XRI, "A,%b" }, { ORI, "A,%b" },
- { RETS, nullptr }, { STM, nullptr }, { MOV, "B,A" }, { MOV, "C,A" },
- { MOV, "D,A" }, { MOV, "E,A" }, { MOV, "H,A" }, { MOV, "L,A" },
+ { }, { }, { INX, "BC" }, { DCX, "BC" },
+ { LXI, "BC,%w" }, { ORIW, "%a,%b" }, { XRI, "A,%b" }, { ORI, "A,%b" },
+ { RETS, nullptr }, { STM, nullptr }, { MOV, "B,A" }, { MOV, "C,A" },
+ { MOV, "D,A" }, { MOV, "E,A" }, { MOV, "H,A" }, { MOV, "L,A" },
- { INRW, "%a" }, { illegal, nullptr }, { INX, "DE" }, { DCX, "DE" },
- { LXI, "DE,%w" }, { GTIW, "%a,%b" }, { ADINC, "A,%b" }, { GTI, "A,%b" },
- { LDAW, "%a" }, { LDAX, "BC" }, { LDAX, "DE" }, { LDAX, "HL" },
- { LDAX, "DE+" }, { LDAX, "HL+" }, { LDAX, "DE-" }, { LDAX, "HL-" },
+ { INRW, "%a" }, { }, { INX, "DE" }, { DCX, "DE" },
+ { LXI, "DE,%w" }, { GTIW, "%a,%b" }, { ADINC, "A,%b" }, { GTI, "A,%b" },
+ { LDAW, "%a" }, { LDAX, "BC" }, { LDAX, "DE" }, { LDAX, "HL" },
+ { LDAX, "DE+" }, { LDAX, "HL+" }, { LDAX, "DE-" }, { LDAX, "HL-" },
- { DCRW, "%a" }, { illegal, nullptr }, { INX, "HL" }, { DCX, "HL" },
- { LXI, "HL,%w" }, { LTIW, "%a,%b" }, { SUINB, "A,%b" }, { LTI, "A,%b" },
- { STAW, "%a" }, { STAX, "BC" }, { STAX, "DE" }, { STAX, "HL" },
- { STAX, "DE+" }, { STAX, "HL+" }, { STAX, "DE-" }, { STAX, "HL-" },
+ { DCRW, "%a" }, { }, { INX, "HL" }, { DCX, "HL" },
+ { LXI, "HL,%w" }, { LTIW, "%a,%b" }, { SUINB, "A,%b" }, { LTI, "A,%b" },
+ { STAW, "%a" }, { STAX, "BC" }, { STAX, "DE" }, { STAX, "HL" },
+ { STAX, "DE+" }, { STAX, "HL+" }, { STAX, "DE-" }, { STAX, "HL-" },
- /* 0x40 - 0x7F */
- { illegal, nullptr }, { INR, "A" }, { INR, "B" }, { INR, "C" },
- { CALL, "%w" }, { ONIW, "%a,%b" }, { ADI, "A,%b" }, { ONI, "A,%b" },
- { 0, dasm48_78c05 }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { 0, dasm4c_78c05 }, { 0, dasm4d_78c05 }, { JRE, "%d" }, { JRE, "%d" },
+ // 0x40 - 0x7F
+ { }, { INR, "A" }, { INR, "B" }, { INR, "C" },
+ { CALL, "%w" }, { ONIW, "%a,%b" }, { ADI, "A,%b" }, { ONI, "A,%b" },
+ { d48_78c05 }, { }, { }, { },
+ { d4C_78c05 }, { d4D_78c05 }, { JRE, "%d" }, { JRE, "%d" },
- { illegal, nullptr }, { DCR, "A" }, { DCR, "B" }, { DCR, "C" },
- { JMP, "%w" }, { OFFIW, "%a,%b" }, { ACI, "A,%b" }, { OFFI, "A,%b" },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
- { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr },
+ { }, { DCR, "A" }, { DCR, "B" }, { DCR, "C" },
+ { JMP, "%w" }, { OFFIW, "%a,%b" }, { ACI, "A,%b" }, { OFFI, "A,%b" },
+ { }, { }, { }, { },
+ { }, { }, { }, { },
- { 0, dasm60_78c05 }, { DAA, nullptr }, { RETI, nullptr }, { CALB, nullptr },
- { 0, dasm64_78c05 }, { NEIW, "%a,%b" }, { SUI, "A,%b" }, { NEI, "A,%b" },
- { illegal, nullptr }, { MVI, "A,%b" }, { MVI, "B,%b" }, { MVI, "C,%b" },
- { MVI, "D,%b" }, { MVI, "E,%b" }, { MVI, "H,%b" }, { MVI, "L,%b" },
+ { d60_78c05 }, { DAA, nullptr }, { RETI, nullptr }, { CALB, nullptr },
+ { d64_78c05 }, { NEIW, "%a,%b" }, { SUI, "A,%b" }, { NEI, "A,%b" },
+ { }, { MVI, "A,%b" }, { MVI, "B,%b" }, { MVI, "C,%b" },
+ { MVI, "D,%b" }, { MVI, "E,%b" }, { MVI, "H,%b" }, { MVI, "L,%b" },
- { 0, dasm70_78c05 }, { MVIW, "%a,%b" }, { SOFTI, nullptr }, { JB, nullptr },
- { 0, dasm74_78c05 }, { EQIW, "%a,%b" }, { SBI, "A,%b" }, { EQI, "A,%b" },
- { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" },
- { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" },
+ { d70_78c05 }, { MVIW, "%a,%b" }, { SOFTI, nullptr }, { JB, nullptr },
+ { d74_78c05 }, { EQIW, "%a,%b" }, { SBI, "A,%b" }, { EQI, "A,%b" },
+ { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" },
+ { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" },
- /* 0x80 - 0xBF */
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ // 0x80 - 0xBF
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
+ { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" },
- /* 0xC0 - 0xFF */
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ // 0xC0 - 0xFF
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
- { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" },
+ { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }
};
-/* register names for bit manipulation instructions */
-static const char *const regname[32] =
+// register names for bit manipulation instructions
+const char *const regname[32] =
{
"illegal", "illegal", "illegal", "illegal",
"illegal", "illegal", "illegal", "illegal",
@@ -5361,36 +5416,22 @@ static const char *const regname[32] =
"illegal", "TMM", "PT", "illegal"
};
-static offs_t Dasm( char *buffer, offs_t pc, const struct dasm_s *dasmXX, const UINT8 *oprom, const UINT8 *opram, int is_7810 )
+offs_t Dasm( char *buffer, offs_t pc, const dasm_s (&dasmXX)[256], const UINT8 *oprom, const UINT8 *opram, int is_7810 )
{
- int idx = 0;
- UINT8 op = oprom[idx++], op2, t;
+ unsigned idx = 0;
+ const UINT8 op = oprom[idx++];
+ const dasm_s *desc = &dasmXX[op];
+ if (desc->is_prefix())
+ desc = &desc->prefix_get(oprom[idx++]);
+
+ buffer += sprintf(buffer, "%-8.8s", desc->name());
+
+ UINT32 flags = desc->is_call() ? DASMFLAG_STEP_OVER : desc->is_return() ? DASMFLAG_STEP_OUT : 0;
+ UINT8 op2;
int offset;
UINT16 ea;
- const char *a;
- UINT32 flags = 0;
- t = dasmXX[op].token;
- a = (const char *)dasmXX[op].args;
-
- /* 0 token means prefix opcode (use table from args) */
- if (0 == t)
- {
- struct dasm_s *p_dasm = (struct dasm_s *)a;
-
- op2 = oprom[idx++];
- t = p_dasm[op2].token;
- a = (const char *)p_dasm[op2].args;
- }
-
- buffer += sprintf(buffer, "%-8.8s", token[t]);
-
- if (t == CALB || t == CALF || t == CALL || t == CALT)
- flags = DASMFLAG_STEP_OVER;
- else if (t == RET || t == RETI)
- flags = DASMFLAG_STEP_OUT;
-
- while (a && *a)
+ for (const char *a = desc->args(); a && *a; a++)
{
if ('%' == *a)
{
@@ -5437,29 +5478,30 @@ static offs_t Dasm( char *buffer, offs_t pc, const struct dasm_s *dasmXX, const
}
else
*buffer++ = *a;
- a++;
}
*buffer = '\0';
return idx | flags | DASMFLAG_SUPPORTED;
}
+} // anonymous namespace
+
CPU_DISASSEMBLE( upd7810 )
{
- return Dasm( buffer, pc, dasmXX_7810, oprom, opram, 1 );
+ return Dasm( buffer, pc, dasm_s::XX_7810, oprom, opram, 1 );
}
CPU_DISASSEMBLE( upd7807 )
{
- return Dasm( buffer, pc, dasmXX_7807, oprom, opram, 1 );
+ return Dasm( buffer, pc, dasm_s::XX_7807, oprom, opram, 1 );
}
CPU_DISASSEMBLE( upd7801 )
{
- return Dasm( buffer, pc, dasmXX_7801, oprom, opram, 0 );
+ return Dasm( buffer, pc, dasm_s::XX_7801, oprom, opram, 0 );
}
CPU_DISASSEMBLE( upd78c05 )
{
- return Dasm( buffer, pc, dasmXX_78c05, oprom, opram, 0 );
+ return Dasm( buffer, pc, dasm_s::XX_78c05, oprom, opram, 0 );
}
diff --git a/src/devices/imagedev/chd_cd.cpp b/src/devices/imagedev/chd_cd.cpp
index 4165886a694..9386d741d58 100644
--- a/src/devices/imagedev/chd_cd.cpp
+++ b/src/devices/imagedev/chd_cd.cpp
@@ -12,13 +12,6 @@
#include "cdrom.h"
#include "chd_cd.h"
-
-static OPTION_GUIDE_START(cd_option_guide)
- OPTION_INT('K', "hunksize", "Hunk Bytes")
-OPTION_GUIDE_END
-
-static const char cd_option_spec[] = "K512/1024/2048/[4096]";
-
// device type definition
const device_type CDROM = &device_creator;
@@ -61,17 +54,12 @@ void cdrom_image_device::device_config_complete()
{
m_extension_list = "chd,cue,toc,nrg,gdi,iso,cdr";
- add_format("chdcd", "CD-ROM drive", m_extension_list, cd_option_spec);
+ add_format("chdcd", "CD-ROM drive", m_extension_list, "");
// set brief and instance name
update_names();
}
-const option_guide *cdrom_image_device::create_option_guide() const
-{
- return cd_option_guide;
-}
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
diff --git a/src/devices/imagedev/chd_cd.h b/src/devices/imagedev/chd_cd.h
index 9e2ec9f9a29..64bb3924fee 100644
--- a/src/devices/imagedev/chd_cd.h
+++ b/src/devices/imagedev/chd_cd.h
@@ -45,7 +45,6 @@ public:
virtual bool is_reset_on_load() const override { return 0; }
virtual const char *image_interface() const override { return m_interface; }
virtual const char *file_extensions() const override { return m_extension_list; }
- virtual const option_guide *create_option_guide() const override;
// specific implementation
cdrom_file *get_cdrom_file() { return m_cdrom_handle; }
diff --git a/src/devices/imagedev/floppy.cpp b/src/devices/imagedev/floppy.cpp
index 65bfb82d4e3..b01f5db11cf 100644
--- a/src/devices/imagedev/floppy.cpp
+++ b/src/devices/imagedev/floppy.cpp
@@ -1674,7 +1674,7 @@ void floppy_8_dssd::handled_variants(UINT32 *variants, int &var_count) const
//-------------------------------------------------
floppy_8_ssdd::floppy_8_ssdd(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
- floppy_image_device(mconfig, FLOPPY_8_DSDD, "8\" double density single sided floppy drive", tag, owner, clock, "floppy_8_ssdd", __FILE__)
+ floppy_image_device(mconfig, FLOPPY_8_SSDD, "8\" double density single sided floppy drive", tag, owner, clock, "floppy_8_ssdd", __FILE__)
{
}
diff --git a/src/devices/machine/hdc92x4.cpp b/src/devices/machine/hdc92x4.cpp
index 4701f8c7711..8de7457143a 100644
--- a/src/devices/machine/hdc92x4.cpp
+++ b/src/devices/machine/hdc92x4.cpp
@@ -8,8 +8,8 @@
This controller handles MFM and FM encoded floppy disks and hard disks.
References:
- [1] SMC HDC9234 preliminary data book (1988)
- [2] SMC HDC9224 data book
+ [1] SMC HDC9224 data book
+ [2] SMC HDC9234 preliminary data book (1988)
The HDC 9224 / 9234 controller is also referred to as the "Universal Disk Controller" (UDC)
by the data book
@@ -192,7 +192,7 @@ enum
};
/*
- Definition of bits in the status register [1] p.7
+ Definition of bits in the status register [2] p.7
*/
enum
{
@@ -623,6 +623,11 @@ int hdc92x4_device::current_sector()
return m_register_r[CURRENT_SECTOR] & 0xff;
}
+bool hdc92x4_device::bad_sector()
+{
+ return (m_selected_drive_type != TYPE_AT) && ((m_register_r[CURRENT_HEAD] & 0x80)!=0);
+}
+
UINT8 hdc92x4_device::current_command()
{
return m_register_w[COMMAND];
@@ -633,7 +638,18 @@ bool hdc92x4_device::using_floppy()
return (m_selected_drive_type == TYPE_FLOPPY5 || m_selected_drive_type == TYPE_FLOPPY8);
}
-int hdc92x4_device::header_length()
+/*
+ Delivers the header length (including ident, excluding CRC)
+*/
+int hdc9224_device::header_length()
+{
+ return (m_selected_drive_type == TYPE_ST)? 4 : 5;
+}
+
+/*
+ Delivers the header length (including ident, excluding CRC)
+*/
+int hdc9234_device::header_length()
{
return (m_selected_drive_type == TYPE_AT)? 4 : 5;
}
@@ -645,12 +661,13 @@ int hdc92x4_device::register_number(int slot)
{
// The id_field is an array of indexes into the chip registers.
// Thus we get the values properly assigned to the registers.
- // The PC-AT mode does not use a size field.
+ // The PC-AT (9234) and ST-506 (9224) modes do not use a size field.
const int id_field[] = { CURRENT_CYLINDER, CURRENT_HEAD, CURRENT_SECTOR, CURRENT_SIZE, CURRENT_CRC1, CURRENT_CRC2 };
int index = slot;
- // Skip size for PC-AT
- if (m_selected_drive_type == TYPE_AT && slot > 2) index++;
+ // Skip size for PC-AT and ST-506
+ if ((header_length() == 4) && (slot > 2)) index++;
+
if (index > 5)
{
logerror("BUG: Invalid index for header field: %d", index);
@@ -663,7 +680,7 @@ int hdc92x4_device::register_number(int slot)
Delivers the step time (in microseconds) minus the pulse width (9224).
The first two values in the list apply for index==0 (buffered step),
but the first one is used for the RESTORE command, the second one is used
- for SEEK. [2]
+ for SEEK. [1]
*/
int hdc9224_device::step_time()
{
@@ -770,7 +787,7 @@ void hdc92x4_device::wait_time(emu_timer *tm, int microsec, int next_substate)
void hdc92x4_device::wait_time(emu_timer *tm, const attotime &delay, int param)
{
- if (TRACE_DELAY) logerror("%s: [%s] Delaying by %4.2f microsecs\n", tag(), ttsn().c_str(), delay.as_double()*1000000);
+ if (TRACE_DELAY) logerror("[%s] Delaying by %4.2f microsecs\n", ttsn().c_str(), delay.as_double()*1000000);
tm->adjust(delay);
m_substate = param;
m_state_after_line = UNDEF;
@@ -787,19 +804,19 @@ void hdc92x4_device::wait_line(int line, line_state level, int substate, bool st
if (line == SEEKCOMP_LINE && (seek_complete() == (level==ASSERT_LINE)))
{
- if (TRACE_LINES) logerror("%s: SEEK_COMPLETE line is already %d\n", tag(), level);
+ if (TRACE_LINES) logerror("SEEK_COMPLETE line is already %d\n", level);
}
else
{
if (line == INDEX_LINE && (index_hole() == (level==ASSERT_LINE)))
{
- if (TRACE_LINES) logerror("%s: INDEX line is already %d\n", tag(), level);
+ if (TRACE_LINES) logerror("INDEX line is already %d\n", level);
}
else
{
if (line == READY_LINE && (drive_ready() == (level==ASSERT_LINE)))
{
- if (TRACE_LINES) logerror("%s: READY line is already %d\n", tag(), level);
+ if (TRACE_LINES) logerror("READY line is already %d\n", level);
}
else
{
@@ -827,7 +844,7 @@ void hdc92x4_device::wait_line(int line, line_state level, int substate, bool st
// called by all sector access commands
// ==================================================================
/*
- READ ID FIELD ([1] p. 9)
+ READ ID FIELD ([2] p. 9)
The controller
- scans for the next IDAM
- reads the ID field values into the CURRENT_HEAD/CYLINDER/SECTOR registers
@@ -846,14 +863,15 @@ void hdc92x4_device::read_id(int& cont, bool implied_seek, bool wait_seek_comple
{
case READ_ID:
// Implied seek: Enter the READ_ID subprogram.
- if (TRACE_READID && TRACE_SUBSTATES) logerror("%s: substate READ_ID\n", tag());
+ if (TRACE_READID && TRACE_SUBSTATES) logerror("substate READ_ID\n");
// First step: Search the next IDAM, and if found, read the
// ID values into the registers
// Depending on the implied seek flag, continue with read_id,
// else switch to verify.
- m_substate = implied_seek? READ_ID1 : VERIFY;
+ // The 9224 always assumes implied seek
+ m_substate = (implied_seek || !m_is_hdc9234)? READ_ID1 : VERIFY;
m_live_state.bit_count_total = 0;
live_start(SEARCH_IDAM);
@@ -864,22 +882,22 @@ void hdc92x4_device::read_id(int& cont, bool implied_seek, bool wait_seek_comple
// If an error occurred (no IDAM found), terminate the command
if ((m_register_r[CHIP_STATUS] & CS_SYNCERR) != 0)
{
- if (TRACE_FAIL) logerror("%s: READ_ID failed to find any IDAM\n", tag());
+ if (TRACE_FAIL) logerror("READ_ID failed to find any IDAM\n");
cont = ERROR;
break;
}
if (TRACE_READID)
{
- if (TRACE_SUBSTATES) logerror("%s: substate READ_ID1\n", tag());
- logerror("%s: DESIRED_CYL = %d; CURRENT_CYL = %d\n", tag(), desired_cylinder(), current_cylinder());
+ if (TRACE_SUBSTATES) logerror("substate READ_ID1\n");
+ logerror("DESIRED_CYL = %d; CURRENT_CYL = %d\n", desired_cylinder(), current_cylinder());
}
// The CRC has been updated automatically with each read_one_bit during the live_run.
// We just need to check whether it ended in 0000
if (m_live_state.crc != 0)
{
- if (TRACE_FAIL) logerror("%s: CRC error in sector header\n", tag());
+ if (TRACE_FAIL) logerror("CRC error in sector header\n");
set_bits(m_register_r[CHIP_STATUS], CS_CRCERR, true);
cont = ERROR;
break;
@@ -900,7 +918,7 @@ void hdc92x4_device::read_id(int& cont, bool implied_seek, bool wait_seek_comple
if (wait_seek_complete)
{
// We have to wait for SEEK COMPLETE
- if (TRACE_READID && TRACE_SUBSTATES) logerror("%s: Waiting for SEEK COMPLETE\n", tag());
+ if (TRACE_READID && TRACE_SUBSTATES) logerror("Waiting for SEEK COMPLETE\n");
wait_line(SEEKCOMP_LINE, ASSERT_LINE, READ_ID_SEEK_COMPLETE, false);
cont = WAIT;
}
@@ -913,7 +931,7 @@ void hdc92x4_device::read_id(int& cont, bool implied_seek, bool wait_seek_comple
break;
}
- if (TRACE_READID && TRACE_SUBSTATES) logerror("%s: substate STEP_ON\n", tag());
+ if (TRACE_READID && TRACE_SUBSTATES) logerror("substate STEP_ON\n");
// STEPDIR = 0 -> towards TRK00
set_bits(m_output2, OUT2_STEPDIR, (m_track_delta>0));
set_bits(m_output2, OUT2_STEPPULSE, true);
@@ -922,7 +940,7 @@ void hdc92x4_device::read_id(int& cont, bool implied_seek, bool wait_seek_comple
break;
case READ_ID_STEPOFF:
- if (TRACE_READID && TRACE_SUBSTATES) logerror("%s: substate STEP_OFF\n", tag());
+ if (TRACE_READID && TRACE_SUBSTATES) logerror("substate STEP_OFF\n");
set_bits(m_output2, OUT2_STEPPULSE, false);
m_track_delta += (m_track_delta<0)? 1 : -1;
// Return to STEP_ON, check whether there are more steps
@@ -936,7 +954,7 @@ void hdc92x4_device::read_id(int& cont, bool implied_seek, bool wait_seek_comple
break;
default:
- logerror("%s: BUG: Unknown substate %02x in read_id, aborting command\n", tag(), m_substate);
+ logerror("BUG: Unknown substate %02x in read_id, aborting command\n", m_substate);
cont = ERROR;
}
}
@@ -950,7 +968,7 @@ void hdc92x4_device::read_id(int& cont, bool implied_seek, bool wait_seek_comple
}
/*
- VERIFY ([1] p. 10)
+ VERIFY ([2] p. 10)
The controller
- continues to read the next ID field until the current values match the
contents of the DESIRED_HEAD/CYLINDER/SECTOR registers
@@ -968,8 +986,8 @@ void hdc92x4_device::verify(int& cont)
// After seeking (or immediately when implied seek has been disabled),
// find the desired sector.
- if (TRACE_VERIFY && TRACE_SUBSTATES) logerror("%s: substate VERIFY\n", tag());
- if (TRACE_VERIFY) logerror("%s: VERIFY: Find sector CHS=(%d,%d,%d)\n", tag(),
+ if (TRACE_VERIFY && TRACE_SUBSTATES) logerror("substate VERIFY\n");
+ if (TRACE_VERIFY) logerror("VERIFY: Find sector CHS=(%d,%d,%d)\n",
desired_cylinder(),
desired_head(),
desired_sector());
@@ -978,7 +996,7 @@ void hdc92x4_device::verify(int& cont)
// (This test is only relevant when we did not have a seek phase before)
if ((m_register_r[CHIP_STATUS] & CS_SYNCERR) != 0)
{
- if (TRACE_FAIL) logerror("%s: VERIFY failed to find any IDAM\n", tag());
+ if (TRACE_FAIL) logerror("VERIFY failed to find any IDAM\n");
cont = ERROR;
break;
}
@@ -994,17 +1012,31 @@ void hdc92x4_device::verify(int& cont)
&& desired_head() == current_head()
&& desired_sector() == current_sector())
{
- if (TRACE_VERIFY) logerror("%s: Found the desired sector CHS=(%d,%d,%d)\n", tag(),
- desired_cylinder(),
- desired_head(),
- desired_sector());
- m_substate = DATA_TRANSFER;
- cont = NEXT;
- m_first_sector_found = true;
+ if (bad_sector())
+ {
+ if (m_bypass) // only for 9224
+ {
+ if (TRACE_FAIL) logerror("Desired sector CHS=(%d,%d,%d) found, marked as bad. Bypassing by request.\n", current_cylinder(), current_head(), current_sector());
+ m_substate = VERIFY2;
+ }
+ else
+ {
+ if (TRACE_FAIL) logerror("Desired sector CHS=(%d,%d,%d) found, marked as bad.\n", current_cylinder(), current_head(), current_sector());
+ set_bits(m_register_r[INT_STATUS], ST_BADSECT, true);
+ cont = ERROR;
+ }
+ }
+ else
+ {
+ if (TRACE_VERIFY) logerror("Found the desired sector CHS=(%d,%d,%d)\n", desired_cylinder(), desired_head(), desired_sector());
+ m_substate = DATA_TRANSFER;
+ cont = NEXT;
+ m_first_sector_found = true;
+ }
}
else
{
- if (TRACE_VERIFY && TRACE_DETAIL) logerror("%s: Current CHS=(%d,%d,%d), desired CHS=(%d,%d,%d).\n", tag(),
+ if (TRACE_VERIFY && TRACE_DETAIL) logerror("Current CHS=(%d,%d,%d), desired CHS=(%d,%d,%d).\n",
current_cylinder(),
current_head(),
current_sector(),
@@ -1023,10 +1055,10 @@ void hdc92x4_device::verify(int& cont)
break;
case VERIFY3:
- if (TRACE_VERIFY) logerror("%s: Next IDAM found; total bytes read: %d\n", tag(), m_live_state.bit_count_total / 16);
+ if (TRACE_VERIFY) logerror("Next IDAM found; total bytes read: %d\n", m_live_state.bit_count_total / 16);
if ((m_register_r[CHIP_STATUS] & CS_COMPERR) != 0)
{
- if (TRACE_FAIL) logerror("%s: VERIFY failed to find sector CHS=(%d,%d,%d)\n", tag(), desired_cylinder(), desired_head(), desired_sector());
+ if (TRACE_FAIL) logerror("VERIFY failed to find sector CHS=(%d,%d,%d)\n", desired_cylinder(), desired_head(), desired_sector());
cont = ERROR;
break;
}
@@ -1041,14 +1073,23 @@ void hdc92x4_device::verify(int& cont)
{
// this is for the physical sector reading/writing
// do not verify the next ID field
- m_substate = DATA_TRANSFER;
- m_wait_for_index = true;
- cont = NEXT;
+ if (bad_sector())
+ {
+ if (TRACE_FAIL) logerror("Next physical sector CHS=(%d,%d,%d) found, but marked as bad.\n", current_cylinder(), current_head(), current_sector());
+ set_bits(m_register_r[INT_STATUS], ST_BADSECT, true);
+ cont = ERROR;
+ }
+ else
+ {
+ m_substate = DATA_TRANSFER;
+ m_wait_for_index = true;
+ cont = NEXT;
+ }
}
break;
default:
- logerror("%s: BUG: Unknown substate %02x in verify, aborting command\n", tag(), m_substate);
+ logerror("BUG: Unknown substate %02x in verify, aborting command\n", m_substate);
cont = ERROR;
}
}
@@ -1062,7 +1103,7 @@ void hdc92x4_device::verify(int& cont)
}
/*
- DATA TRANSFER ([1], p. 10)
+ DATA TRANSFER ([2], p. 10)
only during READ/WRITE PHYSICAL/LOGICAL
The controller
- scans for the next DAM
@@ -1079,7 +1120,7 @@ void hdc92x4_device::data_transfer(int& cont)
switch (m_substate)
{
case DATA_TRANSFER:
- if (TRACE_TRANSFER && TRACE_SUBSTATES) logerror("%s: substate DATA_TRANSFER (%s)\n", tag(), m_write? "write" : "read");
+ if (TRACE_TRANSFER && TRACE_SUBSTATES) logerror("substate DATA_TRANSFER (%s)\n", m_write? "write" : "read");
// Count from 0 again
m_live_state.bit_count_total = 0;
@@ -1089,12 +1130,12 @@ void hdc92x4_device::data_transfer(int& cont)
if (TRACE_TRANSFER && TRACE_DETAIL)
{
if (m_logical)
- logerror("%s: %s sector CHS=(%d,%d,%d)\n", tag(), m_write? "Write" : "Read",
+ logerror("%s sector CHS=(%d,%d,%d)\n", m_write? "Write" : "Read",
desired_cylinder(),
desired_head(),
desired_sector());
else
- logerror("%s: %s next sector on track\n", tag(), m_write? "Write" : "Read");
+ logerror("%s next sector on track\n", m_write? "Write" : "Read");
}
if (m_write)
@@ -1122,12 +1163,12 @@ void hdc92x4_device::data_transfer(int& cont)
// Decrement the retry register (one's complemented value; 0000 = 15)
int retry = 15-((m_register_w[RETRY_COUNT] >> 4)&0x0f);
- if (TRACE_FAIL) logerror("%s: DATA TRANSFER got CRC error in sector data, retries = %d\n", tag(), retry);
+ if (TRACE_FAIL) logerror("DATA TRANSFER got CRC error in sector data, retries = %d\n", retry);
m_register_w[RETRY_COUNT] = (m_register_w[RETRY_COUNT] & 0x0f) | ((15-(retry-1))<<4);
if (retry == 0)
{
- if (TRACE_FAIL) logerror("%s: CRC error; no retries left\n", tag());
+ if (TRACE_FAIL) logerror("CRC error; no retries left\n");
set_bits(m_register_r[CHIP_STATUS], CS_CRCERR, true);
cont = ERROR;
}
@@ -1145,7 +1186,7 @@ void hdc92x4_device::data_transfer(int& cont)
}
else
{
- if (TRACE_TRANSFER) logerror("%s: Sector successfully read (count=%d)\n", tag(), m_register_w[SECTOR_COUNT]-1);
+ if (TRACE_TRANSFER) logerror("Sector successfully read (count=%d)\n", m_register_w[SECTOR_COUNT]-1);
// Update the DMA registers for multi-sector operations
if (m_multi_sector)
@@ -1159,7 +1200,7 @@ void hdc92x4_device::data_transfer(int& cont)
m_register_w[DMA23_16] = m_register_r[DMA23_16] = (dma_address & 0xff0000) >> 16;
m_register_w[DMA15_8] = m_register_r[DMA15_8] = (dma_address & 0x00ff00) >> 8;
m_register_w[DMA7_0] = m_register_r[DMA7_0] = (dma_address & 0x0000ff);
- if (TRACE_TRANSFER) logerror("%s: New DMA address = %06x\n", tag(), dma_address);
+ if (TRACE_TRANSFER) logerror("New DMA address = %06x\n", dma_address);
}
// Decrement the count
@@ -1188,7 +1229,7 @@ void hdc92x4_device::data_transfer(int& cont)
break;
case DATA_TRANSFER_WRITE:
- if (TRACE_TRANSFER) logerror("%s: Sector successfully written (count=%d)\n", tag(), m_register_w[SECTOR_COUNT]-1);
+ if (TRACE_TRANSFER) logerror("Sector successfully written (count=%d)\n", m_register_w[SECTOR_COUNT]-1);
// Update the DMA registers for multi-sector operations
if (m_multi_sector)
@@ -1202,7 +1243,7 @@ void hdc92x4_device::data_transfer(int& cont)
m_register_w[DMA23_16] = m_register_r[DMA23_16] = (dma_address & 0xff0000) >> 16;
m_register_w[DMA15_8] = m_register_r[DMA15_8] = (dma_address & 0x00ff00) >> 8;
m_register_w[DMA7_0] = m_register_r[DMA7_0] = (dma_address & 0x0000ff);
- if (TRACE_TRANSFER) logerror("%s: New DMA address = %06x\n", tag(), dma_address);
+ if (TRACE_TRANSFER) logerror("New DMA address = %06x\n", dma_address);
}
// Decrement the count
@@ -1220,7 +1261,7 @@ void hdc92x4_device::data_transfer(int& cont)
break;
default:
- logerror("%s: BUG: Unknown substate %02x in data_transfer, aborting command\n", tag(), m_substate);
+ logerror("BUG: Unknown substate %02x in data_transfer, aborting command\n", m_substate);
cont = ERROR;
}
}
@@ -1253,7 +1294,7 @@ void hdc92x4_device::data_transfer(int& cont)
*/
void hdc92x4_device::preset_crc(live_info& live, int value)
{
- if ((m_register_w[INT_COMM_TERM] & 0x80)!=0)
+ if ((m_register_w[INT_COMM_TERM] & TC_CRCPRE)!=0)
{
// Preset -1
switch (value)
@@ -1303,7 +1344,7 @@ void hdc92x4_device::preset_crc(live_info& live, int value)
*/
void hdc92x4_device::reset_controller()
{
- logerror("%s: RESET command\n", tag());
+ logerror("RESET command\n");
device_reset();
}
@@ -1320,7 +1361,7 @@ void hdc92x4_device::reset_controller()
*/
void hdc92x4_device::drive_deselect()
{
- if (TRACE_SELECT) logerror("%s: DESELECT command\n", tag());
+ if (TRACE_SELECT) logerror("DESELECT command\n");
m_selected_drive_number = NODRIVE;
m_output1 = 0x00;
set_command_done(TC_SUCCESS);
@@ -1349,7 +1390,7 @@ void hdc92x4_device::restore_drive()
if (m_substate == UNDEF)
{
- if (TRACE_RESTORE) logerror("%s: RESTORE command %02x\n", tag(), current_command());
+ if (TRACE_RESTORE) logerror("RESTORE command %02x\n", current_command());
m_seek_count = 0;
m_substate = RESTORE_CHECK;
}
@@ -1362,7 +1403,7 @@ void hdc92x4_device::restore_drive()
// Track 0 has not been reached yet
if (!drive_ready())
{
- if (TRACE_RESTORE) logerror("%s: restore command: Drive not ready\n", tag());
+ if (TRACE_RESTORE) logerror("restore command: Drive not ready\n");
// Does not look like a success, but this takes into account
// that if a drive is not connected we do not want an error message
cont = SUCCESS;
@@ -1377,7 +1418,7 @@ void hdc92x4_device::restore_drive()
// When we have buffered steps, the seek limit will be reached
// before TRK00 is asserted. In that case we have to wait for
// SEEK_COMPLETE. We also wait as soon as TRK00 is asserted.
- if (TRACE_RESTORE) logerror("%s: restore using buffered steps\n", tag());
+ if (TRACE_RESTORE) logerror("restore using buffered steps\n");
wait_line(SEEKCOMP_LINE, ASSERT_LINE, SEEK_COMPLETE, false);
cont = WAIT;
}
@@ -1392,7 +1433,7 @@ void hdc92x4_device::restore_drive()
break;
case STEP_ON:
- if (TRACE_RESTORE && TRACE_SUBSTATES) logerror("%s: [%s] substate STEP_ON\n", tag(), ttsn().c_str());
+ if (TRACE_RESTORE && TRACE_SUBSTATES) logerror("[%s] substate STEP_ON\n", ttsn().c_str());
// Increase step count
m_seek_count++;
@@ -1407,7 +1448,7 @@ void hdc92x4_device::restore_drive()
break;
case STEP_OFF:
- if (TRACE_RESTORE && TRACE_SUBSTATES) logerror("%s: [%s] substate STEP_OFF\n", tag(), ttsn().c_str());
+ if (TRACE_RESTORE && TRACE_SUBSTATES) logerror("[%s] substate STEP_OFF\n", ttsn().c_str());
set_bits(m_output2, OUT2_STEPPULSE, false);
wait_time(m_timer, step_time(), RESTORE_CHECK);
cont = WAIT;
@@ -1417,7 +1458,7 @@ void hdc92x4_device::restore_drive()
// If TRK00 is not set, the drive failed to reach it.
if (!on_track00())
{
- if (TRACE_FAIL) logerror("%s: restore command: failed to reach track 00\n", tag());
+ if (TRACE_FAIL) logerror("restore command: failed to reach track 00\n");
set_command_done(TC_VRFYERR);
cont = ERROR;
}
@@ -1448,7 +1489,7 @@ void hdc92x4_device::step_drive()
if (m_substate == UNDEF)
{
- if (TRACE_STEP) logerror("%s: STEP IN/OUT command %02x\n", tag(), current_command());
+ if (TRACE_STEP) logerror("STEP IN/OUT command %02x\n", current_command());
m_substate = STEP_ON;
}
@@ -1457,7 +1498,7 @@ void hdc92x4_device::step_drive()
switch (m_substate)
{
case STEP_ON:
- if (TRACE_STEP && TRACE_SUBSTATES) logerror("%s: substate STEP_ON\n", tag());
+ if (TRACE_STEP && TRACE_SUBSTATES) logerror("substate STEP_ON\n");
// STEPDIR = 0 -> towards TRK00
set_bits(m_output2, OUT2_STEPDIR, (current_command() & 0x02)==0);
@@ -1469,7 +1510,7 @@ void hdc92x4_device::step_drive()
break;
case STEP_OFF:
- if (TRACE_STEP && TRACE_SUBSTATES) logerror("%s: substate STEP_OFF\n", tag());
+ if (TRACE_STEP && TRACE_SUBSTATES) logerror("substate STEP_OFF\n");
set_bits(m_output2, OUT2_STEPPULSE, false);
wait_time(m_timer, step_time(), ((current_command() & 0x01)!=0)? WAIT_SEEK_COMPLETE : DONE);
cont = WAIT;
@@ -1494,7 +1535,7 @@ void hdc92x4_device::step_drive()
*/
void hdc92x4_device::tape_backup()
{
- logerror("%s: TAPE BACKUP command %02x not implemented\n", tag(), current_command());
+ logerror("TAPE BACKUP command %02x not implemented\n", current_command());
set_command_done(TC_SUCCESS);
}
@@ -1514,13 +1555,20 @@ void hdc92x4_device::tape_backup()
This command only sets the select lines but does not process parameters
like head load times or drive types.
+
+ According to [1], this command must be preceded by a DESELECT.
+ The specification to the successor 9234 [2] says that typically a SEEK
+ may be issued before POLL_DRIVES.
+
+ It is unclear what happens when this is not ensured. This implementation
+ automatically deselects the drives.
*/
void hdc92x4_device::poll_drives()
{
UINT8 drivebit;
if (m_substate == UNDEF)
{
- logerror("%s: POLL DRIVES command %02x\n", tag(), current_command());
+ logerror("POLL DRIVES command %02x\n", current_command());
m_substate = POLL1;
m_selected_drive_number = 0;
// If there is no selection, do not enter the loop
@@ -1542,7 +1590,7 @@ void hdc92x4_device::poll_drives()
m_register_r[CHIP_STATUS] = (m_register_r[CHIP_STATUS] & 0xfc) | m_selected_drive_number;
m_output1 = (drivebit << 4) | (m_register_w[RETRY_COUNT]&0x0f);
- if (TRACE_AUXBUS) logerror("%s: Setting OUTPUT1 to %02x\n", tag(), m_output1);
+ if (TRACE_AUXBUS) logerror("Setting OUTPUT1 to %02x\n", m_output1);
wait_time(m_timer, 1, POLL2); // Wait for 1 usec
cont = WAIT;
}
@@ -1584,7 +1632,7 @@ void hdc92x4_device::poll_drives()
On the next OUTPUT1 time, the number of the drive (one of four lines)
is set on the higher four bits of the auxiliary bus. Also, the lower
4 bits of the RETRY COUNT register are put on the lower 4 bits of the bus
- (user-programmable output, [1] p. 5).
+ (user-programmable output, [2] p. 5).
The HFDC controller board uses the user-programmable output to
select one of four floppy disk drives with Drive set to 00.
@@ -1608,7 +1656,7 @@ void hdc92x4_device::drive_select()
int driveparm = current_command() & 0x1f;
bool head_load_delay_enable = (driveparm & 0x10)!=0;
- // The drive type is used to configure DMA burst mode ([1], p.12)
+ // The drive type is used to configure DMA burst mode ([2], p.12)
// and to select the timing parameters
m_selected_drive_type = (driveparm>>2) & 0x03;
m_selected_drive_number = driveparm & 0x03;
@@ -1617,10 +1665,10 @@ void hdc92x4_device::drive_select()
head_load_delay = head_load_delay_enable? m_register_w[DATA] * head_load_timer_increment[m_selected_drive_type] : 0;
if (fm_mode()) head_load_delay <<= 1;
- if (TRACE_SELECT) logerror("%s: DRIVE SELECT command (%02x): head load delay=%d, type=%d, drive=%d, pout=%02x, step_rate=%d\n", tag(), current_command(), head_load_delay, m_selected_drive_type, driveparm&3, m_register_w[RETRY_COUNT]&0x0f, pulse_width() + step_time());
+ if (TRACE_SELECT) logerror("DRIVE SELECT command (%02x): head load delay=%d, type=%d, drive=%d, pout=%02x, step_rate=%d\n", current_command(), head_load_delay, m_selected_drive_type, driveparm&3, m_register_w[RETRY_COUNT]&0x0f, pulse_width() + step_time());
// Copy the DMA registers to registers CURRENT_HEAD, CURRENT_CYLINDER,
- // and CURRENT_IDENT. This is required during formatting ([1], p. 14)
+ // and CURRENT_IDENT. This is required during formatting [1,2]
// as the format command reuses the registers for formatting parameters.
m_register_r[CURRENT_HEAD] = m_register_r[DMA7_0];
m_register_r[CURRENT_CYLINDER] = m_register_r[DMA15_8];
@@ -1631,7 +1679,7 @@ void hdc92x4_device::drive_select()
m_output1 = (m_selected_drive_number != NODRIVE)? (0x10 << m_selected_drive_number) : 0;
m_output1 |= (m_register_w[RETRY_COUNT]&0x0f);
- if (TRACE_AUXBUS) logerror("%s: Setting OUTPUT1 to %02x\n", tag(), m_output1);
+ if (TRACE_AUXBUS) logerror("Setting OUTPUT1 to %02x\n", m_output1);
m_substate = (head_load_delay>0)? HEAD_DELAY : DONE;
}
@@ -1662,12 +1710,12 @@ void hdc92x4_device::drive_select()
void hdc92x4_device::set_register_pointer()
{
m_register_pointer = current_command() & 0xf;
- if (TRACE_SETPTR) logerror("%s: SET REGISTER POINTER command; start reg=%d\n", tag(), m_register_pointer);
+ if (TRACE_SETPTR) logerror("SET REGISTER POINTER command; start reg=%d\n", m_register_pointer);
// The specification does not say anything about the effect of setting an
// invalid value (only "care should be taken")
if (m_register_pointer > 10)
{
- logerror("%s: set register pointer: Invalid register number: %d. Setting to 10.\n", tag(), m_register_pointer);
+ logerror("set register pointer: Invalid register number: %d. Setting to 10.\n", m_register_pointer);
m_register_pointer = 10;
}
set_command_done(TC_SUCCESS);
@@ -1686,14 +1734,14 @@ void hdc92x4_device::set_register_pointer()
| 0 | 1 | 0 | 1 | 0 | Step| Seek| Verf|
+-----+-----+-----+-----+-----+-----+-----+-----+
- All combinations of flags are legal ([1], p.12).
+ All combinations of flags are legal ([2], p.12).
*/
void hdc92x4_device::seek_read_id()
{
if (m_substate == UNDEF)
{
// Command init
- if (TRACE_READ) logerror("%s: SEEK / READ ID command %02x, CHS=(%d,%d,%d)\n", tag(), current_command(), desired_cylinder(), desired_head(), desired_sector());
+ if (TRACE_READ) logerror("SEEK / READ ID command %02x, CHS=(%d,%d,%d)\n", current_command(), desired_cylinder(), desired_head(), desired_sector());
m_substate = READ_ID;
}
@@ -1721,7 +1769,7 @@ void hdc92x4_device::seek_read_id()
cont = SUCCESS;
break;
default:
- logerror("%s: BUG: Unknown substate %02x in seek_read_id, aborting command\n", tag(), m_substate);
+ logerror("BUG: Unknown substate %02x in seek_read_id, aborting command\n", m_substate);
set_command_done(TC_DATAERR);
cont = ERROR;
}
@@ -1745,20 +1793,32 @@ void hdc92x4_device::seek_read_id()
Command word
- 7 6 5 4 3 2 1 0
- +-----+-----+-----+-----+-----+--------+------+------+
- | 0 | 1 | 0 | 1 | 1 | Logical|NoSeek| Trans|
- +-----+-----+-----+-----+-----+--------+------+------+
+ Physical:
+ +-----+-----+-----+-----+-----+-----+------+------+
+ | 0 | 1 | 0 | 1 | 1 | 0 | 0 |XferEn|
+ +-----+-----+-----+-----+-----+-----+------+------+
+ Logical:
+ +-----+-----+-----+-----+-----+-----+------+------+
+ | 0 | 1 | 0 | 1 | 1 | 1 |Bypass|XferEn| 9224
+ +-----+-----+-----+-----+-----+-----+------+------+
+ +-----+-----+-----+-----+-----+-----+------+------+
+ | 0 | 1 | 0 | 1 | 1 | 1 |NoSeek|XferEn| 9234
+ +-----+-----+-----+-----+-----+-----+------+------+
*/
void hdc92x4_device::read_sectors()
{
- m_logical = (current_command() & 0x04)!=0;
+ int cont = NEXT;
+ bool implied_seek = (current_command() & 0x02)==0;
if (m_substate == UNDEF)
{
// Command init
- if (TRACE_READ) logerror("%s: READ SECTORS %s command %02x, CHS=(%d,%d,%d)\n", tag(), m_logical? "LOGICAL": "PHYSICAL", current_command(), desired_cylinder(), desired_head(), desired_sector());
+ m_logical = (current_command() & 0x04)!=0; // used in VERIFY and DATA TRANSFER substate
+ if (TRACE_READ) logerror("READ SECTORS %s command %02x, CHS=(%d,%d,%d)\n", m_logical? "LOGICAL": "PHYSICAL", current_command(), desired_cylinder(), desired_head(), desired_sector());
+
+ m_bypass = !m_is_hdc9234 && (current_command() & 0x02)!=0;
+ m_transfer_enabled = (current_command() & 0x01)!=0;
m_retry_save = m_register_w[RETRY_COUNT];
m_multi_sector = (m_register_w[SECTOR_COUNT] != 1);
m_write = false;
@@ -1766,10 +1826,6 @@ void hdc92x4_device::read_sectors()
m_first_sector_found = false;
}
- int cont = NEXT;
- bool implied_seek = (current_command() & 0x02)==0;
- m_transfer_enabled = (current_command() & 0x01)!=0;
-
while (cont == NEXT)
{
switch (m_substate & 0xf0)
@@ -1784,7 +1840,7 @@ void hdc92x4_device::read_sectors()
data_transfer(cont);
break;
default:
- logerror("%s: BUG: Unknown substate %02x in read_sectors, aborting command\n", tag(), m_substate);
+ logerror("BUG: Unknown substate %02x in read_sectors, aborting command\n", m_substate);
set_command_done(TC_DATAERR);
cont = ERROR;
}
@@ -1794,9 +1850,10 @@ void hdc92x4_device::read_sectors()
/*
READ TRACK
Read all ID and data fields as they appear on the track. Command 5A only
- transmits the ID fields via DMA, which 5B transmits all ID and data fields.
- Note that the specifications do not mention any gaps to be transmitted as
- well.
+ transmits the ID fields via DMA, while 5B transmits all ID and data fields.
+ Apart from the ID fields and the data fields, the specs [1] and [2] do not
+ mention any further transmitted data, so this is not a verbatim copy of
+ the track.
Command word
@@ -1810,7 +1867,7 @@ void hdc92x4_device::read_track()
{
if (m_substate == UNDEF)
{
- if (TRACE_READTRACK) logerror("%s: READ TRACK command %02x, head = %d\n", tag(), current_command(), desired_head());
+ if (TRACE_READTRACK) logerror("READ TRACK command %02x, head = %d\n", current_command(), desired_head());
dma_address_out(m_register_w[DMA23_16], m_register_w[DMA15_8], m_register_w[DMA7_0]);
m_transfer_enabled = (current_command() & 1)!=0;
}
@@ -1821,7 +1878,7 @@ void hdc92x4_device::read_track()
switch (m_substate)
{
case WAITINDEX0:
- if (TRACE_READTRACK && TRACE_DETAIL) logerror("%s: Read track - waiting for index hole\n", tag());
+ if (TRACE_READTRACK && TRACE_DETAIL) logerror("Read track - waiting for index hole\n");
if (!index_hole())
{
m_substate = WAITINDEX1;
@@ -1830,7 +1887,7 @@ void hdc92x4_device::read_track()
else
{
// We're above the index hole; wait for the index line going down
- if (TRACE_READTRACK && TRACE_DETAIL) logerror("%s: Index hole just passing by ... waiting for next\n", tag());
+ if (TRACE_READTRACK && TRACE_DETAIL) logerror("Index hole just passing by ... waiting for next\n");
wait_line(INDEX_LINE, ASSERT_LINE, WAITINDEX1, false);
cont = WAIT;
}
@@ -1841,12 +1898,12 @@ void hdc92x4_device::read_track()
cont = WAIT;
break;
case TRACKSTART:
- if (TRACE_READTRACK && TRACE_DETAIL) logerror("%s: Read track - index hole arrived\n", tag());
+ if (TRACE_READTRACK && TRACE_DETAIL) logerror("Read track - index hole arrived\n");
live_start(READ_TRACK);
cont = WAIT;
break;
case TRACKDONE:
- if (TRACE_READTRACK && TRACE_SUBSTATES) logerror("%s: Track reading done\n", tag());
+ if (TRACE_READTRACK && TRACE_SUBSTATES) logerror("Track reading done\n");
cont = SUCCESS;
m_out_dmarq(CLEAR_LINE);
m_out_dip(CLEAR_LINE);
@@ -1868,12 +1925,28 @@ void hdc92x4_device::read_track()
1. Before starting the command, the user program must have set up a
sector sequence table in the controller RAM (located on the PCB):
+
+ 9224: Floppy or generic HD
+ (cylinder, head, sector1, size) (4 bytes)
+ (cylinder, head, sector2, size) ...
+
+ 9224: ST-506 HD
+ (cylinder, head, sector1) (3 bytes)
+ (cylinder, head, sector2) ...
+
+ ---------------------------
+
+ 9234: FM Floppy
+ (cylinder, head, sector1, size) (4 bytes)
+ (cylinder, head, sector2, size) ...
+
+ 9234: PC-AT
+ (ident, cylinder, head, sector1) (4 bytes)
+ (ident, cylinder, head, sector2) ...
+
+ 9234: MFM Floppy or generic HD
(ident, cylinder, head, sector1, size) (5 bytes)
- (ident, cylinder, head, sector2, size)
- (ident, cylinder, head, sector3, size)
- ...
- ident is not required for floppy FM operation. size is not required
- for IBM AT-compatible hard disks.
+ (ident, cylinder, head, sector2, size) ...
2. The DMA registers must point to the beginning of the table
@@ -1918,7 +1991,7 @@ void hdc92x4_device::format_track()
{
if (m_substate == UNDEF)
{
- if (TRACE_FORMAT) logerror("%s: FORMAT TRACK command %02x, head = %d\n", tag(), current_command(), desired_head());
+ if (TRACE_FORMAT) logerror("FORMAT TRACK command %02x, head = %d\n", current_command(), desired_head());
m_substate = WAITINDEX0;
m_deleted = (current_command() & 0x10)!=0;
m_reduced_write_current = (current_command() & 0x08)!=0;
@@ -1935,13 +2008,27 @@ void hdc92x4_device::format_track()
if (TRACE_FORMAT && TRACE_DETAIL)
{
- logerror("%s: GAP0 length = %d\n", tag(), m_gap0_size);
- logerror("%s: GAP1 length = %d\n", tag(), m_gap1_size);
- logerror("%s: GAP2 length = %d\n", tag(), m_gap2_size);
- logerror("%s: GAP3 length = %d\n", tag(), m_gap3_size);
- logerror("%s: Sync size = %d\n", tag(), m_sync_size);
- logerror("%s: Sector count = %d\n", tag(), m_sector_count);
- logerror("%s: Sector size = %d\n", tag(), m_sector_size);
+ logerror("GAP0 length = %d\n", m_gap0_size);
+ logerror("GAP1 length = %d\n", m_gap1_size);
+ logerror("GAP2 length = %d\n", m_gap2_size);
+ logerror("GAP3 length = %d\n", m_gap3_size);
+ logerror("Sync size = %d\n", m_sync_size);
+ logerror("Sector count = %d\n", m_sector_count);
+ logerror("Sector size = %d\n", m_sector_size);
+ }
+
+ if (TRACE_FORMAT)
+ {
+ if (!m_is_hdc9234 && (m_selected_drive_type==TYPE_ST))
+ {
+ // For ST-506 mode (9224), GAP0 and GAP1 should be equal [1]
+ if (m_gap0_size != m_gap1_size)
+ logerror("Warning: GAP0 (%d) and GAP1 (%d) must be equal in ST-506 mode.\n", m_gap0_size, m_gap1_size);
+
+ // For ST-506 mode (9224), sector size is 512 [1]
+ if (m_sector_size != 512)
+ logerror("Warning: Sector size (%d) must be 512 in ST-506 mode.\n", m_sector_size);
+ }
}
dma_address_out(m_register_r[CURRENT_IDENT], m_register_r[CURRENT_CYLINDER], m_register_r[CURRENT_HEAD]);
@@ -1953,7 +2040,7 @@ void hdc92x4_device::format_track()
switch (m_substate)
{
case WAITINDEX0:
- if (TRACE_FORMAT && TRACE_DETAIL) logerror("%s: Format track; looking for track start\n", tag());
+ if (TRACE_FORMAT && TRACE_DETAIL) logerror("Format track; looking for track start\n");
if (!index_hole())
{
m_substate = WAITINDEX1;
@@ -1962,24 +2049,24 @@ void hdc92x4_device::format_track()
else
{
// We're above the index hole right now, so wait for the line going down
- if (TRACE_FORMAT && TRACE_DETAIL) logerror("%s: Index hole just passing by ... \n", tag());
+ if (TRACE_FORMAT && TRACE_DETAIL) logerror("Index hole just passing by ... \n");
wait_line(INDEX_LINE, CLEAR_LINE, WAITINDEX1, false);
cont = WAIT;
}
break;
case WAITINDEX1:
// Waiting for the next rising edge
- if (TRACE_FORMAT && TRACE_DETAIL) logerror("%s: Waiting for next index hole\n", tag());
+ if (TRACE_FORMAT && TRACE_DETAIL) logerror("Waiting for next index hole\n");
wait_line(INDEX_LINE, ASSERT_LINE, TRACKSTART, false);
cont = WAIT;
break;
case TRACKSTART:
- if (TRACE_FORMAT && TRACE_DETAIL) logerror("%s: Format track - index hole arrived\n", tag());
+ if (TRACE_FORMAT && TRACE_DETAIL) logerror("Format track - index hole arrived\n");
live_start(FORMAT_TRACK);
cont = WAIT;
break;
case TRACKDONE:
- if (FORMAT_TRACK && TRACE_SUBSTATES) logerror("%s: Track writing done\n", tag());
+ if (FORMAT_TRACK && TRACE_SUBSTATES) logerror("Track writing done\n");
cont = SUCCESS;
break;
}
@@ -2004,34 +2091,44 @@ void hdc92x4_device::format_track()
Command word
- 7 6 5 4 3 2 1 0
+ Physical:
+-----+------+-------+------+-----+-----+-----+------+
- | 1 |NoSeek|Logical|DelMrk|RedWC| Precompensation |
+ | 1 |NoSeek| 0 |DelMrk|RedWC| Precompensation |
+ +-----+------+-------+------+-----+-----+-----+------+
+
+ Logical:
+ +-----+------+-------+------+-----+-----+-----+------+
+ | 1 |Bypass| 1 |DelMrk|RedWC| Precompensation | 9224
+ +-----+------+-------+------+-----+-----+-----+------+
+ +-----+------+-------+------+-----+-----+-----+------+
+ | 1 |NoSeek| 1 |DelMrk|RedWC| Precompensation | 9234
+-----+------+-------+------+-----+-----+-----+------+
*/
void hdc92x4_device::write_sectors()
{
- m_logical = (current_command() & 0x20)!=0;
+ int cont = NEXT;
+ bool implied_seek = (current_command() & 0x40)==0;
if (m_substate == UNDEF)
{
- if (TRACE_WRITE) logerror("%s: WRITE SECTORS %s command %02x, CHS=(%d,%d,%d)\n", tag(), m_logical? "LOGICAL" : "PHYSICAL", current_command(), desired_cylinder(), desired_head(), desired_sector());
+ // Command init
+ m_logical = (current_command() & 0x20)!=0;
+ if (TRACE_WRITE) logerror("WRITE SECTORS %s command %02x, CHS=(%d,%d,%d)\n", m_logical? "LOGICAL" : "PHYSICAL", current_command(), desired_cylinder(), desired_head(), desired_sector());
+
m_multi_sector = (m_register_w[SECTOR_COUNT] != 1);
m_substate = READ_ID;
-
+ m_bypass = !m_is_hdc9234 && (current_command() & 0x40)!=0;
m_deleted = (current_command() & 0x10)!=0;
m_reduced_write_current = (current_command() & 0x08)!=0;
m_precompensation = (current_command() & 0x07);
// Important for DATA TRANSFER
m_transfer_enabled = true;
- // Something interesting here:
- //
- // The values for sync and gap2 are passed to the formatting routing
- // but how do we know their values right now, when we are writing sectors?
- // Since this is not clearly stated in the specification, we have to
- // use the default values here
- // Actually, why can we choose that value for formatting in the first place?
+ // For formatting, the values for GAP2 and SYNC can be set as parameters.
+ // However, these areas must be rewritten during sector writing, and
+ // there is no way to specify these values for that operation. It seems
+ // to be a design feature of the 92x4 that does not make sense at all.
+ // We just assume the standard values here.
if (using_floppy())
{
@@ -2048,9 +2145,6 @@ void hdc92x4_device::write_sectors()
m_first_sector_found = false;
}
- int cont = NEXT;
- bool implied_seek = (current_command() & 0x40)==0;
-
while (cont == NEXT)
{
// We're dispatching by substate value range
@@ -2067,7 +2161,7 @@ void hdc92x4_device::write_sectors()
data_transfer(cont);
break;
default:
- logerror("%s: BUG: Unknown substate %02x in write_sectors, aborting command\n", tag(), m_substate);
+ logerror("BUG: Unknown substate %02x in write_sectors, aborting command\n", m_substate);
set_command_done(TC_DATAERR);
cont = ERROR;
}
@@ -2146,7 +2240,7 @@ bool hdc92x4_device::found_mark(int state)
*/
void hdc92x4_device::live_start(int state)
{
- if (TRACE_LIVE) logerror("%s: [%s] Live start substate=%02x\n", tag(), ttsn().c_str(), state);
+ if (TRACE_LIVE) logerror("[%s] Live start substate=%02x\n", ttsn().c_str(), state);
m_live_state.time = machine().time();
m_live_state.state = state;
m_live_state.next_state = -1;
@@ -2167,7 +2261,7 @@ void hdc92x4_device::live_start(int state)
live_run();
m_last_live_state = UNDEF;
- if (TRACE_LIVE) logerror("%s: [%s] Live start end\n", tag(), ttsn().c_str()); // delete
+ if (TRACE_LIVE) logerror("[%s] Live start end\n", ttsn().c_str()); // delete
}
void hdc92x4_device::live_run()
@@ -2194,9 +2288,9 @@ void hdc92x4_device::live_run_until(attotime limit)
if (TRACE_LIVE)
{
if (limit == attotime::never)
- logerror("%s: [%s live] live_run, live_state=%02x, mode=%s\n", tag(), tts(m_live_state.time).c_str(), m_live_state.state, fm_mode()? "FM":"MFM");
+ logerror("[%s live] live_run, live_state=%02x, mode=%s\n", tts(m_live_state.time).c_str(), m_live_state.state, fm_mode()? "FM":"MFM");
else
- logerror("%s: [%s live] live_run until %s, live_state=%02x, mode=%s\n", tag(), tts(m_live_state.time).c_str(), tts(limit).c_str(), m_live_state.state, fm_mode()? "FM":"MFM");
+ logerror("[%s live] live_run until %s, live_state=%02x, mode=%s\n", tts(m_live_state.time).c_str(), tts(limit).c_str(), m_live_state.state, fm_mode()? "FM":"MFM");
}
if (limit == attotime::never)
@@ -2228,7 +2322,7 @@ void hdc92x4_device::live_run_until(attotime limit)
if (TRACE_LIVE && m_last_live_state != SEARCH_IDAM)
{
- logerror("%s: [%s live] SEARCH_IDAM [limit %s]\n", tag(),tts(m_live_state.time).c_str(), tts(limit).c_str());
+ logerror("[%s live] SEARCH_IDAM [limit %s]\n",tts(m_live_state.time).c_str(), tts(limit).c_str());
m_last_live_state = m_live_state.state;
}
@@ -2237,14 +2331,14 @@ void hdc92x4_device::live_run_until(attotime limit)
if (read_one_bit(limit))
{
- if (TRACE_LIVE) logerror("%s: [%s live] SEARCH_IDAM limit reached\n", tag(), tts(m_live_state.time).c_str());
+ if (TRACE_LIVE) logerror("[%s live] SEARCH_IDAM limit reached\n", tts(m_live_state.time).c_str());
return;
}
- // logerror("%s: SEARCH_IDAM\n", tts(m_live_state.time).c_str());
- if (TRACE_SHIFT) logerror("%s: [%s live] shift = %04x data=%02x c=%d\n", tag(), tts(m_live_state.time).c_str(), m_live_state.shift_reg,
+ // logerror("SEARCH_IDAM\n", tts(m_live_state.time).c_str());
+ if (TRACE_SHIFT) logerror("[%s live] shift = %04x data=%02x c=%d\n", tts(m_live_state.time).c_str(), m_live_state.shift_reg,
get_data_from_encoding(m_live_state.shift_reg), m_live_state.bit_counter);
- // [1] p. 9: The ID field sync mark must be found within 33,792 byte times
+ // [1,2]: The ID field sync mark must be found within 33,792 byte times
if (m_live_state.bit_count_total > 33792*16)
{
// Desired sector not found within time
@@ -2260,7 +2354,7 @@ void hdc92x4_device::live_run_until(attotime limit)
// MFM case
if (m_live_state.shift_reg == 0x4489)
{
- if (TRACE_LIVE) logerror("%s: [%s live] Found an A1 mark\n", tag(),tts(m_live_state.time).c_str());
+ if (TRACE_LIVE) logerror("[%s live] Found an A1 mark\n",tts(m_live_state.time).c_str());
preset_crc(m_live_state, 0xa1);
m_live_state.data_separator_phase = false;
m_live_state.bit_counter = 0;
@@ -2273,7 +2367,7 @@ void hdc92x4_device::live_run_until(attotime limit)
// FM case
if (m_live_state.shift_reg == 0xf57e)
{
- if (TRACE_LIVE) logerror("%s: SEARCH_IDAM: IDAM found\n", tag());
+ if (TRACE_LIVE) logerror("SEARCH_IDAM: IDAM found\n");
preset_crc(m_live_state, 0xfe);
m_live_state.data_separator_phase = false;
m_live_state.bit_counter = 0;
@@ -2296,14 +2390,14 @@ void hdc92x4_device::live_run_until(attotime limit)
if (TRACE_LIVE && m_last_live_state != READ_TWO_MORE_A1_IDAM)
{
- logerror("%s: [%s live] READ_TWO_MORE_A1\n", tag(),tts(m_live_state.time).c_str());
+ logerror("[%s live] READ_TWO_MORE_A1\n",tts(m_live_state.time).c_str());
m_last_live_state = m_live_state.state;
}
// Beyond time limit?
if (read_one_bit(limit)) return;
- if (TRACE_SHIFT) logerror("%s: [%s live] shift = %04x data=%02x c=%d\n", tag(), tts(m_live_state.time).c_str(), m_live_state.shift_reg,
+ if (TRACE_SHIFT) logerror("[%s live] shift = %04x data=%02x c=%d\n", tts(m_live_state.time).c_str(), m_live_state.shift_reg,
get_data_from_encoding(m_live_state.shift_reg), m_live_state.bit_counter);
if (m_live_state.bit_count_total > 33792*16)
@@ -2325,12 +2419,12 @@ void hdc92x4_device::live_run_until(attotime limit)
m_live_state.state = SEARCH_IDAM;
}
else
- if (TRACE_LIVE) logerror("%s: [%s live] Found an A1 mark\n", tag(),tts(m_live_state.time).c_str());
+ if (TRACE_LIVE) logerror("[%s live] Found an A1 mark\n",tts(m_live_state.time).c_str());
// Continue
break;
}
- if (TRACE_LIVE) logerror("%s: [%s live] Found data value %02X\n", tag(),tts(m_live_state.time).c_str(), m_live_state.data_reg);
+ if (TRACE_LIVE) logerror("[%s live] Found data value %02X\n",tts(m_live_state.time).c_str(), m_live_state.data_reg);
// Check for ident field (fe, ff, fd, fc)
if ((m_live_state.data_reg & 0xfc) != 0xfc)
@@ -2339,9 +2433,9 @@ void hdc92x4_device::live_run_until(attotime limit)
if (TRACE_LIVE)
{
if (m_live_state.data_reg == 0xf8 || m_live_state.data_reg == 0xfb)
- logerror("%s: [%s live] Looks like a DAM; continue to next mark\n", tag(), tts(m_live_state.time).c_str());
+ logerror("[%s live] Looks like a DAM; continue to next mark\n", tts(m_live_state.time).c_str());
else
- logerror("%s: [%s live] Missing ident data after A1A1A1, and it was not DAM; format corrupt?\n", tag(), tts(m_live_state.time).c_str());
+ logerror("[%s live] Missing ident data after A1A1A1, and it was not DAM; format corrupt?\n", tts(m_live_state.time).c_str());
}
m_live_state.state = SEARCH_IDAM;
break;
@@ -2357,7 +2451,7 @@ void hdc92x4_device::live_run_until(attotime limit)
case READ_ID_FIELDS_INTO_REGS:
if (TRACE_LIVE && m_last_live_state != READ_ID_FIELDS_INTO_REGS)
{
- logerror("%s: [%s live] READ_ID_FIELDS_INTO_REGS\n", tag(),tts(m_live_state.time).c_str());
+ logerror("[%s live] READ_ID_FIELDS_INTO_REGS\n",tts(m_live_state.time).c_str());
m_last_live_state = m_live_state.state;
}
@@ -2370,7 +2464,7 @@ void hdc92x4_device::live_run_until(attotime limit)
slot = (m_live_state.bit_counter >> 4)-1;
- if (TRACE_LIVE) logerror("%s: slot %d = %02x, crc=%04x\n", tag(), slot, m_live_state.data_reg, m_live_state.crc);
+ if (TRACE_LIVE) logerror("slot %d = %02x, crc=%04x\n", slot, m_live_state.data_reg, m_live_state.crc);
m_register_r[register_number(slot)] = m_live_state.data_reg;
@@ -2394,7 +2488,7 @@ void hdc92x4_device::live_run_until(attotime limit)
case SEARCH_DAM:
if (TRACE_LIVE && m_last_live_state != SEARCH_DAM)
{
- logerror("%s: [%s live] SEARCH_DAM\n", tag(),tts(m_live_state.time).c_str());
+ logerror("[%s live] SEARCH_DAM\n",tts(m_live_state.time).c_str());
m_last_live_state = m_live_state.state;
}
@@ -2403,21 +2497,21 @@ void hdc92x4_device::live_run_until(attotime limit)
if(read_one_bit(limit))
return;
- if (TRACE_SHIFT) logerror("%s: [%s live] shift = %04x data=%02x c=%d\n", tag(), tts(m_live_state.time).c_str(), m_live_state.shift_reg,
+ if (TRACE_SHIFT) logerror("[%s live] shift = %04x data=%02x c=%d\n", tts(m_live_state.time).c_str(), m_live_state.shift_reg,
get_data_from_encoding(m_live_state.shift_reg), m_live_state.bit_counter);
if (!fm_mode())
{ // MFM
if(m_live_state.bit_counter > 43*16)
{
- if (TRACE_FAIL) logerror("%s: SEARCH_DAM failed\n", tag());
+ if (TRACE_FAIL) logerror("SEARCH_DAM failed\n");
wait_for_realtime(SEARCH_DAM_FAILED);
return;
}
if (m_live_state.bit_counter >= 28*16 && m_live_state.shift_reg == 0x4489)
{
- if (TRACE_LIVE) logerror("%s: [%s live] Found an A1 mark\n", tag(),tts(m_live_state.time).c_str());
+ if (TRACE_LIVE) logerror("[%s live] Found an A1 mark\n",tts(m_live_state.time).c_str());
preset_crc(m_live_state, 0xa1);
m_live_state.data_separator_phase = false;
m_live_state.bit_counter = 0;
@@ -2428,18 +2522,30 @@ void hdc92x4_device::live_run_until(attotime limit)
{ // FM
if (m_live_state.bit_counter > 23*16)
{
- if (TRACE_FAIL) logerror("%s: SEARCH_DAM failed\n", tag());
+ if (TRACE_FAIL) logerror("SEARCH_DAM failed\n");
wait_for_realtime(SEARCH_DAM_FAILED);
return;
}
- if (m_live_state.bit_counter >= 11*16 && (m_live_state.shift_reg == 0xf56a || m_live_state.shift_reg == 0xf56b ||
- m_live_state.shift_reg == 0xf56e || m_live_state.shift_reg == 0xf56f)) {
- if (TRACE_LIVE) logerror("%s: SEARCH_DAM: found DAM = %04x\n", tag(), m_live_state.shift_reg);
- preset_crc(m_live_state, m_live_state.shift_reg);
- m_live_state.data_separator_phase = false;
- m_live_state.bit_counter = 0;
- m_live_state.state = READ_SECTOR_DATA;
+ if (m_live_state.bit_counter >= 11*16)
+ {
+ if ((m_live_state.shift_reg & 0xfffe) == 0xf56a) {
+ if (TRACE_LIVE) logerror("SEARCH_DAM: found DEL DAM = %04x\n", m_live_state.shift_reg);
+ preset_crc(m_live_state, m_live_state.shift_reg);
+ m_live_state.data_separator_phase = false;
+ m_live_state.bit_counter = 0;
+ m_live_state.state = READ_SECTOR_DATA;
+ set_bits(m_register_r[CHIP_STATUS], CS_DELDATA, true);
+ }
+ else {
+ if ((m_live_state.shift_reg & 0xfffe) == 0xf56e) {
+ if (TRACE_LIVE) logerror("SEARCH_DAM: found DAM = %04x\n", m_live_state.shift_reg);
+ preset_crc(m_live_state, m_live_state.shift_reg);
+ m_live_state.data_separator_phase = false;
+ m_live_state.bit_counter = 0;
+ m_live_state.state = READ_SECTOR_DATA;
+ }
+ }
}
}
break;
@@ -2447,14 +2553,14 @@ void hdc92x4_device::live_run_until(attotime limit)
case READ_TWO_MORE_A1_DAM: {
if (TRACE_LIVE && m_last_live_state != READ_TWO_MORE_A1_DAM)
{
- logerror("%s: [%s live] READ_TWO_MORE_A1_DAM\n", tag(),tts(m_live_state.time).c_str());
+ logerror("[%s live] READ_TWO_MORE_A1_DAM\n",tts(m_live_state.time).c_str());
m_last_live_state = m_live_state.state;
}
if(read_one_bit(limit))
return;
- if (TRACE_SHIFT) logerror("%s: [%s live] shift = %04x data=%02x c=%d\n", tag(), tts(m_live_state.time).c_str(), m_live_state.shift_reg,
+ if (TRACE_SHIFT) logerror("[%s live] shift = %04x data=%02x c=%d\n", tts(m_live_state.time).c_str(), m_live_state.shift_reg,
get_data_from_encoding(m_live_state.shift_reg), m_live_state.bit_counter);
// Repeat until we have collected 16 bits
@@ -2471,23 +2577,23 @@ void hdc92x4_device::live_run_until(attotime limit)
return;
}
else
- if (TRACE_LIVE) logerror("%s: [%s live] Found an A1 mark\n", tag(),tts(m_live_state.time).c_str());
+ if (TRACE_LIVE) logerror("[%s live] Found an A1 mark\n",tts(m_live_state.time).c_str());
// Continue
break;
}
- if (TRACE_LIVE) logerror("%s: [%s live] Found data value %02X\n", tag(),tts(m_live_state.time).c_str(), m_live_state.data_reg);
+ if (TRACE_LIVE) logerror("[%s live] Found data value %02X\n",tts(m_live_state.time).c_str(), m_live_state.data_reg);
if ((m_live_state.data_reg & 0xff) == 0xf8)
{
- if (TRACE_LIVE) logerror("%s: Found deleted data mark F8 after DAM sync\n", tag());
+ if (TRACE_LIVE) logerror("Found deleted data mark F8 after DAM sync\n");
set_bits(m_register_r[CHIP_STATUS], CS_DELDATA, true);
}
else
{
if ((m_live_state.data_reg & 0xff) != 0xfb)
{
- if (TRACE_FAIL) logerror("%s: Missing FB/F8 data mark after DAM sync\n", tag());
+ if (TRACE_FAIL) logerror("Missing FB/F8 data mark after DAM sync\n");
wait_for_realtime(SEARCH_DAM_FAILED);
return;
}
@@ -2498,7 +2604,7 @@ void hdc92x4_device::live_run_until(attotime limit)
break;
}
case SEARCH_DAM_FAILED:
- if (TRACE_FAIL) logerror("%s: SEARCH_DAM failed\n", tag());
+ if (TRACE_FAIL) logerror("SEARCH_DAM failed\n");
m_live_state.state = IDLE;
return;
@@ -2506,14 +2612,14 @@ void hdc92x4_device::live_run_until(attotime limit)
{
if (TRACE_LIVE && m_last_live_state != READ_SECTOR_DATA)
{
- logerror("%s: [%s live] READ_SECTOR_DATA\n", tag(),tts(m_live_state.time).c_str());
+ logerror("[%s live] READ_SECTOR_DATA\n",tts(m_live_state.time).c_str());
m_last_live_state = m_live_state.state;
}
if(read_one_bit(limit))
return;
- // Request bus release at the first bit of each byte (floppy; [1], fig 5 and 6)
+ // Request bus release at the first bit of each byte (floppy; [2], fig 5 and 6)
if (m_transfer_enabled)
{
if ((m_live_state.bit_counter & 15)== 1)
@@ -2531,7 +2637,7 @@ void hdc92x4_device::live_run_until(attotime limit)
// Repeat until we have collected 16 bits
if (m_live_state.bit_counter & 15) break;
- if (TRACE_LIVE) logerror("%s: [%s live] Found data value %02X, CRC=%04x\n", tag(),tts(m_live_state.time).c_str(), m_live_state.data_reg, m_live_state.crc);
+ if (TRACE_LIVE) logerror("[%s live] Found data value %02X, CRC=%04x\n",tts(m_live_state.time).c_str(), m_live_state.data_reg, m_live_state.crc);
int slot = (m_live_state.bit_counter >> 4)-1;
if (slot < sector_size())
@@ -2552,7 +2658,7 @@ void hdc92x4_device::live_run_until(attotime limit)
}
else
{
- if (TRACE_LIVE) logerror("%s: [%s live] Sector read completed\n", tag(),tts(m_live_state.time).c_str());
+ if (TRACE_LIVE) logerror("[%s live] Sector read completed\n",tts(m_live_state.time).c_str());
wait_for_realtime(IDLE);
}
return;
@@ -2564,14 +2670,14 @@ void hdc92x4_device::live_run_until(attotime limit)
case READ_SECTOR_DATA_CONT:
if (TRACE_LIVE && m_last_live_state != READ_SECTOR_DATA_CONT)
{
- logerror("%s: [%s live] READ_SECTOR_DATA_CONT\n", tag(),tts(m_live_state.time).c_str());
+ logerror("[%s live] READ_SECTOR_DATA_CONT\n",tts(m_live_state.time).c_str());
m_last_live_state = m_live_state.state;
}
// Did the system CPU send the DMA ACK in the meantime?
if ((m_register_r[INT_STATUS] & ST_OVRUN)!=0)
{
- if (TRACE_FAIL) logerror("%s: No DMA ACK - buffer overrun\n", tag());
+ if (TRACE_FAIL) logerror("No DMA ACK - buffer overrun\n");
set_bits(m_register_r[INT_STATUS], TC_DATAERR, true);
m_live_state.state = IDLE;
return;
@@ -2610,13 +2716,13 @@ void hdc92x4_device::live_run_until(attotime limit)
// 5. Write the CRC bytes
if (TRACE_LIVE)
- logerror("%s: [%s live] WRITE_DAM_AND_SECTOR\n", tag(), tts(m_live_state.time).c_str());
+ logerror("[%s live] WRITE_DAM_AND_SECTOR\n", tts(m_live_state.time).c_str());
skip_on_track(m_gap2_size, WRITE_DAM_SYNC);
break;
case WRITE_DAM_SYNC:
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write sync zeros\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Write sync zeros\n");
// Clear the overrun/underrun flag
set_bits(m_register_r[INT_STATUS], ST_OVRUN, false);
@@ -2624,12 +2730,12 @@ void hdc92x4_device::live_run_until(attotime limit)
break;
case WRITE_A1:
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write three A1\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Write three A1\n");
write_on_track(0x4489, 3, WRITE_DATAMARK);
break;
case WRITE_DATAMARK:
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write data mark and sector contents\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Write data mark and sector contents\n");
if (fm_mode())
{
// Init the CRC for the DAM and sector
@@ -2707,7 +2813,7 @@ void hdc92x4_device::live_run_until(attotime limit)
// byte in two iterations to get both
if (m_live_state.byte_counter > 0)
{
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write CRC\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Write CRC\n");
m_live_state.byte_counter--;
write_on_track(encode((m_live_state.crc >> 8) & 0xff), 1, WRITE_DATA_CRC);
}
@@ -2721,7 +2827,7 @@ void hdc92x4_device::live_run_until(attotime limit)
case WRITE_DONE:
if (m_substate == DATA_TRANSFER_WRITE)
{
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write sector complete\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Write sector complete\n");
m_pll.stop_writing(m_floppy, m_live_state.time);
m_live_state.state = IDLE;
return;
@@ -2752,19 +2858,19 @@ void hdc92x4_device::live_run_until(attotime limit)
// ==================================================
case FORMAT_TRACK:
- if (TRACE_LIVE) logerror("%s: FORMAT_TRACK\n", tag());
+ if (TRACE_LIVE) logerror("FORMAT_TRACK\n");
m_live_state.state = WRITE_GAP0;
m_pll.start_writing(m_live_state.time);
break;
case WRITE_GAP0:
// GAP0 length is in DMA7_0 (negated, 2s comp)
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Writing GAP0\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Writing GAP0\n");
write_on_track(encode(fm_mode()? 0xff : 0x4e), m_gap0_size, WRITE_IXAM_SYNC);
break;
case WRITE_IXAM_SYNC:
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Writing IXAM sync\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Writing IXAM sync\n");
write_on_track(encode(0x00), m_sync_size, WRITE_IXAM);
break;
@@ -2772,7 +2878,7 @@ void hdc92x4_device::live_run_until(attotime limit)
// FM: FC with clock D7 = 1111 -111 -111 1010
// MFM: C2 = 11000010
// 0101 0010 -010 0100
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Writing IXAM\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Writing IXAM\n");
if (fm_mode())
write_on_track(0xf77a, 1, WRITE_GAP1);
else
@@ -2787,7 +2893,7 @@ void hdc92x4_device::live_run_until(attotime limit)
case WRITE_GAP1:
// GAP1 length is in DMA15_8
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Writing GAP1\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Writing GAP1\n");
write_on_track(encode(fm_mode()? 0xff : 0x4e), m_gap1_size, WRITE_IDAM_SYNC);
break;
@@ -2796,7 +2902,7 @@ void hdc92x4_device::live_run_until(attotime limit)
// We assume it reads the bytes and writes them directly on the disk
case WRITE_IDAM_SYNC:
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Writing IDAM sync\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Writing IDAM sync\n");
write_on_track(encode(0x00), m_sync_size, WRITE_IDAM);
break;
@@ -2804,22 +2910,36 @@ void hdc92x4_device::live_run_until(attotime limit)
// Set the over/underrun flag and hope that it will be cleared before we enter the next state (after writing)
set_bits(m_register_r[INT_STATUS], ST_OVRUN, true);
m_out_dmarq(ASSERT_LINE);
+ // CRC covers the header starting at the FE (FM) or the first A1 (MFM)
+ preset_crc(m_live_state, 0);
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Writing IDAM and header\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Writing IDAM and header\n");
if (fm_mode())
{
- write_on_track(0xf57e, 1, WRITE_HEADER);
+ write_on_track(0xf57e, 1, WRITE_HEADER); // Write FE (IDAM+Ident)
m_live_state.byte_counter = 4;
}
else
{
- write_on_track(0x4489, 3, WRITE_HEADER);
+ write_on_track(0x4489, 3, (m_is_hdc9234)? WRITE_HEADER : WRITE_IDENT); // Write A1A1A1; ident follows in track layout data
m_live_state.byte_counter = 5;
}
- preset_crc(m_live_state, 0);
+ // note that the actual writing happens after the break
+ break;
+
+ case WRITE_IDENT:
+ // Only for 9224, MFM (there is no ident byte in the track layout)
+ write_on_track(encode(0xfe), 1, WRITE_HEADER); // Write FE
+ m_live_state.byte_counter--;
break;
case WRITE_HEADER:
+ // 9224: FM Floppy = track side sector size
+ // 9224: MFM Floppy = track side sector size
+
+ // 9234: FM floppy = track side sector size (FE already written)
+ // 9234: MFM floppy = ident track side sector size
+
if ((m_register_r[INT_STATUS] & ST_OVRUN)!=0)
// No DMA (we do not get access to the ID table); exit
m_live_state.state= NO_DMA_ACK;
@@ -2849,7 +2969,7 @@ void hdc92x4_device::live_run_until(attotime limit)
if (m_live_state.byte_counter > 0)
{
UINT8 crct = (m_live_state.crc >> 8) & 0xff;
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write CRC byte %02x\n", tag(), crct);
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Write CRC byte %02x\n", crct);
m_live_state.byte_counter--;
write_on_track(encode(crct), 1, WRITE_HEADER_CRC);
}
@@ -2859,13 +2979,13 @@ void hdc92x4_device::live_run_until(attotime limit)
break;
case WRITE_GAP2:
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Writing GAP2\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Writing GAP2\n");
write_on_track(encode(fm_mode()? 0xff : 0x4e), m_gap2_size, WRITE_DAM_SYNC);
break;
case WRITE_GAP3:
m_sector_count--;
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Writing GAP3\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Writing GAP3\n");
write_on_track(encode(fm_mode()? 0xff : 0x4e), m_gap3_size, (m_sector_count>0)? WRITE_IDAM_SYNC : WRITE_GAP4);
break;
@@ -2874,7 +2994,7 @@ void hdc92x4_device::live_run_until(attotime limit)
wait_line(INDEX_LINE, ASSERT_LINE, TRACKDONE, true);
if (TRACE_WRITE && TRACE_DETAIL && m_last_live_state != WRITE_GAP4)
{
- logerror("%s: Writing GAP4\n", tag());
+ logerror("Writing GAP4\n");
m_last_live_state = WRITE_GAP4;
}
// Write a single byte; when the index hole shows up, the live run will be aborted
@@ -2889,7 +3009,7 @@ void hdc92x4_device::live_run_until(attotime limit)
// Quite simple. Read the next ID fields, then the sector contents.
// Continue until the next index hole shows up (live_abort).
case READ_TRACK:
- if (TRACE_LIVE) logerror("%s: READ_TRACK\n", tag());
+ if (TRACE_LIVE) logerror("READ_TRACK\n");
m_live_state.state = READ_TRACK_ID;
break;
@@ -2903,17 +3023,24 @@ void hdc92x4_device::live_run_until(attotime limit)
case READ_TRACK_ID_DONE:
if ((m_register_r[INT_STATUS] & ST_OVRUN)!=0)
{
- if (TRACE_FAIL) logerror("%s: No DMA ACK - buffer overrun\n", tag());
+ if (TRACE_FAIL) logerror("No DMA ACK - buffer overrun\n");
set_bits(m_register_r[INT_STATUS], TC_DATAERR, true);
m_live_state.state = IDLE;
return;
}
- if (TRACE_LIVE) logerror("%s: READ_TRACK1\n", tag());
+ if (TRACE_LIVE) logerror("READ_TRACK1\n");
m_out_dip(ASSERT_LINE);
// Write the header via DMA
- for (int i=0; i < header_length(); i++)
+ // TODO: Does the FE byte belong to the ID fields? What about the
+ // CRC field? Specs do not clarify. Check with real controller.
+ // For now we return the same ID format as used for Format Track
+ // (with ident expect in FM mode, no CRC)
+ if (!fm_mode() && m_is_hdc9234)
+ m_out_dma(0, m_register_r[CURRENT_IDENT], 0xff);
+
+ for (int i=0; i <= header_length()-2; i++)
m_out_dma(0, m_register_r[register_number(i)], 0xff);
m_out_dip(CLEAR_LINE);
@@ -2929,14 +3056,14 @@ void hdc92x4_device::live_run_until(attotime limit)
// The pause is implemented by doing dummy reads on the floppy
if (read_one_bit(limit))
{
- if (TRACE_LIVE) logerror("%s: [%s live] return; limit=%s\n", tag(), tts(m_live_state.time).c_str(), tts(limit).c_str());
+ if (TRACE_LIVE) logerror("[%s live] return; limit=%s\n", tts(m_live_state.time).c_str(), tts(limit).c_str());
return;
}
// Repeat until we have collected 16 bits
if ((m_live_state.bit_counter & 15)==0)
{
- if (TRACE_READ && TRACE_DETAIL) logerror("%s: [%s live] Read byte %02x, repeat = %d\n", tag(), tts(m_live_state.time).c_str(), m_live_state.data_reg, m_live_state.repeat);
+ if (TRACE_READ && TRACE_DETAIL) logerror("[%s live] Read byte %02x, repeat = %d\n", tts(m_live_state.time).c_str(), m_live_state.data_reg, m_live_state.repeat);
wait_for_realtime(READ_TRACK_NEXT_BYTE);
return;
}
@@ -2982,14 +3109,14 @@ void hdc92x4_device::live_run_until(attotime limit)
break;
case NO_DMA_ACK:
- if (TRACE_FAIL) logerror("%s: No DMA ACK - buffer underrun\n", tag());
+ if (TRACE_FAIL) logerror("No DMA ACK - buffer underrun\n");
set_bits(m_register_r[INT_STATUS], TC_DATAERR, true);
m_pll.stop_writing(m_floppy, m_live_state.time);
m_live_state.state = IDLE;
return;
default:
- logerror("%s: Unknown live state: %02x\n", tag(), m_live_state.state);
+ logerror("Unknown live state: %02x\n", m_live_state.state);
m_last_live_state = m_live_state.state;
return;
}
@@ -3006,13 +3133,13 @@ void hdc92x4_device::live_run_until(attotime limit)
THIS IS THE HARDDISK-ONLY LIVE_RUN
NB: Although unlikely, hard disks may be recorded in FM format with this controller
- [1], section "Drive select", table
+ [2], section "Drive select", table
This is currently unsupported; hard disks are forced to MFM
*/
void hdc92x4_device::live_run_hd_until(attotime limit)
{
int slot = 0;
- if (TRACE_LIVE) logerror("%s: live_run_hd\n", tag());
+ if (TRACE_LIVE) logerror("live_run_hd\n");
if (m_live_state.state == IDLE || m_live_state.next_state != -1)
return;
@@ -3020,16 +3147,16 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
if (TRACE_LIVE)
{
if (limit == attotime::never)
- logerror("%s: [%s live] live_run_hd, live_state=%02x, mode=%s\n", tag(), tts(m_live_state.time).c_str(), m_live_state.state, fm_mode()? "FM":"MFM");
+ logerror("[%s live] live_run_hd, live_state=%02x, mode=%s\n", tts(m_live_state.time).c_str(), m_live_state.state, fm_mode()? "FM":"MFM");
else
- logerror("%s: [%s live] live_run_hd until %s, live_state=%02x, mode=%s\n", tag(), tts(m_live_state.time).c_str(), tts(limit).c_str(), m_live_state.state, fm_mode()? "FM":"MFM");
+ logerror("[%s live] live_run_hd until %s, live_state=%02x, mode=%s\n", tts(m_live_state.time).c_str(), tts(limit).c_str(), m_live_state.state, fm_mode()? "FM":"MFM");
}
// We did not specify an upper time bound, so we take the next index pulse
if (limit == attotime::never && m_harddisk != nullptr)
{
limit = m_harddisk->track_end_time();
- if (TRACE_LIVE) logerror("%s: [%s live] live_run_hd new limit %s\n", tag(), tts(m_live_state.time).c_str(), tts(limit).c_str());
+ if (TRACE_LIVE) logerror("[%s live] live_run_hd new limit %s\n", tts(m_live_state.time).c_str(), tts(limit).c_str());
}
while (true)
@@ -3039,7 +3166,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
case SEARCH_IDAM:
if (TRACE_LIVE && m_last_live_state != SEARCH_IDAM)
{
- logerror("%s: [%s live] SEARCH_IDAM [limit %s]\n", tag(),tts(m_live_state.time).c_str(), tts(limit).c_str());
+ logerror("[%s live] SEARCH_IDAM [limit %s]\n",tts(m_live_state.time).c_str(), tts(limit).c_str());
m_last_live_state = m_live_state.state;
}
@@ -3048,14 +3175,14 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
if (read_from_mfmhd(limit))
{
- if (TRACE_LIVE) logerror("%s: [%s live] SEARCH_IDAM limit reached\n", tag(), tts(m_live_state.time).c_str());
+ if (TRACE_LIVE) logerror("[%s live] SEARCH_IDAM limit reached\n", tts(m_live_state.time).c_str());
return;
}
if (TRACE_LIVE)
- if ((m_live_state.bit_counter & 0x000f)==0) logerror("%s: [%s live] Read %04x\n", tag(), tts(m_live_state.time).c_str(), m_live_state.shift_reg);
+ if ((m_live_state.bit_counter & 0x000f)==0) logerror("[%s live] Read %04x\n", tts(m_live_state.time).c_str(), m_live_state.shift_reg);
- // [1] p. 9: The ID field sync mark must be found within 33,792 byte times
+ // [1,2]: The ID field sync mark must be found within 33,792 byte times
if (m_live_state.bit_count_total > 33792*16)
{
// Desired sector not found within time
@@ -3068,7 +3195,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
if (found_mark(SEARCH_IDAM))
{
- if (TRACE_LIVE) logerror("%s: [%s live] Found an A1 mark\n", tag(), tts(m_live_state.time).c_str());
+ if (TRACE_LIVE) logerror("[%s live] Found an A1 mark\n", tts(m_live_state.time).c_str());
preset_crc(m_live_state, 0xa1);
m_live_state.data_separator_phase = false;
m_live_state.bit_counter = 0;
@@ -3099,9 +3226,9 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
if (TRACE_LIVE)
{
if (m_live_state.data_reg == 0xf8 || m_live_state.data_reg == 0xfb)
- logerror("%s: [%s live] Looks like a DAM; continue to next mark\n", tag(), tts(m_live_state.time).c_str());
+ logerror("[%s live] Looks like a DAM; continue to next mark\n", tts(m_live_state.time).c_str());
else
- logerror("%s: [%s live] Missing ident data after A1, and it was not DAM; format corrupt?\n", tag(), tts(m_live_state.time).c_str());
+ logerror("[%s live] Missing ident data after A1, and it was not DAM; format corrupt?\n", tts(m_live_state.time).c_str());
}
m_live_state.state = SEARCH_IDAM;
}
@@ -3116,7 +3243,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
case READ_ID_FIELDS_INTO_REGS:
if (TRACE_LIVE && m_last_live_state != READ_ID_FIELDS_INTO_REGS)
{
- logerror("%s: [%s live] READ_ID_FIELDS_INTO_REGS\n", tag(),tts(m_live_state.time).c_str());
+ logerror("[%s live] READ_ID_FIELDS_INTO_REGS\n",tts(m_live_state.time).c_str());
m_last_live_state = m_live_state.state;
}
@@ -3125,10 +3252,10 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
// Repeat until we have collected 16 bits
if (m_live_state.bit_counter & 15) break;
- if (TRACE_LIVE) logerror("%s: slot %d = %02x, crc=%04x\n", tag(), slot, m_live_state.data_reg, m_live_state.crc);
+ if (TRACE_LIVE) logerror("slot %d = %02x, crc=%04x\n", slot, m_live_state.data_reg, m_live_state.crc);
m_register_r[register_number(slot++)] = m_live_state.data_reg;
- if(slot > 5)
+ if (slot > header_length())
{
// We successfully read the ID fields; let's wait for the machine time to catch up.
if (reading_track())
@@ -3144,7 +3271,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
case SEARCH_DAM:
if (TRACE_LIVE && m_last_live_state != SEARCH_DAM)
{
- logerror("%s: [%s live] SEARCH_DAM\n", tag(),tts(m_live_state.time).c_str());
+ logerror("[%s live] SEARCH_DAM\n",tts(m_live_state.time).c_str());
m_last_live_state = m_live_state.state;
}
set_bits(m_register_r[CHIP_STATUS], CS_DELDATA, false);
@@ -3152,18 +3279,18 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
if (read_from_mfmhd(limit)) return;
if (TRACE_LIVE)
- if ((m_live_state.bit_counter & 15)==0) logerror("%s: [%s live] Read %04x\n", tag(), tts(m_live_state.time).c_str(), m_live_state.shift_reg);
+ if ((m_live_state.bit_counter & 15)==0) logerror("[%s live] Read %04x\n", tts(m_live_state.time).c_str(), m_live_state.shift_reg);
if (m_live_state.bit_counter > 30*16)
{
- if (TRACE_FAIL) logerror("%s: SEARCH_DAM failed\n", tag());
+ if (TRACE_FAIL) logerror("SEARCH_DAM failed\n");
wait_for_realtime(SEARCH_DAM_FAILED);
return;
}
if (found_mark(SEARCH_DAM))
{
- if (TRACE_LIVE) logerror("%s: [%s live] Found an A1 mark\n", tag(),tts(m_live_state.time).c_str());
+ if (TRACE_LIVE) logerror("[%s live] Found an A1 mark\n",tts(m_live_state.time).c_str());
preset_crc(m_live_state, 0xa1);
m_live_state.data_separator_phase = false;
m_live_state.bit_counter = 0;
@@ -3178,14 +3305,14 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
if ((m_live_state.data_reg & 0xff) == 0xf8)
{
- if (TRACE_LIVE) logerror("%s: [%s live] Found deleted data mark F8 after DAM sync\n", tag(), tts(m_live_state.time).c_str());
+ if (TRACE_LIVE) logerror("[%s live] Found deleted data mark F8 after DAM sync\n", tts(m_live_state.time).c_str());
set_bits(m_register_r[CHIP_STATUS], CS_DELDATA, true);
}
else
{
if ((m_live_state.data_reg & 0xff) != 0xfb)
{
- if (TRACE_FAIL) logerror("%s: [%s live] Missing FB/F8 data mark after DAM sync; found %04x\n", tag(), tts(m_live_state.time).c_str(), m_live_state.shift_reg);
+ if (TRACE_FAIL) logerror("[%s live] Missing FB/F8 data mark after DAM sync; found %04x\n", tts(m_live_state.time).c_str(), m_live_state.shift_reg);
wait_for_realtime(SEARCH_DAM_FAILED);
return;
}
@@ -3195,14 +3322,14 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
break;
case SEARCH_DAM_FAILED:
- if (TRACE_FAIL) logerror("%s: SEARCH_DAM failed\n", tag());
+ if (TRACE_FAIL) logerror("SEARCH_DAM failed\n");
m_live_state.state = IDLE;
return;
case READ_SECTOR_DATA:
if (TRACE_LIVE && m_last_live_state != READ_SECTOR_DATA)
{
- logerror("%s: [%s live] READ_SECTOR_DATA\n", tag(),tts(m_live_state.time).c_str());
+ logerror("[%s live] READ_SECTOR_DATA\n",tts(m_live_state.time).c_str());
m_last_live_state = m_live_state.state;
}
@@ -3222,7 +3349,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
if (m_live_state.bit_counter & 15) break;
slot = (m_live_state.bit_counter >> 4)-1;
- if (TRACE_LIVE) logerror("%s: [%s live] Found data value [%d/%d] = %02X, CRC=%04x\n", tag(),tts(m_live_state.time).c_str(), slot, sector_size(), m_live_state.data_reg, m_live_state.crc);
+ if (TRACE_LIVE) logerror("[%s live] Found data value [%d/%d] = %02X, CRC=%04x\n",tts(m_live_state.time).c_str(), slot, sector_size(), m_live_state.data_reg, m_live_state.crc);
if (slot < sector_size())
{
@@ -3250,7 +3377,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
}
else
{
- if (TRACE_LIVE) logerror("%s: [%s live] Sector read completed\n", tag(),tts(m_live_state.time).c_str());
+ if (TRACE_LIVE) logerror("[%s live] Sector read completed\n",tts(m_live_state.time).c_str());
wait_for_realtime(IDLE);
}
return;
@@ -3263,7 +3390,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
// Did the system CPU send the DMA ACK in the meantime?
if ((m_register_r[INT_STATUS] & ST_OVRUN)!=0)
{
- if (TRACE_FAIL) logerror("%s: No DMA ACK - buffer overrun\n", tag());
+ if (TRACE_FAIL) logerror("No DMA ACK - buffer overrun\n");
set_bits(m_register_r[INT_STATUS], TC_DATAERR, true);
m_live_state.state = IDLE;
return;
@@ -3277,7 +3404,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
m_out_dip(ASSERT_LINE);
m_out_dma(0, m_register_r[DATA], 0xff);
- if (TRACE_LIVE) logerror("%s: [%s live] Byte %02x sent via DMA\n", tag(),tts(m_live_state.time).c_str(), m_register_r[DATA] & 0xff);
+ if (TRACE_LIVE) logerror("[%s live] Byte %02x sent via DMA\n",tts(m_live_state.time).c_str(), m_register_r[DATA] & 0xff);
}
m_live_state.state = READ_SECTOR_DATA;
break;
@@ -3288,14 +3415,14 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
// The pause is implemented by doing dummy reads on the hard disk
if (read_from_mfmhd(limit))
{
- if (TRACE_LIVE) logerror("%s: [%s live] return; limit=%s\n", tag(), tts(m_live_state.time).c_str(), tts(limit).c_str());
+ if (TRACE_LIVE) logerror("[%s live] return; limit=%s\n", tts(m_live_state.time).c_str(), tts(limit).c_str());
return;
}
// Repeat until we have collected 16 bits
if ((m_live_state.bit_counter & 15)==0)
{
- if (TRACE_READ && TRACE_DETAIL) logerror("%s: [%s live] Read byte %02x, repeat = %d\n", tag(), tts(m_live_state.time).c_str(), m_live_state.data_reg, m_live_state.repeat);
+ if (TRACE_READ && TRACE_DETAIL) logerror("[%s live] Read byte %02x, repeat = %d\n", tts(m_live_state.time).c_str(), m_live_state.data_reg, m_live_state.repeat);
wait_for_realtime(READ_TRACK_NEXT_BYTE);
return;
}
@@ -3315,7 +3442,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
case WRITE_TRACK_BYTE:
if (write_to_mfmhd(limit))
{
- if (TRACE_LIVE) logerror("%s: [%s live] write limit reached\n", tag(), tts(m_live_state.time).c_str());
+ if (TRACE_LIVE) logerror("[%s live] write limit reached\n", tts(m_live_state.time).c_str());
return;
}
@@ -3346,13 +3473,13 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
// ======= HD sector write =====================================
case WRITE_DAM_AND_SECTOR:
- if (TRACE_LIVE) logerror("%s: [%s live] Skipping GAP2\n", tag(), tts(m_live_state.time).c_str());
+ if (TRACE_LIVE) logerror("[%s live] Skipping GAP2\n", tts(m_live_state.time).c_str());
skip_on_track(m_gap2_size, WRITE_DAM_SYNC);
break;
case WRITE_DAM_SYNC:
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write sync zeros\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Write sync zeros\n");
// Clear the overrun/underrun flag
set_bits(m_register_r[INT_STATUS], ST_OVRUN, false);
@@ -3360,12 +3487,12 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
break;
case WRITE_A1:
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write one A1\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Write one A1\n");
write_on_track(encode_a1_hd(), 1, WRITE_DATAMARK);
break;
case WRITE_DATAMARK:
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write data mark\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Write data mark\n");
// Init the CRC for the ident byte and sector
preset_crc(m_live_state, 0xa1); // only one A1
@@ -3394,7 +3521,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
}
else
{
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write sector byte, %d to go\n", tag(), m_live_state.byte_counter);
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Write sector byte, %d to go\n", m_live_state.byte_counter);
// This is hard disk, so set DIP only at the beginning
if (m_live_state.byte_counter == sector_size())
@@ -3433,7 +3560,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
case WRITE_DATA_CRC:
if (m_live_state.byte_counter > 0)
{
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write CRC\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Write CRC\n");
m_live_state.byte_counter--;
write_on_track(encode_hd((m_live_state.crc >> 8) & 0xff), 1, WRITE_DATA_CRC);
}
@@ -3446,7 +3573,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
case WRITE_DONE:
if (m_substate == DATA_TRANSFER_WRITE)
{
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write sector complete\n", tag());
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("Write sector complete\n");
m_live_state.state = IDLE;
return;
}
@@ -3464,7 +3591,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
// Read the next ID fields, then the sector contents.
// Continue until the next index hole shows up (live_abort).
case READ_TRACK:
- if (TRACE_LIVE) logerror("%s: READ_TRACK\n", tag());
+ if (TRACE_LIVE) logerror("READ_TRACK\n");
m_live_state.state = READ_TRACK_ID;
break;
@@ -3479,16 +3606,23 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
if ((m_register_r[INT_STATUS] & ST_OVRUN)!=0)
{
// We need an ACK right now, or the header bytes will be lost
- if (TRACE_FAIL) logerror("%s: No DMA ACK - buffer overrun\n", tag());
+ if (TRACE_FAIL) logerror("No DMA ACK - buffer overrun\n");
set_bits(m_register_r[INT_STATUS], TC_DATAERR, true);
m_live_state.state = IDLE;
return;
}
- if (TRACE_LIVE) logerror("%s: READ_TRACK_ID_DONE\n", tag());
+ if (TRACE_LIVE) logerror("READ_TRACK_ID_DONE\n");
m_out_dip(ASSERT_LINE);
// Write the header via DMA
- for (int i=0; i < header_length(); i++)
+ // TODO: Does the FE byte belong to the ID fields? What about the
+ // CRC field? Specs do not clarify. Check with real controller.
+ // For now we return the same ID format as used for Format Track
+ // (with ident expect in FM mode, no CRC)
+ if (m_is_hdc9234)
+ m_out_dma(0, m_register_r[CURRENT_IDENT], 0xff);
+
+ for (int i=0; i <= header_length()-2; i++)
m_out_dma(0, m_register_r[register_number(i)], 0xff);
// Continue with reading the sector data
@@ -3511,18 +3645,18 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
// Write GAP4 until the next pulse
// ==================================================
case FORMAT_TRACK:
- if (TRACE_LIVE) logerror("%s: FORMAT_TRACK\n", tag());
+ if (TRACE_LIVE) logerror("FORMAT_TRACK\n");
m_live_state.state = WRITE_GAP1;
break;
case WRITE_GAP1:
// GAP1 length is in DMA15_8
- if (TRACE_GAPS) logerror("%s: Writing GAP1; size=%d\n", tag(), m_gap1_size);
+ if (TRACE_GAPS) logerror("Writing GAP1; size=%d\n", m_gap1_size);
write_on_track(encode_hd(0x4e), m_gap1_size, WRITE_IDAM_SYNC);
break;
case WRITE_IDAM_SYNC:
- if (TRACE_GAPS) logerror("%s: Writing IDAM sync, size=%d\n", tag(), m_sync_size);
+ if (TRACE_GAPS) logerror("Writing IDAM sync, size=%d\n", m_sync_size);
write_on_track(encode_hd(0x00), m_sync_size, WRITE_IDAM);
break;
@@ -3530,13 +3664,29 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
// Set the over/underrun flag and hope that it will be cleared before we enter the next state (after writing)
set_bits(m_register_r[INT_STATUS], ST_OVRUN, true);
m_out_dmarq(ASSERT_LINE);
- if (TRACE_HEADER) logerror("%s: Writing IDAM and header: ", tag());
- write_on_track(encode_a1_hd(), 1, WRITE_HEADER);
- m_live_state.byte_counter = 5; // TODO: Check this for AT mode
preset_crc(m_live_state, 0);
+ if (TRACE_HEADER) logerror("Writing IDAM and header\n");
+ write_on_track(encode_a1_hd(), 1, (m_is_hdc9234)? WRITE_HEADER : WRITE_IDENT);
+ // AT mode does not use a size field; the sector size must
+ // be specified by call parameters
+ m_live_state.byte_counter = 5;
+ if (m_selected_drive_type==TYPE_AT) m_live_state.byte_counter--;
+ break;
+
+ case WRITE_IDENT:
+ // 9224 does not allow for a user-defined ident field
+ write_on_track(encode_hd(0xfe), 1, WRITE_HEADER);
+ // ST type does not use a size field
+ if (m_selected_drive_type==TYPE_ST) m_live_state.byte_counter--;
break;
case WRITE_HEADER:
+ // 9224: Generic HD = track side sector size
+ // 9224: ST-506 HD = track side sector
+
+ // 9234: Generic HD = ident track side sector size
+ // 9234: PC-AT HD = ident track side sector
+
if ((m_register_r[INT_STATUS] & ST_OVRUN)!=0)
// No DMA (we do not get access to the ID table); exit
m_live_state.state= NO_DMA_ACK;
@@ -3545,7 +3695,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
m_out_dip(ASSERT_LINE);
m_live_state.byte_counter--;
UINT8 headbyte = m_in_dma(0, 0xff);
- if (TRACE_HEADER) logerror("%02x ", headbyte);
+ if (TRACE_HEADER) logerror("%02x\n", headbyte);
write_on_track(encode_hd(headbyte), 1, (m_live_state.byte_counter>0)? WRITE_HEADER : WRITE_HEADER_CRC);
if (m_live_state.byte_counter==0)
@@ -3562,7 +3712,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
if (m_live_state.byte_counter > 0)
{
UINT8 crct = (m_live_state.crc >> 8) & 0xff;
- if (TRACE_HEADER) logerror("%02x ", crct);
+ if (TRACE_HEADER) logerror("%02x\n", crct);
m_live_state.byte_counter--;
write_on_track(encode_hd(crct), 1, WRITE_HEADER_CRC);
}
@@ -3574,13 +3724,13 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
break;
case WRITE_GAP2:
- if (TRACE_GAPS) logerror("%s: Writing GAP2, size=%d\n", tag(), m_gap2_size);
+ if (TRACE_GAPS) logerror("Writing GAP2, size=%d\n", m_gap2_size);
write_on_track(encode_hd(0x4e), m_gap2_size, WRITE_DAM_SYNC);
break;
case WRITE_GAP3:
m_sector_count--;
- if (TRACE_GAPS) logerror("%s: Writing GAP3, size=%d\n", tag(), m_gap3_size);
+ if (TRACE_GAPS) logerror("Writing GAP3, size=%d\n", m_gap3_size);
write_on_track(encode_hd(0x4e), m_gap3_size, (m_sector_count>0)? WRITE_IDAM_SYNC : WRITE_GAP4);
break;
@@ -3589,7 +3739,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
wait_line(INDEX_LINE, ASSERT_LINE, TRACKDONE, true);
if (TRACE_GAPS && m_last_live_state != WRITE_GAP4)
{
- logerror("%s: Writing GAP4\n", tag());
+ logerror("Writing GAP4\n");
m_last_live_state = WRITE_GAP4;
}
// Write a single byte; when the index hole shows up, the live run will be aborted
@@ -3598,7 +3748,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit)
// --------------------------------------------------------
default:
- if (TRACE_LIVE) logerror("%s: Unknown state: %02x\n", tag(), m_live_state.state);
+ if (TRACE_LIVE) logerror("Unknown state: %02x\n", m_live_state.state);
break;
}
}
@@ -3619,7 +3769,7 @@ void hdc92x4_device::live_sync()
if(m_live_state.time > machine().time())
{
// If so, we must roll back to the last checkpoint
- if (TRACE_SYNC) logerror("%s: [%s] Rolling back and replaying [%s live]\n", tag(), ttsn().c_str(), tts(m_live_state.time).c_str());
+ if (TRACE_SYNC) logerror("[%s] Rolling back and replaying [%s live]\n", ttsn().c_str(), tts(m_live_state.time).c_str());
rollback();
// and replay until we reach the machine time
@@ -3639,7 +3789,7 @@ void hdc92x4_device::live_sync()
{
// We are behind machine time, so we will never get back to that
// time, thus we can commit that position
- if (TRACE_SYNC) logerror("%s: [%s] Committing [%s live]\n", tag(), ttsn().c_str(), tts(m_live_state.time).c_str());
+ if (TRACE_SYNC) logerror("[%s] Committing [%s live]\n", ttsn().c_str(), tts(m_live_state.time).c_str());
// Commit bits from pll buffer to disk until live time (if there is something to write)
if (using_floppy())
@@ -3666,7 +3816,7 @@ void hdc92x4_device::live_abort()
{
if (!m_live_state.time.is_never() && m_live_state.time > machine().time())
{
- if (TRACE_LIVE) logerror("%s: [%s] Abort; rolling back and replaying [%s live]\n", tag(), ttsn().c_str(), tts(m_live_state.time).c_str());
+ if (TRACE_LIVE) logerror("[%s] Abort; rolling back and replaying [%s live]\n", ttsn().c_str(), tts(m_live_state.time).c_str());
rollback();
live_run_until(machine().time());
}
@@ -3733,7 +3883,7 @@ void hdc92x4_device::wait_for_realtime(int state)
{
m_live_state.next_state = state;
m_timer->adjust(m_live_state.time - machine().time());
- if (TRACE_LIVE) logerror("%s: [%s live] Waiting for real time [%s] to catch up; next state = %02x\n", tag(), tts(m_live_state.time).c_str(), ttsn().c_str(), state);
+ if (TRACE_LIVE) logerror("[%s live] Waiting for real time [%s] to catch up; next state = %02x\n", tts(m_live_state.time).c_str(), ttsn().c_str(), state);
}
/*
@@ -3858,7 +4008,7 @@ void hdc92x4_device::encode_raw(UINT16 raw)
m_live_state.bit_counter = 16;
m_live_state.shift_reg = m_live_state.shift_reg_save = raw;
m_live_state.last_data_bit = raw & 1;
- if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: [%s live] Write %02x (%04x)\n", tag(), tts(m_live_state.time).c_str(), get_data_from_encoding(raw), raw);
+ if (TRACE_WRITE && TRACE_DETAIL) logerror("[%s live] Write %02x (%04x)\n", tts(m_live_state.time).c_str(), get_data_from_encoding(raw), raw);
checkpoint();
}
@@ -4115,7 +4265,7 @@ READ8_MEMBER( hdc92x4_device::read )
{
// Data register
reply = m_register_r[m_register_pointer];
- if (TRACE_READREG) logerror("%s: Read register[%d] -> %02x\n", tag(), m_register_pointer, reply);
+ if (TRACE_READREG) logerror("Read register[%d] -> %02x\n", m_register_pointer, reply);
// Autoincrement until DATA is reached.
if (m_register_pointer < DATA) m_register_pointer++;
@@ -4126,8 +4276,8 @@ READ8_MEMBER( hdc92x4_device::read )
reply = m_register_r[INT_STATUS];
// "The interrupt pin is reset to its inactive state
- // when the UDC interrupt status register is read." [1] (p.3)
- if (TRACE_READREG) logerror("%s: Read interrupt status register -> %02x\n", tag(), reply);
+ // when the UDC interrupt status register is read." [1,2]
+ if (TRACE_READREG) logerror("Read interrupt status register -> %02x\n", reply);
set_interrupt(CLEAR_LINE);
// Clear the bits due to interrupt status register read.
@@ -4147,8 +4297,8 @@ WRITE8_MEMBER( hdc92x4_device::write )
{
if ((offset & 1) == 0)
{
- if (TRACE_COMMAND) logerror("%s: New register write access %02x\n", tag(), data & 0xff);
- if (m_executing) logerror("%s: Error - previous command %02x not completed; register access ignored\n", tag(), current_command());
+ if (TRACE_COMMAND) logerror("New register write access %02x\n", data & 0xff);
+ if (m_executing) logerror("Error - previous command %02x not completed; register access ignored\n", current_command());
else
{
m_regvalue = data & 0xff;
@@ -4157,8 +4307,8 @@ WRITE8_MEMBER( hdc92x4_device::write )
}
else
{
- if (TRACE_COMMAND) logerror("%s: New incoming command %02x\n", tag(), data);
- if (m_executing) logerror("%s: Error - previous command %02x not completed; new command %02x ignored\n", tag(), current_command(), data);
+ if (TRACE_COMMAND) logerror("New incoming command %02x\n", data);
+ if (m_executing) logerror("Error - previous command %02x not completed; new command %02x ignored\n", current_command(), data);
else
{
m_register_w[COMMAND] = data;
@@ -4179,9 +4329,9 @@ void hdc92x4_device::process_command()
if (TRACE_SETREG)
{
if (m_register_pointer == INT_COMM_TERM)
- logerror("%s: Setting interrupt trigger DONE=%d READY=%d\n", tag(), (m_regvalue & TC_INTDONE)? 1:0, (m_regvalue & TC_INTRDCH)? 1:0);
+ logerror("Setting interrupt trigger DONE=%d READY=%d\n", (m_regvalue & TC_INTDONE)? 1:0, (m_regvalue & TC_INTRDCH)? 1:0);
else
- logerror("%s: register[%d] <- %02x\n", tag(), m_register_pointer, m_regvalue);
+ logerror("register[%d] <- %02x\n", m_register_pointer, m_regvalue);
}
m_register_w[m_register_pointer] = m_regvalue;
@@ -4190,7 +4340,7 @@ void hdc92x4_device::process_command()
if (m_register_pointer < DESIRED_HEAD) m_register_r[m_register_pointer] = m_regvalue;
// Note for the PC-AT mode: The DATA register contains two bits (5,4)
- // that are defined as "Actual sector size" ([1] p. 7). The
+ // that are defined as "Actual sector size" ([2] p. 7). The
// specification does not say anything about the meaning of these
// bits. The desired sector size is already specified by bits 6 and 5
// of the DESIRED_HEAD register, so we ignore these bits for now.
@@ -4200,7 +4350,10 @@ void hdc92x4_device::process_command()
}
else
{
- // Reset DONE and BAD_SECTOR [1], p.7
+ // Reset DONE and BAD_SECTOR [2], p.7
+ // BAD_SECTOR is set by writing the sector header field HEAD with bit
+ // 7 set to one. When reading the header, the flag, together with all
+ // other bits, is copied into the CURRENT_HEAD register.
set_bits(m_register_r[INT_STATUS], ST_DONE | ST_BADSECT, false);
// Reset interrupt line (not explicitly mentioned in spec, but seems reasonable
@@ -4230,7 +4383,7 @@ void hdc92x4_device::process_command()
}
if (!found)
{
- logerror("%s: Command %02x not defined\n", tag(), m_register_w[COMMAND]);
+ logerror("Command %02x not defined\n", m_register_w[COMMAND]);
}
}
auxbus_out();
@@ -4238,7 +4391,7 @@ void hdc92x4_device::process_command()
void hdc92x4_device::reenter_command_processing()
{
- if (TRACE_DELAY) logerror("%s: Re-enter command processing; live state = %02x\n", tag(), m_live_state.state);
+ if (TRACE_DELAY) logerror("Re-enter command processing; live state = %02x\n", m_live_state.state);
// Do we have a live run on the track?
if (m_live_state.state != IDLE)
{
@@ -4250,7 +4403,7 @@ void hdc92x4_device::reenter_command_processing()
// We're here when there is no live_run anymore
// Where were we last time?
// Take care not to restart commands because of the index callback
- if (TRACE_DELAY) logerror("%s: Continue with substate %02x\n", tag(), m_substate);
+ if (TRACE_DELAY) logerror("Continue with substate %02x\n", m_substate);
if (m_executing && m_substate != UNDEF) (this->*m_command)();
auxbus_out();
}
@@ -4269,15 +4422,15 @@ void hdc92x4_device::set_command_done(int flags)
{
set_bits(m_register_r[INT_STATUS], ST_TERMCOD, false); // clear the previously set flags
m_register_r[INT_STATUS] |= flags;
- if (TRACE_DONE) logerror("%s: command %02x done, flags=%02x\n", tag(), current_command(), flags);
+ if (TRACE_DONE) logerror("command %02x done, flags=%02x\n", current_command(), flags);
}
else
{
- if (TRACE_DONE) logerror("%s: command %02x done\n", tag(), current_command());
+ if (TRACE_DONE) logerror("command %02x done\n", current_command());
}
- // [1], p. 6
- if (TRACE_INT) logerror("%s: Raise interrupt DONE\n", tag());
+ // [1]; [2] p. 6
+ if (TRACE_INT) logerror("Raise interrupt DONE\n");
set_interrupt(ASSERT_LINE);
m_substate = UNDEF;
@@ -4302,14 +4455,14 @@ void hdc92x4_device::set_command_done()
The specification is not really precise on the times when this bus is
used, but at least we can rely on this information:
- - Whenever there is no output of data, the bus is sampled. ([1], p.8,
+ - Whenever there is no output of data, the bus is sampled. ([2], p.8,
Drive status register). Data is sampled at the rising edge of STB*.
As the minimum STB* pulse is 800ns with min 100ns S0/S1 settling time
and min 100ns hold time we can say that the bus is polled at a maximum
rate of 1 MHz.
- Data for the DMA address is output only when the address is initially
- set; also when the address must be set again on error ([1], p.5,
+ set; also when the address must be set again on error ([2], p.5,
DMA registers). The external memory system has to take care of the
addressing for subsequent bytes. The address will be increased by the
length of a sector during multiple sector read/write operations.
@@ -4344,7 +4497,7 @@ void hdc92x4_device::auxbus_in(UINT8 data)
if (!m_initialized)
return;
- if (TRACE_AUXBUS) logerror("%s: Got value %02x via auxbus: ecc=%d index=%d seek_comp=%d tr00=%d user=%d writeprot=%d ready=%d fault=%d\n",
+ if (TRACE_AUXBUS) logerror("Got value %02x via auxbus: ecc=%d index=%d seek_comp=%d tr00=%d user=%d writeprot=%d ready=%d fault=%d\n",
tag(), data,
(data&HDC_DS_ECCERR)? 1:0, (data&HDC_DS_INDEX)? 1:0,
(data&HDC_DS_SKCOM)? 1:0, (data&HDC_DS_TRK00)? 1:0,
@@ -4379,20 +4532,20 @@ bool hdc92x4_device::waiting_for_other_line(int line)
void hdc92x4_device::index_handler()
{
int level = index_hole()? ASSERT_LINE : CLEAR_LINE;
- if (TRACE_LINES) logerror("%s: [%s] Index handler; level=%d\n", tag(), ttsn().c_str(), level);
+ if (TRACE_LINES) logerror("[%s] Index handler; level=%d\n", ttsn().c_str(), level);
// Synchronize our position on the track
live_sync();
if (level==ASSERT_LINE)
{
- if (TRACE_INDEX) logerror("%s: Index pulse\n", tag());
+ if (TRACE_INDEX) logerror("Index pulse\n");
if (m_wait_for_index) m_stop_after_index = true;
}
if (waiting_for_line(INDEX_LINE, level))
{
- if (TRACE_LINES) logerror("%s: [%s] Index pulse level=%d triggers event\n", tag(), ttsn().c_str(), level);
+ if (TRACE_LINES) logerror("[%s] Index pulse level=%d triggers event\n", ttsn().c_str(), level);
m_substate = m_state_after_line;
m_state_after_line = UNDEF;
if (m_stopwrite)
@@ -4414,7 +4567,7 @@ void hdc92x4_device::index_handler()
void hdc92x4_device::ready_handler()
{
int level = drive_ready()? ASSERT_LINE : CLEAR_LINE;
- if (TRACE_LINES) logerror("%s: [%s] Ready handler; level=%d\n", tag(), ttsn().c_str(), level);
+ if (TRACE_LINES) logerror("[%s] Ready handler; level=%d\n", ttsn().c_str(), level);
// Set the interrupt status flag
set_bits(m_register_r[INT_STATUS], ST_RDYCHNG, true);
@@ -4425,7 +4578,7 @@ void hdc92x4_device::ready_handler()
// Raise an interrupt if desired
if (m_register_w[INT_COMM_TERM] & TC_INTRDCH)
{
- if (TRACE_INT) logerror("%s: Raise interrupt READY change\n", tag());
+ if (TRACE_INT) logerror("Raise interrupt READY change\n");
set_interrupt(ASSERT_LINE);
}
@@ -4441,7 +4594,7 @@ void hdc92x4_device::ready_handler()
void hdc92x4_device::seek_complete_handler()
{
int level = seek_complete()? ASSERT_LINE : CLEAR_LINE;
- if (TRACE_LINES) logerror("%s: [%s] Seek complete handler; level=%d\n", tag(), ttsn().c_str(), level);
+ if (TRACE_LINES) logerror("[%s] Seek complete handler; level=%d\n", ttsn().c_str(), level);
// Synchronize our position on the track
live_sync();
@@ -4488,7 +4641,7 @@ void hdc92x4_device::auxbus_out()
m_output2 = (m_output2 & 0xb0) | desired_head();
if (m_reduced_write_current) m_output2 |= OUT2_REDWRT;
- if (TRACE_AUXBUS) logerror("%s: [%s] Setting OUTPUT1=%02x, OUTPUT2=%02x\n", tag(), ttsn().c_str(), m_output1, m_output2);
+ if (TRACE_AUXBUS) logerror("[%s] Setting OUTPUT1=%02x, OUTPUT2=%02x\n", ttsn().c_str(), m_output1, m_output2);
if (m_output1 != m_output1_old || m_output2 != m_output2_old)
{
@@ -4502,7 +4655,7 @@ void hdc92x4_device::auxbus_out()
void hdc92x4_device::dma_address_out(UINT8 addrub, UINT8 addrhb, UINT8 addrlb)
{
- if (TRACE_DMA) logerror("%s: Setting DMA address %06x\n", tag(), (addrub<<16 | addrhb<<8 | addrlb)&0xffffff);
+ if (TRACE_DMA) logerror("Setting DMA address %06x\n", (addrub<<16 | addrhb<<8 | addrlb)&0xffffff);
m_out_auxbus((offs_t)HDC_OUTPUT_DMA_ADDR, addrub);
m_out_auxbus((offs_t)HDC_OUTPUT_DMA_ADDR, addrhb);
m_out_auxbus((offs_t)HDC_OUTPUT_DMA_ADDR, addrlb);
@@ -4542,7 +4695,7 @@ WRITE_LINE_MEMBER( hdc92x4_device::dmaack )
{
if (state==ASSERT_LINE)
{
- if (TRACE_DMA) logerror("%s: [%s] DMA acknowledged\n", tag(), ttsn().c_str());
+ if (TRACE_DMA) logerror("[%s] DMA acknowledged\n", ttsn().c_str());
set_bits(m_register_r[INT_STATUS], ST_OVRUN, false);
}
}
@@ -4563,7 +4716,7 @@ void hdc92x4_device::connect_hard_drive(mfm_harddisk_device* harddisk)
{
m_harddisk = harddisk;
m_hd_encoding = m_harddisk->get_encoding();
- if (TRACE_SELECT && TRACE_DETAIL) logerror("%s: HD encoding = %d\n", tag(), m_hd_encoding);
+ if (TRACE_SELECT && TRACE_DETAIL) logerror("HD encoding = %d\n", m_hd_encoding);
}
/*
@@ -4603,7 +4756,7 @@ WRITE_LINE_MEMBER( hdc92x4_device::reset )
{
if (state == ASSERT_LINE)
{
- if (TRACE_LINES) logerror("%s: Reset via RST line\n", tag());
+ if (TRACE_LINES) logerror("Reset via RST line\n");
device_reset();
}
}
@@ -4639,6 +4792,7 @@ void hdc92x4_device::device_reset()
m_live_state.state = IDLE;
m_live_state.time = attotime::never;
m_logical = true;
+ m_bypass = false;
m_multi_sector = false;
m_output1 = 0;
m_output2 = 0x80;
diff --git a/src/devices/machine/hdc92x4.h b/src/devices/machine/hdc92x4.h
index fc862101919..ab7011c5ec7 100644
--- a/src/devices/machine/hdc92x4.h
+++ b/src/devices/machine/hdc92x4.h
@@ -381,6 +381,9 @@ protected:
// Read/write logical or physical?
bool m_logical;
+ // Shall bad sectors be bypassed or shall the command be terminated in error?
+ bool m_bypass;
+
// Signals to abort writing
bool m_stopwrite;
@@ -445,7 +448,7 @@ protected:
int sector_size();
// Returns the sector header length
- int header_length();
+ virtual int header_length() =0;
// Returns the index of the register for the header field
int register_number(int slot);
@@ -453,6 +456,9 @@ protected:
// Is the currently selected drive a floppy drive?
bool using_floppy();
+ // Was the Bad Sector flag set for the recently read sector header?
+ bool bad_sector();
+
// Common subprograms READ ID, VERIFY, and DATA TRANSFER
void read_id(int& cont, bool implied_seek, bool wait_seek_complete);
void verify(int& cont);
@@ -488,6 +494,7 @@ public:
protected:
int step_time() override;
+ int header_length() override;
};
class hdc9234_device : public hdc92x4_device
@@ -497,6 +504,7 @@ public:
protected:
int step_time() override;
+ int header_length() override;
};
#endif
diff --git a/src/devices/machine/mc6852.cpp b/src/devices/machine/mc6852.cpp
index b0cf1ff9ca9..e8ed3241b92 100644
--- a/src/devices/machine/mc6852.cpp
+++ b/src/devices/machine/mc6852.cpp
@@ -39,51 +39,6 @@ const device_type MC6852 = &device_creator;
#define LOG 0
-#define S_RDA 0x01
-#define S_TDRA 0x02
-#define S_DCD 0x04
-#define S_CTS 0x08
-#define S_TUF 0x10
-#define S_RX_OVRN 0x20
-#define S_PE 0x40
-#define S_IRQ 0x80
-
-
-#define C1_RX_RS 0x01
-#define C1_TX_RS 0x02
-#define C1_STRIP_SYNC 0x04
-#define C1_CLEAR_SYNC 0x08
-#define C1_TIE 0x10
-#define C1_RIE 0x20
-#define C1_AC_MASK 0xc0
-#define C1_AC_C2 0x00
-#define C1_AC_C3 0x40
-#define C1_AC_SYNC 0x80
-#define C1_AC_TX_FIFO 0xc0
-
-
-#define C2_PC1 0x01
-#define C2_PC2 0x02
-#define C2_1_2_BYTE 0x04
-#define C2_WS_MASK 0x38
-#define C2_WS_6_E 0x00
-#define C2_WS_6_O 0x08
-#define C2_WS_7 0x10
-#define C2_WS_8 0x18
-#define C2_WS_7_E 0x20
-#define C2_WS_7_O 0x28
-#define C2_WS_8_E 0x30
-#define C2_WS_8_O 0x38
-#define C2_TX_SYNC 0x40
-#define C2_EIE 0x80
-
-
-#define C3_E_I_SYNC 0x01
-#define C3_1_2_SYNC 0x02
-#define C3_CLEAR_CTS 0x04
-#define C3_CTUF 0x08
-
-
//**************************************************************************
// LIVE DEVICE
@@ -122,6 +77,9 @@ void mc6852_device::device_start()
m_write_sm_dtr.resolve_safe();
m_write_tuf.resolve_safe();
+ set_rcv_rate(m_rx_clock);
+ set_tra_rate(m_tx_clock);
+
// register for state saving
save_item(NAME(m_status));
save_item(NAME(m_cr));
@@ -146,17 +104,16 @@ void mc6852_device::device_reset()
m_rx_fifo = std::queue();
m_tx_fifo = std::queue();
- transmit_register_reset();
receive_register_reset();
-
- set_rcv_rate(m_rx_clock);
- set_tra_rate(m_tx_clock);
-
- /* set receiver shift register to all 1's */
- m_rsr = 0xff;
+ transmit_register_reset();
/* reset and inhibit receiver/transmitter sections */
m_cr[0] |= (C1_TX_RS | C1_RX_RS);
+ m_cr[1] &= ~(C2_EIE | C2_PC2 | C2_PC1);
+ m_status &= ~S_TDRA;
+
+ /* set receiver shift register to all 1's */
+ m_rsr = 0xff;
}
@@ -235,18 +192,40 @@ WRITE8_MEMBER( mc6852_device::write )
{
switch (m_cr[0] & C1_AC_MASK)
{
- case C1_AC_C2:
+ case C1_AC_C2: {
/* control 2 */
+ if (LOG) logerror("MC6852 '%s' Control 2 %02x\n", tag(), data);
m_cr[1] = data;
+
+ int data_bit_count = 0;
+ parity_t parity = PARITY_NONE;
+ stop_bits_t stop_bits = STOP_BITS_1;
+
+ switch (data & C2_WS_MASK)
+ {
+ case 0: data_bit_count = 6; parity = PARITY_EVEN; break;
+ case 1: data_bit_count = 6; parity = PARITY_ODD; break;
+ case 2: data_bit_count = 7; parity = PARITY_NONE; break;
+ case 3: data_bit_count = 8; parity = PARITY_NONE; break;
+ case 4: data_bit_count = 7; parity = PARITY_EVEN; break;
+ case 5: data_bit_count = 7; parity = PARITY_ODD; break;
+ case 6: data_bit_count = 8; parity = PARITY_EVEN; break;
+ case 7: data_bit_count = 8; parity = PARITY_ODD; break;
+ }
+
+ set_data_frame(1, data_bit_count, parity, stop_bits);
+ }
break;
case C1_AC_C3:
/* control 3 */
+ if (LOG) logerror("MC6852 '%s' Control 3 %02x\n", tag(), data);
m_cr[2] = data;
break;
case C1_AC_SYNC:
/* sync code */
+ if (LOG) logerror("MC6852 '%s' Sync Code %02x\n", tag(), data);
m_scr = data;
break;
@@ -254,6 +233,7 @@ WRITE8_MEMBER( mc6852_device::write )
/* transmit data FIFO */
if (m_tx_fifo.size() < 3)
{
+ if (LOG) logerror("MC6852 '%s' Transmit FIFO %02x\n", tag(), data);
m_tx_fifo.push(data);
}
break;
@@ -261,6 +241,8 @@ WRITE8_MEMBER( mc6852_device::write )
}
else
{
+ if (LOG) logerror("MC6852 '%s' Control 1 %02x\n", tag(), data);
+
/* receiver reset */
if (data & C1_RX_RS)
{
@@ -274,6 +256,8 @@ WRITE8_MEMBER( mc6852_device::write )
m_status &= ~(S_RX_OVRN | S_PE | S_DCD | S_RDA);
m_rsr = 0xff;
+
+ receive_register_reset();
}
/* transmitter reset */
@@ -289,6 +273,8 @@ WRITE8_MEMBER( mc6852_device::write )
if (LOG) logerror("MC6852 '%s' Transmitter Reset\n", tag());
m_status &= ~(S_TUF | S_CTS | S_TDRA);
+
+ transmit_register_reset();
}
if (LOG)
diff --git a/src/devices/machine/mc6852.h b/src/devices/machine/mc6852.h
index 68cd76f6126..4987c64729b 100644
--- a/src/devices/machine/mc6852.h
+++ b/src/devices/machine/mc6852.h
@@ -99,6 +99,57 @@ protected:
virtual void rcv_complete() override;
private:
+ enum
+ {
+ S_IRQ = 0x80,
+ S_PE = 0x40,
+ S_RX_OVRN = 0x20,
+ S_TUF = 0x10,
+ S_CTS = 0x08,
+ S_DCD = 0x04,
+ S_TDRA = 0x02,
+ S_RDA = 0x01
+ };
+
+ enum
+ {
+ C1_AC_MASK = 0xc0,
+ C1_AC_C2 = 0x00,
+ C1_AC_C3 = 0x40,
+ C1_AC_SYNC = 0x80,
+ C1_AC_TX_FIFO = 0xc0,
+ C1_AC2 = 0x80,
+ C1_AC1 = 0x40,
+ C1_RIE = 0x20,
+ C1_TIE = 0x10,
+ C1_CLEAR_SYNC = 0x08,
+ C1_STRIP_SYNC = 0x04,
+ C1_TX_RS = 0x02,
+ C1_RX_RS = 0x01
+ };
+
+ enum
+ {
+ C2_EIE = 0x80,
+ C2_TX_SYNC = 0x40,
+ C2_WS_MASK = 0x38,
+ C2_WS3 = 0x20,
+ C2_WS2 = 0x10,
+ C2_WS1 = 0x08,
+ C2_1_2_BYTE = 0x04,
+ C2_PC_MASK = 0x03,
+ C2_PC2 = 0x02,
+ C2_PC1 = 0x01
+ };
+
+ enum
+ {
+ C3_CTUF = 0x08,
+ C3_CTS = 0x04,
+ C3_1_2_SYNC = 0x02,
+ C3_E_I_SYNC = 0x01
+ };
+
devcb_write_line m_write_tx_data;
devcb_write_line m_write_irq;
devcb_write_line m_write_sm_dtr;
diff --git a/src/devices/machine/s3c24xx.hxx b/src/devices/machine/s3c24xx.hxx
index ca7bc05a90d..adb57cd1977 100644
--- a/src/devices/machine/s3c24xx.hxx
+++ b/src/devices/machine/s3c24xx.hxx
@@ -19,7 +19,6 @@
#define CLOCK_MULTIPLIER 1
-#define BIT(x,n) (((x)>>(n))&1)
#define BITS(x,m,n) (((x)>>(n))&(((UINT32)1<<((m)-(n)+1))-1))
#define CLR_BITS(x,m,n) ((x) & ~((((UINT32)1 << ((m) - (n) + 1)) - 1) << n))
diff --git a/src/devices/machine/s3c44b0.cpp b/src/devices/machine/s3c44b0.cpp
index 19579a1aa03..bf81606cf12 100644
--- a/src/devices/machine/s3c44b0.cpp
+++ b/src/devices/machine/s3c44b0.cpp
@@ -284,7 +284,6 @@ void s3c44b0_device::device_reset()
#define CLOCK_MULTIPLIER 1
-#define BIT(x,n) (((x)>>(n))&1)
#define BITS(x,m,n) (((x)>>(n))&(((UINT32)1<<((m)-(n)+1))-1))
#define CLR_BITS(x,m,n) ((x) & ~((((UINT32)1 << ((m) - (n) + 1)) - 1) << n))
diff --git a/src/devices/machine/upd765.cpp b/src/devices/machine/upd765.cpp
index 96dd03fa1a9..7cf98458d1b 100644
--- a/src/devices/machine/upd765.cpp
+++ b/src/devices/machine/upd765.cpp
@@ -4,6 +4,8 @@
#include "upd765.h"
#include "debugger.h"
+#define LOG 0
+
const device_type UPD765A = &device_creator;
const device_type UPD765B = &device_creator;
const device_type I8272A = &device_creator;
@@ -235,7 +237,7 @@ void upd765_family_device::soft_reset()
void upd765_family_device::tc_w(bool _tc)
{
- logerror("%s: tc=%d\n", tag(), _tc);
+ if (LOG) logerror("tc=%d\n", _tc);
if(tc != _tc && _tc) {
live_sync();
tc_done = true;
@@ -304,7 +306,7 @@ READ8_MEMBER(upd765_family_device::dor_r)
WRITE8_MEMBER(upd765_family_device::dor_w)
{
- logerror("%s: dor = %02x\n", tag(), data);
+ if (LOG) logerror("dor = %02x\n", data);
UINT8 diff = dor ^ data;
dor = data;
if(diff & 4)
@@ -367,7 +369,7 @@ READ8_MEMBER(upd765_family_device::msr_r)
WRITE8_MEMBER(upd765_family_device::dsr_w)
{
- logerror("%s: dsr_w %02x\n", tag(), data);
+ if (LOG) logerror("dsr_w %02x\n", data);
if(data & 0x80)
soft_reset();
dsr = data & 0x7f;
@@ -386,7 +388,7 @@ READ8_MEMBER(upd765_family_device::fifo_r)
case PHASE_EXEC:
if(internal_drq)
return fifo_pop(false);
- logerror("%s: fifo_r in phase %d\n", tag(), main_phase);
+ if (LOG) logerror("fifo_r in phase %d\n", main_phase);
break;
case PHASE_RESULT:
@@ -397,7 +399,7 @@ READ8_MEMBER(upd765_family_device::fifo_r)
main_phase = PHASE_CMD;
break;
default:
- logerror("%s: fifo_r in phase %d\n", tag(), main_phase);
+ if (LOG) logerror("fifo_r in phase %d\n", main_phase);
break;
}
@@ -415,7 +417,7 @@ WRITE8_MEMBER(upd765_family_device::fifo_w)
if(cmd == C_INCOMPLETE)
break;
if(cmd == C_INVALID) {
- logerror("%s: Invalid on %02x\n", tag(), command[0]);
+ if (LOG) logerror("Invalid on %02x\n", command[0]);
main_phase = PHASE_RESULT;
result[0] = ST0_UNK;
result_pos = 1;
@@ -430,11 +432,11 @@ WRITE8_MEMBER(upd765_family_device::fifo_w)
fifo_push(data, false);
return;
}
- logerror("%s: fifo_w in phase %d\n", tag(), main_phase);
+ if (LOG) logerror("fifo_w in phase %d\n", main_phase);
break;
default:
- logerror("%s: fifo_w in phase %d\n", tag(), main_phase);
+ if (LOG) logerror("fifo_w in phase %d\n", main_phase);
break;
}
}
@@ -501,7 +503,7 @@ void upd765_family_device::fifo_push(UINT8 data, bool internal)
if(fifo_pos == 16) {
if(internal) {
if(!(st1 & ST1_OR))
- logerror("%s: Fifo overrun\n", tag());
+ if (LOG) logerror("Fifo overrun\n");
st1 |= ST1_OR;
}
return;
@@ -522,7 +524,7 @@ UINT8 upd765_family_device::fifo_pop(bool internal)
if(!fifo_pos) {
if(internal) {
if(!(st1 & ST1_OR))
- logerror("%s: Fifo underrun\n", tag());
+ if (LOG) logerror("Fifo underrun\n");
st1 |= ST1_OR;
}
return 0;
@@ -1031,8 +1033,8 @@ void upd765_family_device::live_run(attotime limit)
command[12+cur_live.byte_counter-16] = byte;
live_write_mfm(byte);
if(cur_live.byte_counter == 19)
- logerror("%s: formatting sector %02x %02x %02x %02x\n",
- tag(), command[12], command[13], command[14], command[15]);
+ if (LOG) logerror("formatting sector %02x %02x %02x %02x\n",
+ command[12], command[13], command[14], command[15]);
} else if(cur_live.byte_counter < 22)
live_write_mfm(cur_live.crc >> 8);
else if(cur_live.byte_counter < 44)
@@ -1067,8 +1069,8 @@ void upd765_family_device::live_run(attotime limit)
command[12+cur_live.byte_counter-7] = byte;
live_write_fm(byte);
if(cur_live.byte_counter == 10)
- logerror("%s: formatting sector %02x %02x %02x %02x\n",
- tag(), command[12], command[13], command[14], command[15]);
+ if (LOG) logerror("formatting sector %02x %02x %02x %02x\n",
+ command[12], command[13], command[14], command[15]);
} else if(cur_live.byte_counter < 13)
live_write_fm(cur_live.crc >> 8);
else if(cur_live.byte_counter < 24)
@@ -1119,7 +1121,7 @@ void upd765_family_device::live_run(attotime limit)
break;
default:
- logerror("%s: Unknown live state %d\n", tts(cur_live.tm).c_str(), cur_live.state);
+ if (LOG) logerror("%s: Unknown live state %d\n", tts(cur_live.tm).c_str(), cur_live.state);
return;
}
}
@@ -1226,8 +1228,7 @@ void upd765_family_device::start_command(int cmd)
tc_done = false;
switch(cmd) {
case C_CONFIGURE:
- logerror("%s: command configure %02x %02x %02x\n",
- tag(),
+ if (LOG) logerror("command configure %02x %02x %02x\n",
command[1], command[2], command[3]);
// byte 1 is ignored, byte 3 is precompensation-related
fifocfg = command[2];
@@ -1236,7 +1237,7 @@ void upd765_family_device::start_command(int cmd)
break;
case C_DUMP_REG:
- logerror("%s: command dump regs\n", tag());
+ if (LOG) logerror("command dump regs\n");
main_phase = PHASE_RESULT;
result[0] = flopi[0].pcn;
result[1] = flopi[1].pcn;
@@ -1261,11 +1262,11 @@ void upd765_family_device::start_command(int cmd)
main_phase = PHASE_RESULT;
result[0] = locked ? 0x10 : 0x00;
result_pos = 1;
- logerror("%s: command lock (%s)\n", tag(), locked ? "on" : "off");
+ if (LOG) logerror("command lock (%s)\n", locked ? "on" : "off");
break;
case C_PERPENDICULAR:
- logerror("%s: command perpendicular\n", tag());
+ if (LOG) logerror("command perpendicular\n");
perpmode = command[1];
main_phase = PHASE_CMD;
break;
@@ -1309,7 +1310,7 @@ void upd765_family_device::start_command(int cmd)
(fi.dev->wpt_r() ? ST3_WP : 0x00) |
(fi.dev->trk00_r() ? 0x00 : ST3_T0) |
(fi.dev->twosid_r() ? 0x00 : ST3_TS);
- logerror("%s: command sense drive status %d (%02x)\n", tag(), fi.id, result[0]);
+ if (LOG) logerror("command sense drive status %d (%02x)\n", fi.id, result[0]);
result_pos = 1;
break;
}
@@ -1317,7 +1318,7 @@ void upd765_family_device::start_command(int cmd)
case C_SENSE_INTERRUPT_STATUS: {
// Documentation is somewhat contradictory w.r.t polling
// and irq. PC bios, especially 5150, requires that only
- // one irq happens. That's also wait the ns82077a doc
+ // one irq happens. That's also what the ns82077a doc
// says it does. OTOH, a number of docs says you need to
// call SIS 4 times, once per drive...
//
@@ -1339,7 +1340,7 @@ void upd765_family_device::start_command(int cmd)
if(fid == 4) {
result[0] = ST0_UNK;
result_pos = 1;
- logerror("%s: command sense interrupt status (%02x)\n", tag(), result[0]);
+ if (LOG) logerror("command sense interrupt status (%02x)\n", result[0]);
break;
}
@@ -1349,7 +1350,7 @@ void upd765_family_device::start_command(int cmd)
result[0] = fi.st0;
result[1] = fi.pcn;
- logerror("%s: command sense interrupt status (fid=%d %02x %02x)\n", tag(), fid, result[0], result[1]);
+ if (LOG) logerror("command sense interrupt status (fid=%d %02x %02x)\n", fid, result[0], result[1]);
result_pos = 2;
other_irq = false;
@@ -1358,8 +1359,7 @@ void upd765_family_device::start_command(int cmd)
}
case C_SPECIFY:
- logerror("%s: command specify %02x %02x\n",
- tag(),
+ if (LOG) logerror("command specify %02x %02x\n",
command[1], command[2]);
spec = (command[1] << 8) | command[2];
main_phase = PHASE_CMD;
@@ -1377,10 +1377,10 @@ void upd765_family_device::start_command(int cmd)
void upd765_family_device::command_end(floppy_info &fi, bool data_completion)
{
- logerror("%s: command done (%s) -", tag(), data_completion ? "data" : "seek");
+ if (LOG) logerror("command done (%s) -", data_completion ? "data" : "seek");
for(int i=0; i != result_pos; i++)
- logerror(" %02x", result[i]);
- logerror("\n");
+ if (LOG) logerror(" %02x", result[i]);
+ if (LOG) logerror("\n");
fi.main_state = fi.sub_state = IDLE;
if(data_completion)
data_irq = true;
@@ -1394,7 +1394,7 @@ void upd765_family_device::command_end(floppy_info &fi, bool data_completion)
void upd765_family_device::recalibrate_start(floppy_info &fi)
{
- logerror("%s: command recalibrate\n", tag());
+ if (LOG) logerror("command recalibrate\n");
fi.main_state = RECALIBRATE;
fi.sub_state = SEEK_WAIT_STEP_TIME_DONE;
fi.dir = 1;
@@ -1406,7 +1406,7 @@ void upd765_family_device::recalibrate_start(floppy_info &fi)
void upd765_family_device::seek_start(floppy_info &fi)
{
- logerror("%s: command %sseek %d\n", tag(), command[0] & 0x80 ? "relative " : "", command[2]);
+ if (LOG) logerror("command %sseek %d\n", command[0] & 0x80 ? "relative " : "", command[2]);
fi.main_state = SEEK;
fi.sub_state = SEEK_WAIT_STEP_TIME_DONE;
fi.dir = fi.pcn > command[2] ? 1 : 0;
@@ -1489,8 +1489,7 @@ void upd765_family_device::read_data_start(floppy_info &fi)
fi.sub_state = HEAD_LOAD_DONE;
mfm = command[0] & 0x40;
- logerror("%s: command read%s data%s%s%s%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n",
- tag(),
+ if (LOG) logerror("command read%s data%s%s%s%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n",
command[0] & 0x08 ? " deleted" : "",
command[0] & 0x80 ? " mt" : "",
command[0] & 0x40 ? " mfm" : "",
@@ -1534,8 +1533,7 @@ void upd765_family_device::scan_start(floppy_info &fi)
fi.sub_state = HEAD_LOAD_DONE;
mfm = command[0] & 0x40;
- logerror("%s: command scan%s data%s%s%s%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x stp=%02x rate=%d\n",
- tag(),
+ if (LOG) logerror("command scan%s data%s%s%s%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x stp=%02x rate=%d\n",
command[0] & 0x08 ? " deleted" : "",
command[0] & 0x80 ? " mt" : "",
command[0] & 0x40 ? " mfm" : "",
@@ -1638,8 +1636,7 @@ void upd765_family_device::read_data_continue(floppy_info &fi)
live_start(fi, SEARCH_ADDRESS_MARK_HEADER);
return;
}
- logerror("%s: reading sector %02x %02x %02x %02x\n",
- tag(),
+ if (LOG) logerror("reading sector %02x %02x %02x %02x\n",
cur_live.idbuf[0],
cur_live.idbuf[1],
cur_live.idbuf[2],
@@ -1714,7 +1711,7 @@ void upd765_family_device::read_data_continue(floppy_info &fi)
return;
default:
- logerror("%s: read sector unknown sub-state %d\n", ttsn().c_str(), fi.sub_state);
+ if (LOG) logerror("%s: read sector unknown sub-state %d\n", ttsn().c_str(), fi.sub_state);
return;
}
}
@@ -1725,8 +1722,7 @@ void upd765_family_device::write_data_start(floppy_info &fi)
fi.main_state = WRITE_DATA;
fi.sub_state = HEAD_LOAD_DONE;
mfm = command[0] & 0x40;
- logerror("%s: command write%s data%s%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n",
- tag(),
+ if (LOG) logerror("command write%s data%s%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n",
command[0] & 0x08 ? " deleted" : "",
command[0] & 0x80 ? " mt" : "",
command[0] & 0x40 ? " mfm" : "",
@@ -1840,7 +1836,7 @@ void upd765_family_device::write_data_continue(floppy_info &fi)
return;
default:
- logerror("%s: write sector unknown sub-state %d\n", ttsn().c_str(), fi.sub_state);
+ if (LOG) logerror("%s: write sector unknown sub-state %d\n", ttsn().c_str(), fi.sub_state);
return;
}
}
@@ -1853,8 +1849,7 @@ void upd765_family_device::read_track_start(floppy_info &fi)
mfm = command[0] & 0x40;
sectors_read = 0;
- logerror("%s: command read track%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n",
- tag(),
+ if (LOG) logerror("command read track%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n",
command[0] & 0x40 ? " mfm" : "",
command[0],
command[1],
@@ -1936,7 +1931,7 @@ void upd765_family_device::read_track_continue(floppy_info &fi)
return;
case WAIT_INDEX_DONE:
- logerror("%s: index found, reading track\n", tag());
+ if (LOG) logerror("index found, reading track\n");
fi.sub_state = SCAN_ID;
live_start(fi, SEARCH_ADDRESS_MARK_HEADER);
return;
@@ -1946,8 +1941,7 @@ void upd765_family_device::read_track_continue(floppy_info &fi)
st1 |= ST1_DE;
}
st1 &= ~ST1_MA;
- logerror("%s: reading sector %02x %02x %02x %02x\n",
- tag(),
+ if (LOG) logerror("reading sector %02x %02x %02x %02x\n",
cur_live.idbuf[0],
cur_live.idbuf[1],
cur_live.idbuf[2],
@@ -2010,7 +2004,7 @@ void upd765_family_device::read_track_continue(floppy_info &fi)
return;
default:
- logerror("%s: read track unknown sub-state %d\n", ttsn().c_str(), fi.sub_state);
+ if (LOG) logerror("%s: read track unknown sub-state %d\n", ttsn().c_str(), fi.sub_state);
return;
}
}
@@ -2027,8 +2021,7 @@ void upd765_family_device::format_track_start(floppy_info &fi)
fi.sub_state = HEAD_LOAD_DONE;
mfm = command[0] & 0x40;
- logerror("%s: command format track %s h=%02x n=%02x sc=%02x gpl=%02x d=%02x\n",
- tag(),
+ if (LOG) logerror("command format track %s h=%02x n=%02x sc=%02x gpl=%02x d=%02x\n",
command[0] & 0x40 ? "mfm" : "fm",
command[1], command[2], command[3], command[4], command[5]);
@@ -2063,7 +2056,7 @@ void upd765_family_device::format_track_continue(floppy_info &fi)
return;
case WAIT_INDEX_DONE:
- logerror("%s: index found, writing track\n", tag());
+ if (LOG) logerror("index found, writing track\n");
fi.sub_state = TRACK_DONE;
cur_live.pll.start_writing(machine().time());
live_start(fi, WRITE_TRACK_PRE_SECTORS);
@@ -2083,7 +2076,7 @@ void upd765_family_device::format_track_continue(floppy_info &fi)
return;
default:
- logerror("%s: format track unknown sub-state %d\n", ttsn().c_str(), fi.sub_state);
+ if (LOG) logerror("%s: format track unknown sub-state %d\n", ttsn().c_str(), fi.sub_state);
return;
}
}
@@ -2095,8 +2088,7 @@ void upd765_family_device::read_id_start(floppy_info &fi)
fi.sub_state = HEAD_LOAD_DONE;
mfm = command[0] & 0x40;
- logerror("%s: command read id%s, rate=%d\n",
- tag(),
+ if (LOG) logerror("command read id%s, rate=%d\n",
command[0] & 0x40 ? " mfm" : "",
cur_rate);
@@ -2162,7 +2154,7 @@ void upd765_family_device::read_id_continue(floppy_info &fi)
return;
default:
- logerror("%s: read id unknown sub-state %d\n", ttsn().c_str(), fi.sub_state);
+ if (LOG) logerror("%s: read id unknown sub-state %d\n", ttsn().c_str(), fi.sub_state);
return;
}
}
@@ -2174,7 +2166,7 @@ void upd765_family_device::check_irq()
cur_irq = data_irq || other_irq || internal_drq;
cur_irq = cur_irq && (dor & 4) && (mode != MODE_AT || (dor & 8));
if(cur_irq != old_irq) {
- logerror("%s: irq = %d\n", tag(), cur_irq);
+ if (LOG) logerror("irq = %d\n", cur_irq);
intrq_cb(cur_irq);
}
}
@@ -2232,7 +2224,7 @@ void upd765_family_device::run_drive_ready_polling()
for(int fid=0; fid<4; fid++) {
bool ready = get_ready(fid);
if(ready != flopi[fid].ready) {
- logerror("%s: polled %d : %d -> %d\n", tag(), fid, flopi[fid].ready, ready);
+ if (LOG) logerror("polled %d : %d -> %d\n", fid, flopi[fid].ready, ready);
flopi[fid].ready = ready;
if(!flopi[fid].st0_filled) {
flopi[fid].st0 = ST0_ABRT | fid;
@@ -2289,7 +2281,7 @@ void upd765_family_device::index_callback(floppy_image_device *floppy, int state
break;
default:
- logerror("%s: Index pulse on unknown sub-state %d\n", ttsn().c_str(), fi.sub_state);
+ if (LOG) logerror("%s: Index pulse on unknown sub-state %d\n", ttsn().c_str(), fi.sub_state);
break;
}
@@ -2337,7 +2329,7 @@ void upd765_family_device::general_continue(floppy_info &fi)
break;
default:
- logerror("%s: general_continue on unknown main-state %d\n", ttsn().c_str(), fi.main_state);
+ if (LOG) logerror("%s: general_continue on unknown main-state %d\n", ttsn().c_str(), fi.main_state);
break;
}
}
@@ -2378,7 +2370,7 @@ bool upd765_family_device::write_one_bit(const attotime &limit)
void upd765_family_device::live_write_raw(UINT16 raw)
{
- // logerror("write %04x %04x\n", raw, cur_live.crc);
+ // if (LOG) logerror("write %04x %04x\n", raw, cur_live.crc);
cur_live.shift_reg = raw;
cur_live.data_bit_context = raw & 1;
}
@@ -2398,7 +2390,7 @@ void upd765_family_device::live_write_mfm(UINT8 mfm)
cur_live.data_reg = mfm;
cur_live.shift_reg = raw;
cur_live.data_bit_context = context;
- // logerror("write %02x %04x %04x\n", mfm, cur_live.crc, raw);
+ // if (LOG) logerror("write %02x %04x %04x\n", mfm, cur_live.crc, raw);
}
void upd765_family_device::live_write_fm(UINT8 fm)
@@ -2410,13 +2402,13 @@ void upd765_family_device::live_write_fm(UINT8 fm)
cur_live.data_reg = fm;
cur_live.shift_reg = raw;
cur_live.data_bit_context = fm & 1;
- // logerror("write %02x %04x %04x\n", fm, cur_live.crc, raw);
+ // if (LOG) logerror("write %02x %04x %04x\n", fm, cur_live.crc, raw);
}
bool upd765_family_device::sector_matches() const
{
if(0)
- logerror("%s: matching %02x %02x %02x %02x - %02x %02x %02x %02x\n", tag(),
+ if (LOG) logerror("matching %02x %02x %02x %02x - %02x %02x %02x %02x\n",
cur_live.idbuf[0], cur_live.idbuf[1], cur_live.idbuf[2], cur_live.idbuf[3],
command[2], command[3], command[4], command[5]);
return
diff --git a/src/devices/sound/bsmt2000.cpp b/src/devices/sound/bsmt2000.cpp
index 26df9eb080f..7e92bcb80fb 100644
--- a/src/devices/sound/bsmt2000.cpp
+++ b/src/devices/sound/bsmt2000.cpp
@@ -52,13 +52,6 @@ static MACHINE_CONFIG_FRAGMENT( bsmt2000 )
MACHINE_CONFIG_END
-// default address map for the external memory interface
-// the BSMT can address a full 32 bits but typically only 24 are used
-static ADDRESS_MAP_START( bsmt2000, AS_0, 8, bsmt2000_device)
- AM_RANGE(0x00000, 0xffffff) AM_ROM
-ADDRESS_MAP_END
-
-
// ROM definition for the BSMT2000 program ROM
ROM_START( bsmt2000 )
ROM_REGION( 0x2000, "bsmt2000", 0 )
@@ -79,11 +72,9 @@ ROM_END
bsmt2000_device::bsmt2000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, BSMT2000, "BSMT2000", tag, owner, clock, "bsmt2000", __FILE__),
device_sound_interface(mconfig, *this),
- device_memory_interface(mconfig, *this),
- m_space_config("samples", ENDIANNESS_LITTLE, 8, 32, 0, nullptr),
+ device_rom_interface(mconfig, *this, 32),
m_ready_callback(nullptr),
m_stream(nullptr),
- m_direct(nullptr),
m_cpu(nullptr),
m_register_select(0),
m_write_data(0),
@@ -93,7 +84,6 @@ bsmt2000_device::bsmt2000_device(const machine_config &mconfig, const char *tag,
m_right_data(0),
m_write_pending(false)
{
- m_address_map[0] = *ADDRESS_MAP_NAME(bsmt2000);
}
@@ -140,9 +130,6 @@ void bsmt2000_device::device_start()
// find our CPU
m_cpu = subdevice("bsmt2000");
- // find our direct access
- m_direct = &space().direct();
-
// create the stream; BSMT typically runs at 24MHz and writes to a DAC, so
// in theory we should generate a 24MHz stream, but that's certainly overkill
// internally at 24MHz the max output sample rate is 32kHz
@@ -170,16 +157,6 @@ void bsmt2000_device::device_reset()
}
-//-------------------------------------------------
-// memory_space_config - return a description of
-// any address spaces owned by this device
-//-------------------------------------------------
-
-const address_space_config *bsmt2000_device::memory_space_config(address_spacenum spacenum) const
-{
- return (spacenum == 0) ? &m_space_config : nullptr;
-}
-
//-------------------------------------------------
// device_timer - handle deferred writes and
@@ -296,7 +273,7 @@ READ16_MEMBER( bsmt2000_device::tms_data_r )
READ16_MEMBER( bsmt2000_device::tms_rom_r )
{
// underlying logic assumes this is a sign-extended value
- return (INT8)m_direct->read_byte((m_rom_bank << 16) + m_rom_address);
+ return (INT8)read_byte((m_rom_bank << 16) + m_rom_address);
}
diff --git a/src/devices/sound/bsmt2000.h b/src/devices/sound/bsmt2000.h
index 41490230566..2b80c685418 100644
--- a/src/devices/sound/bsmt2000.h
+++ b/src/devices/sound/bsmt2000.h
@@ -37,7 +37,7 @@
class bsmt2000_device : public device_t,
public device_sound_interface,
- public device_memory_interface
+ public device_rom_interface
{
typedef void (*ready_callback)(bsmt2000_device &device);
@@ -61,9 +61,6 @@ protected:
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
- // device_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
-
// device_sound_interface overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
@@ -88,12 +85,10 @@ private:
};
// configuration state
- const address_space_config m_space_config;
ready_callback m_ready_callback;
// internal state
sound_stream * m_stream;
- direct_read_data * m_direct;
tms32015_device * m_cpu;
UINT16 m_register_select;
UINT16 m_write_data;
diff --git a/src/devices/sound/c352.cpp b/src/devices/sound/c352.cpp
index 2da83f0dd4d..a56a8fa5fe3 100644
--- a/src/devices/sound/c352.cpp
+++ b/src/devices/sound/c352.cpp
@@ -1,26 +1,19 @@
// license:BSD-3-Clause
-// copyright-holders:R. Belmont
+// copyright-holders:R. Belmont, superctr
/*
- c352.c - Namco C352 custom PCM chip emulation
- v1.2
- By R. Belmont
- Additional code by cync and the hoot development team
+ c352.c - Namco C352 custom PCM chip emulation
+ v2.0
+ By R. Belmont
+ Rewritten and improved by superctr
+ Additional code by cync and the hoot development team
- Thanks to Cap of VivaNonno for info and The_Author for preliminary reverse-engineering
+ Thanks to Cap of VivaNonno for info and The_Author for preliminary reverse-engineering
- Chip specs:
- 32 voices
- Supports 8-bit linear and 8-bit muLaw samples
- Output: digital, 16 bit, 4 channels
- Output sample rate is the input clock / (288 * 2).
-
- superctr: The clock divider appears to be configurable for each system.
- Below is a list of the divider values followed by the systems that use it.
-
- * 228: System 11.
- * 288: System 22, Super 22, NB-1/2, ND-1, FL.
- * 296: System 23, Super 23.
- * 332: System 12.
+ Chip specs:
+ 32 voices
+ Supports 8-bit linear and 8-bit muLaw samples
+ Output: digital, 16 bit, 4 channels
+ Output sample rate is the input clock / (288 * 2).
*/
#include "emu.h"
@@ -32,11 +25,6 @@
// device type definition
const device_type C352 = &device_creator;
-// default address map
-static ADDRESS_MAP_START( c352, AS_0, 8, c352_device )
- AM_RANGE(0x000000, 0xffffff) AM_ROM
-ADDRESS_MAP_END
-
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
@@ -48,8 +36,7 @@ ADDRESS_MAP_END
c352_device::c352_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, C352, "C352", tag, owner, clock, "c352", __FILE__),
device_sound_interface(mconfig, *this),
- device_memory_interface(mconfig, *this),
- m_space_config("samples", ENDIANNESS_LITTLE, 8, 24, 0, nullptr, *ADDRESS_MAP_NAME(c352))
+ device_rom_interface(mconfig, *this, 24)
{
}
@@ -64,413 +51,194 @@ void c352_device::static_set_divider(device_t &device, int setting)
c352.m_divider = setting;
}
-//-------------------------------------------------
-// memory_space_config - return a description of
-// any address spaces owned by this device
-//-------------------------------------------------
-
-const address_space_config *c352_device::memory_space_config(address_spacenum spacenum) const
+void c352_device::fetch_sample(c352_voice_t* v)
{
- return (spacenum == 0) ? &m_space_config : nullptr;
-}
+ v->last_sample = v->sample;
-// noise generator
-int c352_device::get_mseq_bit()
-{
- unsigned int mask = (1 << (7 - 1));
- unsigned int reg = m_mseq_reg;
- unsigned int bit = reg & (1 << (17 - 1));
-
- if (bit)
+ if(v->flags & C352_FLG_NOISE)
{
- reg = ((reg ^ mask) << 1) | 1;
+ m_random = (m_random>>1) ^ ((-(m_random&1)) & 0xfff6);
+ v->sample = m_random;
}
else
{
- reg = reg << 1;
- }
+ INT8 s;
- m_mseq_reg = reg;
+ s = (INT8)read_byte(v->pos);
- return (reg & 1);
-}
-
-void c352_device::mix_one_channel(unsigned long ch, long sample_count)
-{
- int i;
-
- signed short sample, nextsample;
- signed short noisebuf;
- UINT16 noisecnt;
- INT32 frequency, delta, offset, cnt, flag;
- UINT32 bank;
- UINT32 pos;
-
- frequency = m_c352_ch[ch].pitch;
- delta=frequency;
-
- pos = m_c352_ch[ch].current_addr; // sample pointer
- offset = m_c352_ch[ch].pos; // 16.16 fixed-point offset into the sample
- flag = m_c352_ch[ch].flag;
- bank = m_c352_ch[ch].bank << 16;
-
- noisecnt = m_c352_ch[ch].noisecnt;
- noisebuf = m_c352_ch[ch].noisebuf;
-
- for(i = 0 ; (i < sample_count) && (flag & C352_FLG_BUSY) ; i++)
- {
- offset += delta;
- cnt = (offset>>16)&0x7fff;
- if (cnt) // if there is a whole sample part, chop it off now that it's been applied
- {
- offset &= 0xffff;
- }
-
- if (pos > 0x1000000)
- {
- m_c352_ch[ch].flag &= ~C352_FLG_BUSY;
- return;
- }
-
- sample = (char)m_direct->read_byte(pos);
- nextsample = (char)m_direct->read_byte(pos+cnt);
-
- // sample is muLaw, not 8-bit linear (Fighting Layer uses this extensively)
- if (flag & C352_FLG_MULAW)
- {
- sample = m_mulaw_table[(unsigned char)sample];
- nextsample = m_mulaw_table[(unsigned char)nextsample];
- }
+ if(v->flags & C352_FLG_MULAW)
+ v->sample = m_mulaw_table[(UINT8)s];
else
+ v->sample = s<<8;
+
+ UINT16 pos = v->pos&0xffff;
+
+ if((v->flags & C352_FLG_LOOP) && v->flags & C352_FLG_REVERSE)
{
- sample <<= 8;
- nextsample <<= 8;
+ // backwards>forwards
+ if((v->flags & C352_FLG_LDIR) && pos == v->wave_loop)
+ v->flags &= ~C352_FLG_LDIR;
+ // forwards>backwards
+ else if(!(v->flags & C352_FLG_LDIR) && pos == v->wave_end)
+ v->flags |= C352_FLG_LDIR;
+
+ v->pos += (v->flags&C352_FLG_LDIR) ? -1 : 1;
}
-
- // play noise instead of sample data
- if (flag & C352_FLG_NOISE)
+ else if(pos == v->wave_end)
{
- int noise_level = 0x8000;
- sample = m_c352_ch[ch].noise = (m_c352_ch[ch].noise << 1) | get_mseq_bit();
- sample = (sample & (noise_level - 1)) - (noise_level >> 1);
- if (sample > 0x7f)
+ if((v->flags & C352_FLG_LINK) && (v->flags & C352_FLG_LOOP))
{
- sample = 0x7f;
+ v->pos = (v->wave_start<<16) | v->wave_loop;
+ v->flags |= C352_FLG_LOOPHIST;
}
- else if (sample < 0)
+ else if(v->flags & C352_FLG_LOOP)
{
- sample = 0xff;
- }
- sample = m_mulaw_table[(unsigned char)sample];
-
- if ( (pos+cnt) == pos )
- {
- noisebuf += sample;
- noisecnt++;
- sample = noisebuf / noisecnt;
+ v->pos = (v->pos&0xff0000) | v->wave_loop;
+ v->flags |= C352_FLG_LOOPHIST;
}
else
{
- if ( noisecnt )
- {
- sample = noisebuf / noisecnt;
- }
- else
- {
- sample = m_mulaw_table[0x7f]; // Nearest sound(s) is here.
- }
- noisebuf = 0;
- noisecnt = ( flag & C352_FLG_FILTER ) ? 0 : 1;
+ v->flags |= C352_FLG_KEYOFF;
+ v->flags &= ~C352_FLG_BUSY;
+ v->sample=0;
}
}
-
- // apply linear interpolation
- if ( (flag & (C352_FLG_FILTER | C352_FLG_NOISE)) == 0 )
- {
- sample = (short)(sample + ((nextsample-sample) * (((double)(0x0000ffff&offset) )/0x10000)));
- }
-
- if ( flag & C352_FLG_PHASEFL )
- {
- m_channel_l[i] += ((-sample * m_c352_ch[ch].vol_l)>>8);
- }
else
{
- m_channel_l[i] += ((sample * m_c352_ch[ch].vol_l)>>8);
- }
-
- if ( flag & C352_FLG_PHASEFR )
- {
- m_channel_r[i] += ((-sample * m_c352_ch[ch].vol_r)>>8);
- }
- else
- {
- m_channel_r[i] += ((sample * m_c352_ch[ch].vol_r)>>8);
- }
-
- if ( flag & C352_FLG_PHASERL )
- {
- m_channel_l2[i] += ((-sample * m_c352_ch[ch].vol_l2)>>8);
- }
- else
- {
- m_channel_l2[i] += ((sample * m_c352_ch[ch].vol_l2)>>8);
- }
- m_channel_r2[i] += ((sample * m_c352_ch[ch].vol_r2)>>8);
-
- if ( (flag & C352_FLG_REVERSE) && (flag & C352_FLG_LOOP) )
- {
- if ( !(flag & C352_FLG_LDIR) )
- {
- pos += cnt;
- if (
- (((pos&0xFFFF) > m_c352_ch[ch].end_addr) && ((pos&0xFFFF) < m_c352_ch[ch].start) && (m_c352_ch[ch].start > m_c352_ch[ch].end_addr) ) ||
- (((pos&0xFFFF) > m_c352_ch[ch].end_addr) && ((pos&0xFFFF) > m_c352_ch[ch].start) && (m_c352_ch[ch].start < m_c352_ch[ch].end_addr) ) ||
- ((pos > (bank|0xFFFF)) && (m_c352_ch[ch].end_addr == 0xFFFF))
- )
- {
- m_c352_ch[ch].flag |= C352_FLG_LDIR;
- m_c352_ch[ch].flag |= C352_FLG_LOOPHIST;
- }
- }
- else
- {
- pos -= cnt;
- if (
- (((pos&0xFFFF) < m_c352_ch[ch].repeat) && ((pos&0xFFFF) < m_c352_ch[ch].end_addr) && (m_c352_ch[ch].end_addr > m_c352_ch[ch].start) ) ||
- (((pos&0xFFFF) < m_c352_ch[ch].repeat) && ((pos&0xFFFF) > m_c352_ch[ch].end_addr) && (m_c352_ch[ch].end_addr < m_c352_ch[ch].start) ) ||
- ((pos < bank) && (m_c352_ch[ch].repeat == 0x0000))
- )
- {
- m_c352_ch[ch].flag &= ~C352_FLG_LDIR;
- m_c352_ch[ch].flag |= C352_FLG_LOOPHIST;
- }
- }
- }
- else if ( flag & C352_FLG_REVERSE )
- {
- pos -= cnt;
- if (
- (((pos&0xFFFF) < m_c352_ch[ch].end_addr) && ((pos&0xFFFF) < m_c352_ch[ch].start) && (m_c352_ch[ch].start > m_c352_ch[ch].end_addr) ) ||
- (((pos&0xFFFF) < m_c352_ch[ch].end_addr) && ((pos&0xFFFF) > m_c352_ch[ch].start) && (m_c352_ch[ch].start < m_c352_ch[ch].end_addr) ) ||
- ((pos < bank) && (m_c352_ch[ch].end_addr == 0x0000))
- )
- {
- if ( (flag & C352_FLG_LINK) && (flag & C352_FLG_LOOP) )
- {
- m_c352_ch[ch].bank = m_c352_ch[ch].start_addr & 0xFF;
- m_c352_ch[ch].start_addr = m_c352_ch[ch].repeat_addr;
- m_c352_ch[ch].start = m_c352_ch[ch].start_addr;
- m_c352_ch[ch].repeat = m_c352_ch[ch].repeat_addr;
- pos = (m_c352_ch[ch].bank<<16) + m_c352_ch[ch].start_addr;
- m_c352_ch[ch].flag |= C352_FLG_LOOPHIST;
- }
- else if (flag & C352_FLG_LOOP)
- {
- pos = (pos & 0xFF0000) + m_c352_ch[ch].repeat;
- m_c352_ch[ch].flag |= C352_FLG_LOOPHIST;
- }
- else
- {
- m_c352_ch[ch].flag |= C352_FLG_KEYOFF;
- m_c352_ch[ch].flag &= ~C352_FLG_BUSY;
- return;
- }
- }
- } else {
- pos += cnt;
- if (
- (((pos&0xFFFF) > m_c352_ch[ch].end_addr) && ((pos&0xFFFF) < m_c352_ch[ch].start) && (m_c352_ch[ch].start > m_c352_ch[ch].end_addr) ) ||
- (((pos&0xFFFF) > m_c352_ch[ch].end_addr) && ((pos&0xFFFF) > m_c352_ch[ch].start) && (m_c352_ch[ch].start < m_c352_ch[ch].end_addr) ) ||
- ((pos > (bank|0xFFFF)) && (m_c352_ch[ch].end_addr == 0xFFFF))
- )
- {
- if ( (flag & C352_FLG_LINK) && (flag & C352_FLG_LOOP) )
- {
- m_c352_ch[ch].bank = m_c352_ch[ch].start_addr & 0xFF;
- m_c352_ch[ch].start_addr = m_c352_ch[ch].repeat_addr;
- m_c352_ch[ch].start = m_c352_ch[ch].start_addr;
- m_c352_ch[ch].repeat = m_c352_ch[ch].repeat_addr;
- pos = (m_c352_ch[ch].bank<<16) + m_c352_ch[ch].start_addr;
- m_c352_ch[ch].flag |= C352_FLG_LOOPHIST;
- }
- else if (flag & C352_FLG_LOOP)
- {
- pos = (pos & 0xFF0000) + m_c352_ch[ch].repeat;
- m_c352_ch[ch].flag |= C352_FLG_LOOPHIST;
- }
- else
- {
- m_c352_ch[ch].flag |= C352_FLG_KEYOFF;
- m_c352_ch[ch].flag &= ~C352_FLG_BUSY;
- return;
- }
- }
+ v->pos += (v->flags&C352_FLG_REVERSE) ? -1 : 1;
}
}
-
- m_c352_ch[ch].noisecnt = noisecnt;
- m_c352_ch[ch].noisebuf = noisebuf;
- m_c352_ch[ch].pos = offset;
- m_c352_ch[ch].current_addr = pos;
}
-
void c352_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
{
- int i, j;
- stream_sample_t *bufferl = outputs[0];
- stream_sample_t *bufferr = outputs[1];
- stream_sample_t *bufferl2 = outputs[2];
- stream_sample_t *bufferr2 = outputs[3];
-
- for(i = 0 ; i < samples ; i++)
+
+ int i,j;
+ INT16 s;
+ stream_sample_t *buffer_fl = outputs[0];
+ stream_sample_t *buffer_fr = outputs[1];
+ stream_sample_t *buffer_rl = outputs[2];
+ stream_sample_t *buffer_rr = outputs[3];
+ c352_voice_t* v;
+
+ long out[4];
+
+ for(i=0;iflags & C352_FLG_BUSY)
+ {
+ v->counter += v->freq;
- for (j = 0 ; j < 32 ; j++)
- {
- mix_one_channel(j, samples);
- }
+ if(v->counter > 0x10000)
+ {
+ v->counter &= 0xffff;
+ fetch_sample(v);
+ }
- for(i = 0 ; i < samples ; i++)
- {
- *bufferl++ = (short) (m_channel_l[i] >>3);
- *bufferr++ = (short) (m_channel_r[i] >>3);
- *bufferl2++ = (short) (m_channel_l2[i] >>3);
- *bufferr2++ = (short) (m_channel_r2[i] >>3);
+ s = v->sample;
+
+ // Interpolate samples
+ if((v->flags & C352_FLG_FILTER) == 0)
+ s = v->last_sample + (v->counter*(v->sample-v->last_sample)>>16);
+ }
+
+ // Left
+ out[0] += ((v->flags & C352_FLG_PHASEFL) ? -s * (v->vol_f>>8) : s * (v->vol_f>>8))>>8;
+ out[2] += ((v->flags & C352_FLG_PHASERL) ? -s * (v->vol_r>>8) : s * (v->vol_r>>8))>>8;
+
+ // Right
+ out[1] += ((v->flags & C352_FLG_PHASEFR) ? -s * (v->vol_f&0xff) : s * (v->vol_f&0xff))>>8;
+ out[3] += ((v->flags & C352_FLG_PHASEFR) ? -s * (v->vol_r&0xff) : s * (v->vol_r&0xff))>>8;
+ }
+
+ *buffer_fl++ = (INT16) (out[0]>>3);
+ *buffer_fr++ = (INT16) (out[1]>>3);
+ *buffer_rl++ = (INT16) (out[2]>>3);
+ *buffer_rr++ = (INT16) (out[3]>>3);
}
+
+
}
-unsigned short c352_device::read_reg16(unsigned long address)
+UINT16 c352_device::read_reg16(unsigned long address)
{
- unsigned long chan;
- unsigned short val;
-
m_stream->update();
-
- chan = (address >> 4) & 0xfff;
- if (chan > 31)
+
+ const int reg_map[8] =
{
- val = 0;
- }
+ offsetof(c352_voice_t,vol_f) / sizeof(UINT16),
+ offsetof(c352_voice_t,vol_r) / sizeof(UINT16),
+ offsetof(c352_voice_t,freq) / sizeof(UINT16),
+ offsetof(c352_voice_t,flags) / sizeof(UINT16),
+ offsetof(c352_voice_t,wave_bank) / sizeof(UINT16),
+ offsetof(c352_voice_t,wave_start) / sizeof(UINT16),
+ offsetof(c352_voice_t,wave_end) / sizeof(UINT16),
+ offsetof(c352_voice_t,wave_loop) / sizeof(UINT16),
+ };
+
+ if(address < 0x100)
+ return *((UINT16*)&m_c352_v[address/8]+reg_map[address%8]);
else
- {
- if ((address & 0xf) == 6)
- {
- val = m_c352_ch[chan].flag;
- }
- else
- {
- val = 0;
- }
- }
- return val;
+ return 0;
+
+ return 0;
}
void c352_device::write_reg16(unsigned long address, unsigned short val)
-{
- unsigned long chan;
+{
+ m_stream->update();
+
+ const int reg_map[8] =
+ {
+ offsetof(c352_voice_t,vol_f) / sizeof(UINT16),
+ offsetof(c352_voice_t,vol_r) / sizeof(UINT16),
+ offsetof(c352_voice_t,freq) / sizeof(UINT16),
+ offsetof(c352_voice_t,flags) / sizeof(UINT16),
+ offsetof(c352_voice_t,wave_bank) / sizeof(UINT16),
+ offsetof(c352_voice_t,wave_start) / sizeof(UINT16),
+ offsetof(c352_voice_t,wave_end) / sizeof(UINT16),
+ offsetof(c352_voice_t,wave_loop) / sizeof(UINT16),
+ };
+
int i;
- m_stream->update();
-
- chan = (address >> 4) & 0xfff;
-
- if ( address >= 0x400 )
+ if(address < 0x100)
{
- switch(address)
+ //printf("w %04lx,%04x, %d\n", address, val, reg_map[address&7]);
+ *((UINT16*)&m_c352_v[address/8]+reg_map[address%8]) = val;
+ }
+ else if(address == 0x200)
+ m_control = val;
+ else if(address == 0x202) // execute keyons/keyoffs
+ {
+ for(i=0;i<32;i++)
{
- case 0x404: // execute key-ons/offs
- for ( i = 0 ; i <= 31 ; i++ )
- {
- if ( m_c352_ch[i].flag & C352_FLG_KEYON )
- {
- if (m_c352_ch[i].start_addr != m_c352_ch[i].end_addr)
- {
- m_c352_ch[i].current_addr = (m_c352_ch[i].bank << 16) + m_c352_ch[i].start_addr;
- m_c352_ch[i].start = m_c352_ch[i].start_addr;
- m_c352_ch[i].repeat = m_c352_ch[i].repeat_addr;
- m_c352_ch[i].noisebuf = 0;
- m_c352_ch[i].noisecnt = 0;
- m_c352_ch[i].flag &= ~(C352_FLG_KEYON | C352_FLG_LOOPHIST);
- m_c352_ch[i].flag |= C352_FLG_BUSY;
- }
- }
- else if ( m_c352_ch[i].flag & C352_FLG_KEYOFF )
- {
- m_c352_ch[i].flag &= ~C352_FLG_BUSY;
- m_c352_ch[i].flag &= ~(C352_FLG_KEYOFF);
- }
- }
- break;
- default:
- break;
+ if((m_c352_v[i].flags & C352_FLG_KEYON))
+ {
+ m_c352_v[i].pos = (m_c352_v[i].wave_bank<<16) | m_c352_v[i].wave_start;
+
+ m_c352_v[i].sample = 0;
+ m_c352_v[i].last_sample = 0;
+ m_c352_v[i].counter = 0x10000;
+
+ m_c352_v[i].flags |= C352_FLG_BUSY;
+ m_c352_v[i].flags &= ~(C352_FLG_KEYON|C352_FLG_LOOPHIST);
+
+ //printf("voice %d : pos= %08x\n",i,m_c352_v[i].pos);
+ }
+ else if(m_c352_v[i].flags & C352_FLG_KEYOFF)
+ {
+ m_c352_v[i].flags &= ~(C352_FLG_BUSY|C352_FLG_KEYOFF);
+ }
}
- return;
- }
-
- if (chan > 31)
- {
- LOG(("C352 CTRL %08lx %04x\n", address, val));
- return;
- }
- switch(address & 0xf)
- {
- case 0x0:
- // volumes (output 1)
- LOG(("CH %02ld LVOL %02x RVOL %02x\n", chan, val & 0xff, val >> 8));
- m_c352_ch[chan].vol_l = val & 0xff;
- m_c352_ch[chan].vol_r = val >> 8;
- break;
-
- case 0x2:
- // volumes (output 2)
- LOG(("CH %02ld RLVOL %02x RRVOL %02x\n", chan, val & 0xff, val >> 8));
- m_c352_ch[chan].vol_l2 = val & 0xff;
- m_c352_ch[chan].vol_r2 = val >> 8;
- break;
-
- case 0x4:
- // pitch
- LOG(("CH %02ld PITCH %04x\n", chan, val));
- m_c352_ch[chan].pitch = val;
- break;
-
- case 0x6:
- // flags
- LOG(("CH %02ld FLAG %02x\n", chan, val));
- m_c352_ch[chan].flag = val;
- break;
-
- case 0x8:
- // bank (bits 16-31 of address);
- m_c352_ch[chan].bank = val & 0xff;
- LOG(("CH %02ld BANK %02x", chan, m_c352_ch[chan].bank));
- break;
-
- case 0xa:
- // start address
- LOG(("CH %02ld SADDR %04x\n", chan, val));
- m_c352_ch[chan].start_addr = val;
- break;
-
- case 0xc:
- // end address
- LOG(("CH %02ld EADDR %04x\n", chan, val));
- m_c352_ch[chan].end_addr = val;
- break;
-
- case 0xe:
- // loop address
- LOG(("CH %02ld LADDR %04x\n", chan, val));
- m_c352_ch[chan].repeat_addr = val;
- break;
-
- default:
- LOG(("CH %02ld UNKN %01lx %04x", chan, address & 0xf, val));
- break;
}
}
@@ -481,9 +249,6 @@ void c352_device::device_start()
double y_max = 127.0;
double u = 10.0;
- // find our direct access
- m_direct = &space().direct();
-
m_sample_rate_base = clock() / m_divider;
m_stream = machine().sound().stream_alloc(*this, 0, 4, m_sample_rate_base);
@@ -496,53 +261,52 @@ void c352_device::device_start()
if (i & 0x80)
{
- x = -x;
+ x = -x;
}
- m_mulaw_table[i] = (short)x;
+ m_mulaw_table[i] = (UINT16)x;
}
// register save state info
for (i = 0; i < 32; i++)
{
- save_item(NAME(m_c352_ch[i].vol_l), i);
- save_item(NAME(m_c352_ch[i].vol_r), i);
- save_item(NAME(m_c352_ch[i].vol_l2), i);
- save_item(NAME(m_c352_ch[i].vol_r2), i);
- save_item(NAME(m_c352_ch[i].bank), i);
- save_item(NAME(m_c352_ch[i].noise), i);
- save_item(NAME(m_c352_ch[i].noisebuf), i);
- save_item(NAME(m_c352_ch[i].noisecnt), i);
- save_item(NAME(m_c352_ch[i].pitch), i);
- save_item(NAME(m_c352_ch[i].start_addr), i);
- save_item(NAME(m_c352_ch[i].end_addr), i);
- save_item(NAME(m_c352_ch[i].repeat_addr), i);
- save_item(NAME(m_c352_ch[i].flag), i);
- save_item(NAME(m_c352_ch[i].start), i);
- save_item(NAME(m_c352_ch[i].repeat), i);
- save_item(NAME(m_c352_ch[i].current_addr), i);
- save_item(NAME(m_c352_ch[i].pos), i);
+ save_item(NAME(m_c352_v[i].pos), i);
+ save_item(NAME(m_c352_v[i].counter), i);
+ save_item(NAME(m_c352_v[i].sample), i);
+ save_item(NAME(m_c352_v[i].last_sample), i);
+ save_item(NAME(m_c352_v[i].vol_f), i);
+ save_item(NAME(m_c352_v[i].vol_r), i);
+ save_item(NAME(m_c352_v[i].freq), i);
+ save_item(NAME(m_c352_v[i].flags), i);
+ save_item(NAME(m_c352_v[i].wave_bank), i);
+ save_item(NAME(m_c352_v[i].wave_start), i);
+ save_item(NAME(m_c352_v[i].wave_end), i);
+ save_item(NAME(m_c352_v[i].wave_loop), i);
}
+ save_item(NAME(m_random));
+ save_item(NAME(m_control));
+
}
void c352_device::device_reset()
{
// clear all channels states
- memset(m_c352_ch, 0, sizeof(c352_ch_t)*32);
+ memset(m_c352_v, 0, sizeof(c352_voice_t)*32);
// init noise generator
- m_mseq_reg = 0x12345678;
+ m_random = 0x1234;
+ m_control = 0;
}
READ16_MEMBER( c352_device::read )
{
- return(read_reg16(offset*2));
+ return(read_reg16(offset));
}
WRITE16_MEMBER( c352_device::write )
{
if (mem_mask == 0xffff)
{
- write_reg16(offset*2, data);
+ write_reg16(offset, data);
}
else
{
diff --git a/src/devices/sound/c352.h b/src/devices/sound/c352.h
index d64917d3252..d1ec81289f9 100644
--- a/src/devices/sound/c352.h
+++ b/src/devices/sound/c352.h
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:R. Belmont
+// copyright-holders:R. Belmont, superctr
#pragma once
#ifndef __C352_H__
@@ -24,7 +24,7 @@
class c352_device : public device_t,
public device_sound_interface,
- public device_memory_interface
+ public device_rom_interface
{
public:
// construction/destruction
@@ -46,11 +46,6 @@ protected:
// device_sound_interface overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
- // device_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
-
- const address_space_config m_space_config;
-
private:
enum {
C352_FLG_BUSY = 0x8000, // channel is busy
@@ -71,45 +66,38 @@ private:
C352_FLG_LOOP = 0x0002, // loop forward
C352_FLG_REVERSE = 0x0001 // play sample backwards
};
+
+ struct c352_voice_t {
- struct c352_ch_t
- {
- UINT8 vol_l;
- UINT8 vol_r;
- UINT8 vol_l2;
- UINT8 vol_r2;
- UINT8 bank;
- INT16 noise;
- INT16 noisebuf;
- UINT16 noisecnt;
- UINT16 pitch;
- UINT16 start_addr;
- UINT16 end_addr;
- UINT16 repeat_addr;
- UINT32 flag;
+ UINT32 pos;
+ UINT32 counter;
+
+ INT16 sample;
+ INT16 last_sample;
+
+ UINT16 vol_f;
+ UINT16 vol_r;
+ UINT16 freq;
+ UINT16 flags;
+
+ UINT16 wave_bank;
+ UINT16 wave_start;
+ UINT16 wave_end;
+ UINT16 wave_loop;
- UINT16 start;
- UINT16 repeat;
- UINT32 current_addr;
- UINT32 pos;
};
-
- c352_ch_t m_c352_ch[32];
+
int m_sample_rate_base;
int m_divider;
+
+ c352_voice_t m_c352_v[32];
+ INT16 m_mulaw_table[256];
+
+ UINT16 m_random;
+ UINT16 m_control; // control flags, purpose unknown.
+
+ void fetch_sample(c352_voice_t* v);
- long m_channel_l[2048*2];
- long m_channel_r[2048*2];
- long m_channel_l2[2048*2];
- long m_channel_r2[2048*2];
-
- short m_mulaw_table[256];
- unsigned int m_mseq_reg;
- direct_read_data *m_direct;
-
- // private functions
- int get_mseq_bit(void);
- void mix_one_channel(unsigned long ch, long sample_count);
unsigned short read_reg16(unsigned long address);
void write_reg16(unsigned long address, unsigned short val);
};
diff --git a/src/devices/sound/es5503.cpp b/src/devices/sound/es5503.cpp
index 8103ffbc456..c5fe731717e 100644
--- a/src/devices/sound/es5503.cpp
+++ b/src/devices/sound/es5503.cpp
@@ -44,11 +44,6 @@ static const UINT32 wavemasks[8] = { 0x1ff00, 0x1fe00, 0x1fc00, 0x1f800, 0x1f000
static const UINT32 accmasks[8] = { 0xff, 0x1ff, 0x3ff, 0x7ff, 0xfff, 0x1fff, 0x3fff, 0x7fff };
static const int resshifts[8] = { 9, 10, 11, 12, 13, 14, 15, 16 };
-// default address map
-static ADDRESS_MAP_START( es5503, AS_0, 8, es5503_device )
- AM_RANGE(0x000000, 0x1ffff) AM_ROM
-ADDRESS_MAP_END
-
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
@@ -60,22 +55,12 @@ ADDRESS_MAP_END
es5503_device::es5503_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, ES5503, "Ensoniq ES5503", tag, owner, clock, "es5503", __FILE__),
device_sound_interface(mconfig, *this),
- device_memory_interface(mconfig, *this),
- m_space_config("es5503_samples", ENDIANNESS_LITTLE, 8, 17, 0, nullptr, *ADDRESS_MAP_NAME(es5503)),
+ device_rom_interface(mconfig, *this, 17),
m_irq_func(*this),
m_adc_func(*this)
{
}
-//-------------------------------------------------
-// memory_space_config - return a description of
-// any address spaces owned by this device
-//-------------------------------------------------
-
-const address_space_config *es5503_device::memory_space_config(address_spacenum spacenum) const
-{
- return (spacenum == 0) ? &m_space_config : nullptr;
-}
//-------------------------------------------------
// static_set_type - configuration helper to set
@@ -184,9 +169,9 @@ void es5503_device::sound_stream_update(sound_stream &stream, stream_sample_t **
// channel strobe is always valid when reading; this allows potentially banking per voice
m_channel_strobe = (ctrl>>4) & 0xf;
- data = (INT32)m_direct->read_byte(ramptr + wtptr) ^ 0x80;
+ data = (INT32)read_byte(ramptr + wtptr) ^ 0x80;
- if (m_direct->read_byte(ramptr + wtptr) == 0x00)
+ if (read_byte(ramptr + wtptr) == 0x00)
{
halt_osc(osc, 1, &acc, resshift);
}
@@ -227,9 +212,6 @@ void es5503_device::device_start()
{
int osc;
- // find our direct access
- m_direct = &space().direct();
-
m_irq_func.resolve_safe();
m_adc_func.resolve_safe(0);
diff --git a/src/devices/sound/es5503.h b/src/devices/sound/es5503.h
index 941c56ef8c4..075cde4cf02 100644
--- a/src/devices/sound/es5503.h
+++ b/src/devices/sound/es5503.h
@@ -23,7 +23,7 @@
class es5503_device : public device_t,
public device_sound_interface,
- public device_memory_interface
+ public device_rom_interface
{
public:
// construction/destruction
@@ -50,11 +50,6 @@ protected:
// device_sound_interface overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
- // device_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
-
- const address_space_config m_space_config;
-
devcb_write_line m_irq_func;
devcb_read8 m_adc_func;
@@ -96,8 +91,6 @@ private:
emu_timer *m_timer;
- direct_read_data *m_direct;
-
void halt_osc(int onum, int type, UINT32 *accumulator, int resshift);
};
diff --git a/src/devices/sound/multipcm.cpp b/src/devices/sound/multipcm.cpp
index 0ce61d419f7..60583bf04dc 100644
--- a/src/devices/sound/multipcm.cpp
+++ b/src/devices/sound/multipcm.cpp
@@ -448,16 +448,10 @@ void multipcm_device::set_bank(UINT32 leftoffs, UINT32 rightoffs)
const device_type MULTIPCM = &device_creator;
-// default address map
-static ADDRESS_MAP_START( multipcm, AS_0, 8, multipcm_device )
- AM_RANGE(0x000000, 0x3fffff) AM_ROM
-ADDRESS_MAP_END
-
multipcm_device::multipcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, MULTIPCM, "Sega/Yamaha 315-5560", tag, owner, clock, "multipcm", __FILE__),
device_sound_interface(mconfig, *this),
- device_memory_interface(mconfig, *this),
- m_space_config("mpcm_samples", ENDIANNESS_LITTLE, 8, 24, 0, nullptr),
+ device_rom_interface(mconfig, *this, 24),
m_stream(nullptr),
m_samples(nullptr),
m_slots(nullptr),
@@ -469,7 +463,6 @@ multipcm_device::multipcm_device(const machine_config &mconfig, const char *tag,
m_attack_step(nullptr),
m_decay_release_step(nullptr),
m_freq_step_table(nullptr),
- m_direct(nullptr),
m_left_pan_table(nullptr),
m_right_pan_table(nullptr),
m_linear_to_exp_volume(nullptr),
@@ -477,18 +470,8 @@ multipcm_device::multipcm_device(const machine_config &mconfig, const char *tag,
m_pitch_scale_tables(nullptr),
m_amplitude_scale_tables(nullptr)
{
- m_address_map[0] = *ADDRESS_MAP_NAME(multipcm);
}
-//-------------------------------------------------
-// memory_space_config - return a description of
-// any address spaces owned by this device
-//-------------------------------------------------
-
-const address_space_config *multipcm_device::memory_space_config(address_spacenum spacenum) const
-{
- return (spacenum == 0) ? &m_space_config : nullptr;
-}
//-------------------------------------------------
// device_config_complete - perform any
@@ -506,9 +489,6 @@ void multipcm_device::device_config_complete()
void multipcm_device::device_start()
{
- // find our direct access
- m_direct = &space().direct();
-
const float clock_divider = 180.0f;
m_rate = (float)clock() / clock_divider;
@@ -612,7 +592,7 @@ void multipcm_device::device_start()
for (INT32 sample_byte = 0; sample_byte < 12; sample_byte++)
{
- data[sample_byte] = (UINT8)m_direct->read_byte((sample * 12) + sample_byte);
+ data[sample_byte] = (UINT8)read_byte((sample * 12) + sample_byte);
}
m_samples[sample].m_start = (data[0] << 16) | (data[1] << 8) | (data[2] << 0);
@@ -711,7 +691,7 @@ void multipcm_device::sound_stream_update(sound_stream &stream, stream_sample_t
UINT32 vol = (slot->m_total_level >> TL_SHIFT) | (slot->m_pan << 7);
UINT32 adr = slot->m_offset >> TL_SHIFT;
UINT32 step = slot->m_step;
- INT32 csample = (INT16) (m_direct->read_byte(slot->m_base + adr) << 8);
+ INT32 csample = (INT16) (read_byte(slot->m_base + adr) << 8);
INT32 fpart = slot->m_offset & ((1 << TL_SHIFT) - 1);
INT32 sample = (csample * fpart + slot->m_prev_sample * ((1 << TL_SHIFT) - fpart)) >> TL_SHIFT;
diff --git a/src/devices/sound/multipcm.h b/src/devices/sound/multipcm.h
index 3abb6bd214e..8b66783f67e 100644
--- a/src/devices/sound/multipcm.h
+++ b/src/devices/sound/multipcm.h
@@ -7,7 +7,7 @@
class multipcm_device : public device_t,
public device_sound_interface,
- public device_memory_interface
+ public device_rom_interface
{
public:
multipcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
@@ -26,11 +26,6 @@ protected:
// sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
- // device_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
-
- const address_space_config m_space_config;
-
private:
struct sample_t
{
@@ -110,8 +105,6 @@ private:
UINT32 *m_decay_release_step; // Envelope step tables
UINT32 *m_freq_step_table; // Frequency step table
- direct_read_data *m_direct;
-
INT32 *m_left_pan_table;
INT32 *m_right_pan_table;
INT32 *m_linear_to_exp_volume;
diff --git a/src/devices/sound/okim6295.cpp b/src/devices/sound/okim6295.cpp
index d7af7157792..f5b2490fb52 100644
--- a/src/devices/sound/okim6295.cpp
+++ b/src/devices/sound/okim6295.cpp
@@ -71,12 +71,6 @@ const UINT8 okim6295_device::s_volume_table[16] =
0x00,
};
-// default address map
-static ADDRESS_MAP_START( okim6295, AS_0, 8, okim6295_device )
- AM_RANGE(0x00000, 0x3ffff) AM_ROM
-ADDRESS_MAP_END
-
-
//**************************************************************************
// LIVE DEVICE
@@ -89,15 +83,13 @@ ADDRESS_MAP_END
okim6295_device::okim6295_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, OKIM6295, "OKI6295", tag, owner, clock, "okim6295", __FILE__),
device_sound_interface(mconfig, *this),
- device_memory_interface(mconfig, *this),
- m_space_config("samples", ENDIANNESS_LITTLE, 8, 18, 0, nullptr, *ADDRESS_MAP_NAME(okim6295)),
+ device_rom_interface(mconfig, *this, 18),
m_region(*this, DEVICE_SELF),
m_command(-1),
m_bank_installed(false),
m_bank_offs(0),
m_stream(nullptr),
- m_pin7_state(0),
- m_direct(nullptr)
+ m_pin7_state(0)
{
}
@@ -120,9 +112,6 @@ void okim6295_device::static_set_pin7(device_t &device, int pin7)
void okim6295_device::device_start()
{
- // find our direct access
- m_direct = &space().direct();
-
// create the stream
int divisor = m_pin7_state ? 132 : 165;
m_stream = machine().sound().stream_alloc(*this, 0, 1, clock() / divisor);
@@ -179,17 +168,6 @@ void okim6295_device::device_clock_changed()
}
-//-------------------------------------------------
-// memory_space_config - return a description of
-// any address spaces owned by this device
-//-------------------------------------------------
-
-const address_space_config *okim6295_device::memory_space_config(address_spacenum spacenum) const
-{
- return (spacenum == 0) ? &m_space_config : nullptr;
-}
-
-
//-------------------------------------------------
// stream_generate - handle update requests for
// our sound stream
@@ -202,7 +180,7 @@ void okim6295_device::sound_stream_update(sound_stream &stream, stream_sample_t
// iterate over voices and accumulate sample data
for (auto & elem : m_voice)
- elem.generate_adpcm(*m_direct, outputs[0], samples);
+ elem.generate_adpcm(*this, outputs[0], samples);
}
@@ -304,14 +282,14 @@ void okim6295_device::write_command(UINT8 command)
// determine the start/stop positions
offs_t base = m_command * 8;
- offs_t start = m_direct->read_byte(base + 0) << 16;
- start |= m_direct->read_byte(base + 1) << 8;
- start |= m_direct->read_byte(base + 2) << 0;
+ offs_t start = read_byte(base + 0) << 16;
+ start |= read_byte(base + 1) << 8;
+ start |= read_byte(base + 2) << 0;
start &= 0x3ffff;
- offs_t stop = m_direct->read_byte(base + 3) << 16;
- stop |= m_direct->read_byte(base + 4) << 8;
- stop |= m_direct->read_byte(base + 5) << 0;
+ offs_t stop = read_byte(base + 3) << 16;
+ stop |= read_byte(base + 4) << 8;
+ stop |= read_byte(base + 5) << 0;
stop &= 0x3ffff;
if (start < stop)
@@ -396,7 +374,7 @@ okim6295_device::okim_voice::okim_voice()
// add them to an output stream
//-------------------------------------------------
-void okim6295_device::okim_voice::generate_adpcm(direct_read_data &direct, stream_sample_t *buffer, int samples)
+void okim6295_device::okim_voice::generate_adpcm(device_rom_interface &rom, stream_sample_t *buffer, int samples)
{
// skip if not active
if (!m_playing)
@@ -406,7 +384,7 @@ void okim6295_device::okim_voice::generate_adpcm(direct_read_data &direct, strea
while (samples-- != 0)
{
// fetch the next sample byte
- int nibble = direct.read_byte(m_base_offset + m_sample / 2) >> (((m_sample & 1) << 2) ^ 4);
+ int nibble = rom.read_byte(m_base_offset + m_sample / 2) >> (((m_sample & 1) << 2) ^ 4);
// output to the buffer, scaling by the volume
// signal in range -2048..2047, volume in range 2..32 => signal * volume / 2 in range -32768..32767
diff --git a/src/devices/sound/okim6295.h b/src/devices/sound/okim6295.h
index 4fb85839f5c..b637ed057a4 100644
--- a/src/devices/sound/okim6295.h
+++ b/src/devices/sound/okim6295.h
@@ -54,7 +54,7 @@ enum
class okim6295_device : public device_t,
public device_sound_interface,
- public device_memory_interface
+ public device_rom_interface
{
public:
// construction/destruction
@@ -80,9 +80,6 @@ protected:
virtual void device_post_load() override;
virtual void device_clock_changed() override;
- // device_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
-
// device_sound_interface overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
@@ -91,7 +88,7 @@ protected:
{
public:
okim_voice();
- void generate_adpcm(direct_read_data &direct, stream_sample_t *buffer, int samples);
+ void generate_adpcm(device_rom_interface &rom, stream_sample_t *buffer, int samples);
oki_adpcm_state m_adpcm; // current ADPCM state
bool m_playing;
@@ -102,7 +99,6 @@ protected:
};
// configuration state
- const address_space_config m_space_config;
optional_memory_region m_region;
// internal state
@@ -114,7 +110,6 @@ protected:
offs_t m_bank_offs;
sound_stream * m_stream;
UINT8 m_pin7_state;
- direct_read_data * m_direct;
static const UINT8 s_volume_table[16];
};
diff --git a/src/devices/sound/okim9810.cpp b/src/devices/sound/okim9810.cpp
index cd89d77a3e0..059cdb63b4d 100644
--- a/src/devices/sound/okim9810.cpp
+++ b/src/devices/sound/okim9810.cpp
@@ -62,11 +62,6 @@ const UINT32 okim9810_device::s_sampling_freq_table[16] =
0
};
-// default address map
-static ADDRESS_MAP_START( okim9810, AS_0, 8, okim9810_device )
- AM_RANGE(0x000000, 0xffffff) AM_ROM
-ADDRESS_MAP_END
-
//**************************************************************************
@@ -80,8 +75,7 @@ ADDRESS_MAP_END
okim9810_device::okim9810_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, OKIM9810, "OKI9810", tag, owner, clock, "okim9810", __FILE__),
device_sound_interface(mconfig, *this),
- device_memory_interface(mconfig, *this),
- m_space_config("samples", ENDIANNESS_BIG, 8, 24, 0, nullptr, *ADDRESS_MAP_NAME(okim9810)),
+ device_rom_interface(mconfig, *this, 24),
m_stream(nullptr),
m_TMP_register(0x00),
m_global_volume(0x00),
@@ -97,9 +91,6 @@ okim9810_device::okim9810_device(const machine_config &mconfig, const char *tag,
void okim9810_device::device_start()
{
- // find our direct access
- m_direct = &space().direct();
-
// create the stream
//int divisor = m_pin7 ? 132 : 165;
m_stream = machine().sound().stream_alloc(*this, 0, 2, clock());
@@ -168,16 +159,6 @@ void okim9810_device::device_clock_changed()
}
-//-------------------------------------------------
-// memory_space_config - return a description of
-// any address spaces owned by this device
-//-------------------------------------------------
-
-const address_space_config *okim9810_device::memory_space_config(address_spacenum spacenum) const
-{
- return (spacenum == 0) ? &m_space_config : nullptr;
-}
-
//-------------------------------------------------
// stream_generate - handle update requests for
@@ -192,7 +173,7 @@ void okim9810_device::sound_stream_update(sound_stream &stream, stream_sample_t
// iterate over voices and accumulate sample data
for (auto & elem : m_voice)
- elem.generate_audio(*m_direct, outputs, samples, m_global_volume, clock(), m_filter_type);
+ elem.generate_audio(*this, outputs, samples, m_global_volume, clock(), m_filter_type);
}
@@ -313,31 +294,31 @@ void okim9810_device::write_command(UINT8 data)
const offs_t base = m_TMP_register * 8;
offs_t startAddr;
- UINT8 startFlags = m_direct->read_byte(base + 0);
- startAddr = m_direct->read_byte(base + 1) << 16;
- startAddr |= m_direct->read_byte(base + 2) << 8;
- startAddr |= m_direct->read_byte(base + 3) << 0;
+ UINT8 startFlags = read_byte(base + 0);
+ startAddr = read_byte(base + 1) << 16;
+ startAddr |= read_byte(base + 2) << 8;
+ startAddr |= read_byte(base + 3) << 0;
offs_t endAddr;
- UINT8 endFlags = m_direct->read_byte(base + 4);
- endAddr = m_direct->read_byte(base + 5) << 16;
- endAddr |= m_direct->read_byte(base + 6) << 8;
- endAddr |= m_direct->read_byte(base + 7) << 0;
+ UINT8 endFlags = read_byte(base + 4);
+ endAddr = read_byte(base + 5) << 16;
+ endAddr |= read_byte(base + 6) << 8;
+ endAddr |= read_byte(base + 7) << 0;
// Sub-table
if (startFlags & 0x80)
{
offs_t subTable = startAddr;
// TODO: New startFlags &= 0x80. Are there further subtables?
- startFlags = m_direct->read_byte(subTable + 0);
- startAddr = m_direct->read_byte(subTable + 1) << 16;
- startAddr |= m_direct->read_byte(subTable + 2) << 8;
- startAddr |= m_direct->read_byte(subTable + 3) << 0;
+ startFlags = read_byte(subTable + 0);
+ startAddr = read_byte(subTable + 1) << 16;
+ startAddr |= read_byte(subTable + 2) << 8;
+ startAddr |= read_byte(subTable + 3) << 0;
// TODO: What does byte (subTable + 4) refer to?
- endAddr = m_direct->read_byte(subTable + 5) << 16;
- endAddr |= m_direct->read_byte(subTable + 6) << 8;
- endAddr |= m_direct->read_byte(subTable + 7) << 0;
+ endAddr = read_byte(subTable + 5) << 16;
+ endAddr |= read_byte(subTable + 6) << 8;
+ endAddr |= read_byte(subTable + 7) << 0;
}
m_voice[channel].m_sample = 0;
@@ -446,7 +427,7 @@ okim9810_device::okim_voice::okim_voice()
// add them to an output stream
//-------------------------------------------------
-void okim9810_device::okim_voice::generate_audio(direct_read_data &direct,
+void okim9810_device::okim_voice::generate_audio(device_rom_interface &rom,
stream_sample_t **buffers,
int samples,
const UINT8 global_volume,
@@ -478,7 +459,7 @@ void okim9810_device::okim_voice::generate_audio(direct_read_data &direct,
if (m_sample == 0)
{
// fetch the first sample nibble
- int nibble0 = direct.read_byte(m_base_offset + m_sample / 2) >> (((m_sample & 1) << 2) ^ 4);
+ int nibble0 = rom.read_byte(m_base_offset + m_sample / 2) >> (((m_sample & 1) << 2) ^ 4);
switch (m_playbackAlgo)
{
case OKIM9810_ADPCM_PLAYBACK:
@@ -504,7 +485,7 @@ void okim9810_device::okim_voice::generate_audio(direct_read_data &direct,
}
// And fetch the second sample nibble
- int nibble1 = direct.read_byte(m_base_offset + (m_sample+1) / 2) >> ((((m_sample+1) & 1) << 2) ^ 4);
+ int nibble1 = rom.read_byte(m_base_offset + (m_sample+1) / 2) >> ((((m_sample+1) & 1) << 2) ^ 4);
switch (m_playbackAlgo)
{
case OKIM9810_ADPCM_PLAYBACK:
diff --git a/src/devices/sound/okim9810.h b/src/devices/sound/okim9810.h
index ea37366288e..5bdafed1f3b 100644
--- a/src/devices/sound/okim9810.h
+++ b/src/devices/sound/okim9810.h
@@ -68,7 +68,7 @@ enum
class okim9810_device : public device_t,
public device_sound_interface,
- public device_memory_interface
+ public device_rom_interface
{
public:
// construction/destruction
@@ -89,9 +89,6 @@ protected:
virtual void device_post_load() override;
virtual void device_clock_changed() override;
- // device_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
-
// device_sound_interface overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
@@ -100,7 +97,7 @@ protected:
{
public:
okim_voice();
- void generate_audio(direct_read_data &direct,
+ void generate_audio(device_rom_interface &rom,
stream_sample_t **buffers,
int samples,
const UINT8 global_volume,
@@ -137,10 +134,8 @@ protected:
};
// internal state
- const address_space_config m_space_config;
sound_stream* m_stream;
- direct_read_data* m_direct;
UINT8 m_TMP_register;
diff --git a/src/devices/sound/qs1000.cpp b/src/devices/sound/qs1000.cpp
index 07a8fc1223e..80e7526b7be 100644
--- a/src/devices/sound/qs1000.cpp
+++ b/src/devices/sound/qs1000.cpp
@@ -167,12 +167,6 @@ ROM_START( qs1000 )
ROM_END
-// Wavetable ROM address map
-static ADDRESS_MAP_START( qs1000, AS_0, 8, qs1000_device )
- AM_RANGE(0x000000, 0xffffff) AM_ROM AM_REGION("qs1000", 0)
-ADDRESS_MAP_END
-
-
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
@@ -183,7 +177,7 @@ ADDRESS_MAP_END
qs1000_device::qs1000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, QS1000, "QS1000", tag, owner, clock, "qs1000", __FILE__),
device_sound_interface(mconfig, *this),
- device_memory_interface(mconfig, *this),
+ device_rom_interface(mconfig, *this, 24),
m_external_rom(false),
m_in_p1_cb(*this),
m_in_p2_cb(*this),
@@ -192,12 +186,9 @@ qs1000_device::qs1000_device(const machine_config &mconfig, const char *tag, dev
m_out_p2_cb(*this),
m_out_p3_cb(*this),
//m_serial_w_cb(*this),
- m_space_config("samples", ENDIANNESS_LITTLE, 8, 24, 0, nullptr),
m_stream(nullptr),
- m_direct(nullptr),
m_cpu(*this, "cpu")
{
- m_address_map[0] = *ADDRESS_MAP_NAME(qs1000);
}
@@ -226,9 +217,6 @@ machine_config_constructor qs1000_device::device_mconfig_additions() const
//-------------------------------------------------
void qs1000_device::device_start()
{
- // Find our direct access
- m_direct = &space().direct();
-
// The QS1000 operates at 24MHz. Creating a stream at that rate
// would be overkill so we opt for a fraction of that rate which
// gives reasonable results
@@ -311,16 +299,6 @@ void qs1000_device::device_reset()
}
-//-------------------------------------------------
-// memory_space_config - return a description of
-// any address spaces owned by this device
-//-------------------------------------------------
-const address_space_config *qs1000_device::memory_space_config(address_spacenum spacenum) const
-{
- return (spacenum == 0) ? &m_space_config : nullptr;
-}
-
-
//-------------------------------------------------
// device_timer - handle deferred writes and
// resets as a timer callback
@@ -520,7 +498,7 @@ void qs1000_device::sound_stream_update(sound_stream &stream, stream_sample_t **
if (chan.m_start + chan.m_adpcm_addr >= chan.m_loop_end)
chan.m_adpcm_addr = chan.m_loop_start - chan.m_start;
- UINT8 data = m_direct->read_byte(chan.m_start + (chan.m_adpcm_addr >> 1));
+ UINT8 data = read_byte(chan.m_start + (chan.m_adpcm_addr >> 1));
UINT8 nibble = (chan.m_adpcm_addr & 1 ? data : data >> 4) & 0xf;
chan.m_adpcm_signal = chan.m_adpcm.clock(nibble);
}
@@ -553,7 +531,7 @@ void qs1000_device::sound_stream_update(sound_stream &stream, stream_sample_t **
}
}
- INT8 result = m_direct->read_byte(chan.m_addr) - 128;
+ INT8 result = read_byte(chan.m_addr) - 128;
chan.m_acc += chan.m_freq;
chan.m_addr = (chan.m_addr + (chan.m_acc >> 18)) & QS1000_ADDRESS_MASK;
@@ -573,9 +551,9 @@ void qs1000_device::start_voice(int ch)
UINT32 table_addr = (m_channels[ch].m_regs[0x01] << 16) | (m_channels[ch].m_regs[0x02] << 8) | m_channels[ch].m_regs[0x03];
// Fetch the sound information
- UINT16 freq = (m_direct->read_byte(table_addr + 0) << 8) | m_direct->read_byte(table_addr + 1);
- UINT16 word1 = (m_direct->read_byte(table_addr + 2) << 8) | m_direct->read_byte(table_addr + 3);
- UINT16 base = (m_direct->read_byte(table_addr + 4) << 8) | m_direct->read_byte(table_addr + 5);
+ UINT16 freq = (read_byte(table_addr + 0) << 8) | read_byte(table_addr + 1);
+ UINT16 word1 = (read_byte(table_addr + 2) << 8) | read_byte(table_addr + 3);
+ UINT16 base = (read_byte(table_addr + 4) << 8) | read_byte(table_addr + 5);
if (LOGGING_ENABLED)
printf("[%.6x] Freq:%.4x ????:%.4x Addr:%.4x\n", table_addr, freq, word1, base);
@@ -585,42 +563,42 @@ void qs1000_device::start_voice(int ch)
return;
// Fetch the sample pointers and flags
- UINT8 byte0 = m_direct->read_byte(base);
+ UINT8 byte0 = read_byte(base);
UINT32 start_addr;
start_addr = byte0 << 16;
- start_addr |= m_direct->read_byte(base + 1) << 8;
- start_addr |= m_direct->read_byte(base + 2) << 0;
+ start_addr |= read_byte(base + 1) << 8;
+ start_addr |= read_byte(base + 2) << 0;
start_addr &= QS1000_ADDRESS_MASK;
UINT32 loop_start;
loop_start = (byte0 & 0xf0) << 16;
- loop_start |= m_direct->read_byte(base + 3) << 12;
- loop_start |= m_direct->read_byte(base + 4) << 4;
- loop_start |= m_direct->read_byte(base + 5) >> 4;
+ loop_start |= read_byte(base + 3) << 12;
+ loop_start |= read_byte(base + 4) << 4;
+ loop_start |= read_byte(base + 5) >> 4;
loop_start &= QS1000_ADDRESS_MASK;
UINT32 loop_end;
loop_end = (byte0 & 0xf0) << 16;
- loop_end |= (m_direct->read_byte(base + 5) & 0xf) << 16;
- loop_end |= m_direct->read_byte(base + 6) << 8;
- loop_end |= m_direct->read_byte(base + 7);
+ loop_end |= (read_byte(base + 5) & 0xf) << 16;
+ loop_end |= read_byte(base + 6) << 8;
+ loop_end |= read_byte(base + 7);
loop_end &= QS1000_ADDRESS_MASK;
- UINT8 byte8 = m_direct->read_byte(base + 8);
+ UINT8 byte8 = read_byte(base + 8);
if (LOGGING_ENABLED)
{
- UINT8 byte9 = m_direct->read_byte(base + 9);
- UINT8 byte10 = m_direct->read_byte(base + 10);
- UINT8 byte11 = m_direct->read_byte(base + 11);
- UINT8 byte12 = m_direct->read_byte(base + 12);
- UINT8 byte13 = m_direct->read_byte(base + 13);
- UINT8 byte14 = m_direct->read_byte(base + 14);
- UINT8 byte15 = m_direct->read_byte(base + 15);
+ UINT8 byte9 = read_byte(base + 9);
+ UINT8 byte10 = read_byte(base + 10);
+ UINT8 byte11 = read_byte(base + 11);
+ UINT8 byte12 = read_byte(base + 12);
+ UINT8 byte13 = read_byte(base + 13);
+ UINT8 byte14 = read_byte(base + 14);
+ UINT8 byte15 = read_byte(base + 15);
printf("[%.6x] Sample Start:%.6x Loop Start:%.6x Loop End:%.6x Params: %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x\n", base, start_addr, loop_start, loop_end, byte8, byte9, byte10, byte11, byte12, byte13, byte14, byte15);
}
diff --git a/src/devices/sound/qs1000.h b/src/devices/sound/qs1000.h
index 48545485169..b47576a7245 100644
--- a/src/devices/sound/qs1000.h
+++ b/src/devices/sound/qs1000.h
@@ -55,7 +55,7 @@
class qs1000_device : public device_t,
public device_sound_interface,
- public device_memory_interface
+ public device_rom_interface
{
public:
// construction/destruction
@@ -82,9 +82,6 @@ protected:
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
- // device_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
-
// device_sound_interface overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
@@ -128,9 +125,7 @@ public:
//devcb_write8 m_serial_w_cb;
// Internal state
- const address_space_config m_space_config;
sound_stream * m_stream;
- direct_read_data * m_direct;
required_device m_cpu;
// Wavetable engine
diff --git a/src/devices/sound/segapcm.cpp b/src/devices/sound/segapcm.cpp
index 555ee019b16..d0e7864dd1f 100644
--- a/src/devices/sound/segapcm.cpp
+++ b/src/devices/sound/segapcm.cpp
@@ -19,7 +19,7 @@ const device_type SEGAPCM = &device_creator;
segapcm_device::segapcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, SEGAPCM, "Sega PCM", tag, owner, clock, "segapcm", __FILE__),
device_sound_interface(mconfig, *this),
- m_rom(*this, DEVICE_SELF),
+ device_rom_interface(mconfig, *this, 21),
m_ram(nullptr),
m_bank(0),
m_bankshift(0),
@@ -35,7 +35,7 @@ segapcm_device::segapcm_device(const machine_config &mconfig, const char *tag, d
void segapcm_device::device_start()
{
- int mask, rom_mask;
+ int mask;
m_ram = std::make_unique(0x800);
@@ -46,10 +46,7 @@ void segapcm_device::device_start()
if (!mask)
mask = BANK_MASK7 >> 16;
- for(rom_mask = 1; rom_mask < m_rom.length(); rom_mask *= 2) { };
- rom_mask--;
-
- m_bankmask = mask & (rom_mask >> m_bankshift);
+ m_bankmask = mask & (0x1fffff >> m_bankshift);
m_stream = stream_alloc(0, 2, clock() / 128);
@@ -97,7 +94,7 @@ void segapcm_device::sound_stream_update(sound_stream &stream, stream_sample_t *
/* only process active channels */
if (!(regs[0x86]&1))
{
- const UINT8 *rom = m_rom + ((regs[0x86] & m_bankmask) << m_bankshift);
+ int offset = (regs[0x86] & m_bankmask) << m_bankshift;
UINT32 addr = (regs[0x85] << 16) | (regs[0x84] << 8) | m_low[ch];
UINT32 loop = (regs[0x05] << 16) | (regs[0x04] << 8);
UINT8 end = regs[6] + 1;
@@ -120,7 +117,7 @@ void segapcm_device::sound_stream_update(sound_stream &stream, stream_sample_t *
}
/* fetch the sample */
- v = rom[(addr >> 8) & m_rom.mask()] - 0x80;
+ v = read_byte(offset + (addr >> 8)) - 0x80;
/* apply panning and advance */
outputs[0][i] += v * (regs[2] & 0x7f);
diff --git a/src/devices/sound/segapcm.h b/src/devices/sound/segapcm.h
index 48474134b46..5861db66940 100644
--- a/src/devices/sound/segapcm.h
+++ b/src/devices/sound/segapcm.h
@@ -35,7 +35,8 @@
//**************************************************************************
class segapcm_device : public device_t,
- public device_sound_interface
+ public device_sound_interface,
+ public device_rom_interface
{
public:
segapcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
@@ -55,7 +56,6 @@ protected:
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
private:
- required_region_ptr m_rom;
std::unique_ptr m_ram;
UINT8 m_low[16];
int m_bank;
diff --git a/src/devices/sound/vlm5030.cpp b/src/devices/sound/vlm5030.cpp
index 90295f2807e..eabdbccb89e 100644
--- a/src/devices/sound/vlm5030.cpp
+++ b/src/devices/sound/vlm5030.cpp
@@ -159,16 +159,10 @@ static const int vlm5030_speed_table[8] =
const device_type VLM5030 = &device_creator;
-// default address map
-static ADDRESS_MAP_START( vlm5030, AS_0, 8, vlm5030_device )
- AM_RANGE(0x0000, 0xffff) AM_ROM
-ADDRESS_MAP_END
-
vlm5030_device::vlm5030_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, VLM5030, "VLM5030", tag, owner, clock, "vlm5030", __FILE__),
device_sound_interface(mconfig, *this),
- device_memory_interface(mconfig, *this),
- m_space_config("samples", ENDIANNESS_LITTLE, 8, 16, 0, nullptr, *ADDRESS_MAP_NAME(vlm5030)),
+ device_rom_interface(mconfig, *this, 16),
m_channel(nullptr),
m_coeff(nullptr),
m_address(0),
@@ -202,16 +196,6 @@ vlm5030_device::vlm5030_device(const machine_config &mconfig, const char *tag, d
memset(m_x, 0, sizeof(m_x));
}
-//-------------------------------------------------
-// memory_space_config - return a description of
-// any address spaces owned by this device
-//-------------------------------------------------
-
-const address_space_config *vlm5030_device::memory_space_config(address_spacenum spacenum) const
-{
- return (spacenum == AS_0) ? &m_space_config : nullptr;
-}
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -284,8 +268,7 @@ int vlm5030_device::get_bits(int sbit,int bits)
int offset = m_address + (sbit>>3);
int data;
- data = space(AS_0).read_byte(offset) |
- space(AS_0).read_byte(offset+1)<<8;
+ data = read_byte(offset) | (read_byte(offset+1)<<8);
data >>= (sbit&7);
data &= (0xff>>(8-bits));
@@ -305,7 +288,7 @@ int vlm5030_device::parse_frame()
m_old_k[i] = m_new_k[i];
/* command byte check */
- cmd = space(AS_0).read_byte(m_address);
+ cmd = read_byte(m_address);
if( cmd & 0x01 )
{ /* extend frame */
m_new_energy = m_new_pitch = 0;
@@ -469,8 +452,7 @@ WRITE_LINE_MEMBER( vlm5030_device::st )
else
{ /* indirect accedd mode */
table = (m_latch_data&0xfe) + (((int)m_latch_data&1)<<8);
- m_address = (space(AS_0).read_byte(table)<<8)
- | space(AS_0).read_byte(table+1);
+ m_address = (read_byte(table)<<8) | read_byte(table+1);
#if 0
/* show unsupported parameter message */
if( m_interp_step != 1)
diff --git a/src/devices/sound/vlm5030.h b/src/devices/sound/vlm5030.h
index ca5dca436d7..93768a8c14f 100644
--- a/src/devices/sound/vlm5030.h
+++ b/src/devices/sound/vlm5030.h
@@ -6,7 +6,7 @@
#define __VLM5030_H__
class vlm5030_device : public device_t,
- public device_sound_interface, public device_memory_interface
+ public device_sound_interface, public device_rom_interface
{
public:
vlm5030_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
@@ -32,9 +32,6 @@ protected:
virtual void device_start() override;
virtual void device_reset() override;
- // device_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
-
// sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
diff --git a/src/devices/sound/ymf278b.cpp b/src/devices/sound/ymf278b.cpp
index 67db79498e7..30984c780c5 100644
--- a/src/devices/sound/ymf278b.cpp
+++ b/src/devices/sound/ymf278b.cpp
@@ -54,12 +54,6 @@
#define LOG(x) do { if (VERBOSE) logerror x; } while (0)
-// default address map
-static ADDRESS_MAP_START( ymf278b, AS_0, 8, ymf278b_device )
- AM_RANGE(0x000000, 0x3fffff) AM_ROM
-ADDRESS_MAP_END
-
-
/**************************************************************************/
int ymf278b_device::compute_rate(YMF278BSlot *slot, int val)
@@ -255,23 +249,23 @@ void ymf278b_device::sound_stream_update(sound_stream &stream, stream_sample_t *
{
// 8 bit
case 0:
- sample = m_direct->read_byte(slot->startaddr + (slot->stepptr>>16))<<8;
+ sample = read_byte(slot->startaddr + (slot->stepptr>>16))<<8;
break;
// 12 bit
case 1:
if (slot->stepptr & 0x10000)
- sample = m_direct->read_byte(slot->startaddr + (slot->stepptr>>17)*3+2)<<8 |
- (m_direct->read_byte(slot->startaddr + (slot->stepptr>>17)*3+1) << 4 & 0xf0);
+ sample = read_byte(slot->startaddr + (slot->stepptr>>17)*3+2)<<8 |
+ (read_byte(slot->startaddr + (slot->stepptr>>17)*3+1) << 4 & 0xf0);
else
- sample = m_direct->read_byte(slot->startaddr + (slot->stepptr>>17)*3)<<8 |
- (m_direct->read_byte(slot->startaddr + (slot->stepptr>>17)*3+1) & 0xf0);
+ sample = read_byte(slot->startaddr + (slot->stepptr>>17)*3)<<8 |
+ (read_byte(slot->startaddr + (slot->stepptr>>17)*3+1) & 0xf0);
break;
// 16 bit
case 2:
- sample = m_direct->read_byte(slot->startaddr + ((slot->stepptr>>16)*2))<<8 |
- m_direct->read_byte(slot->startaddr + ((slot->stepptr>>16)*2)+1);
+ sample = read_byte(slot->startaddr + ((slot->stepptr>>16)*2))<<8 |
+ read_byte(slot->startaddr + ((slot->stepptr>>16)*2)+1);
break;
// ?? bit, effect is unknown, datasheet says it's prohibited
@@ -485,7 +479,7 @@ void ymf278b_device::C_w(UINT8 reg, UINT8 data)
else
offset = m_wavetblhdr*0x80000 + (slot->wave - 384) * 12;
for (i = 0; i < 12; i++)
- p[i] = m_direct->read_byte(offset+i);
+ p[i] = read_byte(offset+i);
slot->bits = (p[0]&0xc0)>>6;
slot->startaddr = (p[2] | (p[1]<<8) | ((p[0]&0x3f)<<16));
@@ -762,7 +756,7 @@ READ8_MEMBER( ymf278b_device::read )
ret = (m_pcmregs[m_port_C] & 0x1f) | 0x20; // device ID in upper bits
break;
case 6:
- ret = m_direct->read_byte(m_memadr);
+ ret = read_byte(m_memadr);
m_memadr = (m_memadr + 1) & 0x3fffff;
break;
@@ -969,7 +963,6 @@ void ymf278b_device::device_start()
{
int i;
- m_direct = &space().direct();
m_clock = clock();
m_irq_handler.resolve();
@@ -1032,12 +1025,10 @@ const device_type YMF278B = &device_creator;
ymf278b_device::ymf278b_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, YMF278B, "YMF278B", tag, owner, clock, "ymf278b", __FILE__),
device_sound_interface(mconfig, *this),
- device_memory_interface(mconfig, *this),
- m_space_config("samples", ENDIANNESS_BIG, 8, 22, 0, nullptr),
+ device_rom_interface(mconfig, *this, 22),
m_irq_handler(*this),
m_last_fm_data(0)
{
- m_address_map[0] = *ADDRESS_MAP_NAME(ymf278b);
}
//-------------------------------------------------
diff --git a/src/devices/sound/ymf278b.h b/src/devices/sound/ymf278b.h
index 6c750fcfd91..508afb5dd60 100644
--- a/src/devices/sound/ymf278b.h
+++ b/src/devices/sound/ymf278b.h
@@ -14,7 +14,7 @@
class ymf278b_device : public device_t,
public device_sound_interface,
- public device_memory_interface
+ public device_rom_interface
{
public:
ymf278b_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
@@ -36,9 +36,6 @@ protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
- // device_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override { return (spacenum == AS_0) ? &m_space_config : nullptr; }
-
// sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
@@ -131,8 +128,6 @@ private:
sound_stream * m_stream;
std::unique_ptr m_mix_buffer;
- direct_read_data * m_direct;
- const address_space_config m_space_config;
devcb_write_line m_irq_handler;
UINT8 m_last_fm_data;
diff --git a/src/devices/video/gb_lcd.cpp b/src/devices/video/gb_lcd.cpp
index 024ba3d777a..e4e34e8e2e7 100644
--- a/src/devices/video/gb_lcd.cpp
+++ b/src/devices/video/gb_lcd.cpp
@@ -419,7 +419,7 @@ void gb_lcd_device::common_reset()
// specific reg initialization
m_vid_regs[0x06] = 0xff;
- for (int i = 0x0c; i < _NR_GB_VID_REGS; i++)
+ for (int i = 0x0c; i < NR_GB_VID_REGS; i++)
m_vid_regs[i] = 0xff;
LCDSTAT = 0x80;
diff --git a/src/devices/video/gb_lcd.h b/src/devices/video/gb_lcd.h
index 4e512e3da79..4c443d827e2 100644
--- a/src/devices/video/gb_lcd.h
+++ b/src/devices/video/gb_lcd.h
@@ -12,9 +12,6 @@
#include "emu.h"
-#define _NR_GB_VID_REGS 0x40
-
-
struct layer_struct {
UINT8 enabled;
UINT8 *bg_tiles;
@@ -82,7 +79,9 @@ protected:
int m_window_lines_drawn;
- UINT8 m_vid_regs[_NR_GB_VID_REGS];
+ static constexpr unsigned NR_GB_VID_REGS = 0x40;
+
+ UINT8 m_vid_regs[NR_GB_VID_REGS];
UINT8 m_bg_zbuf[160];
UINT16 m_cgb_bpal[32]; /* CGB current background palette table */
diff --git a/src/mame/video/gba.cpp b/src/devices/video/gba_lcd.cpp
similarity index 62%
rename from src/mame/video/gba.cpp
rename to src/devices/video/gba_lcd.cpp
index 17b8d926938..e3af8236da6 100644
--- a/src/mame/video/gba.cpp
+++ b/src/devices/video/gba_lcd.cpp
@@ -2,7 +2,7 @@
// copyright-holders:R. Belmont,Ryan Holtz
/***************************************************************************
- gba.c
+ gba_lcd.c
File to handle emulation of the video hardware of the Game Boy Advance
@@ -11,7 +11,165 @@
***************************************************************************/
#include "emu.h"
-#include "includes/gba.h"
+#include "rendlay.h"
+
+#include "gba_lcd.h"
+
+/* LCD I/O Registers */
+#define DISPCNT HWLO(0x000) /* 0x4000000 2 R/W LCD Control */
+#define GRNSWAP HWHI(0x000) /* 0x4000002 2 R/W Undocumented - Green Swap */
+#define DISPSTAT HWLO(0x004) /* 0x4000004 2 R/W General LCD Status (STAT,LYC) */
+#define VCOUNT HWHI(0x004) /* 0x4000006 2 R Vertical Counter (LY) */
+#define BG0CNT HWLO(0x008) /* 0x4000008 2 R/W BG0 Control */
+#define BG1CNT HWHI(0x008) /* 0x400000A 2 R/W BG1 Control */
+#define BG2CNT HWLO(0x00C) /* 0x400000C 2 R/W BG2 Control */
+#define BG3CNT HWHI(0x00C) /* 0x400000E 2 R/W BG3 Control */
+#define BG0HOFS HWLO(0x010) /* 0x4000010 2 W BG0 X-Offset */
+#define BG0VOFS HWHI(0x010) /* 0x4000012 2 W BG0 Y-Offset */
+#define BG1HOFS HWLO(0x014) /* 0x4000014 2 W BG1 X-Offset */
+#define BG1VOFS HWHI(0x014) /* 0x4000016 2 W BG1 Y-Offset */
+#define BG2HOFS HWLO(0x018) /* 0x4000018 2 W BG2 X-Offset */
+#define BG2VOFS HWHI(0x018) /* 0x400001A 2 W BG2 Y-Offset */
+#define BG3HOFS HWLO(0x01C) /* 0x400001C 2 W BG3 X-Offset */
+#define BG3VOFS HWHI(0x01C) /* 0x400001E 2 W BG3 Y-Offset */
+#define BG2PA HWLO(0x020) /* 0x4000020 2 W BG2 Rotation/Scaling Parameter A (dx) */
+#define BG2PB HWHI(0x020) /* 0x4000022 2 W BG2 Rotation/Scaling Parameter B (dmx) */
+#define BG2PC HWLO(0x024) /* 0x4000024 2 W BG2 Rotation/Scaling Parameter C (dy) */
+#define BG2PD HWHI(0x024) /* 0x4000026 2 W BG2 Rotation/Scaling Parameter D (dmy) */
+#define BG2X WORD(0x028) /* 0x4000028 4 W BG2 Reference Point X-Coordinate */
+#define BG2Y WORD(0x02C) /* 0x400002C 4 W BG2 Reference Point Y-Coordinate */
+#define BG3PA HWLO(0x030) /* 0x4000030 2 W BG3 Rotation/Scaling Parameter A (dx) */
+#define BG3PB HWHI(0x030) /* 0x4000032 2 W BG3 Rotation/Scaling Parameter B (dmx) */
+#define BG3PC HWLO(0x034) /* 0x4000034 2 W BG3 Rotation/Scaling Parameter C (dy) */
+#define BG3PD HWHI(0x034) /* 0x4000036 2 W BG3 Rotation/Scaling Parameter D (dmy) */
+#define BG3X WORD(0x038) /* 0x4000038 4 W BG3 Reference Point X-Coordinate */
+#define BG3Y WORD(0x03C) /* 0x400003C 4 W BG3 Reference Point Y-Coordinate */
+#define WIN0H HWLO(0x040) /* 0x4000040 2 W Window 0 Horizontal Dimensions */
+#define WIN1H HWHI(0x040) /* 0x4000042 2 W Window 1 Horizontal Dimensions */
+#define WIN0V HWLO(0x044) /* 0x4000044 2 W Window 0 Vertical Dimensions */
+#define WIN1V HWHI(0x044) /* 0x4000046 2 W Window 1 Vertical Dimensions */
+#define WININ HWLO(0x048) /* 0x4000048 2 R/W Inside of Window 0 and 1 */
+#define WINOUT HWHI(0x048) /* 0x400004A 2 R/W Inside of OBJ Window & Outside of Windows */
+#define MOSAIC HWLO(0x04C) /* 0x400004C 2 W Mosaic Size */
+ /* 0x400004E 2 - Unused */
+#define BLDCNT HWLO(0x050) /* 0x4000050 2 R/W Color Special Effects Selection */
+#define BLDALPHA HWHI(0x050) /* 0x4000052 2 W Alpha Blending Coefficients */
+#define BLDY HWLO(0x054) /* 0x4000054 2 W Brightness (Fade-In/Out) Coefficient */
+ /* 0x4000056 2 - Unused */
+
+#define DISPSTAT_SET(val) HWLO_SET(0x004, val)
+#define DISPSTAT_RESET(val) HWLO_RESET(0x004, val)
+
+#define DISPSTAT_VBL 0x0001
+#define DISPSTAT_HBL 0x0002
+#define DISPSTAT_VCNT 0x0004
+#define DISPSTAT_VBL_IRQ_EN 0x0008
+#define DISPSTAT_HBL_IRQ_EN 0x0010
+#define DISPSTAT_VCNT_IRQ_EN 0x0020
+#define DISPSTAT_VCNT_VALUE 0xff00
+
+#define DISPCNT_MODE 0x0007
+#define DISPCNT_FRAMESEL 0x0010
+#define DISPCNT_HBL_FREE 0x0020
+
+#define DISPCNT_VRAM_MAP 0x0040
+#define DISPCNT_VRAM_MAP_2D 0x0000
+#define DISPCNT_VRAM_MAP_1D 0x0040
+
+#define DISPCNT_BLANK 0x0080
+#define DISPCNT_BG0_EN 0x0100
+#define DISPCNT_BG1_EN 0x0200
+#define DISPCNT_BG2_EN 0x0400
+#define DISPCNT_BG3_EN 0x0800
+#define DISPCNT_OBJ_EN 0x1000
+#define DISPCNT_WIN0_EN 0x2000
+#define DISPCNT_WIN1_EN 0x4000
+#define DISPCNT_OBJWIN_EN 0x8000
+
+#define OBJ_Y_COORD 0x00ff
+#define OBJ_ROZMODE 0x0300
+#define OBJ_ROZMODE_NONE 0x0000
+#define OBJ_ROZMODE_ROZ 0x0100
+#define OBJ_ROZMODE_DISABLE 0x0200
+#define OBJ_ROZMODE_DBLROZ 0x0300
+
+#define OBJ_MODE 0x0c00
+#define OBJ_MODE_NORMAL 0x0000
+#define OBJ_MODE_ALPHA 0x0400
+#define OBJ_MODE_WINDOW 0x0800
+#define OBJ_MODE_UNDEFINED 0x0c00
+
+#define OBJ_MOSAIC 0x1000
+
+#define OBJ_PALMODE 0x2000
+#define OBJ_PALMODE_16 0x0000
+#define OBJ_PALMODE_256 0x2000
+
+#define OBJ_SHAPE 0xc000
+#define OBJ_SHAPE_SQR 0x0000
+#define OBJ_SHAPE_HORIZ 0x4000
+#define OBJ_SHAPE_VERT 0x8000
+
+#define OBJ_X_COORD 0x01ff
+#define OBJ_SCALE_PARAM 0x3e00
+#define OBJ_SCALE_PARAM_SHIFT 9
+#define OBJ_HFLIP 0x1000
+#define OBJ_VFLIP 0x2000
+#define OBJ_SIZE 0xc000
+#define OBJ_SIZE_8 0x0000
+#define OBJ_SIZE_16 0x4000
+#define OBJ_SIZE_32 0x8000
+#define OBJ_SIZE_64 0xc000
+
+#define OBJ_TILENUM 0x03ff
+#define OBJ_PRIORITY 0x0c00
+#define OBJ_PRIORITY_SHIFT 10
+#define OBJ_PALNUM 0xf000
+#define OBJ_PALNUM_SHIFT 12
+
+#define BGCNT_SCREENSIZE 0xc000
+#define BGCNT_SCREENSIZE_SHIFT 14
+#define BGCNT_PALETTESET_WRAP 0x2000
+#define BGCNT_SCREENBASE 0x1f00
+#define BGCNT_SCREENBASE_SHIFT 8
+#define BGCNT_PALETTE256 0x0080
+#define BGCNT_MOSAIC 0x0040
+#define BGCNT_CHARBASE 0x003c
+#define BGCNT_CHARBASE_SHIFT 2
+#define BGCNT_PRIORITY 0x0003
+
+#define BLDCNT_BG0TP1 0x0001
+#define BLDCNT_BG1TP1 0x0002
+#define BLDCNT_BG2TP1 0x0004
+#define BLDCNT_BG3TP1 0x0008
+#define BLDCNT_OBJTP1 0x0010
+#define BLDCNT_BDTP1 0x0020
+#define BLDCNT_SFX 0x00c0
+#define BLDCNT_SFX_NONE 0x0000
+#define BLDCNT_SFX_ALPHA 0x0040
+#define BLDCNT_SFX_LIGHTEN 0x0080
+#define BLDCNT_SFX_DARKEN 0x00c0
+#define BLDCNT_BG0TP2 0x0100
+#define BLDCNT_BG1TP2 0x0200
+#define BLDCNT_BG2TP2 0x0400
+#define BLDCNT_BG3TP2 0x0800
+#define BLDCNT_OBJTP2 0x1000
+#define BLDCNT_BDTP2 0x2000
+#define BLDCNT_TP2_SHIFT 8
+
+#define TILEOBJ_TILE 0x03ff
+#define TILEOBJ_HFLIP 0x0400
+#define TILEOBJ_VFLIP 0x0800
+#define TILEOBJ_PALETTE 0xf000
+
+#define GBA_MODE0 0
+#define GBA_MODE1 1
+#define GBA_MODE2 2
+#define GBA_MODE345 3
+
+#define GBA_SUBMODE0 0
+#define GBA_SUBMODE1 1
+#define GBA_SUBMODE2 2
#define VERBOSE_LEVEL (0)
@@ -24,7 +182,7 @@ static inline void ATTR_PRINTF(3,4) verboselog(device_t &device, int n_level, co
va_start( v, s_fmt );
vsprintf( buf, s_fmt, v );
va_end( v );
- device.logerror( "%08x: %s", device.machine().driver_data()->m_maincpu->pc(), buf );
+ device.logerror( "%08x: %s", device.machine().describe_context(), buf );
}
}
@@ -33,21 +191,77 @@ static const int coeff[32] = {
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
};
-/* Utility functions */
-static inline UINT32 alpha_blend_pixel(UINT32 color0, UINT32 color1, int ca, int cb);
-static inline UINT32 increase_brightness(UINT32 color, int coeff_);
-static inline UINT32 decrease_brightness(UINT32 color, int coeff_);
+static inline UINT32 alpha_blend_pixel(UINT32 color0, UINT32 color1, int ca, int cb)
+{
+ if(color0 < 0x80000000)
+ {
+ int r0 = (color0 >> 0) & 0x1f;
+ int g0 = (color0 >> 5) & 0x1f;
+ int b0 = (color0 >> 10) & 0x1f;
+ int r1 = (color1 >> 0) & 0x1f;
+ int g1 = (color1 >> 5) & 0x1f;
+ int b1 = (color1 >> 10) & 0x1f;
+ int r = ((r0 * ca) >> 4) + ((r1 * cb) >> 4);
+ int g = ((g0 * ca) >> 4) + ((g1 * cb) >> 4);
+ int b = ((b0 * ca) >> 4) + ((b1 * cb) >> 4);
-#define GBA_MODE0 0
-#define GBA_MODE1 1
-#define GBA_MODE2 2
-#define GBA_MODE345 3
+ if(r > 0x1f) r = 0x1f;
+ if(g > 0x1f) g = 0x1f;
+ if(b > 0x1f) b = 0x1f;
-#define GBA_SUBMODE0 0
-#define GBA_SUBMODE1 1
-#define GBA_SUBMODE2 2
+ return (color0 & 0xffff0000) | (b << 10) | (g << 5) | r;
+ }
+ return color0;
+}
-inline void gba_state::update_mask(UINT8* mask, int mode, int submode, UINT32* obj_win, UINT8 inwin0, UINT8 inwin1, UINT8 in0_mask, UINT8 in1_mask, UINT8 out_mask)
+static inline UINT32 increase_brightness(UINT32 color, int coeff_)
+{
+ int r = (color >> 0) & 0x1f;
+ int g = (color >> 5) & 0x1f;
+ int b = (color >> 10) & 0x1f;
+
+ r += ((0x1f - r) * coeff_) >> 4;
+ g += ((0x1f - g) * coeff_) >> 4;
+ b += ((0x1f - b) * coeff_) >> 4;
+
+ if(r > 0x1f) r = 0x1f;
+ if(g > 0x1f) g = 0x1f;
+ if(b > 0x1f) b = 0x1f;
+
+ return (color & 0xffff0000) | (b << 10) | (g << 5) | r;
+}
+
+static inline UINT32 decrease_brightness(UINT32 color, int coeff_)
+{
+ int r = (color >> 0) & 0x1f;
+ int g = (color >> 5) & 0x1f;
+ int b = (color >> 10) & 0x1f;
+
+ r -= (r * coeff_) >> 4;
+ g -= (g * coeff_) >> 4;
+ b -= (b * coeff_) >> 4;
+
+ if(r < 0) r = 0;
+ if(g < 0) g = 0;
+ if(b < 0) b = 0;
+
+ return (color & 0xffff0000) | (b << 10) | (g << 5) | r;
+}
+
+const device_type GBA_LCD = &device_creator;
+
+gba_lcd_device::gba_lcd_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, GBA_LCD, "GBA LCD", tag, owner, clock, "gba_lcd", __FILE__)
+ , device_video_interface(mconfig, *this)
+ , m_int_hblank_cb(*this)
+ , m_int_vblank_cb(*this)
+ , m_int_vcount_cb(*this)
+ , m_dma_hblank_cb(*this)
+ , m_dma_vblank_cb(*this)
+{
+}
+
+inline void gba_lcd_device::update_mask(UINT8* mask, int mode, int submode, UINT32* obj_win, UINT8 inwin0, UINT8 inwin1, UINT8 in0_mask, UINT8 in1_mask, UINT8 out_mask)
{
UINT8 mode_mask = 0;
if (submode == GBA_SUBMODE2)
@@ -57,7 +271,7 @@ inline void gba_state::update_mask(UINT8* mask, int mode, int submode, UINT32* o
mask[x] = out_mask;
if ((obj_win[x] & 0x80000000) == 0)
- mask[x] = m_WINOUT >> 8;
+ mask[x] = WINOUT >> 8;
if (inwin1)
{
@@ -97,22 +311,22 @@ inline void gba_state::update_mask(UINT8* mask, int mode, int submode, UINT32* o
}
}
-void gba_state::draw_modes(int mode, int submode, int y, UINT32* line0, UINT32* line1, UINT32* line2, UINT32* line3, UINT32* lineOBJ, UINT32* lineOBJWin, UINT32* lineMix, int bpp)
+void gba_lcd_device::draw_modes(int mode, int submode, int y, UINT32* line0, UINT32* line1, UINT32* line2, UINT32* line3, UINT32* lineOBJ, UINT32* lineOBJWin, UINT32* lineMix, int bpp)
{
- UINT32 backdrop = ((UINT16*)m_gba_pram.target())[0] | 0x30000000;
+ UINT32 backdrop = ((UINT16*)m_pram.get())[0] | 0x30000000;
int inWindow0 = 0;
int inWindow1 = 0;
- UINT8 inWin0Mask = m_WININ & 0x00ff;
- UINT8 inWin1Mask = m_WININ >> 8;
- UINT8 outMask = m_WINOUT & 0x00ff;
+ UINT8 inWin0Mask = WININ & 0x00ff;
+ UINT8 inWin1Mask = WININ >> 8;
+ UINT8 outMask = WINOUT & 0x00ff;
UINT8 masks[240]; // this puts together WinMasks with the fact that some modes/submodes skip specific layers!
if (submode == GBA_SUBMODE2)
{
- if (m_DISPCNT & DISPCNT_WIN0_EN)
+ if (DISPCNT & DISPCNT_WIN0_EN)
{
- UINT8 v0 = m_WIN0V >> 8;
- UINT8 v1 = m_WIN0V & 0x00ff;
+ UINT8 v0 = WIN0V >> 8;
+ UINT8 v1 = WIN0V & 0x00ff;
inWindow0 = ((v0 == v1) && (v0 >= 0xe8)) ? 1 : 0;
if (v1 >= v0)
inWindow0 |= (y >= v0 && y < v1) ? 1 : 0;
@@ -120,10 +334,10 @@ void gba_state::draw_modes(int mode, int submode, int y, UINT32* line0, UINT32*
inWindow0 |= (y >= v0 || y < v1) ? 1 : 0;
}
- if (m_DISPCNT & DISPCNT_WIN1_EN)
+ if (DISPCNT & DISPCNT_WIN1_EN)
{
- UINT8 v0 = m_WIN1V >> 8;
- UINT8 v1 = m_WIN1V & 0x00ff;
+ UINT8 v0 = WIN1V >> 8;
+ UINT8 v1 = WIN1V & 0x00ff;
inWindow1 = ((v0 == v1) && (v0 >= 0xe8)) ? 1 : 0;
if (v1 >= v0)
inWindow1 |= (y >= v0 && y < v1) ? 1 : 0;
@@ -136,24 +350,24 @@ void gba_state::draw_modes(int mode, int submode, int y, UINT32* line0, UINT32*
switch (mode)
{
case 0:
- draw_bg_scanline(line0, y, DISPCNT_BG0_EN, m_BG0CNT, m_BG0HOFS, m_BG0VOFS);
- draw_bg_scanline(line1, y, DISPCNT_BG1_EN, m_BG1CNT, m_BG1HOFS, m_BG1VOFS);
- draw_bg_scanline(line2, y, DISPCNT_BG2_EN, m_BG2CNT, m_BG2HOFS, m_BG2VOFS);
- draw_bg_scanline(line3, y, DISPCNT_BG3_EN, m_BG3CNT, m_BG3HOFS, m_BG3VOFS);
+ draw_bg_scanline(line0, y, DISPCNT_BG0_EN, BG0CNT, BG0HOFS, BG0VOFS);
+ draw_bg_scanline(line1, y, DISPCNT_BG1_EN, BG1CNT, BG1HOFS, BG1VOFS);
+ draw_bg_scanline(line2, y, DISPCNT_BG2_EN, BG2CNT, BG2HOFS, BG2VOFS);
+ draw_bg_scanline(line3, y, DISPCNT_BG3_EN, BG3CNT, BG3HOFS, BG3VOFS);
break;
case 1:
- draw_bg_scanline(line0, y, DISPCNT_BG0_EN, m_BG0CNT, m_BG0HOFS, m_BG0VOFS);
- draw_bg_scanline(line1, y, DISPCNT_BG1_EN, m_BG1CNT, m_BG1HOFS, m_BG1VOFS);
- draw_roz_scanline(line2, y, DISPCNT_BG2_EN, m_BG2CNT, m_BG2X, m_BG2Y, m_BG2PA, m_BG2PB, m_BG2PC, m_BG2PD, &m_gfxBG2X, &m_gfxBG2Y, m_gfxBG2Changed);
+ draw_bg_scanline(line0, y, DISPCNT_BG0_EN, BG0CNT, BG0HOFS, BG0VOFS);
+ draw_bg_scanline(line1, y, DISPCNT_BG1_EN, BG1CNT, BG1HOFS, BG1VOFS);
+ draw_roz_scanline(line2, y, DISPCNT_BG2_EN, BG2CNT, BG2X, BG2Y, BG2PA, BG2PB, BG2PC, BG2PD, &m_gfxBG2X, &m_gfxBG2Y, m_gfxBG2Changed);
break;
case 2:
- draw_roz_scanline(line2, y, DISPCNT_BG2_EN, m_BG2CNT, m_BG2X, m_BG2Y, m_BG2PA, m_BG2PB, m_BG2PC, m_BG2PD, &m_gfxBG2X, &m_gfxBG2Y, m_gfxBG2Changed);
- draw_roz_scanline(line3, y, DISPCNT_BG3_EN, m_BG3CNT, m_BG3X, m_BG3Y, m_BG3PA, m_BG3PB, m_BG3PC, m_BG3PD, &m_gfxBG3X, &m_gfxBG3Y, m_gfxBG3Changed);
+ draw_roz_scanline(line2, y, DISPCNT_BG2_EN, BG2CNT, BG2X, BG2Y, BG2PA, BG2PB, BG2PC, BG2PD, &m_gfxBG2X, &m_gfxBG2Y, m_gfxBG2Changed);
+ draw_roz_scanline(line3, y, DISPCNT_BG3_EN, BG3CNT, BG3X, BG3Y, BG3PA, BG3PB, BG3PC, BG3PD, &m_gfxBG3X, &m_gfxBG3Y, m_gfxBG3Changed);
break;
case 3:
case 4:
case 5:
- draw_roz_bitmap_scanline(line2, y, DISPCNT_BG2_EN, m_BG2CNT, m_BG2X, m_BG2Y, m_BG2PA, m_BG2PB, m_BG2PC, m_BG2PD, &m_gfxBG2X, &m_gfxBG2Y, m_gfxBG2Changed, bpp);
+ draw_roz_bitmap_scanline(line2, y, DISPCNT_BG2_EN, BG2CNT, BG2X, BG2Y, BG2PA, BG2PB, BG2PC, BG2PD, &m_gfxBG2X, &m_gfxBG2Y, m_gfxBG2Changed, bpp);
break;
}
@@ -231,19 +445,19 @@ void gba_state::draw_modes(int mode, int submode, int y, UINT32* line0, UINT32*
top2 = 0x08;
}
- if (top2 & (m_BLDCNT >> BLDCNT_TP2_SHIFT))
- color = alpha_blend_pixel(color, back, coeff[m_BLDALPHA & 0x1f], coeff[(m_BLDALPHA >> 8) & 0x1f]);
+ if (top2 & (BLDCNT >> BLDCNT_TP2_SHIFT))
+ color = alpha_blend_pixel(color, back, coeff[BLDALPHA & 0x1f], coeff[(BLDALPHA >> 8) & 0x1f]);
else
{
- if (top & m_BLDCNT)
+ if (top & BLDCNT)
{
- switch(m_BLDCNT & BLDCNT_SFX)
+ switch(BLDCNT & BLDCNT_SFX)
{
case BLDCNT_SFX_LIGHTEN:
- color = increase_brightness(color, coeff[m_BLDY & 0x1f]);
+ color = increase_brightness(color, coeff[BLDY & 0x1f]);
break;
case BLDCNT_SFX_DARKEN:
- color = decrease_brightness(color, coeff[m_BLDY & 0x1f]);
+ color = decrease_brightness(color, coeff[BLDY & 0x1f]);
break;
}
}
@@ -252,9 +466,9 @@ void gba_state::draw_modes(int mode, int submode, int y, UINT32* line0, UINT32*
}
else if (submode == GBA_SUBMODE1 || (submode == GBA_SUBMODE2 && masks[x] & 0x20))
{
- if (top & m_BLDCNT)
+ if (top & BLDCNT)
{
- switch(m_BLDCNT & BLDCNT_SFX)
+ switch(BLDCNT & BLDCNT_SFX)
{
case BLDCNT_SFX_NONE:
break;
@@ -308,15 +522,15 @@ void gba_state::draw_modes(int mode, int submode, int y, UINT32* line0, UINT32*
}
}
- if (top2 & (m_BLDCNT >> BLDCNT_TP2_SHIFT))
- color = alpha_blend_pixel(color, back, coeff[m_BLDALPHA & 0x1f], coeff[(m_BLDALPHA >> 8) & 0x1f]);
+ if (top2 & (BLDCNT >> BLDCNT_TP2_SHIFT))
+ color = alpha_blend_pixel(color, back, coeff[BLDALPHA & 0x1f], coeff[(BLDALPHA >> 8) & 0x1f]);
}
break;
case BLDCNT_SFX_LIGHTEN:
- color = increase_brightness(color, coeff[m_BLDY & 0x1f]);
+ color = increase_brightness(color, coeff[BLDY & 0x1f]);
break;
case BLDCNT_SFX_DARKEN:
- color = decrease_brightness(color, coeff[m_BLDY & 0x1f]);
+ color = decrease_brightness(color, coeff[BLDY & 0x1f]);
break;
}
}
@@ -329,20 +543,20 @@ void gba_state::draw_modes(int mode, int submode, int y, UINT32* line0, UINT32*
m_gfxBG3Changed = 0;
}
-void gba_state::draw_roz_bitmap_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, INT32 *currentx, INT32 *currenty, int changed, int depth)
+void gba_lcd_device::draw_roz_bitmap_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, INT32 *currentx, INT32 *currenty, int changed, int depth)
{
- UINT8 *src8 = (UINT8 *)m_gba_vram.target();
- UINT16 *src16 = (UINT16 *)m_gba_vram.target();
- UINT16 *palette = (UINT16 *)m_gba_pram.target();
+ UINT8 *src8 = (UINT8 *)m_vram.get();
+ UINT16 *src16 = (UINT16 *)m_vram.get();
+ UINT16 *palette = (UINT16 *)m_pram.get();
INT32 sx = (depth == 4) ? 160 : 240;
INT32 sy = (depth == 4) ? 128 : 160;
UINT32 prio = ((ctrl & BGCNT_PRIORITY) << 25) + 0x1000000;
INT32 cx, cy, pixx, pixy, x;
- if ((depth == 8) && (m_DISPCNT & DISPCNT_FRAMESEL))
+ if ((depth == 8) && (DISPCNT & DISPCNT_FRAMESEL))
src8 += 0xa000;
- if ((depth == 4) && (m_DISPCNT & DISPCNT_FRAMESEL))
+ if ((depth == 4) && (DISPCNT & DISPCNT_FRAMESEL))
src16 += 0xa000/2;
// sign extend roz parameters
@@ -371,7 +585,7 @@ void gba_state::draw_roz_bitmap_scanline(UINT32 *scanline, int ypos, UINT32 enab
if(ctrl & BGCNT_MOSAIC)
{
- INT32 mosaic_line = ((m_MOSAIC & 0xf0) >> 4) + 1;
+ INT32 mosaic_line = ((MOSAIC & 0xf0) >> 4) + 1;
INT32 tempy = (ypos / mosaic_line) * mosaic_line;
cx = X + tempy*PB;
cy = Y + tempy*PD;
@@ -408,7 +622,7 @@ void gba_state::draw_roz_bitmap_scanline(UINT32 *scanline, int ypos, UINT32 enab
if(ctrl & BGCNT_MOSAIC)
{
- INT32 mosaicx = (m_MOSAIC & 0x0f) + 1;
+ INT32 mosaicx = (MOSAIC & 0x0f) + 1;
if(mosaicx > 1)
{
INT32 m = 1;
@@ -426,14 +640,14 @@ void gba_state::draw_roz_bitmap_scanline(UINT32 *scanline, int ypos, UINT32 enab
}
}
-void gba_state::draw_roz_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, INT32 *currentx, INT32 *currenty, int changed)
+void gba_lcd_device::draw_roz_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, INT32 *currentx, INT32 *currenty, int changed)
{
UINT32 base, mapbase, size;
static const INT32 sizes[4] = { 128, 256, 512, 1024 };
INT32 cx, cy, pixx, pixy;
- UINT8 *mgba_vram = (UINT8 *)m_gba_vram.target();
+ UINT8 *mgba_vram = (UINT8 *)m_vram.get();
UINT32 tile;
- UINT16 *pgba_pram = (UINT16 *)m_gba_pram.target();
+ UINT16 *pgba_pram = (UINT16 *)m_pram.get();
UINT16 pixel;
UINT32 prio = ((ctrl & BGCNT_PRIORITY) << 25) + 0x1000000;
int x = 0;
@@ -441,7 +655,7 @@ void gba_state::draw_roz_scanline(UINT32 *scanline, int ypos, UINT32 enablemask,
for (x = 0; x < 240; x++)
scanline[x] = 0x80000000;
- if (m_DISPCNT & enablemask)
+ if (DISPCNT & enablemask)
{
base = ((ctrl & BGCNT_CHARBASE) >> BGCNT_CHARBASE_SHIFT) * 0x4000; // VRAM base of tiles
mapbase = ((ctrl & BGCNT_SCREENBASE) >> BGCNT_SCREENBASE_SHIFT) * 0x800; // VRAM base of map
@@ -473,7 +687,7 @@ void gba_state::draw_roz_scanline(UINT32 *scanline, int ypos, UINT32 enablemask,
if(ctrl & BGCNT_MOSAIC)
{
- int mosaic_line = ((m_MOSAIC & 0xf0) >> 4) + 1;
+ int mosaic_line = ((MOSAIC & 0xf0) >> 4) + 1;
int y = ypos % mosaic_line;
cx -= y*PB;
cy -= y*PD;
@@ -538,7 +752,7 @@ void gba_state::draw_roz_scanline(UINT32 *scanline, int ypos, UINT32 enablemask,
if(ctrl & BGCNT_MOSAIC)
{
- int mosaicx = (m_MOSAIC & 0x0f) + 1;
+ int mosaicx = (MOSAIC & 0x0f) + 1;
if(mosaicx > 1)
{
int m = 1;
@@ -557,10 +771,10 @@ void gba_state::draw_roz_scanline(UINT32 *scanline, int ypos, UINT32 enablemask,
}
}
-void gba_state::draw_bg_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, UINT32 hofs, UINT32 vofs)
+void gba_lcd_device::draw_bg_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, UINT32 hofs, UINT32 vofs)
{
- UINT8 *vram = (UINT8*)m_gba_vram.target();
- UINT16 *palette = (UINT16*)m_gba_pram.target();
+ UINT8 *vram = (UINT8*)m_vram.get();
+ UINT16 *palette = (UINT16*)m_pram.get();
UINT8 *chardata = &vram[((ctrl & BGCNT_CHARBASE) >> BGCNT_CHARBASE_SHIFT) * 0x4000];
UINT16 *screendata = (UINT16*)&vram[((ctrl & BGCNT_SCREENBASE) >> BGCNT_SCREENBASE_SHIFT) * 0x800];
UINT32 priority = ((ctrl & BGCNT_PRIORITY) << 25) + 0x1000000;
@@ -568,15 +782,15 @@ void gba_state::draw_bg_scanline(UINT32 *scanline, int ypos, UINT32 enablemask,
INT32 height = 256;
INT32 maskx, masky, pixx, pixy;
UINT8 use_mosaic = (ctrl & BGCNT_MOSAIC) ? 1 : 0;
- INT32 mosaicx = (m_MOSAIC & 0x000f) + 1;
- INT32 mosaicy = ((m_MOSAIC & 0x00f0) >> 4) + 1;
+ INT32 mosaicx = (MOSAIC & 0x000f) + 1;
+ INT32 mosaicy = ((MOSAIC & 0x00f0) >> 4) + 1;
INT32 stride;
int x = 0;
for (x = 0; x < 240; x++)
scanline[x] = 0x80000000;
- if(m_DISPCNT & enablemask)
+ if(DISPCNT & enablemask)
{
switch((ctrl & BGCNT_SCREENSIZE) >> BGCNT_SCREENSIZE_SHIFT)
{
@@ -712,19 +926,19 @@ void gba_state::draw_bg_scanline(UINT32 *scanline, int ypos, UINT32 enablemask,
}
}
-void gba_state::draw_gba_oam_window(UINT32 *scanline, int y)
+void gba_lcd_device::draw_gba_oam_window(UINT32 *scanline, int y)
{
INT16 gba_oamindex;
UINT32 tilebytebase, tileindex, tiledrawindex;
UINT32 width, height;
- UINT16 *pgba_oam = (UINT16 *)m_gba_oam.target();
- UINT8 *src = (UINT8*)m_gba_vram.target();
+ UINT16 *pgba_oam = (UINT16 *)m_oam.get();
+ UINT8 *src = (UINT8*)m_vram.get();
int x = 0;
for (x = 0; x < 240; x++)
scanline[x] = 0x80000000;
- if (m_DISPCNT & DISPCNT_OBJWIN_EN)
+ if (DISPCNT & DISPCNT_OBJWIN_EN)
{
for( gba_oamindex = 127; gba_oamindex >= 0; gba_oamindex-- )
{
@@ -868,11 +1082,11 @@ void gba_state::draw_gba_oam_window(UINT32 *scanline, int y)
if((attr0 & OBJ_PALMODE) == OBJ_PALMODE_256)
{
int inc = 32;
- if((m_DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200)
+ if((DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200)
{
continue;
}
- if((m_DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D)
+ if((DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D)
{
inc = sx >> 2;
}
@@ -907,11 +1121,11 @@ void gba_state::draw_gba_oam_window(UINT32 *scanline, int y)
else
{
int inc = 32;
- if((m_DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200)
+ if((DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200)
{
continue;
}
- if((m_DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D)
+ if((DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D)
{
inc = sx >> 3;
}
@@ -971,12 +1185,12 @@ void gba_state::draw_gba_oam_window(UINT32 *scanline, int y)
{
cury_ = height - cury_ - 1;
}
- if((m_DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200)
+ if((DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200)
{
continue;
}
- if((m_DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D)
+ if((DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D)
{
inc = width >> 2;
}
@@ -1050,12 +1264,12 @@ void gba_state::draw_gba_oam_window(UINT32 *scanline, int y)
{
cury_ = height - cury_ - 1;
}
- if((m_DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200)
+ if((DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200)
{
continue;
}
- if((m_DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D)
+ if((DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D)
{
inc = width >> 3;
}
@@ -1156,23 +1370,23 @@ void gba_state::draw_gba_oam_window(UINT32 *scanline, int y)
}
}
-void gba_state::draw_gba_oam(UINT32 *scanline, int y)
+void gba_lcd_device::draw_gba_oam(UINT32 *scanline, int y)
{
INT16 gba_oamindex;
INT32 mosaiccnt = 0;
- INT32 mosaicy = ((m_MOSAIC & 0xf000) >> 12) + 1;
- INT32 mosaicx = ((m_MOSAIC & 0x0f00) >> 8) + 1;
+ INT32 mosaicy = ((MOSAIC & 0xf000) >> 12) + 1;
+ INT32 mosaicx = ((MOSAIC & 0x0f00) >> 8) + 1;
UINT32 tileindex, tiledrawindex; //, tilebytebase
UINT8 width, height;
- UINT16 *pgba_oam = (UINT16 *)m_gba_oam.target();
- UINT8 *src = (UINT8 *)m_gba_vram.target();
- UINT16 *palette = (UINT16*)m_gba_pram.target();
+ UINT16 *pgba_oam = (UINT16 *)m_oam.get();
+ UINT8 *src = (UINT8 *)m_vram.get();
+ UINT16 *palette = (UINT16*)m_pram.get();
int x = 0;
for (x = 0; x < 240; x++)
scanline[x] = 0x80000000;
- if( m_DISPCNT & DISPCNT_OBJ_EN )
+ if( DISPCNT & DISPCNT_OBJ_EN )
{
for( gba_oamindex = 0; gba_oamindex < 128; gba_oamindex++ )
{
@@ -1322,12 +1536,12 @@ void gba_state::draw_gba_oam(UINT32 *scanline, int y)
{
INT32 inc = 32;
- if((m_DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200)
+ if((DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200)
{
continue;
}
- if((m_DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D)
+ if((DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D)
{
inc = width >> 2;
}
@@ -1383,12 +1597,12 @@ void gba_state::draw_gba_oam(UINT32 *scanline, int y)
INT32 inc = 32;
INT32 palentry = (attr2 >> 8) & 0xf0;
- if((m_DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200)
+ if((DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200)
{
continue;
}
- if((m_DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D)
+ if((DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D)
{
inc = width >> 3;
}
@@ -1487,12 +1701,12 @@ void gba_state::draw_gba_oam(UINT32 *scanline, int y)
cury = height - cury - 1;
}
- if((m_DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200)
+ if((DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200)
{
continue;
}
- if((m_DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D)
+ if((DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D)
{
inc = width >> 2;
}
@@ -1595,12 +1809,12 @@ void gba_state::draw_gba_oam(UINT32 *scanline, int y)
cury = height - cury - 1;
}
- if((m_DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200)
+ if((DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200)
{
continue;
}
- if((m_DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D)
+ if((DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D)
{
inc = width >> 3;
}
@@ -1747,15 +1961,15 @@ void gba_state::draw_gba_oam(UINT32 *scanline, int y)
}
}
-inline int gba_state::is_in_window(int x, int window)
+inline int gba_lcd_device::is_in_window(int x, int window)
{
- int x0 = m_WIN0H >> 8;
- int x1 = m_WIN0H & 0x00ff;
+ int x0 = WIN0H >> 8;
+ int x1 = WIN0H & 0x00ff;
if(window == 1)
{
- x0 = m_WIN1H >> 8;
- x1 = m_WIN1H & 0x00ff;
+ x0 = WIN1H >> 8;
+ x1 = WIN1H & 0x00ff;
}
if(x0 <= x1)
@@ -1776,64 +1990,7 @@ inline int gba_state::is_in_window(int x, int window)
return 0;
}
-static inline UINT32 alpha_blend_pixel(UINT32 color0, UINT32 color1, int ca, int cb)
-{
- if(color0 < 0x80000000)
- {
- int r0 = (color0 >> 0) & 0x1f;
- int g0 = (color0 >> 5) & 0x1f;
- int b0 = (color0 >> 10) & 0x1f;
- int r1 = (color1 >> 0) & 0x1f;
- int g1 = (color1 >> 5) & 0x1f;
- int b1 = (color1 >> 10) & 0x1f;
- int r = ((r0 * ca) >> 4) + ((r1 * cb) >> 4);
- int g = ((g0 * ca) >> 4) + ((g1 * cb) >> 4);
- int b = ((b0 * ca) >> 4) + ((b1 * cb) >> 4);
-
- if(r > 0x1f) r = 0x1f;
- if(g > 0x1f) g = 0x1f;
- if(b > 0x1f) b = 0x1f;
-
- return (color0 & 0xffff0000) | (b << 10) | (g << 5) | r;
- }
- return color0;
-}
-
-static inline UINT32 increase_brightness(UINT32 color, int coeff_)
-{
- int r = (color >> 0) & 0x1f;
- int g = (color >> 5) & 0x1f;
- int b = (color >> 10) & 0x1f;
-
- r += ((0x1f - r) * coeff_) >> 4;
- g += ((0x1f - g) * coeff_) >> 4;
- b += ((0x1f - b) * coeff_) >> 4;
-
- if(r > 0x1f) r = 0x1f;
- if(g > 0x1f) g = 0x1f;
- if(b > 0x1f) b = 0x1f;
-
- return (color & 0xffff0000) | (b << 10) | (g << 5) | r;
-}
-
-static inline UINT32 decrease_brightness(UINT32 color, int coeff_)
-{
- int r = (color >> 0) & 0x1f;
- int g = (color >> 5) & 0x1f;
- int b = (color >> 10) & 0x1f;
-
- r -= (r * coeff_) >> 4;
- g -= (g * coeff_) >> 4;
- b -= (b * coeff_) >> 4;
-
- if(r < 0) r = 0;
- if(g < 0) g = 0;
- if(b < 0) b = 0;
-
- return (color & 0xffff0000) | (b << 10) | (g << 5) | r;
-}
-
-void gba_state::draw_scanline(int y)
+void gba_lcd_device::draw_scanline(int y)
{
bitmap_ind16 &bitmap = m_bitmap;
UINT16 *scanline = &bitmap.pix16(y);
@@ -1841,7 +1998,7 @@ void gba_state::draw_scanline(int y)
int depth = 0;
// forced blank
- if (m_DISPCNT & DISPCNT_BLANK)
+ if (DISPCNT & DISPCNT_BLANK)
{
// forced blank is white
for (int x = 0; x < 240; x++)
@@ -1849,28 +2006,28 @@ void gba_state::draw_scanline(int y)
return;
}
- if(!m_fxOn && !m_windowOn && !(m_DISPCNT & DISPCNT_OBJWIN_EN))
+ if(!m_fxOn && !m_windowOn && !(DISPCNT & DISPCNT_OBJWIN_EN))
submode = GBA_SUBMODE0;
- else if(m_fxOn && !m_windowOn && !(m_DISPCNT & DISPCNT_OBJWIN_EN))
+ else if(m_fxOn && !m_windowOn && !(DISPCNT & DISPCNT_OBJWIN_EN))
submode = GBA_SUBMODE1;
else
submode = GBA_SUBMODE2;
- if ((m_DISPCNT & 7) == 3)
+ if ((DISPCNT & 7) == 3)
depth = 16;
- else if ((m_DISPCNT & 7) == 4)
+ else if ((DISPCNT & 7) == 4)
depth = 8;
- else if ((m_DISPCNT & 7) == 5)
+ else if ((DISPCNT & 7) == 5)
depth = 4;
- //printf("mode = %d, %d\n", m_DISPCNT & 7, submode);
+ //printf("mode = %d, %d\n", DISPCNT & 7, submode);
- switch(m_DISPCNT & 7)
+ switch(DISPCNT & 7)
{
case 0:
case 1:
case 2:
- draw_modes(m_DISPCNT & 7, submode, y, &m_xferscan[0][1024], &m_xferscan[1][1024], &m_xferscan[2][1024], &m_xferscan[3][1024], &m_xferscan[4][1024], &m_xferscan[5][1024], &m_xferscan[6][1024], depth);
+ draw_modes(DISPCNT & 7, submode, y, &m_xferscan[0][1024], &m_xferscan[1][1024], &m_xferscan[2][1024], &m_xferscan[3][1024], &m_xferscan[4][1024], &m_xferscan[5][1024], &m_xferscan[6][1024], depth);
break;
case 3:
case 4:
@@ -1885,17 +2042,328 @@ void gba_state::draw_scanline(int y)
{
scanline[x] = m_xferscan[6][1024 + x] & 0x7fff;
}
-
- return;
}
-void gba_state::video_start()
+static const char *reg_names[] = {
+ /* LCD I/O Registers */
+ "DISPCNT", "GRNSWAP", "DISPSTAT", "VCOUNT",
+ "BG0CNT", "BG1CNT", "BG2CNT", "BG3CNT",
+ "BG0HOFS", "BG0VOFS", "BG1HOFS", "BG1VOFS",
+ "BG2HOFS", "BG2VOFS", "BG3HOFS", "BG3VOFS",
+ "BG2PA", "BG2PB", "BG2PC", "BG2PD",
+ "BG2X_L", "BG2X_H", "BG2Y_L", "BG2Y_H",
+ "BG3PA", "BG3PB", "BG3PC", "BG3PD",
+ "BG3X_L", "BG3X_H", "BG3Y_L", "BG3Y_H",
+ "WIN0H", "WIN1H", "WIN0V", "WIN1V",
+ "WININ", "WINOUT", "MOSAIC", "Unused",
+ "BLDCNT", "BLDALPHA", "BLDY", "Unused",
+ "Unused", "Unused", "Unused", "Unused",
+};
+
+READ32_MEMBER(gba_lcd_device::video_r)
{
- machine().first_screen()->register_screen_bitmap(m_bitmap);
+ UINT32 retval = 0;
+
+ switch( offset )
+ {
+ case 0x0004/4:
+ retval = (DISPSTAT & 0xffff) | (machine().first_screen()->vpos()<<16);
+ break;
+ default:
+ if( ACCESSING_BITS_0_15 )
+ {
+ retval |= m_regs[offset] & 0x0000ffff;
+ }
+ if( ACCESSING_BITS_16_31 )
+ {
+ retval |= m_regs[offset] & 0xffff0000;
+ }
+ break;
+ }
+
+ assert_always(offset < ARRAY_LENGTH(reg_names) / 2, "Not enough register names in gba_lcd_device");
+
+ if (ACCESSING_BITS_0_15)
+ {
+ verboselog(*this, 2, "GBA I/O Read: %s = %04x\n", reg_names[offset * 2], retval & 0x0000ffff);
+ }
+ if (ACCESSING_BITS_16_31)
+ {
+ verboselog(*this, 2, "GBA I/O Read: %s = %04x\n", reg_names[offset * 2 + 1], (retval & 0xffff0000) >> 16);
+ }
+
+ return retval;
}
-UINT32 gba_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+WRITE32_MEMBER(gba_lcd_device::video_w)
+{
+ COMBINE_DATA(&m_regs[offset]);
+
+ assert_always(offset < ARRAY_LENGTH(reg_names) / 2, "Not enough register names in gba_lcd_device");
+
+ if (ACCESSING_BITS_0_15)
+ {
+ verboselog(*this, 2, "GBA I/O Write: %s = %04x\n", reg_names[offset * 2], data & 0x0000ffff);
+ }
+ if (ACCESSING_BITS_16_31)
+ {
+ verboselog(*this, 2, "GBA I/O Write: %s = %04x\n", reg_names[offset * 2 + 1], (data & 0xffff0000) >> 16);
+ }
+
+ switch( offset )
+ {
+ case 0x0000/4:
+ if( ACCESSING_BITS_0_15 )
+ {
+ if(DISPCNT & (DISPCNT_WIN0_EN | DISPCNT_WIN1_EN))
+ {
+ m_windowOn = 1;
+ }
+ else
+ {
+ m_windowOn = 0;
+ }
+ }
+ break;
+ case 0x0028/4:
+ m_gfxBG2Changed |= 1;
+ break;
+ case 0x002c/4:
+ m_gfxBG2Changed |= 2;
+ break;
+ case 0x0038/4:
+ m_gfxBG3Changed |= 1;
+ break;
+ case 0x003c/4:
+ m_gfxBG3Changed |= 2;
+ break;
+ case 0x0050/4:
+ if( ACCESSING_BITS_0_15 )
+ {
+ if(BLDCNT & BLDCNT_SFX)
+ {
+ m_fxOn = 1;
+ }
+ else
+ {
+ m_fxOn = 0;
+ }
+ }
+ break;
+ }
+}
+
+static inline UINT32 combine_data_32_16(UINT32 prev, UINT32 data, UINT32 mem_mask)
+{
+ COMBINE_DATA(&prev);
+ switch(mem_mask)
+ {
+ case 0x000000ff:
+ prev &= 0xffff00ff;
+ prev |= data << 8;
+ break;
+ case 0x0000ff00:
+ prev &= 0xffffff00;
+ prev |= data >> 8;
+ break;
+ case 0x00ff0000:
+ prev &= 0x00ffffff;
+ prev |= data << 8;
+ break;
+ case 0xff000000:
+ prev &= 0xff00ffff;
+ prev |= data >> 8;
+ break;
+ default:
+ break;
+ }
+ return prev;
+}
+
+READ32_MEMBER(gba_lcd_device::gba_pram_r)
+{
+ return m_pram[offset];
+}
+
+WRITE32_MEMBER(gba_lcd_device::gba_pram_w)
+{
+ m_pram[offset] = combine_data_32_16(m_pram[offset], data, mem_mask);
+}
+
+READ32_MEMBER(gba_lcd_device::gba_vram_r)
+{
+ return m_vram[offset];
+}
+
+WRITE32_MEMBER(gba_lcd_device::gba_vram_w)
+{
+ m_vram[offset] = combine_data_32_16(m_vram[offset], data, mem_mask);
+}
+
+READ32_MEMBER(gba_lcd_device::gba_oam_r)
+{
+ return m_oam[offset];
+}
+
+WRITE32_MEMBER(gba_lcd_device::gba_oam_w)
+{
+ m_oam[offset] = combine_data_32_16(m_oam[offset], data, mem_mask);
+}
+
+TIMER_CALLBACK_MEMBER(gba_lcd_device::perform_hbl)
+{
+ int scanline = machine().first_screen()->vpos();
+
+ // draw only visible scanlines
+ if (scanline < 160)
+ {
+ draw_scanline(scanline);
+
+ if (!m_dma_hblank_cb.isnull())
+ m_dma_hblank_cb(ASSERT_LINE);
+ }
+
+ if ((DISPSTAT & DISPSTAT_HBL_IRQ_EN ) != 0)
+ {
+ if (!m_int_hblank_cb.isnull())
+ m_int_hblank_cb(ASSERT_LINE);
+ }
+
+ DISPSTAT_SET(DISPSTAT_HBL);
+
+ m_hbl_timer->adjust(attotime::never);
+}
+
+TIMER_CALLBACK_MEMBER(gba_lcd_device::perform_scan)
+{
+ // clear hblank and raster IRQ flags
+ DISPSTAT_RESET(DISPSTAT_HBL|DISPSTAT_VCNT);
+
+ int scanline = machine().first_screen()->vpos();
+
+ // VBL is set for scanlines 160 through 226 (but not 227, which is the last line)
+ if (scanline >= 160 && scanline < 227)
+ {
+ DISPSTAT_SET(DISPSTAT_VBL);
+
+ // VBL IRQ and DMA on line 160
+ if (scanline == 160)
+ {
+ if (DISPSTAT & DISPSTAT_VBL_IRQ_EN)
+ {
+ if (!m_int_vblank_cb.isnull())
+ m_int_vblank_cb(ASSERT_LINE);
+ }
+
+ if (!m_dma_vblank_cb.isnull())
+ m_dma_vblank_cb(ASSERT_LINE);
+ }
+ }
+ else
+ {
+ DISPSTAT_RESET(DISPSTAT_VBL);
+ }
+
+ // handle VCNT match interrupt/flag
+ if (scanline == ((DISPSTAT >> 8) & 0xff))
+ {
+ DISPSTAT_SET(DISPSTAT_VCNT);
+
+ if (DISPSTAT & DISPSTAT_VCNT_IRQ_EN)
+ {
+ if (!m_int_vcount_cb.isnull())
+ m_int_vcount_cb(ASSERT_LINE);
+ }
+ }
+
+ m_hbl_timer->adjust(machine().first_screen()->time_until_pos(scanline, 240));
+ m_scan_timer->adjust(machine().first_screen()->time_until_pos(( scanline + 1 ) % 228, 0));
+}
+
+PALETTE_INIT_MEMBER(gba_lcd_device, gba)
+{
+ for( UINT8 b = 0; b < 32; b++ )
+ {
+ for( UINT8 g = 0; g < 32; g++ )
+ {
+ for( UINT8 r = 0; r < 32; r++ )
+ {
+ palette.set_pen_color( ( b << 10 ) | ( g << 5 ) | r, pal5bit(r), pal5bit(g), pal5bit(b) );
+ }
+ }
+ }
+}
+
+UINT32 gba_lcd_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
copybitmap(bitmap, m_bitmap, 0, 0, 0, 0, cliprect);
return 0;
}
+
+void gba_lcd_device::device_start()
+{
+ /* resolve callbacks */
+ m_int_hblank_cb.resolve();
+ m_int_vblank_cb.resolve();
+ m_int_vcount_cb.resolve();
+ m_dma_hblank_cb.resolve();
+ m_dma_vblank_cb.resolve();
+
+ m_pram = make_unique_clear(0x400 / 4);
+ m_vram = make_unique_clear(0x18000 / 4);
+ m_oam = make_unique_clear(0x400 / 4);
+
+ save_pointer(NAME(m_pram.get()), 0x400 / 4);
+ save_pointer(NAME(m_vram.get()), 0x18000 / 4);
+ save_pointer(NAME(m_oam.get()), 0x400 / 4);
+
+ m_screen->register_screen_bitmap(m_bitmap);
+
+ /* create a timer to fire scanline functions */
+ m_scan_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_lcd_device::perform_scan),this));
+ m_hbl_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_lcd_device::perform_hbl),this));
+ m_scan_timer->adjust(machine().first_screen()->time_until_pos(0, 0));
+
+ save_item(NAME(m_windowOn));
+ save_item(NAME(m_fxOn));
+ save_item(NAME(m_gfxBG2Changed));
+ save_item(NAME(m_gfxBG3Changed));
+ save_item(NAME(m_gfxBG2X));
+ save_item(NAME(m_gfxBG2Y));
+ save_item(NAME(m_gfxBG3X));
+ save_item(NAME(m_gfxBG3Y));
+ save_item(NAME(m_xferscan));
+}
+
+void gba_lcd_device::device_reset()
+{
+ memset(m_regs, 0, sizeof(m_regs));
+
+ m_gfxBG2Changed = 0;
+ m_gfxBG3Changed = 0;
+ m_gfxBG2X = 0;
+ m_gfxBG2Y = 0;
+ m_gfxBG3X = 0;
+ m_gfxBG3Y = 0;
+ m_windowOn = 0;
+ m_fxOn = 0;
+
+ m_scan_timer->adjust(machine().first_screen()->time_until_pos(0, 0));
+ m_hbl_timer->adjust(attotime::never);
+}
+
+static MACHINE_CONFIG_FRAGMENT( gba_lcd )
+ MCFG_SCREEN_ADD("screen", LCD)
+ MCFG_SCREEN_RAW_PARAMS(XTAL_16_777216MHz/4, 308, 0, 240, 228, 0, 160)
+ MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, gba_lcd_device, screen_update)
+ MCFG_SCREEN_PALETTE("palette")
+
+ MCFG_DEFAULT_LAYOUT(layout_lcd)
+ MCFG_PALETTE_ADD("palette", 32768)
+ MCFG_PALETTE_INIT_OWNER(gba_lcd_device, gba)
+MACHINE_CONFIG_END
+
+machine_config_constructor gba_lcd_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( gba_lcd );
+}
diff --git a/src/devices/video/gba_lcd.h b/src/devices/video/gba_lcd.h
new file mode 100644
index 00000000000..6ca7405f7cb
--- /dev/null
+++ b/src/devices/video/gba_lcd.h
@@ -0,0 +1,170 @@
+// license:BSD-3-Clause
+// copyright-holders:R. Belmont,Ryan Holtz
+/***************************************************************************
+
+ gba_lcd.h
+
+ File to handle emulation of the video hardware of the Game Boy Advance
+
+ By R. Belmont, Ryan Holtz
+
+***************************************************************************/
+
+#pragma once
+
+#ifndef __GBA_LCD_H__
+#define __GBA_LCD_H__
+
+#include "emu.h"
+
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+// device type definition
+extern const device_type GBA_LCD;
+
+
+//**************************************************************************
+// DEVICE CONFIGURATION MACROS
+//**************************************************************************
+
+#define MCFG_GBA_LCD_ADD(_tag) \
+ MCFG_DEVICE_ADD(_tag, GBA_LCD, 0)
+
+#define MCFG_GBA_LCD_INT_HBLANK(_devcb) \
+ devcb = &gba_lcd_device::set_int_hblank_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_GBA_LCD_INT_VBLANK(_devcb) \
+ devcb = &gba_lcd_device::set_int_vblank_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_GBA_LCD_INT_VCOUNT(_devcb) \
+ devcb = &gba_lcd_device::set_int_vcount_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_GBA_LCD_DMA_HBLANK(_devcb) \
+ devcb = &gba_lcd_device::set_dma_hblank_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_GBA_LCD_DMA_VBLANK(_devcb) \
+ devcb = &gba_lcd_device::set_dma_vblank_callback(*device, DEVCB_##_devcb);
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+template
+class gba_registers
+{
+protected:
+ static constexpr unsigned REG_BASE = BASE;
+
+ UINT32 &WORD(unsigned x) { return m_regs[(x - REG_BASE) / 4]; } // 32-bit Register
+ const UINT32 &WORD(unsigned x) const { return m_regs[(x - REG_BASE) / 4]; } // 32-bit Register
+ UINT16 HWHI(unsigned x) const { return UINT16(WORD(x) >> 16); } // 16-bit Register, Upper Half-Word
+ UINT16 HWLO(unsigned x) const { return UINT16(WORD(x)); } // 16-bit Register, Lower Half-Word
+
+ UINT32 &WORD_SET(unsigned x, UINT32 y) { return WORD(x) |= y; }
+ UINT32 &HWHI_SET(unsigned x, UINT16 y) { return WORD(x) |= UINT32(y) << 16; }
+ UINT32 &HWLO_SET(unsigned x, UINT16 y) { return WORD(x) |= UINT32(y); }
+
+ UINT32 &WORD_RESET(unsigned x, UINT32 y) { return WORD(x) &= ~y; }
+ UINT32 &HWHI_RESET(unsigned x, UINT16 y) { return WORD(x) &= ~(UINT32(y) << 16); }
+ UINT32 &HWLO_RESET(unsigned x, UINT16 y) { return WORD(x) &= ~UINT32(y); }
+
+ UINT32 m_regs[COUNT];
+};
+
+
+class gba_lcd_device
+ : public device_t
+ , public device_video_interface
+ , protected gba_registers<0x060 / 4, 0x000>
+{
+public:
+ gba_lcd_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ DECLARE_READ32_MEMBER(video_r);
+ DECLARE_WRITE32_MEMBER(video_w);
+ DECLARE_READ32_MEMBER(gba_pram_r);
+ DECLARE_WRITE32_MEMBER(gba_pram_w);
+ DECLARE_READ32_MEMBER(gba_vram_r);
+ DECLARE_WRITE32_MEMBER(gba_vram_w);
+ DECLARE_READ32_MEMBER(gba_oam_r);
+ DECLARE_WRITE32_MEMBER(gba_oam_w);
+ DECLARE_PALETTE_INIT(gba);
+ TIMER_CALLBACK_MEMBER(perform_hbl);
+ TIMER_CALLBACK_MEMBER(perform_scan);
+
+ template static devcb_base &set_int_hblank_callback(device_t &device, _Object object)
+ {
+ return downcast(device).m_int_hblank_cb.set_callback(object);
+ }
+
+ template static devcb_base &set_int_vblank_callback(device_t &device, _Object object)
+ {
+ return downcast(device).m_int_vblank_cb.set_callback(object);
+ }
+
+ template static devcb_base &set_int_vcount_callback(device_t &device, _Object object)
+ {
+ return downcast(device).m_int_vcount_cb.set_callback(object);
+ }
+
+ template static devcb_base &set_dma_hblank_callback(device_t &device, _Object object)
+ {
+ return downcast(device).m_dma_hblank_cb.set_callback(object);
+ }
+
+ template static devcb_base &set_dma_vblank_callback(device_t &device, _Object object)
+ {
+ return downcast(device).m_dma_vblank_cb.set_callback(object);
+ }
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ virtual machine_config_constructor device_mconfig_additions() const override;
+
+private:
+ inline void update_mask(UINT8* mask, int mode, int submode, UINT32* obj_win, UINT8 inwin0, UINT8 inwin1, UINT8 in0_mask, UINT8 in1_mask, UINT8 out_mask);
+ void draw_modes(int mode, int submode, int y, UINT32* line0, UINT32* line1, UINT32* line2, UINT32* line3, UINT32* lineOBJ, UINT32* lineOBJWin, UINT32* lineMix, int bpp);
+ void draw_roz_bitmap_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, INT32 *currentx, INT32 *currenty, int changed, int depth);
+ void draw_roz_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, INT32 *currentx, INT32 *currenty, int changed);
+ void draw_bg_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, UINT32 hofs, UINT32 vofs);
+ void draw_gba_oam_window(UINT32 *scanline, int y);
+ void draw_gba_oam(UINT32 *scanline, int y);
+ inline int is_in_window(int x, int window);
+ void draw_scanline(int y);
+
+ devcb_write_line m_int_hblank_cb; /* H-Blank interrupt callback function */
+ devcb_write_line m_int_vblank_cb; /* V-Blank interrupt callback function */
+ devcb_write_line m_int_vcount_cb; /* V-Counter Match interrupt callback function */
+ devcb_write_line m_dma_hblank_cb; /* H-Blank DMA request callback function */
+ devcb_write_line m_dma_vblank_cb; /* V-Blank DMA request callback function */
+
+ std::unique_ptr m_pram;
+ std::unique_ptr m_vram;
+ std::unique_ptr m_oam;
+
+ emu_timer *m_scan_timer, *m_hbl_timer;
+
+ bitmap_ind16 m_bitmap;
+
+ UINT8 m_windowOn;
+ UINT8 m_fxOn;
+ UINT8 m_gfxBG2Changed;
+ UINT8 m_gfxBG3Changed;
+ INT32 m_gfxBG2X;
+ INT32 m_gfxBG2Y;
+ INT32 m_gfxBG3X;
+ INT32 m_gfxBG3Y;
+
+ UINT32 m_xferscan[7][240+2048];
+};
+
+#endif /* GBA_LCD_H_ */
diff --git a/src/devices/video/gf4500.cpp b/src/devices/video/gf4500.cpp
index d4b7e86f056..4ad49d4acf7 100644
--- a/src/devices/video/gf4500.cpp
+++ b/src/devices/video/gf4500.cpp
@@ -26,7 +26,6 @@ static inline void ATTR_PRINTF(3,4) verboselog( device_t &device, int n_level, c
}
}
-#define BIT(x,n) (((x)>>(n))&1)
#define BITS(x,m,n) (((x)>>(n))&(((UINT32)1<<((m)-(n)+1))-1))
#define GF4500_FRAMEBUF_OFFSET 0x20000
diff --git a/src/emu/devfind.cpp b/src/emu/devfind.cpp
index 803bd0a15e5..febe71d8b3a 100644
--- a/src/emu/devfind.cpp
+++ b/src/emu/devfind.cpp
@@ -156,10 +156,11 @@ bool finder_base::report_missing(bool found, const char *objname, bool required)
return true;
// otherwise, report
+ std::string region_fulltag = m_base.subtag(m_tag);
if (required)
- osd_printf_error("Required %s '%s' not found\n", objname, m_tag);
+ osd_printf_error("Required %s '%s' not found\n", objname, region_fulltag.c_str());
else
- osd_printf_verbose("Optional %s '%s' not found\n", objname, m_tag);
+ osd_printf_verbose("Optional %s '%s' not found\n", objname, region_fulltag.c_str());
return !required;
}
diff --git a/src/emu/devfind.h b/src/emu/devfind.h
index 08a5b6fcccb..4b0d849bb80 100644
--- a/src/emu/devfind.h
+++ b/src/emu/devfind.h
@@ -14,8 +14,8 @@
#error Dont include this file directly; include emu.h instead.
#endif
-#ifndef __DEVFIND_H__
-#define __DEVFIND_H__
+#ifndef MAME_EMU_DEVFIND_H
+#define MAME_EMU_DEVFIND_H
#define FINDER_DUMMY_TAG "finder_dummy_tag"
@@ -350,7 +350,7 @@ public:
// operators to make use transparent
operator _PointerType *() const { return this->m_target; }
- _PointerType operator[](int index) const { assert(index < m_length); return this->m_target[index]; }
+ const _PointerType &operator[](int index) const { assert(index < m_length); return this->m_target[index]; }
_PointerType &operator[](int index) { assert(index < m_length); return this->m_target[index]; }
// setter for setting the object and its length
@@ -409,7 +409,7 @@ public:
// operators to make use transparent
operator _PointerType *() const { return this->m_target; }
- _PointerType operator[](int index) const { return this->m_target[index]; }
+ const _PointerType &operator[](int index) const { return this->m_target[index]; }
_PointerType &operator[](int index) { return this->m_target[index]; }
// getter for explicit fetching
@@ -507,4 +507,4 @@ public:
};
-#endif /* __DEVFIND_H__ */
+#endif /* MAME_EMU_DEVFIND_H */
diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp
index 97c9559e9a9..d4d2be3d4b5 100644
--- a/src/emu/diimage.cpp
+++ b/src/emu/diimage.cpp
@@ -1254,53 +1254,6 @@ void device_image_interface::update_names(const device_type device_type, const c
}
}
-//-------------------------------------------------
-// software_name_split - helper that splits a
-// software_list:software:part string into
-// separate software_list, software, and part
-// strings.
-//
-// str1:str2:str3 => swlist_name - str1, swname - str2, swpart - str3
-// str1:str2 => swlist_name - nullptr, swname - str1, swpart - str2
-// str1 => swlist_name - nullptr, swname - str1, swpart - nullptr
-//
-// Notice however that we could also have been
-// passed a string swlist_name:swname, and thus
-// some special check has to be performed in this
-// case.
-//-------------------------------------------------
-
-void device_image_interface::software_name_split(const std::string &swlist_swname, std::string &swlist_name, std::string &swname, std::string &swpart)
-{
- // reset all output parameters
- swlist_name.clear();
- swname.clear();
- swpart.clear();
-
- // if no colon, this is the swname by itself
- auto split1 = swlist_swname.find_first_of(':');
- if (split1 == std::string::npos)
- {
- swname = swlist_swname;
- return;
- }
-
- // if one colon, it is the swname and swpart alone
- auto split2 = swlist_swname.find_first_of(':', split1 + 1);
- if (split2 == std::string::npos)
- {
- swname = swlist_swname.substr(0, split1);
- swpart = swlist_swname.substr(split1 + 1);
- return;
- }
-
- // if two colons present, split into 3 parts
- swlist_name = swlist_swname.substr(0, split1);
- swname = swlist_swname.substr(split1 + 1, split2 - (split1 + 1));
- swpart = swlist_swname.substr(split2 + 1);
-}
-
-
//-------------------------------------------------
// find_software_item
//-------------------------------------------------
@@ -1309,7 +1262,8 @@ const software_part *device_image_interface::find_software_item(const std::strin
{
// split full software name into software list name and short software name
std::string swlist_name, swinfo_name, swpart_name;
- software_name_split(path, swlist_name, swinfo_name, swpart_name);
+ if (!software_name_parse(path, &swlist_name, &swinfo_name, &swpart_name))
+ return nullptr;
// determine interface
const char *interface = nullptr;
diff --git a/src/emu/diimage.h b/src/emu/diimage.h
index d2ea51c47e7..aac698230b8 100644
--- a/src/emu/diimage.h
+++ b/src/emu/diimage.h
@@ -238,7 +238,6 @@ public:
bool load_software(software_list_device &swlist, const char *swname, const rom_entry *entry);
int reopen_for_write(const std::string &path);
- static void software_name_split(const std::string &swlist_swname, std::string &swlist_name, std::string &swname, std::string &swpart);
static void static_set_user_loadable(device_t &device, bool user_loadable) {
device_image_interface *img;
if (!device.interface(img))
diff --git a/src/emu/dirom.cpp b/src/emu/dirom.cpp
new file mode 100644
index 00000000000..45a4dd2dc56
--- /dev/null
+++ b/src/emu/dirom.cpp
@@ -0,0 +1,59 @@
+#include "emu.h"
+
+
+device_rom_interface::device_rom_interface(const machine_config &mconfig, device_t &device, UINT8 addrwidth, endianness_t endian, UINT8 datawidth) :
+ device_memory_interface(mconfig, device),
+ m_rom_config("rom", endian, datawidth, addrwidth)
+{
+}
+
+device_rom_interface::~device_rom_interface()
+{
+}
+
+const address_space_config *device_rom_interface::memory_space_config(address_spacenum spacenum) const
+{
+ return spacenum ? nullptr : &m_rom_config;
+}
+
+void device_rom_interface::set_rom(const void *base, UINT32 size)
+{
+ UINT32 mend = m_rom_config.addr_width() == 32 ? 0xffffffff : (1 << m_rom_config.addr_width()) - 1;
+ UINT32 rend = size-1;
+ if(rend > mend) {
+ device().logerror("Warning: The rom for device %s is %x bytes, while the chip addressing space is only %x bytes.\n", device().tag(), rend+1, mend+1);
+ rend = mend;
+ }
+ if(rend == mend)
+ space().install_rom(0, mend, const_cast(base));
+ else {
+ // Round up to the nearest power-of-two-minus-one
+ UINT32 rmask = rend;
+ rmask |= rmask >> 1;
+ rmask |= rmask >> 2;
+ rmask |= rmask >> 4;
+ rmask |= rmask >> 8;
+ rmask |= rmask >> 16;
+ if(rmask != rend)
+ space().unmap_read(0, mend);
+ // Mirror over the high bits. mend and rmask are both
+ // powers-of-two-minus-one, so the xor works
+ space().install_rom(0, rend, mend ^ rmask, const_cast(base));
+ }
+}
+
+void device_rom_interface::interface_pre_start()
+{
+ m_rom_direct = &space().direct();
+
+ if(!has_configured_map(0)) {
+ memory_region *reg = device().memregion(DEVICE_SELF);
+ if(reg)
+ set_rom(reg->base(), reg->bytes());
+ else {
+ UINT32 end = m_rom_config.addr_width() == 32 ? 0xffffffff : (1 << m_rom_config.addr_width()) - 1;
+ space().unmap_read(0, end);
+ }
+ }
+}
+
diff --git a/src/emu/dirom.h b/src/emu/dirom.h
new file mode 100644
index 00000000000..900b5a09517
--- /dev/null
+++ b/src/emu/dirom.h
@@ -0,0 +1,46 @@
+// license:BSD-3-Clause
+// copyright-holders:Olivier Galibert
+/***************************************************************************
+
+ dirom.h
+
+ Interface to a rom, either through a memory map or a region
+
+***************************************************************************/
+
+#pragma once
+
+#ifndef __EMU_H__
+#error Dont include this file directly; include emu.h instead.
+#endif
+
+#ifndef __DIROM_H__
+#define __DIROM_H__
+
+class device_rom_interface : public device_memory_interface
+{
+public:
+ device_rom_interface(const machine_config &mconfig, device_t &device, UINT8 addrwidth, endianness_t endian = ENDIANNESS_LITTLE, UINT8 datawidth = 8);
+ virtual ~device_rom_interface();
+
+ inline UINT8 read_byte(offs_t byteaddress) { return m_rom_direct->read_byte(byteaddress); }
+ inline UINT16 read_word(offs_t byteaddress) { return m_rom_direct->read_word(byteaddress); }
+ inline UINT32 read_dword(offs_t byteaddress) { return m_rom_direct->read_dword(byteaddress); }
+ inline UINT64 read_qword(offs_t byteaddress) { return m_rom_direct->read_qword(byteaddress); }
+
+ void set_rom(const void *base, UINT32 size);
+
+private:
+ const address_space_config m_rom_config;
+ direct_read_data *m_rom_direct;
+
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum) const override;
+ virtual void interface_pre_start() override;
+
+ DECLARE_READ8_MEMBER(z8_r);
+ DECLARE_READ16_MEMBER(z16_r);
+ DECLARE_READ32_MEMBER(z32_r);
+ DECLARE_READ64_MEMBER(z64_r);
+};
+
+#endif
diff --git a/src/emu/drivers/xtal.h b/src/emu/drivers/xtal.h
index c74c9ec24b8..0bd5567f0fa 100644
--- a/src/emu/drivers/xtal.h
+++ b/src/emu/drivers/xtal.h
@@ -146,6 +146,7 @@ enum
XTAL_16MHz = 16000000, /* Extremely common, used on 100's of PCBs */
XTAL_16_384MHz = 16384000,
XTAL_16_5888MHz = 16588800, /* SM 7238 */
+ XTAL_16_777216MHz = 16777216, /* Nintendo Game Boy Advance */
XTAL_16_9344MHz = 16934400, /* Usually used to drive 90's Yamaha OPL/FM chips (44100 * 384) */
XTAL_17_36MHz = 17360000, /* OMTI Series 10 SCSI controller */
XTAL_17_73447MHz = 17734470, /* (~4x PAL subcarrier) */
diff --git a/src/emu/emu.h b/src/emu/emu.h
index 54a3b2787ad..6424c4efec5 100644
--- a/src/emu/emu.h
+++ b/src/emu/emu.h
@@ -67,6 +67,7 @@ typedef device_t * (*machine_config_constructor)(machine_config &config, device_
#include "devfind.h"
#include "distate.h"
#include "dimemory.h"
+#include "dirom.h"
#include "diexec.h"
#include "opresolv.h"
#include "digfx.h"
diff --git a/src/emu/emucore.h b/src/emu/emucore.h
index a8e464f0b8b..6e80277113b 100644
--- a/src/emu/emucore.h
+++ b/src/emu/emucore.h
@@ -7,10 +7,10 @@
General core utilities and macros used throughout the emulator.
***************************************************************************/
-#pragma once
+#ifndef MAME_EMU_EMUCORE_H
+#define MAME_EMU_EMUCORE_H
-#ifndef __EMUCORE_H__
-#define __EMUCORE_H__
+#pragma once
// standard C includes
#include
@@ -27,6 +27,7 @@
#endif
// standard C++ includes
+#include
#include
#include
#include
@@ -240,36 +241,28 @@ inline TYPE operator--(TYPE &value, int) { TYPE const old(value); --value; retur
#define ENDIAN_VALUE_NE_NNE(endian,neval,nneval) (((endian) == ENDIANNESS_NATIVE) ? (neval) : (nneval))
-// useful macros to deal with bit shuffling encryptions
-#define BIT(x,n) (((x)>>(n))&1)
+// useful functions to deal with bit shuffling encryptions
+template constexpr T BIT(T x, U n) { return (x >> n) & T(1); }
-#define BITSWAP8(val,B7,B6,B5,B4,B3,B2,B1,B0) \
- ((BIT(val,B7) << 7) | (BIT(val,B6) << 6) | (BIT(val,B5) << 5) | (BIT(val,B4) << 4) | \
- (BIT(val,B3) << 3) | (BIT(val,B2) << 2) | (BIT(val,B1) << 1) | (BIT(val,B0) << 0))
+template constexpr T bitswap(T val, U b)
+{
+ return BIT(val, b) << 0U;
+}
-#define BITSWAP16(val,B15,B14,B13,B12,B11,B10,B9,B8,B7,B6,B5,B4,B3,B2,B1,B0) \
- ((BIT(val,B15) << 15) | (BIT(val,B14) << 14) | (BIT(val,B13) << 13) | (BIT(val,B12) << 12) | \
- (BIT(val,B11) << 11) | (BIT(val,B10) << 10) | (BIT(val, B9) << 9) | (BIT(val, B8) << 8) | \
- (BIT(val, B7) << 7) | (BIT(val, B6) << 6) | (BIT(val, B5) << 5) | (BIT(val, B4) << 4) | \
- (BIT(val, B3) << 3) | (BIT(val, B2) << 2) | (BIT(val, B1) << 1) | (BIT(val, B0) << 0))
+template constexpr T bitswap(T val, U b, V... c)
+{
+ return (BIT(val, b) << sizeof...(c)) | bitswap(val, c...);
+}
-#define BITSWAP24(val,B23,B22,B21,B20,B19,B18,B17,B16,B15,B14,B13,B12,B11,B10,B9,B8,B7,B6,B5,B4,B3,B2,B1,B0) \
- ((BIT(val,B23) << 23) | (BIT(val,B22) << 22) | (BIT(val,B21) << 21) | (BIT(val,B20) << 20) | \
- (BIT(val,B19) << 19) | (BIT(val,B18) << 18) | (BIT(val,B17) << 17) | (BIT(val,B16) << 16) | \
- (BIT(val,B15) << 15) | (BIT(val,B14) << 14) | (BIT(val,B13) << 13) | (BIT(val,B12) << 12) | \
- (BIT(val,B11) << 11) | (BIT(val,B10) << 10) | (BIT(val, B9) << 9) | (BIT(val, B8) << 8) | \
- (BIT(val, B7) << 7) | (BIT(val, B6) << 6) | (BIT(val, B5) << 5) | (BIT(val, B4) << 4) | \
- (BIT(val, B3) << 3) | (BIT(val, B2) << 2) | (BIT(val, B1) << 1) | (BIT(val, B0) << 0))
-
-#define BITSWAP32(val,B31,B30,B29,B28,B27,B26,B25,B24,B23,B22,B21,B20,B19,B18,B17,B16,B15,B14,B13,B12,B11,B10,B9,B8,B7,B6,B5,B4,B3,B2,B1,B0) \
- ((BIT(val,B31) << 31) | (BIT(val,B30) << 30) | (BIT(val,B29) << 29) | (BIT(val,B28) << 28) | \
- (BIT(val,B27) << 27) | (BIT(val,B26) << 26) | (BIT(val,B25) << 25) | (BIT(val,B24) << 24) | \
- (BIT(val,B23) << 23) | (BIT(val,B22) << 22) | (BIT(val,B21) << 21) | (BIT(val,B20) << 20) | \
- (BIT(val,B19) << 19) | (BIT(val,B18) << 18) | (BIT(val,B17) << 17) | (BIT(val,B16) << 16) | \
- (BIT(val,B15) << 15) | (BIT(val,B14) << 14) | (BIT(val,B13) << 13) | (BIT(val,B12) << 12) | \
- (BIT(val,B11) << 11) | (BIT(val,B10) << 10) | (BIT(val, B9) << 9) | (BIT(val, B8) << 8) | \
- (BIT(val, B7) << 7) | (BIT(val, B6) << 6) | (BIT(val, B5) << 5) | (BIT(val, B4) << 4) | \
- (BIT(val, B3) << 3) | (BIT(val, B2) << 2) | (BIT(val, B1) << 1) | (BIT(val, B0) << 0))
+// explicit versions that check number of bit position arguments
+template constexpr T BITSWAP8(T val, U... b) { static_assert(sizeof...(b) == 8U, "wrong number of bits"); return bitswap(val, b...); }
+template constexpr T BITSWAP16(T val, U... b) { static_assert(sizeof...(b) == 16U, "wrong number of bits"); return bitswap(val, b...); }
+template constexpr T BITSWAP24(T val, U... b) { static_assert(sizeof...(b) == 24U, "wrong number of bits"); return bitswap(val, b...); }
+template constexpr T BITSWAP32(T val, U... b) { static_assert(sizeof...(b) == 32U, "wrong number of bits"); return bitswap(val, b...); }
+template constexpr T BITSWAP40(T val, U... b) { static_assert(sizeof...(b) == 40U, "wrong number of bits"); return bitswap(val, b...); }
+template constexpr T BITSWAP48(T val, U... b) { static_assert(sizeof...(b) == 48U, "wrong number of bits"); return bitswap(val, b...); }
+template constexpr T BITSWAP56(T val, U... b) { static_assert(sizeof...(b) == 56U, "wrong number of bits"); return bitswap(val, b...); }
+template constexpr T BITSWAP64(T val, U... b) { static_assert(sizeof...(b) == 64U, "wrong number of bits"); return bitswap(val, b...); }
@@ -426,4 +419,4 @@ inline UINT64 d2u(double d)
return u.vv;
}
-#endif /* __EMUCORE_H__ */
+#endif /* MAME_EMU_EMUCORE_H */
diff --git a/src/emu/image.cpp b/src/emu/image.cpp
index 5fbc5844b9d..06998ad37e6 100644
--- a/src/emu/image.cpp
+++ b/src/emu/image.cpp
@@ -10,19 +10,13 @@
***************************************************************************/
#include
-#include
#include "emu.h"
#include "emuopts.h"
#include "image.h"
#include "config.h"
#include "xmlfile.h"
-
-//**************************************************************************
-// STATIC VARIABLES
-//**************************************************************************
-
-static std::regex s_potenial_softlist_regex("\\w+(\\:\\w+\\:\\w+)?");
+#include "softlist.h"
//**************************************************************************
@@ -54,7 +48,7 @@ image_manager::image_manager(running_machine &machine)
image.set_init_phase();
// try as a softlist
- if (std::regex_match(image_name, s_potenial_softlist_regex))
+ if (software_name_parse(image_name))
result = image.load_software(image_name);
// failing that, try as an image
diff --git a/src/emu/render.cpp b/src/emu/render.cpp
index 5b15bc4498e..51669bf5320 100644
--- a/src/emu/render.cpp
+++ b/src/emu/render.cpp
@@ -74,15 +74,6 @@ enum
-//**************************************************************************
-// MACROS
-//**************************************************************************
-
-#define ISWAP(var1, var2) do { int temp = var1; var1 = var2; var2 = temp; } while (0)
-#define FSWAP(var1, var2) do { float temp = var1; var1 = var2; var2 = temp; } while (0)
-
-
-
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -136,8 +127,8 @@ inline void apply_orientation(render_bounds &bounds, int orientation)
// swap first
if (orientation & ORIENTATION_SWAP_XY)
{
- FSWAP(bounds.x0, bounds.y0);
- FSWAP(bounds.x1, bounds.y1);
+ std::swap(bounds.x0, bounds.y0);
+ std::swap(bounds.x1, bounds.y1);
}
// apply X flip
@@ -164,9 +155,9 @@ inline void apply_orientation(render_bounds &bounds, int orientation)
inline void normalize_bounds(render_bounds &bounds)
{
if (bounds.x0 > bounds.x1)
- FSWAP(bounds.x0, bounds.x1);
+ std::swap(bounds.x0, bounds.x1);
if (bounds.y0 > bounds.y1)
- FSWAP(bounds.y0, bounds.y1);
+ std::swap(bounds.y0, bounds.y1);
}
@@ -947,7 +938,7 @@ render_target::render_target(render_manager &manager, const internal_layout *lay
if (manager.machine().options().uneven_stretch() && !manager.machine().options().uneven_stretch_x())
m_scale_mode = SCALE_FRACTIONAL;
else
- m_scale_mode = manager.machine().options().uneven_stretch_x()? SCALE_FRACTIONAL_X : SCALE_INTEGER;
+ m_scale_mode = manager.machine().options().uneven_stretch_x() ? SCALE_FRACTIONAL_X : SCALE_INTEGER;
// determine the base orientation based on options
if (!manager.machine().options().rotate())
@@ -1177,7 +1168,7 @@ void render_target::compute_visible_area(INT32 target_width, INT32 target_height
// first apply target orientation
if (target_orientation & ORIENTATION_SWAP_XY)
- FSWAP(width, height);
+ std::swap(width, height);
// apply the target pixel aspect ratio
height *= target_pixel_aspect;
@@ -1235,8 +1226,8 @@ void render_target::compute_visible_area(INT32 target_width, INT32 target_height
if (y_is_integer) yscale = std::min(maxyscale, std::max(1.0f, render_round_nearest(yscale)));
// check if we have user defined scale factors, if so use them instead
- xscale = m_int_scale_x? m_int_scale_x : xscale;
- yscale = m_int_scale_y? m_int_scale_y : yscale;
+ xscale = m_int_scale_x > 0 ? m_int_scale_x : xscale;
+ yscale = m_int_scale_y > 0 ? m_int_scale_y : yscale;
// set the final width/height
visible_width = render_round_nearest(src_width * xscale);
@@ -2051,7 +2042,7 @@ void render_target::add_element_primitives(render_primitive_list &list, const ob
INT32 height = render_round_nearest(xform.yscale);
set_render_bounds_wh(&prim->bounds, render_round_nearest(xform.xoffs), render_round_nearest(xform.yoffs), (float) width, (float) height);
if (xform.orientation & ORIENTATION_SWAP_XY)
- ISWAP(width, height);
+ std::swap(width, height);
width = std::min(width, m_maxtexwidth);
height = std::min(height, m_maxtexheight);
diff --git a/src/emu/softlist.cpp b/src/emu/softlist.cpp
index d7a8b8d86d8..6ae687db843 100644
--- a/src/emu/softlist.cpp
+++ b/src/emu/softlist.cpp
@@ -8,10 +8,20 @@
***************************************************************************/
+#include
+
#include "softlist.h"
#include "hash.h"
#include "expat.h"
+
+//**************************************************************************
+// STATIC VARIABLES
+//**************************************************************************
+
+static std::regex s_potenial_softlist_regex("\\w+(\\:\\w+)*");
+
+
//**************************************************************************
// FEATURE LIST ITEM
//**************************************************************************
@@ -808,3 +818,65 @@ void softlist_parser::parse_soft_end(const char *tagname)
}
}
+
+//-------------------------------------------------
+// software_name_parse - helper that splits a
+// software_list:software:part string into
+// separate software_list, software, and part
+// strings.
+//
+// str1:str2:str3 => swlist_name - str1, swname - str2, swpart - str3
+// str1:str2 => swlist_name - nullptr, swname - str1, swpart - str2
+// str1 => swlist_name - nullptr, swname - str1, swpart - nullptr
+//
+// Notice however that we could also have been
+// passed a string swlist_name:swname, and thus
+// some special check has to be performed in this
+// case.
+//-------------------------------------------------
+
+bool software_name_parse(const std::string &text, std::string *swlist_name, std::string *swname, std::string *swpart)
+{
+ // first, sanity check the arguments
+ if (!std::regex_match(text, s_potenial_softlist_regex))
+ return false;
+
+ // reset all output parameters (if specified of course)
+ if (swlist_name != nullptr)
+ swlist_name->clear();
+ if (swname != nullptr)
+ swname->clear();
+ if (swpart != nullptr)
+ swpart->clear();
+
+ // if no colon, this is the swname by itself
+ auto split1 = text.find_first_of(':');
+ if (split1 == std::string::npos)
+ {
+ if (swname != nullptr)
+ *swname = text;
+ return true;
+ }
+
+ // if one colon, it is the swname and swpart alone
+ auto split2 = text.find_first_of(':', split1 + 1);
+ if (split2 == std::string::npos)
+ {
+ if (swname != nullptr)
+ *swname = text.substr(0, split1);
+ if (swpart != nullptr)
+ *swpart = text.substr(split1 + 1);
+ return true;
+ }
+
+ // if two colons present, split into 3 parts
+ if (swlist_name != nullptr)
+ *swlist_name = text.substr(0, split1);
+ if (swname != nullptr)
+ *swname = text.substr(split1 + 1, split2 - (split1 + 1));
+ if (swpart != nullptr)
+ *swpart = text.substr(split2 + 1);
+ return true;
+}
+
+
diff --git a/src/emu/softlist.h b/src/emu/softlist.h
index 6f3b69deaa7..d38779afe5d 100644
--- a/src/emu/softlist.h
+++ b/src/emu/softlist.h
@@ -205,5 +205,10 @@ private:
};
+// ----- Helpers -----
+
+// parses a software name (e.g. - 'apple2e:agentusa:flop1') into its consituent parts (returns false if cannot parse)
+bool software_name_parse(const std::string &text, std::string *swlist_name = nullptr, std::string *swname = nullptr, std::string *swpart = nullptr);
+
#endif // __SOFTLIST_H_
diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp
index 0ccda19620e..c4ff85dee41 100644
--- a/src/frontend/mame/luaengine.cpp
+++ b/src/frontend/mame/luaengine.cpp
@@ -1252,7 +1252,7 @@ int lua_engine::lua_memory_region::l_region_write(lua_State *L)
if(region.endianness() == ENDIANNESS_BIG)
region.base()[(BYTE8_XOR_BE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff;
else
- region.base()[(BYTE8_XOR_BE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff;
+ region.base()[(BYTE8_XOR_LE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff;
val >>= 8;
}
@@ -1317,7 +1317,7 @@ int lua_engine::lua_memory_share::l_share_write(lua_State *L)
if(share.endianness() == ENDIANNESS_BIG)
ptr[(BYTE8_XOR_BE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff;
else
- ptr[(BYTE8_XOR_BE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff;
+ ptr[(BYTE8_XOR_LE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff;
val >>= 8;
}
@@ -1942,9 +1942,10 @@ lua_engine::~lua_engine()
close();
}
-void lua_engine::call_plugin(const char *data, const char *name)
+const char *lua_engine::call_plugin(const char *data, const char *name)
{
std::string field("cb_");
+ const char *ret = nullptr;
field += name;
lua_settop(m_lua_state, 0);
lua_getfield(m_lua_state, LUA_REGISTRYINDEX, field.c_str());
@@ -1952,17 +1953,21 @@ void lua_engine::call_plugin(const char *data, const char *name)
if(!lua_isfunction(m_lua_state, -1))
{
lua_pop(m_lua_state, 1);
- return;
+ return nullptr;
}
lua_pushstring(m_lua_state, data);
int error;
- if((error = lua_pcall(m_lua_state, 1, 0, 0)) != LUA_OK)
+ if((error = lua_pcall(m_lua_state, 1, 1, 0)) != LUA_OK)
{
if(error == LUA_ERRRUN)
printf("%s\n", lua_tostring(m_lua_state, -1));
lua_pop(m_lua_state, 1);
- return;
+ return nullptr;
}
+ if(lua_isstring(m_lua_state, -1))
+ ret = lua_tostring(m_lua_state, -1);
+ lua_pop(m_lua_state, 1);
+ return ret;
}
int lua_engine::l_emu_register_callback(lua_State *L)
diff --git a/src/frontend/mame/luaengine.h b/src/frontend/mame/luaengine.h
index 4e18aefbfde..f07be2239d6 100644
--- a/src/frontend/mame/luaengine.h
+++ b/src/frontend/mame/luaengine.h
@@ -62,7 +62,7 @@ public:
std::vector &get_menu() { return m_menu; }
void attach_notifiers();
void on_frame_done();
- void call_plugin(const char *data, const char *name);
+ const char *call_plugin(const char *data, const char *name);
private:
struct hook {
diff --git a/src/frontend/mame/ui/selgame.cpp b/src/frontend/mame/ui/selgame.cpp
index 7357d3f66c2..36edddc66b2 100644
--- a/src/frontend/mame/ui/selgame.cpp
+++ b/src/frontend/mame/ui/selgame.cpp
@@ -1027,7 +1027,6 @@ void menu_select_game::build_list(const char *filter_text, int filter, bool bios
for (auto & s_driver : s_drivers)
{
- auto entries = rom_build_entries(s_driver->rom);
if (!bioscheck && filter != FILTER_BIOS && (s_driver->flags & MACHINE_IS_BIOS_ROOT) != 0)
continue;
@@ -1113,15 +1112,19 @@ void menu_select_game::build_list(const char *filter_text, int filter, bool bios
}
break;
case FILTER_CHD:
- for (const rom_entry &rom : entries)
- if (ROMENTRY_ISREGION(&rom) && ROMREGION_ISDISKDATA(&rom))
- {
- m_displaylist.push_back(s_driver);
- break;
+ {
+ auto entries = rom_build_entries(s_driver->rom);
+ for (const rom_entry &rom : entries)
+ if (ROMENTRY_ISREGION(&rom) && ROMREGION_ISDISKDATA(&rom))
+ {
+ m_displaylist.push_back(s_driver);
+ break;
+ }
}
break;
case FILTER_NOCHD:
{
+ auto entries = rom_build_entries(s_driver->rom);
bool found = false;
for (const rom_entry &rom : entries)
if (ROMENTRY_ISREGION(&rom) && ROMREGION_ISDISKDATA(&rom))
diff --git a/src/frontend/mame/ui/submenu.cpp b/src/frontend/mame/ui/submenu.cpp
index ebef1f9a33c..3d0b866618a 100644
--- a/src/frontend/mame/ui/submenu.cpp
+++ b/src/frontend/mame/ui/submenu.cpp
@@ -140,7 +140,7 @@ submenu::submenu(mame_ui_manager &mui, render_container &container, std::vector<
else
opts = dynamic_cast(options);
- for (auto & sm_option : m_options)
+ for (option & sm_option : m_options)
{
switch (sm_option.type)
{
@@ -176,6 +176,12 @@ submenu::submenu(mame_ui_manager &mui, render_container &container, std::vector<
sm_option.value.clear();
std::string descr(sm_option.entry->description()), delim(", ");
descr.erase(0, descr.find(":") + 2);
+
+ std::string default_value(sm_option.entry->default_value());
+ std::string auto_value(OSDOPTVAL_AUTO);
+ if (default_value == auto_value)
+ descr = auto_value + delim + descr;
+
size_t p1, p2 = 0;
while ((p1 = descr.find_first_not_of(delim, p2)) != std::string::npos)
{
diff --git a/src/lib/formats/abc800_dsk.cpp b/src/lib/formats/abc800_dsk.cpp
index 5686d502382..033ff309dcd 100644
--- a/src/lib/formats/abc800_dsk.cpp
+++ b/src/lib/formats/abc800_dsk.cpp
@@ -135,7 +135,7 @@ const abc800_format::format abc800_format::formats[] = {
{ // 1M 8 inch double density
floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM,
- 2000, 26, 77, 2, 256, {}, 1, {}, 55, 22, 54
+ 1200, 26, 77, 2, 256, {}, 1, {}, 55, 22, 54
},
{}
diff --git a/src/lib/formats/ti99_dsk.cpp b/src/lib/formats/ti99_dsk.cpp
index 8315bcafd91..9e9288cbc5f 100644
--- a/src/lib/formats/ti99_dsk.cpp
+++ b/src/lib/formats/ti99_dsk.cpp
@@ -40,7 +40,7 @@
#include
#include
-#include "emu.h" // osd_printf_verbose
+#include "emu.h" // osd_printf_* (in osdcore.h)
#include "imageutl.h"
#include "ti99_dsk.h"
@@ -113,17 +113,17 @@ bool ti99_floppy_format::load(io_generic *io, UINT32 form_factor, floppy_image *
int track_size = get_track_size(cell_size, sector_count);
int track_count = file_size / (track_size*heads);
- if (TRACE) osd_printf_verbose("ti99_dsk: track count = %d\n", track_count);
+ if (TRACE) osd_printf_info("ti99_dsk: track count = %d\n", track_count);
if (track_count > maxtrack)
{
- osd_printf_verbose("ti99_dsk: Floppy disk has too many tracks for this drive.\n");
+ osd_printf_error("ti99_dsk: Floppy disk has too many tracks for this drive.\n");
return false;
}
bool doubletracks = (track_count * 2 <= maxtrack);
- if (doubletracks) osd_printf_verbose("ti99_dsk: 40-track image in an 80-track drive. On save, image size will double.\n");
+ if (doubletracks) osd_printf_warning("ti99_dsk: 40-track image in an 80-track drive. On save, image size will double.\n");
// Read the image
for(int head=0; head < heads; head++)
@@ -224,7 +224,7 @@ bool ti99_floppy_format::save(io_generic *io, floppy_image *image)
else maxsect = 9;
}
}
- if (TRACE) osd_printf_verbose("ti99_dsk: Sectors/track: %d\n", maxsect);
+ if (TRACE) osd_printf_info("ti99_dsk: Sectors/track: %d\n", maxsect);
// We try different cell sizes until we find a fitting size.
// If this fails, we fall back to a size of 2000 ns
@@ -245,12 +245,12 @@ bool ti99_floppy_format::save(io_generic *io, floppy_image *image)
{
if (min_heads()==1)
{
- if (TRACE) osd_printf_verbose("ti99_dsk: We don't have a second side and the format allows for single-sided recording.\n");
+ if (TRACE) osd_printf_info("ti99_dsk: We don't have a second side and the format allows for single-sided recording.\n");
return true;
}
else
{
- osd_printf_verbose("ti99_dsk: No second side, but this format requires two-sided recording. Saving empty tracks.\n");
+ osd_printf_warning("ti99_dsk: No second side, but this format requires two-sided recording. Saving empty tracks.\n");
}
}
}
@@ -262,8 +262,8 @@ bool ti99_floppy_format::save(io_generic *io, floppy_image *image)
{
if (head == 0 && track == 0)
{
- if (marks >=6) { if (TRACE) osd_printf_verbose("ti99_dsk: Decoding with cell size %d successful.\n", cell_size); }
- else osd_printf_verbose("ti99_dsk: No address marks found on track 0. Assuming MFM format.\n");
+ if (marks >=6) { if (TRACE) osd_printf_info("ti99_dsk: Decoding with cell size %d successful.\n", cell_size); }
+ else osd_printf_info("ti99_dsk: No address marks found on track 0. Assuming MFM format.\n");
}
}
// Save to the file
@@ -299,7 +299,7 @@ void ti99_floppy_format::generate_track_fm(int track, int head, int cell_size, U
if (check_for_address_marks(trackdata, floppy_image::FM)==false)
{
- if (head==0 && track==0) osd_printf_verbose("ti99_dsk: Cannot find FM address marks on track %d, head %d; likely broken or unformatted.\n", track, head);
+ if (head==0 && track==0) osd_printf_warning("ti99_dsk: Cannot find FM address marks on track %d, head %d; likely broken or unformatted.\n", track, head);
return;
}
@@ -323,7 +323,8 @@ void ti99_floppy_format::generate_track_fm(int track, int head, int cell_size, U
if (((i-start-30)%334==0) && (i < start + 9*334))
{
// DAM
- raw_w(buffer, 16, 0xf56f);
+ // FB (1111010101101111) = normal data, F8 (1111010101101010)= deleted data
+ raw_w(buffer, 16, (trackdata[i]==0xf8)? 0xf56a : 0xf56f);
}
else
{
@@ -343,7 +344,7 @@ void ti99_floppy_format::generate_track_fm(int track, int head, int cell_size, U
}
if (crc1 != found_crc)
{
- osd_printf_verbose("ti99_dsk: Warning: CRC1 does not match (track=%d, head=%d). Found = %04x, calc = %04x\n", track, head, found_crc& 0xffff, crc1& 0xffff);
+ osd_printf_error("ti99_dsk: Warning: CRC1 does not match (track=%d, head=%d). Found = %04x, calc = %04x\n", track, head, found_crc& 0xffff, crc1& 0xffff);
}
}
else
@@ -363,7 +364,7 @@ void ti99_floppy_format::generate_track_fm(int track, int head, int cell_size, U
}
if (crc2 != found_crc)
{
- osd_printf_verbose("ti99_dsk: Warning: CRC2 does not match (track=%d, head=%d). Found = %04x, calc = %04x\n", track, head, found_crc& 0xffff, crc2& 0xffff);
+ osd_printf_error("ti99_dsk: Warning: CRC2 does not match (track=%d, head=%d). Found = %04x, calc = %04x\n", track, head, found_crc& 0xffff, crc2& 0xffff);
}
}
}
@@ -391,7 +392,7 @@ void ti99_floppy_format::generate_track_mfm(int track, int head, int cell_size,
if (check_for_address_marks(trackdata, floppy_image::MFM)==false)
{
- if (track==0 && head==0) osd_printf_verbose("ti99_dsk: Cannot find MFM address marks on track %d, head %d; likely broken or unformatted.\n", track, head);
+ if (track==0 && head==0) osd_printf_error("ti99_dsk: Cannot find MFM address marks on track %d, head %d; likely broken or unformatted.\n", track, head);
return;
}
@@ -439,7 +440,7 @@ void ti99_floppy_format::generate_track_mfm(int track, int head, int cell_size,
}
if (crc1 != found_crc)
{
- osd_printf_verbose("ti99_dsk: Warning: CRC1 does not match (track=%d, head=%d). Found = %04x, calc = %04x\n", track, head, found_crc & 0xffff, crc1& 0xffff);
+ osd_printf_error("ti99_dsk: Warning: CRC1 does not match (track=%d, head=%d). Found = %04x, calc = %04x\n", track, head, found_crc & 0xffff, crc1& 0xffff);
}
}
else
@@ -459,7 +460,7 @@ void ti99_floppy_format::generate_track_mfm(int track, int head, int cell_size,
}
if (crc2 != found_crc)
{
- osd_printf_verbose("ti99_dsk: Warning: CRC2 does not match (track=%d, head=%d). Found = %04x, calc = %04x\n", track, head, found_crc& 0xffff, crc2& 0xffff);
+ osd_printf_error("ti99_dsk: Warning: CRC2 does not match (track=%d, head=%d). Found = %04x, calc = %04x\n", track, head, found_crc& 0xffff, crc2& 0xffff);
}
}
}
@@ -735,7 +736,7 @@ int ti99_sdf_format::identify(io_generic *io, UINT32 form_factor)
// as a bad sector map
if ((file_size / SECTOR_SIZE) % 10 == 3)
{
- if (TRACE) osd_printf_verbose("ti99_dsk: Stripping map of bad sectors at image end\n");
+ if (TRACE) osd_printf_info("ti99_dsk: Stripping map of bad sectors at image end\n");
file_size -= SECTOR_SIZE*3;
}
@@ -772,15 +773,15 @@ int ti99_sdf_format::identify(io_generic *io, UINT32 form_factor)
// Check from contents
if ((vib.id[0]=='D')&&(vib.id[1]=='S')&&(vib.id[2]=='K'))
{
- if (TRACE) osd_printf_verbose("ti99_dsk: Found formatted SDF disk medium\n");
+ if (TRACE) osd_printf_info("ti99_dsk: Found formatted SDF disk medium\n");
vote = 100;
}
else
{
- if (TRACE) osd_printf_verbose("ti99_dsk: No valid VIB found; disk may be unformatted\n");
+ if (TRACE) osd_printf_info("ti99_dsk: No valid VIB found; disk may be unformatted\n");
}
}
- else if (TRACE) osd_printf_verbose("ti99_dsk: Disk image is not a SDF image\n");
+ else if (TRACE) osd_printf_info("ti99_dsk: Disk image is not a SDF image\n");
return vote;
}
@@ -816,7 +817,7 @@ void ti99_sdf_format::determine_sizes(io_generic *io, int& cell_size, int& secto
if (vib.density < 4) cell_size = 2000;
else cell_size = 1000;
}
- if (TRACE) osd_printf_verbose("ti99_dsk: VIB says that this disk is %s density with %d sectors per track, %d tracks, and %d heads\n", (cell_size==4000)? "single": ((cell_size==2000)? "double" : "high"), sector_count, vib.tracksperside, heads);
+ if (TRACE) osd_printf_info("ti99_dsk: VIB says that this disk is %s density with %d sectors per track, %d tracks, and %d heads\n", (cell_size==4000)? "single": ((cell_size==2000)? "double" : "high"), sector_count, vib.tracksperside, heads);
have_vib = true;
}
@@ -855,13 +856,13 @@ void ti99_sdf_format::determine_sizes(io_generic *io, int& cell_size, int& secto
{
if (sector_count == 16 && sector_count1 == 18)
{
- osd_printf_verbose("ti99_dsk: Warning: Invalid 16-sector format. Assuming 18 sectors.\n");
+ osd_printf_warning("ti99_dsk: Warning: Invalid 16-sector format. Assuming 18 sectors.\n");
sector_count = 18;
}
else
{
if (heads == 2 && ((cell_size1 != cell_size) || (sector_count1 != sector_count)))
- osd_printf_verbose("ti99_dsk: Warning: Disk image size does not correspond with format information in VIB.\n");
+ osd_printf_warning("ti99_dsk: Warning: Disk image size does not correspond with format information in VIB.\n");
}
}
else
diff --git a/src/lib/formats/victor9k_dsk.h b/src/lib/formats/victor9k_dsk.h
index 5664e66155b..c463803b781 100644
--- a/src/lib/formats/victor9k_dsk.h
+++ b/src/lib/formats/victor9k_dsk.h
@@ -13,6 +13,8 @@
#include "flopimg.h"
+//#define USE_SCP 1
+
class victor9k_format : public floppy_image_format_t {
public:
struct format {
diff --git a/src/mame/drivers/abc1600.cpp b/src/mame/drivers/abc1600.cpp
index 8a8077d58d4..b53785a1144 100644
--- a/src/mame/drivers/abc1600.cpp
+++ b/src/mame/drivers/abc1600.cpp
@@ -34,11 +34,14 @@
TODO:
+ - starting from MAME 0.151, the Z80 DMA reads 0x08 as the 257th byte to transfer from disk t0s14 thus failing a comparison @ 37cfa, leading to a watchdog reset
+ changing z80dma.cpp:477 to "done = (m_count == 0);" fixes this but isn't the real reason
- abcenix boot stuck in a loop @ 37cfa
- - segment/page RAM addresses are not correctly decoded, "sas/format/format" can't find the SASI interface because of this
- forcetask0 1 t0 0 t1 0 t2 0 t3 0
- sega19 0 task 0
- sega 000 segd 00 pga 008 pgd 4058 virtual 02c730 (should be 004730)
+ - segment/page RAM addresses are not correctly decoded, "sas/format/format" after abcenix is booted can't find the SASI interface because of this
+ [:mac] ':3f' (08A98) MAC 7e4a2:0004a2 (SEGA 02f SEGD 09 PGA 09c PGD 8000 NONX 1 WP 0)
+ should be
+ [:mac] ':3f' (089A8) MAC 7e4a2:1fe4a2 (SEGA 00f SEGD 0f PGA 0fc PGD 43fc NONX 0 WP 1)
+
- short/long reset (RSTBUT)
- CIO
- optimize timers!
diff --git a/src/mame/drivers/allied.cpp b/src/mame/drivers/allied.cpp
index e170a00af88..c3b6079236f 100644
--- a/src/mame/drivers/allied.cpp
+++ b/src/mame/drivers/allied.cpp
@@ -382,7 +382,7 @@ WRITE_LINE_MEMBER( allied_state::ic2_cb2_w )
if ((m_display) && (!state))
{
m_bit_counter++;
- if BIT(m_bit_counter, 0)
+ if (BIT(m_bit_counter, 0))
m_player_score[m_display-1] = (m_player_score[m_display-1] << 1) | m_disp_data;
if (m_bit_counter == 15)
m_bit_counter = 0;
diff --git a/src/mame/drivers/alphatro.cpp b/src/mame/drivers/alphatro.cpp
index 77f72f939b3..d1624498c99 100644
--- a/src/mame/drivers/alphatro.cpp
+++ b/src/mame/drivers/alphatro.cpp
@@ -175,7 +175,7 @@ MC6845_UPDATE_ROW( alphatro_state::crtc_update_row )
bg = (palette) ? 8 : attr & 7; // amber or RGB
fg = (palette) ? 0 : (attr & 0x38) >> 3;
- if BIT(attr, 7) // reverse video
+ if (BIT(attr, 7)) // reverse video
{
inv ^= 1;
chr &= 0x7f;
diff --git a/src/mame/drivers/alto2.cpp b/src/mame/drivers/alto2.cpp
index 1585759759f..809303922ca 100644
--- a/src/mame/drivers/alto2.cpp
+++ b/src/mame/drivers/alto2.cpp
@@ -162,6 +162,11 @@ static INPUT_PORTS_START( alto2 )
PORT_CONFNAME( 0x01, 0x01, "Memory switch")
PORT_CONFSETTING( 0x00, "on")
PORT_CONFSETTING( 0x01, "off")
+ PORT_CONFNAME( 0x06, 0x02, "CROM/CRAM configuration")
+ PORT_CONFSETTING( 0x00, "Invalid (no CROM/CRAM)")
+ PORT_CONFSETTING( 0x02, "1K CROM, 1K CRAM")
+ PORT_CONFSETTING( 0x04, "2K CROM, 1K CRAM")
+ PORT_CONFSETTING( 0x06, "1K CROM, 3K CRAM")
PORT_CONFNAME( 0x70, 0x00, "Ethernet breath-of-life")
PORT_CONFSETTING( 0x00, "off")
PORT_CONFSETTING( 0x10, "5 seconds")
@@ -252,7 +257,7 @@ ROM_END
//**************************************************************************
ADDRESS_MAP_START( alto2_ucode_map, AS_0, 32, alto2_state )
- AM_RANGE(0, ALTO2_UCODE_SIZE-1) AM_DEVICE32( "maincpu", alto2_cpu_device, ucode_map, 0xffffffffUL )
+ AM_RANGE(0, 4*ALTO2_UCODE_PAGE_SIZE-1) AM_DEVICE32( "maincpu", alto2_cpu_device, ucode_map, 0xffffffffUL )
ADDRESS_MAP_END
ADDRESS_MAP_START( alto2_const_map, AS_1, 16, alto2_state )
@@ -275,12 +280,14 @@ static MACHINE_CONFIG_START( alto2, alto2_state )
/* video hardware */
MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::white)
MCFG_SCREEN_RAW_PARAMS(XTAL_20_16MHz,
- ALTO2_DISPLAY_TOTAL_WIDTH, 0, ALTO2_DISPLAY_WIDTH,
- ALTO2_DISPLAY_TOTAL_HEIGHT, 0, ALTO2_DISPLAY_HEIGHT)
- MCFG_SCREEN_REFRESH_RATE(30) // two interlaced fields
- MCFG_SCREEN_VBLANK_TIME(ALTO2_DISPLAY_VBLANK_TIME)
+ ALTO2_DISPLAY_TOTAL_WIDTH,
+ 0,
+ ALTO2_DISPLAY_WIDTH,
+ ALTO2_DISPLAY_TOTAL_HEIGHT,
+ 16, // some scalines of vblank period before
+ 16+ALTO2_DISPLAY_HEIGHT+8) // and after the usual range
+ MCFG_SCREEN_REFRESH_RATE(30) // two interlaced fields at 60Hz
MCFG_SCREEN_UPDATE_DEVICE("maincpu", alto2_cpu_device, screen_update)
- MCFG_SCREEN_VBLANK_DEVICE("maincpu", alto2_cpu_device, screen_eof)
MCFG_SCREEN_PALETTE("palette")
MCFG_DEFAULT_LAYOUT( layout_vertical )
diff --git a/src/mame/drivers/alvg.cpp b/src/mame/drivers/alvg.cpp
index 700561e437c..997f237be06 100644
--- a/src/mame/drivers/alvg.cpp
+++ b/src/mame/drivers/alvg.cpp
@@ -129,6 +129,38 @@ ROM_START(wrldtour2)
ROM_COPY("gfx3",0x108000,0x0000,0x8000)
ROM_END
+ROM_START(wrldtour3)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("cpu03.512", 0x0000, 0x10000, CRC(56dee967) SHA1(f7b1f69d96c72b0cf738bdf45701502f7306a4a0))
+ ROM_REGION(0x10000, "cpu2", 0)
+ ROM_LOAD("soundc.512", 0x0000, 0x10000, CRC(b44bee01) SHA1(795d8500e5bd73ce23756bf1f5c96db1a3621a70))
+ ROM_REGION(0x400000, "sound1", 0)
+ ROM_LOAD("samp_0.c21", 0x000000, 0x40000, CRC(37beb831) SHA1(2b90d2be0a1bd7c59469846631d2b44bdf9f5f9d))
+ ROM_RELOAD(0x000000 + 0x40000, 0x40000)
+ ROM_RELOAD(0x000000 + 0x80000, 0x40000)
+ ROM_RELOAD(0x000000 + 0xc0000, 0x40000)
+ ROM_LOAD("samp_1.c21", 0x100000, 0x40000, CRC(621533c6) SHA1(ca0ed9e89c340cb3b08f9a9002af9997372c1cbf))
+ ROM_RELOAD(0x100000 + 0x40000, 0x40000)
+ ROM_RELOAD(0x100000 + 0x80000, 0x40000)
+ ROM_RELOAD(0x100000 + 0xc0000, 0x40000)
+ ROM_LOAD("samp_2.c21", 0x200000, 0x40000, CRC(454a5cca) SHA1(66b1a5832134365fd762fcba4cf4d666f60ebd65))
+ ROM_RELOAD(0x200000 + 0x40000, 0x40000)
+ ROM_RELOAD(0x200000 + 0x80000, 0x40000)
+ ROM_RELOAD(0x200000 + 0xc0000, 0x40000)
+ ROM_LOAD("samp_3.c21", 0x300000, 0x40000, CRC(1f4928f4) SHA1(9949ab96644984fab8037224f52ec28d7d7cc967))
+ ROM_RELOAD(0x300000 + 0x40000, 0x40000)
+ ROM_RELOAD(0x300000 + 0x80000, 0x40000)
+ ROM_RELOAD(0x300000 + 0xc0000, 0x40000)
+ ROM_REGION(0x110000, "gfx3", 0)
+ ROM_LOAD("romdef1.c20", 0x00000, 0x40000, CRC(045b21c1) SHA1(134b7eb0f71506d12d9ded24999d530126c558fc))
+ ROM_RELOAD( 0x80000, 0x40000)
+ ROM_LOAD("romdef2.c20", 0x40000, 0x40000, CRC(23c32ee5) SHA1(429b3b069251bb8b681bbc6382ceb6b85125eb79))
+ ROM_RELOAD( 0xc0000, 0x40000)
+ ROM_LOAD("dot03.512", 0x100000, 0x10000, CRC(f8a084bb) SHA1(30eb344ad96b5605693d3a7c703c9ed5c1770ca4))
+ ROM_REGION(0x20000, "cpu3", 0)
+ ROM_COPY("gfx3",0x108000,0x0000,0x8000)
+ROM_END
+
/*-------------------------------------------------------------------
/ Dinosaur Eggs
/-------------------------------------------------------------------*/
@@ -243,6 +275,37 @@ ROM_START(pstlpkr)
ROM_RELOAD( 0xc0000, 0x40000)
ROM_END
+ROM_START(pstlpkr1)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u2-ddff.512", 0x0000, 0x10000, CRC(83fa0595) SHA1(d6ebb0e63fd964ccaee3979a7fc13b6adf7b837c))
+ ROM_REGION(0x10000, "cpu2", 0)
+ ROM_LOAD("p_pu102.512", 0x0000, 0x10000, CRC(b8fb806e) SHA1(c2dc19820ea22bbcf5808db2fb4be76a4033d6ea))
+ ROM_REGION(0x400000, "sound1", 0)
+ ROM_LOAD("p_parom0.c20", 0x000000, 0x40000, CRC(99986af2) SHA1(52fa7d2979f7f2d6d65ab6d4f7bbfbed16303991))
+ ROM_RELOAD(0x000000 + 0x40000, 0x40000)
+ ROM_RELOAD(0x000000 + 0x80000, 0x40000)
+ ROM_RELOAD(0x000000 + 0xc0000, 0x40000)
+ ROM_LOAD("p_parom1.c20", 0x100000, 0x40000, CRC(ae2af238) SHA1(221d3a0e3fb1daad261d723e873ef0727b88889e))
+ ROM_RELOAD(0x100000 + 0x40000, 0x40000)
+ ROM_RELOAD(0x100000 + 0x80000, 0x40000)
+ ROM_RELOAD(0x100000 + 0xc0000, 0x40000)
+ ROM_LOAD("p_parom2.c20", 0x200000, 0x40000, CRC(f39560a4) SHA1(cdfdf7b44ff4c3f9f4d39fbd8ecbf141d8568088))
+ ROM_RELOAD(0x200000 + 0x40000, 0x40000)
+ ROM_RELOAD(0x200000 + 0x80000, 0x40000)
+ ROM_RELOAD(0x200000 + 0xc0000, 0x40000)
+ ROM_LOAD("p_parom3.c20", 0x300000, 0x40000, CRC(19d5e4de) SHA1(fb59166ebf992e81b92a42898e351d8443adb1c3))
+ ROM_RELOAD(0x300000 + 0x40000, 0x40000)
+ ROM_RELOAD(0x300000 + 0x80000, 0x40000)
+ ROM_RELOAD(0x300000 + 0xc0000, 0x40000)
+ ROM_REGION(0x20000, "cpu3", 0)
+ ROM_LOAD("p_peteu4.512", 0x00000, 0x10000, CRC(caa0cabd) SHA1(caff6ca4a9cce4e3d846502696c8838805673261))
+ ROM_REGION(0x100000, "gfx3", 0)
+ ROM_LOAD("p_peteu5.c20", 0x00000, 0x40000, CRC(1d2cecd8) SHA1(6072a0f744fb9eef728fe7cf5e17d0007edbddd7))
+ ROM_RELOAD( 0x80000, 0x40000)
+ ROM_LOAD("p_peteu6.c20", 0x40000, 0x40000, CRC(3a56376c) SHA1(69febc17b8416c03a58e651447bbe1e14ff27e50))
+ ROM_RELOAD( 0xc0000, 0x40000)
+ROM_END
+
/*-------------------------------------------------------------------
/ Punchy The Clown
/-------------------------------------------------------------------*/
@@ -258,6 +321,18 @@ ROM_START(punchy)
ROM_RELOAD(0x000000 + 0xc0000, 0x40000)
ROM_END
+ROM_START(punchy3)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("epc061.r03", 0x0000, 0x10000, CRC(8e91131c) SHA1(1bf1408e4e512b764048f4847cf8e4b7a0bf824d))
+ ROM_REGION(0x10000, "cpu2", 0)
+ ROM_LOAD("eps061.r02", 0x0000, 0x10000, CRC(cfde1b9a) SHA1(cbf9e67df6a6762843272493c2caa1413f70fb27))
+ ROM_REGION(0x400000, "sound1", 0)
+ ROM_LOAD("eps062.r02", 0x000000, 0x40000, CRC(7462a5cd) SHA1(05141bcc91b1a786444bff7fa8ba2a785dc0d376))
+ ROM_RELOAD(0x000000 + 0x40000, 0x40000)
+ ROM_RELOAD(0x000000 + 0x80000, 0x40000)
+ ROM_RELOAD(0x000000 + 0xc0000, 0x40000)
+ROM_END
+
/*-------------------------------------------------------------------
/ U.S.A. Football
/-------------------------------------------------------------------*/
@@ -276,10 +351,13 @@ ROM_END
GAME(1991, agsoccer, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "A.G. Soccer Ball", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, wrldtour, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Al's Garage Band Goes On A World Tour", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1992, wrldtour2, wrldtour, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Al's Garage Band Goes On A World Tour R02b", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1992, wrldtour2, wrldtour, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Al's Garage Band Goes On A World Tour (R02b)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1992, wrldtour3, wrldtour, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Al's Garage Band Goes On A World Tour (R06a)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, usafootb, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "U.S.A. Football", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1993, mystcast, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Mystery Castle", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1993, mystcasta, mystcast, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Mystery Castle (alternate set)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1993, pstlpkr, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Pistol Poker", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1993, punchy, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Punchy The Clown", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1993, mystcast, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Mystery Castle (R02)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1993, mystcasta, mystcast, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Mystery Castle (R03)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1993, pstlpkr, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Pistol Poker (R02)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1993, pstlpkr1, pstlpkr, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Pistol Poker (R01)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1993, punchy, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Punchy The Clown (R02)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1993, punchy3, punchy, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Punchy The Clown (R03)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, dinoeggs, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Dinosaur Eggs", MACHINE_IS_SKELETON_MECHANICAL)
diff --git a/src/mame/drivers/apf.cpp b/src/mame/drivers/apf.cpp
index 92c8d38892f..70e67d66cfe 100644
--- a/src/mame/drivers/apf.cpp
+++ b/src/mame/drivers/apf.cpp
@@ -145,7 +145,7 @@ private:
READ8_MEMBER( apf_state::videoram_r )
{
- if BIT(m_pad_data, 7) // AG line
+ if (BIT(m_pad_data, 7)) // AG line
{
// Need the cpu and crtc to be locked together for proper graphics
// This is a hack to fix Rocket Patrol and Blackjack
diff --git a/src/mame/drivers/atari_s2.cpp b/src/mame/drivers/atari_s2.cpp
index bafac12ebfb..28504fa74f5 100644
--- a/src/mame/drivers/atari_s2.cpp
+++ b/src/mame/drivers/atari_s2.cpp
@@ -390,10 +390,10 @@ TIMER_DEVICE_CALLBACK_MEMBER( atari_s2_state::timer_s )
m_timer_s[1] = m_sound1; // set to preset value
m_timer_s[2]++;
offs_t offs = (m_timer_s[2] & 31) | ((m_sound0 & 15) << 5);
- if BIT(m_sound0, 6)
+ if (BIT(m_sound0, 6))
m_dac->write_unsigned8(m_p_prom[offs]<< 4);
// noise
- if BIT(m_sound0, 7)
+ if (BIT(m_sound0, 7))
{
bool ab0 = BIT(m_timer_s[3], 0) ^ BIT(m_timer_s[4], 6);
bool ab1 = !BIT(m_timer_s[3], 1);
@@ -418,7 +418,7 @@ WRITE8_MEMBER( atari_s2_state::sound0_w )
{
m_sound0 = data;
offs_t offs = (m_timer_s[2] & 31) | ((m_sound0 & 15) << 5);
- if BIT(m_sound0, 6)
+ if (BIT(m_sound0, 6))
m_dac->write_unsigned8(m_p_prom[offs]<< 4);
}
diff --git a/src/mame/drivers/bcs3.cpp b/src/mame/drivers/bcs3.cpp
index bc38ce59c9a..ab44bf58d47 100644
--- a/src/mame/drivers/bcs3.cpp
+++ b/src/mame/drivers/bcs3.cpp
@@ -105,7 +105,7 @@ READ8_MEMBER( bcs3_state::keyboard_r )
offset ^= 0x3ff;
for (i = 0; i < 10; i++)
- if BIT(offset, i)
+ if (BIT(offset, i))
data |= m_io_keyboard[i]->read();
return data;
diff --git a/src/mame/drivers/bigbord2.cpp b/src/mame/drivers/bigbord2.cpp
index 8c938c3500d..31399b8e252 100644
--- a/src/mame/drivers/bigbord2.cpp
+++ b/src/mame/drivers/bigbord2.cpp
@@ -338,10 +338,10 @@ WRITE8_MEMBER( bigbord2_state::portcc_w )
/* drive select */
m_floppy = nullptr;
- if BIT(data, 7) m_floppy = m_floppy0->get_device();
- if BIT(data, 6) m_floppy = m_floppy1->get_device();
- //if BIT(data, 5) m_floppy = m_floppy2->get_device();
- //if BIT(data, 4) m_floppy = m_floppy3->get_device();
+ if (BIT(data, 7)) m_floppy = m_floppy0->get_device();
+ if (BIT(data, 6)) m_floppy = m_floppy1->get_device();
+ //if (BIT(data, 5)) m_floppy = m_floppy2->get_device();
+ //if (BIT(data, 4)) m_floppy = m_floppy3->get_device();
m_fdc->set_floppy(m_floppy);
@@ -546,11 +546,11 @@ UINT8 bigbord2_state::crt8002(UINT8 ac_ra, UINT8 ac_chr, UINT8 ac_attr, UINT16 a
gfx = 0xff;
if (BIT(ac_attr, 6) & BIT(ac_cnt, 13)) // flash
gfx = 0;
- if BIT(ac_attr, 5) // blank
+ if (BIT(ac_attr, 5)) // blank
gfx = 0;
if (ac_curs && BIT(ac_cnt, 14)) // cursor
gfx ^= 0xff;
- if BIT(ac_attr, 4) // reverse video
+ if (BIT(ac_attr, 4)) // reverse video
gfx ^= 0xff;
return gfx;
}
diff --git a/src/mame/drivers/br8641.cpp b/src/mame/drivers/br8641.cpp
index 1e0197a86f1..1f54962d112 100644
--- a/src/mame/drivers/br8641.cpp
+++ b/src/mame/drivers/br8641.cpp
@@ -124,7 +124,7 @@ READ8_MEMBER( brandt8641_state::port08_r )
UINT8 i, data = 7;
for (i = 0; i < 8; i++)
- if BIT(m_port09, i)
+ if (BIT(m_port09, i))
data &= m_io_keyboard[i]->read();
return data | m_port08;
diff --git a/src/mame/drivers/by17.cpp b/src/mame/drivers/by17.cpp
index 1f9b086df22..ca364187f43 100644
--- a/src/mame/drivers/by17.cpp
+++ b/src/mame/drivers/by17.cpp
@@ -673,25 +673,19 @@ WRITE8_MEMBER( by17_state::u11_a_w )
m_digit = 0;
- if BIT(data, 7)
+ if (BIT(data, 7))
m_digit = 1;
- else
- if BIT(data, 6)
+ else if (BIT(data, 6))
m_digit = 2;
- else
- if BIT(data, 5)
+ else if (BIT(data, 5))
m_digit = 3;
- else
- if BIT(data, 4)
+ else if (BIT(data, 4))
m_digit = 4;
- else
- if BIT(data, 3)
+ else if (BIT(data, 3))
m_digit = 5;
- else
- if BIT(data, 2)
+ else if (BIT(data, 2))
m_digit = 6;
- else
- if (BIT(data, 2) && BIT(data, 3)) // Aftermarket 7th digit strobe for 6 digit games
+ else if (BIT(data, 2) && BIT(data, 3)) // Aftermarket 7th digit strobe for 6 digit games
m_digit = 7;
if ((m_u10_ca2==0) && m_digit)
diff --git a/src/mame/drivers/by35.cpp b/src/mame/drivers/by35.cpp
index 2bbd3366cbf..5a94ab5534f 100644
--- a/src/mame/drivers/by35.cpp
+++ b/src/mame/drivers/by35.cpp
@@ -677,28 +677,21 @@ WRITE8_MEMBER( by35_state::u11_a_w )
m_digit = 0;
- if BIT(data, 7)
+ if (BIT(data, 7))
m_digit = 1;
- else
- if BIT(data, 6)
+ else if (BIT(data, 6))
m_digit = 2;
- else
- if BIT(data, 5)
+ else if (BIT(data, 5))
m_digit = 3;
- else
- if BIT(data, 4)
+ else if (BIT(data, 4))
m_digit = 4;
- else
- if BIT(data, 3)
+ else if (BIT(data, 3))
m_digit = 5;
- else
- if BIT(data, 2)
+ else if (BIT(data, 2))
m_digit = 6;
- else
- if (BIT(data, 2) && BIT(data, 3)) // Aftermarket 7th digit strobe for 6 digit games
+ else if (BIT(data, 2) && BIT(data, 3)) // Aftermarket 7th digit strobe for 6 digit games
m_digit = 7;
- else
- if (BIT(data, 1) && m_7d)
+ else if (BIT(data, 1) && m_7d)
m_digit = 7;
if ((m_u10_ca2==0) && m_digit)
@@ -2058,14 +2051,8 @@ ROM_START(saturn2)
ROM_CONTINUE( 0x5800, 0x0800)
ROM_RELOAD( 0x7000, 0x1000)
ROM_REGION(0x10000, "cpu2", 0)
- ROM_LOAD("spy_u4.532", 0x8000, 0x1000, CRC(a43887d0) SHA1(6bbc55943fa9f0cd97f946767f21652e19d85265))
- ROM_RELOAD(0x9000, 0x1000)
- ROM_RELOAD(0xa000, 0x1000)
- ROM_RELOAD(0xb000, 0x1000)
- ROM_LOAD("spy_u3.532", 0xc000, 0x1000, CRC(95ffc1b8) SHA1(28f058f74abbbee120dca06f7321bcb588bef3c6))
- ROM_RELOAD(0xd000, 0x1000)
- ROM_RELOAD(0xe000, 0x1000)
- ROM_RELOAD(0xf000, 0x1000)
+ ROM_LOAD("sat2_snd.764", 0xc000, 0x2000, CRC(6bf15541) SHA1(dcdd4e8f662818584de9b1ed7ae69d57362ebadb))
+ ROM_RELOAD(0xe000, 0x2000)
ROM_END
/*--------------------------------
diff --git a/src/mame/drivers/c10.cpp b/src/mame/drivers/c10.cpp
index b3826e30986..1a5bb2ee87c 100644
--- a/src/mame/drivers/c10.cpp
+++ b/src/mame/drivers/c10.cpp
@@ -112,7 +112,7 @@ UINT32 c10_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, con
// if ((chr < 0x80) && (framecnt & 0x08))
// chr |= 0x80;
- if BIT(chr, 7) // ignore attribute bytes
+ if (BIT(chr, 7)) // ignore attribute bytes
x--;
else
gfx = m_p_chargen[(chr<<4) | ra ];
diff --git a/src/mame/drivers/c128.cpp b/src/mame/drivers/c128.cpp
index dac683d4ad8..741a2ce6620 100644
--- a/src/mame/drivers/c128.cpp
+++ b/src/mame/drivers/c128.cpp
@@ -202,7 +202,7 @@ UINT8 c128_state::read_memory(address_space &space, offs_t offset, offs_t vma, i
break;
case 2: // CS8563
- if BIT(offset, 0)
+ if (BIT(offset, 0))
{
data = m_vdc->register_r(space, 0);
}
@@ -286,7 +286,7 @@ void c128_state::write_memory(address_space &space, offs_t offset, offs_t vma, U
break;
case 2: // CS8563
- if BIT(offset, 0)
+ if (BIT(offset, 0))
{
m_vdc->register_w(space, 0, data);
}
diff --git a/src/mame/drivers/camplynx.cpp b/src/mame/drivers/camplynx.cpp
index d5647dfbcde..22aa565c06e 100644
--- a/src/mame/drivers/camplynx.cpp
+++ b/src/mame/drivers/camplynx.cpp
@@ -315,7 +315,7 @@ d0 = read from bank 4 */
m_wbyte = BITSWAP8(data, 0, 0, 0, 0, 4, 5, 6, 7) & 0x0f; // rearrange to 1,2,3,4
// do reads
UINT8 rbyte = BITSWAP8(data, 0, 0, 0, 0, 0, 1, 2, 3) & 0x0f; // rearrange to 0,1,2,4
- if BIT(rbyte, 1)
+ if (BIT(rbyte, 1))
rbyte &= 0x07; // remove 4 if 1 selected (AND gate in IC82)
//printf("%s:%X:%X:%X\n", machine().describe_context(), data, rbyte, m_wbyte);
switch (rbyte)
@@ -569,7 +569,7 @@ INPUT_CHANGED_MEMBER( camplynx_state::brk_key )
WRITE8_MEMBER( camplynx_state::bank1_w )
{
- if BIT(m_wbyte, 0)
+ if (BIT(m_wbyte, 0))
m_p_ram[offset+0x10000] = data;
if ((m_wbyte & 0x22) == 0x02)
m_p_ram[offset+0x20000] = data;
@@ -581,7 +581,7 @@ WRITE8_MEMBER( camplynx_state::bank1_w )
WRITE8_MEMBER( camplynx_state::bank6_w )
{
- if BIT(m_wbyte, 0)
+ if (BIT(m_wbyte, 0))
m_p_ram[offset+0x10000] = data;
offset &= 0x5fff;
@@ -607,7 +607,7 @@ READ8_MEMBER( camplynx_state::port80_r )
{
UINT8 data = ioport("LINE0")->read();
// when reading tape, bit 0 becomes cass-in signal
- if BIT(m_port80, 1)
+ if (BIT(m_port80, 1))
{
data &= 0xfe;
data |= (m_cass->input() > +0.02) ? 0 : 1;
@@ -640,7 +640,7 @@ WRITE8_MEMBER( camplynx_state::port80_w )
WRITE8_MEMBER( camplynx_state::port84_w )
{
- if BIT(m_port80, (m_is_128k) ? 3 : 1) // for 128k, bit 2 might be ok too
+ if (BIT(m_port80, (m_is_128k) ? 3 : 1)) // for 128k, bit 2 might be ok too
{
// Sine wave output
//float t = (float)(unsigned)data - 32.0f;
@@ -690,7 +690,7 @@ MC6845_UPDATE_ROW( camplynx_state::lynx48k_update_row )
UINT16 mem = ((ma << 2) + (ra << 5)) & 0x1fff;
// determine green bank
- if BIT(m_port80, 4)
+ if (BIT(m_port80, 4))
green_bank = 0x38000+mem; // alt green
else
green_bank = 0x3c000+mem; // normal green
@@ -718,7 +718,7 @@ MC6845_UPDATE_ROW( camplynx_state::lynx128k_update_row )
UINT32 green_bank, *p = &bitmap.pix32(y);
UINT16 mem = ((ma << 2) + (ra << 6)) & 0x3fff;
// determine green bank
- if BIT(m_port80, 4)
+ if (BIT(m_port80, 4))
green_bank = 0x2c000+mem; // alt green
else
green_bank = 0x28000+mem; // normal green
diff --git a/src/mame/drivers/capcom.cpp b/src/mame/drivers/capcom.cpp
index 04c06f3f3f1..182a071247b 100644
--- a/src/mame/drivers/capcom.cpp
+++ b/src/mame/drivers/capcom.cpp
@@ -136,6 +136,20 @@ ROM_START(bsv103)
ROM_FILL( 0x300000, 0x100000,0xff)
ROM_END
+ROM_START(bsv102)
+ ROM_REGION16_BE(0x00100000, "user1",0)
+ ROM_LOAD16_BYTE("u1l_v12.bin", 0x000001, 0x80000, CRC(3e61a32b) SHA1(7708f2c65eea44a872432581ad6ced16e3bbf9f9))
+ ROM_LOAD16_BYTE("u1h_v12.bin", 0x000000, 0x80000, CRC(2bfeb237) SHA1(87097d102beff2816cb61d58811dcdf9c04bc18e))
+ ROM_REGION(0x00100000, "maincpu", ROMREGION_ERASEFF)
+ ROM_REGION(0x20000, "cpu2", 0)
+ ROM_LOAD("u24_v11.bin", 0x0000, 0x2000, CRC(d46212f4) SHA1(50f1279d995b597c468805b323e0252800b28274))
+ ROM_REGION(0x400000, "sound1", 0)
+ ROM_LOAD("u28_v11.bin", 0 , 0x80000, CRC(b076ad2e) SHA1(1be8e3bda2890545253f6f7e4825d2db1d925255))
+ ROM_LOAD("u29_v11.bin", 0x100000, 0x20000, CRC(b251a27c) SHA1(bc30791cb9b5497c11f1cff06c89a729a07b5d4a))
+ ROM_FILL( 0x200000, 0x100000,0xff)
+ ROM_FILL( 0x300000, 0x100000,0xff)
+ROM_END
+
ROM_START(bsv100r)
ROM_REGION16_BE(0x00100000, "user1",0)
ROM_LOAD16_BYTE("u1l_v10i.bin", 0x000001, 0x80000, CRC(304b4da8) SHA1(2643f304adce3543b792bd2d0ec8abe8d9a5478c))
@@ -302,7 +316,8 @@ GAME(1996, abv106, 0, capcom, capcom, capcom_state, capcom, ROT0,
GAME(1996, abv106r, abv106, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Airborne (Redemption)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1996, bbb109, 0, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Big Bang Bar (Beta 1.9 US)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1996, bbb108, bbb109, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Big Bang Bar (Beta 1.8 US)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1996, bsv103, 0, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Breakshot", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1996, bsv103, 0, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Breakshot (1.3)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1996, bsv102, bsv103, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Breakshot (1.2)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1996, bsv100r, bsv103, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Breakshot (Redemption 1.0)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1996, bsv102r, bsv103, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Breakshot (Redemption 1.2)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1996, bsb105, bsv103, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Breakshot (Beta)", MACHINE_IS_SKELETON_MECHANICAL)
diff --git a/src/mame/drivers/cave.cpp b/src/mame/drivers/cave.cpp
index c22b7b48539..41a308110bf 100644
--- a/src/mame/drivers/cave.cpp
+++ b/src/mame/drivers/cave.cpp
@@ -2596,10 +2596,24 @@ static MACHINE_CONFIG_START( pwrinst2, cave_state )
MACHINE_CONFIG_END
+
+
/***************************************************************************
Sailor Moon / Air Gallet
***************************************************************************/
+TIMER_DEVICE_CALLBACK_MEMBER( cave_state::sailormn_startup )
+{
+ m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
+}
+
+MACHINE_RESET_MEMBER(cave_state,sailormn)
+{
+ timer_device *startup = machine().device("startup");
+ startup->adjust(attotime::from_usec(1000), 0, attotime::zero);
+ MACHINE_RESET_CALL_MEMBER(cave);
+}
+
static MACHINE_CONFIG_START( sailormn, cave_state )
/* basic machine hardware */
@@ -2607,6 +2621,9 @@ static MACHINE_CONFIG_START( sailormn, cave_state )
MCFG_CPU_PROGRAM_MAP(sailormn_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cave_state, cave_interrupt)
+ // could be a wachdog, but if it is then our watchdog address is incorrect as there are periods where the game doesn't write it.
+ MCFG_TIMER_DRIVER_ADD("startup", cave_state, sailormn_startup)
+
MCFG_CPU_ADD("audiocpu", Z80, XTAL_8MHz) // Bidirectional Communication
MCFG_CPU_PROGRAM_MAP(sailormn_sound_map)
MCFG_CPU_IO_MAP(sailormn_sound_portmap)
@@ -2614,7 +2631,7 @@ static MACHINE_CONFIG_START( sailormn, cave_state )
// MCFG_QUANTUM_TIME(attotime::from_hz(600))
MCFG_MACHINE_START_OVERRIDE(cave_state,cave)
- MCFG_MACHINE_RESET_OVERRIDE(cave_state,cave)
+ MCFG_MACHINE_RESET_OVERRIDE(cave_state,sailormn)
MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
MCFG_TIMER_DRIVER_ADD("int_timer", cave_state, cave_vblank_start)
@@ -2649,6 +2666,8 @@ static MACHINE_CONFIG_START( sailormn, cave_state )
MCFG_OKIM6295_ADD("oki2", 2112000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_DEVICE_ADDRESS_MAP(AS_0, oki2_map)
+
+
MACHINE_CONFIG_END
@@ -2849,12 +2868,7 @@ BP962A.U77 23C16000 GFX
***************************************************************************/
-
-
-#define ROMS_AGALLET \
- ROM_REGION( 0x400000, "maincpu", 0 ) \
- ROM_LOAD16_WORD_SWAP( "bp962a.u45", 0x000000, 0x080000, CRC(24815046) SHA1(f5eeae60b923ae850b335e7898a2760407631d8b) ) \
- \
+#define ROMS_AGALLET_COMMON \
ROM_REGION( 0x80000, "audiocpu", 0 ) \
ROM_LOAD( "bp962a.u9", 0x00000, 0x80000, CRC(06caddbe) SHA1(6a3cc50558ba19a31b21b7f3ec6c6e2846244ff1) ) \
\
@@ -2881,6 +2895,14 @@ BP962A.U77 23C16000 GFX
\
ROM_REGION( 0x200000, "oki2", 0 ) \
ROM_LOAD( "bp962a.u47", 0x000000, 0x200000, CRC(6d4e9737) SHA1(81c7ecdfc2d38d0b35e26745866f6672f566f936) )
+
+
+// these roms were dumped from a board set to Taiwanese region.
+#define ROMS_AGALLET \
+ ROM_REGION( 0x400000, "maincpu", 0 ) \
+ ROM_LOAD16_WORD_SWAP( "bp962a.u45", 0x000000, 0x080000, CRC(24815046) SHA1(f5eeae60b923ae850b335e7898a2760407631d8b) ) \
+ ROMS_AGALLET_COMMON
+
/* the regions differ only in the EEPROM, hence the macro above - all EEPROMs are Factory Defaulted */
ROM_START( agallet )
ROMS_AGALLET
@@ -2924,6 +2946,55 @@ ROM_START( agalleth )
ROM_LOAD16_WORD( "agallet_hongkong.nv", 0x0000, 0x0080, CRC(998d1a74) SHA1(13e7e27a18417949d49e97d521781fc0feeef792) )
ROM_END
+// these roms were dumped from a board set to the Japanese region.
+#define ROMS_AGALLETA \
+ ROM_REGION( 0x400000, "maincpu", 0 ) \
+ ROM_LOAD16_WORD_SWAP( "u45", 0x000000, 0x080000, CRC(2cab18b0) SHA1(5e779b74d8520cb482697b5efba4746854e7c9fe) ) \
+ ROMS_AGALLET_COMMON
+
+/* the regions differ only in the EEPROM, hence the macro above - all EEPROMs are Factory Defaulted */
+ROM_START( agalleta )
+ ROMS_AGALLETA
+
+ ROM_REGION16_BE( 0x80, "eeprom", 0 )
+ ROM_LOAD16_WORD( "agallet_europe.nv", 0x0000, 0x0080, CRC(ec38bf65) SHA1(cb8d9eacc0cf55a0c6b187e6673e3354554314b5) )
+ROM_END
+
+ROM_START( agalletau )
+ ROMS_AGALLETA
+
+ ROM_REGION16_BE( 0x80, "eeprom", 0 )
+ ROM_LOAD16_WORD( "agallet_usa.nv", 0x0000, 0x0080, CRC(72e65056) SHA1(abf1a86df01064d9d5d8c418e8367817319ec335) )
+ROM_END
+
+ROM_START( agalletaj ) // the dumped board was this region
+ ROMS_AGALLETA
+
+ ROM_REGION16_BE( 0x80, "eeprom", 0 )
+ ROM_LOAD16_WORD( "agallet_japan.nv", 0x0000, 0x0080, CRC(0753f547) SHA1(aabb987470406b8729894108bc4d050f7200917d) )
+ROM_END
+
+ROM_START( agalletak )
+ ROMS_AGALLETA
+
+ ROM_REGION16_BE( 0x80, "eeprom", 0 )
+ ROM_LOAD16_WORD( "agallet_korea.nv", 0x0000, 0x0080, CRC(7f41c253) SHA1(50793d4da0ad6eb590941d26a729a1cf4b3c25c2) )
+ROM_END
+
+ROM_START( agalletat )
+ ROMS_AGALLETA
+
+ ROM_REGION16_BE( 0x80, "eeprom", 0 )
+ ROM_LOAD16_WORD( "agallet_taiwan.nv", 0x0000, 0x0080, CRC(0af46742) SHA1(37b704c4c573b2aabd6f016e9e8dd458f95148f7) )
+ROM_END
+
+ROM_START( agalletah )
+ ROMS_AGALLETA
+
+ ROM_REGION16_BE( 0x80, "eeprom", 0 )
+ ROM_LOAD16_WORD( "agallet_hongkong.nv", 0x0000, 0x0080, CRC(998d1a74) SHA1(13e7e27a18417949d49e97d521781fc0feeef792) )
+ROM_END
+
/***************************************************************************
Fever SOS (International) / Dangun Feveron (Japan)
@@ -5032,6 +5103,15 @@ GAME( 1996, agalletj, agallet, sailormn, cave, cave_state, agallet, ROT2
GAME( 1996, agalletk, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Air Gallet (Korea)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, agallett, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Air Gallet (Taiwan)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, agalleth, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Air Gallet (Hong Kong)", MACHINE_SUPPORTS_SAVE )
+// this set appears to be older, there is some kind of reset circuit / watchdog circuit check on startup, the same check exists in the above set but the code skips over it so presumably it was removed
+// to avoid boards simply hanging on a black screen if the circuit didn't fire.
+GAME( 1996, agalleta, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Air Gallet (older, Europe)", MACHINE_SUPPORTS_SAVE )
+GAME( 1996, agalletau, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Air Gallet (older, USA)", MACHINE_SUPPORTS_SAVE )
+GAME( 1996, agalletaj, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Akuu Gallet (older, Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1996, agalletak, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Air Gallet (older, Korea)", MACHINE_SUPPORTS_SAVE )
+GAME( 1996, agalletat, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Air Gallet (older, Taiwan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1996, agalletah, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Air Gallet (older, Hong Kong)", MACHINE_SUPPORTS_SAVE )
+
GAME( 1996, hotdogst, 0, hotdogst, cave, cave_state, hotdogst, ROT90, "Marble", "Hotdog Storm (International)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/chihiro.cpp b/src/mame/drivers/chihiro.cpp
index 3632cd95872..36ee05ac6fa 100644
--- a/src/mame/drivers/chihiro.cpp
+++ b/src/mame/drivers/chihiro.cpp
@@ -13,9 +13,11 @@ Games on this system include....
|*| 20030224 | Crazy Taxi High Roller (Rev B) | Sega / Hitmaker | GDROM | GDX-0002B | 317-0353-COM |
| | 2003 | Virtua Cop 3 | Sega | GDROM | GDX-0003 | 317-0354-COM |
|*| 20030226 | Virtua Cop 3 (Rev A) | Sega | GDROM | GDX-0003A | 317-0354-COM |
+| | 20030226 | Virtua Cop 3 (Rev A) | Sega | CF | MDA-G0010 | 317-0354-COM |
|*| 20030521 | Virtua Cop 3 (Rev B) | Sega | GDROM | GDX-0003B | 317-0354-COM |
| | 2003 | OutRun 2 | Sega | GDROM | GDX-0004 | 317-0372-COM |
|*| 200312 | OutRun 2 (Rev A) | Sega | GDROM | GDX-0004A | 317-0372-COM |
+| | 200312 | OutRun 2 (Rev A) | Sega | CF | MDA-G0011 | 317-0372-COM |
| | 2003 | OutRun 2 prototype (Rev P) | Sega | GDROM | GDX-0004P | |
| | 2004 | Sega Golf Club Network Pro Tour | Sega | GDROM | GDX-0005 | |
| | 2004 | Sega Network Taisen Mahjong MJ 2 | Sega | GDROM | GDX-0006 | 317-0374-JPN |
@@ -33,12 +35,15 @@ Games on this system include....
| | 2004 | Wangan Midnight Maximum Tune (Export) | Namco | GDROM | GDX-0009 | 317-5101-COM |
| | 2004 | Wangan Midnight Maximum Tune (Export) (Rev A) | Namco | GDROM | GDX-0009A | 317-5101-COM |
|*| 2004 | Wangan Midnight Maximum Tune (Export) (Rev B) | Namco | GDROM | GDX-0009B | 317-5101-COM |
-| | 2004 | OutRun 2 SP (Japan) | Sega | GDROM | GDX-0011 | |
+| | 2004 | OutRun 2 Special Tours (Japan) | Sega | GDROM | GDX-0011 | 317-0396-COM |
+|*| 2004 | OutRun 2 Special Tours (Rev A) (Japan) | Sega | GDROM | GDX-0011A | 317-0396-COM |
|*| 2004 | Ghost Squad | Sega | GDROM | GDX-0012 | 317-0398-COM |
|*| 2004 | Ghost Squad (Rev A) | Sega | GDROM | GDX-0012A | 317-0398-COM |
+| | 2004 | Ghost Squad (Rev A) | Sega | CF | MDA-G0013 | 317-0398-COM |
|*| 2005 | Gundam Battle Operating Simulator | Banpresto | GDROM | GDX-0013 | 317-0400-JPN |
-| | 2004 | OutRun 2 Special Tours | Sega | GDROM | GDX-0014 | 317-0xxx-COM |
-|*| 2004 | OutRun 2 Special Tours (Rev A) | Sega | GDROM | GDX-0014A | 317-0xxx-COM |
+| | 2004 | OutRun 2 Special Tours | Sega | GDROM | GDX-0014 | 317-0396-COM |
+|*| 2004 | OutRun 2 Special Tours (Rev A) | Sega | GDROM | GDX-0014A | 317-0396-COM |
+| | 2004 | OutRun 2 Special Tours (Rev A) | Sega | CF | MDA-G0012 | 317-0396-COM |
|*| 2005 | Wangan Midnight Maximum Tune 2 (Japan) | Namco | GDROM | GDX-0015 | 317-5106-JPN |
| | 2005 | Wangan Midnight Maximum Tune 2 (Export) | Namco | GDROM | GDX-0016 | 317-5106-COM |
|*| 2005 | Wangan Midnight Maximum Tune 2 (Export) (Rev A) | Namco | GDROM | GDX-0016A | 317-5106-COM |
@@ -1811,6 +1816,18 @@ ROM_START( ollie )
ROM_LOAD("317-0377-com.data", 0x00, 0x50, CRC(d2a8b31f) SHA1(e9ee2df30031826db6bc4bd91969e6680255dcf9) )
ROM_END
+ROM_START( wangmidj )
+ CHIHIRO_BIOS
+
+ DISK_REGION( "gdrom" )
+ DISK_IMAGE_READONLY( "gdx-0008b", 0, SHA1(ddf8bde014fee2f0a8a320e4ce19a1729b487e48) )
+
+ ROM_REGION( 0x50, "pic", ROMREGION_ERASE)
+ //PIC16C621A (317-5101-COM)
+ //(sticker 253-5509-5101)
+ ROM_LOAD("317-5101-com.data", 0x00, 0x50, CRC(3af801f3) SHA1(e9a2558930f3f1f55d5b3c2cadad69329d931f26) )
+ROM_END
+
ROM_START( wangmid )
CHIHIRO_BIOS
@@ -1829,6 +1846,16 @@ ROM_START( wangmid )
ROM_LOAD("crp1231lr10_ver0110.ic2", 0, 0x20000, CRC(0d30707c) SHA1(425e25c6203d0b400d12391916db3f7cdad00f7a) ) // H8/3003 code
ROM_END
+ROM_START( outr2stj )
+ CHIHIRO_BIOS
+
+ DISK_REGION( "gdrom" )
+ DISK_IMAGE_READONLY( "gdx-0011a", 0, SHA1(097c0c746f3bd2b926a7a9a03f868d99b8f77b09) )
+
+ ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
+ ROM_LOAD( "317-0396-com.pic", 0x000000, 0x004000, CRC(f94cf26f) SHA1(dd4af2b52935c7b2d8cd196ec1a30c0ef0993322) )
+ROM_END
+
ROM_START( ghostsqo )
CHIHIRO_BIOS
@@ -1881,8 +1908,8 @@ ROM_START( outr2st )
DISK_REGION( "gdrom" )
DISK_IMAGE_READONLY( "gdx-0014a", 0, BAD_DUMP SHA1(4f9656634c47631f63eab554a13d19b15558217e) )
- ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) // number was not readable on pic, please fix if known
- ROM_LOAD( "317-0xxx-com.pic", 0x000000, 0x004000, CRC(f94cf26f) SHA1(dd4af2b52935c7b2d8cd196ec1a30c0ef0993322) )
+ ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
+ ROM_LOAD( "317-0396-com.pic", 0x000000, 0x004000, CRC(f94cf26f) SHA1(dd4af2b52935c7b2d8cd196ec1a30c0ef0993322) )
ROM_END
ROM_START( wangmid2j )
@@ -2070,21 +2097,22 @@ ROM_END
/* 0006F */ GAME( 2004, mj2f, mj2, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 2 (Rev F) (GDX-0006F)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
/* 0006G */ GAME( 2004, mj2, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 2 (Rev G) (GDX-0006G)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
/* 0007 */ GAME( 2004, ollie, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega / Amusement Vision", "Ollie King (GDX-0007)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
-// 0008 GAME( 2004, wangmidjo,wangmidj, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Japan) (GDX-0008)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
-// 0008A GAME( 2004, wangmidja,wangmidj, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Japan) (Rev A) (GDX-0008A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
-// 0008B GAME( 2004, wangmidj, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Japan) (Rev B) (GDX-0008B)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
+// 0008 GAME( 2004, wangmidjo,wangmid, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Japan) (GDX-0008)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
+// 0008A GAME( 2004, wangmidja,wangmid, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Japan) (Rev A) (GDX-0008A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
+/* 0008B */ GAME( 2004, wangmidj, wangmid, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Japan) (Rev B) (GDX-0008B)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
// 0009 GAME( 2004, wangmido, wangmid, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Export) (GDX-0009)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
// 0009A GAME( 2004, wangmida, wangmid, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Export) (Rev A) (GDX-0009A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
/* 0009B */ GAME( 2004, wangmid, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Export) (Rev B) (GDX-0009B)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
// 0010
-// 0011 GAME( 2004, outr2sp, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "OutRun 2 SP (Japan) (GDX-0011)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE )
+// 0011 GAME( 2004, outr2stjo,outr2st, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "OutRun 2 Special Tours (Japan) (GDX-0011)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE )
+/* 0011A */ GAME( 2004, outr2stj, outr2st, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "OutRun 2 Special Tours (Japan) (Rev A) (GDX-0011A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE )
/* 0012 */ GAME( 2004, ghostsqo, ghostsqu, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Ghost Squad (GDX-0012)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
/* 0012A */ GAME( 2004, ghostsqu, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Ghost Squad (Rev A) (GDX-0012A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
/* 0013 */ GAME( 2005, gundamos, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Banpresto", "Gundam Battle Operating Simulator (GDX-0013)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
// 0014 GAME( 2004, outr2sto, outr2st, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "OutRun 2 Special Tours (GDX-0014)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
/* 0014A */ GAME( 2004, outr2st, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "OutRun 2 Special Tours (Rev A) (GDX-0014A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
/* 0015 */ GAME( 2005, wangmid2j,wangmid2, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune 2 (Japan) (GDX-0015)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
-// 0016 GAME( 2005, wangmid2o,wangmid2, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune 2 (Export) (GDX-0016)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
+// 0016 GAME( 2005, wangmid2o,wangmid2, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune 2 (Export) (GDX-0016)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
/* 0016A */ GAME( 2005, wangmid2, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune 2 (Export) (Rev A) (GDX-0016A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
// 0017 GAME( 2005, mj3o, mj3, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 3 (GDX-0017)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
// 0017A GAME( 2005, mj3a, mj3, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 3 (Rev A) (GDX-0017A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/cmi.cpp b/src/mame/drivers/cmi.cpp
new file mode 100644
index 00000000000..3f323d19845
--- /dev/null
+++ b/src/mame/drivers/cmi.cpp
@@ -0,0 +1,2919 @@
+// license:BSD-3-Clause
+// copyright-holders:Phil Bennett
+/***************************************************************************
+
+ Fairlight CMI Series
+
+ driver by Phil Bennett
+
+ Systems supported:
+
+ * CMI IIx
+
+ To do:
+
+ * MASTER 'TIM' test fails
+ * LGTST 'TIM' test is out of tolerance without 6840 hack.
+
+ Information from:
+
+ CMI SYSTEM SERVICE MANUAL
+ FAIRLIGHT INSTRUMENTS, FEBRUARY 1985
+ Revision 2.1
+
+ This document is available on archive.org at the following URL:
+
+ https://archive.org/details/fairlight_CMI-IIx_SERVICE_MANUAL
+
+ Summary:
+
+ The Fairlight CMI system conists typically of:
+ - One velocity-sensitive unweighted keyboard, with a numeric
+ keypad and several control surfaces
+ - (Optionally) one additional keyboard, not velocity-sensitive
+ - One alphanumeric keyboard for manual control
+ - A 15-inch green-screen monitor and light pen for more direct
+ control
+ - A box consisting of:
+ * An audio board including balanced line drivers for eight
+ channels and mixed output
+ * A 500-watt power supply
+ * A 21-slot backplane
+ * Two 8-inch double-density floppy disk drives. The format
+ used is soft-sectored, 128 bytes per sector (single density),
+ or 256 bytes per sector (double density), using FM
+ recording.
+ * And the following cards:
+ Slot 1: Master Card CMI-02
+ Slot 2: General Interface Card CMI-08/28 (Optional)
+ Slots 3-11: 8 Channel Controller Cards & 1 Voice Master Module Card, order unknown
+ Slot 12: 64K System RAM Q-096
+ Slot 13: 256K System RAM Q-256
+ Slot 14: 256K System RAM Q-256
+ Slot 15: 4-Port ACIA Module Q-014 (Optional)
+ Slot 16: Processor Control Module Q-133
+ Slot 17: Central Processor Module Q-209
+ Slot 18: Lightpen/Graphics Interface Q-219
+ Slot 19: Floppy Disk Controller QFC-9
+ Slot 20: Hard Disk Controller Q-077 (Optional)
+
+ The Master Keyboard
+ -------------------
+
+ The master keyboard has the following features:
+ - A serial connector for communicating with the CMI mainframe
+ - A connector for a slave keyboard
+ - A connector for the alphanumeric keyboard
+ - Connectors for pedal controls
+ - Three slider-type analog controls
+ - Two switch controls (one momentary, one toggle on/off)
+ - Two lamp indicators for the switches with software-defined
+ control
+ - A 12-character LED alphanumeric display
+ - A 16-switch keypad
+
+ All communications with all peripherals and controls on the master
+ keyboard is handled via the master keyboard's controller, and as
+ such there is one single serial link to the "CMI mainframe" box
+ itself.
+
+ Q209 Dual 6809 Central Processor Card
+ -------------------------------------
+
+ The CPU card has two 6809 processors, with robust inter-CPU
+ communications capabilities including:
+ - Uninterruptible instructions
+ - CPU-specific ID register and memory map registers
+ - Interprocessor interrupts
+ - Automatic memory map-switching register
+
+ The CPUs are multiplexed onto the address and data buses
+ in an interleaved manner such that there is no contention
+ on simultaneous memory accesses.
+
+ All system timing is derived from a 40MHz clock crystal, which
+ is divided into two opposite-phase 20MHz squre waves.
+
+ Other data entry from service manual to be completed later - RH 12 Aug 2016
+
+****************************************************************************/
+
+#include "emu.h"
+#include "cpu/m6809/m6809.h"
+#include "cpu/m6800/m6800.h"
+#include "cpu/m68000/m68000.h"
+
+#include "machine/msm5832.h"
+#include "machine/6821pia.h"
+#include "machine/6840ptm.h"
+#include "machine/6850acia.h"
+#include "machine/i8214.h"
+#include "machine/wd_fdc.h"
+#include "video/dl1416.h"
+
+#define Q209_CPU_CLOCK 4000000 // ?
+
+#define M6809_CLOCK 8000000 // wrong
+#define MASTER_OSCILLATOR 34291712
+
+#define CPU_1 0
+#define CPU_2 1
+
+#define MAPPING_A 1
+#define MAPPING_B 0
+
+#define NUM_Q256_CARDS 1 // Max of 2
+#define NUM_CHANNEL_CARDS 8
+
+#define PAGE_SIZE 2048
+#define PAGE_COUNT (65536 / PAGE_SIZE)
+#define PAGE_MASK (PAGE_SIZE - 1)
+#define PAGE_SHIFT 5
+
+#define PIXEL_CLOCK 10380000 // Add to xtal.h
+#define HTOTAL 672
+#define HBLANK_END 0
+#define HBLANK_START 512
+#define VTOTAL 304
+#define VBLANK_END 0
+#define VBLANK_START 256
+
+#define HBLANK_FREQ ((double)PIXEL_CLOCK / (double)HTOTAL)
+#define VBLANK_FREQ ((double)HBLANK_FREQ / (double)VTOTAL)
+
+#define MAPSEL_P2_B 0x00
+#define MAPSEL_P2_A 0x03
+#define MAPSEL_P2_A_DMA1 0x04
+#define MAPSEL_P2_A_DMA2 0x05
+#define MAPSEL_P2_A_DMA3 0x06
+#define MAPSEL_P2_A_DMA4 0x07
+#define MAPSEL_P1_B 0x08
+#define MAPSEL_P1_A 0x0b
+#define MAPSEL_P1_A_DMA1 0x0c
+#define MAPSEL_P1_A_DMA2 0x0d
+#define MAPSEL_P1_A_DMA3 0x0e
+#define MAPSEL_P1_A_DMA4 0x0f
+
+#define IRQ_ACINT_LEVEL (7 - 0)
+#define IRQ_MIDINT_LEVEL (7 - 0)
+#define IRQ_TIMINT_LEVEL (7 - 1)
+#define IRQ_INTP1_LEVEL (7 - 2)
+#define IRQ_IPI1_LEVEL (7 - 3)
+#define IRQ_SMIDINT_LEVEL (7 - 3)
+#define IRQ_AIC_LEVEL (7 - 4)
+
+#define IRQ_CHINT2_LEVEL (8)
+#define IRQ_CHINT4_LEVEL (9)
+#define IRQ_CHINT6_LEVEL (10)
+#define IRQ_CHINT8_LEVEL (11)
+#define IRQ_CHINT1_LEVEL (12)
+#define IRQ_CHINT3_LEVEL (13)
+#define IRQ_CHINT5_LEVEL (14)
+#define IRQ_CHINT7_LEVEL (15)
+
+static const int ch_int_levels[8] =
+{
+ IRQ_CHINT8_LEVEL, IRQ_CHINT7_LEVEL, IRQ_CHINT6_LEVEL, IRQ_CHINT5_LEVEL, IRQ_CHINT4_LEVEL, IRQ_CHINT3_LEVEL, IRQ_CHINT2_LEVEL, IRQ_CHINT1_LEVEL
+};
+
+#define IRQ_PERRINT_LEVEL (7 - 0)
+#define IRQ_RTCINT_LEVEL (7 - 0)
+#define IRQ_RINT_LEVEL (7 - 1)
+#define IRQ_INTP2_LEVEL (7 - 2)
+#define IRQ_IPI2_LEVEL (7 - 3)
+#define IRQ_TOUCHINT_LEVEL (7 - 4)
+#define IRQ_PENINT_LEVEL (7 - 5)
+#define IRQ_ADINT_LEVEL (7 - 6)
+#define IRQ_DISKINT_LEVEL (7 - 7)
+
+#define FDC_CONTROL_INTEN (1 << 2)
+
+#define FDC_STATUS_READY (1 << 3)
+#define FDC_STATUS_TWO_SIDED (1 << 4)
+#define FDC_STATUS_DISK_CHANGE (1 << 5)
+#define FDC_STATUS_INTERRUPT (1 << 6)
+#define FDC_STATUS_DRIVER_LOAD (1 << 7)
+
+
+#define ENV_DIR_DOWN 0
+#define ENV_DIR_UP 1
+
+#define MCFG_CMI01A_ADD(_tag, _channel) \
+ MCFG_DEVICE_ADD(_tag, CMI01A_CHANNEL_CARD, 0) \
+ cmi01a_device::set_channel_number(*device, _channel);
+
+#define MCFG_CMI01A_CHANNEL_NUMBER(_channel) \
+ cmi01a_device::set_channel_number(*device, _channel);
+
+class cmi01a_device : public device_t, public device_sound_interface {
+public:
+ cmi01a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ cmi01a_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
+
+ static void set_channel_number(device_t &device, int channel) { dynamic_cast(device).m_channel = channel; }
+
+ DECLARE_WRITE8_MEMBER( cmi01a_ptm_c0 );
+
+ DECLARE_WRITE8_MEMBER( write );
+ DECLARE_READ8_MEMBER( read );
+
+ DECLARE_WRITE_LINE_MEMBER( cmi01a_1_ca2_w );
+ DECLARE_WRITE_LINE_MEMBER( ch_int );
+ DECLARE_WRITE_LINE_MEMBER( cmi01a_1_cb2_w );
+
+ DECLARE_READ_LINE_MEMBER( eosi_r );
+ DECLARE_READ_LINE_MEMBER( zx_r );
+
+ DECLARE_WRITE8_MEMBER( cmi01a_2_a_w );
+ DECLARE_WRITE8_MEMBER( cmi01a_2_b_w );
+
+ virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ machine_config_constructor device_mconfig_additions() const override;
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+ static const device_timer_id TIMER_ZX = 0;
+
+ required_device m_pia_0;
+ required_device m_pia_1;
+ required_device m_ptm;
+
+ required_device m_cmi02_pia_0;
+ required_device m_cmi02_pia_1;
+
+ sound_stream* m_stream;
+
+private:
+ void zx_timer_cb();
+ void run_voice();
+ void update_wave_addr(int inc);
+
+ emu_timer * m_zx_timer;
+ UINT8 m_zx_flag;
+ UINT8 m_zx_ff;
+
+ int m_channel;
+ std::unique_ptr m_wave_ram;
+ UINT16 m_segment_cnt;
+ UINT8 m_new_addr; // Flag
+ UINT8 m_env_dir_ctrl;
+ UINT8 m_vol_latch;
+ UINT8 m_flt_latch;
+
+ double m_freq;
+ bool m_active;
+
+ int m_ptm_output;
+};
+
+const device_type CMI01A_CHANNEL_CARD = &device_creator;
+
+cmi01a_device::cmi01a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, CMI01A_CHANNEL_CARD, "Fairlight CMI-01A Channel Card", tag, owner, clock, "cmi_01a", __FILE__)
+ , device_sound_interface(mconfig, *this)
+ , m_pia_0(*this, "cmi01a_pia_0")
+ , m_pia_1(*this, "cmi01a_pia_1")
+ , m_ptm(*this, "cmi01a_ptm")
+ , m_cmi02_pia_0(*this, "^cmi02_pia_1")
+ , m_cmi02_pia_1(*this, "^cmi02_pia_2")
+ , m_stream(nullptr)
+{
+}
+
+MACHINE_CONFIG_FRAGMENT( cmi01a_device )
+ MCFG_DEVICE_ADD("cmi01a_pia_0", PIA6821, 0) // pia_cmi01a_1_config
+ MCFG_PIA_CA2_HANDLER(WRITELINE(cmi01a_device, cmi01a_1_ca2_w))
+ MCFG_PIA_CB2_HANDLER(WRITELINE(cmi01a_device, cmi01a_1_cb2_w))
+
+ MCFG_DEVICE_ADD("cmi01a_pia_1", PIA6821, 0) // pia_cmi01a_2_config
+ MCFG_PIA_READCA1_HANDLER(READLINE(cmi01a_device, zx_r))
+ MCFG_PIA_READCA2_HANDLER(READLINE(cmi01a_device, eosi_r))
+ MCFG_PIA_WRITEPA_HANDLER(WRITE8(cmi01a_device, cmi01a_2_a_w))
+ MCFG_PIA_WRITEPB_HANDLER(WRITE8(cmi01a_device, cmi01a_2_b_w))
+ MCFG_PIA_IRQA_HANDLER(WRITELINE(cmi01a_device, ch_int))
+ MCFG_PIA_IRQB_HANDLER(WRITELINE(cmi01a_device, ch_int))
+
+ MCFG_DEVICE_ADD("cmi01a_ptm", PTM6840, 0) // ptm_cmi01a_config
+ MCFG_PTM6840_OUT0_CB(WRITE8(cmi01a_device, cmi01a_ptm_c0))
+MACHINE_CONFIG_END
+
+machine_config_constructor cmi01a_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME(cmi01a_device);
+}
+
+void cmi01a_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
+{
+ if (m_active && m_vol_latch)
+ {
+ int length = samples;
+ int seg_addr = m_segment_cnt & 0x7f;
+ UINT8 *wave_ptr = &m_wave_ram[m_segment_cnt & 0x3fff];
+ stream_sample_t *buf = outputs[0];
+
+ while (length--)
+ {
+ *buf++ = wave_ptr[seg_addr];
+ seg_addr = (seg_addr + 1) & 0x7f;
+ }
+
+ m_segment_cnt = (m_segment_cnt & ~0x7f) | seg_addr;
+ }
+ else
+ {
+ memset(outputs[0], 0, samples);
+ }
+}
+
+void cmi01a_device::device_start()
+{
+ m_wave_ram = std::make_unique(0x4000);
+
+ m_zx_timer = timer_alloc(TIMER_ZX);
+ m_zx_timer->adjust(attotime::never);
+
+ m_stream = stream_alloc(0,1,44100);
+}
+
+void cmi01a_device::device_reset()
+{
+ m_ptm->set_g1(1);
+ m_ptm->set_g2(1);
+ m_ptm->set_g3(1);
+}
+
+class cmi_state : public driver_device
+{
+public:
+ cmi_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_maincpu1(*this, "maincpu1")
+ , m_maincpu2(*this, "maincpu2")
+ , m_muskeyscpu(*this, "muskeys")
+ , m_alphakeyscpu(*this, "alphakeys")
+ , m_midicpu(*this, "smptemidi")
+ , m_cmi07cpu(*this, "cmi07cpu")
+ , m_msm5832(*this, "msm5832")
+ , m_i8214_0(*this, "i8214_1")
+ , m_i8214_1(*this, "i8214_2")
+ , m_i8214_2(*this, "i8214_3")
+ , m_q133_pia_0(*this, "q133_pia_1")
+ , m_q133_pia_1(*this, "q133_pia_2")
+ , m_q133_ptm(*this, "q133_ptm")
+ , m_q133_region(*this, "q133")
+ , m_q219_pia(*this, "q219_pia")
+ , m_q219_ptm(*this, "q219_ptm")
+ , m_cmi02_pia_0(*this, "cmi02_pia_1")
+ , m_cmi02_pia_1(*this, "cmi02_pia_2")
+ , m_cmi02_ptm(*this, "cmi02_ptm")
+ , m_ank_pia(*this, "ank_pia")
+ , m_acia_mkbd_kbd(*this, "acia_mkbd_kbd")
+ , m_acia_mkbd_cmi(*this, "acia_mkbd_cmi")
+ , m_cmi07_ptm(*this, "cmi07_ptm")
+ , m_qfc9_region(*this, "qfc9")
+ , m_floppy_0(*this, "wd1791:0:8dsdd")
+ , m_floppy_1(*this, "wd1791:1:8dsdd")
+ , m_wd1791(*this, "wd1791")
+ , m_cmi01a_0(*this, "cmi01a_0")
+ , m_cmi01a_1(*this, "cmi01a_1")
+ , m_cmi01a_2(*this, "cmi01a_2")
+ , m_cmi01a_3(*this, "cmi01a_3")
+ , m_cmi01a_4(*this, "cmi01a_4")
+ , m_cmi01a_5(*this, "cmi01a_5")
+ , m_cmi01a_6(*this, "cmi01a_6")
+ , m_cmi01a_7(*this, "cmi01a_7")
+ , m_cmi10_pia_u20(*this, "cmi10_pia_u20")
+ , m_cmi10_pia_u21(*this, "cmi10_pia_u21")
+ , m_dp1(*this, "dp1")
+ , m_dp2(*this, "dp2")
+ , m_dp3(*this, "dp3")
+ , m_screen(*this, "screen")
+ , m_palette(*this, "palette")
+ , m_ankrow_ports(*this, {"ROW0", "ROW1", "ROW2", "ROW3", "ROW4", "ROW5", "ROW6", "ROW7"})
+ , m_lp_x_port(*this, "LP_X")
+ , m_lp_y_port(*this, "LP_Y")
+ , m_lp_touch_port(*this, "LP_TOUCH")
+ , m_keypad_a_port(*this, "KEYPAD_A")
+ , m_keypad_b_port(*this, "KEYPAD_B")
+ , m_key_mux0_port(*this, {"KEY_0_0", "KEY_1_0", "KEY_2_0"})
+ , m_key_mux1_port(*this, {"KEY_0_1", "KEY_1_1", "KEY_2_1"})
+ , m_key_mux2_port(*this, {"KEY_0_2", "KEY_1_2", "KEY_2_2"})
+ , m_key_mux3_port(*this, {"KEY_0_3", "KEY_1_3", "KEY_2_3"})
+ , m_cmi07_ram(*this, "cmi07_ram")
+ {
+ }
+
+ void set_interrupt(int cpunum, int level, int state);
+
+ virtual void machine_reset() override;
+ virtual void machine_start() override;
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+ static const device_timer_id TIMER_MAP_SWITCH = 0;
+ static const device_timer_id TIMER_HBLANK = 1;
+ static const device_timer_id TIMER_JAM_TIMEOUT = 2;
+ static const device_timer_id TIMER_CMI10_SCND = 3;
+
+ DECLARE_DRIVER_INIT( cmi2x );
+
+ // CPU card
+ DECLARE_READ8_MEMBER( q133_acia_r );
+ DECLARE_WRITE8_MEMBER( q133_acia_w );
+ DECLARE_WRITE8_MEMBER( i8214_cpu1_w );
+ DECLARE_WRITE8_MEMBER( i8214_cpu2_w );
+ DECLARE_WRITE_LINE_MEMBER( i8214_1_int_w );
+ DECLARE_WRITE_LINE_MEMBER( i8214_2_int_w );
+ DECLARE_WRITE_LINE_MEMBER( i8214_3_int_w );
+ DECLARE_WRITE_LINE_MEMBER( i8214_3_enlg );
+ DECLARE_READ8_MEMBER( shared_ram_r );
+ DECLARE_WRITE8_MEMBER( shared_ram_w );
+
+ DECLARE_READ8_MEMBER( q133_1_porta_r );
+ DECLARE_WRITE8_MEMBER( q133_1_porta_w );
+ DECLARE_WRITE8_MEMBER( q133_1_portb_w );
+
+ INTERRUPT_GEN_MEMBER( cmi_iix_vblank );
+ IRQ_CALLBACK_MEMBER( cpu1_interrupt_callback );
+ IRQ_CALLBACK_MEMBER( cpu2_interrupt_callback );
+
+ // Video-related
+ DECLARE_READ8_MEMBER( video_r );
+ DECLARE_READ8_MEMBER( lightpen_r );
+ DECLARE_READ8_MEMBER( pia_q219_b_r );
+ DECLARE_WRITE8_MEMBER( video_w );
+ DECLARE_WRITE8_MEMBER( vscroll_w );
+ DECLARE_WRITE8_MEMBER( video_attr_w );
+ DECLARE_READ8_MEMBER( vram_r );
+ DECLARE_WRITE8_MEMBER( vram_w );
+ DECLARE_WRITE_LINE_MEMBER( pia_q219_irqa );
+ DECLARE_WRITE_LINE_MEMBER( pia_q219_irqb );
+ DECLARE_WRITE_LINE_MEMBER( ptm_q219_irq );
+ UINT32 screen_update_cmi2x(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
+ // Memory mapping
+ DECLARE_READ8_MEMBER( rom_r );
+ DECLARE_WRITE8_MEMBER( map_ram_w );
+ DECLARE_READ8_MEMBER( vector_r );
+ DECLARE_READ8_MEMBER( map_r );
+ DECLARE_WRITE8_MEMBER( map_w );
+ DECLARE_READ8_MEMBER( atomic_r );
+ DECLARE_WRITE8_MEMBER( cpufunc_w );
+ DECLARE_READ8_MEMBER( parity_r );
+ DECLARE_WRITE8_MEMBER( mapsel_w );
+
+ // MIDI/SMPTE
+ DECLARE_WRITE16_MEMBER( midi_dma_w );
+ DECLARE_READ16_MEMBER( midi_dma_r );
+
+ // Floppy
+ DECLARE_WRITE8_MEMBER( fdc_w );
+ DECLARE_READ8_MEMBER( fdc_r );
+ DECLARE_WRITE_LINE_MEMBER( wd1791_irq );
+ DECLARE_WRITE_LINE_MEMBER( wd1791_drq );
+
+ // Master card
+ DECLARE_READ8_MEMBER( cmi02_r );
+ DECLARE_WRITE8_MEMBER( cmi02_w );
+ DECLARE_WRITE8_MEMBER( master_tune_w );
+
+ // Alphanumeric keyboard
+ DECLARE_WRITE_LINE_MEMBER( ank_data_w );
+ DECLARE_READ8_MEMBER( ank_col_r );
+ DECLARE_WRITE_LINE_MEMBER( ank_cts_w );
+ DECLARE_READ_LINE_MEMBER( ank_rts_r );
+
+ // ???
+ DECLARE_READ8_MEMBER( cmi07_r );
+ DECLARE_WRITE8_MEMBER( cmi07_w );
+
+ // Music keyboard/alphanumeric display/keypad
+ DECLARE_WRITE8_MEMBER( cmi10_u20_a_w );
+ DECLARE_WRITE8_MEMBER( cmi10_u20_b_w );
+ DECLARE_READ_LINE_MEMBER( cmi10_u20_cb1_r );
+ DECLARE_WRITE_LINE_MEMBER( cmi10_u20_cb2_w );
+ DECLARE_WRITE_LINE_MEMBER( cmi10_u21_cb2_w );
+ DECLARE_READ8_MEMBER( cmi10_u21_a_r );
+ DECLARE_WRITE16_MEMBER( cmi_iix_update_dp1 );
+ DECLARE_WRITE16_MEMBER( cmi_iix_update_dp2 );
+ DECLARE_WRITE16_MEMBER( cmi_iix_update_dp3 );
+
+ DECLARE_READ_LINE_MEMBER( mkbd_kbd_rx );
+ DECLARE_WRITE_LINE_MEMBER( mkbd_kbd_tx );
+#if 0
+ DECLARE_READ_LINE_MEMBER( q133_rx );
+ DECLARE_WRITE_LINE_MEMBER( q133_tx );
+ DECLARE_WRITE_LINE_MEMBER( mkbd_cmi_w );
+#endif
+ DECLARE_READ_LINE_MEMBER( mkbd_cmi_rx );
+ DECLARE_WRITE_LINE_MEMBER( mkbd_cmi_tx );
+ DECLARE_WRITE_LINE_MEMBER( msm5832_irq );
+ DECLARE_WRITE_LINE_MEMBER( mkbd_acia1_int );
+ DECLARE_WRITE_LINE_MEMBER( mkbd_acia2_int );
+#if 0
+ DECLARE_WRITE_LINE_MEMBER( q133_acia_int );
+#endif
+ DECLARE_WRITE_LINE_MEMBER( cmi07_irq );
+
+protected:
+
+ required_device m_maincpu1;
+ required_device m_maincpu2;
+ required_device m_muskeyscpu;
+ required_device m_alphakeyscpu;
+ required_device m_midicpu;
+ required_device m_cmi07cpu;
+
+ required_device m_msm5832;
+ required_device m_i8214_0;
+ required_device m_i8214_1;
+ required_device m_i8214_2;
+ required_device m_q133_pia_0;
+ required_device m_q133_pia_1;
+ required_device m_q133_ptm;
+ required_memory_region m_q133_region;
+
+ required_device m_q219_pia;
+ required_device m_q219_ptm;
+
+ required_device m_cmi02_pia_0;
+ required_device m_cmi02_pia_1;
+ required_device m_cmi02_ptm;
+
+ required_device m_ank_pia;
+ required_device m_acia_mkbd_kbd;
+ required_device m_acia_mkbd_cmi;
+
+ required_device m_cmi07_ptm;
+
+ required_memory_region m_qfc9_region;
+ required_device m_floppy_0;
+ required_device m_floppy_1;
+ required_device m_wd1791;
+
+ required_device m_cmi01a_0;
+ required_device m_cmi01a_1;
+ required_device m_cmi01a_2;
+ required_device m_cmi01a_3;
+ required_device m_cmi01a_4;
+ required_device m_cmi01a_5;
+ required_device m_cmi01a_6;
+ required_device m_cmi01a_7;
+ cmi01a_device* m_channels[8];
+
+ required_device m_cmi10_pia_u20;
+ required_device m_cmi10_pia_u21;
+ required_device m_dp1;
+ required_device m_dp2;
+ required_device m_dp3;
+
+ required_device m_screen;
+ required_device m_palette;
+
+ required_ioport_array<8> m_ankrow_ports;
+
+ required_ioport m_lp_x_port;
+ required_ioport m_lp_y_port;
+ required_ioport m_lp_touch_port;
+
+ required_ioport m_keypad_a_port;
+ required_ioport m_keypad_b_port;
+
+ required_ioport_array<3> m_key_mux0_port;
+ required_ioport_array<3> m_key_mux1_port;
+ required_ioport_array<3> m_key_mux2_port;
+ required_ioport_array<3> m_key_mux3_port;
+
+ required_shared_ptr m_cmi07_ram;
+
+ address_space *m_cpu1space;
+ address_space *m_cpu2space;
+
+ UINT8 *m_q133_rom;
+ UINT8 m_q133_acia_rx_data;
+// UINT8 m_q133_acia_tx_data;
+ UINT8 m_q133_acia_status;
+ UINT8 m_q133_acia_cmd;
+ UINT8 m_q133_acia_ctrl;
+
+private:
+
+ emu_timer *m_map_switch_timer;
+ emu_timer *m_hblank_timer;
+ emu_timer *m_cmi10_scnd_timer;
+ emu_timer *m_jam_timeout_timer;
+
+ UINT8 m_video_data;
+
+ // Memory
+ bool map_is_active(int cpunum, int map, UINT8 *map_info);
+ void update_address_space(int cpunum, UINT8 mapinfo);
+ void install_video_ram(int cpunum);
+ void install_peripherals(int cpunum);
+
+ // Video
+ void hblank();
+ void update_video_pos(int y, int x, int byte_size);
+ void video_write(int offset);
+
+ // Floppy
+ void dma_fdc_rom();
+ void write_fdc_ctrl(UINT8 data);
+ void fdc_dma_transfer();
+
+ int m_int_state[2];
+ UINT8 m_hp_int;
+ std::unique_ptr m_shared_ram;
+ std::unique_ptr m_scratch_ram[2];
+
+ /* Memory management */
+ UINT8 m_map_sel[16];
+ std::unique_ptr m_map_ram[4];
+ std::unique_ptr m_q256_ram[4];
+ UINT8 m_map_ram_latch;
+ int m_cpu_active_space[2]; // TODO: Make one register
+ int m_cpu_map_switch[2];
+
+ /* Q219 lightpen/graphics card */
+ std::unique_ptr m_video_ram;
+ UINT16 m_x_pos;
+ UINT8 m_y_pos;
+ UINT16 m_lp_x;
+ UINT8 m_lp_y;
+ UINT8 m_q219_b_touch;
+
+ /* QFC9 floppy disk controller card */
+ UINT8 * m_qfc9_region_ptr;
+ int m_fdc_drq;
+ UINT8 m_fdc_addr;
+ UINT8 m_fdc_ctrl;
+ UINT8 m_fdc_status;
+ PAIR m_fdc_dma_addr;
+ PAIR m_fdc_dma_cnt;
+
+ /* CMI-07 */
+ UINT8 m_cmi07_ctrl;
+
+ /* CMI-10 */
+ UINT8 m_scnd;
+
+ /* Musical keyboard */
+ UINT8 m_msm5832_addr;
+ int m_mkbd_acia1_irq;
+ int m_mkbd_acia2_irq;
+ int m_mkbd_tx_start;
+ int m_mkbd_tx_bits;
+ int m_mkbd_tx_reg;
+};
+
+/**************************************
+ *
+ * Video hardware
+ *
+ *************************************/
+
+UINT32 cmi_state::screen_update_cmi2x(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ const pen_t *pen = m_palette->pens();
+ UINT8 y_scroll = m_q219_pia->a_output();
+ UINT8 invert = (!BIT(m_q219_pia->b_output(), 3)) & 1;
+
+ for (int y = cliprect.min_y; y <= cliprect.max_y; ++y)
+ {
+ UINT8 *src = &m_video_ram[(512/8) * ((y + y_scroll) & 0xff)];
+ UINT32 *dest = &bitmap.pix32(y, cliprect.min_x);
+
+ for (int x = cliprect.min_x; x <= cliprect.max_x; x += 8)
+ {
+ UINT8 data = *src++;
+
+ /* Store 8 pixels */
+ for (int i = 0; i < 8; ++i)
+ *dest++ = pen[BIT(data, 7 - i) ^ invert];
+ }
+ }
+
+ /* Get lightpen position */
+ //if (LPCEN && NOT_TOUCHING)
+ if (m_lp_touch_port->read() && BIT(m_q219_pia->b_output(), 1))
+ {
+ /* Invert target pixel */
+ bitmap.pix32(m_lp_y_port->read(), m_lp_x_port->read()) ^= 0x00ffffff;
+ }
+
+
+
+ return 0;
+}
+
+void cmi_state::hblank()
+{
+ int v = m_screen->vpos();
+
+ if (!m_screen->vblank())
+ {
+ int _touch = m_lp_touch_port->read();
+ int _tfh = !BIT(m_q219_pia->b_output(), 2);
+
+ if (v == m_lp_y_port->read())
+ {
+ if (_touch)
+ m_q219_b_touch = 0;
+ else
+ m_q219_b_touch = 1 << 5;
+
+ m_q219_pia->ca1_w(!_touch);
+
+ if (!_touch || !_tfh)
+ {
+ /* Latch the counters */
+ m_lp_x = m_lp_x_port->read();
+ m_lp_y = m_lp_y_port->read();
+
+ /* LPSTB */
+ m_q219_pia->cb1_w(1);
+ }
+ }
+ }
+ /* Adjust for next scanline */
+ if (++v >= VTOTAL)
+ v = 0;
+
+ m_hblank_timer->adjust(m_screen->time_until_pos(v, HBLANK_START));
+
+}
+
+void cmi_state::update_video_pos(int y, int x, int byte_size)
+{
+ UINT8 *video_addr = &m_video_ram[m_y_pos * (512 / 8) + (m_x_pos / 8)];
+
+ if (byte_size)
+ {
+ *video_addr = m_video_data;
+ }
+ else
+ {
+ int bit_mask = 1 << ((7 ^ m_x_pos) & 7);
+
+ *video_addr &= ~bit_mask;
+ *video_addr |= m_video_data & bit_mask;
+ }
+
+ if (y > 0)
+ m_y_pos = (m_y_pos + 1) & 0xff;
+ else if (y < 0)
+ m_y_pos = (m_y_pos - 1) & 0xff;
+
+ if (x > 0)
+ m_x_pos = (m_x_pos + 1) & 0x1ff;
+ else if (x < 0)
+ m_x_pos = (m_x_pos - 1) & 0x1ff;
+}
+
+void cmi_state::video_write(int offset)
+{
+ switch (offset)
+ {
+ case 0x0: update_video_pos( 0, 0, 0); break;
+ case 0x1: update_video_pos( 0, 1, 0); break;
+ case 0x2: update_video_pos( 0, -1, 0); break;
+ case 0x3: update_video_pos( 0, 0, 1); break;
+ case 0x4: update_video_pos( 1, 0, 0); break;
+ case 0x5: update_video_pos( 1, 1, 0); break;
+ case 0x6: update_video_pos( 1, -1, 0); break;
+ case 0x7: update_video_pos( 1, 0, 1); break;
+ case 0x8: update_video_pos(-1, 0, 0); break;
+ case 0x9: update_video_pos(-1, 1, 0); break;
+ case 0xa: update_video_pos(-1, -1, 0); break;
+ case 0xb: update_video_pos(-1, 0, 1); break;
+// default: printf("Video Write %x %x\n", offset, m_video_data);
+ }
+}
+
+READ8_MEMBER( cmi_state::video_r )
+{
+ m_video_data = m_video_ram[m_y_pos * (512 / 8) + (m_x_pos / 8)];
+
+ video_write(offset);
+ return m_video_data;
+}
+
+READ8_MEMBER( cmi_state::lightpen_r )
+{
+ if (offset & 2)
+ return m_lp_y;
+ else
+ return m_lp_x >> 1;
+}
+
+READ8_MEMBER( cmi_state::pia_q219_b_r )
+{
+ return ((m_lp_x << 7) & 0x80) | m_q219_b_touch;
+}
+
+
+WRITE8_MEMBER( cmi_state::video_w )
+{
+ m_video_data = data;
+ video_write(offset);
+}
+
+WRITE8_MEMBER( cmi_state::vscroll_w )
+{
+ // TODO: Partial updates. Also, this should be done through a PIA
+}
+
+WRITE8_MEMBER( cmi_state::video_attr_w )
+{
+ // TODO
+}
+
+WRITE8_MEMBER( cmi_state::vram_w )
+{
+ m_video_ram[offset] = data;
+}
+
+READ8_MEMBER( cmi_state::vram_r )
+{
+ /* Latch the current video position */
+ m_y_pos = (offset >> 6) & 0xff;
+ m_x_pos = (offset & 0x3f) << 3;
+
+ return m_video_ram[offset];
+}
+
+
+
+/* Memory handling */
+
+READ8_MEMBER( cmi_state::rom_r )
+{
+ UINT16 base = (&space == m_cpu2space ? 0x1000 : 0x2000);
+ return *(((UINT8 *)m_q133_region->base()) + base + offset);
+}
+
+WRITE8_MEMBER( cmi_state::map_ram_w )
+{
+ //printf("map_ram_w: %04x = %02x\n", offset, data);
+ if ((offset & 1) == 0)
+ {
+ m_map_ram_latch = data;
+ }
+ else
+ {
+ for (int i = 0; i < NUM_Q256_CARDS; ++i)
+ {
+ UINT8 map_info;
+ int map = (offset >> 6);
+ int page_enable = ((m_map_ram_latch & 0x80) && (i == (m_map_ram_latch & 7))) ? 0x80 : 0;
+
+ m_map_ram[i][offset >> 1] = page_enable | (data & 0x7f);
+
+ /* Determine if this map is in use by either CPU */
+ if (map_is_active(CPU_1, map, &map_info))
+ update_address_space(0, map_info);
+
+ if (map_is_active(CPU_2, map, &map_info))
+ update_address_space(1, map_info);
+ }
+ }
+}
+
+READ8_MEMBER( cmi_state::vector_r )
+{
+ return m_q133_rom[((&space.device() == m_maincpu2) ? 0xbfe : 0xffe) + offset];
+}
+
+READ8_MEMBER( cmi_state::map_r )
+{
+ int cpunum = (&space.device() == m_maincpu1) ? 0 : 1;
+ UINT8 data = (m_cpu_active_space[1] << 2) | (m_cpu_active_space[0] << 1) | cpunum;
+ //printf("map_r %04x = %02x (%d)\n", offset, data, cpunum);
+ return data;
+}
+
+WRITE8_MEMBER( cmi_state::map_w )
+{
+ int cpunum = (&space.device() == m_maincpu1) ? 0 : 1;
+ //printf("map_w %04x = %02x (%d)\n", offset, data, cpunum);
+
+ m_map_switch_timer->adjust(attotime::from_ticks(data & 0xf, M6809_CLOCK), cpunum);
+}
+
+void cmi_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ switch (id)
+ {
+ case TIMER_MAP_SWITCH:
+ {
+ //printf("Timer 0 expired\n");
+ //printf("Map switch timer: CPU %d\n", param);
+ m_cpu_active_space[param] = m_cpu_map_switch[param];
+ UINT8 map_info = (m_cpu_map_switch[param] == MAPPING_A) ?
+ m_map_sel[param ? MAPSEL_P2_A : MAPSEL_P1_A] :
+ m_map_sel[param ? MAPSEL_P2_B : MAPSEL_P1_B];
+ update_address_space(param, map_info);
+ m_map_switch_timer->adjust(attotime::never);
+ break;
+ }
+
+ case TIMER_HBLANK:
+ hblank();
+ break;
+
+ case TIMER_JAM_TIMEOUT:
+ m_maincpu2->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
+ m_jam_timeout_timer->adjust(attotime::never);
+ break;
+
+ case TIMER_CMI10_SCND:
+ m_cmi10_pia_u20->ca1_w(m_scnd);
+ m_scnd ^= 1;
+ m_cmi10_pia_u21->ca1_w(m_scnd);
+ m_map_switch_timer->adjust(attotime::never);
+ break;
+ }
+}
+
+READ8_MEMBER( cmi_state::atomic_r )
+{
+ // TODO
+ //printf("atomic access\n");
+ return 0;
+}
+
+WRITE8_MEMBER( cmi_state::cpufunc_w )
+{
+ int cpunum = data & 1;
+ int idx = data & 6;
+ int bit = (data & 8) >> 3;
+ //printf("cpufunc_w %04x = %02x cpunum:%d idx:%d bit:%d\n", offset, data, cpunum, idx, bit);
+
+ switch (idx)
+ {
+ case 0: set_interrupt(cpunum, IRQ_IPI2_LEVEL, bit ? ASSERT_LINE : CLEAR_LINE);
+ break;
+ case 2: // TODO: Hardware trace
+ break;
+ case 4: m_cpu_map_switch[cpunum] = bit;
+ break;
+ case 6: if (cpunum == CPU_1)
+ m_maincpu1->set_input_line(M6809_FIRQ_LINE, bit ? ASSERT_LINE : CLEAR_LINE);
+ else
+ m_maincpu2->set_input_line(M6809_FIRQ_LINE, bit ? ASSERT_LINE : CLEAR_LINE);
+ break;
+ }
+}
+
+READ8_MEMBER( cmi_state::parity_r )
+{
+ //printf("parity_r %04x\n", offset);
+ // TODO
+ return 0xff;
+}
+
+WRITE8_MEMBER( cmi_state::mapsel_w )
+{
+ //printf("mapsel_w %04x = %02x\n", offset, data);
+ data ^= 0x1f;
+ m_map_sel[offset] = data;
+
+ if ((offset == MAPSEL_P1_A) && (m_cpu_active_space[0] == MAPPING_A))
+ update_address_space(0, data);
+ else if ((offset == MAPSEL_P1_B) && (m_cpu_active_space[0] == MAPPING_B))
+ update_address_space(0, data);
+
+ if ((offset == MAPSEL_P2_A) && (m_cpu_active_space[1] == MAPPING_A))
+ update_address_space(1, data);
+ else if ((offset == MAPSEL_P2_B) && (m_cpu_active_space[1] == MAPPING_B))
+ update_address_space(1, data);
+}
+
+
+
+WRITE16_MEMBER( cmi_state::midi_dma_w )
+{
+ address_space *cmi_space = ((offset & 0x8000) ? m_cpu2space : m_cpu1space);
+ offset &= 0x7fff;
+
+ if (ACCESSING_BITS_0_7)
+ cmi_space->write_byte(offset * 2 + 1, data);
+ if (ACCESSING_BITS_8_15)
+ cmi_space->write_byte(offset * 2, data >> 8);
+}
+
+READ16_MEMBER( cmi_state::midi_dma_r )
+{
+ address_space *cmi_space = ((offset & 0x8000) ? m_cpu2space : m_cpu1space);
+ offset &= 0x7fff;
+ return cmi_space->read_word(offset * 2);
+}
+
+/* The maps are dynamically populated */
+static ADDRESS_MAP_START( maincpu1_map, AS_PROGRAM, 8, cmi_state )
+ AM_RANGE(0xfffe, 0xffff) AM_READ(vector_r)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( maincpu2_map, AS_PROGRAM, 8, cmi_state )
+ AM_RANGE(0xfffe, 0xffff) AM_READ(vector_r)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( muskeys_map, AS_PROGRAM, 8, cmi_state)
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x007f) AM_RAM
+ AM_RANGE(0x0080, 0x0083) AM_DEVREADWRITE("cmi10_pia_u21", pia6821_device, read, write)
+ AM_RANGE(0x0090, 0x0093) AM_DEVREADWRITE("cmi10_pia_u20", pia6821_device, read, write)
+ AM_RANGE(0x00a0, 0x00a0) AM_DEVREADWRITE("acia_mkbd_kbd", acia6850_device, status_r, control_w)
+ AM_RANGE(0x00a1, 0x00a1) AM_DEVREADWRITE("acia_mkbd_kbd", acia6850_device, data_r, data_w)
+ AM_RANGE(0x00b0, 0x00b0) AM_DEVREADWRITE("acia_mkbd_cmi", acia6850_device, status_r, control_w)
+ AM_RANGE(0x00b1, 0x00b1) AM_DEVREADWRITE("acia_mkbd_cmi", acia6850_device, data_r, data_w)
+ AM_RANGE(0x4000, 0x47ff) AM_RAM
+ AM_RANGE(0xb000, 0xb400) AM_ROM
+ AM_RANGE(0xf000, 0xffff) AM_ROM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( alphakeys_map, AS_PROGRAM, 8, cmi_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x007f) AM_RAM
+ AM_RANGE(0x4000, 0x7fff) AM_READ_PORT("ANK_OPTIONS")
+ AM_RANGE(0x8000, 0xbfff) AM_DEVREADWRITE("ank_pia", pia6821_device, read, write)
+ AM_RANGE(0xc000, 0xc3ff) AM_ROM AM_MIRROR(0x3c00)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( midicpu_map, AS_PROGRAM, 16, cmi_state )
+ AM_RANGE(0x000000, 0x003fff) AM_ROM
+ AM_RANGE(0x040000, 0x05ffff) AM_READWRITE(midi_dma_r, midi_dma_w)
+// AM_RANGE(0x060000, 0x06001f) TIMERS
+// AM_RANGE(0x060050, 0x06005f) ACIA
+// AM_RANGE(0x060070, 0x06007f) SMPTE
+ AM_RANGE(0x080000, 0x083fff) AM_RAM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( cmi07cpu_map, AS_PROGRAM, 8, cmi_state )
+ AM_RANGE(0x0000, 0x3fff) AM_NOP // TODO
+ AM_RANGE(0x4000, 0x4fff) AM_NOP // TODO
+ AM_RANGE(0x8000, 0x8fff) AM_DEVREADWRITE("cmi07_ptm", ptm6840_device, read, write)
+ AM_RANGE(0xc000, 0xffff) AM_RAM AM_SHARE("cmi07_ram")
+ADDRESS_MAP_END
+
+/* Input ports */
+static INPUT_PORTS_START( cmi2x )
+ PORT_START("LP_X")
+ PORT_BIT( 0xffff, HBLANK_START/2, IPT_LIGHTGUN_X) PORT_NAME ("Lightpen X") PORT_MINMAX(0, HBLANK_START - 1) PORT_SENSITIVITY(50) PORT_CROSSHAIR(X, 1.0, 0.0, 0)
+
+ PORT_START("LP_Y")
+ PORT_BIT( 0xffff, VBLANK_START/2, IPT_LIGHTGUN_Y) PORT_NAME ("Lightpen Y") PORT_MINMAX(0, VBLANK_START - 1) PORT_SENSITIVITY(50) PORT_CROSSHAIR(Y, 1.0, 0.0, 0)
+
+ PORT_START("LP_TOUCH")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME ( "Lightpen Touch" ) PORT_CODE( MOUSECODE_BUTTON1 )
+
+ /* Alphanumeric keyboard */
+ PORT_START("ANK_OPTIONS")
+ PORT_DIPNAME( 0x07, 0x00, "Speed (baud)" )
+ PORT_DIPSETTING( 0x00, "9600" )
+ PORT_DIPSETTING( 0x01, "4800" )
+ PORT_DIPSETTING( 0x02, "2400" )
+ PORT_DIPSETTING( 0x03, "1200" )
+ PORT_DIPSETTING( 0x04, "600" )
+ PORT_DIPSETTING( 0x05, "300" )
+ PORT_DIPSETTING( 0x06, "150" )
+ PORT_DIPSETTING( 0x07, "110" )
+
+ PORT_DIPNAME( 0x30, 0x20, "Parity" )
+ PORT_DIPSETTING( 0x00, "Even" )
+ PORT_DIPSETTING( 0x10, "None, bit 7 is 0" )
+ PORT_DIPSETTING( 0x20, "Odd" )
+ PORT_DIPSETTING( 0x30, "None, bit 7 is 1" )
+
+ PORT_START("ROW0")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR('+')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(':')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9')
+
+ PORT_START("ROW1")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('T')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('U')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Right")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_NAME("Up")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR('-')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
+
+ PORT_START("ROW2")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('J')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Set")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Add")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',')
+
+ PORT_START("ROW3")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_NAME("LShift")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Down")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Clear")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("WTF")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L')
+
+ PORT_START("ROW4")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('W')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('G')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Home")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('K')
+
+ PORT_START("ROW5")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('F')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Return (a)")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Return (b)")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('P')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('I')
+
+ PORT_START("ROW6")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('D')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('S')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('H')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Sub")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("RShift")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.')
+
+ PORT_START("ROW7")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('S')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('R')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Left")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('O')
+
+ /* Keypad */
+ PORT_START("KEYPAD_A")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD)
+
+ PORT_START("KEYPAD_B")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD)
+
+ /* Master musical keyboard */
+ PORT_START("KEY_0_0")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F0")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F0 #")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G0")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G0 #")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A1")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A1 #")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B1")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C1")
+
+ PORT_START("KEY_0_1")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C1 #")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D1")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D1 #")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E1")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F1")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F1 #")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G1")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G1 #")
+
+ PORT_START("KEY_0_2")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A2")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A2 #")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B2")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C2")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C2 #")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D2")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D2 #")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E2")
+
+ PORT_START("KEY_0_3")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("KEY_1_0")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2 #")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G2")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G2 #")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A3")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A3 #")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B3")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C3")
+
+ PORT_START("KEY_1_1")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C3 #")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D3")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D3 #")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E3")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F3")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G3")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G3 #")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A4")
+
+ PORT_START("KEY_1_2")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A4 #")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B4")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B4 #")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C4")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C4 #")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D4")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D4 #")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E4")
+
+ PORT_START("KEY_1_3")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("KEY_2_0")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F4")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F4 #")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G4")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G4 #")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A5")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A5 #")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B5")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C5")
+
+ PORT_START("KEY_2_1")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C5 #")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D5")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D5 #")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E5")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F5")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F5 #")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G5")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G5 #")
+
+ PORT_START("KEY_2_2")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A6")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A6 #")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B6")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C6")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C6 #")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D6")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D6 #")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E6")
+
+ PORT_START("KEY_2_3")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F6")
+INPUT_PORTS_END
+
+bool cmi_state::map_is_active(int cpunum, int map, UINT8 *map_info)
+{
+ if (m_cpu_active_space[cpunum] == MAPPING_A)
+ {
+ *map_info = m_map_sel[cpunum ? MAPSEL_P2_A : MAPSEL_P1_A];
+
+ if ((*map_info & 0x1f) == map)
+ return 1;
+ }
+ else
+ {
+ *map_info = m_map_sel[cpunum ? MAPSEL_P2_B : MAPSEL_P1_B];
+
+ if ((*map_info & 0x1f) == map)
+ return 1;
+ }
+
+ return 0;
+}
+
+void cmi_state::update_address_space(int cpunum, UINT8 mapinfo)
+{
+ int map = mapinfo & 0x1f;
+ bool vram_en = !BIT(mapinfo, 5);
+ bool periph_en = !BIT(mapinfo, 7);
+ int i;
+
+ address_space *space = (cpunum == 0 ? m_cpu1space : m_cpu2space);
+
+ /* Step through the map RAM assignments */
+ for (int page = 0; page < PAGE_COUNT; ++page)
+ {
+ int address = page * PAGE_SIZE;
+ UINT8 page_info = 0;
+
+ /* Scan through the cards */
+ for (i = 0; i < NUM_Q256_CARDS; ++i)
+ {
+ page_info = m_map_ram[i][(map << PAGE_SHIFT) + page];
+
+ /* Page is enabled in this bank */
+ if (page_info & 0x80)
+ break;
+ }
+
+ if (BIT(m_cmi07_ctrl, 6))
+ {
+ if ((cpunum == 0) || !BIT(m_cmi07_ctrl, 7))
+ {
+ if (m_cmi07_ctrl & 0x30)
+ if ((address & 0xc000) == ((m_cmi07_ctrl & 0x30) << 10))
+ {
+ space->install_ram(address, address + PAGE_SIZE, &m_cmi07_ram[(page * PAGE_SIZE) & 0x3fff]);
+ continue;
+ }
+ }
+ }
+
+ /* No banks had this page enabled - skip */
+ if ((page_info & 0x80) == 0)
+ continue;
+
+ /* If Video RAM is enabled, don't install RAM here */
+ if (vram_en && address >= 0x8000 && address <= 0xbfff)
+ continue;
+
+ /* If peripherals are enabled, don't install RAM here */
+ if (periph_en && address >= 0xf000 && address <= 0xffff) // TODO
+ continue;
+
+ /* Now map the RAM page */
+ space->install_ram(address, address + PAGE_SIZE, &m_q256_ram[i][(page_info & 0x7f) * PAGE_SIZE]);
+ }
+
+ if (vram_en)
+ install_video_ram(cpunum);
+
+ if (periph_en)
+ install_peripherals(cpunum);
+}
+
+WRITE8_MEMBER( cmi_state::cmi07_w )
+{
+ m_cmi07_ctrl = data;
+
+ m_cmi07cpu->set_input_line(INPUT_LINE_RESET, BIT(data, 0) ? CLEAR_LINE : ASSERT_LINE);
+ m_cmi07cpu->set_input_line(M6809_FIRQ_LINE, BIT(data, 1) ? CLEAR_LINE : ASSERT_LINE);
+ m_cmi07cpu->set_input_line(INPUT_LINE_NMI, BIT(data, 2) ? CLEAR_LINE : ASSERT_LINE);
+ m_cmi07cpu->set_input_line(INPUT_LINE_HALT, BIT(data, 3) ? CLEAR_LINE : ASSERT_LINE);
+
+ /* We need to update the address spaces */
+ UINT8 map_info = (m_cpu_active_space[0] == MAPPING_A) ? m_map_sel[MAPSEL_P1_A] : m_map_sel[MAPSEL_P1_B];
+ update_address_space(0, map_info);
+
+ map_info = (m_cpu_active_space[1] == MAPPING_A) ? m_map_sel[MAPSEL_P2_A] : m_map_sel[MAPSEL_P2_B];
+ update_address_space(1, map_info);
+}
+
+READ8_MEMBER( cmi_state::cmi07_r )
+{
+ //printf("CMI 07 R: %x\n", offset);
+ return 0xff;
+}
+
+READ8_MEMBER( cmi_state::q133_acia_r )
+{
+ int acia = (offset >> 2) & 3;
+
+ if (acia != 0)
+ return 0;
+
+ switch (offset & 3)
+ {
+ case 0:
+ /* Clear RDRF */
+ m_q133_acia_status &= ~0x08;
+ set_interrupt(CPU_1, IRQ_ACINT_LEVEL, CLEAR_LINE);
+ return m_q133_acia_rx_data;
+ case 1:
+ m_q133_acia_status &= ~0x80;
+ return m_q133_acia_status | 0x10;
+ case 2: return m_q133_acia_cmd;
+ case 3: return m_q133_acia_ctrl;
+ }
+
+ return 0;
+
+// return m_133_acia->read(0);
+}
+
+WRITE8_MEMBER( cmi_state::q133_acia_w )
+{
+ int acia = (offset >> 2) & 3;
+
+ if (acia != 0)
+ return;
+
+ switch (offset & 3)
+ {
+ case 0: break;//printf("%c\n", data); break; // TODO
+ case 1: break; // Reset
+ case 2: m_q133_acia_cmd = data; break;
+ case 3: m_q133_acia_ctrl = data; break;
+ }
+
+// m_q133_acia->write(offset & 3, data);
+}
+
+WRITE_LINE_MEMBER( cmi_state::ank_data_w )
+{
+}
+
+READ8_MEMBER( cmi_state::ank_col_r )
+{
+ int row = m_ank_pia->b_output() ^ 0xff;
+
+ switch (row)
+ {
+ case 0x01: return m_ankrow_ports[0]->read();
+ case 0x02: return m_ankrow_ports[1]->read();
+ case 0x04: return m_ankrow_ports[2]->read();
+ case 0x08: return m_ankrow_ports[3]->read();
+ case 0x10: return m_ankrow_ports[4]->read();
+ case 0x20: return m_ankrow_ports[5]->read();
+ case 0x40: return m_ankrow_ports[6]->read();
+ case 0x80: return m_ankrow_ports[7]->read();
+ default: return 0xff;
+ }
+}
+
+
+/**************************************
+ *
+ * Floppy disk interface
+ *
+ *************************************/
+
+void cmi_state::dma_fdc_rom()
+{
+ /* DMA channel 1 is used*/
+ UINT8 map_info = m_map_sel[MAPSEL_P2_A_DMA1];
+ int map = map_info & 0x1f;
+ int addr = m_fdc_dma_addr.w.l & ~PAGE_MASK;
+ int page = addr / PAGE_SIZE;
+ UINT8 p_info = 0;
+
+ /* Active low */
+ m_fdc_status &= ~FDC_STATUS_DRIVER_LOAD;
+
+ int i;
+ for (i = 0; i < NUM_Q256_CARDS; ++i)
+ {
+ p_info = m_map_ram[i][(map << PAGE_SHIFT) | page];
+
+ if (p_info & 0x80)
+ break;
+ }
+
+ if ((p_info & 0x80) == 0)
+ {
+ printf("Trying to DMA FDC driver to a non-enabled page!\n");
+ return;
+ }
+
+ /* TODO: This should be stuck in a deferred write */
+ int cnt = std::min(m_fdc_dma_cnt.w.l ^ 0xffff, 2048);
+ //printf("cnt is %d\n", cnt);
+ memcpy(&m_q256_ram[i][(p_info & 0x7f) * PAGE_SIZE], m_qfc9_region_ptr, cnt);
+ m_fdc_status |= FDC_STATUS_DRIVER_LOAD;
+
+ /* TODO: Is this correct? */
+ m_fdc_dma_addr.w.l += 0x800;
+ m_fdc_dma_cnt.w.l = 0;
+}
+
+void cmi_state::write_fdc_ctrl(UINT8 data)
+{
+ int drive = data & 1;
+ int side = BIT(data, 5) ? 1 : 0;
+
+ //printf("write_fdc_ctrl: drive:%d side:%d dd:%d data:%02x\n", drive, side, BIT(data, 7) ? 1 : 0, data);
+ if (drive)
+ {
+ m_floppy_1->ss_w(side);
+ m_wd1791->set_floppy(m_floppy_1);
+ }
+ else
+ {
+ m_floppy_0->ss_w(side);
+ m_wd1791->set_floppy(m_floppy_0);
+ }
+ m_wd1791->dden_w(BIT(data, 7) ? true : false);
+
+ m_fdc_ctrl = data;
+}
+
+WRITE8_MEMBER( cmi_state::fdc_w )
+{
+ //printf("fdc_w: %04x = %02x\n", offset, data); fflush(stdout);
+ if (offset == 0)
+ {
+ switch (m_fdc_addr)
+ {
+ case 0x0: /*printf("write_fdc_ctrl: %02x\n", data);*/ write_fdc_ctrl(data); break;
+ case 0x2: /*printf("fdc_dma_addr : %02x\n", data);*/ m_fdc_dma_addr.b.l = data; break;
+ case 0x4: /*printf("fdc_dma_addr hi: %02x\n", data);*/ m_fdc_dma_addr.b.h = data; break;
+ case 0x6: /*printf("fdc_dma_cnt lo: %02x\n", data);*/ m_fdc_dma_cnt.b.l = data; break;
+ case 0x8: /*printf("fdc_dma_cnt hi: %02x\n", data);*/ m_fdc_dma_cnt.b.h = data; break;
+ case 0xa: /*printf("dma_fdc_rom\n");*/ dma_fdc_rom(); break;
+ case 0xc: /*printf("cmd_w: %02x\n", data);*/ m_wd1791->cmd_w(data ^ 0xff); break;
+ case 0xd: /*printf("track_w: %02x\n", data);*/ m_wd1791->track_w(data ^ 0xff); break;
+ case 0xe: /*printf("sector_w: %02x\n", data);*/ m_wd1791->sector_w(data ^ 0xff); break;
+ case 0xf: /*printf("data_w: %02x\n", data);*/ m_wd1791->data_w(data ^ 0xff); break;
+ default: printf("fdc_w: Invalid access (%x with %x)", m_fdc_addr, data);
+ }
+ }
+ else
+ m_fdc_addr = data;
+}
+
+READ8_MEMBER( cmi_state::fdc_r )
+{
+ if (offset == 0)
+ {
+ switch (m_fdc_addr)
+ {
+ case 0xc: { UINT8 ret = m_wd1791->status_r(); /*printf("status_r: %02x\n", ret);*/ return ret ^ 0xff; }
+ case 0xd: { UINT8 ret = m_wd1791->track_r(); /*printf("track_r: %02x\n", ret);*/ return ret ^ 0xff; }
+ case 0xe: { UINT8 ret = m_wd1791->sector_r(); /*printf("sector_r: %02x\n", ret);*/ return ret ^ 0xff; }
+ case 0xf: { UINT8 ret = m_wd1791->data_r(); /*printf("data_r: %02x\n", ret);*/ return ret ^ 0xff; }
+ default: return 0;
+ }
+ }
+ else
+ return m_fdc_status;
+}
+
+void cmi_state::fdc_dma_transfer()
+{
+ /* DMA channel 1 is used*/
+ UINT8 map_info = m_map_sel[MAPSEL_P2_A_DMA1];
+ int map = map_info & 0x1f;
+
+ /* Transfer from disk to RAM */
+ if (!BIT(m_fdc_ctrl, 4))
+ {
+ //printf("fdc_dma_transfer: Transfer from disk to RAM\n");
+ /* Determine the initial page */
+ int cpu_page = (m_fdc_dma_addr.w.l & ~PAGE_MASK) / PAGE_SIZE;
+ int phys_page = 0;
+
+ //printf("fdc_dma_transfer: m_fdc_dma_addr (RAM addr): %04x\n", m_fdc_dma_addr.w.l);
+
+// printf("FDC DMA: Disk to [%x] (%x bytes)\n", m_fdc_dma_addr.w.l, m_fdc_dma_cnt.w.l ^ 0xffff);
+
+ int i;
+ for (i = 0; i < NUM_Q256_CARDS; ++i)
+ {
+ phys_page = m_map_ram[i][(map << PAGE_SHIFT) | cpu_page];
+
+ if (phys_page & 0x80)
+ break;
+ }
+
+ //phys_page &= 0x7f;
+
+ //printf("fdc_dma_transfer: fdc_dma_cnt is %04x, drq is %d\n", m_fdc_dma_cnt.w.l, m_fdc_drq);
+
+ for (; m_fdc_dma_cnt.w.l < 0xffff && m_fdc_drq; m_fdc_dma_cnt.w.l++)
+ {
+ /* Read a byte at a time */
+ UINT8 data = m_wd1791->data_r() ^ 0xff;
+
+ //printf("fdc_dma_transfer, data %02x\n", data);
+ if (m_cmi07_ctrl & 0x30)
+ if (BIT(m_cmi07_ctrl, 6) && !BIT(m_cmi07_ctrl, 7))
+ {
+ if ((m_fdc_dma_addr.w.l & 0xc000) == ((m_cmi07_ctrl & 0x30) << 10))
+ m_cmi07_ram[m_fdc_dma_addr.w.l & 0x3fff] = data;
+ }
+
+ if (phys_page & 0x80)
+ m_q256_ram[i][((phys_page & 0x7f) * PAGE_SIZE) + (m_fdc_dma_addr.w.l & PAGE_MASK)] = data;
+
+ /* TODO: Is updating these correct? */
+ if (!BIT(m_fdc_ctrl, 3))
+ m_fdc_dma_addr.w.l++;
+
+ if ((m_fdc_dma_addr.w.l % PAGE_SIZE) == 0)
+ {
+ ++cpu_page;
+
+ for (int i = 0; i < NUM_Q256_CARDS; ++i)
+ {
+ phys_page = m_map_ram[i][(map << PAGE_SHIFT) | cpu_page];
+
+ if (phys_page & 0x80)
+ break;
+ }
+ }
+ }
+
+ /* HACK */
+ while (m_fdc_drq)
+ {
+ //printf("fdc_dma_transfer: fdc_drq is still set; emptying wd1791 until it is lowered\n");
+ m_wd1791->data_r();
+ }
+ }
+
+ // Transfer from RAM to disk
+ else
+ {
+ //printf("fdc_dma_transfer: Transfer from RAM to disk\n");
+ /* TODO: Check me and combine common code with the above */
+ /* Determine the initial page */
+ int cpu_page = (m_fdc_dma_addr.w.l & ~PAGE_MASK) / PAGE_SIZE;
+ int phys_page = 0;
+
+ //printf("fdc_dma_transfer: m_fdc_dma_addr (RAM addr): %04x\n", m_fdc_dma_addr.w.l);
+ int i;
+ for (i = 0; i < NUM_Q256_CARDS; ++i)
+ {
+ phys_page = m_map_ram[i][(map << PAGE_SHIFT) | cpu_page];
+
+ if (phys_page & 0x80)
+ break;
+ }
+
+ phys_page &= 0x7f;
+
+ //printf("fdc_dma_transfer: fdc_dma_cnt is %04x, drq is %d\n", m_fdc_dma_cnt.w.l, m_fdc_drq);
+
+ for (; m_fdc_dma_cnt.w.l < 0xffff && m_fdc_drq; m_fdc_dma_cnt.w.l++)
+ {
+ /* Write a byte at a time */
+ UINT8 data = 0;
+
+ /* TODO: This should be stuck in a deferred write */
+ if (phys_page & 0x80)
+ data = m_q256_ram[i][((phys_page & 0x7f) * PAGE_SIZE) + (m_fdc_dma_addr.w.l & PAGE_MASK)];
+
+ //printf("fdc_dma_transfer: writing data %02x to controller\n", data);
+ m_wd1791->data_w(data ^ 0xff);
+
+ /* TODO: Is updating these correct? */
+ if (!BIT(m_fdc_ctrl, 3))
+ m_fdc_dma_addr.w.l++;
+
+ if ((m_fdc_dma_addr.w.l % PAGE_SIZE) == 0)
+ {
+ ++cpu_page;
+
+ for (int i = 0; i < NUM_Q256_CARDS; ++i)
+ {
+ phys_page = m_map_ram[i][(map << PAGE_SHIFT) | cpu_page];
+
+ if (phys_page & 0x80)
+ break;
+ }
+
+ if ((phys_page & 0x80) == 0)
+ {
+ printf("Trying to DMA floppy data from a non-enabled page!\n");
+ return;
+ }
+ }
+ }
+ }
+}
+
+WRITE_LINE_MEMBER( cmi_state::wd1791_irq )
+{
+ if (state)
+ {
+ m_fdc_status |= FDC_STATUS_INTERRUPT;
+
+ if (m_fdc_ctrl & FDC_CONTROL_INTEN)
+ set_interrupt(CPU_2, IRQ_DISKINT_LEVEL, ASSERT_LINE);
+
+ }
+ else
+ {
+ m_fdc_status &= ~FDC_STATUS_INTERRUPT;
+ set_interrupt(CPU_2, IRQ_DISKINT_LEVEL, CLEAR_LINE);
+ }
+}
+
+WRITE_LINE_MEMBER( cmi_state::wd1791_drq )
+{
+ m_fdc_drq = state;
+ //printf("m_fdc_drq: %d\n", state);
+ if (state)
+ fdc_dma_transfer();
+}
+
+
+
+/**************************************
+ *
+ * Master card and channel cards
+ *
+ *************************************/
+
+/*
+0 - 1f
+20 = PIA
+21 = PIA
+22 = PIA
+23 = PIA
+
+24 = ADC
+25 = ADC
+26 = HALT CPU 2
+27 = UNHALT CPU 2
+28 - 2B = PIA
+*/
+
+
+WRITE_LINE_MEMBER( cmi01a_device::cmi01a_1_ca2_w )
+{
+ // upate_stream()
+ if (!state)
+ {
+ m_segment_cnt = 0x4000 | ((m_pia_0->a_output() & 0x7f) << 7);
+ m_new_addr = 1;
+ m_pia_1->cb1_w(1);
+ }
+}
+
+WRITE_LINE_MEMBER( cmi01a_device::ch_int )
+{
+// printf("CH%d INT: %x %x\n", ch, state, m_int_state[0]);
+ dynamic_cast(owner())->set_interrupt(CPU_1, ch_int_levels[m_channel], state ? ASSERT_LINE : CLEAR_LINE);
+}
+
+void cmi01a_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ switch(id)
+ {
+ case TIMER_ZX:
+ zx_timer_cb();
+ break;
+ }
+}
+
+void cmi01a_device::zx_timer_cb()
+{
+ /* Set ZX */
+ if (m_zx_flag == 0)
+ m_pia_1->ca1_w(1);
+ else
+ m_pia_1->ca1_w(0);
+
+ m_zx_flag ^= 1;
+
+ if (m_zx_flag == 0)
+ {
+ /* Low to high transition - clock flip flop */
+ int op = m_ptm_output;
+
+ /* Set /ZCINT */
+ if (op != m_zx_ff)
+ m_pia_0->ca1_w(0);
+
+ m_zx_ff = op;
+ m_pia_0->ca1_w(1);
+ }
+}
+
+void cmi01a_device::run_voice()
+{
+ int val_a = m_pia_1->a_output();
+ int pitch = ((val_a & 3) << 8) | m_pia_1->b_output();
+ int o_val = (val_a >> 2) & 0xf;
+
+ int m_tune = m_cmi02_pia_0->b_output();
+ double mfreq = (double)(0xf00 | m_tune) * ((double)MASTER_OSCILLATOR / 2.0) / 4096.0;
+
+ double cfreq = ((double)(0x800 | (pitch << 1))* mfreq) / 4096.0;
+
+// if (cfreq > 0.0)
+ {
+ /* Octave register enabled? */
+ if (!(o_val & 0x8))
+ cfreq /= 2 << ((7 ^ o_val) & 7);
+
+ cfreq /= 16.0f;
+
+ m_freq = cfreq;
+
+ m_stream->set_sample_rate(cfreq);
+
+ // Set timers and things?
+ attotime zx_period = attotime::from_ticks(64, cfreq);
+ m_zx_timer->adjust(zx_period, 0, zx_period);
+
+ m_active = true;
+ }
+}
+
+WRITE_LINE_MEMBER( cmi01a_device::cmi01a_1_cb2_w )
+{
+ //streams_update();
+
+ /* RUN */
+ if (state)
+ {
+ m_segment_cnt = 0x4000 | ((m_pia_0->a_output() & 0x7f) << 7);
+ m_new_addr = 1;
+
+ /* Clear /EOSI */
+// pia6821_cb1_w(card->pia[1], 0, 1);
+
+ /* Clear ZX */
+ m_pia_1->ca1_w(0);
+
+ /* Clear /ZCINT */
+ m_pia_0->ca1_w(1);
+
+ m_ptm->set_g1(0);
+ m_ptm->set_g2(0);
+ m_ptm->set_g3(0);
+
+ run_voice();
+ }
+ else
+ {
+ /* Clear /EOSI */
+ m_pia_1->cb1_w(1);
+
+ m_ptm->set_g1(1);
+ m_ptm->set_g2(1);
+ m_ptm->set_g3(1);
+
+ //printf("Stop %d\n", m_channel);
+
+ m_zx_timer->adjust(attotime::never);
+ m_active = false;
+ m_zx_flag = 0; // TEST
+ m_zx_ff = 0;
+ }
+
+}
+
+void cmi01a_device::update_wave_addr(int inc)
+{
+ int old_cnt = m_segment_cnt;
+
+ if (inc)
+ ++m_segment_cnt;
+
+ /* Update end of sound interrupt flag */
+ m_pia_1->cb1_w((m_segment_cnt & 0x4000) >> 14);
+
+ /* TODO Update zero crossing flag */
+ m_pia_1->ca1_w((m_segment_cnt & 0x40));
+
+ /* Clock a latch on a transition */
+ if ((old_cnt & 0x40) && !(m_segment_cnt & 0x40))
+ {
+ // TODO: ECLK
+ m_pia_1->ca2_w(1);
+ m_pia_1->ca2_w(0);
+ }
+
+ /* Zero crossing interrupt is a pulse */
+}
+
+WRITE8_MEMBER( cmi01a_device::write )
+{
+ switch (offset)
+ {
+ case 0x0:
+ if (m_new_addr)
+ m_new_addr = 0;
+
+ m_wave_ram[m_segment_cnt & 0x3fff] = data;
+ update_wave_addr(1);
+ break;
+
+ case 0x3:
+ m_env_dir_ctrl = ENV_DIR_DOWN;
+ break;
+
+ case 0x4:
+ m_env_dir_ctrl = ENV_DIR_UP;
+ break;
+
+ case 0x5:
+ m_vol_latch = data;
+ break;
+
+ case 0x6:
+ m_flt_latch = data;
+ break;
+
+ case 0x8: case 0x9: case 0xa: case 0xb:
+ m_pia_0->write(space, offset & 3, data);
+ break;
+
+ case 0xc: case 0xd: case 0xe: case 0xf:
+ m_pia_1->write(space, (BIT(offset, 0) << 1) | BIT(offset, 1), data);
+ break;
+
+ case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17:
+ {
+ /* PTM addressing is a little funky */
+ int a0 = offset & 1;
+ int a1 = (m_ptm_output && BIT(offset, 3)) || (!BIT(offset, 3) && BIT(offset, 2));
+ int a2 = BIT(offset, 1);
+
+ //printf("CH%d PTM: [%x] %x\n", ch, (a2 << 2) | (a1 << 1) | a0, data);
+ m_ptm->write(space, (a2 << 2) | (a1 << 1) | a0, data);
+ break;
+ }
+ }
+}
+
+READ8_MEMBER( cmi01a_device::read )
+{
+ UINT8 data = 0;
+
+ switch (offset)
+ {
+ case 0x0:
+ if (m_new_addr)
+ {
+ m_new_addr = 0;
+ break;
+ }
+ data = m_wave_ram[m_segment_cnt & 0x3fff];
+ update_wave_addr(1);
+ break;
+
+ case 0x3:
+ m_env_dir_ctrl = ENV_DIR_DOWN;
+ break;
+
+ case 0x4:
+ m_env_dir_ctrl = ENV_DIR_UP;
+ break;
+
+ case 0x8: case 0x9: case 0xa: case 0xb:
+ data = m_pia_0->read(space, offset & 3);
+ break;
+
+ case 0xc: case 0xd: case 0xe: case 0xf:
+ data = m_pia_1->read(space, (BIT(offset, 0) << 1) | BIT(offset, 1));
+ break;
+
+ case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17:
+ {
+ int a0 = offset & 1;
+ int a1 = (m_ptm_output && BIT(offset, 3)) || (!BIT(offset, 3) && BIT(offset, 2));
+ int a2 = BIT(offset, 1);
+
+ data = m_ptm->read(space, (a2 << 2) | (a1 << 1) | a0);
+ break;
+ }
+ }
+
+ return data;
+}
+
+WRITE8_MEMBER( cmi01a_device::cmi01a_ptm_c0 )
+{
+ m_ptm_output = data;
+}
+
+READ8_MEMBER( cmi_state::cmi02_r )
+{
+ if (offset <= 0x1f)
+ {
+ int ch_mask = m_cmi02_pia_0->a_output();
+
+ for (int i = 0; i < 8; ++i)
+ {
+ if (ch_mask & (1 << i))
+ return m_channels[i]->read(space, i, offset & 0x1f);
+ }
+
+ return 0xff;
+ }
+ else
+ {
+ switch (offset)
+ {
+ case 0x20: case 0x21: case 0x22: case 0x23:
+ return m_cmi02_pia_0->read(space, offset & 3);
+
+ case 0x26:
+ m_maincpu2->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
+ /* LS123 one-shot with 10n and 150k */
+ m_jam_timeout_timer->adjust(attotime::from_usec(675));
+ return 0xff;
+
+ case 0x27:
+ m_maincpu2->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
+ return 0xff;
+
+ case 0x28: case 0x29: case 0x2a: case 0x2b:
+ return m_cmi02_pia_1->read(space, offset & 3);
+
+ case 0x38: case 0x39: case 0x3a: case 0x3b: case 0x3c: case 0x3d: case 0x3e: case 0x3f:
+ return m_cmi02_ptm->read(space, offset & 7);
+
+ default:
+ logerror("CMI02 R: %x\n", offset);
+ return 0;
+ }
+ }
+}
+
+WRITE8_MEMBER( cmi_state::cmi02_w )
+{
+ if (offset <= 0x1f)
+ {
+ int ch_mask = m_cmi02_pia_0->a_output();
+
+ for (int i = 0; i < 8; ++i)
+ {
+ if (ch_mask & (1 << i))
+ m_channels[i]->write(space, offset & 0x1f, data, 0xff);
+ }
+ }
+ else
+ {
+ switch (offset)
+ {
+ case 0x20: case 0x21: case 0x22: case 0x23:
+ m_cmi02_pia_0->write(space, offset & 3, data);
+ break;
+
+ case 0x28: case 0x29: case 0x2a: case 0x2b:
+ m_cmi02_pia_1->write(space, offset & 3, data);
+ break;
+
+ case 0x30:
+ m_maincpu1->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
+ m_i8214_2->b_w(data & 0x7);
+ m_i8214_2->sgs_w((data >> 3) & 1);
+ break;
+
+ case 0x31: case 0x32:
+ set_interrupt(0, IRQ_INTP1_LEVEL, (offset & 2) ? CLEAR_LINE : ASSERT_LINE);
+ break;
+
+ case 0x33: case 0x34:
+ set_interrupt(1, IRQ_INTP2_LEVEL, (offset & 4) ? CLEAR_LINE : ASSERT_LINE);
+ break;
+
+ case 0x38: case 0x39: case 0x3a: case 0x3b: case 0x3c: case 0x3d: case 0x3e: case 0x3f:
+ m_cmi02_ptm->write(space, offset & 7, data);
+ break;
+
+ default:
+ logerror("CMI02 W: %x %x\n", offset, data);
+ }
+ }
+}
+
+void cmi_state::install_video_ram(int cpunum)
+{
+ address_space *space = (cpunum == CPU_1 ? m_cpu1space : m_cpu2space);
+
+ space->install_readwrite_handler(0x8000, 0xbfff, read8_delegate(FUNC(cmi_state::vram_r),this), write8_delegate(FUNC(cmi_state::vram_w),this));
+}
+
+WRITE8_MEMBER( cmi_state::i8214_cpu1_w )
+{
+ m_maincpu1->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
+ m_i8214_0->b_w(data & 0x7);
+ m_i8214_0->sgs_w((data >> 3) & 1);
+}
+
+
+WRITE8_MEMBER( cmi_state::i8214_cpu2_w )
+{
+ m_maincpu2->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
+ m_i8214_1->b_w(data & 0x7);
+ m_i8214_1->sgs_w((data >> 3) & 1);
+}
+
+// TODO: replace with AM_SHARE
+READ8_MEMBER( cmi_state::shared_ram_r )
+{
+ return m_shared_ram[offset];
+}
+
+WRITE8_MEMBER( cmi_state::shared_ram_w )
+{
+ m_shared_ram[offset] = data;
+}
+
+
+WRITE_LINE_MEMBER( cmi_state::ank_cts_w )
+{
+// printf("ANK CTS: %x\n", state);
+}
+
+READ_LINE_MEMBER( cmi_state::ank_rts_r )
+{
+// printf("ANK RTS?\n");
+ return 0;
+}
+
+READ_LINE_MEMBER( cmi01a_device::eosi_r )
+{
+ return (m_segment_cnt & 0x4000) >> 14;
+}
+
+READ_LINE_MEMBER( cmi01a_device::zx_r )
+{
+ return m_segment_cnt & 0x40;
+}
+
+void cmi_state::install_peripherals(int cpunum)
+{
+ //printf("Installing peripherals for CPU %d\n", cpunum + 1);
+ address_space *space = (cpunum == CPU_1 ? m_cpu1space : m_cpu2space);
+
+ space->install_readwrite_handler(0xe000, 0xe03f, read8_delegate(FUNC(cmi_state::cmi02_r),this), write8_delegate(FUNC(cmi_state::cmi02_w),this));
+
+ space->install_readwrite_handler(0xf000, 0xf7ff, read8_delegate(FUNC(cmi_state::rom_r),this), write8_delegate(FUNC(cmi_state::map_ram_w),this));
+
+ space->install_rom(0xf800, 0xfbff, m_q133_rom + (cpunum == CPU_2 ? 0x1800 : 0x2800));
+
+ space->install_readwrite_handler(0xfc40, 0xfc4f, read8_delegate(FUNC(cmi_state::parity_r),this), write8_delegate(FUNC(cmi_state::mapsel_w),this));
+ //space->install_readwrite_handler(0xfc5a, 0xfc5b, SMH_NOP, SMH_NOP); // Q077 HDD controller - not installed
+ space->install_readwrite_handler(0xfc5e, 0xfc5e, read8_delegate(FUNC(cmi_state::atomic_r),this), write8_delegate(FUNC(cmi_state::cpufunc_w),this));
+ space->install_readwrite_handler(0xfc5f, 0xfc5f, read8_delegate(FUNC(cmi_state::map_r),this), write8_delegate(FUNC(cmi_state::map_w),this));
+ space->install_readwrite_handler(0xfc80, 0xfc8f, read8_delegate(FUNC(cmi_state::q133_acia_r),this), write8_delegate(FUNC(cmi_state::q133_acia_w),this));
+ space->install_readwrite_handler(0xfc90, 0xfc97, read8_delegate(FUNC(ptm6840_device::read),m_q133_ptm.target()), write8_delegate(FUNC(ptm6840_device::write),m_q133_ptm.target()));
+
+ space->install_readwrite_handler(0xfcbc, 0xfcbc, read8_delegate(FUNC(cmi_state::cmi07_r),this), write8_delegate(FUNC(cmi_state::cmi07_w),this));
+
+ space->install_read_handler(0xfcc0, 0xfcc3, read8_delegate(FUNC(cmi_state::lightpen_r),this));
+ space->install_readwrite_handler(0xfcc4, 0xfcc7, read8_delegate(FUNC(pia6821_device::read),m_q219_pia.target()), write8_delegate(FUNC(pia6821_device::write),m_q219_pia.target()));
+ space->install_readwrite_handler(0xfcc8, 0xfccf, read8_delegate(FUNC(ptm6840_device::read),m_q219_ptm.target()), write8_delegate(FUNC(ptm6840_device::write),m_q219_ptm.target()));
+ space->install_readwrite_handler(0xfcd0, 0xfcdc, read8_delegate(FUNC(cmi_state::video_r),this), write8_delegate(FUNC(cmi_state::video_w),this));
+ space->install_readwrite_handler(0xfce0, 0xfce1, read8_delegate(FUNC(cmi_state::fdc_r),this), write8_delegate(FUNC(cmi_state::fdc_w),this));
+ space->install_readwrite_handler(0xfcf0, 0xfcf7, read8_delegate(FUNC(pia6821_device::read),m_q133_pia_0.target()), write8_delegate(FUNC(pia6821_device::write),m_q133_pia_0.target()));
+ space->install_readwrite_handler(0xfcf8, 0xfcff, read8_delegate(FUNC(pia6821_device::read),m_q133_pia_1.target()), write8_delegate(FUNC(pia6821_device::write),m_q133_pia_1.target()));
+
+ space->install_write_handler(0xfcfc, 0xfcfc, write8_delegate(FUNC(cmi_state::i8214_cpu1_w),this));
+ space->install_write_handler(0xfcfd, 0xfcfd, write8_delegate(FUNC(cmi_state::i8214_cpu2_w),this));
+
+ space->install_readwrite_handler(0xfd00, 0xfeff, read8_delegate(FUNC(cmi_state::shared_ram_r),this), write8_delegate(FUNC(cmi_state::shared_ram_w),this));
+
+ space->install_ram(0xff00, 0xfffd, &m_scratch_ram[cpunum][0]);
+
+ space->install_read_handler(0xfffe, 0xffff, read8_delegate(FUNC(cmi_state::vector_r),this));
+}
+
+
+/*************************************
+ *
+ * Interrupt Handling
+ *
+ *************************************/
+
+WRITE_LINE_MEMBER( cmi_state::ptm_q219_irq )
+{
+ set_interrupt(CPU_2, IRQ_RINT_LEVEL, state);
+}
+
+IRQ_CALLBACK_MEMBER( cmi_state::cpu1_interrupt_callback )
+{
+ /* Switch to mapping A */
+ m_cpu_active_space[0] = MAPPING_A;
+ update_address_space(0, m_map_sel[MAPSEL_P1_A]);
+
+ if (irqline == INPUT_LINE_IRQ0)
+ {
+ UINT16 address;
+ address_space &cmi_space = m_maincpu1->space(AS_PROGRAM);
+
+ if (m_hp_int)
+ {
+ int level = m_i8214_2->a_r() ^ 0x7;
+ address = (cmi_space.read_byte(0xffe0 + level*2) << 8) | cmi_space.read_byte(0xffe0 + level*2 + 1);
+ //m_hp_int = 0;
+ }
+ else
+ {
+ int level = m_i8214_0->a_r() ^ 0x7;
+ address = (cmi_space.read_byte(0xffd0 + level*2) << 8) | cmi_space.read_byte(0xffd0 + level*2 + 1);
+ }
+ m_maincpu1->set_pc(address);
+ }
+ return 0;
+}
+
+IRQ_CALLBACK_MEMBER( cmi_state::cpu2_interrupt_callback )
+{
+ /* Switch to mapping A */
+ m_cpu_active_space[1] = MAPPING_A;
+ update_address_space(1, m_map_sel[MAPSEL_P2_A]);
+
+ /* */
+ if (irqline == INPUT_LINE_IRQ0)
+ {
+ int level = m_i8214_1->a_r() ^ 0x7;
+
+ address_space &cmi_space = m_maincpu2->space(AS_PROGRAM);
+ UINT16 address = (cmi_space.read_byte(0xffe0 + level*2) << 8) | cmi_space.read_byte(0xffe0 + level*2 + 1);
+
+ m_maincpu2->set_pc(address);
+ }
+ return 0;
+}
+
+void cmi_state::set_interrupt(int cpunum, int level, int state)
+{
+// printf("CPU%d Int: %x State: %x (Cur: %x)\n", cpunum, level, state, m_int_state[cpunum]);
+
+ if (state == ASSERT_LINE)
+ m_int_state[cpunum] |= (1 << level);
+ else
+ m_int_state[cpunum] &= ~(1 << level);
+
+ if (cpunum == 0)
+ {
+ if (level < 8)
+ m_i8214_2->r_w(~m_int_state[cpunum]);
+ else
+ m_i8214_0->r_w(~(m_int_state[cpunum] >> 8));
+ }
+ else
+ m_i8214_1->r_w(~m_int_state[cpunum]);
+}
+
+WRITE_LINE_MEMBER( cmi_state::i8214_1_int_w )
+{
+ m_maincpu1->set_input_line(M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
+}
+
+WRITE_LINE_MEMBER( cmi_state::i8214_2_int_w )
+{
+ m_maincpu2->set_input_line(M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
+}
+
+WRITE_LINE_MEMBER( cmi_state::i8214_3_int_w )
+{
+ //if (state)
+ m_hp_int = state;
+ m_maincpu1->set_input_line(M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
+}
+
+
+WRITE_LINE_MEMBER( cmi_state::i8214_3_enlg )
+{
+ // Not needed?
+// m_hp_int = state;
+}
+
+WRITE_LINE_MEMBER( cmi_state::pia_q219_irqa )
+{
+ set_interrupt(CPU_2, IRQ_TOUCHINT_LEVEL, state);
+}
+
+WRITE_LINE_MEMBER( cmi_state::pia_q219_irqb )
+{
+ set_interrupt(CPU_2, IRQ_PENINT_LEVEL, state);
+}
+
+
+/* E9 - E11 - MSM5832RS */
+/*
+ A0-A3 = MSM5832 A0-A3
+ A4+CA1 = MSM5832 D0
+ A5+CB1 = MSM5832 D1
+ A6 = MSM5832 D2
+ A7 = MSM5832 D3
+ B0 = HOLD
+ B1 = READ
+ B2 = WRITE
+ CB2 = OPTO
+ B3 = ----
+ B4-B7 = PC0-3
+
+ IRQA/B = /RTINT?
+*/
+
+READ8_MEMBER( cmi_state::q133_1_porta_r )
+{
+ if (BIT(m_q133_pia_0->b_output(), 1))
+ {
+ return m_msm5832->data_r(space, m_msm5832_addr) << 4;
+ }
+ return 0xff;
+}
+
+WRITE8_MEMBER( cmi_state::q133_1_porta_w )
+{
+ m_msm5832_addr = data & 0xf;
+}
+
+WRITE8_MEMBER( cmi_state::q133_1_portb_w )
+{
+}
+
+WRITE8_MEMBER( cmi_state::master_tune_w )
+{
+// double mfreq = (double)data * ((double)MASTER_OSCILLATOR / 2.0) / 256.0;
+}
+
+WRITE8_MEMBER( cmi01a_device::cmi01a_2_a_w )
+{
+// top two
+}
+
+WRITE8_MEMBER( cmi01a_device::cmi01a_2_b_w )
+{
+}
+
+
+/*
+ PA0-7 = BKA0-7 (display)
+
+ PB0 = DA1
+ PB1 = DA0
+ PB2 = CS2
+ PB3 = CU2
+ PB4 = CS1
+ PB5 = CU1
+ PB6 = CS0
+ PB7 = CU0
+
+ CB1 = /KPAD
+ CB2 = /DWS
+*/
+
+WRITE8_MEMBER( cmi_state::cmi10_u20_a_w )
+{
+ /*
+ int bk = data;
+ int bit = 0;
+
+ if (BIT(bk, 3))
+ bit = BIT(input_port_read(device->machine, "KEYPAD_A"), bk & 7);
+ else if (!BIT(bk, 4))
+ bit = BIT(input_port_read(device->machine, "KEYPAD_B"), bk & 7);
+
+ pia6821_cb1_w(m_cmi10_pia_u20, 0, !bit);
+ */
+}
+
+WRITE8_MEMBER( cmi_state::cmi10_u20_b_w )
+{
+}
+
+READ_LINE_MEMBER( cmi_state::cmi10_u20_cb1_r )
+{
+ int bk = m_cmi10_pia_u20->a_output();
+ int bit = 0;
+
+ if (BIT(bk, 3))
+ bit = BIT(m_keypad_a_port->read(), bk & 7);
+ else if (!BIT(bk, 4))
+ bit = BIT(m_keypad_b_port->read(), bk & 7);
+
+ return !bit;
+}
+
+WRITE_LINE_MEMBER( cmi_state::cmi10_u20_cb2_w )
+{
+ UINT8 data = m_cmi10_pia_u20->a_output() & 0x7f;
+ UINT8 b_port = m_cmi10_pia_u20->b_output();
+ int addr = (BIT(b_port, 0) << 1) | BIT(b_port, 1);
+ address_space &space = m_maincpu1->space(AS_PROGRAM); // Just needed to call data_w
+
+ /* DP1 */
+ m_dp1->ce_w(BIT(b_port, 6));
+ m_dp1->cu_w(BIT(b_port, 7));
+ m_dp1->wr_w(state);
+ m_dp1->data_w(space, addr, data, 0xff);
+
+ /* DP2 */
+ m_dp2->ce_w(BIT(b_port, 4));
+ m_dp2->cu_w(BIT(b_port, 5));
+ m_dp2->wr_w(state);
+ m_dp2->data_w(space, addr & 3, data, 0xff);
+
+ /* DP3 */
+ m_dp3->ce_w(BIT(b_port, 2));
+ m_dp3->cu_w(BIT(b_port, 3));
+ m_dp3->wr_w(state);
+ m_dp3->data_w(space, addr & 3, data, 0xff);
+}
+
+WRITE16_MEMBER( cmi_state::cmi_iix_update_dp1 )
+{
+ output().set_digit_value(0 + (offset ^ 3), data);
+}
+
+WRITE16_MEMBER( cmi_state::cmi_iix_update_dp2 )
+{
+ output().set_digit_value(4 + (offset ^ 3), data);
+}
+
+WRITE16_MEMBER( cmi_state::cmi_iix_update_dp3 )
+{
+ output().set_digit_value(8 + (offset ^ 3), data);
+}
+
+/* Begin Conversion */
+WRITE_LINE_MEMBER( cmi_state::cmi10_u21_cb2_w )
+{
+ // if 0
+// state = state;
+}
+
+
+READ8_MEMBER( cmi_state::cmi10_u21_a_r )
+{
+#if 0
+// int thld = m_cmi10_pia_u21->ca2_output();
+ int sel = m_cmi10_pia_u20->a_output();
+ int key = sel & 7;
+ int mux = (sel >> 3) & 3;
+ UINT8 data = 0x38; // slave keyboard not used
+
+
+ for (int module = 0; module < 3; ++module)
+ {
+// char keyname[16];
+ UINT8 keyval;
+ int state = 1;
+
+ if (mux == 0 && key == 3)
+ {
+ //keyval = input_port_read(device->machine, "ANALOG");
+
+ /* Unpressed */
+ if (keyval <= 0)
+ state = 1;
+ /* In flight */
+
+ #if 0
+ else if (keyval <= 80)
+ {
+ if (thld == 1)
+ state = 0;
+ else
+ state = 1;
+ }
+ /* Fully depressed */
+ #endif
+ else
+ state = 0;
+
+ }
+
+ data |= state << module;
+ }
+
+ return data;
+#else
+ int sel = m_cmi10_pia_u20->a_output();
+ int key = sel & 7;
+ int mux = (sel >> 3) & 3;
+ UINT8 data = 0xf8; // slave keyboard not used
+
+ for (int module = 0; module < 3; ++module)
+ {
+ UINT8 keyval = 0;
+ switch (mux)
+ {
+ case 0:
+ keyval = m_key_mux0_port[module]->read();
+ break;
+ case 1:
+ keyval = m_key_mux1_port[module]->read();
+ break;
+ case 2:
+ keyval = m_key_mux2_port[module]->read();
+ break;
+ case 3:
+ keyval = m_key_mux3_port[module]->read();
+ break;
+ }
+
+ data |= BIT(keyval, key) << module;
+ }
+
+ return data;
+#endif
+}
+
+ /*************************************
+ *
+ * 6850 ACIAs
+ *
+ *************************************/
+
+//static int kbd_to_cmi;
+//static int cmi_to_kbd;
+
+READ_LINE_MEMBER( cmi_state::mkbd_kbd_rx )
+{
+ return m_ank_pia->cb2_output();
+}
+
+WRITE_LINE_MEMBER( cmi_state::mkbd_kbd_tx )
+{
+}
+
+#if 0
+READ_LINE_MEMBER( cmi_state::q133_rx )
+{
+ return m_kbd_to_cmi;
+}
+
+WRITE_LINE_MEMBER( cmi_state::q133_tx )
+{
+ m_cmi_to_kbd = state;
+}
+
+WRITE_LINE_MEMBER( cmi_state::mkbd_cmi_w )
+{
+
+}
+#endif
+
+READ_LINE_MEMBER( cmi_state::mkbd_cmi_rx )
+{
+ return 1;//cmi_to_kbd;
+}
+
+WRITE_LINE_MEMBER( cmi_state::mkbd_cmi_tx )
+{
+// kbd_to_cmi = state;
+
+ if (m_mkbd_tx_start == 0)
+ {
+ if (!state)
+ {
+ m_mkbd_tx_start = 1;
+ m_mkbd_tx_bits = 10;
+ m_mkbd_tx_reg = 0;
+ }
+ }
+ else if (m_mkbd_tx_start)
+ {
+ m_mkbd_tx_reg = m_mkbd_tx_reg | state << (10 - m_mkbd_tx_bits);
+
+ if (--m_mkbd_tx_bits == 0)
+ {
+ m_q133_acia_rx_data = m_mkbd_tx_reg & 0xff;
+ m_q133_acia_status |= 0x88;
+ set_interrupt(CPU_1, IRQ_ACINT_LEVEL, ASSERT_LINE);
+// printf("%x\n",q133_acia_rx_data);
+ m_mkbd_tx_start = 0;
+ }
+ }
+}
+
+WRITE_LINE_MEMBER( cmi_state::msm5832_irq )
+{
+#if 0
+ set_interrupt(CPU_2, IRQ_RTCINT_LEVEL, state ? ASSERT_LINE : CLEAR_LINE);
+#endif
+}
+
+WRITE_LINE_MEMBER( cmi_state::mkbd_acia1_int )
+{
+ m_mkbd_acia1_irq = state;
+
+ if (m_mkbd_acia1_irq)
+ m_muskeyscpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE);
+ else if (!m_mkbd_acia2_irq)
+ m_muskeyscpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE);
+}
+
+WRITE_LINE_MEMBER( cmi_state::mkbd_acia2_int )
+{
+ m_mkbd_acia2_irq = state;
+
+ if (m_mkbd_acia2_irq)
+ m_muskeyscpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE);
+ else if (!m_mkbd_acia1_irq)
+ m_muskeyscpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE);
+}
+
+#if 0
+WRITE_LINE_MEMBER( cmi_state::q133_acia_int )
+{
+ m_maincpu1->set_input_line(INPUT_LINE_IRQ0, state ? ASSERT_LINE : CLEAR_LINE);
+}
+#endif
+
+WRITE_LINE_MEMBER( cmi_state::cmi07_irq )
+{
+ m_cmi07cpu->set_input_line(INPUT_LINE_IRQ0, state ? ASSERT_LINE : CLEAR_LINE);
+}
+
+void cmi_state::machine_reset()
+{
+ m_cpu1space = &m_maincpu1->space(AS_PROGRAM);
+ m_cpu2space = &m_maincpu2->space(AS_PROGRAM);
+
+ m_qfc9_region_ptr = (UINT8 *)m_qfc9_region->base();
+
+ /* Set 8214 interrupt lines */
+ m_i8214_0->etlg_w(1);
+ m_i8214_0->inte_w(1);
+ m_i8214_1->etlg_w(1);
+ m_i8214_1->inte_w(1);
+ m_i8214_2->etlg_w(1);
+ m_i8214_2->inte_w(1);
+
+ m_hblank_timer->adjust(m_screen->time_until_pos(0, HBLANK_START));
+
+ m_scnd = 0;
+
+ for (int cpunum = 0; cpunum < 2; ++cpunum)
+ {
+ address_space &space = (cpunum == CPU_1 ? m_maincpu1->space(AS_PROGRAM) : m_maincpu2->space(AS_PROGRAM));
+
+ space.unmap_readwrite(0x0000, 0xffff);
+
+ /* Select A (system) spaces */
+ m_cpu_active_space[cpunum] = MAPPING_A;
+
+ install_peripherals(cpunum);
+ }
+
+ // TODO - we need to detect empty disk drive!!
+ m_fdc_status |= FDC_STATUS_READY;
+
+ m_int_state[0] = 0;
+ m_int_state[1] = 0;
+
+ /* CMI-07 */
+ m_cmi07_ctrl = 0;
+ m_cmi07cpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
+
+ m_cmi10_scnd_timer->adjust(attotime::from_hz(4000000 / 4 / 2048 / 2), 0, attotime::from_hz(4000000 / 4 / 2048 / 2));
+ m_scnd = 0;
+}
+
+void cmi_state::machine_start()
+{
+ m_q133_rom = (UINT8 *)m_q133_region->base();
+
+ // allocate timers for the built-in two channel timer
+ m_map_switch_timer = timer_alloc(TIMER_MAP_SWITCH);
+ m_hblank_timer = timer_alloc(TIMER_HBLANK);
+ m_cmi10_scnd_timer = timer_alloc(TIMER_CMI10_SCND);
+ m_jam_timeout_timer = timer_alloc(TIMER_JAM_TIMEOUT);
+
+ m_map_switch_timer->adjust(attotime::never);
+ m_hblank_timer->adjust(attotime::never);
+ m_cmi10_scnd_timer->adjust(attotime::never);
+ m_jam_timeout_timer->adjust(attotime::never);
+
+ /* Allocate 1kB memory mapping RAM */
+ m_map_ram[0] = std::make_unique(0x400);
+ m_map_ram[1] = std::make_unique(0x400);
+ m_map_ram[2] = std::make_unique(0x400);
+ m_map_ram[3] = std::make_unique(0x400);
+
+ /* Allocate 256kB for each Q256 RAM card */
+ m_q256_ram[0] = std::make_unique(0x40000);
+ m_q256_ram[1] = std::make_unique(0x40000);
+ m_q256_ram[2] = std::make_unique(0x40000);
+ m_q256_ram[3] = std::make_unique(0x40000);
+
+ /* Allocate 16kB video RAM */
+ m_video_ram = std::make_unique(0x4000);
+
+ /* Allocate 512B shared RAM */
+ m_shared_ram = std::make_unique(0x200);
+
+ /* Allocate 256B scratch RAM per CPU */
+ m_scratch_ram[0] = std::make_unique(0x100);
+ m_scratch_ram[1] = std::make_unique(0x100);
+
+ m_channels[0] = m_cmi01a_0;
+ m_channels[1] = m_cmi01a_1;
+ m_channels[2] = m_cmi01a_2;
+ m_channels[3] = m_cmi01a_3;
+ m_channels[4] = m_cmi01a_4;
+ m_channels[5] = m_cmi01a_5;
+ m_channels[6] = m_cmi01a_6;
+ m_channels[7] = m_cmi01a_7;
+}
+
+INTERRUPT_GEN_MEMBER( cmi_state::cmi_iix_vblank )
+{
+ /* VSYNC */
+ m_q219_pia->cb2_w(1);
+ m_q219_pia->cb2_w(0);
+
+ /* LPSTB */
+ m_q219_pia->cb1_w(0);
+}
+
+static SLOT_INTERFACE_START( cmi2x_floppies )
+ SLOT_INTERFACE( "8dsdd", FLOPPY_8_DSDD )
+ SLOT_INTERFACE( "8dssd", FLOPPY_8_DSSD )
+SLOT_INTERFACE_END
+
+static MACHINE_CONFIG_START( cmi2x, cmi_state )
+ MCFG_CPU_ADD("maincpu1", M6809E, Q209_CPU_CLOCK)
+ MCFG_CPU_PROGRAM_MAP(maincpu1_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", cmi_state, cmi_iix_vblank)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(cmi_state, cpu1_interrupt_callback)
+
+ MCFG_CPU_ADD("maincpu2", M6809E, Q209_CPU_CLOCK)
+ MCFG_CPU_PROGRAM_MAP(maincpu2_map)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(cmi_state, cpu2_interrupt_callback)
+
+ MCFG_CPU_ADD("muskeys", M6802, 3840000)
+ MCFG_CPU_PROGRAM_MAP(muskeys_map)
+
+ MCFG_CPU_ADD("alphakeys", M6802, 4000000)
+ MCFG_CPU_PROGRAM_MAP(alphakeys_map)
+ MCFG_CPU_PERIODIC_INT_DRIVER(cmi_state, irq0_line_hold, 9600) // TODO: ACIA controls this
+
+ MCFG_CPU_ADD("smptemidi", M68000, 10000000)
+ MCFG_CPU_PROGRAM_MAP(midicpu_map)
+
+ MCFG_CPU_ADD("cmi07cpu", M6809E, 4000000) // ?
+ MCFG_CPU_PROGRAM_MAP(cmi07cpu_map)
+
+ /* alpha-numeric display */
+ MCFG_DEVICE_ADD("dp1", DL1416T, 0)
+ MCFG_DL1416_UPDATE_HANDLER(WRITE16(cmi_state, cmi_iix_update_dp1))
+ MCFG_DEVICE_ADD("dp2", DL1416T, 0)
+ MCFG_DL1416_UPDATE_HANDLER(WRITE16(cmi_state, cmi_iix_update_dp2))
+ MCFG_DEVICE_ADD("dp3", DL1416T, 0)
+ MCFG_DL1416_UPDATE_HANDLER(WRITE16(cmi_state, cmi_iix_update_dp3))
+
+ /* video hardware */
+ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green)
+ MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBLANK_END, HBLANK_START, VTOTAL, VBLANK_END, VBLANK_START)
+ MCFG_SCREEN_UPDATE_DRIVER(cmi_state, screen_update_cmi2x)
+ MCFG_PALETTE_ADD_MONOCHROME("palette")
+
+ MCFG_MSM5832_ADD("msm5832", XTAL_32_768kHz)
+
+ MCFG_DEVICE_ADD("i8214_1", I8214, 1000000) // cmi_8214_intf_1
+ MCFG_I8214_IRQ_CALLBACK(WRITELINE(cmi_state, i8214_1_int_w))
+ MCFG_DEVICE_ADD("i8214_2", I8214, 1000000) // cmi_8214_intf_2
+ MCFG_I8214_IRQ_CALLBACK(WRITELINE(cmi_state, i8214_2_int_w))
+ MCFG_DEVICE_ADD("i8214_3", I8214, 1000000) // cmi_8214_intf_3
+ MCFG_I8214_IRQ_CALLBACK(WRITELINE(cmi_state, i8214_3_int_w))
+ MCFG_I8214_ENLG_CALLBACK(WRITELINE(cmi_state, i8214_3_enlg))
+
+ MCFG_DEVICE_ADD("q133_pia_1", PIA6821, 0) // pia_q133_1_config
+ MCFG_PIA_READPA_HANDLER(READ8(cmi_state, q133_1_porta_r));
+ MCFG_PIA_WRITEPA_HANDLER(WRITE8(cmi_state, q133_1_porta_w));
+ MCFG_PIA_WRITEPB_HANDLER(WRITE8(cmi_state, q133_1_portb_w));
+
+ MCFG_DEVICE_ADD("q133_pia_2", PIA6821, 0) // pia_q133_2_config
+ MCFG_DEVICE_ADD("q133_ptm", PTM6840, 0) // ptm_q133_config
+ MCFG_PTM6840_INTERNAL_CLOCK(2000000)
+ MCFG_PTM6840_EXTERNAL_CLOCKS(1024, 1, 111) // Third is todo
+
+ MCFG_DEVICE_ADD("q219_pia", PIA6821, 0) // pia_q219_config
+ MCFG_PIA_READPB_HANDLER(READ8(cmi_state, pia_q219_b_r));
+ MCFG_PIA_WRITEPA_HANDLER(WRITE8(cmi_state, vscroll_w))
+ MCFG_PIA_WRITEPB_HANDLER(WRITE8(cmi_state, video_attr_w))
+ MCFG_PIA_IRQA_HANDLER(WRITELINE(cmi_state, pia_q219_irqa))
+ MCFG_PIA_IRQB_HANDLER(WRITELINE(cmi_state, pia_q219_irqb))
+
+ MCFG_DEVICE_ADD("q219_ptm", PTM6840, 0) // ptm_q219_config
+ MCFG_PTM6840_INTERNAL_CLOCK(2000000)
+ MCFG_PTM6840_EXTERNAL_CLOCKS(HBLANK_FREQ, VBLANK_FREQ, 1000000)
+ MCFG_PTM6840_IRQ_CB(WRITELINE(cmi_state, ptm_q219_irq))
+
+ MCFG_DEVICE_ADD("cmi02_pia_1", PIA6821, 0) // pia_cmi02_1_config
+ MCFG_PIA_WRITEPB_HANDLER(WRITE8(cmi_state, master_tune_w))
+
+ MCFG_DEVICE_ADD("cmi02_pia_2", PIA6821, 0) // pia_cmi02_2_config
+
+ MCFG_DEVICE_ADD("cmi02_ptm", PTM6840, 0) // ptm_cmi02_config
+ MCFG_PTM6840_INTERNAL_CLOCK(2000000) // TODO
+
+ MCFG_DEVICE_ADD("ank_pia", PIA6821, 0) // pia_ank_config
+ MCFG_PIA_READPA_HANDLER(READ8(cmi_state, ank_col_r))
+ MCFG_PIA_READCB1_HANDLER(READLINE(cmi_state, ank_rts_r))
+ MCFG_PIA_CA2_HANDLER(WRITELINE(cmi_state, ank_cts_w))
+ MCFG_PIA_CB2_HANDLER(WRITELINE(cmi_state, ank_data_w))
+
+ MCFG_DEVICE_ADD("acia_mkbd_cmi", ACIA6850, 1843200 / 12) // acia_mkbd_cmi
+ MCFG_DEVICE_ADD("acia_mkbd_kbd", ACIA6850, 1843200 / 12) // acia_mkbd_kbd
+
+ MCFG_DEVICE_MODIFY("acia_mkbd_kbd")
+ MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("acia_mkbd_cmi", acia6850_device, write_rxd))
+ MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("acia_mkbd_cmi", acia6850_device, write_cts))
+ MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(cmi_state, mkbd_acia1_int))
+
+ MCFG_DEVICE_MODIFY("acia_mkbd_cmi")
+ MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("acia_mkbd_kbd", acia6850_device, write_rxd))
+ MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("acia_mkbd_kbd", acia6850_device, write_cts))
+ MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(cmi_state, mkbd_acia2_int))
+
+ MCFG_DEVICE_ADD("cmi07_ptm", PTM6840, 0) // ptm_cmi07_config
+ MCFG_PTM6840_INTERNAL_CLOCK(2000000) // TODO
+ MCFG_PTM6840_IRQ_CB(WRITELINE(cmi_state, cmi07_irq))
+
+ MCFG_FD1791_ADD("wd1791", XTAL_16MHz / 8) // wd1791_interface
+ MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(cmi_state, wd1791_irq))
+ MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(cmi_state, wd1791_drq))
+ MCFG_FLOPPY_DRIVE_ADD("wd1791:0", cmi2x_floppies, "8dsdd", floppy_image_device::default_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD("wd1791:1", cmi2x_floppies, "8dsdd", floppy_image_device::default_floppy_formats)
+
+ // Channel cards
+ MCFG_CMI01A_ADD("cmi01a_0", 0)
+ MCFG_CMI01A_ADD("cmi01a_1", 1)
+ MCFG_CMI01A_ADD("cmi01a_2", 2)
+ MCFG_CMI01A_ADD("cmi01a_3", 3)
+ MCFG_CMI01A_ADD("cmi01a_4", 4)
+ MCFG_CMI01A_ADD("cmi01a_5", 5)
+ MCFG_CMI01A_ADD("cmi01a_6", 6)
+ MCFG_CMI01A_ADD("cmi01a_7", 7)
+
+ /* Musical keyboard */
+ MCFG_DEVICE_ADD("cmi10_pia_u20", PIA6821, 0)
+ MCFG_PIA_READCB1_HANDLER(READLINE(cmi_state, cmi10_u20_cb1_r))
+ MCFG_PIA_WRITEPA_HANDLER(WRITE8(cmi_state, cmi10_u20_a_w))
+ MCFG_PIA_WRITEPB_HANDLER(WRITE8(cmi_state, cmi10_u20_b_w))
+ MCFG_PIA_CB2_HANDLER(WRITELINE(cmi_state, cmi10_u20_cb2_w))
+
+ MCFG_DEVICE_ADD("cmi10_pia_u21", PIA6821, 0)
+ MCFG_PIA_READPA_HANDLER(READ8(cmi_state, cmi10_u21_a_r))
+ MCFG_PIA_CB2_HANDLER(WRITELINE(cmi_state, cmi10_u21_cb2_w))
+MACHINE_CONFIG_END
+
+ROM_START( cmi2x )
+ /* Q133 Processor control card */
+ ROM_REGION( 0x3000, "q133", 0 )
+ ROM_LOAD( "q9f0mrk1.bin", 0x000, 0x800, CRC(16f195cc) SHA1(fcc4be370ba60ae5a4145c36cdbdc97a7be91f8f) )
+ ROM_LOAD( "f8lmrk5.bin", 0x800, 0x800, CRC(cfc7967f) SHA1(0695cc757cf6fab35414dc068dd2a3e50084685c) )
+
+ /* For CPU1 */
+ ROM_COPY( "q133", 0x000, 0x1000, 0x800 )
+ ROM_COPY( "q133", 0x800, 0x1800, 0x400 )
+
+ /* For CPU2 */
+ ROM_COPY( "q133", 0x000, 0x2000, 0x800 )
+ ROM_COPY( "q133", 0xc00, 0x2800, 0x400 )
+
+ /* General Interface (SMPTE/MIDI) CPU */
+ ROM_REGION( 0x4000, "smptemidi", 0 )
+ ROM_LOAD16_BYTE( "mon1110e.bin", 0x0000, 0x2000, CRC(476f7d5f) SHA1(9af21e0072eaa58cae42947c20dca05d35dfadd0) )
+ ROM_LOAD16_BYTE( "mon1110o.bin", 0x0001, 0x2000, CRC(150c8ebe) SHA1(bbd371bebac29628f60537832d0587e83323ad01) )
+
+ /* QFC9 Floppy disk controller driver */
+ ROM_REGION( 0x800, "qfc9", 0 )
+ ROM_LOAD( "dqfc911.bin", 0x00, 0x800, CRC(5bc38db2) SHA1(bd840e19e51a336e669c40b9e18cdaf6b3c62a8a) )
+
+ /* Musical keyboard CPU */
+ // Both of these dumps have been trimmed to size from within a roughly 2x-bigger file.
+ // The actual size is known based on the format apparently used by the dumping device, shared with the prom
+ // dumps and cmikeys4.bin dump.
+ ROM_REGION( 0x10000, "muskeys", 0 )
+ ROM_LOAD( "velkeysd.bin", 0xb000, 0x0400, CRC(9b636781) SHA1(be29a72a1d6d313dafe0b63951b5e3e18ddb9a21) )
+ ROM_LOAD( "kbdioa.bin", 0xfc00, 0x0400, CRC(a5cbe218) SHA1(bc6784aaa5697c28eab126e20500139b8d0c1f50) )
+
+ /* Alphanumeric keyboard CPU */
+ // This dump has been trimmed to size from within a roughly 2x-bigger file. The actual size is known based
+ // on the format apparently used by the dumping device, shared with the prom dumps and music keys dump.
+ ROM_REGION( 0x10000, "alphakeys", 0 )
+ ROM_LOAD( "cmikeys4.bin", 0xc000, 0x400, CRC(b214fbe9) SHA1(8c404f58ba3e5a50aa42f761e966c74374e96cc9) )
+
+ // All of these PROM dumps have been trimmed to size from within a roughly 2x-bigger file.
+ // The actual sizes are known from the schematics and the starting address of the actual PROM data was obvious
+ // based on repeated data in some of the 256x4 PROMs, but it would be nice to get redumps, in the extremely
+ // unlikely event that someone finds a CMI IIx for sale.
+ ROM_REGION( 0x420, "proms", 0 )
+ ROM_LOAD( "brom.bin", 0x000, 0x100, CRC(3f730d15) SHA1(095df6eee95b9ad6418b910fb5d2ae46913750f9) ) // Unknown use, lightgun/graphics card
+ ROM_LOAD( "srom.bin", 0x100, 0x100, CRC(a1b4b71b) SHA1(6ea96480af2f1e43967f209218a74fc17972ce0e) ) // Used to generate signal timing for lightpen
+ ROM_LOAD( "mrom.bin", 0x200, 0x100, CRC(dc26642c) SHA1(49b207ff80d1b055c3b855dc954129846c49bfe3) ) // Unknown use, master card
+ ROM_LOAD( "timrom.bin", 0x300, 0x100, CRC(a426e4a2) SHA1(6b7ea128c730f5afd1042820ccd55bbda683afd8) ) // Unknown use, master card
+ ROM_LOAD( "wrom.bin", 0x400, 0x020, CRC(68a9e17f) SHA1(c3364a37a8d19a1882d7910add1c1df9b63ee32c) ) // Unknown use, lightgun/graphics card
+ROM_END
+
+/* TODO: Machine start? */
+DRIVER_INIT_MEMBER( cmi_state, cmi2x )
+{
+}
+
+CONS( 1983, cmi2x, 0, 0, cmi2x, cmi2x, cmi_state, cmi2x, "Fairlight", "CMI IIx", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
diff --git a/src/mame/drivers/compis.cpp b/src/mame/drivers/compis.cpp
index 063aae353ad..c919817719e 100644
--- a/src/mame/drivers/compis.cpp
+++ b/src/mame/drivers/compis.cpp
@@ -38,34 +38,198 @@
- Added a nasty hack to get a display on compis2 (wait 20 seconds)
- ******************************************************************************/
+******************************************************************************/
-#include "includes/compis.h"
-#include "bus/rs232/rs232.h"
+/*
+
+ TODO:
+
+ - cannot detect UHRG card (writes 0x1234 to 0x8000 in VRAM but does not read it back?)
+
+*/
+
+#include "emu.h"
#include "softlist.h"
+#include "bus/centronics/ctronics.h"
+#include "bus/compis/graphics.h"
+#include "bus/isbx/isbx.h"
+#include "bus/rs232/rs232.h"
+#include "cpu/i86/i186.h"
+#include "cpu/mcs48/mcs48.h"
+#include "imagedev/cassette.h"
+#include "machine/compiskb.h"
+#include "machine/i8251.h"
+#include "machine/i8255.h"
+#include "machine/i80130.h"
+#include "machine/mm58274c.h"
+#include "machine/pic8259.h"
+#include "machine/pit8253.h"
+#include "machine/ram.h"
+#include "machine/z80dart.h"
+
+#define I80186_TAG "ic1"
+#define I80130_TAG "ic15"
+#define I8251A_TAG "ic59"
+#define I8253_TAG "ic60"
+#define I8274_TAG "ic65"
+#define MM58174A_TAG "ic66"
+#define I8255_TAG "ic69"
+#define RS232_A_TAG "rs232a"
+#define RS232_B_TAG "rs232b"
+#define CASSETTE_TAG "cassette"
+#define CENTRONICS_TAG "centronics"
+#define ISBX_0_TAG "isbx0"
+#define ISBX_1_TAG "isbx1"
+#define GRAPHICS_TAG "gfx"
+#define COMPIS_KEYBOARD_TAG "compiskb"
+
+class compis_state : public driver_device
+{
+public:
+ compis_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, I80186_TAG),
+ m_osp(*this, I80130_TAG),
+ m_pit(*this, I8253_TAG),
+ m_ppi(*this, I8255_TAG),
+ m_mpsc(*this, I8274_TAG),
+ m_centronics(*this, CENTRONICS_TAG),
+ m_uart(*this, I8251A_TAG),
+ m_rtc(*this, MM58174A_TAG),
+ m_cassette(*this, CASSETTE_TAG),
+ m_graphics(*this, GRAPHICS_TAG),
+ m_isbx0(*this, ISBX_0_TAG),
+ m_isbx1(*this, ISBX_1_TAG),
+ m_ram(*this, RAM_TAG),
+ m_s8(*this, "S8")
+ { }
+
+ required_device m_maincpu;
+ required_device m_osp;
+ required_device m_pit;
+ required_device m_ppi;
+ required_device m_mpsc;
+ required_device m_centronics;
+ required_device m_uart;
+ required_device m_rtc;
+ required_device m_cassette;
+ required_device m_graphics;
+ required_device m_isbx0;
+ required_device m_isbx1;
+ required_device m_ram;
+ required_ioport m_s8;
+
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ DECLARE_READ16_MEMBER( pcs6_0_1_r );
+ DECLARE_WRITE16_MEMBER( pcs6_0_1_w );
+ DECLARE_READ16_MEMBER( pcs6_2_3_r );
+ DECLARE_WRITE16_MEMBER( pcs6_2_3_w );
+ DECLARE_READ16_MEMBER( pcs6_4_5_r );
+ DECLARE_WRITE16_MEMBER( pcs6_4_5_w );
+ DECLARE_READ16_MEMBER( pcs6_6_7_r );
+ DECLARE_WRITE16_MEMBER( pcs6_6_7_w );
+ DECLARE_READ16_MEMBER( pcs6_8_9_r );
+ DECLARE_WRITE16_MEMBER( pcs6_8_9_w );
+ DECLARE_READ16_MEMBER( pcs6_10_11_r );
+ DECLARE_WRITE16_MEMBER( pcs6_10_11_w );
+ DECLARE_READ16_MEMBER( pcs6_12_13_r );
+ DECLARE_WRITE16_MEMBER( pcs6_12_13_w );
+ DECLARE_READ16_MEMBER( pcs6_14_15_r );
+ DECLARE_WRITE16_MEMBER( pcs6_14_15_w );
+
+ DECLARE_READ8_MEMBER( compis_irq_callback );
+
+ DECLARE_READ8_MEMBER( ppi_pb_r );
+ DECLARE_WRITE8_MEMBER( ppi_pc_w );
+
+ DECLARE_WRITE_LINE_MEMBER( tmr0_w );
+ DECLARE_WRITE_LINE_MEMBER( tmr1_w );
+ DECLARE_WRITE_LINE_MEMBER( tmr2_w );
+ DECLARE_WRITE_LINE_MEMBER( tmr5_w );
+
+ TIMER_DEVICE_CALLBACK_MEMBER( tape_tick );
+
+ int m_centronics_busy;
+ int m_centronics_select;
+
+ DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
+ DECLARE_WRITE_LINE_MEMBER(write_centronics_select);
+
+ int m_tmr0;
+};
+
//**************************************************************************
// READ/WRITE HANDLERS
//**************************************************************************
-//-------------------------------------------------
-// tape_mon_w -
-//-------------------------------------------------
-
-WRITE8_MEMBER( compis_state::tape_mon_w )
+READ16_MEMBER( compis_state::pcs6_0_1_r )
{
- cassette_state state = BIT(data, 0) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED;
-
- m_cassette->change_state(state, CASSETTE_MASK_MOTOR);
+ if (ACCESSING_BITS_0_7)
+ {
+ return 0xff;
+ }
+ else
+ {
+ return m_graphics->dma_ack_r(space, offset);
+ }
}
+WRITE16_MEMBER( compis_state::pcs6_0_1_w )
+{
+ if (ACCESSING_BITS_0_7)
+ {
+ cassette_state state = BIT(data, 0) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED;
-//-------------------------------------------------
-// isbx
-//-------------------------------------------------
+ m_cassette->change_state(state, CASSETTE_MASK_MOTOR);
+ }
+ else
+ {
+ m_graphics->dma_ack_w(space, offset, data);
+ }
+}
-READ16_MEMBER( compis_state::isbx0_tdma_r )
+READ16_MEMBER( compis_state::pcs6_2_3_r )
+{
+ if (ACCESSING_BITS_0_7)
+ {
+ return m_mpsc->inta_r(space, 0);
+ }
+ else
+ {
+ if (BIT(offset, 0))
+ {
+ return m_uart->status_r(space, 0) << 8;
+ }
+ else
+ {
+ return m_uart->data_r(space, 0) << 8;
+ }
+ }
+}
+
+WRITE16_MEMBER( compis_state::pcs6_2_3_w )
+{
+ if (ACCESSING_BITS_0_7)
+ {
+ }
+ else
+ {
+ if (BIT(offset, 0))
+ {
+ m_uart->control_w(space, 0, data >> 8);
+ }
+ else
+ {
+ m_uart->data_w(space, 0, data >> 8);
+ }
+ }
+}
+
+READ16_MEMBER( compis_state::pcs6_4_5_r )
{
if (ACCESSING_BITS_0_7)
{
@@ -80,7 +244,7 @@ READ16_MEMBER( compis_state::isbx0_tdma_r )
}
}
-WRITE16_MEMBER( compis_state::isbx0_tdma_w )
+WRITE16_MEMBER( compis_state::pcs6_4_5_w )
{
if (ACCESSING_BITS_0_7)
{
@@ -93,32 +257,11 @@ WRITE16_MEMBER( compis_state::isbx0_tdma_w )
}
}
-READ16_MEMBER( compis_state::isbx1_tdma_r )
+READ16_MEMBER( compis_state::pcs6_6_7_r )
{
if (ACCESSING_BITS_0_7)
{
- if (offset < 2)
- return m_crtc->read(space, offset & 0x01);
- else
- // monochrome only, hblank? vblank?
- if(offset == 2)
- {
- switch(m_unk_video)
- {
- case 0x04:
- m_unk_video = 0x44;
- break;
- case 0x44:
- m_unk_video = 0x64;
- break;
- default:
- m_unk_video = 0x04;
- break;
- }
- return m_unk_video;
- }
- else
- return 0;
+ return m_graphics->pcs6_6_r(space, offset);
}
else
{
@@ -129,13 +272,11 @@ READ16_MEMBER( compis_state::isbx1_tdma_r )
}
}
-WRITE16_MEMBER( compis_state::isbx1_tdma_w )
+WRITE16_MEMBER( compis_state::pcs6_6_7_w )
{
if (ACCESSING_BITS_0_7)
{
- // 0x336 is likely the color plane register
- if (offset < 2) m_crtc->write(space, offset & 0x01, data);
-
+ m_graphics->pcs6_6_w(space, offset, data);
}
else
{
@@ -144,7 +285,7 @@ WRITE16_MEMBER( compis_state::isbx1_tdma_w )
}
}
-READ16_MEMBER( compis_state::isbx0_cs_r )
+READ16_MEMBER( compis_state::pcs6_8_9_r )
{
if (ACCESSING_BITS_0_7)
{
@@ -156,7 +297,7 @@ READ16_MEMBER( compis_state::isbx0_cs_r )
}
}
-WRITE16_MEMBER( compis_state::isbx0_cs_w )
+WRITE16_MEMBER( compis_state::pcs6_8_9_w )
{
if (ACCESSING_BITS_0_7)
{
@@ -168,7 +309,7 @@ WRITE16_MEMBER( compis_state::isbx0_cs_w )
}
}
-READ16_MEMBER( compis_state::isbx0_dack_r )
+READ16_MEMBER( compis_state::pcs6_10_11_r )
{
if (ACCESSING_BITS_0_7)
{
@@ -180,7 +321,7 @@ READ16_MEMBER( compis_state::isbx0_dack_r )
}
}
-WRITE16_MEMBER( compis_state::isbx0_dack_w )
+WRITE16_MEMBER( compis_state::pcs6_10_11_w )
{
if (ACCESSING_BITS_0_7)
{
@@ -192,7 +333,7 @@ WRITE16_MEMBER( compis_state::isbx0_dack_w )
}
}
-READ16_MEMBER( compis_state::isbx1_cs_r )
+READ16_MEMBER( compis_state::pcs6_12_13_r )
{
if (ACCESSING_BITS_0_7)
{
@@ -204,7 +345,7 @@ READ16_MEMBER( compis_state::isbx1_cs_r )
}
}
-WRITE16_MEMBER( compis_state::isbx1_cs_w )
+WRITE16_MEMBER( compis_state::pcs6_12_13_w )
{
if (ACCESSING_BITS_0_7)
{
@@ -216,7 +357,7 @@ WRITE16_MEMBER( compis_state::isbx1_cs_w )
}
}
-READ16_MEMBER( compis_state::isbx1_dack_r )
+READ16_MEMBER( compis_state::pcs6_14_15_r )
{
if (ACCESSING_BITS_0_7)
{
@@ -228,7 +369,7 @@ READ16_MEMBER( compis_state::isbx1_dack_r )
}
}
-WRITE16_MEMBER( compis_state::isbx1_dack_w )
+WRITE16_MEMBER( compis_state::pcs6_14_15_w )
{
if (ACCESSING_BITS_0_7)
{
@@ -280,41 +421,17 @@ static ADDRESS_MAP_START( compis_io, AS_IO, 16, compis_state )
//AM_RANGE(0x0180, 0x0181) /* PCS3 */ AM_MIRROR(0x7e)
//AM_RANGE(0x0200, 0x0201) /* PCS4 */ AM_MIRROR(0x7e)
AM_RANGE(0x0280, 0x028f) /* PCS5 */ AM_MIRROR(0x70) AM_DEVICE(I80130_TAG, i80130_device, io_map)
- AM_RANGE(0x0300, 0x0301) /* PCS6:0 */ AM_MIRROR(0xe) AM_WRITE8(tape_mon_w, 0x00ff)
- AM_RANGE(0x0310, 0x0311) /* PCS6:3 */ AM_MIRROR(0xc) AM_DEVREADWRITE8(I8251A_TAG, i8251_device, data_r, data_w, 0xff00)
- AM_RANGE(0x0312, 0x0313) /* PCS6:3 */ AM_MIRROR(0xc) AM_DEVREADWRITE8(I8251A_TAG, i8251_device, status_r, control_w, 0xff00)
- AM_RANGE(0x0320, 0x032f) AM_READWRITE(isbx0_tdma_r, isbx0_tdma_w)
- AM_RANGE(0x0330, 0x033f) AM_READWRITE(isbx1_tdma_r, isbx1_tdma_w)
- AM_RANGE(0x0340, 0x034f) AM_READWRITE(isbx0_cs_r, isbx0_cs_w)
- AM_RANGE(0x0350, 0x035f) AM_READWRITE(isbx0_dack_r, isbx0_dack_w)
- AM_RANGE(0x0360, 0x036f) AM_READWRITE(isbx1_cs_r, isbx1_cs_w)
- AM_RANGE(0x0370, 0x037f) AM_READWRITE(isbx1_dack_r, isbx1_dack_w)
-#ifdef NOT_SUPPORTED_BY_MAME_CORE
- AM_RANGE(0x0300, 0x0301) /* PCS6:1 */ AM_MIRROR(0xe) AM_DEVREADWRITE8("upd7220", upd7220_device, dack_r, dack_w, 0xff00) // DMA-ACK graphics
- AM_RANGE(0x0310, 0x0311) /* PCS6:2 */ AM_MIRROR(0xe) AM_DEVREAD8(I8274_TAG, i8274_device, inta_r, 0x00ff) // 8274 INTERRUPT ACKNOWLEDGE
- AM_RANGE(0x0320, 0x0323) /* PCS6:4 */ AM_MIRROR(0xc) AM_DEVREADWRITE8(I8274_TAG, i8274_device, cd_ba_r, cd_ba_w, 0x00ff)
- AM_RANGE(0x0320, 0x0321) /* PCS6:5 */ AM_MIRROR(0xe) AM_READWRITE8(isbx0_tdma_r, isbx0_tdma_w, 0xff00) // DMA-TERMINATE J8 (iSBX0)
- AM_RANGE(0x0330, 0x0333) /* PCS6:6 */ AM_DEVREADWRITE8("upd7220", upd7220_device, read, write, 0x00ff)
- AM_RANGE(0x0330, 0x0331) /* PCS6:7 */ AM_MIRROR(0xe) AM_READWRITE8(isbx1_tdma_r, isbx1_tdma_w, 0xff00) // DMA-TERMINATE J9 (iSBX1)
- AM_RANGE(0x0340, 0x034f) /* PCS6:8 */ AM_DEVREADWRITE8(ISBX_0_TAG, isbx_slot_device, mcs0_r, mcs0_w, 0x00ff) // 8272 CS0 (8/16-bit) J8 (iSBX0)
- AM_RANGE(0x0340, 0x034f) /* PCS6:9 */ AM_DEVREADWRITE8(ISBX_0_TAG, isbx_slot_device, mcs1_r, mcs1_w, 0xff00) // CS1 (16-bit) J8 (iSBX0)
- AM_RANGE(0x0350, 0x035f) /* PCS6:10 */ AM_DEVREADWRITE8(ISBX_0_TAG, isbx_slot_device, mcs1_r, mcs1_w, 0x00ff) // CS1 (8-bit) J8 (iSBX0)
- AM_RANGE(0x0350, 0x035f) /* PCS6:11 */ AM_DEVREADWRITE8(ISBX_0_TAG, isbx_slot_device, mdack_r, mdack_w, 0xff00) // DMA-ACK J8 (iSBX0)
- AM_RANGE(0x0360, 0x036f) /* PCS6:13 */ AM_DEVREADWRITE8(ISBX_1_TAG, isbx_slot_device, mcs0_r, mcs0_w, 0x00ff) // CS0 (8/16-bit) J9 (iSBX1)
- AM_RANGE(0x0360, 0x036f) /* PCS6:13 */ AM_DEVREADWRITE8(ISBX_1_TAG, isbx_slot_device, mcs1_r, mcs1_w, 0xff00) // CS1 (16-bit) J9 (iSBX1)
- AM_RANGE(0x0370, 0x037f) /* PCS6:14 */ AM_DEVREADWRITE8(ISBX_1_TAG, isbx_slot_device, mcs1_r, mcs1_w, 0x00ff) // CS1 (8-bit) J9 (iSBX1)
- AM_RANGE(0x0370, 0x037f) /* PCS6:15 */ AM_DEVREADWRITE8(ISBX_1_TAG, isbx_slot_device, mdack_r, mdack_w, 0xff00) // DMA-ACK J9 (iSBX1)
-#endif
-ADDRESS_MAP_END
-
-
-//-------------------------------------------------
-// ADDRESS_MAP( upd7220_map )
-//-------------------------------------------------
-
-static ADDRESS_MAP_START( upd7220_map, AS_0, 16, compis_state )
- ADDRESS_MAP_GLOBAL_MASK(0x7fff)
- AM_RANGE(0x00000, 0x7fff) AM_RAM AM_SHARE("video_ram")
+// AM_RANGE(0x0300, 0x0301) /* PCS6:0 */ AM_MIRROR(0xe) AM_WRITE8(tape_mon_w, 0x00ff)
+// AM_RANGE(0x0310, 0x0311) /* PCS6:3 */ AM_MIRROR(0xc) AM_DEVREADWRITE8(I8251A_TAG, i8251_device, data_r, data_w, 0xff00)
+// AM_RANGE(0x0312, 0x0313) /* PCS6:3 */ AM_MIRROR(0xc) AM_DEVREADWRITE8(I8251A_TAG, i8251_device, status_r, control_w, 0xff00)
+ AM_RANGE(0x0300, 0x030f) AM_READWRITE(pcs6_0_1_r, pcs6_0_1_w)
+ AM_RANGE(0x0310, 0x031f) AM_READWRITE(pcs6_2_3_r, pcs6_2_3_w)
+ AM_RANGE(0x0320, 0x032f) AM_READWRITE(pcs6_4_5_r, pcs6_4_5_w)
+ AM_RANGE(0x0330, 0x033f) AM_READWRITE(pcs6_6_7_r, pcs6_6_7_w)
+ AM_RANGE(0x0340, 0x034f) AM_READWRITE(pcs6_8_9_r, pcs6_8_9_w)
+ AM_RANGE(0x0350, 0x035f) AM_READWRITE(pcs6_10_11_r, pcs6_10_11_w)
+ AM_RANGE(0x0360, 0x036f) AM_READWRITE(pcs6_12_13_r, pcs6_12_13_w)
+ AM_RANGE(0x0370, 0x037f) AM_READWRITE(pcs6_14_15_r, pcs6_14_15_w)
ADDRESS_MAP_END
@@ -445,20 +562,6 @@ INPUT_PORTS_END
// DEVICE CONFIGURATION
//**************************************************************************
-//-------------------------------------------------
-// UPD7220_INTERFACE( hgdc_intf )
-//-------------------------------------------------
-
-UPD7220_DISPLAY_PIXELS_MEMBER( compis_state::hgdc_display_pixels )
-{
- UINT16 i,gfx = m_video_ram[(address & 0x7fff) >> 1];
- const pen_t *pen = m_palette->pens();
-
- for(i=0; i<16; i++)
- bitmap.pix32(y, x + i) = pen[BIT(gfx, i)];
-}
-
-
//-------------------------------------------------
// I80186_INTERFACE( cpu_intf )
//-------------------------------------------------
@@ -612,6 +715,7 @@ void compis_state::machine_reset()
m_uart->reset();
m_mpsc->reset();
m_ppi->reset();
+ m_graphics->reset();
m_isbx0->reset();
m_isbx1->reset();
}
@@ -628,41 +732,25 @@ void compis_state::machine_reset()
static MACHINE_CONFIG_START( compis, compis_state )
// basic machine hardware
- MCFG_CPU_ADD(I80186_TAG, I80186, XTAL_16MHz)
+ MCFG_CPU_ADD(I80186_TAG, I80186, XTAL_15_36MHz)
MCFG_CPU_PROGRAM_MAP(compis_mem)
MCFG_CPU_IO_MAP(compis_io)
MCFG_80186_IRQ_SLAVE_ACK(DEVREAD8(DEVICE_SELF, compis_state, compis_irq_callback))
MCFG_80186_TMROUT0_HANDLER(DEVWRITELINE(DEVICE_SELF, compis_state, tmr0_w))
MCFG_80186_TMROUT1_HANDLER(DEVWRITELINE(DEVICE_SELF, compis_state, tmr1_w))
- // video hardware
- MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate
- MCFG_SCREEN_SIZE(640, 400)
- MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 400-1)
- MCFG_SCREEN_UPDATE_DEVICE("upd7220", upd7220_device, screen_update)
-
- MCFG_DEVICE_ADD("upd7220", UPD7220, XTAL_4_433619MHz/2) // unknown clock
- MCFG_DEVICE_ADDRESS_MAP(AS_0, upd7220_map)
- MCFG_UPD7220_DISPLAY_PIXELS_CALLBACK_OWNER(compis_state, hgdc_display_pixels)
- MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
-
- MCFG_PALETTE_ADD_MONOCHROME("palette")
-
// devices
- MCFG_DEVICE_ADD(I80130_TAG, I80130, XTAL_16MHz/2)
+ MCFG_DEVICE_ADD(I80130_TAG, I80130, XTAL_15_36MHz/2)
MCFG_I80130_IRQ_CALLBACK(DEVWRITELINE(I80186_TAG, i80186_cpu_device, int0_w))
- //MCFG_I80130_SYSTICK_CALLBACK(DEVWRITELINE(I80130_TAG, i80130_device, ir3_w))
+ MCFG_I80130_SYSTICK_CALLBACK(DEVWRITELINE(I80130_TAG, i80130_device, ir3_w))
MCFG_I80130_DELAY_CALLBACK(DEVWRITELINE(I80130_TAG, i80130_device, ir7_w))
MCFG_I80130_BAUD_CALLBACK(WRITELINE(compis_state, tmr2_w))
MCFG_DEVICE_ADD(I8253_TAG, PIT8253, 0)
- MCFG_PIT8253_CLK0(XTAL_16MHz/8)
+ MCFG_PIT8253_CLK0(XTAL_15_36MHz/8)
MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE(I8274_TAG, i8274_device, rxtxcb_w))
- MCFG_PIT8253_CLK1(XTAL_16MHz/8)
- MCFG_PIT8253_CLK2(XTAL_16MHz/8)
+ MCFG_PIT8253_CLK1(XTAL_15_36MHz/8)
+ MCFG_PIT8253_CLK2(XTAL_15_36MHz/8)
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(compis_state, tmr5_w))
MCFG_DEVICE_ADD(I8255_TAG, I8255, 0)
@@ -673,12 +761,12 @@ static MACHINE_CONFIG_START( compis, compis_state )
MCFG_DEVICE_ADD(I8251A_TAG, I8251, 0)
MCFG_I8251_TXD_HANDLER(DEVWRITELINE(COMPIS_KEYBOARD_TAG, compis_keyboard_device, si_w))
MCFG_I8251_RXRDY_HANDLER(DEVWRITELINE(I80130_TAG, i80130_device, ir2_w))
- //MCFG_I8251_TXRDY_HANDLER(DEVWRITELINE(I80186_TAG, i80186_cpu_device, int1_w))
+ MCFG_I8251_TXRDY_HANDLER(DEVWRITELINE(I80186_TAG, i80186_cpu_device, int1_w))
MCFG_DEVICE_ADD(COMPIS_KEYBOARD_TAG, COMPIS_KEYBOARD, 0)
MCFG_COMPIS_KEYBOARD_OUT_TX_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_rxd))
- MCFG_I8274_ADD(I8274_TAG, XTAL_16MHz/4, 0, 0, 0, 0)
+ MCFG_I8274_ADD(I8274_TAG, XTAL_15_36MHz/4, 0, 0, 0, 0)
MCFG_Z80DART_OUT_TXDA_CB(DEVWRITELINE(RS232_A_TAG, rs232_port_device, write_txd))
MCFG_Z80DART_OUT_DTRA_CB(DEVWRITELINE(RS232_A_TAG, rs232_port_device, write_dtr))
MCFG_Z80DART_OUT_RTSA_CB(DEVWRITELINE(RS232_A_TAG, rs232_port_device, write_rts))
@@ -687,7 +775,7 @@ static MACHINE_CONFIG_START( compis, compis_state )
MCFG_Z80DART_OUT_RTSB_CB(DEVWRITELINE(RS232_B_TAG, rs232_port_device, write_rts))
MCFG_Z80DART_OUT_INT_CB(DEVWRITELINE(I80186_TAG, i80186_cpu_device, int3_w))
- MCFG_DEVICE_ADD(MM58174A_TAG, MM58274C, 0)
+ MCFG_DEVICE_ADD(MM58174A_TAG, MM58274C, XTAL_32_768kHz)
MCFG_MM58274C_MODE24(0) // 12 hour
MCFG_MM58274C_DAY1(1) // monday
@@ -711,6 +799,8 @@ static MACHINE_CONFIG_START( compis, compis_state )
MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE(compis_state, write_centronics_select))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
+ MCFG_COMPIS_GRAPHICS_SLOT_ADD(GRAPHICS_TAG, XTAL_15_36MHz/2, compis_graphics_cards, "hrg")
+
MCFG_ISBX_SLOT_ADD(ISBX_0_TAG, 0, isbx_cards, "fdc")
MCFG_ISBX_SLOT_MINTR0_CALLBACK(DEVWRITELINE(I80130_TAG, i80130_device, ir1_w))
MCFG_ISBX_SLOT_MINTR1_CALLBACK(DEVWRITELINE(I80130_TAG, i80130_device, ir0_w))
diff --git a/src/mame/drivers/cps2.cpp b/src/mame/drivers/cps2.cpp
index e7d0f7601ce..0ae3e7505ac 100644
--- a/src/mame/drivers/cps2.cpp
+++ b/src/mame/drivers/cps2.cpp
@@ -8154,6 +8154,43 @@ ROM_START( ssf2th )
ROM_END
ROM_START( ssf2xj )
+ ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */
+ ROM_LOAD16_WORD_SWAP( "sfxj.03d", 0x000000, 0x80000, CRC(50b52b37) SHA1(dc0330fcbffbc0077faa20d34a28d6a49b04639e) )
+ ROM_LOAD16_WORD_SWAP( "sfxj.04a", 0x080000, 0x80000, CRC(af7767b4) SHA1(61e7364408bf07c01634913c112b6245acce48ab) )
+ ROM_LOAD16_WORD_SWAP( "sfxj.05", 0x100000, 0x80000, CRC(f4ff18f5) SHA1(aa713c9e1a2eba35bf1c9b40bb262ff7e46b9ce4) )
+ ROM_LOAD16_WORD_SWAP( "sfxj.06b", 0x180000, 0x80000, CRC(413477c2) SHA1(63bf120566db0c23cc726e7cdbf78428582c694f) )
+ ROM_LOAD16_WORD_SWAP( "sfxj.07a", 0x200000, 0x80000, CRC(a18b3d83) SHA1(f08dd30a1b864fdd5d05d58a0b43e65077702d32) )
+ ROM_LOAD16_WORD_SWAP( "sfxj.08", 0x280000, 0x80000, CRC(2de76f10) SHA1(8cbe96dfeaa41306caa2819b82272ce3b0b9f926) )
+ ROM_LOAD16_WORD_SWAP( "sfx.09", 0x300000, 0x80000, CRC(642fae3f) SHA1(746df99b826b9837bba267104132161153c1daff) )
+
+ ROM_REGION( 0x1000000, "gfx", 0 )
+ ROMX_LOAD( "sfx.13m", 0x000000, 0x200000, CRC(cf94d275) SHA1(bf2a6d98a656d1cb5734da7836686242d3211137) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "sfx.15m", 0x000002, 0x200000, CRC(5eb703af) SHA1(4b302dbb66e8a5c2ad92798699391e981bada427) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "sfx.17m", 0x000004, 0x200000, CRC(ffa60e0f) SHA1(b21b1c749a8241440879bf8e7cb33968ccef97e5) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "sfx.19m", 0x000006, 0x200000, CRC(34e825c5) SHA1(4d320fc96d1ef0b9928a8ce801734245a4c097a5) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "sfx.14m", 0x800000, 0x100000, CRC(b7cc32e7) SHA1(0f4d26af338dab5dce5b7b34d32ad0c573434ace) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "sfx.16m", 0x800002, 0x100000, CRC(8376ad18) SHA1(f4456833fb396e6501f4174c0fe5fd63ea40a188) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "sfx.18m", 0x800004, 0x100000, CRC(f5b1b336) SHA1(4b060501e56b9d61294748da5387cdae5280ec4d) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "sfx.20m", 0x800006, 0x100000, CRC(459d5c6b) SHA1(32b11ba7a12004aff810d719bff7508204c7b7c0) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "sfx.21m", 0xc00000, 0x100000, CRC(e32854af) SHA1(1a5e11e9caa2b96108d89ae660ef1f6bcb469a74) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "sfx.23m", 0xc00002, 0x100000, CRC(760f2927) SHA1(491e28e14ee06821fc9e709efa7b91313bc0c2db) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "sfx.25m", 0xc00004, 0x100000, CRC(1ee90208) SHA1(83df1d9953560edddc2951ea426d29fb014e6a8a) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "sfx.27m", 0xc00006, 0x100000, CRC(f814400f) SHA1(ad6921af36d0bd5dfb89b1fb53c3ca3fd92d7204) , ROM_GROUPWORD | ROM_SKIP(6) )
+
+ ROM_REGION( QSOUND_SIZE, "audiocpu", 0 ) /* 64k for the audio CPU (+banks) */
+ ROM_LOAD( "sfx.01", 0x00000, 0x08000, CRC(b47b8835) SHA1(c8b2d50fe3a329bd0592ea160d505155d873dab1) )
+ ROM_CONTINUE( 0x10000, 0x18000 )
+ ROM_LOAD( "sfx.02", 0x28000, 0x20000, CRC(0022633f) SHA1(cab3afc79da53e3887eb1ccd1f4d19790728e6cd) )
+
+ ROM_REGION( 0x400000, "qsound", 0 ) /* QSound samples */
+ ROM_LOAD16_WORD_SWAP( "sfx.11m", 0x000000, 0x200000, CRC(9bdbd476) SHA1(a8520f77f30b97aae36408e0c4ca1ebbde1808a5) )
+ ROM_LOAD16_WORD_SWAP( "sfx.12m", 0x200000, 0x200000, CRC(a05e3aab) SHA1(d4eb9cae66c74e956569fea8b815156fbd420f83) )
+
+ SSF2T_JAPAN_KEY
+ROM_END
+
+
+ROM_START( ssf2xjr1 )
ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */
ROM_LOAD16_WORD_SWAP( "sfxj.03c", 0x000000, 0x80000, CRC(a7417b79) SHA1(189c3ed546bb2844e9fa9fe7e9aacef728bc8939) )
ROM_LOAD16_WORD_SWAP( "sfxj.04a", 0x080000, 0x80000, CRC(af7767b4) SHA1(61e7364408bf07c01634913c112b6245acce48ab) )
@@ -8190,7 +8227,7 @@ ROM_START( ssf2xj )
ROM_END
// interesting version, yellow case (rental?), shows OP instead of AM on startup, uses a different (unique) key to the usual Japan set
-ROM_START( ssf2xjr )
+ROM_START( ssf2xjr1r )
ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */
ROM_LOAD16_WORD_SWAP( "sfxo.03c", 0x000000, 0x80000, CRC(2ba33dc6) SHA1(ab31046c1604eae30e55eb0e03804c98765d578e) )
ROM_LOAD16_WORD_SWAP( "sfxo.04a", 0x080000, 0x80000, CRC(ba663dd7) SHA1(46baf0a48e4fd807098aa48e34625964b279a223) )
@@ -9568,8 +9605,9 @@ GAME( 1994, ssf2ta, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0,
GAME( 1994, ssf2th, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (Hispanic 940223)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2tu, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (USA 940323)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2tur1, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (USA 940223)", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, ssf2xj, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940223)", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, ssf2xjr, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940223 rent version)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, ssf2xj, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940311)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, ssf2xjr1, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940223)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, ssf2xjr1r, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940223 rent version)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, avsp, 0, cps2, cps2_3p3b, cps_state, cps2, ROT0, "Capcom", "Alien vs. Predator (Euro 940520)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, avspu, avsp, cps2, cps2_3p3b, cps_state, cps2, ROT0, "Capcom", "Alien vs. Predator (USA 940520)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, avspj, avsp, cps2, cps2_3p3b, cps_state, cps2, ROT0, "Capcom", "Alien vs. Predator (Japan 940520)", MACHINE_SUPPORTS_SAVE )
@@ -10752,7 +10790,7 @@ ROM_START( ssf2tbd )
CPS2_DEAD_KEY
ROM_END
-ROM_START( ssf2xjd )
+ROM_START( ssf2xjr1d )
ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */
ROM_LOAD16_WORD_SWAP( "sfxjd.03c", 0x000000, 0x80000, CRC(316de996) SHA1(4036539a554a9ccd8b5fc364dfc4c97f3d5efa96) )
ROM_LOAD16_WORD_SWAP( "sfxjd.04a", 0x080000, 0x80000, CRC(9bf3bb2e) SHA1(4bdc6fa585cc67d3b6695f390c95c518cba2bea6) )
@@ -11249,7 +11287,7 @@ GAME( 1994, avspd, avsp, dead_cps2, cps2_3p3b, cps_state, cps2, ROT0,
GAME( 1994, dstlku1d, dstlk, dead_cps2, cps2_2p6b, cps_state, cps2, ROT0, "bootleg", "Darkstalkers: The Night Warriors (USA 940705 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ringdstd, ringdest, dead_cps2, cps2_2p6b, cps_state, cps2, ROT0, "bootleg", "Ring of Destruction: Slammasters II (Euro 940902 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, ssf2tad, ssf2t, dead_cps2, cps2_2p6b, cps_state, cps2, ROT0, "bootleg", "Super Street Fighter II Turbo (Asia 940223 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, ssf2xjd, ssf2t, dead_cps2, cps2_2p6b, cps_state, cps2, ROT0, "bootleg", "Super Street Fighter II X: Grand Master Challenge (Japan 940223 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, ssf2xjr1d,ssf2t, dead_cps2, cps2_2p6b, cps_state, cps2, ROT0, "bootleg", "Super Street Fighter II X: Grand Master Challenge (Japan 940223 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, xmcotar1d,xmcota, dead_cps2, cps2_2p6b, cps_state, cps2, ROT0, "bootleg", "X-Men: Children of the Atom (Euro 950105 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, mshud, msh, dead_cps2, cps2_2p6b, cps_state, cps2, ROT0, "bootleg", "Marvel Super Heroes (US 951024 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, cybotsud, cybots, dead_cps2, cybots, cps_state, cps2, ROT0, "bootleg", "Cyberbots: Fullmetal Madness (USA 950424 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/dolphunk.cpp b/src/mame/drivers/dolphunk.cpp
index 329c14b446f..c670612a507 100644
--- a/src/mame/drivers/dolphunk.cpp
+++ b/src/mame/drivers/dolphunk.cpp
@@ -143,13 +143,13 @@ READ8_MEMBER( dauphin_state::port07_r )
keyin = ioport("X0")->read();
if (keyin != 0xff)
for (i = 0; i < 8; i++)
- if BIT(~keyin, i)
+ if (BIT(~keyin, i))
data = i | 0xc0;
keyin = ioport("X1")->read();
if (keyin != 0xff)
for (i = 0; i < 8; i++)
- if BIT(~keyin, i)
+ if (BIT(~keyin, i))
data = i | 0xc8;
if (data == m_last_key)
diff --git a/src/mame/drivers/ec184x.cpp b/src/mame/drivers/ec184x.cpp
index 8e965534720..26a5b577101 100644
--- a/src/mame/drivers/ec184x.cpp
+++ b/src/mame/drivers/ec184x.cpp
@@ -144,17 +144,20 @@ DRIVER_INIT_MEMBER( ec184x_state, ec1841 )
if (m_memory.boards > 4)
m_memory.boards = 4;
+ program.install_read_bank(0, EC1841_MEMBOARD_SIZE-1, "bank10");
+ program.install_write_bank(0, EC1841_MEMBOARD_SIZE-1, "bank20");
+
+ membank( "bank10" )->set_base( m_ram->pointer() );
+ membank( "bank20" )->set_base( m_ram->pointer() );
+
// 640K configuration is special -- 512K board mapped at 0 + 128K board mapped at 512K
// XXX verify this was actually the case
if (m_ram->size() == 640*1024) {
- program.install_read_bank(0, m_ram->size()-1, "bank10");
- program.install_write_bank(0, m_ram->size()-1, "bank20");
- } else {
- program.install_read_bank(0, EC1841_MEMBOARD_SIZE-1, "bank10");
- program.install_write_bank(0, EC1841_MEMBOARD_SIZE-1, "bank20");
+ program.install_read_bank(EC1841_MEMBOARD_SIZE, m_ram->size()-1, "bank11");
+ program.install_write_bank(EC1841_MEMBOARD_SIZE, m_ram->size()-1, "bank21");
+ membank( "bank11" )->set_base( m_ram->pointer() + EC1841_MEMBOARD_SIZE );
+ membank( "bank21" )->set_base( m_ram->pointer() + EC1841_MEMBOARD_SIZE );
}
- membank( "bank10" )->set_base( m_ram->pointer() );
- membank( "bank20" )->set_base( m_ram->pointer() );
}
MACHINE_RESET_MEMBER( ec184x_state, ec1841 )
diff --git a/src/mame/drivers/esd16.cpp b/src/mame/drivers/esd16.cpp
index 3b366429bc9..4911f1dfa3f 100644
--- a/src/mame/drivers/esd16.cpp
+++ b/src/mame/drivers/esd16.cpp
@@ -28,7 +28,8 @@ Year + Game PCB Notes
00 Deluxe 5 ESD (no date is marked on PCB)
00 Tang Tang ESD (no date is marked on PCB)
01 SWAT Police ESD (no date is marked on PCB)
-01 Jumping Pop ESD 11-09-98 (also original version by Emag Soft)
+01 Jumping Pop ESD 11-09-98 (version by Emag Soft)
+01 Jumping Pop ESD 12-04-00 (ESD branded version)
---------------------------------------------------------------------------
Other ESD games:
@@ -1267,6 +1268,32 @@ ROM_START( deluxe5b ) /* Deluxe 5 */
ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) /* AT27C010 mask rom */
ROM_END
+
+ROM_START( deluxe4u ) /* Deluxe 4 U */
+ ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "2.cu02", 0x000000, 0x040000, CRC(db213e1f) SHA1(bf9c49635f79b92a761715138528200106aa86ae) )
+ ROM_LOAD16_BYTE( "1.cu03", 0x000001, 0x040000, CRC(fbf14d74) SHA1(5ff5bf4ff55609452d5b8a49d8658f878541ce60) )
+
+ ROM_REGION( 0x40000, "audiocpu", 0 ) /* Z80 Code */
+ ROM_LOAD( "3.su06", 0x00000, 0x40000, CRC(31de379a) SHA1(a0c9a9cec7207cc4ba33abb68bef62d7eb8e75e9) )
+
+ ROM_REGION( 0x180000, "spr", 0 ) /* Sprites, 16x16x5 */
+ ROM_LOAD16_BYTE( "am27c020.ju06", 0x000000, 0x040000, CRC(8b853bce) SHA1(fa6e654fc965d88bb426b76cdce3417f357b25f3) ) /* AM27C020 mask roms with no label */
+ ROM_LOAD16_BYTE( "am27c020.ju05", 0x000001, 0x040000, CRC(bbe81779) SHA1(750387fb4aaa04b7f4f1d3985896f5e11219e3ea) )
+ ROM_LOAD16_BYTE( "am27c020.ju04", 0x080000, 0x040000, CRC(40fa2c2f) SHA1(b9d9bfdc9343f00bad9749c76472f064c509cfce) )
+ ROM_LOAD16_BYTE( "am27c020.ju03", 0x080001, 0x040000, CRC(aa130fd3) SHA1(46a55d8ca59a52e610600fdba76d9729528d2871) )
+ ROM_LOAD16_BYTE( "am27c020.ju07", 0x100000, 0x040000, CRC(d414c3af) SHA1(9299b07a8c7a3e30a1bb6028204a049a7cb510f7) )
+
+ ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */
+ // could not get good reads of these, not the same as deluxe5
+ ROM_LOAD16_BYTE( "fu35", 0x000000, 0x200000, BAD_DUMP CRC(6dc3b387) SHA1(9be25eb71db2387c83825e05c9129e7a911a1b5e) )
+ ROM_LOAD16_BYTE( "fu34", 0x000001, 0x200000, BAD_DUMP CRC(e99b6668) SHA1(9c38c542153ccb8b97b7efd9a28390af2fe2dd7e) )
+
+ ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
+ ROM_LOAD( "su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) )
+ROM_END
+
+
/* Tang Tang
Tang Tang (ESD)
@@ -1425,6 +1452,7 @@ ESD, 2001
PCB Layout
----------
+ESD 12-04-00
|------------------------------------------------------|
| TDA1519A 62256 PAL |
| SAMPLES.BIN YM3014 62256 BG0.BIN |
@@ -1564,7 +1592,7 @@ GAME( 1999, multchmp, 0, esd16, multchmp, driver_device, 0, ROT0, "ESD
GAME( 1998, multchmpk,multchmp, esd16, multchmp, driver_device, 0, ROT0, "ESD", "Multi Champ (Korea, older)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, multchmpa,multchmp, esd16, multchmp, driver_device, 0, ROT0, "ESD", "Multi Champ (World, older)", MACHINE_SUPPORTS_SAVE )
-GAME( 2001, jumppop, 0, jumppop, jumppop, driver_device, 0, ROT0, "ESD", "Jumping Pop (set 1)", MACHINE_SUPPORTS_SAVE ) /* Redesigned(?) ESD 11-09-98 with no ID# */
+GAME( 2001, jumppop, 0, jumppop, jumppop, driver_device, 0, ROT0, "ESD", "Jumping Pop (set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, jumppope, jumppop, jumppop, jumppop, driver_device, 0, ROT0, "Emag Soft", "Jumping Pop (set 2)", MACHINE_SUPPORTS_SAVE )
/* ESD 05-28-99 */
@@ -1581,6 +1609,7 @@ GAME( 2000, hedpanicf,hedpanic, hedpanic, hedpanic, driver_device, 0, ROT0, "ESD
GAME( 2000, deluxe5, 0, tangtang, hedpanic, driver_device, 0, ROT0, "ESD", "Deluxe 5 (ver. 0107, 07/01/2000, set 1)", MACHINE_SUPPORTS_SAVE ) // all 3 sets report the same version number?
GAME( 2000, deluxe5a, deluxe5, tangtang, hedpanic, driver_device, 0, ROT0, "ESD", "Deluxe 5 (ver. 0107, 07/01/2000, set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 2000, deluxe5b, deluxe5, tangtang, hedpanic, driver_device, 0, ROT0, "ESD", "Deluxe 5 (ver. 0107, 07/01/2000, set 3)", MACHINE_SUPPORTS_SAVE )
+GAME( 2000, deluxe4u, deluxe5, tangtang, hedpanic, driver_device, 0, ROT0, "ESD", "Deluxe 4 U (ver. 0107, 07/01/2000)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // bad dump of flash roms
GAME( 2000, tangtang, 0, tangtang, hedpanic, driver_device, 0, ROT0, "ESD", "Tang Tang (ver. 0526, 26/05/2000)", MACHINE_SUPPORTS_SAVE )
GAME( 2001, swatpolc, 0, hedpanic, swatpolc, driver_device, 0, ROT0, "ESD", "SWAT Police", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/eti660.cpp b/src/mame/drivers/eti660.cpp
index e84f149805c..c52f9e1f66f 100644
--- a/src/mame/drivers/eti660.cpp
+++ b/src/mame/drivers/eti660.cpp
@@ -221,7 +221,7 @@ READ8_MEMBER( eti660_state::pia_pa_r )
UINT8 i, data = 0xff;
for (i = 0; i < 4; i++)
- if BIT(m_keylatch, i)
+ if (BIT(m_keylatch, i))
return m_io_keyboard[i]->read();
return data;
diff --git a/src/mame/drivers/excali64.cpp b/src/mame/drivers/excali64.cpp
index 1e57d16ef40..d8b807c0384 100644
--- a/src/mame/drivers/excali64.cpp
+++ b/src/mame/drivers/excali64.cpp
@@ -360,9 +360,9 @@ WRITE8_MEMBER( excali64_state::port70_w )
{
m_sys_status = data;
m_crtc->set_unscaled_clock(BIT(data, 2) ? 2e6 : 1e6);
- if BIT(data, 1)
+ if (BIT(data, 1))
{
- // select 64k ram
+ // select 64k ram
membank("bankr1")->set_entry(0);
membank("bankr2")->set_entry(0);
membank("bankr3")->set_entry(0);
@@ -371,10 +371,9 @@ WRITE8_MEMBER( excali64_state::port70_w )
membank("bankw3")->set_entry(0);
membank("bankw4")->set_entry(0);
}
- else
- if BIT(data, 0)
+ else if (BIT(data, 0))
{
- // select videoram and hiresram
+ // select videoram and hiresram
membank("bankr1")->set_entry(1);
membank("bankr2")->set_entry(2);
membank("bankr3")->set_entry(2);
@@ -385,7 +384,7 @@ WRITE8_MEMBER( excali64_state::port70_w )
}
else
{
- // select rom, videoram, and main ram
+ // select rom, videoram, and main ram
membank("bankr1")->set_entry(1);
membank("bankr2")->set_entry(1);
membank("bankr3")->set_entry(1);
@@ -515,7 +514,7 @@ MC6845_UPDATE_ROW( excali64_state::update_row )
fg = col_base + (col >> 4);
bg = 32 + ((col >> 1) & 7);
- if BIT(col, 0)
+ if (BIT(col, 0))
{
UINT8 h = m_p_videoram[mem+0x1000] - 4;
if (h > 5)
diff --git a/src/mame/drivers/fp1100.cpp b/src/mame/drivers/fp1100.cpp
index 32705c7b923..3a8980a3f39 100644
--- a/src/mame/drivers/fp1100.cpp
+++ b/src/mame/drivers/fp1100.cpp
@@ -141,7 +141,7 @@ MC6845_UPDATE_ROW( fp1100_state::fp1100_update_row )
UINT16 mem,x;
UINT32 *p = &bitmap.pix32(y);
- if BIT(m_upd7801.porta, 4)
+ if (BIT(m_upd7801.porta, 4))
{ // green screen
for (x = 0; x < x_count; x++)
{
@@ -263,7 +263,7 @@ WRITE8_MEMBER( fp1100_state::colour_control_w )
m_col_border = data & 7;
- if BIT(data, 7)
+ if (BIT(data, 7))
m_col_display = (data >> 4) & 7;
else
m_col_cursor = data >> 4;
@@ -310,7 +310,7 @@ WRITE8_MEMBER( fp1100_state::porta_w )
{
m_upd7801.porta = data;
- if BIT(data, 5)
+ if (BIT(data, 5))
memset(m_p_videoram, 0, 0xc000);
}
@@ -340,7 +340,7 @@ d6 - Centronics strobe
*/
WRITE8_MEMBER( fp1100_state::portc_w )
{
- if BIT(m_irq_mask, 4)
+ if (BIT(m_irq_mask, 4))
m_maincpu->set_input_line_and_vector(0, BIT(data, 3) ? CLEAR_LINE : HOLD_LINE, 0xf0);
if (LOG) printf("%s: PortC:%X\n",machine().describe_context(),data);
m_upd7801.portc = data;
@@ -596,7 +596,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( fp1100_state::timer_c )
INTERRUPT_GEN_MEMBER(fp1100_state::fp1100_vblank_irq)
{
-// if BIT(m_irq_mask, 4)
+// if (BIT(m_irq_mask, 4))
// m_maincpu->set_input_line_and_vector(0, HOLD_LINE, 0xf8);
}
diff --git a/src/mame/drivers/gba.cpp b/src/mame/drivers/gba.cpp
index d1f46afc67d..ff49c4fe127 100644
--- a/src/mame/drivers/gba.cpp
+++ b/src/mame/drivers/gba.cpp
@@ -17,9 +17,103 @@
#include "sound/gb.h"
#include "includes/gba.h"
#include "bus/gba/rom.h"
-#include "rendlay.h"
#include "softlist.h"
+/* Sound Registers */
+#define SOUNDCNT_L HWLO(0x080) /* 0x4000080 2 R/W Control Stereo/Volume/Enable */
+#define SOUNDCNT_H HWHI(0x080) /* 0x4000082 2 R/W Control Mixing/DMA Control */
+#define SOUNDCNT_X HWLO(0x084) /* 0x4000084 2 R/W Control Sound on/off */
+ /* 0x4000086 2 - Unused */
+#define SOUNDBIAS HWLO(0x088) /* 0x4000088 2 BIOS Sound PWM Control */
+ /* 0x400008A 2 - Unused */
+
+/* DMA Registers (4 Transfer Channels) */
+#define DMASAD(c) WORD(0x0B0 + c * 0xC) /* 0x40000B0 4 W DMA 0 Source Address */
+#define DMADAD(c) WORD(0x0B4 + c * 0xC) /* 0x40000B4 4 W DMA 0 Destination Address */
+#define DMACNT_L(c) HWLO(0x0B8 + c * 0xC) /* 0x40000B8 2 W DMA 0 Word Count */
+#define DMACNT_H(c) HWHI(0x0B8 + c * 0xC) /* 0x40000BA 2 R/W DMA 0 Control */
+
+/* Serial Communication (1) Registers */
+#define SIODATA32 WORD(0x120) /* 0x4000120 4 R/W SIO Data (Normal-32bit Mode; shared with below) */
+#define SIOMULTI0 HWLO(0x120) /* 0x4000120 2 R/W SIO Data 0 (Parent) (Multi-Player Mode) */
+#define SIOMULTI1 HWHI(0x120) /* 0x4000122 2 R/W SIO Data 1 (1st Child) (Multi-Player Mode) */
+#define SIOMULTI2 HWLO(0x124) /* 0x4000124 2 R/W SIO Data 2 (2nd Child) (Multi-Player Mode) */
+#define SIOMULTI3 HWHI(0x124) /* 0x4000126 2 R/W SIO Data 3 (3rd Child) (Multi-Player Mode) */
+#define SIOCNT HWLO(0x128) /* 0x4000128 2 R/W SIO Control Register */
+#define SIOMLT_SEND HWHI(0x128) /* 0x400012A 2 R/W SIO Data (Local of MultiPlayer; shared below) */
+#define SIODATA8 HWHI(0x128) /* 0x400012A 2 R/W SIO Data (Normal-8bit and UART Mode) */
+ /* 0x400012C 2 - Unused */
+
+/* Keypad Input Registers */
+#define KEYINPUT HWLO(0x130) /* 0x4000130 2 R Key Status */
+#define KEYCNT HWHI(0x130) /* 0x4000132 2 R/W Key Interrupt Control */
+
+/* Serial Communication (2) Registers */
+#define RCNT HWLO(0x134) /* 0x4000134 2 R/W SIO Mode Select/General Purpose Data */
+#define IR HWHI(0x134) /* 0x4000136 2 R/W Ancient - Infrared Register (Prototypes only) */
+ /* 0x4000138 8 - Unused */
+#define JOYCNT HWLO(0x140) /* 0x4000140 2 R/W SIO JOY Bus Control */
+ /* 0x4000142 2 - Unused */
+#define JOY_RECV WORD(0x150) /* 0x4000150 4 R/W SIO JOY Bus Receive Data */
+#define JOY_TRANS WORD(0x154) /* 0x4000154 4 R/W SIO JOY Bus Transmit Data */
+#define JOYSTAT HWLO(0x158) /* 0x4000158 2 R/? SIO JOY Bus Receive Status */
+ /* 0x400015A 2 - Unused */
+
+/* Interrupt, Waitstate, and Power-Down Control Registers */
+#define IE HWLO(0x200) /* 0x4000200 2 R/W Interrupt Enable Register */
+#define IF HWHI(0x200) /* 0x4000202 2 R/W Interrupt Request Flags / IRQ Acknowledge */
+#define WAITCNT HWLO(0x204) /* 0x4000204 2 R/W Game Pak Waitstate Control */
+ /* 0x4000206 - Unused */
+#define IME HWLO(0x208) /* 0x4000208 2 R/W Interrupt Master Enable Register */
+ /* 0x400020A - Unused */
+ /* 0x4000300 1 R/W Undocumented - Post Boot Flag */
+ /* 0x4000301 1 W Undocumented - Power Down Control */
+ /* 0x4000302 - Unused */
+ /* 0x4000410 ? ? Undocumented - Purpose Unknown / Bug ??? 0FFh */
+ /* 0x4000411 - Unused */
+ /* 0x4000800 4 R/W Undocumented - Internal Memory Control (R/W) */
+ /* 0x4000804 - Unused */
+ /* 0x4xx0800 4 R/W Mirrors of 4000800h (repeated each 64K) */
+
+#define SOUNDBIAS_SET(val) HWLO_SET(0x088, val)
+
+#define DMASAD_SET(c, val) WORD_SET(0x0B0 + (c * 0xC), val)
+#define DMADAD_SET(c, val) WORD_SET(0x0B4 + (c * 0xC), val)
+#define DMACNT_L_SET(c, val) HWLO_SET(0x0B8 + (c * 0xC), val)
+#define DMACNT_H_SET(c, val) HWHI_SET(0x0B8 + (c * 0xC), val)
+#define DMACNT_H_RESET(c, val) HWHI_RESET(0x0B8 + (c * 0xC), val)
+
+#define SIOMULTI0_SET(val) HWLO_SET(0x120, val)
+#define SIOMULTI1_SET(val) HWHI_SET(0x120, val)
+#define SIOMULTI2_SET(val) HWLO_SET(0x124, val)
+#define SIOMULTI3_SET(val) HWHI_SET(0x124, val)
+
+#define SIOCNT_RESET(val) HWLO_RESET(0x128, val)
+
+#define KEYCNT_SET(val) HWHI_SET(0x130, val)
+
+#define RCNT_SET(val) HWLO_SET(0x134, val)
+
+#define JOYSTAT_SET(val) HWLO_SET(0x158, val)
+
+#define IF_SET(val) HWHI_SET(0x200, val)
+#define IF_RESET(val) HWHI_RESET(0x200, val)
+
+#define INT_VBL 0x0001
+#define INT_HBL 0x0002
+#define INT_VCNT 0x0004
+#define INT_TM0_OVERFLOW 0x0008
+#define INT_TM1_OVERFLOW 0x0010
+#define INT_TM2_OVERFLOW 0x0020
+#define INT_TM3_OVERFLOW 0x0040
+#define INT_SIO 0x0080
+#define INT_DMA0 0x0100
+#define INT_DMA1 0x0200
+#define INT_DMA2 0x0400
+#define INT_DMA3 0x0800
+#define INT_KEYPAD 0x1000
+#define INT_GAMEPAK 0x2000
+
#define VERBOSE_LEVEL (0)
static inline void ATTR_PRINTF(3,4) verboselog(device_t &device, int n_level, const char *s_fmt, ...)
@@ -31,39 +125,24 @@ static inline void ATTR_PRINTF(3,4) verboselog(device_t &device, int n_level, co
va_start( v, s_fmt );
vsprintf( buf, s_fmt, v );
va_end( v );
- device.logerror( "%08x: %s", device.machine().driver_data()->m_maincpu->pc(), buf );
+ device.logerror( "%08x: %s", device.machine().describe_context(), buf );
}
}
-static const UINT32 timer_clks[4] = { 16777216, 16777216/64, 16777216/256, 16777216/1024 };
+static const UINT32 timer_clks[4] = { XTAL_16_777216MHz, XTAL_16_777216MHz / 64, XTAL_16_777216MHz / 256, XTAL_16_777216MHz / 1024 };
-PALETTE_INIT_MEMBER(gba_state, gba)
-{
- UINT8 r, g, b;
- for( b = 0; b < 32; b++ )
- {
- for( g = 0; g < 32; g++ )
- {
- for( r = 0; r < 32; r++ )
- {
- palette.set_pen_color( ( b << 10 ) | ( g << 5 ) | r, pal5bit(r), pal5bit(g), pal5bit(b) );
- }
- }
- }
-}
-
void gba_state::request_irq(UINT32 int_type)
{
// set flag for later recovery
- m_IF |= int_type;
+ IF_SET(int_type);
// is this specific interrupt enabled?
- int_type &= m_IE;
+ int_type &= IE;
if (int_type != 0)
{
// master enable?
- if (m_IME & 1)
+ if (IME & 1)
{
m_maincpu->set_input_line(ARM7_IRQ_LINE, ASSERT_LINE);
m_maincpu->set_input_line(ARM7_IRQ_LINE, CLEAR_LINE);
@@ -73,17 +152,15 @@ void gba_state::request_irq(UINT32 int_type)
TIMER_CALLBACK_MEMBER(gba_state::dma_complete)
{
- int ctrl;
- FPTR ch;
static const UINT32 ch_int[4] = { INT_DMA0, INT_DMA1, INT_DMA2, INT_DMA3 };
- ch = param;
+ FPTR ch = param;
// printf("dma complete: ch %d\n", ch);
m_dma_timer[ch]->adjust(attotime::never);
- ctrl = m_dma_regs[(ch*3)+2] >> 16;
+ int ctrl = DMACNT_H(ch);
// IRQ
if (ctrl & 0x4000)
@@ -95,45 +172,40 @@ TIMER_CALLBACK_MEMBER(gba_state::dma_complete)
// always clear active for immediate DMAs though
if (!((ctrl>>9) & 1) || ((ctrl & 0x3000) == 0))
{
-// printf("clear active for ch %d\n", ch);
- m_dma_regs[(ch*3)+2] &= ~0x80000000; // clear "active" bit
+ DMACNT_H_RESET(ch, 0x8000); // clear "active" bit
}
else
{
// if repeat, reload the count
if ((ctrl>>9) & 1)
{
- m_dma_cnt[ch] = m_dma_regs[(ch*3)+2]&0xffff;
+ m_dma_cnt[ch] = DMACNT_L(ch);
// if increment & reload mode, reload the destination
if (((ctrl>>5)&3) == 3)
{
- m_dma_dst[ch] = m_dma_regs[(ch*3)+1];
+ m_dma_dst[ch] = DMADAD(ch);
}
}
}
}
-void gba_state::dma_exec(FPTR ch)
+void gba_state::dma_exec(int ch)
{
address_space &space = m_maincpu->space(AS_PROGRAM);
UINT32 src = m_dma_src[ch];
UINT32 dst = m_dma_dst[ch];
- int ctrl = m_dma_regs[(ch*3)+2] >> 16;
- int srcadd = m_dma_srcadd[ch];
- int dstadd = m_dma_dstadd[ch];
+ UINT16 ctrl = DMACNT_H(ch);
+ int srcadd = (ctrl >> 7) & 3;
+ int dstadd = (ctrl >> 5) & 3;
int cnt = m_dma_cnt[ch];
- if (!cnt)
+ if (cnt == 0)
{
if (ch == 3)
- {
cnt = 0x10000;
- }
else
- {
cnt = 0x4000;
- }
}
// override special parameters
@@ -243,10 +315,8 @@ void gba_state::dma_exec(FPTR ch)
void gba_state::audio_tick(int ref)
{
- if (!(m_SOUNDCNT_X & 0x80))
- {
+ if (!(SOUNDCNT_X & 0x80))
return;
- }
if (!ref)
{
@@ -257,11 +327,11 @@ void gba_state::audio_tick(int ref)
m_fifo_a_ptr = 0;
}
- if (m_SOUNDCNT_H & 0x200)
+ if (SOUNDCNT_H & 0x200)
{
m_ladac->write_signed8(m_fifo_a[m_fifo_a_ptr]^0x80);
}
- if (m_SOUNDCNT_H & 0x100)
+ if (SOUNDCNT_H & 0x100)
{
m_radac->write_signed8(m_fifo_a[m_fifo_a_ptr]^0x80);
}
@@ -272,12 +342,12 @@ void gba_state::audio_tick(int ref)
if (m_fifo_a_ptr == m_fifo_a_in)
{
// is a DMA set up to feed us?
- if ((m_dma_regs[(1*3)+1] == 0x40000a0) && ((m_dma_regs[(1*3)+2] & 0x30000000) == 0x30000000))
+ if ((DMADAD(1) == 0x40000a0) && ((DMACNT_H(1) & 0x3000) == 0x3000))
{
// channel 1 it is
dma_exec(1);
}
- if ((m_dma_regs[(2*3)+1] == 0x40000a0) && ((m_dma_regs[(2*3)+2] & 0x30000000) == 0x30000000))
+ if ((DMADAD(2) == 0x40000a0) && ((DMACNT_H(2) & 0x3000) == 0x3000))
{
// channel 2 it is
dma_exec(2);
@@ -293,11 +363,11 @@ void gba_state::audio_tick(int ref)
m_fifo_b_ptr = 0;
}
- if (m_SOUNDCNT_H & 0x2000)
+ if (SOUNDCNT_H & 0x2000)
{
m_lbdac->write_signed8(m_fifo_b[m_fifo_b_ptr]^0x80);
}
- if (m_SOUNDCNT_H & 0x1000)
+ if (SOUNDCNT_H & 0x1000)
{
m_rbdac->write_signed8(m_fifo_b[m_fifo_b_ptr]^0x80);
}
@@ -307,12 +377,12 @@ void gba_state::audio_tick(int ref)
if (m_fifo_b_ptr == m_fifo_b_in)
{
// is a DMA set up to feed us?
- if ((m_dma_regs[(1*3)+1] == 0x40000a4) && ((m_dma_regs[(1*3)+2] & 0x30000000) == 0x30000000))
+ if ((DMADAD(1) == 0x40000a4) && ((DMACNT_H(1) & 0x3000) == 0x3000))
{
// channel 1 it is
dma_exec(1);
}
- if ((m_dma_regs[(2*3)+1] == 0x40000a4) && ((m_dma_regs[(2*3)+2] & 0x30000000) == 0x30000000))
+ if ((DMADAD(2) == 0x40000a4) && ((DMACNT_H(2) & 0x3000) == 0x3000))
{
// channel 2 it is
dma_exec(2);
@@ -326,8 +396,6 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire)
static const UINT32 tmr_ints[4] = { INT_TM0_OVERFLOW, INT_TM1_OVERFLOW, INT_TM2_OVERFLOW, INT_TM3_OVERFLOW };
FPTR tmr = (FPTR) param;
-// printf("Timer %d expired, SOUNDCNT_H %04x\n", tmr, m_SOUNDCNT_H);
-
// "The reload value is copied into the counter only upon following two situations: Automatically upon timer overflows,"
// "or when the timer start bit becomes changed from 0 to 1."
if (m_timer_recalc[tmr] != 0)
@@ -347,28 +415,20 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire)
// check if timers 0 or 1 are feeding directsound
if (tmr == 0)
{
- if ((m_SOUNDCNT_H & 0x400) == 0)
- {
+ if (!(SOUNDCNT_H & 0x400))
audio_tick(0);
- }
- if ((m_SOUNDCNT_H & 0x4000) == 0)
- {
+ if (!(SOUNDCNT_H & 0x4000))
audio_tick(1);
- }
}
if (tmr == 1)
{
- if ((m_SOUNDCNT_H & 0x400) == 0x400)
- {
+ if (SOUNDCNT_H & 0x400)
audio_tick(0);
- }
- if ((m_SOUNDCNT_H & 0x4000) == 0x4000)
- {
+ if (SOUNDCNT_H & 0x4000)
audio_tick(1);
- }
}
// Handle count-up timing
@@ -381,7 +441,7 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire)
if( ( m_timer_regs[1] & 0x0000ffff ) == 0 )
{
m_timer_regs[1] |= m_timer_reload[1];
- if( ( m_timer_regs[1] & 0x400000 ) && ( m_IME != 0 ) )
+ if( ( m_timer_regs[1] & 0x400000 ) && ( IME != 0 ) )
{
request_irq(tmr_ints[1]);
}
@@ -391,7 +451,7 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire)
if( ( m_timer_regs[2] & 0x0000ffff ) == 0 )
{
m_timer_regs[2] |= m_timer_reload[2];
- if( ( m_timer_regs[2] & 0x400000 ) && ( m_IME != 0 ) )
+ if( ( m_timer_regs[2] & 0x400000 ) && ( IME != 0 ) )
{
request_irq(tmr_ints[2]);
}
@@ -401,7 +461,7 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire)
if( ( m_timer_regs[3] & 0x0000ffff ) == 0 )
{
m_timer_regs[3] |= m_timer_reload[3];
- if( ( m_timer_regs[3] & 0x400000 ) && ( m_IME != 0 ) )
+ if( ( m_timer_regs[3] & 0x400000 ) && ( IME != 0 ) )
{
request_irq(tmr_ints[3]);
}
@@ -419,7 +479,7 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire)
if( ( m_timer_regs[2] & 0x0000ffff ) == 0 )
{
m_timer_regs[2] |= m_timer_reload[2];
- if( ( m_timer_regs[2] & 0x400000 ) && ( m_IME != 0 ) )
+ if( ( m_timer_regs[2] & 0x400000 ) && ( IME != 0 ) )
{
request_irq(tmr_ints[2]);
}
@@ -429,7 +489,7 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire)
if( ( m_timer_regs[3] & 0x0000ffff ) == 0 )
{
m_timer_regs[3] |= m_timer_reload[3];
- if( ( m_timer_regs[3] & 0x400000 ) && ( m_IME != 0 ) )
+ if( ( m_timer_regs[3] & 0x400000 ) && ( IME != 0 ) )
{
request_irq(tmr_ints[3]);
}
@@ -445,7 +505,7 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire)
if( ( m_timer_regs[3] & 0x0000ffff ) == 0 )
{
m_timer_regs[3] |= m_timer_reload[3];
- if( ( m_timer_regs[3] & 0x400000 ) && ( m_IME != 0 ) )
+ if( ( m_timer_regs[3] & 0x400000 ) && ( IME != 0 ) )
{
request_irq(tmr_ints[3]);
}
@@ -455,7 +515,7 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire)
}
// are we supposed to IRQ?
- if ((m_timer_regs[tmr] & 0x400000) && (m_IME != 0))
+ if ((m_timer_regs[tmr] & 0x400000) && (IME != 0))
{
request_irq(tmr_ints[tmr]);
}
@@ -463,260 +523,32 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire)
TIMER_CALLBACK_MEMBER(gba_state::handle_irq)
{
- request_irq(m_IF);
+ request_irq(IF);
m_irq_timer->adjust(attotime::never);
}
+static const char *reg_names[] = {
+ /* Sound Registers */
+ "SOUND1CNT_L", "SOUND1CNT_H", "SOUND1CNT_X", "Unused",
+ "SOUND2CNT_L", "Unused", "SOUND2CNT_H", "Unused",
+ "SOUND3CNT_L", "SOUND3CNT_H", "SOUND3CNT_X", "Unused",
+ "SOUND4CNT_L", "Unused", "SOUND4CNT_H", "Unused",
+ "SOUNDCNT_L", "SOUNDCNT_H", "SOUNDCNT_X", "Unused",
+ "SOUNDBIAS", "Unused", "WAVE_RAM", "WAVE_RAM",
+ "WAVE_RAM", "WAVE_RAM", "WAVE_RAM", "WAVE_RAM",
+ "WAVE_RAM", "WAVE_RAM", "WAVE_RAM", "WAVE_RAM",
+ "WAVE_RAM", "WAVE_RAM", "WAVE_RAM", "WAVE_RAM",
+ "WAVE_RAM", "WAVE_RAM", "FIFO_A_L", "FIFO_A_H",
+ "FIFO_B_L", "FIFO_B_H"
+};
+
READ32_MEMBER(gba_state::gba_io_r)
{
UINT32 retval = 0;
- switch( offset )
+ switch( offset + 0x60/4 )
{
- case 0x0000/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: DISPCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_DISPCNT );
- retval |= m_DISPCNT;
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: Green Swap (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_GRNSWAP );
- retval |= m_GRNSWAP << 16;
- }
- break;
- case 0x0004/4:
- retval = (m_DISPSTAT & 0xffff) | (machine().first_screen()->vpos()<<16);
- break;
- case 0x0008/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG0CNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_BG0CNT );
- retval |= m_BG0CNT;
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG1CNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_BG1CNT );
- retval |= m_BG1CNT << 16;
- }
- break;
- case 0x000c/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG2CNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_BG2CNT );
- retval |= m_BG2CNT;
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG3CNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_BG3CNT );
- retval |= m_BG3CNT << 16;
- }
- break;
- case 0x0010/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG0HOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG0VOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0014/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG1HOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG1VOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0018/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG2HOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG2VOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x001c/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG3HOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG3VOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0020/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG2PA (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG2PB (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0024/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG2PC (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG2PD (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0028/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG2X_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG2X_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x002c/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG2Y_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG2Y_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0030/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG3PA (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG3PB (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0034/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG3PC (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG3PD (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0038/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG3X_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG3X_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x003c/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG3Y_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BG3Y_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0040/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: WIN0H (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: WIN1H (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0044/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: WIN0V (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: WIN1V (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0048/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: WININ (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_WININ );
- retval |= m_WININ;
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: WINOUT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_WINOUT );
- retval |= m_WINOUT << 16;
- }
- break;
- case 0x004c/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: MOSAIC (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0050/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BLDCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_BLDCNT );
- retval |= m_BLDCNT;
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BLDALPHA (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_BLDALPHA );
- retval |= m_BLDALPHA << 16;
- }
- break;
- case 0x0054/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: BLDY (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0058/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x005c/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
case 0x0060/4:
retval = m_gbsound->sound_r(space, 0) | m_gbsound->sound_r(space, 1)<<16 | m_gbsound->sound_r(space, 2)<<24;
break;
@@ -745,24 +577,12 @@ READ32_MEMBER(gba_state::gba_io_r)
retval = m_gbsound->sound_r(space, 0x14) | m_gbsound->sound_r(space, 0x15)<<8;
if( ACCESSING_BITS_16_31 )
{
- verboselog(*this, 2, "GBA IO Register Read: SOUNDCNT_H (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_SOUNDCNT_H );
- retval |= m_SOUNDCNT_H << 16;
+ retval |= SOUNDCNT_H << 16;
}
break;
case 0x0084/4:
retval = m_gbsound->sound_r(space, 0x16);
break;
- case 0x0088/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: SOUNDBIAS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_SOUNDBIAS );
- retval |= m_SOUNDBIAS;
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
case 0x0090/4:
retval = m_gbsound->wave_r(space, 0) | m_gbsound->wave_r(space, 1)<<8 | m_gbsound->wave_r(space, 2)<<16 | m_gbsound->wave_r(space, 3)<<24;
break;
@@ -781,28 +601,60 @@ READ32_MEMBER(gba_state::gba_io_r)
break;
case 0x00b0/4:
case 0x00b4/4:
+ // read only
+ break;
case 0x00b8/4:
+ if (ACCESSING_BITS_0_15)
+ {
+ // read only
+ }
+ if (ACCESSING_BITS_16_31)
+ {
+ retval |= DMACNT_H(0) << 16;
+ }
+ break;
case 0x00bc/4:
case 0x00c0/4:
+ // read only
+ break;
case 0x00c4/4:
+ if (ACCESSING_BITS_0_15)
+ {
+ // read only
+ }
+ if (ACCESSING_BITS_16_31)
+ {
+ retval |= DMACNT_H(1) << 16;
+ }
+ break;
case 0x00c8/4:
case 0x00cc/4:
+ // read only
+ break;
case 0x00d0/4:
+ if (ACCESSING_BITS_0_15)
+ {
+ // read only
+ }
+ if (ACCESSING_BITS_16_31)
+ {
+ retval |= DMACNT_H(2) << 16;
+ }
+ break;
case 0x00d4/4:
case 0x00d8/4:
+ // read only
+ break;
case 0x00dc/4:
- {
// no idea why here, but it matches VBA better
// note: this suspicious piece of code crashes "Buffy The Vampire Slayer" (08008DB4) and "The Ant Bully", so disable it for now
- #if 0
- if (((offset-0xb0/4) % 3) == 2)
- {
- retval = m_dma_regs[offset-(0xb0/4)] & 0xff000000;
- }
- else
- #endif
-
- retval = m_dma_regs[offset-(0xb0/4)];
+ if (ACCESSING_BITS_0_15)
+ {
+ // read only
+ }
+ if (ACCESSING_BITS_16_31)
+ {
+ retval |= DMACNT_H(3) << 16;
}
break;
case 0x0100/4:
@@ -812,7 +664,7 @@ READ32_MEMBER(gba_state::gba_io_r)
{
UINT32 elapsed;
double time, ticks;
- int timer = offset-(0x100/4);
+ int timer = offset + 0x60/4 - 0x100/4;
// printf("Read timer reg %x (PC=%x)\n", timer, space.device().safe_pc());
@@ -825,17 +677,16 @@ READ32_MEMBER(gba_state::gba_io_r)
}
else
{
- time = m_tmr_timer[timer]->elapsed().as_double();
+ time = m_tmr_timer[timer]->elapsed().as_double();
- ticks = (double)(0x10000 - (m_timer_regs[timer] & 0xffff));
+ ticks = (double)(0x10000 - (m_timer_regs[timer] & 0xffff));
-// printf("time %f ticks %f 1/hz %f\n", time, ticks, 1.0 / m_timer_hz[timer]);
+ // printf("time %f ticks %f 1/hz %f\n", time, ticks, 1.0 / m_timer_hz[timer]);
- time *= ticks;
- time /= (1.0 / m_timer_hz[timer]);
-
- elapsed = (UINT32)time;
+ time *= ticks;
+ time /= (1.0 / m_timer_hz[timer]);
+ elapsed = (UINT32)time;
}
// printf("elapsed = %x\n", elapsed);
@@ -849,42 +700,6 @@ READ32_MEMBER(gba_state::gba_io_r)
retval = (m_timer_regs[timer] & 0xffff0000) | (elapsed & 0xffff);
}
break;
- case 0x0120/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: SIOMULTI0 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_SIOMULTI0 );
- retval |= m_SIOMULTI0;
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: SIOMULTI1 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_SIOMULTI1 );
- retval |= m_SIOMULTI1 << 16;
- }
- break;
- case 0x0124/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: SIOMULTI2 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_SIOMULTI2 );
- retval |= m_SIOMULTI2;
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: SIOMULTI3 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_SIOMULTI3 );
- retval |= m_SIOMULTI3 << 16;
- }
- break;
- case 0x0128/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: SIOCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_SIOCNT );
- retval |= m_SIOCNT;
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: SIODATA8 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_SIODATA8 );
- retval |= m_SIODATA8 << 16;
- }
- break;
case 0x0130/4:
if( ACCESSING_BITS_0_15 ) // KEYINPUT
{
@@ -892,404 +707,59 @@ READ32_MEMBER(gba_state::gba_io_r)
}
else if( ACCESSING_BITS_16_31 )
{
- verboselog(*this, 2, "GBA IO Register Read: KEYCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_KEYCNT );
- retval |= m_KEYCNT << 16;
- }
- break;
- case 0x0134/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: RCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_RCNT );
- retval |= m_RCNT;
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: IR (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0140/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: JOYCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_JOYCNT );
- retval |= m_JOYCNT;
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0150/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: JOY_RECV_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_JOY_RECV & 0x0000ffff );
- retval |= m_JOY_RECV & 0x0000ffff;
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: JOY_RECV_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, ( m_JOY_RECV & 0xffff0000 ) >> 16 );
- retval |= m_JOY_RECV & 0xffff0000;
- }
- break;
- case 0x0154/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: JOY_TRANS_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_JOY_TRANS & 0x0000ffff );
- retval |= m_JOY_TRANS & 0x0000ffff;
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: JOY_TRANS_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, ( m_JOY_TRANS & 0xffff0000 ) >> 16 );
- retval |= m_JOY_TRANS & 0xffff0000;
- }
- break;
- case 0x0158/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: JOYSTAT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_JOYSTAT );
- retval |= m_JOYSTAT;
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
+ retval |= KEYCNT << 16;
}
break;
case 0x0200/4:
- if( ACCESSING_BITS_0_15 )
- {
-// printf("Read: IE (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_IE );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: IF (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_IF );
- }
-
- retval = m_IE | (m_IF<<16);
- break;
- case 0x0204/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: WAITCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_WAITCNT );
- retval |= m_WAITCNT;
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0208/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Read: IME (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_IME );
- retval |= m_IME;
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
- }
- break;
- case 0x0300/4:
- retval = m_HALTCNT << 8;
+ retval = IE | (IF << 16);
break;
default:
-// verboselog(*this, 0, "Unknown GBA I/O register Read: %08x (%08x)\n", 0x04000000 + ( offset << 2 ), ~mem_mask );
+ if( ACCESSING_BITS_0_15 )
+ {
+ retval |= m_regs[offset] & 0x0000ffff;
+ }
+ if( ACCESSING_BITS_16_31 )
+ {
+ retval |= m_regs[offset] & 0xffff0000;
+ }
break;
}
+
+// assert_always(offset < ARRAY_LENGTH(reg_names) / 2, "Not enough register names in gba_state");
+
+ if (ACCESSING_BITS_0_15)
+ {
+ verboselog(*this, 2, "GBA I/O Read: %s = %04x\n", reg_names[offset * 2], retval & 0x0000ffff);
+ }
+ if (ACCESSING_BITS_16_31)
+ {
+ verboselog(*this, 2, "GBA I/O Read: %s = %04x\n", reg_names[offset * 2 + 1], (retval & 0xffff0000) >> 16);
+ }
+
return retval;
}
WRITE32_MEMBER(gba_state::gba_io_w)
{
- switch( offset )
+ UINT8 soundcnt_x = SOUNDCNT_X;
+ UINT16 siocnt = SIOCNT;
+ UINT16 dmachcnt[4] = { DMACNT_H(0), DMACNT_H(1), DMACNT_H(2), DMACNT_H(3) };
+
+ COMBINE_DATA(&m_regs[offset]);
+
+// assert_always(offset < ARRAY_LENGTH(reg_names) / 2, "Not enough register names in gba_state");
+
+ if (ACCESSING_BITS_0_15)
+ {
+ verboselog(*this, 2, "GBA I/O Write: %s = %04x\n", reg_names[offset * 2], data & 0x0000ffff);
+ }
+ if (ACCESSING_BITS_16_31)
+ {
+ verboselog(*this, 2, "GBA I/O Write: %s = %04x\n", reg_names[offset * 2 + 1], (data & 0xffff0000) >> 16);
+ }
+
+ switch( offset + 0x60/4 )
{
- case 0x0000/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: DISPCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_DISPCNT);
- if(m_DISPCNT & (DISPCNT_WIN0_EN | DISPCNT_WIN1_EN))
- {
- m_windowOn = 1;
- }
- else
- {
- m_windowOn = 0;
- }
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: Green Swap (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- m_GRNSWAP = ( m_GRNSWAP & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0004/4:
- COMBINE_DATA(&m_DISPSTAT);
- break;
- case 0x0008/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG0CNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_BG0CNT);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG1CNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- m_BG1CNT = ( m_BG1CNT & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x000c/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG2CNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_BG2CNT);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG3CNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- m_BG3CNT = ( m_BG3CNT & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0010/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG0HOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_BG0HOFS);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG0VOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- m_BG0VOFS = ( m_BG0VOFS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0014/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG1HOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_BG1HOFS);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG1VOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- m_BG1VOFS = ( m_BG1VOFS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0018/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG2HOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_BG2HOFS);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG2VOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- m_BG2VOFS = ( m_BG2VOFS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x001c/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG3HOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_BG3HOFS);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG3VOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- m_BG3VOFS = ( m_BG3VOFS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0020/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG2PA (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_BG2PA);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG2PB (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- m_BG2PB = ( m_BG2PB & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0024/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG2PC (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_BG2PC);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG2PD (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- m_BG2PD = ( m_BG2PD & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0028/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG2X_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG2X_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- }
- COMBINE_DATA(&m_BG2X);
- m_gfxBG2Changed |= 1;
- break;
- case 0x002c/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG2Y_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG2Y_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- }
- COMBINE_DATA(&m_BG2Y);
- m_gfxBG2Changed |= 2;
- break;
- case 0x0030/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG3PA (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_BG3PA);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG3PB (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- m_BG3PB = ( m_BG3PB & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0034/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG3PC (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_BG3PC);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG3PD (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- m_BG3PD = ( m_BG3PD & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0038/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG3X_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG3X_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- }
- COMBINE_DATA(&m_BG3X);
- m_gfxBG3Changed |= 1;
- break;
- case 0x003c/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG3Y_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BG3Y_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- }
- COMBINE_DATA(&m_BG3Y);
- m_gfxBG3Changed |= 2;
- break;
- case 0x0040/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: WIN0H (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_WIN0H);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: WIN1H (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- m_WIN1H = ( m_WIN1H & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0044/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: WIN0V (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_WIN0V);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: WIN1V (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- m_WIN1V = ( m_WIN1V & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0048/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: WININ (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_WININ);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: WINOUT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- m_WINOUT = ( m_WINOUT & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x004c/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: MOSAIC (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_MOSAIC);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- }
- break;
- case 0x0050/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BLDCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_BLDCNT);
- if(m_BLDCNT & BLDCNT_SFX)
- {
- m_fxOn = 1;
- }
- else
- {
- m_fxOn = 0;
- }
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BLDALPHA (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- m_BLDALPHA = ( m_BLDALPHA & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0054/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: BLDY (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_BLDY);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- }
- break;
- case 0x0058/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- }
- break;
- case 0x005c/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
- }
- break;
case 0x0060/4:
if( ACCESSING_BITS_0_7 ) // SOUNDCNTL
{
@@ -1390,11 +860,8 @@ WRITE32_MEMBER(gba_state::gba_io_w)
if (ACCESSING_BITS_16_31)
{
- data >>= 16;
- m_SOUNDCNT_H = data;
-
// DAC A reset?
- if (data & 0x0800)
+ if (data & 0x08000000)
{
m_fifo_a_ptr = 17;
m_fifo_a_in = 17;
@@ -1403,7 +870,7 @@ WRITE32_MEMBER(gba_state::gba_io_w)
}
// DAC B reset?
- if (data & 0x8000)
+ if (data & 0x80000000)
{
m_fifo_b_ptr = 17;
m_fifo_b_in = 17;
@@ -1416,7 +883,7 @@ WRITE32_MEMBER(gba_state::gba_io_w)
if( ACCESSING_BITS_0_7 )
{
m_gbsound->sound_w(space, 0x16, data);
- if ((data & 0x80) && !(m_SOUNDCNT_X & 0x80))
+ if ((data & 0x80) && !(soundcnt_x & 0x80))
{
m_fifo_a_ptr = m_fifo_a_in = 17;
m_fifo_b_ptr = m_fifo_b_in = 17;
@@ -1425,18 +892,6 @@ WRITE32_MEMBER(gba_state::gba_io_w)
m_lbdac->write_signed8(0x80);
m_rbdac->write_signed8(0x80);
}
- m_SOUNDCNT_X = data;
- }
- break;
- case 0x0088/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: SOUNDBIAS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
- COMBINE_DATA(&m_SOUNDBIAS);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
}
break;
case 0x0090/4:
@@ -1531,61 +986,36 @@ WRITE32_MEMBER(gba_state::gba_io_w)
m_fifo_b_in %= 17;
m_fifo_b[m_fifo_b_in++] = (data>>24)&0xff;
break;
- case 0x00b0/4:
- case 0x00b4/4:
case 0x00b8/4:
-
- case 0x00bc/4:
- case 0x00c0/4:
case 0x00c4/4:
-
- case 0x00c8/4:
- case 0x00cc/4:
case 0x00d0/4:
-
- case 0x00d4/4:
- case 0x00d8/4:
case 0x00dc/4:
+ if( ACCESSING_BITS_16_31 )
{
- int ch;
+ int ch = (offset + 0x60/4 - 0xb0/4) / 3;
- offset -= (0xb0/4);
+ int ctrl = data>>16;
- ch = offset / 3;
+ // Note: Metroid Fusion fails if we enforce the "rising edge" requirement... (who wrote this note?)
-// printf("%08x: DMA(%d): %x to reg %d (mask %08x)\n", space.device().safe_pc(), ch, data, offset%3, ~mem_mask);
+ // Note: Caesar's Palace Advance fails if we DO NOT enforce the "rising edge" requirement
+ // (value @ 0x3003F9C is accidentally incremented because DMA completion interrupt is accidentally triggered @ 08002F2A)
- if (((offset % 3) == 2) && ((~mem_mask & 0xffff0000) == 0))
+ // retrigger/restart on a rising edge.
+ // also reload internal regs
+ if ((ctrl & 0x8000) && !(dmachcnt[ch] & 0x8000))
{
- int ctrl = data>>16;
+ m_dma_src[ch] = DMASAD(ch);
+ m_dma_dst[ch] = DMADAD(ch);
+ m_dma_cnt[ch] = DMACNT_L(ch);
- // Note: Metroid Fusion fails if we enforce the "rising edge" requirement... (who wrote this note?)
-
- // Note: Caesar's Palace Advance fails if we DO NOT enforce the "rising edge" requirement
- // (value @ 0x3003F9C is accidentally incremented because DMA completion interrupt is accidentally triggered @ 08002F2A)
-
- // retrigger/restart on a rising edge.
- // also reload internal regs
- if ((ctrl & 0x8000) && !(m_dma_regs[offset] & 0x80000000))
+ // immediate start
+ if ((ctrl & 0x3000) == 0)
{
- m_dma_src[ch] = m_dma_regs[(ch*3)+0];
- m_dma_dst[ch] = m_dma_regs[(ch*3)+1];
- m_dma_srcadd[ch] = (ctrl>>7)&3;
- m_dma_dstadd[ch] = (ctrl>>5)&3;
-
- COMBINE_DATA(&m_dma_regs[offset]);
- m_dma_cnt[ch] = m_dma_regs[(ch*3)+2]&0xffff;
-
- // immediate start
- if ((ctrl & 0x3000) == 0)
- {
- dma_exec(ch);
- return;
- }
+ dma_exec(ch);
+ return;
}
}
-
- COMBINE_DATA(&m_dma_regs[offset]);
}
break;
case 0x0100/4:
@@ -1596,18 +1026,18 @@ WRITE32_MEMBER(gba_state::gba_io_w)
double rate, clocksel;
UINT32 old_timer_regs;
- offset -= (0x100/4);
+ int timer = offset + 0x60/4 - 0x100/4;
- old_timer_regs = m_timer_regs[offset];
+ old_timer_regs = m_timer_regs[timer];
- m_timer_regs[offset] = (m_timer_regs[offset] & ~(mem_mask & 0xFFFF0000)) | (data & (mem_mask & 0xFFFF0000));
+ m_timer_regs[timer] = (m_timer_regs[timer] & ~(mem_mask & 0xFFFF0000)) | (data & (mem_mask & 0xFFFF0000));
-// printf("%x to timer %d (mask %x PC %x)\n", data, offset, ~mem_mask, space.device().safe_pc());
+// printf("%x to timer %d (mask %x PC %x)\n", data, timer, ~mem_mask, space.device().safe_pc());
if (ACCESSING_BITS_0_15)
{
- m_timer_reload[offset] = ((m_timer_reload[offset] & ~mem_mask) | (data & mem_mask)) & 0x0000FFFF;
- m_timer_recalc[offset] = 1;
+ m_timer_reload[timer] = ((m_timer_reload[timer] & ~mem_mask) | (data & mem_mask)) & 0x0000FFFF;
+ m_timer_recalc[timer] = 1;
}
// enabling this timer?
@@ -1617,65 +1047,40 @@ WRITE32_MEMBER(gba_state::gba_io_w)
if ((old_timer_regs & 0x00800000) == 0) // start bit 0 -> 1
{
- m_timer_regs[offset] = (m_timer_regs[offset] & 0xFFFF0000) | (m_timer_reload[offset] & 0x0000FFFF);
+ m_timer_regs[timer] = (m_timer_regs[timer] & 0xFFFF0000) | (m_timer_reload[timer] & 0x0000FFFF);
}
- rate = 0x10000 - (m_timer_regs[offset] & 0xffff);
+ rate = 0x10000 - (m_timer_regs[timer] & 0xffff);
- clocksel = timer_clks[(m_timer_regs[offset] >> 16) & 3];
+ clocksel = timer_clks[(m_timer_regs[timer] >> 16) & 3];
final = clocksel / rate;
- m_timer_hz[offset] = final;
+ m_timer_hz[timer] = final;
- m_timer_recalc[offset] = 0;
+ m_timer_recalc[timer] = 0;
-// printf("Enabling timer %d @ %f Hz\n", offset, final);
+// printf("Enabling timer %d @ %f Hz\n", timer, final);
// enable the timer
if( !(data & 0x40000) ) // if we're not in Count-Up mode
{
attotime time = attotime::from_hz(final);
- m_tmr_timer[offset]->adjust(time, offset, time);
+ m_tmr_timer[timer]->adjust(time, timer, time);
}
}
}
break;
- case 0x0120/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: SIOMULTI0 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
- COMBINE_DATA(&m_SIOMULTI0);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: SIOMULTI1 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
- m_SIOMULTI1 = ( m_SIOMULTI1 & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0124/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: SIOMULTI2 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
- COMBINE_DATA(&m_SIOMULTI2);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: SIOMULTI3 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
- m_SIOMULTI3 = ( m_SIOMULTI3 & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
case 0x0128/4:
if( ACCESSING_BITS_0_15 )
{
- verboselog(*this, 2, "GBA IO Register Write: SIOCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
// normal mode ?
- if (((m_RCNT & 0x8000) == 0) && ((data & 0x2000) == 0))
+ if (!(RCNT & 0x8000) && !(data & 0x2000))
{
// start ?
- if (((m_SIOCNT & 0x0080) == 0) && ((data & 0x0080) != 0))
+ if (!(siocnt & 0x0080) && (data & 0x0080))
{
- data &= ~0x0080;
+ SIOCNT_RESET(0x0080);
// request interrupt ?
if (data & 0x4000)
{
@@ -1683,199 +1088,48 @@ WRITE32_MEMBER(gba_state::gba_io_w)
}
}
}
- COMBINE_DATA(&m_SIOCNT);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: SIODATA8 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
- m_SIODATA8 = ( m_SIODATA8 & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0130/4:
- if( ACCESSING_BITS_16_31 )
- {
-// printf("KEYCNT = %04x\n", data>>16);
- verboselog(*this, 2, "GBA IO Register Write: KEYCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
- m_KEYCNT = ( m_KEYCNT & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0134/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: RCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
- COMBINE_DATA(&m_RCNT);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: IR (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
- m_IR = ( m_IR & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0140/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: JOYCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
- COMBINE_DATA(&m_JOYCNT);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
- }
- break;
- case 0x0150/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: JOY_RECV_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
- COMBINE_DATA(&m_JOY_RECV);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: JOY_RECV_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
- m_JOY_RECV = ( m_JOY_RECV & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0154/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: JOY_TRANS_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
- COMBINE_DATA(&m_JOY_TRANS);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: JOY_TRANS_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
- m_JOY_TRANS = ( m_JOY_TRANS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
- }
- break;
- case 0x0158/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: JOYSTAT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
- COMBINE_DATA(&m_JOYSTAT);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
}
break;
case 0x0200/4:
if( ACCESSING_BITS_0_15 )
{
-// printf("IE (%08x) = %04x raw %x (%08x) (scan %d PC %x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, data, ~mem_mask, machine.first_screen()->vpos(), space.device().safe_pc());
- COMBINE_DATA(&m_IE);
#if 0
- if (m_IE & m_IF)
+ if (IE & IF)
{
- request_irq(m_IF);
+ request_irq(IF);
}
#endif
}
if( ACCESSING_BITS_16_31 )
{
- verboselog(*this, 2, "GBA IO Register Write: IF (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ) + 2, ( data & mem_mask ) >> 16, ~mem_mask );
- m_IF &= ~( ( data & mem_mask ) >> 16 );
+ IF_RESET(( data & mem_mask ) >> 16);
// if we still have interrupts, yank the IRQ line again
- if (m_IF)
+ if (IF)
{
m_irq_timer->adjust(m_maincpu->clocks_to_attotime(120));
}
}
break;
- case 0x0204/4:
- if( ACCESSING_BITS_0_15 )
- {
- verboselog(*this, 2, "GBA IO Register Write: WAITCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
- COMBINE_DATA(&m_WAITCNT);
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
- }
- break;
case 0x0208/4:
if( ACCESSING_BITS_0_15 )
{
- verboselog(*this, 3, "GBA IO Register Write: IME (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
- COMBINE_DATA(&m_IME);
- if (m_IF)
+ if (IF)
{
m_irq_timer->adjust(attotime::zero);
}
}
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 3, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
- }
break;
case 0x0300/4:
- if( ACCESSING_BITS_0_15 )
+ if( ACCESSING_BITS_8_15 )
{
- if( ACCESSING_BITS_0_7 )
- {
- verboselog(*this, 2, "GBA IO Register Write: POSTFLG (%08x) = %02x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x000000ff, ~mem_mask );
- m_POSTFLG = data & 0x000000ff;
- }
- else
- {
- m_HALTCNT = data & 0x000000ff;
-
- // either way, wait for an IRQ
- m_maincpu->spin_until_interrupt();
- }
- }
- if( ACCESSING_BITS_16_31 )
- {
- verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
+ // power down commanded, halt the CPU
+ m_maincpu->spin_until_interrupt();
}
break;
- default:
-// verboselog(machine, 0, "Unknown GBA I/O register write: %08x = %08x (%08x)\n", 0x04000000 + ( offset << 2 ), data, ~mem_mask );
- break;
}
}
-static inline UINT32 COMBINE_DATA32_16(UINT32 prev, UINT32 data, UINT32 mem_mask)
-{
- COMBINE_DATA(&prev);
- switch(mem_mask)
- {
- case 0x000000ff:
- prev &= 0xffff00ff;
- prev |= data << 8;
- break;
- case 0x0000ff00:
- prev &= 0xffffff00;
- prev |= data >> 8;
- break;
- case 0x00ff0000:
- prev &= 0x00ffffff;
- prev |= data << 8;
- break;
- case 0xff000000:
- prev &= 0xff00ffff;
- prev |= data >> 8;
- break;
- default:
- break;
- }
- return prev;
-}
-
-WRITE32_MEMBER(gba_state::gba_pram_w)
-{
- m_gba_pram[offset] = COMBINE_DATA32_16(m_gba_pram[offset], data, mem_mask);
-}
-
-WRITE32_MEMBER(gba_state::gba_vram_w)
-{
- m_gba_vram[offset] = COMBINE_DATA32_16(m_gba_vram[offset], data, mem_mask);
-}
-
-WRITE32_MEMBER(gba_state::gba_oam_w)
-{
- m_gba_oam[offset] = COMBINE_DATA32_16(m_gba_oam[offset], data, mem_mask);
-}
-
READ32_MEMBER(gba_state::gba_bios_r)
{
UINT32 *rom = m_region_maincpu;
@@ -1911,15 +1165,55 @@ READ32_MEMBER(gba_state::gba_10000000_r)
return data;
}
+WRITE_LINE_MEMBER(gba_state::int_hblank_callback)
+{
+ request_irq(INT_HBL);
+}
+
+WRITE_LINE_MEMBER(gba_state::int_vblank_callback)
+{
+ request_irq(INT_VBL);
+}
+
+WRITE_LINE_MEMBER(gba_state::int_vcount_callback)
+{
+ request_irq(INT_VCNT);
+}
+
+WRITE_LINE_MEMBER(gba_state::dma_hblank_callback)
+{
+ for (int ch = 0; ch < 4; ch++)
+ {
+ int ctrl = DMACNT_H(ch);
+
+ if ((ctrl & 0x8000) && ((ctrl & 0x3000) == 0x2000))
+ dma_exec(ch);
+ }
+}
+
+WRITE_LINE_MEMBER(gba_state::dma_vblank_callback)
+{
+ for (int ch = 0; ch < 4; ch++)
+ {
+ int ctrl = DMACNT_H(ch);
+
+ if ((ctrl & 0x8000) && ((ctrl & 0x3000) == 0x1000))
+ dma_exec(ch);
+ }
+}
+
static ADDRESS_MAP_START( gba_map, AS_PROGRAM, 32, gba_state )
ADDRESS_MAP_UNMAP_HIGH // for "Fruit Mura no Doubutsu Tachi" and "Classic NES Series"
AM_RANGE(0x00000000, 0x00003fff) AM_ROM AM_READ(gba_bios_r)
AM_RANGE(0x02000000, 0x0203ffff) AM_RAM AM_MIRROR(0xfc0000)
AM_RANGE(0x03000000, 0x03007fff) AM_RAM AM_MIRROR(0xff8000)
- AM_RANGE(0x04000000, 0x040003ff) AM_READWRITE(gba_io_r, gba_io_w)
- AM_RANGE(0x05000000, 0x050003ff) AM_RAM_WRITE(gba_pram_w) AM_SHARE("gba_pram") // Palette RAM
- AM_RANGE(0x06000000, 0x06017fff) AM_RAM_WRITE(gba_vram_w) AM_SHARE("gba_vram") // VRAM
- AM_RANGE(0x07000000, 0x070003ff) AM_RAM_WRITE(gba_oam_w) AM_SHARE("gba_oam") // OAM
+ AM_RANGE(0x04000000, 0x0400005f) AM_DEVREADWRITE("lcd", gba_lcd_device, video_r, video_w)
+ AM_RANGE(0x04000060, 0x040003ff) AM_READWRITE(gba_io_r, gba_io_w)
+ AM_RANGE(0x04000400, 0x04ffffff) AM_NOP // Not used
+ AM_RANGE(0x05000000, 0x050003ff) AM_DEVREADWRITE("lcd", gba_lcd_device, gba_pram_r, gba_pram_w) // Palette RAM
+ AM_RANGE(0x06000000, 0x06017fff) AM_DEVREADWRITE("lcd", gba_lcd_device, gba_vram_r, gba_vram_w) // VRAM
+ AM_RANGE(0x07000000, 0x070003ff) AM_DEVREADWRITE("lcd", gba_lcd_device, gba_oam_r, gba_oam_w) // OAM
+ AM_RANGE(0x07000400, 0x07ffffff) AM_NOP // Not used
//AM_RANGE(0x08000000, 0x0cffffff) // cart ROM + mirrors, mapped here at machine_start if a cart is present
AM_RANGE(0x10000000, 0xffffffff) AM_READ(gba_10000000_r) // for "Justice League Chronicles" (game bug)
ADDRESS_MAP_END
@@ -1945,118 +1239,21 @@ static INPUT_PORTS_START( gbadv )
INPUT_PORTS_END
-TIMER_CALLBACK_MEMBER(gba_state::perform_hbl)
-{
- int ch, ctrl;
- int scanline = machine().first_screen()->vpos();
-
- // draw only visible scanlines
- if (scanline < 160)
- {
- draw_scanline(scanline);
-
- for (ch = 0; ch < 4; ch++)
- {
- ctrl = m_dma_regs[(ch*3)+2]>>16;
-
- // HBL-triggered DMA?
- if ((ctrl & 0x8000) && ((ctrl & 0x3000) == 0x2000))
- {
- dma_exec(ch);
- }
- }
- }
-
- if ((m_DISPSTAT & DISPSTAT_HBL_IRQ_EN ) != 0)
- {
- request_irq(INT_HBL);
- }
-
- m_DISPSTAT |= DISPSTAT_HBL;
-
- m_hbl_timer->adjust(attotime::never);
-}
-
-TIMER_CALLBACK_MEMBER(gba_state::perform_scan)
-{
- int scanline;
-
- // clear hblank and raster IRQ flags
- m_DISPSTAT &= ~(DISPSTAT_HBL|DISPSTAT_VCNT);
-
- scanline = machine().first_screen()->vpos();
-
- // VBL is set for scanlines 160 through 226 (but not 227, which is the last line)
- if (scanline >= 160 && scanline < 227)
- {
- m_DISPSTAT |= DISPSTAT_VBL;
-
- // VBL IRQ and DMA on line 160
- if (scanline == 160)
- {
- int ch, ctrl;
-
- if (m_DISPSTAT & DISPSTAT_VBL_IRQ_EN)
- {
- request_irq(INT_VBL);
- }
-
- for (ch = 0; ch < 4; ch++)
- {
- ctrl = m_dma_regs[(ch*3)+2]>>16;
-
- // VBL-triggered DMA?
- if ((ctrl & 0x8000) && ((ctrl & 0x3000) == 0x1000))
- {
- dma_exec(ch);
- }
- }
- }
- }
- else
- {
- m_DISPSTAT &= ~DISPSTAT_VBL;
- }
-
- // handle VCNT match interrupt/flag
- if (scanline == ((m_DISPSTAT >> 8) & 0xff))
- {
- m_DISPSTAT |= DISPSTAT_VCNT;
- if (m_DISPSTAT & DISPSTAT_VCNT_IRQ_EN)
- {
- request_irq(INT_VCNT);
- }
- }
-
- m_hbl_timer->adjust(machine().first_screen()->time_until_pos(scanline, 240));
- m_scan_timer->adjust(machine().first_screen()->time_until_pos(( scanline + 1 ) % 228, 0));
-}
-
void gba_state::machine_reset()
{
- //memset(this, 0, sizeof(this));
- m_SOUNDBIAS = 0x0200;
- m_SIOMULTI0 = 0xffff;
- m_SIOMULTI1 = 0xffff;
- m_SIOMULTI2 = 0xffff;
- m_SIOMULTI3 = 0xffff;
- m_KEYCNT = 0x03ff;
- m_RCNT = 0x8000;
- m_JOYSTAT = 0x0002;
- m_gfxBG2Changed = 0;
- m_gfxBG3Changed = 0;
- m_gfxBG2X = 0;
- m_gfxBG2Y = 0;
- m_gfxBG3X = 0;
- m_gfxBG3Y = 0;
+ memset(m_regs, 0, sizeof(m_regs));
- m_windowOn = 0;
- m_fxOn = 0;
+ SOUNDBIAS_SET(0x0200);
+ SIOMULTI0_SET(0xffff);
+ SIOMULTI1_SET(0xffff);
+ SIOMULTI2_SET(0xffff);
+ SIOMULTI3_SET(0xffff);
+ KEYCNT_SET(0x03ff);
+ RCNT_SET(0x8000);
+ JOYSTAT_SET(0x0002);
m_bios_protected = 0;
- m_scan_timer->adjust(machine().first_screen()->time_until_pos(0, 0));
- m_hbl_timer->adjust(attotime::never);
m_dma_timer[0]->adjust(attotime::never);
m_dma_timer[1]->adjust(attotime::never, 1);
m_dma_timer[2]->adjust(attotime::never, 2);
@@ -2074,11 +1271,6 @@ void gba_state::machine_reset()
void gba_state::machine_start()
{
- /* create a timer to fire scanline functions */
- m_scan_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::perform_scan),this));
- m_hbl_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::perform_hbl),this));
- m_scan_timer->adjust(machine().first_screen()->time_until_pos(0, 0));
-
/* and one for each DMA channel */
m_dma_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::dma_complete),this));
m_dma_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::dma_complete),this));
@@ -2165,79 +1357,10 @@ void gba_state::machine_start()
}
- save_item(NAME(m_DISPSTAT));
- save_item(NAME(m_BG2X));
- save_item(NAME(m_BG2Y));
- save_item(NAME(m_BG3X));
- save_item(NAME(m_BG3Y));
- save_item(NAME(m_DISPCNT));
- save_item(NAME(m_GRNSWAP));
- save_item(NAME(m_BG0CNT));
- save_item(NAME(m_BG1CNT));
- save_item(NAME(m_BG2CNT));
- save_item(NAME(m_BG3CNT));
- save_item(NAME(m_BG0HOFS));
- save_item(NAME(m_BG0VOFS));
- save_item(NAME(m_BG1HOFS));
- save_item(NAME(m_BG1VOFS));
- save_item(NAME(m_BG2HOFS));
- save_item(NAME(m_BG2VOFS));
- save_item(NAME(m_BG3HOFS));
- save_item(NAME(m_BG3VOFS));
- save_item(NAME(m_BG2PA));
- save_item(NAME(m_BG2PB));
- save_item(NAME(m_BG2PC));
- save_item(NAME(m_BG2PD));
- save_item(NAME(m_BG3PA));
- save_item(NAME(m_BG3PB));
- save_item(NAME(m_BG3PC));
- save_item(NAME(m_BG3PD));
- save_item(NAME(m_WIN0H));
- save_item(NAME(m_WIN1H));
- save_item(NAME(m_WIN0V));
- save_item(NAME(m_WIN1V));
- save_item(NAME(m_WININ));
- save_item(NAME(m_WINOUT));
- save_item(NAME(m_MOSAIC));
- save_item(NAME(m_BLDCNT));
- save_item(NAME(m_BLDALPHA));
- save_item(NAME(m_BLDY));
- save_item(NAME(m_SOUNDCNT_X));
- save_item(NAME(m_SOUNDCNT_H));
- save_item(NAME(m_SOUNDBIAS));
- save_item(NAME(m_SIOMULTI0));
- save_item(NAME(m_SIOMULTI1));
- save_item(NAME(m_SIOMULTI2));
- save_item(NAME(m_SIOMULTI3));
- save_item(NAME(m_SIOCNT));
- save_item(NAME(m_SIODATA8));
- save_item(NAME(m_KEYCNT));
- save_item(NAME(m_RCNT));
- save_item(NAME(m_JOYCNT));
- save_item(NAME(m_JOY_RECV));
- save_item(NAME(m_JOY_TRANS));
- save_item(NAME(m_JOYSTAT));
- save_item(NAME(m_IR));
- save_item(NAME(m_IE));
- save_item(NAME(m_IF));
- save_item(NAME(m_IME));
- save_item(NAME(m_WAITCNT));
- save_item(NAME(m_POSTFLG));
- save_item(NAME(m_HALTCNT));
- save_item(NAME(m_windowOn));
- save_item(NAME(m_fxOn));
- save_item(NAME(m_gfxBG2Changed));
- save_item(NAME(m_gfxBG3Changed));
- save_item(NAME(m_gfxBG2X));
- save_item(NAME(m_gfxBG2Y));
- save_item(NAME(m_gfxBG3X));
- save_item(NAME(m_gfxBG3Y));
- save_item(NAME(m_dma_regs));
+ save_pointer(NAME(m_regs), sizeof(m_regs));
save_item(NAME(m_dma_src));
save_item(NAME(m_dma_dst));
save_item(NAME(m_dma_cnt));
- save_item(NAME(m_dma_srcadd));
- save_item(NAME(m_dma_dstadd));
save_item(NAME(m_timer_regs));
save_item(NAME(m_timer_reload));
save_item(NAME(m_timer_recalc));
@@ -2248,13 +1371,11 @@ void gba_state::machine_start()
save_item(NAME(m_fifo_b_in));
save_item(NAME(m_fifo_a));
save_item(NAME(m_fifo_b));
- save_item(NAME(m_xferscan));
save_item(NAME(m_bios_last_address));
save_item(NAME(m_bios_protected));
}
-
static SLOT_INTERFACE_START(gba_cart)
SLOT_INTERFACE_INTERNAL("gba_rom", GBA_ROM_STD)
SLOT_INTERFACE_INTERNAL("gba_sram", GBA_ROM_SRAM)
@@ -2276,17 +1397,15 @@ SLOT_INTERFACE_END
static MACHINE_CONFIG_START( gbadv, gba_state )
- MCFG_CPU_ADD("maincpu", ARM7, 16777216)
+ MCFG_CPU_ADD("maincpu", ARM7, XTAL_16_777216MHz)
MCFG_CPU_PROGRAM_MAP(gba_map)
- MCFG_SCREEN_ADD("gbalcd", RASTER) // htot hst vwid vtot vst vis
- MCFG_SCREEN_RAW_PARAMS(16777216/4, 308, 0, 240, 228, 0, 160)
- MCFG_SCREEN_UPDATE_DRIVER(gba_state, screen_update)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_DEFAULT_LAYOUT(layout_lcd)
- MCFG_PALETTE_ADD("palette", 32768)
- MCFG_PALETTE_INIT_OWNER(gba_state, gba)
+ MCFG_GBA_LCD_ADD("lcd")
+ MCFG_GBA_LCD_INT_HBLANK(WRITELINE(gba_state, int_hblank_callback))
+ MCFG_GBA_LCD_INT_VBLANK(WRITELINE(gba_state, int_vblank_callback))
+ MCFG_GBA_LCD_INT_VCOUNT(WRITELINE(gba_state, int_vcount_callback))
+ MCFG_GBA_LCD_DMA_HBLANK(WRITELINE(gba_state, dma_hblank_callback))
+ MCFG_GBA_LCD_DMA_VBLANK(WRITELINE(gba_state, dma_vblank_callback))
MCFG_SPEAKER_STANDARD_STEREO("spkleft", "spkright")
MCFG_SOUND_ADD("custom", GAMEBOY, 0)
@@ -2306,14 +1425,12 @@ static MACHINE_CONFIG_START( gbadv, gba_state )
MACHINE_CONFIG_END
-
ROM_START( gba )
ROM_REGION( 0x4000, "maincpu", 0 )
ROM_LOAD( "gba.bin", 0x000000, 0x004000, CRC(81977335) SHA1(300c20df6731a33952ded8c436f7f186d25d3492) )
ROM_END
-
// this emulates the GBA's hardware protection: the BIOS returns only zeros when the PC is not in it,
// and some games verify that as a protection check (notably Metroid Fusion)
DIRECT_UPDATE_MEMBER(gba_state::gba_direct)
diff --git a/src/mame/drivers/gizmondo.cpp b/src/mame/drivers/gizmondo.cpp
index ed39f36a293..a520c72fc7f 100644
--- a/src/mame/drivers/gizmondo.cpp
+++ b/src/mame/drivers/gizmondo.cpp
@@ -39,7 +39,6 @@ SYSINTR_GPS = INT_EINT3, INT_EINT8_23 (EINT18)
#define VERBOSE_LEVEL ( 0 )
-#define BIT(x,n) (((x)>>(n))&1)
#define BITS(x,m,n) (((x)>>(n))&(((UINT32)1<<((m)-(n)+1))-1))
class gizmondo_state : public driver_device
diff --git a/src/mame/drivers/gp32.cpp b/src/mame/drivers/gp32.cpp
index f7c4c1c2f4c..0addf2d91c2 100644
--- a/src/mame/drivers/gp32.cpp
+++ b/src/mame/drivers/gp32.cpp
@@ -43,7 +43,6 @@ static inline void ATTR_PRINTF(3,4) verboselog(device_t &device, int n_level, co
#define MPLLCON 1
#define UPLLCON 2
-#define BIT(x,n) (((x)>>(n))&1)
#define BITS(x,m,n) (((x)>>(n))&((1<<((m)-(n)+1))-1))
diff --git a/src/mame/drivers/gts3.cpp b/src/mame/drivers/gts3.cpp
index e47488d3952..8c093ecc786 100644
--- a/src/mame/drivers/gts3.cpp
+++ b/src/mame/drivers/gts3.cpp
@@ -229,7 +229,7 @@ WRITE8_MEMBER( gts3_state::u4b_w )
bool clk_bit = BIT(data, 6);
if ((!m_dispclk) && clk_bit) // 0->1 is valid
{
- if BIT(data, 5)
+ if (BIT(data, 5))
m_digit = 0;
else
m_digit++;
@@ -239,7 +239,7 @@ WRITE8_MEMBER( gts3_state::u4b_w )
clk_bit = BIT(data, 1);
if ((!m_lampclk) && clk_bit) // 0->1 is valid
{
- if BIT(data, 0)
+ if (BIT(data, 0))
m_row = 0;
else
m_row++;
diff --git a/src/mame/drivers/gts3a.cpp b/src/mame/drivers/gts3a.cpp
index dba72606856..ab0c5fbea0c 100644
--- a/src/mame/drivers/gts3a.cpp
+++ b/src/mame/drivers/gts3a.cpp
@@ -238,7 +238,7 @@ WRITE8_MEMBER( gts3a_state::u4b_w )
bool clk_bit = BIT(data, 6);
if ((!m_dispclk) && clk_bit) // 0->1 is valid
{
- if BIT(data, 5)
+ if (BIT(data, 5))
m_digit = 0;
else
m_digit++;
@@ -248,7 +248,7 @@ WRITE8_MEMBER( gts3a_state::u4b_w )
clk_bit = BIT(data, 1);
if ((!m_lampclk) && clk_bit) // 0->1 is valid
{
- if BIT(data, 0)
+ if (BIT(data, 0))
m_row = 0;
else
m_row++;
diff --git a/src/mame/drivers/gts80b.cpp b/src/mame/drivers/gts80b.cpp
index 28914a300c4..2e3fe4b92f9 100644
--- a/src/mame/drivers/gts80b.cpp
+++ b/src/mame/drivers/gts80b.cpp
@@ -302,9 +302,9 @@ WRITE8_MEMBER( gts80b_state::port1b_w )
WRITE8_MEMBER( gts80b_state::port2a_w )
{
m_port2a = data;
- if BIT(data, 4)
+ if (BIT(data, 4))
m_dispcmd = (m_dispcmd & 0xf0) | m_port2b;
- if BIT(data, 5)
+ if (BIT(data, 5))
m_dispcmd = (m_dispcmd & 0x0f) | (m_port2b << 4);
}
diff --git a/src/mame/drivers/hankin.cpp b/src/mame/drivers/hankin.cpp
index 35c2f26a2a1..069a85c049c 100644
--- a/src/mame/drivers/hankin.cpp
+++ b/src/mame/drivers/hankin.cpp
@@ -255,22 +255,17 @@ WRITE8_MEMBER( hankin_state::ic10_a_w )
if (!m_ic11_ca2)
{
- if BIT(data, 2)
+ if (BIT(data, 2))
m_digit = 5;
- else
- if BIT(data, 3)
+ else if (BIT(data, 3))
m_digit = 4;
- else
- if BIT(data, 4)
+ else if (BIT(data, 4))
m_digit = 3;
- else
- if BIT(data, 5)
+ else if (BIT(data, 5))
m_digit = 2;
- else
- if BIT(data, 6)
+ else if (BIT(data, 6))
m_digit = 1;
- else
- if BIT(data, 7)
+ else if (BIT(data, 7))
m_digit = 0;
// This machine has a 10-segment display, however the only
diff --git a/src/mame/drivers/hh_hmcs40.cpp b/src/mame/drivers/hh_hmcs40.cpp
index 45e3f433897..45a5a79500b 100644
--- a/src/mame/drivers/hh_hmcs40.cpp
+++ b/src/mame/drivers/hh_hmcs40.cpp
@@ -19,9 +19,9 @@
@04 HD38800A 1980, Gakken Heiankyo Alien
@25 HD38800A 1981, Coleco Alien Attack
@27 HD38800A 1981, Bandai Packri Monster
- *31 HD38800A 1981, Entex Select-a-Game cartridge: Space Invader 2 (have dump)
- *37 HD38800A 1981, Entex Select-a-Game cartridge: Baseball 4 (have dump)
- *38 HD38800A 1981, Entex Select-a-Game cartridge: Pinball (have dump)
+ @31 HD38800A 1981, Entex Select-a-Game cartridge: Space Invader 2
+ @37 HD38800A 1981, Entex Select-a-Game cartridge: Baseball 4
+ @38 HD38800A 1981, Entex Select-a-Game cartridge: Pinball
*41 HD38800A 1982, Gakken Puck Monster
*51 HD38800A 1981, Actronics(Hanzawa) Twinvader (larger white version)
@70 HD38800A 1982, Coleco Galaxian
@@ -92,6 +92,7 @@
// internal artwork
#include "pairmtch.lh"
+#include "sag.lh"
#include "hh_hmcs40_test.lh" // common test-layout - no svg artwork(yet), use external artwork
@@ -147,6 +148,7 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
void display_update();
void set_display_size(int maxx, int maxy);
+ void set_display_segmask(UINT32 digits, UINT32 mask);
void display_matrix(int maxx, int maxy, UINT64 setx, UINT32 sety, bool update = true);
protected:
@@ -276,6 +278,17 @@ void hh_hmcs40_state::set_display_size(int maxx, int maxy)
m_display_maxy = maxy;
}
+void hh_hmcs40_state::set_display_segmask(UINT32 digits, UINT32 mask)
+{
+ // set a segment mask per selected digit, but leave unselected ones alone
+ for (int i = 0; i < 0x20; i++)
+ {
+ if (digits & 1)
+ m_display_segmask[i] = mask;
+ digits >>= 1;
+ }
+}
+
void hh_hmcs40_state::display_matrix(int maxx, int maxy, UINT64 setx, UINT32 sety, bool update)
{
set_display_size(maxx, maxy);
@@ -2503,6 +2516,146 @@ MACHINE_CONFIG_END
+/***************************************************************************
+
+ Entex Select-A-Game (HMCS40 MCU cartridges)
+ * see gamelist for cartridge info
+ * cyan/red VFD display Futaba DM-16Z + cyan VFD 9-digit panel Futaba 9-ST-11A 1F
+
+ The console is the peripheral, the heart of the system is the cartridge.
+ Cartridges with a HMCS40 MCU are implemented in this driver.
+
+ MAME external artwork is recommended, needed for per-game VFD overlays.
+
+***************************************************************************/
+
+class sag_state : public hh_hmcs40_state
+{
+public:
+ sag_state(const machine_config &mconfig, device_type type, const char *tag)
+ : hh_hmcs40_state(mconfig, type, tag)
+ { }
+
+ void prepare_display();
+ DECLARE_WRITE8_MEMBER(plate_w);
+ DECLARE_WRITE16_MEMBER(grid_w);
+ DECLARE_READ16_MEMBER(input_r);
+};
+
+// handlers
+
+void sag_state::prepare_display()
+{
+ // grid 0-7 are the 'pixels'
+ for (int y = 0; y < 8; y++)
+ m_display_state[y] = (m_grid >> y & 1) ? m_plate : 0;
+
+ // grid 8-11 are 7segs
+ set_display_segmask(0xf00, 0x7f);
+ UINT8 seg = BITSWAP8(m_plate,3,4,5,6,7,8,9,10);
+ for (int y = 8; y < 12; y++)
+ m_display_state[y] = (m_grid >> y & 1) ? seg : 0;
+
+ set_display_size(14, 12);
+ display_update();
+}
+
+WRITE8_MEMBER(sag_state::plate_w)
+{
+ // R0x-R3x: vfd matrix plate
+ int shift = offset * 4;
+ m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
+ prepare_display();
+}
+
+WRITE16_MEMBER(sag_state::grid_w)
+{
+ // D0: speaker out
+ m_speaker->level_w(data & 1);
+
+ // D2-D7: input mux
+ m_inp_mux = data >> 2 & 0x3f;
+
+ // D1-D12: vfd matrix grid
+ m_grid = data >> 1 & 0xfff;
+ prepare_display();
+}
+
+READ16_MEMBER(sag_state::input_r)
+{
+ // D13-D15: multiplexed inputs
+ return read_inputs(6) << 13;
+}
+
+
+// config
+
+static INPUT_PORTS_START( sag )
+ PORT_START("IN.0") // D2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY PORT_NAME("P1 Button 1")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Button 3")
+ PORT_CONFNAME( 0x04, 0x04, "Game" )
+ PORT_CONFSETTING( 0x04, "1" )
+ PORT_CONFSETTING( 0x00, "2" )
+
+ PORT_START("IN.1") // D3
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY PORT_NAME("P1 Button 2")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Button 4")
+ PORT_BIT( 0x04, 0x04, IPT_SPECIAL ) PORT_CONDITION("DPLAYSW", 0x03, EQUALS, 0x01) // 1 player
+
+ PORT_START("IN.2") // D4
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY PORT_NAME("P1 Button 3")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Button 1")
+ PORT_CONFNAME( 0x04, 0x00, "Skill Level" )
+ PORT_CONFSETTING( 0x00, "1" )
+ PORT_CONFSETTING( 0x04, "2" )
+
+ PORT_START("IN.3") // D5
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY PORT_NAME("P1 Button 4")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Button 2")
+ PORT_BIT( 0x04, 0x04, IPT_SPECIAL ) PORT_CONDITION("DPLAYSW", 0x03, EQUALS, 0x00) // demo
+
+ PORT_START("IN.4") // D6
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Button 5")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_COCKTAIL PORT_NAME("P2 Button 5")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Button 7")
+
+ PORT_START("IN.5") // D7
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Button 6")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL PORT_NAME("P2 Button 6")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_NAME("P2 Button 7")
+
+ PORT_START("DPLAYSW") // shared D3/D5
+ PORT_CONFNAME( 0x03, 0x01, "Players" )
+ PORT_CONFSETTING( 0x00, "Demo" )
+ PORT_CONFSETTING( 0x01, "1" )
+ PORT_CONFSETTING( 0x02, "2" )
+INPUT_PORTS_END
+
+static MACHINE_CONFIG_START( sag, sag_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", HD38800, 450000) // approximation
+ MCFG_HMCS40_WRITE_R_CB(0, WRITE8(sag_state, plate_w))
+ MCFG_HMCS40_WRITE_R_CB(1, WRITE8(sag_state, plate_w))
+ MCFG_HMCS40_WRITE_R_CB(2, WRITE8(sag_state, plate_w))
+ MCFG_HMCS40_WRITE_R_CB(3, WRITE8(sag_state, plate_w))
+ MCFG_HMCS40_WRITE_D_CB(WRITE16(sag_state, grid_w))
+ MCFG_HMCS40_READ_D_CB(READ16(sag_state, input_r))
+
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
+ MCFG_DEFAULT_LAYOUT(layout_sag)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+MACHINE_CONFIG_END
+
+
+
+
+
/***************************************************************************
Entex Galaxian 2 (manufactured in Japan)
@@ -4145,6 +4298,27 @@ ROM_START( cmspacmn )
ROM_END
+ROM_START( sag_si2 )
+ ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD( "inv2_hd38800a31", 0x0000, 0x1000, BAD_DUMP CRC(29c8c100) SHA1(41cd413065659c6d7d5b2408de2ca6d51c49629a) )
+ ROM_CONTINUE( 0x1e80, 0x0100 )
+ROM_END
+
+
+ROM_START( sag_bb4 )
+ ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD( "b-b5_hd38800a37", 0x0000, 0x1000, CRC(64852bd5) SHA1(fb1c24ca43934ceb6fc35ac7c35b71e6e843dbc5) )
+ ROM_CONTINUE( 0x1e80, 0x0100 )
+ROM_END
+
+
+ROM_START( sag_pb )
+ ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD( "pinb_hd38800a38", 0x0000, 0x1000, CRC(6e53a56b) SHA1(13f057eab2e4cfbb3ef1247a041abff15ae727c9) )
+ ROM_CONTINUE( 0x1e80, 0x0100 )
+ROM_END
+
+
ROM_START( egalaxn2 )
ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "hd38820a13", 0x0000, 0x1000, CRC(112b721b) SHA1(4a185bc57ea03fe64f61f7db4da37b16eeb0cb54) )
@@ -4304,6 +4478,9 @@ CONS( 1981, cpacman, 0, 0, cpacman, cpacman, driver_device, 0, "Colec
CONS( 1981, cpacmanr1, cpacman, 0, cpacman, cpacman, driver_device, 0, "Coleco", "Pac-Man (Coleco, Rev. 28)", MACHINE_SUPPORTS_SAVE )
CONS( 1983, cmspacmn, 0, 0, cmspacmn, cmspacmn, driver_device, 0, "Coleco", "Ms. Pac-Man (Coleco)", MACHINE_SUPPORTS_SAVE )
+CONS( 1981, sag_si2, 0, 0, sag, sag, driver_device, 0, "Entex", "Select-A-Game: Space Invader 2", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK | MACHINE_NOT_WORKING ) // suspect bad dump
+CONS( 1981, sag_bb4, 0, 0, sag, sag, driver_device, 0, "Entex", "Select-A-Game: Baseball 4", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
+CONS( 1981, sag_pb, 0, 0, sag, sag, driver_device, 0, "Entex", "Select-A-Game: Pinball", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
CONS( 1981, egalaxn2, 0, 0, egalaxn2, egalaxn2, driver_device, 0, "Entex", "Galaxian 2 (Entex)", MACHINE_SUPPORTS_SAVE )
CONS( 1981, epacman2, 0, 0, epacman2, epacman2, driver_device, 0, "Entex", "Pac Man 2 (Entex, cyan Pacman)", MACHINE_SUPPORTS_SAVE )
CONS( 1981, epacman2r, epacman2, 0, epacman2, epacman2, driver_device, 0, "Entex", "Pac Man 2 (Entex, red Pacman)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/hp9845.cpp b/src/mame/drivers/hp9845.cpp
index c4f00df97b1..c3f25382182 100644
--- a/src/mame/drivers/hp9845.cpp
+++ b/src/mame/drivers/hp9845.cpp
@@ -21,11 +21,11 @@
// - T15 tape drive
// - Software list to load optional ROMs
// - Beeper
+// - Correct character generator ROMs (a huge "thank you" to Ansgar Kueckes for the dumps!)
// What's not yet in:
// - Better naming of tape drive image (it's now "magt", should be "t15")
// - Better documentation of this file
// What's wrong:
-// - I'm using character generator from HP64K (another driver of mine): no known dump of the original one
// - Speed, as usual
#include "emu.h"
@@ -171,6 +171,9 @@ private:
// Character generator
const UINT8 *m_chargen;
+ // Optional character generator
+ const UINT8 *m_optional_chargen;
+
// Text mode video I/F
typedef struct {
UINT8 chars[ 80 ];
@@ -394,6 +397,8 @@ void hp9845b_state::machine_start()
m_chargen = memregion("chargen")->base();
+ m_optional_chargen = memregion("optional_chargen")->base();
+
m_graphic_mem.resize(GVIDEO_MEM_SIZE);
}
@@ -517,21 +522,18 @@ void hp9845b_state::video_render_buff(unsigned video_scanline , unsigned line_in
for (unsigned i = 0; i < 80; i++) {
UINT8 charcode = m_video_buff[ buff_idx ].chars[ i ];
UINT8 attrs = m_video_buff[ buff_idx ].attrs[ i ];
- UINT8 chargen_byte = m_chargen[ line_in_row | ((unsigned)charcode << 4) ];
+ UINT16 chrgen_addr = ((UINT16)(charcode ^ 0x7f) << 4) | line_in_row;
UINT16 pixels;
- // TODO: Check if order of bits in "pixels" is ok
-
if ((ul_line && BIT(attrs , 3)) ||
(cursor_line && cursor_blink && BIT(attrs , 0))) {
pixels = ~0;
} else if (char_blink && BIT(attrs , 2)) {
pixels = 0;
} else if (BIT(attrs , 4)) {
- // Optional character generator ROM not installed, it reads as 1 everywhere
- pixels = 0x7f << 1;
+ pixels = (UINT16)(m_optional_chargen[ chrgen_addr ] & 0x7f) << 1;
} else {
- pixels = (UINT16)(chargen_byte & 0x7f) << 1;
+ pixels = (UINT16)(m_chargen[ chrgen_addr ] & 0x7f) << 1;
}
if (BIT(attrs , 1)) {
@@ -539,7 +541,7 @@ void hp9845b_state::video_render_buff(unsigned video_scanline , unsigned line_in
}
for (unsigned j = 0; j < 9; j++) {
- bool pixel = (pixels & (1U << (8 - j))) != 0;
+ bool pixel = (pixels & (1U << j)) != 0;
m_bitmap.pix32(video_scanline , i * 9 + j) = pen[ pixel ? 1 : 0 ];
}
@@ -1220,8 +1222,10 @@ ROM_END
ROM_START( hp9845b )
ROM_REGION(0x800 , "chargen" , 0)
- // Don't have the real character generator from HP9845, use the one from HP64000 for now
- ROM_LOAD("1818_2668.bin" , 0 , 0x800 , BAD_DUMP CRC(32a52664) SHA1(8b2a49a32510103ff424e8481d5ed9887f609f2f))
+ ROM_LOAD("chrgen.bin" , 0 , 0x800 , CRC(fe9e844f) SHA1(0c45ae00766ceba94a19bd5e154bd6d23e208cca))
+
+ ROM_REGION(0x800 , "optional_chargen" , 0)
+ ROM_LOAD("optional_chrgen.bin" , 0 , 0x800 , CRC(0ecfa63b) SHA1(c295e6393d1503d903c1d2ce576fa597df9746bf))
ROM_REGION(0x10000, "lpu", ROMREGION_16BIT | ROMREGION_BE)
ROM_LOAD("9845-LPU-Standard-Processor.bin", 0, 0x10000, CRC(dc266c1b) SHA1(1cf3267f13872fbbfc035b70f8b4ec6b5923f182))
diff --git a/src/mame/drivers/inder.cpp b/src/mame/drivers/inder.cpp
index f0dea109f11..f09012c0fe8 100644
--- a/src/mame/drivers/inder.cpp
+++ b/src/mame/drivers/inder.cpp
@@ -1137,22 +1137,22 @@ WRITE8_MEMBER( inder_state::sol_brvteam_w )
{
if ((data & 0xee) && BIT(data, 4)) // solenoid selected & activated
{
- if BIT(data, 1)
+ if (BIT(data, 1))
m_samples->start(0, 7); // left sling near bumpers "canon izq"
- if BIT(data, 2)
+ if (BIT(data, 2))
m_samples->start(1, 7); // right sling near bumpers "canon der"
- if BIT(data, 3)
+ if (BIT(data, 3))
m_samples->start(0, 5); // outhole
- if BIT(data, 5)
+ if (BIT(data, 5))
m_samples->start(2, 0); // left bumper
- if BIT(data, 6)
+ if (BIT(data, 6))
m_samples->start(3, 0); // right bumper
- if BIT(data, 7)
+ if (BIT(data, 7))
m_samples->start(4, 0); // middle bumper
}
}
@@ -1162,16 +1162,16 @@ WRITE8_MEMBER( inder_state::sol_canasta_w )
{
if ((data & 0xee) && BIT(data, 4)) // solenoid selected & activated
{
- if BIT(data, 3)
+ if (BIT(data, 3))
m_samples->start(0, 5); // outhole
- if BIT(data, 5)
+ if (BIT(data, 5))
m_samples->start(2, 0); // left bumper
- if BIT(data, 6)
+ if (BIT(data, 6))
m_samples->start(3, 0); // right bumper
- if BIT(data, 7)
+ if (BIT(data, 7))
m_samples->start(4, 0); // middle bumper
}
}
@@ -1195,7 +1195,7 @@ WRITE8_MEMBER( inder_state::ppi60a_w )
{
if (data)
for (UINT8 i = 0; i < 8; i++)
- if BIT(data, i)
+ if (BIT(data, i))
m_row = i;
}
@@ -1204,7 +1204,7 @@ WRITE8_MEMBER( inder_state::ppi60b_w )
{
if (data & 7)
for (UINT8 i = 0; i < 3; i++)
- if BIT(data, i)
+ if (BIT(data, i))
m_row = i+8;
}
@@ -1212,7 +1212,7 @@ WRITE8_MEMBER( inder_state::ppi64c_w )
{
UINT8 i;
data &= 15;
- if BIT(data, 3) // 8 to 15
+ if (BIT(data, 3)) // 8 to 15)
{
data ^= 15; // now 7 to 0
for (i = 0; i < 5; i++)
diff --git a/src/mame/drivers/instruct.cpp b/src/mame/drivers/instruct.cpp
index e51774efaf5..f4183a91466 100644
--- a/src/mame/drivers/instruct.cpp
+++ b/src/mame/drivers/instruct.cpp
@@ -107,7 +107,7 @@ WRITE8_MEMBER( instruct_state::port_w )
// cassette port
WRITE8_MEMBER( instruct_state::portf8_w )
{
- if BIT(data, 4)
+ if (BIT(data, 4))
m_cass->output(BIT(data, 3) ? -1.0 : +1.0);
else
m_cass->output(0.0);
@@ -179,14 +179,14 @@ INTERRUPT_GEN_MEMBER( instruct_state::t2l_int )
UINT8 hwkeys = ioport("HW")->read();
// check RST key
- if BIT(hwkeys, 3)
+ if (BIT(hwkeys, 3))
{
m_maincpu->set_state_int(S2650_PC, 0);
return;
}
else
// check MON key
- if BIT(hwkeys, 2)
+ if (BIT(hwkeys, 2))
{
m_maincpu->set_state_int(S2650_PC, 0x1800);
return;
@@ -199,7 +199,7 @@ INTERRUPT_GEN_MEMBER( instruct_state::t2l_int )
UINT8 vector = BIT(switches, 0) ? 0x87 : 0x07;
// Check INT sw & key
- if BIT(switches, 1)
+ if (BIT(switches, 1))
device.execute().set_input_line_and_vector(0, BIT(hwkeys, 1) ? ASSERT_LINE : CLEAR_LINE, vector);
else
// process ac input
diff --git a/src/mame/drivers/irisha.cpp b/src/mame/drivers/irisha.cpp
index 0f9f884fd4c..7e976357699 100644
--- a/src/mame/drivers/irisha.cpp
+++ b/src/mame/drivers/irisha.cpp
@@ -280,7 +280,7 @@ WRITE8_MEMBER(irisha_state::irisha_8255_portc_w)
{
//logerror("irisha_8255_portc_w %02x\n",data);
- if BIT(data, 6)
+ if (BIT(data, 6))
m_pit->write_gate2((BIT(m_ppi_porta, 5) && !BIT(data, 5)) ? 1 : 0);
m_ppi_portc = data;
diff --git a/src/mame/drivers/jeutel.cpp b/src/mame/drivers/jeutel.cpp
index c86dc4821e5..f8288b4ae03 100644
--- a/src/mame/drivers/jeutel.cpp
+++ b/src/mame/drivers/jeutel.cpp
@@ -117,7 +117,7 @@ WRITE8_MEMBER( jeutel_state::ppi0a_w )
UINT16 segment;
bool blank = !BIT(data, 7);
- if BIT(data, 6)
+ if (BIT(data, 6))
{
output().set_digit_value(40+m_digit, 0x3f); //patterns[data&15];
return;
@@ -142,12 +142,11 @@ WRITE8_MEMBER( jeutel_state::ppi0a_w )
default:
segment = 0x3f; //patterns[data & 0x0f];
}
- if BIT(data, 4)
+ if (BIT(data, 4))
{
output().set_digit_value(m_digit, (blank) ? 0 : segment);
}
- else
- if BIT(data, 5)
+ else if (BIT(data, 5))
{
output().set_digit_value(20+m_digit, (blank) ? 0 : segment);
}
diff --git a/src/mame/drivers/jp.cpp b/src/mame/drivers/jp.cpp
index 4e25800686a..c2312a27c96 100644
--- a/src/mame/drivers/jp.cpp
+++ b/src/mame/drivers/jp.cpp
@@ -12,7 +12,6 @@ ToDo:
- Mechanical sounds
- Extra sound board for some games - no schematic available
- Even though nvram is fitted, all credits and scores are lost at reboot
-- Lortium: a rom is missing
- Pimbal: outhole not working
- Petaco: different hardware - manual is very poor copy
@@ -192,7 +191,7 @@ WRITE8_MEMBER( jp_state::disp_w )
m_disp_data = (m_disp_data << 1) | BIT(data, 0);
}
- if BIT(data, 2)
+ if (BIT(data, 2))
{
UINT8 segment, t = (m_disp_data >> 24) & 15;
if (t == 8)
@@ -209,7 +208,7 @@ WRITE8_MEMBER( jp_state::disp_w )
segment = 1 << (6-t);
for (i = 0; i < 32; i++)
- if BIT(m_disp_data, i)
+ if (BIT(m_disp_data, i))
output().set_digit_value(i, (output().get_digit_value(i) & ~segment));
else
output().set_digit_value(i, (output().get_digit_value(i) | segment));
@@ -403,7 +402,7 @@ ROM_END
/-------------------------------------------------------------------*/
ROM_START(lortium)
ROM_REGION(0x4000, "maincpu", 0)
- ROM_LOAD("cpulort1.dat", 0x0000, 0x2000, NO_DUMP)
+ ROM_LOAD("cpulort1.dat", 0x0000, 0x2000, CRC(4943e31f) SHA1(2cbc0a1feb711b5540e9288b9b59527cc85361fc))
ROM_LOAD("cpulort2.dat", 0x2000, 0x2000, CRC(71eebb26) SHA1(9d49c1012555bda24ac7287499bcb93828cbb57f))
ROM_END
@@ -428,7 +427,7 @@ ROM_START(olympus)
ROM_REGION(0x40000, "sound1", 0)
ROM_LOAD("c1.256", 0x0000, 0x8000, CRC(93ceefbf) SHA1(be50b3d4485d4e8291047a52ca60656b55729555))
- ROM_LOAD("c2.256", 0x8000, 0x8000, NO_DUMP)
+ ROM_LOAD("c2.256", 0x8000, 0x8000, CRC(8d404cf7) SHA1(e521ff1cf999496bada5348b7f845c468f053f0f))
ROM_LOAD("c3.256", 0x10000, 0x8000, CRC(266eb5dd) SHA1(0eb7c098ddb7f257daf625e5209a54c306d365bf))
ROM_LOAD("c4.256", 0x18000, 0x8000, CRC(082a052d) SHA1(f316fbe6ff63433861a8856e297c953ce29a8901))
ROM_LOAD("c5.256", 0x20000, 0x8000, CRC(402a3fb2) SHA1(1c078ca519271bf2bcbe0bc10e33078861085fcf))
@@ -446,7 +445,20 @@ ROM_START(petaco)
ROM_END
/*-------------------------------------------------------------------
-/ Petaco 2
+/ Petaco (using the new hardware, probably #1102)
+/-------------------------------------------------------------------*/
+ROM_START(petacon)
+ ROM_REGION(0x4000, "maincpu", 0)
+ ROM_LOAD("petaco-n.dat", 0x0000, 0x2000, CRC(9e4d6944) SHA1(54b39e28152d481bd485433b4a7bf46174a78dbb))
+ROM_END
+
+ROM_START(petacona)
+ ROM_REGION(0x4000, "maincpu", 0)
+ ROM_LOAD("petacona.bin", 0x0000, 0x2000, CRC(81502083) SHA1(c67a095fb5e868467577e7a86de5d51c59b3a68e))
+ROM_END
+
+/*-------------------------------------------------------------------
+/ Petaco 2 #1106?
/-------------------------------------------------------------------*/
ROM_START(petaco2)
ROM_REGION(0x4000, "maincpu", 0)
@@ -469,6 +481,8 @@ ROM_END
GAME(1984, petaco, 0, jp, jp, jp_state, jp, ROT0, "Juegos Populares", "Petaco", MACHINE_IS_SKELETON_MECHANICAL)
// mostly ok
+GAME(1985, petacon, 0, jp, jp, jp_state, jp, ROT0, "Juegos Populares", "Petaco (new hardware)", MACHINE_MECHANICAL)
+GAME(1985, petacona, 0, jp, jp, jp_state, jp, ROT0, "Juegos Populares", "Petaco (new hardware, alternate set)", MACHINE_MECHANICAL)
GAME(1985, petaco2, 0, jp, jp, jp_state, jp, ROT0, "Juegos Populares", "Petaco 2", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND )
GAME(1985, faeton, 0, jp, jp, jp_state, jp, ROT0, "Juegos Populares", "Faeton", MACHINE_MECHANICAL)
GAME(1986, halley, 0, jp, jp, jp_state, jp, ROT0, "Juegos Populares", "Halley Comet", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/drivers/kissproto.cpp b/src/mame/drivers/kissproto.cpp
index 3f0f801a4e4..d732fb116be 100644
--- a/src/mame/drivers/kissproto.cpp
+++ b/src/mame/drivers/kissproto.cpp
@@ -62,5 +62,15 @@ ROM_START(kissp)
ROM_RELOAD( 0x4800, 0x0800)
ROM_END
+ROM_START(kissp2)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD( "8755u8.dat", 0x4000, 0x0800, CRC(d2d04100) SHA1(fe81f3667cb5802c9780761a359660bad83862c2))
+ ROM_RELOAD( 0x0000, 0x0800)
+ ROM_LOAD( "kissprot.u5", 0x1000, 0x1000, CRC(38a2ef5a) SHA1(4ffdb2e9aa30417d506af3bc4b6835ba1dc80e4f))
+ ROM_LOAD( "kissprot.u6", 0x2000, 0x1000, CRC(bcdfaf1d) SHA1(d21bebbf702b400eb71f8c88be50a180a5ac260a))
+ ROM_LOAD( "u7.dat", 0x3000, 0x0800, CRC(e224a9b0) SHA1(2a0e3afad8c566432ebe690ff1ce6fa92b68816f))
+ ROM_RELOAD( 0x4800, 0x0800)
+ROM_END
GAME( 1979, kissp, kiss, kissp, kissp, kissp_state, kissp, ROT0, "Bally", "Kiss (prototype)", MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 1979, kissp2, kiss, kissp, kissp, kissp_state, kissp, ROT0, "Bally", "Kiss (prototype v.2)", MACHINE_IS_SKELETON_MECHANICAL )
diff --git a/src/mame/drivers/maygay1b.cpp b/src/mame/drivers/maygay1b.cpp
index 0c4907e76a4..18d09701cc3 100644
--- a/src/mame/drivers/maygay1b.cpp
+++ b/src/mame/drivers/maygay1b.cpp
@@ -76,6 +76,9 @@
#include "maygay1b.lh"
+// not yet working
+//#define USE_MCU
+
///////////////////////////////////////////////////////////////////////////
// called if board is reset ///////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
@@ -417,10 +420,17 @@ static ADDRESS_MAP_START( m1_memmap, AS_PROGRAM, 8, maygay1b_state )
AM_RANGE(0x2030, 0x2030) AM_DEVREADWRITE("i8279", i8279_device, data_r, data_w )
AM_RANGE(0x2031, 0x2031) AM_DEVREADWRITE("i8279", i8279_device, status_r, cmd_w)
+
+#ifdef USE_MCU
+ //8051
+ AM_RANGE(0x2040, 0x2040) AM_WRITE( main_to_mcu_0_w )
+ AM_RANGE(0x2041, 0x2041) AM_WRITE( main_to_mcu_1_w )
+#else
//8051
AM_RANGE(0x2040, 0x2040) AM_DEVREADWRITE("i8279_2", i8279_device, data_r, data_w )
AM_RANGE(0x2041, 0x2041) AM_DEVREADWRITE("i8279_2", i8279_device, status_r, cmd_w)
// AM_RANGE(0x2050, 0x2050)// SCAN on M1B
+#endif
AM_RANGE(0x2070, 0x207f) AM_DEVREADWRITE("duart68681", mc68681_device, read, write )
@@ -447,6 +457,8 @@ static ADDRESS_MAP_START( m1_memmap, AS_PROGRAM, 8, maygay1b_state )
ADDRESS_MAP_END
+
+
/*************************************************
*
* NEC uPD7759 handling (used as OKI replacement)
@@ -496,10 +508,16 @@ static ADDRESS_MAP_START( m1_nec_memmap, AS_PROGRAM, 8, maygay1b_state )
AM_RANGE(0x2030, 0x2030) AM_DEVREADWRITE("i8279", i8279_device, data_r, data_w )
AM_RANGE(0x2031, 0x2031) AM_DEVREADWRITE("i8279", i8279_device, status_r, cmd_w)
+#ifdef USE_MCU
+ //8051
+ AM_RANGE(0x2040, 0x2040) AM_WRITE( main_to_mcu_0_w )
+ AM_RANGE(0x2041, 0x2041) AM_WRITE( main_to_mcu_1_w )
+#else
//8051
AM_RANGE(0x2040, 0x2040) AM_DEVREADWRITE("i8279_2", i8279_device, data_r, data_w )
AM_RANGE(0x2041, 0x2041) AM_DEVREADWRITE("i8279_2", i8279_device, status_r, cmd_w)
// AM_RANGE(0x2050, 0x2050)// SCAN on M1B
+#endif
AM_RANGE(0x2070, 0x207f) AM_DEVREADWRITE("duart68681", mc68681_device, read, write )
@@ -547,11 +565,20 @@ WRITE8_MEMBER( maygay1b_state::lamp_data_w )
// Because of the nature of the lamping circuit, there is an element of persistance
// As a consequence, the lamp column data can change before the input strobe without
// causing the relevant lamps to black out.
-
+ int bit_offset;
for (int i = 0; i < 8; i++)
{
- output().set_lamp_value((8*m_lamp_strobe)+i, ((data & (1 << i)) !=0));
+ if(i < 4)
+ {
+ bit_offset = i + 4;
+ }
+ else
+ {
+ bit_offset = i - 4;
+ }
+ output().set_lamp_value((8*m_lamp_strobe)+i, ((data & (1 << bit_offset)) !=0));
}
+
m_old_lamp_strobe = m_lamp_strobe;
}
@@ -562,8 +589,15 @@ READ8_MEMBER( maygay1b_state::kbd_r )
return (m_kbd_ports[m_lamp_strobe&0x07])->read();
}
+WRITE8_MEMBER( maygay1b_state::scanlines_2_w )
+{
+ m_lamp_strobe2 = data;
+}
+
WRITE8_MEMBER( maygay1b_state::lamp_data_2_w )
{
+ // TODO: THIS FUNCTION IS NEVER CALLED! So we are missing the second half of the lamp matrix
+
//The two A/B ports are merged back into one, to make one row of 8 lamps.
if (m_old_lamp_strobe2 != m_lamp_strobe2)
@@ -574,13 +608,121 @@ WRITE8_MEMBER( maygay1b_state::lamp_data_2_w )
for (int i = 0; i < 8; i++)
{
- output().set_lamp_value((8*m_lamp_strobe)+i+128, ((data & (1 << i)) !=0));
+ output().set_lamp_value((8*m_lamp_strobe2)+i+128, ((data & (1 << i)) !=0));
}
+
m_old_lamp_strobe2 = m_lamp_strobe2;
}
}
+// MCU hookup not yet working
+
+WRITE8_MEMBER(maygay1b_state::main_to_mcu_0_w)
+{
+ // we trigger the 2nd, more complex interrupt on writes here
+
+ m_main_to_mcu = data;
+ m_mcu->set_input_line(1, HOLD_LINE);
+}
+
+
+WRITE8_MEMBER(maygay1b_state::main_to_mcu_1_w)
+{
+ // we trigger the 1st interrupt on writes here
+ // the 1st interrupt (03h) is a very simple one
+ // it stores the value written as long at bit 0x40
+ // isn't set.
+ //
+ // this is used as an index, so is probably the
+ // row data written with
+ // [:maincpu] ':maincpu' (F2CF): unmapped program memory write to 2041 = 8x & FF ( m1glad )
+ m_main_to_mcu = data;
+ m_mcu->set_input_line(0, HOLD_LINE);
+}
+
+
+WRITE8_MEMBER(maygay1b_state::mcu_port0_w)
+{
+#ifdef USE_MCU
+// only during startup
+// logerror("%s: mcu_port0_w %02x\n",machine().describe_context(),data);
+#endif
+}
+
+WRITE8_MEMBER(maygay1b_state::mcu_port1_w)
+{
+#ifdef USE_MCU
+ int bit_offset;
+ for (int i = 0; i < 8; i++)
+ {
+ if (i < 4)
+ {
+ bit_offset = i + 4;
+ }
+ else
+ {
+ bit_offset = i - 4;
+ }
+ output().set_lamp_value((8 * m_lamp_strobe) + i + 128, ((data & (1 << bit_offset)) != 0));
+ }
+#endif
+}
+
+WRITE8_MEMBER(maygay1b_state::mcu_port2_w)
+{
+#ifdef USE_MCU
+// only during startup
+ logerror("%s: mcu_port2_w %02x\n",machine().describe_context(),data);
+#endif
+}
+
+WRITE8_MEMBER(maygay1b_state::mcu_port3_w)
+{
+#ifdef USE_MCU
+// only during startup
+ logerror("%s: mcu_port3_w %02x\n",machine().describe_context(),data);
+#endif
+}
+
+READ8_MEMBER(maygay1b_state::mcu_port0_r)
+{
+ UINT8 ret = m_lamp_strobe;
+#ifdef USE_MCU
+ // the MCU code checks to see if the input from this port is stable in
+ // the main loop
+ // it looks like it needs to read the strobe
+// logerror("%s: mcu_port0_r returning %02x\n", machine().describe_context(), ret);
+#endif
+ return ret;
+
+}
+
+
+READ8_MEMBER(maygay1b_state::mcu_port2_r)
+{
+ // this is read in BOTH the external interrupts
+ // it seems that both the writes from the main cpu go here
+ // and the MCU knows which is is based on the interrupt level
+ UINT8 ret = m_main_to_mcu;
+#ifdef USE_MCU
+ logerror("%s: mcu_port2_r returning %02x\n", machine().describe_context(), ret);
+#endif
+ return ret;
+}
+
+static ADDRESS_MAP_START( maygay_mcu_map, AS_PROGRAM, 8, maygay1b_state )
+ AM_RANGE(0x0000, 0x0fff) AM_ROM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( maygay_mcu_io, AS_IO, 8, maygay1b_state )
+ AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P0) AM_READWRITE( mcu_port0_r, mcu_port0_w )
+ AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_WRITE( mcu_port1_w )
+ AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_READWRITE( mcu_port2_r, mcu_port2_w )
+ AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_WRITE( mcu_port3_w )
+ADDRESS_MAP_END
+
+
// machine driver for maygay m1 board /////////////////////////////////
MACHINE_CONFIG_START( maygay_m1, maygay1b_state )
@@ -588,6 +730,11 @@ MACHINE_CONFIG_START( maygay_m1, maygay1b_state )
MCFG_CPU_ADD("maincpu", M6809, M1_MASTER_CLOCK/2)
MCFG_CPU_PROGRAM_MAP(m1_memmap)
+ MCFG_CPU_ADD("mcu", I80C51, 2000000) // EP840034.A-P-80C51AVW
+ MCFG_CPU_PROGRAM_MAP(maygay_mcu_map)
+ MCFG_CPU_IO_MAP(maygay_mcu_io)
+
+
MCFG_MC68681_ADD("duart68681", M1_DUART_CLOCK)
MCFG_MC68681_IRQ_CALLBACK(WRITELINE(maygay1b_state, duart_irq_handler))
MCFG_MC68681_INPORT_CALLBACK(READ8(maygay1b_state, m1_duart_r))
@@ -613,12 +760,18 @@ MACHINE_CONFIG_START( maygay_m1, maygay1b_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
MCFG_TIMER_DRIVER_ADD_PERIODIC("nmitimer", maygay1b_state, maygay1b_nmitimer_callback, attotime::from_hz(75)) // freq?
+
MCFG_DEVICE_ADD("i8279", I8279, M1_MASTER_CLOCK/4) // unknown clock
MCFG_I8279_OUT_SL_CB(WRITE8(maygay1b_state, scanlines_w)) // scan SL lines
MCFG_I8279_OUT_DISP_CB(WRITE8(maygay1b_state, lamp_data_w)) // display A&B
MCFG_I8279_IN_RL_CB(READ8(maygay1b_state, kbd_r)) // kbd RL lines
+
+#ifndef USE_MCU
+ // there is no 2nd i8279, the 8051 handles this task!
MCFG_DEVICE_ADD("i8279_2", I8279, M1_MASTER_CLOCK/4) // unknown clock
+ MCFG_I8279_OUT_SL_CB(WRITE8(maygay1b_state, scanlines_2_w)) // scan SL lines
MCFG_I8279_OUT_DISP_CB(WRITE8(maygay1b_state, lamp_data_2_w)) // display A&B
+#endif
MCFG_STARPOINT_48STEP_ADD("reel0")
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(maygay1b_state, reel0_optic_cb))
diff --git a/src/mame/drivers/maygay1b.hxx b/src/mame/drivers/maygay1b.hxx
index 7fede8ddd29..80f234dbc59 100644
--- a/src/mame/drivers/maygay1b.hxx
+++ b/src/mame/drivers/maygay1b.hxx
@@ -3334,8 +3334,8 @@ GAME( 1994, m1luxorc ,m1luxor ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "G
/* missing or different sound system? */
-ROM_START( m1cashc ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "cash classic sa1-082 5p.bin", 0x0000, 0x010000, CRC(42d68675) SHA1(ed191e03bc7b42ae1884657b4559588eeedbdf31) ) m1_cashc_sound ROM_END
-ROM_START( m1cashca ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "cash classic 2p sa1-083.bin", 0x0000, 0x010000, CRC(36a45c0d) SHA1(51eb91e42297894ae575502903833e219ac5add9) ) m1_cashc_sound ROM_END
+ROM_START( m1cashc ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "cash classic sa1-082 5p.bin", 0x0000, 0x010000, CRC(42d68675) SHA1(ed191e03bc7b42ae1884657b4559588eeedbdf31) ) m1_cashc_sound ROM_END_M1A_MCU
+ROM_START( m1cashca ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "cash classic 2p sa1-083.bin", 0x0000, 0x010000, CRC(36a45c0d) SHA1(51eb91e42297894ae575502903833e219ac5add9) ) m1_cashc_sound ROM_END_M1A_MCU
GAME( 1994, m1cashc ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Cash Classic (Maygay) (M1A/B) (set 1)",GAME_FLAGS )
GAME( 1994, m1cashca ,m1cashc ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Cash Classic (Maygay) (M1A/B) (set 2)",GAME_FLAGS )
@@ -3382,6 +3382,6 @@ ROM_START( m1atunk )
ROM_LOAD( "grm_pl_2.bin", 0x0000, 0x010000, CRC(a26a6345) SHA1(70ededa58b92d32e0968bb326d6579146c3bd6cb) )
ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 )
-ROM_END
+ROM_END_M1A_MCU
GAME( 19??, m1atunk ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Avantime?", "Random Runner (Avantime?)",GAME_FLAGS )
diff --git a/src/mame/drivers/merit.cpp b/src/mame/drivers/merit.cpp
index 7db3a2c5ee2..143185ffef5 100644
--- a/src/mame/drivers/merit.cpp
+++ b/src/mame/drivers/merit.cpp
@@ -868,8 +868,8 @@ static INPUT_PORTS_START( mroundup ) // todo: Find were Player 2 "Play" is mappe
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, "Points Per Coin" ) PORT_DIPLOCATION("SW1:5")
PORT_DIPSETTING( 0x10, "1 Point" )
PORT_DIPSETTING( 0x00, "5 Points" )
@@ -915,6 +915,22 @@ static INPUT_PORTS_START( pitbossb )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
+static INPUT_PORTS_START( mdchoice ) /* Does one of the dips (1 through 4) control number of Jokers? Currently there are 2 */
+ PORT_INCLUDE( pitboss )
+
+ PORT_MODIFY("DSW")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown) ) PORT_DIPLOCATION("SW:1")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown) ) PORT_DIPLOCATION("SW:4")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x30, 0x30, "Coin Lockout" ) PORT_DIPLOCATION("SW:5,6")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x30, "2 Coins" )
+ PORT_DIPSETTING( 0x20, "10 Coins" )
+INPUT_PORTS_END
+
static INPUT_PORTS_START( mpchoice ) /* pitbossc games but dips like The Round Up */
PORT_INCLUDE( pitboss )
@@ -970,7 +986,7 @@ static INPUT_PORTS_START( casino5 )
PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) /* AKA Diagnostics - Shows simple Statistics */
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* 1 displays additional screens in attract mode - custom ads screen (requires optional Keyboard to set up) */
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_DIPNAME( 0xc0, 0xc0, "Percentage Out" ) /* Controls Percentage out, 75%, 80%, 85% & 90% as per manual's "Tab Positions" - Need to verify values */
+ PORT_DIPNAME( 0xc0, 0xc0, "Percentage Out" ) PORT_DIPLOCATION("Special:1,2") /* Controls Percentage out, 75%, 80%, 85% & 90% as per manual's "Tab Positions" (pins #52 & #51??)- Need to verify values */
PORT_DIPSETTING( 0x00, "75%" )
PORT_DIPSETTING( 0x80, "80%" )
PORT_DIPSETTING( 0xc0, "85%" )
@@ -1002,14 +1018,15 @@ static INPUT_PORTS_START( casino5 )
PORT_DIPNAME( 0x10, 0x10, "Enable Acey Deucey" ) PORT_DIPLOCATION("SW1:5")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "2 Jokers in Deck" ) PORT_DIPLOCATION("SW1:6") /* Only used in "Points Replay" mode ? */
- PORT_DIPSETTING( 0x00, "Bet 4 Points" )
- PORT_DIPSETTING( 0x20, "Always" )
- PORT_DIPNAME( 0xc0, 0x00, "Maximum Bet" ) PORT_DIPLOCATION("SW1:7,8") /* Only used in "Points Replay" mode */
- PORT_DIPSETTING( 0x40, "1" )
- PORT_DIPSETTING( 0xc0, "10" )
- PORT_DIPSETTING( 0x80, "20" )
- PORT_DIPSETTING( 0x00, "50" )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
INPUT_PORTS_END
@@ -1468,12 +1485,12 @@ ROM_START( pitboss ) /* Program roms on a CTR-202 daughter card - Internal desig
ROM_LOAD( "2214-04_u7-0.u7", 0x6000, 0x4000, CRC(c5cf7060) SHA1(4a3209ad24ae649348b0e0470fc446d37b667975) ) /* 27128 eprom */
ROM_REGION( 0x6000, "gfx1", 0 )
- ROM_LOAD( "chr7.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */
- ROM_LOAD( "chr7.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Merit industries */
- ROM_LOAD( "chr7.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) )
+ ROM_LOAD( "chr7_u39.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */
+ ROM_LOAD( "chr7_u38.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Merit industries */
+ ROM_LOAD( "chr7_u37.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) )
ROM_REGION( 0x2000, "gfx2", 0 )
- ROM_LOAD( "chr7.rom.u40", 0x0000, 0x2000, CRC(db62c5ec) SHA1(a9967eb51436f342902fa3ce9c43d4d1ec5e0f3c) )
+ ROM_LOAD( "chr7_u40a.u40", 0x0000, 0x2000, CRC(db62c5ec) SHA1(a9967eb51436f342902fa3ce9c43d4d1ec5e0f3c) )
ROM_END
ROM_START( pitbossa ) /* Roms also found labeled simply as "PBHD" U5 through U7 */
@@ -1483,12 +1500,12 @@ ROM_START( pitbossa ) /* Roms also found labeled simply as "PBHD" U5 through U7
ROM_LOAD( "2214-03_u7-0.u7", 0x4000, 0x2000, CRC(023e8cb8) SHA1(cdb180a94d801137466c13ddfaf65918cb608c5a) ) /* Joker Poker, Blackjack, Foto Finish & The Dice Game */
ROM_REGION( 0x6000, "gfx1", 0 )
- ROM_LOAD( "chr7.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */
- ROM_LOAD( "chr7.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Merit industries */
- ROM_LOAD( "chr7.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) /* Cheltenham PA. 19012 */
+ ROM_LOAD( "chr7_u39.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */
+ ROM_LOAD( "chr7_u38.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Merit industries */
+ ROM_LOAD( "chr7_u37.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) /* Cheltenham PA. 19012 */
ROM_REGION( 0x2000, "gfx2", 0 )
- ROM_LOAD( "chr7.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) )
+ ROM_LOAD( "chr7_u40.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) )
ROM_END
ROM_START( pitbossa1 ) /* Specific build for localized region with no Free Hand Bonus */
@@ -1498,27 +1515,27 @@ ROM_START( pitbossa1 ) /* Specific build for localized region with no Free Hand
ROM_LOAD( "2214-03_u7-0.u7", 0x4000, 0x2000, CRC(023e8cb8) SHA1(cdb180a94d801137466c13ddfaf65918cb608c5a) ) /* Joker Poker, Blackjack, Foto Finish & The Dice Game */
ROM_REGION( 0x6000, "gfx1", 0 )
- ROM_LOAD( "chr7.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */
- ROM_LOAD( "chr7.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Merit industries */
- ROM_LOAD( "chr7.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) /* Cheltenham PA. 19012 */
+ ROM_LOAD( "chr7_u39.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */
+ ROM_LOAD( "chr7_u38.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Merit industries */
+ ROM_LOAD( "chr7_u37.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) /* Cheltenham PA. 19012 */
ROM_REGION( 0x2000, "gfx2", 0 )
- ROM_LOAD( "chr7.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) )
+ ROM_LOAD( "chr7_u40.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) )
ROM_END
-ROM_START( pitbossb ) /* Roms also found labeled simply as "PSB1" U5 through U7 */
+ROM_START( pitbossb ) /* Roms also found labeled as U5-0C, U6-0 & U7-0 */
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "u5-0c.u5", 0x0000, 0x2000, CRC(d8902656) SHA1(06da829201f6141a6b23afa0e277a3c7a122c26e) ) /* Internal designation: PSB1REV0 */
- ROM_LOAD( "u6-0.u6", 0x2000, 0x2000, CRC(bf903b01) SHA1(1f5f69cfd3eb105bd9bad071016931a79defa16b) ) /* Games included in this set are: */
- ROM_LOAD( "u7-0.u7", 0x4000, 0x2000, CRC(306351b9) SHA1(32cd243aa65571ee7fc72971b6a16beeb4ed9d85) ) /* Joker Poker, Blackjack, Super Slots & The Dice Game */
+ ROM_LOAD( "psb1_u5.u5", 0x0000, 0x2000, CRC(d8902656) SHA1(06da829201f6141a6b23afa0e277a3c7a122c26e) ) /* Internal designation: PSB1REV0 */
+ ROM_LOAD( "psb1_u6.u6", 0x2000, 0x2000, CRC(bf903b01) SHA1(1f5f69cfd3eb105bd9bad071016931a79defa16b) ) /* Games included in this set are: */
+ ROM_LOAD( "psb1_u7.u7", 0x4000, 0x2000, CRC(306351b9) SHA1(32cd243aa65571ee7fc72971b6a16beeb4ed9d85) ) /* Joker Poker, Blackjack, Super Slots & The Dice Game */
ROM_REGION( 0x6000, "gfx1", 0 )
- ROM_LOAD( "chr7.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */
- ROM_LOAD( "chr7.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Merit industries */
- ROM_LOAD( "chr7.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) /* Cheltenham PA. 19012 */
+ ROM_LOAD( "chr7_u39.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */
+ ROM_LOAD( "chr7_u38.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Merit industries */
+ ROM_LOAD( "chr7_u37.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) /* Cheltenham PA. 19012 */
ROM_REGION( 0x2000, "gfx2", 0 )
- ROM_LOAD( "chr7.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) )
+ ROM_LOAD( "chr7_u40.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) )
ROM_END
/* Known to exist is Pit Boss version M4A2 (confirmed via manual) and likely a M4A3 as well (not confirmed, but M4A4 is dumped) */
@@ -1530,12 +1547,27 @@ ROM_START( pitbossc )
ROM_LOAD( "m4a1_u7.u7", 0x4000, 0x2000, CRC(5fa5d436) SHA1(9f3fd81eae7f378268f3b4af8fd299ffb97d7fb6) ) /* Draw Poker, Blackjack, Acey Deucey & The Dice Game */
ROM_REGION( 0x6000, "gfx1", 0 )
- ROM_LOAD( "chr2.u39", 0x0000, 0x2000, CRC(f9613e7b) SHA1(1e8cafe142a235d65b43c7e46a79ed4f6272b61c) ) /* Shows: */
- ROM_LOAD( "chr2.u38", 0x2000, 0x2000, CRC(7af28902) SHA1(04f685389958d581aaf2c86940d1b8b8cec05d7a) ) /* (c) 1983 Merit industries Phila. PA. */
- ROM_LOAD( "chr2.u37", 0x4000, 0x2000, CRC(ea6f0c59) SHA1(f2c0ff99518c2cec3eb1b4042fa3754a702c0e34) ) /* All Rights Reserverd */
+ ROM_LOAD( "chr2_u39.u39", 0x0000, 0x2000, CRC(f9613e7b) SHA1(1e8cafe142a235d65b43c7e46a79ed4f6272b61c) ) /* Shows: */
+ ROM_LOAD( "chr2_u38.u38", 0x2000, 0x2000, CRC(7af28902) SHA1(04f685389958d581aaf2c86940d1b8b8cec05d7a) ) /* (c) 1983 Merit industries Phila. PA. */
+ ROM_LOAD( "chr2_u37.u37", 0x4000, 0x2000, CRC(ea6f0c59) SHA1(f2c0ff99518c2cec3eb1b4042fa3754a702c0e34) ) /* All Rights Reserverd */
ROM_REGION( 0x2000, "gfx2", 0 )
- ROM_LOAD( "chr2.u40", 0x0000, 0x2000, CRC(40c94dce) SHA1(86611e3a1048b2a3fffcc0110811656a2d0fc4a5) )
+ ROM_LOAD( "chr2_u40.u40", 0x0000, 0x2000, CRC(40c94dce) SHA1(86611e3a1048b2a3fffcc0110811656a2d0fc4a5) )
+ROM_END
+
+ROM_START( mdchoice )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "e4a1_u5.u5", 0x0000, 0x2000, CRC(bd77f8dc) SHA1(c9c85e3180be30e7a1d37abb6d4e7c777acfda81) ) /* Internal designation: E4A1REV0 */
+ ROM_LOAD( "e4a1_u6.u6", 0x2000, 0x2000, CRC(e5219c9a) SHA1(66511f5f9bcd64f3028bbf55a51a1b0db391567c) ) /* Games included in this set are: */
+ ROM_LOAD( "e4a1_u7.u7", 0x4000, 0x2000, CRC(9451d8db) SHA1(c2431b25543218fd8bc5a4eb79e8a77690e26c5e) ) /* Draw Poker, Blackjack, Acey Deucey & The Dice Game */
+
+ ROM_REGION( 0x6000, "gfx1", 0 )
+ ROM_LOAD( "chr2_u39.u39", 0x0000, 0x2000, CRC(f9613e7b) SHA1(1e8cafe142a235d65b43c7e46a79ed4f6272b61c) ) /* Shows: */
+ ROM_LOAD( "chr2_u38.u38", 0x2000, 0x2000, CRC(7af28902) SHA1(04f685389958d581aaf2c86940d1b8b8cec05d7a) ) /* MFG FOR: */
+ ROM_LOAD( "chr2_u37.u37", 0x4000, 0x2000, CRC(ea6f0c59) SHA1(f2c0ff99518c2cec3eb1b4042fa3754a702c0e34) ) /* EEI-CVS International */
+
+ ROM_REGION( 0x2000, "gfx2", 0 )
+ ROM_LOAD( "chr2_u40.u40", 0x0000, 0x2000, CRC(40c94dce) SHA1(86611e3a1048b2a3fffcc0110811656a2d0fc4a5) )
ROM_END
ROM_START( mpchoice ) /* Same games as pitbossc but different dips & can control the payout percentage (like The Round Up below) */
@@ -1545,27 +1577,42 @@ ROM_START( mpchoice ) /* Same games as pitbossc but different dips & can control
ROM_LOAD( "m4c1_u7.u7", 0x4000, 0x2000, CRC(f2b6aff8) SHA1(c5c1a4ba808d9830604bc2399e66b60c56bd6f05) ) /* Draw Poker, Blackjack, Acey Deucey & The Dice Game */
ROM_REGION( 0x6000, "gfx1", 0 )
- ROM_LOAD( "chr2.u39", 0x0000, 0x2000, CRC(f9613e7b) SHA1(1e8cafe142a235d65b43c7e46a79ed4f6272b61c) ) /* Shows: */
- ROM_LOAD( "chr2.u38", 0x2000, 0x2000, CRC(7af28902) SHA1(04f685389958d581aaf2c86940d1b8b8cec05d7a) ) /* (c) 1983 Merit industries Philadelphia PA. */
- ROM_LOAD( "chr2.u37", 0x4000, 0x2000, CRC(ea6f0c59) SHA1(f2c0ff99518c2cec3eb1b4042fa3754a702c0e34) ) /* All Rights Reserverd */
+ ROM_LOAD( "chr2_u39.u39", 0x0000, 0x2000, CRC(f9613e7b) SHA1(1e8cafe142a235d65b43c7e46a79ed4f6272b61c) ) /* Shows: */
+ ROM_LOAD( "chr2_u38.u38", 0x2000, 0x2000, CRC(7af28902) SHA1(04f685389958d581aaf2c86940d1b8b8cec05d7a) ) /* (c) 1983 Merit industries Philadelphia PA. */
+ ROM_LOAD( "chr2_u37.u37", 0x4000, 0x2000, CRC(ea6f0c59) SHA1(f2c0ff99518c2cec3eb1b4042fa3754a702c0e34) ) /* All Rights Reserverd */
ROM_REGION( 0x2000, "gfx2", 0 )
- ROM_LOAD( "chr2.u40", 0x0000, 0x2000, CRC(40c94dce) SHA1(86611e3a1048b2a3fffcc0110811656a2d0fc4a5) )
+ ROM_LOAD( "chr2_u40.u40", 0x0000, 0x2000, CRC(40c94dce) SHA1(86611e3a1048b2a3fffcc0110811656a2d0fc4a5) )
ROM_END
-ROM_START( casino5 ) /* Standard version, the rom set with 3315-02 U5-1 is the "Minnesota" version and is undumped */
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "3315-02_u5-0.u5", 0x0000, 0x2000, CRC(abe240d8) SHA1(296eb3251dd51147d6984a8c08c3be22e5ed8e86) ) /* Program roms on a CTR-202A daughter card */
+ROM_START( casino5 )
+ ROM_REGION( 0x10000, "maincpu", 0 ) /* Program roms on a CTR-202A daughter card */
+ ROM_LOAD( "3315-02_u5-2b.u5", 0x0000, 0x2000, CRC(31640f41) SHA1(22d22ea1b1ae1ff189629ffd4963fabcc300fca8) ) /* Internal designation: PACASINO FIVE 331502 U5-0B */
+ ROM_LOAD( "3315-02_u6-2b.u6", 0x2000, 0x4000, CRC(03851536) SHA1(904bf76567f965e70c0baf545e2f77d07f1c286b) )
+ ROM_LOAD( "3315-02_u7-2b.u7", 0x6000, 0x4000, CRC(76acb03f) SHA1(87bfd82015dd704a732f4a03dd470980af1dee72) )
+
+ ROM_REGION( 0x6000, "gfx1", 0 )
+ ROM_LOAD( "chr7_u39.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) )
+ ROM_LOAD( "chr7_u38.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) )
+ ROM_LOAD( "chr7_u37.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) )
+
+ ROM_REGION( 0x2000, "gfx2", 0 )
+ ROM_LOAD( "chr8_u40a.u40", 0x0000, 0x2000, CRC(b13a3fb1) SHA1(25760aa27c88b8be248a87df724bf8797d179e7a) )
+ROM_END
+
+ROM_START( casino5a ) /* Standard version, the rom set with 3315-02 U5-1 is the "Minnesota" version and is undumped */
+ ROM_REGION( 0x10000, "maincpu", 0 ) /* Program roms on a CTR-202A daughter card */
+ ROM_LOAD( "3315-02_u5-0.u5", 0x0000, 0x2000, CRC(abe240d8) SHA1(296eb3251dd51147d6984a8c08c3be22e5ed8e86) ) /* Internal designation: PCFS1 331502-0 */
ROM_LOAD( "3315-02_u6-0.u6", 0x2000, 0x4000, CRC(4d9f0c57) SHA1(d19b4b4f42d329ea35907d17c15a55b954b07295) )
ROM_LOAD( "3315-02_u7-0.u7", 0x6000, 0x4000, CRC(d3bc510d) SHA1(6222badabf629dd6334591867596f811883aed52) ) /* There is known to be a 3315-02 U7-0-A version (not dumped) */
ROM_REGION( 0x6000, "gfx1", 0 )
- ROM_LOAD( "chr7.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) )
- ROM_LOAD( "chr7.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) )
- ROM_LOAD( "chr7.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) )
+ ROM_LOAD( "chr7_u39.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) )
+ ROM_LOAD( "chr7_u38.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) )
+ ROM_LOAD( "chr7_u37.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) )
ROM_REGION( 0x2000, "gfx2", 0 )
- ROM_LOAD( "u40", 0x0000, 0x2000, CRC(b13a3fb1) SHA1(25760aa27c88b8be248a87df724bf8797d179e7a) )
+ ROM_LOAD( "chr8_u40a.u40", 0x0000, 0x2000, CRC(b13a3fb1) SHA1(25760aa27c88b8be248a87df724bf8797d179e7a) )
ROM_END
ROM_START( mroundup )
@@ -1575,12 +1622,12 @@ ROM_START( mroundup )
ROM_LOAD( "kru1cd_u7.u7", 0x4000, 0x2000, CRC(72131230) SHA1(e7c08b537848a7c6e6e987c6d0644a031bb238d4) ) /* Draw Poker, Blackjack, Foto Finish */
ROM_REGION( 0x6000, "gfx1", 0 )
- ROM_LOAD( "chr7.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) )
- ROM_LOAD( "chr7.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) )
- ROM_LOAD( "chr7.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) )
+ ROM_LOAD( "chr7_u39.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) )
+ ROM_LOAD( "chr7_u38.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) )
+ ROM_LOAD( "chr7_u37.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) )
ROM_REGION( 0x2000, "gfx2", 0 )
- ROM_LOAD( "chr7.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) )
+ ROM_LOAD( "chr7_u40.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) )
ROM_END
ROM_START( chkndraw )
@@ -2378,9 +2425,11 @@ GAME( 1983, pitbossa, pitboss, pitboss, pitbossa, driver_device, 0, ROT0, "
GAME( 1983, pitbossa1,pitboss, pitboss, pitbossa1,driver_device, 0, ROT0, "Merit", "The Pit Boss (2214-03, U5-1C)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1983, pitbossb, pitboss, pitboss, pitbossa, driver_device, 0, ROT0, "Merit", "The Pit Boss (PSB1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1983, pitbossc, pitboss, pitboss, pitbossb, driver_device, 0, ROT0, "Merit", "The Pit Boss (M4A1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1983, mpchoice, 0, pitboss, mpchoice, driver_device, 0, ROT0, "Merit", "Player's Choice (M4C1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1983, mdchoice, pitboss, pitboss, mdchoice, driver_device, 0, ROT0, "Merit", "Dealer's Choice (E4A1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS ) /* Copyright year based on other Pit Boss sets */
+GAME( 1983, mpchoice, pitboss, pitboss, mpchoice, driver_device, 0, ROT0, "Merit", "Player's Choice (M4C1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1984, casino5, 0, casino5, casino5, driver_device, 0, ROT0, "Merit", "Casino Five (3315-02, U5-0)", MACHINE_SUPPORTS_SAVE )
+GAME( 1989, casino5, 0, casino5, casino5, driver_device, 0, ROT0, "Merit", "Casino Five (3315-02, U5-2B)", MACHINE_SUPPORTS_SAVE )
+GAME( 1984, casino5a, casino5, casino5, casino5, driver_device, 0, ROT0, "Merit", "Casino Five (3315-02, U5-0)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, mroundup, 0, pitboss, mroundup, driver_device, 0, ROT0, "Merit", "The Round Up", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
diff --git a/src/mame/drivers/midyunit.cpp b/src/mame/drivers/midyunit.cpp
index aa4ca3619d3..2307873f7be 100644
--- a/src/mame/drivers/midyunit.cpp
+++ b/src/mame/drivers/midyunit.cpp
@@ -2742,136 +2742,168 @@ ROM_START( mkyawdim4 )
ROM_END
-
ROM_START( term2 )
ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */
- ROM_LOAD ( "t2_snd.3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) )
- ROM_RELOAD ( 0x30000, 0x20000 )
+ ROM_LOAD ( "sl1_terminator_2_u3_sound_rom.u3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) )
+ ROM_RELOAD ( 0x30000, 0x20000 )
ROM_REGION( 0x100000, "adpcm:oki", 0 ) /* ADPCM */
- ROM_LOAD ( "t2_snd.12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) )
- ROM_RELOAD( 0x40000, 0x40000 )
- ROM_LOAD ( "t2_snd.13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) )
- ROM_RELOAD( 0xc0000, 0x40000 )
+ ROM_LOAD ( "sl1_terminator_2_u12_sound_rom.u12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) )
+ ROM_RELOAD( 0x40000, 0x40000 )
+ ROM_LOAD ( "sl1_terminator_2_u13_sound_rom.u13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) )
+ ROM_RELOAD( 0xc0000, 0x40000 )
ROM_REGION16_LE( 0x100000, "user1", 0 ) /* 34010 code */
- ROM_LOAD16_BYTE( "t2-la4.105", 0x00000, 0x80000, CRC(d4d8d884) SHA1(3209e131b128f12af30b3c6056fd63df497f93eb) )
- ROM_LOAD16_BYTE( "t2-la4.89", 0x00001, 0x80000, CRC(25359415) SHA1(ca8b7e1b5a363b78499f92c979a11ace6f1dceab) )
+ ROM_LOAD16_BYTE( "la4_terminator_2_game_rom_u105.u105", 0x00000, 0x80000, CRC(d4d8d884) SHA1(3209e131b128f12af30b3c6056fd63df497f93eb) )
+ ROM_LOAD16_BYTE( "la4_terminator_2_game_rom_u89.u89", 0x00001, 0x80000, CRC(25359415) SHA1(ca8b7e1b5a363b78499f92c979a11ace6f1dceab) )
ROM_REGION( 0x800000, "gfx1", 0 )
- ROM_LOAD ( "t2.111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) )
- ROM_LOAD ( "t2.112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) )
- ROM_LOAD ( "t2.113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) )
- ROM_LOAD ( "t2.114", 0x180000, 0x80000, CRC(53c516ec) SHA1(2a33639bc5bb4e7f7b3e341ddb59173260461d20) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u111.u111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u112.u112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u113.u113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u114.u114", 0x180000, 0x80000, CRC(53c516ec) SHA1(2a33639bc5bb4e7f7b3e341ddb59173260461d20) )
- ROM_LOAD ( "t2.95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) )
- ROM_LOAD ( "t2.96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) )
- ROM_LOAD ( "t2.97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) )
- ROM_LOAD ( "t2.98", 0x380000, 0x80000, CRC(1a20ce29) SHA1(9089b7f77da5d67ad46ed249d72de8b8e0e5d807) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u95.u95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u96.u96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u97.u97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u98.u98", 0x380000, 0x80000, CRC(1a20ce29) SHA1(9089b7f77da5d67ad46ed249d72de8b8e0e5d807) )
- ROM_LOAD ( "t2.106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) )
- ROM_LOAD ( "t2.107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) )
- ROM_LOAD ( "t2.108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) )
- ROM_LOAD ( "t2.109", 0x580000, 0x80000, CRC(306a9366) SHA1(b94c23c033221f7f7fddd2911b8cec9549929768) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u106.u106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u107.u107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u108.u108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u109.u109", 0x580000, 0x80000, CRC(306a9366) SHA1(b94c23c033221f7f7fddd2911b8cec9549929768) )
ROM_END
ROM_START( term2la3 )
ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */
- ROM_LOAD ( "t2_snd.3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) )
- ROM_RELOAD ( 0x30000, 0x20000 )
+ ROM_LOAD ( "sl1_terminator_2_u3_sound_rom.u3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) )
+ ROM_RELOAD ( 0x30000, 0x20000 )
ROM_REGION( 0x100000, "adpcm:oki", 0 ) /* ADPCM */
- ROM_LOAD ( "t2_snd.12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) )
- ROM_RELOAD( 0x40000, 0x40000 )
- ROM_LOAD ( "t2_snd.13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) )
- ROM_RELOAD( 0xc0000, 0x40000 )
+ ROM_LOAD ( "sl1_terminator_2_u12_sound_rom.u12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) )
+ ROM_RELOAD( 0x40000, 0x40000 )
+ ROM_LOAD ( "sl1_terminator_2_u13_sound_rom.u13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) )
+ ROM_RELOAD( 0xc0000, 0x40000 )
ROM_REGION16_LE( 0x100000, "user1", 0 ) /* 34010 code */
- ROM_LOAD16_BYTE( "t2-la3.105", 0x00000, 0x80000, CRC(34142b28) SHA1(985fd169b3d62c4197fe4c6f11055a6c17872899) )
- ROM_LOAD16_BYTE( "t2-la3.89", 0x00001, 0x80000, CRC(5ffea427) SHA1(c6f65bc57b33ae1a123f610c635e0d65663e54da) )
+ ROM_LOAD16_BYTE( "la3_terminator_2_game_rom_u105.u105", 0x00000, 0x80000, CRC(34142b28) SHA1(985fd169b3d62c4197fe4c6f11055a6c17872899) )
+ ROM_LOAD16_BYTE( "la3_terminator_2_game_rom_u89.u89", 0x00001, 0x80000, CRC(5ffea427) SHA1(c6f65bc57b33ae1a123f610c635e0d65663e54da) )
ROM_REGION( 0x800000, "gfx1", 0 )
- ROM_LOAD ( "t2.111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) )
- ROM_LOAD ( "t2.112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) )
- ROM_LOAD ( "t2.113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) )
- ROM_LOAD ( "t2.114", 0x180000, 0x80000, CRC(53c516ec) SHA1(2a33639bc5bb4e7f7b3e341ddb59173260461d20) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u111.u111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u112.u112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u113.u113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u114.u114", 0x180000, 0x80000, CRC(53c516ec) SHA1(2a33639bc5bb4e7f7b3e341ddb59173260461d20) )
- ROM_LOAD ( "t2.95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) )
- ROM_LOAD ( "t2.96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) )
- ROM_LOAD ( "t2.97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) )
- ROM_LOAD ( "t2.98", 0x380000, 0x80000, CRC(1a20ce29) SHA1(9089b7f77da5d67ad46ed249d72de8b8e0e5d807) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u95.u95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u96.u96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u97.u97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u98.u98", 0x380000, 0x80000, CRC(1a20ce29) SHA1(9089b7f77da5d67ad46ed249d72de8b8e0e5d807) )
- ROM_LOAD ( "t2.106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) )
- ROM_LOAD ( "t2.107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) )
- ROM_LOAD ( "t2.108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) )
- ROM_LOAD ( "t2.109", 0x580000, 0x80000, CRC(306a9366) SHA1(b94c23c033221f7f7fddd2911b8cec9549929768) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u106.u106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u107.u107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u108.u108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u109.u109", 0x580000, 0x80000, CRC(306a9366) SHA1(b94c23c033221f7f7fddd2911b8cec9549929768) )
ROM_END
ROM_START( term2la2 )
ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */
- ROM_LOAD ( "t2_snd.3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) )
- ROM_RELOAD ( 0x30000, 0x20000 )
+ ROM_LOAD ( "sl1_terminator_2_u3_sound_rom.u3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) )
+ ROM_RELOAD ( 0x30000, 0x20000 )
ROM_REGION( 0x100000, "adpcm:oki", 0 ) /* ADPCM */
- ROM_LOAD ( "t2_snd.12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) )
- ROM_RELOAD( 0x40000, 0x40000 )
- ROM_LOAD ( "t2_snd.13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) )
- ROM_RELOAD( 0xc0000, 0x40000 )
+ ROM_LOAD ( "sl1_terminator_2_u12_sound_rom.u12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) )
+ ROM_RELOAD( 0x40000, 0x40000 )
+ ROM_LOAD ( "sl1_terminator_2_u13_sound_rom.u13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) )
+ ROM_RELOAD( 0xc0000, 0x40000 )
ROM_REGION16_LE( 0x100000, "user1", 0 ) /* 34010 code */
- ROM_LOAD16_BYTE( "t2-la2.105", 0x00000, 0x80000, CRC(7177de98) SHA1(0987be413d6cb5ded7059ad6ebbca49331b046b2) )
- ROM_LOAD16_BYTE( "t2-la2.89", 0x00001, 0x80000, CRC(14d7b9f5) SHA1(b8676d21d53fd3c8492d8911e749d74df1c66b1d) )
+ ROM_LOAD16_BYTE( "la2_terminator_2_game_rom_u105.u105", 0x00000, 0x80000, CRC(7177de98) SHA1(0987be413d6cb5ded7059ad6ebbca49331b046b2) )
+ ROM_LOAD16_BYTE( "la2_terminator_2_game_rom_u89.u89", 0x00001, 0x80000, CRC(14d7b9f5) SHA1(b8676d21d53fd3c8492d8911e749d74df1c66b1d) )
ROM_REGION( 0x800000, "gfx1", 0 )
- ROM_LOAD ( "t2.111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) )
- ROM_LOAD ( "t2.112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) )
- ROM_LOAD ( "t2.113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) )
- ROM_LOAD ( "t2.114", 0x180000, 0x80000, CRC(53c516ec) SHA1(2a33639bc5bb4e7f7b3e341ddb59173260461d20) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u111.u111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u112.u112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u113.u113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u114.u114", 0x180000, 0x80000, CRC(53c516ec) SHA1(2a33639bc5bb4e7f7b3e341ddb59173260461d20) )
- ROM_LOAD ( "t2.95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) )
- ROM_LOAD ( "t2.96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) )
- ROM_LOAD ( "t2.97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) )
- ROM_LOAD ( "t2.98", 0x380000, 0x80000, CRC(1a20ce29) SHA1(9089b7f77da5d67ad46ed249d72de8b8e0e5d807) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u95.u95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u96.u96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u97.u97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u98.u98", 0x380000, 0x80000, CRC(1a20ce29) SHA1(9089b7f77da5d67ad46ed249d72de8b8e0e5d807) )
- ROM_LOAD ( "t2.106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) )
- ROM_LOAD ( "t2.107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) )
- ROM_LOAD ( "t2.108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) )
- ROM_LOAD ( "t2.109", 0x580000, 0x80000, CRC(306a9366) SHA1(b94c23c033221f7f7fddd2911b8cec9549929768) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u106.u106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u107.u107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u108.u108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u109.u109", 0x580000, 0x80000, CRC(306a9366) SHA1(b94c23c033221f7f7fddd2911b8cec9549929768) )
ROM_END
ROM_START( term2la1 )
- ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */
- ROM_LOAD ( "t2_snd.3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) )
+ ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */
+ ROM_LOAD ( "sl1_terminator_2_u3_sound_rom.u3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) )
ROM_RELOAD ( 0x30000, 0x20000 )
- ROM_REGION( 0x100000, "adpcm:oki", 0 ) /* ADPCM */
- ROM_LOAD ( "t2_snd.12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) )
- ROM_RELOAD( 0x40000, 0x40000 )
- ROM_LOAD ( "t2_snd.13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) )
- ROM_RELOAD( 0xc0000, 0x40000 )
+ ROM_REGION( 0x100000, "adpcm:oki", 0 ) /* ADPCM */
+ ROM_LOAD ( "sl1_terminator_2_u12_sound_rom.u12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) )
+ ROM_RELOAD( 0x40000, 0x40000 )
+ ROM_LOAD ( "sl1_terminator_2_u13_sound_rom.u13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) )
+ ROM_RELOAD( 0xc0000, 0x40000 )
ROM_REGION16_LE( 0x100000, "user1", 0 ) /* 34010 code */
- ROM_LOAD16_BYTE( "t2-la1.105", 0x00000, 0x80000, CRC(ca52a8b0) SHA1(20b91bdd9fe8e7be6a3c3cb9684769733d66d401) )
- ROM_LOAD16_BYTE( "t2-la1.89", 0x00001, 0x80000, CRC(08535210) SHA1(a7986541bc504294bd6523ce691e19e496f8be7c) )
+ ROM_LOAD16_BYTE( "la1_terminator_2_game_rom_u105.u105", 0x00000, 0x80000, CRC(ca52a8b0) SHA1(20b91bdd9fe8e7be6a3c3cb9684769733d66d401) )
+ ROM_LOAD16_BYTE( "la1_terminator_2_game_rom_u89.u89", 0x00001, 0x80000, CRC(08535210) SHA1(a7986541bc504294bd6523ce691e19e496f8be7c) )
ROM_REGION( 0x800000, "gfx1", 0 )
- ROM_LOAD ( "t2.111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) )
- ROM_LOAD ( "t2.112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) )
- ROM_LOAD ( "t2.113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) )
- ROM_LOAD ( "t2.114", 0x180000, 0x80000, CRC(53c516ec) SHA1(2a33639bc5bb4e7f7b3e341ddb59173260461d20) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u111.u111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u112.u112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u113.u113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u114.u114", 0x180000, 0x80000, CRC(53c516ec) SHA1(2a33639bc5bb4e7f7b3e341ddb59173260461d20) )
- ROM_LOAD ( "t2.95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) )
- ROM_LOAD ( "t2.96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) )
- ROM_LOAD ( "t2.97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) )
- ROM_LOAD ( "t2.98", 0x380000, 0x80000, CRC(1a20ce29) SHA1(9089b7f77da5d67ad46ed249d72de8b8e0e5d807) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u95.u95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u96.u96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u97.u97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u98.u98", 0x380000, 0x80000, CRC(1a20ce29) SHA1(9089b7f77da5d67ad46ed249d72de8b8e0e5d807) )
- ROM_LOAD ( "t2.106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) )
- ROM_LOAD ( "t2.107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) )
- ROM_LOAD ( "t2.108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) )
- ROM_LOAD ( "t2.109", 0x580000, 0x80000, CRC(306a9366) SHA1(b94c23c033221f7f7fddd2911b8cec9549929768) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u106.u106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u107.u107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u108.u108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u109.u109", 0x580000, 0x80000, CRC(306a9366) SHA1(b94c23c033221f7f7fddd2911b8cec9549929768) )
+ROM_END
+
+
+ROM_START( term2lg1 ) /* All reported German versions use standard English sound roms */
+ ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */
+ ROM_LOAD ( "sl1_terminator_2_u3_sound_rom.u3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) )
+ ROM_RELOAD ( 0x30000, 0x20000 )
+
+ ROM_REGION( 0x100000, "adpcm:oki", 0 ) /* ADPCM */
+ ROM_LOAD ( "sl1_terminator_2_u12_sound_rom.u12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) )
+ ROM_RELOAD( 0x40000, 0x40000 )
+ ROM_LOAD ( "sl1_terminator_2_u13_sound_rom.u13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) )
+ ROM_RELOAD( 0xc0000, 0x40000 )
+
+ ROM_REGION16_LE( 0x100000, "user1", 0 ) /* 34010 code */
+ ROM_LOAD16_BYTE( "lg1_terminator_2_game_rom_u105.u105", 0x00000, 0x80000, CRC(6aad6389) SHA1(912f4e1911e537ed17775dbff6be0ab28ac820a9) )
+ ROM_LOAD16_BYTE( "lg1_terminator_2_game_rom_u89.u89", 0x00001, 0x80000, CRC(5a052766) SHA1(a746c18476000fb38107482e22c767a13dd580d2) )
+
+ ROM_REGION( 0x800000, "gfx1", 0 )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u111.u111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u112.u112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u113.u113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) )
+ ROM_LOAD ( "lg1_terminator_2_game_rom_u114.u114", 0x180000, 0x80000, CRC(1f0c6d8f) SHA1(b8908a19e87a4fdeb6f06944eb496cc8766d51e7) )
+
+ ROM_LOAD ( "la1_terminator_2_game_rom_u95.u95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u96.u96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u97.u97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) )
+ ROM_LOAD ( "lg1_terminator_2_game_rom_u98.u98", 0x380000, 0x80000, CRC(800c6205) SHA1(8f82a5e94505e33aa6c044040d7d002ea09045ef) )
+
+ ROM_LOAD ( "la1_terminator_2_game_rom_u106.u106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u107.u107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) )
+ ROM_LOAD ( "la1_terminator_2_game_rom_u108.u108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) )
+ ROM_LOAD ( "lg1_terminator_2_game_rom_u109.u109", 0x580000, 0x80000, CRC(70dc2ff3) SHA1(de756a3c1e3f5f916d0e5c463ec758814fdcd7f5) )
ROM_END
@@ -2982,6 +3014,7 @@ GAME( 1991, term2, 0, yunit_adpcm_6bit_faster, term2, midyunit_state,
GAME( 1991, term2la3, term2, yunit_adpcm_6bit_faster, term2, midyunit_state, term2la3, ORIENTATION_FLIP_X, "Midway", "Terminator 2 - Judgment Day (rev LA3 03/27/92)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, term2la2, term2, yunit_adpcm_6bit_faster, term2, midyunit_state, term2la2, ORIENTATION_FLIP_X, "Midway", "Terminator 2 - Judgment Day (rev LA2 12/09/91)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, term2la1, term2, yunit_adpcm_6bit_faster, term2, midyunit_state, term2la1, ORIENTATION_FLIP_X, "Midway", "Terminator 2 - Judgment Day (rev LA1 11/01/91)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, term2lg1, term2, yunit_adpcm_6bit_faster, term2, midyunit_state, term2la1, ORIENTATION_FLIP_X, "Midway", "Terminator 2 - Judgment Day (rev LG1 11/04/91)", MACHINE_SUPPORTS_SAVE )
GAME( 1992, mkla4, mk, yunit_adpcm_6bit_fast, mkla4, midyunit_state, mkyunit, ROT0, "Midway", "Mortal Kombat (rev 4.0 09/28/92)", MACHINE_SUPPORTS_SAVE )
GAME( 1992, mkla3, mk, yunit_adpcm_6bit_fast, mkla4, midyunit_state, mkyunit, ROT0, "Midway", "Mortal Kombat (rev 3.0 08/31/92)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/modellot.cpp b/src/mame/drivers/modellot.cpp
index 0743a324e06..215d966e890 100644
--- a/src/mame/drivers/modellot.cpp
+++ b/src/mame/drivers/modellot.cpp
@@ -121,7 +121,7 @@ UINT32 modellot_state::screen_update_modellot(screen_device &screen, bitmap_ind1
chr = m_p_videoram[x+ma];
- if BIT(chr, 7) inv = 0xff;
+ if (BIT(chr, 7)) inv = 0xff;
chr &= 0x7f; // cursor
diff --git a/src/mame/drivers/mpu4.cpp b/src/mame/drivers/mpu4.cpp
index 9240e476c81..3f437cfdb3c 100644
--- a/src/mame/drivers/mpu4.cpp
+++ b/src/mame/drivers/mpu4.cpp
@@ -2264,12 +2264,126 @@ static mpu4_chr_table blsbys_data[8] = {
//request 36 42 27 42 09 42 27 42 42 09
//verify 00 04 04 0C 0C 1C 14 2C 5C 2C
+DRIVER_INIT_MEMBER(mpu4_state,m4_low_volt_alt)
+{
+ //Some games can't use the 50Hz circuit to check voltage issues, handle it here
+ m_low_volt_detect_disable =1;
+}
DRIVER_INIT_MEMBER(mpu4_state,m4_small_extender)
{
m_lamp_extender=SMALL_CARD;
}
+DRIVER_INIT_MEMBER(mpu4_state,m4_large_extender_a)
+{
+ m_lamp_extender=LARGE_CARD_A;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_large_extender_b)
+{
+ m_lamp_extender=LARGE_CARD_B;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_large_extender_c)
+{
+ m_lamp_extender=LARGE_CARD_C;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_hopper_tubes)
+{
+ m_hopper = TUBES;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_hopper_duart_a)
+{
+ m_hopper = HOPPER_DUART_A;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_hopper_duart_b)
+{
+ m_hopper = HOPPER_DUART_B;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_hopper_duart_c)
+{
+ m_hopper = HOPPER_DUART_C;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_hopper_nonduart_a)
+{
+ m_hopper = HOPPER_NONDUART_A;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_hopper_nonduart_b)
+{
+ m_hopper = HOPPER_NONDUART_B;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_led_a)
+{
+ m_led_extender = CARD_A;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_led_b)
+{
+ m_led_extender = CARD_B;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_led_c)
+{
+ m_led_extender = CARD_C;
+}
+
+//TODO: Replace with standard six reels once sets are sorted out - is really six_reel_std
+DRIVER_INIT_MEMBER(mpu4_state,m4altreels)
+{
+ m_reel_mux=SIX_REEL_1TO8;
+ m_reels = 6;
+ DRIVER_INIT_CALL(m4default_banks);
+}
+DRIVER_INIT_MEMBER(mpu4_state,m4default_reels)
+{
+ m_reel_mux=STANDARD_REEL;
+ m_reels = 4;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_five_reel_std)
+{
+ m_reel_mux=FIVE_REEL_5TO8;
+ m_reels = 5;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_five_reel_rev)
+{
+ m_reel_mux=FIVE_REEL_8TO5;
+ m_reels = 5;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_five_reel_alt)
+{
+ m_reel_mux=FIVE_REEL_3TO6;
+ m_reels = 5;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_six_reel_std)
+{
+ m_reel_mux=SIX_REEL_1TO8;
+ m_reels = 6;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_six_reel_alt)
+{
+ m_reel_mux=SIX_REEL_5TO8;
+ m_reels = 6;
+}
+
+DRIVER_INIT_MEMBER(mpu4_state,m4_seven_reel)
+{
+ m_reel_mux=SEVEN_REEL;
+ m_reels = 7;
+}
+
DRIVER_INIT_MEMBER(mpu4_state,m4_andycp10c)
{
@@ -2280,23 +2394,12 @@ DRIVER_INIT_MEMBER(mpu4_state,m4_andycp10c)
DRIVER_INIT_MEMBER(mpu4_state,m_oldtmr)
{
- m_reel_mux=SIX_REEL_1TO8;
- m_reels = 6;
-
+ DRIVER_INIT_CALL(m4_six_reel_std);
DRIVER_INIT_CALL(m4default_banks);
m_current_chr_table = oldtmr_data;
}
-DRIVER_INIT_MEMBER(mpu4_state,m4altreels)
-{
- m_reel_mux=SIX_REEL_1TO8;
- m_reels = 6;
-
- DRIVER_INIT_CALL(m4default_banks);
-}
-
-
DRIVER_INIT_MEMBER(mpu4_state,m_ccelbr)
{
DRIVER_INIT_CALL(m4default);
@@ -2311,8 +2414,7 @@ DRIVER_INIT_MEMBER(mpu4_state,m4gambal)
DRIVER_INIT_MEMBER(mpu4_state,m_grtecp)
{
- m_reel_mux=FIVE_REEL_5TO8;
- m_reels = 5;
+ DRIVER_INIT_CALL(m4_five_reel_std);
DRIVER_INIT_CALL(m4_small_extender);
DRIVER_INIT_CALL(m4default_banks);
@@ -2322,19 +2424,12 @@ DRIVER_INIT_MEMBER(mpu4_state,m_grtecp)
DRIVER_INIT_MEMBER(mpu4_state,m_blsbys)
{
m_bwb_bank=1;
- m_reel_mux=FIVE_REEL_5TO8;
- m_reels = 5;
+ DRIVER_INIT_CALL(m4_five_reel_std);
m_bwb_chr_table1 = blsbys_data1;
m_current_chr_table = blsbys_data;
DRIVER_INIT_CALL(m4default_big);
}
-DRIVER_INIT_MEMBER(mpu4_state,m4default_reels)
-{
- m_reel_mux=STANDARD_REEL;
- m_reels = 4;
- m_bwb_bank=0;
-}
DRIVER_INIT_MEMBER(mpu4_state,m4default_banks)
{
@@ -2356,6 +2451,7 @@ DRIVER_INIT_MEMBER(mpu4_state,m4default_alt)
DRIVER_INIT_MEMBER(mpu4_state,m4default)
{
DRIVER_INIT_CALL(m4default_reels);
+ m_bwb_bank=0;
DRIVER_INIT_CALL(m4default_banks);
}
@@ -2369,6 +2465,7 @@ DRIVER_INIT_MEMBER(mpu4_state,m4default_big)
{
printf("Error: Extended banking selected on set <=0x10000 in size, ignoring\n");
DRIVER_INIT_CALL(m4default_reels);
+ m_bwb_bank=0;
DRIVER_INIT_CALL(m4default_banks);
}
else
@@ -2451,12 +2548,14 @@ DRIVER_INIT_MEMBER(mpu4_state,crystali)
/* generate a 50 Hz signal (based on an RC time) */
TIMER_DEVICE_CALLBACK_MEMBER(mpu4_state::gen_50hz)
{
- /* Although reported as a '50Hz' signal, the fact that both rising and
- falling edges of the pulse are used means the timer actually gives a 100Hz
- oscillating signal.*/
- m_signal_50hz = m_signal_50hz?0:1;
- m_pia4->ca1_w(m_signal_50hz); /* signal is connected to IC4 CA1 */
-
+ if (!m_low_volt_detect_disable)
+ {
+ /* Although reported as a '50Hz' signal, the fact that both rising and
+ falling edges of the pulse are used means the timer actually gives a 100Hz
+ oscillating signal.*/
+ m_signal_50hz = m_signal_50hz?0:1;
+ m_pia4->ca1_w(m_signal_50hz); /* signal is connected to IC4 CA1 */
+ }
update_meters();//run at 100Hz to sync with PIAs
}
@@ -2499,6 +2598,14 @@ ADDRESS_MAP_END
MCFG_STEPPER_INDEX_PATTERN(0x00)\
MCFG_STEPPER_INIT_PHASE(2)
+#define MCFG_MPU4_TYPE4_REEL_ADD(_tag)\
+ MCFG_STEPPER_ADD(_tag)\
+ MCFG_STEPPER_REEL_TYPE(BARCREST_48STEP_REEL)\
+ MCFG_STEPPER_START_INDEX(93)\
+ MCFG_STEPPER_END_INDEX(2)\
+ MCFG_STEPPER_INDEX_PATTERN(0x00)\
+ MCFG_STEPPER_INIT_PHASE(2)
+
#define MCFG_MPU4_BWB_REEL_ADD(_tag)\
MCFG_STEPPER_ADD(_tag)\
MCFG_STEPPER_REEL_TYPE(BARCREST_48STEP_REEL)\
@@ -2507,6 +2614,50 @@ ADDRESS_MAP_END
MCFG_STEPPER_INDEX_PATTERN(0x00)\
MCFG_STEPPER_INIT_PHASE(2)
+MACHINE_CONFIG_FRAGMENT( mpu4_std_3reel )
+ MCFG_MPU4_STD_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_STD_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_STD_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+MACHINE_CONFIG_END
+
+MACHINE_CONFIG_FRAGMENT( mpu4_type2_3reel )
+ MCFG_MPU4_TYPE2_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_TYPE2_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_TYPE2_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+MACHINE_CONFIG_END
+
+MACHINE_CONFIG_FRAGMENT( mpu4_type3_3reel )
+ MCFG_MPU4_TYPE3_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_TYPE3_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_TYPE3_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+MACHINE_CONFIG_END
+
+MACHINE_CONFIG_FRAGMENT( mpu4_type4_3reel )
+ MCFG_MPU4_TYPE4_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+MACHINE_CONFIG_END
+
+MACHINE_CONFIG_FRAGMENT( mpu4_bwb_3reel )
+ MCFG_MPU4_BWB_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+MACHINE_CONFIG_END
MACHINE_CONFIG_FRAGMENT( mpu4_std_4reel )
MCFG_MPU4_STD_REEL_ADD("reel0")
@@ -2519,6 +2670,50 @@ MACHINE_CONFIG_FRAGMENT( mpu4_std_4reel )
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb))
MACHINE_CONFIG_END
+MACHINE_CONFIG_FRAGMENT( mpu4_type2_4reel )
+ MCFG_MPU4_TYPE2_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_TYPE2_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_TYPE2_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+ MCFG_MPU4_TYPE2_REEL_ADD("reel3")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb))
+MACHINE_CONFIG_END
+
+MACHINE_CONFIG_FRAGMENT( mpu4_type3_4reel )
+ MCFG_MPU4_TYPE3_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_TYPE3_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_TYPE3_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+ MCFG_MPU4_TYPE3_REEL_ADD("reel3")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb))
+MACHINE_CONFIG_END
+
+MACHINE_CONFIG_FRAGMENT( mpu4_type4_4reel )
+ MCFG_MPU4_TYPE4_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel3")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb))
+MACHINE_CONFIG_END
+
+MACHINE_CONFIG_FRAGMENT( mpu4_bwb_4reel )
+ MCFG_MPU4_BWB_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel3")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb))
+MACHINE_CONFIG_END
+
MACHINE_CONFIG_FRAGMENT( mpu4_std_5reel )
MCFG_MPU4_STD_REEL_ADD("reel0")
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
@@ -2532,6 +2727,58 @@ MACHINE_CONFIG_FRAGMENT( mpu4_std_5reel )
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb))
MACHINE_CONFIG_END
+MACHINE_CONFIG_FRAGMENT( mpu4_type2_5reel )
+ MCFG_MPU4_TYPE2_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_TYPE2_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_TYPE2_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+ MCFG_MPU4_TYPE2_REEL_ADD("reel3")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb))
+ MCFG_MPU4_TYPE2_REEL_ADD("reel4")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb))
+MACHINE_CONFIG_END
+
+MACHINE_CONFIG_FRAGMENT( mpu4_type3_5reel )
+ MCFG_MPU4_TYPE3_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_TYPE3_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_TYPE3_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+ MCFG_MPU4_TYPE3_REEL_ADD("reel3")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb))
+ MCFG_MPU4_TYPE3_REEL_ADD("reel4")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb))
+MACHINE_CONFIG_END
+
+MACHINE_CONFIG_FRAGMENT( mpu4_type4_5reel )
+ MCFG_MPU4_TYPE4_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel3")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel4")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb))
+MACHINE_CONFIG_END
+
+MACHINE_CONFIG_FRAGMENT( mpu4_bwb_5reel )
+ MCFG_MPU4_BWB_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel3")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel4")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb))
+MACHINE_CONFIG_END
+
MACHINE_CONFIG_FRAGMENT( mpu4_std_6reel )
MCFG_MPU4_STD_REEL_ADD("reel0")
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
@@ -2562,8 +2809,37 @@ MACHINE_CONFIG_FRAGMENT( mpu4_type2_6reel )
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb))
MACHINE_CONFIG_END
+MACHINE_CONFIG_FRAGMENT( mpu4_type3_6reel )
+ MCFG_MPU4_TYPE3_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_TYPE3_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_TYPE3_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+ MCFG_MPU4_TYPE3_REEL_ADD("reel3")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb))
+ MCFG_MPU4_TYPE3_REEL_ADD("reel4")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb))
+ MCFG_MPU4_TYPE3_REEL_ADD("reel5")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb))
+MACHINE_CONFIG_END
-MACHINE_CONFIG_FRAGMENT( mpu4_bwb_5reel )
+MACHINE_CONFIG_FRAGMENT( mpu4_type4_6reel )
+ MCFG_MPU4_TYPE4_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel3")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel4")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel5")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb))
+MACHINE_CONFIG_END
+
+MACHINE_CONFIG_FRAGMENT( mpu4_bwb_6reel )
MCFG_MPU4_BWB_REEL_ADD("reel0")
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
MCFG_MPU4_BWB_REEL_ADD("reel1")
@@ -2574,9 +2850,50 @@ MACHINE_CONFIG_FRAGMENT( mpu4_bwb_5reel )
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb))
MCFG_MPU4_BWB_REEL_ADD("reel4")
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel5")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb))
MACHINE_CONFIG_END
-MACHINE_CONFIG_FRAGMENT( mpu4_alt_7reel )
+
+MACHINE_CONFIG_FRAGMENT( mpu4_std_7reel )
+ MCFG_MPU4_STD_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_STD_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_STD_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+ MCFG_MPU4_STD_REEL_ADD("reel3")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb))
+ MCFG_MPU4_STD_REEL_ADD("reel4")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb))
+ MCFG_MPU4_STD_REEL_ADD("reel5")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb))
+ MCFG_MPU4_STD_REEL_ADD("reel6")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel6_optic_cb))
+ MCFG_MPU4_STD_REEL_ADD("reel7")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb))
+MACHINE_CONFIG_END
+
+MACHINE_CONFIG_FRAGMENT( mpu4_type2_7reel )
+ MCFG_MPU4_TYPE2_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_TYPE2_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_TYPE2_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+ MCFG_MPU4_TYPE2_REEL_ADD("reel3")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb))
+ MCFG_MPU4_TYPE2_REEL_ADD("reel4")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb))
+ MCFG_MPU4_TYPE2_REEL_ADD("reel5")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb))
+ MCFG_MPU4_TYPE2_REEL_ADD("reel6")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel6_optic_cb))
+ MCFG_MPU4_TYPE2_REEL_ADD("reel7")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb))
+MACHINE_CONFIG_END
+
+MACHINE_CONFIG_FRAGMENT( mpu4_type3_7reel )
MCFG_MPU4_TYPE3_REEL_ADD("reel0")
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
MCFG_MPU4_TYPE3_REEL_ADD("reel1")
@@ -2595,6 +2912,44 @@ MACHINE_CONFIG_FRAGMENT( mpu4_alt_7reel )
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb))
MACHINE_CONFIG_END
+MACHINE_CONFIG_FRAGMENT( mpu4_type4_7reel )
+ MCFG_MPU4_TYPE4_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel3")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel4")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel5")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel6")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel6_optic_cb))
+ MCFG_MPU4_TYPE4_REEL_ADD("reel7")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb))
+MACHINE_CONFIG_END
+
+MACHINE_CONFIG_FRAGMENT( mpu4_bwb_7reel )
+ MCFG_MPU4_BWB_REEL_ADD("reel0")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel1")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel2")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel3")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel4")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel5")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel6")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel6_optic_cb))
+ MCFG_MPU4_BWB_REEL_ADD("reel7")
+ MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb))
+MACHINE_CONFIG_END
+
MACHINE_CONFIG_FRAGMENT( mpu4_common )
MCFG_TIMER_DRIVER_ADD_PERIODIC("50hz", mpu4_state, gen_50hz, attotime::from_hz(100))
diff --git a/src/mame/drivers/mpu4sw.hxx b/src/mame/drivers/mpu4sw.hxx
index 29c750a7cf9..053d39615c4 100644
--- a/src/mame/drivers/mpu4sw.hxx
+++ b/src/mame/drivers/mpu4sw.hxx
@@ -649,7 +649,7 @@ GAME_CUSTOM( 199?, m4denmendnc, m4denmen, "denc.p1", 0
GAME_CUSTOM( 199?, m4denmendnk, m4denmen, "denk.p1", 0x0000, 0x010000, CRC(8983cbe0) SHA1(159dcbc3f5d24b6be03ae9c3c2af58993bebd38c), "Barcrest","Dennis The Menace (Barcrest) (MPU4) (DEN 1.2K)" )
GAME_CUSTOM( 199?, m4denmendny, m4denmen, "deny.p1", 0x0000, 0x010000, CRC(83ebd9f6) SHA1(f59e9d34295df8200f85a51d725437954acf9bdc), "Barcrest","Dennis The Menace (Barcrest) (MPU4) (DEN 1.2Y)" )
-GAME_CUSTOM( 199?, m4denmend5, m4denmen, "dm5s.p1", 0x0000, 0x010000, CRC(49672daa) SHA1(92e327b59b532e58b8c2a4e507f56c2ae069420c), "Barcrest","Dennis The Menace (Barcrest) (MPU4) (DM5 0.1))" )
+GAME_CUSTOM( 199?, m4denmend5, m4denmen, "dm5s.p1", 0x0000, 0x010000, CRC(49672daa) SHA1(92e327b59b532e58b8c2a4e507f56c2ae069420c), "Barcrest","Dennis The Menace (Barcrest) (MPU4) (DM5 0.1)" )
GAME_CUSTOM( 199?, m4denmend5d, m4denmen, "dm5d.p1", 0x0000, 0x010000, CRC(0c6250d5) SHA1(56b316df56d6448137332044bfe1081401eef3e8), "Barcrest","Dennis The Menace (Barcrest) (MPU4) (DM5 0.1D)" )
GAME_CUSTOM( 199?, m4denmend5ad, m4denmen, "dm5ad.p1", 0x0000, 0x010000, CRC(f01125cc) SHA1(faa80bfb107db127b2f9c4c7d23ec495775d2162), "Barcrest","Dennis The Menace (Barcrest) (MPU4) (DM5 0.1AD)" )
GAME_CUSTOM( 199?, m4denmend5b, m4denmen, "dm5b.p1", 0x0000, 0x010000, CRC(2c6dae4c) SHA1(281e4ba31a60fb5600790f21095e697db80736b7), "Barcrest","Dennis The Menace (Barcrest) (MPU4) (DM5 0.1B)" )
@@ -906,62 +906,62 @@ GAME_CUSTOM( 199?, m4topten__b, m4topten, "topt15t", 0x0000, 0x020000,
// "(C)1993 BARCREST" and "TOC 0.3"
GAME_CUSTOM( 199?, m4toot, 0, "toc03s.p1", 0x0000, 0x020000, CRC(30feff92) SHA1(14397768ebd7469b4d1cff22ca9727f63608a98a), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3)" )
-GAME_CUSTOM( 199?, m4toot__j, m4toot, "toc03c.p1", 0x0000, 0x020000, CRC(752ffa3f) SHA1(6cbe521ff85173159b6d34cc3e29a4192cd66394), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 1)" )
-GAME_CUSTOM( 199?, m4toot__a, m4toot, "toc03ad.p1", 0x0000, 0x020000, CRC(f67e53c1) SHA1(07a50fb649c5085a33f0a1a9b3d65b0b61a3f152), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 2)" )
-GAME_CUSTOM( 199?, m4toot__b, m4toot, "toc03b.p1", 0x0000, 0x020000, CRC(4265472d) SHA1(01d5eb4e0a30abd1efed45658dcd8455494aabc4), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 3)" )
-GAME_CUSTOM( 199?, m4toot__c, m4toot, "toc03bd.p1", 0x0000, 0x020000, CRC(7b64fd04) SHA1(377af32317d8356f06b19de553a13e8558993c34), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 4)" )
-GAME_CUSTOM( 199?, m4toot__d, m4toot, "toc03d.p1", 0x0000, 0x020000, CRC(61f6b566) SHA1(2abd8092fe387c474ed10885a23ac242fa1462fa), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 5)" )
-GAME_CUSTOM( 199?, m4toot__e, m4toot, "toc03dk.p1", 0x0000, 0x020000, CRC(31a35552) SHA1(3765fe6209d7b33afa1805ba56376e83e825165f), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4toot__f, m4toot, "toc03dr.p1", 0x0000, 0x020000, CRC(82acee63) SHA1(5a95425d6175c6496d745011d0ca3d744a027579), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 7)" )
-GAME_CUSTOM( 199?, m4toot__g, m4toot, "toc03dy.p1", 0x0000, 0x020000, CRC(b64075ac) SHA1(ffdf8e45c2eab593570e15efd5161b67de5e4ecf), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 8)" )
-GAME_CUSTOM( 199?, m4toot__h, m4toot, "toc03k.p1", 0x0000, 0x020000, CRC(08a2ef7b) SHA1(a4181db6280c7cc37b54baaf9cce1e61f61f3274), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 9)" )
-GAME_CUSTOM( 199?, m4toot__i, m4toot, "toc03r.p1", 0x0000, 0x020000, CRC(bbad544a) SHA1(5fb31e5641a9e85147f5b61c5aba5a1ee7470f9c), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 10)" )
-GAME_CUSTOM( 199?, m4toot__k, m4toot, "toc03y.p1", 0x0000, 0x020000, CRC(8f41cf85) SHA1(315b359d6d1a9f6ad939be1fc5e4d8f21f998fb8), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 12)" )
+GAME_CUSTOM( 199?, m4toot__j, m4toot, "toc03c.p1", 0x0000, 0x020000, CRC(752ffa3f) SHA1(6cbe521ff85173159b6d34cc3e29a4192cd66394), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 C)" )
+GAME_CUSTOM( 199?, m4toot__a, m4toot, "toc03ad.p1", 0x0000, 0x020000, CRC(f67e53c1) SHA1(07a50fb649c5085a33f0a1a9b3d65b0b61a3f152), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 AD)" )
+GAME_CUSTOM( 199?, m4toot__b, m4toot, "toc03b.p1", 0x0000, 0x020000, CRC(4265472d) SHA1(01d5eb4e0a30abd1efed45658dcd8455494aabc4), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 B)" )
+GAME_CUSTOM( 199?, m4toot__c, m4toot, "toc03bd.p1", 0x0000, 0x020000, CRC(7b64fd04) SHA1(377af32317d8356f06b19de553a13e8558993c34), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 BD)" )
+GAME_CUSTOM( 199?, m4toot__d, m4toot, "toc03d.p1", 0x0000, 0x020000, CRC(61f6b566) SHA1(2abd8092fe387c474ed10885a23ac242fa1462fa), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 D)" )
+GAME_CUSTOM( 199?, m4toot__e, m4toot, "toc03dk.p1", 0x0000, 0x020000, CRC(31a35552) SHA1(3765fe6209d7b33afa1805ba56376e83e825165f), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 KD)" )
+GAME_CUSTOM( 199?, m4toot__f, m4toot, "toc03dr.p1", 0x0000, 0x020000, CRC(82acee63) SHA1(5a95425d6175c6496d745011d0ca3d744a027579), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 RD)" )
+GAME_CUSTOM( 199?, m4toot__g, m4toot, "toc03dy.p1", 0x0000, 0x020000, CRC(b64075ac) SHA1(ffdf8e45c2eab593570e15efd5161b67de5e4ecf), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 YD)" )
+GAME_CUSTOM( 199?, m4toot__h, m4toot, "toc03k.p1", 0x0000, 0x020000, CRC(08a2ef7b) SHA1(a4181db6280c7cc37b54baaf9cce1e61f61f3274), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 K)" )
+GAME_CUSTOM( 199?, m4toot__i, m4toot, "toc03r.p1", 0x0000, 0x020000, CRC(bbad544a) SHA1(5fb31e5641a9e85147f5b61c5aba5a1ee7470f9c), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 R)" )
+GAME_CUSTOM( 199?, m4toot__k, m4toot, "toc03y.p1", 0x0000, 0x020000, CRC(8f41cf85) SHA1(315b359d6d1a9f6ad939be1fc5e4d8f21f998fb8), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 Y)" )
// "(C)1993 BARCREST" and "TOC 0.4"
GAME_CUSTOM( 199?, m4toot__v, m4toot, "toc04s.p1", 0x0000, 0x020000, CRC(295e6fff) SHA1(a21d991f00f144e12de60b891e3e2e5dd7d08d71), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4)" )
-GAME_CUSTOM( 199?, m4toot__l, m4toot, "toc04ad.p1", 0x0000, 0x020000, CRC(59075e2e) SHA1(a3ad5c642fb9cebcce2fb6c1e65514f2414948e0), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 13)" )
-GAME_CUSTOM( 199?, m4toot__m, m4toot, "toc04b.p1", 0x0000, 0x020000, CRC(b2d54721) SHA1(4c72d434c0f4f37b9a3f08a760c7fe3851717059), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 14)" )
-GAME_CUSTOM( 199?, m4toot__n, m4toot, "toc04bd.p1", 0x0000, 0x020000, CRC(d41df0eb) SHA1(e5a04c728a2893073ff8b5f6efd7cffd433a2985), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 15)" )
-GAME_CUSTOM( 199?, m4toot__o, m4toot, "toc04c.p1", 0x0000, 0x020000, CRC(859ffa33) SHA1(05b7bd3b87a0ebcc78de751766cfcdc4276035ac), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 16)" )
-GAME_CUSTOM( 199?, m4toot__p, m4toot, "toc04d.p1", 0x0000, 0x020000, CRC(9146b56a) SHA1(04bcd265d83e3554aef2de05aab9c3869bb966ea), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 17)" )
-GAME_CUSTOM( 199?, m4toot__q, m4toot, "toc04dk.p1", 0x0000, 0x020000, CRC(9eda58bd) SHA1(5e38f87a162d1cb37e74850af6a00ae81619ecbe), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 18)" )
-GAME_CUSTOM( 199?, m4toot__r, m4toot, "toc04dr.p1", 0x0000, 0x020000, CRC(2dd5e38c) SHA1(a1b0e8d48e164ab91b277a7efedf5b9fc73fc266), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 19)" )
-GAME_CUSTOM( 199?, m4toot__s, m4toot, "toc04dy.p1", 0x0000, 0x020000, CRC(19397843) SHA1(e7e3299d8e46c79d3cd0ea7fd639a1d649a806df), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 20)" )
-GAME_CUSTOM( 199?, m4toot__t, m4toot, "toc04k.p1", 0x0000, 0x020000, CRC(f812ef77) SHA1(d465b771efed27a9f616052d3fcabdbeb7c2d151), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 21)" )
-GAME_CUSTOM( 199?, m4toot__u, m4toot, "toc04r.p1", 0x0000, 0x020000, CRC(4b1d5446) SHA1(f4bac0c8257add41295679b3541d2064d8c772c2), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 22)" )
-GAME_CUSTOM( 199?, m4toot__w, m4toot, "toc04y.p1", 0x0000, 0x020000, CRC(7ff1cf89) SHA1(d4ab56b2b5b05643cd077b8d596b6cddf8a25134), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 24)" )
+GAME_CUSTOM( 199?, m4toot__l, m4toot, "toc04ad.p1", 0x0000, 0x020000, CRC(59075e2e) SHA1(a3ad5c642fb9cebcce2fb6c1e65514f2414948e0), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 AD)" )
+GAME_CUSTOM( 199?, m4toot__m, m4toot, "toc04b.p1", 0x0000, 0x020000, CRC(b2d54721) SHA1(4c72d434c0f4f37b9a3f08a760c7fe3851717059), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 B)" )
+GAME_CUSTOM( 199?, m4toot__n, m4toot, "toc04bd.p1", 0x0000, 0x020000, CRC(d41df0eb) SHA1(e5a04c728a2893073ff8b5f6efd7cffd433a2985), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 BD)" )
+GAME_CUSTOM( 199?, m4toot__o, m4toot, "toc04c.p1", 0x0000, 0x020000, CRC(859ffa33) SHA1(05b7bd3b87a0ebcc78de751766cfcdc4276035ac), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 C)" )
+GAME_CUSTOM( 199?, m4toot__p, m4toot, "toc04d.p1", 0x0000, 0x020000, CRC(9146b56a) SHA1(04bcd265d83e3554aef2de05aab9c3869bb966ea), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 D)" )
+GAME_CUSTOM( 199?, m4toot__q, m4toot, "toc04dk.p1", 0x0000, 0x020000, CRC(9eda58bd) SHA1(5e38f87a162d1cb37e74850af6a00ae81619ecbe), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 KD)" )
+GAME_CUSTOM( 199?, m4toot__r, m4toot, "toc04dr.p1", 0x0000, 0x020000, CRC(2dd5e38c) SHA1(a1b0e8d48e164ab91b277a7efedf5b9fc73fc266), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 RD)" )
+GAME_CUSTOM( 199?, m4toot__s, m4toot, "toc04dy.p1", 0x0000, 0x020000, CRC(19397843) SHA1(e7e3299d8e46c79d3cd0ea7fd639a1d649a806df), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 YD)" )
+GAME_CUSTOM( 199?, m4toot__t, m4toot, "toc04k.p1", 0x0000, 0x020000, CRC(f812ef77) SHA1(d465b771efed27a9f616052d3fcabdbeb7c2d151), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 K)" )
+GAME_CUSTOM( 199?, m4toot__u, m4toot, "toc04r.p1", 0x0000, 0x020000, CRC(4b1d5446) SHA1(f4bac0c8257add41295679b3541d2064d8c772c2), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 R)" )
+GAME_CUSTOM( 199?, m4toot__w, m4toot, "toc04y.p1", 0x0000, 0x020000, CRC(7ff1cf89) SHA1(d4ab56b2b5b05643cd077b8d596b6cddf8a25134), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 Y)" )
// "(C)1993 BARCREST" and "TOT 0.5"
GAME_CUSTOM( 199?, m4toot__7, m4toot, "tot05s.p1", 0x0000, 0x020000, CRC(7dd1cfa8) SHA1(3bd0eeb621cc81ac462a6981e081837985f6635b), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5)" )
-GAME_CUSTOM( 199?, m4toot__x, m4toot, "tot05ad.p1", 0x0000, 0x020000, CRC(fce00fcc) SHA1(7d10c0b83d782a9e603522ed039089866d931474), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 25)" )
-GAME_CUSTOM( 199?, m4toot__y, m4toot, "tot05b.p1", 0x0000, 0x020000, CRC(594d551c) SHA1(3fcec5f41cfbea497aa53af4570664265774d1aa), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 26)" )
-GAME_CUSTOM( 199?, m4toot__z, m4toot, "tot05bd.p1", 0x0000, 0x020000, CRC(71faa109) SHA1(8bec4a03e2dc43656c910652cf10d1afdf0bab33), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 27)" )
-GAME_CUSTOM( 199?, m4toot__0, m4toot, "tot05c.p1", 0x0000, 0x020000, CRC(6e07e80e) SHA1(087a51da5578c326d7d9716c61b454be5e091761), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 28)" )
-GAME_CUSTOM( 199?, m4toot__1, m4toot, "tot05d.p1", 0x0000, 0x020000, CRC(24565e6a) SHA1(0f2c19e54e5a78ae10e786d49ebcd7c16e41850c), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 29)" )
-GAME_CUSTOM( 199?, m4toot__2, m4toot, "tot05dk.p1", 0x0000, 0x020000, CRC(3b3d095f) SHA1(326574adaa285a479abb5ae7515ef7d6bdd64126), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 30)" )
-GAME_CUSTOM( 199?, m4toot__3, m4toot, "tot05dr.p1", 0x0000, 0x020000, CRC(8832b26e) SHA1(d5414560245bbb2c070f7a035e5e3416617c2cf3), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 31)" )
-GAME_CUSTOM( 199?, m4toot__4, m4toot, "tot05dy.p1", 0x0000, 0x020000, CRC(bcde29a1) SHA1(cf8af40faf81a2a3141d3addd6b28c917beeda49), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 32)" )
-GAME_CUSTOM( 199?, m4toot__5, m4toot, "tot05k.p1", 0x0000, 0x020000, CRC(138afd4a) SHA1(bc53d71d926da7aca74c79f45c47610e62e347b6), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 33)" )
-GAME_CUSTOM( 199?, m4toot__6, m4toot, "tot05r.p1", 0x0000, 0x020000, CRC(a085467b) SHA1(de2deda7635c9565db0f69aa6f375216ed36b7bb), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 34)" )
-GAME_CUSTOM( 199?, m4toot__8, m4toot, "tot05y.p1", 0x0000, 0x020000, CRC(9469ddb4) SHA1(553812e3ece921d31c585b6a412c00ea5095b1b0), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 36)" )
+GAME_CUSTOM( 199?, m4toot__x, m4toot, "tot05ad.p1", 0x0000, 0x020000, CRC(fce00fcc) SHA1(7d10c0b83d782a9e603522ed039089866d931474), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 AD)" )
+GAME_CUSTOM( 199?, m4toot__y, m4toot, "tot05b.p1", 0x0000, 0x020000, CRC(594d551c) SHA1(3fcec5f41cfbea497aa53af4570664265774d1aa), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 B)" )
+GAME_CUSTOM( 199?, m4toot__z, m4toot, "tot05bd.p1", 0x0000, 0x020000, CRC(71faa109) SHA1(8bec4a03e2dc43656c910652cf10d1afdf0bab33), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 BD)" )
+GAME_CUSTOM( 199?, m4toot__0, m4toot, "tot05c.p1", 0x0000, 0x020000, CRC(6e07e80e) SHA1(087a51da5578c326d7d9716c61b454be5e091761), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 C)" )
+GAME_CUSTOM( 199?, m4toot__1, m4toot, "tot05d.p1", 0x0000, 0x020000, CRC(24565e6a) SHA1(0f2c19e54e5a78ae10e786d49ebcd7c16e41850c), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 D)" )
+GAME_CUSTOM( 199?, m4toot__2, m4toot, "tot05dk.p1", 0x0000, 0x020000, CRC(3b3d095f) SHA1(326574adaa285a479abb5ae7515ef7d6bdd64126), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 KD)" )
+GAME_CUSTOM( 199?, m4toot__3, m4toot, "tot05dr.p1", 0x0000, 0x020000, CRC(8832b26e) SHA1(d5414560245bbb2c070f7a035e5e3416617c2cf3), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 RD)" )
+GAME_CUSTOM( 199?, m4toot__4, m4toot, "tot05dy.p1", 0x0000, 0x020000, CRC(bcde29a1) SHA1(cf8af40faf81a2a3141d3addd6b28c917beeda49), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 YD)" )
+GAME_CUSTOM( 199?, m4toot__5, m4toot, "tot05k.p1", 0x0000, 0x020000, CRC(138afd4a) SHA1(bc53d71d926da7aca74c79f45c47610e62e347b6), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 K)" )
+GAME_CUSTOM( 199?, m4toot__6, m4toot, "tot05r.p1", 0x0000, 0x020000, CRC(a085467b) SHA1(de2deda7635c9565db0f69aa6f375216ed36b7bb), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 R)" )
+GAME_CUSTOM( 199?, m4toot__8, m4toot, "tot05y.p1", 0x0000, 0x020000, CRC(9469ddb4) SHA1(553812e3ece921d31c585b6a412c00ea5095b1b0), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 Y)" )
// "(C)1993 BARCREST" and "TOT 0.6"
GAME_CUSTOM( 199?, m4toot__aj, m4toot, "tot06s.p1", 0x0000, 0x020000, CRC(c6140fea) SHA1(c2257dd84bf97b71580e8b873fc745dfa456ddd9), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6)" )
-GAME_CUSTOM( 199?, m4toot__9, m4toot, "tot06ad.p1", 0x0000, 0x020000, CRC(ebe50569) SHA1(1906f1a8d47cc9ee3fa703ad57b180f8a4cdcf89), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 37)" )
-GAME_CUSTOM( 199?, m4toot__aa, m4toot, "tot06b.p1", 0x0000, 0x020000, CRC(4d5a8ebe) SHA1(d30da9ce729fed7ad42b30d522b2b6d65a462b84), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 38)" )
-GAME_CUSTOM( 199?, m4toot__ab, m4toot, "tot06bd.p1", 0x0000, 0x020000, CRC(66ffabac) SHA1(25822e42a58173b8f51dcbbd98d041b261e675e4), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 39)" )
-GAME_CUSTOM( 199?, m4toot__ac, m4toot, "tot06c.p1", 0x0000, 0x020000, CRC(7a1033ac) SHA1(9d3c2f521574f405e1da81b605581bc4b6f011a4), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 40)" )
-GAME_CUSTOM( 199?, m4toot__ad, m4toot, "tot06d.p1", 0x0000, 0x020000, CRC(304185c8) SHA1(f7ef4fce3ce9a455f39766ae97ebfbf93418e019), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 41)" )
-GAME_CUSTOM( 199?, m4toot__ae, m4toot, "tot06dk.p1", 0x0000, 0x020000, CRC(2c3803fa) SHA1(68c83ccdd1f776376608918d9a1257fe64ce3a9b), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 42)" )
-GAME_CUSTOM( 199?, m4toot__af, m4toot, "tot06dr.p1", 0x0000, 0x020000, CRC(9f37b8cb) SHA1(3eb2f843dc4f87b7bfe16da1d133750ad7075a71), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 43)" )
-GAME_CUSTOM( 199?, m4toot__ag, m4toot, "tot06dy.p1", 0x0000, 0x020000, CRC(abdb2304) SHA1(1c29f4176306f472323388f8c34b102930fb9f5f), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 44)" )
-GAME_CUSTOM( 199?, m4toot__ah, m4toot, "tot06k.p1", 0x0000, 0x020000, CRC(079d26e8) SHA1(60e3d02d62f6fde6bdf4b9e77702549d493ccf09), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 45)" )
-GAME_CUSTOM( 199?, m4toot__ai, m4toot, "tot06r.p1", 0x0000, 0x020000, CRC(b4929dd9) SHA1(fa3d99b8f6344c9511ecc864d4fff4629b105b5f), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 46)" )
-GAME_CUSTOM( 199?, m4toot__ak, m4toot, "tot06y.p1", 0x0000, 0x020000, CRC(807e0616) SHA1(2a3f89239a7fa43dfde90dd7ad929747e888074b), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 48)" )
+GAME_CUSTOM( 199?, m4toot__9, m4toot, "tot06ad.p1", 0x0000, 0x020000, CRC(ebe50569) SHA1(1906f1a8d47cc9ee3fa703ad57b180f8a4cdcf89), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 AD)" )
+GAME_CUSTOM( 199?, m4toot__aa, m4toot, "tot06b.p1", 0x0000, 0x020000, CRC(4d5a8ebe) SHA1(d30da9ce729fed7ad42b30d522b2b6d65a462b84), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 B)" )
+GAME_CUSTOM( 199?, m4toot__ab, m4toot, "tot06bd.p1", 0x0000, 0x020000, CRC(66ffabac) SHA1(25822e42a58173b8f51dcbbd98d041b261e675e4), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 BD)" )
+GAME_CUSTOM( 199?, m4toot__ac, m4toot, "tot06c.p1", 0x0000, 0x020000, CRC(7a1033ac) SHA1(9d3c2f521574f405e1da81b605581bc4b6f011a4), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 C)" )
+GAME_CUSTOM( 199?, m4toot__ad, m4toot, "tot06d.p1", 0x0000, 0x020000, CRC(304185c8) SHA1(f7ef4fce3ce9a455f39766ae97ebfbf93418e019), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 D)" )
+GAME_CUSTOM( 199?, m4toot__ae, m4toot, "tot06dk.p1", 0x0000, 0x020000, CRC(2c3803fa) SHA1(68c83ccdd1f776376608918d9a1257fe64ce3a9b), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 KD)" )
+GAME_CUSTOM( 199?, m4toot__af, m4toot, "tot06dr.p1", 0x0000, 0x020000, CRC(9f37b8cb) SHA1(3eb2f843dc4f87b7bfe16da1d133750ad7075a71), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 RD)" )
+GAME_CUSTOM( 199?, m4toot__ag, m4toot, "tot06dy.p1", 0x0000, 0x020000, CRC(abdb2304) SHA1(1c29f4176306f472323388f8c34b102930fb9f5f), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 YD)" )
+GAME_CUSTOM( 199?, m4toot__ah, m4toot, "tot06k.p1", 0x0000, 0x020000, CRC(079d26e8) SHA1(60e3d02d62f6fde6bdf4b9e77702549d493ccf09), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 K)" )
+GAME_CUSTOM( 199?, m4toot__ai, m4toot, "tot06r.p1", 0x0000, 0x020000, CRC(b4929dd9) SHA1(fa3d99b8f6344c9511ecc864d4fff4629b105b5f), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 R)" )
+GAME_CUSTOM( 199?, m4toot__ak, m4toot, "tot06y.p1", 0x0000, 0x020000, CRC(807e0616) SHA1(2a3f89239a7fa43dfde90dd7ad929747e888074b), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 Y)" )
// "(C)1993 BARCREST" and "TOC 0.1"
GAME_CUSTOM( 199?, m4toot__al, m4toot, "tten2010", 0x0000, 0x020000, CRC(28373e9a) SHA1(496df7b511b950b5affe9d65c80037f3ecddc5f8), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.1)" )
// no copyright string and "TOC 0.3"
-GAME_CUSTOM( 199?, m4toot__za, m4toot, "tot15g", 0x0000, 0x020000, CRC(1f9508ad) SHA1(33089ea05f6adecf8f4004aa1e4d626969b6ac3a), "hack?","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3, hack?)" )
+GAME_CUSTOM( 199?, m4toot__za, m4toot, "tot15g", 0x0000, 0x020000, CRC(1f9508ad) SHA1(33089ea05f6adecf8f4004aa1e4d626969b6ac3a), "hack?","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 Y, hack?)" )
// no copyright string and "TOT 0.4"
-GAME_CUSTOM( 199?, m4toot__zb, m4toot, "tot15t", 0x0000, 0x020000, CRC(1ce7f467) SHA1(cf47a126500680107a2f31743c3fff8290b595b8), "hack?","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.4, hack?)" )
+GAME_CUSTOM( 199?, m4toot__zb, m4toot, "tot15t", 0x0000, 0x020000, CRC(1ce7f467) SHA1(cf47a126500680107a2f31743c3fff8290b595b8), "hack?","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.4 Y, hack?)" )
#define M4EAW_EXTRA_ROMS \
ROM_REGION( 0x48, "fakechr", 0 ) \
@@ -980,110 +980,110 @@ GAME_CUSTOM( 199?, m4toot__zb, m4toot, "tot15t", 0x0000, 0x020000, CRC(1
// "(C)1991 BARCREST" and "ER4 0.2"
GAME_CUSTOM( 199?, m4eaw, 0, "er4s.p1", 0x0000, 0x010000, CRC(163fc987) SHA1(8e1768ed2fbddbd5e00652ff40614de3978c9567), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2)" )
-GAME_CUSTOM( 199?, m4eaw__av, m4eaw, "er4ad.p1", 0x0000, 0x010000, CRC(93fff89d) SHA1(3f90168efa5ecaf7707ef357616638a9d5ab746f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 59)" )
-GAME_CUSTOM( 199?, m4eaw__aw, m4eaw, "er4b.p1", 0x0000, 0x010000, CRC(cb39fda7) SHA1(4a31d2ff53942a658992a5e13c2b617da5fb03ce), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 60)" )
-GAME_CUSTOM( 199?, m4eaw__ax, m4eaw, "er4bd.p1", 0x0000, 0x010000, CRC(a5e395d7) SHA1(3f134a2ce3788ac84a6de096306c651e6b2d6a4a), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 61)" )
-GAME_CUSTOM( 199?, m4eaw__ay, m4eaw, "er4d.p1", 0x0000, 0x010000, CRC(33612923) SHA1(1129ced207aaf46045f20a1ef1a37af8ec537bb0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 62)" )
-GAME_CUSTOM( 199?, m4eaw__az, m4eaw, "er4dk.p1", 0x0000, 0x010000, CRC(df41d570) SHA1(4a2db04ee51bb811ac3aee5b2c3c1f1a2201f7ec), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 63)" )
-GAME_CUSTOM( 199?, m4eaw__a0, m4eaw, "er4dy.p1", 0x0000, 0x010000, CRC(7df882e6) SHA1(1246220a5ac8a4454a7f3a359a5a00319395095d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 64)" )
-GAME_CUSTOM( 199?, m4eaw__a1, m4eaw, "er4k.p1", 0x0000, 0x010000, CRC(9803cc0d) SHA1(1516c3836919a7a2cc32711a9bf2d3bf3d6b82c0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 65)" )
-GAME_CUSTOM( 199?, m4eaw__a2, m4eaw, "er4y.p1", 0x0000, 0x010000, CRC(d8dece2d) SHA1(8482092434e1e94e6648e402c8b518c2f0fcc28e), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 66)" )
+GAME_CUSTOM( 199?, m4eaw__av, m4eaw, "er4ad.p1", 0x0000, 0x010000, CRC(93fff89d) SHA1(3f90168efa5ecaf7707ef357616638a9d5ab746f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 AD)" )
+GAME_CUSTOM( 199?, m4eaw__aw, m4eaw, "er4b.p1", 0x0000, 0x010000, CRC(cb39fda7) SHA1(4a31d2ff53942a658992a5e13c2b617da5fb03ce), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 B)" )
+GAME_CUSTOM( 199?, m4eaw__ax, m4eaw, "er4bd.p1", 0x0000, 0x010000, CRC(a5e395d7) SHA1(3f134a2ce3788ac84a6de096306c651e6b2d6a4a), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 BD)" )
+GAME_CUSTOM( 199?, m4eaw__ay, m4eaw, "er4d.p1", 0x0000, 0x010000, CRC(33612923) SHA1(1129ced207aaf46045f20a1ef1a37af8ec537bb0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 D)" )
+GAME_CUSTOM( 199?, m4eaw__az, m4eaw, "er4dk.p1", 0x0000, 0x010000, CRC(df41d570) SHA1(4a2db04ee51bb811ac3aee5b2c3c1f1a2201f7ec), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 KD)" )
+GAME_CUSTOM( 199?, m4eaw__a0, m4eaw, "er4dy.p1", 0x0000, 0x010000, CRC(7df882e6) SHA1(1246220a5ac8a4454a7f3a359a5a00319395095d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 YD)" )
+GAME_CUSTOM( 199?, m4eaw__a1, m4eaw, "er4k.p1", 0x0000, 0x010000, CRC(9803cc0d) SHA1(1516c3836919a7a2cc32711a9bf2d3bf3d6b82c0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 K)" )
+GAME_CUSTOM( 199?, m4eaw__a2, m4eaw, "er4y.p1", 0x0000, 0x010000, CRC(d8dece2d) SHA1(8482092434e1e94e6648e402c8b518c2f0fcc28e), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 Y)" )
// "(C)1991 BARCREST" and "ER4 0.3" (startup is CET 0.3)
-GAME_CUSTOM( 199?, m4eaw__j, m4eaw, "cet03s.p1", 0x0000, 0x010000, CRC(bec3ea51) SHA1(740a73da105d8329dc9ceaa5e8c25b305124e2dd), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET0.3 / ER4 0.3)" )
-GAME_CUSTOM( 199?, m4eaw__a, m4eaw, "cet03ad.p1", 0x0000, 0x010000, CRC(33afe7a5) SHA1(5d3bdb74c6babd49e88915282ad81c184bd7aa68), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 2)" )
-GAME_CUSTOM( 199?, m4eaw__b, m4eaw, "cet03b.p1", 0x0000, 0x010000, CRC(7674e2a5) SHA1(188e683eac91f64fe563b0f09f2b934e709c47fb), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 3)" )
-GAME_CUSTOM( 199?, m4eaw__c, m4eaw, "cet03bd.p1", 0x0000, 0x010000, CRC(406843a2) SHA1(7d4bf6cd3c5be0f6df687b0ba97b3b88fd377170), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 4)" )
-GAME_CUSTOM( 199?, m4eaw__d, m4eaw, "cet03d.p1", 0x0000, 0x010000, CRC(2c03d5b6) SHA1(e79fd15b6a05168eb08dcd2b5f7e00d015618a22), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 5)" )
-GAME_CUSTOM( 199?, m4eaw__e, m4eaw, "cet03dk.p1", 0x0000, 0x010000, CRC(7a81b524) SHA1(71856b90379af946fbc9263f596a16e1701f3564), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4eaw__f, m4eaw, "cet03dr.p1", 0x0000, 0x010000, CRC(63a5622a) SHA1(1e3cf5487623b850598d21c0bb5ef8a0b9dffd4f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 7)" )
-GAME_CUSTOM( 199?, m4eaw__g, m4eaw, "cet03dy.p1", 0x0000, 0x010000, CRC(fece4ac4) SHA1(badf4f94d565958fc9f42a443f53ec9624925ee1), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 8)" )
-GAME_CUSTOM( 199?, m4eaw__h, m4eaw, "cet03k.p1", 0x0000, 0x010000, CRC(f6531a43) SHA1(75ec5c8fc0012fee144daab7761f3717c17fa22d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 9)" )
-GAME_CUSTOM( 199?, m4eaw__i, m4eaw, "cet03r.p1", 0x0000, 0x010000, CRC(fec4a6c0) SHA1(89fac7e4df77f526d0e357f1874b73be932548ce), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 10)" )
-GAME_CUSTOM( 199?, m4eaw__k, m4eaw, "cet03y.p1", 0x0000, 0x010000, CRC(63af8e2e) SHA1(97b9dd02bf8a72ca0be7c1a9cb753fbd55644497), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 12)" )
+GAME_CUSTOM( 199?, m4eaw__j, m4eaw, "cet03s.p1", 0x0000, 0x010000, CRC(bec3ea51) SHA1(740a73da105d8329dc9ceaa5e8c25b305124e2dd), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 / ER4 0.3)" )
+GAME_CUSTOM( 199?, m4eaw__a, m4eaw, "cet03ad.p1", 0x0000, 0x010000, CRC(33afe7a5) SHA1(5d3bdb74c6babd49e88915282ad81c184bd7aa68), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 AD / ER4 0.3)" )
+GAME_CUSTOM( 199?, m4eaw__b, m4eaw, "cet03b.p1", 0x0000, 0x010000, CRC(7674e2a5) SHA1(188e683eac91f64fe563b0f09f2b934e709c47fb), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 B / ER4 0.3)" )
+GAME_CUSTOM( 199?, m4eaw__c, m4eaw, "cet03bd.p1", 0x0000, 0x010000, CRC(406843a2) SHA1(7d4bf6cd3c5be0f6df687b0ba97b3b88fd377170), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 BD / ER4 0.3)" )
+GAME_CUSTOM( 199?, m4eaw__d, m4eaw, "cet03d.p1", 0x0000, 0x010000, CRC(2c03d5b6) SHA1(e79fd15b6a05168eb08dcd2b5f7e00d015618a22), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 D / ER4 0.3)" )
+GAME_CUSTOM( 199?, m4eaw__e, m4eaw, "cet03dk.p1", 0x0000, 0x010000, CRC(7a81b524) SHA1(71856b90379af946fbc9263f596a16e1701f3564), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 KD / ER4 0.3)" )
+GAME_CUSTOM( 199?, m4eaw__f, m4eaw, "cet03dr.p1", 0x0000, 0x010000, CRC(63a5622a) SHA1(1e3cf5487623b850598d21c0bb5ef8a0b9dffd4f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 RD / ER4 0.3)" )
+GAME_CUSTOM( 199?, m4eaw__g, m4eaw, "cet03dy.p1", 0x0000, 0x010000, CRC(fece4ac4) SHA1(badf4f94d565958fc9f42a443f53ec9624925ee1), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 YD / ER4 0.3)" )
+GAME_CUSTOM( 199?, m4eaw__h, m4eaw, "cet03k.p1", 0x0000, 0x010000, CRC(f6531a43) SHA1(75ec5c8fc0012fee144daab7761f3717c17fa22d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 K / ER4 0.3)" )
+GAME_CUSTOM( 199?, m4eaw__i, m4eaw, "cet03r.p1", 0x0000, 0x010000, CRC(fec4a6c0) SHA1(89fac7e4df77f526d0e357f1874b73be932548ce), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 R / ER4 0.3)" )
+GAME_CUSTOM( 199?, m4eaw__k, m4eaw, "cet03y.p1", 0x0000, 0x010000, CRC(63af8e2e) SHA1(97b9dd02bf8a72ca0be7c1a9cb753fbd55644497), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 Y / ER4 0.3)" )
// "(C)1991 BARCREST" and "ER4 0.2" (startup is CEU 0.2)
-GAME_CUSTOM( 199?, m4eaw__u, m4eaw, "ceu02s.p1", 0x0000, 0x010000, CRC(d52099e6) SHA1(10f1acb948fa7c4b547f801ddb5e15111992ca91), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU0.2 / ER4 0.2)" )
-GAME_CUSTOM( 199?, m4eaw__l, m4eaw, "ceu02ad.p1", 0x0000, 0x010000, CRC(5805182c) SHA1(c15ef2e05061fd89944b039f007d92bc4bdf66d5), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 13)" )
-GAME_CUSTOM( 199?, m4eaw__m, m4eaw, "ceu02b.p1", 0x0000, 0x010000, CRC(cbf62a02) SHA1(20fb16ac4602d4e386e5dc01e1b7e83c459f614d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 14)" )
-GAME_CUSTOM( 199?, m4eaw__n, m4eaw, "ceu02bd.p1", 0x0000, 0x010000, CRC(6e197566) SHA1(16f44ca77bc02c7eb186c3684b4e837da0d73553), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 15)" )
-GAME_CUSTOM( 199?, m4eaw__o, m4eaw, "ceu02d.p1", 0x0000, 0x010000, CRC(470cab31) SHA1(f42045f25022cc5e4b07a687f55f7698435b550e), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 16)" )
-GAME_CUSTOM( 199?, m4eaw__p, m4eaw, "ceu02dk.p1", 0x0000, 0x010000, CRC(bea24ff7) SHA1(1bf8464136732ee8433c73747e854be3c991a2fe), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 17)" )
-GAME_CUSTOM( 199?, m4eaw__q, m4eaw, "ceu02dr.p1", 0x0000, 0x010000, CRC(3e2e4183) SHA1(e52bca2913509f26af9ca4a93ab2a2bbf74d1ac9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 18)" )
-GAME_CUSTOM( 199?, m4eaw__r, m4eaw, "ceu02dy.p1", 0x0000, 0x010000, CRC(a345696d) SHA1(a189eb6a6a6a83fe0d490f4a7c8e9c4c52aa91f7), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 19)" )
-GAME_CUSTOM( 199?, m4eaw__s, m4eaw, "ceu02k.p1", 0x0000, 0x010000, CRC(0e0a1ba9) SHA1(e1ee2595a3fd4fe874f50dc027f6c931636aadcc), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 20)" )
-GAME_CUSTOM( 199?, m4eaw__t, m4eaw, "ceu02r.p1", 0x0000, 0x010000, CRC(1a882a6a) SHA1(c966be957e7a78c33a28afd79ba60c69a6de42b8), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 21)" )
-GAME_CUSTOM( 199?, m4eaw__v, m4eaw, "ceu02y.p1", 0x0000, 0x010000, CRC(87e30284) SHA1(4c598a33b73cfe6338c0f51408f2a6c1abfa978b), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 23)" )
+GAME_CUSTOM( 199?, m4eaw__u, m4eaw, "ceu02s.p1", 0x0000, 0x010000, CRC(d52099e6) SHA1(10f1acb948fa7c4b547f801ddb5e15111992ca91), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 / ER4 0.2)" )
+GAME_CUSTOM( 199?, m4eaw__l, m4eaw, "ceu02ad.p1", 0x0000, 0x010000, CRC(5805182c) SHA1(c15ef2e05061fd89944b039f007d92bc4bdf66d5), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 AD / ER4 0.2)" )
+GAME_CUSTOM( 199?, m4eaw__m, m4eaw, "ceu02b.p1", 0x0000, 0x010000, CRC(cbf62a02) SHA1(20fb16ac4602d4e386e5dc01e1b7e83c459f614d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 B / ER4 0.2)" )
+GAME_CUSTOM( 199?, m4eaw__n, m4eaw, "ceu02bd.p1", 0x0000, 0x010000, CRC(6e197566) SHA1(16f44ca77bc02c7eb186c3684b4e837da0d73553), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 BD / ER4 0.2)" )
+GAME_CUSTOM( 199?, m4eaw__o, m4eaw, "ceu02d.p1", 0x0000, 0x010000, CRC(470cab31) SHA1(f42045f25022cc5e4b07a687f55f7698435b550e), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 D / ER4 0.2)" )
+GAME_CUSTOM( 199?, m4eaw__p, m4eaw, "ceu02dk.p1", 0x0000, 0x010000, CRC(bea24ff7) SHA1(1bf8464136732ee8433c73747e854be3c991a2fe), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 KD / ER4 0.2)" )
+GAME_CUSTOM( 199?, m4eaw__q, m4eaw, "ceu02dr.p1", 0x0000, 0x010000, CRC(3e2e4183) SHA1(e52bca2913509f26af9ca4a93ab2a2bbf74d1ac9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 RD / ER4 0.2)" )
+GAME_CUSTOM( 199?, m4eaw__r, m4eaw, "ceu02dy.p1", 0x0000, 0x010000, CRC(a345696d) SHA1(a189eb6a6a6a83fe0d490f4a7c8e9c4c52aa91f7), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 YD / ER4 0.2)" )
+GAME_CUSTOM( 199?, m4eaw__s, m4eaw, "ceu02k.p1", 0x0000, 0x010000, CRC(0e0a1ba9) SHA1(e1ee2595a3fd4fe874f50dc027f6c931636aadcc), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 K / ER4 0.2)" )
+GAME_CUSTOM( 199?, m4eaw__t, m4eaw, "ceu02r.p1", 0x0000, 0x010000, CRC(1a882a6a) SHA1(c966be957e7a78c33a28afd79ba60c69a6de42b8), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 R/ ER4 0.2)" )
+GAME_CUSTOM( 199?, m4eaw__v, m4eaw, "ceu02y.p1", 0x0000, 0x010000, CRC(87e30284) SHA1(4c598a33b73cfe6338c0f51408f2a6c1abfa978b), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 Y / ER4 0.2)" )
// "(C)1991 BARCREST" and "ER4 0.1" (startup is ENN 0.1)
GAME_CUSTOM( 199?, m4eaw__6, m4eaw, "enn01s.p1", 0x0000, 0x010000, CRC(d0ba447d) SHA1(744d5448c5318287e58994b684e116ac1a236f05), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 / ER4 0.1)" )
-GAME_CUSTOM( 199?, m4eaw__w, m4eaw, "enn01ad.p1", 0x0000, 0x010000, CRC(913ba1d6) SHA1(1167ccce2f0b528ec8eba140b1f9c8358fa19f54), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 24)" )
-GAME_CUSTOM( 199?, m4eaw__x, m4eaw, "enn01b.p1", 0x0000, 0x010000, CRC(76cf750c) SHA1(7f3ede643c5b92d9e313c4450a0d4ef3bd9eefd3), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 25)" )
-GAME_CUSTOM( 199?, m4eaw__y, m4eaw, "enn01bd.p1", 0x0000, 0x010000, CRC(c6c29211) SHA1(a49759c4c00633405a338eeb89fcb00f7503990c), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 26)" )
-GAME_CUSTOM( 199?, m4eaw__z, m4eaw, "enn01c.p1", 0x0000, 0x010000, CRC(1ea8f766) SHA1(3f08da014727b50e0375b8470a37c75042b089c6), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 27)" )
-GAME_CUSTOM( 199?, m4eaw__0, m4eaw, "enn01d.p1", 0x0000, 0x010000, CRC(3691905e) SHA1(131b3384c2399b214fb70670c9945be4afdb470e), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 28)" )
-GAME_CUSTOM( 199?, m4eaw__1, m4eaw, "enn01dk.p1", 0x0000, 0x010000, CRC(1abb5196) SHA1(952451f637d890a51a2567b5b02826f7647e5deb), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 29)" )
-GAME_CUSTOM( 199?, m4eaw__2, m4eaw, "enn01dr.p1", 0x0000, 0x010000, CRC(e50fb399) SHA1(5d4d5a933efe7e122e4d0cecab9b7e6f01398a8f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 30)" )
-GAME_CUSTOM( 199?, m4eaw__3, m4eaw, "enn01dy.p1", 0x0000, 0x010000, CRC(be3e5901) SHA1(ea3f366724135682da7cddad3c82e5f4c434f4a9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 31)" )
-GAME_CUSTOM( 199?, m4eaw__4, m4eaw, "enn01k.p1", 0x0000, 0x010000, CRC(273d7b10) SHA1(5577355c918407e548266a16b225e8a4f58c921c), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 32)" )
-GAME_CUSTOM( 199?, m4eaw__5, m4eaw, "enn01r.p1", 0x0000, 0x010000, CRC(aee3f31e) SHA1(72676bc6b3bc287bf3bd3e7719848b40aa1b3627), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 33)" )
-GAME_CUSTOM( 199?, m4eaw__7, m4eaw, "enn01y.p1", 0x0000, 0x010000, CRC(91a73867) SHA1(5197fcd5bf3dc036095b8291d7b23776995d84d1), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 35)" )
+GAME_CUSTOM( 199?, m4eaw__w, m4eaw, "enn01ad.p1", 0x0000, 0x010000, CRC(913ba1d6) SHA1(1167ccce2f0b528ec8eba140b1f9c8358fa19f54), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 AD / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__x, m4eaw, "enn01b.p1", 0x0000, 0x010000, CRC(76cf750c) SHA1(7f3ede643c5b92d9e313c4450a0d4ef3bd9eefd3), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 B / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__y, m4eaw, "enn01bd.p1", 0x0000, 0x010000, CRC(c6c29211) SHA1(a49759c4c00633405a338eeb89fcb00f7503990c), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 BD / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__z, m4eaw, "enn01c.p1", 0x0000, 0x010000, CRC(1ea8f766) SHA1(3f08da014727b50e0375b8470a37c75042b089c6), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 C / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__0, m4eaw, "enn01d.p1", 0x0000, 0x010000, CRC(3691905e) SHA1(131b3384c2399b214fb70670c9945be4afdb470e), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 D / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__1, m4eaw, "enn01dk.p1", 0x0000, 0x010000, CRC(1abb5196) SHA1(952451f637d890a51a2567b5b02826f7647e5deb), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 KD / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__2, m4eaw, "enn01dr.p1", 0x0000, 0x010000, CRC(e50fb399) SHA1(5d4d5a933efe7e122e4d0cecab9b7e6f01398a8f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 RD / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__3, m4eaw, "enn01dy.p1", 0x0000, 0x010000, CRC(be3e5901) SHA1(ea3f366724135682da7cddad3c82e5f4c434f4a9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 YD / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__4, m4eaw, "enn01k.p1", 0x0000, 0x010000, CRC(273d7b10) SHA1(5577355c918407e548266a16b225e8a4f58c921c), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 K / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__5, m4eaw, "enn01r.p1", 0x0000, 0x010000, CRC(aee3f31e) SHA1(72676bc6b3bc287bf3bd3e7719848b40aa1b3627), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 R / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__7, m4eaw, "enn01y.p1", 0x0000, 0x010000, CRC(91a73867) SHA1(5197fcd5bf3dc036095b8291d7b23776995d84d1), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 Y / ER4 0.1)" )
// "(C)1991 BARCREST" and "ER4 0.1" (startup is EON 0.1)
GAME_CUSTOM( 199?, m4eaw__ai, m4eaw, "eon01s.p1", 0x0000, 0x010000, CRC(e2e9ce10) SHA1(41a08b17285d6591b4a5cb6b1b6cc40ee7d35f01), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 / ER4 0.1)" )
-GAME_CUSTOM( 199?, m4eaw__8, m4eaw, "eon01ad.p1", 0x0000, 0x010000, CRC(998b0e8d) SHA1(f2d0c43073d76d662c3a997b1fd081016e4c7a7d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 36)" )
-GAME_CUSTOM( 199?, m4eaw__9, m4eaw, "eon01b.p1", 0x0000, 0x010000, CRC(66f281db) SHA1(b9bd37c53ab7c8838ec87062c8b9da39779b9fa9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 37)" )
-GAME_CUSTOM( 199?, m4eaw__aa, m4eaw, "eon01bd.p1", 0x0000, 0x010000, CRC(66a378ca) SHA1(6639f36df67af8bdd381ad3e16e0adc78a4552f4), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 38)" )
-GAME_CUSTOM( 199?, m4eaw__ab, m4eaw, "eon01c.p1", 0x0000, 0x010000, CRC(d02e2c30) SHA1(34f1be5f49d50f468bffc425fa2e9d0f8afcf70b), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 39)" )
-GAME_CUSTOM( 199?, m4eaw__ac, m4eaw, "eon01d.p1", 0x0000, 0x010000, CRC(a2752f68) SHA1(3a47ced5259c6f690b03c3a884f1d25bd68e0d3f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 40)" )
-GAME_CUSTOM( 199?, m4eaw__ad, m4eaw, "eon01dk.p1", 0x0000, 0x010000, CRC(efd60656) SHA1(9383a7b183266f75edd3ae519e8dfff858f015c4), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 41)" )
-GAME_CUSTOM( 199?, m4eaw__ae, m4eaw, "eon01dr.p1", 0x0000, 0x010000, CRC(1062e459) SHA1(de334cdecde0dd414e016e11a54720dee903393c), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 42)" )
-GAME_CUSTOM( 199?, m4eaw__af, m4eaw, "eon01dy.p1", 0x0000, 0x010000, CRC(d5a39761) SHA1(9b69f9e45d87f53196e5d4fd595300beb573ff49), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 43)" )
-GAME_CUSTOM( 199?, m4eaw__ag, m4eaw, "eon01k.p1", 0x0000, 0x010000, CRC(1d34dea7) SHA1(546db8247d0c78501fe4ec818d614e8f451b0076), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 44)" )
-GAME_CUSTOM( 199?, m4eaw__ah, m4eaw, "eon01r.p1", 0x0000, 0x010000, CRC(7c70a508) SHA1(2c5835f36ef4c215ff9f6f6cc350f0916b397b7b), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 45)" )
-GAME_CUSTOM( 199?, m4eaw__aj, m4eaw, "eon01y.p1", 0x0000, 0x010000, CRC(ddc4f7d1) SHA1(bbc21ba153541df1507e01d4a25a1a669c8eab62), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 47)" )
+GAME_CUSTOM( 199?, m4eaw__8, m4eaw, "eon01ad.p1", 0x0000, 0x010000, CRC(998b0e8d) SHA1(f2d0c43073d76d662c3a997b1fd081016e4c7a7d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 AD / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__9, m4eaw, "eon01b.p1", 0x0000, 0x010000, CRC(66f281db) SHA1(b9bd37c53ab7c8838ec87062c8b9da39779b9fa9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 B / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__aa, m4eaw, "eon01bd.p1", 0x0000, 0x010000, CRC(66a378ca) SHA1(6639f36df67af8bdd381ad3e16e0adc78a4552f4), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 BD / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__ab, m4eaw, "eon01c.p1", 0x0000, 0x010000, CRC(d02e2c30) SHA1(34f1be5f49d50f468bffc425fa2e9d0f8afcf70b), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 C / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__ac, m4eaw, "eon01d.p1", 0x0000, 0x010000, CRC(a2752f68) SHA1(3a47ced5259c6f690b03c3a884f1d25bd68e0d3f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 D / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__ad, m4eaw, "eon01dk.p1", 0x0000, 0x010000, CRC(efd60656) SHA1(9383a7b183266f75edd3ae519e8dfff858f015c4), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 KD / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__ae, m4eaw, "eon01dr.p1", 0x0000, 0x010000, CRC(1062e459) SHA1(de334cdecde0dd414e016e11a54720dee903393c), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 RD / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__af, m4eaw, "eon01dy.p1", 0x0000, 0x010000, CRC(d5a39761) SHA1(9b69f9e45d87f53196e5d4fd595300beb573ff49), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 YD / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__ag, m4eaw, "eon01k.p1", 0x0000, 0x010000, CRC(1d34dea7) SHA1(546db8247d0c78501fe4ec818d614e8f451b0076), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 K / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__ah, m4eaw, "eon01r.p1", 0x0000, 0x010000, CRC(7c70a508) SHA1(2c5835f36ef4c215ff9f6f6cc350f0916b397b7b), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 R / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__aj, m4eaw, "eon01y.p1", 0x0000, 0x010000, CRC(ddc4f7d1) SHA1(bbc21ba153541df1507e01d4a25a1a669c8eab62), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 Y / ER4 0.1)" )
// "(C)1991 BARCREST" and "ER2 0.1"
GAME_CUSTOM( 199?, m4eaw__at, m4eaw, "er2s.p1", 0x0000, 0x010000, CRC(bfee8157) SHA1(3ce5a2ec16f06c753a054a9f645efbcd26f411ab), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1)" )
-GAME_CUSTOM( 199?, m4eaw__ak, m4eaw, "er2ad.p1", 0x0000, 0x010000, CRC(4e5fcc8b) SHA1(8176ca01ad49f39e1337a085cf3a1fd33803c517), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 48)" )
-GAME_CUSTOM( 199?, m4eaw__al, m4eaw, "er2b.p1", 0x0000, 0x010000, CRC(999c6510) SHA1(bc70b88183df84ea0e18e1017ab9d74545ce7588), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 49)" )
-GAME_CUSTOM( 199?, m4eaw__am, m4eaw, "er2bd.p1", 0x0000, 0x010000, CRC(3f50573a) SHA1(46527b08d751372df09d61fd67054600b6e933f3), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 50)" )
-GAME_CUSTOM( 199?, m4eaw__an, m4eaw, "er2d.p1", 0x0000, 0x010000, CRC(6c625759) SHA1(65de484632317b7bd1372f20e7cbdedc85a90ea4), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 51)" )
-GAME_CUSTOM( 199?, m4eaw__ao, m4eaw, "er2dk.p1", 0x0000, 0x010000, CRC(e1e1ab0b) SHA1(353863e2ef1e778b7fce035ae725053fb95c300e), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 52)" )
-GAME_CUSTOM( 199?, m4eaw__ap, m4eaw, "er2dr.p1", 0x0000, 0x010000, CRC(0d2e1d3f) SHA1(f75f6cf9e0ce6ccf36df83e18f03fc1485242c88), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 53)" )
-GAME_CUSTOM( 199?, m4eaw__aq, m4eaw, "er2dy.p1", 0x0000, 0x010000, CRC(f20c4b31) SHA1(744ce6065b3bea3a0c128a4848282cbca2bc8056), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 54)" )
-GAME_CUSTOM( 199?, m4eaw__ar, m4eaw, "er2k.p1", 0x0000, 0x010000, CRC(2c3661bb) SHA1(5f5a6b47dacdb2184d3ac9646da616283743fcbf), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 55)" )
-GAME_CUSTOM( 199?, m4eaw__as, m4eaw, "er2r.p1", 0x0000, 0x010000, CRC(cb636e43) SHA1(44df3adc1d5af4c1930596f34f41884e7731be62), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 56)" )
-GAME_CUSTOM( 199?, m4eaw__au, m4eaw, "er2y.p1", 0x0000, 0x010000, CRC(91369b00) SHA1(7427fcf9e350bc9a3883577de5ee4a4ab5ff63b0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 58)" )
+GAME_CUSTOM( 199?, m4eaw__ak, m4eaw, "er2ad.p1", 0x0000, 0x010000, CRC(4e5fcc8b) SHA1(8176ca01ad49f39e1337a085cf3a1fd33803c517), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 AD)" )
+GAME_CUSTOM( 199?, m4eaw__al, m4eaw, "er2b.p1", 0x0000, 0x010000, CRC(999c6510) SHA1(bc70b88183df84ea0e18e1017ab9d74545ce7588), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 B)" )
+GAME_CUSTOM( 199?, m4eaw__am, m4eaw, "er2bd.p1", 0x0000, 0x010000, CRC(3f50573a) SHA1(46527b08d751372df09d61fd67054600b6e933f3), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 BD)" )
+GAME_CUSTOM( 199?, m4eaw__an, m4eaw, "er2d.p1", 0x0000, 0x010000, CRC(6c625759) SHA1(65de484632317b7bd1372f20e7cbdedc85a90ea4), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 D)" )
+GAME_CUSTOM( 199?, m4eaw__ao, m4eaw, "er2dk.p1", 0x0000, 0x010000, CRC(e1e1ab0b) SHA1(353863e2ef1e778b7fce035ae725053fb95c300e), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 KD)" )
+GAME_CUSTOM( 199?, m4eaw__ap, m4eaw, "er2dr.p1", 0x0000, 0x010000, CRC(0d2e1d3f) SHA1(f75f6cf9e0ce6ccf36df83e18f03fc1485242c88), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 RD)" )
+GAME_CUSTOM( 199?, m4eaw__aq, m4eaw, "er2dy.p1", 0x0000, 0x010000, CRC(f20c4b31) SHA1(744ce6065b3bea3a0c128a4848282cbca2bc8056), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 YD)" )
+GAME_CUSTOM( 199?, m4eaw__ar, m4eaw, "er2k.p1", 0x0000, 0x010000, CRC(2c3661bb) SHA1(5f5a6b47dacdb2184d3ac9646da616283743fcbf), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 K)" )
+GAME_CUSTOM( 199?, m4eaw__as, m4eaw, "er2r.p1", 0x0000, 0x010000, CRC(cb636e43) SHA1(44df3adc1d5af4c1930596f34f41884e7731be62), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 R)" )
+GAME_CUSTOM( 199?, m4eaw__au, m4eaw, "er2y.p1", 0x0000, 0x010000, CRC(91369b00) SHA1(7427fcf9e350bc9a3883577de5ee4a4ab5ff63b0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 Y)" )
// "(C)1991 BARCREST" and "ER8 0.1"
GAME_CUSTOM( 199?, m4eaw__a9, m4eaw, "er8s.p1", 0x0000, 0x010000, CRC(5d36bbc6) SHA1(4d0cd8e939f22d919671dc97c3d97bf6191e738f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1)" )
-GAME_CUSTOM( 199?, m4eaw__a3, m4eaw, "er8ad.p1", 0x0000, 0x010000, CRC(ba059e06) SHA1(f6bb9092c9d18bccde111f8e20e79b8b4e6d8593), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 67)" )
-GAME_CUSTOM( 199?, m4eaw__a4, m4eaw, "er8b.p1", 0x0000, 0x010000, CRC(27c7f954) SHA1(93305d1d4a5781de56f1e54801e25b29b6713ef0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 68)" )
-GAME_CUSTOM( 199?, m4eaw__a5, m4eaw, "er8c.p1", 0x0000, 0x010000, CRC(cee94fb3) SHA1(01ec098016b6946c3fbf96b2071076316bbd5795), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 69)" )
-GAME_CUSTOM( 199?, m4eaw__a6, m4eaw, "er8dk.p1", 0x0000, 0x010000, CRC(789c5e1d) SHA1(5f5b686a770f4ab0cfa8e8ae21b3805ef6102516), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 70)" )
-GAME_CUSTOM( 199?, m4eaw__a7, m4eaw, "er8dy.p1", 0x0000, 0x010000, CRC(4adf568b) SHA1(dd21b547211566ad5cb018a0205d887b7f860bc9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 71)" )
-GAME_CUSTOM( 199?, m4eaw__a8, m4eaw, "er8k.p1", 0x0000, 0x010000, CRC(c76140e4) SHA1(6c097fdd018eb594a84ceb7712a45201490ca370), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 72)" )
-GAME_CUSTOM( 199?, m4eaw__ba, m4eaw, "er8y.p1", 0x0000, 0x010000, CRC(8a1aa409) SHA1(a7ae62e1038e52a111de3004e2160838e0d102d0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 74)" )
+GAME_CUSTOM( 199?, m4eaw__a3, m4eaw, "er8ad.p1", 0x0000, 0x010000, CRC(ba059e06) SHA1(f6bb9092c9d18bccde111f8e20e79b8b4e6d8593), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 AD)" )
+GAME_CUSTOM( 199?, m4eaw__a4, m4eaw, "er8b.p1", 0x0000, 0x010000, CRC(27c7f954) SHA1(93305d1d4a5781de56f1e54801e25b29b6713ef0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 B)" )
+GAME_CUSTOM( 199?, m4eaw__a5, m4eaw, "er8c.p1", 0x0000, 0x010000, CRC(cee94fb3) SHA1(01ec098016b6946c3fbf96b2071076316bbd5795), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 C)" )
+GAME_CUSTOM( 199?, m4eaw__a6, m4eaw, "er8dk.p1", 0x0000, 0x010000, CRC(789c5e1d) SHA1(5f5b686a770f4ab0cfa8e8ae21b3805ef6102516), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 KD)" )
+GAME_CUSTOM( 199?, m4eaw__a7, m4eaw, "er8dy.p1", 0x0000, 0x010000, CRC(4adf568b) SHA1(dd21b547211566ad5cb018a0205d887b7f860bc9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 YD)" )
+GAME_CUSTOM( 199?, m4eaw__a8, m4eaw, "er8k.p1", 0x0000, 0x010000, CRC(c76140e4) SHA1(6c097fdd018eb594a84ceb7712a45201490ca370), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 K)" )
+GAME_CUSTOM( 199?, m4eaw__ba, m4eaw, "er8y.p1", 0x0000, 0x010000, CRC(8a1aa409) SHA1(a7ae62e1038e52a111de3004e2160838e0d102d0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 Y)" )
// "(C)1991 BARCREST" and "ERT 0.2"
GAME_CUSTOM( 199?, m4eaw__bk, m4eaw, "erts.p1", 0x0000, 0x010000, CRC(185b47bb) SHA1(377cb42878572a3e94dd6be6fb106ecacb3c5059), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2)" )
-GAME_CUSTOM( 199?, m4eaw__bb, m4eaw, "ertad.p1", 0x0000, 0x010000, CRC(75798f2d) SHA1(68939c187d841aa046a4f7dd8f39e8387969460c), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 75)" )
-GAME_CUSTOM( 199?, m4eaw__bc, m4eaw, "ertb.p1", 0x0000, 0x010000, CRC(c6407839) SHA1(79d73d79b389682586fdf7c9c25d8e2ea5943bb6), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 76)" )
-GAME_CUSTOM( 199?, m4eaw__bd, m4eaw, "ertbd.p1", 0x0000, 0x010000, CRC(4365e267) SHA1(b1853c3ddb707cb114e6bb2d780b142b80f099b6), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 77)" )
-GAME_CUSTOM( 199?, m4eaw__be, m4eaw, "ertd.p1", 0x0000, 0x010000, CRC(2fabc730) SHA1(8a43afd6048006e906892d35bb0cfaa127fc0415), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 78)" )
-GAME_CUSTOM( 199?, m4eaw__bf, m4eaw, "ertdk.p1", 0x0000, 0x010000, CRC(21264f37) SHA1(9819cf120e81525f18096152a555859a4f48f8ad), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 79)" )
-GAME_CUSTOM( 199?, m4eaw__bg, m4eaw, "ertdr.p1", 0x0000, 0x010000, CRC(1b644f23) SHA1(94c5a307126cada90eeb45439aaab82a30228ffa), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 80)" )
-GAME_CUSTOM( 199?, m4eaw__bh, m4eaw, "ertdy.p1", 0x0000, 0x010000, CRC(5a7c77fa) SHA1(37c212db131b682fd8d293a8cf8efad2e80a8a18), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 81)" )
-GAME_CUSTOM( 199?, m4eaw__bi, m4eaw, "ertk.p1", 0x0000, 0x010000, CRC(19959bd3) SHA1(617f7079b39b0ef41ebb0b5f89053d723a28824d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 82)" )
-GAME_CUSTOM( 199?, m4eaw__bj, m4eaw, "ertr.p1", 0x0000, 0x010000, CRC(3264f04a) SHA1(88d1f6857f3a0acd89db1563fd5f24582b578765), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 83)" )
-GAME_CUSTOM( 199?, m4eaw__bl, m4eaw, "erty.p1", 0x0000, 0x010000, CRC(38adc77e) SHA1(7a925e2aa946fdcf38df454ec733da1ce9bdc495), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 85)" )
+GAME_CUSTOM( 199?, m4eaw__bb, m4eaw, "ertad.p1", 0x0000, 0x010000, CRC(75798f2d) SHA1(68939c187d841aa046a4f7dd8f39e8387969460c), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 AD)" )
+GAME_CUSTOM( 199?, m4eaw__bc, m4eaw, "ertb.p1", 0x0000, 0x010000, CRC(c6407839) SHA1(79d73d79b389682586fdf7c9c25d8e2ea5943bb6), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 B)" )
+GAME_CUSTOM( 199?, m4eaw__bd, m4eaw, "ertbd.p1", 0x0000, 0x010000, CRC(4365e267) SHA1(b1853c3ddb707cb114e6bb2d780b142b80f099b6), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 BD)" )
+GAME_CUSTOM( 199?, m4eaw__be, m4eaw, "ertd.p1", 0x0000, 0x010000, CRC(2fabc730) SHA1(8a43afd6048006e906892d35bb0cfaa127fc0415), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 D)" )
+GAME_CUSTOM( 199?, m4eaw__bf, m4eaw, "ertdk.p1", 0x0000, 0x010000, CRC(21264f37) SHA1(9819cf120e81525f18096152a555859a4f48f8ad), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 KD)" )
+GAME_CUSTOM( 199?, m4eaw__bg, m4eaw, "ertdr.p1", 0x0000, 0x010000, CRC(1b644f23) SHA1(94c5a307126cada90eeb45439aaab82a30228ffa), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 RD)" )
+GAME_CUSTOM( 199?, m4eaw__bh, m4eaw, "ertdy.p1", 0x0000, 0x010000, CRC(5a7c77fa) SHA1(37c212db131b682fd8d293a8cf8efad2e80a8a18), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 YD)" )
+GAME_CUSTOM( 199?, m4eaw__bi, m4eaw, "ertk.p1", 0x0000, 0x010000, CRC(19959bd3) SHA1(617f7079b39b0ef41ebb0b5f89053d723a28824d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 K)" )
+GAME_CUSTOM( 199?, m4eaw__bj, m4eaw, "ertr.p1", 0x0000, 0x010000, CRC(3264f04a) SHA1(88d1f6857f3a0acd89db1563fd5f24582b578765), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 R)" )
+GAME_CUSTOM( 199?, m4eaw__bl, m4eaw, "erty.p1", 0x0000, 0x010000, CRC(38adc77e) SHA1(7a925e2aa946fdcf38df454ec733da1ce9bdc495), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 Y)" )
// "(C)1991 BARCREST" and "ER4 0.1" (startup is EUN 0.1)
GAME_CUSTOM( 199?, m4eaw__bw, m4eaw, "eun01s.p1", 0x0000, 0x010000, CRC(d0b49fc6) SHA1(4062d9763010d42666660e383e52818d572b61b9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 / ER4 0.1)" )
-GAME_CUSTOM( 199?, m4eaw__bm, m4eaw, "eun01ad.p1", 0x0000, 0x010000, CRC(0148eb57) SHA1(7ebf73402ffe68cfb045a906ed039407bd173b88), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 86)" )
-GAME_CUSTOM( 199?, m4eaw__bn, m4eaw, "eun01b.p1", 0x0000, 0x010000, CRC(ad152cda) SHA1(ca5c72a54e14f8b44fddfbc5c38c4e149432f593), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 87)" )
-GAME_CUSTOM( 199?, m4eaw__bo, m4eaw, "eun01bd.p1", 0x0000, 0x010000, CRC(6b0abd7c) SHA1(a6f74096bfffa082a441c094b5acadd5929ac36a), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 88)" )
-GAME_CUSTOM( 199?, m4eaw__bp, m4eaw, "eun01c.p1", 0x0000, 0x010000, CRC(a65fcf8b) SHA1(13a5bc1f2918a4f3590a1cdc34b439a874934ee7), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 89)" )
-GAME_CUSTOM( 199?, m4eaw__bq, m4eaw, "eun01d.p1", 0x0000, 0x010000, CRC(400af364) SHA1(ca67e98624d50717763e9965c45f0beecb07d2f9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 90)" )
-GAME_CUSTOM( 199?, m4eaw__br, m4eaw, "eun01dk.p1", 0x0000, 0x010000, CRC(c11914fa) SHA1(884fee07227f46dde056eb8e082bb821eeab99cb), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 91)" )
-GAME_CUSTOM( 199?, m4eaw__bs, m4eaw, "eun01dr.p1", 0x0000, 0x010000, CRC(0eb075d4) SHA1(3977f03f6aac765c556618616919a5e10660b35d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 92)" )
-GAME_CUSTOM( 199?, m4eaw__bt, m4eaw, "eun01dy.p1", 0x0000, 0x010000, CRC(93db5d3a) SHA1(ddd209b22ed396d3329b9522649db6dda64958b7), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 93)" )
-GAME_CUSTOM( 199?, m4eaw__bu, m4eaw, "eun01k.p1", 0x0000, 0x010000, CRC(9fca43fd) SHA1(f7626f122dedb217002888971100d8a34910b48d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 94)" )
-GAME_CUSTOM( 199?, m4eaw__bv, m4eaw, "eun01r.p1", 0x0000, 0x010000, CRC(15b8eb9e) SHA1(e4babaf526e6dd45bb4b7f7441a08cfbec12c661), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 95)" )
-GAME_CUSTOM( 199?, m4eaw__bx, m4eaw, "eun01y.p1", 0x0000, 0x010000, CRC(88d3c370) SHA1(6c3839a9c89ae67f80ab932ec70ebaf1240de9bb), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 97)" )
+GAME_CUSTOM( 199?, m4eaw__bm, m4eaw, "eun01ad.p1", 0x0000, 0x010000, CRC(0148eb57) SHA1(7ebf73402ffe68cfb045a906ed039407bd173b88), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 AD / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__bn, m4eaw, "eun01b.p1", 0x0000, 0x010000, CRC(ad152cda) SHA1(ca5c72a54e14f8b44fddfbc5c38c4e149432f593), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 B / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__bo, m4eaw, "eun01bd.p1", 0x0000, 0x010000, CRC(6b0abd7c) SHA1(a6f74096bfffa082a441c094b5acadd5929ac36a), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 BD / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__bp, m4eaw, "eun01c.p1", 0x0000, 0x010000, CRC(a65fcf8b) SHA1(13a5bc1f2918a4f3590a1cdc34b439a874934ee7), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 C / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__bq, m4eaw, "eun01d.p1", 0x0000, 0x010000, CRC(400af364) SHA1(ca67e98624d50717763e9965c45f0beecb07d2f9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 D / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__br, m4eaw, "eun01dk.p1", 0x0000, 0x010000, CRC(c11914fa) SHA1(884fee07227f46dde056eb8e082bb821eeab99cb), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 KD / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__bs, m4eaw, "eun01dr.p1", 0x0000, 0x010000, CRC(0eb075d4) SHA1(3977f03f6aac765c556618616919a5e10660b35d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 RD / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__bt, m4eaw, "eun01dy.p1", 0x0000, 0x010000, CRC(93db5d3a) SHA1(ddd209b22ed396d3329b9522649db6dda64958b7), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 YD / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__bu, m4eaw, "eun01k.p1", 0x0000, 0x010000, CRC(9fca43fd) SHA1(f7626f122dedb217002888971100d8a34910b48d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 K / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__bv, m4eaw, "eun01r.p1", 0x0000, 0x010000, CRC(15b8eb9e) SHA1(e4babaf526e6dd45bb4b7f7441a08cfbec12c661), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 R / ER4 0.1)" )
+GAME_CUSTOM( 199?, m4eaw__bx, m4eaw, "eun01y.p1", 0x0000, 0x010000, CRC(88d3c370) SHA1(6c3839a9c89ae67f80ab932ec70ebaf1240de9bb), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 Y / ER4 0.1)" )
// bad dump? wrong size
ROM_START( m4eaw__bz ) \
@@ -1111,52 +1111,52 @@ GAME(199?, m4eaw__bz, m4eaw ,mod4oki ,mpu4 , mpu4_state,m4_showstring ,ROT0,"Bar
// (C)1993 BARCREST and "WIN 0.6"
GAME_CUSTOM( 199?, m4wta, 0, "wins.p1", 0x0000, 0x010000, CRC(d79d1e5b) SHA1(722657423a605d6d272d61e4e00b4055ed05f98d), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WIN 0.6)" )
-GAME_CUSTOM( 199?, m4wta__b, m4wta, "windy.p1", 0x0000, 0x010000, CRC(d8b78c2d) SHA1(d8c2a2ac30a9b876acfbe99e3c540ba0e82cde33), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WIN 0.6YD)" )
-GAME_CUSTOM( 199?, m4wta__e, m4wta, "winy.p1", 0x0000, 0x010000, CRC(5ff8ed08) SHA1(9567db64e8ebf25ecb22236598cc88a3106f0e36), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WIN 0.6Y)" )
-GAME_CUSTOM( 199?, m4wta__aa, m4wta, "wtall20a", 0x0000, 0x010000, CRC(b53c951e) SHA1(24f96d16852a4fbaf49fbdf29a26d15877f07b18), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WIN 0.6K)" )
+GAME_CUSTOM( 199?, m4wta__b, m4wta, "windy.p1", 0x0000, 0x010000, CRC(d8b78c2d) SHA1(d8c2a2ac30a9b876acfbe99e3c540ba0e82cde33), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WIN 0.6 YD)" )
+GAME_CUSTOM( 199?, m4wta__e, m4wta, "winy.p1", 0x0000, 0x010000, CRC(5ff8ed08) SHA1(9567db64e8ebf25ecb22236598cc88a3106f0e36), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WIN 0.6 Y)" )
+GAME_CUSTOM( 199?, m4wta__aa, m4wta, "wtall20a", 0x0000, 0x010000, CRC(b53c951e) SHA1(24f96d16852a4fbaf49fbdf29a26d15877f07b18), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WIN 0.6 K)" )
// (C)1993 BARCREST and "WN5 0.1"
-GAME_CUSTOM( 199?, m4wta__f, m4wta, "wn5ad.p1", 0x0000, 0x010000, CRC(0eb0845d) SHA1(57a2ca27672119e71af3b990cedcf52dd89e24cc), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1AD)" )
-GAME_CUSTOM( 199?, m4wta__g, m4wta, "wn5b.p1", 0x0000, 0x010000, CRC(82cefba2) SHA1(07753a5f0d455422f33495a6f050c8e16a92e087), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1B)" )
-GAME_CUSTOM( 199?, m4wta__h, m4wta, "wn5bd.p1", 0x0000, 0x010000, CRC(19d25b26) SHA1(91459c87e95d9800c5f77fd0c7f72f8a1488dc37), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1BD)" )
-GAME_CUSTOM( 199?, m4wta__i, m4wta, "wn5d.p1", 0x0000, 0x010000, CRC(8a3d6bed) SHA1(a20f24cd5216976913c0405f54883d6080986867), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1D)" )
-GAME_CUSTOM( 199?, m4wta__j, m4wta, "wn5dk.p1", 0x0000, 0x010000, CRC(1dfcb2bc) SHA1(b1a73a7758c3126f7b13156835c91a4900cbe6e0), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1KD)" )
-GAME_CUSTOM( 199?, m4wta__k, m4wta, "wn5dy.p1", 0x0000, 0x010000, CRC(d45e1db0) SHA1(2524c4b60a89ea0ca15cf999fbd1f8d9029dfbb6), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1YD)" )
-GAME_CUSTOM( 199?, m4wta__l, m4wta, "wn5k.p1", 0x0000, 0x010000, CRC(71c34cb4) SHA1(e1b96dd30d8ab680128d76886691d06fcd2d48c0), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1K)" )
GAME_CUSTOM( 199?, m4wta__m, m4wta, "wn5s.p1", 0x0000, 0x010000, CRC(f6e925c1) SHA1(963f06462c73300757aad2371df4ebe28afca521), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1)" )
-GAME_CUSTOM( 199?, m4wta__n, m4wta, "wn5y.p1", 0x0000, 0x010000, CRC(7155f8b5) SHA1(f55f88fd7b0144cb7b64640d529b179dd056f5ec), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1Y)" )
+GAME_CUSTOM( 199?, m4wta__f, m4wta, "wn5ad.p1", 0x0000, 0x010000, CRC(0eb0845d) SHA1(57a2ca27672119e71af3b990cedcf52dd89e24cc), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1 AD)" )
+GAME_CUSTOM( 199?, m4wta__g, m4wta, "wn5b.p1", 0x0000, 0x010000, CRC(82cefba2) SHA1(07753a5f0d455422f33495a6f050c8e16a92e087), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1 B)" )
+GAME_CUSTOM( 199?, m4wta__h, m4wta, "wn5bd.p1", 0x0000, 0x010000, CRC(19d25b26) SHA1(91459c87e95d9800c5f77fd0c7f72f8a1488dc37), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1 BD)" )
+GAME_CUSTOM( 199?, m4wta__i, m4wta, "wn5d.p1", 0x0000, 0x010000, CRC(8a3d6bed) SHA1(a20f24cd5216976913c0405f54883d6080986867), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1 D)" )
+GAME_CUSTOM( 199?, m4wta__j, m4wta, "wn5dk.p1", 0x0000, 0x010000, CRC(1dfcb2bc) SHA1(b1a73a7758c3126f7b13156835c91a4900cbe6e0), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1 KD)" )
+GAME_CUSTOM( 199?, m4wta__k, m4wta, "wn5dy.p1", 0x0000, 0x010000, CRC(d45e1db0) SHA1(2524c4b60a89ea0ca15cf999fbd1f8d9029dfbb6), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1 YD)" )
+GAME_CUSTOM( 199?, m4wta__l, m4wta, "wn5k.p1", 0x0000, 0x010000, CRC(71c34cb4) SHA1(e1b96dd30d8ab680128d76886691d06fcd2d48c0), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1 K)" )
+GAME_CUSTOM( 199?, m4wta__n, m4wta, "wn5y.p1", 0x0000, 0x010000, CRC(7155f8b5) SHA1(f55f88fd7b0144cb7b64640d529b179dd056f5ec), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1 Y)" )
// (C)1993 BARCREST and "WN8 0.1"
-GAME_CUSTOM( 199?, m4wta__o, m4wta, "wn8b.p1", 0x0000, 0x010000, CRC(7e84f99c) SHA1(bef41b3e7906bdaadfa5741e9ae40028f4fd360f), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1B)" )
-GAME_CUSTOM( 199?, m4wta__p, m4wta, "wn8c.p1", 0x0000, 0x010000, CRC(471ba65a) SHA1(6ede860bcf323ee75dd7f75a51e5d1166ee72abc), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1C)" )
-GAME_CUSTOM( 199?, m4wta__q, m4wta, "wn8d.p1", 0x0000, 0x010000, CRC(eb2bd01e) SHA1(df74f8eb8fa411bab20ab522fd7c511a1370fe90), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1D)" )
-GAME_CUSTOM( 199?, m4wta__r, m4wta, "wn8dk.p1", 0x0000, 0x010000, CRC(ec20a0bc) SHA1(61b615165a6e77cd85e1fa6aeb955307ec48d1b6), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1KD)" )
-GAME_CUSTOM( 199?, m4wta__s, m4wta, "wn8dy.p1", 0x0000, 0x010000, CRC(d2a1513c) SHA1(e4d2ad88846cbb6b393d3615bf10e1dea01de219), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1YD)" )
-GAME_CUSTOM( 199?, m4wta__t, m4wta, "wn8k.p1", 0x0000, 0x010000, CRC(3e15c690) SHA1(2fc1cca91ac5cc9abeac112e4d60e8fd57b07b94), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1K)" )
GAME_CUSTOM( 199?, m4wta__u, m4wta, "wn8s.p1", 0x0000, 0x010000, CRC(5c5a0f31) SHA1(301e595141dd6eb9250d71e591780e15a7d36423), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1)" )
-GAME_CUSTOM( 199?, m4wta__v, m4wta, "wn8y.p1", 0x0000, 0x010000, CRC(993cee6a) SHA1(26b2d5d3aa3465f90fe74960f183b8580ea2fbb1), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1Y)" )
+GAME_CUSTOM( 199?, m4wta__o, m4wta, "wn8b.p1", 0x0000, 0x010000, CRC(7e84f99c) SHA1(bef41b3e7906bdaadfa5741e9ae40028f4fd360f), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1 B)" )
+GAME_CUSTOM( 199?, m4wta__p, m4wta, "wn8c.p1", 0x0000, 0x010000, CRC(471ba65a) SHA1(6ede860bcf323ee75dd7f75a51e5d1166ee72abc), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1 C)" )
+GAME_CUSTOM( 199?, m4wta__q, m4wta, "wn8d.p1", 0x0000, 0x010000, CRC(eb2bd01e) SHA1(df74f8eb8fa411bab20ab522fd7c511a1370fe90), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1 D)" )
+GAME_CUSTOM( 199?, m4wta__r, m4wta, "wn8dk.p1", 0x0000, 0x010000, CRC(ec20a0bc) SHA1(61b615165a6e77cd85e1fa6aeb955307ec48d1b6), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1 KD)" )
+GAME_CUSTOM( 199?, m4wta__s, m4wta, "wn8dy.p1", 0x0000, 0x010000, CRC(d2a1513c) SHA1(e4d2ad88846cbb6b393d3615bf10e1dea01de219), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1 YD)" )
+GAME_CUSTOM( 199?, m4wta__t, m4wta, "wn8k.p1", 0x0000, 0x010000, CRC(3e15c690) SHA1(2fc1cca91ac5cc9abeac112e4d60e8fd57b07b94), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1 K)" )
+GAME_CUSTOM( 199?, m4wta__v, m4wta, "wn8y.p1", 0x0000, 0x010000, CRC(993cee6a) SHA1(26b2d5d3aa3465f90fe74960f183b8580ea2fbb1), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1 Y)" )
// "(C)1993 BARCREST" and "WNT 0.1" // bad char alarm, hack?
-GAME_CUSTOM( 199?, m4wta__w, m4wta, "wnta2010", 0x0000, 0x010000, CRC(5b08faf8) SHA1(f4657041562044e17febfe77ad1f849545dcdaec), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1, hack?)" )
+GAME_CUSTOM( 199?, m4wta__w, m4wta, "wnta2010", 0x0000, 0x010000, CRC(5b08faf8) SHA1(f4657041562044e17febfe77ad1f849545dcdaec), "hack","Winner Takes All (Barcrest) (MPU4) (WNT 0.1, hack)" )
// "(C)1993 BARCREST" and "WNT 0.1"
-GAME_CUSTOM( 199?, m4wta__x, m4wta, "wntad.p1", 0x0000, 0x010000, CRC(8502766e) SHA1(2a47c8f8ce8711b30962c5e8ef9093bdd3543551), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1AD)" )
-GAME_CUSTOM( 199?, m4wta__y, m4wta, "wntb.p1", 0x0000, 0x010000, CRC(1e3159f0) SHA1(ab9d0e9e6731b40c66c358d98c6481f31d9a0b0c), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1B)" )
-GAME_CUSTOM( 199?, m4wta__z, m4wta, "wntbd.p1", 0x0000, 0x010000, CRC(91cc8978) SHA1(570ad4092bb148106fb2600f1e22b6cb6f57002a), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1BD)" )
-GAME_CUSTOM( 199?, m4wta__0, m4wta, "wntd.p1", 0x0000, 0x010000, CRC(ad68d804) SHA1(f301d0d267dd0020903f06b67ee6494b71258c68), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1D)" )
-GAME_CUSTOM( 199?, m4wta__1, m4wta, "wntdk.p1", 0x0000, 0x010000, CRC(3a6b65b8) SHA1(1da0448e53a45fa249c14b5655cd0dc957ebb646), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1KD)" )
-GAME_CUSTOM( 199?, m4wta__2, m4wta, "wntdy.p1", 0x0000, 0x010000, CRC(2420634f) SHA1(5c6e891c34a6e2b3a6acb3856c1554145bb24d0d), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1YD)" )
-GAME_CUSTOM( 199?, m4wta__3, m4wta, "wntk.p1", 0x0000, 0x010000, CRC(3d8d07c7) SHA1(4659e2459d956bbcf5ef2a605527317ccdafcccb), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1K)" )
GAME_CUSTOM( 199?, m4wta__4, m4wta, "wnts.p1", 0x0000, 0x010000, CRC(3a9b0878) SHA1(85e86cca1a3a079746cd4401767ba1d9fc31a938), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1)" )
-GAME_CUSTOM( 199?, m4wta__5, m4wta, "wnty.p1", 0x0000, 0x010000, CRC(edaa5ae7) SHA1(d24b9f37d75f13f16718374e48e6c003b0b3333f), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1Y)" )
+GAME_CUSTOM( 199?, m4wta__x, m4wta, "wntad.p1", 0x0000, 0x010000, CRC(8502766e) SHA1(2a47c8f8ce8711b30962c5e8ef9093bdd3543551), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1 AD)" )
+GAME_CUSTOM( 199?, m4wta__y, m4wta, "wntb.p1", 0x0000, 0x010000, CRC(1e3159f0) SHA1(ab9d0e9e6731b40c66c358d98c6481f31d9a0b0c), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1 B)" )
+GAME_CUSTOM( 199?, m4wta__z, m4wta, "wntbd.p1", 0x0000, 0x010000, CRC(91cc8978) SHA1(570ad4092bb148106fb2600f1e22b6cb6f57002a), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1 BD)" )
+GAME_CUSTOM( 199?, m4wta__0, m4wta, "wntd.p1", 0x0000, 0x010000, CRC(ad68d804) SHA1(f301d0d267dd0020903f06b67ee6494b71258c68), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1 D)" )
+GAME_CUSTOM( 199?, m4wta__1, m4wta, "wntdk.p1", 0x0000, 0x010000, CRC(3a6b65b8) SHA1(1da0448e53a45fa249c14b5655cd0dc957ebb646), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1 KD)" )
+GAME_CUSTOM( 199?, m4wta__2, m4wta, "wntdy.p1", 0x0000, 0x010000, CRC(2420634f) SHA1(5c6e891c34a6e2b3a6acb3856c1554145bb24d0d), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1 YD)" )
+GAME_CUSTOM( 199?, m4wta__3, m4wta, "wntk.p1", 0x0000, 0x010000, CRC(3d8d07c7) SHA1(4659e2459d956bbcf5ef2a605527317ccdafcccb), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1 K)" )
+GAME_CUSTOM( 199?, m4wta__5, m4wta, "wnty.p1", 0x0000, 0x010000, CRC(edaa5ae7) SHA1(d24b9f37d75f13f16718374e48e6c003b0b3333f), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1 Y)" )
// "(C)1996 B.W.B." and "WNC 1.3" // bad char alarm
-GAME_CUSTOM( 199?, m4wta__7, m4wta, "wta510l", 0x0000, 0x010000, CRC(9ce140ae) SHA1(01d53a5da0161ac4ecc861309f645d6eb47b4af5), "Bwb / hack?","Winner Takes All (Barcrest) (MPU4) (WNC 1.3, set 1)" )
-GAME_CUSTOM( 199?, m4wta__ad, m4wta, "wta5.10", 0x0000, 0x010000, CRC(c1ae8e9a) SHA1(66c0b200202386a10b96b7141517a52921266950), "Bwb / hack?","Winner Takes All (Barcrest) (MPU4) (WNC 1.3, set 2)" )
+GAME_CUSTOM( 199?, m4wta__7, m4wta, "wta510l", 0x0000, 0x010000, CRC(9ce140ae) SHA1(01d53a5da0161ac4ecc861309f645d6eb47b4af5), "hack","Winner Takes All (Barcrest) (MPU4) (WNC 1.3 5, hack, set 1)" )
+GAME_CUSTOM( 199?, m4wta__ad, m4wta, "wta5.10", 0x0000, 0x010000, CRC(c1ae8e9a) SHA1(66c0b200202386a10b96b7141517a52921266950), "hack","Winner Takes All (Barcrest) (MPU4) (WNC 1.3 5, hack, set 2)" )
// "(C)1996 B.W.B." and "WN8 2.2" // bad char alarm
-GAME_CUSTOM( 199?, m4wta__8, m4wta, "wta58tl", 0x0000, 0x010000, CRC(7275e865) SHA1(d5550646a062609cfc052fab81c533ca69171875), "Bwb / hack?","Winner Takes All (Barcrest) (MPU4) (WN8 2.2, set 1)" )
-GAME_CUSTOM( 199?, m4wta__ag, m4wta, "wta5.8t", 0x0000, 0x010000, CRC(548122ab) SHA1(c611084e8a08d5556e458daf9cc721c0e5ba1948), "Bwb / hack?","Winner Takes All (Barcrest) (MPU4) (WN8 2.2, set 2)" )
+GAME_CUSTOM( 199?, m4wta__8, m4wta, "wta58tl", 0x0000, 0x010000, CRC(7275e865) SHA1(d5550646a062609cfc052fab81c533ca69171875), "hack","Winner Takes All (Barcrest) (MPU4) (WN8 2.2 5, hack, set 1)" )
+GAME_CUSTOM( 199?, m4wta__ag, m4wta, "wta5.8t", 0x0000, 0x010000, CRC(548122ab) SHA1(c611084e8a08d5556e458daf9cc721c0e5ba1948), "hack","Winner Takes All (Barcrest) (MPU4) (WN8 2.2 5, hack, set 2)" )
// "(C)1996 B.W.B." and "WN4 1.1"
-GAME_CUSTOM( 199?, m4wta__9, m4wta, "wta_5p_4c.bin", 0x0000, 0x010000, CRC(54c51976) SHA1(70cae1f931615b993ac6a9e7ce2e529ad6d27da8), "Bwb / hack?","Winner Takes All (Barcrest) (MPU4) (WN4 1.1 K5)" )
-GAME_CUSTOM( 199?, m4wta__ab, m4wta, "wt_05__4.1_1", 0x0000, 0x010000, CRC(5e05485e) SHA1(062f16ca92518f746f5410a2b9b551542e1a68e3), "Bwb / hack?","Winner Takes All (Barcrest) (MPU4) (WN4 1.1 5)" )
-GAME_CUSTOM( 199?, m4wta__ae, m4wta, "wta5.4", 0x0000, 0x010000, CRC(00c64637) SHA1(54214edb107b28852a1bd3e095787bf9241e4fe3), "Bwb / hack?","Winner Takes All (Barcrest) (MPU4) (WN4 1.1, hack?)" ) // bad char alarm
+GAME_CUSTOM( 199?, m4wta__9, m4wta, "wta_5p_4c.bin", 0x0000, 0x010000, CRC(54c51976) SHA1(70cae1f931615b993ac6a9e7ce2e529ad6d27da8), "Bwb","Winner Takes All (Barcrest) (MPU4) (WN4 1.1 K5)" )
+GAME_CUSTOM( 199?, m4wta__ab, m4wta, "wt_05__4.1_1", 0x0000, 0x010000, CRC(5e05485e) SHA1(062f16ca92518f746f5410a2b9b551542e1a68e3), "Bwb","Winner Takes All (Barcrest) (MPU4) (WN4 1.1 5)" )
+GAME_CUSTOM( 199?, m4wta__ae, m4wta, "wta5.4", 0x0000, 0x010000, CRC(00c64637) SHA1(54214edb107b28852a1bd3e095787bf9241e4fe3), "hack","Winner Takes All (Barcrest) (MPU4) (WN4 1.1 K5, hack?)" ) // bad char alarm
// "(C)1996 B.W.B." and "WN5 3.0"
-GAME_CUSTOM( 199?, m4wta__ac, m4wta, "wt_05__5.3_1", 0x0000, 0x010000, CRC(8a289bbd) SHA1(8ae0858716ed6aa02f6b4f93fd367c7cee85d13a), "Bwb / hack?","Winner Takes All (Barcrest) (MPU4) (WN5 3.0 5)" )
+GAME_CUSTOM( 199?, m4wta__ac, m4wta, "wt_05__5.3_1", 0x0000, 0x010000, CRC(8a289bbd) SHA1(8ae0858716ed6aa02f6b4f93fd367c7cee85d13a), "Bwb","Winner Takes All (Barcrest) (MPU4) (WN5 3.0 5)" )
// "BILLY WHIZZ" and "V1 0.1"
GAME_CUSTOM( 199?, m4wta__6, m4wta, "wta20p10.bin", 0x0000, 0x010000, CRC(c7f235b8) SHA1(a25f6f755140d70b0392985839b1729640cf5d5d), "hack","Winner Takes All (Barcrest) (MPU4) (V1 0.1, hack)" )
// "197 COCO" and "WN4 1.1" (hack)
@@ -1179,78 +1179,78 @@ GAME_CUSTOM( 199?, m4wta__af, m4wta, "wta5.5n",
// "(C)1993 BARCREST" and "GTR 2.0"
GAME_CUSTOM( 199?, m4goodtm, 0, "gtr20s.p1", 0x0000, 0x020000, CRC(91d2632d) SHA1(b8a7ef106a16e0526626cd69e82d07616d5c07d9), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0)" )
-GAME_CUSTOM( 199?, m4goodtm__ae, m4goodtm, "gtr20d.p1", 0x0000, 0x020000, CRC(a19eaef1) SHA1(5e9f9cffd841b9d4f21175e3dcec7436d016bb19), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 1)" )
-GAME_CUSTOM( 199?, m4goodtm__4, m4goodtm, "gtr20ad.p1", 0x0000, 0x020000, CRC(38cf724f) SHA1(e58c02e5ca4ff0ecab41fe4597aa652ff8cc604f), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 32)" )
-GAME_CUSTOM( 199?, m4goodtm__5, m4goodtm, "gtr20b.p1", 0x0000, 0x020000, CRC(820d5cba) SHA1(d297500c3a5388d7c9203fcb15778079e8671329), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 33)" )
-GAME_CUSTOM( 199?, m4goodtm__6, m4goodtm, "gtr20bd.p1", 0x0000, 0x020000, CRC(7208da19) SHA1(c28b50eb91204a7494664b082ce57a910fdb29fd), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 34)" )
-GAME_CUSTOM( 199?, m4goodtm__7, m4goodtm, "gtr20dh.p1", 0x0000, 0x020000, CRC(0f13d16f) SHA1(3a159982a3c5231d577848ca1cde17e8d84660a1), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 35)" )
-GAME_CUSTOM( 199?, m4goodtm__8, m4goodtm, "gtr20dk.p1", 0x0000, 0x020000, CRC(8bc0c97e) SHA1(3b3eb7e44aa3f9ce19f6f612ea6bd24cc78630ff), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 36)" )
-GAME_CUSTOM( 199?, m4goodtm__9, m4goodtm, "gtr20dr.p1", 0x0000, 0x020000, CRC(112e17c7) SHA1(519a62d61a0aa8dc2433369bd74f62f61a85994c), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 37)" )
-GAME_CUSTOM( 199?, m4goodtm__aa, m4goodtm, "gtr20dy.p1", 0x0000, 0x020000, CRC(bf2c52b1) SHA1(c8f97b56e9782b23c0ca8795ae2663c89660225e), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 38)" )
-GAME_CUSTOM( 199?, m4goodtm__ab, m4goodtm, "gtr20h.p1", 0x0000, 0x020000, CRC(ff1657cc) SHA1(07dfbc8c2b2d8fb7001ef51d80ef46562111d3ac), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 39)" )
-GAME_CUSTOM( 199?, m4goodtm__ac, m4goodtm, "gtr20k.p1", 0x0000, 0x020000, CRC(7bc54fdd) SHA1(287c1a403429bae1cc3a4ba9dfe9b510777a64b1), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 40)" )
-GAME_CUSTOM( 199?, m4goodtm__ad, m4goodtm, "gtr20r.p1", 0x0000, 0x020000, CRC(e12b9164) SHA1(a54993c4f9ffc08c03905e6f50e499eba13db0d6), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 41)" )
-GAME_CUSTOM( 199?, m4goodtm__af, m4goodtm, "gtr20y.p1", 0x0000, 0x020000, CRC(4f29d412) SHA1(c6a72e6fa7daaa6d8622936d10ae745814f4a8b7), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 43)" )
+GAME_CUSTOM( 199?, m4goodtm__ae, m4goodtm, "gtr20d.p1", 0x0000, 0x020000, CRC(a19eaef1) SHA1(5e9f9cffd841b9d4f21175e3dcec7436d016bb19), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 D)" )
+GAME_CUSTOM( 199?, m4goodtm__4, m4goodtm, "gtr20ad.p1", 0x0000, 0x020000, CRC(38cf724f) SHA1(e58c02e5ca4ff0ecab41fe4597aa652ff8cc604f), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 AD)" )
+GAME_CUSTOM( 199?, m4goodtm__5, m4goodtm, "gtr20b.p1", 0x0000, 0x020000, CRC(820d5cba) SHA1(d297500c3a5388d7c9203fcb15778079e8671329), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 B)" )
+GAME_CUSTOM( 199?, m4goodtm__6, m4goodtm, "gtr20bd.p1", 0x0000, 0x020000, CRC(7208da19) SHA1(c28b50eb91204a7494664b082ce57a910fdb29fd), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 BD)" )
+GAME_CUSTOM( 199?, m4goodtm__7, m4goodtm, "gtr20dh.p1", 0x0000, 0x020000, CRC(0f13d16f) SHA1(3a159982a3c5231d577848ca1cde17e8d84660a1), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 DH)" )
+GAME_CUSTOM( 199?, m4goodtm__8, m4goodtm, "gtr20dk.p1", 0x0000, 0x020000, CRC(8bc0c97e) SHA1(3b3eb7e44aa3f9ce19f6f612ea6bd24cc78630ff), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 KD)" )
+GAME_CUSTOM( 199?, m4goodtm__9, m4goodtm, "gtr20dr.p1", 0x0000, 0x020000, CRC(112e17c7) SHA1(519a62d61a0aa8dc2433369bd74f62f61a85994c), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 RD)" )
+GAME_CUSTOM( 199?, m4goodtm__aa, m4goodtm, "gtr20dy.p1", 0x0000, 0x020000, CRC(bf2c52b1) SHA1(c8f97b56e9782b23c0ca8795ae2663c89660225e), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 YD)" )
+GAME_CUSTOM( 199?, m4goodtm__ab, m4goodtm, "gtr20h.p1", 0x0000, 0x020000, CRC(ff1657cc) SHA1(07dfbc8c2b2d8fb7001ef51d80ef46562111d3ac), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 H)" )
+GAME_CUSTOM( 199?, m4goodtm__ac, m4goodtm, "gtr20k.p1", 0x0000, 0x020000, CRC(7bc54fdd) SHA1(287c1a403429bae1cc3a4ba9dfe9b510777a64b1), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 K)" )
+GAME_CUSTOM( 199?, m4goodtm__ad, m4goodtm, "gtr20r.p1", 0x0000, 0x020000, CRC(e12b9164) SHA1(a54993c4f9ffc08c03905e6f50e499eba13db0d6), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 R)" )
+GAME_CUSTOM( 199?, m4goodtm__af, m4goodtm, "gtr20y.p1", 0x0000, 0x020000, CRC(4f29d412) SHA1(c6a72e6fa7daaa6d8622936d10ae745814f4a8b7), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 Y)" )
// "(C)1993 BARCREST" and "GTA 0.1"
GAME_CUSTOM( 199?, m4goodtm__l, m4goodtm, "gta01s.p1", 0x0000, 0x020000, CRC(4340d9f6) SHA1(e9ccd419318bc3a3aba35a0104a98d1756b41731), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1)" )
-GAME_CUSTOM( 199?, m4goodtm__a, m4goodtm, "gta01ad.p1", 0x0000, 0x020000, CRC(2b556e66) SHA1(50a042fdb53294f74ab23a41a8a850dd14ad580d), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 2)" )
-GAME_CUSTOM( 199?, m4goodtm__b, m4goodtm, "gta01b.p1", 0x0000, 0x020000, CRC(67dc4342) SHA1(bade42f329b4ab19e5802d8ac8b139486b05ac5a), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 3)" )
-GAME_CUSTOM( 199?, m4goodtm__c, m4goodtm, "gta01bd.p1", 0x0000, 0x020000, CRC(6192c630) SHA1(f18c5042dc45add52b3bd0c28ad1574a85a9f3c4), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 4)" )
-GAME_CUSTOM( 199?, m4goodtm__d, m4goodtm, "gta01d.p1", 0x0000, 0x020000, CRC(eac6ed87) SHA1(14e424b6a3232d751e5b800395b2962f997afb74), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 5)" )
-GAME_CUSTOM( 199?, m4goodtm__e, m4goodtm, "gta01dh.p1", 0x0000, 0x020000, CRC(4201347b) SHA1(f0c086f15baa0f458f64a6d4ff7da297d9b53c8f), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4goodtm__f, m4goodtm, "gta01dk.p1", 0x0000, 0x020000, CRC(985ad557) SHA1(404a42f03d733ca6d89ec558ba6b5d815e8ce339), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 7)" )
-GAME_CUSTOM( 199?, m4goodtm__g, m4goodtm, "gta01dr.p1", 0x0000, 0x020000, CRC(02b40bee) SHA1(a5bc063b0eac1689b13e9b523844aee105086c6b), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 8)" )
-GAME_CUSTOM( 199?, m4goodtm__h, m4goodtm, "gta01dy.p1", 0x0000, 0x020000, CRC(acb64e98) SHA1(93d7252fe15e6a3db760b0218b4610cb5acbaca3), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 9)" )
-GAME_CUSTOM( 199?, m4goodtm__i, m4goodtm, "gta01h.p1", 0x0000, 0x020000, CRC(444fb109) SHA1(ad04dbc67dade0012ce61718854f7656abd9d342), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 10)" )
-GAME_CUSTOM( 199?, m4goodtm__j, m4goodtm, "gta01k.p1", 0x0000, 0x020000, CRC(9e145025) SHA1(d26b4aaee4d08d7470e862dc0e5a80c914025991), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 11)" )
-GAME_CUSTOM( 199?, m4goodtm__k, m4goodtm, "gta01r.p1", 0x0000, 0x020000, CRC(04fa8e9c) SHA1(9ac94b59dcf8e4e123dd0f1f422d23698f1c8c38), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 12)" )
-GAME_CUSTOM( 199?, m4goodtm__m, m4goodtm, "gta01y.p1", 0x0000, 0x020000, CRC(aaf8cbea) SHA1(a027a0a243538a6b417b3859db90adc64eeb4d31), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 14)" )
+GAME_CUSTOM( 199?, m4goodtm__a, m4goodtm, "gta01ad.p1", 0x0000, 0x020000, CRC(2b556e66) SHA1(50a042fdb53294f74ab23a41a8a850dd14ad580d), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 AD)" )
+GAME_CUSTOM( 199?, m4goodtm__b, m4goodtm, "gta01b.p1", 0x0000, 0x020000, CRC(67dc4342) SHA1(bade42f329b4ab19e5802d8ac8b139486b05ac5a), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 B)" )
+GAME_CUSTOM( 199?, m4goodtm__c, m4goodtm, "gta01bd.p1", 0x0000, 0x020000, CRC(6192c630) SHA1(f18c5042dc45add52b3bd0c28ad1574a85a9f3c4), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 BD)" )
+GAME_CUSTOM( 199?, m4goodtm__d, m4goodtm, "gta01d.p1", 0x0000, 0x020000, CRC(eac6ed87) SHA1(14e424b6a3232d751e5b800395b2962f997afb74), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 D)" )
+GAME_CUSTOM( 199?, m4goodtm__e, m4goodtm, "gta01dh.p1", 0x0000, 0x020000, CRC(4201347b) SHA1(f0c086f15baa0f458f64a6d4ff7da297d9b53c8f), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 DH)" )
+GAME_CUSTOM( 199?, m4goodtm__f, m4goodtm, "gta01dk.p1", 0x0000, 0x020000, CRC(985ad557) SHA1(404a42f03d733ca6d89ec558ba6b5d815e8ce339), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 KD)" )
+GAME_CUSTOM( 199?, m4goodtm__g, m4goodtm, "gta01dr.p1", 0x0000, 0x020000, CRC(02b40bee) SHA1(a5bc063b0eac1689b13e9b523844aee105086c6b), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 RD)" )
+GAME_CUSTOM( 199?, m4goodtm__h, m4goodtm, "gta01dy.p1", 0x0000, 0x020000, CRC(acb64e98) SHA1(93d7252fe15e6a3db760b0218b4610cb5acbaca3), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 YD)" )
+GAME_CUSTOM( 199?, m4goodtm__i, m4goodtm, "gta01h.p1", 0x0000, 0x020000, CRC(444fb109) SHA1(ad04dbc67dade0012ce61718854f7656abd9d342), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 H)" )
+GAME_CUSTOM( 199?, m4goodtm__j, m4goodtm, "gta01k.p1", 0x0000, 0x020000, CRC(9e145025) SHA1(d26b4aaee4d08d7470e862dc0e5a80c914025991), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 K)" )
+GAME_CUSTOM( 199?, m4goodtm__k, m4goodtm, "gta01r.p1", 0x0000, 0x020000, CRC(04fa8e9c) SHA1(9ac94b59dcf8e4e123dd0f1f422d23698f1c8c38), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 R)" )
+GAME_CUSTOM( 199?, m4goodtm__m, m4goodtm, "gta01y.p1", 0x0000, 0x020000, CRC(aaf8cbea) SHA1(a027a0a243538a6b417b3859db90adc64eeb4d31), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 Y)" )
// "(C)1993 BARCREST" and "GTR 1.0"
GAME_CUSTOM( 199?, m4goodtm__z, m4goodtm, "gtr10s.p1", 0x0000, 0x020000, CRC(f43fd459) SHA1(7247048088bd39cf8b20d96b1c08be48b005ac86), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0)" )
-GAME_CUSTOM( 199?, m4goodtm__o, m4goodtm, "gtr10ad.p1", 0x0000, 0x020000, CRC(b776f5dd) SHA1(9b6bf6b4d02e432ef411a9d2501c0dc7c5b551b1), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 16)" )
-GAME_CUSTOM( 199?, m4goodtm__p, m4goodtm, "gtr10b.p1", 0x0000, 0x020000, CRC(3a0aee1d) SHA1(d7adf7118943ac946082b6c3687e10773f25608e), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 17)" )
-GAME_CUSTOM( 199?, m4goodtm__q, m4goodtm, "gtr10bd.p1", 0x0000, 0x020000, CRC(fdb15d8b) SHA1(2542765c382cd84be1a1e7d6654e4668b1fc7fea), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 18)" )
-GAME_CUSTOM( 199?, m4goodtm__r, m4goodtm, "gtr10d.p1", 0x0000, 0x020000, CRC(19991c56) SHA1(bed33027d8bc5dacc88d940ff3505be8186f5324), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 19)" )
-GAME_CUSTOM( 199?, m4goodtm__s, m4goodtm, "gtr10dh.p1", 0x0000, 0x020000, CRC(80aa56fd) SHA1(f01edf442eee7dd78fbc934deb361d7e90c2025a), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 20)" )
-GAME_CUSTOM( 199?, m4goodtm__t, m4goodtm, "gtr10dk.p1", 0x0000, 0x020000, CRC(04794eec) SHA1(3e2b95ed2092ad1c0242f8a6cb540de0c6f995a3), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 21)" )
-GAME_CUSTOM( 199?, m4goodtm__u, m4goodtm, "gtr10dr.p1", 0x0000, 0x020000, CRC(9e979055) SHA1(b95111c4c986c4e9ceca9771ccb97fdeb67ffb02), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 22)" )
-GAME_CUSTOM( 199?, m4goodtm__v, m4goodtm, "gtr10dy.p1", 0x0000, 0x020000, CRC(3095d523) SHA1(eed9cf874f13fe9576e8ba0da8296546311fff01), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 23)" )
-GAME_CUSTOM( 199?, m4goodtm__w, m4goodtm, "gtr10h.p1", 0x0000, 0x020000, CRC(4711e56b) SHA1(3717b418758039286174594563281c21e4752eb5), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 24)" )
-GAME_CUSTOM( 199?, m4goodtm__x, m4goodtm, "gtr10k.p1", 0x0000, 0x020000, CRC(c3c2fd7a) SHA1(d6e91fed1276c660cfe8e92c6902951803947a56), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 25)" )
-GAME_CUSTOM( 199?, m4goodtm__y, m4goodtm, "gtr10r.p1", 0x0000, 0x020000, CRC(592c23c3) SHA1(17e7a22c9b80e8669cb46f691d56251bbf0717d0), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 26)" )
-GAME_CUSTOM( 199?, m4goodtm__0, m4goodtm, "gtr10y.p1", 0x0000, 0x020000, CRC(f72e66b5) SHA1(14e09a94e1cde77e87573ad7e0f438485f637dfc), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 28)" )
+GAME_CUSTOM( 199?, m4goodtm__o, m4goodtm, "gtr10ad.p1", 0x0000, 0x020000, CRC(b776f5dd) SHA1(9b6bf6b4d02e432ef411a9d2501c0dc7c5b551b1), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 AD)" )
+GAME_CUSTOM( 199?, m4goodtm__p, m4goodtm, "gtr10b.p1", 0x0000, 0x020000, CRC(3a0aee1d) SHA1(d7adf7118943ac946082b6c3687e10773f25608e), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 B)" )
+GAME_CUSTOM( 199?, m4goodtm__q, m4goodtm, "gtr10bd.p1", 0x0000, 0x020000, CRC(fdb15d8b) SHA1(2542765c382cd84be1a1e7d6654e4668b1fc7fea), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 BD)" )
+GAME_CUSTOM( 199?, m4goodtm__r, m4goodtm, "gtr10d.p1", 0x0000, 0x020000, CRC(19991c56) SHA1(bed33027d8bc5dacc88d940ff3505be8186f5324), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 D)" )
+GAME_CUSTOM( 199?, m4goodtm__s, m4goodtm, "gtr10dh.p1", 0x0000, 0x020000, CRC(80aa56fd) SHA1(f01edf442eee7dd78fbc934deb361d7e90c2025a), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 DH)" )
+GAME_CUSTOM( 199?, m4goodtm__t, m4goodtm, "gtr10dk.p1", 0x0000, 0x020000, CRC(04794eec) SHA1(3e2b95ed2092ad1c0242f8a6cb540de0c6f995a3), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 KD)" )
+GAME_CUSTOM( 199?, m4goodtm__u, m4goodtm, "gtr10dr.p1", 0x0000, 0x020000, CRC(9e979055) SHA1(b95111c4c986c4e9ceca9771ccb97fdeb67ffb02), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 RD)" )
+GAME_CUSTOM( 199?, m4goodtm__v, m4goodtm, "gtr10dy.p1", 0x0000, 0x020000, CRC(3095d523) SHA1(eed9cf874f13fe9576e8ba0da8296546311fff01), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 YD)" )
+GAME_CUSTOM( 199?, m4goodtm__w, m4goodtm, "gtr10h.p1", 0x0000, 0x020000, CRC(4711e56b) SHA1(3717b418758039286174594563281c21e4752eb5), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 H)" )
+GAME_CUSTOM( 199?, m4goodtm__x, m4goodtm, "gtr10k.p1", 0x0000, 0x020000, CRC(c3c2fd7a) SHA1(d6e91fed1276c660cfe8e92c6902951803947a56), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 K)" )
+GAME_CUSTOM( 199?, m4goodtm__y, m4goodtm, "gtr10r.p1", 0x0000, 0x020000, CRC(592c23c3) SHA1(17e7a22c9b80e8669cb46f691d56251bbf0717d0), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 R)" )
+GAME_CUSTOM( 199?, m4goodtm__0, m4goodtm, "gtr10y.p1", 0x0000, 0x020000, CRC(f72e66b5) SHA1(14e09a94e1cde77e87573ad7e0f438485f637dfc), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 Y)" )
// "(C)1993 BARCREST" and "GTS 0.1"
GAME_CUSTOM( 199?, m4goodtm__ar, m4goodtm, "gts01s.p1", 0x0000, 0x020000, CRC(b3819e1f) SHA1(fb44500e06b8a6b09e6b707ee8c0cfe7844870a2), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1)" )
-GAME_CUSTOM( 199?, m4goodtm__ag, m4goodtm, "gts01ad.p1", 0x0000, 0x020000, CRC(b415d3f3) SHA1(a22d4cbce9b66049c000806b565c86cd3d91fd82), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 44)" )
-GAME_CUSTOM( 199?, m4goodtm__ah, m4goodtm, "gts01b.p1", 0x0000, 0x020000, CRC(a05ea188) SHA1(5b6acadaf8b0d18b9c9daaf4aea45202cad13355), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 45)" )
-GAME_CUSTOM( 199?, m4goodtm__ai, m4goodtm, "gts01bd.p1", 0x0000, 0x020000, CRC(fed27ba5) SHA1(14f6fd7c3e964c3e6547a4bf5fa5d7cd802f715d), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 46)" )
-GAME_CUSTOM( 199?, m4goodtm__aj, m4goodtm, "gts01d.p1", 0x0000, 0x020000, CRC(2d440f4d) SHA1(09881d8aede3a2011010022ee0e03ba8f02ea907), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 47)" )
-GAME_CUSTOM( 199?, m4goodtm__ak, m4goodtm, "gts01dh.p1", 0x0000, 0x020000, CRC(dd4189ee) SHA1(f68da5f688ffa08625c92fd139bef263c43f674a), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 48)" )
-GAME_CUSTOM( 199?, m4goodtm__al, m4goodtm, "gts01dk.p1", 0x0000, 0x020000, CRC(071a68c2) SHA1(ea2052a389df09e0d5614106cc20ee0eccd339dd), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 49)" )
-GAME_CUSTOM( 199?, m4goodtm__am, m4goodtm, "gts01dr.p1", 0x0000, 0x020000, CRC(9df4b67b) SHA1(608de0bb5280ac20c8c47eb22f8a575ad87a4fdd), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 50)" )
-GAME_CUSTOM( 199?, m4goodtm__an, m4goodtm, "gts01dy.p1", 0x0000, 0x020000, CRC(33f6f30d) SHA1(aae905d0d278c38497513eb131a7cdaab4d22a85), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 51)" )
-GAME_CUSTOM( 199?, m4goodtm__ao, m4goodtm, "gts01h.p1", 0x0000, 0x020000, CRC(83cd53c3) SHA1(a4233e22d0bf53b3ddc4c951894a653e7951f5ad), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 52)" )
-GAME_CUSTOM( 199?, m4goodtm__ap, m4goodtm, "gts01k.p1", 0x0000, 0x020000, CRC(5996b2ef) SHA1(874d69a4adc31667ea177b3a0350b77bb735ea8d), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 53)" )
-GAME_CUSTOM( 199?, m4goodtm__aq, m4goodtm, "gts01r.p1", 0x0000, 0x020000, CRC(c3786c56) SHA1(c9659df6302046c466e6447b8b427628c88b773d), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 54)" )
-GAME_CUSTOM( 199?, m4goodtm__as, m4goodtm, "gts01y.p1", 0x0000, 0x020000, CRC(6d7a2920) SHA1(7d31087e3645e05baf6b0100966d4773a6d023cd), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 56)" )
+GAME_CUSTOM( 199?, m4goodtm__ag, m4goodtm, "gts01ad.p1", 0x0000, 0x020000, CRC(b415d3f3) SHA1(a22d4cbce9b66049c000806b565c86cd3d91fd82), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 AD)" )
+GAME_CUSTOM( 199?, m4goodtm__ah, m4goodtm, "gts01b.p1", 0x0000, 0x020000, CRC(a05ea188) SHA1(5b6acadaf8b0d18b9c9daaf4aea45202cad13355), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 B)" )
+GAME_CUSTOM( 199?, m4goodtm__ai, m4goodtm, "gts01bd.p1", 0x0000, 0x020000, CRC(fed27ba5) SHA1(14f6fd7c3e964c3e6547a4bf5fa5d7cd802f715d), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 BD)" )
+GAME_CUSTOM( 199?, m4goodtm__aj, m4goodtm, "gts01d.p1", 0x0000, 0x020000, CRC(2d440f4d) SHA1(09881d8aede3a2011010022ee0e03ba8f02ea907), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 D)" )
+GAME_CUSTOM( 199?, m4goodtm__ak, m4goodtm, "gts01dh.p1", 0x0000, 0x020000, CRC(dd4189ee) SHA1(f68da5f688ffa08625c92fd139bef263c43f674a), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 DH)" )
+GAME_CUSTOM( 199?, m4goodtm__al, m4goodtm, "gts01dk.p1", 0x0000, 0x020000, CRC(071a68c2) SHA1(ea2052a389df09e0d5614106cc20ee0eccd339dd), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 KD)" )
+GAME_CUSTOM( 199?, m4goodtm__am, m4goodtm, "gts01dr.p1", 0x0000, 0x020000, CRC(9df4b67b) SHA1(608de0bb5280ac20c8c47eb22f8a575ad87a4fdd), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 RD)" )
+GAME_CUSTOM( 199?, m4goodtm__an, m4goodtm, "gts01dy.p1", 0x0000, 0x020000, CRC(33f6f30d) SHA1(aae905d0d278c38497513eb131a7cdaab4d22a85), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 YD)" )
+GAME_CUSTOM( 199?, m4goodtm__ao, m4goodtm, "gts01h.p1", 0x0000, 0x020000, CRC(83cd53c3) SHA1(a4233e22d0bf53b3ddc4c951894a653e7951f5ad), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 H)" )
+GAME_CUSTOM( 199?, m4goodtm__ap, m4goodtm, "gts01k.p1", 0x0000, 0x020000, CRC(5996b2ef) SHA1(874d69a4adc31667ea177b3a0350b77bb735ea8d), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 K)" )
+GAME_CUSTOM( 199?, m4goodtm__aq, m4goodtm, "gts01r.p1", 0x0000, 0x020000, CRC(c3786c56) SHA1(c9659df6302046c466e6447b8b427628c88b773d), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 R)" )
+GAME_CUSTOM( 199?, m4goodtm__as, m4goodtm, "gts01y.p1", 0x0000, 0x020000, CRC(6d7a2920) SHA1(7d31087e3645e05baf6b0100966d4773a6d023cd), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 Y)" )
// "(C)1993 BARCREST" and "GTS 1.0"
GAME_CUSTOM( 199?, m4goodtm__a5, m4goodtm, "gts10s.p1", 0x0000, 0x020000, CRC(2851ba23) SHA1(7597a2df22aa0e2670be2d5bb2407ea1feace3a0), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0)" )
-GAME_CUSTOM( 199?, m4goodtm__au, m4goodtm, "gts10ad.p1", 0x0000, 0x020000, CRC(b754490c) SHA1(26811ae53b3ee8ae0a381604109f0f77f096e2c6), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 58)" )
-GAME_CUSTOM( 199?, m4goodtm__av, m4goodtm, "gts10b.p1", 0x0000, 0x020000, CRC(21410553) SHA1(2060269ab6dc9375b6e7101b3944305fcd4b6d12), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 59)" )
-GAME_CUSTOM( 199?, m4goodtm__aw, m4goodtm, "gts10bd.p1", 0x0000, 0x020000, CRC(fd93e15a) SHA1(b9574f34f1e7a92cc75d6aed8914f94ad661bba3), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 60)" )
-GAME_CUSTOM( 199?, m4goodtm__ax, m4goodtm, "gts10d.p1", 0x0000, 0x020000, CRC(ac5bab96) SHA1(2b4ab1f096a5d63d5688228debb25b392b94a297), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 61)" )
-GAME_CUSTOM( 199?, m4goodtm__ay, m4goodtm, "gts10dh.p1", 0x0000, 0x020000, CRC(de001311) SHA1(a096937e1f2fd2f9046c0ea2363805112da76c95), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 62)" )
-GAME_CUSTOM( 199?, m4goodtm__az, m4goodtm, "gts10dk.p1", 0x0000, 0x020000, CRC(045bf23d) SHA1(dd5567d4c07fba7ff1cc257db287e1a82d9b930a), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 63)" )
-GAME_CUSTOM( 199?, m4goodtm__a0, m4goodtm, "gts10dr.p1", 0x0000, 0x020000, CRC(9eb52c84) SHA1(385b09e424863f3778605c6e768c9b1068eae66e), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 64)" )
-GAME_CUSTOM( 199?, m4goodtm__a1, m4goodtm, "gts10dy.p1", 0x0000, 0x020000, CRC(30b769f2) SHA1(7cf1e66b992faf48b1fed39a005469e51d471a0b), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 65)" )
-GAME_CUSTOM( 199?, m4goodtm__a2, m4goodtm, "gts10h.p1", 0x0000, 0x020000, CRC(02d2f718) SHA1(9f46ef4cc7d08c42cf617b471e599ca21b4cd72f), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 66)" )
-GAME_CUSTOM( 199?, m4goodtm__a3, m4goodtm, "gts10k.p1", 0x0000, 0x020000, CRC(d8891634) SHA1(0019d2b3dd1c59d37d9c13e912907a55f2a9ca5f), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 67)" )
-GAME_CUSTOM( 199?, m4goodtm__a4, m4goodtm, "gts10r.p1", 0x0000, 0x020000, CRC(4267c88d) SHA1(22047782c384caeb9cf2de69dcdd05f42ee137ad), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 68)" )
-GAME_CUSTOM( 199?, m4goodtm__a6, m4goodtm, "gts10y.p1", 0x0000, 0x020000, CRC(ec658dfb) SHA1(a9d8ba1b66811ccd336892160d47e5d42eb83a23), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 70)" )
+GAME_CUSTOM( 199?, m4goodtm__au, m4goodtm, "gts10ad.p1", 0x0000, 0x020000, CRC(b754490c) SHA1(26811ae53b3ee8ae0a381604109f0f77f096e2c6), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 AD)" )
+GAME_CUSTOM( 199?, m4goodtm__av, m4goodtm, "gts10b.p1", 0x0000, 0x020000, CRC(21410553) SHA1(2060269ab6dc9375b6e7101b3944305fcd4b6d12), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 B)" )
+GAME_CUSTOM( 199?, m4goodtm__aw, m4goodtm, "gts10bd.p1", 0x0000, 0x020000, CRC(fd93e15a) SHA1(b9574f34f1e7a92cc75d6aed8914f94ad661bba3), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 BD)" )
+GAME_CUSTOM( 199?, m4goodtm__ax, m4goodtm, "gts10d.p1", 0x0000, 0x020000, CRC(ac5bab96) SHA1(2b4ab1f096a5d63d5688228debb25b392b94a297), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 D)" )
+GAME_CUSTOM( 199?, m4goodtm__ay, m4goodtm, "gts10dh.p1", 0x0000, 0x020000, CRC(de001311) SHA1(a096937e1f2fd2f9046c0ea2363805112da76c95), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 DH)" )
+GAME_CUSTOM( 199?, m4goodtm__az, m4goodtm, "gts10dk.p1", 0x0000, 0x020000, CRC(045bf23d) SHA1(dd5567d4c07fba7ff1cc257db287e1a82d9b930a), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 KD)" )
+GAME_CUSTOM( 199?, m4goodtm__a0, m4goodtm, "gts10dr.p1", 0x0000, 0x020000, CRC(9eb52c84) SHA1(385b09e424863f3778605c6e768c9b1068eae66e), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 RD)" )
+GAME_CUSTOM( 199?, m4goodtm__a1, m4goodtm, "gts10dy.p1", 0x0000, 0x020000, CRC(30b769f2) SHA1(7cf1e66b992faf48b1fed39a005469e51d471a0b), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 YD)" )
+GAME_CUSTOM( 199?, m4goodtm__a2, m4goodtm, "gts10h.p1", 0x0000, 0x020000, CRC(02d2f718) SHA1(9f46ef4cc7d08c42cf617b471e599ca21b4cd72f), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 H)" )
+GAME_CUSTOM( 199?, m4goodtm__a3, m4goodtm, "gts10k.p1", 0x0000, 0x020000, CRC(d8891634) SHA1(0019d2b3dd1c59d37d9c13e912907a55f2a9ca5f), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 K)" )
+GAME_CUSTOM( 199?, m4goodtm__a4, m4goodtm, "gts10r.p1", 0x0000, 0x020000, CRC(4267c88d) SHA1(22047782c384caeb9cf2de69dcdd05f42ee137ad), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 R)" )
+GAME_CUSTOM( 199?, m4goodtm__a6, m4goodtm, "gts10y.p1", 0x0000, 0x020000, CRC(ec658dfb) SHA1(a9d8ba1b66811ccd336892160d47e5d42eb83a23), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 Y)" )
// "(C)1993 BARCREST" and "GTS 0.2"
GAME_CUSTOM( 199?, m4goodtm__at, m4goodtm, "gts02s.t", 0x0000, 0x020000, CRC(e4f5ebcc) SHA1(3e070628375db980583c3b38e2676d73fbeaae68), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.2)" )
// "(C)1993 BARCREST" and "GTK 0.2"
-GAME_CUSTOM( 199?, m4goodtm__n, m4goodtm, "gtk02k.p1", 0x0000, 0x020000, CRC(a1665c5d) SHA1(056dcd9370df56129a65267fb70bbfac498f5a97), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTK 0.2)" )
+GAME_CUSTOM( 199?, m4goodtm__n, m4goodtm, "gtk02k.p1", 0x0000, 0x020000, CRC(a1665c5d) SHA1(056dcd9370df56129a65267fb70bbfac498f5a97), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTK 0.2 K)" )
// "(C)1993 BARCREST" and "GTR 1.1"
GAME_CUSTOM( 199?, m4goodtm__1, m4goodtm, "gtr11s", 0x0000, 0x020000, CRC(ff4bd1fb) SHA1(959a7975209e2d17c5b3e4adc72bd52bd3005035), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.1)" )
// no copyright string and "GTR 1.0"
@@ -1279,104 +1279,104 @@ GAME_CUSTOM( 199?, m4goodtm__3, m4goodtm, "gtr15t", 0x0000, 0x020000,
// sets below give a hopper sense error (casino / club sets?)
// "(C)1991 BARCREST" and "CG4 0.7"
GAME_CUSTOM( 199?, m4jpgem, 0, "cg4s.p1", 0x0000, 0x010000, CRC(f25eba0b) SHA1(250189b7fb8aa82a8696c3a0099eb13ec74eeb10), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7)" )
-GAME_CUSTOM( 199?, m4jpgem__g, m4jpgem, "cg4ad.p1", 0x0000, 0x010000, CRC(417c98c1) SHA1(2ce23e27742c418d5ebaa0f4f0597e29955ea57d), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7AD)" )
-GAME_CUSTOM( 199?, m4jpgem__a, m4jpgem, "cg4b.p1", 0x0000, 0x010000, CRC(c57cca63) SHA1(80a440912362d55cac6bc77b6ff6d6672af378c6), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 2)" )
-GAME_CUSTOM( 199?, m4jpgem__b, m4jpgem, "cg4bd.p1", 0x0000, 0x010000, CRC(7604ea50) SHA1(3d6eee763bd21119ab52a2388229da076caf78a4), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 3)" )
-GAME_CUSTOM( 199?, m4jpgem__c, m4jpgem, "cg4d.p1", 0x0000, 0x010000, CRC(87ea1087) SHA1(47f7c17fa3611745c881669ff50559e4b4386fd9), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 4)" )
-GAME_CUSTOM( 199?, m4jpgem__d, m4jpgem, "cg4dk.p1", 0x0000, 0x010000, CRC(230284fb) SHA1(39ab2abdd8d3af4818e4e3738529f020055ba659), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 5)" )
-GAME_CUSTOM( 199?, m4jpgem__e, m4jpgem, "cg4dy.p1", 0x0000, 0x010000, CRC(7d02342d) SHA1(097c9c9dc84bd00f1ddd64b1f9564f0cf7a9023f), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4jpgem__f, m4jpgem, "cg4k.p1", 0x0000, 0x010000, CRC(ba4ef5a8) SHA1(1673985aee634aa5c8129cc1239ce08fb9f5da2c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 7)" )
-GAME_CUSTOM( 199?, m4jpgem__h, m4jpgem, "cg4y.p1", 0x0000, 0x010000, CRC(237098d3) SHA1(9f54ed0d9ce37f3b4e6dca136fe4a12ba79c89f9), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 9)" )
+GAME_CUSTOM( 199?, m4jpgem__g, m4jpgem, "cg4ad.p1", 0x0000, 0x010000, CRC(417c98c1) SHA1(2ce23e27742c418d5ebaa0f4f0597e29955ea57d), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 AD)" )
+GAME_CUSTOM( 199?, m4jpgem__a, m4jpgem, "cg4b.p1", 0x0000, 0x010000, CRC(c57cca63) SHA1(80a440912362d55cac6bc77b6ff6d6672af378c6), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 B)" )
+GAME_CUSTOM( 199?, m4jpgem__b, m4jpgem, "cg4bd.p1", 0x0000, 0x010000, CRC(7604ea50) SHA1(3d6eee763bd21119ab52a2388229da076caf78a4), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 BD)" )
+GAME_CUSTOM( 199?, m4jpgem__c, m4jpgem, "cg4d.p1", 0x0000, 0x010000, CRC(87ea1087) SHA1(47f7c17fa3611745c881669ff50559e4b4386fd9), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 D)" )
+GAME_CUSTOM( 199?, m4jpgem__d, m4jpgem, "cg4dk.p1", 0x0000, 0x010000, CRC(230284fb) SHA1(39ab2abdd8d3af4818e4e3738529f020055ba659), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 KD)" )
+GAME_CUSTOM( 199?, m4jpgem__e, m4jpgem, "cg4dy.p1", 0x0000, 0x010000, CRC(7d02342d) SHA1(097c9c9dc84bd00f1ddd64b1f9564f0cf7a9023f), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 YD)" )
+GAME_CUSTOM( 199?, m4jpgem__f, m4jpgem, "cg4k.p1", 0x0000, 0x010000, CRC(ba4ef5a8) SHA1(1673985aee634aa5c8129cc1239ce08fb9f5da2c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 K)" )
+GAME_CUSTOM( 199?, m4jpgem__h, m4jpgem, "cg4y.p1", 0x0000, 0x010000, CRC(237098d3) SHA1(9f54ed0d9ce37f3b4e6dca136fe4a12ba79c89f9), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 Y)" )
// "(C)1991 BARCREST" and "CG4 0.3" (startup shows CGT 0.3)
-GAME_CUSTOM( 199?, m4jpgem__i, m4jpgem, "cgt03ad.p1", 0x0000, 0x010000, CRC(88842c4a) SHA1(c86987b44f04cf28a6f68300e4345f635455d4bf), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3AD / CG4 0.3)" )
-GAME_CUSTOM( 199?, m4jpgem__j, m4jpgem, "cgt03b.p1", 0x0000, 0x010000, CRC(99634ce1) SHA1(9fe867b0619070f563fb72b4415e4a9263c808e7), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 11)" )
-GAME_CUSTOM( 199?, m4jpgem__k, m4jpgem, "cgt03bd.p1", 0x0000, 0x010000, CRC(be984100) SHA1(dfa7d97f02dc988b7743a1f57ab08c406f712559), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 12)" )
-GAME_CUSTOM( 199?, m4jpgem__l, m4jpgem, "cgt03d.p1", 0x0000, 0x010000, CRC(aba3a305) SHA1(9a0203f830a0a8c6013eb5824bd48373c589dcb5), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 13)" )
-GAME_CUSTOM( 199?, m4jpgem__m, m4jpgem, "cgt03dk.p1", 0x0000, 0x010000, CRC(be9292b0) SHA1(0d7944ac647c8fd92530389d61f5c1eec0d2c8d1), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 14)" )
-GAME_CUSTOM( 199?, m4jpgem__n, m4jpgem, "cgt03dr.p1", 0x0000, 0x010000, CRC(935fa628) SHA1(5dd93fd27d2e15606ba22bada1ecff85c4f4a8c3), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 15)" )
-GAME_CUSTOM( 199?, m4jpgem__o, m4jpgem, "cgt03dy.p1", 0x0000, 0x010000, CRC(b83879b0) SHA1(b0664e1bd97b76b73c96a9e0d20d1a15707863ff), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 16)" )
-GAME_CUSTOM( 199?, m4jpgem__p, m4jpgem, "cgt03k.p1", 0x0000, 0x010000, CRC(451a8f66) SHA1(e218db61fdaca6824abebe59ec7f8d0f595e2cfa), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 17)" )
-GAME_CUSTOM( 199?, m4jpgem__q, m4jpgem, "cgt03r.p1", 0x0000, 0x010000, CRC(85dd3733) SHA1(10b8c4d147d4b534ce31394d5ba69806b83a297e), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 18)" )
-GAME_CUSTOM( 199?, m4jpgem__r, m4jpgem, "cgt03s.p1", 0x0000, 0x010000, CRC(b516cbcd) SHA1(c04d32818f9f8772b2a945cf40075ce7844b936e), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 19)" )
-GAME_CUSTOM( 199?, m4jpgem__s, m4jpgem, "cgt03y.p1", 0x0000, 0x010000, CRC(57937087) SHA1(489bcbe5598020c24357f4c7b4e9096bc6332aa3), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 20)" )
+GAME_CUSTOM( 199?, m4jpgem__r, m4jpgem, "cgt03s.p1", 0x0000, 0x010000, CRC(b516cbcd) SHA1(c04d32818f9f8772b2a945cf40075ce7844b936e), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 / CG4 0.3)" )
+GAME_CUSTOM( 199?, m4jpgem__i, m4jpgem, "cgt03ad.p1", 0x0000, 0x010000, CRC(88842c4a) SHA1(c86987b44f04cf28a6f68300e4345f635455d4bf), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 AD / CG4 0.3)" )
+GAME_CUSTOM( 199?, m4jpgem__j, m4jpgem, "cgt03b.p1", 0x0000, 0x010000, CRC(99634ce1) SHA1(9fe867b0619070f563fb72b4415e4a9263c808e7), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 B / CG4 0.3)" )
+GAME_CUSTOM( 199?, m4jpgem__k, m4jpgem, "cgt03bd.p1", 0x0000, 0x010000, CRC(be984100) SHA1(dfa7d97f02dc988b7743a1f57ab08c406f712559), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 BD / CG4 0.3)" )
+GAME_CUSTOM( 199?, m4jpgem__l, m4jpgem, "cgt03d.p1", 0x0000, 0x010000, CRC(aba3a305) SHA1(9a0203f830a0a8c6013eb5824bd48373c589dcb5), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 D / CG4 0.3)" )
+GAME_CUSTOM( 199?, m4jpgem__m, m4jpgem, "cgt03dk.p1", 0x0000, 0x010000, CRC(be9292b0) SHA1(0d7944ac647c8fd92530389d61f5c1eec0d2c8d1), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 KD / CG4 0.3)" )
+GAME_CUSTOM( 199?, m4jpgem__n, m4jpgem, "cgt03dr.p1", 0x0000, 0x010000, CRC(935fa628) SHA1(5dd93fd27d2e15606ba22bada1ecff85c4f4a8c3), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 RD / CG4 0.3)" )
+GAME_CUSTOM( 199?, m4jpgem__o, m4jpgem, "cgt03dy.p1", 0x0000, 0x010000, CRC(b83879b0) SHA1(b0664e1bd97b76b73c96a9e0d20d1a15707863ff), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 YD / CG4 0.3)" )
+GAME_CUSTOM( 199?, m4jpgem__p, m4jpgem, "cgt03k.p1", 0x0000, 0x010000, CRC(451a8f66) SHA1(e218db61fdaca6824abebe59ec7f8d0f595e2cfa), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 K / CG4 0.3)" )
+GAME_CUSTOM( 199?, m4jpgem__q, m4jpgem, "cgt03r.p1", 0x0000, 0x010000, CRC(85dd3733) SHA1(10b8c4d147d4b534ce31394d5ba69806b83a297e), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 R / CG4 0.3)" )
+GAME_CUSTOM( 199?, m4jpgem__s, m4jpgem, "cgt03y.p1", 0x0000, 0x010000, CRC(57937087) SHA1(489bcbe5598020c24357f4c7b4e9096bc6332aa3), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 Y / CG4 0.3)" )
// "(C)1991 BARCREST" and "CG4 0.1" (startup shows CGT 0.1)
GAME_CUSTOM( 199?, m4jpgem__t, m4jpgem, "cgts.p1", 0x0000, 0x010000, CRC(2a6f4489) SHA1(e410dd49cca50b3c051815a1b4be4bf2dc55f1af), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.1 / CG4 0.1)" )
// "(C)1991 BARCREST" and "CG4 0.2" (startup shows CGU 0.2)
GAME_CUSTOM( 199?, m4jpgem__3, m4jpgem, "cgu02s.p1", 0x0000, 0x010000, CRC(1cff0517) SHA1(162651a1af6273ea49490d0809a30ee9b13c728e), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 / CG4 0.2)" )
-GAME_CUSTOM( 199?, m4jpgem__u, m4jpgem, "cgu02ad.p1", 0x0000, 0x010000, CRC(eee268a6) SHA1(ebc0d1e14ff27c5497b7c4e90e6fafa58916c83b), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2AD / CG4 0.2)" )
-GAME_CUSTOM( 199?, m4jpgem__v, m4jpgem, "cgu02b.p1", 0x0000, 0x010000, CRC(7d05d069) SHA1(2a94b121528bf39939f5a8b36318c0073171997d), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 23)" )
-GAME_CUSTOM( 199?, m4jpgem__w, m4jpgem, "cgu02bd.p1", 0x0000, 0x010000, CRC(d8fe05ec) SHA1(7e2de5c6ece6779d09daf23f3ab4b61817fad103), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 24)" )
-GAME_CUSTOM( 199?, m4jpgem__x, m4jpgem, "cgu02d.p1", 0x0000, 0x010000, CRC(daaf1fe1) SHA1(f2606c454e191166d217c5f5c82e91794977384b), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 25)" )
-GAME_CUSTOM( 199?, m4jpgem__y, m4jpgem, "cgu02dk.p1", 0x0000, 0x010000, CRC(0487c66b) SHA1(3be30181590e5f5d2181bc76da5fd49fe9796006), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 26)" )
-GAME_CUSTOM( 199?, m4jpgem__z, m4jpgem, "cgu02dr.p1", 0x0000, 0x010000, CRC(68655b09) SHA1(df40c058172d960f4f9393343cf9271fc52c58c8), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 27)" )
-GAME_CUSTOM( 199?, m4jpgem__0, m4jpgem, "cgu02dy.p1", 0x0000, 0x010000, CRC(5f1709d1) SHA1(36ae3cd57e5db956b8ef362043d5c63aea0da06a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 28)" )
-GAME_CUSTOM( 199?, m4jpgem__1, m4jpgem, "cgu02k.p1", 0x0000, 0x010000, CRC(90058f14) SHA1(0e73410253e422ff2d4182b034624ab8dd996cb8), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 29)" )
-GAME_CUSTOM( 199?, m4jpgem__2, m4jpgem, "cgu02r.p1", 0x0000, 0x010000, CRC(8f1d071b) SHA1(caa05465a12ca7ab6df0dce458caefb40dad818a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 30)" )
-GAME_CUSTOM( 199?, m4jpgem__4, m4jpgem, "cgu02y.p1", 0x0000, 0x010000, CRC(a2468782) SHA1(5f9161cffc6d9ffe8c30c41434ab012c16a48dfd), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 32)" )
+GAME_CUSTOM( 199?, m4jpgem__u, m4jpgem, "cgu02ad.p1", 0x0000, 0x010000, CRC(eee268a6) SHA1(ebc0d1e14ff27c5497b7c4e90e6fafa58916c83b), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 AD / CG4 0.2)" )
+GAME_CUSTOM( 199?, m4jpgem__v, m4jpgem, "cgu02b.p1", 0x0000, 0x010000, CRC(7d05d069) SHA1(2a94b121528bf39939f5a8b36318c0073171997d), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 B / CG4 0.2)" )
+GAME_CUSTOM( 199?, m4jpgem__w, m4jpgem, "cgu02bd.p1", 0x0000, 0x010000, CRC(d8fe05ec) SHA1(7e2de5c6ece6779d09daf23f3ab4b61817fad103), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 BD / CG4 0.2)" )
+GAME_CUSTOM( 199?, m4jpgem__x, m4jpgem, "cgu02d.p1", 0x0000, 0x010000, CRC(daaf1fe1) SHA1(f2606c454e191166d217c5f5c82e91794977384b), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 D / CG4 0.2)" )
+GAME_CUSTOM( 199?, m4jpgem__y, m4jpgem, "cgu02dk.p1", 0x0000, 0x010000, CRC(0487c66b) SHA1(3be30181590e5f5d2181bc76da5fd49fe9796006), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 KD / CG4 0.2)" )
+GAME_CUSTOM( 199?, m4jpgem__z, m4jpgem, "cgu02dr.p1", 0x0000, 0x010000, CRC(68655b09) SHA1(df40c058172d960f4f9393343cf9271fc52c58c8), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 RD / CG4 0.2)" )
+GAME_CUSTOM( 199?, m4jpgem__0, m4jpgem, "cgu02dy.p1", 0x0000, 0x010000, CRC(5f1709d1) SHA1(36ae3cd57e5db956b8ef362043d5c63aea0da06a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 YD / CG4 0.2)" )
+GAME_CUSTOM( 199?, m4jpgem__1, m4jpgem, "cgu02k.p1", 0x0000, 0x010000, CRC(90058f14) SHA1(0e73410253e422ff2d4182b034624ab8dd996cb8), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 K / CG4 0.2)" )
+GAME_CUSTOM( 199?, m4jpgem__2, m4jpgem, "cgu02r.p1", 0x0000, 0x010000, CRC(8f1d071b) SHA1(caa05465a12ca7ab6df0dce458caefb40dad818a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 R / CG4 0.2)" )
+GAME_CUSTOM( 199?, m4jpgem__4, m4jpgem, "cgu02y.p1", 0x0000, 0x010000, CRC(a2468782) SHA1(5f9161cffc6d9ffe8c30c41434ab012c16a48dfd), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 Y / CG4 0.2)" )
// "(C)1991 BARCREST" and "CG4 0.1" (startup shows RRH 0.1)
GAME_CUSTOM( 199?, m4jpgem__bo, m4jpgem, "rrh01s.p1", 0x0000, 0x010000, CRC(dea2f376) SHA1(92f43c75950553d9b76af8179192d106de95fc03), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 / CG4 0.1)" )
-GAME_CUSTOM( 199?, m4jpgem__be, m4jpgem, "rrh01ad.p1", 0x0000, 0x010000, CRC(d4f21930) SHA1(cba034b42a3587c0e173bc06d80142d7e494c849), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1AD / CG4 0.1)" )
-GAME_CUSTOM( 199?, m4jpgem__bf, m4jpgem, "rrh01b.p1", 0x0000, 0x010000, CRC(c85f9099) SHA1(f3c8f79c2e0cc58024202564761f4935f5d241b1), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 79)" )
-GAME_CUSTOM( 199?, m4jpgem__bg, m4jpgem, "rrh01bd.p1", 0x0000, 0x010000, CRC(e2ee747a) SHA1(7f6cb93e3cbe4a2dd97d1ad15d17fa4f2f0a4b12), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 80)" )
-GAME_CUSTOM( 199?, m4jpgem__bh, m4jpgem, "rrh01c.p1", 0x0000, 0x010000, CRC(00dfced2) SHA1(c497cb9835dca0d67f5ec6b6b1321a7b92612c9a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 81)" )
-GAME_CUSTOM( 199?, m4jpgem__bi, m4jpgem, "rrh01d.p1", 0x0000, 0x010000, CRC(aef7ddbd) SHA1(8db2f1dbc11af7ef4357a90a77838c01588f8108), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 82)" )
-GAME_CUSTOM( 199?, m4jpgem__bj, m4jpgem, "rrh01dk.p1", 0x0000, 0x010000, CRC(56206f0a) SHA1(3bdb5824ab6d748eb83b56f08cf2d1074a94b38a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 83)" )
-GAME_CUSTOM( 199?, m4jpgem__bk, m4jpgem, "rrh01dr.p1", 0x0000, 0x010000, CRC(8f622573) SHA1(9bbfcb2f3cf5f6edd2c6222b25c4971a59d2c235), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 84)" )
-GAME_CUSTOM( 199?, m4jpgem__bl, m4jpgem, "rrh01dy.p1", 0x0000, 0x010000, CRC(d89136fd) SHA1(40fd0978bc76d81bfb5dc2f1e4a0c1c95b7c4e00), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 85)" )
-GAME_CUSTOM( 199?, m4jpgem__bm, m4jpgem, "rrh01k.p1", 0x0000, 0x010000, CRC(da4a08c9) SHA1(3a86c0a543a7192680663b465ddfd1fa338cfec5), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 86)" )
-GAME_CUSTOM( 199?, m4jpgem__bn, m4jpgem, "rrh01r.p1", 0x0000, 0x010000, CRC(fb45c547) SHA1(8d9c35c47c0f03c9dc6727fc5f952d64e25336f7), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 87)" )
-GAME_CUSTOM( 199?, m4jpgem__bp, m4jpgem, "rrh01y.p1", 0x0000, 0x010000, CRC(27014453) SHA1(febc118fcb8f048806237b38958c02d02b9f2874), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 89)" )
+GAME_CUSTOM( 199?, m4jpgem__be, m4jpgem, "rrh01ad.p1", 0x0000, 0x010000, CRC(d4f21930) SHA1(cba034b42a3587c0e173bc06d80142d7e494c849), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 AD / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgem__bf, m4jpgem, "rrh01b.p1", 0x0000, 0x010000, CRC(c85f9099) SHA1(f3c8f79c2e0cc58024202564761f4935f5d241b1), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 B / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgem__bg, m4jpgem, "rrh01bd.p1", 0x0000, 0x010000, CRC(e2ee747a) SHA1(7f6cb93e3cbe4a2dd97d1ad15d17fa4f2f0a4b12), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 BD / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgem__bh, m4jpgem, "rrh01c.p1", 0x0000, 0x010000, CRC(00dfced2) SHA1(c497cb9835dca0d67f5ec6b6b1321a7b92612c9a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 C / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgem__bi, m4jpgem, "rrh01d.p1", 0x0000, 0x010000, CRC(aef7ddbd) SHA1(8db2f1dbc11af7ef4357a90a77838c01588f8108), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 D / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgem__bj, m4jpgem, "rrh01dk.p1", 0x0000, 0x010000, CRC(56206f0a) SHA1(3bdb5824ab6d748eb83b56f08cf2d1074a94b38a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 KD / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgem__bk, m4jpgem, "rrh01dr.p1", 0x0000, 0x010000, CRC(8f622573) SHA1(9bbfcb2f3cf5f6edd2c6222b25c4971a59d2c235), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 RD / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgem__bl, m4jpgem, "rrh01dy.p1", 0x0000, 0x010000, CRC(d89136fd) SHA1(40fd0978bc76d81bfb5dc2f1e4a0c1c95b7c4e00), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 YD / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgem__bm, m4jpgem, "rrh01k.p1", 0x0000, 0x010000, CRC(da4a08c9) SHA1(3a86c0a543a7192680663b465ddfd1fa338cfec5), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 K / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgem__bn, m4jpgem, "rrh01r.p1", 0x0000, 0x010000, CRC(fb45c547) SHA1(8d9c35c47c0f03c9dc6727fc5f952d64e25336f7), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 R / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgem__bp, m4jpgem, "rrh01y.p1", 0x0000, 0x010000, CRC(27014453) SHA1(febc118fcb8f048806237b38958c02d02b9f2874), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 Y / CG4 0.1)" )
// sets below boot (regular arcade sets?)
// "(C)1991 BARCREST" and "JAG 0.4"
GAME_CUSTOM( 199?, m4jpgem__9, m4jpgem, "jags.p1", 0x0000, 0x010000, CRC(dd93f084) SHA1(5cb25b3beb6d7a7b83227a6bb8382cfbcc285887), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JAG 0.4)" )
-GAME_CUSTOM( 199?, m4jpgem__5, m4jpgem, "jagb.p1", 0x0000, 0x010000, CRC(75b9a4b6) SHA1(ecade0921cd535ee7f1b67767fa7d5ab3cd45b2c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JAG 0.4B)" )
-GAME_CUSTOM( 199?, m4jpgem__6, m4jpgem, "jagd.p1", 0x0000, 0x010000, CRC(c7546004) SHA1(31bdbd6b681a3a2b13f380f2807691c0b0fec83e), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 34)" )
-GAME_CUSTOM( 199?, m4jpgem__7, m4jpgem, "jagdk.p1", 0x0000, 0x010000, CRC(313f7a1f) SHA1(358a33878ca70f2bcdb1d5d79c39e357586ebe8b), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 35)" )
-GAME_CUSTOM( 199?, m4jpgem__8, m4jpgem, "jagdy.p1", 0x0000, 0x010000, CRC(d105a41e) SHA1(365e382683362c815461801753fb03e2f084de65), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 36)" )
-GAME_CUSTOM( 199?, m4jpgem__aa, m4jpgem, "jagy.p1", 0x0000, 0x010000, CRC(08d510ca) SHA1(b79c9fe8dc17152f3e8c601c27515beff1d67219), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 38)" )
+GAME_CUSTOM( 199?, m4jpgem__5, m4jpgem, "jagb.p1", 0x0000, 0x010000, CRC(75b9a4b6) SHA1(ecade0921cd535ee7f1b67767fa7d5ab3cd45b2c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JAG 0.4 B)" )
+GAME_CUSTOM( 199?, m4jpgem__6, m4jpgem, "jagd.p1", 0x0000, 0x010000, CRC(c7546004) SHA1(31bdbd6b681a3a2b13f380f2807691c0b0fec83e), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JAG 0.4 D)" )
+GAME_CUSTOM( 199?, m4jpgem__7, m4jpgem, "jagdk.p1", 0x0000, 0x010000, CRC(313f7a1f) SHA1(358a33878ca70f2bcdb1d5d79c39e357586ebe8b), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JAG 0.4 KD)" )
+GAME_CUSTOM( 199?, m4jpgem__8, m4jpgem, "jagdy.p1", 0x0000, 0x010000, CRC(d105a41e) SHA1(365e382683362c815461801753fb03e2f084de65), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JAG 0.4 YD)" )
+GAME_CUSTOM( 199?, m4jpgem__aa, m4jpgem, "jagy.p1", 0x0000, 0x010000, CRC(08d510ca) SHA1(b79c9fe8dc17152f3e8c601c27515beff1d67219), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JAG 0.4 Y)" )
// "(C)1991 BARCREST" and "JG3 0.1"
GAME_CUSTOM( 199?, m4jpgem__ai, m4jpgem, "jg3s.p1", 0x0000, 0x010000, CRC(91945adc) SHA1(d80321fc4c2e67461d69df2164e3e290caa905bc), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1)" )
-GAME_CUSTOM( 199?, m4jpgem__ab, m4jpgem, "jg3ad.p1", 0x0000, 0x010000, CRC(501bb879) SHA1(a97519042b4a4ed03efbcad9f11f279184dec847), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1AD)" )
-GAME_CUSTOM( 199?, m4jpgem__ac, m4jpgem, "jg3b.p1", 0x0000, 0x010000, CRC(e568ae84) SHA1(9126f9b45633e7eb44626aa0ab40784c62870c8a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 40)" )
-GAME_CUSTOM( 199?, m4jpgem__ad, m4jpgem, "jg3bd.p1", 0x0000, 0x010000, CRC(435d5d28) SHA1(1ea48323f48edc20ce1c28e4e7080e0824e73d3c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 41)" )
-GAME_CUSTOM( 199?, m4jpgem__ae, m4jpgem, "jg3d.p1", 0x0000, 0x010000, CRC(774f9d41) SHA1(c99e9a46b1216f430007b5ebbf942899b5e691f9), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 42)" )
-GAME_CUSTOM( 199?, m4jpgem__af, m4jpgem, "jg3dk.p1", 0x0000, 0x010000, CRC(c422e514) SHA1(172b25bf75a529b555e328cef77a3340609d818b), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 43)" )
-GAME_CUSTOM( 199?, m4jpgem__ag, m4jpgem, "jg3dy.p1", 0x0000, 0x010000, CRC(5d1c886f) SHA1(b49ab97ba6cdc810e7baa520ffad25f54c0d8412), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 44)" )
-GAME_CUSTOM( 199?, m4jpgem__ah, m4jpgem, "jg3k.p1", 0x0000, 0x010000, CRC(8e7985ae) SHA1(8c8de22aab2508b2317d5edde779d54ebe67ac92), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 45)" )
-GAME_CUSTOM( 199?, m4jpgem__aj, m4jpgem, "jg3y.p1", 0x0000, 0x010000, CRC(bf96ad55) SHA1(48d828398f32c3ddfafeb84cfd777f8e668df1b3), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 47)" )
+GAME_CUSTOM( 199?, m4jpgem__ab, m4jpgem, "jg3ad.p1", 0x0000, 0x010000, CRC(501bb879) SHA1(a97519042b4a4ed03efbcad9f11f279184dec847), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 AD)" )
+GAME_CUSTOM( 199?, m4jpgem__ac, m4jpgem, "jg3b.p1", 0x0000, 0x010000, CRC(e568ae84) SHA1(9126f9b45633e7eb44626aa0ab40784c62870c8a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 B)" )
+GAME_CUSTOM( 199?, m4jpgem__ad, m4jpgem, "jg3bd.p1", 0x0000, 0x010000, CRC(435d5d28) SHA1(1ea48323f48edc20ce1c28e4e7080e0824e73d3c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 BD)" )
+GAME_CUSTOM( 199?, m4jpgem__ae, m4jpgem, "jg3d.p1", 0x0000, 0x010000, CRC(774f9d41) SHA1(c99e9a46b1216f430007b5ebbf942899b5e691f9), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 D)" )
+GAME_CUSTOM( 199?, m4jpgem__af, m4jpgem, "jg3dk.p1", 0x0000, 0x010000, CRC(c422e514) SHA1(172b25bf75a529b555e328cef77a3340609d818b), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 KD)" )
+GAME_CUSTOM( 199?, m4jpgem__ag, m4jpgem, "jg3dy.p1", 0x0000, 0x010000, CRC(5d1c886f) SHA1(b49ab97ba6cdc810e7baa520ffad25f54c0d8412), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 YD)" )
+GAME_CUSTOM( 199?, m4jpgem__ah, m4jpgem, "jg3k.p1", 0x0000, 0x010000, CRC(8e7985ae) SHA1(8c8de22aab2508b2317d5edde779d54ebe67ac92), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 K)" )
+GAME_CUSTOM( 199?, m4jpgem__aj, m4jpgem, "jg3y.p1", 0x0000, 0x010000, CRC(bf96ad55) SHA1(48d828398f32c3ddfafeb84cfd777f8e668df1b3), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 Y)" )
// "(C)1991 BARCREST" and "JG8 0.1"
GAME_CUSTOM( 199?, m4jpgem__ar, m4jpgem, "jg8s.p1", 0x0000, 0x010000, CRC(8cdd650a) SHA1(c4cb87513f0d7986e158b3c5ab1f034c8ba933a9), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1)" )
-GAME_CUSTOM( 199?, m4jpgem__ak, m4jpgem, "jg8b.p1", 0x0000, 0x010000, CRC(f2e3d009) SHA1(90c85f9a300d157d560b08ccabfe79f826780d74), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1B)" )
-GAME_CUSTOM( 199?, m4jpgem__al, m4jpgem, "jg8c.p1", 0x0000, 0x010000, CRC(cc24cf15) SHA1(0c4c28633f33c78570f5da17c64c2e90bf3d5cd0), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 49)" )
-GAME_CUSTOM( 199?, m4jpgem__am, m4jpgem, "jg8d.p1", 0x0000, 0x010000, CRC(58eff94c) SHA1(9acde535ad808789233876dd8076c03a8d56a9e7), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 50)" )
-GAME_CUSTOM( 199?, m4jpgem__an, m4jpgem, "jg8db.p1", 0x0000, 0x010000, CRC(3006a36a) SHA1(37297cae02c1fd5308ba9935537b35c565374a07), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 51)" )
-GAME_CUSTOM( 199?, m4jpgem__ao, m4jpgem, "jg8dk.p1", 0x0000, 0x010000, CRC(199401d7) SHA1(33eef070e437386c7ad0d834b40353047f1a6a6f), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 52)" )
-GAME_CUSTOM( 199?, m4jpgem__ap, m4jpgem, "jg8dy.p1", 0x0000, 0x010000, CRC(ead58bed) SHA1(cd0e151c843f5268edddb2f82555201deccac65a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 53)" )
-GAME_CUSTOM( 199?, m4jpgem__aq, m4jpgem, "jg8k.p1", 0x0000, 0x010000, CRC(f5b14363) SHA1(f0ace838cc0d0c262006bb514eff75903d92d679), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 54)" )
+GAME_CUSTOM( 199?, m4jpgem__ak, m4jpgem, "jg8b.p1", 0x0000, 0x010000, CRC(f2e3d009) SHA1(90c85f9a300d157d560b08ccabfe79f826780d74), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 B)" )
+GAME_CUSTOM( 199?, m4jpgem__al, m4jpgem, "jg8c.p1", 0x0000, 0x010000, CRC(cc24cf15) SHA1(0c4c28633f33c78570f5da17c64c2e90bf3d5cd0), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 C)" )
+GAME_CUSTOM( 199?, m4jpgem__am, m4jpgem, "jg8d.p1", 0x0000, 0x010000, CRC(58eff94c) SHA1(9acde535ad808789233876dd8076c03a8d56a9e7), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 D)" )
+GAME_CUSTOM( 199?, m4jpgem__an, m4jpgem, "jg8db.p1", 0x0000, 0x010000, CRC(3006a36a) SHA1(37297cae02c1fd5308ba9935537b35c565374a07), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 BD)" )
+GAME_CUSTOM( 199?, m4jpgem__ao, m4jpgem, "jg8dk.p1", 0x0000, 0x010000, CRC(199401d7) SHA1(33eef070e437386c7ad0d834b40353047f1a6a6f), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 KD)" )
+GAME_CUSTOM( 199?, m4jpgem__ap, m4jpgem, "jg8dy.p1", 0x0000, 0x010000, CRC(ead58bed) SHA1(cd0e151c843f5268edddb2f82555201deccac65a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 YD)" )
+GAME_CUSTOM( 199?, m4jpgem__aq, m4jpgem, "jg8k.p1", 0x0000, 0x010000, CRC(f5b14363) SHA1(f0ace838cc0d0c262006bb514eff75903d92d679), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 K)" )
// "(C)1991 BARCREST" and "JGT 0.3"
GAME_CUSTOM( 199?, m4jpgem__a1, m4jpgem, "jgts.p1", 0x0000, 0x010000, CRC(0e3810a7) SHA1(cf840bd84eba65d9dec2d6821a48112b6f2f9bca), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3)" )
-GAME_CUSTOM( 199?, m4jpgem__as, m4jpgem, "jgtad.p1", 0x0000, 0x010000, CRC(90e10b6c) SHA1(548c7537829ca9395cac460ccf76e0d566898e44), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3AD)" )
-GAME_CUSTOM( 199?, m4jpgem__at, m4jpgem, "jgtb.p1", 0x0000, 0x010000, CRC(5f343a43) SHA1(033824e93b1fcd2f7c5f27a573a728747ef7b21a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 57)" )
-GAME_CUSTOM( 199?, m4jpgem__au, m4jpgem, "jgtbd.p1", 0x0000, 0x010000, CRC(50ba2771) SHA1(f487ed2eeff0369e3fa718de68e3ba4912fd7576), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 58)" )
-GAME_CUSTOM( 199?, m4jpgem__av, m4jpgem, "jgtd.p1", 0x0000, 0x010000, CRC(2625da4a) SHA1(b1f9d22a46bf20283c5735fce5768d9cef299f59), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 59)" )
-GAME_CUSTOM( 199?, m4jpgem__aw, m4jpgem, "jgtdk.p1", 0x0000, 0x010000, CRC(94220901) SHA1(f62c9a59bb419e98f7de358f7fee072b08aab3f5), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 60)" )
-GAME_CUSTOM( 199?, m4jpgem__ax, m4jpgem, "jgtdr.p1", 0x0000, 0x010000, CRC(5011d1e3) SHA1(85e5d28d26449a951704698a4419cd2c0f7dd9c4), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 61)" )
-GAME_CUSTOM( 199?, m4jpgem__ay, m4jpgem, "jgtdy.p1", 0x0000, 0x010000, CRC(6397e38c) SHA1(ed0c165a5ab27524374c540fd9bdcfd41ce8096c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 62)" )
-GAME_CUSTOM( 199?, m4jpgem__az, m4jpgem, "jgtk.p1", 0x0000, 0x010000, CRC(cb30d644) SHA1(751fc5c7ae07e64c07a3e89e74ace09dd2b99a02), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 63)" )
-GAME_CUSTOM( 199?, m4jpgem__a0, m4jpgem, "jgtr.p1", 0x0000, 0x010000, CRC(6224a93d) SHA1(6d36b64c2eaddf122a6a7e798b5efb44ec2e5b45), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 64)" )
-GAME_CUSTOM( 199?, m4jpgem__a2, m4jpgem, "jgty.p1", 0x0000, 0x010000, CRC(84830d1f) SHA1(a4184a5bd08393c35f22bc05315377bff74f666c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 66)" )
+GAME_CUSTOM( 199?, m4jpgem__as, m4jpgem, "jgtad.p1", 0x0000, 0x010000, CRC(90e10b6c) SHA1(548c7537829ca9395cac460ccf76e0d566898e44), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 AD)" )
+GAME_CUSTOM( 199?, m4jpgem__at, m4jpgem, "jgtb.p1", 0x0000, 0x010000, CRC(5f343a43) SHA1(033824e93b1fcd2f7c5f27a573a728747ef7b21a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 B)" )
+GAME_CUSTOM( 199?, m4jpgem__au, m4jpgem, "jgtbd.p1", 0x0000, 0x010000, CRC(50ba2771) SHA1(f487ed2eeff0369e3fa718de68e3ba4912fd7576), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 BD)" )
+GAME_CUSTOM( 199?, m4jpgem__av, m4jpgem, "jgtd.p1", 0x0000, 0x010000, CRC(2625da4a) SHA1(b1f9d22a46bf20283c5735fce5768d9cef299f59), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 D)" )
+GAME_CUSTOM( 199?, m4jpgem__aw, m4jpgem, "jgtdk.p1", 0x0000, 0x010000, CRC(94220901) SHA1(f62c9a59bb419e98f7de358f7fee072b08aab3f5), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 KD)" )
+GAME_CUSTOM( 199?, m4jpgem__ax, m4jpgem, "jgtdr.p1", 0x0000, 0x010000, CRC(5011d1e3) SHA1(85e5d28d26449a951704698a4419cd2c0f7dd9c4), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 RD)" )
+GAME_CUSTOM( 199?, m4jpgem__ay, m4jpgem, "jgtdy.p1", 0x0000, 0x010000, CRC(6397e38c) SHA1(ed0c165a5ab27524374c540fd9bdcfd41ce8096c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 YD)" )
+GAME_CUSTOM( 199?, m4jpgem__az, m4jpgem, "jgtk.p1", 0x0000, 0x010000, CRC(cb30d644) SHA1(751fc5c7ae07e64c07a3e89e74ace09dd2b99a02), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 K)" )
+GAME_CUSTOM( 199?, m4jpgem__a0, m4jpgem, "jgtr.p1", 0x0000, 0x010000, CRC(6224a93d) SHA1(6d36b64c2eaddf122a6a7e798b5efb44ec2e5b45), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 R)" )
+GAME_CUSTOM( 199?, m4jpgem__a2, m4jpgem, "jgty.p1", 0x0000, 0x010000, CRC(84830d1f) SHA1(a4184a5bd08393c35f22bc05315377bff74f666c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 Y)" )
// "(C)1991 BARCREST" and "JGU 0.2"
GAME_CUSTOM( 199?, m4jpgem__bc, m4jpgem, "jgu02s.p1", 0x0000, 0x010000, CRC(f8abd287) SHA1(906d2817f73ea21cf830b0bd9a1938d344cc0341), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2)" )
-GAME_CUSTOM( 199?, m4jpgem__a3, m4jpgem, "jgu02ad.p1", 0x0000, 0x010000, CRC(ccec7d40) SHA1(75cc1a0dfda9592e35c24c030e04a768871a9e41), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2AD)" )
-GAME_CUSTOM( 199?, m4jpgem__a4, m4jpgem, "jgu02b.p1", 0x0000, 0x010000, CRC(daf0ebe3) SHA1(2e73f7b8171c0be7d06bf6da22e0395d5241b043), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 68)" )
-GAME_CUSTOM( 199?, m4jpgem__a5, m4jpgem, "jgu02bd.p1", 0x0000, 0x010000, CRC(faf0100a) SHA1(c97b8eadfd473650ec497c7caa98e8efc59ecb6f), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 69)" )
-GAME_CUSTOM( 199?, m4jpgem__a6, m4jpgem, "jgu02d.p1", 0x0000, 0x010000, CRC(b46e3f66) SHA1(1ede9d794effbc8cc9f097a06b7df4023d3d47ba), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 70)" )
-GAME_CUSTOM( 199?, m4jpgem__a7, m4jpgem, "jgu02dk.p1", 0x0000, 0x010000, CRC(cdbf0041) SHA1(fb90d4f8112e169dab16f78fdea9d1b5306e05d6), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 71)" )
-GAME_CUSTOM( 199?, m4jpgem__a8, m4jpgem, "jgu02dr.p1", 0x0000, 0x010000, CRC(41f1f723) SHA1(96623358e6dc450dbdc769d176703917f67e767a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 72)" )
-GAME_CUSTOM( 199?, m4jpgem__a9, m4jpgem, "jgu02dy.p1", 0x0000, 0x010000, CRC(2023388d) SHA1(c9f1abaa12c78ac61304966b46044b82ea2ea3ff), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 73)" )
-GAME_CUSTOM( 199?, m4jpgem__ba, m4jpgem, "jgu02k.p1", 0x0000, 0x010000, CRC(615029e8) SHA1(aecba0fad8c74fef9a4d04e95df961432ac999b7), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 74)" )
-GAME_CUSTOM( 199?, m4jpgem__bb, m4jpgem, "jgu02r.p1", 0x0000, 0x010000, CRC(4bc55daa) SHA1(996f23bd66a4ef6ad8f77a28dc6ee67d9a293248), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 75)" )
-GAME_CUSTOM( 199?, m4jpgem__bd, m4jpgem, "jgu02y.p1", 0x0000, 0x010000, CRC(9b4325a8) SHA1(3d7c54691ed4d596acacec97e452a66b324957db), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 77)" )
+GAME_CUSTOM( 199?, m4jpgem__a3, m4jpgem, "jgu02ad.p1", 0x0000, 0x010000, CRC(ccec7d40) SHA1(75cc1a0dfda9592e35c24c030e04a768871a9e41), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 AD)" )
+GAME_CUSTOM( 199?, m4jpgem__a4, m4jpgem, "jgu02b.p1", 0x0000, 0x010000, CRC(daf0ebe3) SHA1(2e73f7b8171c0be7d06bf6da22e0395d5241b043), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 B)" )
+GAME_CUSTOM( 199?, m4jpgem__a5, m4jpgem, "jgu02bd.p1", 0x0000, 0x010000, CRC(faf0100a) SHA1(c97b8eadfd473650ec497c7caa98e8efc59ecb6f), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 BD)" )
+GAME_CUSTOM( 199?, m4jpgem__a6, m4jpgem, "jgu02d.p1", 0x0000, 0x010000, CRC(b46e3f66) SHA1(1ede9d794effbc8cc9f097a06b7df4023d3d47ba), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 D)" )
+GAME_CUSTOM( 199?, m4jpgem__a7, m4jpgem, "jgu02dk.p1", 0x0000, 0x010000, CRC(cdbf0041) SHA1(fb90d4f8112e169dab16f78fdea9d1b5306e05d6), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 KD)" )
+GAME_CUSTOM( 199?, m4jpgem__a8, m4jpgem, "jgu02dr.p1", 0x0000, 0x010000, CRC(41f1f723) SHA1(96623358e6dc450dbdc769d176703917f67e767a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 RD)" )
+GAME_CUSTOM( 199?, m4jpgem__a9, m4jpgem, "jgu02dy.p1", 0x0000, 0x010000, CRC(2023388d) SHA1(c9f1abaa12c78ac61304966b46044b82ea2ea3ff), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 YD)" )
+GAME_CUSTOM( 199?, m4jpgem__ba, m4jpgem, "jgu02k.p1", 0x0000, 0x010000, CRC(615029e8) SHA1(aecba0fad8c74fef9a4d04e95df961432ac999b7), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 K)" )
+GAME_CUSTOM( 199?, m4jpgem__bb, m4jpgem, "jgu02r.p1", 0x0000, 0x010000, CRC(4bc55daa) SHA1(996f23bd66a4ef6ad8f77a28dc6ee67d9a293248), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 R)" )
+GAME_CUSTOM( 199?, m4jpgem__bd, m4jpgem, "jgu02y.p1", 0x0000, 0x010000, CRC(9b4325a8) SHA1(3d7c54691ed4d596acacec97e452a66b324957db), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 Y)" )
#define M4JPGEMC_EXTRA_ROMS \
ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \
@@ -1393,30 +1393,30 @@ GAME_CUSTOM( 199?, m4jpgem__bd, m4jpgem, "jgu02y.p1", 0x0000, 0x010000, CR
// "(C)1991 BARCREST" and "CG4 0.1" (startup shows GTC)
GAME_CUSTOM( 199?, m4jpgemc, 0, "gtc01s.p1", 0x0000, 0x010000, CRC(af33337b) SHA1(97d28e224b73baa9d6d7b0c309385f57b6dd5d9b), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 / CG4 0.1)" )
-GAME_CUSTOM( 199?, m4jpgemc__j, m4jpgemc, "gtc01ad.p1", 0x0000, 0x010000, CRC(e4f61afd) SHA1(36e007275cce0565c50b150dba4c8df272cd4c2e), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1AD / CG4 0.1)" )
-GAME_CUSTOM( 199?, m4jpgemc__a, m4jpgemc, "gtc01b.p1", 0x0000, 0x010000, CRC(e4e27c71) SHA1(b46da3f00134d3a2f17ceb35529adb598c75ee4e), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 2)" )
-GAME_CUSTOM( 199?, m4jpgemc__b, m4jpgemc, "gtc01bd.p1", 0x0000, 0x010000, CRC(d2ea77b7) SHA1(4f66fa8d692f26ffa92ae3aff4f43257fc573e93), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 3)" )
-GAME_CUSTOM( 199?, m4jpgemc__c, m4jpgemc, "gtc01c.p1", 0x0000, 0x010000, CRC(21c4c4f7) SHA1(f8a2de8453c095db80ff19018a72b15b949bace9), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 4)" )
-GAME_CUSTOM( 199?, m4jpgemc__d, m4jpgemc, "gtc01d.p1", 0x0000, 0x010000, CRC(b6a3d2c3) SHA1(48cbd3cf14b8f8e9ecbee1f351e781506ca6c17f), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 5)" )
-GAME_CUSTOM( 199?, m4jpgemc__e, m4jpgemc, "gtc01dk.p1", 0x0000, 0x010000, CRC(70cf4790) SHA1(b6aac10fd9ad3aafa277e6de58db3f1a28501529), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4jpgemc__f, m4jpgemc, "gtc01dr.p1", 0x0000, 0x010000, CRC(4cb11885) SHA1(288da6617868f7d082fc72f50c13671fdaf9442a), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 7)" )
-GAME_CUSTOM( 199?, m4jpgemc__g, m4jpgemc, "gtc01dy.p1", 0x0000, 0x010000, CRC(713dec4a) SHA1(3cb1e3f5299a5145addaa677022e7d9a164072d9), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 8)" )
-GAME_CUSTOM( 199?, m4jpgemc__h, m4jpgemc, "gtc01k.p1", 0x0000, 0x010000, CRC(fb5102ec) SHA1(36c9c50c8266707542b00cfc55f57ec454401f70), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 9)" )
-GAME_CUSTOM( 199?, m4jpgemc__i, m4jpgemc, "gtc01r.p1", 0x0000, 0x010000, CRC(e311ca39) SHA1(602aee41400793f46f47ac9c8a9e6ce7f2d5f203), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 10)" )
-GAME_CUSTOM( 199?, m4jpgemc__k, m4jpgemc, "gtc01y.p1", 0x0000, 0x010000, CRC(59e8557a) SHA1(8493b160427c21bbb2834c01b39f8a6a8b221bb3), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 12)" )
+GAME_CUSTOM( 199?, m4jpgemc__j, m4jpgemc, "gtc01ad.p1", 0x0000, 0x010000, CRC(e4f61afd) SHA1(36e007275cce0565c50b150dba4c8df272cd4c2e), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 AD / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__a, m4jpgemc, "gtc01b.p1", 0x0000, 0x010000, CRC(e4e27c71) SHA1(b46da3f00134d3a2f17ceb35529adb598c75ee4e), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 B / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__b, m4jpgemc, "gtc01bd.p1", 0x0000, 0x010000, CRC(d2ea77b7) SHA1(4f66fa8d692f26ffa92ae3aff4f43257fc573e93), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 BD / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__c, m4jpgemc, "gtc01c.p1", 0x0000, 0x010000, CRC(21c4c4f7) SHA1(f8a2de8453c095db80ff19018a72b15b949bace9), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 C / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__d, m4jpgemc, "gtc01d.p1", 0x0000, 0x010000, CRC(b6a3d2c3) SHA1(48cbd3cf14b8f8e9ecbee1f351e781506ca6c17f), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 D / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__e, m4jpgemc, "gtc01dk.p1", 0x0000, 0x010000, CRC(70cf4790) SHA1(b6aac10fd9ad3aafa277e6de58db3f1a28501529), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 KD / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__f, m4jpgemc, "gtc01dr.p1", 0x0000, 0x010000, CRC(4cb11885) SHA1(288da6617868f7d082fc72f50c13671fdaf9442a), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 RD / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__g, m4jpgemc, "gtc01dy.p1", 0x0000, 0x010000, CRC(713dec4a) SHA1(3cb1e3f5299a5145addaa677022e7d9a164072d9), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 YD / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__h, m4jpgemc, "gtc01k.p1", 0x0000, 0x010000, CRC(fb5102ec) SHA1(36c9c50c8266707542b00cfc55f57ec454401f70), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 K / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__i, m4jpgemc, "gtc01r.p1", 0x0000, 0x010000, CRC(e311ca39) SHA1(602aee41400793f46f47ac9c8a9e6ce7f2d5f203), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 R / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__k, m4jpgemc, "gtc01y.p1", 0x0000, 0x010000, CRC(59e8557a) SHA1(8493b160427c21bbb2834c01b39f8a6a8b221bb3), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 Y / CG4 0.1)" )
// "(C)1991 BARCREST" and "CG4 0.1" (startup shows HGE)
GAME_CUSTOM( 199?, m4jpgemc__v, m4jpgemc, "hge01s.p1", 0x0000, 0x010000, CRC(b79f8c42) SHA1(7d8b3352fbd9a80b86f5a8b22833d6f5c4b9854b), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 / CG4 0.1)" )
-GAME_CUSTOM( 199?, m4jpgemc__l, m4jpgemc, "hge01ad.p1", 0x0000, 0x010000, CRC(bb201074) SHA1(eb954d165c2d96f952439277d255e3ec3326ada3), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1AD / CG4 0.1)" )
-GAME_CUSTOM( 199?, m4jpgemc__m, m4jpgemc, "hge01b.p1", 0x0000, 0x010000, CRC(d7ad2482) SHA1(ed90c4531608e66b14eb1079e85ea59573adf451), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 14)" )
-GAME_CUSTOM( 199?, m4jpgemc__n, m4jpgemc, "hge01bd.p1", 0x0000, 0x010000, CRC(3ea0f524) SHA1(1967e5ec14c41c4140c7c39b07085f740c2d1f01), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 15)" )
-GAME_CUSTOM( 199?, m4jpgemc__o, m4jpgemc, "hge01c.p1", 0x0000, 0x010000, CRC(498de7bf) SHA1(32dc31852fa69f7d2dd47bbcef695fcf5337f01f), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 16)" )
-GAME_CUSTOM( 199?, m4jpgemc__p, m4jpgemc, "hge01d.p1", 0x0000, 0x010000, CRC(be6bb0dd) SHA1(3a0550608c8738b92b48b7a12fb43fb82f52cdd7), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 17)" )
-GAME_CUSTOM( 199?, m4jpgemc__q, m4jpgemc, "hge01dk.p1", 0x0000, 0x010000, CRC(80904843) SHA1(8030def4c0e80ac8f28452662487dbfc21a761ee), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 18)" )
-GAME_CUSTOM( 199?, m4jpgemc__r, m4jpgemc, "hge01dr.p1", 0x0000, 0x010000, CRC(d89b36b7) SHA1(22c334f1aa314ff288c65eb01ad0415db8e05b15), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 19)" )
-GAME_CUSTOM( 199?, m4jpgemc__s, m4jpgemc, "hge01dy.p1", 0x0000, 0x010000, CRC(18ca3ae3) SHA1(ebb434a060564d3a1bc51876257729650e2903a6), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 20)" )
-GAME_CUSTOM( 199?, m4jpgemc__t, m4jpgemc, "hge01k.p1", 0x0000, 0x010000, CRC(4161f733) SHA1(b551bb278666790f0c293c76d5c3fabf8f4d368e), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 21)" )
-GAME_CUSTOM( 199?, m4jpgemc__u, m4jpgemc, "hge01r.p1", 0x0000, 0x010000, CRC(6dc8dc70) SHA1(e96fc4284ece65f76d5e9bd06c4a002de65bf4da), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 22)" )
-GAME_CUSTOM( 199?, m4jpgemc__w, m4jpgemc, "hge01y.p1", 0x0000, 0x010000, CRC(a96db093) SHA1(17520306112cee6f082829811e1f8c432c6aa354), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 24)" )
+GAME_CUSTOM( 199?, m4jpgemc__l, m4jpgemc, "hge01ad.p1", 0x0000, 0x010000, CRC(bb201074) SHA1(eb954d165c2d96f952439277d255e3ec3326ada3), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 AD / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__m, m4jpgemc, "hge01b.p1", 0x0000, 0x010000, CRC(d7ad2482) SHA1(ed90c4531608e66b14eb1079e85ea59573adf451), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 B / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__n, m4jpgemc, "hge01bd.p1", 0x0000, 0x010000, CRC(3ea0f524) SHA1(1967e5ec14c41c4140c7c39b07085f740c2d1f01), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 BD / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__o, m4jpgemc, "hge01c.p1", 0x0000, 0x010000, CRC(498de7bf) SHA1(32dc31852fa69f7d2dd47bbcef695fcf5337f01f), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 C / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__p, m4jpgemc, "hge01d.p1", 0x0000, 0x010000, CRC(be6bb0dd) SHA1(3a0550608c8738b92b48b7a12fb43fb82f52cdd7), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 D / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__q, m4jpgemc, "hge01dk.p1", 0x0000, 0x010000, CRC(80904843) SHA1(8030def4c0e80ac8f28452662487dbfc21a761ee), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 KD / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__r, m4jpgemc, "hge01dr.p1", 0x0000, 0x010000, CRC(d89b36b7) SHA1(22c334f1aa314ff288c65eb01ad0415db8e05b15), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 RD / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__s, m4jpgemc, "hge01dy.p1", 0x0000, 0x010000, CRC(18ca3ae3) SHA1(ebb434a060564d3a1bc51876257729650e2903a6), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 YD / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__t, m4jpgemc, "hge01k.p1", 0x0000, 0x010000, CRC(4161f733) SHA1(b551bb278666790f0c293c76d5c3fabf8f4d368e), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 K / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__u, m4jpgemc, "hge01r.p1", 0x0000, 0x010000, CRC(6dc8dc70) SHA1(e96fc4284ece65f76d5e9bd06c4a002de65bf4da), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 R / CG4 0.1)" )
+GAME_CUSTOM( 199?, m4jpgemc__w, m4jpgemc, "hge01y.p1", 0x0000, 0x010000, CRC(a96db093) SHA1(17520306112cee6f082829811e1f8c432c6aa354), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 Y / CG4 0.1)" )
#define M4JOLGEM_EXTRA_ROMS \
@@ -1436,64 +1436,64 @@ GAME_CUSTOM( 199?, m4jpgemc__w, m4jpgemc, "hge01y.p1", 0x0000, 0x010000,
GAME(year, setname, parent ,mod4oki ,mpu4 , mpu4_state,m4_showstring_big ,ROT0,company,title,GAME_FLAGS )
-// "(C)1993 BARCREST" and "GEM 0.7"
+// "(C)1993 BARCREST" and "GEM 0.7" // yes, the 'type' bytes are in a different order here, with D coming before the others
GAME_CUSTOM( 199?, m4jolgem, 0, "gem07s.p1", 0x0000, 0x020000, CRC(945ad0d2) SHA1(d636bc41a4f887d24affc0f5b644c5d5351cf0df), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7)" )
-GAME_CUSTOM( 199?, m4jolgem__m, m4jolgem, "gem07ad.p1", 0x0000, 0x020000, CRC(21496739) SHA1(05771636542275ecae1cd45bc248ed104a422f03), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 14)" )
-GAME_CUSTOM( 199?, m4jolgem__n, m4jolgem, "gem07b.p1", 0x0000, 0x020000, CRC(70ca3435) SHA1(ff631f9adea268c1160646bacca976c069751ba8), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 15)" )
-GAME_CUSTOM( 199?, m4jolgem__o, m4jolgem, "gem07bd.p1", 0x0000, 0x020000, CRC(cf750422) SHA1(01c275c90f33afe4cd54c1b9c4963b6c5e66596b), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 16)" )
-GAME_CUSTOM( 199?, m4jolgem__p, m4jolgem, "gem07d.p1", 0x0000, 0x020000, CRC(dec87143) SHA1(080483f5500bedac6dfbd252d2ac42e23c1b5ac5), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 17)" )
-GAME_CUSTOM( 199?, m4jolgem__q, m4jolgem, "gem07dh.p1", 0x0000, 0x020000, CRC(8fc03bb7) SHA1(dc240714d59f9055ce9c098f7cd60f06a92a0a28), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 18)" )
-GAME_CUSTOM( 199?, m4jolgem__r, m4jolgem, "gem07dr.p1", 0x0000, 0x020000, CRC(559bda9b) SHA1(91ec97aab73717eb401672ca4e4b58a87a71f099), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 19)" )
-GAME_CUSTOM( 199?, m4jolgem__s, m4jolgem, "gem07dy.p1", 0x0000, 0x020000, CRC(9b1974ee) SHA1(7d6b7ee79ac4401d7e65aa2240ea01cad26eb881), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 20)" )
-GAME_CUSTOM( 199?, m4jolgem__t, m4jolgem, "gem07h.p1", 0x0000, 0x020000, CRC(307f0ba0) SHA1(518acd033599b188e972e51753ac610623038aca), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 21)" )
-GAME_CUSTOM( 199?, m4jolgem__u, m4jolgem, "gem07r.p1", 0x0000, 0x020000, CRC(ea24ea8c) SHA1(8d3598e44d219f1d66b63bf3ca4062eb84ecbe60), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 22)" )
-GAME_CUSTOM( 199?, m4jolgem__v, m4jolgem, "gem07y.p1", 0x0000, 0x020000, CRC(24a644f9) SHA1(b97b83ce0ebf315529efe6d5be051ad71f2e648a), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 23)" )
+GAME_CUSTOM( 199?, m4jolgem__m, m4jolgem, "gem07ad.p1", 0x0000, 0x020000, CRC(21496739) SHA1(05771636542275ecae1cd45bc248ed104a422f03), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 DA)" )
+GAME_CUSTOM( 199?, m4jolgem__n, m4jolgem, "gem07b.p1", 0x0000, 0x020000, CRC(70ca3435) SHA1(ff631f9adea268c1160646bacca976c069751ba8), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 B)" )
+GAME_CUSTOM( 199?, m4jolgem__o, m4jolgem, "gem07bd.p1", 0x0000, 0x020000, CRC(cf750422) SHA1(01c275c90f33afe4cd54c1b9c4963b6c5e66596b), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 DB)" )
+GAME_CUSTOM( 199?, m4jolgem__p, m4jolgem, "gem07d.p1", 0x0000, 0x020000, CRC(dec87143) SHA1(080483f5500bedac6dfbd252d2ac42e23c1b5ac5), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 D)" )
+GAME_CUSTOM( 199?, m4jolgem__q, m4jolgem, "gem07dh.p1", 0x0000, 0x020000, CRC(8fc03bb7) SHA1(dc240714d59f9055ce9c098f7cd60f06a92a0a28), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 DH)" )
+GAME_CUSTOM( 199?, m4jolgem__r, m4jolgem, "gem07dr.p1", 0x0000, 0x020000, CRC(559bda9b) SHA1(91ec97aab73717eb401672ca4e4b58a87a71f099), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 DR)" )
+GAME_CUSTOM( 199?, m4jolgem__s, m4jolgem, "gem07dy.p1", 0x0000, 0x020000, CRC(9b1974ee) SHA1(7d6b7ee79ac4401d7e65aa2240ea01cad26eb881), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 DY)" )
+GAME_CUSTOM( 199?, m4jolgem__t, m4jolgem, "gem07h.p1", 0x0000, 0x020000, CRC(307f0ba0) SHA1(518acd033599b188e972e51753ac610623038aca), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 H)" )
+GAME_CUSTOM( 199?, m4jolgem__u, m4jolgem, "gem07r.p1", 0x0000, 0x020000, CRC(ea24ea8c) SHA1(8d3598e44d219f1d66b63bf3ca4062eb84ecbe60), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 R)" )
+GAME_CUSTOM( 199?, m4jolgem__v, m4jolgem, "gem07y.p1", 0x0000, 0x020000, CRC(24a644f9) SHA1(b97b83ce0ebf315529efe6d5be051ad71f2e648a), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 Y)" )
// "(C)1993 BARCREST" and "GEM 0.5"
GAME_CUSTOM( 199?, m4jolgem__a, m4jolgem, "gem05s", 0x0000, 0x020000, CRC(b7ceafc2) SHA1(b66d846da5ff20df912d31695eaef146dbbe759e), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.5)" )
// "(C)1993 BARCREST" and "GEM 0.6"
GAME_CUSTOM( 199?, m4jolgem__k, m4jolgem, "gem06s.p1", 0x0000, 0x020000, CRC(e0d82632) SHA1(35a51394a68311d03800db671fbd634bae087e86), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6)" )
-GAME_CUSTOM( 199?, m4jolgem__b, m4jolgem, "gem06ad.p1", 0x0000, 0x020000, CRC(a3270974) SHA1(59992779415ff20b8589843510099b77c9b157fd), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 3)" )
-GAME_CUSTOM( 199?, m4jolgem__c, m4jolgem, "gem06b.p1", 0x0000, 0x020000, CRC(188ea295) SHA1(b8a2bdede4478a582f041fd3ff84b5563feaedd3), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 4)" )
-GAME_CUSTOM( 199?, m4jolgem__d, m4jolgem, "gem06bd.p1", 0x0000, 0x020000, CRC(4d1b6a6f) SHA1(6cb733b3f8e011e1d12a9aee25577e2bee7deb1a), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 5)" )
-GAME_CUSTOM( 199?, m4jolgem__e, m4jolgem, "gem06d.p1", 0x0000, 0x020000, CRC(b68ce7e3) SHA1(ec4400f7c2bb79204fdec1d061801afdd4de70f2), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4jolgem__f, m4jolgem, "gem06dh.p1", 0x0000, 0x020000, CRC(0dae55fa) SHA1(3f8a23e4efc0c059852801882865baa6654a4eb3), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 7)" )
-GAME_CUSTOM( 199?, m4jolgem__g, m4jolgem, "gem06dr.p1", 0x0000, 0x020000, CRC(d7f5b4d6) SHA1(18ff01d9f56d772863698bc72d8e9ec61a9ac9d8), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 8)" )
-GAME_CUSTOM( 199?, m4jolgem__h, m4jolgem, "gem06dy.p1", 0x0000, 0x020000, CRC(19771aa3) SHA1(e785196e55353952000d805d23502bc220b2c747), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 9)" )
-GAME_CUSTOM( 199?, m4jolgem__i, m4jolgem, "gem06h.p1", 0x0000, 0x020000, CRC(583b9d00) SHA1(6cd43f74c9d4d9d9a4b995277313049a353e6d80), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 10)" )
-GAME_CUSTOM( 199?, m4jolgem__j, m4jolgem, "gem06r.p1", 0x0000, 0x020000, CRC(82607c2c) SHA1(a30366773305aacbba96f0c211a67448dd8a2702), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 11)" )
-GAME_CUSTOM( 199?, m4jolgem__l, m4jolgem, "gem06y.p1", 0x0000, 0x020000, CRC(4ce2d259) SHA1(bca3e5f79048965bc5c0e80565bbb5ebeefeac87), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 13)" )
+GAME_CUSTOM( 199?, m4jolgem__b, m4jolgem, "gem06ad.p1", 0x0000, 0x020000, CRC(a3270974) SHA1(59992779415ff20b8589843510099b77c9b157fd), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 DA)" )
+GAME_CUSTOM( 199?, m4jolgem__c, m4jolgem, "gem06b.p1", 0x0000, 0x020000, CRC(188ea295) SHA1(b8a2bdede4478a582f041fd3ff84b5563feaedd3), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 B)" )
+GAME_CUSTOM( 199?, m4jolgem__d, m4jolgem, "gem06bd.p1", 0x0000, 0x020000, CRC(4d1b6a6f) SHA1(6cb733b3f8e011e1d12a9aee25577e2bee7deb1a), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 DB)" )
+GAME_CUSTOM( 199?, m4jolgem__e, m4jolgem, "gem06d.p1", 0x0000, 0x020000, CRC(b68ce7e3) SHA1(ec4400f7c2bb79204fdec1d061801afdd4de70f2), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 D)" )
+GAME_CUSTOM( 199?, m4jolgem__f, m4jolgem, "gem06dh.p1", 0x0000, 0x020000, CRC(0dae55fa) SHA1(3f8a23e4efc0c059852801882865baa6654a4eb3), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 DH)" )
+GAME_CUSTOM( 199?, m4jolgem__g, m4jolgem, "gem06dr.p1", 0x0000, 0x020000, CRC(d7f5b4d6) SHA1(18ff01d9f56d772863698bc72d8e9ec61a9ac9d8), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 DR)" )
+GAME_CUSTOM( 199?, m4jolgem__h, m4jolgem, "gem06dy.p1", 0x0000, 0x020000, CRC(19771aa3) SHA1(e785196e55353952000d805d23502bc220b2c747), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 DY)" )
+GAME_CUSTOM( 199?, m4jolgem__i, m4jolgem, "gem06h.p1", 0x0000, 0x020000, CRC(583b9d00) SHA1(6cd43f74c9d4d9d9a4b995277313049a353e6d80), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 H)" )
+GAME_CUSTOM( 199?, m4jolgem__j, m4jolgem, "gem06r.p1", 0x0000, 0x020000, CRC(82607c2c) SHA1(a30366773305aacbba96f0c211a67448dd8a2702), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 R)" )
+GAME_CUSTOM( 199?, m4jolgem__l, m4jolgem, "gem06y.p1", 0x0000, 0x020000, CRC(4ce2d259) SHA1(bca3e5f79048965bc5c0e80565bbb5ebeefeac87), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 Y)" )
// "(C)1993 BARCREST" and "GMS 0.4"
GAME_CUSTOM( 199?, m4jolgem__7, m4jolgem, "gms04s.p1", 0x0000, 0x020000, CRC(93f25eef) SHA1(d4bfb2787df10dd09281d33341fbf666850ac23d), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4)" )
-GAME_CUSTOM( 199?, m4jolgem__w, m4jolgem, "gms04ad.p1", 0x0000, 0x020000, CRC(afd91cf8) SHA1(43f2549d81d9a414c5e2e049fe62a6939ba48943), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 24)" )
-GAME_CUSTOM( 199?, m4jolgem__x, m4jolgem, "gms04b.p1", 0x0000, 0x020000, CRC(a11cd9fd) SHA1(16b23c8091da2ada9823f204e7cd5f02b68d37c3), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 25)" )
-GAME_CUSTOM( 199?, m4jolgem__y, m4jolgem, "gms04bd.p1", 0x0000, 0x020000, CRC(41e57fe3) SHA1(77322a0988422df6feb5f6871758fbdcf410dae5), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 26)" )
-GAME_CUSTOM( 199?, m4jolgem__z, m4jolgem, "gms04d.p1", 0x0000, 0x020000, CRC(0f1e9c8b) SHA1(39661143619230ae64c70ee6d6e6f553e47691a1), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 27)" )
-GAME_CUSTOM( 199?, m4jolgem__0, m4jolgem, "gms04dh.p1", 0x0000, 0x020000, CRC(01504076) SHA1(93e44465d74abdbdf5f651e0e8b96ea5b05c1597), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 28)" )
-GAME_CUSTOM( 199?, m4jolgem__1, m4jolgem, "gms04dk.p1", 0x0000, 0x020000, CRC(68041a6b) SHA1(03a246ff17001fd937d5556ff8da7165cb95b67c), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 29)" )
-GAME_CUSTOM( 199?, m4jolgem__2, m4jolgem, "gms04dr.p1", 0x0000, 0x020000, CRC(db0ba15a) SHA1(85880bf152309b4e81b066a62ace827b899236cd), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 30)" )
-GAME_CUSTOM( 199?, m4jolgem__3, m4jolgem, "gms04dy.p1", 0x0000, 0x020000, CRC(15890f2f) SHA1(760806e506d1ff406fab2e50f75428c9b9762804), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 31)" )
-GAME_CUSTOM( 199?, m4jolgem__4, m4jolgem, "gms04h.p1", 0x0000, 0x020000, CRC(e1a9e668) SHA1(8b732c52dc221934f57a369e8a20ac2df1aa562c), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 32)" )
-GAME_CUSTOM( 199?, m4jolgem__5, m4jolgem, "gms04k.p1", 0x0000, 0x020000, CRC(88fdbc75) SHA1(b1842e2f29e2f3d81c6679a407827601955f02f4), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 33)" )
-GAME_CUSTOM( 199?, m4jolgem__6, m4jolgem, "gms04r.p1", 0x0000, 0x020000, CRC(3bf20744) SHA1(9b8d1273545abbf5a7e8e0735e4f23ce024505b9), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 34)" )
-GAME_CUSTOM( 199?, m4jolgem__8, m4jolgem, "gms04y.p1", 0x0000, 0x020000, CRC(f570a931) SHA1(dd50e4626feb9a3e6f0868fa9030204c737f1567), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 36)" )
+GAME_CUSTOM( 199?, m4jolgem__w, m4jolgem, "gms04ad.p1", 0x0000, 0x020000, CRC(afd91cf8) SHA1(43f2549d81d9a414c5e2e049fe62a6939ba48943), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DA)" )
+GAME_CUSTOM( 199?, m4jolgem__x, m4jolgem, "gms04b.p1", 0x0000, 0x020000, CRC(a11cd9fd) SHA1(16b23c8091da2ada9823f204e7cd5f02b68d37c3), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 B)" )
+GAME_CUSTOM( 199?, m4jolgem__y, m4jolgem, "gms04bd.p1", 0x0000, 0x020000, CRC(41e57fe3) SHA1(77322a0988422df6feb5f6871758fbdcf410dae5), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DB)" )
+GAME_CUSTOM( 199?, m4jolgem__z, m4jolgem, "gms04d.p1", 0x0000, 0x020000, CRC(0f1e9c8b) SHA1(39661143619230ae64c70ee6d6e6f553e47691a1), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 D)" )
+GAME_CUSTOM( 199?, m4jolgem__0, m4jolgem, "gms04dh.p1", 0x0000, 0x020000, CRC(01504076) SHA1(93e44465d74abdbdf5f651e0e8b96ea5b05c1597), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DH)" )
+GAME_CUSTOM( 199?, m4jolgem__1, m4jolgem, "gms04dk.p1", 0x0000, 0x020000, CRC(68041a6b) SHA1(03a246ff17001fd937d5556ff8da7165cb95b67c), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DK)" )
+GAME_CUSTOM( 199?, m4jolgem__2, m4jolgem, "gms04dr.p1", 0x0000, 0x020000, CRC(db0ba15a) SHA1(85880bf152309b4e81b066a62ace827b899236cd), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DR)" )
+GAME_CUSTOM( 199?, m4jolgem__3, m4jolgem, "gms04dy.p1", 0x0000, 0x020000, CRC(15890f2f) SHA1(760806e506d1ff406fab2e50f75428c9b9762804), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DY)" )
+GAME_CUSTOM( 199?, m4jolgem__4, m4jolgem, "gms04h.p1", 0x0000, 0x020000, CRC(e1a9e668) SHA1(8b732c52dc221934f57a369e8a20ac2df1aa562c), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 H)" )
+GAME_CUSTOM( 199?, m4jolgem__5, m4jolgem, "gms04k.p1", 0x0000, 0x020000, CRC(88fdbc75) SHA1(b1842e2f29e2f3d81c6679a407827601955f02f4), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 K)" )
+GAME_CUSTOM( 199?, m4jolgem__6, m4jolgem, "gms04r.p1", 0x0000, 0x020000, CRC(3bf20744) SHA1(9b8d1273545abbf5a7e8e0735e4f23ce024505b9), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 R)" )
+GAME_CUSTOM( 199?, m4jolgem__8, m4jolgem, "gms04y.p1", 0x0000, 0x020000, CRC(f570a931) SHA1(dd50e4626feb9a3e6f0868fa9030204c737f1567), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 Y)" )
// "(C)1993 BARCREST" and "GMS 0.5"
GAME_CUSTOM( 199?, m4jolgem__ak, m4jolgem, "gms05s.p1", 0x0000, 0x020000, CRC(1b830e70) SHA1(eb053a629bd7854759d14acd9793f7eb545fc008), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5)" )
-GAME_CUSTOM( 199?, m4jolgem__9, m4jolgem, "gms05ad.p1", 0x0000, 0x020000, CRC(77d4829c) SHA1(45a240cc2aa3829160854274c928d20655966087), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 37)" )
-GAME_CUSTOM( 199?, m4jolgem__aa, m4jolgem, "gms05b.p1", 0x0000, 0x020000, CRC(b929f905) SHA1(028d74687f5c6443d84e84a03666278b9df8e657), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 38)" )
-GAME_CUSTOM( 199?, m4jolgem__ab, m4jolgem, "gms05bd.p1", 0x0000, 0x020000, CRC(99e8e187) SHA1(cbb8d3403e6d21fce45b05d1889d17d0355857b4), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 39)" )
-GAME_CUSTOM( 199?, m4jolgem__ac, m4jolgem, "gms05d.p1", 0x0000, 0x020000, CRC(172bbc73) SHA1(932907d70b18d25fa912fe895602b0adc52b8e6c), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 40)" )
-GAME_CUSTOM( 199?, m4jolgem__ad, m4jolgem, "gms05dh.p1", 0x0000, 0x020000, CRC(d95dde12) SHA1(e509f65b8f0575193002dd0906b1751cae9352f7), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 41)" )
-GAME_CUSTOM( 199?, m4jolgem__ae, m4jolgem, "gms05dk.p1", 0x0000, 0x020000, CRC(b009840f) SHA1(5c8f7c081e577642fc7738f7d6fc816155ffc99b), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 42)" )
-GAME_CUSTOM( 199?, m4jolgem__af, m4jolgem, "gms05dr.p1", 0x0000, 0x020000, CRC(03063f3e) SHA1(83995208d6c392eacee794c75075296d87e07b13), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 43)" )
-GAME_CUSTOM( 199?, m4jolgem__ag, m4jolgem, "gms05dy.p1", 0x0000, 0x020000, CRC(cd84914b) SHA1(8470ba93c518893771ee45190bce5f6f93df7b68), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 44)" )
-GAME_CUSTOM( 199?, m4jolgem__ah, m4jolgem, "gms05h.p1", 0x0000, 0x020000, CRC(f99cc690) SHA1(c3cf8aaf8376e9d4eff37afdd818802f9ec4fe64), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 45)" )
-GAME_CUSTOM( 199?, m4jolgem__ai, m4jolgem, "gms05k.p1", 0x0000, 0x020000, CRC(90c89c8d) SHA1(4b8e23c9a6bd85563be041d8e95175dc4c39b8e7), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 46)" )
-GAME_CUSTOM( 199?, m4jolgem__aj, m4jolgem, "gms05r.p1", 0x0000, 0x020000, CRC(23c727bc) SHA1(0187a14a789f018e6161f2ae160f82c87d03b6a8), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 47)" )
-GAME_CUSTOM( 199?, m4jolgem__al, m4jolgem, "gms05y.p1", 0x0000, 0x020000, CRC(ed4589c9) SHA1(899622c22d29c0ef05bf562176943c9749e236a2), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 49)" )
+GAME_CUSTOM( 199?, m4jolgem__9, m4jolgem, "gms05ad.p1", 0x0000, 0x020000, CRC(77d4829c) SHA1(45a240cc2aa3829160854274c928d20655966087), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DA)" )
+GAME_CUSTOM( 199?, m4jolgem__aa, m4jolgem, "gms05b.p1", 0x0000, 0x020000, CRC(b929f905) SHA1(028d74687f5c6443d84e84a03666278b9df8e657), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 B)" )
+GAME_CUSTOM( 199?, m4jolgem__ab, m4jolgem, "gms05bd.p1", 0x0000, 0x020000, CRC(99e8e187) SHA1(cbb8d3403e6d21fce45b05d1889d17d0355857b4), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DB)" )
+GAME_CUSTOM( 199?, m4jolgem__ac, m4jolgem, "gms05d.p1", 0x0000, 0x020000, CRC(172bbc73) SHA1(932907d70b18d25fa912fe895602b0adc52b8e6c), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 D)" )
+GAME_CUSTOM( 199?, m4jolgem__ad, m4jolgem, "gms05dh.p1", 0x0000, 0x020000, CRC(d95dde12) SHA1(e509f65b8f0575193002dd0906b1751cae9352f7), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DH)" )
+GAME_CUSTOM( 199?, m4jolgem__ae, m4jolgem, "gms05dk.p1", 0x0000, 0x020000, CRC(b009840f) SHA1(5c8f7c081e577642fc7738f7d6fc816155ffc99b), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DK)" )
+GAME_CUSTOM( 199?, m4jolgem__af, m4jolgem, "gms05dr.p1", 0x0000, 0x020000, CRC(03063f3e) SHA1(83995208d6c392eacee794c75075296d87e07b13), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DR)" )
+GAME_CUSTOM( 199?, m4jolgem__ag, m4jolgem, "gms05dy.p1", 0x0000, 0x020000, CRC(cd84914b) SHA1(8470ba93c518893771ee45190bce5f6f93df7b68), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DY)" )
+GAME_CUSTOM( 199?, m4jolgem__ah, m4jolgem, "gms05h.p1", 0x0000, 0x020000, CRC(f99cc690) SHA1(c3cf8aaf8376e9d4eff37afdd818802f9ec4fe64), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 H)" )
+GAME_CUSTOM( 199?, m4jolgem__ai, m4jolgem, "gms05k.p1", 0x0000, 0x020000, CRC(90c89c8d) SHA1(4b8e23c9a6bd85563be041d8e95175dc4c39b8e7), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 K)" )
+GAME_CUSTOM( 199?, m4jolgem__aj, m4jolgem, "gms05r.p1", 0x0000, 0x020000, CRC(23c727bc) SHA1(0187a14a789f018e6161f2ae160f82c87d03b6a8), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 R)" )
+GAME_CUSTOM( 199?, m4jolgem__al, m4jolgem, "gms05y.p1", 0x0000, 0x020000, CRC(ed4589c9) SHA1(899622c22d29c0ef05bf562176943c9749e236a2), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 Y)" )
// "(C)1993 BARCREST" and "GMS 0.3"
GAME_CUSTOM( 199?, m4jolgem__ao, m4jolgem, "jjem0", 0x0000, 0x020000, CRC(9b54a881) SHA1(3b1bfacf8fe295c771c558154fe2fca70f049df0), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.3 K)" )
// "(C)1999 BWB" and "JGS 1.0"
-GAME_CUSTOM( 199?, m4jolgem__ap, m4jolgem, "jgs_xa_x.1_0", 0x0000, 0x020000, CRC(7ac16252) SHA1(b01b2333e1e99f9404a7e0ac80e5e8ee834ec39d), "Bwb","Jolly Gems (Barcrest) (MPU4) (JGS 1.0)" )
+GAME_CUSTOM( 199?, m4jolgem__ap, m4jolgem, "jgs_xa_x.1_0", 0x0000, 0x020000, CRC(7ac16252) SHA1(b01b2333e1e99f9404a7e0ac80e5e8ee834ec39d), "Bwb","Jolly Gems (Barcrest) (MPU4) (JGS 1.0 CK)" )
// no copyright string and "GEM 0.6"
GAME_CUSTOM( 199?, m4jolgem__am, m4jolgem, "jgem15g", 0x0000, 0x020000, CRC(8288eb80) SHA1(bfb1004b49914b6ae1b0608c9e5c61efe4635ba3), "hack","Jolly Gems (Barcrest) (MPU4) (GEM 0.6, hack)" )
// no copyright string and "GMS 0.4"
@@ -1518,71 +1518,71 @@ GAME_CUSTOM( 199?, m4jolgem__an, m4jolgem, "jgem15t", 0x0000, 0x020000,
// "(C)1991 BARCREST" and "HI4 0.3"
GAME_CUSTOM( 199?, m4hittop, 0, "hi4s.p1", 0x0000, 0x010000, CRC(3a04ee7a) SHA1(d23e9da2c22f6983a855bc519597ea9cea84f2dd), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3)" )
-GAME_CUSTOM( 199?, m4hittop__k, m4hittop, "hi4ad.p1", 0x0000, 0x010000, CRC(eeb958f3) SHA1(ee7f7615df2141ad5183288101949b74c4543de9), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 12)" )
-GAME_CUSTOM( 199?, m4hittop__l, m4hittop, "hi4b.p1", 0x0000, 0x010000, CRC(68af264b) SHA1(e7f75b5294cc7541f9397c492c171c79b7a21a36), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 13)" )
-GAME_CUSTOM( 199?, m4hittop__m, m4hittop, "hi4bd.p1", 0x0000, 0x010000, CRC(d72cd485) SHA1(d0d38cbb518c824d4a8107e1711f85120c39bc4c), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 14)" )
-GAME_CUSTOM( 199?, m4hittop__n, m4hittop, "hi4d.p1", 0x0000, 0x010000, CRC(59d7364c) SHA1(1e665b178b8bf7314ca5b5ea97dc185491fc2930), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 15)" )
-GAME_CUSTOM( 199?, m4hittop__o, m4hittop, "hi4dk.p1", 0x0000, 0x010000, CRC(76d4bb70) SHA1(7365f072a7e3e8141e15fbf56c3355bc6310895f), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 16)" )
-GAME_CUSTOM( 199?, m4hittop__p, m4hittop, "hi4dy.p1", 0x0000, 0x010000, CRC(b1ddf7fe) SHA1(a334619b5dfc7a44e9082cc37cb5187413adb29f), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 17)" )
-GAME_CUSTOM( 199?, m4hittop__q, m4hittop, "hi4k.p1", 0x0000, 0x010000, CRC(99cb8bc9) SHA1(106bf6e327643c49024f9422d6b87f5b157b452f), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 18)" )
-GAME_CUSTOM( 199?, m4hittop__r, m4hittop, "hi4y.p1", 0x0000, 0x010000, CRC(c60e01e6) SHA1(c4a7ea44c36c78401cab3ef87d7e02add0b48ab5), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 19)" )
+GAME_CUSTOM( 199?, m4hittop__k, m4hittop, "hi4ad.p1", 0x0000, 0x010000, CRC(eeb958f3) SHA1(ee7f7615df2141ad5183288101949b74c4543de9), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3 AD)" )
+GAME_CUSTOM( 199?, m4hittop__l, m4hittop, "hi4b.p1", 0x0000, 0x010000, CRC(68af264b) SHA1(e7f75b5294cc7541f9397c492c171c79b7a21a36), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3 AB" )
+GAME_CUSTOM( 199?, m4hittop__m, m4hittop, "hi4bd.p1", 0x0000, 0x010000, CRC(d72cd485) SHA1(d0d38cbb518c824d4a8107e1711f85120c39bc4c), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3 BD)" )
+GAME_CUSTOM( 199?, m4hittop__n, m4hittop, "hi4d.p1", 0x0000, 0x010000, CRC(59d7364c) SHA1(1e665b178b8bf7314ca5b5ea97dc185491fc2930), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3 D)" )
+GAME_CUSTOM( 199?, m4hittop__o, m4hittop, "hi4dk.p1", 0x0000, 0x010000, CRC(76d4bb70) SHA1(7365f072a7e3e8141e15fbf56c3355bc6310895f), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3 KD)" )
+GAME_CUSTOM( 199?, m4hittop__p, m4hittop, "hi4dy.p1", 0x0000, 0x010000, CRC(b1ddf7fe) SHA1(a334619b5dfc7a44e9082cc37cb5187413adb29f), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3 YD)" )
+GAME_CUSTOM( 199?, m4hittop__q, m4hittop, "hi4k.p1", 0x0000, 0x010000, CRC(99cb8bc9) SHA1(106bf6e327643c49024f9422d6b87f5b157b452f), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3 K)" )
+GAME_CUSTOM( 199?, m4hittop__r, m4hittop, "hi4y.p1", 0x0000, 0x010000, CRC(c60e01e6) SHA1(c4a7ea44c36c78401cab3ef87d7e02add0b48ab5), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3 Y)" )
// "(C)1991 BARCREST" and "CHU 0.1"
GAME_CUSTOM( 199?, m4hittop__i, m4hittop, "chus.p1", 0x0000, 0x010000, CRC(8a39816e) SHA1(3869f7ae0c9b681cfb07e2f6c1a94fc81fa13fe3), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1)" )
-GAME_CUSTOM( 199?, m4hittop__a, m4hittop, "chuad.p1", 0x0000, 0x010000, CRC(01d3b86c) SHA1(27af0e76661495d5b91ee6a53507f9a5d4e5ab85), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1AD)" )
-GAME_CUSTOM( 199?, m4hittop__b, m4hittop, "chub.p1", 0x0000, 0x010000, CRC(17ff4ed4) SHA1(f193a00a46c82d4989af18055f9f69d93df79ec6), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 3)" )
-GAME_CUSTOM( 199?, m4hittop__c, m4hittop, "chubd.p1", 0x0000, 0x010000, CRC(3e7a6b1b) SHA1(8939a0cac8578ff5e1d1ab2b3a64b3809793c44a), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 4)" )
-GAME_CUSTOM( 199?, m4hittop__d, m4hittop, "chud.p1", 0x0000, 0x010000, CRC(26875ed3) SHA1(06dbf594e2c5202ee624f4202f634281a89a3870), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 5)" )
-GAME_CUSTOM( 199?, m4hittop__e, m4hittop, "chudk.p1", 0x0000, 0x010000, CRC(10c1f6c3) SHA1(e6ff6ea40f35cfd9ed7643e69eca62775f20b3a2), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4hittop__f, m4hittop, "chudy.p1", 0x0000, 0x010000, CRC(65302d8c) SHA1(de340cc182212b576cae46669492d0d760d2f288), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 7)" )
-GAME_CUSTOM( 199?, m4hittop__g, m4hittop, "chuk.p1", 0x0000, 0x010000, CRC(7f333a2c) SHA1(73719997c200ec5291ceaa12f8667979a731212e), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 8)" )
-GAME_CUSTOM( 199?, m4hittop__h, m4hittop, "chur.p1", 0x0000, 0x010000, CRC(dbb89a00) SHA1(70b2f2c78011b8b470aa58153d524f920d553b28), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 9)" )
-GAME_CUSTOM( 199?, m4hittop__j, m4hittop, "chuy.p1", 0x0000, 0x010000, CRC(e0902d74) SHA1(a34db63f1354853ad5a1026e4402ccd2e564c7d7), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 11)" )
+GAME_CUSTOM( 199?, m4hittop__a, m4hittop, "chuad.p1", 0x0000, 0x010000, CRC(01d3b86c) SHA1(27af0e76661495d5b91ee6a53507f9a5d4e5ab85), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 AD)" )
+GAME_CUSTOM( 199?, m4hittop__b, m4hittop, "chub.p1", 0x0000, 0x010000, CRC(17ff4ed4) SHA1(f193a00a46c82d4989af18055f9f69d93df79ec6), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 B)" )
+GAME_CUSTOM( 199?, m4hittop__c, m4hittop, "chubd.p1", 0x0000, 0x010000, CRC(3e7a6b1b) SHA1(8939a0cac8578ff5e1d1ab2b3a64b3809793c44a), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 BD)" )
+GAME_CUSTOM( 199?, m4hittop__d, m4hittop, "chud.p1", 0x0000, 0x010000, CRC(26875ed3) SHA1(06dbf594e2c5202ee624f4202f634281a89a3870), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 D)" )
+GAME_CUSTOM( 199?, m4hittop__e, m4hittop, "chudk.p1", 0x0000, 0x010000, CRC(10c1f6c3) SHA1(e6ff6ea40f35cfd9ed7643e69eca62775f20b3a2), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 KD)" )
+GAME_CUSTOM( 199?, m4hittop__f, m4hittop, "chudy.p1", 0x0000, 0x010000, CRC(65302d8c) SHA1(de340cc182212b576cae46669492d0d760d2f288), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 YD)" )
+GAME_CUSTOM( 199?, m4hittop__g, m4hittop, "chuk.p1", 0x0000, 0x010000, CRC(7f333a2c) SHA1(73719997c200ec5291ceaa12f8667979a731212e), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 K)" )
+GAME_CUSTOM( 199?, m4hittop__h, m4hittop, "chur.p1", 0x0000, 0x010000, CRC(dbb89a00) SHA1(70b2f2c78011b8b470aa58153d524f920d553b28), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 R)" )
+GAME_CUSTOM( 199?, m4hittop__j, m4hittop, "chuy.p1", 0x0000, 0x010000, CRC(e0902d74) SHA1(a34db63f1354853ad5a1026e4402ccd2e564c7d7), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 Y)" )
// "(C)1991 BARCREST" and "HIT 0.4"
GAME_CUSTOM( 199?, m4hittop__1, m4hittop, "hit04s.p1", 0x0000, 0x010000, CRC(05376f9f) SHA1(e59bdd6541669b150bb68eb97ea316c3fe451778), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4)" )
-GAME_CUSTOM( 199?, m4hittop__s, m4hittop, "hit04ad.p1", 0x0000, 0x010000, CRC(cc9d10fa) SHA1(b7ce14fecfd8142fa7127c23f152c749dae74701), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4AD)" )
-GAME_CUSTOM( 199?, m4hittop__t, m4hittop, "hit04b.p1", 0x0000, 0x010000, CRC(da511063) SHA1(3f4fb8518cb2057ec4c2bb13fd3e61ee73bfa457), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 21)" )
-GAME_CUSTOM( 199?, m4hittop__u, m4hittop, "hit04bd.p1", 0x0000, 0x010000, CRC(40a84b97) SHA1(416f78c19e08f405a3b36f886f69e7b88e5aa90a), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 22)" )
-GAME_CUSTOM( 199?, m4hittop__v, m4hittop, "hit04d.p1", 0x0000, 0x010000, CRC(89607e84) SHA1(280209ca3030383547cc91eee2f71a810768353f), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 23)" )
-GAME_CUSTOM( 199?, m4hittop__w, m4hittop, "hit04dk.p1", 0x0000, 0x010000, CRC(b89e606f) SHA1(9096126b719ecd92185d9c1d50d13c9339d09583), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 24)" )
-GAME_CUSTOM( 199?, m4hittop__x, m4hittop, "hit04dr.p1", 0x0000, 0x010000, CRC(1b4d8099) SHA1(505e0948a78b5d57f0986896ab900d25a20d7877), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 25)" )
-GAME_CUSTOM( 199?, m4hittop__y, m4hittop, "hit04dy.p1", 0x0000, 0x010000, CRC(25f54881) SHA1(9f4ae52295df5810cbe6c18cae66877bec006a28), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 26)" )
-GAME_CUSTOM( 199?, m4hittop__z, m4hittop, "hit04k.p1", 0x0000, 0x010000, CRC(5ef3f78d) SHA1(e72727b3dc7793c36f182b3e7d363741254c0be7), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 27)" )
-GAME_CUSTOM( 199?, m4hittop__0, m4hittop, "hit04r.p1", 0x0000, 0x010000, CRC(d87a9f60) SHA1(614224b80afaa6e407f9b40b45b8aecdf999e13a), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 28)" )
-GAME_CUSTOM( 199?, m4hittop__2, m4hittop, "hit04y.p1", 0x0000, 0x010000, CRC(c398df63) SHA1(5e93cb95da37b1593d030e99e97996252ad6cda1), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 30)" )
+GAME_CUSTOM( 199?, m4hittop__s, m4hittop, "hit04ad.p1", 0x0000, 0x010000, CRC(cc9d10fa) SHA1(b7ce14fecfd8142fa7127c23f152c749dae74701), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 AD)" )
+GAME_CUSTOM( 199?, m4hittop__t, m4hittop, "hit04b.p1", 0x0000, 0x010000, CRC(da511063) SHA1(3f4fb8518cb2057ec4c2bb13fd3e61ee73bfa457), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 B)" )
+GAME_CUSTOM( 199?, m4hittop__u, m4hittop, "hit04bd.p1", 0x0000, 0x010000, CRC(40a84b97) SHA1(416f78c19e08f405a3b36f886f69e7b88e5aa90a), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 BD)" )
+GAME_CUSTOM( 199?, m4hittop__v, m4hittop, "hit04d.p1", 0x0000, 0x010000, CRC(89607e84) SHA1(280209ca3030383547cc91eee2f71a810768353f), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 D)" )
+GAME_CUSTOM( 199?, m4hittop__w, m4hittop, "hit04dk.p1", 0x0000, 0x010000, CRC(b89e606f) SHA1(9096126b719ecd92185d9c1d50d13c9339d09583), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 KD)" )
+GAME_CUSTOM( 199?, m4hittop__x, m4hittop, "hit04dr.p1", 0x0000, 0x010000, CRC(1b4d8099) SHA1(505e0948a78b5d57f0986896ab900d25a20d7877), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 RD)" )
+GAME_CUSTOM( 199?, m4hittop__y, m4hittop, "hit04dy.p1", 0x0000, 0x010000, CRC(25f54881) SHA1(9f4ae52295df5810cbe6c18cae66877bec006a28), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 YD)" )
+GAME_CUSTOM( 199?, m4hittop__z, m4hittop, "hit04k.p1", 0x0000, 0x010000, CRC(5ef3f78d) SHA1(e72727b3dc7793c36f182b3e7d363741254c0be7), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 K)" )
+GAME_CUSTOM( 199?, m4hittop__0, m4hittop, "hit04r.p1", 0x0000, 0x010000, CRC(d87a9f60) SHA1(614224b80afaa6e407f9b40b45b8aecdf999e13a), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 R)" )
+GAME_CUSTOM( 199?, m4hittop__2, m4hittop, "hit04y.p1", 0x0000, 0x010000, CRC(c398df63) SHA1(5e93cb95da37b1593d030e99e97996252ad6cda1), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 Y)" )
// "(C)1991 BARCREST" and "HT2 0.1"
GAME_CUSTOM( 199?, m4hittop__ac, m4hittop, "ht201s.p1", 0x0000, 0x010000, CRC(37b20464) SHA1(e87b0a2023416fa7b63201e19850319723eb6c10), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1)" )
-GAME_CUSTOM( 199?, m4hittop__3, m4hittop, "ht201ad.p1", 0x0000, 0x010000, CRC(b0f3873b) SHA1(6e7d1b20dff4b81ebd171d6d92c95e46817bdf90), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1AD)" )
-GAME_CUSTOM( 199?, m4hittop__4, m4hittop, "ht201b.p1", 0x0000, 0x010000, CRC(9dbe41fc) SHA1(ce5ed2707ab63057a2f66a1098e3752acaa72dac), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 32)" )
-GAME_CUSTOM( 199?, m4hittop__5, m4hittop, "ht201bd.p1", 0x0000, 0x010000, CRC(be23c8b6) SHA1(0d4ab2d3c7ac063ec1ce10b2af28c8770d8bd818), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 33)" )
-GAME_CUSTOM( 199?, m4hittop__6, m4hittop, "ht201d.p1", 0x0000, 0x010000, CRC(25b9fcd7) SHA1(8bebbf0b621a704ed9811e67eab003f4ddebcde2), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 34)" )
-GAME_CUSTOM( 199?, m4hittop__7, m4hittop, "ht201dk.p1", 0x0000, 0x010000, CRC(1c77872e) SHA1(a728811efee6f40779b01a6d60f2d0167e204a09), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 35)" )
-GAME_CUSTOM( 199?, m4hittop__8, m4hittop, "ht201dr.p1", 0x0000, 0x010000, CRC(9836d075) SHA1(b015e9706c5ec7b03133eda70fe0322c24969d7e), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 36)" )
-GAME_CUSTOM( 199?, m4hittop__9, m4hittop, "ht201dy.p1", 0x0000, 0x010000, CRC(811cafc0) SHA1(e31ad353ee8ce4ea059d6a469baaa14357b738c9), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 37)" )
-GAME_CUSTOM( 199?, m4hittop__aa, m4hittop, "ht201k.p1", 0x0000, 0x010000, CRC(191ca612) SHA1(a2a80b64cc04aa590046413f1474340cd3a5b03a), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 38)" )
-GAME_CUSTOM( 199?, m4hittop__ab, m4hittop, "ht201r.p1", 0x0000, 0x010000, CRC(154643be) SHA1(280ae761c434bbed84317d85aef2ad4a78c61d1d), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 39)" )
-GAME_CUSTOM( 199?, m4hittop__ad, m4hittop, "ht201y.p1", 0x0000, 0x010000, CRC(84778efc) SHA1(bdc43973913d0e8be0e16ee89da01b1bcdc2da6f), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 41)" )
+GAME_CUSTOM( 199?, m4hittop__3, m4hittop, "ht201ad.p1", 0x0000, 0x010000, CRC(b0f3873b) SHA1(6e7d1b20dff4b81ebd171d6d92c95e46817bdf90), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 AD)" )
+GAME_CUSTOM( 199?, m4hittop__4, m4hittop, "ht201b.p1", 0x0000, 0x010000, CRC(9dbe41fc) SHA1(ce5ed2707ab63057a2f66a1098e3752acaa72dac), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 B)" )
+GAME_CUSTOM( 199?, m4hittop__5, m4hittop, "ht201bd.p1", 0x0000, 0x010000, CRC(be23c8b6) SHA1(0d4ab2d3c7ac063ec1ce10b2af28c8770d8bd818), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 BD)" )
+GAME_CUSTOM( 199?, m4hittop__6, m4hittop, "ht201d.p1", 0x0000, 0x010000, CRC(25b9fcd7) SHA1(8bebbf0b621a704ed9811e67eab003f4ddebcde2), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 D)" )
+GAME_CUSTOM( 199?, m4hittop__7, m4hittop, "ht201dk.p1", 0x0000, 0x010000, CRC(1c77872e) SHA1(a728811efee6f40779b01a6d60f2d0167e204a09), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 KD)" )
+GAME_CUSTOM( 199?, m4hittop__8, m4hittop, "ht201dr.p1", 0x0000, 0x010000, CRC(9836d075) SHA1(b015e9706c5ec7b03133eda70fe0322c24969d7e), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 RD)" )
+GAME_CUSTOM( 199?, m4hittop__9, m4hittop, "ht201dy.p1", 0x0000, 0x010000, CRC(811cafc0) SHA1(e31ad353ee8ce4ea059d6a469baaa14357b738c9), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 YD)" )
+GAME_CUSTOM( 199?, m4hittop__aa, m4hittop, "ht201k.p1", 0x0000, 0x010000, CRC(191ca612) SHA1(a2a80b64cc04aa590046413f1474340cd3a5b03a), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 K)" )
+GAME_CUSTOM( 199?, m4hittop__ab, m4hittop, "ht201r.p1", 0x0000, 0x010000, CRC(154643be) SHA1(280ae761c434bbed84317d85aef2ad4a78c61d1d), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 R)" )
+GAME_CUSTOM( 199?, m4hittop__ad, m4hittop, "ht201y.p1", 0x0000, 0x010000, CRC(84778efc) SHA1(bdc43973913d0e8be0e16ee89da01b1bcdc2da6f), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 Y)" )
// "(C)1991 BARCREST" and "HT5 0.1"
GAME_CUSTOM( 199?, m4hittop__an, m4hittop, "ht501s.p1", 0x0000, 0x010000, CRC(ac440a2b) SHA1(f3f3d0c9c8dcb41509307c970f0776ebcfffdeb0), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1)" )
-GAME_CUSTOM( 199?, m4hittop__ae, m4hittop, "ht501ad.p1", 0x0000, 0x010000, CRC(7bf00848) SHA1(700d90218d0bd31860dc905c00d0afbf3a1e8704), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1AD)" )
-GAME_CUSTOM( 199?, m4hittop__af, m4hittop, "ht501b.p1", 0x0000, 0x010000, CRC(c06dd046) SHA1(a47c62fc299842e66694f34844b43a55d6f20c3d), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 43)" )
-GAME_CUSTOM( 199?, m4hittop__ag, m4hittop, "ht501bd.p1", 0x0000, 0x010000, CRC(d4a3843f) SHA1(cc66ebaa334bab86b9bcb1623316c31318e84d2a), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 44)" )
-GAME_CUSTOM( 199?, m4hittop__ah, m4hittop, "ht501d.p1", 0x0000, 0x010000, CRC(67d3c040) SHA1(beec134c53715544080327319b5d6231b625fbb4), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 45)" )
-GAME_CUSTOM( 199?, m4hittop__ai, m4hittop, "ht501dk.p1", 0x0000, 0x010000, CRC(feec7950) SHA1(7bcd8d0166847f72871a78e4b287c72e1a06d26e), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 46)" )
-GAME_CUSTOM( 199?, m4hittop__aj, m4hittop, "ht501dr.p1", 0x0000, 0x010000, CRC(c73b60b1) SHA1(9f14957eb0eec7e833b6bb5b162286d94c8f03c4), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 47)" )
-GAME_CUSTOM( 199?, m4hittop__ak, m4hittop, "ht501dy.p1", 0x0000, 0x010000, CRC(756c7ae9) SHA1(42a731e472f073845b98d7fcc47fe70f57181ce6), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 48)" )
-GAME_CUSTOM( 199?, m4hittop__al, m4hittop, "ht501k.p1", 0x0000, 0x010000, CRC(93269e53) SHA1(7e40ac4e9f4b26755867353fdccadf0f976402b4), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 49)" )
-GAME_CUSTOM( 199?, m4hittop__am, m4hittop, "ht501r.p1", 0x0000, 0x010000, CRC(9aec0493) SHA1(6b0b7e5f4a988ff4d2bc123978adc09195eb4232), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 50)" )
-GAME_CUSTOM( 199?, m4hittop__ao, m4hittop, "ht501y.p1", 0x0000, 0x010000, CRC(a7f8ece6) SHA1(f4472c040c9255eaef5b1109c3bec44f4978b600), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 52)" )
+GAME_CUSTOM( 199?, m4hittop__ae, m4hittop, "ht501ad.p1", 0x0000, 0x010000, CRC(7bf00848) SHA1(700d90218d0bd31860dc905c00d0afbf3a1e8704), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 AD)" )
+GAME_CUSTOM( 199?, m4hittop__af, m4hittop, "ht501b.p1", 0x0000, 0x010000, CRC(c06dd046) SHA1(a47c62fc299842e66694f34844b43a55d6f20c3d), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 B)" )
+GAME_CUSTOM( 199?, m4hittop__ag, m4hittop, "ht501bd.p1", 0x0000, 0x010000, CRC(d4a3843f) SHA1(cc66ebaa334bab86b9bcb1623316c31318e84d2a), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 BD)" )
+GAME_CUSTOM( 199?, m4hittop__ah, m4hittop, "ht501d.p1", 0x0000, 0x010000, CRC(67d3c040) SHA1(beec134c53715544080327319b5d6231b625fbb4), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 D)" )
+GAME_CUSTOM( 199?, m4hittop__ai, m4hittop, "ht501dk.p1", 0x0000, 0x010000, CRC(feec7950) SHA1(7bcd8d0166847f72871a78e4b287c72e1a06d26e), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 KD)" )
+GAME_CUSTOM( 199?, m4hittop__aj, m4hittop, "ht501dr.p1", 0x0000, 0x010000, CRC(c73b60b1) SHA1(9f14957eb0eec7e833b6bb5b162286d94c8f03c4), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 RD)" )
+GAME_CUSTOM( 199?, m4hittop__ak, m4hittop, "ht501dy.p1", 0x0000, 0x010000, CRC(756c7ae9) SHA1(42a731e472f073845b98d7fcc47fe70f57181ce6), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 YD)" )
+GAME_CUSTOM( 199?, m4hittop__al, m4hittop, "ht501k.p1", 0x0000, 0x010000, CRC(93269e53) SHA1(7e40ac4e9f4b26755867353fdccadf0f976402b4), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 K)" )
+GAME_CUSTOM( 199?, m4hittop__am, m4hittop, "ht501r.p1", 0x0000, 0x010000, CRC(9aec0493) SHA1(6b0b7e5f4a988ff4d2bc123978adc09195eb4232), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 R)" )
+GAME_CUSTOM( 199?, m4hittop__ao, m4hittop, "ht501y.p1", 0x0000, 0x010000, CRC(a7f8ece6) SHA1(f4472c040c9255eaef5b1109c3bec44f4978b600), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 Y)" )
// "(C)1991 BARCREST" and "HTT 0.5"
GAME_CUSTOM( 199?, m4hittop__aw, m4hittop, "htts.p1", 0x0000, 0x010000, CRC(6c794eb2) SHA1(347a7c74b1fd7631fbcd398bf5e7c36af088109e), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5)" )
-GAME_CUSTOM( 199?, m4hittop__ap, m4hittop, "httad.p1", 0x0000, 0x010000, CRC(e5a3df45) SHA1(70bebb33cbe466c379f278347d0b47862b1d01a8), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5AD)" )
-GAME_CUSTOM( 199?, m4hittop__aq, m4hittop, "httb.p1", 0x0000, 0x010000, CRC(5c921ff2) SHA1(a9184e4e3916c1ab92761d0e33b42cce4a58e7b1), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 54)" )
-GAME_CUSTOM( 199?, m4hittop__ar, m4hittop, "httbd.p1", 0x0000, 0x010000, CRC(9d19fac9) SHA1(17072ac5b49cd947bf397dfbe9b6b0bd269dd1b4), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 55)" )
-GAME_CUSTOM( 199?, m4hittop__as, m4hittop, "httd.p1", 0x0000, 0x010000, CRC(5e5bacb9) SHA1(d673010cdf2fb9352fc510409deade42b5508b29), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 56)" )
-GAME_CUSTOM( 199?, m4hittop__at, m4hittop, "httdk.p1", 0x0000, 0x010000, CRC(17b1db87) SHA1(196163f68c82c4600ecacee52ee8044739568fbf), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 57)" )
-GAME_CUSTOM( 199?, m4hittop__au, m4hittop, "httdy.p1", 0x0000, 0x010000, CRC(428af7bf) SHA1(954a512105d1a5998d4ffcbf21be0c9d9a65bbeb), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 58)" )
-GAME_CUSTOM( 199?, m4hittop__av, m4hittop, "httk.p1", 0x0000, 0x010000, CRC(581dd34a) SHA1(00cad1860f5edf056b8f9397ca46165593be4755), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 59)" )
-GAME_CUSTOM( 199?, m4hittop__ax, m4hittop, "htty.p1", 0x0000, 0x010000, CRC(c9b402b2) SHA1(2165c1892fc1f0b9b0c39127f322f15c9e1912b1), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 61)" )
+GAME_CUSTOM( 199?, m4hittop__ap, m4hittop, "httad.p1", 0x0000, 0x010000, CRC(e5a3df45) SHA1(70bebb33cbe466c379f278347d0b47862b1d01a8), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5 AD)" )
+GAME_CUSTOM( 199?, m4hittop__aq, m4hittop, "httb.p1", 0x0000, 0x010000, CRC(5c921ff2) SHA1(a9184e4e3916c1ab92761d0e33b42cce4a58e7b1), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5 B)" )
+GAME_CUSTOM( 199?, m4hittop__ar, m4hittop, "httbd.p1", 0x0000, 0x010000, CRC(9d19fac9) SHA1(17072ac5b49cd947bf397dfbe9b6b0bd269dd1b4), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5 BD)" )
+GAME_CUSTOM( 199?, m4hittop__as, m4hittop, "httd.p1", 0x0000, 0x010000, CRC(5e5bacb9) SHA1(d673010cdf2fb9352fc510409deade42b5508b29), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5 D)" )
+GAME_CUSTOM( 199?, m4hittop__at, m4hittop, "httdk.p1", 0x0000, 0x010000, CRC(17b1db87) SHA1(196163f68c82c4600ecacee52ee8044739568fbf), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5 KD)" )
+GAME_CUSTOM( 199?, m4hittop__au, m4hittop, "httdy.p1", 0x0000, 0x010000, CRC(428af7bf) SHA1(954a512105d1a5998d4ffcbf21be0c9d9a65bbeb), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5 YD)" )
+GAME_CUSTOM( 199?, m4hittop__av, m4hittop, "httk.p1", 0x0000, 0x010000, CRC(581dd34a) SHA1(00cad1860f5edf056b8f9397ca46165593be4755), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5 K)" )
+GAME_CUSTOM( 199?, m4hittop__ax, m4hittop, "htty.p1", 0x0000, 0x010000, CRC(c9b402b2) SHA1(2165c1892fc1f0b9b0c39127f322f15c9e1912b1), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5 Y)" )
#define M4NNWW_EXTRA_ROMS \
@@ -1603,72 +1603,72 @@ GAME_CUSTOM( 199?, m4hittop__ax, m4hittop, "htty.p1", 0x0000, 0x010000,
// I think the code in the header was just not updated properly.
// "(C)1991 BARCREST" and "NN4 0.2"
GAME_CUSTOM( 199?, m4nnww, 0, "nn5s.p1", 0x0000, 0x010000, CRC(459e5663) SHA1(66ae821e5202d6d3ba05be44d0c1f26da60a3a32), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 / NN4 0.2)" )
-GAME_CUSTOM( 199?, m4nnww__aq, m4nnww, "nn5bd.p1", 0x0000, 0x010000, CRC(56cc9559) SHA1(53e109a579e422932dd25c52cf2beca51d3a53e3), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2BD / NN4 0.2)" )
-GAME_CUSTOM( 199?, m4nnww__ai, m4nnww, "nn5ad.p1", 0x0000, 0x010000, CRC(22537184) SHA1(aef542a34e2b14a5db624e42d1cd2682de237b52), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 46)" )
-GAME_CUSTOM( 199?, m4nnww__aj, m4nnww, "nn5b.p1", 0x0000, 0x010000, CRC(e2a99408) SHA1(a0868a38c290a84926089c60d1b5555706485bff), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 47)" )
-GAME_CUSTOM( 199?, m4nnww__ak, m4nnww, "nn5d.p1", 0x0000, 0x010000, CRC(ef1a21b6) SHA1(ba763b06583af1273e384b878fbacc68f88714dc), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 48)" )
-GAME_CUSTOM( 199?, m4nnww__al, m4nnww, "nn5dk.p1", 0x0000, 0x010000, CRC(74c48e28) SHA1(db6be2275b6122845c662dd5f12266b66e888221), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 49)" )
-GAME_CUSTOM( 199?, m4nnww__am, m4nnww, "nn5dr.p1", 0x0000, 0x010000, CRC(f52c9f87) SHA1(e8b1037c9ed5d9452abccb6b07bae46b45c4705e), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 50)" )
-GAME_CUSTOM( 199?, m4nnww__an, m4nnww, "nn5dy.p1", 0x0000, 0x010000, CRC(6847b769) SHA1(1b4d42774c72a3c7b40551c7181413ea1fca0b88), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 51)" )
-GAME_CUSTOM( 199?, m4nnww__ao, m4nnww, "nn5k.p1", 0x0000, 0x010000, CRC(ceab49d9) SHA1(633e7bab6a30176dbcea2bd3e7bab0f7833409ba), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 52)" )
-GAME_CUSTOM( 199?, m4nnww__ap, m4nnww, "nn5r.p1", 0x0000, 0x010000, CRC(144523cd) SHA1(d12586ccea659ecb75af944d87ddd480da917eaf), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 53)" )
-GAME_CUSTOM( 199?, m4nnww__ar, m4nnww, "nn5y.p1", 0x0000, 0x010000, CRC(892e0b23) SHA1(ff3f550e20e71e868d52b60740f743a7d2d6c645), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 55)" )
+GAME_CUSTOM( 199?, m4nnww__aq, m4nnww, "nn5bd.p1", 0x0000, 0x010000, CRC(56cc9559) SHA1(53e109a579e422932dd25c52cf2beca51d3a53e3), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 BD / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__ai, m4nnww, "nn5ad.p1", 0x0000, 0x010000, CRC(22537184) SHA1(aef542a34e2b14a5db624e42d1cd2682de237b52), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 AD / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__aj, m4nnww, "nn5b.p1", 0x0000, 0x010000, CRC(e2a99408) SHA1(a0868a38c290a84926089c60d1b5555706485bff), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 B / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__ak, m4nnww, "nn5d.p1", 0x0000, 0x010000, CRC(ef1a21b6) SHA1(ba763b06583af1273e384b878fbacc68f88714dc), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 D / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__al, m4nnww, "nn5dk.p1", 0x0000, 0x010000, CRC(74c48e28) SHA1(db6be2275b6122845c662dd5f12266b66e888221), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 KD / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__am, m4nnww, "nn5dr.p1", 0x0000, 0x010000, CRC(f52c9f87) SHA1(e8b1037c9ed5d9452abccb6b07bae46b45c4705e), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 RD / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__an, m4nnww, "nn5dy.p1", 0x0000, 0x010000, CRC(6847b769) SHA1(1b4d42774c72a3c7b40551c7181413ea1fca0b88), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 YD / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__ao, m4nnww, "nn5k.p1", 0x0000, 0x010000, CRC(ceab49d9) SHA1(633e7bab6a30176dbcea2bd3e7bab0f7833409ba), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 K / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__ap, m4nnww, "nn5r.p1", 0x0000, 0x010000, CRC(144523cd) SHA1(d12586ccea659ecb75af944d87ddd480da917eaf), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 R / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__ar, m4nnww, "nn5y.p1", 0x0000, 0x010000, CRC(892e0b23) SHA1(ff3f550e20e71e868d52b60740f743a7d2d6c645), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 Y / NN4 0.2)" )
// "(C)1991 BARCREST" and "NN4 0.1" (startup CN1 0.1)
-GAME_CUSTOM( 199?, m4nnww__b, m4nnww, "cni01ad.p1", 0x0000, 0x010000, CRC(788e47b1) SHA1(6d07500a38b54e1a9038e35d82fdb4a0f22d23ba), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 / NN4 0.1)" )
-GAME_CUSTOM( 199?, m4nnww__c, m4nnww, "cni01b.p1", 0x0000, 0x010000, CRC(33512643) SHA1(865ed3b68fe3b737833734513b5045c5db97791e), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 4)" )
-GAME_CUSTOM( 199?, m4nnww__d, m4nnww, "cni01bd.p1", 0x0000, 0x010000, CRC(8a00d73b) SHA1(702579ea1bc586aacd5cba889919f3e86ea05771), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 5)" )
-GAME_CUSTOM( 199?, m4nnww__e, m4nnww, "cni01c.p1", 0x0000, 0x010000, CRC(b836ee44) SHA1(832914461492f120894ec7e63f6aa1ad00b89b41), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4nnww__f, m4nnww, "cni01d.p1", 0x0000, 0x010000, CRC(94fbe9cb) SHA1(7daabf1cd315f8d18796ba34f8c2ec271cc1e396), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 7)" )
-GAME_CUSTOM( 199?, m4nnww__g, m4nnww, "cni01dk.p1", 0x0000, 0x010000, CRC(708fbcca) SHA1(7e97d8adf660099873a94d1915c79f110614cb11), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 8)" )
-GAME_CUSTOM( 199?, m4nnww__h, m4nnww, "cni01dr.p1", 0x0000, 0x010000, CRC(5b7ed753) SHA1(8072ac849dc61e50963ae6730fa32823bd038c77), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 9)" )
-GAME_CUSTOM( 199?, m4nnww__i, m4nnww, "cni01dy.p1", 0x0000, 0x010000, CRC(fcf6da8b) SHA1(95d86af30035884211ed26ccb5db9aae12ac7bf2), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 10)" )
-GAME_CUSTOM( 199?, m4nnww__j, m4nnww, "cni01k.p1", 0x0000, 0x010000, CRC(f7c90833) SHA1(3b3b44e61f24e9fb45f465fd9c381fe81b6851a0), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 11)" )
-GAME_CUSTOM( 199?, m4nnww__k, m4nnww, "cni01r.p1", 0x0000, 0x010000, CRC(c611b1eb) SHA1(524ee18da8a086d15277d9fb0ea383ee3d49d47a), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 12)" )
-GAME_CUSTOM( 199?, m4nnww__l, m4nnww, "cni01s.p1", 0x0000, 0x010000, CRC(5ed6a396) SHA1(299767467b56d1aa93602f98cc387e7ff18bda9d), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 13)" )
-GAME_CUSTOM( 199?, m4nnww__m, m4nnww, "cni01y.p1", 0x0000, 0x010000, CRC(d3612bf2) SHA1(40a8ff08a38c4411946a67f380891945d166d199), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 14)" )
+GAME_CUSTOM( 199?, m4nnww__l, m4nnww, "cni01s.p1", 0x0000, 0x010000, CRC(5ed6a396) SHA1(299767467b56d1aa93602f98cc387e7ff18bda9d), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 / NN4 0.1)" )
+GAME_CUSTOM( 199?, m4nnww__b, m4nnww, "cni01ad.p1", 0x0000, 0x010000, CRC(788e47b1) SHA1(6d07500a38b54e1a9038e35d82fdb4a0f22d23ba), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 AD / NN4 0.1)" )
+GAME_CUSTOM( 199?, m4nnww__c, m4nnww, "cni01b.p1", 0x0000, 0x010000, CRC(33512643) SHA1(865ed3b68fe3b737833734513b5045c5db97791e), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 B / NN4 0.1)" )
+GAME_CUSTOM( 199?, m4nnww__d, m4nnww, "cni01bd.p1", 0x0000, 0x010000, CRC(8a00d73b) SHA1(702579ea1bc586aacd5cba889919f3e86ea05771), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 BD / NN4 0.1)" )
+GAME_CUSTOM( 199?, m4nnww__e, m4nnww, "cni01c.p1", 0x0000, 0x010000, CRC(b836ee44) SHA1(832914461492f120894ec7e63f6aa1ad00b89b41), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 C / NN4 0.1)" )
+GAME_CUSTOM( 199?, m4nnww__f, m4nnww, "cni01d.p1", 0x0000, 0x010000, CRC(94fbe9cb) SHA1(7daabf1cd315f8d18796ba34f8c2ec271cc1e396), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 D / NN4 0.1)" )
+GAME_CUSTOM( 199?, m4nnww__g, m4nnww, "cni01dk.p1", 0x0000, 0x010000, CRC(708fbcca) SHA1(7e97d8adf660099873a94d1915c79f110614cb11), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 KD / NN4 0.1)" )
+GAME_CUSTOM( 199?, m4nnww__h, m4nnww, "cni01dr.p1", 0x0000, 0x010000, CRC(5b7ed753) SHA1(8072ac849dc61e50963ae6730fa32823bd038c77), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 RD / NN4 0.1)" )
+GAME_CUSTOM( 199?, m4nnww__i, m4nnww, "cni01dy.p1", 0x0000, 0x010000, CRC(fcf6da8b) SHA1(95d86af30035884211ed26ccb5db9aae12ac7bf2), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 YD / NN4 0.1)" )
+GAME_CUSTOM( 199?, m4nnww__j, m4nnww, "cni01k.p1", 0x0000, 0x010000, CRC(f7c90833) SHA1(3b3b44e61f24e9fb45f465fd9c381fe81b6851a0), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 AK / NN4 0.1)" )
+GAME_CUSTOM( 199?, m4nnww__k, m4nnww, "cni01r.p1", 0x0000, 0x010000, CRC(c611b1eb) SHA1(524ee18da8a086d15277d9fb0ea383ee3d49d47a), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 R / NN4 0.1)" )
+GAME_CUSTOM( 199?, m4nnww__m, m4nnww, "cni01y.p1", 0x0000, 0x010000, CRC(d3612bf2) SHA1(40a8ff08a38c4411946a67f380891945d166d199), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 Y / NN4 0.1)" )
// "(C)1991 BARCREST" and "NN4 0.2" (startup CNU 0.2)
-GAME_CUSTOM( 199?, m4nnww__n, m4nnww, "cnuad.p1", 0x0000, 0x010000, CRC(f4b28628) SHA1(7323525a44477e2a3f89562f6094ed7bb47a16cc), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2AD / NN4 0.2)" )
-GAME_CUSTOM( 199?, m4nnww__o, m4nnww, "cnub.p1", 0x0000, 0x010000, CRC(735260a3) SHA1(e08fff6314d7cb4e396107366fdc16dcbf7f5d67), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 16)" )
-GAME_CUSTOM( 199?, m4nnww__p, m4nnww, "cnubd.p1", 0x0000, 0x010000, CRC(fbe1ee39) SHA1(21bdaa6f9af686b4e44958ee09a131d0e12c2c53), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 17)" )
-GAME_CUSTOM( 199?, m4nnww__q, m4nnww, "cnud.p1", 0x0000, 0x010000, CRC(d3a0eff1) SHA1(2b18c3e14a43d072ae5702bc77fcac65dbd8305c), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 18)" )
-GAME_CUSTOM( 199?, m4nnww__r, m4nnww, "cnudk.p1", 0x0000, 0x010000, CRC(a7b506e8) SHA1(40d712076b434a339dfa60b937eec91038568312), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 19)" )
-GAME_CUSTOM( 199?, m4nnww__s, m4nnww, "cnudr.p1", 0x0000, 0x010000, CRC(e163caea) SHA1(273a13567e5cb7fd071dfc9c8a9bc923e25d7679), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 20)" )
-GAME_CUSTOM( 199?, m4nnww__t, m4nnww, "cnudy.p1", 0x0000, 0x010000, CRC(7c08e204) SHA1(34c906f3a284fde0c997232738a51b709a0dca93), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 21)" )
-GAME_CUSTOM( 199?, m4nnww__u, m4nnww, "cnuk.p1", 0x0000, 0x010000, CRC(b9c08873) SHA1(9c5a754a7b57c8ab4334afdcbe30884a7181ac48), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 22)" )
-GAME_CUSTOM( 199?, m4nnww__v, m4nnww, "cnur.p1", 0x0000, 0x010000, CRC(729d89ea) SHA1(c98a89dd8f85dde7ab005bcb7eba1fcc31162e08), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 23)" )
-GAME_CUSTOM( 199?, m4nnww__w, m4nnww, "cnus.p1", 0x0000, 0x010000, CRC(6afee8e1) SHA1(35464eef29a5a66b8efea890987ff120ca5b7409), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 24)" )
-GAME_CUSTOM( 199?, m4nnww__x, m4nnww, "cnuy.p1", 0x0000, 0x010000, CRC(eff6a104) SHA1(021baf5fe88defca05627a85501622d86e846233), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 25)" )
+GAME_CUSTOM( 199?, m4nnww__w, m4nnww, "cnus.p1", 0x0000, 0x010000, CRC(6afee8e1) SHA1(35464eef29a5a66b8efea890987ff120ca5b7409), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__n, m4nnww, "cnuad.p1", 0x0000, 0x010000, CRC(f4b28628) SHA1(7323525a44477e2a3f89562f6094ed7bb47a16cc), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 AD / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__o, m4nnww, "cnub.p1", 0x0000, 0x010000, CRC(735260a3) SHA1(e08fff6314d7cb4e396107366fdc16dcbf7f5d67), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 B / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__p, m4nnww, "cnubd.p1", 0x0000, 0x010000, CRC(fbe1ee39) SHA1(21bdaa6f9af686b4e44958ee09a131d0e12c2c53), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 BD / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__q, m4nnww, "cnud.p1", 0x0000, 0x010000, CRC(d3a0eff1) SHA1(2b18c3e14a43d072ae5702bc77fcac65dbd8305c), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 D / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__r, m4nnww, "cnudk.p1", 0x0000, 0x010000, CRC(a7b506e8) SHA1(40d712076b434a339dfa60b937eec91038568312), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 KD / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__s, m4nnww, "cnudr.p1", 0x0000, 0x010000, CRC(e163caea) SHA1(273a13567e5cb7fd071dfc9c8a9bc923e25d7679), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 RD / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__t, m4nnww, "cnudy.p1", 0x0000, 0x010000, CRC(7c08e204) SHA1(34c906f3a284fde0c997232738a51b709a0dca93), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 YD / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__u, m4nnww, "cnuk.p1", 0x0000, 0x010000, CRC(b9c08873) SHA1(9c5a754a7b57c8ab4334afdcbe30884a7181ac48), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 K / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__v, m4nnww, "cnur.p1", 0x0000, 0x010000, CRC(729d89ea) SHA1(c98a89dd8f85dde7ab005bcb7eba1fcc31162e08), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 R / NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__x, m4nnww, "cnuy.p1", 0x0000, 0x010000, CRC(eff6a104) SHA1(021baf5fe88defca05627a85501622d86e846233), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 Y / NN4 0.2)" )
// "(C)1991 BARCREST" and "NN3 0.1"
-GAME_CUSTOM( 199?, m4nnww__y, m4nnww, "nn3xad.p1", 0x0000, 0x010000, CRC(8ccfceb8) SHA1(762ab26826d3d2a4dd7999a71724389344e9dafb), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1XAD)" )
-GAME_CUSTOM( 199?, m4nnww__z, m4nnww, "nn3xb.p1", 0x0000, 0x010000, CRC(9b0dd473) SHA1(9975dafea8c7d6ccfc9f826adb1a0d3d0ed9740a), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 27)" )
-GAME_CUSTOM( 199?, m4nnww__0, m4nnww, "nn3xbd.p1", 0x0000, 0x010000, CRC(21bf4a89) SHA1(200c9ccc4bc2a93fcd0f68bb00ad4391bdeecda1), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 28)" )
-GAME_CUSTOM( 199?, m4nnww__1, m4nnww, "nn3xd.p1", 0x0000, 0x010000, CRC(11e22c45) SHA1(6da31eea7b25612d99cc79f6f9579622f105c862), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 29)" )
-GAME_CUSTOM( 199?, m4nnww__2, m4nnww, "nn3xdk.p1", 0x0000, 0x010000, CRC(0f4642c6) SHA1(53a0b8bc102c2b1c0db71887470b70852b09a4e9), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 30)" )
-GAME_CUSTOM( 199?, m4nnww__3, m4nnww, "nn3xdy.p1", 0x0000, 0x010000, CRC(ba3c1cf0) SHA1(ab94227018c3f9173e6a648749d455afd1ed36ce), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 31)" )
-GAME_CUSTOM( 199?, m4nnww__4, m4nnww, "nn3xk.p1", 0x0000, 0x010000, CRC(ec3a9831) SHA1(0b3ba86faf39cf3a1e42cb1c31fd2c50c24d65dc), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 32)" )
-GAME_CUSTOM( 199?, m4nnww__5, m4nnww, "nn3xr.p1", 0x0000, 0x010000, CRC(6416481c) SHA1(b06ed4964d9cbf403905504ac68abdab53131476), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 33)" )
-GAME_CUSTOM( 199?, m4nnww__6, m4nnww, "nn3xrd.p1", 0x0000, 0x010000, CRC(0fd3f9b9) SHA1(99115b217cfc54b52469ffc77e7a7592907c53ea), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 34)" )
-GAME_CUSTOM( 199?, m4nnww__7, m4nnww, "nn3xs.p1", 0x0000, 0x010000, CRC(13d02d21) SHA1(8e4dac8e60538884d3f3a92fc1bb9f41276be4c8), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 35)" )
-GAME_CUSTOM( 199?, m4nnww__8, m4nnww, "nn3xy.p1", 0x0000, 0x010000, CRC(8a5d0f4b) SHA1(ef727e7ee8bb20d1b201927186a1a4f83e1e7497), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 36)" )
+GAME_CUSTOM( 199?, m4nnww__7, m4nnww, "nn3xs.p1", 0x0000, 0x010000, CRC(13d02d21) SHA1(8e4dac8e60538884d3f3a92fc1bb9f41276be4c8), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 X)" )
+GAME_CUSTOM( 199?, m4nnww__y, m4nnww, "nn3xad.p1", 0x0000, 0x010000, CRC(8ccfceb8) SHA1(762ab26826d3d2a4dd7999a71724389344e9dafb), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 XAD)" )
+GAME_CUSTOM( 199?, m4nnww__z, m4nnww, "nn3xb.p1", 0x0000, 0x010000, CRC(9b0dd473) SHA1(9975dafea8c7d6ccfc9f826adb1a0d3d0ed9740a), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 BX)" )
+GAME_CUSTOM( 199?, m4nnww__0, m4nnww, "nn3xbd.p1", 0x0000, 0x010000, CRC(21bf4a89) SHA1(200c9ccc4bc2a93fcd0f68bb00ad4391bdeecda1), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 BXD)" )
+GAME_CUSTOM( 199?, m4nnww__1, m4nnww, "nn3xd.p1", 0x0000, 0x010000, CRC(11e22c45) SHA1(6da31eea7b25612d99cc79f6f9579622f105c862), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 XD)" )
+GAME_CUSTOM( 199?, m4nnww__2, m4nnww, "nn3xdk.p1", 0x0000, 0x010000, CRC(0f4642c6) SHA1(53a0b8bc102c2b1c0db71887470b70852b09a4e9), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 KXD)" )
+GAME_CUSTOM( 199?, m4nnww__3, m4nnww, "nn3xdy.p1", 0x0000, 0x010000, CRC(ba3c1cf0) SHA1(ab94227018c3f9173e6a648749d455afd1ed36ce), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 YXD)" )
+GAME_CUSTOM( 199?, m4nnww__4, m4nnww, "nn3xk.p1", 0x0000, 0x010000, CRC(ec3a9831) SHA1(0b3ba86faf39cf3a1e42cb1c31fd2c50c24d65dc), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 KX)" )
+GAME_CUSTOM( 199?, m4nnww__5, m4nnww, "nn3xr.p1", 0x0000, 0x010000, CRC(6416481c) SHA1(b06ed4964d9cbf403905504ac68abdab53131476), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 RX)" )
+GAME_CUSTOM( 199?, m4nnww__6, m4nnww, "nn3xrd.p1", 0x0000, 0x010000, CRC(0fd3f9b9) SHA1(99115b217cfc54b52469ffc77e7a7592907c53ea), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 RD)" ) // X not set here
+GAME_CUSTOM( 199?, m4nnww__8, m4nnww, "nn3xy.p1", 0x0000, 0x010000, CRC(8a5d0f4b) SHA1(ef727e7ee8bb20d1b201927186a1a4f83e1e7497), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 YX)" )
// "(C)1991 BARCREST" and "NN4 0.2"
-GAME_CUSTOM( 199?, m4nnww__9, m4nnww, "nn4ad.p1", 0x0000, 0x010000, CRC(827b832f) SHA1(4448ccb03282b9d39c6a00d02cea4d8ce2225b0e), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2AD)" )
-GAME_CUSTOM( 199?, m4nnww__aa, m4nnww, "nn4b.p1", 0x0000, 0x010000, CRC(65e16330) SHA1(cfd18693155b4b7c5692064a2f693eb198d02749), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 38)" )
-GAME_CUSTOM( 199?, m4nnww__ab, m4nnww, "nn4bd.p1", 0x0000, 0x010000, CRC(b467ee65) SHA1(79030aa06ca8fd9c8becff62d56628939e9b5075), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 39)" )
-GAME_CUSTOM( 199?, m4nnww__ac, m4nnww, "nn4d.p1", 0x0000, 0x010000, CRC(548dacb9) SHA1(55949910374fae419ba015b70780e3e9e269caa0), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 40)" )
-GAME_CUSTOM( 199?, m4nnww__ad, m4nnww, "nn4dk.p1", 0x0000, 0x010000, CRC(9053aa15) SHA1(99d1e6d8776434a4ec69a565d673b45402467b8d), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 41)" )
-GAME_CUSTOM( 199?, m4nnww__ae, m4nnww, "nn4dy.p1", 0x0000, 0x010000, CRC(5fcd5a18) SHA1(b1b3283a303114ca1daab89cea44211ece7188ef), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 42)" )
-GAME_CUSTOM( 199?, m4nnww__af, m4nnww, "nn4k.p1", 0x0000, 0x010000, CRC(09a808c0) SHA1(c74c3acb2c1f52fd1e83003fb1a022f80f55e0b8), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 43)" )
-GAME_CUSTOM( 199?, m4nnww__ag, m4nnww, "nn4s.p1", 0x0000, 0x010000, CRC(ec4f01ee) SHA1(443da7ed359a3e208417f7bca0dc52a09594a927), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 44)" )
-GAME_CUSTOM( 199?, m4nnww__ah, m4nnww, "nn4y.p1", 0x0000, 0x010000, CRC(a1eff941) SHA1(369ec89b82f97c3d8266d41e5eb27be7770bdca4), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 45)" )
+GAME_CUSTOM( 199?, m4nnww__ag, m4nnww, "nn4s.p1", 0x0000, 0x010000, CRC(ec4f01ee) SHA1(443da7ed359a3e208417f7bca0dc52a09594a927), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2)" )
+GAME_CUSTOM( 199?, m4nnww__9, m4nnww, "nn4ad.p1", 0x0000, 0x010000, CRC(827b832f) SHA1(4448ccb03282b9d39c6a00d02cea4d8ce2225b0e), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 AD)" )
+GAME_CUSTOM( 199?, m4nnww__aa, m4nnww, "nn4b.p1", 0x0000, 0x010000, CRC(65e16330) SHA1(cfd18693155b4b7c5692064a2f693eb198d02749), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 B)" )
+GAME_CUSTOM( 199?, m4nnww__ab, m4nnww, "nn4bd.p1", 0x0000, 0x010000, CRC(b467ee65) SHA1(79030aa06ca8fd9c8becff62d56628939e9b5075), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 BD)" )
+GAME_CUSTOM( 199?, m4nnww__ac, m4nnww, "nn4d.p1", 0x0000, 0x010000, CRC(548dacb9) SHA1(55949910374fae419ba015b70780e3e9e269caa0), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 D)" )
+GAME_CUSTOM( 199?, m4nnww__ad, m4nnww, "nn4dk.p1", 0x0000, 0x010000, CRC(9053aa15) SHA1(99d1e6d8776434a4ec69a565d673b45402467b8d), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 KD)" )
+GAME_CUSTOM( 199?, m4nnww__ae, m4nnww, "nn4dy.p1", 0x0000, 0x010000, CRC(5fcd5a18) SHA1(b1b3283a303114ca1daab89cea44211ece7188ef), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 YD)" )
+GAME_CUSTOM( 199?, m4nnww__af, m4nnww, "nn4k.p1", 0x0000, 0x010000, CRC(09a808c0) SHA1(c74c3acb2c1f52fd1e83003fb1a022f80f55e0b8), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 K)" )
+GAME_CUSTOM( 199?, m4nnww__ah, m4nnww, "nn4y.p1", 0x0000, 0x010000, CRC(a1eff941) SHA1(369ec89b82f97c3d8266d41e5eb27be7770bdca4), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 Y)" )
// "(C)1991 BARCREST" and "NNU 5.2"
-GAME_CUSTOM( 199?, m4nnww__at, m4nnww, "nnus.p1", 0x0000, 0x010000, CRC(3e3a829e) SHA1(5aa3a56e007bad4dacdc3c993c87569e4250eecd), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 57)" )
-GAME_CUSTOM( 199?, m4nnww__au, m4nnww, "nnux.p1", 0x0000, 0x010000, CRC(38806ebf) SHA1(a897a33e3260de1b284b01a65d1da7cbe05d51f8), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 58)" )
-GAME_CUSTOM( 199?, m4nnww__av, m4nnww, "nnuxb.p1", 0x0000, 0x010000, CRC(c4dba8df) SHA1(0f8516cc9b2f0be9d1c936667974cd8116018dad), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 59)" )
-GAME_CUSTOM( 199?, m4nnww__aw, m4nnww, "nnuxc.p1", 0x0000, 0x010000, CRC(797e0c4d) SHA1(211b0a804643731275d0075461f8d94985fde1db), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 60)" )
+GAME_CUSTOM( 199?, m4nnww__at, m4nnww, "nnus.p1", 0x0000, 0x010000, CRC(3e3a829e) SHA1(5aa3a56e007bad4dacdc3c993c87569e4250eecd), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 5.2)" )
+GAME_CUSTOM( 199?, m4nnww__au, m4nnww, "nnux.p1", 0x0000, 0x010000, CRC(38806ebf) SHA1(a897a33e3260de1b284b01a65d1da7cbe05d51f8), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 5.2 X)" )
+GAME_CUSTOM( 199?, m4nnww__av, m4nnww, "nnuxb.p1", 0x0000, 0x010000, CRC(c4dba8df) SHA1(0f8516cc9b2f0be9d1c936667974cd8116018dad), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 5.2 BX)" )
+GAME_CUSTOM( 199?, m4nnww__aw, m4nnww, "nnuxc.p1", 0x0000, 0x010000, CRC(797e0c4d) SHA1(211b0a804643731275d0075461f8d94985fde1db), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 5.2 CX)" )
// "(C)1991 BARCREST" and "NNU 4.0"
-GAME_CUSTOM( 199?, m4nnww__as, m4nnww, "nnu40x.bin", 0x0000, 0x010000, CRC(63e3d7df) SHA1(1a5a00185ec5150f5b05765f06297d7884540aaf), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 4.0X)" )
+GAME_CUSTOM( 199?, m4nnww__as, m4nnww, "nnu40x.bin", 0x0000, 0x010000, CRC(63e3d7df) SHA1(1a5a00185ec5150f5b05765f06297d7884540aaf), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 4.0 X)" )
// "(C)1991 BARCREST" and "NN4 0.1" (startup CH3 0.1)
-GAME_CUSTOM( 199?, m4nnww__ax, m4nnww, "nnwink.hex", 0x0000, 0x010000, CRC(f77bd6c4) SHA1(1631040fbfe3fc37c2cbd3145857c31d16b92bde), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CH3 0.1B / NN4 0.1)" )
+GAME_CUSTOM( 199?, m4nnww__ax, m4nnww, "nnwink.hex", 0x0000, 0x010000, CRC(f77bd6c4) SHA1(1631040fbfe3fc37c2cbd3145857c31d16b92bde), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CH3 0.1 B / NN4 0.1)" )
// "(C)1991 BARCREST" and "NN4 0.1" (startup CF3 0.1)
GAME_CUSTOM( 199?, m4nnww__a, m4nnww, "cf301s", 0x0000, 0x010000, CRC(1d8abf59) SHA1(81e47797baddd777fbbb1b1e044df1bfe3d49cb2), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CF3 0.1 / NN4 0.1)" )
// no copyright string and "NNU 3.4"
@@ -1693,85 +1693,85 @@ GAME_CUSTOM( 199?, m4nnww__az, m4nnww, "wink2010", 0x0000, 0x010000, CRC(0
// "(C)1993 BARCREST" and "RUN 0.5"
GAME_CUSTOM( 199?, m4rfym, 0, "runs.p1", 0x0000, 0x010000, CRC(e20f5a06) SHA1(f0f71f8870db7003fce96f1dfe09804cf17c3ab3), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5)" )
-GAME_CUSTOM( 199?, m4rfym__ar, m4rfym, "rund.p1", 0x0000, 0x010000, CRC(2be2a66d) SHA1(a66d74ccf1783912673cfcb6c1ae7fbb6d70ca0e), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5D)" )
-GAME_CUSTOM( 199?, m4rfym__ao, m4rfym, "runc.p1", 0x0000, 0x010000, CRC(09f53ddf) SHA1(f46be95bfacac751102a5f4d4a0917a5e51a653e), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5C)" )
-GAME_CUSTOM( 199?, m4rfym__ap, m4rfym, "rundy.p1", 0x0000, 0x010000, CRC(a6f69a24) SHA1(8370287dcc890fcb7529d3d4c7a3c2e2e688f6a8), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5YD)" )
-GAME_CUSTOM( 199?, m4rfym__aq, m4rfym, "runk.p1", 0x0000, 0x010000, CRC(a2828b82) SHA1(0ae371a441df679fd9c699771ae9f58ce960d4a1), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5K)" )
-GAME_CUSTOM( 199?, m4rfym__as, m4rfym, "runy.p1", 0x0000, 0x010000, CRC(0e311ab4) SHA1(c98540c07e9cc23ec70ecfbcb2f4d66f2c716fc3), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5Y)" )
+GAME_CUSTOM( 199?, m4rfym__ar, m4rfym, "rund.p1", 0x0000, 0x010000, CRC(2be2a66d) SHA1(a66d74ccf1783912673cfcb6c1ae7fbb6d70ca0e), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5 D)" )
+GAME_CUSTOM( 199?, m4rfym__ao, m4rfym, "runc.p1", 0x0000, 0x010000, CRC(09f53ddf) SHA1(f46be95bfacac751102a5f4d4a0917a5e51a653e), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5 C)" )
+GAME_CUSTOM( 199?, m4rfym__ap, m4rfym, "rundy.p1", 0x0000, 0x010000, CRC(a6f69a24) SHA1(8370287dcc890fcb7529d3d4c7a3c2e2e688f6a8), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5 YD)" )
+GAME_CUSTOM( 199?, m4rfym__aq, m4rfym, "runk.p1", 0x0000, 0x010000, CRC(a2828b82) SHA1(0ae371a441df679fd9c699771ae9f58ce960d4a1), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5 K)" )
+GAME_CUSTOM( 199?, m4rfym__as, m4rfym, "runy.p1", 0x0000, 0x010000, CRC(0e311ab4) SHA1(c98540c07e9cc23ec70ecfbcb2f4d66f2c716fc3), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5 Y)" )
// "(C)1993 BARCREST" and "AP1 0.1"
GAME_CUSTOM( 199?, m4rfym__h, m4rfym, "ap1s.p1", 0x0000, 0x010000, CRC(7474509c) SHA1(c87e20f10806ec87fd33f97b43b8378d304f7d67), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1)" )
-GAME_CUSTOM( 199?, m4rfym__a, m4rfym, "ap1ad.p1", 0x0000, 0x010000, CRC(d1adbf80) SHA1(08801f38b8ba5034fd83b53b6cfff864104525b4), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1AD)" )
-GAME_CUSTOM( 199?, m4rfym__b, m4rfym, "ap1b.p1", 0x0000, 0x010000, CRC(4939f186) SHA1(389d46d603e75d3aaeeca990f4e1143c61f1565f), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 3)" )
-GAME_CUSTOM( 199?, m4rfym__c, m4rfym, "ap1bd.p1", 0x0000, 0x010000, CRC(08a33b2c) SHA1(ef38e9cd0c9bc8393530e36060c803d1250c46a6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 4)" )
-GAME_CUSTOM( 199?, m4rfym__d, m4rfym, "ap1d.p1", 0x0000, 0x010000, CRC(edef44fe) SHA1(4907804c1bebc1f13aa3eb9dad0e9189de8e9601), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 5)" )
-GAME_CUSTOM( 199?, m4rfym__e, m4rfym, "ap1dk.p1", 0x0000, 0x010000, CRC(873a402c) SHA1(1315a4ad18544ca5d65526ea0f620cac528e4cad), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4rfym__f, m4rfym, "ap1dy.p1", 0x0000, 0x010000, CRC(e8436c00) SHA1(1c2f171e55c3519d63d6c4dd0d56df4e1daad6af), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 7)" )
-GAME_CUSTOM( 199?, m4rfym__g, m4rfym, "ap1k.p1", 0x0000, 0x010000, CRC(9afeb1e7) SHA1(5fc5d73a2c976d227a0598fb1dd802c6336415d1), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 8)" )
-GAME_CUSTOM( 199?, m4rfym__i, m4rfym, "ap1y.p1", 0x0000, 0x010000, CRC(152bf7cb) SHA1(8dd8b621f9dac430c293b29ca03814fc21a148b9), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 10)" )
+GAME_CUSTOM( 199?, m4rfym__a, m4rfym, "ap1ad.p1", 0x0000, 0x010000, CRC(d1adbf80) SHA1(08801f38b8ba5034fd83b53b6cfff864104525b4), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1 AD)" )
+GAME_CUSTOM( 199?, m4rfym__b, m4rfym, "ap1b.p1", 0x0000, 0x010000, CRC(4939f186) SHA1(389d46d603e75d3aaeeca990f4e1143c61f1565f), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1 B)" )
+GAME_CUSTOM( 199?, m4rfym__c, m4rfym, "ap1bd.p1", 0x0000, 0x010000, CRC(08a33b2c) SHA1(ef38e9cd0c9bc8393530e36060c803d1250c46a6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1 BD)" )
+GAME_CUSTOM( 199?, m4rfym__d, m4rfym, "ap1d.p1", 0x0000, 0x010000, CRC(edef44fe) SHA1(4907804c1bebc1f13aa3eb9dad0e9189de8e9601), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1 D)" )
+GAME_CUSTOM( 199?, m4rfym__e, m4rfym, "ap1dk.p1", 0x0000, 0x010000, CRC(873a402c) SHA1(1315a4ad18544ca5d65526ea0f620cac528e4cad), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1 KD)" )
+GAME_CUSTOM( 199?, m4rfym__f, m4rfym, "ap1dy.p1", 0x0000, 0x010000, CRC(e8436c00) SHA1(1c2f171e55c3519d63d6c4dd0d56df4e1daad6af), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1 YD)" )
+GAME_CUSTOM( 199?, m4rfym__g, m4rfym, "ap1k.p1", 0x0000, 0x010000, CRC(9afeb1e7) SHA1(5fc5d73a2c976d227a0598fb1dd802c6336415d1), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1 K)" )
+GAME_CUSTOM( 199?, m4rfym__i, m4rfym, "ap1y.p1", 0x0000, 0x010000, CRC(152bf7cb) SHA1(8dd8b621f9dac430c293b29ca03814fc21a148b9), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1 Y)" )
// "(C)1993 BARCREST" and "AP5 0.2"
GAME_CUSTOM( 199?, m4rfym__s, m4rfym, "ap502s.p1", 0x0000, 0x010000, CRC(8502a09a) SHA1(e635552b7f0c7b2e142d7f4d0f1fd93edac6132d), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2)" )
-GAME_CUSTOM( 199?, m4rfym__j, m4rfym, "ap502ad.p1", 0x0000, 0x010000, CRC(ab059e57) SHA1(45ba91989b0fd1a44628f696b78eae2a349e3e4a), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2AD)" )
-GAME_CUSTOM( 199?, m4rfym__k, m4rfym, "ap502b.p1", 0x0000, 0x010000, CRC(9ed27a6e) SHA1(2d655305a178e4ebe43f3d429dfec5a2ef6b9873), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 12)" )
-GAME_CUSTOM( 199?, m4rfym__l, m4rfym, "ap502bd.p1", 0x0000, 0x010000, CRC(48e83fcd) SHA1(3e2de0416722df5004f00baae2d3f6846ff596e5), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 13)" )
-GAME_CUSTOM( 199?, m4rfym__m, m4rfym, "ap502d.p1", 0x0000, 0x010000, CRC(d0560301) SHA1(c35e97391c588f6567eeb253eb9de59bec9e1724), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 14)" )
-GAME_CUSTOM( 199?, m4rfym__n, m4rfym, "ap502dk.p1", 0x0000, 0x010000, CRC(82aa8d80) SHA1(e42d10537dcc5aaae59472681b215b0eb0821c25), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 15)" )
-GAME_CUSTOM( 199?, m4rfym__o, m4rfym, "ap502dr.p1", 0x0000, 0x010000, CRC(1cfb3102) SHA1(b1d3a533de0ff93e15f7c039e75af0ef6c8eec57), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 16)" )
-GAME_CUSTOM( 199?, m4rfym__p, m4rfym, "ap502dy.p1", 0x0000, 0x010000, CRC(819019ec) SHA1(36d2093a7a592850533d4206e0c9dd28cdc17568), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 17)" )
-GAME_CUSTOM( 199?, m4rfym__q, m4rfym, "ap502k.p1", 0x0000, 0x010000, CRC(5064a894) SHA1(3e67358fe5ed9bfac05f621d7e72e5be7aae67df), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 18)" )
-GAME_CUSTOM( 199?, m4rfym__r, m4rfym, "ap502r.p1", 0x0000, 0x010000, CRC(2503c7da) SHA1(2478bab8b19ab68ff01be8fae2e86e47894b3d7c), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 19)" )
-GAME_CUSTOM( 199?, m4rfym__t, m4rfym, "ap502y.p1", 0x0000, 0x010000, CRC(b868ef34) SHA1(a773503afd2f59b71e0b9a7e202d3e7120ec88ff), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 21)" )
+GAME_CUSTOM( 199?, m4rfym__j, m4rfym, "ap502ad.p1", 0x0000, 0x010000, CRC(ab059e57) SHA1(45ba91989b0fd1a44628f696b78eae2a349e3e4a), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 AD)" )
+GAME_CUSTOM( 199?, m4rfym__k, m4rfym, "ap502b.p1", 0x0000, 0x010000, CRC(9ed27a6e) SHA1(2d655305a178e4ebe43f3d429dfec5a2ef6b9873), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 B)" )
+GAME_CUSTOM( 199?, m4rfym__l, m4rfym, "ap502bd.p1", 0x0000, 0x010000, CRC(48e83fcd) SHA1(3e2de0416722df5004f00baae2d3f6846ff596e5), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 BD)" )
+GAME_CUSTOM( 199?, m4rfym__m, m4rfym, "ap502d.p1", 0x0000, 0x010000, CRC(d0560301) SHA1(c35e97391c588f6567eeb253eb9de59bec9e1724), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 D)" )
+GAME_CUSTOM( 199?, m4rfym__n, m4rfym, "ap502dk.p1", 0x0000, 0x010000, CRC(82aa8d80) SHA1(e42d10537dcc5aaae59472681b215b0eb0821c25), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 KD)" )
+GAME_CUSTOM( 199?, m4rfym__o, m4rfym, "ap502dr.p1", 0x0000, 0x010000, CRC(1cfb3102) SHA1(b1d3a533de0ff93e15f7c039e75af0ef6c8eec57), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 RD)" )
+GAME_CUSTOM( 199?, m4rfym__p, m4rfym, "ap502dy.p1", 0x0000, 0x010000, CRC(819019ec) SHA1(36d2093a7a592850533d4206e0c9dd28cdc17568), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 YD)" )
+GAME_CUSTOM( 199?, m4rfym__q, m4rfym, "ap502k.p1", 0x0000, 0x010000, CRC(5064a894) SHA1(3e67358fe5ed9bfac05f621d7e72e5be7aae67df), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 K)" )
+GAME_CUSTOM( 199?, m4rfym__r, m4rfym, "ap502r.p1", 0x0000, 0x010000, CRC(2503c7da) SHA1(2478bab8b19ab68ff01be8fae2e86e47894b3d7c), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 R)" )
+GAME_CUSTOM( 199?, m4rfym__t, m4rfym, "ap502y.p1", 0x0000, 0x010000, CRC(b868ef34) SHA1(a773503afd2f59b71e0b9a7e202d3e7120ec88ff), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 Y)" )
// "(C)1993 BARCREST" and "APR 0.1"
GAME_CUSTOM( 199?, m4rfym__2, m4rfym, "aprs.p1", 0x0000, 0x010000, CRC(a114a96a) SHA1(b0a9091cac86750329513a0927dd39b76995b2f2), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1)" )
-GAME_CUSTOM( 199?, m4rfym__u, m4rfym, "aprad.p1", 0x0000, 0x010000, CRC(936f59ac) SHA1(325708d965d56a9a7482dbeaa089ca871d5c01b5), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1AD)" )
-GAME_CUSTOM( 199?, m4rfym__v, m4rfym, "aprb.p1", 0x0000, 0x010000, CRC(72ad662a) SHA1(11f1695e05ecf34a58f8df3ffbc72ab2dd7d02c9), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 23)" )
-GAME_CUSTOM( 199?, m4rfym__w, m4rfym, "aprbd.p1", 0x0000, 0x010000, CRC(13af990d) SHA1(604d2173e3d6d25252b30b5bf386b53470c35581), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 24)" )
-GAME_CUSTOM( 199?, m4rfym__x, m4rfym, "aprc.p1", 0x0000, 0x010000, CRC(fd3ece9a) SHA1(e11d1d258a415865f7477cdfddcd47e9bdb1c9b5), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 25)" )
-GAME_CUSTOM( 199?, m4rfym__y, m4rfym, "aprd.p1", 0x0000, 0x010000, CRC(8c19b732) SHA1(e7aeea41cf649fe2a28414ddedacdf72f56d32fe), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 26)" )
-GAME_CUSTOM( 199?, m4rfym__z, m4rfym, "aprdk.p1", 0x0000, 0x010000, CRC(58a41fcd) SHA1(e8c92dfb5c9662c90d363b5b7a7e0a4b4894d4cb), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 27)" )
-GAME_CUSTOM( 199?, m4rfym__0, m4rfym, "aprdy.p1", 0x0000, 0x010000, CRC(9496cfad) SHA1(cb24779db99d283f1df86864886f21ad333cb98b), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 28)" )
-GAME_CUSTOM( 199?, m4rfym__1, m4rfym, "aprk.p1", 0x0000, 0x010000, CRC(7277ef07) SHA1(dc509d125f8d377d4b2cb011d32be5bdba1daa17), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 29)" )
-GAME_CUSTOM( 199?, m4rfym__3, m4rfym, "apry.p1", 0x0000, 0x010000, CRC(bf2120bc) SHA1(473374a9510dd53e39b94bfcf1369e13647239e6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 31)" )
+GAME_CUSTOM( 199?, m4rfym__u, m4rfym, "aprad.p1", 0x0000, 0x010000, CRC(936f59ac) SHA1(325708d965d56a9a7482dbeaa089ca871d5c01b5), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 AD)" )
+GAME_CUSTOM( 199?, m4rfym__v, m4rfym, "aprb.p1", 0x0000, 0x010000, CRC(72ad662a) SHA1(11f1695e05ecf34a58f8df3ffbc72ab2dd7d02c9), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 B)" )
+GAME_CUSTOM( 199?, m4rfym__w, m4rfym, "aprbd.p1", 0x0000, 0x010000, CRC(13af990d) SHA1(604d2173e3d6d25252b30b5bf386b53470c35581), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 BD)" )
+GAME_CUSTOM( 199?, m4rfym__x, m4rfym, "aprc.p1", 0x0000, 0x010000, CRC(fd3ece9a) SHA1(e11d1d258a415865f7477cdfddcd47e9bdb1c9b5), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 C)" )
+GAME_CUSTOM( 199?, m4rfym__y, m4rfym, "aprd.p1", 0x0000, 0x010000, CRC(8c19b732) SHA1(e7aeea41cf649fe2a28414ddedacdf72f56d32fe), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 D)" )
+GAME_CUSTOM( 199?, m4rfym__z, m4rfym, "aprdk.p1", 0x0000, 0x010000, CRC(58a41fcd) SHA1(e8c92dfb5c9662c90d363b5b7a7e0a4b4894d4cb), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 KD)" )
+GAME_CUSTOM( 199?, m4rfym__0, m4rfym, "aprdy.p1", 0x0000, 0x010000, CRC(9496cfad) SHA1(cb24779db99d283f1df86864886f21ad333cb98b), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 YD)" )
+GAME_CUSTOM( 199?, m4rfym__1, m4rfym, "aprk.p1", 0x0000, 0x010000, CRC(7277ef07) SHA1(dc509d125f8d377d4b2cb011d32be5bdba1daa17), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 K)" )
+GAME_CUSTOM( 199?, m4rfym__3, m4rfym, "apry.p1", 0x0000, 0x010000, CRC(bf2120bc) SHA1(473374a9510dd53e39b94bfcf1369e13647239e6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 Y)" )
// "(C)1993 BARCREST" and "RU5 0.1"
GAME_CUSTOM( 199?, m4rfym__af, m4rfym, "ru5s.p1", 0x0000, 0x010000, CRC(41795ea3) SHA1(6bfb6da6c0f7e762d628ce8a9dcdcbc3c0326ca6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1)" )
-GAME_CUSTOM( 199?, m4rfym__8, m4rfym, "ru5ad.p1", 0x0000, 0x010000, CRC(1c3e1f39) SHA1(a45cdaaa875e52cf5cd5adf986c98f4a22a14785), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1AD)" )
-GAME_CUSTOM( 199?, m4rfym__9, m4rfym, "ru5b.p1", 0x0000, 0x010000, CRC(41e44d37) SHA1(8eb409b96864fb0f7c3bf5c66a20a63c8cbc68af), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 37)" )
-GAME_CUSTOM( 199?, m4rfym__aa, m4rfym, "ru5bd.p1", 0x0000, 0x010000, CRC(8d4db415) SHA1(b023a13f89b7e5c2f72fd213179f723621871faf), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 38)" )
-GAME_CUSTOM( 199?, m4rfym__ab, m4rfym, "ru5d.p1", 0x0000, 0x010000, CRC(fcb70a63) SHA1(df81c3c26c066c1326b20b9e0dda2863ee9635a6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 39)" )
-GAME_CUSTOM( 199?, m4rfym__ac, m4rfym, "ru5dk.p1", 0x0000, 0x010000, CRC(b4d83863) SHA1(02aebf94773d0a9454119b4ad663b6d8475fc8d3), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 40)" )
-GAME_CUSTOM( 199?, m4rfym__ad, m4rfym, "ru5dy.p1", 0x0000, 0x010000, CRC(66375af5) SHA1(0a6d10357c163e5e27e7436f8190070e36e3ef90), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 41)" )
-GAME_CUSTOM( 199?, m4rfym__ae, m4rfym, "ru5k.p1", 0x0000, 0x010000, CRC(7871c141) SHA1(e1e9d2972c87d2835b1e5a62502160cb4abb7736), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 42)" )
-GAME_CUSTOM( 199?, m4rfym__ag, m4rfym, "ru5y.p1", 0x0000, 0x010000, CRC(ee217541) SHA1(68474c2e430d95ded2856183b9a02be917d092d6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 44)" )
+GAME_CUSTOM( 199?, m4rfym__8, m4rfym, "ru5ad.p1", 0x0000, 0x010000, CRC(1c3e1f39) SHA1(a45cdaaa875e52cf5cd5adf986c98f4a22a14785), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1 AD)" )
+GAME_CUSTOM( 199?, m4rfym__9, m4rfym, "ru5b.p1", 0x0000, 0x010000, CRC(41e44d37) SHA1(8eb409b96864fb0f7c3bf5c66a20a63c8cbc68af), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1 B)" )
+GAME_CUSTOM( 199?, m4rfym__aa, m4rfym, "ru5bd.p1", 0x0000, 0x010000, CRC(8d4db415) SHA1(b023a13f89b7e5c2f72fd213179f723621871faf), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1 BD)" )
+GAME_CUSTOM( 199?, m4rfym__ab, m4rfym, "ru5d.p1", 0x0000, 0x010000, CRC(fcb70a63) SHA1(df81c3c26c066c1326b20b9e0dda2863ee9635a6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1 D)" )
+GAME_CUSTOM( 199?, m4rfym__ac, m4rfym, "ru5dk.p1", 0x0000, 0x010000, CRC(b4d83863) SHA1(02aebf94773d0a9454119b4ad663b6d8475fc8d3), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1 KD)" )
+GAME_CUSTOM( 199?, m4rfym__ad, m4rfym, "ru5dy.p1", 0x0000, 0x010000, CRC(66375af5) SHA1(0a6d10357c163e5e27e7436f8190070e36e3ef90), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1 YD)" )
+GAME_CUSTOM( 199?, m4rfym__ae, m4rfym, "ru5k.p1", 0x0000, 0x010000, CRC(7871c141) SHA1(e1e9d2972c87d2835b1e5a62502160cb4abb7736), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1 K)" )
+GAME_CUSTOM( 199?, m4rfym__ag, m4rfym, "ru5y.p1", 0x0000, 0x010000, CRC(ee217541) SHA1(68474c2e430d95ded2856183b9a02be917d092d6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1 Y)" )
// "(C)1993 BARCREST" and "RU8 0.1"
GAME_CUSTOM( 199?, m4rfym__am, m4rfym, "ru8s.p1", 0x0000, 0x010000, CRC(d6ce5891) SHA1(c130e7bf614c67767c9af6f38e3cd41ce63d11ef), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU8 0.1)" )
-GAME_CUSTOM( 199?, m4rfym__ah, m4rfym, "ru8c.p1", 0x0000, 0x010000, CRC(93290724) SHA1(37b17b08f77b308289d4392900576dc66a0377eb), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU8 0.1C)" )
-GAME_CUSTOM( 199?, m4rfym__ai, m4rfym, "ru8d.p1", 0x0000, 0x010000, CRC(3e7d6ebb) SHA1(a836a52aef9fe4a9021835e99109b7fefb4ead76), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 46)" )
-GAME_CUSTOM( 199?, m4rfym__aj, m4rfym, "ru8dk.p1", 0x0000, 0x010000, CRC(b2983dc1) SHA1(412bf4a643c807371fa465fb5f9a85bc3e46623d), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 47)" )
-GAME_CUSTOM( 199?, m4rfym__ak, m4rfym, "ru8dy.p1", 0x0000, 0x010000, CRC(7d06cdcc) SHA1(d68f6ee59eb7689df30412288db4e9ee6c4bf178), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 48)" )
-GAME_CUSTOM( 199?, m4rfym__al, m4rfym, "ru8k.p1", 0x0000, 0x010000, CRC(42f6226e) SHA1(c4bac8efd9c17f96dd9d973e9f64c85ceeacb36b), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 49)" )
-GAME_CUSTOM( 199?, m4rfym__an, m4rfym, "ru8y.p1", 0x0000, 0x010000, CRC(f1fc1e75) SHA1(f6f1008349505ee0c494fcdde27db2a15147b6cb), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 51)" )
+GAME_CUSTOM( 199?, m4rfym__ah, m4rfym, "ru8c.p1", 0x0000, 0x010000, CRC(93290724) SHA1(37b17b08f77b308289d4392900576dc66a0377eb), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU8 0.1 C)" )
+GAME_CUSTOM( 199?, m4rfym__ai, m4rfym, "ru8d.p1", 0x0000, 0x010000, CRC(3e7d6ebb) SHA1(a836a52aef9fe4a9021835e99109b7fefb4ead76), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU8 0.1 D)" )
+GAME_CUSTOM( 199?, m4rfym__aj, m4rfym, "ru8dk.p1", 0x0000, 0x010000, CRC(b2983dc1) SHA1(412bf4a643c807371fa465fb5f9a85bc3e46623d), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU8 0.1 KD)" )
+GAME_CUSTOM( 199?, m4rfym__ak, m4rfym, "ru8dy.p1", 0x0000, 0x010000, CRC(7d06cdcc) SHA1(d68f6ee59eb7689df30412288db4e9ee6c4bf178), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU8 0.1 YD)" )
+GAME_CUSTOM( 199?, m4rfym__al, m4rfym, "ru8k.p1", 0x0000, 0x010000, CRC(42f6226e) SHA1(c4bac8efd9c17f96dd9d973e9f64c85ceeacb36b), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU8 0.1 K)" )
+GAME_CUSTOM( 199?, m4rfym__an, m4rfym, "ru8y.p1", 0x0000, 0x010000, CRC(f1fc1e75) SHA1(f6f1008349505ee0c494fcdde27db2a15147b6cb), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU8 0.1 Y)" )
// "(C)1993 BARCREST" and "RUT 0.1"
GAME_CUSTOM( 199?, m4rfym__a0, m4rfym, "ruts.p1", 0x0000, 0x010000, CRC(efaf4e03) SHA1(da19d6e28a6727eb9afb69c23fd5685f0dbcc31a), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1)" )
-GAME_CUSTOM( 199?, m4rfym__at, m4rfym, "rutad.p1", 0x0000, 0x010000, CRC(f27090c9) SHA1(28b7bb8046f67a3f8b90069de845b0b791b57078), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1AD)" )
-GAME_CUSTOM( 199?, m4rfym__au, m4rfym, "rutb.p1", 0x0000, 0x010000, CRC(cb7a74bf) SHA1(24274c7e3b40642d698f5c3a9a10cfeb23faaf1b), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 58)" )
-GAME_CUSTOM( 199?, m4rfym__av, m4rfym, "rutbd.p1", 0x0000, 0x010000, CRC(19aba8f2) SHA1(cb726130837149c25adb5d87718b72259cb63a63), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 59)" )
-GAME_CUSTOM( 199?, m4rfym__aw, m4rfym, "rutd.p1", 0x0000, 0x010000, CRC(16a872bd) SHA1(47ad5eb9b473805e2eb86e0d4d9ef4b2e6e3c926), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 60)" )
-GAME_CUSTOM( 199?, m4rfym__ax, m4rfym, "rutdk.p1", 0x0000, 0x010000, CRC(a8259673) SHA1(443081395ea0c1b0a07e6cd4b17670b3e01bb50f), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 61)" )
-GAME_CUSTOM( 199?, m4rfym__ay, m4rfym, "rutdy.p1", 0x0000, 0x010000, CRC(6b799f68) SHA1(87482236f1116983e80a7f190710524d3809cd3a), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 62)" )
-GAME_CUSTOM( 199?, m4rfym__az, m4rfym, "rutk.p1", 0x0000, 0x010000, CRC(20962e5e) SHA1(0be43050d403750b67c796a007b503e132014f4c), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 63)" )
-GAME_CUSTOM( 199?, m4rfym__a1, m4rfym, "ruty.p1", 0x0000, 0x010000, CRC(abb708c5) SHA1(6fe3b52a0ba484576fc83ed35aefeda01d275aec), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 65)" )
-// "(C)1996 B.W.B." and "RUC 1.3" (hack?)
-GAME_CUSTOM( 199?, m4rfym__6, m4rfym, "rfym510l", 0x0000, 0x010000, CRC(24af47f3) SHA1(3d1ec9b013f3f7b497cfb62b42fbb2fa914b24b6), "Bwb","Run For Your Money (Barcrest) (MPU4) (RUC 1.3, hack?, set 1)" )
-GAME_CUSTOM( 199?, m4rfym__a3, m4rfym, "rfym5.10", 0x0000, 0x010000, CRC(c2ce2cc2) SHA1(d5633e01f669ee8772ed77befa90180c6aa0111c), "Bwb","Run For Your Money (Barcrest) (MPU4) (RUC 1.3, hack?, set 2)" )
-// "(C)1996 B.W.B." and "RU4 1.1" (hack?)
-GAME_CUSTOM( 199?, m4rfym__a4, m4rfym, "rfym5.4", 0x0000, 0x010000, CRC(fe613006) SHA1(898b90893bfcb121575952c22c16570a27948bce), "Bwb","Run For Your Money (Barcrest) (MPU4) (RU4 1.1, hack?)" )
-// "(C)1996 B.W.B." and "RU8 1.2" (hack?)
-GAME_CUSTOM( 199?, m4rfym__a5, m4rfym, "rfym5.8t", 0x0000, 0x010000, CRC(c600718a) SHA1(168fa558f1b5b91fb805d483f3f4351ac80f90ff), "Bwb","Run For Your Money (Barcrest) (MPU4) (RU8 1.2, hack?)" )
+GAME_CUSTOM( 199?, m4rfym__at, m4rfym, "rutad.p1", 0x0000, 0x010000, CRC(f27090c9) SHA1(28b7bb8046f67a3f8b90069de845b0b791b57078), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1 AD)" )
+GAME_CUSTOM( 199?, m4rfym__au, m4rfym, "rutb.p1", 0x0000, 0x010000, CRC(cb7a74bf) SHA1(24274c7e3b40642d698f5c3a9a10cfeb23faaf1b), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1 B)" )
+GAME_CUSTOM( 199?, m4rfym__av, m4rfym, "rutbd.p1", 0x0000, 0x010000, CRC(19aba8f2) SHA1(cb726130837149c25adb5d87718b72259cb63a63), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1 BD)" )
+GAME_CUSTOM( 199?, m4rfym__aw, m4rfym, "rutd.p1", 0x0000, 0x010000, CRC(16a872bd) SHA1(47ad5eb9b473805e2eb86e0d4d9ef4b2e6e3c926), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1 D)" )
+GAME_CUSTOM( 199?, m4rfym__ax, m4rfym, "rutdk.p1", 0x0000, 0x010000, CRC(a8259673) SHA1(443081395ea0c1b0a07e6cd4b17670b3e01bb50f), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1 KD)" )
+GAME_CUSTOM( 199?, m4rfym__ay, m4rfym, "rutdy.p1", 0x0000, 0x010000, CRC(6b799f68) SHA1(87482236f1116983e80a7f190710524d3809cd3a), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1 YD)" )
+GAME_CUSTOM( 199?, m4rfym__az, m4rfym, "rutk.p1", 0x0000, 0x010000, CRC(20962e5e) SHA1(0be43050d403750b67c796a007b503e132014f4c), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1 K)" )
+GAME_CUSTOM( 199?, m4rfym__a1, m4rfym, "ruty.p1", 0x0000, 0x010000, CRC(abb708c5) SHA1(6fe3b52a0ba484576fc83ed35aefeda01d275aec), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1 Y)" )
+// "(C)1996 B.W.B." and "RUC 1.3" (but hack?)
+GAME_CUSTOM( 199?, m4rfym__6, m4rfym, "rfym510l", 0x0000, 0x010000, CRC(24af47f3) SHA1(3d1ec9b013f3f7b497cfb62b42fbb2fa914b24b6), "hack","Run For Your Money (Barcrest) (MPU4) (RUC 1.3 K5, hack, set 1)" )
+GAME_CUSTOM( 199?, m4rfym__a3, m4rfym, "rfym5.10", 0x0000, 0x010000, CRC(c2ce2cc2) SHA1(d5633e01f669ee8772ed77befa90180c6aa0111c), "hack","Run For Your Money (Barcrest) (MPU4) (RUC 1.3 K5, hack, set 2)" )
+// "(C)1996 B.W.B." and "RU4 1.1" (but hack?)
+GAME_CUSTOM( 199?, m4rfym__a4, m4rfym, "rfym5.4", 0x0000, 0x010000, CRC(fe613006) SHA1(898b90893bfcb121575952c22c16570a27948bce), "hack","Run For Your Money (Barcrest) (MPU4) (RU4 1.1 K5, hack, set 1)" )
+// "(C)1996 B.W.B." and "RU8 1.2" (but hack?)
+GAME_CUSTOM( 199?, m4rfym__a5, m4rfym, "rfym5.8t", 0x0000, 0x010000, CRC(c600718a) SHA1(168fa558f1b5b91fb805d483f3f4351ac80f90ff), "hack","Run For Your Money (Barcrest) (MPU4) (RU8 1.2 K5, hack)" )
// "BILL AND BEN" and "V1 8 0.1" (hack)
-GAME_CUSTOM( 199?, m4rfym__4, m4rfym, "rfym20", 0x0000, 0x010000, CRC(5e1d70e2) SHA1(2da1b8033a77d367c4b5c3d83a0e5def4e5e5d78), "hack","Run For Your Money (Barcrest) (MPU4) (V1 8 0.1, hack, set 1)" )
-GAME_CUSTOM( 199?, m4rfym__5, m4rfym, "rfym2010", 0x0000, 0x010000, CRC(ec440e7e) SHA1(21f8d4708b5d779dcefcc1e921a5efe17dd6f8c7), "hack","Run For Your Money (Barcrest) (MPU4) (V1 8 0.1, hack, set 2)" )
-GAME_CUSTOM( 199?, m4rfym__a2, m4rfym, "rfym20.10", 0x0000, 0x010000, CRC(947d00d2) SHA1(2c99da689541de247e35ac39eadfe070ac3196b5), "hack","Run For Your Money (Barcrest) (MPU4) (V1 8 0.1, hack, set 3)" )
+GAME_CUSTOM( 199?, m4rfym__4, m4rfym, "rfym20", 0x0000, 0x010000, CRC(5e1d70e2) SHA1(2da1b8033a77d367c4b5c3d83a0e5def4e5e5d78), "hack","Run For Your Money (Barcrest) (MPU4) (V1 8 0.1 C, hack, set 1)" )
+GAME_CUSTOM( 199?, m4rfym__5, m4rfym, "rfym2010", 0x0000, 0x010000, CRC(ec440e7e) SHA1(21f8d4708b5d779dcefcc1e921a5efe17dd6f8c7), "hack","Run For Your Money (Barcrest) (MPU4) (V1 8 0.1 C, hack, set 2)" )
+GAME_CUSTOM( 199?, m4rfym__a2, m4rfym, "rfym20.10", 0x0000, 0x010000, CRC(947d00d2) SHA1(2c99da689541de247e35ac39eadfe070ac3196b5), "hack","Run For Your Money (Barcrest) (MPU4) (V1 8 0.1 C, hack, set 3)" )
// "1997 COCO" and "RU4 1.1" (hack)
-GAME_CUSTOM( 199?, m4rfym__7, m4rfym, "rfym55", 0x0000, 0x010000, CRC(b7d638d8) SHA1(6064ceffd94ff149d8bcb117fd823de52030ac64), "hack","Run For Your Money (Barcrest) (MPU4) (RU4 1.1, hack)" )
+GAME_CUSTOM( 199?, m4rfym__7, m4rfym, "rfym55", 0x0000, 0x010000, CRC(b7d638d8) SHA1(6064ceffd94ff149d8bcb117fd823de52030ac64), "hack","Run For Your Money (Barcrest) (MPU4) (RU4 1.1 K5, hack, set 2)" )
#define M4READY_EXTRA_ROMS \
ROM_REGION( 0x48, "fakechr", 0 ) \
@@ -1790,86 +1790,86 @@ GAME_CUSTOM( 199?, m4rfym__7, m4rfym, "rfym55", 0x0000, 0x010000, CRC(b
// "(C)1991 BARCREST" and "RGO 0.8"
GAME_CUSTOM( 199?, m4ready, 0, "rgos.p1", 0x0000, 0x010000, CRC(d00d3540) SHA1(0fd6a08477d05d1c129038c8de47de68a28c0a56), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8)" )
-GAME_CUSTOM( 199?, m4ready__as, m4ready, "rgob.p1", 0x0000, 0x010000, CRC(43ac7b73) SHA1(994d6256432543e1353521359f8faaea671a7bea), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8B)" )
-GAME_CUSTOM( 199?, m4ready__ar, m4ready, "rgok.p1", 0x0000, 0x010000, CRC(00413e8f) SHA1(580efbdf3ba092978648d83b6d21b5a4966d57e3), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8K)" )
-GAME_CUSTOM( 199?, m4ready__at, m4ready, "rgoy.p1", 0x0000, 0x010000, CRC(cfdfce82) SHA1(68464381f658f08efb3f790eea1e7dd61086f936), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8Y)" )
+GAME_CUSTOM( 199?, m4ready__as, m4ready, "rgob.p1", 0x0000, 0x010000, CRC(43ac7b73) SHA1(994d6256432543e1353521359f8faaea671a7bea), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 B)" )
+GAME_CUSTOM( 199?, m4ready__ar, m4ready, "rgok.p1", 0x0000, 0x010000, CRC(00413e8f) SHA1(580efbdf3ba092978648d83b6d21b5a4966d57e3), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 K)" )
+GAME_CUSTOM( 199?, m4ready__at, m4ready, "rgoy.p1", 0x0000, 0x010000, CRC(cfdfce82) SHA1(68464381f658f08efb3f790eea1e7dd61086f936), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 Y)" )
// datapak sets
-GAME_CUSTOM( 199?, m4ready__ao, m4ready, "rgod.p1", 0x0000, 0x010000, CRC(f3898077) SHA1(4d2f32b4c3f01a0b54966dd0558dcadcf89fd229), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8D)" )
-GAME_CUSTOM( 199?, m4ready__am, m4ready, "rgoad.p1", 0x0000, 0x010000, CRC(d4ed739c) SHA1(6a7d5f63eaf59f08a8f870aba8523e2dc59d20cd), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8AD)" )
-GAME_CUSTOM( 199?, m4ready__an, m4ready, "rgobd.p1", 0x0000, 0x010000, CRC(0505340c) SHA1(e61b007dc50beb22bf3efa2c3cfab595880d3248), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8BD)" )
-GAME_CUSTOM( 199?, m4ready__ap, m4ready, "rgodk.p1", 0x0000, 0x010000, CRC(9a9b61c7) SHA1(756ed419451d1e070809303467789e01949dea2b), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8KD)" )
-GAME_CUSTOM( 199?, m4ready__aq, m4ready, "rgody.p1", 0x0000, 0x010000, CRC(a0eef0f0) SHA1(781de603d19eab0ee771b10374f53c149432c877), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8YD)" )
+GAME_CUSTOM( 199?, m4ready__ao, m4ready, "rgod.p1", 0x0000, 0x010000, CRC(f3898077) SHA1(4d2f32b4c3f01a0b54966dd0558dcadcf89fd229), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 D)" )
+GAME_CUSTOM( 199?, m4ready__am, m4ready, "rgoad.p1", 0x0000, 0x010000, CRC(d4ed739c) SHA1(6a7d5f63eaf59f08a8f870aba8523e2dc59d20cd), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 AD)" )
+GAME_CUSTOM( 199?, m4ready__an, m4ready, "rgobd.p1", 0x0000, 0x010000, CRC(0505340c) SHA1(e61b007dc50beb22bf3efa2c3cfab595880d3248), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 BD)" )
+GAME_CUSTOM( 199?, m4ready__ap, m4ready, "rgodk.p1", 0x0000, 0x010000, CRC(9a9b61c7) SHA1(756ed419451d1e070809303467789e01949dea2b), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 KD)" )
+GAME_CUSTOM( 199?, m4ready__aq, m4ready, "rgody.p1", 0x0000, 0x010000, CRC(a0eef0f0) SHA1(781de603d19eab0ee771b10374f53c149432c877), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 YD)" )
// "(C)1991 BARCREST" and "CGO 1.1"
GAME_CUSTOM( 199?, m4ready__k, m4ready, "cgo11s.p1", 0x0000, 0x010000, CRC(a6b9ddd4) SHA1(b06d5d19b165b82c76b29f7925e0936aeccedb8c), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1)" )
-GAME_CUSTOM( 199?, m4ready__b, m4ready, "cgo11b.p1", 0x0000, 0x010000, CRC(2ea96acb) SHA1(ffcf1fcb2b769b29b53b00c9ce80af061cc21b9d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1B)" )
-GAME_CUSTOM( 199?, m4ready__d, m4ready, "cgo11c.p1", 0x0000, 0x010000, CRC(76d36b80) SHA1(2699982fed3c2116ff0187d24059f59d3b6c1cae), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1C)" )
-GAME_CUSTOM( 199?, m4ready__i, m4ready, "cgo11k.p1", 0x0000, 0x010000, CRC(4f46e7f6) SHA1(9485edbcbb3a81b1a335a7c420aa676af8b14050), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1K)" )
-GAME_CUSTOM( 199?, m4ready__j, m4ready, "cgo11r.p1", 0x0000, 0x010000, CRC(f44dd36f) SHA1(6623daaa237e97b9d63815393562fe8abdb8d732), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1R)" )
-GAME_CUSTOM( 199?, m4ready__l, m4ready, "cgo11y.p1", 0x0000, 0x010000, CRC(d91653f6) SHA1(6445958cd07088fbf08c37a8b5540e3eb561d021), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1Y)" )
+GAME_CUSTOM( 199?, m4ready__b, m4ready, "cgo11b.p1", 0x0000, 0x010000, CRC(2ea96acb) SHA1(ffcf1fcb2b769b29b53b00c9ce80af061cc21b9d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 B)" )
+GAME_CUSTOM( 199?, m4ready__d, m4ready, "cgo11c.p1", 0x0000, 0x010000, CRC(76d36b80) SHA1(2699982fed3c2116ff0187d24059f59d3b6c1cae), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 C)" )
+GAME_CUSTOM( 199?, m4ready__i, m4ready, "cgo11k.p1", 0x0000, 0x010000, CRC(4f46e7f6) SHA1(9485edbcbb3a81b1a335a7c420aa676af8b14050), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 K)" )
+GAME_CUSTOM( 199?, m4ready__j, m4ready, "cgo11r.p1", 0x0000, 0x010000, CRC(f44dd36f) SHA1(6623daaa237e97b9d63815393562fe8abdb8d732), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 R)" )
+GAME_CUSTOM( 199?, m4ready__l, m4ready, "cgo11y.p1", 0x0000, 0x010000, CRC(d91653f6) SHA1(6445958cd07088fbf08c37a8b5540e3eb561d021), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 Y)" )
// datapak sets
-GAME_CUSTOM( 199?, m4ready__e, m4ready, "cgo11d.p1", 0x0000, 0x010000, CRC(63516954) SHA1(abefafe43e3386a5c916e55503bcb623d74840e1), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1D)" )
-GAME_CUSTOM( 199?, m4ready__a, m4ready, "cgo11ad.p1", 0x0000, 0x010000, CRC(9f8bbdaf) SHA1(210cdc9ce493edbf55d43a3127b10931e3ce2fee), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1AD)" )
-GAME_CUSTOM( 199?, m4ready__c, m4ready, "cgo11bd.p1", 0x0000, 0x010000, CRC(4cabc589) SHA1(2b0b91f4ac6ebd18edb7a913b8079acc9f026e7d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1BD)" )
-GAME_CUSTOM( 199?, m4ready__f, m4ready, "cgo11dk.p1", 0x0000, 0x010000, CRC(84f112ef) SHA1(85fa44c7b25aeb83fa2c199abafe099a8ae92bf8), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1KD)" )
-GAME_CUSTOM( 199?, m4ready__g, m4ready, "cgo11dr.p1", 0x0000, 0x010000, CRC(07d13cf6) SHA1(11685efebf9c7091191654fec1f2ac6ad3d05ce1), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1RD)" )
-GAME_CUSTOM( 199?, m4ready__h, m4ready, "cgo11dy.p1", 0x0000, 0x010000, CRC(13c5b934) SHA1(3212ba2534726c8fca9a70325acff3f6e85dd1f7), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1YD)" )
+GAME_CUSTOM( 199?, m4ready__e, m4ready, "cgo11d.p1", 0x0000, 0x010000, CRC(63516954) SHA1(abefafe43e3386a5c916e55503bcb623d74840e1), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 D)" )
+GAME_CUSTOM( 199?, m4ready__a, m4ready, "cgo11ad.p1", 0x0000, 0x010000, CRC(9f8bbdaf) SHA1(210cdc9ce493edbf55d43a3127b10931e3ce2fee), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 AD)" )
+GAME_CUSTOM( 199?, m4ready__c, m4ready, "cgo11bd.p1", 0x0000, 0x010000, CRC(4cabc589) SHA1(2b0b91f4ac6ebd18edb7a913b8079acc9f026e7d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 BD)" )
+GAME_CUSTOM( 199?, m4ready__f, m4ready, "cgo11dk.p1", 0x0000, 0x010000, CRC(84f112ef) SHA1(85fa44c7b25aeb83fa2c199abafe099a8ae92bf8), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 KD)" )
+GAME_CUSTOM( 199?, m4ready__g, m4ready, "cgo11dr.p1", 0x0000, 0x010000, CRC(07d13cf6) SHA1(11685efebf9c7091191654fec1f2ac6ad3d05ce1), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 RD)" )
+GAME_CUSTOM( 199?, m4ready__h, m4ready, "cgo11dy.p1", 0x0000, 0x010000, CRC(13c5b934) SHA1(3212ba2534726c8fca9a70325acff3f6e85dd1f7), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 YD)" )
// "(C)1991 BARCREST" and "DRR 0.2"
GAME_CUSTOM( 199?, m4ready__w, m4ready, "drr02s.p1", 0x0000, 0x010000, CRC(67b03b7f) SHA1(61e09db8b7622e6e094c4e585dbcfea724155829), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2)" )
-GAME_CUSTOM( 199?, m4ready__n, m4ready, "drr02b.p1", 0x0000, 0x010000, CRC(729e13c9) SHA1(dcefdd44592464616570101a5e05db31289fc66c), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2B)" )
-GAME_CUSTOM( 199?, m4ready__p, m4ready, "drr02c.p1", 0x0000, 0x010000, CRC(258acbf9) SHA1(ced9dbef9162ddadb4838ad430d50aa14574e97d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2C)" )
-GAME_CUSTOM( 199?, m4ready__u, m4ready, "drr02k.p1", 0x0000, 0x010000, CRC(525e370e) SHA1(9849399643731beb31b7163b7eebd8774caf9289), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2K)" )
-GAME_CUSTOM( 199?, m4ready__v, m4ready, "drr02r.p1", 0x0000, 0x010000, CRC(352613a0) SHA1(052e7770d55dd379d1bf3501e46d973bc4fc48d8), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2R)" )
-GAME_CUSTOM( 199?, m4ready__x, m4ready, "drr02y.p1", 0x0000, 0x010000, CRC(009c7ece) SHA1(48463d7d0e521d51bad83ac5ddaaffabc68bf610), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2Y)" )
+GAME_CUSTOM( 199?, m4ready__n, m4ready, "drr02b.p1", 0x0000, 0x010000, CRC(729e13c9) SHA1(dcefdd44592464616570101a5e05db31289fc66c), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 B)" )
+GAME_CUSTOM( 199?, m4ready__p, m4ready, "drr02c.p1", 0x0000, 0x010000, CRC(258acbf9) SHA1(ced9dbef9162ddadb4838ad430d50aa14574e97d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 C)" )
+GAME_CUSTOM( 199?, m4ready__u, m4ready, "drr02k.p1", 0x0000, 0x010000, CRC(525e370e) SHA1(9849399643731beb31b7163b7eebd8774caf9289), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 K)" )
+GAME_CUSTOM( 199?, m4ready__v, m4ready, "drr02r.p1", 0x0000, 0x010000, CRC(352613a0) SHA1(052e7770d55dd379d1bf3501e46d973bc4fc48d8), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 R)" )
+GAME_CUSTOM( 199?, m4ready__x, m4ready, "drr02y.p1", 0x0000, 0x010000, CRC(009c7ece) SHA1(48463d7d0e521d51bad83ac5ddaaffabc68bf610), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 Y)" )
// datapak sets
-GAME_CUSTOM( 199?, m4ready__q, m4ready, "drr02d.p1", 0x0000, 0x010000, CRC(60940b5a) SHA1(a4d293944e0e65f99dea9391d9d7e1066aa7b83d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2D)" )
-GAME_CUSTOM( 199?, m4ready__m, m4ready, "drr02ad.p1", 0x0000, 0x010000, CRC(5acc5189) SHA1(abf66b90f4a64c3fb9ac4bf16f3bba2758f54482), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2AD)" )
-GAME_CUSTOM( 199?, m4ready__o, m4ready, "drr02bd.p1", 0x0000, 0x010000, CRC(70c5b183) SHA1(b1431d0c2c48941d1ff6d6115c8d1ab026d71f63), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2BD)" )
-GAME_CUSTOM( 199?, m4ready__r, m4ready, "drr02dk.p1", 0x0000, 0x010000, CRC(0335775e) SHA1(4d943c3e522f5c42ddd2104c316f75eec90f494f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2KD)" )
-GAME_CUSTOM( 199?, m4ready__s, m4ready, "drr02dr.p1", 0x0000, 0x010000, CRC(c05eef66) SHA1(ac5966ea0ff036d9c9179df6bc7aabd149f41d6c), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2RD)" )
-GAME_CUSTOM( 199?, m4ready__t, m4ready, "drr02dy.p1", 0x0000, 0x010000, CRC(6a700473) SHA1(4025a99aa9e87a80875d150e965650d339d2a143), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2YD)" )
+GAME_CUSTOM( 199?, m4ready__q, m4ready, "drr02d.p1", 0x0000, 0x010000, CRC(60940b5a) SHA1(a4d293944e0e65f99dea9391d9d7e1066aa7b83d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 D)" )
+GAME_CUSTOM( 199?, m4ready__m, m4ready, "drr02ad.p1", 0x0000, 0x010000, CRC(5acc5189) SHA1(abf66b90f4a64c3fb9ac4bf16f3bba2758f54482), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 AD)" )
+GAME_CUSTOM( 199?, m4ready__o, m4ready, "drr02bd.p1", 0x0000, 0x010000, CRC(70c5b183) SHA1(b1431d0c2c48941d1ff6d6115c8d1ab026d71f63), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 BD)" )
+GAME_CUSTOM( 199?, m4ready__r, m4ready, "drr02dk.p1", 0x0000, 0x010000, CRC(0335775e) SHA1(4d943c3e522f5c42ddd2104c316f75eec90f494f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 KD)" )
+GAME_CUSTOM( 199?, m4ready__s, m4ready, "drr02dr.p1", 0x0000, 0x010000, CRC(c05eef66) SHA1(ac5966ea0ff036d9c9179df6bc7aabd149f41d6c), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 RD)" )
+GAME_CUSTOM( 199?, m4ready__t, m4ready, "drr02dy.p1", 0x0000, 0x010000, CRC(6a700473) SHA1(4025a99aa9e87a80875d150e965650d339d2a143), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 YD)" )
// "(C)1991 BARCREST" and "HJJ 0.1"
GAME_CUSTOM( 199?, m4ready__y, m4ready, "hjj.hex", 0x0000, 0x010000, CRC(48ab2375) SHA1(4d9360a89e97a6bb7bdb099940d73f425eadd63d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.1)" )
// "(C)1991 BARCREST" and "HJJ 0.2"
GAME_CUSTOM( 199?, m4ready__9, m4ready, "hjj02s.p1", 0x0000, 0x010000, CRC(39de9801) SHA1(c29e883c45ed6b272d65c7922b1871199a424244), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2)" )
-GAME_CUSTOM( 199?, m4ready__0, m4ready, "hjj02b.p1", 0x0000, 0x010000, CRC(778ec121) SHA1(98454562da1da56d57ce3e6279805207671d7337), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2B)" )
-GAME_CUSTOM( 199?, m4ready__2, m4ready, "hjj02c.p1", 0x0000, 0x010000, CRC(fbb149fc) SHA1(6a8305a3ef4a1818a12dab3d380e79b7e642a904), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2C)" )
-GAME_CUSTOM( 199?, m4ready__7, m4ready, "hjj02k.p1", 0x0000, 0x010000, CRC(c224c58a) SHA1(5f9b5ff92e2f1b0438380d635b255ec8b4fc080f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2K)" )
-GAME_CUSTOM( 199?, m4ready__8, m4ready, "hjj02r.p1", 0x0000, 0x010000, CRC(32fefefe) SHA1(f58e228a1496b0858903c2d850c8453835b6f24b), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2R)" )
-GAME_CUSTOM( 199?, m4ready__aa, m4ready, "hjj02y.p1", 0x0000, 0x010000, CRC(0178cc91) SHA1(d618ff2eb0a1992b88f3b5427ffc54d34bf8c124), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2Y)" )
+GAME_CUSTOM( 199?, m4ready__0, m4ready, "hjj02b.p1", 0x0000, 0x010000, CRC(778ec121) SHA1(98454562da1da56d57ce3e6279805207671d7337), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 B)" )
+GAME_CUSTOM( 199?, m4ready__2, m4ready, "hjj02c.p1", 0x0000, 0x010000, CRC(fbb149fc) SHA1(6a8305a3ef4a1818a12dab3d380e79b7e642a904), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 C)" )
+GAME_CUSTOM( 199?, m4ready__7, m4ready, "hjj02k.p1", 0x0000, 0x010000, CRC(c224c58a) SHA1(5f9b5ff92e2f1b0438380d635b255ec8b4fc080f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 K)" )
+GAME_CUSTOM( 199?, m4ready__8, m4ready, "hjj02r.p1", 0x0000, 0x010000, CRC(32fefefe) SHA1(f58e228a1496b0858903c2d850c8453835b6f24b), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 R)" )
+GAME_CUSTOM( 199?, m4ready__aa, m4ready, "hjj02y.p1", 0x0000, 0x010000, CRC(0178cc91) SHA1(d618ff2eb0a1992b88f3b5427ffc54d34bf8c124), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 Y)" )
// datapak sets
-GAME_CUSTOM( 199?, m4ready__3, m4ready, "hjj02d.p1", 0x0000, 0x010000, CRC(9e657e28) SHA1(3eaf9f8a0511f4533e9b47105d4417c71248fab2), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2D)" )
-GAME_CUSTOM( 199?, m4ready__z, m4ready, "hjj02ad.p1", 0x0000, 0x010000, CRC(9f787e01) SHA1(d6cae1c1ae15b74285076e87c7fd8105f6a114ae), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2AD)" )
-GAME_CUSTOM( 199?, m4ready__1, m4ready, "hjj02bd.p1", 0x0000, 0x010000, CRC(7e8dbab0) SHA1(5b40536503b2d62792f874535367f5658acf8d2e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2BD)" )
-GAME_CUSTOM( 199?, m4ready__4, m4ready, "hjj02dk.p1", 0x0000, 0x010000, CRC(2e1bab77) SHA1(76a2784bc183c6d79a845bb7306eae687ced82a0), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2KD)" )
-GAME_CUSTOM( 199?, m4ready__5, m4ready, "hjj02dr.p1", 0x0000, 0x010000, CRC(9d26064f) SHA1(6596b3a671ab8e38b8357023f8994948ef1c1f0f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2RD)" )
-GAME_CUSTOM( 199?, m4ready__6, m4ready, "hjj02dy.p1", 0x0000, 0x010000, CRC(0ab388b6) SHA1(cc8f157a8a91e3fb8bd1fbdd35989d72c8684c50), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2YD)" )
+GAME_CUSTOM( 199?, m4ready__3, m4ready, "hjj02d.p1", 0x0000, 0x010000, CRC(9e657e28) SHA1(3eaf9f8a0511f4533e9b47105d4417c71248fab2), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 D)" )
+GAME_CUSTOM( 199?, m4ready__z, m4ready, "hjj02ad.p1", 0x0000, 0x010000, CRC(9f787e01) SHA1(d6cae1c1ae15b74285076e87c7fd8105f6a114ae), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 AD)" )
+GAME_CUSTOM( 199?, m4ready__1, m4ready, "hjj02bd.p1", 0x0000, 0x010000, CRC(7e8dbab0) SHA1(5b40536503b2d62792f874535367f5658acf8d2e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 BD)" )
+GAME_CUSTOM( 199?, m4ready__4, m4ready, "hjj02dk.p1", 0x0000, 0x010000, CRC(2e1bab77) SHA1(76a2784bc183c6d79a845bb7306eae687ced82a0), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 KD)" )
+GAME_CUSTOM( 199?, m4ready__5, m4ready, "hjj02dr.p1", 0x0000, 0x010000, CRC(9d26064f) SHA1(6596b3a671ab8e38b8357023f8994948ef1c1f0f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 RD)" )
+GAME_CUSTOM( 199?, m4ready__6, m4ready, "hjj02dy.p1", 0x0000, 0x010000, CRC(0ab388b6) SHA1(cc8f157a8a91e3fb8bd1fbdd35989d72c8684c50), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 YD)" )
// "(C)1991 BARCREST" and "PPL 0.2"
GAME_CUSTOM( 199?, m4ready__ak, m4ready, "ppl02s.p1", 0x0000, 0x010000, CRC(40c1d256) SHA1(abd55dcc06b49d54976743c610ad3de21278ac2d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2)" )
-GAME_CUSTOM( 199?, m4ready__ac, m4ready, "ppl02b.p1", 0x0000, 0x010000, CRC(dbd56cf1) SHA1(968c1d09626e493c51d7637e19a7f092047b283f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2B)" )
-GAME_CUSTOM( 199?, m4ready__ae, m4ready, "ppl02c.p1", 0x0000, 0x010000, CRC(ad6f5c6d) SHA1(91f3d7bad3cdb7014ff3caa1631e6567cb95f47e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2C)" )
-GAME_CUSTOM( 199?, m4ready__ai, m4ready, "ppl02k.p1", 0x0000, 0x010000, CRC(7fcc03d7) SHA1(359743edec7ca54bd9a780f81ac25d314ada2d7e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2K)" )
-GAME_CUSTOM( 199?, m4ready__aj, m4ready, "ppl02r.p1", 0x0000, 0x010000, CRC(e35580e3) SHA1(397bd2ce068aa45f3c55a3ddd97ae3e09391a7da), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2R)" )
-GAME_CUSTOM( 199?, m4ready__al, m4ready, "ppl02y.p1", 0x0000, 0x010000, CRC(7802f70c) SHA1(c96758c02bebff4b85436a93ae012c80c6cb2963), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2Y)" )
+GAME_CUSTOM( 199?, m4ready__ac, m4ready, "ppl02b.p1", 0x0000, 0x010000, CRC(dbd56cf1) SHA1(968c1d09626e493c51d7637e19a7f092047b283f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 B)" )
+GAME_CUSTOM( 199?, m4ready__ae, m4ready, "ppl02c.p1", 0x0000, 0x010000, CRC(ad6f5c6d) SHA1(91f3d7bad3cdb7014ff3caa1631e6567cb95f47e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 C)" )
+GAME_CUSTOM( 199?, m4ready__ai, m4ready, "ppl02k.p1", 0x0000, 0x010000, CRC(7fcc03d7) SHA1(359743edec7ca54bd9a780f81ac25d314ada2d7e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 K)" )
+GAME_CUSTOM( 199?, m4ready__aj, m4ready, "ppl02r.p1", 0x0000, 0x010000, CRC(e35580e3) SHA1(397bd2ce068aa45f3c55a3ddd97ae3e09391a7da), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 R)" )
+GAME_CUSTOM( 199?, m4ready__al, m4ready, "ppl02y.p1", 0x0000, 0x010000, CRC(7802f70c) SHA1(c96758c02bebff4b85436a93ae012c80c6cb2963), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 Y)" )
// datapak sets
-GAME_CUSTOM( 199?, m4ready__af, m4ready, "ppl02d.p1", 0x0000, 0x010000, CRC(041f0fd8) SHA1(8e32c88f7b0a541a9460926a2fec0318a7239279), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2D)" )
-GAME_CUSTOM( 199?, m4ready__ab, m4ready, "ppl02ad.p1", 0x0000, 0x010000, CRC(d8b3be27) SHA1(95d1d979b439303817670fd686b5df324feb618f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2AD)" )
-GAME_CUSTOM( 199?, m4ready__ad, m4ready, "ppl02bd.p1", 0x0000, 0x010000, CRC(eeafd36d) SHA1(68c314e937d24a59ca305facc409218c63bef24e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2BD)" )
-GAME_CUSTOM( 199?, m4ready__ag, m4ready, "ppl02dk.p1", 0x0000, 0x010000, CRC(632ecd46) SHA1(9e90279db99aa22923a79e309b053b35b70c9f8e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2KD)" )
-GAME_CUSTOM( 199?, m4ready__ah, m4ready, "ppl02dy.p1", 0x0000, 0x010000, CRC(4fb07726) SHA1(f234018ea18511217d176023b489254cf5a5a15e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2YD)" )
+GAME_CUSTOM( 199?, m4ready__af, m4ready, "ppl02d.p1", 0x0000, 0x010000, CRC(041f0fd8) SHA1(8e32c88f7b0a541a9460926a2fec0318a7239279), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 D)" )
+GAME_CUSTOM( 199?, m4ready__ab, m4ready, "ppl02ad.p1", 0x0000, 0x010000, CRC(d8b3be27) SHA1(95d1d979b439303817670fd686b5df324feb618f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 AD)" )
+GAME_CUSTOM( 199?, m4ready__ad, m4ready, "ppl02bd.p1", 0x0000, 0x010000, CRC(eeafd36d) SHA1(68c314e937d24a59ca305facc409218c63bef24e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 BD)" )
+GAME_CUSTOM( 199?, m4ready__ag, m4ready, "ppl02dk.p1", 0x0000, 0x010000, CRC(632ecd46) SHA1(9e90279db99aa22923a79e309b053b35b70c9f8e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 KD)" )
+GAME_CUSTOM( 199?, m4ready__ah, m4ready, "ppl02dy.p1", 0x0000, 0x010000, CRC(4fb07726) SHA1(f234018ea18511217d176023b489254cf5a5a15e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 YD)" )
// "(C)1991 BARCREST" and "RGT 1.0"
GAME_CUSTOM( 199?, m4ready__a4, m4ready, "rgt10s.p1", 0x0000, 0x010000, CRC(dd289204) SHA1(431f73cb45d248c672c50dc8fbc579209e41207d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0)" )
-GAME_CUSTOM( 199?, m4ready__av, m4ready, "rgt10b.p1", 0x0000, 0x010000, CRC(5d86b45a) SHA1(a7553848a1e4304acaf72f9d293123ca2af629f0), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0B)" )
-GAME_CUSTOM( 199?, m4ready__ax, m4ready, "rgt10c.p1", 0x0000, 0x010000, CRC(91f28aa6) SHA1(42c21d11df3145a0919f7aef53a5621b2beca353), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0C)" )
-GAME_CUSTOM( 199?, m4ready__a2, m4ready, "rgt10k.p1", 0x0000, 0x010000, CRC(78d6eff1) SHA1(d3172ffc9ef3a4f60680081d993e1487e4229625), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0K)" )
-GAME_CUSTOM( 199?, m4ready__a3, m4ready, "rgt10r.p1", 0x0000, 0x010000, CRC(1992945e) SHA1(716b62ca8edc5523fd83355e650982b50b4f9458), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0R)" )
-GAME_CUSTOM( 199?, m4ready__a5, m4ready, "rgt10y.p1", 0x0000, 0x010000, CRC(8dab3aca) SHA1(0fe8f87a17acd8df0b7b75b852b58eb1e273eb27), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0Y)" )
+GAME_CUSTOM( 199?, m4ready__av, m4ready, "rgt10b.p1", 0x0000, 0x010000, CRC(5d86b45a) SHA1(a7553848a1e4304acaf72f9d293123ca2af629f0), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 B)" )
+GAME_CUSTOM( 199?, m4ready__ax, m4ready, "rgt10c.p1", 0x0000, 0x010000, CRC(91f28aa6) SHA1(42c21d11df3145a0919f7aef53a5621b2beca353), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 C)" )
+GAME_CUSTOM( 199?, m4ready__a2, m4ready, "rgt10k.p1", 0x0000, 0x010000, CRC(78d6eff1) SHA1(d3172ffc9ef3a4f60680081d993e1487e4229625), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 K)" )
+GAME_CUSTOM( 199?, m4ready__a3, m4ready, "rgt10r.p1", 0x0000, 0x010000, CRC(1992945e) SHA1(716b62ca8edc5523fd83355e650982b50b4f9458), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 R)" )
+GAME_CUSTOM( 199?, m4ready__a5, m4ready, "rgt10y.p1", 0x0000, 0x010000, CRC(8dab3aca) SHA1(0fe8f87a17acd8df0b7b75b852b58eb1e273eb27), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 Y)" )
// datapak sets
-GAME_CUSTOM( 199?, m4ready__ay, m4ready, "rgt10d.p1", 0x0000, 0x010000, CRC(abd4a67e) SHA1(183746cd2cd661587854a80ad5455074fcf143cc), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0D)" )
-GAME_CUSTOM( 199?, m4ready__au, m4ready, "rgt10ad.p1", 0x0000, 0x010000, CRC(22f65e05) SHA1(d488e4c65059b3b7e8e88e39a05e0cc9eae2d836), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0AD)" )
-GAME_CUSTOM( 199?, m4ready__aw, m4ready, "rgt10bd.p1", 0x0000, 0x010000, CRC(6280594e) SHA1(d2b666aaac8ebe94bfab1c4404d0e42bd6c8b176), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0BD)" )
-GAME_CUSTOM( 199?, m4ready__az, m4ready, "rgt10dk.p1", 0x0000, 0x010000, CRC(63ee9525) SHA1(e1fa5348672d05149e6ab26f31af047e38192f2c), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0KD)" )
-GAME_CUSTOM( 199?, m4ready__a0, m4ready, "rgt10dr.p1", 0x0000, 0x010000, CRC(481ffebc) SHA1(3608faa929b703d2e45ea37b4f7051d5bb37f073), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0RD)" )
-GAME_CUSTOM( 199?, m4ready__a1, m4ready, "rgt10dy.p1", 0x0000, 0x010000, CRC(fe2498e9) SHA1(bd81c775daf860c2484af88a8b11b75df00ccaaa), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0YD)" )
+GAME_CUSTOM( 199?, m4ready__ay, m4ready, "rgt10d.p1", 0x0000, 0x010000, CRC(abd4a67e) SHA1(183746cd2cd661587854a80ad5455074fcf143cc), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 D)" )
+GAME_CUSTOM( 199?, m4ready__au, m4ready, "rgt10ad.p1", 0x0000, 0x010000, CRC(22f65e05) SHA1(d488e4c65059b3b7e8e88e39a05e0cc9eae2d836), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 AD)" )
+GAME_CUSTOM( 199?, m4ready__aw, m4ready, "rgt10bd.p1", 0x0000, 0x010000, CRC(6280594e) SHA1(d2b666aaac8ebe94bfab1c4404d0e42bd6c8b176), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 BD)" )
+GAME_CUSTOM( 199?, m4ready__az, m4ready, "rgt10dk.p1", 0x0000, 0x010000, CRC(63ee9525) SHA1(e1fa5348672d05149e6ab26f31af047e38192f2c), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 KD)" )
+GAME_CUSTOM( 199?, m4ready__a0, m4ready, "rgt10dr.p1", 0x0000, 0x010000, CRC(481ffebc) SHA1(3608faa929b703d2e45ea37b4f7051d5bb37f073), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 RD)" )
+GAME_CUSTOM( 199?, m4ready__a1, m4ready, "rgt10dy.p1", 0x0000, 0x010000, CRC(fe2498e9) SHA1(bd81c775daf860c2484af88a8b11b75df00ccaaa), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 YD)" )
#define M4MAG7S_EXTRA_ROMS \
@@ -1889,35 +1889,35 @@ GAME_CUSTOM( 199?, m4ready__a1, m4ready, "rgt10dy.p1", 0x0000, 0x010000, CR
// "(C)1993 BARCREST" and "MAS 1.2"
GAME_CUSTOM( 199?, m4mag7s, 0, "mas12s.p1", 0x0000, 0x020000, CRC(0a94e574) SHA1(e4516638fb7f783e79cfcdbbef1188965351eae2), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2)" )
-GAME_CUSTOM( 199?, m4mag7s__ag, m4mag7s, "mas12y.p1", 0x0000, 0x020000, CRC(5f012d8e) SHA1(069b493285df9ac3639c43349245a77890333dcc), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 1)" )
-GAME_CUSTOM( 199?, m4mag7s__4, m4mag7s, "mas12ad.p1", 0x0000, 0x020000, CRC(46c6522a) SHA1(e8bfa00afb0e07c524023a92c715f191ad26e759), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 32)" )
-GAME_CUSTOM( 199?, m4mag7s__5, m4mag7s, "mas12b.p1", 0x0000, 0x020000, CRC(9225a526) SHA1(7c9139c45ddfbcbbabf59c28f17d19ce3b8f7c05), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 33)" )
-GAME_CUSTOM( 199?, m4mag7s__6, m4mag7s, "mas12bd.p1", 0x0000, 0x020000, CRC(cbdcfcef) SHA1(11eb24b04535e8fc922bc802ab2f8af5e70881d5), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 34)" )
-GAME_CUSTOM( 199?, m4mag7s__7, m4mag7s, "mas12c.p1", 0x0000, 0x020000, CRC(a56f1834) SHA1(9a3bcca0ff62100a36b1de06c621108910da51d8), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 35)" )
-GAME_CUSTOM( 199?, m4mag7s__8, m4mag7s, "mas12d.p1", 0x0000, 0x020000, CRC(ef3eae50) SHA1(0eb26a6ffc963a84bfb11934bd9c1fecfec15f2a), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 36)" )
-GAME_CUSTOM( 199?, m4mag7s__9, m4mag7s, "mas12dh.p1", 0x0000, 0x020000, CRC(0530acac) SHA1(43d73351b5002afbc0e14c49056c7cac17c93854), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 37)" )
-GAME_CUSTOM( 199?, m4mag7s__aa, m4mag7s, "mas12dk.p1", 0x0000, 0x020000, CRC(811b54b9) SHA1(c54b50b64856615eb362e0de889b7d758866ee77), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 38)" )
-GAME_CUSTOM( 199?, m4mag7s__ab, m4mag7s, "mas12dr.p1", 0x0000, 0x020000, CRC(3214ef88) SHA1(8f0ab310363882c92fb4d58197ee093822e9611c), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 39)" )
-GAME_CUSTOM( 199?, m4mag7s__ac, m4mag7s, "mas12dy.p1", 0x0000, 0x020000, CRC(06f87447) SHA1(9df82a89c9846eb51a3719870b91dd675a97cbe6), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 40)" )
-GAME_CUSTOM( 199?, m4mag7s__ad, m4mag7s, "mas12h.p1", 0x0000, 0x020000, CRC(5cc9f565) SHA1(833c77ebd895e884430193d14edf0882b5bc5a75), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 41)" )
-GAME_CUSTOM( 199?, m4mag7s__ae, m4mag7s, "mas12k.p1", 0x0000, 0x020000, CRC(d8e20d70) SHA1(a411a06b89ff21ad7f55196f80dd2766a99bfc21), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 42)" )
-GAME_CUSTOM( 199?, m4mag7s__af, m4mag7s, "mas12r.p1", 0x0000, 0x020000, CRC(6bedb641) SHA1(39b5a8dfb581ae6ed209c6f2a12c06b38ad861a3), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 43)" )
+GAME_CUSTOM( 199?, m4mag7s__ag, m4mag7s, "mas12y.p1", 0x0000, 0x020000, CRC(5f012d8e) SHA1(069b493285df9ac3639c43349245a77890333dcc), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 Y)" )
+GAME_CUSTOM( 199?, m4mag7s__4, m4mag7s, "mas12ad.p1", 0x0000, 0x020000, CRC(46c6522a) SHA1(e8bfa00afb0e07c524023a92c715f191ad26e759), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 AD)" )
+GAME_CUSTOM( 199?, m4mag7s__5, m4mag7s, "mas12b.p1", 0x0000, 0x020000, CRC(9225a526) SHA1(7c9139c45ddfbcbbabf59c28f17d19ce3b8f7c05), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 B)" )
+GAME_CUSTOM( 199?, m4mag7s__6, m4mag7s, "mas12bd.p1", 0x0000, 0x020000, CRC(cbdcfcef) SHA1(11eb24b04535e8fc922bc802ab2f8af5e70881d5), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 BD)" )
+GAME_CUSTOM( 199?, m4mag7s__7, m4mag7s, "mas12c.p1", 0x0000, 0x020000, CRC(a56f1834) SHA1(9a3bcca0ff62100a36b1de06c621108910da51d8), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 C)" )
+GAME_CUSTOM( 199?, m4mag7s__8, m4mag7s, "mas12d.p1", 0x0000, 0x020000, CRC(ef3eae50) SHA1(0eb26a6ffc963a84bfb11934bd9c1fecfec15f2a), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 D)" )
+GAME_CUSTOM( 199?, m4mag7s__9, m4mag7s, "mas12dh.p1", 0x0000, 0x020000, CRC(0530acac) SHA1(43d73351b5002afbc0e14c49056c7cac17c93854), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 DH)" )
+GAME_CUSTOM( 199?, m4mag7s__aa, m4mag7s, "mas12dk.p1", 0x0000, 0x020000, CRC(811b54b9) SHA1(c54b50b64856615eb362e0de889b7d758866ee77), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 KD)" )
+GAME_CUSTOM( 199?, m4mag7s__ab, m4mag7s, "mas12dr.p1", 0x0000, 0x020000, CRC(3214ef88) SHA1(8f0ab310363882c92fb4d58197ee093822e9611c), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 RD)" )
+GAME_CUSTOM( 199?, m4mag7s__ac, m4mag7s, "mas12dy.p1", 0x0000, 0x020000, CRC(06f87447) SHA1(9df82a89c9846eb51a3719870b91dd675a97cbe6), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 YD)" )
+GAME_CUSTOM( 199?, m4mag7s__ad, m4mag7s, "mas12h.p1", 0x0000, 0x020000, CRC(5cc9f565) SHA1(833c77ebd895e884430193d14edf0882b5bc5a75), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 H)" )
+GAME_CUSTOM( 199?, m4mag7s__ae, m4mag7s, "mas12k.p1", 0x0000, 0x020000, CRC(d8e20d70) SHA1(a411a06b89ff21ad7f55196f80dd2766a99bfc21), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 K)" )
+GAME_CUSTOM( 199?, m4mag7s__af, m4mag7s, "mas12r.p1", 0x0000, 0x020000, CRC(6bedb641) SHA1(39b5a8dfb581ae6ed209c6f2a12c06b38ad861a3), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 R)" )
// "(C)1993 BARCREST" and "MA7 1.4"
GAME_CUSTOM( 199?, m4mag7s__a, m4mag7s, "ma714s", 0x0000, 0x020000, CRC(9c1d4f97) SHA1(7875f044f992b313f4dfaae2e7b604baf16387a3), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.4)" )
// "(C)1993 BARCREST" and "MA7 1.5"
GAME_CUSTOM( 199?, m4mag7s__m, m4mag7s, "ma715s.p1", 0x0000, 0x020000, CRC(6518c171) SHA1(df884c875f3cfb8e12fb35550dd1f5b331e4b204), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5)" )
-GAME_CUSTOM( 199?, m4mag7s__b, m4mag7s, "ma715ad.p1", 0x0000, 0x020000, CRC(f807cc3f) SHA1(d402a1bf6b9a69d26b0806da83d6a943760aa6ed), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 3)" )
-GAME_CUSTOM( 199?, m4mag7s__c, m4mag7s, "ma715b.p1", 0x0000, 0x020000, CRC(bedfd8b5) SHA1(a2bcd42e7163779aa7bb74ddc4a44d07f1179994), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 4)" )
-GAME_CUSTOM( 199?, m4mag7s__d, m4mag7s, "ma715bd.p1", 0x0000, 0x020000, CRC(b2c06469) SHA1(00ed3998c24c7f03fc270e3025d3815163b6ff38), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 5)" )
-GAME_CUSTOM( 199?, m4mag7s__e, m4mag7s, "ma715d.p1", 0x0000, 0x020000, CRC(9d4c2afe) SHA1(2833f9de808b2630ca67405098c3c502d597b6ca), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4mag7s__f, m4mag7s, "ma715dh.p1", 0x0000, 0x020000, CRC(9615f2ba) SHA1(ac6bc67bc740b6efd3050f9f5bc553acc25d9be6), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 7)" )
-GAME_CUSTOM( 199?, m4mag7s__g, m4mag7s, "ma715dk.p1", 0x0000, 0x020000, CRC(4b08770e) SHA1(e748b800804cd2505d10e5e7168a3dffaf007c7c), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 8)" )
-GAME_CUSTOM( 199?, m4mag7s__h, m4mag7s, "ma715dr.p1", 0x0000, 0x020000, CRC(d1e6a9b7) SHA1(d5c67cbc07931831159c801e0f4abfdc477980b8), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 9)" )
-GAME_CUSTOM( 199?, m4mag7s__i, m4mag7s, "ma715dy.p1", 0x0000, 0x020000, CRC(7fe4ecc1) SHA1(ce4abc96d8d50683bee31c9bce7835dd76065a9b), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 10)" )
-GAME_CUSTOM( 199?, m4mag7s__j, m4mag7s, "ma715h.p1", 0x0000, 0x020000, CRC(9a0a4e66) SHA1(ef8acb1f2deda724ff7b2850b1ce7a09f88ac011), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 11)" )
-GAME_CUSTOM( 199?, m4mag7s__k, m4mag7s, "ma715k.p1", 0x0000, 0x020000, CRC(4717cbd2) SHA1(b88b17dda9e16ecbcce55bdb99c23d9e8267b7b9), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 12)" )
-GAME_CUSTOM( 199?, m4mag7s__l, m4mag7s, "ma715r.p1", 0x0000, 0x020000, CRC(ddf9156b) SHA1(b8fb10944d910cd72a3268a80e8cd1b07dbee8f3), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 13)" )
-GAME_CUSTOM( 199?, m4mag7s__n, m4mag7s, "ma715y.p1", 0x0000, 0x020000, CRC(73fb501d) SHA1(2449da89e811ebf27970a8a9336107f85d876229), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 15)" )
+GAME_CUSTOM( 199?, m4mag7s__b, m4mag7s, "ma715ad.p1", 0x0000, 0x020000, CRC(f807cc3f) SHA1(d402a1bf6b9a69d26b0806da83d6a943760aa6ed), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 AD)" )
+GAME_CUSTOM( 199?, m4mag7s__c, m4mag7s, "ma715b.p1", 0x0000, 0x020000, CRC(bedfd8b5) SHA1(a2bcd42e7163779aa7bb74ddc4a44d07f1179994), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 B)" )
+GAME_CUSTOM( 199?, m4mag7s__d, m4mag7s, "ma715bd.p1", 0x0000, 0x020000, CRC(b2c06469) SHA1(00ed3998c24c7f03fc270e3025d3815163b6ff38), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 BD)" )
+GAME_CUSTOM( 199?, m4mag7s__e, m4mag7s, "ma715d.p1", 0x0000, 0x020000, CRC(9d4c2afe) SHA1(2833f9de808b2630ca67405098c3c502d597b6ca), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 D)" )
+GAME_CUSTOM( 199?, m4mag7s__f, m4mag7s, "ma715dh.p1", 0x0000, 0x020000, CRC(9615f2ba) SHA1(ac6bc67bc740b6efd3050f9f5bc553acc25d9be6), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 DH)" )
+GAME_CUSTOM( 199?, m4mag7s__g, m4mag7s, "ma715dk.p1", 0x0000, 0x020000, CRC(4b08770e) SHA1(e748b800804cd2505d10e5e7168a3dffaf007c7c), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 KD)" )
+GAME_CUSTOM( 199?, m4mag7s__h, m4mag7s, "ma715dr.p1", 0x0000, 0x020000, CRC(d1e6a9b7) SHA1(d5c67cbc07931831159c801e0f4abfdc477980b8), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 RD)" )
+GAME_CUSTOM( 199?, m4mag7s__i, m4mag7s, "ma715dy.p1", 0x0000, 0x020000, CRC(7fe4ecc1) SHA1(ce4abc96d8d50683bee31c9bce7835dd76065a9b), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 YD)" )
+GAME_CUSTOM( 199?, m4mag7s__j, m4mag7s, "ma715h.p1", 0x0000, 0x020000, CRC(9a0a4e66) SHA1(ef8acb1f2deda724ff7b2850b1ce7a09f88ac011), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 H)" )
+GAME_CUSTOM( 199?, m4mag7s__k, m4mag7s, "ma715k.p1", 0x0000, 0x020000, CRC(4717cbd2) SHA1(b88b17dda9e16ecbcce55bdb99c23d9e8267b7b9), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 K)" )
+GAME_CUSTOM( 199?, m4mag7s__l, m4mag7s, "ma715r.p1", 0x0000, 0x020000, CRC(ddf9156b) SHA1(b8fb10944d910cd72a3268a80e8cd1b07dbee8f3), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 R)" )
+GAME_CUSTOM( 199?, m4mag7s__n, m4mag7s, "ma715y.p1", 0x0000, 0x020000, CRC(73fb501d) SHA1(2449da89e811ebf27970a8a9336107f85d876229), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 Y)" )
// "(C)1993 BARCREST" and "MA7 1.6"
GAME_CUSTOM( 199?, m4mag7s__z, m4mag7s, "ma716s.p1", 0x0000, 0x020000, CRC(30fd2e9f) SHA1(9ed06ee736a09b36f48fb3b69be03b39861b0ea5), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.6)" )
GAME_CUSTOM( 199?, m4mag7s__o, m4mag7s, "ma716ad.p1", 0x0000, 0x020000, CRC(7632ce64) SHA1(2308d777110aa7636c4c0fc08be23d1732ba3b69), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 16)" )
@@ -1973,7 +1973,8 @@ GAME_CUSTOM( 199?, m4mag7s__2, m4mag7s, "mag715t", 0x0000, 0x020000
ROM_END \
GAME(year, setname, parent ,mod4oki ,mpu4 , mpu4_state,m4_showstring_big ,ROT0,company,title,GAME_FLAGS )
-GAME_CUSTOM( 199?, m4makmnt, 0, "mams.p1", 0x0000, 0x020000, CRC(af08e1e6) SHA1(c7e87d351f67592084d758ee53ba4d354bb28866), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 1)" )
+// "(C)1993 BARCREST" and "MAM 0.3"
+GAME_CUSTOM( 199?, m4makmnt, 0, "mams.p1", 0x0000, 0x020000, CRC(af08e1e6) SHA1(c7e87d351f67592084d758ee53ba4d354bb28866), "Barcrest","Make A Mint (Barcrest) (MPU4) (MAM 0.3)" )
GAME_CUSTOM( 199?, m4makmnt__o, m4makmnt, "mamad.p1", 0x0000, 0x020000, CRC(82f63f55) SHA1(2cbc514a49e826505580a57f17ee696bdf9bf436), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 16)" )
GAME_CUSTOM( 199?, m4makmnt__p, m4makmnt, "mamb.p1", 0x0000, 0x020000, CRC(233c2e35) SHA1(823fc5736469c7e1d1da72bec8d64aabb277f9ab), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 17)" )
GAME_CUSTOM( 199?, m4makmnt__q, m4makmnt, "mambd.p1", 0x0000, 0x020000, CRC(0fec9190) SHA1(6cea986853efc042c6325f31f790f80ae2993308), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 18)" )
@@ -1984,8 +1985,8 @@ GAME_CUSTOM( 199?, m4makmnt__u, m4makmnt, "mamdy.p1", 0x0000, 0x020000,
GAME_CUSTOM( 199?, m4makmnt__v, m4makmnt, "mamk.p1", 0x0000, 0x020000, CRC(69fb8663) SHA1(741b6e7b97d0c9b243e8e318ed169f92f8fbd5e9), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 23)" )
GAME_CUSTOM( 199?, m4makmnt__w, m4makmnt, "mamr.p1", 0x0000, 0x020000, CRC(daf43d52) SHA1(066cf554178d4e4fdff10c1e93567618f711d196), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 24)" )
GAME_CUSTOM( 199?, m4makmnt__x, m4makmnt, "mamy.p1", 0x0000, 0x020000, CRC(ee18a69d) SHA1(d3cf2c5ed4ec00be4d68c895ca3973da1acccb79), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 25)" )
-
-GAME_CUSTOM( 199?, m4makmnt__k, m4makmnt, "mam04s.p1", 0x0000, 0x020000, CRC(08eac690) SHA1(e35793da266bd9dd8a018ba9773f368e36ce501d), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 12)" )
+// "(C)1993 BARCREST" and "MAM 0.4"
+GAME_CUSTOM( 199?, m4makmnt__k, m4makmnt, "mam04s.p1", 0x0000, 0x020000, CRC(08eac690) SHA1(e35793da266bd9dd8a018ba9773f368e36ce501d), "Barcrest","Make A Mint (Barcrest) (MPU4) (MAM 0.4)" )
GAME_CUSTOM( 199?, m4makmnt__a, m4makmnt, "mam04ad.p1", 0x0000, 0x020000, CRC(9b750bc7) SHA1(10a86f0a0d18ce0be502a9d36282f6b5eef0ece5), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 2)" )
GAME_CUSTOM( 199?, m4makmnt__b, m4makmnt, "mam04b.p1", 0x0000, 0x020000, CRC(8f5cefa9) SHA1(fc0dfb67794d090ef15facd0f2b60e1d505b295f), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 3)" )
GAME_CUSTOM( 199?, m4makmnt__c, m4makmnt, "mam04bd.p1", 0x0000, 0x020000, CRC(166fa502) SHA1(345ad131d8757445c549312350507a3a804ca20e), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 4)" )
@@ -1997,8 +1998,8 @@ GAME_CUSTOM( 199?, m4makmnt__h, m4makmnt, "mam04dy.p1", 0x0000, 0x020000,
GAME_CUSTOM( 199?, m4makmnt__i, m4makmnt, "mam04k.p1", 0x0000, 0x020000, CRC(c59b47ff) SHA1(8022c6c988532d3f98edf5c59c97403ab2d0fb90), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 10)" )
GAME_CUSTOM( 199?, m4makmnt__j, m4makmnt, "mam04r.p1", 0x0000, 0x020000, CRC(7694fcce) SHA1(a67c76551240129914cc071543db96962f3b198f), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 11)" )
GAME_CUSTOM( 199?, m4makmnt__l, m4makmnt, "mam04y.p1", 0x0000, 0x020000, CRC(42786701) SHA1(6efb0cbf630cd1b87715e692f76e368e3fba0856), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 13)" )
-
-GAME_CUSTOM( 199?, m4makmnt__9, m4makmnt, "mmg04s.p1", 0x0000, 0x020000, CRC(1c46683e) SHA1(d08589bb32056ea599e6ffbbb795f46f8eff0782), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 37)" )
+// "(C)1993 BARCREST" and "MMG 0.4"
+GAME_CUSTOM( 199?, m4makmnt__9, m4makmnt, "mmg04s.p1", 0x0000, 0x020000, CRC(1c46683e) SHA1(d08589bb32056ea599e6ffbbb795f46f8eff0782), "Barcrest","Make A Mint (Barcrest) (MPU4) (MMG 0.4)" )
GAME_CUSTOM( 199?, m4makmnt__z, m4makmnt, "mmg04ad.p1", 0x0000, 0x020000, CRC(9cbf9691) SHA1(a68f2e9e0ec03dc47017c221a3e780e5cc992a15), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 27)" )
GAME_CUSTOM( 199?, m4makmnt__0, m4makmnt, "mmg04b.p1", 0x0000, 0x020000, CRC(2507742d) SHA1(3bdd6f43da4d4c923bedcc1eba5cb1e1b92ee473), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 28)" )
GAME_CUSTOM( 199?, m4makmnt__1, m4makmnt, "mmg04bd.p1", 0x0000, 0x020000, CRC(11a53854) SHA1(e52ee92f39645380864e86c694a345c028cb42cf), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 29)" )
@@ -2010,8 +2011,8 @@ GAME_CUSTOM( 199?, m4makmnt__6, m4makmnt, "mmg04dy.p1", 0x0000, 0x020000,
GAME_CUSTOM( 199?, m4makmnt__7, m4makmnt, "mmg04k.p1", 0x0000, 0x020000, CRC(6fc0dc7b) SHA1(4ad8ef1e666e4796d3a09ba4bda9e48c60266380), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 35)" )
GAME_CUSTOM( 199?, m4makmnt__8, m4makmnt, "mmg04r.p1", 0x0000, 0x020000, CRC(dccf674a) SHA1(a8b2ebeec8587e0655349baca700afc552c3e62d), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 36)" )
GAME_CUSTOM( 199?, m4makmnt__aa, m4makmnt, "mmg04y.p1", 0x0000, 0x020000, CRC(e823fc85) SHA1(10414bbac8ac3bdbf11bc4092370c499fb9db650), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 38)" )
-
-GAME_CUSTOM( 199?, m4makmnt__al, m4makmnt, "mmg05s.p1", 0x0000, 0x020000, CRC(771c17c8) SHA1(d9e595ae020c48769fcbf3de718b6986b6fd8bc5), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 49)" )
+// "(C)1993 BARCREST" and "MMG 0.5"
+GAME_CUSTOM( 199?, m4makmnt__al, m4makmnt, "mmg05s.p1", 0x0000, 0x020000, CRC(771c17c8) SHA1(d9e595ae020c48769fcbf3de718b6986b6fd8bc5), "Barcrest","Make A Mint (Barcrest) (MPU4) (MMG 0.5)" )
GAME_CUSTOM( 199?, m4makmnt__ab, m4makmnt, "mmg05ad.p1", 0x0000, 0x020000, CRC(d1e70066) SHA1(9635da90808628ae84c6073fef9622a8f37bd069), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 39)" )
GAME_CUSTOM( 199?, m4makmnt__ac, m4makmnt, "mmg05b.p1", 0x0000, 0x020000, CRC(cc0335ff) SHA1(9ca52a49cc48cbfa7c394e0c22cc5075ad1096a1), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 40)" )
GAME_CUSTOM( 199?, m4makmnt__ad, m4makmnt, "mmg05bd.p1", 0x0000, 0x020000, CRC(5cfdaea3) SHA1(f9c5c4b4021ace3e17818c4d4462fe9c87a64d70), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 41)" )
@@ -2023,17 +2024,20 @@ GAME_CUSTOM( 199?, m4makmnt__ai, m4makmnt, "mmg05dy.p1", 0x0000, 0x020000,
GAME_CUSTOM( 199?, m4makmnt__aj, m4makmnt, "mmg05k.p1", 0x0000, 0x020000, CRC(86c49da9) SHA1(bf29075a87574009f9ad8fd36e2d3a84c50e6b26), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 47)" )
GAME_CUSTOM( 199?, m4makmnt__ak, m4makmnt, "mmg05r.p1", 0x0000, 0x020000, CRC(35cb2698) SHA1(6371313a179559240ddb55976546ecc8d511e104), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 48)" )
GAME_CUSTOM( 199?, m4makmnt__am, m4makmnt, "mmg05y.p1", 0x0000, 0x020000, CRC(0127bd57) SHA1(3d1b59fda52f09fd8af59177b3f5c614b453ac25), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 50)" )
-
-GAME_CUSTOM( 199?, m4makmnt__an, m4makmnt, "ma_x6__5.3_1", 0x0000, 0x010000, CRC(2fe3c309) SHA1(5dba65b29ea5492a78866863629d89f9a8588959), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 51)" )
-GAME_CUSTOM( 199?, m4makmnt__ao, m4makmnt, "ma_x6__c.3_1", 0x0000, 0x010000, CRC(e9259a4d) SHA1(9a8e9590403f507f83197a898af5d543bda81b2b), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 52)" )
-GAME_CUSTOM( 199?, m4makmnt__ap, m4makmnt, "ma_x6_d5.3_1", 0x0000, 0x010000, CRC(a93dba0d) SHA1(6fabe994ac6c9ea4ce2bae99df699fa100098926), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 53)" )
-GAME_CUSTOM( 199?, m4makmnt__aq, m4makmnt, "ma_x6_dc.3_1", 0x0000, 0x010000, CRC(805d75c2) SHA1(b2433556b72f89887c1e404c80d85c940535e8af), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 54)" )
-GAME_CUSTOM( 199?, m4makmnt__ar, m4makmnt, "ma_x6a_5.3_1", 0x0000, 0x010000, CRC(79f673de) SHA1(805ea08f5ed016d25ec23dbc3952aad4873a1cde), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 55)" )
-GAME_CUSTOM( 199?, m4makmnt__as, m4makmnt, "ma_x6a_c.3_1", 0x0000, 0x010000, CRC(43ede82a) SHA1(d6ec3dd170c56e90018568480bca72cd8390aa2d), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 56)" )
-
-GAME_CUSTOM( 199?, m4makmnt__m, m4makmnt, "mam15g", 0x0000, 0x020000, CRC(d3fd61f9) SHA1(1c738f818ea84f4bfca3c62fd9c34ce5e983b10a), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 14)" )
-GAME_CUSTOM( 199?, m4makmnt__n, m4makmnt, "mam15t", 0x0000, 0x020000, CRC(a5975cbe) SHA1(eb6dd70c79c6b051190055d71ec8421080e5ba39), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 15)" )
-GAME_CUSTOM( 199?, m4makmnt__y, m4makmnt, "mint2010", 0x0000, 0x020000, CRC(e60d10b9) SHA1(3abe7a7f33a73827ed6585d92fe53d4058c87baf), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 26)" )
+// "(C)1993 BARCREST" and "MMG 0.2"
+GAME_CUSTOM( 199?, m4makmnt__y, m4makmnt, "mint2010", 0x0000, 0x020000, CRC(e60d10b9) SHA1(3abe7a7f33a73827ed6585d92fe53d4058c87baf), "Barcrest","Make A Mint (Barcrest) (MPU4) (MMG 0.2)" )
+// "(C)1997 B.W.B." and "MA_ 3.1"
+GAME_CUSTOM( 199?, m4makmnt__an, m4makmnt, "ma_x6__5.3_1", 0x0000, 0x010000, CRC(2fe3c309) SHA1(5dba65b29ea5492a78866863629d89f9a8588959), "Bwb","Make A Mint (Barcrest) (MPU4) (MA_ 3.1)" )
+GAME_CUSTOM( 199?, m4makmnt__ap, m4makmnt, "ma_x6_d5.3_1", 0x0000, 0x010000, CRC(a93dba0d) SHA1(6fabe994ac6c9ea4ce2bae99df699fa100098926), "Bwb","Make A Mint (Barcrest) (MPU4) (MA_ 3.1 D)" )
+GAME_CUSTOM( 199?, m4makmnt__ar, m4makmnt, "ma_x6a_5.3_1", 0x0000, 0x010000, CRC(79f673de) SHA1(805ea08f5ed016d25ec23dbc3952aad4873a1cde), "Bwb","Make A Mint (Barcrest) (MPU4) (MA_ 3.1 K)" )
+// "(C)1997 B.W.B." and "MA_ 3.0"
+GAME_CUSTOM( 199?, m4makmnt__ao, m4makmnt, "ma_x6__c.3_1", 0x0000, 0x010000, CRC(e9259a4d) SHA1(9a8e9590403f507f83197a898af5d543bda81b2b), "Bwb","Make A Mint (Barcrest) (MPU4) (MA_ 3.0)" )
+GAME_CUSTOM( 199?, m4makmnt__aq, m4makmnt, "ma_x6_dc.3_1", 0x0000, 0x010000, CRC(805d75c2) SHA1(b2433556b72f89887c1e404c80d85c940535e8af), "Bwb","Make A Mint (Barcrest) (MPU4) (MA_ 3.0 D)" )
+GAME_CUSTOM( 199?, m4makmnt__as, m4makmnt, "ma_x6a_c.3_1", 0x0000, 0x010000, CRC(43ede82a) SHA1(d6ec3dd170c56e90018568480bca72cd8390aa2d), "Bwb","Make A Mint (Barcrest) (MPU4) (MA_ 3.0 K)" )
+// "(C)1993 BARCREST" and "MMG 0.4" (but hack, doesn't want standard characterizer)
+GAME_CUSTOM( 199?, m4makmnt__m, m4makmnt, "mam15g", 0x0000, 0x020000, CRC(d3fd61f9) SHA1(1c738f818ea84f4bfca3c62fd9c34ce5e983b10a), "hack","Make A Mint (Barcrest) (MPU4) (MMG 0.4, hack)" )
+// no copyright string and "MAM 0.3"
+GAME_CUSTOM( 199?, m4makmnt__n, m4makmnt, "mam15t", 0x0000, 0x020000, CRC(a5975cbe) SHA1(eb6dd70c79c6b051190055d71ec8421080e5ba39), "hack","Make A Mint (Barcrest) (MPU4) (MAM 0.3 C, hack)" )
#define M4VIVAES_EXTRA_ROMS \
ROM_REGION( 0x48, "fakechr", 0 ) \
@@ -2136,73 +2140,76 @@ GAME_CUSTOM( 199?, m4vivaes__j, m4vivaes, "5p5vivaespana6-0.bin", 0x0000, 0
ROM_END \
GAME(year, setname, parent ,mod4oki ,mpu4 , mpu4_state,m4_showstring_big ,ROT0,company,title,GAME_FLAGS )
-GAME_CUSTOM( 199?, m4potblk, 0, "pbg16s.p1", 0x0000, 0x020000, CRC(36a1c679) SHA1(bf2eb5c2a07e61b7a2c0d8402b0e0583adfa22dc), "Barcrest","Pot Black (Barcrest) (MPU4) (set 1)" )
-GAME_CUSTOM( 199?, m4potblk__q, m4potblk, "pbg16ad.p1", 0x0000, 0x020000, CRC(919e90ba) SHA1(b32459b394595a5c3d238c6eec47c7d4d34fcdf8), "Barcrest","Pot Black (Barcrest) (MPU4) (set 18)" )
-GAME_CUSTOM( 199?, m4potblk__r, m4potblk, "pbg16b.p1", 0x0000, 0x020000, CRC(db445653) SHA1(145af560641f9becb6d98c2f157f94b0fdd6459c), "Barcrest","Pot Black (Barcrest) (MPU4) (set 19)" )
-GAME_CUSTOM( 199?, m4potblk__s, m4potblk, "pbg16bd.p1", 0x0000, 0x020000, CRC(db5938ec) SHA1(323f190c62f23b8092274dd17f07198f53abc828), "Barcrest","Pot Black (Barcrest) (MPU4) (set 20)" )
-GAME_CUSTOM( 199?, m4potblk__t, m4potblk, "pbg16d.p1", 0x0000, 0x020000, CRC(f8d7a418) SHA1(81a2d020ec03574b041b9be0b8ed96386804f4af), "Barcrest","Pot Black (Barcrest) (MPU4) (set 21)" )
-GAME_CUSTOM( 199?, m4potblk__u, m4potblk, "pbg16dh.p1", 0x0000, 0x020000, CRC(a642339a) SHA1(104b405923b71d69bc996dced4dc284d41397c5f), "Barcrest","Pot Black (Barcrest) (MPU4) (set 22)" )
-GAME_CUSTOM( 199?, m4potblk__v, m4potblk, "pbg16dk.p1", 0x0000, 0x020000, CRC(22912b8b) SHA1(cdbaaf0509fb6115182c8ac79002e1d983bcc765), "Barcrest","Pot Black (Barcrest) (MPU4) (set 23)" )
-GAME_CUSTOM( 199?, m4potblk__w, m4potblk, "pbg16dr.p1", 0x0000, 0x020000, CRC(b87ff532) SHA1(d64d4733523d4afe5b4e3ca5f2c33ee8d4ab1c2b), "Barcrest","Pot Black (Barcrest) (MPU4) (set 24)" )
-GAME_CUSTOM( 199?, m4potblk__x, m4potblk, "pbg16dy.p1", 0x0000, 0x020000, CRC(167db044) SHA1(291982c6af2486724be32b8f41ee66d699afad22), "Barcrest","Pot Black (Barcrest) (MPU4) (set 25)" )
-GAME_CUSTOM( 199?, m4potblk__y, m4potblk, "pbg16h.p1", 0x0000, 0x020000, CRC(a65f5d25) SHA1(6ea4bc92ecf849653c1abbb5c1e1d97d0e58a373), "Barcrest","Pot Black (Barcrest) (MPU4) (set 26)" )
-GAME_CUSTOM( 199?, m4potblk__z, m4potblk, "pbg16k.p1", 0x0000, 0x020000, CRC(228c4534) SHA1(e4a4e7ec059e4da568c507d8f1f006c04e1c13c4), "Barcrest","Pot Black (Barcrest) (MPU4) (set 27)" )
-GAME_CUSTOM( 199?, m4potblk__0, m4potblk, "pbg16r.p1", 0x0000, 0x020000, CRC(b8629b8d) SHA1(08fc4498b45f2e939c4c465d4d979aa4532b5ce4), "Barcrest","Pot Black (Barcrest) (MPU4) (set 28)" )
-GAME_CUSTOM( 199?, m4potblk__1, m4potblk, "pbg16y.p1", 0x0000, 0x020000, CRC(1660defb) SHA1(9f6112759b029e71056a92137f890910b6afb708), "Barcrest","Pot Black (Barcrest) (MPU4) (set 29)" )
-
-GAME_CUSTOM( 199?, m4potblk__c, m4potblk, "pbg14s.p1", 0x0000, 0x020000, CRC(c9316c92) SHA1(d9248069c4702d4ce780ab82bdb783ba5aea034b), "Barcrest","Pot Black (Barcrest) (MPU4) (set 4)" )
-
-GAME_CUSTOM( 199?, m4potblk__o, m4potblk, "pbg15s.p1", 0x0000, 0x020000, CRC(f31c9a6a) SHA1(f2c7dceaabbe0689227f2c59d063ac20403eae1d), "Barcrest","Pot Black (Barcrest) (MPU4) (set 16)" )
-GAME_CUSTOM( 199?, m4potblk__d, m4potblk, "pbg15ad.p1", 0x0000, 0x020000, CRC(ded4ba89) SHA1(f8b4727987bef1e74894df4e7549d3c28ba4de98), "Barcrest","Pot Black (Barcrest) (MPU4) (set 5)" )
-GAME_CUSTOM( 199?, m4potblk__e, m4potblk, "pbg15b.p1", 0x0000, 0x020000, CRC(5a6570be) SHA1(f44e4511cc0c0f410104f9a36ae51b3972bd4522), "Barcrest","Pot Black (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4potblk__f, m4potblk, "pbg15bd.p1", 0x0000, 0x020000, CRC(941312df) SHA1(51ec4052cfaa245873146d0ecb8834be5cc22db2), "Barcrest","Pot Black (Barcrest) (MPU4) (set 7)" )
-GAME_CUSTOM( 199?, m4potblk__g, m4potblk, "pbg15d.p1", 0x0000, 0x020000, CRC(79f682f5) SHA1(ee6f31009b8a5354db930d6f228a2969dbebb9ad), "Barcrest","Pot Black (Barcrest) (MPU4) (set 8)" )
-GAME_CUSTOM( 199?, m4potblk__h, m4potblk, "pbg15dh.p1", 0x0000, 0x020000, CRC(e90819a9) SHA1(f3d423e56205f6b18892fe8771aa853f7185336a), "Barcrest","Pot Black (Barcrest) (MPU4) (set 9)" )
-GAME_CUSTOM( 199?, m4potblk__i, m4potblk, "pbg15dk.p1", 0x0000, 0x020000, CRC(6ddb01b8) SHA1(aeefd2145f328f0f7af87b16f9bc2324d134b7e1), "Barcrest","Pot Black (Barcrest) (MPU4) (set 10)" )
-GAME_CUSTOM( 199?, m4potblk__j, m4potblk, "pbg15dr.p1", 0x0000, 0x020000, CRC(f735df01) SHA1(f669cd719cdf9fa170babc652be164bd7c580344), "Barcrest","Pot Black (Barcrest) (MPU4) (set 11)" )
-GAME_CUSTOM( 199?, m4potblk__k, m4potblk, "pbg15dy.p1", 0x0000, 0x020000, CRC(59379a77) SHA1(91b56aef53de7c554924ebab56faa3e8655dcbfd), "Barcrest","Pot Black (Barcrest) (MPU4) (set 12)" )
-GAME_CUSTOM( 199?, m4potblk__l, m4potblk, "pbg15h.p1", 0x0000, 0x020000, CRC(277e7bc8) SHA1(9f89a048fcf268883002bb0dcb14854949ebec46), "Barcrest","Pot Black (Barcrest) (MPU4) (set 13)" )
-GAME_CUSTOM( 199?, m4potblk__m, m4potblk, "pbg15k.p1", 0x0000, 0x020000, CRC(a3ad63d9) SHA1(0e65ff6ae02bd42cb1b3c9249ac85dc13b4eb8ad), "Barcrest","Pot Black (Barcrest) (MPU4) (set 14)" )
-GAME_CUSTOM( 199?, m4potblk__n, m4potblk, "pbg15r.p1", 0x0000, 0x020000, CRC(3943bd60) SHA1(cfcd1e2b76f592e3bc5b8ed33af66ad183e829e1), "Barcrest","Pot Black (Barcrest) (MPU4) (set 15)" )
-GAME_CUSTOM( 199?, m4potblk__p, m4potblk, "pbg15y.p1", 0x0000, 0x020000, CRC(9741f816) SHA1(52482fed48574582ed48424666284695fe661880), "Barcrest","Pot Black (Barcrest) (MPU4) (set 17)" )
-
-GAME_CUSTOM( 199?, m4potblk__ad, m4potblk, "pbs04s.p1", 0x0000, 0x020000, CRC(b4a7eaac) SHA1(295b793802a6145758861142133ced98f2258119), "Barcrest","Pot Black (Barcrest) (MPU4) (set 41)" )
-GAME_CUSTOM( 199?, m4potblk__2, m4potblk, "pbs04ad.p1", 0x0000, 0x020000, CRC(c4fedb7d) SHA1(1ce1e524bd11e775c0f8498849c1d9ca41fcf912), "Barcrest","Pot Black (Barcrest) (MPU4) (set 30)" )
-GAME_CUSTOM( 199?, m4potblk__3, m4potblk, "pbs04b.p1", 0x0000, 0x020000, CRC(f1fcaf2d) SHA1(786513cbfdde2f37c6ab3649781bc7c70bbdfb61), "Barcrest","Pot Black (Barcrest) (MPU4) (set 31)" )
-GAME_CUSTOM( 199?, m4potblk__4, m4potblk, "pbs04bd.p1", 0x0000, 0x020000, CRC(49e475b8) SHA1(95548a22c67bd8df6df05503b6318b15bd84bb7a), "Barcrest","Pot Black (Barcrest) (MPU4) (set 32)" )
-GAME_CUSTOM( 199?, m4potblk__5, m4potblk, "pbs04c.p1", 0x0000, 0x020000, CRC(c6b6123f) SHA1(ccd286dc09606d6cbf45835701dc83ca361c8dc0), "Barcrest","Pot Black (Barcrest) (MPU4) (set 33)" )
-GAME_CUSTOM( 199?, m4potblk__6, m4potblk, "pbs04dh.p1", 0x0000, 0x020000, CRC(34ff7ece) SHA1(a659aee7b093c00e920428f78e96e4246ad469ba), "Barcrest","Pot Black (Barcrest) (MPU4) (set 34)" )
-GAME_CUSTOM( 199?, m4potblk__7, m4potblk, "pbs04dk.p1", 0x0000, 0x020000, CRC(0323ddee) SHA1(74ac57542d6bf32a105682daf661546d18e1eab4), "Barcrest","Pot Black (Barcrest) (MPU4) (set 35)" )
-GAME_CUSTOM( 199?, m4potblk__8, m4potblk, "pbs04dr.p1", 0x0000, 0x020000, CRC(b02c66df) SHA1(7f2b24d747349a7a17b5f90dbada2a6c9f620b1d), "Barcrest","Pot Black (Barcrest) (MPU4) (set 36)" )
-GAME_CUSTOM( 199?, m4potblk__9, m4potblk, "pbs04dy.p1", 0x0000, 0x020000, CRC(84c0fd10) SHA1(586a41908165211b6d6386f12170aeda1ff3fbe9), "Barcrest","Pot Black (Barcrest) (MPU4) (set 37)" )
-GAME_CUSTOM( 199?, m4potblk__aa, m4potblk, "pbs04h.p1", 0x0000, 0x020000, CRC(8ce7a45b) SHA1(1eab7d504b4a8f6158aa5878dcc62c9531169a85), "Barcrest","Pot Black (Barcrest) (MPU4) (set 38)" )
-GAME_CUSTOM( 199?, m4potblk__ab, m4potblk, "pbs04k.p1", 0x0000, 0x020000, CRC(bb3b077b) SHA1(584fd9f1578c61e1a1c30068c42b16716c5d490f), "Barcrest","Pot Black (Barcrest) (MPU4) (set 39)" )
-GAME_CUSTOM( 199?, m4potblk__ac, m4potblk, "pbs04r.p1", 0x0000, 0x020000, CRC(0834bc4a) SHA1(0064b1ec9db506c4dd14ed7ffeffa08bebc117b1), "Barcrest","Pot Black (Barcrest) (MPU4) (set 40)" )
-GAME_CUSTOM( 199?, m4potblk__ae, m4potblk, "pbs04y.p1", 0x0000, 0x020000, CRC(3cd82785) SHA1(fb2cb5acfc60d0896da9c22b7a9370e7c0271cf7), "Barcrest","Pot Black (Barcrest) (MPU4) (set 42)" )
-
-GAME_CUSTOM( 199?, m4potblk__ar, m4potblk, "pbs06s.p1", 0x0000, 0x020000, CRC(d2b42b29) SHA1(a077605b1f9f3082a03882b4f5b360a530a97135), "Barcrest","Pot Black (Barcrest) (MPU4) (set 55)" )
-GAME_CUSTOM( 199?, m4potblk__af, m4potblk, "pbs06ad.p1", 0x0000, 0x020000, CRC(6344d6c7) SHA1(7c01149d9f21a15b1067a42d3f8def2868f15181), "Barcrest","Pot Black (Barcrest) (MPU4) (set 43)" )
-GAME_CUSTOM( 199?, m4potblk__ag, m4potblk, "pbs06b.p1", 0x0000, 0x020000, CRC(2056d268) SHA1(ac978d59ff3cead2678d56579e404eb7494ab957), "Barcrest","Pot Black (Barcrest) (MPU4) (set 44)" )
-GAME_CUSTOM( 199?, m4potblk__ah, m4potblk, "pbs06bd.p1", 0x0000, 0x020000, CRC(ee5e7802) SHA1(568b6b2e6d58ee766a74badb60118dc0899b8b68), "Barcrest","Pot Black (Barcrest) (MPU4) (set 45)" )
-GAME_CUSTOM( 199?, m4potblk__ai, m4potblk, "pbs06c.p1", 0x0000, 0x020000, CRC(171c6f7a) SHA1(e0c7455b64105cdd41ab24ef4cec7b044732faf6), "Barcrest","Pot Black (Barcrest) (MPU4) (set 46)" )
-GAME_CUSTOM( 199?, m4potblk__aj, m4potblk, "pbs06d.p1", 0x0000, 0x020000, CRC(03c52023) SHA1(534fbee8e19217002c428cc2d9a6693b8bccf974), "Barcrest","Pot Black (Barcrest) (MPU4) (set 47)" )
-GAME_CUSTOM( 199?, m4potblk__ak, m4potblk, "pbs06dh.p1", 0x0000, 0x020000, CRC(93457374) SHA1(40f4ed7260f234b69084676448705b53ff4700e4), "Barcrest","Pot Black (Barcrest) (MPU4) (set 48)" )
-GAME_CUSTOM( 199?, m4potblk__al, m4potblk, "pbs06dk.p1", 0x0000, 0x020000, CRC(a499d054) SHA1(6c740d6e765c5ac3690814f71cb340a67f0bb113), "Barcrest","Pot Black (Barcrest) (MPU4) (set 49)" )
-GAME_CUSTOM( 199?, m4potblk__am, m4potblk, "pbs06dr.p1", 0x0000, 0x020000, CRC(17966b65) SHA1(2a785268954388dba259df162298316e0d187ceb), "Barcrest","Pot Black (Barcrest) (MPU4) (set 50)" )
-GAME_CUSTOM( 199?, m4potblk__an, m4potblk, "pbs06dy.p1", 0x0000, 0x020000, CRC(237af0aa) SHA1(c6f1cf33506517eac98d449c54be33d1f220241c), "Barcrest","Pot Black (Barcrest) (MPU4) (set 51)" )
-GAME_CUSTOM( 199?, m4potblk__ao, m4potblk, "pbs06h.p1", 0x0000, 0x020000, CRC(5d4dd91e) SHA1(a715dde45ce7f3c6e62cb08eb5eaacb918803280), "Barcrest","Pot Black (Barcrest) (MPU4) (set 52)" )
-GAME_CUSTOM( 199?, m4potblk__ap, m4potblk, "pbs06k.p1", 0x0000, 0x020000, CRC(6a917a3e) SHA1(b8e6fb7ea83c5a363fdd756a5479a51d15cb246d), "Barcrest","Pot Black (Barcrest) (MPU4) (set 53)" )
-GAME_CUSTOM( 199?, m4potblk__aq, m4potblk, "pbs06r.p1", 0x0000, 0x020000, CRC(d99ec10f) SHA1(62ffc2772495fd165b2ad9f76a54154f51464394), "Barcrest","Pot Black (Barcrest) (MPU4) (set 54)" )
-GAME_CUSTOM( 199?, m4potblk__as, m4potblk, "pbs06y.p1", 0x0000, 0x020000, CRC(ed725ac0) SHA1(4c2c38e1c2ce7e15c409e06b6f21410f04b70348), "Barcrest","Pot Black (Barcrest) (MPU4) (set 56)" )
-
-GAME_CUSTOM( 199?, m4potblk__at, m4potblk, "po_x6__5.1_1", 0x0000, 0x020000, CRC(1fe40fd1) SHA1(5e16ff5b1019d83c1f40d63f89c16030dae0ab11), "Barcrest","Pot Black (Barcrest) (MPU4) (set 57)" )
-GAME_CUSTOM( 199?, m4potblk__au, m4potblk, "po_x6__t.1_1", 0x0000, 0x020000, CRC(c9314f6e) SHA1(4f9226883f9e1963c568eea327775688fb966431), "Barcrest","Pot Black (Barcrest) (MPU4) (set 58)" )
-GAME_CUSTOM( 199?, m4potblk__av, m4potblk, "po_x6_d5.1_1", 0x0000, 0x020000, CRC(404d5a99) SHA1(7a846df3b7f9f0108d84e4a4c2d199e5971b6375), "Barcrest","Pot Black (Barcrest) (MPU4) (set 59)" )
-GAME_CUSTOM( 199?, m4potblk__aw, m4potblk, "po_x6_dt.1_1", 0x0000, 0x020000, CRC(7213fd77) SHA1(07482cb54d4f03aad62c54d66322f7101f6c8dcf), "Barcrest","Pot Black (Barcrest) (MPU4) (set 60)" )
-GAME_CUSTOM( 199?, m4potblk__ax, m4potblk, "po_x6a_t.1_1", 0x0000, 0x020000, CRC(1b47a76a) SHA1(3587e4c0b50e359529e132376af3cd239194db31), "Barcrest","Pot Black (Barcrest) (MPU4) (set 61)" )
-
-GAME_CUSTOM( 199?, m4potblk__a, m4potblk, "pb15g", 0x0000, 0x020000, CRC(650a54be) SHA1(80a5bb95857c911c1972f8be5bf794637cb02323), "Barcrest","Pot Black (Barcrest) (MPU4) (set 2)" )
-GAME_CUSTOM( 199?, m4potblk__b, m4potblk, "pb15t", 0x0000, 0x020000, CRC(98628744) SHA1(1a0df7036c36f3b87d5a239e1c9edfd7c74d2ae8), "Barcrest","Pot Black (Barcrest) (MPU4) (set 3)" )
+//"(C)1993 BARCREST" and "PBG 1.6"
+GAME_CUSTOM( 199?, m4potblk, 0, "pbg16s.p1", 0x0000, 0x020000, CRC(36a1c679) SHA1(bf2eb5c2a07e61b7a2c0d8402b0e0583adfa22dc), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6)" )
+GAME_CUSTOM( 199?, m4potblk__q, m4potblk, "pbg16ad.p1", 0x0000, 0x020000, CRC(919e90ba) SHA1(b32459b394595a5c3d238c6eec47c7d4d34fcdf8), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 AD)" )
+GAME_CUSTOM( 199?, m4potblk__r, m4potblk, "pbg16b.p1", 0x0000, 0x020000, CRC(db445653) SHA1(145af560641f9becb6d98c2f157f94b0fdd6459c), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 B)" )
+GAME_CUSTOM( 199?, m4potblk__s, m4potblk, "pbg16bd.p1", 0x0000, 0x020000, CRC(db5938ec) SHA1(323f190c62f23b8092274dd17f07198f53abc828), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 BD)" )
+GAME_CUSTOM( 199?, m4potblk__t, m4potblk, "pbg16d.p1", 0x0000, 0x020000, CRC(f8d7a418) SHA1(81a2d020ec03574b041b9be0b8ed96386804f4af), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 D)" )
+GAME_CUSTOM( 199?, m4potblk__u, m4potblk, "pbg16dh.p1", 0x0000, 0x020000, CRC(a642339a) SHA1(104b405923b71d69bc996dced4dc284d41397c5f), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 DH)" )
+GAME_CUSTOM( 199?, m4potblk__v, m4potblk, "pbg16dk.p1", 0x0000, 0x020000, CRC(22912b8b) SHA1(cdbaaf0509fb6115182c8ac79002e1d983bcc765), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 KD)" )
+GAME_CUSTOM( 199?, m4potblk__w, m4potblk, "pbg16dr.p1", 0x0000, 0x020000, CRC(b87ff532) SHA1(d64d4733523d4afe5b4e3ca5f2c33ee8d4ab1c2b), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 RD)" )
+GAME_CUSTOM( 199?, m4potblk__x, m4potblk, "pbg16dy.p1", 0x0000, 0x020000, CRC(167db044) SHA1(291982c6af2486724be32b8f41ee66d699afad22), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 YD)" )
+GAME_CUSTOM( 199?, m4potblk__y, m4potblk, "pbg16h.p1", 0x0000, 0x020000, CRC(a65f5d25) SHA1(6ea4bc92ecf849653c1abbb5c1e1d97d0e58a373), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 H)" )
+GAME_CUSTOM( 199?, m4potblk__z, m4potblk, "pbg16k.p1", 0x0000, 0x020000, CRC(228c4534) SHA1(e4a4e7ec059e4da568c507d8f1f006c04e1c13c4), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 K)" )
+GAME_CUSTOM( 199?, m4potblk__0, m4potblk, "pbg16r.p1", 0x0000, 0x020000, CRC(b8629b8d) SHA1(08fc4498b45f2e939c4c465d4d979aa4532b5ce4), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 R)" )
+GAME_CUSTOM( 199?, m4potblk__1, m4potblk, "pbg16y.p1", 0x0000, 0x020000, CRC(1660defb) SHA1(9f6112759b029e71056a92137f890910b6afb708), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 Y)" )
+// "(C)1993 BARCREST" and "PBG 1.4"
+GAME_CUSTOM( 199?, m4potblk__c, m4potblk, "pbg14s.p1", 0x0000, 0x020000, CRC(c9316c92) SHA1(d9248069c4702d4ce780ab82bdb783ba5aea034b), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.4)" )
+// "(C)1993 BARCREST" and "PBG 1.5"
+GAME_CUSTOM( 199?, m4potblk__o, m4potblk, "pbg15s.p1", 0x0000, 0x020000, CRC(f31c9a6a) SHA1(f2c7dceaabbe0689227f2c59d063ac20403eae1d), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5)" )
+GAME_CUSTOM( 199?, m4potblk__d, m4potblk, "pbg15ad.p1", 0x0000, 0x020000, CRC(ded4ba89) SHA1(f8b4727987bef1e74894df4e7549d3c28ba4de98), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 AD)" )
+GAME_CUSTOM( 199?, m4potblk__e, m4potblk, "pbg15b.p1", 0x0000, 0x020000, CRC(5a6570be) SHA1(f44e4511cc0c0f410104f9a36ae51b3972bd4522), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 B)" )
+GAME_CUSTOM( 199?, m4potblk__f, m4potblk, "pbg15bd.p1", 0x0000, 0x020000, CRC(941312df) SHA1(51ec4052cfaa245873146d0ecb8834be5cc22db2), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 BD)" )
+GAME_CUSTOM( 199?, m4potblk__g, m4potblk, "pbg15d.p1", 0x0000, 0x020000, CRC(79f682f5) SHA1(ee6f31009b8a5354db930d6f228a2969dbebb9ad), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 D)" )
+GAME_CUSTOM( 199?, m4potblk__h, m4potblk, "pbg15dh.p1", 0x0000, 0x020000, CRC(e90819a9) SHA1(f3d423e56205f6b18892fe8771aa853f7185336a), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 DH)" )
+GAME_CUSTOM( 199?, m4potblk__i, m4potblk, "pbg15dk.p1", 0x0000, 0x020000, CRC(6ddb01b8) SHA1(aeefd2145f328f0f7af87b16f9bc2324d134b7e1), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 KD)" )
+GAME_CUSTOM( 199?, m4potblk__j, m4potblk, "pbg15dr.p1", 0x0000, 0x020000, CRC(f735df01) SHA1(f669cd719cdf9fa170babc652be164bd7c580344), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 RD)" )
+GAME_CUSTOM( 199?, m4potblk__k, m4potblk, "pbg15dy.p1", 0x0000, 0x020000, CRC(59379a77) SHA1(91b56aef53de7c554924ebab56faa3e8655dcbfd), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 YD)" )
+GAME_CUSTOM( 199?, m4potblk__l, m4potblk, "pbg15h.p1", 0x0000, 0x020000, CRC(277e7bc8) SHA1(9f89a048fcf268883002bb0dcb14854949ebec46), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 H)" )
+GAME_CUSTOM( 199?, m4potblk__m, m4potblk, "pbg15k.p1", 0x0000, 0x020000, CRC(a3ad63d9) SHA1(0e65ff6ae02bd42cb1b3c9249ac85dc13b4eb8ad), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 K)" )
+GAME_CUSTOM( 199?, m4potblk__n, m4potblk, "pbg15r.p1", 0x0000, 0x020000, CRC(3943bd60) SHA1(cfcd1e2b76f592e3bc5b8ed33af66ad183e829e1), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 R)" )
+GAME_CUSTOM( 199?, m4potblk__p, m4potblk, "pbg15y.p1", 0x0000, 0x020000, CRC(9741f816) SHA1(52482fed48574582ed48424666284695fe661880), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 Y)" )
+// "(C)1993 BARCREST" and "PBS 0.4"
+GAME_CUSTOM( 199?, m4potblk__ad, m4potblk, "pbs04s.p1", 0x0000, 0x020000, CRC(b4a7eaac) SHA1(295b793802a6145758861142133ced98f2258119), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4)" )
+GAME_CUSTOM( 199?, m4potblk__2, m4potblk, "pbs04ad.p1", 0x0000, 0x020000, CRC(c4fedb7d) SHA1(1ce1e524bd11e775c0f8498849c1d9ca41fcf912), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 AD)" )
+GAME_CUSTOM( 199?, m4potblk__3, m4potblk, "pbs04b.p1", 0x0000, 0x020000, CRC(f1fcaf2d) SHA1(786513cbfdde2f37c6ab3649781bc7c70bbdfb61), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 B)" )
+GAME_CUSTOM( 199?, m4potblk__4, m4potblk, "pbs04bd.p1", 0x0000, 0x020000, CRC(49e475b8) SHA1(95548a22c67bd8df6df05503b6318b15bd84bb7a), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 BD)" )
+GAME_CUSTOM( 199?, m4potblk__5, m4potblk, "pbs04c.p1", 0x0000, 0x020000, CRC(c6b6123f) SHA1(ccd286dc09606d6cbf45835701dc83ca361c8dc0), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 C)" )
+GAME_CUSTOM( 199?, m4potblk__6, m4potblk, "pbs04dh.p1", 0x0000, 0x020000, CRC(34ff7ece) SHA1(a659aee7b093c00e920428f78e96e4246ad469ba), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 DH)" )
+GAME_CUSTOM( 199?, m4potblk__7, m4potblk, "pbs04dk.p1", 0x0000, 0x020000, CRC(0323ddee) SHA1(74ac57542d6bf32a105682daf661546d18e1eab4), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 KD)" )
+GAME_CUSTOM( 199?, m4potblk__8, m4potblk, "pbs04dr.p1", 0x0000, 0x020000, CRC(b02c66df) SHA1(7f2b24d747349a7a17b5f90dbada2a6c9f620b1d), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 RD)" )
+GAME_CUSTOM( 199?, m4potblk__9, m4potblk, "pbs04dy.p1", 0x0000, 0x020000, CRC(84c0fd10) SHA1(586a41908165211b6d6386f12170aeda1ff3fbe9), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 YD)" )
+GAME_CUSTOM( 199?, m4potblk__aa, m4potblk, "pbs04h.p1", 0x0000, 0x020000, CRC(8ce7a45b) SHA1(1eab7d504b4a8f6158aa5878dcc62c9531169a85), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 H)" )
+GAME_CUSTOM( 199?, m4potblk__ab, m4potblk, "pbs04k.p1", 0x0000, 0x020000, CRC(bb3b077b) SHA1(584fd9f1578c61e1a1c30068c42b16716c5d490f), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 K)" )
+GAME_CUSTOM( 199?, m4potblk__ac, m4potblk, "pbs04r.p1", 0x0000, 0x020000, CRC(0834bc4a) SHA1(0064b1ec9db506c4dd14ed7ffeffa08bebc117b1), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 R)" )
+GAME_CUSTOM( 199?, m4potblk__ae, m4potblk, "pbs04y.p1", 0x0000, 0x020000, CRC(3cd82785) SHA1(fb2cb5acfc60d0896da9c22b7a9370e7c0271cf7), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 Y)" )
+// "(C)1993 BARCREST" and "PBS 0.6"
+GAME_CUSTOM( 199?, m4potblk__ar, m4potblk, "pbs06s.p1", 0x0000, 0x020000, CRC(d2b42b29) SHA1(a077605b1f9f3082a03882b4f5b360a530a97135), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6)" )
+GAME_CUSTOM( 199?, m4potblk__af, m4potblk, "pbs06ad.p1", 0x0000, 0x020000, CRC(6344d6c7) SHA1(7c01149d9f21a15b1067a42d3f8def2868f15181), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 AD)" )
+GAME_CUSTOM( 199?, m4potblk__ag, m4potblk, "pbs06b.p1", 0x0000, 0x020000, CRC(2056d268) SHA1(ac978d59ff3cead2678d56579e404eb7494ab957), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 B)" )
+GAME_CUSTOM( 199?, m4potblk__ah, m4potblk, "pbs06bd.p1", 0x0000, 0x020000, CRC(ee5e7802) SHA1(568b6b2e6d58ee766a74badb60118dc0899b8b68), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 BD)" )
+GAME_CUSTOM( 199?, m4potblk__ai, m4potblk, "pbs06c.p1", 0x0000, 0x020000, CRC(171c6f7a) SHA1(e0c7455b64105cdd41ab24ef4cec7b044732faf6), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 C)" )
+GAME_CUSTOM( 199?, m4potblk__aj, m4potblk, "pbs06d.p1", 0x0000, 0x020000, CRC(03c52023) SHA1(534fbee8e19217002c428cc2d9a6693b8bccf974), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 D)" )
+GAME_CUSTOM( 199?, m4potblk__ak, m4potblk, "pbs06dh.p1", 0x0000, 0x020000, CRC(93457374) SHA1(40f4ed7260f234b69084676448705b53ff4700e4), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 DH)" )
+GAME_CUSTOM( 199?, m4potblk__al, m4potblk, "pbs06dk.p1", 0x0000, 0x020000, CRC(a499d054) SHA1(6c740d6e765c5ac3690814f71cb340a67f0bb113), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 KD)" )
+GAME_CUSTOM( 199?, m4potblk__am, m4potblk, "pbs06dr.p1", 0x0000, 0x020000, CRC(17966b65) SHA1(2a785268954388dba259df162298316e0d187ceb), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 RD)" )
+GAME_CUSTOM( 199?, m4potblk__an, m4potblk, "pbs06dy.p1", 0x0000, 0x020000, CRC(237af0aa) SHA1(c6f1cf33506517eac98d449c54be33d1f220241c), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 YD)" )
+GAME_CUSTOM( 199?, m4potblk__ao, m4potblk, "pbs06h.p1", 0x0000, 0x020000, CRC(5d4dd91e) SHA1(a715dde45ce7f3c6e62cb08eb5eaacb918803280), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 H)" )
+GAME_CUSTOM( 199?, m4potblk__ap, m4potblk, "pbs06k.p1", 0x0000, 0x020000, CRC(6a917a3e) SHA1(b8e6fb7ea83c5a363fdd756a5479a51d15cb246d), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 K)" )
+GAME_CUSTOM( 199?, m4potblk__aq, m4potblk, "pbs06r.p1", 0x0000, 0x020000, CRC(d99ec10f) SHA1(62ffc2772495fd165b2ad9f76a54154f51464394), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 R)" )
+GAME_CUSTOM( 199?, m4potblk__as, m4potblk, "pbs06y.p1", 0x0000, 0x020000, CRC(ed725ac0) SHA1(4c2c38e1c2ce7e15c409e06b6f21410f04b70348), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 Y)" )
+// "(C)1997 B.W.B." and "PO 1.2"
+GAME_CUSTOM( 199?, m4potblk__at, m4potblk, "po_x6__5.1_1", 0x0000, 0x020000, CRC(1fe40fd1) SHA1(5e16ff5b1019d83c1f40d63f89c16030dae0ab11), "Bwb","Pot Black (Barcrest) (MPU4) (PO 1.2)" )
+GAME_CUSTOM( 199?, m4potblk__av, m4potblk, "po_x6_d5.1_1", 0x0000, 0x020000, CRC(404d5a99) SHA1(7a846df3b7f9f0108d84e4a4c2d199e5971b6375), "Bwb","Pot Black (Barcrest) (MPU4) (PO 1.2 D)" )
+// "(C)1997 B.W.B." and "PO 1.1"
+GAME_CUSTOM( 199?, m4potblk__au, m4potblk, "po_x6__t.1_1", 0x0000, 0x020000, CRC(c9314f6e) SHA1(4f9226883f9e1963c568eea327775688fb966431), "Bwb","Pot Black (Barcrest) (MPU4) (PO 1.1)" )
+GAME_CUSTOM( 199?, m4potblk__aw, m4potblk, "po_x6_dt.1_1", 0x0000, 0x020000, CRC(7213fd77) SHA1(07482cb54d4f03aad62c54d66322f7101f6c8dcf), "Bwb","Pot Black (Barcrest) (MPU4) (PO 1.1 D)" )
+GAME_CUSTOM( 199?, m4potblk__ax, m4potblk, "po_x6a_t.1_1", 0x0000, 0x020000, CRC(1b47a76a) SHA1(3587e4c0b50e359529e132376af3cd239194db31), "Bwb","Pot Black (Barcrest) (MPU4) (PO 1.1 K)" )
+// no copyright string and "PBG 1.5"
+GAME_CUSTOM( 199?, m4potblk__a, m4potblk, "pb15g", 0x0000, 0x020000, CRC(650a54be) SHA1(80a5bb95857c911c1972f8be5bf794637cb02323), "hack","Pot Black (Barcrest) (MPU4) (PBG 1.5 Y, hack)" )
+// no copyright string and "PBS 0.4"
+GAME_CUSTOM( 199?, m4potblk__b, m4potblk, "pb15t", 0x0000, 0x020000, CRC(98628744) SHA1(1a0df7036c36f3b87d5a239e1c9edfd7c74d2ae8), "hack","Pot Black (Barcrest) (MPU4) (PBS 0.4 C, hack)" )
#define M4PLACBT_EXTRA_ROMS \
@@ -2220,63 +2227,66 @@ GAME_CUSTOM( 199?, m4potblk__b, m4potblk, "pb15t", 0x0000, 0x020000,
ROM_END \
GAME(year, setname, parent ,mod4oki ,mpu4 , mpu4_state,m4_showstring_big ,ROT0,company,title,GAME_FLAGS )
-
-GAME_CUSTOM( 199?, m4placbt, 0, "pyb07s.p1", 0x0000, 0x020000, CRC(ad02705a) SHA1(027bcbbd828e4fd23831af9554d582857e6784e1), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 1)" )
-GAME_CUSTOM( 199?, m4placbt__m, m4placbt, "pyb07ad.p1", 0x0000, 0x020000, CRC(427a7489) SHA1(fb0a24da5ef7a948152e8180968aaaebbd85afa0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 14)" )
-GAME_CUSTOM( 199?, m4placbt__n, m4placbt, "pyb07b.p1", 0x0000, 0x020000, CRC(35cdf803) SHA1(94953da72c2ee8792f53bf677483ffed15d4709c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 15)" )
-GAME_CUSTOM( 199?, m4placbt__o, m4placbt, "pyb07bd.p1", 0x0000, 0x020000, CRC(cf60da4c) SHA1(8667308f750e944894f68f20b70d42244b751e22), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 16)" )
-GAME_CUSTOM( 199?, m4placbt__p, m4placbt, "pyb07c.p1", 0x0000, 0x020000, CRC(02874511) SHA1(b5acdcfb7d901faa1271eb16e5d36d0a484d97cb), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 17)" )
-GAME_CUSTOM( 199?, m4placbt__q, m4placbt, "pyb07d.p1", 0x0000, 0x020000, CRC(48d6f375) SHA1(1891b6f8f4599d94280bcb68e9d0e9259351e2b8), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 18)" )
-GAME_CUSTOM( 199?, m4placbt__r, m4placbt, "pyb07dk.p1", 0x0000, 0x020000, CRC(85a7721a) SHA1(e3af55577b4ad4ae48e95b576e336cb019f3ecd0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 19)" )
-GAME_CUSTOM( 199?, m4placbt__s, m4placbt, "pyb07dr.p1", 0x0000, 0x020000, CRC(36a8c92b) SHA1(a1091dea9ffe53c9ba1495f7e0d2aebe92d9bb64), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 20)" )
-GAME_CUSTOM( 199?, m4placbt__t, m4placbt, "pyb07dy.p1", 0x0000, 0x020000, CRC(024452e4) SHA1(a92c887ab467be6bcccaec1cd5dcc1304eddba19), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 21)" )
-GAME_CUSTOM( 199?, m4placbt__u, m4placbt, "pyb07k.p1", 0x0000, 0x020000, CRC(7f0a5055) SHA1(5620d8a3333f2f56ea24bcecf1a791e6ee0f43d9), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 22)" )
-GAME_CUSTOM( 199?, m4placbt__v, m4placbt, "pyb07r.p1", 0x0000, 0x020000, CRC(cc05eb64) SHA1(1329decc84de231e8c1929f057233b25cc8b5942), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 23)" )
-GAME_CUSTOM( 199?, m4placbt__w, m4placbt, "pyb07y.p1", 0x0000, 0x020000, CRC(f8e970ab) SHA1(66a54a9c2750ea1aa4ce562aad74c98775865ed6), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 24)" )
-
-GAME_CUSTOM( 199?, m4placbt__k, m4placbt, "pyb06s.p1", 0x0000, 0x020000, CRC(acd9d628) SHA1(93d8f0ffa3b9ebdd9fef39b2bc49bb85b2fac00f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 12)" )
-GAME_CUSTOM( 199?, m4placbt__a, m4placbt, "pyb06ad.p1", 0x0000, 0x020000, CRC(e08b6176) SHA1(ccfb43ee033b4ed36e8656bcb4ba62230dde8466), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 2)" )
-GAME_CUSTOM( 199?, m4placbt__b, m4placbt, "pyb06b.p1", 0x0000, 0x020000, CRC(b6486055) SHA1(e0926720aba1e9d1327c32db29220d91050ea338), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 3)" )
-GAME_CUSTOM( 199?, m4placbt__c, m4placbt, "pyb06bd.p1", 0x0000, 0x020000, CRC(6d91cfb3) SHA1(82d6ed6d6b2022d0945ec0fb8012fa4fef7029e0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 4)" )
-GAME_CUSTOM( 199?, m4placbt__d, m4placbt, "pyb06c.p1", 0x0000, 0x020000, CRC(8102dd47) SHA1(7b834d896e104b1f42069d6fa0bce75b5c15b899), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 5)" )
-GAME_CUSTOM( 199?, m4placbt__e, m4placbt, "pyb06d.p1", 0x0000, 0x020000, CRC(cb536b23) SHA1(874eaaa434a0212edefa05a440e7e5f826d1f92e), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4placbt__f, m4placbt, "pyb06dk.p1", 0x0000, 0x020000, CRC(275667e5) SHA1(4ac40eaa03462c1a70f0366f589bc2a59972827b), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 7)" )
-GAME_CUSTOM( 199?, m4placbt__g, m4placbt, "pyb06dr.p1", 0x0000, 0x020000, CRC(9459dcd4) SHA1(ae8b559205c6cb3f2e3b1131cd99ff7ce037c573), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 8)" )
-GAME_CUSTOM( 199?, m4placbt__h, m4placbt, "pyb06dy.p1", 0x0000, 0x020000, CRC(a0b5471b) SHA1(95400779bb1d3fdeada5d8fca4fd66a89d3e13a2), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 9)" )
-GAME_CUSTOM( 199?, m4placbt__i, m4placbt, "pyb06k.p1", 0x0000, 0x020000, CRC(fc8fc803) SHA1(81fa3104075b56f51c35d944fa3652aa8cce988c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 10)" )
-GAME_CUSTOM( 199?, m4placbt__j, m4placbt, "pyb06r.p1", 0x0000, 0x020000, CRC(4f807332) SHA1(e3852ac9811d780ac87f375acaf5ec1026071b2e), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 11)" )
-GAME_CUSTOM( 199?, m4placbt__l, m4placbt, "pyb06y.p1", 0x0000, 0x020000, CRC(7b6ce8fd) SHA1(096fb2e8a4ac5f723810766bc4245d403814a20f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 13)" )
-
-GAME_CUSTOM( 199?, m4placbt__ab, m4placbt, "pyh05s.p1", 0x0000, 0x020000, CRC(3c544ad9) SHA1(50780424382fd4ccd023a784e43bb60b8f862456), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 39)" )
-GAME_CUSTOM( 199?, m4placbt__1, m4placbt, "pyh05ad.p1", 0x0000, 0x020000, CRC(948d1ad6) SHA1(66c580f0ef9035de5f50600db51d63336a8d3fbb), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 29)" )
-GAME_CUSTOM( 199?, m4placbt__2, m4placbt, "pyh05b.p1", 0x0000, 0x020000, CRC(26c5fca4) SHA1(8166a195eb1aa7df99cc27e7cd6207a9192d14b9), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 30)" )
-GAME_CUSTOM( 199?, m4placbt__3, m4placbt, "pyh05bd.p1", 0x0000, 0x020000, CRC(1997b413) SHA1(cf701534243b302b83908bdf359050b325bd037a), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 31)" )
-GAME_CUSTOM( 199?, m4placbt__4, m4placbt, "pyh05c.p1", 0x0000, 0x020000, CRC(118f41b6) SHA1(29b74182d24d8d301a7aa899f4c1dd2b1a4eb84c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 32)" )
-GAME_CUSTOM( 199?, m4placbt__5, m4placbt, "pyh05d.p1", 0x0000, 0x020000, CRC(5bdef7d2) SHA1(c00a602ea6f0a53d53b13c2e4921aabd9d10b0f3), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 33)" )
-GAME_CUSTOM( 199?, m4placbt__6, m4placbt, "pyh05dk.p1", 0x0000, 0x020000, CRC(53501c45) SHA1(fa1161a0fe6916cd84370886688517e9905561d2), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 34)" )
-GAME_CUSTOM( 199?, m4placbt__7, m4placbt, "pyh05dr.p1", 0x0000, 0x020000, CRC(e05fa774) SHA1(44d53a0480b382f01ab42ca5b0521a612f672433), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 35)" )
-GAME_CUSTOM( 199?, m4placbt__8, m4placbt, "pyh05dy.p1", 0x0000, 0x020000, CRC(d4b33cbb) SHA1(e9681c025b3b661a26b89ef1fa6bbcffb6c2e233), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 36)" )
-GAME_CUSTOM( 199?, m4placbt__9, m4placbt, "pyh05k.p1", 0x0000, 0x020000, CRC(6c0254f2) SHA1(df14735ec9bc77fc35f52094598bb3fbb015944f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 37)" )
-GAME_CUSTOM( 199?, m4placbt__aa, m4placbt, "pyh05r.p1", 0x0000, 0x020000, CRC(df0defc3) SHA1(d259f6eb770130671d06e221d467df658ba0b29b), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 38)" )
-GAME_CUSTOM( 199?, m4placbt__ac, m4placbt, "pyh05y.p1", 0x0000, 0x020000, CRC(ebe1740c) SHA1(424707d023fd026cf43a687ed02d4ee4398b299f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 40)" )
-
-GAME_CUSTOM( 199?, m4placbt__an, m4placbt, "pyh06s.p1", 0x0000, 0x020000, CRC(10b75ddf) SHA1(d093ac51c64642400d2cf24a713dc7adb4a6a9d0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 51)" )
-GAME_CUSTOM( 199?, m4placbt__ad, m4placbt, "pyh06ad.p1", 0x0000, 0x020000, CRC(7ae70380) SHA1(c0e2b67ade2275a903359b6df7f55e44ef78828f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 41)" )
-GAME_CUSTOM( 199?, m4placbt__ae, m4placbt, "pyh06b.p1", 0x0000, 0x020000, CRC(dc588857) SHA1(dd2d2ffa87c61b200aa82337beea7d2205f1176c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 42)" )
-GAME_CUSTOM( 199?, m4placbt__af, m4placbt, "pyh06bd.p1", 0x0000, 0x020000, CRC(f7fdad45) SHA1(78334007b0a414fd3d2b8ec1645d1f04e711eb77), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 43)" )
-GAME_CUSTOM( 199?, m4placbt__ag, m4placbt, "pyh06c.p1", 0x0000, 0x020000, CRC(eb123545) SHA1(410400c219fb15f3267c2f94737fa9d2785318a0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 44)" )
-GAME_CUSTOM( 199?, m4placbt__ah, m4placbt, "pyh06d.p1", 0x0000, 0x020000, CRC(a1438321) SHA1(53f7e0156b137bea91264fe662642083ca9f5f9c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 45)" )
-GAME_CUSTOM( 199?, m4placbt__ai, m4placbt, "pyh06dk.p1", 0x0000, 0x020000, CRC(bd3a0513) SHA1(98dfd874dcbee5a3c16a0ebf42f944bf0ba50672), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 46)" )
-GAME_CUSTOM( 199?, m4placbt__aj, m4placbt, "pyh06dr.p1", 0x0000, 0x020000, CRC(0e35be22) SHA1(8ff910601bfec1b47e50ba92cdb80c1bdfe287ec), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 47)" )
-GAME_CUSTOM( 199?, m4placbt__ak, m4placbt, "pyh06dy.p1", 0x0000, 0x020000, CRC(3ad925ed) SHA1(af584333e443127071b874bafea0c8667da33f6c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 48)" )
-GAME_CUSTOM( 199?, m4placbt__al, m4placbt, "pyh06k.p1", 0x0000, 0x020000, CRC(969f2001) SHA1(e934aa7e95e91f155ee82e8eaac5c949b35e024b), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 49)" )
-GAME_CUSTOM( 199?, m4placbt__am, m4placbt, "pyh06r.p1", 0x0000, 0x020000, CRC(25909b30) SHA1(8a44e59a46ffec3badb27ee62e7e9bb0adff62a4), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 50)" )
-GAME_CUSTOM( 199?, m4placbt__ao, m4placbt, "pyh06y.p1", 0x0000, 0x020000, CRC(117c00ff) SHA1(ace5d8c4f4e0647c89608db2c2ad35f241be3672), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 52)" )
-
-GAME_CUSTOM( 199?, m4placbt__x, m4placbt, "pyb10h", 0x0000, 0x020000, CRC(69be6185) SHA1(f697350912505cd857acae2733ad8b48e67cab6b), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 25)" )
-GAME_CUSTOM( 199?, m4placbt__y, m4placbt, "pyb15g", 0x0000, 0x020000, CRC(369fd852) SHA1(4c532a59451352aa54a1e47d12f04403d2e9c8cb), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 26)" )
-GAME_CUSTOM( 199?, m4placbt__z, m4placbt, "pyb15t", 0x0000, 0x020000, CRC(c38d7b04) SHA1(5785344084498cab4ce2734b3d8c0dc8f0cbed5a), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 27)" )
-GAME_CUSTOM( 199?, m4placbt__0, m4placbt, "pyh04s", 0x0000, 0x020000, CRC(c824b937) SHA1(9bc0a1e75540520ef3448dc7a3c95c81f93abe78), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 28)" )
+// "(C)1993 BARCREST" and "PYB 0.7"
+GAME_CUSTOM( 199?, m4placbt, 0, "pyb07s.p1", 0x0000, 0x020000, CRC(ad02705a) SHA1(027bcbbd828e4fd23831af9554d582857e6784e1), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7)" )
+GAME_CUSTOM( 199?, m4placbt__m, m4placbt, "pyb07ad.p1", 0x0000, 0x020000, CRC(427a7489) SHA1(fb0a24da5ef7a948152e8180968aaaebbd85afa0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 AD)" )
+GAME_CUSTOM( 199?, m4placbt__n, m4placbt, "pyb07b.p1", 0x0000, 0x020000, CRC(35cdf803) SHA1(94953da72c2ee8792f53bf677483ffed15d4709c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 B)" )
+GAME_CUSTOM( 199?, m4placbt__o, m4placbt, "pyb07bd.p1", 0x0000, 0x020000, CRC(cf60da4c) SHA1(8667308f750e944894f68f20b70d42244b751e22), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 BD)" )
+GAME_CUSTOM( 199?, m4placbt__p, m4placbt, "pyb07c.p1", 0x0000, 0x020000, CRC(02874511) SHA1(b5acdcfb7d901faa1271eb16e5d36d0a484d97cb), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 C)" )
+GAME_CUSTOM( 199?, m4placbt__q, m4placbt, "pyb07d.p1", 0x0000, 0x020000, CRC(48d6f375) SHA1(1891b6f8f4599d94280bcb68e9d0e9259351e2b8), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 D)" )
+GAME_CUSTOM( 199?, m4placbt__r, m4placbt, "pyb07dk.p1", 0x0000, 0x020000, CRC(85a7721a) SHA1(e3af55577b4ad4ae48e95b576e336cb019f3ecd0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 KD)" )
+GAME_CUSTOM( 199?, m4placbt__s, m4placbt, "pyb07dr.p1", 0x0000, 0x020000, CRC(36a8c92b) SHA1(a1091dea9ffe53c9ba1495f7e0d2aebe92d9bb64), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 RD)" )
+GAME_CUSTOM( 199?, m4placbt__t, m4placbt, "pyb07dy.p1", 0x0000, 0x020000, CRC(024452e4) SHA1(a92c887ab467be6bcccaec1cd5dcc1304eddba19), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 YD)" )
+GAME_CUSTOM( 199?, m4placbt__u, m4placbt, "pyb07k.p1", 0x0000, 0x020000, CRC(7f0a5055) SHA1(5620d8a3333f2f56ea24bcecf1a791e6ee0f43d9), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 K)" )
+GAME_CUSTOM( 199?, m4placbt__v, m4placbt, "pyb07r.p1", 0x0000, 0x020000, CRC(cc05eb64) SHA1(1329decc84de231e8c1929f057233b25cc8b5942), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 R)" )
+GAME_CUSTOM( 199?, m4placbt__w, m4placbt, "pyb07y.p1", 0x0000, 0x020000, CRC(f8e970ab) SHA1(66a54a9c2750ea1aa4ce562aad74c98775865ed6), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 Y)" )
+// "(C)1993 BARCREST" and "PYB 0.6"
+GAME_CUSTOM( 199?, m4placbt__k, m4placbt, "pyb06s.p1", 0x0000, 0x020000, CRC(acd9d628) SHA1(93d8f0ffa3b9ebdd9fef39b2bc49bb85b2fac00f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6)" )
+GAME_CUSTOM( 199?, m4placbt__a, m4placbt, "pyb06ad.p1", 0x0000, 0x020000, CRC(e08b6176) SHA1(ccfb43ee033b4ed36e8656bcb4ba62230dde8466), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 AD)" )
+GAME_CUSTOM( 199?, m4placbt__b, m4placbt, "pyb06b.p1", 0x0000, 0x020000, CRC(b6486055) SHA1(e0926720aba1e9d1327c32db29220d91050ea338), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 B)" )
+GAME_CUSTOM( 199?, m4placbt__c, m4placbt, "pyb06bd.p1", 0x0000, 0x020000, CRC(6d91cfb3) SHA1(82d6ed6d6b2022d0945ec0fb8012fa4fef7029e0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 BD)" )
+GAME_CUSTOM( 199?, m4placbt__d, m4placbt, "pyb06c.p1", 0x0000, 0x020000, CRC(8102dd47) SHA1(7b834d896e104b1f42069d6fa0bce75b5c15b899), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 C)" )
+GAME_CUSTOM( 199?, m4placbt__e, m4placbt, "pyb06d.p1", 0x0000, 0x020000, CRC(cb536b23) SHA1(874eaaa434a0212edefa05a440e7e5f826d1f92e), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 D)" )
+GAME_CUSTOM( 199?, m4placbt__f, m4placbt, "pyb06dk.p1", 0x0000, 0x020000, CRC(275667e5) SHA1(4ac40eaa03462c1a70f0366f589bc2a59972827b), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 KD)" )
+GAME_CUSTOM( 199?, m4placbt__g, m4placbt, "pyb06dr.p1", 0x0000, 0x020000, CRC(9459dcd4) SHA1(ae8b559205c6cb3f2e3b1131cd99ff7ce037c573), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 RD)" )
+GAME_CUSTOM( 199?, m4placbt__h, m4placbt, "pyb06dy.p1", 0x0000, 0x020000, CRC(a0b5471b) SHA1(95400779bb1d3fdeada5d8fca4fd66a89d3e13a2), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 YD)" )
+GAME_CUSTOM( 199?, m4placbt__i, m4placbt, "pyb06k.p1", 0x0000, 0x020000, CRC(fc8fc803) SHA1(81fa3104075b56f51c35d944fa3652aa8cce988c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 K)" )
+GAME_CUSTOM( 199?, m4placbt__j, m4placbt, "pyb06r.p1", 0x0000, 0x020000, CRC(4f807332) SHA1(e3852ac9811d780ac87f375acaf5ec1026071b2e), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 R)" )
+GAME_CUSTOM( 199?, m4placbt__l, m4placbt, "pyb06y.p1", 0x0000, 0x020000, CRC(7b6ce8fd) SHA1(096fb2e8a4ac5f723810766bc4245d403814a20f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 Y)" )
+// "(C)1993 BARCREST" and "PYH 0.6"
+GAME_CUSTOM( 199?, m4placbt__an, m4placbt, "pyh06s.p1", 0x0000, 0x020000, CRC(10b75ddf) SHA1(d093ac51c64642400d2cf24a713dc7adb4a6a9d0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6)" )
+GAME_CUSTOM( 199?, m4placbt__ad, m4placbt, "pyh06ad.p1", 0x0000, 0x020000, CRC(7ae70380) SHA1(c0e2b67ade2275a903359b6df7f55e44ef78828f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 AD)" )
+GAME_CUSTOM( 199?, m4placbt__ae, m4placbt, "pyh06b.p1", 0x0000, 0x020000, CRC(dc588857) SHA1(dd2d2ffa87c61b200aa82337beea7d2205f1176c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 B)" )
+GAME_CUSTOM( 199?, m4placbt__af, m4placbt, "pyh06bd.p1", 0x0000, 0x020000, CRC(f7fdad45) SHA1(78334007b0a414fd3d2b8ec1645d1f04e711eb77), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 BD)" )
+GAME_CUSTOM( 199?, m4placbt__ag, m4placbt, "pyh06c.p1", 0x0000, 0x020000, CRC(eb123545) SHA1(410400c219fb15f3267c2f94737fa9d2785318a0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 C)" )
+GAME_CUSTOM( 199?, m4placbt__ah, m4placbt, "pyh06d.p1", 0x0000, 0x020000, CRC(a1438321) SHA1(53f7e0156b137bea91264fe662642083ca9f5f9c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 D)" )
+GAME_CUSTOM( 199?, m4placbt__ai, m4placbt, "pyh06dk.p1", 0x0000, 0x020000, CRC(bd3a0513) SHA1(98dfd874dcbee5a3c16a0ebf42f944bf0ba50672), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 KD)" )
+GAME_CUSTOM( 199?, m4placbt__aj, m4placbt, "pyh06dr.p1", 0x0000, 0x020000, CRC(0e35be22) SHA1(8ff910601bfec1b47e50ba92cdb80c1bdfe287ec), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 RD)" )
+GAME_CUSTOM( 199?, m4placbt__ak, m4placbt, "pyh06dy.p1", 0x0000, 0x020000, CRC(3ad925ed) SHA1(af584333e443127071b874bafea0c8667da33f6c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 YD)" )
+GAME_CUSTOM( 199?, m4placbt__al, m4placbt, "pyh06k.p1", 0x0000, 0x020000, CRC(969f2001) SHA1(e934aa7e95e91f155ee82e8eaac5c949b35e024b), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 K)" )
+GAME_CUSTOM( 199?, m4placbt__am, m4placbt, "pyh06r.p1", 0x0000, 0x020000, CRC(25909b30) SHA1(8a44e59a46ffec3badb27ee62e7e9bb0adff62a4), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 R)" )
+GAME_CUSTOM( 199?, m4placbt__ao, m4placbt, "pyh06y.p1", 0x0000, 0x020000, CRC(117c00ff) SHA1(ace5d8c4f4e0647c89608db2c2ad35f241be3672), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 Y)" )
+// "(C)1993 BARCREST" and "PYH 0.5"
+GAME_CUSTOM( 199?, m4placbt__ab, m4placbt, "pyh05s.p1", 0x0000, 0x020000, CRC(3c544ad9) SHA1(50780424382fd4ccd023a784e43bb60b8f862456), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5)" )
+GAME_CUSTOM( 199?, m4placbt__1, m4placbt, "pyh05ad.p1", 0x0000, 0x020000, CRC(948d1ad6) SHA1(66c580f0ef9035de5f50600db51d63336a8d3fbb), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 AD)" )
+GAME_CUSTOM( 199?, m4placbt__2, m4placbt, "pyh05b.p1", 0x0000, 0x020000, CRC(26c5fca4) SHA1(8166a195eb1aa7df99cc27e7cd6207a9192d14b9), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 B)" )
+GAME_CUSTOM( 199?, m4placbt__3, m4placbt, "pyh05bd.p1", 0x0000, 0x020000, CRC(1997b413) SHA1(cf701534243b302b83908bdf359050b325bd037a), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 BD)" )
+GAME_CUSTOM( 199?, m4placbt__4, m4placbt, "pyh05c.p1", 0x0000, 0x020000, CRC(118f41b6) SHA1(29b74182d24d8d301a7aa899f4c1dd2b1a4eb84c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 C)" )
+GAME_CUSTOM( 199?, m4placbt__5, m4placbt, "pyh05d.p1", 0x0000, 0x020000, CRC(5bdef7d2) SHA1(c00a602ea6f0a53d53b13c2e4921aabd9d10b0f3), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 D)" )
+GAME_CUSTOM( 199?, m4placbt__6, m4placbt, "pyh05dk.p1", 0x0000, 0x020000, CRC(53501c45) SHA1(fa1161a0fe6916cd84370886688517e9905561d2), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 KD)" )
+GAME_CUSTOM( 199?, m4placbt__7, m4placbt, "pyh05dr.p1", 0x0000, 0x020000, CRC(e05fa774) SHA1(44d53a0480b382f01ab42ca5b0521a612f672433), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 RD)" )
+GAME_CUSTOM( 199?, m4placbt__8, m4placbt, "pyh05dy.p1", 0x0000, 0x020000, CRC(d4b33cbb) SHA1(e9681c025b3b661a26b89ef1fa6bbcffb6c2e233), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 YD)" )
+GAME_CUSTOM( 199?, m4placbt__9, m4placbt, "pyh05k.p1", 0x0000, 0x020000, CRC(6c0254f2) SHA1(df14735ec9bc77fc35f52094598bb3fbb015944f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 K)" )
+GAME_CUSTOM( 199?, m4placbt__aa, m4placbt, "pyh05r.p1", 0x0000, 0x020000, CRC(df0defc3) SHA1(d259f6eb770130671d06e221d467df658ba0b29b), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 R)" )
+GAME_CUSTOM( 199?, m4placbt__ac, m4placbt, "pyh05y.p1", 0x0000, 0x020000, CRC(ebe1740c) SHA1(424707d023fd026cf43a687ed02d4ee4398b299f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 Y)" )
+// "(C)1993 BARCREST" and "PYH 0.4"
+GAME_CUSTOM( 199?, m4placbt__0, m4placbt, "pyh04s", 0x0000, 0x020000, CRC(c824b937) SHA1(9bc0a1e75540520ef3448dc7a3c95c81f93abe78), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.4)" )
+// "(C)1993 BARCREST" and "PYH 0.1"
+GAME_CUSTOM( 199?, m4placbt__x, m4placbt, "pyb10h", 0x0000, 0x020000, CRC(69be6185) SHA1(f697350912505cd857acae2733ad8b48e67cab6b), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.1)" )
+// no copyright string and "PYH 0.5"
+GAME_CUSTOM( 199?, m4placbt__y, m4placbt, "pyb15g", 0x0000, 0x020000, CRC(369fd852) SHA1(4c532a59451352aa54a1e47d12f04403d2e9c8cb), "hack","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 Y, hack)" )
+// no copyright string and "PYB 0.6"
+GAME_CUSTOM( 199?, m4placbt__z, m4placbt, "pyb15t", 0x0000, 0x020000, CRC(c38d7b04) SHA1(5785344084498cab4ce2734b3d8c0dc8f0cbed5a), "hack","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 C, hack)" )
#define M4C9_EXTRA_ROMS \
@@ -3688,21 +3698,21 @@ GAME_CUSTOM( 199?, m4bdash__ar, m4bdash, "bls02k.p1", 0x0000, 0x020000, CR
GAME_CUSTOM( 199?, m4bdash__as, m4bdash, "bls02r.p1", 0x0000, 0x020000, CRC(2e9788bc) SHA1(586a30b3485e0ceb8b9b389e103fdbab78115446), "Barcrest","Boulder Dash (Barcrest) (MPU4) (set 56)" )
GAME_CUSTOM( 199?, m4bdash__au, m4bdash, "bls02y.p1", 0x0000, 0x020000, CRC(1a7b1373) SHA1(dde4754d92f0fde495ab826294a650ac81fd586e), "Barcrest","Boulder Dash (Barcrest) (MPU4) (set 58)" )
// "(C)1999 BWB" and "BO_ 2.0"
-GAME_CUSTOM( 199?, m4bdash__ax, m4bdash, "bo__x__x.2_0", 0x0000, 0x020000, CRC(7e54982f) SHA1(c5187d2f6a5b202af5fd6326d52451d3b3f48f33), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.0, set 1)" )
-GAME_CUSTOM( 199?, m4bdash__az, m4bdash, "bo__x_dx.2_0", 0x0000, 0x020000, CRC(d0d9e7b1) SHA1(31e858991fc1dfe9c1a8bd7955096617ebe0a4ce), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.0, set 2)" )
-GAME_CUSTOM( 199?, m4bdash__a1, m4bdash, "bo__xa_x.2_0", 0x0000, 0x020000, CRC(e7054491) SHA1(7d102b1071d90ff29ea4a9418478b17b93c08059), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.0, set 3)" )
-GAME_CUSTOM( 199?, m4bdash__a3, m4bdash, "bo__xb_x.2_0", 0x0000, 0x020000, CRC(adc2ecc7) SHA1(75e4216ff022c1ae0642913c9aaa7e241b806fcd), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.0, set 4)" )
+GAME_CUSTOM( 199?, m4bdash__ax, m4bdash, "bo__x__x.2_0", 0x0000, 0x020000, CRC(7e54982f) SHA1(c5187d2f6a5b202af5fd6326d52451d3b3f48f33), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.0)" )
+GAME_CUSTOM( 199?, m4bdash__az, m4bdash, "bo__x_dx.2_0", 0x0000, 0x020000, CRC(d0d9e7b1) SHA1(31e858991fc1dfe9c1a8bd7955096617ebe0a4ce), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.0 D)" )
+GAME_CUSTOM( 199?, m4bdash__a1, m4bdash, "bo__xa_x.2_0", 0x0000, 0x020000, CRC(e7054491) SHA1(7d102b1071d90ff29ea4a9418478b17b93c08059), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.0 K)" )
+GAME_CUSTOM( 199?, m4bdash__a3, m4bdash, "bo__xb_x.2_0", 0x0000, 0x020000, CRC(adc2ecc7) SHA1(75e4216ff022c1ae0642913c9aaa7e241b806fcd), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.0 B)" )
// "(C)1999 BWB" and "BO_ 2.1"
-GAME_CUSTOM( 199?, m4bdash__ay, m4bdash, "bo__x__x.2_1", 0x0000, 0x020000, CRC(3e48d8ad) SHA1(73d69712993819d012c2ab2a8a36b7ebad419144), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.1, set 1)" )
-GAME_CUSTOM( 199?, m4bdash__a0, m4bdash, "bo__x_dx.2_1", 0x0000, 0x020000, CRC(b6e146c4) SHA1(8bda363f16bd258d5c6ba1b20cecc0a76e0965f7), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.1, set 2)" )
-GAME_CUSTOM( 199?, m4bdash__a2, m4bdash, "bo__xa_x.2_1", 0x0000, 0x020000, CRC(813de5e4) SHA1(498923261e49b20666a930593fcf25ccfc9a9d79), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.1, set 3)" )
-GAME_CUSTOM( 199?, m4bdash__a4, m4bdash, "bo__xb_x.2_1", 0x0000, 0x020000, CRC(cbfa4db2) SHA1(d1ed60f876b4f056f478cfc23b08a7789379e143), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.1, set 4)" )
+GAME_CUSTOM( 199?, m4bdash__ay, m4bdash, "bo__x__x.2_1", 0x0000, 0x020000, CRC(3e48d8ad) SHA1(73d69712993819d012c2ab2a8a36b7ebad419144), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.1)" )
+GAME_CUSTOM( 199?, m4bdash__a0, m4bdash, "bo__x_dx.2_1", 0x0000, 0x020000, CRC(b6e146c4) SHA1(8bda363f16bd258d5c6ba1b20cecc0a76e0965f7), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.1 D)" )
+GAME_CUSTOM( 199?, m4bdash__a2, m4bdash, "bo__xa_x.2_1", 0x0000, 0x020000, CRC(813de5e4) SHA1(498923261e49b20666a930593fcf25ccfc9a9d79), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.1 K)" )
+GAME_CUSTOM( 199?, m4bdash__a4, m4bdash, "bo__xb_x.2_1", 0x0000, 0x020000, CRC(cbfa4db2) SHA1(d1ed60f876b4f056f478cfc23b08a7789379e143), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.1 B)" )
// no copyright string and "BLD 1.0"
GAME_CUSTOM( 199?, m4bdash__a, m4bdash, "bdvarg.bin", 0x0000, 0x020000, CRC(99d579e7) SHA1(afc47144e0a8d464d8547b1ad14b0a3a1c15c027), "hack","Boulder Dash (Barcrest) (MPU4) (BLD 1.0, hack)" )
// no copyright string and "BLD 0.7"
-GAME_CUSTOM( 199?, m4bdash__av, m4bdash, "bold15g", 0x0000, 0x020000, CRC(fa400d34) SHA1(2faeb9b880fb4980aa0d96b4b962c879498445f2), "hack","Boulder Dash (Barcrest) (MPU4) (BLD 0.7, hack)" )
+GAME_CUSTOM( 199?, m4bdash__av, m4bdash, "bold15g", 0x0000, 0x020000, CRC(fa400d34) SHA1(2faeb9b880fb4980aa0d96b4b962c879498445f2), "hack","Boulder Dash (Barcrest) (MPU4) (BLD 0.7 C, hack)" )
// no copyright string and "BLS 0.1"
-GAME_CUSTOM( 199?, m4bdash__aw, m4bdash, "bold15t", 0x0000, 0x020000, CRC(f3f331ae) SHA1(d999c8571549d8d26b7b861299d77c7282aef700), "hack","Boulder Dash (Barcrest) (MPU4) (BLS 0.1, hack)" )
+GAME_CUSTOM( 199?, m4bdash__aw, m4bdash, "bold15t", 0x0000, 0x020000, CRC(f3f331ae) SHA1(d999c8571549d8d26b7b861299d77c7282aef700), "hack","Boulder Dash (Barcrest) (MPU4) (BLS 0.1 C, hack)" )
#define M4PRZDTY_EXTRA_ROMS \
@@ -4026,15 +4036,15 @@ GAME_CUSTOM( 199?, m4buc__ap, m4buc, "bus02r.p1", 0x000000, 0x020000
GAME_CUSTOM( 199?, m4buc__ar, m4buc, "bus02y.p1", 0x000000, 0x020000, CRC(95f7d5c5) SHA1(301949ad27963041a3cef000ed9ffd16c119b18d), "Barcrest","Buccaneer (Barcrest) (MPU4) (set 55)" )
// "(C)1999 BWB" and "BR_ 1.0"
-GAME_CUSTOM( 199?, m4buc__as, m4buc, "br_sj___.1_1", 0x000000, 0x020000, CRC(02c30d48) SHA1(8e5d09d721bf6e1876d672b6c84f46666cf42b90), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 1)" )
-GAME_CUSTOM( 199?, m4buc__at, m4buc, "br_sj_b_.1_1", 0x000000, 0x020000, CRC(490ec8a7) SHA1(faf9f450d48382aeb7b8e01750fc226c30e761d3), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 2)" )
-GAME_CUSTOM( 199?, m4buc__au, m4buc, "br_sj_d_.1_1", 0x000000, 0x020000, CRC(ac4e72d6) SHA1(303f77e536b8da79a926dc5b30441ae9071f683b), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 3)" )
-GAME_CUSTOM( 199?, m4buc__av, m4buc, "br_sj_k_.1_1", 0x000000, 0x020000, CRC(1c71f108) SHA1(10f4e99b0af4a102ed23098123d82da2a8f1c5be), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 4)" )
-GAME_CUSTOM( 199?, m4buc__aw, m4buc, "br_sjb__.1_1", 0x000000, 0x020000, CRC(d15579a0) SHA1(577c7cd11da15083327dba385a6769b346be2b71), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 5)" )
-GAME_CUSTOM( 199?, m4buc__ax, m4buc, "br_sjbg_.1_1", 0x000000, 0x020000, CRC(5f8ec0ae) SHA1(8eacfd43e3f875af862b77f044b7a9f1487af4a1), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 6)" )
-GAME_CUSTOM( 199?, m4buc__ay, m4buc, "br_sjbt_.1_1", 0x000000, 0x020000, CRC(00f9581e) SHA1(1461539f501250a08bf66e4a94e4b84113dc0dc5), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 7)" )
-GAME_CUSTOM( 199?, m4buc__az, m4buc, "br_sjwb_.1_1", 0x000000, 0x020000, CRC(d15cb680) SHA1(4ab485eb2d1d57c690926e430e0c8b2af045381d), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 8)" )
-GAME_CUSTOM( 199?, m4buc__n, m4buc, "buccaneer5-15sw.bin", 0x000000, 0x020000, CRC(9b92d1f6) SHA1(d374fe966a1b039c971f278ab1113640e7629233), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 9)" )
+GAME_CUSTOM( 199?, m4buc__as, m4buc, "br_sj___.1_1", 0x000000, 0x020000, CRC(02c30d48) SHA1(8e5d09d721bf6e1876d672b6c84f46666cf42b90), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0)" )
+GAME_CUSTOM( 199?, m4buc__at, m4buc, "br_sj_b_.1_1", 0x000000, 0x020000, CRC(490ec8a7) SHA1(faf9f450d48382aeb7b8e01750fc226c30e761d3), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0 YD)" )
+GAME_CUSTOM( 199?, m4buc__au, m4buc, "br_sj_d_.1_1", 0x000000, 0x020000, CRC(ac4e72d6) SHA1(303f77e536b8da79a926dc5b30441ae9071f683b), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0 D)" )
+GAME_CUSTOM( 199?, m4buc__av, m4buc, "br_sj_k_.1_1", 0x000000, 0x020000, CRC(1c71f108) SHA1(10f4e99b0af4a102ed23098123d82da2a8f1c5be), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0 Y)" )
+GAME_CUSTOM( 199?, m4buc__aw, m4buc, "br_sjb__.1_1", 0x000000, 0x020000, CRC(d15579a0) SHA1(577c7cd11da15083327dba385a6769b346be2b71), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0 B)" )
+GAME_CUSTOM( 199?, m4buc__ax, m4buc, "br_sjbg_.1_1", 0x000000, 0x020000, CRC(5f8ec0ae) SHA1(8eacfd43e3f875af862b77f044b7a9f1487af4a1), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0 BAD)" )
+GAME_CUSTOM( 199?, m4buc__ay, m4buc, "br_sjbt_.1_1", 0x000000, 0x020000, CRC(00f9581e) SHA1(1461539f501250a08bf66e4a94e4b84113dc0dc5), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0 BR)" )
+GAME_CUSTOM( 199?, m4buc__az, m4buc, "br_sjwb_.1_1", 0x000000, 0x020000, CRC(d15cb680) SHA1(4ab485eb2d1d57c690926e430e0c8b2af045381d), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0 YDH)" )
+GAME_CUSTOM( 199?, m4buc__n, m4buc, "buccaneer5-15sw.bin", 0x000000, 0x020000, CRC(9b92d1f6) SHA1(d374fe966a1b039c971f278ab1113640e7629233), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0 K)" )
// no copyright string and "BUG 0.4"
GAME_CUSTOM( 199?, m4buc__a, m4buc, "bucc15g", 0x000000, 0x020000, CRC(63dd1180) SHA1(a557af6927744b4ce2773c70db5ce1a7708ceb2c), "hack","Buccaneer (Barcrest) (MPU4) (BUG 0.4, hack)" )
// no copyright string and "BUS 0.1"
@@ -4919,37 +4929,37 @@ GAME_CUSTOM( 199?, m4przlux__f, m4przlux, "plxy.p1", 0x0000, 0x010000, CRC
GAME(year, setname, parent ,mod4oki ,mpu4 , mpu4_state,m4_showstring ,ROT0,company,title,GAME_FLAGS )
// "(C)1997 B.W.B." and "TD 7.1" (Td4 in the 7-segs)
-GAME_CUSTOM( 199?, m4topdog, 0, "td_20_b4.7_1", 0x0000, 0x010000, CRC(fe864f25) SHA1(b9f97aaf0425b4987b5bfa0b793e9226fdffe58f), "Bwb","Top Dog (Barcrest) (MPU4) (Td4 / TD 7.1)" )
-GAME_CUSTOM( 199?, m4topdog__b, m4topdog, "td_20_d4.7_1", 0x0000, 0x010000, CRC(35da9e2d) SHA1(a2d1efd7c9cbe4bb5ce7574c6bea2edf55f3e08f), "Bwb","Top Dog (Barcrest) (MPU4) (set 3)" )
-GAME_CUSTOM( 199?, m4topdog__d, m4topdog, "td_20_k4.7_1", 0x0000, 0x010000, CRC(44618034) SHA1(0fce08e279a16d94422155c695b9b5f124b657ea), "Bwb","Top Dog (Barcrest) (MPU4) (set 5)" )
-GAME_CUSTOM( 199?, m4topdog__f, m4topdog, "td_20a_4.7_1", 0x0000, 0x010000, CRC(e7bcc879) SHA1(6c963d059867bdd506af1826fe038daa560a3623), "Bwb","Top Dog (Barcrest) (MPU4) (set 7)" )
-GAME_CUSTOM( 199?, m4topdog__h, m4topdog, "td_20b_4.7_1", 0x0000, 0x010000, CRC(79468269) SHA1(709f34a0ebea816cb268b5dc36c3d02939cd6224), "Bwb","Top Dog (Barcrest) (MPU4) (set 9)" )
-GAME_CUSTOM( 199?, m4topdog__j, m4topdog, "td_20bg4.7_1", 0x0000, 0x010000, CRC(4cb61b04) SHA1(6bb56cd06240c1bbb73406fe132e302822dec0df), "Bwb","Top Dog (Barcrest) (MPU4) (set 11)" )
-GAME_CUSTOM( 199?, m4topdog__l, m4topdog, "td_20bt4.7_1", 0x0000, 0x010000, CRC(2cdd5be2) SHA1(bc1afe70268eb7e3cb8fe1a43d262201faec0613), "Bwb","Top Dog (Barcrest) (MPU4) (set 13)" )
+GAME_CUSTOM( 199?, m4topdog, 0, "td_20_b4.7_1", 0x0000, 0x010000, CRC(fe864f25) SHA1(b9f97aaf0425b4987b5bfa0b793e9226fdffe58f), "Bwb","Top Dog (Barcrest) (MPU4) (TD4 7.1 YD / TD 7.1)" )
+GAME_CUSTOM( 199?, m4topdog__b, m4topdog, "td_20_d4.7_1", 0x0000, 0x010000, CRC(35da9e2d) SHA1(a2d1efd7c9cbe4bb5ce7574c6bea2edf55f3e08f), "Bwb","Top Dog (Barcrest) (MPU4) (TD4 7.1 D / TD 7.1)" )
+GAME_CUSTOM( 199?, m4topdog__d, m4topdog, "td_20_k4.7_1", 0x0000, 0x010000, CRC(44618034) SHA1(0fce08e279a16d94422155c695b9b5f124b657ea), "Bwb","Top Dog (Barcrest) (MPU4) (TD4 7.1 Y / TD 7.1)" )
+GAME_CUSTOM( 199?, m4topdog__f, m4topdog, "td_20a_4.7_1", 0x0000, 0x010000, CRC(e7bcc879) SHA1(6c963d059867bdd506af1826fe038daa560a3623), "Bwb","Top Dog (Barcrest) (MPU4) (TD4 7.1 K / TD 7.1)" )
+GAME_CUSTOM( 199?, m4topdog__h, m4topdog, "td_20b_4.7_1", 0x0000, 0x010000, CRC(79468269) SHA1(709f34a0ebea816cb268b5dc36c3d02939cd6224), "Bwb","Top Dog (Barcrest) (MPU4) (TD4 7.1 B / TD 7.1)" )
+GAME_CUSTOM( 199?, m4topdog__j, m4topdog, "td_20bg4.7_1", 0x0000, 0x010000, CRC(4cb61b04) SHA1(6bb56cd06240c1bbb73406fe132e302822dec0df), "Bwb","Top Dog (Barcrest) (MPU4) (TD4 7.1 BAD / TD 7.1)" )
+GAME_CUSTOM( 199?, m4topdog__l, m4topdog, "td_20bt4.7_1", 0x0000, 0x010000, CRC(2cdd5be2) SHA1(bc1afe70268eb7e3cb8fe1a43d262201faec0613), "Bwb","Top Dog (Barcrest) (MPU4) (TD4 7.1 BR / TD 7.1)" )
// "(C)1997 B.W.B." and "TD 7.1" (Tdt in the 7-segs)
-GAME_CUSTOM( 199?, m4topdog__a, m4topdog, "td_20_bc.7_1", 0x0000, 0x010000, CRC(3af18a9f) SHA1(0db7427d934363d021265fcac811505867f20d47), "Bwb","Top Dog (Barcrest) (MPU4) (TdT / TD 7.1)" )
-GAME_CUSTOM( 199?, m4topdog__c, m4topdog, "td_20_dc.7_1", 0x0000, 0x010000, CRC(b90dfbce) SHA1(b9eb9393fbd33725d372b3b6648c261cf0ae486f), "Bwb","Top Dog (Barcrest) (MPU4) (set 4)" )
-GAME_CUSTOM( 199?, m4topdog__e, m4topdog, "td_20_kc.7_1", 0x0000, 0x010000, CRC(8ec10cf7) SHA1(cdc479f7f41f2205285a9db6539dce83feef6af4), "Bwb","Top Dog (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4topdog__g, m4topdog, "td_20a_c.7_1", 0x0000, 0x010000, CRC(ea229917) SHA1(3e42c1eca1a89b2d536498156beddddcba9899b2), "Bwb","Top Dog (Barcrest) (MPU4) (set 8)" )
-GAME_CUSTOM( 199?, m4topdog__i, m4topdog, "td_20b_c.7_1", 0x0000, 0x010000, CRC(1301d28b) SHA1(b0fc0c73dedd89bbdb5845ec9f91530959fabeb6), "Bwb","Top Dog (Barcrest) (MPU4) (set 10)" )
-GAME_CUSTOM( 199?, m4topdog__k, m4topdog, "td_20bgc.7_1", 0x0000, 0x010000, CRC(8ce831d0) SHA1(e58ca3b38e8dc7196c27cf00123a6e7122bd7f58), "Bwb","Top Dog (Barcrest) (MPU4) (set 12)" )
-GAME_CUSTOM( 199?, m4topdog__m, m4topdog, "td_20btc.7_1", 0x0000, 0x010000, CRC(67e96c75) SHA1(da9dd06f5d4773fa8e3945cf89cfdde4c465acb9), "Bwb","Top Dog (Barcrest) (MPU4) (set 14)" )
+GAME_CUSTOM( 199?, m4topdog__a, m4topdog, "td_20_bc.7_1", 0x0000, 0x010000, CRC(3af18a9f) SHA1(0db7427d934363d021265fcac811505867f20d47), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 7.1 YD / TD 7.1)" )
+GAME_CUSTOM( 199?, m4topdog__c, m4topdog, "td_20_dc.7_1", 0x0000, 0x010000, CRC(b90dfbce) SHA1(b9eb9393fbd33725d372b3b6648c261cf0ae486f), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 7.1 D / TD 7.1)" )
+GAME_CUSTOM( 199?, m4topdog__e, m4topdog, "td_20_kc.7_1", 0x0000, 0x010000, CRC(8ec10cf7) SHA1(cdc479f7f41f2205285a9db6539dce83feef6af4), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 7.1 Y / TD 7.1)" )
+GAME_CUSTOM( 199?, m4topdog__g, m4topdog, "td_20a_c.7_1", 0x0000, 0x010000, CRC(ea229917) SHA1(3e42c1eca1a89b2d536498156beddddcba9899b2), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 7.1 K / TD 7.1)" )
+GAME_CUSTOM( 199?, m4topdog__i, m4topdog, "td_20b_c.7_1", 0x0000, 0x010000, CRC(1301d28b) SHA1(b0fc0c73dedd89bbdb5845ec9f91530959fabeb6), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 7.1 B / TD 7.1)" )
+GAME_CUSTOM( 199?, m4topdog__k, m4topdog, "td_20bgc.7_1", 0x0000, 0x010000, CRC(8ce831d0) SHA1(e58ca3b38e8dc7196c27cf00123a6e7122bd7f58), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 7.1 BAD / TD 7.1)" )
+GAME_CUSTOM( 199?, m4topdog__m, m4topdog, "td_20btc.7_1", 0x0000, 0x010000, CRC(67e96c75) SHA1(da9dd06f5d4773fa8e3945cf89cfdde4c465acb9), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 7.1 BR / TD 7.1)" )
// "(C)1997 B.W.B." and "TD 8.3"
-GAME_CUSTOM( 199?, m4topdog__n, m4topdog, "td_25_bc.8_1", 0x0000, 0x010000, CRC(ac324184) SHA1(d6743c8cbbe719b12f47792a07ec2e898630591b), "Bwb","Top Dog (Barcrest) (MPU4) (TdT / TD 8.3)" )
-GAME_CUSTOM( 199?, m4topdog__o, m4topdog, "td_25_dc.8_1", 0x0000, 0x010000, CRC(6ea8077c) SHA1(672976af1fad0257be7a15b839ec261653704be8), "Bwb","Top Dog (Barcrest) (MPU4) (set 16)" )
-GAME_CUSTOM( 199?, m4topdog__p, m4topdog, "td_25_kc.8_1", 0x0000, 0x010000, CRC(e006de48) SHA1(2c09e04d2dc3ec369c4c01eb1ff1af57156d05c1), "Bwb","Top Dog (Barcrest) (MPU4) (set 17)" )
-GAME_CUSTOM( 199?, m4topdog__q, m4topdog, "td_25a_c.8_1", 0x0000, 0x010000, CRC(84e54ba8) SHA1(dd09094854463f4b7033773be77d4a2d7f06b650), "Bwb","Top Dog (Barcrest) (MPU4) (set 18)" )
-GAME_CUSTOM( 199?, m4topdog__r, m4topdog, "td_25b_c.8_1", 0x0000, 0x010000, CRC(314f4f03) SHA1(a7c399ddf453305d0dbe2a63e57427b261c48c2c), "Bwb","Top Dog (Barcrest) (MPU4) (set 19)" )
-GAME_CUSTOM( 199?, m4topdog__s, m4topdog, "td_25bgc.8_1", 0x0000, 0x010000, CRC(efc0899c) SHA1(0d0e5a006d260a1bfcde7966c06360386c949f29), "Bwb","Top Dog (Barcrest) (MPU4) (set 20)" )
-GAME_CUSTOM( 199?, m4topdog__u, m4topdog, "td_25btc.8_1", 0x0000, 0x010000, CRC(f5dec7d9) SHA1(ffb361745aebb3c7d6bf4925d95904e8ced13a35), "Bwb","Top Dog (Barcrest) (MPU4) (set 22)" )
+GAME_CUSTOM( 199?, m4topdog__n, m4topdog, "td_25_bc.8_1", 0x0000, 0x010000, CRC(ac324184) SHA1(d6743c8cbbe719b12f47792a07ec2e898630591b), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 8.3 YD / TD 8.3)" )
+GAME_CUSTOM( 199?, m4topdog__o, m4topdog, "td_25_dc.8_1", 0x0000, 0x010000, CRC(6ea8077c) SHA1(672976af1fad0257be7a15b839ec261653704be8), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 8.3 D / TD 8.3)" )
+GAME_CUSTOM( 199?, m4topdog__p, m4topdog, "td_25_kc.8_1", 0x0000, 0x010000, CRC(e006de48) SHA1(2c09e04d2dc3ec369c4c01eb1ff1af57156d05c1), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 8.3 Y / TD 8.3)" )
+GAME_CUSTOM( 199?, m4topdog__q, m4topdog, "td_25a_c.8_1", 0x0000, 0x010000, CRC(84e54ba8) SHA1(dd09094854463f4b7033773be77d4a2d7f06b650), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 8.3 K / TD 8.3)" )
+GAME_CUSTOM( 199?, m4topdog__r, m4topdog, "td_25b_c.8_1", 0x0000, 0x010000, CRC(314f4f03) SHA1(a7c399ddf453305d0dbe2a63e57427b261c48c2c), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 8.3 B / TD 8.3)" )
+GAME_CUSTOM( 199?, m4topdog__s, m4topdog, "td_25bgc.8_1", 0x0000, 0x010000, CRC(efc0899c) SHA1(0d0e5a006d260a1bfcde7966c06360386c949f29), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 8.3 BAD / TD 8.3)" )
+GAME_CUSTOM( 199?, m4topdog__u, m4topdog, "td_25btc.8_1", 0x0000, 0x010000, CRC(f5dec7d9) SHA1(ffb361745aebb3c7d6bf4925d95904e8ced13a35), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 8.3 BR / TD 8.3)" )
// "(C)1998 B.W.B." and "TD 2.0"
-GAME_CUSTOM( 199?, m4topdog__t, m4topdog, "td_25bgp.2_1", 0x0000, 0x010000, CRC(f0894f48) SHA1(63056dd434d18bb9a052db25cc6ce29d0c3f9f82), "Bwb","Top Dog (Barcrest) (MPU4) (TdP / TD 2.0)" )
+GAME_CUSTOM( 199?, m4topdog__t, m4topdog, "td_25bgp.2_1", 0x0000, 0x010000, CRC(f0894f48) SHA1(63056dd434d18bb9a052db25cc6ce29d0c3f9f82), "Bwb","Top Dog (Barcrest) (MPU4) (TDP 2.0 BAD / TD 2.0)" )
// "(C)1998 B.W.B." and "TD 1.4"
-GAME_CUSTOM( 199?, m4topdog__v, m4topdog, "td_30a_c.1_1", 0x0000, 0x010000, CRC(f0986895) SHA1(65c24de42a3009959c9bb7f5b42536aa6fd70c2b), "Bwb","Top Dog (Barcrest) (MPU4) (Td / TD 1.4)" )
-GAME_CUSTOM( 199?, m4topdog__w, m4topdog, "td_30b_c.1_1", 0x0000, 0x010000, CRC(7683cf72) SHA1(4319954b833ef6b0d88b8d22c5e700a9df96dc65), "Bwb","Top Dog (Barcrest) (MPU4) (set 24)" )
-GAME_CUSTOM( 199?, m4topdog__x, m4topdog, "td_30bdc.1_1", 0x0000, 0x010000, CRC(f5a4481b) SHA1(75b32b0996315b8ce833fd695377716dbeb0b7e4), "Bwb","Top Dog (Barcrest) (MPU4) (set 25)" )
-GAME_CUSTOM( 199?, m4topdog__y, m4topdog, "td_30bgc.1_1", 0x0000, 0x010000, CRC(1ffe440f) SHA1(adc1909fbbfe7e63bb89b29878bda5a6df776a6a), "Bwb","Top Dog (Barcrest) (MPU4) (set 26)" )
-GAME_CUSTOM( 199?, m4topdog__z, m4topdog, "td_30btc.1_1", 0x0000, 0x010000, CRC(5109516c) SHA1(a4919465286be9e1f0e7970a91a89738f8fcad4e), "Bwb","Top Dog (Barcrest) (MPU4) (set 27)" )
+GAME_CUSTOM( 199?, m4topdog__v, m4topdog, "td_30a_c.1_1", 0x0000, 0x010000, CRC(f0986895) SHA1(65c24de42a3009959c9bb7f5b42536aa6fd70c2b), "Bwb","Top Dog (Barcrest) (MPU4) (TD 1.4 K)" )
+GAME_CUSTOM( 199?, m4topdog__w, m4topdog, "td_30b_c.1_1", 0x0000, 0x010000, CRC(7683cf72) SHA1(4319954b833ef6b0d88b8d22c5e700a9df96dc65), "Bwb","Top Dog (Barcrest) (MPU4) (TD 1.4 B)" )
+GAME_CUSTOM( 199?, m4topdog__x, m4topdog, "td_30bdc.1_1", 0x0000, 0x010000, CRC(f5a4481b) SHA1(75b32b0996315b8ce833fd695377716dbeb0b7e4), "Bwb","Top Dog (Barcrest) (MPU4) (TD 1.4 BD)" )
+GAME_CUSTOM( 199?, m4topdog__y, m4topdog, "td_30bgc.1_1", 0x0000, 0x010000, CRC(1ffe440f) SHA1(adc1909fbbfe7e63bb89b29878bda5a6df776a6a), "Bwb","Top Dog (Barcrest) (MPU4) (TD 1.4 BAD)" )
+GAME_CUSTOM( 199?, m4topdog__z, m4topdog, "td_30btc.1_1", 0x0000, 0x010000, CRC(5109516c) SHA1(a4919465286be9e1f0e7970a91a89738f8fcad4e), "Bwb","Top Dog (Barcrest) (MPU4) (TD 1.4 BR)" )
#define M4KINGQ_EXTRA_ROMS \
ROM_REGION( 0x200000, "msm6376", 0 ) \
@@ -4966,30 +4976,31 @@ GAME_CUSTOM( 199?, m4topdog__z, m4topdog, "td_30btc.1_1", 0x0000, 0x010000,
GAME(year, setname, parent ,mod4oki ,mpu4 , mpu4_state,m4_showstring ,ROT0,company,title,GAME_FLAGS )
// "(C)1996 B.W.B." and "EE 2.1" (EE4 in 7-seg)
-GAME_CUSTOM( 199?, m4kingq, 0, "ee_05a_4.2_1", 0x0000, 0x010000, CRC(8dd842b6) SHA1(1c1bcaae355ceee4d7b1572b0fa1a8b23a8afdbf), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE4 / EE 2.1)" )
+GAME_CUSTOM( 199?, m4kingq, 0, "ee_05a_4.2_1", 0x0000, 0x010000, CRC(8dd842b6) SHA1(1c1bcaae355ceee4d7b1572b0fa1a8b23a8afdbf), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE4 2.1 K/ EE 2.1)" )
// "(C)1996 B.W.B." and "EE 2.2" (EE8 in 7-seg)
-GAME_CUSTOM( 199?, m4kingq__a, m4kingq, "ee_05a__.2_1", 0x0000, 0x010000, CRC(36aa5fb9) SHA1(b4aaf647713e33e79be7927e5eeef240d3beedf7), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE8 / EE 2.2)" )
+GAME_CUSTOM( 199?, m4kingq__a, m4kingq, "ee_05a__.2_1", 0x0000, 0x010000, CRC(36aa5fb9) SHA1(b4aaf647713e33e79be7927e5eeef240d3beedf7), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE8 2.2 K / EE 2.2)" )
// "(C)1995 B.W.B." and "EE_ 2.0" (EE in 7-seg)
-GAME_CUSTOM( 199?, m4kingq__b, m4kingq, "ee_20a__.2_1", 0x0000, 0x010000, CRC(2c61341f) SHA1(76d68ae2a44087414be8be12b3824c62311721dd), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE / EE_ 2.0)" )
-GAME_CUSTOM( 199?, m4kingq__d, m4kingq, "ee_20b__.2_1", 0x0000, 0x010000, CRC(2fc7c7c2) SHA1(3b8736a582009d7b1455769374342ff72026d2fa), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 5)" )
-GAME_CUSTOM( 199?, m4kingq__f, m4kingq, "ee_20bd_.2_1", 0x0000, 0x010000, CRC(239de2dd) SHA1(c8021ba5bfdc10f59fec27c364035225093328d8), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 7)" )
-GAME_CUSTOM( 199?, m4kingq__h, m4kingq, "ee_20bg_.2_1", 0x0000, 0x010000, CRC(ddc4d832) SHA1(031f987e9fced1df4acc57eb4b60911d52e1dbf6), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 9)" )
-GAME_CUSTOM( 199?, m4kingq__i, m4kingq, "ee_20bt_.2_1", 0x0000, 0x010000, CRC(6f278771) SHA1(4459c9490be14bcbc139eebe6542325c80937ff3), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 10)" )
-GAME_CUSTOM( 199?, m4kingq__k, m4kingq, "ee_20sb_.2_1", 0x0000, 0x010000, CRC(307ad157) SHA1(32b6187e907bfbdb87a9ad2d9ca5870b09de5e4a), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 12)" )
-GAME_CUSTOM( 199?, m4kingq__l, m4kingq, "ee_25a_c.3_1", 0x0000, 0x010000, CRC(4dc25083) SHA1(b754b4003f73bd74d1670a36a70985ce5e48794d), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 13)" )
-GAME_CUSTOM( 199?, m4kingq__m, m4kingq, "ee_25b_c.3_1", 0x0000, 0x010000, CRC(a6fe50ff) SHA1(011602d9624f232ba8484e57f5f33ff06091809f), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 14)" )
-GAME_CUSTOM( 199?, m4kingq__n, m4kingq, "ee_25bdc.3_1", 0x0000, 0x010000, CRC(d0088a97) SHA1(aacc1a86bd4b321d0ee21d14147e1d135b3a5bae), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 15)" )
-GAME_CUSTOM( 199?, m4kingq__o, m4kingq, "ee_25bgc.3_1", 0x0000, 0x010000, CRC(e4dcd86b) SHA1(b8f8ec317bf9f18e3d0ae9a9fd59349fee24530d), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 16)" )
-GAME_CUSTOM( 199?, m4kingq__p, m4kingq, "ee_25btc.3_1", 0x0000, 0x010000, CRC(8f44347a) SHA1(09815a6e1d3a91cd2e69578bbcfef3203ddb33d6), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 17)" )
-GAME_CUSTOM( 199?, m4kingq__r, m4kingq, "ee_25sbc.3_1", 0x0000, 0x010000, CRC(0f4bdd7c) SHA1(5c5cb3a9d6a96afc6e29149d2a8adf19aae0bc41), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 18)" )
-GAME_CUSTOM( 199?, m4kingq__s, m4kingq, "eei20___.2_1", 0x0000, 0x010000, CRC(15f4b869) SHA1(5be6f660321cb47900dda986ef44eb5c1c324013), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 19)" )
+GAME_CUSTOM( 199?, m4kingq__b, m4kingq, "ee_20a__.2_1", 0x0000, 0x010000, CRC(2c61341f) SHA1(76d68ae2a44087414be8be12b3824c62311721dd), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 2.0 K / EE_ 2.0)" )
+GAME_CUSTOM( 199?, m4kingq__d, m4kingq, "ee_20b__.2_1", 0x0000, 0x010000, CRC(2fc7c7c2) SHA1(3b8736a582009d7b1455769374342ff72026d2fa), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 2.0 B / EE_ 2.0)" )
+GAME_CUSTOM( 199?, m4kingq__f, m4kingq, "ee_20bd_.2_1", 0x0000, 0x010000, CRC(239de2dd) SHA1(c8021ba5bfdc10f59fec27c364035225093328d8), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 2.0 BD / EE_ 2.0)" )
+GAME_CUSTOM( 199?, m4kingq__h, m4kingq, "ee_20bg_.2_1", 0x0000, 0x010000, CRC(ddc4d832) SHA1(031f987e9fced1df4acc57eb4b60911d52e1dbf6), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 2.0 BA / EE_ 2.0)" )
+GAME_CUSTOM( 199?, m4kingq__i, m4kingq, "ee_20bt_.2_1", 0x0000, 0x010000, CRC(6f278771) SHA1(4459c9490be14bcbc139eebe6542325c80937ff3), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 2.0 R / EE_ 2.0)" )
+GAME_CUSTOM( 199?, m4kingq__k, m4kingq, "ee_20sb_.2_1", 0x0000, 0x010000, CRC(307ad157) SHA1(32b6187e907bfbdb87a9ad2d9ca5870b09de5e4a), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 2.0 YD / EE_ 2.0)" )
+GAME_CUSTOM( 199?, m4kingq__s, m4kingq, "eei20___.2_1", 0x0000, 0x010000, CRC(15f4b869) SHA1(5be6f660321cb47900dda986ef44eb5c1c324013), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 2.0 C / EE_ 2.0)" )
+// "(C)1995 B.W.B." and "EE_ 2.0" (EE' in 7-seg)
+GAME_CUSTOM( 199?, m4kingq__l, m4kingq, "ee_25a_c.3_1", 0x0000, 0x010000, CRC(4dc25083) SHA1(b754b4003f73bd74d1670a36a70985ce5e48794d), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE' 2.0 K / EE_ 2.0)" )
+GAME_CUSTOM( 199?, m4kingq__m, m4kingq, "ee_25b_c.3_1", 0x0000, 0x010000, CRC(a6fe50ff) SHA1(011602d9624f232ba8484e57f5f33ff06091809f), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE' 2.0 B / EE_ 2.0)" )
+GAME_CUSTOM( 199?, m4kingq__n, m4kingq, "ee_25bdc.3_1", 0x0000, 0x010000, CRC(d0088a97) SHA1(aacc1a86bd4b321d0ee21d14147e1d135b3a5bae), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE' 2.0 BD / EE_ 2.0)" )
+GAME_CUSTOM( 199?, m4kingq__o, m4kingq, "ee_25bgc.3_1", 0x0000, 0x010000, CRC(e4dcd86b) SHA1(b8f8ec317bf9f18e3d0ae9a9fd59349fee24530d), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE' 2.0 AD / EE_ 2.0)" )
+GAME_CUSTOM( 199?, m4kingq__p, m4kingq, "ee_25btc.3_1", 0x0000, 0x010000, CRC(8f44347a) SHA1(09815a6e1d3a91cd2e69578bbcfef3203ddb33d6), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE' 2.0 BR / EE_ 2.0)" )
+GAME_CUSTOM( 199?, m4kingq__r, m4kingq, "ee_25sbc.3_1", 0x0000, 0x010000, CRC(0f4bdd7c) SHA1(5c5cb3a9d6a96afc6e29149d2a8adf19aae0bc41), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE' 2.0 YD / EE_ 2.0)" )
// "(C)1996 B.W.B." and "EE 1.0" (EE in 7-seg)
-GAME_CUSTOM( 199?, m4kingq__c, m4kingq, "ee_20a_c.1_1", 0x0000, 0x010000, CRC(948140ac) SHA1(d43f1f2903ecd809dee191087fa075c638728a5b), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE / EE 1.0)" )
-GAME_CUSTOM( 199?, m4kingq__e, m4kingq, "ee_20b_c.1_1", 0x0000, 0x010000, CRC(70d399ab) SHA1(ca2c593151f4f852c7cb66859a12e832e53cd31f), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4kingq__g, m4kingq, "ee_20bdc.1_1", 0x0000, 0x010000, CRC(cbb8c57b) SHA1(ea165199213f95128aec95ae40799faa8c457dd3), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 8)" )
-GAME_CUSTOM( 199?, m4kingq__j, m4kingq, "ee_20s_c.1_1", 0x0000, 0x010000, CRC(a0c1e313) SHA1(8a088a33e51a31ff0abdb554aa4d8ce61eaf4b7d), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 11)" )
+GAME_CUSTOM( 199?, m4kingq__c, m4kingq, "ee_20a_c.1_1", 0x0000, 0x010000, CRC(948140ac) SHA1(d43f1f2903ecd809dee191087fa075c638728a5b), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 1.0 K / EE 1.0)" )
+GAME_CUSTOM( 199?, m4kingq__e, m4kingq, "ee_20b_c.1_1", 0x0000, 0x010000, CRC(70d399ab) SHA1(ca2c593151f4f852c7cb66859a12e832e53cd31f), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 1.0 B / EE 1.0)" )
+GAME_CUSTOM( 199?, m4kingq__g, m4kingq, "ee_20bdc.1_1", 0x0000, 0x010000, CRC(cbb8c57b) SHA1(ea165199213f95128aec95ae40799faa8c457dd3), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 1.0 BD / EE 1.0)" )
+GAME_CUSTOM( 199?, m4kingq__j, m4kingq, "ee_20s_c.1_1", 0x0000, 0x010000, CRC(a0c1e313) SHA1(8a088a33e51a31ff0abdb554aa4d8ce61eaf4b7d), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 1.0 CB / EE 1.0)" )
// "(C)1998 B.W.B." and "EE2 1.0" (EE2 in 7-seg)
-GAME_CUSTOM( 199?, m4kingq__t, m4kingq, "knq2pprg.bin", 0x0000, 0x010000, CRC(23b22f79) SHA1(3d8b9cbffb9b427897548981ddacf724215336a4), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE2 / EE2 1.0)" )
+GAME_CUSTOM( 199?, m4kingq__t, m4kingq, "knq2pprg.bin", 0x0000, 0x010000, CRC(23b22f79) SHA1(3d8b9cbffb9b427897548981ddacf724215336a4), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE2 1.0 / EE2 1.0)" )
#define M4KINGQC_EXTRA_ROMS \
ROM_REGION( 0x200000, "msm6376", 0 ) \
@@ -5450,21 +5461,21 @@ GAME_CUSTOM( 199?, m4lvlcl__f, m4lvlcl, "ll__xgdx.3_1", 0x0000, 0x010000, CR
// "(C)1998 B.W.B." and "RH__4.0"
GAME_CUSTOM( 199?, m4rhs, 0, "rh_sj___.4s1", 0x0000, 0x020000, CRC(be6179cd) SHA1(8aefffdffb25bc4dd7d083c7027be746181c2ff9), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__4.0)" )
-GAME_CUSTOM( 199?, m4rhs__b, m4rhs, "rh_sj_b_.4s1", 0x0000, 0x020000, CRC(58a4480e) SHA1(f4ecfa1debbfa9dba75263bce2c9f66741c3466f), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 3)" )
-GAME_CUSTOM( 199?, m4rhs__d, m4rhs, "rh_sj_d_.4s1", 0x0000, 0x020000, CRC(8f1176db) SHA1(283ef0b9515eac342a02489118bd30016ba85399), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 5)" )
-GAME_CUSTOM( 199?, m4rhs__e, m4rhs, "rh_sj_k_.4s1", 0x0000, 0x020000, CRC(3f2ef505) SHA1(28c3806bc48af21a2b7ea27d42ea9f6b4346f3b8), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4rhs__f, m4rhs, "rh_sja__.4s1", 0x0000, 0x020000, CRC(b8cdd5fb) SHA1(4e336dd3d61f4fdba731951c56e440766ea8efeb), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 7)" )
-GAME_CUSTOM( 199?, m4rhs__h, m4rhs, "rh_sjab_.4s1", 0x0000, 0x020000, CRC(c8468d4c) SHA1(6a9f8fe10949712ecacca3bfcd7d5ab4860682e2), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 9)" )
-GAME_CUSTOM( 199?, m4rhs__i, m4rhs, "rh_sjad_.4s1", 0x0000, 0x020000, CRC(df4768f0) SHA1(74894b232b27e65058d59acf174172da86def95a), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 10)" )
-GAME_CUSTOM( 199?, m4rhs__j, m4rhs, "rh_sjak_.4s1", 0x0000, 0x020000, CRC(6f78eb2e) SHA1(a9fec7a7ad9334c3d8760e1982ac00651858cee8), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 11)" )
+GAME_CUSTOM( 199?, m4rhs__b, m4rhs, "rh_sj_b_.4s1", 0x0000, 0x020000, CRC(58a4480e) SHA1(f4ecfa1debbfa9dba75263bce2c9f66741c3466f), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 YD)" )
+GAME_CUSTOM( 199?, m4rhs__d, m4rhs, "rh_sj_d_.4s1", 0x0000, 0x020000, CRC(8f1176db) SHA1(283ef0b9515eac342a02489118bd30016ba85399), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 D)" )
+GAME_CUSTOM( 199?, m4rhs__e, m4rhs, "rh_sj_k_.4s1", 0x0000, 0x020000, CRC(3f2ef505) SHA1(28c3806bc48af21a2b7ea27d42ea9f6b4346f3b8), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 Y)" )
+GAME_CUSTOM( 199?, m4rhs__f, m4rhs, "rh_sja__.4s1", 0x0000, 0x020000, CRC(b8cdd5fb) SHA1(4e336dd3d61f4fdba731951c56e440766ea8efeb), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 K)" )
+GAME_CUSTOM( 199?, m4rhs__h, m4rhs, "rh_sjab_.4s1", 0x0000, 0x020000, CRC(c8468d4c) SHA1(6a9f8fe10949712ecacca3bfcd7d5ab4860682e2), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 YKD)" )
+GAME_CUSTOM( 199?, m4rhs__i, m4rhs, "rh_sjad_.4s1", 0x0000, 0x020000, CRC(df4768f0) SHA1(74894b232b27e65058d59acf174172da86def95a), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 KD)" )
+GAME_CUSTOM( 199?, m4rhs__j, m4rhs, "rh_sjak_.4s1", 0x0000, 0x020000, CRC(6f78eb2e) SHA1(a9fec7a7ad9334c3d8760e1982ac00651858cee8), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 YK)" )
// "(C)1998 B.W.B." and "RH__6.0"
GAME_CUSTOM( 199?, m4rhs__a, m4rhs, "rh_sj__c.6_1", 0x0000, 0x020000, CRC(476f3cf2) SHA1(18ce990e28ca8565ade5eec9a62f0b243121af73), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__6.0)" )
-GAME_CUSTOM( 199?, m4rhs__c, m4rhs, "rh_sj_bc.6_1", 0x0000, 0x020000, CRC(2e37a58c) SHA1(a48c96384aa81f98bfa980c93e93523ecef3d43c), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 4)" )
-GAME_CUSTOM( 199?, m4rhs__g, m4rhs, "rh_sja_c.6_1", 0x0000, 0x020000, CRC(b7b790e5) SHA1(e2b34dc2f6ede4f4c22b11123dfaed46f2c5c45e), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 8)" )
+GAME_CUSTOM( 199?, m4rhs__c, m4rhs, "rh_sj_bc.6_1", 0x0000, 0x020000, CRC(2e37a58c) SHA1(a48c96384aa81f98bfa980c93e93523ecef3d43c), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__6.0 YD)" )
+GAME_CUSTOM( 199?, m4rhs__g, m4rhs, "rh_sja_c.6_1", 0x0000, 0x020000, CRC(b7b790e5) SHA1(e2b34dc2f6ede4f4c22b11123dfaed46f2c5c45e), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__6.0 K)" )
// no copyright string and "RH__2.0"
GAME_CUSTOM( 199?, m4rhs__k, m4rhs, "rocky15g", 0x0000, 0x020000, CRC(05f4f333) SHA1(a1b917f6c91d751fb2433e46c4c60840b47eed9e), "hack","Rocky Horror Show (Barcrest) (MPU4) (RH__2.0, hack)" )
// no copyright string and "RH__3.0"
-GAME_CUSTOM( 199?, m4rhs__l, m4rhs, "rocky15t", 0x0000, 0x020000, CRC(3fbad6de) SHA1(e8d76b3878794c769187d92d2834018a84e764ac), "hack","Rocky Horror Show (Barcrest) (MPU4) (RH__3.0, hack)" )
+GAME_CUSTOM( 199?, m4rhs__l, m4rhs, "rocky15t", 0x0000, 0x020000, CRC(3fbad6de) SHA1(e8d76b3878794c769187d92d2834018a84e764ac), "hack","Rocky Horror Show (Barcrest) (MPU4) (RH__3.0 YC, hack)" )
#define M4OADRAC_EXTRA_ROMS \
@@ -5490,9 +5501,9 @@ GAME_CUSTOM( 199?, m4oadrac__f, m4oadrac, "dr__xb_x.2_0", 0x0000, 0x020000,
GAME_CUSTOM( 199?, m4oadrac__h, m4oadrac, "dri_xa_x.2_0", 0x0000, 0x020000, CRC(849d2a80) SHA1(c9ff0a5a543b62ca5b885f93a35b5f40e88db8c3), "Bwb","Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.0, set 2)" )
// "(C)1999 BWB" and "DR_ 2.1"
GAME_CUSTOM( 199?, m4oadrac__a, m4oadrac, "dr__x__x.2_1", 0x0000, 0x020000, CRC(d91773af) SHA1(3d8dda0f409f55bce9c4d4e2a8377e43fe2f1f7d), "Bwb","Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.1)" )
-GAME_CUSTOM( 199?, m4oadrac__c, m4oadrac, "dr__x_dx.2_1", 0x0000, 0x020000, CRC(f8c36b67) SHA1(c765d7a5eb4d7cd74295da26a7c6f5341a1ca257), "Bwb","Ooh Aah Dracula (Barcrest) (MPU4) (set 4)" )
-GAME_CUSTOM( 199?, m4oadrac__e, m4oadrac, "dr__xa_x.2_1", 0x0000, 0x020000, CRC(cf1fc847) SHA1(6b09c0de15a380da1783a387569d83328f5b29a0), "Bwb","Ooh Aah Dracula (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4oadrac__g, m4oadrac, "dr__xb_x.2_1", 0x0000, 0x020000, CRC(85d86011) SHA1(81f8624908299aa37e75fc5d12059b3600212d35), "Bwb","Ooh Aah Dracula (Barcrest) (MPU4) (set 8)" )
+GAME_CUSTOM( 199?, m4oadrac__c, m4oadrac, "dr__x_dx.2_1", 0x0000, 0x020000, CRC(f8c36b67) SHA1(c765d7a5eb4d7cd74295da26a7c6f5341a1ca257), "Bwb","Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.1 D)" )
+GAME_CUSTOM( 199?, m4oadrac__e, m4oadrac, "dr__xa_x.2_1", 0x0000, 0x020000, CRC(cf1fc847) SHA1(6b09c0de15a380da1783a387569d83328f5b29a0), "Bwb","Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.1 K)" )
+GAME_CUSTOM( 199?, m4oadrac__g, m4oadrac, "dr__xb_x.2_1", 0x0000, 0x020000, CRC(85d86011) SHA1(81f8624908299aa37e75fc5d12059b3600212d35), "Bwb","Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.1 B)" )
@@ -5515,35 +5526,33 @@ GAME_CUSTOM( 199?, m4ticcla__b, m4ticcla, "ct_20_d4.7_1", 0x0000, 0x010000,
GAME_CUSTOM( 199?, m4ticcla__d, m4ticcla, "ct_20a_4.7_1", 0x0000, 0x010000, CRC(35318095) SHA1(888105a674c9ea8ccad33e24c05ef42936f5f4cf), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT4 7.0 K)" )
GAME_CUSTOM( 199?, m4ticcla__g, m4ticcla, "ct_20bg4.7_1", 0x0000, 0x010000, CRC(7f200f42) SHA1(0ea6aa0de88982737d818c9dac9f2605cea7bc11), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT4 7.0 BAD)" )
GAME_CUSTOM( 199?, m4ticcla__i, m4ticcla, "ct_20bt4.7_1", 0x0000, 0x010000, CRC(7c7280a4) SHA1(3dbdc53a3474f4147427ed4fa8a161a3b364d43b), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT4 7.0 BR)" )
-
// "(C)1996 B.W.B." and "CT 4.0"
-GAME_CUSTOM( 199?, m4ticcla__a, m4ticcla, "ct_20_bc.4_1", 0x0000, 0x010000, CRC(fb40b5ff) SHA1(723a07a2b6b08483aa75ecdd4fd9720a66201fc3), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 2)" )
-GAME_CUSTOM( 199?, m4ticcla__c, m4ticcla, "ct_20_dc.4_1", 0x0000, 0x010000, CRC(0f20a790) SHA1(02876178f0af64154d490cc048a7bc1c9a6f521b), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 4)" )
-GAME_CUSTOM( 199?, m4ticcla__e, m4ticcla, "ct_20a_c.4_1", 0x0000, 0x010000, CRC(e409f49f) SHA1(8774015ec20ed9fe54e812013dfc12d408276c31), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 6)" )
-GAME_CUSTOM( 199?, m4ticcla__f, m4ticcla, "ct_20b_c.4_1", 0x0000, 0x010000, CRC(864a59cf) SHA1(abd9b7a47c791ce4f91abbd3bf97bdcd9d8296ee), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 7)" )
-GAME_CUSTOM( 199?, m4ticcla__h, m4ticcla, "ct_20bgc.4_1", 0x0000, 0x010000, CRC(215b8965) SHA1(883735066a1425b502e89d1234575294ac83746c), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 9)" )
-
+GAME_CUSTOM( 199?, m4ticcla__a, m4ticcla, "ct_20_bc.4_1", 0x0000, 0x010000, CRC(fb40b5ff) SHA1(723a07a2b6b08483aa75ecdd4fd9720a66201fc3), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 4.0 YD)" )
+GAME_CUSTOM( 199?, m4ticcla__c, m4ticcla, "ct_20_dc.4_1", 0x0000, 0x010000, CRC(0f20a790) SHA1(02876178f0af64154d490cc048a7bc1c9a6f521b), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 4.0 D)" )
+GAME_CUSTOM( 199?, m4ticcla__e, m4ticcla, "ct_20a_c.4_1", 0x0000, 0x010000, CRC(e409f49f) SHA1(8774015ec20ed9fe54e812013dfc12d408276c31), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 4.0 K)" )
+GAME_CUSTOM( 199?, m4ticcla__f, m4ticcla, "ct_20b_c.4_1", 0x0000, 0x010000, CRC(864a59cf) SHA1(abd9b7a47c791ce4f91abbd3bf97bdcd9d8296ee), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 4.0 B)" )
+GAME_CUSTOM( 199?, m4ticcla__h, m4ticcla, "ct_20bgc.4_1", 0x0000, 0x010000, CRC(215b8965) SHA1(883735066a1425b502e89d1234575294ac83746c), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 4.0 BAD)" )
// "(C)1996 B.W.B." and "CT4 3.0" (CTT on startup)
-GAME_CUSTOM( 199?, m4ticcla__j, m4ticcla, "ct_25_bc.3_1", 0x0000, 0x010000, CRC(9d6fb3b0) SHA1(a6278579d217b5544d9f0b942a7a344596153950), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 11)" )
-GAME_CUSTOM( 199?, m4ticcla__l, m4ticcla, "ct_25_dc.3_1", 0x0000, 0x010000, CRC(eb359c82) SHA1(c137768461b859d5277b08c8783b0c8625f9b1be), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 13)" )
-GAME_CUSTOM( 199?, m4ticcla__o, m4ticcla, "ct_25a_c.3_1", 0x0000, 0x010000, CRC(28e0a15b) SHA1(b3678ba3d1f392665cc6ec9c24c2c506a41cd4fa), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 16)" )
-GAME_CUSTOM( 199?, m4ticcla__q, m4ticcla, "ct_25b_c.3_1", 0x0000, 0x010000, CRC(e0ba763d) SHA1(453d8a0dbe616c5a8c4313b918fcfe21fed473e0), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 18)" )
-GAME_CUSTOM( 199?, m4ticcla__s, m4ticcla, "ct_25bgc.3_1", 0x0000, 0x010000, CRC(1e0ca1d1) SHA1(0b1023cdd5cd3db657cea53c85e31ed83c2e5524), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 20)" )
-GAME_CUSTOM( 199?, m4ticcla__u, m4ticcla, "ct_25btc.3_1", 0x0000, 0x010000, CRC(f656897a) SHA1(92ad5c6ce2a696298bbfc8c1750825db4e3bc80b), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 22)" )
-
+GAME_CUSTOM( 199?, m4ticcla__j, m4ticcla, "ct_25_bc.3_1", 0x0000, 0x010000, CRC(9d6fb3b0) SHA1(a6278579d217b5544d9f0b942a7a344596153950), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 YD / CT4 3.0)" )
+GAME_CUSTOM( 199?, m4ticcla__l, m4ticcla, "ct_25_dc.3_1", 0x0000, 0x010000, CRC(eb359c82) SHA1(c137768461b859d5277b08c8783b0c8625f9b1be), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 D / CT4 3.0)" )
+GAME_CUSTOM( 199?, m4ticcla__o, m4ticcla, "ct_25a_c.3_1", 0x0000, 0x010000, CRC(28e0a15b) SHA1(b3678ba3d1f392665cc6ec9c24c2c506a41cd4fa), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 K / CT4 3.0)" )
+GAME_CUSTOM( 199?, m4ticcla__q, m4ticcla, "ct_25b_c.3_1", 0x0000, 0x010000, CRC(e0ba763d) SHA1(453d8a0dbe616c5a8c4313b918fcfe21fed473e0), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 B / CT4 3.0)" )
+GAME_CUSTOM( 199?, m4ticcla__s, m4ticcla, "ct_25bgc.3_1", 0x0000, 0x010000, CRC(1e0ca1d1) SHA1(0b1023cdd5cd3db657cea53c85e31ed83c2e5524), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 BAD / CT4 3.0)" )
+GAME_CUSTOM( 199?, m4ticcla__u, m4ticcla, "ct_25btc.3_1", 0x0000, 0x010000, CRC(f656897a) SHA1(92ad5c6ce2a696298bbfc8c1750825db4e3bc80b), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 BR / CT4 3.0)" )
// "(C)1998 B.W.B." and "CT 2.3"
-GAME_CUSTOM( 199?, m4ticcla__k, m4ticcla, "ct_25_dc.2_1", 0x0000, 0x010000, CRC(b49af435) SHA1(e5f92f114931e554eb8eb5fe89f50298783d541c), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 12)" )
-GAME_CUSTOM( 199?, m4ticcla__m, m4ticcla, "ct_25_kc.2_1", 0x0000, 0x010000, CRC(43309e7b) SHA1(d8f6ecbea618da7f54309f2a6e93210c51b68b81), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 14)" )
-GAME_CUSTOM( 199?, m4ticcla__n, m4ticcla, "ct_25a_c.2_1", 0x0000, 0x010000, CRC(717396ed) SHA1(6cdb0f99b40096178f6e85a0966182e704d1b99a), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 15)" )
-GAME_CUSTOM( 199?, m4ticcla__p, m4ticcla, "ct_25b_c.2_1", 0x0000, 0x010000, CRC(b3d7e79c) SHA1(86c0b419c3ca054f8a2ed785cffeb03e6c5b69f2), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 17)" )
-GAME_CUSTOM( 199?, m4ticcla__r, m4ticcla, "ct_25bgc.2_1", 0x0000, 0x010000, CRC(0869d04c) SHA1(0f0fd3982ac376c66d139655a50639f48bf740b4), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 19)" )
-GAME_CUSTOM( 199?, m4ticcla__t, m4ticcla, "ct_25btc.2_1", 0x0000, 0x010000, CRC(032ec96d) SHA1(c5cef956bc0e3eb45cf128c8d0b4e1d6e5b01afe), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 21)" )
-GAME_CUSTOM( 199?, m4ticcla__v, m4ticcla, "ct_30_dc.2_1", 0x0000, 0x010000, CRC(57fabdfb) SHA1(ad86621e4bc8141508c691e148a66e74fc070a88), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 23)" )
-GAME_CUSTOM( 199?, m4ticcla__w, m4ticcla, "ct_30a_c.2_1", 0x0000, 0x010000, CRC(800c94c3) SHA1(c78497899ea9cf27e66f6e8526b95d51215053b2), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 24)" )
-GAME_CUSTOM( 199?, m4ticcla__x, m4ticcla, "ct_30b_c.2_1", 0x0000, 0x010000, CRC(3036ef04) SHA1(de514a85d45d11a880ed147aebe211ffb5bee146), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 25)" )
-GAME_CUSTOM( 199?, m4ticcla__y, m4ticcla, "ct_30bdc.2_1", 0x0000, 0x010000, CRC(9852c9d4) SHA1(37bb20d63fa70ea99e18a16a8f11c461a377a07a), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 26)" )
-GAME_CUSTOM( 199?, m4ticcla__z, m4ticcla, "ct_30bgc.2_1", 0x0000, 0x010000, CRC(a1bc89b4) SHA1(4c82ce8fe78768443823e868f7cc49a06e7cc441), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 27)" )
-GAME_CUSTOM( 199?, m4ticcla__0, m4ticcla, "ct_30btc.2_1", 0x0000, 0x010000, CRC(cde0d12e) SHA1(5427ad700311c30cc86eccc7f1ff36cf0da3b980), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 28)" )
+GAME_CUSTOM( 199?, m4ticcla__k, m4ticcla, "ct_25_dc.2_1", 0x0000, 0x010000, CRC(b49af435) SHA1(e5f92f114931e554eb8eb5fe89f50298783d541c), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 D)" )
+GAME_CUSTOM( 199?, m4ticcla__m, m4ticcla, "ct_25_kc.2_1", 0x0000, 0x010000, CRC(43309e7b) SHA1(d8f6ecbea618da7f54309f2a6e93210c51b68b81), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 Y)" )
+GAME_CUSTOM( 199?, m4ticcla__n, m4ticcla, "ct_25a_c.2_1", 0x0000, 0x010000, CRC(717396ed) SHA1(6cdb0f99b40096178f6e85a0966182e704d1b99a), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 K)" )
+GAME_CUSTOM( 199?, m4ticcla__p, m4ticcla, "ct_25b_c.2_1", 0x0000, 0x010000, CRC(b3d7e79c) SHA1(86c0b419c3ca054f8a2ed785cffeb03e6c5b69f2), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 B)" )
+GAME_CUSTOM( 199?, m4ticcla__r, m4ticcla, "ct_25bgc.2_1", 0x0000, 0x010000, CRC(0869d04c) SHA1(0f0fd3982ac376c66d139655a50639f48bf740b4), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 BAD)" )
+GAME_CUSTOM( 199?, m4ticcla__t, m4ticcla, "ct_25btc.2_1", 0x0000, 0x010000, CRC(032ec96d) SHA1(c5cef956bc0e3eb45cf128c8d0b4e1d6e5b01afe), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 BR)" )
+// "(C)1998 B.W.B." and "CT 2.4"
+GAME_CUSTOM( 199?, m4ticcla__v, m4ticcla, "ct_30_dc.2_1", 0x0000, 0x010000, CRC(57fabdfb) SHA1(ad86621e4bc8141508c691e148a66e74fc070a88), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 D)" )
+GAME_CUSTOM( 199?, m4ticcla__w, m4ticcla, "ct_30a_c.2_1", 0x0000, 0x010000, CRC(800c94c3) SHA1(c78497899ea9cf27e66f6e8526b95d51215053b2), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 K)" )
+GAME_CUSTOM( 199?, m4ticcla__x, m4ticcla, "ct_30b_c.2_1", 0x0000, 0x010000, CRC(3036ef04) SHA1(de514a85d45d11a880ed147aebe211ffb5bee146), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 B)" )
+GAME_CUSTOM( 199?, m4ticcla__y, m4ticcla, "ct_30bdc.2_1", 0x0000, 0x010000, CRC(9852c9d4) SHA1(37bb20d63fa70ea99e18a16a8f11c461a377a07a), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 BD)" )
+GAME_CUSTOM( 199?, m4ticcla__z, m4ticcla, "ct_30bgc.2_1", 0x0000, 0x010000, CRC(a1bc89b4) SHA1(4c82ce8fe78768443823e868f7cc49a06e7cc441), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 BAD)" )
+GAME_CUSTOM( 199?, m4ticcla__0, m4ticcla, "ct_30btc.2_1", 0x0000, 0x010000, CRC(cde0d12e) SHA1(5427ad700311c30cc86eccc7f1ff36cf0da3b980), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 BR)" )
#define M4TICGLC_EXTRA_ROMS \
ROM_REGION( 0x200000, "msm6376", 0 ) \
diff --git a/src/mame/drivers/namcofl.cpp b/src/mame/drivers/namcofl.cpp
index ece0a205a75..0ab2074e09f 100644
--- a/src/mame/drivers/namcofl.cpp
+++ b/src/mame/drivers/namcofl.cpp
@@ -611,10 +611,10 @@ static MACHINE_CONFIG_START( namcofl, namcofl_state )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_C352_ADD("c352", 48384000/2, 288)
- MCFG_SOUND_ROUTE(0, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(1, "lspeaker", 1.00)
- MCFG_SOUND_ROUTE(2, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(3, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(0, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(1, "rspeaker", 1.00)
+ //MCFG_SOUND_ROUTE(2, "lspeaker", 1.00) // Second DAC not present.
+ //MCFG_SOUND_ROUTE(3, "rspeaker", 1.00)
MACHINE_CONFIG_END
ROM_START( speedrcr )
diff --git a/src/mame/drivers/namconb1.cpp b/src/mame/drivers/namconb1.cpp
index 32a698289dd..e54f1e7463d 100644
--- a/src/mame/drivers/namconb1.cpp
+++ b/src/mame/drivers/namconb1.cpp
@@ -1146,10 +1146,10 @@ static MACHINE_CONFIG_START( namconb1, namconb1_state )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_C352_ADD("c352", MASTER_CLOCK/2, 288)
- MCFG_SOUND_ROUTE(0, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(1, "lspeaker", 1.00)
- MCFG_SOUND_ROUTE(2, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(3, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(0, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(1, "rspeaker", 1.00)
+ //MCFG_SOUND_ROUTE(2, "lspeaker", 1.00) // Second DAC not present.
+ //MCFG_SOUND_ROUTE(3, "rspeaker", 1.00)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( namconb2, namconb1_state )
@@ -1183,10 +1183,10 @@ static MACHINE_CONFIG_START( namconb2, namconb1_state )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_C352_ADD("c352", MASTER_CLOCK/2, 288)
- MCFG_SOUND_ROUTE(0, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(1, "lspeaker", 1.00)
- MCFG_SOUND_ROUTE(2, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(3, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(0, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(1, "rspeaker", 1.00)
+ //MCFG_SOUND_ROUTE(2, "lspeaker", 1.00) // Second DAC not present.
+ //MCFG_SOUND_ROUTE(3, "rspeaker", 1.00)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/namcond1.cpp b/src/mame/drivers/namcond1.cpp
index 1a4022c495f..5a08b3b8f2c 100644
--- a/src/mame/drivers/namcond1.cpp
+++ b/src/mame/drivers/namcond1.cpp
@@ -209,10 +209,10 @@ static MACHINE_CONFIG_START( namcond1, namcond1_state )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_C352_ADD("c352", XTAL_49_152MHz/2, 288)
- MCFG_SOUND_ROUTE(0, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(1, "lspeaker", 1.00)
- MCFG_SOUND_ROUTE(2, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(3, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(0, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(1, "rspeaker", 1.00)
+ //MCFG_SOUND_ROUTE(2, "lspeaker", 1.00) // Second DAC not present.
+ //MCFG_SOUND_ROUTE(3, "rspeaker", 1.00)
MCFG_AT28C16_ADD( "at28c16", nullptr )
diff --git a/src/mame/drivers/namcos11.cpp b/src/mame/drivers/namcos11.cpp
index 1c36939e343..7886c5e7bbc 100644
--- a/src/mame/drivers/namcos11.cpp
+++ b/src/mame/drivers/namcos11.cpp
@@ -593,11 +593,11 @@ static MACHINE_CONFIG_START( coh110, namcos11_state )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
- MCFG_C352_ADD("c352", 20013200, 228)
- MCFG_SOUND_ROUTE(0, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(1, "lspeaker", 1.00)
- MCFG_SOUND_ROUTE(2, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(3, "lspeaker", 1.00)
+ MCFG_C352_ADD("c352", 25401600, 288)
+ MCFG_SOUND_ROUTE(0, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(1, "rspeaker", 1.00)
+ //MCFG_SOUND_ROUTE(2, "lspeaker", 1.00) // Second DAC not present.
+ //MCFG_SOUND_ROUTE(3, "rspeaker", 1.00)
MCFG_AT28C16_ADD( "at28c16", nullptr )
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/namcos12.cpp b/src/mame/drivers/namcos12.cpp
index c9aac3d4668..80edc04f403 100644
--- a/src/mame/drivers/namcos12.cpp
+++ b/src/mame/drivers/namcos12.cpp
@@ -1665,7 +1665,7 @@ static MACHINE_CONFIG_START( coh700, namcos12_state )
MCFG_PSX_DMA_CHANNEL_READ( "maincpu", 5, psx_dma_read_delegate( FUNC( namcos12_state::namcos12_rom_read ), (namcos12_state *) owner ) )
- MCFG_CPU_ADD("sub", H83002, 16737350)
+ MCFG_CPU_ADD("sub", H83002, 16934400) // frequency based on research (superctr)
MCFG_CPU_PROGRAM_MAP(s12h8rwmap)
MCFG_CPU_IO_MAP(s12h8iomap)
@@ -1691,11 +1691,11 @@ static MACHINE_CONFIG_START( coh700, namcos12_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
- MCFG_C352_ADD("c352", 29168000, 332)
- MCFG_SOUND_ROUTE(0, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(1, "lspeaker", 1.00)
- MCFG_SOUND_ROUTE(2, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(3, "lspeaker", 1.00)
+ MCFG_C352_ADD("c352", 25401600, 288)
+ MCFG_SOUND_ROUTE(0, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(1, "rspeaker", 1.00)
+ //MCFG_SOUND_ROUTE(2, "lspeaker", 1.00) // Second DAC not present.
+ //MCFG_SOUND_ROUTE(3, "rspeaker", 1.00)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( ptblank2, coh700 )
diff --git a/src/mame/drivers/namcos22.cpp b/src/mame/drivers/namcos22.cpp
index 33e43c44051..bb72042a459 100644
--- a/src/mame/drivers/namcos22.cpp
+++ b/src/mame/drivers/namcos22.cpp
@@ -3781,10 +3781,10 @@ static MACHINE_CONFIG_START( namcos22, namcos22_state )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_C352_ADD("c352", SS22_MASTER_CLOCK/2, 288)
- MCFG_SOUND_ROUTE(0, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(1, "lspeaker", 1.00)
- MCFG_SOUND_ROUTE(2, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(3, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(0, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(1, "rspeaker", 1.00)
+ MCFG_SOUND_ROUTE(2, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(3, "rspeaker", 1.00)
MACHINE_CONFIG_END
@@ -3840,10 +3840,10 @@ static MACHINE_CONFIG_START( namcos22s, namcos22_state )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_C352_ADD("c352", SS22_MASTER_CLOCK/2, 288)
- MCFG_SOUND_ROUTE(0, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(1, "lspeaker", 1.00)
- MCFG_SOUND_ROUTE(2, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(3, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(0, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(1, "rspeaker", 1.00)
+ MCFG_SOUND_ROUTE(2, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(3, "rspeaker", 1.00)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( alpine, namcos22s )
diff --git a/src/mame/drivers/namcos23.cpp b/src/mame/drivers/namcos23.cpp
index 0d730716a07..6493eeb41f2 100644
--- a/src/mame/drivers/namcos23.cpp
+++ b/src/mame/drivers/namcos23.cpp
@@ -1267,10 +1267,17 @@ Notes:
#include "machine/namco_settings.h"
#define JVSCLOCK (XTAL_14_7456MHz)
-#define H8CLOCK (16737350) /* from 2061 */
-#define BUSCLOCK (16737350*2) /* 33MHz CPU bus clock / input */
-#define C352CLOCK (25992000) /* measured at 25.992MHz from 2061 pin 9 */
-#define C352DIV (296)
+
+//#define H8CLOCK (16737350) /* from 2061 */
+//#define BUSCLOCK (16737350*2) /* 33MHz CPU bus clock / input */
+//#define C352CLOCK (25401600) /* previously measured at 25.992MHz from 2061 pin 9 */
+//#define C352DIV (296)
+
+#define H8CLOCK (16934400) /* based on research (superctr) */
+#define BUSCLOCK (16934400*2)
+#define C352CLOCK (25401600)
+#define C352DIV (288)
+
#define VSYNC1 (59.8824)
#define VSYNC2 (59.915)
#define HSYNC (16666150)
@@ -3587,10 +3594,10 @@ static MACHINE_CONFIG_START( gorgon, namcos23_state )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_C352_ADD("c352", C352CLOCK, C352DIV)
- MCFG_SOUND_ROUTE(0, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(1, "lspeaker", 1.00)
- MCFG_SOUND_ROUTE(2, "rspeaker", 1.00)
- MCFG_SOUND_ROUTE(3, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(0, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(1, "rspeaker", 1.00)
+ MCFG_SOUND_ROUTE(2, "lspeaker", 1.00)
+ MCFG_SOUND_ROUTE(3, "rspeaker", 1.00)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/nanos.cpp b/src/mame/drivers/nanos.cpp
index 9951564fc39..de6ae52883c 100644
--- a/src/mame/drivers/nanos.cpp
+++ b/src/mame/drivers/nanos.cpp
@@ -318,14 +318,14 @@ WRITE8_MEMBER(nanos_state::nanos_port_b_w)
UINT8 nanos_state::row_number(UINT8 code)
{
- if BIT(code,0) return 0;
- if BIT(code,1) return 1;
- if BIT(code,2) return 2;
- if BIT(code,3) return 3;
- if BIT(code,4) return 4;
- if BIT(code,5) return 5;
- if BIT(code,6) return 6;
- if BIT(code,7) return 7;
+ if (BIT(code, 0)) return 0;
+ if (BIT(code, 1)) return 1;
+ if (BIT(code, 2)) return 2;
+ if (BIT(code, 3)) return 3;
+ if (BIT(code, 4)) return 4;
+ if (BIT(code, 5)) return 5;
+ if (BIT(code, 6)) return 6;
+ if (BIT(code, 7)) return 7;
return 0;
}
diff --git a/src/mame/drivers/pasopia.cpp b/src/mame/drivers/pasopia.cpp
index a83adb8872b..99b91514e16 100644
--- a/src/mame/drivers/pasopia.cpp
+++ b/src/mame/drivers/pasopia.cpp
@@ -219,13 +219,13 @@ READ8_MEMBER( pasopia_state::rombank_r )
READ8_MEMBER( pasopia_state::keyb_r )
{
UINT8 i,j,res = 0;
- for(j=0;j<3;j++)
+ for (j=0; j<3; j++)
{
- if BIT(m_mux_data, 4+j)
+ if (BIT(m_mux_data, 4+j))
{
- for(i=0;i<4;i++)
+ for (i=0; i<4; i++)
{
- if BIT(m_mux_data, i)
+ if (BIT(m_mux_data, i))
res |= m_keyboard[j*4+i]->read();
}
}
diff --git a/src/mame/drivers/pasopia7.cpp b/src/mame/drivers/pasopia7.cpp
index 9111e712156..d96e490d972 100644
--- a/src/mame/drivers/pasopia7.cpp
+++ b/src/mame/drivers/pasopia7.cpp
@@ -736,13 +736,13 @@ GFXDECODE_END
READ8_MEMBER( pasopia7_state::keyb_r )
{
UINT8 i,j,res = 0;
- for(j=0;j<3;j++)
+ for (j=0; j<3; j++)
{
- if BIT(m_mux_data, 4+j)
+ if (BIT(m_mux_data, 4+j))
{
- for(i=0;i<4;i++)
+ for (i=0; i<4; i++)
{
- if BIT(m_mux_data, i)
+ if (BIT(m_mux_data, i))
res |= m_keyboard[j*4+i]->read();
}
}
diff --git a/src/mame/drivers/pegasus.cpp b/src/mame/drivers/pegasus.cpp
index e3af28d9586..2b57f9fb6cc 100644
--- a/src/mame/drivers/pegasus.cpp
+++ b/src/mame/drivers/pegasus.cpp
@@ -124,7 +124,7 @@ READ8_MEMBER( pegasus_state::pegasus_keyboard_r )
if (!BIT(m_kbd_row, i)) data &= m_io_keyboard[i]->read();
m_kbd_irq = (data == 0xff) ? 1 : 0;
- if BIT(m_control_bits, 3)
+ if (BIT(m_control_bits, 3))
data<<=4;
return data;
}
@@ -169,7 +169,7 @@ READ8_MEMBER( pegasus_state::pegasus_pcg_r )
WRITE8_MEMBER( pegasus_state::pegasus_pcg_w )
{
-// if BIT(m_control_bits, 1)
+// if (BIT(m_control_bits, 1))
{
UINT8 code = m_p_videoram[offset] & 0x7f;
m_p_pcgram[(code << 4) | (~m_kbd_row & 15)] = data;
diff --git a/src/mame/drivers/peyper.cpp b/src/mame/drivers/peyper.cpp
index 4f50229c96c..df2d1f31cce 100644
--- a/src/mame/drivers/peyper.cpp
+++ b/src/mame/drivers/peyper.cpp
@@ -14,9 +14,9 @@
Wolf Man (Peyper)
Nemesis (Peyper)
Odisea Paris-Dakar (Peyper)
+ Hang-On (Sonic)
Others not emulated (need roms):
- Hang-On (Sonic)
Night Fever (Sonic)
Storm (Sonic)
@@ -795,8 +795,12 @@ ROM_END
/*-------------------------------------------------------------------
/ Hang-On (1988)
/-------------------------------------------------------------------*/
-
-
+ROM_START(hangonp)
+ ROM_REGION(0x6000, "maincpu", 0)
+ ROM_LOAD("hangon1.bin", 0x0000, 0x2000, CRC(b0672137) SHA1(e0bd0808a3a8c6df200b0edc7b5e8cf293a659b7))
+ ROM_LOAD("hangon2.bin", 0x2000, 0x2000, CRC(6e1e55c0) SHA1(473c882a0eb68807969894b82be2b86d7c463c93))
+ ROM_LOAD("hangon3.bin", 0x4000, 0x2000, CRC(26949f2f) SHA1(e3e1a436ce59c7f1c2904cd8f50f2ba4a4e37638))
+ROM_END
/*-------------------------------------------------------------------
/ Odisea Paris-Dakar (1987)
/-------------------------------------------------------------------*/
@@ -838,3 +842,4 @@ GAME( 1987, sonstwr2, sonstwar, peyper, sonstwar, peyper_state, peyper, ROT0
GAME( 1987, wolfman, 0, peyper, wolfman, peyper_state, wolfman, ROT0, "Peyper", "Wolf Man", MACHINE_MECHANICAL)
GAME( 1986, nemesisp, 0, peyper, wolfman, peyper_state, wolfman, ROT0, "Peyper", "Nemesis", MACHINE_MECHANICAL)
GAME( 1987, odisea, 0, peyper, odisea, peyper_state, wolfman, ROT0, "Peyper", "Odisea Paris-Dakar", MACHINE_MECHANICAL)
+GAME( 1988, hangonp, 0, peyper, sonstwar, peyper_state, peyper, ROT0, "Sonic", "Hang-On (Sonic)", MACHINE_MECHANICAL) // inputs to be checked
diff --git a/src/mame/drivers/phc25.cpp b/src/mame/drivers/phc25.cpp
index 9f87d0313b1..9c4462062f0 100644
--- a/src/mame/drivers/phc25.cpp
+++ b/src/mame/drivers/phc25.cpp
@@ -262,7 +262,7 @@ INPUT_PORTS_END
READ8_MEMBER( phc25_state::video_ram_r )
{
- if BIT(m_port40, 7) // graphics
+ if (BIT(m_port40, 7)) // graphics
{
return m_video_ram[offset];
}
diff --git a/src/mame/drivers/play_1.cpp b/src/mame/drivers/play_1.cpp
index 1095d67e464..47d2ee83e67 100644
--- a/src/mame/drivers/play_1.cpp
+++ b/src/mame/drivers/play_1.cpp
@@ -5,12 +5,17 @@
PINBALL
Playmatic MPU 1
-Status:
-- Main board is emulated and appears to be working (currently in attract mode)
-- Displays to add
-- Switches, lamps, solenoids to add
-- Sound board to emulate
-- Mechanical sounds to add
+ToDo:
+- Sounds play too fast, especially in Chance.
+- Add mechanical sounds
+- Lamps, solenoids
+- Ball numbers are individual lamps
+
+Notes:
+X is the outhole.
+Chance: When starting the game, hold down X to make "Player 1" light up.
+Others: When starting the game, hold down X, then release it and hit Z to advance
+ the player to the correct number otherwise some weird bugs can happen.
**********************************************************************************/
@@ -18,6 +23,8 @@ Status:
#include "machine/genpin.h"
#include "cpu/cosmac/cosmac.h"
#include "machine/clock.h"
+#include "sound/speaker.h"
+#include "play_1.lh"
class play_1_state : public driver_device
{
@@ -25,12 +32,10 @@ public:
play_1_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_dips(*this, "X")
+ , m_monotone(*this, "monotone")
{ }
- DECLARE_DRIVER_INIT(play_1);
- DECLARE_READ8_MEMBER(port00_r);
- DECLARE_READ8_MEMBER(port01_r);
- DECLARE_READ8_MEMBER(port06_r);
DECLARE_READ8_MEMBER(port07_r);
DECLARE_WRITE8_MEMBER(port01_w);
DECLARE_WRITE8_MEMBER(port02_w);
@@ -38,7 +43,6 @@ public:
DECLARE_WRITE8_MEMBER(port04_w);
DECLARE_WRITE8_MEMBER(port05_w);
DECLARE_WRITE8_MEMBER(port06_w);
- DECLARE_WRITE8_MEMBER(port07_w);
DECLARE_READ_LINE_MEMBER(clear_r);
DECLARE_READ_LINE_MEMBER(ef2_r);
DECLARE_READ_LINE_MEMBER(ef3_r);
@@ -47,14 +51,19 @@ public:
private:
UINT16 m_resetcnt;
+ UINT16 m_clockcnt;
+ UINT8 m_segment;
+ UINT8 m_match;
virtual void machine_reset() override;
required_device m_maincpu;
+ required_ioport_array<4> m_dips;
+ required_device m_monotone;
};
static ADDRESS_MAP_START( play_1_map, AS_PROGRAM, 8, play_1_state )
ADDRESS_MAP_GLOBAL_MASK(0xfff)
AM_RANGE(0x0000, 0x07ff) AM_ROM
- AM_RANGE(0x0800, 0x081f) AM_RAM
+ AM_RANGE(0x0800, 0x081f) AM_RAM AM_SHARE("nvram") // capacitor acting as a 2-month "battery"
AM_RANGE(0x0c00, 0x0c1f) AM_RAM
ADDRESS_MAP_END
@@ -62,81 +71,309 @@ static ADDRESS_MAP_START( chance_map, AS_PROGRAM, 8, play_1_state )
ADDRESS_MAP_GLOBAL_MASK(0xfff)
AM_RANGE(0x0000, 0x0bff) AM_ROM
AM_RANGE(0x0c00, 0x0c1f) AM_RAM
- AM_RANGE(0x0e00, 0x0e1f) AM_RAM
+ AM_RANGE(0x0e00, 0x0e1f) AM_RAM AM_SHARE("nvram") // capacitor acting as a 2-month "battery"
ADDRESS_MAP_END
static ADDRESS_MAP_START( play_1_io, AS_IO, 8, play_1_state )
- AM_RANGE(0x00, 0x00) AM_READ(port00_r)
- AM_RANGE(0x01, 0x01) AM_READWRITE(port01_r,port01_w) //segments
- AM_RANGE(0x02, 0x02) AM_WRITE(port02_w) // N1-8
- AM_RANGE(0x03, 0x03) AM_WRITE(port03_w) // D1-4
- AM_RANGE(0x04, 0x04) AM_WRITE(port04_w) // U1-8
- AM_RANGE(0x05, 0x05) AM_WRITE(port05_w) // V1-8
- AM_RANGE(0x06, 0x06) AM_READWRITE(port06_r,port06_w) // W1-8, input selector
- AM_RANGE(0x07, 0x07) AM_READ(port07_r) // another input selector
+ AM_RANGE(0x01, 0x01) AM_READ_PORT("IN1") AM_WRITE(port01_w) //segments
+ AM_RANGE(0x02, 0x02) AM_READ_PORT("IN2") AM_WRITE(port02_w) // N1-8
+ AM_RANGE(0x03, 0x03) AM_READ_PORT("IN3") AM_WRITE(port03_w) // D1-4
+ AM_RANGE(0x04, 0x04) AM_READ_PORT("IN4") AM_WRITE(port04_w) // U1-8
+ AM_RANGE(0x05, 0x05) AM_READ_PORT("IN5") AM_WRITE(port05_w) // V1-8
+ AM_RANGE(0x06, 0x06) AM_READ_PORT("IN6") AM_WRITE(port06_w) // W1-8
+ AM_RANGE(0x07, 0x07) AM_READ(port07_r)
ADDRESS_MAP_END
-static INPUT_PORTS_START( play_1 )
- PORT_START("DSW0")
- PORT_DIPNAME(0x01, 0x01, DEF_STR( Coinage ) ) // this is something else, don't know what yet
- PORT_DIPSETTING ( 0x00, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING ( 0x01, DEF_STR( 1C_1C ) )
+static INPUT_PORTS_START( chance )
+ PORT_START("X.0")
+// PORT_DIPNAME(0x01, 0x01, DEF_STR( Coinage ) ) // this is something else, don't know what yet
+// PORT_DIPSETTING ( 0x00, DEF_STR( 1C_3C ) )
+// PORT_DIPSETTING ( 0x01, DEF_STR( 1C_1C ) )
PORT_DIPNAME(0x02, 0x00, "Balls")
PORT_DIPSETTING ( 0x00, "3" )
PORT_DIPSETTING ( 0x02, "5" )
PORT_DIPNAME(0x04, 0x00, "Special award")
PORT_DIPSETTING ( 0x00, "Free game" )
PORT_DIPSETTING ( 0x04, "Extra ball" )
- // rotary switches for credits per coin
+
+ PORT_START("X.1")
+ PORT_DIPNAME(0xff, 0x10, "Coinage for slot 2" )
+ PORT_DIPSETTING ( 0x01, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING ( 0x02, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING ( 0x04, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING ( 0x08, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING ( 0x10, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING ( 0x20, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING ( 0x40, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING ( 0x80, DEF_STR( 1C_6C ) )
+
+ PORT_START("X.2")
+ PORT_DIPNAME(0xff, 0x10, "Coinage for slot 3" )
+ PORT_DIPSETTING ( 0x01, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING ( 0x02, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING ( 0x04, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING ( 0x08, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING ( 0x10, DEF_STR( 1C_7C ) )
+ PORT_DIPSETTING ( 0x20, DEF_STR( 1C_8C ) )
+ PORT_DIPSETTING ( 0x40, DEF_STR( 1C_9C ) )
+ PORT_DIPSETTING ( 0x80, "1 coin 10 credits" )
+
+ PORT_START("IN1") // 11-18
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_W)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_X) // outhole trough
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_E)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_T) // Tilt
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Y)
+
+ PORT_START("IN2") // 21-28
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_U)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_I)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_O)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_A)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_S)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_D)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_F)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_G)
+
+ PORT_START("IN3") // 31-38
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_J)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_K)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_L)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_C)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_V)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_B)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_N)
+
+ PORT_START("IN4") // 41-48
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_M)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Z) // lastlap trough
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_STOP)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_SLASH)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COLON) // lastlap outhole
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_QUOTE)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSPACE)
+
+ PORT_START("IN5") // 51-58
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_OPENBRACE)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_CLOSEBRACE)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSLASH)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_LEFT)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_RIGHT)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_UP)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_DOWN)
+
+ PORT_START("IN6") // 61-68
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_0_PAD) // Show total free replays
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_1_PAD) // Show total games paid
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_4_PAD) // Show 1st chute
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_5_PAD) // Show 2nd shute
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_6_PAD) // Show 3rd chute
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 )
+
+ PORT_START("X.3") // 71-78
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_9) // Test
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_2_PAD) // Reset Unit 1,2,3,4,5
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_3_PAD) // Show high score to date
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_7_PAD) // Set 3rd replay score
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_8_PAD) // Set 2nd replay score
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_9_PAD) // Set 1st replay score
+ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
+static INPUT_PORTS_START( play_1 )
+ PORT_INCLUDE( chance )
+ PORT_MODIFY("IN4")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_M)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_W)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_STOP)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_SLASH)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COLON)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_QUOTE)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSPACE)
+
+ PORT_MODIFY("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START ) // start
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_X) // outhole
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_E)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_T) // Tilt
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Z) // trough
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Y)
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( spcgambl )
+ PORT_INCLUDE( play_1 )
+ PORT_MODIFY("IN1") // 11-18
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START ) // start
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_O)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_E)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_T) // Tilt
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_F)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Y)
+
+ PORT_MODIFY("IN2") // 21-28
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_U)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_I)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_X) // outhole
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_A)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_S)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_D)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Z) // trough
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_G)
+INPUT_PORTS_END
+
+
void play_1_state::machine_reset()
{
m_resetcnt = 0;
-}
-
-READ8_MEMBER( play_1_state::port00_r )
-{
- return 0;
-}
-
-READ8_MEMBER( play_1_state::port01_r )
-{
- return 0;
-}
-
-READ8_MEMBER( play_1_state::port06_r )
-{
- return 0xff; // Big Town etc check this at boot
+ m_clockcnt = 0;
+ m_segment = 0;
+ m_match = 0;
}
READ8_MEMBER( play_1_state::port07_r )
{
- return 0;
+ UINT8 data = m_dips[3]->read();
+ data |= (m_segment & m_dips[1]->read()) ? 0x40 : 0;
+ data |= (m_segment & m_dips[2]->read()) ? 0x80 : 0;
+ return data;
}
WRITE8_MEMBER( play_1_state::port01_w )
{
+ static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // 4511
+ // d0-1 via 4013 to match-game board
+ // d4-7 via 4511 to match-game board
+ if (BIT(data, 0))
+ output().set_digit_value(40, patterns[1]);
+ else
+ output().set_digit_value(40, 0);
+
+ if (BIT(data, 1))
+ output().set_digit_value(45, patterns[0]);
+ else
+ output().set_digit_value(45, 0);
+
+ m_match = patterns[data>>4] & 0x7f;
}
WRITE8_MEMBER( play_1_state::port02_w )
{
+ // N1-8, segments and other
+ m_segment = data;
}
WRITE8_MEMBER( play_1_state::port03_w )
{
+ static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // 4511
+ // D1-4, digit select
+ switch (~data & 15)
+ {
+ case 0:
+ // M1 thru M8 (unknown purpose) bit 4 lights up the bumpers
+ break;
+ case 1:
+ // a combination of bits could set higher frequencies, but that isn't documented
+ if (BIT(m_segment, 0))
+ m_monotone->set_unscaled_clock(523);
+ else
+ if (BIT(m_segment, 1))
+ m_monotone->set_unscaled_clock(659);
+ else
+ if (BIT(m_segment, 2))
+ m_monotone->set_unscaled_clock(784);
+ else
+ if (BIT(m_segment, 3))
+ m_monotone->set_unscaled_clock(988);
+ else
+ if ((m_segment & 0x0F)==0)
+ m_monotone->set_unscaled_clock(0);
+ // Bit 4 adjusts the volume, not emulated yet
+
+ // display player number
+ {
+ char wordnum[8];
+ UINT8 player = m_segment >> 5;
+ for (UINT8 i = 1; i < 5; i++)
+ {
+ sprintf(wordnum,"text%d", i);
+ output().set_value(wordnum, (player == i) ? 0:1);
+ }
+ }
+ break;
+ case 2:
+ output().set_digit_value(0, patterns[m_segment>>4]);
+ output().set_digit_value(1, patterns[m_segment&15]);
+ break;
+ case 3:
+ output().set_digit_value(2, patterns[m_segment>>4]);
+ output().set_digit_value(3, patterns[m_segment&15]);
+ break;
+ case 4:
+ output().set_digit_value(4, patterns[m_segment>>4]);
+ output().set_digit_value(5, patterns[m_segment&15]);
+ output().set_digit_value(14, patterns[m_segment>>4]);
+ output().set_digit_value(15, patterns[m_segment&15]);
+ output().set_digit_value(24, patterns[m_segment>>4]);
+ output().set_digit_value(25, patterns[m_segment&15]);
+ output().set_digit_value(34, patterns[m_segment>>4]);
+ output().set_digit_value(35, patterns[m_segment&15]);
+ break;
+ case 5:
+ output().set_digit_value(10, patterns[m_segment>>4]);
+ output().set_digit_value(11, patterns[m_segment&15]);
+ break;
+ case 6:
+ output().set_digit_value(12, patterns[m_segment>>4]);
+ output().set_digit_value(13, patterns[m_segment&15]);
+ break;
+ case 7:
+ output().set_digit_value(20, patterns[m_segment>>4]);
+ output().set_digit_value(21, patterns[m_segment&15]);
+ break;
+ case 8:
+ output().set_digit_value(22, patterns[m_segment>>4]);
+ output().set_digit_value(23, patterns[m_segment&15]);
+ break;
+ case 9:
+ output().set_digit_value(30, patterns[m_segment>>4]);
+ output().set_digit_value(31, patterns[m_segment&15]);
+ break;
+ case 10:
+ case 11:
+ output().set_digit_value(32, patterns[m_segment>>4]);
+ output().set_digit_value(33, patterns[m_segment&15]);
+ break;
+ default:
+ break;
+ }
}
WRITE8_MEMBER( play_1_state::port04_w )
{
+ // U1-8
}
WRITE8_MEMBER( play_1_state::port05_w )
{
+ // V1-8
}
WRITE8_MEMBER( play_1_state::port06_w )
{
+ // W1-8
}
READ_LINE_MEMBER( play_1_state::clear_r )
@@ -144,39 +381,41 @@ READ_LINE_MEMBER( play_1_state::clear_r )
// A hack to make the machine reset itself on boot
if (m_resetcnt < 0xffff)
m_resetcnt++;
- return (m_resetcnt == 0xff00) ? 0 : 1;
+ return (m_resetcnt == 0x8000) ? 0 : 1;
}
READ_LINE_MEMBER( play_1_state::ef2_r )
{
- return BIT(ioport("DSW0")->read(), 0); // 1 or 3 games dip (1=1 game)
+ return !BIT(m_dips[0]->read(), 0); // 1 or 3 games dip (1=1 game) inverted
}
READ_LINE_MEMBER( play_1_state::ef3_r )
{
- return BIT(ioport("DSW0")->read(), 1); // 3 or 5 balls dip (1=5 balls)
+ return !BIT(m_dips[0]->read(), 1); // 3 or 5 balls dip (1=5 balls) inverted
}
READ_LINE_MEMBER( play_1_state::ef4_r )
{
- return BIT(ioport("DSW0")->read(), 2); // extra ball or game dip (1=extra ball)
+ return !BIT(m_dips[0]->read(), 2); // extra ball or game dip (1=extra ball) inverted
}
WRITE_LINE_MEMBER( play_1_state::clock_w )
{
- m_maincpu->int_w(1);
- m_maincpu->int_w(0); // INT is a pulse-line
- m_maincpu->ef1_w(state);
- // also, state and !state go to display panel
-}
-
-DRIVER_INIT_MEMBER(play_1_state,play_1)
-{
+ if (state)
+ {
+ m_clockcnt++;
+ m_maincpu->int_w(BIT(m_clockcnt, 0)); // inverted
+ m_maincpu->ef1_w(BIT(m_clockcnt, 1)); // inverted
+ if (BIT(m_clockcnt, 1))
+ output().set_digit_value(41, m_match);
+ else
+ output().set_digit_value(44, m_match);
+ }
}
static MACHINE_CONFIG_START( play_1, play_1_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", CDP1802, 400000)
+ MCFG_CPU_ADD("maincpu", CDP1802, 400000) // 2 gates, 1 cap, 1 resistor oscillating somewhere between 350 to 450 kHz
MCFG_CPU_PROGRAM_MAP(play_1_map)
MCFG_CPU_IO_MAP(play_1_io)
MCFG_COSMAC_WAIT_CALLBACK(VCC)
@@ -185,11 +424,21 @@ static MACHINE_CONFIG_START( play_1, play_1_state )
MCFG_COSMAC_EF3_CALLBACK(READLINE(play_1_state, ef3_r))
MCFG_COSMAC_EF4_CALLBACK(READLINE(play_1_state, ef4_r))
- MCFG_DEVICE_ADD("xpoint", CLOCK, 60) // crossing-point detector
+ MCFG_NVRAM_ADD_0FILL("nvram")
+
+ /* Video */
+ MCFG_DEFAULT_LAYOUT(layout_play_1)
+
+ MCFG_DEVICE_ADD("xpoint", CLOCK, 120) // crossing-point detector
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(play_1_state, clock_w))
/* Sound */
MCFG_FRAGMENT_ADD( genpin_audio )
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+ MCFG_DEVICE_ADD("monotone", CLOCK, 0) // sound device
+ MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("speaker", speaker_sound_device, level_w))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( chance, play_1 )
@@ -245,8 +494,8 @@ ROM_END
/* Big Town, Last Lap and Party all reportedly share the same roms with different playfield/machine artworks */
-GAME(1978, bigtown, 0, play_1, play_1, play_1_state, play_1, ROT0, "Playmatic", "Big Town", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1978, chance, 0, chance, play_1, play_1_state, play_1, ROT0, "Playmatic", "Chance", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1978, lastlap, 0, play_1, play_1, play_1_state, play_1, ROT0, "Playmatic", "Last Lap", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1978, spcgambl, 0, play_1, play_1, play_1_state, play_1, ROT0, "Playmatic", "Space Gambler", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1979, party, 0, play_1, play_1, play_1_state, play_1, ROT0, "Playmatic", "Party", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1978, bigtown, 0, play_1, play_1, driver_device, 0, ROT0, "Playmatic", "Big Town", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND )
+GAME(1978, chance, 0, chance, chance, driver_device, 0, ROT0, "Playmatic", "Chance", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
+GAME(1978, lastlap, bigtown, play_1, play_1, driver_device, 0, ROT0, "Playmatic", "Last Lap", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
+GAME(1978, spcgambl, 0, play_1, spcgambl, driver_device, 0, ROT0, "Playmatic", "Space Gambler", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
+GAME(1979, party, bigtown, play_1, play_1, driver_device, 0, ROT0, "Playmatic", "Party", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
diff --git a/src/mame/drivers/play_2.cpp b/src/mame/drivers/play_2.cpp
index 4a386b6cc6f..bf18c83cc5c 100644
--- a/src/mame/drivers/play_2.cpp
+++ b/src/mame/drivers/play_2.cpp
@@ -6,11 +6,11 @@ PINBALL
Playmatic MPU 2
Status:
-- Main board is emulated and working (currently runs the initial test mode)
-- Displays to add
-- Switches, lamps, solenoids to add
-- Sound board to emulate
+- Lamps, Solenoids to add
+- AY chips output port adds various components across the analog outputs (including muting)
- Mechanical sounds to add
+- Sound board to add
+- Most games work
***********************************************************************************/
@@ -19,6 +19,8 @@ Status:
#include "cpu/cosmac/cosmac.h"
#include "machine/clock.h"
#include "machine/7474.h"
+#include "sound/ay8910.h"
+#include "play_2.lh"
class play_2_state : public driver_device
{
@@ -26,11 +28,12 @@ public:
play_2_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_audiocpu(*this, "audiocpu")
, m_4013a(*this, "4013a")
, m_4013b(*this, "4013b")
+ , m_keyboard(*this, "X")
{ }
- DECLARE_DRIVER_INIT(play_2);
DECLARE_WRITE8_MEMBER(port01_w);
DECLARE_WRITE8_MEMBER(port02_w);
DECLARE_WRITE8_MEMBER(port03_w);
@@ -44,14 +47,26 @@ public:
DECLARE_WRITE_LINE_MEMBER(q4013a_w);
DECLARE_WRITE_LINE_MEMBER(clock_w);
DECLARE_WRITE_LINE_MEMBER(clock2_w);
+ DECLARE_WRITE8_MEMBER(port01_a_w);
+ DECLARE_READ8_MEMBER(port02_a_r);
+ DECLARE_READ_LINE_MEMBER(clear_a_r);
private:
UINT16 m_clockcnt;
UINT16 m_resetcnt;
+ UINT16 m_resetcnt_a;
+ UINT8 m_soundlatch;
+ UINT8 m_a_irqset;
+ UINT16 m_a_irqcnt;
+ UINT8 m_kbdrow;
+ UINT8 m_segment[5];
+ bool m_disp_sw;
virtual void machine_reset() override;
required_device m_maincpu;
+ required_device m_audiocpu;
required_device m_4013a;
required_device m_4013b;
+ required_ioport_array<8> m_keyboard;
};
@@ -70,41 +85,156 @@ static ADDRESS_MAP_START( play_2_io, AS_IO, 8, play_2_state )
AM_RANGE(0x07, 0x07) AM_WRITE(port07_w)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( play_2_audio_map, AS_PROGRAM, 8, play_2_state )
+ AM_RANGE(0x0000, 0x3fff) AM_ROM
+ AM_RANGE(0x4000, 0x4001) AM_MIRROR(0x1ffe) AM_DEVREADWRITE("aysnd1", ay8910_device, data_r, address_data_w)
+ AM_RANGE(0x6000, 0x6001) AM_MIRROR(0x1ffe) AM_DEVREADWRITE("aysnd2", ay8910_device, data_r, address_data_w)
+ AM_RANGE(0x8000, 0x80ff) AM_RAM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( play_2_audio_io, AS_IO, 8, play_2_state )
+ AM_RANGE(0x01, 0x01) AM_WRITE(port01_a_w) // irq counter
+ AM_RANGE(0x02, 0x02) AM_READ(port02_a_r) // sound code
+ADDRESS_MAP_END
+
static INPUT_PORTS_START( play_2 )
+ PORT_START("X.0") // 11-18
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_1_PAD)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_2_PAD)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_3_PAD)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_4_PAD)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_5_PAD)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_6_PAD)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_7_PAD)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_8_PAD)
+
+ PORT_START("X.1") // 21-28
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_9_PAD)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_S)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_D)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_F)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_G)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_J)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_K)
+
+ PORT_START("X.2") // 31-38
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_L)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Z)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_C)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_V)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_B)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_N)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_M)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA)
+
+ PORT_START("X.3") // 41-48
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_STOP)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_SLASH)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COLON)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_QUOTE)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_A)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_MINUS)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_EQUALS)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSPACE)
+
+ PORT_START("X.4") // 51-58
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_OPENBRACE)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_CLOSEBRACE)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSLASH)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_LEFT)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_RIGHT)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_UP)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_DOWN)
+
+ PORT_START("X.5") // 61-68
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_W)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_E)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Y)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_U)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_I)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_O)
+
+ PORT_START("X.6")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_X) // outhole
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_8) // zone select (door switch)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_9) // reset button on the ios board
+
+ PORT_START("X.7")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE ) // reset button on main cpu EF4
INPUT_PORTS_END
void play_2_state::machine_reset()
{
m_clockcnt = 0;
m_resetcnt = 0;
+ m_resetcnt_a = 0;
m_4013b->d_w(1);
+ m_a_irqset = 54; // default value of the CDP1863
+ m_a_irqcnt = (m_a_irqset << 3) | 7;
+ m_soundlatch = 0;
+ m_kbdrow = 0;
+ m_disp_sw = 0;
+ for (UINT8 i = 0; i < 5; i++)
+ m_segment[i] = 0;
}
WRITE8_MEMBER( play_2_state::port01_w )
{
-}
-
-WRITE8_MEMBER( play_2_state::port02_w )
-{
-}
-
-WRITE8_MEMBER( play_2_state::port03_w )
-{
-}
-
-READ8_MEMBER( play_2_state::port04_r )
-{
- return 0xff;
-}
-
-READ8_MEMBER( play_2_state::port05_r )
-{
- return 0xff;
+ m_kbdrow = data;
+ if (m_kbdrow && m_disp_sw)
+ {
+ m_disp_sw = 0;
+ for (UINT8 j = 0; j < 6; j++)
+ if (BIT(m_kbdrow, j))
+ for (UINT8 i = 0; i < 5; i++)
+ output().set_digit_value(j*10 + i, m_segment[i]);
+ }
}
WRITE8_MEMBER( play_2_state::port06_w )
{
+ //m_soundlatch = data;
+}
+
+WRITE8_MEMBER( play_2_state::port03_w )
+{
+ if (BIT(data, 6))
+ m_audiocpu->ef1_w(1); // inverted
+}
+
+READ8_MEMBER( play_2_state::port04_r )
+{
+ if (m_kbdrow & 0x3f)
+ for (UINT8 i = 0; i < 6; i++)
+ if (BIT(m_kbdrow, i))
+ return m_keyboard[i]->read();
+
+ return 0;
+}
+
+READ8_MEMBER( play_2_state::port05_r )
+{
+ return m_keyboard[6]->read();
+}
+
+WRITE8_MEMBER( play_2_state::port02_w )
+{
+ m_segment[4] = m_segment[3];
+ m_segment[3] = m_segment[2];
+ m_segment[2] = m_segment[1];
+ m_segment[1] = m_segment[0];
+ m_segment[0] = data;
+ m_disp_sw = 1;
}
WRITE8_MEMBER( play_2_state::port07_w )
@@ -113,6 +243,18 @@ WRITE8_MEMBER( play_2_state::port07_w )
m_4013b->clear_w(1);
}
+WRITE8_MEMBER( play_2_state::port01_a_w )
+{
+ m_a_irqset = data;
+ m_a_irqcnt = (m_a_irqset << 3) | 7;
+}
+
+READ8_MEMBER( play_2_state::port02_a_r )
+{
+ m_audiocpu->ef1_w(0); // inverted
+ return m_soundlatch;
+}
+
READ_LINE_MEMBER( play_2_state::clear_r )
{
// A hack to make the machine reset itself on boot
@@ -121,18 +263,22 @@ READ_LINE_MEMBER( play_2_state::clear_r )
return (m_resetcnt == 0xff00) ? 0 : 1;
}
+READ_LINE_MEMBER( play_2_state::clear_a_r )
+{
+ // A hack to make the machine reset itself on boot
+ if (m_resetcnt_a < 0xffff)
+ m_resetcnt_a++;
+ return (m_resetcnt_a == 0xff00) ? 0 : 1;
+}
+
READ_LINE_MEMBER( play_2_state::ef1_r )
{
- return BIT(m_clockcnt, 10);
+ return (!BIT(m_clockcnt, 10)); // inverted
}
READ_LINE_MEMBER( play_2_state::ef4_r )
{
- return 1; // test button
-}
-
-DRIVER_INIT_MEMBER( play_2_state, play_2 )
-{
+ return BIT(m_keyboard[7]->read(), 0); // inverted test button - doesn't seem to do anything
}
WRITE_LINE_MEMBER( play_2_state::clock_w )
@@ -145,13 +291,24 @@ WRITE_LINE_MEMBER( play_2_state::clock_w )
// simulate 4020 chip
if ((m_clockcnt & 0x3ff) == 0)
m_4013b->preset_w(BIT(m_clockcnt, 10)); // Q10 output
+
+ // sound irq
+ m_a_irqcnt--;
+ if (m_a_irqcnt == 1)
+ m_audiocpu->int_w(1); // inverted
+ else
+ if (m_a_irqcnt == 0)
+ {
+ m_a_irqcnt = (m_a_irqset << 3) | 7;
+ m_audiocpu->int_w(0); // inverted
+ }
}
}
WRITE_LINE_MEMBER( play_2_state::clock2_w )
{
m_4013b->clock_w(state);
- m_maincpu->ef3_w(!state);
+ m_maincpu->ef3_w(state); // inverted
}
WRITE_LINE_MEMBER( play_2_state::q4013a_w )
@@ -172,6 +329,9 @@ static MACHINE_CONFIG_START( play_2, play_2_state )
MCFG_NVRAM_ADD_0FILL("nvram")
+ /* Video */
+ MCFG_DEFAULT_LAYOUT(layout_play_2)
+
MCFG_DEVICE_ADD("tpb_clock", CLOCK, 2950000 / 8) // TPB line from CPU
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(play_2_state, clock_w))
@@ -189,6 +349,18 @@ static MACHINE_CONFIG_START( play_2, play_2_state )
/* Sound */
MCFG_FRAGMENT_ADD( genpin_audio )
+
+ MCFG_CPU_ADD("audiocpu", CDP1802, XTAL_3_579545MHz)
+ MCFG_CPU_PROGRAM_MAP(play_2_audio_map)
+ MCFG_CPU_IO_MAP(play_2_audio_io)
+ MCFG_COSMAC_WAIT_CALLBACK(VCC)
+ MCFG_COSMAC_CLEAR_CALLBACK(READLINE(play_2_state, clear_a_r))
+
+ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_SOUND_ADD("aysnd1", AY8910, XTAL_3_579545MHz / 2)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.00)
+ MCFG_SOUND_ADD("aysnd2", AY8910, XTAL_3_579545MHz / 2)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.00)
MACHINE_CONFIG_END
/*-------------------------------------------------------------------
@@ -200,6 +372,8 @@ ROM_START(antar)
ROM_LOAD("antar09.bin", 0x0400, 0x0400, CRC(2c954f1a) SHA1(fa83a5f1c269ea28d4eeff181f493cbb4dc9bc47))
ROM_LOAD("antar10.bin", 0x0800, 0x0400, CRC(a6ce5667) SHA1(85ecd4fce94dc419e4c210262f867310b0889cd3))
ROM_LOAD("antar11.bin", 0x0c00, 0x0400, CRC(6474b17f) SHA1(e4325ceff820393b06eb2e8e4a85412b0d01a385))
+
+ ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
ROM_END
ROM_START(antar2)
@@ -208,6 +382,8 @@ ROM_START(antar2)
ROM_LOAD("antar09.bin", 0x0400, 0x0400, CRC(2c954f1a) SHA1(fa83a5f1c269ea28d4eeff181f493cbb4dc9bc47))
ROM_LOAD("antar10a.bin", 0x0800, 0x0400, CRC(520eb401) SHA1(1d5e3f829a7e7f38c7c519c488e6b7e1a4d34321))
ROM_LOAD("antar11a.bin", 0x0c00, 0x0400, CRC(17ad38bf) SHA1(e2c9472ed8fbe9d5965a5c79515a1b7ea9edaa79))
+
+ ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
ROM_END
@@ -220,6 +396,8 @@ ROM_START(evlfight)
ROM_LOAD("evfg09.bin", 0x0400, 0x0400, CRC(5232dc4c) SHA1(6f95a578e9f09688e6ce8b0a622bcee887936c82))
ROM_LOAD("evfg10.bin", 0x0800, 0x0400, CRC(de2f754d) SHA1(0287a9975095bcbf03ddb2b374ff25c080c8020f))
ROM_LOAD("evfg11.bin", 0x0c00, 0x0400, CRC(5eb8ac02) SHA1(31c80e74a4272becf7014aa96eaf7de555e26cd6))
+
+ ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
ROM_END
/*-------------------------------------------------------------------
@@ -246,6 +424,8 @@ ROM_START(attack)
ROM_LOAD("attack9.bin", 0x0400, 0x0400, CRC(bbd086b4) SHA1(6fc94b94beea482d8c8f5b3c69d3f218e2b2dfc4))
ROM_LOAD("attack10.bin", 0x0800, 0x0400, CRC(764925e4) SHA1(2f207ef87786d27d0d856c5816a570a59d89b718))
ROM_LOAD("attack11.bin", 0x0c00, 0x0400, CRC(972157b4) SHA1(23c90f23a34b34acfe445496a133b6022a749ccc))
+
+ ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
ROM_END
/*-------------------------------------------------------------------
@@ -257,18 +437,20 @@ ROM_START(blkfever)
ROM_LOAD("blackf9.bin", 0x0400, 0x0400, CRC(ecb72fdc) SHA1(d3598031b7170fab39727b3402b7053d4f9e1ca7))
ROM_LOAD("blackf10.bin", 0x0800, 0x0400, CRC(b3fae788) SHA1(e14e09cc7da1098abf2f60f26a8ec507e123ff7c))
ROM_LOAD("blackf11.bin", 0x0c00, 0x0400, CRC(5a97c1b4) SHA1(b9d7eb0dd55ef6d959c0fab48f710e4b1c8d8003))
+
+ ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
ROM_END
/*-------------------------------------------------------------------
-/ Zira (??/80)
+/ Zira (??/81)
/-------------------------------------------------------------------*/
ROM_START(zira)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("zira_u8.bin", 0x0000, 0x0800, CRC(53f8bf17) SHA1(5eb74f27bc65374a85dd44bbc8f6142488c226a2))
ROM_LOAD("zira_u9.bin", 0x0800, 0x0800, CRC(d50a2419) SHA1(81b157f579a433389506817b1b6e02afaa2cf0d5))
- ROM_REGION(0x10000, "audiocpu", 0)
- ROM_LOAD("zira.snd", 0x0000, 0x0400, NO_DUMP)
+ ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
+ ROM_LOAD("zira.snd", 0x0000, 0x0400, CRC(c8a54854) SHA1(6c0367dcb2a11f0478c44b4e2115c1cb1e8052f3))
ROM_END
/*-------------------------------------------------------------------
@@ -284,19 +466,12 @@ ROM_START(cerberup)
ROM_LOAD("cerb.snd", 0x0000, 0x2000, CRC(8af53a23) SHA1(a80b57576a1eb1b4544b718b9abba100531e3942))
ROM_END
-// ??/84 Nautilus
-// ??/84 The Raid
-// ??/85 Stop Ship
-// ??/86 Flash Dragon
-// ??/87 Phantom Ship
-// ??/87 Skill Flight
-
-GAME(1979, antar, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Antar (set 1)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1979, antar2, antar, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Antar (set 2)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1980, evlfight, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Evil Fight", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1980, attack, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Attack", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1980, blkfever, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Black Fever", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1982, cerberup, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Cerberus (Pinball)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1985, madrace, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Mad Race", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1980, zira, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Zira", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1979, antar, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Antar (set 1)", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
+GAME(1979, antar2, antar, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Antar (set 2)", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
+GAME(1980, evlfight, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Evil Fight", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
+GAME(1980, attack, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Attack", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
+GAME(1980, blkfever, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Black Fever", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
+GAME(1982, cerberup, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Cerberus (Pinball)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
+GAME(1985, madrace, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Mad Race", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
+GAME(1980, zira, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Zira", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
diff --git a/src/mame/drivers/play_3.cpp b/src/mame/drivers/play_3.cpp
index 83c4b7c82ac..f4094a7046e 100644
--- a/src/mame/drivers/play_3.cpp
+++ b/src/mame/drivers/play_3.cpp
@@ -13,7 +13,7 @@ Status:
- Mechanical sounds to add
***********************************************************************************/
-
+#if 0
#include "machine/genpin.h"
#include "cpu/cosmac/cosmac.h"
@@ -217,3 +217,4 @@ ROM_END
GAME(1983, megaaton, 0, play_3, play_3, play_3_state, play_3, ROT0, "Playmatic", "Meg-Aaton", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1983, megaatona, megaaton, play_3, play_3, play_3_state, play_3, ROT0, "Playmatic", "Meg-Aaton (alternate set)", MACHINE_IS_SKELETON_MECHANICAL)
+#endif
diff --git a/src/mame/drivers/play_5.cpp b/src/mame/drivers/play_5.cpp
index cef4e7dd4c7..2d0e5b69b4f 100644
--- a/src/mame/drivers/play_5.cpp
+++ b/src/mame/drivers/play_5.cpp
@@ -1,28 +1,52 @@
// license:BSD-3-Clause
// copyright-holders:Miodrag Milanovic, Robbbert
-/**********************************************************************************
+/*********************************************************************************************
PINBALL
-Playmatic MPU 5
+Playmatic MPU 3,4,5
Status:
-- Main board is emulated and working (currently runs the initial test mode)
-- Displays to add
-- Switches, lamps, solenoids to add
-- Sound board to emulate
+- Lamps, Solenoids to add
+- AY chips output port adds various components across the analog outputs (including muting)
- Mechanical sounds to add
+- Most games work
+-- Spain82: not working
+-- Nautilus: sound is broken (runs into the weeds)
+-- Skill Flight: not working
+-- Meg Aaton: not working (No Ball)
-(note to self: MPU3 and MPU5 appear at first glance to be identical apart from
-cpu clock. MPU2 also appears to be identical to MPU3 apart from the RAM address.
-If the sound cards are sufficiently similar, we should be able to merge all 3.)
+Note: The input lines INT, EF1-4 are inverted (not true voltage).
-***********************************************************************************/
+First time:
+- The default settings are fine, so start with a clean slate
+- Wait for it to say No Ball, then hold down X.
+- Keep holding X, insert credits, and press start. When it says ball 1, let go immediately.
+- If you hold down X longer than you should, it says Coil Error, and the game is ended. You
+ should let go the instant the ball number increments.
+- Any games marked working actually do work, but like most pinballs they are a pain to play
+ with the keyboard.
+
+Setting up:
+The manual is not that clear, there's a lot we don't know, this *seems* to work...
+- Start machine, wait for it to say No Ball, and it plays a tune
+- Press 8 (to simulate opening the front door)
+- Press 1, it says BooP (Bookkeeping)
+- Press 8 and the credits number increments to 8, then 01 and on to 17 (2 pushes per number)
+- When it gets to 01, the display says Adjust
+- To adjust a setting, press 1 to choose a digit, then tap 9 until it is correct.
+- The settings in the manual do not fully line up with what we see in the display.
+
+
+***********************************************************************************************/
#include "machine/genpin.h"
#include "cpu/cosmac/cosmac.h"
#include "machine/clock.h"
#include "machine/7474.h"
+#include "sound/ay8910.h"
+#include "play_5.lh"
+
class play_5_state : public driver_device
{
@@ -30,11 +54,12 @@ public:
play_5_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_audiocpu(*this, "audiocpu")
, m_4013a(*this, "4013a")
, m_4013b(*this, "4013b")
+ , m_keyboard(*this, "X")
{ }
- DECLARE_DRIVER_INIT(play_5);
DECLARE_WRITE8_MEMBER(port01_w);
DECLARE_WRITE8_MEMBER(port02_w);
DECLARE_WRITE8_MEMBER(port03_w);
@@ -48,14 +73,26 @@ public:
DECLARE_WRITE_LINE_MEMBER(q4013a_w);
DECLARE_WRITE_LINE_MEMBER(clock_w);
DECLARE_WRITE_LINE_MEMBER(clock2_w);
+ DECLARE_WRITE8_MEMBER(port01_a_w);
+ DECLARE_READ8_MEMBER(port02_a_r);
+ DECLARE_READ_LINE_MEMBER(clear_a_r);
private:
UINT16 m_clockcnt;
UINT16 m_resetcnt;
+ UINT16 m_resetcnt_a;
+ UINT8 m_soundlatch;
+ UINT8 m_a_irqset;
+ UINT16 m_a_irqcnt;
+ UINT8 m_kbdrow;
+ UINT8 m_segment[5];
+ bool m_disp_sw;
virtual void machine_reset() override;
required_device m_maincpu;
+ required_device m_audiocpu;
required_device m_4013a;
required_device m_4013b;
+ required_ioport_array<10> m_keyboard;
};
@@ -65,50 +102,181 @@ static ADDRESS_MAP_START( play_5_map, AS_PROGRAM, 8, play_5_state )
ADDRESS_MAP_END
static ADDRESS_MAP_START( play_5_io, AS_IO, 8, play_5_state )
- AM_RANGE(0x01, 0x01) AM_WRITE(port01_w) // digits
- AM_RANGE(0x02, 0x02) AM_WRITE(port02_w)
- AM_RANGE(0x03, 0x03) AM_WRITE(port03_w)
- AM_RANGE(0x04, 0x04) AM_READ(port04_r)
- AM_RANGE(0x05, 0x05) AM_READ(port05_r)
+ AM_RANGE(0x01, 0x01) AM_WRITE(port01_w) // digits, scan-lines
+ AM_RANGE(0x02, 0x02) AM_WRITE(port02_w) // sound code
+ AM_RANGE(0x03, 0x03) AM_WRITE(port03_w) //
+ AM_RANGE(0x04, 0x04) AM_READ(port04_r) // switches
+ AM_RANGE(0x05, 0x05) AM_READ(port05_r) // more switches
AM_RANGE(0x06, 0x06) AM_WRITE(port06_w) // segments
- AM_RANGE(0x07, 0x07) AM_WRITE(port07_w)
+ AM_RANGE(0x07, 0x07) AM_WRITE(port07_w) // flipflop clear
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( play_5_audio_map, AS_PROGRAM, 8, play_5_state )
+ AM_RANGE(0x0000, 0x3fff) AM_ROM
+ AM_RANGE(0x4000, 0x4001) AM_MIRROR(0x1ffe) AM_DEVREADWRITE("aysnd1", ay8910_device, data_r, address_data_w)
+ AM_RANGE(0x6000, 0x6001) AM_MIRROR(0x1ffe) AM_DEVREADWRITE("aysnd2", ay8910_device, data_r, address_data_w)
+ AM_RANGE(0x8000, 0x80ff) AM_RAM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( play_5_audio_io, AS_IO, 8, play_5_state )
+ AM_RANGE(0x01, 0x01) AM_WRITE(port01_a_w) // irq counter
+ AM_RANGE(0x02, 0x02) AM_READ(port02_a_r) // sound code
ADDRESS_MAP_END
static INPUT_PORTS_START( play_5 )
+ PORT_START("X.0") // 11-18
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_1_PAD)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_2_PAD)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_3_PAD)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_4_PAD)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_5_PAD)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_6_PAD)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_7_PAD)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_8_PAD)
+
+ PORT_START("X.1") // 21-28
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_9_PAD)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_S)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_D)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_F)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_G)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_J)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_K)
+
+ PORT_START("X.2") // 31-38
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_L)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Z)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_C)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_V)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_B)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_N)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_M)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA)
+
+ PORT_START("X.3") // 41-48
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_STOP)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_SLASH)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COLON)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_QUOTE)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_A)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_MINUS)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_EQUALS)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSPACE)
+
+ PORT_START("X.4") // 51-58
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_OPENBRACE)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_CLOSEBRACE)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSLASH)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_LEFT)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_RIGHT)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_UP)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_DOWN)
+
+ PORT_START("X.5") // 61-68
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_W)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_E)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Y)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_U)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_I)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_O)
+
+ PORT_START("X.6")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_8) PORT_TOGGLE // zone select (door switch)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_X) // outhole
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_9) PORT_TOGGLE // test button
+
+ PORT_START("X.7")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_TILT )
+ PORT_BIT( 0xE0, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("X.8")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("X.9")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE )
INPUT_PORTS_END
void play_5_state::machine_reset()
{
m_clockcnt = 0;
m_resetcnt = 0;
+ m_resetcnt_a = 0;
m_4013b->d_w(1);
+ m_a_irqset = 54; // default value of the CDP1863
+ m_a_irqcnt = (m_a_irqset << 3) | 7;
+ m_soundlatch = 0;
+ m_kbdrow = 0;
+ m_disp_sw = 0;
+ for (UINT8 i = 0; i < 5; i++)
+ m_segment[i] = 0;
}
WRITE8_MEMBER( play_5_state::port01_w )
{
+ m_kbdrow = data;
+ if (m_kbdrow && m_disp_sw)
+ {
+ m_disp_sw = 0;
+ for (UINT8 j = 0; j < 6; j++)
+ if (BIT(m_kbdrow, j))
+ for (UINT8 i = 0; i < 5; i++)
+ {
+ output().set_digit_value(j*10 + i, m_segment[i] & 0x7f);
+ // decimal dot on tens controls if last 0 shows or not
+ if ((j == 5) && BIT(m_segment[i], 7))
+ output().set_digit_value(60 + i, 0x3f);
+ }
+ }
}
WRITE8_MEMBER( play_5_state::port02_w )
{
+ m_soundlatch = data;
}
WRITE8_MEMBER( play_5_state::port03_w )
{
+ if (BIT(data, 6))
+ m_audiocpu->ef1_w(1); // inverted
}
READ8_MEMBER( play_5_state::port04_r )
{
- return 0xff;
+ if (m_kbdrow & 0x3f)
+ for (UINT8 i = 0; i < 6; i++)
+ if (BIT(m_kbdrow, i))
+ return m_keyboard[i]->read();
+
+ return 0;
}
READ8_MEMBER( play_5_state::port05_r )
{
- return 0xff;
+ UINT8 data = 0, key8 = m_keyboard[8]->read() & 0x0f;
+ if (BIT(m_kbdrow, 0))
+ data |= m_keyboard[6]->read();
+ if (BIT(m_kbdrow, 1))
+ data |= m_keyboard[7]->read();
+ return (data & 0xf0) | key8;
}
WRITE8_MEMBER( play_5_state::port06_w )
{
+ m_segment[4] = m_segment[3];
+ m_segment[3] = m_segment[2];
+ m_segment[2] = m_segment[1];
+ m_segment[1] = m_segment[0];
+ m_segment[0] = data;
+ m_disp_sw = 1;
}
WRITE8_MEMBER( play_5_state::port07_w )
@@ -117,6 +285,18 @@ WRITE8_MEMBER( play_5_state::port07_w )
m_4013b->clear_w(1);
}
+WRITE8_MEMBER( play_5_state::port01_a_w )
+{
+ m_a_irqset = data;
+ m_a_irqcnt = (m_a_irqset << 3) | 7;
+}
+
+READ8_MEMBER( play_5_state::port02_a_r )
+{
+ m_audiocpu->ef1_w(0); // inverted
+ return m_soundlatch;
+}
+
READ_LINE_MEMBER( play_5_state::clear_r )
{
// A hack to make the machine reset itself on boot
@@ -125,18 +305,22 @@ READ_LINE_MEMBER( play_5_state::clear_r )
return (m_resetcnt == 0xff00) ? 0 : 1;
}
+READ_LINE_MEMBER( play_5_state::clear_a_r )
+{
+ // A hack to make the machine reset itself on boot
+ if (m_resetcnt_a < 0xffff)
+ m_resetcnt_a++;
+ return (m_resetcnt_a == 0xff00) ? 0 : 1;
+}
+
READ_LINE_MEMBER( play_5_state::ef1_r )
{
- return BIT(m_clockcnt, 10);
+ return (!BIT(m_clockcnt, 10)); // inverted
}
READ_LINE_MEMBER( play_5_state::ef4_r )
{
- return 1; // reset button
-}
-
-DRIVER_INIT_MEMBER( play_5_state, play_5 )
-{
+ return BIT(m_keyboard[9]->read(), 0); // inverted test button - doesn't seem to do anything
}
WRITE_LINE_MEMBER( play_5_state::clock_w )
@@ -149,13 +333,24 @@ WRITE_LINE_MEMBER( play_5_state::clock_w )
// simulate 4020 chip
if ((m_clockcnt & 0x3ff) == 0)
m_4013b->preset_w(BIT(m_clockcnt, 10)); // Q10 output
+
+ // sound irq
+ m_a_irqcnt--;
+ if (m_a_irqcnt == 1)
+ m_audiocpu->int_w(1); // inverted
+ else
+ if (m_a_irqcnt == 0)
+ {
+ m_a_irqcnt = (m_a_irqset << 3) | 7;
+ m_audiocpu->int_w(0); // inverted
+ }
}
}
WRITE_LINE_MEMBER( play_5_state::clock2_w )
{
m_4013b->clock_w(state);
- m_maincpu->ef3_w(!state);
+ m_maincpu->ef3_w(state); // inverted
}
WRITE_LINE_MEMBER( play_5_state::q4013a_w )
@@ -176,6 +371,10 @@ static MACHINE_CONFIG_START( play_5, play_5_state )
MCFG_NVRAM_ADD_0FILL("nvram")
+ /* Video */
+ MCFG_DEFAULT_LAYOUT(layout_play_5)
+
+ // Devices
MCFG_DEVICE_ADD("tpb_clock", CLOCK, XTAL_3_579545MHz / 8) // TPB line from CPU
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(play_5_state, clock_w))
@@ -184,17 +383,30 @@ static MACHINE_CONFIG_START( play_5, play_5_state )
// This is actually a 4013 chip (has 2 RS flipflops)
MCFG_DEVICE_ADD("4013a", TTL7474, 0)
- MCFG_7474_COMP_OUTPUT_CB(DEVWRITELINE("4013a", ttl7474_device, d_w))
MCFG_7474_OUTPUT_CB(WRITELINE(play_5_state, q4013a_w))
+ MCFG_7474_COMP_OUTPUT_CB(DEVWRITELINE("4013a", ttl7474_device, d_w))
MCFG_DEVICE_ADD("4013b", TTL7474, 0)
- MCFG_7474_OUTPUT_CB(DEVWRITELINE("maincpu", cosmac_device, ef2_w))
- MCFG_7474_COMP_OUTPUT_CB(DEVWRITELINE("maincpu", cosmac_device, int_w)) MCFG_DEVCB_INVERT // int is reversed in mame
+ MCFG_7474_OUTPUT_CB(DEVWRITELINE("maincpu", cosmac_device, ef2_w)) MCFG_DEVCB_INVERT // inverted
+ MCFG_7474_COMP_OUTPUT_CB(DEVWRITELINE("maincpu", cosmac_device, int_w)) MCFG_DEVCB_INVERT // inverted
/* Sound */
MCFG_FRAGMENT_ADD( genpin_audio )
+
+ MCFG_CPU_ADD("audiocpu", CDP1802, XTAL_3_579545MHz)
+ MCFG_CPU_PROGRAM_MAP(play_5_audio_map)
+ MCFG_CPU_IO_MAP(play_5_audio_io)
+ MCFG_COSMAC_WAIT_CALLBACK(VCC)
+ MCFG_COSMAC_CLEAR_CALLBACK(READLINE(play_5_state, clear_a_r))
+
+ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_SOUND_ADD("aysnd1", AY8910, XTAL_3_579545MHz / 2)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.00)
+ MCFG_SOUND_ADD("aysnd2", AY8910, XTAL_3_579545MHz / 2)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.00)
MACHINE_CONFIG_END
+
/*-------------------------------------------------------------------
/ KZ-26 (1984)
/-------------------------------------------------------------------*/
@@ -294,8 +506,18 @@ ROM_START(fldragon)
ROM_LOAD("fldraudiocpu.rom", 0x2000, 0x2000, CRC(6ff2b276) SHA1(040b614f0b0587521ef5550b5587b94a7f3f178b))
ROM_REGION(0x10000, "audiocpu", 0)
- ROM_LOAD("fdsndu3.rom", 0x0000, 0x2000, NO_DUMP)
- ROM_LOAD("fdsndu4.rom", 0x2000, 0x0800, NO_DUMP)
+ ROM_LOAD("fdsndu3.rom", 0x0000, 0x2000, CRC(aa9c52a8) SHA1(97d5d63b14d10c70a5eb80c08ccf5a1f3df7596d))
+ ROM_LOAD("fdsndu4.rom", 0x2000, 0x0800, CRC(0a7dc1d2) SHA1(32c7be5e9fbe4fa9ca661af7b7b5ea13ef250ce6))
+ROM_END
+
+ROM_START(fldragona)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("fldr_1a.cpu", 0x0000, 0x2000, CRC(21fda8e8) SHA1(feea608c2605cea1cdf9f7ed884297a95993f754))
+ ROM_LOAD("fldr_2a.cpu", 0x2000, 0x2000, CRC(3592a0b7) SHA1(4c4ed7930dcbbf81ce2e5296c0b36bb615bd2270))
+
+ ROM_REGION(0x10000, "audiocpu", 0)
+ ROM_LOAD("fdsndu3.rom", 0x0000, 0x2000, CRC(aa9c52a8) SHA1(97d5d63b14d10c70a5eb80c08ccf5a1f3df7596d))
+ ROM_LOAD("fdsndu4.rom", 0x2000, 0x0800, CRC(0a7dc1d2) SHA1(32c7be5e9fbe4fa9ca661af7b7b5ea13ef250ce6))
ROM_END
/*-------------------------------------------------------------------
@@ -310,14 +532,24 @@ ROM_START(sklflite)
ROM_LOAD("skflcpu1.rom", 0x0000, 0x2000, CRC(8f833b55) SHA1(1729203582c22b51d1cc401aa8f270aa5cdadabe))
ROM_LOAD("skflaudiocpu.rom", 0x2000, 0x2000, CRC(ffc497aa) SHA1(3e88539ae1688322b9268f502d8ca41cffb28df3))
- ROM_REGION(0x10000, "audiocpu", 0)
- ROM_LOAD("sfsndu3.rom", 0x0000, 0x2000, NO_DUMP)
- ROM_LOAD("sfsndu4.rom", 0x2000, 0x0800, NO_DUMP)
+ ROM_REGION(0x8000, "audiocpu", 0)
+ ROM_LOAD("skflsnd.rom", 0x0000, 0x8000, CRC(926a1da9) SHA1(16c762fbfe6a55597f26ff55d380192bb8647ee0))
ROM_END
/*-------------------------------------------------------------------
/ ??/87 Phantom Ship
/-------------------------------------------------------------------*/
+ROM_START(phntmshp)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("video1.bin", 0x0000, 0x2000, CRC(2b61a8d2) SHA1(1b5cabbab252b2ffb6ed12fb7e4181de7695ed9a))
+ ROM_LOAD("video2.bin", 0x2000, 0x2000, CRC(50126db1) SHA1(58d89e44131554cb087c4cad62869f90366704ad))
+
+ ROM_REGION(0x20000, "audiocpu", 0)
+ ROM_LOAD("sonido1.bin", 0x00000, 0x8000, CRC(3294611d) SHA1(5f790b41bcb6d87418c80e61ac8ae69c57864b1d))
+ ROM_LOAD("sonido2.bin", 0x08000, 0x8000, CRC(c2efc826) SHA1(44ee144b902627745853011968e0d654b35b3b08))
+ ROM_LOAD("sonido3.bin", 0x10000, 0x8000, CRC(13d50f39) SHA1(70624de2dd8412c83866183a83f16cc5b8bdccb8))
+ ROM_LOAD("sonido4.bin", 0x18000, 0x8000, CRC(b53f73ed) SHA1(bb928cfee418e8d9698d7bee78a32426f793c6e9))
+ROM_END
/*-------------------------------------------------------------------
/ Trailer (1985)
@@ -331,14 +563,65 @@ ROM_START(trailer)
ROM_LOAD("trsndu4.rom", 0x2000, 0x0800, CRC(bda2a735) SHA1(134b5abb813ed8bf2eeac0861b4c88c7176582d8))
ROM_END
-GAME(1982, spain82, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Spain '82", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1984, nautilus, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Nautilus", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1984, theraid, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "The Raid", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1984, ufo_x, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "UFO-X", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1984, kz26, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "KZ-26", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1985, rock2500, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Rock 2500", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1985, starfirp, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Star Fire", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1985, starfirpa, starfirp, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Star Fire (alternate set)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1985, trailer, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Trailer", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1986, fldragon, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Flash Dragon", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1987, sklflite, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Skill Flight (Playmatic)", MACHINE_IS_SKELETON_MECHANICAL)
+/*-------------------------------------------------------------------
+/ Meg Aaton
+/-------------------------------------------------------------------*/
+ROM_START(megaaton)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("cpumegat.bin", 0x0000, 0x2000, CRC(7e7a4ede) SHA1(3194b367cbbf6e0cb2629cd5d82ddee6fe36985a))
+
+ ROM_REGION(0x10000, "audiocpu", 0)
+ ROM_LOAD("smogot.bin", 0x0000, 0x2000, CRC(fefc3ab2) SHA1(e748d9b443a69fcdd587f22c87d41818b6c0e436))
+ ROM_LOAD("smegat.bin", 0x2000, 0x1000, CRC(910ab7fe) SHA1(0ddfd15c9c25f43b8fcfc4e11bc8ea180f6bd761))
+ROM_END
+
+ROM_START(megaatona)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("mega_u12.bin", 0x0000, 0x1000, CRC(65761b02) SHA1(dd9586eaf70698ef7a80ce1be293322f64829aea))
+ ROM_LOAD("mega_u11.bin", 0x1000, 0x1000, CRC(513f3683) SHA1(0f080a33426df1ffdb14e9b2e6382304e201e335))
+
+ ROM_REGION(0x10000, "audiocpu", 0)
+ ROM_LOAD("smogot.bin", 0x0000, 0x2000, CRC(fefc3ab2) SHA1(e748d9b443a69fcdd587f22c87d41818b6c0e436))
+ ROM_LOAD("smegat.bin", 0x2000, 0x1000, CRC(910ab7fe) SHA1(0ddfd15c9c25f43b8fcfc4e11bc8ea180f6bd761))
+ROM_END
+
+/*-------------------------------------------------------------------
+/ ??/87 Iron Balls (Stargame)
+/-------------------------------------------------------------------*/
+ROM_START(ironball)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("video.bin", 0x0000, 0x2000, CRC(1867ebff) SHA1(485e46c742d914febcbdd58cb5a886f1d773282a))
+
+ ROM_REGION(0x10000, "audiocpu", 0)
+ ROM_LOAD("sound.bin", 0x0000, 0x2000, CRC(83165483) SHA1(5076e5e836105d69c4ba606d8b995ecb16f88504))
+ROM_END
+
+/*-------------------------------------------------------------------
+/ ??/83 Miss Disco (Bingo machine)
+/-------------------------------------------------------------------*/
+ROM_START(msdisco)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("1.bin", 0x0000, 0x1000, CRC(06fb7da9) SHA1(36c6fda166b2a07a5ed9ad5d2b6fdfe8fd707b0f))
+
+ ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
+ROM_END
+
+GAME(1982, spain82, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Spain '82", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
+GAME(1983, megaaton, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Meg-Aaton", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
+GAME(1983, megaatona, megaaton, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Meg-Aaton (alternate set)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
+GAME(1984, nautilus, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Nautilus", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
+GAME(1984, theraid, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "The Raid", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
+GAME(1984, ufo_x, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "UFO-X", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
+GAME(1984, kz26, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "KZ-26", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
+GAME(1985, rock2500, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Rock 2500", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
+GAME(1985, starfirp, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Star Fire", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
+GAME(1985, starfirpa, starfirp, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Star Fire (alternate set)", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
+GAME(1985, trailer, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Trailer", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
+GAME(1986, fldragon, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Flash Dragon", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
+GAME(1986, fldragona, fldragon, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Flash Dragon (alternate set)", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
+GAME(1987, phntmshp, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Phantom Ship", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
+GAME(1987, sklflite, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Skill Flight (Playmatic)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
+// not by Playmatic, but same hardware
+GAME(1987, ironball, 0, play_5, play_5, driver_device, 0, ROT0, "Stargame", "Iron Balls", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
+// bingo hardware, to be split (?)
+GAME(1983, msdisco, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Miss Disco (Bingo)", MACHINE_IS_SKELETON_MECHANICAL)
diff --git a/src/mame/drivers/ravens.cpp b/src/mame/drivers/ravens.cpp
index 4d9f9ecfb9c..b49cdf6a5cb 100644
--- a/src/mame/drivers/ravens.cpp
+++ b/src/mame/drivers/ravens.cpp
@@ -147,13 +147,13 @@ READ8_MEMBER( ravens_state::port17_r )
keyin = ioport("X0")->read();
if (keyin != 0xff)
for (i = 0; i < 8; i++)
- if BIT(~keyin, i)
+ if (BIT(~keyin, i))
return i | 0x80;
keyin = ioport("X1")->read();
if (keyin != 0xff)
for (i = 0; i < 8; i++)
- if BIT(~keyin, i)
+ if (BIT(~keyin, i))
return i | 0x88;
keyin = ioport("X2")->read();
@@ -161,7 +161,7 @@ READ8_MEMBER( ravens_state::port17_r )
m_maincpu->reset();
if (keyin != 0xff)
for (i = 0; i < 8; i++)
- if BIT(~keyin, i)
+ if (BIT(~keyin, i))
return (i<<4) | 0x80;
return 0;
diff --git a/src/mame/drivers/segahang.cpp b/src/mame/drivers/segahang.cpp
index b374f09182a..8e6950c430e 100644
--- a/src/mame/drivers/segahang.cpp
+++ b/src/mame/drivers/segahang.cpp
@@ -1194,7 +1194,61 @@ ROM_START( shangonro )
ROM_REGION16_BE( 0x00e0000, "sprites", 0 ) // sprites
ROM_LOAD16_BYTE( "epr-10675.22", 0x000001, 0x010000, CRC(d6ac012b) SHA1(305023b1a0a9d84cfc081ffc2ad7578b53d562f2) )
- ROM_LOAD16_BYTE( "epr-10682.11", 0x000000, 0x010000, CRC(d9d83250) SHA1(f8ca3197edcdf53643a5b335c3c044ddc1310cd4) )
+ ROM_LOAD16_BYTE( "epr-10682.13", 0x000000, 0x010000, CRC(d9d83250) SHA1(f8ca3197edcdf53643a5b335c3c044ddc1310cd4) )
+ ROM_LOAD16_BYTE( "epr-10676.21", 0x020001, 0x010000, CRC(25ebf2c5) SHA1(abcf673ae4e280417dd9f46d18c0ec7c0e4802ae) )
+ ROM_LOAD16_BYTE( "epr-10683.12", 0x020000, 0x010000, CRC(6365d2e9) SHA1(688e2ba194e859f86cd3486c2575ebae257e975a) )
+ ROM_LOAD16_BYTE( "epr-10677.20", 0x040001, 0x010000, CRC(8a57b8d6) SHA1(df1a31559dd2d1e7c2c9d800bf97526bdf3e84e6) )
+ ROM_LOAD16_BYTE( "epr-10684.11", 0x040000, 0x010000, CRC(3aff8910) SHA1(4b41a49a7f02363424e814b37edce9a7a44a112e) )
+ ROM_LOAD16_BYTE( "epr-10678.19", 0x060001, 0x010000, CRC(af473098) SHA1(a2afaba1cbf672949dc50e407b46d7e9ae183774) )
+ ROM_LOAD16_BYTE( "epr-10685.10", 0x060000, 0x010000, CRC(80bafeef) SHA1(f01bcf65485e60f34e533295a896fca0b92e5b14) )
+ ROM_LOAD16_BYTE( "epr-10679.18", 0x080001, 0x010000, CRC(03bc4878) SHA1(548fc58bcc620204e30fa12fa4c4f0a3f6a1e4c0) )
+ ROM_LOAD16_BYTE( "epr-10686.9", 0x080000, 0x010000, CRC(274b734e) SHA1(906fa528659bc17c9b4744cec52f7096711adce8) )
+ ROM_LOAD16_BYTE( "epr-10680.17", 0x0a0001, 0x010000, CRC(9f0677ed) SHA1(5964642b70bfad418da44f2d91476f887b021f74) )
+ ROM_LOAD16_BYTE( "epr-10687.8", 0x0a0000, 0x010000, CRC(508a4701) SHA1(d17aea2aadc2e2cd65d81bf91feb3ef6923d5c0b) )
+ ROM_LOAD16_BYTE( "epr-10681.16", 0x0c0001, 0x010000, CRC(b176ea72) SHA1(7ec0eb0f13398d014c2e235773ded00351edb3e2) )
+ ROM_LOAD16_BYTE( "epr-10688.7", 0x0c0000, 0x010000, CRC(42fcd51d) SHA1(0eacb3527dc21746e5b901fcac83f2764a0f9e2c) )
+
+ ROM_REGION( 0x8000, "gfx3", 0 ) // road gfx
+ ROM_LOAD( "epr-10866.108", 0x0000, 0x08000, CRC(1bbe4fc8) SHA1(30f7f301e4d10d3b254d12bf3d32e5371661a566) )
+
+ ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU
+ ROM_LOAD( "epr-10834a.52", 0x0000, 0x08000, CRC(83347dc0) SHA1(079bb750edd6372750a207764e8c84bb6abf2f79) )
+
+ ROM_REGION( 0x20000, "pcm", 0 ) // Sega PCM sound data
+ ROM_LOAD( "epr-10835.55", 0x00000, 0x10000, CRC(da08ca2b) SHA1(2c94c127efd66f6cf86b25e2653637818a99aed1) )
+ ROM_LOAD( "epr-10836.56", 0x10000, 0x10000, CRC(8b10e601) SHA1(75e9bcdd3f096be9bed672d61064b9240690deec) )
+
+ ROM_REGION( 0x2000, "sprites:zoom", 0 ) // zoom table
+ ROM_LOAD( "epr-6844.119", 0x0000, 0x2000, CRC(e3ec7bd6) SHA1(feec0fe664e16fac0fde61cf64b401b9b0575323) )
+ROM_END
+
+
+ROM_START( shangonho )
+ ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_BYTE( "epr-10865.ic22", 0x00000, 0x08000, CRC(98e861dd) SHA1(f2059f4559893d38d7d781c8599aeb7a5074eec0) )
+ ROM_LOAD16_BYTE( "epr-10862.ic8", 0x00001, 0x08000, CRC(d6f058c7) SHA1(72f25455ed619d988bcceb1cfe39a7e06722c9dc) )
+ ROM_LOAD16_BYTE( "epr-10864.ic20", 0x10000, 0x08000, CRC(b3048f44) SHA1(8e559df140f1ddf307d8430c7976ecbbe8907260) )
+ ROM_LOAD16_BYTE( "epr-10861.ic6", 0x10001, 0x08000, CRC(0a131e14) SHA1(088a7ff479462a6a5aa1e096805fc50883a1c245) )
+ ROM_LOAD16_BYTE( "epr-10863.ic18", 0x20000, 0x08000, CRC(12ee8716) SHA1(8e798d23d22f85cd046641184d104c17b27995b2) )
+ ROM_LOAD16_BYTE( "epr-10860.ic4", 0x20001, 0x08000, CRC(155e0cfd) SHA1(e51734351c887fe3920c881f57abdfbb7d075f57) )
+
+ ROM_REGION( 0x40000, "subcpu", 0 ) // second 68000 CPU (encrypted FD1094)
+ ROM_LOAD16_BYTE( "epr-10859.ic31", 0x000001, 0x10000, CRC(a22bc1a2) SHA1(74b535fb72228807aafe835bfb69e97f58bda12d) )
+ ROM_LOAD16_BYTE( "epr-10857.ic25", 0x000000, 0x10000, CRC(064827a3) SHA1(c72cb799b4535f9faa7f3d37bc4d0763f52f5361) )
+ ROM_LOAD16_BYTE( "epr-10858.ic30", 0x020001, 0x10000, CRC(8f8f4af0) SHA1(1dac21b7df6ec6874d36a07e30de7129b7f7f33a) )
+ ROM_LOAD16_BYTE( "epr-10856.ic24", 0x020000, 0x10000, CRC(000ad595) SHA1(eb80e798159c09bc5142a7ea8b9b0f895976b0d4) )
+
+ ROM_REGION( 0x2000, "subcpu:key", 0 ) // FD1094 decryption key
+ ROM_LOAD( "317-0039.key", 0x0000, 0x2000, CRC(97b05dd6) SHA1(c16033021a0fbc8d9759c40deab41d58babdaf90) )
+
+ ROM_REGION( 0x18000, "gfx1", 0 ) // tiles
+ ROM_LOAD( "epr-10652.38", 0x00000, 0x08000, CRC(260286f9) SHA1(dc7c8d2c6ef924a937328685eed19bda1c8b1819) )
+ ROM_LOAD( "epr-10651.23", 0x08000, 0x08000, CRC(c609ee7b) SHA1(c6dacf81cbfe7e5df1f9a967cf571be1dcf1c429) )
+ ROM_LOAD( "epr-10650.7", 0x10000, 0x08000, CRC(b236a403) SHA1(af02b8122794c083a66f2ab35d2c73b84b2df0be) )
+
+ ROM_REGION16_BE( 0x00e0000, "sprites", 0 ) // sprites
+ ROM_LOAD16_BYTE( "epr-10675.22", 0x000001, 0x010000, CRC(d6ac012b) SHA1(305023b1a0a9d84cfc081ffc2ad7578b53d562f2) )
+ ROM_LOAD16_BYTE( "epr-10682.13", 0x000000, 0x010000, CRC(d9d83250) SHA1(f8ca3197edcdf53643a5b335c3c044ddc1310cd4) )
ROM_LOAD16_BYTE( "epr-10676.21", 0x020001, 0x010000, CRC(25ebf2c5) SHA1(abcf673ae4e280417dd9f46d18c0ec7c0e4802ae) )
ROM_LOAD16_BYTE( "epr-10683.12", 0x020000, 0x010000, CRC(6365d2e9) SHA1(688e2ba194e859f86cd3486c2575ebae257e975a) )
ROM_LOAD16_BYTE( "epr-10677.20", 0x040001, 0x010000, CRC(8a57b8d6) SHA1(df1a31559dd2d1e7c2c9d800bf97526bdf3e84e6) )
@@ -1949,8 +2003,9 @@ GAME( 1985, hangon, 0, hangon, hangon, segahang_state,generic, RO
GAME( 1985, hangon1, hangon, hangon, hangon, segahang_state,generic, ROT0, "Sega", "Hang-On", 0 )
GAME( 1985, hangon2, hangon, hangon, hangon2, segahang_state,generic, ROT0, "Sega", "Hang-On (ride-on)", 0 )
-GAME( 1987, shangonro, shangon, shangonro,shangonro, segahang_state,generic, ROT0, "Sega", "Super Hang-On (ride-on, Japan, FD1094 317-0038)", 0 )
-GAME( 1992, shangonrb, shangon, shangupb, shangupb, segahang_state,generic, ROT0, "bootleg", "Super Hang-On (bootleg)", 0 )
+GAME( 1987, shangonro, shangon, shangonro,shangonro, segahang_state,generic, ROT0, "Sega", "Super Hang-On (Hang-On conversion, ride-on, Japan, FD1094 317-0038)", 0 )
+GAME( 1987, shangonho, shangon, shangonro,shangupb, segahang_state,generic, ROT0, "Sega", "Super Hang-On (Hang-On conversion, Japan, FD1094 317-0039)", 0 )
+GAME( 1992, shangonrb, shangon, shangupb, shangupb, segahang_state,generic, ROT0, "bootleg", "Super Hang-On (Hang-On conversion, bootleg)", 0 )
GAME( 1985, sharrier, 0, sharrier, sharrier, segahang_state,sharrier,ROT0, "Sega", "Space Harrier (Rev A, 8751 315-5163A)", 0 )
GAME( 1985, sharrier1, sharrier, sharrier, sharrier, segahang_state,sharrier,ROT0, "Sega", "Space Harrier (8751 315-5163)", 0 )
diff --git a/src/mame/drivers/sleic.cpp b/src/mame/drivers/sleic.cpp
index a78e6b1e604..218f4062365 100644
--- a/src/mame/drivers/sleic.cpp
+++ b/src/mame/drivers/sleic.cpp
@@ -4,8 +4,7 @@
PINBALL
Sleic made a number of pinball machines (Pinball, Bike Race, Dona Elvira 2,
- Super Pang, Io Moon) but seems only Pinball is dumped. The only manual I could
- find is in Spanish and has no schematics.
+ Super Pang, Io Moon). The only manual I could find is in Spanish and has no schematics.
Principal components:
80C188-10
@@ -74,7 +73,43 @@ MACHINE_CONFIG_END
/*-------------------------------------------------------------------
/ Bike Race (1992)
/-------------------------------------------------------------------*/
+ROM_START(bikerace)
+ ROM_REGION(0x100000, "maincpu", 0)
+ ROM_LOAD("bkcpu04.bin", 0xe0000, 0x20000, CRC(ce745e89) SHA1(04ba97a9ef1e60a7609c87cf6d8fcae2d0e32621))
+ ROM_REGION(0x10000, "cpu2", 0)
+ ROM_LOAD("bkio07.bin", 0x0000, 0x8000, CRC(b52a9d4f) SHA1(726a4d9b354729d7390d2a4f877dc480701ec795))
+
+ ROM_REGION(0x10000, "cpu3", 0)
+ ROM_LOAD("bkdsp01.bin", 0x0000, 0x2000, CRC(9b220fcb) SHA1(54e82705d8ce8a26d9e1b5f0fe382ded1f2070c3))
+
+ ROM_REGION(0x100000, "user1", 0)
+ ROM_LOAD("bksnd02.bin", 0x00000, 0x80000, CRC(d67b3883) SHA1(712022b9b24c6ab559d020ab8e2106f68b4d7896))
+ ROM_LOAD("bksnd03.bin", 0x80000, 0x80000, CRC(b6d00245) SHA1(f7da6f2ca681fbe62ea9cab7f92d3e501b7e867d))
+
+ ROM_REGION(0x100000, "user2", 0)
+ ROM_LOAD("bkcpu05.bin", 0x00000, 0x20000, CRC(072ce879) SHA1(4f6fb044592feb4c72bbdcbe5f19e063c0e49d0d))
+ ROM_LOAD("bkcpu06.bin", 0x20000, 0x20000, CRC(9db436d4) SHA1(3869524c0490e0a019d2f8ab46546ff42727665e))
+ROM_END
+
+ROM_START(bikerace2)
+ ROM_REGION(0x100000, "maincpu", 0)
+ ROM_LOAD("04.bin", 0xe0000, 0x20000, CRC(aaaa4a8a) SHA1(ff579041575da4060615da2ff634f3aa91537751))
+
+ ROM_REGION(0x10000, "cpu2", 0)
+ ROM_LOAD("07.bin", 0x0000, 0x8000, CRC(0b763a89) SHA1(8952d7b13674e1599e53cce96e57c2783899a90a))
+
+ ROM_REGION(0x10000, "cpu3", 0)
+ ROM_LOAD("bkdsp01.bin", 0x0000, 0x2000, CRC(9b220fcb) SHA1(54e82705d8ce8a26d9e1b5f0fe382ded1f2070c3))
+
+ ROM_REGION(0x100000, "user1", 0)
+ ROM_LOAD("bksnd02.bin", 0x00000, 0x80000, CRC(d67b3883) SHA1(712022b9b24c6ab559d020ab8e2106f68b4d7896))
+ ROM_LOAD("bksnd03.bin", 0x80000, 0x80000, CRC(b6d00245) SHA1(f7da6f2ca681fbe62ea9cab7f92d3e501b7e867d))
+
+ ROM_REGION(0x100000, "user2", 0)
+ ROM_LOAD("bkcpu05.bin", 0x00000, 0x20000, CRC(072ce879) SHA1(4f6fb044592feb4c72bbdcbe5f19e063c0e49d0d))
+ ROM_LOAD("bkcpu06.bin", 0x20000, 0x20000, CRC(9db436d4) SHA1(3869524c0490e0a019d2f8ab46546ff42727665e))
+ROM_END
/*-------------------------------------------------------------------
/ Dona Elvira 2 (1996)
/-------------------------------------------------------------------*/
@@ -82,9 +117,22 @@ MACHINE_CONFIG_END
/*-------------------------------------------------------------------
/ Io Moon (1994)
/-------------------------------------------------------------------*/
+ROM_START(iomoon)
+ ROM_REGION(0x100000, "maincpu", 0)
+ ROM_LOAD("v1_3_01.bin", 0x80000, 0x80000, CRC(df80bf4f) SHA1(29547b444cad116c9dc925d6b3112f584df37250))
+ ROM_REGION(0x10000, "cpu2", 0)
+ ROM_LOAD("v1_3_05.bin", 0x0000, 0x8000, CRC(6bb5e101) SHA1(125412953bbee7ee171c0bd34f7848fde37ace67))
+
+ ROM_REGION(0x100000, "user1", 0)
+ ROM_LOAD("v1_3_03.bin", 0x00000, 0x80000, CRC(334d0e20) SHA1(06b38cc7fcee633c45a9000187fcde8d7e03a51f))
+ ROM_LOAD("v1_3_04.bin", 0x80000, 0x80000, CRC(f3a950bf) SHA1(e0410f8fe9b4efe7d21052c0a19894a563f90a27))
+
+ ROM_REGION(0x100000, "user2", 0)
+ ROM_LOAD("v1_3_02.bin", 0x00000, 0x80000, CRC(2bd589cd) SHA1(87354c76cbef8185d563266230c72a618ce6fcd7))
+ROM_END
/*-------------------------------------------------------------------
-/ Sleic Pin Ball (1994)
+/ Sleic Pin Ball (1993)
/-------------------------------------------------------------------*/
ROM_START(sleicpin)
ROM_REGION(0x100000, "maincpu", 0)
@@ -100,4 +148,7 @@ ROM_START(sleicpin)
ROM_LOAD("sp02-1_1.rom", 0x00000, 0x80000, CRC(0e4851a0) SHA1(0692ee2df0b560e2013db9c03fd27c6eb12e618d))
ROM_END
-GAME(1993, sleicpin, 0, sleic, sleic, sleic_state, sleic, ROT0, "Sleic", "Sleic Pin Ball", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1992, bikerace, 0, sleic, sleic, sleic_state, sleic, ROT0, "Sleic", "Bike Race", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1992, bikerace2, bikerace, sleic, sleic, sleic_state, sleic, ROT0, "Sleic", "Bike Race (2-ball play)", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1993, sleicpin, 0, sleic, sleic, sleic_state, sleic, ROT0, "Sleic", "Sleic Pin Ball", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1994, iomoon, 0, sleic, sleic, sleic_state, sleic, ROT0, "Sleic", "Io Moon", MACHINE_IS_SKELETON_MECHANICAL)
diff --git a/src/mame/drivers/spectra.cpp b/src/mame/drivers/spectra.cpp
index 3bcc3054252..6d406d3e41f 100644
--- a/src/mame/drivers/spectra.cpp
+++ b/src/mame/drivers/spectra.cpp
@@ -29,9 +29,6 @@
15 - 1 (award is a free game)
16 - 1 (match enabled)
-ToDo:
-- Get good dump of u4 rom.
-
*******************************************************************************************/
@@ -266,7 +263,7 @@ MACHINE_CONFIG_END
ROM_START(spectra)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("spect_u5.dat", 0x0400, 0x0400, CRC(49e0759f) SHA1(c3badc90ff834cbc92d8c519780069310c2b1507))
- ROM_LOAD("spect_u4.dat", 0x0800, 0x0400, CRC(b58f1205) SHA1(9578fd89485f3f560789cb0f24c7116e4bc1d0da) BAD_DUMP)
+ ROM_LOAD("spect_u4.dat", 0x0800, 0x0400, CRC(15e53712) SHA1(e03049178569313cb89cfe0f09043c21d05b1988))
ROM_LOAD("spect_u3.dat", 0x0c00, 0x0400, CRC(9ca7510f) SHA1(a87849f16903836158063d593bb4a2e90c7473c8))
ROM_END
diff --git a/src/mame/drivers/spinb.cpp b/src/mame/drivers/spinb.cpp
index 77c995501b3..54afecedbf3 100644
--- a/src/mame/drivers/spinb.cpp
+++ b/src/mame/drivers/spinb.cpp
@@ -379,7 +379,7 @@ WRITE8_MEMBER( spinb_state::ppi60a_w )
{
if (data)
for (UINT8 i = 0; i < 8; i++)
- if BIT(data, i)
+ if (BIT(data, i))
m_row = i;
}
@@ -388,7 +388,7 @@ WRITE8_MEMBER( spinb_state::ppi60b_w )
{
if (data & 7)
for (UINT8 i = 0; i < 3; i++)
- if BIT(data, i)
+ if (BIT(data, i))
m_row = i+8;
}
@@ -403,11 +403,9 @@ WRITE8_MEMBER( spinb_state::sndbank_a_w )
if (!BIT(data, 6))
m_sound_addr_a |= (1<<19);
- else
- if (!BIT(data, 5))
+ else if (!BIT(data, 5))
m_sound_addr_a |= (2<<19);
- else
- if BIT(data, 7)
+ else if (BIT(data, 7))
m_sndbank_a = 0xff;
}
@@ -418,11 +416,9 @@ WRITE8_MEMBER( spinb_state::sndbank_m_w )
if (!BIT(data, 6))
m_sound_addr_m |= (1<<19);
- else
- if (!BIT(data, 5))
+ else if (!BIT(data, 5))
m_sound_addr_m |= (2<<19);
- else
- if BIT(data, 7)
+ else if (BIT(data, 7))
m_sndbank_m = 0xff;
}
diff --git a/src/mame/drivers/st_mp100.cpp b/src/mame/drivers/st_mp100.cpp
index 17ac76a0bf2..130cc4ca922 100644
--- a/src/mame/drivers/st_mp100.cpp
+++ b/src/mame/drivers/st_mp100.cpp
@@ -595,22 +595,17 @@ WRITE8_MEMBER( st_mp100_state::u11_a_w )
if (!m_u10_ca2)
{
- if BIT(data, 2)
+ if (BIT(data, 2))
m_digit = 5;
- else
- if BIT(data, 3)
+ else if (BIT(data, 3))
m_digit = 4;
- else
- if BIT(data, 4)
+ else if (BIT(data, 4))
m_digit = 3;
- else
- if BIT(data, 5)
+ else if (BIT(data, 5))
m_digit = 2;
- else
- if BIT(data, 6)
+ else if (BIT(data, 6))
m_digit = 1;
- else
- if BIT(data, 7)
+ else if (BIT(data, 7))
m_digit = 0;
if (BIT(data, 0) && (m_counter > 8))
diff --git a/src/mame/drivers/st_mp200.cpp b/src/mame/drivers/st_mp200.cpp
index a0ed6306fd1..0410ad8b82c 100644
--- a/src/mame/drivers/st_mp200.cpp
+++ b/src/mame/drivers/st_mp200.cpp
@@ -335,14 +335,13 @@ WRITE_LINE_MEMBER( st_mp200_state::u11_ca2_w )
if (m_s14001a && state)
{
- if BIT(m_u10a, 7)
+ if (BIT(m_u10a, 7))
{
m_s14001a->data_w(generic_space(), 0, m_u10a & 0x3f);
m_s14001a->start_w(1);
m_s14001a->start_w(0);
}
- else
- if BIT(m_u10a, 6)
+ else if (BIT(m_u10a, 6))
{
m_s14001a->force_update();
m_s14001a->set_output_gain(0, ((m_u10a >> 3 & 0xf) + 1) / 16.0);
@@ -440,33 +439,19 @@ WRITE8_MEMBER( st_mp200_state::u11_a_w )
if (!m_u10_ca2)
{
if (m_7d && BIT(data, 1))
- {
m_digit = 6;
- }
- else if BIT(data, 2)
- {
+ else if (BIT(data, 2))
m_digit = 5;
- }
- else if BIT(data, 3)
- {
+ else if (BIT(data, 3))
m_digit = 4;
- }
- else if BIT(data, 4)
- {
+ else if (BIT(data, 4))
m_digit = 3;
- }
- else if BIT(data, 5)
- {
+ else if (BIT(data, 5))
m_digit = 2;
- }
- else if BIT(data, 6)
- {
+ else if (BIT(data, 6))
m_digit = 1;
- }
- else if BIT(data, 7)
- {
+ else if (BIT(data, 7))
m_digit = 0;
- }
if (BIT(data, 0) && (m_counter > 8))
{
diff --git a/src/mame/drivers/techno.cpp b/src/mame/drivers/techno.cpp
index 7448583160b..aee9672af63 100644
--- a/src/mame/drivers/techno.cpp
+++ b/src/mame/drivers/techno.cpp
@@ -261,8 +261,19 @@ ROM_START(xforce)
ROM_LOAD16_BYTE("ic15", 0x0001, 0x8000, CRC(fb8d2853) SHA1(0b0004abfe32edfd3ac15d66f90695d264c97eba))
ROM_LOAD16_BYTE("ic17", 0x0000, 0x8000, CRC(122ef649) SHA1(0b425f81869bc359841377a91c39f44395502bff))
- //ROM_REGION(0x20000), "cpu2", 0)
+ //ROM_REGION(0x20000, "cpu2", 0)
// 5 x 27256 roms are undumped
ROM_END
+ROM_START(spcteam)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD16_BYTE("cpu_top.bin", 0x000001, 0x8000, CRC(b11dcf1f) SHA1(084eb98ee4c9f32d5518897a891ad1a601850d80))
+ ROM_LOAD16_BYTE("cpu_bot.bin", 0x000000, 0x8000, CRC(892a5592) SHA1(c30dce37a5aae2834459179787f6c99353aadabb))
+
+ ROM_REGION(0x10000, "cpu2", 0)
+ ROM_LOAD("sound.bin", 0x8000, 0x8000, CRC(6a87370f) SHA1(51e055dcf23a30e337ff439bba3c40e5c51c490a))
+ ROM_RELOAD(0, 0x8000)
+ROM_END
+
GAME(1987, xforce, 0, techno, techno, driver_device, 0, ROT0, "Tecnoplay", "X Force", MACHINE_IS_SKELETON_MECHANICAL)
+GAME(1988, spcteam, 0, techno, techno, driver_device, 0, ROT0, "Tecnoplay", "Space Team", MACHINE_IS_SKELETON_MECHANICAL) // needs correct layout
diff --git a/src/mame/drivers/triforce.cpp b/src/mame/drivers/triforce.cpp
index 3cf4d22941f..c7a9da673d8 100644
--- a/src/mame/drivers/triforce.cpp
+++ b/src/mame/drivers/triforce.cpp
@@ -69,6 +69,7 @@ Games on this system include....
|*| 2004 | Virtua Striker 4 (Japan) (Rev E) | Sega | GDROM | GDT-0013E | 317-0391-JPN | |
| | 2004 | Virtua Striker 4 (Export) | Sega | GDROM | GDT-0014 | | |
|*| 2004 | Virtua Striker 4 (Export) | Sega | GDROM | GDT-0015 | 317-0393-EXP | |
+| | 2004 | Virtua Striker 4 (Export) | Sega | CF | MDA-G0016 | 317-0393-EXP | |
| | 2004 | The Key Of Avalon 2: Eutaxy Commandment (server) | Sega / Hitmaker | GDROM | GDT-0016 | | |
| | 2004 | The Key Of Avalon 2: Eutaxy Commandment (client) | Sega / Hitmaker | GDROM | GDT-0017 | | |
| | 2004 | The Key Of Avalon 2: Eutaxy Commandment (client) (Rev A) | Sega / Hitmaker | GDROM | GDT-0017A | | |
@@ -88,6 +89,7 @@ Games on this system include....
| | 2006 | Virtua Striker 4 Ver.2006 (Japan) (Rev C) | Sega | GDROM | GDT-0020C | | |
|*| 2006 | Virtua Striker 4 Ver.2006 (Japan) (Rev D) | Sega | GDROM | GDT-0020D | 317-0432-JPN | 253-5508-0432J|
|*| 2006 | Virtua Striker 4 Ver.2006 (Export) | Sega | GDROM | GDT-0021 | 317-0433-EXP | 253-5508-0433E|
+| | 2006 | Virtua Striker 4 Ver.2006 (Export) | Sega | CF | MDA-G00?? | 317-0433-EXP | 253-5508-0433E|
| | 2006 | Triforce Firmware Update for Compact Flash Box | Sega | GDROM | GDT-0022 | 317-0567-COM | |
|*| 2006 | Triforce Firmware Update for Compact Flash Box (Rev A) | Sega | GDROM | GDT-0022A | 317-0567-COM | |
| | 2006 | Donkey Kong : Banana Kingdom | Namco / Nintendo | Cart? | | | |
diff --git a/src/mame/drivers/vgmplay.cpp b/src/mame/drivers/vgmplay.cpp
new file mode 100644
index 00000000000..31292780bfb
--- /dev/null
+++ b/src/mame/drivers/vgmplay.cpp
@@ -0,0 +1,846 @@
+// license:BSD-3-Clause
+// copyright-holders: Olivier Galibert
+
+// A "virtual" driver to play vgm files
+// Use with mame vgmplay -bitb file.vgm
+
+#include
+
+#include "emu.h"
+#include "debugger.h"
+#include "imagedev/bitbngr.h"
+
+#include "sound/2612intf.h"
+#include "sound/ym2151.h"
+#include "sound/ym2413.h"
+#include "sound/sn76496.h"
+#include "sound/segapcm.h"
+
+class vgmplay_device : public cpu_device
+{
+public:
+ enum {
+ REG_SIZE = 0x00000000,
+ A_YM2612 = 0x00000010,
+ A_YM2151 = 0x00000020,
+ A_YM2413 = 0x00000030,
+ A_SN76496 = 0x00000040,
+ A_SEGAPCM = 0x00001000,
+ };
+
+ vgmplay_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ virtual UINT32 execute_min_cycles() const override;
+ virtual UINT32 execute_max_cycles() const override;
+ virtual UINT32 execute_input_lines() const override;
+ virtual void execute_run() override;
+ virtual void execute_set_input(int inputnum, int state) override;
+
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
+
+ virtual void state_import(const device_state_entry &entry) override;
+ virtual void state_export(const device_state_entry &entry) override;
+ virtual void state_string_export(const device_state_entry &entry, std::string &str) const override;
+
+ virtual UINT32 disasm_min_opcode_bytes() const override;
+ virtual UINT32 disasm_max_opcode_bytes() const override;
+ virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) override;
+
+ READ8_MEMBER(segapcm_rom_r);
+
+private:
+ struct rom_block {
+ offs_t start_address;
+ offs_t end_address;
+ std::unique_ptr data;
+
+ rom_block(rom_block &&) = default;
+ rom_block(offs_t start, offs_t end, std::unique_ptr &&d) : start_address(start), end_address(end), data(std::move(d)) {}
+ };
+
+ enum { RESET, RUN, DONE };
+
+ address_space_config m_file_config, m_io_config;
+ address_space *m_file, *m_io;
+
+ int m_icount, m_state;
+
+ UINT32 m_pc;
+
+ std::list m_rom_blocks[0x40];
+ UINT32 m_rom_masks[0x40];
+
+ std::vector m_data_streams[0x40];
+ std::vector m_data_stream_starts[0x40];
+
+ UINT32 m_ym2612_stream_offset;
+
+ UINT8 rom_r(UINT8 type, offs_t offset);
+ UINT32 handle_data_block(UINT32 address);
+ void blocks_clear();
+};
+
+const device_type VGMPLAY = &device_creator;
+
+class vgmplay_state : public driver_device
+{
+public:
+ vgmplay_state(const machine_config &mconfig, device_type type, const char *tag);
+
+ virtual void machine_start() override;
+
+ READ8_MEMBER(file_r);
+ READ8_MEMBER(file_size_r);
+
+private:
+ std::vector m_file_data;
+ required_device m_file;
+ required_device m_ym2612;
+ required_device m_ym2151;
+ required_device m_ym2413;
+ required_device m_sn76496;
+ required_device m_segapcm;
+
+ UINT32 r32(int offset) const;
+};
+
+vgmplay_device::vgmplay_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ cpu_device(mconfig, VGMPLAY, "VGM Player engine", tag, owner, clock, "vgmplay_core", __FILE__),
+ m_file_config("file", ENDIANNESS_LITTLE, 8, 32),
+ m_io_config("io", ENDIANNESS_LITTLE, 8, 32)
+{
+}
+
+void vgmplay_device::device_start()
+{
+ m_icountptr = &m_icount;
+ m_file = &space(AS_PROGRAM);
+ m_io = &space(AS_IO);
+
+ save_item(NAME(m_pc));
+
+ state_add(STATE_GENPC, "GENPC", m_pc).noshow();
+ state_add(STATE_GENPCBASE, "GENPCBASE", m_pc).noshow();
+}
+
+void vgmplay_device::device_reset()
+{
+ m_pc = 0;
+ m_state = RESET;
+
+ m_ym2612_stream_offset = 0;
+ blocks_clear();
+}
+
+UINT32 vgmplay_device::execute_min_cycles() const
+{
+ return 0;
+}
+
+UINT32 vgmplay_device::execute_max_cycles() const
+{
+ return 65536;
+}
+
+UINT32 vgmplay_device::execute_input_lines() const
+{
+ return 0;
+}
+
+void vgmplay_device::blocks_clear()
+{
+ for(int i = 0; i < 0x40; i++) {
+ m_rom_blocks[i].clear();
+ m_rom_masks[i] = 0;
+ m_data_streams[i].clear();
+ m_data_stream_starts[i].clear();
+ }
+}
+
+UINT32 vgmplay_device::handle_data_block(UINT32 address)
+{
+ UINT32 size = m_file->read_dword(m_pc+3);
+ UINT8 type = m_file->read_byte(m_pc+2);
+ if(type < 0x40) {
+ UINT32 start = m_data_streams[type].size();
+ m_data_stream_starts[type].push_back(start);
+ m_data_streams[type].resize(start + size);
+ for(UINT32 i=0; iread_byte(m_pc+7+i);
+
+ } else if(type < 0x7f)
+ logerror("ignored compressed stream size %x type %02x\n", size, type);
+
+ else if(type < 0x80)
+ logerror("ignored compression table size %x\n", size);
+
+ else if(type < 0xc0) {
+ UINT32 rs = m_file->read_dword(m_pc+7);
+ UINT32 start = m_file->read_dword(m_pc+11);
+ std::unique_ptr block = std::make_unique(size - 8);
+ for(UINT32 i=0; iread_byte(m_pc+15+i);
+ m_rom_blocks[type - 0x80].emplace_front(start, start+size-9, std::move(block));
+
+ UINT32 mask = rs-1;
+ mask |= mask >> 1;
+ mask |= mask >> 2;
+ mask |= mask >> 4;
+ mask |= mask >> 8;
+ mask |= mask >> 16;
+ m_rom_masks[type - 0x80] = mask;
+ } else
+ logerror("ignored ram block size %x type %02x\n", size, type);
+ return 7+size;
+}
+
+void vgmplay_device::execute_run()
+{
+ while(m_icount > 0) {
+ switch(m_state) {
+ case RESET: {
+ UINT32 size = m_io->read_dword(REG_SIZE);
+ if(!size) {
+ m_pc = 0;
+ m_state = DONE;
+ break;
+ }
+ UINT32 version = m_file->read_dword(8);
+ m_pc = version < 0x150 ? 0x40 : 0x34 + m_file->read_dword(0x34);
+ m_state = RUN;
+ break;
+ }
+ case RUN: {
+ if(machine().debug_flags & DEBUG_FLAG_ENABLED)
+ debugger_instruction_hook(this, m_pc);
+ UINT8 code = m_file->read_byte(m_pc);
+ switch(code) {
+ case 0x4f:
+ m_io->write_byte(A_SN76496+0, m_file->read_byte(m_pc+1));
+ m_pc += 2;
+ break;
+
+ case 0x50:
+ m_io->write_byte(A_SN76496+1, m_file->read_byte(m_pc+1));
+ m_pc += 2;
+ break;
+
+ case 0x51:
+ m_io->write_byte(A_YM2413+0, m_file->read_byte(m_pc+1));
+ m_io->write_byte(A_YM2413+1, m_file->read_byte(m_pc+2));
+ m_pc += 3;
+ break;
+
+ case 0x52:
+ m_io->write_byte(A_YM2612+0, m_file->read_byte(m_pc+1));
+ m_io->write_byte(A_YM2612+1, m_file->read_byte(m_pc+2));
+ m_pc += 3;
+ break;
+
+ case 0x53:
+ m_io->write_byte(A_YM2612+2, m_file->read_byte(m_pc+1));
+ m_io->write_byte(A_YM2612+3, m_file->read_byte(m_pc+2));
+ m_pc += 3;
+ break;
+
+ case 0x54:
+ m_io->write_byte(A_YM2151+0, m_file->read_byte(m_pc+1));
+ m_io->write_byte(A_YM2151+1, m_file->read_byte(m_pc+2));
+ m_pc += 3;
+ break;
+
+ case 0x61: {
+ UINT32 duration = m_file->read_word(m_pc+1);
+ m_icount -= duration;
+ m_pc += 3;
+ break;
+ }
+
+ case 0x62:
+ m_icount -= 735;
+ m_pc++;
+ break;
+
+ case 0x63:
+ m_icount -= 882;
+ m_pc++;
+ break;
+
+ case 0x66:
+ m_state = DONE;
+ break;
+
+ case 0x67:
+ m_pc += handle_data_block(m_pc);
+ break;
+
+ case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77:
+ case 0x78: case 0x79: case 0x7a: case 0x7b: case 0x7c: case 0x7d: case 0x7e: case 0x7f:
+ m_icount -= 1+(code & 0xf);
+ m_pc += 1;
+ break;
+
+ case 0x80: case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0x87:
+ case 0x88: case 0x89: case 0x8a: case 0x8b: case 0x8c: case 0x8d: case 0x8e: case 0x8f:
+ if(!m_data_streams[0].empty()) {
+ if(m_ym2612_stream_offset >= int(m_data_streams[0].size()))
+ m_ym2612_stream_offset = 0;
+
+ m_io->write_byte(A_YM2612+0, 0x2a);
+ m_io->write_byte(A_YM2612+1, m_data_streams[0][m_ym2612_stream_offset]);
+ }
+ m_pc += 1;
+ m_icount -= code & 0xf;
+ break;
+
+ case 0xc0:
+ m_io->write_byte(A_SEGAPCM + (m_file->read_word(m_pc+1) & 0x7ff), m_file->read_byte(m_pc+3));
+ m_pc += 4;
+ break;
+
+ case 0xe0:
+ m_ym2612_stream_offset = m_file->read_dword(m_pc+1);
+ m_pc += 5;
+ break;
+
+ default:
+ logerror("unhandled code %02x\n", code);
+ m_state = DONE;
+ m_icount = 0;
+ break;
+ }
+ break;
+ }
+ case DONE: {
+ static bool done = false;
+ if(!done) {
+ logerror("done\n");
+ done = true;
+ }
+ if(machine().debug_flags & DEBUG_FLAG_ENABLED)
+ debugger_instruction_hook(this, m_pc);
+ m_icount = 0;
+ break;
+ }
+ }
+ }
+}
+
+void vgmplay_device::execute_set_input(int inputnum, int state)
+{
+}
+
+const address_space_config *vgmplay_device::memory_space_config(address_spacenum spacenum) const
+{
+ switch(spacenum) {
+ case AS_PROGRAM: return &m_file_config;
+ case AS_IO: return &m_io_config;
+ default: return nullptr;
+ }
+}
+
+void vgmplay_device::state_import(const device_state_entry &entry)
+{
+}
+
+void vgmplay_device::state_export(const device_state_entry &entry)
+{
+}
+
+void vgmplay_device::state_string_export(const device_state_entry &entry, std::string &str) const
+{
+}
+
+UINT32 vgmplay_device::disasm_min_opcode_bytes() const
+{
+ return 1;
+}
+
+UINT32 vgmplay_device::disasm_max_opcode_bytes() const
+{
+ return 9;
+}
+
+offs_t vgmplay_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
+{
+ switch(oprom[0]) {
+ case 0x4f:
+ sprintf(buffer, "psg r06 = %02x", oprom[1]);
+ return 2 | DASMFLAG_SUPPORTED;
+
+ case 0x50:
+ sprintf(buffer, "psg write %02x", oprom[1]);
+ return 2 | DASMFLAG_SUPPORTED;
+
+ case 0x51:
+ sprintf(buffer, "ym2413 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0x52:
+ sprintf(buffer, "ym2612.0 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0x53:
+ sprintf(buffer, "ym2612.1 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0x54:
+ sprintf(buffer, "ym2151 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0x55:
+ sprintf(buffer, "ym2203 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0x56:
+ sprintf(buffer, "ym2608.0 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0x57:
+ sprintf(buffer, "ym2608.1 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0x58:
+ sprintf(buffer, "ym2610.0 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0x59:
+ sprintf(buffer, "ym2610.1 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0x5a:
+ sprintf(buffer, "ym3812 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0x5b:
+ sprintf(buffer, "ym3526 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0x5c:
+ sprintf(buffer, "y8950 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0x5d:
+ sprintf(buffer, "ymz280b r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0x5e:
+ sprintf(buffer, "ymf262.0 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0x5f:
+ sprintf(buffer, "ymf262.1 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0x61: {
+ UINT32 duration = oprom[1] | (oprom[2] << 8);
+ sprintf(buffer, "wait %d", duration);
+ return 3 | DASMFLAG_SUPPORTED;
+ }
+
+ case 0x62:
+ sprintf(buffer, "wait 735");
+ return 1 | DASMFLAG_SUPPORTED;
+
+ case 0x63:
+ sprintf(buffer, "wait 882");
+ return 1 | DASMFLAG_SUPPORTED;
+
+ case 0x66:
+ sprintf(buffer, "end");
+ return 1 | DASMFLAG_SUPPORTED;
+
+ case 0x67: {
+ static const char *const basic_types[8] = {
+ "ym2612 pcm",
+ "rf5c68 pcm",
+ "rf5c164 pcm",
+ "pwm pcm",
+ "okim6258 adpcm",
+ "huc6280 pcm",
+ "scsp pcm",
+ "nes apu dpcm"
+ };
+
+ static const char *const rom_types[20] = {
+ "sega pcm rom",
+ "ym2608 delta-t rom",
+ "ym2610 adpcm rom",
+ "ym2610 delta-t rom",
+ "ymf278b rom",
+ "ymf271 rom",
+ "ymz280b rom",
+ "ymf278b rom",
+ "y8950 delta-t rom",
+ "multipcm rom",
+ "upd7759 rom",
+ "okim6295 rom",
+ "k054539 rom",
+ "c140 rom",
+ "k053260 rom",
+ "qsound rom",
+ "es5505/es5506 rom",
+ "x1-010 rom",
+ "c352 rom",
+ "ga20 rom"
+ };
+
+ static const char *const ram_types[3] = {
+ "rf5c68 ram",
+ "rf5c164 ram",
+ "nes apu ram"
+ };
+
+ static const char *const ram2_types[2] = {
+ "scsp ram",
+ "es5503 ram"
+ };
+
+ UINT8 type = oprom[2];
+ UINT32 size = oprom[3] | (oprom[4] << 8) | (oprom[5] << 16) | (oprom[6] << 24);
+ if(type < 0x8)
+ sprintf(buffer, "data-block %x, %s", size, basic_types[type]);
+ else if(type < 0x40)
+ sprintf(buffer, "data-block %x, %02x", size, type);
+ else if(type < 0x48)
+ sprintf(buffer, "data-block %x comp., %s", size, basic_types[type & 0x3f]);
+ else if(type < 0x7f)
+ sprintf(buffer, "data-block %x comp., %02x", size, type & 0x3f);
+ else if(type < 0x80)
+ sprintf(buffer, "decomp-table %x, %02x/%02x", size, oprom[7], oprom[8]);
+ else if(type < 0x94)
+ sprintf(buffer, "data-block %x, %s", size, rom_types[type & 0x7f]);
+ else if(type < 0xc0)
+ sprintf(buffer, "data-block %x, rom %02x", size, type);
+ else if(type < 0x93)
+ sprintf(buffer, "data-block %x, %s", size, ram_types[type & 0x1f]);
+ else if(type < 0xe0)
+ sprintf(buffer, "data-block %x, ram %02x", size, type);
+ else if(type < 0xe2)
+ sprintf(buffer, "data-block %x, %s", size, ram2_types[type & 0x1f]);
+ else
+ sprintf(buffer, "data-block %x, ram %02x", size, type);
+ return (7+size) | DASMFLAG_SUPPORTED;
+ }
+
+ case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77:
+ case 0x78: case 0x79: case 0x7a: case 0x7b: case 0x7c: case 0x7d: case 0x7e: case 0x7f:
+ sprintf(buffer, "wait %d", 1+(oprom[0] & 0x0f));
+ return 1 | DASMFLAG_SUPPORTED;
+
+ case 0x80:
+ sprintf(buffer, "ym2612.0 r2a = rom++");
+ return 1 | DASMFLAG_SUPPORTED;
+
+ case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0x87:
+ case 0x88: case 0x89: case 0x8a: case 0x8b: case 0x8c: case 0x8d: case 0x8e: case 0x8f:
+ sprintf(buffer, "ym2612.0 r2a = rom++; wait %d", oprom[0] & 0xf);
+ return 1 | DASMFLAG_SUPPORTED;
+
+ case 0xa0:
+ sprintf(buffer, "ay8910 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0xb0:
+ sprintf(buffer, "rf5c68 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0xb1:
+ sprintf(buffer, "rf5c68 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0xb2:
+ sprintf(buffer, "pwm r%x = %03x", oprom[1] >> 4, oprom[2] | ((oprom[1] & 0xf) << 8));
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0xb3:
+ sprintf(buffer, "dmg r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0xb4:
+ sprintf(buffer, "apu r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0xb5:
+ sprintf(buffer, "multipcm r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0xb6:
+ sprintf(buffer, "upd7759 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0xb7:
+ sprintf(buffer, "okim6258 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0xb8:
+ sprintf(buffer, "huc6280 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0xb9:
+ sprintf(buffer, "k053260 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0xba:
+ sprintf(buffer, "pokey r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0xbb:
+ sprintf(buffer, "rf5c68 r%02x = %02x", oprom[1], oprom[2]);
+ return 3 | DASMFLAG_SUPPORTED;
+
+ case 0xc0:
+ sprintf(buffer, "segapcm %04x = %02x", oprom[1] | (oprom[2] << 8), oprom[3]);
+ return 4 | DASMFLAG_SUPPORTED;
+
+ case 0xc1:
+ sprintf(buffer, "rf5c68 %04x = %02x", oprom[1] | (oprom[2] << 8), oprom[3]);
+ return 4 | DASMFLAG_SUPPORTED;
+
+ case 0xc2:
+ sprintf(buffer, "rf5c163 %04x = %02x", oprom[1] | (oprom[2] << 8), oprom[3]);
+ return 4 | DASMFLAG_SUPPORTED;
+
+ case 0xc3:
+ sprintf(buffer, "multipcm c%02x.off = %04x", oprom[1], oprom[2] | (oprom[3] << 8));
+ return 4 | DASMFLAG_SUPPORTED;
+
+ case 0xc4:
+ sprintf(buffer, "qsound %02x = %04x", oprom[3], oprom[2] | (oprom[1] << 8));
+ return 4 | DASMFLAG_SUPPORTED;
+
+ case 0xd0:
+ sprintf(buffer, "ymf278b r%02x.%02x = %02x", oprom[1], oprom[2], oprom[3]);
+ return 4 | DASMFLAG_SUPPORTED;
+
+ case 0xd1:
+ sprintf(buffer, "ymf271 r%02x.%02x = %02x", oprom[1], oprom[2], oprom[3]);
+ return 4 | DASMFLAG_SUPPORTED;
+
+ case 0xd2:
+ sprintf(buffer, "scc1 r%02x.%02x = %02x", oprom[1], oprom[2], oprom[3]);
+ return 4 | DASMFLAG_SUPPORTED;
+
+ case 0xd3:
+ sprintf(buffer, "k054539 r%02x.%02x = %02x", oprom[1], oprom[2], oprom[3]);
+ return 4 | DASMFLAG_SUPPORTED;
+
+ case 0xd4:
+ sprintf(buffer, "c140 r%02x.%02x = %02x", oprom[1], oprom[2], oprom[3]);
+ return 4 | DASMFLAG_SUPPORTED;
+
+ case 0xe0: {
+ UINT32 off = oprom[1] | (oprom[2] << 8) | (oprom[3] << 16) | (oprom[4] << 24);
+ sprintf(buffer, "ym2612 offset = %x", off);
+ return 5 | DASMFLAG_SUPPORTED;
+ }
+
+ default:
+ sprintf(buffer, "?? %02x", oprom[0]);
+ return 1 | DASMFLAG_SUPPORTED;
+ }
+}
+
+UINT8 vgmplay_device::rom_r(UINT8 type, offs_t offset)
+{
+ for(const auto &b : m_rom_blocks[type - 0x80])
+ if(offset >= b.start_address && offset <= b.end_address)
+ return b.data[offset - b.start_address];
+ logerror("Unmapped rom read, type %02x, offset %x\n", type, offset);
+ return 0;
+}
+
+READ8_MEMBER(vgmplay_device::segapcm_rom_r)
+{
+ return rom_r(0x80, offset);
+}
+
+vgmplay_state::vgmplay_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_file(*this, "file"),
+ m_ym2612(*this, "ym2612"),
+ m_ym2151(*this, "ym2151"),
+ m_ym2413(*this, "ym2413"),
+ m_sn76496(*this, "sn76496"),
+ m_segapcm(*this, "segapcm")
+{
+}
+
+UINT32 vgmplay_state::r32(int off) const
+{
+ if(off + 3 < int(m_file_data.size()))
+ return m_file_data[off] | (m_file_data[off+1] << 8) | (m_file_data[off+2] << 16) | (m_file_data[off+3] << 24);
+ return 0;
+}
+
+void vgmplay_state::machine_start()
+{
+ UINT32 size = 0;
+ if(m_file->exists()) {
+ size = m_file->length();
+ m_file_data.resize(size);
+ m_file->input(&m_file_data[0], size);
+
+ // Decompress gzip-compressed files (aka vgz)
+ if(m_file_data[0] == 0x1f && m_file_data[1] == 0x8b) {
+ std::vector decomp;
+ int bs = m_file_data.size();
+ decomp.resize(2*bs);
+ z_stream str;
+ str.zalloc = nullptr;
+ str.zfree = nullptr;
+ str.opaque = nullptr;
+ str.data_type = 0;
+ str.next_in = &m_file_data[0];
+ str.avail_in = m_file_data.size();
+ str.total_in = 0;
+ str.total_out = 0;
+ int err = inflateInit2(&str, 31);
+ if(err != Z_OK) {
+ logerror("gzip header but not a gzip file\n");
+ m_file_data.clear();
+ return;
+ }
+ do {
+ if(str.total_out >= decomp.size())
+ decomp.resize(decomp.size() + bs);
+ str.next_out = &decomp[str.total_out];
+ str.avail_out = decomp.size() - str.total_out;
+ err = inflate(&str, Z_SYNC_FLUSH);
+ } while(err == Z_OK);
+ if(err != Z_STREAM_END) {
+ logerror("broken gzip file\n");
+ m_file_data.clear();
+ return;
+ }
+ m_file_data.resize(str.total_out);
+ memcpy(&m_file_data[0], &decomp[0], str.total_out);
+ }
+
+ if(m_file_data.size() < 0x40 || r32(0) != 0x206d6756) {
+ logerror("Not a vgm/vgz file\n");
+ m_file_data.clear();
+ return;
+ }
+
+ UINT32 version = r32(8);
+ logerror("File version %x.%02x\n", version >> 8, version & 0xff);
+ if(r32(0x0c))
+ m_sn76496->set_unscaled_clock(r32(0x0c));
+ if(r32(0x10))
+ m_ym2413->set_unscaled_clock(r32(0x10));
+ if(version <= 0x101 && r32(0x0c)) {
+ m_ym2612->set_unscaled_clock(r32(0x0c));
+ m_ym2151->set_unscaled_clock(r32(0x0c));
+ }
+ if(version >= 0x110 && r32(0x2c))
+ m_ym2612->set_unscaled_clock(r32(0x2c));
+ if(version >= 0x110 && r32(0x30))
+ m_ym2151->set_unscaled_clock(r32(0x30));
+ if(version >= 0x151 && r32(0x38))
+ m_segapcm->set_unscaled_clock(r32(0x38));
+ if(version >= 0x151 && r32(0x40))
+ logerror("Warning: file requests an unsupported RF5C68\n");
+ if(version >= 0x151 && r32(0x44))
+ logerror("Warning: file requests an unsupported YM2203\n");
+ if(version >= 0x151 && r32(0x48))
+ logerror("Warning: file requests an unsupported YM2608\n");
+ if(version >= 0x151 && r32(0x4c))
+ logerror("Warning: file requests an unsupported %s\n", r32(0x4c) & 0x80000000 ? "YM2610B" : "YM2610");
+ if(version >= 0x151 && r32(0x50))
+ logerror("Warning: file requests an unsupported YM3812\n");
+ if(version >= 0x151 && r32(0x54))
+ logerror("Warning: file requests an unsupported YM3526\n");
+ if(version >= 0x151 && r32(0x58))
+ logerror("Warning: file requests an unsupported Y8950\n");
+ if(version >= 0x151 && r32(0x5c))
+ logerror("Warning: file requests an unsupported YMF262\n");
+ if(version >= 0x151 && r32(0x60))
+ logerror("Warning: file requests an unsupported YMF278B\n");
+ if(version >= 0x151 && r32(0x64))
+ logerror("Warning: file requests an unsupported YMF271\n");
+ if(version >= 0x151 && r32(0x68))
+ logerror("Warning: file requests an unsupported YMZ280B\n");
+ if(version >= 0x151 && r32(0x6c))
+ logerror("Warning: file requests an unsupported RF5C164\n");
+ if(version >= 0x151 && r32(0x70))
+ logerror("Warning: file requests an unsupported PWM\n");
+ if(version >= 0x151 && r32(0x74))
+ logerror("Warning: file requests an unsupported AY8910\n");
+ }
+}
+
+READ8_MEMBER(vgmplay_state::file_r)
+{
+ if(offset < m_file_data.size())
+ return m_file_data[offset];
+ return 0;
+}
+
+READ8_MEMBER(vgmplay_state::file_size_r)
+{
+ UINT32 size = m_file_data.size();
+ return size >> (8*offset);
+}
+
+static INPUT_PORTS_START( vgmplay )
+INPUT_PORTS_END
+
+static ADDRESS_MAP_START( file_map, AS_PROGRAM, 8, vgmplay_state )
+ AM_RANGE(0x00000000, 0xffffffff) AM_READ(file_r)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( soundchips_map, AS_IO, 8, vgmplay_state )
+ AM_RANGE(vgmplay_device::REG_SIZE, vgmplay_device::REG_SIZE+3) AM_READ(file_size_r)
+ AM_RANGE(vgmplay_device::A_YM2612, vgmplay_device::A_YM2612+3) AM_DEVREADWRITE("ym2612", ym2612_device, read, write)
+ AM_RANGE(vgmplay_device::A_YM2151, vgmplay_device::A_YM2151+1) AM_DEVREADWRITE("ym2151", ym2151_device, read, write)
+ AM_RANGE(vgmplay_device::A_YM2413, vgmplay_device::A_YM2413+1) AM_DEVWRITE ("ym2413", ym2413_device, write)
+// AM_RANGE(vgmplay_device::A_SN76496+0, vgmplay_device::A_SN76496+0) AM_DEVWRITE ("sn76496", sn76496_device, stereo_w)
+ AM_RANGE(vgmplay_device::A_SN76496+1, vgmplay_device::A_SN76496+1) AM_DEVWRITE ("sn76496", sn76496_device, write)
+ AM_RANGE(vgmplay_device::A_SEGAPCM, vgmplay_device::A_SEGAPCM+0x7ff) AM_DEVREADWRITE("segapcm", segapcm_device, sega_pcm_r, sega_pcm_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( segapcm_map, AS_0, 8, vgmplay_state )
+ AM_RANGE(0, 0x1fffff) AM_DEVREAD("vgmplay", vgmplay_device, segapcm_rom_r)
+ADDRESS_MAP_END
+
+static MACHINE_CONFIG_START( vgmplay, vgmplay_state )
+ MCFG_CPU_ADD("vgmplay", VGMPLAY, 44100)
+ MCFG_CPU_PROGRAM_MAP( file_map )
+ MCFG_CPU_IO_MAP( soundchips_map )
+
+ MCFG_DEVICE_ADD("file", BITBANGER, 0)
+
+ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+
+ MCFG_SOUND_ADD("ym2612", YM2612, 7670454)
+ MCFG_SOUND_ROUTE(0, "lspeaker", 1)
+ MCFG_SOUND_ROUTE(1, "rspeaker", 1)
+
+ MCFG_SOUND_ADD("ym2151", YM2151, 3579545)
+ MCFG_SOUND_ROUTE(0, "lspeaker", 1)
+ MCFG_SOUND_ROUTE(1, "rspeaker", 1)
+
+ MCFG_SOUND_ADD("ym2413", YM2413, 3579545)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1)
+
+ MCFG_SOUND_ADD("sn76496", SN76496, 3579545)
+ MCFG_SOUND_ROUTE(0, "lspeaker", 1)
+ MCFG_SOUND_ROUTE(0, "rspeaker", 1)
+
+ MCFG_SOUND_ADD("segapcm", SEGAPCM, 4000000)
+ MCFG_SEGAPCM_BANK(BANK_512) // Should be configurable for yboard...
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, segapcm_map)
+ MCFG_SOUND_ROUTE(0, "lspeaker", 1)
+ MCFG_SOUND_ROUTE(1, "rspeaker", 1)
+MACHINE_CONFIG_END
+
+ROM_START( vgmplay )
+ROM_END
+
+CONS( 2016, vgmplay, 0, 0, vgmplay, vgmplay, driver_device, 0, "MAME", "VGM player", 0)
+
diff --git a/src/mame/drivers/victor9k.cpp b/src/mame/drivers/victor9k.cpp
index 7563b4a37d4..7bc2708c8fd 100644
--- a/src/mame/drivers/victor9k.cpp
+++ b/src/mame/drivers/victor9k.cpp
@@ -10,16 +10,15 @@
TODO:
+ - contrast
+ - MC6852
+ - codec sound
- expansion bus
- Z80 card
- Winchester DMA card (Xebec S1410 + Tandon TM502/TM603SE)
- RAM cards
- clock cards
- floppy 8048
- - hires graphics
- - brightness/contrast
- - MC6852
- - codec sound
*/
@@ -86,46 +85,80 @@ INPUT_PORTS_END
// MC6845
//-------------------------------------------------
-#define CODE_NON_DISPLAY 0x1000
-#define CODE_UNDERLINE 0x2000
-#define CODE_LOW_INTENSITY 0x4000
-#define CODE_REVERSE_VIDEO 0x8000
+#define DC_SECRET 0x1000
+#define DC_UNDLN 0x2000
+#define DC_LOWINT 0x4000
+#define DC_RVS 0x8000
MC6845_UPDATE_ROW( victor9k_state::crtc_update_row )
{
+ int hires = BIT(ma, 13);
+ int dot_addr = BIT(ma, 12);
+ int width = hires ? 16 : 10;
+
+ if (m_hires != hires)
+ {
+ m_hires = hires;
+ m_crtc->set_clock(XTAL_30MHz / width);
+ m_crtc->set_hpixels_per_column(width);
+ }
+
address_space &program = m_maincpu->space(AS_PROGRAM);
const rgb_t *palette = m_palette->palette()->entry_list_raw();
+
+ int x = hbp;
- if (BIT(ma, 13))
- {
- fatalerror("Graphics mode not supported!\n");
- }
- else
- {
- UINT16 video_ram_addr = (ma & 0xfff) << 1;
+ offs_t aa = (ma & 0x7ff) << 1;
- for (int sx = 0; sx < x_count; sx++)
+ for (int sx = 0; sx < x_count; sx++)
+ {
+ UINT16 dc = (m_video_ram[aa + 1] << 8) | m_video_ram[aa];
+ offs_t ab = (dot_addr << 15) | ((dc & 0x7ff) << 4) | (ra & 0x0f);
+ UINT16 dd = program.read_word(ab << 1);
+
+ int cursor = (sx == cursor_x) ? 1 : 0;
+ int undln = !((dc & DC_UNDLN) && BIT(dd, 15)) ? 2 : 0;
+ int rvs = (dc & DC_RVS) ? 4 : 0;
+ int secret = (dc & DC_SECRET) ? 1 : 0;
+ int lowint = (dc & DC_LOWINT) ? 1 : 0;
+
+ for (int bit = 0; bit < width; bit++)
{
- UINT16 code = (m_video_ram[video_ram_addr + 1] << 8) | m_video_ram[video_ram_addr];
- UINT32 char_ram_addr = (BIT(ma, 12) << 16) | ((code & 0xff) << 5) | (ra << 1);
- UINT16 data = program.read_word(char_ram_addr);
+ int pixel = 0;
- if (code & CODE_REVERSE_VIDEO) data ^= 0xffff;
- if (code & CODE_NON_DISPLAY) data = 0;
- if (sx == cursor_x) data = 0xffff;
-
- for (int x = 0; x <= 10; x++)
+ switch (rvs | undln | cursor)
{
- int pixel = BIT(data, x);
- int color = palette[pixel && de];
- if (!(code & CODE_LOW_INTENSITY) && color) color = 2;
+ case 0: case 5:
+ pixel = 1;
+ break;
- bitmap.pix32(vbp + y, hbp + x + sx*10) = color;
+ case 1: case 4:
+ pixel = 0;
+ break;
+
+ case 2: case 7:
+ pixel = !(!(BIT(dd, bit) && !secret));
+ break;
+
+ case 3: case 6:
+ pixel = !(BIT(dd, bit) && !secret);
+ break;
}
- video_ram_addr += 2;
- video_ram_addr &= 0xfff;
+ int color = 0;
+
+ if (pixel && de)
+ {
+ int pen = 1 + m_brt;
+ if (!lowint) pen = 9;
+ color = palette[pen];
+ }
+
+ bitmap.pix32(vbp + y, x++) = color;
}
+
+ aa += 2;
+ aa &= 0xfff;
}
}
@@ -176,6 +209,14 @@ WRITE_LINE_MEMBER( victor9k_state::ssda_irq_w )
}
+WRITE_LINE_MEMBER( victor9k_state::ssda_sm_dtr_w )
+{
+ m_ssda->cts_w(state);
+ m_ssda->dcd_w(!state);
+ //m_cvsd->enc_dec_w(!state);
+}
+
+
WRITE8_MEMBER( victor9k_state::via1_pa_w )
{
/*
@@ -312,6 +353,8 @@ WRITE8_MEMBER( victor9k_state::via2_pb_w )
// contrast
m_cont = data >> 5;
+
+ if (LOG) logerror("BRT %u CONT %u\n", m_brt, m_cont);
}
WRITE_LINE_MEMBER( victor9k_state::via2_irq_w )
@@ -365,8 +408,9 @@ WRITE_LINE_MEMBER( victor9k_state::write_rib )
WRITE8_MEMBER( victor9k_state::via3_pb_w )
{
// codec clock output
- m_ssda->rx_clk_w(BIT(data, 7));
- m_ssda->tx_clk_w(BIT(data, 7));
+ m_ssda->rx_clk_w(!BIT(data, 7));
+ m_ssda->tx_clk_w(!BIT(data, 7));
+ m_cvsd->clock_w(!BIT(data, 7));
}
WRITE_LINE_MEMBER( victor9k_state::via3_irq_w )
@@ -412,6 +456,30 @@ WRITE_LINE_MEMBER( victor9k_state::fdc_irq_w )
// MACHINE INITIALIZATION
//**************************************************************************
+PALETTE_INIT_MEMBER(victor9k_state, victor9k)
+{
+ palette.set_pen_color(0, rgb_t(0x00, 0x00, 0x00));
+
+ // BRT0 82K
+ // BRT1 39K
+ // BRT2 20K
+ // 12V 220K pullup
+ palette.set_pen_color(1, rgb_t(0x00, 0x10, 0x00));
+ palette.set_pen_color(2, rgb_t(0x00, 0x20, 0x00));
+ palette.set_pen_color(3, rgb_t(0x00, 0x40, 0x00));
+ palette.set_pen_color(4, rgb_t(0x00, 0x60, 0x00));
+ palette.set_pen_color(5, rgb_t(0x00, 0x80, 0x00));
+ palette.set_pen_color(6, rgb_t(0x00, 0xa0, 0x00));
+ palette.set_pen_color(7, rgb_t(0x00, 0xc0, 0x00));
+ palette.set_pen_color(8, rgb_t(0x00, 0xff, 0x00));
+
+ // CONT0 620R
+ // CONT1 332R
+ // CONT2 162R
+ // 12V 110R pullup
+ palette.set_pen_color(9, rgb_t(0xff, 0x00, 0x00));
+}
+
void victor9k_state::machine_start()
{
// state saving
@@ -425,6 +493,7 @@ void victor9k_state::machine_start()
save_item(NAME(m_kbrdy));
save_item(NAME(m_kbackctl));
+#ifndef USE_SCP
// patch out SCP self test
m_rom->base()[0x11ab] = 0xc3;
@@ -433,6 +502,7 @@ void victor9k_state::machine_start()
m_rom->base()[0x1d52] = 0x90;
m_rom->base()[0x1d53] = 0x90;
m_rom->base()[0x1d54] = 0x90;
+#endif
}
void victor9k_state::machine_reset()
@@ -470,10 +540,10 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state )
MCFG_SCREEN_UPDATE_DEVICE(HD46505S_TAG, hd6845_device, screen_update)
MCFG_SCREEN_SIZE(640, 480)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
+ MCFG_PALETTE_ADD("palette", 16)
+ MCFG_PALETTE_INIT_OWNER(victor9k_state, victor9k)
- MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
-
- MCFG_MC6845_ADD(HD46505S_TAG, HD6845, SCREEN_TAG, XTAL_30MHz/11) // HD6845 == HD46505S
+ MCFG_MC6845_ADD(HD46505S_TAG, HD6845, SCREEN_TAG, XTAL_30MHz/10) // HD6845 == HD46505S
MCFG_MC6845_SHOW_BORDER_AREA(true)
MCFG_MC6845_CHAR_WIDTH(10)
MCFG_MC6845_UPDATE_ROW_CB(victor9k_state, crtc_update_row)
@@ -481,7 +551,8 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state )
// sound hardware
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_SOUND_ADD(HC55516_TAG, HC55516, 100000)
+ MCFG_SOUND_ADD(HC55516_TAG, HC55516, 0)
+ //MCFG_HC55516_DIG_OUT_CB(DEVWRITELINE(MC6852_TAG, mc6852_device, rx_w))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
// devices
@@ -516,6 +587,7 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state )
MCFG_DEVICE_ADD(MC6852_TAG, MC6852, XTAL_30MHz/30)
MCFG_MC6852_TX_DATA_CALLBACK(DEVWRITELINE(HC55516_TAG, hc55516_device, digit_w))
+ MCFG_MC6852_SM_DTR_CALLBACK(WRITELINE(victor9k_state, ssda_sm_dtr_w))
MCFG_MC6852_IRQ_CALLBACK(WRITELINE(victor9k_state, ssda_irq_w))
MCFG_DEVICE_ADD(M6522_1_TAG, VIA6522, XTAL_30MHz/30)
@@ -598,4 +670,4 @@ ROM_END
//**************************************************************************
// YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS
-COMP( 1982, victor9k, 0, 0, victor9k, victor9k, driver_device, 0, "Victor Business Products", "Victor 9000", MACHINE_NOT_WORKING )
+COMP( 1982, victor9k, 0, 0, victor9k, victor9k, driver_device, 0, "Victor Business Products", "Victor 9000", MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/vis.cpp b/src/mame/drivers/vis.cpp
new file mode 100644
index 00000000000..a84d9bb3d1d
--- /dev/null
+++ b/src/mame/drivers/vis.cpp
@@ -0,0 +1,152 @@
+// license:BSD-3-Clause
+// copyright-holders:Carl
+
+#include "emu.h"
+#include "cpu/i86/i286.h"
+#include "machine/at.h"
+#include "bus/isa/isa_cards.h"
+
+class vis_state : public driver_device
+{
+public:
+ vis_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_mb(*this, "mb")
+ { }
+ required_device m_maincpu;
+ required_device m_mb;
+
+ DECLARE_READ8_MEMBER(sysctl_r);
+ DECLARE_WRITE8_MEMBER(sysctl_w);
+ DECLARE_READ8_MEMBER(unk_r);
+ DECLARE_WRITE8_MEMBER(unk_w);
+ DECLARE_READ8_MEMBER(unk2_r);
+ DECLARE_READ8_MEMBER(unk3_r);
+ DECLARE_READ8_MEMBER(cdrom_r);
+ DECLARE_WRITE8_MEMBER(cdrom_w);
+protected:
+ void machine_reset() override;
+private:
+ UINT8 m_sysctl;
+ UINT8 m_unkidx;
+ UINT8 m_unk[16];
+ UINT8 m_cdcmd, m_cdstat;
+};
+
+void vis_state::machine_reset()
+{
+ m_cdcmd = 0;
+ m_cdstat = 0;
+ m_sysctl = 0;
+}
+
+READ8_MEMBER(vis_state::unk_r)
+{
+ if(offset)
+ return m_unk[m_unkidx];
+ return 0;
+}
+
+WRITE8_MEMBER(vis_state::unk_w)
+{
+ if(offset)
+ m_unk[m_unkidx] = data;
+ else
+ m_unkidx = data & 0xf;
+}
+
+READ8_MEMBER(vis_state::unk2_r)
+{
+ return 0x40;
+}
+
+READ8_MEMBER(vis_state::unk3_r)
+{
+ return 0x00;
+}
+
+// probably a mitsumi isa non-atapi cdrom controller, mcd.c in older linux versions
+READ8_MEMBER(vis_state::cdrom_r)
+{
+ if(m_cdcmd)
+ {
+ if(offset)
+ {
+ int ret = m_cdstat;
+ m_cdstat = 0;
+ return ret;
+ }
+ else
+ {
+ m_cdcmd = 0;
+ return 0x80;
+ }
+ }
+ if(offset)
+ return 0;
+ else
+ return 0x20;
+}
+
+WRITE8_MEMBER(vis_state::cdrom_w)
+{
+ if(!offset)
+ {
+ m_cdcmd = data;
+ m_cdstat = 4;
+ }
+}
+
+READ8_MEMBER(vis_state::sysctl_r)
+{
+ return m_sysctl;
+}
+
+WRITE8_MEMBER(vis_state::sysctl_w)
+{
+ if(BIT(data, 0) && !BIT(m_sysctl, 0))
+ m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
+ //m_maincpu->set_input_line(INPUT_LINE_A20, BIT(data, 1) ? CLEAR_LINE : ASSERT_LINE);
+ m_sysctl = data;
+}
+
+static ADDRESS_MAP_START( at16_map, AS_PROGRAM, 16, vis_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x000000, 0x09ffff) AM_RAM
+ AM_RANGE(0x0d8000, 0x0fffff) AM_ROM AM_REGION("bios", 0xd8000)
+ AM_RANGE(0x100000, 0x15ffff) AM_RAM
+ AM_RANGE(0xff0000, 0xffffff) AM_ROM AM_REGION("bios", 0xf0000)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( at16_io, AS_IO, 16, vis_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0026, 0x0027) AM_READWRITE8(unk_r, unk_w, 0xffff)
+ AM_RANGE(0x006a, 0x006b) AM_READ8(unk2_r, 0x00ff)
+ AM_RANGE(0x0092, 0x0093) AM_READWRITE8(sysctl_r, sysctl_w, 0x00ff)
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", at_mb_device, map)
+ AM_RANGE(0x0310, 0x0311) AM_READWRITE8(cdrom_r, cdrom_w, 0xffff)
+ AM_RANGE(0x031a, 0x031b) AM_READ8(unk3_r, 0x00ff)
+ADDRESS_MAP_END
+
+static MACHINE_CONFIG_START( vis, vis_state )
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", I80286, XTAL_12MHz )
+ MCFG_CPU_PROGRAM_MAP(at16_map)
+ MCFG_CPU_IO_MAP(at16_io)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259_master", pic8259_device, inta_cb)
+ MCFG_80286_SHUTDOWN(DEVWRITELINE("mb", at_mb_device, shutdown))
+
+ MCFG_DEVICE_ADD("mb", AT_MB, 0)
+
+ MCFG_ISA16_SLOT_ADD("mb:isabus","vga", pc_isa16_cards, "clgd542x", true)
+MACHINE_CONFIG_END
+
+ROM_START(vis)
+ ROM_REGION(0x100000,"bios", 0)
+ ROM_LOAD( "p513bk0b.bin", 0x00000, 0x80000, CRC(364e3f74) SHA1(04260ef1e65e482c9c49d25ace40e22487d6aab9))
+ ROM_LOAD( "p513bk1b.bin", 0x80000, 0x80000, CRC(e18239c4) SHA1(a0262109e10a07a11eca43371be9978fff060bc5))
+ROM_END
+
+COMP ( 1992, vis, 0, 0, vis, 0, driver_device, 0, "Tandy/Memorex", "Video Information System MD-2500", MACHINE_NOT_WORKING )
+
diff --git a/src/mame/drivers/wangpc.cpp b/src/mame/drivers/wangpc.cpp
index 2b43d59b194..8babe95992a 100644
--- a/src/mame/drivers/wangpc.cpp
+++ b/src/mame/drivers/wangpc.cpp
@@ -449,7 +449,7 @@ READ8_MEMBER( wangpc_state::busy_clr_r )
{
if (LOG) logerror("%s: BUSY clear\n", machine().describe_context());
- m_centronics_busy = 1;
+ m_centronics_busy = 0;
check_level1_interrupts();
return 0xff;
@@ -713,7 +713,7 @@ WRITE_LINE_MEMBER( wangpc_state::dack3_w )
void wangpc_state::check_level1_interrupts()
{
- int state = !m_timer2_irq || m_epci->rxrdy_r() || m_epci->txemt_r() || !m_centronics_ack || !m_dav || !m_centronics_busy;
+ int state = !m_timer2_irq || m_epci->rxrdy_r() || m_epci->txemt_r() || !m_centronics_ack || !m_dav || m_centronics_busy;
m_pic->ir1_w(state);
}
@@ -1191,4 +1191,4 @@ ROM_END
// GAME DRIVERS
//**************************************************************************
-COMP( 1985, wangpc, 0, 0, wangpc, wangpc, driver_device, 0, "Wang Laboratories", "Wang Professional Computer", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+COMP( 1985, wangpc, 0, 0, wangpc, wangpc, driver_device, 0, "Wang Laboratories", "Wang Professional Computer", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/yunsung8.cpp b/src/mame/drivers/yunsung8.cpp
index 8c1ef5f83ec..9d5f12b66d3 100644
--- a/src/mame/drivers/yunsung8.cpp
+++ b/src/mame/drivers/yunsung8.cpp
@@ -46,11 +46,11 @@ To Do:
***************************************************************************/
-WRITE8_MEMBER(yunsung8_state::yunsung8_bankswitch_w)
+WRITE8_MEMBER(yunsung8_state::bankswitch_w)
{
m_layers_ctrl = data & 0x30; // Layers enable
- membank("bank1")->set_entry(data & 0x07);
+ membank("mainbank")->set_entry(data & 0x07);
if (data & ~0x37)
logerror("CPU #0 - PC %04X: Bank %02X\n", space.device().safe_pc(), data);
@@ -66,22 +66,22 @@ WRITE8_MEMBER(yunsung8_state::yunsung8_bankswitch_w)
*/
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, yunsung8_state )
- AM_RANGE(0x0001, 0x0001) AM_WRITE(yunsung8_bankswitch_w) // ROM Bank (again?)
- AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") // Banked ROM
+ AM_RANGE(0x0001, 0x0001) AM_WRITE(bankswitch_w) // ROM Bank (again?)
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("mainbank") // Banked ROM
AM_RANGE(0x0000, 0xbfff) AM_ROM
- AM_RANGE(0xc000, 0xdfff) AM_READWRITE(yunsung8_videoram_r, yunsung8_videoram_w) // Video RAM (Banked)
+ AM_RANGE(0xc000, 0xdfff) AM_READWRITE(videoram_r, videoram_w) // Video RAM (Banked)
AM_RANGE(0xe000, 0xffff) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( port_map, AS_IO, 8, yunsung8_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_READ_PORT("SYSTEM") AM_WRITE(yunsung8_videobank_w) // video RAM bank
- AM_RANGE(0x01, 0x01) AM_READ_PORT("P1") AM_WRITE(yunsung8_bankswitch_w) // ROM Bank + Layers Enable
+ AM_RANGE(0x00, 0x00) AM_READ_PORT("SYSTEM") AM_WRITE(videobank_w) // video RAM bank
+ AM_RANGE(0x01, 0x01) AM_READ_PORT("P1") AM_WRITE(bankswitch_w) // ROM Bank + Layers Enable
AM_RANGE(0x02, 0x02) AM_READ_PORT("P2") AM_DEVWRITE("soundlatch", generic_latch_8_device, write) // To Sound CPU
AM_RANGE(0x03, 0x03) AM_READ_PORT("DSW1")
AM_RANGE(0x04, 0x04) AM_READ_PORT("DSW2")
- AM_RANGE(0x06, 0x06) AM_WRITE(yunsung8_flipscreen_w) // Flip Screen
+ AM_RANGE(0x06, 0x06) AM_WRITE(flipscreen_w) // Flip Screen
AM_RANGE(0x07, 0x07) AM_WRITENOP // ? (end of IRQ, random value)
ADDRESS_MAP_END
@@ -95,17 +95,17 @@ ADDRESS_MAP_END
***************************************************************************/
-WRITE8_MEMBER(yunsung8_state::yunsung8_sound_bankswitch_w)
+WRITE8_MEMBER(yunsung8_state::sound_bankswitch_w)
{
m_msm->reset_w(data & 0x20);
- membank("bank2")->set_entry(data & 0x07);
+ membank("soundbank")->set_entry(data & 0x07);
if (data != (data & (~0x27)))
logerror("%s: Bank %02X\n", machine().describe_context(), data);
}
-WRITE8_MEMBER(yunsung8_state::yunsung8_adpcm_w)
+WRITE8_MEMBER(yunsung8_state::adpcm_w)
{
/* Swap the nibbles */
m_adpcm = ((data & 0xf) << 4) | ((data >> 4) & 0xf);
@@ -115,9 +115,9 @@ WRITE8_MEMBER(yunsung8_state::yunsung8_adpcm_w)
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, yunsung8_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank2") // Banked ROM
- AM_RANGE(0xe000, 0xe000) AM_WRITE(yunsung8_sound_bankswitch_w ) // ROM Bank
- AM_RANGE(0xe400, 0xe400) AM_WRITE(yunsung8_adpcm_w)
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("soundbank") // Banked ROM
+ AM_RANGE(0xe000, 0xe000) AM_WRITE(sound_bankswitch_w ) // ROM Bank
+ AM_RANGE(0xe400, 0xe400) AM_WRITE(adpcm_w)
AM_RANGE(0xec00, 0xec01) AM_DEVWRITE("ymsnd", ym3812_device, write)
AM_RANGE(0xf000, 0xf7ff) AM_RAM
AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From Main CPU
@@ -429,8 +429,8 @@ static const gfx_layout layout_8x8x8 =
};
static GFXDECODE_START( yunsung8 )
- GFXDECODE_ENTRY( "gfx1", 0, layout_8x8x8, 0, 0x08 ) // [0] Tiles (Background)
- GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x4, 0, 0x40 ) // [1] Tiles (Text)
+ GFXDECODE_ENTRY( "bgfx", 0, layout_8x8x8, 0, 0x08 ) // [0] Tiles (Background)
+ GFXDECODE_ENTRY( "text", 0, layout_8x8x4, 0, 0x40 ) // [1] Tiles (Text)
GFXDECODE_END
@@ -444,7 +444,7 @@ GFXDECODE_END
***************************************************************************/
-WRITE_LINE_MEMBER(yunsung8_state::yunsung8_adpcm_int)
+WRITE_LINE_MEMBER(yunsung8_state::adpcm_int)
{
m_msm->data_w(m_adpcm >> 4);
m_adpcm <<= 4;
@@ -456,17 +456,11 @@ WRITE_LINE_MEMBER(yunsung8_state::yunsung8_adpcm_int)
void yunsung8_state::machine_start()
{
- UINT8 *MAIN = memregion("maincpu")->base();
- UINT8 *AUDIO = memregion("audiocpu")->base();
-
m_videoram_0 = m_videoram + 0x0000; // Ram is banked
m_videoram_1 = m_videoram + 0x2000;
- membank("bank1")->configure_entries(0, 3, &MAIN[0x00000], 0x4000);
- membank("bank1")->configure_entries(3, 5, &MAIN[0x10000], 0x4000);
- membank("bank2")->configure_entries(0, 3, &AUDIO[0x00000], 0x4000);
- membank("bank2")->configure_entries(3, 5, &AUDIO[0x10000], 0x4000);
-
+ membank("mainbank")->configure_entries(0, 8, memregion("maincpu")->base(), 0x4000);
+ membank("soundbank")->configure_entries(0, 8, memregion("audiocpu")->base(), 0x4000);
save_item(NAME(m_videoram));
save_item(NAME(m_layers_ctrl));
@@ -500,7 +494,7 @@ static MACHINE_CONFIG_START( yunsung8, yunsung8_state )
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL_16MHz/2, 512, 64, 512-64, 262, 8, 256-8) /* TODO: completely inaccurate */
- MCFG_SCREEN_UPDATE_DRIVER(yunsung8_state, screen_update_yunsung8)
+ MCFG_SCREEN_UPDATE_DRIVER(yunsung8_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", yunsung8)
@@ -517,7 +511,7 @@ static MACHINE_CONFIG_START( yunsung8, yunsung8_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
MCFG_SOUND_ADD("msm", MSM5205, XTAL_400kHz) /* verified on pcb */
- MCFG_MSM5205_VCLK_CB(WRITELINE(yunsung8_state, yunsung8_adpcm_int)) /* interrupt function */
+ MCFG_MSM5205_VCLK_CB(WRITELINE(yunsung8_state, adpcm_int)) /* interrupt function */
MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S96_4B) /* 4KHz, 4 Bits */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.80)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.80)
@@ -569,21 +563,19 @@ Sound CPU: Z80A
***************************************************************************/
ROM_START( magix )
- ROM_REGION( 0x24000, "maincpu", 0 ) /* Main Z80 Code */
- ROM_LOAD( "yunsung8.07", 0x00000, 0x0c000, CRC(d4d0b68b) SHA1(d7e1fb57a14f8b822791b98cecc6d5a053a89e0f) )
- ROM_CONTINUE( 0x10000, 0x14000)
+ ROM_REGION( 0x20000, "maincpu", 0 ) /* Main Z80 Code */
+ ROM_LOAD( "yunsung8.07", 0x00000, 0x20000, CRC(d4d0b68b) SHA1(d7e1fb57a14f8b822791b98cecc6d5a053a89e0f) )
- ROM_REGION( 0x24000, "audiocpu", 0 ) /* Sound Z80 Code */
- ROM_LOAD( "yunsung8.08", 0x00000, 0x0c000, CRC(6fd60be9) SHA1(87622dc2967842629e90a02b415bec86cc26cbc7) )
- ROM_CONTINUE( 0x10000, 0x14000)
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* Sound Z80 Code */
+ ROM_LOAD( "yunsung8.08", 0x00000, 0x20000, CRC(6fd60be9) SHA1(87622dc2967842629e90a02b415bec86cc26cbc7) )
- ROM_REGION( 0x200000, "gfx1", 0 ) /* Background */
+ ROM_REGION( 0x200000, "bgfx", 0 ) /* Background */
ROM_LOAD( "yunsung8.04", 0x000000, 0x80000, CRC(0a100d2b) SHA1(c36a2489748c8ac7b6d7457ad09d8153707c85be) )
ROM_LOAD( "yunsung8.03", 0x080000, 0x80000, CRC(c8cb0373) SHA1(339c4e0fef44da3cab615e07dc8739bd925ebf28) )
ROM_LOAD( "yunsung8.02", 0x100000, 0x80000, CRC(09efb8e5) SHA1(684bb5c4b579f8c77e79aab4decbefea495d9474) )
ROM_LOAD( "yunsung8.01", 0x180000, 0x80000, CRC(4590d782) SHA1(af875166207793572b9ecf01bb6a24feba562a96) )
- ROM_REGION( 0x40000, "gfx2", 0 ) /* Text */
+ ROM_REGION( 0x40000, "text", 0 ) /* Text */
ROM_LOAD( "yunsung8.05", 0x00000, 0x20000, CRC(862d378c) SHA1(a4e2cf14b5b25c6b8725dd285ddea65ce9ee257a) ) // only first $8000 bytes != 0
ROM_LOAD( "yunsung8.06", 0x20000, 0x20000, CRC(8b2ab901) SHA1(1a5c05dd0cf830b645357a62d8e6e876b44c6b7f) ) // only first $8000 bytes != 0
ROM_END
@@ -599,21 +591,19 @@ Code is different, shifted around not patched.
***************************************************************************/
ROM_START( magixb )
- ROM_REGION( 0x24000, "maincpu", 0 ) /* Main Z80 Code */
- ROM_LOAD( "8.bin", 0x00000, 0x0c000, CRC(3b92020f) SHA1(edc15c5b712774dad1685ce9a94e4290aab9934a) )
- ROM_CONTINUE( 0x10000, 0x14000)
+ ROM_REGION( 0x20000, "maincpu", 0 ) /* Main Z80 Code */
+ ROM_LOAD( "8.bin", 0x00000, 0x20000, CRC(3b92020f) SHA1(edc15c5b712774dad1685ce9a94e4290aab9934a) )
- ROM_REGION( 0x24000, "audiocpu", 0 ) /* Sound Z80 Code */
- ROM_LOAD( "9.bin", 0x00000, 0x0c000, CRC(6fd60be9) SHA1(87622dc2967842629e90a02b415bec86cc26cbc7) ) // yunsung8.08
- ROM_CONTINUE( 0x10000, 0x14000)
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* Sound Z80 Code */
+ ROM_LOAD( "9.bin", 0x00000, 0x20000, CRC(6fd60be9) SHA1(87622dc2967842629e90a02b415bec86cc26cbc7) ) // yunsung8.08
- ROM_REGION( 0x200000, "gfx1", 0 ) /* Background */
+ ROM_REGION( 0x200000, "bgfx", 0 ) /* Background */
ROM_LOAD( "1.bin", 0x000000, 0x80000, CRC(0a100d2b) SHA1(c36a2489748c8ac7b6d7457ad09d8153707c85be) ) // yunsung8.04
ROM_LOAD( "2.bin", 0x080000, 0x80000, CRC(c8cb0373) SHA1(339c4e0fef44da3cab615e07dc8739bd925ebf28) ) // yunsung8.03
ROM_LOAD( "3.bin", 0x100000, 0x80000, CRC(09efb8e5) SHA1(684bb5c4b579f8c77e79aab4decbefea495d9474) ) // yunsung8.02
ROM_LOAD( "4.bin", 0x180000, 0x80000, CRC(4590d782) SHA1(af875166207793572b9ecf01bb6a24feba562a96) ) // yunsung8.01
- ROM_REGION( 0x40000, "gfx2", 0 ) /* Text */
+ ROM_REGION( 0x40000, "text", 0 ) /* Text */
ROM_LOAD( "5.bin", 0x00000, 0x20000, CRC(11b99819) SHA1(4b20feea227cefd2e905601d934538a13ba6685b) ) // only first $8000 bytes != 0
ROM_LOAD( "6.bin", 0x20000, 0x20000, CRC(361a864c) SHA1(e0bb78b49fc3d461d6ac46ad97a9d04112783132) ) // only first $8000 bytes != 0
ROM_END
@@ -660,42 +650,38 @@ Sound CPU: Z80A
***************************************************************************/
ROM_START( cannball )
- ROM_REGION( 0x24000, "maincpu", 0 ) /* Main Z80 Code */
- ROM_LOAD( "cannball.07", 0x00000, 0x0c000, CRC(17db56b4) SHA1(032e3dbde0b0e315dcb5f2b31f57e75e78818f2d) )
- ROM_CONTINUE( 0x10000, 0x14000)
+ ROM_REGION( 0x20000, "maincpu", 0 ) /* Main Z80 Code */
+ ROM_LOAD( "cannball.07", 0x00000, 0x20000, CRC(17db56b4) SHA1(032e3dbde0b0e315dcb5f2b31f57e75e78818f2d) )
- ROM_REGION( 0x24000, "audiocpu", 0 ) /* Sound Z80 Code */
- ROM_LOAD( "cannball.08", 0x00000, 0x0c000, CRC(11403875) SHA1(9f583bc4f08e7aef3fd0f3fe3f31cce1d226641a) )
- ROM_CONTINUE( 0x10000, 0x14000)
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* Sound Z80 Code */
+ ROM_LOAD( "cannball.08", 0x00000, 0x20000, CRC(11403875) SHA1(9f583bc4f08e7aef3fd0f3fe3f31cce1d226641a) )
- ROM_REGION( 0x100000, "gfx1", 0 ) /* Background */
+ ROM_REGION( 0x100000, "bgfx", 0 ) /* Background */
ROM_LOAD( "cannball.01", 0x000000, 0x40000, CRC(2d7785e4) SHA1(9911354c0be192506f8bfca3e85ede0bbc4828d5) )
ROM_LOAD( "cannball.02", 0x040000, 0x40000, CRC(24df387e) SHA1(5f4afe11feb367ca3b3c4f5eb37a6b6c4edb83bb) )
ROM_LOAD( "cannball.03", 0x080000, 0x40000, CRC(4d62f192) SHA1(8c60b9b4b36c13c2d145c49413580a10e71eb283) )
ROM_LOAD( "cannball.04", 0x0c0000, 0x40000, CRC(37cf8b12) SHA1(f93df8e0babe2c4ec996aa3c2a48bf40a5a02e62) )
- ROM_REGION( 0x40000, "gfx2", 0 ) /* Text */
+ ROM_REGION( 0x40000, "text", 0 ) /* Text */
ROM_LOAD( "cannball.05", 0x00000, 0x20000, CRC(87c1f1fa) SHA1(dbc568d2133734e41b69fd8d18b76531648b32ef) )
ROM_LOAD( "cannball.06", 0x20000, 0x20000, CRC(e722bee8) SHA1(3aed7df9df81a6776b6bf2f5b167965b0d689216) )
ROM_END
ROM_START( cannballv )
- ROM_REGION( 0x24000, "maincpu", 0 ) /* Main Z80 Code */
- ROM_LOAD( "yunsung1", 0x00000, 0x0c000, CRC(f7398b0d) SHA1(f2cdb9c4662cd325376d25ae9611f689605042db) )
- ROM_CONTINUE( 0x10000, 0x14000)
+ ROM_REGION( 0x20000, "maincpu", 0 ) /* Main Z80 Code */
+ ROM_LOAD( "yunsung1", 0x00000, 0x20000, CRC(f7398b0d) SHA1(f2cdb9c4662cd325376d25ae9611f689605042db) )
- ROM_REGION( 0x24000, "audiocpu", 0 ) /* Sound Z80 Code */
- ROM_LOAD( "yunsung8", 0x00000, 0x0c000, CRC(11403875) SHA1(9f583bc4f08e7aef3fd0f3fe3f31cce1d226641a) )
- ROM_CONTINUE( 0x10000, 0x14000)
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* Sound Z80 Code */
+ ROM_LOAD( "yunsung8", 0x00000, 0x20000, CRC(11403875) SHA1(9f583bc4f08e7aef3fd0f3fe3f31cce1d226641a) )
- ROM_REGION( 0x200000, "gfx1", 0 ) /* Background */
+ ROM_REGION( 0x200000, "bgfx", 0 ) /* Background */
ROM_LOAD( "yunsung7", 0x000000, 0x80000, CRC(a5f1a648) SHA1(7a5bf5bc0ad257ccb12104512e98dfb3525babfc) )
ROM_LOAD( "yunsung6", 0x080000, 0x80000, CRC(8baa686e) SHA1(831c3e2864d262bf5429dca6653c83dc976e610e) )
ROM_LOAD( "yunsung5", 0x100000, 0x80000, CRC(a7f2ce51) SHA1(81632aca067f2c8c45488266c4489d9af24fb552) )
ROM_LOAD( "yunsung4", 0x180000, 0x80000, CRC(74bef793) SHA1(6208580ce747cec3d410ce3c71e07aa570b9121d) )
- ROM_REGION( 0x40000, "gfx2", 0 ) /* Text */
+ ROM_REGION( 0x40000, "text", 0 ) /* Text */
ROM_LOAD( "yunsung3", 0x00000, 0x20000, CRC(8217abbe) SHA1(1a459a816a1aa5b68858e39c4a21bd78ee78dcab) )
ROM_LOAD( "yunsung2", 0x20000, 0x20000, CRC(76de1045) SHA1(a3845ee1874e6ec0ce26e6e73e4643243779e70d) )
ROM_END
@@ -722,22 +708,20 @@ they jumpered the first position)
***************************************************************************/
ROM_START( rocktris )
- ROM_REGION( 0x24000, "maincpu", 0 ) /* Main Z80 Code */
- ROM_LOAD( "cpu.bin", 0x00000, 0x0c000, CRC(46e3b79c) SHA1(81a587b9f986c4e39b1888ec6ed6b86d1469b9a0) )
- ROM_CONTINUE( 0x10000, 0x14000)
+ ROM_REGION( 0x20000, "maincpu", 0 ) /* Main Z80 Code */
+ ROM_LOAD( "cpu.bin", 0x00000, 0x20000, CRC(46e3b79c) SHA1(81a587b9f986c4e39b1888ec6ed6b86d1469b9a0) )
- ROM_REGION( 0x24000, "audiocpu", 0 ) /* Sound Z80 Code */
- ROM_LOAD( "cpu2.bin", 0x00000, 0x0c000, CRC(3a78a4cf) SHA1(f643c7a217cbb71f3a03f1f4a16545c546332819) )
- ROM_CONTINUE( 0x10000, 0x14000)
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* Sound Z80 Code */
+ ROM_LOAD( "cpu2.bin", 0x00000, 0x20000, CRC(3a78a4cf) SHA1(f643c7a217cbb71f3a03f1f4a16545c546332819) )
- ROM_REGION( 0x200000, "gfx1", 0 ) /* Background */
+ ROM_REGION( 0x200000, "bgfx", 0 ) /* Background */
ROM_LOAD( "gfx4.bin", 0x000000, 0x80000, CRC(abb49cac) SHA1(e2d766e950df398a8ec8b6888e128ffc3bdf1ce9) )
ROM_LOAD( "gfx3.bin", 0x080000, 0x80000, CRC(70a6ad52) SHA1(04cd58d3f885dd7c2fb1061f93d3ae3a418ad762) )
ROM_LOAD( "gfx2.bin", 0x100000, 0x80000, CRC(fcc9ec97) SHA1(1f09452988e3fa976b233e3b458c7a60977b76aa) )
ROM_LOAD( "gfx1.bin", 0x180000, 0x80000, CRC(4295034d) SHA1(9bdbbcdb46eb659a13b77c5bb26c9d8ad43731a7) )
- ROM_REGION( 0x40000, "gfx2", 0 ) /* Text */
+ ROM_REGION( 0x40000, "text", 0 ) /* Text */
ROM_LOAD( "gfx5.bin", 0x00000, 0x20000, CRC(058ee379) SHA1(57088bb02c56212979b9119b773eedc31af17e50) )
ROM_LOAD( "gfx6.bin", 0x20000, 0x20000, CRC(593cbd39) SHA1(4d60b5811118f3f22f6f3b300a4daec158456b72) )
ROM_END
diff --git a/src/mame/drivers/zapcomputer.cpp b/src/mame/drivers/zapcomputer.cpp
index 2b5be700b8d..ad6791e68c0 100644
--- a/src/mame/drivers/zapcomputer.cpp
+++ b/src/mame/drivers/zapcomputer.cpp
@@ -92,13 +92,13 @@ READ8_MEMBER( zapcomp_state::keyboard_r )
UINT8 special = ioport("X1")->read();
UINT16 hex_keys = ioport("X0")->read();
- if BIT(special, 2) /* "SHIFT" key is pressed */
+ if (BIT(special, 2)) /* "SHIFT" key is pressed */
retval |= 0x40; /* turn on the SHIFT bit but DO NOT turn on the strobe bit */
- if BIT(special, 1) /* "NEXT" key is pressed */
+ if (BIT(special, 1)) /* "NEXT" key is pressed */
retval |= 0xA0; /* turn on the strobe & NEXT bits */
- if BIT(special, 0) /* "EXEC" key is pressed */
+ if (BIT(special, 0)) /* "EXEC" key is pressed */
retval |= 0x90; /* turn on the strobe & EXEC bit */
for (int i=0; i<16; i++)
diff --git a/src/mame/drivers/zrt80.cpp b/src/mame/drivers/zrt80.cpp
index ed0cc48ea07..4166113748e 100644
--- a/src/mame/drivers/zrt80.cpp
+++ b/src/mame/drivers/zrt80.cpp
@@ -229,7 +229,7 @@ MC6845_UPDATE_ROW( zrt80_state::crtc_update_row )
mem = (ma + x) & 0x1fff;
chr = m_p_videoram[mem];
- if BIT(chr, 7)
+ if (BIT(chr, 7))
{
inv ^= 0xff;
chr &= 0x7f;
diff --git a/src/mame/includes/cave.h b/src/mame/includes/cave.h
index 187444027fa..cc0533ce479 100644
--- a/src/mame/includes/cave.h
+++ b/src/mame/includes/cave.h
@@ -216,6 +216,7 @@ public:
TILE_GET_INFO_MEMBER(get_tile_info_3);
DECLARE_MACHINE_START(cave);
DECLARE_MACHINE_RESET(cave);
+ DECLARE_MACHINE_RESET(sailormn);
DECLARE_VIDEO_START(cave_2_layers);
DECLARE_PALETTE_INIT(dfeveron);
DECLARE_VIDEO_START(cave_3_layers);
@@ -241,6 +242,7 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(cave_vblank_start_left);
TIMER_DEVICE_CALLBACK_MEMBER(cave_vblank_start_right);
TIMER_DEVICE_CALLBACK_MEMBER(timer_lev2_cb);
+ TIMER_DEVICE_CALLBACK_MEMBER(sailormn_startup);
void cave_get_sprite_info(int chip);
void cave_get_sprite_info_all();
void sailormn_tilebank_w(int bank);
diff --git a/src/mame/includes/compis.h b/src/mame/includes/compis.h
deleted file mode 100644
index d8a06b09757..00000000000
--- a/src/mame/includes/compis.h
+++ /dev/null
@@ -1,133 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Curt Coder
-// thanks-to:Per Ola Ingvarsson, Tomas Karlsson
-/*****************************************************************************
- *
- * includes/compis.h
- *
- * machine driver header
- *
- ****************************************************************************/
-
-#pragma once
-
-#ifndef __COMPIS__
-#define __COMPIS__
-
-#include "emu.h"
-#include "bus/isbx/isbx.h"
-#include "cpu/i86/i186.h"
-#include "cpu/mcs48/mcs48.h"
-#include "imagedev/cassette.h"
-#include "machine/compiskb.h"
-#include "bus/centronics/ctronics.h"
-#include "machine/i8251.h"
-#include "machine/i8255.h"
-#include "machine/i80130.h"
-#include "machine/mm58274c.h"
-#include "machine/pic8259.h"
-#include "machine/pit8253.h"
-#include "machine/ram.h"
-#include "machine/z80dart.h"
-#include "video/upd7220.h"
-
-#define I80186_TAG "ic1"
-#define I80130_TAG "ic15"
-#define I8251A_TAG "ic59"
-#define I8253_TAG "ic60"
-#define I8274_TAG "ic65"
-#define MM58174A_TAG "ic66"
-#define I8255_TAG "ic69"
-#define RS232_A_TAG "rs232a"
-#define RS232_B_TAG "rs232b"
-#define CASSETTE_TAG "cassette"
-#define CENTRONICS_TAG "centronics"
-#define ISBX_0_TAG "isbx0"
-#define ISBX_1_TAG "isbx1"
-#define SCREEN_TAG "screen"
-#define COMPIS_KEYBOARD_TAG "compiskb"
-
-class compis_state : public driver_device
-{
-public:
- compis_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, I80186_TAG),
- m_osp(*this, I80130_TAG),
- m_pit(*this, I8253_TAG),
- m_ppi(*this, I8255_TAG),
- m_mpsc(*this, I8274_TAG),
- m_centronics(*this, CENTRONICS_TAG),
- m_uart(*this, I8251A_TAG),
- m_rtc(*this, MM58174A_TAG),
- m_crtc(*this, "upd7220"),
- m_palette(*this, "palette"),
- m_cassette(*this, CASSETTE_TAG),
- m_isbx0(*this, ISBX_0_TAG),
- m_isbx1(*this, ISBX_1_TAG),
- m_ram(*this, RAM_TAG),
- m_video_ram(*this, "video_ram"),
- m_s8(*this, "S8")
- { }
-
- required_device m_maincpu;
- required_device m_osp;
- required_device m_pit;
- required_device m_ppi;
- required_device m_mpsc;
- required_device m_centronics;
- required_device m_uart;
- required_device m_rtc;
- required_device m_crtc;
- required_device m_palette;
- required_device m_cassette;
- required_device m_isbx0;
- required_device m_isbx1;
- required_device m_ram;
- required_shared_ptr m_video_ram;
- required_ioport m_s8;
-
- virtual void machine_start() override;
- virtual void machine_reset() override;
-
- DECLARE_WRITE8_MEMBER( tape_mon_w );
- DECLARE_READ16_MEMBER( isbx0_tdma_r );
- DECLARE_WRITE16_MEMBER( isbx0_tdma_w );
- DECLARE_READ16_MEMBER( isbx1_tdma_r );
- DECLARE_WRITE16_MEMBER( isbx1_tdma_w );
- DECLARE_READ16_MEMBER( isbx0_cs_r );
- DECLARE_WRITE16_MEMBER( isbx0_cs_w );
- DECLARE_READ16_MEMBER( isbx0_dack_r );
- DECLARE_WRITE16_MEMBER( isbx0_dack_w );
- DECLARE_READ16_MEMBER( isbx1_cs_r );
- DECLARE_WRITE16_MEMBER( isbx1_cs_w );
- DECLARE_READ16_MEMBER( isbx1_dack_r );
- DECLARE_WRITE16_MEMBER( isbx1_dack_w );
-
- DECLARE_READ8_MEMBER( compis_irq_callback );
-
- DECLARE_READ8_MEMBER( ppi_pb_r );
- DECLARE_WRITE8_MEMBER( ppi_pc_w );
-
- DECLARE_WRITE_LINE_MEMBER( tmr0_w );
- DECLARE_WRITE_LINE_MEMBER( tmr1_w );
- DECLARE_WRITE_LINE_MEMBER( tmr2_w );
- DECLARE_WRITE_LINE_MEMBER( tmr5_w );
-
- TIMER_DEVICE_CALLBACK_MEMBER( tape_tick );
-
- int m_centronics_busy;
- int m_centronics_select;
-
- DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
- DECLARE_WRITE_LINE_MEMBER(write_centronics_select);
-
- int m_tmr0;
- int m_unk_video;
-
- UPD7220_DISPLAY_PIXELS_MEMBER( hgdc_display_pixels );
-};
-
-
-
-#endif
diff --git a/src/mame/includes/gba.h b/src/mame/includes/gba.h
index a248140012a..efb8406778d 100644
--- a/src/mame/includes/gba.h
+++ b/src/mame/includes/gba.h
@@ -7,134 +7,15 @@
#include "machine/intelfsh.h"
#include "bus/gba/gba_slot.h"
#include "sound/dac.h"
+#include "video/gba_lcd.h"
-#define DISPSTAT_VBL 0x0001
-#define DISPSTAT_HBL 0x0002
-#define DISPSTAT_VCNT 0x0004
-#define DISPSTAT_VBL_IRQ_EN 0x0008
-#define DISPSTAT_HBL_IRQ_EN 0x0010
-#define DISPSTAT_VCNT_IRQ_EN 0x0020
-#define DISPSTAT_VCNT_VALUE 0xff00
-#define INT_VBL 0x0001
-#define INT_HBL 0x0002
-#define INT_VCNT 0x0004
-#define INT_TM0_OVERFLOW 0x0008
-#define INT_TM1_OVERFLOW 0x0010
-#define INT_TM2_OVERFLOW 0x0020
-#define INT_TM3_OVERFLOW 0x0040
-#define INT_SIO 0x0080
-#define INT_DMA0 0x0100
-#define INT_DMA1 0x0200
-#define INT_DMA2 0x0400
-#define INT_DMA3 0x0800
-#define INT_KEYPAD 0x1000
-#define INT_GAMEPAK 0x2000
-
-#define DISPCNT_MODE 0x0007
-#define DISPCNT_FRAMESEL 0x0010
-#define DISPCNT_HBL_FREE 0x0020
-
-#define DISPCNT_VRAM_MAP 0x0040
-#define DISPCNT_VRAM_MAP_2D 0x0000
-#define DISPCNT_VRAM_MAP_1D 0x0040
-
-#define DISPCNT_BLANK 0x0080
-#define DISPCNT_BG0_EN 0x0100
-#define DISPCNT_BG1_EN 0x0200
-#define DISPCNT_BG2_EN 0x0400
-#define DISPCNT_BG3_EN 0x0800
-#define DISPCNT_OBJ_EN 0x1000
-#define DISPCNT_WIN0_EN 0x2000
-#define DISPCNT_WIN1_EN 0x4000
-#define DISPCNT_OBJWIN_EN 0x8000
-
-#define OBJ_Y_COORD 0x00ff
-#define OBJ_ROZMODE 0x0300
-#define OBJ_ROZMODE_NONE 0x0000
-#define OBJ_ROZMODE_ROZ 0x0100
-#define OBJ_ROZMODE_DISABLE 0x0200
-#define OBJ_ROZMODE_DBLROZ 0x0300
-
-#define OBJ_MODE 0x0c00
-#define OBJ_MODE_NORMAL 0x0000
-#define OBJ_MODE_ALPHA 0x0400
-#define OBJ_MODE_WINDOW 0x0800
-#define OBJ_MODE_UNDEFINED 0x0c00
-
-#define OBJ_MOSAIC 0x1000
-
-#define OBJ_PALMODE 0x2000
-#define OBJ_PALMODE_16 0x0000
-#define OBJ_PALMODE_256 0x2000
-
-#define OBJ_SHAPE 0xc000
-#define OBJ_SHAPE_SQR 0x0000
-#define OBJ_SHAPE_HORIZ 0x4000
-#define OBJ_SHAPE_VERT 0x8000
-
-#define OBJ_X_COORD 0x01ff
-#define OBJ_SCALE_PARAM 0x3e00
-#define OBJ_SCALE_PARAM_SHIFT 9
-#define OBJ_HFLIP 0x1000
-#define OBJ_VFLIP 0x2000
-#define OBJ_SIZE 0xc000
-#define OBJ_SIZE_8 0x0000
-#define OBJ_SIZE_16 0x4000
-#define OBJ_SIZE_32 0x8000
-#define OBJ_SIZE_64 0xc000
-
-#define OBJ_TILENUM 0x03ff
-#define OBJ_PRIORITY 0x0c00
-#define OBJ_PRIORITY_SHIFT 10
-#define OBJ_PALNUM 0xf000
-#define OBJ_PALNUM_SHIFT 12
-
-#define BGCNT_SCREENSIZE 0xc000
-#define BGCNT_SCREENSIZE_SHIFT 14
-#define BGCNT_PALETTESET_WRAP 0x2000
-#define BGCNT_SCREENBASE 0x1f00
-#define BGCNT_SCREENBASE_SHIFT 8
-#define BGCNT_PALETTE256 0x0080
-#define BGCNT_MOSAIC 0x0040
-#define BGCNT_CHARBASE 0x003c
-#define BGCNT_CHARBASE_SHIFT 2
-#define BGCNT_PRIORITY 0x0003
-
-#define BLDCNT_BG0TP1 0x0001
-#define BLDCNT_BG1TP1 0x0002
-#define BLDCNT_BG2TP1 0x0004
-#define BLDCNT_BG3TP1 0x0008
-#define BLDCNT_OBJTP1 0x0010
-#define BLDCNT_BDTP1 0x0020
-#define BLDCNT_SFX 0x00c0
-#define BLDCNT_SFX_NONE 0x0000
-#define BLDCNT_SFX_ALPHA 0x0040
-#define BLDCNT_SFX_LIGHTEN 0x0080
-#define BLDCNT_SFX_DARKEN 0x00c0
-#define BLDCNT_BG0TP2 0x0100
-#define BLDCNT_BG1TP2 0x0200
-#define BLDCNT_BG2TP2 0x0400
-#define BLDCNT_BG3TP2 0x0800
-#define BLDCNT_OBJTP2 0x1000
-#define BLDCNT_BDTP2 0x2000
-#define BLDCNT_TP2_SHIFT 8
-
-#define TILEOBJ_TILE 0x03ff
-#define TILEOBJ_HFLIP 0x0400
-#define TILEOBJ_VFLIP 0x0800
-#define TILEOBJ_PALETTE 0xf000
-
-/* driver state */
-class gba_state : public driver_device
+class gba_state : public driver_device, protected gba_registers<(0x400 - 0x060) / 4, 0x060>
{
public:
gba_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_gba_pram(*this, "gba_pram"),
- m_gba_vram(*this, "gba_vram"),
- m_gba_oam(*this, "gba_oam"),
m_ladac(*this, "direct_a_left"),
m_radac(*this, "direct_a_right"),
m_lbdac(*this, "direct_b_left"),
@@ -147,9 +28,6 @@ public:
{ }
required_device m_maincpu;
- required_shared_ptr m_gba_pram;
- required_shared_ptr m_gba_vram;
- required_shared_ptr m_gba_oam;
required_device m_ladac;
required_device m_radac;
required_device m_lbdac;
@@ -158,57 +36,15 @@ public:
required_device