1 // license:BSD-3-Clause
2 // copyright-holders:Dan Boris
3 
4 #ifndef MAME_INCLUDES_ADVISION_H
5 #define MAME_INCLUDES_ADVISION_H
6 
7 #pragma once
8 
9 #include "bus/generic/slot.h"
10 #include "bus/generic/carts.h"
11 #include "cpu/cop400/cop400.h"
12 #include "cpu/mcs48/mcs48.h"
13 #include "sound/dac.h"
14 #include "emupal.h"
15 
16 #define SCREEN_TAG  "screen"
17 #define I8048_TAG   "i8048"
18 #define COP411_TAG  "cop411"
19 
20 class advision_state : public driver_device
21 {
22 public:
advision_state(const machine_config & mconfig,device_type type,const char * tag)23 	advision_state(const machine_config &mconfig, device_type type, const char *tag)
24 		: driver_device(mconfig, type, tag)
25 		, m_maincpu(*this, I8048_TAG)
26 		, m_soundcpu(*this, COP411_TAG)
27 		, m_dac(*this, "dac")
28 		, m_cart(*this, "cartslot")
29 		, m_bank1(*this, "bank1")
30 		, m_joy(*this, "joystick")
31 		, m_palette(*this, "palette")
32 	{ }
33 
34 	required_device<i8048_device> m_maincpu;
35 	required_device<cop411_cpu_device> m_soundcpu;
36 	required_device<dac_byte_interface> m_dac;
37 	required_device<generic_slot_device> m_cart;
38 	required_memory_bank m_bank1;
39 	required_ioport m_joy;
40 	required_device<palette_device> m_palette;
41 
42 	virtual void machine_start() override;
43 	virtual void machine_reset() override;
44 
45 	virtual void video_start() override;
46 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
47 
48 	void update_dac();
49 	void vh_write(int data);
50 	void vh_update(int x);
51 
52 	uint8_t rom_r(offs_t offset);
53 	uint8_t ext_ram_r(offs_t offset);
54 	void ext_ram_w(offs_t offset, uint8_t data);
55 	uint8_t controller_r();
56 	void bankswitch_w(uint8_t data);
57 	void av_control_w(uint8_t data);
58 	DECLARE_READ_LINE_MEMBER( vsync_r );
59 
60 	TIMER_CALLBACK_MEMBER( sound_cmd_sync );
61 	uint8_t sound_cmd_r();
62 	void sound_g_w(uint8_t data);
63 	void sound_d_w(uint8_t data);
64 
65 	memory_region *m_cart_rom;
66 
67 	int m_ea_bank;
68 
69 	/* external RAM state */
70 	std::vector<uint8_t> m_ext_ram;
71 	int m_rambank;
72 
73 	/* video state */
74 	int m_frame_count;
75 	int m_frame_start;
76 	int m_video_enable;
77 	int m_video_bank;
78 	int m_video_hpos;
79 	uint8_t m_led_latch[8];
80 	std::unique_ptr<uint8_t []> m_display;
81 
82 	/* sound state */
83 	int m_sound_cmd;
84 	int m_sound_d;
85 	int m_sound_g;
86 	void advision_palette(palette_device &palette) const;
87 	void advision(machine_config &config);
88 	void io_map(address_map &map);
89 	void program_map(address_map &map);
90 };
91 
92 #endif
93