1 // license:BSD-3-Clause
2 // copyright-holders:Nathan Woods,Frank Palazzolo
3 /*****************************************************************************
4  *
5  * includes/intv.h
6  *
7  ****************************************************************************/
8 #ifndef MAME_INCLUDES_INTV_H
9 #define MAME_INCLUDES_INTV_H
10 
11 #pragma once
12 
13 #include "sound/ay8910.h"
14 #include "video/stic.h"
15 #include "video/tms9927.h"
16 
17 #include "bus/intv/ecs.h"
18 #include "bus/intv/slot.h"
19 #include "bus/intv/voice.h"
20 //#include "bus/intv/keycomp.h"
21 
22 #include "bus/intv_ctrl/ctrl.h"
23 #include "bus/intv_ctrl/handctrl.h"
24 
25 #include "bus/generic/slot.h"
26 #include "bus/generic/carts.h"
27 
28 #include "emupal.h"
29 
30 
31 class intv_state : public driver_device
32 {
33 public:
intv_state(const machine_config & mconfig,device_type type,const char * tag)34 	intv_state(const machine_config &mconfig, device_type type, const char *tag) :
35 		driver_device(mconfig, type, tag),
36 		m_maincpu(*this, "maincpu"),
37 		m_sound(*this, "ay8914"),
38 		m_stic(*this, "stic"),
39 		m_crtc(*this, "crtc"),
40 		m_cart(*this, "cartslot"),
41 		m_intvkbd_dualport_ram(*this, "dualport_ram"),
42 		m_videoram(*this, "videoram"),
43 		m_keyboard(*this, "keyboard"),
44 		m_iocart1(*this, "ioslot1"),
45 		m_iocart2(*this, "ioslot2"),
46 		m_region_maincpu(*this, "maincpu"),
47 		m_region_keyboard(*this, "keyboard"),
48 		m_io_test(*this, "TEST"),
49 		m_gfxdecode(*this, "gfxdecode"),
50 		m_palette(*this, "palette")
51 	{ }
52 
53 	void intvkbd(machine_config &config);
54 	void intv2(machine_config &config);
55 	void intvoice(machine_config &config);
56 	void intvecs(machine_config &config);
57 	void intv(machine_config &config);
58 
59 	void init_intvecs();
60 	void init_intvkbd();
61 	void init_intv();
62 
63 private:
64 	enum
65 	{
66 		TIMER_INTV_INTERRUPT2_COMPLETE,
67 		TIMER_INTV_INTERRUPT_COMPLETE,
68 		TIMER_INTV_BTB_FILL
69 	};
70 
71 	required_device<cpu_device> m_maincpu;
72 	required_device<ay8914_device> m_sound;
73 	required_device<stic_device> m_stic;
74 	optional_device<tms9927_device> m_crtc;
75 	optional_device<intv_cart_slot_device> m_cart;
76 	optional_shared_ptr<uint16_t> m_intvkbd_dualport_ram;
77 	optional_shared_ptr<uint8_t> m_videoram;
78 
79 	uint16_t intv_stic_r(offs_t offset);
80 	void intv_stic_w(offs_t offset, uint16_t data);
81 	uint16_t intv_gram_r(offs_t offset);
82 	void intv_gram_w(offs_t offset, uint16_t data);
83 	uint16_t intv_ram8_r(offs_t offset);
84 	void intv_ram8_w(offs_t offset, uint16_t data);
85 	uint16_t intv_ram16_r(offs_t offset);
86 	void intv_ram16_w(offs_t offset, uint16_t data);
87 	uint8_t intvkb_iocart_r(offs_t offset);
88 
89 	uint8_t m_bus_copy_mode;
90 	uint8_t m_backtab_row;
91 	uint16_t m_ram16[0x160];
92 	int m_sr1_int_pending;
93 	uint8_t m_ram8[256];
94 	bool m_maincpu_reset;
95 
96 	// Keyboard Component
97 	void intvkbd_dualport16_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
98 	uint8_t intvkbd_dualport8_lsb_r(offs_t offset);
99 	void intvkbd_dualport8_lsb_w(offs_t offset, uint8_t data);
100 	uint8_t intvkbd_dualport8_msb_r(offs_t offset);
101 	void intvkbd_dualport8_msb_w(offs_t offset, uint8_t data);
102 	uint8_t intvkbd_io_r(offs_t offset);
103 	void intvkbd_io_w(offs_t offset, uint8_t data);
104 	uint8_t intvkbd_periph_r(offs_t offset);
105 	void intvkbd_periph_w(offs_t offset, uint8_t data);
106 
107 	uint16_t iab_r();
108 
109 	bool m_printer_not_busy;        // printer state
110 	bool m_printer_no_paper;        // printer state
111 	bool m_printer_not_busy_enable; // printer interface state
112 
113 	int m_intvkbd_text_blanked;
114 	int m_intvkbd_keyboard_col;
115 	int m_tape_int_pending;
116 	int m_tape_interrupts_enabled;
117 	int m_tape_motor_mode;
118 
119 	virtual void machine_start() override;
120 	virtual void machine_reset() override;
121 	virtual void video_start() override;
122 	void intv_palette(palette_device &palette) const;
123 	uint32_t screen_update_intv(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
124 	uint32_t screen_update_intvkbd(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
125 	INTERRUPT_GEN_MEMBER(intv_interrupt2);
126 	INTERRUPT_GEN_MEMBER(intv_interrupt);
127 	TIMER_CALLBACK_MEMBER(intv_interrupt2_complete);
128 	TIMER_CALLBACK_MEMBER(intv_interrupt_complete);
129 	TIMER_CALLBACK_MEMBER(intv_btb_fill);
130 
131 	void intv2_mem(address_map &map);
132 	void intv_mem(address_map &map);
133 	void intvecs_mem(address_map &map);
134 	void intvkbd2_mem(address_map &map);
135 	void intvkbd_mem(address_map &map);
136 	void intvoice_mem(address_map &map);
137 
138 	int m_is_keybd;
139 
140 	optional_device<cpu_device> m_keyboard;
141 	optional_device<generic_slot_device> m_iocart1;
142 	optional_device<generic_slot_device> m_iocart2;
143 	required_memory_region m_region_maincpu;
144 	optional_memory_region m_region_keyboard;
145 	optional_ioport m_io_test;
146 
147 	optional_device<gfxdecode_device> m_gfxdecode;
148 	required_device<palette_device> m_palette;
149 
150 	ioport_port *m_intv_keyboard[10];
151 
152 	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
153 };
154 
155 #endif // MAME_INCLUDES_INTV_H
156