Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Robert

ARCADE 0.196

Recommended Posts

Im glad to see this update improves the Sega Model 2 games

Edited by dany777

Share this post


Link to post
Share on other sites

snapshot working but right now into video folder :wink: Iron Horse driver is default instead of MameSick one. EDIT. and I can see why. Here is updated code for ironhors:

 

diff -Nru src/mame/drivers/ironhors.cpp src-fx/mame/drivers/ironhors.cpp
--- src/mame/drivers/ironhors.cpp	Tue Mar 27 17:55:05 2018
+++ src-fx/mame/drivers/ironhors.cpp	Sun Apr  1 14:02:37 2018
@@ -25,20 +25,32 @@
  *
  *************************************/
 
-TIMER_DEVICE_CALLBACK_MEMBER(ironhors_state::irq)
+TIMER_DEVICE_CALLBACK_MEMBER(ironhors_state::interrupt_tick)
 {
-	int scanline = param;
+	uint8_t ticks_mask = ~m_interrupt_ticks & (m_interrupt_ticks + 1); // 0->1
+	m_interrupt_ticks++;
 
-	if (scanline == 240)
-	{
-		if (*m_interrupt_enable & 4)
-			m_maincpu->set_input_line(M6809_FIRQ_LINE, HOLD_LINE);
-	}
-	else if (((scanline+16) % 64) == 0)
-	{
-		if (*m_interrupt_enable & 1)
-			m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
-	}
+	// NMI on d0
+	if (ticks_mask & m_interrupt_mask & 1)
+		m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
+
+	// IRQ on d4
+	if (ticks_mask & m_interrupt_mask<<2 & 16)
+		m_maincpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE);
+}
+
+WRITE8_MEMBER(ironhors_state::irq_ctrl_w)
+{
+	/* bits 0/1/2 = interrupt enable */
+	uint8_t ack_mask = ~data & m_interrupt_mask; // 1->0
+
+	if (ack_mask & 1)
+		m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+
+	if (ack_mask & 6)
+		m_maincpu->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
+
+	m_interrupt_mask = data & 7;
 }
 
 WRITE8_MEMBER(ironhors_state::sh_irqtrigger_w)
@@ -63,7 +75,7 @@
 {
 	map(0x0000, 0x0002).ram();
 	map(0x0003, 0x0003).ram().w(this, FUNC(ironhors_state::charbank_w));
-	map(0x0004, 0x0004).ram().share("int_enable");
+	map(0x0004, 0x0004).ram().w(this, FUNC(ironhors_state::irq_ctrl_w));
 	map(0x0005, 0x001f).ram();
 	map(0x0020, 0x003f).ram().share("scroll");
 	map(0x0040, 0x005f).ram();
@@ -122,7 +134,7 @@
 
 
 	map(0x1800, 0x1800).w(this, FUNC(ironhors_state::sh_irqtrigger_w));
-	map(0x1a00, 0x1a00).ram().share("int_enable");
+	map(0x1a00, 0x1a00).ram().w(this, FUNC(ironhors_state::irq_enable_w));
 	map(0x1a01, 0x1a01).ram().w(this, FUNC(ironhors_state::charbank_w));
 	map(0x1a02, 0x1a02).w(this, FUNC(ironhors_state::palettebank_w));
 //  map(0x1c00, 0x1fff).ram();
@@ -355,6 +367,10 @@
 	save_item(NAME(m_palettebank));
 	save_item(NAME(m_charbank));
 	save_item(NAME(m_spriterambank));
+	save_item(NAME(m_interrupt_mask));
+	save_item(NAME(m_interrupt_ticks));
+	save_item(NAME(m_irq_enable));
+	save_item(NAME(m_nmi_enable));
 }
 
 void ironhors_state::machine_reset()
@@ -362,6 +378,10 @@
 	m_palettebank = 0;
 	m_charbank = 0;
 	m_spriterambank = 0;
+	m_interrupt_mask = 0;
+	m_interrupt_ticks = 0;
+	m_irq_enable = 0;
+	m_nmi_enable = 0;
 }
 
 /*
@@ -382,21 +402,18 @@
 MACHINE_CONFIG_START(ironhors_state::ironhors)
 
 	/* basic machine hardware */
-	MCFG_CPU_ADD("maincpu", MC6809E, 18432000/6)        /* 3.072 MHz??? mod by Shingo Suzuki 1999/10/15 */
+	MCFG_CPU_ADD("maincpu", MC6809E, MASTER_CLOCK/6)        /* 3.072 MHz??? mod by Shingo Suzuki 1999/10/15 */
 	MCFG_CPU_PROGRAM_MAP(master_map)
-	MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ironhors_state, irq, "screen", 0, 1)
+	MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", ironhors_state, interrupt_tick, "screen", 0,16)
 
