diff options
author | hap <happppp@users.noreply.github.com> | 2019-08-23 21:03:08 +0200 |
---|---|---|
committer | hap <happppp@users.noreply.github.com> | 2019-08-23 21:03:25 +0200 |
commit | 0de651e14d1ce24bb6b5744142899e3e29f554c2 (patch) | |
tree | 52c852aecec577e1f962a52d54c538456af83d89 | |
parent | 8bb08a8fc0020a7cf71835159d30da4886ee132f (diff) |
ssystem3: add svg screen (nw)
-rw-r--r-- | src/mame/drivers/hh_tms1k.cpp | 2 | ||||
-rw-r--r-- | src/mame/drivers/saitek_chesstrv.cpp | 4 | ||||
-rw-r--r-- | src/mame/drivers/saitek_ssystem3.cpp | 64 | ||||
-rw-r--r-- | src/mame/drivers/saitek_stratos.cpp | 2 |
4 files changed, 32 insertions, 40 deletions
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp index dd549b5a73d..785b21de3e8 100644 --- a/src/mame/drivers/hh_tms1k.cpp +++ b/src/mame/drivers/hh_tms1k.cpp @@ -7514,7 +7514,7 @@ void mbdtower_state::update_display() else { // display items turned off - m_display->matrix(0, 0); + m_display->clear(); } } diff --git a/src/mame/drivers/saitek_chesstrv.cpp b/src/mame/drivers/saitek_chesstrv.cpp index 189a3fe808a..6b19631c02c 100644 --- a/src/mame/drivers/saitek_chesstrv.cpp +++ b/src/mame/drivers/saitek_chesstrv.cpp @@ -14,8 +14,8 @@ It was also redistributed by Acetronic as "Chess Traveller"(British spelling the and by Prinztronic as well, another British brand SciSys/Novag's "Chess Champion: Pocket Chess" is assumed to be the same game, -with the exception that they added battery low voltage detection to it (rightmost -digit DP lights up). +it has the same MCU serial (SL90387). They added battery low voltage detection +to it (rightmost digit DP lights up). ******************************************************************************/ diff --git a/src/mame/drivers/saitek_ssystem3.cpp b/src/mame/drivers/saitek_ssystem3.cpp index 7239b731303..48703a3570b 100644 --- a/src/mame/drivers/saitek_ssystem3.cpp +++ b/src/mame/drivers/saitek_ssystem3.cpp @@ -14,7 +14,7 @@ with support from David Levy. Hardware notes: (main unit) - Synertek 6502A @ 2MHz (4MHz XTAL) -- Synertek 6522 +- Synertek 6522 VIA - 8KB ROM (2*Synertek 2332) - 1KB RAM (2*HM472114P-3) - MD4332BE + a bunch of TTL for the LCD @@ -31,14 +31,13 @@ Chess Unit: Printer Unit: - unknown hardware, assume own CPU like the chess unit -PSU ("permanent storage unit"?) is probably just a 256x4 battery-backed RAM +PSU ("permanent storage unit"?) is just a battery-backed 256x4 RAM (TC5501P) module, not sure why it was so expensive (~180DM). A chess clock accessory was also announced but unreleased. SciSys Super System IV is on similar hardware. TODO: -- WIP - 6522 ACR register is initialized with 0xe3. Meaning: PA and PB inputs are set to latch mode, but the program then never clocks the latch, it functions as if it meant to write 0xe0. Maybe 6522 CA1 pin emulation is wrong? Documentation @@ -49,7 +48,11 @@ TODO: - 2nd 7474 /2 clock divider on each 4000-7fff access, this also applies to 6522 clock (doesn't affect chess calculation speed, only I/O access, eg. beeper pitch). Should be doable to add, but 6522 device doesn't support live clock changes. -- add chessboard lcd and printer +- LCD TC pin? connects to the display, source is a 50hz timer(from power supply), + probably to keep refreshing the LCD when inactive, there is no need to emulate it +- add chessboard lcd and printer unit +- add memory unit +- internal artwork ******************************************************************************/ @@ -57,7 +60,6 @@ TODO: #include "cpu/m6502/m6502.h" #include "machine/6522via.h" #include "machine/nvram.h" -#include "machine/clock.h" #include "sound/dac.h" #include "sound/volt_reg.h" #include "video/md4330b.h" @@ -104,8 +106,7 @@ private: void main_map(address_map &map); // I/O handlers - DECLARE_WRITE_LINE_MEMBER(update_lcd); - DECLARE_WRITE32_MEMBER(lcd_q_w); + DECLARE_WRITE32_MEMBER(lcd_q_w) { m_lcd_q = data; } DECLARE_WRITE8_MEMBER(input_w); DECLARE_READ8_MEMBER(input_r); DECLARE_WRITE8_MEMBER(control_w); @@ -138,29 +139,6 @@ void ssystem3_state::machine_start() I/O ******************************************************************************/ -// MD4332B LCD - -WRITE_LINE_MEMBER(ssystem3_state::update_lcd) -{ - // update on falling edge - if (!state) - { - // temporary - output().set_value("digit0", m_lcd_q >> 0 & 0xff); - output().set_value("digit1", m_lcd_q >> 8 & 0xff); - output().set_value("digit2", m_lcd_q >> 16 & 0xff); - output().set_value("digit3", m_lcd_q >> 24 & 0xff); - } -} - -WRITE32_MEMBER(ssystem3_state::lcd_q_w) -{ - m_lcd_q = data; -} - - -// 6522 VIA - WRITE8_MEMBER(ssystem3_state::input_w) { // PA0-PA7: input mux @@ -198,7 +176,16 @@ WRITE8_MEMBER(ssystem3_state::control_w) // PB2 also clocks a 4015B // DA: LCD DO, DB: Q3A if (data & ~m_control & 4) + { m_shift = m_shift << 1 | m_lcd->do_r(); + u64 out2 = m_shift | 0x100; + + // weird TTL maze, I assume it's a hw kludge to fix a bug after the maskroms were already manufactured + if (BIT(m_shift, 3) & ~(BIT(m_shift, 1) ^ BIT(m_shift, 4)) & ~(BIT(m_lcd_q, 7) & BIT(m_lcd_q, 23))) + out2 ^= 0x12; + + m_display->matrix(1, out2 << 32 | m_lcd_q); + } // PB3: device serial out @@ -254,12 +241,12 @@ static INPUT_PORTS_START( ssystem3 ) PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_A) PORT_NAME("A 1 / White") PORT_START("IN.3") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Time") // not a toggle switch + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_TOGGLE PORT_NAME("Time") PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H) PORT_NAME("H 8 / Black") PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_C) PORT_NAME("C 3 / Queen / #50") PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_B) PORT_NAME("B 2 / King / FP") - PORT_START("IN.4") + PORT_START("IN.4") // switches PORT_CONFNAME( 0x01, 0x01, "Sound" ) PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) PORT_CONFSETTING( 0x01, DEF_STR( On ) ) @@ -289,11 +276,13 @@ void ssystem3_state::ssystem3(machine_config &config) MD4332B(config, m_lcd); m_lcd->write_q().set(FUNC(ssystem3_state::lcd_q_w)); - clock_device &tc_clock(CLOCK(config, "tc_clock", 50)); // from power supply - tc_clock.signal_handler().set(m_lcd, FUNC(md4332b_device::tc_w)); - tc_clock.signal_handler().append(FUNC(ssystem3_state::update_lcd)); + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG)); + screen.set_refresh_hz(60); + screen.set_size(1920, 729); + screen.set_visarea_full(); - PWM_DISPLAY(config, m_display).set_size(4, 4); + PWM_DISPLAY(config, m_display).set_size(1, 32+8+1); + m_display->set_bri_levels(0.25); //config.set_default_layout(layout_saitek_ssystem3); /* sound hardware */ @@ -315,6 +304,9 @@ ROM_START( ssystem3 ) // HACK! 6522 ACR register setup ROM_FILL(0x946d, 1, 0xe0) // was 0xe3 + + ROM_REGION( 53511, "screen", 0) + ROM_LOAD( "ssystem3.svg", 0, 53511, CRC(a2820cc8) SHA1(2e922bb2d4a244931c1e7dafa84910dee5ab2623) ) ROM_END } // anonymous namespace diff --git a/src/mame/drivers/saitek_stratos.cpp b/src/mame/drivers/saitek_stratos.cpp index 4f7ec1d6662..786b4482183 100644 --- a/src/mame/drivers/saitek_stratos.cpp +++ b/src/mame/drivers/saitek_stratos.cpp @@ -218,7 +218,7 @@ void saitek_stratos_state::power_off() m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); // clear display - m_display->matrix(0, 0); + m_display->clear(); clear_lcd(); update_lcd(); } |