📄 mousealgorithm.lis
字号:
02EC 5F0101 mov [_gyroZMax+1],[_gyroZRaw+1]
02EF 5F0000 mov [_gyroZMax],[_gyroZRaw]
02F2 .dbline 204
02F2 ; }
02F2 L42:
02F2 .dbline 206
02F2 ;
02F2 ; gyroY = (((signed long)gyroYRaw)<<8)-gyroYBias;
02F2 5F0001 mov [__r3],[_gyroYRaw+1]
02F5 5F0000 mov [__r2],[_gyroYRaw]
02F8 550000 mov [__r1],0
02FB 550000 mov [__r0],0
02FE 5008 mov A,8
0300 X18:
0300 6500 asl [__r3]
0302 6B00 rlc [__r2]
0304 6B00 rlc [__r1]
0306 6B00 rlc [__r0]
0308 78 dec A
0309 BFF6 jnz X18
030B 5100 mov A,[__r3]
030D 1203 sub A,[_gyroYBias+3]
030F 5303 mov [_gyroY+3],A
0311 5100 mov A,[__r2]
0313 1A02 sbb A,[_gyroYBias+2]
0315 5302 mov [_gyroY+2],A
0317 5100 mov A,[__r1]
0319 1A01 sbb A,[_gyroYBias+1]
031B 5301 mov [_gyroY+1],A
031D 5100 mov A,[__r0]
031F 1A00 sbb A,[_gyroYBias]
0321 5300 mov [_gyroY],A
0323 .dbline 207
0323 ; gyroZ = (((signed long)gyroZRaw)<<8)-gyroZBias;
0323 5F0001 mov [__r3],[_gyroZRaw+1]
0326 5F0000 mov [__r2],[_gyroZRaw]
0329 550000 mov [__r1],0
032C 550000 mov [__r0],0
032F 5008 mov A,8
0331 X19:
0331 6500 asl [__r3]
0333 6B00 rlc [__r2]
0335 6B00 rlc [__r1]
0337 6B00 rlc [__r0]
0339 78 dec A
033A BFF6 jnz X19
033C 5100 mov A,[__r3]
033E 1203 sub A,[_gyroZBias+3]
0340 5303 mov [_gyroZ+3],A
0342 5100 mov A,[__r2]
0344 1A02 sbb A,[_gyroZBias+2]
0346 5302 mov [_gyroZ+2],A
0348 5100 mov A,[__r1]
034A 1A01 sbb A,[_gyroZBias+1]
034C 5301 mov [_gyroZ+1],A
034E 5100 mov A,[__r0]
0350 1A00 sbb A,[_gyroZBias]
0352 5300 mov [_gyroZ],A
0354 .dbline 208
0354 ; if (calibrated==0) {
0354 3C0000 cmp [_calibrated],0
0357 B019 jnz L44
0359 .dbline 208
0359 .dbline 209
0359 ; gyroY = 0;
0359 550000 mov [_gyroY],0
035C 550100 mov [_gyroY+1],0
035F 550200 mov [_gyroY+2],0
0362 550300 mov [_gyroY+3],0
0365 .dbline 210
0365 ; gyroZ = 0;
0365 550000 mov [_gyroZ],0
0368 550100 mov [_gyroZ+1],0
036B 550200 mov [_gyroZ+2],0
036E 550300 mov [_gyroZ+3],0
0371 .dbline 211
0371 ; }
0371 L44:
0371 .dbline 212
0371 ; temp = (((signed long)tempRaw)<<8)-tempBias;
0371 5F0001 mov [__r3],[_tempRaw+1]
0374 5F0000 mov [__r2],[_tempRaw]
0377 550000 mov [__r1],0
037A 550000 mov [__r0],0
037D 5008 mov A,8
037F X20:
037F 6500 asl [__r3]
0381 6B00 rlc [__r2]
0383 6B00 rlc [__r1]
0385 6B00 rlc [__r0]
0387 78 dec A
0388 BFF6 jnz X20
038A 5100 mov A,[__r3]
038C 1203 sub A,[_tempBias+3]
038E 5303 mov [_temp+3],A
0390 5100 mov A,[__r2]
0392 1A02 sbb A,[_tempBias+2]
0394 5302 mov [_temp+2],A
0396 5100 mov A,[__r1]
0398 1A01 sbb A,[_tempBias+1]
039A 5301 mov [_temp+1],A
039C 5100 mov A,[__r0]
039E 1A00 sbb A,[_tempBias]
03A0 5300 mov [_temp],A
03A2 .dbline 215
03A2 ;
03A2 ; //Drift Compensation
03A2 ; driftComp(&gyroY, &gyroZ, &temp, &mode);
03A2 5000 mov A,>_mode
03A4 08 push A
03A5 5000 mov A,<_mode
03A7 08 push A
03A8 5000 mov A,>_temp
03AA 08 push A
03AB 5000 mov A,<_temp
03AD 08 push A
03AE 5000 mov A,>_gyroZ
03B0 08 push A
03B1 5000 mov A,<_gyroZ
03B3 08 push A
03B4 5000 mov A,>_gyroY
03B6 08 push A
03B7 5000 mov A,<_gyroY
03B9 08 push A
03BA 7C0000 xcall _driftComp
03BD 38F8 add SP,-8
03BF .dbline 222
03BF ;
03BF ; #ifdef TEMP_DEBUG_INFO
03BF ; printf("%*d %*d %*d\n", 10, gyroY>>8, 10, gyroZ>>8, 10, temp>>8);
03BF ; #endif
03BF ;
03BF ; //Dead zone
03BF ; if (((gyroY<(DEAD_ZONE)) && (gyroY>(-DEAD_ZONE))) && (mode>5)) {
03BF 5103 mov A,[_gyroY+3]
03C1 1100 sub A,0
03C3 5102 mov A,[_gyroY+2]
03C5 1906 sbb A,6
03C7 5101 mov A,[_gyroY+1]
03C9 1900 sbb A,0
03CB 5100 mov A,[_gyroY]
03CD 3180 xor A,-128
03CF 1980 sbb A,(0 ^ 0x80)
03D1 D02B jnc L46
03D3 X21:
03D3 5000 mov A,0
03D5 1203 sub A,[_gyroY+3]
03D7 50FA mov A,-6
03D9 1A02 sbb A,[_gyroY+2]
03DB 50FF mov A,-1
03DD 1A01 sbb A,[_gyroY+1]
03DF 5100 mov A,[_gyroY]
03E1 3180 xor A,-128
03E3 5300 mov [__rX],A
03E5 507F mov A,(255 ^ 0x80)
03E7 1A00 sbb A,[__rX]
03E9 D013 jnc L46
03EB X22:
03EB 5005 mov A,5
03ED 3A00 cmp A,[_mode]
03EF D00D jnc L46
03F1 X23:
03F1 .dbline 222
03F1 .dbline 223
03F1 ; gyroY=0;
03F1 550000 mov [_gyroY],0
03F4 550100 mov [_gyroY+1],0
03F7 550200 mov [_gyroY+2],0
03FA 550300 mov [_gyroY+3],0
03FD .dbline 224
03FD ; }
03FD L46:
03FD .dbline 225
03FD ; if (((gyroZ<(DEAD_ZONE)) && (gyroZ>(-DEAD_ZONE))) && (mode>5)) {
03FD 5103 mov A,[_gyroZ+3]
03FF 1100 sub A,0
0401 5102 mov A,[_gyroZ+2]
0403 1906 sbb A,6
0405 5101 mov A,[_gyroZ+1]
0407 1900 sbb A,0
0409 5100 mov A,[_gyroZ]
040B 3180 xor A,-128
040D 1980 sbb A,(0 ^ 0x80)
040F D02B jnc L48
0411 X24:
0411 5000 mov A,0
0413 1203 sub A,[_gyroZ+3]
0415 50FA mov A,-6
0417 1A02 sbb A,[_gyroZ+2]
0419 50FF mov A,-1
041B 1A01 sbb A,[_gyroZ+1]
041D 5100 mov A,[_gyroZ]
041F 3180 xor A,-128
0421 5300 mov [__rX],A
0423 507F mov A,(255 ^ 0x80)
0425 1A00 sbb A,[__rX]
0427 D013 jnc L48
0429 X25:
0429 5005 mov A,5
042B 3A00 cmp A,[_mode]
042D D00D jnc L48
042F X26:
042F .dbline 225
042F .dbline 226
042F ; gyroZ=0;
042F 550000 mov [_gyroZ],0
0432 550100 mov [_gyroZ+1],0
0435 550200 mov [_gyroZ+2],0
0438 550300 mov [_gyroZ+3],0
043B .dbline 227
043B ; }
043B L48:
043B .dbline 230
043B ;
043B ; //Unless mode is OFF (on the desk), start in mode 6
043B ; if (mode!=8) {mode = 6;}
043B 3C0008 cmp [_mode],8
043E A004 jz L50
0440 .dbline 230
0440 .dbline 230
0440 550006 mov [_mode],6
0443 .dbline 230
0443 L50:
0443 .dbline 233
0443 ;
0443 ; //Determine if pointer should be in "STOP" mode
0443 ; signY = 0;
0443 550000 mov [_signY],0
0446 .dbline 234
0446 ; signZ = 0;
0446 550000 mov [_signZ],0
0449 .dbline 235
0449 ; if (gyroY>0) {
0449 5000 mov A,0
044B 1203 sub A,[_gyroY+3]
044D 5000 mov A,0
044F 1A02 sbb A,[_gyroY+2]
0451 5000 mov A,0
0453 1A01 sbb A,[_gyroY+1]
0455 5100 mov A,[_gyroY]
0457 3180 xor A,-128
0459 5300 mov [__rX],A
045B 5080 mov A,(0 ^ 0x80)
045D 1A00 sbb A,[__rX]
045F D004 jnc L52
0461 X27:
0461 .dbline 235
0461 .dbline 236
0461 ; signY = 1;
0461 550001 mov [_signY],1
0464 .dbline 237
0464 ; }
0464 L52:
0464 .dbline 238
0464 ; if (gyroZ>0) {
0464 5000 mov A,0
0466 1203 sub A,[_gyroZ+3]
0468 5000 mov A,0
046A 1A02 sbb A,[_gyroZ+2]
046C 5000 mov A,0
046E 1A01 sbb A,[_gyroZ+1]
0470 5100 mov A,[_gyroZ]
0472 3180 xor A,-128
0474 5300 mov [__rX],A
0476 5080 mov A,(0 ^ 0x80)
0478 1A00 sbb A,[__rX]
047A D004 jnc L54
047C X28:
047C .dbline 238
047C .dbline 239
047C ; signZ = 1;
047C 550001 mov [_signZ],1
047F .dbline 240
047F ; }
047F L54:
047F .dbline 241
047F ; if (signY==lastSignY) {
047F 5100 mov A,[_signY]
0481 3A00 cmp A,[_lastSignY]
0483 B00C jnz L56
0485 .dbline 241
0485 .dbline 242
0485 ; signYCount+=1;
0485 7600 inc [_signYCount]
0487 .dbline 243
0487 ; if (signYCount==255) {
0487 3C00FF cmp [_signYCount],-1
048A B008 jnz L57
048C .dbline 243
048C .dbline 244
048C ; signYCount-=1;
048C 7A00 dec [_signYCount]
048E .dbline 245
048E ; }
048E .dbline 246
048E 8004 xjmp L57
0490 L56:
0490 .dbline 246
0490 ; } else {
0490 .dbline 247
0490 ; signYCount = 0;
0490 550000 mov [_signYCount],0
0493 .dbline 248
0493 ; }
0493 L57:
0493 .dbline 249
0493 ; if (signZ==lastSignZ) {
0493 5100 mov A,[_signZ]
0495 3A00 cmp A,[_lastSignZ]
0497 B00C jnz L60
0499 .dbline 249
0499 .dbline 250
0499 ; signZCount+=1;
0499 7600 inc [_signZCount]
049B .dbline 251
049B ; if (signZCount==255) {
049B 3C00FF cmp [_signZCount],-1
049E B008 jnz L61
04A0 .dbline 251
04A0 .dbline 252
04A0 ; signZCount-=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -