Previous 199869 Revisions Next

r29607 Sunday 13th April, 2014 at 15:09:29 UTC by Angelo Salese
Checkpoint
[src/emu/sound]scsp.h
[src/mame/audio]segam1audio.c segam1audio.h
[src/mame/drivers]metro.c model1.c model2.c
[src/mame/includes]model1.h model2.h

trunk/src/mame/audio/segam1audio.c
r29606r29607
8484   m_audiocpu(*this, M68000_TAG),
8585   m_multipcm_1(*this, MULTIPCM_1_TAG),
8686   m_multipcm_2(*this, MULTIPCM_2_TAG),
87   m_ym(*this, YM3438_TAG)
87   m_ym(*this, YM3438_TAG),
88   m_main_irq_cb(*this)
8889{
8990}
9091
r29606r29607
9495
9596void segam1audio_device::device_start()
9697{
98   m_main_irq_cb.resolve_safe();
9799}
98100
99101//-------------------------------------------------
trunk/src/mame/audio/segam1audio.h
r29606r29607
1515#define MCFG_SEGAM1AUDIO_ADD(_tag) \
1616   MCFG_DEVICE_ADD(_tag, SEGAM1AUDIO, 0)
1717
18
1819//**************************************************************************
1920//  TYPE DEFINITIONS
2021//**************************************************************************
r29606r29607
5354   int m_to_68k[8];
5455   int m_fifo_rptr;
5556   int m_fifo_wptr;
57   devcb2_write_line   m_main_irq_cb;
5658};
5759
5860
trunk/src/mame/includes/model1.h
r29606r29607
141141   DECLARE_MACHINE_RESET(model1);
142142   DECLARE_VIDEO_START(model1);
143143   DECLARE_MACHINE_RESET(model1_vr);
144   DECLARE_WRITE_LINE_MEMBER(m1_to_main_irq);
144145   UINT32 screen_update_model1(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
145146   void screen_eof_model1(screen_device &screen, bool state);
146147   TIMER_DEVICE_CALLBACK_MEMBER(model1_interrupt);
trunk/src/mame/includes/model2.h
r29606r29607
101101   raster_state *m_raster;
102102   geo_state *m_geo;
103103   bitmap_rgb32 m_sys24_bitmap;
104   UINT32 m_videocontrol;
105   UINT32 m_soundack;
106   void model2_check_irq_state();
104107
105108   DECLARE_CUSTOM_INPUT_MEMBER(_1c00000_r);
106109   DECLARE_CUSTOM_INPUT_MEMBER(_1c0001c_r);
r29606r29607
112115   DECLARE_WRITE32_MEMBER(analog_2b_w);
113116   DECLARE_READ32_MEMBER(fifoctl_r);
114117   DECLARE_READ32_MEMBER(videoctl_r);
118   DECLARE_WRITE32_MEMBER(videoctl_w);
115119   DECLARE_WRITE32_MEMBER(rchase2_devices_w);
116120   DECLARE_WRITE32_MEMBER(srallyc_devices_w);
117121   DECLARE_READ32_MEMBER(copro_prg_r);
trunk/src/mame/drivers/model1.c
r29606r29607
15081508   ROM_LOAD( "u2", 0x4000, 0x4000, CRC(c589f428) SHA1(98dc0114a5f89636b4e237ed954e19f1cfd186ab) )
15091509ROM_END
15101510
1511
1512
15131511static MACHINE_CONFIG_START( model1, model1_state )
15141512   MCFG_CPU_ADD("maincpu", V60, 16000000)
15151513   MCFG_CPU_PROGRAM_MAP(model1_mem)
trunk/src/mame/drivers/metro.c
r29606r29607
17841784      *m_irq_enable = data ^ 0xffff;
17851785}
17861786
1787   /* FIXME: algorithm not yet understood. */
1787/* FIXME: algorithm not yet understood. */
17881788WRITE16_MEMBER(metro_state::vram_0_clr_w)
17891789{
17901790   static int i;
trunk/src/mame/drivers/model2.c
r29606r29607
161161{
162162   UINT32 r = m_copro_fifoin_data[m_copro_fifoin_rpos++];
163163
164
164165   if (m_copro_fifoin_rpos == COPRO_FIFOIN_SIZE)
165166   {
166167      m_copro_fifoin_rpos = 0;
r29606r29607
181182      return;
182183   }
183184
184   //mame_printf_debug("COPRO FIFOIN at %08X, %08X, %f\n", device->safe_pc(), data, *(float*)&data);
185   //printf("COPRO FIFOIN at %08X, %08X, %f\n", device->safe_pc(), data, *(float*)&data);
185186
186187   state->m_copro_fifoin_data[state->m_copro_fifoin_wpos++] = data;
187188   if (state->m_copro_fifoin_wpos == COPRO_FIFOIN_SIZE)
r29606r29607
339340   m_timers[tnum]->reset();
340341
341342   m_intreq |= (1<<bit);
342   if (m_intena & (1<<bit))
343   {
344      m_maincpu->set_input_line(I960_IRQ2, ASSERT_LINE);
345   }
343   model2_check_irq_state();
346344
347345   m_timervals[tnum] = 0;
348346   m_timerrun[tnum] = 0;
r29606r29607
366364   m_geocnt = 0;
367365   m_ctrlmode = 0;
368366   m_analog_channel = 0;
367   m_soundack = 0;
369368
370369   m_timervals[0] = 0xfffff;
371370   m_timervals[1] = 0xfffff;
r29606r29607
483482
484483READ32_MEMBER(model2_state::videoctl_r)
485484{
486   return (m_screen->frame_number() & 1) << 2;
485   return ((m_screen->frame_number() & 1) << 2) | (m_videocontrol & 3);
487486}
488487
488WRITE32_MEMBER(model2_state::videoctl_w)
489{
490   COMBINE_DATA(&m_videocontrol);
491}
492
489493CUSTOM_INPUT_MEMBER(model2_state::_1c00000_r)
490494{
491495   UINT32 ret = ioport("IN0")->read();
r29606r29607
994998   return m_intreq;
995999}
9961000
1001void model2_state::model2_check_irq_state()
1002{
1003   const int irq_type[16]= {I960_IRQ0,I960_IRQ1,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ2,I960_IRQ3,I960_IRQ3};
1004
1005   for(int i=0;i<16;i++)
1006   {
1007      if (m_intena & (1<<i) && m_intreq & 1<<i)
1008         m_maincpu->set_input_line(irq_type[i], ASSERT_LINE);
1009   }
1010}
1011
9971012WRITE32_MEMBER(model2_state::model2_irq_w)
9981013{
9991014   m_maincpu->i960_noburst();
r29606r29607
10011016   if (offset)
10021017   {
10031018      COMBINE_DATA(&m_intena);
1019      model2_check_irq_state();
10041020      return;
10051021   }
10061022
10071023   m_intreq &= data;
1024   /* TODO: improve this */
10081025   UINT32 irq_ack = data ^ 0xffffffff;
10091026
10101027   if(irq_ack & 1<<0)
r29606r29607
10151032
10161033}
10171034
1035/* TODO: rewrite this part. */
10181036READ32_MEMBER(model2_state::model2_serial_r)
10191037{
10201038   if ((offset == 0) && (mem_mask == 0xffff0000))
r29606r29607
10251043   return 0xffffffff;
10261044}
10271045
1046
10281047WRITE32_MEMBER(model2_state::model2o_serial_w)
10291048{
1049   if(mem_mask == 0xffff0000)
1050   {
1051      if (!space.debugger_access())
1052      {
1053         //m_soundack++;
1054      }
1055   }
10301056   if (mem_mask == 0x0000ffff)
10311057   {
10321058      if (!m_m1audio->ready_r(space, 0))
r29606r29607
10811107   0x94,0xD5,0x73,0x09,0xE4,0x3D,0x2D,0x92,0xC9,0xA7,0xA3,0x53,0x42,0x82,0x55,0x67,
10821108   0xE4,0x66,0xD0,0x4A,0x7D,0x4A,0x13,0xDE,0xD7,0x9F,0x38,0xAA,0x00,0x56,0x85,0x0A
10831109};
1110
10841111static const UINT8 DCOPKey1326[]=
10851112{
10861113   0x43,0x66,0x54,0x11,0x99,0xfe,0xcc,0x8e,0xdd,0x87,0x11,0x89,0x22,0xdf,0x44,0x09
r29606r29607
13761403
13771404
13781405   AM_RANGE(0x00980004, 0x00980007) AM_READ(fifoctl_r)
1379   AM_RANGE(0x0098000c, 0x0098000f) AM_READ(videoctl_r)
1406   AM_RANGE(0x0098000c, 0x0098000f) AM_READWRITE(videoctl_r,videoctl_w)
13801407
13811408   AM_RANGE(0x00e80000, 0x00e80007) AM_READWRITE(model2_irq_r, model2_irq_w)
13821409
r29606r29607
14891516
14901517   AM_RANGE(0x01c00000, 0x01c00003) AM_READ_PORT("1c00000") AM_WRITE(ctrl0_w )
14911518   AM_RANGE(0x01c00004, 0x01c00007) AM_READ_PORT("1c00004")
1519   AM_RANGE(0x01c0000c, 0x01c0000f) AM_READ_PORT("1c0000c")
14921520   AM_RANGE(0x01c00010, 0x01c00013) AM_READ_PORT("1c00010")
14931521   AM_RANGE(0x01c00014, 0x01c00017) AM_READ_PORT("1c00014")
14941522   AM_RANGE(0x01c00018, 0x01c0001b) AM_READ(hotd_unk_r )
r29606r29607
15801608   PORT_BIT( 0x0000ffff, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, driver_device,custom_port_read, "IN1")
15811609   PORT_BIT( 0xffff0000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, driver_device,custom_port_read, "IN2")
15821610
1611   PORT_START("1c0000c")
1612   PORT_BIT( 0xfffffff7, IP_ACTIVE_LOW, IPT_UNKNOWN )
1613   PORT_BIT( 0x00000008, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
1614
15831615   PORT_START("1c00010")
15841616   PORT_BIT( 0x0000ffff, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, driver_device,custom_port_read, "IN0")
15851617   PORT_BIT( 0xffff0000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, driver_device,custom_port_read, "IN1")
r29606r29607
19401972{
19411973   int scanline = param;
19421974
1943   if(scanline == 384) // 384
1975   if(scanline == 384)
19441976   {
1945      m_intreq |= (1<<10);
1946      if (m_intena & (1<<10))
1947         m_maincpu->set_input_line(I960_IRQ3, ASSERT_LINE);
1977      m_intreq |= (1<<0);
1978      model2_check_irq_state();
19481979   }
1949
1950   if(scanline == 0)
1980   else if(scanline == 0)
19511981   {
1952      m_intreq |= (1<<0);
1953      if (m_intena & (1<<0))
1954         m_maincpu->set_input_line(I960_IRQ0, ASSERT_LINE);
1982      /* From sound to main CPU (TODO: what enables this?) */
1983      m_intreq |= (1<<10);
1984      model2_check_irq_state();
19551985   }
19561986}
19571987
r29606r29607
19621992   if(scanline == 0) // 384
19631993   {
19641994      m_intreq |= (1<<10);
1965      if (m_intena & (1<<10))
1966         m_maincpu->set_input_line(I960_IRQ3, ASSERT_LINE);
1995      model2_check_irq_state();
19671996   }
19681997
19691998   if(scanline == 256)
19701999   {
19712000      m_intreq |= (1<<2);
1972      if (m_intena & (1<<2))
1973         m_maincpu->set_input_line(I960_IRQ2, ASSERT_LINE);
2001      model2_check_irq_state();
19742002   }
19752003
19762004   if(scanline == 128)
19772005   {
19782006      m_intreq |= (1<<0);
1979      if (m_intena & (1<<0))
1980         m_maincpu->set_input_line(I960_IRQ0, ASSERT_LINE);
2007      model2_check_irq_state();
19812008   }
19822009}
19832010
r29606r29607
21672194
21682195   MCFG_SCREEN_ADD("screen", RASTER)
21692196   MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK )
2170   MCFG_SCREEN_REFRESH_RATE(60)
2171   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
2172   MCFG_SCREEN_SIZE(62*8, 48*8)
2173   MCFG_SCREEN_VISIBLE_AREA(0*8, 62*8-1, 0*8, 48*8-1)
2197   MCFG_SCREEN_RAW_PARAMS(25000000/2, 496+16, 0, 496, 384+16, 0, 384) // not accurate
21742198   MCFG_SCREEN_UPDATE_DRIVER(model2_state, screen_update_model2)
21752199
21762200   MCFG_PALETTE_ADD("palette", 8192)
r29606r29607
56405664GAME( 1994, vcopa,           0, model2o, vcop,    driver_device, 0,       ROT0, "Sega",   "Virtua Cop (Revision A)", GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
56415665
56425666// Model 2A-CRX (TGPs, SCSP sound board)
5643GAME( 1995, manxtt, 0, manxttdx,model2, driver_device, 0, ROT0, "Sega", "Manx TT Superbike - DX (Revision D)", GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
5667GAME( 1995, manxtt,          0, manxttdx,model2, driver_device, 0, ROT0, "Sega", "Manx TT Superbike - DX (Revision D)", GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
56445668GAME( 1995, manxttc,         0, model2a, model2,  driver_device, 0,       ROT0, "Sega",   "Manx TT Superbike - Twin (Revision C)", GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
56455669GAME( 1995, srallyc,         0, srallyc, srallyc, model2_state,  srallyc, ROT0, "Sega",   "Sega Rally Championship - TWIN (Revision C)", GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
56465670GAME( 1995, srallycb,  srallyc, srallyc, srallyc, model2_state,  srallyc, ROT0, "Sega",   "Sega Rally Championship - TWIN (Revision B)", GAME_NOT_WORKING|GAME_IMPERFECT_GRAPHICS )
trunk/src/emu/sound/scsp.h
r29606r29607
7272
7373
7474class scsp_device : public device_t,
75                           public device_sound_interface
75               public device_sound_interface
7676{
7777public:
7878   scsp_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team