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