carpolo: put timer tick in vblank again, fixes collision detection (nw)

This commit is contained in:
hap 2019-05-30 15:28:46 +02:00
parent 23ab51f538
commit 0af062c145
3 changed files with 8 additions and 24 deletions

View File

@ -56,12 +56,6 @@ protected:
virtual void machine_start() override; virtual void machine_start() override;
virtual void machine_reset() override; virtual void machine_reset() override;
virtual void video_start() override; virtual void video_start() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
enum
{
TID_TIMER,
};
private: private:
uint8_t m_ball_screen_collision_cause; uint8_t m_ball_screen_collision_cause;
@ -99,8 +93,6 @@ private:
required_ioport_array<3> m_in; required_ioport_array<3> m_in;
required_ioport m_pedals; required_ioport m_pedals;
emu_timer *m_timer;
std::unique_ptr<bitmap_ind16> m_sprite_sprite_collision_bitmap1; std::unique_ptr<bitmap_ind16> m_sprite_sprite_collision_bitmap1;
std::unique_ptr<bitmap_ind16> m_sprite_sprite_collision_bitmap2; std::unique_ptr<bitmap_ind16> m_sprite_sprite_collision_bitmap2;
std::unique_ptr<bitmap_ind16> m_sprite_goal_collision_bitmap1; std::unique_ptr<bitmap_ind16> m_sprite_goal_collision_bitmap1;

View File

@ -195,12 +195,6 @@ READ8_MEMBER(carpolo_state::interrupt_cause_r)
return (m_ttl74148_3s->output_r() << 1) | m_priority_0_extension; return (m_ttl74148_3s->output_r() << 1) | m_priority_0_extension;
} }
void carpolo_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
if (id == TID_TIMER)
timer_tick();
}
void carpolo_state::timer_tick() void carpolo_state::timer_tick()
{ {
/* cause the timer interrupt */ /* cause the timer interrupt */
@ -424,8 +418,6 @@ READ8_MEMBER(carpolo_state::pia_1_port_b_r)
void carpolo_state::machine_start() void carpolo_state::machine_start()
{ {
m_timer = timer_alloc(TID_TIMER);
save_item(NAME(m_ball_screen_collision_cause)); save_item(NAME(m_ball_screen_collision_cause));
save_item(NAME(m_car_ball_collision_x)); save_item(NAME(m_car_ball_collision_x));
save_item(NAME(m_car_ball_collision_y)); save_item(NAME(m_car_ball_collision_y));
@ -480,6 +472,4 @@ void carpolo_state::machine_reset()
m_ttl7474_1a_2->clear_w (1); m_ttl7474_1a_2->clear_w (1);
m_ttl7474_1a_2->preset_w(1); m_ttl7474_1a_2->preset_w(1);
m_timer->adjust(attotime::from_hz(60), 0, attotime::from_hz(60));
} }

View File

@ -516,6 +516,12 @@ WRITE_LINE_MEMBER(carpolo_state::screen_vblank)
// rising edge // rising edge
if (state) if (state)
{ {
/* handle the 60hz timer now (machine/carpolo.cpp) */
timer_tick();
/* sprites collision detection */
int col_x, col_y; int col_x, col_y;
int car1_x, car2_x, car3_x, car4_x, ball_x; int car1_x, car2_x, car3_x, car4_x, ball_x;
int car1_y, car2_y, car3_y, car4_y, ball_y; int car1_y, car2_y, car3_y, car4_y, ball_y;
@ -634,9 +640,7 @@ WRITE_LINE_MEMBER(carpolo_state::screen_vblank)
/* check ball collision with static screen elements */ /* check ball collision with static screen elements */
{ {
int col; int col = check_sprite_left_goal_collision(ball_x, ball_y, ball_code, ball_flipy, 0);
col = check_sprite_left_goal_collision(ball_x, ball_y, ball_code, ball_flipy, 0);
if (col == 1) generate_ball_screen_interrupt(0x05); if (col == 1) generate_ball_screen_interrupt(0x05);
if (col == 2) generate_ball_screen_interrupt(0x03); if (col == 2) generate_ball_screen_interrupt(0x03);
@ -655,9 +659,7 @@ WRITE_LINE_MEMBER(carpolo_state::screen_vblank)
/* check car-border collision */ /* check car-border collision */
{ {
int col; int col = check_sprite_border_collision(car1_x, car1_y, car1_code, car1_flipy);
col = check_sprite_border_collision(car1_x, car1_y, car1_code, car1_flipy);
if (col) if (col)
generate_car_border_interrupt(0, (col == 2)); generate_car_border_interrupt(0, (col == 2));