joytest/joytest/main.c

160 lines
3.4 KiB
C

/*
* main.c
* joytest
*
* Created by Jeremy Rand on 2020-06-02.
* Copyright (c) 2020 Jeremy Rand. All rights reserved.
*
*/
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
#include <conio.h>
#include <joystick.h>
#include <apple2.h>
#include "drivers/a2_joystick_drv.h"
// Defines
#define SW_VERSION "0.6"
// Implementation
void drawJoystick(uint8_t joyDriverMask)
{
revers(JOY_BTN_1(joyDriverMask));
cputcxy(9, 11, '1');
revers(JOY_BTN_2(joyDriverMask));
cputcxy(11, 11, '2');
joyDriverMask &= (JOY_UP_MASK | JOY_DOWN_MASK | JOY_LEFT_MASK | JOY_RIGHT_MASK);
revers(joyDriverMask == (JOY_UP_MASK | JOY_LEFT_MASK));
cputsxy(3, 5, "UL");
revers(joyDriverMask == JOY_UP_MASK);
cputcxy(6, 5, 'U');
revers(joyDriverMask == (JOY_UP_MASK | JOY_RIGHT_MASK));
cputsxy(8, 5, "UR");
revers(joyDriverMask == JOY_LEFT_MASK);
cputcxy(4, 7, 'L');
revers(joyDriverMask == 0);
cputcxy(6, 7, 'C');
revers(joyDriverMask == JOY_RIGHT_MASK);
cputcxy(8, 7, 'R');
revers(joyDriverMask == (JOY_DOWN_MASK | JOY_LEFT_MASK));
cputsxy(3, 9, "DL");
revers(joyDriverMask == JOY_DOWN_MASK);
cputcxy(6, 9, 'D');
revers(joyDriverMask == (JOY_DOWN_MASK | JOY_RIGHT_MASK));
cputsxy(8, 9, "DR");
revers(false);
}
void pollJoystick(void)
{
uint8_t joystickCount;
uint8_t joyDriverMask = 0x00;
uint8_t joystickNum = 0;
char ch;
joystickCount = joy_count();
clrscr();
cputsxy(11, 0, "CC65 JOYSTICK TEST");
cputsxy(11, 1, "------------------");
if (joystickCount == 0)
{
cputsxy(0, 3, "NO JOYSTICKS FOUND");
cputsxy(0, 4, "PRESS ANY KEY TO QUIT");
while (!kbhit())
;
cgetc();
return;
}
cputsxy(0, 3, "JOYSTICK NUM:");
cputsxy(0, 11, "BUTTONS:");
if (joystickCount > 1)
{
gotoxy(0, 22);
cprintf("PRESS 1%c%u TO SELECT JOYSTICK NUMBER",
(joystickCount > 2 ? '-' : '/'), joystickCount);
}
cputsxy(0, 23, "PRESS Q TO QUIT");
cputsxy(30, 23, "(VER " SW_VERSION ")");
do {
joyDriverMask = joy_read(joystickNum);
drawJoystick(joyDriverMask);
cputcxy(14, 3, '1' + joystickNum);
if (kbhit())
{
ch = cgetc();
switch (ch)
{
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
{
uint8_t newJoystickNum = (ch - '1');
if (joystickCount < 2)
break;
if (newJoystickNum >= joystickCount)
break;
if (newJoystickNum == joystickNum)
break;
joystickNum = (ch - '1');
break;
}
case 'q':
case 'Q':
case 0x1b:
return;
}
}
} while (1);
}
int main(void)
{
joy_install(&a2_joystick_drv);
pollJoystick();
joy_uninstall();
return 0;
}