1 // license:BSD-3-Clause
2 // copyright-holders:R. Belmont,Ryan Holtz
3 
4 #ifndef MAME_INCLUDES_GBA_H
5 #define MAME_INCLUDES_GBA_H
6 
7 #include "sound/gb.h"
8 #include "machine/intelfsh.h"
9 #include "bus/gba/gba_slot.h"
10 #include "sound/dac.h"
11 #include "video/gba_lcd.h"
12 
13 
14 class gba_state : public driver_device, protected gba_registers<(0x400 - 0x060) / 4, 0x060>
15 {
16 public:
gba_state(const machine_config & mconfig,device_type type,const char * tag)17 	gba_state(const machine_config &mconfig, device_type type, const char *tag)
18 		: driver_device(mconfig, type, tag),
19 		m_maincpu(*this, "maincpu"),
20 		m_ldaca(*this, "ldaca"),
21 		m_rdaca(*this, "rdaca"),
22 		m_ldacb(*this, "ldacb"),
23 		m_rdacb(*this, "rdacb"),
24 		m_gbsound(*this, "custom"),
25 		m_cart(*this, "cartslot"),
26 		m_region_maincpu(*this, "maincpu"),
27 		m_io_inputs(*this, "INPUTS"),
28 		m_bios_hack(*this, "SKIP_CHECK")
29 	{ }
30 
31 	void gbadv(machine_config &config);
32 
33 	void init_gbadv();
34 
35 private:
36 	required_device<cpu_device> m_maincpu;
37 	required_device<dac_byte_interface> m_ldaca;
38 	required_device<dac_byte_interface> m_rdaca;
39 	required_device<dac_byte_interface> m_ldacb;
40 	required_device<dac_byte_interface> m_rdacb;
41 	required_device<gameboy_sound_device> m_gbsound;
42 	required_device<gba_cart_slot_device> m_cart;
43 
44 	void request_irq(uint32_t int_type);
45 
46 	void dma_exec(int ch);
47 	void audio_tick(int ref);
48 
49 	// DMA
50 	emu_timer *m_dma_timer[4];
51 	uint32_t m_dma_src[4];
52 	uint32_t m_dma_dst[4];
53 	uint16_t m_dma_cnt[4];
54 
55 	// Timers
56 	uint32_t m_timer_regs[4];
57 	uint16_t m_timer_reload[4];
58 	int m_timer_recalc[4];
59 
60 	emu_timer *m_tmr_timer[4], *m_irq_timer;
61 
62 	double m_timer_hz[4];
63 
64 	int m_fifo_a_ptr;
65 	int m_fifo_b_ptr;
66 	int m_fifo_a_in;
67 	int m_fifo_b_in;
68 	uint8_t m_fifo_a[20];
69 	uint8_t m_fifo_b[20];
70 
71 
72 	uint32_t gba_io_r(offs_t offset, uint32_t mem_mask = ~0);
73 	void gba_io_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
74 	uint32_t gba_bios_r(offs_t offset, uint32_t mem_mask = ~0);
75 	uint32_t gba_10000000_r(offs_t offset, uint32_t mem_mask = ~0);
76 	DECLARE_WRITE_LINE_MEMBER(int_hblank_callback);
77 	DECLARE_WRITE_LINE_MEMBER(int_vblank_callback);
78 	DECLARE_WRITE_LINE_MEMBER(int_vcount_callback);
79 	DECLARE_WRITE_LINE_MEMBER(dma_hblank_callback);
80 	DECLARE_WRITE_LINE_MEMBER(dma_vblank_callback);
81 	virtual void machine_start() override;
82 	virtual void machine_reset() override;
83 	TIMER_CALLBACK_MEMBER(dma_complete);
84 	TIMER_CALLBACK_MEMBER(timer_expire);
85 	TIMER_CALLBACK_MEMBER(handle_irq);
86 
87 	void gba_map(address_map &map);
88 
89 	required_region_ptr<uint32_t> m_region_maincpu;
90 	required_ioport m_io_inputs;
91 	required_ioport m_bios_hack;
92 };
93 
94 #endif
95