// license:BSD-3-Clause // copyright-holders:Curt Coder #ifndef MAME_INCLUDES_TRS80M2_H #define MAME_INCLUDES_TRS80M2_H #pragma once #include "cpu/z80/z80.h" #include "machine/z80daisy.h" #include "cpu/mcs48/mcs48.h" #include "cpu/m68000/m68000.h" #include "bus/centronics/ctronics.h" #include "imagedev/floppy.h" #include "machine/am9519.h" #include "machine/keyboard.h" #include "machine/ram.h" #include "machine/timer.h" #include "machine/trs80m2kb.h" #include "machine/wd_fdc.h" #include "machine/z80ctc.h" #include "machine/z80dma.h" #include "machine/z80pio.h" #include "machine/z80dart.h" #include "video/mc6845.h" #include "emupal.h" #define SCREEN_TAG "screen" #define Z80_TAG "u12" #define Z80CTC_TAG "u19" #define Z80DMA_TAG "u20" #define Z80PIO_TAG "u22" #define Z80SIO_TAG "u18" #define FD1791_TAG "u6" #define MC6845_TAG "u11" #define CENTRONICS_TAG "j2" #define M68000_TAG "m16_u22" #define AM9519A_TAG "m16_u11" class trs80m2_state : public driver_device { public: trs80m2_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, Z80_TAG), m_ctc(*this, Z80CTC_TAG), m_dmac(*this, Z80DMA_TAG), m_pio(*this, Z80PIO_TAG), m_crtc(*this, MC6845_TAG), m_palette(*this, "palette"), m_fdc(*this, FD1791_TAG), m_centronics(*this, CENTRONICS_TAG), m_floppy0(*this, FD1791_TAG":0"), m_floppy1(*this, FD1791_TAG":1"), m_floppy2(*this, FD1791_TAG":2"), m_floppy3(*this, FD1791_TAG":3"), m_floppy(nullptr), m_ram(*this, RAM_TAG), m_kb(*this, TRS80M2_KEYBOARD_TAG), m_rom(*this, Z80_TAG), m_char_rom(*this, MC6845_TAG), m_video_ram(*this, "video_ram") { } static constexpr feature_type imperfect_features() { return feature::KEYBOARD; } uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); DECLARE_WRITE8_MEMBER( drvslt_w ); DECLARE_WRITE8_MEMBER( rom_enable_w ); DECLARE_READ8_MEMBER( keyboard_r ); DECLARE_READ8_MEMBER( rtc_r ); DECLARE_READ8_MEMBER( nmi_r ); DECLARE_WRITE8_MEMBER( nmi_w ); DECLARE_READ8_MEMBER( fdc_r ); DECLARE_WRITE8_MEMBER( fdc_w ); DECLARE_WRITE_LINE_MEMBER( de_w ); DECLARE_WRITE_LINE_MEMBER( vsync_w ); DECLARE_READ8_MEMBER( pio_pa_r ); DECLARE_WRITE8_MEMBER( pio_pa_w ); DECLARE_WRITE_LINE_MEMBER( strobe_w ); DECLARE_WRITE_LINE_MEMBER( kb_clock_w ); void kbd_w(u8 data); MC6845_UPDATE_ROW( crtc_update_row ); TIMER_DEVICE_CALLBACK_MEMBER(ctc_tick); DECLARE_READ8_MEMBER(io_read_byte); DECLARE_WRITE8_MEMBER(io_write_byte); DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); DECLARE_WRITE_LINE_MEMBER(write_centronics_fault); DECLARE_WRITE_LINE_MEMBER(write_centronics_perror); void trs80m2(machine_config &config); void m68000_mem(address_map &map); void z80_io(address_map &map); void z80_mem(address_map &map); protected: virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; required_device m_maincpu; required_device m_ctc; required_device m_dmac; required_device m_pio; required_device m_crtc; required_device m_palette; required_device m_fdc; required_device m_centronics; required_device m_floppy0; required_device m_floppy1; required_device m_floppy2; required_device m_floppy3; floppy_image_device *m_floppy; required_device m_ram; required_device m_kb; required_memory_region m_rom; required_memory_region m_char_rom; optional_shared_ptr m_video_ram; // memory state int m_boot_rom; int m_bank; int m_msel; // keyboard state uint8_t m_key_latch; uint8_t m_key_data; int m_key_bit; int m_kbclk; int m_kbdata; int m_kbirq; // video state int m_blnkvid; int m_80_40_char_en; int m_de; int m_rtc_int; int m_enable_rtc_int; int m_centronics_busy; int m_centronics_fault; int m_centronics_perror; }; class trs80m16_state : public trs80m2_state { public: trs80m16_state(const machine_config &mconfig, device_type type, const char *tag) : trs80m2_state(mconfig, type, tag) , m_subcpu(*this, M68000_TAG) , m_uic(*this, AM9519A_TAG) { } DECLARE_WRITE8_MEMBER( ual_w ); DECLARE_WRITE8_MEMBER( tcl_w ); void trs80m16(machine_config &config); void m16_z80_io(address_map &map); protected: virtual void machine_start() override; required_device m_subcpu; required_device m_uic; uint16_t m_ual; uint8_t m_limit[2]; uint8_t m_offset[2]; }; #endif // MAME_INCLUDES_TRS80M2_H