@@ -143,6 +143,9 @@ void model2_state::machine_start()
143143 // initialize custom debugger pool, @see machine/model2.cpp
144144 debug_init ();
145145
146+ m_lamps.resolve ();
147+ m_wheel_motor.resolve ();
148+
146149 save_item (NAME (m_intreq));
147150 save_item (NAME (m_intena));
148151 save_item (NAME (m_coproctl));
@@ -1172,48 +1175,92 @@ u8 model2_state::lightgun_offscreen_r(offs_t offset)
11721175// **************************************************************************
11731176// OUTPUTS
11741177// **************************************************************************
1175-
1176- void model2o_state::daytona_output_w (u8 data)
1177- {
1178- // 7------- leader led
1179- // -6------ vr4 led
1180- // --5----- vr3 led
1181- // ---4---- vr2 led
1182- // ----3--- vr1 led
1183- // -----2-- start led
1178+ // Daytona Output
1179+ // 7------- leader lamp
1180+ // -6------ vr4 lamp
1181+ // --5----- vr3 lamp
1182+ // ---4---- vr2 lamp
1183+ // ----3--- vr1 lamp
1184+ // -----2-- start lamp
11841185 // ------1- coin counter 2
11851186 // -------0 coin counter 1
11861187
1187- machine ().bookkeeping ().coin_counter_w (1 , BIT (data, 1 ));
1188- machine ().bookkeeping ().coin_counter_w (0 , BIT (data, 0 ));
1189- }
1190-
1191- void model2o_state::desert_output_w (u8 data)
1192- {
1188+ // Desert Output
11931189 // 7------- cannon motor
11941190 // -6------ machine gun motor
1195- // --5----- vr1
1196- // ---4---- vr2
1197- // ----3--- vr3
1198- // -----2-- start
1191+ // --5----- vr1 lamp
1192+ // ---4---- vr2 lamp
1193+ // ----3--- vr3 lamp
1194+ // -----2-- start lamp
11991195 // ------1- coin counter 2
12001196 // -------0 coin counter 1
12011197
1202- machine ().bookkeeping ().coin_counter_w (1 , BIT (data, 1 ));
1203- machine ().bookkeeping ().coin_counter_w (0 , BIT (data, 0 ));
1204- }
1205-
1206- void model2o_state::vcop_output_w (u8 data)
1207- {
1198+ // Vcop Output
12081199 // 7654---- unknown (not used?)
1209- // ----32-- start leds (always set together)
1200+ // ----32-- start lamps (always set together)
12101201 // ------1- coin counter 2
12111202 // -------0 coin counter 1
12121203
1213- machine ().bookkeeping ().coin_counter_w (1 , BIT (~data, 1 ));
1214- machine ().bookkeeping ().coin_counter_w (0 , BIT (~data, 0 ));
1215- }
1204+ // Srallyc Output
1205+ // 7------- leader lamp
1206+ // -6------ unknown
1207+ // --5----- vr lamp
1208+ // ---4---- unknown
1209+ // ----3--- unknown
1210+ // -----2-- start lamp
1211+ // ------1- coin counter 2
1212+ // -------0 coin counter 1
12161213
1214+ // STCC Output
1215+ // 7------- unknown
1216+ // -6------ unknown
1217+ // --5----- view 2 (zoom out) lamp
1218+ // ---4---- view 1 (zoom in) lamp
1219+ // ----3--- rev max lamp
1220+ // -----2-- start lamp
1221+ // ------1- coin counter 2
1222+ // -------0 coin counter 1
1223+
1224+ // Indy500 Output
1225+ // 7------- race leader lamp
1226+ // -6------ unknown
1227+ // --5----- view 2 (zoom out) lamp
1228+ // ---4---- view 1 (zoom in) lamp
1229+ // ----3--- unknown
1230+ // -----2-- start lamp
1231+ // ------1- coin counter 2
1232+ // -------0 coin counter 1
1233+
1234+ // Overrev Output
1235+ // 7------- unknown
1236+ // -6------ unknown
1237+ // --5----- view 2 lamp
1238+ // ---4---- view 1 lamp
1239+ // ----3--- unknown
1240+ // -----2-- start lamp
1241+ // ------1- coin counter 2
1242+ // -------0 coin counter 1
1243+
1244+ // Sgt24h Output
1245+ // 7------- unknown
1246+ // -6------ unknown
1247+ // --5----- view 2 lamp
1248+ // ---4---- view 1 lamp
1249+ // ----3--- unknown
1250+ // -----2-- start lamp
1251+ // ------1- coin counter 2
1252+ // -------0 coin counter 1
1253+
1254+ void model2_state::lamp_output_w (u8 data)
1255+ {
1256+ // Coin counters
1257+ machine ().bookkeeping ().coin_counter_w (0 , BIT (data, 0 ));
1258+ machine ().bookkeeping ().coin_counter_w (1 , BIT (data, 1 ));
1259+
1260+ // Lamps (bits 2–7)
1261+ for (int i = 0 ; i < 6 ; i++)
1262+ m_lamps[i] = BIT (data, i + 2 );
1263+ }
12171264
12181265// **************************************************************************
12191266// I/O BOARD
@@ -1527,6 +1574,7 @@ void model2_state::rchase2_drive_board_w(u8 data)
15271574
15281575void model2_state::drive_board_w (u8 data)
15291576{
1577+ m_wheel_motor = data;
15301578 m_driveio_comm_data = data;
15311579 m_drivecpu->set_input_line (0 , HOLD_LINE);
15321580}
@@ -2623,7 +2671,7 @@ void model2o_state::daytona(machine_config &config)
26232671 ioboard.an_callback <0 >().set_ioport (" STEER" );
26242672 ioboard.an_callback <1 >().set_ioport (" ACCEL" );
26252673 ioboard.an_callback <2 >().set_ioport (" BRAKE" );
2626- ioboard.output_callback ().set (FUNC (model2o_state::daytona_output_w ));
2674+ ioboard.output_callback ().set (FUNC (model2_state::lamp_output_w ));
26272675}
26282676
26292677void model2o_maxx_state::daytona_maxx (machine_config &config)
@@ -2648,7 +2696,7 @@ void model2o_state::desert(machine_config &config)
26482696 ioboard.an_callback <0 >().set_ioport (" STEER" );
26492697 ioboard.an_callback <1 >().set_ioport (" ACCEL" );
26502698 ioboard.an_callback <2 >().set_ioport (" BRAKE" );
2651- ioboard.output_callback ().set (FUNC (model2o_state::desert_output_w ));
2699+ ioboard.output_callback ().set (FUNC (model2_state::lamp_output_w ));
26522700}
26532701
26542702void model2o_state::vcop (machine_config &config)
@@ -2662,7 +2710,7 @@ void model2o_state::vcop(machine_config &config)
26622710 ioboard.in_callback <0 >().set_ioport (" IN0" );
26632711 ioboard.in_callback <1 >().set_ioport (" IN1" );
26642712 ioboard.in_callback <2 >().set_ioport (" IN2" );
2665- ioboard.output_callback ().set (FUNC (model2o_state::vcop_output_w ));
2713+ ioboard.output_callback ().set (FUNC (model2_state::lamp_output_w ));
26662714 ioboard.set_lightgun_p1x_tag (" P1_X" );
26672715 ioboard.set_lightgun_p1y_tag (" P1_Y" );
26682716 ioboard.set_lightgun_p2x_tag (" P2_X" );
@@ -2748,6 +2796,7 @@ void model2a_state::srallyc(machine_config &config)
27482796
27492797 sega_315_5649_device &io (*subdevice<sega_315_5649_device>(" io" ));
27502798 io.out_pe_callback ().set (FUNC (model2a_state::drive_board_w));
2799+ io.out_pf_callback ().set (FUNC (model2_state::lamp_output_w));
27512800 io.an_port_callback <0 >().set_ioport (" STEER" );
27522801 io.an_port_callback <1 >().set_ioport (" ACCEL" );
27532802 io.an_port_callback <2 >().set_ioport (" BRAKE" );
@@ -2831,6 +2880,7 @@ void model2b_state::model2b(machine_config &config)
28312880 io.in_pd_callback ().set_ioport (" IN2" );
28322881 io.in_pg_callback ().set_ioport (" SW" );
28332882 io.out_pe_callback ().set ([this ] (u8 data) { m_billboard->write (data); });
2883+ io.out_pf_callback ().set (FUNC (model2_state::lamp_output_w));
28342884
28352885 model2_timers (config);
28362886 model2_screen (config);
@@ -2868,6 +2918,8 @@ void model2b_state::indy500(machine_config &config)
28682918 model2b (config);
28692919
28702920 sega_315_5649_device &io (*subdevice<sega_315_5649_device>(" io" ));
2921+ io.out_pe_callback ().set (FUNC (model2b_state::drive_board_w));
2922+ io.out_pf_callback ().set (FUNC (model2_state::lamp_output_w));
28712923 io.an_port_callback <0 >().set_ioport (" STEER" );
28722924 io.an_port_callback <1 >().set_ioport (" ACCEL" );
28732925 io.an_port_callback <2 >().set_ioport (" BRAKE" );
@@ -2878,6 +2930,20 @@ void model2b_state::overrev2b(machine_config &config)
28782930 model2b (config);
28792931
28802932 sega_315_5649_device &io (*subdevice<sega_315_5649_device>(" io" ));
2933+ io.out_pe_callback ().set (FUNC (model2b_state::drive_board_w));
2934+ io.out_pf_callback ().set (FUNC (model2_state::lamp_output_w));
2935+ io.an_port_callback <0 >().set_ioport (" STEER" );
2936+ io.an_port_callback <1 >().set_ioport (" ACCEL" );
2937+ io.an_port_callback <2 >().set_ioport (" BRAKE" );
2938+ }
2939+
2940+ void model2b_state::sgt24h (machine_config& config)
2941+ {
2942+ model2b (config);
2943+
2944+ sega_315_5649_device& io (*subdevice<sega_315_5649_device>(" io" ));
2945+ io.out_pe_callback ().set (FUNC (model2b_state::drive_board_w));
2946+ io.out_pf_callback ().set (FUNC (model2_state::lamp_output_w));
28812947 io.an_port_callback <0 >().set_ioport (" STEER" );
28822948 io.an_port_callback <1 >().set_ioport (" ACCEL" );
28832949 io.an_port_callback <2 >().set_ioport (" BRAKE" );
@@ -2979,6 +3045,7 @@ void model2c_state::model2c(machine_config &config)
29793045 io.in_pc_callback ().set_ioport (" IN1" );
29803046 io.in_pd_callback ().set_ioport (" IN2" );
29813047 io.in_pg_callback ().set_ioport (" SW" );
3048+ io.out_pf_callback ().set (FUNC (model2_state::lamp_output_w));
29823049
29833050 model2_timers (config);
29843051 model2_screen (config);
@@ -3001,6 +3068,7 @@ void model2c_state::stcc(machine_config &config)
30013068 model2c (config);
30023069
30033070 sega_315_5649_device &io (*subdevice<sega_315_5649_device>(" io" ));
3071+ io.out_pf_callback ().set (FUNC (model2_state::lamp_output_w));
30043072 io.an_port_callback <0 >().set_ioport (" STEER" );
30053073 io.an_port_callback <1 >().set_ioport (" ACCEL" );
30063074 io.an_port_callback <2 >().set_ioport (" BRAKE" );
@@ -3058,6 +3126,7 @@ void model2c_state::overrev2c(machine_config &config)
30583126 model2c (config);
30593127
30603128 sega_315_5649_device &io (*subdevice<sega_315_5649_device>(" io" ));
3129+ io.out_pf_callback ().set (FUNC (model2_state::lamp_output_w));
30613130 io.an_port_callback <0 >().set_ioport (" STEER" );
30623131 io.an_port_callback <1 >().set_ioport (" ACCEL" );
30633132 io.an_port_callback <2 >().set_ioport (" BRAKE" );
0 commit comments