diff options
Diffstat (limited to 'src/mame/includes/mbc55x.h')
-rw-r--r-- | src/mame/includes/mbc55x.h | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/src/mame/includes/mbc55x.h b/src/mame/includes/mbc55x.h new file mode 100644 index 00000000000..d0578708939 --- /dev/null +++ b/src/mame/includes/mbc55x.h @@ -0,0 +1,221 @@ +// license:BSD-3-Clause +// copyright-holders:Phill Harvey-Smith +/* + mbc55x.h + Includes for the Sanyo MBC-550, MBC-555. + + Phill Harvey-Smith + 2011-01-29. +*/ + +#include "emu.h" +#include "cpu/i86/i86.h" +#include "machine/ram.h" +#include "bus/centronics/ctronics.h" +#include "machine/i8255.h" +#include "machine/pit8253.h" +#include "machine/pic8259.h" +#include "machine/wd_fdc.h" +#include "machine/i8251.h" +#include "sound/speaker.h" +#include "video/mc6845.h" +#include "imagedev/flopdrv.h" +#include "formats/pc_dsk.h" +#include "debugger.h" +#include "debug/debugcon.h" + +#define MAINCPU_TAG "maincpu" + +#define SCREEN_TAG "screen" +#define SCREEN_WIDTH_PIXELS 640 +#define SCREEN_HEIGHT_LINES 250 +#define SCREEN_NO_COLOURS 8 + +#define VIDEO_MEM_SIZE (32*1024) +#define VID_MC6845_NAME "mc6845" + +// Red and blue colour planes sit at a fixed location, green +// is in main memory. + +#define COLOUR_PLANE_SIZE 0x4000 + +#define RED_PLANE_OFFSET (0*COLOUR_PLANE_SIZE) +#define BLUE_PLANE_OFFSET (1*COLOUR_PLANE_SIZE) + +#define COLOUR_PLANE_MEMBASE 0xF0000 +#define RED_PLANE_MEMBASE (COLOUR_PLANE_MEMBASE+RED_PLANE_OFFSET) +#define BLUE_PLANE_MEMBASE (COLOUR_PLANE_MEMBASE+BLUE_PLANE_OFFSET) + +#define RED_PLANE_TAG "red" +#define BLUE_PLANE_TAG "blue" + +// Keyboard + +#define MBC55X_KEYROWS 7 +#define KEYBOARD_QUEUE_SIZE 32 + +#define KB_BITMASK 0x1000 +#define KB_SHIFTS 12 + +#define KEY_SPECIAL_TAG "KEY_SPECIAL" +#define KEY_BIT_LSHIFT 0x01 +#define KEY_BIT_RSHIFT 0x02 +#define KEY_BIT_CTRL 0x04 +#define KEY_BIT_GRAPH 0x08 + +#define PPI8255_TAG "ppi8255" +#define PIC8259_TAG "pic8259" + +// From tech manual clock c1 is fed from c0, but it approx 100Hz +#define PIT8253_TAG "pit8253" +#define PIT_C0_CLOCK 78600 +#define PIT_C1_CLOCK 100 +#define PIT_C2_CLOCK 1789770 + +#define MONO_TAG "mono" +#define I8251A_KB_TAG "i8251a_kb" +#define FDC_TAG "wd1793" + + +struct keyboard_t +{ + UINT8 keyrows[MBC55X_KEYROWS]; + emu_timer *keyscan_timer; + + UINT8 key_special; +}; + + +class mbc55x_state : public driver_device +{ +public: + mbc55x_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, MAINCPU_TAG), + m_crtc(*this, VID_MC6845_NAME), + m_kb_uart(*this, I8251A_KB_TAG), + m_pit(*this, PIT8253_TAG), + m_ppi(*this, PPI8255_TAG), + m_pic(*this, PIC8259_TAG), + m_fdc(*this, FDC_TAG), + m_floppy0(*this, FDC_TAG ":0"), + m_floppy1(*this, FDC_TAG ":1"), + m_floppy2(*this, FDC_TAG ":2"), + m_floppy3(*this, FDC_TAG ":3"), + m_speaker(*this, "speaker"), + m_ram(*this, RAM_TAG), + m_palette(*this, "palette") + { + } + + DECLARE_FLOPPY_FORMATS(floppy_formats); + + required_device<cpu_device> m_maincpu; + required_device<mc6845_device> m_crtc; + required_device<i8251_device> m_kb_uart; + required_device<pit8253_device> m_pit; + required_device<i8255_device> m_ppi; + required_device<pic8259_device> m_pic; + required_device<fd1793_t> m_fdc; + required_device<floppy_connector> m_floppy0; + required_device<floppy_connector> m_floppy1; + required_device<floppy_connector> m_floppy2; + required_device<floppy_connector> m_floppy3; + required_device<speaker_sound_device> m_speaker; + required_device<ram_device> m_ram; + required_device<palette_device> m_palette; + //DECLARE_READ8_MEMBER(pic8259_r); + //DECLARE_WRITE8_MEMBER(pic8259_w); + //DECLARE_READ8_MEMBER(mbc55x_disk_r); + //DECLARE_WRITE8_MEMBER(mbc55x_disk_w); + DECLARE_READ8_MEMBER(mbc55x_usart_r); + DECLARE_WRITE8_MEMBER(mbc55x_usart_w); + //DECLARE_READ8_MEMBER(mbc55x_kb_usart_r); + //DECLARE_WRITE8_MEMBER(mbc55x_kb_usart_w); + DECLARE_READ8_MEMBER(vram_page_r); + DECLARE_WRITE8_MEMBER(vram_page_w); + DECLARE_READ8_MEMBER(ppi8255_r); + DECLARE_WRITE8_MEMBER(ppi8255_w); + //DECLARE_READ8_MEMBER(pit8253_r); + //DECLARE_WRITE8_MEMBER(pit8253_w); + DECLARE_READ16_MEMBER(mbc55x_io_r); + DECLARE_WRITE16_MEMBER(mbc55x_io_w); + DECLARE_READ8_MEMBER(mbc55x_ppi_porta_r); + DECLARE_READ8_MEMBER(mbc55x_ppi_portb_r); + DECLARE_READ8_MEMBER(mbc55x_ppi_portc_r); + DECLARE_WRITE8_MEMBER(mbc55x_ppi_porta_w); + DECLARE_WRITE8_MEMBER(mbc55x_ppi_portb_w); + DECLARE_WRITE8_MEMBER(mbc55x_ppi_portc_w); + DECLARE_WRITE_LINE_MEMBER(vid_hsync_changed); + DECLARE_WRITE_LINE_MEMBER(vid_vsync_changed); + DECLARE_WRITE_LINE_MEMBER(pit8253_t2); + + UINT32 m_debug_machine; + UINT32 m_debug_video; + UINT8 m_video_mem[VIDEO_MEM_SIZE]; + UINT8 m_vram_page; + + keyboard_t m_keyboard; + DECLARE_READ8_MEMBER(mbcpic8259_r); + DECLARE_WRITE8_MEMBER(mbcpic8259_w); + DECLARE_READ8_MEMBER(mbcpit8253_r); + DECLARE_WRITE8_MEMBER(mbcpit8253_w); + DECLARE_READ8_MEMBER(mbc55x_disk_r); + DECLARE_WRITE8_MEMBER(mbc55x_disk_w); + DECLARE_READ8_MEMBER(mbc55x_kb_usart_r); + DECLARE_WRITE8_MEMBER(mbc55x_kb_usart_w); + DECLARE_DRIVER_INIT(mbc55x); + MC6845_UPDATE_ROW(crtc_update_row); + virtual void machine_start(); + virtual void machine_reset(); + virtual void video_start(); + virtual void video_reset(); + DECLARE_PALETTE_INIT(mbc55x); + void screen_eof_mbc55x(screen_device &screen, bool state); + TIMER_CALLBACK_MEMBER(keyscan_callback); + void keyboard_reset(); + void scan_keyboard(); + void set_ram_size(); +}; + +/*----------- defined in drivers/mbc55x.c -----------*/ + +extern const unsigned char mbc55x_palette[SCREEN_NO_COLOURS][3]; + + +/*----------- defined in machine/mbc55x.c -----------*/ + +/* Memory controller */ +#define RAM_BANK00_TAG "bank0" +#define RAM_BANK01_TAG "bank1" +#define RAM_BANK02_TAG "bank2" +#define RAM_BANK03_TAG "bank3" +#define RAM_BANK04_TAG "bank4" +#define RAM_BANK05_TAG "bank5" +#define RAM_BANK06_TAG "bank6" +#define RAM_BANK07_TAG "bank7" +#define RAM_BANK08_TAG "bank8" +#define RAM_BANK09_TAG "bank9" +#define RAM_BANK0A_TAG "banka" +#define RAM_BANK0B_TAG "bankb" +#define RAM_BANK0C_TAG "bankc" +#define RAM_BANK0D_TAG "bankd" +#define RAM_BANK0E_TAG "banke" + +#define RAM_BANK_SIZE (64*1024) +#define RAM_BANK_COUNT 15 + +/* Floppy drive interface */ + +#define FDC_PAUSE 10000 + + +/*----------- defined in video/mbc55x.c -----------*/ + +#define RED 0 +#define GREEN 1 +#define BLUE 2 + +#define LINEAR_ADDR(seg,ofs) ((seg<<4)+ofs) + +#define OUTPUT_SEGOFS(mess,seg,ofs) logerror("%s=%04X:%04X [%08X]\n",mess,seg,ofs,((seg<<4)+ofs)) |