Logitech Rumblepad 2 USB Driver#

Tested with a Logitec Rumblepad 2 USB. Other Logitech analog Joypad might work. Please send feedback.

Description#

USB Register Byte of HID Packet Function Atari Memory Shadow original Label new USB label
$10 1 left handle horiz movement $270 (624) PADDL0 RPADLHH
$11 2 left handle vertic movement $271 (625) PADDL1 RPADLHV
$12 3 right handle horiz movement $272 (626) PADDL2 RPADRHH
$13 4 right handle vertic movement $273 (627) PADDL3 RPADRHV
$14 5 Bit 0-4 digital Joypad $274 (628) PADDL4 RPADDJY
$14 5 Bit 5-7 Button 1-4 $275 (629) PADDL5 RPADBUT1
$15 6 Button 5-10 $276 (630) PADDL6 RPADBUT2
$16 7 Mode Button Status $277 (631) PADDL7 RPADMODE

  • Byte 1: left handle horizontal movement ($00 = left, $80 = middle, $FF= right)
  • Byte 2: left handle vertical movement ($00 = up, $80 = middle, $FF= down)
  • Byte 3: right handle horizontal movement ($00 = left, $80 = middle, $FF= right)
  • Byte 4: right handle vertical movement ($00 = up, $80 = middle, $FF= down)
  • Byte 5: Bit 0-3 digital Joypad (see below)
  • Byte 5: Bit 4 - Button 1, Bit 5 - Button 2, Bit 6 - Button 3, Bit 7 - Button 8
  • Byte 6: Bit 0-5 - Button 5-10
  • Byte 7: Bit 2 - Vibration Switch, Bit 3 - Mode Switch and LED
  • Byte 8: unknown

The digital Joypad has a unique value for each direction:

.
          up
          0
        7 | 1
left  6---8---2 right
        5 | 3
          4
         down

Device dependent source#

Digital Disk Control Driver#

This Source must be included into the Base HID Driver>BaseHIDDriver.


01000          .LI OFF
01010 ****************************
01020 ** 6502 USB DEVELOPMENT   **
01030 ** (C) 2004 BY ABBUC      **
01040 ** REGIONALGRUPPE FFM     **
01050 ** DEVICE DRIVER FOR      **
01060 ** LOGITECH RUMBLE PAD 2  **
01070 ** VERSION 1.0 20041214   **
01080 ** LICENSED UNDER THE     **
01090 ** GNU PUBLIC LICENSE     **
01100 ** (GPL) VERS. 2 OR LATER **
01110 **                        **
01120 ****************************
01130 ; THIS FILE MUST BE INCLUDED
01140 ; FROM USBHID.SRC!
01150 ;
01160 ; ATARI MEMORY LOCATIONS
01170 ;
01180 STICK0   = $0278
01190 STICK1   = $0279
01200 STRIG0   = $0284
01210 STRIG1   = $0285
01220 ;
01230 ; USB JOYSTICK SHADOW REGISTER
01240 ;
01250 RPADLHH  = $0270
01260 RPADLHV  = $0271
01270 RPADRHH  = $0272
01280 RPADRHV  = $0273
01290 RPADDJY  = $0274
01300 RPADBUT1 = $0275
01310 RPADBUT2 = $0276
01320 RPADMODE = $0277
01330 ;
01340 ------------------------------
01350 POLLDEVICE
01360 ;
01370          LDA #03
01380          JSR PROCESS
01390 ;        AND #01
01400 ;        BEQ .2  ; NO DATA
01410 ;
01420          LDX #$14
01430          JSR REGFETCH
01440          PHA         ; SAVE VALUE TO STACK
01450          AND #$0F    ; CLEAR TO NIBBLE BIT 4-7
01460          STA RPADDJY
01470          PLA         ; RESTORE VALUE FROM STACK
01480          LSR         ; MOVE TOP NIBBLE
01490          LSR         ; DOWN
01500          LSR
01510          LSR
01520          STA RPADBUT1 ; STORE IN SHADOW
01530 ;
01540          LDX #$15
01550          JSR REGFETCH
01560          STA RPADBUT2
01570 ;
01580 .2       RTS
01590 ------------------------------
01600 USB2ATA
01610          LDA #$0F
01620          STA STICK0
01630          LDA #1
01640          STA STRIG0
01650 ;
01660          LDA RPADBUT1
01670          ORA RPADBUT2
01680          BEQ GETSTICK1
01690          LDA #0
01700          STA STRIG0
01710 ;
01720 GETSTICK1
01730          LDY RPADDJY
01740          LDA JOYTAB,Y
01750          STA STICK0
01760          RTS
01770 ------------------------------
01780 JOYTAB   .DA #14,#6,#7,#5,#13,#9,#11,#10,#15
01790 ------------------------------
01800 VBI
01810          LDA STICK0
01820          EOR #$0F
01830          BNE .1
01840          LDA STRIG0
01850          BEQ .1
01860 ;
01870          JSR POLLDEVICE
01880          JSR USB2ATA
01890 .1       JMP XITVBV
01900 ------------------------------
01910          .OR $7400
01920 ------------------------------
01930 PRINTDEVICE
01940          JSR PRINT
01950          .AS "Logitech Rumblepad 2 Driver"
01960          .HX 40
01970          RTS
01980 ------------------------------
01990 PRINTVERSION
02000          JSR PRINT
02010          .AS "Version 1.0 (DIGITAL)   "
02020          .HX 40
02030          RTS
02040 ------------------------------
02050 PRINTCOPY
02060          JSR PRINT
02070          .AS "(c) 20041214 C. Strotmann/ABBUC"
02080          .HX 40
02090          RTS
02100 ------------------------------
{code}
1.1.1 Analog Handle Driver

