;Entry_ADFJoystickDeadZone
;-------------------------
;Sets the Dead Zone on a Joystick

;Entry:
; R0 - Command tail
; R1 = no. of parameters
; R12 - pointer to module private word

;Exit:
; R0 - corrupt

.Entry_ADFJoystickDeadZone
 STMFD   R13!, {R1-R5, R12, R14}

 LDR     R12, [R12, #0]
 ADD     R5, R12, #Joystick_DeadZones - VARS
 ADD     R12, R12, #Joystick_DeadZonesSQ - VARS	;R5/R12=pointer to Joystick_DeadZone

 MOV     R4, #0				;assume Joystick 1
 MOV     R1, R0				;R1=command tail
 MOV     R0, #1 << 29			;restrict OS_ReadUnsigned to value in R2
 ._L1
   LDRB    R2, [R1], #1
   TEQ     R2, #ASC(" ")
   BEQ     _L1				;ignore SPACE

   CMP     R2, #ASC("0")
   RSBHSS  R3, R2, #ASC("9")		;0-9 is the deadzone %
   BHS     _deadzone  

   BIC     R2, R2, #32			;force to uppercase
   TEQ     R2, #ASC("J")
   BEQ     _joystick			;its a Joystick

   TEQ     R2, #0
 BNE     _L1

 ._exit
LDMFD   R13!, {R1-R5, R12, PC}


 ._joystick
   MOV     R2, #Max_Joysticks		;R2=max value
   SWI     XOS_ReadUnsigned		;read the value PRM1-460
   BVS     _exit			;exit on error
   SUB     R4, R2, #1			;reduce value
 B       _L1
 
 ._deadzone
   SUB     R1, R1, #1
   MOV     R2, #100			;R2=max value
   SWI     XOS_ReadUnsigned		;read the value PRM1-460
   BVS     _exit			;exit on error

   MOV     R3, #Joystick_Percentage
   MUL     R2, R3, R2
   STR     R2, [R5, R4, LSL #2]		;store the deadzone
   MUL     R3, R2, R2			;square to get distance
   STR     R3, [R12, R4, LSL #2]	;store the deadzone^2
 B       _L1