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