1 // license:BSD-3-Clause 2 // copyright-holders:Phil Bennett 3 /*************************************************************************** 4 5 Acclaim RAX Sound Board 6 7 ****************************************************************************/ 8 #ifndef MAME_AUDIO_RAX_H 9 #define MAME_AUDIO_RAX_H 10 11 #pragma once 12 13 #include "cpu/adsp2100/adsp2100.h" 14 #include "machine/gen_latch.h" 15 #include "machine/timer.h" 16 #include "sound/dmadac.h" 17 18 19 class acclaim_rax_device : public device_t 20 { 21 public: 22 // construction/destruction 23 acclaim_rax_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 24 25 uint16_t data_r(); 26 void data_w(uint16_t data); 27 28 void update_data_ram_bank(); 29 void adsp_irq(int which); 30 void recompute_sample_rate(int which); 31 32 TIMER_DEVICE_CALLBACK_MEMBER( dma_timer_callback ); 33 34 void adsp_data_map(address_map &map); 35 void adsp_io_map(address_map &map); 36 void adsp_program_map(address_map &map); 37 protected: 38 // device-level overrides 39 virtual void device_start() override; 40 virtual void device_reset() override; 41 virtual void device_add_mconfig(machine_config &config) override; 42 43 private: 44 required_device<adsp2181_device> m_cpu; 45 required_device_array<dmadac_sound_device, 2> m_dmadac; 46 required_device<timer_device> m_reg_timer; 47 required_device<timer_device> m_dma_timer; 48 required_shared_ptr<uint32_t> m_adsp_pram; 49 required_memory_bank m_adsp_data_bank; 50 required_region_ptr<uint8_t> m_rom; 51 52 uint32_t m_adsp_snd_pf0; 53 54 struct 55 { 56 uint16_t bdma_internal_addr; 57 uint16_t bdma_external_addr; 58 uint16_t bdma_control; 59 uint16_t bdma_word_count; 60 } m_adsp_regs; 61 62 address_space *m_program; 63 address_space *m_data; 64 65 uint16_t m_control_regs[32]; 66 67 68 /* sound output */ 69 uint16_t m_size[2]; 70 uint16_t m_incs[2]; 71 uint32_t m_ireg[2]; 72 uint16_t m_ireg_base[2]; 73 74 uint32_t m_data_bank; 75 uint32_t m_rom_bank; 76 uint32_t m_dmovlay_val; 77 78 std::unique_ptr<uint16_t[]> m_banked_ram; 79 80 required_device<generic_latch_16_device> m_data_in; 81 required_device<generic_latch_16_device> m_data_out; 82 83 void adsp_sound_tx_callback(offs_t offset, uint32_t data); 84 85 TIMER_DEVICE_CALLBACK_MEMBER(adsp_irq0); 86 TIMER_DEVICE_CALLBACK_MEMBER(sport0_irq); 87 void dmovlay_callback(uint32_t data); 88 89 uint16_t adsp_control_r(offs_t offset); 90 void adsp_control_w(offs_t offset, uint16_t data); 91 void ram_bank_w(uint16_t data); 92 void rom_bank_w(uint16_t data); 93 94 uint16_t host_r(); 95 void host_w(uint16_t data); 96 }; 97 98 // device type definition 99 DECLARE_DEVICE_TYPE(ACCLAIM_RAX, acclaim_rax_device) 100 101 #endif // MAME_AUDIO_RAX_H 102