-	MCFG_CPU_ADD("soundcpu", Z80, 18432000/6)      /* 3.072 MHz */
+	MCFG_CPU_ADD("soundcpu", Z80, MASTER_CLOCK/6)      /* 3.072 MHz */
 	MCFG_CPU_PROGRAM_MAP(slave_map)
 	MCFG_CPU_IO_MAP(slave_io_map)
 
 
 	/* video hardware */
 	MCFG_SCREEN_ADD("screen", RASTER)
-	MCFG_SCREEN_REFRESH_RATE(30)
-	MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
-	MCFG_SCREEN_SIZE(32*8, 32*
-	MCFG_SCREEN_VISIBLE_AREA(1*8, 31*8-1, 2*8, 30*8-1)
+	MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/3, 396, 8, 248, 256, 16, 240)
 	MCFG_SCREEN_UPDATE_DRIVER(ironhors_state, screen_update)
 	MCFG_SCREEN_PALETTE("palette")
 
@@ -410,7 +427,7 @@
 
 	MCFG_GENERIC_LATCH_8_ADD("soundlatch")
 
-	MCFG_SOUND_ADD("ym2203", YM2203, 18432000/6)
+	MCFG_SOUND_ADD("ym2203", YM2203, MASTER_CLOCK/6)
 	MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(ironhors_state, filter_w))
 
 	MCFG_SOUND_ROUTE_EX(0, "disc_ih", 1.0, 0)
@@ -424,20 +441,26 @@
 
 MACHINE_CONFIG_END
 
-TIMER_DEVICE_CALLBACK_MEMBER(ironhors_state::farwest_irq)
+WRITE8_MEMBER(ironhors_state::irq_enable_w)
 {
-	int scanline = param;
+	uint8_t mask = data & 0x07;		// check only bits 0,1,2
 
-	if ((scanline % 2) == 1)
-	{
-		if (*m_interrupt_enable & 4)
-			m_maincpu->set_input_line(M6809_FIRQ_LINE, HOLD_LINE);
-	}
-	else if ((scanline % 2) == 0)
-	{
-		if (*m_interrupt_enable & 1)
-			m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
-	}
+	m_nmi_enable = mask & 0x01;		// bit 0 NMI
+	m_irq_enable = mask & 0x05;		// bit 2 IRQ
+	
+	// bit 4 is also used....
+}
+
+INTERRUPT_GEN_MEMBER(ironhors_state::farwest_irq)
+{
+	if (m_irq_enable)
+		m_maincpu->set_input_line(M6809_FIRQ_LINE, HOLD_LINE);
+}
+
+INTERRUPT_GEN_MEMBER(ironhors_state::farwest_irq_nmi)
+{
+	if (m_nmi_enable)
+		m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
 }
 
 READ8_MEMBER(ironhors_state::farwest_soundlatch_r)
@@ -450,9 +473,9 @@
 
 	MCFG_CPU_MODIFY("maincpu")
 	MCFG_CPU_PROGRAM_MAP(farwest_master_map)
-	MCFG_DEVICE_MODIFY("scantimer")
-	MCFG_TIMER_DRIVER_CALLBACK(ironhors_state, farwest_irq)
-
+	MCFG_CPU_VBLANK_INT_DRIVER("screen", ironhors_state, farwest_irq)
+	MCFG_CPU_PERIODIC_INT_DRIVER(ironhors_state, farwest_irq_nmi, 480)		/* 8*60, seems ok */
+	MCFG_DEVICE_REMOVE("scantimer")
 	MCFG_CPU_MODIFY("soundcpu")
 	MCFG_CPU_PROGRAM_MAP(farwest_slave_map)
 	MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_IO)

 

diff -Nru src/mame/includes/ironhors.h src-fx/mame/includes/ironhors.h
--- src/mame/includes/ironhors.h	Tue Mar 27 17:55:16 2018
+++ src-fx/mame/includes/ironhors.h	Sun Apr  1 13:47:40 2018
@@ -10,6 +10,8 @@
 #include "machine/timer.h"
 #include "sound/discrete.h"
 
