Make Atari joystick test for A2560U.
This commit is contained in:
parent
627c16463b
commit
4bfc669dbc
|
@ -27,7 +27,9 @@
|
||||||
#include "simpleio.h"
|
#include "simpleio.h"
|
||||||
#include "syscalls.h"
|
#include "syscalls.h"
|
||||||
#include "sys_general.h"
|
#include "sys_general.h"
|
||||||
|
// TODO: the CLI should use system calls rather than depend on hardware directly
|
||||||
#include "uart_reg.h"
|
#include "uart_reg.h"
|
||||||
|
#include "gabe_reg.h"
|
||||||
#include "vicky_general.h"
|
#include "vicky_general.h"
|
||||||
|
|
||||||
#if MODEL == MODEL_FOENIX_A2560K
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
@ -87,6 +89,56 @@ short cli_test_ps2(short channel, int argc, const char * argv[]) {
|
||||||
* Test the joystick ports
|
* Test the joystick ports
|
||||||
*/
|
*/
|
||||||
short cli_test_joystick(short channel, int argc, const char * argv[]) {
|
short cli_test_joystick(short channel, int argc, const char * argv[]) {
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560U
|
||||||
|
volatile uint16_t * const atari_db9 = (uint16_t *)0xb00500;
|
||||||
|
uint16_t current,previous;
|
||||||
|
//const char msg[] = "Displays UPLR012 as Up/Down/Left/Right/Button0/Button1/Button2\nPress ESC to exit.\n";
|
||||||
|
//sys_chan_write(channel, msg, strlen(msg));
|
||||||
|
|
||||||
|
current = previous = ~*atari_db9;
|
||||||
|
|
||||||
|
// CAVEAT: this tests the hardware, not the MCP Device driver.
|
||||||
|
while (sys_kbd_scancode() != 0x01) {
|
||||||
|
if ((current = ~*atari_db9) == previous)
|
||||||
|
continue;
|
||||||
|
else {
|
||||||
|
char state[40];
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
if ((current & 0x00ff) != (previous & 0x00ff)) {
|
||||||
|
state[i] = '\0';
|
||||||
|
strcat(state, "JOY1:");
|
||||||
|
i = strlen(state);
|
||||||
|
if (current & JOY1_UP) state[i++] = 'U';
|
||||||
|
if (current & JOY1_DOWN) state[i++] = 'D';
|
||||||
|
if (current & JOY1_LEFT) state[i++] = 'L';
|
||||||
|
if (current & JOY1_RIGHT) state[i++] = 'R';
|
||||||
|
if (current & JOY1_BTN0) state[i++] = '0';
|
||||||
|
if (current & JOY1_BTN1) state[i++] = '1';
|
||||||
|
if (current & JOY1_BTN2) state[i++] = '2';
|
||||||
|
state[i++] = ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((current & 0xff00) != (previous & 0xff00)) {
|
||||||
|
state[i] = '\0';
|
||||||
|
strcat(state, "JOY2:");
|
||||||
|
i = strlen(state);
|
||||||
|
if (current & JOY2_UP) state[i++] = 'U';
|
||||||
|
if (current & JOY2_DOWN) state[i++] = 'D';
|
||||||
|
if (current & JOY2_LEFT) state[i++] = 'L';
|
||||||
|
if (current & JOY2_RIGHT) state[i++] = 'R';
|
||||||
|
if (current & JOY2_BTN0) state[i++] = '0';
|
||||||
|
if (current & JOY2_BTN1) state[i++] = '1';
|
||||||
|
if (current & JOY2_BTN2) state[i++] = '2';
|
||||||
|
}
|
||||||
|
|
||||||
|
state[i++] = '\n';
|
||||||
|
state[i] = '\0';
|
||||||
|
sys_chan_write(channel, state, strlen(state));
|
||||||
|
previous = current;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
char message[80];
|
char message[80];
|
||||||
volatile unsigned int * joystick_port = (volatile unsigned int *)0xFEC00500;
|
volatile unsigned int * joystick_port = (volatile unsigned int *)0xFEC00500;
|
||||||
volatile unsigned int * game_ctrl_port = (volatile unsigned int *)0xFEC00504;
|
volatile unsigned int * game_ctrl_port = (volatile unsigned int *)0xFEC00504;
|
||||||
|
@ -109,7 +161,7 @@ short cli_test_joystick(short channel, int argc, const char * argv[]) {
|
||||||
|
|
||||||
scancode = sys_kbd_scancode();
|
scancode = sys_kbd_scancode();
|
||||||
} while (sys_chan_ioctrl(channel, 5, 0, 0) == 0);
|
} while (sys_chan_ioctrl(channel, 5, 0, 0) == 0);
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,22 @@
|
||||||
#define GABE_CPU_SPEED 0x0F00
|
#define GABE_CPU_SPEED 0x0F00
|
||||||
#define GABE_CPU_ID 0xF000 // 0000 = MC68SEC000 @ 20MHz
|
#define GABE_CPU_ID 0xF000 // 0000 = MC68SEC000 @ 20MHz
|
||||||
|
|
||||||
|
#define GAVIN_ATARI_JOYSTICK ((volatile unsigned short *)0x00B00500)
|
||||||
|
#define JOY1_UP 0x0001
|
||||||
|
#define JOY1_DOWN 0x0002
|
||||||
|
#define JOY1_LEFT 0x0004
|
||||||
|
#define JOY1_RIGHT 0x0008
|
||||||
|
#define JOY1_BTN0 0x0010
|
||||||
|
#define JOY1_BTN1 0x0040
|
||||||
|
#define JOY1_BTN2 0x0080
|
||||||
|
#define JOY2_UP 0x0100
|
||||||
|
#define JOY2_DOWN 0x0200
|
||||||
|
#define JOY2_LEFT 0x0400
|
||||||
|
#define JOY2_RIGHT 0x0800
|
||||||
|
#define JOY2_BTN0 0x1000
|
||||||
|
#define JOY2_BTN1 0x4000
|
||||||
|
#define JOY2_BTN2 0x8000
|
||||||
|
|
||||||
#define FPGA_DATE_YEAR ((volatile unsigned short *)0x00B40030) // YYYY
|
#define FPGA_DATE_YEAR ((volatile unsigned short *)0x00B40030) // YYYY
|
||||||
#define FPGA_DATE_MONTHDAY ((volatile unsigned short *)0x00B40032) // MMDD
|
#define FPGA_DATE_MONTHDAY ((volatile unsigned short *)0x00B40032) // MMDD
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue