More commands implemented

This commit is contained in:
Angelo Salese 2011-09-13 01:51:48 +00:00
parent e25be75dd5
commit a7334deb14
4 changed files with 98 additions and 12 deletions

View File

@ -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<m_dn;i++)
m_pram[(i + pra) & 0xf] = m_pr[1 + i];
command_end_seq();
}
break;
case COMMAND_RD:
if (m_param_ptr == 0)
{
@ -756,6 +798,16 @@ void h63484_device::process_fifo()
}
break;
case COMMAND_WT:
if (m_param_ptr == 1)
{
writebyte(((m_rwp[m_rwp_dn]+0) & 0xfffff),(m_pr[0] & 0xff00) >> 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)
{
// ...
}

View File

@ -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;
};

View File

@ -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]);

View File

@ -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 )