Working Joypad support, and rejiggered keyboard inputs

This commit is contained in:
dwsJason 2019-09-08 16:45:23 -04:00
parent 897ab34451
commit 878dda2444
3 changed files with 160 additions and 79 deletions

View File

@ -22,7 +22,7 @@ paddle0 start ASMCODE
ds 2
paddle1 entry
ds 2
paddle_button_0 entry
paddle_button0 entry
ds 2
ReadPaddles entry
@ -37,7 +37,7 @@ ReadPaddles entry
lda >$E0C061
and #$0080
sta paddle_button_0
sta paddle_button0
plb
rtl
@ -55,7 +55,11 @@ ReadPaddles entry
* Return: X=JoyX, Y=JoyY
GetJoyXY start ASMCODE
php ;Save irq & mx reg size
sep #$34 ;sei & 8-bit mx
sep #$34 ;sei & 8-bit mx
longa off
longi off
phd ;Save DPage
pea $C000 ;DP to I/O
pld ;DP=$C000

View File

@ -17,6 +17,10 @@ segment "screen";
extern char joys_lz4;
#define J_KEY 0x26
#define K_KEY 0x28
extern U16 bUseJoy;
/*
* Display (J)oystick or (K)eyboard screen
@ -26,8 +30,10 @@ extern char joys_lz4;
U8
screen_joykey(void)
{
static U8 seq = 0;
static U8 wait = 0;
static U16 seq = 0;
static U16 wait = 0;
U16 bChosen = 0;
if (seq == 0) {
sysvid_clearPalette();
@ -42,26 +48,24 @@ screen_joykey(void)
seq = 1;
}
switch (seq) {
case 1: /* wait */
if (wait++ > 0x2) {
seq = 2;
wait = 0;
}
break;
case 2: /* wait */
if (wait++ > 0x20) {
seq = 99;
wait = 0;
}
}
if (control_status & CONTROL_EXIT) /* check for exit request */
return SCREEN_EXIT;
#if 0
if (seq == 99) { /* we're done */
if (KeyArray[ J_KEY ])
{
// Choose JoyStick
bUseJoy = 1;
bChosen = 1;
}
if (KeyArray[ K_KEY ])
{
// Choose Keyboard
bUseJoy = 0;
bChosen = 1;
}
if (bChosen) { /* we're done */
sysvid_clear();
sysvid_setGamePalette();
sysvid_clearPalette();
@ -70,9 +74,9 @@ screen_joykey(void)
PresentSCB();
PresentFrameBuffer();
seq = 0;
wait = 0;
return SCREEN_DONE;
}
#endif
return SCREEN_RUNNING;
}

View File

