diff options
Diffstat (limited to 'src/mame/drivers/tecnbras.cpp')
-rw-r--r-- | src/mame/drivers/tecnbras.cpp | 146 |
1 files changed, 0 insertions, 146 deletions
diff --git a/src/mame/drivers/tecnbras.cpp b/src/mame/drivers/tecnbras.cpp deleted file mode 100644 index a7c1dbb964b..00000000000 --- a/src/mame/drivers/tecnbras.cpp +++ /dev/null @@ -1,146 +0,0 @@ -// license:GPL-2.0+ -// copyright-holders: Felipe Sanches -/*************************************************************************** - - TECNBRAS dot matrix display (70x7 pixels) - Driver by Felipe Correa da Silva Sanches <juca@members.fsf.org> - - The display is composed of 14 blocks of 5x7 LEDs - - These LEDs are driven by several 74xx chips: - * one 74138 - * several 74164 and ULN2003 chips - - Changelog: - - 2014 JUN 23 [Felipe Sanches]: - * Initial driver skeleton - -================ -*/ - -#include "emu.h" -#include "cpu/mcs51/mcs51.h" - -#include <algorithm> - -#include "tecnbras.lh" - - -class tecnbras_state : public driver_device -{ -public: - tecnbras_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_maincpu(*this, "maincpu") - , m_dmds(*this, "dmd_%u", 0U) - { } - - void tecnbras(machine_config &config); - -private: - virtual void machine_start() override; - virtual void machine_reset() override; - - DECLARE_WRITE8_MEMBER(set_x_position_w); - DECLARE_WRITE8_MEMBER(print_column_w); - - //DECLARE_WRITE8_MEMBER(tecnbras_io_w); - //DECLARE_READ8_MEMBER(tecnbras_io_r); - void i80c31_io(address_map &map); - void i80c31_prg(address_map &map); - - required_device<i80c31_device> m_maincpu; - output_finder<14 * 7> m_dmds; - - int m_xcoord; - char m_digit[14][7]; -}; - -void tecnbras_state::i80c31_prg(address_map &map) -{ - map(0x0000, 0x7FFF).rom(); - map(0x8000, 0xFFFF).ram(); -} - -#define DMD_OFFSET 24 //This is a guess. We should verify the real hardware behaviour -void tecnbras_state::i80c31_io(address_map &map) -{ - map(0x0100+DMD_OFFSET, 0x0145+DMD_OFFSET).w(FUNC(tecnbras_state::set_x_position_w)); - map(0x06B8, 0x06BC).w(FUNC(tecnbras_state::print_column_w)); -} - -WRITE8_MEMBER(tecnbras_state::set_x_position_w) -{ - m_xcoord = offset; -} - -WRITE8_MEMBER(tecnbras_state::print_column_w) -{ - int const x = m_xcoord + offset; - int const ch = x / 5; - if (ch < ARRAY_LENGTH(m_digit)) { - int const row = x % 5; - for (int i = 0; i < 7; i++) { - m_digit[ch][i] &= ~(1 << row); - m_digit[ch][i] |= BIT(data, 7 - i) ? (1 << row) : 0; - m_dmds[(ch * 7) + i] = 0x1F & m_digit[ch][i]; - } - } -} - -void tecnbras_state::machine_start() -{ - m_dmds.resolve(); - - save_item(NAME(m_xcoord)); - save_item(NAME(m_digit)); - - m_xcoord = 0; - for (auto &elem : m_digit) - std::fill(std::begin(elem), std::end(elem), 0); - -#if 0 - for (int x = 0; x < ARRAY_LENGTH(m_digit); x++) - for (int y = 0; y < 7; y++) - m_dmds[(x * 7) + y] = y; -#endif -} - -void tecnbras_state::machine_reset() -{ -} - -void tecnbras_state::tecnbras(machine_config &config) -{ - /* basic machine hardware */ - I80C31(config, m_maincpu, 12_MHz_XTAL); // verified on pcb - m_maincpu->set_addrmap(AS_PROGRAM, &tecnbras_state::i80c31_prg); - m_maincpu->set_addrmap(AS_IO, &tecnbras_state::i80c31_io); - m_maincpu->port_out_cb<1>().set_nop(); // buzzer ? - -/* TODO: Add an I2C RTC (Philips PCF8583P) - pin 6 (SCL): cpu T0/P3.4 (pin 14) - pin 5 (SDA): cpu T1/P3.5 (pin 15) -*/ - -/* - TODO: Add a speaker - CPU P1.0 (pin 1) -*/ - -/* - TODO: Add a communications port to receive commands from the remote control -*/ - - /* video hardware */ - config.set_default_layout(layout_tecnbras); -} - -ROM_START( tecnbras ) - ROM_REGION( 0x8000, "maincpu", 0 ) - ROM_LOAD( "tecnbras.u2", 0x0000, 0x8000, CRC(1a1e18fc) SHA1(8907e72f0356a2e2e1097dabac6d6b0b3d717f85) ) -ROM_END - -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 200?, tecnbras, 0, 0, tecnbras, 0, tecnbras_state, empty_init, "Tecnbras", "Dot Matrix Display (70x7 pixels)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND ) |