Previous 199869 Revisions Next

r19373 Friday 7th December, 2012 at 06:55:36 UTC by David Haywood
more neogeo / cd cleanups, improves sound for ncd (nw)
[src/mame/drivers]neogeo.c
[src/mame/includes]neogeo.h
[src/mame/machine]megacdcd.c
[src/mess/drivers]ng_aes.c

trunk/src/mess/drivers/ng_aes.c
r19372r19373
4242
4343extern const char layout_neogeo[];
4444
45static const char *audio_banks[4] =
46{
47    NEOGEO_BANK_AUDIO_CPU_CART_BANK0, NEOGEO_BANK_AUDIO_CPU_CART_BANK1, NEOGEO_BANK_AUDIO_CPU_CART_BANK2, NEOGEO_BANK_AUDIO_CPU_CART_BANK3
48};
4945
5046
5147
52
5348static IRQ_CALLBACK(neocd_int_callback);
5449
5550/* Stubs for various functions called by the FBA code, replace with MAME specifics later */
r19372r19373
111106   DECLARE_WRITE16_MEMBER(memcard_w);
112107   DECLARE_READ16_MEMBER(neocd_memcard_r);
113108   DECLARE_WRITE16_MEMBER(neocd_memcard_w);
114   DECLARE_WRITE16_MEMBER(audio_command_w);
115   DECLARE_READ8_MEMBER(audio_command_r);
116   DECLARE_WRITE8_MEMBER(audio_result_w);
117109   DECLARE_WRITE16_MEMBER(main_cpu_bank_select_w);
118   DECLARE_READ8_MEMBER(audio_cpu_bank_select_f000_f7ff_r);
119   DECLARE_READ8_MEMBER(audio_cpu_bank_select_e000_efff_r);
120   DECLARE_READ8_MEMBER(audio_cpu_bank_select_c000_dfff_r);
121   DECLARE_READ8_MEMBER(audio_cpu_bank_select_8000_bfff_r);
122   DECLARE_WRITE16_MEMBER(system_control_w);
123110   DECLARE_READ16_MEMBER(neocd_control_r);
124111   DECLARE_WRITE16_MEMBER(neocd_control_w);
125112   DECLARE_READ16_MEMBER(neocd_transfer_r);
r19372r19373
131118   DECLARE_MACHINE_START(neocd);
132119   DECLARE_MACHINE_START(neogeo);
133120   DECLARE_MACHINE_RESET(neogeo);
121   DECLARE_MACHINE_RESET(neocd);
134122
135123   DECLARE_CUSTOM_INPUT_MEMBER(get_memcard_status);
136124
r19372r19373
207195}
208196
209197
210static void audio_cpu_assert_nmi(running_machine &machine)
211{
212   neogeo_state *state = machine.driver_data<neogeo_state>();
213   state->m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
214}
215198
216199
217200WRITE8_MEMBER(ng_aes_state::audio_cpu_clear_nmi_w)
r19372r19373
336319   }
337320}
338321
339
340
341322/*************************************
342323 *
343 *  Inter-CPU communications
344 *
345 *************************************/
346
347WRITE16_MEMBER(ng_aes_state::audio_command_w)
348{
349   /* accessing the LSB only is not mapped */
350   if (mem_mask != 0x00ff)
351   {
352      soundlatch_byte_w(space, 0, data >> 8);
353
354      audio_cpu_assert_nmi(machine());
355
356      /* boost the interleave to let the audio CPU read the command */
357      machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(50));
358
359      if (LOG_CPU_COMM) logerror("MAIN CPU PC %06x: audio_command_w %04x - %04x\n", space.device().safe_pc(), data, mem_mask);
360   }
361}
362
363
364READ8_MEMBER(ng_aes_state::audio_command_r)
365{
366   UINT8 ret = soundlatch_byte_r(space, 0);
367
368   if (LOG_CPU_COMM) logerror(" AUD CPU PC   %04x: audio_command_r %02x\n", space.device().safe_pc(), ret);
369
370   /* this is a guess */
371   audio_cpu_clear_nmi_w(space, 0, 0);
372
373   return ret;
374}
375
376
377WRITE8_MEMBER(ng_aes_state::audio_result_w)
378{
379
380   if (LOG_CPU_COMM && (m_audio_result != data)) logerror(" AUD CPU PC   %04x: audio_result_w %02x\n", space.device().safe_pc(), data);
381
382   m_audio_result = data;
383}
384
385
386static CUSTOM_INPUT( get_audio_result )
387{
388   neogeo_state *state = field.machine().driver_data<neogeo_state>();
389   UINT32 ret = state->m_audio_result;
390
391//  if (LOG_CPU_COMM) logerror("MAIN CPU PC %06x: audio_result_r %02x\n", field.machine(->safe_pc().device("maincpu")), ret);
392
393   return ret;
394}
395
396
397
398/*************************************
399 *
400324 *  Main CPU banking
401325 *
402326 *************************************/
403327
404static void _set_main_cpu_vector_table_source( running_machine &machine )
405{
406   neogeo_state *state = machine.driver_data<neogeo_state>();
407   state->membank(NEOGEO_BANK_VECTORS)->set_entry(state->m_main_cpu_vector_table_source);
408}
409
410
411static void set_main_cpu_vector_table_source( running_machine &machine, UINT8 data )
412{
413   neogeo_state *state = machine.driver_data<neogeo_state>();
414   state->m_main_cpu_vector_table_source = data;
415
416   _set_main_cpu_vector_table_source(machine);
417}
418
419
420static void _set_main_cpu_bank_address( running_machine &machine )
421{
422   neogeo_state *state = machine.driver_data<neogeo_state>();
423   state->membank(NEOGEO_BANK_CARTRIDGE)->set_base(&state->memregion("maincpu")->base()[state->m_main_cpu_bank_address]);
424}
425
426
427
428328WRITE16_MEMBER(ng_aes_state::main_cpu_bank_select_w)
429329{
430330   UINT32 bank_address;
r19372r19373
465365
466366
467367
468/*************************************
469 *
470 *  Audio CPU banking
471 *
472 *************************************/
473368
474static void set_audio_cpu_banking( running_machine &machine )
475{
476   neogeo_state *state = machine.driver_data<neogeo_state>();
477   int region;
478369
479   for (region = 0; region < 4; region++)
480      state->membank(audio_banks[region])->set_entry(state->m_audio_cpu_banks[region]);
481}
482370
483
484static void audio_cpu_bank_select( address_space &space, int region, UINT8 bank )
485{
486   neogeo_state *state = space.machine().driver_data<neogeo_state>();
487
488   if (LOG_AUDIO_CPU_BANKING) logerror("Audio CPU PC %03x: audio_cpu_bank_select: Region: %d   Bank: %02x\n", space.device().safe_pc(), region, bank);
489
490   state->m_audio_cpu_banks[region] = bank;
491
492   set_audio_cpu_banking(space.machine());
493}
494
495
496READ8_MEMBER(ng_aes_state::audio_cpu_bank_select_f000_f7ff_r)
497{
498   audio_cpu_bank_select(space, 0, offset >> 8);
499
500   return 0;
501}
502
503
504READ8_MEMBER(ng_aes_state::audio_cpu_bank_select_e000_efff_r)
505{
506   audio_cpu_bank_select(space, 1, offset >> 8);
507
508   return 0;
509}
510
511
512READ8_MEMBER(ng_aes_state::audio_cpu_bank_select_c000_dfff_r)
513{
514   audio_cpu_bank_select(space, 2, offset >> 8);
515
516   return 0;
517}
518
519
520READ8_MEMBER(ng_aes_state::audio_cpu_bank_select_8000_bfff_r)
521{
522   audio_cpu_bank_select(space, 3, offset >> 8);
523
524   return 0;
525}
526
527
528static void _set_audio_cpu_rom_source( address_space &space )
529{
530   neogeo_state *state = space.machine().driver_data<neogeo_state>();
531
532/*  if (!state->memregion("audiobios")->base())   */
533      state->m_audio_cpu_rom_source = 1;
534
535   state->membank(NEOGEO_BANK_AUDIO_CPU_MAIN_BANK)->set_entry(state->m_audio_cpu_rom_source);
536
537   /* reset CPU if the source changed -- this is a guess */
538   if (state->m_audio_cpu_rom_source != state->m_audio_cpu_rom_source_last)
539   {
540      state->m_audio_cpu_rom_source_last = state->m_audio_cpu_rom_source;
541
542      space.machine().device("audiocpu")->execute().set_input_line(INPUT_LINE_RESET, PULSE_LINE);
543
544      if (LOG_AUDIO_CPU_BANKING) logerror("Audio CPU PC %03x: selectign %s ROM\n", space.device().safe_pc(), state->m_audio_cpu_rom_source ? "CARTRIDGE" : "BIOS");
545   }
546}
547
548
549static void set_audio_cpu_rom_source( address_space &space, UINT8 data )
550{
551   neogeo_state *state = space.machine().driver_data<neogeo_state>();
552   state->m_audio_cpu_rom_source = data;
553
554   _set_audio_cpu_rom_source(space);
555}
556
557
558static void audio_cpu_banking_init( running_machine &machine )
559{
560   neogeo_state *state = machine.driver_data<neogeo_state>();
561   int region;
562   int bank;
563   UINT8 *rgn;
564   UINT32 address_mask;
565
566   /* audio bios/cartridge selection */
567   if (machine.root_device().memregion("audiobios")->base())
568      state->membank(NEOGEO_BANK_AUDIO_CPU_MAIN_BANK)->configure_entry(0, machine.root_device().memregion("audiobios")->base());
569   state->membank(NEOGEO_BANK_AUDIO_CPU_MAIN_BANK)->configure_entry(1, machine.root_device().memregion("audiocpu")->base());
570
571   /* audio banking */
572   address_mask = machine.root_device().memregion("audiocpu")->bytes() - 0x10000 - 1;
573
574   rgn = state->memregion("audiocpu")->base();
575   for (region = 0; region < 4; region++)
576   {
577      for (bank = 0; bank < 0x100; bank++)
578      {
579         UINT32 bank_address = 0x10000 + (((bank << (11 + region)) & 0x3ffff) & address_mask);
580         state->membank(audio_banks[region])->configure_entry(bank, &rgn[bank_address]);
581      }
582   }
583
584   /* set initial audio banks --
585       how does this really work, or is it even necessary? */
586   state->m_audio_cpu_banks[0] = 0x1e;
587   state->m_audio_cpu_banks[1] = 0x0e;
588   state->m_audio_cpu_banks[2] = 0x06;
589   state->m_audio_cpu_banks[3] = 0x02;
590
591   set_audio_cpu_banking(machine);
592
593   state->m_audio_cpu_rom_source_last = 0;
594   set_audio_cpu_rom_source(machine.device("maincpu")->memory().space(AS_PROGRAM), 0);
595}
596
597
598
599371/*************************************
600372 *
601373 *  System control register
602374 *
603375 *************************************/
604376
605WRITE16_MEMBER(ng_aes_state::system_control_w)
606{
607   if (ACCESSING_BITS_0_7)
608   {
609      UINT8 bit = (offset >> 3) & 0x01;
610377
611      switch (offset & 0x07)
612      {
613      default:
614      case 0x00: neogeo_set_screen_dark(machine(), bit); break;
615      case 0x01: set_main_cpu_vector_table_source(machine(), bit);
616               set_audio_cpu_rom_source(space, bit); /* this is a guess */
617               break;
618      case 0x05: neogeo_set_fixed_layer_source(machine(), bit); break;
619//      case 0x06: set_save_ram_unlock(machine(), bit); break;
620      case 0x07: neogeo_set_palette_bank(machine(), bit); break;
621378
622      case 0x02: /* unknown - HC32 middle pin 1 */
623      case 0x03: /* unknown - uPD4990 pin ? */
624      case 0x04: /* unknown - HC32 middle pin 10 */
625         logerror("PC: %x  Unmapped system control write.  Offset: %x  Data: %x\n", space.device().safe_pc(), offset & 0x07, bit);
626         break;
627      }
628
629      if (LOG_VIDEO_SYSTEM && ((offset & 0x07) != 0x06)) logerror("PC: %x  System control write.  Offset: %x  Data: %x\n", space.device().safe_pc(), offset & 0x07, bit);
630   }
631}
632
633
634379UINT8 ng_aes_state::neogeoReadTransfer(UINT32 sekAddress, int is_byte_transfer)
635380{
636381//  if ((sekAddress & 0x0FFFFF) < 16)
r19372r19373
810555      case 0x0126:
811556//          bprintf(PRINT_NORMAL, _T("  - NGCD Z80 BUSREQ -> 1 (PC: 0x%06X)\n"), SekGetPC(-1));
812557         curr_space->machine().scheduler().synchronize();
813         curr_space->machine().device("audiocpu")->execute().set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
814
558         m_audiocpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
815559         break;
816560      case 0x0128:
817561//          bprintf(PRINT_NORMAL, _T("  - NGCD FIX BUSREQ -> 1 (PC: 0x%06X)\n"), SekGetPC(-1));
r19372r19373
827571      case 0x0146:
828572//          bprintf(PRINT_NORMAL, _T("  - NGCD Z80 BUSREQ -> 0 (PC: 0x%06X)\n"), SekGetPC(-1));
829573         curr_space->machine().scheduler().synchronize();
830         curr_space->machine().device("audiocpu")->execute().set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
574         m_audiocpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
831575         break;
832576      case 0x0148:
833577//          bprintf(PRINT_NORMAL, _T("  - NGCD FIX BUSREQ -> 0 (PC: 0x%06X)\n"), SekGetPC(-1));
r19372r19373
867611         break;
868612      }
869613      case 0x0182: {
870         static UINT8 clara = 0;
871         if (!byteValue && clara) {
872//              bprintf(PRINT_IMPORTANT, _T("  - NGCD Z80 reset (PC: 0x%06X)\n"), SekGetPC(-1));
873            //ZetReset();
874         }
875         clara = byteValue;
614      //   printf("blah %02x\n", byteValue);
615         if (byteValue == 0x00) m_audiocpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
616         else m_audiocpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
617
876618         break;
877619      }
878620      case 0x01A0:
r19372r19373
14091151 *
14101152 *************************************/
14111153
1412static void aes_postload(neogeo_state *state)
1413{
1414   _set_main_cpu_bank_address(state->machine());
1415   _set_main_cpu_vector_table_source(state->machine());
1416   set_audio_cpu_banking(state->machine());
1417   _set_audio_cpu_rom_source(state->machine().device("maincpu")->memory().space(AS_PROGRAM));
1418}
14191154
1420
1421
14221155static void common_machine_start(running_machine &machine)
14231156{
14241157   neogeo_state *state = machine.driver_data<neogeo_state>();
r19372r19373
14301163   main_cpu_banking_init(machine);
14311164
14321165   /* set the initial audio CPU ROM banks */
1433   audio_cpu_banking_init(machine);
1166   neogeo_audio_cpu_banking_init(machine);
14341167
14351168   state->create_interrupt_timers(machine);
14361169
r19372r19373
14671200   state->save_item(NAME(state->m_led2_value));
14681201   state->save_item(NAME(state->m_recurse));
14691202
1470   machine.save().register_postload(save_prepost_delegate(FUNC(aes_postload), state));
1203   machine.save().register_postload(save_prepost_delegate(FUNC(neogeo_postload), &machine));
14711204}
14721205
14731206MACHINE_START_MEMBER(ng_aes_state,neogeo)
14741207{
14751208   common_machine_start(machine());
1209   m_is_mvs = false;
14761210
14771211   /* initialize the memcard data structure */
14781212   m_memcard_data = auto_alloc_array_clear(machine(), UINT8, MEMCARD_SIZE);
r19372r19373
14831217{
14841218   UINT8* ROM = machine().root_device().memregion("mainbios")->base();
14851219   UINT8* RAM = machine().root_device().memregion("maincpu")->base();
1486   UINT8* Z80bios = machine().root_device().memregion("audiobios")->base();
1487   int x;
1220//   UINT8* Z80bios = machine().root_device().memregion("audiobios")->base();
1221//   int x;
1222   m_has_audio_banking = false;
14881223
14891224   common_machine_start(machine());
1225   m_is_mvs = false;
14901226
14911227   /* irq levels for NEOCD (swapped compared to MVS / AES) */
14921228   m_vblank_level = 2;
r19372r19373
15011237   // copy initial 68k vectors into RAM
15021238   memcpy(RAM,ROM,0x80);
15031239
1504   // copy Z80 code into Z80 space (from 0x20000)
1505   for(x=0;x<0x10000;x+=2)
1506   {
1507      Z80bios[x] = ROM[x+0x20001];
1508      Z80bios[x+1] = ROM[x+0x20000];
1509   }
15101240
15111241
1242
15121243   // for custom vectors
15131244   machine().device("maincpu")->execute().set_irq_acknowledge_callback(neocd_int_callback);
15141245
r19372r19373
15161247   
15171248}
15181249
1250
15191251//static DEVICE_IMAGE_LOAD(aes_cart)
15201252//{
15211253//  else
r19372r19373
15581290   NeoZ80ROMActive = memregion("audiocpu")->base();
15591291   NeoTextRAM = memregion("fixed")->base();
15601292   curr_space = &machine().device("maincpu")->memory().space(AS_PROGRAM);
1293}
15611294
1295MACHINE_RESET_MEMBER(ng_aes_state,neocd)
1296{
1297   MACHINE_RESET_CALL_MEMBER( neogeo );
15621298
15631299   m_tempcdc->NeoCDCommsReset();
15641300
1565   nTransferWriteEnable = 0;
1301   m_audiocpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
1302   m_audiocpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
15661303
1304   nTransferWriteEnable = 0;
15671305}
15681306
15691307
1570
15711308/*************************************
15721309 *
15731310 *  Main CPU memory handlers
r19372r19373
16691406
16701407
16711408
1672// does the Z80 actually see all of this as RAM on the NeoCD, or is it only actually writable via the transfer areas?
1409
16731410static ADDRESS_MAP_START( neocd_audio_map, AS_PROGRAM, 8, ng_aes_state )
1674   AM_RANGE(0x0000, 0x7fff) AM_RAMBANK(NEOGEO_BANK_AUDIO_CPU_MAIN_BANK)
1675   AM_RANGE(0x8000, 0xbfff) AM_RAMBANK(NEOGEO_BANK_AUDIO_CPU_CART_BANK3)
1676   AM_RANGE(0xc000, 0xdfff) AM_RAMBANK(NEOGEO_BANK_AUDIO_CPU_CART_BANK2)
1677   AM_RANGE(0xe000, 0xefff) AM_RAMBANK(NEOGEO_BANK_AUDIO_CPU_CART_BANK1)
1678   AM_RANGE(0xf000, 0xf7ff) AM_RAMBANK(NEOGEO_BANK_AUDIO_CPU_CART_BANK0)
1679   AM_RANGE(0xf800, 0xffff) AM_RAM
1411   AM_RANGE(0x0000, 0xffff) AM_RAM AM_REGION("audiocpu", 0x00000)
16801412ADDRESS_MAP_END
16811413
16821414
r19372r19373
16851417   AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READ(audio_command_r)
16861418   AM_RANGE(0x04, 0x07) AM_MIRROR(0xff00) AM_DEVREADWRITE_LEGACY("ymsnd", ym2610_r, ym2610_w)
16871419   AM_RANGE(0x08, 0x08) AM_MIRROR(0xff00) /* write - NMI enable / acknowledge? (the data written doesn't matter) */
1688//  AM_RANGE(0x08, 0x08) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_f000_f7ff_r)
1689//  AM_RANGE(0x09, 0x09) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_e000_efff_r)
1690//  AM_RANGE(0x0a, 0x0a) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_c000_dfff_r)
1691//  AM_RANGE(0x0b, 0x0b) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_8000_bfff_r)
1420   // banking reads are actually NOP on NeoCD? but some games still access them
1421   AM_RANGE(0x08, 0x08) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_f000_f7ff_r)
1422   AM_RANGE(0x09, 0x09) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_e000_efff_r)
1423   AM_RANGE(0x0a, 0x0a) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_c000_dfff_r)
1424   AM_RANGE(0x0b, 0x0b) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_8000_bfff_r)
16921425   AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff00) AM_WRITE(audio_result_w)
16931426   AM_RANGE(0x18, 0x18) AM_MIRROR(0xff00) /* write - NMI disable? (the data written doesn't matter) */
16941427ADDRESS_MAP_END
r19372r19373
17581491   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* having this ACTIVE_HIGH causes you to start with 2 credits using USA bios roms */   \
17591492   PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SPECIAL ) /* what is this? */                        \
17601493   PORT_BIT( 0x00c0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(get_calendar_status, NULL)         \
1761   PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(get_audio_result, NULL)
1494   PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, neogeo_state,get_audio_result, NULL) \
17621495
1763
17641496#define STANDARD_IN4                                                         \
17651497   PORT_START("IN4")                                                         \
17661498   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNKNOWN )                                    \
r19372r19373
20371769
20381770
20391771   MCFG_MACHINE_START_OVERRIDE(ng_aes_state,neocd)
1772   MCFG_MACHINE_RESET_OVERRIDE(ng_aes_state,neocd)
20401773
20411774   MCFG_CDROM_ADD( "cdrom",neocd_cdrom )
20421775   MCFG_SOFTWARE_LIST_ADD("cd_list","neocd")
trunk/src/mame/drivers/neogeo.c
r19372r19373
357357   state->m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
358358}
359359
360
361360WRITE8_MEMBER(neogeo_state::audio_cpu_clear_nmi_w)
362361{
363362   m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
r19372r19373
584583}
585584
586585
586
587
588
587589READ8_MEMBER(neogeo_state::audio_command_r)
588590{
589591   UINT8 ret = soundlatch_byte_r(space, 0);
r19372r19373
630632}
631633
632634
635
633636static void set_main_cpu_vector_table_source( running_machine &machine, UINT8 data )
634637{
635638   neogeo_state *state = machine.driver_data<neogeo_state>();
r19372r19373
658661}
659662
660663
664
661665WRITE16_MEMBER(neogeo_state::main_cpu_bank_select_w)
662666{
663667   UINT32 bank_address;
r19372r19373
706710static void set_audio_cpu_banking( running_machine &machine )
707711{
708712   neogeo_state *state = machine.driver_data<neogeo_state>();
713
714   if (!state->m_has_audio_banking) return;
715
709716   int region;
710717
711718   for (region = 0; region < 4; region++)
r19372r19373
713720}
714721
715722
723
716724static void audio_cpu_bank_select( address_space &space, int region, UINT8 bank )
717725{
718726   neogeo_state *state = space.machine().driver_data<neogeo_state>();
727   
728   if (!state->m_has_audio_banking) return;
719729
720730   if (LOG_AUDIO_CPU_BANKING) logerror("Audio CPU PC %03x: audio_cpu_bank_select: Region: %d   Bank: %02x\n", space.device().safe_pc(), region, bank);
721731
r19372r19373
725735}
726736
727737
738
728739READ8_MEMBER(neogeo_state::audio_cpu_bank_select_f000_f7ff_r)
729740{
730741   audio_cpu_bank_select(space, 0, offset >> 8);
r19372r19373
760771static void _set_audio_cpu_rom_source( address_space &space )
761772{
762773   neogeo_state *state = space.machine().driver_data<neogeo_state>();
774   if (!state->m_has_audio_banking) return;
763775
764776/*  if (!state->memregion("audiobios")->base())   */
765777      state->m_audio_cpu_rom_source = 1;
r19372r19373
773785
774786      space.machine().device("audiocpu")->execute().set_input_line(INPUT_LINE_RESET, PULSE_LINE);
775787
776      if (LOG_AUDIO_CPU_BANKING) logerror("Audio CPU PC %03x: selectign %s ROM\n", space.device().safe_pc(), state->m_audio_cpu_rom_source ? "CARTRIDGE" : "BIOS");
788      if (LOG_AUDIO_CPU_BANKING) logerror("Audio CPU PC %03x: selecting %s ROM\n", space.device().safe_pc(), state->m_audio_cpu_rom_source ? "CARTRIDGE" : "BIOS");
777789   }
778790}
779791
780792
793
794
781795static void set_audio_cpu_rom_source( address_space &space, UINT8 data )
782796{
783797   neogeo_state *state = space.machine().driver_data<neogeo_state>();
r19372r19373
787801}
788802
789803
790static void audio_cpu_banking_init( running_machine &machine )
804
805
806
807void neogeo_audio_cpu_banking_init( running_machine &machine )
791808{
792809   neogeo_state *state = machine.driver_data<neogeo_state>();
810   if (!state->m_has_audio_banking) return;
811
793812   int region;
794813   int bank;
795814   UINT8 *rgn;
r19372r19373
828847
829848
830849
850
851
831852/*************************************
832853 *
833854 *  System control register
r19372r19373
848869               set_audio_cpu_rom_source(space, bit); /* this is a guess */
849870               break;
850871      case 0x05: neogeo_set_fixed_layer_source(machine(), bit); break;
851      case 0x06: set_save_ram_unlock(machine(), bit); break;
872      case 0x06: if (m_is_mvs) set_save_ram_unlock(machine(), bit); break;
852873      case 0x07: neogeo_set_palette_bank(machine(), bit); break;
853874
854875      case 0x02: /* unknown - HC32 middle pin 1 */
r19372r19373
863884}
864885
865886
866
867887/*************************************
868888 *
869889 *  Watchdog
r19372r19373
974994 *
975995 *************************************/
976996
977static void neogeo_postload(running_machine &machine)
997void neogeo_postload(running_machine &machine)
978998{
999   neogeo_state *state = machine.driver_data<neogeo_state>();
1000
9791001   _set_main_cpu_bank_address(machine);
9801002   _set_main_cpu_vector_table_source(machine);
9811003   set_audio_cpu_banking(machine);
9821004   _set_audio_cpu_rom_source(machine.device("maincpu")->memory().space(AS_PROGRAM));
983   set_outputs(machine);
1005   if (state->m_is_mvs) set_outputs(machine);
9841006}
9851007
1008
1009
1010
1011
1012
9861013void neogeo_state::machine_start()
9871014{
9881015
r19372r19373
9961023   main_cpu_banking_init(machine());
9971024
9981025   /* set the initial audio CPU ROM banks */
999   audio_cpu_banking_init(machine());
1026   neogeo_audio_cpu_banking_init(machine());
10001027
10011028   create_interrupt_timers(machine());
10021029
trunk/src/mame/machine/megacdcd.c
r19372r19373
135135   if (!neocd_hack)
136136      CDD_RX[0] = (CDD_STATUS  & 0xff00)>>8;
137137   else
138   {
139   //   printf("was %02x returning %02x\n", (CDD_STATUS  & 0xff00)>>8, NeoCD_StatusHack);
138140      CDD_RX[0] = NeoCD_StatusHack;
141   }
139142
140143   CDD_RX[1] = (CDD_STATUS  & 0x00ff)>>0;
141144   CDD_RX[2] = (CDD_MIN  & 0xff00)>>8;
trunk/src/mame/includes/neogeo.h
r19372r19373
3737public:
3838   neogeo_state(const machine_config &mconfig, device_type type, const char *tag)
3939      : driver_device(mconfig, type, tag),
40        m_save_ram(*this, "save_ram") { }
40      m_save_ram(*this, "save_ram")
41   {
42      m_has_audio_banking = true;
43      m_is_mvs = true;
44   }
4145
4246   /* memory pointers */
4347//  UINT8      *memcard_data;   // this currently uses generic handlers
r19372r19373
222226   TIMER_CALLBACK_MEMBER(vblank_interrupt_callback);
223227   TIMER_CALLBACK_MEMBER(auto_animation_timer_callback);
224228   TIMER_CALLBACK_MEMBER(sprite_line_timer_callback);
229
230   bool m_has_audio_banking;
231   bool m_is_mvs;
225232};
226233
227234
r19372r19373
233240void neogeo_acknowledge_interrupt(running_machine &machine, UINT16 data);
234241void neogeo_set_main_cpu_bank_address(address_space &space, UINT32 bank_address);
235242DEVICE_IMAGE_LOAD( neo_cartridge );
243void neogeo_postload(running_machine &machine);
244void neogeo_audio_cpu_banking_init( running_machine &machine );
236245
237
238246/*----------- defined in machine/neocrypt.c -----------*/
239247
240248void kof99_neogeo_gfx_decrypt(running_machine &machine, int extra_xor);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team