Skip to content

Commit 880fda3

Browse files
committed
update
1 parent d25ecdb commit 880fda3

File tree

2 files changed

+108
-33
lines changed

2 files changed

+108
-33
lines changed

src/mame/sega/model2.cpp

Lines changed: 101 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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

15281575
void 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

26292677
void 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

26542702
void 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");

src/mame/sega/model2.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ class model2_state : public driver_device
7272
m_copro_data(*this, "copro_data"),
7373
m_in0(*this, "IN0"),
7474
m_gears(*this, "GEARS"),
75-
m_lightgun_ports(*this, {"P1_Y", "P1_X", "P2_Y", "P2_X"})
75+
m_lightgun_ports(*this, {"P1_Y", "P1_X", "P2_Y", "P2_X"}),
76+
m_lamps(*this, "lamp%u", 0U),
77+
m_wheel_motor(*this, "wheel_motor")
7678
{ }
7779

7880
/* Public for access by the rendering functions */
@@ -101,6 +103,7 @@ class model2_state : public driver_device
101103
void init_sgt24h();
102104
void init_srallyc();
103105
void init_powsledm();
106+
void lamp_output_w(u8 data);
104107

105108
protected:
106109
virtual void machine_start() override ATTR_COLD;
@@ -135,6 +138,8 @@ class model2_state : public driver_device
135138
required_ioport m_in0;
136139
optional_ioport m_gears;
137140
optional_ioport_array<4> m_lightgun_ports;
141+
output_finder<6> m_lamps;
142+
output_finder<> m_wheel_motor;
138143

139144
u32 m_timervals[4]{};
140145
u32 m_timerorig[4]{};
@@ -531,6 +536,7 @@ class model2b_state : public model2_state
531536
void gunblade(machine_config &config);
532537
void dynabb(machine_config &config);
533538
void zerogun(machine_config &config);
539+
void sgt24h(machine_config& config);
534540

535541
protected:
536542
virtual void machine_start() override ATTR_COLD;

0 commit comments

Comments
 (0)