mirror of
https://github.com/holub/mame
synced 2025-06-03 11:26:56 +03:00
Plug and Play work (#6396)
* gcm394 / paccon - use screen resolution to determine tilemap limits nstead of hardcoding it (nw) * debugging (nw) * tweaks to video (nw) * new NOT WORKING ---- Super Game 36-in-1 (TimeTop SuperGame) [JP_Ronny, TeamEurope] (actually seems playable, but there are some details I want to verify / figure out before promoting it) * map 'X' for timetp36 (nw) * extra io notes (nw) * confirm difficulty mapping (nw) * set to PAL timings (nw) * new NOT WORKING ---- Digi Makeover (Girl Tech) [Sean Riddle, Clawgrip] * move digimakeover to its own driver (nw) * hack to force IRQ on (nw) * alt mode for rad_digi (nw) * some buton notes (nw) * flips for rallyx (nw) * make some IRQ code closer to spg2xx (nw) * improve raster for Xevious (nw) * no macro (nw) * new NOT WORKING ---- Gormiti Game Arena (Spain) [Sean Riddle, Clawgrip] * new NOT WORKING ---- MobiGo (Spain) [Sean Riddle, Clawgrip] * don't use smartfp inputs (nw)
This commit is contained in:
parent
80d9962aad
commit
c46e3754ba
@ -3835,6 +3835,7 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/spg110.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/spg2xx.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/spg2xx_skannerztv.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/spg2xx_digimake.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/spg2xx_jakks.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/spg2xx_jakks_gkr.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/spg2xx_jakks_tvtouch.cpp",
|
||||
|
@ -225,6 +225,7 @@ void spg2xx_video_device::draw_bitmap(const rectangle& cliprect, uint32_t scanli
|
||||
|
||||
//printf("draw bitmap bases %04x %04x\n", tilemap, palette_map);
|
||||
|
||||
//uint32_t xscroll = regs[0];
|
||||
uint32_t yscroll = regs[1];
|
||||
|
||||
int realline = (scanline + yscroll) & 0xff;
|
||||
@ -243,30 +244,47 @@ void spg2xx_video_device::draw_bitmap(const rectangle& cliprect, uint32_t scanli
|
||||
palette &= 0x00ff;
|
||||
|
||||
//const int linewidth = 320 / 2;
|
||||
int sourcebase = tile | (palette << 16); // this is correct for Texas Hold'em - TODO: get from a register?
|
||||
int sourcebase = tile | (palette << 16);
|
||||
|
||||
uint32_t* dest = &m_screenbuf[320 * scanline];
|
||||
|
||||
for (int i = 0; i < 320 / 2; i++)
|
||||
uint32_t ctrl = regs[3];
|
||||
|
||||
if (ctrl & 0x80) // HiColor mode (rad_digi)
|
||||
{
|
||||
uint8_t palette_entry;
|
||||
uint16_t color;
|
||||
const uint16_t data = space.read_word(sourcebase + i);
|
||||
|
||||
palette_entry = (data & 0x00ff);
|
||||
color = m_paletteram[palette_entry];
|
||||
|
||||
if (!(color & 0x8000))
|
||||
for (int i = 0; i < 320; i++)
|
||||
{
|
||||
dest[(i * 2)+0] = m_rgb555_to_rgb888[color & 0x7fff];
|
||||
const uint16_t data = space.read_word(sourcebase + i);
|
||||
|
||||
if (!(data & 0x8000))
|
||||
{
|
||||
dest[i] = m_rgb555_to_rgb888[data & 0x7fff];
|
||||
}
|
||||
}
|
||||
|
||||
palette_entry = (data & 0xff00) >> 8;
|
||||
color = m_paletteram[palette_entry];
|
||||
|
||||
if (!(color & 0x8000))
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < 320 / 2; i++)
|
||||
{
|
||||
dest[(i * 2)+1] = m_rgb555_to_rgb888[color & 0x7fff];
|
||||
uint8_t palette_entry;
|
||||
uint16_t color;
|
||||
const uint16_t data = space.read_word(sourcebase + i);
|
||||
|
||||
palette_entry = (data & 0x00ff);
|
||||
color = m_paletteram[palette_entry];
|
||||
|
||||
if (!(color & 0x8000))
|
||||
{
|
||||
dest[(i * 2) + 0] = m_rgb555_to_rgb888[color & 0x7fff];
|
||||
}
|
||||
|
||||
palette_entry = (data & 0xff00) >> 8;
|
||||
color = m_paletteram[palette_entry];
|
||||
|
||||
if (!(color & 0x8000))
|
||||
{
|
||||
dest[(i * 2) + 1] = m_rgb555_to_rgb888[color & 0x7fff];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -317,21 +335,22 @@ void spg2xx_video_device::draw_page(const rectangle &cliprect, uint32_t scanline
|
||||
uint32_t yy = ((tile_h * y0 - yscroll + 0x10) & 0xff) - 0x10;
|
||||
uint32_t xx = (tile_w * x0 - xscroll) & 0x1ff;
|
||||
uint16_t tile = (ctrl & PAGE_WALLPAPER_MASK) ? space.read_word(tilemap) : space.read_word(tilemap + tile_address);
|
||||
uint16_t palette = 0;
|
||||
|
||||
if (!tile)
|
||||
continue;
|
||||
|
||||
palette = (ctrl & PAGE_WALLPAPER_MASK) ? space.read_word(palette_map) : space.read_word(palette_map + tile_address / 2);
|
||||
if (x0 & 1)
|
||||
palette >>= 8;
|
||||
else
|
||||
palette &= 0x00ff;
|
||||
|
||||
uint32_t tileattr = attr;
|
||||
uint32_t tilectrl = ctrl;
|
||||
if ((ctrl & 2) == 0)
|
||||
{ // -(1) bld(1) flip(2) pal(4)
|
||||
|
||||
uint16_t palette = (ctrl & PAGE_WALLPAPER_MASK) ? space.read_word(palette_map) : space.read_word(palette_map + tile_address / 2);
|
||||
if (x0 & 1)
|
||||
palette >>= 8;
|
||||
else
|
||||
palette &= 0x00ff;
|
||||
|
||||
|
||||
tileattr &= ~0x000c;
|
||||
tileattr |= (palette >> 2) & 0x000c; // flip
|
||||
|
||||
|
@ -152,6 +152,7 @@ void sunplus_gcm394_base_device::trigger_systemm_dma(address_space &space, int c
|
||||
|
||||
address_space& mem = this->space(AS_PROGRAM);
|
||||
source &= 0x0fffffff;
|
||||
length &= 0x0fffffff; // gormiti
|
||||
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
@ -662,6 +663,10 @@ void sunplus_gcm394_base_device::base_internal_map(address_map &map)
|
||||
map(0x00702e, 0x00702e).rw(m_spg_video, FUNC(gcm394_base_video_device::tmap2_tilebase_msb_r), FUNC(gcm394_base_video_device::tmap2_tilebase_msb_w)); // written with other tmap2 regs (roz layer or line layer?)
|
||||
map(0x00702f, 0x00702f).rw(m_spg_video, FUNC(gcm394_base_video_device::tmap3_tilebase_msb_r), FUNC(gcm394_base_video_device::tmap3_tilebase_msb_w)); // written with other tmap3 regs (roz layer or line layer?)
|
||||
|
||||
map(0x007036, 0x007036).w(m_spg_video, FUNC(gcm394_base_video_device::split_irq_xpos_w));
|
||||
map(0x007037, 0x007037).w(m_spg_video, FUNC(gcm394_base_video_device::split_irq_ypos_w));
|
||||
|
||||
|
||||
map(0x007030, 0x007030).rw(m_spg_video, FUNC(gcm394_base_video_device::video_7030_brightness_r), FUNC(gcm394_base_video_device::video_7030_brightness_w));
|
||||
map(0x007038, 0x007038).r(m_spg_video, FUNC(gcm394_base_video_device::video_curline_r));
|
||||
map(0x00703a, 0x00703a).rw(m_spg_video, FUNC(gcm394_base_video_device::video_703a_palettebank_r), FUNC(gcm394_base_video_device::video_703a_palettebank_w));
|
||||
|
@ -4,6 +4,8 @@
|
||||
|
||||
SunPlus GCM394-series SoC peripheral emulation (Video)
|
||||
|
||||
This is very similar to spg2xx but with additional features, layers and modes
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
@ -35,7 +37,6 @@ gcm394_base_video_device::gcm394_base_video_device(const machine_config &mconfig
|
||||
m_space_read_cb(*this),
|
||||
m_rowscroll(*this, "^rowscroll"),
|
||||
m_rowzoom(*this, "^rowzoom"),
|
||||
m_global_y_mask(0x1ff),
|
||||
m_pal_displaybank_high(0),
|
||||
m_alt_tile_addressing(0)
|
||||
{
|
||||
@ -218,6 +219,9 @@ void gcm394_base_video_device::device_start()
|
||||
decodegfx(":maincpu");
|
||||
|
||||
m_space_read_cb.resolve_safe(0);
|
||||
|
||||
m_screenpos_timer = timer_alloc(TIMER_SCREENPOS);
|
||||
m_screenpos_timer->adjust(attotime::never);
|
||||
|
||||
|
||||
save_item(NAME(m_screenbuf));
|
||||
@ -241,10 +245,12 @@ void gcm394_base_video_device::device_start()
|
||||
save_item(NAME(m_tmap3_scroll));
|
||||
save_item(NAME(m_707f));
|
||||
save_item(NAME(m_703a_palettebank));
|
||||
save_item(NAME(m_7062));
|
||||
save_item(NAME(m_7063));
|
||||
save_item(NAME(m_video_irq_enable));
|
||||
save_item(NAME(m_video_irq_status));
|
||||
save_item(NAME(m_702a));
|
||||
save_item(NAME(m_7030_brightness));
|
||||
save_item(NAME(m_xirqpos));
|
||||
save_item(NAME(m_yirqpos));
|
||||
save_item(NAME(m_703c_tvcontrol1));
|
||||
save_item(NAME(m_7042_sprite));
|
||||
save_item(NAME(m_7080));
|
||||
@ -262,12 +268,10 @@ void gcm394_base_video_device::device_start()
|
||||
save_item(NAME(m_page2_addr_msb));
|
||||
save_item(NAME(m_page3_addr_lsb));
|
||||
save_item(NAME(m_page3_addr_msb));
|
||||
save_item(NAME(m_video_irq_status));
|
||||
save_item(NAME(m_spriteram));
|
||||
save_item(NAME(m_spriteextra));
|
||||
save_item(NAME(m_paletteram));
|
||||
save_item(NAME(m_maxgfxelement));
|
||||
save_item(NAME(m_global_y_mask));
|
||||
save_item(NAME(m_pal_displaybank_high));
|
||||
save_item(NAME(m_alt_tile_addressing));
|
||||
}
|
||||
@ -302,11 +306,13 @@ void gcm394_base_video_device::device_reset()
|
||||
|
||||
m_707f = 0x0000;
|
||||
m_703a_palettebank = 0x0000;
|
||||
m_7062 = 0x0000;
|
||||
m_7063 = 0x0000;
|
||||
m_video_irq_enable = 0x0000;
|
||||
m_video_irq_status = 0x0000;
|
||||
|
||||
m_702a = 0x0000;
|
||||
m_7030_brightness = 0x0000;
|
||||
m_xirqpos = 0x0000;
|
||||
m_yirqpos = 0x0000;
|
||||
m_703c_tvcontrol1 = 0x0000;
|
||||
|
||||
m_7042_sprite = 0x0000;
|
||||
@ -326,8 +332,6 @@ void gcm394_base_video_device::device_reset()
|
||||
m_videodma_dest = 0x0000;
|
||||
m_videodma_source = 0x0000;
|
||||
|
||||
m_video_irq_status = 0x0000;
|
||||
|
||||
m_sprite_7022_gfxbase_lsb = 0;
|
||||
m_sprite_702d_gfxbase_msb = 0;
|
||||
m_page2_addr_lsb = 0;
|
||||
@ -550,35 +554,35 @@ void gcm394_base_video_device::draw_page(const rectangle &cliprect, uint32_t sca
|
||||
|
||||
int total_width;
|
||||
int use_alt_drawmode = m_alt_tile_addressing;
|
||||
int y_mask = 0;
|
||||
|
||||
// just a guess based on this being set on the higher resolution tilemaps we've seen, could be 100% incorrect register
|
||||
if ((attr_reg >> 14) & 0x2)
|
||||
{
|
||||
total_width = 1024;
|
||||
y_mask = 0x1ff;
|
||||
// use_alt_drawmode = 1; // probably doesn't control this
|
||||
}
|
||||
else
|
||||
{
|
||||
total_width = 512;
|
||||
y_mask = 0xff;
|
||||
// use_alt_drawmode = 0; // probably doesn't control this
|
||||
}
|
||||
|
||||
uint32_t tile_count_x = total_width / tile_w;
|
||||
|
||||
uint32_t bitmap_y = (scanline + yscroll);// &0xff;
|
||||
uint32_t bitmap_y = (scanline + yscroll) & y_mask;
|
||||
uint32_t y0 = bitmap_y / tile_h;
|
||||
uint32_t tile_scanline = bitmap_y % tile_h;
|
||||
uint32_t tile_address = tile_count_x * y0;
|
||||
|
||||
for (uint32_t x0 = 0; x0 < tile_count_x; x0++, tile_address++)
|
||||
{
|
||||
uint32_t yy = ((tile_h * y0 - yscroll + 0x10) & m_global_y_mask) - 0x10;
|
||||
uint32_t xx = (tile_w * x0 - xscroll);// &0x1ff;
|
||||
uint32_t yy = ((tile_h * y0 - yscroll + 0x10) & y_mask) - 0x10;
|
||||
uint32_t xx = (tile_w * x0 - xscroll) & (total_width-1);
|
||||
uint32_t tile = (ctrl_reg & PAGE_WALLPAPER_MASK) ? space.read_word(tilemap) : space.read_word(tilemap + tile_address);
|
||||
|
||||
uint16_t palette = (ctrl_reg & PAGE_WALLPAPER_MASK) ? space.read_word(palette_map) : space.read_word(palette_map + tile_address / 2);
|
||||
if (x0 & 1)
|
||||
palette >>= 8;
|
||||
|
||||
|
||||
if (!tile)
|
||||
@ -588,19 +592,7 @@ void gcm394_base_video_device::draw_page(const rectangle &cliprect, uint32_t sca
|
||||
uint32_t tileattr = attr_reg;
|
||||
uint32_t tilectrl = ctrl_reg;
|
||||
|
||||
#if 0
|
||||
if ((ctrl_reg & 2) == 0)
|
||||
{ // -(1) bld(1) flip(2) pal(4)
|
||||
tileattr &= ~0x000c;
|
||||
tileattr |= (palette >> 2) & 0x000c; // flip
|
||||
|
||||
tileattr &= ~0x0f00;
|
||||
tileattr |= (palette << 8) & 0x0f00; // palette
|
||||
|
||||
tilectrl &= ~0x0100;
|
||||
tilectrl |= (palette << 2) & 0x0100; // blend
|
||||
}
|
||||
#endif
|
||||
bool blend;
|
||||
bool row_scroll;
|
||||
bool flip_x;
|
||||
@ -611,18 +603,41 @@ void gcm394_base_video_device::draw_page(const rectangle &cliprect, uint32_t sca
|
||||
row_scroll = (tilectrl & 0x0010);
|
||||
|
||||
|
||||
if ((ctrl_reg & 2) == 0)
|
||||
if ((ctrl_reg & 2) == 0) // RegSet:0
|
||||
{
|
||||
flip_x = 0;
|
||||
yflipmask = 0;
|
||||
uint16_t palette = (ctrl_reg & PAGE_WALLPAPER_MASK) ? space.read_word(palette_map) : space.read_word(palette_map + tile_address / 2);
|
||||
if (x0 & 1)
|
||||
palette >>= 8;
|
||||
|
||||
flip_x = palette & 0x0010;
|
||||
yflipmask = (palette & 0x0020) ? tile_h - 1 : 0;
|
||||
palette_offset = (palette & 0x0f) << 4;
|
||||
|
||||
//tilectrl &= ~0x0100;
|
||||
//tilectrl |= (palette << 2) & 0x0100; // blend
|
||||
}
|
||||
else // jak_car2 uses this mode for sky ingame
|
||||
else // RegSet:1
|
||||
{
|
||||
flip_x = (tileattr & TILE_X_FLIP);
|
||||
yflipmask = tileattr & TILE_Y_FLIP ? tile_h - 1 : 0;
|
||||
palette_offset = (tileattr & 0x0f00) >> 4;
|
||||
tile |= (palette & 0x0007) << 16;
|
||||
if (m_alt_tile_addressing == 0)
|
||||
{
|
||||
// smartfp needs the attribute table to contain extra tile bits even if regset is 1
|
||||
uint16_t palette = (ctrl_reg & PAGE_WALLPAPER_MASK) ? space.read_word(palette_map) : space.read_word(palette_map + tile_address / 2);
|
||||
if (x0 & 1)
|
||||
palette >>= 8;
|
||||
|
||||
tile |= (palette & 0x0007) << 16;
|
||||
|
||||
flip_x = (tileattr & TILE_X_FLIP);
|
||||
yflipmask = tileattr & TILE_Y_FLIP ? tile_h - 1 : 0;
|
||||
palette_offset = (tileattr & 0x0f00) >> 4;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
flip_x = (tileattr & TILE_X_FLIP);
|
||||
yflipmask = tileattr & TILE_Y_FLIP ? tile_h - 1 : 0;
|
||||
palette_offset = (tileattr & 0x0f00) >> 4;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -800,15 +815,17 @@ uint32_t gcm394_base_video_device::screen_update(screen_device &screen, bitmap_r
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
const int draw_all = 1;
|
||||
|
||||
if (1)
|
||||
{
|
||||
draw_page(cliprect, scanline, i, (m_page0_addr_lsb | (m_page0_addr_msb<<16)), m_tmap0_regs, m_tmap0_scroll);
|
||||
draw_page(cliprect, scanline, i, (m_page1_addr_lsb | (m_page1_addr_msb<<16)), m_tmap1_regs, m_tmap1_scroll);
|
||||
draw_page(cliprect, scanline, i, (m_page2_addr_lsb | (m_page2_addr_msb<<16)), m_tmap2_regs, m_tmap2_scroll);
|
||||
draw_page(cliprect, scanline, i, (m_page3_addr_lsb | (m_page3_addr_msb<<16)), m_tmap3_regs, m_tmap3_scroll);
|
||||
if ((!(machine().input().code_pressed(KEYCODE_Q))) || draw_all) draw_page(cliprect, scanline, i, (m_page0_addr_lsb | (m_page0_addr_msb<<16)), m_tmap0_regs, m_tmap0_scroll);
|
||||
if ((!(machine().input().code_pressed(KEYCODE_W))) || draw_all) draw_page(cliprect, scanline, i, (m_page1_addr_lsb | (m_page1_addr_msb<<16)), m_tmap1_regs, m_tmap1_scroll);
|
||||
if ((!(machine().input().code_pressed(KEYCODE_E))) || draw_all) draw_page(cliprect, scanline, i, (m_page2_addr_lsb | (m_page2_addr_msb<<16)), m_tmap2_regs, m_tmap2_scroll);
|
||||
if ((!(machine().input().code_pressed(KEYCODE_R))) || draw_all) draw_page(cliprect, scanline, i, (m_page3_addr_lsb | (m_page3_addr_msb<<16)), m_tmap3_regs, m_tmap3_scroll);
|
||||
|
||||
}
|
||||
draw_sprites(cliprect, scanline, i);
|
||||
if ((!(machine().input().code_pressed(KEYCODE_T))) || draw_all) draw_sprites(cliprect, scanline, i);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1145,6 +1162,7 @@ WRITE16_MEMBER(gcm394_base_video_device::sprite_7042_extra_w)
|
||||
{
|
||||
LOGMASKED(LOG_GCM394_VIDEO, "%s:gcm394_base_video_device::sprite_7042_extra_w %04x\n", machine().describe_context(), data);
|
||||
m_7042_sprite = data;
|
||||
//popmessage("extra modes %04x\n", data);
|
||||
}
|
||||
|
||||
|
||||
@ -1182,6 +1200,15 @@ WRITE16_MEMBER(gcm394_base_video_device::video_dma_size_trigger_w)
|
||||
}
|
||||
|
||||
m_videodma_size = 0x0000;
|
||||
|
||||
if (m_video_irq_enable & 4)
|
||||
{
|
||||
const uint16_t old = m_video_irq_status;
|
||||
m_video_irq_status |= 4;
|
||||
const uint16_t changed = old ^ (m_video_irq_enable & m_video_irq_status);
|
||||
if (changed)
|
||||
check_video_irq();
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(gcm394_base_video_device::video_dma_unk_w)
|
||||
@ -1272,33 +1299,34 @@ WRITE16_MEMBER(gcm394_base_video_device::video_703a_palettebank_w)
|
||||
READ16_MEMBER(gcm394_base_video_device::videoirq_source_enable_r)
|
||||
{
|
||||
LOGMASKED(LOG_GCM394_VIDEO, "%s:gcm394_base_video_device::videoirq_source_enable_r\n", machine().describe_context());
|
||||
return m_7062;
|
||||
return m_video_irq_enable;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(gcm394_base_video_device::videoirq_source_enable_w)
|
||||
{
|
||||
LOGMASKED(LOG_GCM394_VIDEO, "%s:gcm394_base_video_device::videoirq_source_enable_w %04x\n", machine().describe_context(), data);
|
||||
m_7062 = data;
|
||||
LOGMASKED(LOG_GCM394_VIDEO, "videoirq_source_enable_w: Video IRQ Enable = %04x (DMA:%d, Timing:%d, Blanking:%d)\n", data, BIT(data, 2), BIT(data, 1), BIT(data, 0));
|
||||
const uint16_t old = m_video_irq_enable & m_video_irq_status;
|
||||
m_video_irq_enable = data & 0x0007;
|
||||
const uint16_t changed = old ^ (m_video_irq_enable & m_video_irq_status);
|
||||
if (changed)
|
||||
check_video_irq();
|
||||
}
|
||||
|
||||
READ16_MEMBER(gcm394_base_video_device::video_7063_videoirq_source_r)
|
||||
{
|
||||
LOGMASKED(LOG_GCM394_VIDEO, "%s:gcm394_base_video_device::video_7063_videoirq_source_r\n", machine().describe_context());
|
||||
return machine().rand();
|
||||
return m_video_irq_status;
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER(gcm394_base_video_device::video_7063_videoirq_source_ack_w)
|
||||
{
|
||||
LOGMASKED(LOG_GCM394_VIDEO, "%s:gcm394_base_video_device::video_7063_videoirq_source_ack_w %04x\n", machine().describe_context(), data);
|
||||
m_7063 = data;
|
||||
|
||||
// ack or enable? happens near start of the IRQ
|
||||
if (data & 0x01)
|
||||
{
|
||||
m_video_irq_status &= ~1;
|
||||
LOGMASKED(LOG_GCM394_VIDEO, "video_7063_videoirq_source_ack_w: Video IRQ Acknowledge = %04x\n", data);
|
||||
const uint16_t old = m_video_irq_enable & m_video_irq_status;
|
||||
m_video_irq_status &= ~data;
|
||||
const uint16_t changed = old ^ (m_video_irq_enable & m_video_irq_status);
|
||||
if (changed)
|
||||
check_video_irq();
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(gcm394_base_video_device::video_702a_w)
|
||||
@ -1331,6 +1359,35 @@ WRITE16_MEMBER(gcm394_base_video_device::video_7030_brightness_w)
|
||||
m_7030_brightness = data;
|
||||
}
|
||||
|
||||
void gcm394_base_video_device::update_raster_split_position()
|
||||
{
|
||||
// this might need updating to handle higher res modes
|
||||
LOGMASKED(LOG_GCM394_VIDEO, "update_raster_split_position: %04x,%04x\n", m_yirqpos, m_xirqpos);
|
||||
if (m_xirqpos < 300 && m_yirqpos < 240)
|
||||
{
|
||||
m_screenpos_timer->adjust(m_screen->time_until_pos(m_yirqpos, m_xirqpos));
|
||||
//printf("setting irq timer for y:%d x:%d", m_yirqpos, m_xirqpos);
|
||||
}
|
||||
else
|
||||
m_screenpos_timer->adjust(attotime::never);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(gcm394_base_video_device::split_irq_ypos_w)
|
||||
{
|
||||
LOGMASKED(LOG_GCM394_VIDEO, "%s:split_irq_ypos_w %04x\n", machine().describe_context(), data);
|
||||
|
||||
m_yirqpos = data & 0x1ff;
|
||||
update_raster_split_position();
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(gcm394_base_video_device::split_irq_xpos_w)
|
||||
{
|
||||
LOGMASKED(LOG_GCM394_VIDEO, "%s:split_irq_xpos_w %04x\n", machine().describe_context(), data);
|
||||
|
||||
m_xirqpos = data & 0x1ff;
|
||||
update_raster_split_position();
|
||||
}
|
||||
|
||||
READ16_MEMBER(gcm394_base_video_device::video_703c_tvcontrol1_r)
|
||||
{
|
||||
LOGMASKED(LOG_GCM394_VIDEO, "%s:gcm394_base_video_device::video_703c_tvcontrol1_r\n", machine().describe_context());
|
||||
@ -1457,27 +1514,52 @@ WRITE16_MEMBER(gcm394_base_video_device::video_701e_w)
|
||||
|
||||
void gcm394_base_video_device::check_video_irq()
|
||||
{
|
||||
m_video_irq_cb((m_video_irq_status & 1) ? ASSERT_LINE : CLEAR_LINE);
|
||||
LOGMASKED(LOG_GCM394_VIDEO, "%ssserting Video IRQ (%04x, %04x)\n", (m_video_irq_status & m_video_irq_enable) ? "A" : "Dea", m_video_irq_status, m_video_irq_enable);
|
||||
m_video_irq_cb((m_video_irq_status & m_video_irq_enable) ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(gcm394_base_video_device::vblank)
|
||||
{
|
||||
int i = 0x0001;
|
||||
|
||||
if (!state)
|
||||
{
|
||||
m_video_irq_status &= ~i;
|
||||
m_video_irq_status &= ~1;
|
||||
LOGMASKED(LOG_GCM394_VIDEO, "Setting video IRQ status to %04x\n", m_video_irq_status);
|
||||
check_video_irq();
|
||||
return;
|
||||
}
|
||||
|
||||
//if (m_video_irq_enable & 1)
|
||||
if (m_video_irq_enable & 1)
|
||||
{
|
||||
m_video_irq_status |= i;
|
||||
m_video_irq_status |= 1;
|
||||
LOGMASKED(LOG_GCM394_VIDEO, "Setting video IRQ status to %04x\n", m_video_irq_status);
|
||||
check_video_irq();
|
||||
}
|
||||
}
|
||||
|
||||
void gcm394_base_video_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
{
|
||||
switch (id)
|
||||
{
|
||||
case TIMER_SCREENPOS:
|
||||
{
|
||||
if (m_video_irq_enable & 2)
|
||||
{
|
||||
m_video_irq_status |= 2;
|
||||
check_video_irq();
|
||||
}
|
||||
|
||||
//printf("firing irq timer\n");
|
||||
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
|
||||
// fire again, jak_dbz pinball needs this
|
||||
m_screenpos_timer->adjust(m_screen->time_until_pos(m_yirqpos, m_xirqpos));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static GFXDECODE_START( gfx )
|
||||
GFXDECODE_END
|
||||
|
||||
|
@ -81,6 +81,10 @@ public:
|
||||
|
||||
DECLARE_READ16_MEMBER(video_703a_palettebank_r);
|
||||
DECLARE_WRITE16_MEMBER(video_703a_palettebank_w);
|
||||
|
||||
void update_raster_split_position();
|
||||
DECLARE_WRITE16_MEMBER(split_irq_xpos_w);
|
||||
DECLARE_WRITE16_MEMBER(split_irq_ypos_w);
|
||||
|
||||
DECLARE_READ16_MEMBER(videoirq_source_enable_r);
|
||||
DECLARE_WRITE16_MEMBER(videoirq_source_enable_w);
|
||||
@ -145,6 +149,8 @@ protected:
|
||||
TILE_Y_FLIP = 0x0008
|
||||
};
|
||||
|
||||
static const device_timer_id TIMER_SCREENPOS = 2;
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
|
||||
inline void check_video_irq();
|
||||
|
||||
@ -215,11 +221,13 @@ protected:
|
||||
|
||||
uint16_t m_707f;
|
||||
uint16_t m_703a_palettebank;
|
||||
uint16_t m_7062;
|
||||
uint16_t m_7063;
|
||||
uint16_t m_video_irq_enable;
|
||||
uint16_t m_video_irq_status;
|
||||
|
||||
uint16_t m_702a;
|
||||
uint16_t m_7030_brightness;
|
||||
uint16_t m_xirqpos;
|
||||
uint16_t m_yirqpos;
|
||||
uint16_t m_703c_tvcontrol1;
|
||||
|
||||
uint16_t m_7042_sprite;
|
||||
@ -243,7 +251,7 @@ protected:
|
||||
|
||||
void unk_vid_regs_w(int which, int offset, uint16_t data);
|
||||
|
||||
uint16_t m_video_irq_status;
|
||||
emu_timer *m_screenpos_timer;
|
||||
|
||||
uint16_t m_spriteram[0x400];
|
||||
uint16_t m_spriteextra[0x400];
|
||||
@ -259,8 +267,6 @@ protected:
|
||||
int m_maxgfxelement;
|
||||
void decodegfx(const char* tag);
|
||||
|
||||
int m_global_y_mask;
|
||||
|
||||
int m_pal_displaybank_high;
|
||||
int m_alt_tile_addressing;
|
||||
};
|
||||
|
@ -103,6 +103,7 @@ public:
|
||||
{ }
|
||||
|
||||
void nes_vt_base(machine_config& config);
|
||||
void nes_vt_base_pal(machine_config& config);
|
||||
|
||||
void nes_vt(machine_config& config);
|
||||
|
||||
@ -190,10 +191,10 @@ private:
|
||||
|
||||
/* Extra IO */
|
||||
DECLARE_WRITE8_MEMBER(extra_io_control_w);
|
||||
DECLARE_READ8_MEMBER(extrain_01_r);
|
||||
DECLARE_READ8_MEMBER(extrain_23_r);
|
||||
DECLARE_WRITE8_MEMBER(extraout_01_w);
|
||||
DECLARE_WRITE8_MEMBER(extraout_23_w);
|
||||
virtual DECLARE_READ8_MEMBER(extrain_01_r);
|
||||
virtual DECLARE_READ8_MEMBER(extrain_23_r);
|
||||
virtual DECLARE_WRITE8_MEMBER(extraout_01_w);
|
||||
virtual DECLARE_WRITE8_MEMBER(extraout_23_w);
|
||||
|
||||
|
||||
DECLARE_WRITE8_MEMBER(chr_w);
|
||||
@ -274,6 +275,16 @@ protected:
|
||||
virtual void machine_reset() override;
|
||||
};
|
||||
|
||||
class nes_vt_timetp36_state : public nes_vt_state
|
||||
{
|
||||
public:
|
||||
nes_vt_timetp36_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
nes_vt_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
protected:
|
||||
};
|
||||
|
||||
class nes_vt_hum_state : public nes_vt_state
|
||||
{
|
||||
public:
|
||||
@ -420,8 +431,6 @@ public:
|
||||
m_plunger(*this, "PLUNGER")
|
||||
{ }
|
||||
|
||||
void nes_vt_ablpinb(machine_config& config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
@ -1571,13 +1580,13 @@ READ8_MEMBER(nes_vt_state::extrain_23_r)
|
||||
WRITE8_MEMBER(nes_vt_state::extraout_01_w)
|
||||
{
|
||||
// TODO: use callbacks for this as output can be hooked up to anything
|
||||
logerror("%s: extraout_01_w %02x\n", data);
|
||||
logerror("%s: extraout_01_w %02x\n", machine().describe_context(), data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(nes_vt_state::extraout_23_w)
|
||||
{
|
||||
// TODO: use callbacks for this as output can be hooked up to anything
|
||||
logerror("%s: extraout_23_w %02x\n", data);
|
||||
logerror("%s: extraout_23_w %02x\n", machine().describe_context(), data);
|
||||
}
|
||||
|
||||
READ8_MEMBER(nes_vt_state::rs232flags_region_r)
|
||||
@ -1706,8 +1715,8 @@ void nes_vt_state::nes_vt_map(address_map &map)
|
||||
map(0x4100, 0x410b).r(FUNC(nes_vt_state::vt03_410x_r)).w(FUNC(nes_vt_state::vt03_410x_w));
|
||||
// 0x410c unused
|
||||
map(0x410d, 0x410d).w(FUNC(nes_vt_state::extra_io_control_w));
|
||||
map(0x410e, 0x410e).r(FUNC(nes_vt_state::extrain_01_r));
|
||||
map(0x410f, 0x410f).r(FUNC(nes_vt_state::extrain_23_r));
|
||||
map(0x410e, 0x410e).rw(FUNC(nes_vt_state::extrain_01_r), FUNC(nes_vt_state::extraout_01_w));
|
||||
map(0x410f, 0x410f).rw(FUNC(nes_vt_state::extrain_23_r), FUNC(nes_vt_state::extraout_23_w));
|
||||
// 0x4114 RS232 timer (low)
|
||||
// 0x4115 RS232 timer (high)
|
||||
// 0x4116 unused
|
||||
@ -1924,7 +1933,7 @@ void nes_vt_state::nes_vt_base(machine_config &config)
|
||||
m_apu->add_route(ALL_OUTPUTS, "mono", 0.50);
|
||||
}
|
||||
|
||||
void nes_vt_ablpinb_state::nes_vt_ablpinb(machine_config &config)
|
||||
void nes_vt_state::nes_vt_base_pal(machine_config &config)
|
||||
{
|
||||
nes_vt_base(config);
|
||||
|
||||
@ -1944,6 +1953,8 @@ void nes_vt_ablpinb_state::nes_vt_ablpinb(machine_config &config)
|
||||
m_screen->set_visarea(0 * 8, 32 * 8 - 1, 0 * 8, 30 * 8 - 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void nes_vt_sudoku_state::nes_vt_sudoku(machine_config &config)
|
||||
{
|
||||
nes_vt_base(config);
|
||||
@ -2202,6 +2213,51 @@ static INPUT_PORTS_START( majgnc )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("4")
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( timetp36 )
|
||||
PORT_INCLUDE(nes_vt)
|
||||
|
||||
PORT_MODIFY("IO0")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("A")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("B")
|
||||
|
||||
PORT_MODIFY("IO1") // no 2nd player
|
||||
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
// where does the 'Y' button map? no games use it?
|
||||
PORT_START("EXTRAIN0") // see code at 8084, stored at 0x66
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("X") // used in the NAM-1975 rip-off 'Army Strike'
|
||||
PORT_DIPNAME( 0x02, 0x02, "Unknown Bit 0" )
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
|
||||
PORT_DIPNAME( 0x04, 0x04, "Unknown Bit 1" ) // see code at 808D, stored at 0x68 (never read?)
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x08, 0x08, "Unknown Bit 2" )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
|
||||
PORT_START("EXTRAIN1") // code at 809A reads this in, stored at 0x156
|
||||
PORT_DIPNAME( 0x01, 0x01, "Unknown Bit 3" )
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x06, 0x04, DEF_STR( Difficulty ) ) // 3 possible slider positions
|
||||
PORT_DIPSETTING( 0x06, DEF_STR( Easy ) ) // 3 minutes timer in Bombs Away
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( Normal ) ) // 2 minute 30
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) // 2 minute
|
||||
PORT_DIPSETTING( 0x00, "Hard (duplicate)" )
|
||||
PORT_DIPNAME( 0x08, 0x08, "Unknown Bit 4" ) // ... code at 8064 instead seems to be reading 8 bits with a shifter? stored at 0x67 (investigate)
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
|
||||
PORT_START("EXTRAIN2")
|
||||
PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
PORT_START("EXTRAIN3")
|
||||
PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
void nes_vt_sudoku_state::init_sudoku()
|
||||
{
|
||||
u8 *src = memregion("mainrom")->base();
|
||||
@ -2511,6 +2567,11 @@ ROM_START( megapad )
|
||||
ROM_LOAD( "megapad.bin", 0x00000, 0x200000, CRC(1eb603a8) SHA1(3de6f0620a0db0558daa7fd7ccf08d9d5607a6af) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( timetp36 )
|
||||
ROM_REGION( 0x400000, "mainrom", 0 )
|
||||
ROM_LOAD( "36in1.bin", 0x00000, 0x400000, CRC(e2fb8a6c) SHA1(163d257dd0e6dc19c8fab19cc363ea8be659c40a) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( ddrstraw )
|
||||
ROM_REGION( 0x200000, "mainrom", 0 )
|
||||
ROM_LOAD( "straws-ddr.bin", 0x00000, 0x200000, CRC(ce94e53a) SHA1(10c6970205a4df28086029c0a348225f57bf0cc5) ) // 26LV160 Flash
|
||||
@ -2666,7 +2727,7 @@ CONS( 200?, vtboxing, 0, 0, nes_vt, nes_vt, nes_vt_state, empty_init, "VRT
|
||||
|
||||
// Menu system clearly started off as 'vtpinball' Many elements seem similar to Family Pinball for the Famicom.
|
||||
// 050329 (29th March 2005) date on PCB
|
||||
CONS( 2005, ablpinb, 0, 0, nes_vt_ablpinb, ablpinb, nes_vt_ablpinb_state, empty_init, "Advance Bright Ltd", "Pinball (P8002, ABL TV Game)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
CONS( 2005, ablpinb, 0, 0, nes_vt_base_pal, ablpinb, nes_vt_ablpinb_state, empty_init, "Advance Bright Ltd", "Pinball (P8002, ABL TV Game)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
|
||||
|
||||
// Black pad marked 'SUDOKU' with tails on the S and U characters looping over the logo. Box says "Plug and Play Sudoku"
|
||||
@ -2685,13 +2746,15 @@ CONS( 2006, vgtablet, 0, 0, nes_vt_vg, nes_vt, nes_vt_hh_state, empty_i
|
||||
// There is a 2004 Majesco Frogger "TV game" that appears to contain the same version of Frogger as above but with no other games, so probably fits here.
|
||||
CONS( 2004, majkon, 0, 0, nes_vt_vg_baddma, nes_vt, nes_vt_hh_state, empty_init, "Majesco (licensed from Konami)", "Konami Collector's Series Arcade Advanced", MACHINE_NOT_WORKING ) // raster timing is broken for Frogger, palette issues
|
||||
|
||||
CONS( 200?, majgnc, 0, 0, nes_vt_majgnc, majgnc, nes_vt_majgnc_state, empty_init, "Majesco", "Golden Nugget Casino", MACHINE_NOT_WORKING )
|
||||
CONS( 200?, majgnc, 0, 0, nes_vt_majgnc, majgnc, nes_vt_majgnc_state, empty_init, "Majesco", "Golden Nugget Casino", MACHINE_NOT_WORKING )
|
||||
|
||||
// small black unit, dpad on left, 4 buttons (A,B,X,Y) on right, Start/Reset/Select in middle, unit text "Sudoku Plug & Play TV Game"
|
||||
CONS( 200?, sudopptv, 0, 0, nes_vt, nes_vt, nes_vt_waixing_state, empty_init, "Smart Planet", "Sudoku Plug & Play TV Game '6 Intelligent Games'", MACHINE_NOT_WORKING )
|
||||
CONS( 200?, sudopptv, 0, 0, nes_vt, nes_vt, nes_vt_waixing_state, empty_init, "Smart Planet", "Sudoku Plug & Play TV Game '6 Intelligent Games'", MACHINE_NOT_WORKING )
|
||||
|
||||
CONS( 200?, megapad, 0, 0, nes_vt, nes_vt, nes_vt_waixing_state, empty_init, "Waixing", "Megapad 31-in-1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Happy Biqi has broken sprites, investigate before promoting
|
||||
CONS( 200?, megapad, 0, 0, nes_vt, nes_vt, nes_vt_waixing_state, empty_init, "Waixing", "Megapad 31-in-1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Happy Biqi has broken sprites, investigate before promoting
|
||||
|
||||
// needs PCM samples, Y button is not mapped (not used by any of the games?)
|
||||
CONS( 200?, timetp36, 0, 0, nes_vt_base_pal, timetp36, nes_vt_timetp36_state, empty_init, "TimeTop", "Super Game 36-in-1 (TimeTop SuperGame) (PAL)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
|
||||
// this is VT09 based
|
||||
// it boots, most games correct, but palette issues in some games still (usually they appear greyscale)
|
||||
|
@ -1119,6 +1119,8 @@ ROM_START( rad_fb2 )
|
||||
ROM_LOAD16_WORD_SWAP( "football2.bin", 0x000000, 0x400000, CRC(96b4f0d2) SHA1(e91f2ac679fb0c026ffe216eb4ab58802f361a17) )
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
ROM_START( rad_crik ) // only released in EU?
|
||||
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "cricket.bin", 0x000000, 0x200000, CRC(6fa0aaa9) SHA1(210d2d4f542181f59127ce2f516d0408dc6de7a8) )
|
||||
|
220
src/mame/drivers/spg2xx_digimake.cpp
Normal file
220
src/mame/drivers/spg2xx_digimake.cpp
Normal file
@ -0,0 +1,220 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Ryan Holtz, David Haywood
|
||||
|
||||
// Digi Makeover - this uses a camrea and touchpad, both currently unsupported
|
||||
// - why do we need a hack to boot?
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/spg2xx.h"
|
||||
#include "machine/nvram.h"
|
||||
|
||||
class spg2xx_game_digimake_state : public spg2xx_game_state
|
||||
{
|
||||
public:
|
||||
spg2xx_game_digimake_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
spg2xx_game_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void digimake(machine_config &config);
|
||||
void mem_map_digi(address_map& map);
|
||||
|
||||
private:
|
||||
virtual DECLARE_WRITE16_MEMBER(portc_w) override;
|
||||
};
|
||||
|
||||
void spg2xx_game_digimake_state::mem_map_digi(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x1fffff).bankr("cartbank");
|
||||
// there is also a write/read on 37FFFF before anything is configured as RAM
|
||||
map(0x380000, 0x3fffff).ram();
|
||||
}
|
||||
static INPUT_PORTS_START( rad_digi ) // some of the inputs seem to act like buttons, others are positional touchpad?
|
||||
PORT_START("P1")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "Used 1" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, "1" )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, "Used 2" )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("6")
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("5")
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("4")
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("3")
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("2")
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("1")
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("P2")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "2" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("P3")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "3" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, "Save" )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, "Something" )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, "Touch?" )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, "Forward" )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, "Back?" )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
void spg2xx_game_digimake_state::digimake(machine_config &config)
|
||||
{
|
||||
SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_digimake_state::mem_map_digi);
|
||||
|
||||
spg2xx_base(config);
|
||||
|
||||
m_maincpu->porta_in().set(FUNC(spg2xx_game_digimake_state::base_porta_r));
|
||||
m_maincpu->portb_in().set(FUNC(spg2xx_game_digimake_state::base_portb_r));
|
||||
m_maincpu->portc_in().set(FUNC(spg2xx_game_digimake_state::base_portc_r));
|
||||
|
||||
m_maincpu->portc_out().set(FUNC(spg2xx_game_digimake_state::portc_w));
|
||||
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(spg2xx_game_digimake_state::portc_w)
|
||||
{
|
||||
logerror("%s: portc_w %04x (%04x) %c %c %c %c | %c %c %c %c | %c %c %c %c | %c %c %c %c \n", machine().describe_context(), data, mem_mask,
|
||||
(mem_mask & 0x8000) ? ((data & 0x8000) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x4000) ? ((data & 0x4000) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x2000) ? ((data & 0x2000) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x1000) ? ((data & 0x1000) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0800) ? ((data & 0x0800) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0400) ? ((data & 0x0400) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0200) ? ((data & 0x0200) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0100) ? ((data & 0x0100) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0080) ? ((data & 0x0080) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0040) ? ((data & 0x0040) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0020) ? ((data & 0x0020) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0010) ? ((data & 0x0010) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0008) ? ((data & 0x0008) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0004) ? ((data & 0x0004) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0002) ? ((data & 0x0002) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0001) ? ((data & 0x0001) ? '1' : '0') : 'x');
|
||||
|
||||
// HACK! force vbl interrupt to be on, I'm guessing some check is failing causing it to remain off otherwise?
|
||||
if (m_maincpu->pc() == 0xaf5a)
|
||||
{
|
||||
address_space& mem = m_maincpu->space(AS_PROGRAM);
|
||||
mem.write_word(0x2862, 0x0003);
|
||||
}
|
||||
}
|
||||
|
||||
ROM_START( rad_digi )
|
||||
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "digimakeover.bin", 0x000000, 0x400000, CRC(bbe60bc2) SHA1(fb0c96d1f35af85d6d0fa76c390e42e2eda301ae) )
|
||||
ROM_END
|
||||
|
||||
|
||||
CONS( 2005, rad_digi, 0, 0, digimake, rad_digi, spg2xx_game_digimake_state, init_crc, "Radica", "Digi Makeover (Girl Tech)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
|
@ -49,6 +49,12 @@
|
||||
|
||||
V.Baby HY27UF081G2A (2048+64) x 64 x 1024
|
||||
|
||||
|
||||
|
||||
Non-emulation bugs (happen on real hardware):
|
||||
paccon: Pac-Man - Bottom set of Power Pills are squashed.
|
||||
Galaga - Incorrect sprite used for left shot in 'Double Ship' mode
|
||||
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
@ -615,6 +621,158 @@ static INPUT_PORTS_START( smartfp )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( gormiti )
|
||||
PORT_START("IN0")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN0" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN1" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("IN2")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN2" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( wrlshunt )
|
||||
PORT_START("IN0")
|
||||
PORT_START("IN1")
|
||||
@ -1138,6 +1296,16 @@ ROM_START( smartfp )
|
||||
ROM_LOAD16_WORD_SWAP("smartfitpark.bin", 0x000000, 0x800000, CRC(ada84507) SHA1(a3a80bf71fae62ebcbf939166a51d29c24504428))
|
||||
ROM_END
|
||||
|
||||
ROM_START( gormiti )
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00)
|
||||
ROM_LOAD16_WORD_SWAP("gormiti.bin", 0x000000, 0x800000, CRC(71b82d41) SHA1(169b35dc7bdd05b7b32176ddf901ace27736cb86) )
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
ROM_START( paccon )
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
@ -1382,6 +1550,10 @@ ROM_END
|
||||
CONS(2009, smartfp, 0, 0, base, smartfp, gcm394_game_state, empty_init, "Fisher-Price", "Fun 2 Learn Smart Fit Park (Spain)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
CONS(200?, tkmag220, 0, 0, tkmag220, tkmag220, tkmag220_game_state, empty_init, "TaiKee", "Mini Arcade Games Console (Family Sport 220-in-1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
// die on this one is 'GCM420'
|
||||
CONS(2013, gormiti, 0, 0, base, gormiti, gcm394_game_state, empty_init, "Giochi Preziosi", "Gormiti Game Arena (Spain)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
|
||||
|
||||
// Fun 2 Learn 3-in-1 SMART SPORTS ?
|
||||
|
||||
// also sold as "Pac-Man Connect & Play 35th Anniversary" (same ROM?)
|
||||
|
@ -130,6 +130,15 @@ ROM_START( mobigo )
|
||||
ROM_LOAD16_WORD_SWAP("mobigo.bin", 0x0000, 0x800000, CRC(49479bad) SHA1(4ee82c7ba13072cf25a34893cf6272f2da5d8928) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( mobigos )
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00)
|
||||
ROM_LOAD16_WORD_SWAP("mobigospanish.bin", 0x0000, 0x200000, CRC(462b4f9d) SHA1(1541152f1a359bc18de4d4f3d5038a954c9a3ad4))
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( mobigo2 )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // doesn't have GPnandnand header in NAND, so bootstrap is likely custom
|
||||
@ -138,5 +147,6 @@ ROM_START( mobigo2 )
|
||||
ROM_LOAD( "mobigo2_bios_ger.bin", 0x00000, 0x8400000, CRC(d5ab613d) SHA1(6fb104057dc3484fa958e2cb20c5dd0c19589f75) ) // SPANSION S34ML01G100TF100
|
||||
ROM_END
|
||||
|
||||
CONS( 200?, mobigo, 0, 0, mobigo, mobigo, mobigo_state, init_mobigo , "VTech", "MobiGo", MACHINE_IS_SKELETON )
|
||||
CONS( 200?, mobigo2, 0, 0, mobigo2, mobigo, mobigo2_state, nand_init840, "VTech", "MobiGo 2 (Germany)", MACHINE_IS_SKELETON )
|
||||
CONS( 200?, mobigo, 0, 0, mobigo, mobigo, mobigo_state, init_mobigo , "VTech", "MobiGo", MACHINE_IS_SKELETON )
|
||||
CONS( 200?, mobigos, mobigo, 0, mobigo, mobigo, mobigo_state, init_mobigo , "VTech", "MobiGo (Spain)", MACHINE_IS_SKELETON )
|
||||
CONS( 200?, mobigo2, 0, 0, mobigo2, mobigo, mobigo2_state, nand_init840, "VTech", "MobiGo 2 (Germany)", MACHINE_IS_SKELETON )
|
||||
|
@ -31436,6 +31436,7 @@ gprnrs16
|
||||
ddrdismx // (c) 2006 Majesco / Konami [(c) 2001 Disney on title screen]
|
||||
ddrstraw // (c) 2006 Majesco / Konami
|
||||
megapad
|
||||
timetp36
|
||||
majkon
|
||||
majgnc
|
||||
sudopptv
|
||||
@ -37121,6 +37122,9 @@ pballpup
|
||||
swclone
|
||||
dreamlss
|
||||
|
||||
@source:spg2xx_digimake.cpp
|
||||
rad_digi
|
||||
|
||||
@source:spg2xx_dreamlife.cpp
|
||||
dreamlif //
|
||||
dsgnwrld
|
||||
@ -37804,6 +37808,7 @@ jak_s500
|
||||
jak_totm
|
||||
jak_ths
|
||||
smartfp // Smart Fit Park
|
||||
gormiti
|
||||
wlsair60 // Wireless Air 60
|
||||
wrlshunt // Wireless: Hunting Video Game System
|
||||
tkmag220 //
|
||||
@ -37821,6 +37826,7 @@ bkrankp
|
||||
|
||||
@source:sunplus_unsp20soc_mobigo.cpp
|
||||
mobigo
|
||||
mobigos
|
||||
mobigo2
|
||||
|
||||
@source:supbtime.cpp
|
||||
|
@ -819,6 +819,7 @@ spg110.cpp
|
||||
spg29x.cpp
|
||||
spg29x_lexibook_jg7425.cpp
|
||||
spg2xx.cpp
|
||||
spg2xx_digimake.cpp
|
||||
spg2xx_dreamlife.cpp
|
||||
spg2xx_ican.cpp
|
||||
spg2xx_jakks.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user