1 // license:GPL-2.0+ 2 // copyright-holders:Peter Trauner 3 /***************************************************************************** 4 * 5 * includes/svision.h 6 * 7 ****************************************************************************/ 8 9 #ifndef MAME_INCLUDES_SVISION_H 10 #define MAME_INCLUDES_SVISION_H 11 12 #pragma once 13 14 #include "cpu/m6502/m65c02.h" 15 #include "machine/timer.h" 16 #include "audio/svis_snd.h" 17 #include "bus/generic/slot.h" 18 #include "bus/generic/carts.h" 19 #include "emupal.h" 20 21 struct tvlink_t 22 { 23 uint32_t palette[4/*0x40?*/]; /* rgb8 */ 24 int palette_on; 25 }; 26 27 class svision_state : public driver_device 28 { 29 public: svision_state(const machine_config & mconfig,device_type type,const char * tag)30 svision_state(const machine_config &mconfig, device_type type, const char *tag) 31 : driver_device(mconfig, type, tag) 32 , m_maincpu(*this, "maincpu") 33 , m_sound(*this, "custom") 34 , m_cart(*this, "cartslot") 35 , m_reg(*this, "reg") 36 , m_videoram(*this, "videoram") 37 , m_screen(*this, "screen") 38 , m_joy(*this, "JOY") 39 , m_joy2(*this, "JOY2") 40 , m_palette(*this, "palette") 41 , m_bank1(*this, "bank1") 42 , m_bank2(*this, "bank2") 43 { } 44 45 void svisionp(machine_config &config); 46 void svisions(machine_config &config); 47 void tvlinkp(machine_config &config); 48 void svision(machine_config &config); 49 void svisionn(machine_config &config); 50 void svision_base(machine_config &config); 51 52 void init_svisions(); 53 void init_svision(); 54 55 protected: 56 virtual void machine_start() override; 57 virtual void machine_reset() override; 58 59 private: 60 struct svision_t 61 { 62 emu_timer *timer1; 63 int timer_shot; 64 }; 65 66 struct svision_pet_t 67 { 68 int state; 69 int on, clock, data; 70 uint8_t input; 71 emu_timer *timer; 72 }; 73 74 DECLARE_WRITE_LINE_MEMBER(sound_irq_w); 75 uint8_t svision_r(offs_t offset); 76 void svision_w(offs_t offset, uint8_t data); 77 uint8_t tvlink_r(offs_t offset); 78 void tvlink_w(offs_t offset, uint8_t data); 79 80 uint32_t screen_update_svision(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 81 uint32_t screen_update_tvlink(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 82 DECLARE_WRITE_LINE_MEMBER(frame_int_w); 83 DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load); 84 85 void svision_palette(palette_device &palette) const; 86 void svisionp_palette(palette_device &palette) const; 87 void svisionn_palette(palette_device &palette) const; 88 DECLARE_MACHINE_RESET(tvlink); 89 90 enum 91 { 92 XSIZE = 0x00, 93 XPOS = 0x02, 94 YPOS = 0x03, 95 BANK = 0x26, 96 }; 97 98 void check_irq(); 99 100 TIMER_CALLBACK_MEMBER(svision_pet_timer); 101 TIMER_CALLBACK_MEMBER(svision_timer); 102 TIMER_DEVICE_CALLBACK_MEMBER(svision_pet_timer_dev); 103 104 void svision_mem(address_map &map); 105 void tvlink_mem(address_map &map); 106 107 required_device<cpu_device> m_maincpu; 108 required_device<svision_sound_device> m_sound; 109 required_device<generic_slot_device> m_cart; 110 required_shared_ptr<uint8_t> m_reg; 111 required_shared_ptr<uint8_t> m_videoram; 112 required_device<screen_device> m_screen; 113 required_ioport m_joy; 114 optional_ioport m_joy2; 115 required_device<palette_device> m_palette; 116 117 required_memory_bank m_bank1; 118 required_memory_bank m_bank2; 119 120 memory_region *m_cart_rom; 121 122 svision_t m_svision; 123 svision_pet_t m_pet; 124 tvlink_t m_tvlink; 125 bool m_dma_finished; 126 }; 127 128 #endif // MAME_INCLUDES_SVISION_H 129