~ubuntu-branches/ubuntu/lucid/sdlmame/lucid

« back to all changes in this revision

Viewing changes to src/mame/drivers/looping.c

  • Committer: Bazaar Package Importer
  • Author(s): Cesare Falco
  • Date: 2009-11-03 17:10:15 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20091103171015-6hop4ory5lxnumpn
Tags: 0.135-0ubuntu1
* New upstream release - Closes (LP: #403212)
* debian/watch: unstable releases are no longer detected
* mame.ini: added the cheat subdirectories to cheatpath so zipped
  cheatfiles will be searched too
* renamed crsshair subdirectory to crosshair to reflect upstream change
* mame.ini: renamed references to crosshair subdirectory (see above)

Show diffs side-by-side

added added

removed removed

Lines of Context:
56
56
#include "cpu/tms9900/tms9900.h"
57
57
#include "sound/ay8910.h"
58
58
#include "sound/dac.h"
59
 
#include "sound/5220intf.h"
 
59
#include "sound/tms5220.h"
60
60
#include "video/resnet.h"
61
61
#include "cpu/cop400/cop400.h"
62
62
 
87
87
#define VBEND                           (16)
88
88
#define VBSTART                         (224+16)
89
89
 
90
 
 
 
90
static UINT8 *cop_io;
91
91
 
92
92
/*************************************
93
93
 *
269
269
                        flipy = !flipy;
270
270
                }
271
271
 
272
 
                drawgfx(bitmap, machine->gfx[1], code, color, flipx, flipy, sx, sy, cliprect, TRANSPARENCY_PEN, 0);
 
272
                drawgfx_transpen(bitmap, cliprect, machine->gfx[1], code, color, flipx, flipy, sx, sy, 0);
273
273
        }
274
274
}
275
275
 
332
332
}
333
333
 
334
334
 
335
 
static void looping_spcint(const device_config *device, int state)
 
335
static WRITE_LINE_DEVICE_HANDLER( looping_spcint )
336
336
{
337
 
        cputag_set_input_line_and_vector(device->machine, "audiocpu", 0, state, 6);
 
337
        cputag_set_input_line_and_vector(device->machine, "audiocpu", 0, !state, 6);
338
338
}
339
339
 
340
340
 
429
429
 *
430
430
 *************************************/
431
431
 
 
432
static READ8_HANDLER( cop_io_r )
 
433
{
 
434
        // if (offset == 1) return mame_rand(space->machine) & 0x01;
 
435
        return 1; // cop_io[offset];
 
436
}
 
437
 
 
438
static WRITE8_HANDLER( cop_io_w )
 
439
{
 
440
        cop_io[offset] = data;
 
441
if (offset == 0) logerror("%02x  ",data);
 
442
}
 
443
 
432
444
static READ8_HANDLER( protection_r )
433
445
{
434
 
        /*
435
 
        The code reads ($7002) ($7004) alternately
436
 
        The result must change at least once every 10 reads
437
 
        A read from ($34b0 + result) must == $01
438
 
 
439
 
        Valid values:
440
 
            $61 $67
441
 
            $B7 $BF
442
 
            $DB
443
 
            $E1
444
 
            $F3 $F7 $FD $FF
445
 
 
446
 
        Because they read alternately from different locations,
447
 
        it is trivial to bypass the protection.
448
 
    */
449
 
        if (offset == 2)
450
 
                return 0xf3;
451
 
        else
452
 
                return 0xf7;
 
446
//        The code reads ($7002) ($7004) alternately
 
447
//        The result must change at least once every 10 reads
 
448
//        A read from ($34b0 + result) must == $01
 
449
 
 
450
//        Valid values:
 
451
//            $61 $67
 
452
//            $B7 $BF
 
453
//            $DB
 
454
//            $E1
 
455
//            $F3 $F7 $FD $FF
 
456
 
 
457
//        Because they read alternately from different locations,
 
458
//        it is trivial to bypass the protection.
 
459
 
 
460
//        cop write alternately $02 $01 $08 $04 in port $102
 
461
//        cop write randomly fc (unfortunatly) but 61,67,b7,bf,db,e1,f3,fd,ff too and only these values
 
462
 
 
463
        // missing something
 
464
        if(cop_io[0] != 0xfc) return cop_io[0];
 
465
        return 0xff;
453
466
}
454
467
 
455
468
 
456
 
 
457
469
/*************************************
458
470
 *
459
471
 *  Address maps
513
525
        AM_RANGE(0x008, 0x008) AM_DEVWRITE("ay", ay_enable_w)
514
526
        AM_RANGE(0x009, 0x009) AM_DEVWRITE("tms", speech_enable_w)
515
527
        AM_RANGE(0x00a, 0x00a) AM_WRITE(ballon_enable_w)
 
528
        AM_RANGE(0x00b, 0x00f) AM_NOP
516
529
ADDRESS_MAP_END
517
530
 
518
531
 
525
538
        AM_RANGE(0x0000, 0x003f) AM_RAM
526
539
ADDRESS_MAP_END
527
540
 
 
541
static ADDRESS_MAP_START( looping_cop_io_map, ADDRESS_SPACE_IO, 8 )
 
542
        AM_RANGE(0x0100, 0x0107) AM_READWRITE(cop_io_r, cop_io_w)
 
543
ADDRESS_MAP_END
528
544
 
529
545
 
530
546
/*************************************
560
576
 
561
577
static const tms5220_interface tms5220_config =
562
578
{
563
 
        looping_spcint
 
579
        DEVCB_LINE(looping_spcint)
564
580
};
565
581
 
566
582
static const ay8910_interface ay8910_config =
602
618
        MDRV_CPU_ADD("mcu", COP420, COP_CLOCK)
603
619
        MDRV_CPU_PROGRAM_MAP(looping_cop_map)
604
620
        MDRV_CPU_DATA_MAP(looping_cop_data_map)
 
621
        MDRV_CPU_IO_MAP(looping_cop_io_map)
605
622
        MDRV_CPU_CONFIG(looping_cop_intf)
606
623
 
607
624
        MDRV_MACHINE_START(looping)
718
735
        ROM_LOAD( "i-o.11a",            0x2800, 0x1000, CRC(61c74c79) SHA1(9f34d18a919446dd76857b851cea23fc1526f3c2) ) /* speech */
719
736
 
720
737
        ROM_REGION( 0x1000, "mcu", 0 ) /* COP420 microcontroller code */
721
 
        ROM_LOAD( "cop.bin",            0x0000, 0x1000, BAD_DUMP CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times, and starting PC is not 0
 
738
/*
 
739
    ROM_LOAD( "cop.bin",        0x0000, 0x0400, BAD_DUMP CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times, and starting PC is not 0
 
740
    ROM_CONTINUE(           0x0000, 0x0400)
 
741
    ROM_CONTINUE(           0x0000, 0x0400)
 
742
    ROM_CONTINUE(           0x0000, 0x0400)
 
743
*/
 
744
        ROM_LOAD( "cop.bin",            0x00c2, 0x033e, CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times and shifted
 
745
        ROM_CONTINUE(                   0x0000, 0x00c2)
 
746
        ROM_CONTINUE(                   0x00c2, 0x033e)
 
747
        ROM_CONTINUE(                   0x0000, 0x00c2)
 
748
        ROM_CONTINUE(                   0x00c2, 0x033e)
 
749
        ROM_CONTINUE(                   0x0000, 0x00c2)
 
750
        ROM_CONTINUE(                   0x00c2, 0x033e)
 
751
        ROM_CONTINUE(                   0x0000, 0x00c2)
722
752
 
723
 
        ROM_REGION( 0x1000, "gfx1", ROMREGION_DISPOSE )
 
753
        ROM_REGION( 0x1000, "gfx1", 0 )
724
754
        ROM_LOAD( "log2.8a",            0x0000, 0x800, CRC(ef3284ac) SHA1(8719c9df8c972a56c306b3c707aaa53092ffa2d6) )
725
755
        ROM_LOAD( "log1-9-3.6a",        0x0800, 0x800, CRC(c434c14c) SHA1(3669aaf7adc6b250378bcf62eb8e7058f55476ef) )
726
756
 
738
768
 
739
769
        ROM_REGION( 0x3800, "audiocpu", 0 ) /* TMS9980 code */
740
770
        ROM_LOAD( "i-o-v2.13c",         0x0000, 0x0800, CRC(09765ebe) SHA1(93b035c3a94f2f6d5e463256e26b600a4dd5d3ea) )
741
 
    ROM_LOAD( "i-o.13a",                0x0800, 0x1000, CRC(1de29f25) SHA1(535acb132266d6137b0610ee9a9b946459ae44af) ) /* speech */
 
771
        ROM_LOAD( "i-o.13a",            0x0800, 0x1000, CRC(1de29f25) SHA1(535acb132266d6137b0610ee9a9b946459ae44af) ) /* speech */
742
772
        ROM_LOAD( "i-o.11a",            0x2800, 0x1000, CRC(61c74c79) SHA1(9f34d18a919446dd76857b851cea23fc1526f3c2) )
743
773
 
744
774
        ROM_REGION( 0x1000, "mcu", 0 ) /* COP420 microcontroller code */
745
 
        ROM_LOAD( "cop.bin",            0x0000, 0x1000, BAD_DUMP CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times, and starting PC is not 0
 
775
/*
 
776
    ROM_LOAD( "cop.bin",        0x0000, 0x0400, BAD_DUMP CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times, and starting PC is not 0
 
777
    ROM_CONTINUE(           0x0000, 0x0400)
 
778
    ROM_CONTINUE(           0x0000, 0x0400)
 
779
    ROM_CONTINUE(           0x0000, 0x0400)
 
780
*/
 
781
        ROM_LOAD( "cop.bin",            0x00c2, 0x033e, CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times and shifted
 
782
        ROM_CONTINUE(                   0x0000, 0x00c2)
 
783
        ROM_CONTINUE(                   0x00c2, 0x033e)
 
784
        ROM_CONTINUE(                   0x0000, 0x00c2)
 
785
        ROM_CONTINUE(                   0x00c2, 0x033e)
 
786
        ROM_CONTINUE(                   0x0000, 0x00c2)
 
787
        ROM_CONTINUE(                   0x00c2, 0x033e)
 
788
        ROM_CONTINUE(                   0x0000, 0x00c2)
746
789
 
747
 
        ROM_REGION( 0x1000, "gfx1", ROMREGION_DISPOSE )
 
790
        ROM_REGION( 0x1000, "gfx1", 0 )
748
791
        ROM_LOAD( "log2.8a",            0x0000, 0x800, CRC(ef3284ac) SHA1(8719c9df8c972a56c306b3c707aaa53092ffa2d6) )
749
792
        ROM_LOAD( "log1-9-3.6a",        0x0800, 0x800, CRC(c434c14c) SHA1(3669aaf7adc6b250378bcf62eb8e7058f55476ef) )
750
793
 
759
802
        ROM_LOAD( "cpu.9a",                     0x4000, 0x2000, CRC(c7a50797) SHA1(60aa0a28ba970f12d0a0e538ae1c6807d105855c) )
760
803
        ROM_LOAD( "cpu.8a",                     0x6000, 0x2000, CRC(a718c6f2) SHA1(19afa8c353829232cb96c27b87f13b43166ab6fc) )
761
804
 
762
 
    ROM_REGION( 0x3800, "audiocpu", 0 ) /* TMS9980 code */
 
805
        ROM_REGION( 0x3800, "audiocpu", 0 ) /* TMS9980 code */
763
806
        ROM_LOAD( "snd.13c",            0x0000, 0x0800, CRC(21e9350c) SHA1(f30a180309e373a17569351944f5e7982c3b3f9d) )
764
807
        ROM_LOAD( "snd.13a",            0x0800, 0x1000, CRC(1de29f25) SHA1(535acb132266d6137b0610ee9a9b946459ae44af) )
765
808
        ROM_LOAD( "snd.11a",            0x2800, 0x1000, CRC(61c74c79) SHA1(9f34d18a919446dd76857b851cea23fc1526f3c2) )
766
809
 
767
810
        ROM_REGION( 0x1000, "mcu", 0 ) /* COP420 microcontroller code */
768
 
        ROM_LOAD( "cop.bin",            0x0000, 0x1000, BAD_DUMP CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times, and starting PC is not 0
 
811
/*
 
812
    ROM_LOAD( "cop.bin",        0x0000, 0x0400, BAD_DUMP CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times, and starting PC is not 0
 
813
    ROM_CONTINUE(           0x0000, 0x0400)
 
814
    ROM_CONTINUE(           0x0000, 0x0400)
 
815
    ROM_CONTINUE(           0x0000, 0x0400)
 
816
*/
 
817
        ROM_LOAD( "cop.bin",            0x00c2, 0x033e, CRC(bbfd26d5) SHA1(5f78b32b6e7c003841ef5b635084db2cdfebf0e1) ) // overdumped 4 times and shifted
 
818
        ROM_CONTINUE(                   0x0000, 0x00c2)
 
819
        ROM_CONTINUE(                   0x00c2, 0x033e)
 
820
        ROM_CONTINUE(                   0x0000, 0x00c2)
 
821
        ROM_CONTINUE(                   0x00c2, 0x033e)
 
822
        ROM_CONTINUE(                   0x0000, 0x00c2)
 
823
        ROM_CONTINUE(                   0x00c2, 0x033e)
 
824
        ROM_CONTINUE(                   0x0000, 0x00c2)
769
825
 
770
 
        ROM_REGION( 0x1000, "gfx1", ROMREGION_DISPOSE )
 
826
        ROM_REGION( 0x1000, "gfx1", 0 )
771
827
        ROM_LOAD( "vid.8a",                     0x0000, 0x800, CRC(459ccc55) SHA1(747f6789605b48be9e22f779f9e3f6c98ad4e594) )
772
828
        ROM_LOAD( "vid.6a",                     0x0800, 0x800, CRC(12ebbe74) SHA1(0f87c81a45d1bf3b8c6a70ee5e1a014069f67755) )
773
829
 
789
845
        UINT8 *rom = memory_region(machine, "maincpu");
790
846
        int i;
791
847
 
 
848
        cop_io = auto_alloc_array(machine, UINT8, 0x08);
 
849
 
792
850
        /* bitswap the TMS9995 ROMs */
793
851
        for (i = 0; i < length; i++)
794
852
                rom[i] = BITSWAP8(rom[i], 0,1,2,3,4,5,6,7);