Rotation: fixed displays, fixed sensors so that the game is now playable. [Robbbert]

This commit is contained in:
Robbbert 2012-09-13 15:40:19 +00:00
parent 0af1f7acdc
commit 057c457352
2 changed files with 73 additions and 67 deletions

View File

@ -15,10 +15,27 @@
Schematic and PinMAME used as references
Machine Operation:
1. Press num-enter then END then .(period key) (the displays will flash 400000)
2. Press num-enter
3. Insert a coin, credit will be registered
4. Hold X and start game. When 00 is flashing, release X
5. Press any of QWERYUIOASDFGHJKLZ-='; to simulate scoring shots (T will tilt)
6. Press and hold X to simulate losing the ball
7. When score starts flashing, release X and go to step 5 to play next ball
Notes: Do not play more than one player because the machine will try to
rotate the table, and the motor circuits are not emulated due to lack of info.
This means that the score labels of East, West and South are not verified.
The manual explains the tests available, and also how to set number of balls,
high score, etc., with the diagnostic keyboard.
ToDo:
- Battery backup
- Outputs
- Displays / Layout to fix
- Simulate motor circuitry and sensor feedback
- Verify labels of East, West and South on the display panel
- Possibility of a rom missing (most likely it is optional)
*******************************************************************************/
@ -43,6 +60,7 @@ public:
DECLARE_READ8_MEMBER(portb_r);
DECLARE_WRITE8_MEMBER(portc_w);
DECLARE_WRITE8_MEMBER(disp_w);
DECLARE_WRITE8_MEMBER(lamp_w);
protected:
@ -66,15 +84,17 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( g627_io, AS_IO, 8, g627_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x02) AM_WRITE(disp_w)
//AM_RANGE(0x03, 0x07) AM_WRITE(port_0x_w)
AM_RANGE(0x03, 0x07) AM_WRITE(lamp_w)
AM_RANGE(0x10, 0x17) AM_DEVWRITE_LEGACY("astrocade", astrocade_sound_w)
AM_RANGE(0x20, 0x27) AM_DEVREADWRITE("i8156", i8155_device, io_r, io_w)
ADDRESS_MAP_END
static INPUT_PORTS_START( g627 )
PORT_START("X0")
PORT_BIT(0x03, IP_ACTIVE_LOW, IPT_UNUSED) // force 3 here so game can start
//bits 0,1 : optical encoder for precise table alignment. Correct position = 3.
//bit2-7 : position of table as it turns, using Gray code.
// code to convert a number to a Gray Code: { return (input >> 1)^input; }
PORT_START("X1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Centre TB") PORT_CODE(KEYCODE_Q)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Bank Shot Outlane") PORT_CODE(KEYCODE_W)
@ -92,7 +112,7 @@ static INPUT_PORTS_START( g627 )
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("North Slam")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("North Test") PORT_CODE(KEYCODE_9)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_COIN1) PORT_NAME("North Coin")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("North Tilt") PORT_CODE(KEYCODE_T)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_TILT) PORT_NAME("North Tilt")
PORT_START("X3")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Top Slingshot") PORT_CODE(KEYCODE_O)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Bank Shot Advance") PORT_CODE(KEYCODE_A)
@ -181,13 +201,18 @@ READ8_MEMBER( g627_state::portb_r )
return 0;
}
// write the 6 digits of 1 display panel
// write 6 digits
WRITE8_MEMBER( g627_state::portc_w )
{
m_portc = data;
if (data < 7)
for (int i = 0; i < 6; i++)
output_set_digit_value(data * 10 + i, m_seg[i]);
if (data < 6)
{
output_set_digit_value(data, m_seg[0]);
output_set_digit_value(10 + data, m_seg[1]);
output_set_digit_value(20 + data, m_seg[2]);
output_set_digit_value(30 + data, m_seg[3]);
output_set_digit_value(50 + data, m_seg[5]);
}
}
// save segments until we can write the digits
@ -199,6 +224,11 @@ WRITE8_MEMBER( g627_state::disp_w )
m_seg[++offset] = patterns[data&15];
}
// lamps and solenoids
WRITE8_MEMBER( g627_state::lamp_w )
{
}
static I8156_INTERFACE(i8156_intf)
{
DEVCB_DRIVER_MEMBER(g627_state,porta_r), // Port A in
@ -235,4 +265,4 @@ ROM_START(rotation)
ROM_END
GAME(1978, rotation, 0, g627, g627, driver_device, 0, ROT0, "Midway", "Rotation VIII", GAME_MECHANICAL | GAME_NOT_WORKING | GAME_IMPERFECT_KEYBOARD)
GAME(1978, rotation, 0, g627, g627, driver_device, 0, ROT0, "Midway", "Rotation VIII", GAME_MECHANICAL )

View File

@ -18,11 +18,10 @@
</element>
<element name="P0"><text string="Balls"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P1"><text string="Credits"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P3"><text string="Player 1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P4"><text string="Player 2"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P5"><text string="Player 3"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P6"><text string="Player 4"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P7"><text string="High Score"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P3"><text string="East"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P4"><text string="North"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P5"><text string="West"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P6"><text string="South"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<view name="Default Layout">
@ -35,124 +34,102 @@
<!-- Player 1 Score -->
<bezel name="digit5" element="digit">
<bezel name="digit0" element="digit">
<bounds left="10" top="45" right="44" bottom="84" />
</bezel>
<bezel name="digit4" element="digit">
<bezel name="digit1" element="digit">
<bounds left="54" top="45" right="88" bottom="84" />
</bezel>
<bezel name="digit3" element="digit">
<bezel name="digit2" element="digit">
<bounds left="98" top="45" right="132" bottom="84" />
</bezel>
<bezel name="digit2" element="digit">
<bezel name="digit3" element="digit">
<bounds left="142" top="45" right="176" bottom="84" />
</bezel>
<bezel name="digit1" element="digit">
<bezel name="digit4" element="digit">
<bounds left="186" top="45" right="220" bottom="84" />
</bezel>
<bezel name="digit0" element="digit">
<bezel name="digit5" element="digit">
<bounds left="230" top="45" right="264" bottom="84" />
</bezel>
<!-- Player 2 Score -->
<bezel name="digit15" element="digit">
<bezel name="digit10" element="digit">
<bounds left="10" top="105" right="44" bottom="144" />
</bezel>
<bezel name="digit14" element="digit">
<bezel name="digit11" element="digit">
<bounds left="54" top="105" right="88" bottom="144" />
</bezel>
<bezel name="digit13" element="digit">
<bezel name="digit12" element="digit">
<bounds left="98" top="105" right="132" bottom="144" />
</bezel>
<bezel name="digit12" element="digit">
<bezel name="digit13" element="digit">
<bounds left="142" top="105" right="176" bottom="144" />
</bezel>
<bezel name="digit11" element="digit">
<bezel name="digit14" element="digit">
<bounds left="186" top="105" right="220" bottom="144" />
</bezel>
<bezel name="digit10" element="digit">
<bezel name="digit15" element="digit">
<bounds left="230" top="105" right="264" bottom="144" />
</bezel>
<!-- Player 3 Score -->
<bezel name="digit25" element="digit">
<bezel name="digit20" element="digit">
<bounds left="10" top="165" right="44" bottom="204" />
</bezel>
<bezel name="digit24" element="digit">
<bezel name="digit21" element="digit">
<bounds left="54" top="165" right="88" bottom="204" />
</bezel>
<bezel name="digit23" element="digit">
<bezel name="digit22" element="digit">
<bounds left="98" top="165" right="132" bottom="204" />
</bezel>
<bezel name="digit22" element="digit">
<bezel name="digit23" element="digit">
<bounds left="142" top="165" right="176" bottom="204" />
</bezel>
<bezel name="digit21" element="digit">
<bezel name="digit24" element="digit">
<bounds left="186" top="165" right="220" bottom="204" />
</bezel>
<bezel name="digit20" element="digit">
<bezel name="digit25" element="digit">
<bounds left="230" top="165" right="264" bottom="204" />
</bezel>
<!-- Player 4 Score -->
<bezel name="digit35" element="digit">
<bezel name="digit30" element="digit">
<bounds left="10" top="225" right="44" bottom="264" />
</bezel>
<bezel name="digit34" element="digit">
<bezel name="digit31" element="digit">
<bounds left="54" top="225" right="88" bottom="264" />
</bezel>
<bezel name="digit33" element="digit">
<bezel name="digit32" element="digit">
<bounds left="98" top="225" right="132" bottom="264" />
</bezel>
<bezel name="digit32" element="digit">
<bezel name="digit33" element="digit">
<bounds left="142" top="225" right="176" bottom="264" />
</bezel>
<bezel name="digit31" element="digit">
<bezel name="digit34" element="digit">
<bounds left="186" top="225" right="220" bottom="264" />
</bezel>
<bezel name="digit30" element="digit">
<bezel name="digit35" element="digit">
<bounds left="230" top="225" right="264" bottom="264" />
</bezel>
<!-- High Score -->
<bezel name="digit45" element="digit">
<bounds left="10" top="285" right="44" bottom="324" />
</bezel>
<bezel name="digit44" element="digit">
<bounds left="54" top="285" right="88" bottom="324" />
</bezel>
<bezel name="digit43" element="digit">
<bounds left="98" top="285" right="132" bottom="324" />
</bezel>
<bezel name="digit42" element="digit">
<bounds left="142" top="285" right="176" bottom="324" />
</bezel>
<bezel name="digit41" element="digit">
<bounds left="186" top="285" right="220" bottom="324" />
</bezel>
<bezel name="digit40" element="digit">
<bounds left="230" top="285" right="264" bottom="324" />
</bezel>
<!-- Credits -->
<bezel name="digit55" element="digit">
<!-- Credits and Balls -->
<bezel name="digit50" element="digit">
<bounds left="10" top="345" right="44" bottom="384" />
</bezel>
<bezel name="digit54" element="digit">
<bezel name="digit51" element="digit">
<bounds left="54" top="345" right="88" bottom="384" />
</bezel>
<bezel name="digit53" element="digit">
<bezel name="digit52" element="digit">
<bounds left="98" top="345" right="132" bottom="384" />
</bezel>
<bezel name="digit52" element="digit">
<bezel name="digit53" element="digit">
<bounds left="142" top="345" right="176" bottom="384" />
</bezel>
<!-- Match / Balls Left -->
<bezel name="digit51" element="digit">
<bezel name="digit54" element="digit">
<bounds left="186" top="345" right="220" bottom="384" />
</bezel>
<bezel name="digit50" element="digit">
<bezel name="digit55" element="digit">
<bounds left="230" top="345" right="264" bottom="384" />
</bezel>
<bezel element="P0"><bounds left="200" right="258" top="330" bottom="342" /></bezel>
@ -161,6 +138,5 @@
<bezel element="P4"><bounds left="100" right="180" top="90" bottom="102" /></bezel>
<bezel element="P5"><bounds left="100" right="180" top="150" bottom="162" /></bezel>
<bezel element="P6"><bounds left="100" right="180" top="210" bottom="222" /></bezel>
<bezel element="P7"><bounds left="100" right="180" top="270" bottom="282" /></bezel>
</view>
</mamelayout>