This Source must be included into the [Base HID Driver>BaseHIDDriver].

{code}

01000          .LI OFF
01010 ****************************
01020 ** 6502 USB DEVELOPMENT   **
01030 ** (C) 2004 BY ABBUC      **
01040 ** REGIONALGRUPPE FFM     **
01050 ** DEVICE DRIVER FOR      **
01060 ** LOGITECH RUMBLE PAD 2  **
01070 ** VERSION 1.0 20041213   **
01080 ** LICENSED UNDER THE     **
01090 ** GNU PUBLIC LICENSE     **
01100 ** (GPL) VERS. 2 OR LATER **
01110 **                        **
01120 ****************************
01130 ; THIS FILE MUST BE INCLUDED
01140 ; FROM USBHID.SRC!
01150 ;
01160 ; ATARI MEMORY LOCATIONS
01170 ;
01180 STICK0   = $0278
01190 STICK1   = $0279
01200 STRIG0   = $0284
01210 STRIG1   = $0285
01220 ;
01230 ; USB JOYSTICK SHADOW REGISTER
01240 ;
01250 RPADLHH  = $0270
01260 RPADLHV  = $0271
01270 RPADRHH  = $0272
01280 RPADRHV  = $0273
01290 RPADDJY  = $0274
01300 RPADBUT1 = $0275
01310 RPADBUT2 = $0276
01320 RPADMODE = $0277
01330 ;
01340 ------------------------------
01350 ; THRESHOLD ANALOG->DIGITAL
01360 THLEFT   .HX 60
01370 THRIGHT  .HX A0
01380 THUP     .HX 60
01390 THDOWN   .HX A0
01400 ------------------------------
01410 POLLDEVICE
01420 ;
01430          LDA #03
01440          JSR PROCESS
01450 ;        AND #01
01460 ;        BEQ .2  ; NO DATA
01470 ;
01480          LDX #$10
01490          JSR REGFETCH
01500          STA RPADLHH
01510          LDX #$11
01520          JSR REGFETCH
01530          STA RPADLHV
01540          LDX #$12
01550          JSR REGFETCH
01560          STA RPADRHH
01570          LDX #$13
01580          JSR REGFETCH
01590          STA RPADRHV
01600          LDX #$14
01610          JSR REGFETCH
01620          PHA         ; SAVE VALUE TO STACK
01630          AND #$0F    ; CLEAR TO NIBBLE BIT 4-7
01640          STA RPADDJY
01650          PLA         ; RESTORE VALUE FROM STACK
01660          LSR         ; MOVE TOP NIBBLE
01670          LSR         ; DOWN
01680          LSR
01690          LSR
01700          STA RPADBUT1 ; STORE IN SHADOW
01710 ;
01720          LDX #$15
01730          JSR REGFETCH
01740          STA RPADBUT2
01750 ;
01760          LDX #$16
01770          JSR REGFETCH
01780          STA RPADMODE
01790 ;
01800 .2       RTS
01810 ------------------------------
01820          .OR $0400
01830 USB2ATA
01840          LDA #$0F
01850          STA STICK0
01860          STA STICK1
01870          LDA #1
01880          STA STRIG0
01890          STA STRIG1
01900 ;
01910          LDA RPADBUT1
01920          ORA RPADBUT2
01930          BEQ GETSTICK1
01940          LDA #0
01950          STA STRIG0
01960          STA STRIG1
01970 ;
01980 GETSTICK1
01990          LDA STICK0
02000          LDX RPADLHH
02010          CPX THLEFT
02020          BCC .1   ; LEFT
02030          CPX THRIGHT
02040          BCS .2   ; RIGHT
02050          BCC .10
02060 .1       EOR #$04 ; LEFT
02070          BPL .3
02080 .2       EOR #$08 ; RIGHT
02090 .3       STA STICK0
02100 .10
02110          LDX RPADLHV
02120          CPX THUP
02130          BCC .11  ; UP
02140          CPX THDOWN
02150          BCS .12  ; DOWN
02160          BCC GETSTICK2
02170 .11      EOR #$01 ; UP
02180          BNE .13
02190 .12      EOR #$02 ; DOWN
02200 .13      STA STICK0
02210 GETSTICK2
02220          LDA STICK1
02230          LDX RPADRHH
02240          CPX THLEFT
02250          BCC .1   ; LEFT
02260          CPX THRIGHT
02270          BCS .2   ; RIGHT
02280          BCC .10
02290 .1       EOR #$04 ; LEFT
02300          BPL .3
02310 .2       EOR #$08 ; RIGHT
02320 .3       STA STICK1
02330 .10
02340          LDX RPADRHV
02350          CPX THUP
02360          BCC .11  ; UP
02370          CPX THDOWN
02380          BCS .12  ; DOWN
02390          BCC .20
02400 .11      EOR #$01 ; UP
02410          BNE .13
02420 .12      EOR #$02 ; DOWN
02430 .13      STA STICK1
02440 .20      RTS
02450 ------------------------------
02460 VBI
02470          LDA STICK0
02480          EOR #$0F
02490          BNE .1
02500          LDA STRIG0
02510          BEQ .1
02520 ;
02530          JSR POLLDEVICE
02540          JSR USB2ATA
02550 .1       JMP XITVBV
02560 ------------------------------
02570          .OR $7400
02580 ------------------------------
02590 PRINTDEVICE
02600          JSR PRINT
02610          .AS "Logitech Rumblepad 2 Driver"
02620          .HX 40
02630          RTS
02640 ------------------------------
02650 PRINTVERSION
02660          JSR PRINT
02670          .AS "Version 1.0"
02680          .HX 40
02690          RTS
02700 ------------------------------
02710 PRINTCOPY
02720          JSR PRINT
02730          .AS "(c) 20041213 C. Strotmann/ABBUC"
02740          .HX 40
02750          RTS
02760 ------------------------------