1 // license:GPL-2.0+
2 // copyright-holders:Peter Trauner, Dan Boris, Dirk Best, Robbbert
3 /*****************************************************************************
4  *
5  * includes/aim65.h
6  *
7  * Rockwell AIM-65
8  *
9  ****************************************************************************/
10 #ifndef MAME_INCLUDES_AIM65_H
11 #define MAME_INCLUDES_AIM65_H
12 
13 #pragma once
14 
15 #include "bus/generic/carts.h"
16 #include "bus/generic/slot.h"
17 #include "cpu/m6502/m6502.h"
18 #include "imagedev/cassette.h"
19 #include "bus/rs232/rs232.h"
20 #include "machine/6522via.h"
21 #include "machine/6821pia.h"
22 #include "machine/mos6530n.h"
23 #include "machine/ram.h"
24 #include "video/dl1416.h"
25 #include "emupal.h"
26 #include "screen.h"
27 
28 
29 class aim65_state : public driver_device
30 {
31 public:
aim65_state(const machine_config & mconfig,device_type type,const char * tag)32 	aim65_state(const machine_config &mconfig, device_type type, const char *tag)
33 		: driver_device(mconfig, type, tag)
34 		, m_palette(*this, "palette")
35 		, m_riot_port_a(0)
36 		, m_pb_save(0)
37 		, m_kb_en(true)
38 		, m_ca2(true)
39 		, m_cb2(true)
40 		, m_printer_x(0)
41 		, m_printer_y(0)
42 		, m_printer_flag(0)
43 		, m_printer_level(0)
44 		, m_maincpu(*this, "maincpu")
45 		, m_cassette1(*this, "cassette")
46 		, m_cassette2(*this, "cassette2")
47 		, m_z24(*this, "z24")
48 		, m_z25(*this, "z25")
49 		, m_z26(*this, "z26")
50 		, m_z12(*this, "z12")
51 		, m_z13(*this, "z13")
52 		, m_z14(*this, "z14")
53 		, m_z15(*this, "z15")
54 		, m_ram(*this, RAM_TAG)
55 		, m_ds(*this, "ds%u", 1)
56 		, m_digits(*this, "digit%u", 0U)
57 		, m_rs232(*this, "rs232")
58 		, m_via0(*this, "via0")
59 		, m_via1(*this, "via1")
60 		, m_pia(*this, "pia")
61 		, m_riot(*this, "riot")
62 		, m_io_keyboard(*this, "KEY.%u", 0)
63 	{
64 	}
65 
66 	void aim65(machine_config &config);
67 
68 	DECLARE_INPUT_CHANGED_MEMBER(reset_button);
69 
70 private:
71 	virtual void machine_start() override;
72 
73 	void aim65_palette(palette_device &palette) const;
74 	void u1_pa_w(u8 data);
75 	void u1_pb_w(u8 data);
76 	u8 z33_pb_r();
77 	void z32_pa_w(u8 data);
78 	void z32_pb_w(u8 data);
79 	void z32_cb2_w(bool state);
80 	u8 z32_pb_r();
81 
82 	template <unsigned D> void update_ds(offs_t offset, u16 data);
83 
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(z24_load)84 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER(z24_load) { return load_cart(image, m_z24, "z24"); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(z25_load)85 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER(z25_load) { return load_cart(image, m_z25, "z25"); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(z26_load)86 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER(z26_load) { return load_cart(image, m_z26, "z26"); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(z12_load)87 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER(z12_load) { return load_cart(image, m_z12, "z12"); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(z13_load)88 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER(z13_load) { return load_cart(image, m_z13, "z13"); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(z14_load)89 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER(z14_load) { return load_cart(image, m_z14, "z14"); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(z15_load)90 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER(z15_load) { return load_cart(image, m_z15, "z15"); }
91 	emu_timer *m_print_timer;
92 	TIMER_CALLBACK_MEMBER(printer_timer);
93 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
94 
95 	image_init_result load_cart(device_image_interface &image, generic_slot_device *slot, const char *slot_tag);
96 
97 	void mem_map(address_map &map);
98 
99 	optional_device<palette_device> m_palette;
100 	uint8_t m_riot_port_a;
101 	uint8_t m_pb_save;
102 	bool m_kb_en;
103 	bool m_ca2;
104 	bool m_cb2;
105 	u8 m_printer_x;
106 	u8 m_printer_y;
107 	u8 m_printer_flag;
108 	bool m_printer_level;
109 	std::unique_ptr<uint16_t[]> m_printerRAM;
110 
111 	required_device<cpu_device> m_maincpu;
112 	required_device<cassette_image_device> m_cassette1;
113 	required_device<cassette_image_device> m_cassette2;
114 	required_device<generic_slot_device> m_z24;
115 	required_device<generic_slot_device> m_z25;
116 	required_device<generic_slot_device> m_z26;
117 	required_device<generic_slot_device> m_z12;
118 	required_device<generic_slot_device> m_z13;
119 	required_device<generic_slot_device> m_z14;
120 	required_device<generic_slot_device> m_z15;
121 	required_device<ram_device> m_ram;
122 	required_device_array<dl1416_device, 5> m_ds;
123 	output_finder<20> m_digits;
124 	required_device<rs232_port_device> m_rs232;
125 	required_device<via6522_device> m_via0;
126 	required_device<via6522_device> m_via1;
127 	required_device<pia6821_device> m_pia;
128 	required_device<mos6532_new_device> m_riot;
129 	required_ioport_array<8> m_io_keyboard;
130 };
131 
132 
133 #endif // MAME_INCLUDES_AIM65_H
134