+#define MASTER_CLOCK        XTAL(18'432'000)
+
 class ironhors_state : public driver_device
 {
 public:
@@ -21,7 +23,6 @@
 		m_palette(*this, "palette"),
 		m_soundlatch(*this, "soundlatch"),
 		m_disc_ih(*this, "disc_ih"),
-		m_interrupt_enable(*this, "int_enable"),
 		m_scroll(*this, "scroll"),
 		m_colorram(*this, "colorram"),
 		m_videoram(*this, "videoram"),
@@ -36,12 +37,16 @@
 	DECLARE_WRITE8_MEMBER(flipscreen_w);
 	DECLARE_WRITE8_MEMBER(filter_w);
 	DECLARE_READ8_MEMBER(farwest_soundlatch_r);
+	DECLARE_WRITE8_MEMBER(irq_ctrl_w);
+	DECLARE_WRITE8_MEMBER(irq_enable_w);
 
 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
 	uint32_t screen_update_farwest(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
 
-	TIMER_DEVICE_CALLBACK_MEMBER(irq);
 	TIMER_DEVICE_CALLBACK_MEMBER(farwest_irq);
+	TIMER_DEVICE_CALLBACK_MEMBER(interrupt_tick);
+	INTERRUPT_GEN_MEMBER(farwest_irq);
+	INTERRUPT_GEN_MEMBER(farwest_irq_nmi);
 
 	DECLARE_PALETTE_INIT(ironhors);
 	DECLARE_VIDEO_START(farwest);
@@ -68,7 +73,7 @@
 	required_device<discrete_device> m_disc_ih;
 
 	/* memory pointers */
-	required_shared_ptr<uint8_t> m_interrupt_enable;
+	//required_shared_ptr<uint8_t> m_interrupt_enable;
 	required_shared_ptr<uint8_t> m_scroll;
 	required_shared_ptr<uint8_t> m_colorram;
 	required_shared_ptr<uint8_t> m_videoram;
@@ -80,6 +85,10 @@
 	int        m_palettebank;
 	int        m_charbank;
 	int        m_spriterambank;
+	uint8_t m_interrupt_mask;
+	uint8_t m_interrupt_ticks;
+	uint8_t m_irq_enable;
+	uint8_t m_nmi_enable;
 
 	void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
 	void farwest_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );

 

Edited by haynor666

Share this post


Link to post
Share on other sites

Fixed the snapshot directory for next time.

 

As for Iron Horse, what's the difference? Does it work better?

Share this post


Link to post
Share on other sites

My code fixes http://mametesters.org/view.php?id=4621

 

I also received a mail with a feature request:

- Implement a sort of Most Recent Used Games List. In particular the last ten games played.

 

I know you are busy and looks like a feature request that requires surely a lot of coding. I cannot help for the moment and sincerely I have no idea in how to implement a MRU list in the GUI.

Share this post


Link to post
Share on other sites

MameSick code wasn't in latest arcade196s.rar. Also latest build does not have modified source implemented. I didn't know why so I fixed source to save time.

Share this post


Link to post
Share on other sites

In Xain'd Sleena does it have black borders round the screen in the arcade as can't remember it being like that,

it starts off in full screen with no black borders but some of the game play does,

Share this post


Link to post
Share on other sites

MAME does the same. I've never played the real machine, maybe someone else might know.

 

 

I received a PM (why?) about adding those tiger etc handhelds to Arcade. What do you guys think of that?

 

 

Mamesick, I think they call that thing a jumplist. But I'm not going to work on that. Whoever it is can create a favourites list on the left side.

 

I'll check out that Iron Horse thing later.

Share this post


Link to post
Share on other sites

Well, I put Iron Horse back to what it was, and then ran mame and arcade side-by-side. I couldn't tell any difference, apart from mame running ever-so-slightly faster. There's no difference in the screen or the sound.

Share this post


Link to post
Share on other sites

Thanks.

 

BTW. You could at least take this part of changes:

 

diff -Nru src/mame/drivers/thunderx.cpp src-fx/mame/drivers/thunderx.cpp
--- src/mame/drivers/thunderx.cpp	Wed Jan 31 00:19:01 2018
+++ src-fx/mame/drivers/thunderx.cpp	Wed Feb  7 19:49:16 2018
@@ -719,6 +725,11 @@
 
 	MCFG_DEVICE_MODIFY("k052109")
 	MCFG_K052109_CB(thunderx_state, gbusters_tile_callback)
+
+	/* video hardware */
+	MCFG_SCREEN_MODIFY("screen")
+	MCFG_SCREEN_REFRESH_RATE(59.17)
+	MCFG_SCREEN_VISIBLE_AREA(14*8, (64-14)*8-1, 2*8, 30*8-1 )
 MACHINE_CONFIG_END

 

diff -Nru src/mame/drivers/tmnt.cpp src-fx/mame/drivers/tmnt.cpp
--- src/mame/drivers/tmnt.cpp	Wed Jan 31 00:19:01 2018
+++ src-fx/mame/drivers/tmnt.cpp	Wed Feb  7 19:49:20 2018
@@ -2208,7 +2208,7 @@
 	MCFG_SCREEN_REFRESH_RATE(60)
 	MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
 	MCFG_SCREEN_SIZE(64*8, 32*
-	MCFG_SCREEN_VISIBLE_AREA(12*8, (64-12)*8-1, 2*8, 30*8-1 )
+	MCFG_SCREEN_VISIBLE_AREA(14*8, (64-15)*8-1, 2*8, 30*8-1 )
 	MCFG_SCREEN_UPDATE_DRIVER(tmnt_state, screen_update_lgtnfght)
 	MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(tmnt_state, screen_vblank_blswhstl))
 	MCFG_SCREEN_PALETTE("palette")

 

Those black bars are really ugly. I'm suprised that people didn't complained so far.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...