trunk/src/mame/machine/decocass.c
| r19750 | r19751 | |
| 401 | 401 | return data; |
| 402 | 402 | } |
| 403 | 403 | |
| 404 | |
| 404 | 405 | /*************************************************************************** |
| 405 | 406 | * |
| 406 | 407 | * TYPE1 DONGLE (DE-0061) |
| 408 | * - Manhattan |
| 409 | * |
| 410 | * Input bits that are passed uninverted = $54 (3 true bits) |
| 411 | * Input bits that are passed inverted = $00 (0 inverted bits) |
| 412 | * Remaining bits for addressing PROM = $AB (5 bits) |
| 413 | * |
| 414 | ***************************************************************************/ |
| 415 | |
| 416 | READ8_MEMBER(decocass_state::decocass_type1_latch_xab_pass_x54_r) |
| 417 | { |
| 418 | UINT8 data; |
| 419 | |
| 420 | if (1 == (offset & 1)) |
| 421 | { |
| 422 | if (0 == (offset & E5XX_MASK)) |
| 423 | data = upi41_master_r(m_mcu, 1); |
| 424 | else |
| 425 | data = 0xff; |
| 426 | |
| 427 | data = (BIT(data, 0) << 0) | (BIT(data, 1) << 1) | 0x7c; |
| 428 | LOG(4,("%10s 6502-PC: %04x decocass_type1_latch_27_pass_3_inv_2_r(%02x): $%02x <- (%s %s)\n", |
| 429 | space.machine().time().as_string(6), space.device().safe_pcbase(), offset, data, |
| 430 | (data & 1) ? "OBF" : "-", |
| 431 | (data & 2) ? "IBF" : "-")); |
| 432 | } |
| 433 | else |
| 434 | { |
| 435 | offs_t promaddr; |
| 436 | UINT8 save; |
| 437 | UINT8 *prom = space.machine().root_device().memregion("dongle")->base(); |
| 438 | |
| 439 | if (m_firsttime) |
| 440 | { |
| 441 | LOG(3,("prom data:\n")); |
| 442 | for (promaddr = 0; promaddr < 32; promaddr++) |
| 443 | { |
| 444 | if (promaddr % 8 == 0) |
| 445 | LOG(3,(" %02x:", promaddr)); |
| 446 | LOG(3,(" %02x%s", prom[promaddr], (promaddr % 8) == 7 ? "\n" : "")); |
| 447 | } |
| 448 | m_firsttime = 0; |
| 449 | m_latch1 = 0; /* reset latch (??) */ |
| 450 | } |
| 451 | |
| 452 | if (0 == (offset & E5XX_MASK)) |
| 453 | data = upi41_master_r(m_mcu, 0); |
| 454 | else |
| 455 | data = 0xff; |
| 456 | |
| 457 | save = data; /* save the unmodifed data for the latch */ |
| 458 | |
| 459 | /* AB 10101011 */ |
| 460 | promaddr = |
| 461 | (((data >> MAP0(m_type1_inmap)) & 1) << 0) | |
| 462 | (((data >> MAP1(m_type1_inmap)) & 1) << 1) | |
| 463 | (((data >> MAP3(m_type1_inmap)) & 1) << 2) | |
| 464 | (((data >> MAP5(m_type1_inmap)) & 1) << 3) | |
| 465 | (((data >> MAP7(m_type1_inmap)) & 1) << 4); |
| 466 | /* no latch, pass bit 0x54 */ |
| 467 | data = |
| 468 | (((prom[promaddr] >> 0) & 1) << MAP0(m_type1_outmap)) | |
| 469 | (((prom[promaddr] >> 1) & 1) << MAP1(m_type1_outmap)) | |
| 470 | (((data >> MAP2(m_type1_inmap)) & 1) << MAP2(m_type1_outmap)) | |
| 471 | (((prom[promaddr] >> 2) & 1) << MAP3(m_type1_outmap)) | |
| 472 | (((data >> MAP4(m_type1_inmap)) & 1) << MAP4(m_type1_outmap)) | |
| 473 | (((prom[promaddr] >> 3) & 1) << MAP5(m_type1_outmap)) | |
| 474 | (((data >> MAP6(m_type1_inmap)) & 1) << MAP6(m_type1_outmap)) | |
| 475 | (((prom[promaddr] >> 4) & 1) << MAP7(m_type1_outmap)); |
| 476 | |
| 477 | LOG(3,("%10s 6502-PC: %04x decocass_type1_latch_27_pass_3_inv_2_r(%02x): $%02x\n", |
| 478 | space.machine().time().as_string(6), space.device().safe_pcbase(), offset, data)); |
| 479 | |
| 480 | m_latch1 = save; /* latch the data for the next A0 == 0 read */ |
| 481 | } |
| 482 | return data; |
| 483 | } |
| 484 | |
| 485 | |
| 486 | /*************************************************************************** |
| 487 | * |
| 488 | * TYPE1 DONGLE (DE-0061) |
| 407 | 489 | * - Highway Chase |
| 408 | 490 | * |
| 409 | 491 | * Latch bits 2 and 7, pass bit 3, invert bit 2 to the output. |
| r19750 | r19751 | |
| 1411 | 1493 | m_type1_outmap = MAKE_MAP(0,1,2,3,5,4,6,7); |
| 1412 | 1494 | } |
| 1413 | 1495 | |
| 1496 | MACHINE_RESET_MEMBER(decocass_state,cmanhat) |
| 1497 | { |
| 1498 | decocass_state::machine_reset(); |
| 1499 | LOG(0,("dongle type #1 (DE-0061)\n")); |
| 1500 | m_dongle_r = read8_delegate(FUNC(decocass_state::decocass_type1_latch_xab_pass_x54_r),this); |
| 1501 | // m_type1_inmap = MAKE_MAP(0,1,2,3,5,4,6,7); |
| 1502 | // m_type1_outmap = MAKE_MAP(0,1,2,3,5,4,6,7); |
| 1503 | } |
| 1504 | |
| 1414 | 1505 | MACHINE_RESET_MEMBER(decocass_state,clocknch) |
| 1415 | 1506 | { |
| 1416 | 1507 | decocass_state::machine_reset(); |
trunk/src/mame/includes/decocass.h
| r19750 | r19751 | |
| 157 | 157 | DECLARE_MACHINE_RESET(type4); |
| 158 | 158 | DECLARE_MACHINE_RESET(cbdash); |
| 159 | 159 | DECLARE_MACHINE_RESET(cflyball); |
| 160 | DECLARE_MACHINE_RESET(cmanhat); |
| 160 | 161 | UINT32 screen_update_decocass(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 161 | 162 | DECLARE_WRITE8_MEMBER(decocass_coin_counter_w); |
| 162 | 163 | DECLARE_WRITE8_MEMBER(decocass_sound_command_w); |
| r19750 | r19751 | |
| 230 | 231 | DECLARE_READ8_MEMBER(decocass_type1_latch_27_pass_3_inv_2_r); |
| 231 | 232 | DECLARE_READ8_MEMBER(decocass_type1_latch_26_pass_5_inv_2_r); |
| 232 | 233 | DECLARE_READ8_MEMBER(decocass_type1_latch_16_pass_3_inv_1_r); |
| 234 | DECLARE_READ8_MEMBER(decocass_type1_latch_xab_pass_x54_r); |
| 233 | 235 | DECLARE_READ8_MEMBER(decocass_type2_r); |
| 234 | 236 | DECLARE_WRITE8_MEMBER(decocass_type2_w); |
| 235 | 237 | DECLARE_READ8_MEMBER(decocass_type3_r); |
trunk/src/mame/drivers/decocass.c
| r19750 | r19751 | |
| 808 | 808 | MCFG_MACHINE_RESET_OVERRIDE(decocass_state,cdsteljn) |
| 809 | 809 | MACHINE_CONFIG_END |
| 810 | 810 | |
| 811 | static MACHINE_CONFIG_DERIVED( cmanhat, decocass ) |
| 812 | |
| 813 | /* basic machine hardware */ |
| 814 | MCFG_MACHINE_RESET_OVERRIDE(decocass_state,cmanhat) |
| 815 | MACHINE_CONFIG_END |
| 816 | |
| 811 | 817 | static MACHINE_CONFIG_DERIVED( cfishing, decocass ) |
| 812 | 818 | |
| 813 | 819 | /* basic machine hardware */ |
| r19750 | r19751 | |
| 1089 | 1095 | ROM_LOAD( "chwy.cas", 0x0000, 0x8000, CRC(68a48064) SHA1(7e389737972fd0c54f398d296159c561f5ec3a93) ) |
| 1090 | 1096 | ROM_END |
| 1091 | 1097 | |
| 1098 | /* 03 Manhatten */ |
| 1099 | ROM_START( cmanhat ) |
| 1100 | DECOCASS_BIOS_A_ROMS |
| 1101 | |
| 1102 | ROM_REGION( 0x00020, "dongle", 0 ) /* dongle data */ |
| 1103 | ROM_LOAD( "manhattan.pro", 0x0000, 0x0020, CRC(1bc9fccb) SHA1(ffc59c7660d5c87a8deca294f80260b6bc7c3027) ) // == a-0061.dgl |
| 1104 | |
| 1105 | ROM_REGION( 0x10000, "cassette", 0 ) /* (max) 64k for cassette image */ |
| 1106 | ROM_LOAD( "manhattan.cas", 0x000000, 0x006000, CRC(92dae2b1) SHA1(cc048ac6601553675078230290beb3d59775bfe0) ) |
| 1107 | ROM_END |
| 1108 | |
| 1092 | 1109 | /* 04 Terranean */ |
| 1093 | 1110 | ROM_START( cterrani ) |
| 1094 | 1111 | DECOCASS_BIOS_B_ROMS |
| r19750 | r19751 | |
| 1693 | 1710 | /* -- */ GAME( 1981, ctsttape, decocass, ctsttape, decocass, decocass_state, decocass, ROT270, "Data East Corporation", "Test Tape (DECO Cassette)", 0 ) |
| 1694 | 1711 | /* 01 */ GAME( 1980, chwy, decocass, chwy, decocass, decocass_state, decocass, ROT270, "Data East Corporation", "Highway Chase (DECO Cassette)", 0 ) |
| 1695 | 1712 | /* 02 */ // 1980.12 Sengoku Ninjatai |
| 1696 | | /* 03 */ // 1981.01 Manhattan |
| 1713 | /* 03 */ GAME( 1981, cmanhat, decocass, cmanhat, decocass, decocass_state, decocass, ROT270, "Data East Corporation", "Manhattan (DECO Cassette)", GAME_NOT_WORKING ) |
| 1697 | 1714 | /* 04 */ GAME( 1981, cterrani, decocass, cterrani, cterrani, decocass_state, decocass, ROT270, "Data East Corporation", "Terranean (DECO Cassette)", 0 ) |
| 1698 | 1715 | /* 05 */ // 1981.?? Missile Sprinter |
| 1699 | 1716 | /* 06 */ // 1980.12 Nebula |