src/emu/machine/z80dma.c
| r12642 | r12643 | |
| 66 | 66 | // MACROS |
| 67 | 67 | //************************************************************************** |
| 68 | 68 | |
| 69 | | #define LOG 1 |
| 69 | #define LOG |
| 70 | 70 | #define DMA_LOG 0 |
| 71 | 71 | |
| 72 | 72 | #define REGNUM(_m, _s) (((_m)<<3) + (_s)) |
| r12642 | r12643 | |
| 399 | 399 | m_latch = m_in_iorq_func(m_addressA); |
| 400 | 400 | |
| 401 | 401 | if (DMA_LOG) logerror("Z80DMA '%s' A src: %04x %s -> data: %02x\n", tag(), m_addressA, PORTA_MEMORY ? "mem" : "i/o", m_latch); |
| 402 | | m_addressA += PORTA_FIXED ? 0 : PORTA_INC ? 1 : -1; |
| 403 | 402 | } |
| 404 | 403 | else |
| 405 | 404 | { |
| r12642 | r12643 | |
| 409 | 408 | m_latch = m_in_iorq_func(m_addressB); |
| 410 | 409 | |
| 411 | 410 | if (DMA_LOG) logerror("Z80DMA '%s' B src: %04x %s -> data: %02x\n", tag(), m_addressB, PORTB_MEMORY ? "mem" : "i/o", m_latch); |
| 412 | | m_addressB += PORTB_FIXED ? 0 : PORTB_INC ? 1 : -1; |
| 413 | 411 | } |
| 414 | 412 | break; |
| 415 | 413 | case TM_SEARCH_TRANSFER: |
| r12642 | r12643 | |
| 446 | 444 | m_out_iorq_func(m_addressB, m_latch); |
| 447 | 445 | |
| 448 | 446 | if (DMA_LOG) logerror("Z80DMA '%s' B dst: %04x %s\n", tag(), m_addressB, PORTB_MEMORY ? "mem" : "i/o"); |
| 449 | | m_addressB += PORTB_FIXED ? 0 : PORTB_INC ? 1 : -1; |
| 450 | 447 | } |
| 451 | 448 | else |
| 452 | 449 | { |
| r12642 | r12643 | |
| 456 | 453 | m_out_iorq_func(m_addressA, m_latch); |
| 457 | 454 | |
| 458 | 455 | if (DMA_LOG) logerror("Z80DMA '%s' A dst: %04x %s\n", tag(), m_addressA, PORTA_MEMORY ? "mem" : "i/o"); |
| 459 | | m_addressA += PORTA_FIXED ? 0 : PORTA_INC ? 1 : -1; |
| 460 | 456 | } |
| 461 | | m_count--; |
| 462 | | done = (m_count == 0xFFFF); |
| 457 | |
| 463 | 458 | break; |
| 464 | 459 | |
| 465 | 460 | case TM_SEARCH: |
| r12642 | r12643 | |
| 476 | 471 | } |
| 477 | 472 | } |
| 478 | 473 | |
| 479 | | m_count--; |
| 480 | | done = (m_count == 0xFFFF); //correct? |
| 481 | 474 | } |
| 482 | 475 | break; |
| 483 | 476 | |
| r12642 | r12643 | |
| 489 | 482 | logerror("z80dma_do_operation: invalid mode %d!\n", mode); |
| 490 | 483 | break; |
| 491 | 484 | } |
| 485 | |
| 486 | m_addressA += PORTA_FIXED ? 0 : PORTA_INC ? 1 : -1; |
| 487 | m_addressB += PORTB_FIXED ? 0 : PORTB_INC ? 1 : -1; |
| 488 | |
| 489 | m_count--; |
| 490 | done = (m_count == 0xFFFF); //correct? |
| 491 | |
| 492 | 492 | if (done) |
| 493 | 493 | { |
| 494 | 494 | //FIXME: interrupt ? |
| r12642 | r12643 | |
| 514 | 514 | |
| 515 | 515 | if (m_is_read) |
| 516 | 516 | { |
| 517 | /* TODO: there's a nasty recursion bug with Alpha for Sharp X1 Turbo on the transfers with this function! */ |
| 517 | 518 | do_read(); |
| 518 | 519 | done = 0; |
| 519 | 520 | m_is_read = false; |