diff options
author | hap <happppp@users.noreply.github.com> | 2019-02-16 21:44:57 +0100 |
---|---|---|
committer | hap <happppp@users.noreply.github.com> | 2019-02-16 21:45:12 +0100 |
commit | f7b53ed1bcf4845a75520ac5a6ae4320cb4fa972 (patch) | |
tree | 1b398b5e6752f4d40e24d048001e1c1662c175ce | |
parent | 4210ce2de00ab1bef328c4fa93ef49508db29e71 (diff) |
fidel68k: untangle fex68k with feag (nw)
-rw-r--r-- | src/mame/drivers/fidel6502.cpp | 5 | ||||
-rw-r--r-- | src/mame/drivers/fidel68k.cpp | 50 | ||||
-rw-r--r-- | src/mame/includes/fidelbase.h | 2 |
3 files changed, 47 insertions, 10 deletions
diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp index bc8082fe4ed..ce64ef56cec 100644 --- a/src/mame/drivers/fidel6502.cpp +++ b/src/mame/drivers/fidel6502.cpp @@ -476,7 +476,6 @@ public: fidel6502_state(const machine_config &mconfig, device_type type, const char *tag) : fidelbase_state(mconfig, type, tag), m_ppi8255(*this, "ppi8255"), - m_rombank(*this, "rombank"), m_mainmap(*this, "mainmap"), m_div_config(*this, "div_config") { } @@ -529,7 +528,6 @@ public: private: // devices/pointers optional_device<i8255_device> m_ppi8255; - optional_memory_bank m_rombank; optional_device<address_map_bank_device> m_mainmap; optional_ioport m_div_config; @@ -1190,7 +1188,8 @@ WRITE8_MEMBER(fidel6502_state::fdesdis_control_w) display_matrix(9, 2, m_inp_mux, ~m_led_select & 3, false); // 74259 Q2: book rom A14 - m_rombank->set_entry(~m_led_select >> 2 & 1); + if (m_rombank != nullptr) + m_rombank->set_entry(~m_led_select >> 2 & 1); // 74259 Q3: lcd common, update on rising edge if (~q3_old & m_led_select & 8) diff --git a/src/mame/drivers/fidel68k.cpp b/src/mame/drivers/fidel68k.cpp index 8ee543db846..b7ccd80b23b 100644 --- a/src/mame/drivers/fidel68k.cpp +++ b/src/mame/drivers/fidel68k.cpp @@ -224,6 +224,10 @@ private: optional_device<ram_device> m_ram; // Excel 68000 + void fex68k_prepare_display(); + DECLARE_READ8_MEMBER(fex68k_input_r); + DECLARE_WRITE8_MEMBER(fex68k_leds_w); + DECLARE_WRITE8_MEMBER(fex68k_7seg_w); DECLARE_WRITE8_MEMBER(fex68k_mux_w); void fex68k_map(address_map &map); void fex68km2_map(address_map &map); @@ -257,6 +261,34 @@ private: Excel 68000 ******************************************************************************/ +void fidel68k_state::fex68k_prepare_display() +{ + // 4*7seg leds, 8*8 chessboard leds + u8 seg_data = bitswap<8>(m_7seg_data,0,1,3,2,7,5,6,4); + set_display_segmask(0x55, 0x7f); + display_matrix(16, 8, m_led_data << 8 | seg_data, m_inp_mux); +} + +READ8_MEMBER(fidel68k_state::fex68k_input_r) +{ + // a1-a3,d7: multiplexed inputs (active low) + return (read_inputs(9) >> offset & 1) ? 0 : 0x80; +} + +WRITE8_MEMBER(fidel68k_state::fex68k_leds_w) +{ + // a1-a3,d0: led data + m_led_data = (m_led_data & ~(1 << offset)) | ((data & 1) << offset); + fex68k_prepare_display(); +} + +WRITE8_MEMBER(fidel68k_state::fex68k_7seg_w) +{ + // a1-a3,d0(d8): digit segment data + m_7seg_data = (m_7seg_data & ~(1 << offset)) | ((data & 1) << offset); + fex68k_prepare_display(); +} + WRITE8_MEMBER(fidel68k_state::fex68k_mux_w) { // a1-a3,d0: 74259 @@ -264,7 +296,12 @@ WRITE8_MEMBER(fidel68k_state::fex68k_mux_w) m_led_select = (m_led_select & ~mask) | ((data & 1) ? mask : 0); // 74259 Q0-Q3: 74145 A-D (Q4-Q7 N/C) - eag_mux_w(space, offset, m_led_select & 0xf); + // 74145 0-8: input mux, digit/led select + // 74145 9: speaker out + u16 sel = 1 << (m_led_select & 0xf); + m_dac->write(BIT(sel, 9)); + m_inp_mux = sel & 0x1ff; + fex68k_prepare_display(); } @@ -347,10 +384,9 @@ void fidel68k_state::init_fdes2265() void fidel68k_state::eag_prepare_display() { - // Excel 68000: 4*7seg leds, 8*8 chessboard leds - // EAG: 8*7seg leds(2 panels), (8+1)*8 chessboard leds + // 8*7seg leds(2 panels), (8+1)*8 chessboard leds u8 seg_data = bitswap<8>(m_7seg_data,0,1,3,2,7,5,6,4); - set_display_segmask(0x1ff, 0x7f); + set_display_segmask(0x1ef, 0x7f); display_matrix(16, 9, m_led_data << 8 | seg_data, m_inp_mux); } @@ -402,10 +438,10 @@ WRITE8_MEMBER(fidel68k_state::eag_mux_w) void fidel68k_state::fex68k_map(address_map &map) { map(0x000000, 0x00ffff).rom(); - map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(fidel68k_state::eag_leds_w)).umask16(0x00ff); - map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(fidel68k_state::eag_7seg_w)).umask16(0xff00); + map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(fidel68k_state::fex68k_leds_w)).umask16(0x00ff); + map(0x000000, 0x00000f).mirror(0x00fff0).w(FUNC(fidel68k_state::fex68k_7seg_w)).umask16(0xff00); map(0x044000, 0x047fff).ram(); - map(0x100000, 0x10000f).mirror(0x03fff0).r(FUNC(fidel68k_state::eag_input1_r)).umask16(0x00ff); + map(0x100000, 0x10000f).mirror(0x03fff0).r(FUNC(fidel68k_state::fex68k_input_r)).umask16(0x00ff); map(0x140000, 0x14000f).mirror(0x03fff0).w(FUNC(fidel68k_state::fex68k_mux_w)).umask16(0x00ff); } diff --git a/src/mame/includes/fidelbase.h b/src/mame/includes/fidelbase.h index 97f1a3b5cfc..29e627c56a1 100644 --- a/src/mame/includes/fidelbase.h +++ b/src/mame/includes/fidelbase.h @@ -26,6 +26,7 @@ public: driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_irq_on(*this, "irq_on"), + m_rombank(*this, "rombank"), m_inp_matrix(*this, "IN.%u", 0), m_out_x(*this, "%u.%u", 0U, 0U), m_out_a(*this, "%u.a", 0U), @@ -42,6 +43,7 @@ public: // devices/pointers required_device<cpu_device> m_maincpu; optional_device<timer_device> m_irq_on; + optional_memory_bank m_rombank; optional_ioport_array<11> m_inp_matrix; // max 11 output_finder<0x20, 0x20> m_out_x; output_finder<0x20> m_out_a; |