summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/machine/p2000t.cpp
blob: 224e2e462aefac8e5e4b7f83633cc92d8154a3b2 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
              
                                 










                                                                           


















                                












                                                                      


                                             




                                                               



                        
                                                  







































































                                                 
                                         

























                                                                  
// license:???
// copyright-holders:Paul Daniels
/**********************************************************************

  machine.c

  Functions to emulate general aspects of the machine (RAM, ROM, interrups,
  I/O ports)

**********************************************************************/

#include "includes/p2000t.h"

#define P2000M_101F_CASDAT  0x01
#define P2000M_101F_CASCMD  0x02
#define P2000M_101F_CASREW  0x04
#define P2000M_101F_CASFOR  0x08
#define P2000M_101F_KEYINT  0x40
#define P2000M_101F_PRNOUT  0x80

#define P2000M_202F_PINPUT  0x01
#define P2000M_202F_PREADY  0x02
#define P2000M_202F_STRAPN  0x04
#define P2000M_202F_CASENB  0x08
#define P2000M_202F_CASPOS  0x10
#define P2000M_202F_CASEND  0x20
#define P2000M_202F_CASCLK  0x40
#define P2000M_202F_CASDAT  0x80

#define P2000M_303F_VIDEO   0x01

#define P2000M_707F_DISA    0x01

/*
    Keyboard port 0x0x

    If the keyboard interrupt is enabled, all keyboard matrix rows are
    connected and reading from either of these ports will give the
    keyboard status (FF=no key pressed)

    If the keyboard interrupt is disabled, reading one of these ports
    will read the corresponding keyboard matrix row
*/
READ8_MEMBER( p2000t_state::p2000t_port_000f_r )
{
	if (m_port_101f & P2000M_101F_KEYINT)
	{
		return (
		m_keyboard[0]->read() & m_keyboard[1]->read() &
		m_keyboard[2]->read() & m_keyboard[3]->read() &
		m_keyboard[4]->read() & m_keyboard[5]->read() &
		m_keyboard[6]->read() & m_keyboard[7]->read() &
		m_keyboard[8]->read() & m_keyboard[9]->read());
	}
	else
	if (offset < 10)
	{
		return m_keyboard[offset]->read();
	}
	else
		return 0xff;
}


/*
    Input port 0x2x

    bit 0 - Printer input
    bit 1 - Printer ready
    bit 2 - Strap N (daisy/matrix)
    bit 3 - Cassette write enabled
    bit 4 - Cassette in position
    bit 5 - Begin/end of tape
    bit 6 - Cassette read clock
    bit 7 - Cassette read data
*/
READ8_MEMBER( p2000t_state::p2000t_port_202f_r )
{
	return (0xff);
}


/*
    Output Port 0x1x

    bit 0 - Cassette write data
    bit 1 - Cassette write command
    bit 2 - Cassette rewind
    bit 3 - Cassette forward
    bit 4 - Unused
    bit 5 - Unused
    bit 6 - Keyboard interrupt enable
    bit 7 - Printer output
*/
WRITE8_MEMBER( p2000t_state::p2000t_port_101f_w )
{
	m_port_101f = data;
}

/*
    Scroll Register 0x3x (P2000T only)

    bit 0 - /
    bit 1 - |
    bit 2 - | Index of the first character
    bit 3 - | to be displayed
    bit 4 - |
    bit 5 - |
    bit 6 - \
    bit 7 - Video disable (0 = enabled)
*/
WRITE8_MEMBER( p2000t_state::p2000t_port_303f_w )
{
	m_port_303f = data;
}

/*
    Beeper 0x5x

    bit 0 - Beeper
    bit 1 - Unused
    bit 2 - Unused
    bit 3 - Unused
    bit 4 - Unused
    bit 5 - Unused
    bit 6 - Unused
    bit 7 - Unused
*/
WRITE8_MEMBER( p2000t_state::p2000t_port_505f_w )
{
	m_speaker->level_w(BIT(data, 0));
}

/*
    DISAS 0x7x (P2000M only)

    bit 0 - Unused
    bit 1 - DISAS enable
    bit 2 - Unused
    bit 3 - Unused
    bit 4 - Unused
    bit 5 - Unused
    bit 6 - Unused
    bit 7 - Unused

    When the DISAS is active, the CPU has the highest priority and
    video refresh is disabled when the CPU accesses video memory

*/
WRITE8_MEMBER( p2000t_state::p2000t_port_707f_w )
{
	m_port_707f = data;
}

WRITE8_MEMBER( p2000t_state::p2000t_port_888b_w ) {}
WRITE8_MEMBER( p2000t_state::p2000t_port_8c90_w ) {}
WRITE8_MEMBER( p2000t_state::p2000t_port_9494_w ) {}