Previous 199869 Revisions Next

r26044 Thursday 7th November, 2013 at 17:50:23 UTC by Osso
Device-ified asic65.c. (nw)
[src/mame/drivers]atarig42.c harddriv.c
[src/mame/includes]atarig42.h harddriv.h
[src/mame/machine]asic65.c asic65.h harddriv.c

trunk/src/mame/machine/harddriv.c
r26043r26044
77****************************************************************************/
88
99#include "emu.h"
10#include "cpu/tms34010/tms34010.h"
11#include "cpu/adsp2100/adsp2100.h"
12#include "cpu/m68000/m68000.h"
13#include "cpu/dsp32/dsp32.h"
1410#include "sound/dac.h"
15#include "machine/atarigen.h"
16#include "machine/asic65.h"
1711#include "includes/slapstic.h"
1812#include "includes/harddriv.h"
1913
r26043r26044
15431537         break;
15441538
15451539      case 4: /* ASIC65 reset */
1546         asic65_reset(space.machine(), !val);
1540         m_asic65->reset_line(!val);
15471541         break;
15481542
15491543      case 7: /* LED */
r26043r26044
16861680   switch (offset & 7)
16871681   {
16881682      case 2: /* ASIC65 reset */
1689         asic65_reset(space.machine(), !val);
1683         m_asic65->reset_line(!val);
16901684         break;
16911685
16921686      default:
trunk/src/mame/machine/asic65.c
r26043r26044
77 *************************************/
88
99#include "emu.h"
10#include "cpu/tms32010/tms32010.h"
1110#include "asic65.h"
1211
1312
1413#define LOG_ASIC        0
1514
1615
17/*************************************
18 *
19 *  !$#@$ asic
20 *
21 *************************************/
22
23static struct _asic65_t
24{
25   UINT8   type;
26   int     command;
27   UINT16  param[32];
28   UINT16  yorigin;
29   UINT8   param_index;
30   UINT8   result_index;
31   UINT8   reset_state;
32   UINT8   last_bank;
33
34   /* ROM-based interface states */
35   device_t *cpu;
36   UINT8   tfull;
37   UINT8   _68full;
38   UINT8   cmd;
39   UINT8   xflg;
40   UINT16  _68data;
41   UINT16  tdata;
42
43   FILE * log;
44} asic65;
45
46
4716#define PARAM_WRITE     0
4817#define COMMAND_WRITE   1
4918#define DATA_READ       2
r26043r26044
11382   }
11483};
11584
85const device_type ASIC65 = &device_creator<asic65_device>;
11686
87asic65_device::asic65_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
88   : device_t(mconfig, ASIC65, "ASIC65", tag, owner, clock, "asic65", __FILE__),
89   m_asic65_type(0),
90   m_command(0),
91   m_yorigin(0x1800),
92   m_param_index(0),
93   m_result_index(0),
94   m_reset_state(0),
95   m_last_bank(0),
96   m_ourcpu(*this, "asic65cpu"),
97   m_tfull(0),
98   m_68full(0),
99   m_cmd(0),
100   m_xflg(0),
101   m_68data(0),
102   m_tdata(0),
103   m_log(NULL)
104{
105   for (int i = 0; i < 32; i++)
106   {
107      m_param[i] = 0;
108   }
109}
117110
118/*************************************
119 *
120 *  Configure the chip
121 *
122 *************************************/
111//-------------------------------------------------
112//  device_config_complete - perform any
113//  operations now that the configuration is
114//  complete
115//-------------------------------------------------
123116
124void asic65_config(running_machine &machine, int asictype)
117void asic65_device::device_config_complete()
125118{
126   memset(&asic65, 0, sizeof(asic65));
127   asic65.type = asictype;
128   asic65.yorigin = 0x1800;
129   if (asic65.type == ASIC65_ROMBASED)
130      asic65.cpu = machine.device("asic65");
131119}
132120
121//-------------------------------------------------
122//  device_start - device-specific startup
123//-------------------------------------------------
133124
125void asic65_device::device_start()
126{
127   save_item(NAME(m_asic65_type));
128   save_item(NAME(m_command));
129   save_item(NAME(m_yorigin));
130   save_item(NAME(m_param_index));
131   save_item(NAME(m_result_index));
132   save_item(NAME(m_reset_state));
133   save_item(NAME(m_last_bank));
134   save_item(NAME(m_tfull));
135   save_item(NAME(m_68full));
136   save_item(NAME(m_cmd));
137   save_item(NAME(m_xflg));
138   save_item(NAME(m_68data));
139   save_item(NAME(m_tdata));
140   save_item(NAME(m_param));
141}
134142
135/*************************************
136 *
137 *  Reset the chip
138 *
139 *************************************/
143//-------------------------------------------------
144//  device_reset - device-specific startup
145//-------------------------------------------------
140146
141void asic65_reset(running_machine &machine, int state)
147void asic65_device::device_reset()
142148{
143   address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM);
149}
144150
151void asic65_device::reset_line(int state)
152{
153   address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM);
154
145155   /* rom-based means reset and clear states */
146   if (asic65.cpu != NULL)
147      asic65.cpu->execute().set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
156   if (m_asic65_type == ASIC65_ROMBASED)
157      m_ourcpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
148158
149159   /* otherwise, do it manually */
150160   else
151161   {
152      machine.device<cpu_device>("asic65")->suspend(SUSPEND_REASON_DISABLE, 1);
162      m_ourcpu->suspend(SUSPEND_REASON_DISABLE, 1);
153163
154164      /* if reset is being signalled, clear everything */
155      if (state && !asic65.reset_state)
156         asic65.command = -1;
165      if (state && !m_reset_state)
166         m_command = -1;
157167
158168      /* if reset is going high, latch the command */
159      else if (!state && asic65.reset_state)
169      else if (!state && m_reset_state)
160170      {
161         if (asic65.command != -1)
162            asic65_data_w(space, 1, asic65.command, 0xffff);
171         if (m_command != -1)
172            data_w(space, 1, m_command, 0xffff);
163173      }
164174
165175      /* update the state */
166      asic65.reset_state = state;
176      m_reset_state = state;
167177   }
168178}
169179
170
171
172180/*************************************
173181 *
174182 *  Handle writes to the chip
175183 *
176184 *************************************/
177185
178static TIMER_CALLBACK( m68k_asic65_deferred_w )
186void asic65_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
179187{
180   asic65.tfull = 1;
181   asic65.cmd = param >> 16;
182   asic65.tdata = param;
183   if (asic65.cpu != NULL)
184      asic65.cpu->execute().set_input_line(0, ASSERT_LINE);
188   switch (id)
189   {
190   case TIMER_M68K_ASIC65_DEFERRED_W:
191      m_tfull = 1;
192      m_cmd = param >> 16;
193      m_tdata = param;
194      if (m_asic65_type == ASIC65_ROMBASED)
195         m_ourcpu->set_input_line(0, ASSERT_LINE);
196      break;
197   default:
198      assert_always(FALSE, "Unknown id in asic65_device::device_timer");
199   }
185200}
186201
187202
188WRITE16_HANDLER( asic65_data_w )
203WRITE16_MEMBER( asic65_device::data_w )
189204{
190205   /* logging */
191   if (LOG_ASIC && !asic65.log) asic65.log = fopen("asic65.log", "w");
206   if (LOG_ASIC && !m_log) m_log = fopen("m_log", "w");
192207
193208   /* rom-based use a deferred write mechanism */
194   if (asic65.type == ASIC65_ROMBASED)
209   if (m_asic65_type == ASIC65_ROMBASED)
195210   {
196      space.machine().scheduler().synchronize(FUNC(m68k_asic65_deferred_w), data | (offset << 16));
197      space.machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(20));
211      synchronize(TIMER_M68K_ASIC65_DEFERRED_W, data | (offset << 16));
212      machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(20));
198213      return;
199214   }
200215
201216   /* parameters go to offset 0 */
202217   if (!(offset & 1))
203218   {
204      if (asic65.log) fprintf(asic65.log, " W=%04X", data);
219      if (m_log) fprintf(m_log, " W=%04X", data);
205220
206221      /* add to the parameter list, but don't overflow */
207      asic65.param[asic65.param_index++] = data;
208      if (asic65.param_index >= 32)
209         asic65.param_index = 32;
222      m_param[m_param_index++] = data;
223      if (m_param_index >= 32)
224         m_param_index = 32;
210225   }
211226
212227   /* commands go to offset 2 */
213228   else
214229   {
215      int command = (data < MAX_COMMANDS) ? command_map[asic65.type][data] : OP_UNKNOWN;
216      if (asic65.log) fprintf(asic65.log, "\n(%06X)%c%04X:", space.device().safe_pcbase(), (command == OP_UNKNOWN) ? '*' : ' ', data);
230      int command = (data < MAX_COMMANDS) ? command_map[m_asic65_type][data] : OP_UNKNOWN;
231      if (m_log) fprintf(m_log, "\n(%06X)%c%04X:", safe_pcbase(), (command == OP_UNKNOWN) ? '*' : ' ', data);
217232
218233      /* set the command number and reset the parameter/result indices */
219      asic65.command = data;
220      asic65.result_index = asic65.param_index = 0;
234      m_command = data;
235      m_result_index = m_param_index = 0;
221236   }
222237}
223238
224239
225READ16_HANDLER( asic65_r )
240READ16_MEMBER( asic65_device::read )
226241{
227   int command = (asic65.command < MAX_COMMANDS) ? command_map[asic65.type][asic65.command] : OP_UNKNOWN;
242   int command = (m_command < MAX_COMMANDS) ? command_map[m_asic65_type][m_command] : OP_UNKNOWN;
228243   INT64 element, result64 = 0;
229244   UINT16 result = 0;
230245
231246   /* rom-based just returns latched data */
232   if (asic65.type == ASIC65_ROMBASED)
247   if (m_asic65_type == ASIC65_ROMBASED)
233248   {
234      asic65._68full = 0;
235      space.machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5));
236      return asic65._68data;
249      m_68full = 0;
250      machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5));
251      return m_68data;
237252   }
238253
239254   /* update results */
240255   switch (command)
241256   {
242257      case OP_UNKNOWN:    /* return bogus data */
243         popmessage("ASIC65: Unknown cmd %02X", asic65.command);
258         popmessage("ASIC65: Unknown cmd %02X", m_command);
244259         break;
245260
246261      case OP_REFLECT:    /* reflect data */
247         if (asic65.param_index >= 1)
248            result = asic65.param[--asic65.param_index];
262         if (m_param_index >= 1)
263            result = m_param[--m_param_index];
249264         break;
250265
251266      case OP_CHECKSUM:   /* compute checksum (should be XX27) */
r26043r26044
261276         break;
262277
263278      case OP_RESET:  /* reset */
264         asic65.result_index = asic65.param_index = 0;
279         m_result_index = m_param_index = 0;
265280         break;
266281
267282      case OP_SIN:    /* sin */
268         if (asic65.param_index >= 1)
269            result = (int)(16384. * sin(M_PI * (double)(INT16)asic65.param[0] / 32768.));
283         if (m_param_index >= 1)
284            result = (int)(16384. * sin(M_PI * (double)(INT16)m_param[0] / 32768.));
270285         break;
271286
272287      case OP_COS:    /* cos */
273         if (asic65.param_index >= 1)
274            result = (int)(16384. * cos(M_PI * (double)(INT16)asic65.param[0] / 32768.));
288         if (m_param_index >= 1)
289            result = (int)(16384. * cos(M_PI * (double)(INT16)m_param[0] / 32768.));
275290         break;
276291
277292      case OP_ATAN:   /* vector angle */
278         if (asic65.param_index >= 4)
293         if (m_param_index >= 4)
279294         {
280            INT32 xint = (INT32)((asic65.param[0] << 16) | asic65.param[1]);
281            INT32 yint = (INT32)((asic65.param[2] << 16) | asic65.param[3]);
295            INT32 xint = (INT32)((m_param[0] << 16) | m_param[1]);
296            INT32 yint = (INT32)((m_param[2] << 16) | m_param[3]);
282297            double a = atan2((double)yint, (double)xint);
283298            result = (INT16)(a * 32768. / M_PI);
284299         }
r26043r26044
287302      case OP_TMATRIXMULT:    /* matrix multiply by transpose */
288303         /* if this is wrong, the labels on the car selection screen */
289304         /* in Race Drivin' will be off */
290         if (asic65.param_index >= 9+6)
305         if (m_param_index >= 9+6)
291306         {
292            INT32 v0 = (INT32)((asic65.param[9] << 16) | asic65.param[10]);
293            INT32 v1 = (INT32)((asic65.param[11] << 16) | asic65.param[12]);
294            INT32 v2 = (INT32)((asic65.param[13] << 16) | asic65.param[14]);
307            INT32 v0 = (INT32)((m_param[9] << 16) | m_param[10]);
308            INT32 v1 = (INT32)((m_param[11] << 16) | m_param[12]);
309            INT32 v2 = (INT32)((m_param[13] << 16) | m_param[14]);
295310
296311            /* 2 results per element */
297            switch (asic65.result_index / 2)
312            switch (m_result_index / 2)
298313            {
299314               case 0:
300                  result64 = (INT64)v0 * (INT16)asic65.param[0] +
301                           (INT64)v1 * (INT16)asic65.param[3] +
302                           (INT64)v2 * (INT16)asic65.param[6];
315                  result64 = (INT64)v0 * (INT16)m_param[0] +
316                           (INT64)v1 * (INT16)m_param[3] +
317                           (INT64)v2 * (INT16)m_param[6];
303318                  break;
304319
305320               case 1:
306                  result64 = (INT64)v0 * (INT16)asic65.param[1] +
307                           (INT64)v1 * (INT16)asic65.param[4] +
308                           (INT64)v2 * (INT16)asic65.param[7];
321                  result64 = (INT64)v0 * (INT16)m_param[1] +
322                           (INT64)v1 * (INT16)m_param[4] +
323                           (INT64)v2 * (INT16)m_param[7];
309324                  break;
310325
311326               case 2:
312                  result64 = (INT64)v0 * (INT16)asic65.param[2] +
313                           (INT64)v1 * (INT16)asic65.param[5] +
314                           (INT64)v2 * (INT16)asic65.param[8];
327                  result64 = (INT64)v0 * (INT16)m_param[2] +
328                           (INT64)v1 * (INT16)m_param[5] +
329                           (INT64)v2 * (INT16)m_param[8];
315330                  break;
316331            }
317332
318333            /* remove lower 14 bits and pass back either upper or lower words */
319334            result64 >>= 14;
320            result = (asic65.result_index & 1) ? (result64 & 0xffff) : ((result64 >> 16) & 0xffff);
321            asic65.result_index++;
335            result = (m_result_index & 1) ? (result64 & 0xffff) : ((result64 >> 16) & 0xffff);
336            m_result_index++;
322337         }
323338         break;
324339
325340      case OP_MATRIXMULT: /* matrix multiply???? */
326         if (asic65.param_index >= 9+6)
341         if (m_param_index >= 9+6)
327342         {
328            INT32 v0 = (INT32)((asic65.param[9] << 16) | asic65.param[10]);
329            INT32 v1 = (INT32)((asic65.param[11] << 16) | asic65.param[12]);
330            INT32 v2 = (INT32)((asic65.param[13] << 16) | asic65.param[14]);
343            INT32 v0 = (INT32)((m_param[9] << 16) | m_param[10]);
344            INT32 v1 = (INT32)((m_param[11] << 16) | m_param[12]);
345            INT32 v2 = (INT32)((m_param[13] << 16) | m_param[14]);
331346
332347            /* 2 results per element */
333            switch (asic65.result_index / 2)
348            switch (m_result_index / 2)
334349            {
335350               case 0:
336                  result64 = (INT64)v0 * (INT16)asic65.param[0] +
337                           (INT64)v1 * (INT16)asic65.param[1] +
338                           (INT64)v2 * (INT16)asic65.param[2];
351                  result64 = (INT64)v0 * (INT16)m_param[0] +
352                           (INT64)v1 * (INT16)m_param[1] +
353                           (INT64)v2 * (INT16)m_param[2];
339354                  break;
340355
341356               case 1:
342                  result64 = (INT64)v0 * (INT16)asic65.param[3] +
343                           (INT64)v1 * (INT16)asic65.param[4] +
344                           (INT64)v2 * (INT16)asic65.param[5];
357                  result64 = (INT64)v0 * (INT16)m_param[3] +
358                           (INT64)v1 * (INT16)m_param[4] +
359                           (INT64)v2 * (INT16)m_param[5];
345360                  break;
346361
347362               case 2:
348                  result64 = (INT64)v0 * (INT16)asic65.param[6] +
349                           (INT64)v1 * (INT16)asic65.param[7] +
350                           (INT64)v2 * (INT16)asic65.param[8];
363                  result64 = (INT64)v0 * (INT16)m_param[6] +
364                           (INT64)v1 * (INT16)m_param[7] +
365                           (INT64)v2 * (INT16)m_param[8];
351366                  break;
352367            }
353368
354369            /* remove lower 14 bits and pass back either upper or lower words */
355370            result64 >>= 14;
356            result = (asic65.result_index & 1) ? (result64 & 0xffff) : ((result64 >> 16) & 0xffff);
357            asic65.result_index++;
371            result = (m_result_index & 1) ? (result64 & 0xffff) : ((result64 >> 16) & 0xffff);
372            m_result_index++;
358373         }
359374         break;
360375
361376      case OP_YORIGIN:
362         if (asic65.param_index >= 1)
363            asic65.yorigin = asic65.param[asic65.param_index - 1];
377         if (m_param_index >= 1)
378            m_yorigin = m_param[m_param_index - 1];
364379         break;
365380
366381      case OP_TRANSFORM:  /* 3d transform */
367         if (asic65.param_index >= 2)
382         if (m_param_index >= 2)
368383         {
369384            /* param 0 == 1/z */
370385            /* param 1 == height */
r26043r26044
373388            /* return 0 == scale factor for 1/z */
374389            /* return 1 == transformed X */
375390            /* return 2 == transformed Y, taking height into account */
376            element = (INT16)asic65.param[0];
377            if (asic65.param_index == 2)
391            element = (INT16)m_param[0];
392            if (m_param_index == 2)
378393            {
379               result64 = (element * (INT16)asic65.param[1]) >> 8;
394               result64 = (element * (INT16)m_param[1]) >> 8;
380395               result64 -= 1;
381396               if (result64 > 0x3fff) result64 = 0;
382397            }
383            else if (asic65.param_index == 3)
398            else if (m_param_index == 3)
384399            {
385               result64 = (element * (INT16)asic65.param[2]) >> 15;
400               result64 = (element * (INT16)m_param[2]) >> 15;
386401               result64 += 0xa8;
387402            }
388            else if (asic65.param_index == 4)
403            else if (m_param_index == 4)
389404            {
390               result64 = (INT16)((element * (INT16)asic65.param[3]) >> 10);
391               result64 = (INT16)asic65.yorigin - result64 - (result64 << 1);
405               result64 = (INT16)((element * (INT16)m_param[3]) >> 10);
406               result64 = (INT16)m_yorigin - result64 - (result64 << 1);
392407            }
393408            result = result64 & 0xffff;
394409         }
395410         break;
396411
397412      case OP_INITBANKS:  /* initialize banking */
398         asic65.last_bank = 0;
413         m_last_bank = 0;
399414         break;
400415
401416      case OP_SETBANK:    /* set a bank */
r26043r26044
414429            { 0x77f0,0x77fe,0x77f2,0x77fc,0x77f4,0x77fa,0x77f6,0x77f8 },
415430            { 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 },
416431         };
417         if (asic65.param_index >= 1)
432         if (m_param_index >= 1)
418433         {
419            if (asic65.param_index < sizeof(banklist) && banklist[asic65.param[0]] < 4)
420               asic65.last_bank = banklist[asic65.param[0]];
421            result = bankaddr[asic65.last_bank][(asic65.result_index < 8) ? asic65.result_index : 7];
422            asic65.result_index++;
434            if (m_param_index < sizeof(banklist) && banklist[m_param[0]] < 4)
435               m_last_bank = banklist[m_param[0]];
436            result = bankaddr[m_last_bank][(m_result_index < 8) ? m_result_index : 7];
437            m_result_index++;
423438         }
424439         break;
425440      }
r26043r26044
430445         {
431446            0x0eb2,0x1000,0x171b,0x3d28
432447         };
433         result = bankverify[asic65.last_bank];
448         result = bankverify[m_last_bank];
434449         break;
435450      }
436451   }
437452
438   if (LOG_ASIC && !asic65.log) asic65.log = fopen("asic65.log", "w");
439   if (asic65.log) fprintf(asic65.log, " (R=%04X)", result);
453   if (LOG_ASIC && !m_log) m_log = fopen("m_log", "w");
454   if (m_log) fprintf(m_log, " (R=%04X)", result);
440455
441456   return result;
442457}
443458
444459
445READ16_HANDLER( asic65_io_r )
460READ16_MEMBER( asic65_device::io_r )
446461{
447   if (asic65.type == ASIC65_ROMBASED)
462   if (m_asic65_type == ASIC65_ROMBASED)
448463   {
449464      /* bit 15 = TFULL */
450465      /* bit 14 = 68FULL */
451466      /* bit 13 = XFLG */
452467      /* bit 12 = controlled by jumper */
453      space.machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5));
454      return (asic65.tfull << 15) | (asic65._68full << 14) | (asic65.xflg << 13) | 0x0000;
468      machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5));
469      return (m_tfull << 15) | (m_68full << 14) | (m_xflg << 13) | 0x0000;
455470   }
456471   else
457472   {
r26043r26044
468483 *
469484 *************************************/
470485
471static WRITE16_HANDLER( asic65_68k_w )
486WRITE16_MEMBER( asic65_device::m68k_w )
472487{
473   asic65._68full = 1;
474   asic65._68data = data;
488   m_68full = 1;
489   m_68data = data;
475490}
476491
477492
478static READ16_HANDLER( asic65_68k_r )
493READ16_MEMBER( asic65_device::m68k_r )
479494{
480   asic65.tfull = 0;
481   if (asic65.cpu != NULL)
482      asic65.cpu->execute().set_input_line(0, CLEAR_LINE);
483   return asic65.tdata;
495   m_tfull = 0;
496   if (m_asic65_type == ASIC65_ROMBASED)
497      m_ourcpu->set_input_line(0, CLEAR_LINE);
498   return m_tdata;
484499}
485500
486501
487static WRITE16_HANDLER( asic65_stat_w )
502WRITE16_MEMBER( asic65_device::stat_w )
488503{
489   asic65.xflg = data & 1;
504   m_xflg = data & 1;
490505}
491506
492507
493static READ16_HANDLER( asic65_stat_r )
508READ16_MEMBER( asic65_device::stat_r )
494509{
495510   /* bit 15 = 68FULL */
496511   /* bit 14 = TFULL */
497512   /* bit 13 = CMD */
498513   /* bit 12 = controlled by jumper (0 = test?) */
499   return (asic65._68full << 15) | (asic65.tfull << 14) | (asic65.cmd << 13) | 0x1000;
514   return (m_68full << 15) | (m_tfull << 14) | (m_cmd << 13) | 0x1000;
500515}
501516
502517
503static READ16_HANDLER( asci65_get_bio )
518READ16_MEMBER( asic65_device::get_bio )
504519{
505   if (!asic65.tfull)
520   if (!m_tfull)
506521      space.device().execute().spin_until_interrupt();
507   return asic65.tfull ? CLEAR_LINE : ASSERT_LINE;
522   return m_tfull ? CLEAR_LINE : ASSERT_LINE;
508523}
509524
510525
r26043r26044
515530 *
516531 *************************************/
517532
518static ADDRESS_MAP_START( asic65_program_map, AS_PROGRAM, 16, driver_device )
533static ADDRESS_MAP_START( asic65_program_map, AS_PROGRAM, 16, asic65_device )
519534   ADDRESS_MAP_UNMAP_HIGH
520535   AM_RANGE(0x000, 0xfff) AM_ROM
521536ADDRESS_MAP_END
522537
523static ADDRESS_MAP_START( asic65_io_map, AS_IO, 16, driver_device )
524   AM_RANGE(0, 0) AM_MIRROR(6) AM_READWRITE_LEGACY(asic65_68k_r, asic65_68k_w)
525   AM_RANGE(1, 1) AM_MIRROR(6) AM_READWRITE_LEGACY(asic65_stat_r, asic65_stat_w)
526   AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ_LEGACY(asci65_get_bio)
538static ADDRESS_MAP_START( asic65_io_map, AS_IO, 16, asic65_device )
539   AM_RANGE(0, 0) AM_MIRROR(6) AM_READWRITE(m68k_r, m68k_w)
540   AM_RANGE(1, 1) AM_MIRROR(6) AM_READWRITE(stat_r, stat_w)
541   AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ(get_bio)
527542ADDRESS_MAP_END
528543
529544
r26043r26044
537552MACHINE_CONFIG_FRAGMENT( asic65 )
538553
539554   /* ASIC65 */
540   MCFG_CPU_ADD("asic65", TMS32010, 20000000)
555   MCFG_CPU_ADD("asic65cpu", TMS32010, 20000000)
541556   MCFG_CPU_PROGRAM_MAP(asic65_program_map)
542557   MCFG_CPU_IO_MAP(asic65_io_map)
543MACHINE_CONFIG_END
558MACHINE_CONFIG_END
544559
560//-------------------------------------------------
561//  machine_config_additions - device-specific
562//  machine configurations
563//-------------------------------------------------
545564
565machine_config_constructor asic65_device::device_mconfig_additions() const
566{
567   return MACHINE_CONFIG_NAME( asic65 );
568}
546569
570
571
547572/***********************************************************************
548573
549574    Information about various versions:
trunk/src/mame/machine/asic65.h
r26043r26044
55 *  Implementation of ASIC65
66 *
77 *************************************/
8 
9 #include "cpu/tms32010/tms32010.h"
10 
11 enum {
12   ASIC65_STANDARD,
13   ASIC65_STEELTAL,
14   ASIC65_GUARDIANS,
15   ASIC65_ROMBASED
16};
817
9#define ASIC65_STANDARD     0
10#define ASIC65_STEELTAL     1
11#define ASIC65_GUARDIANS    2
12#define ASIC65_ROMBASED     3
18class asic65_device : public device_t
19{
20public:
21   asic65_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
22   
23   // (static) configuration helpers
24   static void set_type(device_t &device, int type) { downcast<asic65_device &>(device).m_asic65_type = type; }
1325
14void asic65_config(running_machine &machine, int asictype);
15void asic65_reset(running_machine &machine, int state);
16DECLARE_WRITE16_HANDLER( asic65_data_w );
17DECLARE_READ16_HANDLER( asic65_r );
18DECLARE_READ16_HANDLER( asic65_io_r );
26   void reset_line(int state);
27   DECLARE_WRITE16_MEMBER( data_w );
28   DECLARE_READ16_MEMBER( read );
29   DECLARE_READ16_MEMBER( io_r );
30   
31   TIMER_CALLBACK_MEMBER( m68k_asic65_deferred_w );
32   WRITE16_MEMBER( m68k_w );
33   READ16_MEMBER( m68k_r );
34   WRITE16_MEMBER( stat_w );
35   READ16_MEMBER( stat_r );
36   READ16_MEMBER( get_bio );
37   
38   enum
39   {
40      TIMER_M68K_ASIC65_DEFERRED_W
41   };
1942
20MACHINE_CONFIG_EXTERN( asic65 );
43protected:
44   // device-level overrides
45   virtual void device_config_complete();
46   virtual void device_start();
47   virtual void device_reset();
48   virtual machine_config_constructor device_mconfig_additions() const;
49   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
50
51private:
52   UINT8   m_asic65_type;
53   int     m_command;
54   UINT16  m_param[32];
55   UINT16  m_yorigin;
56   UINT8   m_param_index;
57   UINT8   m_result_index;
58   UINT8   m_reset_state;
59   UINT8   m_last_bank;
60
61   /* ROM-based interface states */
62   required_device<legacy_cpu_device> m_ourcpu;
63   UINT8   m_tfull;
64   UINT8   m_68full;
65   UINT8   m_cmd;
66   UINT8   m_xflg;
67   UINT16  m_68data;
68   UINT16  m_tdata;
69
70   FILE * m_log;
71};
72
73extern const device_type ASIC65;
74
75#define MCFG_ASIC65_ADD(_tag, _type) \
76   MCFG_DEVICE_ADD(_tag, ASIC65, 0) \
77   asic65_device::set_type(*device, _type);
trunk/src/mame/includes/atarig42.h
r26043r26044
99#include "machine/atarigen.h"
1010#include "audio/atarijsa.h"
1111#include "cpu/m68000/m68000.h"
12#include "machine/asic65.h"
1213
1314class atarig42_state : public atarigen_state
1415{
r26043r26044
2021         m_playfield_tilemap(*this, "playfield"),
2122         m_alpha_tilemap(*this, "alpha"),
2223         m_rle(*this, "rle"),
24         m_asic65(*this, "asic65"),
2325         m_mo_command(*this, "mo_command") { }
2426
2527   required_device<cpu_device> m_maincpu;
r26043r26044
2830   required_device<tilemap_device> m_playfield_tilemap;
2931   required_device<tilemap_device> m_alpha_tilemap;
3032   required_device<atari_rle_objects_device> m_rle;
33   required_device<asic65_device> m_asic65;
3134
3235   UINT16          m_playfield_base;
3336
trunk/src/mame/includes/harddriv.h
r26043r26044
1515#include "sound/dac.h"
1616#include "machine/atarigen.h"
1717#include "machine/n68681.h"
18#include "machine/asic65.h"
1819
1920#define HARDDRIV_MASTER_CLOCK   XTAL_32MHz
2021#define HARDDRIV_GSP_CLOCK      XTAL_48MHz
r26043r26044
5354         m_ds3sdsp_internal_timer(*this, "ds3sdsp_timer"),
5455         m_ds3xdsp_internal_timer(*this, "ds3xdsp_timer"),
5556         m_dac(*this, "dac"),
56         m_duart(*this, "duartn68681") { }
57         m_duart(*this, "duartn68681"),
58         m_asic65(*this, "asic65") { }
5759
5860   required_device<cpu_device> m_maincpu;
5961   required_device<tms34010_device> m_gsp;
r26043r26044
282284   DECLARE_WRITE16_MEMBER(hdsnddsp_dac_w);
283285   optional_device<dac_device> m_dac;
284286   required_device<duartn68681_device> m_duart;
287   optional_device<asic65_device> m_asic65;
285288   DECLARE_WRITE_LINE_MEMBER(harddriv_duart_irq_handler);
286289   
287290   /*----------- defined in audio/harddriv.c -----------*/
trunk/src/mame/drivers/atarig42.c
r26043r26044
2020***************************************************************************/
2121
2222#include "emu.h"
23#include "machine/asic65.h"
2423#include "video/atarirle.h"
2524#include "includes/atarig42.h"
2625
r26043r26044
9291   if (ACCESSING_BITS_8_15)
9392   {
9493      /* bit 14 controls the ASIC65 reset line */
95      asic65_reset(machine(), (~data >> 14) & 1);
94      m_asic65->reset_line((~data >> 14) & 1);
9695
9796      /* bits 13-11 are the MO control bits */
9897      m_rle->control_write(space, 0, (data >> 11) & 7);
r26043r26044
344343   AM_RANGE(0xe03000, 0xe03001) AM_WRITE(video_int_ack_w)
345344   AM_RANGE(0xe03800, 0xe03801) AM_WRITE(watchdog_reset16_w)
346345   AM_RANGE(0xe80000, 0xe80fff) AM_RAM
347   AM_RANGE(0xf40000, 0xf40001) AM_READ_LEGACY(asic65_io_r)
348   AM_RANGE(0xf60000, 0xf60001) AM_READ_LEGACY(asic65_r)
349   AM_RANGE(0xf80000, 0xf80003) AM_WRITE_LEGACY(asic65_data_w)
346   AM_RANGE(0xf40000, 0xf40001) AM_DEVREAD("asic65", asic65_device, io_r)
347   AM_RANGE(0xf60000, 0xf60001) AM_DEVREAD("asic65", asic65_device, read)
348   AM_RANGE(0xf80000, 0xf80003) AM_DEVWRITE("asic65", asic65_device, data_w)
350349   AM_RANGE(0xfa0000, 0xfa0fff) AM_DEVREADWRITE8("eeprom", atari_eeprom_device, read, write, 0x00ff)
351350   AM_RANGE(0xfc0000, 0xfc0fff) AM_RAM_WRITE(paletteram_666_w) AM_SHARE("paletteram")
352351   AM_RANGE(0xff0000, 0xff0fff) AM_RAM AM_SHARE("rle")
r26043r26044
539538   MCFG_CPU_PROGRAM_MAP(main_map)
540539   MCFG_DEVICE_VBLANK_INT_DRIVER("screen", atarigen_state, video_int_gen)
541540
542   /* ASIC65 */
543   MCFG_FRAGMENT_ADD(asic65)
544
545541   MCFG_MACHINE_START_OVERRIDE(atarig42_state,atarig42)
546542   MCFG_MACHINE_RESET_OVERRIDE(atarig42_state,atarig42)
547543
r26043r26044
573569
574570static MACHINE_CONFIG_DERIVED( atarig42_0x200, atarig42 )
575571   MCFG_ATARIRLE_ADD("rle", modesc_0x200)
572   
573   /* ASIC65 */
574   MCFG_ASIC65_ADD("asic65", ASIC65_ROMBASED)
576575MACHINE_CONFIG_END
577576
578577static MACHINE_CONFIG_DERIVED( atarig42_0x400, atarig42 )
579578   MCFG_ATARIRLE_ADD("rle", modesc_0x400)
579   
580   /* ASIC65 */
581   MCFG_ASIC65_ADD("asic65", ASIC65_GUARDIANS)
580582MACHINE_CONFIG_END
581583
582584
r26043r26044
595597   ROM_LOAD16_BYTE( "136089-2016.9d", 0x40000, 0x20000, CRC(6191653c) SHA1(97d1a84a585149e8f2c49cab7af22dc755dff350) )
596598   ROM_LOAD16_BYTE( "136089-2015.9c", 0x40001, 0x20000, CRC(0d34419a) SHA1(f16e9fb4cd537d727611cb7dd5537c030671fe1e) )
597599
598   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
600   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
599601   ROM_LOAD( "136089-1012.3f", 0x00000, 0x0a80, CRC(7c5498e7) SHA1(9d8b235baf7b75bef8ef9b168647c5b2b80b2cb3) )
600602
601603   ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 6502 code */
r26043r26044
653655   ROM_LOAD16_BYTE( "136089-2016.9d", 0x40000, 0x20000, CRC(6191653c) SHA1(97d1a84a585149e8f2c49cab7af22dc755dff350) ) /* PALs & BPROMs in White labels */
654656   ROM_LOAD16_BYTE( "136089-2015.9c", 0x40001, 0x20000, CRC(0d34419a) SHA1(f16e9fb4cd537d727611cb7dd5537c030671fe1e) )
655657
656   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
658   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
657659   ROM_LOAD( "136089-1012.3f", 0x00000, 0x0a80, CRC(7c5498e7) SHA1(9d8b235baf7b75bef8ef9b168647c5b2b80b2cb3) )
658660
659661   ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 6502 code */
r26043r26044
712714   ROM_LOAD16_BYTE( "136092-2023.9e",  0x40000, 0x20000, CRC(cfa29316) SHA1(4e0e76304e29ee59bc2ce9a704e3f651dc9d473c) )
713715   ROM_LOAD16_BYTE( "136092-2022.9cd", 0x40001, 0x20000, CRC(ed2abc91) SHA1(81531040d5663f6ab82e924210056e3737e17a8d) )
714716
715   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
717   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
716718   ROM_LOAD( "136089-1012.3f", 0x00000, 0x0a80, NO_DUMP )
717719
718720   ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 6502 code */
r26043r26044
780782   m_sloop_base = main.install_readwrite_handler(0x000000, 0x07ffff, read16_delegate(FUNC(atarig42_state::roadriot_sloop_data_r),this), write16_delegate(FUNC(atarig42_state::roadriot_sloop_data_w),this));
781783   main.set_direct_update_handler(direct_update_delegate(FUNC(atarig42_state::atarig42_sloop_direct_handler), this));
782784
783   asic65_config(machine(), ASIC65_ROMBASED);
784/*
785   /*
785786    Road Riot color MUX
786787
787788    CRA10=!MGEP*!AN.VID7*AN.0               -- if (mopri < pfpri) && (!alpha)
r26043r26044
816817   m_sloop_base = main.install_readwrite_handler(0x000000, 0x07ffff, read16_delegate(FUNC(atarig42_state::guardians_sloop_data_r),this), write16_delegate(FUNC(atarig42_state::guardians_sloop_data_w),this));
817818   main.set_direct_update_handler(direct_update_delegate(FUNC(atarig42_state::atarig42_sloop_direct_handler), this));
818819
819   asic65_config(machine(), ASIC65_GUARDIANS);
820/*
820   /*
821821    Guardians color MUX
822822
823823    CRA10=MGEP*!AN.VID7*AN.0*!MO.0          -- if (mopri >= pfpri) && (!alpha) && (mopix != 0)
trunk/src/mame/drivers/harddriv.c
r26043r26044
326326
327327
328328#include "emu.h"
329#include "machine/atarigen.h"
330#include "machine/asic65.h"
331329#include "sound/dac.h"
332330#include "includes/slapstic.h"
333331#include "includes/harddriv.h"
r26043r26044
14821480   MCFG_CPU_PROGRAM_MAP(dsk_dsp32_map)
14831481
14841482   /* ASIC65 */
1485   MCFG_FRAGMENT_ADD( asic65 )
1483   MCFG_ASIC65_ADD("asic65", ASIC65_STANDARD)
14861484MACHINE_CONFIG_END
14871485
14881486
r26043r26044
14951493   MCFG_CPU_PROGRAM_MAP(dsk2_dsp32_map)
14961494
14971495   /* ASIC65 */
1498   MCFG_FRAGMENT_ADD( asic65 )
1496   MCFG_ASIC65_ADD("asic65", ASIC65_STANDARD)
14991497MACHINE_CONFIG_END
15001498
15011499
r26043r26044
15971595   MCFG_DEVICE_REMOVE("lspeaker")
15981596   MCFG_DEVICE_REMOVE("rspeaker")
15991597
1600   MCFG_FRAGMENT_ADD( asic65 )         /* ASIC65 on DSPCOM board */
1601
1598   MCFG_ASIC65_ADD("asic65", ASIC65_STEELTAL)         /* ASIC65 on DSPCOM board */
1599   
16021600   /* sund hardware */
16031601   MCFG_SPEAKER_STANDARD_MONO("mono")
16041602
r26043r26044
25622560   ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
25632561   ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
25642562
2565   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
2563   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
25662564   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
25672565
25682566   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
26102608   ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
26112609   ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
26122610
2613   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
2611   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
26142612   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
26152613
26162614   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
26582656   ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
26592657   ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
26602658
2661   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
2659   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
26622660   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
26632661
26642662   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
27062704   ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
27072705   ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
27082706
2709   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
2707   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
27102708   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
27112709
27122710   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
27542752   ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
27552753   ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
27562754
2757   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
2755   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
27582756   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
27592757
27602758   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
28022800   ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
28032801   ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
28042802
2805   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
2803   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
28062804   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
28072805
28082806   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
28502848   ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
28512849   ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) )
28522850
2853   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
2851   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
28542852   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
28552853
28562854   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
28982896   ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
28992897   ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) )
29002898
2901   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
2899   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
29022900   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
29032901
29042902   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
29462944   ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
29472945   ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) )
29482946
2949   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
2947   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
29502948   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
29512949
29522950   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
29942992   ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
29952993   ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) )
29962994
2997   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
2995   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
29982996   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
29992997
30002998   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
30423040   ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
30433041   ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) )
30443042
3045   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
3043   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
30463044   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
30473045
30483046   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
30903088   ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
30913089   ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
30923090
3093   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
3091   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
30943092   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
30953093
30963094   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
31383136   ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
31393137   ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
31403138
3141   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
3139   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
31423140   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
31433141
31443142   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
31863184   ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
31873185   ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
31883186
3189   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
3187   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
31903188   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
31913189
31923190   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
32343232   ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
32353233   ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
32363234
3237   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
3235   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
32383236   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
32393237
32403238   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
32823280   ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
32833281   ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
32843282
3285   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
3283   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
32863284   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
32873285
32883286   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
33303328   ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
33313329   ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
33323330
3333   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
3331   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
33343332   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
33353333
33363334   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
33783376   ROM_LOAD16_BYTE( "136078-1015.210y", 0x0e0001, 0x010000, CRC(64dd6040) SHA1(bcadf4f1d9a0685ca39af903d3342d590850513c) )
33793377   ROM_LOAD16_BYTE( "136078-1016.200y", 0x0e0000, 0x010000, CRC(a2a0ed28) SHA1(6f308a38594f7e54ebdd6983d28664ba595bc525) )
33803378
3381   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
3379   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
33823380   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
33833381
33843382   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
34263424   ROM_LOAD16_BYTE( "136078-1015.210y", 0x0e0001, 0x010000, CRC(64dd6040) SHA1(bcadf4f1d9a0685ca39af903d3342d590850513c) )
34273425   ROM_LOAD16_BYTE( "136078-1016.200y", 0x0e0000, 0x010000, CRC(a2a0ed28) SHA1(6f308a38594f7e54ebdd6983d28664ba595bc525) )
34283426
3429   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
3427   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
34303428   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
34313429
34323430   ROM_REGION( 0x20000, "soundcpu", 0 )        /* 2*64k for audio 68000 code */
r26043r26044
35783576
35793577   /* ----------------------- */
35803578
3581   ROM_REGION( 0x2000, "asic65", 0 )   /* ASIC65 TMS32015 code */
3579   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )   /* ASIC65 TMS32015 code */
35823580   ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
35833581
35843582   /* ADSP board */
r26043r26044
36273625   ROM_LOAD( "136087-5001.1f",  0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
36283626   ROM_CONTINUE(                0x004000, 0x00c000 )
36293627
3630   ROM_REGION( 0x2000, "asic65", 0 )       /* 64k for ASIC65 */
3628   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )       /* 64k for ASIC65 */
36313629   ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) )
36323630
36333631   ROM_REGION( 0x10000, "cpu6", 0 )        /* 64k for DSP communications */
r26043r26044
36883686   ROM_LOAD( "136087-5001.1f",  0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
36893687   ROM_CONTINUE(             0x004000, 0x00c000 )
36903688
3691   ROM_REGION( 0x2000, "asic65", 0 )       /* 64k for ASIC65 */
3689   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )       /* 64k for ASIC65 */
36923690   ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) )
36933691
36943692   ROM_REGION( 0x10000, "cpu6", 0 )        /* 64k for DSP communications */
r26043r26044
37493747   ROM_LOAD( "136087-5001.1f",  0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
37503748   ROM_CONTINUE(             0x004000, 0x00c000 )
37513749
3752   ROM_REGION( 0x2000, "asic65", 0 )       /* 64k for ASIC65 */
3750   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )       /* 64k for ASIC65 */
37533751   ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) )
37543752
37553753   ROM_REGION( 0x10000, "cpu6", 0 )        /* 64k for DSP communications */
r26043r26044
38103808   ROM_LOAD( "136087-5001.1f",  0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
38113809   ROM_CONTINUE(             0x004000, 0x00c000 )
38123810
3813   ROM_REGION( 0x2000, "asic65", 0 )       /* 64k for ASIC65 */
3811   ROM_REGION( 0x2000, "asic65:asic65cpu", 0 )       /* 64k for ASIC65 */
38143812   ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) )
38153813
38163814   ROM_REGION( 0x10000, "cpu6", 0 )        /* 64k for DSP communications */
r26043r26044
38673865   ROM_LOAD16_BYTE( "136091-0016.200y", 0x0e0000, 0x010000, CRC(f85ad532) SHA1(f9d2480104a7487c23d33b05aa044b7f4ca08c67) )
38683866   ROM_LOAD16_BYTE( "136091-0015.210y", 0x0e0001, 0x010000, CRC(a2e406f3) SHA1(a7266508011c892cb1032fa4d77ccbafedc844e8) )
38693867
3870   ROM_REGION( 0x10000 + 0x10000, "asic65", 0 )    /* dummy region for ADSP 2105 */
3868   ROM_REGION( 0x10000 + 0x10000, "asic65:asic65cpu", 0 )    /* dummy region for ADSP 2105 */
38713869   ROM_LOAD( "136091-0033.10j", 0x000000, 0x010000, CRC(57504ab6) SHA1(ec8361b7da964c07ca0da48a87537badc3986fe0) )
38723870
38733871   ROM_REGION( 0x60000, "user1", 0 )       /* 384k for object ROM */
r26043r26044
39203918   ROM_LOAD16_BYTE( "coprochi.bin",0x1c0000, 0x20000, CRC(5d2ca109) SHA1(e1a94d3fbfd5d542732555bf60268e73d66b3a06) )
39213919   ROM_LOAD16_BYTE( "coproclo.bin",0x1c0001, 0x20000, CRC(5f98b04d) SHA1(9c4fa4092fd85f1d67be44f2ff91a907a87db51a) )
39223920
3923   ROM_REGION( 0x10000 + 0x10000, "asic65", 0 )    /* dummy region for ADSP 2105 */
3921   ROM_REGION( 0x10000 + 0x10000, "asic65:asic65cpu", 0 )    /* dummy region for ADSP 2105 */
39243922   ROM_LOAD( "sboot.bin", 0x000000, 0x010000, CRC(cde4d010) SHA1(853f4b813ff70fe74cd87e92131c46fca045610d) )
39253923
39263924   ROM_REGION( 0xc0000, "user1", 0 )       /* 768k for object ROM */
r26043r26044
39803978   ROM_REGION( 0x10000 + 0x10000, "dsp32", 0 ) /* dummy region for ADSP 2105 */
39813979   ROM_LOAD( "sboota.bin", 0x10000 + 0x00000, 0x10000, CRC(3ef819cd) SHA1(c547b869a3a37a82fb46584fe0ef0cfe21a4f882) )
39823980
3983   ROM_REGION( 0x10000 + 0x10000, "asic65", 0 )    /* dummy region for ADSP 2105 */
3981   ROM_REGION( 0x10000 + 0x10000, "asic65:asic65cpu", 0 )    /* dummy region for ADSP 2105 */
39843982   ROM_LOAD( "xboota.bin", 0x10000 + 0x00000, 0x10000, CRC(d9c49901) SHA1(9f90ae3a47eb1ef00c3ec3661f60402c2eae2108) )
39853983
39863984   ROM_REGION( 0xc0000, "user1", 0 )       /* 768k for object ROM */
r26043r26044
41914189   m_dsk_zram = (UINT16 *)(usr3 + 0x50000);
41924190
41934191   /* install ASIC65 */
4194   m_maincpu->space(AS_PROGRAM).install_legacy_write_handler(0x914000, 0x917fff, FUNC(asic65_data_w));
4195   m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x914000, 0x917fff, FUNC(asic65_r));
4196   m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x918000, 0x91bfff, FUNC(asic65_io_r));
4192   m_maincpu->space(AS_PROGRAM).install_write_handler(0x914000, 0x917fff, write16_delegate(FUNC(asic65_device::data_w), (asic65_device*)m_asic65));
4193   m_maincpu->space(AS_PROGRAM).install_read_handler(0x914000, 0x917fff, read16_delegate(FUNC(asic65_device::read), (asic65_device*)m_asic65));
4194   m_maincpu->space(AS_PROGRAM).install_read_handler(0x918000, 0x91bfff, read16_delegate(FUNC(asic65_device::io_r), (asic65_device*)m_asic65));
41974195
41984196   /* install extra ROM */
41994197   m_maincpu->space(AS_PROGRAM).install_read_handler(0x940000, 0x9fffff, read16_delegate(FUNC(harddriv_state::hd68k_dsk_small_rom_r), this));
42004198   m_dsk_rom = (UINT16 *)(usr3 + 0x00000);
4201
4202   /* set up the ASIC65 */
4203   asic65_config(machine(), ASIC65_STANDARD);
42044199}
42054200
42064201
r26043r26044
42104205   UINT8 *usr3 = memregion("user3")->base();
42114206
42124207   /* install ASIC65 */
4213   m_maincpu->space(AS_PROGRAM).install_legacy_write_handler(0x824000, 0x824003, FUNC(asic65_data_w));
4214   m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x824000, 0x824003, FUNC(asic65_r));
4215   m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x825000, 0x825001, FUNC(asic65_io_r));
4208   m_maincpu->space(AS_PROGRAM).install_write_handler(0x824000, 0x824003, write16_delegate(FUNC(asic65_device::data_w), (asic65_device*)m_asic65));
4209   m_maincpu->space(AS_PROGRAM).install_read_handler(0x824000, 0x824003, read16_delegate(FUNC(asic65_device::read), (asic65_device*)m_asic65));
4210   m_maincpu->space(AS_PROGRAM).install_read_handler(0x825000, 0x825001, read16_delegate(FUNC(asic65_device::io_r), (asic65_device*)m_asic65));
42164211
42174212   /* install ASIC61 */
42184213   m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x827000, 0x8277ff, read16_delegate(FUNC(harddriv_state::hd68k_dsk_dsp32_r), this), write16_delegate(FUNC(harddriv_state::hd68k_dsk_dsp32_w), this));
r26043r26044
42274222   /* install extra ROM */
42284223   m_maincpu->space(AS_PROGRAM).install_read_handler(0x900000, 0x9fffff, read16_delegate(FUNC(harddriv_state::hd68k_dsk_rom_r), this));
42294224   m_dsk_rom = (UINT16 *)(usr3 + 0x000000);
4230
4231   /* set up the ASIC65 */
4232   asic65_config(machine(), ASIC65_STANDARD);
42334225}
42344226
42354227
r26043r26044
42374229void harddriv_state::init_dspcom()
42384230{
42394231    /* install ASIC65 */
4240   m_maincpu->space(AS_PROGRAM).install_legacy_write_handler(0x900000, 0x900003, FUNC(asic65_data_w));
4241   m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x900000, 0x900003, FUNC(asic65_r));
4242   m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x901000, 0x910001, FUNC(asic65_io_r));
4232   m_maincpu->space(AS_PROGRAM).install_write_handler(0x900000, 0x900003, write16_delegate(FUNC(asic65_device::data_w), (asic65_device*)m_asic65));
4233   m_maincpu->space(AS_PROGRAM).install_read_handler(0x900000, 0x900003, read16_delegate(FUNC(asic65_device::read), (asic65_device*)m_asic65));
4234   m_maincpu->space(AS_PROGRAM).install_read_handler(0x901000, 0x910001, read16_delegate(FUNC(asic65_device::io_r), (asic65_device*)m_asic65));
42434235
4244   /* set up the ASIC65 */
4245   asic65_config(machine(), ASIC65_STEELTAL);
4246
42474236   /* install DSPCOM control */
42484237   m_maincpu->space(AS_PROGRAM).install_write_handler(0x904000, 0x90401f, write16_delegate(FUNC(harddriv_state::hddspcom_control_w), this));
42494238}

Previous 199869 Revisions Next


© 1997-2024 The MAME Team