// license:BSD-3-Clause // copyright-holders:Robbbert and unknown others /***************************************************************************** * * includes/trs80.h * ****************************************************************************/ #ifndef MAME_INCLUDES_TRS80_H #define MAME_INCLUDES_TRS80_H #pragma once #include "bus/centronics/ctronics.h" #include "cpu/z80/z80.h" #include "imagedev/cassette.h" #include "imagedev/flopdrv.h" #include "imagedev/snapquik.h" #include "machine/ay31015.h" #include "machine/buffer.h" #include "machine/wd_fdc.h" #include "sound/spkrdev.h" #include "sound/wave.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_centronics(*this, "centronics") , m_cent_data_out(*this, "cent_data_out") , m_cent_status_in(*this, "cent_status_in") , m_uart(*this, "uart") , 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_config(*this, "CONFIG") , m_io_keyboard(*this, "LINE%u", 0) , m_bank1(nullptr) , m_bank2(nullptr) , m_bank3(nullptr) , m_bank4(nullptr) , m_bank5(nullptr) , m_bank6(nullptr) , m_bank7(nullptr) , m_bank8(nullptr) , m_bank9(nullptr) , m_bank11(nullptr) , m_bank12(nullptr) , m_bank13(nullptr) , m_bank14(nullptr) , m_bank15(nullptr) , m_bank16(nullptr) , m_bank17(nullptr) , m_bank18(nullptr) , m_bank19(nullptr) { } DECLARE_FLOPPY_FORMATS(floppy_formats); DECLARE_WRITE8_MEMBER ( trs80_ff_w ); DECLARE_WRITE8_MEMBER ( lnw80_fe_w ); DECLARE_WRITE8_MEMBER ( sys80_fe_w ); DECLARE_WRITE8_MEMBER ( sys80_f8_w ); DECLARE_WRITE8_MEMBER ( trs80m4_ff_w ); DECLARE_WRITE8_MEMBER ( trs80m4_f4_w ); DECLARE_WRITE8_MEMBER ( trs80m4_ec_w ); DECLARE_WRITE8_MEMBER ( trs80m4_ea_w ); DECLARE_WRITE8_MEMBER ( trs80m4_e9_w ); DECLARE_WRITE8_MEMBER ( trs80m4_e8_w ); DECLARE_WRITE8_MEMBER ( trs80m4_e4_w ); DECLARE_WRITE8_MEMBER ( trs80m4_e0_w ); DECLARE_WRITE8_MEMBER ( trs80m4p_9c_w ); DECLARE_WRITE8_MEMBER ( trs80m4_90_w ); DECLARE_WRITE8_MEMBER ( trs80m4_84_w ); DECLARE_READ8_MEMBER ( lnw80_fe_r ); DECLARE_READ8_MEMBER ( trs80_ff_r ); DECLARE_READ8_MEMBER ( sys80_f9_r ); DECLARE_READ8_MEMBER ( trs80m4_ff_r ); DECLARE_READ8_MEMBER ( trs80m4_ec_r ); DECLARE_READ8_MEMBER ( trs80m4_ea_r ); DECLARE_READ8_MEMBER ( trs80m4_e8_r ); DECLARE_READ8_MEMBER ( trs80m4_e4_r ); DECLARE_READ8_MEMBER ( trs80m4_e0_r ); DECLARE_READ8_MEMBER( trs80_irq_status_r ); DECLARE_READ8_MEMBER( trs80_printer_r ); DECLARE_WRITE8_MEMBER( trs80_printer_w ); DECLARE_WRITE8_MEMBER( trs80_cassunit_w ); DECLARE_WRITE8_MEMBER( trs80_motor_w ); DECLARE_READ8_MEMBER( trs80_keyboard_r ); DECLARE_WRITE8_MEMBER ( trs80m4_88_w ); DECLARE_READ8_MEMBER( trs80_videoram_r ); DECLARE_WRITE8_MEMBER( trs80_videoram_w ); DECLARE_READ8_MEMBER( trs80_gfxram_r ); DECLARE_WRITE8_MEMBER( trs80_gfxram_w ); DECLARE_READ8_MEMBER (trs80_wd179x_r); DECLARE_READ8_MEMBER (cp500_a11_flipflop_toggle); void init_trs80m4(); void init_trs80l2(); void init_trs80m4p(); void init_lnw80(); void init_trs80(); INTERRUPT_GEN_MEMBER(trs80_rtc_interrupt); INTERRUPT_GEN_MEMBER(trs80_fdc_interrupt); TIMER_CALLBACK_MEMBER(cassette_data_callback); DECLARE_WRITE_LINE_MEMBER(trs80_fdc_intrq_w); DECLARE_QUICKLOAD_LOAD_MEMBER( trs80_cmd ); DECLARE_MACHINE_RESET(trs80m4); DECLARE_MACHINE_RESET(lnw80); DECLARE_MACHINE_RESET(cp500); DECLARE_PALETTE_INIT(lnw80); uint32_t screen_update_trs80(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_trs80m4(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); uint32_t screen_update_meritum(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void sys80(machine_config &config); void trs80(machine_config &config); void lnw80(machine_config &config); void model4p(machine_config &config); void meritum(machine_config &config); void model3(machine_config &config); void radionic(machine_config &config); void model1(machine_config &config); void ht1080z(machine_config &config); void cp500(machine_config &config); void model4(machine_config &config); void cp500_io(address_map &map); void lnw80_io(address_map &map); void lnw80_map(address_map &map); void meritum_io(address_map &map); void meritum_map(address_map &map); void model1_io(address_map &map); void model1_map(address_map &map); void model3_io(address_map &map); void model3_map(address_map &map); void model4_io(address_map &map); void model4p_io(address_map &map); void sys80_io(address_map &map); void trs80_io(address_map &map); void trs80_map(address_map &map); private: uint8_t *m_p_gfxram; uint8_t m_model4; uint8_t m_mode; uint8_t m_irq; uint8_t m_mask; uint8_t m_nmi_mask; uint8_t m_port_ec; uint8_t m_tape_unit; uint8_t m_reg_load; uint8_t m_nmi_data; #ifdef USE_TRACK uint8_t m_track[4]; #endif uint8_t m_head; #ifdef USE_SECTOR uint8_t m_sector[4]; #endif uint8_t m_cassette_data; emu_timer *m_cassette_data_timer; double m_old_cassette_val; uint16_t m_start_address; uint8_t m_crtc_reg; uint8_t m_size_store; bool m_a11_flipflop; void trs80_fdc_interrupt_internal(); virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; required_device m_maincpu; required_memory_region m_region_maincpu; required_region_ptr m_p_chargen; optional_shared_ptr m_p_videoram; optional_device m_centronics; optional_device m_cent_data_out; optional_device m_cent_status_in; optional_device m_uart; 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; required_ioport m_io_config; required_ioport_array<8> m_io_keyboard; memory_bank *m_bank1; memory_bank *m_bank2; memory_bank *m_bank3; memory_bank *m_bank4; memory_bank *m_bank5; memory_bank *m_bank6; memory_bank *m_bank7; memory_bank *m_bank8; memory_bank *m_bank9; memory_bank *m_bank11; memory_bank *m_bank12; memory_bank *m_bank13; memory_bank *m_bank14; memory_bank *m_bank15; memory_bank *m_bank16; memory_bank *m_bank17; memory_bank *m_bank18; memory_bank *m_bank19; }; #endif // MAME_INCLUDES_TRS80_H