Previous 15994 Revisions Next

r9529 Saturday 6th November, 2010 at 14:38:29 UTC by Wilbert Pol
[PHUNSY] Hacked in keyboard support. Fixed character selection.
[src/mess/drivers]phunsy.c

src/mess/drivers/phunsy.c
r9528r9529
1919   phunsy_state(running_machine &machine, const driver_device_config_base &config)
2020      : driver_device(machine, config) { }
2121
22   UINT8 *video_ram;
23   UINT8   data_out;
24   UINT8   keyboard_input;
22   UINT8      *video_ram;
23   UINT8      data_out;
24   UINT8      keyboard_input;
25   UINT16      old_in[3];
2526   emu_timer   *kb_timer;
2627};
2728
r9528r9529
5253   {
5354      state->keyboard_input |= 0x80;
5455   }
56
5557   /* b3 - speaker output */
58   if ( data & 0x08 )
59   {
60   }
61
5662   /* b4 - -REV MDCR output */
5763   /* b5 - -FWD MDCR output */
5864   /* b6 - -WCD MDCR output */
r9528r9529
109115/* Input ports */
110116INPUT_PORTS_START( phunsy )
111117   PORT_START( "IN0" )
112   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_NAME("A")
118   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_NAME("1")
119   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_NAME("2")
120   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_NAME("3")
121   PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_NAME("4")
122   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_NAME("5")
123   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_NAME("6")
124   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_NAME("7")
125   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_NAME("8")
126   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_NAME("9")
127   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_NAME("0")
128   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("Spacebar")
129   PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Enter")
130   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("-")
131
132   PORT_START( "IN1" )
133   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_NAME("A")
134   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_NAME("B")
135   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_NAME("C")
136   PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_NAME("D")
137   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_NAME("E")
138   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_NAME("F")
139   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_NAME("G")
140   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_NAME("H")
141   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_NAME("I")
142   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_NAME("J")
143   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_NAME("K")
144   PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_NAME("L")
145   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_NAME("M")
146   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_NAME("N")
147   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_NAME("O")
148   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_NAME("P")
149
150   PORT_START( "IN2" )
151   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Q")
152   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_NAME("R")
153   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_NAME("S")
154   PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_NAME("T")
155   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_NAME("U")
156   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_NAME("V")
157   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_NAME("W")
158   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("X")
159   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_NAME("Y")
160   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_NAME("Z")
113161INPUT_PORTS_END
114162
115163
116164static TIMER_CALLBACK( phunsy_kb_scan )
117165{
166   static const char *ports[3] = { "IN0", "IN1", "IN2" };
167   static const UINT8 kb_decode[3][16] =
168   {
169      {
170         0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
171         0x39, 0x30, 0x20, 0x0D, 0x2D, 0xFF, 0xFF, 0xFF
172      },
173      {
174         0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
175         0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50
176      },
177      {
178         0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
179         0x59, 0x5a, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
180      },
181   };
118182   phunsy_state *state = machine->driver_data<phunsy_state>();
119   UINT8 data;
120183
121   data = input_port_read( machine, "IN0" );
184   for ( int j = 0; j < 3; j++ )
185   {
186      UINT16 x = 1;
187      UINT16 data = input_port_read( machine, ports[j] );
122188
123   if ( data & 0x01 )
124   {
125      state->keyboard_input = 0x61;
189      for ( int i = 0; i < 16; i++ )
190      {
191         /* Key pressed? */
192         if ( ! ( state->old_in[j] & x ) && ( data & x ) )
193         {
194            if ( kb_decode[j][i] != 0xFF )
195               state->keyboard_input = kb_decode[j][i];
196         }
197         x <<= 1;
198      }
199      state->old_in[j] = data;
126200   }
127201}
128202
r9528r9529
140214   phunsy_state *state = machine->driver_data<phunsy_state>();
141215
142216   memory_set_bankptr( machine, "bank2", memory_region(machine, "ram_4000") );
217
143218   state->keyboard_input = 0xFF;
219   state->old_in[0] = 0;
220   state->old_in[1] = 0;
221   state->old_in[2] = 0;
144222
145223   timer_adjust_periodic( state->kb_timer, machine->primary_screen->frame_period(), 0, machine->primary_screen->frame_period() );
146224}
r9528r9529
204282         else
205283         {
206284            /* ASCII mode */
285            if ( ! ( c & 0x20 ) )
286            {
287               c ^= 0x40;
288            }
289
207290            for ( int i = 0; i < 8; i++ )
208291            {
209292               UINT16 *p = BITMAP_ADDR16( bitmap, h * 8 + i, w * 6 );

Previous 15994 Revisions Next


© 1998-2018 The MESS Team