// license:BSD-3-Clause // copyright-holders:Juergen Buchmueller, Robbbert //***************************************************************************** #ifndef MAME_INCLUDES_TRS80_H #define MAME_INCLUDES_TRS80_H #pragma once #include "bus/centronics/ctronics.h" #include "cpu/z80/z80.h" #include "machine/bankdev.h" #include "imagedev/cassette.h" #include "imagedev/flopdrv.h" #include "imagedev/snapquik.h" #include "machine/ay31015.h" #include "machine/com8116.h" #include "machine/i8255.h" #include "bus/rs232/rs232.h" #include "machine/buffer.h" #include "machine/wd_fdc.h" #include "sound/spkrdev.h" #include "sound/wave.h" #include "emupal.h" #include "formats/trs_cas.h" class trs80_state : public driver_device { public: trs80_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") , m_region_maincpu(*this, "maincpu") , m_p_chargen(*this, "chargen") , m_p_videoram(*this, "videoram") , m_p_gfxram(*this, "gfxram") // LNW80 only , m_lnw_bank(*this, "lnw_banked_mem") // LNW80 only , m_centronics(*this, "centronics") , m_cent_data_out(*this, "cent_data_out") , m_cent_status_in(*this, "cent_status_in") , m_uart(*this, "uart") , m_ppi(*this, "ppi") // Radionic only , m_brg(*this, "brg") , m_fdc(*this, "fdc") , m_floppy0(*this, "fdc:0") , m_floppy1(*this, "fdc:1") , m_floppy2(*this, "fdc:2") , m_floppy3(*this, "fdc:3") , m_speaker(*this, "speaker") , m_cassette(*this, "cassette") , m_io_baud(*this, "BAUD") , m_io_config(*this, "CONFIG") , m_io_keyboard(*this, "LINE%u", 0) { } void sys80(machine_config &config); void trs80(machine_config &config); void lnw80(machine_config &config); void radionic(machine_config &config); void model1(machine_config &config); void ht1080z(machine_config &config); void init_trs80l2(); void init_trs80(); private: DECLARE_FLOPPY_FORMATS(floppy_formats); DECLARE_WRITE8_MEMBER(port_ff_w); DECLARE_WRITE8_MEMBER(lnw80_fe_w); DECLARE_WRITE8_MEMBER(sys80_fe_w); DECLARE_WRITE8_MEMBER(sys80_f8_w); DECLARE_WRITE8_MEMBER(port_ea_w); DECLARE_WRITE8_MEMBER(port_e8_w); DECLARE_READ8_MEMBER(lnw80_fe_r); DECLARE_READ8_MEMBER(port_ff_r); DECLARE_READ8_MEMBER(sys80_f9_r); DECLARE_READ8_MEMBER(port_ea_r); DECLARE_READ8_MEMBER(port_e8_r); DECLARE_READ8_MEMBER(irq_status_r); DECLARE_READ8_MEMBER(printer_r); DECLARE_WRITE8_MEMBER(printer_w); DECLARE_WRITE8_MEMBER(cassunit_w); DECLARE_WRITE8_MEMBER(motor_w); DECLARE_READ8_MEMBER(keyboard_r); DECLARE_READ8_MEMBER(wd179x_r); INTERRUPT_GEN_MEMBER(rtc_interrupt); INTERRUPT_GEN_MEMBER(fdc_interrupt); TIMER_CALLBACK_MEMBER(cassette_data_callback); DECLARE_WRITE_LINE_MEMBER(intrq_w); DECLARE_QUICKLOAD_LOAD_MEMBER( trs80_cmd ); DECLARE_MACHINE_RESET(lnw80); DECLARE_PALETTE_INIT(lnw80); uint32_t screen_update_trs80(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_ht1080z(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_lnw80(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_radionic(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void lnw80_io(address_map &map); void lnw80_mem(address_map &map); void lnw_banked_mem(address_map &map); void m1_io(address_map &map); void m1_mem(address_map &map); void sys80_io(address_map &map); void trs80_io(address_map &map); void trs80_mem(address_map &map); void ht1080z_io(address_map &map); void radionic_mem(address_map &map); uint8_t m_mode; uint8_t m_irq; uint8_t m_mask; uint8_t m_tape_unit; bool m_reg_load; u8 m_lnw_mode; bool m_cassette_data; emu_timer *m_cassette_data_timer; double m_old_cassette_val; uint8_t m_size_store; uint16_t m_timeout; floppy_image_device *m_floppy; virtual void machine_start() override; virtual void machine_reset() override; required_device m_maincpu; required_memory_region m_region_maincpu; required_region_ptr m_p_chargen; optional_shared_ptr m_p_videoram; optional_shared_ptr m_p_gfxram; optional_device m_lnw_bank; optional_device m_centronics; optional_device m_cent_data_out; optional_device m_cent_status_in; optional_device m_uart; optional_device m_ppi; optional_device m_brg; optional_device m_fdc; optional_device m_floppy0; optional_device m_floppy1; optional_device m_floppy2; optional_device m_floppy3; required_device m_speaker; required_device m_cassette; optional_ioport m_io_baud; optional_ioport m_io_config; required_ioport_array<8> m_io_keyboard; }; #endif // MAME_INCLUDES_TRS80_H