summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Andrew Gardner <andrew.gardner@liu.se>2015-11-23 11:45:18 +0100
committer Andrew Gardner <andrew.gardner@liu.se>2015-11-23 11:45:18 +0100
commitcf53d9f2e59690f5371b7236ccdd5fedd990d353 (patch)
treeae7c7e89568108ab1d07495b1ea40f0df38cdf16 /src
parent4b4b6596799749fdd77f8aaf25e0b2f3289dba4a (diff)
Revert AVG/DVG device scheduler changes. A bit more research needs to be done
before it can be considered 100% stable.
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/asteroid.cpp38
-rw-r--r--src/mame/drivers/bwidow.cpp6
-rw-r--r--src/mame/drivers/bzone.cpp14
-rw-r--r--src/mame/drivers/mhavoc.cpp14
-rw-r--r--src/mame/drivers/omegrace.cpp2
-rw-r--r--src/mame/drivers/quantum.cpp2
-rw-r--r--src/mame/drivers/starwars.cpp2
-rw-r--r--src/mame/drivers/tempest.cpp2
-rw-r--r--src/mame/drivers/tomcat.cpp4
-rw-r--r--src/mame/machine/asteroid.cpp5
-rw-r--r--src/mame/video/avgdvg.cpp195
-rw-r--r--src/mame/video/avgdvg.h22
12 files changed, 158 insertions, 148 deletions
diff --git a/src/mame/drivers/asteroid.cpp b/src/mame/drivers/asteroid.cpp
index e487e737f41..b8b8720c2bb 100644
--- a/src/mame/drivers/asteroid.cpp
+++ b/src/mame/drivers/asteroid.cpp
@@ -655,7 +655,7 @@ static MACHINE_CONFIG_START( asteroid, asteroid_state )
MCFG_SCREEN_VISIBLE_AREA(522, 1566, 394, 1182)
MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update)
- MCFG_DEVICE_ADD("dvg", DVG, MASTER_CLOCK)
+ MCFG_DEVICE_ADD("dvg", DVG, 0)
MCFG_AVGDVG_VECTOR("vector")
/* sound hardware */
@@ -1019,21 +1019,21 @@ DRIVER_INIT_MEMBER(asteroid_state,asterock)
*
*************************************/
-GAME( 1979, asteroid, 0, asteroid, asteroid, driver_device, 0, ROT0, "Atari", "Asteroids (rev 4)", MACHINE_SUPPORTS_SAVE )
-GAME( 1979, asteroid2, asteroid, asteroid, asteroid, driver_device, 0, ROT0, "Atari", "Asteroids (rev 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1979, asteroid1, asteroid, asteroid, asteroid, driver_device, 0, ROT0, "Atari", "Asteroids (rev 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1979, asteroidb, asteroid, asteroid, asteroidb, asteroid_state, asteroidb, ROT0, "bootleg", "Asteroids (bootleg on Lunar Lander hardware)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, aerolitos, asteroid, asteroid, aerolitos, driver_device, 0, ROT0, "bootleg (Rodmar Elec.)", "Aerolitos (Spanish bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE ) // 'Aerolitos' appears on the cabinet, this was distributed in Spain, the Spanish text is different to that contained in the original version (corrected)
-GAME( 1979, asterock, asteroid, asterock, asterock, asteroid_state, asterock, ROT0, "bootleg (Sidam)", "Asterock (Sidam bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
-GAME( 1979, asterockv, asteroid, asterock, asterock, asteroid_state, asterock, ROT0, "bootleg (Videotron)", "Asterock (Videotron bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
-GAME( 1979, meteorts, asteroid, asteroid, asteroid, driver_device, 0, ROT0, "bootleg (VGG)", "Meteorites (bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
-GAME( 1979, meteorho, asteroid, asteroid, asteroid, driver_device, 0, ROT0, "bootleg (Hoei)", "Meteor (bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
-GAME( 1979, hyperspc, asteroid, asteroid, asteroid, driver_device, 0, ROT0, "bootleg (Rumiano)", "Hyperspace (bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
-
-GAMEL(1980, astdelux, 0, astdelux, astdelux, driver_device, 0, ROT0, "Atari", "Asteroids Deluxe (rev 3)", MACHINE_SUPPORTS_SAVE, layout_astdelux )
-GAMEL(1980, astdelux2, astdelux, astdelux, astdelux, driver_device, 0, ROT0, "Atari", "Asteroids Deluxe (rev 2)", MACHINE_SUPPORTS_SAVE, layout_astdelux )
-GAMEL(1980, astdelux1, astdelux, astdelux, astdelux, driver_device, 0, ROT0, "Atari", "Asteroids Deluxe (rev 1)", MACHINE_SUPPORTS_SAVE, layout_astdelux )
-
-GAME( 1979, llander, 0, llander, llander, driver_device, 0, ROT0, "Atari", "Lunar Lander (rev 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1979, llander1, llander, llander, llander1, driver_device, 0, ROT0, "Atari", "Lunar Lander (rev 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1979, llandert, llander, llander, llandert, driver_device, 0, ROT0, "Atari", "Lunar Lander (screen test)", MACHINE_SUPPORTS_SAVE ) // no copyright shown, assume it's an in-house diagnostics romset (PCB came from a seller that has had Atari prototypes in his possession before)
+GAME( 1979, asteroid, 0, asteroid, asteroid, driver_device, 0, ROT0, "Atari", "Asteroids (rev 4)", MACHINE_SUPPORTS_SAVE )
+GAME( 1979, asteroid2, asteroid, asteroid, asteroid, driver_device, 0, ROT0, "Atari", "Asteroids (rev 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1979, asteroid1, asteroid, asteroid, asteroid, driver_device, 0, ROT0, "Atari", "Asteroids (rev 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1979, asteroidb, asteroid, asteroid, asteroidb, asteroid_state, asteroidb, ROT0, "bootleg", "Asteroids (bootleg on Lunar Lander hardware)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, aerolitos, asteroid, asteroid, aerolitos, driver_device, 0, ROT0, "bootleg (Rodmar Elec.)","Aerolitos (Spanish bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE ) // 'Aerolitos' appears on the cabinet, this was distributed in Spain, the Spanish text is different to that contained in the original version (corrected)
+GAME( 1979, asterock, asteroid, asterock, asterock, asteroid_state, asterock, ROT0, "bootleg (Sidam)", "Asterock (Sidam bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
+GAME( 1979, asterockv, asteroid, asterock, asterock, asteroid_state, asterock, ROT0, "bootleg (Videotron)", "Asterock (Videotron bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
+GAME( 1979, meteorts, asteroid, asteroid, asteroid, driver_device, 0, ROT0, "bootleg (VGG)", "Meteorites (bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
+GAME( 1979, meteorho, asteroid, asteroid, asteroid, driver_device, 0, ROT0, "bootleg (Hoei)", "Meteor (bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
+GAME( 1979, hyperspc, asteroid, asteroid, asteroid, driver_device, 0, ROT0, "bootleg (Rumiano)", "Hyperspace (bootleg of Asteroids)", MACHINE_SUPPORTS_SAVE )
+
+GAMEL(1980, astdelux, 0, astdelux, astdelux, driver_device, 0, ROT0, "Atari", "Asteroids Deluxe (rev 3)", MACHINE_SUPPORTS_SAVE, layout_astdelux )
+GAMEL(1980, astdelux2, astdelux, astdelux, astdelux, driver_device, 0, ROT0, "Atari", "Asteroids Deluxe (rev 2)", MACHINE_SUPPORTS_SAVE, layout_astdelux )
+GAMEL(1980, astdelux1, astdelux, astdelux, astdelux, driver_device, 0, ROT0, "Atari", "Asteroids Deluxe (rev 1)", MACHINE_SUPPORTS_SAVE, layout_astdelux )
+
+GAME( 1979, llander, 0, llander, llander, driver_device, 0, ROT0, "Atari", "Lunar Lander (rev 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1979, llander1, llander, llander, llander1, driver_device, 0, ROT0, "Atari", "Lunar Lander (rev 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1979, llandert, llander, llander, llandert, driver_device, 0, ROT0, "Atari", "Lunar Lander (screen test)", MACHINE_SUPPORTS_SAVE ) // no copyright shown, assume it's an in-house diagnostics romset (PCB came from a seller that has had Atari prototypes in his possession before)
diff --git a/src/mame/drivers/bwidow.cpp b/src/mame/drivers/bwidow.cpp
index 7989a3aae86..afe5c9654d7 100644
--- a/src/mame/drivers/bwidow.cpp
+++ b/src/mame/drivers/bwidow.cpp
@@ -745,7 +745,7 @@ static MACHINE_CONFIG_START( bwidow, bwidow_state )
MCFG_SCREEN_VISIBLE_AREA(0, 480, 0, 440)
MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update)
- MCFG_DEVICE_ADD("avg", AVG, MASTER_CLOCK)
+ MCFG_DEVICE_ADD("avg", AVG, 0)
MCFG_AVGDVG_VECTOR("vector")
/* sound hardware */
@@ -1062,8 +1062,8 @@ ROM_END
GAME( 1980, spacduel, 0, spacduel, spacduel, driver_device, 0, ROT0, "Atari", "Space Duel (version 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, spacduel1,spacduel, spacduel, spacduel, driver_device, 0, ROT0, "Atari", "Space Duel (version 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, spacduel0,spacduel, spacduel, spacduel, driver_device, 0, ROT0, "Atari", "Space Duel (prototype)", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, bwidow, 0, bwidow, bwidow, driver_device, 0, ROT0, "Atari", "Black Widow", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, bwidowp, bwidow, bwidowp, bwidow, driver_device, 0, ROT0, "Atari", "Black Widow (prototype)", MACHINE_NOT_WORKING )
+GAME( 1982, bwidow, 0, bwidow, bwidow, driver_device, 0, ROT0, "Atari", "Black Widow", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, bwidowp, bwidow, bwidowp, bwidow, driver_device, 0, ROT0, "Atari", "Black Widow (prototype)", MACHINE_NOT_WORKING )
GAME( 1982, gravitar, 0, gravitar, gravitar, driver_device, 0, ROT0, "Atari", "Gravitar (version 3)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, gravitar2,gravitar, gravitar, gravitar, driver_device, 0, ROT0, "Atari", "Gravitar (version 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, gravitar1,gravitar, gravitar, gravitar, driver_device, 0, ROT0, "Atari", "Gravitar (version 1)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/bzone.cpp b/src/mame/drivers/bzone.cpp
index b7af7deba0e..03601f5cb6e 100644
--- a/src/mame/drivers/bzone.cpp
+++ b/src/mame/drivers/bzone.cpp
@@ -546,7 +546,7 @@ static MACHINE_CONFIG_START( bzone_base, bzone_state )
MCFG_SCREEN_VISIBLE_AREA(0, 580, 0, 400)
MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update)
- MCFG_DEVICE_ADD("avg", AVG_BZONE, XTAL_12_096MHz)
+ MCFG_DEVICE_ADD("avg", AVG_BZONE, 0)
MCFG_AVGDVG_VECTOR("vector")
/* Drivers */
@@ -875,9 +875,9 @@ DRIVER_INIT_MEMBER(bzone_state,bradley)
*
*************************************/
-GAMEL( 1980, bzone, 0, bzone, bzone, driver_device, 0, ROT0, "Atari", "Battle Zone (rev 2)", MACHINE_SUPPORTS_SAVE, layout_bzone )
-GAMEL( 1980, bzonea, bzone, bzone, bzone, driver_device, 0, ROT0, "Atari", "Battle Zone (rev 1)", MACHINE_SUPPORTS_SAVE, layout_bzone )
-GAMEL( 1980, bzonec, bzone, bzone, bzone, driver_device, 0, ROT0, "Atari", "Battle Zone (cocktail)", MACHINE_SUPPORTS_SAVE|MACHINE_NO_COCKTAIL, layout_bzone )
-GAME ( 1980, bradley, 0, bzone, bradley, bzone_state, bradley, ROT0, "Atari", "Bradley Trainer", MACHINE_SUPPORTS_SAVE )
-GAMEL( 1980, redbaron, 0, redbaron, redbaron, driver_device, 0, ROT0, "Atari", "Red Baron (Revised Hardware)", MACHINE_SUPPORTS_SAVE, layout_redbaron )
-GAMEL( 1980, redbarona, redbaron, redbaron, redbaron, driver_device, 0, ROT0, "Atari", "Red Baron", MACHINE_SUPPORTS_SAVE, layout_redbaron )
+GAMEL(1980, bzone, 0, bzone, bzone, driver_device, 0, ROT0, "Atari", "Battle Zone (rev 2)", MACHINE_SUPPORTS_SAVE, layout_bzone )
+GAMEL(1980, bzonea, bzone, bzone, bzone, driver_device, 0, ROT0, "Atari", "Battle Zone (rev 1)", MACHINE_SUPPORTS_SAVE, layout_bzone )
+GAMEL(1980, bzonec, bzone, bzone, bzone, driver_device, 0, ROT0, "Atari", "Battle Zone (cocktail)", MACHINE_SUPPORTS_SAVE|MACHINE_NO_COCKTAIL, layout_bzone )
+GAME( 1980, bradley, 0, bzone, bradley, bzone_state, bradley, ROT0, "Atari", "Bradley Trainer", MACHINE_SUPPORTS_SAVE )
+GAMEL(1980, redbaron, 0, redbaron, redbaron, driver_device, 0, ROT0, "Atari", "Red Baron (Revised Hardware)", MACHINE_SUPPORTS_SAVE, layout_redbaron )
+GAMEL(1980, redbarona, redbaron, redbaron, redbaron, driver_device, 0, ROT0, "Atari", "Red Baron", MACHINE_SUPPORTS_SAVE, layout_redbaron )
diff --git a/src/mame/drivers/mhavoc.cpp b/src/mame/drivers/mhavoc.cpp
index 2909da27dde..f039a8d5596 100644
--- a/src/mame/drivers/mhavoc.cpp
+++ b/src/mame/drivers/mhavoc.cpp
@@ -505,7 +505,7 @@ static MACHINE_CONFIG_START( mhavoc, mhavoc_state )
MCFG_SCREEN_VISIBLE_AREA(0, 300, 0, 260)
MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update)
- MCFG_DEVICE_ADD("avg", AVG_MHAVOC, XTAL_12_096MHz)
+ MCFG_DEVICE_ADD("avg", AVG_MHAVOC, 0)
MCFG_AVGDVG_VECTOR("vector")
/* sound hardware */
@@ -763,9 +763,9 @@ ROM_END
*
*************************************/
-GAME( 1983, mhavoc, 0, mhavoc, mhavoc, driver_device, 0, ROT0, "Atari", "Major Havoc (rev 3)", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, mhavoc2, mhavoc, mhavoc, mhavoc, driver_device, 0, ROT0, "Atari", "Major Havoc (rev 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, mhavocrv, mhavoc, mhavocrv, mhavocrv, mhavoc_state, mhavocrv, ROT0, "Atari / JMA", "Major Havoc (Return to Vax)", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, mhavocp, mhavoc, mhavoc, mhavocp, driver_device, 0, ROT0, "Atari", "Major Havoc (prototype)", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, alphaone, mhavoc, alphaone, alphaone, driver_device, 0, ROT0, "Atari", "Alpha One (prototype, 3 lives)", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, alphaonea,mhavoc, alphaone, alphaone, driver_device, 0, ROT0, "Atari", "Alpha One (prototype, 5 lives)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, mhavoc, 0, mhavoc, mhavoc, driver_device, 0, ROT0, "Atari", "Major Havoc (rev 3)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, mhavoc2, mhavoc, mhavoc, mhavoc, driver_device, 0, ROT0, "Atari", "Major Havoc (rev 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, mhavocrv, mhavoc, mhavocrv, mhavocrv, mhavoc_state, mhavocrv, ROT0, "Atari / JMA", "Major Havoc (Return to Vax)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, mhavocp, mhavoc, mhavoc, mhavocp, driver_device, 0, ROT0, "Atari", "Major Havoc (prototype)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, alphaone, mhavoc, alphaone, alphaone, driver_device, 0, ROT0, "Atari", "Alpha One (prototype, 3 lives)", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, alphaonea,mhavoc, alphaone, alphaone, driver_device, 0, ROT0, "Atari", "Alpha One (prototype, 5 lives)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/omegrace.cpp b/src/mame/drivers/omegrace.cpp
index a5da3412001..7f7ef74044f 100644
--- a/src/mame/drivers/omegrace.cpp
+++ b/src/mame/drivers/omegrace.cpp
@@ -521,7 +521,7 @@ static MACHINE_CONFIG_START( omegrace, omegrace_state )
MCFG_SCREEN_VISIBLE_AREA(522, 1566, 522, 1566)
MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update)
- MCFG_DEVICE_ADD("dvg", DVG, XTAL_12MHz)
+ MCFG_DEVICE_ADD("dvg", DVG, 0)
MCFG_AVGDVG_VECTOR("vector")
/* sound hardware */
diff --git a/src/mame/drivers/quantum.cpp b/src/mame/drivers/quantum.cpp
index 0a341cb1a4a..59c9bde6e6f 100644
--- a/src/mame/drivers/quantum.cpp
+++ b/src/mame/drivers/quantum.cpp
@@ -278,7 +278,7 @@ static MACHINE_CONFIG_START( quantum, quantum_state )
MCFG_SCREEN_VISIBLE_AREA(0, 900, 0, 600)
MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update)
- MCFG_DEVICE_ADD("avg", AVG_QUANTUM, MASTER_CLOCK)
+ MCFG_DEVICE_ADD("avg", AVG_QUANTUM, 0)
MCFG_AVGDVG_VECTOR("vector")
/* sound hardware */
diff --git a/src/mame/drivers/starwars.cpp b/src/mame/drivers/starwars.cpp
index 26b20f94933..d0c9027ff1c 100644
--- a/src/mame/drivers/starwars.cpp
+++ b/src/mame/drivers/starwars.cpp
@@ -355,7 +355,7 @@ static MACHINE_CONFIG_START( starwars, starwars_state )
MCFG_SCREEN_VISIBLE_AREA(0, 250, 0, 280)
MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update)
- MCFG_DEVICE_ADD("avg", AVG_STARWARS, MASTER_CLOCK)
+ MCFG_DEVICE_ADD("avg", AVG_STARWARS, 0)
MCFG_AVGDVG_VECTOR("vector")
/* sound hardware */
diff --git a/src/mame/drivers/tempest.cpp b/src/mame/drivers/tempest.cpp
index c3beebe7c35..507d01a6e0b 100644
--- a/src/mame/drivers/tempest.cpp
+++ b/src/mame/drivers/tempest.cpp
@@ -603,7 +603,7 @@ static MACHINE_CONFIG_START( tempest, tempest_state )
MCFG_SCREEN_VISIBLE_AREA(0, 580, 0, 570)
MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update)
- MCFG_DEVICE_ADD("avg", AVG_TEMPEST, MASTER_CLOCK)
+ MCFG_DEVICE_ADD("avg", AVG_TEMPEST, 0)
MCFG_AVGDVG_VECTOR("vector")
/* Drivers */
diff --git a/src/mame/drivers/tomcat.cpp b/src/mame/drivers/tomcat.cpp
index b7854a2d8ca..de60c5f8bfc 100644
--- a/src/mame/drivers/tomcat.cpp
+++ b/src/mame/drivers/tomcat.cpp
@@ -426,7 +426,7 @@ static MACHINE_CONFIG_START( tomcat, tomcat_state )
MCFG_SCREEN_VISIBLE_AREA(0, 280, 0, 250)
MCFG_SCREEN_UPDATE_DEVICE("vector", vector_device, screen_update)
- MCFG_DEVICE_ADD("avg", AVG_TOMCAT, XTAL_12MHz)
+ MCFG_DEVICE_ADD("avg", AVG_TOMCAT, 0)
MCFG_AVGDVG_VECTOR("vector")
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@@ -454,4 +454,4 @@ ROM_START( tomcat )
ROM_LOAD( "136021-105.1l", 0x0000, 0x0100, CRC(82fc3eb2) SHA1(184231c7baef598294860a7d2b8a23798c5c7da6) ) /* AVG PROM */
ROM_END
-GAME( 1985, tomcat, 0, tomcat, tomcat, driver_device, 0, ROT0, "Atari", "TomCat (prototype)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, tomcat, 0, tomcat, tomcat, driver_device, 0, ROT0, "Atari", "TomCat (prototype)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/machine/asteroid.cpp b/src/mame/machine/asteroid.cpp
index 98026d3132a..37e252e6bd0 100644
--- a/src/mame/machine/asteroid.cpp
+++ b/src/mame/machine/asteroid.cpp
@@ -4,13 +4,14 @@
machine.c
- Functions to emulate general aspects of the machine
- (RAM, ROM, interrupts, I/O ports)
+ Functions to emulate general aspects of the machine (RAM, ROM, interrupts,
+ I/O ports)
***************************************************************************/
#include "emu.h"
#include "machine/atari_vg.h"
+#include "video/avgdvg.h"
#include "includes/asteroid.h"
diff --git a/src/mame/video/avgdvg.cpp b/src/mame/video/avgdvg.cpp
index a476a23cd42..4363db0e66c 100644
--- a/src/mame/video/avgdvg.cpp
+++ b/src/mame/video/avgdvg.cpp
@@ -22,6 +22,8 @@
*
*************************************/
+#define MASTER_CLOCK (12096000)
+#define VGSLICE (10000)
#define VGVECTOR 0
#define VGCLIP 1
@@ -41,20 +43,20 @@
void avgdvg_device::set_flip_x(int flip)
{
- m_flipx = flip;
+ flip_x = flip;
}
void avgdvg_device::set_flip_y(int flip)
{
- m_flipy = flip;
+ flip_y = flip;
}
void avgdvg_device::apply_flipping(int *x, int *y)
{
- if (m_flipx)
- *x += (m_xcenter - *x) << 1;
- if (m_flipy)
- *y += (m_ycenter - *y) << 1;
+ if (flip_x)
+ *x += (xcenter - *x) << 1;
+ if (flip_y)
+ *y += (ycenter - *y) << 1;
}
@@ -72,7 +74,7 @@ void avgdvg_device::vg_flush()
i++;
m_vector->add_point(vectbuf[i].x, vectbuf[i].y, vectbuf[i].color, 0);
- for (i = 0; i < m_nvect; i++)
+ for (i = 0; i < nvect; i++)
{
if (vectbuf[i].status == VGVECTOR)
m_vector->add_point(vectbuf[i].x, vectbuf[i].y, vectbuf[i].color, vectbuf[i].intensity);
@@ -81,32 +83,32 @@ void avgdvg_device::vg_flush()
m_vector->add_clip(vectbuf[i].x, vectbuf[i].y, vectbuf[i].arg1, vectbuf[i].arg2);
}
- m_nvect=0;
+ nvect=0;
}
void avgdvg_device::vg_add_point_buf(int x, int y, rgb_t color, int intensity)
{
- if (m_nvect < MAXVECT)
+ if (nvect < MAXVECT)
{
- vectbuf[m_nvect].status = VGVECTOR;
- vectbuf[m_nvect].x = x;
- vectbuf[m_nvect].y = y;
- vectbuf[m_nvect].color = color;
- vectbuf[m_nvect].intensity = intensity;
- m_nvect++;
+ vectbuf[nvect].status = VGVECTOR;
+ vectbuf[nvect].x = x;
+ vectbuf[nvect].y = y;
+ vectbuf[nvect].color = color;
+ vectbuf[nvect].intensity = intensity;
+ nvect++;
}
}
-void avgdvg_device::vg_add_clip(int xmin, int ymin, int xmax, int ymax)
+void avgdvg_device::vg_add_clip (int xmin, int ymin, int xmax, int ymax)
{
- if (m_nvect < MAXVECT)
+ if (nvect < MAXVECT)
{
- vectbuf[m_nvect].status = VGCLIP;
- vectbuf[m_nvect].x = xmin;
- vectbuf[m_nvect].y = ymin;
- vectbuf[m_nvect].arg1 = xmax;
- vectbuf[m_nvect].arg2 = ymax;
- m_nvect++;
+ vectbuf[nvect].status = VGCLIP;
+ vectbuf[nvect].x = xmin;
+ vectbuf[nvect].y = ymin;
+ vectbuf[nvect].arg1 = xmax;
+ vectbuf[nvect].arg2 = ymax;
+ nvect++;
}
}
@@ -119,7 +121,9 @@ void avgdvg_device::vg_add_clip(int xmin, int ymin, int xmax, int ymax)
void dvg_device::update_databus() // dvg_data
{
- // DVG uses low bit of state for address
+ /*
+ * DVG uses low bit of state for address
+ */
m_data = avgdvg_vectorram[(m_pc << 1) | (m_state_latch & 1)];
}
@@ -163,8 +167,8 @@ int dvg_device::handler_1() // dvg_dmald
void dvg_device::dvg_draw_to(int x, int y, int intensity)
{
if (((x | y) & 0x400) == 0)
- vg_add_point_buf((m_xmin + x - 512) << 16,
- (m_ymin + 512 - y) << 16,
+ vg_add_point_buf((xmin + x - 512) << 16,
+ (ymin + 512 - y) << 16,
VECTOR_COLOR111(7), intensity << 4);
}
@@ -590,8 +594,8 @@ int avg_device::avg_common_strobe3()
{
cycles = 0x8000 - m_timer;
m_timer = 0;
- m_xpos = m_xcenter;
- m_ypos = m_ycenter;
+ m_xpos = xcenter;
+ m_ypos = ycenter;
vg_add_point_buf(m_xpos, m_ypos, 0, 0);
}
@@ -623,7 +627,8 @@ int avg_tempest_device::handler_6() // tempest_strobe2
{
if ((OP2 == 0) && (m_dvy12 == 0))
{
- /* Contrary to previous documentation in MAME, Tempest does not have the m_enspkl bit. */
+ /* Contrary to previous documentation in MAME,
+ Tempest does not have the m_enspkl bit. */
if (m_dvy & 0x800)
m_color = m_dvy & 0xf;
else
@@ -657,8 +662,8 @@ int avg_tempest_device::handler_7() // tempest_strobe3
apply_flipping(&x, &y);
- vg_add_point_buf(y - m_ycenter + m_xcenter,
- x - m_xcenter + m_ycenter, rgb_t(r, g, b),
+ vg_add_point_buf(y - ycenter + xcenter,
+ x - xcenter + ycenter, rgb_t(r, g, b),
(((m_int_latch >> 1) == 1)? m_intensity: m_int_latch & 0xe) << 4);
}
@@ -676,7 +681,7 @@ void avg_tempest_device::vggo() // tempest_vggo
* avg_common_strobe2). If we don't discard all vectors in the
* current buffer at this point, the screen starts flickering.
*/
- m_nvect = 0;
+ nvect = 0;
}
#endif
@@ -694,7 +699,7 @@ void avg_tempest_device::vggo() // tempest_vggo
if (m_lst == 0)
{
- vg_add_clip(0, m_ypos, m_xmax << 16, m_ymax << 16);
+ vg_add_clip(0, m_ypos, xmax << 16, ymax << 16);
}
m_lst = 1;
@@ -817,8 +822,8 @@ int avg_mhavoc_device::handler_7() // mhavoc_strobe3
{
cycles = 0x8000 - m_timer;
m_timer = 0;
- m_xpos = m_xcenter;
- m_ypos = m_ycenter;
+ m_xpos = xcenter;
+ m_ypos = ycenter;
vg_add_point_buf(m_xpos, m_ypos, 0, 0);
}
@@ -905,7 +910,7 @@ void avg_quantum_device::vggo() // tempest_vggo
* avg_common_strobe2). If we don't discard all vectors in the
* current buffer at this point, the screen starts flickering.
*/
- m_nvect = 0;
+ nvect = 0;
}
int avg_quantum_device::handler_0() // quantum_st2st3
@@ -1035,16 +1040,16 @@ int avg_quantum_device::handler_7() // quantum_strobe3
apply_flipping(&x, &y);
- vg_add_point_buf(y - m_ycenter + m_xcenter, x - m_xcenter + m_ycenter,
- rgb_t(r, g, b),
- ((m_int_latch == 2)? m_intensity: m_int_latch) << 4);
+ vg_add_point_buf(y - ycenter + xcenter,
+ x - xcenter + ycenter, rgb_t(r, g, b),
+ ((m_int_latch == 2)? m_intensity: m_int_latch) << 4);
}
if (OP2)
{
cycles = 0x4000 - m_timer;
m_timer = 0;
- m_xpos = m_xcenter;
- m_ypos = m_ycenter;
+ m_xpos = xcenter;
+ m_ypos = ycenter;
vg_add_point_buf(m_xpos, m_ypos, 0, 0);
}
@@ -1160,7 +1165,7 @@ int avg_tomcat_device::handler_7() // starwars_strobe3
/*************************************
*
- * halt function
+ * halt functions
*
*************************************/
@@ -1170,6 +1175,11 @@ void avgdvg_device::vg_set_halt(int dummy)
m_sync_halt = dummy;
}
+TIMER_CALLBACK_MEMBER( avgdvg_device::vg_set_halt_callback )
+{
+ vg_set_halt(param);
+}
+
/********************************************************************
*
@@ -1184,17 +1194,12 @@ void avgdvg_device::vg_set_halt(int dummy)
*
*******************************************************************/
-void avgdvg_device::execute_run()
+TIMER_CALLBACK_MEMBER( avgdvg_device::run_state_machine )
{
- if (m_halt)
- {
- m_icount = 0;
- return;
- }
-
+ int cycles = 0;
UINT8 *state_prom = machine().root_device().memregion("user1")->base();
- while (m_icount > 0)
+ while (cycles < VGSLICE)
{
/* Get next state */
m_state_latch = (m_state_latch & 0x10)
@@ -1207,26 +1212,26 @@ void avgdvg_device::execute_run()
/* Decode state and call the corresponding handler */
switch(m_state_latch & 7) {
- case 0 : m_icount -= handler_0(); break;
- case 1 : m_icount -= handler_1(); break;
- case 2 : m_icount -= handler_2(); break;
- case 3 : m_icount -= handler_3(); break;
- case 4 : m_icount -= handler_4(); break;
- case 5 : m_icount -= handler_5(); break;
- case 6 : m_icount -= handler_6(); break;
- case 7 : m_icount -= handler_7(); break;
+ case 0 : cycles += handler_0(); break;
+ case 1 : cycles += handler_1(); break;
+ case 2 : cycles += handler_2(); break;
+ case 3 : cycles += handler_3(); break;
+ case 4 : cycles += handler_4(); break;
+ case 5 : cycles += handler_5(); break;
+ case 6 : cycles += handler_6(); break;
+ case 7 : cycles += handler_7(); break;
}
}
- // Halt if flag was set
- if (m_halt && !(m_state_latch & 0x10))
- {
- vg_set_halt(1);
- }
+ /* If halt flag was set, let CPU catch up before we make halt visible */
+ if (m_halt && !(m_state_latch & 0x10))
+ vg_halt_timer->adjust(attotime::from_hz(MASTER_CLOCK) * cycles, 1);
m_state_latch = (m_halt << 4) | (m_state_latch & 0xf);
- m_icount -= 8;
+ cycles += 8;
}
+
+ vg_run_timer->adjust(attotime::from_hz(MASTER_CLOCK) * cycles);
}
@@ -1245,7 +1250,7 @@ WRITE8_MEMBER( avgdvg_device::go_w )
{
vggo();
- if (m_sync_halt && (m_nvect > 10))
+ if (m_sync_halt && (nvect > 10))
{
/*
* This is a good time to start a new frame. Major Havoc
@@ -1257,6 +1262,7 @@ WRITE8_MEMBER( avgdvg_device::go_w )
vg_flush();
vg_set_halt(0);
+ vg_run_timer->adjust(attotime::zero);
}
WRITE16_MEMBER( avgdvg_device::go_word_w )
@@ -1279,7 +1285,7 @@ WRITE8_MEMBER( avgdvg_device::reset_w )
WRITE16_MEMBER( avgdvg_device::reset_word_w )
{
- reset_w(space,0,0);
+ reset_w (space,0,0);
}
/*************************************
@@ -1322,8 +1328,8 @@ void avgdvg_device::register_state()
save_item(NAME(m_clipx_max));
save_item(NAME(m_clipy_max));
- save_item(NAME(m_flipx));
- save_item(NAME(m_flipy));
+ save_item(NAME(flip_x));
+ save_item(NAME(flip_y));
save_pointer(NAME(avgdvg_vectorram), avgdvg_vectorram_size);
}
@@ -1339,15 +1345,18 @@ void avg_device::device_start()
avgdvg_colorram = reinterpret_cast<UINT8 *>(machine().root_device().memshare("colorram")->ptr());
- m_xmin = visarea.min_x;
- m_ymin = visarea.min_y;
- m_xmax = visarea.max_x;
- m_ymax = visarea.max_y;
+ xmin = visarea.min_x;
+ ymin = visarea.min_y;
+ xmax = visarea.max_x;
+ ymax = visarea.max_y;
- m_xcenter = ((m_xmax - m_xmin) / 2) << 16;
- m_ycenter = ((m_ymax - m_ymin) / 2) << 16;
+ xcenter = ((xmax - xmin) / 2) << 16;
+ ycenter = ((ymax - ymin) / 2) << 16;
- m_flipx = m_flipy = 0;
+ flip_x = flip_y = 0;
+
+ vg_halt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(avgdvg_device::vg_set_halt_callback),this));
+ vg_run_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(avgdvg_device::run_state_machine),this));
/*
* The x and y DACs use 10 bit of the counter values which are in
@@ -1357,8 +1366,6 @@ void avg_device::device_start()
m_xdac_xor = 0x200;
m_ydac_xor = 0x200;
- m_icountptr = &m_icount;
-
register_state();
}
@@ -1374,11 +1381,12 @@ void dvg_device::device_start()
avgdvg_colorram = reinterpret_cast<UINT8 *>(machine().root_device().memshare("colorram")->ptr());
- m_xmin = visarea.min_x;
- m_ymin = visarea.min_y;
+ xmin = visarea.min_x;
+ ymin = visarea.min_y;
+
+ vg_halt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(avgdvg_device::vg_set_halt_callback),this));
+ vg_run_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(avgdvg_device::run_state_machine),this));
- m_icountptr = &m_icount;
-
register_state();
}
@@ -1387,10 +1395,9 @@ void avgdvg_device::static_set_vector_tag(device_t &device, const char *tag)
downcast<avgdvg_device &>(device).m_vector.set_tag(tag);
}
-avgdvg_device::avgdvg_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
- : device_t(mconfig, type, name, tag, owner, clock, shortname, source)
- , device_execute_interface(mconfig, *this)
- , m_vector(*this)
+avgdvg_device::avgdvg_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) :
+ device_t(mconfig, type, name, tag, owner, clock, shortname, source),
+ m_vector(*this)
{
m_pc = 0;
m_sp = 0;
@@ -1433,15 +1440,15 @@ avgdvg_device::avgdvg_device(const machine_config &mconfig, device_type type, co
m_clipx_max = 0;
m_clipy_max = 0;
- m_xmin = 0;
- m_xmax = 0;
- m_ymin = 0;
- m_ymax = 0;
- m_xcenter = 0;
- m_ycenter = 0;
- m_flipx = 0;
- m_flipy = 0;
- m_nvect = 0;
+ xmin = 0;
+ xmax = 0;
+ ymin = 0;
+ ymax = 0;
+ xcenter = 0;
+ ycenter = 0;
+ flip_x = 0;
+ flip_y = 0;
+ nvect = 0;
}
dvg_device::dvg_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
diff --git a/src/mame/video/avgdvg.h b/src/mame/video/avgdvg.h
index fa62cb5cac8..269e7ebc49f 100644
--- a/src/mame/video/avgdvg.h
+++ b/src/mame/video/avgdvg.h
@@ -21,8 +21,7 @@ struct vgvector
// ======================> avgdvg_device
-class avgdvg_device : public device_t,
- public device_execute_interface
+class avgdvg_device : public device_t
{
public:
// construction/destruction
@@ -41,6 +40,8 @@ public:
void set_flip_x(int flip);
void set_flip_y(int flip);
+ TIMER_CALLBACK_MEMBER(vg_set_halt_callback);
+ TIMER_CALLBACK_MEMBER(run_state_machine);
protected:
void apply_flipping(int *x, int *y);
void vg_set_halt(int dummy);
@@ -51,21 +52,22 @@ protected:
void register_state();
- virtual void execute_run();
- int m_icount;
-
UINT8 *avgdvg_vectorram;
size_t avgdvg_vectorram_size;
- UINT8 *avgdvg_colorram;
+ UINT8 *avgdvg_colorram;
- int m_xmin, m_xmax, m_ymin, m_ymax;
- int m_xcenter, m_ycenter;
- int m_flipx, m_flipy;
- int m_nvect;
+ int xmin, xmax, ymin, ymax;
+ int xcenter, ycenter;
+ emu_timer *vg_run_timer, *vg_halt_timer;
+
+ int flip_x, flip_y;
+
+ int nvect;
vgvector vectbuf[MAXVECT];
+
UINT16 m_pc;
UINT8 m_sp;
UINT16 m_dvx;