1 // license:BSD-3-Clause 2 // copyright-holders:Nathan Woods, Wilbert Pol, David Shah 3 /***************************************************************************** 4 5 a2600.h 6 7 Atari 2600 8 9 ****************************************************************************/ 10 11 #ifndef MAME_INCLUDES_A2600_H 12 #define MAME_INCLUDES_A2600_H 13 14 #pragma once 15 16 #include "bus/vcs/compumat.h" 17 #include "bus/vcs/dpc.h" 18 #include "bus/vcs/harmony_melody.h" 19 #include "bus/vcs/rom.h" 20 #include "bus/vcs/scharger.h" 21 #include "bus/vcs/vcs_slot.h" 22 #include "bus/vcs_ctrl/ctrl.h" 23 #include "cpu/m6502/m6507.h" 24 #include "sound/tiaintf.h" 25 #include "video/tia.h" 26 27 #define USE_NEW_RIOT 0 28 29 #if USE_NEW_RIOT 30 #include "machine/mos6530n.h" 31 #else 32 #include "machine/6532riot.h" 33 #endif 34 35 #define CONTROL1_TAG "joyport1" 36 #define CONTROL2_TAG "joyport2" 37 38 39 class a2600_base_state : public driver_device 40 { 41 protected: a2600_base_state(const machine_config & mconfig,device_type type,const char * tag)42 a2600_base_state(const machine_config &mconfig, device_type type, const char *tag) : 43 driver_device(mconfig, type, tag), 44 m_riot_ram(*this, "riot_ram"), 45 m_tia(*this, "tia_video"), 46 m_maincpu(*this, "maincpu"), 47 m_riot(*this, "riot"), 48 m_joy1(*this, CONTROL1_TAG), 49 m_joy2(*this, CONTROL2_TAG), 50 m_screen(*this, "screen") 51 { } 52 53 virtual void machine_start() override; 54 55 void switch_A_w(uint8_t data); 56 uint8_t switch_A_r(); 57 void switch_B_w(uint8_t data); 58 DECLARE_WRITE_LINE_MEMBER(irq_callback); 59 uint16_t a2600_read_input_port(offs_t offset); 60 uint8_t a2600_get_databus_contents(offs_t offset); 61 void a2600_tia_vsync_callback(uint16_t data); 62 void a2600_tia_vsync_callback_pal(uint16_t data); 63 64 void a2600_mem(address_map &map); 65 66 required_shared_ptr<uint8_t> m_riot_ram; 67 required_device<tia_video_device> m_tia; 68 required_device<m6507_device> m_maincpu; 69 #if USE_NEW_RIOT 70 required_device<mos6532_new_device> m_riot; 71 #else 72 required_device<riot6532_device> m_riot; 73 #endif 74 required_device<vcs_control_port_device> m_joy1; 75 required_device<vcs_control_port_device> m_joy2; 76 required_device<screen_device> m_screen; 77 78 private: 79 uint16_t m_current_screen_height; 80 }; 81 82 83 class a2600_state : public a2600_base_state 84 { 85 public: a2600_state(const machine_config & mconfig,device_type type,const char * tag)86 a2600_state(const machine_config &mconfig, device_type type, const char *tag) : 87 a2600_base_state(mconfig, type, tag), 88 m_cart(*this, "cartslot") 89 { } 90 91 void a2600(machine_config &config); 92 void a2600p(machine_config &config); 93 94 protected: 95 virtual void machine_start() override; 96 97 void cart_over_tia_w(address_space &space, offs_t offset, uint8_t data); 98 // investigate how the carts mapped here (Mapper JVP) interact with the RIOT device 99 uint8_t cart_over_riot_r(address_space &space, offs_t offset); 100 void cart_over_riot_w(address_space &space, offs_t offset, uint8_t data); 101 uint8_t cart_over_all_r(address_space &space, offs_t offset); 102 void cart_over_all_w(address_space &space, offs_t offset, uint8_t data); 103 104 void a2600_cartslot(machine_config &config); 105 106 private: 107 required_device<vcs_cart_slot_device> m_cart; 108 }; 109 110 #endif // MAME_INCLUDES_A2600_H 111