/* MrF - FCONTROL EXAMPLE Routine 1 -------------------------------- web: http://www.netyaroze-europe.com/~mrfrosty e-mail: j.t.rutherford@sms.ed.ac.uk Copyright - Mr.Frosty / Hex Heroes 1997 First Code : 18th June 1997 Last Updated : 20th January 1998 (v1:5) The FCONTROL routines provide controller handling routines -> This program illustrates how the FCONTROL routines can be called <- */ #include #include "../libs/fcont1_5.h" /* Uncomment this for NTSC (default is PAL) */ //#define NTSC /* Screen Parameters */ #define FRAME_X 512 #define FRAME_Y 240 #define ILACE_FLAG 0 #define GPUBUFF_FLAG 4 #define SCREEN_DITHER 0 #define VRAM_FLAG 0 #define FRAME_X8 (FRAME_X/8) #define FRAME_Y8 (FRAME_Y/8) #define OT_LENGTH 1 /* Variables and Structures */ GsOT world_ot[2]; GsOT_TAG world_ot_tag[2][1< Defined in //u_char FControllerConnected(u_char port); //u_char FControllerType(u_char port); //u_short FSPadRead(u_char port); //u_short FAPadRead(u_char port); //u_short FAJoyRead(u_char port); //u_char FAPadStick255 (u_char port, u_char byte); //u_char FAJoyStick255 (u_char port, u_char byte); /* Functions */ main() { /* Screen and Font Variables */ int active_buffer; int font_stream; /* Pad Setup */ FSetPortBuffers(); /* Screen and buffer setup */ #ifdef NTSC SetVideoMode(MODE_NTSC); #else SetVideoMode(MODE_PAL); #endif GsInitGraph(FRAME_X, FRAME_Y, ILACE_FLAG|GPUBUFF_FLAG, SCREEN_DITHER, VRAM_FLAG); GsDefDispBuff(0,0,0,FRAME_Y); /* (Double Buffered) OT information */ world_ot[0].length = OT_LENGTH; world_ot[0].org = world_ot_tag[0]; world_ot[1].length = OT_LENGTH; world_ot[1].org = world_ot_tag[1]; /* Open Font and text stream */ FntLoad(960, 256); font_stream = FntOpen(0, 8, FRAME_X, FRAME_Y, 0, (FRAME_X8 * FRAME_Y8)); for(;;) { active_buffer = GsGetActiveBuff(); GsClearOt(0, 0, &world_ot[active_buffer]); DrawSync(0); VSync(0); GsSwapDispBuff(); /* Put a screen wipe command into the OT, then activate the OT */ GsSortClear(0, 120, 60, &world_ot[active_buffer]); GsDrawOt(&world_ot[active_buffer]); /* Heading Text to Buffer */ FntPrint("%s\n%s\n%s\n%s\n\n", " fcontrol.h library example", " * Mr Frosty - 20th January 1998 *", " www.netyaroze-europe.com/-mrfrosty", " --------------------------------------------------------------"); /* Pad Printing to Buffer */ PortInfoPrint(PORT_ONE); FntPrint("\n"); PortInfoPrint(PORT_TWO); /* Transfer Text Buffer to Screen */ FntFlush(font_stream); }; return(0); } void PortInfoPrint(u_char port) { u_short contype_id; if(FControllerConnected(port)) { FntPrint(" Port %d: ", (port+1)); // (port+1) makes the call match the paintjob. contype_id=FControllerType(port); switch(contype_id) { case CONTYPE_NONE: FntPrint("no controller connected\n"); break; case CONTYPE_MOUSE: FntPrint("mouse connected\n"); break; case CONTYPE_NEGCON: FntPrint("neGcon connected\n"); break; case CONTYPE_STANDARD_PAD: FntPrint("standard pad connected\n"); StdPadInfoPrint(port); break; case CONTYPE_ANALOGUE_JOY: FntPrint("analogue joystick connected\n"); AnaJoyInfoPrint(port); break; case CONTYPE_ANALOGUE_PAD: FntPrint("analogue pad connected\n"); AnaPadInfoPrint(port); break; default: /* This(?) is unreliable - It only updates when a controller is connected */ FntPrint("unknown type (%d)\n", contype_id); }; } else FntPrint(" Port %d: no controller connected\n", port); } void StdPadInfoPrint(u_char port) { u_short fspadstatus = FSPadRead(port); FntPrint(" D-Pad : "); if (fspadstatus & SPADup) FntPrint("Up "); if (fspadstatus & SPADdown) FntPrint("Down "); if (fspadstatus & SPADleft) FntPrint("Left "); if (fspadstatus & SPADright) FntPrint("Right"); FntPrint("\n Buttons : "); if (fspadstatus & SPADtr) FntPrint("Triangle "); if (fspadstatus & SPADcr) FntPrint("Cross "); if (fspadstatus & SPADsq) FntPrint("Square "); if (fspadstatus & SPADci) FntPrint("Circle"); FntPrint("\n Shoulder: "); if (fspadstatus & SPADl1) FntPrint("L1 "); if (fspadstatus & SPADl2) FntPrint("L2 "); if (fspadstatus & SPADr1) FntPrint("R1 "); if (fspadstatus & SPADr2) FntPrint("R2"); FntPrint("\n Control : "); if (fspadstatus & SPADstart) FntPrint("Start "); if (fspadstatus & SPADselect) FntPrint("Select"); FntPrint("\n"); } void AnaJoyInfoPrint(u_char port) { u_short fajoystatus = FAJoyRead(port); FntPrint(" Buttons : "); if (fajoystatus & AJOYtr) FntPrint("Triangle "); if (fajoystatus & AJOYcr) FntPrint("Cross "); if (fajoystatus & AJOYsq) FntPrint("Square "); if (fajoystatus & AJOYci) FntPrint("Circle"); FntPrint("\n Shoulder: "); if (fajoystatus & AJOYl1) FntPrint("L1 "); if (fajoystatus & AJOYl2) FntPrint("L2 "); if (fajoystatus & AJOYr1) FntPrint("R1 "); if (fajoystatus & AJOYr2) FntPrint("R2"); FntPrint("\n Control : "); if (fajoystatus & AJOYstart) FntPrint("Start "); if (fajoystatus & AJOYselect) FntPrint("Select"); FntPrint("\n"); FntPrint(" Analogue: "); FntPrint("Lx=%d Ly=%d ", FAJoyStick255 (port, AJOYlx), FAJoyStick255 (port, AJOYly)); FntPrint("Rx=%d Ry=%d", FAJoyStick255 (port, AJOYrx), FAJoyStick255 (port, AJOYry)); FntPrint("\n"); } void AnaPadInfoPrint(u_char port) { u_short fapadstatus = FAPadRead(port); FntPrint(" D-Pad : "); if (fapadstatus & APADup) FntPrint("Up "); if (fapadstatus & APADdown) FntPrint("Down "); if (fapadstatus & APADleft) FntPrint("Left "); if (fapadstatus & APADright) FntPrint("Right"); FntPrint("\n Buttons : "); if (fapadstatus & APADtr) FntPrint("Triangle "); if (fapadstatus & APADcr) FntPrint("Cross "); if (fapadstatus & APADsq) FntPrint("Square "); if (fapadstatus & APADci) FntPrint("Circle"); FntPrint("\n Shoulder: "); if (fapadstatus & APADl1) FntPrint("L1 "); if (fapadstatus & APADl2) FntPrint("L2 "); if (fapadstatus & APADr1) FntPrint("R1 "); if (fapadstatus & APADr2) FntPrint("R2"); FntPrint("\n Control : "); if (fapadstatus & APADstart) FntPrint("Start "); if (fapadstatus & APADselect) FntPrint("Select"); FntPrint("\n"); FntPrint(" Analogue: "); FntPrint("L3x=%d L3y=%d ", FAPadStick255 (port, APADl3x), FAPadStick255 (port, APADl3y)); FntPrint("R3x=%d R3y=%d", FAPadStick255 (port, APADr3x), FAPadStick255 (port, APADr3y)); FntPrint("\n"); }