📄 ps2d_mouse_cmd.lis
字号:
002C ; SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
002C ;
002C ; THEORY of OPERATION or PROCEDURE:
002C ;
002C ;-----------------------------------------------------------------------------
002C .SECTION
002C PS2D_GetResolution:
002C _PS2D_GetResolution:
002C 5103 mov a,[PS2D_bMouseResolution] ; Get the resolution
002E 7F ret
002F .ENDSECTION
002F ;-----------------------------------------------------------------------------
002F ; FUNCTION NAME: PS2D_GetDeviceID
002F ;
002F ; DESCRIPTION:
002F ;
002F ;-----------------------------------------------------------------------------
002F ;
002F ; ARGUMENTS:
002F ;
002F ; RETURNS:
002F ;
002F ; SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
002F ;
002F ; THEORY of OPERATION or PROCEDURE:
002F ;
002F .SECTION
002F PS2D_GetDeviceID:
002F _PS2D_GetDeviceID:
002F 5100 mov a, [PS2D_bDeviceID] ; Simply return the ID
0031 7F ret
0032 .ENDSECTION
0032 ;-----------------------------------------------------------------------------
0032 ; Mouse specific Dispatch routines
0032 ;-----------------------------------------------------------------------------
0032 ; FUNCTION NAME: PS2D_CmdSetSampleRate
0032 ; DESCRIPTION:
0032 ;
0032 ;-----------------------------------------------------------------------------
0032 ;
0032 ; ARGUMENTS:
0032 ;
0032 ; RETURNS:
0032 ;
0032 ; SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
0032 ;
0032 ; THEORY of OPERATION or PROCEDURE:
0032 ;
0032 ;-----------------------------------------------------------------------------
0032 .LITERAL
0032 0A14283C5064C8 PS2D_cValidSampleRates: DB 10, 20, 40, 60, 80, 100, 200
0039 643219110D0A05 PS2D_cValidSampleInterval: DB 100, 50, 25, 17, 13, 10, 5
0007 PS2D_cSizeOfValidSampleRates: equ PS2D_cValidSampleInterval - PS2D_cValidSampleRates
0040 .ENDLITERAL
0040
0040 PS2D_CmdSetSampleRate:
0040 .get_byte:
0040 9000 call PS2D_GetHostByte ; Get the host byte if one is available
0042 4B swap a,x ; Swap bytes to make the check
0043 3900 cmp a, 0x00 ; Zero signals we have a byte
0045 BFFA jnz .get_byte ; Keep trying to get the rate byte
0047
0047 ; Validate the sample rate
0047 ; Build a little stack frame
0047 4B swap a,x ; Get it back
0048 08 push a ; x-2 sample rate
0049 5000 mov a,0 ;
004B 08 push a ; x-1 index, initialized to 0
004C 4F mov x,sp ; Here we use x as a frame pointer
004D
004D .check_next:
004D 52FF mov a,[x-1]
004F FFE1 index PS2D_cValidSampleRates
0051 3BFE cmp a,[x-2]
0053 A00C jz .found
0055
0055 ; Flow here to increment the index and check for termination case
0055 77FF inc [x-1]
0057 3DFF07 cmp [x-1],PS2D_cSizeOfValidSampleRates
005A BFF2 jnz .check_next
005C
005C ; Flow here if the sample rate was not found in the table
005C 9000 call PS2D_SendResponseError ;
005E 8009 jmp .clean_up
0060
0060 ; Jump here when we valiate the sample rate
0060 .found:
0060 52FF mov a,[x-1] ; Get the index
0062 5301 mov [PS2D_bSampleRateIndex], a ; And save it
0064 9072 call PS2D_CheckWheelUnlock
0066
0066 9000 call PS2D_SendResponseACK ;
0068
0068 .clean_up:
0068 38FE add sp,-2 ; Clean up the stack
006A 7F ret
006B ;-----------------------------------------------------------------------------
006B ; FUNCTION NAME: PS2D_CmdResetWrapMode
006B ; DESCRIPTION:
006B ;
006B ;-----------------------------------------------------------------------------
006B ;
006B ; ARGUMENTS:
006B ;
006B ; RETURNS:
006B ;
006B ; SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
006B ;
006B ; THEORY of OPERATION or PROCEDURE:
006B ;
006B ;-----------------------------------------------------------------------------
006B PS2D_CmdResetWrapMode:
006B 5F0000 mov [PS2D_bMode],[PS2D_bLastMode] ; Restore the previous mode
006E 7F ret
006F ;-----------------------------------------------------------------------------
006F ; FUNCTION NAME: PS2D_CmdSetWrapMode
006F ; DESCRIPTION:
006F ;
006F ;-----------------------------------------------------------------------------
006F ;
006F ; ARGUMENTS:
006F ;
006F ; RETURNS:
006F ;
006F ; SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
006F ;
006F ; THEORY of OPERATION or PROCEDURE:
006F ;
006F ;-----------------------------------------------------------------------------
006F PS2D_CmdSetWrapMode:
006F 3C0002 cmp [PS2D_bLastMode], PS2D_CMD_MODE_WRAP_AROUND ; Are we already in Wrap Mode/
0072 A007 jz .exit ; Jump if we are already there
0074
0074 ; Flow here to enter Wrap Mode
0074 5F0000 mov [PS2D_bLastMode],[PS2D_bMode] ; Save the current mode
0077 550002 mov [PS2D_bMode], PS2D_CMD_MODE_WRAP_AROUND ; Set Wrap Mode
007A
007A ; Jump or flow here to exit
007A .exit:
007A 7F ret
007B ;-----------------------------------------------------------------------------
007B ; FUNCTION NAME: PS2D_CmdSetScaling_1_1
007B ; DESCRIPTION:
007B ;
007B ;-----------------------------------------------------------------------------
007B ;
007B ; ARGUMENTS:
007B ;
007B ; RETURNS:
007B ;
007B ; SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
007B ;
007B ; THEORY of OPERATION or PROCEDURE:
007B ;
007B ;-----------------------------------------------------------------------------
007B PS2D_CmdSetScaling_1_1:
007B 550200 mov [PS2D_bMouseScaling], 0x00 ; Set the scaling to 1:1
007E 7F ret
007F ;-----------------------------------------------------------------------------
007F ; FUNCTION NAME: PS2D_CmdSetScaling_2_1
007F ; DESCRIPTION:
007F ;
007F ;-----------------------------------------------------------------------------
007F ;
007F ; ARGUMENTS:
007F ;
007F ; RETURNS:
007F ;
007F ; SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
007F ;
007F ; THEORY of OPERATION or PROCEDURE:
007F ;
007F ;-----------------------------------------------------------------------------
007F PS2D_CmdSetScaling_2_1:
007F 550201 mov [PS2D_bMouseScaling], 0x01 ; Set the scaling to 2:1
0082 7F ret
0083 ;-----------------------------------------------------------------------------
0083 ; FUNCTION NAME: PS2D_CmdSetResolution
0083 ; DESCRIPTION:
0083 ;
0083 ;-----------------------------------------------------------------------------
0083 ;
0083 ; ARGUMENTS:
0083 ;
0083 ; RETURNS:
0083 ;
0083 ; SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
0083 ;
0083 ; THEORY of OPERATION or PROCEDURE:
0083 ;
0083 ; This lets _SendResponseXXXX do the return to the call (saves stack and code)
0083 ;-----------------------------------------------------------------------------
0083 .LITERAL
0083 01020408 PS2D_cValidResolutions: DB 1, 2, 4, 8
0087 PS2D_cEndOfValidResolutions:
0004 PS2D_cSizeOfValidResolutions: equ PS2D_cEndOfValidResolutions - PS2D_cValidResolutions
0087 .ENDLITERAL
0087
0087 PS2D_CmdSetResolution:
0087 .get_byte:
0087 9000 call PS2D_GetHostByte ; Get the host byte if one is available
0089 4B swap a,x ; Swap bytes to make the check
008A 3900 cmp a, 0x00 ; Zero signals we have a byte
008C BFFA jnz .get_byte
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -