Improvements to Noraut Poker driver...

* Routed the whole video RAM access through PPI-2.
   (bypassed the handshake lines for now).
 * Merged back the noraut machine drivers after the 3rd PPI connection.
 * Added Low Level Hopper manual input.
 * Added a new machine driver for extended hardware.
   It has 2 jumpers that cut the a14 and a15 addressing lines.
This commit is contained in:
Roberto Fresca 2009-09-03 07:34:32 +00:00
parent 30161effc7
commit 53907cc182

View File

@ -375,9 +375,9 @@
PortA handshake lines & PC0-PC2 (noraut11 = OUT; noraut12 = IN):
7654 3210
---- ---x unknown (noraut11).
---- --x- unknown (noraut11).
---- -x-- unknown (noraut11).
---- ---x * N/C (noraut11).
---- --x- * N/C (noraut11).
---- -x-- * N/C (noraut11).
---- ---x * N/C (noraut12).
---- --x- * READOUT SWITCH (noraut12).
---- -x-- * LOW LEVEL HOPPER (noraut12).
@ -504,10 +504,19 @@
- Updated technical notes.
[2009-09-03]
- Routed the whole video RAM access through PPI-2.
(bypassed the handshake lines for now).
- Merged back the noraut machine drivers after the 3rd PPI connection.
- Added Low Level Hopper manual input.
- Added a new machine driver for extended hardware.
It has 2 jumpers that cut the a14 and a15 addressing lines.
TODO:
- Analize the third 8255 at 0xc0-0xc3 (full bidirectional port w/hshk lines)
- Video RAM (through 3rd PPI?).
- Analize PPI-2 at 0xc0-0xc3. OBF handshake line (PC7) doesn't seems to work properly.
- Find if wide chars are hardcoded or tied to a bit.
- Discrete sound.
- Save support.
@ -669,28 +678,39 @@ static WRITE8_DEVICE_HANDLER( counterlamps_w )
/* Game waits for bit 7 (0x80) to be set.
This should be the /OBF line (PC7) from PPI-2 (handshaked).
PC0-PC2 are set as input.
This should be the /OBF line (PC7) from PPI-2 (handshake).
PC0-PC2 could be set as input or output.
*/
UINT8 ppi2_portc;
UINT8 hndshk = 0xf8; /* simulating the handshake lines */
static READ8_HANDLER( ppi2_portc_r )
static READ8_DEVICE_HANDLER( ppi2_portc_r )
{
ppi2_portc = (hndshk | (input_port_read(space->machine, "IN2") & 0x07));
UINT8 ppi2_pcmix = 0;
UINT8 hndshk = 0x80; /* simulating the handshake lines (bits 3-7) */
ppi2_pcmix = (hndshk | (input_port_read(device->machine, "IN2") & 0x07));
// popmessage("portc read: %02x", ppi2_pcmix);
return ppi2_portc;
return ppi2_pcmix;
}
static READ8_HANDLER( hndshk_r )
static WRITE8_DEVICE_HANDLER( ppi2_portc_w )
{
return hndshk;
/* PC0-PC2 don't seems to be connected to any output */
// popmessage("portc write: %02x", data);
}
static WRITE8_HANDLER( ppi2_portc_w )
static READ8_DEVICE_HANDLER( vram_data_r )
{
/* PC0-PC2 don't seems to be connected */
popmessage("written : %02X", data);
return np_vram[np_addr];
}
static WRITE8_DEVICE_HANDLER( vram_data_w )
{
np_vram[np_addr] = data & 0xff;
}
static WRITE8_DEVICE_HANDLER( vram_addr_w )
{
np_addr = data;
}
/* game waits for bit 4 (0x10) to be reset.*/
@ -699,16 +719,6 @@ static READ8_HANDLER( test2_r )
return 0x00;
}
static WRITE8_HANDLER( vram_data_w )
{
np_vram[np_addr] = data & 0xff;
}
static WRITE8_HANDLER( vram_addr_w )
{
np_addr = data;
}
/*************************
* Memory Map Information *
@ -719,36 +729,35 @@ static ADDRESS_MAP_START( norautp_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x6000, 0x63ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
ADDRESS_MAP_END
static ADDRESS_MAP_START( noraut11_portmap, ADDRESS_SPACE_IO, 8 )
static ADDRESS_MAP_START( norautp_portmap, ADDRESS_SPACE_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x60, 0x63) AM_DEVREADWRITE("ppi8255_0", ppi8255_r, ppi8255_w)
AM_RANGE(0xa0, 0xa3) AM_DEVREADWRITE("ppi8255_1", ppi8255_r, ppi8255_w)
AM_RANGE(0xc0, 0xc0) AM_WRITE(vram_data_w)
AM_RANGE(0xc1, 0xc1) AM_WRITE(vram_addr_w)
AM_RANGE(0xc2, 0xc2) AM_READWRITE(hndshk_r, ppi2_portc_w)
// AM_RANGE(0xc0, 0xc3) AM_DEVREADWRITE("ppi8255_2", ppi8255_r, ppi8255_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( noraut12_portmap, ADDRESS_SPACE_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x60, 0x63) AM_DEVREADWRITE("ppi8255_0", ppi8255_r, ppi8255_w)
AM_RANGE(0xa0, 0xa3) AM_DEVREADWRITE("ppi8255_1", ppi8255_r, ppi8255_w)
AM_RANGE(0xc0, 0xc0) AM_WRITE(vram_data_w)
AM_RANGE(0xc1, 0xc1) AM_WRITE(vram_addr_w)
AM_RANGE(0xc2, 0xc2) AM_READ(ppi2_portc_r)
// AM_RANGE(0xc0, 0xc3) AM_DEVREADWRITE("ppi8255_2", ppi8255_r, ppi8255_w)
AM_RANGE(0xc0, 0xc3) AM_DEVREADWRITE("ppi8255_2", ppi8255_r, ppi8255_w)
ADDRESS_MAP_END
/*
Video RAM R/W:
c0 --> W ; data (in case of PPI, port data)
c0 --> W ; data
c1 --> W ; addressing
c2 --> R ; status?
c3 --> W ; alternate 00 & 01 (PC0 line on PPI-2 (noraut11)
c2 --> R ; status
c3 --> W ; alternate 00 & 01 (control?)
*/
static ADDRESS_MAP_START( norautxp_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0xcfff) AM_ROM /* need to be checked */
AM_RANGE(0xd000, 0xd3ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) /* need to be checked */
ADDRESS_MAP_END
static ADDRESS_MAP_START( norautxp_portmap, ADDRESS_SPACE_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK(0xff)
// AM_RANGE(0x60, 0x63) AM_DEVREADWRITE("ppi8255_0", ppi8255_r, ppi8255_w)
// AM_RANGE(0xa0, 0xa3) AM_DEVREADWRITE("ppi8255_1", ppi8255_r, ppi8255_w)
// AM_RANGE(0xc0, 0xc3) AM_DEVREADWRITE("ppi8255_2", ppi8255_r, ppi8255_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( gtipoker_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0xd000, 0xd3ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
@ -758,10 +767,7 @@ static ADDRESS_MAP_START( gtipoker_portmap, ADDRESS_SPACE_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x7c, 0x7f) AM_DEVREADWRITE("ppi8255_0", ppi8255_r, ppi8255_w)
AM_RANGE(0xbc, 0xbf) AM_DEVREADWRITE("ppi8255_1", ppi8255_r, ppi8255_w)
AM_RANGE(0xdc, 0xdc) AM_WRITE(vram_data_w)
AM_RANGE(0xdd, 0xdd) AM_WRITE(vram_addr_w)
AM_RANGE(0xde, 0xde) AM_READ(ppi2_portc_r)
// AM_RANGE(0xdc, 0xdf) AM_DEVREADWRITE("ppi8255_2", ppi8255_r, ppi8255_w)
AM_RANGE(0xdc, 0xdf) AM_DEVREADWRITE("ppi8255_2", ppi8255_r, ppi8255_w)
AM_RANGE(0xef, 0xef) AM_READ(test2_r)
ADDRESS_MAP_END
@ -794,8 +800,8 @@ static INPUT_PORTS_START( norautp )
PORT_START("IN2") /* Only 3 lines: PPI-2; PC0-PC2 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_J) PORT_NAME("IN2-1")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Readout") PORT_CODE(KEYCODE_9)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_L) PORT_NAME("IN2-3")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Readout")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_L) PORT_NAME("Low Level Hopper")
PORT_START("DSW1")
@ -847,6 +853,11 @@ static INPUT_PORTS_START( norautrh )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD5 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) /* Coin C for other games */
PORT_START("IN2") /* Only 3 lines: PPI-2; PC0-PC2 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("DSW1")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:8")
@ -897,9 +908,9 @@ static INPUT_PORTS_START( norautpn )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_CANCEL )
PORT_START("IN2") /* Only 3 lines: PPI-2; PC0-PC2 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_J) PORT_NAME("IN2-1")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_K) PORT_NAME("IN2-2")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_L) PORT_NAME("IN2-3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("DSW1")
@ -998,12 +1009,12 @@ static const ppi8255_interface ppi8255_intf[3] =
},
{ /* (c0-c3) Group A Mode 2 (5-handshacked bidirectional port)
Group B Mode 0, output; (see below for lines PC0-PC2) */
DEVCB_NULL, /* Port A read */
DEVCB_HANDLER(vram_data_r), /* Port A read */
DEVCB_NULL, /* Port B read */
DEVCB_NULL, /* Port C read (should has test_r tied) */
DEVCB_NULL, /* Port A write (should has vram_data_w tied) */
DEVCB_NULL, /* Port B write (should has vram_addr_w tied) */
DEVCB_NULL /* Port C write */
DEVCB_HANDLER(ppi2_portc_r), /* Port C read */
DEVCB_HANDLER(vram_data_w), /* Port A write (vram_data_w tied) */
DEVCB_HANDLER(vram_addr_w), /* Port B write (vram_addr_w tied) */
DEVCB_HANDLER(ppi2_portc_w) /* Port C write */
}
/* PPI-2 is configured as mixed mode2 and mode0 output.
It means that port A should be bidirectional and port B just as output.
@ -1021,7 +1032,7 @@ static MACHINE_DRIVER_START( norautp )
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", Z80, CPU_CLOCK)
MDRV_CPU_PROGRAM_MAP(norautp_map)
// MDRV_CPU_IO_MAP(noraut12_portmap)
MDRV_CPU_IO_MAP(norautp_portmap)
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
MDRV_NVRAM_HANDLER(generic_0fill)
@ -1052,19 +1063,12 @@ static MACHINE_DRIVER_START( norautp )
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( noraut11 )
static MACHINE_DRIVER_START( norautxp )
MDRV_IMPORT_FROM(norautp)
MDRV_CPU_MODIFY("maincpu")
MDRV_CPU_IO_MAP(noraut11_portmap)
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( noraut12 )
MDRV_IMPORT_FROM(norautp)
MDRV_CPU_MODIFY("maincpu")
MDRV_CPU_IO_MAP(noraut12_portmap)
MDRV_CPU_PROGRAM_MAP(norautxp_map)
MDRV_CPU_IO_MAP(norautxp_portmap)
MACHINE_DRIVER_END
@ -1210,7 +1214,8 @@ No date info on board or found in rom.
ROM_START( norautu )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "2563.bin", 0x0000, 0x8000, CRC(6cbe68bd) SHA1(93201baaf03a9bba6c52c64cc26e8e445aa6454e) )
ROM_LOAD( "2563.bin", 0x0000, 0x8000, CRC(6cbe68bd) SHA1(93201baaf03a9bba6c52c64cc26e8e445aa6454e) )
ROM_RELOAD( 0x8000, 0x8000 )
ROM_REGION( 0x1000, "gfx", 0 )
ROM_LOAD( "club250.bin", 0x0000, 0x1000, CRC(d94be899) SHA1(b7212162324fa2d67383a475052e3b351bb1af5f) )
@ -1272,17 +1277,51 @@ ROM_START( norautv3 )
ROM_END
/**************************
* Driver Init *
**************************/
/* These are to patch the check for OBF handshake line,
that seems to be wrong. Otherwise will enter in an infinite loop.
110D: DB C2 in a,($C2) ; read from PPI-2, portC. (OBF should be set, but isn't)
110F: 07 rlca ; rotate left.
1110: 30 FB jr nc,$110D
*/
static DRIVER_INIT( norautrh )
{
UINT8 *ROM = memory_region(machine, "maincpu");
ROM[0x1110] = 0x00;
ROM[0x1111] = 0x00;
}
static DRIVER_INIT( norautpn )
{
UINT8 *ROM = memory_region(machine, "maincpu");
ROM[0x0827] = 0x00;
ROM[0x0828] = 0x00;
}
static DRIVER_INIT( gtipoker )
{
// UINT8 *ROM = memory_region(machine, "maincpu");
// ROM[0x0cc6] = 0x00;
// ROM[0x0cc7] = 0x00;
}
/*************************
* Game Drivers *
*************************/
/* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS LAYOUT */
GAMEL( 1988, norautp, 0, noraut12, norautp, 0, ROT0, "Noraut Ltd.", "Noraut Poker", GAME_NO_SOUND, layout_noraut11 )
GAMEL( 1988, norautjp, norautp, noraut12, norautp, 0, ROT0, "Noraut Ltd.", "Noraut Joker Poker", GAME_NO_SOUND, layout_noraut11 )
GAMEL( 1988, norautrh, 0, noraut11, norautrh, 0, ROT0, "Noraut Ltd.", "Noraut Red Hot Joker Poker", GAME_NO_SOUND, layout_noraut12 )
GAME( 1988, norautu, 0, noraut12, norautp, 0, ROT0, "Noraut Ltd.", "Noraut Poker (NTX10A)", GAME_NO_SOUND | GAME_NOT_WORKING )
GAME( 1988, norautv3, 0, noraut12, norautp, 0, ROT0, "Noraut Ltd.", "Noraut Joker Poker (V3.010a)", GAME_NO_SOUND | GAME_NOT_WORKING )
GAME( 1983, gtipoker, 0, gtipoker, norautpn, 0, ROT0, "GTI Inc", "GTI Poker", GAME_NO_SOUND | GAME_NOT_WORKING )
/* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS LAYOUT */
GAMEL( 1988, norautp, 0, norautp, norautp, 0, ROT0, "Noraut Ltd.", "Noraut Poker", GAME_NO_SOUND, layout_noraut11 )
GAMEL( 1988, norautjp, norautp, norautp, norautp, 0, ROT0, "Noraut Ltd.", "Noraut Joker Poker", GAME_NO_SOUND, layout_noraut11 )
GAMEL( 1988, norautrh, 0, norautp, norautrh, norautrh, ROT0, "Noraut Ltd.", "Noraut Red Hot Joker Poker", GAME_NO_SOUND, layout_noraut12 )
GAME( 1988, norautu, 0, norautxp, norautp, 0, ROT0, "Noraut Ltd.", "Noraut Poker (NTX10A)", GAME_NO_SOUND | GAME_NOT_WORKING )
GAME( 1988, norautv3, 0, norautxp, norautp, 0, ROT0, "Noraut Ltd.", "Noraut Joker Poker (V3.010a)", GAME_NO_SOUND | GAME_NOT_WORKING )
GAME( 1983, gtipoker, 0, gtipoker, norautpn, gtipoker, ROT0, "GTI Inc", "GTI Poker", GAME_NO_SOUND | GAME_NOT_WORKING )
/*The following has everything uncertain, seems a bootleg/hack and doesn't have any identification strings in program rom. */
GAMEL( 198?, norautpn, norautp, noraut11, norautpn, 0, ROT0, "bootleg?", "Noraut Poker (bootleg)", GAME_NO_SOUND, layout_noraut12 )
GAMEL( 198?, norautpn, norautp, norautp, norautpn, norautpn, ROT0, "bootleg?", "Noraut Poker (bootleg)", GAME_NO_SOUND, layout_noraut12 )