diff --git a/libsrc/c64/joy/c64-hitjoy.s b/libsrc/c64/joy/c64-hitjoy.s index 9f6c0b4dd..3b4a0b909 100644 --- a/libsrc/c64/joy/c64-hitjoy.s +++ b/libsrc/c64/joy/c64-hitjoy.s @@ -73,13 +73,22 @@ UNINSTALL: rts ; ------------------------------------------------------------------------ -; IRQ entry point. Is called from the C layer as a subroutine in the -; interrupt. The routine MUST return carry set if the interrupt has been -; 'handled' - which means that the interrupt source is gone. Otherwise it -; MUST return carry clear. +; COUNT: Return the total number of available joysticks in a/x. +; -IRQ: ; cia 2 setup +COUNT: lda #<JOY_COUNT + ldx #>JOY_COUNT + rts +; ------------------------------------------------------------------------ +; READ: Read a particular joystick passed in A. +; + +readadapter: + + sei + + ; cia 2 setup ldy #$00 ; port b direction sty $dd03 ; => input @@ -143,32 +152,24 @@ IRQ: ; cia 2 setup sta temp4 fire: - ; Default Value: $40/64 on PAL - ; $42/66 on NTSC + ; FIXME: to be really 100% correct this should restore the correct timer + ; values for the respective machine (PAL: $4025, NTSC: $4295) + ; however, this should hardly be a problem in a real world program + lda #$41 sta $dc05 - ; Default Value: $25/37 on PAL - ; $95/149 on NTSC lda #0 sta $dc04 - ; We do never "handle" the interrupt, we use it just as a timer. - clc + cli rts -; ------------------------------------------------------------------------ -; COUNT: Return the total number of available joysticks in a/x. -; +READ: + pha + jsr readadapter + pla -COUNT: lda #<JOY_COUNT - ldx #>JOY_COUNT - rts - -; ------------------------------------------------------------------------ -; READ: Read a particular joystick passed in A. -; - -READ: tax ; Joystick number into X + tax ; Joystick number into X bne joy2 ; Read joystick 1 @@ -214,4 +215,3 @@ joy4: lda temp4 eor #$1F ldx #0 rts - diff --git a/testcode/lib/joy-test.c b/testcode/lib/joy-test.c index fdd83bb4e..3d584bf9d 100644 --- a/testcode/lib/joy-test.c +++ b/testcode/lib/joy-test.c @@ -5,7 +5,6 @@ #include <conio.h> #include <joystick.h> - #ifdef JOYSTICK_DRIVER /* A statically linked driver was named on the compiler's command line. @@ -13,6 +12,22 @@ */ # undef DYN_DRV # define DYN_DRV 0 + +/* +** link existing drivers like this: +** +** cl65 -DJOYSTICK_DRIVER=c64_hitjoy_joy -o joy-test.prg joy-test.c +** +** for testing a new driver you will have to uncomment the define below, and +** link your driver like this: +** +** co65 ../../target/c64/drv/joy/c64-hitjoy.joy -o hitjoy.s --code-label _hitjoy +** cl65 -DJOYSTICK_DRIVER=hitjoy -o joy-test.prg joy-test.c hitjoy.s +** +*/ + +/* extern char JOYSTICK_DRIVER; */ + #else /* Use a dynamically loaded driver, by default. */ @@ -27,13 +42,17 @@ int main (void) unsigned char j; unsigned char count; unsigned char i; + unsigned char Res; + unsigned char ch, kb; + + clrscr (); #if DYN_DRV - unsigned char Res = joy_load_driver (joy_stddrv); + Res = joy_load_driver (joy_stddrv); #elif defined(JOYSTICK_DRIVER) - unsigned char Res = joy_install (&JOYSTICK_DRIVER); + Res = joy_install (&JOYSTICK_DRIVER); #else - unsigned char Res = joy_install (&joy_static_stddrv); + Res = joy_install (&joy_static_stddrv); #endif if (Res != JOY_ERR_OK) { @@ -44,7 +63,6 @@ int main (void) exit (EXIT_FAILURE); } - clrscr (); count = joy_count (); #if defined(__ATARI5200__) || defined(__CREATIVISION__) cprintf ("JOYSTICKS: %d", count); @@ -56,23 +74,31 @@ int main (void) gotoxy (0, i+1); j = joy_read (i); #if defined(__ATARI5200__) || defined(__CREATIVISION__) - cprintf ("%1d:%-3s%-3s%-3s%-3s%-3s%-3s", + cprintf ("%1d:%-3s%-3s%-3s%-3s%-3s %02x", i, JOY_UP(j)? " U " : " - ", JOY_DOWN(j)? " D " : " - ", JOY_LEFT(j)? " L " : " - ", JOY_RIGHT(j)? " R " : " - ", - JOY_BTN_1(j)? " 1 " : " - "); + JOY_BTN_1(j)? " 1 " : " - ", j); #else - cprintf ("%2d: %-6s%-6s%-6s%-6s%-6s%-6s", + cprintf ("%2d: %-6s%-6s%-6s%-6s%-6s %02x", i, JOY_UP(j)? " up " : " ---- ", JOY_DOWN(j)? " down " : " ---- ", JOY_LEFT(j)? " left " : " ---- ", JOY_RIGHT(j)? "right " : " ---- ", - JOY_BTN_1(j)? "button" : " ---- "); + JOY_BTN_1(j)? "button" : " ---- ", j); #endif } + + /* show pressed key, so we can verify keyboard is working */ + kb = kbhit (); + ch = kb ? cgetc () : ' '; + gotoxy (1, i+2); + revers (kb); + cprintf ("kbd: %c", ch); + revers (0); } return 0; }