mirror of
https://github.com/holub/mame
synced 2025-04-19 23:12:11 +03:00
- dataeast/madmotor.cpp: dumped PROM [Phil Bennett]
- nichibutsu/galivan.cpp: consolidated driver into single file, split into subclasses - skeleton/palsystems_sh2.cpp: added documentation and Mach dumps for 2 boards [Hammy, buffi]
This commit is contained in:
parent
6183053ecc
commit
5aa5842469
@ -341,6 +341,9 @@ ROM_START( madmotor )
|
||||
|
||||
ROM_REGION( 0x40000, "oki2", 0 )
|
||||
ROM_LOAD( "13.h3", 0x00000, 0x20000, CRC(cc4d65e9) SHA1(b9bcaa52c570f94d2f2e5dd84c94773cc4115442) )
|
||||
|
||||
ROM_REGION( 0x100, "proms", 0 )
|
||||
ROM_LOAD( "fm-23.19h", 0x000, 0x100, CRC(6d51adf8) SHA1(51f2792d06f46ec27c60c814745641aa8709a200) ) // probably related to sprites' hardware
|
||||
ROM_END
|
||||
|
||||
ROM_START( madmotora )
|
||||
@ -382,6 +385,9 @@ ROM_START( madmotora )
|
||||
|
||||
ROM_REGION( 0x40000, "oki2", 0 )
|
||||
ROM_LOAD( "13.h3", 0x00000, 0x20000, CRC(cc4d65e9) SHA1(b9bcaa52c570f94d2f2e5dd84c94773cc4115442) )
|
||||
|
||||
ROM_REGION( 0x100, "proms", 0 )
|
||||
ROM_LOAD( "fm-23.19h", 0x000, 0x100, CRC(6d51adf8) SHA1(51f2792d06f46ec27c60c814745641aa8709a200) ) // probably related to sprites' hardware
|
||||
ROM_END
|
||||
|
||||
/******************************************************************************/
|
||||
|
@ -8964,12 +8964,14 @@ void guttangt_state::init_guttangts3()
|
||||
common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, &galaxian_state::guttangt_extend_sprite_info);
|
||||
|
||||
uint8_t *romdata = memregion("maincpu")->base();
|
||||
uint8_t buf[0x4800];
|
||||
memcpy(buf, romdata, 0x4800);
|
||||
|
||||
// descramble the content of each 0x100 block
|
||||
for (int i = 0; i < 0x4800; i++)
|
||||
romdata[i] = buf[i ^ 0xff];
|
||||
for (int i = 0; i < 0x4800; i += 0x100)
|
||||
{
|
||||
using std::swap;
|
||||
for (int j = 0; j < (0x100 / 2); j++)
|
||||
swap(romdata[i | j], romdata[i | (j ^ 0xff)]);
|
||||
}
|
||||
}
|
||||
|
||||
void sbhoei_state::init_sbhoei()
|
||||
@ -9146,12 +9148,14 @@ void galaxian_state::init_jumpbugbc()
|
||||
init_jumpbug();
|
||||
|
||||
uint8_t *romdata = memregion("maincpu")->base();
|
||||
uint8_t buf[0x10000];
|
||||
memcpy(buf, romdata, 0x10000);
|
||||
|
||||
// descramble the content of each 0x100 block
|
||||
for (int i = 0; i < 0x10000; i++)
|
||||
romdata[i] = buf[i ^ 0xff];
|
||||
for (int i = 0; i < 0x10000; i += 0x100)
|
||||
{
|
||||
using std::swap;
|
||||
for (int j = 0; j < (0x100 / 2); j++)
|
||||
swap(romdata[i | j], romdata[i | (j ^ 0xff)]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,138 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Luca Elia, Olivier Galibert
|
||||
/***************************************************************************
|
||||
|
||||
Galivan - Cosmo Police
|
||||
|
||||
***************************************************************************/
|
||||
#ifndef MAME_NICHIBUTSU_GALIVAN_H
|
||||
#define MAME_NICHIBUTSU_GALIVAN_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "nb1412m2.h"
|
||||
#include "nb1414m4.h"
|
||||
|
||||
#include "machine/gen_latch.h"
|
||||
#include "video/bufsprite.h"
|
||||
#include "sound/flt_biquad.h"
|
||||
|
||||
#include "screen.h"
|
||||
#include "emupal.h"
|
||||
#include "tilemap.h"
|
||||
|
||||
|
||||
class galivan_state : public driver_device
|
||||
{
|
||||
public:
|
||||
galivan_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_videoram(*this, "videoram")
|
||||
, m_spriteram(*this, "spriteram")
|
||||
, m_nb1414m4(*this, "nb1414m4")
|
||||
, m_screen(*this, "screen")
|
||||
, m_gfxdecode(*this, "gfxdecode")
|
||||
, m_palette(*this, "palette")
|
||||
, m_soundlatch(*this, "soundlatch")
|
||||
, m_dacfilter1(*this, "dacfilter1")
|
||||
, m_dacfilter2(*this, "dacfilter2")
|
||||
, m_ymfilter(*this, "ymfilter")
|
||||
, m_rombank(*this, "rombank")
|
||||
{ }
|
||||
|
||||
void galivan(machine_config &config);
|
||||
void ninjemak(machine_config &config);
|
||||
void youmab(machine_config &config);
|
||||
|
||||
void init_youmab();
|
||||
|
||||
protected:
|
||||
void io_map(address_map &map) ATTR_COLD;
|
||||
|
||||
void galivan_common(machine_config &config);
|
||||
void video_config(machine_config &config);
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
|
||||
private:
|
||||
/* memory pointers */
|
||||
required_shared_ptr<uint8_t> m_videoram;
|
||||
required_device<buffered_spriteram8_device> m_spriteram;
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *m_bg_tilemap = nullptr;
|
||||
tilemap_t *m_tx_tilemap = nullptr;
|
||||
uint16_t m_scrollx = 0U;
|
||||
uint16_t m_scrolly = 0U;
|
||||
uint8_t m_galivan_scrollx[2]{}, m_galivan_scrolly[2]{};
|
||||
uint8_t m_layers = 0U;
|
||||
uint8_t m_ninjemak_dispdisable = 0U;
|
||||
|
||||
uint8_t m_shift_scroll = 0U; //youmab
|
||||
uint32_t m_shift_val = 0U;
|
||||
void galivan_sound_command_w(uint8_t data);
|
||||
uint8_t soundlatch_clear_r();
|
||||
uint8_t IO_port_c0_r();
|
||||
void blit_trigger_w(uint8_t data);
|
||||
void vblank_ack_w(uint8_t data);
|
||||
void youmab_extra_bank_w(uint8_t data);
|
||||
uint8_t youmab_8a_r();
|
||||
void youmab_81_w(uint8_t data);
|
||||
void youmab_84_w(uint8_t data);
|
||||
void youmab_86_w(uint8_t data);
|
||||
void galivan_videoram_w(offs_t offset, uint8_t data);
|
||||
void galivan_gfxbank_w(uint8_t data);
|
||||
void ninjemak_gfxbank_w(uint8_t data);
|
||||
void galivan_scrollx_w(offs_t offset, uint8_t data);
|
||||
void galivan_scrolly_w(offs_t offset, uint8_t data);
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_tx_tile_info);
|
||||
TILE_GET_INFO_MEMBER(ninjemak_get_bg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(ninjemak_get_tx_tile_info);
|
||||
void galivan_palette(palette_device &palette) const;
|
||||
void ninjemak_palette(palette_device &palette) const;
|
||||
DECLARE_MACHINE_START(galivan);
|
||||
DECLARE_MACHINE_RESET(galivan);
|
||||
DECLARE_VIDEO_START(galivan);
|
||||
DECLARE_MACHINE_START(ninjemak);
|
||||
DECLARE_MACHINE_RESET(ninjemak);
|
||||
DECLARE_VIDEO_START(ninjemak);
|
||||
uint32_t screen_update_galivan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update_ninjemak(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
|
||||
|
||||
optional_device<nb1414m4_device> m_nb1414m4;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
required_device<filter_biquad_device> m_dacfilter1;
|
||||
required_device<filter_biquad_device> m_dacfilter2;
|
||||
required_device<filter_biquad_device> m_ymfilter;
|
||||
memory_bank_creator m_rombank;
|
||||
|
||||
void galivan_map(address_map &map) ATTR_COLD;
|
||||
void ninjemak_io_map(address_map &map) ATTR_COLD;
|
||||
void ninjemak_map(address_map &map) ATTR_COLD;
|
||||
void sound_io_map(address_map &map) ATTR_COLD;
|
||||
void sound_map(address_map &map) ATTR_COLD;
|
||||
};
|
||||
|
||||
class dangarj_state : public galivan_state
|
||||
{
|
||||
public:
|
||||
dangarj_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
galivan_state(mconfig, type, tag),
|
||||
m_prot(*this, "prot_chip")
|
||||
{ }
|
||||
|
||||
void dangarj(machine_config &config);
|
||||
|
||||
private:
|
||||
required_device<nb1412m2_device> m_prot;
|
||||
|
||||
void dangarj_io_map(address_map &map) ATTR_COLD;
|
||||
};
|
||||
|
||||
#endif // MAME_NICHIBUTSU_GALIVAN_H
|
@ -1,407 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Luca Elia, Olivier Galibert
|
||||
/***************************************************************************
|
||||
|
||||
video.c
|
||||
|
||||
Functions to emulate the video hardware of the machine.
|
||||
|
||||
d800-dbff foreground: char low bits (1 screen * 1024 chars/screen)
|
||||
dc00-dfff foreground attribute: 7 ?
|
||||
6543 color
|
||||
21 ?
|
||||
0 char hi bit
|
||||
|
||||
|
||||
e000-e0ff spriteram: 64 sprites (4 bytes/sprite)
|
||||
offset : 0 1 2 3
|
||||
meaning: ypos(lo) sprite(lo) attribute xpos(lo)
|
||||
7 flipy
|
||||
6 flipx
|
||||
5-2 color
|
||||
1 sprite(hi)
|
||||
0 xpos(hi)
|
||||
|
||||
|
||||
background: 0x4000 bytes of ROM: 76543210 tile code low bits
|
||||
0x4000 bytes of ROM: 7 ?
|
||||
6543 color
|
||||
2 ?
|
||||
10 tile code high bits
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "galivan.h"
|
||||
|
||||
/* Layers has only bits 5-7 active.
|
||||
7 selects text off/on
|
||||
6 selects background off/on
|
||||
5 controls sprite priority (active only on title screen,
|
||||
not for scores or push start nor game)
|
||||
*/
|
||||
|
||||
|
||||
/* Notes:
|
||||
layers are used in galivan/dangar but not ninjemak
|
||||
ninjemak_dispdisable is used in ninjemak but not galivan/dangar
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Convert the color PROMs into a more useable format.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
void galivan_state::galivan_palette(palette_device &palette) const
|
||||
{
|
||||
const uint8_t *color_prom = memregion("proms")->base();
|
||||
|
||||
// create a lookup table for the palette
|
||||
for (int i = 0; i < 0x100; i++)
|
||||
{
|
||||
int const r = pal4bit(color_prom[i + 0x000]);
|
||||
int const g = pal4bit(color_prom[i + 0x100]);
|
||||
int const b = pal4bit(color_prom[i + 0x200]);
|
||||
|
||||
palette.set_indirect_color(i, rgb_t(r, g, b));
|
||||
}
|
||||
|
||||
// color_prom now points to the beginning of the lookup table
|
||||
color_prom += 0x300;
|
||||
|
||||
// characters use colors 0-0x3f
|
||||
// the bottom two bits of the color code select the palette bank for pens 0-7;
|
||||
// the top two bits for pens 8-15.
|
||||
for (int i = 0; i < 0x100; i++)
|
||||
{
|
||||
uint8_t const ctabentry = (i & 0x0f) | ((i >> ((i & 0x08) ? 2 : 0)) & 0x30);
|
||||
|
||||
palette.set_pen_indirect(i, ctabentry);
|
||||
}
|
||||
|
||||
// I think that background tiles use colors 0xc0-0xff in four banks
|
||||
// the bottom two bits of the color code select the palette bank for pens 0-7;
|
||||
// the top two bits for pens 8-15.
|
||||
for (int i = 0; i < 0x100; i++)
|
||||
{
|
||||
uint8_t const ctabentry = 0xc0 | (i & 0x0f) | ((i >> ((i & 0x08) ? 2 : 0)) & 0x30);
|
||||
|
||||
palette.set_pen_indirect(0x100 + i, ctabentry);
|
||||
}
|
||||
|
||||
// sprites use colors 0x80-0xbf in four banks
|
||||
// The lookup table tells which colors to pick from the selected bank
|
||||
// the bank is selected by another PROM and depends on the top 7 bits of the sprite code.
|
||||
// The PROM selects the bank *separately* for pens 0-7 and 8-15 (like for tiles).
|
||||
for (int i = 0; i < 0x1000; i++)
|
||||
{
|
||||
uint8_t const ctabentry = 0x80 | ((i << ((i & 0x80) ? 2 : 4)) & 0x30) | (color_prom[i >> 4] & 0x0f);
|
||||
int const i_swapped = ((i & 0x0f) << 8) | ((i & 0xff0) >> 4);
|
||||
|
||||
palette.set_pen_indirect(0x200 + i_swapped, ctabentry);
|
||||
}
|
||||
}
|
||||
|
||||
void galivan_state::ninjemak_palette(palette_device& palette) const
|
||||
{
|
||||
const uint8_t *color_prom = memregion("proms")->base();
|
||||
|
||||
// create a lookup table for the palette
|
||||
for (int i = 0; i < 0x100; i++)
|
||||
{
|
||||
int const r = pal4bit(color_prom[i + 0x000]);
|
||||
int const g = pal4bit(color_prom[i + 0x100]);
|
||||
int const b = pal4bit(color_prom[i + 0x200]);
|
||||
|
||||
palette.set_indirect_color(i, rgb_t(r, g, b));
|
||||
}
|
||||
|
||||
// color_prom now points to the beginning of the lookup table
|
||||
color_prom += 0x300;
|
||||
|
||||
// characters use colors 0-0x7f
|
||||
for (int i = 0; i < 0x80; i++)
|
||||
palette.set_pen_indirect(i, i);
|
||||
|
||||
// I think that background tiles use colors 0xc0-0xff in four banks
|
||||
// the bottom two bits of the color code select the palette bank for pens 0-7;
|
||||
// the top two bits for pens 8-15.
|
||||
for (int i = 0; i < 0x100; i++)
|
||||
{
|
||||
uint8_t const ctabentry = 0xc0 | (i & 0x0f) | ((i >> ((i & 0x08) ? 2 : 0)) & 0x30);
|
||||
|
||||
palette.set_pen_indirect(0x80 + i, ctabentry);
|
||||
}
|
||||
|
||||
// sprites use colors 0x80-0xbf in four banks
|
||||
// The lookup table tells which colors to pick from the selected bank
|
||||
// the bank is selected by another PROM and depends on the top 7 bits of the sprite code.
|
||||
// The PROM selects the bank *separately* for pens 0-7 and 8-15 (like for tiles).
|
||||
for (int i = 0; i < 0x1000; i++)
|
||||
{
|
||||
uint8_t const ctabentry = 0x80 | ((i << ((i & 0x80) ? 2 : 4)) & 0x30) | (color_prom[i >> 4] & 0x0f);
|
||||
int const i_swapped = ((i & 0x0f) << 8) | ((i & 0xff0) >> 4);
|
||||
|
||||
palette.set_pen_indirect(0x180 + i_swapped, ctabentry);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Callbacks for the TileMap code
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
TILE_GET_INFO_MEMBER(galivan_state::get_bg_tile_info)
|
||||
{
|
||||
uint8_t *BGROM = memregion("gfx4")->base();
|
||||
int attr = BGROM[tile_index + 0x4000];
|
||||
int code = BGROM[tile_index] | ((attr & 0x03) << 8);
|
||||
tileinfo.set(1,
|
||||
code,
|
||||
(attr & 0x78) >> 3, /* seems correct */
|
||||
0);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(galivan_state::get_tx_tile_info)
|
||||
{
|
||||
int attr = m_videoram[tile_index + 0x400];
|
||||
int code = m_videoram[tile_index] | ((attr & 0x01) << 8);
|
||||
tileinfo.set(0,
|
||||
code,
|
||||
(attr & 0x78) >> 3, /* seems correct */
|
||||
0);
|
||||
tileinfo.category = attr & 8 ? 0 : 1; /* seems correct */
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(galivan_state::ninjemak_get_bg_tile_info)
|
||||
{
|
||||
uint8_t *BGROM = memregion("gfx4")->base();
|
||||
int attr = BGROM[tile_index + 0x4000];
|
||||
int code = BGROM[tile_index] | ((attr & 0x03) << 8);
|
||||
tileinfo.set(1,
|
||||
code,
|
||||
((attr & 0x60) >> 3) | ((attr & 0x0c) >> 2), /* seems correct */
|
||||
0);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(galivan_state::ninjemak_get_tx_tile_info)
|
||||
{
|
||||
uint16_t index = tile_index;
|
||||
// TODO: skip drawing the NB1414M4 params, how the HW actually handles this?
|
||||
if (index < 0x12)
|
||||
index = 0x12;
|
||||
|
||||
int attr = m_videoram[index + 0x400];
|
||||
int code = m_videoram[index] | ((attr & 0x03) << 8);
|
||||
tileinfo.set(0,
|
||||
code,
|
||||
(attr & 0x1c) >> 2, /* seems correct ? */
|
||||
0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Start the video hardware emulation.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
VIDEO_START_MEMBER(galivan_state,galivan)
|
||||
{
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(galivan_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 128, 128);
|
||||
m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(galivan_state::get_tx_tile_info)), TILEMAP_SCAN_COLS, 8, 8, 32, 32);
|
||||
|
||||
m_tx_tilemap->set_transparent_pen(15);
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(galivan_state,ninjemak)
|
||||
{
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(galivan_state::ninjemak_get_bg_tile_info)), TILEMAP_SCAN_COLS, 16, 16, 512, 32);
|
||||
m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(galivan_state::ninjemak_get_tx_tile_info)), TILEMAP_SCAN_COLS, 8, 8, 32, 32);
|
||||
|
||||
m_tx_tilemap->set_transparent_pen(15);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Memory handlers
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
void galivan_state::galivan_videoram_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
m_videoram[offset] = data;
|
||||
m_tx_tilemap->mark_tile_dirty(offset & 0x3ff);
|
||||
}
|
||||
|
||||
/* Written through port 40 */
|
||||
void galivan_state::galivan_gfxbank_w(uint8_t data)
|
||||
{
|
||||
/* bits 0 and 1 coin counters */
|
||||
machine().bookkeeping().coin_counter_w(0,data & 1);
|
||||
machine().bookkeeping().coin_counter_w(1,data & 2);
|
||||
|
||||
/* bit 2 flip screen */
|
||||
flip_screen_set(data & 0x04);
|
||||
|
||||
/* bit 7 selects one of two ROM banks for c000-dfff */
|
||||
membank("bank1")->set_entry((data & 0x80) >> 7);
|
||||
|
||||
/* logerror("%s port 40 = %02x\n", machine().describe_context(), data); */
|
||||
}
|
||||
|
||||
void galivan_state::ninjemak_gfxbank_w(uint8_t data)
|
||||
{
|
||||
/* bits 0 and 1 coin counters */
|
||||
machine().bookkeeping().coin_counter_w(0,data & 1);
|
||||
machine().bookkeeping().coin_counter_w(1,data & 2);
|
||||
|
||||
/* bit 2 flip screen */
|
||||
flip_screen_set(data & 0x04);
|
||||
|
||||
/* bit 3 unknown */
|
||||
|
||||
/* bit 4 background disable flag */
|
||||
m_ninjemak_dispdisable = data & 0x10;
|
||||
|
||||
/* bit 5 sprite flag ??? */
|
||||
|
||||
/* bit 6, 7 ROM bank select */
|
||||
membank("bank1")->set_entry((data & 0xc0) >> 6);
|
||||
|
||||
#if 0
|
||||
{
|
||||
char mess[80];
|
||||
int btz[8];
|
||||
int offs;
|
||||
|
||||
for (offs = 0; offs < 8; offs++) btz[offs] = (((data >> offs) & 0x01) ? 1 : 0);
|
||||
|
||||
sprintf(mess, "BK:%01X%01X S:%01X B:%01X T:%01X FF:%01X C2:%01X C1:%01X", btz[7], btz[6], btz[5], btz[4], btz[3], btz[2], btz[1], btz[0]);
|
||||
popmessage(mess);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Written through port 41-42 */
|
||||
void galivan_state::galivan_scrollx_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
if (offset == 1)
|
||||
{
|
||||
m_layers = data & 0xe0;
|
||||
}
|
||||
m_galivan_scrollx[offset] = data;
|
||||
}
|
||||
|
||||
/* Written through port 43-44 */
|
||||
void galivan_state::galivan_scrolly_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
m_galivan_scrolly[offset] = data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Display refresh
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
void galivan_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
{
|
||||
const uint8_t *spritepalettebank = memregion("user1")->base();
|
||||
uint8_t *buffered_spriteram = m_spriteram->buffer();
|
||||
int length = m_spriteram->bytes();
|
||||
int flip = flip_screen();
|
||||
gfx_element *gfx = m_gfxdecode->gfx(2);
|
||||
|
||||
/* draw the sprites */
|
||||
for (int offs = 0; offs < length; offs += 4)
|
||||
{
|
||||
int code;
|
||||
int attr = buffered_spriteram[offs + 2];
|
||||
int color = (attr & 0x3c) >> 2;
|
||||
int flipx = attr & 0x40;
|
||||
int flipy = attr & 0x80;
|
||||
int sx, sy;
|
||||
|
||||
sx = (buffered_spriteram[offs + 3] - 0x80) + 256 * (attr & 0x01);
|
||||
sy = 240 - buffered_spriteram[offs];
|
||||
if (flip)
|
||||
{
|
||||
sx = 240 - sx;
|
||||
sy = 240 - sy;
|
||||
flipx = !flipx;
|
||||
flipy = !flipy;
|
||||
}
|
||||
|
||||
// code = buffered_spriteram[offs + 1] + ((attr & 0x02) << 7);
|
||||
code = buffered_spriteram[offs + 1] + ((attr & 0x06) << 7); // for ninjemak, not sure ?
|
||||
|
||||
gfx->transpen(bitmap,cliprect,
|
||||
code,
|
||||
color + 16 * (spritepalettebank[code >> 2] & 0x0f),
|
||||
flipx,flipy,
|
||||
sx,sy,15);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
uint32_t galivan_state::screen_update_galivan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_bg_tilemap->set_scrollx(0, m_galivan_scrollx[0] + 256 * (m_galivan_scrollx[1] & 0x07));
|
||||
m_bg_tilemap->set_scrolly(0, m_galivan_scrolly[0] + 256 * (m_galivan_scrolly[1] & 0x07));
|
||||
|
||||
if (m_layers & 0x40)
|
||||
bitmap.fill(0, cliprect);
|
||||
else
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
|
||||
if (m_layers & 0x20)
|
||||
{
|
||||
if ((m_layers & 0x80) == 0)
|
||||
{
|
||||
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
m_tx_tilemap->draw(screen, bitmap, cliprect, 1, 0);
|
||||
}
|
||||
draw_sprites(bitmap, cliprect);
|
||||
}
|
||||
else
|
||||
{
|
||||
draw_sprites(bitmap, cliprect);
|
||||
if ((m_layers & 0x80) == 0)
|
||||
{
|
||||
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
m_tx_tilemap->draw(screen, bitmap, cliprect, 1, 0);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t galivan_state::screen_update_ninjemak(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
/* (scrollx[1] & 0x40) does something */
|
||||
m_bg_tilemap->set_scrollx(0, m_scrollx);
|
||||
m_bg_tilemap->set_scrolly(0, m_scrolly);
|
||||
|
||||
if (m_ninjemak_dispdisable)
|
||||
bitmap.fill(0, cliprect);
|
||||
else
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
|
||||
draw_sprites(bitmap, cliprect);
|
||||
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
return 0;
|
||||
}
|
@ -5633,7 +5633,7 @@ ROM_END
|
||||
|
||||
/* Marti Colls bootleg (set 1).
|
||||
There are two PCB versions with the same ROM set:
|
||||
-An older one, just labeled "PAC", with a 18 MHz xtal, and a Novatronic NVS board (a small sub-board from Novatronic,
|
||||
-An older one, just labeled "PAC", with a 18 MHz xtal, and a Novatronic NVS board (a small sub-board from Novatronic,
|
||||
silkscreened "NOVATRONIC BILBAO SPAIN COPYRIGHT 1982", with the CPU, program ROMs, a PROM and a 6116 SRAM
|
||||
(https://www.recreativas.org/novatronic-video-sistema-nvs-6072-novatronic-sa). This one is where the PROMs were dumped from.
|
||||
-A newer one, silkscreened by MARTI COLLS, with a sub-board similar to the Novatronic one (but without Novatronic texts).
|
||||
@ -8654,12 +8654,14 @@ uint8_t pacman_state::cannonbp_protection_r(offs_t offset)
|
||||
void pacman_state::init_pengomc1()
|
||||
{
|
||||
uint8_t *romdata = memregion("maincpu")->base();
|
||||
uint8_t buf[0xc000];
|
||||
memcpy(buf, romdata, 0xc000);
|
||||
|
||||
// some sort of weak protection?
|
||||
for (int i = 0; i < 0xc000; i++)
|
||||
romdata[i] = buf[i^0xff];
|
||||
for (int i = 0; i < 0xc000; i += 0x100)
|
||||
{
|
||||
using std::swap;
|
||||
for (int j = 0; j < (0x100 / 2); j++)
|
||||
swap(romdata[i | j], romdata[i | (j ^ 0xff)]);
|
||||
}
|
||||
}
|
||||
|
||||
ioport_value clubpacm_state::clubpacm_input_r()
|
||||
|
@ -14,7 +14,7 @@ HD64F7044F28 (SH-2) with internal ROM
|
||||
D720J8 XTAL (near SH2)
|
||||
DS2404S RTC
|
||||
KOS9F XTAL (near RTC)
|
||||
square 144 pin chip with no marking
|
||||
square 144 pin chip with no marking (probably YGV617B-S like board below)
|
||||
12.000 MHz XTAL (near 144 pin chip)
|
||||
2x LATTICE Mach211SP-15JC - 18JI 8010OPY3 PK3_CTRL chips
|
||||
2x GM71C18163CJ6 RAM
|
||||
@ -22,6 +22,30 @@ BR62256P RAM
|
||||
Oki M6295 sound chip
|
||||
2x bank of 8 DIP switches
|
||||
|
||||
The main components for PAL POKER 3 are:
|
||||
HD64F7044F28 (SH-2) with internal ROM
|
||||
D720J8 XTAL (near SH2)
|
||||
DS2404S RTC
|
||||
KOS9F XTAL (near RTC)
|
||||
YGV617B-S Advanced Video Processor
|
||||
12.000 MHz XTAL (near 144 pin chip)
|
||||
LATTICE Mach211SP-15JC - 18JI 9950APA B PK2_CTRL chip
|
||||
2x GM71C18163CJ6 RAM
|
||||
BR62256P RAM
|
||||
Oki M6295 sound chip
|
||||
2x bank of 8 DIP switches
|
||||
|
||||
The main components for SH-POKER V3.0 are:
|
||||
scratched square 112 pin chip (probably HD64F7044F28 as above)
|
||||
14.318 MHz XTAL
|
||||
DS2404S RTC
|
||||
DS7A XTAL (near RTC)
|
||||
scratched square 144 pin chip (probably YGV617B-S as above)
|
||||
12.000 MHz XTAL (near 144 pin chip)
|
||||
scratched square 40 pin chip (probably LATTICE Mach211SP as above)
|
||||
scratched square 44 pin chip (probably Oki M6295 as above)
|
||||
6x bank of 8 DIP switches (on base board)
|
||||
bank of 8 DIP switches (on CPU board)
|
||||
|
||||
TODO: everything. Needs internal ROM dumps.
|
||||
*/
|
||||
@ -188,6 +212,9 @@ ROM_START( mpoker2 ) // this was on the PAL PCB
|
||||
ROM_REGION( 0x200000, "gfx", 0 )
|
||||
ROM_LOAD( "lh28f160s5t.u0222", 0x000000, 0x200000, CRC(12dc71c7) SHA1(e0db76e05752f475e554ccd24244ea8bc60f2042) )
|
||||
|
||||
ROM_REGION( 0x4934, "mach", 0 )
|
||||
ROM_LOAD( "pk3_ctrl.jed", 0x0000, 0x4934, NO_DUMP )
|
||||
|
||||
ROM_REGION( 0x80000, "oki", 0 )
|
||||
ROM_LOAD( "msm27c401.u066", 0x00000, 0x80000, CRC(2aba63a3) SHA1(c3d0a5a37cfa309cb94d6218c068fe90272d1721) ) // 1xxxxxxxxxxxxxxxxxx = 0x00
|
||||
ROM_END
|
||||
@ -196,6 +223,9 @@ ROM_START( mpoker2a ) // this was on the PAL POKER 3 PCB
|
||||
ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "internal_rom", 0x00000, 0x40000, NO_DUMP)
|
||||
|
||||
ROM_REGION( 0x4934, "mach", 0 )
|
||||
ROM_LOAD( "pk2_ctrl.u0114.jed", 0x0000, 0x4934, CRC(5f897e0e) SHA1(018eadeeb43846fb23b2665758a108e0c1a79d72) ) // JED as jedutil can't handle MACHs yet
|
||||
|
||||
ROM_REGION( 0x200000, "gfx", 0 )
|
||||
ROM_LOAD( "flash56.bin", 0x000000, 0x200000, CRC(fbca21df) SHA1(78ab98468bb4d5563d14a9a5be4be73112e8b0a2) )
|
||||
|
||||
@ -210,6 +240,9 @@ ROM_START( mpoker2b ) // this was on the SH-POKER V3.0
|
||||
ROM_REGION( 0x200000, "gfx", 0 )
|
||||
ROM_LOAD( "flash56.bin", 0x000000, 0x200000, CRC(1d65901c) SHA1(f8f42ff2dc858a5970ecfbdfb08154047833676b) )
|
||||
|
||||
ROM_REGION( 0x4934, "mach", 0 )
|
||||
ROM_LOAD( "mach.u0114.jed", 0x0000, 0x4934, CRC(2f9b8fdc) SHA1(ab5ddac49db6d8a8a5a59cf6fefe145031add487) ) // JED as jedutil can't handle MACHs yet
|
||||
|
||||
ROM_REGION( 0x80000, "oki", 0 )
|
||||
ROM_LOAD( "msm27c401.bin", 0x00000, 0x80000, CRC(2aba63a3) SHA1(c3d0a5a37cfa309cb94d6218c068fe90272d1721) ) // 1xxxxxxxxxxxxxxxxxx = 0x00
|
||||
ROM_END
|
||||
|
Loading…
Reference in New Issue
Block a user