mz2500.cpp: move state machine to includes (nw)

This commit is contained in:
angelosa 2018-06-28 01:45:57 +02:00
parent 2d897bec09
commit 57a07f7df4
3 changed files with 217 additions and 199 deletions

View File

@ -2986,6 +2986,7 @@ files {
MAME_DIR .. "src/mame/video/x1.cpp",
MAME_DIR .. "src/mame/drivers/x1twin.cpp",
MAME_DIR .. "src/mame/drivers/mz2500.cpp",
MAME_DIR .. "src/mame/includes/mz2500.h",
MAME_DIR .. "src/mame/drivers/mz3500.cpp",
MAME_DIR .. "src/mame/drivers/pce220.cpp",
MAME_DIR .. "src/mame/machine/pce220_ser.cpp",

View File

@ -45,205 +45,7 @@
********************************************************************************************************************************/
#include "emu.h"
#include "cpu/z80/z80.h"
#include "machine/i8255.h"
#include "machine/pit8253.h"
#include "machine/rp5c15.h"
#include "machine/wd_fdc.h"
#include "machine/z80sio.h"
#include "machine/z80pio.h"
#include "sound/2203intf.h"
#include "sound/beep.h"
#include "emupal.h"
#include "screen.h"
#include "softlist.h"
#include "speaker.h"
//#include "imagedev/cassette.h"
#include "imagedev/flopdrv.h"
#define RP5C15_TAG "rp5c15"
class mz2500_state : public driver_device
{
public:
mz2500_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_screen(*this, "screen"),
m_rtc(*this, RP5C15_TAG),
m_pit(*this, "pit"),
m_beeper(*this, "beeper"),
m_gfxdecode(*this, "gfxdecode"),
m_fdc(*this, "mb8877a"),
m_floppy0(*this, "mb8877a:0"),
m_floppy1(*this, "mb8877a:1"),
m_floppy2(*this, "mb8877a:2"),
m_floppy3(*this, "mb8877a:3"),
m_floppy(nullptr),
m_palette(*this, "palette")
{ }
required_device<cpu_device> m_maincpu;
required_device<screen_device> m_screen;
required_device<rp5c15_device> m_rtc;
required_device<pit8253_device> m_pit;
required_device<beep_device> m_beeper;
required_device<gfxdecode_device> m_gfxdecode;
required_device<mb8877_device> 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;
floppy_image_device *m_floppy;
std::unique_ptr<uint8_t[]> m_main_ram;
uint8_t *m_ipl_rom;
uint8_t *m_kanji_rom;
uint8_t *m_kanji2_rom;
std::unique_ptr<uint8_t[]> m_pcg_ram;
std::unique_ptr<uint8_t[]> m_emm_ram;
uint8_t *m_dic_rom;
uint8_t *m_phone_rom;
uint8_t *m_iplpro_rom;
uint8_t m_bank_val[8];
uint8_t m_bank_addr;
uint8_t m_irq_sel;
uint8_t m_irq_vector[4];
uint8_t m_irq_mask[4];
uint8_t m_irq_pending[4];
uint8_t m_kanji_bank;
uint8_t m_dic_bank;
uint8_t m_fdc_reverse;
uint8_t m_key_mux;
uint8_t m_monitor_type;
uint8_t m_text_reg[0x100];
uint8_t m_text_reg_index;
uint8_t m_text_col_size;
uint8_t m_text_font_reg;
uint8_t m_pal_select;
uint16_t m_cg_vs;
uint16_t m_cg_ve;
uint16_t m_cg_hs;
uint16_t m_cg_he;
int16_t m_tv_vs;
int16_t m_tv_ve;
int16_t m_tv_hs;
int16_t m_tv_he;
uint8_t m_cg_latch[4];
uint8_t m_cg_reg_index;
uint8_t m_cg_reg[0x20];
uint8_t m_clut16[0x10];
uint16_t m_clut256[0x100];
uint8_t m_cg_mask;
int m_scr_x_size;
int m_scr_y_size;
uint8_t m_cg_clear_flag;
uint32_t m_rom_index;
uint8_t m_hrom_index;
uint8_t m_lrom_index;
struct { uint8_t r,g,b; } m_pal[16];
uint8_t m_joy_mode;
uint16_t m_kanji_index;
uint32_t m_emm_offset;
uint8_t m_old_portc;
uint8_t m_prev_col_val;
uint8_t m_pio_latchb;
uint8_t m_ym_porta;
uint8_t m_screen_enable;
DECLARE_READ8_MEMBER(bank0_r);
DECLARE_READ8_MEMBER(bank1_r);
DECLARE_READ8_MEMBER(bank2_r);
DECLARE_READ8_MEMBER(bank3_r);
DECLARE_READ8_MEMBER(bank4_r);
DECLARE_READ8_MEMBER(bank5_r);
DECLARE_READ8_MEMBER(bank6_r);
DECLARE_READ8_MEMBER(bank7_r);
DECLARE_WRITE8_MEMBER(bank0_w);
DECLARE_WRITE8_MEMBER(bank1_w);
DECLARE_WRITE8_MEMBER(bank2_w);
DECLARE_WRITE8_MEMBER(bank3_w);
DECLARE_WRITE8_MEMBER(bank4_w);
DECLARE_WRITE8_MEMBER(bank5_w);
DECLARE_WRITE8_MEMBER(bank6_w);
DECLARE_WRITE8_MEMBER(bank7_w);
DECLARE_READ8_MEMBER(mz2500_bank_addr_r);
DECLARE_WRITE8_MEMBER(mz2500_bank_addr_w);
DECLARE_READ8_MEMBER(mz2500_bank_data_r);
DECLARE_WRITE8_MEMBER(mz2500_bank_data_w);
DECLARE_WRITE8_MEMBER(mz2500_kanji_bank_w);
DECLARE_WRITE8_MEMBER(mz2500_dictionary_bank_w);
DECLARE_READ8_MEMBER(mz2500_crtc_hvblank_r);
DECLARE_WRITE8_MEMBER(mz2500_tv_crtc_w);
DECLARE_WRITE8_MEMBER(mz2500_irq_sel_w);
DECLARE_WRITE8_MEMBER(mz2500_irq_data_w);
DECLARE_READ8_MEMBER(mz2500_rom_r);
DECLARE_WRITE8_MEMBER(mz2500_rom_w);
DECLARE_WRITE8_MEMBER(palette4096_io_w);
DECLARE_READ8_MEMBER(mz2500_bplane_latch_r);
DECLARE_READ8_MEMBER(mz2500_rplane_latch_r);
DECLARE_READ8_MEMBER(mz2500_gplane_latch_r);
DECLARE_READ8_MEMBER(mz2500_iplane_latch_r);
DECLARE_WRITE8_MEMBER(mz2500_cg_addr_w);
DECLARE_WRITE8_MEMBER(mz2500_cg_data_w);
DECLARE_WRITE8_MEMBER(timer_w);
DECLARE_READ8_MEMBER(mz2500_joystick_r);
DECLARE_WRITE8_MEMBER(mz2500_joystick_w);
DECLARE_READ8_MEMBER(mz2500_kanji_r);
DECLARE_WRITE8_MEMBER(mz2500_kanji_w);
DECLARE_READ8_MEMBER(rp5c15_8_r);
DECLARE_WRITE8_MEMBER(rp5c15_8_w);
DECLARE_READ8_MEMBER(mz2500_emm_data_r);
DECLARE_WRITE8_MEMBER(mz2500_emm_addr_w);
DECLARE_WRITE8_MEMBER(mz2500_emm_data_w);
uint8_t mz2500_cg_latch_compare();
uint8_t mz2500_ram_read(uint16_t offset, uint8_t bank_num);
void mz2500_ram_write(uint16_t offset, uint8_t data, uint8_t bank_num);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
DECLARE_PALETTE_INIT(mz2500);
uint32_t screen_update_mz2500(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(mz2500_vbl);
DECLARE_READ8_MEMBER(fdc_r);
DECLARE_WRITE8_MEMBER(fdc_w);
DECLARE_WRITE8_MEMBER(floppy_select_w);
DECLARE_WRITE8_MEMBER(floppy_side_w);
DECLARE_READ8_MEMBER(mz2500_porta_r);
DECLARE_READ8_MEMBER(mz2500_portb_r);
DECLARE_READ8_MEMBER(mz2500_portc_r);
DECLARE_WRITE8_MEMBER(mz2500_porta_w);
DECLARE_WRITE8_MEMBER(mz2500_portb_w);
DECLARE_WRITE8_MEMBER(mz2500_portc_w);
DECLARE_WRITE8_MEMBER(mz2500_pio1_porta_w);
DECLARE_READ8_MEMBER(mz2500_pio1_porta_r);
DECLARE_READ8_MEMBER(opn_porta_r);
DECLARE_WRITE8_MEMBER(opn_porta_w);
DECLARE_WRITE_LINE_MEMBER(pit8253_clk0_irq);
DECLARE_WRITE_LINE_MEMBER(mz2500_rtc_alarm_irq);
IRQ_CALLBACK_MEMBER( mz2500_irq_ack );
void draw_80x25(bitmap_ind16 &bitmap,const rectangle &cliprect,uint16_t map_addr);
void draw_40x25(bitmap_ind16 &bitmap,const rectangle &cliprect,int plane,uint16_t map_addr);
void draw_cg4_screen(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri);
void draw_cg16_screen(bitmap_ind16 &bitmap,const rectangle &cliprect,int plane,int x_size,int pri);
void draw_cg256_screen(bitmap_ind16 &bitmap,const rectangle &cliprect,int plane,int pri);
void draw_tv_screen(bitmap_ind16 &bitmap,const rectangle &cliprect);
void draw_cg_screen(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri);
void mz2500_draw_pixel(bitmap_ind16 &bitmap,int x,int y,uint16_t pen,uint8_t width,uint8_t height);
void mz2500_reconfigure_screen();
uint8_t pal_256_param(int index, int param);
void mz2500_reset(mz2500_state *state, uint8_t type);
required_device<palette_device> m_palette;
void mz2500(machine_config &config);
void mz2500_io(address_map &map);
void mz2500_map(address_map &map);
};
#include "includes/mz2500.h"
/* machine stuff */

215
src/mame/includes/mz2500.h Normal file
View File

@ -0,0 +1,215 @@
// license:BSD-3-Clause
// copyright-holders:Angelo Salese
/********************************************************************************************************************************
Sharp MZ-2500 (c) 1985 Sharp Corporation
********************************************************************************************************************************/
#pragma once
#ifndef MAME_INCLUDES_MZ2500_H
#define MAME_INCLUDES_MZ2500_H
#include "cpu/z80/z80.h"
#include "machine/i8255.h"
#include "machine/pit8253.h"
#include "machine/rp5c15.h"
#include "machine/wd_fdc.h"
#include "machine/z80sio.h"
#include "machine/z80pio.h"
#include "sound/2203intf.h"
#include "sound/beep.h"
#include "emupal.h"
#include "screen.h"
#include "softlist.h"
#include "speaker.h"
//#include "imagedev/cassette.h"
#include "imagedev/flopdrv.h"
#define RP5C15_TAG "rp5c15"
class mz2500_state : public driver_device
{
public:
mz2500_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_screen(*this, "screen"),
m_rtc(*this, RP5C15_TAG),
m_pit(*this, "pit"),
m_beeper(*this, "beeper"),
m_gfxdecode(*this, "gfxdecode"),
m_fdc(*this, "mb8877a"),
m_floppy0(*this, "mb8877a:0"),
m_floppy1(*this, "mb8877a:1"),
m_floppy2(*this, "mb8877a:2"),
m_floppy3(*this, "mb8877a:3"),
m_floppy(nullptr),
m_palette(*this, "palette")
{ }
required_device<cpu_device> m_maincpu;
required_device<screen_device> m_screen;
required_device<rp5c15_device> m_rtc;
required_device<pit8253_device> m_pit;
required_device<beep_device> m_beeper;
required_device<gfxdecode_device> m_gfxdecode;
required_device<mb8877_device> 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;
floppy_image_device *m_floppy;
std::unique_ptr<uint8_t[]> m_main_ram;
uint8_t *m_ipl_rom;
uint8_t *m_kanji_rom;
uint8_t *m_kanji2_rom;
std::unique_ptr<uint8_t[]> m_pcg_ram;
std::unique_ptr<uint8_t[]> m_emm_ram;
uint8_t *m_dic_rom;
uint8_t *m_phone_rom;
uint8_t *m_iplpro_rom;
uint8_t m_bank_val[8];
uint8_t m_bank_addr;
uint8_t m_irq_sel;
uint8_t m_irq_vector[4];
uint8_t m_irq_mask[4];
uint8_t m_irq_pending[4];
uint8_t m_kanji_bank;
uint8_t m_dic_bank;
uint8_t m_fdc_reverse;
uint8_t m_key_mux;
uint8_t m_monitor_type;
uint8_t m_text_reg[0x100];
uint8_t m_text_reg_index;
uint8_t m_text_col_size;
uint8_t m_text_font_reg;
uint8_t m_pal_select;
uint16_t m_cg_vs;
uint16_t m_cg_ve;
uint16_t m_cg_hs;
uint16_t m_cg_he;
int16_t m_tv_vs;
int16_t m_tv_ve;
int16_t m_tv_hs;
int16_t m_tv_he;
uint8_t m_cg_latch[4];
uint8_t m_cg_reg_index;
uint8_t m_cg_reg[0x20];
uint8_t m_clut16[0x10];
uint16_t m_clut256[0x100];
uint8_t m_cg_mask;
int m_scr_x_size;
int m_scr_y_size;
uint8_t m_cg_clear_flag;
uint32_t m_rom_index;
uint8_t m_hrom_index;
uint8_t m_lrom_index;
struct { uint8_t r,g,b; } m_pal[16];
uint8_t m_joy_mode;
uint16_t m_kanji_index;
uint32_t m_emm_offset;
uint8_t m_old_portc;
uint8_t m_prev_col_val;
uint8_t m_pio_latchb;
uint8_t m_ym_porta;
uint8_t m_screen_enable;
DECLARE_READ8_MEMBER(bank0_r);
DECLARE_READ8_MEMBER(bank1_r);
DECLARE_READ8_MEMBER(bank2_r);
DECLARE_READ8_MEMBER(bank3_r);
DECLARE_READ8_MEMBER(bank4_r);
DECLARE_READ8_MEMBER(bank5_r);
DECLARE_READ8_MEMBER(bank6_r);
DECLARE_READ8_MEMBER(bank7_r);
DECLARE_WRITE8_MEMBER(bank0_w);
DECLARE_WRITE8_MEMBER(bank1_w);
DECLARE_WRITE8_MEMBER(bank2_w);
DECLARE_WRITE8_MEMBER(bank3_w);
DECLARE_WRITE8_MEMBER(bank4_w);
DECLARE_WRITE8_MEMBER(bank5_w);
DECLARE_WRITE8_MEMBER(bank6_w);
DECLARE_WRITE8_MEMBER(bank7_w);
DECLARE_READ8_MEMBER(mz2500_bank_addr_r);
DECLARE_WRITE8_MEMBER(mz2500_bank_addr_w);
DECLARE_READ8_MEMBER(mz2500_bank_data_r);
DECLARE_WRITE8_MEMBER(mz2500_bank_data_w);
DECLARE_WRITE8_MEMBER(mz2500_kanji_bank_w);
DECLARE_WRITE8_MEMBER(mz2500_dictionary_bank_w);
DECLARE_READ8_MEMBER(mz2500_crtc_hvblank_r);
DECLARE_WRITE8_MEMBER(mz2500_tv_crtc_w);
DECLARE_WRITE8_MEMBER(mz2500_irq_sel_w);
DECLARE_WRITE8_MEMBER(mz2500_irq_data_w);
DECLARE_READ8_MEMBER(mz2500_rom_r);
DECLARE_WRITE8_MEMBER(mz2500_rom_w);
DECLARE_WRITE8_MEMBER(palette4096_io_w);
DECLARE_READ8_MEMBER(mz2500_bplane_latch_r);
DECLARE_READ8_MEMBER(mz2500_rplane_latch_r);
DECLARE_READ8_MEMBER(mz2500_gplane_latch_r);
DECLARE_READ8_MEMBER(mz2500_iplane_latch_r);
DECLARE_WRITE8_MEMBER(mz2500_cg_addr_w);
DECLARE_WRITE8_MEMBER(mz2500_cg_data_w);
DECLARE_WRITE8_MEMBER(timer_w);
DECLARE_READ8_MEMBER(mz2500_joystick_r);
DECLARE_WRITE8_MEMBER(mz2500_joystick_w);
DECLARE_READ8_MEMBER(mz2500_kanji_r);
DECLARE_WRITE8_MEMBER(mz2500_kanji_w);
DECLARE_READ8_MEMBER(rp5c15_8_r);
DECLARE_WRITE8_MEMBER(rp5c15_8_w);
DECLARE_READ8_MEMBER(mz2500_emm_data_r);
DECLARE_WRITE8_MEMBER(mz2500_emm_addr_w);
DECLARE_WRITE8_MEMBER(mz2500_emm_data_w);
uint8_t mz2500_cg_latch_compare();
uint8_t mz2500_ram_read(uint16_t offset, uint8_t bank_num);
void mz2500_ram_write(uint16_t offset, uint8_t data, uint8_t bank_num);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
DECLARE_PALETTE_INIT(mz2500);
uint32_t screen_update_mz2500(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(mz2500_vbl);
DECLARE_READ8_MEMBER(fdc_r);
DECLARE_WRITE8_MEMBER(fdc_w);
DECLARE_WRITE8_MEMBER(floppy_select_w);
DECLARE_WRITE8_MEMBER(floppy_side_w);
DECLARE_READ8_MEMBER(mz2500_porta_r);
DECLARE_READ8_MEMBER(mz2500_portb_r);
DECLARE_READ8_MEMBER(mz2500_portc_r);
DECLARE_WRITE8_MEMBER(mz2500_porta_w);
DECLARE_WRITE8_MEMBER(mz2500_portb_w);
DECLARE_WRITE8_MEMBER(mz2500_portc_w);
DECLARE_WRITE8_MEMBER(mz2500_pio1_porta_w);
DECLARE_READ8_MEMBER(mz2500_pio1_porta_r);
DECLARE_READ8_MEMBER(opn_porta_r);
DECLARE_WRITE8_MEMBER(opn_porta_w);
DECLARE_WRITE_LINE_MEMBER(pit8253_clk0_irq);
DECLARE_WRITE_LINE_MEMBER(mz2500_rtc_alarm_irq);
IRQ_CALLBACK_MEMBER( mz2500_irq_ack );
void draw_80x25(bitmap_ind16 &bitmap,const rectangle &cliprect,uint16_t map_addr);
void draw_40x25(bitmap_ind16 &bitmap,const rectangle &cliprect,int plane,uint16_t map_addr);
void draw_cg4_screen(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri);
void draw_cg16_screen(bitmap_ind16 &bitmap,const rectangle &cliprect,int plane,int x_size,int pri);
void draw_cg256_screen(bitmap_ind16 &bitmap,const rectangle &cliprect,int plane,int pri);
void draw_tv_screen(bitmap_ind16 &bitmap,const rectangle &cliprect);
void draw_cg_screen(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri);
void mz2500_draw_pixel(bitmap_ind16 &bitmap,int x,int y,uint16_t pen,uint8_t width,uint8_t height);
void mz2500_reconfigure_screen();
uint8_t pal_256_param(int index, int param);
void mz2500_reset(mz2500_state *state, uint8_t type);
required_device<palette_device> m_palette;
void mz2500(machine_config &config);
void mz2500_io(address_map &map);
void mz2500_map(address_map &map);
};
#endif