307
306
/* ZV03082007 - video_screen_get_vblank() doesn't work for Captain America, as it expects
308
307
that this bit is NOT set in rows 0-7. */
309
vblank = space->machine().primary_screen->vpos() > space->machine().primary_screen->visible_area().max_y;
308
vblank = machine().primary_screen->vpos() > machine().primary_screen->visible_area().max_y;
311
310
return 0xffffff80 | 0x1 | 0x10; /* Assume VBL takes priority over possible raster/lightgun irq */
313
return 0xffffff80 | vblank | ((state->m_irq_source) ? 0x40 : 0x20);
312
return 0xffffff80 | vblank | ((m_irq_source) ? 0x40 : 0x20);
314
313
// return 0xffffff80 | vblank | (0x40); //test for lock load guns
317
logerror("%08x: Unmapped IRQ read %08x (%08x)\n",cpu_get_pc(&space->device()),offset,mem_mask);
316
logerror("%08x: Unmapped IRQ read %08x (%08x)\n",cpu_get_pc(&space.device()),offset,mem_mask);
318
317
return 0xffffffff;
321
static WRITE32_HANDLER( deco32_irq_controller_w )
320
WRITE32_MEMBER(deco32_state::deco32_irq_controller_w)
323
deco32_state *state = space->machine().driver_data<deco32_state>();
326
324
switch (offset) {
327
325
case 0: /* IRQ enable - probably an irq mask, but only values used are 0xc8 and 0xca */
328
// logerror("%08x: IRQ write %d %08x\n",cpu_get_pc(&space->device()),offset,data);
329
state->m_raster_enable=(data&0xff)==0xc8; /* 0xca seems to be off */
326
// logerror("%08x: IRQ write %d %08x\n",cpu_get_pc(&space.device()),offset,data);
327
m_raster_enable=(data&0xff)==0xc8; /* 0xca seems to be off */
332
330
case 1: /* Raster IRQ scanline position, only valid for values between 1 & 239 (0 and 240-256 do NOT generate IRQ's) */
333
331
scanline=(data&0xff);
334
if (state->m_raster_enable && scanline>0 && scanline<240)
332
if (m_raster_enable && scanline>0 && scanline<240)
336
state->m_raster_irq_timer->adjust(space->machine().primary_screen->time_until_pos(scanline-1, 0));
334
m_raster_irq_timer->adjust(machine().primary_screen->time_until_pos(scanline-1, 0));
339
state->m_raster_irq_timer->reset();
337
m_raster_irq_timer->reset();
341
339
case 2: /* VBL irq ack */
346
static WRITE32_HANDLER( deco32_sound_w )
344
WRITE32_MEMBER(deco32_state::deco32_sound_w)
348
soundlatch_w(space,0,data & 0xff);
349
cputag_set_input_line(space->machine(), "audiocpu", 0, HOLD_LINE);
346
soundlatch_byte_w(space,0,data & 0xff);
347
cputag_set_input_line(machine(), "audiocpu", 0, HOLD_LINE);
352
static READ32_HANDLER( deco32_71_r )
350
READ32_MEMBER(deco32_state::deco32_71_r)
354
352
/* Bit 0x80 goes high when sprite DMA is complete, and low
355
353
while it's in progress, we don't bother to emulate it */
356
354
return 0xffffffff;
359
static READ32_HANDLER( captaven_prot_r )
357
READ32_MEMBER(deco32_state::captaven_prot_r)
361
359
/* Protection/IO chip 75, same as Lemmings & Robocop 2 */
362
360
switch (offset<<2) {
363
case 0x0a0: return input_port_read(space->machine(), "IN0"); /* Player 1 & 2 controls */
364
case 0x158: return input_port_read(space->machine(), "IN1"); /* Player 3 & 4 controls */
365
case 0xed4: return input_port_read(space->machine(), "IN2"); /* Misc */
361
case 0x0a0: return ioport("IN0")->read(); /* Player 1 & 2 controls */
362
case 0x158: return ioport("IN1")->read(); /* Player 3 & 4 controls */
363
case 0xed4: return ioport("IN2")->read(); /* Misc */
368
logerror("%08x: Unmapped protection read %04x\n",cpu_get_pc(&space->device()),offset<<2);
366
logerror("%08x: Unmapped protection read %04x\n",cpu_get_pc(&space.device()),offset<<2);
369
367
return 0xffffffff;
372
static READ32_HANDLER( captaven_soundcpu_r )
370
READ32_MEMBER(deco32_state::captaven_soundcpu_r)
374
372
/* Top byte - top bit low == sound cpu busy, bottom word is dips */
375
return 0xffff0000 | input_port_read(space->machine(), "DSW");
373
return 0xffff0000 | ioport("DSW")->read();
378
static READ32_HANDLER( fghthist_control_r )
376
READ32_MEMBER(deco32_state::fghthist_control_r)
380
378
switch (offset) {
381
case 0: return 0xffff0000 | input_port_read(space->machine(), "IN0");
382
case 1: return 0xffff0000 | input_port_read(space->machine(), "IN1"); //check top bits??
383
case 2: return 0xfffffffe | space->machine().device<eeprom_device>("eeprom")->read_bit();
379
case 0: return 0xffff0000 | ioport("IN0")->read();
380
case 1: return 0xffff0000 | ioport("IN1")->read(); //check top bits??
381
case 2: return 0xfffffffe | machine().device<eeprom_device>("eeprom")->read_bit();
386
384
return 0xffffffff;
389
static WRITE32_HANDLER( fghthist_eeprom_w )
387
WRITE32_MEMBER(deco32_state::fghthist_eeprom_w)
391
389
if (ACCESSING_BITS_0_7) {
392
eeprom_device *eeprom = space->machine().device<eeprom_device>("eeprom");
390
eeprom_device *eeprom = machine().device<eeprom_device>("eeprom");
393
391
eeprom->set_clock_line((data & 0x20) ? ASSERT_LINE : CLEAR_LINE);
394
392
eeprom->write_bit(data & 0x10);
395
393
eeprom->set_cs_line((data & 0x40) ? CLEAR_LINE : ASSERT_LINE);
405
403
/**********************************************************************************/
407
static READ32_HANDLER( dragngun_service_r )
405
READ32_MEMBER(deco32_state::dragngun_service_r)
409
// logerror("%08x:Read service\n",cpu_get_pc(&space->device()));
410
return input_port_read(space->machine(), "IN2");
407
// logerror("%08x:Read service\n",cpu_get_pc(&space.device()));
408
return ioport("IN2")->read();
413
static READ32_HANDLER( lockload_gun_mirror_r )
411
READ32_MEMBER(deco32_state::lockload_gun_mirror_r)
415
//logerror("%08x:Read gun %d\n",cpu_get_pc(&space->device()),offset);
416
//return ((space->machine().rand()%0xffff)<<16) | space->machine().rand()%0xffff;
413
//logerror("%08x:Read gun %d\n",cpu_get_pc(&space.device()),offset);
414
//return ((machine().rand()%0xffff)<<16) | machine().rand()%0xffff;
417
415
if (offset) /* Mirror of player 1 and player 2 fire buttons */
418
return input_port_read(space->machine(), "IN4") | ((space->machine().rand()%0xff)<<16);
419
return input_port_read(space->machine(), "IN3") | input_port_read(space->machine(), "LIGHT0_X") | (input_port_read(space->machine(), "LIGHT0_X")<<16) | (input_port_read(space->machine(), "LIGHT0_X")<<24); //((space->machine().rand()%0xff)<<16);
416
return ioport("IN4")->read() | ((machine().rand()%0xff)<<16);
417
return ioport("IN3")->read() | ioport("LIGHT0_X")->read() | (ioport("LIGHT0_X")->read()<<16) | (ioport("LIGHT0_X")->read()<<24); //((machine().rand()%0xff)<<16);
422
static READ32_HANDLER( dragngun_prot_r )
420
READ32_MEMBER(deco32_state::dragngun_prot_r)
424
deco32_state *state = space->machine().driver_data<deco32_state>();
425
// logerror("%08x:Read prot %08x (%08x)\n",cpu_get_pc(&space->device()),offset<<1,mem_mask);
422
// logerror("%08x:Read prot %08x (%08x)\n",cpu_get_pc(&space.device()),offset<<1,mem_mask);
427
if (!state->m_strobe) state->m_strobe=8;
428
else state->m_strobe=0;
424
if (!m_strobe) m_strobe=8;
430
427
//definitely vblank in locked load
432
429
switch (offset<<1) {
433
case 0x140/2: return 0xffff0000 | input_port_read(space->machine(), "IN0"); /* IN0 */
434
case 0xadc/2: return 0xffff0000 | input_port_read(space->machine(), "IN1") | state->m_strobe; /* IN1 */
435
case 0x6a0/2: return 0xffff0000 | input_port_read(space->machine(), "DSW"); /* IN2 (Dip switch) */
430
case 0x140/2: return 0xffff0000 | ioport("IN0")->read(); /* IN0 */
431
case 0xadc/2: return 0xffff0000 | ioport("IN1")->read() | m_strobe; /* IN1 */
432
case 0x6a0/2: return 0xffff0000 | ioport("DSW")->read(); /* IN2 (Dip switch) */
437
434
return 0xffffffff;
441
static READ32_HANDLER( dragngun_lightgun_r )
438
READ32_MEMBER(dragngun_state::dragngun_lightgun_r)
443
dragngun_state *state = space->machine().driver_data<dragngun_state>();
444
440
/* Ports 0-3 are read, but seem unused */
445
switch (state->m_dragngun_lightgun_port) {
446
case 4: return input_port_read(space->machine(), "LIGHT0_X");
447
case 5: return input_port_read(space->machine(), "LIGHT1_X");
448
case 6: return input_port_read(space->machine(), "LIGHT0_Y");
449
case 7: return input_port_read(space->machine(), "LIGHT1_Y");
441
switch (m_dragngun_lightgun_port) {
442
case 4: return ioport("LIGHT0_X")->read();
443
case 5: return ioport("LIGHT1_X")->read();
444
case 6: return ioport("LIGHT0_Y")->read();
445
case 7: return ioport("LIGHT1_Y")->read();
452
// logerror("Illegal lightgun port %d read \n",state->m_dragngun_lightgun_port);
448
// logerror("Illegal lightgun port %d read \n",m_dragngun_lightgun_port);
456
static WRITE32_HANDLER( dragngun_lightgun_w )
452
WRITE32_MEMBER(dragngun_state::dragngun_lightgun_w)
458
dragngun_state *state = space->machine().driver_data<dragngun_state>();
459
// logerror("Lightgun port %d\n",state->m_dragngun_lightgun_port);
460
state->m_dragngun_lightgun_port=offset;
454
// logerror("Lightgun port %d\n",m_dragngun_lightgun_port);
455
m_dragngun_lightgun_port=offset;
463
458
static READ32_DEVICE_HANDLER( dragngun_eeprom_r )
538
530
if ((data&0x40)==0) {
539
if (state->m_bufPtr) {
541
logerror("Eprom reset (bit count %d): ",state->m_readBitCount);
542
for (i=0; i<state->m_bufPtr; i++)
543
logerror("%s",state->m_buffer[i] ? "1" : "0");
533
logerror("Eprom reset (bit count %d): ",m_readBitCount);
534
for (i=0; i<m_bufPtr; i++)
535
logerror("%s",m_buffer[i] ? "1" : "0");
548
state->m_pendingCommand=0;
549
state->m_readBitCount=0;
552
544
/* Eprom has been clocked */
553
if (state->m_lastClock==0 && data&0x20 && data&0x40) {
554
if (state->m_bufPtr>=32) {
545
if (m_lastClock==0 && data&0x20 && data&0x40) {
555
547
logerror("Eprom overflow!");
559
551
/* Handle pending read */
560
if (state->m_pendingCommand==1) {
561
int d=state->m_readBitCount/8;
562
int m=7-(state->m_readBitCount%8);
563
int a=(state->m_byteAddr+d)%1024;
552
if (m_pendingCommand==1) {
553
int d=m_readBitCount/8;
554
int m=7-(m_readBitCount%8);
555
int a=(m_byteAddr+d)%1024;
564
556
int b=eeprom_space->read_byte(a);
566
state->m_tattass_eprom_bit=(b>>m)&1;
558
m_tattass_eprom_bit=(b>>m)&1;
568
state->m_readBitCount++;
569
state->m_lastClock=data&0x20;
561
m_lastClock=data&0x20;
573
565
/* Handle pending write */
574
if (state->m_pendingCommand==2) {
575
state->m_buffer[state->m_bufPtr++]=(data&0x10)>>4;
577
if (state->m_bufPtr==32) {
578
int b=(state->m_buffer[24]<<7)|(state->m_buffer[25]<<6)|(state->m_buffer[26]<<5)|(state->m_buffer[27]<<4)
579
|(state->m_buffer[28]<<3)|(state->m_buffer[29]<<2)|(state->m_buffer[30]<<1)|(state->m_buffer[31]<<0);
581
eeprom_space->write_byte(state->m_byteAddr, b);
566
if (m_pendingCommand==2) {
567
m_buffer[m_bufPtr++]=(data&0x10)>>4;
570
int b=(m_buffer[24]<<7)|(m_buffer[25]<<6)|(m_buffer[26]<<5)|(m_buffer[27]<<4)
571
|(m_buffer[28]<<3)|(m_buffer[29]<<2)|(m_buffer[30]<<1)|(m_buffer[31]<<0);
573
eeprom_space->write_byte(m_byteAddr, b);
583
state->m_lastClock=data&0x20;
575
m_lastClock=data&0x20;
587
state->m_buffer[state->m_bufPtr++]=(data&0x10)>>4;
588
if (state->m_bufPtr==24) {
579
m_buffer[m_bufPtr++]=(data&0x10)>>4;
589
581
/* Decode addr */
590
state->m_byteAddr=(state->m_buffer[3]<<9)|(state->m_buffer[4]<<8)
591
|(state->m_buffer[16]<<7)|(state->m_buffer[17]<<6)|(state->m_buffer[18]<<5)|(state->m_buffer[19]<<4)
592
|(state->m_buffer[20]<<3)|(state->m_buffer[21]<<2)|(state->m_buffer[22]<<1)|(state->m_buffer[23]<<0);
582
m_byteAddr=(m_buffer[3]<<9)|(m_buffer[4]<<8)
583
|(m_buffer[16]<<7)|(m_buffer[17]<<6)|(m_buffer[18]<<5)|(m_buffer[19]<<4)
584
|(m_buffer[20]<<3)|(m_buffer[21]<<2)|(m_buffer[22]<<1)|(m_buffer[23]<<0);
594
586
/* Check for read command */
595
if (state->m_buffer[0] && state->m_buffer[1]) {
596
state->m_tattass_eprom_bit=(eeprom_space->read_byte(state->m_byteAddr)>>7)&1;
597
state->m_readBitCount=1;
598
state->m_pendingCommand=1;
587
if (m_buffer[0] && m_buffer[1]) {
588
m_tattass_eprom_bit=(eeprom_space->read_byte(m_byteAddr)>>7)&1;
601
593
/* Check for write command */
602
else if (state->m_buffer[0]==0x0 && state->m_buffer[1]==0x0) {
603
state->m_pendingCommand=2;
594
else if (m_buffer[0]==0x0 && m_buffer[1]==0x0) {
606
598
logerror("Detected unknown eprom command\n");
672
static WRITE32_HANDLER( nslasher_prot_w )
664
WRITE32_MEMBER(deco32_state::nslasher_prot_w)
674
deco32_state *state = space->machine().driver_data<deco32_state>();
675
//logerror("%08x:write prot %08x (%08x) %08x\n",cpu_get_pc(&space->device()),offset<<1,mem_mask,data);
666
//logerror("%08x:write prot %08x (%08x) %08x\n",cpu_get_pc(&space.device()),offset<<1,mem_mask,data);
677
668
/* Only sound port of chip is used - no protection */
678
669
if (offset==0x700/4) {
680
671
/* bit 1 of nslasher_sound_irq specifies IRQ command writes */
681
soundlatch_w(space,0,(data>>16)&0xff);
682
state->m_nslasher_sound_irq |= 0x02;
683
cputag_set_input_line(space->machine(), "audiocpu", 0, (state->m_nslasher_sound_irq != 0) ? ASSERT_LINE : CLEAR_LINE);
672
soundlatch_byte_w(space,0,(data>>16)&0xff);
673
m_nslasher_sound_irq |= 0x02;
674
cputag_set_input_line(machine(), "audiocpu", 0, (m_nslasher_sound_irq != 0) ? ASSERT_LINE : CLEAR_LINE);
687
678
/**********************************************************************************/
689
static READ32_HANDLER( deco32_spriteram_r )
691
deco32_state *state = space->machine().driver_data<deco32_state>();
692
return state->m_spriteram16[offset] ^ 0xffff0000;
695
static WRITE32_HANDLER( deco32_spriteram_w )
697
deco32_state *state = space->machine().driver_data<deco32_state>();
699
mem_mask &= 0x0000ffff;
700
COMBINE_DATA(&state->m_spriteram16[offset]);
703
static WRITE32_HANDLER( deco32_buffer_spriteram_w )
705
deco32_state *state = space->machine().driver_data<deco32_state>();
706
memcpy(state->m_spriteram16_buffered, state->m_spriteram16, 0x1000);
709
static READ32_HANDLER( deco32_spriteram2_r )
711
deco32_state *state = space->machine().driver_data<deco32_state>();
712
return state->m_spriteram16_2[offset] ^ 0xffff0000;
715
static WRITE32_HANDLER( deco32_spriteram2_w )
717
deco32_state *state = space->machine().driver_data<deco32_state>();
719
mem_mask &= 0x0000ffff;
720
COMBINE_DATA(&state->m_spriteram16_2[offset]);
723
static WRITE32_HANDLER( deco32_buffer_spriteram2_w )
725
deco32_state *state = space->machine().driver_data<deco32_state>();
726
memcpy(state->m_spriteram16_2_buffered, state->m_spriteram16_2, 0x1000);
680
READ32_MEMBER(deco32_state::deco32_spriteram_r)
682
return m_spriteram16[offset] ^ 0xffff0000;
685
WRITE32_MEMBER(deco32_state::deco32_spriteram_w)
688
mem_mask &= 0x0000ffff;
689
COMBINE_DATA(&m_spriteram16[offset]);
692
WRITE32_MEMBER(deco32_state::deco32_buffer_spriteram_w)
694
memcpy(m_spriteram16_buffered, m_spriteram16, 0x1000);
697
READ32_MEMBER(deco32_state::deco32_spriteram2_r)
699
return m_spriteram16_2[offset] ^ 0xffff0000;
702
WRITE32_MEMBER(deco32_state::deco32_spriteram2_w)
705
mem_mask &= 0x0000ffff;
706
COMBINE_DATA(&m_spriteram16_2[offset]);
709
WRITE32_MEMBER(deco32_state::deco32_buffer_spriteram2_w)
711
memcpy(m_spriteram16_2_buffered, m_spriteram16_2, 0x1000);
730
715
// tattass tests these as 32-bit ram, even if only 16-bits are hooked up to the tilemap chip - does it mirror parts of the dword?
731
static WRITE32_HANDLER( deco32_pf1_rowscroll_w ) { deco32_state *state = space->machine().driver_data<deco32_state>(); COMBINE_DATA(&state->m_pf1_rowscroll32[offset]); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&state->m_pf1_rowscroll[offset]); }
732
static WRITE32_HANDLER( deco32_pf2_rowscroll_w ) { deco32_state *state = space->machine().driver_data<deco32_state>(); COMBINE_DATA(&state->m_pf2_rowscroll32[offset]); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&state->m_pf2_rowscroll[offset]); }
733
static WRITE32_HANDLER( deco32_pf3_rowscroll_w ) { deco32_state *state = space->machine().driver_data<deco32_state>(); COMBINE_DATA(&state->m_pf3_rowscroll32[offset]); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&state->m_pf3_rowscroll[offset]); }
734
static WRITE32_HANDLER( deco32_pf4_rowscroll_w ) { deco32_state *state = space->machine().driver_data<deco32_state>(); COMBINE_DATA(&state->m_pf4_rowscroll32[offset]); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&state->m_pf4_rowscroll[offset]); }
737
static ADDRESS_MAP_START( captaven_map, AS_PROGRAM, 32 )
716
WRITE32_MEMBER(deco32_state::deco32_pf1_rowscroll_w){ COMBINE_DATA(&m_pf1_rowscroll32[offset]); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&m_pf1_rowscroll[offset]); }
717
WRITE32_MEMBER(deco32_state::deco32_pf2_rowscroll_w){ COMBINE_DATA(&m_pf2_rowscroll32[offset]); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&m_pf2_rowscroll[offset]); }
718
WRITE32_MEMBER(deco32_state::deco32_pf3_rowscroll_w){ COMBINE_DATA(&m_pf3_rowscroll32[offset]); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&m_pf3_rowscroll[offset]); }
719
WRITE32_MEMBER(deco32_state::deco32_pf4_rowscroll_w){ COMBINE_DATA(&m_pf4_rowscroll32[offset]); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&m_pf4_rowscroll[offset]); }
722
static ADDRESS_MAP_START( captaven_map, AS_PROGRAM, 32, deco32_state )
738
723
AM_RANGE(0x000000, 0x0fffff) AM_ROM
740
725
AM_RANGE(0x100000, 0x100007) AM_READ(deco32_71_r)
741
726
AM_RANGE(0x100000, 0x100003) AM_WRITE(deco32_buffer_spriteram_w)
742
727
AM_RANGE(0x108000, 0x108003) AM_WRITENOP /* ? */
743
728
AM_RANGE(0x110000, 0x111fff) AM_READWRITE(deco32_spriteram_r, deco32_spriteram_w)
744
AM_RANGE(0x120000, 0x127fff) AM_RAM AM_BASE_MEMBER(deco32_state, m_ram) /* Main RAM */
729
AM_RANGE(0x120000, 0x127fff) AM_RAM AM_SHARE("ram") /* Main RAM */
746
731
AM_RANGE(0x128000, 0x128fff) AM_READ(captaven_prot_r)
747
732
AM_RANGE(0x1280c8, 0x1280cb) AM_WRITE(deco32_sound_w)
748
AM_RANGE(0x130000, 0x131fff) AM_RAM_WRITE(deco32_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) /* Palette RAM */
733
AM_RANGE(0x130000, 0x131fff) AM_RAM_WRITE(deco32_nonbuffered_palette_w) AM_SHARE("paletteram") /* Palette RAM */
749
734
AM_RANGE(0x148000, 0x14800f) AM_READWRITE(deco32_irq_controller_r, deco32_irq_controller_w)
750
735
AM_RANGE(0x160000, 0x167fff) AM_RAM /* Extra work RAM */
751
736
AM_RANGE(0x168000, 0x168003) AM_READ(captaven_soundcpu_r)
753
738
AM_RANGE(0x178000, 0x178003) AM_WRITE(deco32_pri_w)
755
AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
756
AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
757
AM_RANGE(0x192000, 0x193fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) /* Mirror address - bug in program code */
758
AM_RANGE(0x194000, 0x195fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
759
AM_RANGE(0x1a0000, 0x1a3fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf1_rowscroll32)
760
AM_RANGE(0x1a4000, 0x1a5fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf2_rowscroll32)
740
AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
741
AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
742
AM_RANGE(0x192000, 0x193fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) /* Mirror address - bug in program code */
743
AM_RANGE(0x194000, 0x195fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
744
AM_RANGE(0x1a0000, 0x1a3fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_SHARE("pf1_rowscroll32")
745
AM_RANGE(0x1a4000, 0x1a5fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_SHARE("pf2_rowscroll32")
762
AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("tilegen2", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
763
AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
764
AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) // unused
765
AM_RANGE(0x1e0000, 0x1e3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf3_rowscroll32)
766
AM_RANGE(0x1e4000, 0x1e5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf4_rowscroll32) // unused
747
AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
748
AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
749
AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) // unused
750
AM_RANGE(0x1e0000, 0x1e3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_SHARE("pf3_rowscroll32")
751
AM_RANGE(0x1e4000, 0x1e5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_SHARE("pf4_rowscroll32") // unused
770
static ADDRESS_MAP_START( fghthist_map, AS_PROGRAM, 32 )
771
// AM_RANGE(0x000000, 0x001fff) AM_ROM AM_WRITE(deco32_pf1_data_w) // wtf??
755
static ADDRESS_MAP_START( fghthist_map, AS_PROGRAM, 32, deco32_state )
756
// AM_RANGE(0x000000, 0x001fff) AM_ROM AM_WRITE_LEGACY(deco32_pf1_data_w) // wtf??
772
757
AM_RANGE(0x000000, 0x0fffff) AM_ROM
773
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_BASE_MEMBER(deco32_state, m_ram)
758
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_SHARE("ram")
774
759
AM_RANGE(0x120020, 0x12002f) AM_READ(fghthist_control_r)
775
760
AM_RANGE(0x12002c, 0x12002f) AM_WRITE(fghthist_eeprom_w)
776
761
AM_RANGE(0x1201fc, 0x1201ff) AM_WRITE(deco32_sound_w)
778
763
AM_RANGE(0x140000, 0x140003) AM_WRITENOP /* VBL irq ack */
780
AM_RANGE(0x168000, 0x169fff) AM_RAM_WRITE(deco32_buffered_palette_w) AM_BASE_GENERIC(paletteram)
765
AM_RANGE(0x168000, 0x169fff) AM_RAM_WRITE(deco32_buffered_palette_w) AM_SHARE("paletteram")
781
766
AM_RANGE(0x16c008, 0x16c00b) AM_WRITE(deco32_palette_dma_w)
783
768
AM_RANGE(0x178000, 0x179fff) AM_READWRITE(deco32_spriteram_r, deco32_spriteram_w)
784
769
AM_RANGE(0x17c010, 0x17c013) AM_WRITE(deco32_buffer_spriteram_w)
786
AM_RANGE(0x182000, 0x183fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
787
AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
788
AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf1_rowscroll32)
789
AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf2_rowscroll32)
790
AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
771
AM_RANGE(0x182000, 0x183fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
772
AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
773
AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_SHARE("pf1_rowscroll32")
774
AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_SHARE("pf2_rowscroll32")
775
AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
792
AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
793
AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
794
AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf3_rowscroll32)
795
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf4_rowscroll32)
796
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("tilegen2", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
777
AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
778
AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
779
AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_SHARE("pf3_rowscroll32")
780
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_SHARE("pf4_rowscroll32")
781
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
798
783
AM_RANGE(0x16c000, 0x16c01f) AM_READNOP
799
784
AM_RANGE(0x17c000, 0x17c03f) AM_READNOP
801
AM_RANGE(0x200000, 0x200fff) AM_READWRITE(deco16_146_fghthist_prot_r, deco16_146_fghthist_prot_w) AM_BASE(&deco32_prot_ram)
786
AM_RANGE(0x200000, 0x200fff) AM_READWRITE_LEGACY(deco16_146_fghthist_prot_r, deco16_146_fghthist_prot_w) AM_BASE_LEGACY(&deco32_prot_ram)
802
787
AM_RANGE(0x208800, 0x208803) AM_WRITENOP /* ? */
805
static ADDRESS_MAP_START( fghthsta_memmap, AS_PROGRAM, 32 )
790
static ADDRESS_MAP_START( fghthsta_memmap, AS_PROGRAM, 32, deco32_state )
806
791
AM_RANGE(0x000000, 0x0fffff) AM_ROM
807
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_BASE_MEMBER(deco32_state, m_ram)
792
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_SHARE("ram")
808
793
AM_RANGE(0x140000, 0x140003) AM_WRITENOP /* VBL irq ack */
809
794
AM_RANGE(0x150000, 0x150003) AM_WRITE(fghthist_eeprom_w) /* Volume port/Eprom */
811
AM_RANGE(0x168000, 0x169fff) AM_RAM_WRITE(deco32_buffered_palette_w) AM_BASE_GENERIC(paletteram)
796
AM_RANGE(0x168000, 0x169fff) AM_RAM_WRITE(deco32_buffered_palette_w) AM_SHARE("paletteram")
812
797
AM_RANGE(0x16c008, 0x16c00b) AM_WRITE(deco32_palette_dma_w)
813
798
AM_RANGE(0x16c010, 0x16c013) AM_READNOP
816
801
AM_RANGE(0x17c010, 0x17c013) AM_WRITE(deco32_buffer_spriteram_w)
817
802
AM_RANGE(0x17c020, 0x17c023) AM_READNOP
819
AM_RANGE(0x182000, 0x183fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
820
AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
821
AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf1_rowscroll32)
822
AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf2_rowscroll32)
823
AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
825
AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
826
AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
827
AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf3_rowscroll32)
828
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf4_rowscroll32)
829
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("tilegen2", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
831
AM_RANGE(0x200000, 0x200fff) AM_READWRITE(deco16_146_fghthist_prot_r, deco16_146_fghthist_prot_w) AM_BASE(&deco32_prot_ram)
804
AM_RANGE(0x182000, 0x183fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
805
AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
806
AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_SHARE("pf1_rowscroll32")
807
AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_SHARE("pf2_rowscroll32")
808
AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
810
AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
811
AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
812
AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_SHARE("pf3_rowscroll32")
813
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_SHARE("pf4_rowscroll32")
814
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
816
AM_RANGE(0x200000, 0x200fff) AM_READWRITE_LEGACY(deco16_146_fghthist_prot_r, deco16_146_fghthist_prot_w) AM_BASE_LEGACY(&deco32_prot_ram)
834
819
// the video drawing (especially sprite) code on this is too slow to cope with proper partial updates
835
820
// raster effects appear to need some work on it anyway?
836
static ADDRESS_MAP_START( dragngun_map, AS_PROGRAM, 32 )
821
static ADDRESS_MAP_START( dragngun_map, AS_PROGRAM, 32, dragngun_state )
837
822
AM_RANGE(0x000000, 0x0fffff) AM_ROM
838
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_BASE_MEMBER(deco32_state, m_ram)
823
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_SHARE("ram")
839
824
AM_RANGE(0x120000, 0x120fff) AM_READ(dragngun_prot_r)
840
825
AM_RANGE(0x1204c0, 0x1204c3) AM_WRITE(deco32_sound_w)
841
826
AM_RANGE(0x128000, 0x12800f) AM_READWRITE(deco32_irq_controller_r, deco32_irq_controller_w)
842
AM_RANGE(0x130000, 0x131fff) AM_RAM_WRITE(deco32_buffered_palette_w) AM_BASE_GENERIC(paletteram)
827
AM_RANGE(0x130000, 0x131fff) AM_RAM_WRITE(deco32_buffered_palette_w) AM_SHARE("paletteram")
843
828
AM_RANGE(0x138000, 0x138003) AM_NOP /* Palette dma complete in bit 0x8? ack? return 0 else tight loop */
844
829
AM_RANGE(0x138008, 0x13800b) AM_WRITE(deco32_palette_dma_w)
846
AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
847
AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
848
AM_RANGE(0x194000, 0x195fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
849
AM_RANGE(0x1a0000, 0x1a3fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf1_rowscroll32)
850
AM_RANGE(0x1a4000, 0x1a5fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf2_rowscroll32)
831
AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
832
AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
833
AM_RANGE(0x194000, 0x195fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
834
AM_RANGE(0x1a0000, 0x1a3fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_SHARE("pf1_rowscroll32")
835
AM_RANGE(0x1a4000, 0x1a5fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_SHARE("pf2_rowscroll32")
852
AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("tilegen2", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
853
AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
854
AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) // unused
855
AM_RANGE(0x1e0000, 0x1e3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf3_rowscroll32)
856
AM_RANGE(0x1e4000, 0x1e5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf4_rowscroll32) // unused
837
AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
838
AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
839
AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) // unused
840
AM_RANGE(0x1e0000, 0x1e3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_SHARE("pf3_rowscroll32")
841
AM_RANGE(0x1e4000, 0x1e5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_SHARE("pf4_rowscroll32") // unused
858
843
AM_RANGE(0x204800, 0x204fff) AM_RAM // ace? 0x10 byte increments only // 13f ff stuff
861
AM_RANGE(0x208000, 0x208fff) AM_RAM AM_BASE_MEMBER(dragngun_state, m_dragngun_sprite_layout_0_ram)
862
AM_RANGE(0x20c000, 0x20cfff) AM_RAM AM_BASE_MEMBER(dragngun_state, m_dragngun_sprite_layout_1_ram)
863
AM_RANGE(0x210000, 0x217fff) AM_RAM AM_BASE_MEMBER(dragngun_state, m_dragngun_sprite_lookup_0_ram)
864
AM_RANGE(0x218000, 0x21ffff) AM_RAM AM_BASE_MEMBER(dragngun_state, m_dragngun_sprite_lookup_1_ram)
865
AM_RANGE(0x220000, 0x221fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) /* Main spriteram */
846
AM_RANGE(0x208000, 0x208fff) AM_RAM AM_SHARE("dragngun_lay0")
847
AM_RANGE(0x20c000, 0x20cfff) AM_RAM AM_SHARE("dragngun_lay1")
848
AM_RANGE(0x210000, 0x217fff) AM_RAM AM_SHARE("dragngun_look0")
849
AM_RANGE(0x218000, 0x21ffff) AM_RAM AM_SHARE("dragngun_look1")
850
AM_RANGE(0x220000, 0x221fff) AM_RAM AM_SHARE("spriteram") /* Main spriteram */
867
852
AM_RANGE(0x228000, 0x2283ff) AM_RAM //0x10 byte increments only
880
865
AM_RANGE(0x500000, 0x500003) AM_WRITE(dragngun_sprite_control_w)
883
static ADDRESS_MAP_START( lockload_map, AS_PROGRAM, 32 )
868
static ADDRESS_MAP_START( lockload_map, AS_PROGRAM, 32, dragngun_state )
884
869
AM_RANGE(0x000000, 0x0fffff) AM_ROM
885
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_BASE_MEMBER(deco32_state, m_ram)
870
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_SHARE("ram")
886
871
AM_RANGE(0x120000, 0x120fff) AM_READ(dragngun_prot_r)
887
872
AM_RANGE(0x1204c0, 0x1204c3) AM_WRITE(deco32_sound_w)
888
873
AM_RANGE(0x128000, 0x12800f) AM_READWRITE(deco32_irq_controller_r, deco32_irq_controller_w)
890
AM_RANGE(0x130000, 0x131fff) AM_RAM_WRITE(deco32_buffered_palette_w) AM_BASE_GENERIC(paletteram)
875
AM_RANGE(0x130000, 0x131fff) AM_RAM_WRITE(deco32_buffered_palette_w) AM_SHARE("paletteram")
891
876
AM_RANGE(0x138000, 0x138003) AM_READONLY AM_WRITENOP //palette dma complete in bit 0x8? ack? return 0 else tight loop
892
877
AM_RANGE(0x138008, 0x13800b) AM_WRITE(deco32_palette_dma_w)
894
879
AM_RANGE(0x170000, 0x170007) AM_READ(lockload_gun_mirror_r) /* Not on Dragongun */
895
880
AM_RANGE(0x178008, 0x17800f) AM_WRITENOP /* Gun read ACK's */
897
AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
898
AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
899
AM_RANGE(0x194000, 0x195fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
900
AM_RANGE(0x1a0000, 0x1a3fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf1_rowscroll32)
901
AM_RANGE(0x1a4000, 0x1a5fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf2_rowscroll32)
882
AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
883
AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
884
AM_RANGE(0x194000, 0x195fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
885
AM_RANGE(0x1a0000, 0x1a3fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_SHARE("pf1_rowscroll32")
886
AM_RANGE(0x1a4000, 0x1a5fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_SHARE("pf2_rowscroll32")
903
AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("tilegen2", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
904
AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
905
AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) // unused
906
AM_RANGE(0x1e0000, 0x1e3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf3_rowscroll32)
907
AM_RANGE(0x1e4000, 0x1e5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf4_rowscroll32) // unused
888
AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
889
AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
890
AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) // unused
891
AM_RANGE(0x1e0000, 0x1e3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_SHARE("pf3_rowscroll32")
892
AM_RANGE(0x1e4000, 0x1e5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_SHARE("pf4_rowscroll32") // unused
909
894
AM_RANGE(0x204800, 0x204fff) AM_RAM //0x10 byte increments only
910
AM_RANGE(0x208000, 0x208fff) AM_RAM AM_BASE_MEMBER(dragngun_state, m_dragngun_sprite_layout_0_ram)
911
AM_RANGE(0x20c000, 0x20cfff) AM_RAM AM_BASE_MEMBER(dragngun_state, m_dragngun_sprite_layout_1_ram)
912
AM_RANGE(0x210000, 0x217fff) AM_RAM AM_BASE_MEMBER(dragngun_state, m_dragngun_sprite_lookup_0_ram)
913
AM_RANGE(0x218000, 0x21ffff) AM_RAM AM_BASE_MEMBER(dragngun_state, m_dragngun_sprite_lookup_1_ram)
914
AM_RANGE(0x220000, 0x221fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) /* Main spriteram */
895
AM_RANGE(0x208000, 0x208fff) AM_RAM AM_SHARE("dragngun_lay0")
896
AM_RANGE(0x20c000, 0x20cfff) AM_RAM AM_SHARE("dragngun_lay1")
897
AM_RANGE(0x210000, 0x217fff) AM_RAM AM_SHARE("dragngun_look0")
898
AM_RANGE(0x218000, 0x21ffff) AM_RAM AM_SHARE("dragngun_look1")
899
AM_RANGE(0x220000, 0x221fff) AM_RAM AM_SHARE("spriteram") /* Main spriteram */
916
901
AM_RANGE(0x228000, 0x2283ff) AM_RAM //0x10 byte increments only
917
902
AM_RANGE(0x230000, 0x230003) AM_WRITE(dragngun_spriteram_dma_w)
919
904
AM_RANGE(0x300000, 0x3fffff) AM_ROM
921
AM_RANGE(0x400000, 0x400003) AM_DEVREADWRITE8_MODERN("oki3", okim6295_device, read, write, 0x000000ff)
922
AM_RANGE(0x420000, 0x420003) AM_DEVREADWRITE("eeprom", dragngun_eeprom_r, dragngun_eeprom_w)
906
AM_RANGE(0x400000, 0x400003) AM_DEVREADWRITE8("oki3", okim6295_device, read, write, 0x000000ff)
907
AM_RANGE(0x420000, 0x420003) AM_DEVREADWRITE_LEGACY("eeprom", dragngun_eeprom_r, dragngun_eeprom_w)
923
908
// AM_RANGE(0x430000, 0x43001f) AM_WRITE(dragngun_lightgun_w)
924
909
// AM_RANGE(0x438000, 0x438003) AM_READ(dragngun_lightgun_r)
925
910
AM_RANGE(0x440000, 0x440003) AM_READ(dragngun_service_r)
926
911
AM_RANGE(0x500000, 0x500003) AM_WRITE(dragngun_sprite_control_w)
929
static ADDRESS_MAP_START( tattass_map, AS_PROGRAM, 32 )
914
static ADDRESS_MAP_START( tattass_map, AS_PROGRAM, 32, deco32_state )
931
916
AM_RANGE(0x000000, 0x0f7fff) AM_ROM
932
917
AM_RANGE(0x0f8000, 0x0fffff) AM_ROM AM_WRITENOP
933
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_BASE_MEMBER(deco32_state, m_ram)
918
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_SHARE("ram")
934
919
AM_RANGE(0x120000, 0x120003) AM_NOP /* ACIA (unused) */
935
920
AM_RANGE(0x130000, 0x130003) AM_WRITENOP /* Coin port (unused?) */
936
921
AM_RANGE(0x140000, 0x140003) AM_WRITENOP /* Vblank ack */
937
922
AM_RANGE(0x150000, 0x150003) AM_WRITE(tattass_control_w) /* Volume port/Eprom/Priority */
939
924
AM_RANGE(0x162000, 0x162fff) AM_RAM /* 'Jack' RAM!? */
940
AM_RANGE(0x163000, 0x16309f) AM_RAM_WRITE(deco32_ace_ram_w) AM_BASE_MEMBER(deco32_state, m_ace_ram)
925
AM_RANGE(0x163000, 0x16309f) AM_RAM_WRITE(deco32_ace_ram_w) AM_SHARE("ace_ram")
941
926
AM_RANGE(0x164000, 0x164003) AM_WRITENOP /* Palette control BG2/3 ($1a constant) */
942
927
AM_RANGE(0x164004, 0x164007) AM_WRITENOP /* Palette control Obj1 ($6 constant) */
943
928
AM_RANGE(0x164008, 0x16400b) AM_WRITENOP /* Palette control Obj2 ($5 constant) */
944
929
AM_RANGE(0x16400c, 0x16400f) AM_WRITENOP
945
AM_RANGE(0x168000, 0x169fff) AM_RAM_WRITE(deco32_buffered_palette_w) AM_BASE_GENERIC(paletteram)
930
AM_RANGE(0x168000, 0x169fff) AM_RAM_WRITE(deco32_buffered_palette_w) AM_SHARE("paletteram")
946
931
AM_RANGE(0x16c000, 0x16c003) AM_WRITENOP
947
932
AM_RANGE(0x16c008, 0x16c00b) AM_WRITE(deco32_palette_dma_w)
956
941
AM_RANGE(0x17c010, 0x17c013) AM_WRITE(deco32_buffer_spriteram2_w)
957
942
AM_RANGE(0x17c018, 0x17c01b) AM_WRITENOP /* Sprite 'CPU' (unused) */
959
AM_RANGE(0x182000, 0x183fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
960
AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
961
AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf1_rowscroll32)
962
AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf2_rowscroll32)
963
AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
965
AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
966
AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
967
AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf3_rowscroll32)
968
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf4_rowscroll32)
969
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("tilegen2", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
971
AM_RANGE(0x200000, 0x200fff) AM_READWRITE(tattass_prot_r, tattass_prot_w) AM_BASE(&deco32_prot_ram)
944
AM_RANGE(0x182000, 0x183fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
945
AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
946
AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_SHARE("pf1_rowscroll32")
947
AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_SHARE("pf2_rowscroll32")
948
AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
950
AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
951
AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
952
AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_SHARE("pf3_rowscroll32")
953
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_SHARE("pf4_rowscroll32")
954
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
956
AM_RANGE(0x200000, 0x200fff) AM_READWRITE(tattass_prot_r, tattass_prot_w) AM_BASE_LEGACY(&deco32_prot_ram)
974
static ADDRESS_MAP_START( nslasher_map, AS_PROGRAM, 32 )
959
static ADDRESS_MAP_START( nslasher_map, AS_PROGRAM, 32, deco32_state )
975
960
AM_RANGE(0x000000, 0x0fffff) AM_ROM
976
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_BASE_MEMBER(deco32_state, m_ram)
961
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_SHARE("ram")
977
962
AM_RANGE(0x120000, 0x1200ff) AM_NOP /* ACIA (unused) */
978
963
AM_RANGE(0x140000, 0x140003) AM_WRITENOP /* Vblank ack */
979
964
AM_RANGE(0x150000, 0x150003) AM_WRITE(nslasher_eeprom_w) /* Volume port/Eprom/Priority */
981
AM_RANGE(0x163000, 0x16309f) AM_RAM_WRITE(deco32_ace_ram_w) AM_BASE_MEMBER(deco32_state, m_ace_ram) /* 'Ace' RAM!? */
966
AM_RANGE(0x163000, 0x16309f) AM_RAM_WRITE(deco32_ace_ram_w) AM_SHARE("ace_ram") /* 'Ace' RAM!? */
982
967
AM_RANGE(0x164000, 0x164003) AM_WRITENOP /* Palette control BG2/3 ($1a constant) */
983
968
AM_RANGE(0x164004, 0x164007) AM_WRITENOP /* Palette control Obj1 ($4 constant) */
984
969
AM_RANGE(0x164008, 0x16400b) AM_WRITENOP /* Palette control Obj2 ($6 constant) */
985
970
AM_RANGE(0x16400c, 0x16400f) AM_WRITENOP
986
AM_RANGE(0x168000, 0x169fff) AM_RAM_WRITE(deco32_buffered_palette_w) AM_BASE_GENERIC(paletteram)
971
AM_RANGE(0x168000, 0x169fff) AM_RAM_WRITE(deco32_buffered_palette_w) AM_SHARE("paletteram")
987
972
AM_RANGE(0x16c000, 0x16c003) AM_WRITENOP
988
973
AM_RANGE(0x16c008, 0x16c00b) AM_WRITE(deco32_palette_dma_w)
997
982
AM_RANGE(0x17c010, 0x17c013) AM_WRITE(deco32_buffer_spriteram2_w)
998
983
AM_RANGE(0x17c018, 0x17c01b) AM_WRITENOP /* Sprite 'CPU' (unused) */
1000
AM_RANGE(0x182000, 0x183fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
1001
AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
1002
AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf1_rowscroll32)
1003
AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf2_rowscroll32)
1004
AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
1006
AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
1007
AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("tilegen2", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
1008
AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf3_rowscroll32)
1009
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, m_pf4_rowscroll32)
1010
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("tilegen2", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
1012
AM_RANGE(0x200000, 0x200fff) AM_READWRITE(nslasher_prot_r, nslasher_prot_w) AM_BASE(&deco32_prot_ram)
985
AM_RANGE(0x182000, 0x183fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
986
AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
987
AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_SHARE("pf1_rowscroll32")
988
AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_SHARE("pf2_rowscroll32")
989
AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE_LEGACY("tilegen1", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
991
AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
992
AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
993
AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_SHARE("pf3_rowscroll32")
994
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_SHARE("pf4_rowscroll32")
995
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE_LEGACY("tilegen2", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
997
AM_RANGE(0x200000, 0x200fff) AM_READWRITE(nslasher_prot_r, nslasher_prot_w) AM_BASE_LEGACY(&deco32_prot_ram)
1015
1000
/******************************************************************************/
1017
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8 )
1002
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, deco32_state )
1018
1003
AM_RANGE(0x000000, 0x00ffff) AM_ROM
1019
AM_RANGE(0x110000, 0x110001) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w)
1020
AM_RANGE(0x120000, 0x120001) AM_DEVREADWRITE_MODERN("oki1", okim6295_device, read, write)
1021
AM_RANGE(0x130000, 0x130001) AM_DEVREADWRITE_MODERN("oki2", okim6295_device, read, write)
1022
AM_RANGE(0x140000, 0x140001) AM_READ(soundlatch_r)
1004
AM_RANGE(0x110000, 0x110001) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w)
1005
AM_RANGE(0x120000, 0x120001) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
1006
AM_RANGE(0x130000, 0x130001) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
1007
AM_RANGE(0x140000, 0x140001) AM_READ(soundlatch_byte_r)
1023
1008
AM_RANGE(0x1f0000, 0x1f1fff) AM_RAMBANK("bank8")
1024
AM_RANGE(0x1fec00, 0x1fec01) AM_WRITE(h6280_timer_w)
1025
AM_RANGE(0x1ff400, 0x1ff403) AM_WRITE(h6280_irq_status_w)
1009
AM_RANGE(0x1fec00, 0x1fec01) AM_WRITE_LEGACY(h6280_timer_w)
1010
AM_RANGE(0x1ff400, 0x1ff403) AM_WRITE_LEGACY(h6280_irq_status_w)
1026
1011
ADDRESS_MAP_END
1028
static READ8_HANDLER(latch_r)
1013
READ8_MEMBER(deco32_state::latch_r)
1030
deco32_state *state = space->machine().driver_data<deco32_state>();
1031
1015
/* bit 1 of nslasher_sound_irq specifies IRQ command writes */
1032
state->m_nslasher_sound_irq &= ~0x02;
1033
cputag_set_input_line(space->machine(), "audiocpu", 0, (state->m_nslasher_sound_irq != 0) ? ASSERT_LINE : CLEAR_LINE);
1034
return soundlatch_r(space,0);
1016
m_nslasher_sound_irq &= ~0x02;
1017
cputag_set_input_line(machine(), "audiocpu", 0, (m_nslasher_sound_irq != 0) ? ASSERT_LINE : CLEAR_LINE);
1018
return soundlatch_byte_r(space,0);
1037
static ADDRESS_MAP_START( nslasher_sound, AS_PROGRAM, 8 )
1021
static ADDRESS_MAP_START( nslasher_sound, AS_PROGRAM, 8, deco32_state )
1038
1022
AM_RANGE(0x0000, 0x7fff) AM_ROM
1039
1023
AM_RANGE(0x8000, 0x87ff) AM_RAM
1040
AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w)
1041
AM_RANGE(0xb000, 0xb000) AM_DEVREADWRITE_MODERN("oki1", okim6295_device, read, write)
1042
AM_RANGE(0xc000, 0xc000) AM_DEVREADWRITE_MODERN("oki2", okim6295_device, read, write)
1024
AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w)
1025
AM_RANGE(0xb000, 0xb000) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
1026
AM_RANGE(0xc000, 0xc000) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
1043
1027
AM_RANGE(0xd000, 0xd000) AM_READ(latch_r)
1044
1028
ADDRESS_MAP_END
1046
static ADDRESS_MAP_START( nslasher_io_sound, AS_IO, 8 )
1030
static ADDRESS_MAP_START( nslasher_io_sound, AS_IO, 8, deco32_state )
1047
1031
AM_RANGE(0x0000, 0xffff) AM_ROM AM_REGION("audiocpu", 0)
1048
1032
ADDRESS_MAP_END