diff options
Diffstat (limited to 'src/mame/video/carpolo.cpp')
-rw-r--r-- | src/mame/video/carpolo.cpp | 136 |
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)); } } } |