Previous 199869 Revisions Next

r21197 Wednesday 20th February, 2013 at 00:16:36 UTC by Angelo Salese
Very preliminary sound DMA hooked up. Born to be Wild!
[src/mame/drivers]coolridr.c

trunk/src/mame/drivers/coolridr.c
r21196r21197
323323   UINT8 m_vblank;
324324   int m_scsp_last_line;
325325   UINT8 an_mux_data;
326   UINT8 sound_data;
326327
327
328328   DECLARE_READ32_MEMBER(sysh1_unk_r);
329329   DECLARE_WRITE32_MEMBER(sysh1_unk_w);
330330   DECLARE_READ32_MEMBER(sysh1_ioga_r);
r21196r21197
343343   DECLARE_WRITE8_MEMBER(analog_mux_w);
344344   DECLARE_WRITE8_MEMBER(lamps_w);
345345   DECLARE_WRITE_LINE_MEMBER(scsp_to_main_irq);
346   DECLARE_WRITE8_MEMBER(sound_to_sh1_w);
346347   DECLARE_DRIVER_INIT(coolridr);
347348   virtual void machine_start();
348349   virtual void machine_reset();
r21196r21197
469470/* unknown purpose */
470471READ32_MEMBER(coolridr_state::sysh1_unk_r)
471472{
473   if(offset == 8)
474      return sound_data;
475
476   if(offset == 2 || offset == 6) // DMA status
477      return 0;
478
479   printf("%08x\n",offset);
480
472481   return m_h1_unk[offset];
473482}
474483
475484WRITE32_MEMBER(coolridr_state::sysh1_unk_w)
476485{
486   address_space &main_space = m_maincpu->space(AS_PROGRAM);
487   address_space &sound_space = m_soundcpu->space(AS_PROGRAM);
488
489   if(offset == 8)
490   {
491      //bit 16 probably halts m68k
492      return;
493   }
494
495   if(offset == 2)
496   {
497      if(!(data & 1) && (m_h1_unk[2] & 1)) // 1 -> 0 transition enables DMA
498      {
499         UINT32 src = m_h1_unk[0];
500         UINT32 dst = m_h1_unk[1];
501         UINT32 size = 0x200; // TODO
502
503         if(src == 0x100000) // DMA for m68k program, TODO
504            return;
505
506         //printf("%08x %08x %08x\n",src,dst,size);
507
508         for(int i = 0;i < size; i+=2)
509         {
510            sound_space.write_word(dst,main_space.read_word(src));
511            src+=2;
512            dst+=2;
513         }
514      }
515   }
516
517   if(offset == 6)
518   {
519      if(!(data & 1) && (m_h1_unk[6] & 1)) // 1 -> 0 transition enables DMA
520      {
521         UINT32 src = m_h1_unk[4];
522         UINT32 dst = m_h1_unk[5];
523         UINT32 size = 0x200; // TODO
524
525         if(src == 0x100000) // DMA for m68k program, TODO
526            return;
527
528         //printf("%08x %08x %08x\n",src,dst,size);
529
530         for(int i = 0;i < size; i+=2)
531         {
532            sound_space.write_word(dst,main_space.read_word(src));
533            src+=2;
534            dst+=2;
535         }
536      }
537   }
538
477539   COMBINE_DATA(&m_h1_unk[offset]);
540
541   //printf("%08x %08x\n",offset*4,m_h1_unk[offset]);
478542}
479543
544
480545/* According to Guru, this is actually the same I/O chip of Sega Model 2 HW */
481546#if 0
482547READ32_MEMBER(coolridr_state::sysh1_ioga_r)
r21196r21197
754819            // it writes the palette for the bgs here, with fade effects?
755820            //  is this the only way for the tile colours to be actually used, or does this just go to memory somewhere too?
756821            //printf("blit mode %02x %02x %08x\n", m_blitterMode, m_blitterSerialCount,  data);
757           
822
758823            sysh1_pal_w(space,m_textOffset,data,0xffffffff);
759824            m_textOffset++;
760825
r21196r21197
9721037   AM_RANGE(0x03200000, 0x0327ffff) AM_READWRITE16(h1_soundram2_r, h1_soundram2_w,0xffffffff) //AM_SHARE("soundram2")
9731038   AM_RANGE(0x03300000, 0x03300fff) AM_DEVREADWRITE16_LEGACY("scsp2", scsp_r, scsp_w, 0xffffffff)
9741039
975   AM_RANGE(0x04000000, 0x0400001f) AM_DEVREADWRITE8("i8237", am9517a_device, read, write, 0xffffffff)
976   AM_RANGE(0x04000020, 0x0400003f) AM_READWRITE(sysh1_unk_r,sysh1_unk_w) AM_SHARE("h1_unk")
977   AM_RANGE(0x04200000, 0x0420003f) AM_RAM /* hi-word for DMA? */
1040//   AM_RANGE(0x04000000, 0x0400001f) AM_DEVREADWRITE8("i8237", am9517a_device, read, write, 0xffffffff)
1041   AM_RANGE(0x04000000, 0x0400003f) AM_READWRITE(sysh1_unk_r,sysh1_unk_w) AM_SHARE("h1_unk")
1042//   AM_RANGE(0x04200000, 0x0420003f) AM_RAM /* hi-word for DMA? */
9781043
9791044   AM_RANGE(0x05000000, 0x05000fff) AM_RAM
9801045   AM_RANGE(0x05200000, 0x052001ff) AM_RAM
r21196r21197
9951060   AM_RANGE(0x60000000, 0x600003ff) AM_WRITENOP
9961061ADDRESS_MAP_END
9971062
998// SH-1 or SH-2 almost certainly copies the program down to here: the ROM containing the program is 32-bit wide and the 68000 is 16-bit
999// the SCSP is believed to be hardcoded to decode the first 4 MB like this for a master/slave config
1000// (see also Model 3):
1063WRITE8_MEMBER(coolridr_state::sound_to_sh1_w)
1064{
1065   sound_data = data;
1066}
1067
10011068static ADDRESS_MAP_START( system_h1_sound_map, AS_PROGRAM, 16, coolridr_state )
10021069   AM_RANGE(0x000000, 0x07ffff) AM_RAM AM_REGION("scsp1",0) AM_SHARE("soundram")
10031070   AM_RANGE(0x100000, 0x100fff) AM_DEVREADWRITE_LEGACY("scsp1", scsp_r, scsp_w)
10041071   AM_RANGE(0x200000, 0x27ffff) AM_RAM AM_REGION("scsp2",0) AM_SHARE("soundram2")
10051072   AM_RANGE(0x300000, 0x300fff) AM_DEVREADWRITE_LEGACY("scsp2", scsp_r, scsp_w)
10061073   AM_RANGE(0x800000, 0x80ffff) AM_RAM
1007   AM_RANGE(0x900000, 0x900001) AM_WRITENOP
1074   AM_RANGE(0x900000, 0x900001) AM_WRITE8(sound_to_sh1_w,0x00ff)
10081075ADDRESS_MAP_END
10091076
10101077
r21196r21197
14691536static const scsp_interface scsp2_interface =
14701537{
14711538   0,
1472   NULL
1539   NULL,
1540   DEVCB_DRIVER_LINE_MEMBER(coolridr_state, scsp_to_main_irq)
14731541};
14741542
14751543#define MAIN_CLOCK XTAL_28_63636MHz

Previous 199869 Revisions Next


© 1997-2024 The MAME Team