Previous 15994 Revisions Next

r6552 Sunday 6th December, 2009 at 10:58:28 UTC by Tim Schuerewegen
[GP32] Added DMA byte/word/dword transfers.
[src/mess/drivers]gp32.c

src/mess/drivers/gp32.c
r6551r6552
344344static void s3c240x_dma_start( running_machine *machine, int dma)
345345{
346346   const address_space *space = cpu_get_address_space( cputag_get_cpu( machine, "maincpu"), ADDRESS_SPACE_PROGRAM);
347   UINT32 size, addr_src, addr_dst, dsz, tsz, tc, reg;
347   UINT32 addr_src, addr_dst, dsz, tsz, tc, reg;
348348   int i, inc_src, inc_dst;
349349   reg = dma << 3;
350350   inc_src = (s3c240x_dma_regs[reg+0] >> 29) & 1;
r6551r6552
352352   inc_dst = (s3c240x_dma_regs[reg+1] >> 29) & 1;
353353   addr_dst = s3c240x_dma_regs[reg+1] & 0x1FFFFFFF;
354354   tsz = (s3c240x_dma_regs[reg+2] >> 27) & 1;
355   dsz = (s3c240x_dma_regs[reg+2] >> 20) & 2;
355   dsz = (s3c240x_dma_regs[reg+2] >> 20) & 3;
356356   tc = (s3c240x_dma_regs[reg+2] >> 0) & 0x000FFFFF;
357   size = tc << dsz;
358//   logerror( "DMA %d - addr_src %08X inc_src %d addr_dst %08X inc_dst %d tsz %d dsz %d tc %d size %d\n", dma, addr_src, inc_src, addr_dst, inc_dst, tsz, dsz, tc, size);
359//   logerror( "DMA %d - copy 0x%08X bytes from 0x%08X (%d) to 0x%08X (%d)\n", dma, size, addr_src, inc_src, addr_dst, inc_dst);
360   for (i=0;i<size;i++)
357//   logerror( "DMA %d - addr_src %08X inc_src %d addr_dst %08X inc_dst %d tsz %d dsz %d tc %d\n", dma, addr_src, inc_src, addr_dst, inc_dst, tsz, dsz, tc);
358//   logerror( "DMA %d - copy %08X bytes from %08X (%s) to %08X (%s)\n", dma, tc << dsz, addr_src, inc_src ? "fix" : "inc", addr_dst, inc_dst ? "fix" : "inc");
359   for (i=0;i<tc;i++)
361360   {
362      memory_write_byte( space, addr_dst, memory_read_byte( space, addr_src));
363      if (!inc_src) addr_src++;
364      if (!inc_dst) addr_dst++;
361      switch (dsz)
362      {
363         case 0 : memory_write_byte( space, addr_dst, memory_read_byte( space, addr_src)); break;
364         case 1 : memory_write_word( space, addr_dst, memory_read_word( space, addr_src)); break;
365         case 2 : memory_write_dword( space, addr_dst, memory_read_dword( space, addr_src)); break;
366      }
367      if (!inc_src) addr_src += (1 << dsz);
368      if (!inc_dst) addr_dst += (1 << dsz);
365369   }
366370}
367371

Previous 15994 Revisions Next


© 1998-2018 The MESS Team