From a7334deb14858bf6136852a2a9d1cbd53ca3e30a Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Tue, 13 Sep 2011 01:51:48 +0000 Subject: [PATCH] More commands implemented --- src/emu/video/h63484.c | 86 +++++++++++++++++++++++++++++++++++++++-- src/emu/video/h63484.h | 9 ++++- src/emu/video/hd63484.c | 4 +- src/mame/drivers/adp.c | 11 +++--- 4 files changed, 98 insertions(+), 12 deletions(-) diff --git a/src/emu/video/h63484.c b/src/emu/video/h63484.c index 75466232750..d81847dba76 100644 --- a/src/emu/video/h63484.c +++ b/src/emu/video/h63484.c @@ -697,6 +697,26 @@ void h63484_device::command_clr_exec() m_rwp[m_rwp_dn] = offset; } +void h63484_device::command_cpy_exec() +{ + INT16 ax, ay; + UINT32 src_offset,dst_offset; + //int inc_x,inc_y; + + src_offset = ((m_pr[0] & 0xff) << 12) | ((m_pr[1]&0xfff0) >> 4); + ax = m_pr[2]; + ay = m_pr[3]; + + //inc_x = (ax < 0) ? -1 : 1; + //inc_y = (ay < 0) ? -1 : 1; + + dst_offset = m_rwp[m_rwp_dn] & 0xfffff; + + printf("%08x %08x %d %d\n",src_offset,dst_offset,ax,ay); + + // ... +} + void h63484_device::process_fifo() { UINT8 data; @@ -745,6 +765,28 @@ void h63484_device::process_fifo() } break; + case COMMAND_WPTN: + if(m_param_ptr == 1) + { + m_dn = m_pr[0]; // number of param words + + //if(m_dn > 0x10 || m_dn == 0) + // fatalerror("stop!"); + } + + if(m_param_ptr == (1 + m_dn)) + { + int pra = m_cr & 0xf; + int i; + + for(i=0;i> 8); + writebyte(((m_rwp[m_rwp_dn]+1) & 0xfffff),(m_pr[0] & 0x00ff) >> 0); + m_rwp[m_rwp_dn]+=2; + m_rwp[m_rwp_dn]&=0xfffff; + command_end_seq(); + } + case COMMAND_CLR: if (m_param_ptr == 3) { @@ -764,8 +816,25 @@ void h63484_device::process_fifo() } break; + case COMMAND_CPY: + if (m_param_ptr == 4) + { + command_cpy_exec(); + command_end_seq(); + } + break; + + case COMMAND_AMOVE: + if (m_param_ptr == 2) + { + m_cpx = m_pr[0]; + m_cpy = m_pr[1]; + command_end_seq(); + } + break; + default: - fatalerror("stop!\n"); + fatalerror("stop!"); break; } } @@ -798,6 +867,9 @@ void h63484_device::check_video_registers(int offset) m_mwr[(offset & 0x18) >> 3] = vreg_data & 0xfff; // pitch m_mwr_chr[(offset & 0x18) >> 3] = (vreg_data & 0x8000) >> 15; break; + default: + if(LOG) printf("%s -> %04x\n",acrtc_regnames[m_ar/2],vreg_data); + break; } } @@ -841,8 +913,6 @@ WRITE16_MEMBER( h63484_device::address_w ) WRITE16_MEMBER( h63484_device::data_w ) { - if(LOG) printf("%s -> %02x\n",acrtc_regnames[m_ar/2],data); - if(ACCESSING_BITS_8_15) m_vreg[m_ar] = (data & 0xff00) >> 8; @@ -853,6 +923,7 @@ WRITE16_MEMBER( h63484_device::data_w ) { queue_w((data & 0xff00) >> 8); queue_w((data & 0x00ff) >> 0); + if(LOG) printf("%s -> %02x\n",acrtc_regnames[m_ar/2],data); process_fifo(); } else @@ -881,3 +952,12 @@ void h63484_device::device_reset() { // ... } + +//------------------------------------------------- +// update_screen - +//------------------------------------------------- + +void h63484_device::update_screen(bitmap_t *bitmap, const rectangle *cliprect) +{ + // ... +} diff --git a/src/emu/video/h63484.h b/src/emu/video/h63484.h index bcab175858e..3b8446afa61 100644 --- a/src/emu/video/h63484.h +++ b/src/emu/video/h63484.h @@ -81,6 +81,7 @@ private: void command_end_seq(); void command_wpr_exec(); void command_clr_exec(); + void command_cpy_exec(); void process_fifo(); void exec_abort_sequence(); void check_video_registers(int offset); @@ -102,7 +103,7 @@ private: UINT16 m_cr; - UINT16 m_pr[9]; /* parameter byte register */ + UINT16 m_pr[0x10]; /* parameter byte register */ int m_param_ptr; /* parameter pointer */ UINT32 m_rwp[4]; @@ -114,9 +115,15 @@ private: UINT16 m_cl0; UINT16 m_cl1; + INT16 m_cpx; + INT16 m_cpy; + UINT16 m_mwr[4]; UINT8 m_mwr_chr[4]; + UINT16 m_pram[0x10]; + UINT8 m_dn; + const address_space_config m_space_config; }; diff --git a/src/emu/video/hd63484.c b/src/emu/video/hd63484.c index daba6ea0bac..033597987c8 100644 --- a/src/emu/video/hd63484.c +++ b/src/emu/video/hd63484.c @@ -1199,7 +1199,7 @@ static void hd63484_command_w(device_t *device, UINT16 cmd) } } - else if ((hd63484->fifo[0] & 0xf0ff) == 0x6000) /* hd63484->cpy */ + else if ((hd63484->fifo[0] & 0xf0ff) == 0x6000) /* CPY */ { docpy16(device, hd63484->fifo[0], ((hd63484->fifo[1] & 0x00ff) << 12) | ((hd63484->fifo[2] & 0xfff0) >> 4), &hd63484->rwp, hd63484->fifo[3], hd63484->fifo[4]); @@ -1211,7 +1211,7 @@ static void hd63484_command_w(device_t *device, UINT16 cmd) } } - else if ((hd63484->fifo[0] & 0xf0fc) == 0x7000) /* Shd63484->cpy */ + else if ((hd63484->fifo[0] & 0xf0fc) == 0x7000) /* SCPY */ { docpy16(device, hd63484->fifo[0], ((hd63484->fifo[1] & 0x00ff) << 12) | ((hd63484->fifo[2] & 0xfff0) >> 4), &hd63484->rwp, hd63484->fifo[3], hd63484->fifo[4]); diff --git a/src/mame/drivers/adp.c b/src/mame/drivers/adp.c index 1ff19d1d1e0..94cbafa3d6b 100644 --- a/src/mame/drivers/adp.c +++ b/src/mame/drivers/adp.c @@ -448,18 +448,17 @@ static ADDRESS_MAP_START( skattv_mem, AS_PROGRAM, 16 ) AM_RANGE(0x800100, 0x800101) AM_READWRITE(test_r,wh2_w) //related to input AM_RANGE(0x800140, 0x800143) AM_DEVREADWRITE8("aysnd", ay8910_r, ay8910_address_data_w, 0x00ff) //18b too AM_RANGE(0x800180, 0x80019f) AM_DEVREADWRITE8("duart68681", duart68681_r, duart68681_w, 0xff ) -// AM_RANGE(0xffd246, 0xffd247) AM_READ(handler3_r) -// AM_RANGE(0xffd248, 0xffd249) AM_READ(handler3_r) AM_RANGE(0xffc000, 0xffffff) AM_RAM ADDRESS_MAP_END static ADDRESS_MAP_START( quickjac_mem, AS_PROGRAM, 16 ) - AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x400000, 0x40001f) AM_DEVREADWRITE8("duart68681", duart68681_r, duart68681_w, 0xff ) + AM_RANGE(0x000000, 0x01ffff) AM_ROM +// AM_RANGE(0x400000, 0x40001f) ? AM_RANGE(0x800080, 0x800081) AM_DEVREADWRITE_MODERN("h63484", h63484_device, status_r, address_w) // bad AM_RANGE(0x800082, 0x800083) AM_DEVREADWRITE_MODERN("h63484", h63484_device, data_r, data_w) // bad - AM_RANGE(0x800100, 0x8001ff) AM_READ(test_r) //18b too - AM_RANGE(0xffc000, 0xffffff) AM_RAM + AM_RANGE(0x800140, 0x800143) AM_DEVREADWRITE8("aysnd", ay8910_r, ay8910_address_data_w, 0x00ff) //18b too + AM_RANGE(0x800180, 0x80019f) AM_DEVREADWRITE8("duart68681", duart68681_r, duart68681_w, 0xff ) + AM_RANGE(0xff0000, 0xffffff) AM_RAM ADDRESS_MAP_END static ADDRESS_MAP_START( backgamn_mem, AS_PROGRAM, 16 )