www.pudn.com > GAMEPAD_V0.89.rar > GAMEPAD_V0.89.dt
;=========================================
; USB 8 KEY GAMEPAD
; MODIFY BY HOWARD 08/08/2002
; MODIFY BY NEKO 06/05/2003
;=========================================
;===============================================================================
; PROGRAM REGISTERS
;===============================================================================
R0 == 0X00
TCC == 0X01
PC == 0X02
STATUS == 0X03
RSR == 0X04
PORT5 == 0X05
PORT6 == 0X06
PORT7 == 0X07
R8 == 0X08
R9 == 0X09
RA == 0X0A
RB == 0X0B
RC == 0X0C
RD == 0X0D
RE == 0X0E
RF == 0X0F
;=================================================================================
; USB REGISTERS ASSIGN
;=================================================================================
TRANSFER == 0X10; [0]CMD REPORT DATA FINISH(0) OR NOT(1) [1]DEVICE CONFIG REPORT OK(1) OR NOT(0)
A_TEMP == 0X11
STATUS_TEMP == 0X12
RSR_TEMP == 0X13
PACK_MAX == 0X14
INCRE == 0X15
DATA_MAX == 0X16
PC_WANT == 0X17
PORT6_STATE == 0X18
PORT6_TEMP == 0X19
PORT7_STATE == 0X1A
PORT7_TEMP == 0X1B
X_DATA == 0X1C
Y_DATA == 0X1D
BTM_DATA == 0X1E
CMD_SELECT == 0X1F; EP0 CMD SELECTOR
BTM_DATA2 == 0X20
REP_DATA == 0X21; TURBO SET REGISTER
REP_DATA2 == 0X22; TURBO SET REGISTER2
CHECKPOINT == 0X23; [0]TURBO SET [1]TURBO CLR
TMP_DATA == 0X24; LAST KEY STATUS
TMP_DATA2 == 0X25; LAST KEY STATUS2
TEMP == 0X26
TEMP1 == 0X27
TCTEMP == 0X28; TURBO REPORT CHECK TEMP
BYTE0 == 0X38
BYTE1 == 0X39
BYTE2 == 0X3A
BYTE3 == 0X3B
BYTE4 == 0X3C
BYTE5 == 0X3D
BYTE6 == 0X3E
BYTE7 == 0X3F
;========================================================================
; PROGRAM START
;========================================================================
ORG 0X00
JMP INITIAL
ORG 0X0A
DISI
MOV A_TEMP,A ;SAVE A
SWAP A_TEMP
SWAPA RSR ;SAVE RSR(R4)
MOV RSR_TEMP,A
SWAPA STATUS ;SAVE STATUS(R3)
MOV STATUS_TEMP,A
CLR RSR
JMP INT_STATE
;============================================================
; DESCRIPTORS
;============================================================
DEVICE_TABLE:
;LIST:
ADD PC,A
RETL @0X12;0 START OF DEVICE DESCRIPTOR
RETL @0X01;1
RETL @0X00;2
RETL @0X01;3
RETL @0X00;4
RETL @0X00;5
RETL @0X00;6
RETL @0X08;7
;TRANS == 1
RETL @0X03;8 Vendor ID(assigned by USB)
RETL @0X06;9
RETL @0X75;A Product ID 0x0001 (assigned by manufacturer)
RETL @0X68;B
RETL @0X00;C Device release number (assigned by manufacturer)
RETL @0X01;D
RETL @0X00;E Index of String descriptor describing manufacturer
RETL @0X22;F Index of string descriptor describing product
;TRANS == 2
RETL @0X00;10 Index of String descriptor desribing the device's serial number
RETL @0X01;11 END OF DEVICE DESCRIPTOR
;TRANS == 3
CONFIG_TABLE:
TBL
;CONFIGURATION DESCRIPTOR
RETL @0X09;12 START OF CONFIG
RETL @0X02;13
RETL @0X22;14
RETL @0X00;15
RETL @0X01;16
RETL @0X01;17
RETL @0X00;18
RETL @0X80;19
;TRANS ==1
RETL @0X32;1A
RETL @0X09;1B START OF INTERFACE
RETL @0X04;1C
RETL @0X00;1D
RETL @0X00;1E
RETL @0X01;1F
RETL @0X03;20
RETL @0X00;21
;TRANS ==2
RETL @0X00;22
RETL @0X00;23
RETL @0X09;24 START OF HID
RETL @0X21;25
RETL @0X00;26
RETL @0X01;27
RETL @0X00;28
RETL @0X01;29
;TRANS ==3
RETL @0X22;2A
RETL @0X39;2B
RETL @0X00;2C
RETL @0X07;2D START OF ENDPOINT
RETL @0X05;2E
RETL @0X81;2F
RETL @0X03;30
RETL @0X08;31
;TRANS ==4
RETL @0X00;32
RETL @0X0A;33
;TRANS ==5 INCRE == 12
HID_TABLE:
TBL
;REPORT DESCRIPT
RETL @0X05;34 INCRE == 34 DATA_MAX == 39
RETL @0X01;35
RETL @0X09;36
RETL @0X05;37
RETL @0XA1;38
RETL @0X01;39
RETL @0X09;3A
RETL @0X01;3B
;8BYTES--TRANS==1
RETL @0XA1;3C
RETL @0X00;3D
RETL @0X09;3E
RETL @0X30;3F
RETL @0X09;40
RETL @0X31;41
RETL @0X15;42
RETL @0X00;43
;16BYTES--TRANS==2
RETL @0X26;44
RETL @0XFF;45
RETL @0X00;46
RETL @0X35;47
RETL @0X00;48
RETL @0X46;49
RETL @0XFF;4A
RETL @0X00;4B
;24BYTES--TRANS==3
RETL @0X66;4C
RETL @0X00;4D
RETL @0X00;4E
RETL @0X95;4F
RETL @0X02;50
RETL @0X75;51
RETL @0X08;52
RETL @0X81;53
;32BYTES--4
RETL @0X02;54
RETL @0XC0;55
RETL @0X05;56
RETL @0X09;57
RETL @0X19;58
RETL @0X01;59
RETL @0X29;5A
RETL @0X0A;5B 10KEY
;40BYTES--5
RETL @0X15;5C
RETL @0X00;5D
RETL @0X25;5E
RETL @0X01;5F
RETL @0X95;60
RETL @0X0A;61 10KEY
RETL @0X75;62
RETL @0X01;63
;48BYTES--6
RETL @0X81;64
RETL @0X02;65
RETL @0X95;
RETL @0X01;
RETL @0X75;
RETL @0X06;
RETL @0X81;
RETL @0X01;
;56bytes--7
RETL @0XC0;66 End of Report Descriptor
/*
RETL @0X95;67
RETL @0X01;68
RETL @0X81;69
RETL @0X06;6A
RETL @0X09;6B
;56BYTES--7
RETL @0X3C;6C
RETL @0X15;6D
RETL @0X00;6E
RETL @0X25;6F
RETL @0X01;70
RETL @0X75;71
RETL @0X01;72
RETL @0X95;73
;64BYTES--8
RETL @0X01;74
RETL @0XB1;75
RETL @0X22;76
RETL @0X95;77
RETL @0X07;78
RETL @0XB1;79
RETL @0X01;7A
RETL @0XC0;7B END OF REPORT DESCRIPTOR
;72BYTES--9
*/
STRING0T:
TBL
RETL @0X04;7C STRING DESCRIPTOR OF LANGUAGES
RETL @0X03;7D
RETL @0X09;7E
RETL @0X04;7F END OF LANGUAGES
;TRANS == 1 INCRE == 7C DATA_MAX == 4
STRING1T:
TBL
RETL @0X4E;80 STRING DESCRIPTOR OF MANUFACTURE
RETL @0X03;81 NEKO Microelectronics Corporation
RETL @0X4E;82 N
RETL @0X00;83
RETL @0X45;84 E
RETL @0X00;85
RETL @0X4B;86 K
RETL @0X00;87
;TRANS == 1
RETL @0X4F;88 O
RETL @0X00;89
RETL @0X20;8A SPACE
RETL @0X00;8B
RETL @0X4D;8C M
RETL @0X00;8D
RETL @0X69;8E i
RETL @0X00;8F
;TRANS == 2
RETL @0X63;90 c
RETL @0X00;91
RETL @0X72;92 r
RETL @0X00;93
RETL @0X6F;94 o
RETL @0X00;95
RETL @0X65;96 e
RETL @0X00;97
;TRANS == 3
RETL @0X6C;98 l
RETL @0X00;99
RETL @0X65;9A e
RETL @0X00;9B
RETL @0X63;9C c
RETL @0X00;9D
RETL @0X74;9E t
RETL @0X00;9F
RETL @0X72;A0 r
RETL @0X00;A1
RETL @0X6F;A2 o
RETL @0X00;A3
RETL @0X6E;A4 n
RETL @0X00;A5
RETL @0X69;A6 i
RETL @0X00;A7
RETL @0X63;A8 c
RETL @0X00;A9
RETL @0X73;AA s
RETL @0X00;AB
RETL @0X20;AC SPACE
RETL @0X00;AD
RETL @0X43;AE C
RETL @0X00;AF
RETL @0X6F;B0 o
RETL @0X00;B1
RETL @0X72;B2 r
RETL @0X00;B3
RETL @0X70;B4 p
RETL @0X00;B5
RETL @0X6F;B6 o
RETL @0X00;B7
RETL @0X72;B8 r
RETL @0X00;B9
RETL @0X61;BA a
RETL @0X00;BB
RETL @0X74;BC t
RETL @0X00;BD
RETL @0X69;BE i
RETL @0X00;BF
RETL @0X6F;C0 o
RETL @0X00;C1
RETL @0X6E;C2 n
RETL @0X00;
RETL @0X20; SPACE
RETL @0X00;
RETL @0X46; F
RETL @0X00;
RETL @0X55; U
RETL @0X00;
RETL @0X43; C
RETL @0X00;
RETL @0X4B; K
RETL @0X00;C3 End of Manufacture String Descriptor
STRING2T:
TBL
RETL @0X22;C4 Strat of Product String Descriptor
RETL @0X03;C5 INCRE == C4 DATA_MAX == 22
RETL @0X55;C6
RETL @0X00;C7
RETL @0X53;C8
RETL @0X00;C9
RETL @0X42;CA
RETL @0X00;CB
RETL @0X20;CC
RETL @0X00;CD
RETL @0X47;CE
RETL @0X00;CF
RETL @0X61;D0
RETL @0X00;D1
RETL @0X6D;D2
RETL @0X00;D3
RETL @0X65;D4
RETL @0X00;D5
RETL @0X50;D6
RETL @0X00;D7
RETL @0X61;D8
RETL @0X00;D9
RETL @0X64;DA
RETL @0X00;DB
RETL @0X20;DC
RETL @0X00;DD
RETL @0X53;DE
RETL @0X00;DF
RETL @0X54;E0
RETL @0X00;E1
RETL @0X44;E2
RETL @0X00;E3
RETL @0X2E;E4
RETL @0X00;E5 End of Product String Descriptor
;==========================================================================
; END OF DESCRIPTOR
;==========================================================================
INITIAL:
DISI
MOV A,@0B11010000 ;DUALCLOCK DIS, WUE DIS, RUN BIT SET
IOW 0X0E
MOV A,@0B00000011
IOW 0X05 ;SET BIT0 D+/DATA, BIT 1 D-/CLK PINS INPUT
MOV A,@0XFF
MOV R8,A ;DISABLE PORT6 CHANGE WAKEUP
MOV R9,A ;DISABLE PORT7 CHANGE WAKEUP
CLR RF
CLR 0X3E ;CLR RAM
CLR 0X3F
USB_MODE:
MOV A,@0B11000001
IOW 0X0A ;SET TO USB MODE
CALL CLRRAMU
CLR RC
CLR RD
CLR RF
CLR TRANSFER
CLRA
CONTW
MOV A,@0B00000110
IOW 0X0F ;ENABLE EP0 INTERRUPT”BUSB SUSPEND INTERRUPT
MOV A,@0XFF
IOW 0X06 ;SET PORT6 INPUT
IOW 0X07 ;SET PORT7 INPUT
IOW 0X0C ;PULL HIGH PORT6
IOW 0X0D ;PULL HIGH PORT7
MOV A,@0XFF
MOV R8,A ;PORT6 WAKEUP DISABLE
MOV R9,A ;PORT7 WAKEUP DISABLE
MOV PORT6_TEMP,A
MOV A,@0X0F
MOV PORT7_TEMP,A
JMP START
INT_STATE:
BC STATUS,5 ;SET PAGE0
;JBC RF,0
;JMP TCC_INT
JBC RF,1
JMP EP0_INT
JBC RF,2
JMP SUSPEND_INT
JBC RF,3
JMP RESET_INT
JMP INT_RET
TCC_INT:
JMP INT_RET
EP0_INT:
JMP READ_COMMAND
SUSPEND_INT:
JBS TRANSFER,1
JMP INT_RET
JMP SUSPEND_READY
RESET_INT:
SUSPEND_READY:
MOV A,@0B00000000
MOV R8,A ;ENABLE PORT6 WAKEUP
MOV A,@0B00000000
MOV R9,A ;ENABLE PORT7 WAKEUP
MOV PORT6,PORT6 ;SAVE PORT6 STATE
MOV PORT7,PORT7 ;SAVE PORT7 STATE
IOR 0X0E
AND A,@0B10101111 ;ENABLE WAKEUP FUNCTION &amt; GO TO SLEP MODE
IOW 0X0E
NOP
NOP
;MOV A,@0B01010000 ;go to dual mode
;IOW 0X0E
JBC RC,2 ;check host_suspend bit
BS RC,3 ;host_suspend = 1 set dev_resume bit
CALL DELAY_22
CALL DELAY_22
;CALL DELAY_22
MOV A,@0B11010000 ;DISABLE WAKEUP FUNCTION &amt; GO TO NORMAL MODE
IOW 0X0E
;JBC RC,2 ;SUSPEND SIGNAL
;BS RC,3
;JMP PORT_CHANGE
PR:
MOV A,@0XFF
MOV R8,A
MOV R9,A
BC RF,2
JMP INT_RET
PORT_CHANGE:
BS RC,3
JBC RC,2
JMP PORT_CHANGE
JMP PR
/* MOV A,@0B11000001
IOW 0X0A ;SET TO 256K Hz
MOV A,PORT6
MOV XY_STATE_REG,A
MOV A,PORT7
MOV WHL_STATE_REG,A
IOR 0X0E
AND A,@0B01111111
IOW 0X0E ;SET TO DUAL MODE
CLR RF
WAIT_WAKE_LOOP:
MOV A,PORT6
XOR A,XY_STATE_REG
JBC STATUS,2
JMP WAKEUP
MOV A,PORT7
XOR A,WHL_STATE_REG
JBC STATUS,2
JMP WAKEUP
JBC RF,4
JMP WAKEUP2
JMP WAIT_WAKE_LOOP
WAKEUP: ;DEVICE REMOTE WAKEUP PC
IOR 0X0E
OR A,@0B10000000 ;SET TO XTAL MODE
IOW 0X0E
BS RC,3 ;REMOTE WAKEUP PC
JMP INT_RET
WAKEUP2: ;PC WAKEUP DEVICE
IOR 0X0E
OR A,@0B10000000 ;SET TO XTAL MODE
IOW 0X0E
JMP INT_RET
*/
INT_RET:
CLR RF
SWAPA STATUS_TEMP
MOV STATUS,A
SWAPA RSR_TEMP
MOV RSR,A
SWAPA A_TEMP
RETI
START:
ENI
MAIN:
JBC RC,6
JMP MAIN2
JBC TRANSFER,0
JMP REPORT ;go to reload USB command data
MAIN2:
JBS TRANSFER,1 ;IF CONFIG IS NOT OK WILL NOT SCAN
JMP MAIN
JBS RC,5
CALL SCAN
JMP MAIN
READ_COMMAND:
CLR RD
MOV A,RE
MOV BYTE0,A
MOV A,RE
MOV BYTE1,A
MOV A,RE
MOV BYTE2,A
MOV A,RE
MOV BYTE3,A
MOV A,RE
MOV BYTE4,A
MOV A,RE
MOV BYTE5,A
MOV A,RE
MOV BYTE6,A
MOV A,RE
MOV BYTE7,A
MOV A,@0X10
MOV RD,A
CLR RE
BC RC,7
BC TRANSFER,0
DECODE:
MOV A,@0X21
XOR A,BYTE0
JBC STATUS,2
JMP SET_IDLE
MOV A,@0X01
XOR A,BYTE3
JBC STATUS,2
JMP DEVICE_SET
MOV A,@0X02
XOR A,BYTE3
JBC STATUS,2
JMP CONFIG_SET
MOV A,@0X22
XOR A,BYTE3
JBC STATUS,2
JMP HID_REPORT_SET
MOV A,@0X0A
XOR A,BYTE1
JBC STATUS,2
JMP SET_IDLE
MOV A,@0X03
XOR A,BYTE3
JBC STATUS,2
JMP STRING_SET
JMP STALL
STALL:
BS RC,0
BC RC,7
BC RF,1
JMP INT_RET
SET_IDLE:
CLR INCRE
CLR CMD_SELECT
CLRA
MOV DATA_MAX,A
MOV PC_WANT,A
BS TRANSFER,0
JMP INT_RET
DEVICE_SET:
CLR INCRE
MOV A,@0X01
MOV CMD_SELECT,A
MOV A,@0X12
MOV DATA_MAX,A
MOV A,BYTE6
MOV PC_WANT,A
BS TRANSFER,0
JMP INT_RET
CONFIG_SET:
;MOV A,@0X12
;MOV INCRE,A
CLR INCRE
MOV A,@0X02
MOV CMD_SELECT,A
MOV A,@0X22
MOV DATA_MAX,A
MOV A,BYTE6
MOV PC_WANT,A
BS TRANSFER,0
JMP INT_RET
HID_REPORT_SET:
;MOV A,@0X34
;MOV INCRE,A
CLR INCRE
MOV A,@0X03
MOV CMD_SELECT,A
MOV A,@0X39
MOV DATA_MAX,A
MOV A,BYTE6
MOV PC_WANT,A
BS TRANSFER,0
BS TRANSFER,1
JMP INT_RET
STRING_SET:
MOV A,@0X00
XOR A,BYTE2
JBC STATUS,2
JMP STRING0
MOV A,BYTE2
XOR A,@0X01
JBC STATUS,2
JMP STRING1
MOV A,BYTE2
XOR A,@0X22
JBC STATUS,2
JMP STRING2
STRING0:
;MOV A,@0X82
;MOV INCRE,A
CLR INCRE
MOV A,@0X04
MOV CMD_SELECT,A
MOV A,@0X04
MOV DATA_MAX,A
MOV A,BYTE6
MOV PC_WANT,A
BS TRANSFER,0
JMP INT_RET
STRING1:
;MOV A,@0X86
;MOV INCRE,A
CLR INCRE
MOV A,@0X05
MOV CMD_SELECT,A
MOV A,@0X4E
MOV DATA_MAX,A
MOV A,BYTE6
MOV PC_WANT,A
BS TRANSFER,0
JMP INT_RET
STRING2:
;MOV A,@0XCA
;MOV INCRE,A
CLR INCRE
MOV A,@0X06
MOV CMD_SELECT,A
MOV A,@0X22
MOV DATA_MAX,A
MOV A,BYTE6
MOV PC_WANT,A
BS TRANSFER,0
JMP INT_RET
END1:
BC RC,7
BS RC,6
BC RF,1
JMP MAIN
FINISH:
BC RC,7
BS RC,6
BC RF,1
BC TRANSFER,0
JMP MAIN
REPORT:
BS RC,7
JBS RC,1
JMP REPORT_INITIAL
BC RC,7
JMP MAIN
REPORT_INITIAL: ;CLEAR POINTER AND COUNTER
MOV A,@0X10
MOV RD,A
CLR RE
CLR RD
REPORT_START:
CLRA
XOR A,DATA_MAX
JBC STATUS,2
JMP FINISH
MOV A,@0X08
MOV PACK_MAX,A
CLR RD
REPORT_LOOP:
;MOV A,INCRE
;CALL LIST
MOV A,CMD_SELECT
TBL
NOP
JMP DEVICEL
JMP CONFIGL
JMP HIDL
JMP STRING0L
JMP STRING1L
JMP STRING2L
DEVICEL:
MOV A,INCRE
CALL DEVICE_TABLE
JMP LOOP
CONFIGL:
MOV A,INCRE
CALL CONFIG_TABLE
JMP LOOP
HIDL:
MOV A,INCRE
CALL HID_TABLE
JMP LOOP
STRING0L:
MOV A,INCRE
CALL STRING0T
JMP LOOP
STRING1L:
MOV A,INCRE
CALL STRING1T
JMP LOOP
STRING2L:
MOV A,INCRE
CALL STRING2T
JMP LOOP
LOOP:
MOV RE,A
INC INCRE
DEC PC_WANT
CLRA
XOR A,PC_WANT
JBC STATUS,2
JMP FINISH
DJZ PACK_MAX
JMP P1
DEC DATA_MAX
JMP END1
P1:
DEC DATA_MAX
CLRA
XOR A,DATA_MAX
JBC STATUS,2
JMP FINISH
JMP REPORT_LOOP
;-----------------------------------------------------------
; START OF SCAN BTM
;-----------------------------------------------------------
SCAN:
MOV A,PORT6
OR A,@0X01
MOV PORT6_STATE,A
MOV A,PORT7
;AND A,@0X0F
MOV PORT7_STATE,A
MOV A,PORT6_STATE
XOR A,PORT6_TEMP
JBS STATUS,2
JMP DATA_CHANGE
MOV A,PORT7_STATE
XOR A,PORT7_TEMP
JBS STATUS,2
JMP DATA_CHANGE
NON_CHANGE:
CALL TURBO
RET
DATA_CHANGE:
CLR BTM_DATA
CLR BTM_DATA2
CLR CHECKPOINT
MOV A,@0X80
MOV X_DATA,A
MOV Y_DATA,A
JBS PORT7_STATE,4 ;BTM 9
BS BTM_DATA2,0
JBS PORT7_STATE,6 ;BTM 10
BS BTM_DATA2,1
JBS PORT6_STATE,0 ;BTM 8
BS BTM_DATA,7
JBS PORT6_STATE,5 ;BTM 4
BS BTM_DATA,3
JBS PORT6_STATE,2 ;BTM 7
BS BTM_DATA,6
JBS PORT6_STATE,4 ;BTM 6
BS BTM_DATA,5
JBS PORT6_STATE,1 ;BTM 3
BS BTM_DATA,2
JBS PORT6_STATE,6 ;BTM 1
BS BTM_DATA,0
JBS PORT6_STATE,7 ;BTM 2
BS BTM_DATA,1
JBS PORT7_STATE,1 ;BTM 5
BS BTM_DATA,4
;test TURBO
JBS PORT7_STATE,5 ;TURBO SET
BS CHECKPOINT,0
JBS PORT7_STATE,7 ;TURBO CLR
BS CHECKPOINT,1
MOV A,BTM_DATA
MOV TMP_DATA,A
MOV A,BTM_DATA2
MOV TMP_DATA2,A
TURBO_SET_CHECK:
JBS CHECKPOINT,0
JMP CLR_CHECK
MOV A,BTM_DATA
OR REP_DATA,A
MOV A,BTM_DATA2
OR REP_DATA2,A
CLR_CHECK:
JBS CHECKPOINT,1
JMP GOTURBO
MOV A,BTM_DATA
XOR A,REP_DATA
AND REP_DATA,A
MOV A,BTM_DATA2
XOR A,REP_DATA2
AND REP_DATA2,A
GOTURBO:
BS TRANSFER,3
CALL TURBO
BC TRANSFER,3
U_D_SCAN:
;UP DOWN SCAN
JBS PORT6_STATE,3
JMP UP
JBS PORT7_STATE,2
JMP DOWN
MOV A,@0X80
MOV Y_DATA,A
;LEFT RIGHT SCAN
R_L_SCAN:
JBS PORT7_STATE,0
JMP RIGHT
JBS PORT7_STATE,3
JMP LEFT
MOV A,@0X80
MOV X_DATA,A
JMP RELOAD
UP:
CLR Y_DATA
JMP R_L_SCAN
DOWN:
MOV A,@0XFF
MOV Y_DATA,A
JMP R_L_SCAN
RIGHT:
MOV A,@0XFF
MOV X_DATA,A
JMP RELOAD
LEFT:
CLR X_DATA
JMP RELOAD
TURBO:
MOV A,0X03
AND REP_DATA2,A
CLRA
XOR A,REP_DATA2
JBS STATUS,2
JMP REPEAT
CLRA
XOR A,REP_DATA
JBC STATUS,2
RET
REPEAT:
/*
INC TMP_DATA
REPEAT_8:
JBC PORT6_STATE,0
JMP REPEAT_4
JBS REP_DATA,7
JMP REPEAT_4
BS BTM_DATA,7
JBS TMP_DATA,0
BC BTM_DATA,7
REPEAT_4:
JBC PORT6_STATE,5
JMP REPEAT_7
JBS REP_DATA,3
JMP REPEAT_7
BS BTM_DATA,3
JBS TMP_DATA,0
BC BTM_DATA,3
REPEAT_7:
JBC PORT6_STATE,2
JMP REPEAT_6
JBS REP_DATA,6
JMP REPEAT_6
BS BTM_DATA,6
JBS TMP_DATA,0
BC BTM_DATA,6
REPEAT_6:
JBC PORT6_STATE,4
JMP REPEAT_3
JBS REP_DATA,5
JMP REPEAT_3
BS BTM_DATA,5
JBS TMP_DATA,0
BC BTM_DATA,5
REPEAT_3:
JBC PORT6_STATE,1
JMP REPEAT_1
JBS REP_DATA,2
JMP REPEAT_1
BS BTM_DATA,2
JBS TMP_DATA,0
BC BTM_DATA,2
REPEAT_1:
JBC PORT6_STATE,6
JMP REPEAT_2
JBS REP_DATA,0
JMP REPEAT_2
BS BTM_DATA,0
JBS TMP_DATA,0
BC BTM_DATA,0
REPEAT_2:
JBC PORT6_STATE,7
JMP REPEAT_5
JBS REP_DATA,1
JMP REPEAT_5
BS BTM_DATA,1
JBS TMP_DATA,0
BC BTM_DATA,1
REPEAT_5:
JBC PORT7_STATE,1
JMP REPEAT_9
JBS REP_DATA,4
JMP REPEAT_9
BS BTM_DATA,4
JBS TMP_DATA,0
BC BTM_DATA,4
REPEAT_9:
JBC PORT7_STATE,4
JMP REPEAT_10
JBS REP_DATA2,0
JMP REPEAT_10
BS BTM_DATA2,0
JBS TMP_DATA,0
BC BTM_DATA2,0
REPEAT_10:
JBC PORT7_STATE,6
JMP RELOAD
JBS REP_DATA2,1
JMP RELOAD
BS BTM_DATA2,1
JBS TMP_DATA,0
BC BTM_DATA2,1
*/
MOV A,BTM_DATA
MOV TCTEMP,A
MOV A,TMP_DATA ;CHECK BITS WHICH R PRESSED AND WANNA REPEATED
AND A,REP_DATA
XOR BTM_DATA,A; ;LET TURBO KEY 0->1, 1->0
MOV A,BTM_DATA
XOR A,TCTEMP ;IF NOW BTM_STATUS IS THE SAME AS LAST BTM_STATUS ,IT WILL NOT SEND DATA
JBC STATUS,2
RET
MOV A,TMP_DATA2
AND A,REP_DATA2
XOR BTM_DATA2,A
JBC TRANSFER,3 ;NONCHANGE STATUS GO TO RELOAD
RET ;RETURN KEY-CHANGED LOOP, CHECK UP DOWN RRIGHT LEFT
;-----------------------------------------------------------
; END OF SCAN BTM
;-----------------------------------------------------------
;======================================================================
; END OF SCAN
;======================================================================
;====================================================
; START OF RELOAD
;====================================================
RELOAD:
MOV A,PORT6_STATE
MOV PORT6_TEMP,A
MOV A,PORT7_STATE
MOV PORT7_TEMP,A
MOV A,@0X01
MOV RD,A
MOV A,X_DATA
MOV RE,A
MOV A,Y_DATA
MOV RE,A
MOV A,BTM_DATA
MOV RE,A
MOV A,BTM_DATA2
MOV RE,A
BS RC,5
RETURN:
RET
;=====================================================================
; END OF RELOAD
;=====================================================================
DELAY_22:
JMP DELAY_20
DELAY_20:
JMP DELAY_18
DELAY_18:
JMP DELAY_16
DELAY_16:
JMP DELAY_14
DELAY_14:
JMP DELAY_12
DELAY_12:
JMP DELAY_10
DELAY_10:
JMP DELAY_08
DELAY_08:
JMP DELAY_06
DELAY_06:
JMP DELAY_04
DELAY_04:
JMP DELAY_02
DELAY_02:
RET
DELAY:
MOV TEMP,A
DELY:
DJZ TEMP
JMP DELY
RET
DMS:
MOV TEMP1,A
CLR TEMP
M647:
JMP M648
M648:
JMP M649
M649:
DJZ TEMP
JMP M647
DJZ TEMP1
JMP M647
RETL @0X00
CLRRAMU:
CLR 0X10
MOV A,@0X2F
MOV 0X10,A
MOV A,@0X11
MOV RSR,A
CLRLOOPU:
CLR R0
INC RSR
DJZ 0X10
JMP CLRLOOPU
CLR RSR
RET
EOP