@@ -99,7 +99,6 @@ void namco_c148_device::map(address_map &map)
9999}
100100
101101
102-
103102// -------------------------------------------------
104103// device_validity_check - device-specific checks
105104// -------------------------------------------------
@@ -137,49 +136,48 @@ void namco_c148_device::device_start()
137136
138137void namco_c148_device::device_reset ()
139138{
140- m_irqlevel. vblank = 0 ;
141- m_irqlevel. pos = 0 ;
142- m_irqlevel. sci = 0 ;
143- m_irqlevel. ex = 0 ;
144- m_irqlevel. cpu = 0 ;
139+ vblank_irq_level_w ( 0 ) ;
140+ pos_irq_level_w ( 0 ) ;
141+ cpu_irq_level_w ( 0 ) ;
142+ ex_irq_level_w ( 0 ) ;
143+ sci_irq_level_w ( 0 ) ;
145144}
146145
146+
147147// **************************************************************************
148148// IRQ section
149149// **************************************************************************
150150
151- uint8_t namco_c148_device::pos_irq_level_r () { return m_irqlevel.pos & 7 ; }
152- uint8_t namco_c148_device::vblank_irq_level_r () { return m_irqlevel.vblank & 7 ; }
153- uint8_t namco_c148_device::cpu_irq_level_r () { return m_irqlevel.cpu & 7 ; }
154- uint8_t namco_c148_device::ex_irq_level_r () { return m_irqlevel.ex & 7 ; }
155- uint8_t namco_c148_device::sci_irq_level_r () { return m_irqlevel.sci & 7 ; }
156-
157- inline void namco_c148_device::flush_irq_acks ()
158- {
159- // If writing an IRQ priority register, clear any pending IRQs.
160- // Dirt Fox and Winning Run require this behaviour
161- // TODO: literal behaviour, Winning Run GPU doesn't seem to care about irq ack ports at all?
162- for (int i = 0 ; i < 8 ; i++)
163- m_hostcpu->set_input_line (i, CLEAR_LINE );
164- }
165-
166- void namco_c148_device::pos_irq_level_w (uint8_t data) { m_irqlevel.pos = data & 7 ; flush_irq_acks (); if (data != 0 ) { LOG (" %s: pos IRQ level = %02x\n " , tag (), data); } }
167- void namco_c148_device::vblank_irq_level_w (uint8_t data) { m_irqlevel.vblank = data & 7 ; flush_irq_acks (); LOG (" %s: vblank IRQ level = %02x\n " , tag (), data); }
168- void namco_c148_device::cpu_irq_level_w (uint8_t data) { m_irqlevel.cpu = data & 7 ; flush_irq_acks (); LOG (" %s: cpu IRQ level = %02x\n " , tag (), data); }
169- void namco_c148_device::ex_irq_level_w (uint8_t data) { m_irqlevel.ex = data & 7 ; flush_irq_acks (); LOG (" %s: ex IRQ level = %02x\n " , tag (), data); }
170- void namco_c148_device::sci_irq_level_w (uint8_t data) { m_irqlevel.sci = data & 7 ; flush_irq_acks (); LOG (" %s: sci IRQ level = %02x\n " , tag (), data); }
151+ uint8_t namco_c148_device::pos_irq_level_r () { return m_irqlevel.pos & 7 ; }
152+ uint8_t namco_c148_device::vblank_irq_level_r () { return m_irqlevel.vblank & 7 ; }
153+ uint8_t namco_c148_device::cpu_irq_level_r () { return m_irqlevel.cpu & 7 ; }
154+ uint8_t namco_c148_device::ex_irq_level_r () { return m_irqlevel.ex & 7 ; }
155+ uint8_t namco_c148_device::sci_irq_level_r () { return m_irqlevel.sci & 7 ; }
156+
157+ void namco_c148_device::vblank_irq_level_w (uint8_t data) { vblank_irq_ack_w (); m_irqlevel.vblank = data & 7 ; LOG (" %s: vblank IRQ level = %02x\n " , tag (), data); }
158+ void namco_c148_device::pos_irq_level_w (uint8_t data) { pos_irq_ack_w (); m_irqlevel.pos = data & 7 ; if (data != 0 ) { LOG (" %s: pos IRQ level = %02x\n " , tag (), data); } }
159+ void namco_c148_device::cpu_irq_level_w (uint8_t data) { cpu_irq_ack_w (); m_irqlevel.cpu = data & 7 ; LOG (" %s: cpu IRQ level = %02x\n " , tag (), data); }
160+ void namco_c148_device::ex_irq_level_w (uint8_t data) { ex_irq_ack_w (); m_irqlevel.ex = data & 7 ; LOG (" %s: ex IRQ level = %02x\n " , tag (), data); }
161+ void namco_c148_device::sci_irq_level_w (uint8_t data) { sci_irq_ack_w (); m_irqlevel.sci = data & 7 ; LOG (" %s: sci IRQ level = %02x\n " , tag (), data); }
162+
163+ uint16_t namco_c148_device::vblank_irq_ack_r () { if (!machine ().side_effects_disabled ()) m_hostcpu->set_input_line (m_irqlevel.vblank , CLEAR_LINE ); return 0 ; }
164+ uint16_t namco_c148_device::pos_irq_ack_r () { if (!machine ().side_effects_disabled ()) m_hostcpu->set_input_line (m_irqlevel.pos , CLEAR_LINE ); return 0 ; }
165+ uint16_t namco_c148_device::cpu_irq_ack_r () { if (!machine ().side_effects_disabled ()) m_hostcpu->set_input_line (m_irqlevel.cpu , CLEAR_LINE ); return 0 ; }
166+ uint16_t namco_c148_device::ex_irq_ack_r () { if (!machine ().side_effects_disabled ()) m_hostcpu->set_input_line (m_irqlevel.ex , CLEAR_LINE ); return 0 ; }
167+ uint16_t namco_c148_device::sci_irq_ack_r () { if (!machine ().side_effects_disabled ()) m_hostcpu->set_input_line (m_irqlevel.sci , CLEAR_LINE ); return 0 ; }
168+
169+ void namco_c148_device::vblank_irq_ack_w (uint16_t data) { m_hostcpu->set_input_line (m_irqlevel.vblank , CLEAR_LINE ); }
170+ void namco_c148_device::pos_irq_ack_w (uint16_t data) { m_hostcpu->set_input_line (m_irqlevel.pos , CLEAR_LINE ); }
171+ void namco_c148_device::cpu_irq_ack_w (uint16_t data) { m_hostcpu->set_input_line (m_irqlevel.cpu , CLEAR_LINE ); }
172+ void namco_c148_device::ex_irq_ack_w (uint16_t data) { m_hostcpu->set_input_line (m_irqlevel.ex , CLEAR_LINE ); }
173+ void namco_c148_device::sci_irq_ack_w (uint16_t data) { m_hostcpu->set_input_line (m_irqlevel.sci , CLEAR_LINE ); }
174+
175+ void namco_c148_device::vblank_irq_trigger () { m_hostcpu->set_input_line (m_irqlevel.vblank , HOLD_LINE ); } // TODO: Phelios doesn't ack the vblank irq at all!
176+ void namco_c148_device::pos_irq_trigger () { m_hostcpu->set_input_line (m_irqlevel.pos , ASSERT_LINE ); }
177+ void namco_c148_device::cpu_irq_trigger () { m_hostcpu->set_input_line (m_irqlevel.cpu , ASSERT_LINE ); }
178+ void namco_c148_device::ex_irq_trigger () { m_hostcpu->set_input_line (m_irqlevel.ex , ASSERT_LINE ); }
179+ void namco_c148_device::sci_irq_trigger () { m_hostcpu->set_input_line (m_irqlevel.sci , ASSERT_LINE ); }
171180
172- uint16_t namco_c148_device::vblank_irq_ack_r () { m_hostcpu->set_input_line (m_irqlevel.vblank , CLEAR_LINE ); return 0 ; }
173- uint16_t namco_c148_device::pos_irq_ack_r () { m_hostcpu->set_input_line (m_irqlevel.pos , CLEAR_LINE ); return 0 ; }
174- uint16_t namco_c148_device::cpu_irq_ack_r () { m_hostcpu->set_input_line (m_irqlevel.cpu , CLEAR_LINE ); return 0 ; }
175- uint16_t namco_c148_device::ex_irq_ack_r () { m_hostcpu->set_input_line (m_irqlevel.ex , CLEAR_LINE ); return 0 ; }
176- uint16_t namco_c148_device::sci_irq_ack_r () { m_hostcpu->set_input_line (m_irqlevel.sci , CLEAR_LINE ); return 0 ; }
177-
178- void namco_c148_device::vblank_irq_ack_w (uint16_t data) { m_hostcpu->set_input_line (m_irqlevel.vblank , CLEAR_LINE ); }
179- void namco_c148_device::pos_irq_ack_w (uint16_t data) { m_hostcpu->set_input_line (m_irqlevel.pos , CLEAR_LINE ); }
180- void namco_c148_device::cpu_irq_ack_w (uint16_t data) { m_hostcpu->set_input_line (m_irqlevel.cpu , CLEAR_LINE ); }
181- void namco_c148_device::ex_irq_ack_w (uint16_t data) { m_hostcpu->set_input_line (m_irqlevel.ex , CLEAR_LINE ); }
182- void namco_c148_device::sci_irq_ack_w (uint16_t data) { m_hostcpu->set_input_line (m_irqlevel.sci , CLEAR_LINE ); }
183181
184182// **************************************************************************
185183// Comm ports
@@ -219,36 +217,11 @@ void namco_c148_device::cpu_irq_assert_w(uint16_t data)
219217 m_linked_c148->cpu_irq_trigger ();
220218}
221219
220+
222221// **************************************************************************
223222// GETTERS/SETTERS
224223// **************************************************************************
225224
226- void namco_c148_device::vblank_irq_trigger ()
227- {
228- // TODO: Phelios doesn't ack the vblank irq at all!
229- m_hostcpu->set_input_line (m_irqlevel.vblank , HOLD_LINE );
230- }
231-
232- void namco_c148_device::pos_irq_trigger ()
233- {
234- m_hostcpu->set_input_line (m_irqlevel.pos , ASSERT_LINE );
235- }
236-
237- void namco_c148_device::cpu_irq_trigger ()
238- {
239- m_hostcpu->set_input_line (m_irqlevel.cpu , ASSERT_LINE );
240- }
241-
242- void namco_c148_device::ex_irq_trigger ()
243- {
244- m_hostcpu->set_input_line (m_irqlevel.ex , ASSERT_LINE );
245- }
246-
247- void namco_c148_device::sci_irq_trigger ()
248- {
249- m_hostcpu->set_input_line (m_irqlevel.sci , ASSERT_LINE );
250- }
251-
252225// TODO: these doesn't belong here, needs C116 device
253226uint8_t namco_c148_device::ext_posirq_line_r ()
254227{
0 commit comments