diff --git a/asm/paddles.s b/asm/paddles.s index fc2bed0..6a63f14 100644 --- a/asm/paddles.s +++ b/asm/paddles.s @@ -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 diff --git a/src/scr_joykey.c b/src/scr_joykey.c index f0501a1..28398c6 100644 --- a/src/scr_joykey.c +++ b/src/scr_joykey.c @@ -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; } diff --git a/src/sysevt.c b/src/sysevt.c index d915061..8a89f38 100644 --- a/src/sysevt.c +++ b/src/sysevt.c @@ -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;