Re: [hatari-users] Minor Problems with Falcon Emulation (joypad issue)

[ Thread Index | Date Index | More lists.tuxfamily.org/hatari-users Archives ]


Am 09.08.2014 um 23:58 schrieb Thomas Huth:
> Does anybody know a game that supports a Jag-pad in port B and uses
> the extended buttons? (Haven't tested Tautology II yet that Ingo
> mentioned ... did somebody already try?). Also, I currently do not
> have my USB joypad available, so I can currently not test this
> behaviour. Thomas 

Not a complete game but I have some assembly source which is used for
polling the Jagpads and it is meant to work for both pad A and B.

I have attached the sample source..

Regards,
Matthias

-- 
http://final-memory.org/

#
# Jagpad Routine
# reading Jagpad A & B
# from some code found on the web
#
# (c) 2007 by Simon Sunnyboy / Paradize
#
# Returns :-
# pad0 = c1numpad,c1midbuts,c1firebuts,c1joypad
# pad1 = c2numpad,c2midbuts,c2firebuts,c2joypad
# contain bitwise representation in the form
# 1 4 7 * 3 6 9 # 2 5 8 0 o p c b a r l d u
# where o=option, p=pause, a/b/c=fire, r/l/d/u=directions. and rest are the phone pad.
#

..globl _Jagpad_Read
..globl _pad0
..globl _pad1

..text
# jagpad return values after call
_pad0:               DC.L 0
_pad1:               DC.L 0

# local variables
c1numpad:           DC.L 1
c2numpad:           DC.L 1


_Jagpad_Read:       movem.l D0-A2,-(SP)
                    clr.l   D0
                    clr.l   D1
                    clr.l   D2
                    clr.l   D3
                    clr.l   D4
                    clr.l   D5
                    clr.l   D6
                    clr.l   D7
                    movea.l #0,A0
                    lea     c1numpad(PC),A1
                    lea     c2numpad(PC),A2
                    move.l  #0,(A1)
                    move.l  #0,(A2)

# read row 1

                    move.w  #0xFFEE,D0
                    bsr     read_controller

                    move.w  D1,D0
                    andi.w  #1,D0
                    move.b  D0,D3

                    move.w  D1,D0
                    andi.w  #2,D0
                    lsr.w   #1,D0
                    move.b  D0,D4

                    move.w  D1,D0
                    andi.w  #4,D0
                    lsr.w   #2,D0
                    move.b  D0,D6

                    move.w  D1,D0
                    andi.w  #8,D0
                    lsr.w   #3,D0
                    move.b  D0,D7

                    move.w  D2,D0
                    andi.w  #0x0F00,D0
                    lsr.w   #8,D0
                    move.b  D0,D5

                    move.w  D2,D0
                    andi.w  #0xF000,D0
                    lsr.w   #8,D0
                    lsr.w   #4,D0
                    movea.l D0,A0

# read row 2

                    move.w  #0xFFDD,D0
                    bsr     read_controller

                    move.w  D1,D0
                    andi.w  #2,D0
                    or.b    D0,D4

                    move.w  D1,D0
                    andi.w  #8,D0
                    lsr.w   #2,D0
                    or.b    D0,D7

                    move.w  D2,D0
                    andi.w  #0x0F00,D0
                    lsr.w   #8,D0
                    move.w  D0,(A1)

                    move.w  D2,D0
                    andi.w  #0xF000,D0
                    lsr.w   #8,D0
                    lsr.w   #4,D0
                    move.w  D0,(A2)

# read row 3

                    move.w  #0xFFBB,D0
                    bsr     read_controller

                    move.w  D1,D0
                    andi.w  #2,D0
                    lsl.w   #1,D0
                    or.b    D0,D4

                    move.w  D1,D0
                    andi.w  #8,D0
                    lsr.w   #1,D0
                    or.b    D0,D7

                    move.w  D2,D0
                    andi.w  #0x0F00,D0
                    lsr.w   #4,D0
                    or.l    D0,(A1)

                    move.w  D2,D0
                    andi.w  #0xF000,D0
                    lsr.w   #8,D0
                    or.l    D0,(A2)

# read row 4

                    move.w  #0xFF77,D0
                    bsr     read_controller

                    move.w  D1,D0
                    andi.w  #2,D0
                    or.b    D0,D3

                    move.w  D1,D0
                    andi.w  #8,D0
                    lsr.w   #2,D0
                    or.b    D0,D6

                    move.w  D2,D0
                    andi.w  #0x0F00,D0
                    or.l    D0,(A1)

                    move.w  D2,D0
                    andi.w  #0xF000,D0
                    lsr.w   #4,D0
                    or.l    D0,(A2)

                    lsl.l   #7,D3
                    lsl.l   #4,D4
                    or.l    D4,D3
                    or.l    D5,D3

                    lsl.l   #7,D6
                    lsl.l   #4,D7
                    or.l    D7,D6
                    move.l  A0,D2
                    or.l    D2,D6

                    move.l  (A1),D2         ; d2 = c1numpad
                    lsl.l   #5,D2
                    move.l  (A2),D5         ; d5 = c2numpad
                    lsl.l   #5,D5

                    or.l    D2,D3
                    or.l    D5,D6

                    move.l  D3,D4
                    andi.l  #0b1111000000000000000000000,D4
                    lsr.l   #4,D4
                    andi.l  #0b11111111111111111,D3
                    or.l    D4,D3

                    move.l  D6,D4
                    andi.l  #0b1111000000000000000000000,D4
                    lsr.l   #4,D4
                    andi.l  #0b11111111111111111,D6
                    or.l    D4,D6

                    lea     _pad0(PC),A0
                    move.l  D3,(A0)
                    move.l  D6,4(A0)
                    movem.l (SP)+,D0-A2
                    rts

read_controller:
                    move.w  D0,0xFF9202
                    move.w  0xFF9200,D1
                    move.w  0xFF9202,D2

                    andi.w  #0x0F,D1
                    andi.w  #0xFF00,D2

                    not.w   D1
                    not.w   D2

                    rts
..end



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/