1 // license:BSD-3-Clause 2 // copyright-holders:Wilbert Pol, Curt Coder 3 4 #ifndef MAME_INCLUDES_CRVISION_H 5 #define MAME_INCLUDES_CRVISION_H 6 7 #include "cpu/m6502/m6502.h" 8 #include "imagedev/cassette.h" 9 #include "machine/6821pia.h" 10 #include "machine/buffer.h" 11 #include "bus/centronics/ctronics.h" 12 #include "bus/crvision/slot.h" 13 #include "bus/crvision/rom.h" 14 #include "machine/ram.h" 15 #include "sound/sn76496.h" 16 #include "video/tms9928a.h" 17 18 #define SCREEN_TAG "screen" 19 #define M6502_TAG "u2" 20 #define TMS9929_TAG "u3" 21 #define PIA6821_TAG "u21" 22 #define SN76489_TAG "u22" 23 #define CENTRONICS_TAG "centronics" 24 25 #define BANK_ROM1 "bank1" 26 #define BANK_ROM2 "bank2" 27 28 class crvision_state : public driver_device 29 { 30 public: crvision_state(const machine_config & mconfig,device_type type,const char * tag)31 crvision_state(const machine_config &mconfig, device_type type, const char *tag) 32 : driver_device(mconfig, type, tag) 33 , m_maincpu(*this, M6502_TAG) 34 , m_pia(*this, PIA6821_TAG) 35 , m_psg(*this, SN76489_TAG) 36 , m_cassette(*this, "cassette") 37 , m_cart(*this, "cartslot") 38 , m_centronics(*this, CENTRONICS_TAG) 39 , m_cent_data_out(*this, "cent_data_out") 40 , m_ram(*this, RAM_TAG) 41 , m_io_keypad{{*this, "PA0.%u", 0U},{*this, "PA1.%u", 0U},{*this, "PA2.%u", 0U},{*this, "PA3.%u", 0U}} 42 { } 43 44 void creativision(machine_config &config); 45 void ntsc(machine_config &config); 46 DECLARE_INPUT_CHANGED_MEMBER( trigger_nmi ); 47 48 protected: 49 required_device<cpu_device> m_maincpu; 50 required_device<pia6821_device> m_pia; 51 required_device<sn76496_base_device> m_psg; 52 required_device<cassette_image_device> m_cassette; 53 required_device<crvision_cart_slot_device> m_cart; 54 required_device<centronics_device> m_centronics; 55 required_device<output_latch_device> m_cent_data_out; 56 required_device<ram_device> m_ram; 57 optional_ioport_array<8> m_io_keypad[4]; 58 59 virtual void machine_start() override; 60 uint8_t m_keylatch; 61 62 private: 63 void crvision_map(address_map &map); 64 uint8_t read_keyboard(u8 pa); 65 66 void pia_pa_w(uint8_t data); 67 uint8_t pia_pa_r(); 68 uint8_t pia_pb_r(); 69 }; 70 71 class crvision_pal_state : public crvision_state 72 { 73 public: crvision_pal_state(const machine_config & mconfig,device_type type,const char * tag)74 crvision_pal_state(const machine_config &mconfig, device_type type, const char *tag) 75 : crvision_state(mconfig, type, tag) 76 { } 77 void pal(machine_config &config); 78 }; 79 80 class laser2001_state : public crvision_state 81 { 82 public: laser2001_state(const machine_config & mconfig,device_type type,const char * tag)83 laser2001_state(const machine_config &mconfig, device_type type, const char *tag) 84 : crvision_state(mconfig, type, tag) 85 , m_centronics(*this, CENTRONICS_TAG) 86 , m_inp_y(*this, "Y.%u", 0U) 87 , m_inp_joy(*this, "JOY.%u", 0U) 88 { } 89 90 void lasr2001(machine_config &config); 91 92 private: 93 required_device<centronics_device> m_centronics; 94 required_ioport_array<8> m_inp_y; 95 required_ioport_array<4> m_inp_joy; 96 97 uint8_t m_joylatch; 98 int m_centronics_busy; 99 int m_psg_ready; 100 101 DECLARE_WRITE_LINE_MEMBER( write_centronics_busy ); 102 DECLARE_WRITE_LINE_MEMBER( write_psg_ready ); 103 uint8_t pia_pa_r(); 104 void pia_pa_w(uint8_t data); 105 uint8_t pia_pb_r(); 106 void pia_pb_w(uint8_t data); 107 DECLARE_READ_LINE_MEMBER( pia_ca1_r ); 108 DECLARE_WRITE_LINE_MEMBER( pia_ca2_w ); 109 DECLARE_READ_LINE_MEMBER( pia_cb1_r ); 110 DECLARE_WRITE_LINE_MEMBER( pia_cb2_w ); 111 112 void lasr2001_map(address_map &map); 113 virtual void machine_start() override; 114 }; 115 116 #endif // MAME_INCLUDES_CRVISION_H 117