trunk/src/mame/drivers/snowbros.c
| r245681 | r245682 | |
| 1111 | 1111 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 1112 | 1112 | INPUT_PORTS_END |
| 1113 | 1113 | |
| 1114 | |
| 1115 | static INPUT_PORTS_START( mcheonru ) |
| 1116 | PORT_START("DSW1") /* 500000.w */ |
| 1117 | PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) |
| 1118 | PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) |
| 1119 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1120 | PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) |
| 1121 | PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) |
| 1122 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1123 | PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) |
| 1124 | PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) |
| 1125 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1126 | PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) |
| 1127 | PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) |
| 1128 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1129 | PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) |
| 1130 | PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) |
| 1131 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1132 | PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) |
| 1133 | PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) |
| 1134 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1135 | PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) |
| 1136 | PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) |
| 1137 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1138 | PORT_SERVICE_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW1:8" ) |
| 1139 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) |
| 1140 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) |
| 1141 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) |
| 1142 | PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) |
| 1143 | PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) |
| 1144 | PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) |
| 1145 | PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1) |
| 1146 | PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1147 | |
| 1148 | PORT_START("DSW2") /* 500002.w */ |
| 1149 | PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) |
| 1150 | PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) |
| 1151 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1152 | PORT_DIPNAME( 0x0002, 0x0002, "Tile Type" ) |
| 1153 | PORT_DIPSETTING( 0x0002, "Picture" ) |
| 1154 | PORT_DIPSETTING( 0x0000, "Traditional" ) |
| 1155 | PORT_DIPNAME( 0x0004, 0x0004, "Mini Game Frequency" ) |
| 1156 | PORT_DIPSETTING( 0x0004, "Every 3 Rounds" ) |
| 1157 | PORT_DIPSETTING( 0x0000, "Every Round" ) |
| 1158 | PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) |
| 1159 | PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) |
| 1160 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1161 | PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) |
| 1162 | PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) |
| 1163 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1164 | PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) |
| 1165 | PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) |
| 1166 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1167 | PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) |
| 1168 | PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) |
| 1169 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1170 | PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) |
| 1171 | PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) |
| 1172 | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
| 1173 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) |
| 1174 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) |
| 1175 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) |
| 1176 | PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) |
| 1177 | PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) |
| 1178 | PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) |
| 1179 | PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2) |
| 1180 | PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1181 | |
| 1182 | PORT_START("SYSTEM") /* 500004.w */ |
| 1183 | PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1184 | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 ) |
| 1185 | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 ) |
| 1186 | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 ) |
| 1187 | PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 ) |
| 1188 | PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1189 | PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1190 | PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1191 | PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 1192 | INPUT_PORTS_END |
| 1193 | |
| 1114 | 1194 | static INPUT_PORTS_START( twinkle ) |
| 1115 | 1195 | PORT_START("DSW1") /* 500000.w */ |
| 1116 | 1196 | PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") |
| r245681 | r245682 | |
| 2290 | 2370 | ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */ |
| 2291 | 2371 | ROM_LOAD16_BYTE( "u52", 0x00001, 0x40000, CRC(63fd8a9b) SHA1(53054d8072322842c32625ab38e7d62dc0e75627) ) |
| 2292 | 2372 | ROM_LOAD16_BYTE( "u74", 0x00000, 0x40000, CRC(3edb17ce) SHA1(0c6ea239f57eca114d75c173b77b2c8ef43d63a2) ) |
| 2293 | | ROM_LOAD( "hackprot", 0x7fe00, 0x200 , CRC(2c685396) SHA1(c3bc7940bb2b4394a6b6663b92a656995f6011fe) ) // hack, decrypted data from 3in1semi |
| 2294 | 2373 | |
| 2295 | 2374 | ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */ |
| 2296 | 2375 | ROM_LOAD( "u35", 0x00000, 0x10000 , CRC(79e965b4) SHA1(268df67ec6ea828ae01a6e4d2da9ad2a08a837f1) ) |
| r245681 | r245682 | |
| 2301 | 2380 | ROM_REGION16_BE( 0x200, "user1", 0 ) /* Data from Shared RAM */ |
| 2302 | 2381 | /* this is not a real rom but instead the data extracted from |
| 2303 | 2382 | shared ram, the MCU puts it there */ |
| 2304 | | ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , NO_DUMP ) |
| 2383 | ROM_LOAD( "protdata.bin", 0x00000, 0x200 , CRC(d61f4f07) SHA1(29485bce6e3a7ed2ace540bb81fe028456ae1ae9) ) |
| 2305 | 2384 | |
| 2306 | 2385 | ROM_REGION( 0x040000, "oki", 0 ) /* Samples */ |
| 2307 | 2386 | ROM_LOAD( "u14", 0x00000, 0x40000, CRC(28a62d23) SHA1(24dbe6229647032599e02225de57650205dce5c3) ) |
| r245681 | r245682 | |
| 2490 | 2569 | ROM_LOAD( "su_ho_sung.ua6", 0x100000, 0x80000, CRC(92fea02c) SHA1(946c7bf55354875a1581ce484cb185b640f74166) ) |
| 2491 | 2570 | ROM_END |
| 2492 | 2571 | |
| 2493 | | READ16_MEMBER(snowbros_state::moremorp_0a_read) |
| 2494 | | { |
| 2495 | | return 0x000a; |
| 2496 | | } |
| 2497 | 2572 | |
| 2498 | | DRIVER_INIT_MEMBER(snowbros_state,moremorp) |
| 2499 | | { |
| 2500 | | // UINT16 *PROTDATA = (UINT16*)memregion("user1")->base(); |
| 2501 | | // int i; |
| 2502 | 2573 | |
| 2503 | | // for (i = 0;i < 0x200/2;i++) |
| 2504 | | // m_hyperpac_ram[0xf000/2 + i] = PROTDATA[i]; |
| 2505 | | |
| 2506 | | /* explicit check in the code */ |
| 2507 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16_delegate(FUNC(snowbros_state::moremorp_0a_read),this)); |
| 2508 | | } |
| 2509 | | |
| 2510 | | |
| 2511 | 2574 | DRIVER_INIT_MEMBER(snowbros_state,cookbib2) |
| 2512 | 2575 | { |
| 2513 | | // UINT16 *HCROM = (UINT16*)memregion("maincpu")->base(); |
| 2514 | | // UINT16 *PROTDATA = (UINT16*)memregion("user1")->base(); |
| 2515 | | // int i; |
| 2516 | | // m_hyperpac_ram[0xf000/2] = 0x46fc; |
| 2517 | | // m_hyperpac_ram[0xf002/2] = 0x2700; |
| 2518 | | |
| 2519 | | // verified on real hardware, need to move this to a file really |
| 2520 | | |
| 2521 | | // static UINT16 cookbib2_mcu68k[] = |
| 2522 | | // { |
| 2523 | | // // moved to protdata.bin |
| 2524 | | // }; |
| 2525 | | |
| 2526 | | |
| 2527 | | |
| 2528 | | |
| 2529 | | //for (i = 0;i < ARRAY_LENGTH(cookbib2_mcu68k);i++) |
| 2530 | | // m_hyperpac_ram[0xf000/2 + i] = cookbib2_mcu68k[i]; |
| 2531 | | |
| 2532 | | // for (i = 0;i < 0x200/2;i++) |
| 2533 | | // m_hyperpac_ram[0xf000/2 + i] = PROTDATA[i]; |
| 2534 | | |
| 2535 | | |
| 2536 | | // trojan is actually buggy and gfx flicker like crazy |
| 2537 | | // but we can pause the system after bootup with HALT line of 68k to get the table before |
| 2538 | | // it goes nuts |
| 2539 | | |
| 2540 | | // m_hyperpac_ram[0xf07a/2] = 0x4e73; |
| 2541 | | // m_hyperpac_ram[0xf000/2] = 0x4e73; |
| 2542 | | |
| 2543 | | #if 0 |
| 2544 | | |
| 2545 | | /* interrupt wait loop? */ |
| 2546 | | HCROM[0x014942/2] = 0x4eb9; |
| 2547 | | HCROM[0x014944/2] = 0x0004; |
| 2548 | | HCROM[0x014946/2] = 0x8000; |
| 2549 | | HCROM[0x014948/2] = 0x4e71; |
| 2550 | | |
| 2551 | | /* interrupt wait loop? */ |
| 2552 | | HCROM[0x014968/2] = 0x4eb9; |
| 2553 | | HCROM[0x01496a/2] = 0x0004; |
| 2554 | | HCROM[0x01496c/2] = 0x8100; |
| 2555 | | HCROM[0x01496e/2] = 0x4e71; |
| 2556 | | |
| 2557 | | /* interrupt wait loop? */ |
| 2558 | | HCROM[0x014560/2] = 0x4eb9; |
| 2559 | | HCROM[0x014562/2] = 0x0004; |
| 2560 | | HCROM[0x014564/2] = 0x8200; |
| 2561 | | HCROM[0x014566/2] = 0x4e71; |
| 2562 | | |
| 2563 | | /* new code for interrupt wait */ |
| 2564 | | HCROM[0x048000/2] = 0x4a79; |
| 2565 | | HCROM[0x048002/2] = 0x0010; |
| 2566 | | HCROM[0x048004/2] = 0x2462; |
| 2567 | | HCROM[0x048006/2] = 0x66f8; |
| 2568 | | HCROM[0x048008/2] = 0x4eb9; |
| 2569 | | HCROM[0x04800a/2] = 0x0004; |
| 2570 | | HCROM[0x04800c/2] = 0x8300; |
| 2571 | | HCROM[0x04800e/2] = 0x4e75; |
| 2572 | | |
| 2573 | | /* new code for interrupt wait */ |
| 2574 | | HCROM[0x048100/2] = 0x4a79; |
| 2575 | | HCROM[0x048102/2] = 0x0010; |
| 2576 | | HCROM[0x048104/2] = 0x2460; |
| 2577 | | HCROM[0x048106/2] = 0x66f8; |
| 2578 | | HCROM[0x048108/2] = 0x4eb9; |
| 2579 | | HCROM[0x04810a/2] = 0x0004; |
| 2580 | | HCROM[0x04810c/2] = 0x8300; |
| 2581 | | HCROM[0x04810e/2] = 0x4e75; |
| 2582 | | |
| 2583 | | /* new code for interrupt wait */ |
| 2584 | | HCROM[0x048200/2] = 0x4a79; |
| 2585 | | HCROM[0x048202/2] = 0x0010; |
| 2586 | | HCROM[0x048204/2] = 0x2490; |
| 2587 | | HCROM[0x048206/2] = 0x66f8; |
| 2588 | | HCROM[0x048208/2] = 0x4eb9; |
| 2589 | | HCROM[0x04820a/2] = 0x0004; |
| 2590 | | HCROM[0x04820c/2] = 0x8300; |
| 2591 | | HCROM[0x04820e/2] = 0x4e75; |
| 2592 | | |
| 2593 | | |
| 2594 | | |
| 2595 | | /* put registers on stack */ |
| 2596 | | HCROM[0x048300/2] = 0x48e7; |
| 2597 | | HCROM[0x048302/2] = 0xfffe; |
| 2598 | | |
| 2599 | | /* wipe sprite ram (fill with 0x0002) */ |
| 2600 | | |
| 2601 | | /* put the address we want to write TO in A2 */ |
| 2602 | | HCROM[0x048304/2] = 0x45f9; |
| 2603 | | HCROM[0x048306/2] = 0x0070; |
| 2604 | | HCROM[0x048308/2] = 0x0000; |
| 2605 | | |
| 2606 | | /* put the number of words we want to clear into D0 */ |
| 2607 | | HCROM[0x04830a/2] = 0x203c; |
| 2608 | | HCROM[0x04830c/2] = 0x0000; |
| 2609 | | HCROM[0x04830e/2] = 0x1000; |
| 2610 | | |
| 2611 | | /* write 0x0002 to A2 */ |
| 2612 | | HCROM[0x048310/2] = 0x34bc; |
| 2613 | | HCROM[0x048312/2] = 0x0002; |
| 2614 | | |
| 2615 | | |
| 2616 | | /* add 1 to write address a2 */ |
| 2617 | | HCROM[0x048314/2] = 0xd5fc; |
| 2618 | | HCROM[0x048316/2] = 0x0000; |
| 2619 | | HCROM[0x048318/2] = 0x0002; |
| 2620 | | |
| 2621 | | /* decrease counter d0 */ |
| 2622 | | HCROM[0x04831a/2] = 0x5380; |
| 2623 | | |
| 2624 | | /* compare d0 to 0 */ |
| 2625 | | HCROM[0x04831c/2] = 0x0c80; |
| 2626 | | HCROM[0x04831e/2] = 0x0000; |
| 2627 | | HCROM[0x048320/2] = 0x0000; |
| 2628 | | |
| 2629 | | /* if its not 0 then branch back */ |
| 2630 | | HCROM[0x048322/2] = 0x66ec; |
| 2631 | | |
| 2632 | | /* ram has been wiped */ |
| 2633 | | |
| 2634 | | /* put the address we want to read protection data in A2 */ |
| 2635 | | HCROM[0x048324/2] = 0x45f9; |
| 2636 | | HCROM[0x048326/2] = 0x0010; |
| 2637 | | // HCROM[0x048328/2] = 0xf000; |
| 2638 | | // HCROM[0x048328/2] = 0xf000+0xb4; |
| 2639 | | HCROM[0x048328/2] = 0xf000+0xb4+0xb4; |
| 2640 | | |
| 2641 | | /* put the address of spriteram in A0 */ |
| 2642 | | HCROM[0x04832a/2] = 0x41f9; |
| 2643 | | HCROM[0x04832c/2] = 0x0070; |
| 2644 | | HCROM[0x04832e/2] = 0x0000; |
| 2645 | | |
| 2646 | | /* put the number of rows into D3 */ |
| 2647 | | HCROM[0x048330/2] = 0x263c; |
| 2648 | | HCROM[0x048332/2] = 0x0000; |
| 2649 | | HCROM[0x048334/2] = 0x0012; |
| 2650 | | |
| 2651 | | /* put the y co-ordinate of rows into D6 */ |
| 2652 | | HCROM[0x048336/2] = 0x2c3c; |
| 2653 | | HCROM[0x048338/2] = 0x0000; |
| 2654 | | HCROM[0x04833a/2] = 0x0014; |
| 2655 | | |
| 2656 | | /* put the number of bytes per row into D2 */ |
| 2657 | | HCROM[0x04833c/2] = 0x243c; |
| 2658 | | HCROM[0x04833e/2] = 0x0000; |
| 2659 | | HCROM[0x048340/2] = 0x000a; |
| 2660 | | |
| 2661 | | /* put the x co-ordinate of rows into D5 */ |
| 2662 | | HCROM[0x048342/2] = 0x2a3c; |
| 2663 | | HCROM[0x048344/2] = 0x0000; |
| 2664 | | HCROM[0x048346/2] = 0x0010; |
| 2665 | | |
| 2666 | | // move content of a2 to d4 (byte) |
| 2667 | | HCROM[0x048348/2] = 0x1812; |
| 2668 | | |
| 2669 | | HCROM[0x04834a/2] = 0xe84c; // shift d4 right by 4 |
| 2670 | | |
| 2671 | | HCROM[0x04834c/2] = 0x0244; // mask with 0x000f |
| 2672 | | HCROM[0x04834e/2] = 0x000f; // |
| 2673 | | |
| 2674 | | /* jump to character draw to draw first bit */ |
| 2675 | | HCROM[0x048350/2] = 0x4eb9; |
| 2676 | | HCROM[0x048352/2] = 0x0004; |
| 2677 | | HCROM[0x048354/2] = 0x8600; |
| 2678 | | |
| 2679 | | // increase x-cord |
| 2680 | | HCROM[0x048356/2] = 0x0645; |
| 2681 | | HCROM[0x048358/2] = 0x000a; |
| 2682 | | |
| 2683 | | |
| 2684 | | /* add 0x10 to draw address a0 */ |
| 2685 | | HCROM[0x04835a/2] = 0xd1fc; |
| 2686 | | HCROM[0x04835c/2] = 0x0000; |
| 2687 | | HCROM[0x04835e/2] = 0x0010; |
| 2688 | | |
| 2689 | | |
| 2690 | | // move content of a2 to d4 (byte) |
| 2691 | | HCROM[0x048360/2] = 0x1812; |
| 2692 | | |
| 2693 | | HCROM[0x048362/2] = 0x0244; // mask with 0x000f |
| 2694 | | HCROM[0x048364/2] = 0x000f; // |
| 2695 | | |
| 2696 | | /* jump to character draw to draw second bit */ |
| 2697 | | HCROM[0x048366/2] = 0x4eb9; |
| 2698 | | HCROM[0x048368/2] = 0x0004; |
| 2699 | | HCROM[0x04836a/2] = 0x8600; |
| 2700 | | |
| 2701 | | // increase x-cord |
| 2702 | | HCROM[0x04836c/2] = 0x0645; |
| 2703 | | HCROM[0x04836e/2] = 0x000c; |
| 2704 | | |
| 2705 | | /* add 0x10 to draw address a0 */ |
| 2706 | | HCROM[0x048370/2] = 0xd1fc; |
| 2707 | | HCROM[0x048372/2] = 0x0000; |
| 2708 | | HCROM[0x048374/2] = 0x0010; |
| 2709 | | |
| 2710 | | // newcode |
| 2711 | | /* add 1 to read address a2 */ |
| 2712 | | HCROM[0x048376/2] = 0xd5fc; |
| 2713 | | HCROM[0x048378/2] = 0x0000; |
| 2714 | | HCROM[0x04837a/2] = 0x0001; |
| 2715 | | |
| 2716 | | /* decrease counter d2 (row count)*/ |
| 2717 | | HCROM[0x04837c/2] = 0x5382; |
| 2718 | | |
| 2719 | | /* compare d2 to 0 */ |
| 2720 | | HCROM[0x04837e/2] = 0x0c82; |
| 2721 | | HCROM[0x048380/2] = 0x0000; |
| 2722 | | HCROM[0x048382/2] = 0x0000; |
| 2723 | | |
| 2724 | | /* if its not 0 then branch back */ |
| 2725 | | HCROM[0x048384/2] = 0x66c2; |
| 2726 | | |
| 2727 | | // increase y-cord d6 |
| 2728 | | HCROM[0x048386/2] = 0x0646; |
| 2729 | | HCROM[0x048388/2] = 0x000c; |
| 2730 | | |
| 2731 | | /* decrease counter d3 */ |
| 2732 | | HCROM[0x04838a/2] = 0x5383; |
| 2733 | | |
| 2734 | | /* compare d3 to 0 */ |
| 2735 | | HCROM[0x04838c/2] = 0x0c83; |
| 2736 | | HCROM[0x04838e/2] = 0x0000; |
| 2737 | | HCROM[0x048390/2] = 0x0000; |
| 2738 | | |
| 2739 | | /* if its not 0 then branch back */ |
| 2740 | | HCROM[0x048392/2] = 0x66a8; |
| 2741 | | |
| 2742 | | /* get back registers from stack*/ |
| 2743 | | HCROM[0x048394/2] = 0x4cdf; |
| 2744 | | HCROM[0x048396/2] = 0x7fff; |
| 2745 | | |
| 2746 | | /* rts */ |
| 2747 | | HCROM[0x048398/2] = 0x4e75; |
| 2748 | | |
| 2749 | | /* Draw a character! */ |
| 2750 | | /* D6 = y-coordinate |
| 2751 | | D5 = x-coordinate |
| 2752 | | D4 = value to draw |
| 2753 | | |
| 2754 | | A0 = spriteram base */ |
| 2755 | | |
| 2756 | | // 0002 0002 0002 0010 00xx 00yy 00nn 000n |
| 2757 | | |
| 2758 | | // 357c 0020 000c |
| 2759 | | // 337c = a1 |
| 2760 | | // move.w #$20, (#$c, A2) |
| 2761 | | |
| 2762 | | HCROM[0x048600/2] = 0x317c; |
| 2763 | | HCROM[0x048602/2] = 0x0010; |
| 2764 | | HCROM[0x048604/2] = 0x0006; |
| 2765 | | |
| 2766 | | HCROM[0x048606/2] = 0x3145; |
| 2767 | | HCROM[0x048608/2] = 0x0008; |
| 2768 | | |
| 2769 | | HCROM[0x04860a/2] = 0x3146; |
| 2770 | | HCROM[0x04860c/2] = 0x000a; |
| 2771 | | |
| 2772 | | /* get true value */ |
| 2773 | | |
| 2774 | | /* put lookuptable address in A3 */ |
| 2775 | | HCROM[0x04860e/2] = 0x47f9; |
| 2776 | | HCROM[0x048610/2] = 0x0004; |
| 2777 | | HCROM[0x048612/2] = 0x8800; |
| 2778 | | |
| 2779 | | HCROM[0x048614/2] = 0x3004; // d4 -> d0 |
| 2780 | | HCROM[0x048616/2] = 0xe348; |
| 2781 | | |
| 2782 | | HCROM[0x048618/2] = 0x3173; |
| 2783 | | HCROM[0x04861a/2] = 0x0000; |
| 2784 | | HCROM[0x04861c/2] = 0x000c; |
| 2785 | | |
| 2786 | | /* not value */ |
| 2787 | | |
| 2788 | | HCROM[0x04861e/2] = 0x317c; |
| 2789 | | HCROM[0x048620/2] = 0x0000; |
| 2790 | | HCROM[0x048622/2] = 0x000e; |
| 2791 | | |
| 2792 | | /* rts */ |
| 2793 | | HCROM[0x048624/2] = 0x4e75; |
| 2794 | | |
| 2795 | | |
| 2796 | | /* table used for lookup by the draw routine to get real tile numbers */ |
| 2797 | | |
| 2798 | | HCROM[0x048800/2] = 0x0010; |
| 2799 | | HCROM[0x048802/2] = 0x0011; |
| 2800 | | HCROM[0x048804/2] = 0x0012; |
| 2801 | | HCROM[0x048806/2] = 0x0013; |
| 2802 | | HCROM[0x048808/2] = 0x0014; |
| 2803 | | HCROM[0x04880a/2] = 0x0015; |
| 2804 | | HCROM[0x04880c/2] = 0x0016; |
| 2805 | | HCROM[0x04880e/2] = 0x0017; |
| 2806 | | HCROM[0x048810/2] = 0x0018; |
| 2807 | | HCROM[0x048812/2] = 0x0019; |
| 2808 | | HCROM[0x048814/2] = 0x0021; |
| 2809 | | HCROM[0x048816/2] = 0x0022; |
| 2810 | | HCROM[0x048818/2] = 0x0023; |
| 2811 | | HCROM[0x04881a/2] = 0x0024; |
| 2812 | | HCROM[0x04881c/2] = 0x0025; |
| 2813 | | HCROM[0x04881e/2] = 0x0026; |
| 2814 | | |
| 2815 | | |
| 2816 | | |
| 2817 | | /* |
| 2818 | | 10 0 |
| 2819 | | 11 1 |
| 2820 | | 12 2 |
| 2821 | | 13 3 |
| 2822 | | 14 4 |
| 2823 | | 15 5 |
| 2824 | | 16 6 |
| 2825 | | 17 7 |
| 2826 | | 18 8 |
| 2827 | | 19 9 |
| 2828 | | 21 a |
| 2829 | | 22 b |
| 2830 | | 23 c |
| 2831 | | 24 d |
| 2832 | | 25 e |
| 2833 | | 26 f |
| 2834 | | */ |
| 2835 | | |
| 2836 | | |
| 2837 | | |
| 2838 | | |
| 2839 | | |
| 2840 | | { |
| 2841 | | FILE *fp; |
| 2842 | | |
| 2843 | | fp=fopen("cookie", "w+b"); |
| 2844 | | if (fp) |
| 2845 | | { |
| 2846 | | fwrite(HCROM, 0x80000, 1, fp); |
| 2847 | | fclose(fp); |
| 2848 | | } |
| 2849 | | } |
| 2850 | | #endif |
| 2851 | 2576 | } |
| 2852 | 2577 | |
| 2853 | 2578 | |
| r245681 | r245682 | |
| 2906 | 2631 | |
| 2907 | 2632 | READ16_MEMBER(snowbros_state::_3in1_read) |
| 2908 | 2633 | { |
| 2909 | | return 0x0a0a; |
| 2634 | return 0x000a; |
| 2910 | 2635 | } |
| 2911 | 2636 | |
| 2912 | 2637 | DRIVER_INIT_MEMBER(snowbros_state,3in1semi) |
| r245681 | r245682 | |
| 2914 | 2639 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16_delegate(FUNC(snowbros_state::_3in1_read),this)); |
| 2915 | 2640 | } |
| 2916 | 2641 | |
| 2917 | | DRIVER_INIT_MEMBER(snowbros_state,mcheonru_hack) |
| 2918 | | { |
| 2919 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16_delegate(FUNC(snowbros_state::_3in1_read),this)); |
| 2920 | | |
| 2921 | | UINT16 *HCROM = (UINT16*)memregion("maincpu")->base(); |
| 2922 | 2642 | |
| 2923 | | HCROM[0x68/ 2] = 0x0007; |
| 2924 | | HCROM[0x6a/ 2] = 0xfe00; |
| 2925 | | HCROM[0x6c/ 2] = 0x0007; |
| 2926 | | HCROM[0x6e/ 2] = 0xff1a; |
| 2927 | | HCROM[0x70/ 2] = 0x0007; |
| 2928 | | HCROM[0x72/ 2] = 0xff4c; |
| 2929 | | |
| 2930 | | } |
| 2931 | | |
| 2932 | 2643 | READ16_MEMBER(snowbros_state::cookbib3_read) |
| 2933 | 2644 | { |
| 2934 | 2645 | return 0x2a2a; |
| r245681 | r245682 | |
| 3007 | 2718 | GAME( 1997, suhosong, 0, semiprot, suhosong, driver_device, 0, ROT0, "SemiCom", "Su Ho Seong", GAME_SUPPORTS_SAVE ) |
| 3008 | 2719 | GAME( 1997, twinkle, 0, semiprot, twinkle, driver_device, 0, ROT0, "SemiCom", "Twinkle", GAME_SUPPORTS_SAVE ) |
| 3009 | 2720 | GAME( 1998, 3in1semi, 0, semiprot, moremore, snowbros_state, 3in1semi, ROT0, "SemiCom", "XESS - The New Revolution (SemiCom 3-in-1)", GAME_SUPPORTS_SAVE ) |
| 3010 | | GAME( 1999, mcheonru, 0, semiprot, moremore, snowbros_state, mcheonru_hack, ROT0, "SemiCom", "Ma Cheon Ru", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) |
| 3011 | | GAME( 1999, moremore, 0, semiprot, moremore, snowbros_state, moremorp, ROT0, "SemiCom / Exit", "More More", GAME_SUPPORTS_SAVE ) |
| 3012 | | GAME( 1999, moremorp, 0, semiprot, moremore, snowbros_state, moremorp, ROT0, "SemiCom / Exit", "More More Plus", GAME_SUPPORTS_SAVE ) |
| 2721 | GAME( 1999, mcheonru, 0, semiprot, mcheonru, snowbros_state, 3in1semi, ROT0, "SemiCom", "Ma Cheon Ru", GAME_SUPPORTS_SAVE ) // the 'electrified maze' minigame seems to be broken, controls don't work, is it an original game bug? |
| 2722 | GAME( 1999, moremore, 0, semiprot, moremore, snowbros_state, 3in1semi, ROT0, "SemiCom / Exit", "More More", GAME_SUPPORTS_SAVE ) |
| 2723 | GAME( 1999, moremorp, 0, semiprot, moremore, snowbros_state, 3in1semi, ROT0, "SemiCom / Exit", "More More Plus", GAME_SUPPORTS_SAVE ) |
| 3013 | 2724 | // This is very similar to the SemiCom titles, but unprotected. |
| 3014 | 2725 | GAME( 2002, 4in1boot, 0, _4in1, 4in1boot, snowbros_state, 4in1boot, ROT0, "K1 Soft", "Puzzle King (PacMan 2, Tetris, HyperMan 2, Snow Bros.)" , GAME_SUPPORTS_SAVE ) |
| 3015 | 2726 | |