Previous 199869 Revisions Next

r17749 Sunday 9th September, 2012 at 11:22:39 UTC by Robbbert
xforce: added input matrix, but game stops responding once the start button is pressed.
[src/mame/drivers]techno.c

trunk/src/mame/drivers/techno.c
r17748r17749
44    Technoplay "2-2C 8008 LS" (68000 CPU)
55    Schematic and PinMAME used as references
66
7ToDo:
8- Once game starts, nothing responds
9- No sound due to missing roms
10- Battery backup to be added
11
712***********************************************************************************/
813
914
1015#include "emu.h"
1116#include "cpu/m68000/m68000.h"
1217#include "techno.lh"
13// schematic says 8MHz but it goes too fast
14#define TECHNO_MAINCLK 4e6
1518
19#define TECHNO_MAINCLK 8e6
20
1621class techno_state : public driver_device
1722{
1823public:
r17748r17749
3237   DECLARE_WRITE16_MEMBER(sol1_w);
3338   DECLARE_WRITE16_MEMBER(sol2_w);
3439   DECLARE_WRITE16_MEMBER(sound_w);
35   UINT16 m_digit_1;
36   UINT16 m_digit_2;
37   UINT16 m_segment_1;
38   UINT16 m_segment_2;
40   UINT16 m_digit;
3941   UINT8 m_vector;
4042protected:
4143
r17748r17749
4648   virtual void machine_reset();
4749private:
4850   bool m_digwait;
49public:
50   DECLARE_DRIVER_INIT(techno);
51   UINT8 m_keyrow;
5152};
5253
5354
r17748r17749
7677
7778WRITE16_MEMBER( techno_state::disp1_w )
7879{
79   m_segment_1 = BITSWAP16(data, 12, 10, 8, 14, 13, 9, 11, 15, 7, 6, 5, 4, 3, 2, 1, 0);
80   output_set_digit_value(m_digit_1, m_segment_1);
80   output_set_digit_value(m_digit, BITSWAP16(data, 12, 10, 8, 14, 13, 9, 11, 15, 7, 6, 5, 4, 3, 2, 1, 0));
8181}
8282
8383WRITE16_MEMBER( techno_state::disp2_w )
8484{
85   m_segment_2 = BITSWAP16(data, 12, 10, 8, 14, 13, 9, 11, 15, 7, 6, 5, 4, 3, 2, 1, 0);
86   output_set_digit_value(m_digit_1+30, m_segment_2);
85   output_set_digit_value(m_digit+30, BITSWAP16(data, 12, 10, 8, 14, 13, 9, 11, 15, 7, 6, 5, 4, 3, 2, 1, 0));
8786}
8887
8988WRITE16_MEMBER( techno_state::sound_w )
9089{
90/*
91d0..d7 : to sound board
92d8     : strobe to display board
93d9     : reset (unknown purpose)
94d10    : data clock to display board
95d11-d15: AUX outputs
96*/
97
98// this code derived from PinMAME
9199   if (m_digwait)
92      m_digit_1 = (m_digit_1+1) % 16;
100      m_digit = (m_digit+1) % 16;
93101
94102   if (BIT(data, 10))
95103   {
96104      m_digwait = 1;
97      m_digit_1 = 0;
105      m_digit = 0;
98106   }
99107}
100108
101109// lamps & keymatrix
102110WRITE16_MEMBER( techno_state::lamp1_w )
103111{
112// Work out key row
113   for (int i = 8; i < 16; i++)
114      if (BIT(data, i))
115         m_keyrow = i-8;
104116}
105117
106118// more lamps
r17748r17749
126138// inputs
127139READ16_MEMBER( techno_state::key_r )
128140{
129   return 0;
141   char kbdrow[6];
142   sprintf(kbdrow,"X%X",m_keyrow);
143   return ioport(kbdrow)->read();
130144}
131145
132146// unknown
r17748r17749
138152// feedback from sound board, and some AUX inputs
139153READ16_MEMBER( techno_state::sound_r )
140154{
141   return 0xffff;
155   return 0;
142156}
143157
144158static INPUT_PORTS_START( techno )
159   PORT_START("X0")
160   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Letter select+") PORT_CODE(KEYCODE_F5)
161   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN3 )
162   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 )
163   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN1 )
164   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SERVICE )
165   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_TILT2 )
166   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Test-") PORT_CODE(KEYCODE_F7)
167   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Test+") PORT_CODE(KEYCODE_F8)
168   PORT_START("X1")
169   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fix top target right")
170   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Horizontal rail right")
171   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
172   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Mini Post") PORT_CODE(KEYCODE_I)
173   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
174   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_TILT )
175   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START )
176   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Letter select+") PORT_CODE(KEYCODE_F6)
177   PORT_START("X2")
178   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
179   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Inner Canal Left") PORT_CODE(KEYCODE_O)
180   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Exit Canal Right") PORT_CODE(KEYCODE_OPENBRACE)
181   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Ball 1")
182   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Ball 2")
183   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Ball 3")
184   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Ball 4")
185   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Out Hole") PORT_CODE(KEYCODE_X)
186   PORT_START("X3")
187   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Top Bumper") PORT_CODE(KEYCODE_Q)
188   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Bottom Bumper") PORT_CODE(KEYCODE_W)
189   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Top Right Kicker") PORT_CODE(KEYCODE_E)
190   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Right Kicker") PORT_CODE(KEYCODE_R)
191   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Left Kicker") PORT_CODE(KEYCODE_Y)
192   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Exit Canal Left") PORT_CODE(KEYCODE_U)
193   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Inner Canal Right") PORT_CODE(KEYCODE_I)
194   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
195   PORT_START("X4")
196   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fix left target bottom") PORT_CODE(KEYCODE_A)
197   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Left rollover") PORT_CODE(KEYCODE_S)
198   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Barrier 1 Target") PORT_CODE(KEYCODE_D)
199   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
200   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Barrier 2 Target") PORT_CODE(KEYCODE_F)
201   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
202   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Barrier 3 Target") PORT_CODE(KEYCODE_G)
203   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Left Bumper") PORT_CODE(KEYCODE_H)
204   PORT_START("X5")
205   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fix right target top") PORT_CODE(KEYCODE_J)
206   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fix right target middle-top") PORT_CODE(KEYCODE_K)
207   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Spinning Target") PORT_CODE(KEYCODE_L)
208   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fixed contact") PORT_CODE(KEYCODE_COLON)
209   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Special Target") PORT_CODE(KEYCODE_QUOTE)
210   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
211   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fix left target top") PORT_CODE(KEYCODE_CLOSEBRACE)
212   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fix left target centre") PORT_CODE(KEYCODE_BACKSLASH)
213   PORT_START("X6")
214   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fix top left target left") PORT_CODE(KEYCODE_Z)
215   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Ball 1 Bridge")
216   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Ball 2 Bridge")
217   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Ball 3 Bridge")
218   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Ball 4 Bridge")
219   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
220   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fix right target middle-bottom") PORT_CODE(KEYCODE_C)
221   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fix right target bottom") PORT_CODE(KEYCODE_V)
222   PORT_START("X7")
223   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fix top target middle-right") PORT_CODE(KEYCODE_B)
224   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fix top target middle-left") PORT_CODE(KEYCODE_N)
225   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fix top target Left") PORT_CODE(KEYCODE_M)
226   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Horizontal Rail Left") PORT_CODE(KEYCODE_COMMA)
227   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Chopper Exit") PORT_CODE(KEYCODE_STOP)
228   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Chopper Entry") PORT_CODE(KEYCODE_SLASH)
229   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fix top left target right") PORT_CODE(KEYCODE_MINUS)
230   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Fix top left target middle") PORT_CODE(KEYCODE_EQUALS)
145231INPUT_PORTS_END
146232
147233static INTERRUPT_GEN( techno_intgen )
r17748r17749
158244void techno_state::machine_reset()
159245{
160246   m_vector = 0x88;
247   m_digit = 0;
161248}
162249
163DRIVER_INIT_MEMBER(techno_state,techno)
164{
165}
166
167250static MACHINE_CONFIG_START( techno, techno_state )
168251   /* basic machine hardware */
169252   MCFG_CPU_ADD("maincpu", M68000, TECHNO_MAINCLK)
r17748r17749
185268   // 5 x 27256 roms are undumped
186269ROM_END
187270
188GAME(1987,  xforce,  0,  techno,  techno, techno_statetechno,  ROT0,  "Tecnoplay", "X Force", GAME_IS_SKELETON_MECHANICAL)
271GAME(1987,  xforce,  0,  techno,  techno, driver_device0,  ROT0,  "Tecnoplay", "X Force", GAME_MECHANICAL | GAME_NO_SOUND | GAME_IMPERFECT_KEYBOARD)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team