mirror of
https://github.com/holub/mame
synced 2025-05-10 08:12:13 +03:00
validity.c better explaination
This commit is contained in:
parent
f3e235d1e2
commit
0b5d8e2e9b
@ -584,7 +584,7 @@ static bool validate_roms(driver_enumerator &drivlist, region_array *rgninfo, ga
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
mame_printf_error("Device %s is not listed in device list\n", source->shortname());
|
||||
mame_printf_error("Device %s is not listed in device list (mame_dev.lst / mess_dev.lst)\n", source->shortname());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,15 +19,17 @@ struct _h63484_state
|
||||
h63484_display_pixels_func display_func;
|
||||
screen_device *screen; /* screen */
|
||||
|
||||
UINT8 vram[0x40000];
|
||||
UINT8 *vram;
|
||||
UINT8 ar;
|
||||
UINT8 vreg[0x100];
|
||||
UINT8 sr;
|
||||
|
||||
UINT8 fifo[16]; /* FIFO data queue */
|
||||
int fifo_flag[16]; /* FIFO flag queue */
|
||||
int fifo_ptr; /* FIFO pointer */
|
||||
int fifo_dir; /* FIFO direction */
|
||||
UINT8 fifo[16]; /* FIFO W data queue */
|
||||
int fifo_ptr; /* FIFO W pointer */
|
||||
|
||||
UINT8 fifo_r[16]; /* FIFO R data queue */
|
||||
int fifo_r_ptr; /* FIFO R pointer */
|
||||
|
||||
|
||||
UINT16 cr;
|
||||
UINT16 pr[9]; /* parameter byte register */
|
||||
@ -35,6 +37,8 @@ struct _h63484_state
|
||||
|
||||
UINT32 rwp;
|
||||
UINT8 rwp_dn;
|
||||
|
||||
address_space *space; /* memory space */
|
||||
};
|
||||
|
||||
enum
|
||||
@ -344,15 +348,12 @@ INLINE const h63484_interface *get_interface( device_t *device )
|
||||
}
|
||||
|
||||
|
||||
INLINE void fifo_clear(h63484_state *h63484)
|
||||
INLINE void fifo_w_clear(h63484_state *h63484)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
{
|
||||
h63484->fifo[i] = 0;
|
||||
h63484->fifo_flag[i] = FIFO_EMPTY;
|
||||
}
|
||||
|
||||
h63484->fifo_ptr = -1;
|
||||
|
||||
@ -360,41 +361,17 @@ INLINE void fifo_clear(h63484_state *h63484)
|
||||
h63484->sr |= H63484_SR_WFE;
|
||||
}
|
||||
|
||||
INLINE int fifo_param_count(h63484_state *h63484)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
{
|
||||
if (h63484->fifo_flag[i] != FIFO_PARAMETER) break;
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
INLINE void fifo_set_direction(h63484_state *h63484, int dir)
|
||||
{
|
||||
if (h63484->fifo_dir != dir)
|
||||
{
|
||||
fifo_clear(h63484);
|
||||
}
|
||||
|
||||
h63484->fifo_dir = dir;
|
||||
}
|
||||
|
||||
INLINE void queue(h63484_state *h63484, UINT8 data, int flag)
|
||||
INLINE void queue_w(h63484_state *h63484, UINT8 data)
|
||||
{
|
||||
if (h63484->fifo_ptr < 15)
|
||||
{
|
||||
h63484->fifo_ptr++;
|
||||
|
||||
h63484->fifo[h63484->fifo_ptr] = data;
|
||||
h63484->fifo_flag[h63484->fifo_ptr] = flag;
|
||||
|
||||
if (h63484->fifo_ptr == 16)
|
||||
h63484->sr &= ~H63484_SR_WFR;
|
||||
|
||||
//h63484->sr |= H63484_SR_RFR;
|
||||
h63484->sr &= ~H63484_SR_WFE;
|
||||
}
|
||||
else
|
||||
@ -404,29 +381,23 @@ INLINE void queue(h63484_state *h63484, UINT8 data, int flag)
|
||||
}
|
||||
}
|
||||
|
||||
INLINE void dequeue(h63484_state *h63484, UINT8 *data, int *flag)
|
||||
INLINE void dequeue_w(h63484_state *h63484, UINT8 *data)
|
||||
{
|
||||
int i;
|
||||
|
||||
*data = h63484->fifo[0];
|
||||
*flag = h63484->fifo_flag[0];
|
||||
|
||||
//h63484->sr &= ~H63484_SR_RFF;
|
||||
|
||||
if (h63484->fifo_ptr > -1)
|
||||
{
|
||||
for (i = 0; i < 15; i++)
|
||||
{
|
||||
h63484->fifo[i] = h63484->fifo[i + 1];
|
||||
h63484->fifo_flag[i] = h63484->fifo_flag[i + 1];
|
||||
}
|
||||
|
||||
h63484->fifo[15] = 0;
|
||||
h63484->fifo_flag[15] = 0;
|
||||
|
||||
h63484->fifo_ptr--;
|
||||
|
||||
//h63484->sr &= ~H63484_SR_RFR;
|
||||
h63484->sr |= H63484_SR_WFR;
|
||||
|
||||
if (h63484->fifo_ptr == -1)
|
||||
@ -435,6 +406,62 @@ INLINE void dequeue(h63484_state *h63484, UINT8 *data, int *flag)
|
||||
}
|
||||
}
|
||||
|
||||
INLINE void fifo_r_clear(h63484_state *h63484)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
h63484->fifo_r[i] = 0;
|
||||
|
||||
h63484->fifo_r_ptr = -1;
|
||||
|
||||
h63484->sr &= ~H63484_SR_RFR;
|
||||
h63484->sr &= ~H63484_SR_RFF;
|
||||
}
|
||||
|
||||
INLINE void queue_r(h63484_state *h63484, UINT8 data)
|
||||
{
|
||||
if (h63484->fifo_ptr < 15)
|
||||
{
|
||||
h63484->fifo_r_ptr++;
|
||||
|
||||
h63484->fifo_r[h63484->fifo_r_ptr] = data;
|
||||
|
||||
if (h63484->fifo_r_ptr == 16)
|
||||
h63484->sr |= H63484_SR_RFF;
|
||||
|
||||
h63484->sr |= H63484_SR_RFR;
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO what happen? somebody set us up the bomb
|
||||
printf("FIFO?\n");
|
||||
}
|
||||
}
|
||||
|
||||
INLINE void dequeue_r(h63484_state *h63484, UINT8 *data)
|
||||
{
|
||||
int i;
|
||||
|
||||
*data = h63484->fifo_r[0];
|
||||
|
||||
if (h63484->fifo_r_ptr > -1)
|
||||
{
|
||||
for (i = 0; i < 15; i++)
|
||||
h63484->fifo_r[i] = h63484->fifo_r[i + 1];
|
||||
|
||||
h63484->fifo_r[15] = 0;
|
||||
|
||||
h63484->fifo_r_ptr--;
|
||||
|
||||
h63484->sr &= ~H63484_SR_RFF;
|
||||
|
||||
if (h63484->fifo_ptr == -1)
|
||||
h63484->sr &= H63484_SR_RFR;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
ROM( h63484 )
|
||||
-------------------------------------------------*/
|
||||
@ -574,14 +601,13 @@ static void process_fifo(device_t *device)
|
||||
{
|
||||
h63484_state *h63484 = get_safe_token(device);
|
||||
UINT8 data;
|
||||
int flag;
|
||||
|
||||
dequeue(h63484, &data, &flag);
|
||||
dequeue_w(h63484, &data);
|
||||
|
||||
if (flag == FIFO_COMMAND)
|
||||
if (h63484->sr & H63484_SR_CED)
|
||||
{
|
||||
h63484->cr = (data & 0xff) << 8;
|
||||
dequeue(h63484, &data, &flag);
|
||||
dequeue_w(h63484, &data);
|
||||
h63484->cr |= data & 0xff;
|
||||
h63484->param_ptr = 0;
|
||||
h63484->sr &= ~H63484_SR_CED;
|
||||
@ -589,7 +615,7 @@ static void process_fifo(device_t *device)
|
||||
else
|
||||
{
|
||||
h63484->pr[h63484->param_ptr] = (data & 0xff) << 8;
|
||||
dequeue(h63484, &data, &flag);
|
||||
dequeue_w(h63484, &data);
|
||||
h63484->pr[h63484->param_ptr] |= (data & 0xff);
|
||||
h63484->param_ptr++;
|
||||
}
|
||||
@ -610,6 +636,18 @@ static void process_fifo(device_t *device)
|
||||
command_end_seq(device);
|
||||
}
|
||||
break;
|
||||
|
||||
case COMMAND_RD:
|
||||
if (h63484->param_ptr == 0)
|
||||
{
|
||||
printf("%08x %02x %02x\n", h63484->rwp,h63484->space->direct().read_raw_byte((h63484->rwp+0) & 0xfffff), h63484->space->direct().read_raw_byte((h63484->rwp+1) & 0xfffff));
|
||||
|
||||
queue_r(h63484, h63484->space->read_byte((h63484->rwp+0) & 0xfffff));
|
||||
queue_r(h63484, h63484->space->read_byte((h63484->rwp+1) & 0xfffff));
|
||||
h63484->rwp+=2;
|
||||
command_end_seq(device);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -617,8 +655,9 @@ static void exec_abort_sequence(device_t *device)
|
||||
{
|
||||
h63484_state *h63484 = get_safe_token(device);
|
||||
|
||||
fifo_clear(h63484);
|
||||
h63484->sr = H63484_SR_WFR | H63484_SR_WFE | H63484_SR_CED; // set to 0x23
|
||||
fifo_w_clear(h63484);
|
||||
fifo_r_clear(h63484);
|
||||
h63484->sr = H63484_SR_WFR | H63484_SR_WFE | H63484_SR_CED; // hard-set to 0x23
|
||||
}
|
||||
|
||||
static void check_video_registers(device_t *device, int offset)
|
||||
@ -678,9 +717,8 @@ WRITE16_DEVICE_HANDLER( h63484_data_w )
|
||||
|
||||
if(h63484->ar == 0)
|
||||
{
|
||||
fifo_set_direction(h63484, FIFO_WRITE);
|
||||
queue(h63484, (data & 0xff00) >> 8, (h63484->sr & H63484_SR_CED) >> 5);
|
||||
queue(h63484, (data & 0x00ff) >> 0, (h63484->sr & H63484_SR_CED) >> 5);
|
||||
queue_w(h63484, (data & 0xff00) >> 8);
|
||||
queue_w(h63484, (data & 0x00ff) >> 0);
|
||||
process_fifo(device);
|
||||
}
|
||||
else
|
||||
@ -702,6 +740,9 @@ static DEVICE_START( h63484 )
|
||||
|
||||
h63484->screen = device->machine().device<screen_device>(intf->screen_tag);
|
||||
assert(h63484->screen != NULL);
|
||||
|
||||
h63484->space = device->memory().space(AS_0);
|
||||
h63484->vram = auto_alloc_array_clear(device->machine(), UINT8, 1 << 20);
|
||||
}
|
||||
|
||||
static DEVICE_RESET( h63484 )
|
||||
@ -718,7 +759,7 @@ DEVICE_GET_INFO( h63484 )
|
||||
/* --- the following bits of info are returned as 64-bit signed integers --- */
|
||||
case DEVINFO_INT_TOKEN_BYTES: info->i = sizeof(h63484_state); break;
|
||||
case DEVINFO_INT_DATABUS_WIDTH_0: info->i = 8; break;
|
||||
case DEVINFO_INT_ADDRBUS_WIDTH_0: info->i = 19; break;
|
||||
case DEVINFO_INT_ADDRBUS_WIDTH_0: info->i = 20; break;
|
||||
case DEVINFO_INT_ADDRBUS_SHIFT_0: info->i = -1; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers --- */
|
||||
|
@ -643,12 +643,12 @@ static READ8_HANDLER( h63484_rom_r )
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( adp_h63484_map, AS_0, 8 )
|
||||
AM_RANGE(0x00000, 0x3ffff) AM_DEVREADWRITE("h63484",h63484_vram_r,h63484_vram_w)
|
||||
AM_RANGE(0x40000, 0x7ffff) AM_READ(h63484_rom_r)
|
||||
AM_RANGE(0x00000, 0x7ffff) AM_DEVREADWRITE("h63484",h63484_vram_r,h63484_vram_w)
|
||||
AM_RANGE(0x80000, 0xbffff) AM_READ(h63484_rom_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( fashiong_h63484_map, AS_0, 8 )
|
||||
AM_RANGE(0x00000, 0x3ffff) AM_DEVREADWRITE("h63484",h63484_vram_r,h63484_vram_w)
|
||||
AM_RANGE(0x00000, 0x7ffff) AM_DEVREADWRITE("h63484",h63484_vram_r,h63484_vram_w)
|
||||
// AM_RANGE(0x40000, 0x7ffff) AM_ROM AM_REGION("gfx1", 0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
@ -39,6 +39,7 @@
|
||||
******************************************************************************/
|
||||
|
||||
BSMT2000
|
||||
H63484
|
||||
NAMCO_50XX
|
||||
NAMCO_51XX
|
||||
NAMCO_52XX
|
||||
|
Loading…
Reference in New Issue
Block a user