diff --git a/src/mame/drivers/g627.c b/src/mame/drivers/g627.c index 09162b464d8..bcd81593349 100644 --- a/src/mame/drivers/g627.c +++ b/src/mame/drivers/g627.c @@ -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 ) diff --git a/src/mame/layout/g627.lay b/src/mame/layout/g627.lay index e1606b322d1..5497e99054a 100644 --- a/src/mame/layout/g627.lay +++ b/src/mame/layout/g627.lay @@ -18,11 +18,10 @@ - - - - - + + + + @@ -35,124 +34,102 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - + + - + - + - + - - - + - + @@ -161,6 +138,5 @@ -