Previous 199869 Revisions Next

r44641 Wednesday 3rd February, 2016 at 04:08:33 UTC by Brandon Munger
r9751: Fix offset switching and enable write mask logging
[src/mame/drivers]r9751.cpp

trunk/src/mame/drivers/r9751.cpp
r253152r253153
156156READ32_MEMBER( r9751_state::r9751_mmio_5ff_r )
157157{
158158   UINT32 data;
159   UINT32 address = offset * 4 + 0x5FF00000;
160159
161   switch(address)
160   switch(offset << 2)
162161   {
163162      /* PDC HDD region (0x24, device 9) */
164      case 0x5FF00824: /* HDD Command result code */
163      case 0x0824: /* HDD Command result code */
165164         return 0x10;
166      case 0x5FF03024: /* HDD SCSI command completed successfully */
165      case 0x3024: /* HDD SCSI command completed successfully */
167166         data = 0x1;
168         if(TRACE_HDC) logerror("SCSI HDD command completion status - Read: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address);
167         if(TRACE_HDC) logerror("SCSI HDD command completion status - Read: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000);
169168         return data;
170169      /* SMIOC region (0x98, device 26) */
171      case 0x5FF00898: /* Serial status or DMA status */
170      case 0x0898: /* Serial status or DMA status */
172171         return 0x40;
173172      /* PDC FDD region (0xB0, device 44 */
174      case 0x5FF008B0: /* FDD Command result code */
173      case 0x08B0: /* FDD Command result code */
175174         return 0x10;
176      case 0x5FF010B0: /* Clear 5FF030B0 ?? */
175      case 0x10B0: /* Clear 5FF030B0 ?? */
177176         if(TRACE_FDC) logerror("--- FDD 0x5FF010B0 READ (0)\n");
178177         return 0;
179      case 0x5FF030B0: /* FDD command completion status */
178      case 0x30B0: /* FDD command completion status */
180179         data = (m_pdc->reg_p5 << 8) + m_pdc->reg_p4;
181         if(TRACE_FDC) logerror("--- SCSI FDD command completion status - Read: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address);
180         if(TRACE_FDC) logerror("--- SCSI FDD command completion status - Read: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000);
182181         return data;
183182      default:
184         if(TRACE_FDC || TRACE_HDC || TRACE_SMIOC) logerror("Instruction: %08x READ MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), address, 0, mem_mask);
183         if(TRACE_FDC || TRACE_HDC || TRACE_SMIOC) logerror("Instruction: %08x READ MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000, 0, mem_mask);
185184         return 0;
186185   }
187186}
r253152r253153
189188WRITE32_MEMBER( r9751_state::r9751_mmio_5ff_w )
190189{
191190   UINT8 data_b0, data_b1;
192   UINT32 address = offset * 4 + 0x5FF00000;
191   /* Unknown mask */
192   if (mem_mask != 0xFFFFFFFF)
193      logerror("Mask found: %08X Register: %08X PC: %08X\n", mem_mask, offset << 2 | 0x5FF00000, space.machine().firstcpu->pc());
193194
194   switch(address)
195   switch(offset << 2)
195196   {
196197      /* PDC HDD region (0x24, device 9 */
197      case 0x5FF00224: /* HDD SCSI read command */
198         if(TRACE_HDC) logerror("@@@ HDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address);
198      case 0x0224: /* HDD SCSI read command */
199         if(TRACE_HDC) logerror("@@@ HDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000);
199200         break;
200      case 0x5FF08024: /* HDD SCSI read command */
201         if(TRACE_HDC) logerror("@@@ HDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address);
201      case 0x8024: /* HDD SCSI read command */
202         if(TRACE_HDC) logerror("@@@ HDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000);
202203         break;
203      case 0x5FF0C024: /* HDD SCSI read command */
204         if(TRACE_HDC) logerror("@@@ HDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address);
204      case 0xC024: /* HDD SCSI read command */
205         if(TRACE_HDC) logerror("@@@ HDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000);
205206         break;
206207      /* SMIOC region (0x98, device 26) */
207      case 0x5FF04098: /* Serial DMA Command */
208      case 0x4098: /* Serial DMA Command */
208209         switch(data)
209210         {
210211            case 0x4100: /* Send byte to serial */
r253152r253153
215216               if(TRACE_SMIOC) logerror("Uknown serial DMA command: %X\n", data);
216217         }
217218         break;
218      case 0x5FF0C098: /* Serial DMA output address */
219      case 0xC098: /* Serial DMA output address */
219220         //smioc_out_addr = data * 2;
220221         smioc_out_addr = (smioc_dma_bank & 0x7FFFF800) | ((data&0x3FF)<<1);
221222         if(TRACE_SMIOC) logerror("Serial output address: %08X PC: %08X\n", smioc_out_addr, space.machine().firstcpu->pc());
222223         break;
223224      /* PDC FDD region (0xB0, device 44 */
224      case 0x5FF001B0: /* FDD SCSI read command */
225         if(TRACE_FDC) logerror("--- FDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address);
225      case 0x01B0: /* FDD SCSI read command */
226         if(TRACE_FDC) logerror("--- FDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000);
226227         break;
227      case 0x5FF002B0: /* FDD SCSI read command */
228         if(TRACE_FDC) logerror("--- FDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address);
228      case 0x02B0: /* FDD SCSI read command */
229         if(TRACE_FDC) logerror("--- FDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000);
229230         break;
230      case 0x5FF004B0: /* FDD RESET PDC */
231      case 0x04B0: /* FDD RESET PDC */
231232         if(TRACE_FDC) logerror("PDC RESET, PC: %08X\n", space.machine().firstcpu->pc());
232233         m_pdc->reset();
233234         break;
234      case 0x5FF008B0: /* FDD SCSI read command */
235         if(TRACE_FDC) logerror("--- FDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address);
235      case 0x08B0: /* FDD SCSI read command */
236         if(TRACE_FDC) logerror("--- FDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000);
236237         break;
237      case 0x5FF041B0: /* Unknown - Probably old style commands */
238         if(TRACE_FDC) logerror("--- FDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address);
238      case 0x41B0: /* Unknown - Probably old style commands */
239         if(TRACE_FDC) logerror("--- FDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000);
239240
240241         /* Clear FDD Command completion status 0x5FF030B0 (PDC 0x4, 0x5) */
241242         m_pdc->reg_p4 = 0;
r253152r253153
248249         m_pdc->reg_p38 |= 0x2; /* Set bit 1 on port 38 register, PDC polls this port looking for a command */
249250         if(TRACE_FDC) logerror("--- FDD Old Command: %02X and %02X\n", data_b0, data_b1);
250251         break;
251      case 0x5FF080B0: /* fdd_dest_address register */
252      case 0x80B0: /* fdd_dest_address register */
252253         fdd_dest_address = data << 1;
253254         if(TRACE_FDC) logerror("--- FDD destination address: %08X\n", fdd_dest_address);
254255         data_b0 = data & 0xFF;
r253152r253153
256257         m_pdc->reg_p6 = data_b0;
257258         m_pdc->reg_p7 = data_b1;
258259         break;
259      case 0x5FF0C0B0:
260      case 0x5FF0C1B0: /* FDD command address register */
260      case 0xC0B0:
261      case 0xC1B0: /* FDD command address register */
261262         UINT32 fdd_scsi_command;
262263         UINT32 fdd_scsi_command2;
263264         unsigned char c_fdd_scsi_command[8]; // Array for SCSI command
r253152r253153
296297         break;
297298
298299      default:
299         if(TRACE_FDC || TRACE_HDC || TRACE_SMIOC) logerror("Instruction: %08x WRITE MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), address, data, mem_mask);
300         if(TRACE_FDC || TRACE_HDC || TRACE_SMIOC) logerror("Instruction: %08x WRITE MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000, data, mem_mask);
300301   }
301302}
302303
r253152r253153
306307READ32_MEMBER( r9751_state::r9751_mmio_ff01_r )
307308{
308309   //UINT32 data;
309   UINT32 address = offset * 4 + 0xFF010000;
310310
311   switch(address)
311   switch(offset << 2)
312312   {
313313      default:
314314         //return data;
r253152r253153
318318
319319WRITE32_MEMBER( r9751_state::r9751_mmio_ff01_w )
320320{
321   UINT32 address = offset * 4 + 0xFF010000;
321   /* Unknown mask */
322   if (mem_mask != 0xFFFFFFFF)
323      logerror("Mask found: %08X Register: %08X PC: %08X\n", mem_mask, offset << 2 | 0xFF010000, space.machine().firstcpu->pc());
322324
323   switch(address)
325   switch(offset << 2)
324326   {
325      case 0xFF01000C: /* FDD DMA Offset */
327      case 0x000C: /* FDD DMA Offset */
326328         fdd_dma_bank = data;
327329         return;
328      case 0xFF010010: /* SMIOC DMA Offset */
330      case 0x0010: /* SMIOC DMA Offset */
329331         smioc_dma_bank = data;
330332         return;
331333      default:
r253152r253153
336338READ32_MEMBER( r9751_state::r9751_mmio_ff05_r )
337339{
338340   UINT32 data;
339   UINT32 address = offset * 4 + 0xFF050000;
340341
341   switch(address)
342   switch(offset << 2)
342343   {
343      case 0xFF050004:
344      case 0x0004:
344345         return reg_ff050004;
345      case 0xFF050300:
346      case 0x0300:
346347         return 0x1B | (1<<0x14);
347      case 0xFF050320: /* Some type of counter */
348      case 0x0320: /* Some type of counter */
348349         return (machine().time() - timer_32khz_last).as_ticks(32768) & 0xFFFF;
349      case 0xFF050584:
350      case 0x0584:
350351         return 0;
351      case 0xFF050610:
352      case 0x0610:
352353         return 0xabacabac;
353      case 0xFF060014:
354      case 0x0014:
354355         return 0x80;
355356      default:
356357         data = 0;
357         if(TRACE_CPU_REG) logerror("Instruction: %08x READ MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), address, data, mem_mask);
358         if(TRACE_CPU_REG) logerror("Instruction: %08x READ MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), offset << 2 | 0xFF050000, data, mem_mask);
358359         return data;
359360   }
360361}
361362
362363WRITE32_MEMBER( r9751_state::r9751_mmio_ff05_w )
363364{
364   UINT32 address = offset * 4 + 0xFF050000;
365   /* Unknown mask */
366   if (mem_mask != 0xFFFFFFFF)
367      logerror("Mask found: %08X Register: %08X PC: %08X\n", mem_mask, offset << 2 | 0xFF050000, space.machine().firstcpu->pc());
365368
366   switch(address)
369   switch(offset << 2)
367370   {
368      case 0xFF050004:
371      case 0x0004:
369372         reg_ff050004 = data;
370373         return;
371      case 0xFF05000C: /* CPU LED hex display indicator */
374      case 0x000C: /* CPU LED hex display indicator */
372375         if(TRACE_LED) logerror("\n*** LED: %02x, Instruction: %08x ***\n\n", data, space.machine().firstcpu->pc());
373376         return;
374      case 0xFF050320:
377      case 0x0320:
375378         timer_32khz_last = machine().time();
376379      default:
377         if(TRACE_CPU_REG) logerror("Instruction: %08x WRITE MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), address, data, mem_mask);
380         if(TRACE_CPU_REG) logerror("Instruction: %08x WRITE MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), offset << 2 | 0xFF050000, data, mem_mask);
378381         return;
379382   }
380383}
381384
382385READ32_MEMBER( r9751_state::r9751_mmio_fff8_r )
383386{
384      UINT32 data;
385      UINT32 address = offset * 4 + 0xFFF80000;
387   UINT32 data;
386388
387   switch(address)
389   switch(offset << 2)
388390   {
389      case 0xFFF80040:
391      case 0x0040:
390392         return reg_fff80040;
391393      default:
392394         data = 0;
393         if(TRACE_CPU_REG) logerror("Instruction: %08x READ MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), address, data, mem_mask);
395         if(TRACE_CPU_REG) logerror("Instruction: %08x READ MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), offset << 2 | 0xFFF80000, data, mem_mask);
394396         return data;
395397   }
396398}
397399
398400WRITE32_MEMBER( r9751_state::r9751_mmio_fff8_w )
399401{
400      UINT32 address = offset * 4 + 0xFFF80000;
402   /* Unknown mask */
403   if (mem_mask != 0xFFFFFFFF)
404      logerror("Mask found: %08X Register: %08X PC: %08X\n", mem_mask, offset << 2 | 0xFFF80000, space.machine().firstcpu->pc());
401405
402   switch(address)
406   switch(offset << 2)
403407   {
404      case 0xFFF80040:
408      case 0x0040:
405409         reg_fff80040 = data;
406410         return;
407411      default:
408         if(TRACE_CPU_REG) logerror("Instruction: %08x WRITE MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), address, data, mem_mask);
412         if(TRACE_CPU_REG) logerror("Instruction: %08x WRITE MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), offset << 2 | 0xFFF80000, data, mem_mask);
409413   }
410414}
411415


Previous 199869 Revisions Next


© 1997-2024 The MAME Team