1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 #pragma once 4 5 #ifndef MAME_INCLUDES_ADAM_H 6 #define MAME_INCLUDES_ADAM_H 7 8 #include "bus/adam/exp.h" 9 #include "bus/adamnet/adamnet.h" 10 #include "bus/coleco/controller/ctrl.h" 11 #include "bus/coleco/cartridge/exp.h" 12 #include "cpu/z80/z80.h" 13 #include "cpu/m6800/m6801.h" 14 #include "machine/coleco.h" 15 #include "machine/ram.h" 16 #include "sound/sn76496.h" 17 #include "video/tms9928a.h" 18 19 #define Z80_TAG "u1" 20 #define M6801_TAG "u6" 21 #define SN76489A_TAG "u20" 22 #define TMS9928A_TAG "tms9928a" 23 #define SCREEN_TAG "screen" 24 #define CONTROL1_TAG "joy1" 25 #define CONTROL2_TAG "joy2" 26 27 class adam_state : public driver_device 28 { 29 public: adam_state(const machine_config & mconfig,device_type type,const char * tag)30 adam_state(const machine_config &mconfig, device_type type, const char *tag) : 31 driver_device(mconfig, type, tag), 32 m_maincpu(*this, Z80_TAG), 33 m_netcpu(*this, M6801_TAG), 34 m_vdc(*this, TMS9928A_TAG), 35 m_psg(*this, SN76489A_TAG), 36 m_ram(*this, RAM_TAG), 37 m_adamnet(*this, "adamnet"), 38 m_slot1(*this, ADAM_LEFT_EXPANSION_SLOT_TAG), 39 m_slot2(*this, ADAM_CENTER_EXPANSION_SLOT_TAG), 40 m_slot3(*this, ADAM_RIGHT_EXPANSION_SLOT_TAG), 41 m_cart(*this, COLECOVISION_CARTRIDGE_SLOT_TAG), 42 m_joy1(*this, CONTROL1_TAG), 43 m_joy2(*this, CONTROL2_TAG), 44 m_boot_rom(*this, "boot"), 45 m_os7_rom(*this, "os7"), 46 m_mioc(0), 47 m_game(0), 48 m_an(0), 49 m_dma(1), 50 m_bwr(1), 51 m_spindis(1) 52 { } 53 54 required_device<cpu_device> m_maincpu; 55 required_device<m6801_cpu_device> m_netcpu; 56 required_device<tms9928a_device> m_vdc; 57 required_device<sn76489a_device> m_psg; 58 required_device<ram_device> m_ram; 59 required_device<adamnet_device> m_adamnet; 60 required_device<adam_expansion_slot_device> m_slot1; 61 required_device<adam_expansion_slot_device> m_slot2; 62 required_device<adam_expansion_slot_device> m_slot3; 63 required_device<colecovision_cartridge_slot_device> m_cart; 64 required_device<colecovision_control_port_device> m_joy1; 65 required_device<colecovision_control_port_device> m_joy2; 66 required_memory_region m_boot_rom; 67 required_memory_region m_os7_rom; 68 69 virtual void machine_start() override; 70 virtual void machine_reset() override; 71 72 uint8_t mreq_r(offs_t offset); 73 void mreq_w(offs_t offset, uint8_t data); 74 uint8_t iorq_r(offs_t offset); 75 void iorq_w(offs_t offset, uint8_t data); 76 77 uint8_t adamnet_r(); 78 void adamnet_w(uint8_t data); 79 uint8_t mioc_r(); 80 void mioc_w(uint8_t data); 81 82 void m6801_p1_w(uint8_t data); 83 uint8_t m6801_p2_r(); 84 void m6801_p2_w(uint8_t data); 85 uint8_t m6801_p3_r(); 86 void m6801_p3_w(uint8_t data); 87 void m6801_p4_w(uint8_t data); 88 89 DECLARE_WRITE_LINE_MEMBER( vdc_int_w ); 90 91 DECLARE_WRITE_LINE_MEMBER( os3_w ); 92 93 DECLARE_WRITE_LINE_MEMBER( joy1_irq_w ); 94 DECLARE_WRITE_LINE_MEMBER( joy2_irq_w ); 95 96 // memory state 97 uint8_t m_mioc; 98 int m_game; 99 100 // ADAMnet state 101 uint8_t m_an; 102 103 // DMA state 104 uint16_t m_ba; 105 int m_dma; 106 int m_bwr; 107 uint8_t m_data_in; 108 uint8_t m_data_out; 109 110 // paddle state 111 int m_spindis; 112 113 // video state 114 int m_vdp_nmi; 115 void adam(machine_config &config); 116 void adam_io(address_map &map); 117 void adam_mem(address_map &map); 118 void m6801_mem(address_map &map); 119 }; 120 121 #endif 122