src/emu/machine/z80dma.c
| r3594 | r3595 | |
| 12 | 12 | - Only memory to memory is tested! |
| 13 | 13 | |
| 14 | 14 | TODO: |
| 15 | - refactor according to new memory system |
| 16 | - implement interrupt support (not used in dkong3 and mario) |
| 15 | 17 | - implement missing features |
| 16 | | - implement interrupt support (not used in dkong3 and mario) |
| 17 | 18 | - implement more asserts |
| 18 | 19 | - implement a INPUT_LINE_BUSREQ for Z80. As a workaround, |
| 19 | 20 | HALT is used. This implies burst mode. |
| r3594 | r3595 | |
| 23 | 24 | #include "driver.h" |
| 24 | 25 | #include "memconv.h" |
| 25 | 26 | #include "z80dma.h" |
| 27 | #include "cpu/z80/z80daisy.h" |
| 26 | 28 | |
| 27 | 29 | #define VERBOSE 0 |
| 28 | 30 | |
| r3594 | r3595 | |
| 409 | 411 | |
| 410 | 412 | param = (data ? 1 : 0); |
| 411 | 413 | LOG(("RDY: %d Active High: %d\n", data, READY_ACTIVE_HIGH(z80dma))); |
| 412 | | timer_call_after_resynch((void *) device, param, z80dma_rdy_write_callback); |
| 414 | timer_call_after_resynch(device->machine, (void *) device, param, z80dma_rdy_write_callback); |
| 413 | 415 | } |
| 414 | 416 | |
| 415 | | /* ----------------------------------------------------------------------- */ |
| 416 | 417 | |
| 417 | | /* device interface */ |
| 418 | /*************************************************************************** |
| 419 | DAISY CHAIN INTERFACE |
| 420 | ***************************************************************************/ |
| 418 | 421 | |
| 422 | static int z80dma_irq_state(const device_config *device) |
| 423 | { |
| 424 | int state = 0; |
| 425 | |
| 426 | return state; |
| 427 | } |
| 428 | |
| 429 | static int z80dma_irq_ack(const device_config *device) |
| 430 | { |
| 431 | return 0; |
| 432 | } |
| 433 | |
| 434 | static void z80dma_irq_reti(const device_config *device) |
| 435 | { |
| 436 | } |
| 437 | |
| 438 | /*************************************************************************** |
| 439 | DEVICE INTERFACE |
| 440 | ***************************************************************************/ |
| 441 | |
| 419 | 442 | static DEVICE_START( z80dma ) |
| 420 | 443 | { |
| 421 | 444 | z80dma_t *z80dma = get_safe_token(device); |
| r3594 | r3595 | |
| 426 | 449 | |
| 427 | 450 | z80dma->intf = device->static_config; |
| 428 | 451 | |
| 429 | | z80dma->timer = timer_alloc(z80dma_timerproc, (void *) device); |
| 452 | z80dma->timer = timer_alloc(device->machine, z80dma_timerproc, (void *) device); |
| 430 | 453 | |
| 431 | 454 | state_save_register_item_array("z80dma", device->tag, 0, z80dma->regs); |
| 432 | 455 | state_save_register_item_array("z80dma", device->tag, 0, z80dma->regs_follow); |
| r3594 | r3595 | |
| 483 | 506 | case DEVINFO_FCT_START: info->start = DEVICE_START_NAME(z80dma);break; |
| 484 | 507 | case DEVINFO_FCT_STOP: /* Nothing */ break; |
| 485 | 508 | case DEVINFO_FCT_RESET: info->reset = DEVICE_RESET_NAME(z80dma);break; |
| 509 | case DEVINFO_FCT_IRQ_STATE: info->f = (genf *)z80dma_irq_state; break; |
| 510 | case DEVINFO_FCT_IRQ_ACK: info->f = (genf *)z80dma_irq_ack; break; |
| 511 | case DEVINFO_FCT_IRQ_RETI: info->f = (genf *)z80dma_irq_reti; break; |
| 486 | 512 | |
| 487 | 513 | /* --- the following bits of info are returned as NULL-terminated strings --- */ |
| 488 | 514 | case DEVINFO_STR_NAME: info->s = "Z80DMA"; break; |