srcclean the tree.

This commit is contained in:
Vas Crabb 2025-03-23 05:13:47 +11:00
parent cbe7391c95
commit 297e546844
32 changed files with 824 additions and 824 deletions

View File

@ -29,7 +29,7 @@ mif201_device::mif201_device(const machine_config &mconfig, const char *tag, dev
//void mif201_device::irq_out(int state)
//{
// m_bus->int_w<2>(state);
// m_bus->int_w<2>(state);
//}

View File

@ -36,7 +36,7 @@ private:
required_device_array<i8251_device, 2> m_uart;
required_device<pit8253_device> m_pit;
// void map(address_map &map);
// void map(address_map &map);
};

View File

@ -112,17 +112,17 @@ u8 aha2940au_scsi_device::capptr_r()
void aha2940au_scsi_device::config_map(address_map &map)
{
pci_card_device::config_map(map);
// map(0x40, 0x40) DEVCONFIG
// map(0x41, 0x41) DEVSTATUS0
// map(0x42, 0x42) DEVSTATUS1
// map(0x43, 0x43) PCIERRGEN
// map(0x40, 0x40) DEVCONFIG
// map(0x41, 0x41) DEVSTATUS0
// map(0x42, 0x42) DEVSTATUS1
// map(0x43, 0x43) PCIERRGEN
// PME 1.0
map(0xdc, 0xdf).lr32(NAME([] { return 0x0001'0001; }));
// map(0xe0, 0xe1) PM_CSR
// map(0xe2, 0xe2) PMCSR_BSE
// map(0xe3, 0xe3) PM_DATA
// map(0xff, 0xff) IDENREG
// map(0xe0, 0xe1) PM_CSR
// map(0xe2, 0xe2) PMCSR_BSE
// map(0xe3, 0xe3) PM_DATA
// map(0xff, 0xff) IDENREG
}
void aha2940au_scsi_device::io_map(address_map &map)

View File

@ -8,7 +8,7 @@
systems without a TI-99/4A console, like the SGCPU and the Geneve. The
board must be removed from the sidecar unit and plugged on this simple
adapter board, which is then put in a slot of the Peripheral Expansion Box.
+-------+
+-----|-------|---+
| Speech syn |
@ -20,21 +20,21 @@
| Adapter board |
| |
(((o LED PEB slot connector |
+--------------|||||||||||||||||||||||||----------+
+--------------|||||||||||||||||||||||||----------+
|||||||||||||||||||||||||
Technical detail:
The SBE signal (Speech Block Enable), which is generated in the TI console,
is not forwarded to the PEB. One of the tasks of this board is thus to
decode the mapped addresses once more and to activate the synthesizer
is not forwarded to the PEB. One of the tasks of this board is thus to
decode the mapped addresses once more and to activate the synthesizer
accordingly.
A second issue for Geneve users is that the address extension bits (AMA,
AMB, AMC) need to be decoded as well to avoid the synthesizer interfering
with other memory access. This can be activated in the configuration. The
default is on.
Michael Zapf
March 2025
@ -93,11 +93,11 @@ void ti_speechsyn_adapter_device::setaddress_dbin(offs_t offset, int state)
{
// Valid access = not(DBIN and A5)
bool reading = (state==ASSERT_LINE);
// An access is valid when reading from 9000 and writing to 9400.
// An access is valid when reading from 9000 and writing to 9400.
bool valid = (((offset & 0x0400)==0) == reading);
bool sbe = false;
// Recreate the SBE signal that is only available at the I/O port of the console
if (m_dec_high)
// We need to decode the AMA/AMB/AMC address extension lines
@ -128,7 +128,7 @@ void ti_speechsyn_adapter_device::device_start()
void ti_speechsyn_adapter_device::device_reset()
{
m_dec_high = (ioport("AMADECODE")->read()!=0);
LOGMASKED(LOG_CONFIG, "Speech adapter%s decoding the AMA/B/C lines.\n", m_dec_high? "" : " not");
LOGMASKED(LOG_CONFIG, "Speech adapter%s decoding the AMA/B/C lines.\n", m_dec_high? "" : " not");
}
void ti_speechsyn_adapter_options(device_slot_interface &device)

View File

@ -38,7 +38,7 @@ private:
uint8_t* m_rom4;
uint8_t* m_roma;
uint8_t* m_romc;
required_device<ram_device> m_ram;
};

View File

@ -1,49 +1,49 @@
// license:LGPL-2.1+
// copyright-holders:Michael Zapf
/****************************************************************************
TI-99 Speech synthesizer
This is the emulation Speech Synthesizer, which plugs into the I/O port of
the TI console. Even though the sidecar expansion concept was largely
abandoned by the introduction of the Peripheral Expansion Box with the 4A,
the Speech Synthesizer was sold as a sidecar expansion until the end.
Typical setup:
Speech Synthesizer
sidecar
v
v
+----------------+---+----------
| TI-99/4(A) | | PEB connection cable
+------------+---+ +----------
| oooooooooo | |---+
| oooooooooo | |
+-----------------
Also as a common modification, users removed the board inside the sidecar
and placed it on an adapter to go into the PEB and thus to become
available for the Geneve or SGCPU. See bus/ti99/peb/speechadapter.cpp.
The sidecar offers a flippable lid where vocabulary expansion modules were
supposed to be plugged in, but those have never seen daylight. In most of
the units, including mine, no connector can be found under the lid, so the
decision to drop this idea must have come early.
The sidecar offers a flippable lid where vocabulary expansion modules were
supposed to be plugged in, but those have never seen daylight. In most of
the units, including mine, no connector can be found under the lid, so the
decision to drop this idea must have come early.
Technical details:
The Voice Synthesis Processor (VSP) used for the TI Speech Synthesizer
is the CD2501E, aka TMS5200 (internal name TMC0285), a predecessor of the
TMS5220 which was used in many other commercial products.
The Voice Synthesis Processor (VSP) used for the TI Speech Synthesizer
is the CD2501E, aka TMS5200 (internal name TMC0285), a predecessor of the
TMS5220 which was used in many other commercial products.
Two TMS6100 circuits hold the standard vocabulary, mainly used from Extended
Basic programs.
The interaction with the TMS5200 relies completely on the READY*
line; the INT* line is not connected.
The VSP delivers a READY* signal, which needs to be inverted for the rest
of the TI system. The board of the Speech Synthesizer uses a simple
of the TI system. The board of the Speech Synthesizer uses a simple
transistor for this purpose.
Michael Zapf
March 2025
@ -74,7 +74,7 @@ namespace bus::ti99::sidecar {
Constructor called from subclasses.
*/
ti_speech_synthesizer_device::ti_speech_synthesizer_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: bus::ti99::internal::ioport_attached_device(mconfig, TI99_SPEECHSYN, tag, owner, clock),
: bus::ti99::internal::ioport_attached_device(mconfig, TI99_SPEECHSYN, tag, owner, clock),
m_vsp(*this, VSP),
m_port(*this, PORT),
m_reading(false),
@ -144,7 +144,7 @@ void ti_speech_synthesizer_device::setaddress_dbin(offs_t offset, int state)
{
// If other address, turn off RS* and WS* (negative logic!)
m_vsp->combined_rsq_wsq_w(~0);
// Pass through to the external port
if (m_port != nullptr)
m_port->setaddress_dbin(offset, state);
@ -200,7 +200,7 @@ void ti_speech_synthesizer_device::reset_in(int state)
}
/*
Forward the incoming interrupt to the console
Forward the incoming interrupt to the console
*/
void ti_speech_synthesizer_device::extint(int state)
{
@ -216,10 +216,10 @@ void ti_speech_synthesizer_device::extready(int state)
void ti_speech_synthesizer_device::speech_ready(int state)
{
// Invert the READY* signal
m_ssyn_ready = (state==0)? ASSERT_LINE : CLEAR_LINE;
// Invert the READY* signal
m_ssyn_ready = (state==0)? ASSERT_LINE : CLEAR_LINE;
LOGMASKED(LOG_READY, "SSyn READY = %d\n", (state==0));
if ((state==0) && !m_reading)
// Clear the lines only when we are done with writing.
m_vsp->combined_rsq_wsq_w(~0);

View File

@ -1,7 +1,7 @@
// license:LGPL-2.1+
// copyright-holders:Michael Zapf
/****************************************************************************
Speech Synthesizer sidecar device
Michael Zapf
@ -49,7 +49,7 @@ protected:
private:
required_device<cd2501e_device> m_vsp;
required_device<bus::ti99::internal::ioport_device> m_port;
void speech_ready(int state);
bool m_reading;

View File

@ -79,7 +79,7 @@ void sc61860_device::sc61860_instruction()
case 76: sc61860_in_a();m_icount-=2;break;
case 77: /*nopw*/;m_icount-=2;break;
case 78: sc61860_wait();m_icount-=6;break;
case 79: sc61860_wait_x(false);m_icount-=1;break;
case 79: sc61860_wait_x(false);m_icount-=1;break;
case 80: sc61860_inc_p();m_icount-=2;break;
case 81: sc61860_dec_p();m_icount-=2;break;
case 82: sc61860_store_ext(A);m_icount-=2;break;

View File

@ -622,11 +622,11 @@ void am9513_device::set_tc(int c, bool state)
if ((m_counter_mode[d] & 0x1f00) == (state ? 0x0000 : 0x1000))
{
LOGMASKED(LOG_TC, "Counter %d: TC cascade Next Count %u \n", c + 1, m_count[d]);
count_edge(d);
}
// TC gating
if ((m_counter_mode[d] & 0xe000) == 0x2000)
gate_count(d, state && (bus_is_16_bit() || m_gate_alt[d]));

View File

@ -212,7 +212,7 @@ public:
s3virgevx_vga_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
// s3virgevx_vga_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// s3virgevx_vga_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;

View File

@ -6,7 +6,7 @@
Skeleton driver for Secoinsa Serie 20 minicomputer.
Secoinsa (Sociedad Española de Comunicaciones e Informática, S.A.) was a company founded in 1975 by Fujitsu, the Spanish
National Institute for Industry (Instituto Nacional de Industria, INI), Telefónica, and other investors (mainly banks).
National Institute for Industry (Instituto Nacional de Industria, INI), Telefónica, and other investors (mainly banks).
It primarily manufactured and sold FACOM clones for the Spanish market.
In 1986, the company was split and sold. Telefónica acquired the professional services division, while Fujitsu España
@ -120,7 +120,7 @@ PCB SECOINSA SM16B-0200-0140:
CPU PCB
CPU PCB
_______________________________________________________________
| ___ __________ _________ |
| | | |SN74LS74AN |74LS08N_| |
@ -292,7 +292,7 @@ RAM PCB 2 (24 x HM6116P-3)
| |HM | |HM | |HM | |HM | |HM | AM25LS252IPC __|
| |6116P | |6116P | |6116P | |6116P | |6116P | __|
| |3 | |3 | |3 | |3 | |3 | _________ __|
| |______| |______| |______| |______| |______| SN74ALS133N __|
| |______| |______| |______| |______| |______| SN74ALS133N __|
| _______ _______ _______ _______ _______ __|
| | | | | | | | | | | __|
| | | | | | | | | | | __________ __|
@ -345,7 +345,7 @@ RAM PCB 3 (24 x HM6116P-3)
| |HM | |HM | |HM | |HM | |HM | AM25LS252IPC __|
| |6116P | |6116P | |6116P | |6116P | |6116P | __|
| |3 | |3 | |3 | |3 | |3 | _________ __|
| |______| |______| |______| |______| |______| SN74ALS133N __|
| |______| |______| |______| |______| |______| SN74ALS133N __|
| _______ _______ _______ _______ _______ __|
| | | | | | | | | | | __|
| | | | | | | | | | | __________ __|
@ -398,7 +398,7 @@ RAM PCB 4 (24 x HM6116P-3)
| |HM | |HM | |HM | |HM | |HM | AM25LS252IPC __|
| |6116P | |6116P | |6116P | |6116P | |6116P | __|
| |3 | |3 | |3 | |3 | |3 | _________ __|
| |______| |______| |______| |______| |______| SN74ALS133N __|
| |______| |______| |______| |______| |______| SN74ALS133N __|
| _______ _______ _______ _______ _______ __|
| | | | | | | | | | | __|
| | | | | | | | | | | __________ __|
@ -451,7 +451,7 @@ RAM PCB 5 (32 x HM6116P-3)
| |HM | |HM | |HM | |HM | |HM | AM25LS252IPC __|
| |6116P | |6116P | |6116P | |6116P | |6116P | __|
| |3 | |3 | |3 | |3 | |3 | _________ __|
| |______| |______| |______| |______| |______| SN74ALS133N __|
| |______| |______| |______| |______| |______| SN74ALS133N __|
| _______ _______ _______ _______ _______ __|
| | | | | | | | | | | __|
| | | | | | | | | | | __________ __|
@ -504,7 +504,7 @@ RAM PCB 5 (24 x HM6116P-3)
| |HM | |HM | |HM | |HM | |HM | AM25LS252IPC __|
| |6116P | |6116P | |6116P | |6116P | |6116P | __|
| |3 | |3 | |3 | |3 | |3 | _________ __|
| |______| |______| |______| |______| |______| SN74ALS133N __|
| |______| |______| |______| |______| |______| SN74ALS133N __|
| _______ _______ _______ _______ _______ __|
| | | | | | | | | | | __|
| | | | | | | | | | | __________ __|

View File

@ -111,7 +111,7 @@
- Reworked coin inputs per game.
- Promoted Draw 80 Poker (Minn) to working.
- Promoted Wild 1 (Quick Change Kit) to working.
TODO:
@ -585,8 +585,8 @@ static INPUT_PORTS_START( drw80wld )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_GAMBLE_KEYOUT )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("KeyIn x01") PORT_CODE(KEYCODE_A) // KeyIn A (Coinage x 1 ) No timeout
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN1 ) // coin sequencer A Or Coin Switch (DSW_1 Selector)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 ) // coin sequencer B
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN3 ) // coin sequencer C
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 ) // coin sequencer B
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN3 ) // coin sequencer C
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("KeyIn x04") PORT_CODE(KEYCODE_S) // Key In B (Coinage x 4) No Timeout
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("KeyIn x20") PORT_CODE(KEYCODE_D) // Key In C (Coinage x 20) No Timeout

File diff suppressed because it is too large Load Diff

View File

@ -64,7 +64,7 @@ copyright-holders: Roberto Fresca, Grull Osgo.
<bounds x="0.1" y="0.30" width="0.8" height="0.4" />
</text>
</element>
<element name="L5" defstate="1">
<disk state="0"><color red="1.0" green="1.0" blue="1.0" /></disk>
<disk state="1"><color red="0.20" green="0.20" blue="0.20" /></disk>
@ -73,7 +73,7 @@ copyright-holders: Roberto Fresca, Grull Osgo.
<bounds x="0.1" y="0.30" width="0.8" height="0.4" />
</text>
</element>
<element name="L6" defstate="1">
<disk state="0"><color red="1.0" green="1.0" blue="1.0" /></disk>
<disk state="1"><color red="0.20" green="0.20" blue="0.20" /></disk>
@ -82,7 +82,7 @@ copyright-holders: Roberto Fresca, Grull Osgo.
<bounds x="0.1" y="0.30" width="0.8" height="0.4" />
</text>
</element>
<element name="LX">
<rect><color red="0.00" green="0.0" blue="0.0" /></rect>
@ -154,7 +154,7 @@ copyright-holders: Roberto Fresca, Grull Osgo.
<element name="lamp3" ref="L3" inputtag="IN1" inputmask="0x08">
<bounds x="2.545" y="3.12" width="0.31" height="0.26" />
</element>
<!-- Draw button-lamp -->
<element name="lamp6" ref="buttonedge_w" inputtag="IN1" inputmask="0x40">
<bounds x="2.875" y="3.50" width="0.35" height="0.30" />
@ -172,4 +172,4 @@ copyright-holders: Roberto Fresca, Grull Osgo.
</element>
</view>
</mamelayout>
</mamelayout>

View File

@ -73,7 +73,7 @@ copyright-holders: Roberto Fresca, Grull Osgo.
<bounds x="0.1" y="0.30" width="0.8" height="0.4" />
</text>
</element>
<element name="L7" defstate="0">
<rect state="1"><color red="1.0" green="1.0" blue="1.0" /></rect>
<rect state="0"><color red="0.20" green="0.20" blue="0.20" /></rect>
@ -82,7 +82,7 @@ copyright-holders: Roberto Fresca, Grull Osgo.
<bounds x="0.05" y="0.10" width="0.9" height="0.8" />
</text>
</element>
<element name="LX">
@ -147,7 +147,7 @@ copyright-holders: Roberto Fresca, Grull Osgo.
<bounds x="1.845" y="3.12" width="0.31" height="0.26" />
</element>
<!-- Hold 4 button-lamp -->
<element name="lamp5" ref="buttonedge_y" inputtag="IN2" inputmask="0x0001">
<bounds x="2.525" y="3.10" width="0.35" height="0.30" />
@ -155,7 +155,7 @@ copyright-holders: Roberto Fresca, Grull Osgo.
<element name="lamp5" ref="L3" inputtag="IN2" inputmask="0x0001">
<bounds x="2.545" y="3.12" width="0.31" height="0.26" />
</element>
<!-- Deal/Draw button-lamp -->
<element name="lamp1" ref="buttonedge_w" inputtag="IN2" inputmask="0x0010">
<bounds x="2.875" y="3.50" width="0.35" height="0.30" />
@ -179,4 +179,4 @@ copyright-holders: Roberto Fresca, Grull Osgo.
</element>
</view>
</mamelayout>
</mamelayout>

View File

@ -73,7 +73,7 @@ copyright-holders: Roberto Fresca, Grull Osgo.
<bounds x="0.1" y="0.30" width="0.8" height="0.4" />
</text>
</element>
<element name="L7" defstate="0">
<disk state="1"><color red="1.0" green="1.0" blue="1.0" /></disk>
<disk state="0"><color red="0.20" green="0.20" blue="0.20" /></disk>
@ -82,7 +82,7 @@ copyright-holders: Roberto Fresca, Grull Osgo.
<bounds x="0.1" y="0.30" width="0.8" height="0.4" />
</text>
</element>
<element name="L8" defstate="0">
<disk state="1"><color red="1.0" green="1.0" blue="1.0" /></disk>
<disk state="0"><color red="0.20" green="0.20" blue="0.20" /></disk>
@ -91,7 +91,7 @@ copyright-holders: Roberto Fresca, Grull Osgo.
<bounds x="0.1" y="0.30" width="0.8" height="0.4" />
</text>
</element>
<element name="LX">
<rect><color red="0.00" green="0.0" blue="0.0" /></rect>
@ -171,7 +171,7 @@ copyright-holders: Roberto Fresca, Grull Osgo.
<element name="lamp7" ref="L3" inputtag="IN1" inputmask="0x08">
<bounds x="2.545" y="3.12" width="0.31" height="0.26" />
</element>
<!-- Draw button-lamp -->
<element name="lamp6" ref="buttonedge_w" inputtag="IN1" inputmask="0x40">
<bounds x="2.875" y="3.50" width="0.35" height="0.30" />
@ -189,4 +189,4 @@ copyright-holders: Roberto Fresca, Grull Osgo.
</element>
</view>
</mamelayout>
</mamelayout>

View File

@ -544,7 +544,7 @@ void linndrum_audio_device::mux_drum_w(int voice, u8 data, bool is_strobe)
}
LOGMASKED(LOG_STROBES, "Strobed mux drum %s: %02x (gain: %f)\n",
MUX_VOICE_NAMES[voice], data, m_mux_volume[voice]->gain());
MUX_VOICE_NAMES[voice], data, m_mux_volume[voice]->gain());
}
void linndrum_audio_device::snare_w(u8 data)
@ -591,7 +591,7 @@ void linndrum_audio_device::snare_w(u8 data)
m_snare_volume->set_gain(gain);
LOGMASKED(LOG_STROBES, "Strobed snare / sidestick: %02x (iref: %f, gain: %f)\n",
data, iref, gain);
data, iref, gain);
}
void linndrum_audio_device::tom_w(u8 data)
@ -633,8 +633,8 @@ void linndrum_audio_device::tom_w(u8 data)
m_tom_out[i]->set_gain((i == selected_output) ? 1 : 0);
LOGMASKED(LOG_STROBES, "Strobed tom / conga: %02x (is_tom: %d, pitch:%d, output: %d, %s)\n",
data, m_tom_selected, m_tom_selected_pitch, selected_output,
(selected_output >= 0) ? TOM_VOICE_NAMES[selected_output] : "none");
data, m_tom_selected, m_tom_selected_pitch, selected_output,
(selected_output >= 0) ? TOM_VOICE_NAMES[selected_output] : "none");
}
void linndrum_audio_device::strobe_click_w(u8 /*data*/)
@ -1020,8 +1020,8 @@ void linndrum_audio_device::update_volume_and_pan(int channel)
m_voice_hpf[channel]->filter_rc_set_RC(filter_rc_device::HIGHPASS, r_voice_gnd, 0, 0, C_VOICE);
LOGMASKED(LOG_MIX, "Gain update for %s - left: %f, right: %f, HPF cutoff: %.2f Hz\n",
MIXER_CHANNEL_NAMES[channel], gain_left, gain_right,
1.0F / (2 * float(M_PI) * r_voice_gnd * C_VOICE));
MIXER_CHANNEL_NAMES[channel], gain_left, gain_right,
1.0F / (2 * float(M_PI) * r_voice_gnd * C_VOICE));
}
void linndrum_audio_device::update_master_volume()
@ -1059,7 +1059,7 @@ void linndrum_audio_device::update_mux_drum_pitch()
m_mux_timer->adjust(period, 0, period);
LOGMASKED(LOG_PITCH, "Updated mux drum pitch. CV: %f, freq: %d, adjusted: %d\n",
cv, freq, adjusted_freq);
cv, freq, adjusted_freq);
}
void linndrum_audio_device::update_snare_pitch()
@ -1119,7 +1119,7 @@ void linndrum_audio_device::update_tom_pitch()
m_tom_timer->adjust(period, 0, period);
LOGMASKED(LOG_PITCH, "Updated tom pitch: %d, %d. CV: %f, freq: %d\n",
knob_index, knob_value, cv, freq);
knob_index, knob_value, cv, freq);
}
namespace {

View File

@ -430,15 +430,15 @@
- Added some notes.
[2025-03-10]
- Bonne Chance chars and tiles both 3bpp.
- New TILE_GET_INFO and video start for Bonne Chance.
- Bonne Chance chars and tiles both 3bpp.
- New TILE_GET_INFO and video start for Bonne Chance.
- Reworked the Bonne Chance and 7mezzo color palette.
TODO:
- Figure out how the palette is generated, to avoid a custom palette.
- Find a board to investigate if the chars GFX are 1bpp or 3bpp.
- Find a board to investigate if the chars GFX are 1bpp or 3bpp.
*******************************************************************************/
@ -683,17 +683,17 @@ void magicfly_state::bchance_palette(palette_device &palette) const
palette.set_pen_color(7*8 + 1, rgb_t(0xff, 0xff, 0xff));
palette.set_pen_color(0xa*8 + 1, rgb_t(0x00, 0xff, 0x00)); // credits (green)
palette.set_pen_color(0xb*8 + 1, rgb_t(0xff, 0xff, 0x00)); // odds + bet (yell)
palette.set_pen_color(0xd*8 + 1, rgb_t(0xff, 0x00, 0xff)); // push deal (mag)
palette.set_pen_color(0xd*8 + 1, rgb_t(0xff, 0x00, 0xff)); // push deal (mag)
palette.set_pen_color(0xe*8 + 1, rgb_t(0x00, 0xff, 0xff)); // big good luck (cyan)
palette.set_pen_color(0xf*8 + 1, rgb_t(0xff, 0xff, 0xff)); // odds (white)
palette.set_pen_color(0xf*8 + 1, rgb_t(0xff, 0xff, 0xff)); // odds (white)
// color code 7 all black
for(int i=0; i < 0x8; i++)
{
palette.set_pen_color(7*8 + i, rgb_t(0x00, 0x00, 0x00));
}
// all code+2 colors black (corners)
// all code+2 colors black (corners)
for(int i=0; i < 0x10; i++)
{
palette.set_pen_color(i*8 + 2, rgb_t(0x00, 0x00, 0x00));

View File

@ -543,14 +543,14 @@
- Added new test functions for drhl, drhla, dphl, and dphla.
- Cleaned all the conditional unused things.
- Rewrote inputs for different sets.
- DIP switches improvements for norautp, norautrh,
- DIP switches improvements for norautp, norautrh,
- New inputs for norautua, dphla, drhl, ssjkrpkr.
- New portmap for dphl, dphla.
- Added Interrupts through vertical sync for all sets based on i8080.
- Fixed norautua and norautub table for bin to bcd conversion.
- New button-lamps layout with 10 buttons for dphl, dphla, dphljp,
drhl, drhla, and ssjkrpkr.
- Clickable buttons for all former buttons-lamps layouts.
- Clickable buttons for all former buttons-lamps layouts.
- Promoted drhl, drhla, norautua, norautub, and ssjkrpkr to working.
- Implemented a custom timer and counter to get correct reads in unknown hardware.
@ -573,7 +573,7 @@
- Derivated inputs for fasdrwp.
- Added buttons-lamps layout for fastdrwp.
- Promoted fastdrwp set to working.
TODO:
@ -589,8 +589,8 @@
- dphl type, as dphljp, smshilo, dphlunkb, were flagged as
imperfect graphics due they show part of a paytable as garbage
when you coin/bet the game. After deal, they are not showing
this anymore.
when you coin/bet the game. After deal, they are not showing
this anymore.
*******************************************************************************/
@ -636,7 +636,7 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_hopper(*this, "hopper"),
m_hopper(*this, "hopper"),
m_decrypted_opcodes(*this, "decrypted_opcodes"),
m_lamps(*this, "lamp%u", 0U)
{ }
@ -716,15 +716,15 @@ private:
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_device<ticket_dispenser_device> m_hopper;
required_device<ticket_dispenser_device> m_hopper;
optional_shared_ptr<uint8_t> m_decrypted_opcodes;
output_finder<12> m_lamps;
int m_test3 = 1;
int m_test3b = 0;
int m_test_count = 0;
uint8_t m_videoram[0x800] = {};
};
@ -757,7 +757,7 @@ uint32_t norautp_state::screen_update_norautp(screen_device &screen, bitmap_ind1
int colour = (m_np_vram[count] & 0xc0) >> 6;
if((y == 4) | ( y == 5))
colour = colour + 4;
m_gfxdecode->gfx(1)->opaque(bitmap,cliprect, tile, colour, 0, 0, (x * 32) + 8, y * 32);
count+=2;
@ -801,7 +801,7 @@ void norautp_state::norautp_palette(palette_device &palette) const
palette.set_pen_color(13, rgb_t(0xff, 0x00, 0x00)); // red
palette.set_pen_color(14, rgb_t(0xff, 0xff, 0xff)); // white
palette.set_pen_color(15, rgb_t(0x00, 0x00, 0x00)); // black
}
void norautp_state::drhl_palette(palette_device &palette) const
@ -841,11 +841,11 @@ void norautp_state::sureshoto_palette(palette_device &palette) const
palette.set_pen_color(8, rgb_t(0xff, 0xff, 0xff)); // white
palette.set_pen_color(9, rgb_t(0x00, 0x00, 0x00)); // cards bg
palette.set_pen_color(10, rgb_t(0xff, 0xff, 0xff)); // white
palette.set_pen_color(11, rgb_t(0x00, 0x00, 0x00));
palette.set_pen_color(11, rgb_t(0x00, 0x00, 0x00));
palette.set_pen_color(12, rgb_t(0xff, 0xff, 0xff)); // white
palette.set_pen_color(13, rgb_t(0xff, 0x00, 0x00));
palette.set_pen_color(13, rgb_t(0xff, 0x00, 0x00));
palette.set_pen_color(14, rgb_t(0xff, 0xff, 0xff)); // white
palette.set_pen_color(15, rgb_t(0xff, 0x00, 0x00));
palette.set_pen_color(15, rgb_t(0xff, 0x00, 0x00));
}
@ -921,7 +921,7 @@ void norautp_state::counterlamps_w(uint8_t data)
m_lamps[10] = BIT(data, 0); // HI lamp
m_lamps[11] = BIT(data, 1); // LO lamp
m_hopper->motor_w(BIT(data, 2));
m_hopper->motor_w(BIT(data, 2));
machine().bookkeeping().coin_counter_w(0, data & 0x10); // Coin1/3 counter
machine().bookkeeping().coin_counter_w(1, data & 0x20); // Coin2 counter
@ -944,7 +944,7 @@ TIMER_CALLBACK_MEMBER(norautp_state::ppi2_ack)
m_np_vram[np_addr] = vram_data;
m_videoram[np_addr] = vram_data;
}
}
// game waits for bit 4 (0x10) to be reset.
@ -1314,7 +1314,7 @@ static INPUT_PORTS_START( norautrh )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "Bet Max" ) PORT_DIPLOCATION("DSW1:6")
PORT_DIPNAME( 0x04, 0x04, "Bet Max" ) PORT_DIPLOCATION("DSW1:6")
PORT_DIPSETTING( 0x04, "1" ) PORT_CONDITION("DSW1", 0x80, EQUALS, 0x00)
PORT_DIPSETTING( 0x00, "20" ) PORT_CONDITION("DSW1", 0x80, EQUALS, 0x00)
PORT_DIPSETTING( 0x04, "5 " ) PORT_CONDITION("DSW1", 0x80, EQUALS, 0x80)
@ -1556,7 +1556,7 @@ static INPUT_PORTS_START( norautua )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "Bet Max" ) PORT_DIPLOCATION("DSW1:6")
PORT_DIPNAME( 0x04, 0x04, "Bet Max" ) PORT_DIPLOCATION("DSW1:6")
PORT_DIPSETTING( 0x04, "1" ) PORT_CONDITION("DSW1", 0x80, EQUALS, 0x00)
PORT_DIPSETTING( 0x00, "20" ) PORT_CONDITION("DSW1", 0x80, EQUALS, 0x00)
PORT_DIPSETTING( 0x04, "5 " ) PORT_CONDITION("DSW1", 0x80, EQUALS, 0x80)
@ -1615,7 +1615,7 @@ static INPUT_PORTS_START( dphl )
PORT_DIPSETTING( 0x40, "When 8 or more is bet" )
PORT_DIPSETTING( 0x20, "When 4 or more is bet" )
PORT_DIPSETTING( 0x00, "Always" )
PORT_DIPNAME( 0x80, 0x80, "Test Mode" ) PORT_DIPLOCATION("DSW1:1")
PORT_DIPNAME( 0x80, 0x80, "Test Mode" ) PORT_DIPLOCATION("DSW1:1")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
@ -1624,9 +1624,9 @@ INPUT_PORTS_END
static INPUT_PORTS_START( dphla )
PORT_INCLUDE( dphl )
PORT_MODIFY("IN0")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) // hopper
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) // hopper
INPUT_PORTS_END
@ -1690,7 +1690,7 @@ static INPUT_PORTS_START( ssjkrpkr )
PORT_DIPSETTING( 0x40, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:1")
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:1")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
@ -1699,7 +1699,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( sureshoto )
PORT_INCLUDE( dphl )
PORT_MODIFY("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Break (Deal)")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused bet
@ -1737,7 +1737,7 @@ static INPUT_PORTS_START( sureshoto )
PORT_DIPSETTING( 0x40, "When 4 or more is bet" )
PORT_DIPSETTING( 0x20, "When 4 or more is bet" )
PORT_DIPSETTING( 0x00, "Always" )
PORT_DIPNAME( 0x80, 0x80, "Test Mode" ) PORT_DIPLOCATION("DSW1:1")
PORT_DIPNAME( 0x80, 0x80, "Test Mode" ) PORT_DIPLOCATION("DSW1:1")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
@ -1766,7 +1766,7 @@ static INPUT_PORTS_START( fastdrwp )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "Test Mode" ) PORT_DIPLOCATION("DSW1:1")
PORT_DIPNAME( 0x80, 0x80, "Test Mode" ) PORT_DIPLOCATION("DSW1:1")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
@ -1952,7 +1952,7 @@ void norautp_state::noraut_base(machine_config &config)
GFXDECODE(config, m_gfxdecode, m_palette, gfx_norautp);
PALETTE(config, m_palette, FUNC(norautp_state::norautp_palette), 16);
HOPPER(config, m_hopper, attotime::from_msec(150));
// sound hardware
@ -5051,7 +5051,7 @@ void norautp_state::init_enc()
ROM[0x1da0] = 0x10; // 10.000
ROM[0x1da1] = 0x27;
ROM[0x1da2] = 0xe8; // 1.000
ROM[0x1da3] = 0x03;
ROM[0x1da3] = 0x03;
ROM[0x1da4] = 0x64; // 100
ROM[0x1da5] = 0x00;
ROM[0x1da6] = 0x0a; // 10
@ -5094,7 +5094,7 @@ void norautp_state::init_unka()
ROM[0x0003] = 0xff;
ROM[0x0004] = 0xd0;
ROM[0x0005] = 0xc3;
ROM[0x0006] = 0x80;
ROM[0x0006] = 0x80;
ROM[0x0007] = 0x01;
ROM[0x01d5] = 0xaf;
@ -5106,8 +5106,8 @@ void norautp_state::init_unkb()
for (int i = 0x0680; i < 0x0740; i++)
{
ROM[i] = ~ROM[i];
ROM[i + 0X800] = ~ROM[i + 0X800];
}
ROM[i + 0x800] = ~ROM[i + 0x800];
}
}

