mirror of
https://github.com/holub/mame
synced 2025-07-06 10:29:38 +03:00
dunhuang.cpp: added missing oki hook up, now the game has speech. Used ramdac_device instead of custom implementation. Reduced tagmap lookups (nw)
This commit is contained in:
parent
e0f709b27f
commit
aa10258d37
@ -57,6 +57,7 @@ Notes:
|
||||
#include "sound/ay8910.h"
|
||||
#include "sound/okim6295.h"
|
||||
#include "sound/ym2413.h"
|
||||
#include "video/ramdac.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
@ -72,7 +73,41 @@ public:
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_screen(*this, "screen"),
|
||||
m_palette(*this, "palette") { }
|
||||
m_palette(*this, "palette"),
|
||||
m_mainbank(*this, "mainbank"),
|
||||
m_inputs(*this, {"IN0", "IN1", "IN2", "IN3", "IN4"}),
|
||||
m_dsw(*this, {"DSW1", "DSW2", "DSW3", "DSW4", "DSW5"}),
|
||||
m_service(*this, "SERVICE") { }
|
||||
|
||||
DECLARE_WRITE8_MEMBER(pos_x_w);
|
||||
DECLARE_WRITE8_MEMBER(pos_y_w);
|
||||
DECLARE_WRITE8_MEMBER(tile_w);
|
||||
DECLARE_WRITE8_MEMBER(tile2_w);
|
||||
DECLARE_WRITE8_MEMBER(clear_y_w);
|
||||
DECLARE_WRITE8_MEMBER(horiz_clear_w);
|
||||
DECLARE_WRITE8_MEMBER(vert_clear_w);
|
||||
DECLARE_WRITE8_MEMBER(block_dest_w);
|
||||
DECLARE_WRITE8_MEMBER(block_x_w);
|
||||
DECLARE_WRITE8_MEMBER(block_y_w);
|
||||
DECLARE_WRITE8_MEMBER(block_w_w);
|
||||
DECLARE_WRITE8_MEMBER(block_c_w);
|
||||
DECLARE_WRITE8_MEMBER(block_addr_lo_w);
|
||||
DECLARE_WRITE8_MEMBER(block_addr_hi_w);
|
||||
DECLARE_WRITE8_MEMBER(block_h_w);
|
||||
DECLARE_WRITE8_MEMBER(layers_w);
|
||||
DECLARE_WRITE8_MEMBER(input_w);
|
||||
DECLARE_READ8_MEMBER(service_r);
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
DECLARE_WRITE8_MEMBER(rombank_w);
|
||||
DECLARE_READ8_MEMBER(dsw_r);
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
|
||||
private:
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *m_tmap;
|
||||
@ -91,7 +126,6 @@ public:
|
||||
uint8_t m_block_dest;
|
||||
uint8_t m_block_c;
|
||||
uint8_t m_layers;
|
||||
int m_paloffs;
|
||||
|
||||
/* input-related */
|
||||
uint8_t m_input;
|
||||
@ -102,40 +136,18 @@ public:
|
||||
uint16_t m_videoram2[0x40 * 0x8];
|
||||
uint8_t m_colorram[0x40 * 0x20];
|
||||
uint8_t m_colorram2[0x40 * 0x8];
|
||||
uint8_t m_paldata[3 * 256];
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_pos_x_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_pos_y_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_tile_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_tile2_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_clear_y_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_horiz_clear_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_vert_clear_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_block_dest_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_block_x_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_block_y_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_block_w_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_block_c_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_block_addr_lo_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_block_addr_hi_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_block_h_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_paloffs_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_paldata_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_layers_w);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_input_w);
|
||||
DECLARE_READ8_MEMBER(dunhuang_service_r);
|
||||
DECLARE_READ8_MEMBER(dunhuang_input_r);
|
||||
DECLARE_WRITE8_MEMBER(dunhuang_rombank_w);
|
||||
DECLARE_READ8_MEMBER(dunhuang_dsw_r);
|
||||
|
||||
TILE_GET_INFO_MEMBER(get_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_tile_info2);
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
uint32_t screen_update_dunhuang(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
required_memory_bank m_mainbank;
|
||||
required_ioport_array<5> m_inputs;
|
||||
required_ioport_array<5> m_dsw;
|
||||
required_ioport m_service;
|
||||
};
|
||||
|
||||
|
||||
@ -169,10 +181,9 @@ void dunhuang_state::video_start()
|
||||
save_item(NAME(m_colorram));
|
||||
save_item(NAME(m_videoram2));
|
||||
save_item(NAME(m_colorram2));
|
||||
save_item(NAME(m_paldata));
|
||||
}
|
||||
|
||||
uint32_t dunhuang_state::screen_update_dunhuang(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
uint32_t dunhuang_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
int layers_ctrl = -1;
|
||||
|
||||
@ -209,21 +220,21 @@ if (machine().input().code_pressed(KEYCODE_Z))
|
||||
|
||||
// Tilemaps access
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_pos_x_w)
|
||||
WRITE8_MEMBER(dunhuang_state::pos_x_w)
|
||||
{
|
||||
m_pos_x = data & 0x3f;
|
||||
m_written = 0;
|
||||
m_written2 = 0;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_pos_y_w)
|
||||
WRITE8_MEMBER(dunhuang_state::pos_y_w)
|
||||
{
|
||||
m_pos_y = data;
|
||||
m_written = 0;
|
||||
m_written2 = 0;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_tile_w)
|
||||
WRITE8_MEMBER(dunhuang_state::tile_w)
|
||||
{
|
||||
int addr;
|
||||
|
||||
@ -249,7 +260,7 @@ WRITE8_MEMBER(dunhuang_state::dunhuang_tile_w)
|
||||
m_tmap->mark_tile_dirty(addr);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_tile2_w)
|
||||
WRITE8_MEMBER(dunhuang_state::tile2_w)
|
||||
{
|
||||
int addr;
|
||||
|
||||
@ -277,11 +288,11 @@ WRITE8_MEMBER(dunhuang_state::dunhuang_tile2_w)
|
||||
|
||||
// Clear a row of tiles (videoram)
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_clear_y_w)
|
||||
WRITE8_MEMBER(dunhuang_state::clear_y_w)
|
||||
{
|
||||
m_clear_y = data;
|
||||
}
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_horiz_clear_w)
|
||||
WRITE8_MEMBER(dunhuang_state::horiz_clear_w)
|
||||
{
|
||||
int i;
|
||||
// logerror("%06x: horiz clear, y = %02x, data = %02d\n", space.device().safe_pc(), m_clear_y,data);
|
||||
@ -297,7 +308,7 @@ WRITE8_MEMBER(dunhuang_state::dunhuang_horiz_clear_w)
|
||||
|
||||
// Clear a column of tiles (videoram2)
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_vert_clear_w)
|
||||
WRITE8_MEMBER(dunhuang_state::vert_clear_w)
|
||||
{
|
||||
int i;
|
||||
// logerror("%06x: vert clear, x = %02x, y = %02x, data = %02x\n", space.device().safe_pc(), m_pos_x,m_pos_y,data);
|
||||
@ -317,43 +328,43 @@ WRITE8_MEMBER(dunhuang_state::dunhuang_vert_clear_w)
|
||||
// The tiles codes are read from the graphics roms too!
|
||||
//
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_block_dest_w)
|
||||
WRITE8_MEMBER(dunhuang_state::block_dest_w)
|
||||
{
|
||||
m_block_dest = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_block_x_w)
|
||||
WRITE8_MEMBER(dunhuang_state::block_x_w)
|
||||
{
|
||||
m_block_x = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_block_y_w)
|
||||
WRITE8_MEMBER(dunhuang_state::block_y_w)
|
||||
{
|
||||
m_block_y = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_block_w_w)
|
||||
WRITE8_MEMBER(dunhuang_state::block_w_w)
|
||||
{
|
||||
m_block_w = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_block_c_w)
|
||||
WRITE8_MEMBER(dunhuang_state::block_c_w)
|
||||
{
|
||||
m_block_c = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_block_addr_lo_w)
|
||||
WRITE8_MEMBER(dunhuang_state::block_addr_lo_w)
|
||||
{
|
||||
m_block_addr_lo = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_block_addr_hi_w)
|
||||
WRITE8_MEMBER(dunhuang_state::block_addr_hi_w)
|
||||
{
|
||||
m_block_addr_hi = data;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_block_h_w)
|
||||
WRITE8_MEMBER(dunhuang_state::block_h_w)
|
||||
{
|
||||
int i,j, addr;
|
||||
uint8_t *tile_addr;
|
||||
@ -401,29 +412,9 @@ WRITE8_MEMBER(dunhuang_state::dunhuang_block_h_w)
|
||||
}
|
||||
}
|
||||
|
||||
// Palette: HMC HM86171 VGA 256 colour RAMDAC
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_paloffs_w)
|
||||
{
|
||||
m_paloffs = data * 3;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_paldata_w)
|
||||
{
|
||||
m_paldata[m_paloffs] = data;
|
||||
|
||||
m_palette->set_pen_color( m_paloffs/3,
|
||||
pal6bit(m_paldata[(m_paloffs/3)*3+0]),
|
||||
pal6bit(m_paldata[(m_paloffs/3)*3+1]),
|
||||
pal6bit(m_paldata[(m_paloffs/3)*3+2])
|
||||
);
|
||||
|
||||
m_paloffs = (m_paloffs + 1) % (3*256);
|
||||
}
|
||||
|
||||
// Layers control (not understood)
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_layers_w)
|
||||
WRITE8_MEMBER(dunhuang_state::layers_w)
|
||||
{
|
||||
// popmessage("layers %02x",data);
|
||||
m_layers = data;
|
||||
@ -436,51 +427,51 @@ WRITE8_MEMBER(dunhuang_state::dunhuang_layers_w)
|
||||
static ADDRESS_MAP_START( dunhuang_map, AS_PROGRAM, 8, dunhuang_state )
|
||||
AM_RANGE( 0x0000, 0x5fff ) AM_ROM
|
||||
AM_RANGE( 0x6000, 0x7fff ) AM_RAM
|
||||
AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK( "bank1" )
|
||||
AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK( "mainbank" )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
// Inputs
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_input_w)
|
||||
WRITE8_MEMBER(dunhuang_state::input_w)
|
||||
{
|
||||
m_input = data;
|
||||
}
|
||||
|
||||
READ8_MEMBER(dunhuang_state::dunhuang_service_r)
|
||||
READ8_MEMBER(dunhuang_state::service_r)
|
||||
{
|
||||
return ioport("SERVICE")->read()
|
||||
return m_service->read()
|
||||
| ((m_hopper && !(m_screen->frame_number() % 10)) ? 0x00 : 0x08) // bit 3: hopper sensor
|
||||
| 0x80 // bit 7 low -> tiles block transferrer busy
|
||||
;
|
||||
}
|
||||
|
||||
READ8_MEMBER(dunhuang_state::dunhuang_dsw_r)
|
||||
READ8_MEMBER(dunhuang_state::dsw_r)
|
||||
{
|
||||
if (!(m_input & 0x01)) return ioport("DSW1")->read();
|
||||
if (!(m_input & 0x02)) return ioport("DSW2")->read();
|
||||
if (!(m_input & 0x04)) return ioport("DSW3")->read();
|
||||
if (!(m_input & 0x08)) return ioport("DSW4")->read();
|
||||
if (!(m_input & 0x10)) return ioport("DSW5")->read();
|
||||
if (!(m_input & 0x01)) return m_dsw[0]->read();
|
||||
if (!(m_input & 0x02)) return m_dsw[1]->read();
|
||||
if (!(m_input & 0x04)) return m_dsw[2]->read();
|
||||
if (!(m_input & 0x08)) return m_dsw[3]->read();
|
||||
if (!(m_input & 0x10)) return m_dsw[4]->read();
|
||||
logerror("%s: warning, unknown dsw bits read, input = %02x\n", machine().describe_context(), m_input);
|
||||
return 0xff;
|
||||
}
|
||||
READ8_MEMBER(dunhuang_state::dunhuang_input_r)
|
||||
READ8_MEMBER(dunhuang_state::input_r)
|
||||
{
|
||||
if (!(m_input & 0x01)) return ioport("IN0")->read();
|
||||
if (!(m_input & 0x02)) return ioport("IN1")->read();
|
||||
if (!(m_input & 0x04)) return ioport("IN2")->read();
|
||||
if (!(m_input & 0x08)) return ioport("IN3")->read();
|
||||
if (!(m_input & 0x10)) return ioport("IN4")->read();
|
||||
if (!(m_input & 0x01)) return m_inputs[0]->read();
|
||||
if (!(m_input & 0x02)) return m_inputs[1]->read();
|
||||
if (!(m_input & 0x04)) return m_inputs[2]->read();
|
||||
if (!(m_input & 0x08)) return m_inputs[3]->read();
|
||||
if (!(m_input & 0x10)) return m_inputs[4]->read();
|
||||
logerror("%s: warning, unknown input bits read, input = %02x\n", machine().describe_context(), m_input);
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_rombank_w)
|
||||
WRITE8_MEMBER(dunhuang_state::rombank_w)
|
||||
{
|
||||
// ? data & 0x01
|
||||
// ? data & 0x02
|
||||
|
||||
membank("bank1")->set_entry(((data >> 2) & 0x7));
|
||||
m_mainbank->set_entry(((data >> 2) & 0x7));
|
||||
|
||||
// COIN OUT: data & 0x20
|
||||
machine().bookkeeping().coin_counter_w(0, data & 0x40);
|
||||
@ -488,57 +479,53 @@ WRITE8_MEMBER(dunhuang_state::dunhuang_rombank_w)
|
||||
}
|
||||
|
||||
|
||||
#ifdef UNUSED_FUNCTION
|
||||
WRITE8_MEMBER(dunhuang_state::dunhuang_82_w)
|
||||
{
|
||||
// popmessage("82 = %02x",dunhuang_82);
|
||||
}
|
||||
#endif
|
||||
|
||||
static ADDRESS_MAP_START( dunhuang_io_map, AS_IO, 8, dunhuang_state )
|
||||
AM_RANGE( 0x0000, 0x0000 ) AM_WRITE(dunhuang_pos_x_w )
|
||||
AM_RANGE( 0x0001, 0x0001 ) AM_WRITE(dunhuang_pos_y_w )
|
||||
AM_RANGE( 0x0002, 0x0004 ) AM_WRITE(dunhuang_tile_w )
|
||||
AM_RANGE( 0x0005, 0x0007 ) AM_WRITE(dunhuang_tile2_w )
|
||||
AM_RANGE( 0x0000, 0x0000 ) AM_WRITE(pos_x_w )
|
||||
AM_RANGE( 0x0001, 0x0001 ) AM_WRITE(pos_y_w )
|
||||
AM_RANGE( 0x0002, 0x0004 ) AM_WRITE(tile_w )
|
||||
AM_RANGE( 0x0005, 0x0007 ) AM_WRITE(tile2_w )
|
||||
|
||||
AM_RANGE( 0x0008, 0x0008 ) AM_WRITE(dunhuang_vert_clear_w )
|
||||
AM_RANGE( 0x0008, 0x0008 ) AM_WRITE(vert_clear_w )
|
||||
|
||||
AM_RANGE( 0x000c, 0x000c ) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r)
|
||||
|
||||
AM_RANGE( 0x000f, 0x000f ) AM_WRITE(dunhuang_block_addr_lo_w )
|
||||
AM_RANGE( 0x0010, 0x0010 ) AM_WRITE(dunhuang_block_addr_hi_w )
|
||||
AM_RANGE( 0x000f, 0x000f ) AM_WRITE(block_addr_lo_w )
|
||||
AM_RANGE( 0x0010, 0x0010 ) AM_WRITE(block_addr_hi_w )
|
||||
// AM_RANGE( 0x0011, 0x0011 ) ?
|
||||
AM_RANGE( 0x0012, 0x0012 ) AM_WRITE(dunhuang_block_c_w )
|
||||
AM_RANGE( 0x0015, 0x0015 ) AM_WRITE(dunhuang_block_x_w )
|
||||
AM_RANGE( 0x0016, 0x0016 ) AM_WRITE(dunhuang_block_y_w )
|
||||
AM_RANGE( 0x0017, 0x0017 ) AM_WRITE(dunhuang_block_w_w )
|
||||
AM_RANGE( 0x0018, 0x0018 ) AM_WRITE(dunhuang_block_h_w )
|
||||
AM_RANGE( 0x0012, 0x0012 ) AM_WRITE(block_c_w )
|
||||
AM_RANGE( 0x0015, 0x0015 ) AM_WRITE(block_x_w )
|
||||
AM_RANGE( 0x0016, 0x0016 ) AM_WRITE(block_y_w )
|
||||
AM_RANGE( 0x0017, 0x0017 ) AM_WRITE(block_w_w )
|
||||
AM_RANGE( 0x0018, 0x0018 ) AM_WRITE(block_h_w )
|
||||
|
||||
AM_RANGE( 0x0019, 0x0019 ) AM_WRITE(dunhuang_clear_y_w )
|
||||
AM_RANGE( 0x001a, 0x001a ) AM_WRITE(dunhuang_horiz_clear_w )
|
||||
AM_RANGE( 0x0019, 0x0019 ) AM_WRITE(clear_y_w )
|
||||
AM_RANGE( 0x001a, 0x001a ) AM_WRITE(horiz_clear_w )
|
||||
|
||||
AM_RANGE( 0x001b, 0x001b ) AM_WRITE(dunhuang_block_dest_w )
|
||||
AM_RANGE( 0x001b, 0x001b ) AM_WRITE(block_dest_w )
|
||||
|
||||
AM_RANGE( 0x0081, 0x0081 ) AM_DEVWRITE("ymsnd", ym2413_device, register_port_w)
|
||||
AM_RANGE( 0x0089, 0x0089 ) AM_DEVWRITE("ymsnd", ym2413_device, data_port_w)
|
||||
|
||||
// AM_RANGE( 0x0082, 0x0082 ) AM_WRITE(dunhuang_82_w )
|
||||
AM_RANGE( 0x0082, 0x0082 ) AM_DEVWRITE("oki", okim6295_device, write)
|
||||
|
||||
AM_RANGE( 0x0083, 0x0083 ) AM_WRITE(dunhuang_paloffs_w )
|
||||
AM_RANGE( 0x008b, 0x008b ) AM_WRITE(dunhuang_paldata_w )
|
||||
AM_RANGE( 0x0083, 0x0083 ) AM_DEVWRITE("ramdac", ramdac_device, index_w)
|
||||
AM_RANGE( 0x008b, 0x008b ) AM_DEVWRITE("ramdac", ramdac_device, pal_w)
|
||||
AM_RANGE( 0x0093, 0x0093 ) AM_DEVWRITE("ramdac", ramdac_device, mask_w)
|
||||
|
||||
AM_RANGE( 0x0084, 0x0084 ) AM_READ(dunhuang_service_r )
|
||||
AM_RANGE( 0x0085, 0x0085 ) AM_READ(dunhuang_input_r )
|
||||
AM_RANGE( 0x0084, 0x0084 ) AM_READ(service_r )
|
||||
AM_RANGE( 0x0085, 0x0085 ) AM_READ(input_r )
|
||||
|
||||
AM_RANGE( 0x0086, 0x0086 ) AM_WRITE(dunhuang_rombank_w )
|
||||
AM_RANGE( 0x0087, 0x0087 ) AM_WRITE(dunhuang_layers_w )
|
||||
AM_RANGE( 0x0086, 0x0086 ) AM_WRITE(rombank_w )
|
||||
AM_RANGE( 0x0087, 0x0087 ) AM_WRITE(layers_w )
|
||||
|
||||
AM_RANGE( 0x0088, 0x0088 ) AM_DEVREAD("ay8910", ay8910_device, data_r )
|
||||
AM_RANGE( 0x0090, 0x0090 ) AM_DEVWRITE("ay8910", ay8910_device, data_w )
|
||||
AM_RANGE( 0x0098, 0x0098 ) AM_DEVWRITE("ay8910", ay8910_device, address_w )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( ramdac_map, AS_0, 8, dunhuang_state )
|
||||
AM_RANGE(0x000, 0x3ff) AM_DEVREADWRITE("ramdac", ramdac_device, ramdac_pal_r, ramdac_rgb666_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/***************************************************************************
|
||||
Input Ports
|
||||
@ -768,9 +755,7 @@ GFXDECODE_END
|
||||
|
||||
void dunhuang_state::machine_start()
|
||||
{
|
||||
uint8_t *ROM = memregion("maincpu")->base();
|
||||
|
||||
membank("bank1")->configure_entries(0, 8, &ROM[0x10000], 0x8000);
|
||||
m_mainbank->configure_entries(0, 8, memregion("maincpu")->base(), 0x8000);
|
||||
|
||||
save_item(NAME(m_written));
|
||||
save_item(NAME(m_written2));
|
||||
@ -786,7 +771,6 @@ void dunhuang_state::machine_start()
|
||||
save_item(NAME(m_block_dest));
|
||||
save_item(NAME(m_block_c));
|
||||
save_item(NAME(m_layers));
|
||||
save_item(NAME(m_paloffs));
|
||||
save_item(NAME(m_input));
|
||||
save_item(NAME(m_hopper));
|
||||
}
|
||||
@ -807,7 +791,6 @@ void dunhuang_state::machine_reset()
|
||||
m_block_dest = 0;
|
||||
m_block_c = 0;
|
||||
m_layers = 0;
|
||||
m_paloffs = 0;
|
||||
m_input = 0;
|
||||
m_hopper = 0;
|
||||
}
|
||||
@ -819,7 +802,7 @@ static MACHINE_CONFIG_START( dunhuang )
|
||||
MCFG_CPU_ADD("maincpu", Z80,12000000/2)
|
||||
MCFG_CPU_PROGRAM_MAP(dunhuang_map)
|
||||
MCFG_CPU_IO_MAP(dunhuang_io_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", dunhuang_state, irq0_line_hold)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", dunhuang_state, irq0_line_hold)
|
||||
|
||||
MCFG_WATCHDOG_ADD("watchdog")
|
||||
MCFG_WATCHDOG_TIME_INIT(attotime::from_seconds(5))
|
||||
@ -830,12 +813,13 @@ static MACHINE_CONFIG_START( dunhuang )
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
MCFG_SCREEN_SIZE(512, 256)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0+8, 512-8-1, 0+16, 256-16-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dunhuang_state, screen_update_dunhuang)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dunhuang_state, screen_update)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", dunhuang)
|
||||
MCFG_PALETTE_ADD("palette", 0x100)
|
||||
|
||||
MCFG_RAMDAC_ADD("ramdac", ramdac_map, "palette") // HMC HM86171 VGA 256 colour RAMDAC
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
@ -844,8 +828,8 @@ static MACHINE_CONFIG_START( dunhuang )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
|
||||
|
||||
MCFG_SOUND_ADD("ay8910", AY8910, 12000000/8)
|
||||
MCFG_AY8910_PORT_B_READ_CB(READ8(dunhuang_state, dunhuang_dsw_r))
|
||||
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(dunhuang_state, dunhuang_input_w))
|
||||
MCFG_AY8910_PORT_B_READ_CB(READ8(dunhuang_state, dsw_r))
|
||||
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(dunhuang_state, input_w))
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
|
||||
|
||||
MCFG_OKIM6295_ADD("oki", 12000000/8, PIN7_HIGH)
|
||||
@ -858,9 +842,8 @@ MACHINE_CONFIG_END
|
||||
***************************************************************************/
|
||||
|
||||
ROM_START( dunhuang )
|
||||
ROM_REGION( 0x50000, "maincpu", 0 )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 )
|
||||
ROM_LOAD( "rom1.u9", 0x00000, 0x40000, CRC(843a0117) SHA1(26a838cb3552ea6a9ec55940fcbf83b06c068743) )
|
||||
ROM_RELOAD( 0x10000, 0x40000 )
|
||||
|
||||
ROM_REGION( 0xc0000, "gfx1", 0 )
|
||||
ROM_LOAD( "rom3.u4", 0x00000, 0x80000, CRC(1ff5d35e) SHA1(b808eb4f81be8fc77a58dadd661a9cc2b376a509) )
|
||||
|
Loading…
Reference in New Issue
Block a user