1 // license:BSD-3-Clause 2 // copyright-holders:Ryan Holtz 3 4 #ifndef MAME_INCLUDES_CDI_H 5 #define MAME_INCLUDES_CDI_H 6 7 #include "machine/scc68070.h" 8 #include "machine/cdislavehle.h" 9 #include "machine/cdicdic.h" 10 #include "sound/dmadac.h" 11 #include "video/mcd212.h" 12 #include "cpu/mcs51/mcs51.h" 13 #include "cpu/m6805/m68hc05.h" 14 #include "screen.h" 15 16 /*----------- driver state -----------*/ 17 18 class cdi_state : public driver_device 19 { 20 public: cdi_state(const machine_config & mconfig,device_type type,const char * tag)21 cdi_state(const machine_config &mconfig, device_type type, const char *tag) 22 : driver_device(mconfig, type, tag) 23 , m_maincpu(*this, "maincpu") 24 , m_planea(*this, "mcd212:planea") 25 , m_slave_hle(*this, "slave_hle") 26 , m_servo(*this, "servo") 27 , m_slave(*this, "slave") 28 , m_cdic(*this, "cdic") 29 , m_cdda(*this, "cdda") 30 , m_mcd212(*this, "mcd212") 31 , m_lcd(*this, "lcd") 32 , m_dmadac(*this, "dac%u", 1U) 33 { } 34 35 void cdimono1_base(machine_config &config); 36 void cdimono1(machine_config &config); 37 void cdimono2(machine_config &config); 38 void cdi910(machine_config &config); 39 40 protected: 41 virtual void machine_reset() override; 42 43 void cdimono1_mem(address_map &map); 44 45 required_device<scc68070_device> m_maincpu; 46 47 private: 48 virtual void video_start() override; 49 50 enum servo_portc_bit_t 51 { 52 INV_JUC_OUT = (1 << 2), 53 INV_DIV4_IN = (1 << 5), 54 INV_CADDYSWITCH_IN = (1 << 7) 55 }; 56 57 void draw_lcd(int y); 58 uint32_t screen_update_cdimono1_lcd(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 59 60 void cdi910_mem(address_map &map); 61 void cdimono2_mem(address_map &map); 62 void cdi070_cpuspace(address_map &map); 63 64 uint16_t dvc_r(offs_t offset, uint16_t mem_mask = ~0); 65 void dvc_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 66 67 required_shared_ptr<uint16_t> m_planea; 68 optional_device<cdislave_hle_device> m_slave_hle; 69 optional_device<m68hc05c8_device> m_servo; 70 optional_device<m68hc05c8_device> m_slave; 71 optional_device<cdicdic_device> m_cdic; 72 required_device<cdda_device> m_cdda; 73 required_device<mcd212_device> m_mcd212; 74 optional_device<screen_device> m_lcd; 75 76 required_device_array<dmadac_sound_device, 2> m_dmadac; 77 78 bitmap_rgb32 m_lcdbitmap; 79 }; 80 81 class quizard_state : public cdi_state 82 { 83 public: quizard_state(const machine_config & mconfig,device_type type,const char * tag)84 quizard_state(const machine_config &mconfig, device_type type, const char *tag) 85 : cdi_state(mconfig, type, tag) 86 , m_mcu(*this, "mcu") 87 , m_inputs(*this, "P%u", 0U) 88 { } 89 90 void quizard(machine_config &config); 91 92 private: 93 virtual void machine_start() override; 94 virtual void machine_reset() override; 95 96 uint8_t mcu_p0_r(); 97 uint8_t mcu_p1_r(); 98 uint8_t mcu_p2_r(); 99 uint8_t mcu_p3_r(); 100 void mcu_p0_w(uint8_t data); 101 void mcu_p1_w(uint8_t data); 102 void mcu_p2_w(uint8_t data); 103 void mcu_p3_w(uint8_t data); 104 void mcu_tx(uint8_t data); 105 uint8_t mcu_rx(); 106 107 void mcu_rx_from_cpu(uint8_t data); 108 void mcu_rtsn_from_cpu(int state); 109 110 required_device<i8751_device> m_mcu; 111 required_ioport_array<3> m_inputs; 112 113 uint8_t m_mcu_rx_from_cpu; 114 bool m_mcu_initial_byte; 115 }; 116 117 // Quizard 2 language values: 118 // 0x2b1: Italian 119 // 0x001: French 120 // 0x188: German 121 122 #endif // MAME_INCLUDES_CDI_H 123