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

	TMP68301 support (dummy) driver

	Driver by Takahiro Nogi <nogi@kt.rim.or.jp> 2000/12/23 -

******************************************************************************/
/******************************************************************************
Memo:

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

#include <stdio.h>
#include "driver.h"
#include "m68kfmly.h"
#include "cpu/m68000/m68000.h"


#define	TMP68301_DEBUG	0


//	TMP68301 System Memory Map
//
//	0xFFFC00 - 0xFFFC0F	TMP68301 Address decoder
//	0xFFFC80 - 0xFFFC9F	TMP68301 Interrupt controller
//	0xFFFD00 - 0xFFFD0F	TMP68301 Parallel interface
//	0xFFFD80 - 0xFFFDAF	TMP68301 Serial interface
//	0xFFFE00 - 0xFFFE4F	TMP68301 Timer
//
//	Address decoder
//			15		7
//	0xFFFC00	AMAR0		AAMR0
//	0xFFFC02	-		AACR0
//	0xFFFC04	AMAR1		AAMR1
//	0xFFFC06	-		AACR1
//	0xFFFC08	-		AACR2
//	0xFFFC0A	-		ATOR
//	0xFFFC0C		ARELR
//	0xFFFC0E	-		-
//
//	Interrupt controller
//			15		7
//	0xFFFC80	-		ICR0
//	0xFFFC82	-		ICR1
//	0xFFFC84	-		ICR2
//	0xFFFC86	-		ICR3
//	0xFFFC88	-		ICR4
//	0xFFFC8A	-		ICR5
//	0xFFFC8C	-		ICR6
//	0xFFFC8E	-		ICR7
//	0xFFFC90	-		ICR8
//	0xFFFC92	-		ICR9
//	0xFFFC94		IMR
//	0xFFFC96		IPR
//	0xFFFC98		IISR
//	0xFFFC9A	-		IVNR
//	0xFFFC9C	-		IEIR
//	0xFFFC9E	-		-
//
//	Parallel interface
//			15		7
//	0xFFFD00		PDIR
//	0xFFFD02	-		PCR
//	0xFFFD04	-		PSR
//	0xFFFD06	-		PCMR
//	0xFFFD08	-		PMR
//	0xFFFD0A		PDR
//	0xFFFD0C	-		PPR1
//	0xFFFD0E	-		PPR2
//
//	Serial interface
//			15		7
//	0xFFFD80	-		SMR0
//	0xFFFD82	-		SCMR0
//	0xFFFD84	-		SBRR0
//	0xFFFD86	-		SSR0
//	0xFFFD88	-		SDR0
//	0xFFFD8A	-		-
//	0xFFFD8C	-		SPR
//	0xFFFD8E	-		SCR
//	0xFFFD90	-		SMR1
//	0xFFFD92	-		SCMR1
//	0xFFFD94	-		SBRR1
//	0xFFFD96	-		SSR1
//	0xFFFD98	-		SDR1
//	0xFFFD9A	-		-
//	0xFFFD9C	-		-
//	0xFFFD9E	-		-
//	0xFFFDA0	-		SMR2
//	0xFFFDA2	-		SCMR2
//	0xFFFDA4	-		SBRR2
//	0xFFFDA6	-		SSR2
//	0xFFFDA8	-		SDR2
//	0xFFFDAA	-		-
//	0xFFFDAC	-		-
//	0xFFFDAE	-		-
//
//	Timer
//			15		7
//	0xFFFE00		TCR0
//	0xFFFE02	-		-
//	0xFFFE04		TMCR0
//	0xFFFE06	-		-
//	0xFFFE08	-		-
//	0xFFFE0A	-		-
//	0xFFFE0C		TCTR0
//	0xFFFE0E	-		-
//	0xFFFE10	-		-
//	0xFFFE12	-		-
//	0xFFFE14	-		-
//	0xFFFE16	-		-
//	0xFFFE18	-		-
//	0xFFFE1A	-		-
//	0xFFFE1C	-		-
//	0xFFFE1E	-		-
//	0xFFFE20		TCR1
//	0xFFFE22	-		-
//	0xFFFE24		TMCR11
//	0xFFFE26	-		-
//	0xFFFE28		TMCR12
//	0xFFFE2A	-		-
//	0xFFFE2C		TCTR1
//	0xFFFE2E	-		-
//	0xFFFE30	-		-
//	0xFFFE32	-		-
//	0xFFFE34	-		-
//	0xFFFE36	-		-
//	0xFFFE38	-		-
//	0xFFFE3A	-		-
//	0xFFFE3C	-		-
//	0xFFFE3E	-		-
//	0xFFFE40		TCR2
//	0xFFFE42	-		-
//	0xFFFE44		TMCR21
//	0xFFFE46	-		-
//	0xFFFE48		TMCR22
//	0xFFFE4A	-		-
//	0xFFFE4C		TCTR2
//	0xFFFE4E	-		-


static data16_t tmp68301_address_decoder[0x10];
static data16_t tmp68301_interrupt_controller[0x20];
static data16_t tmp68301_parallel_interface[0x10];
static data16_t tmp68301_serial_interface[0x30];
static data16_t tmp68301_timer[0x50];


READ16_HANDLER( tmp68301_address_decoder_r )
{
#if TMP68301_DEBUG
	logerror("PC %08X: TMP68301_address_decoder_r (%08X)\n", activecpu_get_pc(), (0xfffc00 + (offset * 2)));
#endif

	return tmp68301_address_decoder[offset];
}

WRITE16_HANDLER( tmp68301_address_decoder_w )
{
#if TMP68301_DEBUG
	logerror("PC %08X: TMP68301_address_decoder_w (%08X = %04X)\n", activecpu_get_pc(), (0xfffc00 + (offset * 2)), data);
#endif

	tmp68301_address_decoder[offset] = data;
}

READ16_HANDLER( tmp68301_interrupt_controller_r )
{
#if TMP68301_DEBUG
	logerror("PC %08X: TMP68301_interrupt_controller_r (%08X)\n", activecpu_get_pc(), (0xfffc80 + (offset * 2)));
#endif

	return tmp68301_interrupt_controller[offset];
}

WRITE16_HANDLER( tmp68301_interrupt_controller_w )
{
#if TMP68301_DEBUG
	logerror("PC %08X: TMP68301_interrupt_controller_w (%08X = %04X)\n", activecpu_get_pc(), (0xfffc80 + (offset * 2)), data);
#endif

	tmp68301_interrupt_controller[offset] = data;
}

READ16_HANDLER( tmp68301_parallel_interface_r )
{
#if TMP68301_DEBUG
	logerror("PC %08X: TMP68301_parallel_interface_r (%08X)\n", activecpu_get_pc(), (0xfffd00 + (offset * 2)));
#endif

	return tmp68301_parallel_interface[offset];
}

WRITE16_HANDLER( tmp68301_parallel_interface_w )
{
#if TMP68301_DEBUG
	logerror("PC %08X: TMP68301_parallel_interface_w (%08X = %04X)\n", activecpu_get_pc(), (0xfffd00 + (offset * 2)), data);
#endif

	tmp68301_parallel_interface[offset] = data;
}

READ16_HANDLER( tmp68301_serial_interface_r )
{
#if TMP68301_DEBUG
	logerror("PC %08X: TMP68301_serial_interface_r (%08X)\n", activecpu_get_pc(), (0xfffd80 + (offset * 2)));
#endif

	return tmp68301_serial_interface[offset];
}

WRITE16_HANDLER( tmp68301_serial_interface_w )
{
#if TMP68301_DEBUG
	logerror("PC %08X: TMP68301_serial_interface_w (%08X = %04X)\n", activecpu_get_pc(), (0xfffd80 + (offset * 2)), data);
#endif

	tmp68301_serial_interface[offset] = data;
}

READ16_HANDLER( tmp68301_timer_r )
{
#if TMP68301_DEBUG
	logerror("PC %08X: TMP68301_timer_r (%08X)\n", activecpu_get_pc(), (0xfffe00 + (offset * 2)));
#endif

	return tmp68301_timer[offset];
}

WRITE16_HANDLER( tmp68301_timer_w )
{
#if TMP68301_DEBUG
	logerror("PC %08X: TMP68301_timer_w (%08X = %04X)\n", activecpu_get_pc(), (0xfffe00 + (offset * 2)), data);
#endif

	tmp68301_timer[offset] = data;
}
