summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commitf7b53ed1bcf4845a75520ac5a6ae4320cb4fa972 (patch)
tree1b398b5e6752f4d40e24d048001e1c1662c175ce
parent4210ce2de00ab1bef328c4fa93ef49508db29e71 (diff)
fidel68k: untangle fex68k with feag (nw)
-rw-r--r--src/mame/drivers/fidel6502.cpp5
-rw-r--r--src/mame/drivers/fidel68k.cpp50
-rw-r--r--src/mame/includes/fidelbase.h2
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;