Previous 15994 Revisions Next

r3604 Wednesday 26th November, 2008 at 21:33:34 UTC by R. Belmont
Fixed up amiga.a files.
[src/mess]mess.mak
[src/mess/drivers]amiga.c
[src/mess/machine]amigacd.c amigacrt.c amigafdc.c

src/mess/machine/amigafdc.c
r3603r3604
266266   if ( fdc_status[drive].mfm[cur_pos-2] == ( ( sync >> 8 ) & 0xff ) &&
267267       fdc_status[drive].mfm[cur_pos-1] == ( sync & 0xff ) )
268268   {
269      amiga_custom_w(machine, REG_INTREQ, 0x8000 | INTENA_DSKSYN, 0xffff);
269      const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
270
271      amiga_custom_w(space, REG_INTREQ, 0x8000 | INTENA_DSKSYN, 0xffff);
270272   }
271273
272274   if ( sector < 10 )
r3603r3604
306308   {
307309      if ( fdc_status[drive].len > 0 )
308310      {
311         const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
312
309313         logerror("Write to disk unsupported yet\n" );
310314
311         amiga_custom_w(machine, REG_INTREQ, 0x8000 | INTENA_DSKBLK, 0xffff);
315         amiga_custom_w(space, REG_INTREQ, 0x8000 | INTENA_DSKBLK, 0xffff);
312316      }
313317   }
314318   else
r3603r3604
341345
342346      if ( fdc_status[drive].len <= 0 )
343347      {
344         amiga_custom_w(machine, REG_INTREQ, 0x8000 | INTENA_DSKBLK, 0xffff);
348         const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
349
350         amiga_custom_w(space, REG_INTREQ, 0x8000 | INTENA_DSKBLK, 0xffff);
345351      }
346352      else
347353      {
r3603r3604
371377   }
372378
373379   if ( drive == -1 ) {
380      const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
381
374382      logerror("Disk DMA started with no drive selected!\n" );
375      amiga_custom_w(machine, REG_INTREQ, 0x8000 | INTENA_DSKBLK, 0xffff);
383      amiga_custom_w(space, REG_INTREQ, 0x8000 | INTENA_DSKBLK, 0xffff);
376384      return;
377385   }
378386
src/mess/machine/amigacrt.c
r3603r3604
8787   cpu_set_input_line(machine->cpu[0], 7, PULSE_LINE);
8888}
8989
90static void amiga_ar1_nmi( void )
90static void amiga_ar1_nmi( running_machine *machine )
9191{
9292   /* get the cart's built-in ram */
93   UINT16 *ar_ram = (UINT16 *)memory_get_write_ptr(0, ADDRESS_SPACE_PROGRAM, 0x9fc000);
93   UINT16 *ar_ram = (UINT16 *)memory_get_write_ptr(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x9fc000);
9494
9595   if ( ar_ram != NULL )
9696   {
r3603r3604
108108
109109static WRITE16_HANDLER( amiga_ar1_chipmem_w )
110110{
111   int pc = safe_activecpu_get_pc();
111   int pc = cpu_get_pc(space->cpu);
112112
113113   /* see if we're inside the AR1 rom */
114114   if ( ((pc >> 16) & 0xff ) != 0xf0 )
r3603r3604
128128
129129static void amiga_ar1_check_overlay( running_machine *machine )
130130{
131   memory_install_write16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x000000, 0x00007f, 0, 0, amiga_ar1_chipmem_w);
131   memory_install_write16_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x000000, 0x00007f, 0, 0, amiga_ar1_chipmem_w);
132132}
133133
134134static void amiga_ar1_init( running_machine *machine )
r3603r3604
147147   memset(ar_ram, 0, 0x4000);
148148
149149   /* Install ROM */
150   memory_install_read16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xf00000, 0xf7ffff, 0, 0, SMH_BANK2);
151   memory_install_write16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xf00000, 0xf7ffff, 0, 0, SMH_ROM);
150   memory_install_read16_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0xf00000, 0xf7ffff, 0, 0, SMH_BANK2);
151   memory_install_write16_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0xf00000, 0xf7ffff, 0, 0, SMH_ROM);
152152
153153   /* Install RAM */
154   memory_install_read16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x9fc000, 0x9fffff, 0, 0, SMH_BANK3);
155   memory_install_write16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x9fc000, 0x9fffff, 0, 0, SMH_BANK3);
154   memory_install_read16_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x9fc000, 0x9fffff, 0, 0, SMH_BANK3);
155   memory_install_write16_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x9fc000, 0x9fffff, 0, 0, SMH_BANK3);
156156
157157   /* Configure Banks */
158   memory_set_bankptr(2, memory_region(machine, "user2"));
159   memory_set_bankptr(3, ar_ram);
158   memory_set_bankptr(machine, 2, memory_region(machine, "user2"));
159   memory_set_bankptr(machine, 3, ar_ram);
160160
161161   amiga_ar1_spurious = 0;
162162
163163   /* Install IRQ ACK callback */
164   cpunum_set_irq_callback(0,amiga_ar1_irqack);
164   cpu_set_irq_callback(machine->cpu[0],amiga_ar1_irqack);
165165}
166166
167167/***************************************************************************
r3603r3604
189189
190190static READ16_HANDLER( amiga_ar23_cia_r )
191191{
192   int pc = safe_activecpu_get_pc();
192   int pc = cpu_get_pc(space->cpu);
193193
194194   if ( ACCESSING_BITS_0_7 && offset == 2048 && pc >= 0x40 && pc < 0x120 )
195195   {
196      amiga_ar23_freeze(machine);
196      amiga_ar23_freeze(space->machine);
197197   }
198198
199   return amiga_cia_r( machine, offset, mem_mask );
199   return amiga_cia_r( space, offset, mem_mask );
200200}
201201
202202static WRITE16_HANDLER( amiga_ar23_mode_w )
203203{
204204   if ( data & 2 )
205205   {
206      memory_install_read16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xbfd000, 0xbfefff, 0, 0, amiga_ar23_cia_r);
206      memory_install_read16_handler(space, 0xbfd000, 0xbfefff, 0, 0, amiga_ar23_cia_r);
207207   }
208208   else
209209   {
210      memory_install_read16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xbfd000, 0xbfefff, 0, 0, amiga_cia_r);
210      memory_install_read16_handler(space, 0xbfd000, 0xbfefff, 0, 0, amiga_cia_r);
211211   }
212212
213213   amiga_ar23_mode = (data&0x3);
r3603r3604
218218
219219static READ16_HANDLER( amiga_ar23_mode_r )
220220{
221   UINT16 *mem = (UINT16 *)memory_region( machine, "user2" );
221   UINT16 *mem = (UINT16 *)memory_region( space->machine, "user2" );
222222
223223   if ( ACCESSING_BITS_0_7 )
224224   {
r3603r3604
229229      {
230230         UINT32 mirror_mask = amiga_chip_ram_size;
231231
232         memory_set_bank(machine, 1, 0);
232         memory_set_bank(space->machine, 1, 0);
233233
234234         while( (mirror_mask<<1) < 0x100000 )
235235         {
r3603r3604
237237         }
238238
239239         /* overlay disabled, map RAM on 0x000000 */
240         memory_install_write16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x000000, amiga_chip_ram_size - 1, 0, mirror_mask, SMH_BANK1);
240         memory_install_write16_handler(space, 0x000000, amiga_chip_ram_size - 1, 0, mirror_mask, SMH_BANK1);
241241      }
242242   }
243243
r3603r3604
249249   if ( offset == (0x08/2) )
250250   {
251251      if ( amiga_ar23_mode & 1 )
252         amiga_ar23_freeze(machine);
252         amiga_ar23_freeze(space->machine);
253253   }
254254
255255   amiga_chip_ram_w( offset * 2, data );
r3603r3604
257257
258258static void amiga_ar23_freeze( running_machine *machine )
259259{
260   int pc = safe_activecpu_get_pc();
260   int pc = cpu_get_pc(machine->cpu[0]);
261261
262262   /* only freeze if we're not inside the cart's ROM */
263263   if ( ((pc >> 16) & 0xfe ) != 0x40 )
264264   {
265265      /* get the cart's built-in ram */
266      UINT16 *ar_ram = (UINT16 *)memory_get_write_ptr(0, ADDRESS_SPACE_PROGRAM, 0x440000);
266      UINT16 *ar_ram = (UINT16 *)memory_get_write_ptr(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x440000);
267267
268268      if ( ar_ram != NULL )
269269      {
r3603r3604
277277      memory_set_bank(machine, 1, 2);
278278
279279      /* writes go to chipram */
280      memory_install_write16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x000000, amiga_chip_ram_size - 1, 0, 0, amiga_ar23_chipmem_w);
280      memory_install_write16_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x000000, amiga_chip_ram_size - 1, 0, 0, amiga_ar23_chipmem_w);
281281
282282      /* trigger NMI irq */
283283      cpu_set_input_line(machine->cpu[0], 7, PULSE_LINE);
r3603r3604
293293#if 0
294294static WRITE16_HANDLER( amiga_ar23_custom_w )
295295{
296   int pc = safe_activecpu_get_pc();
296   int pc = cpu_get_pc(space->cpu);
297297
298298   /* see if we're inside the AR2 rom */
299299   if ( ((pc >> 16) & 0xfe ) != 0x40 )
r3603r3604
314314{
315315   UINT16 data = amiga_custom_r( offset, mem_mask );
316316
317   int pc = safe_activecpu_get_pc();
317   int pc = cpu_get_pc(space->cpu);
318318
319319   /* see if we're inside the AR2 rom */
320320   if ( ((pc >> 16) & 0xfe ) != 0x40 )
r3603r3604
335335static void amiga_ar23_check_overlay( running_machine *machine )
336336{
337337   amiga_ar23_mode = 3;
338   memory_install_write16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x000000, 0x00000f, 0, 0, amiga_ar23_chipmem_w);
338   memory_install_write16_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x000000, 0x00000f, 0, 0, amiga_ar23_chipmem_w);
339339}
340340
341341static void amiga_ar23_init( running_machine *machine, int ar3 )
r3603r3604
362362   }
363363
364364   /* Install ROM */
365   memory_install_read16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400000, 0x400000+size, 0, mirror, SMH_BANK2);
366   memory_install_write16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400000, 0x400000+size, 0, mirror, SMH_ROM);
365   memory_install_read16_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x400000, 0x400000+size, 0, mirror, SMH_BANK2);
366   memory_install_write16_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x400000, 0x400000+size, 0, mirror, SMH_ROM);
367367
368368   /* Install RAM */
369   memory_install_read16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x440000, 0x44ffff, 0, 0, SMH_BANK3);
370   memory_install_write16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x440000, 0x44ffff, 0, 0, SMH_BANK3);
369   memory_install_read16_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x440000, 0x44ffff, 0, 0, SMH_BANK3);
370   memory_install_write16_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x440000, 0x44ffff, 0, 0, SMH_BANK3);
371371
372372   /* Install Custom chip monitor */
373//   memory_install_read16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xdff000, 0xdff1ff, 0, 0, amiga_ar23_custom_r);
374//   memory_install_write16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xdff000, 0xdff1ff, 0, 0, amiga_ar23_custom_w);
373//   memory_install_read16_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0xdff000, 0xdff1ff, 0, 0, amiga_ar23_custom_r);
374//   memory_install_write16_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0xdff000, 0xdff1ff, 0, 0, amiga_ar23_custom_w);
375375
376376   /* Install status/mode handlers */
377   memory_install_read16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400000, 0x400007, 0, mirror, amiga_ar23_mode_r);
378   memory_install_write16_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x400000, 0x400003, 0, mirror, amiga_ar23_mode_w);
377   memory_install_read16_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x400000, 0x400007, 0, mirror, amiga_ar23_mode_r);
378   memory_install_write16_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x400000, 0x400003, 0, mirror, amiga_ar23_mode_w);
379379
380380   /* Configure Banks */
381   memory_set_bankptr(2, memory_region(machine, "user2"));
382   memory_set_bankptr(3, ar_ram);
381   memory_set_bankptr(machine, 2, memory_region(machine, "user2"));
382   memory_set_bankptr(machine, 3, ar_ram);
383383
384384   memory_configure_bank(machine, 1, 0, 2, amiga_chip_ram, 0);
385385   memory_configure_bank(machine, 1, 1, 2, memory_region(machine, "user1"), 0);
r3603r3604
447447   switch( amiga_cart_type )
448448   {
449449      case ACTION_REPLAY:
450         amiga_ar1_nmi();
450         amiga_ar1_nmi(Machine);
451451      break;
452452
453453      case ACTION_REPLAY_MKII:
src/mess/machine/amigacd.c
r3603r3604
8383      return;
8484
8585   /* otherwise, generate the IRQ */
86   amiga_custom_w(machine, REG_INTREQ, 0x8000 | INTENA_PORTS, 0xffff);
86   amiga_custom_w(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), REG_INTREQ, 0x8000 | INTENA_PORTS, 0xffff);
8787}
8888
8989static TIMER_CALLBACK(dmac_dma_proc)
r3603r3604
131131      case 0x20:
132132      {
133133         UINT8   v = dmac_data.istr;
134         LOG(( "DMAC: PC=%08x - ISTR Read(%04x)\n", activecpu_get_pc(), dmac_data.istr ));
134         LOG(( "DMAC: PC=%08x - ISTR Read(%04x)\n", cpu_get_pc(space->cpu), dmac_data.istr ));
135135
136136         dmac_data.istr &= ~0x0f;
137137         return v;
r3603r3604
140140
141141      case 0x21:
142142      {
143         LOG(( "DMAC: PC=%08x - CNTR Read(%04x)\n", activecpu_get_pc(), dmac_data.cntr ));
143         LOG(( "DMAC: PC=%08x - CNTR Read(%04x)\n", cpu_get_pc(space->cpu), dmac_data.cntr ));
144144         return dmac_data.cntr;
145145      }
146146      break;
147147
148148      case 0x40:   /* wtc hi */
149149      {
150         LOG(( "DMAC: PC=%08x - WTC HI Read\n", activecpu_get_pc() ));
150         LOG(( "DMAC: PC=%08x - WTC HI Read\n", cpu_get_pc(space->cpu) ));
151151         return (dmac_data.wtc >> 16);
152152      }
153153      break;
154154
155155      case 0x41:   /* wtc lo */
156156      {
157         LOG(( "DMAC: PC=%08x - WTC LO Read\n", activecpu_get_pc() ));
157         LOG(( "DMAC: PC=%08x - WTC LO Read\n", cpu_get_pc(space->cpu) ));
158158         return dmac_data.wtc;
159159      }
160160      break;
161161
162162      case 0x42:   /* acr hi */
163163      {
164         LOG(( "DMAC: PC=%08x - ACR HI Read\n", activecpu_get_pc() ));
164         LOG(( "DMAC: PC=%08x - ACR HI Read\n", cpu_get_pc(space->cpu) ));
165165         return (dmac_data.acr >> 16);
166166      }
167167      break;
168168
169169      case 0x43:   /* acr lo */
170170      {
171         LOG(( "DMAC: PC=%08x - ACR LO Read\n", activecpu_get_pc() ));
171         LOG(( "DMAC: PC=%08x - ACR LO Read\n", cpu_get_pc(space->cpu) ));
172172         return dmac_data.acr;
173173      }
174174      break;
r3603r3604
176176      case 0x48:   /* wd33c93 SCSI expansion */
177177      case 0x49:
178178      {
179         LOG(( "DMAC: PC=%08x - WD33C93 Read(%d)\n", activecpu_get_pc(), offset & 1 ));
179         LOG(( "DMAC: PC=%08x - WD33C93 Read(%d)\n", cpu_get_pc(space->cpu), offset & 1 ));
180180         return 0x00;   /* Not available without SCSI expansion */
181181      }
182182      break;
183183
184184      case 0x50:
185185      {
186         LOG(( "DMAC: PC=%08x - CDROM RESP Read\n", activecpu_get_pc() ));
186         LOG(( "DMAC: PC=%08x - CDROM RESP Read\n", cpu_get_pc(space->cpu) ));
187187         return matsucd_response_r();
188188      }
189189      break;
r3603r3604
192192      case 0x52:
193193      case 0x53:
194194      {
195         LOG(( "DMAC: PC=%08x - XT IO Read(%d)\n", activecpu_get_pc(), (offset & 3)-1 ));
195         LOG(( "DMAC: PC=%08x - XT IO Read(%d)\n", cpu_get_pc(space->cpu), (offset & 3)-1 ));
196196         return 0xff;
197197      }
198198      break;
r3603r3604
214214      case 0x66:
215215      case 0x67:
216216      {
217         LOG(( "DMAC: PC=%08x - TPI6525 Read(%d)\n", activecpu_get_pc(), (offset - 0x58) ));
218         return tpi6525_0_port_r(machine, offset - 0x58);
217         LOG(( "DMAC: PC=%08x - TPI6525 Read(%d)\n", cpu_get_pc(space->cpu), (offset - 0x58) ));
218         return tpi6525_0_port_r(space, offset - 0x58);
219219      }
220220      break;
221221
222222      case 0x70:   /* DMA start strobe */
223223      {
224         LOG(( "DMAC: PC=%08x - DMA Start Strobe\n", activecpu_get_pc() ));
224         LOG(( "DMAC: PC=%08x - DMA Start Strobe\n", cpu_get_pc(space->cpu) ));
225225         timer_adjust_oneshot(dmac_data.dma_timer, ATTOTIME_IN_MSEC( CD_SECTOR_TIME ), 0);
226226      }
227227      break;
228228
229229      case 0x71:   /* DMA stop strobe */
230230      {
231         LOG(( "DMAC: PC=%08x - DMA Stop Strobe\n", activecpu_get_pc() ));
231         LOG(( "DMAC: PC=%08x - DMA Stop Strobe\n", cpu_get_pc(space->cpu) ));
232232         timer_reset( dmac_data.dma_timer, attotime_never );
233233      }
234234      break;
235235
236236      case 0x72:   /* Clear IRQ strobe */
237237      {
238         LOG(( "DMAC: PC=%08x - IRQ Clear Strobe\n", activecpu_get_pc() ));
238         LOG(( "DMAC: PC=%08x - IRQ Clear Strobe\n", cpu_get_pc(space->cpu) ));
239239         dmac_data.istr &= ~ISTR_INT_P;
240240      }
241241      break;
242242
243243      case 0x74:   /* Flush strobe */
244244      {
245         LOG(( "DMAC: PC=%08x - Flush Strobe\n", activecpu_get_pc() ));
245         LOG(( "DMAC: PC=%08x - Flush Strobe\n", cpu_get_pc(space->cpu) ));
246246         dmac_data.istr |= ISTR_FE_FLG;
247247      }
248248      break;
249249
250250      default:
251         logerror( "DMAC-READ: PC=%08x, offset = %02x\n", activecpu_get_pc(), offset );
251         logerror( "DMAC-READ: PC=%08x, offset = %02x\n", cpu_get_pc(space->cpu), offset );
252252      break;
253253   }
254254
r3603r3604
263263   {
264264      case 0x21:   /* control write */
265265      {
266         LOG(( "DMAC: PC=%08x - CNTR Write(%04x)\n", activecpu_get_pc(), data ));
266         LOG(( "DMAC: PC=%08x - CNTR Write(%04x)\n", cpu_get_pc(space->cpu), data ));
267267         dmac_data.cntr = data;
268         check_interrupts( machine );
268         check_interrupts( space->machine );
269269      }
270270      break;
271271
272272      case 0x40:   /* wtc hi */
273273      {
274         LOG(( "DMAC: PC=%08x - WTC HI Write - data = %04x\n", activecpu_get_pc(), data ));
274         LOG(( "DMAC: PC=%08x - WTC HI Write - data = %04x\n", cpu_get_pc(space->cpu), data ));
275275         dmac_data.wtc &= 0x0000ffff;
276276         dmac_data.wtc |= ((UINT32)data) << 16;
277277      }
r3603r3604
279279
280280      case 0x41:   /* wtc lo */
281281      {
282         LOG(( "DMAC: PC=%08x - WTC LO Write - data = %04x\n", activecpu_get_pc(), data ));
282         LOG(( "DMAC: PC=%08x - WTC LO Write - data = %04x\n", cpu_get_pc(space->cpu), data ));
283283         dmac_data.wtc &= 0xffff0000;
284284         dmac_data.wtc |= data;
285285      }
r3603r3604
287287
288288      case 0x42:   /* acr hi */
289289      {
290         LOG(( "DMAC: PC=%08x - ACR HI Write - data = %04x\n", activecpu_get_pc(), data ));
290         LOG(( "DMAC: PC=%08x - ACR HI Write - data = %04x\n", cpu_get_pc(space->cpu), data ));
291291         dmac_data.acr &= 0x0000ffff;
292292         dmac_data.acr |= ((UINT32)data) << 16;
293293      }
r3603r3604
295295
296296      case 0x43:   /* acr lo */
297297      {
298         LOG(( "DMAC: PC=%08x - ACR LO Write - data = %04x\n", activecpu_get_pc(), data ));
298         LOG(( "DMAC: PC=%08x - ACR LO Write - data = %04x\n", cpu_get_pc(space->cpu), data ));
299299         dmac_data.acr &= 0xffff0000;
300300         dmac_data.acr |= data;
301301      }
r3603r3604
303303
304304      case 0x47:   /* dawr */
305305      {
306         LOG(( "DMAC: PC=%08x - DAWR Write - data = %04x\n", activecpu_get_pc(), data ));
306         LOG(( "DMAC: PC=%08x - DAWR Write - data = %04x\n", cpu_get_pc(space->cpu), data ));
307307         dmac_data.dawr = data;
308308      }
309309      break;
r3603r3604
311311      case 0x48:   /* wd33c93 SCSI expansion */
312312      case 0x49:
313313      {
314         LOG(( "DMAC: PC=%08x - WD33C93 Write(%d) - data = %04x\n", activecpu_get_pc(), offset & 1, data ));
314         LOG(( "DMAC: PC=%08x - WD33C93 Write(%d) - data = %04x\n", cpu_get_pc(space->cpu), offset & 1, data ));
315315         /* Not available without SCSI expansion */
316316      }
317317      break;
318318
319319      case 0x50:
320320      {
321         LOG(( "DMAC: PC=%08x - CDROM CMD Write - data = %04x\n", activecpu_get_pc(), data ));
321         LOG(( "DMAC: PC=%08x - CDROM CMD Write - data = %04x\n", cpu_get_pc(space->cpu), data ));
322322         matsucd_command_w( data );
323323      }
324324      break;
r3603r3604
340340      case 0x66:
341341      case 0x67:
342342      {
343         LOG(( "DMAC: PC=%08x - TPI6525 Write(%d) - data = %04x\n", activecpu_get_pc(), (offset - 0x58), data ));
344         tpi6525_0_port_w(machine, offset - 0x58, data);
343         LOG(( "DMAC: PC=%08x - TPI6525 Write(%d) - data = %04x\n", cpu_get_pc(space->cpu), (offset - 0x58), data ));
344         tpi6525_0_port_w(space, offset - 0x58, data);
345345      }
346346      break;
347347
348348      case 0x70:   /* DMA start strobe */
349349      {
350         LOG(( "DMAC: PC=%08x - DMA Start Strobe\n", activecpu_get_pc() ));
350         LOG(( "DMAC: PC=%08x - DMA Start Strobe\n", cpu_get_pc(space->cpu) ));
351351         timer_adjust_oneshot(dmac_data.dma_timer, ATTOTIME_IN_MSEC( CD_SECTOR_TIME ), 0);
352352      }
353353      break;
354354
355355      case 0x71:   /* DMA stop strobe */
356356      {
357         LOG(( "DMAC: PC=%08x - DMA Stop Strobe\n", activecpu_get_pc() ));
357         LOG(( "DMAC: PC=%08x - DMA Stop Strobe\n", cpu_get_pc(space->cpu) ));
358358         timer_reset( dmac_data.dma_timer, attotime_never );
359359      }
360360      break;
361361
362362      case 0x72:   /* Clear IRQ strobe */
363363      {
364         LOG(( "DMAC: PC=%08x - IRQ Clear Strobe\n", activecpu_get_pc() ));
364         LOG(( "DMAC: PC=%08x - IRQ Clear Strobe\n", cpu_get_pc(space->cpu) ));
365365         dmac_data.istr &= ~ISTR_INT_P;
366366      }
367367      break;
368368
369369      case 0x74:   /* Flush Strobe */
370370      {
371         LOG(( "DMAC: PC=%08x - Flush Strobe\n", activecpu_get_pc() ));
371         LOG(( "DMAC: PC=%08x - Flush Strobe\n", cpu_get_pc(space->cpu) ));
372372         dmac_data.istr |= ISTR_FE_FLG;
373373      }
374374      break;
375375
376376      default:
377         logerror( "DMAC-WRITE: PC=%08x, offset = %02x, data = %04x\n", activecpu_get_pc(), offset, data );
377         logerror( "DMAC-WRITE: PC=%08x, offset = %02x, data = %04x\n", cpu_get_pc(space->cpu), offset, data );
378378      break;
379379   }
380380}
r3603r3604
387387
388388static void   dmac_install(offs_t base)
389389{
390   memory_install_read16_handler(Machine, 0, ADDRESS_SPACE_PROGRAM, base, base + 0xFFFF, 0, 0, amiga_dmac_r);
391   memory_install_write16_handler(Machine, 0, ADDRESS_SPACE_PROGRAM, base, base + 0xFFFF, 0, 0, amiga_dmac_w);
390   memory_install_read16_handler(cpu_get_address_space(Machine->cpu[0], ADDRESS_SPACE_PROGRAM), base, base + 0xFFFF, 0, 0, amiga_dmac_r);
391   memory_install_write16_handler(cpu_get_address_space(Machine->cpu[0], ADDRESS_SPACE_PROGRAM), base, base + 0xFFFF, 0, 0, amiga_dmac_w);
392392}
393393
394394static void   dmac_uninstall(offs_t base)
395395{
396   memory_install_read16_handler(Machine, 0, ADDRESS_SPACE_PROGRAM, base, base + 0xFFFF, 0, 0, SMH_UNMAP);
397   memory_install_write16_handler(Machine, 0, ADDRESS_SPACE_PROGRAM, base, base + 0xFFFF, 0, 0, SMH_UNMAP);
396   memory_install_read16_handler(cpu_get_address_space(Machine->cpu[0], ADDRESS_SPACE_PROGRAM), base, base + 0xFFFF, 0, 0, SMH_UNMAP);
397   memory_install_write16_handler(cpu_get_address_space(Machine->cpu[0], ADDRESS_SPACE_PROGRAM), base, base + 0xFFFF, 0, 0, SMH_UNMAP);
398398}
399399
400400static const amiga_autoconfig_device dmac_device =
r3603r3604
453453
454454   if ( (CUSTOM_REG(REG_INTREQ) & INTENA_PORTS) == 0 )
455455   {
456      amiga_custom_w(machine, REG_INTREQ, 0x8000 | INTENA_PORTS, 0xffff);
456      amiga_custom_w(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), REG_INTREQ, 0x8000 | INTENA_PORTS, 0xffff);
457457   }
458458   else
459459   {
r3603r3604
469469   {
470470      if ( (CUSTOM_REG(REG_INTREQ) & INTENA_PORTS) == 0 )
471471      {
472         amiga_custom_w(machine, REG_INTREQ, 0x8000 | INTENA_PORTS, 0xffff);
472         amiga_custom_w(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), REG_INTREQ, 0x8000 | INTENA_PORTS, 0xffff);
473473      }
474474      else
475475      {
src/mess/mess.mak
r3603r3604
370370   $(MESSOBJ)/3do.a \
371371   $(MESSOBJ)/acorn.a \
372372   $(MESSOBJ)/advision.a \
373   $(MESSOBJ)/amiga.a \
373374   $(MESSOBJ)/aquarius.a \
374375   $(MESSOBJ)/b2m.a \
375376   $(MESSOBJ)/bk.a \
r3603r3604
397398   $(MESSOBJ)/votrax.a \
398399   $(MESSOBJ)/shared.a \
399400
400#   $(MESSOBJ)/amiga.a \
401401#   $(MESSOBJ)/amstrad.a \
402402#   $(MESSOBJ)/apexc.a \
403403#   $(MESSOBJ)/apf.a \
src/mess/drivers/amiga.c
r3603r3604
4040
4141static READ16_HANDLER( amiga_clock_r )
4242{
43   const device_config *rtc = device_list_find_by_tag(machine->config->devicelist, MSM6242, "rtc");
43   const device_config *rtc = device_list_find_by_tag(space->machine->config->devicelist, MSM6242, "rtc");
4444   return msm6242_r(rtc, offset / 2);
4545}
4646
4747
4848static WRITE16_HANDLER( amiga_clock_w )
4949{
50   const device_config *rtc = device_list_find_by_tag(machine->config->devicelist, MSM6242, "rtc");
50   const device_config *rtc = device_list_find_by_tag(space->machine->config->devicelist, MSM6242, "rtc");
5151   msm6242_w(rtc, offset / 2, data);
5252}
5353
r3603r3604
310310static void amiga_cia_0_portA_w( UINT8 data )
311311{
312312   /* switch banks as appropriate */
313   memory_set_bank(1, data & 1);
313   memory_set_bank(Machine, 1, data & 1);
314314
315315   /* swap the write handlers between ROM and bank 1 based on the bit */
316316   if ((data & 1) == 0) {
r3603r3604
321321      }
322322
323323      /* overlay disabled, map RAM on 0x000000 */
324      memory_install_write16_handler(Machine, 0, ADDRESS_SPACE_PROGRAM, 0x000000, amiga_chip_ram_size - 1, 0, mirror_mask, SMH_BANK1);
324      memory_install_write16_handler(cpu_get_address_space(Machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x000000, amiga_chip_ram_size - 1, 0, mirror_mask, SMH_BANK1);
325325
326326      amiga_cart_check_overlay(Machine);
327327   }
328328   else
329329      /* overlay enabled, map Amiga system ROM on 0x000000 */
330      memory_install_write16_handler(Machine, 0, ADDRESS_SPACE_PROGRAM, 0x000000, amiga_chip_ram_size - 1, 0, 0, SMH_UNMAP);
330      memory_install_write16_handler(cpu_get_address_space(Machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x000000, amiga_chip_ram_size - 1, 0, 0, SMH_UNMAP);
331331
332332   set_led_status( 0, ( data & 2 ) ? 0 : 1 ); /* bit 2 = Power Led on Amiga */
333333   output_set_value("power_led", ( data & 2 ) ? 0 : 1);
r3603r3604
380380   if (input_port_read(Machine, "hardware") & 0x08)
381381   {
382382      /* Install RTC */
383      memory_install_readwrite16_handler(Machine, 0, ADDRESS_SPACE_PROGRAM, 0xdc0000, 0xdc003f, 0, 0, amiga_clock_r, amiga_clock_w);
383      memory_install_readwrite16_handler(cpu_get_address_space(Machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0xdc0000, 0xdc003f, 0, 0, amiga_clock_r, amiga_clock_w);
384384   }
385385   else
386386   {
387387      /* No RTC support */
388      memory_install_readwrite16_handler(Machine, 0, ADDRESS_SPACE_PROGRAM, 0xdc0000, 0xdc003f, 0, 0, SMH_UNMAP, SMH_UNMAP);
388      memory_install_readwrite16_handler(cpu_get_address_space(Machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0xdc0000, 0xdc003f, 0, 0, SMH_UNMAP, SMH_UNMAP);
389389   }
390390}
391391
r3603r3604
411411   amiga_machine_config(machine, &amiga_intf);
412412
413413   /* set up memory */
414   memory_configure_bank(1, 0, 1, amiga_chip_ram, 0);
415   memory_configure_bank(1, 1, 1, memory_region(machine, "user1"), 0);
414   memory_configure_bank(machine, 1, 0, 1, amiga_chip_ram, 0);
415   memory_configure_bank(machine, 1, 1, 1, memory_region(machine, "user1"), 0);
416416
417417   /* initialize cartridge (if present) */
418418   amiga_cart_init(machine);
r3603r3604
477477   amiga_machine_config(machine, &amiga_intf);
478478
479479   /* set up memory */
480   memory_configure_bank(1, 0, 1, amiga_chip_ram, 0);
481   memory_configure_bank(1, 1, 1, memory_region(machine, "user1"), 0);
480   memory_configure_bank(machine, 1, 0, 1, amiga_chip_ram, 0);
481   memory_configure_bank(machine, 1, 1, 1, memory_region(machine, "user1"), 0);
482482
483483   /* initialize keyboard - in cdtv we can use a standard Amiga keyboard*/
484484   amigakbd_init();

Previous 15994 Revisions Next


© 1998-2018 The MESS Team