summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine/pp01.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine/pp01.cpp')
-rw-r--r--src/mame/machine/pp01.cpp101
1 files changed, 63 insertions, 38 deletions
diff --git a/src/mame/machine/pp01.cpp b/src/mame/machine/pp01.cpp
index a711856ff5d..665724e5a60 100644
--- a/src/mame/machine/pp01.cpp
+++ b/src/mame/machine/pp01.cpp
@@ -13,12 +13,12 @@
#include "includes/pp01.h"
-WRITE8_MEMBER(pp01_state::pp01_video_write_mode_w)
+WRITE8_MEMBER(pp01_state::video_write_mode_w)
{
m_video_write_mode = data & 0x0f;
}
-void pp01_state::pp01_video_w(uint8_t block,uint16_t offset,uint8_t data,uint8_t part)
+void pp01_state::video_w(uint8_t block,uint16_t offset,uint8_t data,uint8_t part)
{
uint16_t addroffset = part ? 0x1000 : 0x0000;
uint8_t *ram = m_ram->pointer();
@@ -53,34 +53,34 @@ void pp01_state::pp01_video_w(uint8_t block,uint16_t offset,uint8_t data,uint8_t
}
}
-WRITE8_MEMBER(pp01_state::pp01_video_r_1_w)
+WRITE8_MEMBER(pp01_state::video_r_1_w)
{
- pp01_video_w(0,offset,data,0);
+ video_w(0,offset,data,0);
}
-WRITE8_MEMBER(pp01_state::pp01_video_g_1_w)
+WRITE8_MEMBER(pp01_state::video_g_1_w)
{
- pp01_video_w(1,offset,data,0);
+ video_w(1,offset,data,0);
}
-WRITE8_MEMBER(pp01_state::pp01_video_b_1_w)
+WRITE8_MEMBER(pp01_state::video_b_1_w)
{
- pp01_video_w(2,offset,data,0);
+ video_w(2,offset,data,0);
}
-WRITE8_MEMBER(pp01_state::pp01_video_r_2_w)
+WRITE8_MEMBER(pp01_state::video_r_2_w)
{
- pp01_video_w(0,offset,data,1);
+ video_w(0,offset,data,1);
}
-WRITE8_MEMBER(pp01_state::pp01_video_g_2_w)
+WRITE8_MEMBER(pp01_state::video_g_2_w)
{
- pp01_video_w(1,offset,data,1);
+ video_w(1,offset,data,1);
}
-WRITE8_MEMBER(pp01_state::pp01_video_b_2_w)
+WRITE8_MEMBER(pp01_state::video_b_2_w)
{
- pp01_video_w(2,offset,data,1);
+ video_w(2,offset,data,1);
}
-void pp01_state::pp01_set_memory(uint8_t block, uint8_t data)
+void pp01_state::set_memory(uint8_t block, uint8_t data)
{
uint8_t *mem = memregion("maincpu")->base();
address_space &space = m_maincpu->space(AS_PROGRAM);
@@ -94,22 +94,22 @@ void pp01_state::pp01_set_memory(uint8_t block, uint8_t data)
space.install_read_bank (startaddr, endaddr, bank);
switch(data) {
case 0xe6 :
- space.install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::pp01_video_r_1_w),this));
+ space.install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::video_r_1_w),this));
break;
case 0xe7 :
- space.install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::pp01_video_r_2_w),this));
+ space.install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::video_r_2_w),this));
break;
case 0xea :
- space.install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::pp01_video_g_1_w),this));
+ space.install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::video_g_1_w),this));
break;
case 0xeb :
- space.install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::pp01_video_g_2_w),this));
+ space.install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::video_g_2_w),this));
break;
case 0xee :
- space.install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::pp01_video_b_1_w),this));
+ space.install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::video_b_1_w),this));
break;
case 0xef :
- space.install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::pp01_video_b_2_w),this));
+ space.install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::video_b_2_w),this));
break;
default :
@@ -134,49 +134,74 @@ void pp01_state::machine_reset()
memset(m_memory_block,0xff,16);
for(i=0;i<16;i++) {
m_memory_block[i] = 0xff;
- pp01_set_memory(i, 0xff);
+ set_memory(i, 0xff);
}
m_uart->write_cts(0);
}
-WRITE8_MEMBER(pp01_state::pp01_mem_block_w)
+WRITE8_MEMBER(pp01_state::mem_block_w)
{
m_memory_block[offset] = data;
- pp01_set_memory(offset, data);
+ set_memory(offset, data);
}
-READ8_MEMBER(pp01_state::pp01_mem_block_r)
+READ8_MEMBER(pp01_state::mem_block_r)
{
- return m_memory_block[offset];
+ return m_memory_block[offset];
}
void pp01_state::machine_start()
{
}
-
-WRITE_LINE_MEMBER(pp01_state::z2_w)
+TIMER_DEVICE_CALLBACK_MEMBER( pp01_state::kansas_r )
{
- if (state)
+ if (m_rts)
+ {
+ m_cass_data[1] = m_cass_data[2] = m_cass_data[3] = 0;
+ m_casspol = 1;
+ return;
+ }
+
+ m_cass_data[1]++;
+ m_cass_data[2]++;
+
+ uint8_t cass_ws = (m_cass->input() > +0.04) ? 1 : 0;
+
+ if (cass_ws != m_cass_data[0])
+ {
+ m_cass_data[0] = cass_ws;
+ if (m_cass_data[1] > 13)
+ m_casspol ^= 1;
+ m_cass_data[1] = 0;
+ m_cass_data[2] = 0;
+ m_uart->write_rxd(m_casspol);
+ }
+ if ((m_cass_data[2] & 7)==2)
{
- bool cassbit = (m_cass->input() < -0.04) ? 0 : 1;
- m_uart->write_rxd(cassbit);
+ m_cass_data[3]++;
+ m_uart->write_rxc(BIT(m_cass_data[3], 0));
}
+}
- m_uart->write_rxc(state);
+WRITE_LINE_MEMBER(pp01_state::z2_w)
+{
+ // incoming 1200Hz
m_uart->write_txc(state);
+ if (!m_txe)
+ m_cass->output((m_txd ^ state) ? -1.0 : 1.0);
}
-READ8_MEMBER(pp01_state::pp01_8255_porta_r)
+READ8_MEMBER(pp01_state::ppi1_porta_r)
{
return m_video_scroll;
}
-WRITE8_MEMBER(pp01_state::pp01_8255_porta_w)
+WRITE8_MEMBER(pp01_state::ppi1_porta_w)
{
m_video_scroll = data;
}
-READ8_MEMBER(pp01_state::pp01_8255_portb_r)
+READ8_MEMBER(pp01_state::ppi1_portb_r)
{
static const char *const keynames[] = {
"LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7",
@@ -185,13 +210,13 @@ READ8_MEMBER(pp01_state::pp01_8255_portb_r)
return (ioport(keynames[m_key_line])->read() & 0x3F) | (ioport("LINEALL")->read() & 0xC0);
}
-WRITE8_MEMBER(pp01_state::pp01_8255_portb_w)
+WRITE8_MEMBER(pp01_state::ppi1_portb_w)
{
//logerror("pp01_8255_portb_w %02x\n",data);
}
-WRITE8_MEMBER(pp01_state::pp01_8255_portc_w)
+WRITE8_MEMBER(pp01_state::ppi1_portc_w)
{
if (BIT(data, 4))
m_key_line = data & 0x0f;
@@ -199,7 +224,7 @@ WRITE8_MEMBER(pp01_state::pp01_8255_portc_w)
m_speaker->level_w(BIT(data, 0));
}
-READ8_MEMBER(pp01_state::pp01_8255_portc_r)
+READ8_MEMBER(pp01_state::ppi1_portc_r)
{
return 0xff;
}