home *** CD-ROM | disk | FTP | other *** search
- Page 58,132
- Title JOYSTICK.ASM Apple Emulator Joystick Routines
- ;******************************************************************************
- ;
- ; Name: JOYSTICK.ASM Apple Emulator Joystick Routines
- ;
- ; Group: Emulator
- ;
- ; Revision: 1.00
- ;
- ; Date: January 30, 1988
- ;
- ; Author: Randy W. Spurlock
- ;
- ;******************************************************************************
- ;
- ; Module Functional Description:
- ;
- ; This module contains all the code for the Apple joystick
- ; routines.
- ;
- ;******************************************************************************
- ;
- ; Changes:
- ;
- ; DATE REVISION DESCRIPTION
- ; -------- -------- -------------------------------------------------------
- ; 1/30/88 1.00 Original
- ;
- ;******************************************************************************
- Page
- ;
- ; Public Declarations
- ;
- Public Button_1 ; Button 1 input routine (Joystick 1)
- Public Button_2 ; Button 2 input routine (Joystick 1)
- Public Button_3 ; Button 3 input routine
- Public Joystick_1 ; Joystick 1 input routine (X-Axis)
- Public Joystick_2 ; Joystick 2 input routine (Y-Axis)
- Public Joystick_3 ; Joystick 3 input routine
- Public Joystick_4 ; Joystick 4 input routine
- Public Joystick_Strobe ; Joystick strobe routine
- Public Joystick_Mode ; Joystick mode routine
- Public Joystick_Type ; Joystick type routine (Analog/Binary)
- Public Joystick_Fast ; Joystick fast response mode routine
- Public Joystick_Center ; Joystick self-center routine
- Public Joystick_Flight ; Joystick flight mode routine
- Public Joystick_Reset ; Joystick reset routine
- Public Joystick_Dummy ; Joystick dummy routine
- Public Joy_Up_Left ; Joystick up/left routine
- Public Joy_Up ; Joystick up routine
- Public Joy_Up_Right ; Joystick up/right routine
- Public Joy_Left ; Joystick left routine
- Public Joy_Center ; Joystick center routine
- Public Joy_Right ; Joystick right routine
- Public Joy_Down_Left ; Joystick down/left routine
- Public Joy_Down ; Joystick down routine
- Public Joy_Down_Right ; Joystick down/right routine
- Public Joy_X_Res_Inc ; Joystick X resolution increase
- Public Joy_X_Res_Dec ; Joystick X resolution decrease
- Public Joy_Y_Res_Inc ; Joystick Y resolution increase
- Public Joy_Y_Res_Dec ; Joystick Y resolution decrease
- Public Joy_X_Cen_Inc ; Joystick X center increase
- Public Joy_X_Cen_Dec ; Joystick X center decrease
- Public Joy_Y_Cen_Inc ; Joystick Y center increase
- Public Joy_Y_Cen_Dec ; Joystick Y center decrease
- Public Joy_Button_1 ; Joystick button 1 routine
- Public Joy_Button_2 ; Joystick button 2 routine
- Public Joystick_Update ; Joystick update routine
- ;
- ; External Declarations
- ;
- Extrn Key_Status:Byte ; Keyboard status byte (KEYBOARD)
- Extrn Last_Key:Byte ; Last keyboard scan code (KEYBOARD)
- ;
- ; LOCAL Equates
- ;
- CENTER_VALUE Equ 7F00h ; Joystick center value (7Fh = 127)
- START_RES Equ 0028h ; Starting resolution (0028h = 0.15625)
- MIN_RES Equ 0001h ; Minimum resolution (0001h = .0039)
- MAX_RES Equ 7FFFh ; Maximum resolution (7FFFh = 127.996)
- MIN_CENTER Equ 00001h ; Minimum center (0001h = .0039)
- MAX_CENTER Equ 0FFFFh ; Maximum center (FFFFh = 255.996)
- JOY_MIN Equ 00000h ; Joystick minimum setting value
- JOY_MAX Equ 0FFFFh ; Joystick maximum setting value
- SMALL_RES Equ 0001h ; Small resolution change (01h = .004)
- NORMAL_RES Equ 0010h ; Normal resolution change (10h = .0625)
- SMALL_CENTER Equ 0100h ; Small center change value (0100 = 1)
- NORMAL_CENTER Equ 0400h ; Normal center change value (0400 = 4)
- RESET_MASK Equ 0FCh ; Forced reset mask (Direction/Buttons)
- BUTTON_DOWN Equ 80h ; Button down indication value
- CHARGED Equ 80h ; Joystick charged indication value
- RESET_JOY Equ BINARY_TYPE ; Joystick reset value (Binary)
- ;
- ; Define any include files needed
- ;
- Include Macros.inc ; Include the macro definitions
- Include Equates.inc ; Include the equate definitions
- .286c ; Include 80286 instructions
- Page
- ;
- ; Define the emulator code segment
- ;
- Emulate Segment Word Public 'EMULATE' ; Emulator code segment
- Assume cs:Emulate, ds:Nothing, es:Nothing
- Subttl Button_1 Button 1 Input Routine
- Page +
- ;******************************************************************************
- ;
- ; Button_1() Joystick 1 Button
- ;
- ; Default to button 1 NOT down
- ; If button 1 is down
- ; Indicate that button 1 is down
- ; Endif for button check
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; AL - Joystick button 1 status (00h = Up, 80h = Down)
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Button_1 Proc Near ; Button 1 input procedure
- xor al,al ; Default to button NOT down
- test cs:[Joy_Flag],BUTTON_1_DOWN
- jz Button_1_Exit ; Jump if button 1 is NOT down
- mov al,BUTTON_DOWN ; Indicate button 1 is down
- Button_1_Exit:
- ret ; Return to the caller
- Button_1 Endp ; End of the Button_1 procedure
- Subttl Button_2 Button 2 Input Routine
- Page +
- ;******************************************************************************
- ;
- ; Button_2() Joystick 2 Button
- ;
- ; Default to button 2 NOT down
- ; If button 2 is down
- ; Indicate that button 2 is down
- ; Endif for button check
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Button_2 Proc Near ; Button 2 input procedure
- xor al,al ; Default to button NOT down
- test cs:[Joy_Flag],BUTTON_2_DOWN
- jz Button_2_Exit ; Jump if button 2 is NOT down
- mov al,BUTTON_DOWN ; Indicate button 2 is down
- Button_2_Exit:
- ret ; Return to the caller
- Button_2 Endp ; End of the Button_2 procedure
- Subttl Button_3 Button 3 Input Routine
- Page +
- ;******************************************************************************
- ;
- ; Button_3() NOT SUPPORTED
- ;
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Button_3 Proc Near ; Button 3 input procedure
- ret ; Return to the caller
- Button_3 Endp ; End of the Button_3 procedure
- Subttl Joystick_1 Joystick 1 Input Routine
- Page +
- ;******************************************************************************
- ;
- ; Joystick_1() Joystick 1 X-Axis
- ;
- ; Save the required registers
- ; Default to discharged state
- ; If keyboard is in the joystick mode
- ; Get the X counter value
- ; If the counter value is non-zero
- ; Indicate in charged state
- ; Decrement the counter value
- ; Update the counter value
- ; Endif for non-zero counter
- ; Endif for keyboard in joystick mode
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; AL - Joystick status (00h = Discharged, 80h = Charged)
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joystick_1 Proc Near ; Joystick 1 input procedure
- Save bx ; Save the required registers
- xor al,al ; Default to discharged state
- test cs:[Key_Status],JOY_MODE; Check for keyboard in joystick mode
- jz Joy_1_Done ; Jump if NOT in joystick mode
- mov bl,cs:[Joy_X_Count] ; Get the current X count value
- or bl,bl ; CHeck for already discharged
- jz Joy_1_Done ; Jump if already discharged
- mov al,CHARGED ; Indicate joystick still charged
- dec bl ; Decrement the X count value
- mov cs:[Joy_X_Count],bl ; Update the X count value
- Joy_1_Done:
- Restore bx ; Restore the required registers
- ret ; Return to the caller
- Joystick_1 Endp ; End of the Joystick_1 procedure
- Subttl Joystick_2 Joystick 2 Input Routine
- Page +
- ;******************************************************************************
- ;
- ; Joystick_2() Joystick 2 Y-Axis
- ;
- ; Save the required registers
- ; Default to discharged state
- ; If keyboard is in the joystick mode
- ; Get the Y counter value
- ; If the counter value is non-zero
- ; Indicate in charged state
- ; Decrement the counter value
- ; Update the counter value
- ; Endif for non-zero counter
- ; Endif for keyboard in joystick mode
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; AL - Joystick status (00h = Discharged, 80h = Charged)
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joystick_2 Proc Near ; Joystick 2 input procedure
- Save bx ; Save the required registers
- xor al,al ; Default to discharged state
- test cs:[Key_Status],JOY_MODE; Check for keyboard in joystick mode
- jz Joy_1_Done ; Jump if NOT in joystick mode
- mov bl,cs:[Joy_Y_Count] ; Get the current Y count value
- or bl,bl ; CHeck for already discharged
- jz Joy_2_Done ; Jump if already discharged
- mov al,CHARGED ; Indicate joystick still charged
- dec bl ; Decrement the Y count value
- mov cs:[Joy_Y_Count],bl ; Update the Y count value
- Joy_2_Done:
- Restore bx ; Restore the required registers
- ret ; Return to the caller
- Joystick_2 Endp ; End of the Joystick_2 procedure
- Subttl Joystick_3 Joystick 3 Input Routine
- Page +
- ;******************************************************************************
- ;
- ; Joystick_3() NOT SUPPORTED
- ;
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joystick_3 Proc Near ; Joystick 3 input procedure
- ret ; Return to the caller
- Joystick_3 Endp ; End of the Joystick_3 procedure
- Subttl Joystick_4 Joystick 4 Input Routine
- Page +
- ;******************************************************************************
- ;
- ; Joystick_4() NOT SUPPORTED
- ;
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joystick_4 Proc Near ; Joystick 4 input procedure
- ret ; Return to the caller
- Joystick_4 Endp ; End of the Joystick_4 procedure
- Subttl Joystick_Strobe Joystick Strobe Routine
- Page +
- ;******************************************************************************
- ;
- ; Joystick_Strobe()
- ;
- ; Save the required registers
- ; If keyboard in joystick mode
- ; Get the current X position
- ; Get the current Y position
- ; Save X position as X counter
- ; Save Y position as Y counter
- ; Endif
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joystick_Strobe Proc Near ; Joystick strobe procedure
- Save ax,bx ; Save the required registers
- test cs:[Key_Status],JOY_MODE; Check for keyboard in joystick mode
- jz Strobe_Done ; Jump if NOT in joystick mode
- mov ax,cs:[Joy_X_Pos] ; Get the current X position
- mov bx,cs:[Joy_Y_Pos] ; Get the current Y position
- mov cs:[Joy_X_Count],ah ; Save X position as the X count value
- mov cs:[Joy_Y_Count],bh ; Save Y position as the Y count value
- Strobe_Done:
- Restore ax,bx ; Restore the required registers
- ret ; Return to the caller
- Joystick_Strobe Endp ; End of the Joystick_Strobe procedure
- Subttl Joystick_Fast Joystick Fast Response Mode Routine
- Page +
- ;******************************************************************************
- ;
- ; Joystick_Fast(Scan_Code)
- ;
- ; If the last scan code does NOT match (NOT a repeat)
- ; If this is a make code
- ; Toggle the joystick fast response mode bit
- ; Endif
- ; Endif
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joystick_Fast Proc Near ; Joystick fast response mode procedure
- cmp ah,cs:[Last_Key] ; Check for a repeat scan code
- je Fast_Done ; Jump if this key is repeating
- or ah,ah ; Check for a make or break code
- js Fast_Done ; Jump if this is a break code
- xor Byte Ptr cs:[Joy_Flag],FAST_MODE
- Fast_Done:
- ret ; Return to the caller
- Joystick_Fast Endp ; End of the Joystick_Fast procedure
- Subttl Joystick_Center Joystick Self-Center Mode Routine
- Page +
- ;******************************************************************************
- ;
- ; Joystick_Center(Scan_Code)
- ;
- ; If the last scan code does NOT match (NOT a repeat)
- ; If this is a make code
- ; Toggle the joystick self-center mode bit
- ; Endif
- ; Endif
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joystick_Center Proc Near ; Joystick self-center mode procedure
- cmp ah,cs:[Last_Key] ; Check for a repeat scan code
- je Self_Done ; Jump if this key is repeating
- or ah,ah ; Check for a make or break code
- js Self_Done ; Jump if this is a break code
- xor Byte Ptr cs:[Joy_Flag],SELF_CENTER
- Self_Done:
- ret ; Return to the caller
- Joystick_Center Endp ; End of the Joystick_Center procedure
- Subttl Joystick_Flight Joystick Flight Mode Routine
- Page +
- ;******************************************************************************
- ;
- ; Joystick_Flight(Scan_Code)
- ;
- ; If the last scan code does NOT match (NOT a repeat)
- ; If this is a make code
- ; Toggle the joystick flight mode bit
- ; Endif
- ; Endif
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joystick_Flight Proc Near ; Joystick flight mode procedure
- cmp ah,cs:[Last_Key] ; Check for a repeat scan code
- je Flight_Done ; Jump if this key is repeating
- or ah,ah ; Check for a make or break code
- js Flight_Done ; Jump if this is a break code
- xor Byte Ptr cs:[Joy_Flag],FLIGHT_MODE
- Flight_Done:
- ret ; Return to the caller
- Joystick_Flight Endp ; End of the Joystick_Flight procedure
- Subttl Joystick_Reset Joystick Reset Routine
- Page +
- ;******************************************************************************
- ;
- ; Joystick_Reset(Scan_Code)
- ;
- ; If the last scan code does NOT match (NOT a repeat)
- ; If this is a make code
- ; Reset joystick position to center
- ; Reset joystick center values
- ; Reset joystick X/Y resolutions
- ; Reset joystick type & mode values
- ; Reset the joystick status
- ; Endif
- ; Endif
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joystick_Reset Proc Near ; Joystick reset procedure
- cmp ah,cs:[Last_Key] ; Check for a repeat scan code
- je Reset_Done ; Jump if this key is repeating
- or ah,ah ; Check for a make or break code
- js Reset_Done ; Jump if this is a break code
- mov cs:[Joy_X_Pos],CENTER_VALUE
- mov cs:[Joy_Y_Pos],CENTER_VALUE
- mov cs:[Joy_X_Center],CENTER_VALUE
- mov cs:[Joy_Y_Center],CENTER_VALUE
- mov cs:[Joy_X_Res],START_RES
- mov cs:[Joy_Y_Res],START_RES
- mov Byte Ptr cs:[Joy_Flag],RESET_JOY
- Reset_Done:
- ret ; Return to the caller
- Joystick_Reset Endp ; End of the Joystick_Reset procedure
- Subttl Joystick_Mode Joystick Mode Routine
- Page +
- ;******************************************************************************
- ;
- ; Joystick_Mode(Scan_Code)
- ;
- ; If the last scan code does NOT match (NOT a repeat)
- ; If this is a make code
- ; Reset joystick status (Direction and buttons)
- ; Endif
- ; Endif
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joystick_Mode Proc Near ; Joystick mode procedure
- cmp ah,cs:[Last_Key] ; Check for a repeat scan code
- je Mode_Done ; Jump if this key is repeating
- or ah,ah ; Check for a make or break code
- js Mode_Done ; Jump if this is a break code
- and Byte Ptr cs:[Joy_Flag],RESET_MASK
- Mode_Done:
- ret ; Return to the caller
- Joystick_Mode Endp ; End of the Joystick_Mode procedure
- Subttl Joystick_Type Joystick Type Routine
- Page +
- ;******************************************************************************
- ;
- ; Joystick_Type(Scan_Code)
- ;
- ; If the last scan code does NOT match (NOT a repeat)
- ; If this is a make code
- ; Toggle the joystick type bit
- ; Endif
- ; Endif
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joystick_Type Proc Near ; Joystick type procedure
- cmp ah,cs:[Last_Key] ; Check for a repeat scan code
- je Type_Done ; Jump if this key is repeating
- or ah,ah ; Check for a make or break code
- js Type_Done ; Jump if this is a break code
- xor Byte Ptr cs:[Joy_Flag],BINARY_TYPE
- Type_Done:
- ret ; Return to the caller
- Joystick_Type Endp ; End of the Joystick_Type procedure
- Subttl Joystick_Dummy Joystick Dummy Routine
- Page +
- ;******************************************************************************
- ;
- ; Joystick_Dummy()
- ;
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joystick_Dummy Proc Near ; Joystick dummy procedure
- ret ; Return to the caller
- Joystick_Dummy Endp ; End of the Joystick_Dummy procedure
- Subttl Joy_Up_Left Joystick Up/Left Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_Up_Left(Scan_Code)
- ;
- ; Save the required registers
- ; If this is a make code
- ; Set the up/left flag bit
- ; If joystick type is binary
- ; Set joystick X position to JOY_MIN
- ; Set joystick Y position to JOY_MIN
- ; Else
- ; If joystick mode is fast response
- ; If X position is > X center value
- ; Set X position to X center value
- ; Endif
- ; If Y position is > Y center value
- ; Set Y position to Y center value
- ; Endif
- ; Endif for joystick fast response mode
- ; Endif for joystick type binary
- ; Else this is a break code
- ; Reset the up/left flag bit
- ; If this is self-center mode
- ; Set joystick X position to X center value
- ; Set joystick Y position to Y center value
- ; Endif for self-center mode
- ; Endif for scan code
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_Up_Left Proc Near ; Joystick up/left procedure
- Save bx,cx ; Save the required registers
- or ah,ah ; Check for a make or break code
- js Up_Left_Break ; Jump if this is a break code
- Up_Left_Make:
- or Byte Ptr cs:[Joy_Status],UP_LEFT
- mov bx,cs:[Joy_X_Pos] ; Get the current joystick X position
- mov cx,cs:[Joy_Y_Pos] ; Get the current joystick Y position
- test cs:[Joy_Flag],BINARY_TYPE
- jz Up_Left_Check ; Jump if NOT in binary mode
- mov bx,JOY_MIN ; Set X position to joystick minimum
- mov cx,JOY_MIN ; Set Y position to joystick minimum
- jmp Short Up_Left_Update ; Go update the X and Y positions
- Up_Left_Check:
- test cs:[Joy_Flag],FAST_MODE
- jz Up_Left_Done ; Jump if NOT in fast response mode
- cmp bx,cs:[Joy_X_Center] ; Check the current X position value
- jbe Up_Left_Test ; Jump if already moving left
- mov bx,cs:[Joy_X_Center] ; Center the joystick X position
- Up_Left_Test:
- cmp cx,cs:[Joy_Y_Center] ; Check the current Y position value
- jbe Up_Left_Update ; Jump if already moving up
- mov cx,cs:[Joy_Y_Center] ; Center the joystick Y position
- Up_Left_Update:
- mov cs:[Joy_X_Pos],bx ; Update the current X position value
- mov cs:[Joy_Y_Pos],cx ; Update the current Y position value
- jmp Short Up_Left_Done ; Go return to the caller
- Up_Left_Break:
- and Byte Ptr cs:[Joy_Status],Not UP_LEFT
- test cs:[Joy_Flag],SELF_CENTER
- jz Up_Left_Done ; Jump if NOT in self-center mode
- mov bx,cs:[Joy_X_Center] ; Get the current X center value
- mov cs:[Joy_X_Pos],bx ; Set X position to center value
- mov bx,cs:[Joy_Y_Center] ; Get the current Y center value
- mov cs:[Joy_Y_Pos],bx ; Set Y position to center value
- Up_Left_Done:
- Restore bx,cx ; Restore the required registers
- ret ; Return to the caller
- Joy_Up_Left Endp ; End of the Joy_Up_Left procedure
- Subttl Joy_Up Joystick Up Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_Up(Scan_Code)
- ;
- ; Save the required registers
- ; If this is a make code
- ; Set the up flag bit
- ; If joystick type is binary
- ; If joystick mode is NOT flight mode
- ; Set joystick X pos. to X center value
- ; Endif
- ; Set joystick Y position to JOY_MIN
- ; Else
- ; If joystick mode is fast response
- ; If Y position is > Y center value
- ; Set Y position to Y center value
- ; Endif
- ; Endif for joystick fast response mode
- ; Endif for joystick type binary
- ; Else this is a break code
- ; Reset the up flag bit
- ; If this is self-center mode
- ; Set joystick Y position to Y center value
- ; Endif for self-center mode
- ; Endif for scan code
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_Up Proc Near ; Joystick up procedure
- Save cx ; Save the required registers
- or ah,ah ; Check for a make or break code
- js Up_Break ; Jump if this is a break code
- Up_Make:
- or Byte Ptr cs:[Joy_Status],UP
- mov cx,cs:[Joy_Y_Pos] ; Get the current joystick Y position
- test cs:[Joy_Flag],BINARY_TYPE
- jz Up_Check ; Jump if NOT in binary mode
- test cs:[Joy_Flag],FLIGHT_MODE
- jnz Up_Binary ; Jump if in flight mode
- mov cx,cs:[Joy_X_Center] ; Get the current X center value
- mov cs:[Joy_X_Pos],cx ; Set X position to center value
- Up_Binary:
- mov cx,JOY_MIN ; Set Y position to joystick minimum
- jmp Short Up_Update ; Go update the Y position
- Up_Check:
- test cs:[Joy_Flag],FAST_MODE
- jz Up_Done ; Jump if NOT in fast response mode
- cmp cx,cs:[Joy_Y_Center] ; Check the current Y position value
- jbe Up_Update ; Jump if already moving up
- mov cx,cs:[Joy_Y_Center] ; Center the joystick Y position
- Up_Update:
- mov cs:[Joy_Y_Pos],cx ; Update the current Y position value
- jmp Short Up_Done ; Go return to the caller
- Up_Break:
- and Byte Ptr cs:[Joy_Status],Not UP
- test cs:[Joy_Flag],SELF_CENTER
- jz Up_Done ; Jump if NOT in self-center mode
- mov cx,cs:[Joy_Y_Center] ; Get the current Y center value
- mov cs:[Joy_Y_Pos],cx ; Set Y position to center value
- Up_Done:
- Restore cx ; Restore the required registers
- ret ; Return to the caller
- Joy_Up Endp ; End of the Joy_Up procedure
- Subttl Joy_Up_Right Joystick Up/Right Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_Up_Right(Scan_Code)
- ;
- ; Save the required registers
- ; If this is a make code
- ; Set the up/right flag bit
- ; If joystick type is binary
- ; Set joystick X position to JOY_MAX
- ; Set joystick Y position to JOY_MIN
- ; Else
- ; If joystick mode is fast response
- ; If X position is <= X center value
- ; Set X position to X center value
- ; Endif
- ; If Y position is > Y center value
- ; Set Y position to Y center value
- ; Endif
- ; Endif for joystick fast response mode
- ; Endif for joystick type binary
- ; Else this is a break code
- ; Reset the up/right flag bit
- ; If this is self-center mode
- ; Set joystick X position to X center value
- ; Set joystick Y position to Y center value
- ; Endif for self-center mode
- ; Endif for scan code
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_Up_Right Proc Near ; Joystick up/right procedure
- Save bx,cx ; Save the required registers
- or ah,ah ; Check for a make or break code
- js Up_Right_Break ; Jump if this is a break code
- Up_Right_Make:
- or Byte Ptr cs:[Joy_Status],UP_RIGHT
- mov bx,cs:[Joy_X_Pos] ; Get the current joystick X position
- mov cx,cs:[Joy_Y_Pos] ; Get the current joystick Y position
- test cs:[Joy_Flag],BINARY_TYPE
- jz Up_Right_Check ; Jump if NOT in binary mode
- mov bx,JOY_MAX ; Set X position to joystick maximum
- mov cx,JOY_MIN ; Set Y position to joystick minimum
- jmp Short Up_Right_Update ; Go update the X and Y positions
- Up_Right_Check:
- test cs:[Joy_Flag],FAST_MODE
- jz Up_Right_Done ; Jump if NOT in fast response mode
- cmp bx,cs:[Joy_X_Center] ; Check the current X position value
- ja Up_Right_Test ; Jump if already moving right
- mov bx,cs:[Joy_X_Center] ; Center the joystick X position
- Up_Right_Test:
- cmp cx,cs:[Joy_Y_Center] ; Check the current Y position value
- jbe Up_Right_Update ; Jump if already moving up
- mov cx,cs:[Joy_Y_Center] ; Center the joystick Y position
- Up_Right_Update:
- mov cs:[Joy_X_Pos],bx ; Update the current X position value
- mov cs:[Joy_Y_Pos],cx ; Update the current Y position value
- jmp Short Up_Right_Done ; Go return to the caller
- Up_Right_Break:
- and Byte Ptr cs:[Joy_Status],Not UP_RIGHT
- test cs:[Joy_Flag],SELF_CENTER
- jz Up_Right_Done ; Jump if NOT in self-center mode
- mov bx,cs:[Joy_X_Center] ; Get the current X center value
- mov cs:[Joy_X_Pos],bx ; Set X position to center value
- mov bx,cs:[Joy_Y_Center] ; Get the current Y center value
- mov cs:[Joy_Y_Pos],bx ; Set Y position to center value
- Up_Right_Done:
- Restore bx,cx ; Restore the required registers
- ret ; Return to the caller
- Joy_Up_Right Endp ; End of the Joy_Up_Right procedure
- Subttl Joy_Left Joystick Left Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_Left(Scan_Code)
- ;
- ; Save the required registers
- ; If this is a make code
- ; Set the left flag bit
- ; If joystick type is binary
- ; If joystick mode is NOT flight mode
- ; Set joystick Y pos. to Y center value
- ; Endif
- ; Set joystick X position to JOY_MIN
- ; Else
- ; If joystick mode is fast response
- ; If X position is > X center value
- ; Set X position to X center value
- ; Endif
- ; Endif for joystick fast response mode
- ; Endif for joystick type binary
- ; Else this is a break code
- ; Reset the up flag bit
- ; If this is self-center mode
- ; Set joystick X position to X center value
- ; Endif for self-center mode
- ; Endif for scan code
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_Left Proc Near ; Joystick left procedure
- Save bx ; Save the required registers
- or ah,ah ; Check for a make or break code
- js Left_Break ; Jump if this is a break code
- Left_Make:
- or Byte Ptr cs:[Joy_Status],LEFT
- mov bx,cs:[Joy_X_Pos] ; Get the current joystick X position
- test cs:[Joy_Flag],BINARY_TYPE
- jz Left_Check ; Jump if NOT in binary mode
- test cs:[Joy_Flag],FLIGHT_MODE
- jnz Left_Binary ; Jump if in flight mode
- mov bx,cs:[Joy_Y_Center] ; Get the current Y center value
- mov cs:[Joy_Y_Pos],bx ; Set Y position to center value
- Left_Binary:
- mov bx,JOY_MIN ; Set X position to joystick minimum
- jmp Short Left_Update ; Go update the X position
- Left_Check:
- test cs:[Joy_Flag],FAST_MODE
- jz Left_Done ; Jump if NOT in fast response mode
- cmp bx,cs:[Joy_X_Center] ; Check the current X position value
- jbe Left_Update ; Jump if already moving left
- mov bx,cs:[Joy_X_Center] ; Center the joystick X position
- Left_Update:
- mov cs:[Joy_X_Pos],bx ; Update the current X position value
- jmp Short Left_Done ; Go return to the caller
- Left_Break:
- and Byte Ptr cs:[Joy_Status],Not LEFT
- test cs:[Joy_Flag],SELF_CENTER
- jz Left_Done ; Jump if NOT in self-center mode
- mov bx,cs:[Joy_X_Center] ; Get the current X center value
- mov cs:[Joy_X_Pos],bx ; Set X position to center value
- Left_Done:
- Restore cx ; Restore the required registers
- ret ; Return to the caller
- Joy_Left Endp ; End of the Joy_Left procedure
- Subttl Joy_Center Joystick Center Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_Center(Scan_Code)
- ;
- ; Save the required registers
- ; If this is a make code
- ; Center the joystick X and Y positions
- ; Endif
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_Center Proc Near ; Joystick center procedure
- Save bx ; Save the required registers
- or ah,ah ; Check for a make or break code
- js Center_Done ; Jump if this is a break code
- Center_Make:
- mov bx,cs:[Joy_X_Center] ; Get the current X center value
- mov cs:[Joy_X_Pos],bx ; Set X position to center value
- mov bx,cs:[Joy_Y_Center] ; Get the current Y center value
- mov cs:[Joy_Y_Pos],bx ; Set Y position to center value
- Center_Done:
- Restore bx ; Restore the required registers
- ret ; Return to the caller
- Joy_Center Endp ; End of the Joy_Center procedure
- Subttl Joy_Right Joystick Right Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_Right(Scan_Code)
- ;
- ; Save the required registers
- ; If this is a make code
- ; Set the right flag bit
- ; If joystick type is binary
- ; If joystick mode is NOT flight mode
- ; Set joystick Y pos. to Y center value
- ; Endif
- ; Set joystick X position to JOY_MAX
- ; Else
- ; If joystick mode is fast response
- ; If X position is <= X center value
- ; Set X position to X center value
- ; Endif
- ; Endif for joystick fast response mode
- ; Endif for joystick type binary
- ; Else this is a break code
- ; Reset the up flag bit
- ; If this is self-center mode
- ; Set joystick X position to X center value
- ; Endif for self-center mode
- ; Endif for scan code
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_Right Proc Near ; Joystick right procedure
- Save bx ; Save the required registers
- or ah,ah ; Check for a make or break code
- js Right_Break ; Jump if this is a break code
- Right_Make:
- or Byte Ptr cs:[Joy_Status],RIGHT
- mov bx,cs:[Joy_X_Pos] ; Get the current joystick X position
- test cs:[Joy_Flag],BINARY_TYPE
- jz Right_Check ; Jump if NOT in binary mode
- test cs:[Joy_Flag],FLIGHT_MODE
- jnz Right_Binary ; Jump if in flight mode
- mov bx,cs:[Joy_Y_Center] ; Get the current Y center value
- mov cs:[Joy_Y_Pos],bx ; Set Y position to center value
- Right_Binary:
- mov bx,JOY_MAx ; Set X position to joystick maximum
- jmp Short Right_Update ; Go update the X position
- Right_Check:
- test cs:[Joy_Flag],FAST_MODE
- jz Right_Done ; Jump if NOT in fast response mode
- cmp bx,cs:[Joy_X_Center] ; Check the current X position value
- ja Right_Update ; Jump if already moving right
- mov bx,cs:[Joy_X_Center] ; Center the joystick X position
- Right_Update:
- mov cs:[Joy_X_Pos],bx ; Update the current X position value
- jmp Short Right_Done ; Go return to the caller
- Right_Break:
- and Byte Ptr cs:[Joy_Status],Not RIGHT
- test cs:[Joy_Flag],SELF_CENTER
- jz Right_Done ; Jump if NOT in self-center mode
- mov bx,cs:[Joy_X_Center] ; Get the current X center value
- mov cs:[Joy_X_Pos],bx ; Set X position to center value
- Right_Done:
- Restore cx ; Restore the required registers
- ret ; Return to the caller
- Joy_Right Endp ; End of the Joy_Right procedure
- Subttl Joy_Down_Left Joystick Down/Left Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_Down_Left(Scan_Code)
- ;
- ; Save the required registers
- ; If this is a make code
- ; Set the down/left flag bit
- ; If joystick type is binary
- ; Set joystick X position to JOY_MIN
- ; Set joystick Y position to JOY_MAX
- ; Else
- ; If joystick mode is fast response
- ; If X position is > X center value
- ; Set X position to X center value
- ; Endif
- ; If Y position is <= Y center value
- ; Set Y position to Y center value
- ; Endif
- ; Endif for joystick fast response mode
- ; Endif for joystick type binary
- ; Else this is a break code
- ; Reset the down/left flag bit
- ; If this is self-center mode
- ; Set joystick X position to X center value
- ; Set joystick Y position to Y center value
- ; Endif for self-center mode
- ; Endif for scan code
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_Down_Left Proc Near ; Joystick down/left procedure
- Save bx,cx ; Save the required registers
- or ah,ah ; Check for a make or break code
- js Down_Left_Break ; Jump if this is a break code
- Down_Left_Make:
- or Byte Ptr cs:[Joy_Status],DOWN_LEFT
- mov bx,cs:[Joy_X_Pos] ; Get the current joystick X position
- mov cx,cs:[Joy_Y_Pos] ; Get the current joystick Y position
- test cs:[Joy_Flag],BINARY_TYPE
- jz Down_Left_Check ; Jump if NOT in binary mode
- mov bx,JOY_MIN ; Set X position to joystick minimum
- mov cx,JOY_MAX ; Set Y position to joystick maximum
- jmp Short Down_Left_Update ; Go update the X and Y positions
- Down_Left_Check:
- test cs:[Joy_Flag],FAST_MODE
- jz Down_Left_Done ; Jump if NOT in fast response mode
- cmp bx,cs:[Joy_X_Center] ; Check the current X position value
- jbe Down_Left_Test ; Jump if already moving left
- mov bx,cs:[Joy_X_Center] ; Center the joystick X position
- Down_Left_Test:
- cmp cx,cs:[Joy_Y_Center] ; Check the current Y position value
- ja Down_Left_Update ; Jump if already moving down
- mov cx,cs:[Joy_Y_Center] ; Center the joystick Y position
- Down_Left_Update:
- mov cs:[Joy_X_Pos],bx ; Update the current X position value
- mov cs:[Joy_Y_Pos],cx ; Update the current Y position value
- jmp Short Down_Left_Done ; Go return to the caller
- Down_Left_Break:
- and Byte Ptr cs:[Joy_Status],Not DOWN_LEFT
- test cs:[Joy_Flag],SELF_CENTER
- jz Down_Left_Done ; Jump if NOT in self-center mode
- mov bx,cs:[Joy_X_Center] ; Get the current X center value
- mov cs:[Joy_X_Pos],bx ; Set X position to center value
- mov bx,cs:[Joy_Y_Center] ; Get the current Y center value
- mov cs:[Joy_Y_Pos],bx ; Set Y position to center value
- Down_Left_Done:
- Restore bx,cx ; Restore the required registers
- ret ; Return to the caller
- Joy_Down_Left Endp ; End of the Joy_Down_Left procedure
- Subttl Joy_Down Joystick Down Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_Down(Scan_Code)
- ;
- ; Save the required registers
- ; If this is a make code
- ; Set the down flag bit
- ; If joystick type is binary
- ; If joystick mode is NOT flight mode
- ; Set joystick X pos. to X center value
- ; Endif
- ; Set joystick Y position to JOY_MAX
- ; Else
- ; If joystick mode is fast response
- ; If Y position is <= X center value
- ; Set Y position to Y center value
- ; Endif
- ; Endif for joystick fast response mode
- ; Endif for joystick type binary
- ; Else this is a break code
- ; Reset the down flag bit
- ; If this is self-center mode
- ; Set joystick Y position to Y center value
- ; Endif for self-center mode
- ; Endif for scan code
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_Down Proc Near ; Joystick down procedure
- Save cx ; Save the required registers
- or ah,ah ; Check for a make or break code
- js Down_Break ; Jump if this is a break code
- Down_Make:
- or Byte Ptr cs:[Joy_Status],DOWN
- mov cx,cs:[Joy_Y_Pos] ; Get the current joystick Y position
- test cs:[Joy_Flag],BINARY_TYPE
- jz Down_Check ; Jump if NOT in binary mode
- test cs:[Joy_Flag],FLIGHT_MODE
- jnz Down_Binary ; Jump if in flight mode
- mov cx,cs:[Joy_X_Center] ; Get the current X center value
- mov cs:[Joy_X_Pos],cx ; Set X position to center value
- Down_Binary:
- mov cx,JOY_MAX ; Set Y position to joystick maximum
- jmp Short Down_Update ; Go update the Y position
- Down_Check:
- test cs:[Joy_Flag],FAST_MODE
- jz Down_Done ; Jump if NOT in fast response mode
- cmp cx,cs:[Joy_Y_Center] ; Check the current Y position value
- ja Down_Update ; Jump if already moving down
- mov cx,cs:[Joy_Y_Center] ; Center the joystick Y position
- Down_Update:
- mov cs:[Joy_Y_Pos],cx ; Update the current Y position value
- jmp Short Down_Done ; Go return to the caller
- Down_Break:
- and Byte Ptr cs:[Joy_Status],Not DOWN
- test cs:[Joy_Flag],SELF_CENTER
- jz Down_Done ; Jump if NOT in self-center mode
- mov cx,cs:[Joy_Y_Center] ; Get the current Y center value
- mov cs:[Joy_Y_Pos],cx ; Set Y position to center value
- Down_Done:
- Restore cx ; Restore the required registers
- ret ; Return to the caller
- Joy_Down Endp ; End of the Joy_Down procedure
- Subttl Joy_Down_Right Joystick Down/Right Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_Down_Right(Scan_Code)
- ;
- ; Save the required registers
- ; If this is a make code
- ; Set the down/right flag bit
- ; If joystick type is binary
- ; Set joystick X position to JOY_MAX
- ; Set joystick Y position to JOY_MAX
- ; Else
- ; If joystick mode is fast response
- ; If X position is <= X center value
- ; Set X position to X center value
- ; Endif
- ; If Y position is <= Y center value
- ; Set Y position to Y center value
- ; Endif
- ; Endif for joystick fast response mode
- ; Endif for joystick type binary
- ; Else this is a break code
- ; Reset the down/right flag bit
- ; If this is self-center mode
- ; Set joystick X position to X center value
- ; Set joystick Y position to Y center value
- ; Endif for self-center mode
- ; Endif for scan code
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_Down_Right Proc Near ; Joystick down/right procedure
- Save bx,cx ; Save the required registers
- or ah,ah ; Check for a make or break code
- js Down_Right_Break ; Jump if this is a break code
- Down_Right_Make:
- or Byte Ptr cs:[Joy_Status],DOWN_RIGHT
- mov bx,cs:[Joy_X_Pos] ; Get the current joystick X position
- mov cx,cs:[Joy_Y_Pos] ; Get the current joystick Y position
- test cs:[Joy_Flag],BINARY_TYPE
- jz Down_Right_Check ; Jump if NOT in binary mode
- mov bx,JOY_MAX ; Set X position to joystick maximum
- mov cx,JOY_MAX ; Set Y position to joystick maximum
- jmp Short Down_Right_Update ; Go update the X and Y positions
- Down_Right_Check:
- test cs:[Joy_Flag],FAST_MODE
- jz Down_Right_Done ; Jump if NOT in fast response mode
- cmp bx,cs:[Joy_X_Center] ; Check the current X position value
- ja Down_Right_Test ; Jump if already moving right
- mov bx,cs:[Joy_X_Center] ; Center the joystick X position
- Down_Right_Test:
- cmp cx,cs:[Joy_Y_Center] ; Check the current Y position value
- ja Down_Right_Update ; Jump if already moving down
- mov cx,cs:[Joy_Y_Center] ; Center the joystick Y position
- Down_Right_Update:
- mov cs:[Joy_X_Pos],bx ; Update the current X position value
- mov cs:[Joy_Y_Pos],cx ; Update the current Y position value
- jmp Short Down_Right_Done ; Go return to the caller
- Down_Right_Break:
- and Byte Ptr cs:[Joy_Status],Not DOWN_RIGHT
- test cs:[Joy_Flag],SELF_CENTER
- jz Down_Right_Done ; Jump if NOT in self-center mode
- mov bx,cs:[Joy_X_Center] ; Get the current X center value
- mov cs:[Joy_X_Pos],bx ; Set X position to center value
- mov bx,cs:[Joy_Y_Center] ; Get the current Y center value
- mov cs:[Joy_Y_Pos],bx ; Set Y position to center value
- Down_Right_Done:
- Restore bx,cx ; Restore the required registers
- ret ; Return to the caller
- Joy_Down_Right Endp ; End of the Joy_Down_Right procedure
- Subttl Joy_X_Res_Inc Joystick X Resolution Increase Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_X_Res_Inc(Scan_Code)
- ;
- ; Save the required registers
- ; If this is joystick mode
- ; If this is a make code
- ; If the shift key is down
- ; Do a small X resolution increment
- ; Else
- ; Do a normal X resolution increment
- ; Endif
- ; Make sure X resolution is in range
- ; Endif this is a break code
- ; Endif for joystick mode
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_X_Res_Inc Proc Near ; Joystick X resolution inc. procedure
- Save bx ; Save the required registers
- test cs:[Key_Status],JOY_MODE; Check for keyboard in joystick mode
- jz X_Res_Inc_Done ; Jump if NOT in joystick mode
- or ah,ah ; Check for a make or break code
- js X_Res_Inc_Done ; Jump if this is a break code
- mov bx,cs:[Joy_X_Res] ; Get the current X resolution value
- test cs:[Key_Status],SHIFTED ; Check for shift key down
- jz Do_X_Res_Inc ; Jump if shift key is NOT held down
- add bx,SMALL_RES ; Add small change value to resolution
- jmp Short X_Res_Inc_Check ; Go check the X resolution value
- Do_X_Res_Inc:
- add bx,NORMAL_RES ; Add normal change value to resolution
- X_Res_Inc_Check:
- jc X_Res_Inc_Bad ; Jump if X increment is bad
- cmp bx,MAX_RES ; Check against maximum resolution
- jbe X_Res_Inc_Update ; Go update X resolution if in range
- X_Res_Inc_Bad:
- mov bx,MAX_RES ; Set X resolution to maximum value
- X_Res_Inc_Update:
- mov cs:[Joy_X_Res],bx ; Update the X resolution value
- X_Res_Inc_Done:
- Restore bx ; Restore the required registers
- ret ; Return to the caller
- Joy_X_Res_Inc Endp ; End of the Joy_X_Res_Inc procedure
- Subttl Joy_X_Res_Dec Joystick X Resolution Decrease Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_X_Res_Dec(Scan_Code)
- ;
- ; Save the required registers
- ; If this is joystick mode
- ; If this is a make code
- ; If the shift key is down
- ; Do a small X resolution decrement
- ; Else
- ; Do a normal X resolution decrement
- ; Endif
- ; Make sure X resolution is in range
- ; Endif this is a break code
- ; Endif for joystick mode
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_X_Res_Dec Proc Near ; Joystick X resolution dec. procedure
- Save bx ; Save the required registers
- test cs:[Key_Status],JOY_MODE; Check for keyboard in joystick mode
- jz X_Res_Dec_Done ; Jump if NOT in joystick mode
- or ah,ah ; Check for a make or break code
- js X_Res_Dec_Done ; Jump if this is a break code
- mov bx,cs:[Joy_X_Res] ; Get the current X resolution value
- test cs:[Key_Status],SHIFTED ; Check for Shift key down
- jz Do_X_Res_Dec ; Jump if shift key is NOT held down
- sub bx,SMALL_RES ; Subtract small change value
- jmp Short X_Res_Dec_Check ; Go check the X resolution value
- Do_X_Res_Dec:
- sub bx,NORMAL_RES ; Subtract normal change value
- X_Res_Dec_Check:
- jc X_Res_Dec_Bad ; Jump if X decrement is bad
- cmp bx,MIN_RES ; Check against minimum resolution
- jae X_Res_Dec_Update ; Go update X resolution if in range
- X_Res_Dec_Bad:
- mov bx,MIN_RES ; Set X resolution to minimum value
- X_Res_Dec_Update:
- mov cs:[Joy_X_Res],bx ; Update the X resolution value
- X_Res_Dec_Done:
- Restore bx ; Restore the required registers
- ret ; Return to the caller
- Joy_X_Res_Dec Endp ; End of the Joy_X_Res_Dec procedure
- Subttl Joy_Y_Res_Inc Joystick Y Resolution Increase Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_Y_Res_Inc(Scan_Code)
- ;
- ; Save the required registers
- ; If this is joystick mode
- ; If this is a make code
- ; If the shift key is down
- ; Do a small Y resolution increment
- ; Else
- ; Do a normal Y resolution increment
- ; Endif
- ; Make sure Y resolution is in range
- ; Endif this is a break code
- ; Endif for joystick mode
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_Y_Res_Inc Proc Near ; Joystick Y resolution inc. procedure
- Save bx ; Save the required registers
- test cs:[Key_Status],JOY_MODE; Check for keyboard in joystick mode
- jz Y_Res_Inc_Done ; Jump if NOT in joystick mode
- or ah,ah ; Check for a make or break code
- js Y_Res_Inc_Done ; Jump if this is a break code
- mov bx,cs:[Joy_Y_Res] ; Get the current Y resolution value
- test cs:[Key_Status],SHIFTED ; Check for shift key down
- jz Do_Y_Res_Inc ; Jump if shift key is NOT held down
- add bx,SMALL_RES ; Add small change value to resolution
- jmp Short Y_Res_Inc_Check ; Go check the Y resolution value
- Do_Y_Res_Inc:
- add bx,NORMAL_RES ; Add normal change value to resolution
- Y_Res_Inc_Check:
- jc Y_Res_Inc_Bad ; Jump if Y increment is bad
- cmp bx,MAX_RES ; Check against maximum resolution
- jbe Y_Res_Inc_Update ; Go update Y resolution if in range
- Y_Res_Inc_Bad:
- mov bx,MAX_RES ; Set Y resolution to maximum value
- Y_Res_Inc_Update:
- mov cs:[Joy_Y_Res],bx ; Update the Y resolution value
- Y_Res_Inc_Done:
- Restore bx ; Restore the required registers
- ret ; Return to the caller
- Joy_Y_Res_Inc Endp ; End of the Joy_Y_Res_Inc procedure
- Subttl Joy_Y_Res_Dec Joystick Y Resolution Decrease Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_Y_Res_Dec(Scan_Code)
- ;
- ; Save the required registers
- ; If this is joystick mode
- ; If this is a make code
- ; If the shift key is down
- ; Do a small Y resolution decrement
- ; Else
- ; Do a normal Y resolution decrement
- ; Endif
- ; Make sure Y resolution is in range
- ; Endif this is a break code
- ; Endif for joystick mode
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_Y_Res_Dec Proc Near ; Joystick Y resolution dec. procedure
- Save bx ; Save the required registers
- test cs:[Key_Status],JOY_MODE; Check for keyboard in joystick mode
- jz Y_Res_Dec_Done ; Jump if NOT joystick mode
- or ah,ah ; Check for a make or break code
- js Y_Res_Dec_Done ; Jump if this is a break code
- mov bx,cs:[Joy_Y_Res] ; Get the current Y resolution value
- test cs:[Key_Status],SHIFTED ; Check for shift key down
- jz Do_Y_Res_Dec ; Jump if shift key is NOT held down
- sub bx,SMALL_RES ; Subtract small change value
- jmp Short Y_Res_Dec_Check ; Go check the Y resolution value
- Do_Y_Res_Dec:
- sub bx,NORMAL_RES ; Subtract normal change value
- Y_Res_Dec_Check:
- jc Y_Res_Dec_Bad ; Jump if Y decrement is bad
- cmp bx,MIN_RES ; Check against minimum resolution
- jae Y_Res_Dec_Update ; Go update Y resolution if in range
- Y_Res_Dec_Bad:
- mov bx,MIN_RES ; Set Y resolution to minimum value
- Y_Res_Dec_Update:
- mov cs:[Joy_Y_Res],bx ; Update the Y resolution value
- Y_Res_Dec_Done:
- Restore bx ; Restore the required registers
- ret ; Return to the caller
- Joy_Y_Res_Dec Endp ; End of the Joy_Y_Res_Dec procedure
- Subttl Joy_X_Cen_Inc Joystick X Center Increase Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_X_Cen_Inc(Scan_Code)
- ;
- ; Save the required registers
- ; If this is joystick mode
- ; If this is a make code
- ; If the shift key is down
- ; Do a small X center increment
- ; Do a small X position increment
- ; Else
- ; Do a normal X center increment
- ; Do a normal X position increment
- ; Endif
- ; Make sure X center is in range
- ; make sure X position is in range
- ; Endif this is a break code
- ; Endif for joystick mode
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_X_Cen_Inc Proc Near ; Joystick X center increment procedure
- Save bx,cx ; Save the required registers
- test cs:[Key_Status],JOY_MODE; Check for keyboard in joystick mode
- jz X_Cen_Inc_Done ; Jump if NOT in joystick mode
- or ah,ah ; Check for a make or break code
- js X_Cen_Inc_Done ; Jump if this is a break code
- test cs:[Key_Status],SHIFTED ; Check for shift key down
- jz Do_X_Cen_Inc ; Jump if shift key is NOT held down
- mov bx,SMALL_CENTER ; Setup small change value for center
- mov cx,SMALL_CENTER ; Setup small change value for position
- jmp Short X_Cen_Inc_Check ; Go check the X center value
- Do_X_Cen_Inc:
- mov bx,NORMAL_CENTER ; Setup normal change value for center
- mov cx,NORMAL_CENTER ; Setup normal change value for position
- X_Cen_Inc_Check:
- add bx,cs:[Joy_X_Center] ; Compute the new X center value
- jc X_Cen_Inc_Bad ; Jump if X increment is bad
- cmp bx,MAX_CENTER ; Check against maximum center
- jbe X_Cen_Inc_Update ; Go update X center if in range
- X_Cen_Inc_Bad:
- mov bx,MAX_CENTER ; Set X center to maximum value
- X_Cen_Inc_Update:
- mov cs:[Joy_X_Center],bx ; Update the X center value
- X_Pos_Inc_Check:
- add cx,cs:[Joy_X_Pos] ; Compute the new X position value
- jnc X_Pos_Inc_Update ; Jump if X position is ok
- mov cx,JOY_MAX ; Setup X position to maximum
- X_Pos_Inc_Update:
- mov cs:[Joy_X_Pos],cx ; Update the X position value
- X_Cen_Inc_Done:
- Restore bx,cx ; Restore the required registers
- ret ; Return to the caller
- Joy_X_Cen_Inc Endp ; End of the Joy_X_Cen_Inc procedure
- Subttl Joy_X_Cen_Dec Joystick X Center Decrease Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_X_Cen_Dec(Scan_Code)
- ;
- ; Save the required registers
- ; If this is joystick mode
- ; If this is a make code
- ; If the shift key is down
- ; Do a small X center decrement
- ; Do a small X position decrement
- ; Else
- ; Do a normal X center decrement
- ; Do a normal X position decrement
- ; Endif
- ; Make sure X center is in range
- ; Make sure X position is in range
- ; Endif this is a break code
- ; Endif for joystick mode
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_X_Cen_Dec Proc Near ; Joystick X center decrement procedure
- Save ax,bx,cx ; Save the required registers
- test cs:[Key_Status],JOY_MODE; Check for keyboard in joystick mode
- jz X_Cen_Dec_Done ; Jump if NOT in joystick mode
- or ah,ah ; Check for a make or break code
- js X_Cen_Dec_Done ; Jump if this is a break code
- test cs:[Key_Status],SHIFTED ; Check for Shift key down
- jz Do_X_Cen_Dec ; Jump if shift key is NOT held down
- mov bx,SMALL_CENTER ; Setup small change value for center
- mov cx,SMALL_CENTER ; Setup small change value for position
- jmp Short X_Cen_Dec_Check ; Go check the X center value
- Do_X_Cen_Dec:
- mov bx,NORMAL_CENTER ; Setup normal change value for center
- mov cx,NORMAL_CENTER ; Setup normal change value for position
- X_Cen_Dec_Check:
- mov ax,cs:[Joy_X_Center] ; Get the current X center value
- sub ax,bx ; Compute the new X center value
- jc X_Cen_Dec_Bad ; Jump if X decrement is bad
- cmp ax,MIN_CENTER ; Check against minimum center
- jae X_Cen_Dec_Update ; Go update X center if in range
- X_Cen_Dec_Bad:
- mov ax,MIN_CENTER ; Set X center to minimum value
- X_Cen_Dec_Update:
- mov cs:[Joy_X_Center],ax ; Update the X center value
- X_Pos_Dec_Check:
- mov ax,cs:[Joy_X_Pos] ; Get the current X position value
- sub ax,cx ; Compute the new X position value
- jnc X_Pos_Dec_Update ; Jump if X position is ok
- mov ax,JOY_MIN ; Setup X position to minimum
- X_Pos_Dec_Update:
- mov cs:[Joy_X_Pos],ax ; Update the X position value
- X_Cen_Dec_Done:
- Restore ax,bx,cx ; Restore the required registers
- ret ; Return to the caller
- Joy_X_Cen_Dec Endp ; End of the Joy_X_Cen_Dec procedure
- Subttl Joy_Y_Cen_Inc Joystick Y Center Increase Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_Y_Cen_Inc(Scan_Code)
- ;
- ; Save the required registers
- ; If this is joystick mode
- ; If this is a make code
- ; If the shift key is down
- ; Do a small Y center increment
- ; Do a small Y position increment
- ; Else
- ; Do a normal Y center increment
- ; Do a normal Y position increment
- ; Endif
- ; Make sure Y center is in range
- ; Make sure Y position is in range
- ; Endif this is a break code
- ; Endif for joystick mode
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_Y_Cen_Inc Proc Near ; Joystick Y center increment procedure
- Save bx,cx ; Save the required registers
- test cs:[Key_Status],JOY_MODE; Check for keyboard in joystick mode
- jz Y_Cen_Inc_Done ; Jump if NOT in joystick mode
- or ah,ah ; Check for a make or break code
- js Y_Cen_Inc_Done ; Jump if this is a break code
- test cs:[Key_Status],SHIFTED ; Check for shift key down
- jz Do_Y_Cen_Inc ; Jump if shift key is NOT held down
- mov bx,SMALL_CENTER ; Setup small change value for center
- mov cx,SMALL_CENTER ; Setup small change value for position
- jmp Short Y_Cen_Inc_Check ; Go check the Y center value
- Do_Y_Cen_Inc:
- mov bx,NORMAL_CENTER ; Setup normal change value for center
- mov cx,NORMAL_CENTER ; Setup normal change value for position
- Y_Cen_Inc_Check:
- add bx,cs:[Joy_Y_Center] ; Compute the new Y center value
- jc Y_Cen_Inc_Bad ; Jump if Y increment is bad
- cmp bx,MAX_CENTER ; Check against maximum center
- jbe Y_Cen_Inc_Update ; Go update Y center if in range
- Y_Cen_Inc_Bad:
- mov bx,MAX_CENTER ; Set Y center to maximum value
- Y_Cen_Inc_Update:
- mov cs:[Joy_Y_Center],bx ; Update the Y center value
- Y_Pos_Inc_Check:
- add cx,cs:[Joy_Y_Pos] ; Compute the new Y position value
- jnc Y_Pos_Inc_Update ; Jump if Y position is ok
- mov cx,JOY_MAX ; Setup Y position to maximum
- Y_Pos_Inc_Update:
- mov cs:[Joy_Y_Pos],cx ; Update the Y position value
- Y_Cen_Inc_Done:
- Restore bx,cx ; Restore the required registers
- ret ; Return to the caller
- Joy_Y_Cen_Inc Endp ; End of the Joy_Y_Cen_Inc procedure
- Subttl Joy_Y_Cen_Dec Joystick Y Center Decrease Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_Y_Cen_Dec(Scan_Code)
- ;
- ; Save the required registers
- ; If this is joystick mode
- ; If this is a make code
- ; If the shift key is down
- ; Do a small Y center decrement
- ; Do a small Y position decrement
- ; Else
- ; Do a normal Y center decrement
- ; Do a normal Y position decrement
- ; Endif
- ; Make sure Y center is in range
- ; Make sure Y position is in range
- ; Endif this is a break code
- ; Endif for joystick mode
- ; Restore the required registers
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_Y_Cen_Dec Proc Near ; Joystick Y center decrement procedure
- Save ax,bx,cx ; Save the required registers
- test cs:[Key_Status],JOY_MODE; Check for keyboard in joystick mode
- jz Y_Cen_Dec_Done ; Jump if NOT joystick mode
- or ah,ah ; Check for a make or break code
- js Y_Cen_Dec_Done ; Jump if this is a break code
- test cs:[Key_Status],SHIFTED ; Check for shift key down
- jz Do_Y_Cen_Dec ; Jump if shift key is NOT held down
- mov bx,SMALL_CENTER ; Setup small change value for center
- mov cx,SMALL_CENTER ; Setup small change value for position
- jmp Short Y_Cen_Dec_Check ; Go check the Y center value
- Do_Y_Cen_Dec:
- mov bx,NORMAL_CENTER ; Setup normal change value for center
- mov cx,NORMAL_CENTER ; Setup normal change value for position
- Y_Cen_Dec_Check:
- mov ax,cs:[Joy_Y_Center] ; Get the current Y center value
- sub ax,bx ; Compute the new Y center value
- jc Y_Cen_Dec_Bad ; Jump if Y decrement is bad
- cmp ax,MIN_CENTER ; Check against minimum center
- jae Y_Cen_Dec_Update ; Go update Y center if in range
- Y_Cen_Dec_Bad:
- mov ax,MIN_CENTER ; Set Y center to minimum value
- Y_Cen_Dec_Update:
- mov cs:[Joy_Y_Center],ax ; Update the Y center value
- Y_Pos_Dec_Check:
- mov ax,cs:[Joy_Y_Pos] ; Get the current Y position value
- sub ax,cx ; Compute the new Y position value
- jnc Y_Pos_Dec_Update ; Jump if Y position is ok
- mov ax,JOY_MIN ; Setup Y position to minimum
- Y_Pos_Dec_Update:
- mov cs:[Joy_Y_Pos],ax ; Update the Y position value
- Y_Cen_Dec_Done:
- Restore ax,bx,cx ; Restore the required registers
- ret ; Return to the caller
- Joy_Y_Cen_Dec Endp ; End of the Joy_Y_Cen_Dec procedure
- Subttl Joy_Button_1 Joystick Button 1 Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_Button_1(Scan_Code)
- ;
- ; If this is a make code
- ; Set the button 1 pressed flag
- ; Else this is a break code
- ; Reset the button 1 pressed flag
- ; Endif
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_Button_1 Proc Near ; Joystick button 1 procedure
- or ah,ah ; Check for a make or break code
- js Button_1_Break ; Jump if this is a break code
- Button_1_Make:
- or Byte Ptr cs:[Joy_Flag],BUTTON_1_DOWN
- jmp Short Button_1_Done ; Go return to the caller
- Button_1_Break:
- and Byte Ptr cs:[Joy_Flag],Not BUTTON_1_DOWN
- Button_1_Done:
- ret ; Return to the caller
- Joy_Button_1 Endp ; End of the Joy_Button_1 procedure
- Subttl Joy_Button_2 Joystick Button 2 Routine
- Page +
- ;******************************************************************************
- ;
- ; Joy_Button_2(Scan_Code)
- ;
- ; If this is a make code
- ; Set the button 2 pressed flag
- ; Else this is a break code
- ; Reset the button 2 pressed flag
- ; Endif
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; AH - Original scan code
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joy_Button_2 Proc Near ; Joystick button 2 procedure
- or ah,ah ; Check for a make or break code
- js Button_2_Break ; Jump if this is a break code
- Button_2_Make:
- or Byte Ptr cs:[Joy_Flag],BUTTON_2_DOWN
- jmp Short Button_2_Done ; Go return to the caller
- Button_2_Break:
- and Byte Ptr cs:[Joy_Flag],Not BUTTON_2_DOWN
- Button_2_Done:
- ret ; Return to the caller
- Joy_Button_2 Endp ; End of the Joy_Button_2 procedure
- Subttl Joystick_Update Joystick Update Routine
- Page +
- ;******************************************************************************
- ;
- ; Joystick_Update()
- ;
- ; Save the required registers
- ; If in joystick mode
- ; If NOT a binary type joystick
- ; Zero the X position delta value
- ; Zero the Y position delta value
- ; If the joystick up is set
- ; Subtract Y resolution from Y delta value
- ; Endif
- ; If the joystick down is set
- ; Add Y resolution to Y delta value
- ; Endif
- ; If the joystick left is set
- ; Subtract X resolution from X delta value
- ; Endif
- ; If the joystick right is set
- ; Add X resolution to X delta value
- ; Endif
- ; Add X delta value to current X position
- ; Make sure X position is in range
- ; Add Y delta value to current Y position
- ; Make sure Y position is in range
- ; Endif for binary type
- ; Endif for joystick mode
- ; Return to the caller
- ;
- ; Registers on Entry:
- ;
- ; None
- ;
- ; Registers on Exit:
- ;
- ; None
- ;
- ;******************************************************************************
- Even ; Force procedure to even address
- Joystick_Update Proc Near ; Joystick update procedure
- Save ax,bx,cx ; Save the required registers
- mov al,cs:[Joy_Status] ; Get the joystick status byte
- xor bx,bx ; Zero the X position delta value
- xor cx,cx ; Zero the Y position delta value
- test cs:[Key_Status],JOY_MODE; Check for keyboard in joystick mode
- jz Update_Done ; Jump if NOT in joystick mode
- test cs:[Joy_Flag],BINARY_TYPE
- jnz Update_Done ; Jump if in binary mode
- Up_Test:
- test al,UP + UP_LEFT + UP_RIGHT
- jz Down_Test ; Jump if NOT moving in up direction
- sub cx,cs:[Joy_Y_Res] ; Subtract from Y position delta value
- Down_Test:
- test al,DOWN + DOWN_LEFT + DOWN_RIGHT
- jz Left_Test ; Jump if NOT moving in down direction
- add cx,cs:[Joy_Y_Res] ; Add to the Y position delta value
- Left_Test:
- test al,LEFT + UP_LEFT + DOWN_LEFT
- jz Right_Test ; Jump if NOT moving in left direction
- sub bx,cs:[Joy_X_Res] ; Subtract from X position delta value
- Right_Test:
- test al,RIGHT + UP_RIGHT + DOWN_RIGHT
- jz Update_X ; Jump if NOT moving in right direction
- add bx,cs:[Joy_X_Res] ; Add to the X position delta value
- Update_X:
- or bx,bx ; Check for a positive/negative value
- js Subtract_X ; Jump if X delta value is negative
- Add_X:
- add bx,cs:[Joy_X_Pos] ; Compute the new X position value
- jnc Update_Y ; Jump if X update is ok
- X_Update_Bad:
- mov bx,JOY_MAX ; Set X position to joystick maximum
- jmp Short Update_Y ; Go update the Y position value
- Subtract_X:
- add bx,cs:[Joy_X_Pos] ; Compute the new X position value
- jc Update_Y ; Jump if X update is ok
- Bad_X_Update:
- mov bx,JOY_MIN ; Set X position to joystick minimum
- Update_Y:
- or cx,cx ; Check for a positive/negative value
- js Subtract_Y ; Jump if Y delta value is negative
- Add_Y:
- add cx,cs:[Joy_Y_Pos] ; Compute the new Y position value
- jnc Update_Position ; Jump if Y update is ok
- Y_Update_Bad:
- mov cx,JOY_MAX ; Set Y position to joystick maximum
- jmp Short Update_Position ; Go update the joystick position
- Subtract_Y:
- add cx,cs:[Joy_Y_Pos] ; Compute the new Y position value
- jc Update_Position ; Jump if Y update is ok
- Bad_Y_Update:
- mov cx,JOY_MIN ; Set Y position to joystick minimum
- Update_Position:
- mov cs:[Joy_X_Pos],bx ; Update the joystick X position
- mov cs:[Joy_Y_Pos],cx ; Update the joystick Y position
- Update_Done:
- Restore ax,bx,cx ; Restore the required registers
- ret ; Return to the caller
- Joystick_Update Endp ; End of the Joystick_Update procedure
- ;******************************************************************************
- ;
- ; Define the joystick status
- ;
- ; -----------------
- ; |7|6|5|4|3|2|1|0|
- ; -----------------
- ; | | | | | | | |
- ; | | | | | | | -------> Joystick up held down
- ; | | | | | | ---------> Joystick down held down
- ; | | | | | -----------> Joystick left held down
- ; | | | | -------------> Joystick right held down
- ; | | | ---------------> Joystick up/left held down
- ; | | -----------------> Joystick up/right held down
- ; | -------------------> Joystick down/left held down
- ; ---------------------> Joystick down/right held down
- ;
- ;******************************************************************************
- Joy_Status Db 0 ; Joystick status byte
- UP Equ 01h ; Joystick up position flag
- DOWN Equ 02h ; Joystick down position flag
- LEFT Equ 04h ; Joystick left position flag
- RIGHT Equ 08h ; Joystick right position flag
- UP_LEFT Equ 10h ; Joystick up/left position flag
- UP_RIGHT Equ 20h ; Joystick up/right position flag
- DOWN_LEFT Equ 40h ; Joystick down/left position flag
- DOWN_RIGHT Equ 80h ; Joystick down/right position flag
- ;******************************************************************************
- ;
- ; Define the joystick flags
- ;
- ; -----------------
- ; |7|6|5|4|3|2|1|0|
- ; -----------------
- ; | | | | | | | |
- ; | | | | | | | -------> Button 1 held down
- ; | | | | | | ---------> Button 2 held down
- ; | | | | | -----------> Joystick type (0 = Analog, 1 = Binary)
- ; | | | | -------------> Joystick center mode (0 = Normal, 1 = Self)
- ; | | | ---------------> Joystick flight mode (0 = Normal, 1 = Flight)
- ; | | -----------------> Joystick response mode (0 = Slow, 1 = Fast)
- ; | -------------------> ***** Reserved *****
- ; ---------------------> ***** Reserved *****
- ;
- ;******************************************************************************
- Joy_Flag Db BINARY_TYPE ; Joystick flag byte
- BUTTON_1_DOWN Equ 01h ; Joystick button 1 held down flag
- BUTTON_2_DOWN Equ 02h ; Joystick button 2 held down flag
- BINARY_TYPE Equ 04h ; Joystick binary type flag
- SELF_CENTER Equ 08h ; Joystick self center flag
- FLIGHT_MODE Equ 10h ; Joystick flight mode flag
- FAST_MODE Equ 20h ; Joystick fast mode flag
- ;******************************************************************************
- ;
- ; Define any other joystick variables
- ;
- ;******************************************************************************
- Joy_X_Pos Dw CENTER_VALUE ; Joystick X axis position value
- Joy_Y_Pos Dw CENTER_VALUE ; Joystick Y axis position value
- Joy_X_Center Dw CENTER_VALUE ; Joystick X axis center value
- Joy_Y_Center Dw CENTER_VALUE ; Joystick Y axis center value
- Joy_X_Res Dw START_RES ; Joystick X resolution value
- Joy_Y_Res Dw START_RES ; Joystick Y resolution value
- Joy_X_Count Db ? ; Joystick X counter value
- Joy_Y_Count Db ? ; Joystick Y counter value
- ;******************************************************************************
- ;
- ; Define the end of the Emulator Code Segment
- ;
- ;******************************************************************************
- Emulate Ends
- End ; End of the Joystick module