View File

@ -11,7 +11,7 @@
* Challenger Draw Poker
https://flyers.arcade-museum.com/videogames/show/4296
https://flyers.arcade-museum.com/videogames/show/4374
* Challenger Black Jack 21
https://flyers.arcade-museum.com/videogames/show/4295
@ -130,7 +130,7 @@
registers:
Credits: da-db
Coins in: dd
@ -159,9 +159,9 @@
SET UP
TIMER 6 (range: 1 to 12)
MAX BET 8 (range: 5 to 50)
AUTO BET OFF (options: OFF/ON)
AUTO DEAL OFF (options: OFF/ON)
REBET OFF (options: OFF/ON)
AUTO BET OFF (options: OFF/ON)
AUTO DEAL OFF (options: OFF/ON)
REBET OFF (options: OFF/ON)
After adjusting the last item, you will return to the game mode.
@ -244,7 +244,7 @@ public:
m_dac(*this, "dac"),
m_in0(*this, "IN0"),
m_in1(*this, "IN1"),
m_in2(*this, "IN2"),
m_in2(*this, "IN2"),
m_lamps(*this, "lamp%u", 0U)
{ }
@ -316,10 +316,10 @@ uint8_t vpoker_state::blitter_r(offs_t offset)
{
if(m_in2->read() == 1 ) // Save and Halt
m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
if(offset == 6)
return m_in0->read();
if(offset == 7)
return m_in1->read();
@ -331,7 +331,7 @@ void vpoker_state::blitter_w(offs_t offset, uint8_t data)
uint8_t *videoram = m_videoram.get();
m_blit_ram[offset] = data;
if(offset == 1)
{
machine().bookkeeping().coin_counter_w(0, BIT(data, 5)); // coin_in
@ -407,8 +407,8 @@ void vpoker_state::main_map(address_map &map)
static INPUT_PORTS_START( vpoker )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_NAME("Coin In") PORT_IMPULSE(3)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_BET )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_NAME("Coin In") PORT_IMPULSE(3)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_BET )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_GAMBLE_BOOK )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("IN0-10") PORT_CODE(KEYCODE_Q)
@ -425,7 +425,7 @@ static INPUT_PORTS_START( vpoker )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Deal")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Draw")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_CANCEL )
PORT_START("IN2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
@ -498,7 +498,7 @@ void vpoker_state::ptm_5_irq(int state)
void vpoker_state::firq_coin_line(int state)
{
if(m_in0->read() == 0xfe)
if(m_in0->read() == 0xfe)
m_maincpu->set_input_line(M6809_FIRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
}
@ -512,7 +512,7 @@ void vpoker_state::vpoker(machine_config &config)
// basic machine hardware
MC6809(config, m_maincpu, XTAL(4'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &vpoker_state::main_map);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
// video hardware
@ -546,7 +546,7 @@ void vpoker_state::fiveaces(machine_config &config)
// video hardware
screen_device &screen(SCREEN(config.replace(), "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.screen_vblank().set(FUNC(vpoker_state::firq_coin_line));
screen.screen_vblank().set(FUNC(vpoker_state::firq_coin_line));
screen.set_size(512, 256);
screen.set_visarea(48, 448-1, 0, 240-1); // 512x256 total
screen.set_screen_update(FUNC(vpoker_state::screen_update_vpoker));

View File

@ -98,10 +98,10 @@ void pc88va_sgp_device::control_w(u8 data)
u8 pc88va_sgp_device::status_r()
{
// crude debug single-stepping
// if (machine().input().code_pressed(KEYCODE_S))
// return 0;
// if (!machine().input().code_pressed_once(KEYCODE_A))
// return 1;
// if (machine().input().code_pressed(KEYCODE_S))
// return 0;
// if (!machine().input().code_pressed_once(KEYCODE_A))
// return 1;
return 0;
}

View File

@ -1686,7 +1686,7 @@ void pc88va_state::picture_mask_w(offs_t offset, u16 data, u16 mem_mask)
case 3: COMBINE_DATA(&m_picture_mask.bottom); m_picture_mask.bottom &= 0xff; break;
}
// popmessage("x0 %d y0 %d - x1 %d y1 %d", m_picture_mask.left, m_picture_mask.top, m_picture_mask.right, m_picture_mask.bottom);
// popmessage("x0 %d y0 %d - x1 %d y1 %d", m_picture_mask.left, m_picture_mask.top, m_picture_mask.right, m_picture_mask.bottom);
}
/*

View File

@ -236,7 +236,7 @@ private:
u8 m_firq_timer_preset = 0xff; // Preset for 40103 timer. Pulled high.
u8 m_selected_cv_in = 0x07; // MUX A-C inputs. Pulled high.
bool m_inhibit_cv_in = true; // MUX INHibit input. Pulled high.
std::array<bool, 4> m_haltreq = { false, false, false, false }; // Halt request to the voice board (HALTREQ).
std::array<bool, 4> m_haltreq = { false, false, false, false }; // Halt request to the voice board (HALTREQ).
std::array<bool, 6> m_encoder_dir = { false, false, false, false, false, false };
std::array<bool, 6> m_encoder_changed = { false, false, false, false, false, false };
std::array<u64, 3> m_vfd_anode_masks = { 0, 0, 0 };

View File

@ -61,7 +61,7 @@ void mcd212_device::update_matte_arrays()
const int num_mattes = BIT(m_image_coding_method, ICM_NM_BIT) ? 2 : 1;
const bool matte_flag = BIT(m_matte_control[0], MC_MF_BIT); // MF bit must be the same. See 5.10.2 Matte Commands
int matte_idx[2] = { 0, 4 };
int x = 0;
for (; x < width; x++)

View File

@ -38,7 +38,7 @@ Front panel:
Six PCBs connected with two backplanes (Motorola VME 9 conns and a custom one with 13 conns):
OSD PCB (B6) (EURO-BEEB 65, CUBE EuroBEEB Single Board Computer PCB from Control Universal Ltd.)
- Rockwell R6551AP ACIA
- Rockwell R6522AP VIA
@ -220,7 +220,7 @@ PCB VIDEO (B1) (labeled "OPTOMAX VIDEO PCB 9000-0022-2/2")
- 2716 EPROM
- 2 x Toshiba TC5565PL-15
- Motorola MC68230P8
___ ___ ___ ___
___ ___ ___ ___
| | | | | | | |
_______________| |___| |___| |___| |________________________________
| |___| |___| |___| |___| |

View File

@ -4,7 +4,7 @@
Skeleton driver for Microtek Powerpack In-Circuit Emulator model PP-SW+ PIII
Main POD with two PCBs connected with a small backplane (also connects
Main POD with two PCBs connected with a small backplane (also connects
with the pass-through CPU adapter using a flat cable):
- PCB 1:
* Side A
@ -29,7 +29,7 @@ with the pass-through CPU adapter using a flat cable):
Pass-through CPU adapter for Pentium III:
- 1 x Xilinx XCV100.
****************************************************************************/
#include "emu.h"

View File

@ -180,15 +180,15 @@ void pv9234_state::pv9234(machine_config &config)
// TODO: actually NS16550A, uses DA-25 port for a non-standard 8P1 125k baud rate
NS16550(config, "uart", 8_MHz_XTAL);
// uart.out_tx_callback().set("serial", FUNC(rs232_port_device::write_txd));
// uart.out_dtr_callback().set("serial", FUNC(rs232_port_device::write_dtr));
// uart.out_rts_callback().set("serial", FUNC(rs232_port_device::write_rts));
// uart.out_tx_callback().set("serial", FUNC(rs232_port_device::write_txd));
// uart.out_dtr_callback().set("serial", FUNC(rs232_port_device::write_dtr));
// uart.out_rts_callback().set("serial", FUNC(rs232_port_device::write_rts));
//
// rs232_port_device &serial(RS232_PORT(config, "serial", default_rs232_devices, "terminal"));
// serial.rxd_handler().set("uart", FUNC(ns16550_device::rx_w));
// serial.dcd_handler().set("uart", FUNC(ns16550_device::dcd_w));
// serial.dsr_handler().set("uart", FUNC(ns16550_device::dsr_w));
// serial.cts_handler().set("uart", FUNC(ns16550_device::cts_w));
// rs232_port_device &serial(RS232_PORT(config, "serial", default_rs232_devices, "terminal"));
// serial.rxd_handler().set("uart", FUNC(ns16550_device::rx_w));
// serial.dcd_handler().set("uart", FUNC(ns16550_device::dcd_w));
// serial.dsr_handler().set("uart", FUNC(ns16550_device::dsr_w));
// serial.cts_handler().set("uart", FUNC(ns16550_device::cts_w));
// TODO: has a Philips SAA-branded chip on the evasive PCB picture

View File

@ -4,9 +4,9 @@
Apache 3 ATF-011
TODO:
TODO:
- road layer, has twelve rotation registers!
- road layer, has twelve rotation registers!
***************************************************************************/

View File

@ -5,7 +5,7 @@
Cycle Warriors ABA-011
Big Fight ABA-011
TODO:
TODO:
- Combine Big Fight & CycleWarriors video routines - currently each
game uses different sized tilemaps - these are probably software

View File

@ -4,12 +4,12 @@
Round Up 5 ATC-011
TODO:
TODO:
- Finish road layer.
Tunnel sections are borderline unplayable, plus slopes are ugly to watch.
- Always boots with a coin inserted
- Always boots with a coin inserted
$5152 is the coin counter, gets an explicit 1 at boot.
There are other two buffers read from 68k before that, written to $5156 and $515a
If these are 0xffff by then game boots normally ...

View File

@ -2,10 +2,10 @@
// copyright-holders:Bryan McPhail, Angelo Salese
/***************************************************************************
This is a common base for apache3.cpp, roundup5.cpp and cyclwarr.cpp
This is a common base for apache3.cpp, roundup5.cpp and cyclwarr.cpp
Gray Out (from 1987) is likely a similar setup
http://www.tatsu-mi.co.jp/game/trace/index.html
Gray Out (from 1987) is likely a similar setup
http://www.tatsu-mi.co.jp/game/trace/index.html
Incredibly complex hardware! These are all different boards, but share
a similar sprite chip (TZB215 on Apache 3, TZB315 on others). Other

View File

@ -295,7 +295,7 @@ void janshi_vdp_device::draw_sprites(bitmap_ind16 &bitmap, const rectangle &clip
widths come from "widthflags" (0xfc3780)
"unk1" (0xfc3700) and "unk2" (0xfc37c0) are a mystery
*/
*/
int spr_offs = (m_vram1[(i * 4) + 0] | (m_vram1[(i * 4) + 1] << 8)) & 0xffff;
int col = (m_vram1[(i * 4) + 2] & 0xf8) >> 3;
@ -1083,7 +1083,7 @@ INPUT_PORTS_END
void pinkiri8_state::machine_start()
{
save_item(NAME(m_io_matrix));
save_item(NAME(m_prot_read_index));
save_item(NAME(m_prot_char));
save_item(NAME(m_prot_index));