diff options
Diffstat (limited to 'src/mame/includes/z80ne.h')
-rw-r--r-- | src/mame/includes/z80ne.h | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/src/mame/includes/z80ne.h b/src/mame/includes/z80ne.h new file mode 100644 index 00000000000..b6d77971981 --- /dev/null +++ b/src/mame/includes/z80ne.h @@ -0,0 +1,192 @@ +// license:BSD-3-Clause +// copyright-holders:Roberto Lavarone +/***************************************************************************** + * + * includes/z80ne.h + * + * Nuova Elettronica Z80NE + * + * http://www.z80ne.com/ + * + ****************************************************************************/ + +#ifndef Z80NE_H_ +#define Z80NE_H_ + +#include "video/mc6847.h" +#include "imagedev/cassette.h" +#include "machine/ay31015.h" +#include "machine/kr2376.h" +#include "machine/wd_fdc.h" + +/*************************************************************************** + CONSTANTS +***************************************************************************/ + +#define Z80NE_CPU_SPEED_HZ 1920000 /* 1.92 MHz */ + +#define LX383_KEYS 16 +#define LX383_DOWNSAMPLING 16 + +#define LX385_TAPE_SAMPLE_FREQ 38400 + +/* wave duration threshold */ +enum z80netape_speed +{ + TAPE_300BPS = 300, /* 300 bps */ + TAPE_600BPS = 600, /* 600 bps */ + TAPE_1200BPS = 1200 /* 1200 bps */ +}; + +struct z80ne_cass_data_t { + struct { + int length; /* time cassette level is at input.level */ + int level; /* cassette level */ + int bit; /* bit being read */ + } input; + struct { + int length; /* time cassette level is at output.level */ + int level; /* cassette level */ + int bit; /* bit to output */ + } output; + z80netape_speed speed; /* 300 - 600 - 1200 */ + int wave_filter; + int wave_length; + int wave_short; + int wave_long; +}; + +struct wd17xx_state_t { + int drq; + int intrq; + UINT8 drive; /* current drive */ + UINT8 head; /* current head */ +}; + + +class z80ne_state : public driver_device +{ +public: + z80ne_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_vdg(*this, "mc6847"), + m_videoram(*this, "videoram"), + m_ay31015(*this, "ay_3_1015"), + m_lx388_kr2376(*this, "lx388_kr2376"), + m_maincpu(*this, "z80ne"), + m_floppy0(*this, "wd1771:0"), + m_floppy1(*this, "wd1771:1"), + m_floppy2(*this, "wd1771:2"), + m_floppy3(*this, "wd1771:3"), + m_cassette1(*this, "cassette"), + m_cassette2(*this, "cassette2"), + m_wd1771(*this, "wd1771"), + m_region_z80ne(*this, "z80ne"), + m_bank1(*this, "bank1"), + m_bank2(*this, "bank2"), + m_bank3(*this, "bank3"), + m_bank4(*this, "bank4"), + m_io_row0(*this, "ROW0"), + m_io_row1(*this, "ROW1"), + m_io_ctrl(*this, "CTRL"), + m_io_rst(*this, "RST"), + m_io_lx_385(*this, "LX.385"), + m_io_lx388_brk(*this, "LX388_BRK"), + m_io_x0(*this, "X0"), + m_io_x1(*this, "X1"), + m_io_x2(*this, "X2"), + m_io_x3(*this, "X3"), + m_io_x4(*this, "X4"), + m_io_x5(*this, "X5"), + m_io_x6(*this, "X6"), + m_io_x7(*this, "X7"), + m_io_modifiers(*this, "MODIFIERS"), + m_io_config(*this, "CONFIG") { } + + DECLARE_FLOPPY_FORMATS(floppy_formats); + + optional_device<mc6847_base_device> m_vdg; + optional_shared_ptr<UINT8> m_videoram; + required_device<ay31015_device> m_ay31015; + optional_device<kr2376_device> m_lx388_kr2376; + UINT8 m_lx383_scan_counter; + UINT8 m_lx383_key[LX383_KEYS]; + int m_lx383_downsampler; + int m_nmi_delay_counter; + int m_reset_delay_counter; + UINT8 m_lx385_ctrl; + emu_timer *m_cassette_timer; + z80ne_cass_data_t m_cass_data; + wd17xx_state_t m_wd17xx_state; + DECLARE_READ8_MEMBER(lx383_r); + DECLARE_WRITE8_MEMBER(lx383_w); + DECLARE_READ8_MEMBER(lx385_data_r); + DECLARE_READ8_MEMBER(lx385_ctrl_r); + DECLARE_WRITE8_MEMBER(lx385_data_w); + DECLARE_WRITE8_MEMBER(lx385_ctrl_w); + DECLARE_READ8_MEMBER(lx388_data_r); + DECLARE_READ8_MEMBER(lx388_read_field_sync); + DECLARE_DIRECT_UPDATE_MEMBER(z80ne_default); + DECLARE_DIRECT_UPDATE_MEMBER(z80ne_nmi_delay_count); + DECLARE_DIRECT_UPDATE_MEMBER(z80ne_reset_delay_count); + DECLARE_DRIVER_INIT(z80netf); + DECLARE_DRIVER_INIT(z80net); + DECLARE_DRIVER_INIT(z80netb); + DECLARE_DRIVER_INIT(z80ne); + DECLARE_MACHINE_START(z80ne); + DECLARE_MACHINE_RESET(z80ne); + DECLARE_MACHINE_START(z80netb); + DECLARE_MACHINE_RESET(z80netb); + DECLARE_MACHINE_START(z80netf); + DECLARE_MACHINE_RESET(z80netf); + DECLARE_MACHINE_START(z80net); + DECLARE_MACHINE_RESET(z80net); + DECLARE_MACHINE_RESET(z80ne_base); + DECLARE_INPUT_CHANGED_MEMBER(z80ne_reset); + DECLARE_INPUT_CHANGED_MEMBER(z80ne_nmi); + TIMER_CALLBACK_MEMBER(z80ne_cassette_tc); + TIMER_CALLBACK_MEMBER(z80ne_kbd_scan); + DECLARE_READ8_MEMBER(lx388_mc6847_videoram_r); + DECLARE_WRITE8_MEMBER(lx390_motor_w); + DECLARE_READ8_MEMBER(lx390_reset_bank); + DECLARE_READ8_MEMBER(lx390_fdc_r); + DECLARE_WRITE8_MEMBER(lx390_fdc_w); + +protected: + required_device<cpu_device> m_maincpu; + optional_device<floppy_connector> m_floppy0; + optional_device<floppy_connector> m_floppy1; + optional_device<floppy_connector> m_floppy2; + optional_device<floppy_connector> m_floppy3; + required_device<cassette_image_device> m_cassette1; + required_device<cassette_image_device> m_cassette2; + optional_device<fd1771_t> m_wd1771; + required_memory_region m_region_z80ne; + optional_memory_bank m_bank1; + optional_memory_bank m_bank2; + optional_memory_bank m_bank3; + optional_memory_bank m_bank4; + required_ioport m_io_row0; + required_ioport m_io_row1; + required_ioport m_io_ctrl; + required_ioport m_io_rst; + required_ioport m_io_lx_385; + optional_ioport m_io_lx388_brk; + optional_ioport m_io_x0; + optional_ioport m_io_x1; + optional_ioport m_io_x2; + optional_ioport m_io_x3; + optional_ioport m_io_x4; + optional_ioport m_io_x5; + optional_ioport m_io_x6; + optional_ioport m_io_x7; + optional_ioport m_io_modifiers; + optional_ioport m_io_config; + + cassette_image_device *cassette_device_image(); + void reset_lx388(); + void reset_lx382_banking(); + void reset_lx390_banking(); +}; + +#endif /* Z80NE_H_ */ |