1 // license:BSD-3-Clause 2 // copyright-holders:Aaron Giles,Nicola Salmoria 3 /************************************************************************* 4 5 Art & Magic hardware 6 7 **************************************************************************/ 8 #include "cpu/tms34010/tms34010.h" 9 #include "sound/okim6295.h" 10 #include "video/tlc34076.h" 11 12 class artmagic_state : public driver_device 13 { 14 public: 15 enum 16 { 17 TIMER_IRQ_OFF 18 }; 19 artmagic_state(const machine_config & mconfig,device_type type,const char * tag)20 artmagic_state(const machine_config &mconfig, device_type type, const char *tag) 21 : driver_device(mconfig, type, tag) 22 , m_maincpu(*this, "maincpu") 23 , m_oki(*this, "oki") 24 , m_tms(*this, "tms") 25 , m_tlc34076(*this, "tlc34076") 26 , m_control(*this, "control") 27 , m_vram(*this, "vram%u", 0U) 28 , m_blitter_base(*this, "gfx") 29 { } 30 31 required_device<cpu_device> m_maincpu; 32 required_device<okim6295_device> m_oki; 33 required_device<tms34010_device> m_tms; 34 required_device<tlc34076_device> m_tlc34076; 35 36 required_shared_ptr<uint16_t> m_control; 37 required_shared_ptr_array<uint16_t, 2> m_vram; 38 required_region_ptr<uint16_t> m_blitter_base; 39 40 uint8_t m_tms_irq; 41 uint8_t m_hack_irq; 42 uint8_t m_prot_input[16]; 43 uint8_t m_prot_input_index; 44 uint8_t m_prot_output[16]; 45 uint8_t m_prot_output_index; 46 uint8_t m_prot_output_bit; 47 uint8_t m_prot_bit_index; 48 uint16_t m_prot_save; 49 typedef void (artmagic_state::*prot_func)(); 50 prot_func m_protection_handler; 51 void ultennis_protection(); 52 void cheesech_protection(); 53 void stonebal_protection(); 54 55 int m_xor[16]; 56 int m_is_stoneball; 57 uint16_t m_blitter_data[8]; 58 uint8_t m_blitter_page; 59 attotime m_blitter_busy_until; 60 emu_timer * m_irq_off_timer; 61 void control_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 62 uint16_t ultennis_hack_r(); 63 void protection_bit_w(offs_t offset, uint16_t data); 64 uint16_t blitter_r(); 65 void blitter_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 66 DECLARE_WRITE_LINE_MEMBER(m68k_gen_int); 67 TMS340X0_TO_SHIFTREG_CB_MEMBER(to_shiftreg); 68 TMS340X0_FROM_SHIFTREG_CB_MEMBER(from_shiftreg); 69 TMS340X0_SCANLINE_RGB32_CB_MEMBER(scanline); 70 DECLARE_READ_LINE_MEMBER(prot_r); 71 void init_shtstar(); 72 void init_cheesech(); 73 void init_ultennis(); 74 void init_stonebal(); 75 virtual void machine_start() override; 76 virtual void machine_reset() override; 77 virtual void video_start() override; 78 void decrypt_cheesech(); 79 void decrypt_ultennis(); 80 void execute_blit(); 81 void update_irq_state(); 82 inline uint16_t *address_to_vram(offs_t *address); 83 84 void cheesech(machine_config &config); 85 void artmagic(machine_config &config); 86 void shtstar(machine_config &config); 87 void stonebal(machine_config &config); 88 void main_map(address_map &map); 89 void shtstar_guncpu_io_map(address_map &map); 90 void shtstar_guncpu_map(address_map &map); 91 void shtstar_map(address_map &map); 92 void shtstar_subcpu_map(address_map &map); 93 void stonebal_map(address_map &map); 94 void stonebal_tms_map(address_map &map); 95 void tms_map(address_map &map); 96 protected: 97 virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; 98 }; 99