mirror of
https://github.com/holub/mame
synced 2025-04-19 23:12:11 +03:00
Plug and Play work (#6451)
* sh6578 sprite work (nw) * sh6578 masks fewer bits, fixes jewel master and some others (nw) * sprite fixes for sh6578 * new NOT WORKING clones ----- Fun 2 Learn Smart Fit Park (UK) [Sean Riddle, David Haywood] works as well as the Spanish set (mostly playable without sound) * new NOT WORKING ---- OPlayer Mobile Game Console (MGS03-white) (Family Sport 100-in-1) [Sean Riddle, David Haywood] (all games are actually playable, just need to get rid of the low battery indicator and remove some hacks) * notes about some other units (nw) * swap oplayer uppper address lines after discussion with sean (nw) new NOT WORKING --- Denver Game Console GMP-240C 150-in-1 [TeamEurope] some kind of VT? based system, enhanced chipset we don't support tho, bank write is unhandled by the looks of things (nw) * new WORKING machine ---- Technigame Super 4-in-1 Sports (PAL) [Sean Riddle, David Haywood]
This commit is contained in:
parent
c3d6be7a60
commit
2b0c7929a6
@ -123,6 +123,8 @@ ppu2c0x_device::ppu2c0x_device(const machine_config& mconfig, device_type type,
|
||||
m_space_config("videoram", ENDIANNESS_LITTLE, 8, 17, 0, internal_map),
|
||||
m_cpu(*this, finder_base::DUMMY_TAG),
|
||||
m_scanline(0), // reset the scanline count
|
||||
m_videoram_addr_mask(0x3fff),
|
||||
m_global_refresh_mask(0x7fff),
|
||||
m_line_write_increment_large(32),
|
||||
m_paletteram_in_ppuspace(false),
|
||||
m_tile_page(0),
|
||||
@ -803,6 +805,65 @@ void ppu2c0x_device::read_extra_sprite_bits(int sprite_index)
|
||||
// needed for some clones
|
||||
}
|
||||
|
||||
bool ppu2c0x_device::is_spritepixel_opaque(int pixel_data, int color)
|
||||
{
|
||||
if (pixel_data)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
void ppu2c0x_device::draw_sprite_pixel_low(bitmap_rgb32& bitmap, int pixel_data, int pixel, int sprite_xpos, int color, int sprite_index, uint8_t* line_priority)
|
||||
{
|
||||
if (is_spritepixel_opaque(pixel_data, color))
|
||||
{
|
||||
/* has the background (or another sprite) already been drawn here? */
|
||||
if ((sprite_xpos + pixel) < VISIBLE_SCREEN_WIDTH)
|
||||
{
|
||||
if (!line_priority[sprite_xpos + pixel])
|
||||
{
|
||||
/* no, draw */
|
||||
draw_sprite_pixel(sprite_xpos, color, pixel, pixel_data, bitmap);
|
||||
}
|
||||
/* indicate that a sprite was drawn at this location, even if it's not seen */
|
||||
line_priority[sprite_xpos + pixel] |= 0x01;
|
||||
}
|
||||
}
|
||||
|
||||
/* set the "sprite 0 hit" flag if appropriate */
|
||||
if (sprite_index == 0 && (pixel_data & 0x03) && ((sprite_xpos + pixel) < 255) && (line_priority[sprite_xpos + pixel] & 0x02))
|
||||
m_regs[PPU_STATUS] |= PPU_STATUS_SPRITE0_HIT;
|
||||
}
|
||||
|
||||
void ppu2c0x_device::draw_sprite_pixel_high(bitmap_rgb32& bitmap, int pixel_data, int pixel, int sprite_xpos, int color, int sprite_index, uint8_t* line_priority)
|
||||
{
|
||||
if (is_spritepixel_opaque(pixel_data, color))
|
||||
{
|
||||
if ((sprite_xpos + pixel) < VISIBLE_SCREEN_WIDTH)
|
||||
{
|
||||
/* has another sprite been drawn here? */
|
||||
if (!(line_priority[sprite_xpos + pixel] & 0x01))
|
||||
{
|
||||
/* no, draw */
|
||||
draw_sprite_pixel(sprite_xpos, color, pixel, pixel_data, bitmap);
|
||||
line_priority[sprite_xpos + pixel] |= 0x01;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* set the "sprite 0 hit" flag if appropriate */
|
||||
if (sprite_index == 0 && (pixel_data & 0x03) && ((sprite_xpos + pixel) < 255) && (line_priority[sprite_xpos + pixel] & 0x02))
|
||||
m_regs[PPU_STATUS] |= PPU_STATUS_SPRITE0_HIT;
|
||||
}
|
||||
|
||||
int ppu2c0x_device::apply_sprite_pattern_page(int index1, int size)
|
||||
{
|
||||
if (size == 8)
|
||||
index1 += ((m_sprite_page == 0) ? 0 : 0x1000);
|
||||
|
||||
return index1;
|
||||
}
|
||||
|
||||
void ppu2c0x_device::draw_sprites(uint8_t* line_priority)
|
||||
{
|
||||
bitmap_rgb32& bitmap = *m_bitmap;
|
||||
@ -881,8 +942,8 @@ void ppu2c0x_device::draw_sprites(uint8_t* line_priority)
|
||||
}
|
||||
|
||||
index1 = tile * 16;
|
||||
if (size == 8)
|
||||
index1 += ((m_sprite_page == 0) ? 0 : 0x1000);
|
||||
|
||||
index1 = apply_sprite_pattern_page(index1, size);
|
||||
|
||||
read_sprite_plane_data(index1 + sprite_line);
|
||||
|
||||
@ -913,24 +974,7 @@ void ppu2c0x_device::draw_sprites(uint8_t* line_priority)
|
||||
/* is this pixel non-transparent? */
|
||||
if (sprite_xpos + pixel >= first_pixel)
|
||||
{
|
||||
if (pixel_data)
|
||||
{
|
||||
/* has the background (or another sprite) already been drawn here? */
|
||||
if ((sprite_xpos + pixel) < VISIBLE_SCREEN_WIDTH)
|
||||
{
|
||||
if (!line_priority[sprite_xpos + pixel])
|
||||
{
|
||||
/* no, draw */
|
||||
draw_sprite_pixel(sprite_xpos, color, pixel, pixel_data, bitmap);
|
||||
}
|
||||
/* indicate that a sprite was drawn at this location, even if it's not seen */
|
||||
line_priority[sprite_xpos + pixel] |= 0x01;
|
||||
}
|
||||
}
|
||||
|
||||
/* set the "sprite 0 hit" flag if appropriate */
|
||||
if (sprite_index == 0 && (pixel_data & 0x03) && ((sprite_xpos + pixel) < 255) && (line_priority[sprite_xpos + pixel] & 0x02))
|
||||
m_regs[PPU_STATUS] |= PPU_STATUS_SPRITE0_HIT;
|
||||
draw_sprite_pixel_low(bitmap, pixel_data, pixel, sprite_xpos, color, sprite_index, line_priority);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -945,23 +989,7 @@ void ppu2c0x_device::draw_sprites(uint8_t* line_priority)
|
||||
/* is this pixel non-transparent? */
|
||||
if (sprite_xpos + pixel >= first_pixel)
|
||||
{
|
||||
if (pixel_data)
|
||||
{
|
||||
if ((sprite_xpos + pixel) < VISIBLE_SCREEN_WIDTH)
|
||||
{
|
||||
/* has another sprite been drawn here? */
|
||||
if (!(line_priority[sprite_xpos + pixel] & 0x01))
|
||||
{
|
||||
/* no, draw */
|
||||
draw_sprite_pixel(sprite_xpos, color, pixel, pixel_data, bitmap);
|
||||
line_priority[sprite_xpos + pixel] |= 0x01;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* set the "sprite 0 hit" flag if appropriate */
|
||||
if (sprite_index == 0 && (pixel_data & 0x03) && ((sprite_xpos + pixel) < 255) && (line_priority[sprite_xpos + pixel] & 0x02))
|
||||
m_regs[PPU_STATUS] |= PPU_STATUS_SPRITE0_HIT;
|
||||
draw_sprite_pixel_high(bitmap, pixel_data, pixel, sprite_xpos, color, sprite_index, line_priority);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1292,7 +1320,7 @@ void ppu2c0x_device::write(offs_t offset, uint8_t data)
|
||||
else
|
||||
{
|
||||
/* first write */
|
||||
m_refresh_latch &= 0x7fe0;
|
||||
m_refresh_latch &= (0xffe0 & m_global_refresh_mask);
|
||||
m_refresh_latch |= (data & 0xf8) >> 3;
|
||||
|
||||
m_x_fine = data & 7;
|
||||
@ -1306,7 +1334,7 @@ void ppu2c0x_device::write(offs_t offset, uint8_t data)
|
||||
if (m_toggle)
|
||||
{
|
||||
/* second write */
|
||||
m_refresh_latch &= 0x7f00;
|
||||
m_refresh_latch &= (0xff00 & m_global_refresh_mask);
|
||||
m_refresh_latch |= data;
|
||||
m_refresh_data = m_refresh_latch;
|
||||
|
||||
@ -1317,7 +1345,7 @@ void ppu2c0x_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
/* first write */
|
||||
m_refresh_latch &= 0x00ff;
|
||||
m_refresh_latch |= (data & 0x3f) << 8;
|
||||
m_refresh_latch |= (data & (m_videoram_addr_mask >>8) ) << 8;
|
||||
//logerror("vram addr write 1: %02x, %04x (scanline: %d)\n", data, m_refresh_latch, m_scanline);
|
||||
}
|
||||
|
||||
@ -1326,7 +1354,7 @@ void ppu2c0x_device::write(offs_t offset, uint8_t data)
|
||||
|
||||
case PPU_DATA: /* 7 */
|
||||
{
|
||||
int tempAddr = m_videomem_addr & 0x3fff;
|
||||
int tempAddr = m_videomem_addr & m_videoram_addr_mask;
|
||||
|
||||
if (!m_latch.isnull())
|
||||
m_latch(tempAddr);
|
||||
|
@ -91,8 +91,12 @@ public:
|
||||
virtual void read_sprite_plane_data(int address);
|
||||
virtual void make_sprite_pixel_data(uint8_t &pixel_data, int flipx);
|
||||
virtual void draw_sprite_pixel(int sprite_xpos, int color, int pixel, uint8_t pixel_data, bitmap_rgb32 &bitmap);
|
||||
virtual bool is_spritepixel_opaque(int pixel_data, int color);
|
||||
virtual void draw_sprite_pixel_low(bitmap_rgb32& bitmap, int pixel_data, int pixel, int sprite_xpos, int color, int sprite_index, uint8_t* line_priority);
|
||||
virtual void draw_sprite_pixel_high(bitmap_rgb32& bitmap, int pixel_data, int pixel, int sprite_xpos, int color, int sprite_index, uint8_t* line_priority);
|
||||
virtual void read_extra_sprite_bits(int sprite_index);
|
||||
|
||||
virtual int apply_sprite_pattern_page(int index1, int size);
|
||||
virtual void draw_sprites(uint8_t *line_priority);
|
||||
void render_scanline();
|
||||
virtual void scanline_increment_fine_ycounter();
|
||||
@ -189,6 +193,8 @@ protected:
|
||||
int m_scanline; /* scanline count */
|
||||
std::unique_ptr<uint8_t[]> m_spriteram; /* sprite ram */
|
||||
|
||||
int m_videoram_addr_mask;
|
||||
int m_global_refresh_mask;
|
||||
int m_line_write_increment_large;
|
||||
bool m_paletteram_in_ppuspace; // sh6578 doesn't have the palette in PPU space, so various side-effects don't apply
|
||||
std::vector<uint8_t> m_palette_ram; /* shouldn't be in main memory! */
|
||||
|
@ -23,6 +23,8 @@ ppu_sh6578_device::ppu_sh6578_device(const machine_config& mconfig, device_type
|
||||
{
|
||||
m_paletteram_in_ppuspace = false;
|
||||
m_line_write_increment_large = 32;
|
||||
m_videoram_addr_mask = 0xffff;
|
||||
m_global_refresh_mask = 0xffff;
|
||||
}
|
||||
|
||||
ppu_sh6578_device::ppu_sh6578_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock) :
|
||||
@ -85,6 +87,11 @@ void ppu_sh6578_device::scanline_increment_fine_ycounter()
|
||||
}
|
||||
}
|
||||
|
||||
void ppu_sh6578_device::draw_sprite_pixel(int sprite_xpos, int color, int pixel, uint8_t pixel_data, bitmap_rgb32& bitmap)
|
||||
{
|
||||
uint8_t palval = m_palette_ram[(pixel_data | color << 2)] & 0x3f;
|
||||
bitmap.pix32(m_scanline, sprite_xpos + pixel) = this->pen(palval);
|
||||
}
|
||||
|
||||
void ppu_sh6578_device::read_tile_plane_data(int address, int color)
|
||||
{
|
||||
@ -134,7 +141,8 @@ void ppu_sh6578_device::draw_tile(uint8_t* line_priority, int color_byte, int co
|
||||
}
|
||||
else
|
||||
{
|
||||
pen = back_pen;
|
||||
uint8_t palval = m_palette_ram[0x0] & 0x3f;
|
||||
pen = this->pen(palval);
|
||||
}
|
||||
|
||||
*dest = pen;
|
||||
@ -245,10 +253,24 @@ void ppu_sh6578_device::draw_background(uint8_t* line_priority)
|
||||
}
|
||||
}
|
||||
|
||||
void ppu_sh6578_device::read_sprite_plane_data(int address)
|
||||
{
|
||||
m_planebuf[0] = readbyte((address + 0) & 0x3fff);
|
||||
m_planebuf[1] = readbyte((address + 8) & 0x3fff);
|
||||
}
|
||||
|
||||
|
||||
int ppu_sh6578_device::apply_sprite_pattern_page(int index1, int size)
|
||||
{
|
||||
index1 += (((m_colsel_pntstart >> 2) & 0x3) * 0x1000);
|
||||
return index1;
|
||||
}
|
||||
|
||||
/*
|
||||
void ppu_sh6578_device::draw_sprites(uint8_t* line_priority)
|
||||
{
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
void ppu_sh6578_device::write(offs_t offset, uint8_t data)
|
||||
{
|
||||
|
@ -35,9 +35,12 @@ private:
|
||||
void read_tile_plane_data(int address, int color) override;
|
||||
void draw_tile(uint8_t* line_priority, int color_byte, int color_bits, int address, int start_x, pen_t back_pen, uint32_t*& dest, const pen_t* color_table) override;
|
||||
|
||||
virtual void draw_sprites(uint8_t* line_priority) override;
|
||||
virtual void draw_sprite_pixel(int sprite_xpos, int color, int pixel, uint8_t pixel_data, bitmap_rgb32& bitmap) override;
|
||||
//virtual void draw_sprites(uint8_t* line_priority) override;
|
||||
virtual void draw_background(uint8_t* line_priority) override;
|
||||
|
||||
virtual int apply_sprite_pattern_page(int index1, int size) override;
|
||||
virtual void read_sprite_plane_data(int address) override;
|
||||
|
||||
uint8_t m_extplanebuf[2];
|
||||
uint8_t m_colsel_pntstart;
|
||||
};
|
||||
|
@ -159,7 +159,7 @@ void nes_sh6578_state::bank_w(int bank, uint16_t offset, uint8_t data)
|
||||
|
||||
WRITE8_MEMBER(nes_sh6578_state::sprite_dma_w)
|
||||
{
|
||||
// int source = (data & 7);
|
||||
m_ppu->spriteram_dma(space, data);
|
||||
}
|
||||
|
||||
READ8_MEMBER(nes_sh6578_state::bankswitch_r)
|
||||
|
@ -2666,11 +2666,22 @@ ROM_START( mc_tv200 )
|
||||
ROM_LOAD( "s29gl064n90.bin", 0x00000, 0x800000, CRC(ae1905d2) SHA1(11582055713ba937c1ad32c4ada8683eebc1c83c) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( techni4 )
|
||||
ROM_REGION( 0x200000, "mainrom", 0 )
|
||||
ROM_LOAD( "technigame.bin", 0x00000, 0x200000, CRC(3c96b1b1) SHA1(1acc81b26e740327bd6d9faa5a96ab027a48dd77) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( unkra200 ) // "Winbond 25Q64FVSIG 1324" SPI ROM
|
||||
ROM_REGION( 0x800000, "mainrom", 0 )
|
||||
ROM_LOAD( "retro_machine_rom", 0x00000, 0x800000, CRC(0e824aa7) SHA1(957e98868559ecc22b3fa42c76692417b76bf132) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( denv150 )
|
||||
ROM_REGION( 0x1000000, "mainrom", 0 )
|
||||
ROM_LOAD( "denver150in1.bin", 0x00000, 0x1000000, CRC(6b3819d7) SHA1(b0039945ce44a52ea224ab736d5f3c6980409b5d) ) // 2nd half is blank
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( ppgc200g )
|
||||
ROM_REGION( 0x800000, "mainrom", 0 )
|
||||
ROM_LOAD( "m29dw641.u2", 0x00000, 0x800000, CRC(b16dc677) SHA1(c1984fde4caf9345d41d127db946d1c21ec43ae0) )
|
||||
@ -2782,13 +2793,27 @@ CONS( 200?, lxcmcyfz, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_lexibook_state, empt
|
||||
CONS( 200?, lxcmcydp, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_lexibook_state, empty_init, "Lexibook", "Lexibook Compact Cyber Arcade - Disney Princess", MACHINE_NOT_WORKING )
|
||||
CONS( 2016, rtvgc300, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_lexibook_state, empty_init, "Lexibook", "Lexibook Retro TV Game Console - 300 Games", MACHINE_NOT_WORKING )
|
||||
|
||||
// Also Lexibook Compact Cyber Arcade - Cars
|
||||
// Lexibook Compact Cyber Arcade - Paw Patrol
|
||||
// Lexibook Compact Cyber Arcade - Barbie
|
||||
// Lexibook Compact Cyber Arcade - Finding Dory
|
||||
// Lexibook Compact Cyber Arcade - Marvel Ultimate Spiderman
|
||||
// Lexibook Compact Cyber Arcade - PJ Masks
|
||||
// more?
|
||||
/* The following are also confirmed to be NES/VT derived units, most having a standard set of games with a handful of lazy graphic mods thrown in to fit the unit theme
|
||||
|
||||
(handhekd units, use standard AAA batteries)
|
||||
Lexibook Compact Cyber Arcade - Cars
|
||||
Lexibook Compact Cyber Arcade - Paw Patrol
|
||||
Lexibook Compact Cyber Arcade - Barbie
|
||||
Lexibook Compact Cyber Arcade - Finding Dory
|
||||
Lexibook Compact Cyber Arcade - Marvel Ultimate Spiderman
|
||||
Lexibook Compact Cyber Arcade - PJ Masks
|
||||
|
||||
(Handheld units, but different form factor to Compact Cyber Arcade, charged via USB)
|
||||
Lexibook Console Colour - Minnie Mouse
|
||||
Lexibook Console Colour - Disney's Planes
|
||||
Lexibook Console Colour - Barbie
|
||||
|
||||
(units for use with TV)
|
||||
Lexibook Retro TV Game Console (300 Games) - Cars
|
||||
Lexibook Retro TV Game Console (300 Games) - Frozen
|
||||
|
||||
(more?)
|
||||
*/
|
||||
|
||||
// intial code isn't valid? scrambled?
|
||||
CONS( 201?, red5mam, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_lexibook_state, empty_init, "Red5", "Mini Arcade Machine (Red5)", MACHINE_NOT_WORKING )
|
||||
@ -2800,12 +2825,14 @@ CONS( 201?, red5mam, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_lexibook_state, empty
|
||||
// some menu gfx broken, probably because this is a bad dump
|
||||
CONS( 2015, dgun2573, 0, 0, nes_vt_fp, nes_vt, nes_vt_hh_state, empty_init, "dreamGEAR", "My Arcade Gamer V Portable Gaming System (DGUN-2573)", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
|
||||
CONS( 201?, denv150, 0, 0, nes_vt_fp, nes_vt, nes_vt_hh_state, empty_init, "Denver", "Denver Game Console GMP-240C 150-in-1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
|
||||
// CPU die is marked 'VH2009' There's also a 62256 RAM chip on the PCB, some scrambled opcodes
|
||||
CONS( 200?, polmega, 0, 0, nes_vt_vh2009, nes_vt, nes_vt_vh2009_state, empty_init, "Polaroid", "Megamax GPD001SDG", MACHINE_NOT_WORKING )
|
||||
CONS( 200?, silv35, 0, 0, nes_vt_vh2009, nes_vt, nes_vt_vh2009_state, empty_init, "SilverLit", "35 in 1 Super Twins", MACHINE_NOT_WORKING )
|
||||
|
||||
// die is marked as VH2009, as above, but no scrambled opcodes here
|
||||
CONS( 201?, techni4, 0, 0, nes_vt_base_pal, nes_vt, nes_vt_state, empty_init, "Technigame", "Technigame Super 4-in-1 Sports (PAL)", MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
|
||||
// same encryption as above, but seems like newer hardware (or the above aren't using most of the features)
|
||||
|
@ -28,9 +28,9 @@ protected:
|
||||
|
||||
required_region_ptr<uint16_t> m_romregion;
|
||||
|
||||
DECLARE_READ16_MEMBER(porta_r);
|
||||
DECLARE_READ16_MEMBER(portb_r);
|
||||
DECLARE_READ16_MEMBER(portc_r);
|
||||
virtual DECLARE_READ16_MEMBER(porta_r);
|
||||
virtual DECLARE_READ16_MEMBER(portb_r);
|
||||
virtual DECLARE_READ16_MEMBER(portc_r);
|
||||
|
||||
virtual DECLARE_WRITE16_MEMBER(porta_w) override;
|
||||
virtual DECLARE_WRITE16_MEMBER(portb_w) override;
|
||||
@ -59,6 +59,24 @@ protected:
|
||||
virtual void machine_reset() override;
|
||||
};
|
||||
|
||||
class oplayer_100in1_state : public mywicodx_state
|
||||
{
|
||||
public:
|
||||
oplayer_100in1_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
mywicodx_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void init_oplayer();
|
||||
|
||||
|
||||
protected:
|
||||
virtual DECLARE_READ16_MEMBER(porta_r) override;
|
||||
virtual DECLARE_READ16_MEMBER(portb_r) override;
|
||||
virtual DECLARE_READ16_MEMBER(portc_r) override;
|
||||
|
||||
};
|
||||
|
||||
|
||||
void zon32bit_state::device_post_load()
|
||||
{
|
||||
// load state can change the bank, so we must invalide cache
|
||||
@ -227,6 +245,21 @@ WRITE16_MEMBER(zon32bit_state::portc_w)
|
||||
}
|
||||
|
||||
|
||||
READ16_MEMBER(oplayer_100in1_state::portc_r)
|
||||
{
|
||||
return m_io_p3->read();
|
||||
}
|
||||
|
||||
READ16_MEMBER(oplayer_100in1_state::portb_r)
|
||||
{
|
||||
return m_io_p2->read();
|
||||
}
|
||||
|
||||
READ16_MEMBER(oplayer_100in1_state::porta_r)
|
||||
{
|
||||
return 0x0ff8 | (machine().rand()&1);
|
||||
}
|
||||
|
||||
void zon32bit_state::mem_map_zon32bit(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x3fffff).r(FUNC(zon32bit_state::z32_rom_r));
|
||||
@ -428,6 +461,120 @@ static INPUT_PORTS_START( zon32bit )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( oplayer )
|
||||
PORT_START("P1")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "P1" )
|
||||
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("P2")
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 )
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 )
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 )
|
||||
PORT_BIT( 0xff80, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
PORT_START("P3")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "P3" )
|
||||
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
|
||||
|
||||
|
||||
void zon32bit_state::zon32bit(machine_config &config)
|
||||
{
|
||||
SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen);
|
||||
@ -460,6 +607,72 @@ ROM_START( zon32bit )
|
||||
ROM_END
|
||||
|
||||
|
||||
/*
|
||||
Following pinout was used for dumping
|
||||
|
||||
+------------------+
|
||||
VCC -|01 70|- VCC
|
||||
A23 -|02 69|- A21
|
||||
VCC -|03 68|- A22
|
||||
A18 -|04 67|- A08
|
||||
A24 -|05 66|- A09
|
||||
A07 -|06 65|- A10
|
||||
A06 -|07 64|- A11
|
||||
A05 -|08 63|- A12
|
||||
A04 -|09 62|- A13
|
||||
A03 -|10 61|- A14
|
||||
A02 -|11 60|- A15
|
||||
A01 -|12 59|- A16
|
||||
A00 -|13 58|- A17
|
||||
NC -|14 57|- A20
|
||||
NC -|15 56|- A19
|
||||
/CE -|16 55|- VCC (/BYTE)
|
||||
NC -|17 54|- NC
|
||||
GND -|18 55LV512 53|- GND
|
||||
NC -|19 52|- NC
|
||||
NC -|20 51|- NC
|
||||
NC -|21 50|- NC
|
||||
NC -|22 49|- NC
|
||||
NC -|23 48|- NC
|
||||
/OE -|24 47|- NC
|
||||
NC -|25 46|- NC
|
||||
D08 -|26 45|- NC
|
||||
D09 -|27 44|- D00
|
||||
D10 -|28 43|- D01
|
||||
D11 -|29 42|- D02
|
||||
NC -|30 41|- D03
|
||||
D12 -|31 40|- D04
|
||||
D13 -|32 39|- D05
|
||||
D14 -|33 38|- D06
|
||||
D15 -|34 37|- D07
|
||||
GND -|35 36|- VCC
|
||||
+------------------+
|
||||
*/
|
||||
|
||||
// Sunplus QL8041C die
|
||||
ROM_START( oplayer )
|
||||
ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "oplayer.bin", 0x0000000, 0x4000000, CRC(aa09c358) SHA1(df2855cdfdf2b693636cace8768e579b9d5bc657) )
|
||||
ROM_END
|
||||
|
||||
|
||||
void oplayer_100in1_state::init_oplayer()
|
||||
{
|
||||
// TODO: remove these hacks
|
||||
uint16_t* rom = (uint16_t*)memregion("maincpu")->base();
|
||||
// port a checks when starting a game in any given bank / starting the system
|
||||
rom[0x0f851 + (0x0000000 / 2)] = 0xf165;
|
||||
rom[0xaad1e + (0x1000000 / 2)] = 0xf165;
|
||||
rom[0x47d2d + (0x2000000 / 2)] = 0xf165;
|
||||
rom[0x1fb00 + (0x3000000 / 2)] = 0xf165;
|
||||
// port a checks when exiting a game in any given bank
|
||||
rom[0x7a506 + (0x0000000 / 2)] = 0xf165;
|
||||
rom[0xad051 + (0x1000000 / 2)] = 0xf165;
|
||||
rom[0xc351e + (0x3000000 / 2)] = 0xf165;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Box advertises this as '40 Games Included' but the cartridge, which was glued directly to the PCB, not removable, is a 41-in-1. Maybe some versions exist with a 40 game selection.
|
||||
CONS( 200?, zon32bit, 0, 0, zon32bit, zon32bit, zon32bit_state, empty_init, "Jungle Soft / Ultimate Products (HK) Ltd", "Zone 32-bit Gaming Console System (Family Sport 41-in-1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||
// My Wico Deluxe was also available under the MiWi brand (exact model unknown, but it was a cart there instead of built in)
|
||||
@ -467,3 +680,4 @@ CONS( 200?, zon32bit, 0, 0, zon32bit, zon32bit, zon32bit_state, empty_init,
|
||||
// The Mi Guitar menu contains 24 games, but they're dupes, and just counting those would exclude the other Mi Fit and Mi Papacon menus (which also contain dupes)
|
||||
CONS( 200?, mywicodx, 0, 0, zon32bit, zon32bit, mywicodx_state, empty_init, "<unknown>", "My Wico Deluxe (Family Sport 85-in-1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
CONS( 200?, oplayer, 0, 0, zon32bit, oplayer, oplayer_100in1_state, init_oplayer, "OPlayer", "OPlayer Mobile Game Console (MGS03-white) (Family Sport 100-in-1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
@ -1287,12 +1287,22 @@ static INPUT_PORTS_START( paccon ) // for Test Mode hold buttons 1+2 until the s
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
ROM_START( smartfp )
|
||||
//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("smartfitpark.bin", 0x000000, 0x800000, CRC(ada84507) SHA1(a3a80bf71fae62ebcbf939166a51d29c24504428))
|
||||
ROM_LOAD16_WORD_SWAP("smartfitparkuk.bin", 0x000000, 0x800000, CRC(2072d7d0) SHA1(eaa4f254d6dee3a7eac64ae2204dd6291e4d27cc) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( smartfps )
|
||||
//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("smartfitpark.bin", 0x000000, 0x800000, CRC(ada84507) SHA1(a3a80bf71fae62ebcbf939166a51d29c24504428) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( gormiti )
|
||||
@ -1591,8 +1601,9 @@ ROM_START( beambox )
|
||||
ROM_END
|
||||
|
||||
// the JAKKS ones of these seem to be known as 'Generalplus GPAC500' hardware?
|
||||
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 )
|
||||
CONS(2009, smartfp, 0, 0, base, smartfp, gcm394_game_state, empty_init, "Fisher-Price", "Fun 2 Learn Smart Fit Park (UK)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
CONS(2009, smartfps, smartfp, 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)
|
||||
|
@ -31506,6 +31506,8 @@ mog_m320
|
||||
fapocket
|
||||
zdog
|
||||
otrail
|
||||
denv150
|
||||
techni4
|
||||
|
||||
@source:vt1682.cpp
|
||||
ii8in1
|
||||
@ -37307,6 +37309,7 @@ lx_jg7415 //
|
||||
@source:spg2xx_zone_32bit.cpp
|
||||
mywicodx //
|
||||
zon32bit // Zone 32-bit
|
||||
oplayer
|
||||
|
||||
@source:spiders.cpp
|
||||
spiders // (c) 1981 Sigma Ent. Inc.
|
||||
@ -37891,6 +37894,7 @@ jak_tink
|
||||
jak_totm
|
||||
jak_ths
|
||||
smartfp // Smart Fit Park
|
||||
smartfps
|
||||
gormiti
|
||||
wlsair60 // Wireless Air 60
|
||||
wrlshunt // Wireless: Hunting Video Game System
|
||||
|
Loading…
Reference in New Issue
Block a user