mirror of
https://github.com/holub/mame
synced 2025-04-25 09:50:04 +03:00
Merge branch 'master' of https://github.com/mamedev/mame.git
This commit is contained in:
commit
d8add6d940
@ -78,49 +78,56 @@ class goodejan_state : public driver_device
|
||||
public:
|
||||
goodejan_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_sc0_vram(*this, "sc0_vram"),
|
||||
m_sc1_vram(*this, "sc1_vram"),
|
||||
m_sc2_vram(*this, "sc2_vram"),
|
||||
m_sc3_vram(*this, "sc3_vram"),
|
||||
m_spriteram16(*this, "sprite_ram"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette") { }
|
||||
m_spriteram16(*this, "sprite_ram") { }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
required_shared_ptr<UINT16> m_sc0_vram;
|
||||
required_shared_ptr<UINT16> m_sc1_vram;
|
||||
required_shared_ptr<UINT16> m_sc2_vram;
|
||||
required_shared_ptr<UINT16> m_sc3_vram;
|
||||
required_shared_ptr<UINT16> m_spriteram16;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
tilemap_t *m_sc0_tilemap;
|
||||
tilemap_t *m_sc1_tilemap;
|
||||
tilemap_t *m_sc2_tilemap;
|
||||
tilemap_t *m_sc3_tilemap;
|
||||
|
||||
UINT16 m_mux_data;
|
||||
UINT16 m_seibucrtc_sc0bank;
|
||||
DECLARE_WRITE16_MEMBER(goodejan_gfxbank_w);
|
||||
UINT16 m_layer_en;
|
||||
UINT16 m_scrollram[6];
|
||||
|
||||
DECLARE_WRITE16_MEMBER(gfxbank_w);
|
||||
DECLARE_READ16_MEMBER(mahjong_panel_r);
|
||||
DECLARE_WRITE16_MEMBER(mahjong_panel_w);
|
||||
DECLARE_WRITE16_MEMBER(seibucrtc_sc0vram_w);
|
||||
DECLARE_WRITE16_MEMBER(seibucrtc_sc1vram_w);
|
||||
DECLARE_WRITE16_MEMBER(seibucrtc_sc2vram_w);
|
||||
DECLARE_WRITE16_MEMBER(seibucrtc_sc3vram_w);
|
||||
DECLARE_WRITE16_MEMBER(layer_en_w);
|
||||
DECLARE_WRITE16_MEMBER(layer_scroll_w);
|
||||
|
||||
TILE_GET_INFO_MEMBER(seibucrtc_sc0_tile_info);
|
||||
TILE_GET_INFO_MEMBER(seibucrtc_sc1_tile_info);
|
||||
TILE_GET_INFO_MEMBER(seibucrtc_sc2_tile_info);
|
||||
TILE_GET_INFO_MEMBER(seibucrtc_sc3_tile_info);
|
||||
INTERRUPT_GEN_MEMBER(goodejan_irq);
|
||||
DECLARE_WRITE16_MEMBER(layer_en_w);
|
||||
DECLARE_WRITE16_MEMBER(layer_scroll_w);
|
||||
UINT16 m_layer_en;
|
||||
UINT16 m_scrollram[6];
|
||||
|
||||
INTERRUPT_GEN_MEMBER(irq);
|
||||
|
||||
void seibucrtc_sc0bank_w(UINT16 data);
|
||||
void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri);
|
||||
virtual void video_start();
|
||||
UINT32 screen_update_goodejan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
};
|
||||
|
||||
/*******************************
|
||||
@ -348,9 +355,14 @@ void goodejan_state::video_start()
|
||||
m_sc3_tilemap->set_transparent_pen(15);
|
||||
|
||||
m_seibucrtc_sc0bank = 0;
|
||||
|
||||
save_item(NAME(m_mux_data));
|
||||
save_item(NAME(m_seibucrtc_sc0bank));
|
||||
save_item(NAME(m_layer_en));
|
||||
save_item(NAME(m_scrollram));
|
||||
}
|
||||
|
||||
UINT32 goodejan_state::screen_update_goodejan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
UINT32 goodejan_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
bitmap.fill(m_palette->pen(0x7ff), cliprect); //black pen
|
||||
|
||||
@ -381,7 +393,7 @@ UINT32 goodejan_state::screen_update_goodejan(screen_device &screen, bitmap_ind1
|
||||
#define GOODEJAN_MHZ3 12000000
|
||||
|
||||
|
||||
WRITE16_MEMBER(goodejan_state::goodejan_gfxbank_w)
|
||||
WRITE16_MEMBER(goodejan_state::gfxbank_w)
|
||||
{
|
||||
seibucrtc_sc0bank_w((data & 0x100)>>8);
|
||||
}
|
||||
@ -423,7 +435,7 @@ ADDRESS_MAP_END
|
||||
|
||||
/* totmejan CRTC is at 8000-804f,goodejan is at 8000-807f */
|
||||
static ADDRESS_MAP_START( common_io_map, AS_IO, 16, goodejan_state )
|
||||
AM_RANGE(0x9000, 0x9001) AM_WRITE(goodejan_gfxbank_w)
|
||||
AM_RANGE(0x9000, 0x9001) AM_WRITE(gfxbank_w)
|
||||
AM_RANGE(0xb000, 0xb003) AM_WRITENOP
|
||||
AM_RANGE(0xb004, 0xb005) AM_WRITE(mahjong_panel_w)
|
||||
|
||||
@ -592,7 +604,7 @@ static GFXDECODE_START( goodejan )
|
||||
GFXDECODE_ENTRY( "tx_gfx", 0, charlayout, 0x100, 0x10 ) /* Text */
|
||||
GFXDECODE_END
|
||||
|
||||
INTERRUPT_GEN_MEMBER(goodejan_state::goodejan_irq)
|
||||
INTERRUPT_GEN_MEMBER(goodejan_state::irq)
|
||||
{
|
||||
device.execute().set_input_line_and_vector(0,HOLD_LINE,0x208/4);
|
||||
/* vector 0x00c is just a reti */
|
||||
@ -616,7 +628,7 @@ static MACHINE_CONFIG_START( goodejan, goodejan_state )
|
||||
MCFG_CPU_ADD("maincpu", V30, GOODEJAN_MHZ2/2)
|
||||
MCFG_CPU_PROGRAM_MAP(goodejan_map)
|
||||
MCFG_CPU_IO_MAP(goodejan_io_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", goodejan_state, goodejan_irq)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", goodejan_state, irq)
|
||||
|
||||
SEIBU_SOUND_SYSTEM_CPU(GOODEJAN_MHZ1/2)
|
||||
|
||||
@ -626,7 +638,7 @@ static MACHINE_CONFIG_START( goodejan, goodejan_state )
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) //TODO: dynamic resolution
|
||||
MCFG_SCREEN_UPDATE_DRIVER(goodejan_state, screen_update_goodejan)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(goodejan_state, screen_update)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_DEVICE_ADD("crtc", SEIBU_CRTC, 0)
|
||||
@ -742,6 +754,6 @@ ROM_START( goodejana )
|
||||
ROM_LOAD( "fmj08.083", 0x000, 0x100, CRC(9657b7ad) SHA1(e9b469c2b3534593f7fe0ea19cbbf93b55957e42) )
|
||||
ROM_END
|
||||
|
||||
GAME( 1991, totmejan, 0, totmejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Tottemo E Jong", GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1991, goodejan, 0, goodejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 1)", GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1991, goodejana,goodejan, goodejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 2)", GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1991, totmejan, 0, totmejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Tottemo E Jong", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
|
||||
GAME( 1991, goodejan, 0, goodejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 1)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
|
||||
GAME( 1991, goodejana,goodejan, goodejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 2)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
|
||||
|
@ -3466,6 +3466,17 @@ ROM_START( derbyoc )
|
||||
|
||||
// 840-0016 1999 317-0262-JPN Naomi
|
||||
ROM_PARAMETER( ":rom_board:segam2crypt:key", "280fee35" )
|
||||
/*
|
||||
838-13661 RS422/RS232C BD DOC
|
||||
IC1 - Toshiba TMPZ84C015BF-10 Z80-based MCU
|
||||
IC6 - Toshiba TC551001CF-70L 128k x8 SRAM
|
||||
IC8 - Sega 315-5338A
|
||||
OSC1 - 19.680MHz OSC2 - 32.000MHz
|
||||
|
||||
connected between Naomi motherboard and card reader/printer, accessed via MIE MCU ports 0x09-0x0d
|
||||
*/
|
||||
ROM_REGION( 0x10000, "rs422_io", 0 )
|
||||
ROM_LOAD( "epr-22083.ic7", 0x0000, 0x10000, CRC(c70b0de9) SHA1(329c924b4d29017482b1ecca839fb610ca20b2af) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( derbyocw )
|
||||
@ -3933,6 +3944,7 @@ ROM_START( hotd2o )
|
||||
ROM_PARAMETER( ":rom_board:segam2crypt:key", "-1") // 315-5881 not populated
|
||||
ROM_END
|
||||
|
||||
// IC22 shown in ROM TEST as BAD, but its byte summ matches written on label, verified on 2 cartridges
|
||||
ROM_START( hotd2p )
|
||||
HOTD2_BIOS
|
||||
NAOMI_DEFAULT_EEPROM
|
||||
@ -3964,7 +3976,8 @@ ROM_START( hotd2p )
|
||||
ROM_LOAD( "mpr-21404.ic19s", 0x9800000, 0x800000, CRC(6cf6e705) SHA1(68d7e9becefe27b556e0c5d7ba00efd2d1fb71ca) )
|
||||
ROM_LOAD( "mpr-21405.ic20s", 0xa000000, 0x800000, CRC(495e6265) SHA1(57936367fec0000691641525682fb8aefc4e4f56) )
|
||||
|
||||
ROM_PARAMETER( ":rom_board:segam2crypt:key", "-1") // 315-5881 not populated
|
||||
// 315-5881 populated, have no 317-xxxx label, key unknown
|
||||
ROM_PARAMETER( ":rom_board:segam2crypt:key", "-1")
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
@ -5157,6 +5170,7 @@ ROM_START( samba )
|
||||
ROM_PARAMETER( ":rom_board:segam2crypt:key", "280a8b5d" )
|
||||
ROM_END
|
||||
|
||||
// !!! partial dump, only IC22 dumped. without correct flashroms contents game crashes at certain points.
|
||||
// prototype - only works with US BIOS
|
||||
ROM_START( sambap )
|
||||
NAOMI_BIOS
|
||||
@ -7771,7 +7785,7 @@ ROM_START( ndcfboxa )
|
||||
ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF)
|
||||
//PIC16C621A (317-0567-EXP)
|
||||
//(sticker 253-5508-0567)
|
||||
ROM_LOAD("317-0567-exp.pic", 0x00, 0x4000, NO_DUMP )
|
||||
ROM_LOAD("317-0567-exp.pic", 0x00, 0x4000, CRC(cd1d2b2d) SHA1(78203ee0339f76eb76da08d7de43e7e44e4b7d32) )
|
||||
ROM_END
|
||||
|
||||
|
||||
@ -8557,12 +8571,12 @@ ROM_START( xtrmhnt2 )
|
||||
ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASE)
|
||||
ROM_LOAD( "610-0752.u3", 0x0000000, 0x1000000, CRC(bab6182e) SHA1(4d25256c81941316887cbb4524a203922f5b7104) )
|
||||
ROM_LOAD( "610-0752.u1", 0x1000000, 0x1000000, CRC(3086bc47) SHA1(eb7b04db90d296985528f0cfdd4545f184c40b64) )
|
||||
ROM_LOAD( "610-0752.u2", 0x2000000, 0x1000000, CRC(d3a88b31) SHA1(ccf14367e4e7efbc2cc835f3b001fd6d64302a5e) )
|
||||
ROM_LOAD( "610-0752.u4", 0x3000000, 0x1000000, CRC(9787f145) SHA1(8445ede0477f70fbdc113810b80356945ce498d2) )
|
||||
ROM_LOAD( "610-0752.u14", 0x4000000, 0x1000000, CRC(ce83bcc7) SHA1(e2d324a5a7eacbec7b0df9a4b9e276521bb9ab80) )
|
||||
ROM_LOAD( "610-0752.u15", 0x5000000, 0x1000000, CRC(864a6342) SHA1(fb97532d5dd00f8520fdaf68dfcd1ea627bdf90a) )
|
||||
ROM_LOAD( "610-0752.u16", 0x6000000, 0x1000000, CRC(8ac71c76) SHA1(080e41e633bf082fc536781541c6031d1ac81939) )
|
||||
ROM_LOAD( "610-0752.u17", 0x7000000, 0x1000000, CRC(a79fb1fa) SHA1(f75c5b574fd79677b926c595b369e95605a3c848) )
|
||||
ROM_LOAD( "610-0752.u4", 0x2000000, 0x1000000, CRC(9787f145) SHA1(8445ede0477f70fbdc113810b80356945ce498d2) )
|
||||
ROM_LOAD( "610-0752.u2", 0x3000000, 0x1000000, CRC(d3a88b31) SHA1(ccf14367e4e7efbc2cc835f3b001fd6d64302a5e) )
|
||||
ROM_LOAD( "610-0752.u15", 0x4000000, 0x1000000, CRC(864a6342) SHA1(fb97532d5dd00f8520fdaf68dfcd1ea627bdf90a) )
|
||||
ROM_LOAD( "610-0752.u17", 0x5000000, 0x1000000, CRC(a79fb1fa) SHA1(f75c5b574fd79677b926c595b369e95605a3c848) )
|
||||
ROM_LOAD( "610-0752.u14", 0x6000000, 0x1000000, CRC(ce83bcc7) SHA1(e2d324a5a7eacbec7b0df9a4b9e276521bb9ab80) )
|
||||
ROM_LOAD( "610-0752.u16", 0x7000000, 0x1000000, CRC(8ac71c76) SHA1(080e41e633bf082fc536781541c6031d1ac81939) )
|
||||
|
||||
ROM_REGION( 4, "rom_key", 0 )
|
||||
ROM_LOAD( "315-6248.bin", 0, 4, CRC(553dd361) SHA1(a60a26b5ee786cf0bb3d09bb6f00374598fbd7cc) )
|
||||
|
@ -66,50 +66,58 @@ class sengokmj_state : public driver_device
|
||||
public:
|
||||
sengokmj_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_sc0_vram(*this, "sc0_vram"),
|
||||
m_sc1_vram(*this, "sc1_vram"),
|
||||
m_sc2_vram(*this, "sc2_vram"),
|
||||
m_sc3_vram(*this, "sc3_vram"),
|
||||
m_spriteram16(*this, "sprite_ram"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette") { }
|
||||
m_spriteram16(*this, "sprite_ram") { }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
required_shared_ptr<UINT16> m_sc0_vram;
|
||||
required_shared_ptr<UINT16> m_sc1_vram;
|
||||
required_shared_ptr<UINT16> m_sc2_vram;
|
||||
required_shared_ptr<UINT16> m_sc3_vram;
|
||||
required_shared_ptr<UINT16> m_spriteram16;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
tilemap_t *m_sc0_tilemap;
|
||||
tilemap_t *m_sc1_tilemap;
|
||||
tilemap_t *m_sc2_tilemap;
|
||||
tilemap_t *m_sc3_tilemap;
|
||||
UINT16 m_sengokumj_mux_data;
|
||||
|
||||
UINT16 m_mux_data;
|
||||
UINT8 m_hopper_io;
|
||||
UINT16 m_layer_en;
|
||||
UINT16 m_scrollram[6];
|
||||
|
||||
DECLARE_READ16_MEMBER(mahjong_panel_r);
|
||||
DECLARE_WRITE16_MEMBER(mahjong_panel_w);
|
||||
DECLARE_WRITE16_MEMBER(sengokmj_out_w);
|
||||
DECLARE_READ16_MEMBER(sengokmj_system_r);
|
||||
DECLARE_WRITE16_MEMBER(out_w);
|
||||
DECLARE_READ16_MEMBER(system_r);
|
||||
DECLARE_WRITE16_MEMBER(seibucrtc_sc0vram_w);
|
||||
DECLARE_WRITE16_MEMBER(seibucrtc_sc1vram_w);
|
||||
DECLARE_WRITE16_MEMBER(seibucrtc_sc2vram_w);
|
||||
DECLARE_WRITE16_MEMBER(seibucrtc_sc3vram_w);
|
||||
DECLARE_WRITE16_MEMBER(layer_en_w);
|
||||
DECLARE_WRITE16_MEMBER(layer_scroll_w);
|
||||
|
||||
TILE_GET_INFO_MEMBER(seibucrtc_sc0_tile_info);
|
||||
TILE_GET_INFO_MEMBER(seibucrtc_sc1_tile_info);
|
||||
TILE_GET_INFO_MEMBER(seibucrtc_sc2_tile_info);
|
||||
TILE_GET_INFO_MEMBER(seibucrtc_sc3_tile_info);
|
||||
INTERRUPT_GEN_MEMBER(sengokmj_interrupt);
|
||||
DECLARE_WRITE16_MEMBER(layer_en_w);
|
||||
DECLARE_WRITE16_MEMBER(layer_scroll_w);
|
||||
|
||||
INTERRUPT_GEN_MEMBER(interrupt);
|
||||
|
||||
virtual void machine_start();
|
||||
virtual void video_start();
|
||||
|
||||
void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri);
|
||||
virtual void video_start();
|
||||
UINT32 screen_update_sengokmj(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
};
|
||||
|
||||
|
||||
@ -294,9 +302,12 @@ void sengokmj_state::video_start()
|
||||
m_sc2_tilemap->set_transparent_pen(15);
|
||||
m_sc1_tilemap->set_transparent_pen(15);
|
||||
m_sc3_tilemap->set_transparent_pen(15);
|
||||
|
||||
save_item(NAME(m_layer_en));
|
||||
save_item(NAME(m_scrollram));
|
||||
}
|
||||
|
||||
UINT32 sengokmj_state::screen_update_sengokmj(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
UINT32 sengokmj_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
bitmap.fill(m_palette->pen(0x7ff), cliprect); //black pen
|
||||
|
||||
@ -323,6 +334,11 @@ UINT32 sengokmj_state::screen_update_sengokmj(screen_device &screen, bitmap_ind1
|
||||
}
|
||||
|
||||
|
||||
void sengokmj_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_mux_data));
|
||||
save_item(NAME(m_hopper_io));
|
||||
}
|
||||
|
||||
|
||||
/* Multiplexer device for the mahjong panel */
|
||||
@ -334,7 +350,7 @@ READ16_MEMBER(sengokmj_state::mahjong_panel_r)
|
||||
|
||||
for(i=0;i<5;i++)
|
||||
{
|
||||
if(m_sengokumj_mux_data & 1 << i)
|
||||
if(m_mux_data & 1 << i)
|
||||
res = ioport(mpnames[i])->read();
|
||||
}
|
||||
|
||||
@ -343,13 +359,13 @@ READ16_MEMBER(sengokmj_state::mahjong_panel_r)
|
||||
|
||||
WRITE16_MEMBER(sengokmj_state::mahjong_panel_w)
|
||||
{
|
||||
m_sengokumj_mux_data = (data & 0x3f00) >> 8;
|
||||
m_mux_data = (data & 0x3f00) >> 8;
|
||||
|
||||
if(data & 0xc0ff)
|
||||
logerror("Write to mux %04x\n",data);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(sengokmj_state::sengokmj_out_w)
|
||||
WRITE16_MEMBER(sengokmj_state::out_w)
|
||||
{
|
||||
/* ---- ---- ---x ---- J.P. Signal (?)*/
|
||||
/* ---- ---- ---- -x-- Coin counter (done AFTER you press start)*/
|
||||
@ -362,7 +378,7 @@ WRITE16_MEMBER(sengokmj_state::sengokmj_out_w)
|
||||
// popmessage("%02x",m_hopper_io);
|
||||
}
|
||||
|
||||
READ16_MEMBER(sengokmj_state::sengokmj_system_r)
|
||||
READ16_MEMBER(sengokmj_state::system_r)
|
||||
{
|
||||
return (ioport("SYSTEM")->read() & 0xffbf) | m_hopper_io;
|
||||
}
|
||||
@ -387,11 +403,11 @@ static ADDRESS_MAP_START( sengokmj_io_map, AS_IO, 16, sengokmj_state )
|
||||
// AM_RANGE(0x8080, 0x8081) CRTC extra register?
|
||||
// AM_RANGE(0x80c0, 0x80c1) CRTC extra register?
|
||||
// AM_RANGE(0x8100, 0x8101) AM_WRITENOP // always 0
|
||||
AM_RANGE(0x8180, 0x8181) AM_WRITE(sengokmj_out_w)
|
||||
AM_RANGE(0x8180, 0x8181) AM_WRITE(out_w)
|
||||
AM_RANGE(0x8140, 0x8141) AM_WRITE(mahjong_panel_w)
|
||||
AM_RANGE(0xc000, 0xc001) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0xc002, 0xc003) AM_READ(mahjong_panel_r)
|
||||
AM_RANGE(0xc004, 0xc005) AM_READ(sengokmj_system_r) //switches
|
||||
AM_RANGE(0xc004, 0xc005) AM_READ(system_r) //switches
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -538,7 +554,7 @@ static GFXDECODE_START( sengokmj )
|
||||
GFXDECODE_ENTRY( "tx_gfx", 0, charlayout, 0x700, 0x10 ) /* Text */
|
||||
GFXDECODE_END
|
||||
|
||||
INTERRUPT_GEN_MEMBER(sengokmj_state::sengokmj_interrupt)
|
||||
INTERRUPT_GEN_MEMBER(sengokmj_state::interrupt)
|
||||
{
|
||||
device.execute().set_input_line_and_vector(0,HOLD_LINE,0xc8/4);
|
||||
}
|
||||
@ -560,7 +576,7 @@ static MACHINE_CONFIG_START( sengokmj, sengokmj_state )
|
||||
MCFG_CPU_ADD("maincpu", V30, 16000000/2) /* V30-8 */
|
||||
MCFG_CPU_PROGRAM_MAP(sengokmj_map)
|
||||
MCFG_CPU_IO_MAP(sengokmj_io_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", sengokmj_state, sengokmj_interrupt)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", sengokmj_state, interrupt)
|
||||
|
||||
SEIBU_SOUND_SYSTEM_CPU(14318180/4)
|
||||
|
||||
@ -572,7 +588,7 @@ static MACHINE_CONFIG_START( sengokmj, sengokmj_state )
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
MCFG_SCREEN_SIZE(64*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 16, 256-1) //TODO: dynamic resolution
|
||||
MCFG_SCREEN_UPDATE_DRIVER(sengokmj_state, screen_update_sengokmj)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(sengokmj_state, screen_update)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_DEVICE_ADD("crtc", SEIBU_CRTC, 0)
|
||||
@ -624,5 +640,5 @@ ROM_START( sengokmj )
|
||||
ROM_LOAD( "rs006.89", 0x000, 0x200, CRC(96f7646e) SHA1(400a831b83d6ac4d2a46ef95b97b1ee237099e44) ) /* Priority */
|
||||
ROM_END
|
||||
|
||||
GAME( 1991, sengokmj, 0, sengokmj, sengokmj, driver_device, 0, ROT0, "Sigma", "Sengoku Mahjong [BET] (Japan)", GAME_IMPERFECT_GRAPHICS )
|
||||
GAME( 1991, sengokmj, 0, sengokmj, sengokmj, driver_device, 0, ROT0, "Sigma", "Sengoku Mahjong [BET] (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
|
||||
/*Non-Bet Version?*/
|
||||
|
@ -120,6 +120,9 @@ WRITE8_MEMBER(pentagon_state::pentagon_port_7ffd_w)
|
||||
if (m_port_7ffd_data & 0x20)
|
||||
return;
|
||||
|
||||
if ((m_port_7ffd_data ^ data) & 0x08)
|
||||
spectrum_UpdateBorderBitmap();
|
||||
|
||||
/* store new state */
|
||||
m_port_7ffd_data = data;
|
||||
|
||||
|
@ -172,6 +172,9 @@ WRITE8_MEMBER(spectrum_state::spectrum_128_port_7ffd_w)
|
||||
if (m_port_7ffd_data & 0x20)
|
||||
return;
|
||||
|
||||
if ((m_port_7ffd_data ^ data) & 0x08)
|
||||
spectrum_UpdateBorderBitmap();
|
||||
|
||||
/* store new state */
|
||||
m_port_7ffd_data = data;
|
||||
|
||||
|
@ -39,6 +39,8 @@ VIDEO_START_MEMBER(spectrum_state,spectrum_128)
|
||||
|
||||
m_previous_border_x = 0; m_previous_border_y = 0;
|
||||
machine().first_screen()->register_screen_bitmap(m_border_bitmap);
|
||||
|
||||
m_screen_location = m_ram->pointer() + (5 << 14);
|
||||
}
|
||||
|
||||
|
||||
@ -58,6 +60,8 @@ void spectrum_state::screen_eof_spectrum(screen_device &screen, bool state)
|
||||
// rising edge
|
||||
if (state)
|
||||
{
|
||||
spectrum_UpdateBorderBitmap();
|
||||
|
||||
m_frame_number++;
|
||||
|
||||
if (m_frame_number >= m_frame_invert_count)
|
||||
@ -65,9 +69,6 @@ void spectrum_state::screen_eof_spectrum(screen_device &screen, bool state)
|
||||
m_frame_number = 0;
|
||||
m_flash_invert = !m_flash_invert;
|
||||
}
|
||||
|
||||
|
||||
spectrum_UpdateBorderBitmap();
|
||||
}
|
||||
}
|
||||
|
||||
@ -103,6 +104,10 @@ inline void spectrum_state::spectrum_plot_pixel(bitmap_ind16 &bitmap, int x, int
|
||||
|
||||
UINT32 spectrum_state::screen_update_spectrum(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
if (m_border_bitmap.valid())
|
||||
copyscrollbitmap(bitmap, m_border_bitmap, 0, 0, 0, 0, cliprect);
|
||||
|
||||
#if 0
|
||||
// note, don't update borders in here, this can time travel w/regards to other timers and may end up giving you
|
||||
// screen positions earlier than the last write handler gave you
|
||||
|
||||
@ -112,9 +117,6 @@ UINT32 spectrum_state::screen_update_spectrum(screen_device &screen, bitmap_ind1
|
||||
unsigned char *attr, *scr;
|
||||
// int full_refresh = 1;
|
||||
|
||||
if (m_border_bitmap.valid())
|
||||
copyscrollbitmap(bitmap, m_border_bitmap, 0, 0, 0, 0, cliprect);
|
||||
|
||||
scr=m_screen_location;
|
||||
|
||||
for (y=0; y<192; y++)
|
||||
@ -149,6 +151,7 @@ UINT32 spectrum_state::screen_update_spectrum(screen_device &screen, bitmap_ind1
|
||||
attr++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -191,14 +194,33 @@ void spectrum_state::spectrum_UpdateBorderBitmap()
|
||||
|
||||
if (m_border_bitmap.valid())
|
||||
{
|
||||
int colour = m_port_fe_data & 0x07;
|
||||
UINT16 border = m_port_fe_data & 0x07;
|
||||
|
||||
//printf("update border from %d,%d to %d,%d\n", m_previous_border_x, m_previous_border_y, x, y);
|
||||
|
||||
do
|
||||
{
|
||||
UINT16* bm = &m_border_bitmap.pix16(m_previous_border_y);
|
||||
bm[m_previous_border_x] = colour;
|
||||
UINT16 scrx = m_previous_border_x - SPEC_LEFT_BORDER;
|
||||
UINT16 scry = m_previous_border_y - SPEC_TOP_BORDER;
|
||||
|
||||
if (scrx < SPEC_DISPLAY_XSIZE && scry < SPEC_DISPLAY_YSIZE)
|
||||
{
|
||||
// this can/must be optimised
|
||||
if ((scrx & 7) == 0) {
|
||||
UINT16 *bm = &m_border_bitmap.pix16(m_previous_border_y, m_previous_border_x);
|
||||
UINT8 attr = *(m_screen_location + ((scry & 0xF8) << 2) + (scrx >> 3) + 0x1800);
|
||||
UINT8 scr = *(m_screen_location + ((scry & 7) << 8) + ((scry & 0x38) << 2) + ((scry & 0xC0) << 5) + (scrx >> 3));
|
||||
UINT16 ink = (attr & 0x07) + ((attr >> 3) & 0x08);
|
||||
UINT16 pap = (attr >> 3) & 0x0f;
|
||||
|
||||
if (m_flash_invert && (attr & 0x80))
|
||||
scr = ~scr;
|
||||
|
||||
for (UINT8 b = 0x80; b != 0; b >>= 1)
|
||||
*bm++ = (scr & b) ? ink : pap;
|
||||
}
|
||||
} else
|
||||
m_border_bitmap.pix16(m_previous_border_y, m_previous_border_x) = border;
|
||||
|
||||
m_previous_border_x += 1;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user