trunk/src/mame/drivers/g627.c
| r17830 | r17831 | |
| 17 | 17 | |
| 18 | 18 | ToDo: |
| 19 | 19 | - Battery backup |
| 20 | | - Inputs |
| 21 | 20 | - Outputs |
| 22 | | - Displays / Layout |
| 23 | | - Diagnostic keyboard |
| 21 | - Displays / Layout to fix |
| 24 | 22 | - Possibility of a rom missing (most likely it is optional) |
| 25 | 23 | |
| 26 | 24 | *******************************************************************************/ |
| r17830 | r17831 | |
| 55 | 53 | virtual void machine_reset(); |
| 56 | 54 | private: |
| 57 | 55 | UINT8 m_seg[6]; |
| 56 | UINT8 m_portc; |
| 58 | 57 | }; |
| 59 | 58 | |
| 60 | 59 | |
| r17830 | r17831 | |
| 73 | 72 | ADDRESS_MAP_END |
| 74 | 73 | |
| 75 | 74 | static INPUT_PORTS_START( g627 ) |
| 75 | PORT_START("X0") |
| 76 | //bits 0,1 : optical encoder for precise table alignment. Correct position = 3. |
| 77 | //bit2-7 : position of table as it turns, using Gray code. |
| 78 | PORT_START("X1") |
| 79 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Centre TB") PORT_CODE(KEYCODE_Q) |
| 80 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Bank Shot Outlane") PORT_CODE(KEYCODE_W) |
| 81 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Spinner") PORT_CODE(KEYCODE_E) |
| 82 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("8 Ball Target") PORT_CODE(KEYCODE_R) |
| 83 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_START3) PORT_NAME("Call East") |
| 84 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_START2) PORT_NAME("Call South") |
| 85 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_START1) PORT_NAME("Call North") |
| 86 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_START4) PORT_NAME("Call West") |
| 87 | PORT_START("X2") |
| 88 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Bottom TB") PORT_CODE(KEYCODE_Y) |
| 89 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left Flipper Return") PORT_CODE(KEYCODE_U) |
| 90 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("3/11 Target") PORT_CODE(KEYCODE_I) |
| 91 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("1/9 Target") PORT_CODE(KEYCODE_O) |
| 92 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("North Slam") |
| 93 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("North Test") PORT_CODE(KEYCODE_9) |
| 94 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_COIN1) PORT_NAME("North Coin") |
| 95 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("North Tilt") PORT_CODE(KEYCODE_T) |
| 96 | PORT_START("X3") |
| 97 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Top Slingshot") PORT_CODE(KEYCODE_O) |
| 98 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Bank Shot Advance") PORT_CODE(KEYCODE_A) |
| 99 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("4/12 Target") PORT_CODE(KEYCODE_S) |
| 100 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("2/10 Target") PORT_CODE(KEYCODE_D) |
| 101 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("South Slam") |
| 102 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("South Test") PORT_CODE(KEYCODE_0) |
| 103 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_COIN2) PORT_NAME("South Coin") |
| 104 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("South Tilt") |
| 105 | PORT_START("X4") |
| 106 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right Slingshot") PORT_CODE(KEYCODE_F) |
| 107 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("OutHole") PORT_CODE(KEYCODE_X) |
| 108 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("5/13 Target") PORT_CODE(KEYCODE_G) |
| 109 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("4/16 Target") PORT_CODE(KEYCODE_H) |
| 110 | PORT_START("X5") |
| 111 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left Slingshot") PORT_CODE(KEYCODE_J) |
| 112 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right Flipper Return") PORT_CODE(KEYCODE_K) |
| 113 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right Out Lane") PORT_CODE(KEYCODE_L) |
| 114 | PORT_START("X6") |
| 115 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Top TB") PORT_CODE(KEYCODE_COLON) |
| 116 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("7/15 Target") PORT_CODE(KEYCODE_QUOTE) |
| 117 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("10 Points") PORT_CODE(KEYCODE_EQUALS) |
| 118 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Break Shot Hole") PORT_CODE(KEYCODE_Z) |
| 119 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left Out Lane") PORT_CODE(KEYCODE_MINUS) |
| 120 | |
| 121 | // Diagnostic Keyboard: Press GAME then END then TEST#. Press GAME etc for more tests. |
| 122 | // Pressing test 8 at any time will instantly reset the NVRAM. |
| 123 | PORT_START("Y0") |
| 124 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("3") PORT_CODE(KEYCODE_3_PAD) |
| 125 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("2") PORT_CODE(KEYCODE_2_PAD) |
| 126 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("1") PORT_CODE(KEYCODE_1_PAD) |
| 127 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("0") PORT_CODE(KEYCODE_0_PAD) |
| 128 | PORT_START("Y1") |
| 129 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("7") PORT_CODE(KEYCODE_7_PAD) |
| 130 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("6") PORT_CODE(KEYCODE_6_PAD) |
| 131 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("5") PORT_CODE(KEYCODE_5_PAD) |
| 132 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("4") PORT_CODE(KEYCODE_4_PAD) |
| 133 | PORT_START("Y2") |
| 134 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("SET") PORT_CODE(KEYCODE_PLUS_PAD) |
| 135 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME(".") PORT_CODE(KEYCODE_DEL_PAD) |
| 136 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("9") PORT_CODE(KEYCODE_9_PAD) |
| 137 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("8") PORT_CODE(KEYCODE_8_PAD) |
| 138 | PORT_START("Y3") |
| 139 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Test 3") PORT_CODE(KEYCODE_B) |
| 140 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Test 2") PORT_CODE(KEYCODE_V) |
| 141 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Test 1") PORT_CODE(KEYCODE_C) |
| 142 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("GAME") PORT_CODE(KEYCODE_ENTER_PAD) |
| 143 | PORT_START("Y4") |
| 144 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Test 7") |
| 145 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Test 6") PORT_CODE(KEYCODE_COMMA) |
| 146 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Test 5") PORT_CODE(KEYCODE_M) |
| 147 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Test 4") PORT_CODE(KEYCODE_N) |
| 148 | PORT_START("Y5") |
| 149 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("END") PORT_CODE(KEYCODE_END) |
| 150 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Test 10") |
| 151 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Test 9") |
| 152 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Test 8") PORT_CODE(KEYCODE_STOP) |
| 76 | 153 | INPUT_PORTS_END |
| 77 | 154 | |
| 78 | 155 | void g627_state::machine_reset() |
| 79 | 156 | { |
| 157 | |
| 80 | 158 | } |
| 81 | 159 | |
| 160 | // inputs |
| 82 | 161 | READ8_MEMBER( g627_state::porta_r ) |
| 83 | 162 | { |
| 163 | if (m_portc < 7) |
| 164 | { |
| 165 | char kbdrow[6]; |
| 166 | sprintf(kbdrow,"X%X",m_portc); |
| 167 | return ioport(kbdrow)->read(); |
| 168 | } |
| 84 | 169 | return 0; |
| 85 | 170 | } |
| 86 | 171 | |
| 172 | // diagnostic keyboard |
| 87 | 173 | READ8_MEMBER( g627_state::portb_r ) |
| 88 | 174 | { |
| 175 | if (m_portc < 6) |
| 176 | { |
| 177 | char kbdrow[6]; |
| 178 | sprintf(kbdrow,"Y%X",m_portc); |
| 179 | return ioport(kbdrow)->read(); |
| 180 | } |
| 89 | 181 | return 0; |
| 90 | 182 | } |
| 91 | 183 | |
| 92 | 184 | // write the 6 digits of 1 display panel |
| 93 | 185 | WRITE8_MEMBER( g627_state::portc_w ) |
| 94 | 186 | { |
| 187 | m_portc = data; |
| 95 | 188 | if (data < 7) |
| 96 | 189 | for (int i = 0; i < 6; i++) |
| 97 | 190 | output_set_digit_value(data * 10 + i, m_seg[i]); |
| r17830 | r17831 | |
| 102 | 195 | { |
| 103 | 196 | static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0, 0, 0, 0, 0, 0 }; |
| 104 | 197 | offset <<= 1; |
| 105 | | m_seg[offset]=patterns[data>>4]; |
| 106 | | m_seg[++offset]=patterns[data&15]; |
| 198 | m_seg[offset] = patterns[data>>4]; |
| 199 | m_seg[++offset] = patterns[data&15]; |
| 107 | 200 | } |
| 108 | 201 | |
| 109 | 202 | static I8156_INTERFACE(i8156_intf) |
| r17830 | r17831 | |
| 135 | 228 | / Rotation VIII (09/1978) |
| 136 | 229 | /-------------------------------------------------------------------*/ |
| 137 | 230 | ROM_START(rotation) |
| 138 | | ROM_REGION(0x10000, "maincpu", 0) // schematic shows 4x 2716 roms |
| 231 | ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF) // schematic shows 4x 2716 roms |
| 139 | 232 | ROM_LOAD("rot-a117.dat", 0x0000, 0x0800, CRC(7bb6beb3) SHA1(5ee62246032158c68d426c11a4a9a889ee7655d7)) |
| 140 | 233 | ROM_LOAD("rot-b117.dat", 0x0800, 0x0800, CRC(538e37b2) SHA1(d283ac4d0024388b92b6494fcde63957b705bf48)) |
| 141 | 234 | ROM_LOAD("rot-c117.dat", 0x1000, 0x0800, CRC(3321ff08) SHA1(d6d94fea27ef58ca648b2829b32d62fcec108c9b)) |