Previous 15994 Revisions Next

r898 Friday 31st August, 2007 at 16:39:58 UTC by Wilbert Pol
[A2600] Enabled automatic input device selection.
[docs]messnew.txt
[src/mess/drivers]a2600.c

src/mess/drivers/a2600.c
r897r898
2020#define MASTER_CLOCK_PAL   3546894
2121#define CATEGORY_SELECT      16
2222
23/* Some defines for the naming of the controller ports and the controllers */
24#define   STR_LEFT_CONTROLLER      "Left Controller"
25#define STR_RIGHT_CONTROLLER   "Right Controller"
26#define STR_PADDLES            "Paddles"
27#define STR_DRIVING            "Driving"
28#define STR_KEYPAD            "Keypad"
29#define STR_LIGHTGUN         "Lightgun"
30#define STR_BOOSTERGRIP         "Booster Grip"
31#define STR_CX22TRAKBALL      "CX-22 Trak-Ball"
32#define STR_CX80TRAKBALL      "CX-80 Trak-Ball (TB Mode) / AtariST Mouse"
33#define STR_AMIGAMOUSE         "Amiga Mouse"
34#define STR_KIDVID            "KidVid Voice Module"
35
2336enum
2437{
2538   mode2K,
r897r898
10701083   static const UINT8 driving_lookup[4] = { 0x00, 0x02, 0x03, 0x01 };
10711084   UINT8 val = 0;
10721085
1073   /* Left controller port */
1086   /* Left controller port PINs 1-4 ( 4321 ) */
10741087   switch( readinputport(9) / CATEGORY_SELECT ) {
10751088   case 0x00:  /* Joystick */
10761089   case 0x05:   /* Joystick w/Boostergrip */
r897r898
10831096      val |= 0xC0;
10841097      val |= ( driving_lookup[ ( readinputport(12) & 0x18 ) >> 3 ] << 4 );
10851098      break;
1099   case 0x06:   /* Trakball CX-22 */
1100   case 0x07:   /* Trakball CX-80 / ST mouse */
1101   case 0x09:   /* Amiga mouse */
10861102   default:
10871103      val |= 0xF0;
10881104      break;
10891105   }
10901106
1091   /* Right controller port */
1107   /* Right controller port PINs 1-4 ( 4321 ) */
10921108   switch( readinputport(9) % CATEGORY_SELECT ) {
10931109   case 0x00:   /* Joystick */
10941110   case 0x05:   /* Joystick w/Boostergrip */
r897r898
11011117      val |= 0x0C;
11021118      val |= ( driving_lookup[ ( readinputport(13) & 0x18 ) >> 3 ] );
11031119      break;
1120   case 0x06:   /* Trakball CX-22 */
1121   case 0x07:   /* Trakball CX-80 / ST mouse */
1122   case 0x09:   /* Amiga mouse */
11041123   default:
11051124      val |= 0x0F;
11061125      break;
r897r898
11521171   int i;
11531172
11541173   switch( offset ) {
1155   case 0:
1174   case 0:   /* Left controller port PIN 5 */
11561175      switch ( readinputport(9) / CATEGORY_SELECT ) {
11571176      case 0x00:   /* Joystick */
11581177         return TIA_INPUT_PORT_ALWAYS_OFF;
r897r898
11751194         return TIA_INPUT_PORT_ALWAYS_OFF;
11761195      }
11771196      break;
1178   case 1:
1197   case 1:   /* Right controller port PIN 5 */
11791198      switch ( readinputport(9) / CATEGORY_SELECT ) {
11801199      case 0x00:   /* Joystick */
11811200         return TIA_INPUT_PORT_ALWAYS_OFF;
r897r898
11981217         return TIA_INPUT_PORT_ALWAYS_OFF;
11991218      }
12001219      break;
1201   case 2:
1220   case 2:   /* Left controller port PIN 9 */
12021221      switch ( readinputport(9) % CATEGORY_SELECT ) {
12031222      case 0x00:   /* Joystick */
12041223         return TIA_INPUT_PORT_ALWAYS_OFF;
r897r898
12211240         return TIA_INPUT_PORT_ALWAYS_OFF;
12221241      }
12231242      break;
1224   case 3:
1243   case 3:   /* Right controller port PIN 9 */
12251244      switch ( readinputport(9) % CATEGORY_SELECT ) {
12261245      case 0x00:   /* Joystick */
12271246         return TIA_INPUT_PORT_ALWAYS_OFF;
r897r898
12441263         return TIA_INPUT_PORT_ALWAYS_OFF;
12451264      }
12461265      break;
1247   case 4:
1266   case 4:   /* Left controller port PIN 6 */
12481267      switch ( readinputport(9) / CATEGORY_SELECT ) {
12491268      case 0x00:   /* Joystick */
12501269      case 0x05:   /* Joystick w/Boostergrip */
r897r898
12641283            }
12651284         }
12661285         return 0xff;
1286      case 0x06:   /* Trakball CX-22 */
1287         return readinputport(4) << 4;
12671288      default:
12681289         return 0xff;
12691290      }
12701291      break;
1271   case 5:
1292   case 5:   /* Right controller port PIN 6 */
12721293      switch ( readinputport(9) % CATEGORY_SELECT ) {
12731294      case 0x00:   /* Joystick */
12741295      case 0x05:   /* Joystick w/Boostergrip */
r897r898
12881309            }
12891310         }
12901311         return 0xff;
1312      case 0x06:   /* Trakball CX-22 */
1313         return readinputport(5) << 4;
12911314      default:
12921315         return 0xff;
12931316      }
r897r898
13981421   current_reset_bank_counter = 0xFF;
13991422}
14001423
1424static void set_category_value( const char* cat, const char *cat_selection ) {
1425   input_port_entry   *cat_in = NULL;
1426   input_port_entry   *in;
1427
1428   for( in = Machine->input_ports; in->type != IPT_END; in++ ) {
1429      if ( in->type == IPT_CATEGORY_NAME && ! mame_stricmp( cat, input_port_name(in) ) ) {
1430         cat_in = in;
1431      }
1432      if ( cat_in && in->type == IPT_CATEGORY_SETTING && ! mame_stricmp( cat_selection, input_port_name(in) ) ) {
1433         cat_in->default_value = in->default_value;
1434         return;
1435      }
1436   }
1437}
1438
1439static void set_controller( const char *controller, unsigned int selection ) {
1440   /* Defaulting to only joystick when joysstick and paddle are set for now... */
1441   if ( selection == JOYS + PADD )
1442      selection = JOYS;
1443
1444   switch( selection ) {
1445   case JOYS:   set_category_value( controller, "Joystick" ); break;
1446   case PADD:   set_category_value( controller, STR_PADDLES ); break;
1447   case KEYP:   set_category_value( controller, STR_KEYPAD ); break;
1448   case LGUN:   set_category_value( controller, STR_LIGHTGUN ); break;
1449   case INDY:   set_category_value( controller, STR_DRIVING ); break;
1450   case BOOS:   set_category_value( controller, STR_BOOSTERGRIP ); break;
1451   case KVID:   set_category_value( controller, STR_KIDVID ); break;
1452   case CMTE:   break;
1453   case MLNK:   break;
1454   case AMSE:   set_category_value( controller, STR_AMIGAMOUSE ); break;
1455   case CX22:   set_category_value( controller, STR_CX22TRAKBALL ); break;
1456   case CX80:   set_category_value( controller, STR_CX80TRAKBALL ); break;
1457   }
1458}
1459
14011460static MACHINE_RESET( a2600 )
14021461{
14031462
14041463   int chip = 0xFF;
14051464   unsigned long controltemp;
1406   unsigned int controlleft,controlright;
14071465   unsigned char snowwhite[] = { 0x10, 0xd0, 0xff, 0xff }; // Snow White Proto
14081466
14091467   current_reset_bank_counter++;
14101468
14111469   /* auto-detect special controllers */
1412
14131470   controltemp = detect_2600controllers();
1414   controlleft = controltemp >> 16;
1415   controlright = controltemp & 0xffff;
1416   // todo setup all the PORT_ stuff here
1471   set_controller( STR_LEFT_CONTROLLER, controltemp >> 16 );
1472   set_controller( STR_RIGHT_CONTROLLER, controltemp & 0xFFFF );
14171473
14181474   /* auto-detect bank mode */
14191475
r897r898
17311787   PORT_START /* [3] */
17321788   PORT_BIT( 0xff, 0x80, IPT_PADDLE) PORT_SENSITIVITY(40) PORT_KEYDELTA(10) PORT_CENTERDELTA(0) PORT_MINMAX(0,255) PORT_CATEGORY(21) PORT_PLAYER(4) PORT_REVERSE PORT_CODE_DEC(KEYCODE_4_PAD) PORT_CODE_INC(KEYCODE_6_PAD)
17331789
1734   PORT_START /* [4] */
1790   PORT_START /* [4] left port button(s) */
1791//   PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_CATEGORY(15) PORT_PLAYER(1)
1792//   PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_CATEGORY(15) PORT_PLAYER(1)
1793   PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_CATEGORY(15) PORT_PLAYER(1)
17351794   PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_CATEGORY(12) PORT_PLAYER(1)
17361795   PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_CATEGORY(10) PORT_PLAYER(1)
17371796   PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_CATEGORY(10) PORT_PLAYER(1)
17381797   PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_CATEGORY(10) PORT_PLAYER(1)
17391798
1740   PORT_START /* [5] */
1799   PORT_START /* [5] right port button(s) */
1800//   PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_CATEGORY(25) PORT_PLAYER(2)
1801//   PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_CATEGORY(25) PORT_PLAYER(2)
1802   PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_CATEGORY(25) PORT_PLAYER(2)
17411803   PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_CATEGORY(22) PORT_PLAYER(2)
17421804   PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_CATEGORY(20) PORT_PLAYER(2)
17431805   PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_CATEGORY(20) PORT_PLAYER(2)
r897r898
17801842   PORT_DIPSETTING(    0x00, "B" )
17811843
17821844   PORT_START /* [9] */
1783   PORT_CATEGORY_CLASS( 0xf0, 0x00, "Left Controller" )
1845   PORT_CATEGORY_CLASS( 0xf0, 0x00, STR_LEFT_CONTROLLER )
17841846   PORT_CATEGORY_ITEM(    0x00, DEF_STR( Joystick ), 10 )
1785   PORT_CATEGORY_ITEM(    0x10, "Paddles", 11 )
1786   PORT_CATEGORY_ITEM(    0x20, "Driving", 12 )
1787   PORT_CATEGORY_ITEM(    0x30, "Keypad", 13 )
1788   //PORT_CATEGORY_ITEM(    0x40, "Lightgun", 14 )
1789   PORT_CATEGORY_ITEM(    0x50, "Booster Grip", 10 )
1790   //PORT_CATEGORY_ITEM(    0x60, "CX-22 Trak-Ball", 15 )
1791   //PORT_CATEGORY_ITEM(    0x70, "CX-80 Trak-Ball (TB Mode) / AtariST Mouse", 16 )
1847   PORT_CATEGORY_ITEM(    0x10, STR_PADDLES, 11 )
1848   PORT_CATEGORY_ITEM(    0x20, STR_DRIVING, 12 )
1849   PORT_CATEGORY_ITEM(    0x30, STR_KEYPAD, 13 )
1850   //PORT_CATEGORY_ITEM(    0x40, STR_LIGHTGUN, 14 )
1851   PORT_CATEGORY_ITEM(    0x50, STR_BOOSTERGRIP, 10 )
1852   //PORT_CATEGORY_ITEM(    0x60, STR_CX22TRAKBALL, 15 )
1853   //PORT_CATEGORY_ITEM(    0x70, STR_CX80TRAKBALL, 15 )
17921854   //PORT_CATEGORY_ITEM(    0x80, "CX-80 Trak-Ball (JS Mode)", 17 )
1793   //PORT_CATEGORY_ITEM(    0x90, "Amiga Mouse", 18 )
1794   PORT_CATEGORY_CLASS( 0x0f, 0x00, "Right Controller" )
1855   //PORT_CATEGORY_ITEM(    0x90, STR_AMIGAMOUSE, 15 )
1856   PORT_CATEGORY_CLASS( 0x0f, 0x00, STR_RIGHT_CONTROLLER )
17951857   PORT_CATEGORY_ITEM(    0x00, DEF_STR( Joystick ), 20 )
1796   PORT_CATEGORY_ITEM(    0x01, "Paddles", 21 )
1797   PORT_CATEGORY_ITEM(    0x02, "Driving", 22 )
1798   PORT_CATEGORY_ITEM(    0x03, "Keypad", 23 )
1799   //PORT_CATEGORY_ITEM(    0x04, "Lightgun", 24 )
1800   PORT_CATEGORY_ITEM(    0x05, "Booster Grip", 20 )
1801   //PORT_CATEGORY_ITEM(    0x06, "CX-22 Trak-Ball", 25 )
1802   //PORT_CATEGORY_ITEM(    0x07, "CX-80 Trak-Ball (TB Mode) / AtariST Mouse", 26 )
1858   PORT_CATEGORY_ITEM(    0x01, STR_PADDLES, 21 )
1859   PORT_CATEGORY_ITEM(    0x02, STR_DRIVING, 22 )
1860   PORT_CATEGORY_ITEM(    0x03, STR_KEYPAD, 23 )
1861   //PORT_CATEGORY_ITEM(    0x04, STR_LIGHTGUN, 24 )
1862   PORT_CATEGORY_ITEM(    0x05, STR_BOOSTERGRIP, 20 )
1863   //PORT_CATEGORY_ITEM(    0x06, STR_CX22TRAKBALL, 25 )
1864   //PORT_CATEGORY_ITEM(    0x07, STR_CX80TRAKBALL, 25 )
18031865   //PORT_CATEGORY_ITEM(    0x08, "CX-80 Trak-Ball (JS Mode)", 27 )
1804   //PORT_CATEGORY_ITEM(    0x09, "Amiga Mouse", 28 )
1805   PORT_CATEGORY_ITEM(    0x0a, "KidVid Voice Module", 30 )
1866   //PORT_CATEGORY_ITEM(    0x09, STR_AMIGAMOUSE, 25 )
1867   PORT_CATEGORY_ITEM(    0x0a, STR_KIDVID, 30 )
18061868   //PORT_CATEGORY_ITEM(    0x0b, "Save Key", 31 )
18071869
18081870   PORT_START   /* [10] left keypad */
r897r898
18391901   PORT_START   /* [13] right driving controller */
18401902   PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_CATEGORY(22) PORT_SENSITIVITY(40) PORT_KEYDELTA(5) PORT_PLAYER(2)
18411903
1842//   PORT_START   /* [14] left light gun X */
1904   PORT_START   /* [14] left light gun X */
18431905//   PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CATEGORY(14) PORT_CROSSHAIR( X, 1.0, 0.0, 0 ) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(1)
18441906
1845//   PORT_START   /* [15] left light gun Y */
1907   PORT_START   /* [15] left light gun Y */
18461908//   PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CATEGORY(14) PORT_CROSSHAIR( Y, 1.0, 0.0, 0 ) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(1)
18471909
1848//   PORT_START   /* [16] right light gun X */
1910   PORT_START   /* [16] right light gun X */
18491911//   PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CATEGORY(24) PORT_CROSSHAIR( X, 1.0, 0.0, 0 ) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(2)
18501912
1851//   PORT_START   /* [17] right light gun Y */
1913   PORT_START   /* [17] right light gun Y */
18521914//   PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CATEGORY(24) PORT_CROSSHAIR( Y, 1.0, 0.0, 0 ) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(2)
1915
1916   PORT_START   /* [18] left trak ball X */
1917   PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_CATEGORY(15) PORT_SENSITIVITY(40) PORT_KEYDELTA(5) PORT_PLAYER(1)
1918
1919   PORT_START   /* [19] left trak ball Y */
1920   PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_CATEGORY(15) PORT_SENSITIVITY(40) PORT_KEYDELTA(5) PORT_PLAYER(1)
1921
1922   PORT_START   /* [20]   right trak ball X */
1923   PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_CATEGORY(25) PORT_SENSITIVITY(40) PORT_KEYDELTA(5) PORT_PLAYER(2)
1924
1925   PORT_START   /* [21] right trak ball Y */
1926   PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_CATEGORY(25) PORT_SENSITIVITY(40) PORT_KEYDELTA(5) PORT_PLAYER(2)
1927
18531928INPUT_PORTS_END
18541929
18551930
docs/messnew.txt
r897r898
1818
1919- [AMSTRAD] Palette fix.  [Barry Rodewald]
2020
21- [A2600] Added automatic input device selection.  [Cowering & Wilbert Pol]
22
2123- [CPCPLUS] Fixed palette regression from 0.106.  [Barry Rodewald]
2224
2325- [MK1] Fixed interrupt issues and re-enabled driver.  [Wilbert Pol]

Previous 15994 Revisions Next


© 1998-2018 The MESS Team