1 // license:BSD-3-Clause
2 // copyright-holders:David Haywood, Barry Rodewald
3 /* Sega MegaTech
4 
5 About MegaTech:
6 
7 Megatech games are identical to their Genesis/SMS equivalents, however the Megatech cartridges contain
8 a BIOS rom with the game instructions.  The last part number of the bios ROM is the cart/game ID code.
9 
10 The instruction rom appears to map at 0x300000 in the cart space.
11 
12 In Megatech games your coins buy you time to play the game, how you perform in the game does not
13 matter, you can die and start a new game providing you still have time, likewise you can be playing
14 well and run out of time if you fail to insert more coins.  This is the same method Nintendo used
15 with their Playchoice 10 system.
16 
17 The BIOS screen is based around SMS hardware, with an additional Z80 and SMS VDP chip not present on
18 a standard Genesis.
19 
20 SMS games run on Megatech in the Genesis's SMS compatibility mode, where the Genesis Z80 becomes the
21 main CPU and the Genesis VDP acts in a mode mimicking the behavior of the SMS VDP. A pin on the carts
22 determines which mode the game runs in.
23 
24 Additions will only be made to this driver if proof that the dumped set are original roms with original
25 Sega part numbers is given..
26 
27 
28 Sega Mega Tech Cartridges (Readme by Guru)
29 -------------------------
30 
31 These are cart-based games for use with Sega Mega Tech hardware. There are 6 known types of carts. All carts
32 are very simple, almost exactly the same as Mega Play carts. They contain just 2 or 3 ROMs.
33 PCB 171-6215A has locations for 2 ROMs and is dated 1991. PCB 171-6215A is also used in Mega Play!
34 PCB 171-5782 has locations for 2 ROMs and is dated 1989.
35 PCB 171-5869A has locations for 3 ROMs and is dated 1989.
36 PCB 171-5834 has locations for 3 ROMs and is dated 1989.
37 PCB 171-5783 has locations for 2 ROMs and is dated 1989.
38 PCB 171-5784 has locations for 2 ROMs and is dated 1989. It also contains a custom Sega IC 315-5235
39 
40                                                                            |------------------------------- ROMs --------------------------------|
41                                                                            |                                                                     |
42 Game                       PCB #       Sticker on PCB    Sticker on cart     IC1                          IC2                      IC3
43 -------------------------------------------------------------------------------------------------------------------------------------------------
44 Altered Beast              171-5782    837-6963-01       610-0239-01         MPR-12538F     (834200A)     EPR-12368-01   (27C256)  n/a
45 Space Harrier II           171-5782    837-6963-02       610-0239-02         MPR-11934      (834200)      EPR-12368-02   (27256)   n/a
46 Super Thunder Blade                                      610-0239-03
47 Great Golf                                               610-0239-04
48 Afterburner                                              610-0239-05
49 Out Run                    171-5783    837-6963-06       610-0239-06         MPR-11078      (Mask)        EPR-12368-06   (27256)   n/a
50 Alien Syndrome             171-5783    837-6963-07       610-0239-07         MPR-11194      (232011)      EPR-12368-07   (27256)   n/a
51 Shinobi                                                  610-0239-08
52 Fantasy Zone                                             610-0239-09
53 Afterburner                171-5784    837-6963-10       610-0239-10         315-5235       (custom)      MPR-11271-T    (834000)  EPR-12368-10 (27256)
54 Great Football             171-5783    837-6963-19       610-0239-19         MPR-10576F     (831000)      EPR-12368-19   (27256)   n/a
55 World Championship Soccer  171-5782    837-6963-21       610-0239-21         MPR-12607B     (uPD23C4000)  EPR-12368-21   (27256)   n/a
56 Tetris                     171-5834    837-6963-22       610-0239-22         MPR-12356F     (831000)      MPR-12357F     (831000)  EPR-12368-22 (27256)
57 Ghouls & Ghosts            171-5869A   -                 610-0239-23         MPR-12605      (40 pins)     MPR-12606      (40 pins) EPR-12368-23 (27256)
58 Super Hang On              171-5782    837-6963-24       610-0239-24         MPR-12640      (234000)      EPR-12368-24   (27256)   n/a
59 Forgotten Worlds           171-5782    837-6963-26       610-0239-26         MPR-12672-H    (Mask)        EPR-12368-26   (27256)   n/a
60 The Revenge Of Shinobi     171-5782    837-6963-28       610-0239-28         MPR-12675 S44  (uPD23C4000)  EPR-12368-28   (27C256)  n/a
61 Arnold Palmer Tour Golf    171-5782    837-6963-31       610-0239-31         MPR-12645F     (834200A)     EPR-12368-31   (27256)   n/a
62 Super Real Basket Ball     171-5782    837-6963-32       610-0239-32         MPR-12904F     (838200A)     EPR-12368-32   (27256)   n/a
63 Tommy Lasorda Baseball     171-5782    837-6963-35       610-0239-35         MPR-12706F     (834200A)     EPR-12368-35   (27256)   n/a
64 ESWAT                      171-5782    837-6963-38       610-0239-38         MPR-13192-H    (uPD23C4000)  EPR-12368-38   (27256)   n/a
65 Moonwalker                 171-5782    837-6963-40       610-0239-40         MPR-13285A S61 (uPD23C4000)  EPR-12368-40   (27256)   n/a
66 Shadow Dancer              171-5782    837-6963-43       610-0239-43         MPR-13571-S    (uPD23C4000)  EPR-12368-43   (27256)   n/a
67 Wrestle War                171-5782    837-6963-48       610-0239-48         MPR-14025-F    (834200A)     EPR-12368-48   (27256)   n/a
68 Bonanza Bros.              171-5782    837-6963-49       610-0239-49         MPR-13905A-F   (834200A)     EPR-12368-49   (27256)   n/a
69 Streets of Rage            171-5782    837-6963-51       610-0239-51         MPR-14125-SM   (uPD23C4000)  EPR-12368-51   (27C256)  n/a
70 Sonic The Hedgehog         171-5782    837-6963-52       610-0239-52         MPR-13913-F    (834200A)     EPR-12368-52   (27C256)  n/a
71 Spider-Man                 171-5782    837-6963-54       610-0239-54         MPR-14027-SM   (uPD23C4000)  EPR-12368-54   (27C256)  n/a
72 California Games           171-5834    837-6963-55-01    610-0239-55         EPR-14494      (27C020)      EPR-14495      (27C020)  EPR-12368-55 (27C256)
73 Mario Lemeux Hockey        171-5782    837-6963-59       610-0239-59         MPR-14376-H    (234000)      EPR-12368-59   (27256)   n/a
74 Turbo Outrun               171-5782    837-6963-61       610-0239-61         MPR-14674      (uPD23C4000)  EPR-12368-61   (27256)   n/a
75 Sonic Hedgehog 2           171-6215A   837-6963-62       610-0239-62         MPR-15000A-F   (838200)      EPR-12368-62   (27256)   n/a
76 
77 */
78 #include "emu.h"
79 #include "cpu/z80/z80.h"
80 #include "machine/cxd1095.h"
81 #include "rendlay.h"
82 
83 #include "includes/megadriv.h"
84 #include "bus/generic/slot.h"
85 #include "bus/generic/carts.h"
86 
87 #include "softlist.h"
88 
89 #define MASTER_CLOCK        53693100
90 
91 
92 
93 class mtech_state : public md_base_state
94 {
95 public:
mtech_state(const machine_config & mconfig,device_type type,const char * tag)96 	mtech_state(const machine_config &mconfig, device_type type, const char *tag)
97 	: md_base_state(mconfig, type, tag),
98 		m_vdp1(*this, "vdp1"),
99 		m_cart1(*this, "mt_slot1"),
100 		m_cart2(*this, "mt_slot2"),
101 		m_cart3(*this, "mt_slot3"),
102 		m_cart4(*this, "mt_slot4"),
103 		m_cart5(*this, "mt_slot5"),
104 		m_cart6(*this, "mt_slot6"),
105 		m_cart7(*this, "mt_slot7"),
106 		m_cart8(*this, "mt_slot8"),
107 		m_bioscpu(*this, "mtbios"),
108 		m_region_maincpu(*this, "maincpu")
109 	{ }
110 
111 	void megatech_multislot(machine_config &config);
112 	void megatech_fixedslot(machine_config &config);
113 
114 	void init_mt_crt();
115 	void init_mt_slot();
116 
117 private:
118 
119 	void megatech(machine_config &config);
120 
121 	void cart_select_w(uint8_t data);
122 	uint8_t bios_portc_r();
123 	uint8_t bios_porte_r();
124 	void bios_portd_w(uint8_t data);
125 	void bios_porte_w(uint8_t data);
126 	uint8_t read_68k_banked_data(offs_t offset);
127 	void write_68k_banked_data(offs_t offset, uint8_t data);
128 	void mt_z80_bank_w(uint8_t data);
129 	uint8_t banked_ram_r(offs_t offset);
130 	void banked_ram_w(offs_t offset, uint8_t data);
131 	void bios_port_ctrl_w(uint8_t data);
132 	uint8_t bios_joypad_r(offs_t offset);
133 	void bios_port_7f_w(uint8_t data);
134 	uint8_t vdp1_count_r(offs_t offset);
135 	u8 sms_count_r(offs_t offset);
136 	uint8_t sms_ioport_dc_r();
137 	uint8_t sms_ioport_dd_r();
138 	void mt_sms_standard_rom_bank_w(address_space &space, offs_t offset, uint8_t data);
139 
140 	DECLARE_MACHINE_RESET(megatech);
141 
142 	image_init_result load_cart(device_image_interface &image, generic_slot_device *slot, int gameno);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(mt_cart1)143 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER( mt_cart1 ) { return load_cart(image, m_cart1, 0); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(mt_cart2)144 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER( mt_cart2 ) { return load_cart(image, m_cart2, 1); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(mt_cart3)145 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER( mt_cart3 ) { return load_cart(image, m_cart3, 2); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(mt_cart4)146 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER( mt_cart4 ) { return load_cart(image, m_cart4, 3); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(mt_cart5)147 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER( mt_cart5 ) { return load_cart(image, m_cart5, 4); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(mt_cart6)148 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER( mt_cart6 ) { return load_cart(image, m_cart6, 5); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(mt_cart7)149 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER( mt_cart7 ) { return load_cart(image, m_cart7, 6); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(mt_cart8)150 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER( mt_cart8 ) { return load_cart(image, m_cart8, 7); }
151 
152 	uint32_t screen_update_main(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
153 	uint32_t screen_update_menu(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
154 	DECLARE_WRITE_LINE_MEMBER(screen_vblank_main);
155 
156 	void megatech_bios_map(address_map &map);
157 	void megatech_bios_portmap(address_map &map);
158 
159 	uint8_t m_mt_cart_select_reg;
160 	uint32_t m_bios_port_ctrl;
161 	int m_current_machine_is_sms; // is the current game SMS based (running on genesis z80, in VDP compatibility mode)
162 	uint32_t m_bios_ctrl_inputs;
163 	int m_mt_bank_addr;
164 
165 	int m_cart_is_genesis[8];
166 
167 	void set_genz80_as_md();
168 	void set_genz80_as_sms();
169 
170 	void switch_cart(int gameno);
171 
172 	std::unique_ptr<uint8_t[]> m_banked_ram;
173 	std::unique_ptr<uint8_t[]> sms_mainram;
174 	std::unique_ptr<uint8_t[]> sms_rom;
175 
176 	required_device<sega315_5124_device> m_vdp1;
177 	required_device<generic_slot_device> m_cart1;
178 	optional_device<generic_slot_device> m_cart2;
179 	optional_device<generic_slot_device> m_cart3;
180 	optional_device<generic_slot_device> m_cart4;
181 	optional_device<generic_slot_device> m_cart5;
182 	optional_device<generic_slot_device> m_cart6;
183 	optional_device<generic_slot_device> m_cart7;
184 	optional_device<generic_slot_device> m_cart8;
185 	required_device<cpu_device>          m_bioscpu;
186 	required_memory_region               m_region_maincpu;
187 
188 	memory_region *m_cart_reg[8];
189 };
190 
191 
192 
193 /* not currently used */
194 static INPUT_PORTS_START( megatech ) /* Genesis Input Ports */
PORT_INCLUDE(megadriv)195 	PORT_INCLUDE(megadriv)
196 
197 	PORT_START("BIOS_IN0") // port 6
198 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Select") PORT_CODE(KEYCODE_0)
199 	PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
200 	PORT_DIPSETTING(      0x0002, DEF_STR( Off ) )
201 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
202 	PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
203 	PORT_DIPSETTING(      0x0004, DEF_STR( Off ) )
204 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
205 	PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
206 	PORT_DIPSETTING(      0x0008, DEF_STR( Off ) )
207 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
208 	PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
209 	PORT_DIPSETTING(      0x0010, DEF_STR( Off ) )
210 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
211 	PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
212 	PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
213 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
214 	PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
215 	PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
216 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
217 	PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW )
218 
219 	PORT_START("BIOS_IN1") // port 6
220 	PORT_BIT(  0x01, IP_ACTIVE_LOW, IPT_COIN1 )  // a few coin inputs here
221 	PORT_BIT(  0x02, IP_ACTIVE_LOW, IPT_COIN2 )
222 	PORT_BIT(  0x04, IP_ACTIVE_LOW, IPT_COIN3 )
223 	PORT_BIT(  0x08, IP_ACTIVE_LOW, IPT_COIN4 )
224 	PORT_BIT(  0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Service coin") PORT_CODE(KEYCODE_9)
225 	PORT_BIT(  0x20, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Enter") PORT_CODE(KEYCODE_MINUS)
226 	PORT_BIT(  0x40, IP_ACTIVE_LOW, IPT_START1 )
227 	PORT_BIT(  0x80, IP_ACTIVE_LOW, IPT_START2 )
228 
229 	PORT_START("BIOS_DSW0")
230 	PORT_DIPNAME( 0x02, 0x02, "Coin slot 3" )
231 	PORT_DIPSETTING(    0x00, "Inhibit" )
232 	PORT_DIPSETTING(    0x02, "Accept" )
233 	PORT_DIPNAME( 0x01, 0x01, "Coin slot 4" )
234 	PORT_DIPSETTING(    0x00, "Inhibit" )
235 	PORT_DIPSETTING(    0x01, "Accept" )
236 	PORT_DIPNAME( 0x1c, 0x1c, "Coin slot 3/4 value" )
237 	PORT_DIPSETTING(    0x1c, DEF_STR( 1C_1C ) )
238 	PORT_DIPSETTING(    0x18, DEF_STR( 1C_2C ) )
239 	PORT_DIPSETTING(    0x14, DEF_STR( 1C_3C ) )
240 	PORT_DIPSETTING(    0x10, DEF_STR( 1C_4C ) )
241 	PORT_DIPSETTING(    0x0c, DEF_STR( 1C_5C ) )
242 	PORT_DIPSETTING(    0x08, DEF_STR( 1C_6C ) )
243 	PORT_DIPSETTING(    0x04, DEF_STR( 1C_8C ) )
244 	PORT_DIPSETTING(    0x00, "1 Coin/10 credits" )
245 	PORT_DIPNAME( 0xe0, 0x60, "Coin slot 2 value" )
246 	PORT_DIPSETTING(    0x20, DEF_STR( 2C_1C ) )
247 	PORT_DIPSETTING(    0x40, DEF_STR( 1C_1C ) )
248 	PORT_DIPSETTING(    0x60, DEF_STR( 1C_2C ) )
249 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_3C ) )
250 	PORT_DIPSETTING(    0xa0, DEF_STR( 1C_4C ) )
251 	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_5C ) )
252 	PORT_DIPSETTING(    0xe0, DEF_STR( 1C_6C ) )
253 	PORT_DIPSETTING(    0x00, "Inhibit" )
254 
255 	PORT_START("BIOS_DSW1")
256 	PORT_DIPNAME( 0x0f, 0x01, "Coin Slot 1 value" )
257 	PORT_DIPSETTING(    0x00, "Inhibit" )
258 	PORT_DIPSETTING(    0x01, DEF_STR( 1C_1C ) )
259 	PORT_DIPSETTING(    0x02, DEF_STR( 1C_2C ) )
260 	PORT_DIPSETTING(    0x03, DEF_STR( 1C_3C ) )
261 	PORT_DIPSETTING(    0x04, DEF_STR( 1C_4C ) )
262 	PORT_DIPSETTING(    0x05, DEF_STR( 1C_5C ) )
263 	PORT_DIPSETTING(    0x06, DEF_STR( 1C_6C ) )
264 	PORT_DIPSETTING(    0x07, DEF_STR( 1C_7C ) )
265 	PORT_DIPSETTING(    0x08, DEF_STR( 1C_8C ) )
266 	PORT_DIPSETTING(    0x09, DEF_STR( 1C_9C ) )
267 	PORT_DIPSETTING(    0x0a, "1 coin/10 credits" )
268 	PORT_DIPSETTING(    0x0b, "1 coin/11 credits" )
269 	PORT_DIPSETTING(    0x0c, "1 coin/12 credits" )
270 	PORT_DIPSETTING(    0x0d, "1 coin/13 credits" )
271 	PORT_DIPSETTING(    0x0e, "1 coin/14 credits" )
272 	PORT_DIPSETTING(    0x0f, "1 coin/15 credits" )
273 	PORT_DIPNAME( 0xf0, 0xa0, "Time per credit" )
274 	PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
275 	PORT_DIPSETTING(    0x10, "7:30" )
276 	PORT_DIPSETTING(    0x20, "7:00" )
277 	PORT_DIPSETTING(    0x30, "6:30" )
278 	PORT_DIPSETTING(    0x40, "6:00" )
279 	PORT_DIPSETTING(    0x50, "5:30" )
280 	PORT_DIPSETTING(    0x60, "5:00" )
281 	PORT_DIPSETTING(    0x70, "4:30" )
282 	PORT_DIPSETTING(    0x80, "4:00" )
283 	PORT_DIPSETTING(    0x90, "3:30" )
284 	PORT_DIPSETTING(    0xa0, "3:00" )
285 	PORT_DIPSETTING(    0xb0, "2:30" )
286 	PORT_DIPSETTING(    0xc0, "2:00" )
287 	PORT_DIPSETTING(    0xd0, "1:30" )
288 	PORT_DIPSETTING(    0xe0, "1:00" )
289 	PORT_DIPSETTING(    0xf0, "0:30" )
290 
291 
292 	PORT_START("BIOS_J1")
293 	PORT_DIPNAME( 0x0001, 0x0001, "5" )
294 	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
295 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
296 	PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
297 	PORT_DIPSETTING(      0x0002, DEF_STR( Off ) )
298 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
299 	PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
300 	PORT_DIPSETTING(      0x0004, DEF_STR( Off ) )
301 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
302 	PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
303 	PORT_DIPSETTING(      0x0008, DEF_STR( Off ) )
304 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
305 	PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
306 	PORT_DIPSETTING(      0x0010, DEF_STR( Off ) )
307 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
308 	PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
309 	PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
310 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
311 	PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
312 	PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
313 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
314 	PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
315 	PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
316 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
317 INPUT_PORTS_END
318 
319 /* MEGATECH specific */
320 
321 u8 mtech_state::sms_count_r(offs_t offset)
322 {
323 	if (offset & 0x01)
324 		return m_vdp->hcount_read();
325 	else
326 		return m_vdp->vcount_read();
327 }
328 
sms_ioport_dc_r()329 uint8_t mtech_state::sms_ioport_dc_r()
330 {
331 	/* 2009-05 FP: would it be worth to give separate inputs to SMS? SMS has only 2 keys A,B (which are B,C on megadrive) */
332 	/* bit 4: TL-A; bit 5: TR-A */
333 	return (machine().root_device().ioport("PAD1")->read() & 0x3f) | ((machine().root_device().ioport("PAD2")->read() & 0x03) << 6);
334 }
335 
sms_ioport_dd_r()336 uint8_t mtech_state::sms_ioport_dd_r()
337 {
338 	/* 2009-05 FP: would it be worth to give separate inputs to SMS? SMS has only 2 keys A,B (which are B,C on megadrive) */
339 	/* bit 2: TL-B; bit 3: TR-B; bit 4: RESET; bit 5: unused; bit 6: TH-A; bit 7: TH-B*/
340 	return ((machine().root_device().ioport("PAD2")->read() & 0x3c) >> 2) | 0x10;
341 }
342 
343 
mt_sms_standard_rom_bank_w(address_space & space,offs_t offset,uint8_t data)344 void mtech_state::mt_sms_standard_rom_bank_w(address_space &space, offs_t offset, uint8_t data)
345 {
346 	int bank = data & 0x1f;
347 	//logerror("bank w %02x %02x\n", offset, data);
348 
349 	sms_mainram[0x1ffc + offset] = data;
350 	switch (offset)
351 	{
352 		case 0:
353 			logerror("bank w %02x %02x\n", offset, data);
354 			space.install_rom(0x0000, 0xbfff, sms_rom.get());
355 			space.unmap_write(0x0000, 0xbfff);
356 			//printf("bank ram??\n");
357 			break;
358 		case 1:
359 			memcpy(sms_rom.get()+0x0000, m_region_maincpu->base()+bank*0x4000, 0x4000);
360 			break;
361 		case 2:
362 			memcpy(sms_rom.get()+0x4000, m_region_maincpu->base()+bank*0x4000, 0x4000);
363 			break;
364 		case 3:
365 			memcpy(sms_rom.get()+0x8000, m_region_maincpu->base()+bank*0x4000, 0x4000);
366 			break;
367 
368 	}
369 }
370 
set_genz80_as_sms()371 void mtech_state::set_genz80_as_sms()
372 {
373 	address_space &prg = m_z80snd->space(AS_PROGRAM);
374 	address_space &io = m_z80snd->space(AS_IO);
375 
376 	// main ram area
377 	sms_mainram = std::make_unique<uint8_t[]>(0x2000);
378 	prg.install_ram(0xc000, 0xdfff, 0x2000, sms_mainram.get());
379 	memset(sms_mainram.get(), 0x00, 0x2000);
380 
381 	// fixed rom bank area
382 	sms_rom = std::make_unique<uint8_t[]>(0xc000);
383 	prg.install_rom(0x0000, 0xbfff, sms_rom.get());
384 
385 	memcpy(sms_rom.get(), m_region_maincpu->base(), 0xc000);
386 
387 	prg.install_write_handler(0xfffc, 0xffff, write8m_delegate(*this, FUNC(mtech_state::mt_sms_standard_rom_bank_w)));
388 
389 	// ports
390 	io.install_read_handler      (0x40, 0x41, 0, 0x3e, 0, read8sm_delegate(*this, FUNC(mtech_state::sms_count_r)));
391 	io.install_write_handler     (0x40, 0x41, 0, 0x3e, 0, write8smo_delegate(*m_vdp, FUNC(sega315_5124_device::psg_w)));
392 	io.install_readwrite_handler (0x80, 0x80, 0, 0x3e, 0, read8smo_delegate(*m_vdp, FUNC(sega315_5124_device::data_read)), write8smo_delegate(*m_vdp, FUNC(sega315_5124_device::data_write)));
393 	io.install_readwrite_handler (0x81, 0x81, 0, 0x3e, 0, read8smo_delegate(*m_vdp, FUNC(sega315_5124_device::control_read)), write8smo_delegate(*m_vdp, FUNC(sega315_5124_device::control_write)));
394 
395 	io.install_read_handler      (0x10, 0x10, read8smo_delegate(*this, FUNC(mtech_state::sms_ioport_dd_r))); // super tetris
396 
397 	io.install_read_handler      (0xdc, 0xdc, read8smo_delegate(*this, FUNC(mtech_state::sms_ioport_dc_r)));
398 	io.install_read_handler      (0xdd, 0xdd, read8smo_delegate(*this, FUNC(mtech_state::sms_ioport_dd_r)));
399 	io.install_read_handler      (0xde, 0xde, read8smo_delegate(*this, FUNC(mtech_state::sms_ioport_dd_r)));
400 	io.install_read_handler      (0xdf, 0xdf, read8smo_delegate(*this, FUNC(mtech_state::sms_ioport_dd_r))); // adams family
401 }
402 
403 
404 /* sets the megadrive z80 to it's normal ports / map */
set_genz80_as_md()405 void mtech_state::set_genz80_as_md()
406 {
407 	address_space &prg = m_z80snd->space(AS_PROGRAM);
408 
409 	prg.install_readwrite_bank(0x0000, 0x1fff, "bank1");
410 	machine().root_device().membank("bank1")->set_base(m_genz80.z80_prgram.get());
411 
412 	prg.install_ram(0x0000, 0x1fff, m_genz80.z80_prgram.get());
413 
414 	prg.install_readwrite_handler(0x4000, 0x4003, read8sm_delegate(*m_ymsnd, FUNC(ym2612_device::read)), write8sm_delegate(*m_ymsnd, FUNC(ym2612_device::write)));
415 	prg.install_write_handler    (0x6000, 0x6000, write8smo_delegate(*this, FUNC(mtech_state::megadriv_z80_z80_bank_w)));
416 	prg.install_write_handler    (0x6001, 0x6001, write8smo_delegate(*this, FUNC(mtech_state::megadriv_z80_z80_bank_w)));
417 	prg.install_read_handler     (0x6100, 0x7eff, read8smo_delegate(*this, FUNC(mtech_state::megadriv_z80_unmapped_read)));
418 	prg.install_readwrite_handler(0x7f00, 0x7fff, read8sm_delegate(*this, FUNC(mtech_state::megadriv_z80_vdp_read)), write8sm_delegate(*this, FUNC(mtech_state::megadriv_z80_vdp_write)));
419 	prg.install_readwrite_handler(0x8000, 0xffff, read8sm_delegate(*this, FUNC(mtech_state::z80_read_68k_banked_data)), write8sm_delegate(*this, FUNC(mtech_state::z80_write_68k_banked_data)));
420 }
421 
422 
switch_cart(int gameno)423 void mtech_state::switch_cart(int gameno)
424 {
425 	logerror("select game %d\n", gameno + 1);
426 
427 	m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
428 	m_z80snd->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
429 	//m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
430 	//m_z80snd->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
431 	m_ymsnd->reset();
432 
433 	megadriv_stop_scanline_timer();// stop the scanline timer for the genesis vdp... it can be restarted in video eof when needed
434 	m_vdp->reset();
435 
436 	/* if the regions exist we're fine */
437 	if (m_cart_reg[gameno])
438 	{
439 		memcpy(m_region_maincpu->base(), m_cart_reg[gameno]->base(), 0x400000);
440 
441 		if (!m_cart_is_genesis[gameno])
442 		{
443 			logerror("enabling SMS Z80\n");
444 			m_current_machine_is_sms = 1;
445 			set_genz80_as_sms();
446 			//m_z80snd->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
447 			m_z80snd->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
448 		}
449 		else
450 		{
451 			logerror("disabling SMS Z80\n");
452 			m_current_machine_is_sms = 0;
453 			set_genz80_as_md();
454 			m_maincpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
455 			//m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
456 		}
457 	}
458 	else    /* else, no cart.. */
459 	{
460 		memset(memregion("mtbios")->base() + 0x8000, 0x00, 0x8000);
461 		memset(m_region_maincpu->base(), 0x00, 0x400000);
462 	}
463 }
464 
cart_select_w(uint8_t data)465 void mtech_state::cart_select_w(uint8_t data)
466 {
467 	/* seems to write the slot number..
468 	  but it stores something in (banked?) ram
469 	  because it always seems to show the
470 	  same instructions ... */
471 	m_mt_cart_select_reg = data;
472 	switch_cart(m_mt_cart_select_reg);
473 }
474 
475 
bios_portc_r()476 uint8_t mtech_state::bios_portc_r()
477 {
478 	return 0;
479 }
480 
bios_porte_r()481 uint8_t mtech_state::bios_porte_r()
482 {
483 	return 0;
484 }
485 
bios_portd_w(uint8_t data)486 void mtech_state::bios_portd_w(uint8_t data)
487 {
488 	output().set_value("Alarm_sound", BIT(data, 7));
489 	m_bios_ctrl_inputs = data & 0x04;  // Genesis/SMS input ports disable bit
490 }
491 
bios_porte_w(uint8_t data)492 void mtech_state::bios_porte_w(uint8_t data)
493 {
494 	output().set_value("Flash_screen", BIT(data, 1));
495 }
496 
497 /* this sets 0x300000 which may indicate that the 68k can see the instruction rom
498    there, this limiting the max game rom capacity to 3meg. */
499 
read_68k_banked_data(offs_t offset)500 uint8_t mtech_state::read_68k_banked_data(offs_t offset)
501 {
502 	address_space &space68k = m_maincpu->space();
503 	uint8_t ret = space68k.read_byte(m_mt_bank_addr + offset);
504 	return ret;
505 }
506 
write_68k_banked_data(offs_t offset,uint8_t data)507 void mtech_state::write_68k_banked_data(offs_t offset, uint8_t data)
508 {
509 	address_space &space68k = m_maincpu->space();
510 	space68k.write_byte(m_mt_bank_addr + offset,data);
511 }
512 
mt_z80_bank_w(uint8_t data)513 void mtech_state::mt_z80_bank_w(uint8_t data)
514 {
515 	m_mt_bank_addr = ((m_mt_bank_addr >> 1) | (data << 23)) & 0xff8000;
516 }
517 
banked_ram_r(offs_t offset)518 uint8_t mtech_state::banked_ram_r(offs_t offset)
519 {
520 	return m_banked_ram[offset + 0x1000 * (m_mt_cart_select_reg & 0x07)];
521 }
522 
banked_ram_w(offs_t offset,uint8_t data)523 void mtech_state::banked_ram_w(offs_t offset, uint8_t data)
524 {
525 	m_banked_ram[offset + 0x1000 * (m_mt_cart_select_reg & 0x07)] = data;
526 }
527 
528 
529 
megatech_bios_map(address_map & map)530 void mtech_state::megatech_bios_map(address_map &map)
531 {
532 	map(0x0000, 0x2fff).rom(); // from bios rom (0x0000-0x2fff populated in ROM)
533 	map(0x3000, 0x3fff).rw(FUNC(mtech_state::banked_ram_r), FUNC(mtech_state::banked_ram_w)); // copies instruction data here at startup, must be banked
534 	map(0x4000, 0x5fff).ram(); // plain ram?
535 	map(0x6000, 0x6000).w(FUNC(mtech_state::mt_z80_bank_w));
536 	map(0x6400, 0x6407).rw("io1", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write));
537 	map(0x6800, 0x6807).rw("io2", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write));
538 	map(0x7000, 0x77ff).rom(); // from bios rom (0x7000-0x77ff populated in ROM)
539 	//map(0x7800, 0x7fff).ram(); // ?
540 	map(0x8000, 0x9fff).rw(FUNC(mtech_state::read_68k_banked_data), FUNC(mtech_state::write_68k_banked_data)); // window into 68k address space, reads instr rom and writes to reset banks on z80 carts?
541 }
542 
543 
bios_port_ctrl_w(uint8_t data)544 void mtech_state::bios_port_ctrl_w(uint8_t data)
545 {
546 	m_bios_port_ctrl = data;
547 }
548 
549 /* the test mode accesses the joypad/stick inputs like this */
bios_joypad_r(offs_t offset)550 uint8_t mtech_state::bios_joypad_r(offs_t offset)
551 {
552 	uint8_t retdata = 0;
553 
554 	if (m_bios_port_ctrl == 0x55)
555 	{
556 		/* A keys */
557 		retdata = ((m_io_pad_3b[0]->read() & 0x40) >> 2) | ((m_io_pad_3b[1]->read() & 0x40) >> 4) | 0xeb;
558 	}
559 	else
560 	{
561 		if (offset == 0)
562 			retdata = (m_io_pad_3b[0]->read() & 0x3f) | ((m_io_pad_3b[1]->read() & 0x03) << 6);
563 		else
564 			retdata = ((m_io_pad_3b[1]->read() & 0x3c) >> 2) | 0xf0;
565 
566 	}
567 	return retdata;
568 }
569 
bios_port_7f_w(uint8_t data)570 void mtech_state::bios_port_7f_w(uint8_t data)
571 {
572 //  popmessage("CPU #3: I/O port 0x7F write, data %02x", data);
573 }
574 
575 
vdp1_count_r(offs_t offset)576 uint8_t mtech_state::vdp1_count_r(offs_t offset)
577 {
578 	if (offset & 0x01)
579 		return m_vdp1->hcount_read();
580 	else
581 		return m_vdp1->vcount_read();
582 }
583 
megatech_bios_portmap(address_map & map)584 void mtech_state::megatech_bios_portmap(address_map &map)
585 {
586 	map.global_mask(0xff);
587 	map(0x3f, 0x3f).w(FUNC(mtech_state::bios_port_ctrl_w));
588 	map(0x7f, 0x7f).w(FUNC(mtech_state::bios_port_7f_w)); // PSG?
589 
590 	map(0x40, 0x41).mirror(0x3e).r(FUNC(mtech_state::vdp1_count_r));
591 	map(0x80, 0x80).mirror(0x3e).rw(m_vdp1, FUNC(sega315_5124_device::data_read), FUNC(sega315_5124_device::data_write));
592 	map(0x81, 0x81).mirror(0x3e).rw(m_vdp1, FUNC(sega315_5124_device::control_read), FUNC(sega315_5124_device::control_write));
593 
594 	map(0xdc, 0xdd).r(FUNC(mtech_state::bios_joypad_r));  // player inputs
595 }
596 
597 
598 
init_mt_slot()599 void mtech_state::init_mt_slot()
600 {
601 	m_banked_ram = std::make_unique<uint8_t[]>(0x1000*8);
602 
603 	init_megadriv();
604 
605 	// this gets set in DEVICE_IMAGE_LOAD
606 	memset(m_cart_is_genesis, 0, sizeof(m_cart_is_genesis));
607 }
608 
init_mt_crt()609 void mtech_state::init_mt_crt()
610 {
611 	uint8_t* pin = memregion("sms_pin")->base();
612 	init_mt_slot();
613 
614 	m_cart_is_genesis[0] = !pin[0] ? 1 : 0;
615 }
616 
617 
screen_update_main(screen_device & screen,bitmap_rgb32 & bitmap,const rectangle & cliprect)618 uint32_t mtech_state::screen_update_main(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
619 {
620 	// if we're running an sms game then use the SMS update.. maybe this should be moved to the megadrive emulation core as compatibility mode is a feature of the chip
621 	if (!m_current_machine_is_sms)
622 		screen_update_megadriv(screen, bitmap, cliprect);
623 	else
624 	{
625 		m_vdp->screen_update(screen, bitmap, cliprect);
626 #if 0
627 		// when launching megatech + both sms and megadrive games, the following would be needed...
628 		for (int y = 0; y < 224; y++)
629 		{
630 			uint32_t* lineptr = &bitmap.pix(y);
631 			uint32_t* srcptr =  &m_vdp->get_bitmap().pix(y + sega315_5124_device::TBORDER_START + sega315_5124_device::NTSC_224_TBORDER_HEIGHT);
632 
633 			for (int x = 0; x < sega315_5124_device::WIDTH; x++)
634 				lineptr[x] = srcptr[x];
635 		}
636 #endif
637 	}
638 	return 0;
639 }
640 
WRITE_LINE_MEMBER(mtech_state::screen_vblank_main)641 WRITE_LINE_MEMBER(mtech_state::screen_vblank_main)
642 {
643 	if (!m_current_machine_is_sms)
644 		screen_vblank_megadriv(state);
645 }
646 
MACHINE_RESET_MEMBER(mtech_state,megatech)647 MACHINE_RESET_MEMBER(mtech_state, megatech)
648 {
649 	m_mt_bank_addr = 0;
650 	MACHINE_RESET_CALL_MEMBER(megadriv);
651 
652 	std::string region_tag;
653 	if (m_cart1->get_rom_size() > 0)
654 		m_cart_reg[0] = memregion(region_tag.assign(m_cart1->tag()).append(GENERIC_ROM_REGION_TAG));
655 	else
656 		m_cart_reg[0] = memregion(":mt_slot1:cart");
657 	if (m_cart2)
658 		m_cart_reg[1] = memregion(region_tag.assign(m_cart2->tag()).append(GENERIC_ROM_REGION_TAG));
659 	if (m_cart3)
660 		m_cart_reg[2] = memregion(region_tag.assign(m_cart3->tag()).append(GENERIC_ROM_REGION_TAG));
661 	if (m_cart4)
662 		m_cart_reg[3] = memregion(region_tag.assign(m_cart4->tag()).append(GENERIC_ROM_REGION_TAG));
663 	if (m_cart5)
664 		m_cart_reg[4] = memregion(region_tag.assign(m_cart5->tag()).append(GENERIC_ROM_REGION_TAG));
665 	if (m_cart6)
666 		m_cart_reg[5] = memregion(region_tag.assign(m_cart6->tag()).append(GENERIC_ROM_REGION_TAG));
667 	if (m_cart7)
668 		m_cart_reg[6] = memregion(region_tag.assign(m_cart7->tag()).append(GENERIC_ROM_REGION_TAG));
669 	if (m_cart8)
670 		m_cart_reg[7] = memregion(region_tag.assign(m_cart8->tag()).append(GENERIC_ROM_REGION_TAG));
671 
672 	switch_cart(0);
673 }
674 
screen_update_menu(screen_device & screen,bitmap_rgb32 & bitmap,const rectangle & cliprect)675 uint32_t mtech_state::screen_update_menu(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
676 {
677 	m_vdp1->screen_update(screen, bitmap, cliprect);
678 	return 0;
679 }
680 
681 
megatech(machine_config & config)682 void mtech_state::megatech(machine_config &config)
683 {
684 	/* basic machine hardware */
685 	md_ntsc(config);
686 
687 	/* Megatech has an extra SMS based bios *and* an additional screen */
688 	Z80(config, m_bioscpu, MASTER_CLOCK / 15); /* ?? */
689 	m_bioscpu->set_addrmap(AS_PROGRAM, &mtech_state::megatech_bios_map);
690 	m_bioscpu->set_addrmap(AS_IO, &mtech_state::megatech_bios_portmap);
691 
692 	cxd1095_device &io1(CXD1095(config, "io1"));
693 	io1.in_porta_cb().set_ioport("BIOS_DSW0");
694 	io1.in_portb_cb().set_ioport("BIOS_DSW1");
695 	io1.out_porte_cb().set(FUNC(mtech_state::cart_select_w));
696 
697 	cxd1095_device &io2(CXD1095(config, "io2"));
698 	io2.in_porta_cb().set_ioport("BIOS_IN0");
699 	io2.in_portb_cb().set_ioport("BIOS_IN1");
700 	io2.in_portc_cb().set(FUNC(mtech_state::bios_portc_r));
701 	io2.out_portd_cb().set(FUNC(mtech_state::bios_portd_w));
702 	io2.in_porte_cb().set(FUNC(mtech_state::bios_porte_r));
703 	io2.out_porte_cb().set(FUNC(mtech_state::bios_porte_w));
704 
705 	MCFG_MACHINE_RESET_OVERRIDE(mtech_state, megatech)
706 
707 	config.set_default_layout(layout_dualhovu);
708 
709 	screen_device &screen(*subdevice<screen_device>("megadriv"));
710 	screen.set_raw(XTAL(10'738'635)/2,
711 			sega315_5124_device::WIDTH , sega315_5124_device::LBORDER_START + sega315_5124_device::LBORDER_WIDTH, sega315_5124_device::LBORDER_START + sega315_5124_device::LBORDER_WIDTH + 256,
712 			sega315_5124_device::HEIGHT_NTSC, sega315_5124_device::TBORDER_START + sega315_5124_device::NTSC_224_TBORDER_HEIGHT, sega315_5124_device::TBORDER_START + sega315_5124_device::NTSC_224_TBORDER_HEIGHT + 224);
713 	screen.set_screen_update(FUNC(mtech_state::screen_update_main));
714 	screen.screen_vblank().set(FUNC(mtech_state::screen_vblank_main));
715 
716 	m_vdp->n_int().set_inputline(m_z80snd, 0);
717 
718 	screen_device &menu(SCREEN(config, "menu", SCREEN_TYPE_RASTER));
719 	// check frq
720 	menu.set_raw(XTAL(10'738'635)/2,
721 			sega315_5124_device::WIDTH , sega315_5124_device::LBORDER_START + sega315_5124_device::LBORDER_WIDTH, sega315_5124_device::LBORDER_START + sega315_5124_device::LBORDER_WIDTH + 256,
722 			sega315_5124_device::HEIGHT_NTSC, sega315_5124_device::TBORDER_START + sega315_5124_device::NTSC_224_TBORDER_HEIGHT, sega315_5124_device::TBORDER_START + sega315_5124_device::NTSC_224_TBORDER_HEIGHT + 224);
723 	menu.set_screen_update(FUNC(mtech_state::screen_update_menu));
724 
725 	SEGA315_5246(config, m_vdp1, MASTER_CLOCK / 5); /* ?? */
726 	m_vdp1->set_screen("menu");
727 	m_vdp1->set_is_pal(false);
728 	m_vdp1->n_int().set_inputline(m_bioscpu, 0);
729 	m_vdp1->add_route(ALL_OUTPUTS, "lspeaker", 0.25);
730 	m_vdp1->add_route(ALL_OUTPUTS, "rspeaker", 0.25);
731 }
732 
733 
load_cart(device_image_interface & image,generic_slot_device * slot,int gameno)734 image_init_result mtech_state::load_cart(device_image_interface &image, generic_slot_device *slot, int gameno)
735 {
736 	uint8_t *ROM;
737 	const char  *pcb_name;
738 	uint32_t size = slot->common_get_size("rom");
739 
740 	if (!image.loaded_through_softlist())
741 		return image_init_result::FAIL;
742 
743 	slot->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
744 	ROM = slot->get_rom_base();
745 	memcpy(ROM, image.get_software_region("rom"), size);
746 
747 	if ((pcb_name = image.get_feature("pcb_type")) == nullptr)
748 		return image_init_result::FAIL;
749 	else
750 	{
751 		if (!core_stricmp("genesis", pcb_name))
752 		{
753 			osd_printf_debug("cart%d is genesis\n", gameno + 1);
754 			m_cart_is_genesis[gameno] = 1;
755 		}
756 		else if (!core_stricmp("sms", pcb_name))
757 		{
758 			osd_printf_debug("cart%d is sms\n", gameno + 1);
759 			m_cart_is_genesis[gameno] = 0;
760 		}
761 		else
762 			osd_printf_debug("cart%d is invalid\n", gameno + 1);
763 	}
764 
765 	return image_init_result::PASS;
766 }
767 
768 #define MEGATECH_CARTSLOT(_tag, _load) \
769 	GENERIC_CARTSLOT(config, _tag, generic_plain_slot, "megatech_cart").set_device_load(FUNC(mtech_state::_load))
770 
megatech_multislot(machine_config & config)771 void mtech_state::megatech_multislot(machine_config &config)
772 {
773 	megatech(config);
774 
775 	// add cart slots
776 	MEGATECH_CARTSLOT("mt_slot1", mt_cart1);
777 	MEGATECH_CARTSLOT("mt_slot2", mt_cart2);
778 	MEGATECH_CARTSLOT("mt_slot3", mt_cart3);
779 	MEGATECH_CARTSLOT("mt_slot4", mt_cart4);
780 	MEGATECH_CARTSLOT("mt_slot5", mt_cart5);
781 	MEGATECH_CARTSLOT("mt_slot6", mt_cart6);
782 	MEGATECH_CARTSLOT("mt_slot7", mt_cart7);
783 	MEGATECH_CARTSLOT("mt_slot8", mt_cart8);
784 
785 	SOFTWARE_LIST(config, "cart_list").set_original("megatech");
786 }
787 
788 
megatech_fixedslot(machine_config & config)789 void mtech_state::megatech_fixedslot(machine_config &config)
790 {
791 	megatech(config);
792 
793 	// add cart slots
794 	generic_cartslot_device &cartslot(GENERIC_CARTSLOT(config, "mt_slot1", generic_plain_slot, "megatech_cart"));
795 	cartslot.set_device_load(FUNC(mtech_state::mt_cart1));
796 	cartslot.set_user_loadable(false);
797 }
798 
799 
800 /* MegaTech Games - Genesis & sms! Games with a timer */
801 
802 #define MEGATECH_BIOS \
803 	ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF ) \
804 	ROM_REGION( 0x10000, "mtbios", 0 ) \
805 	ROM_SYSTEM_BIOS( 0, "ver1", "Ver 1" ) \
806 	ROMX_LOAD( "epr-12664.20",  0x000000, 0x8000, CRC(f71e9526) SHA1(1c7887541d02c41426992d17f8e3db9e03975953), ROM_BIOS(0)) \
807 	ROM_SYSTEM_BIOS( 1, "ver0a", "Ver 0 Rev A" ) \
808 	ROMX_LOAD( "epr-12263a.20", 0x000000, 0x8000, CRC(07c3f423) SHA1(50c28bbc2d4349c820d988ae3f20aae3f808545f), ROM_BIOS(1)) \
809 	ROM_SYSTEM_BIOS( 2, "ver0b", "Ver 0 Rev B" ) \
810 	ROMX_LOAD( "epr-12263b.20", 0x000000, 0x8000, CRC(ca26c87a) SHA1(987a18bede6e54cd73c4434426eb6c302a37cdc5), ROM_BIOS(2)) \
811 	ROM_SYSTEM_BIOS( 3, "ver0aa","Ver 0 Rev B (alt?)" ) \
812 	ROMX_LOAD( "epr-12604a.20", 0x000000, 0x8000, CRC(884e4aa5) SHA1(c9008c431a937c084fb475273093ca0b434b5f47), ROM_BIOS(3))
813 
814 
815 /* no games */
816 ROM_START( megatech )
817 	MEGATECH_BIOS
818 ROM_END
819 
820 
821 /* Game 01 - Altered Beast (Genesis) */
822 ROM_START( mt_beast ) /* Altered Beast */
823 	MEGATECH_BIOS
824 
825 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
826 	ROM_LOAD16_WORD_SWAP( "mp12538.ic1", 0x000000, 0x080000, CRC(3bea3dce) SHA1(ec72e4fde191dedeb3f148f132603ed3c23f0f86) )
827 	ROM_LOAD16_BYTE( "epr-12368-01.ic2", 0x300001, 0x08000, CRC(40cb0088) SHA1(e1711532c29f395a35a1cb34d789015881b5a1ed) )
828 
829 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
830 ROM_END
831 
832 
833 /* Game 02 - Space Harrier 2 */
834 ROM_START( mt_shar2 ) /* Space Harrier 2 */
835 	MEGATECH_BIOS
836 
837 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
838 	ROM_LOAD16_WORD_SWAP( "mp11934.ic1", 0x000000, 0x080000, CRC(932daa09) SHA1(a2d7a76f3604c6227d43229908bfbd02b0ef5fd9) )
839 	ROM_LOAD16_BYTE( "epr-12368-02.ic2", 0x300001, 0x08000, CRC(c129c66c) SHA1(e7c0c97db9df9eb04e2f9ff561b64305219b8f1f) )
840 
841 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
842 ROM_END
843 
844 
845 /* Game 03 - Super Thunder Blade */
846 ROM_START( mt_stbld ) /* Super Thunder Blade */
847 	MEGATECH_BIOS
848 
849 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
850 	ROM_LOAD16_WORD_SWAP( "mp11996f.ic1", 0x000000, 0x080000,  CRC(9355c34e) SHA1(26ff91c2921408673c644b0b1c8931d98524bf63) )
851 	ROM_LOAD16_BYTE( "epr-12368-03.ic2", 0x300001, 0x08000,  CRC(1ba4ac5d) SHA1(9bde57d70189d159ebdc537a9026001abfd0deae) )
852 
853 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
854 ROM_END
855 
856 
857 /* Game 04 - Great Golf (SMS) */
858 /* Also known to have the ID# MPR-11128 instead of MPR-11129F, same contents */
859 ROM_START( mt_ggolf ) /* Great Golf */
860 	MEGATECH_BIOS
861 
862 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
863 	ROM_LOAD16_WORD_SWAP( "mp11129f.ic1", 0x000000, 0x020000, CRC(c6611c84) SHA1(eab0eed872dd26b13bcf0b2dd74fcbbc078812c9) )
864 	ROM_LOAD16_BYTE( "epr-12368-04.ic2", 0x300001, 0x08000, CRC(62e5579b) SHA1(e1f531be5c40a1216d4192baeda9352384444410) )
865 
866 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASEFF )
867 ROM_END
868 
869 
870 /* Game 05 - Great Soccer (SMS) - bad dump */
871 ROM_START( mt_gsocr ) /* Great Soccer */
872 	MEGATECH_BIOS
873 
874 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
875 	ROM_LOAD16_WORD_SWAP( "mp10747f.ic1", 0x000000, 0x020000, BAD_DUMP CRC(9cf53703) SHA1(c6b4d1de56bd5bf067ec7fc80449c07686d01337) )
876 	ROM_LOAD16_BYTE( "epr-12368-05.ic2", 0x300001, 0x08000, CRC(bab91fcc) SHA1(a160c9d34b253e93ac54fdcef33f95f44d8fa90c) )
877 
878 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASEFF )
879 ROM_END
880 
881 
882 /* Game 06 - Out Run (SMS) */
883 ROM_START( mt_orun ) /* Out Run */
884 	MEGATECH_BIOS
885 
886 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
887 	ROM_LOAD16_WORD_SWAP( "mpr-11078.ic1", 0x000000, 0x040000, CRC(5589d8d2) SHA1(4f9b61b24f0d9fee0448cdbbe8fc05411dbb1102) )
888 	ROM_LOAD16_BYTE( "epr-12368-06.ic2", 0x300001, 0x08000, CRC(c7c74429) SHA1(22ee261a653e10d66e0d6703c988bb7f236a7571) )
889 
890 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASEFF )
891 ROM_END
892 
893 
894 /* Game 07 - Alien Syndrome (SMS) */
895 ROM_START( mt_asyn ) /* Alien Syndrome */
896 	MEGATECH_BIOS
897 
898 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
899 	ROM_LOAD16_WORD_SWAP( "mpr-11194.ic1", 0x000000, 0x040000, CRC(4cc11df9) SHA1(5d786476b275de34efb95f576dd556cf4b335a83) )
900 	ROM_LOAD16_BYTE( "epr-12368-07.ic2", 0x300001, 0x08000, CRC(14f4a17b) SHA1(0fc010ac95762534892f1ae16986dbf1c25399d3) )
901 
902 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASEFF )
903 ROM_END
904 
905 
906 /* Game 08 - Shinobi (SMS) */
907 ROM_START( mt_shnbi ) /* Shinobi */
908 	MEGATECH_BIOS
909 
910 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
911 	ROM_LOAD16_WORD_SWAP( "mp11706.ic1", 0x000000, 0x040000, CRC(0c6fac4e) SHA1(7c0778c055dc9c2b0aae1d166dbdb4734e55b9d1) )
912 	ROM_LOAD16_BYTE( "epr-12368-08.ic2", 0x300001, 0x08000, CRC(103a0459) SHA1(d803ddf7926b83785e8503c985b8c78e7ccb5dac) )
913 
914 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASEFF )
915 ROM_END
916 
917 
918 /* Game 09 - Fantasy Zone (SMS) */
919 // note, dump was bad, but the good (uniquely identifiable) parts matched the 'fantasy zone (world) (v1.2).bin' SMS rom
920 // so I'm using that until it gets verified.
921 ROM_START( mt_fz ) /* Fantasy Zone */
922 	MEGATECH_BIOS
923 
924 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
925 	ROM_LOAD16_WORD_SWAP( "mpr-10118.ic1", 0x000000, 0x020000, CRC(65d7e4e0) SHA1(0278cd120dc3a7707eda9314c46c7f27f9e8fdda) )
926 	ROM_LOAD16_BYTE( "epr-12368-09.bin", 0x300001, 0x08000, CRC(373d2a70) SHA1(c39dd1003d71a417b12a359126bfef64c7a2fd00) )
927 
928 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASEFF )
929 ROM_END
930 
931 
932 
933 /* Game 10 - Afterburner (SMS) */
934 ROM_START( mt_aftrb ) /* Afterburner */
935 	MEGATECH_BIOS
936 
937 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
938 	ROM_LOAD16_WORD_SWAP( "mp11271.ic1", 0x000000, 0x080000, CRC(1c951f8e) SHA1(51531df038783c84640a0cab93122e0b59e3b69a) )
939 	ROM_LOAD16_BYTE( "epr-12368-10.ic2", 0x300001, 0x08000, CRC(2a7cb590) SHA1(2236963bddc89ca9045b530259cc7b5ccf889eaf) )
940 
941 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASEFF )
942 ROM_END
943 
944 
945 /* Game 11 - Thunder Force II */
946 ROM_START( mt_tfor2 ) /* Thunder Force II */
947 	MEGATECH_BIOS
948 
949 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
950 	ROM_LOAD16_WORD_SWAP( "mp12559.ic1", 0x000000, 0x080000, CRC(b093bee3) SHA1(0bf6194c3d228425f8cf1903ed70d8da1b027b6a) )
951 	ROM_LOAD16_BYTE( "epr-12368-11.ic2", 0x300001, 0x08000, CRC(f4f27e8d) SHA1(ae1a2823deb416c53838115966f1833d5dac72d4) )
952 
953 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
954 ROM_END
955 
956 
957 /* Game 13 - Astro Warrior (SMS) */
958 ROM_START( mt_astro ) /* Astro Warrior */
959 	MEGATECH_BIOS
960 
961 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
962 	ROM_LOAD16_WORD_SWAP( "ep13817.ic2", 0x000000, 0x20000, CRC(299cbb74) SHA1(901697a3535ad70190647f34ad5b30b695d54542) )
963 	ROM_LOAD16_BYTE( "epr-12368-13.ic1", 0x300001, 0x08000,  CRC(4038cbd1) SHA1(696bc1efce45d9f0052b2cf0332a232687c8d6ab) )
964 
965 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASEFF )
966 ROM_END
967 
968 
969 /* Game 19 - Great Football (SMS) */
970 ROM_START( mt_gfoot ) /* Great Football */
971 	MEGATECH_BIOS
972 
973 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
974 	ROM_LOAD16_WORD_SWAP( "mpr-10576f.ic1", 0x000000, 0x020000, CRC(2055825f) SHA1(a768f44ce7e50083ffe8c4b5e3ac93ceb7bd3266) )
975 	ROM_LOAD16_BYTE( "epr-12368-19.ic2", 0x300001, 0x08000, CRC(e27cb37a) SHA1(2b6259957e86d033a5689fd716a9efcfeff7d5ba) )
976 
977 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASEFF )
978 ROM_END
979 
980 
981 /* Game 20 - Last Battle */
982 ROM_START( mt_lastb ) /* Last Battle */
983 	MEGATECH_BIOS
984 
985 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
986 	ROM_LOAD16_WORD_SWAP( "mp12578f.ic1", 0x000000, 0x080000, CRC(531191a0) SHA1(f6bc26e975c01a3e10ab4033e4c5f494627a1e2f) )
987 	ROM_LOAD16_BYTE( "epr-12368-20.ic2", 0x300001, 0x08000, CRC(e1a71c91) SHA1(c250da18660d8aea86eb2abace41ba46130dabc8) )
988 
989 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
990 ROM_END
991 
992 
993 /* Game 21 - World Championship Soccer (Genesis) */
994 ROM_START( mt_wcsoc ) /* World Championship Soccer */
995 	MEGATECH_BIOS
996 
997 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
998 	ROM_LOAD16_WORD_SWAP( "mp12607b.ic1", 0x000000, 0x080000, CRC(bc591b30) SHA1(55e8577171c0933eee53af1dabd0f4c6462d5fc8) )
999 	ROM_LOAD16_BYTE( "epr-12368-21.ic2", 0x300001, 0x08000, CRC(028ee46b) SHA1(cd8f81d66e5ae62107eb20e0ca5db4b66d4b2987) )
1000 
1001 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1002 ROM_END
1003 
1004 
1005 /* Game 22 - Tetris */
1006 ROM_START( mt_tetri ) /* Tetris */
1007 	MEGATECH_BIOS
1008 
1009 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1010 	ROM_LOAD16_BYTE( "mpr-12356f.ic1", 0x000001, 0x020000, CRC(1e71c1a0) SHA1(44b2312792e49d46d71e0417a7f022e5ffddbbfe) )
1011 	ROM_LOAD16_BYTE( "mpr-12357f.ic2", 0x000000, 0x020000, CRC(d52ca49c) SHA1(a9159892eee2c0cf28ebfcfa99f81f80781851c6) )
1012 	ROM_LOAD16_BYTE( "epr-12368-22.ic3", 0x300001, 0x08000, CRC(1c1b6468) SHA1(568a38f4186167486e39ab4aa2c1ceffd0b81156) )
1013 
1014 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1015 ROM_END
1016 
1017 
1018 /* Game 23 - Ghouls and Ghosts (Genesis) */
1019 ROM_START( mt_gng ) /* Ghouls and Ghosts */
1020 	MEGATECH_BIOS
1021 
1022 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1023 	ROM_LOAD16_WORD_SWAP( "mp12605.ic1", 0x000000, 0x020000, CRC(1066c6ab) SHA1(c30e4442732bdb38c96d780542f8550a94d127b0) )
1024 	ROM_LOAD16_WORD_SWAP( "mpr12606.ic2", 0x080000, 0x020000, CRC(d0be7777) SHA1(a44b2a3d427f6973b5c1a3dcd8d1776366acb9f7) )
1025 	ROM_CONTINUE(0x020000,0x60000)
1026 	ROM_LOAD16_BYTE( "epr-12368-23.ic3", 0x300001, 0x08000, CRC(7ee58546) SHA1(ad5bb0934475eacdc5e354f67c96fe0d2512d33b) )
1027 
1028 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1029 ROM_END
1030 
1031 
1032 /* Game 24 - Super Hang-On (Genesis) */
1033 ROM_START( mt_shang ) /* Super Hang-On */
1034 	MEGATECH_BIOS
1035 
1036 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1037 	ROM_LOAD16_WORD_SWAP( "mpr-12640.ic1", 0x000000, 0x080000, CRC(2fe2cf62) SHA1(4728bcc847deb38b16338cbd0154837cd4a07b7d) )
1038 	ROM_LOAD16_BYTE( "epr-12368-24.ic2", 0x300001, 0x08000, CRC(6c2db7e3) SHA1(8de0a10ed9185c9e98f17784811a79d3ce8c4c03) )
1039 
1040 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1041 ROM_END
1042 
1043 
1044 /* Game 25 - Golden Axe (Genesis) */
1045 ROM_START( mt_gaxe ) /* Golden Axe */
1046 	MEGATECH_BIOS
1047 
1048 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1049 	ROM_LOAD16_WORD_SWAP( "12806.ic1", 0x000000, 0x080000, CRC(43456820) SHA1(2f7f1fcd979969ac99426f11ab99999a5494a121) )
1050 	ROM_LOAD16_BYTE( "epr-12368-25.ic2", 0x300001, 0x08000, CRC(1f07ed28) SHA1(9d54192f4c6c1f8a51c38a835c1dd1e4e3e8279e) )
1051 
1052 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1053 ROM_END
1054 
1055 
1056 /* Game 26 - Forgotten Worlds */
1057 /* why is this pre-swapped like a console dump?? */
1058 ROM_START( mt_fwrld ) /* Forgotten Worlds */
1059 	MEGATECH_BIOS
1060 
1061 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1062 	ROM_LOAD( "mpr-12672-h.ic1", 0x000000, 0x080000, CRC(d0ee6434) SHA1(8b9a37c206c332ef23dc71f09ec40e1a92b1f83a) )
1063 	ROM_LOAD16_BYTE( "epr-12368-26.ic2", 0x300001, 0x08000, CRC(4623b573) SHA1(29df4a5c5de66cd9cb7519e4f30000f7dddc2138) )
1064 
1065 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1066 ROM_END
1067 
1068 
1069 /* Game 27 - Mystic Defender */
1070 ROM_START( mt_mystd ) /* Mystic Defender */
1071 	MEGATECH_BIOS
1072 
1073 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1074 	ROM_LOAD16_WORD_SWAP( "mp12707.1", 0x000000, 0x080000, CRC(4f2c513d) SHA1(f9bb548b3688170fe18bb3f1b5b54182354143cf) )
1075 	ROM_LOAD16_BYTE( "epr-12368-27.ic2", 0x300001, 0x08000, CRC(caf46f78) SHA1(a9659e86a6a223646338cd8f29c346866e4406c7) )
1076 
1077 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1078 ROM_END
1079 
1080 
1081 /* Game 28 - The Revenge of Shinobi */
1082 ROM_START( mt_revsh ) /* The Revenge Of Shinobi */
1083 	MEGATECH_BIOS
1084 
1085 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1086 	ROM_LOAD16_WORD_SWAP( "mp12675.ic1", 0x000000, 0x080000, CRC(672a1d4d) SHA1(5fd0af14c8f2cf8ceab1ae61a5a19276d861289a) )
1087 	ROM_LOAD16_BYTE( "epr-12368-28.ic2", 0x300001, 0x08000, CRC(0d30bede) SHA1(73a090d84b78a570e02fb54a33666dcada52849b) )
1088 
1089 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1090 ROM_END
1091 
1092 
1093 /* Game 29 - Parlour Games (SMS) */
1094 ROM_START( mt_parlg ) /* Parlour Games */
1095 	MEGATECH_BIOS
1096 
1097 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1098 	ROM_LOAD16_WORD_SWAP( "mp11404.ic1", 0x000000, 0x020000, CRC(e030e66c) SHA1(06664daf208f07cb00b603b12eccfc3f01213a17) )
1099 	ROM_LOAD16_BYTE( "epr-12368-29.ic2", 0x300001, 0x08000, CRC(534151e8) SHA1(219238d90c1d3ac07ff64c9a2098b490fff68f04) )
1100 
1101 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASEFF )
1102 ROM_END
1103 
1104 
1105 /* Game 31 - Arnold Palmer Tournament Golf */
1106 ROM_START( mt_tgolf ) /* Arnold Palmer Tournament Golf */
1107 	MEGATECH_BIOS
1108 
1109 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1110 	ROM_LOAD16_WORD_SWAP( "mpr-12645f.ic1", 0x000000, 0x080000, CRC(c07ef8d2) SHA1(9d111fdc7bb92d52bfa048cd134aa488b4f475ef) )
1111 	ROM_LOAD16_BYTE( "epr-12368-31.ic2", 0x300001, 0x08000, CRC(30af7e4a) SHA1(baf91d527393dc90aba9371abcb1e690bcc83c7e) )
1112 
1113 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1114 ROM_END
1115 
1116 
1117 /* Game 32 - Super Real Basketball */
1118 /* why is this pre-swapped like a console dump?? */
1119 ROM_START( mt_srbb ) /* Super Real Basketball */
1120 	MEGATECH_BIOS
1121 
1122 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1123 	ROM_LOAD( "mpr-12904f.ic1", 0x000000, 0x080000, CRC(4346e11a) SHA1(c86725780027ef9783cb7884c8770cc030b0cd0d) )
1124 	ROM_LOAD16_BYTE( "epr-12368-32.ic2", 0x300001, 0x08000, CRC(f70adcbe) SHA1(d4412a7cd59fe282a1c6619aa1051a2a2e00e1aa) )
1125 
1126 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1127 ROM_END
1128 
1129 
1130 /* Game 35 - Tommy Lasorda Baseball */
1131 ROM_START( mt_tlbba ) /* Tommy Lasorda Baseball */
1132 	MEGATECH_BIOS
1133 
1134 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1135 	ROM_LOAD16_WORD_SWAP( "mp12706.ic1", 0x000000, 0x080000, CRC(8901214f) SHA1(f5ec166be1cf9b86623b9d7a78ec903b899da32a) )
1136 	ROM_LOAD16_BYTE( "epr-12368-35.ic2", 0x300001, 0x08000, CRC(67bbe482) SHA1(6fc283b22e68befabb44b2cc61a7f82a71d6f029) )
1137 
1138 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1139 ROM_END
1140 
1141 
1142 /* Game 36 - Columns */
1143 ROM_START( mt_cols ) /* Columns */
1144 	MEGATECH_BIOS
1145 
1146 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1147 	ROM_LOAD16_WORD_SWAP( "mp13193-t.ic1", 0x000000, 0x080000, CRC(8c770e2f) SHA1(02a3626025c511250a3f8fb3176eebccc646cda9) )
1148 	ROM_LOAD16_BYTE( "epr-12368-36.ic3",   0x300001, 0x008000,  CRC(a4b29bac) SHA1(c9be866ac96243897d09612fe17562e0481f66e3) )
1149 
1150 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1151 ROM_END
1152 
1153 
1154 /* Game 38 - ESWAT */
1155 ROM_START( mt_eswat ) /* ESWAT */
1156 	MEGATECH_BIOS
1157 
1158 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1159 	ROM_LOAD16_WORD_SWAP( "mp13192-h.ic1", 0x000000, 0x080000, CRC(82f458ef) SHA1(58444b783312def71ecffc4ad021b72a609685cb) )
1160 	ROM_LOAD16_BYTE( "epr-12368-38.ic2", 0x300001, 0x08000, CRC(43c5529b) SHA1(104f85adea6da1612c0aa96d553efcaa387d7aaf) )
1161 
1162 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1163 ROM_END
1164 
1165 
1166 /* Game 39 - Super Monaco Grand Prix (Genesis) */
1167 ROM_START( mt_smgp ) /* Super Monaco Grand Prix */
1168 	MEGATECH_BIOS
1169 
1170 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1171 	ROM_LOAD16_WORD_SWAP( "13250.ic1", 0x000000, 0x080000, CRC(189b885f) SHA1(31c06ffcb48b1604989a94e584261457de4f1f46) )
1172 	ROM_LOAD16_BYTE( "epr-12368-39.ic2", 0x300001, 0x08000, CRC(64b3ce25) SHA1(83a9f2432d146a712b037f96f261742f7dc810bb) )
1173 
1174 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1175 ROM_END
1176 
1177 
1178 /* Game 40 - Moon Walker */
1179 ROM_START( mt_mwalk ) /* Moon Walker */
1180 	MEGATECH_BIOS
1181 
1182 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1183 	ROM_LOAD16_WORD_SWAP( "mp13285a.ic1", 0x000000, 0x080000, CRC(189516e4) SHA1(2a79e07da2e831832b8d448cae87a833c85e67c9) )
1184 	ROM_LOAD16_BYTE( "epr-12368-40.ic2", 0x300001, 0x08000, CRC(0482378c) SHA1(734772f3ddb5ff82b76c3514d18a464b2bce8381) )
1185 
1186 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1187 ROM_END
1188 
1189 
1190 /* Game 41 - Crackdown */
1191 ROM_START( mt_crack ) /* Crackdown */
1192 	MEGATECH_BIOS
1193 
1194 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1195 	ROM_LOAD16_WORD_SWAP( "mp13578a-s.ic1", 0x000000, 0x080000, CRC(23f19893) SHA1(09aca793871e2246af4dc24925bc1eda8ff34446) )
1196 	ROM_LOAD16_BYTE( "epr-12368-41.ic2", 0x300001, 0x08000, CRC(3014acec) SHA1(07953e9ae5c23fc7e7d08993b215f4dfa88aa5d7) )
1197 
1198 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1199 ROM_END
1200 
1201 
1202 /* Game 43 - Shadow Dancer */
1203 ROM_START( mt_shado ) /* Shadow Dancer */
1204 	MEGATECH_BIOS
1205 
1206 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1207 	ROM_LOAD16_WORD_SWAP( "mpr-13571-s.ic1", 0x000000, 0x080000, CRC(56a29310) SHA1(55836177e4a1e2deb68408976b29d0282cf661a9) )
1208 	ROM_LOAD16_BYTE( "epr-12368-43.ic2", 0x300001, 0x08000, CRC(1116cbc7) SHA1(ba6dd21ceadeedf730b71b67acbd20d9067114f3) )
1209 
1210 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1211 ROM_END
1212 
1213 
1214 /* Game 44 - Arrow Flash */
1215 ROM_START( mt_arrow ) /* Arrow Flash */
1216 	MEGATECH_BIOS
1217 
1218 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1219 	ROM_LOAD16_WORD_SWAP( "mpr13396h.ic1", 0x000000, 0x080000, CRC(091226e3) SHA1(cb15c6277314f3c4a86b5ae5823f72811d5d269d) )
1220 	ROM_LOAD16_BYTE( "epr-12368-44.ic2", 0x300001, 0x08000, CRC(e653065d) SHA1(96b014fc4df8eb2188ac94ed0a778d974fe6dcad) )
1221 
1222 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1223 ROM_END
1224 
1225 
1226 /* Game 47 - Alien Storm */
1227 ROM_START( mt_astrm ) /* Alien Storm */
1228 	MEGATECH_BIOS
1229 
1230 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1231 	ROM_LOAD16_WORD_SWAP( "mp13941.ic1", 0x000000, 0x080000, CRC(d71b3ee6) SHA1(05f272dad243d132d517c303388248dc4c0482ed) )
1232 	ROM_LOAD16_BYTE( "epr-12368-47.ic2", 0x300001, 0x08000, CRC(31fb683d) SHA1(e356da020bbf817b97fb10c27f75cf5931edf4fc) )
1233 
1234 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1235 ROM_END
1236 
1237 
1238 /* Game 48 - Wrestle War */
1239 ROM_START( mt_wwar ) /* Wrestle War */
1240 	MEGATECH_BIOS
1241 
1242 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1243 	ROM_LOAD16_WORD_SWAP( "mpr-14025-f.ic1", 0x000000, 0x080000, CRC(26e899fe) SHA1(6d28e154ae2e4196097a2aa96c5acd5dfe7e3d2b) )
1244 	ROM_LOAD16_BYTE( "epr-12368-48.ic2", 0x300001, 0x08000, CRC(25817bc2) SHA1(ba1bbb952aff12fb4d3ecfb10d82c54128439395) )
1245 
1246 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1247 ROM_END
1248 
1249 
1250 /* Game 49 - Bonanza Bros. */
1251 // original dump of mpr-13905a.ic1 had a size of 0x100000, which is a double dump of the correct size 0x080000
1252 // the IC is a Fujitsu MB834200A MaskROM by 4Mb (512KB) in a DIP40-600mil package
1253 ROM_START( mt_bbros ) /* Bonanza Bros. */
1254 	MEGATECH_BIOS
1255 
1256 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1257 	ROM_LOAD16_WORD_SWAP( "mpr-13905a.ic1", 0x000000, 0x080000, CRC(6d617940) SHA1(11d5ff1c2db79632f6dea2edf97f56af2149cea4) )
1258 	ROM_LOAD16_BYTE( "epr-12368-49.ic2", 0x300001, 0x08000, CRC(c5101da2) SHA1(636f30043e2e9291e193ef9a2ead2e97a0bf7380) )
1259 
1260 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1261 ROM_END
1262 
1263 
1264 /* Game 51 - Streets of Rage */
1265 ROM_START( mt_srage ) /* Streets of Rage */
1266 	MEGATECH_BIOS
1267 
1268 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1269 	ROM_LOAD16_WORD_SWAP( "mpr-14125-s.ic1", 0x000000, 0x080000, CRC(db4ac746) SHA1(c7cc24e2329f279574513fa32bbf79f72f75aeea) )
1270 	ROM_LOAD16_BYTE( "epr-12368-51.ic2", 0x300001, 0x08000, CRC(49b7d6f4) SHA1(96e69851c92715e7daf35b184cf374147a8d2880) )
1271 
1272 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1273 ROM_END
1274 
1275 
1276 /* Game 52 - Sonic The Hedgehog (Genesis) */
1277 ROM_START( mt_sonic ) /* Sonic The Hedgehog */
1278 	MEGATECH_BIOS
1279 
1280 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1281 	ROM_LOAD16_WORD_SWAP( "mp13913.ic1", 0x000000, 0x080000, CRC(480b4b5c) SHA1(ab1dc1f738e3b2d0898a314b123fa71182bf572e) )
1282 	ROM_LOAD16_BYTE( "epr-12368-52.ic2", 0x300001, 0x8000,  CRC(6a69d20c) SHA1(e483b39ff6eca37dc192dc296d004049e220554a) )
1283 
1284 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1285 ROM_END
1286 
1287 
1288 ROM_START( mt_sonia ) /* Sonic (alt)*/
1289 	MEGATECH_BIOS
1290 
1291 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1292 	ROM_LOAD16_WORD_SWAP( "mp13933.ic1", 0x000000, 0x080000, CRC(13775004) SHA1(5decfd35944a2d0e7b996b9a4a12b616a309fd5e) )
1293 	ROM_LOAD16_BYTE( "epr-12368-52.ic2", 0x300001, 0x8000,  CRC(6a69d20c) SHA1(e483b39ff6eca37dc192dc296d004049e220554a) )
1294 
1295 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1296 ROM_END
1297 
1298 
1299 /* Game 53 - Fire Shark */
1300 	/* alt version with these roms exists, but the content is the same */
1301 	/* (6a221fd6) ep14706.ic1             mp14341.ic1  [even]     IDENTICAL */
1302 	/* (09fa48af) ep14707.ic2             mp14341.ic1  [odd]      IDENTICAL */
1303 
1304 ROM_START( mt_fshrk ) /* Fire Shark */
1305 	MEGATECH_BIOS
1306 
1307 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1308 	ROM_LOAD16_WORD_SWAP( "mp14341.ic1", 0x000000, 0x080000, CRC(04d65ebc) SHA1(24338aecdc52b6f416548be722ca475c83dbae96) )
1309 	ROM_LOAD16_BYTE( "epr-12368-53.ic2", 0x300001, 0x08000,  CRC(4fa61044) SHA1(7810deea221c10b0b2f5233443d81f4f1998ee58) )
1310 
1311 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1312 ROM_END
1313 
1314 
1315 /* Game 54 - Spiderman */
1316 ROM_START( mt_spman ) /* Spiderman */
1317 	MEGATECH_BIOS
1318 
1319 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1320 	ROM_LOAD16_WORD_SWAP( "mp14027-sm.ic1", 0x000000, 0x080000, CRC(e2c08a06) SHA1(39e592eafd47e2aa6edbb4845d44750057bff890) )
1321 	ROM_LOAD16_BYTE( "epr-12368-54.ic2", 0x300001, 0x08000,  CRC(30b68988) SHA1(04eeb0fad732a791b6bc0c0846306d567573649f) )
1322 
1323 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1324 ROM_END
1325 
1326 
1327 /* Game 55 - California Games */
1328 ROM_START( mt_calga ) /* California Games */
1329 	MEGATECH_BIOS
1330 
1331 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1332 	ROM_LOAD16_BYTE( "epr-14494.ic1", 0x000001, 0x040000, CRC(cbe58b1b) SHA1(ea067fc08e644c993f8d13731425c9296c1a2a75) )
1333 	ROM_LOAD16_BYTE( "epr-14495.ic2", 0x000000, 0x040000, CRC(cb956f4f) SHA1(3574c496b79aefdec7d02975490ebe3bb373bc60) )
1334 	ROM_LOAD16_BYTE( "epr-12368-55.ic3", 0x300001, 0x08000, CRC(6f7dd8f5) SHA1(a6cb1aa8c3635738dd9e4d3e0d729d089fd9b599) )
1335 
1336 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1337 ROM_END
1338 
1339 
1340 /* Game 57 - Golden Axe 2 (Genesis) */
1341 ROM_START( mt_gaxe2 ) /* Golden Axe 2 */
1342 	MEGATECH_BIOS
1343 
1344 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1345 	ROM_LOAD16_WORD_SWAP( "mp14272.ic1", 0x000000, 0x080000, CRC(d4784cae) SHA1(b6c286027d06fd850016a2a1ee1f1aeea080c3bb) )
1346 	ROM_LOAD16_BYTE( "epr-12368-57.ic2", 0x300001, 0x08000, CRC(dc9b4433) SHA1(efd3a598569010cdc4bf38ecbf9ed1b4e14ffe36) )
1347 
1348 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1349 ROM_END
1350 
1351 
1352 /* Game 58 - Sports Talk Football */
1353 ROM_START( mt_stf ) /* Sports Talk Football */
1354 	MEGATECH_BIOS
1355 
1356 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1357 	ROM_LOAD16_WORD_SWAP( "mp14356a-f.ic1", 0x000000, 0x100000, CRC(20cf32f6) SHA1(752314346a7a98b3808b3814609e024dc0a4108c) )
1358 	ROM_LOAD16_BYTE( "epr-12368-58.ic2", 0x300001, 0x08000, CRC(dce2708e) SHA1(fcebb1899ee11468f6bda705899f074e7de9d723) )
1359 
1360 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1361 ROM_END
1362 
1363 
1364 /* Game 59 - Mario Lemieux Hockey */
1365 ROM_START( mt_mlh ) /* Mario Lemieux Hockey */
1366 	MEGATECH_BIOS
1367 
1368 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1369 	ROM_LOAD16_WORD_SWAP( "mpr-14376-h.ic1", 0x000000, 0x80000, CRC(aa9be87e) SHA1(dceed94eaeb30e534f6953a4bc25ff37673b1e6b) )
1370 	ROM_LOAD16_BYTE( "epr-12368-59.ic2", 0x300001, 0x08000, CRC(6d47b438) SHA1(0a145f6438e4e55c957ae559663c37662b685246) )
1371 
1372 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1373 ROM_END
1374 
1375 
1376 /* Game 60 - Kid Chameleon */
1377 ROM_START( mt_kcham ) /* Kid Chameleon */
1378 	MEGATECH_BIOS
1379 
1380 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1381 	ROM_LOAD16_WORD_SWAP( "mp14557.ic1", 0x000000, 0x100000, CRC(e1a889a4) SHA1(a2768eacafc47d371e5276f0cce4b12b6041337a) )
1382 	ROM_LOAD16_BYTE( "epr-12368-60.ic2", 0x300001, 0x08000, CRC(a8e4af18) SHA1(dfa49f6ec4047718f33dba1180f6204dbaff884c) )
1383 
1384 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1385 ROM_END
1386 
1387 
1388 /* Game 61 - Turbo Outrun */
1389 // original dump of mpr-14674.ic1 had CRC(c2b9a802) SHA1(108cc844c944125f9d271a2f2db094301294e8c2)
1390 // with the byte at offset 3 being F6 instead of Fe, this seems like a bad dump when compared to the Genesis rom which
1391 // has been verified on multiple carts, chances are the ROM had developed a fault.
1392 ROM_START( mt_tout ) /* Turbo Outrun */
1393 	MEGATECH_BIOS
1394 
1395 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1396 	ROM_LOAD16_WORD_SWAP( "mpr-14674.ic1", 0x000000, 0x080000, CRC(453712a2) SHA1(5d2c8430a9a14aac7f19c22617539b0503ab92cd) )
1397 	ROM_LOAD16_BYTE( "epr-12368-61.ic2", 0x300001, 0x08000, CRC(4aa0b2a2) SHA1(bce03f88d6cfd02683d51c28058f6229fda13b49) )
1398 
1399 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1400 ROM_END
1401 
1402 
1403 /* Game 62 - Sonic The Hedgehog 2 */
1404 ROM_START( mt_soni2 ) /* Sonic The Hedgehog 2 */
1405 	MEGATECH_BIOS
1406 
1407 	ROM_REGION16_BE( 0x400000, "mt_slot1:cart", ROMREGION_ERASE00 )
1408 	ROM_LOAD16_WORD_SWAP( "mp15000a-f.ic1", 0x000000, 0x100000, CRC(679ebb49) SHA1(557482064677702454562f753460993067ef9e16) )
1409 	ROM_LOAD16_BYTE( "epr-12368-62.ic2", 0x300001, 0x08000, CRC(14a8566f) SHA1(d1d14162144bf068ddd19e9736477ff98fb43f9e) )
1410 
1411 	ROM_REGION( 0x01, "sms_pin", ROMREGION_ERASE00 )
1412 ROM_END
1413 
1414 
1415 
1416 /* nn */ /* nn is part of the instruction rom name, should there be a game for each number? */
1417 /* -- */ CONS( 1989, megatech, 0, 0,     megatech_multislot, megatech, mtech_state, init_mt_slot,      "Sega",                  "Mega-Tech", MACHINE_IS_BIOS_ROOT )
1418 /* 01 */ GAME( 1988, mt_beast, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Altered Beast (Mega-Tech)", MACHINE_NOT_WORKING )
1419 /* 02 */ GAME( 1988, mt_shar2, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Space Harrier II (Mega-Tech)", MACHINE_NOT_WORKING )
1420 /* 03 */ GAME( 1988, mt_stbld, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Super Thunder Blade (Mega-Tech)", MACHINE_NOT_WORKING )
1421 /* 04 */ GAME( 1987, mt_ggolf, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Great Golf (Mega-Tech, SMS based)", MACHINE_NOT_WORKING ) /* sms! */
1422 /* 05 */ GAME( 198?, mt_gsocr, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Great Soccer (Mega-Tech, SMS based)", MACHINE_NOT_WORKING ) /* sms! also bad */
1423 /* 06 */ GAME( 1987, mt_orun,  megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Out Run (Mega-Tech, SMS based)", MACHINE_NOT_WORKING ) /* sms! */
1424 /* 07 */ GAME( 1987, mt_asyn,  megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Alien Syndrome (Mega-Tech, SMS based)", MACHINE_NOT_WORKING ) /* sms! */
1425 /* 08 */ GAME( 1987, mt_shnbi, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Shinobi (Mega-Tech, SMS based)", MACHINE_NOT_WORKING) /* sms */
1426 /* 09 */ GAME( 1987, mt_fz,    megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Fantasy Zone (Mega-Tech, SMS based)", MACHINE_NOT_WORKING) /* sms */
1427 /* 10 */ GAME( 1987, mt_aftrb, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "After Burner (Mega-Tech, SMS based)", MACHINE_NOT_WORKING) /* sms */
1428 /* 11 */ GAME( 1989, mt_tfor2, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Techno Soft / Sega",    "Thunder Force II MD (Mega-Tech)", MACHINE_NOT_WORKING )
1429 /* 12 */ // unknown
1430 /* 13 */ GAME( 1986, mt_astro, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Astro Warrior (Mega-Tech, SMS based)", MACHINE_NOT_WORKING ) /* sms! */
1431 /* 14 */ // unknown
1432 /* 15 */ // unknown
1433 /* 16 */ // unknown
1434 /* 17 */ // unknown
1435 /* 18 */ // Kung Fu Kid (sms)
1436 /* 19 */ GAME( 1987, mt_gfoot, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Great Football (Mega-Tech, SMS based)", MACHINE_NOT_WORKING ) /* sms! */
1437 /* 20 */ GAME( 1989, mt_lastb, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Last Battle (Mega-Tech)", MACHINE_NOT_WORKING )
1438 /* 21 */ GAME( 1989, mt_wcsoc, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "World Championship Soccer (Mega-Tech)", MACHINE_NOT_WORKING )
1439 /* 22 */ GAME( 1989, mt_tetri, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Tetris (Mega-Tech)", MACHINE_NOT_WORKING )
1440 /* 23 */ GAME( 1989, mt_gng,   megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Capcom / Sega",         "Ghouls'n Ghosts (Mega-Tech)", MACHINE_NOT_WORKING )
1441 /* 24 */ GAME( 1989, mt_shang, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Super Hang-On (Mega-Tech)", MACHINE_NOT_WORKING )
1442 /* 25 */ GAME( 1989, mt_gaxe,  megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Golden Axe (Mega-Tech)", MACHINE_NOT_WORKING )
1443 /* 26 */ GAME( 1989, mt_fwrld, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Forgotten Worlds (Mega-Tech)", MACHINE_NOT_WORKING )
1444 /* 27 */ GAME( 1989, mt_mystd, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Mystic Defender (Mega-Tech)", MACHINE_NOT_WORKING )
1445 /* 28 */ GAME( 1989, mt_revsh, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "The Revenge of Shinobi (Mega-Tech)", MACHINE_NOT_WORKING )
1446 /* 29 */ GAME( 1987, mt_parlg, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Parlour Games (Mega-Tech, SMS based)", MACHINE_NOT_WORKING ) /* sms! */
1447 /* 30 */ // unknown
1448 /* 31 */ GAME( 1989, mt_tgolf, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Arnold Palmer Tournament Golf (Mega-Tech)", MACHINE_NOT_WORKING )
1449 /* 32 */ GAME( 1989, mt_srbb,  megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Super Real Basketball (Mega-Tech)", MACHINE_NOT_WORKING )
1450 /* 33 */ // unknown
1451 /* 34 */ // unknown
1452 /* 35 */ GAME( 1989, mt_tlbba, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Tommy Lasorda Baseball (Mega-Tech)", MACHINE_NOT_WORKING )
1453 /* 36 */ GAME( 1990, mt_cols,  megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Columns (Mega-Tech)", MACHINE_NOT_WORKING )
1454 /* 37 */ // unknown
1455 /* 38 */ GAME( 1990, mt_eswat, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Cyber Police ESWAT: Enhanced Special Weapons and Tactics (Mega-Tech)", MACHINE_NOT_WORKING )
1456 /* 39 */ GAME( 1990, mt_smgp,  megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Super Monaco GP (Mega-Tech)", MACHINE_NOT_WORKING )
1457 /* 40 */ GAME( 1990, mt_mwalk, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Michael Jackson's Moonwalker (Mega-Tech)", MACHINE_NOT_WORKING )
1458 /* 41 */ GAME( 1990, mt_crack, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Crack Down (Mega-Tech)", MACHINE_NOT_WORKING )
1459 /* 42 */ // unknown
1460 /* 43 */ GAME( 1990, mt_shado, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Shadow Dancer (Mega-Tech)", MACHINE_NOT_WORKING )
1461 /* 44 */ GAME( 1990, mt_arrow, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Arrow Flash (Mega-Tech)", MACHINE_NOT_WORKING )
1462 /* 45 */ // unknown
1463 /* 46 */ // unknown
1464 /* 47 */ GAME( 1990, mt_astrm, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Alien Storm (Mega-Tech)", MACHINE_NOT_WORKING )
1465 /* 48 */ GAME( 1991, mt_wwar,  megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Wrestle War (Mega-Tech)", MACHINE_NOT_WORKING ) /* Copyright 1989, 1991 Sega */
1466 /* 49 */ GAME( 1991, mt_bbros, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Bonanza Bros. (Mega-Tech)", MACHINE_NOT_WORKING )
1467 /* 50 */ // unknown
1468 /* 51 */ GAME( 1991, mt_srage, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Streets of Rage (Mega-Tech)", MACHINE_NOT_WORKING )
1469 /* 52 */ GAME( 1991, mt_sonic, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Sonic The Hedgehog (Mega-Tech, set 1)", MACHINE_NOT_WORKING )
1470 /*    */ GAME( 1991, mt_sonia, mt_sonic, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Sonic The Hedgehog (Mega-Tech, set 2)", MACHINE_NOT_WORKING )
1471 /* 53 */ GAME( 1990, mt_fshrk, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Toaplan / Sega",        "Fire Shark (Mega-Tech)", MACHINE_NOT_WORKING )
1472 /* 54 */ GAME( 1991, mt_spman, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega / Marvel",         "Spider-Man vs The Kingpin (Mega-Tech)", MACHINE_NOT_WORKING )
1473 /* 55 */ GAME( 1991, mt_calga, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "California Games (Mega-Tech)", MACHINE_NOT_WORKING )
1474 /* 56 */ // unknown
1475 /* 57 */ GAME( 1991, mt_gaxe2, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Golden Axe II (Mega-Tech)", MACHINE_NOT_WORKING )
1476 /* 58 */ GAME( 1991, mt_stf,   megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Joe Montana II: Sports Talk Football (Mega-Tech)", MACHINE_NOT_WORKING )
1477 /* 59 */ GAME( 1991, mt_mlh,   megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Mario Lemieux Hockey (Mega-Tech)", MACHINE_NOT_WORKING )
1478 /* 60 */ GAME( 1992, mt_kcham, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Kid Chameleon (Mega-Tech)", MACHINE_NOT_WORKING )
1479 /* 61 */ GAME( 1992, mt_tout,  megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Turbo Outrun (Mega-Tech)", MACHINE_NOT_WORKING )
1480 /* 62 */ GAME( 1992, mt_soni2, megatech, megatech_fixedslot, megatech, mtech_state, init_mt_crt, ROT0, "Sega",                  "Sonic The Hedgehog 2 (Mega-Tech)", MACHINE_NOT_WORKING )
1481 
1482 /* Games seen in auction (#122011114579), but no confirmed number
1483 - Action Fighter
1484 - Enduro Racer
1485 
1486 Games seen in auction (#122011114579) known not to be original but manufactured/bootlegged on actual megatech carts.
1487 The labels are noticeably different than expected.  Be careful if thinking of obtaining!
1488 - After Burner II (GEN)
1489 - Castle of Illusion Starring Mickey Mouse (GEN)
1490 - Double Dragon (SMS)
1491 - Kung Fu Kid (SMS)
1492 - Quackshot Starring Donald Duck (GEN)
1493 - Wonderboy (SMS)
1494 
1495 more? */
1496