@ -70,6 +70,12 @@ extern U16 paddle_button0;
U16 bUseJoy = 0;
#define TOLERANCE 48
#define JOY_LEFT (128-TOLERANCE)
#define JOY_RIGHT (128+TOLERANCE)
#define JOY_UP (128-TOLERANCE)
#define JOY_DOWN (128+TOLERANCE)
#endif
/*
@ -105,71 +111,138 @@ processEvent()
control_status = 0;
// ADB Keyboard Driver
if (KeyArray[ LARROW ])
if (bUseJoy)
{
control_status |= CONTROL_LEFT;
if (!(control_last & CONTROL_LEFT))
ReadPaddles();
if (paddle0 <= JOY_LEFT)
{
control_last |= CONTROL_LEFT;
KeyArray[ RARROW ] = 0;
control_status |= CONTROL_LEFT;
if (!(control_last & CONTROL_LEFT))
control_last |= CONTROL_LEFT;
}
else
{
control_last &= ~CONTROL_LEFT;
}
if (paddle0 >= JOY_RIGHT)
{
control_status |= CONTROL_RIGHT;
if (!(control_last & CONTROL_RIGHT))
control_last |= CONTROL_RIGHT;
}
else
{
control_last &= ~CONTROL_RIGHT;
}
if (paddle1 <= JOY_UP)
{
control_status |= CONTROL_UP;
if (!(control_last & CONTROL_UP))
control_last |= CONTROL_UP;
}
else
{
control_last &= ~CONTROL_UP;
}
if (paddle1 >= JOY_DOWN)
{
control_status |= CONTROL_DOWN;
if (!(control_last & CONTROL_DOWN))
control_last |= CONTROL_DOWN;
}
else
{
control_last &= ~CONTROL_DOWN;
}
if (paddle_button0 >= 128)
{
control_status |= CONTROL_FIRE;
if (!(control_last & CONTROL_FIRE))
{
control_last |= CONTROL_FIRE;
}
}
else
{
control_last &= ~CONTROL_FIRE;
}
}
else
{
control_last &= ~CONTROL_LEFT;
}
if (KeyArray[ RARROW ])
{
control_status |= CONTROL_RIGHT;
if (!(control_last & CONTROL_RIGHT))
// ADB Keyboard Driver
if (KeyArray[ A_KEY ] || KeyArray[ J_KEY ])
{
control_last |= CONTROL_RIGHT;
KeyArray[ LARROW ] = 0;
control_status |= CONTROL_LEFT;
if (!(control_last & CONTROL_LEFT))
{
control_last |= CONTROL_LEFT;
KeyArray[ D_KEY ] = 0;
KeyArray[ L_KEY ] = 0;
}
}
else
{
control_last &= ~CONTROL_LEFT;
}
if (KeyArray[ D_KEY ] || KeyArray[ L_KEY ])
{
control_status |= CONTROL_RIGHT;
if (!(control_last & CONTROL_RIGHT))
{
control_last |= CONTROL_RIGHT;
KeyArray[ A_KEY ] = 0;
KeyArray[ J_KEY ] = 0;
}
}
else
{
control_last &= ~CONTROL_RIGHT;
}
if (KeyArray[ S_KEY ] || KeyArray[ K_KEY ])
{
control_status |= CONTROL_DOWN;
if (!(control_last & CONTROL_DOWN))
{
control_last |= CONTROL_DOWN;
KeyArray[ W_KEY ] = 0;
KeyArray[ I_KEY ] = 0;
}
}
else
{
control_last &= ~CONTROL_DOWN;
}
if (KeyArray[ W_KEY ] || KeyArray[ I_KEY ])
{
control_status |= CONTROL_UP;
if (!(control_last & CONTROL_UP))
{
control_last |= CONTROL_UP;
KeyArray[ S_KEY ] = 0;
KeyArray[ K_KEY ] = 0;
}
}
else
{
control_last &= ~CONTROL_UP;
}
if (KeyArray[ SPACEBAR ])
{
control_status |= CONTROL_FIRE;
if (!(control_last & CONTROL_FIRE))
{
control_last |= CONTROL_FIRE;
}
}
else
{
control_last &= ~CONTROL_FIRE;
}
}
else
{
control_last &= ~CONTROL_RIGHT;
}
if (KeyArray[ DARROW ])
{
control_status |= CONTROL_DOWN;
if (!(control_last & CONTROL_DOWN))
{
control_last |= CONTROL_DOWN;
KeyArray[ UARROW ] = 0;
}
}
else
{
control_last &= ~CONTROL_DOWN;
}
if (KeyArray[ UARROW ])
{
control_status |= CONTROL_UP;
if (!(control_last & CONTROL_UP))
{
control_last |= CONTROL_UP;
KeyArray[ DARROW ] = 0;
}
}
else
{
control_last &= ~CONTROL_UP;
}
if (KeyArray[ SPACEBAR ])
{
control_status |= CONTROL_FIRE;
if (!(control_last & CONTROL_FIRE))
{
control_last |= CONTROL_FIRE;
}
}
else
{
control_last &= ~CONTROL_FIRE;
}
if (KeyArray[ ESC ])
{
control_status |= CONTROL_END;