summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author mooglyguy <therealmogminer@gmail.com>2018-04-15 11:48:15 +0200
committer mooglyguy <therealmogminer@gmail.com>2018-04-15 11:48:36 +0200
commitabe1af588253172400c984751ee6c4370d4e433c (patch)
treedbae513d56542fdeb19dd5bc1d22fab1c46592cc
parent6528bb5451a1bc2919eae3569979c73e408d807f (diff)
vp415 updates, now actually starts proper testing loop, nw
-rw-r--r--src/devices/cpu/mcs51/mcs51.cpp5
-rw-r--r--src/devices/machine/saa1043.cpp5
-rw-r--r--src/mame/drivers/vp415.cpp88
3 files changed, 90 insertions, 8 deletions
diff --git a/src/devices/cpu/mcs51/mcs51.cpp b/src/devices/cpu/mcs51/mcs51.cpp
index b89ebca10ac..8eb6b5802ef 100644
--- a/src/devices/cpu/mcs51/mcs51.cpp
+++ b/src/devices/cpu/mcs51/mcs51.cpp
@@ -1858,6 +1858,7 @@ void mcs51_cpu_device::execute_set_input(int irqline, int state)
{
//External Interrupt 0
case MCS51_INT0_LINE:
+ SET_P3((P3 &~ 4) | (state << 2));
//Line Asserted?
if (state != CLEAR_LINE) {
//Need cleared->active line transition? (Logical 1-0 Pulse on the line) - CLEAR->ASSERT Transition since INT0 active lo!
@@ -1866,7 +1867,9 @@ void mcs51_cpu_device::execute_set_input(int irqline, int state)
SET_IE0(1);
}
else
+ {
SET_IE0(1); //Nope, just set it..
+ }
}
else
{
@@ -1878,7 +1881,7 @@ void mcs51_cpu_device::execute_set_input(int irqline, int state)
//External Interrupt 1
case MCS51_INT1_LINE:
-
+ SET_P3((P3 &~ 8) | (state << 3));
//Line Asserted?
if (state != CLEAR_LINE) {
//Need cleared->active line transition? (Logical 1-0 Pulse on the line) - CLEAR->ASSERT Transition since INT1 active lo!
diff --git a/src/devices/machine/saa1043.cpp b/src/devices/machine/saa1043.cpp
index 2ebfe38e2e7..215f4d36524 100644
--- a/src/devices/machine/saa1043.cpp
+++ b/src/devices/machine/saa1043.cpp
@@ -27,7 +27,7 @@ saa1043_device::saa1043_device(const machine_config &mconfig, const char *tag, d
void saa1043_device::device_start()
{
- m_h = attotime::from_ticks(320, clock());
+ m_h = attotime::from_ticks(320, clock() * 2);
m_line_count = s_line_counts[m_type];
// resolve callbacks
@@ -57,6 +57,7 @@ void saa1043_device::device_reset()
{
m_outputs[i](CLEAR_LINE);
}
+ m_outputs[V2](ASSERT_LINE);
}
void saa1043_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
@@ -64,7 +65,7 @@ void saa1043_device::device_timer(emu_timer &timer, device_timer_id id, int para
switch (id)
{
case V2:
- m_outputs[id](1 - param);
+ m_outputs[V2](1 - param);
if (param)
m_timers[V2]->adjust(m_h * (m_line_count - 9), 0);
else
diff --git a/src/mame/drivers/vp415.cpp b/src/mame/drivers/vp415.cpp
index 608740146f6..93029472926 100644
--- a/src/mame/drivers/vp415.cpp
+++ b/src/mame/drivers/vp415.cpp
@@ -79,8 +79,13 @@ public:
DECLARE_READ8_MEMBER(ncr5385_r);
DECLARE_WRITE8_MEMBER(sel34_w);
DECLARE_READ8_MEMBER(sel37_r);
+
DECLARE_WRITE8_MEMBER(ctrl_regs_w);
DECLARE_READ8_MEMBER(ctrl_regs_r);
+ DECLARE_WRITE8_MEMBER(ctrl_cpu_port1_w);
+ DECLARE_READ8_MEMBER(ctrl_cpu_port1_r);
+ DECLARE_WRITE8_MEMBER(ctrl_cpu_port3_w);
+ DECLARE_READ8_MEMBER(ctrl_cpu_port3_r);
DECLARE_READ8_MEMBER(drive_i8155_pb_r);
DECLARE_READ8_MEMBER(drive_i8155_pc_r);
@@ -190,6 +195,12 @@ protected:
enum
{
+ I8255PC_NOT_FOCUSED = 0x02,
+ I8255PC_DISC_REFLECTION = 0x10,
+ };
+
+ enum
+ {
I8255PB_COMM1 = 0x01,
I8255PB_COMM2 = 0x02,
I8255PB_COMM3 = 0x04,
@@ -241,6 +252,12 @@ protected:
uint8_t m_intn_lines[2];
uint8_t m_refv;
+
+ uint8_t m_ctrl_p1;
+ uint8_t m_ctrl_p3;
+
+ uint8_t m_drive_p1;
+ uint8_t m_drive_pc_bits;
};
/*static*/ const char* vp415_state::Z80CPU_TAG = "z80cpu";
@@ -270,6 +287,13 @@ void vp415_state::machine_reset()
m_sel37 = SEL37_BRD | SEL37_MON_N | SEL37_SK1c | SEL37_SK1d;
m_intn_lines[0] = 1;
m_intn_lines[1] = 1;
+
+ m_ctrl_p1 = 0;
+ m_ctrl_p3 = 0;
+
+ m_drive_p1 = 0;
+
+ m_drive_pc_bits = I8255PC_DISC_REFLECTION | I8255PC_NOT_FOCUSED;
}
void vp415_state::machine_start()
@@ -279,7 +303,8 @@ void vp415_state::machine_start()
WRITE_LINE_MEMBER(vp415_state::refv_w)
{
m_refv = state;
- m_drivecpu->set_input_line(MCS51_INT0_LINE, m_refv ? ASSERT_LINE : CLEAR_LINE);
+ m_drivecpu->set_input_line(MCS51_INT0_LINE, m_refv ? CLEAR_LINE : ASSERT_LINE);
+ //printf("Current time in ms: %f\n", machine().scheduler().time().as_double() * 1000.0D);
}
// CPU Datagrabber Module (W)
@@ -468,6 +493,38 @@ READ8_MEMBER(vp415_state::ctrl_regs_r)
return value;
}
+WRITE8_MEMBER(vp415_state::ctrl_cpu_port1_w)
+{
+ uint8_t old = m_ctrl_p1;
+ m_ctrl_p1 = data;
+
+ if ((m_ctrl_p1 ^ old) & 0xdf) // Ignore petting the watchdog (bit 5)
+ {
+ logerror("%s: ctrl_cpu_port1_w: %02x\n", machine().describe_context(), data);
+ }
+}
+
+READ8_MEMBER(vp415_state::ctrl_cpu_port1_r)
+{
+ uint8_t ret = m_ctrl_p1;
+ m_ctrl_p1 ^= 0x10;
+ logerror("%s: ctrl_cpu_port1_r (%02x)\n", machine().describe_context(), ret);
+ return ret;// | (m_refv << 4);
+}
+
+WRITE8_MEMBER(vp415_state::ctrl_cpu_port3_w)
+{
+ m_ctrl_p3 = data;
+ logerror("%s: ctrl_cpu_port3_w: %02x\n", machine().describe_context(), data);
+}
+
+READ8_MEMBER(vp415_state::ctrl_cpu_port3_r)
+{
+ uint8_t ret = m_ctrl_p3;
+ logerror("%s: ctrl_cpu_port3_r (%02x)\n", machine().describe_context(), ret);
+ return ret;
+}
+
uint8_t vp415_state::sd_r()
{
return 0;
@@ -519,17 +576,34 @@ WRITE8_MEMBER(vp415_state::drive_i8255_pb_w)
, BIT(data, I8255PB_SL_PWR_BIT)
, BIT(data, I8255PB_RAD_FS_N_BIT)
, BIT(data, I8255PB_STR1_BIT));
+ if (BIT(data, I8255PB_RLS_N_BIT))
+ {
+ }
}
READ8_MEMBER(vp415_state::drive_i8255_pc_r)
{
- logerror("%s: drive_i8255_pc_r: %02x\n", machine().describe_context(), 0);
- return 0;
+ static int focus_kludge = 250;
+ logerror("%s: drive_i8255_pc_r: %02x\n", machine().describe_context(), m_drive_pc_bits);
+ if (focus_kludge > 0)
+ {
+ focus_kludge--;
+ }
+ else
+ {
+ m_drive_pc_bits &= ~I8255PC_NOT_FOCUSED;
+ }
+ return m_drive_pc_bits;
}
WRITE8_MEMBER(vp415_state::drive_cpu_port1_w)
{
- //logerror("%s: drive_cpu_port1_w: %02x\n", machine().describe_context(), data);
+ uint8_t old = m_drive_p1;
+ m_drive_p1 = data;
+ if ((m_drive_p1 ^ old) & 0xfb) // Ignore bit 2 when logging (LDI)
+ {
+ logerror("%s: drive_cpu_port1_w: %02x\n", machine().describe_context(), data);
+ }
m_chargen->ldi_w(BIT(data, 2));
}
@@ -583,7 +657,11 @@ MACHINE_CONFIG_START(vp415_state::vp415)
MCFG_CPU_PROGRAM_MAP(z80_program_map)
MCFG_CPU_IO_MAP(z80_io_map)
- MCFG_CPU_ADD(CTRLCPU_TAG, I8031, XTAL(11'059'200)) // 12MHz, per schematic
+ MCFG_CPU_ADD(CTRLCPU_TAG, I8031, XTAL(11'059'200)) // 11.059MHz, per schematic
+ MCFG_MCS51_PORT_P1_OUT_CB(WRITE8(vp415_state, ctrl_cpu_port1_w));
+ MCFG_MCS51_PORT_P1_IN_CB(READ8(vp415_state, ctrl_cpu_port1_r));
+ MCFG_MCS51_PORT_P3_OUT_CB(WRITE8(vp415_state, ctrl_cpu_port1_w));
+ MCFG_MCS51_PORT_P3_IN_CB(READ8(vp415_state, ctrl_cpu_port1_r));
MCFG_CPU_PROGRAM_MAP(ctrl_program_map)
MCFG_CPU_IO_MAP(ctrl_io_map)