1 // license:BSD-3-Clause 2 // copyright-holders:Mike Balfour, Ben Bruscella, Sean Young, Frank Palazzolo 3 #pragma once 4 5 #ifndef MAME_INCLUDES_COLECO_H 6 #define MAME_INCLUDES_COLECO_H 7 8 9 #include "cpu/z80/z80.h" 10 #include "machine/timer.h" 11 #include "sound/sn76496.h" 12 #include "video/tms9928a.h" 13 #include "machine/coleco.h" 14 #include "bus/coleco/cartridge/exp.h" 15 16 class coleco_state : public driver_device 17 { 18 public: coleco_state(const machine_config & mconfig,device_type type,const char * tag)19 coleco_state(const machine_config &mconfig, device_type type, const char *tag) 20 : driver_device(mconfig, type, tag), 21 m_maincpu(*this, "maincpu"), 22 m_cart(*this, COLECOVISION_CARTRIDGE_SLOT_TAG), 23 m_ram(*this, "ram"), 24 m_ctrlsel(*this, "CTRLSEL"), 25 m_std_keypad1(*this, "STD_KEYPAD1"), 26 m_std_joy1(*this, "STD_JOY1"), 27 m_std_keypad2(*this, "STD_KEYPAD2"), 28 m_std_joy2(*this, "STD_JOY2"), 29 m_sac_keypad1(*this, "SAC_KEYPAD1"), 30 m_sac_joy1(*this, "SAC_JOY1"), 31 m_sac_slide1(*this, "SAC_SLIDE1"), 32 m_sac_keypad2(*this, "SAC_KEYPAD2"), 33 m_sac_joy2(*this, "SAC_JOY2"), 34 m_sac_slide2(*this, "SAC_SLIDE2"), 35 m_driv_wheel1(*this, "DRIV_WHEEL1"), 36 m_driv_pedal1(*this, "DRIV_PEDAL1"), 37 m_driv_wheel2(*this, "DRIV_WHEEL2"), 38 m_driv_pedal2(*this, "DRIV_PEDAL2"), 39 m_roller_x(*this, "ROLLER_X"), 40 m_roller_y(*this, "ROLLER_Y") 41 { } 42 43 virtual void machine_start() override; 44 virtual void machine_reset() override; 45 46 uint8_t cart_r(offs_t offset); 47 uint8_t paddle_1_r(); 48 uint8_t paddle_2_r(); 49 void paddle_off_w(uint8_t data); 50 void paddle_on_w(uint8_t data); 51 52 TIMER_CALLBACK_MEMBER(paddle_d7reset_callback); 53 TIMER_CALLBACK_MEMBER(paddle_irqreset_callback); 54 TIMER_CALLBACK_MEMBER(paddle_pulse_callback); 55 TIMER_DEVICE_CALLBACK_MEMBER(paddle_update_callback); 56 DECLARE_WRITE_LINE_MEMBER(coleco_vdp_interrupt); 57 DECLARE_DEVICE_IMAGE_LOAD_MEMBER(czz50_cart); 58 59 uint8_t coleco_paddle_read(int port, int joy_mode, uint8_t joy_status); 60 uint8_t coleco_scan_paddles(uint8_t *joy_status0, uint8_t *joy_status1); 61 62 void colecop(machine_config &config); 63 void coleco(machine_config &config); 64 void czz50(machine_config &config); 65 void dina(machine_config &config); 66 void coleco_io_map(address_map &map); 67 void coleco_map(address_map &map); 68 void czz50_map(address_map &map); 69 protected: 70 required_device<cpu_device> m_maincpu; 71 required_device<colecovision_cartridge_slot_device> m_cart; 72 required_shared_ptr<uint8_t> m_ram; 73 74 int m_joy_mode; 75 int m_last_nmi_state; 76 77 // analog controls 78 attotime m_joy_pulse_reload[2]; 79 emu_timer *m_joy_pulse_timer[2]; 80 emu_timer *m_joy_irq_timer[2]; 81 emu_timer *m_joy_d7_timer[2]; 82 int m_joy_irq_state[2]; 83 int m_joy_d7_state[2]; 84 uint8_t m_joy_analog_state[2]; 85 uint8_t m_joy_analog_reload[2]; 86 87 optional_ioport m_ctrlsel; 88 required_ioport m_std_keypad1; 89 required_ioport m_std_joy1; 90 required_ioport m_std_keypad2; 91 required_ioport m_std_joy2; 92 optional_ioport m_sac_keypad1; 93 optional_ioport m_sac_joy1; 94 optional_ioport m_sac_slide1; 95 optional_ioport m_sac_keypad2; 96 optional_ioport m_sac_joy2; 97 optional_ioport m_sac_slide2; 98 optional_ioport m_driv_wheel1; 99 optional_ioport m_driv_pedal1; 100 optional_ioport m_driv_wheel2; 101 optional_ioport m_driv_pedal2; 102 optional_ioport m_roller_x; 103 optional_ioport m_roller_y; 104 }; 105 106 class bit90_state : public coleco_state 107 { 108 public: bit90_state(const machine_config & mconfig,device_type type,const char * tag)109 bit90_state(const machine_config &mconfig, device_type type, const char *tag) 110 : coleco_state(mconfig, type, tag), 111 m_bank(*this, "bank"), 112 m_io_keyboard(*this, {"ROW0", "ROW1", "ROW2", "ROW3", "ROW4", "ROW5", "ROW6", "ROW7"}) 113 {} 114 115 virtual void machine_start() override; 116 virtual void machine_reset() override; 117 118 void bit90(machine_config &config); 119 120 uint8_t bankswitch_u4_r(address_space &space); 121 uint8_t bankswitch_u3_r(address_space &space); 122 uint8_t keyboard_r(address_space &space); 123 void u32_w(uint8_t data); 124 125 protected: 126 required_memory_bank m_bank; 127 required_ioport_array<8> m_io_keyboard; 128 129 private: 130 void bit90_map(address_map &map); 131 void bit90_io_map(address_map &map); 132 133 uint8_t m_keyselect; 134 uint8_t m_unknown; 135 }; 136 137 #endif 138