1 // license:GPL-2.0+ 2 // copyright-holders:Peter Trauner, Robbbert 3 // thanks-to:Manfred Schneider 4 /***************************************************************************** 5 * 6 * includes/vc4000.h 7 * 8 ****************************************************************************/ 9 #ifndef MAME_INCLUDES_VC4000_H 10 #define MAME_INCLUDES_VC4000_H 11 12 #pragma once 13 14 #include "audio/vc4000.h" 15 #include "cpu/s2650/s2650.h" 16 #include "imagedev/snapquik.h" 17 #include "imagedev/cassette.h" 18 19 #include "bus/vc4000/slot.h" 20 #include "bus/vc4000/rom.h" 21 22 #include "emupal.h" 23 #include "screen.h" 24 25 // define this to use digital inputs instead of the slow 26 // autocentering analog mame joys 27 #define ANALOG_HACK 28 29 30 class vc4000_state : public driver_device 31 { 32 public: vc4000_state(const machine_config & mconfig,device_type type,const char * tag)33 vc4000_state(const machine_config &mconfig, device_type type, const char *tag) : 34 driver_device(mconfig, type, tag), 35 m_maincpu(*this, "maincpu"), 36 m_screen(*this, "screen"), 37 m_cassette(*this, "cassette"), 38 m_cart(*this, "cartslot"), 39 m_custom(*this, "custom"), 40 m_keypad1_1(*this, "KEYPAD1_1"), 41 m_keypad1_2(*this, "KEYPAD1_2"), 42 m_keypad1_3(*this, "KEYPAD1_3"), 43 m_panel(*this, "PANEL"), 44 m_keypad2_1(*this, "KEYPAD2_1"), 45 m_keypad2_2(*this, "KEYPAD2_2"), 46 m_keypad2_3(*this, "KEYPAD2_3"), 47 #ifndef ANALOG_HACK 48 m_io_joy1_x(*this, "JOY1_X"), 49 m_io_joy1_y(*this, "JOY1_Y"), 50 m_io_joy2_x(*this, "JOY2_X"), 51 m_io_joy2_y(*this, "JOY2_Y") 52 #else 53 m_joys(*this, "JOYS"), 54 m_config(*this, "CONFIG") 55 #endif 56 { } 57 58 void cx3000tc(machine_config &config); 59 void mpu1000(machine_config &config); 60 void vc4000(machine_config &config); 61 void database(machine_config &config); 62 void h21(machine_config &config); 63 void rwtrntcs(machine_config &config); 64 void elektor(machine_config &config); 65 66 private: 67 struct SPRITE_HELPER 68 { 69 uint8_t bitmap[10],x1,x2,y1,y2, res1, res2; 70 }; 71 72 struct SPRITE 73 { 74 const SPRITE_HELPER *data; 75 int mask; 76 int state; 77 int delay; 78 int size; 79 int y; 80 uint8_t scolor; 81 int finished; 82 int finished_now; 83 }; 84 85 struct vc4000_video_t 86 { 87 SPRITE sprites[4]; 88 int line; 89 uint8_t sprite_collision; 90 uint8_t background_collision; 91 union 92 { 93 uint8_t data[0x100]; 94 struct 95 { 96 SPRITE_HELPER sprites[3]; 97 uint8_t res[0x10]; 98 SPRITE_HELPER sprite4; 99 uint8_t res2[0x30]; 100 uint8_t grid[20][2]; 101 uint8_t grid_control[5]; 102 uint8_t res3[0x13]; 103 uint8_t sprite_sizes; 104 uint8_t sprite_colors[2]; 105 uint8_t score_control; 106 uint8_t res4[2]; 107 uint8_t background; 108 uint8_t sound; 109 uint8_t bcd[2]; 110 uint8_t background_collision; 111 uint8_t sprite_collision; 112 } d; 113 } reg; 114 } ; 115 116 void vc4000_sound_ctl(offs_t offset, uint8_t data); 117 uint8_t vc4000_key_r(offs_t offset); 118 uint8_t vc4000_video_r(offs_t offset); 119 void vc4000_video_w(offs_t offset, uint8_t data); 120 DECLARE_READ_LINE_MEMBER(vc4000_vsync_r); 121 uint8_t elektor_cass_r(); 122 void elektor_cass_w(uint8_t data); 123 vc4000_video_t m_video; 124 uint8_t m_sprite_collision[0x20]; 125 uint8_t m_background_collision[0x20]; 126 uint8_t m_joy1_x; 127 uint8_t m_joy1_y; 128 uint8_t m_joy2_x; 129 uint8_t m_joy2_y; 130 uint8_t m_objects[512]; 131 uint8_t m_irq_pause; 132 std::unique_ptr<bitmap_ind16> m_bitmap; 133 virtual void machine_start() override; 134 virtual void video_start() override; 135 void vc4000_palette(palette_device &palette) const; 136 uint32_t screen_update_vc4000(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 137 INTERRUPT_GEN_MEMBER(vc4000_video_line); 138 DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb); 139 140 void elektor_mem(address_map &map); 141 void vc4000_mem(address_map &map); 142 143 required_device<s2650_device> m_maincpu; 144 required_device<screen_device> m_screen; 145 optional_device<cassette_image_device> m_cassette; 146 required_device<vc4000_cart_slot_device> m_cart; 147 required_device<vc4000_sound_device> m_custom; 148 required_ioport m_keypad1_1; 149 required_ioport m_keypad1_2; 150 required_ioport m_keypad1_3; 151 required_ioport m_panel; 152 required_ioport m_keypad2_1; 153 required_ioport m_keypad2_2; 154 required_ioport m_keypad2_3; 155 #ifndef ANALOG_HACK 156 required_ioport m_io_joy1_x; 157 required_ioport m_io_joy1_y; 158 required_ioport m_io_joy2_x; 159 required_ioport m_io_joy2_y; 160 #else 161 required_ioport m_joys; 162 required_ioport m_config; 163 #endif 164 inline uint8_t vc4000_joystick_return_to_centre(uint8_t joy); 165 void vc4000_draw_digit(bitmap_ind16 &bitmap, int x, int y, int d, int line); 166 inline void vc4000_collision_plot(uint8_t *collision, uint8_t data, uint8_t color, int scale); 167 void vc4000_sprite_update(bitmap_ind16 &bitmap, uint8_t *collision, SPRITE *This); 168 inline void vc4000_draw_grid(uint8_t *collision); 169 }; 170 171 #endif // MAME_INCLUDES_VC4000_H 172