📄 mapkey.asm
字号:
;====================================================
; File Name : MapKey.asm
; PF2107 PSX2 Dual Impact 2 (ASIC)
;
; Rev: Date: Author:
; 0.1 xx/06/00 Parco
;====================================================
mapkey:
btfsc D_A_mode ;Digital Mode?
goto out_map ;No. Analog Mode
bsf bit_L3 ;Yes
bsf bit_R3
out_map:
movlw 0xff
movwf key_out0
btfss bit_L3
bcf bit_L3_out
btfss bit_R3
bcf bit_R3_out
btfss bit_select
bcf bit_select_out
btfss bit_start
bcf bit_start_out
btfss bit_up
bcf bit_up_out
btfss bit_right
bcf bit_right_out
btfss bit_down
bcf bit_down_out
btfss bit_left
bcf bit_left_out
movf key_raw1,W
movwf key_out1
btfss bit_E1
bcf bit_L1_out
btfss bit_E2
bcf bit_R1_out
;-----------------------
btfsc D_A_mode
goto XY_end
movf xaxis_val,W
movwf temp_1 ;x1_val
movf yaxis_val,W
movwf temp_2 ;y1_val
call XY_map
movf zaxis_val,W
movwf temp_1 ;x1_val
movf raxis_val,W
movwf temp_2 ;y1_val
call XY_map
;--------------------------
XY_end:
btfsc bit_left_out
goto mapkey_down_1
bsf bit_right_out
movlw 0x00
movwf right_val
mapkey_down_1:
btfsc bit_down_out
goto mapkey_out_1
bsf bit_up_out
movlw 0x00
movwf up_val
;-------------------------
mapkey_out_1:
bsf STATUS,RP0
movf data3_4f,W
movwf sio_4f_data3
movf data2_4f,W
movwf sio_4f_data2
movf data1_4f,W
movwf sio_4f_data1
clrf mapkey_counter
clrf out_tmp
clrf mapkey_tmp
bcf STATUS,RP0
movf pad_id,W
andlw 0x0f
bsf STATUS,RP0
movwf mapkey_counter
addwf mapkey_counter,F
;-----------------------------------
mapkey1:
btfss sio_out_1
goto mapkey2
data_out1:
bcf STATUS,RP0
movf key_out0,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey2:
btfss sio_out_2
goto mapkey3
data_out2:
bcf STATUS,RP0
movf key_out1,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey3:
btfss sio_out_3
goto mapkey4
data_out3:
bcf STATUS,RP0
movf zaxis_val,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey4:
btfss sio_out_4
goto mapkey5
data_out4:
bcf STATUS,RP0
movf raxis_val,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey5:
btfss sio_out_5
goto mapkey6
data_out5:
bcf STATUS,RP0
movf xaxis_val,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey6:
btfss sio_out_6
goto mapkey7
data_out6:
bcf STATUS,RP0
movf yaxis_val,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey7:
btfss sio_out_7
goto mapkey8
data_out7:
bcf STATUS,RP0
movf right_val,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey8:
btfss sio_out_8
goto mapkey9
data_out8:
bcf STATUS,RP0
movf left_val,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey9:
btfss sio_out_9
goto mapkey10
data_out9:
bcf STATUS,RP0
movf up_val,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey10:
btfss sio_out_10
goto mapkey11
data_out10:
bcf STATUS,RP0
movf down_val,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey11:
btfss sio_out_11
goto mapkey12
data_out11:
bcf STATUS,RP0
movf tri_val,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey12:
btfss sio_out_12
goto mapkey13
data_out12:
bcf STATUS,RP0
movf O_val,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey13:
btfss sio_out_13
goto mapkey14
data_out13:
bcf STATUS,RP0
movf X_val,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey14:
btfss sio_out_14
goto mapkey15
data_out14:
bcf STATUS,RP0
movf square_val,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey15:
btfss sio_out_15
goto mapkey16
data_out15:
bcf STATUS,RP0
movf L1_val,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey16:
btfss sio_out_16
goto mapkey17
data_out16:
bcf STATUS,RP0
movf R1_val,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey17:
btfss sio_out_17
goto mapkey18
data_out17:
bcf STATUS,RP0
movf L2_val,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
btfsc STATUS,Z
goto mapkey_exit
mapkey18:
btfss sio_out_18
goto mapkey_exit
data_out18:
bcf STATUS,RP0
movf R2_val,W
bsf STATUS,RP0
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
decf mapkey_counter,F
; btfsc STATUS,Z
; goto mapkey_exit
goto mapkey_exit
;------------------------------------
out_finadata:
out_1:
movf mapkey_tmp,W
xorlw 0x01
btfss STATUS,Z
goto out_2
movf out_tmp,W
bcf STATUS,RP0
movwf finadata1
bsf STATUS,RP0
return
out_2
movf mapkey_tmp,W
xorlw 0x02
btfss STATUS,Z
goto out_3
movf out_tmp,W
bcf STATUS,RP0
movwf finadata2
bsf STATUS,RP0
return
out_3:
movf mapkey_tmp,W
xorlw 0x03
btfss STATUS,Z
goto out_4
movf out_tmp,W
bcf STATUS,RP0
movwf finadata3
bsf STATUS,RP0
return
out_4:
movf mapkey_tmp,W
xorlw 0x04
btfss STATUS,Z
goto out_5
movf out_tmp,W
bcf STATUS,RP0
movwf finadata4
bsf STATUS,RP0
return
out_5:
movf mapkey_tmp,W
xorlw 0x05
btfss STATUS,Z
goto out_6
movf out_tmp,W
bcf STATUS,RP0
movwf finadata5
bsf STATUS,RP0
return
out_6:
movf mapkey_tmp,W
xorlw 0x06
btfss STATUS,Z
goto out_7
movf out_tmp,W
bcf STATUS,RP0
movwf finadata6
bsf STATUS,RP0
return
out_7:
movf mapkey_tmp,W
xorlw 0x07
btfss STATUS,Z
goto out_8
movf out_tmp,W
bcf STATUS,RP0
movwf finadata7
bsf STATUS,RP0
return
out_8:
movf mapkey_tmp,W
xorlw 0x08
btfss STATUS,Z
goto out_9
movf out_tmp,W
bcf STATUS,RP0
movwf finadata8
bsf STATUS,RP0
return
out_9:
movf mapkey_tmp,W
xorlw 0x09
btfss STATUS,Z
goto out_10
movf out_tmp,W
bcf STATUS,RP0
movwf finadata9
bsf STATUS,RP0
return
out_10:
movf mapkey_tmp,W
xorlw 0x0a
btfss STATUS,Z
goto out_11
movf out_tmp,W
bcf STATUS,RP0
movwf finadata10
bsf STATUS,RP0
return
out_11:
movf mapkey_tmp,W
xorlw 0x0b
btfss STATUS,Z
goto out_12
movf out_tmp,W
bcf STATUS,RP0
movwf finadata11
bsf STATUS,RP0
return
out_12:
movf mapkey_tmp,W
xorlw 0x0c
btfss STATUS,Z
goto out_13
movf out_tmp,W
bcf STATUS,RP0
movwf finadata12
bsf STATUS,RP0
return
out_13:
movf mapkey_tmp,W
xorlw 0x0d
btfss STATUS,Z
goto out_14
movf out_tmp,W
bcf STATUS,RP0
movwf finadata13
bsf STATUS,RP0
return
out_14:
movf mapkey_tmp,W
xorlw 0x0e
btfss STATUS,Z
goto out_15
movf out_tmp,W
bcf STATUS,RP0
movwf finadata14
bsf STATUS,RP0
return
out_15:
movf mapkey_tmp,W
xorlw 0x0f
btfss STATUS,Z
goto out_16
movf out_tmp,W
bcf STATUS,RP0
movwf finadata15
bsf STATUS,RP0
return
out_16:
movf mapkey_tmp,W
xorlw 0x10
btfss STATUS,Z
goto out_17
movf out_tmp,W
bcf STATUS,RP0
movwf finadata16
bsf STATUS,RP0
return
out_17:
movf mapkey_tmp,W
xorlw 0x11
btfss STATUS,Z
goto out_18
movf out_tmp,W
bcf STATUS,RP0
movwf finadata17
bsf STATUS,RP0
return
out_18:
movf mapkey_tmp,W
xorlw 0x12
btfss STATUS,Z
return
movf out_tmp,W
bcf STATUS,RP0
movwf finadata18
bsf STATUS,RP0
return
;------------------------------
mapkey_exit:
bcf STATUS,RP0
movf pad_id,W
bsf STATUS,RP0
andlw 0x0f
movwf mapkey_counter
addwf mapkey_counter,F
mapkey_exit1:
movf mapkey_tmp,W
subwf mapkey_counter,W
btfss STATUS,Z
goto mapkey_exit2
bcf STATUS,RP0
return
mapkey_exit2:
movlw 0x00
movwf out_tmp
incf mapkey_tmp,F
call out_finadata
goto mapkey_exit1
;=================================================-
;--------------------------------------------
;conver_raw_to_out: ;key_raw0,key_raw1
;key_out0,key_out0
; bcf STATUS,RP0
; movlw 0xff
; movwf key_out0
;
; btfss bit_L3
; bcf bit_L3_out
; btfss bit_R3
; bcf bit_R3_out
; btfss bit_select
; bcf bit_select_out
; btfss bit_start
; bcf bit_start_out
; btfss bit_up
; bcf bit_up_out
; btfss bit_right
; bcf bit_right_out
; btfss bit_down
; bcf bit_down_out
; btfss bit_left
; bcf bit_left_out
;
; movf key_raw1,W
; movwf key_out1
;
; btfss bit_E1
; bcf bit_L1_out
;;
; btfss bit_E2
; bcf bit_R1_out
;
; return
;
;
;-------------E N D---------------
;======================================-
XY_map:
movlw 0xb2
subwf temp_1,W
btfsc STATUS,C ;>0xaf?
bcf bit_right_out ;Yes
movlw 0xa6
subwf temp_1,W ;<0xa4?
btfsc STATUS,C
bcf bit_right_out
X_left:
movlw 0x4c
subwf temp_1,W
btfss STATUS,C ;<0x4f?
bcf bit_left_out ;Yes
movlw 0x58
subwf temp_1,W
btfss STATUS,C
bcf bit_left_out
y_axis:
movlw 0xb2
subwf temp_2,W
btfsc STATUS,C
bcf bit_down_out
movlw 0xa6
subwf temp_2,W
btfsc STATUS,C
bcf bit_down_out
Y_down:
movlw 0x4c
subwf temp_2,W
btfss STATUS,C
bcf bit_up_out
movlw 0x58
subwf temp_2,W
btfss STATUS,C
bcf bit_up_out
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -