Converted the ppi8255 implementation to a device.
This commit is contained in:
parent
4719edb396
commit
0d4aca282f
@ -91,15 +91,14 @@
|
||||
*********************************************************************/
|
||||
|
||||
#include "driver.h"
|
||||
#include "deprecat.h"
|
||||
#include "8255ppi.h"
|
||||
#include "memconv.h"
|
||||
|
||||
typedef struct _ppi8255 ppi8255_t;
|
||||
|
||||
static int num;
|
||||
|
||||
typedef struct
|
||||
struct _ppi8255
|
||||
{
|
||||
const ppi8255_interface *intf;
|
||||
|
||||
read8_machine_func port_read[3];
|
||||
write8_machine_func port_write[3];
|
||||
|
||||
@ -124,98 +123,63 @@ typedef struct
|
||||
UINT8 read[3]; /* data read from ports */
|
||||
UINT8 latch[3]; /* data written to ports */
|
||||
UINT8 output[3]; /* actual output data */
|
||||
} ppi8255;
|
||||
|
||||
static ppi8255 chips[MAX_8255];
|
||||
|
||||
static void set_mode(int which, int data, int call_handlers);
|
||||
static void ppi8255_write_port(ppi8255 *chip, int port);
|
||||
};
|
||||
|
||||
|
||||
void ppi8255_init( const ppi8255_interface *intfce )
|
||||
{
|
||||
int i;
|
||||
static void set_mode(const device_config *device, int data, int call_handlers);
|
||||
static void ppi8255_write_port(const device_config *device, int port);
|
||||
|
||||
num = intfce->num;
|
||||
|
||||
for (i = 0; i < num; i++)
|
||||
{
|
||||
ppi8255 *chip = &chips[i];
|
||||
|
||||
memset(chip, 0, sizeof(*chip));
|
||||
|
||||
chip->port_read[0] = intfce->portAread[i];
|
||||
chip->port_read[1] = intfce->portBread[i];
|
||||
chip->port_read[2] = intfce->portCread[i];
|
||||
chip->port_write[0] = intfce->portAwrite[i];
|
||||
chip->port_write[1] = intfce->portBwrite[i];
|
||||
chip->port_write[2] = intfce->portCwrite[i];
|
||||
|
||||
set_mode(i, 0x1b, 0); /* Mode 0, all ports set to input */
|
||||
|
||||
state_save_register_item("ppi8255", i, chip->groupA_mode);
|
||||
state_save_register_item("ppi8255", i, chip->groupB_mode);
|
||||
state_save_register_item("ppi8255", i, chip->portA_dir);
|
||||
state_save_register_item("ppi8255", i, chip->portB_dir);
|
||||
state_save_register_item("ppi8255", i, chip->portCH_dir);
|
||||
state_save_register_item("ppi8255", i, chip->portCL_dir);
|
||||
state_save_register_item("ppi8255", i, chip->obf_a);
|
||||
state_save_register_item("ppi8255", i, chip->obf_b);
|
||||
state_save_register_item("ppi8255", i, chip->ibf_a);
|
||||
state_save_register_item("ppi8255", i, chip->ibf_b);
|
||||
state_save_register_item("ppi8255", i, chip->inte_a);
|
||||
state_save_register_item("ppi8255", i, chip->inte_b);
|
||||
state_save_register_item_array("ppi8255", i, chip->in_mask);
|
||||
state_save_register_item_array("ppi8255", i, chip->out_mask);
|
||||
state_save_register_item_array("ppi8255", i, chip->read);
|
||||
state_save_register_item_array("ppi8255", i, chip->latch);
|
||||
}
|
||||
INLINE ppi8255_t *get_safe_token(const device_config *device) {
|
||||
assert( device != NULL );
|
||||
assert( device->token != NULL );
|
||||
assert( device->type == DEVICE_GET_INFO_NAME(ppi8255) );
|
||||
return ( ppi8255_t * ) device->token;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void ppi8255_get_handshake_signals(ppi8255 *chip, int is_read, UINT8 *result)
|
||||
INLINE void ppi8255_get_handshake_signals(ppi8255_t *ppi8255, int is_read, UINT8 *result)
|
||||
{
|
||||
UINT8 handshake = 0x00;
|
||||
UINT8 mask = 0x00;
|
||||
|
||||
/* group A */
|
||||
if (chip->groupA_mode == 1)
|
||||
if (ppi8255->groupA_mode == 1)
|
||||
{
|
||||
if (chip->portA_dir)
|
||||
if (ppi8255->portA_dir)
|
||||
{
|
||||
handshake |= chip->ibf_a ? 0x20 : 0x00;
|
||||
handshake |= (chip->ibf_a && chip->inte_a) ? 0x08 : 0x00;
|
||||
handshake |= ppi8255->ibf_a ? 0x20 : 0x00;
|
||||
handshake |= (ppi8255->ibf_a && ppi8255->inte_a) ? 0x08 : 0x00;
|
||||
mask |= 0x28;
|
||||
}
|
||||
else
|
||||
{
|
||||
handshake |= chip->obf_a ? 0x00 : 0x80;
|
||||
handshake |= (chip->obf_a && chip->inte_a) ? 0x08 : 0x00;
|
||||
handshake |= ppi8255->obf_a ? 0x00 : 0x80;
|
||||
handshake |= (ppi8255->obf_a && ppi8255->inte_a) ? 0x08 : 0x00;
|
||||
mask |= 0x88;
|
||||
}
|
||||
}
|
||||
else if (chip->groupA_mode == 2)
|
||||
else if (ppi8255->groupA_mode == 2)
|
||||
{
|
||||
handshake |= chip->inte_a ? 0x08 : 0x00;
|
||||
handshake |= chip->obf_a ? 0x00 : 0x80;
|
||||
handshake |= chip->ibf_a ? 0x20 : 0x00;
|
||||
handshake |= ppi8255->inte_a ? 0x08 : 0x00;
|
||||
handshake |= ppi8255->obf_a ? 0x00 : 0x80;
|
||||
handshake |= ppi8255->ibf_a ? 0x20 : 0x00;
|
||||
mask |= 0xA8;
|
||||
}
|
||||
|
||||
/* group B */
|
||||
if (chip->groupB_mode == 1)
|
||||
if (ppi8255->groupB_mode == 1)
|
||||
{
|
||||
if (chip->portA_dir)
|
||||
if (ppi8255->portA_dir)
|
||||
{
|
||||
handshake |= chip->ibf_b ? 0x02 : 0x00;
|
||||
handshake |= (chip->ibf_b && chip->inte_b) ? 0x01 : 0x00;
|
||||
handshake |= ppi8255->ibf_b ? 0x02 : 0x00;
|
||||
handshake |= (ppi8255->ibf_b && ppi8255->inte_b) ? 0x01 : 0x00;
|
||||
mask |= 0x03;
|
||||
}
|
||||
else
|
||||
{
|
||||
handshake |= chip->obf_b ? 0x00 : 0x02;
|
||||
handshake |= (chip->obf_b && chip->inte_b) ? 0x01 : 0x00;
|
||||
handshake |= ppi8255->obf_b ? 0x00 : 0x02;
|
||||
handshake |= (ppi8255->obf_b && ppi8255->inte_b) ? 0x01 : 0x00;
|
||||
mask |= 0x03;
|
||||
}
|
||||
}
|
||||
@ -226,76 +190,70 @@ static void ppi8255_get_handshake_signals(ppi8255 *chip, int is_read, UINT8 *res
|
||||
|
||||
|
||||
|
||||
static void ppi8255_input(ppi8255 *chip, int port, UINT8 data)
|
||||
static void ppi8255_input(const device_config *device, int port, UINT8 data)
|
||||
{
|
||||
ppi8255_t *ppi8255 = get_safe_token(device);
|
||||
int changed = 0;
|
||||
|
||||
chip->read[port] = data;
|
||||
ppi8255->read[port] = data;
|
||||
|
||||
/* port C is special */
|
||||
if (port == 2)
|
||||
{
|
||||
if (((chip->groupA_mode == 1) && (chip->portA_dir == 0)) || (chip->groupA_mode == 2))
|
||||
if (((ppi8255->groupA_mode == 1) && (ppi8255->portA_dir == 0)) || (ppi8255->groupA_mode == 2))
|
||||
{
|
||||
/* is !ACKA asserted? */
|
||||
if (chip->obf_a && !(data & 0x40))
|
||||
if (ppi8255->obf_a && !(data & 0x40))
|
||||
{
|
||||
chip->obf_a = 0;
|
||||
ppi8255->obf_a = 0;
|
||||
changed = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ((chip->groupB_mode == 1) && (chip->portB_dir == 0))
|
||||
if ((ppi8255->groupB_mode == 1) && (ppi8255->portB_dir == 0))
|
||||
{
|
||||
/* is !ACKB asserted? */
|
||||
if (chip->obf_b && !(data & 0x04))
|
||||
if (ppi8255->obf_b && !(data & 0x04))
|
||||
{
|
||||
chip->obf_b = 0;
|
||||
ppi8255->obf_b = 0;
|
||||
changed = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (changed)
|
||||
ppi8255_write_port(chip, 2);
|
||||
ppi8255_write_port(device, 2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static UINT8 ppi8255_read_port(ppi8255 *chip, int port)
|
||||
static UINT8 ppi8255_read_port(const device_config *device, int port)
|
||||
{
|
||||
ppi8255_t *ppi8255 = get_safe_token(device);
|
||||
UINT8 result = 0x00;
|
||||
|
||||
if (chip->in_mask[port])
|
||||
if (ppi8255->in_mask[port])
|
||||
{
|
||||
if (chip->port_read[port])
|
||||
ppi8255_input(chip, port, chip->port_read[port](Machine, 0));
|
||||
if (ppi8255->port_read[port])
|
||||
ppi8255_input(device, port, ppi8255->port_read[port](device->machine, 0));
|
||||
|
||||
result |= chip->read[port] & chip->in_mask[port];
|
||||
result |= ppi8255->read[port] & ppi8255->in_mask[port];
|
||||
}
|
||||
result |= chip->latch[port] & chip->out_mask[port];
|
||||
result |= ppi8255->latch[port] & ppi8255->out_mask[port];
|
||||
|
||||
/* read special port 2 signals */
|
||||
if (port == 2)
|
||||
ppi8255_get_handshake_signals(chip, 1, &result);
|
||||
ppi8255_get_handshake_signals(ppi8255, 1, &result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
UINT8 ppi8255_r(int which, offs_t offset)
|
||||
READ8_DEVICE_HANDLER( ppi8255_r )
|
||||
{
|
||||
ppi8255 *chip = &chips[which];
|
||||
UINT8 result = 0;
|
||||
|
||||
/* some bounds checking */
|
||||
if (which > num)
|
||||
{
|
||||
logerror("Attempting to access an unmapped 8255 chip. PC: %04X\n", activecpu_get_pc());
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
offset %= 4;
|
||||
|
||||
switch(offset)
|
||||
@ -303,7 +261,7 @@ UINT8 ppi8255_r(int which, offs_t offset)
|
||||
case 0: /* Port A read */
|
||||
case 1: /* Port B read */
|
||||
case 2: /* Port C read */
|
||||
result = ppi8255_read_port(chip, offset);
|
||||
result = ppi8255_read_port(device, offset);
|
||||
break;
|
||||
|
||||
case 3: /* Control word */
|
||||
@ -316,34 +274,28 @@ UINT8 ppi8255_r(int which, offs_t offset)
|
||||
|
||||
|
||||
|
||||
static void ppi8255_write_port(ppi8255 *chip, int port)
|
||||
static void ppi8255_write_port(const device_config *device, int port)
|
||||
{
|
||||
ppi8255_t *ppi8255 = get_safe_token(device);
|
||||
UINT8 write_data;
|
||||
|
||||
write_data = chip->latch[port] & chip->out_mask[port];
|
||||
write_data |= 0xFF & ~chip->out_mask[port];
|
||||
write_data = ppi8255->latch[port] & ppi8255->out_mask[port];
|
||||
write_data |= 0xFF & ~ppi8255->out_mask[port];
|
||||
|
||||
/* write out special port 2 signals */
|
||||
if (port == 2)
|
||||
ppi8255_get_handshake_signals(chip, 0, &write_data);
|
||||
ppi8255_get_handshake_signals(ppi8255, 0, &write_data);
|
||||
|
||||
chip->output[port] = write_data;
|
||||
if (chip->port_write[port])
|
||||
chip->port_write[port](Machine, 0, write_data);
|
||||
ppi8255->output[port] = write_data;
|
||||
if (ppi8255->port_write[port])
|
||||
ppi8255->port_write[port](device->machine, 0, write_data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ppi8255_w(int which, offs_t offset, UINT8 data)
|
||||
WRITE8_DEVICE_HANDLER( ppi8255_w )
|
||||
{
|
||||
ppi8255 *chip = &chips[which];
|
||||
|
||||
/* Some bounds checking */
|
||||
if (which > num)
|
||||
{
|
||||
logerror("Attempting to access an unmapped 8255 chip. PC: %04X\n", activecpu_get_pc());
|
||||
return;
|
||||
}
|
||||
ppi8255_t *ppi8255 = get_safe_token(device);
|
||||
|
||||
offset %= 4;
|
||||
|
||||
@ -352,24 +304,24 @@ void ppi8255_w(int which, offs_t offset, UINT8 data)
|
||||
case 0: /* Port A write */
|
||||
case 1: /* Port B write */
|
||||
case 2: /* Port C write */
|
||||
chip->latch[offset] = data;
|
||||
ppi8255_write_port(chip, offset);
|
||||
ppi8255->latch[offset] = data;
|
||||
ppi8255_write_port(device, offset);
|
||||
|
||||
switch(offset)
|
||||
{
|
||||
case 0:
|
||||
if (!chip->portA_dir && (chip->groupA_mode != 0))
|
||||
if (!ppi8255->portA_dir && (ppi8255->groupA_mode != 0))
|
||||
{
|
||||
chip->obf_a = 1;
|
||||
ppi8255_write_port(chip, 2);
|
||||
ppi8255->obf_a = 1;
|
||||
ppi8255_write_port(device, 2);
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (!chip->portB_dir && (chip->groupB_mode != 0))
|
||||
if (!ppi8255->portB_dir && (ppi8255->groupB_mode != 0))
|
||||
{
|
||||
chip->obf_b = 1;
|
||||
ppi8255_write_port(chip, 2);
|
||||
ppi8255->obf_b = 1;
|
||||
ppi8255_write_port(device, 2);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -378,7 +330,7 @@ void ppi8255_w(int which, offs_t offset, UINT8 data)
|
||||
case 3: /* Control word */
|
||||
if (data & 0x80)
|
||||
{
|
||||
set_mode(which, data & 0x7f, 1);
|
||||
set_mode(device, data & 0x7f, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -388,122 +340,105 @@ void ppi8255_w(int which, offs_t offset, UINT8 data)
|
||||
bit = (data >> 1) & 0x07;
|
||||
|
||||
if (data & 1)
|
||||
chip->latch[2] |= (1<<bit); /* set bit */
|
||||
ppi8255->latch[2] |= (1<<bit); /* set bit */
|
||||
else
|
||||
chip->latch[2] &= ~(1<<bit); /* reset bit */
|
||||
ppi8255->latch[2] &= ~(1<<bit); /* reset bit */
|
||||
|
||||
ppi8255_write_port(chip, 2);
|
||||
ppi8255_write_port(device, 2);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef MESS
|
||||
UINT8 ppi8255_peek( int which, offs_t offset )
|
||||
|
||||
void ppi8255_set_portAread(const device_config *device, read8_machine_func portAread)
|
||||
{
|
||||
ppi8255 *chip;
|
||||
ppi8255_t *ppi8255 = get_safe_token(device);
|
||||
|
||||
|
||||
/* Some bounds checking */
|
||||
if (which > num)
|
||||
{
|
||||
logerror("Attempting to access an unmapped 8255 chip. PC: %04X\n", activecpu_get_pc());
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
chip = &chips[which];
|
||||
|
||||
|
||||
if (offset > 2)
|
||||
{
|
||||
logerror("Attempting to access an invalid 8255 port. PC: %04X\n", activecpu_get_pc());
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
|
||||
chip = &chips[which];
|
||||
|
||||
return chip->latch[offset];
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void ppi8255_set_portAread(int which, read8_machine_func portAread)
|
||||
{
|
||||
chips[which].port_read[0] = portAread;
|
||||
ppi8255->port_read[0] = portAread;
|
||||
}
|
||||
|
||||
void ppi8255_set_portBread(int which, read8_machine_func portBread)
|
||||
void ppi8255_set_portBread(const device_config *device, read8_machine_func portBread)
|
||||
{
|
||||
chips[which].port_read[1] = portBread;
|
||||
ppi8255_t *ppi8255 = get_safe_token(device);
|
||||
|
||||
ppi8255->port_read[1] = portBread;
|
||||
}
|
||||
|
||||
void ppi8255_set_portCread(int which, read8_machine_func portCread)
|
||||
void ppi8255_set_portCread(const device_config *device, read8_machine_func portCread)
|
||||
{
|
||||
chips[which].port_read[2] = portCread;
|
||||
ppi8255_t *ppi8255 = get_safe_token(device);
|
||||
|
||||
ppi8255->port_read[2] = portCread;
|
||||
}
|
||||
|
||||
|
||||
void ppi8255_set_portAwrite(int which, write8_machine_func portAwrite)
|
||||
void ppi8255_set_portAwrite(const device_config *device, write8_machine_func portAwrite)
|
||||
{
|
||||
chips[which].port_write[0] = portAwrite;
|
||||
ppi8255_t *ppi8255 = get_safe_token(device);
|
||||
|
||||
ppi8255->port_write[0] = portAwrite;
|
||||
}
|
||||
|
||||
void ppi8255_set_portBwrite(int which, write8_machine_func portBwrite)
|
||||
void ppi8255_set_portBwrite(const device_config *device, write8_machine_func portBwrite)
|
||||
{
|
||||
chips[which].port_write[1] = portBwrite;
|
||||
ppi8255_t *ppi8255 = get_safe_token(device);
|
||||
|
||||
ppi8255->port_write[1] = portBwrite;
|
||||
}
|
||||
|
||||
void ppi8255_set_portCwrite(int which, write8_machine_func portCwrite)
|
||||
void ppi8255_set_portCwrite(const device_config *device, write8_machine_func portCwrite)
|
||||
{
|
||||
chips[which].port_write[2] = portCwrite;
|
||||
ppi8255_t *ppi8255 = get_safe_token(device);
|
||||
|
||||
ppi8255->port_write[2] = portCwrite;
|
||||
}
|
||||
|
||||
|
||||
static void set_mode(int which, int data, int call_handlers)
|
||||
static void set_mode(const device_config *device, int data, int call_handlers)
|
||||
{
|
||||
ppi8255 *chip = &chips[which];
|
||||
ppi8255_t *ppi8255 = get_safe_token(device);
|
||||
int i;
|
||||
|
||||
/* parse out mode */
|
||||
chip->groupA_mode = (data >> 5) & 3;
|
||||
chip->groupB_mode = (data >> 2) & 1;
|
||||
chip->portA_dir = (data >> 4) & 1;
|
||||
chip->portB_dir = (data >> 1) & 1;
|
||||
chip->portCH_dir = (data >> 3) & 1;
|
||||
chip->portCL_dir = (data >> 0) & 1;
|
||||
ppi8255->groupA_mode = (data >> 5) & 3;
|
||||
ppi8255->groupB_mode = (data >> 2) & 1;
|
||||
ppi8255->portA_dir = (data >> 4) & 1;
|
||||
ppi8255->portB_dir = (data >> 1) & 1;
|
||||
ppi8255->portCH_dir = (data >> 3) & 1;
|
||||
ppi8255->portCL_dir = (data >> 0) & 1;
|
||||
|
||||
/* normalize groupA_mode */
|
||||
if (chip->groupA_mode == 3)
|
||||
chip->groupA_mode = 2;
|
||||
if (ppi8255->groupA_mode == 3)
|
||||
ppi8255->groupA_mode = 2;
|
||||
|
||||
/* Port A direction */
|
||||
if (chip->portA_dir)
|
||||
chip->in_mask[0] = 0xFF, chip->out_mask[0] = 0x00; /* input */
|
||||
if (ppi8255->portA_dir)
|
||||
ppi8255->in_mask[0] = 0xFF, ppi8255->out_mask[0] = 0x00; /* input */
|
||||
else
|
||||
chip->in_mask[0] = 0x00, chip->out_mask[0] = 0xFF; /* output */
|
||||
ppi8255->in_mask[0] = 0x00, ppi8255->out_mask[0] = 0xFF; /* output */
|
||||
|
||||
/* Port B direction */
|
||||
if (chip->portB_dir)
|
||||
chip->in_mask[1] = 0xFF, chip->out_mask[1] = 0x00; /* input */
|
||||
if (ppi8255->portB_dir)
|
||||
ppi8255->in_mask[1] = 0xFF, ppi8255->out_mask[1] = 0x00; /* input */
|
||||
else
|
||||
chip->in_mask[1] = 0x00, chip->out_mask[1] = 0xFF; /* output */
|
||||
ppi8255->in_mask[1] = 0x00, ppi8255->out_mask[1] = 0xFF; /* output */
|
||||
|
||||
/* Port C upper direction */
|
||||
if (chip->portCH_dir)
|
||||
chip->in_mask[2] = 0xF0, chip->out_mask[2] = 0x00; /* input */
|
||||
if (ppi8255->portCH_dir)
|
||||
ppi8255->in_mask[2] = 0xF0, ppi8255->out_mask[2] = 0x00; /* input */
|
||||
else
|
||||
chip->in_mask[2] = 0x00, chip->out_mask[2] = 0xF0; /* output */
|
||||
ppi8255->in_mask[2] = 0x00, ppi8255->out_mask[2] = 0xF0; /* output */
|
||||
|
||||
/* Port C lower direction */
|
||||
if (chip->portCL_dir)
|
||||
chip->in_mask[2] |= 0x0F; /* input */
|
||||
if (ppi8255->portCL_dir)
|
||||
ppi8255->in_mask[2] |= 0x0F; /* input */
|
||||
else
|
||||
chip->out_mask[2] |= 0x0F; /* output */
|
||||
ppi8255->out_mask[2] |= 0x0F; /* output */
|
||||
|
||||
/* now depending on the group modes, certain Port C lines may be replaced
|
||||
* with varying control signals */
|
||||
switch(chip->groupA_mode)
|
||||
switch(ppi8255->groupA_mode)
|
||||
{
|
||||
case 0: /* Group A mode 0 */
|
||||
/* no changes */
|
||||
@ -511,18 +446,18 @@ static void set_mode(int which, int data, int call_handlers)
|
||||
|
||||
case 1: /* Group A mode 1 */
|
||||
/* bits 5-3 are reserved by Group A mode 1 */
|
||||
chip->in_mask[2] &= ~0x38;
|
||||
chip->out_mask[2] &= ~0x38;
|
||||
ppi8255->in_mask[2] &= ~0x38;
|
||||
ppi8255->out_mask[2] &= ~0x38;
|
||||
break;
|
||||
|
||||
case 2: /* Group A mode 2 */
|
||||
/* bits 7-3 are reserved by Group A mode 2 */
|
||||
chip->in_mask[2] &= ~0xF8;
|
||||
chip->out_mask[2] &= ~0xF8;
|
||||
ppi8255->in_mask[2] &= ~0xF8;
|
||||
ppi8255->out_mask[2] &= ~0xF8;
|
||||
break;
|
||||
}
|
||||
|
||||
switch(chip->groupB_mode)
|
||||
switch(ppi8255->groupB_mode)
|
||||
{
|
||||
case 0: /* Group B mode 0 */
|
||||
/* no changes */
|
||||
@ -530,61 +465,128 @@ static void set_mode(int which, int data, int call_handlers)
|
||||
|
||||
case 1: /* Group B mode 1 */
|
||||
/* bits 2-0 are reserved by Group B mode 1 */
|
||||
chip->in_mask[2] &= ~0x07;
|
||||
chip->out_mask[2] &= ~0x07;
|
||||
ppi8255->in_mask[2] &= ~0x07;
|
||||
ppi8255->out_mask[2] &= ~0x07;
|
||||
break;
|
||||
}
|
||||
|
||||
/* KT: 25-Dec-99 - 8255 resets latches when mode set */
|
||||
chip->latch[0] = chip->latch[1] = chip->latch[2] = 0;
|
||||
ppi8255->latch[0] = ppi8255->latch[1] = ppi8255->latch[2] = 0;
|
||||
|
||||
if (call_handlers)
|
||||
{
|
||||
for (i = 0; i < 3; i++)
|
||||
ppi8255_write_port(chip, i);
|
||||
ppi8255_write_port(device, i);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ppi8255_set_portA( int which, UINT8 data ) { ppi8255_input(&chips[which], 0, data); }
|
||||
void ppi8255_set_portB( int which, UINT8 data ) { ppi8255_input(&chips[which], 1, data); }
|
||||
void ppi8255_set_portC( int which, UINT8 data ) { ppi8255_input(&chips[which], 2, data); }
|
||||
void ppi8255_set_portA( const device_config *device, UINT8 data ) { ppi8255_input(device, 0, data); }
|
||||
void ppi8255_set_portB( const device_config *device, UINT8 data ) { ppi8255_input(device, 1, data); }
|
||||
void ppi8255_set_portC( const device_config *device, UINT8 data ) { ppi8255_input(device, 2, data); }
|
||||
|
||||
UINT8 ppi8255_get_portA( int which ) { return chips[which].output[0]; }
|
||||
UINT8 ppi8255_get_portB( int which ) { return chips[which].output[1]; }
|
||||
UINT8 ppi8255_get_portC( int which ) { return chips[which].output[2]; }
|
||||
UINT8 ppi8255_get_portA( const device_config *device ) {
|
||||
ppi8255_t *ppi8255 = get_safe_token(device);
|
||||
|
||||
/* Helpers */
|
||||
READ8_HANDLER( ppi8255_0_r ) { return ppi8255_r( 0, offset ); }
|
||||
READ8_HANDLER( ppi8255_1_r ) { return ppi8255_r( 1, offset ); }
|
||||
READ8_HANDLER( ppi8255_2_r ) { return ppi8255_r( 2, offset ); }
|
||||
READ8_HANDLER( ppi8255_3_r ) { return ppi8255_r( 3, offset ); }
|
||||
READ8_HANDLER( ppi8255_4_r ) { return ppi8255_r( 4, offset ); }
|
||||
READ8_HANDLER( ppi8255_5_r ) { return ppi8255_r( 5, offset ); }
|
||||
READ8_HANDLER( ppi8255_6_r ) { return ppi8255_r( 6, offset ); }
|
||||
READ8_HANDLER( ppi8255_7_r ) { return ppi8255_r( 7, offset ); }
|
||||
WRITE8_HANDLER( ppi8255_0_w ) { ppi8255_w( 0, offset, data ); }
|
||||
WRITE8_HANDLER( ppi8255_1_w ) { ppi8255_w( 1, offset, data ); }
|
||||
WRITE8_HANDLER( ppi8255_2_w ) { ppi8255_w( 2, offset, data ); }
|
||||
WRITE8_HANDLER( ppi8255_3_w ) { ppi8255_w( 3, offset, data ); }
|
||||
WRITE8_HANDLER( ppi8255_4_w ) { ppi8255_w( 4, offset, data ); }
|
||||
WRITE8_HANDLER( ppi8255_5_w ) { ppi8255_w( 5, offset, data ); }
|
||||
WRITE8_HANDLER( ppi8255_6_w ) { ppi8255_w( 6, offset, data ); }
|
||||
WRITE8_HANDLER( ppi8255_7_w ) { ppi8255_w( 7, offset, data ); }
|
||||
return ppi8255->output[0];
|
||||
}
|
||||
|
||||
UINT8 ppi8255_get_portB( const device_config *device ) {
|
||||
ppi8255_t *ppi8255 = get_safe_token(device);
|
||||
|
||||
return ppi8255->output[1];
|
||||
}
|
||||
|
||||
UINT8 ppi8255_get_portC( const device_config *device ) {
|
||||
ppi8255_t *ppi8255 = get_safe_token(device);
|
||||
|
||||
return ppi8255->output[2];
|
||||
}
|
||||
|
||||
|
||||
static DEVICE_START( ppi8255 ) {
|
||||
ppi8255_t *ppi8255 = get_safe_token(device);
|
||||
char unique_tag[30];
|
||||
|
||||
ppi8255->intf = device->static_config;
|
||||
|
||||
ppi8255->port_read[0] = ppi8255->intf->portAread;
|
||||
ppi8255->port_read[1] = ppi8255->intf->portBread;
|
||||
ppi8255->port_read[2] = ppi8255->intf->portCread;
|
||||
|
||||
ppi8255->port_write[0] = ppi8255->intf->portAwrite;
|
||||
ppi8255->port_write[1] = ppi8255->intf->portBwrite;
|
||||
ppi8255->port_write[2] = ppi8255->intf->portCwrite;
|
||||
|
||||
/* register for state saving */
|
||||
state_save_combine_module_and_tag(unique_tag, "ppi8255", device->tag);
|
||||
|
||||
state_save_register_item(unique_tag, 0, ppi8255->groupA_mode);
|
||||
state_save_register_item(unique_tag, 0, ppi8255->groupB_mode);
|
||||
state_save_register_item(unique_tag, 0, ppi8255->portA_dir);
|
||||
state_save_register_item(unique_tag, 0, ppi8255->portB_dir);
|
||||
state_save_register_item(unique_tag, 0, ppi8255->portCH_dir);
|
||||
state_save_register_item(unique_tag, 0, ppi8255->portCL_dir);
|
||||
state_save_register_item(unique_tag, 0, ppi8255->obf_a);
|
||||
state_save_register_item(unique_tag, 0, ppi8255->obf_b);
|
||||
state_save_register_item(unique_tag, 0, ppi8255->ibf_a);
|
||||
state_save_register_item(unique_tag, 0, ppi8255->ibf_b);
|
||||
state_save_register_item(unique_tag, 0, ppi8255->inte_a);
|
||||
state_save_register_item(unique_tag, 0, ppi8255->inte_b);
|
||||
state_save_register_item_array(unique_tag, 0, ppi8255->in_mask);
|
||||
state_save_register_item_array(unique_tag, 0, ppi8255->out_mask);
|
||||
state_save_register_item_array(unique_tag, 0, ppi8255->read);
|
||||
state_save_register_item_array(unique_tag, 0, ppi8255->latch);
|
||||
}
|
||||
|
||||
|
||||
static DEVICE_RESET( ppi8255 ) {
|
||||
ppi8255_t *ppi8255 = get_safe_token(device);
|
||||
int i;
|
||||
|
||||
ppi8255->groupA_mode = 0;
|
||||
ppi8255->groupB_mode = 0;
|
||||
ppi8255->portA_dir = 0;
|
||||
ppi8255->portB_dir = 0;
|
||||
ppi8255->portCH_dir = 0;
|
||||
ppi8255->portCL_dir = 0;
|
||||
ppi8255->obf_a = ppi8255->ibf_a = ppi8255->inte_a = 0;
|
||||
ppi8255->obf_b = ppi8255->ibf_b = ppi8255->inte_b = 0;
|
||||
|
||||
for ( i = 0; i < 3; i++ ) {
|
||||
ppi8255->in_mask[i] = ppi8255->out_mask[i] = ppi8255->read[i] = ppi8255->latch[i] = ppi8255->output[i] = 0;
|
||||
}
|
||||
|
||||
set_mode(device, 0x1b, 0); /* Mode 0, all ports set to input */
|
||||
}
|
||||
|
||||
|
||||
static DEVICE_SET_INFO( ppi8255 ) {
|
||||
switch ( state ) {
|
||||
/* no parameters to set */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEVICE_GET_INFO(ppi8255) {
|
||||
switch ( state ) {
|
||||
/* --- the following bits of info are returned as 64-bit signed integers --- */
|
||||
case DEVINFO_INT_TOKEN_BYTES: info->i = sizeof(ppi8255_t); break;
|
||||
case DEVINFO_INT_INLINE_CONFIG_BYTES: info->i = 0; break;
|
||||
case DEVINFO_INT_CLASS: info->i = DEVICE_CLASS_PERIPHERAL; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case DEVINFO_FCT_SET_INFO: info->set_info = DEVICE_SET_INFO_NAME(ppi8255); break;
|
||||
case DEVINFO_FCT_START: info->start = DEVICE_START_NAME(ppi8255); break;
|
||||
case DEVINFO_FCT_STOP: /* nothing */ break;
|
||||
case DEVINFO_FCT_RESET: info->reset = DEVICE_RESET_NAME(ppi8255); break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case DEVINFO_STR_NAME: info->s = "Intel PPI8255"; break;
|
||||
case DEVINFO_STR_FAMILY: info->s = "PPI8255"; break;
|
||||
case DEVINFO_STR_VERSION: info->s = "1.00"; break;
|
||||
case DEVINFO_STR_SOURCE_FILE: info->s = __FILE__; break;
|
||||
case DEVINFO_STR_CREDITS: info->s = "Copyright the MAME and MESS Teams"; break;
|
||||
}
|
||||
}
|
||||
|
||||
READ16_HANDLER( ppi8255_16le_0_r ) { return read16le_with_read8_handler(ppi8255_0_r, machine, offset, mem_mask); }
|
||||
READ16_HANDLER( ppi8255_16le_1_r ) { return read16le_with_read8_handler(ppi8255_1_r, machine, offset, mem_mask); }
|
||||
READ16_HANDLER( ppi8255_16le_2_r ) { return read16le_with_read8_handler(ppi8255_2_r, machine, offset, mem_mask); }
|
||||
READ16_HANDLER( ppi8255_16le_3_r ) { return read16le_with_read8_handler(ppi8255_3_r, machine, offset, mem_mask); }
|
||||
READ16_HANDLER( ppi8255_16le_4_r ) { return read16le_with_read8_handler(ppi8255_4_r, machine, offset, mem_mask); }
|
||||
READ16_HANDLER( ppi8255_16le_5_r ) { return read16le_with_read8_handler(ppi8255_5_r, machine, offset, mem_mask); }
|
||||
READ16_HANDLER( ppi8255_16le_6_r ) { return read16le_with_read8_handler(ppi8255_6_r, machine, offset, mem_mask); }
|
||||
READ16_HANDLER( ppi8255_16le_7_r ) { return read16le_with_read8_handler(ppi8255_7_r, machine, offset, mem_mask); }
|
||||
WRITE16_HANDLER( ppi8255_16le_0_w ) { write16le_with_write8_handler(ppi8255_0_w, machine, offset, data, mem_mask); }
|
||||
WRITE16_HANDLER( ppi8255_16le_1_w ) { write16le_with_write8_handler(ppi8255_1_w, machine, offset, data, mem_mask); }
|
||||
WRITE16_HANDLER( ppi8255_16le_2_w ) { write16le_with_write8_handler(ppi8255_2_w, machine, offset, data, mem_mask); }
|
||||
WRITE16_HANDLER( ppi8255_16le_3_w ) { write16le_with_write8_handler(ppi8255_3_w, machine, offset, data, mem_mask); }
|
||||
WRITE16_HANDLER( ppi8255_16le_4_w ) { write16le_with_write8_handler(ppi8255_4_w, machine, offset, data, mem_mask); }
|
||||
WRITE16_HANDLER( ppi8255_16le_5_w ) { write16le_with_write8_handler(ppi8255_5_w, machine, offset, data, mem_mask); }
|
||||
WRITE16_HANDLER( ppi8255_16le_6_w ) { write16le_with_write8_handler(ppi8255_6_w, machine, offset, data, mem_mask); }
|
||||
WRITE16_HANDLER( ppi8255_16le_7_w ) { write16le_with_write8_handler(ppi8255_7_w, machine, offset, data, mem_mask); }
|
||||
|
@ -6,84 +6,44 @@
|
||||
|
||||
*********************************************************************/
|
||||
|
||||
#ifndef _8255PPI_H_
|
||||
#define _8255PPI_H_
|
||||
#ifndef __8255PPI_H_
|
||||
#define __8255PPI_H_
|
||||
|
||||
#define PPI8255 DEVICE_GET_INFO_NAME(ppi8255)
|
||||
|
||||
#define MAX_8255 8
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int num; /* number of PPIs to emulate */
|
||||
read8_machine_func portAread[MAX_8255];
|
||||
read8_machine_func portBread[MAX_8255];
|
||||
read8_machine_func portCread[MAX_8255];
|
||||
write8_machine_func portAwrite[MAX_8255];
|
||||
write8_machine_func portBwrite[MAX_8255];
|
||||
write8_machine_func portCwrite[MAX_8255];
|
||||
read8_machine_func portAread;
|
||||
read8_machine_func portBread;
|
||||
read8_machine_func portCread;
|
||||
write8_machine_func portAwrite;
|
||||
write8_machine_func portBwrite;
|
||||
write8_machine_func portCwrite;
|
||||
} ppi8255_interface;
|
||||
|
||||
|
||||
/* Init */
|
||||
void ppi8255_init( const ppi8255_interface *intfce);
|
||||
/* device interface */
|
||||
DEVICE_GET_INFO(ppi8255);
|
||||
|
||||
/* Read/Write */
|
||||
UINT8 ppi8255_r ( int which, offs_t offset );
|
||||
void ppi8255_w( int which, offs_t offset, UINT8 data );
|
||||
READ8_DEVICE_HANDLER( ppi8255_r );
|
||||
WRITE8_DEVICE_HANDLER( ppi8255_w );
|
||||
|
||||
void ppi8255_set_portAread( int which, read8_machine_func portAread);
|
||||
void ppi8255_set_portBread( int which, read8_machine_func portBread);
|
||||
void ppi8255_set_portCread( int which, read8_machine_func portCread);
|
||||
|
||||
void ppi8255_set_portAwrite( int which, write8_machine_func portAwrite);
|
||||
void ppi8255_set_portBwrite( int which, write8_machine_func portBwrite);
|
||||
void ppi8255_set_portCwrite( int which, write8_machine_func portCwrite);
|
||||
void ppi8255_set_portAread( const device_config *device, read8_machine_func portAread );
|
||||
void ppi8255_set_portBread( const device_config *device, read8_machine_func portBread );
|
||||
void ppi8255_set_portCread( const device_config *device, read8_machine_func portCread );
|
||||
|
||||
void ppi8255_set_portA( int which, UINT8 data );
|
||||
void ppi8255_set_portB( int which, UINT8 data );
|
||||
void ppi8255_set_portC( int which, UINT8 data );
|
||||
void ppi8255_set_portAwrite( const device_config *device, write8_machine_func portAwrite );
|
||||
void ppi8255_set_portBwrite( const device_config *device, write8_machine_func portBwrite );
|
||||
void ppi8255_set_portCwrite( const device_config *device, write8_machine_func portCwrite );
|
||||
|
||||
UINT8 ppi8255_get_portA( int which );
|
||||
UINT8 ppi8255_get_portB( int which );
|
||||
UINT8 ppi8255_get_portC( int which );
|
||||
void ppi8255_set_portA( const device_config *device, UINT8 data );
|
||||
void ppi8255_set_portB( const device_config *device, UINT8 data );
|
||||
void ppi8255_set_portC( const device_config *device, UINT8 data );
|
||||
|
||||
/* Helpers */
|
||||
READ8_HANDLER( ppi8255_0_r );
|
||||
READ8_HANDLER( ppi8255_1_r );
|
||||
READ8_HANDLER( ppi8255_2_r );
|
||||
READ8_HANDLER( ppi8255_3_r );
|
||||
READ8_HANDLER( ppi8255_4_r );
|
||||
READ8_HANDLER( ppi8255_5_r );
|
||||
READ8_HANDLER( ppi8255_6_r );
|
||||
READ8_HANDLER( ppi8255_7_r );
|
||||
WRITE8_HANDLER( ppi8255_0_w );
|
||||
WRITE8_HANDLER( ppi8255_1_w );
|
||||
WRITE8_HANDLER( ppi8255_2_w );
|
||||
WRITE8_HANDLER( ppi8255_3_w );
|
||||
WRITE8_HANDLER( ppi8255_4_w );
|
||||
WRITE8_HANDLER( ppi8255_5_w );
|
||||
WRITE8_HANDLER( ppi8255_6_w );
|
||||
WRITE8_HANDLER( ppi8255_7_w );
|
||||
UINT8 ppi8255_get_portA( const device_config *device );
|
||||
UINT8 ppi8255_get_portB( const device_config *device );
|
||||
UINT8 ppi8255_get_portC( const device_config *device );
|
||||
|
||||
READ16_HANDLER( ppi8255_16le_0_r );
|
||||
READ16_HANDLER( ppi8255_16le_1_r );
|
||||
READ16_HANDLER( ppi8255_16le_2_r );
|
||||
READ16_HANDLER( ppi8255_16le_3_r );
|
||||
READ16_HANDLER( ppi8255_16le_4_r );
|
||||
READ16_HANDLER( ppi8255_16le_5_r );
|
||||
READ16_HANDLER( ppi8255_16le_6_r );
|
||||
READ16_HANDLER( ppi8255_16le_7_r );
|
||||
WRITE16_HANDLER( ppi8255_16le_0_w );
|
||||
WRITE16_HANDLER( ppi8255_16le_1_w );
|
||||
WRITE16_HANDLER( ppi8255_16le_2_w );
|
||||
WRITE16_HANDLER( ppi8255_16le_3_w );
|
||||
WRITE16_HANDLER( ppi8255_16le_4_w );
|
||||
WRITE16_HANDLER( ppi8255_16le_5_w );
|
||||
WRITE16_HANDLER( ppi8255_16le_6_w );
|
||||
WRITE16_HANDLER( ppi8255_16le_7_w );
|
||||
|
||||
#ifdef MESS
|
||||
/* Peek at the ports */
|
||||
UINT8 ppi8255_peek( int which, offs_t offset );
|
||||
#endif
|
||||
|
||||
#endif /* _8255PPI_H_ */
|
||||
#endif /* __8255PPI_H_ */
|
||||
|
@ -425,8 +425,22 @@ static const struct CustomSound_interface sega005_custom_interface =
|
||||
};
|
||||
|
||||
|
||||
static const ppi8255_interface ppi8255_005_intf =
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
sega005_sound_a_w,
|
||||
sega005_sound_b_w,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
MACHINE_DRIVER_START( 005_sound_board )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_005_intf )
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SOUND_START(005)
|
||||
|
||||
@ -449,18 +463,6 @@ MACHINE_DRIVER_END
|
||||
|
||||
static SOUND_START( 005 )
|
||||
{
|
||||
static const ppi8255_interface ppi_intf =
|
||||
{
|
||||
1,
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
{ sega005_sound_a_w },
|
||||
{ sega005_sound_b_w },
|
||||
{ 0 }
|
||||
};
|
||||
ppi8255_init(&ppi_intf);
|
||||
|
||||
state_save_register_global_array(sound_state);
|
||||
state_save_register_global(sound_addr);
|
||||
state_save_register_global(sound_data);
|
||||
@ -819,8 +821,22 @@ ADDRESS_MAP_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static const ppi8255_interface monsterb_ppi_intf =
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
n7751_status_r,
|
||||
monsterb_sound_a_w,
|
||||
monsterb_sound_b_w,
|
||||
n7751_command_w
|
||||
};
|
||||
|
||||
|
||||
MACHINE_DRIVER_START( monsterb_sound_board )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( monsterb_ppi_intf )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD(N7751, 6000000)
|
||||
MDRV_CPU_PROGRAM_MAP(monsterb_7751_map,0)
|
||||
@ -851,18 +867,6 @@ MACHINE_DRIVER_END
|
||||
|
||||
static SOUND_START( monsterb )
|
||||
{
|
||||
static const ppi8255_interface ppi_intf =
|
||||
{
|
||||
1,
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
{ n7751_status_r },
|
||||
{ monsterb_sound_a_w },
|
||||
{ monsterb_sound_b_w },
|
||||
{ n7751_command_w }
|
||||
};
|
||||
ppi8255_init(&ppi_intf);
|
||||
|
||||
state_save_register_global_array(sound_state);
|
||||
state_save_register_global(sound_addr);
|
||||
state_save_register_global(n7751_command);
|
||||
|
@ -65,15 +65,24 @@ static UINT8 color_latch;
|
||||
static WRITE8_HANDLER( astinvad_sound1_w );
|
||||
static WRITE8_HANDLER( astinvad_sound2_w );
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
static const ppi8255_interface ppi8255_intf[2] =
|
||||
{
|
||||
2,
|
||||
{ input_port_0_r, NULL },
|
||||
{ input_port_1_r, input_port_3_r },
|
||||
{ input_port_2_r, NULL },
|
||||
{ NULL, astinvad_sound1_w },
|
||||
{ NULL, astinvad_sound2_w },
|
||||
{ NULL, NULL },
|
||||
{
|
||||
input_port_0_r,
|
||||
input_port_1_r,
|
||||
input_port_2_r,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
input_port_3_r,
|
||||
NULL,
|
||||
astinvad_sound1_w,
|
||||
astinvad_sound2_w,
|
||||
NULL
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -195,7 +204,6 @@ static TIMER_CALLBACK( kamizake_int_gen )
|
||||
|
||||
static MACHINE_START( kamikaze )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
int_timer = timer_alloc(kamizake_int_gen, NULL);
|
||||
timer_adjust_oneshot(int_timer, video_screen_get_time_until_pos(machine->primary_screen, 128, 0), 128);
|
||||
}
|
||||
@ -221,9 +229,9 @@ static READ8_HANDLER( kamikaze_ppi_r )
|
||||
|
||||
/* the address lines are used for /CS; yes, they can overlap! */
|
||||
if (!(offset & 4))
|
||||
result &= ppi8255_0_r(machine, offset);
|
||||
result &= ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), offset);
|
||||
if (!(offset & 8))
|
||||
result &= ppi8255_1_r(machine, offset);
|
||||
result &= ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), offset);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -232,9 +240,9 @@ static WRITE8_HANDLER( kamikaze_ppi_w )
|
||||
{
|
||||
/* the address lines are used for /CS; yes, they can overlap! */
|
||||
if (!(offset & 4))
|
||||
ppi8255_0_w(machine, offset, data);
|
||||
ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), offset, data);
|
||||
if (!(offset & 8))
|
||||
ppi8255_1_w(machine, offset, data);
|
||||
ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), offset, data);
|
||||
}
|
||||
|
||||
|
||||
@ -505,6 +513,12 @@ static MACHINE_DRIVER_START( kamikaze )
|
||||
|
||||
MDRV_MACHINE_START(kamikaze)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_VIDEO_UPDATE(astinvad)
|
||||
|
||||
|
@ -132,22 +132,29 @@ static void create_analog_timers(void)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
static const ppi8255_interface ppi8255_intf[2] =
|
||||
{
|
||||
2, /* 2 chips */
|
||||
{ 0, 0 }, /* Port A read */
|
||||
{ 0, input_port_r }, /* Port B read */
|
||||
{ 0, 0 }, /* Port C read */
|
||||
{ 0, input_port_select_w }, /* Port A write */
|
||||
{ 0, 0 }, /* Port B write */
|
||||
{ 0, 0 /* sound effects */},/* Port C write */
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
input_port_r, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
input_port_select_w, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL /* sound effects, Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
static MACHINE_START( clayshoo )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
|
||||
create_analog_timers();
|
||||
|
||||
/* register for state saving */
|
||||
@ -216,8 +223,8 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( main_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(watchdog_reset_w)
|
||||
AM_RANGE(0x20, 0x23) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0x30, 0x33) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE(0x20, 0x23) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x30, 0x33) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -313,6 +320,11 @@ static MACHINE_DRIVER_START( clayshoo )
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[1] )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
|
@ -125,23 +125,32 @@ static const struct AY8910interface ay8910_interface =
|
||||
};
|
||||
#endif
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
static const ppi8255_interface ppi8255_intf[2] =
|
||||
{
|
||||
2,
|
||||
{ input_port_0_r, input_port_1_r }, /* Port A read */
|
||||
{ input_port_2_r, input_port_3_r }, /* Port B read */
|
||||
{ NULL, input_port_4_r }, /* Port C read */
|
||||
{ NULL, NULL }, /* Port A write */
|
||||
{ NULL, NULL }, /* Port B write */
|
||||
{ NULL, NULL }, /* Port C write */
|
||||
{
|
||||
input_port_0_r, /* Port A read */
|
||||
input_port_2_r, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
},
|
||||
{
|
||||
input_port_1_r, /* Port A read */
|
||||
input_port_3_r, /* Port B read */
|
||||
input_port_4_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
static ADDRESS_MAP_START( merit_mem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE( 0x0000, 0x7fff ) AM_ROM
|
||||
AM_RANGE( 0x8000, 0x9fff ) AM_ROMBANK(1)
|
||||
AM_RANGE( 0xa000, 0xbfff ) AM_RAM AM_BASE(&backup_ram)
|
||||
AM_RANGE( 0xc004, 0xc007 ) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE( 0xc008, 0xc00a ) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE( 0xc004, 0xc007 ) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE( 0xc008, 0xc00a ) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE( 0xc00b, 0xc00b ) AM_WRITE(merit_prot_w)
|
||||
// AM_RANGE( 0xc000, 0xc00f ) AM_READ(dummy_inputs_r)
|
||||
// AM_RANGE( 0xc008, 0xc008 ) AM_READ(input_port_0_r)
|
||||
@ -159,11 +168,6 @@ static ADDRESS_MAP_START( merit_io, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE(0xc10c, 0xc10c) AM_WRITE(AY8910_write_port_0_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static MACHINE_RESET( couple )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
}
|
||||
|
||||
static PALETTE_INIT( couple )
|
||||
{
|
||||
int i;
|
||||
@ -435,7 +439,11 @@ static MACHINE_DRIVER_START( couple )
|
||||
MDRV_CPU_IO_MAP(merit_io,0)
|
||||
MDRV_CPU_VBLANK_INT("main", irq0_line_hold)
|
||||
|
||||
MDRV_MACHINE_RESET(couple)
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
|
@ -159,9 +159,9 @@ static WRITE8_HANDLER( shr_w )
|
||||
static READ8_HANDLER( ioread )
|
||||
{
|
||||
if (offset & 0x08)
|
||||
return ppi8255_0_r(machine, offset & 3);
|
||||
return ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), offset & 3);
|
||||
else if (offset & 0x10)
|
||||
return ppi8255_1_r(machine, offset & 3);
|
||||
return ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), offset & 3);
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
@ -169,9 +169,9 @@ static READ8_HANDLER( ioread )
|
||||
static WRITE8_HANDLER( iowrite )
|
||||
{
|
||||
if (offset & 0x08)
|
||||
ppi8255_0_w(machine, offset & 3, data);
|
||||
ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), offset & 3, data);
|
||||
else if (offset & 0x10)
|
||||
ppi8255_1_w(machine, offset & 3, data);
|
||||
ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), offset & 3, data);
|
||||
else if (offset & 0x40)
|
||||
{
|
||||
dr = ds;
|
||||
@ -187,22 +187,26 @@ static WRITE8_HANDLER( iowrite )
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
static const ppi8255_interface ppi8255_intf[2] =
|
||||
{
|
||||
2,
|
||||
{ dsr_r, NULL },
|
||||
{ input_mux0_r, NULL },
|
||||
{ NULL, input_port_3_r },
|
||||
{ NULL, sound_w },
|
||||
{ NULL, pb_w },
|
||||
{ misc_w, shr_w }
|
||||
{
|
||||
dsr_r,
|
||||
input_mux0_r,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
misc_w
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
input_port_3_r,
|
||||
sound_w,
|
||||
pb_w,
|
||||
shr_w
|
||||
}
|
||||
};
|
||||
|
||||
static MACHINE_RESET( dribling )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
@ -303,7 +307,11 @@ static MACHINE_DRIVER_START( dribling )
|
||||
MDRV_CPU_IO_MAP(readport,writeport)
|
||||
MDRV_CPU_VBLANK_INT("main", dribling_irq_gen)
|
||||
|
||||
MDRV_MACHINE_RESET(dribling)
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
|
||||
|
@ -109,26 +109,25 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( dealer_readport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x10, 0x13) AM_READ(ppi8255_0_r)
|
||||
AM_RANGE(0x10, 0x13) AM_DEVREAD(PPI8255, "ppi8255", ppi8255_r)
|
||||
AM_RANGE(0x38, 0x38) AM_READ(input_port_0_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( dealer_writeport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x10, 0x13) AM_WRITE(ppi8255_0_w)
|
||||
AM_RANGE(0x10, 0x13) AM_DEVWRITE(PPI8255, "ppi8255", ppi8255_w)
|
||||
AM_RANGE(0x20, 0x24) AM_WRITE(dealer_decrypt_rom)
|
||||
// AM_RANGE(0x40, 0x40) AM_WRITE(watchdog_reset_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
{
|
||||
1, /* 1 chip */
|
||||
{ input_port_2_r }, /* Port A read */
|
||||
{ NULL }, /* Port B read */
|
||||
{ NULL }, /* Port C read */
|
||||
{ NULL }, /* Port A write */
|
||||
{ NULL }, /* Port B write */
|
||||
{ NULL }, /* Port C write */
|
||||
input_port_2_r, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL, /* Port C write */
|
||||
};
|
||||
|
||||
/*************************************
|
||||
@ -376,6 +375,9 @@ static MACHINE_DRIVER_START( dealer )
|
||||
MDRV_CPU_IO_MAP(dealer_readport,dealer_writeport)
|
||||
MDRV_CPU_VBLANK_INT("main", irq0_line_hold)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_VIDEO_UPDATE(epos)
|
||||
|
||||
@ -558,8 +560,6 @@ ROM_END
|
||||
static MACHINE_RESET( dealer )
|
||||
{
|
||||
memory_set_bankptr(1, memory_region(REGION_CPU1));
|
||||
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( dealer )
|
||||
|
@ -474,15 +474,24 @@ static WRITE8_HANDLER( sys_reset_w )
|
||||
}
|
||||
|
||||
|
||||
static const ppi8255_interface filetto_ppi8255_intf =
|
||||
static const ppi8255_interface filetto_ppi8255_intf[2] =
|
||||
{
|
||||
2, /* 2 chips */
|
||||
{ port_a_r,NULL }, /* Port A read */
|
||||
{ port_b_r,NULL }, /* Port B read */
|
||||
{ port_c_r,NULL }, /* Port C read */
|
||||
{ NULL ,wss_1_w }, /* Port A write */
|
||||
{ port_b_w,wss_2_w }, /* Port B write */
|
||||
{ NULL ,sys_reset_w }, /* Port C write */
|
||||
{
|
||||
port_a_r, /* Port A read */
|
||||
port_b_r, /* Port B read */
|
||||
port_c_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
port_b_w, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
wss_1_w, /* Port A write */
|
||||
wss_2_w, /* Port B write */
|
||||
sys_reset_w /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
static UINT8 irq_data[2];
|
||||
@ -546,8 +555,8 @@ static ADDRESS_MAP_START( filetto_io, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE(0x0000, 0x000f) AM_RAM //AM_READWRITE(dma8237_0_r,dma8237_0_w) //8237 DMA Controller
|
||||
AM_RANGE(0x0020, 0x0021) AM_READWRITE(irq_ctrl_8259_r,irq_ctrl_8259_w)//AM_READWRITE(pic8259_0_r,pic8259_0_w) //8259 Interrupt control
|
||||
AM_RANGE(0x0040, 0x0043) AM_READ(kludge_r) //AM_READWRITE(pit8253_0_r,pit8253_0_w) //8253 PIT
|
||||
AM_RANGE(0x0060, 0x0063) AM_READWRITE(ppi8255_0_r,ppi8255_0_w) //PPI 8255
|
||||
AM_RANGE(0x0064, 0x0066) AM_READWRITE(ppi8255_1_r,ppi8255_1_w) //PPI 8255
|
||||
AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r,ppi8255_w) //PPI 8255
|
||||
AM_RANGE(0x0064, 0x0066) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r,ppi8255_w) //PPI 8255
|
||||
AM_RANGE(0x0073, 0x0073) AM_READ(undefined_r)
|
||||
AM_RANGE(0x0080, 0x0087) AM_RAM //AM_READWRITE(dma_page_select_r,dma_page_select_w)
|
||||
AM_RANGE(0x00a0, 0x00a0) AM_WRITE(nmi_enable_w)
|
||||
@ -650,11 +659,6 @@ static GFXDECODE_START( filetto )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
static MACHINE_RESET(filetto)
|
||||
{
|
||||
ppi8255_init(&filetto_ppi8255_intf);
|
||||
}
|
||||
|
||||
/*
|
||||
BLACK = 0
|
||||
BLUE = 1
|
||||
@ -740,6 +744,12 @@ static MACHINE_DRIVER_START( filetto )
|
||||
MDRV_DEVICE_ADD( "pit8253", PIT8253 )
|
||||
MDRV_DEVICE_CONFIG( pc_pit8253_config )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( filetto_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( filetto_ppi8255_intf[1] )
|
||||
|
||||
MDRV_GFXDECODE(filetto)
|
||||
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
@ -751,7 +761,6 @@ static MACHINE_DRIVER_START( filetto )
|
||||
|
||||
MDRV_PALETTE_LENGTH(0x100)
|
||||
|
||||
MDRV_MACHINE_RESET(filetto)
|
||||
MDRV_PALETTE_INIT(filetto)
|
||||
|
||||
MDRV_VIDEO_START(filetto)
|
||||
|
@ -102,21 +102,28 @@ static WRITE8_HANDLER( sound_w )
|
||||
// popmessage("%02x",data);
|
||||
}
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
static const ppi8255_interface ppi8255_intf[2] =
|
||||
{
|
||||
2, /* 2 chips */
|
||||
{ input_port_0_r, input_port_2_r }, /* Port A read */
|
||||
{ port1_r, NULL }, /* Port B read */
|
||||
{ NULL, portC_r }, /* Port C read */
|
||||
{ NULL, NULL }, /* Port A write */
|
||||
{ NULL, lamps_w }, /* Port B write */
|
||||
{ sound_w, NULL }, /* Port C write */
|
||||
{
|
||||
input_port_0_r, /* Port A read */
|
||||
port1_r, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
sound_w, /* Port C write */
|
||||
},
|
||||
{
|
||||
input_port_2_r, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
portC_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
lamps_w, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
static MACHINE_RESET( findout )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
|
||||
ticket_dispenser_init(100, 1, 1);
|
||||
}
|
||||
|
||||
@ -183,8 +190,8 @@ static WRITE8_HANDLER( signature_w )
|
||||
static ADDRESS_MAP_START( readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x3fff) AM_READ(SMH_ROM)
|
||||
AM_RANGE(0x4000, 0x47ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x4800, 0x4803) AM_READ(ppi8255_0_r)
|
||||
AM_RANGE(0x5000, 0x5003) AM_READ(ppi8255_1_r)
|
||||
AM_RANGE(0x4800, 0x4803) AM_DEVREAD(PPI8255, "ppi8255_0", ppi8255_r)
|
||||
AM_RANGE(0x5000, 0x5003) AM_DEVREAD(PPI8255, "ppi8255_1", ppi8255_r)
|
||||
AM_RANGE(0x6400, 0x6400) AM_READ(signature_r)
|
||||
AM_RANGE(0x7800, 0x7fff) AM_READ(SMH_ROM)
|
||||
AM_RANGE(0x8000, 0xffff) AM_READ(SMH_BANK1)
|
||||
@ -194,8 +201,8 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x3fff) AM_WRITE(SMH_ROM)
|
||||
AM_RANGE(0x4000, 0x47ff) AM_WRITE(SMH_RAM) AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
|
||||
AM_RANGE(0x4800, 0x4803) AM_WRITE(ppi8255_0_w)
|
||||
AM_RANGE(0x5000, 0x5003) AM_WRITE(ppi8255_1_w)
|
||||
AM_RANGE(0x4800, 0x4803) AM_DEVWRITE(PPI8255, "ppi8255_0", ppi8255_w)
|
||||
AM_RANGE(0x5000, 0x5003) AM_DEVWRITE(PPI8255, "ppi8255_1", ppi8255_w)
|
||||
/* banked ROMs are enabled by low 6 bits of the address */
|
||||
AM_RANGE(0x603e, 0x603e) AM_WRITE(banksel_1_w)
|
||||
AM_RANGE(0x603d, 0x603d) AM_WRITE(banksel_2_w)
|
||||
@ -464,6 +471,12 @@ static MACHINE_DRIVER_START( findout )
|
||||
MDRV_VIDEO_START(generic_bitmapped)
|
||||
MDRV_VIDEO_UPDATE(generic_bitmapped)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[1] )
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
|
@ -221,8 +221,8 @@ static ADDRESS_MAP_START( freekckb_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0xd000, 0xdfff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0xe000, 0xe7ff) AM_READ(SMH_RAM) // tilemap
|
||||
AM_RANGE(0xe800, 0xe8ff) AM_READ(SMH_RAM) // sprites
|
||||
AM_RANGE(0xec00, 0xec03) AM_READ(ppi8255_0_r)
|
||||
AM_RANGE(0xf000, 0xf003) AM_READ(ppi8255_1_r)
|
||||
AM_RANGE(0xec00, 0xec03) AM_DEVREAD(PPI8255, "ppi8255_0", ppi8255_r)
|
||||
AM_RANGE(0xf000, 0xf003) AM_DEVREAD(PPI8255, "ppi8255_1", ppi8255_r)
|
||||
AM_RANGE(0xf800, 0xf800) AM_READ(input_port_3_r)
|
||||
AM_RANGE(0xf801, 0xf801) AM_READ(input_port_4_r)
|
||||
AM_RANGE(0xf802, 0xf802) AM_READ(SMH_NOP) //MUST return bit 0 = 0, otherwise game resets
|
||||
@ -234,8 +234,8 @@ static ADDRESS_MAP_START( freekckb_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0xd000, 0xdfff) AM_WRITE(SMH_RAM)
|
||||
AM_RANGE(0xe000, 0xe7ff) AM_WRITE(freek_videoram_w) AM_BASE(&freek_videoram)
|
||||
AM_RANGE(0xe800, 0xe8ff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
|
||||
AM_RANGE(0xec00, 0xec03) AM_WRITE(ppi8255_0_w)
|
||||
AM_RANGE(0xf000, 0xf003) AM_WRITE(ppi8255_1_w)
|
||||
AM_RANGE(0xec00, 0xec03) AM_DEVWRITE(PPI8255, "ppi8255_0", ppi8255_w)
|
||||
AM_RANGE(0xf000, 0xf003) AM_DEVWRITE(PPI8255, "ppi8255_1", ppi8255_w)
|
||||
AM_RANGE(0xf800, 0xf801) AM_WRITE(flipscreen_w)
|
||||
AM_RANGE(0xf802, 0xf803) AM_WRITE(coin_w)
|
||||
AM_RANGE(0xf804, 0xf804) AM_WRITE(nmi_enable_w)
|
||||
@ -597,22 +597,26 @@ static READ8_HANDLER( snd_rom_r )
|
||||
return memory_region(REGION_USER1)[romaddr & 0x7fff];
|
||||
}
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
static const ppi8255_interface ppi8255_intf[2] =
|
||||
{
|
||||
2, /* 1 chips */
|
||||
{ NULL, input_port_0_r }, /* Port A read */
|
||||
{ NULL, input_port_1_r }, /* Port B read */
|
||||
{ snd_rom_r, input_port_2_r }, /* Port C read */
|
||||
{ snd_rom_addr_l_w, NULL }, /* Port A write */
|
||||
{ snd_rom_addr_h_w, NULL }, /* Port B write */
|
||||
{ NULL, NULL }, /* Port C write */
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
snd_rom_r, /* Port C read */
|
||||
snd_rom_addr_l_w, /* Port A write */
|
||||
snd_rom_addr_h_w, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
},
|
||||
{
|
||||
input_port_0_r, /* Port A read */
|
||||
input_port_1_r, /* Port B read */
|
||||
input_port_2_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
static MACHINE_RESET( freekckb )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
@ -709,7 +713,11 @@ static MACHINE_DRIVER_START( freekckb )
|
||||
MDRV_CPU_PROGRAM_MAP(freekckb_readmem,freekckb_writemem)
|
||||
MDRV_CPU_IO_MAP(freekckb_readport,freekckb_writeport)
|
||||
|
||||
MDRV_MACHINE_RESET(freekckb)
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[1] )
|
||||
|
||||
MDRV_VIDEO_UPDATE(freekick)
|
||||
MACHINE_DRIVER_END
|
||||
|
@ -397,15 +397,24 @@ static WRITE8_HANDLER( konami_portc_1_w )
|
||||
}
|
||||
|
||||
|
||||
static const ppi8255_interface konami_ppi8255_intf =
|
||||
static const ppi8255_interface konami_ppi8255_intf[2] =
|
||||
{
|
||||
2,
|
||||
{ konami_porta_0_r, NULL }, /* Port A read */
|
||||
{ konami_portb_0_r, NULL }, /* Port B read */
|
||||
{ konami_portc_0_r, konami_portc_1_r }, /* Port C read */
|
||||
{ NULL, soundlatch_w }, /* Port A write */
|
||||
{ NULL, konami_sound_control_w }, /* Port B write */
|
||||
{ konami_portc_0_w, konami_portc_1_w }, /* Port C write */
|
||||
{
|
||||
konami_porta_0_r, /* Port A read */
|
||||
konami_portb_0_r, /* Port B read */
|
||||
konami_portc_0_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
konami_portc_0_w /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
konami_portc_1_r, /* Port C read */
|
||||
soundlatch_w, /* Port A write */
|
||||
konami_sound_control_w, /* Port B write */
|
||||
konami_portc_1_w /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -420,8 +429,8 @@ static READ8_HANDLER( theend_ppi8255_r )
|
||||
{
|
||||
/* the decoding here is very simplistic, and you can address both simultaneously */
|
||||
UINT8 result = 0xff;
|
||||
if (offset & 0x0100) result &= ppi8255_0_r(machine, offset & 3);
|
||||
if (offset & 0x0200) result &= ppi8255_1_r(machine, offset & 3);
|
||||
if (offset & 0x0100) result &= ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), offset & 3);
|
||||
if (offset & 0x0200) result &= ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), offset & 3);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -429,8 +438,8 @@ static READ8_HANDLER( theend_ppi8255_r )
|
||||
static WRITE8_HANDLER( theend_ppi8255_w )
|
||||
{
|
||||
/* the decoding here is very simplistic, and you can address both simultaneously */
|
||||
if (offset & 0x0100) ppi8255_0_w(machine, offset & 3, data);
|
||||
if (offset & 0x0200) ppi8255_1_w(machine, offset & 3, data);
|
||||
if (offset & 0x0100) ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), offset & 3, data);
|
||||
if (offset & 0x0200) ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), offset & 3, data);
|
||||
}
|
||||
|
||||
|
||||
@ -440,6 +449,27 @@ static WRITE8_HANDLER( theend_coin_counter_w )
|
||||
}
|
||||
|
||||
|
||||
static const ppi8255_interface theend_ppi8255_intf[2] =
|
||||
{
|
||||
{
|
||||
konami_porta_0_r, /* Port A read */
|
||||
konami_portb_0_r, /* Port B read */
|
||||
konami_portc_0_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
theend_coin_counter_w /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
konami_portc_1_r, /* Port C read */
|
||||
soundlatch_w, /* Port A write */
|
||||
konami_sound_control_w, /* Port B write */
|
||||
konami_portc_1_w /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
@ -488,6 +518,26 @@ static CUSTOM_INPUT( scramble_protection_alt_r )
|
||||
}
|
||||
|
||||
|
||||
static const ppi8255_interface scramble_ppi8255_intf[2] =
|
||||
{
|
||||
{
|
||||
konami_porta_0_r, /* Port A read */
|
||||
konami_portb_0_r, /* Port B read */
|
||||
konami_portc_0_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
konami_portc_0_w /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
scramble_protection_r, /* Port C read */
|
||||
soundlatch_w, /* Port A write */
|
||||
konami_sound_control_w, /* Port B write */
|
||||
scramble_protection_w /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
@ -519,7 +569,7 @@ static READ8_HANDLER( sfx_sample_io_r )
|
||||
{
|
||||
/* the decoding here is very simplistic, and you can address both simultaneously */
|
||||
UINT8 result = 0xff;
|
||||
if (offset & 0x04) result &= ppi8255_2_r(machine, offset & 3);
|
||||
if (offset & 0x04) result &= ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_2" ), offset & 3);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -527,7 +577,7 @@ static READ8_HANDLER( sfx_sample_io_r )
|
||||
static WRITE8_HANDLER( sfx_sample_io_w )
|
||||
{
|
||||
/* the decoding here is very simplistic, and you can address both simultaneously */
|
||||
if (offset & 0x04) ppi8255_2_w(machine, offset & 3, data);
|
||||
if (offset & 0x04) ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_2" ), offset & 3, data);
|
||||
if (offset & 0x10) DAC_0_signed_data_w(machine, offset, data);
|
||||
}
|
||||
|
||||
@ -544,15 +594,32 @@ static WRITE8_HANDLER( sfx_sample_control_w )
|
||||
}
|
||||
|
||||
|
||||
static const ppi8255_interface sfx_ppi8255_intf =
|
||||
static const ppi8255_interface sfx_ppi8255_intf[3] =
|
||||
{
|
||||
3,
|
||||
{ konami_porta_0_r, NULL, soundlatch2_r }, /* Port A read */
|
||||
{ konami_portb_0_r, NULL, NULL }, /* Port B read */
|
||||
{ konami_portc_0_r, konami_portc_1_r, NULL }, /* Port C read */
|
||||
{ NULL, soundlatch_w, NULL }, /* Port A write */
|
||||
{ NULL, konami_sound_control_w, NULL }, /* Port B write */
|
||||
{ konami_portc_0_w, konami_portc_1_w, NULL }, /* Port C write */
|
||||
{
|
||||
konami_porta_0_r, /* Port A read */
|
||||
konami_portb_0_r, /* Port B read */
|
||||
konami_portc_0_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
konami_portc_0_w /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
konami_portc_1_r, /* Port C read */
|
||||
soundlatch_w, /* Port A write */
|
||||
konami_sound_control_w, /* Port B write */
|
||||
konami_portc_1_w /* Port C write */
|
||||
},
|
||||
{
|
||||
soundlatch2_r, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -567,8 +634,8 @@ static READ8_HANDLER( frogger_ppi8255_r )
|
||||
{
|
||||
/* the decoding here is very simplistic, and you can address both simultaneously */
|
||||
UINT8 result = 0xff;
|
||||
if (offset & 0x1000) result &= ppi8255_1_r(machine, (offset >> 1) & 3);
|
||||
if (offset & 0x2000) result &= ppi8255_0_r(machine, (offset >> 1) & 3);
|
||||
if (offset & 0x1000) result &= ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), (offset >> 1) & 3);
|
||||
if (offset & 0x2000) result &= ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), (offset >> 1) & 3);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -576,8 +643,8 @@ static READ8_HANDLER( frogger_ppi8255_r )
|
||||
static WRITE8_HANDLER( frogger_ppi8255_w )
|
||||
{
|
||||
/* the decoding here is very simplistic, and you can address both simultaneously */
|
||||
if (offset & 0x1000) ppi8255_1_w(machine, (offset >> 1) & 3, data);
|
||||
if (offset & 0x2000) ppi8255_0_w(machine, (offset >> 1) & 3, data);
|
||||
if (offset & 0x1000) ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), (offset >> 1) & 3, data);
|
||||
if (offset & 0x2000) ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), (offset >> 1) & 3, data);
|
||||
}
|
||||
|
||||
|
||||
@ -623,8 +690,8 @@ static READ8_HANDLER( frogf_ppi8255_r )
|
||||
{
|
||||
/* the decoding here is very simplistic, and you can address both simultaneously */
|
||||
UINT8 result = 0xff;
|
||||
if (offset & 0x1000) result &= ppi8255_0_r(machine, (offset >> 3) & 3);
|
||||
if (offset & 0x2000) result &= ppi8255_1_r(machine, (offset >> 3) & 3);
|
||||
if (offset & 0x1000) result &= ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), (offset >> 3) & 3);
|
||||
if (offset & 0x2000) result &= ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), (offset >> 3) & 3);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -632,8 +699,8 @@ static READ8_HANDLER( frogf_ppi8255_r )
|
||||
static WRITE8_HANDLER( frogf_ppi8255_w )
|
||||
{
|
||||
/* the decoding here is very simplistic, and you can address both simultaneously */
|
||||
if (offset & 0x1000) ppi8255_0_w(machine, (offset >> 3) & 3, data);
|
||||
if (offset & 0x2000) ppi8255_1_w(machine, (offset >> 3) & 3, data);
|
||||
if (offset & 0x1000) ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), (offset >> 3) & 3, data);
|
||||
if (offset & 0x2000) ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), (offset >> 3) & 3, data);
|
||||
}
|
||||
|
||||
|
||||
@ -644,10 +711,10 @@ static WRITE8_HANDLER( frogf_ppi8255_w )
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static READ8_HANDLER( turtles_ppi8255_0_r ) { return ppi8255_0_r(machine, (offset >> 4) & 3); }
|
||||
static READ8_HANDLER( turtles_ppi8255_1_r ) { return ppi8255_1_r(machine, (offset >> 4) & 3); }
|
||||
static WRITE8_HANDLER( turtles_ppi8255_0_w ) { ppi8255_0_w(machine, (offset >> 4) & 3, data); }
|
||||
static WRITE8_HANDLER( turtles_ppi8255_1_w ) { ppi8255_1_w(machine, (offset >> 4) & 3, data); }
|
||||
static READ8_HANDLER( turtles_ppi8255_0_r ) { return ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), (offset >> 4) & 3); }
|
||||
static READ8_HANDLER( turtles_ppi8255_1_r ) { return ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), (offset >> 4) & 3); }
|
||||
static WRITE8_HANDLER( turtles_ppi8255_0_w ) { ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), (offset >> 4) & 3, data); }
|
||||
static WRITE8_HANDLER( turtles_ppi8255_1_w ) { ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), (offset >> 4) & 3, data); }
|
||||
|
||||
|
||||
|
||||
@ -732,6 +799,27 @@ static WRITE8_HANDLER( scorpion_sound_control_w )
|
||||
}
|
||||
|
||||
|
||||
static const ppi8255_interface scorpion_ppi8255_intf[2] =
|
||||
{
|
||||
{
|
||||
konami_porta_0_r, /* Port A read */
|
||||
konami_portb_0_r, /* Port B read */
|
||||
konami_portc_0_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
konami_portc_0_w /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
scorpion_protection_r, /* Port C read */
|
||||
soundlatch_w, /* Port A write */
|
||||
konami_sound_control_w, /* Port B write */
|
||||
scorpion_protection_w /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
@ -1148,8 +1236,8 @@ static ADDRESS_MAP_START( scobra_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x4000) AM_RAM
|
||||
AM_RANGE(0x8800, 0x8bff) AM_MIRROR(0x4400) AM_RAM_WRITE(galaxian_videoram_w) AM_BASE(&videoram)
|
||||
AM_RANGE(0x9000, 0x90ff) AM_MIRROR(0x4700) AM_RAM_WRITE(galaxian_objram_w) AM_BASE(&spriteram)
|
||||
AM_RANGE(0x9800, 0x9803) AM_MIRROR(0x47fc) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0xa000, 0xa003) AM_MIRROR(0x47fc) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE(0x9800, 0x9803) AM_MIRROR(0x47fc) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xa000, 0xa003) AM_MIRROR(0x47fc) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xa801, 0xa801) AM_MIRROR(0x47f8) AM_WRITE(irq_enable_w)
|
||||
AM_RANGE(0xa802, 0xa802) AM_MIRROR(0x47f8) AM_WRITE(coin_count_0_w)
|
||||
AM_RANGE(0xa803, 0xa803) AM_MIRROR(0x47f8) AM_WRITE(scramble_background_enable_w)
|
||||
@ -1582,6 +1670,17 @@ static MACHINE_DRIVER_START( galaxian_sound )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( konami_base )
|
||||
MDRV_IMPORT_FROM( galaxian_base )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( konami_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( konami_ppi8255_intf[1] )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( konami_sound_1x_ay8910 )
|
||||
|
||||
/* 2nd CPU to drive sound */
|
||||
@ -1758,7 +1857,7 @@ MACHINE_DRIVER_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( frogger )
|
||||
MDRV_IMPORT_FROM(galaxian_base)
|
||||
MDRV_IMPORT_FROM(konami_base)
|
||||
MDRV_IMPORT_FROM(konami_sound_1x_ay8910)
|
||||
|
||||
/* alternate memory map */
|
||||
@ -1778,7 +1877,7 @@ MACHINE_DRIVER_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( froggers )
|
||||
MDRV_IMPORT_FROM(galaxian_base)
|
||||
MDRV_IMPORT_FROM(konami_base)
|
||||
MDRV_IMPORT_FROM(konami_sound_1x_ay8910)
|
||||
|
||||
/* alternate memory map */
|
||||
@ -1788,7 +1887,7 @@ MACHINE_DRIVER_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( frogf )
|
||||
MDRV_IMPORT_FROM(galaxian_base)
|
||||
MDRV_IMPORT_FROM(konami_base)
|
||||
MDRV_IMPORT_FROM(konami_sound_1x_ay8910)
|
||||
|
||||
/* alternate memory map */
|
||||
@ -1798,7 +1897,7 @@ MACHINE_DRIVER_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( turtles )
|
||||
MDRV_IMPORT_FROM(galaxian_base)
|
||||
MDRV_IMPORT_FROM(konami_base)
|
||||
MDRV_IMPORT_FROM(konami_sound_2x_ay8910)
|
||||
|
||||
/* alternate memory map */
|
||||
@ -1814,11 +1913,33 @@ static MACHINE_DRIVER_START( theend )
|
||||
/* alternate memory map */
|
||||
MDRV_CPU_MODIFY("main")
|
||||
MDRV_CPU_PROGRAM_MAP(theend_map,0)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( theend_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( theend_ppi8255_intf[1] )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( scramble )
|
||||
MDRV_IMPORT_FROM(galaxian_base)
|
||||
MDRV_IMPORT_FROM(konami_sound_2x_ay8910)
|
||||
|
||||
/* alternate memory map */
|
||||
MDRV_CPU_MODIFY("main")
|
||||
MDRV_CPU_PROGRAM_MAP(theend_map,0)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( scramble_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( scramble_ppi8255_intf[1] )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( explorer )
|
||||
MDRV_IMPORT_FROM(galaxian_base)
|
||||
MDRV_IMPORT_FROM(konami_base)
|
||||
|
||||
/* alternate memory map */
|
||||
MDRV_CPU_MODIFY("main")
|
||||
@ -1843,6 +1964,12 @@ MACHINE_DRIVER_END
|
||||
static MACHINE_DRIVER_START( scorpion )
|
||||
MDRV_IMPORT_FROM(theend)
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( scorpion_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( scorpion_ppi8255_intf[1] )
|
||||
|
||||
/* extra AY8910 with I/O ports */
|
||||
MDRV_SOUND_ADD_TAG("8910.2", AY8910, KONAMI_SOUND_CLOCK/8)
|
||||
MDRV_SOUND_CONFIG(scorpion_ay8910_interface)
|
||||
@ -1865,6 +1992,15 @@ static MACHINE_DRIVER_START( sfx )
|
||||
MDRV_CPU_PROGRAM_MAP(sfx_sample_map,0)
|
||||
MDRV_CPU_IO_MAP(sfx_sample_portmap,0)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( sfx_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( sfx_ppi8255_intf[1] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_2", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( sfx_ppi8255_intf[2] )
|
||||
|
||||
/* port on 1st 8910 is used for communication */
|
||||
MDRV_SOUND_MODIFY("8910.0")
|
||||
MDRV_SOUND_CONFIG(sfx_ay8910_interface)
|
||||
@ -1876,7 +2012,7 @@ MACHINE_DRIVER_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( scobra )
|
||||
MDRV_IMPORT_FROM(galaxian_base)
|
||||
MDRV_IMPORT_FROM(konami_base)
|
||||
MDRV_IMPORT_FROM(konami_sound_2x_ay8910)
|
||||
|
||||
/* alternate memory map */
|
||||
@ -2082,21 +2218,6 @@ static void common_init(
|
||||
}
|
||||
|
||||
|
||||
static void konami_common_init(
|
||||
running_machine *machine,
|
||||
galaxian_draw_bullet_func draw_bullet,
|
||||
galaxian_draw_background_func draw_background,
|
||||
galaxian_extend_tile_info_func extend_tile_info,
|
||||
galaxian_extend_sprite_info_func extend_sprite_info)
|
||||
{
|
||||
/* basic configuration */
|
||||
common_init(machine, draw_bullet, draw_background, extend_tile_info, extend_sprite_info);
|
||||
|
||||
/* configure Konami sound */
|
||||
ppi8255_init(&konami_ppi8255_intf);
|
||||
}
|
||||
|
||||
|
||||
static void unmap_galaxian_sound(running_machine *machine, offs_t base)
|
||||
{
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, base + 0x0004, base + 0x0007, 0, 0x07f8, SMH_UNMAP);
|
||||
@ -2441,29 +2562,24 @@ static DRIVER_INIT( scorpnmc )
|
||||
static DRIVER_INIT( theend )
|
||||
{
|
||||
/* video extensions */
|
||||
konami_common_init(machine, theend_draw_bullet, galaxian_draw_background, NULL, NULL);
|
||||
common_init(machine, theend_draw_bullet, galaxian_draw_background, NULL, NULL);
|
||||
|
||||
/* coin counter on the upper bit of port C */
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x6802, 0x6802, 0, 0x7f8, SMH_UNMAP);
|
||||
ppi8255_set_portCwrite(0, theend_coin_counter_w);
|
||||
}
|
||||
|
||||
|
||||
static DRIVER_INIT( scramble )
|
||||
{
|
||||
/* video extensions */
|
||||
konami_common_init(machine, scramble_draw_bullet, scramble_draw_background, NULL, NULL);
|
||||
|
||||
/* configure protection */
|
||||
ppi8255_set_portCread (1, scramble_protection_r);
|
||||
ppi8255_set_portCwrite(1, scramble_protection_w);
|
||||
common_init(machine, scramble_draw_bullet, scramble_draw_background, NULL, NULL);
|
||||
}
|
||||
|
||||
|
||||
static DRIVER_INIT( explorer )
|
||||
{
|
||||
/* video extensions */
|
||||
konami_common_init(machine, scramble_draw_bullet, scramble_draw_background, NULL, NULL);
|
||||
common_init(machine, scramble_draw_bullet, scramble_draw_background, NULL, NULL);
|
||||
|
||||
/* watchdog works for writes as well? (or is it just disabled?) */
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x7000, 0x7000, 0, 0x7ff, watchdog_reset_w);
|
||||
@ -2485,9 +2601,6 @@ static DRIVER_INIT( sfx )
|
||||
common_init(machine, scramble_draw_bullet, scramble_draw_background, upper_extend_tile_info, NULL);
|
||||
galaxian_sfx_tilemap = TRUE;
|
||||
|
||||
/* sfx uses 3 x 8255, so we need a non-standard interface */
|
||||
ppi8255_init(&sfx_ppi8255_intf);
|
||||
|
||||
/* sound board has space for extra ROM */
|
||||
memory_install_read8_handler(machine, 1, ADDRESS_SPACE_PROGRAM, 0x0000, 0x3fff, 0, 0, SMH_BANK1);
|
||||
memory_set_bankptr(1, memory_region(REGION_CPU2));
|
||||
@ -2497,7 +2610,7 @@ static DRIVER_INIT( sfx )
|
||||
static DRIVER_INIT( atlantis )
|
||||
{
|
||||
/* video extensions */
|
||||
konami_common_init(machine, scramble_draw_bullet, scramble_draw_background, NULL, NULL);
|
||||
common_init(machine, scramble_draw_bullet, scramble_draw_background, NULL, NULL);
|
||||
|
||||
/* watchdog is at $7800? (or is it just disabled?) */
|
||||
memory_install_read8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x7000, 0x7000, 0, 0x7ff, SMH_UNMAP);
|
||||
@ -2508,14 +2621,14 @@ static DRIVER_INIT( atlantis )
|
||||
static DRIVER_INIT( scobra )
|
||||
{
|
||||
/* video extensions */
|
||||
konami_common_init(machine, scramble_draw_bullet, scramble_draw_background, NULL, NULL);
|
||||
common_init(machine, scramble_draw_bullet, scramble_draw_background, NULL, NULL);
|
||||
}
|
||||
|
||||
|
||||
static DRIVER_INIT( losttomb )
|
||||
{
|
||||
/* video extensions */
|
||||
konami_common_init(machine, scramble_draw_bullet, scramble_draw_background, NULL, NULL);
|
||||
common_init(machine, scramble_draw_bullet, scramble_draw_background, NULL, NULL);
|
||||
|
||||
/* decrypt */
|
||||
decode_losttomb_gfx();
|
||||
@ -2525,7 +2638,7 @@ static DRIVER_INIT( losttomb )
|
||||
static DRIVER_INIT( frogger )
|
||||
{
|
||||
/* video extensions */
|
||||
konami_common_init(machine, NULL, frogger_draw_background, frogger_extend_tile_info, frogger_extend_sprite_info);
|
||||
common_init(machine, NULL, frogger_draw_background, frogger_extend_tile_info, frogger_extend_sprite_info);
|
||||
galaxian_frogger_adjust = TRUE;
|
||||
|
||||
/* decrypt */
|
||||
@ -2554,7 +2667,7 @@ static DRIVER_INIT( froggrmc )
|
||||
static DRIVER_INIT( froggers )
|
||||
{
|
||||
/* video extensions */
|
||||
konami_common_init(machine, NULL, frogger_draw_background, frogger_extend_tile_info, frogger_extend_sprite_info);
|
||||
common_init(machine, NULL, frogger_draw_background, frogger_extend_tile_info, frogger_extend_sprite_info);
|
||||
|
||||
/* decrypt */
|
||||
decode_frogger_sound();
|
||||
@ -2564,7 +2677,7 @@ static DRIVER_INIT( froggers )
|
||||
static DRIVER_INIT( turtles )
|
||||
{
|
||||
/* video extensions */
|
||||
konami_common_init(machine, NULL, turtles_draw_background, NULL, NULL);
|
||||
common_init(machine, NULL, turtles_draw_background, NULL, NULL);
|
||||
}
|
||||
|
||||
|
||||
@ -2573,22 +2686,18 @@ static DRIVER_INIT( amidar )
|
||||
{
|
||||
/* no existing amidar sets run on Amidar hardware as described by Amidar schematics! */
|
||||
/* video extensions */
|
||||
konami_common_init(machine, scramble_draw_bullet, amidar_draw_background, NULL, NULL);
|
||||
common_init(machine, scramble_draw_bullet, amidar_draw_background, NULL, NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static DRIVER_INIT( scorpion )
|
||||
{
|
||||
konami_common_init(machine, scramble_draw_bullet, scramble_draw_background, batman2_extend_tile_info, upper_extend_sprite_info);
|
||||
common_init(machine, scramble_draw_bullet, scramble_draw_background, batman2_extend_tile_info, upper_extend_sprite_info);
|
||||
|
||||
/* hook up AY8910 */
|
||||
memory_install_readwrite8_handler(machine, 1, ADDRESS_SPACE_IO, 0x00, 0xff, 0, 0, scorpion_ay8910_r, scorpion_ay8910_w);
|
||||
|
||||
/* configure protection */
|
||||
ppi8255_set_portCwrite(1, scorpion_protection_w);
|
||||
ppi8255_set_portCread(1, scorpion_protection_r);
|
||||
|
||||
/* extra ROM */
|
||||
memory_install_read8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x5800, 0x67ff, 0, 0, SMH_BANK1);
|
||||
memory_set_bankptr(1, memory_region(REGION_CPU1) + 0x5800);
|
||||
@ -2620,7 +2729,7 @@ static DRIVER_INIT( scorpion )
|
||||
static DRIVER_INIT( anteater )
|
||||
{
|
||||
/* video extensions */
|
||||
konami_common_init(machine, scramble_draw_bullet, scramble_draw_background, NULL, NULL);
|
||||
common_init(machine, scramble_draw_bullet, scramble_draw_background, NULL, NULL);
|
||||
|
||||
/* decode graphics */
|
||||
decode_anteater_gfx();
|
||||
|
@ -4737,16 +4737,16 @@ GAME( 1982, amidaru, amidar, turtles, amidaru, turtles, ROT90, "Konami (S
|
||||
GAME( 1982, amidaro, amidar, turtles, amidaro, turtles, ROT90, "Konami (Olympia license)", "Amidar (Olympia)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1982, amidarb, amidar, turtles, amidaru, turtles, ROT90, "bootleg", "Amidar (Bootleg)", GAME_SUPPORTS_SAVE ) /* Simular to Amigo bootleg */
|
||||
GAME( 1982, amigo, amidar, turtles, amidaru, turtles, ROT90, "bootleg", "Amigo", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1982, amidars, amidar, theend, amidars, scramble, ROT90, "Konami", "Amidar (Scramble hardware)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1982, amidars, amidar, scramble, amidars, scramble, ROT90, "Konami", "Amidar (Scramble hardware)", GAME_SUPPORTS_SAVE )
|
||||
|
||||
|
||||
/* The End/Scramble based hardware */
|
||||
GAME( 1980, theend, 0, theend, theend, theend, ROT90, "Konami", "The End", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1980, theends, theend, theend, theend, theend, ROT90, "[Konami] (Stern license)", "The End (Stern)", GAME_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1981, scramble, 0, theend, scramble, scramble, ROT90, "Konami", "Scramble", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1981, scrambls, scramble, theend, scramble, scramble, ROT90, "[Konami] (Stern license)", "Scramble (Stern)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1981, strfbomb, scramble, theend, strfbomb, scramble, ROT90, "Omni", "Strafe Bomb", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1981, scramble, 0, scramble, scramble, scramble, ROT90, "Konami", "Scramble", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1981, scrambls, scramble, scramble, scramble, scramble, ROT90, "[Konami] (Stern license)", "Scramble (Stern)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1981, strfbomb, scramble, scramble, strfbomb, scramble, ROT90, "Omni", "Strafe Bomb", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1981, explorer, scramble, explorer, explorer, explorer, ROT90, "bootleg", "Explorer", GAME_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1981, atlantis, 0, theend, atlantis, atlantis, ROT90, "Comsoft", "Battle of Atlantis (set 1)", GAME_SUPPORTS_SAVE )
|
||||
|
@ -233,8 +233,8 @@ static ADDRESS_MAP_START( getrivia_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x1fff) AM_ROM
|
||||
AM_RANGE(0x2000, 0x3fff) AM_ROMBANK(1)
|
||||
AM_RANGE(0x4000, 0x47ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
|
||||
AM_RANGE(0x4800, 0x4803) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0x5000, 0x5003) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE(0x4800, 0x4803) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x600f, 0x600f) AM_WRITE(banksel_5_1_w)
|
||||
AM_RANGE(0x6017, 0x6017) AM_WRITE(banksel_4_1_w)
|
||||
AM_RANGE(0x601b, 0x601b) AM_WRITE(banksel_3_1_w)
|
||||
@ -259,8 +259,8 @@ static ADDRESS_MAP_START( gselect_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x4401, 0x4401) AM_WRITE(banksel_1_2_w)
|
||||
AM_RANGE(0x4402, 0x4402) AM_WRITE(banksel_2_1_w)
|
||||
AM_RANGE(0x4403, 0x4403) AM_WRITE(banksel_2_2_w)
|
||||
AM_RANGE(0x4800, 0x4803) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0x5000, 0x5003) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE(0x4800, 0x4803) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x8000, 0x8002) AM_WRITE(SMH_RAM) AM_BASE(&drawctrl)
|
||||
AM_RANGE(0xc000, 0xffff) AM_RAM_WRITE(getrivia_bitmap_w) AM_BASE(&videoram)
|
||||
ADDRESS_MAP_END
|
||||
@ -270,8 +270,8 @@ static ADDRESS_MAP_START( amuse_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x1fff) AM_ROM
|
||||
AM_RANGE(0x2000, 0x3fff) AM_ROMBANK(1)
|
||||
AM_RANGE(0x4000, 0x47ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
|
||||
AM_RANGE(0x4800, 0x4803) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0x5000, 0x5003) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE(0x4800, 0x4803) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x606f, 0x606f) AM_WRITE(banksel_5_1_w)
|
||||
AM_RANGE(0x6077, 0x6077) AM_WRITE(banksel_4_1_w)
|
||||
AM_RANGE(0x607b, 0x607b) AM_WRITE(banksel_3_1_w)
|
||||
@ -286,8 +286,8 @@ static ADDRESS_MAP_START( gepoker_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x1fff) AM_ROM
|
||||
AM_RANGE(0x2000, 0x3fff) AM_ROMBANK(1)
|
||||
AM_RANGE(0x4000, 0x47ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
|
||||
AM_RANGE(0x4800, 0x4803) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0x5000, 0x5003) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE(0x4800, 0x4803) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x60ef, 0x60ef) AM_WRITE(banksel_3_1_w)
|
||||
AM_RANGE(0x60f7, 0x60f7) AM_WRITE(banksel_2_2_w)
|
||||
AM_RANGE(0x60fb, 0x60fb) AM_WRITE(banksel_2_1_w)
|
||||
@ -418,38 +418,53 @@ INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
static const ppi8255_interface getrivia_ppi8255_intf =
|
||||
static const ppi8255_interface getrivia_ppi8255_intf[2] =
|
||||
{
|
||||
2, /* 2 chips */
|
||||
{ input_port_0_r, input_port_2_r }, /* Port A read */
|
||||
{ port1_r, NULL }, /* Port B read */
|
||||
{ NULL, NULL }, /* Port C read */
|
||||
{ NULL, NULL }, /* Port A write */
|
||||
{ NULL, lamps_w }, /* Port B write */
|
||||
{ sound_w, lamps2_w }, /* Port C write */
|
||||
{
|
||||
input_port_0_r, /* Port A read */
|
||||
port1_r, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
sound_w /* Port C write */
|
||||
},
|
||||
{
|
||||
input_port_2_r, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
lamps_w, /* Port B write */
|
||||
lamps2_w /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
static const ppi8255_interface gselect_ppi8255_intf =
|
||||
static const ppi8255_interface gselect_ppi8255_intf[2] =
|
||||
{
|
||||
2, /* 2 chips */
|
||||
{ input_port_0_r, input_port_2_r }, /* Port A read */
|
||||
{ input_port_1_r, NULL }, /* Port B read */
|
||||
{ NULL, input_port_3_r }, /* Port C read */
|
||||
{ NULL, NULL }, /* Port A write */
|
||||
{ NULL, lamps_w }, /* Port B write */
|
||||
{ sound2_w, nmi_w }, /* Port C write */
|
||||
{
|
||||
input_port_0_r, /* Port A read */
|
||||
input_port_1_r, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
sound2_w /* Port C write */
|
||||
},
|
||||
{
|
||||
input_port_2_r, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
input_port_3_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
lamps_w, /* Port B write */
|
||||
nmi_w /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
static MACHINE_RESET( getrivia )
|
||||
{
|
||||
ppi8255_init(&getrivia_ppi8255_intf);
|
||||
|
||||
ticket_dispenser_init(100, 1, 1);
|
||||
}
|
||||
|
||||
static MACHINE_RESET( gselect )
|
||||
{
|
||||
ppi8255_init(&gselect_ppi8255_intf);
|
||||
}
|
||||
|
||||
static MACHINE_DRIVER_START( getrivia )
|
||||
@ -473,6 +488,12 @@ static MACHINE_DRIVER_START( getrivia )
|
||||
MDRV_VIDEO_START(generic_bitmapped)
|
||||
MDRV_VIDEO_UPDATE(generic_bitmapped)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( getrivia_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( getrivia_ppi8255_intf[1] )
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -489,6 +510,12 @@ static MACHINE_DRIVER_START( gselect )
|
||||
MDRV_CPU_PROGRAM_MAP(gselect_map,0)
|
||||
|
||||
MDRV_MACHINE_RESET(gselect)
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( gselect_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( gselect_ppi8255_intf[1] )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_DRIVER_START( amuse )
|
||||
|
@ -36,19 +36,17 @@ static WRITE8_HANDLER(pc_w){homerun_xpc=data;}
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
{
|
||||
1,
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
{ pa_w },
|
||||
{ pb_w },
|
||||
{ pc_w },
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
pa_w,
|
||||
pb_w,
|
||||
pc_w
|
||||
};
|
||||
|
||||
|
||||
static MACHINE_RESET( homerun )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
}
|
||||
|
||||
static const gfx_layout gfxlayout =
|
||||
@ -101,7 +99,7 @@ static ADDRESS_MAP_START( homerun_iomap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x10, 0x10) AM_WRITE(SMH_NOP) /* ?? */
|
||||
AM_RANGE(0x20, 0x20) AM_WRITE(SMH_NOP) /* ?? */
|
||||
AM_RANGE(0x30, 0x33) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0x30, 0x33) AM_DEVREADWRITE(PPI8255, "ppi8255", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x40, 0x40) AM_READ(homerun_40_r)
|
||||
AM_RANGE(0x50, 0x50) AM_READ(input_port_2_r)
|
||||
AM_RANGE(0x60, 0x60) AM_READ(input_port_1_r)
|
||||
@ -193,6 +191,9 @@ static MACHINE_DRIVER_START( homerun )
|
||||
|
||||
MDRV_MACHINE_RESET(homerun)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
|
@ -392,6 +392,18 @@ static INTERRUPT_GEN( master_interrupt )
|
||||
}
|
||||
} /* master_interrupt */
|
||||
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
};
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( imolagp )
|
||||
MDRV_CPU_ADD(Z80,8000000) /* ? */
|
||||
MDRV_CPU_PROGRAM_MAP(imolagp_master,0)
|
||||
@ -405,6 +417,9 @@ static MACHINE_DRIVER_START( imolagp )
|
||||
|
||||
MDRV_INTERLEAVE(100)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf )
|
||||
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
|
||||
@ -513,21 +528,6 @@ ROM_START( imolagp )
|
||||
ROM_LOAD( "xe.bin", 0x3c00, 0x400, CRC(e0e81120) SHA1(14a77dfd069be342df4dbb1b747443c6d121d3fe) ) // ? car+misc
|
||||
ROM_END
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
{
|
||||
1, /* 1 chips */
|
||||
{0}, /* Port A read */
|
||||
{0}, /* Port B read */
|
||||
{0}, /* Port C read */
|
||||
{0}, /* Port A write */
|
||||
{0}, /* Port B write */
|
||||
{0}, /* Port C write */
|
||||
};
|
||||
|
||||
static DRIVER_INIT( imolagp )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
}
|
||||
|
||||
/* YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR, COMPANY, FULLNAME */
|
||||
GAME( 1981,imolagp, 0, imolagp, imolagp, imolagp, ROT90, "Alberici", "Imola Grand Prix", GAME_WRONG_COLORS )
|
||||
GAME( 1981,imolagp, 0, imolagp, imolagp, 0, ROT90, "Alberici", "Imola Grand Prix", GAME_WRONG_COLORS )
|
||||
|
@ -113,21 +113,14 @@ static WRITE8_HANDLER( port_C_w )
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
{
|
||||
1, /* 1 chip */
|
||||
{ input_port_0_r }, /* Port A read */
|
||||
{ input_port_1_r }, /* Port B read */
|
||||
{ input_port_2_r }, /* Port C read */
|
||||
{ 0 }, /* Port A write */
|
||||
{ 0 }, /* Port B write */
|
||||
{ port_C_w }, /* Port C write */
|
||||
input_port_0_r, /* Port A read */
|
||||
input_port_1_r, /* Port B read */
|
||||
input_port_2_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
port_C_w /* Port C write */
|
||||
};
|
||||
|
||||
static MACHINE_RESET( iqblock )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0xefff) AM_ROM
|
||||
@ -141,8 +134,8 @@ static ADDRESS_MAP_START( main_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE(0x6000, 0x603f) AM_WRITE(iqblock_fgscroll_w)
|
||||
AM_RANGE(0x6800, 0x69ff) AM_WRITE(iqblock_fgvideoram_w) /* initialized up to 6fff... bug or larger tilemap? */
|
||||
AM_RANGE(0x7000, 0x7fff) AM_WRITE(iqblock_bgvideoram_w)
|
||||
AM_RANGE(0x5080, 0x5083) AM_WRITE(ppi8255_0_w)
|
||||
AM_RANGE(0x5080, 0x5083) AM_READ(ppi8255_0_r)
|
||||
AM_RANGE(0x5080, 0x5083) AM_DEVWRITE(PPI8255, "ppi8255", ppi8255_w)
|
||||
AM_RANGE(0x5080, 0x5083) AM_DEVREAD(PPI8255, "ppi8255", ppi8255_r)
|
||||
AM_RANGE(0x5090, 0x5090) AM_READ(input_port_3_r)
|
||||
AM_RANGE(0x50a0, 0x50a0) AM_READ(input_port_4_r)
|
||||
AM_RANGE(0x50b0, 0x50b0) AM_WRITE(YM2413_register_port_0_w) // UM3567_register_port_0_w
|
||||
@ -158,8 +151,8 @@ static ADDRESS_MAP_START( pokerigs_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
// AM_RANGE(0x6000, 0x603f) AM_WRITE(iqblock_fgscroll_w)
|
||||
// AM_RANGE(0x6800, 0x69ff) AM_WRITE(iqblock_fgvideoram_w)
|
||||
AM_RANGE(0x7000, 0x7fff) AM_WRITE(iqblock_bgvideoram_w)
|
||||
AM_RANGE(0x5080, 0x5083) AM_WRITE(ppi8255_0_w)
|
||||
AM_RANGE(0x5080, 0x5083) AM_READ(ppi8255_0_r)
|
||||
AM_RANGE(0x5080, 0x5083) AM_DEVWRITE(PPI8255, "ppi8255", ppi8255_w)
|
||||
AM_RANGE(0x5080, 0x5083) AM_DEVREAD(PPI8255, "ppi8255", ppi8255_r)
|
||||
AM_RANGE(0x5090, 0x5090) AM_READ(input_port_3_r) AM_WRITENOP
|
||||
AM_RANGE(0x5091, 0x5091) AM_READNOP AM_WRITENOP
|
||||
AM_RANGE(0x50a0, 0x50a0) AM_READ(input_port_4_r)
|
||||
@ -308,7 +301,8 @@ static MACHINE_DRIVER_START( iqblock )
|
||||
MDRV_CPU_IO_MAP(main_portmap,0)
|
||||
MDRV_CPU_VBLANK_INT_HACK(iqblock_interrupt,16)
|
||||
|
||||
MDRV_MACHINE_RESET(iqblock)
|
||||
MDRV_DEVICE_ADD( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
@ -339,7 +333,8 @@ static MACHINE_DRIVER_START( cabaret )
|
||||
MDRV_CPU_IO_MAP(main_portmap,0)
|
||||
MDRV_CPU_VBLANK_INT_HACK(iqblock_interrupt,16)
|
||||
|
||||
MDRV_MACHINE_RESET(iqblock)
|
||||
MDRV_DEVICE_ADD( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
@ -370,7 +365,8 @@ static MACHINE_DRIVER_START( pokerigs )
|
||||
MDRV_CPU_IO_MAP(pokerigs_portmap,0)
|
||||
MDRV_CPU_VBLANK_INT_HACK(iqblock_interrupt,16)
|
||||
|
||||
MDRV_MACHINE_RESET(iqblock)
|
||||
MDRV_DEVICE_ADD( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
|
@ -152,11 +152,9 @@ static WRITE16_HANDLER( lordgun_priority_w )
|
||||
// popmessage("PR: %04x", data);
|
||||
}
|
||||
|
||||
static READ16_HANDLER( lordgun_ppi8255_0_r ) { return ppi8255_0_r(machine, offset); }
|
||||
static READ16_HANDLER( lordgun_ppi8255_1_r ) { return ppi8255_1_r(machine, offset); }
|
||||
static READ16_DEVICE_HANDLER( lordgun_ppi8255_r ) { return ppi8255_r(device, offset); }
|
||||
|
||||
static WRITE16_HANDLER( lordgun_ppi8255_0_w ) { ppi8255_0_w(machine, offset, data & 0xff); }
|
||||
static WRITE16_HANDLER( lordgun_ppi8255_1_w ) { ppi8255_1_w(machine, offset, data & 0xff); }
|
||||
static WRITE16_DEVICE_HANDLER( lordgun_ppi8255_w ) { ppi8255_w(device, offset, data & 0xff); }
|
||||
|
||||
static READ16_HANDLER( lordgun_gun_0_x_r ) { return lordgun_gun[0].hw_x; }
|
||||
static READ16_HANDLER( lordgun_gun_0_y_r ) { return lordgun_gun[0].hw_y; }
|
||||
@ -197,8 +195,8 @@ static ADDRESS_MAP_START( lordgun_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x503c00, 0x503c01) AM_READ(lordgun_gun_0_y_r)
|
||||
AM_RANGE(0x503e00, 0x503e01) AM_READ(lordgun_gun_1_y_r)
|
||||
AM_RANGE(0x504000, 0x504001) AM_WRITE(lordgun_soundlatch_w)
|
||||
AM_RANGE(0x506000, 0x506007) AM_READWRITE(lordgun_ppi8255_0_r, lordgun_ppi8255_0_w)
|
||||
AM_RANGE(0x508000, 0x508007) AM_READWRITE(lordgun_ppi8255_1_r, lordgun_ppi8255_1_w)
|
||||
AM_RANGE(0x506000, 0x506007) AM_DEVREADWRITE(PPI8255, "ppi8255_0", lordgun_ppi8255_r, lordgun_ppi8255_w)
|
||||
AM_RANGE(0x508000, 0x508007) AM_DEVREADWRITE(PPI8255, "ppi8255_1", lordgun_ppi8255_r, lordgun_ppi8255_w)
|
||||
AM_RANGE(0x50a900, 0x50a9ff) AM_RAM // protection
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -224,8 +222,8 @@ static ADDRESS_MAP_START( hfh_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x502e00, 0x502e01) AM_WRITE(SMH_RAM) AM_BASE(&lordgun_scroll_y_3)
|
||||
AM_RANGE(0x503000, 0x503001) AM_WRITE(lordgun_priority_w)
|
||||
AM_RANGE(0x504000, 0x504001) AM_WRITE(lordgun_soundlatch_w)
|
||||
AM_RANGE(0x506000, 0x506007) AM_READWRITE(lordgun_ppi8255_0_r, lordgun_ppi8255_0_w)
|
||||
AM_RANGE(0x508000, 0x508007) AM_READWRITE(lordgun_ppi8255_1_r, lordgun_ppi8255_1_w)
|
||||
AM_RANGE(0x506000, 0x506007) AM_DEVREADWRITE(PPI8255, "ppi8255_0", lordgun_ppi8255_r, lordgun_ppi8255_w)
|
||||
AM_RANGE(0x508000, 0x508007) AM_DEVREADWRITE(PPI8255, "ppi8255_1", lordgun_ppi8255_r, lordgun_ppi8255_w)
|
||||
AM_RANGE(0x50b900, 0x50b9ff) AM_RAM // protection
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -409,22 +407,26 @@ INPUT_PORTS_END
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
static const ppi8255_interface ppi8255_intf[2] =
|
||||
{
|
||||
2, // 2 chips
|
||||
{ lordgun_eeprom_r, input_port_1_r }, // Port A read
|
||||
{ 0, input_port_2_r }, // Port B read
|
||||
{ input_port_3_r, input_port_4_r }, // Port C read
|
||||
{ fake_w, fake_w }, // Port A write
|
||||
{ lordgun_eeprom_w, fake_w }, // Port B write
|
||||
{ fake2_w, fake_w }, // Port C write
|
||||
{
|
||||
lordgun_eeprom_r, // Port A read
|
||||
NULL, // Port B read
|
||||
input_port_3_r, // Port C read
|
||||
fake_w, // Port A write
|
||||
lordgun_eeprom_w, // Port B write
|
||||
fake2_w // Port C write
|
||||
},
|
||||
{
|
||||
input_port_1_r, // Port A read
|
||||
input_port_2_r, // Port B read
|
||||
input_port_4_r, // Port C read
|
||||
fake_w, // Port A write
|
||||
fake_w, // Port B write
|
||||
fake_w // Port C write
|
||||
}
|
||||
};
|
||||
|
||||
static MACHINE_RESET( lordgun )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
}
|
||||
|
||||
static void soundirq(int state)
|
||||
{
|
||||
cpunum_set_input_line(Machine, 1, 0, state);
|
||||
@ -444,7 +446,11 @@ static MACHINE_DRIVER_START( lordgun )
|
||||
MDRV_CPU_PROGRAM_MAP(lordgun_soundmem_map,0)
|
||||
MDRV_CPU_IO_MAP(lordgun_soundio_map,0)
|
||||
|
||||
MDRV_MACHINE_RESET(lordgun)
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[1] )
|
||||
|
||||
MDRV_NVRAM_HANDLER(93C46)
|
||||
|
||||
|
@ -191,8 +191,8 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( bigappg_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x5fff) AM_ROM
|
||||
AM_RANGE(0xa000, 0xafff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
|
||||
AM_RANGE(0xc004, 0xc007) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0xc008, 0xc00b) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE(0xc004, 0xc007) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xc008, 0xc00b) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xe000, 0xe001) AM_WRITENOP // 6845 crt
|
||||
AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(phrcraze_attr_w) AM_BASE(&phrcraze_attr)
|
||||
AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE(phrcraze_bg_w) AM_BASE(&videoram)
|
||||
@ -206,8 +206,8 @@ static ADDRESS_MAP_START( trvwhiz_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x5400, 0x54ff) AM_WRITE(low_offset_w)
|
||||
AM_RANGE(0x5800, 0x58ff) AM_WRITE(med_offset_w)
|
||||
AM_RANGE(0x6000, 0x67ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
|
||||
AM_RANGE(0xa000, 0xa003) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0xc000, 0xc003) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE(0xa000, 0xa003) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xc000, 0xc003) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xe000, 0xe001) AM_WRITENOP // 6845 crt
|
||||
AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(phrcraze_attr_w) AM_BASE(&phrcraze_attr)
|
||||
AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE(phrcraze_bg_w) AM_BASE(&videoram)
|
||||
@ -223,8 +223,8 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( phrcraze_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0xa000, 0xbfff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
|
||||
AM_RANGE(0xc008, 0xc00b) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE(0xc00c, 0xc00f) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0xc008, 0xc00b) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xc00c, 0xc00f) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xce00, 0xceff) AM_READWRITE(questions_r, high_offset_w)
|
||||
AM_RANGE(0xd600, 0xd6ff) AM_WRITE(low_offset_w)
|
||||
AM_RANGE(0xda00, 0xdaff) AM_WRITE(med_offset_w)
|
||||
@ -243,8 +243,8 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( tictac_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0x9fff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
|
||||
AM_RANGE(0xc004, 0xc007) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0xc008, 0xc00b) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE(0xc004, 0xc007) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xc008, 0xc00b) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xce00, 0xceff) AM_READWRITE(questions_r, high_offset_w)
|
||||
AM_RANGE(0xd600, 0xd6ff) AM_WRITE(low_offset_w)
|
||||
AM_RANGE(0xda00, 0xdaff) AM_WRITE(med_offset_w)
|
||||
@ -263,8 +263,8 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( trvwhziv_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0xa000, 0xbfff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
|
||||
AM_RANGE(0xc004, 0xc007) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0xc008, 0xc00b) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE(0xc004, 0xc007) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xc008, 0xc00b) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xce00, 0xceff) AM_READWRITE(questions_r, high_offset_w)
|
||||
AM_RANGE(0xd600, 0xd6ff) AM_WRITE(low_offset_w)
|
||||
AM_RANGE(0xda00, 0xdaff) AM_WRITE(med_offset_w)
|
||||
@ -770,15 +770,24 @@ static GFXDECODE_START( merit )
|
||||
GFXDECODE_ENTRY( REGION_GFX2, 8, tiles8x8x1_layout, 0, 128 ) // flipped tiles
|
||||
GFXDECODE_END
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
static const ppi8255_interface ppi8255_intf[2] =
|
||||
{
|
||||
2, /* 2 chips */
|
||||
{ input_port_0_r, input_port_3_r }, /* Port A read */
|
||||
{ input_port_1_r, NULL }, /* Port B read */
|
||||
{ input_port_2_r, NULL }, /* Port C read */
|
||||
{ NULL, NULL }, /* Port A write */
|
||||
{ NULL, led1_w }, /* Port B write */
|
||||
{ NULL, misc_w }, /* Port C write */
|
||||
{
|
||||
input_port_0_r, /* Port A read */
|
||||
input_port_1_r, /* Port B read */
|
||||
input_port_2_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
},
|
||||
{
|
||||
input_port_3_r, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
led1_w, /* Port B write */
|
||||
misc_w /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
static const struct AY8910interface merit_ay8912_interface =
|
||||
@ -787,11 +796,6 @@ static const struct AY8910interface merit_ay8912_interface =
|
||||
led2_w,0
|
||||
};
|
||||
|
||||
static MACHINE_RESET( merit )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
}
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( pitboss )
|
||||
MDRV_CPU_ADD_TAG("main",Z80,2500000) /* ?? */
|
||||
@ -800,7 +804,12 @@ static MACHINE_DRIVER_START( pitboss )
|
||||
MDRV_CPU_VBLANK_INT("main", irq0_line_hold)
|
||||
|
||||
MDRV_NVRAM_HANDLER(generic_0fill)
|
||||
MDRV_MACHINE_RESET(merit)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
|
@ -696,7 +696,7 @@ static ADDRESS_MAP_START( meritm_crt250_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE(0x21, 0x21) AM_READWRITE(v9938_1_status_r, v9938_1_command_w)
|
||||
AM_RANGE(0x22, 0x22) AM_WRITE(v9938_1_palette_w)
|
||||
AM_RANGE(0x23, 0x23) AM_WRITE(v9938_1_register_w)
|
||||
AM_RANGE(0x30, 0x33) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0x30, 0x33) AM_DEVREADWRITE(PPI8255, "ppi8255", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x40, 0x43) AM_READWRITE(z80pio_0_r, z80pio_0_w)
|
||||
AM_RANGE(0x50, 0x53) AM_READWRITE(z80pio_1_r, z80pio_1_w)
|
||||
AM_RANGE(0x80, 0x80) AM_READWRITE(AY8910_read_port_0_r, AY8910_control_port_0_w)
|
||||
@ -722,7 +722,7 @@ static ADDRESS_MAP_START( meritm_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE(0x21, 0x21) AM_READWRITE(v9938_1_status_r, v9938_1_command_w)
|
||||
AM_RANGE(0x22, 0x22) AM_WRITE(v9938_1_palette_w)
|
||||
AM_RANGE(0x23, 0x23) AM_WRITE(v9938_1_register_w)
|
||||
AM_RANGE(0x30, 0x33) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0x30, 0x33) AM_DEVREADWRITE(PPI8255, "ppi8255", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x40, 0x43) AM_READWRITE(z80pio_0_r, z80pio_0_w)
|
||||
AM_RANGE(0x50, 0x53) AM_READWRITE(z80pio_1_r, z80pio_1_w)
|
||||
AM_RANGE(0x60, 0x67) AM_READWRITE(pc16552d_0_r,pc16552d_0_w)
|
||||
@ -831,24 +831,22 @@ static WRITE8_HANDLER(meritm_crt250_port_b_w)
|
||||
|
||||
static const ppi8255_interface crt260_ppi8255_intf =
|
||||
{
|
||||
1,
|
||||
{ 0 }, /* Port A read */
|
||||
{ 0 }, /* Port B read */
|
||||
{ meritm_8255_port_c_r }, /* Port C read */
|
||||
{ 0 }, /* Port A write (used) */
|
||||
{ 0 }, /* Port B write (used LMP x DRIVE) */
|
||||
{ 0 } /* Port C write */
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
meritm_8255_port_c_r, /* Port C read */
|
||||
NULL, /* Port A write (used) */
|
||||
NULL, /* Port B write (used LMP x DRIVE) */
|
||||
NULL /* Port C write */
|
||||
};
|
||||
|
||||
static const ppi8255_interface crt250_ppi8255_intf =
|
||||
{
|
||||
1,
|
||||
{ 0 }, /* Port A read */
|
||||
{ 0 }, /* Port B read */
|
||||
{ meritm_8255_port_c_r }, /* Port C read */
|
||||
{ 0 }, /* Port A write (used) */
|
||||
{ meritm_crt250_port_b_w }, /* Port B write (used LMP x DRIVE) */
|
||||
{ 0 } /* Port C write */
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
meritm_8255_port_c_r, /* Port C read */
|
||||
NULL, /* Port A write (used) */
|
||||
meritm_crt250_port_b_w, /* Port B write (used LMP x DRIVE) */
|
||||
NULL /* Port C write */
|
||||
};
|
||||
|
||||
/*************************************
|
||||
@ -984,7 +982,6 @@ static MACHINE_START(merit_common)
|
||||
|
||||
static MACHINE_START(meritm_crt250)
|
||||
{
|
||||
ppi8255_init(&crt250_ppi8255_intf);
|
||||
memory_configure_bank(1, 0, 8, memory_region(REGION_CPU1), 0x10000);
|
||||
meritm_bank = 0xff;
|
||||
meritm_crt250_switch_banks();
|
||||
@ -1001,7 +998,6 @@ static MACHINE_START(meritm_crt250_questions)
|
||||
|
||||
static MACHINE_START(meritm_crt260)
|
||||
{
|
||||
ppi8255_init(&crt260_ppi8255_intf);
|
||||
meritm_ram = auto_malloc( 0x8000 );
|
||||
memset( meritm_ram, 0x8000, 0x00 );
|
||||
memory_configure_bank(1, 0, 128, memory_region(REGION_CPU1), 0x8000);
|
||||
@ -1047,6 +1043,9 @@ static MACHINE_DRIVER_START(meritm_crt250)
|
||||
|
||||
MDRV_MACHINE_START(meritm_crt250)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( crt250_ppi8255_intf )
|
||||
|
||||
MDRV_NVRAM_HANDLER(generic_0fill)
|
||||
|
||||
MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
|
||||
@ -1085,6 +1084,9 @@ static MACHINE_DRIVER_START(meritm_crt260)
|
||||
MDRV_CPU_PROGRAM_MAP(meritm_map,0)
|
||||
MDRV_CPU_IO_MAP(meritm_io_map,0)
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( crt260_ppi8255_intf )
|
||||
|
||||
MDRV_WATCHDOG_TIME_INIT(UINT64_ATTOTIME_IN_MSEC(1200)) // DS1232, TD connected to VCC
|
||||
MDRV_MACHINE_START(meritm_crt260)
|
||||
|
||||
|
@ -219,8 +219,8 @@ static ADDRESS_MAP_START( cpu0_mem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x8000, 0x87ff) AM_RAM
|
||||
AM_RANGE(0x8800, 0x97ff) AM_RAM_WRITE(vram1_w) AM_BASE(&vram1)
|
||||
AM_RANGE(0x9800, 0xa7ff) AM_RAM_WRITE(vram2_w) AM_BASE(&vram2)
|
||||
AM_RANGE(0xb800, 0xb803) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0xb810, 0xb813) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE(0xb800, 0xb803) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xb810, 0xb813) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xb830, 0xb830) AM_NOP
|
||||
AM_RANGE(0xb840, 0xb840) AM_NOP
|
||||
ADDRESS_MAP_END
|
||||
@ -228,7 +228,7 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( cpu1_mem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0xc000, 0xc7ff) AM_RAM
|
||||
AM_RANGE(0xe000, 0xe003) AM_READWRITE(ppi8255_2_r, ppi8255_2_w)
|
||||
AM_RANGE(0xe000, 0xe003) AM_DEVREADWRITE(PPI8255, "ppi8255_2", ppi8255_r, ppi8255_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( sound_port, ADDRESS_SPACE_IO, 8 )
|
||||
@ -307,15 +307,32 @@ static const struct z80_irq_daisy_chain daisy_chain_sound[] =
|
||||
{ 0, 0, 0, 0, -1 } /* end mark */
|
||||
};
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
static const ppi8255_interface ppi8255_intf[3] =
|
||||
{
|
||||
3,
|
||||
{ input_port_0_r, input_port_1_r, NULL }, /* Port A read */
|
||||
{ NULL, input_port_2_r, NULL }, /* Port B read */
|
||||
{ NULL, protection_r, NULL }, /* Port C read */
|
||||
{ NULL, NULL, NULL }, /* Port A write */
|
||||
{ NULL, NULL, NULL }, /* Port B write */
|
||||
{ vidctrl_w, protection_w, NULL }, /* Port C write */
|
||||
{
|
||||
input_port_0_r, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
vidctrl_w /* Port C write */
|
||||
},
|
||||
{
|
||||
input_port_1_r, /* Port A read */
|
||||
input_port_2_r, /* Port B read */
|
||||
protection_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
protection_w /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
static const struct YM2203interface ym2203_interface =
|
||||
@ -349,7 +366,6 @@ static MACHINE_RESET( pipeline )
|
||||
{
|
||||
ctc_intf.baseclock = cpunum_get_clock(0);
|
||||
z80ctc_init(0, &ctc_intf);
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
}
|
||||
|
||||
static MACHINE_DRIVER_START( pipeline )
|
||||
@ -367,6 +383,15 @@ static MACHINE_DRIVER_START( pipeline )
|
||||
MDRV_CPU_ADD(M68705, 7372800/2)
|
||||
MDRV_CPU_PROGRAM_MAP(mcu_mem, 0)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[1] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_2", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[2] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
|
@ -88,44 +88,24 @@ static const struct AY8910interface hustler_ay8910_interface =
|
||||
frogger_portB_r
|
||||
};
|
||||
|
||||
static READ8_HANDLER(scobra_type2_ppi8255_0_r)
|
||||
static READ8_DEVICE_HANDLER(scobra_type2_ppi8255_r)
|
||||
{
|
||||
return ppi8255_0_r(machine, offset >> 2);
|
||||
return ppi8255_r(device, offset >> 2);
|
||||
}
|
||||
|
||||
static READ8_HANDLER(scobra_type2_ppi8255_1_r)
|
||||
static WRITE8_DEVICE_HANDLER(scobra_type2_ppi8255_w)
|
||||
{
|
||||
return ppi8255_1_r(machine, offset >> 2);
|
||||
ppi8255_w(device, offset >> 2, data);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER(scobra_type2_ppi8255_0_w)
|
||||
static READ8_DEVICE_HANDLER(hustler_ppi8255_r)
|
||||
{
|
||||
ppi8255_0_w(machine, offset >> 2, data);
|
||||
return ppi8255_r(device, offset >> 3);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER(scobra_type2_ppi8255_1_w)
|
||||
static WRITE8_DEVICE_HANDLER(hustler_ppi8255_w)
|
||||
{
|
||||
ppi8255_1_w(machine, offset >> 2, data);
|
||||
}
|
||||
|
||||
static READ8_HANDLER(hustler_ppi8255_0_r)
|
||||
{
|
||||
return ppi8255_0_r(machine, offset >> 3);
|
||||
}
|
||||
|
||||
static READ8_HANDLER(hustler_ppi8255_1_r)
|
||||
{
|
||||
return ppi8255_1_r(machine, offset >> 3);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER(hustler_ppi8255_0_w)
|
||||
{
|
||||
ppi8255_0_w(machine, offset >> 3, data);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER(hustler_ppi8255_1_w)
|
||||
{
|
||||
ppi8255_1_w(machine, offset >> 3, data);
|
||||
ppi8255_w(device, offset >> 3, data);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( type1_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -133,8 +113,8 @@ static ADDRESS_MAP_START( type1_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x8000, 0x8bff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x8c00, 0x8fff) AM_READ(galaxold_videoram_r) /* mirror */
|
||||
AM_RANGE(0x9000, 0x90ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x9800, 0x9803) AM_READ(ppi8255_0_r)
|
||||
AM_RANGE(0xa000, 0xa003) AM_READ(ppi8255_1_r)
|
||||
AM_RANGE(0x9800, 0x9803) AM_DEVREAD(PPI8255, "ppi8255_0", ppi8255_r)
|
||||
AM_RANGE(0xa000, 0xa003) AM_DEVREAD(PPI8255, "ppi8255_1", ppi8255_r)
|
||||
AM_RANGE(0xb000, 0xb000) AM_READ(watchdog_reset_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -147,8 +127,8 @@ static ADDRESS_MAP_START( type1_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x9040, 0x905f) AM_WRITE(SMH_RAM) AM_BASE(&galaxold_spriteram) AM_SIZE(&galaxold_spriteram_size)
|
||||
AM_RANGE(0x9060, 0x907f) AM_WRITE(SMH_RAM) AM_BASE(&galaxold_bulletsram) AM_SIZE(&galaxold_bulletsram_size)
|
||||
AM_RANGE(0x9080, 0x90ff) AM_WRITE(SMH_RAM)
|
||||
AM_RANGE(0x9800, 0x9803) AM_WRITE(ppi8255_0_w)
|
||||
AM_RANGE(0xa000, 0xa003) AM_WRITE(ppi8255_1_w)
|
||||
AM_RANGE(0x9800, 0x9803) AM_DEVWRITE(PPI8255, "ppi8255_0", ppi8255_w)
|
||||
AM_RANGE(0xa000, 0xa003) AM_DEVWRITE(PPI8255, "ppi8255_1", ppi8255_w)
|
||||
AM_RANGE(0xa801, 0xa801) AM_WRITE(galaxold_nmi_enable_w)
|
||||
AM_RANGE(0xa802, 0xa802) AM_WRITE(galaxold_coin_counter_w)
|
||||
AM_RANGE(0xa804, 0xa804) AM_WRITE(galaxold_stars_enable_w)
|
||||
@ -162,8 +142,8 @@ static ADDRESS_MAP_START( type2_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x9000, 0x93ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x9400, 0x97ff) AM_READ(galaxold_videoram_r) /* mirror */
|
||||
AM_RANGE(0x9800, 0x9800) AM_READ(watchdog_reset_r)
|
||||
AM_RANGE(0xa000, 0xa00f) AM_READ(scobra_type2_ppi8255_0_r)
|
||||
AM_RANGE(0xa800, 0xa80f) AM_READ(scobra_type2_ppi8255_1_r)
|
||||
AM_RANGE(0xa000, 0xa00f) AM_DEVREAD(PPI8255, "ppi8255_0", scobra_type2_ppi8255_r)
|
||||
AM_RANGE(0xa800, 0xa80f) AM_DEVREAD(PPI8255, "ppi8255_1", scobra_type2_ppi8255_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( type2_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -175,8 +155,8 @@ static ADDRESS_MAP_START( type2_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x8880, 0x88ff) AM_WRITE(SMH_RAM)
|
||||
AM_RANGE(0x9000, 0x93ff) AM_WRITE(galaxold_videoram_w) AM_BASE(&galaxold_videoram)
|
||||
AM_RANGE(0x9400, 0x97ff) AM_WRITE(galaxold_videoram_w) /* mirror */
|
||||
AM_RANGE(0xa000, 0xa00f) AM_WRITE(scobra_type2_ppi8255_0_w)
|
||||
AM_RANGE(0xa800, 0xa80f) AM_WRITE(scobra_type2_ppi8255_1_w)
|
||||
AM_RANGE(0xa000, 0xa00f) AM_DEVWRITE(PPI8255, "ppi8255_0", scobra_type2_ppi8255_w)
|
||||
AM_RANGE(0xa800, 0xa80f) AM_DEVWRITE(PPI8255, "ppi8255_1", scobra_type2_ppi8255_w)
|
||||
AM_RANGE(0xb000, 0xb000) AM_WRITE(galaxold_stars_enable_w)
|
||||
AM_RANGE(0xb004, 0xb004) AM_WRITE(galaxold_nmi_enable_w)
|
||||
AM_RANGE(0xb006, 0xb006) AM_WRITE(galaxold_coin_counter_0_w)
|
||||
@ -190,8 +170,8 @@ static ADDRESS_MAP_START( hustler_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x8000, 0x8bff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x9000, 0x90ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0xb800, 0xb800) AM_READ(watchdog_reset_r)
|
||||
AM_RANGE(0xd000, 0xd01f) AM_READ(hustler_ppi8255_0_r)
|
||||
AM_RANGE(0xe000, 0xe01f) AM_READ(hustler_ppi8255_1_r)
|
||||
AM_RANGE(0xd000, 0xd01f) AM_DEVREAD(PPI8255, "ppi8255_0", hustler_ppi8255_r)
|
||||
AM_RANGE(0xe000, 0xe01f) AM_DEVREAD(PPI8255, "ppi8255_1", hustler_ppi8255_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( hustler_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -206,8 +186,8 @@ static ADDRESS_MAP_START( hustler_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0xa804, 0xa804) AM_WRITE(galaxold_nmi_enable_w)
|
||||
AM_RANGE(0xa806, 0xa806) AM_WRITE(galaxold_flip_screen_y_w)
|
||||
AM_RANGE(0xa80e, 0xa80e) AM_WRITE(SMH_NOP) /* coin counters */
|
||||
AM_RANGE(0xd000, 0xd01f) AM_WRITE(hustler_ppi8255_0_w)
|
||||
AM_RANGE(0xe000, 0xe01f) AM_WRITE(hustler_ppi8255_1_w)
|
||||
AM_RANGE(0xd000, 0xd01f) AM_DEVWRITE(PPI8255, "ppi8255_0", hustler_ppi8255_w)
|
||||
AM_RANGE(0xe000, 0xe01f) AM_DEVWRITE(PPI8255, "ppi8255_1", hustler_ppi8255_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( hustlerb_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -215,8 +195,8 @@ static ADDRESS_MAP_START( hustlerb_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x8000, 0x8bff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x9000, 0x90ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0xb000, 0xb000) AM_READ(watchdog_reset_r)
|
||||
AM_RANGE(0xc100, 0xc103) AM_READ(ppi8255_0_r)
|
||||
AM_RANGE(0xc200, 0xc203) AM_READ(ppi8255_1_r)
|
||||
AM_RANGE(0xc100, 0xc103) AM_DEVREAD(PPI8255, "ppi8255_0", ppi8255_r)
|
||||
AM_RANGE(0xc200, 0xc203) AM_DEVREAD(PPI8255, "ppi8255_1", ppi8255_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( hustlerb_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -231,8 +211,8 @@ static ADDRESS_MAP_START( hustlerb_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0xa802, 0xa802) AM_WRITE(SMH_NOP) /* coin counters */
|
||||
AM_RANGE(0xa806, 0xa806) AM_WRITE(galaxold_flip_screen_y_w)
|
||||
AM_RANGE(0xa807, 0xa807) AM_WRITE(galaxold_flip_screen_x_w)
|
||||
AM_RANGE(0xc100, 0xc103) AM_WRITE(ppi8255_0_w)
|
||||
AM_RANGE(0xc200, 0xc203) AM_WRITE(ppi8255_1_w)
|
||||
AM_RANGE(0xc100, 0xc103) AM_DEVWRITE(PPI8255, "ppi8255_0", ppi8255_w)
|
||||
AM_RANGE(0xc200, 0xc203) AM_DEVWRITE(PPI8255, "ppi8255_1", ppi8255_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( mimonkey_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -240,8 +220,8 @@ static ADDRESS_MAP_START( mimonkey_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x8000, 0x8bff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x8c00, 0x8fff) AM_READ(galaxold_videoram_r) /* mirror */
|
||||
AM_RANGE(0x9000, 0x90ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x9800, 0x9803) AM_READ(ppi8255_0_r)
|
||||
AM_RANGE(0xa000, 0xa003) AM_READ(ppi8255_1_r)
|
||||
AM_RANGE(0x9800, 0x9803) AM_DEVREAD(PPI8255, "ppi8255_0", ppi8255_r)
|
||||
AM_RANGE(0xa000, 0xa003) AM_DEVREAD(PPI8255, "ppi8255_1", ppi8255_r)
|
||||
AM_RANGE(0xb000, 0xb000) AM_READ(watchdog_reset_r)
|
||||
AM_RANGE(0xc000, 0xffff) AM_READ(SMH_ROM)
|
||||
ADDRESS_MAP_END
|
||||
@ -255,8 +235,8 @@ static ADDRESS_MAP_START( mimonkey_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x9040, 0x905f) AM_WRITE(SMH_RAM) AM_BASE(&galaxold_spriteram) AM_SIZE(&galaxold_spriteram_size)
|
||||
AM_RANGE(0x9060, 0x907f) AM_WRITE(SMH_RAM) AM_BASE(&galaxold_bulletsram) AM_SIZE(&galaxold_bulletsram_size)
|
||||
AM_RANGE(0x9080, 0x90ff) AM_WRITE(SMH_RAM)
|
||||
AM_RANGE(0x9800, 0x9803) AM_WRITE(ppi8255_0_w)
|
||||
AM_RANGE(0xa000, 0xa003) AM_WRITE(ppi8255_1_w)
|
||||
AM_RANGE(0x9800, 0x9803) AM_DEVWRITE(PPI8255, "ppi8255_0", ppi8255_w)
|
||||
AM_RANGE(0xa000, 0xa003) AM_DEVWRITE(PPI8255, "ppi8255_1", ppi8255_w)
|
||||
AM_RANGE(0xa801, 0xa801) AM_WRITE(galaxold_nmi_enable_w)
|
||||
AM_RANGE(0xa800, 0xa802) AM_WRITE(galaxold_gfxbank_w)
|
||||
AM_RANGE(0xa806, 0xa806) AM_WRITE(galaxold_flip_screen_x_w)
|
||||
@ -265,59 +245,59 @@ static ADDRESS_MAP_START( mimonkey_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static READ8_HANDLER( anteatg_ppi8255_0_reg0_r )
|
||||
static READ8_DEVICE_HANDLER( anteatg_ppi8255_0_reg0_r )
|
||||
{
|
||||
return ppi8255_0_r(machine, 0);
|
||||
return ppi8255_r(device, 0);
|
||||
}
|
||||
|
||||
static READ8_HANDLER( anteatg_ppi8255_0_reg1_r )
|
||||
static READ8_DEVICE_HANDLER( anteatg_ppi8255_0_reg1_r )
|
||||
{
|
||||
return ppi8255_0_r(machine, 1);
|
||||
return ppi8255_r(device, 1);
|
||||
}
|
||||
|
||||
static READ8_HANDLER( anteatg_ppi8255_0_reg2_r )
|
||||
static READ8_DEVICE_HANDLER( anteatg_ppi8255_0_reg2_r )
|
||||
{
|
||||
return ppi8255_0_r(machine, 2);
|
||||
return ppi8255_r(device, 2);
|
||||
}
|
||||
|
||||
static READ8_HANDLER( anteatg_ppi8255_0_reg3_r )
|
||||
static READ8_DEVICE_HANDLER( anteatg_ppi8255_0_reg3_r )
|
||||
{
|
||||
return ppi8255_0_r(machine, 3);
|
||||
return ppi8255_r(device, 3);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( anteatg_ppi8255_0_reg0_w )
|
||||
static WRITE8_DEVICE_HANDLER( anteatg_ppi8255_0_reg0_w )
|
||||
{
|
||||
ppi8255_0_w(machine, 0, data);
|
||||
ppi8255_w(device, 0, data);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( anteatg_ppi8255_0_reg1_w )
|
||||
static WRITE8_DEVICE_HANDLER( anteatg_ppi8255_0_reg1_w )
|
||||
{
|
||||
ppi8255_0_w(machine, 1, data);
|
||||
ppi8255_w(device, 1, data);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( anteatg_ppi8255_0_reg2_w )
|
||||
static WRITE8_DEVICE_HANDLER( anteatg_ppi8255_0_reg2_w )
|
||||
{
|
||||
ppi8255_0_w(machine, 2, data);
|
||||
ppi8255_w(device, 2, data);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( anteatg_ppi8255_0_reg3_w )
|
||||
static WRITE8_DEVICE_HANDLER( anteatg_ppi8255_0_reg3_w )
|
||||
{
|
||||
ppi8255_0_w(machine, 3, data);
|
||||
ppi8255_w(device, 3, data);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( anteatg_ppi8255_1_reg0_w )
|
||||
static WRITE8_DEVICE_HANDLER( anteatg_ppi8255_1_reg0_w )
|
||||
{
|
||||
ppi8255_1_w(machine, 0, data);
|
||||
ppi8255_w(device, 0, data);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( anteatg_ppi8255_1_reg1_w )
|
||||
static WRITE8_DEVICE_HANDLER( anteatg_ppi8255_1_reg1_w )
|
||||
{
|
||||
ppi8255_1_w(machine, 1, data);
|
||||
ppi8255_w(device, 1, data);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( anteatg_ppi8255_1_reg3_w )
|
||||
static WRITE8_DEVICE_HANDLER( anteatg_ppi8255_1_reg3_w )
|
||||
{
|
||||
ppi8255_1_w(machine, 3, data);
|
||||
ppi8255_w(device, 3, data);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( anteatg_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -330,10 +310,10 @@ static ADDRESS_MAP_START( anteatg_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x8300, 0x98ff) AM_READ(SMH_ROM)
|
||||
AM_RANGE(0xa300, 0xa7ff) AM_READ(SMH_ROM)
|
||||
AM_RANGE(0xf521, 0xf521) AM_READ(watchdog_reset_r)
|
||||
AM_RANGE(0xf612, 0xf612) AM_READ(anteatg_ppi8255_0_reg0_r)
|
||||
AM_RANGE(0xf631, 0xf631) AM_READ(anteatg_ppi8255_0_reg1_r)
|
||||
AM_RANGE(0xf710, 0xf710) AM_READ(anteatg_ppi8255_0_reg2_r)
|
||||
AM_RANGE(0xf753, 0xf753) AM_READ(anteatg_ppi8255_0_reg3_r)
|
||||
AM_RANGE(0xf612, 0xf612) AM_DEVREAD(PPI8255, "ppi8255_0", anteatg_ppi8255_0_reg0_r)
|
||||
AM_RANGE(0xf631, 0xf631) AM_DEVREAD(PPI8255, "ppi8255_0", anteatg_ppi8255_0_reg1_r)
|
||||
AM_RANGE(0xf710, 0xf710) AM_DEVREAD(PPI8255, "ppi8255_0", anteatg_ppi8255_0_reg2_r)
|
||||
AM_RANGE(0xf753, 0xf753) AM_DEVREAD(PPI8255, "ppi8255_0", anteatg_ppi8255_0_reg3_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( anteatg_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -344,9 +324,9 @@ static ADDRESS_MAP_START( anteatg_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x2040, 0x205f) AM_WRITE(SMH_RAM) AM_BASE(&galaxold_spriteram) AM_SIZE(&galaxold_spriteram_size)
|
||||
AM_RANGE(0x2060, 0x207f) AM_WRITE(SMH_RAM) AM_BASE(&galaxold_bulletsram) AM_SIZE(&galaxold_bulletsram_size)
|
||||
AM_RANGE(0x2080, 0x20ff) AM_WRITE(SMH_RAM)
|
||||
AM_RANGE(0x2423, 0x2423) AM_WRITE(anteatg_ppi8255_1_reg3_w)
|
||||
AM_RANGE(0x2450, 0x2450) AM_WRITE(anteatg_ppi8255_1_reg0_w)
|
||||
AM_RANGE(0x2511, 0x2511) AM_WRITE(anteatg_ppi8255_1_reg1_w)
|
||||
AM_RANGE(0x2423, 0x2423) AM_DEVWRITE(PPI8255, "ppi8255_1", anteatg_ppi8255_1_reg3_w)
|
||||
AM_RANGE(0x2450, 0x2450) AM_DEVWRITE(PPI8255, "ppi8255_1", anteatg_ppi8255_1_reg0_w)
|
||||
AM_RANGE(0x2511, 0x2511) AM_DEVWRITE(PPI8255, "ppi8255_1", anteatg_ppi8255_1_reg1_w)
|
||||
AM_RANGE(0x2621, 0x2621) AM_WRITE(galaxold_nmi_enable_w)
|
||||
AM_RANGE(0x2624, 0x2624) AM_WRITE(galaxold_stars_enable_w)
|
||||
AM_RANGE(0x2647, 0x2647) AM_WRITE(galaxold_flip_screen_y_w)
|
||||
@ -358,10 +338,10 @@ static ADDRESS_MAP_START( anteatg_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x7c00, 0x7fff) AM_WRITE(galaxold_videoram_w) /* mirror */
|
||||
AM_RANGE(0x8300, 0x98ff) AM_WRITE(SMH_ROM)
|
||||
AM_RANGE(0xa300, 0xa7ff) AM_WRITE(SMH_ROM)
|
||||
AM_RANGE(0xf612, 0xf612) AM_WRITE(anteatg_ppi8255_0_reg0_w)
|
||||
AM_RANGE(0xf631, 0xf631) AM_WRITE(anteatg_ppi8255_0_reg1_w)
|
||||
AM_RANGE(0xf710, 0xf710) AM_WRITE(anteatg_ppi8255_0_reg2_w)
|
||||
AM_RANGE(0xf753, 0xf753) AM_WRITE(anteatg_ppi8255_0_reg3_w)
|
||||
AM_RANGE(0xf612, 0xf612) AM_DEVWRITE(PPI8255, "ppi8255_0", anteatg_ppi8255_0_reg0_w)
|
||||
AM_RANGE(0xf631, 0xf631) AM_DEVWRITE(PPI8255, "ppi8255_0", anteatg_ppi8255_0_reg1_w)
|
||||
AM_RANGE(0xf710, 0xf710) AM_DEVWRITE(PPI8255, "ppi8255_0", anteatg_ppi8255_0_reg2_w)
|
||||
AM_RANGE(0xf753, 0xf753) AM_DEVWRITE(PPI8255, "ppi8255_0", anteatg_ppi8255_0_reg3_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( anteatgb_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -373,8 +353,8 @@ static ADDRESS_MAP_START( anteatgb_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x6400, 0x7aff) AM_READ(SMH_ROM)
|
||||
AM_RANGE(0x8300, 0x98ff) AM_READ(SMH_ROM)
|
||||
AM_RANGE(0xa300, 0xa7ff) AM_READ(SMH_ROM)
|
||||
AM_RANGE(0xf300, 0xf303) AM_READ(ppi8255_0_r)
|
||||
AM_RANGE(0xfe00, 0xfe03) AM_READ(ppi8255_1_r)
|
||||
AM_RANGE(0xf300, 0xf303) AM_DEVREAD(PPI8255, "ppi8255_0", ppi8255_r)
|
||||
AM_RANGE(0xfe00, 0xfe03) AM_DEVREAD(PPI8255, "ppi8255_1", ppi8255_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( anteatgb_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -395,8 +375,8 @@ static ADDRESS_MAP_START( anteatgb_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x6400, 0x7aff) AM_WRITE(SMH_ROM)
|
||||
AM_RANGE(0x8300, 0x98ff) AM_WRITE(SMH_ROM)
|
||||
AM_RANGE(0xa300, 0xa7ff) AM_WRITE(SMH_ROM)
|
||||
AM_RANGE(0xf300, 0xf303) AM_WRITE(ppi8255_0_w)
|
||||
AM_RANGE(0xfe00, 0xfe03) AM_WRITE(ppi8255_1_w)
|
||||
AM_RANGE(0xf300, 0xf303) AM_DEVWRITE(PPI8255, "ppi8255_0", ppi8255_w)
|
||||
AM_RANGE(0xfe00, 0xfe03) AM_DEVWRITE(PPI8255, "ppi8255_1", ppi8255_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static UINT8 *scobra_soundram;
|
||||
@ -1393,6 +1373,12 @@ static MACHINE_DRIVER_START( type1 )
|
||||
|
||||
MDRV_MACHINE_RESET(scramble)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( scramble_ppi_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( scramble_ppi_ppi8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(16000.0/132/2)
|
||||
@ -1419,6 +1405,18 @@ static MACHINE_DRIVER_START( type1 )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( superbon )
|
||||
/* basic machine hardware */
|
||||
MDRV_IMPORT_FROM(type1)
|
||||
|
||||
/* device config overrides */
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( scramble_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( scramble_ppi8255_intf[1] )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
/* same as regular type 1, the only difference that it has long bullets */
|
||||
static MACHINE_DRIVER_START( armorcar )
|
||||
|
||||
@ -1439,6 +1437,13 @@ static MACHINE_DRIVER_START( moonwar )
|
||||
/* basic machine hardware */
|
||||
MDRV_IMPORT_FROM(type1)
|
||||
|
||||
/* device config overrides */
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( moonwar_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( moonwar_ppi8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_PALETTE_LENGTH(32+64+2+1) /* 32 for characters, 64 for stars, 2 for bullets, 1 for bg */
|
||||
|
||||
@ -1516,6 +1521,13 @@ static MACHINE_DRIVER_START( stratgyx )
|
||||
/* basic machine hardware */
|
||||
MDRV_IMPORT_FROM(type2)
|
||||
|
||||
/* device config overrides */
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( stratgyx_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( stratgyx_ppi8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_PALETTE_LENGTH(32+64+2+8) /* 32 for characters, 64 for stars, 2 for bullets, 8 for background */
|
||||
|
||||
@ -1529,6 +1541,13 @@ static MACHINE_DRIVER_START( darkplnt )
|
||||
/* basic machine hardware */
|
||||
MDRV_IMPORT_FROM(type2)
|
||||
|
||||
/* device config overrides */
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( darkplnt_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( darkplnt_ppi8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_PALETTE_LENGTH(32+64+2) /* 32 for characters, 64 (buffer) for stars, 2 for bullets */
|
||||
|
||||
@ -1550,6 +1569,13 @@ static MACHINE_DRIVER_START( hustler )
|
||||
|
||||
MDRV_MACHINE_RESET(scramble)
|
||||
|
||||
/* device config overrides */
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( scramble_ppi_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( scramble_ppi_ppi8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(16000.0/132/2)
|
||||
|
@ -41,9 +41,9 @@ static ADDRESS_MAP_START( scramble_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x5000, 0x50ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x7000, 0x7000) AM_READ(watchdog_reset_r)
|
||||
AM_RANGE(0x7800, 0x7800) AM_READ(watchdog_reset_r)
|
||||
AM_RANGE(0x8100, 0x8103) AM_READ(ppi8255_0_r)
|
||||
AM_RANGE(0x8110, 0x8113) AM_READ(ppi8255_0_r) /* mirror for Frog */
|
||||
AM_RANGE(0x8200, 0x8203) AM_READ(ppi8255_1_r)
|
||||
AM_RANGE(0x8100, 0x8103) AM_DEVREAD(PPI8255, "ppi8255_0", ppi8255_r)
|
||||
AM_RANGE(0x8110, 0x8113) AM_DEVREAD(PPI8255, "ppi8255_0", ppi8255_r) /* mirror for Frog */
|
||||
AM_RANGE(0x8200, 0x8203) AM_DEVREAD(PPI8255, "ppi8255_1", ppi8255_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( scramble_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -60,8 +60,8 @@ static ADDRESS_MAP_START( scramble_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x6804, 0x6804) AM_WRITE(galaxold_stars_enable_w)
|
||||
AM_RANGE(0x6806, 0x6806) AM_WRITE(galaxold_flip_screen_x_w)
|
||||
AM_RANGE(0x6807, 0x6807) AM_WRITE(galaxold_flip_screen_y_w)
|
||||
AM_RANGE(0x8100, 0x8103) AM_WRITE(ppi8255_0_w)
|
||||
AM_RANGE(0x8200, 0x8203) AM_WRITE(ppi8255_1_w)
|
||||
AM_RANGE(0x8100, 0x8103) AM_DEVWRITE(PPI8255, "ppi8255_0", ppi8255_w)
|
||||
AM_RANGE(0x8200, 0x8203) AM_DEVWRITE(PPI8255, "ppi8255_1", ppi8255_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -142,8 +142,8 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( ckongs_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x5fff) AM_READ(SMH_ROM)
|
||||
AM_RANGE(0x6000, 0x6bff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x7000, 0x7003) AM_READ(ppi8255_0_r)
|
||||
AM_RANGE(0x7800, 0x7803) AM_READ(ppi8255_1_r)
|
||||
AM_RANGE(0x7000, 0x7003) AM_DEVREAD(PPI8255, "ppi8255_0", ppi8255_r)
|
||||
AM_RANGE(0x7800, 0x7803) AM_DEVREAD(PPI8255, "ppi8255_1", ppi8255_r)
|
||||
AM_RANGE(0x9000, 0x93ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x9800, 0x98ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0xb000, 0xb000) AM_READ(watchdog_reset_r)
|
||||
@ -152,8 +152,8 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( ckongs_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x5fff) AM_WRITE(SMH_ROM)
|
||||
AM_RANGE(0x6000, 0x6bff) AM_WRITE(SMH_RAM)
|
||||
AM_RANGE(0x7000, 0x7003) AM_WRITE(ppi8255_0_w)
|
||||
AM_RANGE(0x7800, 0x7803) AM_WRITE(ppi8255_1_w)
|
||||
AM_RANGE(0x7000, 0x7003) AM_DEVWRITE(PPI8255, "ppi8255_0", ppi8255_w)
|
||||
AM_RANGE(0x7800, 0x7803) AM_DEVWRITE(PPI8255, "ppi8255_1", ppi8255_w)
|
||||
AM_RANGE(0x9000, 0x93ff) AM_WRITE(galaxold_videoram_w) AM_BASE(&galaxold_videoram)
|
||||
AM_RANGE(0x9800, 0x983f) AM_WRITE(galaxold_attributesram_w) AM_BASE(&galaxold_attributesram)
|
||||
AM_RANGE(0x9840, 0x985f) AM_WRITE(SMH_RAM) AM_BASE(&galaxold_spriteram) AM_SIZE(&galaxold_spriteram_size)
|
||||
@ -166,24 +166,14 @@ static ADDRESS_MAP_START( ckongs_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static READ8_HANDLER(mars_ppi8255_0_r)
|
||||
static READ8_DEVICE_HANDLER(mars_ppi8255_r)
|
||||
{
|
||||
return ppi8255_0_r(machine, ((offset >> 2) & 0x02) | ((offset >> 1) & 0x01));
|
||||
return ppi8255_r(device, ((offset >> 2) & 0x02) | ((offset >> 1) & 0x01));
|
||||
}
|
||||
|
||||
static READ8_HANDLER(mars_ppi8255_1_r)
|
||||
static WRITE8_DEVICE_HANDLER(mars_ppi8255_w)
|
||||
{
|
||||
return ppi8255_1_r(machine, ((offset >> 2) & 0x02) | ((offset >> 1) & 0x01));
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER(mars_ppi8255_0_w)
|
||||
{
|
||||
ppi8255_0_w(machine, ((offset >> 2) & 0x02) | ((offset >> 1) & 0x01), data);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER(mars_ppi8255_1_w)
|
||||
{
|
||||
ppi8255_1_w(machine, ((offset >> 2) & 0x02) | ((offset >> 1) & 0x01), data);
|
||||
ppi8255_w(device, ((offset >> 2) & 0x02) | ((offset >> 1) & 0x01), data);
|
||||
}
|
||||
|
||||
|
||||
@ -194,8 +184,8 @@ static ADDRESS_MAP_START( mars_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x5000, 0x50ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x7000, 0x7000) AM_READ(watchdog_reset_r)
|
||||
AM_RANGE(0x7000, 0x7000) AM_READ(SMH_NOP)
|
||||
AM_RANGE(0x8100, 0x810f) AM_READ(mars_ppi8255_0_r)
|
||||
AM_RANGE(0x8200, 0x820f) AM_READ(mars_ppi8255_1_r)
|
||||
AM_RANGE(0x8100, 0x810f) AM_DEVREAD(PPI8255, "ppi8255_0", mars_ppi8255_r)
|
||||
AM_RANGE(0x8200, 0x820f) AM_DEVREAD(PPI8255, "ppi8255_1", mars_ppi8255_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( mars_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -212,8 +202,8 @@ static ADDRESS_MAP_START( mars_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x6808, 0x6808) AM_WRITE(galaxold_coin_counter_0_w)
|
||||
AM_RANGE(0x6809, 0x6809) AM_WRITE(galaxold_flip_screen_x_w)
|
||||
AM_RANGE(0x680b, 0x680b) AM_WRITE(galaxold_flip_screen_y_w)
|
||||
AM_RANGE(0x8100, 0x810f) AM_WRITE(mars_ppi8255_0_w)
|
||||
AM_RANGE(0x8200, 0x820f) AM_WRITE(mars_ppi8255_1_w)
|
||||
AM_RANGE(0x8100, 0x810f) AM_DEVWRITE(PPI8255, "ppi8255_0", mars_ppi8255_w)
|
||||
AM_RANGE(0x8200, 0x820f) AM_DEVWRITE(PPI8255, "ppi8255_1", mars_ppi8255_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -223,9 +213,9 @@ static ADDRESS_MAP_START( newsin7_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x4c00, 0x4fff) AM_READ(galaxold_videoram_r)
|
||||
AM_RANGE(0x5000, 0x50ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x7000, 0x7000) AM_READ(watchdog_reset_r)
|
||||
AM_RANGE(0x8200, 0x820f) AM_READ(mars_ppi8255_1_r)
|
||||
AM_RANGE(0x8200, 0x820f) AM_DEVREAD(PPI8255, "ppi8255_1", mars_ppi8255_r)
|
||||
AM_RANGE(0xa000, 0xafff) AM_READ(SMH_ROM)
|
||||
AM_RANGE(0xc100, 0xc10f) AM_READ(mars_ppi8255_0_r)
|
||||
AM_RANGE(0xc100, 0xc10f) AM_DEVREAD(PPI8255, "ppi8255_0", mars_ppi8255_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( newsin7_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -242,9 +232,9 @@ static ADDRESS_MAP_START( newsin7_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x6808, 0x6808) AM_WRITE(galaxold_coin_counter_0_w)
|
||||
AM_RANGE(0x6809, 0x6809) AM_WRITE(galaxold_flip_screen_x_w)
|
||||
AM_RANGE(0x680b, 0x680b) AM_WRITE(galaxold_flip_screen_y_w)
|
||||
AM_RANGE(0x8200, 0x820f) AM_WRITE(mars_ppi8255_1_w)
|
||||
AM_RANGE(0x8200, 0x820f) AM_DEVWRITE(PPI8255, "ppi8255_1", mars_ppi8255_w)
|
||||
AM_RANGE(0xa000, 0xafff) AM_WRITE(SMH_ROM)
|
||||
AM_RANGE(0xc100, 0xc10f) AM_WRITE(mars_ppi8255_0_w)
|
||||
AM_RANGE(0xc100, 0xc10f) AM_DEVWRITE(PPI8255, "ppi8255_0", mars_ppi8255_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -262,8 +252,8 @@ static ADDRESS_MAP_START( mrkougar_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x6808, 0x6808) AM_WRITE(galaxold_coin_counter_0_w)
|
||||
AM_RANGE(0x6809, 0x6809) AM_WRITE(galaxold_flip_screen_x_w)
|
||||
AM_RANGE(0x680b, 0x680b) AM_WRITE(galaxold_flip_screen_y_w)
|
||||
AM_RANGE(0x8100, 0x810f) AM_WRITE(mars_ppi8255_0_w)
|
||||
AM_RANGE(0x8200, 0x820f) AM_WRITE(mars_ppi8255_1_w)
|
||||
AM_RANGE(0x8100, 0x810f) AM_DEVWRITE(PPI8255, "ppi8255_0", mars_ppi8255_w)
|
||||
AM_RANGE(0x8200, 0x820f) AM_DEVWRITE(PPI8255, "ppi8255_1", mars_ppi8255_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -300,9 +290,9 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( hunchbks_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x0fff) AM_READ(SMH_ROM)
|
||||
AM_RANGE(0x1210, 0x1213) AM_READ(ppi8255_1_r)
|
||||
AM_RANGE(0x1210, 0x1213) AM_DEVREAD(PPI8255, "ppi8255_1", ppi8255_r)
|
||||
AM_RANGE(0x1400, 0x14ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x1500, 0x1503) AM_READ(ppi8255_0_r)
|
||||
AM_RANGE(0x1500, 0x1503) AM_DEVREAD(PPI8255, "ppi8255_0", ppi8255_r)
|
||||
AM_RANGE(0x1680, 0x1680) AM_READ(watchdog_reset_r)
|
||||
AM_RANGE(0x1780, 0x1780) AM_READ(watchdog_reset_r)
|
||||
AM_RANGE(0x1800, 0x1fff) AM_READ(SMH_RAM)
|
||||
@ -316,12 +306,12 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( hunchbks_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x0fff) AM_WRITE(SMH_ROM)
|
||||
AM_RANGE(0x1210, 0x1213) AM_WRITE(ppi8255_1_w)
|
||||
AM_RANGE(0x1210, 0x1213) AM_DEVWRITE(PPI8255, "ppi8255_1", ppi8255_w)
|
||||
AM_RANGE(0x1400, 0x143f) AM_WRITE(galaxold_attributesram_w) AM_BASE(&galaxold_attributesram)
|
||||
AM_RANGE(0x1440, 0x145f) AM_WRITE(SMH_RAM) AM_BASE(&galaxold_spriteram) AM_SIZE(&galaxold_spriteram_size)
|
||||
AM_RANGE(0x1460, 0x147f) AM_WRITE(SMH_RAM) AM_BASE(&galaxold_bulletsram) AM_SIZE(&galaxold_bulletsram_size)
|
||||
AM_RANGE(0x1480, 0x14ff) AM_WRITE(SMH_RAM)
|
||||
AM_RANGE(0x1500, 0x1503) AM_WRITE(ppi8255_0_w)
|
||||
AM_RANGE(0x1500, 0x1503) AM_DEVWRITE(PPI8255, "ppi8255_0", ppi8255_w)
|
||||
AM_RANGE(0x1606, 0x1606) AM_WRITE(galaxold_flip_screen_x_w)
|
||||
AM_RANGE(0x1607, 0x1607) AM_WRITE(galaxold_flip_screen_y_w)
|
||||
AM_RANGE(0x1800, 0x1bff) AM_WRITE(galaxold_videoram_w) AM_BASE(&galaxold_videoram)
|
||||
@ -341,8 +331,8 @@ static ADDRESS_MAP_START( mimonscr_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x4400, 0x4bff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x5000, 0x50ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x7000, 0x7000) AM_READ(watchdog_reset_r)
|
||||
AM_RANGE(0x8100, 0x8103) AM_READ(ppi8255_0_r)
|
||||
AM_RANGE(0x8200, 0x8203) AM_READ(ppi8255_1_r)
|
||||
AM_RANGE(0x8100, 0x8103) AM_DEVREAD(PPI8255, "ppi8255_0", ppi8255_r)
|
||||
AM_RANGE(0x8200, 0x8203) AM_DEVREAD(PPI8255, "ppi8255_1", ppi8255_r)
|
||||
AM_RANGE(0xc000, 0xffff) AM_READ(SMH_ROM)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -359,30 +349,20 @@ static ADDRESS_MAP_START( mimonscr_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x6800, 0x6802) AM_WRITE(galaxold_gfxbank_w)
|
||||
AM_RANGE(0x6806, 0x6806) AM_WRITE(galaxold_flip_screen_x_w)
|
||||
AM_RANGE(0x6807, 0x6807) AM_WRITE(galaxold_flip_screen_y_w)
|
||||
AM_RANGE(0x8100, 0x8103) AM_WRITE(ppi8255_0_w)
|
||||
AM_RANGE(0x8200, 0x8203) AM_WRITE(ppi8255_1_w)
|
||||
AM_RANGE(0x8100, 0x8103) AM_DEVWRITE(PPI8255, "ppi8255_0", ppi8255_w)
|
||||
AM_RANGE(0x8200, 0x8203) AM_DEVWRITE(PPI8255, "ppi8255_1", ppi8255_w)
|
||||
AM_RANGE(0xc000, 0xffff) AM_WRITE(SMH_ROM)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static READ8_HANDLER(frogf_ppi8255_0_r)
|
||||
static READ8_DEVICE_HANDLER(frogf_ppi8255_r)
|
||||
{
|
||||
return ppi8255_0_r(machine, offset >> 3);
|
||||
return ppi8255_r(device, offset >> 3);
|
||||
}
|
||||
|
||||
static READ8_HANDLER(frogf_ppi8255_1_r)
|
||||
static WRITE8_DEVICE_HANDLER(frogf_ppi8255_w)
|
||||
{
|
||||
return ppi8255_1_r(machine, offset >> 3);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER(frogf_ppi8255_0_w)
|
||||
{
|
||||
ppi8255_0_w(machine, offset >> 3, data);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER(frogf_ppi8255_1_w)
|
||||
{
|
||||
ppi8255_1_w(machine, offset >> 3, data);
|
||||
ppi8255_w(device, offset >> 3, data);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( frogf_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -398,8 +378,8 @@ static ADDRESS_MAP_START( frogf_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0xa808, 0xa808) AM_WRITE(galaxold_coin_counter_1_w)
|
||||
AM_RANGE(0xa80e, 0xa80e) AM_WRITE(galaxold_coin_counter_0_w)
|
||||
AM_RANGE(0xb800, 0xb800) AM_READ(watchdog_reset_r)
|
||||
AM_RANGE(0xd000, 0xd018) AM_READWRITE(frogf_ppi8255_0_r, frogf_ppi8255_0_w)
|
||||
AM_RANGE(0xe000, 0xe018) AM_READWRITE(frogf_ppi8255_1_r, frogf_ppi8255_1_w)
|
||||
AM_RANGE(0xd000, 0xd018) AM_DEVREADWRITE(PPI8255, "ppi8255_0", frogf_ppi8255_r, frogf_ppi8255_w)
|
||||
AM_RANGE(0xe000, 0xe018) AM_DEVREADWRITE(PPI8255, "ppi8255_1", frogf_ppi8255_r, frogf_ppi8255_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( ad2083_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -1860,6 +1840,12 @@ static MACHINE_DRIVER_START( scramble )
|
||||
|
||||
MDRV_MACHINE_RESET(scramble)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( scramble_ppi_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( scramble_ppi_ppi8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(16000.0/132/2)
|
||||
@ -1954,6 +1940,12 @@ static MACHINE_DRIVER_START( mars )
|
||||
MDRV_CPU_MODIFY("main")
|
||||
MDRV_CPU_PROGRAM_MAP(mars_readmem,mars_writemem)
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( mars_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( mars_ppi8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_PALETTE_LENGTH(32+64+2+0) /* 32 for characters, 64 for stars, 2 for bullets, 0/1 for background */
|
||||
MDRV_PALETTE_INIT(galaxold)
|
||||
@ -1979,6 +1971,12 @@ static MACHINE_DRIVER_START( newsin7 )
|
||||
MDRV_CPU_MODIFY("main")
|
||||
MDRV_CPU_PROGRAM_MAP(newsin7_readmem,newsin7_writemem)
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( mars_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( mars_ppi8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_GFXDECODE(newsin7)
|
||||
MDRV_PALETTE_LENGTH(32+64+2+0) /* 32 for characters, 64 for stars, 2 for bullets, 0/1 for background */
|
||||
@ -1993,6 +1991,12 @@ static MACHINE_DRIVER_START( mrkougar )
|
||||
MDRV_CPU_MODIFY("main")
|
||||
MDRV_CPU_PROGRAM_MAP(mars_readmem,mrkougar_writemem)
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( mrkougar_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( mrkougar_ppi8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_GFXDECODE(mrkougar)
|
||||
MDRV_PALETTE_LENGTH(32+64+2+0) /* 32 for characters, 64 for stars, 2 for bullets, 0/1 for background */
|
||||
@ -2006,6 +2010,12 @@ static MACHINE_DRIVER_START( mrkougb )
|
||||
MDRV_CPU_MODIFY("main")
|
||||
MDRV_CPU_PROGRAM_MAP(mars_readmem,mrkougar_writemem)
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( mrkougar_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( mrkougar_ppi8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_PALETTE_LENGTH(32+64+2+0) /* 32 for characters, 64 for stars, 2 for bullets, 0/1 for background */
|
||||
MDRV_PALETTE_INIT(galaxold)
|
||||
@ -2018,6 +2028,12 @@ static MACHINE_DRIVER_START( ckongs )
|
||||
MDRV_CPU_MODIFY("main")
|
||||
MDRV_CPU_PROGRAM_MAP(ckongs_readmem,ckongs_writemem)
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ckongs_ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ckongs_ppi8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_PALETTE_LENGTH(32+64+2+0) /* 32 for characters, 64 for stars, 2 for bullets, 0/1 for background */
|
||||
MDRV_PALETTE_INIT(galaxold)
|
||||
@ -2031,6 +2047,9 @@ static MACHINE_DRIVER_START( hotshock )
|
||||
MDRV_CPU_MODIFY("main")
|
||||
MDRV_CPU_PROGRAM_MAP(hotshock_readmem,hotshock_writemem)
|
||||
|
||||
MDRV_DEVICE_REMOVE( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_REMOVE( "ppi8255_1", PPI8255 )
|
||||
|
||||
MDRV_CPU_MODIFY("audio")
|
||||
MDRV_CPU_IO_MAP(hotshock_sound_readport,hotshock_sound_writeport)
|
||||
|
||||
@ -2197,6 +2216,7 @@ static MACHINE_DRIVER_START( turpins )
|
||||
MDRV_IMPORT_FROM(scramble)
|
||||
MDRV_CPU_MODIFY("main")
|
||||
MDRV_CPU_PROGRAM_MAP(turpins_readmem,turpins_writemem)
|
||||
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
/***************************************************************************
|
||||
|
@ -300,6 +300,12 @@ static WRITE8_HANDLER( coin_count_w )
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static READ8_HANDLER( sindbadm_portb_r )
|
||||
{
|
||||
return input_port_read(machine, "FC");
|
||||
}
|
||||
|
||||
|
||||
static WRITE8_HANDLER( sindbadm_soundport_w )
|
||||
{
|
||||
soundlatch_w(machine,0,data);
|
||||
@ -329,6 +335,24 @@ static WRITE8_HANDLER( sindbadm_SN76496_1_w )
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* PPI 8255 configurations
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static const ppi8255_interface sindbadm_ppi_intf =
|
||||
{
|
||||
NULL,
|
||||
sindbadm_portb_r,
|
||||
NULL,
|
||||
sindbadm_soundport_w,
|
||||
NULL,
|
||||
sindbadm_misc_w
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Main CPU memory handlers
|
||||
@ -355,9 +379,20 @@ static ADDRESS_MAP_START( main_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( main_ppi8255_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE(PPI8255, "ppi8255", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xbe, 0xbf) AM_READWRITE(segag80r_video_port_r, segag80r_video_port_w)
|
||||
AM_RANGE(0xf9, 0xf9) AM_MIRROR(0x04) AM_WRITE(coin_count_w)
|
||||
AM_RANGE(0xf8, 0xfb) AM_READ(mangled_ports_r)
|
||||
AM_RANGE(0xfc, 0xfc) AM_READ_PORT("FC")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( sindbadm_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x42, 0x43) AM_READWRITE(segag80r_video_port_r, segag80r_video_port_w)
|
||||
AM_RANGE(0x80, 0x83) AM_DEVREADWRITE(PPI8255, "ppi8255", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xf8, 0xfb) AM_READ(mangled_ports_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -854,6 +889,9 @@ static MACHINE_DRIVER_START( 005 )
|
||||
/* basic machine hardware */
|
||||
MDRV_IMPORT_FROM(g80r_base)
|
||||
|
||||
MDRV_CPU_MODIFY("main")
|
||||
MDRV_CPU_IO_MAP(main_ppi8255_portmap,0)
|
||||
|
||||
/* sound boards */
|
||||
MDRV_IMPORT_FROM(005_sound_board)
|
||||
MACHINE_DRIVER_END
|
||||
@ -881,6 +919,9 @@ static MACHINE_DRIVER_START( monsterb )
|
||||
/* basic machine hardware */
|
||||
MDRV_IMPORT_FROM(g80r_base)
|
||||
|
||||
MDRV_CPU_MODIFY("main")
|
||||
MDRV_CPU_IO_MAP(main_ppi8255_portmap,0)
|
||||
|
||||
/* background board changes */
|
||||
MDRV_GFXDECODE(monsterb)
|
||||
MDRV_PALETTE_LENGTH(64+64)
|
||||
@ -913,6 +954,9 @@ static MACHINE_DRIVER_START( sindbadm )
|
||||
MDRV_CPU_IO_MAP(sindbadm_portmap,0)
|
||||
MDRV_CPU_VBLANK_INT("main", sindbadm_vblank_start)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( sindbadm_ppi_intf )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_GFXDECODE(monsterb)
|
||||
MDRV_PALETTE_LENGTH(64+64)
|
||||
@ -1414,9 +1458,6 @@ static DRIVER_INIT( 005 )
|
||||
|
||||
/* configure video */
|
||||
segag80r_background_pcb = G80_BACKGROUND_NONE;
|
||||
|
||||
/* install the 8255 PPI for the sound board */
|
||||
memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_IO, 0x0c, 0x0f, 0, 0, ppi8255_0_r, ppi8255_0_w);
|
||||
}
|
||||
|
||||
|
||||
@ -1452,9 +1493,6 @@ static DRIVER_INIT( monsterb )
|
||||
/* install background board handlers */
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_IO, 0xb8, 0xbd, 0, 0, monsterb_back_port_w);
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xe000, 0xffff, 0, 0, monsterb_vidram_w);
|
||||
|
||||
/* install Monster Bash sound board */
|
||||
memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_IO, 0x0c, 0x0f, 0, 0, ppi8255_0_r, ppi8255_0_w);
|
||||
}
|
||||
|
||||
|
||||
@ -1472,9 +1510,6 @@ static DRIVER_INIT( monster2 )
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_IO, 0xb4, 0xb5, 0, 0, pignewt_back_color_w);
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_IO, 0xb8, 0xbd, 0, 0, pignewt_back_port_w);
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xe000, 0xffff, 0, 0, pignewt_vidram_w);
|
||||
|
||||
/* install Monster Bash sound board */
|
||||
memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_IO, 0x0c, 0x0f, 0, 0, ppi8255_0_r, ppi8255_0_w);
|
||||
}
|
||||
|
||||
|
||||
@ -1500,17 +1535,6 @@ static DRIVER_INIT( pignewt )
|
||||
|
||||
static DRIVER_INIT( sindbadm )
|
||||
{
|
||||
static ppi8255_interface ppi_intf =
|
||||
{
|
||||
1,
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
{ sindbadm_soundport_w },
|
||||
{ 0 },
|
||||
{ sindbadm_misc_w }
|
||||
};
|
||||
|
||||
/* configure the encrypted Z80 */
|
||||
sindbadm_decode();
|
||||
sega_security(0);
|
||||
@ -1521,11 +1545,6 @@ static DRIVER_INIT( sindbadm )
|
||||
/* install background board handlers */
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_IO, 0x40, 0x41, 0, 0, sindbadm_back_port_w);
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xe000, 0xffff, 0, 0, sindbadm_vidram_w);
|
||||
|
||||
/* install the 8255 PPI for the sound board */
|
||||
memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_IO, 0x80, 0x83, 0, 0, ppi8255_0_r, ppi8255_0_w);
|
||||
ppi_intf.portBread[0] = port_tag_to_handler8("FC");
|
||||
ppi8255_init(&ppi_intf);
|
||||
}
|
||||
|
||||
|
||||
|
@ -63,15 +63,24 @@ static READ8_HANDLER( adc_status_r );
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static const ppi8255_interface hangon_ppi_intf =
|
||||
static const ppi8255_interface hangon_ppi_intf[2] =
|
||||
{
|
||||
2,
|
||||
{ NULL, NULL },
|
||||
{ NULL, NULL },
|
||||
{ NULL, adc_status_r },
|
||||
{ soundlatch_w, sub_control_adc_w },
|
||||
{ video_lamps_w, NULL },
|
||||
{ tilemap_sound_w, NULL }
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
soundlatch_w,
|
||||
video_lamps_w,
|
||||
tilemap_sound_w
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
adc_status_r,
|
||||
sub_control_adc_w,
|
||||
NULL,
|
||||
NULL
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -84,9 +93,6 @@ static const ppi8255_interface hangon_ppi_intf =
|
||||
|
||||
static void hangon_generic_init(void)
|
||||
{
|
||||
/* configure the 8255 interface */
|
||||
ppi8255_init(&hangon_ppi_intf);
|
||||
|
||||
/* reset the custom handlers and other pointers */
|
||||
i8751_vblank_hook = NULL;
|
||||
}
|
||||
@ -138,7 +144,7 @@ static INTERRUPT_GEN( hangon_irq )
|
||||
|
||||
static TIMER_CALLBACK( delayed_ppi8255_w )
|
||||
{
|
||||
ppi8255_0_w(machine, param >> 8, param & 0xff);
|
||||
ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), param >> 8, param & 0xff);
|
||||
}
|
||||
|
||||
|
||||
@ -147,13 +153,13 @@ static READ16_HANDLER( hangon_io_r )
|
||||
switch (offset & 0x3020/2)
|
||||
{
|
||||
case 0x0000/2: /* PPI @ 4B */
|
||||
return ppi8255_0_r(machine, offset & 3);
|
||||
return ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), offset & 3);
|
||||
|
||||
case 0x1000/2: /* Input ports and DIP switches */
|
||||
return input_port_read_indexed(machine, offset & 3);
|
||||
|
||||
case 0x3000/2: /* PPI @ 4C */
|
||||
return ppi8255_1_r(machine, offset & 3);
|
||||
return ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), offset & 3);
|
||||
|
||||
case 0x3020/2: /* ADC0804 data output */
|
||||
return input_port_read_indexed(machine, 4 + adc_select);
|
||||
@ -176,7 +182,7 @@ static WRITE16_HANDLER( hangon_io_w )
|
||||
return;
|
||||
|
||||
case 0x3000/2: /* PPI @ 4C */
|
||||
ppi8255_1_w(machine, offset & 3, data & 0xff);
|
||||
ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), offset & 3, data & 0xff);
|
||||
return;
|
||||
|
||||
case 0x3020/2: /* ADC0804 */
|
||||
@ -192,14 +198,14 @@ static READ16_HANDLER( sharrier_io_r )
|
||||
switch (offset & 0x0030/2)
|
||||
{
|
||||
case 0x0000/2:
|
||||
return ppi8255_0_r(machine, offset & 3);
|
||||
return ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), offset & 3);
|
||||
|
||||
case 0x0010/2: /* Input ports and DIP switches */
|
||||
return input_port_read_indexed(machine, offset & 3);
|
||||
|
||||
case 0x0020/2: /* PPI @ 4C */
|
||||
if (offset == 2) return 0;
|
||||
return ppi8255_1_r(machine, offset & 3);
|
||||
return ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), offset & 3);
|
||||
|
||||
case 0x0030/2: /* ADC0804 data output */
|
||||
return input_port_read_indexed(machine, 4 + adc_select);
|
||||
@ -222,7 +228,7 @@ static WRITE16_HANDLER( sharrier_io_w )
|
||||
return;
|
||||
|
||||
case 0x0020/2: /* PPI @ 4C */
|
||||
ppi8255_1_w(machine, offset & 3, data & 0xff);
|
||||
ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), offset & 3, data & 0xff);
|
||||
return;
|
||||
|
||||
case 0x0030/2: /* ADC0804 */
|
||||
@ -346,7 +352,7 @@ static void sound_irq(int irq)
|
||||
static READ8_HANDLER( sound_data_r )
|
||||
{
|
||||
/* assert ACK */
|
||||
ppi8255_set_portC(0, 0x00);
|
||||
ppi8255_set_portC(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), 0x00);
|
||||
return soundlatch_r(machine, offset);
|
||||
}
|
||||
|
||||
@ -857,6 +863,12 @@ static MACHINE_DRIVER_START( hangon_base )
|
||||
MDRV_MACHINE_RESET(hangon)
|
||||
MDRV_INTERLEAVE(100)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( hangon_ppi_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( hangon_ppi_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_GFXDECODE(segahang)
|
||||
MDRV_PALETTE_LENGTH(2048*3)
|
||||
|
@ -79,13 +79,12 @@ static WRITE8_HANDLER( video_control_w );
|
||||
|
||||
static const ppi8255_interface single_ppi_intf =
|
||||
{
|
||||
1,
|
||||
{ unknown_porta_r },
|
||||
{ unknown_portb_r },
|
||||
{ unknown_portc_r },
|
||||
{ unknown_porta_w },
|
||||
{ unknown_portb_w },
|
||||
{ video_control_w }
|
||||
unknown_porta_r,
|
||||
unknown_portb_r,
|
||||
unknown_portc_r,
|
||||
unknown_porta_w,
|
||||
unknown_portb_w,
|
||||
video_control_w
|
||||
};
|
||||
|
||||
|
||||
@ -156,9 +155,6 @@ static void outrun_generic_init(running_machine *machine)
|
||||
/* init the FD1094 */
|
||||
fd1094_driver_init(segaic16_memory_mapper_set_decrypted);
|
||||
|
||||
/* configure the 8255 interface */
|
||||
ppi8255_init(&single_ppi_intf);
|
||||
|
||||
/* reset the custom handlers and other pointers */
|
||||
custom_io_r = NULL;
|
||||
custom_io_w = NULL;
|
||||
@ -385,7 +381,7 @@ static READ16_HANDLER( outrun_custom_io_r )
|
||||
switch (offset & 0x70/2)
|
||||
{
|
||||
case 0x00/2:
|
||||
return ppi8255_0_r(machine, offset & 3);
|
||||
return ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255" ), offset & 3);
|
||||
|
||||
case 0x10/2:
|
||||
return input_port_read_indexed(machine, offset & 3);
|
||||
@ -412,7 +408,7 @@ static WRITE16_HANDLER( outrun_custom_io_w )
|
||||
{
|
||||
case 0x00/2:
|
||||
if (ACCESSING_BITS_0_7)
|
||||
ppi8255_0_w(machine, offset & 3, data);
|
||||
ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255" ), offset & 3, data);
|
||||
return;
|
||||
|
||||
case 0x20/2:
|
||||
@ -829,6 +825,9 @@ static MACHINE_DRIVER_START( outrundx )
|
||||
MDRV_MACHINE_RESET(outrun)
|
||||
MDRV_INTERLEAVE(100)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( single_ppi_intf )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_GFXDECODE(segaorun)
|
||||
MDRV_PALETTE_LENGTH(4096*3)
|
||||
|
@ -198,13 +198,12 @@ static WRITE8_HANDLER( tilemap_sound_w );
|
||||
|
||||
static const ppi8255_interface single_ppi_intf =
|
||||
{
|
||||
1,
|
||||
{ NULL },
|
||||
{ NULL },
|
||||
{ NULL },
|
||||
{ soundlatch_w },
|
||||
{ video_control_w },
|
||||
{ tilemap_sound_w }
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
soundlatch_w,
|
||||
video_control_w,
|
||||
tilemap_sound_w
|
||||
};
|
||||
|
||||
|
||||
@ -228,9 +227,6 @@ static void system16a_generic_init(running_machine *machine)
|
||||
custom_io_w = NULL;
|
||||
lamp_changed_w = NULL;
|
||||
i8751_vblank_hook = NULL;
|
||||
|
||||
/* configure the 8255 interface */
|
||||
ppi8255_init(&single_ppi_intf);
|
||||
}
|
||||
|
||||
|
||||
@ -266,7 +262,7 @@ static MACHINE_RESET( system16a )
|
||||
|
||||
static TIMER_CALLBACK( delayed_ppi8255_w )
|
||||
{
|
||||
ppi8255_0_w(machine, param >> 8, param & 0xff);
|
||||
ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255" ), param >> 8, param & 0xff);
|
||||
}
|
||||
|
||||
|
||||
@ -276,7 +272,7 @@ static READ16_HANDLER( standard_io_r )
|
||||
switch (offset & (0x3000/2))
|
||||
{
|
||||
case 0x0000/2:
|
||||
return ppi8255_0_r(machine, offset & 3);
|
||||
return ppi8255_r(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255" ), offset & 3);
|
||||
|
||||
case 0x1000/2:
|
||||
return input_port_read_indexed(machine, offset & 3);
|
||||
@ -396,7 +392,7 @@ static WRITE8_HANDLER( tilemap_sound_w )
|
||||
static READ8_HANDLER( sound_data_r )
|
||||
{
|
||||
/* assert ACK */
|
||||
ppi8255_set_portC(0, 0x00);
|
||||
ppi8255_set_portC(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255" ), 0x00);
|
||||
return soundlatch_r(machine, offset);
|
||||
}
|
||||
|
||||
@ -1792,6 +1788,9 @@ static MACHINE_DRIVER_START( system16a )
|
||||
MDRV_MACHINE_RESET(system16a)
|
||||
MDRV_NVRAM_HANDLER(system16a)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( single_ppi_intf )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
|
@ -188,9 +188,9 @@ static WRITE8_HANDLER( w6 )
|
||||
|
||||
static ADDRESS_MAP_START( smstrv_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x00000, 0x007ff) AM_RAM
|
||||
AM_RANGE(0x00800, 0x00803) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0x00800, 0x00803) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x01000, 0x01005) AM_RAM
|
||||
AM_RANGE(0x01800, 0x01803) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE(0x01800, 0x01803) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x08000, 0x0ffff) AM_ROM
|
||||
AM_RANGE(0xf8000, 0xfffff) AM_ROM // mirror for vectors
|
||||
ADDRESS_MAP_END
|
||||
@ -205,24 +205,27 @@ static VIDEO_UPDATE( smstrv )
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
static const ppi8255_interface ppi8255_intf[2] =
|
||||
{
|
||||
2, /* 2 chips */
|
||||
{ r1, r4 }, /* Port A read */
|
||||
{ r2, r5 }, /* Port B read */
|
||||
{ r3, r6 }, /* Port C read */
|
||||
{ w1, w4 }, /* Port A write */
|
||||
{ w2, w5 }, /* Port B write */
|
||||
{ w3, w6 }, /* Port C write */
|
||||
{
|
||||
r1, /* Port A read */
|
||||
r2, /* Port B read */
|
||||
r3, /* Port C read */
|
||||
w1, /* Port A write */
|
||||
w2, /* Port B write */
|
||||
w3 /* Port C write */
|
||||
},
|
||||
{
|
||||
r4, /* Port A read */
|
||||
r5, /* Port B read */
|
||||
r6, /* Port C read */
|
||||
w4, /* Port A write */
|
||||
w5, /* Port B write */
|
||||
w6 /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
static MACHINE_RESET( smstrv )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
}
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( smstrv )
|
||||
MDRV_CPU_ADD(I8088,24000000/2)
|
||||
MDRV_CPU_PROGRAM_MAP(smstrv_map,0)
|
||||
@ -230,7 +233,12 @@ static MACHINE_DRIVER_START( smstrv )
|
||||
MDRV_CPU_VBLANK_INT("main", nmi_line_pulse)
|
||||
|
||||
// MDRV_NVRAM_HANDLER(generic_0fill)
|
||||
MDRV_MACHINE_RESET(smstrv)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
|
@ -93,23 +93,50 @@ static WRITE8_HANDLER( p8910_0b_w )
|
||||
}
|
||||
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
static const ppi8255_interface ppi8255_intf[5] =
|
||||
{
|
||||
5, /* 5 chips */
|
||||
{ p0a_r, NULL, NULL, NULL, NULL }, /* Port A read */
|
||||
{ NULL, p1b_r, NULL, NULL, NULL }, /* Port B read */
|
||||
{ p0c_r, p1c_r, NULL, NULL, NULL }, /* Port C read */
|
||||
{ NULL, p1a_w, p2a_w, p3a_w, p4a_w }, /* Port A write */
|
||||
{ p0b_w, NULL, p2b_w, p3b_w, p4b_w }, /* Port B write */
|
||||
{ p0c_w, p1c_w, p2c_w, p3c_w, p4c_w } /* Port C write */
|
||||
{
|
||||
p0a_r, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
p0c_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
p0b_w, /* Port B write */
|
||||
p0c_w /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
p1b_r, /* Port B read */
|
||||
p1c_r, /* Port C read */
|
||||
p1a_w, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
p1c_w /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
p2a_w, /* Port A write */
|
||||
p2b_w, /* Port B write */
|
||||
p2c_w /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
p3a_w, /* Port A write */
|
||||
p3b_w, /* Port B write */
|
||||
p3c_w /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
p4a_w, /* Port A write */
|
||||
p4b_w, /* Port B write */
|
||||
p4c_w /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
static MACHINE_RESET( taxidrvr )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( readmem1, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_READ(SMH_ROM)
|
||||
@ -120,10 +147,10 @@ static ADDRESS_MAP_START( readmem1, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0xc000, 0xc7ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0xd800, 0xdfff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0xe000, 0xf3ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0xf400, 0xf403) AM_READ(ppi8255_0_r)
|
||||
AM_RANGE(0xf480, 0xf483) AM_READ(ppi8255_2_r)
|
||||
AM_RANGE(0xf500, 0xf503) AM_READ(ppi8255_3_r)
|
||||
AM_RANGE(0xf580, 0xf583) AM_READ(ppi8255_4_r)
|
||||
AM_RANGE(0xf400, 0xf403) AM_DEVREAD(PPI8255, "ppi8255_0", ppi8255_r)
|
||||
AM_RANGE(0xf480, 0xf483) AM_DEVREAD(PPI8255, "ppi8255_2", ppi8255_r)
|
||||
AM_RANGE(0xf500, 0xf503) AM_DEVREAD(PPI8255, "ppi8255_3", ppi8255_r)
|
||||
AM_RANGE(0xf580, 0xf583) AM_DEVREAD(PPI8255, "ppi8255_4", ppi8255_r)
|
||||
AM_RANGE(0xf800, 0xffff) AM_READ(SMH_RAM)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -141,10 +168,10 @@ static ADDRESS_MAP_START( writemem1, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0xe400, 0xebff) AM_WRITE(SMH_RAM) AM_BASE(&taxidrvr_vram2) /* bg1 tilemap */
|
||||
AM_RANGE(0xec00, 0xefff) AM_WRITE(SMH_RAM) AM_BASE(&taxidrvr_vram0) /* fg tilemap */
|
||||
AM_RANGE(0xf000, 0xf3ff) AM_WRITE(SMH_RAM) AM_BASE(&taxidrvr_vram3) /* bg2 tilemap */
|
||||
AM_RANGE(0xf400, 0xf403) AM_WRITE(ppi8255_0_w)
|
||||
AM_RANGE(0xf480, 0xf483) AM_WRITE(ppi8255_2_w) /* "sprite1" placement */
|
||||
AM_RANGE(0xf500, 0xf503) AM_WRITE(ppi8255_3_w) /* "sprite2" placement */
|
||||
AM_RANGE(0xf580, 0xf583) AM_WRITE(ppi8255_4_w) /* "sprite3" placement */
|
||||
AM_RANGE(0xf400, 0xf403) AM_DEVWRITE(PPI8255, "ppi8255_0", ppi8255_w)
|
||||
AM_RANGE(0xf480, 0xf483) AM_DEVWRITE(PPI8255, "ppi8255_2", ppi8255_w) /* "sprite1" placement */
|
||||
AM_RANGE(0xf500, 0xf503) AM_DEVWRITE(PPI8255, "ppi8255_3", ppi8255_w) /* "sprite2" placement */
|
||||
AM_RANGE(0xf580, 0xf583) AM_DEVWRITE(PPI8255, "ppi8255_4", ppi8255_w) /* "sprite3" placement */
|
||||
// AM_RANGE(0xf780, 0xf781) AM_WRITE(SMH_RAM) /* more scroll registers? */
|
||||
AM_RANGE(0xf782, 0xf787) AM_WRITE(SMH_RAM) AM_BASE(&taxidrvr_scroll) /* bg scroll (three copies always identical) */
|
||||
AM_RANGE(0xf800, 0xffff) AM_WRITE(SMH_RAM)
|
||||
@ -154,7 +181,7 @@ static ADDRESS_MAP_START( readmem2, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x3fff) AM_READ(SMH_ROM)
|
||||
AM_RANGE(0x6000, 0x67ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0x8000, 0x87ff) AM_READ(SMH_RAM)
|
||||
AM_RANGE(0xa000, 0xa003) AM_READ(ppi8255_1_r)
|
||||
AM_RANGE(0xa000, 0xa003) AM_DEVREAD(PPI8255, "ppi8255_1", ppi8255_r)
|
||||
AM_RANGE(0xe000, 0xe000) AM_READ(input_port_0_r)
|
||||
AM_RANGE(0xe001, 0xe001) AM_READ(input_port_1_r)
|
||||
AM_RANGE(0xe002, 0xe002) AM_READ(input_port_2_r)
|
||||
@ -166,7 +193,7 @@ static ADDRESS_MAP_START( writemem2, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x3fff) AM_WRITE(SMH_ROM)
|
||||
AM_RANGE(0x6000, 0x67ff) AM_WRITE(SMH_RAM)
|
||||
AM_RANGE(0x8000, 0x87ff) AM_WRITE(SMH_RAM)
|
||||
AM_RANGE(0xa000, 0xa003) AM_WRITE(ppi8255_1_w)
|
||||
AM_RANGE(0xa000, 0xa003) AM_DEVWRITE(PPI8255, "ppi8255_1", ppi8255_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( readmem3, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -375,7 +402,21 @@ static MACHINE_DRIVER_START( taxidrvr )
|
||||
|
||||
MDRV_INTERLEAVE(100) /* 100 CPU slices per frame - an high value to ensure proper */
|
||||
/* synchronization of the CPUs */
|
||||
MDRV_MACHINE_RESET(taxidrvr)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[1] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_2", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[2] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_3", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[3] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_4", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[4] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
|
@ -86,22 +86,26 @@ static GFXDECODE_START( tcl )
|
||||
GFXDECODE_ENTRY( REGION_GFX2, 0, charlayout2, 0, 16 ) /* wrong */
|
||||
GFXDECODE_END
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
static const ppi8255_interface ppi8255_intf[2] =
|
||||
{
|
||||
2,
|
||||
{ NULL, NULL },
|
||||
{ NULL, NULL },
|
||||
{ NULL, NULL },
|
||||
{ NULL, NULL },
|
||||
{ NULL, NULL },
|
||||
{ NULL, NULL },
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
}
|
||||
};
|
||||
|
||||
static MACHINE_RESET( tcl )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
}
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( tcl )
|
||||
|
||||
@ -123,7 +127,11 @@ static MACHINE_DRIVER_START( tcl )
|
||||
MDRV_VIDEO_START(tcl)
|
||||
MDRV_VIDEO_UPDATE(tcl)
|
||||
|
||||
MDRV_MACHINE_RESET(tcl)
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[1] )
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -267,6 +267,43 @@ static WRITE8_HANDLER( turbo_ppi3c_w )
|
||||
}
|
||||
|
||||
|
||||
static const ppi8255_interface turbo_8255_intf[4] =
|
||||
{
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
turbo_ppi0a_w,
|
||||
turbo_ppi0b_w,
|
||||
turbo_ppi0c_w
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
turbo_ppi1a_w,
|
||||
turbo_ppi1b_w,
|
||||
turbo_ppi1c_w
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
turbo_sound_a_w,
|
||||
turbo_sound_b_w,
|
||||
turbo_sound_c_w
|
||||
},
|
||||
{
|
||||
turbo_analog_r,
|
||||
input_port_2_r,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
turbo_ppi3c_w
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
@ -312,6 +349,27 @@ static WRITE8_HANDLER( subroc3d_ppi0b_w )
|
||||
}
|
||||
|
||||
|
||||
static const ppi8255_interface subroc3d_8255_intf[2] =
|
||||
{
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
subroc3d_ppi0a_w,
|
||||
subroc3d_ppi0b_w,
|
||||
subroc3d_ppi0c_w
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
subroc3d_sound_a_w,
|
||||
subroc3d_sound_b_w,
|
||||
subroc3d_sound_c_w
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
@ -364,6 +422,28 @@ static WRITE8_HANDLER( buckrog_ppi1c_w )
|
||||
}
|
||||
|
||||
|
||||
static const ppi8255_interface buckrog_8255_intf[2] =
|
||||
{
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
buckrog_ppi0a_w,
|
||||
buckrog_ppi0b_w,
|
||||
buckrog_ppi0c_w
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
buckrog_sound_a_w,
|
||||
buckrog_sound_b_w,
|
||||
buckrog_ppi1c_w
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
@ -599,7 +679,7 @@ static READ8_HANDLER( buckrog_cpu2_command_r )
|
||||
{
|
||||
/* assert ACK */
|
||||
turbo_state *state = machine->driver_data;
|
||||
ppi8255_set_portC(0, 0x00);
|
||||
ppi8255_set_portC(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), 0x00);
|
||||
return state->buckrog_command;
|
||||
}
|
||||
|
||||
@ -638,11 +718,11 @@ static READ8_HANDLER( buckrog_port_3_r )
|
||||
|
||||
static TIMER_CALLBACK( delayed_ppi8255_w )
|
||||
{
|
||||
ppi8255_0_w(machine, param >> 8, param & 0xff);
|
||||
ppi8255_w(device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), param >> 8, param & 0xff);
|
||||
}
|
||||
|
||||
|
||||
static WRITE8_HANDLER( buckrog_ppi8255_0_w )
|
||||
static WRITE8_DEVICE_HANDLER( buckrog_ppi8255_0_w )
|
||||
{
|
||||
/* the port C handshaking signals control the sub CPU IRQ, */
|
||||
/* so we have to sync whenever we access this PPI */
|
||||
@ -666,10 +746,10 @@ static ADDRESS_MAP_START( turbo_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(turbo_videoram_w) AM_BASE_MEMBER(turbo_state, videoram)
|
||||
AM_RANGE(0xe800, 0xefff) AM_WRITE(turbo_collision_clear_w)
|
||||
AM_RANGE(0xf000, 0xf7ff) AM_RAM
|
||||
AM_RANGE(0xf800, 0xf803) AM_MIRROR(0x00fc) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0xf900, 0xf903) AM_MIRROR(0x00fc) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE(0xfa00, 0xfa03) AM_MIRROR(0x00fc) AM_READWRITE(ppi8255_2_r, ppi8255_2_w)
|
||||
AM_RANGE(0xfb00, 0xfb03) AM_MIRROR(0x00fc) AM_READWRITE(ppi8255_3_r, ppi8255_3_w)
|
||||
AM_RANGE(0xf800, 0xf803) AM_MIRROR(0x00fc) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xf900, 0xf903) AM_MIRROR(0x00fc) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xfa00, 0xfa03) AM_MIRROR(0x00fc) AM_DEVREADWRITE(PPI8255, "ppi8255_2", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xfb00, 0xfb03) AM_MIRROR(0x00fc) AM_DEVREADWRITE(PPI8255, "ppi8255_3", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xfc00, 0xfc01) AM_MIRROR(0x00fe) AM_READWRITE(turbo_8279_r, turbo_8279_w)
|
||||
AM_RANGE(0xfd00, 0xfdff) AM_READ(input_port_0_r)
|
||||
AM_RANGE(0xfe00, 0xfeff) AM_READ(turbo_collision_r)
|
||||
@ -694,8 +774,8 @@ static ADDRESS_MAP_START( subroc3d_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0xb000, 0xb7ff) AM_RAM // SCRATCH
|
||||
AM_RANGE(0xb800, 0xbfff) // HANDLE CL
|
||||
AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(turbo_videoram_w) AM_BASE_MEMBER(turbo_state, videoram) // FIX PAGE
|
||||
AM_RANGE(0xe800, 0xe803) AM_MIRROR(0x07fc) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0xf000, 0xf003) AM_MIRROR(0x07fc) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE(0xe800, 0xe803) AM_MIRROR(0x07fc) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xf000, 0xf003) AM_MIRROR(0x07fc) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xf800, 0xf801) AM_MIRROR(0x07fe) AM_READWRITE(turbo_8279_r, turbo_8279_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -711,8 +791,8 @@ static ADDRESS_MAP_START( buckrog_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROM
|
||||
AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(turbo_videoram_w) AM_BASE_MEMBER(turbo_state, videoram) // FIX PAGE
|
||||
AM_RANGE(0xc800, 0xc803) AM_MIRROR(0x07fc) AM_READWRITE(ppi8255_0_r, buckrog_ppi8255_0_w) // 8255
|
||||
AM_RANGE(0xd000, 0xd003) AM_MIRROR(0x07fc) AM_READWRITE(ppi8255_1_r, ppi8255_1_w) // 8255
|
||||
AM_RANGE(0xc800, 0xc803) AM_MIRROR(0x07fc) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, buckrog_ppi8255_0_w) // 8255
|
||||
AM_RANGE(0xd000, 0xd003) AM_MIRROR(0x07fc) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w) // 8255
|
||||
AM_RANGE(0xd800, 0xd801) AM_MIRROR(0x07fe) AM_READWRITE(turbo_8279_r, turbo_8279_w) // 8279
|
||||
AM_RANGE(0xe000, 0xe3ff) AM_RAM AM_BASE_MEMBER(turbo_state, sprite_position) // CONT RAM
|
||||
AM_RANGE(0xe400, 0xe7ff) AM_RAM AM_BASE_MEMBER(turbo_state, spriteram) // CONT RAM
|
||||
@ -1002,6 +1082,18 @@ static MACHINE_DRIVER_START( turbo )
|
||||
MDRV_CPU_PROGRAM_MAP(turbo_map,0)
|
||||
MDRV_CPU_VBLANK_INT("main", irq0_line_hold)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( turbo_8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( turbo_8255_intf[1] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_2", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( turbo_8255_intf[2] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_3", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( turbo_8255_intf[3] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
|
||||
MDRV_GFXDECODE(turbo)
|
||||
@ -1028,6 +1120,12 @@ static MACHINE_DRIVER_START( subroc3d )
|
||||
MDRV_CPU_PROGRAM_MAP(subroc3d_map,0)
|
||||
MDRV_CPU_VBLANK_INT("main", irq0_line_hold)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( subroc3d_8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( subroc3d_8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_GFXDECODE(turbo)
|
||||
MDRV_PALETTE_LENGTH(256)
|
||||
@ -1060,6 +1158,12 @@ static MACHINE_DRIVER_START( buckrog )
|
||||
MDRV_INTERLEAVE(10)
|
||||
MDRV_MACHINE_RESET(buckrog)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( buckrog_8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( buckrog_8255_intf[1] )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_GFXDECODE(turbo)
|
||||
MDRV_PALETTE_LENGTH(1024)
|
||||
@ -1522,63 +1626,15 @@ static void turbo_rom_decode(void)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static DRIVER_INIT( turbo )
|
||||
{
|
||||
static const ppi8255_interface turbo_8255_intf =
|
||||
{
|
||||
4,
|
||||
{ NULL, NULL, NULL, turbo_analog_r },
|
||||
{ NULL, NULL, NULL, input_port_2_r },
|
||||
{ NULL, NULL, NULL, NULL },
|
||||
{ turbo_ppi0a_w, turbo_ppi1a_w, turbo_sound_a_w, NULL },
|
||||
{ turbo_ppi0b_w, turbo_ppi1b_w, turbo_sound_b_w, NULL },
|
||||
{ turbo_ppi0c_w, turbo_ppi1c_w, turbo_sound_c_w, turbo_ppi3c_w }
|
||||
};
|
||||
ppi8255_init(&turbo_8255_intf);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( turbo_enc )
|
||||
{
|
||||
turbo_rom_decode();
|
||||
DRIVER_INIT_CALL(turbo);
|
||||
}
|
||||
|
||||
|
||||
static DRIVER_INIT( subroc3d )
|
||||
{
|
||||
static const ppi8255_interface subroc3d_8255_intf =
|
||||
{
|
||||
2,
|
||||
{ NULL, NULL },
|
||||
{ NULL, NULL },
|
||||
{ NULL, NULL },
|
||||
{ subroc3d_ppi0a_w, subroc3d_sound_a_w },
|
||||
{ subroc3d_ppi0b_w, subroc3d_sound_b_w },
|
||||
{ subroc3d_ppi0c_w, subroc3d_sound_c_w }
|
||||
};
|
||||
ppi8255_init(&subroc3d_8255_intf);
|
||||
}
|
||||
|
||||
|
||||
static DRIVER_INIT( buckrog )
|
||||
{
|
||||
static const ppi8255_interface buckrog_8255_intf =
|
||||
{
|
||||
2,
|
||||
{ NULL, NULL },
|
||||
{ NULL, NULL },
|
||||
{ NULL, NULL },
|
||||
{ buckrog_ppi0a_w, buckrog_sound_a_w },
|
||||
{ buckrog_ppi0b_w, buckrog_sound_b_w },
|
||||
{ buckrog_ppi0c_w, buckrog_ppi1c_w }
|
||||
};
|
||||
ppi8255_init(&buckrog_8255_intf);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( buckrog_enc )
|
||||
{
|
||||
buckrog_decode();
|
||||
DRIVER_INIT_CALL(buckrog);
|
||||
}
|
||||
|
||||
|
||||
@ -1589,10 +1645,10 @@ static DRIVER_INIT( buckrog_enc )
|
||||
*
|
||||
*************************************/
|
||||
|
||||
GAMEL( 1981, turbo, 0, turbo, turbo, turbo, ROT270, "Sega", "Turbo", 0, layout_turbo )
|
||||
GAMEL( 1981, turbo, 0, turbo, turbo, 0, ROT270, "Sega", "Turbo", 0, layout_turbo )
|
||||
GAMEL( 1981, turboa, turbo, turbo, turbo, turbo_enc, ROT270, "Sega", "Turbo (encrypted set 1)", 0, layout_turbo )
|
||||
GAMEL( 1981, turbob, turbo, turbo, turbo, turbo_enc, ROT270, "Sega", "Turbo (encrypted set 2)", 0, layout_turbo )
|
||||
GAMEL( 1982, subroc3d, 0, subroc3d, subroc3d, subroc3d, ORIENTATION_FLIP_X, "Sega", "Subroc-3D", 0, layout_subroc3d )
|
||||
GAMEL( 1982, subroc3d, 0, subroc3d, subroc3d, 0, ORIENTATION_FLIP_X, "Sega", "Subroc-3D", 0, layout_subroc3d )
|
||||
GAMEL( 1982, buckrog, 0, buckrog, buckrog, buckrog_enc, ROT0, "Sega", "Buck Rogers: Planet of Zoom", 0, layout_buckrog )
|
||||
GAMEL( 1982, zoom909, buckrog, buckrog, buckrog, buckrog_enc, ROT0, "Sega", "Zoom 909", GAME_IMPERFECT_COLORS, layout_buckrog ) // bad PROM
|
||||
GAMEL( 1982, buckrogn, buckrog, buckrog, buckrog, buckrog, ROT0, "Sega", "Buck Rogers: Planet of Zoom (not encrypted)", 0, layout_buckrog )
|
||||
GAMEL( 1982, buckrogn, buckrog, buckrog, buckrog, 0, ROT0, "Sega", "Buck Rogers: Planet of Zoom (not encrypted)", 0, layout_buckrog )
|
||||
|
@ -466,7 +466,7 @@ static ADDRESS_MAP_START( tx1_sound_prg, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x1fff) AM_ROM
|
||||
AM_RANGE(0x3000, 0x37ff) AM_RAM AM_MIRROR(0x800) AM_BASE(&z80_ram)
|
||||
AM_RANGE(0x4000, 0x4000) AM_WRITE(z80_intreq_w)
|
||||
AM_RANGE(0x5000, 0x5003) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE(PPI8255, "ppi8255", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x6000, 0x6003) AM_READWRITE(tx1_pit8253_r, tx1_pit8253_w)
|
||||
AM_RANGE(0x7000, 0x7fff) AM_WRITE(tx1_ppi_latch_w)
|
||||
AM_RANGE(0xb000, 0xbfff) AM_READWRITE(ts_r, ts_w)
|
||||
@ -560,7 +560,7 @@ static ADDRESS_MAP_START( buggyboy_sound_prg, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x3fff) AM_ROM
|
||||
AM_RANGE(0x4000, 0x47ff) AM_RAM AM_BASE(&z80_ram)
|
||||
AM_RANGE(0x6000, 0x6001) AM_READ(bb_analog_r)
|
||||
AM_RANGE(0x6800, 0x6803) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0x6800, 0x6803) AM_DEVREADWRITE(PPI8255, "ppi8255", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x7000, 0x7003) AM_RAM
|
||||
AM_RANGE(0x7800, 0x7800) AM_WRITE(z80_intreq_w)
|
||||
AM_RANGE(0xc000, 0xc7ff) AM_READWRITE(ts_r, ts_w)
|
||||
@ -651,15 +651,14 @@ static WRITE8_HANDLER( tx1_coin_cnt )
|
||||
coin_counter_w(1, data & 0x40);
|
||||
}
|
||||
|
||||
const ppi8255_interface tx1_ppi8255_intf =
|
||||
static const ppi8255_interface tx1_ppi8255_intf =
|
||||
{
|
||||
1,
|
||||
{ tx1_ppi_porta_r },
|
||||
{ tx1_ppi_portb_r },
|
||||
{ input_port_4_r },
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
{ tx1_coin_cnt },
|
||||
tx1_ppi_porta_r,
|
||||
tx1_ppi_portb_r,
|
||||
input_port_4_r,
|
||||
NULL,
|
||||
NULL,
|
||||
tx1_coin_cnt
|
||||
};
|
||||
|
||||
static const struct CustomSound_interface tx1_custom_interface =
|
||||
@ -670,15 +669,14 @@ static const struct CustomSound_interface tx1_custom_interface =
|
||||
};
|
||||
|
||||
/* Buggy Boy uses an 8255 PPI instead of YM2149 ports for inputs! */
|
||||
const ppi8255_interface buggyboy_ppi8255_intf =
|
||||
static const ppi8255_interface buggyboy_ppi8255_intf =
|
||||
{
|
||||
1,
|
||||
{ input_port_1_r },
|
||||
{ 0 },
|
||||
{ input_port_2_r },
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
input_port_1_r,
|
||||
NULL,
|
||||
input_port_2_r,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
static const struct CustomSound_interface bb_custom_interface =
|
||||
@ -711,6 +709,9 @@ static MACHINE_DRIVER_START( tx1 )
|
||||
MDRV_MACHINE_START(tx1)
|
||||
MDRV_NVRAM_HANDLER(generic_0fill)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( tx1_ppi8255_intf )
|
||||
|
||||
MDRV_GFXDECODE(tx1)
|
||||
MDRV_PALETTE_LENGTH(256+(256*4)+(2048*4))
|
||||
MDRV_PALETTE_INIT(tx1)
|
||||
@ -766,6 +767,9 @@ static MACHINE_DRIVER_START( buggyboy )
|
||||
MDRV_MACHINE_START(buggyboy)
|
||||
MDRV_NVRAM_HANDLER(generic_0fill)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( buggyboy_ppi8255_intf )
|
||||
|
||||
MDRV_GFXDECODE(buggyboy)
|
||||
MDRV_DEFAULT_LAYOUT(layout_triphsxs)
|
||||
|
||||
|
@ -116,8 +116,8 @@ static ADDRESS_MAP_START( vroulet_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(AY8910_read_port_0_r, AY8910_write_port_0_w)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(AY8910_control_port_0_w)
|
||||
AM_RANGE(0x10, 0x13) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0x80, 0x83) AM_READWRITE(ppi8255_1_r, ppi8255_1_w)
|
||||
AM_RANGE(0x10, 0x13) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x80, 0x83) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/* Input Ports */
|
||||
@ -233,24 +233,26 @@ static WRITE8_HANDLER( ppi8255_a_w ){}// watchdog ?
|
||||
static WRITE8_HANDLER( ppi8255_b_w ){}// lamps ?
|
||||
static WRITE8_HANDLER( ppi8255_c_w ){}
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
static const ppi8255_interface ppi8255_intf[2] =
|
||||
{
|
||||
2, // 2 chips
|
||||
{ input_port_0_r, NULL }, // Port A read
|
||||
{ input_port_1_r, NULL }, // Port B read
|
||||
{ input_port_2_r, NULL }, // Port C read
|
||||
{ NULL, ppi8255_a_w }, // Port A write
|
||||
{ NULL, ppi8255_b_w }, // Port B write
|
||||
{ NULL, ppi8255_c_w }, // Port C write
|
||||
{
|
||||
input_port_0_r, // Port A read
|
||||
input_port_1_r, // Port B read
|
||||
input_port_2_r, // Port C read
|
||||
NULL, // Port A write
|
||||
NULL, // Port B write
|
||||
NULL // Port C write
|
||||
},
|
||||
{
|
||||
NULL, // Port A read
|
||||
NULL, // Port B read
|
||||
NULL, // Port C read
|
||||
ppi8255_a_w, // Port A write
|
||||
ppi8255_b_w, // Port B write
|
||||
ppi8255_c_w // Port C write
|
||||
}
|
||||
};
|
||||
|
||||
/* Machine Initialization */
|
||||
|
||||
static MACHINE_RESET( vroulet )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
}
|
||||
|
||||
/* Machine Driver */
|
||||
|
||||
static MACHINE_DRIVER_START( vroulet )
|
||||
@ -260,10 +262,14 @@ static MACHINE_DRIVER_START( vroulet )
|
||||
MDRV_CPU_IO_MAP(vroulet_io_map, 0)
|
||||
MDRV_CPU_VBLANK_INT("main", irq0_line_hold)
|
||||
|
||||
MDRV_MACHINE_RESET(vroulet)
|
||||
|
||||
MDRV_NVRAM_HANDLER(generic_1fill)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_0", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[0] )
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255_1", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf[1] )
|
||||
|
||||
// video hardware
|
||||
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
|
@ -232,13 +232,12 @@ static const pia6821_interface pia_1_intf =
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
{
|
||||
1, /* 1 chip */
|
||||
{input_port_3_r}, /* Port A read */
|
||||
{input_port_4_r}, /* Port B read */
|
||||
{input_port_5_r}, /* Port C read */
|
||||
{0}, /* Port A write */
|
||||
{0}, /* Port B write */
|
||||
{zaccaria_dsw_sel_w}, /* Port C write */
|
||||
input_port_3_r, /* Port A read */
|
||||
input_port_4_r, /* Port B read */
|
||||
input_port_5_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
zaccaria_dsw_sel_w, /* Port C write */
|
||||
};
|
||||
|
||||
|
||||
@ -250,7 +249,6 @@ static MACHINE_START( zaccaria )
|
||||
|
||||
static MACHINE_RESET( zaccaria )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
pia_reset();
|
||||
}
|
||||
|
||||
@ -345,7 +343,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x6c00, 0x6c07) AM_READ(zaccaria_prot2_r)
|
||||
AM_RANGE(0x6e00, 0x6e00) AM_READWRITE(zaccaria_dsw_r, sound_command_w)
|
||||
AM_RANGE(0x7000, 0x77ff) AM_RAM
|
||||
AM_RANGE(0x7800, 0x7803) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0x7800, 0x7803) AM_DEVREADWRITE(PPI8255, "ppi8255", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0x7c00, 0x7c00) AM_READ(watchdog_reset_r)
|
||||
AM_RANGE(0x8000, 0xdfff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -652,6 +650,9 @@ static MACHINE_DRIVER_START( zaccaria )
|
||||
MDRV_MACHINE_START(zaccaria)
|
||||
MDRV_MACHINE_RESET(zaccaria)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( ppi8255_intf )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
|
@ -485,7 +485,7 @@ static ADDRESS_MAP_START( zaxxon_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0xc000, 0xc002) AM_MIRROR(0x18f8) AM_WRITE(zaxxon_coin_lockout_w)
|
||||
AM_RANGE(0xc003, 0xc004) AM_MIRROR(0x18f8) AM_WRITE(zaxxon_coin_counter_w)
|
||||
AM_RANGE(0xc006, 0xc006) AM_MIRROR(0x18f8) AM_WRITE(zaxxon_flipscreen_w)
|
||||
AM_RANGE(0xe03c, 0xe03f) AM_MIRROR(0x1f00) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0xe03c, 0xe03f) AM_MIRROR(0x1f00) AM_DEVREADWRITE(PPI8255, "ppi8255", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xe0f0, 0xe0f0) AM_MIRROR(0x1f00) AM_WRITE(int_enable_w)
|
||||
AM_RANGE(0xe0f1, 0xe0f1) AM_MIRROR(0x1f00) AM_WRITE(zaxxon_fg_color_w)
|
||||
AM_RANGE(0xe0f8, 0xe0f9) AM_MIRROR(0x1f00) AM_WRITE(zaxxon_bg_position_w)
|
||||
@ -525,7 +525,7 @@ static ADDRESS_MAP_START( congo_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x1fff) AM_ROM
|
||||
AM_RANGE(0x4000, 0x47ff) AM_MIRROR(0x1800) AM_RAM
|
||||
AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x1fff) AM_WRITE(SN76496_0_w)
|
||||
AM_RANGE(0x8000, 0x8003) AM_MIRROR(0x1ffc) AM_READWRITE(ppi8255_0_r, ppi8255_0_w)
|
||||
AM_RANGE(0x8000, 0x8003) AM_MIRROR(0x1ffc) AM_DEVREADWRITE(PPI8255, "ppi8255", ppi8255_r, ppi8255_w)
|
||||
AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x1fff) AM_WRITE(SN76496_1_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -890,6 +890,34 @@ INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* PPI8255 configurations
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static const ppi8255_interface zaxxon_ppi_intf =
|
||||
{
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
zaxxon_sound_a_w,
|
||||
zaxxon_sound_b_w,
|
||||
zaxxon_sound_c_w
|
||||
};
|
||||
|
||||
|
||||
static const ppi8255_interface congo_ppi_intf =
|
||||
{
|
||||
soundlatch_r,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
congo_sound_b_w,
|
||||
congo_sound_c_w
|
||||
};
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Graphics definitions
|
||||
@ -936,6 +964,9 @@ static MACHINE_DRIVER_START( root )
|
||||
|
||||
MDRV_MACHINE_START(zaxxon)
|
||||
|
||||
MDRV_DEVICE_ADD( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( zaxxon_ppi_intf )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_GFXDECODE(zaxxon)
|
||||
MDRV_PALETTE_LENGTH(256)
|
||||
@ -992,6 +1023,9 @@ static MACHINE_DRIVER_START( congo )
|
||||
MDRV_CPU_MODIFY("main")
|
||||
MDRV_CPU_PROGRAM_MAP(congo_map, 0)
|
||||
|
||||
MDRV_DEVICE_MODIFY( "ppi8255", PPI8255 )
|
||||
MDRV_DEVICE_CONFIG( congo_ppi_intf )
|
||||
|
||||
MDRV_CPU_ADD(Z80, SOUND_CLOCK)
|
||||
MDRV_CPU_PROGRAM_MAP(congo_sound_map,0)
|
||||
MDRV_CPU_PERIODIC_INT(irq0_line_hold, (double)SOUND_CLOCK/16/16/16/4)
|
||||
@ -1413,48 +1447,27 @@ static void zaxxonb_decode(void)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static DRIVER_INIT( zaxxon )
|
||||
{
|
||||
static const ppi8255_interface ppi_intf =
|
||||
{
|
||||
1,
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
{ zaxxon_sound_a_w },
|
||||
{ zaxxon_sound_b_w },
|
||||
{ zaxxon_sound_c_w }
|
||||
};
|
||||
|
||||
ppi8255_init(&ppi_intf);
|
||||
}
|
||||
|
||||
|
||||
static DRIVER_INIT( zaxxonb )
|
||||
{
|
||||
zaxxonb_decode();
|
||||
DRIVER_INIT_CALL(zaxxon);
|
||||
}
|
||||
|
||||
|
||||
static DRIVER_INIT( szaxxon )
|
||||
{
|
||||
szaxxon_decode();
|
||||
DRIVER_INIT_CALL(zaxxon);
|
||||
}
|
||||
|
||||
|
||||
static DRIVER_INIT( futspy )
|
||||
{
|
||||
futspy_decode();
|
||||
DRIVER_INIT_CALL(zaxxon);
|
||||
}
|
||||
|
||||
|
||||
static DRIVER_INIT( razmataz )
|
||||
{
|
||||
nprinces_decode();
|
||||
DRIVER_INIT_CALL(zaxxon);
|
||||
|
||||
/* additional input ports are wired */
|
||||
memory_install_read8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xc004, 0xc004, 0, 0x18f3, port_tag_to_handler8("SW04"));
|
||||
@ -1476,29 +1489,12 @@ static DRIVER_INIT( razmataz )
|
||||
static DRIVER_INIT( ixion )
|
||||
{
|
||||
szaxxon_decode();
|
||||
DRIVER_INIT_CALL(zaxxon);
|
||||
|
||||
/* connect the universal sound board */
|
||||
memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xe03c, 0xe03c, 0, 0x1f00, sega_usb_status_r, sega_usb_data_w);
|
||||
}
|
||||
|
||||
|
||||
static DRIVER_INIT( congo )
|
||||
{
|
||||
static const ppi8255_interface ppi_intf =
|
||||
{
|
||||
1,
|
||||
{ soundlatch_r },
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
{ congo_sound_b_w },
|
||||
{ congo_sound_c_w }
|
||||
};
|
||||
ppi8255_init(&ppi_intf);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
@ -1507,8 +1503,8 @@ static DRIVER_INIT( congo )
|
||||
*************************************/
|
||||
|
||||
/* these games run on standard Zaxxon hardware */
|
||||
GAME( 1982, zaxxon, 0, zaxxon, zaxxon, zaxxon, ROT90, "Sega", "Zaxxon (set 1)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1982, zaxxon2, zaxxon, zaxxon, zaxxon, zaxxon, ROT90, "Sega", "Zaxxon (set 2)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1982, zaxxon, 0, zaxxon, zaxxon, 0, ROT90, "Sega", "Zaxxon (set 1)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1982, zaxxon2, zaxxon, zaxxon, zaxxon, 0, ROT90, "Sega", "Zaxxon (set 2)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1982, zaxxonb, zaxxon, zaxxon, zaxxon, zaxxonb, ROT90, "bootleg", "Jackson", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1982, szaxxon, 0, zaxxon, szaxxon, szaxxon, ROT90, "Sega", "Super Zaxxon", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1984, futspy, 0, futspy, futspy, futspy, ROT90, "Sega", "Future Spy", GAME_SUPPORTS_SAVE )
|
||||
@ -1520,5 +1516,5 @@ GAME( 1983, ixion, 0, razmataz, ixion, ixion, ROT270, "Sega", "
|
||||
|
||||
/* these games run on a slightly newer Zaxxon hardware with more ROM space and a */
|
||||
/* custom sprite DMA chip */
|
||||
GAME( 1983, congo, 0, congo, congo, congo, ROT90, "Sega", "Congo Bongo", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1983, tiptop, congo, congo, congo, congo, ROT90, "Sega", "Tip Top", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1983, congo, 0, congo, congo, 0, ROT90, "Sega", "Congo Bongo", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1983, tiptop, congo, congo, congo, 0, ROT90, "Sega", "Tip Top", GAME_SUPPORTS_SAVE )
|
||||
|
@ -11,6 +11,8 @@
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "machine/8255ppi.h"
|
||||
|
||||
/*----------- defined in video/galaxian.c -----------*/
|
||||
|
||||
extern UINT8 *galaxold_videoram;
|
||||
@ -152,15 +154,35 @@ READ8_HANDLER( gmgalax_input_port_2_r );
|
||||
|
||||
/*----------- defined in machine/scramble.c -----------*/
|
||||
|
||||
extern const ppi8255_interface scramble_ppi_ppi8255_intf[2];
|
||||
extern const ppi8255_interface stratgyx_ppi8255_intf[2];
|
||||
extern const ppi8255_interface moonwar_ppi8255_intf[2];
|
||||
extern const ppi8255_interface darkplnt_ppi8255_intf[2];
|
||||
extern const ppi8255_interface scramble_ppi8255_intf[2];
|
||||
extern const ppi8255_interface ckongs_ppi8255_intf[2];
|
||||
extern const ppi8255_interface mars_ppi8255_intf[2];
|
||||
extern const ppi8255_interface mrkougar_ppi8255_intf[2];
|
||||
|
||||
|
||||
DRIVER_INIT( scramble_ppi );
|
||||
DRIVER_INIT( amidar );
|
||||
DRIVER_INIT( scobra );
|
||||
DRIVER_INIT( atlantis );
|
||||
DRIVER_INIT( scramble );
|
||||
DRIVER_INIT( stratgyx );
|
||||
DRIVER_INIT( tazmani2 );
|
||||
DRIVER_INIT( ckongs );
|
||||
DRIVER_INIT( mariner );
|
||||
DRIVER_INIT( frogger );
|
||||
DRIVER_INIT( froggers );
|
||||
DRIVER_INIT( scobra );
|
||||
DRIVER_INIT( stratgyx );
|
||||
DRIVER_INIT( devilfsh );
|
||||
DRIVER_INIT( mars );
|
||||
DRIVER_INIT( hotshock );
|
||||
DRIVER_INIT( cavelon );
|
||||
DRIVER_INIT( moonwar );
|
||||
DRIVER_INIT( darkplnt );
|
||||
DRIVER_INIT( tazmani2 );
|
||||
DRIVER_INIT( mimonkey );
|
||||
DRIVER_INIT( mimonsco );
|
||||
DRIVER_INIT( mimonscr );
|
||||
DRIVER_INIT( anteater );
|
||||
DRIVER_INIT( rescue );
|
||||
DRIVER_INIT( minefld );
|
||||
@ -168,24 +190,8 @@ DRIVER_INIT( losttomb );
|
||||
DRIVER_INIT( superbon );
|
||||
DRIVER_INIT( hustler );
|
||||
DRIVER_INIT( billiard );
|
||||
DRIVER_INIT( mimonkey );
|
||||
DRIVER_INIT( mimonsco );
|
||||
DRIVER_INIT( atlantis );
|
||||
DRIVER_INIT( scramble );
|
||||
DRIVER_INIT( scrambls );
|
||||
DRIVER_INIT( theend );
|
||||
DRIVER_INIT( ckongs );
|
||||
DRIVER_INIT( mariner );
|
||||
DRIVER_INIT( mars );
|
||||
DRIVER_INIT( devilfsh );
|
||||
DRIVER_INIT( hotshock );
|
||||
DRIVER_INIT( cavelon );
|
||||
DRIVER_INIT( mrkougar );
|
||||
DRIVER_INIT( mrkougb );
|
||||
DRIVER_INIT( mimonscr );
|
||||
DRIVER_INIT( sfx );
|
||||
DRIVER_INIT( monsterz );
|
||||
DRIVER_INIT( scorpion );
|
||||
DRIVER_INIT( ad2083 );
|
||||
|
||||
MACHINE_RESET( scramble );
|
||||
|
@ -29,8 +29,6 @@
|
||||
|
||||
/*----------- defined in drivers/tx1.c -----------*/
|
||||
extern UINT16 *tx1_math_ram;
|
||||
extern const ppi8255_interface tx1_ppi8255_intf;
|
||||
extern const ppi8255_interface buggyboy_ppi8255_intf;
|
||||
|
||||
/*----------- defined in machine/tx1.c -----------*/
|
||||
READ16_HANDLER( tx1_spcs_rom_r );
|
||||
|
@ -64,38 +64,6 @@ MACHINE_RESET( explorer )
|
||||
MACHINE_RESET_CALL(galaxold);
|
||||
}
|
||||
|
||||
static READ8_HANDLER( scrambls_input_port_2_r )
|
||||
{
|
||||
static const UINT8 mask[] = { 0x20, 0x20, 0x80, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0 };
|
||||
|
||||
UINT8 res;
|
||||
|
||||
res = input_port_read_indexed(machine, 2);
|
||||
|
||||
/*logerror("%04x: read IN2\n",activecpu_get_pc());*/
|
||||
|
||||
/*
|
||||
p_security_2B : process(security_count)
|
||||
begin
|
||||
-- I am not sure what this chip does yet, but this gets us past the initial check for now.
|
||||
case security_count is
|
||||
when "000" => net_1e10_i <= '0'; net_1e12_i <= '1';
|
||||
when "001" => net_1e10_i <= '0'; net_1e12_i <= '1';
|
||||
when "010" => net_1e10_i <= '1'; net_1e12_i <= '0';
|
||||
when "011" => net_1e10_i <= '1'; net_1e12_i <= '1';
|
||||
when "100" => net_1e10_i <= '1'; net_1e12_i <= '1';
|
||||
when "101" => net_1e10_i <= '1'; net_1e12_i <= '1';
|
||||
when "110" => net_1e10_i <= '1'; net_1e12_i <= '1';
|
||||
when "111" => net_1e10_i <= '1'; net_1e12_i <= '1';
|
||||
when others => null;
|
||||
end case;
|
||||
end process;
|
||||
*/
|
||||
res = (res & ~((1<<7)|(1<<5))) | mask[security_2B_counter];
|
||||
security_2B_counter = (security_2B_counter + 1) & 0x07;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static READ8_HANDLER( ckongs_input_port_1_r )
|
||||
{
|
||||
@ -182,39 +150,6 @@ static READ8_HANDLER( scramble_protection_r )
|
||||
}
|
||||
}
|
||||
|
||||
static READ8_HANDLER( scrambls_protection_r )
|
||||
{
|
||||
/*logerror("%04x: read protection\n",activecpu_get_pc());*/
|
||||
|
||||
/*
|
||||
p_security_6J : process(xb)
|
||||
begin
|
||||
-- chip K10A PAL16L8
|
||||
-- equations from Mark @ http://www.leopardcats.com/
|
||||
xbo(3 downto 0) <= xb(3 downto 0);
|
||||
xbo(4) <= not(xb(0) or xb(1) or xb(2) or xb(3));
|
||||
xbo(5) <= not((not xb(2) and not xb(0)) or (not xb(2) and not xb(1)) or (not xb(3) and not xb(0)) or (not xb(3) and not xb(1)));
|
||||
|
||||
xbo(6) <= not(not xb(0) and not xb(3));
|
||||
xbo(7) <= not((not xb(1)) or xb(2));
|
||||
end process;
|
||||
*/
|
||||
UINT8 xbo = xb & 0x0f;
|
||||
|
||||
xbo |= ( ~(xb | (xb>>1) | (xb>>2) | (xb>>3)) & 0x01) << 4;
|
||||
xbo |= ( ~( (~(xb>>2)&~xb) | (~(xb>>2)&~(xb>>1)) | (~(xb>>3)&~xb) | (~(xb>>3)&~(xb>>1)) ) & 0x01) << 5;
|
||||
xbo |= ( ~(~xb&~(xb>>3)) & 0x01) << 6;
|
||||
xbo |= ( ~(~(xb>>1)|(xb>>2)) & 0x01) << 7;
|
||||
|
||||
return (xbo);
|
||||
}
|
||||
|
||||
|
||||
static WRITE8_HANDLER( theend_coin_counter_w )
|
||||
{
|
||||
coin_counter_w(0, data & 0x80);
|
||||
}
|
||||
|
||||
|
||||
static READ8_HANDLER( mariner_protection_1_r )
|
||||
{
|
||||
@ -259,9 +194,9 @@ static READ8_HANDLER( cavelon_banksw_r )
|
||||
cavelon_banksw();
|
||||
|
||||
if ((offset >= 0x0100) && (offset <= 0x0103))
|
||||
return ppi8255_0_r(machine, offset - 0x0100);
|
||||
return ppi8255_r((device_config*)device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), offset - 0x0100);
|
||||
else if ((offset >= 0x0200) && (offset <= 0x0203))
|
||||
return ppi8255_1_r(machine, offset - 0x0200);
|
||||
return ppi8255_r((device_config*)device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), offset - 0x0200);
|
||||
|
||||
return 0xff;
|
||||
}
|
||||
@ -271,9 +206,9 @@ static WRITE8_HANDLER( cavelon_banksw_w )
|
||||
cavelon_banksw();
|
||||
|
||||
if ((offset >= 0x0100) && (offset <= 0x0103))
|
||||
ppi8255_0_w(machine, offset - 0x0100, data);
|
||||
ppi8255_w((device_config*)device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_0" ), offset - 0x0100, data);
|
||||
else if ((offset >= 0x0200) && (offset <= 0x0203))
|
||||
ppi8255_1_w(machine, offset - 0x0200, data);
|
||||
ppi8255_w((device_config*)device_list_find_by_tag( machine->config->devicelist, PPI8255, "ppi8255_1" ), offset - 0x0200, data);
|
||||
}
|
||||
|
||||
|
||||
@ -288,124 +223,211 @@ WRITE8_HANDLER( hunchbks_mirror_w )
|
||||
}
|
||||
|
||||
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
const ppi8255_interface scramble_ppi_ppi8255_intf[2] =
|
||||
{
|
||||
2, /* 2 chips */
|
||||
{input_port_0_r, 0}, /* Port A read */
|
||||
{input_port_1_r, 0}, /* Port B read */
|
||||
{input_port_2_r, 0}, /* Port C read */
|
||||
{0, soundlatch_w}, /* Port A write */
|
||||
{0, scramble_sh_irqtrigger_w}, /* Port B write */
|
||||
{0, 0}, /* Port C write */
|
||||
{
|
||||
input_port_0_r, /* Port A read */
|
||||
input_port_1_r, /* Port B read */
|
||||
input_port_2_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
soundlatch_w, /* Port A write */
|
||||
scramble_sh_irqtrigger_w, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
/* extra chip for sample latch */
|
||||
static const ppi8255_interface sfx_ppi8255_intf =
|
||||
|
||||
const ppi8255_interface stratgyx_ppi8255_intf[2] =
|
||||
{
|
||||
3, /* 3 chips */
|
||||
{input_port_0_r, 0, soundlatch2_r}, /* Port A read */
|
||||
{input_port_1_r, 0, 0}, /* Port B read */
|
||||
{input_port_2_r, 0, 0}, /* Port C read */
|
||||
{0, soundlatch_w, 0}, /* Port A write */
|
||||
{0, scramble_sh_irqtrigger_w, 0}, /* Port B write */
|
||||
{0, 0, 0}, /* Port C write */
|
||||
{
|
||||
input_port_0_r, /* Port A read */
|
||||
input_port_1_r, /* Port B read */
|
||||
stratgyx_input_port_2_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
stratgyx_input_port_3_r, /* Port C read */
|
||||
soundlatch_w, /* Port A write */
|
||||
scramble_sh_irqtrigger_w, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
/* extra chip for sample latch */
|
||||
static const ppi8255_interface monsterz_ppi8255_intf =
|
||||
|
||||
const ppi8255_interface moonwar_ppi8255_intf[2] =
|
||||
{
|
||||
3, /* 3 chips */
|
||||
{input_port_0_r, 0, 0}, /* Port A read */
|
||||
{input_port_1_r, 0, 0}, /* Port B read */
|
||||
{input_port_2_r, 0, 0}, /* Port C read */
|
||||
{0, soundlatch_w, 0}, /* Port A write */
|
||||
{0, scramble_sh_irqtrigger_w, 0}, /* Port B write */
|
||||
{0, 0, 0}, /* Port C write */
|
||||
{
|
||||
moonwar_input_port_0_r, /* Port A read */
|
||||
input_port_1_r, /* Port B read */
|
||||
input_port_2_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
moonwar_port_select_w /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
soundlatch_w, /* Port A write */
|
||||
scramble_sh_irqtrigger_w, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
const ppi8255_interface darkplnt_ppi8255_intf[2] =
|
||||
{
|
||||
{
|
||||
input_port_0_r, /* Port A read */
|
||||
darkplnt_input_port_1_r, /* Port B read */
|
||||
input_port_2_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
soundlatch_w, /* Port A write */
|
||||
scramble_sh_irqtrigger_w, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
const ppi8255_interface scramble_ppi8255_intf[2] =
|
||||
{
|
||||
{
|
||||
input_port_0_r, /* Port A read */
|
||||
input_port_1_r, /* Port B read */
|
||||
input_port_2_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
scramble_protection_r, /* Port C read */
|
||||
soundlatch_w, /* Port A write */
|
||||
scramble_sh_irqtrigger_w, /* Port B write */
|
||||
scramble_protection_w /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
const ppi8255_interface ckongs_ppi8255_intf[2] =
|
||||
{
|
||||
{
|
||||
input_port_0_r, /* Port A read */
|
||||
ckongs_input_port_1_r, /* Port B read */
|
||||
ckongs_input_port_2_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
soundlatch_w, /* Port A write */
|
||||
scramble_sh_irqtrigger_w, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
const ppi8255_interface mars_ppi8255_intf[2] =
|
||||
{
|
||||
{
|
||||
input_port_0_r, /* Port A read */
|
||||
input_port_1_r, /* Port B read */
|
||||
input_port_2_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
input_port_3_r, /* Port C read */
|
||||
soundlatch_w, /* Port A write */
|
||||
scramble_sh_irqtrigger_w, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
const ppi8255_interface mrkougar_ppi8255_intf[2] =
|
||||
{
|
||||
{
|
||||
input_port_0_r, /* Port A read */
|
||||
input_port_1_r, /* Port B read */
|
||||
input_port_2_r, /* Port C read */
|
||||
NULL, /* Port A write */
|
||||
NULL, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
},
|
||||
{
|
||||
NULL, /* Port A read */
|
||||
NULL, /* Port B read */
|
||||
NULL, /* Port C read */
|
||||
soundlatch_w, /* Port A write */
|
||||
mrkougar_sh_irqtrigger_w, /* Port B write */
|
||||
NULL /* Port C write */
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
DRIVER_INIT( scramble_ppi )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
}
|
||||
|
||||
DRIVER_INIT( scobra )
|
||||
{
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xa803, 0xa803, 0, 0, scrambold_background_enable_w);
|
||||
}
|
||||
|
||||
DRIVER_INIT( atlantis )
|
||||
{
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x6803, 0x6803, 0, 0, scrambold_background_enable_w);
|
||||
}
|
||||
|
||||
DRIVER_INIT( scramble )
|
||||
{
|
||||
DRIVER_INIT_CALL(atlantis);
|
||||
|
||||
ppi8255_set_portCread (1, scramble_protection_r);
|
||||
ppi8255_set_portCwrite(1, scramble_protection_w);
|
||||
}
|
||||
|
||||
DRIVER_INIT( scrambls )
|
||||
{
|
||||
DRIVER_INIT_CALL(atlantis);
|
||||
|
||||
ppi8255_set_portCread(0, scrambls_input_port_2_r);
|
||||
ppi8255_set_portCread(1, scrambls_protection_r);
|
||||
ppi8255_set_portCwrite(1, scramble_protection_w);
|
||||
}
|
||||
|
||||
DRIVER_INIT( theend )
|
||||
{
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
ppi8255_set_portCwrite(0, theend_coin_counter_w);
|
||||
}
|
||||
|
||||
DRIVER_INIT( stratgyx )
|
||||
{
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xb000, 0xb000, 0, 0, scrambold_background_green_w);
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xb002, 0xb002, 0, 0, scrambold_background_blue_w);
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xb00a, 0xb00a, 0, 0, scrambold_background_red_w);
|
||||
|
||||
ppi8255_set_portCread(0, stratgyx_input_port_2_r);
|
||||
ppi8255_set_portCread(1, stratgyx_input_port_3_r);
|
||||
}
|
||||
|
||||
DRIVER_INIT( tazmani2 )
|
||||
{
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xb002, 0xb002, 0, 0, scrambold_background_enable_w);
|
||||
}
|
||||
|
||||
DRIVER_INIT( amidar )
|
||||
{
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
/* Amidar has a the DIP switches connected to port C of the 2nd 8255 */
|
||||
ppi8255_set_portCread(1, input_port_3_r);
|
||||
}
|
||||
|
||||
DRIVER_INIT( ckongs )
|
||||
{
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
ppi8255_set_portBread(0, ckongs_input_port_1_r);
|
||||
ppi8255_set_portCread(0, ckongs_input_port_2_r);
|
||||
}
|
||||
|
||||
DRIVER_INIT( mariner )
|
||||
{
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
/* extra ROM */
|
||||
memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x5800, 0x67ff, 0, 0, SMH_BANK1, SMH_UNMAP);
|
||||
memory_set_bankptr(1, memory_region(REGION_CPU1) + 0x5800);
|
||||
@ -422,10 +444,6 @@ DRIVER_INIT( frogger )
|
||||
offs_t A;
|
||||
UINT8 *ROM;
|
||||
|
||||
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
|
||||
/* the first ROM of the second CPU has data lines D0 and D1 swapped. Decode it. */
|
||||
ROM = memory_region(REGION_CPU2);
|
||||
for (A = 0;A < 0x0800;A++)
|
||||
@ -442,9 +460,6 @@ DRIVER_INIT( froggers )
|
||||
offs_t A;
|
||||
UINT8 *ROM;
|
||||
|
||||
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
/* the first ROM of the second CPU has data lines D0 and D1 swapped. Decode it. */
|
||||
ROM = memory_region(REGION_CPU2);
|
||||
for (A = 0;A < 0x0800;A++)
|
||||
@ -456,10 +471,6 @@ DRIVER_INIT( devilfsh )
|
||||
offs_t i;
|
||||
UINT8 *RAM;
|
||||
|
||||
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
|
||||
/* Address lines are scrambled on the main CPU */
|
||||
|
||||
/* A0 -> A2 */
|
||||
@ -487,9 +498,6 @@ DRIVER_INIT( devilfsh )
|
||||
DRIVER_INIT( mars )
|
||||
{
|
||||
DRIVER_INIT_CALL(devilfsh);
|
||||
|
||||
/* extra port */
|
||||
ppi8255_set_portCread(1, input_port_3_r);
|
||||
}
|
||||
|
||||
DRIVER_INIT( hotshock )
|
||||
@ -503,8 +511,6 @@ DRIVER_INIT( cavelon )
|
||||
{
|
||||
UINT8 *ROM = memory_region(REGION_CPU1);
|
||||
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
/* banked ROM */
|
||||
memory_install_read8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x0000, 0x3fff, 0, 0, SMH_BANK1);
|
||||
memory_configure_bank(1, 0, 2, &ROM[0x00000], 0x10000);
|
||||
@ -521,22 +527,11 @@ DRIVER_INIT( cavelon )
|
||||
|
||||
DRIVER_INIT( moonwar )
|
||||
{
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
/* special handler for the spinner */
|
||||
ppi8255_set_portAread (0, moonwar_input_port_0_r);
|
||||
ppi8255_set_portCwrite(0, moonwar_port_select_w);
|
||||
|
||||
state_save_register_global(moonwar_port_select);
|
||||
}
|
||||
|
||||
DRIVER_INIT( darkplnt )
|
||||
{
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
/* special handler for the spinner */
|
||||
ppi8255_set_portBread(0, darkplnt_input_port_1_r);
|
||||
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xb00a, 0xb00a, 0, 0, darkplnt_bullet_color_w);
|
||||
}
|
||||
|
||||
@ -573,22 +568,16 @@ DRIVER_INIT( mimonkey )
|
||||
ctr++;
|
||||
}
|
||||
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xa804, 0xa804, 0, 0, scrambold_background_enable_w);
|
||||
}
|
||||
|
||||
DRIVER_INIT( mimonsco )
|
||||
{
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0xa804, 0xa804, 0, 0, scrambold_background_enable_w);
|
||||
}
|
||||
|
||||
DRIVER_INIT( mimonscr )
|
||||
{
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x6804, 0x6804, 0, 0, scrambold_background_enable_w);
|
||||
}
|
||||
|
||||
@ -782,9 +771,6 @@ DRIVER_INIT( hustler )
|
||||
offs_t A;
|
||||
|
||||
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
|
||||
for (A = 0;A < 0x4000;A++)
|
||||
{
|
||||
UINT8 xormask;
|
||||
@ -824,9 +810,6 @@ DRIVER_INIT( billiard )
|
||||
offs_t A;
|
||||
|
||||
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
|
||||
for (A = 0;A < 0x4000;A++)
|
||||
{
|
||||
UINT8 xormask;
|
||||
@ -874,58 +857,10 @@ DRIVER_INIT( billiard )
|
||||
DRIVER_INIT( mrkougar )
|
||||
{
|
||||
DRIVER_INIT_CALL(devilfsh);
|
||||
|
||||
/* no sound enabled bit */
|
||||
ppi8255_set_portBwrite(1, mrkougar_sh_irqtrigger_w);
|
||||
}
|
||||
|
||||
DRIVER_INIT( mrkougb )
|
||||
{
|
||||
DRIVER_INIT_CALL(scramble_ppi);
|
||||
|
||||
/* no sound enabled bit */
|
||||
ppi8255_set_portBwrite(1, mrkougar_sh_irqtrigger_w);
|
||||
}
|
||||
|
||||
DRIVER_INIT( sfx )
|
||||
{
|
||||
ppi8255_init(&sfx_ppi8255_intf);
|
||||
}
|
||||
|
||||
DRIVER_INIT( monsterz )
|
||||
{
|
||||
ppi8255_init(&monsterz_ppi8255_intf);
|
||||
|
||||
/* extra ROM */
|
||||
memory_install_read8_handler(machine, 1, ADDRESS_SPACE_PROGRAM, 0x3000, 0x3fff, 0, 0, SMH_BANK1);
|
||||
memory_set_bankptr(1, memory_region(REGION_CPU2) + 0x3000);
|
||||
}
|
||||
|
||||
static READ8_HANDLER( scorpion_prot_r )
|
||||
{
|
||||
/* HACK! return register C */
|
||||
return activecpu_get_reg(Z80_C) & 0xff;
|
||||
}
|
||||
|
||||
static READ8_HANDLER( scorpion_sound_status_r )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
DRIVER_INIT( scorpion )
|
||||
{
|
||||
ppi8255_init(&ppi8255_intf);
|
||||
|
||||
ppi8255_set_portCread(1, scorpion_prot_r);
|
||||
|
||||
/* extra ROM */
|
||||
memory_install_read8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x5800, 0x67ff, 0, 0, SMH_BANK1);
|
||||
memory_set_bankptr(1, memory_region(REGION_CPU1) + 0x5800);
|
||||
|
||||
/* no background related */
|
||||
memory_install_write8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x6803, 0x6803, 0, 0, SMH_NOP);
|
||||
|
||||
memory_install_read8_handler(machine, 1, ADDRESS_SPACE_PROGRAM, 0x3000, 0x3000, 0, 0, scorpion_sound_status_r);
|
||||
}
|
||||
|
||||
DRIVER_INIT( ad2083 )
|
||||
|
@ -1473,8 +1473,6 @@ MACHINE_RESET( tx1 )
|
||||
*************************************/
|
||||
MACHINE_START( tx1 )
|
||||
{
|
||||
ppi8255_init(&tx1_ppi8255_intf);
|
||||
|
||||
/* Initialise for each game */
|
||||
prom = (UINT16*)memory_region(REGION_USER1) + (0x8000 >> 1);
|
||||
|
||||
@ -1487,8 +1485,6 @@ MACHINE_START( tx1 )
|
||||
|
||||
MACHINE_START( buggyboy )
|
||||
{
|
||||
ppi8255_init(&buggyboy_ppi8255_intf);
|
||||
|
||||
/* Initialise for each game */
|
||||
prom = (UINT16*)memory_region(REGION_USER1) + (0x8000 >> 1);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user