1 // license:BSD-3-Clause
2 // copyright-holders:Curt Coder
3 #pragma once
4 
5 #ifndef MAME_INCLUDES_VIDBRAIN_H
6 #define MAME_INCLUDES_VIDBRAIN_H
7 
8 #include "bus/vidbrain/exp.h"
9 #include "cpu/f8/f8.h"
10 #include "machine/f3853.h"
11 #include "machine/ram.h"
12 #include "sound/dac.h"
13 #include "video/uv201.h"
14 
15 #define F3850_TAG           "cd34"
16 #define F3853_TAG           "cd5"
17 #define F3870_TAG           "f3870"
18 #define UV201_TAG           "uv201"
19 #define SCREEN_TAG          "screen"
20 
21 class vidbrain_state : public driver_device
22 {
23 public:
vidbrain_state(const machine_config & mconfig,device_type type,const char * tag)24 	vidbrain_state(const machine_config &mconfig, device_type type, const char *tag) :
25 		driver_device(mconfig, type, tag),
26 		m_maincpu(*this, F3850_TAG),
27 		m_smi(*this, F3853_TAG),
28 		m_uv(*this, UV201_TAG),
29 		m_dac(*this, "dac"),
30 		m_exp(*this, "exp"),
31 		m_io(*this, "IO%02u", 0),
32 		m_uv201_31(*this, "UV201-31"),
33 		m_joy_r(*this, "JOY-R"),
34 		m_joy1_x(*this, "JOY1-X"),
35 		m_joy1_y(*this, "JOY1-Y"),
36 		m_joy2_x(*this, "JOY2-X"),
37 		m_joy2_y(*this, "JOY2-Y"),
38 		m_joy3_x(*this, "JOY3-X"),
39 		m_joy3_y(*this, "JOY3-Y"),
40 		m_joy4_x(*this, "JOY4-X"),
41 		m_joy4_y(*this, "JOY4-Y")
42 	{ }
43 
44 	void vidbrain(machine_config &config);
45 	void vidbrain_video(machine_config &config);
46 
47 	DECLARE_INPUT_CHANGED_MEMBER( trigger_reset );
48 
49 private:
50 	required_device<cpu_device> m_maincpu;
51 	required_device<f3853_device> m_smi;
52 	required_device<uv201_device> m_uv;
53 	required_device<dac_byte_interface> m_dac;
54 	required_device<videobrain_expansion_slot_device> m_exp;
55 	required_ioport_array<8> m_io;
56 	required_ioport m_uv201_31;
57 	required_ioport m_joy_r;
58 	required_ioport m_joy1_x;
59 	required_ioport m_joy1_y;
60 	required_ioport m_joy2_x;
61 	required_ioport m_joy2_y;
62 	required_ioport m_joy3_x;
63 	required_ioport m_joy3_y;
64 	required_ioport m_joy4_x;
65 	required_ioport m_joy4_y;
66 
67 	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
68 	virtual void machine_start() override;
69 	virtual void machine_reset() override;
70 
71 	enum
72 	{
73 		TIMER_JOYSTICK
74 	};
75 
76 	void keyboard_w(uint8_t data);
77 	uint8_t keyboard_r();
78 	void sound_w(uint8_t data);
79 
80 	DECLARE_WRITE_LINE_MEMBER( ext_int_w );
81 	DECLARE_WRITE_LINE_MEMBER( hblank_w );
82 	uint8_t memory_read_byte(offs_t offset);
83 
84 	// keyboard state
85 	uint8_t m_keylatch;
86 	int m_joy_enable;
87 
88 	// sound state
89 	int m_sound_clk;
90 
91 	// timers
92 	emu_timer *m_timer_ne555;
93 	void vidbrain_io(address_map &map);
94 	void vidbrain_mem(address_map &map);
95 };
96 
97 #endif
98