trunk/src/mame/drivers/tumbleb.c
| r17936 | r17937 | |
| 1361 | 1361 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1362 | 1362 | INPUT_PORTS_END |
| 1363 | 1363 | |
| 1364 | |
| 1365 | static INPUT_PORTS_START( magicbal ) |
| 1366 | PORT_START("PLAYERS") |
| 1367 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) |
| 1368 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) |
| 1369 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) |
| 1370 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) |
| 1371 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) |
| 1372 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) |
| 1373 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) |
| 1374 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) |
| 1375 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) |
| 1376 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) |
| 1377 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) |
| 1378 | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) |
| 1379 | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) |
| 1380 | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) |
| 1381 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) |
| 1382 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 ) |
| 1383 | |
| 1384 | PORT_START("SYSTEM") |
| 1385 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 1386 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) |
| 1387 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1388 | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") // to be confirmed |
| 1389 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1390 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1391 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1392 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1393 | |
| 1394 | PORT_START("DSW") |
| 1395 | PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) |
| 1396 | PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) |
| 1397 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1398 | PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) |
| 1399 | PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) |
| 1400 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1401 | PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) |
| 1402 | PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) |
| 1403 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1404 | PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) |
| 1405 | PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) |
| 1406 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1407 | PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) |
| 1408 | PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) |
| 1409 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1410 | PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) |
| 1411 | PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) |
| 1412 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1413 | PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) |
| 1414 | PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) |
| 1415 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1416 | PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) |
| 1417 | PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) |
| 1418 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1419 | |
| 1420 | PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) |
| 1421 | PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) |
| 1422 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1423 | PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) |
| 1424 | PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) |
| 1425 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1426 | PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) |
| 1427 | PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) |
| 1428 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1429 | PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) |
| 1430 | PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) |
| 1431 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1432 | PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) |
| 1433 | PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) |
| 1434 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1435 | PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) |
| 1436 | PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) |
| 1437 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1438 | PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) |
| 1439 | PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) |
| 1440 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1441 | PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) |
| 1442 | PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) |
| 1443 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1444 | INPUT_PORTS_END |
| 1445 | |
| 1364 | 1446 | static INPUT_PORTS_START( wlstar ) |
| 1365 | 1447 | PORT_START("PLAYERS") |
| 1366 | 1448 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) |
| r17936 | r17937 | |
| 2154 | 2236 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.10) |
| 2155 | 2237 | MACHINE_CONFIG_END |
| 2156 | 2238 | |
| 2157 | | static INTERRUPT_GEN( magicbal_interrupt ) |
| 2158 | | { |
| 2159 | | address_space *space = device->machine().device<legacy_cpu_device>("maincpu")->space(); |
| 2160 | | static int i=0x0000; |
| 2161 | | i^=0xffff; |
| 2162 | 2239 | |
| 2163 | | space->write_word( 0x12189a, i,0xffff ); |
| 2164 | | space->write_word( 0x12189c, i,0xffff ); |
| 2165 | | space->write_word( 0x12189e, i,0xffff ); |
| 2166 | | } |
| 2167 | 2240 | |
| 2168 | 2241 | |
| 2169 | | static MACHINE_CONFIG_DERIVED( magicbal, metlsavr ) |
| 2170 | | MCFG_CPU_MODIFY("maincpu") |
| 2171 | | MCFG_CPU_VBLANK_INT("screen", magicbal_interrupt) |
| 2172 | | MACHINE_CONFIG_END |
| 2173 | | |
| 2174 | | |
| 2175 | | |
| 2176 | 2242 | static MACHINE_CONFIG_START( suprtrio, tumbleb_state ) |
| 2177 | 2243 | |
| 2178 | 2244 | /* basic machine hardware */ |
| r17936 | r17937 | |
| 2883 | 2949 | |
| 2884 | 2950 | ROM_REGION16_BE( 0x200, "user1", ROMREGION_ERASE00 ) /* Data from Shared RAM */ |
| 2885 | 2951 | /* this is not a real rom but instead the data extracted from shared ram, the MCU puts it there */ |
| 2886 | | // ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200, CRC(17aa17a9) SHA1(5b83159c62473f79e7fced0d86acfaf697ad5537) ) |
| 2952 | ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200, CRC(fb67d20d) SHA1(63f2862a7ded075d501e21919f211d156bef4fb4) ) |
| 2887 | 2953 | |
| 2888 | 2954 | ROM_REGION( 0x040000, "oki", 0 ) /* Samples */ |
| 2889 | 2955 | ROM_LOAD( "uc1", 0x00000, 0x40000, CRC(6e4cec27) SHA1(9dd07684502300589e957d1bcde0239880eaada2) ) |
| r17936 | r17937 | |
| 3211 | 3277 | |
| 3212 | 3278 | DRIVER_INIT_MEMBER(tumbleb_state,htchctch) |
| 3213 | 3279 | { |
| 3214 | | |
| 3215 | | // UINT16 *HCROM = (UINT16*)memregion("maincpu")->base(); |
| 3216 | 3280 | UINT16 *PROTDATA = (UINT16*)memregion("user1")->base(); |
| 3217 | 3281 | int i, len = memregion("user1")->bytes(); |
| 3218 | 3282 | /* simulate RAM initialization done by the protection MCU */ |
| 3219 | | /* verified on real hardware */ |
| 3220 | | // static const UINT16 htchctch_mcu68k[] = |
| 3221 | | // { |
| 3222 | | // /* moved to protdata.bin file .. */ |
| 3223 | | // }; |
| 3224 | 3283 | |
| 3225 | | |
| 3226 | | // for (i = 0; i < sizeof(htchctch_mcu68k) / sizeof(htchctch_mcu68k[0]); i++) |
| 3227 | | // m_mainram[0x000/2 + i] = htchctch_mcu68k[i]; |
| 3228 | | |
| 3229 | 3284 | for (i = 0; i < len / 2; i++) |
| 3230 | 3285 | m_mainram[0x000/2 + i] = PROTDATA[i]; |
| 3231 | 3286 | |
| 3232 | | |
| 3233 | | |
| 3234 | 3287 | tumblepb_gfx1_rearrange(machine()); |
| 3235 | 3288 | |
| 3236 | | /* trojan.. */ |
| 3237 | | #if 0 |
| 3238 | | /* patch the irq 6 vector */ |
| 3239 | | HCROM[0x00078/2] = 0x0001; |
| 3240 | | HCROM[0x0007a/2] = 0xe000; |
| 3241 | | |
| 3242 | | /* our new interrupt code */ |
| 3243 | | |
| 3244 | | /* put registers on stack */ |
| 3245 | | HCROM[0x1e000/2] = 0x48e7; |
| 3246 | | HCROM[0x1e002/2] = 0xfffe; |
| 3247 | | |
| 3248 | | /* put the address we want to copy FROM in A0 */ |
| 3249 | | HCROM[0x1e004/2] = 0x41f9; |
| 3250 | | HCROM[0x1e006/2] = 0x0012; |
| 3251 | | HCROM[0x1e008/2] = 0x0000; |
| 3252 | | |
| 3253 | | /* put the address we want to copy TO in A1 */ |
| 3254 | | HCROM[0x1e00a/2] = 0x43f9; |
| 3255 | | HCROM[0x1e00c/2] = 0x0012; |
| 3256 | | HCROM[0x1e00e/2] = 0x2000; |
| 3257 | | |
| 3258 | | /* put the number of words we want to copy into D0 */ |
| 3259 | | HCROM[0x1e010/2] = 0x203c; |
| 3260 | | HCROM[0x1e012/2] = 0x0000; |
| 3261 | | HCROM[0x1e014/2] = 0x0100; |
| 3262 | | |
| 3263 | | /* copy a word */ |
| 3264 | | HCROM[0x1e016/2] = 0x32d8; |
| 3265 | | |
| 3266 | | /* decrease counter d0 */ |
| 3267 | | HCROM[0x1e018/2] = 0x5380; |
| 3268 | | |
| 3269 | | /* compare d0 to 0 */ |
| 3270 | | HCROM[0x1e01a/2] = 0x0c80; |
| 3271 | | HCROM[0x1e01c/2] = 0x0000; |
| 3272 | | HCROM[0x1e01e/2] = 0x0000; |
| 3273 | | |
| 3274 | | /* if its not 0 then branch back */ |
| 3275 | | HCROM[0x1e020/2] = 0x66f4; |
| 3276 | | |
| 3277 | | |
| 3278 | | |
| 3279 | | |
| 3280 | | /* jump to drawing subroutine */ |
| 3281 | | HCROM[0x1e022/2] = 0x4eb9; |
| 3282 | | HCROM[0x1e024/2] = 0x0001; |
| 3283 | | HCROM[0x1e026/2] = 0xe100; |
| 3284 | | |
| 3285 | | /* get back registers from stack*/ |
| 3286 | | HCROM[0x1e028/2] = 0x4cdf; |
| 3287 | | HCROM[0x1e02a/2] = 0x7fff; |
| 3288 | | |
| 3289 | | /* jump to where the interrupt vector was copied to */ |
| 3290 | | HCROM[0x1e02c/2] = 0x4ef9; |
| 3291 | | HCROM[0x1e02e/2] = 0x0012; |
| 3292 | | HCROM[0x1e030/2] = 0x2000; |
| 3293 | | /* we're back in the game code */ |
| 3294 | | |
| 3295 | | |
| 3296 | | /* these subroutines are called from the new interrupt code above, i use them to draw */ |
| 3297 | | |
| 3298 | | /* DRAWING SUBROUTINE */ |
| 3299 | | |
| 3300 | | /* put the address we want to write to in A0 */ |
| 3301 | | HCROM[0x1e100/2] = 0x41f9; |
| 3302 | | HCROM[0x1e102/2] = 0x0032; |
| 3303 | | HCROM[0x1e104/2] = 0x0104; |
| 3304 | | |
| 3305 | | /* put the character we want to draw into D0 */ |
| 3306 | | /* this bit isn't needed .. we end up using d4 then copying it over */ |
| 3307 | | HCROM[0x1e106/2] = 0x203c; |
| 3308 | | HCROM[0x1e108/2] = 0x0000; |
| 3309 | | HCROM[0x1e10a/2] = 0x0007; |
| 3310 | | |
| 3311 | | /* put the address we to read to in A2 */ |
| 3312 | | HCROM[0x1e10c/2] = 0x45f9; |
| 3313 | | HCROM[0x1e10e/2] = 0x0012; |
| 3314 | | // HCROM[0x1e110/2] = 0x2000; |
| 3315 | | HCROM[0x1e110/2] = 0x2000+0x60+0x60+0x60+0x60+0x60; |
| 3316 | | |
| 3317 | | /* put the number of rows into D3 */ |
| 3318 | | HCROM[0x1e112/2] = 0x263c; |
| 3319 | | HCROM[0x1e114/2] = 0x0000; |
| 3320 | | HCROM[0x1e116/2] = 0x000c; |
| 3321 | | |
| 3322 | | /* put the number of bytes per row into D2 */ |
| 3323 | | HCROM[0x1e118/2] = 0x243c; |
| 3324 | | HCROM[0x1e11a/2] = 0x0000; |
| 3325 | | HCROM[0x1e11c/2] = 0x0008; |
| 3326 | | |
| 3327 | | |
| 3328 | | // move content of a2 to d4 (byte) |
| 3329 | | HCROM[0x1e11e/2] = 0x1812; |
| 3330 | | |
| 3331 | | HCROM[0x1e120/2] = 0xe84c; // shift d4 right by 4 |
| 3332 | | |
| 3333 | | HCROM[0x1e122/2] = 0x0244; // mask with 0x000f |
| 3334 | | HCROM[0x1e124/2] = 0x000f; // |
| 3335 | | |
| 3336 | | HCROM[0x1e126/2] = 0x3004; // d4 -> d0 |
| 3337 | | |
| 3338 | | /* jump to character draw to draw first bit */ |
| 3339 | | HCROM[0x1e128/2] = 0x4eb9; |
| 3340 | | HCROM[0x1e12a/2] = 0x0001; |
| 3341 | | HCROM[0x1e12c/2] = 0xe200; |
| 3342 | | |
| 3343 | | /* add 2 to draw address a0 */ |
| 3344 | | HCROM[0x1e12e/2] = 0xd1fc; |
| 3345 | | HCROM[0x1e130/2] = 0x0000; |
| 3346 | | HCROM[0x1e132/2] = 0x0002; |
| 3347 | | |
| 3348 | | |
| 3349 | | // move content of a2 to d4 (byte) |
| 3350 | | HCROM[0x1e134/2] = 0x1812; |
| 3351 | | |
| 3352 | | HCROM[0x1e136/2] = 0x0244; // mask with 0x000f |
| 3353 | | HCROM[0x1e138/2] = 0x000f; // |
| 3354 | | |
| 3355 | | HCROM[0x1e13a/2] = 0x3004; // d4 -> d0 |
| 3356 | | |
| 3357 | | /* jump to character draw to draw second bit */ |
| 3358 | | HCROM[0x1e13c/2] = 0x4eb9; |
| 3359 | | HCROM[0x1e13e/2] = 0x0001; |
| 3360 | | HCROM[0x1e140/2] = 0xe200; |
| 3361 | | |
| 3362 | | /* add 2 to draw address a0 */ |
| 3363 | | HCROM[0x1e142/2] = 0xd1fc; |
| 3364 | | HCROM[0x1e144/2] = 0x0000; |
| 3365 | | HCROM[0x1e146/2] = 0x0002; |
| 3366 | | |
| 3367 | | /* add 1 to read address a2 */ |
| 3368 | | HCROM[0x1e148/2] = 0xd5fc; |
| 3369 | | HCROM[0x1e14a/2] = 0x0000; |
| 3370 | | HCROM[0x1e14c/2] = 0x0001; |
| 3371 | | |
| 3372 | | // brr |
| 3373 | | /* decrease counter d2 */ |
| 3374 | | HCROM[0x1e14e/2] = 0x5382; |
| 3375 | | |
| 3376 | | /* compare d2 to 0 */ |
| 3377 | | HCROM[0x1e150/2] = 0x0c82; |
| 3378 | | HCROM[0x1e152/2] = 0x0000; |
| 3379 | | HCROM[0x1e154/2] = 0x0000; |
| 3380 | | |
| 3381 | | /* if its not 0 then branch back */ |
| 3382 | | HCROM[0x1e156/2] = 0x66c6; |
| 3383 | | |
| 3384 | | /* add 0xe0 to draw address a0 (0x100-0x20) */ |
| 3385 | | HCROM[0x1e158/2] = 0xd1fc; |
| 3386 | | HCROM[0x1e15a/2] = 0x0000; |
| 3387 | | HCROM[0x1e15c/2] = 0x00e0; |
| 3388 | | |
| 3389 | | /* decrease counter d2 */ |
| 3390 | | HCROM[0x1e15e/2] = 0x5383; |
| 3391 | | |
| 3392 | | /* compare d2 to 0 */ |
| 3393 | | HCROM[0x1e160/2] = 0x0c83; |
| 3394 | | HCROM[0x1e162/2] = 0x0000; |
| 3395 | | HCROM[0x1e164/2] = 0x0000; |
| 3396 | | |
| 3397 | | /* if its not 0 then branch back */ |
| 3398 | | HCROM[0x1e166/2] = 0x66b0; |
| 3399 | | |
| 3400 | | HCROM[0x1e168/2] = 0x4e75; // rts |
| 3401 | | |
| 3402 | | /* DRAW CHARACTER SUBROUTINE, note, this won't restore a1,d1, don't other places! */ |
| 3403 | | |
| 3404 | | /* move address into A0->A1 for use by this subroutine */ |
| 3405 | | HCROM[0x1e200/2] = 0x2248; |
| 3406 | | |
| 3407 | | /* move address into D0->D1 for top half of character */ |
| 3408 | | HCROM[0x1e202/2] = 0x2200; |
| 3409 | | |
| 3410 | | /* add 0x30 to d1 to get the REAL tile code */ |
| 3411 | | HCROM[0x1e204/2] = 0x0681; |
| 3412 | | HCROM[0x1e206/2] = 0x0000; |
| 3413 | | HCROM[0x1e208/2] = 0x0030; |
| 3414 | | |
| 3415 | | /* or with 0xf000 to add the tile attribute */ |
| 3416 | | HCROM[0x1e20a/2] = 0x0081; |
| 3417 | | HCROM[0x1e20c/2] = 0x0000; |
| 3418 | | HCROM[0x1e20e/2] = 0xf000; |
| 3419 | | |
| 3420 | | /* write d1 -> a1 for TOP half */ |
| 3421 | | HCROM[0x1e210/2] = 0x32c1; // not ideal .. we don't need to increase a1 |
| 3422 | | |
| 3423 | | /* move address into A0->A1 for use by this subroutine */ |
| 3424 | | HCROM[0x1e212/2] = 0x2248; |
| 3425 | | |
| 3426 | | /* add 0x80 to the address so we have the bottom location */ |
| 3427 | | HCROM[0x1e214/2] = 0xd2fc; |
| 3428 | | HCROM[0x1e216/2] = 0x0080; |
| 3429 | | |
| 3430 | | /* move address into D0->D1 for bottom half of character */ |
| 3431 | | HCROM[0x1e218/2] = 0x2200; |
| 3432 | | |
| 3433 | | /* add 0x54 to d1 to get the REAL tile code for bottom half */ |
| 3434 | | HCROM[0x1e21a/2] = 0x0681; |
| 3435 | | HCROM[0x1e21c/2] = 0x0000; |
| 3436 | | HCROM[0x1e21e/2] = 0x0054; |
| 3437 | | |
| 3438 | | /* or with 0xf000 to add the tile attribute */ |
| 3439 | | HCROM[0x1e220/2] = 0x0081; |
| 3440 | | HCROM[0x1e222/2] = 0x0000; |
| 3441 | | HCROM[0x1e224/2] = 0xf000; |
| 3442 | | |
| 3443 | | /* write d1 -> a1 for BOTTOM half */ |
| 3444 | | HCROM[0x1e226/2] = 0x32c1; // not ideal .. we don't need to increase a1 |
| 3445 | | |
| 3446 | | |
| 3447 | | HCROM[0x1e228/2] = 0x4e75; |
| 3448 | | |
| 3449 | | machine().device("maincpu")->memory().space(AS_PROGRAM)->nop_write(0x140000, 0x1407ff); // kill palette writes as the interrupt code we don't have controls them |
| 3450 | | |
| 3451 | | |
| 3452 | | { |
| 3453 | | FILE *fp; |
| 3454 | | |
| 3455 | | fp=fopen("hcatch", "w+b"); |
| 3456 | | if (fp) |
| 3457 | | { |
| 3458 | | fwrite(HCROM, 0x40000, 1, fp); |
| 3459 | | fclose(fp); |
| 3460 | | } |
| 3461 | | } |
| 3462 | | #endif |
| 3463 | | |
| 3464 | 3289 | } |
| 3465 | 3290 | |
| 3466 | 3291 | |
| r17936 | r17937 | |
| 3537 | 3362 | tumblepb_gfx1_rearrange(machine()); |
| 3538 | 3363 | } |
| 3539 | 3364 | |
| 3540 | | DRIVER_INIT_MEMBER(tumbleb_state,magicbal) |
| 3541 | | { |
| 3542 | | DRIVER_INIT_CALL(htchctch); |
| 3543 | 3365 | |
| 3544 | | // wipe out the palette handler for now |
| 3545 | | machine().device("maincpu")->memory().space(AS_PROGRAM)->install_ram(0x140000, 0x140fff); |
| 3546 | 3366 | |
| 3547 | | /* slightly different banking */ |
| 3548 | | machine().device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0x100002, 0x100003, write16_delegate(FUNC(tumbleb_state::chokchok_tilebank_w),this)); |
| 3549 | | } |
| 3550 | | |
| 3551 | | |
| 3552 | 3367 | /******************************************************************************/ |
| 3553 | 3368 | |
| 3554 | 3369 | /* Misc 'bootleg' hardware - close to base Tumble Pop */ |
| r17936 | r17937 | |
| 3564 | 3379 | |
| 3565 | 3380 | /* First Amusement / Mijin / SemiCom hardware (MCU protected) */ |
| 3566 | 3381 | GAME( 1994, metlsavr, 0, metlsavr, metlsavr, tumbleb_state, chokchok, ROT0, "First Amusement", "Metal Saver", GAME_SUPPORTS_SAVE ) |
| 3567 | | GAME( 1994, magicbal, 0, magicbal, metlsavr, tumbleb_state, magicbal, ROT0, "SemiCom", "Magicball Fighting (Korea)", GAME_NOT_WORKING) // also still has the Metal Saver (c)1994 First Amusement tiles in the GFX |
| 3568 | | GAME( 1995, chokchok, 0, cookbib, chokchok, tumbleb_state, chokchok, ROT0, "SemiCom", "Choky! Choky!", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) // corruption during attract mode (tmap disable?) |
| 3382 | GAME( 1994, magicbal, 0, metlsavr, magicbal, tumbleb_state, chokchok, ROT0, "SemiCom", "Magicball Fighting (Korea)", GAME_SUPPORTS_SAVE) // also still has the Metal Saver (c)1994 First Amusement tiles in the GFX |
| 3383 | GAME( 1995, chokchok, 0, cookbib, chokchok, tumbleb_state, chokchok, ROT0, "SemiCom", "Choky! Choky!", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) |
| 3569 | 3384 | GAME( 1995, wlstar, 0, cookbib_mcu, wlstar, tumbleb_state, wlstar, ROT0, "Mijin", "Wonder League Star - Sok-Magicball Fighting (Korea)", GAME_SUPPORTS_SAVE ) // translates to 'Wonder League Star - Return of Magicball Fighting' |
| 3570 | 3385 | GAME( 1995, htchctch, 0, htchctch, htchctch, tumbleb_state, htchctch, ROT0, "SemiCom", "Hatch Catch" , GAME_SUPPORTS_SAVE ) // not 100% sure about gfx offsets |
| 3571 | 3386 | GAME( 1995, cookbib, 0, cookbib, cookbib, tumbleb_state, htchctch, ROT0, "SemiCom", "Cookie & Bibi" , GAME_SUPPORTS_SAVE ) // not 100% sure about gfx offsets |