summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/mame/drivers/prof180x.cpp104
-rw-r--r--src/mame/includes/prof180x.h10
2 files changed, 56 insertions, 58 deletions
diff --git a/src/mame/drivers/prof180x.cpp b/src/mame/drivers/prof180x.cpp
index 762be30c80d..dbd2f649eb9 100644
--- a/src/mame/drivers/prof180x.cpp
+++ b/src/mame/drivers/prof180x.cpp
@@ -27,6 +27,7 @@
#include "cpu/z180/z180.h"
#include "imagedev/floppy.h"
+#include "machine/74259.h"
#include "machine/ram.h"
#include "machine/upd765.h"
#include "screen.h"
@@ -81,62 +82,44 @@ WRITE8_MEMBER( prof180x_state::write )
}
}
-void prof180x_state::ls259_w(int flag, int value)
+WRITE_LINE_MEMBER(prof180x_state::c0_flag_w)
{
- switch (flag)
- {
- case 0: // C0
- m_c0 = value;
- break;
-
- case 1: // C1
- m_c1 = value;
- break;
-
- case 2: // C2
- m_c2 = value;
- break;
-
- case 3: // MINI
- break;
-
- case 4: // MM0
- m_mm0 = value;
- break;
-
- case 5: // RTC
- break;
-
- case 6: // PEPS
- break;
+ // C0 (DATA)
+ m_c0 = state;
+}
- case 7: // MM1
- m_mm1 = value;
- break;
- }
+WRITE_LINE_MEMBER(prof180x_state::c1_flag_w)
+{
+ // C1 (M0)
+ m_c1 = state;
}
-WRITE8_MEMBER( prof180x_state::flr_w )
+WRITE_LINE_MEMBER(prof180x_state::c2_flag_w)
{
- /*
+ // C2 (M1)
+ m_c2 = state;
+}
- bit description
+WRITE_LINE_MEMBER(prof180x_state::mini_flag_w)
+{
+}
- 0 VAL
- 1 FLG0
- 2 FLG1
- 3 FLG2
- 4
- 5
- 6
- 7
+WRITE_LINE_MEMBER(prof180x_state::mm0_flag_w)
+{
+ m_mm0 = state;
+}
- */
+WRITE_LINE_MEMBER(prof180x_state::rtc_ce_w)
+{
+}
- int val = BIT(data, 0);
- int flg = (data >> 1) & 0x07;
+WRITE_LINE_MEMBER(prof180x_state::peps_flag_w)
+{
+}
- ls259_w(flg, val);
+WRITE_LINE_MEMBER(prof180x_state::mm1_flag_w)
+{
+ m_mm1 = state;
}
READ8_MEMBER( prof180x_state::status0_r )
@@ -188,16 +171,19 @@ READ8_MEMBER( prof180x_state::status_r )
void prof180x_state::prof180x_mem(address_map &map)
{
- map(0x0000, 0xffff).rw(FUNC(prof180x_state::read), FUNC(prof180x_state::write));
+ map(0x00000, 0x0ffff).rom().region(HD64180_TAG, 0);
+ map(0x4f000, 0x4ffff).ram();
+ //map(0x0000, 0xffff).rw(FUNC(prof180x_state::read), FUNC(prof180x_state::write));
}
void prof180x_state::prof180x_io(address_map &map)
{
- map(0x08, 0x08).mirror(0xff00).w(FUNC(prof180x_state::flr_w));
- map(0x09, 0x09).select(0xff00).r(FUNC(prof180x_state::status_r));
- map(0x0a, 0x0a).mirror(0xff00).rw(FDC9268_TAG, FUNC(upd765a_device::dma_r), FUNC(upd765a_device::dma_w));
- map(0x0b, 0x0b).mirror(0xff00).w("cent_data_out", FUNC(output_latch_device::bus_w));
- map(0x0c, 0x0d).mirror(0xff00).m(FDC9268_TAG, FUNC(upd765a_device::map));
+ map(0x0000, 0x003f).noprw(); // Z180 internal registers
+ map(0x00d8, 0x00d8).mirror(0xff00).w("syslatch", FUNC(ls259_device::write_nibble_d0));
+ map(0x00d9, 0x00d9).select(0xff00).r(FUNC(prof180x_state::status_r));
+ map(0x00da, 0x00da).mirror(0xff00).rw(FDC9268_TAG, FUNC(upd765a_device::dma_r), FUNC(upd765a_device::dma_w));
+ map(0x00db, 0x00db).mirror(0xff00).w("cent_data_out", FUNC(output_latch_device::bus_w));
+ map(0x00dc, 0x00dd).mirror(0xff00).m(FDC9268_TAG, FUNC(upd765a_device::map));
}
/* Input ports */
@@ -231,10 +217,6 @@ void prof180x_state::machine_start()
void prof180x_state::machine_reset()
{
- for (int i = 0; i < 8; i++)
- {
- ls259_w(i, 0);
- }
}
void prof180x_state::prof180x(machine_config &config)
@@ -244,6 +226,16 @@ void prof180x_state::prof180x(machine_config &config)
maincpu.set_addrmap(AS_PROGRAM, &prof180x_state::prof180x_mem);
maincpu.set_addrmap(AS_IO, &prof180x_state::prof180x_io);
+ ls259_device &syslatch(LS259(config, "syslatch")); // Z41
+ syslatch.q_out_cb<0>().set(FUNC(prof180x_state::c0_flag_w));
+ syslatch.q_out_cb<1>().set(FUNC(prof180x_state::c1_flag_w));
+ syslatch.q_out_cb<2>().set(FUNC(prof180x_state::c2_flag_w));
+ syslatch.q_out_cb<3>().set(FUNC(prof180x_state::mini_flag_w));
+ syslatch.q_out_cb<4>().set(FUNC(prof180x_state::mm0_flag_w));
+ syslatch.q_out_cb<5>().set(FUNC(prof180x_state::rtc_ce_w));
+ syslatch.q_out_cb<6>().set(FUNC(prof180x_state::peps_flag_w));
+ syslatch.q_out_cb<7>().set(FUNC(prof180x_state::mm1_flag_w));
+
/* video hardware */
screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER));
screen.set_screen_update(FUNC(prof180x_state::screen_update));
diff --git a/src/mame/includes/prof180x.h b/src/mame/includes/prof180x.h
index 6f0be4f565d..d5184d62f0e 100644
--- a/src/mame/includes/prof180x.h
+++ b/src/mame/includes/prof180x.h
@@ -34,12 +34,18 @@ private:
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
- DECLARE_WRITE8_MEMBER( flr_w );
DECLARE_READ8_MEMBER( status0_r );
DECLARE_READ8_MEMBER( status1_r );
DECLARE_READ8_MEMBER( status_r );
- void ls259_w(int flag, int value);
+ DECLARE_WRITE_LINE_MEMBER(c0_flag_w);
+ DECLARE_WRITE_LINE_MEMBER(c1_flag_w);
+ DECLARE_WRITE_LINE_MEMBER(c2_flag_w);
+ DECLARE_WRITE_LINE_MEMBER(mini_flag_w);
+ DECLARE_WRITE_LINE_MEMBER(mm0_flag_w);
+ DECLARE_WRITE_LINE_MEMBER(rtc_ce_w);
+ DECLARE_WRITE_LINE_MEMBER(peps_flag_w);
+ DECLARE_WRITE_LINE_MEMBER(mm1_flag_w);
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);