summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Phil Bennett <philipjbennett@users.noreply.github.com>2010-07-29 07:50:36 +0000
committer Phil Bennett <philipjbennett@users.noreply.github.com>2010-07-29 07:50:36 +0000
commit8547230f726006da1c57f1baba9afeb3e9d79c5a (patch)
tree69e97247f0b8d563b7aa4656ad1dc16655dde351
parentd887c253711d97a123bb25726b8266ff9614bf99 (diff)
mpu4.c: Added splitscreen support to SCN2674 for MPU4 Video. [AGEMAME]
-rw-r--r--src/mame/drivers/mpu4.c34
-rw-r--r--src/mame/drivers/mpu4drvr.c112
2 files changed, 101 insertions, 45 deletions
diff --git a/src/mame/drivers/mpu4.c b/src/mame/drivers/mpu4.c
index 93e73fdc22e..1b1af61b7e8 100644
--- a/src/mame/drivers/mpu4.c
+++ b/src/mame/drivers/mpu4.c
@@ -1918,6 +1918,11 @@ static MACHINE_DRIVER_START( mpu4dutch )
MDRV_MACHINE_START(mpu4dutch) // main mpu4 board initialisation
MACHINE_DRIVER_END
+static DRIVER_INIT (connect4)
+{
+ led_extend=1;
+}
+
ROM_START( m_oldtmr )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "dot11.bin", 0x00000, 0x10000, CRC(da095666) SHA1(bc7654dc9da1f830a43f925db8079f27e18bb61e))
@@ -1933,9 +1938,38 @@ ROM_START( m_gmball )
ROM_LOAD( "gbbx.p1", 0x0000, 0x10000, CRC(0b5adcd0) SHA1(1a198bd4a1e7d6bf4cf025c43d35aaef351415fc))
ROM_END
+ROM_START( connect4 )
+ ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD( "connect4.p2", 0x8000, 0x4000, CRC(6090633c) SHA1(0cd2725a235bf93cfe94f2ca648d5fccb87b8e5c) )
+ ROM_LOAD( "connect4.p1", 0xC000, 0x4000, CRC(b1af50c0) SHA1(7c9645ea378f0857b849ca24a239d9114f62da7f) )
+ROM_END
+
+ROM_START( mpu4utst )
+ ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD( "ut4.p1", 0xC000, 0x4000, CRC(086dc325) SHA1(923caeb61347ac9d3e6bcec45998ddf04b2c8ffd))
+ROM_END
+
+ROM_START( mpu4tst2 )
+ ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD( "ut2.p1", 0xE000, 0x2000, CRC(f7fb6575) SHA1(f7961cbd0801b9561d8cd2d23081043d733e1902))
+ROM_END
+
+ROM_START( mpu4met0 )
+ ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD( "meter-zero.p1", 0x8000, 0x8000, CRC(e74297e5) SHA1(49a2cc85eda14199975ec37a794b685c839d3ab9))
+ROM_END
+
// year, name, parent, machine, input, init, monitor, company, fullname, flags
GAME( 198?, m_oldtmr,0, mpu4dutch,mpu4, 0, ROT0, "Barcrest", "Old Timer", GAME_NOT_WORKING|GAME_NO_SOUND|GAME_REQUIRES_ARTWORK )
GAME( 198?, m_ccelbr,0, mpu4mod2, mpu4, m_ccelbr, ROT0, "Barcrest", "Club Celebration", GAME_NOT_WORKING|GAME_REQUIRES_ARTWORK )
GAMEL(198?, m_gmball,0, mod4yam, gamball, m_gmball, ROT0, "Barcrest", "Gamball", GAME_NOT_WORKING|GAME_REQUIRES_ARTWORK,layout_gamball )
+//SWP
+GAMEL(1989?, connect4, 0, mpu4mod2, connect4, connect4, ROT0, "Dolbeck Systems","Connect 4", GAME_IMPERFECT_GRAPHICS|GAME_REQUIRES_ARTWORK,layout_connect4 )
+
+//Diagnostic ROMs
+GAME( 198?, mpu4utst, 0, mpu4mod2, mpu4, 0, ROT0, "Barcrest", "MPU4 Unit Test (Program 4)", 0 )
+GAME( 198?, mpu4tst2, 0, mpu4mod2, mpu4, 0, ROT0, "Barcrest", "MPU4 Unit Test (Program 2)", 0 )
+GAME( 198?, mpu4met0, 0, mpu4mod2, mpu4, 0, ROT0, "Barcrest", "MPU4 Meter Clear ROM", 0 )
+
#include "drivers/mpu4drvr.c"
diff --git a/src/mame/drivers/mpu4drvr.c b/src/mame/drivers/mpu4drvr.c
index 8ef7aef121a..a6ab384bcc6 100644
--- a/src/mame/drivers/mpu4drvr.c
+++ b/src/mame/drivers/mpu4drvr.c
@@ -221,6 +221,13 @@ static UINT8 scn2674_cursor_h;
static UINT8 scn2674_screen2_l;
static UINT8 scn2674_screen2_h;
+static UINT8 scn2674_irq_register = 0;
+static UINT8 scn2674_status_register = 0;
+static UINT8 scn2674_irq_mask = 0;
+static UINT8 scn2674_gfx_enabled;
+static UINT8 scn2674_display_enabled;
+static UINT8 scn2674_cursor_enabled;
+
static READ16_HANDLER( characteriser16_r );
static WRITE16_HANDLER( characteriser16_w );
@@ -477,8 +484,6 @@ static UINT8 IR13_scn2674_split_register_2;
static VIDEO_UPDATE( mpu4_vid )
{
- int i;
-
int x, y/*, count = 0*/;
bitmap_fill(bitmap,cliprect,0);
@@ -489,6 +494,66 @@ static VIDEO_UPDATE( mpu4_vid )
/* we're in row table mode...thats why */
for(y = 0; y <= IR4_scn2674_rows_per_screen; y++)
{
+
+ if (y == 0)
+ {
+ scn2674_status_register |= 0x02;
+ /* Ready - this triggers for the first scanline of the screen */
+ if (scn2674_irq_mask&0x02)
+ {
+ LOGSTUFF(("SCN2674 Ready\n"));
+ scn2674_irq_state = 1;
+ scn2674_irq_register |= 0x02;
+ update_mpu68_interrupts(screen->machine);
+ }
+ }
+ /* Line 0 - this triggers for the first scanline of each row
+ Since we are doing this row by row, just call every time*/
+ scn2674_status_register |= 0x08;
+ if (scn2674_irq_mask&0x08)
+ {
+ LOGSTUFF(("SCN2674 Line Zero\n"));
+ scn2674_irq_state = 1;
+ scn2674_irq_register |= 0x08;
+ update_mpu68_interrupts(screen->machine);
+ }
+
+ if (y == IR12_scn2674_split_register_1)
+ /* Split Screen 1 */
+ {
+ if (scn2674_screen2_h & 0x40)
+ {
+ popmessage("Split screen 1 address shift required, contact MAMEDEV");
+ }
+ scn2674_status_register |= 0x04;
+ if (scn2674_irq_mask&0x04)
+ {
+ LOGSTUFF(("SCN2674 Split Screen 1\n"));
+ scn2674_irq_state = 1;
+ update_mpu68_interrupts(screen->machine);
+
+ scn2674_irq_register |= 0x04;
+ }
+ }
+
+ if (y == IR13_scn2674_split_register_2)
+ /* Split Screen 2 */
+ {
+ if (scn2674_screen2_h & 0x80)
+ {
+ popmessage("Split screen 2 address shift required, contact MAMEDEV");
+ }
+ scn2674_status_register |= 0x01;
+ if (scn2674_irq_mask&0x01)
+ {
+ LOGSTUFF(("SCN2674 Split Screen 2 irq\n"));
+ scn2674_irq_state = 1;
+ scn2674_irq_register |= 0x01;
+ update_mpu68_interrupts(screen->machine);
+ }
+
+ }
+
int screen2_base = (scn2674_screen2_h << 8) | scn2674_screen2_l;
UINT16 rowbase = (mpu4_vid_mainram[1+screen2_base+(y*2)]<<8)|mpu4_vid_mainram[screen2_base+(y*2)];
@@ -517,9 +582,6 @@ static VIDEO_UPDATE( mpu4_vid )
}
- for (i = 0; i < 8; i++)
- mpu4_draw_led(i, led_segs[i]);
-
return 0;
}
@@ -683,13 +745,6 @@ static void scn2674_write_init_regs(UINT8 data)
if (scn2675_IR_pointer>14)scn2675_IR_pointer=14;
}
-static UINT8 scn2674_irq_register = 0;
-static UINT8 scn2674_status_register = 0;
-static UINT8 scn2674_irq_mask = 0;
-static UINT8 scn2674_gfx_enabled;
-static UINT8 scn2674_display_enabled;
-static UINT8 scn2674_cursor_enabled;
-
static void scn2674_write_command(running_machine *machine, UINT8 data)
{
UINT8 oprand;
@@ -3051,33 +3106,6 @@ ROM_START( vgpoker )
ROM_LOAD16_BYTE("video-7.bin", 0x060000, 0x010000, CRC(231cf163) SHA1(02b28ef0e1661a82d0fba2ecc5474c79651fa9e7))
ROM_LOAD16_BYTE("video-8.bin", 0x060001, 0x010000, CRC(076efdc8) SHA1(bef0a1d8f0e7486ee5dc7407ce5c96854cefa5cf))
ROM_END
-
-ROM_START( connect4 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
- ROM_LOAD( "connect4.p2", 0x8000, 0x4000, CRC(6090633c) SHA1(0cd2725a235bf93cfe94f2ca648d5fccb87b8e5c) )
- ROM_LOAD( "connect4.p1", 0xC000, 0x4000, CRC(b1af50c0) SHA1(7c9645ea378f0857b849ca24a239d9114f62da7f) )
-ROM_END
-
-ROM_START( mpu4utst )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
- ROM_LOAD( "ut4.p1", 0xC000, 0x4000, CRC(086dc325) SHA1(923caeb61347ac9d3e6bcec45998ddf04b2c8ffd))
-ROM_END
-
-ROM_START( mpu4tst2 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
- ROM_LOAD( "ut2.p1", 0xE000, 0x2000, CRC(f7fb6575) SHA1(f7961cbd0801b9561d8cd2d23081043d733e1902))
-ROM_END
-
-ROM_START( mpu4met0 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
- ROM_LOAD( "meter-zero.p1", 0x8000, 0x8000, CRC(e74297e5) SHA1(49a2cc85eda14199975ec37a794b685c839d3ab9))
-ROM_END
-
-static DRIVER_INIT (connect4)
-{
- led_extend=1;
-}
-
/*Deal 'Em was a conversion kit designed to make early MPU4 machines into video games by replacing the top glass
and reel assembly with this kit and a supplied monitor.
The real Deal 'Em ran on Summit Coin hardware, and was made by someone else.
@@ -3138,9 +3166,3 @@ GAME( 199?, vgpoker, 0, vgpoker, mpu4, 0, ROT0, "BwB", "
GAME( 199?, prizeinv, 0, mpu4_vid, mpu4, 0, ROT0, "BwB", "Prize Space Invaders (20\" v1.1)", GAME_NOT_WORKING )
GAME( 199?, blox, 0, mpu4_vid, mpu4, 0, ROT0, "BwB", "Blox (v2.0)", GAME_NOT_WORKING )
GAME( 199?, bloxd, blox, mpu4_vid, mpu4, 0, ROT0, "BwB", "Blox (v2.0, Datapak)", GAME_NOT_WORKING )
-
-/* Games below are non-video (why are they in this file? not mpu4.c?) */
-GAMEL(1989?, connect4, 0, mpu4mod2, connect4, connect4, ROT0, "Dolbeck Systems","Connect 4", GAME_IMPERFECT_GRAPHICS|GAME_REQUIRES_ARTWORK,layout_connect4 )
-GAME( 198?, mpu4utst, 0, mpu4mod2, mpu4, 0, ROT0, "Barcrest", "MPU4 Unit Test (Program 4)", 0 )
-GAME( 198?, mpu4tst2, 0, mpu4mod2, mpu4, 0, ROT0, "Barcrest", "MPU4 Unit Test (Program 2)", 0 )
-GAME( 198?, mpu4met0, 0, mpu4mod2, mpu4, 0, ROT0, "Barcrest", "MPU4 Meter Clear ROM", 0 )