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_reset() 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:
uint8_t m_ball_screen_collision_cause;
@ -99,8 +93,6 @@ private:
required_ioport_array<3> m_in;
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_bitmap2;
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;
}
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()
{
/* cause the timer interrupt */
@ -424,8 +418,6 @@ READ8_MEMBER(carpolo_state::pia_1_port_b_r)
void carpolo_state::machine_start()
{
m_timer = timer_alloc(TID_TIMER);
save_item(NAME(m_ball_screen_collision_cause));
save_item(NAME(m_car_ball_collision_x));
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->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
if (state)
{
/* handle the 60hz timer now (machine/carpolo.cpp) */
timer_tick();
/* sprites collision detection */
int col_x, col_y;
int car1_x, car2_x, car3_x, car4_x, ball_x;
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 */
{
int col;
col = check_sprite_left_goal_collision(ball_x, ball_y, ball_code, ball_flipy, 0);
int 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 == 2) generate_ball_screen_interrupt(0x03);
@ -655,9 +659,7 @@ WRITE_LINE_MEMBER(carpolo_state::screen_vblank)
/* check car-border collision */
{
int col;
col = check_sprite_border_collision(car1_x, car1_y, car1_code, car1_flipy);
int col = check_sprite_border_collision(car1_x, car1_y, car1_code, car1_flipy);
if (col)
generate_car_border_interrupt(0, (col == 2));