Yet more joystick code... Courtesy Glenn Corpes

All 680x0 related coding posts in this section please.

Moderators: exxos, simonsunnyboy, Mug UK, Zorro 2, Moderator Team

EstTeeEfEm
Captain Atari
Captain Atari
Posts: 299
Joined: Mon May 04, 2015 9:02 pm

Yet more joystick code... Courtesy Glenn Corpes

Postby EstTeeEfEm » Tue May 17, 2016 9:33 pm

Taken from issue 23 of ST Format..

This is incomplete code as I am currently working on it myself but it should be fairly self explanatory..

Code: Select all

*****************************************************************************
*    oo   SPRITE AND JOYSTICK DEMO                      oo
*  \(  )/   GLENN CORPES BULLFROG PRODUCTIONS 5/4/91         \(  )/
*  ^ ^^ ^       SET YOUR TAB SIZE TO 4 !!!!!!!!!!!!              ^ ^^ ^
*      OTHERWISE IT WILL LOOK LIKE A TOTAL MESS !!!!!!!!!!!
*****************************************************************************

KB_CONTROL   equ   $fffffc00      ; keyboard control
KB_DATA      equ   $fffffc02      ; keyboard data



   clr.l   -(sp)
   move.w   #32,-(sp)
   trap   #1
   addq.l   #6,sp            ; set supervisor mode
   move.l   d0,old_stack         ; store old stack var

   move.w   #34,-(sp)
   trap   #14            ; get system vectors
   addq.l  #2,sp

   move.l   d0,a0            ; address of system vectors
   lea   24(a0),a0         ; move to joystick vector
   move.l  a0,j_pack_address      ; store the address of the vector
   move.l   (a0),old_j_pack         ; store the old vector
   move.l   #_joy_handler,(a0)      ; patch in the new one


js_loop
   btst.b   #1,KB_CONTROL         ; is keyboard ready for command
   beq.s   js_loop                        ; no, loop
   move.b   #$15,KB_DATA         ; set joystick to, "must request a packet mode"


; -------------------------   Main Loop
main:
jr_loop
   btst.b   #1,KB_CONTROL         ; is keyboard ready for command
   beq.s   jr_loop                        ; no, loop
   move.b   #$16,KB_DATA                   ; request a joystick packet




_move_player
   movem.w   dxy_joy,d0/d1         ; get joystick directions

   tst.w   d0            ; joystick x moving?
   bne.s   xjoy_moving         ; yes

   tst.w   d1            ; joystick y moving?
   bne.s   yjoy_moving         ; yes


   cmp.b   #$39,$fffffc02
   beq      quit

   move.w   #$777,$ffff8240
   bra    main

xjoy_moving:
   move.w   #$700,$ffff8240
   bra   main

yjoy_moving:
   move.w   #$070,$ffff8240
   bra   main


; -------------------------      Quit Program

quit:
jrs_loop
   btst.b   #1,KB_CONTROL         ; is keyboard ready for command
   beq.s   jrs_loop                   ; no, loop
   move.b   #$8,KB_DATA         ; set mouse relative mode

   move.l   j_pack_address,a0
   move.l   old_j_pack,(a0)         ; put the old joystick handler back

   move.l   old_stack,-(sp)
   move.w   #32,-(sp)
   trap   #1
   addq.l   #6,sp

   clr.w   -(sp)
   trap   #1

; -------------------------------------- Subroutines



_joy_handler
   move.w   d0,-(sp)
   clr.w   d0
;   move.b   (a0),d0            include this line if you want 2 joysticks
   move.b   1(a0),d0         ; F...RLDU
   add.b   d0,d0            ; ...RLDU.   *2 for the lookup table
   scs   fire            ; set fire to true if it bit 7 was set
   add.b   d0,d0            ; ..RLDU..
   move.l   jlt(pc,d0.w),dxy_joy
   move.w   (sp)+,d0
   rts
;      dx dy         the bits   imposible cases
jlt   dc.w    0,0         ..0000..
   dc.w    0,-1         ..000U..
   dc.w    0,1         ..00D0..
   dc.w    0,0         ..00DU..   *
   dc.w   -1,0         ..0L00..
   dc.w   -1,-1         ..0L0U..
   dc.w   -1,1         ..0LD0..
   dc.w   -1,0         ..0LDU..   *
   dc.w    1,0         ..R000..
   dc.w    1,-1         ..R00U..
   dc.w    1,1         ..R0D0..
   dc.w    1,0         ..R0DU..   *
   dc.w    0,0         ..RL00..   *
   dc.w    0,-1         ..RL0U..   *
   dc.w    0,1         ..RLD0..   *
   dc.w    0,0         ..RLDU..   *


   section bss
fire         ds.b   1
   even
old_stack      ds.l   1

j_pack_address      ds.l   1
old_j_pack      ds.l   1
dxy_joy
dx_joy         ds.w   1
dy_joy         ds.w   1


Enjoy ;)

Social Media

     

Return to “680x0”

Who is online

Users browsing this forum: ctirad and 1 guest