src/mess/drivers/gp32.c
| r6551 | r6552 | |
| 344 | 344 | static void s3c240x_dma_start( running_machine *machine, int dma) |
| 345 | 345 | { |
| 346 | 346 | 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; |
| 348 | 348 | int i, inc_src, inc_dst; |
| 349 | 349 | reg = dma << 3; |
| 350 | 350 | inc_src = (s3c240x_dma_regs[reg+0] >> 29) & 1; |
| r6551 | r6552 | |
| 352 | 352 | inc_dst = (s3c240x_dma_regs[reg+1] >> 29) & 1; |
| 353 | 353 | addr_dst = s3c240x_dma_regs[reg+1] & 0x1FFFFFFF; |
| 354 | 354 | 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; |
| 356 | 356 | 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++) |
| 361 | 360 | { |
| 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); |
| 365 | 369 | } |
| 366 | 370 | } |
| 367 | 371 | |