/* Module Development on Hold until R36 */

/* Joystick Functions for  Commander X-16 Computer *
 * Supports Keyboard, NES, and SNES Controllers    *
 *   A and B on Keyboard and SNES Controller and   *
 *   A, B, X, Y on SNES Controller are all         *
 *   mapped to the joystick button JOYB0           *
 * Individual button status and Controller Type    *
 *   are returned as extended results              */

/* Keyboard to NES Controller Mappings           *
 * Key: Ctrl Alt  Space Enter Up Down Left Right *
 * NES:  A    B  Select Start Up Down Left Right */

#define JYSTKS 2 //Number of Joysticks

//Joystick Result Bitmasks
#define JOYUP $08 //Up    
#define JOYDN $04 //Down  
#define JOYLF $02 //Left  
#define JOYRT $01 //Right 
#define JOYB0 $C0 //Button

//Extended Result Bitmasks
#define JOYBA $80 //A Button
#define JOYBB $40 //B Button
#define JOYSL $20 //Select
#define JOYST $10 //Start
#define JOYBL $08 //Left Button
#define JOYBR $04 //Right Button
#define JOYBX $02 //X Button
#define JOYBY $01 //Y Button

//Controller Types
#define JOYKBD $00 //Keyboard (NES Emulation)
#define JOYNES $01 //NES Controller
#define JOYSNS $02 //SNS Controller

struct joysts {char btnsts, extsts, status;};
struct joysts joy0, joy1;

/* Read Joystick Status                *
 * Args: j = Joystick Number           *
 * Returns: char j = Joystick Status   *
 *                   $FF = Not Present *
 *          char x = Extended Status   *
 *          char t = Controller Type   */
char joystk(); 

/* Get Joystick Raw Status                    *
 * X16 Specific System Routine                *
 * Args: j = Joystick Number                  *
 * Returns: char j = Joystick Raw Status Bits *
 *          char x = Extended Raw Status Bits *
 *          char t = Joystick Status          *
 *                   $FF = Not Present        */
char joyget();

/* Query Joysticks and Save State          *
 * X16 Specific System Routine             *
 * Called by the default interrupt handler */
void joyscn();

