New working systems

-------------------
U-Boat [hap, Sean Riddle, eggs]
This commit is contained in:
hap 2023-09-10 23:42:13 +02:00
parent 5ea520f5da
commit 9eab73cc4c
4 changed files with 191 additions and 7 deletions

View File

@ -193,7 +193,7 @@ on Joerg Woerner's datamath.org: http://www.datamath.org/IC_List.htm
@MP6101B TMS0980 1979, Parker Brothers Stop Thief
*MP6262A TMS1170 1981, Bearcat BC-210XL
@MP6354 TMS1475 1982, Tsukuda The Dracula
*MP6358 TMS1475 1982, Bandai U-Boat
@MP6358 TMS1475 1982, Bandai U-Boat
*MP6361 TMS1475 1983, <unknown> Defender Strikes
@MP7302 TMS1400 1980, Tiger Deluxe Football with Instant Replay
@MP7304 TMS1400 1982, Tiger 7 in 1 Sports Stadium (model 7-555)
@ -352,6 +352,7 @@ on Joerg Woerner's datamath.org: http://www.datamath.org/IC_List.htm
#include "tisr16.lh"
#include "tithermos.lh"
#include "tmvolleyb.lh"
#include "uboat.lh"
#include "vclock3.lh"
#include "wizatron.lh"
#include "xl25.lh"
@ -1331,6 +1332,164 @@ ROM_END
/*******************************************************************************
Bandai U-Boat (model 16300)
* TMS1475 MP6358 (die label: TMS1175 /TMS1475, MP6358, 40H-PASS-0900-R300-0)
* cyan/red VFD NEC FIP10DM24AT no. 2-8 21, 2-sided
* color overlay: red/yellow/blue, and black
* 1-bit sound
The VFD is 2-sided, the destroyer side views it from the back and basically
sees a mirror image. Each side has its own color overlay, and a black panel
that obscures part of the screen.
*******************************************************************************/
class uboat_state : public hh_tms1k_state
{
public:
uboat_state(const machine_config &mconfig, device_type type, const char *tag) :
hh_tms1k_state(mconfig, type, tag)
{ }
void uboat(machine_config &config);
private:
void update_display();
void write_r(u32 data);
void write_o(u16 data);
u8 read_k();
};
// handlers
void uboat_state::update_display()
{
m_display->matrix(m_grid, m_plate);
}
void uboat_state::write_r(u32 data)
{
// R14: speaker out
m_speaker->level_w(BIT(data, 14));
// R15,R19-R21: input mux
m_inp_mux = (data >> 15 & 1) | (data >> 18 & 0xe);
// R0-R9: VFD grid
// R10-R13, R16-R18: VFD plate
m_grid = data & 0x3ff;
m_plate = (m_plate & 0xff) | (data >> 2 & 0xf00) | (data >> 4 & 0x7000);
update_display();
}
void uboat_state::write_o(u16 data)
{
// O0-O7: VFD plate
m_plate = (m_plate & ~0xff) | data;
update_display();
}
u8 uboat_state::read_k()
{
// K: multiplexed inputs
return read_inputs(4);
}
// inputs
/* physical button layout and labels are like this:
player 1 side: player 2 side (opposite):
OFF ON OFF ON ---- SELECT ---- s
[---o] [---o] [ ] [ ] [ ] c
POWER SOUND COMvsD MANUAL COMvsS r
e SUBMARINE SIDE
[ ] e \ | /
FIRE DISTROYER SIDE (sic) [joystick] n [ ] [ ] [ ] [joystick]
[ ] ACTION --- FIRE --- ACTION
*/
static INPUT_PORTS_START( uboat )
PORT_START("IN.0") // R15
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL
PORT_START("IN.1") // R19
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START3 ) PORT_NAME("1 Player Start (Submarine)")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
PORT_START("IN.2") // R20
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 ) PORT_NAME("1 Player Start (Destroyer)")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
PORT_START("IN.3") // R21
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL
INPUT_PORTS_END
// config
void uboat_state::uboat(machine_config &config)
{
// basic machine hardware
TMS1475(config, m_maincpu, 425000); // approximation - RC osc. R=43K, C=47pF
m_maincpu->read_k().set(FUNC(uboat_state::read_k));
m_maincpu->write_r().set(FUNC(uboat_state::write_r));
m_maincpu->write_o().set(FUNC(uboat_state::write_o));
// video hardware
screen_device &screen1(SCREEN(config, "screen1", SCREEN_TYPE_SVG));
screen1.set_refresh_hz(60);
screen1.set_size(372, 1080);
screen1.set_visarea_full();
screen_device &screen2(SCREEN(config, "screen2", SCREEN_TYPE_SVG));
screen2.set_refresh_hz(60);
screen2.set_size(372, 1080);
screen2.set_visarea_full();
PWM_DISPLAY(config, m_display).set_size(10, 15);
config.set_default_layout(layout_uboat);
// sound hardware
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
m_speaker->add_route(ALL_OUTPUTS, "mono", 0.25);
}
// roms
ROM_START( uboat )
ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mp6358", 0x0000, 0x1000, CRC(2e238df8) SHA1(e60f061b1f449946e1a68fb8789a381961b088ad) )
ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1100_common2_micro.pla", 0, 867, CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) )
ROM_REGION( 557, "maincpu:opla", 0 )
ROM_LOAD( "tms1400_uboat_output.pla", 0, 557, CRC(fdb07ac9) SHA1(beb2d8f8de39b795cb95aef2b0f02abc5e4d79dc) )
ROM_REGION( 305576, "screen1", 0) // destroyer side
ROM_LOAD( "uboat1.svg", 0, 305576, CRC(5d51fa01) SHA1(a42ccbc821050f5719232130f115eeb4888ed452) )
ROM_REGION( 310743, "screen2", 0) // submarine side
ROM_LOAD( "uboat2.svg", 0, 310743, CRC(72c44272) SHA1(a43a57b8038b00f9d63c6e5d1a43c4a45a6c6075) )
ROM_END
/*******************************************************************************
Canon Palmtronic F-31, Canon Canola L813, Toshiba BC-8111B, Toshiba BC-8018B,
@ -17157,6 +17316,7 @@ SYST( 1980, mathmagi, 0, 0, mathmagi, mathmagi, mathmagi_state,
SYST( 1979, bcheetah, 0, 0, bcheetah, bcheetah, bcheetah_state, empty_init, "Bandai", "System Control Car: Cheetah", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_MECHANICAL ) // ***
SYST( 1980, racetime, 0, 0, racetime, racetime, racetime_state, empty_init, "Bandai", "Race Time", MACHINE_SUPPORTS_SAVE )
SYST( 1981, tc7atc, 0, 0, tc7atc, tc7atc, tc7atc_state, empty_init, "Bandai", "TC7: Air Traffic Control", MACHINE_SUPPORTS_SAVE )
SYST( 1982, uboat, 0, 0, uboat, uboat, uboat_state, empty_init, "Bandai", "U-Boat", MACHINE_SUPPORTS_SAVE )
SYST( 1977, palmf31, 0, 0, palmf31, palmf31, palmf31_state, empty_init, "Canon", "Palmtronic F-31", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
SYST( 1977, palmmd8, 0, 0, palmmd8, palmmd8, palmmd8_state, empty_init, "Canon", "Palmtronic MD-8 (Multi 8)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )

View File

@ -3189,10 +3189,10 @@ ROM_END
Tomy Alien Chase (manufactured in Japan)
* PCB label: TN-16 2E121B01
* NEC uCOM-43 MCU, label D553C 258
* red/green VFD NEC FIP9AM24T, 2-sided*
* red/green VFD NEC FIP9AM24T, 2-sided
* color overlay: top row: green, bottom: blue, middle: pink, other: yellow
*Player one views the VFD from the front (grid+filament side) while the
Player one views the VFD from the front (grid+filament side), while the
opposite player views it from the back side (through the conductive traces),
basically a mirror-image.
@ -3273,10 +3273,10 @@ static INPUT_PORTS_START( alnchase )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
PORT_START("IN.1") // D0 port A
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) // on non-mirrored view, swap P2 left/right
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) // "
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL // on non-mirrored view, swap P2 left/right
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL // "
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL
PORT_START("IN.2") // port B
PORT_CONFNAME( 0x01, 0x01, DEF_STR( Players ) )

23
src/mame/layout/uboat.lay Normal file
View File

@ -0,0 +1,23 @@
<?xml version="1.0"?>
<!--
license:CC0-1.0
-->
<mamelayout version="2">
<view name="Screen (Destroyer Side)">
<!-- workaround for MAME selecting a 2-screen view by default -->
<screen index="1"><bounds x="0" y="0" width="~scr1width~" height="~scr1height~" /><color alpha="0" /></screen>
<screen index="0"><bounds x="0" y="0" width="~scr0width~" height="~scr0height~" /></screen>
</view>
<view name="Screen (Submarine Side)">
<screen index="1"><bounds x="0" y="0" width="~scr1width~" height="~scr1height~" /></screen>
</view>
<view name="Left-to-Right">
<!-- this view is actually impossible on the real thing -->
<screen index="0"><bounds x="-~scr0width~" y="0" width="~scr0width~" height="~scr0height~" /></screen>
<screen index="1"><bounds x="5" y="0" width="~scr1width~" height="~scr1height~" /></screen>
</view>
</mamelayout>

View File

@ -19123,6 +19123,7 @@ tisr16 // Texas Instruments
tisr16ii // Texas Instruments
tithermos // Texas Instruments
tmvolleyb // Tomy
uboat // Bandai
vclock3 // Tandy Corporation
wizatron // Texas Instruments
wtalker // Technasonic