summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/carpolo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/carpolo.cpp')
-rw-r--r--src/mame/video/carpolo.cpp136
1 files changed, 53 insertions, 83 deletions
diff --git a/src/mame/video/carpolo.cpp b/src/mame/video/carpolo.cpp
index 48082e42c4d..f0e04dcf23b 100644
--- a/src/mame/video/carpolo.cpp
+++ b/src/mame/video/carpolo.cpp
@@ -68,8 +68,7 @@
PALETTE_INIT_MEMBER(carpolo_state, carpolo)
{
- const uint8_t *color_prom = memregion("proms")->base();
- int i;
+ const uint8_t *color_prom = m_proms->base();
/* thanks to Jarek Burczynski for analyzing the circuit */
/* static const float MAX_VOLTAGE = 6.9620f; */
@@ -93,15 +92,16 @@ PALETTE_INIT_MEMBER(carpolo_state, carpolo)
};
- for (i = 0; i < palette.entries(); i++)
+ for (int i = 0; i < palette.entries(); i++)
{
- uint8_t pen, r, g, b;
-
+ uint8_t pen;
if (i < 0x18)
+ {
/* sprites */
pen = ((i - 0x00) & 0x01) ? CHARSET_COLOR_BASE + ((i - 0x00) >> 1) : 0;
-
+ }
else if (i < 0x38)
+ {
/* the bits in the goal gfx PROM are hooked up as follows (all active LO):
D3 - goal post
D2 - scoring area
@@ -118,19 +118,16 @@ PALETTE_INIT_MEMBER(carpolo_state, carpolo)
case (0x10 | (0x09 ^ 0x0f)): pen = NET_COLOR; break; /* score */
default: pen = 0; break;
}
-
+ }
else
+ {
/* alpha layer */
pen = ((i - 0x38) & 0x01) ? ALPHA_COLOR_BASE + ((i - 0x38) >> 1) : 0;
+ }
- /* red component */
- r = ((r_voltage[(color_prom[pen] >> 5) & 0x07] - MIN_VOLTAGE) / (MAX_VOLTAGE - MIN_VOLTAGE)) * 255.0f;
-
- /* green component */
- g = ((g_voltage[(color_prom[pen] >> 2) & 0x07] - MIN_VOLTAGE) / (MAX_VOLTAGE - MIN_VOLTAGE)) * 255.0f;
-
- /* blue component */
- b = ((b_voltage[(color_prom[pen] >> 0) & 0x03] - MIN_VOLTAGE) / (MAX_VOLTAGE - MIN_VOLTAGE)) * 255.0f;
+ const uint8_t r = ((r_voltage[(color_prom[pen] >> 5) & 0x07] - MIN_VOLTAGE) / (MAX_VOLTAGE - MIN_VOLTAGE)) * 255.0f;
+ const uint8_t g = ((g_voltage[(color_prom[pen] >> 2) & 0x07] - MIN_VOLTAGE) / (MAX_VOLTAGE - MIN_VOLTAGE)) * 255.0f;
+ const uint8_t b = ((b_voltage[(color_prom[pen] >> 0) & 0x03] - MIN_VOLTAGE) / (MAX_VOLTAGE - MIN_VOLTAGE)) * 255.0f;
palette.set_pen_color(i, rgb_t(r, g, b));
}
@@ -187,11 +184,9 @@ void carpolo_state::draw_alpha_line(bitmap_ind16 &bitmap, const rectangle &clipr
void carpolo_state::remap_sprite_code(int bank, int code, int *remapped_code, int *flipy)
{
- uint8_t* PROM = memregion("user1")->base();
-
- code = (bank << 4) | code;
- *remapped_code = PROM[code] & 0x0f;
- *flipy = (PROM[code] & 0x10) >> 4;
+ const uint8_t data = m_user1->base()[code | (bank << 4)];
+ *remapped_code = data & 0x0f;
+ *flipy = BIT(data, 4);
}
@@ -199,26 +194,19 @@ void carpolo_state::draw_sprite(bitmap_ind16 &bitmap, const rectangle &cliprect,
uint8_t x, uint8_t y, int bank, int code, int col)
{
int remapped_code, flipy;
-
remap_sprite_code(bank, code, &remapped_code, &flipy);
x = 240 - x;
y = 240 - y;
- m_gfxdecode->gfx(0)->transpen(bitmap,cliprect,
- remapped_code, col,
- 0, flipy,
- x, y,0);
+ m_gfxdecode->gfx(0)->transpen(bitmap, cliprect, remapped_code, col, 0, flipy, x, y, 0);
/* draw with wrap around */
- m_gfxdecode->gfx(0)->transpen(bitmap,cliprect,
- remapped_code, col,
- 0, flipy,
- (int16_t)x - 256, y,0);
+ m_gfxdecode->gfx(0)->transpen(bitmap, cliprect, remapped_code, col, 0, flipy, (int16_t)x - 256, y, 0);
}
-uint32_t carpolo_state::screen_update_carpolo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+uint32_t carpolo_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
/* draw the playfield elements in the correct priority order */
@@ -240,39 +228,23 @@ uint32_t carpolo_state::screen_update_carpolo(screen_device &screen, bitmap_ind1
bitmap.plot_box(RIGHT_BORDER,TOP_BORDER,1,BOTTOM_BORDER-TOP_BORDER+1,LINE_PEN);
/* car 4 */
- draw_sprite(bitmap, cliprect,
- m_spriteram[0x06], m_spriteram[0x07],
- 0, m_spriteram[0x0d] >> 4, CAR4_COLOR);
+ draw_sprite(bitmap, cliprect, m_spriteram[0x06], m_spriteram[0x07], 0, m_spriteram[0x0d] >> 4, CAR4_COLOR);
/* car 3 */
- draw_sprite(bitmap, cliprect,
- m_spriteram[0x04], m_spriteram[0x05],
- 0, m_spriteram[0x0d] & 0x0f, CAR3_COLOR);
+ draw_sprite(bitmap, cliprect, m_spriteram[0x04], m_spriteram[0x05], 0, m_spriteram[0x0d] & 0x0f, CAR3_COLOR);
/* car 2 */
- draw_sprite(bitmap, cliprect,
- m_spriteram[0x02], m_spriteram[0x03],
- 0, m_spriteram[0x0c] >> 4, CAR2_COLOR);
+ draw_sprite(bitmap, cliprect, m_spriteram[0x02], m_spriteram[0x03], 0, m_spriteram[0x0c] >> 4, CAR2_COLOR);
/* ball */
- draw_sprite(bitmap, cliprect,
- m_spriteram[0x08], m_spriteram[0x09],
- 1, m_spriteram[0x0e] & 0x0f, BALL_COLOR);
+ draw_sprite(bitmap, cliprect, m_spriteram[0x08], m_spriteram[0x09], 1, m_spriteram[0x0e] & 0x0f, BALL_COLOR);
/* left goal - position determined by bit 6 of the
horizontal and vertical timing PROMs */
- m_gfxdecode->gfx(1)->zoom_transpen(bitmap,cliprect,
- 0,0,
- 0,0,
- LEFT_GOAL_X,GOAL_Y,
- 0x20000,0x20000,0);
+ m_gfxdecode->gfx(1)->zoom_transpen(bitmap, cliprect, 0, 0, 0, 0, LEFT_GOAL_X, GOAL_Y, 0x20000, 0x20000, 0);
/* right goal */
- m_gfxdecode->gfx(1)->zoom_transpen(bitmap,cliprect,
- 0,1,
- 1,0,
- RIGHT_GOAL_X,GOAL_Y,
- 0x20000,0x20000,0);
+ m_gfxdecode->gfx(1)->zoom_transpen(bitmap, cliprect, 0, 1, 1, 0, RIGHT_GOAL_X, GOAL_Y, 0x20000, 0x20000, 0);
/* special char - bit 0 of 0x0f enables it,
bit 1 marked as WIDE, but never appears to be set */
@@ -280,9 +252,7 @@ uint32_t carpolo_state::screen_update_carpolo(screen_device &screen, bitmap_ind1
popmessage("WIDE!\n");
if (m_spriteram[0x0f] & 0x01)
- draw_sprite(bitmap, cliprect,
- m_spriteram[0x0a], m_spriteram[0x0b],
- 1, m_spriteram[0x0e] >> 4, SPECIAL_CHAR_COLOR);
+ draw_sprite(bitmap, cliprect, m_spriteram[0x0a], m_spriteram[0x0b], 1, m_spriteram[0x0e] >> 4, SPECIAL_CHAR_COLOR);
/* draw the alpha layer */
@@ -540,7 +510,7 @@ int carpolo_state::check_sprite_border_collision(uint8_t x1, uint8_t y1, int cod
}
-WRITE_LINE_MEMBER(carpolo_state::screen_vblank_carpolo)
+WRITE_LINE_MEMBER(carpolo_state::screen_vblank)
{
// rising edge
if (state)
@@ -579,37 +549,37 @@ WRITE_LINE_MEMBER(carpolo_state::screen_vblank_carpolo)
if (check_sprite_sprite_collision(car1_x, car1_y, car1_code, car1_flipy,
car2_x, car2_y, car2_code, car2_flipy,
&col_x, &col_y))
- carpolo_generate_car_car_interrupt(0, 1);
+ generate_car_car_interrupt(0, 1);
/* cars 1 and 3 */
else if (check_sprite_sprite_collision(car1_x, car1_y, car1_code, car1_flipy,
car3_x, car3_y, car3_code, car3_flipy,
&col_x, &col_y))
- carpolo_generate_car_car_interrupt(0, 2);
+ generate_car_car_interrupt(0, 2);
/* cars 1 and 4 */
else if (check_sprite_sprite_collision(car1_x, car1_y, car1_code, car1_flipy,
car4_x, car4_y, car4_code, car4_flipy,
&col_x, &col_y))
- carpolo_generate_car_car_interrupt(0, 3);
+ generate_car_car_interrupt(0, 3);
/* cars 2 and 3 */
else if (check_sprite_sprite_collision(car2_x, car2_y, car2_code, car2_flipy,
car3_x, car3_y, car3_code, car3_flipy,
&col_x, &col_y))
- carpolo_generate_car_car_interrupt(1, 2);
+ generate_car_car_interrupt(1, 2);
/* cars 2 and 4 */
else if (check_sprite_sprite_collision(car2_x, car2_y, car2_code, car2_flipy,
car4_x, car4_y, car4_code, car4_flipy,
&col_x, &col_y))
- carpolo_generate_car_car_interrupt(1, 3);
+ generate_car_car_interrupt(1, 3);
/* cars 3 and 4 */
else if (check_sprite_sprite_collision(car3_x, car3_y, car3_code, car3_flipy,
car4_x, car4_y, car4_code, car4_flipy,
&col_x, &col_y))
- carpolo_generate_car_car_interrupt(2, 3);
+ generate_car_car_interrupt(2, 3);
@@ -617,48 +587,48 @@ WRITE_LINE_MEMBER(carpolo_state::screen_vblank_carpolo)
if (check_sprite_sprite_collision(car1_x, car1_y, car1_code, car1_flipy,
ball_x, ball_y, ball_code, ball_flipy,
&col_x, &col_y))
- carpolo_generate_car_ball_interrupt(0, col_x, col_y);
+ generate_car_ball_interrupt(0, col_x, col_y);
else if (check_sprite_sprite_collision(car2_x, car2_y, car2_code, car2_flipy,
ball_x, ball_y, ball_code, ball_flipy,
&col_x, &col_y))
- carpolo_generate_car_ball_interrupt(1, col_x, col_y);
+ generate_car_ball_interrupt(1, col_x, col_y);
else if (check_sprite_sprite_collision(car3_x, car3_y, car3_code, car3_flipy,
ball_x, ball_y, ball_code, ball_flipy,
&col_x, &col_y))
- carpolo_generate_car_ball_interrupt(2, col_x, col_y);
+ generate_car_ball_interrupt(2, col_x, col_y);
else if (check_sprite_sprite_collision(car4_x, car4_y, car4_code, car4_flipy,
ball_x, ball_y, ball_code, ball_flipy,
&col_x, &col_y))
- carpolo_generate_car_ball_interrupt(3, col_x, col_y);
+ generate_car_ball_interrupt(3, col_x, col_y);
/* check car-goal collision */
if (check_sprite_left_goal_collision(car1_x, car1_y, car1_code, car1_flipy, 1))
- carpolo_generate_car_goal_interrupt(0, 0);
+ generate_car_goal_interrupt(0, 0);
else if (check_sprite_right_goal_collision(car1_x, car1_y, car1_code, car1_flipy, 1))
- carpolo_generate_car_goal_interrupt(0, 1);
+ generate_car_goal_interrupt(0, 1);
else if (check_sprite_left_goal_collision(car2_x, car2_y, car2_code, car2_flipy, 1))
- carpolo_generate_car_goal_interrupt(1, 0);
+ generate_car_goal_interrupt(1, 0);
else if (check_sprite_right_goal_collision(car2_x, car2_y, car2_code, car2_flipy, 1))
- carpolo_generate_car_goal_interrupt(1, 1);
+ generate_car_goal_interrupt(1, 1);
else if (check_sprite_left_goal_collision(car3_x, car3_y, car3_code, car3_flipy, 1))
- carpolo_generate_car_goal_interrupt(2, 0);
+ generate_car_goal_interrupt(2, 0);
else if (check_sprite_right_goal_collision(car3_x, car3_y, car3_code, car3_flipy, 1))
- carpolo_generate_car_goal_interrupt(2, 1);
+ generate_car_goal_interrupt(2, 1);
else if (check_sprite_left_goal_collision(car4_x, car4_y, car4_code, car4_flipy, 1))
- carpolo_generate_car_goal_interrupt(3, 0);
+ generate_car_goal_interrupt(3, 0);
else if (check_sprite_right_goal_collision(car4_x, car4_y, car4_code, car4_flipy, 1))
- carpolo_generate_car_goal_interrupt(3, 1);
+ generate_car_goal_interrupt(3, 1);
/* check ball collision with static screen elements */
@@ -667,18 +637,18 @@ WRITE_LINE_MEMBER(carpolo_state::screen_vblank_carpolo)
col = check_sprite_left_goal_collision(ball_x, ball_y, ball_code, ball_flipy, 0);
- if (col == 1) carpolo_generate_ball_screen_interrupt(0x05);
- if (col == 2) carpolo_generate_ball_screen_interrupt(0x03);
+ if (col == 1) generate_ball_screen_interrupt(0x05);
+ if (col == 2) generate_ball_screen_interrupt(0x03);
col = check_sprite_right_goal_collision(ball_x, ball_y, ball_code, ball_flipy, 0);
- if (col == 1) carpolo_generate_ball_screen_interrupt(0x05 | 0x08);
- if (col == 2) carpolo_generate_ball_screen_interrupt(0x03 | 0x08);
+ if (col == 1) generate_ball_screen_interrupt(0x05 | 0x08);
+ if (col == 2) generate_ball_screen_interrupt(0x03 | 0x08);
if (check_sprite_border_collision(ball_x, ball_y, ball_code, ball_flipy))
- carpolo_generate_ball_screen_interrupt(0x06);
+ generate_ball_screen_interrupt(0x06);
}
@@ -689,25 +659,25 @@ WRITE_LINE_MEMBER(carpolo_state::screen_vblank_carpolo)
col = check_sprite_border_collision(car1_x, car1_y, car1_code, car1_flipy);
if (col)
- carpolo_generate_car_border_interrupt(0, (col == 2));
+ generate_car_border_interrupt(0, (col == 2));
else
{
col = check_sprite_border_collision(car2_x, car2_y, car2_code, car2_flipy);
if (col)
- carpolo_generate_car_border_interrupt(1, (col == 2));
+ generate_car_border_interrupt(1, (col == 2));
else
{
col = check_sprite_border_collision(car3_x, car3_y, car3_code, car3_flipy);
if (col)
- carpolo_generate_car_border_interrupt(2, (col == 2));
+ generate_car_border_interrupt(2, (col == 2));
else
{
col = check_sprite_border_collision(car4_x, car4_y, car4_code, car4_flipy);
if (col)
- carpolo_generate_car_border_interrupt(3, (col == 2));
+ generate_car_border_interrupt(3, (col == 2));
}
}
}