From 7f32d530136b0e7af4a386f5ba591af83edfbe4e Mon Sep 17 00:00:00 2001 From: Joakim Larsson Edstrom Date: Wed, 18 Oct 2017 01:01:26 +0200 Subject: via6522: Added some interrupt LOGs --- src/devices/machine/6522via.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/devices/machine/6522via.cpp b/src/devices/machine/6522via.cpp index 6ce5e514a7e..ae1b7da0f61 100644 --- a/src/devices/machine/6522via.cpp +++ b/src/devices/machine/6522via.cpp @@ -347,12 +347,17 @@ void via6522_device::clear_int(int data) { if (m_ifr & data) { + LOGINT("cleared\n"); m_ifr &= ~data; output_irq(); LOG("%s:6522VIA chip %s: IFR = %02X\n", machine().describe_context(), tag(), m_ifr); } + else + { + LOGINT("not cleared\n"); + } } @@ -559,6 +564,7 @@ READ8_MEMBER( via6522_device::read ) val = m_latch_b; } + LOGINT("PB INT "); CLR_PB_INT(); break; @@ -573,6 +579,7 @@ READ8_MEMBER( via6522_device::read ) val = m_latch_a; } + LOGINT("PA INT "); CLR_PA_INT(); if (m_out_ca2 && (CA2_PULSE_OUTPUT(m_pcr) || CA2_AUTO_HS(m_pcr))) @@ -607,6 +614,7 @@ READ8_MEMBER( via6522_device::read ) break; case VIA_T1CL: + LOGINT("T1CL INT "); clear_int(INT_T1); val = get_counter1_value() & 0xFF; break; @@ -624,6 +632,7 @@ READ8_MEMBER( via6522_device::read ) break; case VIA_T2CL: + LOGINT("T2CL INT "); clear_int(INT_T2); if (m_t2_active) { @@ -666,6 +675,7 @@ READ8_MEMBER( via6522_device::read ) m_out_cb1 = 1; m_cb1_handler(m_out_cb1); m_shift_counter = 0x0f; + LOGINT("SR INT "); clear_int(INT_SR); LOGSHIFT(" - ACR: %02x ", m_acr); if (SI_O2_CONTROL(m_acr) || SO_O2_CONTROL(m_acr)) @@ -730,6 +740,7 @@ WRITE8_MEMBER( via6522_device::write ) output_pb(); } + LOGINT("PB INT "); CLR_PB_INT(); if (m_out_cb2 && CB2_AUTO_HS(m_pcr)) @@ -747,6 +758,7 @@ WRITE8_MEMBER( via6522_device::write ) output_pa(); } + LOGINT("PA INT "); CLR_PA_INT(); if (m_out_ca2 && (CA2_PULSE_OUTPUT(m_pcr) || CA2_AUTO_HS(m_pcr))) @@ -795,6 +807,7 @@ WRITE8_MEMBER( via6522_device::write ) case VIA_T1LH: m_t1lh = data; + LOGINT("T1LH INT "); clear_int(INT_T1); break; @@ -802,6 +815,7 @@ WRITE8_MEMBER( via6522_device::write ) m_t1ch = m_t1lh = data; m_t1cl = m_t1ll; + LOGINT("T1CH INT "); clear_int(INT_T1); m_t1_pb7 = 0; @@ -823,6 +837,7 @@ WRITE8_MEMBER( via6522_device::write ) m_t2ch = m_t2lh = data; m_t2cl = m_t2ll; + LOGINT("T2 INT "); clear_int(INT_T2); if (!T2_COUNT_PB6(m_acr)) @@ -851,6 +866,7 @@ WRITE8_MEMBER( via6522_device::write ) } m_shift_counter = 0x0f; + LOGINT("SR INT "); clear_int(INT_SR); LOGSHIFT(" - ACR is: %02x ", m_acr); if (SO_O2_CONTROL(m_acr) || SI_O2_CONTROL(m_acr)) @@ -940,6 +956,7 @@ WRITE8_MEMBER( via6522_device::write ) { data = 0x7f; } + LOGINT("IFR INT "); clear_int(data); break; } -- cgit v1.2.3 From 6a8acc6d37a4c3810ef3b04ad6e19ce0aa7b3459 Mon Sep 17 00:00:00 2001 From: Joakim Larsson Edstrom Date: Wed, 18 Oct 2017 01:03:35 +0200 Subject: prodigy: Added clickable layout, the machine is now playable --- src/mame/drivers/prodigy.cpp | 206 ++++++++++++++++++++++++++++---- src/mame/layout/prodigy.lay | 275 ++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 443 insertions(+), 38 deletions(-) diff --git a/src/mame/drivers/prodigy.cpp b/src/mame/drivers/prodigy.cpp index 292c4cef699..2681e0cf71d 100644 --- a/src/mame/drivers/prodigy.cpp +++ b/src/mame/drivers/prodigy.cpp @@ -2,9 +2,16 @@ // copyright-holders:Joakim Larsson Edstrom /****************************************************************************** - ACI Prodigy chess computer driver + ACI Prodigy chess computer driver. - TODO: Everything + http://www.spacious-mind.com/html/destiny_prodigy.html + Morphy software ELO rating: 1559 + + TODO: + - Sound + - Row/column LEDs + - Chess board sensors + - Support for SVG/CSS based browser UI +-------------------------------------------------------------------------------------+ |LEDS--------------------------------------------+ +-----------------+ | @@ -28,7 +35,7 @@ | | || 74145N | | RAM | |LS| | | | A B C D E F G H |+--------+ | M58725P | |00| | | +--------------------------------------------+ +-------------+ +--+ | - |LEDS-> O O O O O O O O OOOOOOOOOOO KPDCN | + |LEDS-> O O O O O O O O OOOOOOOOOOOO KPDCN | +-------------------------------------------------------------------------------------+ Tracing the image shows that VIA Port A is used on the ROWCN and Port B on COLCN @@ -49,6 +56,15 @@ ||||||||||||||||||| PB2--->|145|=/4/=/R/=>b(4x )c=/4/==============> +---+ (PN2907)e=+ anodes |+5v + + The keypad is connected to the 12 pin KPDCN connector left to right KP1: + + Pin #: KP1 KP2 KP3 KP4 KP5 KP6 KP7 KP8 KP9 KP10 KP11 K12 + VIA : PB4 PB5 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 + 74145: Q8 Q9 - used to decode/ground one half of the KPAD at a time + + Q7 is suspected to be ground for the chessboard buttons + *******************************************************************************************/ #include "emu.h" @@ -57,6 +73,7 @@ #include "machine/netlist.h" #include "machine/nl_prodigy.h" #include "machine/6522via.h" + // Generated artwork includes #include "prodigy.lh" @@ -65,9 +82,11 @@ #define LOG_BCD (1U << 3) #define LOG_NETLIST (1U << 4) #define LOG_CLK (1U << 5) +#define LOG_KBD (1U << 6) +#define LOG_AW (1U << 7) -//#define VERBOSE (LOG_BCD|LOG_NETLIST|LOG_SETUP) -//#define LOG_OUTPUT_FUNC printf +//#define VERBOSE (LOG_KBD|LOG_AW) // (LOG_BCD|LOG_NETLIST|LOG_SETUP) +//#define LOG_OUTPUT_STREAM std::cout #include "logmacro.h" @@ -76,6 +95,8 @@ #define LOGBCD(...) LOGMASKED(LOG_BCD, __VA_ARGS__) #define LOGNL(...) LOGMASKED(LOG_NETLIST, __VA_ARGS__) #define LOGCLK(...) LOGMASKED(LOG_CLK, __VA_ARGS__) +#define LOGKBD(...) LOGMASKED(LOG_KBD, __VA_ARGS__) +#define LOGAW(...) LOGMASKED(LOG_AW, __VA_ARGS__) #ifdef _MSC_VER #define FUNCNAME __func__ @@ -84,7 +105,7 @@ #endif #define NETLIST_TAG "bcd" -#define TTL74164DEV 0 +#define HTTPUI 0 class prodigy_state : public driver_device { @@ -99,6 +120,16 @@ public: , m_cb1(*this, "bcd:cb1") , m_cb2(*this, "bcd:cb2") , m_digit(0.0) + , m_io_line0(*this, "LINE0") + , m_io_line1(*this, "LINE1") + , m_io_line2(*this, "LINE2") + , m_io_line3(*this, "LINE3") + , m_io_line4(*this, "LINE4") + , m_line0(0) + , m_line1(0) + , m_line2(0) + , m_line3(0) + , m_line4(0) { } NETDEV_LOGIC_CALLBACK_MEMBER(bcd_bit0_cb); @@ -110,6 +141,9 @@ public: NETDEV_LOGIC_CALLBACK_MEMBER(bcd_bit6_cb); NETDEV_LOGIC_CALLBACK_MEMBER(bcd_bit7_cb); + DECLARE_READ8_MEMBER( via_pa_r ); + DECLARE_READ8_MEMBER( via_pb_r ); + DECLARE_WRITE8_MEMBER( via_pa_w ); DECLARE_WRITE8_MEMBER( via_pb_w ); DECLARE_WRITE_LINE_MEMBER(via_cb1_w); DECLARE_WRITE_LINE_MEMBER(via_cb2_w); @@ -120,17 +154,27 @@ private: required_device m_74145; uint8_t m_segments; required_device m_via; -#if TTL74164DEV - required_device m_shift; -#else required_device m_bcd; required_device m_cb1; required_device m_cb2; -#endif uint8_t m_digit; void update_bcd(); - virtual void device_reset() override; +#if HTTPUI + virtual void device_start() override; + http_manager *m_server; + void on_update(http_manager::http_request_ptr request, http_manager::http_response_ptr response); +#endif + required_ioport m_io_line0; + required_ioport m_io_line1; + required_ioport m_io_line2; + required_ioport m_io_line3; + required_ioport m_io_line4; + uint16_t m_line0; + uint16_t m_line1; + uint16_t m_line2; + uint16_t m_line3; + uint16_t m_line4; }; NETDEV_LOGIC_CALLBACK_MEMBER(prodigy_state::bcd_bit0_cb) { if (data != 0) m_digit |= 0x01; else m_digit &= ~(0x01); LOGBCD("%s: %d m_digit: %02x\n", FUNCNAME, data, m_digit); } @@ -142,14 +186,34 @@ NETDEV_LOGIC_CALLBACK_MEMBER(prodigy_state::bcd_bit5_cb) { if (data != 0) m_digi NETDEV_LOGIC_CALLBACK_MEMBER(prodigy_state::bcd_bit6_cb) { if (data != 0) m_digit |= 0x40; else m_digit &= ~(0x40); LOGBCD("%s: %d m_digit: %02x\n", FUNCNAME, data, m_digit); } NETDEV_LOGIC_CALLBACK_MEMBER(prodigy_state::bcd_bit7_cb) { if (data != 0) m_digit |= 0x80; else m_digit &= ~(0x80); LOGBCD("%s: %d m_digit: %02x\n", FUNCNAME, data, m_digit); } -void prodigy_state::device_reset() +#if HTTPUI +// WIP +void prodigy_state::on_update(http_manager::http_request_ptr request, http_manager::http_response_ptr response) { -#if TTL74164DEV - m_shift->b_w(1); - m_shift->clear_w(1); -#endif + printf("%s\n", FUNCNAME); + #if 1 + printf("Full request: %s\n", request->get_resource().c_str()); + printf("Path: %s\n", request->get_path().c_str()); + printf("Query: %s\n", request->get_query().c_str()); + // printf("Fragment: %s\n", request->get_fragment().c_str()); + for (auto const& i : request->get_headers("*")) { + std::cout << i; + } + #endif + response->set_status(200); + response->set_content_type("text/plain"); + response->set_body("Hello World\n"); + // m_server->serve_document(request, response, filename); } +void prodigy_state::device_start() +{ + using namespace std::placeholders; + m_server = machine().manager().http(); + m_server->add_http_handler("/prodigy*", std::bind(&prodigy_state::on_update, this, _1, _2)); +} +#endif + WRITE_LINE_MEMBER(prodigy_state::via_cb1_w) { LOGCLK("%s: %d\n", FUNCNAME, state); @@ -175,20 +239,58 @@ WRITE_LINE_MEMBER(prodigy_state::irq_handler) PB2 and PB3 is also connected to the 74145, usage to be traced.... */ -WRITE8_MEMBER( prodigy_state::via_pb_w ) // Needs to trace which port decides what digit + +READ8_MEMBER( prodigy_state::via_pa_r ) { - LOGBCD("%s: %02x ANODE %02x\n", FUNCNAME, data, data & 0x03); - m_74145->write( data & 0x0f ); // Write PB0-PB3 to the 74145 + LOGKBD("%s: Port A <- %02x\n", FUNCNAME, 0); + uint16_t ttl74145_data = m_74145->read(); + + LOGKBD(" - 74145: %03x\n", ttl74145_data); + if (ttl74145_data & 0x100) return (m_line0 | m_line1); + if (ttl74145_data & 0x200) return (m_line4 | m_line3); + return 0xff; +} + +READ8_MEMBER( prodigy_state::via_pb_r ) +{ + LOGKBD("%s: Port B <- %02x\n", FUNCNAME, 0); + uint16_t ttl74145_data = m_74145->read(); + + if (ttl74145_data & 0x100) return (((m_line2 >> 8) & 3) << 4); + if (ttl74145_data & 0x200) return (((m_line2 >> 10) & 3) << 4); + return 0xff; +} + +WRITE8_MEMBER( prodigy_state::via_pa_w ) +{ + LOGKBD("%s: Port A -> %02x\n", FUNCNAME, data); +} + +WRITE8_MEMBER( prodigy_state::via_pb_w ) +{ + LOGBCD("%s: %02x ANODE %c\n", FUNCNAME, data, (data & 0x0f) <= 3 ? ('0' + (data & 0x03)) : 'x'); + LOGKBD("%s: %02x KBD Q8:%c Q9:%c\n", FUNCNAME, data, (data & 0x0f) == 8 ? '0' : '1', (data & 0x0f) == 9 ? '0' : '1'); + // Write PB0-PB3 to the 74145 + // Q0-Q3 => BCD0-BCD3 (PB0-PB1, PB2=0 PB3=0) + // Q8-Q9 => KPDCN (PB0:0=Q8 1=Q9, PB1=0 PB2=0 PB3=1) + m_74145->write( data & 0x0f ); + + // Read the artwork + m_line0 = m_io_line0->read(); LOGAW("-LINE0: %02x\n", m_line0); + m_line1 = m_io_line1->read(); LOGAW("-LINE1: %02x\n", m_line1); + m_line2 = m_io_line2->read(); LOGAW("-LINE2: %02x\n", m_line2); + m_line3 = m_io_line3->read(); LOGAW("-LINE3: %02x\n", m_line3); + m_line4 = m_io_line4->read(); LOGAW("-LINE4: %02x\n", m_line4); } void prodigy_state::update_bcd() { LOGBCD("%s\n", FUNCNAME); - uint8_t ttl74145_data; + uint16_t ttl74145_data; uint8_t digit_nbr = 4; ttl74145_data = m_74145->read(); - LOGBCD(" - 74145: %02x\n", ttl74145_data); + LOGBCD(" - 74145: %03x\n", ttl74145_data); if ((ttl74145_data & 0x0f) != 0x00) { @@ -215,7 +317,64 @@ static ADDRESS_MAP_START( maincpu_map, AS_PROGRAM, 8, prodigy_state ) AM_RANGE(0x6000, 0x7fff) AM_ROM AM_REGION("roms", 0x0000) AM_MIRROR(0x8000) ADDRESS_MAP_END +/* + * The keypad was modelled after the physical appearance but altered after finding out how it was working so + * LINE0 to LINE4 has no correlation to the actual keypad anymore, which is connected like this: + * + * con KP1/KP11 + *----------------------- + * KP1 GND/HIZ + * KP2 GO/BLACK + * KP3 A1/B2 + * KP4 D4/E5 + * KP5 G7/E8 + * KP6 RESTORE/HALT&HINT + * KP7 CE/AUDIO + * KP8 LEVEL/TIME&NUMBER + * KP9 CHANGE BOARD/F6 + * KP10 VERIFY/C3 + * KP11 HIZ/GND + * KP12 ENTER/WHITE + *----------------------- + * KP1 and KP11 alternates as GND enabling 10 pads at a time which are read on VIA port A and B. + * TODO: Refactor as two 10 bit LINEs rather then matrix in order to match circuit + * +*/ static INPUT_PORTS_START( prodigy ) + PORT_START("LINE0") /* KEY ROW 0 */ + PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D_4") PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('4') + PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G_7") PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('7') + PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("RESTORE") PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') + PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CE") PORT_CODE(KEYCODE_T) PORT_CHAR('T') + PORT_BIT(0xc00, 0x00, IPT_UNUSED ) + + PORT_START("LINE1") /* KEY ROW 1 */ + PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("LEVEL") PORT_CODE(KEYCODE_L) PORT_CHAR('L') + PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CHANGE_BOARD") PORT_CODE(KEYCODE_X) PORT_CHAR('X') + PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("VERIFY") PORT_CODE(KEYCODE_V) PORT_CHAR('V') + PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ENTER") PORT_CODE(KEYCODE_S) PORT_CHAR('S') + PORT_BIT(0xc00, 0x00, IPT_UNUSED ) + + PORT_START("LINE2") /* KEY ROW 2 */ + PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("GO") PORT_CODE(KEYCODE_O) PORT_CHAR('O') + PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A_1") PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('1') + PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("BLACK") PORT_CODE(KEYCODE_P) PORT_CHAR('P') + PORT_BIT(0x800, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B_2") PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('2') + PORT_BIT(0x000, 0x00, IPT_UNUSED ) + + PORT_START("LINE3") /* KEY ROW 3 */ + PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E_5") PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('5') + PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("H_8") PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('8') + PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("HALT_HINT") PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') + PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("AUDIO") PORT_CODE(KEYCODE_R) PORT_CHAR('R') + PORT_BIT(0xc00, 0x00, IPT_UNUSED ) + + PORT_START("LINE4") /* KEY ROW 4 */ + PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TIME_NUMBER") PORT_CODE(KEYCODE_N) PORT_CHAR('N') + PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F_6") PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('6') + PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C_3") PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('3') + PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("WHITE") PORT_CODE(KEYCODE_W) PORT_CHAR('W') + PORT_BIT(0xc00, 0x00, IPT_UNUSED ) INPUT_PORTS_END static MACHINE_CONFIG_START( prodigy ) @@ -228,7 +387,10 @@ static MACHINE_CONFIG_START( prodigy ) MCFG_DEVICE_ADD("via", VIA6522, XTAL_2MHz) MCFG_VIA6522_IRQ_HANDLER(WRITELINE(prodigy_state, irq_handler)); + MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(prodigy_state, via_pa_w)) MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(prodigy_state, via_pb_w)) + MCFG_VIA6522_READPA_HANDLER(READ8(prodigy_state, via_pa_r)) + MCFG_VIA6522_READPB_HANDLER(READ8(prodigy_state, via_pb_r)) MCFG_VIA6522_CB1_HANDLER(WRITELINE(prodigy_state, via_cb1_w)) MCFG_VIA6522_CB2_HANDLER(WRITELINE(prodigy_state, via_cb2_w)) @@ -294,4 +456,4 @@ ROM_START(prodigy) ROM_END // YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS -CONS( 1981, prodigy, 0, 0, prodigy, prodigy, prodigy_state, 0, "Applied Concepts Inc", "ACI Destiny Prodigy", MACHINE_IS_SKELETON ) +CONS( 1981, prodigy, 0, 0, prodigy, prodigy, prodigy_state, 0, "Applied Concepts Inc", "ACI Destiny Prodigy", MACHINE_NO_SOUND ) diff --git a/src/mame/layout/prodigy.lay b/src/mame/layout/prodigy.lay index fee2ebe74ce..1c8c63cf598 100644 --- a/src/mame/layout/prodigy.lay +++ b/src/mame/layout/prodigy.lay @@ -1,25 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From 80cdf16f065c7684307300e93067c21e82a392a5 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Sun, 22 Oct 2017 22:01:20 +1100 Subject: don't forget the prefix header (nw) --- src/devices/cpu/sh/sh.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/devices/cpu/sh/sh.cpp b/src/devices/cpu/sh/sh.cpp index ca867883c47..cfdd919227b 100644 --- a/src/devices/cpu/sh/sh.cpp +++ b/src/devices/cpu/sh/sh.cpp @@ -1,6 +1,7 @@ // license:BSD-3-Clause // copyright-holders:David Haywood +#include "emu.h" #include "sh.h" void sh_common_execution::device_start() -- cgit v1.2.3 From fa45a71bce71e953feeb0a356f5537422301009a Mon Sep 17 00:00:00 2001 From: Patrick Mackinlay Date: Mon, 23 Oct 2017 18:17:19 +0700 Subject: interpro: expansion bus/slots and keyboard * added basic support for the system bus variously referred to as SR, SR bus, SRX and CBUS * added an initial GT graphics card implementation, only supports the video ram and ramdac for now, but sufficient to boot the diagnostic monitor in graphics mode * added a high-level emulation of the InterPro keyboard --- scripts/src/bus.lua | 30 ++ scripts/target/mame/mess.lua | 2 + src/devices/bus/interpro/keyboard/hle.cpp | 461 +++++++++++++++++++++++++ src/devices/bus/interpro/keyboard/hle.h | 113 ++++++ src/devices/bus/interpro/keyboard/keyboard.cpp | 67 ++++ src/devices/bus/interpro/keyboard/keyboard.h | 71 ++++ src/devices/bus/interpro/sr/gt.cpp | 199 +++++++++++ src/devices/bus/interpro/sr/gt.h | 110 ++++++ src/devices/bus/interpro/sr/sr.cpp | 379 ++++++++++++++++++++ src/devices/bus/interpro/sr/sr.h | 139 ++++++++ src/devices/bus/interpro/sr/sr_cards.cpp | 24 ++ src/devices/bus/interpro/sr/sr_cards.h | 12 + 12 files changed, 1607 insertions(+) create mode 100644 src/devices/bus/interpro/keyboard/hle.cpp create mode 100644 src/devices/bus/interpro/keyboard/hle.h create mode 100644 src/devices/bus/interpro/keyboard/keyboard.cpp create mode 100644 src/devices/bus/interpro/keyboard/keyboard.h create mode 100644 src/devices/bus/interpro/sr/gt.cpp create mode 100644 src/devices/bus/interpro/sr/gt.h create mode 100644 src/devices/bus/interpro/sr/sr.cpp create mode 100644 src/devices/bus/interpro/sr/sr.h create mode 100644 src/devices/bus/interpro/sr/sr_cards.cpp create mode 100644 src/devices/bus/interpro/sr/sr_cards.h diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 29605ec7213..ad79fd7d66c 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -3238,3 +3238,33 @@ if (BUSES["PSI_KEYBOARD"]~=null) then MAME_DIR .. "src/devices/bus/psi_kbd/hle.h", } end + +--------------------------------------------------- +-- +--@src/devices/bus/interpro/sr/sr.h,BUSES["INTERPRO_SR"] = true +--------------------------------------------------- + +if (BUSES["INTERPRO_SR"]~=null) then + files { + MAME_DIR .. "src/devices/bus/interpro/sr/sr.cpp", + MAME_DIR .. "src/devices/bus/interpro/sr/sr.h", + MAME_DIR .. "src/devices/bus/interpro/sr/sr_cards.cpp", + MAME_DIR .. "src/devices/bus/interpro/sr/sr_cards.h", + MAME_DIR .. "src/devices/bus/interpro/sr/gt.cpp", + MAME_DIR .. "src/devices/bus/interpro/sr/gt.h", + } +end + +--------------------------------------------------- +-- +--@src/devices/bus/interpro/keyboard/keyboard.h,BUSES["INTERPRO_KEYBOARD"] = true +--------------------------------------------------- + +if (BUSES["INTERPRO_KEYBOARD"]~=null) then + files { + MAME_DIR .. "src/devices/bus/interpro/keyboard/keyboard.cpp", + MAME_DIR .. "src/devices/bus/interpro/keyboard/keyboard.h", + MAME_DIR .. "src/devices/bus/interpro/keyboard/hle.cpp", + MAME_DIR .. "src/devices/bus/interpro/keyboard/hle.h" + } +end diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 916c4be6903..12b5978dcbf 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -675,6 +675,8 @@ BUSES["HPDIO"] = true BUSES["IEEE488"] = true BUSES["IMI7000"] = true BUSES["INTELLEC4"] = true +BUSES["INTERPRO_SR"] = true +BUSES["INTERPRO_KEYBOARD"] = true BUSES["INTV"] = true BUSES["INTV_CTRL"] = true BUSES["IQ151"] = true diff --git a/src/devices/bus/interpro/keyboard/hle.cpp b/src/devices/bus/interpro/keyboard/hle.cpp new file mode 100644 index 00000000000..a455f9227e3 --- /dev/null +++ b/src/devices/bus/interpro/keyboard/hle.cpp @@ -0,0 +1,461 @@ +// license:BSD-3-Clause +// copyright-holders:Patrick Mackinlay + +/* + * A high level emulation implementation of the Intergraph InterPro keyboard, + * largely copied from the sunkbd and psi hle implementations. + * + * These keyboards have two primary banks of keys. The lower bank consists of + * a total of 67 regular keyboard keyswitches plus a numeric keypad with a + * further 18 keys. The upper bank consists of 57 membrane-style programmable + * function keys in groups of 9, 36 and 12 from left to right. + * + * The following describes the key labels and positions according to the + * standard US English keyboard layout. It's unknown what other variations + * existed at this point. + * + * Upper bank keys indicated here with asterisks are printed in white, as are + * all the A*, B* and C* keys; all the others are printed in brown. + * + * Setup* Home* 2nd A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 2nd + * Help Clear F* F* + * Screen + * + * Find Insert Print B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 B15 B16 + * Here Screen* + * Remove + * + * Select Prev Next C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 + * Screen Screen + * + * + * In between the banks on the right hand side, there is a row of LEDs, the + * first three are pictures, rather than the descriptions given here). + * + * Disk Lock ----- L1 L2 L3 L4 + * + * Lower bank keys have up to 3 labels, in shifted and unshifted positions, and + * in red on the front face of the key-cap. + * + * Esc ~ ! @ # $ % ^ & * ( ) _ + Back Delete PF1 PF2 PF3 PF4 + * ` 1 2 3 4 5 6 7 8 9 0 - = Space ± ÷ × + + * Esc Num Lk ScrlLk Sys + * + * Alt Tab Q W E R T Y U I O P { } 7 8 9 _ + * Mode [ ] + * Home ↑ Pg Up Prt Sc + * + * Ctrl Caps A S D F G H J K L : " | Return 4 5 6 , + * Lock + * ← → − + * + * Shift > Z X C V B N M , . ? Shift ▲ 1 2 3 = + * < ■ + * End ↓ Pg Dn + * + * Hold Super- Line Repeat ◄ ■ ► 0 ◦ + * Screen impose Feed ▼ . Enter + * Ins Del + + * + * Alt Mode and Caps Lock keys have locking switches, capturing the key in the + * depressed position, as well as physical leds visible on the keycaps + * themselves. The keyboard also has two physical buttons on the back face of + * the keyboard, circular button labelled Boot, and a square one labelled Reset. + * + * The keyboard uses a 1200bps serial protocol to communicate with the host, + * with 1 start bit, 8 data bits, 1 stop bit, and even parity. The protocol + * as far as is known consists of the following sequences: + * + * From Host Purpose Expected Response + * --------- ------- ----------------- + * D Diagnostic 0xff , where status bits are set to + * indicate diagnostic failure source: 0x8=EPROM + * checksum, 0x10=RAM error, 0x20=ROM checksum + * + * B ( Bell On None + * + * B ) Bell Off None + * + * B Unknown None + * + * The keyboard has a keyboard click function, and the LED indicators described + * earlier, meaning that there are additional commands to enable and disable + * these functions. + * + * The keyboard transmits ASCII codes corresponding to the keycap labels for + * keys which map to the ASCII character set. Modifiers are applied by the + * keyboard itself, and do not generate make/break codes of their own. + * + * The following non-ASCII sequences are recognised in the system software, + * and likely correspond to specific keyboard keys or buttons: + * + * Sequence Function + * -------- -------- + * ^L Reboot, possibly maps to Reboot button + * ^M Unknown + * ^N Unknown, but operates as a toggle + * ^U Unknown + * + * TODO + * - unmapped keys + * - auto-repeat + * - key click and LED commands + * - alternative layouts + * + */ +#include "emu.h" +#include "hle.h" + +#include "machine/keyboard.ipp" +#include "speaker.h" + +#define VERBOSE 0 +#include "logmacro.h" + +DEFINE_DEVICE_TYPE_NS(INTERPRO_HLE_EN_US_KEYBOARD, bus::interpro::keyboard, hle_en_us_device, "kbd_hle_en_us", "InterPro Keyboard (HLE, US English)") + +namespace bus { namespace interpro { namespace keyboard { + +namespace { + + u8 const TRANSLATION_TABLE[4][5][16] = + { + // unshifted + { + { 0x1b, 0x60, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x2d, 0x3d, 0x08, 0x7f }, // 0 + { 0x00, 0x09, 0x71, 0x77, 0x65, 0x72, 0x74, 0x79, 0x75, 0x69, 0x6f, 0x70, 0x5b, 0x5d, 0x00, 0x00 }, // 1 + { 0x00, 0x00, 0x61, 0x73, 0x64, 0x66, 0x67, 0x68, 0x6a, 0x6b, 0x6c, 0x3b, 0x27, 0x5c, 0x0d, 0x00 }, // 2 + { 0x00, 0x3c, 0x7a, 0x78, 0x63, 0x76, 0x62, 0x6e, 0x6d, 0x2c, 0x2e, 0x2f, 0x00, 0x00, 0x00, 0x00 }, // 3 + { 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 4 + }, + // shifted + { + { 0x1b, 0x7e, 0x21, 0x40, 0x23, 0x24, 0x25, 0x5e, 0x26, 0x2a, 0x28, 0x29, 0x5f, 0x2b, 0x08, 0x7f }, // 0 + { 0x00, 0x09, 0x51, 0x57, 0x45, 0x52, 0x54, 0x59, 0x55, 0x49, 0x4f, 0x50, 0x7b, 0x7d, 0x00, 0x00 }, // 1 + { 0x00, 0x00, 0x41, 0x53, 0x44, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4c, 0x3a, 0x22, 0x7c, 0x0d, 0x00 }, // 2 + { 0x00, 0x3e, 0x5a, 0x58, 0x43, 0x56, 0x42, 0x4e, 0x4d, 0x2c, 0x2e, 0x3f, 0x00, 0x00, 0x00, 0x00 }, // 3 + { 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 4 + }, + // unshifted-control + { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0 + { 0x00, 0x00, 0x11, 0x17, 0x05, 0x12, 0x14, 0x19, 0x15, 0x09, 0x0f, 0x10, 0x1b, 0x1d, 0x00, 0x00 }, // 1 + { 0x00, 0x00, 0x01, 0x13, 0x04, 0x06, 0x07, 0x08, 0x0a, 0x0b, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00 }, // 2 + { 0x00, 0x00, 0x1a, 0x18, 0x03, 0x16, 0x02, 0x0e, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 3 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 4 + }, + // shifted-control + { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0 + { 0x00, 0x00, 0x11, 0x17, 0x05, 0x12, 0x14, 0x19, 0x15, 0x09, 0x0f, 0x10, 0x1b, 0x1d, 0x00, 0x00 }, // 1 + { 0x00, 0x00, 0x01, 0x13, 0x04, 0x06, 0x07, 0x08, 0x0a, 0x0b, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00 }, // 2 + { 0x00, 0x00, 0x1a, 0x18, 0x03, 0x16, 0x02, 0x0e, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 3 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // 4 + } + }; + +INPUT_PORTS_START(interpro_en_us) + + PORT_START("modifiers") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_NAME("Control") PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("Shift") PORT_CHAR(UCHAR_SHIFT_1) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_NAME("Caps Lock") PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) + + PORT_START("row_0") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_NAME("Esc") PORT_CHAR(UCHAR_MAMEKEY(ESC)) + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~') + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') + PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') + PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') + PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^') + PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') + PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*') + PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') + PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_') + PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+') + PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("Backspace") PORT_CHAR(8) + PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Delete") PORT_CHAR(UCHAR_MAMEKEY(DEL)) + + PORT_START("row_1") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_UNUSED) // "Alt Mode" + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_NAME("Tab") PORT_CHAR(9) + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') + PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') + PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') + PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') + PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') + PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') + PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') + PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') + PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}') + + PORT_START("row_2") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_UNUSED) // CTRL + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_UNUSED) // LOCK + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') + PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') + PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') + PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') + PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') + PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') + PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') + PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"') + PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|') + PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Return") PORT_CHAR(13) + + PORT_START("row_3") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_UNUSED) // LSHIFT + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR('<') PORT_CHAR('>') + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') + PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') + PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') + PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') + PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') + PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') + PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') + PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') + PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_UNUSED) // RSHIFT + PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_NAME("Up") PORT_CHAR(UCHAR_MAMEKEY(UP)) + + PORT_START("row_4") + PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_UNUSED) // "Hold Screen" + PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_UNUSED) // "Superimpose" + PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_UNUSED) // "Line Feed" + PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_NAME("Space") PORT_CHAR(UCHAR_MAMEKEY(SPACE)) + PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_UNUSED) // "Repeat" + PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Left") PORT_CHAR(UCHAR_MAMEKEY(LEFT)) + PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Down") PORT_CHAR(UCHAR_MAMEKEY(DOWN)) + PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Right") PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) + +INPUT_PORTS_END + +INPUT_PORTS_START(hle_en_us_device) + PORT_INCLUDE(interpro_en_us) +INPUT_PORTS_END + +} // anonymous namespace + +hle_device_base::hle_device_base(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock) + : device_t(mconfig, type, tag, owner, clock) + , device_buffered_serial_interface(mconfig, *this) + , device_interpro_keyboard_port_interface(mconfig, *this) + , device_matrix_keyboard_interface(mconfig, *this, "row_0", "row_1", "row_2", "row_3", "row_4") + , m_click_timer(nullptr) + , m_beeper(*this, "beeper") + , m_make_count(0U) + , m_rx_state(RX_IDLE) + , m_keyclick(0U) + , m_beeper_state(0U) +{ +} + +hle_device_base::~hle_device_base() +{ +} + +WRITE_LINE_MEMBER(hle_device_base::input_txd) +{ + device_buffered_serial_interface::rx_w(state); +} + +MACHINE_CONFIG_MEMBER(hle_device_base::device_add_mconfig) + MCFG_SPEAKER_STANDARD_MONO("bell") + MCFG_SOUND_ADD("beeper", BEEP, ATTOSECONDS_TO_HZ(480 * ATTOSECONDS_PER_MICROSECOND)) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "bell", 1.0) +MACHINE_CONFIG_END + +void hle_device_base::device_start() +{ + m_click_timer = timer_alloc(CLICK_TIMER_ID); + + save_item(NAME(m_make_count)); + save_item(NAME(m_rx_state)); + save_item(NAME(m_keyclick)); + save_item(NAME(m_beeper_state)); +} + +void hle_device_base::device_reset() +{ + // initialise state + clear_fifo(); + m_make_count = 0U; + m_rx_state = RX_IDLE; + m_keyclick = 0U; + m_beeper_state = 0x00U; + + // configure device_buffered_serial_interface + set_data_frame(START_BIT_COUNT, DATA_BIT_COUNT, PARITY, STOP_BITS); + set_rate(BAUD); + receive_register_reset(); + transmit_register_reset(); + + // start with keyboard LEDs off + machine().output().set_led_value(LED_DISK, 0); + machine().output().set_led_value(LED_LOCK, 0); + machine().output().set_led_value(LED_UNKNOWN, 0); + machine().output().set_led_value(LED_L1, 0); + machine().output().set_led_value(LED_L2, 0); + machine().output().set_led_value(LED_L3, 0); + machine().output().set_led_value(LED_L4, 0); + + // no beep + m_click_timer->reset(); + + // kick the base + reset_key_state(); + start_processing(attotime::from_hz(1'200)); +} + +void hle_device_base::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + switch (id) + { + case CLICK_TIMER_ID: + m_beeper_state &= ~u8(BEEPER_CLICK); + m_beeper->set_state(m_beeper_state ? 1 : 0); + break; + + default: + break; + } +} + +void hle_device_base::tra_callback() +{ + output_rxd(transmit_register_get_data_bit()); +} + +void hle_device_base::tra_complete() +{ + if (fifo_full()) + start_processing(attotime::from_hz(1'200)); + + device_buffered_serial_interface::tra_complete(); +} + +void hle_device_base::key_make(u8 row, u8 column) +{ + // we should have stopped processing if we filled the FIFO + assert(!fifo_full()); + + // send the make code, click if desired + transmit_byte(translate(row, column)); + if (m_keyclick) + { + m_beeper_state |= u8(BEEPER_CLICK); + m_beeper->set_state(m_beeper_state ? 1 : 0); + m_click_timer->reset(attotime::from_msec(5)); + } + + // count keys + ++m_make_count; + assert(m_make_count); +} + +void hle_device_base::key_break(u8 row, u8 column) +{ + // we should have stopped processing if we filled the FIFO + assert(!fifo_full()); + assert(m_make_count); + + --m_make_count; + + // check our counting + assert(are_all_keys_up() == !bool(m_make_count)); +} + +void hle_device_base::transmit_byte(u8 byte) +{ + LOG("transmit_byte 0x%02x\n", byte); + device_buffered_serial_interface::transmit_byte(byte); + if (fifo_full()) + stop_processing(); +} + +void hle_device_base::received_byte(u8 byte) +{ + LOG("received_byte 0x%02x\n", byte); + + switch (m_rx_state) + { + case RX_ESC: + switch (byte) + { + case 'B': // bell + m_rx_state = RX_BELL; + break; + + case 'D': // diagnostic + transmit_byte(0xff); + transmit_byte(0x00); + + m_rx_state = RX_IDLE; + break; + } + break; + + case RX_BELL: + switch (byte) + { + case '(': + LOG("bell on\n"); + m_beeper_state |= u8(BEEPER_BELL); + m_beeper->set_state(m_beeper_state ? 1 : 0); + break; + + case ')': + LOG("bell off\n"); + m_beeper_state &= ~u8(BEEPER_BELL); + m_beeper->set_state(m_beeper_state ? 1 : 0); + break; + + default: + // FIXME: boot code sends 0x8, unknown meaning + break; + } + m_rx_state = RX_IDLE; + break; + + case RX_IDLE: + if (byte == 0x1b) + m_rx_state = RX_ESC; + break; + } +} + +hle_en_us_device::hle_en_us_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) + : hle_device_base(mconfig, INTERPRO_HLE_EN_US_KEYBOARD, tag, owner, clock), + m_modifiers(*this, "modifiers") +{ +} + +ioport_constructor hle_en_us_device::device_input_ports() const +{ + return INPUT_PORTS_NAME(hle_en_us_device); +} + +u8 hle_en_us_device::translate(u8 row, u8 column) +{ + u8 const modifiers(m_modifiers->read()); + + bool const ctrl(modifiers & 0x01); + bool const shift(bool(modifiers & 0x02) || (bool(modifiers & 0x04))); + bool const ctrl_shift(ctrl && shift); + + unsigned const map(ctrl_shift ? 3 : ctrl ? 2 : shift ? 1 : 0); + + return TRANSLATION_TABLE[map][row][column]; +} + +} } } // namespace bus::interpro::keyboard diff --git a/src/devices/bus/interpro/keyboard/hle.h b/src/devices/bus/interpro/keyboard/hle.h new file mode 100644 index 00000000000..fac0b48d3be --- /dev/null +++ b/src/devices/bus/interpro/keyboard/hle.h @@ -0,0 +1,113 @@ +// license:BSD-3-Clause +// copyright-holders:Patrick Mackinlay +#ifndef MAME_DEVICES_INTERPRO_KEYBOARD_HLE_H +#define MAME_DEVICES_INTERPRO_KEYBOARD_HLE_H + +#pragma once + +#include "keyboard.h" +#include "machine/keyboard.h" +#include "sound/beep.h" + +namespace bus { namespace interpro { namespace keyboard { + +class hle_device_base + : public device_t + , public device_buffered_serial_interface<16U> + , public device_interpro_keyboard_port_interface + , protected device_matrix_keyboard_interface<5U> +{ +public: + virtual ~hle_device_base() override; + + virtual DECLARE_WRITE_LINE_MEMBER(input_txd) override; + +protected: + // constructor/destructor + hle_device_base(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock); + + // device overrides + virtual void device_add_mconfig(machine_config &config) override; + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + + // device_buffered_serial_interface overrides + virtual void tra_callback() override; + virtual void tra_complete() override; + + // device_matrix_keyboard_interface overrides + virtual void key_make(u8 row, u8 column) override; + virtual void key_break(u8 row, u8 column) override; + + // customised transmit_byte method + void transmit_byte(u8 byte); + virtual u8 translate(u8 row, u8 column) = 0; + +private: + enum { + CLICK_TIMER_ID = 30'000 + }; + + enum : int { + LED_DISK = 0, + LED_LOCK, + LED_UNKNOWN, + LED_L1, + LED_L2, + LED_L3, + LED_L4 + }; + + enum : u8 { + BEEPER_BELL = 0x01U, + BEEPER_CLICK = 0x02U + }; + + enum : u8 { + RX_IDLE, + RX_ESC, + RX_BELL + }; + + enum : u8 { + COMMAND_RESET = 0x01U, + COMMAND_BELL_ON = 0x02U, + COMMAND_BELL_OFF = 0x03U, + COMMAND_CLICK_ON = 0x0aU, + COMMAND_CLICK_OFF = 0x0bU, + COMMAND_LED = 0x0eU, + COMMAND_LAYOUT = 0x0fU + }; + + // device_buffered_serial_interface overrides + virtual void received_byte(u8 byte) override; + + emu_timer *m_click_timer; + required_device m_beeper; + + u8 m_make_count; + u8 m_rx_state; + + u8 m_keyclick; + u8 m_beeper_state; +}; + + +class hle_en_us_device : public hle_device_base +{ +public: + hle_en_us_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock); + + virtual ioport_constructor device_input_ports() const override; + + virtual u8 translate(u8 row, u8 column) override; + + required_ioport m_modifiers; +}; + +} } } // namespace bus::interpro::keyboard + +DECLARE_DEVICE_TYPE_NS(INTERPRO_HLE_EN_US_KEYBOARD, bus::interpro::keyboard, hle_en_us_device) + +#endif // MAME_DEVICES_INTERPRO_KEYBOARD_HLE_H diff --git a/src/devices/bus/interpro/keyboard/keyboard.cpp b/src/devices/bus/interpro/keyboard/keyboard.cpp new file mode 100644 index 00000000000..210b509277c --- /dev/null +++ b/src/devices/bus/interpro/keyboard/keyboard.cpp @@ -0,0 +1,67 @@ +// license:BSD-3-Clause +// copyright-holders:Patrick Mackinlay + +#include "emu.h" +#include "keyboard.h" + +#define VERBOSE 0 +#include "logmacro.h" + +DEFINE_DEVICE_TYPE(INTERPRO_KEYBOARD_PORT, interpro_keyboard_port_device, "interpro_keyboard_port", "InterPro Keyboard Port") + +int const device_interpro_keyboard_port_interface::START_BIT_COUNT; +int const device_interpro_keyboard_port_interface::DATA_BIT_COUNT; +device_serial_interface::parity_t const device_interpro_keyboard_port_interface::PARITY; +device_serial_interface::stop_bits_t const device_interpro_keyboard_port_interface::STOP_BITS; +int const device_interpro_keyboard_port_interface::BAUD; + +interpro_keyboard_port_device::interpro_keyboard_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock) + : interpro_keyboard_port_device(mconfig, INTERPRO_KEYBOARD_PORT, tag, owner, clock) +{ +} + +interpro_keyboard_port_device::interpro_keyboard_port_device(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, type, tag, owner, clock) + , device_slot_interface(mconfig, *this) + , m_rxd_handler(*this) + , m_dev(nullptr) +{ +} + +interpro_keyboard_port_device::~interpro_keyboard_port_device() +{ +} + +void interpro_keyboard_port_device::device_config_complete() +{ + m_dev = dynamic_cast(get_card_device()); +} + +void interpro_keyboard_port_device::device_start() +{ + m_rxd_handler.resolve_safe(); + + save_item(NAME(m_rxd)); +} + +WRITE_LINE_MEMBER(interpro_keyboard_port_device::write_txd) +{ + if (m_dev) + m_dev->input_txd(state); +} + +device_interpro_keyboard_port_interface::device_interpro_keyboard_port_interface(machine_config const &mconfig, device_t &device) + : device_slot_card_interface(mconfig, device) + , m_port(dynamic_cast(device.owner())) +{ +} + +device_interpro_keyboard_port_interface::~device_interpro_keyboard_port_interface() +{ +} + +#include "hle.h" + +SLOT_INTERFACE_START(interpro_keyboard_devices) + SLOT_INTERFACE("hle_en_us", INTERPRO_HLE_EN_US_KEYBOARD) +SLOT_INTERFACE_END diff --git a/src/devices/bus/interpro/keyboard/keyboard.h b/src/devices/bus/interpro/keyboard/keyboard.h new file mode 100644 index 00000000000..ca3b1a2eb82 --- /dev/null +++ b/src/devices/bus/interpro/keyboard/keyboard.h @@ -0,0 +1,71 @@ +// license:BSD-3-Clause +// copyright-holders:Patrick Mackinlay +#ifndef MAME_BUS_INTERPRO_KEYBOARD_KEYBOARD_H +#define MAME_BUS_INTERPRO_KEYBOARD_KEYBOARD_H + +#pragma once + +#define MCFG_INTERPRO_KEYBOARD_PORT_ADD(tag, slot_intf, def_slot) \ + MCFG_DEVICE_ADD(tag, INTERPRO_KEYBOARD_PORT, 0) \ + MCFG_DEVICE_SLOT_INTERFACE(slot_intf, def_slot, false) + +#define MCFG_INTERPRO_KEYBOARD_RXD_HANDLER(cb) \ + devcb = &interpro_keyboard_port_device::set_rxd_handler(*device, DEVCB_##cb); + +class device_interpro_keyboard_port_interface; + +class interpro_keyboard_port_device : public device_t, public device_slot_interface +{ + friend class device_interpro_keyboard_port_interface; + +public: + interpro_keyboard_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock); + virtual ~interpro_keyboard_port_device(); + + // static configuration helpers + template static devcb_base &set_rxd_handler(device_t &device, Object &&cb) { return downcast(device).m_rxd_handler.set_callback(std::forward(cb)); } + + DECLARE_WRITE_LINE_MEMBER(write_txd); + +protected: + interpro_keyboard_port_device(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_config_complete() override; + + int m_rxd; + + devcb_write_line m_rxd_handler; + +private: + device_interpro_keyboard_port_interface *m_dev; +}; + +class device_interpro_keyboard_port_interface : public device_slot_card_interface +{ + friend class interpro_keyboard_port_device; + +public: + virtual ~device_interpro_keyboard_port_interface() override; + + virtual DECLARE_WRITE_LINE_MEMBER(input_txd) { } + + DECLARE_WRITE_LINE_MEMBER(output_rxd) { m_port->m_rxd = state; m_port->m_rxd_handler(state); } + +protected: + device_interpro_keyboard_port_interface(machine_config const &mconfig, device_t &device); + + interpro_keyboard_port_device *m_port; + + static constexpr int START_BIT_COUNT = 1; + static constexpr int DATA_BIT_COUNT = 8; + static constexpr device_serial_interface::parity_t PARITY = device_serial_interface::PARITY_EVEN; + static constexpr device_serial_interface::stop_bits_t STOP_BITS = device_serial_interface::STOP_BITS_1; + static constexpr int BAUD = 1'200; +}; + +DECLARE_DEVICE_TYPE(INTERPRO_KEYBOARD_PORT, interpro_keyboard_port_device) + +SLOT_INTERFACE_EXTERN(interpro_keyboard_devices); + +#endif // MAME_BUS_INTERPRO_KEYBOARD_KEYBOARD_H diff --git a/src/devices/bus/interpro/sr/gt.cpp b/src/devices/bus/interpro/sr/gt.cpp new file mode 100644 index 00000000000..4725b5850b8 --- /dev/null +++ b/src/devices/bus/interpro/sr/gt.cpp @@ -0,0 +1,199 @@ +// license:BSD-3-Clause +// copyright-holders:Patrick Mackinlay + +/* + * An emulation of GT graphics for Intergraph InterPro. + * + * TODO + * - control register (including primary/secondary buffer selection) + * - DP8510V BITBLT unit + * - custom Bresenham line drawing ASIC + * - support GT+, GTII, GTII+ + * + */ + +#include "emu.h" +#include "screen.h" + +#include "gt.h" + +#define VERBOSE 0 +#include "logmacro.h" + +DEVICE_ADDRESS_MAP_START(map, 32, mpcb963_device) + AM_RANGE(0x00000000, 0x0000007f) AM_READ(idprom_r) + AM_RANGE(0x00000080, 0x0000008f) AM_DEVICE8("ramdac0", bt459_device, map, 0xff) + AM_RANGE(0x000000b0, 0x000000b3) AM_READWRITE16(control_r, control_w, 0xffff) + //AM_RANGE(0x000000d4, 0x000000d7) AM_READWRITE8(, 0xff) // currently unknown + //AM_RANGE(0x000000a0, 0x000000a0) AM_READWRITE8(, 0xff) // currently unknown + AM_RANGE(0x00400000, 0x005fffff) AM_READWRITE(vram_r, vram_w) +ADDRESS_MAP_END + +DEVICE_ADDRESS_MAP_START(map, 32, mpcba79_device) + AM_RANGE(0x00000000, 0x0000007f) AM_READ(idprom_r) + AM_RANGE(0x00000080, 0x0000008f) AM_DEVICE8("ramdac0", bt459_device, map, 0xff) + AM_RANGE(0x00000090, 0x0000009f) AM_DEVICE8("ramdac1", bt459_device, map, 0xff) + AM_RANGE(0x000000b0, 0x000000b3) AM_READWRITE16(control_r, control_w, 0xffff) + //AM_RANGE(0x000000d4, 0x000000d7) AM_READWRITE8(, 0xff) // currently unknown + //AM_RANGE(0x000000a0, 0x000000a0) AM_READWRITE8(, 0xff) // currently unknown + AM_RANGE(0x00400000, 0x007fffff) AM_READWRITE(vram_r, vram_w) +ADDRESS_MAP_END + +ROM_START(mpcb963) + ROM_REGION(0x80, "idprom", 0) + ROM_LOAD32_BYTE("mpcb963a.bin", 0x0, 0x20, CRC(4cf4562d) SHA1(58bcc2afb66168f1d44a0366b6a5ccc4c22e0f32)) +ROM_END + +ROM_START(mpcba79) + ROM_REGION(0x80, "idprom", 0) + ROM_LOAD32_BYTE("mpcba79a.bin", 0x0, 0x20, CRC(b3b98324) SHA1(77b4ed0bbc6ed19646c4536d9976563f78961408)) +ROM_END + +DEFINE_DEVICE_TYPE(MPCB963, mpcb963_device, "mpcb963", "2000 Graphics f/1 1Mp Monitor") +DEFINE_DEVICE_TYPE(MPCBA79, mpcba79_device, "mpcba79", "2000 Graphics f/2 1Mp Monitors") + +/* + * The screen data here is just a guess for now. Real values will need to be + * determined to ensure the cursor positions generated by the Bt459 are + * aligned properly on the screen. + */ +MACHINE_CONFIG_MEMBER(mpcb963_device::device_add_mconfig) + MCFG_SCREEN_ADD("screen0", RASTER) + MCFG_SCREEN_RAW_PARAMS(80'000'000, XRES, 0, XRES, YRES, 0, YRES) + MCFG_SCREEN_UPDATE_DEVICE("", mpcb963_device, screen_update0) + MCFG_DEVICE_ADD("ramdac0", BT459, 0) +MACHINE_CONFIG_END + +MACHINE_CONFIG_MEMBER(mpcba79_device::device_add_mconfig) + MCFG_SCREEN_ADD("screen0", RASTER) + MCFG_SCREEN_RAW_PARAMS(80'000'000, XRES, 0, XRES, YRES, 0, YRES) + MCFG_SCREEN_UPDATE_DEVICE("", mpcba79_device, screen_update0) + MCFG_DEVICE_ADD("ramdac0", BT459, 0) + + MCFG_SCREEN_ADD("screen1", RASTER) + MCFG_SCREEN_RAW_PARAMS(80'000'000, XRES, 0, XRES, YRES, 0, YRES) + MCFG_SCREEN_UPDATE_DEVICE("", mpcba79_device, screen_update1) + MCFG_DEVICE_ADD("ramdac1", BT459, 0) +MACHINE_CONFIG_END + +gt_device_base::gt_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : + sr_card_device_base(mconfig, type, tag, owner, clock) +{ +} + +mpcb963_device::mpcb963_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + gt_device_base(mconfig, MPCB963, tag, owner, clock), + m_screen + { + { { *this, "ramdac0" }, {}, true } + } +{ +} + +const tiny_rom_entry *mpcb963_device::device_rom_region() const +{ + return ROM_NAME(mpcb963); +} + +void mpcb963_device::device_start() +{ + gt_device_base::device_start(); + + m_screen[0].vram.reset(new u8[VRAM_SIZE]); + + save_item(NAME(m_control)); + save_pointer(NAME(m_screen[0].vram.get()), VRAM_SIZE); +} + + +WRITE16_MEMBER(mpcb963_device::control_w) +{ + LOG("control_w 0x%04x\n", data); + + m_control = data; +} + +READ32_MEMBER(mpcb963_device::vram_r) const +{ + return ((u32 *)m_screen[(offset >> 19) & 1].vram.get())[offset & 0x7ffff]; +} + +WRITE32_MEMBER(mpcb963_device::vram_w) +{ + gt_screen_t >_screen = m_screen[(offset >> 19) & 1]; + + ((u32 *)gt_screen.vram.get())[offset & 0x7ffff] = (((u32 *)gt_screen.vram.get())[offset & 0x7ffff] & ~mem_mask) | (data & mem_mask); +} + +u32 mpcb963_device::screen_update0(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + gt_screen_t >_screen = m_screen[0]; + + gt_screen.ramdac->screen_update(screen, bitmap, cliprect, >_screen.vram[gt_screen.primary ? 0x000000 : 0x100000]); + + return 0; +} + +mpcba79_device::mpcba79_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + gt_device_base(mconfig, MPCBA79, tag, owner, clock), + m_screen +{ + { { *this, "ramdac0" },{}, true }, + { { *this, "ramdac1" },{}, true } +} +{ +} + +const tiny_rom_entry *mpcba79_device::device_rom_region() const +{ + return ROM_NAME(mpcba79); +} + +void mpcba79_device::device_start() +{ + gt_device_base::device_start(); + + m_screen[0].vram.reset(new u8[VRAM_SIZE]); + m_screen[1].vram.reset(new u8[VRAM_SIZE]); + + save_item(NAME(m_control)); + save_pointer(NAME(m_screen[0].vram.get()), VRAM_SIZE); + save_pointer(NAME(m_screen[1].vram.get()), VRAM_SIZE); +} + +WRITE16_MEMBER(mpcba79_device::control_w) +{ + LOG("control_w 0x%04x\n", data); + + m_control = data; +} + +READ32_MEMBER(mpcba79_device::vram_r) const +{ + return ((u32 *)m_screen[(offset >> 19) & 1].vram.get())[offset & 0x7ffff]; +} + +WRITE32_MEMBER(mpcba79_device::vram_w) +{ + gt_screen_t >_screen = m_screen[(offset >> 19) & 1]; + + ((u32 *)gt_screen.vram.get())[offset & 0x7ffff] = (((u32 *)gt_screen.vram.get())[offset & 0x7ffff] & ~mem_mask) | (data & mem_mask); +} + +u32 mpcba79_device::screen_update0(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + gt_screen_t >_screen = m_screen[0]; + + gt_screen.ramdac->screen_update(screen, bitmap, cliprect, >_screen.vram[gt_screen.primary ? 0x000000 : 0x100000]); + + return 0; +} + +u32 mpcba79_device::screen_update1(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + gt_screen_t >_screen = m_screen[1]; + + gt_screen.ramdac->screen_update(screen, bitmap, cliprect, >_screen.vram[gt_screen.primary ? 0x000000 : 0x100000]); + + return 0; +} diff --git a/src/devices/bus/interpro/sr/gt.h b/src/devices/bus/interpro/sr/gt.h new file mode 100644 index 00000000000..8c507871e53 --- /dev/null +++ b/src/devices/bus/interpro/sr/gt.h @@ -0,0 +1,110 @@ +// license:BSD-3-Clause +// copyright-holders:Patrick Mackinlay +#ifndef MAME_BUS_INTERPRO_SR_GT_H +#define MAME_BUS_INTERPRO_SR_GT_H + +#pragma once + +#include "sr.h" +#include "video/bt459.h" + +class gt_device_base : public sr_card_device_base +{ +protected: + gt_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + +public: + const int XRES = 1184; + const int YRES = 884; + const int VRAM_SIZE = 0x200000; // 1 megabyte double buffered + + enum control_mask + { + CONTROL_SCREEN = 0x1000, // possibly selects screen 0 or 1? + CONTROL_BUSY = 0x8000 + }; + + typedef struct + { + required_device ramdac; + std::unique_ptr vram; + + bool primary; + } gt_screen_t; + + virtual DECLARE_READ16_MEMBER(control_r) const = 0; + virtual DECLARE_WRITE16_MEMBER(control_w) = 0; + + //virtual DECLARE_READ8_MEMBER(dac_r) const = 0; + //virtual DECLARE_WRITE8_MEMBER(dac_w) = 0; + + virtual DECLARE_READ32_MEMBER(vram_r) const = 0; + virtual DECLARE_WRITE32_MEMBER(vram_w) = 0; + + // BSGA XLeft 0x104 (write) + // BSGA XLeft 0x10c (read) +}; + +class mpcb963_device : public gt_device_base +{ +public: + mpcb963_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual DECLARE_ADDRESS_MAP(map, 32) override; + + virtual DECLARE_READ16_MEMBER(control_r) const override { return m_control; } + virtual DECLARE_WRITE16_MEMBER(control_w) override; + + //virtual DECLARE_READ8_MEMBER(dac_r) const override { return m_screen[0].ramdac->read(space, offset, mem_mask); } + //virtual DECLARE_WRITE8_MEMBER(dac_w) override { m_screen[0].ramdac->write(space, offset, data, mem_mask); } + + virtual DECLARE_READ32_MEMBER(vram_r) const override; + virtual DECLARE_WRITE32_MEMBER(vram_w) override; + + u32 screen_update0(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + +protected: + virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_add_mconfig(machine_config &config) override; + virtual void device_start() override; + +private: + u16 m_control; + + gt_screen_t m_screen[1]; +}; + +class mpcba79_device : public gt_device_base +{ +public: + mpcba79_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual DECLARE_ADDRESS_MAP(map, 32) override; + + virtual DECLARE_READ16_MEMBER(control_r) const override { return m_control; } + virtual DECLARE_WRITE16_MEMBER(control_w) override; + + //virtual DECLARE_READ8_MEMBER(dac_r) const override { return m_screen[offset >> 2].ramdac->read(space, offset & 0x3, mem_mask); } + //virtual DECLARE_WRITE8_MEMBER(dac_w) override { m_screen[offset >> 2].ramdac->write(space, offset & 0x3, data, mem_mask); } + + virtual DECLARE_READ32_MEMBER(vram_r) const override; + virtual DECLARE_WRITE32_MEMBER(vram_w) override; + + u32 screen_update0(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + u32 screen_update1(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + +protected: + virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_add_mconfig(machine_config &config) override; + virtual void device_start() override; + +private: + u16 m_control; + gt_screen_t m_screen[2]; +}; + +// device type definition +DECLARE_DEVICE_TYPE(MPCB963, mpcb963_device) +DECLARE_DEVICE_TYPE(MPCBA79, mpcba79_device) + +#endif // MAME_BUS_INTERPRO_SR_GT_H diff --git a/src/devices/bus/interpro/sr/sr.cpp b/src/devices/bus/interpro/sr/sr.cpp new file mode 100644 index 00000000000..765e3573dff --- /dev/null +++ b/src/devices/bus/interpro/sr/sr.cpp @@ -0,0 +1,379 @@ +// license:BSD-3-Clause +// copyright-holders:Patrick Mackinlay + +/* + * An initial very primitive emulation of the SR bus for the Intergraph + * InterPro. + * + * The bus is referred to by several different names at different places + * in the system code, such as SR, SR bus, SRX, SRX/C bus, CBUS and some + * variations on those. It's likely that SRX is an enhanced version of the + * original SR bus implementation, and that CBUS is an alternate name. + * + * SR bus devices are mapped into the host memory map at a fixed address + * range per slot, starting at 0x87000000 and incrementing by 0x08000000. + * Within this address range, the first 32 double words provide access to + * a 32 byte board signature area, with a format as follows. + * + * u8 board[8] first four bytes typically zero, next three bytes + * contain a board number (in ASCII) from the list + * below, last byte contains a revision character + * u8 eco[8] engineering change order bits; these are initially + * all set, and are cleared starting from the least + * significant bit of the first byte onward to indicate + * board level changes + * u8 feature[8] used for different purposes by different boards + * u8 reserved[2] always set to 0xff + * u16 family indicate the board type from the list below + * u8 footprint[4] the first three bytes contain the magic number 0x55 + * 0xaa 0x55, the last byte contains the ones-complement + * of the sum of the other bytes as a checksum + * + * The following are the board families taken from the system boot ROM. + * + * Family Description + * ------ ----------- + * 0x0000 I/O processor + * 0x0001 CLIX engine + * 0x0002 expansion memory + * 0x0003 floating-point engine + * 0x0004 pipe-starter + * 0x0005 integrated frame buffer + * 0x0006 32/CGX + * 0x0007 GRE integrated frame buffer + * 0x0008 hardcopy/digitizer + * 0x0009 plotter DMA I/F + * 0x000a A/V mux + * 0x000b image subsystem I/F + * 0x000c VME adapter + * 0x000d I/O processor + * 0x000e CLIX engine + * 0x000f frame grabber + * 0x0010 screen generator subsystem + * 0x0011 scanner I/F + * 0x0012 convolution filter + * 0x0013 non-linear filter + * 0x0014 run-length encoder + * 0x0015 color setter data board + * 0x0016 EDGE I + * 0x0017 6000-series system board + * 0x0018 32-channel async I/F + * 0x0019 SR QUAD SCSI I/F + * 0x001a FDDI I/F + * 0x001b EDGE II processor + * 0x001c EDGE II frame buffer + * 0x001d IOI + * 0x001e IOI Clix Engine + * 0x001f MAYA bus I/F unit + * 0x0020 comp/decomp group 4 + * 0x0021 QWIC/SRX I/F + * 0x0022 SRX test board + * 0x0023 QWIC bus CPU + * 0x0024 2000-series system board + * 0x0025 2000-series graphics board + * 0x0026 E100/SRX device I/F + * 0x0027 IKOS H/W simulator I/F + * 0x0028 enhanced VME adapter + * 0x0029 QWIC expansion memory + * 0x002a image comp/decomp + * 0x002b teleconferencing controller + * 0x002c Sky 8115-I interface + * 0x002d C-bus token ring + * 0x002e Screen IV PressFax Subsystem + * 0x002f C400E CPU + * 0x0030 C-bus exp Ethernet + * 0x0031 2400-series CPU + * 0x0032 6400-series CPU + * 0x0033 6000-series GT Graphics + * 0x0034 C4K QWIC bus processor + * 0x0038 Visualization Processor + * 0x0039 2700-series CPU + * 0x0040 6700-series CPU + * 0x0041 2800-series CPU + * 0x0042 6700-series CPU + * + * The following are the board names taken from the showconfig.dat file + * shipped with the operating system. + * + * # Description + * --- ----------- + * 004 EDGE-2 Processor f/2 2Mp-FB's + * 008 Image Memory VRAM Board + * 009 EDGE II Frame Buffer for ImageStation + * 010 VI50 Image Processor + * 014 SRX Quad-SCSI Controller + * 019 C4E CPU Assembly + * 030 EDGE-2 Processor f/1 or 2 1Mp-FB's + * 031 EDGE-2 Processor f/1 2Mp-FB + * 032 CBUS Token Ring + * 034 256MB QWIC Bus Expansion Memory + * 046 6400 36-MHz Series System Board + * 047 2400 Series System Board + * 068 2400 Graphics f/1 1Mp Monitor (V-60) + * 069 2400 Graphics f/2 1Mp Monitors (V-60) + * 070 2400 Graphics f/1 1Mp Monitor (V-76) + * 071 2400 Graphics f/2 1Mp Monitors (V-76) + * 081 2400 Graphics f/1 2Mp Monitor (V-60/76) + * 083 SRX Hard PC Option / 8 Mb + * 093 EDGE-2 Plus Processor f/1 or 2 1Mp-FB's + * 094 EDGE-2 Plus Processor f/1 2Mp-FB + * 095 EDGE-2 Plus Processor f/2 2Mp-FB's + * 096 EDGE-2 Plus Frame Buffer f/1Mp Monitor + * 098 6400 32-MHz Sapphire System Board + * 101 2400 Graphics f/1 1Mp Monitor (V-76) + * 100 2500 Series System Board + * 102 2400 Graphics f/2 1Mp Monitors (V-76) + * 106 C-Bus Series Hard PC Option / 8 Mb + * 112 SRX Fast Quad-SCSI Controller + * 115 Edge III Processor + * 116 Edge III-C Single Ramdac + * 126 SRX Enhanced VME Adapter + * 127 6700 Series System Board + * 128 2700 Series System Board + * 129 6800 Series System Board + * 135 GT II Graphics f/1 2Mp Monitor (V-60/76) + * 136 GT II Graphics f/2 2Mp Monitor (V-60/76) + * 144 6800 Series System Board + * 145 2800 Series System Board + * 217 C-Bus Hard PC Option / 16 Mb + * 218 SRX Hard PC Option / 16 Mb + * 512 32C Clix Engine w/6MB + * 543 Floating Point Engine + * 548 80386 I/O Processor + * 577 Analog Video Mux/Summer + * 588 80186 I/O Processor + * 595 Pipe Starter + * 604 Digitizer/HardCopy Controller + * 605 300 Series Clix Engine w/16MB + * 617 300 Series SR VME-Adapter + * 633 32MB Expansion Memory + * 636 80186 I/O Processor w/CoProcessor + * 641 Image Subsystem Interface + * 643 8Mb Integrated Frame Buffer f/1Mp + * 650 2Mb Integrated Frame Buffer f/1Mp + * 652 2Mb Integrated Frame Buffer f/1Mp + * 657 32C Clix Engine w/8MB + * 663 200 Series SR VME-Adapter + * 664 32C Clix Engine w/16MB + * 675 SR Plotter-DMA-Interface + * 677 32C Clix Engine w/6MB + * 686 8Mb Integrated Frame Buffer f/2Mp + * 693 Clix Engine w/8MB + * 694 Clix Engine w/16MB + * 722 SR Frame Grabber NTSC + * 730 300/400 Series Clix Engine w/8MB + * 732 Clix Engine w/16MB + * 739 16MB Expansion Memory + * 765 6000 System Board w/16MB + * 776 Runlength Encoder + * 777 Scanner Interface + * 778 Nonlinear Filter + * 779 SIP Convolution Filter + * 789 32C Clix Engine w/6MB + * 792 Digitizer/HardCopy Controller Plus + * 796 2Mb Integrated Frame Buffer f/1Mp -T + * 799 80386 I/O Processor -T + * 801 Clix Engine w/8MB + * 819 QWIC Bus Clix Engine w/256K CB CACHE + * 820 QWIC System Interface w/64MB ECC + * 821 SRX 32 Channel RS232 Controller + * 822 300 Series Clix Engine w/16MB ECC + * 823 300/400 Series Clix Engine w/8MB ECC + * 825 32C Clix Engine w/12MB + * 826 FDDI Communications Processor + * 828 EDGE-1 Graphics f/1 1Mp Monitor (55K/60) + * 837 Analog Video Mux/Summer -T + * 838 Floating Point Engine -T + * 844 32MB Expansion Memory -T + * 849 EDGE-1 Graphics f/1 2Mp Monitor (55K/60) + * 851 Clix Engine w/16MB ECC -T + * 852 Digitizer/HardCopy Controller Plus -T + * 853 Clix Engine w/16MB ECC -T + * 883 6000 System Board w/8MB + * 887 SR Frame Grabber PAL + * 894 Clix Engine w/16MB ECC + * 896 EDGE-2/Plus Frame Buffer f/2Mp Monitor (V-60) + * 897 EDGE-2 Processor f/1 2Mp-FB + * 904 EDGE-1 Graphics f/2 1Mp Monitors (55K/60) + * 905 SRX Frame Grabber NTSC + * 906 SRX Frame Grabber PAL + * 915 64MB QWIC Bus Expansion Memory + * 917 Input Output Interface + * 932 IOI Clix Engine w/16MB ECC + * 956 SRX Enhanced VME-Adapter + * 958 VME-Controller f/SRX Interface + * 962 2000 System Board + * 963 2000 Graphics f/1 1Mp Monitor + * 965 EDGE-1 Graphics f/1 1Mp Monitor (66K/72) + * 966 EDGE-1 Graphics f/2 1Mp Monitors (66K/72) + * 977 6000 System Board w/32MB parity + * 978 6000 System Board w/48MB parity + * 979 6000 System Board w/64MB parity + * 980 6200 System Board w/8MB parity + * 981 6200 System Board w/16MB parity + * 982 6200 System Board w/32MB parity + * 983 6200 System Board w/48MB parity + * 984 6200 System Board w/64MB parity + * 31275 Raster Data Board + * 31277 Screener III A Board + * 31277/8 Screener III A+B Board + * A59 200 Series Clix Engine w/16MB parity + * A61 200 Series Clix Engine w/8MB parity + * A63 EDGE-2 Frame Buffer f/1Mp Monitor (55K/60) + * A77 200 Series Clix Engine w/16MB + * A79 2000 Graphics f/2 1Mp Monitors + * A80 QWIC System Interface w/16MB ECC + * A81 300 Series Clix Engine w/16MB ECC + * A86 SRX Teleconferencing Controller + * A95 IOI Clix Engine w/32MB ECC + * A96 IOI Clix Engine w/64MB ECC + * B13 System Board w/16MB parity -T + * B14 System Board w/48MB parity -T + * B15 EDGE-1 Graphics f/1 1Mp Monitor (55K/60) -T + * B16 EDGE-1 Graphics f/2 1Mp Monitors (55K/60) -T + * B17 IOI Clix Engine w/16MB ECC -T + * B18 Input Output Interface -T + * B20 SRX 32 Channel RS232 Controller -T + * B21 FDDI Communications Processor -T + * B22 SRX Quad-SCSI Controller -T + * b23 JPEG Compression/Decompression I/F + * B50 Application-Specific Acceleration Proc. II + * B63 IOI Clix Engine w/64MB ECC -T + * B67 GT Plus Graphics f/1 1Mp Monitor (V-76) + * B68 GT II Graphics f/1 1Mp Monitor (V-76) + * B70 GT II Graphics f/2 1Mp Monitors (V-76) + * B92 GT II Graphics f/1 2Mp Monitor (V-60/76) + * B93 GT II Graphics f/2 2Mp Monitors (V-60/76) + * B99 NTSC Frame Grabber for 3000 Series + * C01 PAL Frame Grabber for 3000 series + * C02 NTSC Frame Grabber for 6000 series + * C03 PAL Frame Grabber for 6000 series + * c05 25Mhz GTII Graphics f/1 1Mp Monitor + * c06 25Mhz GTII Graphics f/2 1Mp Monitors + * C41 GTII 60/76Hz Graphics f/1 2Mp Monitor + * C42 GTII 60/76Hz Graphics f/2 2Mp Monitor + * + * TODO + * - general refactoring and rework to improve implementation + */ + +#include "emu.h" +#include "sr.h" + +#define VERBOSE 1 +#include "logmacro.h" + +DEFINE_DEVICE_TYPE(SR_SLOT, sr_slot_device, "sr_slot", "InterPro SR bus slot") + +sr_slot_device::sr_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, SR_SLOT, tag, owner, clock) + , device_slot_interface(mconfig, *this) + , m_sr_tag(nullptr) + , m_sr_slottag(nullptr) +{ +} + +void sr_slot_device::static_set_sr_slot(device_t &device, const char *tag, const char *slottag) +{ + sr_slot_device &sr_card = dynamic_cast(device); + + sr_card.m_sr_tag = tag; + sr_card.m_sr_slottag = slottag; +} + +void sr_slot_device::device_start() +{ + device_sr_card_interface *dev = dynamic_cast(get_card_device()); + + if (dev) + device_sr_card_interface::static_set_sr_tag(*dev, m_sr_tag, m_sr_slottag); +} + +DEFINE_DEVICE_TYPE(SR, sr_device, "sr", "InterPro SR bus") + +sr_device::sr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, SR, tag, owner, clock), + m_data_space(nullptr), + m_io_space(nullptr), + m_out_irq0_cb(*this), + m_out_irq1_cb(*this), + m_out_irq2_cb(*this) +{ +} + +void sr_device::device_start() +{ + // grab the main memory space from the mmu + device_memory_interface *mmu; + siblingdevice("mmu")->interface(mmu); + m_data_space = &mmu->space(0); + m_io_space = &mmu->space(1); + + // resolve callbacks + m_out_irq0_cb.resolve_safe(); + m_out_irq1_cb.resolve_safe(); + m_out_irq2_cb.resolve_safe(); + + // empty the slots + m_slot_count = 0; + for (auto &slot : m_slot) + slot = nullptr; +} + +void sr_device::device_reset() +{ +} + +void sr_device::install_idprom(device_t *dev, const char *tag, const char *region) +{ + // compute slot base address + offs_t base = 0x87000000; + + // map the idprom + m_data_space->install_read_bank(base, base + 0x7f, 0, tag); + m_data_space->unmap_write(base, base + 0x7f); + + // assign the region + machine().root_device().membank(m_data_space->device().siblingtag(tag).c_str())->set_base(machine().root_device().memregion(dev->subtag(region).c_str())->base()); +} + +device_sr_card_interface::device_sr_card_interface(const machine_config &mconfig, device_t &device) + : device_slot_card_interface(mconfig, device) + , m_sr(nullptr) + , m_sr_tag(nullptr) + , m_sr_slottag(nullptr) +{ +} + +device_sr_card_interface::~device_sr_card_interface() +{ +} + +void device_sr_card_interface::static_set_sr_tag(device_t &device, const char *tag, const char *slottag) +{ + device_sr_card_interface &sr_card = dynamic_cast(device); + + sr_card.m_sr_tag = tag; + sr_card.m_sr_slottag = slottag; +} + +void device_sr_card_interface::set_sr_device() +{ + // get a reference to the bus + m_sr = dynamic_cast(device().machine().device(m_sr_tag)); + + // install the card in the next available slot + m_sr->install_card(*this, &device_sr_card_interface::map); +} + +sr_card_device_base::sr_card_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const char *idprom_region) + : device_t(mconfig, type, tag, owner, clock) + , device_sr_card_interface(mconfig, *this) + , m_idprom_region(idprom_region) +{ +} + +void sr_card_device_base::device_start() +{ + set_sr_device(); +} diff --git a/src/devices/bus/interpro/sr/sr.h b/src/devices/bus/interpro/sr/sr.h new file mode 100644 index 00000000000..5cc36b6bd2b --- /dev/null +++ b/src/devices/bus/interpro/sr/sr.h @@ -0,0 +1,139 @@ +// license:BSD-3-Clause +// copyright-holders:Patrick Mackinlay + +#ifndef MAME_BUS_INTERPRO_SR_SR_H +#define MAME_BUS_INTERPRO_SR_SR_H + +#pragma once + +#define MCFG_SR_OUT_IRQ0_CB(_devcb) \ + devcb = &sr_device::set_out_irq0_callback(*device, DEVCB_##_devcb); + +#define MCFG_SR_OUT_IRQ1_CB(_devcb) \ + devcb = &sr_device::set_out_irq1_callback(*device, DEVCB_##_devcb); + +#define MCFG_SR_OUT_IRQ2_CB(_devcb) \ + devcb = &sr_device::set_out_irq2_callback(*device, DEVCB_##_devcb); + +#define MCFG_SR_SLOT_ADD(_srtag, _tag, _slot_intf, _def_slot, _fixed) \ + MCFG_DEVICE_ADD(_tag, SR_SLOT, 0) \ + MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _fixed) \ + sr_slot_device::static_set_sr_slot(*device, _srtag, _tag); + +#define MCFG_SR_SLOT_REMOVE(_tag) \ + MCFG_DEVICE_REMOVE(_tag) + +class sr_slot_device : public device_t, public device_slot_interface +{ +public: + // construction/destruction + sr_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + // inline configuration + static void static_set_sr_slot(device_t &device, const char *tag, const char *slottag); +protected: + sr_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + // device-level overrides + virtual void device_start() override; + + // configuration + const char *m_sr_tag, *m_sr_slottag; +}; + +class device_sr_card_interface; + +class sr_device : public device_t +{ +public: + // construction/destruction + sr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + // inline configuration + template static devcb_base &set_out_irq0_callback(device_t &device, Object &&cb) { return downcast(device).m_out_irq0_cb.set_callback(std::forward(cb)); } + template static devcb_base &set_out_irq1_callback(device_t &device, Object &&cb) { return downcast(device).m_out_irq1_cb.set_callback(std::forward(cb)); } + template static devcb_base &set_out_irq2_callback(device_t &device, Object &&cb) { return downcast(device).m_out_irq2_cb.set_callback(std::forward(cb)); } + + DECLARE_WRITE_LINE_MEMBER(irq0_w) { m_out_irq0_cb(state); } + DECLARE_WRITE_LINE_MEMBER(irq1_w) { m_out_irq1_cb(state); } + DECLARE_WRITE_LINE_MEMBER(irq2_w) { m_out_irq2_cb(state); } + + // helper functions for card devices + template void install_card(T &device, void (T::*map)(address_map &map)) + { + // record the device in the next free slot + m_slot[m_slot_count] = &device; + + // compute slot base address + offs_t start = 0x87000000 + m_slot_count * 0x8000000; + offs_t end = start + 0x7ffffff; + + // install the device address map + m_data_space->install_device(start, end, device, map, 32); + m_io_space->install_device(start, end, device, map, 32); + + m_slot_count++; + } + + void install_idprom(device_t *dev, const char *tag, const char *region); + +protected: + sr_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + // internal state + address_space *m_data_space; + address_space *m_io_space; + + devcb_write_line m_out_irq0_cb; + devcb_write_line m_out_irq1_cb; + devcb_write_line m_out_irq2_cb; + +private: + device_sr_card_interface *m_slot[16]; + int m_slot_count; +}; + +class device_sr_card_interface : public device_slot_card_interface +{ +public: + // construction/destruction + virtual ~device_sr_card_interface(); + + virtual DECLARE_ADDRESS_MAP(map, 32) = 0; + + void set_sr_device(); + + // inline configuration + static void static_set_sr_tag(device_t &device, const char *tag, const char *slottag); + +protected: + device_sr_card_interface(const machine_config &mconfig, device_t &device); + + sr_device *m_sr; + const char *m_sr_tag, *m_sr_slottag; +}; + +class sr_card_device_base : public device_t, public device_sr_card_interface +{ +protected: + sr_card_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const char *idprom_region = "idprom"); + +public: + READ32_MEMBER(idprom_r) { return device().memregion(m_idprom_region)->as_u32(offset); } + +protected: + // device-level overrides + virtual void device_start() override; + +private: + const char *const m_idprom_region; +}; + +DECLARE_DEVICE_TYPE(SR, sr_device) +DECLARE_DEVICE_TYPE(SR_SLOT, sr_slot_device) + +#endif // MAME_BUS_INTERPRO_SR_SR_H diff --git a/src/devices/bus/interpro/sr/sr_cards.cpp b/src/devices/bus/interpro/sr/sr_cards.cpp new file mode 100644 index 00000000000..9a626b04a6e --- /dev/null +++ b/src/devices/bus/interpro/sr/sr_cards.cpp @@ -0,0 +1,24 @@ +// license:BSD-3-Clause +// copyright-holders:Patrick Mackinlay + +#include "emu.h" +#include "sr_cards.h" + +// video +#include "gt.h" + +// storage + +// sound + +// network + +// communication ports + +// other + + +SLOT_INTERFACE_START(sr_cards) + SLOT_INTERFACE("mpcb963", MPCB963) + SLOT_INTERFACE("mpcba79", MPCBA79) +SLOT_INTERFACE_END diff --git a/src/devices/bus/interpro/sr/sr_cards.h b/src/devices/bus/interpro/sr/sr_cards.h new file mode 100644 index 00000000000..b7f552173d4 --- /dev/null +++ b/src/devices/bus/interpro/sr/sr_cards.h @@ -0,0 +1,12 @@ +// license:BSD-3-Clause +// copyright-holders:Patrick Mackinlay + +#ifndef MAME_BUS_INTERPRO_SR_SR_CARDS_H +#define MAME_BUS_INTERPRO_SR_SR_CARDS_H + +#pragma once + +// supported devices +SLOT_INTERFACE_EXTERN(sr_cards); + +#endif // MAME_BUS_INTERPRO_SR_SR_CARDS_H -- cgit v1.2.3 From 65e84a2ea1cebf1356342ca1492137ff80348fb3 Mon Sep 17 00:00:00 2001 From: Patrick Mackinlay Date: Mon, 23 Oct 2017 18:42:03 +0700 Subject: bus: tidy and formatting (nw) --- src/devices/bus/interpro/sr/gt.cpp | 42 ++++++++++++++++---------------------- src/devices/bus/interpro/sr/gt.h | 18 +++------------- src/devices/bus/interpro/sr/sr.cpp | 38 ++++++++++------------------------ src/devices/bus/interpro/sr/sr.h | 24 ++++++++++++---------- 4 files changed, 45 insertions(+), 77 deletions(-) diff --git a/src/devices/bus/interpro/sr/gt.cpp b/src/devices/bus/interpro/sr/gt.cpp index 4725b5850b8..aa1305e726a 100644 --- a/src/devices/bus/interpro/sr/gt.cpp +++ b/src/devices/bus/interpro/sr/gt.cpp @@ -9,7 +9,7 @@ * - DP8510V BITBLT unit * - custom Bresenham line drawing ASIC * - support GT+, GTII, GTII+ - * + * - reset behaviour */ #include "emu.h" @@ -59,34 +59,31 @@ DEFINE_DEVICE_TYPE(MPCBA79, mpcba79_device, "mpcba79", "2000 Graphics f/2 1Mp Mo */ MACHINE_CONFIG_MEMBER(mpcb963_device::device_add_mconfig) MCFG_SCREEN_ADD("screen0", RASTER) - MCFG_SCREEN_RAW_PARAMS(80'000'000, XRES, 0, XRES, YRES, 0, YRES) + MCFG_SCREEN_RAW_PARAMS(80'000'000, GT_XRES, 0, GT_XRES, GT_YRES, 0, GT_YRES) MCFG_SCREEN_UPDATE_DEVICE("", mpcb963_device, screen_update0) MCFG_DEVICE_ADD("ramdac0", BT459, 0) MACHINE_CONFIG_END MACHINE_CONFIG_MEMBER(mpcba79_device::device_add_mconfig) MCFG_SCREEN_ADD("screen0", RASTER) - MCFG_SCREEN_RAW_PARAMS(80'000'000, XRES, 0, XRES, YRES, 0, YRES) + MCFG_SCREEN_RAW_PARAMS(80'000'000, GT_XRES, 0, GT_XRES, GT_YRES, 0, GT_YRES) MCFG_SCREEN_UPDATE_DEVICE("", mpcba79_device, screen_update0) MCFG_DEVICE_ADD("ramdac0", BT459, 0) MCFG_SCREEN_ADD("screen1", RASTER) - MCFG_SCREEN_RAW_PARAMS(80'000'000, XRES, 0, XRES, YRES, 0, YRES) + MCFG_SCREEN_RAW_PARAMS(80'000'000, GT_XRES, 0, GT_XRES, GT_YRES, 0, GT_YRES) MCFG_SCREEN_UPDATE_DEVICE("", mpcba79_device, screen_update1) MCFG_DEVICE_ADD("ramdac1", BT459, 0) MACHINE_CONFIG_END -gt_device_base::gt_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : - sr_card_device_base(mconfig, type, tag, owner, clock) +gt_device_base::gt_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) + : sr_card_device_base(mconfig, type, tag, owner, clock) { } -mpcb963_device::mpcb963_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - gt_device_base(mconfig, MPCB963, tag, owner, clock), - m_screen - { - { { *this, "ramdac0" }, {}, true } - } +mpcb963_device::mpcb963_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : gt_device_base(mconfig, MPCB963, tag, owner, clock) + , m_screen{ { { *this, "ramdac0" }, {}, true } } { } @@ -99,10 +96,11 @@ void mpcb963_device::device_start() { gt_device_base::device_start(); - m_screen[0].vram.reset(new u8[VRAM_SIZE]); + // allocate double-buffered vram + m_screen[0].vram.reset(new u8[GT_VRAM * 2]); save_item(NAME(m_control)); - save_pointer(NAME(m_screen[0].vram.get()), VRAM_SIZE); + save_pointer(NAME(m_screen[0].vram.get()), GT_VRAM * 2); } @@ -129,18 +127,14 @@ u32 mpcb963_device::screen_update0(screen_device &screen, bitmap_rgb32 &bitmap, { gt_screen_t >_screen = m_screen[0]; - gt_screen.ramdac->screen_update(screen, bitmap, cliprect, >_screen.vram[gt_screen.primary ? 0x000000 : 0x100000]); + gt_screen.ramdac->screen_update(screen, bitmap, cliprect, >_screen.vram[gt_screen.primary ? 0x000000 : GT_VRAM]); return 0; } -mpcba79_device::mpcba79_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - gt_device_base(mconfig, MPCBA79, tag, owner, clock), - m_screen -{ - { { *this, "ramdac0" },{}, true }, - { { *this, "ramdac1" },{}, true } -} +mpcba79_device::mpcba79_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : gt_device_base(mconfig, MPCBA79, tag, owner, clock) + , m_screen { { { *this, "ramdac0" }, {}, true }, { { *this, "ramdac1" }, {}, true } } { } @@ -184,7 +178,7 @@ u32 mpcba79_device::screen_update0(screen_device &screen, bitmap_rgb32 &bitmap, { gt_screen_t >_screen = m_screen[0]; - gt_screen.ramdac->screen_update(screen, bitmap, cliprect, >_screen.vram[gt_screen.primary ? 0x000000 : 0x100000]); + gt_screen.ramdac->screen_update(screen, bitmap, cliprect, >_screen.vram[gt_screen.primary ? 0x000000 : GT_VRAM]); return 0; } @@ -193,7 +187,7 @@ u32 mpcba79_device::screen_update1(screen_device &screen, bitmap_rgb32 &bitmap, { gt_screen_t >_screen = m_screen[1]; - gt_screen.ramdac->screen_update(screen, bitmap, cliprect, >_screen.vram[gt_screen.primary ? 0x000000 : 0x100000]); + gt_screen.ramdac->screen_update(screen, bitmap, cliprect, >_screen.vram[gt_screen.primary ? 0x000000 : GT_VRAM]); return 0; } diff --git a/src/devices/bus/interpro/sr/gt.h b/src/devices/bus/interpro/sr/gt.h index 8c507871e53..a151657f79f 100644 --- a/src/devices/bus/interpro/sr/gt.h +++ b/src/devices/bus/interpro/sr/gt.h @@ -14,9 +14,9 @@ protected: gt_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); public: - const int XRES = 1184; - const int YRES = 884; - const int VRAM_SIZE = 0x200000; // 1 megabyte double buffered + const int GT_XRES = 1184; + const int GT_YRES = 884; + const int GT_VRAM = 0x100000; // 1 megabyte enum control_mask { @@ -35,14 +35,8 @@ public: virtual DECLARE_READ16_MEMBER(control_r) const = 0; virtual DECLARE_WRITE16_MEMBER(control_w) = 0; - //virtual DECLARE_READ8_MEMBER(dac_r) const = 0; - //virtual DECLARE_WRITE8_MEMBER(dac_w) = 0; - virtual DECLARE_READ32_MEMBER(vram_r) const = 0; virtual DECLARE_WRITE32_MEMBER(vram_w) = 0; - - // BSGA XLeft 0x104 (write) - // BSGA XLeft 0x10c (read) }; class mpcb963_device : public gt_device_base @@ -55,9 +49,6 @@ public: virtual DECLARE_READ16_MEMBER(control_r) const override { return m_control; } virtual DECLARE_WRITE16_MEMBER(control_w) override; - //virtual DECLARE_READ8_MEMBER(dac_r) const override { return m_screen[0].ramdac->read(space, offset, mem_mask); } - //virtual DECLARE_WRITE8_MEMBER(dac_w) override { m_screen[0].ramdac->write(space, offset, data, mem_mask); } - virtual DECLARE_READ32_MEMBER(vram_r) const override; virtual DECLARE_WRITE32_MEMBER(vram_w) override; @@ -84,9 +75,6 @@ public: virtual DECLARE_READ16_MEMBER(control_r) const override { return m_control; } virtual DECLARE_WRITE16_MEMBER(control_w) override; - //virtual DECLARE_READ8_MEMBER(dac_r) const override { return m_screen[offset >> 2].ramdac->read(space, offset & 0x3, mem_mask); } - //virtual DECLARE_WRITE8_MEMBER(dac_w) override { m_screen[offset >> 2].ramdac->write(space, offset & 0x3, data, mem_mask); } - virtual DECLARE_READ32_MEMBER(vram_r) const override; virtual DECLARE_WRITE32_MEMBER(vram_w) override; diff --git a/src/devices/bus/interpro/sr/sr.cpp b/src/devices/bus/interpro/sr/sr.cpp index 765e3573dff..d27609d117d 100644 --- a/src/devices/bus/interpro/sr/sr.cpp +++ b/src/devices/bus/interpro/sr/sr.cpp @@ -252,20 +252,17 @@ * c06 25Mhz GTII Graphics f/2 1Mp Monitors * C41 GTII 60/76Hz Graphics f/1 2Mp Monitor * C42 GTII 60/76Hz Graphics f/2 2Mp Monitor - * - * TODO - * - general refactoring and rework to improve implementation */ #include "emu.h" #include "sr.h" -#define VERBOSE 1 +#define VERBOSE 0 #include "logmacro.h" DEFINE_DEVICE_TYPE(SR_SLOT, sr_slot_device, "sr_slot", "InterPro SR bus slot") -sr_slot_device::sr_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +sr_slot_device::sr_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : device_t(mconfig, SR_SLOT, tag, owner, clock) , device_slot_interface(mconfig, *this) , m_sr_tag(nullptr) @@ -291,13 +288,13 @@ void sr_slot_device::device_start() DEFINE_DEVICE_TYPE(SR, sr_device, "sr", "InterPro SR bus") -sr_device::sr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - device_t(mconfig, SR, tag, owner, clock), - m_data_space(nullptr), - m_io_space(nullptr), - m_out_irq0_cb(*this), - m_out_irq1_cb(*this), - m_out_irq2_cb(*this) +sr_device::sr_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, SR, tag, owner, clock) + , m_data_space(nullptr) + , m_io_space(nullptr) + , m_out_irq0_cb(*this) + , m_out_irq1_cb(*this) + , m_out_irq2_cb(*this) { } @@ -316,7 +313,7 @@ void sr_device::device_start() // empty the slots m_slot_count = 0; - for (auto &slot : m_slot) + for (device_sr_card_interface *slot : m_slot) slot = nullptr; } @@ -324,19 +321,6 @@ void sr_device::device_reset() { } -void sr_device::install_idprom(device_t *dev, const char *tag, const char *region) -{ - // compute slot base address - offs_t base = 0x87000000; - - // map the idprom - m_data_space->install_read_bank(base, base + 0x7f, 0, tag); - m_data_space->unmap_write(base, base + 0x7f); - - // assign the region - machine().root_device().membank(m_data_space->device().siblingtag(tag).c_str())->set_base(machine().root_device().memregion(dev->subtag(region).c_str())->base()); -} - device_sr_card_interface::device_sr_card_interface(const machine_config &mconfig, device_t &device) : device_slot_card_interface(mconfig, device) , m_sr(nullptr) @@ -366,7 +350,7 @@ void device_sr_card_interface::set_sr_device() m_sr->install_card(*this, &device_sr_card_interface::map); } -sr_card_device_base::sr_card_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const char *idprom_region) +sr_card_device_base::sr_card_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, const char *idprom_region) : device_t(mconfig, type, tag, owner, clock) , device_sr_card_interface(mconfig, *this) , m_idprom_region(idprom_region) diff --git a/src/devices/bus/interpro/sr/sr.h b/src/devices/bus/interpro/sr/sr.h index 5cc36b6bd2b..236b4ea674b 100644 --- a/src/devices/bus/interpro/sr/sr.h +++ b/src/devices/bus/interpro/sr/sr.h @@ -27,12 +27,12 @@ class sr_slot_device : public device_t, public device_slot_interface { public: // construction/destruction - sr_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + sr_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); // inline configuration static void static_set_sr_slot(device_t &device, const char *tag, const char *slottag); protected: - sr_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + sr_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); // device-level overrides virtual void device_start() override; @@ -47,26 +47,30 @@ class sr_device : public device_t { public: // construction/destruction - sr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + sr_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); // inline configuration template static devcb_base &set_out_irq0_callback(device_t &device, Object &&cb) { return downcast(device).m_out_irq0_cb.set_callback(std::forward(cb)); } template static devcb_base &set_out_irq1_callback(device_t &device, Object &&cb) { return downcast(device).m_out_irq1_cb.set_callback(std::forward(cb)); } template static devcb_base &set_out_irq2_callback(device_t &device, Object &&cb) { return downcast(device).m_out_irq2_cb.set_callback(std::forward(cb)); } + static const u32 SR_BASE = 0x87000000; + static const u32 SR_SIZE = 0x08000000; + static const int SR_COUNT = 16; + DECLARE_WRITE_LINE_MEMBER(irq0_w) { m_out_irq0_cb(state); } DECLARE_WRITE_LINE_MEMBER(irq1_w) { m_out_irq1_cb(state); } DECLARE_WRITE_LINE_MEMBER(irq2_w) { m_out_irq2_cb(state); } - // helper functions for card devices + // installation function for card devices template void install_card(T &device, void (T::*map)(address_map &map)) { // record the device in the next free slot m_slot[m_slot_count] = &device; // compute slot base address - offs_t start = 0x87000000 + m_slot_count * 0x8000000; - offs_t end = start + 0x7ffffff; + offs_t start = SR_BASE + m_slot_count * SR_SIZE; + offs_t end = start + (SR_SIZE - 1); // install the device address map m_data_space->install_device(start, end, device, map, 32); @@ -75,10 +79,8 @@ public: m_slot_count++; } - void install_idprom(device_t *dev, const char *tag, const char *region); - protected: - sr_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + sr_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); // device-level overrides virtual void device_start() override; @@ -93,7 +95,7 @@ protected: devcb_write_line m_out_irq2_cb; private: - device_sr_card_interface *m_slot[16]; + device_sr_card_interface *m_slot[SR_COUNT]; int m_slot_count; }; @@ -120,7 +122,7 @@ protected: class sr_card_device_base : public device_t, public device_sr_card_interface { protected: - sr_card_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, const char *idprom_region = "idprom"); + sr_card_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, const char *idprom_region = "idprom"); public: READ32_MEMBER(idprom_r) { return device().memregion(m_idprom_region)->as_u32(offset); } -- cgit v1.2.3 From a020b82a7da8e35fef03af376b0f0b8448c64537 Mon Sep 17 00:00:00 2001 From: Patrick Mackinlay Date: Mon, 23 Oct 2017 19:40:40 +0700 Subject: gt: minor cleaning (nw) --- src/devices/bus/interpro/sr/gt.cpp | 38 ++++++++++++++++++------------------ src/devices/bus/interpro/sr/gt.h | 40 +++++++++++++++++++++----------------- 2 files changed, 41 insertions(+), 37 deletions(-) diff --git a/src/devices/bus/interpro/sr/gt.cpp b/src/devices/bus/interpro/sr/gt.cpp index aa1305e726a..c4ed9109792 100644 --- a/src/devices/bus/interpro/sr/gt.cpp +++ b/src/devices/bus/interpro/sr/gt.cpp @@ -53,25 +53,25 @@ DEFINE_DEVICE_TYPE(MPCB963, mpcb963_device, "mpcb963", "2000 Graphics f/1 1Mp Mo DEFINE_DEVICE_TYPE(MPCBA79, mpcba79_device, "mpcba79", "2000 Graphics f/2 1Mp Monitors") /* - * The screen data here is just a guess for now. Real values will need to be - * determined to ensure the cursor positions generated by the Bt459 are + * The raw screen data here is just a guess for now. Real values will need to + * be determined to ensure the cursor positions generated by the Bt459 are * aligned properly on the screen. */ MACHINE_CONFIG_MEMBER(mpcb963_device::device_add_mconfig) MCFG_SCREEN_ADD("screen0", RASTER) - MCFG_SCREEN_RAW_PARAMS(80'000'000, GT_XRES, 0, GT_XRES, GT_YRES, 0, GT_YRES) + MCFG_SCREEN_RAW_PARAMS(GT_PIXCLOCK, GT_XPIXELS, 0, GT_XPIXELS, GT_YPIXELS, 0, GT_YPIXELS) MCFG_SCREEN_UPDATE_DEVICE("", mpcb963_device, screen_update0) MCFG_DEVICE_ADD("ramdac0", BT459, 0) MACHINE_CONFIG_END MACHINE_CONFIG_MEMBER(mpcba79_device::device_add_mconfig) MCFG_SCREEN_ADD("screen0", RASTER) - MCFG_SCREEN_RAW_PARAMS(80'000'000, GT_XRES, 0, GT_XRES, GT_YRES, 0, GT_YRES) + MCFG_SCREEN_RAW_PARAMS(GT_PIXCLOCK, GT_XPIXELS, 0, GT_XPIXELS, GT_YPIXELS, 0, GT_YPIXELS) MCFG_SCREEN_UPDATE_DEVICE("", mpcba79_device, screen_update0) MCFG_DEVICE_ADD("ramdac0", BT459, 0) MCFG_SCREEN_ADD("screen1", RASTER) - MCFG_SCREEN_RAW_PARAMS(80'000'000, GT_XRES, 0, GT_XRES, GT_YRES, 0, GT_YRES) + MCFG_SCREEN_RAW_PARAMS(GT_PIXCLOCK, GT_XPIXELS, 0, GT_XPIXELS, GT_YPIXELS, 0, GT_YPIXELS) MCFG_SCREEN_UPDATE_DEVICE("", mpcba79_device, screen_update1) MCFG_DEVICE_ADD("ramdac1", BT459, 0) MACHINE_CONFIG_END @@ -97,10 +97,10 @@ void mpcb963_device::device_start() gt_device_base::device_start(); // allocate double-buffered vram - m_screen[0].vram.reset(new u8[GT_VRAM * 2]); + m_screen[0].vram.reset(new u8[GT_VRAM_SIZE]); save_item(NAME(m_control)); - save_pointer(NAME(m_screen[0].vram.get()), GT_VRAM * 2); + save_pointer(NAME(m_screen[0].vram.get()), GT_VRAM_SIZE); } @@ -118,16 +118,16 @@ READ32_MEMBER(mpcb963_device::vram_r) const WRITE32_MEMBER(mpcb963_device::vram_w) { - gt_screen_t >_screen = m_screen[(offset >> 19) & 1]; + const gt_screen_t >_screen = m_screen[(offset >> 19) & 1]; ((u32 *)gt_screen.vram.get())[offset & 0x7ffff] = (((u32 *)gt_screen.vram.get())[offset & 0x7ffff] & ~mem_mask) | (data & mem_mask); } u32 mpcb963_device::screen_update0(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - gt_screen_t >_screen = m_screen[0]; + const gt_screen_t >_screen = m_screen[0]; - gt_screen.ramdac->screen_update(screen, bitmap, cliprect, >_screen.vram[gt_screen.primary ? 0x000000 : GT_VRAM]); + gt_screen.ramdac->screen_update(screen, bitmap, cliprect, >_screen.vram[gt_screen.primary ? 0x000000 : GT_BUFFER_SIZE]); return 0; } @@ -147,12 +147,12 @@ void mpcba79_device::device_start() { gt_device_base::device_start(); - m_screen[0].vram.reset(new u8[VRAM_SIZE]); - m_screen[1].vram.reset(new u8[VRAM_SIZE]); + m_screen[0].vram.reset(new u8[GT_VRAM_SIZE]); + m_screen[1].vram.reset(new u8[GT_VRAM_SIZE]); save_item(NAME(m_control)); - save_pointer(NAME(m_screen[0].vram.get()), VRAM_SIZE); - save_pointer(NAME(m_screen[1].vram.get()), VRAM_SIZE); + save_pointer(NAME(m_screen[0].vram.get()), GT_VRAM_SIZE); + save_pointer(NAME(m_screen[1].vram.get()), GT_VRAM_SIZE); } WRITE16_MEMBER(mpcba79_device::control_w) @@ -169,25 +169,25 @@ READ32_MEMBER(mpcba79_device::vram_r) const WRITE32_MEMBER(mpcba79_device::vram_w) { - gt_screen_t >_screen = m_screen[(offset >> 19) & 1]; + const gt_screen_t >_screen = m_screen[(offset >> 19) & 1]; ((u32 *)gt_screen.vram.get())[offset & 0x7ffff] = (((u32 *)gt_screen.vram.get())[offset & 0x7ffff] & ~mem_mask) | (data & mem_mask); } u32 mpcba79_device::screen_update0(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - gt_screen_t >_screen = m_screen[0]; + const gt_screen_t >_screen = m_screen[0]; - gt_screen.ramdac->screen_update(screen, bitmap, cliprect, >_screen.vram[gt_screen.primary ? 0x000000 : GT_VRAM]); + gt_screen.ramdac->screen_update(screen, bitmap, cliprect, >_screen.vram[gt_screen.primary ? 0x000000 : GT_BUFFER_SIZE]); return 0; } u32 mpcba79_device::screen_update1(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - gt_screen_t >_screen = m_screen[1]; + const gt_screen_t >_screen = m_screen[1]; - gt_screen.ramdac->screen_update(screen, bitmap, cliprect, >_screen.vram[gt_screen.primary ? 0x000000 : GT_VRAM]); + gt_screen.ramdac->screen_update(screen, bitmap, cliprect, >_screen.vram[gt_screen.primary ? 0x000000 : GT_BUFFER_SIZE]); return 0; } diff --git a/src/devices/bus/interpro/sr/gt.h b/src/devices/bus/interpro/sr/gt.h index a151657f79f..c572772ccda 100644 --- a/src/devices/bus/interpro/sr/gt.h +++ b/src/devices/bus/interpro/sr/gt.h @@ -14,9 +14,11 @@ protected: gt_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); public: - const int GT_XRES = 1184; - const int GT_YRES = 884; - const int GT_VRAM = 0x100000; // 1 megabyte + static const u32 GT_PIXCLOCK = 80'000'000; // just a guess + static const int GT_XPIXELS = 1184; + static const int GT_YPIXELS = 884; + static const int GT_BUFFER_SIZE = 0x100000; // 1 megabyte + static const int GT_VRAM_SIZE = 0x200000; // 1 megabyte double buffered enum control_mask { @@ -24,6 +26,12 @@ public: CONTROL_BUSY = 0x8000 }; + virtual DECLARE_READ16_MEMBER(control_r) const = 0; + virtual DECLARE_WRITE16_MEMBER(control_w) = 0; + virtual DECLARE_READ32_MEMBER(vram_r) const = 0; + virtual DECLARE_WRITE32_MEMBER(vram_w) = 0; + +protected: typedef struct { required_device ramdac; @@ -31,12 +39,6 @@ public: bool primary; } gt_screen_t; - - virtual DECLARE_READ16_MEMBER(control_r) const = 0; - virtual DECLARE_WRITE16_MEMBER(control_w) = 0; - - virtual DECLARE_READ32_MEMBER(vram_r) const = 0; - virtual DECLARE_WRITE32_MEMBER(vram_w) = 0; }; class mpcb963_device : public gt_device_base @@ -44,25 +46,26 @@ class mpcb963_device : public gt_device_base public: mpcb963_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + static const int GT_SCREEN_COUNT = 1; + virtual DECLARE_ADDRESS_MAP(map, 32) override; virtual DECLARE_READ16_MEMBER(control_r) const override { return m_control; } virtual DECLARE_WRITE16_MEMBER(control_w) override; - virtual DECLARE_READ32_MEMBER(vram_r) const override; virtual DECLARE_WRITE32_MEMBER(vram_w) override; - u32 screen_update0(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - protected: virtual const tiny_rom_entry *device_rom_region() const override; virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; + u32 screen_update0(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + private: u16 m_control; - gt_screen_t m_screen[1]; + gt_screen_t m_screen[GT_SCREEN_COUNT]; }; class mpcba79_device : public gt_device_base @@ -70,25 +73,26 @@ class mpcba79_device : public gt_device_base public: mpcba79_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + static const int GT_SCREEN_COUNT = 2; + virtual DECLARE_ADDRESS_MAP(map, 32) override; virtual DECLARE_READ16_MEMBER(control_r) const override { return m_control; } virtual DECLARE_WRITE16_MEMBER(control_w) override; - virtual DECLARE_READ32_MEMBER(vram_r) const override; virtual DECLARE_WRITE32_MEMBER(vram_w) override; - u32 screen_update0(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - u32 screen_update1(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - protected: virtual const tiny_rom_entry *device_rom_region() const override; virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; + u32 screen_update0(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + u32 screen_update1(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + private: u16 m_control; - gt_screen_t m_screen[2]; + gt_screen_t m_screen[GT_SCREEN_COUNT]; }; // device type definition -- cgit v1.2.3 From 77caf9588810f5890395b2f80cee7be6097d0420 Mon Sep 17 00:00:00 2001 From: Joakim Larsson Edstrom Date: Mon, 23 Oct 2017 23:03:45 +0200 Subject: prodigy: updated keypad logic to use ioport_array --- src/mame/drivers/prodigy.cpp | 74 ++++++++++---------------------------------- 1 file changed, 16 insertions(+), 58 deletions(-) diff --git a/src/mame/drivers/prodigy.cpp b/src/mame/drivers/prodigy.cpp index 2681e0cf71d..1b0c2e46808 100644 --- a/src/mame/drivers/prodigy.cpp +++ b/src/mame/drivers/prodigy.cpp @@ -105,7 +105,6 @@ #endif #define NETLIST_TAG "bcd" -#define HTTPUI 0 class prodigy_state : public driver_device { @@ -120,16 +119,7 @@ public: , m_cb1(*this, "bcd:cb1") , m_cb2(*this, "bcd:cb2") , m_digit(0.0) - , m_io_line0(*this, "LINE0") - , m_io_line1(*this, "LINE1") - , m_io_line2(*this, "LINE2") - , m_io_line3(*this, "LINE3") - , m_io_line4(*this, "LINE4") - , m_line0(0) - , m_line1(0) - , m_line2(0) - , m_line3(0) - , m_line4(0) + , m_io_line(*this, "LINE%u", 0) { } NETDEV_LOGIC_CALLBACK_MEMBER(bcd_bit0_cb); @@ -160,21 +150,9 @@ private: uint8_t m_digit; void update_bcd(); -#if HTTPUI virtual void device_start() override; - http_manager *m_server; - void on_update(http_manager::http_request_ptr request, http_manager::http_response_ptr response); -#endif - required_ioport m_io_line0; - required_ioport m_io_line1; - required_ioport m_io_line2; - required_ioport m_io_line3; - required_ioport m_io_line4; - uint16_t m_line0; - uint16_t m_line1; - uint16_t m_line2; - uint16_t m_line3; - uint16_t m_line4; + required_ioport_array<5> m_io_line; + uint16_t m_line[5]; }; NETDEV_LOGIC_CALLBACK_MEMBER(prodigy_state::bcd_bit0_cb) { if (data != 0) m_digit |= 0x01; else m_digit &= ~(0x01); LOGBCD("%s: %d m_digit: %02x\n", FUNCNAME, data, m_digit); } @@ -186,33 +164,10 @@ NETDEV_LOGIC_CALLBACK_MEMBER(prodigy_state::bcd_bit5_cb) { if (data != 0) m_digi NETDEV_LOGIC_CALLBACK_MEMBER(prodigy_state::bcd_bit6_cb) { if (data != 0) m_digit |= 0x40; else m_digit &= ~(0x40); LOGBCD("%s: %d m_digit: %02x\n", FUNCNAME, data, m_digit); } NETDEV_LOGIC_CALLBACK_MEMBER(prodigy_state::bcd_bit7_cb) { if (data != 0) m_digit |= 0x80; else m_digit &= ~(0x80); LOGBCD("%s: %d m_digit: %02x\n", FUNCNAME, data, m_digit); } -#if HTTPUI -// WIP -void prodigy_state::on_update(http_manager::http_request_ptr request, http_manager::http_response_ptr response) -{ - printf("%s\n", FUNCNAME); - #if 1 - printf("Full request: %s\n", request->get_resource().c_str()); - printf("Path: %s\n", request->get_path().c_str()); - printf("Query: %s\n", request->get_query().c_str()); - // printf("Fragment: %s\n", request->get_fragment().c_str()); - for (auto const& i : request->get_headers("*")) { - std::cout << i; - } - #endif - response->set_status(200); - response->set_content_type("text/plain"); - response->set_body("Hello World\n"); - // m_server->serve_document(request, response, filename); -} - void prodigy_state::device_start() { - using namespace std::placeholders; - m_server = machine().manager().http(); - m_server->add_http_handler("/prodigy*", std::bind(&prodigy_state::on_update, this, _1, _2)); + memset(m_line, 0, sizeof(m_line)); } -#endif WRITE_LINE_MEMBER(prodigy_state::via_cb1_w) { @@ -246,8 +201,9 @@ READ8_MEMBER( prodigy_state::via_pa_r ) uint16_t ttl74145_data = m_74145->read(); LOGKBD(" - 74145: %03x\n", ttl74145_data); - if (ttl74145_data & 0x100) return (m_line0 | m_line1); - if (ttl74145_data & 0x200) return (m_line4 | m_line3); + if (ttl74145_data & 0x100) return (m_line[0] | m_line[1]); + if (ttl74145_data & 0x200) return (m_line[4] | m_line[3]); + return 0xff; } @@ -255,9 +211,9 @@ READ8_MEMBER( prodigy_state::via_pb_r ) { LOGKBD("%s: Port B <- %02x\n", FUNCNAME, 0); uint16_t ttl74145_data = m_74145->read(); + if (ttl74145_data & 0x100) return (((m_line[2] >> 8) & 3) << 4); + if (ttl74145_data & 0x200) return (((m_line[2] >> 10) & 3) << 4); - if (ttl74145_data & 0x100) return (((m_line2 >> 8) & 3) << 4); - if (ttl74145_data & 0x200) return (((m_line2 >> 10) & 3) << 4); return 0xff; } @@ -276,11 +232,13 @@ WRITE8_MEMBER( prodigy_state::via_pb_w ) m_74145->write( data & 0x0f ); // Read the artwork - m_line0 = m_io_line0->read(); LOGAW("-LINE0: %02x\n", m_line0); - m_line1 = m_io_line1->read(); LOGAW("-LINE1: %02x\n", m_line1); - m_line2 = m_io_line2->read(); LOGAW("-LINE2: %02x\n", m_line2); - m_line3 = m_io_line3->read(); LOGAW("-LINE3: %02x\n", m_line3); - m_line4 = m_io_line4->read(); LOGAW("-LINE4: %02x\n", m_line4); + int i = 0; + for (auto & elem : m_io_line) + { + m_line[i] = elem->read(); + LOGAW("-LINE%u: %02x\n", i, m_line[i]); + i++; + } } void prodigy_state::update_bcd() -- cgit v1.2.3 From dbe533062b922ae748f027ca88763e4f0f9972f4 Mon Sep 17 00:00:00 2001 From: MetalliC <0vetal0@gmail.com> Date: Mon, 23 Oct 2017 16:44:06 +0300 Subject: update Russian translation [Nikita Zimin, MetalliC] --- language/Russian/strings.po | 606 ++++++++++++++++++++------------------------ 1 file changed, 274 insertions(+), 332 deletions(-) diff --git a/language/Russian/strings.po b/language/Russian/strings.po index 18ab8311ca3..7741a5afa36 100644 --- a/language/Russian/strings.po +++ b/language/Russian/strings.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: MAME\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-10-03 10:32+1100\n" -"PO-Revision-Date: 2017-08-26 04:43+0300\n" +"PO-Revision-Date: 2017-10-23 16:22+0300\n" "Last-Translator: Automatically generated\n" "Language-Team: MAME Language Team\n" "Language: ru\n" @@ -137,7 +137,7 @@ msgstr "" #: src/frontend/mame/ui/info.cpp:195 msgid "" "One or more ROMs/CHDs for this machine have not been correctly dumped.\n" -msgstr "Один или несколько ROM/CHD этой системы не были нормально сдамплены.\n" +msgstr "Один или несколько ROMов/CHD этой системы не были нормально сдамплены.\n" #: src/frontend/mame/ui/info.cpp:200 msgid "Completely unemulated features: " @@ -190,8 +190,9 @@ msgid "" "the developers to improve the emulation.\n" msgstr "" "\n" -"ЭТА СИСТЕМА НЕ РАБОТАЕТ. Эмуляция этой системы не завершена. Вы никак не " -"сможете исправить проблемы, лишь ждать когда разработчики улучшат эмуляцию.\n" +"ЭТА СИСТЕМА НЕ РАБОТАЕТ. Эмуляция этой системы пока не " +"завершена. Вы никак не можете исправить эту проблему, лишь подождать когда " +"разработчики улучшат эмуляцию.\n" #: src/frontend/mame/ui/info.cpp:243 msgid "" @@ -200,6 +201,10 @@ msgid "" "interaction or consist of mechanical devices. It is not possible to fully " "experience this machine.\n" msgstr "" +"\n" +"Элементы этой системы не могут быть эмулированы, поскольку они требуют физического " +"взаимодействия или состоят из механических устройств. Невозможно полностью " +"ощутить опыт взаимодействия с этой системой.\n" #: src/frontend/mame/ui/info.cpp:265 #, c-format @@ -210,7 +215,7 @@ msgid "" msgstr "" "\n" "\n" -"Известные работающие клоны этой системы: %s" +"Известные работающие clones этой системы: %s" #: src/frontend/mame/ui/info.cpp:278 msgid "" @@ -267,7 +272,7 @@ msgstr "Нет\n" #: src/frontend/mame/ui/info.cpp:381 msgid "Vector" -msgstr "" +msgstr "Векторный" #: src/frontend/mame/ui/info.cpp:392 #, c-format @@ -423,7 +428,7 @@ msgstr "Линии" #: src/frontend/mame/ui/custui.cpp:348 msgid "Infos text size" -msgstr "" +msgstr "Размер инфо-текста" #: src/frontend/mame/ui/custui.cpp:362 msgid "UI Fonts Settings" @@ -431,7 +436,7 @@ msgstr "Настройки шрифта интерфейса" #: src/frontend/mame/ui/custui.cpp:371 msgid "Sample text - Lorem ipsum dolor sit amet, consectetur adipiscing elit." -msgstr "" +msgstr "Пример текста - Съешь же ещё этих французских булок, да выпей чаю." #: src/frontend/mame/ui/custui.cpp:451 msgid "Normal text" @@ -451,15 +456,15 @@ msgstr "Выделенный цвет задника" #: src/frontend/mame/ui/custui.cpp:455 msgid "Subitem color" -msgstr "" +msgstr "Цвет подпункта" #: src/frontend/mame/ui/custui.cpp:456 src/frontend/mame/ui/custui.cpp:511 msgid "Clone" -msgstr "Клон" +msgstr "" #: src/frontend/mame/ui/custui.cpp:457 msgid "Border" -msgstr "" +msgstr "Бордюр" #: src/frontend/mame/ui/custui.cpp:458 msgid "Background" @@ -471,31 +476,31 @@ msgstr "DIP-переключатель" #: src/frontend/mame/ui/custui.cpp:460 msgid "Unavailable color" -msgstr "" +msgstr "Недоступный цвет" #: src/frontend/mame/ui/custui.cpp:461 msgid "Slider color" -msgstr "" +msgstr "Цвет слайдера" #: src/frontend/mame/ui/custui.cpp:462 msgid "Gfx viewer background" -msgstr "" +msgstr "Фон просмотрщика графики" #: src/frontend/mame/ui/custui.cpp:463 msgid "Mouse over color" -msgstr "" +msgstr "Цвет под мышью" #: src/frontend/mame/ui/custui.cpp:464 msgid "Mouse over background color" -msgstr "" +msgstr "Цвет фона под мышью" #: src/frontend/mame/ui/custui.cpp:465 msgid "Mouse down color" -msgstr "" +msgstr "Цвет мышь нажата" #: src/frontend/mame/ui/custui.cpp:466 msgid "Mouse down background color" -msgstr "" +msgstr "Цвет фона мышь нажата" #: src/frontend/mame/ui/custui.cpp:469 msgid "Restore originals colors" @@ -683,7 +688,7 @@ msgstr "Избранное" #: src/frontend/mame/ui/utils.cpp:66 src/frontend/mame/ui/miscmenu.cpp:759 msgid "BIOS" -msgstr "" +msgstr "BIOS" #: src/frontend/mame/ui/utils.cpp:67 msgid "Not BIOS" @@ -763,7 +768,7 @@ msgstr "Список ПО" #: src/frontend/mame/ui/utils.cpp:244 msgid "" -msgstr "" +msgstr "<настроить фильтры>" #: src/frontend/mame/ui/utils.cpp:352 msgid "Select custom filters:" @@ -788,15 +793,15 @@ msgstr "Выберите категорию:" #: src/frontend/mame/ui/utils.cpp:990 msgid "[no category INI files]" -msgstr "" +msgstr "[INI-файлы без категорий]" #: src/frontend/mame/ui/utils.cpp:998 msgid "[no groups in INI file]" -msgstr "" +msgstr "[нет групп в INI-файле]" #: src/frontend/mame/ui/utils.cpp:1032 msgid "No category INI files found" -msgstr "" +msgstr "Не найдены INI-файлы категорий" #: src/frontend/mame/ui/utils.cpp:1037 msgid "File" @@ -804,7 +809,7 @@ msgstr "Файл" #: src/frontend/mame/ui/utils.cpp:1041 msgid "No groups found in category file" -msgstr "" +msgstr "Не найдены группы в файле категорий" #: src/frontend/mame/ui/utils.cpp:1046 msgid "Group" @@ -812,7 +817,7 @@ msgstr "Группа" #: src/frontend/mame/ui/utils.cpp:1047 msgid "Include clones" -msgstr "" +msgstr "Включить clones" #: src/frontend/mame/ui/utils.cpp:1047 src/frontend/mame/ui/filecreate.cpp:82 msgid "Yes" @@ -829,6 +834,10 @@ msgid "" "\n" "Press any key to continue." msgstr "" +"Для выбранной игры отсутствует один или более необходимых образов ROM или CHD. Пожалуйста, " +"выберите другую игру.\n" +"\n" +"Нажмите любую клавишу для продолжения." #: src/frontend/mame/ui/simpleselgame.cpp:241 #, c-format @@ -838,6 +847,10 @@ msgid "" "If this is your first time using %2$s, please see the config.txt file in the " "docs directory for information on configuring %2$s." msgstr "" +"Не найдено систем. Пожалуйста, проверьте rompath указанный в файле %1$s.ini.\n" +"\n" +"Если вы в первый раз используете %2$s, пожалуйста, посмотрите файл config.txt в " +"директории docs, чтобы получить информацию о настройке %2$s." #: src/frontend/mame/ui/simpleselgame.cpp:271 #: src/frontend/mame/ui/selgame.cpp:440 @@ -847,11 +860,11 @@ msgstr "Изменение настроек" #: src/frontend/mame/ui/simpleselgame.cpp:292 #, c-format msgid "Type name or select: %1$s_" -msgstr "" +msgstr "Введите имя или выберите: %1$s_" #: src/frontend/mame/ui/simpleselgame.cpp:294 msgid "Type name or select: (random)" -msgstr "" +msgstr "Введите имя или выберите: (случайно)" #: src/frontend/mame/ui/simpleselgame.cpp:308 #: src/frontend/mame/ui/selsoft.cpp:564 src/frontend/mame/ui/selsoft.cpp:571 @@ -868,7 +881,7 @@ msgstr "" #: src/frontend/mame/ui/simpleselgame.cpp:314 #, c-format msgid "Driver: %1$-.100s" -msgstr "" +msgstr "Драйвер: %1$-.100s" #: src/frontend/mame/ui/simpleselgame.cpp:330 #: src/frontend/mame/ui/selmenu.cpp:619 @@ -946,16 +959,16 @@ msgstr "Авто" #: src/frontend/mame/ui/swlist.cpp:88 msgid "[file manager]" -msgstr "" +msgstr "[менеджер файлов]" #: src/frontend/mame/ui/swlist.cpp:228 msgid "Switch Item Ordering" -msgstr "" +msgstr "Сменить порядок элементов" #: src/frontend/mame/ui/swlist.cpp:259 #, c-format msgid "Switched Order: entries now ordered by %s" -msgstr "" +msgstr "Изменен порядок: записи теперь упорядочены по %s" #: src/frontend/mame/ui/swlist.cpp:259 msgid "shortname" @@ -967,7 +980,7 @@ msgstr "описание" #: src/frontend/mame/ui/swlist.cpp:389 msgid "[compatible lists]" -msgstr "" +msgstr "[совместимые списки]" #: src/frontend/mame/ui/videoopt.cpp:56 #, c-format @@ -980,24 +993,24 @@ msgstr "Поворот" #: src/frontend/mame/ui/videoopt.cpp:208 msgid "Backdrops" -msgstr "Задние фоны" +msgstr "Задники" #: src/frontend/mame/ui/videoopt.cpp:212 msgid "Overlays" -msgstr "" +msgstr "Оверлеи" #: src/frontend/mame/ui/videoopt.cpp:216 msgid "Bezels" -msgstr "" +msgstr "Обрамления" #: src/frontend/mame/ui/videoopt.cpp:220 msgid "CPanels" -msgstr "" +msgstr "Панели" #: src/frontend/mame/ui/videoopt.cpp:224 src/frontend/mame/ui/dirmenu.cpp:51 #: src/frontend/mame/ui/selmenu.cpp:64 msgid "Marquees" -msgstr "" +msgstr "Маркизы" #: src/frontend/mame/ui/videoopt.cpp:228 msgid "View" @@ -1086,7 +1099,7 @@ msgstr "Плагины" #: src/frontend/mame/ui/selgame.cpp:853 #, c-format msgid "Romset\t%1$-.100s\n" -msgstr "" +msgstr "ROM-набор\t%1$-.100s\n" #: src/frontend/mame/ui/selgame.cpp:854 #, c-format @@ -1101,11 +1114,11 @@ msgstr "Производитель\t%1$-.100s\n" #: src/frontend/mame/ui/selgame.cpp:859 #, c-format msgid "Driver is Clone of\t%1$-.100s\n" -msgstr "" +msgstr "Драйвер - Clone от\t%1$-.100s\n" #: src/frontend/mame/ui/selgame.cpp:861 msgid "Driver is Parent\t\n" -msgstr "" +msgstr "Драйвер - Parent\t\n" #: src/frontend/mame/ui/selgame.cpp:864 msgid "Analog Controls\tYes\n" @@ -1245,93 +1258,95 @@ msgstr "Скорость\tНе идеально\n" #: src/frontend/mame/ui/selgame.cpp:945 msgid "Mechanical Machine\tYes\n" -msgstr "" +msgstr "Механическая система\tДа\n" #: src/frontend/mame/ui/selgame.cpp:945 msgid "Mechanical Machine\tNo\n" -msgstr "" +msgstr "Механическая система\tНет\n" #: src/frontend/mame/ui/selgame.cpp:946 msgid "Requires Artwork\tYes\n" -msgstr "" +msgstr "Требует элементы оформления\tДа\n" #: src/frontend/mame/ui/selgame.cpp:946 msgid "Requires Artwork\tNo\n" -msgstr "" +msgstr "Требует элементы оформления\tНет\n" #: src/frontend/mame/ui/selgame.cpp:947 msgid "Requires Clickable Artwork\tYes\n" -msgstr "" +msgstr "Требует кликабельное оформление\tДа\n" #: src/frontend/mame/ui/selgame.cpp:947 msgid "Requires Clickable Artwork\tNo\n" -msgstr "" +msgstr "Требует кликабельное оформление\tНет\n" #: src/frontend/mame/ui/selgame.cpp:948 msgid "Support Cocktail\tYes\n" -msgstr "" +msgstr "Поддерживает режим коктейль-стола\tДа\n" #: src/frontend/mame/ui/selgame.cpp:948 msgid "Support Cocktail\tNo\n" -msgstr "" +msgstr "Поддерживает режим коктейль-стола\tНет\n" #: src/frontend/mame/ui/selgame.cpp:949 msgid "Driver is BIOS\tYes\n" -msgstr "" +msgstr "Драйвер - BIOS\tДа\n" #: src/frontend/mame/ui/selgame.cpp:949 msgid "Driver is BIOS\tNo\n" -msgstr "" +msgstr "Драйвер - BIOS\tНет\n" #: src/frontend/mame/ui/selgame.cpp:950 msgid "Support Save\tYes\n" -msgstr "" +msgstr "Поддерживает сохранение\tДа\n" #: src/frontend/mame/ui/selgame.cpp:950 msgid "Support Save\tNo\n" -msgstr "" +msgstr "Поддерживает сохранение\tНет\n" #: src/frontend/mame/ui/selgame.cpp:951 msgid "Screen Orientation\tVertical\n" -msgstr "" +msgstr "Ориентация экрана\tВертикальная\n" #: src/frontend/mame/ui/selgame.cpp:951 msgid "Screen Orientation\tHorizontal\n" -msgstr "" +msgstr "Ориентация экрана\tГоризонтальная\n" #: src/frontend/mame/ui/selgame.cpp:961 msgid "Requires CHD\tYes\n" -msgstr "" +msgstr "Требует CHD\tДа\n" #: src/frontend/mame/ui/selgame.cpp:961 msgid "Requires CHD\tNo\n" -msgstr "" +msgstr "Требует CHD\tНет\n" #: src/frontend/mame/ui/selgame.cpp:974 msgid "ROM Audit Result\tOK\n" -msgstr "" +msgstr "Результат проверки ROM\tOK\n" #: src/frontend/mame/ui/selgame.cpp:976 msgid "ROM Audit Result\tBAD\n" -msgstr "" +msgstr "Результат проверки ROM\tНЕУДАЧНО\n" #: src/frontend/mame/ui/selgame.cpp:979 msgid "Samples Audit Result\tNone Needed\n" -msgstr "" +msgstr "Результат проверки сэмплов\tНе требуется\n" #: src/frontend/mame/ui/selgame.cpp:981 msgid "Samples Audit Result\tOK\n" -msgstr "" +msgstr "Результат проверки сэмплов\tOK\n" #: src/frontend/mame/ui/selgame.cpp:983 msgid "Samples Audit Result\tBAD\n" -msgstr "" +msgstr "Результат проверки сэмплов\tНЕУДАЧНО\n" #: src/frontend/mame/ui/selgame.cpp:987 msgid "" "ROM Audit Disabled\t\n" "Samples Audit Disabled\t\n" msgstr "" +"Проверка ROM отключена\t\n" +"Проверка сэмплов отключена\t\n" #: src/frontend/mame/ui/selgame.cpp:1171 #, c-format @@ -1351,12 +1366,12 @@ msgstr "Поиск: %1$s_" #: src/frontend/mame/ui/selgame.cpp:1199 #, c-format msgid "Romset: %1$-.100s" -msgstr "" +msgstr "ROM-набор: %1$-.100s" #: src/frontend/mame/ui/selgame.cpp:1206 #, c-format msgid "System: %1$-.100s" -msgstr "" +msgstr "Система: %1$-.100s" #: src/frontend/mame/ui/selgame.cpp:1243 msgid "" @@ -1364,6 +1379,9 @@ msgid "" "Please select a different machine.\n" "\n" msgstr "" +"Для выбранной машины отсутствует один или более необходимых образов ROM или CHD. " +"Пожалуйста, выберите другую машину.\n" +"\n" #: src/frontend/mame/ui/selgame.cpp:1249 src/frontend/mame/ui/selsoft.cpp:462 msgid "Press any key to continue." @@ -1375,7 +1393,7 @@ msgstr "ROMы" #: src/frontend/mame/ui/dirmenu.cpp:36 msgid "Software Media" -msgstr "" +msgstr "Носители Информации" #: src/frontend/mame/ui/dirmenu.cpp:37 msgid "UI" @@ -1383,7 +1401,7 @@ msgstr "Интерфейс" #: src/frontend/mame/ui/dirmenu.cpp:39 msgid "Samples" -msgstr "Инструменты" +msgstr "Сэмплы" #: src/frontend/mame/ui/dirmenu.cpp:40 msgid "DATs" @@ -1395,7 +1413,7 @@ msgstr "INI-файлы" #: src/frontend/mame/ui/dirmenu.cpp:42 msgid "Category INIs" -msgstr "" +msgstr "INI категорий" #: src/frontend/mame/ui/dirmenu.cpp:43 msgid "Icons" @@ -1407,7 +1425,7 @@ msgstr "Читы" #: src/frontend/mame/ui/dirmenu.cpp:45 src/frontend/mame/ui/selmenu.cpp:49 msgid "Snapshots" -msgstr "Скриншоты" +msgstr "Снимки экрана" #: src/frontend/mame/ui/dirmenu.cpp:46 src/frontend/mame/ui/selmenu.cpp:50 msgid "Cabinets" @@ -1471,7 +1489,7 @@ msgstr "Таблицы рекордов" #: src/frontend/mame/ui/dirmenu.cpp:62 src/frontend/mame/ui/selmenu.cpp:59 msgid "Versus" -msgstr "" +msgstr "Против" #: src/frontend/mame/ui/dirmenu.cpp:63 src/frontend/mame/ui/selmenu.cpp:65 msgid "Covers" @@ -1535,6 +1553,8 @@ msgid "" "Uptime: %1$d:%2$02d:%3$02d\n" "\n" msgstr "" +"Время работы: %1$d:%2$02d:%3$02d\n" +"\n" #: src/frontend/mame/ui/miscmenu.cpp:238 #, c-format @@ -1542,6 +1562,8 @@ msgid "" "Uptime: %1$d:%2$02d\n" "\n" msgstr "" +"Время работы: %1$d:%2$02d\n" +"\n" #: src/frontend/mame/ui/miscmenu.cpp:242 #, c-format @@ -1549,15 +1571,17 @@ msgid "" "Tickets dispensed: %1$d\n" "\n" msgstr "" +"Выдано билетов: %1$d\n" +"\n" #: src/frontend/mame/ui/miscmenu.cpp:253 msgid "Coin %1$c: NA%3$s\n" -msgstr "" +msgstr "Монетопримник %1$c: НД%3$s\n" #: src/frontend/mame/ui/miscmenu.cpp:253 #, c-format msgid "Coin %1$c: %2$d%3$s\n" -msgstr "" +msgstr "Монетопримник %1$c: %2$d%3$s\n" #: src/frontend/mame/ui/miscmenu.cpp:256 msgid " (locked)" @@ -1565,7 +1589,7 @@ msgstr " (закрыт)" #: src/frontend/mame/ui/miscmenu.cpp:503 msgid "Visible Delay" -msgstr "Видимый экран" +msgstr "Видимая задержка" #: src/frontend/mame/ui/miscmenu.cpp:601 #, c-format @@ -1583,15 +1607,15 @@ msgstr "%s.txt сохранен в папку ui." #: src/frontend/mame/ui/miscmenu.cpp:655 msgid "Export list in XML format (like -listxml)" -msgstr "" +msgstr "Экспортировать список в формате XML (как -listxml)" #: src/frontend/mame/ui/miscmenu.cpp:656 msgid "Export list in XML format (like -listxml, but exclude devices)" -msgstr "" +msgstr "Экспортировать список в формате XML (как -listxml, но исключить устройства)" #: src/frontend/mame/ui/miscmenu.cpp:657 msgid "Export list in TXT format (like -listfull)" -msgstr "" +msgstr "Экспортировать список в текстовом формате (как -listfull)" #: src/frontend/mame/ui/miscmenu.cpp:709 src/frontend/mame/ui/ui.cpp:2217 msgid "" @@ -1625,7 +1649,7 @@ msgstr "Сохранить настройки этой системы" #: src/frontend/mame/ui/miscmenu.cpp:791 msgid "Configure machine:" -msgstr "" +msgstr "Настроить систему:" #: src/frontend/mame/ui/miscmenu.cpp:825 src/frontend/mame/ui/selmenu.cpp:2386 msgid " (default)" @@ -1633,13 +1657,15 @@ msgstr " (по-умолчанию)" #: src/frontend/mame/ui/imgcntrl.cpp:116 msgid "Cannot save over directory" -msgstr "" +msgstr "Не удалось сохранить поверх директории" #: src/frontend/mame/ui/imgcntrl.cpp:149 msgid "" "The software selected is missing one or more required ROM or CHD images. " "Please select a different one." msgstr "" +"Для выбранной программы отсутствует один или несколько необходимых образов ROM или CHD. " +"Пожалуйста, выберите другую." #: src/frontend/mame/ui/info_pty.cpp:30 src/frontend/mame/ui/mainmenu.cpp:99 msgid "Pseudo terminals" @@ -1711,7 +1737,7 @@ msgstr "Режим клавиатуры" #: src/frontend/mame/ui/mainmenu.cpp:121 msgid "Slider Controls" -msgstr "" +msgstr "Управление слайдерами" #: src/frontend/mame/ui/mainmenu.cpp:124 src/frontend/mame/ui/submenu.cpp:99 msgid "Video Options" @@ -1747,7 +1773,7 @@ msgstr "Частота звука" #: src/frontend/mame/ui/sndmenu.cpp:137 msgid "Use External Samples" -msgstr "Использовать внешние звуки" +msgstr "Использовать внешние сэмплы" #: src/frontend/mame/ui/sndmenu.cpp:149 src/frontend/mame/ui/optsmenu.cpp:210 msgid "Sound Options" @@ -1759,22 +1785,22 @@ msgstr " ЦВЕТА" #: src/frontend/mame/ui/viewgfx.cpp:406 msgid " PENS" -msgstr "" +msgstr " ПЕРЬЯ" #: src/frontend/mame/ui/auditmenu.cpp:96 #, c-format msgid "Audit ROMs for %1$u machines marked unavailable?" -msgstr "" +msgstr "Проверить ROMы для %1$u систем, помеченных как недоступные?" #: src/frontend/mame/ui/auditmenu.cpp:99 #, c-format msgid "Audit ROMs for all %1$u machines?" -msgstr "" +msgstr "Проверить ROMы для всех %1$u систем?" #: src/frontend/mame/ui/auditmenu.cpp:104 #, c-format msgid "(results will be saved to %1$s)" -msgstr "" +msgstr "(результаты будут сохранены в %1$s)" #: src/frontend/mame/ui/auditmenu.cpp:130 #, c-format @@ -1782,10 +1808,12 @@ msgid "" "Auditing ROMs for machine %2$u of %3$u...\n" "%1$s" msgstr "" +"Проверяем ROMы для системы %2$u из %3$u..." +"%1$s" #: src/frontend/mame/ui/auditmenu.cpp:142 msgid "Start Audit" -msgstr "" +msgstr "Начать проверку" #: src/frontend/mame/ui/datmenu.cpp:80 msgid "Software Usage" @@ -1817,11 +1845,11 @@ msgstr "Экспорт отображаемого списка в файл" #: src/frontend/mame/ui/selmenu.cpp:71 msgid "Show DATs view" -msgstr "" +msgstr "Показать вид DAT" #: src/frontend/mame/ui/selmenu.cpp:237 msgid "Software part selection:" -msgstr "" +msgstr "Выбор части программы:" #: src/frontend/mame/ui/selmenu.cpp:343 msgid "BIOS selection:" @@ -1830,11 +1858,11 @@ msgstr "Выбор BIOS:" #: src/frontend/mame/ui/selmenu.cpp:574 #, c-format msgid "Software is clone of: %1$-.100s" -msgstr "" +msgstr "Программа - clone от: %1$-.100s" #: src/frontend/mame/ui/selmenu.cpp:576 msgid "Software is parent" -msgstr "" +msgstr "Программа - parent" #: src/frontend/mame/ui/selmenu.cpp:581 msgid "Supported: No" @@ -1851,16 +1879,16 @@ msgstr "Поддерживается: Да" #: src/frontend/mame/ui/selmenu.cpp:596 #, c-format msgid "romset: %1$-.100s" -msgstr "" +msgstr "ROM-набор: %1$-.100s" #: src/frontend/mame/ui/selmenu.cpp:612 #, c-format msgid "Driver is clone of: %1$-.100s" -msgstr "" +msgstr "Драйвер - clone от: %1$-.100s" #: src/frontend/mame/ui/selmenu.cpp:614 msgid "Driver is parent" -msgstr "" +msgstr "Драйвер - parent" #: src/frontend/mame/ui/selmenu.cpp:650 #, c-format @@ -1901,7 +1929,7 @@ msgstr "Отображать указатель мыши" #: src/frontend/mame/ui/submenu.cpp:27 msgid "Confirm quit from machines" -msgstr "Подтверждать выход" +msgstr "Подтверждать выход из эмуляции" #: src/frontend/mame/ui/submenu.cpp:28 msgid "Skip information screen at startup" @@ -1909,7 +1937,7 @@ msgstr "Пропустить сведения о системе при запу #: src/frontend/mame/ui/submenu.cpp:29 msgid "Force 4:3 aspect for snapshot display" -msgstr "" +msgstr "Принудительно 4:3 при просмотре снимков экрана" #: src/frontend/mame/ui/submenu.cpp:30 msgid "Use image as background" @@ -1921,215 +1949,215 @@ msgstr "Пропускать меню выбора BIOS" #: src/frontend/mame/ui/submenu.cpp:32 msgid "Skip software parts selection menu" -msgstr "" +msgstr "Пропускать меню выбора частей ПО" #: src/frontend/mame/ui/submenu.cpp:33 msgid "Info auto audit" -msgstr "" +msgstr "Авто-проверка инфо" #: src/frontend/mame/ui/submenu.cpp:34 msgid "Hide romless machine from available list" -msgstr "" +msgstr "Скрывать из списка доступных системы без ROM" #: src/frontend/mame/ui/submenu.cpp:38 msgid "Advanced Options" -msgstr "" +msgstr "Дополнительные настройки" #: src/frontend/mame/ui/submenu.cpp:39 msgid "Performance Options" -msgstr "" +msgstr "Настройки производительности" #: src/frontend/mame/ui/submenu.cpp:40 msgid "Auto frame skip" -msgstr "" +msgstr "Авто-пропуск кадров" #: src/frontend/mame/ui/submenu.cpp:41 msgid "Frame skip" -msgstr "" +msgstr "Пропуск кадров" #: src/frontend/mame/ui/submenu.cpp:42 msgid "Throttle" -msgstr "" +msgstr "Троттлинг" #: src/frontend/mame/ui/submenu.cpp:43 msgid "Sleep" -msgstr "" +msgstr "Спать" #: src/frontend/mame/ui/submenu.cpp:44 msgid "Speed" -msgstr "" +msgstr "Скорость" #: src/frontend/mame/ui/submenu.cpp:45 msgid "Refresh speed" -msgstr "" +msgstr "Скорость обновления" #: src/frontend/mame/ui/submenu.cpp:47 msgid "Rotation Options" -msgstr "" +msgstr "Настройки поворота" #: src/frontend/mame/ui/submenu.cpp:49 msgid "Rotate right" -msgstr "" +msgstr "Поворот вправо" #: src/frontend/mame/ui/submenu.cpp:50 msgid "Rotate left" -msgstr "" +msgstr "Поворот влево" #: src/frontend/mame/ui/submenu.cpp:51 msgid "Auto rotate right" -msgstr "" +msgstr "Авто-поворот вправо" #: src/frontend/mame/ui/submenu.cpp:52 msgid "Auto rotate left" -msgstr "" +msgstr "Авто-поворот влево" #: src/frontend/mame/ui/submenu.cpp:53 msgid "Flip X" -msgstr "" +msgstr "Отражение по горизонтали" #: src/frontend/mame/ui/submenu.cpp:54 msgid "Flip Y" -msgstr "" +msgstr "Отражение по вертикали" #: src/frontend/mame/ui/submenu.cpp:56 msgid "Artwork Options" -msgstr "" +msgstr "Настройки оформления" #: src/frontend/mame/ui/submenu.cpp:57 msgid "Artwork Crop" -msgstr "" +msgstr "Обрезка оформления" #: src/frontend/mame/ui/submenu.cpp:58 msgid "Use Backdrops" -msgstr "" +msgstr "Использовать задники" #: src/frontend/mame/ui/submenu.cpp:59 msgid "Use Overlays" -msgstr "" +msgstr "Использовать оверлеи" #: src/frontend/mame/ui/submenu.cpp:60 msgid "Use Bezels" -msgstr "" +msgstr "Использовать обрамление" #: src/frontend/mame/ui/submenu.cpp:61 msgid "Use Control Panels" -msgstr "" +msgstr "Использовать панели" #: src/frontend/mame/ui/submenu.cpp:62 msgid "Use Marquees" -msgstr "" +msgstr "Использовать маркизы" #: src/frontend/mame/ui/submenu.cpp:64 msgid "State/Playback Options" -msgstr "" +msgstr "Настройки сохранения/воспроизведения" #: src/frontend/mame/ui/submenu.cpp:65 msgid "Automatic save/restore" -msgstr "" +msgstr "Автоматическое сохранение/загрузка" #: src/frontend/mame/ui/submenu.cpp:66 msgid "Bilinear snapshot" -msgstr "" +msgstr "Билинейная фильтрация снимков экрана" #: src/frontend/mame/ui/submenu.cpp:67 msgid "Burn-in" -msgstr "" +msgstr "Сгорание" #: src/frontend/mame/ui/submenu.cpp:69 msgid "Input Options" -msgstr "" +msgstr "Настройки ввода" #: src/frontend/mame/ui/submenu.cpp:70 msgid "Coin lockout" -msgstr "" +msgstr "Блокировка монетоприемника" #: src/frontend/mame/ui/submenu.cpp:71 msgid "Mouse" -msgstr "" +msgstr "Мышь" #: src/frontend/mame/ui/submenu.cpp:72 msgid "Joystick" -msgstr "" +msgstr "Джойстик" #: src/frontend/mame/ui/submenu.cpp:73 msgid "Lightgun" -msgstr "" +msgstr "Световой пистолет" #: src/frontend/mame/ui/submenu.cpp:74 msgid "Multi-keyboard" -msgstr "" +msgstr "Мульти-клавиатура" #: src/frontend/mame/ui/submenu.cpp:75 msgid "Multi-mouse" -msgstr "" +msgstr "Мульти-мышь" #: src/frontend/mame/ui/submenu.cpp:76 msgid "Steadykey" -msgstr "" +msgstr "Задержка нажатий" #: src/frontend/mame/ui/submenu.cpp:77 msgid "UI active" -msgstr "" +msgstr "Активный интерфейс пользователя" #: src/frontend/mame/ui/submenu.cpp:78 msgid "Offscreen reload" -msgstr "" +msgstr "Закадровая перезарядка" #: src/frontend/mame/ui/submenu.cpp:79 msgid "Joystick deadzone" -msgstr "" +msgstr "Мертвая зона джойстика" #: src/frontend/mame/ui/submenu.cpp:80 msgid "Joystick saturation" -msgstr "" +msgstr "Сатурация джойстика" #: src/frontend/mame/ui/submenu.cpp:81 msgid "Natural keyboard" -msgstr "" +msgstr "Обычная клавиатура" #: src/frontend/mame/ui/submenu.cpp:82 msgid "Simultaneous contradictory" -msgstr "" +msgstr "Одновременно противоположные направления" #: src/frontend/mame/ui/submenu.cpp:83 msgid "Coin impulse" -msgstr "" +msgstr "Время импульса монеты" #: src/frontend/mame/ui/submenu.cpp:87 msgid "Device Mapping" -msgstr "Устройства управленя" +msgstr "Устройства управления" #: src/frontend/mame/ui/submenu.cpp:88 msgid "Lightgun Device Assignment" -msgstr "" +msgstr "Назначение устройства светового пистолета" #: src/frontend/mame/ui/submenu.cpp:89 msgid "Trackball Device Assignment" -msgstr "" +msgstr "Назначение устройства трекбола" #: src/frontend/mame/ui/submenu.cpp:90 msgid "Pedal Device Assignment" -msgstr "" +msgstr "Назначение устройства педали" #: src/frontend/mame/ui/submenu.cpp:91 msgid "Adstick Device Assignment" -msgstr "" +msgstr "Назначение устройства AD-стика" #: src/frontend/mame/ui/submenu.cpp:92 msgid "Paddle Device Assignment" -msgstr "" +msgstr "Назначение устройства Paddle" #: src/frontend/mame/ui/submenu.cpp:93 msgid "Dial Device Assignment" -msgstr "" +msgstr "Назначение устройства Dial" #: src/frontend/mame/ui/submenu.cpp:94 msgid "Positional Device Assignment" -msgstr "" +msgstr "Назначение позиционного устройства" #: src/frontend/mame/ui/submenu.cpp:95 msgid "Mouse Device Assignment" -msgstr "" +msgstr "Назначение устройства мыши" #: src/frontend/mame/ui/submenu.cpp:100 msgid "Video Mode" @@ -2137,7 +2165,7 @@ msgstr "Видео режим" #: src/frontend/mame/ui/submenu.cpp:101 msgid "Number Of Screens" -msgstr "" +msgstr "Число экранов" #: src/frontend/mame/ui/submenu.cpp:103 msgid "Triple Buffering" @@ -2157,7 +2185,7 @@ msgstr "Билинейная фильтрация" #: src/frontend/mame/ui/submenu.cpp:108 msgid "Bitmap Prescaling" -msgstr "" +msgstr "Пре-масштабирование битмапов" #: src/frontend/mame/ui/submenu.cpp:109 msgid "Window Mode" @@ -2169,15 +2197,15 @@ msgstr "Сохранять пропорции" #: src/frontend/mame/ui/submenu.cpp:111 msgid "Start Out Maximized" -msgstr "" +msgstr "Открывать максимизированным" #: src/frontend/mame/ui/submenu.cpp:112 msgid "Synchronized Refresh" -msgstr "" +msgstr "Синхронизированное обновление" #: src/frontend/mame/ui/submenu.cpp:113 msgid "Wait Vertical Sync" -msgstr "" +msgstr "Ожидать вертикальную синхронизацию" #: src/frontend/mame/ui/selsoft.cpp:456 msgid "" @@ -2185,20 +2213,23 @@ msgid "" "different software.\n" "\n" msgstr "" +"Для выбранного ПО отсутствует один или несколько необходимых файлов. Пожалуйста, выберите " +"другую программу.\n" +"\n" #: src/frontend/mame/ui/selsoft.cpp:549 #, c-format msgid "%1$s %2$s ( %3$d / %4$d software packages )" -msgstr "" +msgstr "%1$s %2$s ( %3$d / %4$d пакетов программ )" #: src/frontend/mame/ui/selsoft.cpp:550 #, c-format msgid "Driver: \"%1$s\" software list " -msgstr "" +msgstr "Драйвер: \"%1$s\" списков программ " #: src/frontend/mame/ui/ui.cpp:337 msgid "This driver requires images to be loaded in the following device(s): " -msgstr "" +msgstr "Этот драйвер требует загрузки образов в следующие устройства: " #: src/frontend/mame/ui/ui.cpp:1084 src/frontend/mame/ui/ui.cpp:1094 msgid "Keyboard Emulation Status" @@ -2206,7 +2237,7 @@ msgstr "Состояние эмуляции клавиатуры" #: src/frontend/mame/ui/ui.cpp:1086 msgid "Mode: PARTIAL Emulation" -msgstr "Режим: Частичная эмуляция" +msgstr "Режим: ЧАСТИЧНАЯ эмуляция" #: src/frontend/mame/ui/ui.cpp:1087 msgid "UI: Enabled" @@ -2218,7 +2249,7 @@ msgstr "**Нажмите ScrLock для переключения**" #: src/frontend/mame/ui/ui.cpp:1096 msgid "Mode: FULL Emulation" -msgstr "Режим: Полная эмуляция" +msgstr "Режим: ПОЛНАЯ эмуляция" #: src/frontend/mame/ui/ui.cpp:1097 msgid "UI: Disabled" @@ -2258,7 +2289,7 @@ msgstr "Разгон процессора %1$s" #: src/frontend/mame/ui/ui.cpp:1407 #, c-format msgid "Overclock %1$s sound" -msgstr "" +msgstr "Разгон %1$s звука" #: src/frontend/mame/ui/ui.cpp:1428 #, c-format @@ -2283,42 +2314,42 @@ msgstr "%1$s Гамма" #: src/frontend/mame/ui/ui.cpp:1441 #, c-format msgid "%1$s Horiz Stretch" -msgstr "" +msgstr "%1$s гориз. размер" #: src/frontend/mame/ui/ui.cpp:1443 #, c-format msgid "%1$s Horiz Position" -msgstr "" +msgstr "%1$s гориз. позиция" #: src/frontend/mame/ui/ui.cpp:1445 #, c-format msgid "%1$s Vert Stretch" -msgstr "" +msgstr "%1$s верт. размер" #: src/frontend/mame/ui/ui.cpp:1447 #, c-format msgid "%1$s Vert Position" -msgstr "" +msgstr "%1$s верт. позиция" #: src/frontend/mame/ui/ui.cpp:1466 #, c-format msgid "Laserdisc '%1$s' Horiz Stretch" -msgstr "" +msgstr "Лазердиск '%1$s' гориз. размер" #: src/frontend/mame/ui/ui.cpp:1468 #, c-format msgid "Laserdisc '%1$s' Horiz Position" -msgstr "" +msgstr "Лазердиск '%1$s' гориз. позиция" #: src/frontend/mame/ui/ui.cpp:1470 #, c-format msgid "Laserdisc '%1$s' Vert Stretch" -msgstr "" +msgstr "Лазердиск '%1$s' верт. размер" #: src/frontend/mame/ui/ui.cpp:1472 #, c-format msgid "Laserdisc '%1$s' Vert Position" -msgstr "" +msgstr "Лазердиск '%1$s' верт. позиция" #: src/frontend/mame/ui/ui.cpp:1484 msgid "Vector Flicker" @@ -2339,7 +2370,7 @@ msgstr "Насыщенность луча" #: src/frontend/mame/ui/ui.cpp:1502 #, c-format msgid "Crosshair Scale %1$s" -msgstr "" +msgstr "Масштаб прицела %1$s" #: src/frontend/mame/ui/ui.cpp:1502 src/frontend/mame/ui/ui.cpp:1504 msgid "X" @@ -2352,12 +2383,12 @@ msgstr "" #: src/frontend/mame/ui/ui.cpp:1504 #, c-format msgid "Crosshair Offset %1$s" -msgstr "" +msgstr "Смещение прицела %1$s" #: src/frontend/mame/ui/ui.cpp:1592 #, c-format msgid "%1$3ddB" -msgstr "" +msgstr "%1$3dдБ" #: src/frontend/mame/ui/ui.cpp:1636 #, c-format @@ -2393,22 +2424,22 @@ msgstr "" #: src/frontend/mame/ui/ui.cpp:1995 #, c-format msgid "Crosshair Scale X %1$1.3f" -msgstr "" +msgstr "Масштаб прицела X %1$1.3f" #: src/frontend/mame/ui/ui.cpp:1995 #, c-format msgid "Crosshair Scale Y %1$1.3f" -msgstr "" +msgstr "Масштаб прицела Y %1$1.3f" #: src/frontend/mame/ui/ui.cpp:2014 #, c-format msgid "Crosshair Offset X %1$1.3f" -msgstr "" +msgstr "Смещение прицела X %1$1.3f" #: src/frontend/mame/ui/ui.cpp:2014 #, c-format msgid "Crosshair Offset Y %1$1.3f" -msgstr "" +msgstr "Смещение прицела Y %1$1.3f" #: src/frontend/mame/ui/ui.cpp:2157 msgid "**Error saving ui.ini**" @@ -2445,27 +2476,27 @@ msgstr "Настройки" #: plugins/timer/init.lua:94 msgid "Current time" -msgstr "" +msgstr "Текущее время" #: plugins/timer/init.lua:96 msgid "Total time" -msgstr "" +msgstr "Общее время" #: plugins/timer/init.lua:98 msgid "Play Count" -msgstr "" +msgstr "Количество игр" #: plugins/timer/init.lua:106 msgid "Timer" -msgstr "" +msgstr "Таймер" #: plugins/cheat/init.lua:458 msgid "Select cheat to set hotkey" -msgstr "" +msgstr "Выбрать чит для горячей клавиши" #: plugins/cheat/init.lua:464 msgid "Press button for hotkey or wait to clear" -msgstr "" +msgstr "Нажмите клавишу для горячей клавиши или подождите для сброса" #: plugins/cheat/init.lua:476 msgid "None" @@ -2473,56 +2504,56 @@ msgstr "Отсутствует" #: plugins/cheat/init.lua:481 msgid "Done" -msgstr "" +msgstr "Готово" #: plugins/cheat/init.lua:495 plugins/cheat/init.lua:509 msgid "Set" -msgstr "" +msgstr "Установлено" #: plugins/cheat/init.lua:528 msgid "Set hotkeys" -msgstr "" +msgstr "Назначить горячие клавиши" #: plugins/cheat/init.lua:668 #, lua-format msgid "Activated: %s = %s" -msgstr "" +msgstr "Активировано: %s = %s" #: plugins/cheat/init.lua:671 plugins/cheat/init.lua:729 #, lua-format msgid "Activated: %s" -msgstr "" +msgstr "Активировано: %s" #: plugins/cheat/init.lua:733 #, lua-format msgid "Enabled: %s" -msgstr "" +msgstr "Разрешено: %s" #: plugins/cheat/init.lua:738 #, lua-format msgid "Disabled: %s" -msgstr "" +msgstr "Запрещено: %s" #: plugins/cheat/init.lua:776 #, lua-format msgid "%s added" -msgstr "" +msgstr "%s добавлено" #: plugins/data/data_command.lua:19 msgid "Command" -msgstr "" +msgstr "Команда" #: plugins/data/data_gameinit.lua:16 msgid "Gameinit" -msgstr "" +msgstr "Иниц. игры" #: plugins/data/data_hiscore.lua:770 plugins/data/data_hiscore.lua:818 msgid "High Scores" -msgstr "" +msgstr "Лучшие очки" #: plugins/data/data_history.lua:15 msgid "History" -msgstr "" +msgstr "История" #: plugins/data/data_mameinfo.lua:18 plugins/data/data_messinfo.lua:19 msgid "" @@ -2531,6 +2562,10 @@ msgid "" "--- DRIVER INFO ---\n" "Driver: " msgstr "" +"\n" +"\n" +"--- ИНФО ДРАЙВЕРА ---\n" +"Драйвер: " #: plugins/data/data_mameinfo.lua:20 msgid "MAMEinfo" @@ -2554,296 +2589,203 @@ msgstr "" #: plugins/cheatfind/init.lua:344 msgid "Save Cheat" -msgstr "" +msgstr "Сохранить чит" #: plugins/cheatfind/init.lua:347 msgid "Default" -msgstr "" +msgstr "По умолчанию" #: plugins/cheatfind/init.lua:347 msgid "Custom" -msgstr "" +msgstr "Пользовательский" #: plugins/cheatfind/init.lua:348 msgid "Cheat Name" -msgstr "" +msgstr "Имя чита" #: plugins/cheatfind/init.lua:354 #, lua-format msgid "Default name is %s" -msgstr "" +msgstr "Имя по умолчанию %s" #: plugins/cheatfind/init.lua:362 msgid "Player" -msgstr "" +msgstr "Игрок" #: plugins/cheatfind/init.lua:367 msgid "Type" -msgstr "" +msgstr "Тип" #: plugins/cheatfind/init.lua:373 msgid "Save" -msgstr "" +msgstr "Сохранить" #: plugins/cheatfind/init.lua:399 #, lua-format msgid "Cheat written to %s and added to cheat.simple" -msgstr "" +msgstr "Чит записан в %s и добавлен в cheat.simple" #: plugins/cheatfind/init.lua:407 msgid "Cheat added to cheat.simple" -msgstr "" +msgstr "Чит добавлен в cheat.simple" #: plugins/cheatfind/init.lua:412 msgid "" "Unable to write file\n" "Ensure that cheatpath folder exists" msgstr "" +"Не удалось сохранить файл\n" +"Убедитесь что папка cheatpath существует" #: plugins/cheatfind/init.lua:421 msgid "Cancel" -msgstr "" +msgstr "Отмена" #: plugins/cheatfind/init.lua:426 msgid "CPU or RAM" -msgstr "" +msgstr "Процессор или память" #: plugins/cheatfind/init.lua:430 msgid "Changes to this only take effect when \"Start new search\" is selected" -msgstr "" +msgstr "Эти изменения будут применены только после выбора \"Начать новый поиск\"" #: plugins/cheatfind/init.lua:449 msgid "Data cleared and current state saved" -msgstr "" +msgstr "Данные очищены и текущее состояние сохранено" #: plugins/cheatfind/init.lua:457 msgid "Start new search" -msgstr "" +msgstr "Начать новый поиск" #: plugins/cheatfind/init.lua:467 msgid "Current state saved" -msgstr "" +msgstr "Текущее состояние сохранено" #: plugins/cheatfind/init.lua:474 msgid "Save current -- #" -msgstr "" +msgstr "Сохранить текущее -- #" #: plugins/cheatfind/init.lua:506 msgid " total matches found" -msgstr "" +msgstr " всего найдено совпадений" #: plugins/cheatfind/init.lua:513 msgid "Compare" -msgstr "" +msgstr "Сравнить" #: plugins/cheatfind/init.lua:516 msgid "Left operand" -msgstr "" +msgstr "Левый операнд" #: plugins/cheatfind/init.lua:519 msgid "Current" -msgstr "" +msgstr "Текущий" #: plugins/cheatfind/init.lua:524 msgid "Operator" -msgstr "" +msgstr "Оператор" #: plugins/cheatfind/init.lua:531 msgid "Left less than right, value is difference" -msgstr "" +msgstr "Левый меньше правого, значения различаются" #: plugins/cheatfind/init.lua:533 msgid "Left greater than right, value is difference" -msgstr "" +msgstr "Левый больше правого, значения различаются" #: plugins/cheatfind/init.lua:535 msgid "Left equal to right" -msgstr "" +msgstr "Левый равен правому" #: plugins/cheatfind/init.lua:537 msgid "Left not equal to right, value is difference" -msgstr "" +msgstr "Левый не равен правому, значения различаются" #: plugins/cheatfind/init.lua:539 msgid "Left equal to right with bitmask" -msgstr "" +msgstr "Левый равен правому по маске" #: plugins/cheatfind/init.lua:541 msgid "Left not equal to right with bitmask" -msgstr "" +msgstr "Левый не равен правому по маске" #: plugins/cheatfind/init.lua:543 msgid "Left less than value" -msgstr "" +msgstr "Левый меньше значения" #: plugins/cheatfind/init.lua:545 msgid "Left greater than value" -msgstr "" +msgstr "Левый больше значения" #: plugins/cheatfind/init.lua:547 msgid "Left equal to value" -msgstr "" +msgstr "Левый равен значению" #: plugins/cheatfind/init.lua:549 msgid "Left not equal to value" -msgstr "" +msgstr "Левый не равен значению" #: plugins/cheatfind/init.lua:560 msgid "Right operand" -msgstr "" +msgstr "Правый операнд" #: plugins/cheatfind/init.lua:568 msgid "Value" -msgstr "" +msgstr "Значение" #: plugins/cheatfind/init.lua:572 msgid "Any" -msgstr "" +msgstr "Любое" #: plugins/cheatfind/init.lua:578 msgid "Data Format" -msgstr "" +msgstr "Формат данных" #: plugins/cheatfind/init.lua:602 msgid "Undo last search -- #" -msgstr "" +msgstr "Отменить последний поиск -- #" #: plugins/cheatfind/init.lua:606 msgid "Match block" -msgstr "" +msgstr "Совпадает блок" #: plugins/cheatfind/init.lua:609 msgid "All" -msgstr "" +msgstr "Все" #: plugins/cheatfind/init.lua:660 #, lua-format msgid "Test cheat at addr %08X" -msgstr "" +msgstr "Проверить чит по адресу %08X" #: plugins/cheatfind/init.lua:692 msgid "Cheat engine not available" -msgstr "" +msgstr "Движок читов не доступен" #: plugins/cheatfind/init.lua:718 msgid "Default name is " -msgstr "" +msgstr "Имя по умолчанию " #: plugins/cheatfind/init.lua:741 msgid "Test" -msgstr "" +msgstr "Тест" #: plugins/cheatfind/init.lua:741 msgid "Write" -msgstr "" +msgstr "Запись" #: plugins/cheatfind/init.lua:741 msgid "Watch" -msgstr "" +msgstr "Просмотр" #: plugins/cheatfind/init.lua:758 msgid "Page" -msgstr "" +msgstr "Страница" #: plugins/cheatfind/init.lua:776 msgid "Clear Watches" -msgstr "" +msgstr "Очистить просмотр" #: plugins/cheatfind/init.lua:786 msgid "Cheat Finder" -msgstr "" - -#~ msgid "Unimplemented" -#~ msgstr "Не эмулируется" - -#~ msgid "Imperfect" -#~ msgstr "Не идеально" - -#~ msgid "Gfx: %s, Sound: %s" -#~ msgstr "Графика: %s, Звук: %s" - -#~ msgid "Audit in progress..." -#~ msgstr "Идет проверка..." - -#~ msgid "Extra INIs" -#~ msgstr "Дополнительные INI-файлы" - -#~ msgid "Main filter" -#~ msgstr "Основной фильтр" - -#~ msgid "Other filter" -#~ msgstr "Дополнительные фильтры" - -#~ msgid "^!Region" -#~ msgstr "^!Регион" - -#~ msgid "^!Setup custom filter" -#~ msgstr "^!Задать свой фильтр" - -#~ msgid "Software History" -#~ msgstr "История ПО" - -#~ msgid "The keyboard emulation may not be 100% accurate.\n" -#~ msgstr "Эмуляция клавиатуры не 100% точная.\n" - -#~ msgid "The colors aren't 100% accurate.\n" -#~ msgstr "Цвета не 100% точные.\n" - -#~ msgid "The colors are completely wrong.\n" -#~ msgstr "Цвета совсем не правильные.\n" - -#~ msgid "The video emulation isn't 100% accurate.\n" -#~ msgstr "Эмуляция видео не 100% точная.\n" - -#~ msgid "The sound emulation isn't 100% accurate.\n" -#~ msgstr "Эмуляция звука не 100% точная.\n" - -#~ msgid "The machine lacks sound.\n" -#~ msgstr "Звук не эмулируется.\n" - -#~ msgid "The machine requires external artwork files\n" -#~ msgstr "Этой системе нужны внешние файлы оформления\n" - -#~ msgid "The machine has protection which isn't fully emulated.\n" -#~ msgstr "Защита этой системы эмулируется не полностью.\n" - -#~ msgid "No Infos Available" -#~ msgstr "Нет информации" - -#~ msgid "Save cancelled" -#~ msgstr "Сохранение отменено" - -#~ msgid "Load cancelled" -#~ msgstr "Загрузка отменена" - -#~ msgid "Save to position %s" -#~ msgstr "Сохранение состояния %s" - -#~ msgid "Load from position %s" -#~ msgstr "Загрузка состояния %s" - -#~ msgid "Export XML format (like -listxml)" -#~ msgstr "Экспорт в формат XML (как -listxml)" - -#~ msgid "Export TXT format (like -listfull)" -#~ msgstr "Экспорт в формат TXT (как -listfull)" - -#~ msgid "Display Options" -#~ msgstr "Настройки видео" - -#~ msgid "" -#~ "The selected machine is missing one or more required ROM or CHD images. " -#~ "Please select a different machine.\n" -#~ "\n" -#~ "Press any key (except ESC) to continue." -#~ msgstr "" -#~ "Отсутсвует один или несколько ROM или CHD необходимых для работы " -#~ "выбранной системы. Пожалуйста выберите другую систему.\n" -#~ "\n" -#~ "Нажмите любую клавишу (кроме ESC) для продолжения." - -#~ msgid "Skip displaying information's screen at startup" -#~ msgstr "Пропускать экран с информацией" - -#~ msgid "Force 4:3 appearance for software snapshot" -#~ msgstr "Принудительно 4:3 при программном снимке экрана" +msgstr "Поиск читов" -- cgit v1.2.3 From be5d1e3e92001b88f20b25ca373c0d4f80470428 Mon Sep 17 00:00:00 2001 From: Dirk Best Date: Mon, 23 Oct 2017 14:40:57 +0200 Subject: einstein: Fix MT #6728 --- src/mame/drivers/einstein.cpp | 26 +++++++------------------- src/mame/includes/einstein.h | 2 -- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/src/mame/drivers/einstein.cpp b/src/mame/drivers/einstein.cpp index d6b2873335f..a736d2e7fee 100644 --- a/src/mame/drivers/einstein.cpp +++ b/src/mame/drivers/einstein.cpp @@ -59,6 +59,7 @@ #include "cpu/z80/z80.h" #include "cpu/z80/z80daisy.h" +#include "machine/clock.h" #include "machine/z80pio.h" #include "sound/ay8910.h" @@ -246,21 +247,6 @@ WRITE8_MEMBER(einstein_state::einstein_drsel_w) } -/*************************************************************************** - CTC -***************************************************************************/ - -/* channel 0 and 1 have a 2 MHz input clock for triggering */ -TIMER_DEVICE_CALLBACK_MEMBER(einstein_state::einstein_ctc_trigger_callback) -{ - /* toggle line status */ - m_ctc_trigger ^= 1; - - m_ctc->trg0(m_ctc_trigger); - m_ctc->trg1(m_ctc_trigger); -} - - /*************************************************************************** UART ***************************************************************************/ @@ -414,8 +400,6 @@ void einstein_state::machine_reset() m_interrupt = 0; m_interrupt_mask = 0; - m_ctc_trigger = 0; - /* configure floppy drives */ /* floppy_type_t type_80 = FLOPPY_STANDARD_5_25_DSHD; floppy_type_t type_40 = FLOPPY_STANDARD_5_25_SSDD_40; @@ -697,16 +681,20 @@ static MACHINE_CONFIG_START( einstein ) MCFG_TIMER_DRIVER_ADD_PERIODIC("keyboard", einstein_state, einstein_keyboard_timer_callback, attotime::from_hz(50)) MCFG_DEVICE_ADD(IC_I063, Z80PIO, XTAL_X002 / 2) + MCFG_Z80PIO_OUT_INT_CB(INPUTLINE(IC_I001, INPUT_LINE_IRQ0)) MCFG_Z80PIO_OUT_PA_CB(DEVWRITE8("cent_data_out", output_latch_device, write)) MCFG_Z80PIO_OUT_PB_CB(DEVWRITELINE("centronics", centronics_device, write_strobe)) MCFG_DEVICE_ADD(IC_I058, Z80CTC, XTAL_X002 / 2) + MCFG_Z80CTC_INTR_CB(INPUTLINE(IC_I001, INPUT_LINE_IRQ0)) MCFG_Z80CTC_ZC0_CB(WRITELINE(einstein_state, einstein_serial_transmit_clock)) MCFG_Z80CTC_ZC1_CB(WRITELINE(einstein_state, einstein_serial_receive_clock)) MCFG_Z80CTC_ZC2_CB(DEVWRITELINE(IC_I058, z80ctc_device, trg3)) - /* the input to channel 0 and 1 of the ctc is a 2 MHz clock */ - MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc", einstein_state, einstein_ctc_trigger_callback, attotime::from_hz(XTAL_X002 /4)) + MCFG_CLOCK_ADD("ctc_trigger", XTAL_X002 / 4) + MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE(IC_I058, z80ctc_device, trg0)) + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE(IC_I058, z80ctc_device, trg1)) + MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE(IC_I058, z80ctc_device, trg2)) /* Einstein daisy chain support for non-Z80 devices */ MCFG_DEVICE_ADD("keyboard_daisy", EINSTEIN_KEYBOARD_DAISY, 0) diff --git a/src/mame/includes/einstein.h b/src/mame/includes/einstein.h index a05ca13f6e9..936c5e05d11 100644 --- a/src/mame/includes/einstein.h +++ b/src/mame/includes/einstein.h @@ -95,7 +95,6 @@ public: DECLARE_MACHINE_RESET(einstein2); uint32_t screen_update_einstein2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); TIMER_DEVICE_CALLBACK_MEMBER(einstein_keyboard_timer_callback); - TIMER_DEVICE_CALLBACK_MEMBER(einstein_ctc_trigger_callback); DECLARE_WRITE_LINE_MEMBER(einstein_6845_de_changed); DECLARE_WRITE8_MEMBER(einstein_drsel_w); DECLARE_WRITE_LINE_MEMBER(einstein_serial_transmit_clock); @@ -116,7 +115,6 @@ protected: optional_memory_region m_region_gfx1; int m_rom_enabled; - int m_ctc_trigger; /* keyboard */ uint8_t m_keyboard_line; -- cgit v1.2.3 From 1a97f0978cbbec0c4dd616432049ae93f5303ddb Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Tue, 24 Oct 2017 17:42:44 +1100 Subject: remove hashes for known bad dump (nw) --- src/mame/drivers/alphatpx.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/mame/drivers/alphatpx.cpp b/src/mame/drivers/alphatpx.cpp index a7028cd1420..5c31f58cae0 100644 --- a/src/mame/drivers/alphatpx.cpp +++ b/src/mame/drivers/alphatpx.cpp @@ -28,11 +28,11 @@ class alphatpx_state : public driver_device { public: alphatpx_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_bankdev(*this, "bankdev"), - m_palette(*this, "palette"), - m_vram(*this, "vram"), - m_gfx(*this, "gfx") + driver_device(mconfig, type, tag), + m_bankdev(*this, "bankdev"), + m_palette(*this, "palette"), + m_vram(*this, "vram"), + m_gfx(*this, "gfx") { } uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); @@ -225,7 +225,7 @@ ROM_START( alphatp3 ) ROM_LOAD("caap36_02_19.bin", 0x0000, 0x1000, CRC(23df6666) SHA1(5ea04cd299dec9951425eb91ecceb4818c4c6378)) ROM_REGION(0x400, "mcu", 0) - ROM_LOAD("p3_8041.bin", 0x000, 0x400, CRC(97206ad7) SHA1(e4e6b2ebf87ae9dc0b051f3f478496109d124896)) + ROM_LOAD("p3_8041.bin", 0x000, 0x400, NO_DUMP) ROM_REGION(0x800, "gfx", 0) ROM_LOAD("cajp08_01_15.bin", 0x000, 0x800, CRC(4ed11dac) SHA1(9db9b8e0edf471faaddbb5521d6223121146bab8)) -- cgit v1.2.3 From 6545aa1ef8262de34d3dbcf5494f3d98d626a8eb Mon Sep 17 00:00:00 2001 From: Pedro Simoes Date: Tue, 24 Oct 2017 07:27:10 +0000 Subject: Portuguese (Portugal) translation (#2708) --- language/Portuguese/strings.po | 1265 +++++++++++++++++++++------------------- 1 file changed, 672 insertions(+), 593 deletions(-) diff --git a/language/Portuguese/strings.po b/language/Portuguese/strings.po index 62369453b18..5edb5410346 100644 --- a/language/Portuguese/strings.po +++ b/language/Portuguese/strings.po @@ -9,7 +9,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-10-03 10:32+1100\n" "PO-Revision-Date: 2016-02-20 18:03+0100\n" -"Last-Translator: Automatically generated\n" +"Last-Translator: pmos69\n" "Language-Team: MAME Language Team\n" "Language: pt\n" "MIME-Version: 1.0\n" @@ -20,157 +20,166 @@ msgstr "" #: src/frontend/mame/ui/slotopt.cpp:192 #, c-format msgid "%s [internal]" -msgstr "" +msgstr "%s [interna]" #: src/frontend/mame/ui/slotopt.cpp:203 src/frontend/mame/ui/inputmap.cpp:625 #: src/frontend/mame/ui/miscmenu.cpp:96 msgid "Reset" -msgstr "" +msgstr "Reiniciar" #: src/frontend/mame/ui/slotopt.cpp:220 src/frontend/mame/ui/filesel.cpp:257 #: src/frontend/mame/ui/swlist.cpp:83 msgid "[empty slot]" -msgstr "" +msgstr "[slot vazio]" #: src/frontend/mame/ui/filesel.cpp:261 msgid "[create]" -msgstr "" +msgstr "[criar]" #: src/frontend/mame/ui/filesel.cpp:265 src/frontend/mame/ui/swlist.cpp:94 msgid "[software list]" -msgstr "" +msgstr "[lista de software]" #: src/frontend/mame/ui/filesel.cpp:525 msgid "Select access mode" -msgstr "" +msgstr "Seleccionar modo de acesso" #: src/frontend/mame/ui/filesel.cpp:526 msgid "Read-only" -msgstr "" +msgstr "Apenas-leitura" #: src/frontend/mame/ui/filesel.cpp:528 msgid "Read-write" -msgstr "" +msgstr "Leitura-e-escrita" #: src/frontend/mame/ui/filesel.cpp:529 msgid "Read this image, write to another image" -msgstr "" +msgstr "Ler esta imagem, escrever para outra imagem" #: src/frontend/mame/ui/filesel.cpp:530 msgid "Read this image, write to diff" -msgstr "" +msgstr "Ler esta imagem, escrever para diff" #: src/frontend/mame/ui/info.cpp:30 msgid "protection" -msgstr "" +msgstr "protecção" #: src/frontend/mame/ui/info.cpp:31 msgid "color palette" -msgstr "" +msgstr "paleta de cores" #: src/frontend/mame/ui/info.cpp:32 msgid "graphics" -msgstr "" +msgstr "gráficos" #: src/frontend/mame/ui/info.cpp:33 msgid "sound" -msgstr "" +msgstr "som" #: src/frontend/mame/ui/info.cpp:34 msgid "controls" -msgstr "" +msgstr "controlos" #: src/frontend/mame/ui/info.cpp:35 msgid "keyboard" -msgstr "" +msgstr "teclado" #: src/frontend/mame/ui/info.cpp:36 msgid "mouse" -msgstr "" +msgstr "rato" #: src/frontend/mame/ui/info.cpp:37 msgid "microphone" -msgstr "" +msgstr "microfone" #: src/frontend/mame/ui/info.cpp:38 msgid "camera" -msgstr "" +msgstr "câmara" #: src/frontend/mame/ui/info.cpp:39 msgid "disk" -msgstr "" +msgstr "disco" #: src/frontend/mame/ui/info.cpp:40 msgid "printer" -msgstr "" +msgstr "impressora" #: src/frontend/mame/ui/info.cpp:41 msgid "LAN" -msgstr "" +msgstr "rede local" #: src/frontend/mame/ui/info.cpp:42 msgid "WAN" -msgstr "" +msgstr "WAN" #: src/frontend/mame/ui/info.cpp:43 msgid "timing" -msgstr "" +msgstr "temporização" #: src/frontend/mame/ui/info.cpp:180 msgid "" "One or more ROMs/CHDs for this machine are incorrect. The machine may not " "run correctly.\n" msgstr "" +"Uma ou mais ROMs/CHDs para esta máquina estão incorretas. A máquina poderá " +"não funcionar corretamente.\n" #: src/frontend/mame/ui/info.cpp:190 msgid "" "There are known problems with this machine\n" "\n" msgstr "" +"Existem problemas conhecidos com esta máquina\n" +"\n" #: src/frontend/mame/ui/info.cpp:195 msgid "" "One or more ROMs/CHDs for this machine have not been correctly dumped.\n" msgstr "" +"Uma ou mais ROMs/CHDs para esta máquina não foram corretamente descarregadas.\n" #: src/frontend/mame/ui/info.cpp:200 msgid "Completely unemulated features: " -msgstr "" +msgstr "Funcionalidades não emuladas: " #: src/frontend/mame/ui/info.cpp:206 src/frontend/mame/ui/info.cpp:222 #, c-format msgid "%s" -msgstr "" +msgstr "%s" #: src/frontend/mame/ui/info.cpp:206 src/frontend/mame/ui/info.cpp:222 #: src/frontend/mame/ui/info.cpp:267 #, c-format msgid ", %s" -msgstr "" +msgstr ", %s" #: src/frontend/mame/ui/info.cpp:216 msgid "Imperfectly emulated features: " -msgstr "" +msgstr "Funcionalidades emuladas de forma imperfeita: " #: src/frontend/mame/ui/info.cpp:231 msgid "Screen flipping in cocktail mode is not supported.\n" -msgstr "" +msgstr "Inversão de ecrã não é suportada em modo cocktail.\n" #: src/frontend/mame/ui/info.cpp:233 msgid "This machine requires external artwork files.\n" -msgstr "" +msgstr "Esta máquina requer ficheiros de artwork externos.\n" #: src/frontend/mame/ui/info.cpp:235 msgid "" "This machine was never completed. It may exhibit strange behavior or missing " "elements that are not bugs in the emulation.\n" msgstr "" +"Esta máquina não foi acabada. Poderá ter um comportamento estranho " +"ou elementos em falta que não são bugs na emulação.\n" #: src/frontend/mame/ui/info.cpp:237 msgid "" "This machine has no sound hardware, MAME will produce no sounds, this is " "expected behaviour.\n" msgstr "" +"Esta máquina não tem hardware de som. O MAME não irá produzir som. Isto " +"é o comportamento esperado.\n" #: src/frontend/mame/ui/info.cpp:241 msgid "" @@ -179,6 +188,9 @@ msgid "" "complete. There is nothing you can do to fix this problem except wait for " "the developers to improve the emulation.\n" msgstr "" +"ESTA MÁQUINA NÃO FUNCIONA. A emulação desta máquina ainda não está completa. " +"Não há nada que possa fazer para corrigir isto excepto aguardar que os " +"programadores melhorem a emulação.\n" #: src/frontend/mame/ui/info.cpp:243 msgid "" @@ -187,6 +199,9 @@ msgid "" "interaction or consist of mechanical devices. It is not possible to fully " "experience this machine.\n" msgstr "" +"Elementos desta máquina não podem ser emulados pois necessitam de interacção " +"física ou consistem em dispositivos mecânicos. Não é possível ter uma " +"experiência completa com esta máquina.\n" #: src/frontend/mame/ui/info.cpp:265 #, c-format @@ -195,6 +210,9 @@ msgid "" "\n" "There are working clones of this machine: %s" msgstr "" +"\n" +"\n" +"Existem clones funcionais desta máquina: %s" #: src/frontend/mame/ui/info.cpp:278 msgid "" @@ -202,6 +220,9 @@ msgid "" "\n" "Press any key to continue" msgstr "" +"\n" +"\n" +"Pressione qualquer tecla para continuar" #: src/frontend/mame/ui/info.cpp:293 #, c-format @@ -212,64 +233,73 @@ msgid "" "\n" "CPU:\n" msgstr "" +"%1$s\n" +"%2$s %3$s\n" +"Driver: %4$s\n" +"\n" +"CPU:\n" #: src/frontend/mame/ui/info.cpp:328 src/frontend/mame/ui/info.cpp:366 msgid "MHz" -msgstr "" +msgstr "MHz" #: src/frontend/mame/ui/info.cpp:328 src/frontend/mame/ui/info.cpp:366 msgid "kHz" -msgstr "" +msgstr "kHz" #: src/frontend/mame/ui/info.cpp:342 msgid "" "\n" "Sound:\n" msgstr "" +"\n" +"Som:\n" #: src/frontend/mame/ui/info.cpp:370 msgid "" "\n" "Video:\n" msgstr "" +"\n" +"Video:\n" #: src/frontend/mame/ui/info.cpp:374 msgid "None\n" -msgstr "" +msgstr "Nenhum\n" #: src/frontend/mame/ui/info.cpp:381 msgid "Vector" -msgstr "" +msgstr "Vetorial" #: src/frontend/mame/ui/info.cpp:392 #, c-format msgid "%1$s: %2$s\n" -msgstr "" +msgstr "%1$s: %2$s\n" #: src/frontend/mame/ui/info.cpp:392 msgid "%2$s\n" -msgstr "" +msgstr "%2$s\n" #: src/frontend/mame/ui/info.cpp:438 #, c-format msgid "Screen '%1$s'" -msgstr "" +msgstr "Ecrã '%1$s'" #: src/frontend/mame/ui/info.cpp:440 msgid "Screen" -msgstr "" +msgstr "Ecrã" #: src/frontend/mame/ui/info.cpp:525 msgid "Not supported" -msgstr "" +msgstr "Não suportado" #: src/frontend/mame/ui/info.cpp:528 msgid "Partially supported" -msgstr "" +msgstr "Parcialmente suportado" #: src/frontend/mame/ui/info.cpp:536 msgid "[empty]" -msgstr "" +msgstr "[vazio]" #: src/frontend/mame/ui/cheatopt.cpp:92 plugins/cheat/init.lua:601 #, c-format, lua-format @@ -277,47 +307,49 @@ msgid "" "Cheat Comment:\n" "%s" msgstr "" +"Comentário de Cheat:\n" +"%s" #: src/frontend/mame/ui/cheatopt.cpp:105 msgid "All cheats reloaded" -msgstr "" +msgstr "Todos os cheats recarregados" #: src/frontend/mame/ui/cheatopt.cpp:136 msgid "Autofire Settings" -msgstr "" +msgstr "Configurações de Auto-disparo" #: src/frontend/mame/ui/cheatopt.cpp:157 plugins/cheat/init.lua:529 msgid "Reset All" -msgstr "" +msgstr "Reiniciar Tudo" #: src/frontend/mame/ui/cheatopt.cpp:160 plugins/cheat/init.lua:530 msgid "Reload All" -msgstr "" +msgstr "Recarregar Tudo" #: src/frontend/mame/ui/cheatopt.cpp:273 msgid "Autofire Status" -msgstr "" +msgstr "Estado do Auto-disparo" #: src/frontend/mame/ui/cheatopt.cpp:273 src/frontend/mame/ui/videoopt.cpp:208 #: src/frontend/mame/ui/videoopt.cpp:212 src/frontend/mame/ui/videoopt.cpp:216 #: src/frontend/mame/ui/videoopt.cpp:220 src/frontend/mame/ui/videoopt.cpp:224 #: src/frontend/mame/ui/ui.cpp:1246 msgid "Disabled" -msgstr "" +msgstr "Desactivado" #: src/frontend/mame/ui/cheatopt.cpp:273 src/frontend/mame/ui/videoopt.cpp:208 #: src/frontend/mame/ui/videoopt.cpp:212 src/frontend/mame/ui/videoopt.cpp:216 #: src/frontend/mame/ui/videoopt.cpp:220 src/frontend/mame/ui/videoopt.cpp:224 #: src/frontend/mame/ui/ui.cpp:1246 msgid "Enabled" -msgstr "" +msgstr "Activo" #: src/frontend/mame/ui/cheatopt.cpp:299 src/frontend/mame/ui/cheatopt.cpp:305 #: src/frontend/mame/ui/menu.cpp:736 src/frontend/mame/ui/miscmenu.cpp:894 #: src/frontend/mame/ui/sndmenu.cpp:135 src/frontend/mame/ui/sndmenu.cpp:137 #: plugins/cheat/init.lua:499 plugins/cheatfind/init.lua:589 msgid "On" -msgstr "" +msgstr "Ligado" #: src/frontend/mame/ui/cheatopt.cpp:299 src/frontend/mame/ui/cheatopt.cpp:305 #: src/frontend/mame/ui/menu.cpp:739 src/frontend/mame/ui/miscmenu.cpp:894 @@ -325,472 +357,472 @@ msgstr "" #: plugins/cheat/init.lua:502 plugins/cheat/init.lua:511 #: plugins/cheatfind/init.lua:586 msgid "Off" -msgstr "" +msgstr "Desligado" #: src/frontend/mame/ui/cheatopt.cpp:316 msgid "No buttons found on this machine!" -msgstr "" +msgstr "Não foram encontrados botões nesta máquina!" #: src/frontend/mame/ui/cheatopt.cpp:327 src/frontend/mame/ui/cheatopt.cpp:331 msgid "Autofire Delay" -msgstr "" +msgstr "Atraso do Auto-disparo" #: src/frontend/mame/ui/custui.cpp:31 msgid "Show All" -msgstr "" +msgstr "Mostrar Tudo" #: src/frontend/mame/ui/custui.cpp:32 msgid "Hide Filters" -msgstr "" +msgstr "Esconder Filtros" #: src/frontend/mame/ui/custui.cpp:33 msgid "Hide Info/Image" -msgstr "" +msgstr "Esconder Info/Imagem" #: src/frontend/mame/ui/custui.cpp:34 msgid "Hide Both" -msgstr "" +msgstr "Esconder Ambos" #: src/frontend/mame/ui/custui.cpp:151 msgid "Fonts" -msgstr "" +msgstr "Fontes" #: src/frontend/mame/ui/custui.cpp:152 msgid "Colors" -msgstr "" +msgstr "Cores" #: src/frontend/mame/ui/custui.cpp:157 src/frontend/mame/ui/dirmenu.cpp:38 msgid "Language" -msgstr "" +msgstr "Idioma" #: src/frontend/mame/ui/custui.cpp:161 msgid "Show side panels" -msgstr "" +msgstr "Mostrar painéis laterais" #: src/frontend/mame/ui/custui.cpp:173 msgid "Custom UI Settings" -msgstr "" +msgstr "Configurações personalizadas da interface" #: src/frontend/mame/ui/custui.cpp:223 msgid "default" -msgstr "" +msgstr "padrão" #: src/frontend/mame/ui/custui.cpp:331 msgid "UI Font" -msgstr "" +msgstr "Fonte da interface" #: src/frontend/mame/ui/custui.cpp:336 msgid "Bold" -msgstr "" +msgstr "Negrito" #: src/frontend/mame/ui/custui.cpp:337 msgid "Italic" -msgstr "" +msgstr "Itálico" #: src/frontend/mame/ui/custui.cpp:342 msgid "Lines" -msgstr "" +msgstr "Linhas" #: src/frontend/mame/ui/custui.cpp:348 msgid "Infos text size" -msgstr "" +msgstr "Tamanho do texto das Infos" #: src/frontend/mame/ui/custui.cpp:362 msgid "UI Fonts Settings" -msgstr "" +msgstr "Configurações das Fontes" #: src/frontend/mame/ui/custui.cpp:371 msgid "Sample text - Lorem ipsum dolor sit amet, consectetur adipiscing elit." -msgstr "" +msgstr "Exemplo de texto - Lorem ipsum dolor sit amet, consectetur adipiscing elit." #: src/frontend/mame/ui/custui.cpp:451 msgid "Normal text" -msgstr "" +msgstr "Texto normal" #: src/frontend/mame/ui/custui.cpp:452 msgid "Selected color" -msgstr "" +msgstr "Côr seleccionada" #: src/frontend/mame/ui/custui.cpp:453 msgid "Normal text background" -msgstr "" +msgstr "Fundo do texto normal" #: src/frontend/mame/ui/custui.cpp:454 msgid "Selected background color" -msgstr "" +msgstr "Côr de fundo seleccionada" #: src/frontend/mame/ui/custui.cpp:455 msgid "Subitem color" -msgstr "" +msgstr "Côr do sub-item" #: src/frontend/mame/ui/custui.cpp:456 src/frontend/mame/ui/custui.cpp:511 msgid "Clone" -msgstr "" +msgstr "Clone" #: src/frontend/mame/ui/custui.cpp:457 msgid "Border" -msgstr "" +msgstr "Borda" #: src/frontend/mame/ui/custui.cpp:458 msgid "Background" -msgstr "" +msgstr "Fundo" #: src/frontend/mame/ui/custui.cpp:459 msgid "Dipswitch" -msgstr "" +msgstr "Dipswitch" #: src/frontend/mame/ui/custui.cpp:460 msgid "Unavailable color" -msgstr "" +msgstr "Côr indisponível" #: src/frontend/mame/ui/custui.cpp:461 msgid "Slider color" -msgstr "" +msgstr "Cor dos controlos deslizantes" #: src/frontend/mame/ui/custui.cpp:462 msgid "Gfx viewer background" -msgstr "" +msgstr "Fundo do visualizador Gfx" #: src/frontend/mame/ui/custui.cpp:463 msgid "Mouse over color" -msgstr "" +msgstr "Cor do rato-sobre" #: src/frontend/mame/ui/custui.cpp:464 msgid "Mouse over background color" -msgstr "" +msgstr "Cor de fundo do rato-sobre" #: src/frontend/mame/ui/custui.cpp:465 msgid "Mouse down color" -msgstr "" +msgstr "Cor do rato-premido" #: src/frontend/mame/ui/custui.cpp:466 msgid "Mouse down background color" -msgstr "" +msgstr "Cor de fundo do rato-premido" #: src/frontend/mame/ui/custui.cpp:469 msgid "Restore originals colors" -msgstr "" +msgstr "restaurar cores originais" #: src/frontend/mame/ui/custui.cpp:481 msgid "UI Colors Settings" -msgstr "" +msgstr "Configurações de Cores da Interface" #: src/frontend/mame/ui/custui.cpp:490 #, c-format msgid "Double click or press %1$s to change the color value" -msgstr "" +msgstr "Duplo-clique ou pressione %1$s para mudar o valor da cor" #: src/frontend/mame/ui/custui.cpp:498 msgid "Menu Preview" -msgstr "" +msgstr "Pré-Visualização do Menu" #: src/frontend/mame/ui/custui.cpp:507 msgid "Normal" -msgstr "" +msgstr "Normal" #: src/frontend/mame/ui/custui.cpp:508 msgid "Subitem" -msgstr "" +msgstr "Sub-Item" #: src/frontend/mame/ui/custui.cpp:509 msgid "Selected" -msgstr "" +msgstr "Seleccionado" #: src/frontend/mame/ui/custui.cpp:510 msgid "Mouse Over" -msgstr "" +msgstr "Rato-Sobre" #: src/frontend/mame/ui/custui.cpp:740 msgid "ARGB Settings" -msgstr "" +msgstr "Configurações ARGB" #: src/frontend/mame/ui/custui.cpp:745 src/frontend/mame/ui/custui.cpp:748 msgid "Alpha" -msgstr "" +msgstr "Opacidade" #: src/frontend/mame/ui/custui.cpp:753 src/frontend/mame/ui/custui.cpp:756 #: src/frontend/mame/ui/custui.cpp:898 msgid "Red" -msgstr "" +msgstr "Vermelho" #: src/frontend/mame/ui/custui.cpp:761 src/frontend/mame/ui/custui.cpp:764 #: src/frontend/mame/ui/custui.cpp:901 msgid "Green" -msgstr "" +msgstr "Verde" #: src/frontend/mame/ui/custui.cpp:769 src/frontend/mame/ui/custui.cpp:772 #: src/frontend/mame/ui/custui.cpp:902 msgid "Blue" -msgstr "" +msgstr "Azul" #: src/frontend/mame/ui/custui.cpp:775 msgid "Choose from palette" -msgstr "" +msgstr "Escolha da paleta" #: src/frontend/mame/ui/custui.cpp:813 msgid "Color preview =" -msgstr "" +msgstr "Pré-Visualização de côr =" #: src/frontend/mame/ui/custui.cpp:894 msgid "White" -msgstr "" +msgstr "Branco" #: src/frontend/mame/ui/custui.cpp:895 msgid "Silver" -msgstr "" +msgstr "Prateado" #: src/frontend/mame/ui/custui.cpp:896 msgid "Gray" -msgstr "" +msgstr "Cinzento" #: src/frontend/mame/ui/custui.cpp:897 msgid "Black" -msgstr "" +msgstr "Preto" #: src/frontend/mame/ui/custui.cpp:899 msgid "Orange" -msgstr "" +msgstr "Laranja" #: src/frontend/mame/ui/custui.cpp:900 msgid "Yellow" -msgstr "" +msgstr "Amarelo" #: src/frontend/mame/ui/custui.cpp:903 msgid "Violet" -msgstr "" +msgstr "Violeta" #: src/frontend/mame/ui/state.cpp:388 msgid "Load State" -msgstr "" +msgstr "Carregar Estado" #: src/frontend/mame/ui/state.cpp:388 msgid "Select position to load from" -msgstr "" +msgstr "Seleccione possição do carregamento" #: src/frontend/mame/ui/state.cpp:412 msgid "Save State" -msgstr "" +msgstr "Gravar Estado" #: src/frontend/mame/ui/state.cpp:412 msgid "Select position to save to" -msgstr "" +msgstr "Seleccione posição de gravação" #: src/frontend/mame/ui/tapectrl.cpp:85 msgid "stopped" -msgstr "" +msgstr "parado" #: src/frontend/mame/ui/tapectrl.cpp:87 msgid "playing" -msgstr "" +msgstr "funcionando" #: src/frontend/mame/ui/tapectrl.cpp:87 msgid "(playing)" -msgstr "" +msgstr "(funcionando)" #: src/frontend/mame/ui/tapectrl.cpp:88 msgid "recording" -msgstr "" +msgstr "gravando" #: src/frontend/mame/ui/tapectrl.cpp:88 msgid "(recording)" -msgstr "" +msgstr "(gravando)" #: src/frontend/mame/ui/tapectrl.cpp:95 msgid "Pause/Stop" -msgstr "" +msgstr "Pausa/Parar" #: src/frontend/mame/ui/tapectrl.cpp:98 msgid "Play" -msgstr "" +msgstr "Play" #: src/frontend/mame/ui/tapectrl.cpp:101 msgid "Record" -msgstr "" +msgstr "Gravar" #: src/frontend/mame/ui/tapectrl.cpp:104 msgid "Rewind" -msgstr "" +msgstr "Rebobinar" #: src/frontend/mame/ui/tapectrl.cpp:107 msgid "Fast Forward" -msgstr "" +msgstr "Avanço Rápido" #: src/frontend/mame/ui/utils.cpp:57 src/frontend/mame/ui/utils.cpp:81 msgid "Unfiltered" -msgstr "" +msgstr "Não filtrado" #: src/frontend/mame/ui/utils.cpp:58 src/frontend/mame/ui/utils.cpp:82 msgid "Available" -msgstr "" +msgstr "Disponível" #: src/frontend/mame/ui/utils.cpp:59 src/frontend/mame/ui/utils.cpp:83 msgid "Unavailable" -msgstr "" +msgstr "Não disponível" #: src/frontend/mame/ui/utils.cpp:60 msgid "Working" -msgstr "" +msgstr "Funcional" #: src/frontend/mame/ui/utils.cpp:61 msgid "Not Working" -msgstr "" +msgstr "Não Funcional" #: src/frontend/mame/ui/utils.cpp:62 msgid "Mechanical" -msgstr "" +msgstr "Mecânico" #: src/frontend/mame/ui/utils.cpp:63 msgid "Not Mechanical" -msgstr "" +msgstr "Não Mecânico" #: src/frontend/mame/ui/utils.cpp:64 msgid "Category" -msgstr "" +msgstr "categoria" #: src/frontend/mame/ui/utils.cpp:65 msgid "Favorites" -msgstr "" +msgstr "Favoritos" #: src/frontend/mame/ui/utils.cpp:66 src/frontend/mame/ui/miscmenu.cpp:759 msgid "BIOS" -msgstr "" +msgstr "BIOS" #: src/frontend/mame/ui/utils.cpp:67 msgid "Not BIOS" -msgstr "" +msgstr "Não BIOS" #: src/frontend/mame/ui/utils.cpp:68 src/frontend/mame/ui/utils.cpp:84 msgid "Parents" -msgstr "" +msgstr "Originais" #: src/frontend/mame/ui/utils.cpp:69 src/frontend/mame/ui/utils.cpp:85 msgid "Clones" -msgstr "" +msgstr "Clones" #: src/frontend/mame/ui/utils.cpp:70 msgid "Manufacturer" -msgstr "" +msgstr "Fabricante" #: src/frontend/mame/ui/utils.cpp:71 src/frontend/mame/ui/utils.cpp:86 msgid "Year" -msgstr "" +msgstr "Ano" #: src/frontend/mame/ui/utils.cpp:72 msgid "Save Supported" -msgstr "" +msgstr "Gravação Suportada" #: src/frontend/mame/ui/utils.cpp:73 msgid "Save Unsupported" -msgstr "" +msgstr "Gravação Não Suportada" #: src/frontend/mame/ui/utils.cpp:74 msgid "CHD Required" -msgstr "" +msgstr "Requer CHD" #: src/frontend/mame/ui/utils.cpp:75 msgid "No CHD Required" -msgstr "" +msgstr "Não Requer CHD" #: src/frontend/mame/ui/utils.cpp:76 msgid "Vertical Screen" -msgstr "" +msgstr "Ecrã Vertical" #: src/frontend/mame/ui/utils.cpp:77 msgid "Horizontal Screen" -msgstr "" +msgstr "Ecrã Horizontal" #: src/frontend/mame/ui/utils.cpp:78 src/frontend/mame/ui/utils.cpp:94 msgid "Custom Filter" -msgstr "" +msgstr "Filtro Personalizado" #: src/frontend/mame/ui/utils.cpp:87 msgid "Publisher" -msgstr "" +msgstr "Editor" #: src/frontend/mame/ui/utils.cpp:88 msgid "Supported" -msgstr "" +msgstr "Suportado" #: src/frontend/mame/ui/utils.cpp:89 msgid "Partially Supported" -msgstr "" +msgstr "Parcialmente Suportado" #: src/frontend/mame/ui/utils.cpp:90 msgid "Unsupported" -msgstr "" +msgstr "Não Suportado" #: src/frontend/mame/ui/utils.cpp:91 msgid "Release Region" -msgstr "" +msgstr "Região do Lançamento" #: src/frontend/mame/ui/utils.cpp:92 msgid "Device Type" -msgstr "" +msgstr "Tipo de Dispositivo" #: src/frontend/mame/ui/utils.cpp:93 msgid "Software List" -msgstr "" +msgstr "Lista de Software" #: src/frontend/mame/ui/utils.cpp:244 msgid "" -msgstr "" +msgstr "" #: src/frontend/mame/ui/utils.cpp:352 msgid "Select custom filters:" -msgstr "" +msgstr "Selecionar filtros personalizados:" #: src/frontend/mame/ui/utils.cpp:503 #, c-format msgid "Filter %1$u" -msgstr "" +msgstr "Filtro %1$u" #: src/frontend/mame/ui/utils.cpp:518 msgid "Remove last filter" -msgstr "" +msgstr "Remover último filtro" #: src/frontend/mame/ui/utils.cpp:520 msgid "Add filter" -msgstr "" +msgstr "Adicionar filtro" #: src/frontend/mame/ui/utils.cpp:959 msgid "Select category:" -msgstr "" +msgstr "Selecione categoria" #: src/frontend/mame/ui/utils.cpp:990 msgid "[no category INI files]" -msgstr "" +msgstr "[sem ficheiros INI de categoria]" #: src/frontend/mame/ui/utils.cpp:998 msgid "[no groups in INI file]" -msgstr "" +msgstr "[sem grupos no ficheiro INI]" #: src/frontend/mame/ui/utils.cpp:1032 msgid "No category INI files found" -msgstr "" +msgstr "Não foram encontrados ficheiros INI da categoria" #: src/frontend/mame/ui/utils.cpp:1037 msgid "File" -msgstr "" +msgstr "Ficheiro" #: src/frontend/mame/ui/utils.cpp:1041 msgid "No groups found in category file" -msgstr "" +msgstr "Não foram encontrados grupos no ficheiro da categoria" #: src/frontend/mame/ui/utils.cpp:1046 msgid "Group" -msgstr "" +msgstr "Grupo" #: src/frontend/mame/ui/utils.cpp:1047 msgid "Include clones" -msgstr "" +msgstr "Incluir clones" #: src/frontend/mame/ui/utils.cpp:1047 src/frontend/mame/ui/filecreate.cpp:82 msgid "Yes" -msgstr "" +msgstr "Sim" #: src/frontend/mame/ui/utils.cpp:1047 src/frontend/mame/ui/filecreate.cpp:81 msgid "No" -msgstr "" +msgstr "Não" #: src/frontend/mame/ui/simpleselgame.cpp:149 msgid "" @@ -799,6 +831,10 @@ msgid "" "\n" "Press any key to continue." msgstr "" +"O jogo selecionado tem uma ou mais ROM ou imagem CHD em falta. Por favor " +"selecione um jogo diferente.\n" +"\n" +"Pressione qualquer tecla para continuar." #: src/frontend/mame/ui/simpleselgame.cpp:241 #, c-format @@ -808,223 +844,228 @@ msgid "" "If this is your first time using %2$s, please see the config.txt file in the " "docs directory for information on configuring %2$s." msgstr "" +"Nenhuma máquina encontrada. Por favor verifique a rompath especificada " +"no ficheiro %1$s.ini .\n" +"\n" +"Se esta é a sua primeira vez que usa %2$s, por favor veja o ficheiro config." +"txt no diretório docs para informação sobre a configuração de %2$s." #: src/frontend/mame/ui/simpleselgame.cpp:271 #: src/frontend/mame/ui/selgame.cpp:440 msgid "Configure Options" -msgstr "" +msgstr "Configurar Opções" #: src/frontend/mame/ui/simpleselgame.cpp:292 #, c-format msgid "Type name or select: %1$s_" -msgstr "" +msgstr "Digite o nome ou selecione: %1$s_" #: src/frontend/mame/ui/simpleselgame.cpp:294 msgid "Type name or select: (random)" -msgstr "" +msgstr "Digite o nome ou selecione: (aleatório)" #: src/frontend/mame/ui/simpleselgame.cpp:308 #: src/frontend/mame/ui/selsoft.cpp:564 src/frontend/mame/ui/selsoft.cpp:571 #, c-format msgid "%1$-.100s" -msgstr "" +msgstr "%1$-.100s" #: src/frontend/mame/ui/simpleselgame.cpp:311 #: src/frontend/mame/ui/selmenu.cpp:570 src/frontend/mame/ui/selmenu.cpp:606 #, c-format msgid "%1$s, %2$-.100s" -msgstr "" +msgstr "%1$s, %2$-.100s" #: src/frontend/mame/ui/simpleselgame.cpp:314 #, c-format msgid "Driver: %1$-.100s" -msgstr "" +msgstr "Driver: %1$-.100s" #: src/frontend/mame/ui/simpleselgame.cpp:330 #: src/frontend/mame/ui/selmenu.cpp:619 msgid "Overall: NOT WORKING" -msgstr "" +msgstr "Global: NÃO FUNCIONA" #: src/frontend/mame/ui/simpleselgame.cpp:332 #: src/frontend/mame/ui/selmenu.cpp:621 msgid "Overall: Unemulated Protection" -msgstr "" +msgstr "Global: Proteção Não Emulada" #: src/frontend/mame/ui/simpleselgame.cpp:334 #: src/frontend/mame/ui/selmenu.cpp:623 msgid "Overall: Working" -msgstr "" +msgstr "Global: Funcional" #: src/frontend/mame/ui/simpleselgame.cpp:338 #: src/frontend/mame/ui/selmenu.cpp:627 msgid "Graphics: Unimplemented, " -msgstr "" +msgstr "Gráficos: Não Implementados, " #: src/frontend/mame/ui/simpleselgame.cpp:340 #: src/frontend/mame/ui/selmenu.cpp:629 msgid "Graphics: Imperfect, " -msgstr "" +msgstr "Gráficos: Imperfeitos, " #: src/frontend/mame/ui/simpleselgame.cpp:342 #: src/frontend/mame/ui/selmenu.cpp:631 msgid "Graphics: OK, " -msgstr "" +msgstr "Gráficos: OK, " #: src/frontend/mame/ui/simpleselgame.cpp:345 #: src/frontend/mame/ui/selmenu.cpp:634 msgid "Sound: None" -msgstr "" +msgstr "Som: Sem Som" #: src/frontend/mame/ui/simpleselgame.cpp:347 #: src/frontend/mame/ui/selmenu.cpp:636 msgid "Sound: Unimplemented" -msgstr "" +msgstr "Som: Não Implementado" #: src/frontend/mame/ui/simpleselgame.cpp:349 #: src/frontend/mame/ui/selmenu.cpp:638 msgid "Sound: Imperfect" -msgstr "" +msgstr "Som: Imperfeito" #: src/frontend/mame/ui/simpleselgame.cpp:351 #: src/frontend/mame/ui/selmenu.cpp:640 msgid "Sound: OK" -msgstr "" +msgstr "Som: OK" #: src/frontend/mame/ui/inputmap.cpp:53 msgid "User Interface" -msgstr "" +msgstr "Interface do Utilizador" #: src/frontend/mame/ui/inputmap.cpp:59 msgid "Other Controls" -msgstr "" +msgstr "Outros Controlos" #: src/frontend/mame/ui/menu.cpp:294 msgid "Return to Machine" -msgstr "" +msgstr "Voltar à Máquina" #: src/frontend/mame/ui/menu.cpp:299 src/frontend/mame/ui/menu.cpp:301 msgid "Exit" -msgstr "" +msgstr "Sair" #: src/frontend/mame/ui/menu.cpp:306 src/frontend/mame/ui/menu.cpp:308 msgid "Return to Previous Menu" -msgstr "" +msgstr "Voltar ao Menu Anterior" #: src/frontend/mame/ui/menu.cpp:742 msgid "Auto" -msgstr "" +msgstr "Automático" #: src/frontend/mame/ui/swlist.cpp:88 msgid "[file manager]" -msgstr "" +msgstr "[gestôr de ficheiros]" #: src/frontend/mame/ui/swlist.cpp:228 msgid "Switch Item Ordering" -msgstr "" +msgstr "Alterar Ordem dos Items" #: src/frontend/mame/ui/swlist.cpp:259 #, c-format msgid "Switched Order: entries now ordered by %s" -msgstr "" +msgstr "Ordem Alterada: Entradas agora ordenadas por %s" #: src/frontend/mame/ui/swlist.cpp:259 msgid "shortname" -msgstr "" +msgstr "nome curto" #: src/frontend/mame/ui/swlist.cpp:259 msgid "description" -msgstr "" +msgstr "descrição" #: src/frontend/mame/ui/swlist.cpp:389 msgid "[compatible lists]" -msgstr "" +msgstr "[listas compatíveis]" #: src/frontend/mame/ui/videoopt.cpp:56 #, c-format msgid "Screen #%d" -msgstr "" +msgstr "Ecrã #%d" #: src/frontend/mame/ui/videoopt.cpp:204 src/frontend/mame/ui/submenu.cpp:48 msgid "Rotate" -msgstr "" +msgstr "Rodar" #: src/frontend/mame/ui/videoopt.cpp:208 msgid "Backdrops" -msgstr "" +msgstr "Fundos" #: src/frontend/mame/ui/videoopt.cpp:212 msgid "Overlays" -msgstr "" +msgstr "Sobreposições" #: src/frontend/mame/ui/videoopt.cpp:216 msgid "Bezels" -msgstr "" +msgstr "Molduras" #: src/frontend/mame/ui/videoopt.cpp:220 msgid "CPanels" -msgstr "" +msgstr "Painéis de Controlo" #: src/frontend/mame/ui/videoopt.cpp:224 src/frontend/mame/ui/dirmenu.cpp:51 #: src/frontend/mame/ui/selmenu.cpp:64 msgid "Marquees" -msgstr "" +msgstr "Tabuletas" #: src/frontend/mame/ui/videoopt.cpp:228 msgid "View" -msgstr "" +msgstr "Vista" #: src/frontend/mame/ui/videoopt.cpp:228 msgid "Cropped" -msgstr "" +msgstr "Cortada" #: src/frontend/mame/ui/videoopt.cpp:228 msgid "Full" -msgstr "" +msgstr "Completa" #: src/frontend/mame/ui/filecreate.cpp:79 msgid "File Already Exists - Override?" -msgstr "" +msgstr "Ficheiro Já Existente - Sobrepor?" #: src/frontend/mame/ui/filecreate.cpp:171 msgid "New Image Name:" -msgstr "" +msgstr "Novo Nome da Imagem:" #: src/frontend/mame/ui/filecreate.cpp:177 msgid "Image Format:" -msgstr "" +msgstr "Formato da Imagem:" #: src/frontend/mame/ui/filecreate.cpp:183 msgid "Create" -msgstr "" +msgstr "Criar" #: src/frontend/mame/ui/filecreate.cpp:214 msgid "Please enter a file extension too" -msgstr "" +msgstr "Por favor digite também uma extensão para o ficheiro" #: src/frontend/mame/ui/filecreate.cpp:266 msgid "Select image format" -msgstr "" +msgstr "Seleccione o formato da imagem" #: src/frontend/mame/ui/barcode.cpp:74 msgid "New Barcode:" -msgstr "" +msgstr "Novo Código de Barras:" #: src/frontend/mame/ui/barcode.cpp:78 msgid "Enter Code" -msgstr "" +msgstr "Introduza o Código" #: src/frontend/mame/ui/barcode.cpp:119 msgid "Barcode length invalid!" -msgstr "" +msgstr "Tamanho de código de barras inválido!" #: src/frontend/mame/ui/selector.cpp:116 msgid "Selection List - Search: " -msgstr "" +msgstr "Lista de Seleção - Procurar: " #: src/frontend/mame/ui/selector.cpp:124 #, c-format msgid "Double click or press %1$s to select" -msgstr "" +msgstr "Clique duas vezes ou pressione %1$s para selecionar" #: src/frontend/mame/ui/selgame.cpp:313 src/frontend/mame/ui/selsoft.cpp:211 #, c-format @@ -1032,6 +1073,8 @@ msgid "" "%s\n" " added to favorites list." msgstr "" +"%s\n" +" adicionado à lista de favoritos." #: src/frontend/mame/ui/selgame.cpp:318 src/frontend/mame/ui/selgame.cpp:324 #: src/frontend/mame/ui/selsoft.cpp:216 @@ -1040,289 +1083,293 @@ msgid "" "%s\n" " removed from favorites list." msgstr "" +"%s\n" +" removido da lista de favoritos." #: src/frontend/mame/ui/selgame.cpp:441 msgid "Configure Machine" -msgstr "" +msgstr "Configurar Máquina" #: src/frontend/mame/ui/selgame.cpp:445 src/frontend/mame/ui/miscmenu.cpp:908 msgid "Plugins" -msgstr "" +msgstr "Plugins" #: src/frontend/mame/ui/selgame.cpp:853 #, c-format msgid "Romset\t%1$-.100s\n" -msgstr "" +msgstr "Romset\t%1$-.100s\n" #: src/frontend/mame/ui/selgame.cpp:854 #, c-format msgid "Year\t%1$s\n" -msgstr "" +msgstr "Ano\t%1$s\n" #: src/frontend/mame/ui/selgame.cpp:855 #, c-format msgid "Manufacturer\t%1$-.100s\n" -msgstr "" +msgstr "Fabricante\t%1$-.100s\n" #: src/frontend/mame/ui/selgame.cpp:859 #, c-format msgid "Driver is Clone of\t%1$-.100s\n" -msgstr "" +msgstr "Driver é Clone de\t%1$-.100s\n" #: src/frontend/mame/ui/selgame.cpp:861 msgid "Driver is Parent\t\n" -msgstr "" +msgstr "Driver é Principal\t\n" #: src/frontend/mame/ui/selgame.cpp:864 msgid "Analog Controls\tYes\n" -msgstr "" +msgstr "Controlos Analógicos\tSim\n" #: src/frontend/mame/ui/selgame.cpp:866 msgid "Keyboard Inputs\tYes\n" -msgstr "" +msgstr "Entradas de Teclado\tSim\n" #: src/frontend/mame/ui/selgame.cpp:869 msgid "Overall\tNOT WORKING\n" -msgstr "" +msgstr "Global\tNÃO FUNCIONAL\n" #: src/frontend/mame/ui/selgame.cpp:871 msgid "Overall\tUnemulated Protection\n" -msgstr "" +msgstr "Global\tProteção não Emulada\n" #: src/frontend/mame/ui/selgame.cpp:873 msgid "Overall\tWorking\n" -msgstr "" +msgstr "Global\tFuncional\n" #: src/frontend/mame/ui/selgame.cpp:876 msgid "Graphics\tUnimplemented\n" -msgstr "" +msgstr "Gráficos\tNão Implementados\n" #: src/frontend/mame/ui/selgame.cpp:878 msgid "Graphics\tWrong Colors\n" -msgstr "" +msgstr "Gráficos\tCores Erradas\n" #: src/frontend/mame/ui/selgame.cpp:880 msgid "Graphics\tImperfect Colors\n" -msgstr "" +msgstr "Gráficos\tCores Imperfeitas\n" #: src/frontend/mame/ui/selgame.cpp:882 msgid "Graphics\tImperfect\n" -msgstr "" +msgstr "Gráficos\tImperfeitos\n" #: src/frontend/mame/ui/selgame.cpp:884 msgid "Graphics\tOK\n" -msgstr "" +msgstr "Gráficos\tOK\n" #: src/frontend/mame/ui/selgame.cpp:887 msgid "Sound\tNone\n" -msgstr "" +msgstr "Som\tSem Som\n" #: src/frontend/mame/ui/selgame.cpp:889 msgid "Sound\tUnimplemented\n" -msgstr "" +msgstr "Som\tNão Implementado\n" #: src/frontend/mame/ui/selgame.cpp:891 msgid "Sound\tImperfect\n" -msgstr "" +msgstr "Som\tImperfeito\n" #: src/frontend/mame/ui/selgame.cpp:893 msgid "Sound\tOK\n" -msgstr "" +msgstr "Som\tOK\n" #: src/frontend/mame/ui/selgame.cpp:896 msgid "Controls\tUnimplemented\n" -msgstr "" +msgstr "Controlos\tNão Implementados\n" #: src/frontend/mame/ui/selgame.cpp:898 msgid "Controls\tImperfect\n" -msgstr "" +msgstr "Controlos\tImperfeitos\n" #: src/frontend/mame/ui/selgame.cpp:901 msgid "Keyboard\tUnimplemented\n" -msgstr "" +msgstr "Teclado\tNão Implementado\n" #: src/frontend/mame/ui/selgame.cpp:903 msgid "Keyboard\tImperfect\n" -msgstr "" +msgstr "Teclado\tImperfeito\n" #: src/frontend/mame/ui/selgame.cpp:906 msgid "Mouse\tUnimplemented\n" -msgstr "" +msgstr "Rato\tNão Implementado\n" #: src/frontend/mame/ui/selgame.cpp:908 msgid "Mouse\tImperfect\n" -msgstr "" +msgstr "Rato\tImperfeito\n" #: src/frontend/mame/ui/selgame.cpp:911 msgid "Microphone\tUnimplemented\n" -msgstr "" +msgstr "Microfone\tNão Implementado\n" #: src/frontend/mame/ui/selgame.cpp:913 msgid "Microphone\tImperfect\n" -msgstr "" +msgstr "Microfone\tImperfeito\n" #: src/frontend/mame/ui/selgame.cpp:916 msgid "Camera\tUnimplemented\n" -msgstr "" +msgstr "Câmara\tNão Implementada\n" #: src/frontend/mame/ui/selgame.cpp:918 msgid "Camera\tImperfect\n" -msgstr "" +msgstr "Câmara\tImperfeita\n" #: src/frontend/mame/ui/selgame.cpp:921 msgid "Disk\tUnimplemented\n" -msgstr "" +msgstr "Disco\tNão Implementado\n" #: src/frontend/mame/ui/selgame.cpp:923 msgid "Disk\tImperfect\n" -msgstr "" +msgstr "Disco\tImperfeito\n" #: src/frontend/mame/ui/selgame.cpp:926 msgid "Printer\tUnimplemented\n" -msgstr "" +msgstr "Impressora\tNão Implementada\n" #: src/frontend/mame/ui/selgame.cpp:928 msgid "Printer\tImperfect\n" -msgstr "" +msgstr "Impressora\tImperfeita\n" #: src/frontend/mame/ui/selgame.cpp:931 msgid "LAN\tUnimplemented\n" -msgstr "" +msgstr "Rede Local\tNão Implementada\n" #: src/frontend/mame/ui/selgame.cpp:933 msgid "LAN\tImperfect\n" -msgstr "" +msgstr "Rede Local\tImperfeita\n" #: src/frontend/mame/ui/selgame.cpp:936 msgid "WAN\tUnimplemented\n" -msgstr "" +msgstr "WAN\tNão Implementada\n" #: src/frontend/mame/ui/selgame.cpp:938 msgid "WAN\tImperfect\n" -msgstr "" +msgstr "WAN\tImperfeita\n" #: src/frontend/mame/ui/selgame.cpp:941 msgid "Timing\tUnimplemented\n" -msgstr "" +msgstr "Temporização\tNão Implementada\n" #: src/frontend/mame/ui/selgame.cpp:943 msgid "Timing\tImperfect\n" -msgstr "" +msgstr "Temporização\tImperfeita\n" #: src/frontend/mame/ui/selgame.cpp:945 msgid "Mechanical Machine\tYes\n" -msgstr "" +msgstr "Máquina Mecânica\tSim\n" #: src/frontend/mame/ui/selgame.cpp:945 msgid "Mechanical Machine\tNo\n" -msgstr "" +msgstr "Máquina Mecânica\tNão\n" #: src/frontend/mame/ui/selgame.cpp:946 msgid "Requires Artwork\tYes\n" -msgstr "" +msgstr "Requer Artwork\tSim\n" #: src/frontend/mame/ui/selgame.cpp:946 msgid "Requires Artwork\tNo\n" -msgstr "" +msgstr "Requer Artwork\tNão\n" #: src/frontend/mame/ui/selgame.cpp:947 msgid "Requires Clickable Artwork\tYes\n" -msgstr "" +msgid "Requer Artwork Clicável\tSim\n" #: src/frontend/mame/ui/selgame.cpp:947 msgid "Requires Clickable Artwork\tNo\n" -msgstr "" +msgid "Requer Artwork Clicável\tNão\n" #: src/frontend/mame/ui/selgame.cpp:948 msgid "Support Cocktail\tYes\n" -msgstr "" +msgstr "Suporta Cocktail\tSim\n" #: src/frontend/mame/ui/selgame.cpp:948 msgid "Support Cocktail\tNo\n" -msgstr "" +msgstr "Suporta Cocktail\tNão\n" #: src/frontend/mame/ui/selgame.cpp:949 msgid "Driver is BIOS\tYes\n" -msgstr "" +msgstr "Driver é BIOS\tSim\n" #: src/frontend/mame/ui/selgame.cpp:949 msgid "Driver is BIOS\tNo\n" -msgstr "" +msgstr "Driver é BIOS\tNão\n" #: src/frontend/mame/ui/selgame.cpp:950 msgid "Support Save\tYes\n" -msgstr "" +msgstr "Suporta Gravação\tSim\n" #: src/frontend/mame/ui/selgame.cpp:950 msgid "Support Save\tNo\n" -msgstr "" +msgstr "Suporta Gravação\tNão\n" #: src/frontend/mame/ui/selgame.cpp:951 msgid "Screen Orientation\tVertical\n" -msgstr "" +msgstr "Orientação de Ecrã\tVertical\n" #: src/frontend/mame/ui/selgame.cpp:951 msgid "Screen Orientation\tHorizontal\n" -msgstr "" +msgstr "Orientação de Ecrã\tHorizontal\n" #: src/frontend/mame/ui/selgame.cpp:961 msgid "Requires CHD\tYes\n" -msgstr "" +msgid "Requer CHD\tSim\n" #: src/frontend/mame/ui/selgame.cpp:961 msgid "Requires CHD\tNo\n" -msgstr "" +msgid "Requer CHD\tNão\n" #: src/frontend/mame/ui/selgame.cpp:974 msgid "ROM Audit Result\tOK\n" -msgstr "" +msgid "Resultado da Audit à ROM\tOK\n" #: src/frontend/mame/ui/selgame.cpp:976 msgid "ROM Audit Result\tBAD\n" -msgstr "" +msgid "Resultado da Audit à ROM\tFALHA\n" #: src/frontend/mame/ui/selgame.cpp:979 msgid "Samples Audit Result\tNone Needed\n" -msgstr "" +msgid "Resultado da Audit às Samples\tNenhuma Necessária\n" #: src/frontend/mame/ui/selgame.cpp:981 msgid "Samples Audit Result\tOK\n" -msgstr "" +msgid "Resultado da Audit às Samples\tOK\n" #: src/frontend/mame/ui/selgame.cpp:983 msgid "Samples Audit Result\tBAD\n" -msgstr "" +msgid "Resultado da Audit às Samples\tFALHA\n" #: src/frontend/mame/ui/selgame.cpp:987 msgid "" "ROM Audit Disabled\t\n" "Samples Audit Disabled\t\n" msgstr "" +"Audit à ROM Desabilitada\t\n" +"Audit às Samples Desabilitada\t\n" #: src/frontend/mame/ui/selgame.cpp:1171 #, c-format msgid "%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )" -msgstr "" +msgstr "%1$s %2$s ( %3$d / %4$d máquinas (%5$d BIOS) )" #: src/frontend/mame/ui/selgame.cpp:1187 src/frontend/mame/ui/selsoft.cpp:555 #, c-format msgid "%1$s: %2$s - Search: %3$s_" -msgstr "" +msgstr "%1$s: %2$s - Procura: %3$s_" #: src/frontend/mame/ui/selgame.cpp:1189 src/frontend/mame/ui/selsoft.cpp:557 #, c-format msgid "Search: %1$s_" -msgstr "" +msgstr "Procura: %1$s_" #: src/frontend/mame/ui/selgame.cpp:1199 #, c-format msgid "Romset: %1$-.100s" -msgstr "" +msgstr "Romset: %1$-.100s" #: src/frontend/mame/ui/selgame.cpp:1206 #, c-format msgid "System: %1$-.100s" -msgstr "" +msgstr "Sistema: %1$-.100s" #: src/frontend/mame/ui/selgame.cpp:1243 msgid "" @@ -1330,170 +1377,173 @@ msgid "" "Please select a different machine.\n" "\n" msgstr "" +"A máquina seleccionada tem uma ou mais ROMS ou imagens CHD necessárias em falta. " +"Por favor selecione uma máquina diferente.\n" +"\n" #: src/frontend/mame/ui/selgame.cpp:1249 src/frontend/mame/ui/selsoft.cpp:462 msgid "Press any key to continue." -msgstr "" +msgstr "Pressione qualquer tecla para continuar" #: src/frontend/mame/ui/dirmenu.cpp:35 msgid "ROMs" -msgstr "" +msgstr "ROMs" #: src/frontend/mame/ui/dirmenu.cpp:36 msgid "Software Media" -msgstr "" +msgstr "Ficheiros de Software" #: src/frontend/mame/ui/dirmenu.cpp:37 msgid "UI" -msgstr "" +msgstr "Interface" #: src/frontend/mame/ui/dirmenu.cpp:39 msgid "Samples" -msgstr "" +msgstr "Samples" #: src/frontend/mame/ui/dirmenu.cpp:40 msgid "DATs" -msgstr "" +msgstr "DATs" #: src/frontend/mame/ui/dirmenu.cpp:41 msgid "INIs" -msgstr "" +msgstr "INIs" #: src/frontend/mame/ui/dirmenu.cpp:42 msgid "Category INIs" -msgstr "" +msgstr "INIs de Categorias" #: src/frontend/mame/ui/dirmenu.cpp:43 msgid "Icons" -msgstr "" +msgstr "Ícones" #: src/frontend/mame/ui/dirmenu.cpp:44 src/frontend/mame/ui/submenu.cpp:25 msgid "Cheats" -msgstr "" +msgstr "Cheats" #: src/frontend/mame/ui/dirmenu.cpp:45 src/frontend/mame/ui/selmenu.cpp:49 msgid "Snapshots" -msgstr "" +msgstr "Snapshots" #: src/frontend/mame/ui/dirmenu.cpp:46 src/frontend/mame/ui/selmenu.cpp:50 msgid "Cabinets" -msgstr "" +msgstr "Armários Arcade" #: src/frontend/mame/ui/dirmenu.cpp:47 src/frontend/mame/ui/selmenu.cpp:53 msgid "Flyers" -msgstr "" +msgstr "Folhetos" #: src/frontend/mame/ui/dirmenu.cpp:48 src/frontend/mame/ui/selmenu.cpp:54 msgid "Titles" -msgstr "" +msgstr "Ecrãs Iniciais" #: src/frontend/mame/ui/dirmenu.cpp:49 src/frontend/mame/ui/selmenu.cpp:55 msgid "Ends" -msgstr "" +msgstr "Traseiras" #: src/frontend/mame/ui/dirmenu.cpp:50 src/frontend/mame/ui/selmenu.cpp:52 msgid "PCBs" -msgstr "" +msgstr "Placas Mãe" #: src/frontend/mame/ui/dirmenu.cpp:52 msgid "Controls Panels" -msgstr "" +msgstr "Painéis de Controlo" #: src/frontend/mame/ui/dirmenu.cpp:53 msgid "Crosshairs" -msgstr "" +msgstr "Miras" #: src/frontend/mame/ui/dirmenu.cpp:54 msgid "Artworks" -msgstr "" +msgstr "Artworks" #: src/frontend/mame/ui/dirmenu.cpp:55 src/frontend/mame/ui/selmenu.cpp:57 msgid "Bosses" -msgstr "" +msgstr "Bosses" #: src/frontend/mame/ui/dirmenu.cpp:56 msgid "Artworks Preview" -msgstr "" +msgstr "Amostra de Artworks" #: src/frontend/mame/ui/dirmenu.cpp:57 src/frontend/mame/ui/selmenu.cpp:63 msgid "Select" -msgstr "" +msgstr "Selecção" #: src/frontend/mame/ui/dirmenu.cpp:58 msgid "GameOver" -msgstr "" +msgstr "Fim do Jogo" #: src/frontend/mame/ui/dirmenu.cpp:59 src/frontend/mame/ui/selmenu.cpp:61 msgid "HowTo" -msgstr "" +msgstr "Como Fazer" #: src/frontend/mame/ui/dirmenu.cpp:60 src/frontend/mame/ui/selmenu.cpp:58 msgid "Logos" -msgstr "" +msgstr "Logos" #: src/frontend/mame/ui/dirmenu.cpp:61 src/frontend/mame/ui/selmenu.cpp:62 msgid "Scores" -msgstr "" +msgstr "Placares" #: src/frontend/mame/ui/dirmenu.cpp:62 src/frontend/mame/ui/selmenu.cpp:59 msgid "Versus" -msgstr "" +msgstr "Versus" #: src/frontend/mame/ui/dirmenu.cpp:63 src/frontend/mame/ui/selmenu.cpp:65 msgid "Covers" -msgstr "" +msgstr "Capas" #: src/frontend/mame/ui/dirmenu.cpp:116 msgid "Folders Setup" -msgstr "" +msgstr "Configurar Pastas" #: src/frontend/mame/ui/dirmenu.cpp:167 #, c-format msgid "Current %1$s Folders" -msgstr "" +msgstr "Pastas %1$s Atuais" #: src/frontend/mame/ui/dirmenu.cpp:179 msgid "Change Folder" -msgstr "" +msgstr "Mudar Pasta" #: src/frontend/mame/ui/dirmenu.cpp:179 msgid "Add Folder" -msgstr "" +msgstr "Adicionar Pasta" #: src/frontend/mame/ui/dirmenu.cpp:182 msgid "Remove Folder" -msgstr "" +msgstr "Remover Pasta" #: src/frontend/mame/ui/dirmenu.cpp:418 #, c-format msgid "Change %1$s Folder - Search: %2$s_" -msgstr "" +msgstr "Mudar Pasta %1$s - Procura: %2$s_" #: src/frontend/mame/ui/dirmenu.cpp:418 #, c-format msgid "Add %1$s Folder - Search: %2$s_" -msgstr "" +msgstr "Adicionar Pasta %1$s - Procura: %2$s_" #: src/frontend/mame/ui/dirmenu.cpp:429 msgid "Press TAB to set" -msgstr "" +msgstr "Pressione TAB para definir" #: src/frontend/mame/ui/dirmenu.cpp:513 #, c-format msgid "Remove %1$s Folder" -msgstr "" +msgstr "Remover Pasta %1$s" #: src/frontend/mame/ui/miscmenu.cpp:43 msgid "Keyboard Mode:" -msgstr "" +msgstr "Modo de Teclado:" #: src/frontend/mame/ui/miscmenu.cpp:43 msgid "Natural" -msgstr "" +msgstr "Natural" #: src/frontend/mame/ui/miscmenu.cpp:43 msgid "Emulated" -msgstr "" +msgstr "Emulado" #: src/frontend/mame/ui/miscmenu.cpp:236 #, c-format @@ -1501,6 +1551,8 @@ msgid "" "Uptime: %1$d:%2$02d:%3$02d\n" "\n" msgstr "" +"Tempo de execução: %1$d:%2$02d:%3$02d\n" +"\n" #: src/frontend/mame/ui/miscmenu.cpp:238 #, c-format @@ -1508,6 +1560,8 @@ msgid "" "Uptime: %1$d:%2$02d\n" "\n" msgstr "" +"Tempo de execução: %1$d:%2$02d\n" +"\n" #: src/frontend/mame/ui/miscmenu.cpp:242 #, c-format @@ -1515,49 +1569,52 @@ msgid "" "Tickets dispensed: %1$d\n" "\n" msgstr "" +"Tickets emitidos: %1$d\n" +"\n" #: src/frontend/mame/ui/miscmenu.cpp:253 msgid "Coin %1$c: NA%3$s\n" -msgstr "" +msgstr "Moeda %1$c: NA%3$s\n" #: src/frontend/mame/ui/miscmenu.cpp:253 #, c-format msgid "Coin %1$c: %2$d%3$s\n" -msgstr "" +msgstr "Moeda %1$c: %2$d%3$s\n" #: src/frontend/mame/ui/miscmenu.cpp:256 msgid " (locked)" -msgstr "" +msgstr " (travado)" #: src/frontend/mame/ui/miscmenu.cpp:503 msgid "Visible Delay" -msgstr "" +msgstr "Atraso Visível" #: src/frontend/mame/ui/miscmenu.cpp:601 #, c-format msgid "%s.xml saved under ui folder." -msgstr "" +msgstr "%s.xml gravado na pasta de interface." #: src/frontend/mame/ui/miscmenu.cpp:627 msgid "Name: Description:\n" -msgstr "" +msgstr "Nome: Descrição:\n" #: src/frontend/mame/ui/miscmenu.cpp:638 #, c-format msgid "%s.txt saved under ui folder." -msgstr "" +msgstr "%s.txt na pasta de interface." #: src/frontend/mame/ui/miscmenu.cpp:655 msgid "Export list in XML format (like -listxml)" -msgstr "" +msgstr "Exportar lista em formato XML (como -listxml)" #: src/frontend/mame/ui/miscmenu.cpp:656 msgid "Export list in XML format (like -listxml, but exclude devices)" msgstr "" +"Exportar lista em formato XML (como -listxml, mas excluindo dispositivos)" #: src/frontend/mame/ui/miscmenu.cpp:657 msgid "Export list in TXT format (like -listfull)" -msgstr "" +msgstr "Exportar lista em formato TXT (como -listfull)" #: src/frontend/mame/ui/miscmenu.cpp:709 src/frontend/mame/ui/ui.cpp:2217 msgid "" @@ -1565,179 +1622,184 @@ msgid "" " Configuration saved \n" "\n" msgstr "" +"\n" +" Configuração gravada \n" +"\n" #: src/frontend/mame/ui/miscmenu.cpp:763 msgid "Driver" -msgstr "" +msgstr "Driver" #: src/frontend/mame/ui/miscmenu.cpp:766 msgid "This machine has no BIOS." -msgstr "" +msgstr "Esta máquina não tem BIOS." #: src/frontend/mame/ui/miscmenu.cpp:775 src/frontend/mame/ui/mainmenu.cpp:145 msgid "Add To Favorites" -msgstr "" +msgstr "Adicionar aos Favoritos" #: src/frontend/mame/ui/miscmenu.cpp:777 src/frontend/mame/ui/mainmenu.cpp:147 msgid "Remove From Favorites" -msgstr "" +msgstr "Remover dos Favoritos" #: src/frontend/mame/ui/miscmenu.cpp:780 msgid "Save machine configuration" -msgstr "" +msgstr "Gravar configuração da máquina" #: src/frontend/mame/ui/miscmenu.cpp:791 msgid "Configure machine:" -msgstr "" +msgstr "Configurar máquina:" #: src/frontend/mame/ui/miscmenu.cpp:825 src/frontend/mame/ui/selmenu.cpp:2386 msgid " (default)" -msgstr "" +msgstr "(padrão)" #: src/frontend/mame/ui/imgcntrl.cpp:116 msgid "Cannot save over directory" -msgstr "" +msgstr "Não pode gravar sobre a pasta" #: src/frontend/mame/ui/imgcntrl.cpp:149 msgid "" "The software selected is missing one or more required ROM or CHD images. " "Please select a different one." msgstr "" +"O software selecionado tem uma ou mais ROM ou imagens CHD necessárias em falta. " +"Por favor selecione uma diferente." #: src/frontend/mame/ui/info_pty.cpp:30 src/frontend/mame/ui/mainmenu.cpp:99 msgid "Pseudo terminals" -msgstr "" +msgstr "Pseudo terminais" #: src/frontend/mame/ui/info_pty.cpp:39 msgid "[failed]" -msgstr "" +msgstr "[falhou]" #: src/frontend/mame/ui/mainmenu.cpp:60 msgid "Input (general)" -msgstr "" +msgstr "Input (geral)" #: src/frontend/mame/ui/mainmenu.cpp:62 msgid "Input (this Machine)" -msgstr "" +msgstr "Input (esta Máquina)" #: src/frontend/mame/ui/mainmenu.cpp:66 msgid "Analog Controls" -msgstr "" +msgstr "Controlos Analógicos" #: src/frontend/mame/ui/mainmenu.cpp:68 msgid "Dip Switches" -msgstr "" +msgstr "Dip Switches" #: src/frontend/mame/ui/mainmenu.cpp:71 msgid "Machine Configuration" -msgstr "" +msgstr "Configuração da Máquina" #: src/frontend/mame/ui/mainmenu.cpp:75 msgid "Bookkeeping Info" -msgstr "" +msgstr "Info de Contabilidade" #: src/frontend/mame/ui/mainmenu.cpp:78 msgid "Machine Information" -msgstr "" +msgstr "Informação da Máquina" #: src/frontend/mame/ui/mainmenu.cpp:85 msgid "Image Information" -msgstr "" +msgstr "Informação da Imagem" #: src/frontend/mame/ui/mainmenu.cpp:88 msgid "File Manager" -msgstr "" +msgstr "Gestôr de Ficheiros" #: src/frontend/mame/ui/mainmenu.cpp:96 msgid "Tape Control" -msgstr "" +msgstr "Controle da Cassete" #: src/frontend/mame/ui/mainmenu.cpp:102 msgid "BIOS Selection" -msgstr "" +msgstr "Selecção de BIOS" #: src/frontend/mame/ui/mainmenu.cpp:106 msgid "Slot Devices" -msgstr "" +msgstr "Dispositivos de Slot" #: src/frontend/mame/ui/mainmenu.cpp:110 msgid "Barcode Reader" -msgstr "" +msgstr "Leitor de Código de Barras" #: src/frontend/mame/ui/mainmenu.cpp:114 msgid "Network Devices" -msgstr "" +msgstr "Dispositivos de Rede" #: src/frontend/mame/ui/mainmenu.cpp:118 msgid "Keyboard Mode" -msgstr "" +msgstr "Modo do Teclado" #: src/frontend/mame/ui/mainmenu.cpp:121 msgid "Slider Controls" -msgstr "" +msgstr "Controlos Deslizantes" #: src/frontend/mame/ui/mainmenu.cpp:124 src/frontend/mame/ui/submenu.cpp:99 msgid "Video Options" -msgstr "" +msgstr "Opções de Video" #: src/frontend/mame/ui/mainmenu.cpp:128 msgid "Crosshair Options" -msgstr "" +msgstr "Opções de Miras" #: src/frontend/mame/ui/mainmenu.cpp:132 plugins/cheat/init.lua:683 msgid "Cheat" -msgstr "" +msgstr "Cheat" #: src/frontend/mame/ui/mainmenu.cpp:135 msgid "Plugin Options" -msgstr "" +msgstr "Opções de Plugins" #: src/frontend/mame/ui/mainmenu.cpp:139 msgid "External DAT View" -msgstr "" +msgstr "Visualização de DAT Externa" #: src/frontend/mame/ui/mainmenu.cpp:154 msgid "Select New Machine" -msgstr "" +msgstr "Seleccionar Nova Máquina" #: src/frontend/mame/ui/sndmenu.cpp:135 msgid "Sound" -msgstr "" +msgstr "Som" #: src/frontend/mame/ui/sndmenu.cpp:136 msgid "Sample Rate" -msgstr "" +msgstr "Frequência de Amostragem" #: src/frontend/mame/ui/sndmenu.cpp:137 msgid "Use External Samples" -msgstr "" +msgstr "Utilizar Samples Externas" #: src/frontend/mame/ui/sndmenu.cpp:149 src/frontend/mame/ui/optsmenu.cpp:210 msgid "Sound Options" -msgstr "" +msgstr "Opções de Som" #: src/frontend/mame/ui/viewgfx.cpp:406 msgid " COLORS" -msgstr "" +msgstr " CORES" #: src/frontend/mame/ui/viewgfx.cpp:406 msgid " PENS" -msgstr "" +msgstr " CANETAS" #: src/frontend/mame/ui/auditmenu.cpp:96 #, c-format msgid "Audit ROMs for %1$u machines marked unavailable?" -msgstr "" +msgstr "Auditar ROMs de %1$u máquinas marcadas como indisponíveis?" #: src/frontend/mame/ui/auditmenu.cpp:99 #, c-format msgid "Audit ROMs for all %1$u machines?" -msgstr "" +msgstr "Auditar ROMs de todas as %1$u máquinas?" #: src/frontend/mame/ui/auditmenu.cpp:104 #, c-format msgid "(results will be saved to %1$s)" -msgstr "" +msgstr "(os resultados serão gravados em %1$s)" #: src/frontend/mame/ui/auditmenu.cpp:130 #, c-format @@ -1745,402 +1807,404 @@ msgid "" "Auditing ROMs for machine %2$u of %3$u...\n" "%1$s" msgstr "" +"Auditando ROMs da máquina %2$u de %3$u...\n" +"%1$s" #: src/frontend/mame/ui/auditmenu.cpp:142 msgid "Start Audit" -msgstr "" +msgstr "Começar Audit" #: src/frontend/mame/ui/datmenu.cpp:80 msgid "Software Usage" -msgstr "" +msgstr "Utilização de Software" #: src/frontend/mame/ui/datmenu.cpp:362 msgid "Revision: " -msgstr "" +msgstr "Revisão: " #: src/frontend/mame/ui/selmenu.cpp:51 msgid "Control Panels" -msgstr "" +msgstr "Painéis de Controlo" #: src/frontend/mame/ui/selmenu.cpp:56 msgid "Artwork Preview" -msgstr "" +msgstr "Pré-Visualização da Artwork" #: src/frontend/mame/ui/selmenu.cpp:60 msgid "Game Over" -msgstr "" +msgstr "Fim de Jogo" #: src/frontend/mame/ui/selmenu.cpp:69 msgid "Add or remove favorites" -msgstr "" +msgstr "Adicionar ou remover favoritos" #: src/frontend/mame/ui/selmenu.cpp:70 msgid "Export displayed list to file" -msgstr "" +msgstr "Exportar lista visível para ficheiro" #: src/frontend/mame/ui/selmenu.cpp:71 msgid "Show DATs view" -msgstr "" +msgstr "Exibir visualização de DATs" #: src/frontend/mame/ui/selmenu.cpp:237 msgid "Software part selection:" -msgstr "" +msgstr "Selecção de Item de Software:" #: src/frontend/mame/ui/selmenu.cpp:343 msgid "BIOS selection:" -msgstr "" +msgstr "Selecção de BIOS:" #: src/frontend/mame/ui/selmenu.cpp:574 #, c-format msgid "Software is clone of: %1$-.100s" -msgstr "" +msgstr "O Software é clone de: %1$-.100s" #: src/frontend/mame/ui/selmenu.cpp:576 msgid "Software is parent" -msgstr "" +msgstr "O Software é original" #: src/frontend/mame/ui/selmenu.cpp:581 msgid "Supported: No" -msgstr "" +msgstr "Suportado: Não" #: src/frontend/mame/ui/selmenu.cpp:586 msgid "Supported: Partial" -msgstr "" +msgstr "Suportado: Parcial" #: src/frontend/mame/ui/selmenu.cpp:591 msgid "Supported: Yes" -msgstr "" +msgstr "Suportado: Sim" #: src/frontend/mame/ui/selmenu.cpp:596 #, c-format msgid "romset: %1$-.100s" -msgstr "" +msgstr "romset: %1$-.100s" #: src/frontend/mame/ui/selmenu.cpp:612 #, c-format msgid "Driver is clone of: %1$-.100s" -msgstr "" +msgstr "O Driver é clone de: %1$-.100s" #: src/frontend/mame/ui/selmenu.cpp:614 msgid "Driver is parent" -msgstr "" +msgstr "O Driver é original" #: src/frontend/mame/ui/selmenu.cpp:650 #, c-format msgid "%1$s %2$s" -msgstr "" +msgstr "%1$s %2$s" #: src/frontend/mame/ui/selmenu.cpp:1975 msgid "Images" -msgstr "" +msgstr "Imagens" #: src/frontend/mame/ui/selmenu.cpp:1976 msgid "Infos" -msgstr "" +msgstr "Infos" #: src/frontend/mame/ui/selmenu.cpp:2454 msgid "Usage" -msgstr "" +msgstr "Utilização" #: src/frontend/mame/ui/selmenu.cpp:2489 msgid "General Info" -msgstr "" +msgstr "Info Geral" #: src/frontend/mame/ui/submenu.cpp:22 msgid "Miscellaneous Options" -msgstr "" +msgstr "Opções Diversas" #: src/frontend/mame/ui/submenu.cpp:23 msgid "Re-select last machine played" -msgstr "" +msgstr "Re-seleccionar última máquina usada" #: src/frontend/mame/ui/submenu.cpp:24 msgid "Enlarge images in the right panel" -msgstr "" +msgstr "Aumentar imagens no painel direito" #: src/frontend/mame/ui/submenu.cpp:26 msgid "Show mouse pointer" -msgstr "" +msgstr "Mostrar ponteiro do rato" #: src/frontend/mame/ui/submenu.cpp:27 msgid "Confirm quit from machines" -msgstr "" +msgstr "Confirmar saída das máquinas" #: src/frontend/mame/ui/submenu.cpp:28 msgid "Skip information screen at startup" -msgstr "" +msgstr "Saltar ecrã de informação ao iniciar" #: src/frontend/mame/ui/submenu.cpp:29 msgid "Force 4:3 aspect for snapshot display" -msgstr "" +msgstr "Forçar aspecto 4:3 na exibição de snapshots" #: src/frontend/mame/ui/submenu.cpp:30 msgid "Use image as background" -msgstr "" +msgstr "Usar imagem como fundo" #: src/frontend/mame/ui/submenu.cpp:31 msgid "Skip BIOS selection menu" -msgstr "" +msgstr "Saltar menu de selecção de BIOS" #: src/frontend/mame/ui/submenu.cpp:32 msgid "Skip software parts selection menu" -msgstr "" +msgstr "Saltar menu de selecção de item de software" #: src/frontend/mame/ui/submenu.cpp:33 msgid "Info auto audit" -msgstr "" +msgstr "Auditoria automática no painel de Info" #: src/frontend/mame/ui/submenu.cpp:34 msgid "Hide romless machine from available list" -msgstr "" +msgstr "Esconder máquinas sem ROMs da lista de disponíveis" #: src/frontend/mame/ui/submenu.cpp:38 msgid "Advanced Options" -msgstr "" +msgstr "Opções Avançadas" #: src/frontend/mame/ui/submenu.cpp:39 msgid "Performance Options" -msgstr "" +msgstr "Opções de Performance" #: src/frontend/mame/ui/submenu.cpp:40 msgid "Auto frame skip" -msgstr "" +msgstr "Descarte automático de Frames" #: src/frontend/mame/ui/submenu.cpp:41 msgid "Frame skip" -msgstr "" +msgstr "Descarte de Frames" #: src/frontend/mame/ui/submenu.cpp:42 msgid "Throttle" -msgstr "" +msgstr "Controlo de Velocidade" #: src/frontend/mame/ui/submenu.cpp:43 msgid "Sleep" -msgstr "" +msgstr "Dormir" #: src/frontend/mame/ui/submenu.cpp:44 msgid "Speed" -msgstr "" +msgstr "Velocidade" #: src/frontend/mame/ui/submenu.cpp:45 msgid "Refresh speed" -msgstr "" +msgstr "Velocidade de Refrescamento" #: src/frontend/mame/ui/submenu.cpp:47 msgid "Rotation Options" -msgstr "" +msgstr "Opções de Rotação" #: src/frontend/mame/ui/submenu.cpp:49 msgid "Rotate right" -msgstr "" +msgstr "Rodar para a direita" #: src/frontend/mame/ui/submenu.cpp:50 msgid "Rotate left" -msgstr "" +msgstr "Rodar para a esquerda" #: src/frontend/mame/ui/submenu.cpp:51 msgid "Auto rotate right" -msgstr "" +msgstr "Auto-rodar à direita" #: src/frontend/mame/ui/submenu.cpp:52 msgid "Auto rotate left" -msgstr "" +msgstr "Auto rodar à esquerda" #: src/frontend/mame/ui/submenu.cpp:53 msgid "Flip X" -msgstr "" +msgstr "Inverter X" #: src/frontend/mame/ui/submenu.cpp:54 msgid "Flip Y" -msgstr "" +msgstr "Inverter Y" #: src/frontend/mame/ui/submenu.cpp:56 msgid "Artwork Options" -msgstr "" +msgstr "Opções de Artwork" #: src/frontend/mame/ui/submenu.cpp:57 msgid "Artwork Crop" -msgstr "" +msgstr "Crop de Artwork" #: src/frontend/mame/ui/submenu.cpp:58 msgid "Use Backdrops" -msgstr "" +msgstr "Usar Fundos" #: src/frontend/mame/ui/submenu.cpp:59 msgid "Use Overlays" -msgstr "" +msgstr "Usar Sobreposições" #: src/frontend/mame/ui/submenu.cpp:60 msgid "Use Bezels" -msgstr "" +msgstr "Usar Molduras" #: src/frontend/mame/ui/submenu.cpp:61 msgid "Use Control Panels" -msgstr "" +msgstr "Usar painéis de Controlo" #: src/frontend/mame/ui/submenu.cpp:62 msgid "Use Marquees" -msgstr "" +msgstr "Usar Tabuletas" #: src/frontend/mame/ui/submenu.cpp:64 msgid "State/Playback Options" -msgstr "" +msgstr "Opções de Estado/Reprodução" #: src/frontend/mame/ui/submenu.cpp:65 msgid "Automatic save/restore" -msgstr "" +msgstr "Guardar/Restaurar automático" #: src/frontend/mame/ui/submenu.cpp:66 msgid "Bilinear snapshot" -msgstr "" +msgstr "Snapshot Bi-linear" #: src/frontend/mame/ui/submenu.cpp:67 msgid "Burn-in" -msgstr "" +msgstr "Burn-in" #: src/frontend/mame/ui/submenu.cpp:69 msgid "Input Options" -msgstr "" +msgstr "Opções de Input" #: src/frontend/mame/ui/submenu.cpp:70 msgid "Coin lockout" -msgstr "" +msgstr "Bloqueio de Moedas" #: src/frontend/mame/ui/submenu.cpp:71 msgid "Mouse" -msgstr "" +msgstr "Rato" #: src/frontend/mame/ui/submenu.cpp:72 msgid "Joystick" -msgstr "" +msgstr "Joystick" #: src/frontend/mame/ui/submenu.cpp:73 msgid "Lightgun" -msgstr "" +msgstr "Pistola de Luz" #: src/frontend/mame/ui/submenu.cpp:74 msgid "Multi-keyboard" -msgstr "" +msgstr "Teclado Múltiplo" #: src/frontend/mame/ui/submenu.cpp:75 msgid "Multi-mouse" -msgstr "" +msgstr "Rato Múltiplo" #: src/frontend/mame/ui/submenu.cpp:76 msgid "Steadykey" -msgstr "" +msgstr "Steadykey" #: src/frontend/mame/ui/submenu.cpp:77 msgid "UI active" -msgstr "" +msgstr "Interface activa" #: src/frontend/mame/ui/submenu.cpp:78 msgid "Offscreen reload" -msgstr "" +msgstr "Recarregar fora de ecrã" #: src/frontend/mame/ui/submenu.cpp:79 msgid "Joystick deadzone" -msgstr "" +msgstr "Zona morta do Joystick" #: src/frontend/mame/ui/submenu.cpp:80 msgid "Joystick saturation" -msgstr "" +msgstr "Saturação do Joystick" #: src/frontend/mame/ui/submenu.cpp:81 msgid "Natural keyboard" -msgstr "" +msgstr "Teclado Natural" #: src/frontend/mame/ui/submenu.cpp:82 msgid "Simultaneous contradictory" -msgstr "" +msgstr "Contraditório Simultâneo" #: src/frontend/mame/ui/submenu.cpp:83 msgid "Coin impulse" -msgstr "" +msgstr "Impulso da Moeda" #: src/frontend/mame/ui/submenu.cpp:87 msgid "Device Mapping" -msgstr "" +msgstr "mapeamento de Dispositivos" #: src/frontend/mame/ui/submenu.cpp:88 msgid "Lightgun Device Assignment" -msgstr "" +msgstr "Atribuição do Dispositivo Pistola de Luz" #: src/frontend/mame/ui/submenu.cpp:89 msgid "Trackball Device Assignment" -msgstr "" +msgstr "Atribuição do Dispositivo trackball" #: src/frontend/mame/ui/submenu.cpp:90 msgid "Pedal Device Assignment" -msgstr "" +msgstr "Atribuição do Dispositivo Pedal" #: src/frontend/mame/ui/submenu.cpp:91 msgid "Adstick Device Assignment" -msgstr "" +msgstr "Atribuição do Dispositivo AD Stick" #: src/frontend/mame/ui/submenu.cpp:92 msgid "Paddle Device Assignment" -msgstr "" +msgstr "Atribuição do Dispositivo Paddle" #: src/frontend/mame/ui/submenu.cpp:93 msgid "Dial Device Assignment" -msgstr "" +msgstr "Atribuição do Dispositivo Botão Rotativo" #: src/frontend/mame/ui/submenu.cpp:94 msgid "Positional Device Assignment" -msgstr "" +msgstr "Atribuição do Dispositivo Posicional" #: src/frontend/mame/ui/submenu.cpp:95 msgid "Mouse Device Assignment" -msgstr "" +msgstr "Atribuição do Dispositivo Rato" #: src/frontend/mame/ui/submenu.cpp:100 msgid "Video Mode" -msgstr "" +msgstr "Modo de Video" #: src/frontend/mame/ui/submenu.cpp:101 msgid "Number Of Screens" -msgstr "" +msgstr "Número de Ecrãs" #: src/frontend/mame/ui/submenu.cpp:103 msgid "Triple Buffering" -msgstr "" +msgstr "Triple Buffering" #: src/frontend/mame/ui/submenu.cpp:104 msgid "HLSL" -msgstr "" +msgstr "HLSL" #: src/frontend/mame/ui/submenu.cpp:106 msgid "GLSL" -msgstr "" +msgstr "GLSL" #: src/frontend/mame/ui/submenu.cpp:107 msgid "Bilinear Filtering" -msgstr "" +msgstr "Filtragem Bi-linear" #: src/frontend/mame/ui/submenu.cpp:108 msgid "Bitmap Prescaling" -msgstr "" +msgstr "Bitmap Prescaling" #: src/frontend/mame/ui/submenu.cpp:109 msgid "Window Mode" -msgstr "" +msgstr "Modo de Janela" #: src/frontend/mame/ui/submenu.cpp:110 msgid "Enforce Aspect Ratio" -msgstr "" +msgstr "Forçar Aspecto" #: src/frontend/mame/ui/submenu.cpp:111 msgid "Start Out Maximized" -msgstr "" +msgstr "Começar Maximizado" #: src/frontend/mame/ui/submenu.cpp:112 msgid "Synchronized Refresh" -msgstr "" +msgstr "Refrescamento Sincronizado" #: src/frontend/mame/ui/submenu.cpp:113 msgid "Wait Vertical Sync" -msgstr "" +msgstr "Esperar pelo Sync Vertical" #: src/frontend/mame/ui/selsoft.cpp:456 msgid "" @@ -2148,48 +2212,53 @@ msgid "" "different software.\n" "\n" msgstr "" +"O software selecionado tem um ou mais ficheiros em falta. Por favor selecione " +"um software diferente.\n" +"\n" #: src/frontend/mame/ui/selsoft.cpp:549 #, c-format msgid "%1$s %2$s ( %3$d / %4$d software packages )" -msgstr "" +msgstr "%1$s %2$s ( %3$d / %4$d pacotes de software )" #: src/frontend/mame/ui/selsoft.cpp:550 #, c-format msgid "Driver: \"%1$s\" software list " -msgstr "" +msgstr "Driver: \"%1$s\" lista de software " #: src/frontend/mame/ui/ui.cpp:337 msgid "This driver requires images to be loaded in the following device(s): " msgstr "" +"Este driver necessita de imagens carregadas no(s) seguinte(s) " +"dispositivo(s): " #: src/frontend/mame/ui/ui.cpp:1084 src/frontend/mame/ui/ui.cpp:1094 msgid "Keyboard Emulation Status" -msgstr "" +msgstr "Estado da Emulação de Teclado" #: src/frontend/mame/ui/ui.cpp:1086 msgid "Mode: PARTIAL Emulation" -msgstr "" +msgstr "Modo: Emulação PARCIAL" #: src/frontend/mame/ui/ui.cpp:1087 msgid "UI: Enabled" -msgstr "" +msgstr "Interface: Activa" #: src/frontend/mame/ui/ui.cpp:1089 src/frontend/mame/ui/ui.cpp:1099 msgid "**Use ScrLock to toggle**" -msgstr "" +msgstr "**Use ScrLock para alternar**" #: src/frontend/mame/ui/ui.cpp:1096 msgid "Mode: FULL Emulation" -msgstr "" +msgstr "Modo: Emulação COMPLETA" #: src/frontend/mame/ui/ui.cpp:1097 msgid "UI: Disabled" -msgstr "" +msgstr "Interface: Desactivada" #: src/frontend/mame/ui/ui.cpp:1240 msgid "Autofire can't be enabled" -msgstr "" +msgstr "Auto-disparo não pode ser ativado" #: src/frontend/mame/ui/ui.cpp:1293 #, c-format @@ -2199,139 +2268,143 @@ msgid "" "Press ''%1$s'' to quit,\n" "Press ''%2$s'' to return to emulation." msgstr "" +"Tem a certeza que deseja sair?\n" +"\n" +"Pressione ''%1$s'' para sair,\n" +"Pressione ''%2$s'' para voltar à emulação." #: src/frontend/mame/ui/ui.cpp:1365 msgid "Master Volume" -msgstr "" +msgstr "Volume Global" #: src/frontend/mame/ui/ui.cpp:1374 #, c-format msgid "%1$s Volume" -msgstr "" +msgstr "%1$s Volume" #: src/frontend/mame/ui/ui.cpp:1398 #, c-format msgid "Overclock CPU %1$s" -msgstr "" +msgstr "Overclock CPU %1$s" #: src/frontend/mame/ui/ui.cpp:1407 #, c-format msgid "Overclock %1$s sound" -msgstr "" +msgstr "Overclock %1$s som" #: src/frontend/mame/ui/ui.cpp:1428 #, c-format msgid "%1$s Refresh Rate" -msgstr "" +msgstr "Taxa de refrescamento do %1$s" #: src/frontend/mame/ui/ui.cpp:1433 #, c-format msgid "%1$s Brightness" -msgstr "" +msgstr "Brilho do %1$s" #: src/frontend/mame/ui/ui.cpp:1435 #, c-format msgid "%1$s Contrast" -msgstr "" +msgstr "Contraste do %1$s" #: src/frontend/mame/ui/ui.cpp:1437 #, c-format msgid "%1$s Gamma" -msgstr "" +msgstr "Gama do %1$s" #: src/frontend/mame/ui/ui.cpp:1441 #, c-format msgid "%1$s Horiz Stretch" -msgstr "" +msgstr "Extensão Horizontal do %1$s" #: src/frontend/mame/ui/ui.cpp:1443 #, c-format msgid "%1$s Horiz Position" -msgstr "" +msgstr "Posição Horizontal do %1$s" #: src/frontend/mame/ui/ui.cpp:1445 #, c-format msgid "%1$s Vert Stretch" -msgstr "" +msgstr "Extensão Vertical do %1$s" #: src/frontend/mame/ui/ui.cpp:1447 #, c-format msgid "%1$s Vert Position" -msgstr "" +msgstr "Posição Vertical do %1$s" #: src/frontend/mame/ui/ui.cpp:1466 #, c-format msgid "Laserdisc '%1$s' Horiz Stretch" -msgstr "" +msgstr "Extensão Horizontal do Laserdisc '%1$s'" #: src/frontend/mame/ui/ui.cpp:1468 #, c-format msgid "Laserdisc '%1$s' Horiz Position" -msgstr "" +msgstr "Posição Horizontal do Laserdisc '%1$s'" #: src/frontend/mame/ui/ui.cpp:1470 #, c-format msgid "Laserdisc '%1$s' Vert Stretch" -msgstr "" +msgstr "Extensão Vertical do Laserdisc '%1$s'" #: src/frontend/mame/ui/ui.cpp:1472 #, c-format msgid "Laserdisc '%1$s' Vert Position" -msgstr "" +msgstr "Posição Vertical do Laserdisc '%1$s'" #: src/frontend/mame/ui/ui.cpp:1484 msgid "Vector Flicker" -msgstr "" +msgstr "Cintilação Vetorial" #: src/frontend/mame/ui/ui.cpp:1485 msgid "Beam Width Minimum" -msgstr "" +msgstr "Largura Mínima do Feixe de Luz" #: src/frontend/mame/ui/ui.cpp:1486 msgid "Beam Width Maximum" -msgstr "" +msgstr "Largura Máxixa do Feixe de Luz" #: src/frontend/mame/ui/ui.cpp:1487 msgid "Beam Intensity Weight" -msgstr "" +msgstr "Peso da Intensidade do Feixe" #: src/frontend/mame/ui/ui.cpp:1502 #, c-format msgid "Crosshair Scale %1$s" -msgstr "" +msgstr "Escala da Mira %1$s" #: src/frontend/mame/ui/ui.cpp:1502 src/frontend/mame/ui/ui.cpp:1504 msgid "X" -msgstr "" +msgstr "X" #: src/frontend/mame/ui/ui.cpp:1502 src/frontend/mame/ui/ui.cpp:1504 msgid "Y" -msgstr "" +msgstr "Y" #: src/frontend/mame/ui/ui.cpp:1504 #, c-format msgid "Crosshair Offset %1$s" -msgstr "" +msgstr "Ajuste da Mira %1$s" #: src/frontend/mame/ui/ui.cpp:1592 #, c-format msgid "%1$3ddB" -msgstr "" +msgstr "%1$3ddB" #: src/frontend/mame/ui/ui.cpp:1636 #, c-format msgid "%1$d%%" -msgstr "" +msgstr "%1$d%%" #: src/frontend/mame/ui/ui.cpp:1652 #, c-format msgid "%1$3.0f%%" -msgstr "" +msgstr "%1$3.0f%%" #: src/frontend/mame/ui/ui.cpp:1675 #, c-format msgid "%1$.3ffps" -msgstr "" +msgstr "%1$.3ffps" #: src/frontend/mame/ui/ui.cpp:1698 src/frontend/mame/ui/ui.cpp:1720 #: src/frontend/mame/ui/ui.cpp:1741 src/frontend/mame/ui/ui.cpp:1763 @@ -2341,147 +2414,147 @@ msgstr "" #: src/frontend/mame/ui/ui.cpp:1917 #, c-format msgid "%1$.3f" -msgstr "" +msgstr "%1$.3f" #: src/frontend/mame/ui/ui.cpp:1932 src/frontend/mame/ui/ui.cpp:1947 #: src/frontend/mame/ui/ui.cpp:1962 src/frontend/mame/ui/ui.cpp:1977 #, c-format msgid "%1$1.2f" -msgstr "" +msgstr "%1$1.2f" #: src/frontend/mame/ui/ui.cpp:1995 #, c-format msgid "Crosshair Scale X %1$1.3f" -msgstr "" +msgstr "Escala X da Mira %1$1.3f" #: src/frontend/mame/ui/ui.cpp:1995 #, c-format msgid "Crosshair Scale Y %1$1.3f" -msgstr "" +msgstr "Escala Y da Mira %1$1.3f" #: src/frontend/mame/ui/ui.cpp:2014 #, c-format msgid "Crosshair Offset X %1$1.3f" -msgstr "" +msgstr "Ajuste X da Mira %1$1.3f" #: src/frontend/mame/ui/ui.cpp:2014 #, c-format msgid "Crosshair Offset Y %1$1.3f" -msgstr "" +msgstr "Ajuste Y da Mira %1$1.3f" #: src/frontend/mame/ui/ui.cpp:2157 msgid "**Error saving ui.ini**" -msgstr "" +msgstr "**Erro ao gravar ui.ini**" #: src/frontend/mame/ui/ui.cpp:2213 #, c-format msgid "**Error saving %s.ini**" -msgstr "" +msgstr "**Erro ao gravar %s.ini**" #: src/frontend/mame/ui/optsmenu.cpp:193 msgid "Filter" -msgstr "" +msgstr "Filtro" #: src/frontend/mame/ui/optsmenu.cpp:206 msgid "Customize UI" -msgstr "" +msgstr "Personalizar Interface" #: src/frontend/mame/ui/optsmenu.cpp:207 msgid "Configure Directories" -msgstr "" +msgstr "Configurar Pastas" #: src/frontend/mame/ui/optsmenu.cpp:213 msgid "General Inputs" -msgstr "" +msgstr "Inputs Gerais" #: src/frontend/mame/ui/optsmenu.cpp:216 msgid "Save Configuration" -msgstr "" +msgstr "Gravar Configuração" #: src/frontend/mame/ui/optsmenu.cpp:228 msgid "Settings" -msgstr "" +msgstr "Configurações" #: plugins/timer/init.lua:94 msgid "Current time" -msgstr "" +msgstr "Tempo Actual" #: plugins/timer/init.lua:96 msgid "Total time" -msgstr "" +msgstr "Tempo Total" #: plugins/timer/init.lua:98 msgid "Play Count" -msgstr "" +msgstr "Play Count" #: plugins/timer/init.lua:106 msgid "Timer" -msgstr "" +msgstr "Temporizador" #: plugins/cheat/init.lua:458 msgid "Select cheat to set hotkey" -msgstr "" +msgstr "Seleccione cheat para atribuir hotkey" #: plugins/cheat/init.lua:464 msgid "Press button for hotkey or wait to clear" -msgstr "" +msgstr "pressione botão para hotkey ou espere" #: plugins/cheat/init.lua:476 msgid "None" -msgstr "" +msgstr "Nenhum" #: plugins/cheat/init.lua:481 msgid "Done" -msgstr "" +msgstr "Efectuado" #: plugins/cheat/init.lua:495 plugins/cheat/init.lua:509 msgid "Set" -msgstr "" +msgstr "Fixar" #: plugins/cheat/init.lua:528 msgid "Set hotkeys" -msgstr "" +msgstr "Atribuir hotkeys" #: plugins/cheat/init.lua:668 #, lua-format msgid "Activated: %s = %s" -msgstr "" +msgstr "Activado: %s = %s" #: plugins/cheat/init.lua:671 plugins/cheat/init.lua:729 #, lua-format msgid "Activated: %s" -msgstr "" +msgstr "Activado: %s" #: plugins/cheat/init.lua:733 #, lua-format msgid "Enabled: %s" -msgstr "" +msgstr "Ligado: %s" #: plugins/cheat/init.lua:738 #, lua-format msgid "Disabled: %s" -msgstr "" +msgstr "Desligado: %s" #: plugins/cheat/init.lua:776 #, lua-format msgid "%s added" -msgstr "" +msgstr "%s adicionado" #: plugins/data/data_command.lua:19 msgid "Command" -msgstr "" +msgstr "Comando" #: plugins/data/data_gameinit.lua:16 msgid "Gameinit" -msgstr "" +msgstr "Gameinit" #: plugins/data/data_hiscore.lua:770 plugins/data/data_hiscore.lua:818 msgid "High Scores" -msgstr "" +msgstr "Recordes" #: plugins/data/data_history.lua:15 msgid "History" -msgstr "" +msgstr "Histórico" #: plugins/data/data_mameinfo.lua:18 plugins/data/data_messinfo.lua:19 msgid "" @@ -2490,224 +2563,230 @@ msgid "" "--- DRIVER INFO ---\n" "Driver: " msgstr "" +"\n" +"\n" +"--- INFO de DRIVER ---\n" +"Driver: " #: plugins/data/data_mameinfo.lua:20 msgid "MAMEinfo" -msgstr "" +msgstr "MAMEinfo" #: plugins/data/data_messinfo.lua:21 msgid "MESSinfo" -msgstr "" +msgstr "MESSinfo" #: plugins/data/data_story.lua:22 msgid "Mamescore" -msgstr "" +msgstr "MAMEscore" #: plugins/data/data_sysinfo.lua:15 msgid "Sysinfo" -msgstr "" +msgstr "Sysinfo" #: plugins/data/data_marp.lua:129 msgid "MARPScore" -msgstr "" +msgstr "MARPScore" #: plugins/cheatfind/init.lua:344 msgid "Save Cheat" -msgstr "" +msgstr "Gravar Cheat" #: plugins/cheatfind/init.lua:347 msgid "Default" -msgstr "" +msgstr "Padrão" #: plugins/cheatfind/init.lua:347 msgid "Custom" -msgstr "" +msgstr "Personalizado" #: plugins/cheatfind/init.lua:348 msgid "Cheat Name" -msgstr "" +msgstr "Nome da Cheat" #: plugins/cheatfind/init.lua:354 #, lua-format msgid "Default name is %s" -msgstr "" +msgstr "Nome padrão é %s" #: plugins/cheatfind/init.lua:362 msgid "Player" -msgstr "" +msgstr "Jogador" #: plugins/cheatfind/init.lua:367 msgid "Type" -msgstr "" +msgstr "Tipo" #: plugins/cheatfind/init.lua:373 msgid "Save" -msgstr "" +msgstr "Gravar" #: plugins/cheatfind/init.lua:399 #, lua-format msgid "Cheat written to %s and added to cheat.simple" -msgstr "" +msgstr "Cheat gravada em %s e adicionada a cheat.simple" #: plugins/cheatfind/init.lua:407 msgid "Cheat added to cheat.simple" -msgstr "" +msgstr "Cheat adicionada a cheat.simple" #: plugins/cheatfind/init.lua:412 msgid "" "Unable to write file\n" "Ensure that cheatpath folder exists" msgstr "" +"Não foi possivel escrever ficheiro\n" +"Assegurar que a pasta cheatpath existe" #: plugins/cheatfind/init.lua:421 msgid "Cancel" -msgstr "" +msgstr "Cancelar" #: plugins/cheatfind/init.lua:426 msgid "CPU or RAM" -msgstr "" +msgstr "CPU ou RAM" #: plugins/cheatfind/init.lua:430 msgid "Changes to this only take effect when \"Start new search\" is selected" -msgstr "" +msgstr "Alterações a isto apenas têm efeito quando \"Começar nova procura\" está seleccionada" #: plugins/cheatfind/init.lua:449 msgid "Data cleared and current state saved" -msgstr "" +msgstr "Dados limpos e estado actual gravado" #: plugins/cheatfind/init.lua:457 msgid "Start new search" -msgstr "" +msgstr "Começar nova procura" #: plugins/cheatfind/init.lua:467 msgid "Current state saved" -msgstr "" +msgstr "Estado actual gravado" #: plugins/cheatfind/init.lua:474 msgid "Save current -- #" -msgstr "" +msgstr "Gravar actual -- #" #: plugins/cheatfind/init.lua:506 msgid " total matches found" -msgstr "" +msgstr " correspondências totais encontradas" #: plugins/cheatfind/init.lua:513 msgid "Compare" -msgstr "" +msgstr "Comparar" #: plugins/cheatfind/init.lua:516 msgid "Left operand" -msgstr "" +msgstr "Operando esquerdo" #: plugins/cheatfind/init.lua:519 msgid "Current" -msgstr "" +msgstr "Actual" #: plugins/cheatfind/init.lua:524 msgid "Operator" -msgstr "" +msgstr "Operador" #: plugins/cheatfind/init.lua:531 msgid "Left less than right, value is difference" -msgstr "" +msgstr "Esquerda menor que direita, valor é a diferença" #: plugins/cheatfind/init.lua:533 msgid "Left greater than right, value is difference" -msgstr "" +msgstr "Esquerda maior que direita, valor é a diferença" #: plugins/cheatfind/init.lua:535 msgid "Left equal to right" -msgstr "" +msgstr "Esquerda igual a direita" #: plugins/cheatfind/init.lua:537 msgid "Left not equal to right, value is difference" -msgstr "" +msgstr "Esquerda diferente de direita, valor é a diferença" #: plugins/cheatfind/init.lua:539 msgid "Left equal to right with bitmask" -msgstr "" +msgstr "Esquerda igual a direita com bitmask" #: plugins/cheatfind/init.lua:541 msgid "Left not equal to right with bitmask" -msgstr "" +msgstr "Esquerda diferente da direita com bitmask" #: plugins/cheatfind/init.lua:543 msgid "Left less than value" -msgstr "" +msgstr "Esquerda menor que valor" #: plugins/cheatfind/init.lua:545 msgid "Left greater than value" -msgstr "" +msgstr "Esquerda maior que valor" #: plugins/cheatfind/init.lua:547 msgid "Left equal to value" -msgstr "" +msgstr "Esquerda igual a valor" #: plugins/cheatfind/init.lua:549 msgid "Left not equal to value" -msgstr "" +msgstr "Esquerda diferente de valor" #: plugins/cheatfind/init.lua:560 msgid "Right operand" -msgstr "" +msgstr "Operando direito" #: plugins/cheatfind/init.lua:568 msgid "Value" -msgstr "" +msgstr "Valor" #: plugins/cheatfind/init.lua:572 msgid "Any" -msgstr "" +msgstr "Qualquer" #: plugins/cheatfind/init.lua:578 msgid "Data Format" -msgstr "" +msgstr "Formato de Dados" #: plugins/cheatfind/init.lua:602 msgid "Undo last search -- #" -msgstr "" +msgstr "Undo da última procura -- #" #: plugins/cheatfind/init.lua:606 msgid "Match block" -msgstr "" +msgstr "Match bloco" #: plugins/cheatfind/init.lua:609 msgid "All" -msgstr "" +msgstr "Todos" #: plugins/cheatfind/init.lua:660 #, lua-format msgid "Test cheat at addr %08X" -msgstr "" +msgstr "testar cheat no endereço %08X" #: plugins/cheatfind/init.lua:692 msgid "Cheat engine not available" -msgstr "" +msgstr "Motor de cheats não disponível" #: plugins/cheatfind/init.lua:718 msgid "Default name is " -msgstr "" +msgstr "Nome padrão é " #: plugins/cheatfind/init.lua:741 msgid "Test" -msgstr "" +msgstr "Teste" #: plugins/cheatfind/init.lua:741 msgid "Write" -msgstr "" +msgstr "Escrever" #: plugins/cheatfind/init.lua:741 msgid "Watch" -msgstr "" +msgstr "Monitorizar" #: plugins/cheatfind/init.lua:758 msgid "Page" -msgstr "" +msgstr "Página" #: plugins/cheatfind/init.lua:776 msgid "Clear Watches" -msgstr "" +msgstr "Limpar Monitorizações" #: plugins/cheatfind/init.lua:786 msgid "Cheat Finder" -msgstr "" +msgstr "Cheat Finder" -- cgit v1.2.3 From 3c38a8a4f0bcbbb341c78eecc12ee89205b10933 Mon Sep 17 00:00:00 2001 From: Dirk Best Date: Tue, 24 Oct 2017 14:19:06 +0200 Subject: einstein: Fix MT #6723 --- src/mame/drivers/einstein.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mame/drivers/einstein.cpp b/src/mame/drivers/einstein.cpp index a736d2e7fee..701253a1978 100644 --- a/src/mame/drivers/einstein.cpp +++ b/src/mame/drivers/einstein.cpp @@ -464,6 +464,7 @@ ADDRESS_MAP_END /* The I/O ports are decoded into 8 blocks using address lines A3 to A7 */ static ADDRESS_MAP_START( einstein_io, AS_IO, 8, einstein_state ) + ADDRESS_MAP_UNMAP_HIGH /* block 0, ay8910 psg */ AM_RANGE(0x02, 0x02) AM_MIRROR(0xff04) AM_DEVREADWRITE(IC_I030, ay8910_device, data_r, address_w) AM_RANGE(0x03, 0x03) AM_MIRROR(0xff04) AM_DEVWRITE(IC_I030, ay8910_device, data_w) -- cgit v1.2.3 From 992f45afb5b33d56734757433279189704931bf8 Mon Sep 17 00:00:00 2001 From: hap Date: Mon, 23 Oct 2017 19:08:59 +0200 Subject: uml: fix compile due to unused variable (nw) --- src/devices/cpu/uml.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/devices/cpu/uml.cpp b/src/devices/cpu/uml.cpp index 5a6fe3a8b3a..c066e254d1d 100644 --- a/src/devices/cpu/uml.cpp +++ b/src/devices/cpu/uml.cpp @@ -776,6 +776,7 @@ void uml::instruction::validate() // ensure the type is valid const parameter ¶m = m_param[pnum]; assert((opinfo.param[pnum].typemask >> param.type()) & 1); + (void)param; } // make sure we aren't missing any parameters -- cgit v1.2.3 From 09325542221d84c748b2cc0106fed886f05fd0ca Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Wed, 25 Oct 2017 01:34:02 +1100 Subject: Restore this, it's used when building packages (nw) --- roms/dir.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 roms/dir.txt diff --git a/roms/dir.txt b/roms/dir.txt new file mode 100644 index 00000000000..6a07c924677 --- /dev/null +++ b/roms/dir.txt @@ -0,0 +1 @@ +Place ROM directories here -- cgit v1.2.3 From a93391daa269ad116492629c13b27cf9ab36cedf Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Wed, 25 Oct 2017 03:14:17 +1100 Subject: logspam (nw) --- src/devices/bus/gamate/gamate_protection.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/devices/bus/gamate/gamate_protection.cpp b/src/devices/bus/gamate/gamate_protection.cpp index 4128b554cd1..4218a237a3f 100644 --- a/src/devices/bus/gamate/gamate_protection.cpp +++ b/src/devices/bus/gamate/gamate_protection.cpp @@ -4,6 +4,10 @@ #include "emu.h" #include "gamate_protection.h" +//#define VERBOSE 1 +#include "logmacro.h" + + DEFINE_DEVICE_TYPE(GAMATE_PROT, gamate_protection_device, "gamate_prot", "Gamate Protection Mapper") gamate_protection_device::gamate_protection_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : @@ -44,7 +48,7 @@ bool gamate_protection_device::is_protection_passed() WRITE_LINE_MEMBER(gamate_protection_device::prot_w) { - logerror("write to protection %01x\n", state); + LOG("write to protection %01x\n", state); if (m_inpos < 8) { @@ -53,7 +57,7 @@ WRITE_LINE_MEMBER(gamate_protection_device::prot_w) } else { - logerror("byte in was %c\n", m_inbyte); + LOG("byte in was %c\n", m_inbyte); if (!m_has_failed) { @@ -61,7 +65,7 @@ WRITE_LINE_MEMBER(gamate_protection_device::prot_w) { if (m_inbyte == m_prot_string[m_inseq]) { - logerror("OK\n"); + LOG("OK\n"); } else { @@ -78,7 +82,7 @@ WRITE_LINE_MEMBER(gamate_protection_device::prot_w) if (!m_has_failed && m_inseq == 15) { m_inbyte = 0x47; - logerror("setting byte to output\n"); + LOG("setting byte to output\n"); m_passed_write = 1; } } @@ -92,11 +96,11 @@ READ_LINE_MEMBER(gamate_protection_device::prot_r) int retval = (m_inbyte >> (7 - m_inpos)) & 1; m_inpos++; - logerror("read from protection %01x\n", retval); + LOG("read from protection %01x\n", retval); if (m_inpos == 8) { - logerror("unlocking ROM\n"); + LOG("unlocking ROM\n"); m_is_protection_passed = 1; m_inpos = 0; m_inbyte = 0; @@ -106,7 +110,7 @@ READ_LINE_MEMBER(gamate_protection_device::prot_r) } else { - logerror("read from protection when not ready\n"); + LOG("read from protection when not ready\n"); } return 0x0; -- cgit v1.2.3 From 25a9731de54c834396b0805d3b44ce4fda2414c0 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Wed, 25 Oct 2017 03:15:43 +1100 Subject: Update chinese translations [YuiFAN] --- language/Chinese_Simplified/strings.po | 65 ++++++++++++++++++--------------- language/Chinese_Traditional/strings.po | 61 +++++++++++++++++-------------- 2 files changed, 68 insertions(+), 58 deletions(-) diff --git a/language/Chinese_Simplified/strings.po b/language/Chinese_Simplified/strings.po index a807b405ab9..edb0fb1461a 100644 --- a/language/Chinese_Simplified/strings.po +++ b/language/Chinese_Simplified/strings.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: MAME\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-10-03 10:32+1100\n" -"PO-Revision-Date: 2017-09-29 15:23+0800\n" +"PO-Revision-Date: 2017-10-03 22:56+0800\n" "Last-Translator: YuiFAN\n" "Language-Team: MAME Language Team\n" "Language: zh_CN\n" @@ -181,6 +181,7 @@ msgid "" "complete. There is nothing you can do to fix this problem except wait for " "the developers to improve the emulation.\n" msgstr "" +"\n" "此机械无法执行,机械的模拟还不完全。除了等待开发人员改良模拟之外,没有方法可" "以解决这个问题。\n" @@ -1016,7 +1017,7 @@ msgstr "档案已存在 — 是否覆写?" #: src/frontend/mame/ui/filecreate.cpp:171 msgid "New Image Name:" -msgstr "新映象档名称:" +msgstr "新映像档名称:" #: src/frontend/mame/ui/filecreate.cpp:177 msgid "Image Format:" @@ -1244,51 +1245,51 @@ msgstr "计时\t不完美\n" #: src/frontend/mame/ui/selgame.cpp:945 msgid "Mechanical Machine\tYes\n" -msgstr "" +msgstr "机械式机台\t是\n" #: src/frontend/mame/ui/selgame.cpp:945 msgid "Mechanical Machine\tNo\n" -msgstr "" +msgstr "机械式机台\t否\n" #: src/frontend/mame/ui/selgame.cpp:946 msgid "Requires Artwork\tYes\n" -msgstr "" +msgstr "需要装饰图\t是\n" #: src/frontend/mame/ui/selgame.cpp:946 msgid "Requires Artwork\tNo\n" -msgstr "" +msgstr "需要装饰图\t否\n" #: src/frontend/mame/ui/selgame.cpp:947 msgid "Requires Clickable Artwork\tYes\n" -msgstr "" +msgstr "需要可点击的装饰图\t是\n" #: src/frontend/mame/ui/selgame.cpp:947 msgid "Requires Clickable Artwork\tNo\n" -msgstr "" +msgstr "需要可点击的装饰图\t否\n" #: src/frontend/mame/ui/selgame.cpp:948 msgid "Support Cocktail\tYes\n" -msgstr "" +msgstr "支援檯面型筐体\t是\n" #: src/frontend/mame/ui/selgame.cpp:948 msgid "Support Cocktail\tNo\n" -msgstr "" +msgstr "支援檯面型筐体\t否\n" #: src/frontend/mame/ui/selgame.cpp:949 msgid "Driver is BIOS\tYes\n" -msgstr "" +msgstr "驱动程式为 BIOS\t是\n" #: src/frontend/mame/ui/selgame.cpp:949 msgid "Driver is BIOS\tNo\n" -msgstr "" +msgstr "驱动程式为 BIOS\t否\n" #: src/frontend/mame/ui/selgame.cpp:950 msgid "Support Save\tYes\n" -msgstr "" +msgstr "支援即时存档\t是\n" #: src/frontend/mame/ui/selgame.cpp:950 msgid "Support Save\tNo\n" -msgstr "" +msgstr "支援即时存档\t否\n" #: src/frontend/mame/ui/selgame.cpp:951 msgid "Screen Orientation\tVertical\n" @@ -1300,37 +1301,39 @@ msgstr "画面方向\t水平\n" #: src/frontend/mame/ui/selgame.cpp:961 msgid "Requires CHD\tYes\n" -msgstr "" +msgstr "需要 CHD\t是\n" #: src/frontend/mame/ui/selgame.cpp:961 msgid "Requires CHD\tNo\n" -msgstr "" +msgstr "需要 CHD\t否\n" #: src/frontend/mame/ui/selgame.cpp:974 msgid "ROM Audit Result\tOK\n" -msgstr "" +msgstr "ROM 校验结果\tOK\n" #: src/frontend/mame/ui/selgame.cpp:976 msgid "ROM Audit Result\tBAD\n" -msgstr "" +msgstr "ROM 校验结果\t错误\n" #: src/frontend/mame/ui/selgame.cpp:979 msgid "Samples Audit Result\tNone Needed\n" -msgstr "" +msgstr "样本档校验结果\t不需要\n" #: src/frontend/mame/ui/selgame.cpp:981 msgid "Samples Audit Result\tOK\n" -msgstr "" +msgstr "样本档校验结果\tOK\n" #: src/frontend/mame/ui/selgame.cpp:983 msgid "Samples Audit Result\tBAD\n" -msgstr "" +msgstr "样本档校验结果\t错误\n" #: src/frontend/mame/ui/selgame.cpp:987 msgid "" "ROM Audit Disabled\t\n" "Samples Audit Disabled\t\n" msgstr "" +"ROM 校验已停用\t\n" +"样本档校验已停用\t\n" #: src/frontend/mame/ui/selgame.cpp:1171 #, c-format @@ -2495,27 +2498,27 @@ msgstr "设定热键" #: plugins/cheat/init.lua:668 #, lua-format msgid "Activated: %s = %s" -msgstr "" +msgstr "已激活: %s = %s" #: plugins/cheat/init.lua:671 plugins/cheat/init.lua:729 #, lua-format msgid "Activated: %s" -msgstr "" +msgstr "已激活: %s" #: plugins/cheat/init.lua:733 #, lua-format msgid "Enabled: %s" -msgstr "" +msgstr "启用: %s" #: plugins/cheat/init.lua:738 #, lua-format msgid "Disabled: %s" -msgstr "" +msgstr "停用: %s" #: plugins/cheat/init.lua:776 #, lua-format msgid "%s added" -msgstr "" +msgstr "%s 已加入" #: plugins/data/data_command.lua:19 msgid "Command" @@ -2523,7 +2526,7 @@ msgstr "出招表" #: plugins/data/data_gameinit.lua:16 msgid "Gameinit" -msgstr "" +msgstr "Gameinit" #: plugins/data/data_hiscore.lua:770 plugins/data/data_hiscore.lua:818 msgid "High Scores" @@ -2563,7 +2566,7 @@ msgstr "系统信息" #: plugins/data/data_marp.lua:129 msgid "MARPScore" -msgstr "MARPScore" +msgstr "MARP得分" #: plugins/cheatfind/init.lua:344 msgid "Save Cheat" @@ -2584,7 +2587,7 @@ msgstr "作弊码名称" #: plugins/cheatfind/init.lua:354 #, lua-format msgid "Default name is %s" -msgstr "" +msgstr "缺省名称为 %s" #: plugins/cheatfind/init.lua:362 msgid "Player" @@ -2601,7 +2604,7 @@ msgstr "储存" #: plugins/cheatfind/init.lua:399 #, lua-format msgid "Cheat written to %s and added to cheat.simple" -msgstr "" +msgstr "作弊码已写入至 %s 且已加入至 cheat.simple" #: plugins/cheatfind/init.lua:407 msgid "Cheat added to cheat.simple" @@ -2612,6 +2615,8 @@ msgid "" "Unable to write file\n" "Ensure that cheatpath folder exists" msgstr "" +"无法写入档案\n" +"确认 cheatpath 资料夹是否存在" #: plugins/cheatfind/init.lua:421 msgid "Cancel" diff --git a/language/Chinese_Traditional/strings.po b/language/Chinese_Traditional/strings.po index dac042151ee..77c88a84479 100644 --- a/language/Chinese_Traditional/strings.po +++ b/language/Chinese_Traditional/strings.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: MAME\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-10-03 10:32+1100\n" -"PO-Revision-Date: 2017-09-29 15:22+0800\n" +"PO-Revision-Date: 2017-10-03 22:41+0800\n" "Last-Translator: YuiFAN\n" "Language-Team: MAME Language Team\n" "Language: zh_TW\n" @@ -181,6 +181,7 @@ msgid "" "complete. There is nothing you can do to fix this problem except wait for " "the developers to improve the emulation.\n" msgstr "" +"\n" "此機台無法執行,機台的模擬還不完全。除了等待開發人員改良模擬之外,沒有方法可" "以解決這個問題。\n" @@ -1016,7 +1017,7 @@ msgstr "檔案已存在 — 是否覆蓋?" #: src/frontend/mame/ui/filecreate.cpp:171 msgid "New Image Name:" -msgstr "新映象檔名稱:" +msgstr "新映像檔名稱:" #: src/frontend/mame/ui/filecreate.cpp:177 msgid "Image Format:" @@ -1244,51 +1245,51 @@ msgstr "計時\t不完美\n" #: src/frontend/mame/ui/selgame.cpp:945 msgid "Mechanical Machine\tYes\n" -msgstr "" +msgstr "機械式機台\t是\n" #: src/frontend/mame/ui/selgame.cpp:945 msgid "Mechanical Machine\tNo\n" -msgstr "" +msgstr "機械式機台\t否\n" #: src/frontend/mame/ui/selgame.cpp:946 msgid "Requires Artwork\tYes\n" -msgstr "" +msgstr "需要裝飾圖\t是\n" #: src/frontend/mame/ui/selgame.cpp:946 msgid "Requires Artwork\tNo\n" -msgstr "" +msgstr "需要裝飾圖\t否\n" #: src/frontend/mame/ui/selgame.cpp:947 msgid "Requires Clickable Artwork\tYes\n" -msgstr "" +msgstr "需要可點擊的裝飾圖\t是\n" #: src/frontend/mame/ui/selgame.cpp:947 msgid "Requires Clickable Artwork\tNo\n" -msgstr "" +msgstr "需要可點擊的裝飾圖\t否\n" #: src/frontend/mame/ui/selgame.cpp:948 msgid "Support Cocktail\tYes\n" -msgstr "" +msgstr "支援檯面型筐體\t是\n" #: src/frontend/mame/ui/selgame.cpp:948 msgid "Support Cocktail\tNo\n" -msgstr "" +msgstr "支援檯面型筐體\t否\n" #: src/frontend/mame/ui/selgame.cpp:949 msgid "Driver is BIOS\tYes\n" -msgstr "" +msgstr "驅動程式為 BIOS\t是\n" #: src/frontend/mame/ui/selgame.cpp:949 msgid "Driver is BIOS\tNo\n" -msgstr "" +msgstr "驅動程式為 BIOS\t否\n" #: src/frontend/mame/ui/selgame.cpp:950 msgid "Support Save\tYes\n" -msgstr "" +msgstr "支援即時存檔\t是\n" #: src/frontend/mame/ui/selgame.cpp:950 msgid "Support Save\tNo\n" -msgstr "" +msgstr "支援即時存檔\t否\n" #: src/frontend/mame/ui/selgame.cpp:951 msgid "Screen Orientation\tVertical\n" @@ -1300,37 +1301,39 @@ msgstr "畫面方向\t水平\n" #: src/frontend/mame/ui/selgame.cpp:961 msgid "Requires CHD\tYes\n" -msgstr "" +msgstr "需要 CHD\t是\n" #: src/frontend/mame/ui/selgame.cpp:961 msgid "Requires CHD\tNo\n" -msgstr "" +msgstr "需要 CHD\t否\n" #: src/frontend/mame/ui/selgame.cpp:974 msgid "ROM Audit Result\tOK\n" -msgstr "" +msgstr "ROM 驗證結果\tOK\n" #: src/frontend/mame/ui/selgame.cpp:976 msgid "ROM Audit Result\tBAD\n" -msgstr "" +msgstr "ROM 驗證結果\t錯誤\n" #: src/frontend/mame/ui/selgame.cpp:979 msgid "Samples Audit Result\tNone Needed\n" -msgstr "" +msgstr "樣本檔驗證結果\t不需要\n" #: src/frontend/mame/ui/selgame.cpp:981 msgid "Samples Audit Result\tOK\n" -msgstr "" +msgstr "樣本檔驗證結果\tOK\n" #: src/frontend/mame/ui/selgame.cpp:983 msgid "Samples Audit Result\tBAD\n" -msgstr "" +msgstr "樣本檔驗證結果\t錯誤\n" #: src/frontend/mame/ui/selgame.cpp:987 msgid "" "ROM Audit Disabled\t\n" "Samples Audit Disabled\t\n" msgstr "" +"ROM 驗證已停用\t\n" +"樣本檔驗證已停用\t\n" #: src/frontend/mame/ui/selgame.cpp:1171 #, c-format @@ -2495,27 +2498,27 @@ msgstr "設定熱鍵" #: plugins/cheat/init.lua:668 #, lua-format msgid "Activated: %s = %s" -msgstr "" +msgstr "已啟動: %s = %s" #: plugins/cheat/init.lua:671 plugins/cheat/init.lua:729 #, lua-format msgid "Activated: %s" -msgstr "" +msgstr "已啟動: %s" #: plugins/cheat/init.lua:733 #, lua-format msgid "Enabled: %s" -msgstr "" +msgstr "啟用: %s" #: plugins/cheat/init.lua:738 #, lua-format msgid "Disabled: %s" -msgstr "" +msgstr "已停用: %s" #: plugins/cheat/init.lua:776 #, lua-format msgid "%s added" -msgstr "" +msgstr "$s 已加入" #: plugins/data/data_command.lua:19 msgid "Command" @@ -2584,7 +2587,7 @@ msgstr "作弊碼名稱" #: plugins/cheatfind/init.lua:354 #, lua-format msgid "Default name is %s" -msgstr "" +msgstr "預設名稱為 %s" #: plugins/cheatfind/init.lua:362 msgid "Player" @@ -2601,7 +2604,7 @@ msgstr "儲存" #: plugins/cheatfind/init.lua:399 #, lua-format msgid "Cheat written to %s and added to cheat.simple" -msgstr "" +msgstr "作弊碼已寫入至 %s 且已加入 cheat.simple" #: plugins/cheatfind/init.lua:407 msgid "Cheat added to cheat.simple" @@ -2612,6 +2615,8 @@ msgid "" "Unable to write file\n" "Ensure that cheatpath folder exists" msgstr "" +"無法寫入檔案\n" +"確認 cheatpath 資料夾是否存在" #: plugins/cheatfind/init.lua:421 msgid "Cancel" -- cgit v1.2.3 From 6c74139388e8d5e4fa9db027751526cba3cf4fd3 Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 25 Oct 2017 01:33:40 +0200 Subject: sms: workaround for MAME selecting a 3-screen view by default (nw) --- src/mame/layout/sms1.lay | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/mame/layout/sms1.lay b/src/mame/layout/sms1.lay index 3275da610d6..c6988743e6f 100644 --- a/src/mame/layout/sms1.lay +++ b/src/mame/layout/sms1.lay @@ -1,9 +1,14 @@ + + + + + -- cgit v1.2.3 From a5db728b9ce20577ca6c57896651d31448a21de3 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Wed, 25 Oct 2017 11:30:18 +1100 Subject: version bump (nw) --- android-project/app/src/main/AndroidManifest.xml | 4 ++-- makefile | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/android-project/app/src/main/AndroidManifest.xml b/android-project/app/src/main/AndroidManifest.xml index 397dce08615..b27d8c2025b 100644 --- a/android-project/app/src/main/AndroidManifest.xml +++ b/android-project/app/src/main/AndroidManifest.xml @@ -4,8 +4,8 @@ --> diff --git a/makefile b/makefile index cb15cb3f511..c16d8bb06ec 100644 --- a/makefile +++ b/makefile @@ -1547,14 +1547,14 @@ endif ifeq (posix,$(SHELLTYPE)) $(GENDIR)/version.cpp: $(GENDIR)/git_desc | $(GEN_FOLDERS) - @echo '#define BARE_BUILD_VERSION "0.190"' > $@ + @echo '#define BARE_BUILD_VERSION "0.191"' > $@ @echo 'extern const char bare_build_version[];' >> $@ @echo 'extern const char build_version[];' >> $@ @echo 'const char bare_build_version[] = BARE_BUILD_VERSION;' >> $@ @echo 'const char build_version[] = BARE_BUILD_VERSION " ($(NEW_GIT_VERSION))";' >> $@ else $(GENDIR)/version.cpp: $(GENDIR)/git_desc - @echo #define BARE_BUILD_VERSION "0.190" > $@ + @echo #define BARE_BUILD_VERSION "0.191" > $@ @echo extern const char bare_build_version[]; >> $@ @echo extern const char build_version[]; >> $@ @echo const char bare_build_version[] = BARE_BUILD_VERSION; >> $@ -- cgit v1.2.3 From 82f8b632a1beaaa597ff4c1b2f802a96eaf9e57d Mon Sep 17 00:00:00 2001 From: einstein95 Date: Wed, 25 Oct 2017 19:31:44 +1300 Subject: new not working clone - Gran Trak 10 (older) New Not Working Clone Added ----------------------------------------------- Gran Trak 10/Trak 10/Formula K (older) [TTL] [Ed Fries, Tim Giddens, Andy Welburn] --- src/mame/drivers/atarittl.cpp | 9 +++++++++ src/mame/mame.lst | 1 + 2 files changed, 10 insertions(+) diff --git a/src/mame/drivers/atarittl.cpp b/src/mame/drivers/atarittl.cpp index 04d9c1e7aff..23a83e7292f 100644 --- a/src/mame/drivers/atarittl.cpp +++ b/src/mame/drivers/atarittl.cpp @@ -393,6 +393,14 @@ ROM_START( gtrak10 ) ROM_END +ROM_START( gtrak10a ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) + + ROM_REGION( 0x0800, "racetrack", ROMREGION_ERASE00 ) + ROM_LOAD( "074181.j5", 0x0000, 0x0800, CRC(f564c58a) SHA1(8097419e22bd8b5fd2a9fe4ea89302046c42e583) ) // not actually a SN74181 but an Electronic Arrays, Inc. EA4800 16K (2048 x 8) ROM. TI TMS4800 clone (EA4800). Intentionally mislabeled by Atari. +ROM_END + + ROM_START( gtrak20 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) @@ -639,6 +647,7 @@ ROM_END GAME(1975, antiairc, 0, atarikee, 0, atarikee_state, 0, ROT0, "Atari", "Anti-Aircraft [TTL]", MACHINE_IS_SKELETON) GAME(1975, crashnsc, 0, atarikee, 0, atarikee_state, 0, ROT0, "Atari", "Crash 'n Score/Stock Car [TTL]", MACHINE_IS_SKELETON) GAME(1974, gtrak10, 0, atarikee, 0, atarikee_state, 0, ROT0, "Atari/Kee", "Gran Trak 10/Trak 10/Formula K [TTL]", MACHINE_IS_SKELETON) +GAME(1974, gtrak10a, gtrak10, atarikee, 0, atarikee_state, 0, ROT0, "Atari/Kee", "Gran Trak 10/Trak 10/Formula K (older) [TTL]", MACHINE_IS_SKELETON) GAME(1974, gtrak20, 0, atarikee, 0, atarikee_state, 0, ROT0, "Atari/Kee", "Gran Trak 20/Trak 20/Twin Racer [TTL]", MACHINE_IS_SKELETON) GAME(1976, indy4, 0, atarikee, 0, atarikee_state, 0, ROT0, "Atari/Kee", "Indy 4 [TTL]", MACHINE_IS_SKELETON) GAME(1975, indy800, 0, atarikee, 0, atarikee_state, 0, ROT90, "Atari/Kee", "Indy 800 [TTL]", MACHINE_IS_SKELETON) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index e54b6e9a650..1f7142fa497 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -2483,6 +2483,7 @@ laststar // (proto) (c) 1984 antiairc // (c) 1975 Atari crashnsc // (c) 1975 Atari gtrak10 // (c) 1974 Atari / Kee +gtrak10a // (c) 1974 Atari / Kee gtrak20 // (c) 1974 Atari / Kee indy4 // (c) 1976 Atari / Kee indy800 // (c) 1975 Atari / Kee -- cgit v1.2.3 From b4e8282023cb11659d1b785d3c010549c0ebfae5 Mon Sep 17 00:00:00 2001 From: Dirk Best Date: Wed, 25 Oct 2017 13:13:54 +0200 Subject: dsk_dsk: Don't segfault on empty tracks (fixes einstein 4game) --- src/lib/formats/dsk_dsk.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/lib/formats/dsk_dsk.cpp b/src/lib/formats/dsk_dsk.cpp index 08f76c90127..493c503c223 100644 --- a/src/lib/formats/dsk_dsk.cpp +++ b/src/lib/formats/dsk_dsk.cpp @@ -398,6 +398,11 @@ bool dsk_format::load(io_generic *io, uint32_t form_factor, floppy_image *image) continue; track_header tr; io_generic_read(io, &tr,track_offsets[(track<<1)+side],sizeof(tr)); + + // skip if there are no sectors in this track + if (tr.number_of_sector == 0) + continue; + desc_pc_sector sects[256]; uint8_t sect_data[65536]; int sdatapos = 0; -- cgit v1.2.3 From 67e07bc0b7a0f36ed6d9a6af087cc8f6cee8392a Mon Sep 17 00:00:00 2001 From: MetalliC <0vetal0@gmail.com> Date: Wed, 25 Oct 2017 15:22:01 +0300 Subject: typo fix (nw) --- language/Russian/strings.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/language/Russian/strings.po b/language/Russian/strings.po index 7741a5afa36..aa4e050c7d1 100644 --- a/language/Russian/strings.po +++ b/language/Russian/strings.po @@ -1576,12 +1576,12 @@ msgstr "" #: src/frontend/mame/ui/miscmenu.cpp:253 msgid "Coin %1$c: NA%3$s\n" -msgstr "Монетопримник %1$c: НД%3$s\n" +msgstr "Монетоприемник %1$c: НД%3$s\n" #: src/frontend/mame/ui/miscmenu.cpp:253 #, c-format msgid "Coin %1$c: %2$d%3$s\n" -msgstr "Монетопримник %1$c: %2$d%3$s\n" +msgstr "Монетоприемник %1$c: %2$d%3$s\n" #: src/frontend/mame/ui/miscmenu.cpp:256 msgid " (locked)" -- cgit v1.2.3 From 65d697d94d4b3beab0547a40243c5f546c548b7b Mon Sep 17 00:00:00 2001 From: fulivi Date: Wed, 25 Oct 2017 16:21:47 +0200 Subject: hp85: Mass storage optional ROM added to sw list --- hash/hp85_rom.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/hash/hp85_rom.xml b/hash/hp85_rom.xml index 9208db26d8e..370702d02a8 100644 --- a/hash/hp85_rom.xml +++ b/hash/hp85_rom.xml @@ -67,4 +67,17 @@ + + Mass storage ROM + 1979 + Hewlett-Packard + + + + + + + + + -- cgit v1.2.3 From a6b76aab2f65744c0367a9908c96f3f674803c42 Mon Sep 17 00:00:00 2001 From: fulivi Date: Wed, 25 Oct 2017 16:22:40 +0200 Subject: hp9895: 2 bugs fixed: NMI handling & secondary addressing in PHI chip --- src/devices/bus/ieee488/hp9895.cpp | 4 ++++ src/devices/machine/phi.cpp | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/devices/bus/ieee488/hp9895.cpp b/src/devices/bus/ieee488/hp9895.cpp index a3a52535f23..2d2d623aadf 100644 --- a/src/devices/bus/ieee488/hp9895.cpp +++ b/src/devices/bus/ieee488/hp9895.cpp @@ -484,6 +484,10 @@ WRITE8_MEMBER(hp9895_device::phi_dio_w) WRITE_LINE_MEMBER(hp9895_device::phi_int_w) { m_cpu->set_input_line(INPUT_LINE_NMI , state); + if (state) { + // Ensure the event queue is emptied before executing any other instruction + m_cpu->yield(); + } } READ8_MEMBER(hp9895_device::phi_reg_r) diff --git a/src/devices/machine/phi.cpp b/src/devices/machine/phi.cpp index 42cede7e6d8..e86a7bb72ce 100644 --- a/src/devices/machine/phi.cpp +++ b/src/devices/machine/phi.cpp @@ -1246,7 +1246,7 @@ bool phi_device::if_cmd_received(uint8_t byte) } } else { // command is a secondary address - if (m_t_state == PHI_T_ID1 && my_addr) { + if (m_t_state == PHI_T_ID1 && (m_l_state == PHI_L_LADS) == !!lon_msg() && my_addr) { // Start IDENTIFY sequence m_t_state = PHI_T_ID2; } else if (m_t_state >= PHI_T_ID2 && m_t_state <= PHI_T_ID6 && !my_addr) { -- cgit v1.2.3 From bd7800c9a658e53f87e221ba23b4367da6912b82 Mon Sep 17 00:00:00 2001 From: fulivi Date: Wed, 25 Oct 2017 16:25:42 +0200 Subject: hp85: support for I/O slots added. Emulation of HP82937 module added. --- scripts/src/bus.lua | 12 ++ scripts/src/machine.lua | 12 ++ scripts/target/mame/mess.lua | 2 + src/devices/bus/hp80_io/82937.cpp | 354 ++++++++++++++++++++++++++++++++++++ src/devices/bus/hp80_io/82937.h | 71 ++++++++ src/devices/bus/hp80_io/hp80_io.cpp | 150 +++++++++++++++ src/devices/bus/hp80_io/hp80_io.h | 107 +++++++++++ src/devices/machine/1mb5.cpp | 295 ++++++++++++++++++++++++++++++ src/devices/machine/1mb5.h | 95 ++++++++++ src/mame/drivers/hp80.cpp | 97 +++++++++- 10 files changed, 1190 insertions(+), 5 deletions(-) create mode 100644 src/devices/bus/hp80_io/82937.cpp create mode 100644 src/devices/bus/hp80_io/82937.h create mode 100644 src/devices/bus/hp80_io/hp80_io.cpp create mode 100644 src/devices/bus/hp80_io/hp80_io.h create mode 100644 src/devices/machine/1mb5.cpp create mode 100644 src/devices/machine/1mb5.h diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 29605ec7213..76e874b7fca 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -3162,6 +3162,18 @@ if (BUSES["HP80_OPTROM"]~=null) then } end +--------------------------------------------------- +-- +--@src/devices/bus/hp80_io/hp80_io.h,BUSES["HP80_IO"] = true +--------------------------------------------------- + +if (BUSES["HP80_IO"]~=null) then + files { + MAME_DIR .. "src/devices/bus/hp80_io/hp80_io.cpp", + MAME_DIR .. "src/devices/bus/hp80_io/82937.cpp", + } +end + --------------------------------------------------- -- --@src/devices/bus/hp9845_io/hp9845_io.h,BUSES["HP9845_IO"] = true diff --git a/scripts/src/machine.lua b/scripts/src/machine.lua index f0bb0db561b..d5a30d27756 100644 --- a/scripts/src/machine.lua +++ b/scripts/src/machine.lua @@ -1036,6 +1036,18 @@ if (MACHINES["1MA6"]~=null) then } end +--------------------------------------------------- +-- +--@src/devices/machine/1mb5.h,MACHINES["1MB5"] = true +--------------------------------------------------- + +if (MACHINES["1MB5"]~=null) then + files { + MAME_DIR .. "src/devices/machine/1mb5.cpp", + MAME_DIR .. "src/devices/machine/1mb5.h", + } +end + --------------------------------------------------- -- --@src/devices/machine/i2cmem.h,MACHINES["I2CMEM"] = true diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 916c4be6903..35209b53114 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -418,6 +418,7 @@ MACHINES["HD63450"] = true MACHINES["HD64610"] = true MACHINES["HP_TACO"] = true MACHINES["1MA6"] = true +MACHINES["1MB5"] = true MACHINES["I2CMEM"] = true MACHINES["I7220"] = true MACHINES["I80130"] = true @@ -682,6 +683,7 @@ BUSES["ISA"] = true BUSES["ISBX"] = true BUSES["HP_OPTROM"] = true BUSES["HP80_OPTROM"] = true +BUSES["HP80_IO"] = true BUSES["HP9845_IO"] = true BUSES["KC"] = true BUSES["LPCI"] = true diff --git a/src/devices/bus/hp80_io/82937.cpp b/src/devices/bus/hp80_io/82937.cpp new file mode 100644 index 00000000000..afeb561b8bc --- /dev/null +++ b/src/devices/bus/hp80_io/82937.cpp @@ -0,0 +1,354 @@ +// license:BSD-3-Clause +// copyright-holders: F. Ulivi +/********************************************************************* + + 82937.cpp + + 82937 module (HPIB interface) + + TODO: Implement Parallel Poll response + + Thanks to Tim Nye & Everett Kaser for dumping the 8049 ROM + + Main reference for this module is: + HP 82937-90007, oct 80, HP82937A HP-IB Installation and theory + of operation manual + +*********************************************************************/ + +#include "emu.h" +#include "82937.h" +#include "coreutil.h" + +// Debugging +#define VERBOSE 0 +#include "logmacro.h" + +// Bit manipulation +namespace { + static constexpr unsigned BIT_MASK(unsigned n) + { + return 1U << n; + } + + template void BIT_SET(T& w , unsigned n) + { + w |= (T)BIT_MASK(n); + } +} + +// Bits in U3 (m_latch) +static constexpr unsigned LATCH_CA_BIT = 5; // Controller Active +static constexpr unsigned LATCH_TA_BIT = 4; // Talker Active +static constexpr unsigned LATCH_EN_IFC_INT_BIT = 3; // Enable IFC interrupt +static constexpr unsigned LATCH_EN_REN_INT_BIT = 2; // Enable REN interrupt +static constexpr unsigned LATCH_EN_ATN_INT_BIT = 1; // Enable ATN interrupt +static constexpr unsigned LATCH_EN_NDAC_BIT = 0; // Enable NDAC + +// Bits on P1 port of 8049 +static constexpr unsigned P1_IFC_BIT = 7; +static constexpr unsigned P1_REN_BIT = 6; +static constexpr unsigned P1_SRQ_BIT = 5; +static constexpr unsigned P1_ATN_BIT = 4; +static constexpr unsigned P1_EOI_BIT = 3; +static constexpr unsigned P1_DAV_BIT = 2; +static constexpr unsigned P1_NDAC_BIT = 1; +static constexpr unsigned P1_NRFD_BIT = 0; + +hp82937_io_card_device::hp82937_io_card_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : hp80_io_card_device(mconfig , HP82937_IO_CARD , tag , owner , clock), + m_cpu(*this , "cpu"), + m_translator(*this , "xlator"), + m_sw1(*this , "sw1"), + m_ieee488(*this , IEEE488_TAG) +{ +} + +hp82937_io_card_device::~hp82937_io_card_device() +{ +} + +void hp82937_io_card_device::install_read_write_handlers(address_space& space , uint16_t base_addr) +{ + space.install_readwrite_handler(base_addr , base_addr + 1 , READ8_DEVICE_DELEGATE(m_translator , hp_1mb5_device , cpu_r) , WRITE8_DEVICE_DELEGATE(m_translator , hp_1mb5_device , cpu_w)); +} + +void hp82937_io_card_device::inten() +{ + m_translator->inten(); +} + +void hp82937_io_card_device::clear_service() +{ + m_translator->clear_service(); +} + +WRITE_LINE_MEMBER(hp82937_io_card_device::reset_w) +{ + m_cpu->set_input_line(INPUT_LINE_RESET , state); + if (state) { + // When reset is asserted, clear state + device_reset(); + } +} + +READ_LINE_MEMBER(hp82937_io_card_device::t0_r) +{ + return m_iatn; +} + +READ8_MEMBER(hp82937_io_card_device::p1_r) +{ + uint8_t res = 0; + + if (BIT(m_sw1->read() , 5)) { + // System controller + BIT_SET(res , P1_IFC_BIT); + BIT_SET(res , P1_REN_BIT); + } else { + // Not system controller + if (m_ieee488->ifc_r()) { + BIT_SET(res , P1_IFC_BIT); + } + if (m_ieee488->ren_r()) { + BIT_SET(res , P1_REN_BIT); + } + } + if (!BIT(m_latch , LATCH_CA_BIT) || m_ieee488->srq_r()) { + BIT_SET(res , P1_SRQ_BIT); + } + if (m_iatn) { + BIT_SET(res , P1_ATN_BIT); + } + bool ndac = !BIT(m_latch , LATCH_EN_NDAC_BIT) || m_iatn; + if (m_talker_out) { + BIT_SET(res , P1_EOI_BIT); + BIT_SET(res , P1_DAV_BIT); + if (ndac && m_ieee488->ndac_r()) { + BIT_SET(res , P1_NDAC_BIT); + } + if (m_ieee488->nrfd_r()) { + BIT_SET(res , P1_NRFD_BIT); + } + } else { + if (m_ieee488->eoi_r()) { + BIT_SET(res , P1_EOI_BIT); + } + if (m_ieee488->dav_r()) { + BIT_SET(res , P1_DAV_BIT); + } + if (ndac) { + BIT_SET(res , P1_NDAC_BIT); + } + BIT_SET(res , P1_NRFD_BIT); + } + + return res; +} + +WRITE8_MEMBER(hp82937_io_card_device::p1_w) +{ + update_signals(); + update_data_out(); +} + +READ8_MEMBER(hp82937_io_card_device::dio_r) +{ + if (m_dio_out) { + return 0xff; + } else { + return m_ieee488->dio_r(); + } +} + +WRITE8_MEMBER(hp82937_io_card_device::dio_w) +{ + update_data_out(); +} + +READ8_MEMBER(hp82937_io_card_device::switch_r) +{ + return m_sw1->read() | 0xc0; +} + +WRITE8_MEMBER(hp82937_io_card_device::latch_w) +{ + LOG("latch=%02x\n" , data); + m_latch = data; + update_signals(); + update_data_out(); +} + +WRITE_LINE_MEMBER(hp82937_io_card_device::ieee488_ctrl_w) +{ + update_signals(); + update_data_out(); +} + +static INPUT_PORTS_START(hp82937_port) + MCFG_HP80_IO_SC(7) + PORT_START("sw1") + PORT_DIPNAME(0x1f , 0x15 , "HPIB address") + PORT_DIPLOCATION("S1:7,6,5,4,3") + PORT_DIPSETTING(0x00 , "0") + PORT_DIPSETTING(0x01 , "1") + PORT_DIPSETTING(0x02 , "2") + PORT_DIPSETTING(0x03 , "3") + PORT_DIPSETTING(0x04 , "4") + PORT_DIPSETTING(0x05 , "5") + PORT_DIPSETTING(0x06 , "6") + PORT_DIPSETTING(0x07 , "7") + PORT_DIPSETTING(0x08 , "8") + PORT_DIPSETTING(0x09 , "9") + PORT_DIPSETTING(0x0a , "10") + PORT_DIPSETTING(0x0b , "11") + PORT_DIPSETTING(0x0c , "12") + PORT_DIPSETTING(0x0d , "13") + PORT_DIPSETTING(0x0e , "14") + PORT_DIPSETTING(0x0f , "15") + PORT_DIPSETTING(0x10 , "16") + PORT_DIPSETTING(0x11 , "17") + PORT_DIPSETTING(0x12 , "18") + PORT_DIPSETTING(0x13 , "19") + PORT_DIPSETTING(0x14 , "20") + PORT_DIPSETTING(0x15 , "21") + PORT_DIPSETTING(0x16 , "22") + PORT_DIPSETTING(0x17 , "23") + PORT_DIPSETTING(0x18 , "24") + PORT_DIPSETTING(0x19 , "25") + PORT_DIPSETTING(0x1a , "26") + PORT_DIPSETTING(0x1b , "27") + PORT_DIPSETTING(0x1c , "28") + PORT_DIPSETTING(0x1d , "29") + PORT_DIPSETTING(0x1e , "30") + PORT_DIPSETTING(0x1f , "31") + PORT_DIPNAME(0x20 , 0x20 , "Sys. controller") + PORT_DIPLOCATION("S1:2") + PORT_DIPSETTING(0x00 , DEF_STR(Off)) + PORT_DIPSETTING(0x20 , DEF_STR(On)) +INPUT_PORTS_END + +ioport_constructor hp82937_io_card_device::device_input_ports() const +{ + return INPUT_PORTS_NAME(hp82937_port); +} + +void hp82937_io_card_device::device_start() +{ + save_item(NAME(m_dio_out)); + save_item(NAME(m_talker_out)); + save_item(NAME(m_iatn)); + save_item(NAME(m_latch)); +} + +void hp82937_io_card_device::device_reset() +{ + hp80_io_card_device::device_reset(); + + m_latch = 0; + m_updating = false; + update_signals(); + update_data_out(); +} + +void hp82937_io_card_device::update_data_out() +{ + m_ieee488->dio_w(m_dio_out ? m_cpu->p2_r(machine().dummy_space() , 0) : 0xff); +} + +void hp82937_io_card_device::update_signals() +{ + // Avoid recursive re-enter when writing to IEEE488 signals + if (m_updating) { + return; + } + m_updating = true; + bool ctrl_active = BIT(m_latch , LATCH_CA_BIT); + uint8_t p1 = m_cpu->p1_r(machine().dummy_space() , 0); + m_iatn = BIT(p1 , P1_ATN_BIT); + if (ctrl_active) { + m_ieee488->atn_w(m_iatn); + m_ieee488->srq_w(1); + } else { + m_ieee488->atn_w(1); + m_iatn = m_iatn && m_ieee488->atn_r(); + m_ieee488->srq_w(BIT(p1 , P1_SRQ_BIT)); + } + m_talker_out = (ctrl_active && !m_iatn) || (BIT(m_latch , LATCH_TA_BIT) && m_iatn); + if (m_talker_out) { + m_ieee488->nrfd_w(1); + m_ieee488->dav_w(BIT(p1 , P1_DAV_BIT)); + m_ieee488->eoi_w(BIT(p1 , P1_EOI_BIT)); + m_ieee488->ndac_w(1); + + } else { + m_ieee488->nrfd_w(BIT(p1 , P1_NRFD_BIT)); + m_ieee488->dav_w(1); + m_ieee488->eoi_w(1); + bool ndac = BIT(p1 , P1_NDAC_BIT); + if (BIT(m_latch , LATCH_EN_NDAC_BIT) && !m_iatn) { + ndac = false; + } + m_ieee488->ndac_w(ndac); + } + bool iren = BIT(p1 , P1_REN_BIT); + if (BIT(m_sw1->read() , 5)) { + // System controller + m_ieee488->ren_w(iren); + m_ieee488->ifc_w(BIT(p1 , P1_IFC_BIT)); + } else { + // Not system controller + m_ieee488->ren_w(1); + iren = iren && m_ieee488->ren_r(); + m_ieee488->ifc_w(1); + } + bool not_u8_1 = m_iatn || m_ieee488->eoi_r(); + m_dio_out = not_u8_1 && m_talker_out; + bool irq = (BIT(m_latch , LATCH_EN_IFC_INT_BIT) && !m_ieee488->ifc_r()) || + (BIT(m_latch , LATCH_EN_REN_INT_BIT) && iren) || + (BIT(m_latch , LATCH_EN_ATN_INT_BIT) && !m_iatn); + m_cpu->set_input_line(MCS48_INPUT_IRQ , irq); + m_updating = false; +} + +ROM_START(hp82937) + ROM_REGION(0x800 , "cpu" , 0) + ROM_LOAD("1820-2437.bin" , 0 , 0x800 , CRC(687d1559) SHA1(44dfc8c3f431cd37a270b094f1db751214009214)) +ROM_END + +static ADDRESS_MAP_START(cpu_io_map , AS_IO , 8 , hp82937_io_card_device) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x00 , 0x01) AM_DEVREADWRITE("xlator" , hp_1mb5_device , uc_r , uc_w) + AM_RANGE(0x03 , 0x03) AM_READWRITE(switch_r , latch_w) +ADDRESS_MAP_END + +const tiny_rom_entry *hp82937_io_card_device::device_rom_region() const +{ + return ROM_NAME(hp82937); +} + +MACHINE_CONFIG_MEMBER(hp82937_io_card_device::device_add_mconfig) + MCFG_CPU_ADD("cpu" , I8049 , XTAL_11MHz) + MCFG_CPU_IO_MAP(cpu_io_map) + MCFG_MCS48_PORT_T0_IN_CB(READLINE(hp82937_io_card_device , t0_r)) + MCFG_MCS48_PORT_T1_IN_CB(DEVREADLINE("xlator" , hp_1mb5_device , int_r)) + MCFG_MCS48_PORT_P1_IN_CB(READ8(hp82937_io_card_device , p1_r)) + MCFG_MCS48_PORT_P1_OUT_CB(WRITE8(hp82937_io_card_device , p1_w)) + MCFG_MCS48_PORT_P2_IN_CB(READ8(hp82937_io_card_device , dio_r)) + MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(hp82937_io_card_device , dio_w)) + + MCFG_DEVICE_ADD("xlator" , HP_1MB5 , 0) + MCFG_1MB5_IRL_HANDLER(WRITELINE(hp82937_io_card_device , irl_w)) + MCFG_1MB5_HALT_HANDLER(WRITELINE(hp82937_io_card_device , halt_w)) + MCFG_1MB5_RESET_HANDLER(WRITELINE(hp82937_io_card_device , reset_w)) + + MCFG_IEEE488_SLOT_ADD("ieee_dev" , 0 , hp_ieee488_devices , nullptr) + MCFG_IEEE488_BUS_ADD() + MCFG_IEEE488_IFC_CALLBACK(WRITELINE(hp82937_io_card_device , ieee488_ctrl_w)) + MCFG_IEEE488_ATN_CALLBACK(WRITELINE(hp82937_io_card_device , ieee488_ctrl_w)) + MCFG_IEEE488_REN_CALLBACK(WRITELINE(hp82937_io_card_device , ieee488_ctrl_w)) + MCFG_IEEE488_EOI_CALLBACK(WRITELINE(hp82937_io_card_device , ieee488_ctrl_w)) +MACHINE_CONFIG_END + +// device type definition +DEFINE_DEVICE_TYPE(HP82937_IO_CARD, hp82937_io_card_device, "hp82937", "HP82937 card") diff --git a/src/devices/bus/hp80_io/82937.h b/src/devices/bus/hp80_io/82937.h new file mode 100644 index 00000000000..4402eee8a13 --- /dev/null +++ b/src/devices/bus/hp80_io/82937.h @@ -0,0 +1,71 @@ +// license:BSD-3-Clause +// copyright-holders: F. Ulivi +/********************************************************************* + + 82937.h + + 82937 module (HPIB interface) + +*********************************************************************/ + +#ifndef MAME_BUS_HP80_IO_82937_H +#define MAME_BUS_HP80_IO_82937_H + +#pragma once + +#include "hp80_io.h" +#include "cpu/mcs48/mcs48.h" +#include "bus/ieee488/ieee488.h" +#include "machine/1mb5.h" + +class hp82937_io_card_device : public hp80_io_card_device +{ +public: + // construction/destruction + hp82937_io_card_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + virtual ~hp82937_io_card_device(); + + virtual void install_read_write_handlers(address_space& space , uint16_t base_addr) override; + + virtual void inten() override; + virtual void clear_service() override; + + DECLARE_WRITE_LINE_MEMBER(reset_w); + DECLARE_READ_LINE_MEMBER(t0_r); + DECLARE_READ8_MEMBER(p1_r); + DECLARE_WRITE8_MEMBER(p1_w); + DECLARE_READ8_MEMBER(dio_r); + DECLARE_WRITE8_MEMBER(dio_w); + DECLARE_READ8_MEMBER(switch_r); + DECLARE_WRITE8_MEMBER(latch_w); + DECLARE_WRITE_LINE_MEMBER(ieee488_ctrl_w); + +protected: + virtual void device_start() override; + virtual void device_reset() override; + + // device-level overrides + virtual ioport_constructor device_input_ports() const override; + virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_add_mconfig(machine_config &config) override; + +private: + required_device m_cpu; + required_device m_translator; + required_ioport m_sw1; + required_device m_ieee488; + + bool m_dio_out; // U8-4 + bool m_talker_out; // U7-6 + bool m_iatn; + uint8_t m_latch; // U3 + bool m_updating; + + void update_data_out(); + void update_signals(); +}; + +// device type definition +DECLARE_DEVICE_TYPE(HP82937_IO_CARD, hp82937_io_card_device) + +#endif // MAME_BUS_HP80_IO_82937_H diff --git a/src/devices/bus/hp80_io/hp80_io.cpp b/src/devices/bus/hp80_io/hp80_io.cpp new file mode 100644 index 00000000000..e9ab08bb43c --- /dev/null +++ b/src/devices/bus/hp80_io/hp80_io.cpp @@ -0,0 +1,150 @@ +// license:BSD-3-Clause +// copyright-holders: F. Ulivi +/********************************************************************* + + hp80_io.cpp + + I/O bus of HP80 systems + +*********************************************************************/ + +#include "emu.h" +#include "hp80_io.h" + +// Debugging +#define VERBOSE 0 +#include "logmacro.h" + +// device type definition +DEFINE_DEVICE_TYPE(HP80_IO_SLOT, hp80_io_slot_device, "hp80_io_slot", "HP80 I/O Slot") + +// +-------------------+ +// |hp80_io_slot_device| +// +-------------------+ +hp80_io_slot_device::hp80_io_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, HP80_IO_SLOT, tag, owner, clock), + device_slot_interface(mconfig, *this), + m_irl_cb_func(*this), + m_halt_cb_func(*this), + m_slot_no(0) +{ +} + +hp80_io_slot_device::~hp80_io_slot_device() +{ +} + +void hp80_io_slot_device::device_start() +{ + m_irl_cb_func.resolve_safe(); + m_halt_cb_func.resolve_safe(); +} + +WRITE_LINE_MEMBER(hp80_io_slot_device::irl_w) +{ + LOG("irl_w slot %u=%d\n" , m_slot_no , state); + m_irl_cb_func(m_slot_no , state , 0xff); +} + +WRITE_LINE_MEMBER(hp80_io_slot_device::halt_w) +{ + LOG("halt_w slot %u=%d\n" , m_slot_no , state); + m_halt_cb_func(m_slot_no , state , 0xff); +} + +void hp80_io_slot_device::inten() +{ + hp80_io_card_device *card = downcast(get_card_device()); + + if (card != nullptr) { + card->inten(); + } +} + +void hp80_io_slot_device::clear_service() +{ + hp80_io_card_device *card = downcast(get_card_device()); + + if (card != nullptr) { + card->clear_service(); + } +} + +void hp80_io_slot_device::install_read_write_handlers(address_space& space) +{ + hp80_io_card_device *card = downcast(get_card_device()); + + if (card != nullptr) { + card->install_read_write_handlers(space , get_base_addr()); + } +} + +uint8_t hp80_io_slot_device::get_sc() const +{ + const hp80_io_card_device *card = downcast(get_card_device()); + + if (card != nullptr) { + return card->get_sc(); + } else { + return 0; + } +} + +uint16_t hp80_io_slot_device::get_base_addr() const +{ + const hp80_io_card_device *card = downcast(get_card_device()); + + if (card != nullptr) { + uint16_t addr = ((uint16_t)(card->get_sc() - HP80_IO_FIRST_SC) << 1) | 0xff50; + return addr; + } else { + return 0; + } +} + +// +-------------------+ +// |hp80_io_card_device| +// +-------------------+ +uint8_t hp80_io_card_device::get_sc() const +{ + return m_select_code_port->read() + HP80_IO_FIRST_SC; +} + +void hp80_io_card_device::inten() +{ +} + +void hp80_io_card_device::clear_service() +{ +} + +hp80_io_card_device::hp80_io_card_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, type, tag, owner, clock), + device_slot_card_interface(mconfig, *this), + m_select_code_port(*this , "SC") +{ +} + +hp80_io_card_device::~hp80_io_card_device() +{ +} + +WRITE_LINE_MEMBER(hp80_io_card_device::irl_w) +{ + LOG("irl_w card=%d\n" , state); + hp80_io_slot_device *slot = downcast(owner()); + slot->irl_w(state); +} + +WRITE_LINE_MEMBER(hp80_io_card_device::halt_w) +{ + LOG("halt_w card=%d\n" , state); + hp80_io_slot_device *slot = downcast(owner()); + slot->halt_w(state); +} + +#include "82937.h" + +SLOT_INTERFACE_START(hp80_io_slot_devices) +SLOT_INTERFACE("82937_hpib" , HP82937_IO_CARD) +SLOT_INTERFACE_END diff --git a/src/devices/bus/hp80_io/hp80_io.h b/src/devices/bus/hp80_io/hp80_io.h new file mode 100644 index 00000000000..64430f8b6b4 --- /dev/null +++ b/src/devices/bus/hp80_io/hp80_io.h @@ -0,0 +1,107 @@ +// license:BSD-3-Clause +// copyright-holders: F. Ulivi +/********************************************************************* + + hp80_io.h + + I/O bus of HP80 systems + +*********************************************************************/ + +#ifndef MAME_BUS_HP80_IO_HP80_IO_H +#define MAME_BUS_HP80_IO_HP80_IO_H + +#pragma once + +#define MCFG_HP80_IO_SLOT_ADD(_tag , _idx) \ + MCFG_DEVICE_ADD(_tag, HP80_IO_SLOT, 0) \ + MCFG_DEVICE_SLOT_INTERFACE(hp80_io_slot_devices, nullptr, false) \ + hp80_io_slot_device::set_slot_no(*device , _idx); + +#define MCFG_HP80_IO_IRL_CB(_devcb) \ + devcb = &hp80_io_slot_device::set_irl_cb_func(*device , DEVCB_##_devcb); + +#define MCFG_HP80_IO_HALT_CB(_devcb) \ + devcb = &hp80_io_slot_device::set_halt_cb_func(*device , DEVCB_##_devcb); + +#define HP80_IO_FIRST_SC 3 // Lowest SC used by I/O cards + +#define MCFG_HP80_IO_SC(_default_sc) \ + PORT_START("SC") \ + PORT_CONFNAME(0xf , (_default_sc) - HP80_IO_FIRST_SC , "Select Code") \ + PORT_CONFSETTING(0 , "3")\ + PORT_CONFSETTING(1 , "4")\ + PORT_CONFSETTING(2 , "5")\ + PORT_CONFSETTING(3 , "6")\ + PORT_CONFSETTING(4 , "7")\ + PORT_CONFSETTING(5 , "8")\ + PORT_CONFSETTING(6 , "9")\ + PORT_CONFSETTING(7 , "10") + +class hp80_io_slot_device : public device_t, + public device_slot_interface +{ +public: + // construction/destruction + hp80_io_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + virtual ~hp80_io_slot_device(); + + // static configuration helpers + static void set_slot_no(device_t &device, unsigned slot_no) { downcast(device).m_slot_no = slot_no; } + + // device-level overrides + virtual void device_start() override; + + // Callback setups + template static devcb_base &set_irl_cb_func(device_t &device, Object &&cb) { return downcast(device).m_irl_cb_func.set_callback(std::forward(cb)); } + template static devcb_base &set_halt_cb_func(device_t &device, Object &&cb) { return downcast(device).m_halt_cb_func.set_callback(std::forward(cb)); } + + // SC getter + uint8_t get_sc() const; + + uint16_t get_base_addr() const; + + void install_read_write_handlers(address_space& space); + + DECLARE_WRITE_LINE_MEMBER(irl_w); + DECLARE_WRITE_LINE_MEMBER(halt_w); + + void inten(); + void clear_service(); + +private: + devcb_write8 m_irl_cb_func; + devcb_write8 m_halt_cb_func; + unsigned m_slot_no; +}; + +class hp80_io_card_device : public device_t, + public device_slot_card_interface +{ +public: + // SC getter + uint8_t get_sc() const; + + virtual void install_read_write_handlers(address_space& space , uint16_t base_addr) = 0; + + virtual void inten(); + virtual void clear_service(); + +protected: + // construction/destruction + hp80_io_card_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + virtual ~hp80_io_card_device(); + + required_ioport m_select_code_port; + + // card device handling + DECLARE_WRITE_LINE_MEMBER(irl_w); + DECLARE_WRITE_LINE_MEMBER(halt_w); +}; + +// device type definition +DECLARE_DEVICE_TYPE(HP80_IO_SLOT, hp80_io_slot_device) + +SLOT_INTERFACE_EXTERN(hp80_io_slot_devices); + +#endif // MAME_BUS_HP80_IO_HP80_IO_H diff --git a/src/devices/machine/1mb5.cpp b/src/devices/machine/1mb5.cpp new file mode 100644 index 00000000000..0aa151251d2 --- /dev/null +++ b/src/devices/machine/1mb5.cpp @@ -0,0 +1,295 @@ +// license:BSD-3-Clause +// copyright-holders:F. Ulivi +/********************************************************************* + + 1mb5.cpp + + HP-8x I/O Translator chip (1MB5-0101) + + Reference for this chip: + HP, aug 79, 1MB5 Detailed specification - Translator chip + +*********************************************************************/ + +#include "emu.h" +#include "1mb5.h" + +// Debugging +#define VERBOSE 0 +#include "logmacro.h" + +// device type definition +DEFINE_DEVICE_TYPE(HP_1MB5, hp_1mb5_device, "hp_1mb5", "HP 1MB5") + +// Bit manipulation +namespace { + static constexpr unsigned BIT_MASK(unsigned n) + { + return 1U << n; + } + + template void BIT_CLR(T& w , unsigned n) + { + w &= ~(T)BIT_MASK(n); + } + + template void BIT_SET(T& w , unsigned n) + { + w |= (T)BIT_MASK(n); + } + + template void COPY_BIT(bool bit , T& w , unsigned n) + { + if (bit) { + BIT_SET(w , n); + } else { + BIT_CLR(w , n); + } + } +} + +hp_1mb5_device::hp_1mb5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +: device_t(mconfig , HP_1MB5 , tag , owner , clock), + m_irl_handler(*this), + m_halt_handler(*this), + m_reset_handler(*this), + m_int_handler(*this) +{ +} + +READ8_MEMBER(hp_1mb5_device::cpu_r) +{ + uint8_t res = 0; + + switch (offset) { + case 0: + // Read SR + res = m_sr & 0x7e; + if (m_obf) { + BIT_SET(res , 7); + } + if (m_ibf) { + BIT_SET(res , 0); + } + break; + + case 1: + // Read IB + res = m_ib; + m_ibf = false; + update_halt(); + break; + } + + //LOG("RD %u=%02x\n" , offset , res); + return res; +} + +WRITE8_MEMBER(hp_1mb5_device::cpu_w) +{ + //LOG("WR %u=%02x\n" , offset , data); + bool need_resched = false; + + switch (offset) { + case 0: + // Write CR + m_cr = data; + need_resched |= set_reset(BIT(m_cr , 7)); + need_resched |= set_int(!BIT(m_cr , 0)); + break; + + case 1: + // Write OB + m_ob = data; + m_obf = true; + update_halt(); + break; + } + if (need_resched) { + LOG("resched %s\n" , space.device().tag()); + space.device().execute().yield(); + } +} + +READ8_MEMBER(hp_1mb5_device::uc_r) +{ + uint8_t res = 0; + bool need_resched = false; + + switch (offset) { + case 0: + // Read CR + res = m_cr & 0x7e; + if (m_obf) { + BIT_SET(res , 7); + } + if (m_ibf) { + BIT_SET(res , 0); + } + break; + + case 1: + // Read OB + res = m_ob; + m_obf = false; + need_resched |= update_halt(); + break; + } + + if (need_resched) { + LOG("resched %s\n" , space.device().tag()); + space.device().execute().spin(); + } + //LOG("RDU %u=%02x\n" , offset , res); + return res; +} + +WRITE8_MEMBER(hp_1mb5_device::uc_w) +{ + //LOG("WRU %u=%02x SR=%02x\n" , offset , data , m_sr); + bool need_resched = false; + + switch (offset) { + case 0: + // Write SR + if (!BIT(m_sr , 0) && BIT(data , 0)) { + need_resched |= set_service(true); + } + m_sr = data; + m_hlten = BIT(m_sr , 7); + if (update_halt() && !m_halt) { + need_resched = true; + } + break; + + case 1: + // Write IB + m_ib = data; + m_ibf = true; + need_resched |= update_halt(); + break; + } + if (need_resched) { + LOG("resched %s\n" , space.device().tag()); + space.device().execute().spin(); + } +} + +READ_LINE_MEMBER(hp_1mb5_device::irl_r) +{ + return m_service; +} + +READ_LINE_MEMBER(hp_1mb5_device::halt_r) +{ + return m_halt; +} + +READ_LINE_MEMBER(hp_1mb5_device::reset_r) +{ + return m_reset; +} + +READ_LINE_MEMBER(hp_1mb5_device::int_r) +{ + return m_cint; +} + +void hp_1mb5_device::inten() +{ + // Enabling interrupts (i.e. writing to 0xff40) removes uC reset + set_reset(false); +} + +void hp_1mb5_device::clear_service() +{ + set_service(false); +} + +void hp_1mb5_device::device_start() +{ + m_irl_handler.resolve_safe(); + m_halt_handler.resolve_safe(); + m_reset_handler.resolve_safe(); + m_int_handler.resolve_safe(); + + save_item(NAME(m_sr)); + save_item(NAME(m_cr)); + save_item(NAME(m_ib)); + save_item(NAME(m_ob)); + save_item(NAME(m_ibf)); + save_item(NAME(m_obf)); + save_item(NAME(m_hlten)); + save_item(NAME(m_service)); + save_item(NAME(m_cint)); + save_item(NAME(m_reset)); + save_item(NAME(m_halt)); +} + +void hp_1mb5_device::device_reset() +{ + m_sr = 0; + m_cr = 0; + m_ib = 0; + m_ob = 0; + m_ibf = false; + m_obf = false; + m_hlten = false; + m_service = false; + m_cint = true; + m_reset = true; + m_halt = false; + + m_irl_handler(false); + m_halt_handler(false); + m_reset_handler(true); + m_int_handler(true); +} + +bool hp_1mb5_device::set_service(bool new_service) +{ + if (new_service != m_service) { + m_service = new_service; + //LOG("irl=%d\n" , m_service); + m_irl_handler(m_service); + return true; + } else { + return false; + } +} + +bool hp_1mb5_device::update_halt() +{ + bool new_halt = m_hlten && m_obf && !m_ibf; + if (new_halt != m_halt) { + //LOG("HALT=%d\n" , new_halt); + m_halt = new_halt; + m_halt_handler(m_halt); + return true; + } else { + return false; + } +} + +bool hp_1mb5_device::set_reset(bool new_reset) +{ + if (new_reset != m_reset) { + m_reset = new_reset; + m_reset_handler(m_reset); + return true; + } else { + return false; + } +} + +bool hp_1mb5_device::set_int(bool new_int) +{ + if (new_int != m_cint) { + m_cint = new_int; + LOG("cint=%d\n" , m_cint); + m_int_handler(m_cint); + return true; + } else { + return false; + } +} diff --git a/src/devices/machine/1mb5.h b/src/devices/machine/1mb5.h new file mode 100644 index 00000000000..3350e4a968c --- /dev/null +++ b/src/devices/machine/1mb5.h @@ -0,0 +1,95 @@ +// license:BSD-3-Clause +// copyright-holders:F. Ulivi +/********************************************************************* + + 1mb5.h + + HP-8x I/O Translator chip (1MB5-0101) + +*********************************************************************/ + +#ifndef MAME_MACHINE_1MB5_H +#define MAME_MACHINE_1MB5_H + +#pragma once + +#define MCFG_1MB5_IRL_HANDLER(_devcb) \ + devcb = &hp_1mb5_device::set_irl_handler(*device , DEVCB_##_devcb); + +#define MCFG_1MB5_HALT_HANDLER(_devcb) \ + devcb = &hp_1mb5_device::set_halt_handler(*device , DEVCB_##_devcb); + +#define MCFG_1MB5_RESET_HANDLER(_devcb) \ + devcb = &hp_1mb5_device::set_reset_handler(*device , DEVCB_##_devcb); + +#define MCFG_1MB5_INT_HANDLER(_devcb) \ + devcb = &hp_1mb5_device::set_int_handler(*device , DEVCB_##_devcb); + +class hp_1mb5_device : public device_t +{ +public: + // construction/destruction + hp_1mb5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + // static configuration helpers + template static devcb_base &set_irl_handler(device_t &device, Object &&cb) { return downcast(device).m_irl_handler.set_callback(std::forward(cb)); } + template static devcb_base &set_halt_handler(device_t &device, Object &&cb) { return downcast(device).m_halt_handler.set_callback(std::forward(cb)); } + template static devcb_base &set_reset_handler(device_t &device, Object &&cb) { return downcast(device).m_reset_handler.set_callback(std::forward(cb)); } + template static devcb_base &set_int_handler(device_t &device, Object &&cb) { return downcast(device).m_int_handler.set_callback(std::forward(cb)); } + + // CPU access + DECLARE_READ8_MEMBER(cpu_r); + DECLARE_WRITE8_MEMBER(cpu_w); + + // uC access + DECLARE_READ8_MEMBER(uc_r); + DECLARE_WRITE8_MEMBER(uc_w); + + // Signals to CPU + DECLARE_READ_LINE_MEMBER(irl_r); + DECLARE_READ_LINE_MEMBER(halt_r); + + // Signals to uC + DECLARE_READ_LINE_MEMBER(reset_r); + DECLARE_READ_LINE_MEMBER(int_r); + + // Interrupt enable + void inten(); + + // Interrupt clearing + void clear_service(); + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + +private: + devcb_write_line m_irl_handler; + devcb_write_line m_halt_handler; + devcb_write_line m_reset_handler; + devcb_write_line m_int_handler; + + // Registers + uint8_t m_sr; + uint8_t m_cr; + uint8_t m_ib; + uint8_t m_ob; + bool m_ibf; + bool m_obf; + bool m_hlten; + bool m_service; + bool m_cint; + bool m_reset; + bool m_halt; + + bool set_service(bool new_service); + bool update_halt(); + bool set_reset(bool new_reset); + bool set_int(bool new_int); +}; + +// device type definition +DECLARE_DEVICE_TYPE(HP_1MB5, hp_1mb5_device) + +#endif /* MAME_MACHINE_1MB5_H */ diff --git a/src/mame/drivers/hp80.cpp b/src/mame/drivers/hp80.cpp index 4a0060726df..64c7d3d5d4d 100644 --- a/src/mame/drivers/hp80.cpp +++ b/src/mame/drivers/hp80.cpp @@ -19,6 +19,7 @@ #include "bus/hp80_optroms/hp80_optrom.h" #include "softlist.h" #include "machine/bankdev.h" +#include "bus/hp80_io/hp80_io.h" // Debugging #define VERBOSE 1 @@ -72,7 +73,8 @@ static constexpr unsigned IRQ_KEYBOARD_BIT = 0; static constexpr unsigned IRQ_TIMER0_BIT = 1; static constexpr unsigned TIMER_COUNT = 4; static constexpr unsigned IRQ_IOP0_BIT = IRQ_TIMER0_BIT + TIMER_COUNT; -static constexpr unsigned IOP_COUNT = 0; +// Maximum count of I/O processors (the same thing as count of I/O slots) +static constexpr unsigned IOP_COUNT = 4; static constexpr unsigned IRQ_BIT_COUNT = IRQ_IOP0_BIT + IOP_COUNT; static constexpr unsigned NO_IRQ = IRQ_BIT_COUNT; @@ -105,11 +107,17 @@ public: DECLARE_READ8_MEMBER(clkdat_r); DECLARE_WRITE8_MEMBER(clkdat_w); DECLARE_WRITE8_MEMBER(rselec_w); + DECLARE_READ8_MEMBER(intrsc_r); + DECLARE_WRITE8_MEMBER(intrsc_w); TIMER_DEVICE_CALLBACK_MEMBER(kb_scan); TIMER_DEVICE_CALLBACK_MEMBER(vm_timer); TIMER_DEVICE_CALLBACK_MEMBER(timer_update); TIMER_DEVICE_CALLBACK_MEMBER(clk_busy_timer); + + DECLARE_WRITE8_MEMBER(irl_w); + DECLARE_WRITE8_MEMBER(halt_w); + protected: required_device m_cpu; required_device m_screen; @@ -124,6 +132,7 @@ protected: required_ioport m_io_modkeys; required_device_array m_rom_drawers; required_device m_rombank; + required_device_array m_io_slots; // Character generator required_region_ptr m_chargen; @@ -137,11 +146,11 @@ protected: uint8_t m_crt_read_byte; uint8_t m_crt_write_byte; bool m_global_int_en; - uint16_t m_int_req; uint16_t m_int_serv; unsigned m_top_pending; uint16_t m_int_acked; uint16_t m_int_en; + uint8_t m_halt_lines; // State of keyboard ioport_value m_kb_state[ 3 ]; @@ -192,6 +201,7 @@ hp85_state::hp85_state(const machine_config &mconfig, device_type type, const ch m_io_modkeys(*this, "MODKEYS"), m_rom_drawers(*this , "drawer%u" , 1), m_rombank(*this , "rombank"), + m_io_slots(*this , "slot%u" , 1), m_chargen(*this , "chargen") { } @@ -210,7 +220,6 @@ void hp85_state::machine_reset() m_crt_ctl = BIT_MASK(CRT_CTL_POWERDN_BIT) | BIT_MASK(CRT_CTL_WIPEOUT_BIT); m_crt_read_byte = 0; m_crt_write_byte = 0; - m_int_req = 0; m_int_serv = 0; m_top_pending = NO_IRQ; m_int_acked = 0; @@ -235,6 +244,8 @@ void hp85_state::machine_reset() m_timer_idx = 0; m_clk_busy = false; update_irl(); + m_halt_lines = 0; + m_cpu->set_input_line(INPUT_LINE_HALT , CLEAR_LINE); // Load optional ROMs (if any) // All entries in rombanks [01..FF] initially not present @@ -245,6 +256,12 @@ void hp85_state::machine_reset() } // Clear RSELEC m_rombank->set_bank(0xff); + + // Mount I/O slots in address space + m_cpu->space(AS_PROGRAM).unmap_readwrite(0xff50 , 0xff5f); + for (auto& io : m_io_slots) { + io->install_read_write_handlers(m_cpu->space(AS_PROGRAM)); + } } uint32_t hp85_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) @@ -307,13 +324,24 @@ static const uint8_t vector_table[] = { 0x08, // Timer 0 0x0a, // Timer 1 0x0c, // Timer 2 - 0x0e // Timer 3 + 0x0e, // Timer 3 + 0x10, // Slot 1 + 0x10, // Slot 2 + 0x10, // Slot 3 + 0x10 // Slot 4 }; IRQ_CALLBACK_MEMBER(hp85_state::irq_callback) { logerror("IRQ ACK %u\n" , m_top_pending); BIT_SET(m_int_acked , m_top_pending); + if (m_top_pending > IRQ_IOP0_BIT && m_top_pending < IRQ_BIT_COUNT) { + // Interrupts are disabled in all I/O translators of higher priority than + // the one being serviced + for (unsigned i = m_top_pending - 1; i >= IRQ_IOP0_BIT; i--) { + irq_en_w(i , false); + } + } update_irl(); return vector_table[ m_top_pending ]; } @@ -539,6 +567,30 @@ WRITE8_MEMBER(hp85_state::rselec_w) m_rombank->set_bank(data); } +READ8_MEMBER(hp85_state::intrsc_r) +{ + if (m_top_pending >= IRQ_IOP0_BIT && m_top_pending < IRQ_BIT_COUNT && BIT(m_int_acked , m_top_pending)) { + return (uint8_t)m_io_slots[ m_top_pending - IRQ_IOP0_BIT ]->get_base_addr(); + } else { + // Probably.. + return 0xff; + } +} + +WRITE8_MEMBER(hp85_state::intrsc_w) +{ + if (m_top_pending >= IRQ_IOP0_BIT && m_top_pending < IRQ_BIT_COUNT && BIT(m_int_acked , m_top_pending)) { + // Clear interrupt request in the slot being serviced + m_io_slots[ m_top_pending - IRQ_IOP0_BIT ]->clear_service(); + } + for (auto& iop: m_io_slots) { + iop->inten(); + } + for (unsigned i = IRQ_IOP0_BIT; i < (IRQ_IOP0_BIT + IOP_COUNT); i++) { + irq_en_w(i , true); + } +} + // Outer index: key position [0..79] = r * 8 + c // Inner index: SHIFT state (0 = no SHIFT, 1 = SHIFT) static const uint8_t keyboard_table[ 80 ][ 2 ] = { @@ -790,6 +842,24 @@ TIMER_DEVICE_CALLBACK_MEMBER(hp85_state::clk_busy_timer) m_clk_busy = false; } +WRITE8_MEMBER(hp85_state::irl_w) +{ + //LOG("irl_w %u=%u\n" , offset , data); + irq_w(offset + IRQ_IOP0_BIT , data != 0); +} + +WRITE8_MEMBER(hp85_state::halt_w) +{ + //LOG("halt_w %u=%u\n" , offset , data); + bool prev_halt = m_halt_lines != 0; + COPY_BIT(data != 0 , m_halt_lines , offset); + bool new_halt = m_halt_lines != 0; + if (prev_halt != new_halt) { + LOG("halt=%d hl=%x\n" , new_halt , m_halt_lines); + m_cpu->set_input_line(INPUT_LINE_HALT , new_halt); + } +} + attotime hp85_state::time_to_video_mem_availability() const { if (BIT(m_crt_ctl , CRT_CTL_WIPEOUT_BIT) || BIT(m_crt_ctl , CRT_CTL_POWERDN_BIT)) { @@ -880,6 +950,7 @@ void hp85_state::video_mem_write() void hp85_state::irq_w(unsigned n_irq , bool state) { + //LOG("irq_w %u=%d GIE=%d SRV=%03x ACK=%03x IE=%03x\n" , n_irq , state , m_global_int_en , m_int_serv , m_int_acked , m_int_en); if (state && !BIT(m_int_serv , n_irq)) { // Set service request BIT_SET(m_int_serv , n_irq); @@ -908,6 +979,7 @@ void hp85_state::update_int_bits() void hp85_state::update_irl() { + //LOG("irl GIE=%d top=%u ACK=%03x\n" , m_global_int_en , m_top_pending , m_int_acked); m_cpu->set_input_line(0 , m_global_int_en && m_top_pending < IRQ_BIT_COUNT && !BIT(m_int_acked , m_top_pending)); } @@ -1024,6 +1096,7 @@ static ADDRESS_MAP_START(cpu_mem_map , AS_PROGRAM , 8 , hp85_state) AM_RANGE(0xff0a , 0xff0a) AM_READWRITE(clksts_r , clksts_w) AM_RANGE(0xff0b , 0xff0b) AM_READWRITE(clkdat_r , clkdat_w) AM_RANGE(0xff18 , 0xff18) AM_WRITE(rselec_w) + AM_RANGE(0xff40 , 0xff40) AM_READWRITE(intrsc_r , intrsc_w) ADDRESS_MAP_END static ADDRESS_MAP_START(rombank_mem_map , AS_PROGRAM , 8 , hp85_state) @@ -1042,7 +1115,7 @@ static MACHINE_CONFIG_START(hp85) MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE) MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8) MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(21) - MCFG_ADDRESS_MAP_BANK_STRIDE(0x2000) + MCFG_ADDRESS_MAP_BANK_STRIDE(HP80_OPTROM_SIZE) MCFG_SCREEN_ADD("screen" , RASTER) MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK / 2 , 312 , 0 , 256 , 256 , 0 , 192) @@ -1085,6 +1158,20 @@ static MACHINE_CONFIG_START(hp85) MCFG_DEVICE_ADD("drawer6", HP80_OPTROM_SLOT, 0) MCFG_DEVICE_SLOT_INTERFACE(hp80_optrom_slot_device, NULL, false) + // I/O slots + MCFG_HP80_IO_SLOT_ADD("slot1" , 0) + MCFG_HP80_IO_IRL_CB(WRITE8(hp85_state , irl_w)) + MCFG_HP80_IO_HALT_CB(WRITE8(hp85_state , halt_w)) + MCFG_HP80_IO_SLOT_ADD("slot2" , 1) + MCFG_HP80_IO_IRL_CB(WRITE8(hp85_state , irl_w)) + MCFG_HP80_IO_HALT_CB(WRITE8(hp85_state , halt_w)) + MCFG_HP80_IO_SLOT_ADD("slot3" , 2) + MCFG_HP80_IO_IRL_CB(WRITE8(hp85_state , irl_w)) + MCFG_HP80_IO_HALT_CB(WRITE8(hp85_state , halt_w)) + MCFG_HP80_IO_SLOT_ADD("slot4" , 3) + MCFG_HP80_IO_IRL_CB(WRITE8(hp85_state , irl_w)) + MCFG_HP80_IO_HALT_CB(WRITE8(hp85_state , halt_w)) + MCFG_SOFTWARE_LIST_ADD("optrom_list" , "hp85_rom") MACHINE_CONFIG_END -- cgit v1.2.3 From 8d44c54f681db5100e1acb8cd0871186c90af0aa Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 25 Oct 2017 17:18:47 +0200 Subject: tceptor: readded 3d scope view, now properly (nw) --- src/mame/drivers/tceptor.cpp | 18 ++++++++---------- src/mame/includes/tceptor.h | 2 +- src/mame/layout/tceptor2.lay | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/mame/video/tceptor.cpp | 7 ++++++- 4 files changed, 59 insertions(+), 12 deletions(-) create mode 100644 src/mame/layout/tceptor2.lay diff --git a/src/mame/drivers/tceptor.cpp b/src/mame/drivers/tceptor.cpp index e04ac7de1b7..0b03349fc0a 100644 --- a/src/mame/drivers/tceptor.cpp +++ b/src/mame/drivers/tceptor.cpp @@ -22,6 +22,8 @@ #include "rendlay.h" #include "speaker.h" +#include "tceptor2.lh" + /*******************************************************************/ @@ -141,11 +143,6 @@ READ8_MEMBER(tceptor_state::input1_r) return fix_input1(ioport("BUTTONS")->read(), ioport("SERVICE")->read()); } -READ8_MEMBER(tceptor_state::readFF) -{ - return 0xff; -} - /*******************************************************************/ static ADDRESS_MAP_START( m6809_map, AS_PROGRAM, 8, tceptor_state ) @@ -154,7 +151,7 @@ static ADDRESS_MAP_START( m6809_map, AS_PROGRAM, 8, tceptor_state ) AM_RANGE(0x1c00, 0x1fff) AM_RAM_WRITE(tceptor_tile_attr_w) AM_SHARE("tile_attr") AM_RANGE(0x2000, 0x3fff) AM_RAM_WRITE(tceptor_bg_ram_w) AM_SHARE("bg_ram") // background (VIEW RAM) AM_RANGE(0x4000, 0x43ff) AM_DEVREADWRITE("namco", namco_cus30_device, namcos1_cus30_r, namcos1_cus30_w) - AM_RANGE(0x4800, 0x4800) AM_WRITENOP // 3D scope left/right? + AM_RANGE(0x4800, 0x4800) AM_WRITE(tceptor2_shutter_w) AM_RANGE(0x4f00, 0x4f00) AM_READNOP // unknown AM_RANGE(0x4f01, 0x4f01) AM_READ_PORT("PEDAL") // analog input (accel) AM_RANGE(0x4f02, 0x4f02) AM_READ_PORT("STICKX") // analog input (left/right) @@ -222,8 +219,9 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( mcu_io_map, AS_IO, 8, tceptor_state ) - AM_RANGE(M6801_PORT1, M6801_PORT1) AM_READ(readFF) AM_WRITENOP - AM_RANGE(M6801_PORT2, M6801_PORT2) AM_READ(readFF) AM_WRITENOP + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(M6801_PORT1, M6801_PORT1) AM_WRITENOP + AM_RANGE(M6801_PORT2, M6801_PORT2) AM_WRITENOP ADDRESS_MAP_END @@ -290,7 +288,7 @@ static INPUT_PORTS_START( tceptor2 ) PORT_INCLUDE( tceptor ) PORT_MODIFY("DSW2") - PORT_DIPNAME( 0x04, 0x00, "Mode" ) // NOTE: factory default is actually 3D + PORT_DIPNAME( 0x04, 0x04, "Mode" ) PORT_DIPSETTING( 0x00, "2D" ) PORT_DIPSETTING( 0x04, "3D" ) PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -520,4 +518,4 @@ ROM_END // ( YEAR NAME PARENT MACHINE INPUT STATE INIT MONITOR COMPANY FULLNAME FLAGS ) GAME ( 1986, tceptor, 0, tceptor, tceptor, tceptor_state, 0, ROT0, "Namco", "Thunder Ceptor", 0) -GAME ( 1986, tceptor2, tceptor, tceptor, tceptor2, tceptor_state, 0, ROT0, "Namco", "3-D Thunder Ceptor II", 0) +GAMEL( 1986, tceptor2, tceptor, tceptor, tceptor2, tceptor_state, 0, ROT0, "Namco", "3-D Thunder Ceptor II", 0, layout_tceptor2) diff --git a/src/mame/includes/tceptor.h b/src/mame/includes/tceptor.h index 8518a4f09a1..9ea6ccb945e 100644 --- a/src/mame/includes/tceptor.h +++ b/src/mame/includes/tceptor.h @@ -57,11 +57,11 @@ public: DECLARE_READ8_MEMBER(dsw1_r); DECLARE_READ8_MEMBER(input0_r); DECLARE_READ8_MEMBER(input1_r); - DECLARE_READ8_MEMBER(readFF); DECLARE_WRITE8_MEMBER(tceptor_tile_ram_w); DECLARE_WRITE8_MEMBER(tceptor_tile_attr_w); DECLARE_WRITE8_MEMBER(tceptor_bg_ram_w); DECLARE_WRITE8_MEMBER(tceptor_bg_scroll_w); + DECLARE_WRITE8_MEMBER(tceptor2_shutter_w); void tile_mark_dirty(int offset); required_device m_c45_road; diff --git a/src/mame/layout/tceptor2.lay b/src/mame/layout/tceptor2.lay new file mode 100644 index 00000000000..c1dbad97422 --- /dev/null +++ b/src/mame/layout/tceptor2.lay @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/video/tceptor.cpp b/src/mame/video/tceptor.cpp index 77713a138f8..3e344fbd576 100644 --- a/src/mame/video/tceptor.cpp +++ b/src/mame/video/tceptor.cpp @@ -529,7 +529,6 @@ uint32_t tceptor_state::screen_update_tceptor(screen_device &screen, bitmap_ind1 return 0; } - WRITE_LINE_MEMBER(tceptor_state::screen_vblank_tceptor) { // rising edge @@ -538,3 +537,9 @@ WRITE_LINE_MEMBER(tceptor_state::screen_vblank_tceptor) memcpy(m_sprite_ram_buffered.get(), m_sprite_ram, 0x200); } } + +WRITE8_MEMBER(tceptor_state::tceptor2_shutter_w) +{ + // 3D scope shutter control + output().set_value("shutter", data & 1); +} -- cgit v1.2.3 From f5eed931c65cbc62cfc230d164320ef3fba60194 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Larsson=20Edstr=C3=B6m?= Date: Wed, 25 Oct 2017 17:39:49 +0200 Subject: T4490 added, Terco CNC Mill 4490 skeleton driver (#2745) * t4490: added old work, not yet compiled * t4490: Terco CNC Mill 4490 skeleton driver added * t4490: Added PCB layouts and cleaned things up a bit --- scripts/target/mame/mess.lua | 1 + src/mame/drivers/terco.cpp | 314 +++++++++++++++++++++++++++++++++++++++++++ src/mame/mame.lst | 5 +- 3 files changed, 319 insertions(+), 1 deletion(-) create mode 100644 src/mame/drivers/terco.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 916c4be6903..323cf42c674 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -3565,6 +3565,7 @@ files { MAME_DIR .. "src/mame/drivers/tavernie.cpp", MAME_DIR .. "src/mame/drivers/tecnbras.cpp", MAME_DIR .. "src/mame/drivers/terak.cpp", + MAME_DIR .. "src/mame/drivers/terco.cpp", MAME_DIR .. "src/mame/drivers/ti630.cpp", MAME_DIR .. "src/mame/drivers/tsispch.cpp", MAME_DIR .. "src/mame/includes/tsispch.h", diff --git a/src/mame/drivers/terco.cpp b/src/mame/drivers/terco.cpp new file mode 100644 index 00000000000..e027b23aefb --- /dev/null +++ b/src/mame/drivers/terco.cpp @@ -0,0 +1,314 @@ +// license:BSD-3-Clause +// copyright-holders:Joakim Larsson Edstrom +/* + * The 4490 CNC Mill Control unit + * + * History of Terco + *------------------ + * Terco, founded 1963, is a privatelly held company in Sweden that develops and distribute equipment for + * technical vocational educations worldwide. In the mid 80:ies they had a number of state of the art + * products for educations on CNC machines, both mill and lathe, all based on Motorola 8-bit CPU:s. + * + * Known products + * -------------- + * T4426 - CNC Programming Station, a ruggedized Tandy Color Computer + monitor in a metal case (see coco12.cpp) + * T4490 - CNC Control System, a complete system including a small milling machine, can be programmed by T4426 + * T???? - A CAD/CAM sold in small numbers, an office computer based on a Tandy Color Computer PCB + two floppy drives + * + * Misc links about the machines supported by this driver. + *-------------------------------------------------------- + * https://www.westauction.com/auction/712/item/terco-cnc-programming-system-37047 + * https://kiertonet.fi/tyokalut-ja-koneet/koneet-ja-laitteet/cnc-pora-45-terco-4403 + * http://www.repair--parts.com/Repair-Electronics-/Rectifiers-/Terco-table-top-cnc-mill.php5 + * + * TODO: + * ------ + * - Display + * - Clickable Artwork + * - Serial communication for printer, plotter, paper tape and downlaod from the T4426 + * - Identify expansion bus + * - Keyboard Controller + * - Dump keyboard ROM + * - Cassette i/f + */ + +#include "emu.h" +#include "cpu/m6800/m6800.h" +#include "machine/6821pia.h" +//#include "machine/6850acia.h" +//#include "machine/kb3600.h" +//#include "machine/mc14411.h" + +#define LOG_SETUP (1U << 1) +#define LOG_READ (1U << 2) +#define LOG_BCD (1U << 3) + +//#define VERBOSE (LOG_BCD|LOG_SETUP) +//#define LOG_OUTPUT_STREAM std::cout + +#include "logmacro.h" + +#define LOGSETUP(...) LOGMASKED(LOG_SETUP, __VA_ARGS__) +#define LOGR(...) LOGMASKED(LOG_READ, __VA_ARGS__) +#define LOGBCD(...) LOGMASKED(LOG_BCD, __VA_ARGS__) + +#ifdef _MSC_VER +#define FUNCNAME __func__ +#else +#define FUNCNAME __PRETTY_FUNCTION__ +#endif +/* + * Identified Chips + * ---------------- + * 11442 - 7-seg driver + * 14411 - Bit Rate Generator + * 1488 - Quad Line EIA-232D Driver + * 1489 - Quad Line EIA-232D Receivers + * 15005 - Reed relay + * 2114 - 4 x 1024 bits of data + * 2732 - 4KB EPROM + * 4527 - BCD Rate Multiplexer + * 555 - analog timer circuit + * 6800 - 8 bit CPU + * 6821 - PIA paralell interface + * 6850 - ACIA serial interface + * 7400 - Quad 2 input NAND gates + * 7402 - Quad 2 input NOR gates + * 7408 - Quad 2 input AND gates + * 7414 - 6 hex schmitt trigger inverters + * 7420 - Dual 4 input NAND gates + * 7421 - Dual 4 input AND gates + * 7476 - Dual JK flip flops with preset and clear + * 7490 - Decade Counters, divide by 2 and divide by 5 outputs + * 74116 - Dual 4-bit latches + * 74138 - 3 to 8 line decoder/demultiplexer + * 74139 - Dual 2 to 4 line decoder/demultiplexer + * 74154 - 4 line to 16 line decoders/multiplexers + * 74164 - 8 bit paralell output serial shift register + * 74174 - 6 D-type flip flops + * 74240 - Inverted 3-state outputs + * 74244 - Non-inverted 3-state outputs + * AY3600 - Keyboard Controller + * CA339 - Quad Voltage Comparators + * CD4050B - CMOS Hex Non-Inverting Buffer and Converter + * CIC2414 - CMOS RAM suspects + * DS1210 - NVRAM controller, inhibits access and supply battery power on power down + * MC6875 - Phase clock generator + * + * Board Layouts + * ------------- + * + * T4490 CPU board + * ______________________________________________________________ + * |\ .. .---. _o|__ + * ||o+----------+ +---+ +---+ .------. +-------+ |470| | | | + * || | 2732 | |CIC| |CIC| |battery |74LS240| | uF| | | | + * ///> | 4490-F | 2414E 2414E | | +-------+ | | | | | + * | +----------+ | | | | | | +-------+ | | | | | + * | | | | | | | |74LS240| | | | | | + * | +----------+ +---+ +---+ | | +-------+ .___. | | | + * | | 2732 | .______. o | | | + * | | 4490-E | +-----+ +-------+ | | | + * | +----------+ |DS1210 |4527BE | +-----------+ | | | + * | +-----+ +-------+ | | | | | + * | +----------+ | 74116N | | | | + * | | 2732 | +-----------+ | | | + * | | 4490-D | +-------+ +-------+ | | | + * | +----------+ |74LS90N| |4527BE | | | | + * | +-------+ +-------+ | | | + * | +----------+ +-----------+ |_| | + * | | 2732 | +-------+ +-------+ | | |___| + * | | 4490-C | | 7476 | |4527BE | | 74116N | o| + * | +----------+ +-------+ +-------+ +-----------+ | + * | | + * | R2 varistor | + * | +---+ R1 +---------+ +-------+ | + * | |555| 3.9K | 74LS244 | |74LS00 | | + * | +---+ +---------+ +-------+ | + * | C1 0.01uF | + * | C2 0.01uF o|__ + * | +----+ _| | + * | -|XTAL| | | | + * | -|8MHz| | | | + * | +----+ +-----------------+ | | | + * | | CPU | +-------+ | | | + * | +-------+ | 68B00 | |74LS139| | | | + * | | 6875L | +-----------------+ +-------+ | | | + * | +-------+ | | | + * | | | | + * | +-------+ +--------+ +--------+ +-------+ | | | + * | | 74LS08| |74LS244 | |74LS244 | |74LS138| | | | + * | +-------+ +--------+ +--------+ +-------+ | | | + * | | | | + * | | | | + * | +-------+ +-------++-------+ +-------+ +-------+ | | | + * | |74LS164| |74LS14 ||74LS02N| |74LS20N| |74LS138| | | | + * \\\> +-------+ +-------++-------+ +-------+ +-------+ |_| | + * || |___| + * ||o o| + * |/---------------------------------------------------------------+ + * + * + * T4490 I/O board + * . ______________________________________________________________ + * |\ o o _o|__ + * ||o 96..+------+.----. +-------+ | | | + * || 72..|BRG ||XTAL| +74LS240| | | | + * ///> +-------+ 48..|14411 ||1.84| +-------+ | | | + * +-+|O|+------+ |CA339A | 36..| || 320| | | | + * +-| ||15005B| +-------+ 24..| |.____. +-------+ | | | + * | | ==|+------+ 18..| | |74LS240| | | | + * | | ==| 12..| | +-------+ | | | + * | | ==| 6..+------+ | | | + * | | ==| +-------+ 3.. .----------. | | | + * | | ==| |1488P | 2..o| 470uF |o +-------+ | | | + * | | ==| +-------+ 1.5 .__________. |74LS244| | | | + * | | ==| 1.1 +----------+ +-------+ | | | + * | | ==| | 2732A | | | | + * +-| |+-------+ +-------+ | 4490-B | | | | + * +-+==||CD4050BE |1489P | +----------+ +-------+ | | | + * \\ |O|+-------+ +-------+ |74LS244| |_| | + * \\---++------+ +------+ +-------+ |___| + * --+ O|PIA | |PIA | +------+ +-----------+ o| + * | ||68B21P| |68B21P| |ACIA | | 2732A | | + * | || | | | |68B50P| | 4490-A | | + * +-+ || | | | | | +-----------+ | + * --| || | | | | | | + * +-+ || | | | | | +-----------+ +-------+ | + * | || | | | +------+ | 2732A | |74LS139| | + * | || | | | | 4490-3 | +-------+ | + * | |+------+ +------+ +-----------+ o|__ + * --+ O +-------+ _| | + * //---+ |74LS00N| | | | + * // ==o== +-------+ | | | + * ==o== | | | + * | +-------+ +-------+ +-------+ +-------+ +-------+ | | | + * | | 2114 | | 2114 | | 2114 | | 2114 | |74LS21N| | | | + * | +-------+ +-------+ +-------+ +-------+ +-------+ | | | + * | | | | + * | +-------+ +-------+ +-------+ +-------+ | | | + * | | 2114 | | 2114 | | 2114 | | 2114 | | | | + * | +-------+ +-------+ +-------+ +-------+ +-------+ | | | + * | |74LS08N| | | | + * | +-------+ +-------+ +-------+ +-------+ +-------+ | | | + * | | 2114 | | 2114 | | 2114 | | 2114 | | | | + * | +-------+ +-------+ +-------+ +-------+ | | | + * | | | | + * \\\> +-------+ +-------+ +-------+ +-------+ +-------+ |_| | + * || | 2114 | | 2114 | | 2114 | | 2114 | |74LS138| |___| + * ||o +-------+ +-------+ +-------+ +-------+ +-------+ o| + * |/---------------------------------------------------------------+ + * + * + * T4490 Front Panel PCB + * .--------------------------------------------------------------------------------------------------------------------. + * | +--------+| + * |+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +-----+ +-----+-----+ | || + * ||11442|11442|11442|11442|11442|11442|11442|11442|11442| |11442| |11442|11442| |74116N || + * |+-----+-----+-----+-----+-----+-----+-----+-----+-----+ +-----+ +-----+-----+ POSITION REGISTER +--------+| + * | +---+---+---+ +---+---+ +---+---+---+ +---+ +---+ +---+---+ +------+ +---+---+---+---+---+---+| + * N |7sg|7sg|7sg| G |7sg|7sg| F |7sg|7sg|7sg| S |7sg| T |7sg| M |7sg|7sg| |sparse| |7sg|7sg|7sg|7sg|7sg|7sg|| + * | |BCD|BCD|BCD| |BCD|BCD| |BCD|BCD|BCD| |BCD| |BCD| |BCD|BCD| |DotLed| |BCD|BCD|BCD|BCD|BCD|BCD|| + * | +---+---+---+ +---+---+ +---+---+---+ +---+ +---+ +---+---+ |matrix| +---+---+---+---+---+---+| + * | BLOCK NBR G-FUNCT FEED-SPEED+-------+SPIN- TOOL +-------+ F- +------++---+---+---+---+---+---+ | + * |PWR RUN MAN EXA LOAD DUMP BBB FULL PAR | 74116 | DLE NBR | 74116 | FUNCT |114|114|114|114|114|114| | + * | O O O O O O O O O +-------+ +-------+ | 42| 42| 42| 42| 42| 42| | + * | +------+ +--------+ +--------+ SYSTEM STATUS | | | | | | | | + * | |74LS00| |74LS240N| |74LS240N| +---+---+---+---+---+---+ | + * | +------+ +--------+ +--------+ | + * ---------------------------------------------------------------------------------------------------------------------- + * O O O O + * ---------------------------------------------------------------------------------------------------------------------- + * |.----.----.----.----.----.----.----.----. .----.----.----.----.----.----.----.----. +-------+ | + * ||STOP|STRT|PROG|EXAM|LOAD|DUMP|BLK |TO | |RST |SET |READ|CHNG|INS |ERA |END |END | |74154J | | + * || | | | |TAPE|TAPE|BBLK| REF| | | REF| | | BLK| BLK| BLK| PRG| DATA +-------+ | + * |'----'----'----'----'----'----'----'----' '----'----'----'----'----'----'----'----' .----.----.----. | + * | +--------+ SYSTEM CONTROL PROGRAMMING CONTROL | | | | | + * | |74LS244N| | 7 | 8 | 9 | | + * | +--------+ +----+----+----+ | + * | | | | | | + * | JOG CONTROL FUNCTION COORDINATE | 4 | 5 | 6 | | + * |.----.----.----. +--------+ .----.----.----. .----.----.----. +----+----+----+ | + * || | | | |74LS174N| | | | | | | | | | | | | | + * || X+ | Y+ | Z+ | +--------+.--. |CTRL| G | F | | X | Y | Z | | 1 | 2 | 3 | | + * |+----+----+----+ | | +----+----+----+ +----+----+----+ +----+----+----+ | + * || | | | +--------+'--' | | | | | | | | | | | | | + * || X- | Y- | Z- | |74LS240N| | S | T | M | | I | J | K | | + | 0 | - | | + * |+----+----+----+ +--------+ +----+---++----+ +----+----+----+ '----'----'----' | + * | +---+ | + * | .-------------------. |74 | | + * | | o o | |240| | + * | | +----+o o+----+|+-----+ | | .-----------------------------------------' + * | | |AY-5|o o| |||PIA | +---+ | + * | | |3600|o o|2732|||68B21| | + * | | |PRO-|o o|TBORD|| | FEED OVERRIDE % | + * | | | 50 |o o| ||| | | + * | | | |o o+----+|| | .--. | + * | | | |o o || | | | | + * | | +----+o o |+-----+ '--' | + * | '-------------------' | + * ---------------------------------------------------------------------------'------------------------------------------ + * O O O O + * ---------------------------------------------------------------------------------------------------------------------- + */ +/* Terco CNC Control Station 4490 */ +class t4490_state : public driver_device +{ +public: + t4490_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + ,m_maincpu(*this, "maincpu") + ,m_pia1(*this, "pia1") + ,m_pia2(*this, "pia2") + //,m_pia3(*this, "pia3") + //,m_acia(*this, "acia") + //,m_brg(*this, "brg") + //,m_ay3600(*this, "ay3600") + { } +private: + required_device m_maincpu; + // virtual void machine_reset() override { m_maincpu->reset(); LOG("--->%s()\n", FUNCNAME); }; + required_device m_pia1; + required_device m_pia2; + //required_device m_pia3; + //required_device m_acia; + //required_device m_brg; + //required_device m_ay3600; +}; + +static ADDRESS_MAP_START( t4490_map, AS_PROGRAM, 8, t4490_state ) + AM_RANGE(0x0000, 0x1fff) AM_RAM + AM_RANGE(0x3000, 0x3fff) AM_ROM AM_REGION("maincpu", 0x3000) + AM_RANGE(0x9500, 0x95ff) AM_RAM + AM_RANGE(0x9036, 0x9037) AM_DEVREADWRITE("pia1", pia6821_device, read, write) + AM_RANGE(0x903a, 0x903b) AM_DEVREADWRITE("pia2", pia6821_device, read, write) +// AM_RANGE(0xc820, 0xc823) AM_DEVREADWRITE("acia", acia6850_device, read, write) + AM_RANGE(0xa000, 0xffff) AM_ROM AM_REGION("maincpu", 0xa000) +ADDRESS_MAP_END + +/* Input ports */ +static INPUT_PORTS_START( t4490 ) +INPUT_PORTS_END + +static MACHINE_CONFIG_START( t4490 ) + MCFG_CPU_ADD("maincpu", M6800, XTAL_8MHz/4) // divided by a MC6875 + MCFG_CPU_PROGRAM_MAP(t4490_map) + + /* devices */ + MCFG_DEVICE_ADD("pia1", PIA6821, 0) + MCFG_DEVICE_ADD("pia2", PIA6821, 0) +MACHINE_CONFIG_END + +ROM_START( t4490 ) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD( "terco4490-3861104.bin", 0x3000, 0x1000, CRC(d5fd17cc) SHA1(9a3564fa69b897ec51b49ad34f2d2696cb78ee9b) ) + ROM_LOAD( "terco4490-A861104.bin", 0xa000, 0x1000, CRC(65b8e7d0) SHA1(633217fc4aa301d87790bb8744b72ef030a4c262) ) + ROM_LOAD( "terco4490-B861104.bin", 0xb000, 0x1000, CRC(5a0ce3f2) SHA1(7ec455b9075454ce5943011a1dfb5725857168f5) ) + ROM_LOAD( "terco4490-C861104.bin", 0xc000, 0x1000, CRC(0627c68c) SHA1(bf733d3ffad3f1e75684e833afc9d10d33ca870f) ) + ROM_LOAD( "terco4490-D861104.bin", 0xd000, 0x1000, CRC(2156476d) SHA1(0d70c6285541746ef15cad0d47b2d752e228abfc) ) + ROM_LOAD( "terco4490-E861104.bin", 0xe000, 0x1000, CRC(b317fa37) SHA1(a2e037a3a88b5d780067a86e52c6f7c103711a98) ) + ROM_LOAD( "terco4490-F861104.bin", 0xf000, 0x1000, CRC(a45bc3e7) SHA1(e12efa9a4c72e4bce1d59ad359ee66d7c3babfa6) ) +ROM_END + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS +COMP( 1986, t4490, 0, 0, t4490, t4490, t4490_state, 0, "Terco AB", "Terco 4490 Mill CNC Control", MACHINE_IS_SKELETON ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index e54b6e9a650..25bae45eebe 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -9785,7 +9785,7 @@ cocoe // Color Computer (Extended BASIC 1.0) cp400 // Prologica CP400 lzcolor64 // Digiponto LZ Color64 mx1600 // Dynacom MX-1600 -t4426 // Terco T4426 CNC programming station +t4426 // Terco 4426 CNC programming station @source:coco3.cpp coco3 // Color Computer 3 (NTSC) @@ -36220,6 +36220,9 @@ temptube // (hack) @source:terak.cpp terak // +@source:terco.cpp +t4490 // Terco 4490 Mill CNC Control (c) 1986 + @source:terracre.cpp amatelas // (c) 1986 amazon // (c) 1986 -- cgit v1.2.3 From 5b45e09d6ba55c0044fbe6b22e23ae9a789e6a6c Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 25 Oct 2017 11:52:27 -0400 Subject: piggypas.cpp: XTAL-derived clocks; document some chip types; add NVRAM (nw) --- src/mame/drivers/piggypas.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/mame/drivers/piggypas.cpp b/src/mame/drivers/piggypas.cpp index 3e74b7215eb..90751e9d37c 100644 --- a/src/mame/drivers/piggypas.cpp +++ b/src/mame/drivers/piggypas.cpp @@ -12,6 +12,7 @@ game details unknown #include "emu.h" #include "cpu/mcs51/mcs51.h" #include "machine/i8255.h" +#include "machine/nvram.h" #include "machine/ticket.h" #include "sound/okim6295.h" #include "video/hd44780.h" @@ -65,7 +66,7 @@ static ADDRESS_MAP_START( piggypas_map, AS_PROGRAM, 8, piggypas_state ) ADDRESS_MAP_END static ADDRESS_MAP_START( piggypas_io, AS_IO, 8, piggypas_state ) - AM_RANGE(0x0000, 0x07ff) AM_RAM + AM_RANGE(0x0000, 0x07ff) AM_RAM AM_SHARE("nvram") AM_RANGE(0x0800, 0x0803) AM_DEVREADWRITE("ppi", i8255_device, read, write) AM_RANGE(0x1000, 0x1000) AM_DEVREADWRITE("oki", okim6295_device, read, write) AM_RANGE(0x1800, 0x1801) AM_DEVWRITE("hd44780", hd44780_device, write) @@ -125,12 +126,14 @@ HD44780_PIXEL_UPDATE(piggypas_state::piggypas_pixel_update) static MACHINE_CONFIG_START( piggypas ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", I8031, 8000000) // unknown variant + MCFG_CPU_ADD("maincpu", I80C31, XTAL_8_448MHz) // OKI M80C31 MCFG_CPU_PROGRAM_MAP(piggypas_map) MCFG_CPU_IO_MAP(piggypas_io) MCFG_MCS51_SERIAL_TX_CB(WRITE8(piggypas_state, mcs51_tx_callback)) // MCFG_CPU_VBLANK_INT_DRIVER("screen", piggypas_state, irq0_line_hold) + MCFG_NVRAM_ADD_0FILL("nvram") // DS1220AD + MCFG_SCREEN_ADD("screen", LCD) MCFG_SCREEN_REFRESH_RATE(50) MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update) @@ -148,10 +151,10 @@ static MACHINE_CONFIG_START( piggypas ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_OKIM6295_ADD("oki", 1000000, PIN7_HIGH) // not verified + MCFG_OKIM6295_ADD("oki", XTAL_8_448MHz / 8, PIN7_HIGH) // clock and pin 7 not verified MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - MCFG_DEVICE_ADD("ppi", I8255, 0) + MCFG_DEVICE_ADD("ppi", I8255A, 0) // OKI M82C55A-2 MCFG_I8255_IN_PORTA_CB(IOPORT("IN1")) MCFG_I8255_OUT_PORTB_CB(WRITE8(piggypas_state, ctrl_w)) MCFG_I8255_IN_PORTC_CB(IOPORT("IN0")) -- cgit v1.2.3 From e5a8a47af70fd942c4216005f62af8980b64e211 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 25 Oct 2017 12:12:28 -0400 Subject: piggypas.cpp: More documentation (nw) --- src/mame/drivers/piggypas.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/piggypas.cpp b/src/mame/drivers/piggypas.cpp index 90751e9d37c..121150f25a7 100644 --- a/src/mame/drivers/piggypas.cpp +++ b/src/mame/drivers/piggypas.cpp @@ -58,6 +58,7 @@ WRITE8_MEMBER(piggypas_state::ctrl_w) WRITE8_MEMBER(piggypas_state::mcs51_tx_callback) { + // Serial output driver is UCN5833A output().set_digit_value(m_digit_idx++, BITSWAP8(data,7,6,4,3,2,1,0,5) & 0x7f); } @@ -126,7 +127,7 @@ HD44780_PIXEL_UPDATE(piggypas_state::piggypas_pixel_update) static MACHINE_CONFIG_START( piggypas ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", I80C31, XTAL_8_448MHz) // OKI M80C31 + MCFG_CPU_ADD("maincpu", I80C31, XTAL_8_448MHz) // OKI M80C31F or M80C154S MCFG_CPU_PROGRAM_MAP(piggypas_map) MCFG_CPU_IO_MAP(piggypas_io) MCFG_MCS51_SERIAL_TX_CB(WRITE8(piggypas_state, mcs51_tx_callback)) -- cgit v1.2.3 From db86c8eb7fc693507d518063c5ef5f7d3bd78243 Mon Sep 17 00:00:00 2001 From: mooglyguy Date: Wed, 25 Oct 2017 18:43:14 +0200 Subject: Fix ARM7_BE and ARM7 MMU regressions. (nw) --- src/devices/cpu/arm7/arm7.cpp | 37 +++++++++++++++++++++++-------------- src/devices/cpu/arm7/arm7.h | 4 +++- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/devices/cpu/arm7/arm7.cpp b/src/devices/cpu/arm7/arm7.cpp index 0fae144e945..4e11ddec049 100644 --- a/src/devices/cpu/arm7/arm7.cpp +++ b/src/devices/cpu/arm7/arm7.cpp @@ -62,6 +62,8 @@ arm7_cpu_device::arm7_cpu_device(const machine_config &mconfig, const char *tag, arm7_cpu_device::arm7_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint8_t archRev, uint8_t archFlags, endianness_t endianness) : cpu_device(mconfig, type, tag, owner, clock) , m_program_config("program", endianness, 32, 32, 0) + , m_prefetch_word0_shift(endianness == ENDIANNESS_LITTLE ? 0 : 16) + , m_prefetch_word1_shift(endianness == ENDIANNESS_LITTLE ? 16 : 0) , m_endian(endianness) , m_archRev(archRev) , m_archFlags(archFlags) @@ -342,7 +344,7 @@ int arm7_cpu_device::detect_fault(int desc_lvl1, int ap, int flags) } -bool arm7_cpu_device::arm7_tlb_translate(offs_t &addr, int flags) +bool arm7_cpu_device::arm7_tlb_translate(offs_t &addr, int flags, bool no_exception) { if (addr < 0x2000000) { @@ -374,6 +376,9 @@ bool arm7_cpu_device::arm7_tlb_translate(offs_t &addr, int flags) } else { + if (no_exception) + return false; + if (flags & ARM7_TLB_ABORT_D) { uint8_t domain = (desc_lvl1 >> 5) & 0xF; @@ -397,6 +402,9 @@ bool arm7_cpu_device::arm7_tlb_translate(offs_t &addr, int flags) } else if (tlb_type == COPRO_TLB_UNMAPPED) { + if (no_exception) + return false; + // Unmapped, generate a translation fault if (flags & ARM7_TLB_ABORT_D) { @@ -428,6 +436,9 @@ bool arm7_cpu_device::arm7_tlb_translate(offs_t &addr, int flags) switch( desc_lvl2 & 3 ) { case COPRO_TLB_UNMAPPED: + if (no_exception) + return false; + // Unmapped, generate a translation fault if (flags & ARM7_TLB_ABORT_D) { @@ -458,6 +469,10 @@ bool arm7_cpu_device::arm7_tlb_translate(offs_t &addr, int flags) { addr = ( desc_lvl2 & COPRO_TLB_SMALL_PAGE_MASK ) | ( addr & ~COPRO_TLB_SMALL_PAGE_MASK ); } + else if (no_exception) + { + return false; + } else { if (flags & ARM7_TLB_ABORT_D) @@ -669,7 +684,7 @@ void arm7_cpu_device::update_insn_prefetch(uint32_t curr_pc) for (uint32_t i = 0; i < to_fetch; i++) { uint32_t index = (i + start_index) % m_insn_prefetch_depth; - if ((m_control & COPRO_CTRL_MMU_EN) && !arm7_tlb_translate(pc, ARM7_TLB_ABORT_P | ARM7_TLB_READ)) + if ((m_control & COPRO_CTRL_MMU_EN) && !arm7_tlb_translate(pc, ARM7_TLB_ABORT_P | ARM7_TLB_READ, true)) { break; } @@ -686,12 +701,12 @@ uint16_t arm7_cpu_device::insn_fetch_thumb(uint32_t pc) { if (pc & 2) { - uint16_t insn = (uint16_t)(m_insn_prefetch_buffer[m_insn_prefetch_index] >> 16); + uint16_t insn = (uint16_t)(m_insn_prefetch_buffer[m_insn_prefetch_index] >> m_prefetch_word1_shift); m_insn_prefetch_index = (m_insn_prefetch_index + 1) % m_insn_prefetch_count; m_insn_prefetch_count--; return insn; } - return (uint16_t)m_insn_prefetch_buffer[m_insn_prefetch_index]; + return (uint16_t)(m_insn_prefetch_buffer[m_insn_prefetch_index] >> m_prefetch_word0_shift); } uint32_t arm7_cpu_device::insn_fetch_arm(uint32_t pc) @@ -936,20 +951,14 @@ offs_t arm7_cpu_device::disasm_disassemble(std::ostream &stream, offs_t pc, cons { if (m_endian == ENDIANNESS_BIG) { - if (pc & 1) - { - fetched_op[1] = op & 0xff; - fetched_op[0] = (op >> 8) & 0xff; - } - else - { - fetched_op[1] = op & 0xff; - fetched_op[0] = (op >> 8) & 0xff; - } + op >>= ((pc & 2) ? 0 : 16); + fetched_op[1] = op & 0xff; + fetched_op[0] = (op >> 8) & 0xff; return CPU_DISASSEMBLE_NAME(arm7thumb_be)(this, stream, pc, fetched_op, opram, options); } else { + op >>= ((pc & 2) ? 16 : 0); fetched_op[0] = op & 0xff; fetched_op[1] = (op >> 8) & 0xff; return CPU_DISASSEMBLE_NAME(arm7thumb)(this, stream, pc, fetched_op, opram, options); diff --git a/src/devices/cpu/arm7/arm7.h b/src/devices/cpu/arm7/arm7.h index 65ebd9ad35f..e6777b39227 100644 --- a/src/devices/cpu/arm7/arm7.h +++ b/src/devices/cpu/arm7/arm7.h @@ -139,6 +139,8 @@ protected: uint32_t m_insn_prefetch_index; uint32_t m_insn_prefetch_buffer[3]; uint32_t m_insn_prefetch_address[3]; + const uint32_t m_prefetch_word0_shift; + const uint32_t m_prefetch_word1_shift; bool m_pendingIrq; bool m_pendingFiq; @@ -213,7 +215,7 @@ protected: void arm9ops_e(uint32_t insn); void set_cpsr(uint32_t val); - bool arm7_tlb_translate(offs_t &addr, int flags); + bool arm7_tlb_translate(offs_t &addr, int flags, bool no_exception = false); uint32_t arm7_tlb_get_second_level_descriptor( uint32_t granularity, uint32_t first_desc, uint32_t vaddr ); int detect_fault(int desc_lvl1, int ap, int flags); void arm7_check_irq_state(); -- cgit v1.2.3 From f6d70f1db20b4c629413d9979951496dc40acaeb Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 25 Oct 2017 13:45:14 -0400 Subject: ptcsol.cpp: Clock note (nw) --- src/mame/drivers/ptcsol.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mame/drivers/ptcsol.cpp b/src/mame/drivers/ptcsol.cpp index 7777959b7c2..3e7fa3ed6e1 100644 --- a/src/mame/drivers/ptcsol.cpp +++ b/src/mame/drivers/ptcsol.cpp @@ -733,7 +733,7 @@ void sol20_state::kbd_put(u8 data) static MACHINE_CONFIG_START( sol20 ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu",I8080, XTAL_14_31818MHz/7) + MCFG_CPU_ADD("maincpu",I8080, XTAL_14_31818MHz / 7) // divider selectable as 5, 6 or 7 through jumpers MCFG_CPU_PROGRAM_MAP(sol20_mem) MCFG_CPU_IO_MAP(sol20_io) MCFG_I8085A_INTE(DEVWRITELINE("speaker", speaker_sound_device, level_w)) -- cgit v1.2.3 From 36b8ae944b1d601e9337442434016e38891fd21f Mon Sep 17 00:00:00 2001 From: hap Date: Thu, 26 Oct 2017 01:42:08 +0200 Subject: nimbus: moved default eeprom data to romset (nw) --- src/mame/drivers/rmnimbus.cpp | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/mame/drivers/rmnimbus.cpp b/src/mame/drivers/rmnimbus.cpp index 005b2fd374c..c7bd3504d30 100644 --- a/src/mame/drivers/rmnimbus.cpp +++ b/src/mame/drivers/rmnimbus.cpp @@ -100,14 +100,6 @@ static ADDRESS_MAP_START( nimbus_iocpu_io , AS_IO, 8, rmnimbus_state ) AM_RANGE(0x20000, 0x20004) AM_READWRITE(nimbus_pc8031_port_r, nimbus_pc8031_port_w) ADDRESS_MAP_END -static const uint16_t def_config[16] = -{ - 0x0280, 0x017F, 0xE824, 0x8129, - 0x0329, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x8893, 0x2025, 0xB9E6 -}; - static MACHINE_CONFIG_START( nimbus ) /* basic machine hardware */ MCFG_CPU_ADD(MAINCPU_TAG, I80186, 16000000) // the cpu is a 10Mhz part but the serial clocks are wrong unless it runs at 8Mhz @@ -180,7 +172,6 @@ static MACHINE_CONFIG_START( nimbus ) MCFG_RS232_CTS_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, ctsb_w)) MCFG_EEPROM_SERIAL_93C06_ADD(ER59256_TAG) - MCFG_EEPROM_DATA(def_config,sizeof(def_config)) MCFG_DEVICE_ADD(VIA_TAG, VIA6522, 1000000) MCFG_VIA6522_WRITEPA_HANDLER(DEVWRITE8("cent_data_out", output_latch_device, write)) @@ -227,6 +218,9 @@ ROM_START( nimbus ) ROM_REGION( 0x4000, IOCPU_TAG, 0 ) ROM_LOAD("hexec-v1.02u-13488-1985-10-29.rom", 0x0000, 0x1000, CRC(75c6adfd) SHA1(0f11e0b7386c6368d20e1fc7a6196d670f924825)) + + ROM_REGION16_LE( 0x20, ER59256_TAG, 0 ) // default eeprom data + ROM_LOAD("er59256", 0x00, 0x20, CRC(1a39de76) SHA1(0b6607f008dd92d6ab9af62b0b042fc3f5f4461c)) ROM_END // YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS -- cgit v1.2.3