From b85a4f86e5b5b5b93495c17406c06cea2413f0bd Mon Sep 17 00:00:00 2001 From: Couriersud Date: Sun, 22 Jun 2008 11:41:50 +0000 Subject: [PATCH] Cleaned up z80dma interface - missing files from last commit) * removed compatibility to old z80dma driver * now uses std. callbacks (READ8_HANDLER, WRITE8_HANDLER) * updated mario and dkong3 accordingly --- src/emu/cpu/x86emit.h | 2 +- src/emu/machine/z80dma.c | 107 +++++++++++++-------------------------- src/emu/machine/z80dma.h | 41 ++++----------- 3 files changed, 47 insertions(+), 103 deletions(-) diff --git a/src/emu/cpu/x86emit.h b/src/emu/cpu/x86emit.h index a9cae927839..45cd451b9ca 100644 --- a/src/emu/cpu/x86emit.h +++ b/src/emu/cpu/x86emit.h @@ -1612,7 +1612,7 @@ INLINE void resolve_link(x86code **destptr, const emit_link *linkinfo) } else { - assert((INT32)delta == delta); + //assert((INT32)delta == delta); ((INT32 *)linkinfo->target)[-1] = (INT32)delta; } } diff --git a/src/emu/machine/z80dma.c b/src/emu/machine/z80dma.c index 36957eba6bb..8d80380735c 100644 --- a/src/emu/machine/z80dma.c +++ b/src/emu/machine/z80dma.c @@ -21,7 +21,6 @@ **********************************************************************/ #include "driver.h" -#include "deprecat.h" #include "memconv.h" #include "z80dma.h" @@ -86,6 +85,7 @@ #define READY_ACTIVE_HIGH(_c) ((WR5(_c)>>3) & 0x01) +typedef struct _z80dma_t z80dma_t; struct _z80dma_t { running_machine *machine; @@ -111,10 +111,17 @@ struct _z80dma_t }; static TIMER_CALLBACK( z80dma_timerproc ); -static void z80dma_update_status(z80dma_t *z80dma); +static void z80dma_update_status(running_machine *machine, z80dma_t *z80dma); /* ----------------------------------------------------------------------- */ +INLINE z80dma_t *get_safe_token(const device_config *device) { + assert( device != NULL ); + assert( device->token != NULL ); + assert( device->type == Z80DMA ); + return ( z80dma_t * ) device->token; +} + static void z80dma_do_read(z80dma_t *cntx) { UINT8 mode; @@ -125,17 +132,17 @@ static void z80dma_do_read(z80dma_t *cntx) if (PORTA_IS_SOURCE(cntx)) { if (PORTA_MEMORY(cntx)) - cntx->latch = cntx->intf->memory_read(cntx->machine, cntx, cntx->addressA); + cntx->latch = cntx->intf->memory_read(cntx->machine, cntx->addressA); else - cntx->latch = cntx->intf->portA_read(cntx->machine, cntx, cntx->addressA); + cntx->latch = cntx->intf->portA_read(cntx->machine, cntx->addressA); cntx->addressA += PORTA_STEP(cntx); } else { if (PORTB_MEMORY(cntx)) - cntx->latch = cntx->intf->memory_read(cntx->machine, cntx, cntx->addressB); + cntx->latch = cntx->intf->memory_read(cntx->machine, cntx->addressB); else - cntx->latch = cntx->intf->portB_read(cntx->machine, cntx, cntx->addressB); + cntx->latch = cntx->intf->portB_read(cntx->machine, cntx->addressB); cntx->addressB += PORTB_STEP(cntx); } break; @@ -161,17 +168,17 @@ static int z80dma_do_write(z80dma_t *cntx) if (PORTA_IS_SOURCE(cntx)) { if (PORTB_MEMORY(cntx)) - cntx->intf->memory_write(cntx->machine, cntx, cntx->addressB, cntx->latch); + cntx->intf->memory_write(cntx->machine, cntx->addressB, cntx->latch); else - cntx->intf->portB_write(cntx->machine, cntx, cntx->addressB, cntx->latch); + cntx->intf->portB_write(cntx->machine, cntx->addressB, cntx->latch); cntx->addressB += PORTB_STEP(cntx); } else { if (PORTA_MEMORY(cntx)) - cntx->intf->memory_write(cntx->machine, cntx, cntx->addressA, cntx->latch); + cntx->intf->memory_write(cntx->machine, cntx->addressA, cntx->latch); else - cntx->intf->portB_write(cntx->machine, cntx, cntx->addressA, cntx->latch); + cntx->intf->portB_write(cntx->machine, cntx->addressA, cntx->latch); cntx->addressA += PORTA_STEP(cntx); } cntx->count--; @@ -214,11 +221,11 @@ static TIMER_CALLBACK( z80dma_timerproc ) if (done) { cntx->dma_enabled = 0; //FIXME: Correct? - z80dma_update_status(cntx); + z80dma_update_status(machine, cntx); } } -static void z80dma_update_status(z80dma_t *z80dma) +static void z80dma_update_status(running_machine *machine, z80dma_t *z80dma) { UINT16 pending_transfer; attotime next; @@ -247,24 +254,23 @@ static void z80dma_update_status(z80dma_t *z80dma) if (z80dma->intf && z80dma->intf->cpunum >= 0) { //FIXME: Synchronization is done by BUSREQ! - cpunum_set_input_line(Machine, z80dma->intf->cpunum, INPUT_LINE_HALT, + cpunum_set_input_line(machine, z80dma->intf->cpunum, INPUT_LINE_HALT, pending_transfer ? ASSERT_LINE : CLEAR_LINE); } } /* ----------------------------------------------------------------------- */ -UINT8 z80dma_read(z80dma_t *z80dma) +READ8_DEVICE_HANDLER( z80dma_r ) { fatalerror("z80dma_read: not implemented"); return 0; } - -void z80dma_write(z80dma_t *z80dma, UINT8 data) +WRITE8_DEVICE_HANDLER( z80dma_w ) { - z80dma_t *cntx = z80dma; + z80dma_t *cntx = get_safe_token(device); if (cntx->num_follow == 0) { @@ -340,11 +346,11 @@ void z80dma_write(z80dma_t *z80dma, UINT8 data) break; case 0x83: /* Disable dma */ cntx->dma_enabled = 0; - z80dma_rdy_write(cntx, cntx->rdy); + z80dma_rdy_w(device, 0, cntx->rdy); break; case 0x87: /* Enable dma */ cntx->dma_enabled = 1; - z80dma_rdy_write(cntx, cntx->rdy); + z80dma_rdy_w(device, 0, cntx->rdy); break; case 0xBB: cntx->regs_follow[cntx->num_follow++] = GET_REGNUM(cntx, READ_MASK(cntx)); @@ -377,7 +383,6 @@ void z80dma_write(z80dma_t *z80dma, UINT8 data) } - static TIMER_CALLBACK( z80dma_rdy_write_callback ) { int state = param & 0x01; @@ -387,17 +392,19 @@ static TIMER_CALLBACK( z80dma_rdy_write_callback ) cntx->rdy = 1 ^ state ^ READY_ACTIVE_HIGH(cntx); cntx->status = (cntx->status & 0xFD) | (cntx->rdy<<1); - z80dma_update_status(cntx); + z80dma_update_status(machine, cntx); } - -void z80dma_rdy_write(z80dma_t *z80dma, int state) +WRITE8_DEVICE_HANDLER( z80dma_rdy_w) { + z80dma_t *z80dma = get_safe_token(device); int param; - param = (state ? 1 : 0); - LOG(("RDY: %d Active High: %d\n", state, READY_ACTIVE_HIGH(z80dma))); + assert( offset == 0); + + param = (data ? 1 : 0); + LOG(("RDY: %d Active High: %d\n", data, READY_ACTIVE_HIGH(z80dma))); timer_call_after_resynch(z80dma, param, z80dma_rdy_write_callback); } @@ -407,7 +414,7 @@ void z80dma_rdy_write(z80dma_t *z80dma, int state) static DEVICE_START( z80dma ) { - z80dma_t *z80dma = device->token; + z80dma_t *z80dma = get_safe_token(device); char unique_tag[30]; /* validate arguments */ @@ -440,15 +447,16 @@ static DEVICE_START( z80dma ) state_save_register_item(unique_tag, 0, z80dma->latch); } + static DEVICE_RESET( z80dma ) { - z80dma_t *z80dma = device->token; + z80dma_t *z80dma = get_safe_token(device); z80dma->status = 0; z80dma->rdy = 0; z80dma->num_follow = 0; z80dma->dma_enabled = 0; - z80dma_update_status(z80dma); + z80dma_update_status(device->machine, z80dma); } @@ -485,46 +493,3 @@ DEVICE_GET_INFO( z80dma ) } } -/******************* Standard 8-bit CPU interfaces *******************/ - -READ8_HANDLER( z80dma_0_r ) -{ - z80dma_t *z80dma = devtag_get_token(machine, Z80DMA, Z80DMA_DEV_0_TAG); - - return z80dma_read(z80dma); -} - -READ8_HANDLER( z80dma_1_r ) -{ - z80dma_t *z80dma = devtag_get_token(machine, Z80DMA, Z80DMA_DEV_1_TAG); - - return z80dma_read(z80dma); -} - -WRITE8_HANDLER( z80dma_0_w ) -{ - z80dma_t *z80dma = devtag_get_token(machine, Z80DMA, Z80DMA_DEV_0_TAG); - - z80dma_write(z80dma, data); -} - -WRITE8_HANDLER( z80dma_1_w ) -{ - z80dma_t *z80dma = devtag_get_token(machine, Z80DMA, Z80DMA_DEV_1_TAG); - - z80dma_write(z80dma, data); -} - -WRITE8_HANDLER( z80dma_0_rdy_w ) -{ - z80dma_t *z80dma = devtag_get_token(machine, Z80DMA, Z80DMA_DEV_0_TAG); - - z80dma_rdy_write(z80dma, data); -} - -WRITE8_HANDLER( z80dma_1_rdy_w ) -{ - z80dma_t *z80dma = devtag_get_token(machine, Z80DMA, Z80DMA_DEV_1_TAG); - - z80dma_rdy_write(z80dma, data); -} diff --git a/src/emu/machine/z80dma.h b/src/emu/machine/z80dma.h index aaa151c4444..6f000187a14 100644 --- a/src/emu/machine/z80dma.h +++ b/src/emu/machine/z80dma.h @@ -7,17 +7,9 @@ #ifndef Z80DMA_H #define Z80DMA_H -typedef struct _z80dma_t z80dma_t; -typedef struct _z80dma_interface z80dma_interface; - #define Z80DMA DEVICE_GET_INFO_NAME(z80dma) -typedef UINT8 (*z80dma_read_func)(running_machine *machine, z80dma_t *z80dma, offs_t offset); -#define Z80DMA_READ(name) UINT8 name(running_machine *machine, z80dma_t *z80dma, offs_t offset) - -typedef void (*z80dma_write_func)(running_machine *machine, z80dma_t *z80dma, offs_t offset, UINT8 data); -#define Z80DMA_WRITE(name) void name(running_machine *machine, z80dma_t *z80dma, offs_t offset, UINT8 data) - +typedef struct _z80dma_interface z80dma_interface; struct _z80dma_interface { /* CPU to halt when DMA is active */ @@ -27,14 +19,14 @@ struct _z80dma_interface int clockhz; /* accessors to main memory */ - z80dma_read_func memory_read; - z80dma_write_func memory_write; + read8_machine_func memory_read; + write8_machine_func memory_write; /* port accesors */ - z80dma_read_func portA_read; - z80dma_write_func portA_write; - z80dma_read_func portB_read; - z80dma_write_func portB_write; + read8_machine_func portA_read; + write8_machine_func portA_write; + read8_machine_func portB_read; + write8_machine_func portB_write; /* interrupt callback - not implemented */ /* void (*irqcb)(int state); */ @@ -43,22 +35,9 @@ struct _z80dma_interface /* device interface */ DEVICE_GET_INFO( z80dma ); -void z80dma_rdy_write( z80dma_t *z80dma, int state); -UINT8 z80dma_read( z80dma_t *z80dma); -void z80dma_write( z80dma_t *z80dma, UINT8 data); +READ8_DEVICE_HANDLER( z80dma_r ); +WRITE8_DEVICE_HANDLER( z80dma_w); -/******************* Standard 8-bit CPU interfaces *******************/ - -#define Z80DMA_DEV_0_TAG "z80dma0" - -READ8_HANDLER(z80dma_0_r); -WRITE8_HANDLER(z80dma_0_rdy_w); -WRITE8_HANDLER(z80dma_0_w); - -#define Z80DMA_DEV_1_TAG "z80dma1" - -READ8_HANDLER(z80dma_1_r); -WRITE8_HANDLER(z80dma_1_w); -WRITE8_HANDLER(z80dma_1_rdy_w); +WRITE8_DEVICE_HANDLER( z80dma_rdy_w ); #endif /* Z80_H */