This routine replaces the EVAP diagnostics routine. To do this successfully, one can use the same address, which is already called in the running loop. The code executed when the EVAP diag routine is disabled by codeword needs to execute first, then this routine. @0x7CAD in 607 // 0x7C33 in 608 EVAP codeword disable bytes, -607 automatic: 90 FD A0 E0 C2 E7 F0 90 FD A2 E0 C2 E5 F0 90 FD A3 E0 C2 E2 C2 E3 C2 E0 F0 90 FD A4 E0 C2 E0 F0 90 F9 7A E0 30 E3 05 74 23 12 29 AE 90 F9 7A E0 30 E2 05 74 22 12 29 AE 90 F9 7A E0 30 E0 05 74 20 12 29 AE 90 F9 7A E0 30 E1 05 74 21 12 29 AE 90 F9 85 E0 D2 E3 F0 90 F9 85 E0 D2 E2 F0 90 F9 85 E0 D2 E0 F0 90 F9 85 E0 D2 E1 F0 90 FD A9 74 80 F0 E4 90 FD CE F0 74 00 EVAP codeword disable bytes, -608 manual 90 FD A0 E0 C2 E7 F0 90 FD A2 E0 C2 E5 F0 90 FD A3 E0 C2 E2 C2 E3 C2 E0 F0 90 FD A4 E0 C2 E0 F0 90 F9 7A E0 30 E3 05 74 23 12 29 3B 90 F9 7A E0 30 E2 05 74 22 12 29 3B 90 F9 7A E0 30 E0 05 74 20 12 29 3B 90 F9 7A E0 30 E1 05 74 21 12 29 3B 90 F9 85 E0 D2 E3 F0 90 F9 85 E0 D2 E2 F0 90 F9 85 E0 D2 E0 F0 90 F9 85 E0 D2 E1 F0 90 FD A9 74 80 F0 E4 90 FD CE F0 74 00 Log routine: 90 FD C6 E0 FB 04 F0 90 FD CB E0 F5 F0 30 F3 0C C2 F3 C2 F0 D2 F1 E5 F0 90 FD CB F0 20 F1 08 D2 F1 E5 F0 90 FD CB F0 30 F2 4C E4 90 87 C4 93 F5 AA 75 BA 03 75 98 40 43 87 80 43 D8 80 90 FD B0 E0 75 F0 08 7B F8 04 04 F0 14 14 A4 F5 82 C5 F0 2B F5 83 7D 2B 7E B2 12 86 17 AD 83 AE 82 12 86 17 7A 08 E0 FD A3 E0 FE A3 12 86 17 DA F5 7D 22 7E BB 12 86 17 22 20 F0 01 22 E4 90 87 C5 93 F5 F0 EB 84 C5 F0 60 01 22 E4 90 87 C6 93 60 14 D2 2A 75 DC 05 75 DA 00 20 DC FD E5 D9 30 2A F0 90 F9 62 F0 E4 90 87 C4 93 F5 AA 75 BA 03 75 98 40 43 87 80 43 D8 80 7D 5A 7E A5 12 86 17 AD 3B AE 40 AF 11 12 86 28 AD 54 AE 55 AF 5A 12 86 28 AD 10 78 9F E6 FE 90 FA 84 E0 FF 12 86 28 90 FA 07 E0 FD 20 69 19 90 FA 30 E0 FE A3 E0 FF 12 86 28 A3 E0 FD A3 E0 FE A3 E0 FF 12 86 28 80 18 24 35 F5 82 E0 FE A3 E0 FF 12 86 28 A3 E0 FD A3 E0 FE A3 E0 FF 12 86 28 AD 11 AE 66 90 FA 85 E0 FF 12 86 28 75 F0 00 A2 69 92 F0 A2 6A 92 F1 A2 6E 92 F2 A2 57 92 F3 A2 38 92 F4 A2 00 92 F5 90 FF B3 E0 A2 E5 92 F6 90 FD AF E0 B4 81 02 D2 F7 AD F0 E4 F0 78 A5 E6 FE 78 A6 E6 FF 12 86 28 AD 6E AE 6F AF 4B 12 86 28 90 F8 04 E0 FD 90 F8 00 E0 FE 90 F8 12 E0 FF 12 86 28 90 F9 50 E0 FD 90 F9 23 E0 FE 12 86 17 78 5B E6 FD 78 5C E6 FE 78 B7 E6 FF 12 86 28 AD 38 90 FF BB E0 FE 90 FF BE E0 FF 12 86 28 90 FF B8 E0 FD 90 FF B9 E0 FE 90 FF BF E0 FF 12 86 28 78 BB E6 FD 90 FF C0 E0 FE 90 FF B5 E0 FF 12 86 28 90 FF B6 E0 FD 90 FF D9 E0 FE 90 FD AD E0 FF 12 86 28 90 F9 62 E0 FD 7E AA 7F 55 12 86 28 22 ------------------ ; COUNTER 90 FD C6 MOV DPTR, #0xFDC6 ; reused EVAP diag value DAMOS ID "XPTTR_A" E0 MOVX A, @DPTR ; fetch counter FB MOV R3, A ; Counter value is now in R3 04 INC A ; Counter is incremented F0 MOVX @DPTR, A ; and moved back to memory holding location ; Get Flagbyte to B register 90 FD CB MOV DPTR, #0xFDCB ; Logging Flagbyte E0 MOVX A, @DPTR ; Get byte to ACC F5 F0 MOV B, A ; Move to B ; If B.3 is set, we wanted pre-start OBD-II before this drivecycle. Clear that out here. ; We also assume no logging this drivecycle -- Stick with OBD-II diags for this drivecycle. ; Handle this before we bail out if B.0 is not set -- This wouldn't run otherwise. 30 F3 0C JNB B.3 +12 ; Bit is not set, skip this C2 F3 CLR B.3 ; Clear bit C2 F0 CLR B.0 ; Ensure B.0 is clear, no logging, will result in RET below on JB B.0 check D2 F1 SETB B.1 ; Set ACK bit E5 F0 MOV A, B ; Flagbyte to A 90 FD CB MOV DPTR, #0xFDCB ; Logging Flagbyte Mem address F0 MOVX @DPTR, A ; Update XRAM flagbyte ; If B.1, the log ack flag, is unset, set it here. This will cause the pre-start listener to reset the flag byte before the next drivecycle. 20 F1 08 JB B.1 +8 ; Flag is already set, skip this D2 F1 SETB B.1 ; Set the bit E5 F0 MOV A, B ; Flagbyte to A 90 FD CB MOV DPTR, #0xFDCB ; Logging Flagbyte F0 MOVX @DPTR, A ; Update XRAM flagbyte ; Check for streaming logging mode first (bit FDAE.2) ; This mode dumps all (F800-FFFF) XRAM addresses, 8 bytes per log cycle. 30 F2 4C JNB B.2 +76 ; Bit is not set, skip this ; INIT SERIAL PORT E4 CLR A 90 87 C4 MOV DPTR, #0x87C4 ; S0RELL value for setting serial line speed 93 MOVC A, @A+DPTR ; Get code byte F5 AA MOV S0RELL, A ; Move code byte to S0RELL for serial line speed selection 75 BA 03 MOV S0RELH, 0x3 ; Speed = 500,000 / (256-S0RELL) 75 98 40 MOV S0CON, #0x40 ; Set mode 1, 8bit UART, receive disable, clear RI/TI 43 87 80 ORL PCON, #0x80 ; set PCON.SMOD, baud rate doubler 43 D8 80 ORL ADCON0, #0x80 ; set ADCON0.BD baud rate generator enable ; Segment Calculations 19 90 FD B0 MOV DPTR, #0xFDB0 ; Steaming segment counter E0 MOVX A, @DPTR ; in A 75 F0 08 MOV B, 8 ; Multiplier in B - 8 bytes per segment 7B F8 MOV R3, 0xF8 ; For DPH, XRAM starts at F800, in R3 04 INC A ; Increment A (segment counter) 04 INC A ; Increment A (segment counter) F0 MOVX @DPTR, A ; Update XRAM with incremented counter 14 DEC A ; DEC back to where we were 14 DEC A ; DEC back to where we were A4 MUL AB ; Counter times multiplier = XRAM offset for this cycle F5 82 MOV DPL, A ; A to DPL C5 F0 XCH A, B ; High byte of multiplication now in A 2B ADD A, R3 ; Add F8 to high byte, base of XRAM, for DPH F5 83 MOV DPH, A ; Set DPH ; SEND HEADER BYTES 41 7D 2B MOV R5, #0x2B 7E B2 MOV R6, #0XB2 12 86 17 LCALL CODE_8617 ; Send header bytes 0x2B 0xB2 ; SEND INITIAL DPTR 48 AD 83 MOV R5, DPH AE 82 MOV R6, DPL 12 86 17 LCALL CODE_8617 ; Send 2 DPTR bytes ; SEND 16 BYTES FROM DPTR 55 7A 08 MOV R2, #0x08 ; 16 bytes E0 MOVX A, @DPTR ; Get first byte FD MOV R5, A ; To R5 for serial send A3 INC DPTR ; Increment to next byte E0 MOVX A, @DPTR ; Get second byte FE MOV R6, A ; To R6 for serial send A3 INC DPTR ; Increment to next byte for next DJNZ loop 12 86 17 LCALL CODE_8617 ; Send 2 bytes DA F5 DJNZ R2, -11 ; Loop until R2 = 0 ; SEND FOOTER 68 7D 22 MOV R5, #0x22 7E BB MOV R6, #0XBB 12 86 17 LCALL CODE_8617 ; Send footer bytes 0x22 0xBB ; END OF XRAM STREAMING 22 RET ; If B.0 is unset, we don't want to log. Just bail. 20 F0 01 JB B.0 +1 ; In logging mode: jump over RET 22 RET ; DIVISOR E4 CLR A 90 87 C5 MOV DPTR, #0x87C5 ; Code byte for divisor 93 MOVC A, @A+DPTR ; Get code byte F5 F0 MOV B, A ; Move to B EB MOV A, R3 ; Counter value to ACC 84 DIV AB ; Remainder ends up in B C5 F0 XCH A,B ; ACC now has remainder so we can jump based on it in a single instruction 60 01 JZ +1 ; Skip over the return if we're on a multiple of 3. 22 RET ; ADC REAR O2 SENSOR CHANNEL, IF CODEWORD SET E4 CLR A 90 87 C6 MOV DPTR, #0x87C6 ; Codeword for 5V ADC on rear O2 channel 93 MOVC A, @A+DPTR ; Get code byte 60 14 JZ +20 ; Skip if codeword = 0 D2 2A SETB RAM_25.2 ; Cleared by interrupt routine to indicate an interrupt aborted AD conversion 75 DC 05 MOV ADCON1, #5 ; Channel 5, Rear O2 Signal 75 DA 00 MOV DAPR, #0 ; Initiate Conversion 20 DC FD JB ADCON0.4, $ ; Wait for conversion to finish E5 D9 MOV A, ADDAT ; Get result to A register 30 2A F0 JNB RAM_25.2, -16 ; Re-do ADC if RAM_25.2 got cleared, indicated the ADC was interrupted 90 F9 62 MOV DPTR, #0xF962 ; F962 Rear O2 Voltage F0 MOV @DPTR, A ; Move ADC result to F962 ; INIT SERIAL PORT E4 CLR A 90 87 C4 MOV DPTR, #0x87C4 ; S0RELL value for setting serial line speed 93 MOVC A, @A+DPTR ; Get code byte F5 AA MOV S0RELL, A ; Move code byte to S0RELL for serial line speed selection 75 BA 03 MOV S0RELH, 0x3 ; S0REL = 0x3FC -- 125000 baud with SMOD set 75 98 40 MOV S0CON, #0x40 ; Set mode 1 (8bit UART), receive disable, clear RI/TI 43 87 80 ORL PCON, #0x80 ; set SMOD 43 D8 80 ORL ADCON0, #0x80 ; SEND HEADER BYTES 7D 5A MOV R5, #0x5A 7E A5 MOV R6, #0XA5 12 86 17 LCALL CODE_8617 ; Send header bytes 0x5A 0xA5 ; START DUMPING STUFF ; 0 N RPM AD 3B MOV R5, RAM_3B ; Get Parameter Value ; 1 TL LOAD AE 40 MOV R6, RAM_40 ; Get Parameter Value ; 2 Z_ZYL RAM_11 CURRENT CYLINDER AF 11 MOV R7, RAM_11 ; Get Parameter Value ; SEND 3 BYTES 12 86 28 LCALL CODE_8628 ; Send 3 Bytes ; 3 ZWOUT OUTPUT FIRING ANGLE AD 54 MOV R5, RAM_54 ; Get Parameter Value ; 4 ZWBEG ZW AFTER CHANGE LIMITATION AE 55 MOV R6, RAM_55 ; Get Parameter Value ; 5 ZWNEU ZW BEFORE CHANGE LIMITATION AF 5A MOV R7, RAM_5A ; Get Parameter Value ; SEND 3 BYTES 12 86 28 LCALL CODE_8628 ; Send 3 Bytes ; 6 DZW_KR KR-Ignition-Corr.Val (?) AD 10 MOV R5, RAM_10 ; Get Parameter Value ; 7 FALLT ZWISCHENSPEICHER FALLTIEFE 78 9F MOV R0, #0x9F E6 MOV A, @R0 ; Get Parameter Value FE MOV R6, A ; Set Parameter Value ; 8 XFALMIT SUMME DER ZW-SPAETVERSTELLUNGEN 90 FA 84 MOV DPTR, #0xFA84 ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FF MOV R7, A ; Set Parameter Value ; SEND 3 BYTES 12 86 28 LCALL CODE_8628 ; Send 3 Bytes ; 9 XFALARO ADDRESS IN CASE DEPTH MAP 90 FA 07 MOV DPTR, #0xFA07 ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value ; Knock correction: Get non-adapted values if RAM_2D is not set, otherwise jump down to getting the adaptive values 20 69 19 JB RAM_2D.1 +25 ; KRFLAG2.1 is set: adaptive values are used. Skip over non-adaptives at FA30-34 and get the adapted values ; 10 XFALT5 FA30 90 FA 30 MOV DPTR, #0xFA30 ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FE MOV R6, A ; Set Parameter Value ; 11 XFALT3 FA31 A3 INC DPTR ; FA31 E0 MOVX A, @DPTR ; Get value to A FF MOV R7, A ; Set Parameter Value ; SEND 3 BYTES (INCLUDING XFALARO BEFORE THE JB) 12 86 28 LCALL CODE_8628 ; Send 3 Bytes ; 12 XFALT1 FA32 A3 INC DPTR ; FA32 E0 MOVX A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value ; 13 XFALT2 FA33 A3 INC DPTR ; FA33 E0 MOVX A, @DPTR ; Get value to A FE MOV R6, A ; Set Parameter Value ; 14 XFALT4 FA34 A3 INC DPTR ; FA34 E0 MOVX A, @DPTR ; Get value to A FF MOV R7, A ; Set Parameter Value ; SEND 3 BYTES 12 86 28 LCALL CODE_8628 ; Send 3 Bytes ; end of non-adaptive values ; now jump over the adaptive stuff 80 18 SJMP +24 ; Jump over adaptive stuff ; Add 35 to XFALARO to get DPL of first value in adaptive map segment ; Adapted Map starts @ FA35, add XFALARO, 5 values starting there are XFALT1-5 in cylinder order 5,3,1,2,4. Map is from FA35-FA7F. 24 35 ADD A, #0x35 ; FA35 = map base F5 82 MOV DPL, A ; Set DPL to start of 5 cyl adapted values ; Spit out values in case depth map, INC'ing DPTR each time E0 MOVX A, @DPTR ; Get value to A FE MOV R6, A ; Byte 1 A3 INC DPTR ; INC to value 2 E0 MOVX A, @DPTR ; Get value to A FF MOV R7, A ; Byte 2 ; SEND 3 BYTES 12 86 28 LCALL CODE_8628 ; Send 3 Bytes A3 INC DPTR ; INC to value 3 E0 MOVX A, @DPTR ; Get value to A FD MOV R5, A ; Byte 3 A3 INC DPTR E0 MOVX A, @DPTR ; Get value to A FE MOV R6, A ; Byte 4 A3 INC DPTR E0 MOVX A, @DPTR ; Get value to A FF MOV R7, A ; Byte 5 ; SEND 3 BYTES 12 86 28 LCALL CODE-8628 ; Send it along ; Done with adaptive values ; 15 Z_ZYL RAM_11 CURRENT CYLINDER AD 11 MOV R5, RAM_11 ; Get Parameter Value ; 16 ZWGETR ADDITIONAL INGITION CORRECTION FOR GEAR ENGAGEMENT AE 66 MOV R6, RAM_66 ; Get Parameter Value ; 17 XFK_ANR ENRICHMENT FACTOR IN KNOCKING 90 FA 85 MOV DPTR, #0xFA85 ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FF MOV R7, A ; Set Parameter Value ; SEND 3 BYTES 12 86 28 LCALL CODE_8628 ; Send 3 Bytes ; 18 Bitwise values 75 F0 00 MOV B, #0 ; Ensure B-register is cleared A2 69 MOV C, RAM_2D.1 ; KRFLG2.1 KR-adaptation engaged 92 F0 MOV B.0, C ; .. In Bit 0 A2 6A MOV C, RAM_2D.2 ; KRFLG2.2 knock control engaged 92 F1 MOV B.1, C ; .. In Bit 1 A2 6E MOV C, RAM_2D.6 ; KRFLG2.6 reduced width 92 F2 MOV B.2, C ; .. In Bit 2 A2 57 MOV C, RAM_2A.7 ; FLAG6.7 Fuel Cutoff - Over Load Protection 92 F3 MOV B.3, C ; .. In Bit 3 A2 38 MOV C, RAM_27.0 ; FLAG3.0 Fuel Cutoff - Decelleration 92 F4 MOV B.4, C ; .. In Bit 4 A2 00 MOV C, RAM_20.0 ; PORTE1.0 Detected Full Load (WOT) 92 F5 MOV B.5, C ; .. In Bit 5 90 FF B3 MOV DPTR, #0xFFB3 ; XF_LMR LMR Flag register E0 MOVX A, @DPTR ; Get byte to ACC A2 E5 MOV C, ACC.5 ; XF_LMR.5 P_IST bigger maximum value (Overboost?) 92 F6 MOV B.6, C ; .. In Bit 6 ; Fetch FDAF, indicating knock was detected 90 FD AF MOV DPTR, #0xFDAF ; KR-hack byte -- Set to 81 to indicate we hit some knock code. See upper bank around 1CC48/1CD0D E0 MOVX A, @DPTR ; Get byte to ACC B4 81 02 CJNE A, #0x81 +2 ; Compare to 0x81, jump over setting B.7 is not 0x81 D2 F7 SETB B.7 ; set bit 7, knock indicator ; Move bitwise byte to R5 for serial transmisson, clear KR byte @ FDAF AD F0 MOV R5, B ; Bitwise B-register to R5 for serial transmission E4 CLR A ; Clear A F0 MOV @DPTR, A ; Zero out knock indicator ; 19 AIR MASS HOB 78 A5 MOV R0, #0xA5 E6 MOV A, @R0 ; Get Parameter Value FE MOV R6, A ; Set Parameter Value ; 20 AIR MASS LOB 78 A6 MOV R0, #0xA6 E6 MOV A, @R0 ; Get Parameter Value FF MOV R7, A ; Set Parameter Value ; SEND 3 BYTES 12 86 28 LCALL CODE_8628 ; Send 3 Bytes ; 21 TI INJECTION TIME HOB AD 6E MOV R5, RAM_6E ; Get Parameter Value ; 22 TI_L INJECTION TIME LOB AE 6F MOV R6, RAM_6F ; Get Parameter Value ; 23 UHLM MAF VOLTAGE AF 4B MOV R7, RAM_4B ; Get Parameter Value ; SEND 3 BYTES 12 86 28 LCALL CODE_8628 ; Send 3 Bytes ; 24 XTRA LONG TERM FUEL TRIM - IDLE 90 F8 04 MOV DPTR, #0xF804 ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value ; 25 XFRA LONG TERM FUEL TRIM - PART LOAD 90 F8 00 MOV DPTR, #0xF800 ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FE MOV R6, A ; Set Parameter Value ; 26 XFR SHORT TERM FUEL TRIM 90 F8 12 MOV DPTR, #0xF812 ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FF MOV R7, A ; Set Parameter Value ; SEND 3 BYTES 12 86 28 LCALL CODE_8628 ; Send 3 Bytes ; 27 XUSVK LAMBDA PROBE VOLTAGE BEFORE CAT 90 F9 50 MOV DPTR, #0xF950 ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value ; 28 XWDKBL THROTTLE ANGLE RELATIVE TO LL 90 F9 23 MOV DPTR, #0xF923 ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FE MOV R6, A ; Set Parameter Value ; SEND 2 BYTES 12 86 17 LCALL CODE_8617 ; Send 2 Bytes ; 29-30 LFKORR/HFKORR 78 5B MOV R0, #0x5B E6 MOV A, @R0 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 78 5C MOV R0, #0x5C E6 MOV A, @R0 ; Get Parameter Value FE MOV R6, A ; Set Parameter Value ; 31 VMESS SPEED KM/H 78 B7 MOV R0, #0xB7 E6 MOV A, @R0 ; Get Parameter Value FF MOV R7, A ; Set Parameter Value ; SEND 3 BYTES 12 86 28 LCALL CODE_8628 ; Send 3 Bytes ; 32 TMOT MOTOR TEMP DEG C AD 38 MOV R5, RAM_38 ; Get Parameter Value ; 33 XERG_PS LMR CORRECTED REFERENCE VALUE FROM MAP 90 FF BB MOV DPTR, #0xFFBB ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FE MOV R6, A ; Set Parameter Value ; 34 XP_SOLL LMR SETPOINT WITH ADAPTIVE REDUCTION 90 FF BE MOV DPTR, #0xFFBE ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FF MOV R7, A ; Set Parameter Value ; SEND 3 BYTES 12 86 28 LCALL CODE_8628 ; Send 3 Bytes ; 35 XP_IST ACTUAL VALUE (WITH LOWER LIMIT) 90 FF B8 MOV DPTR, #0xFFB8 ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value ; 36 XPCP CONTROL DEVIATION P_SOLL - P_IST 90 FF B9 MOV DPTR, #0xFFB9 ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FE MOV R6, A ; Set Parameter Value ; 37 XTV_VS DUTY CYCLE PILOT CONTROL 90 FF BF MOV DPTR, #0xFFBF ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FF MOV R7, A ; Set Parameter Value ; SEND 3 BYTES 12 86 28 LCALL CODE_8628 ; Send 3 Bytes ; 38 TVMBEG TCV CHANGE LIMITED DUTY CYCLE FKT256 78 BB MOV R0, #0xBB E6 MOV A, @R0 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value ; 39 XPCP_TV P-PART VARIABLE 90 FF C0 MOV DPTR, #0xFFC0 ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FE MOV R6, A ; Set Parameter Value ; 40 XPCIHI I-PART HIGH 90 FF B5 MOV DPTR, #0xFFB5 ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FF MOV R7, A ; Set Parameter Value ; SEND 3 BYTES 12 86 28 LCALL CODE_8628 ; Send 3 Bytes ; 41 XPCILO I-PART LOW 90 FF B6 MOV DPTR, #0xFFB6 ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value ; 42 XTANS INTAKE AIR TEMP 90 FF D9 MOV DPTR, #0xFFD9 ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FE MOV R6, A ; Set Parameter Value ; 43 TANK PRESSURE SENSOR SIGNAL 90 FD AD MOV DPTR, #0xFDAD ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FF MOV R7, A ; Set Parameter Value ; SEND 3 BYTES 12 86 28 LCALL CODE_8628 ; Send 3 Bytes ; 44 REAR O2 SENSOR SIGNAL 90 F9 62 MOV DPTR, #0xF962 ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value ; 45 KR COUNT 90 FD CA MOV DPTR, #0xFDCA ; Set DPTR to value E0 MOVX A, @DPTR ; Get value to A FE MOV R6, A ; Set Parameter Value E4 CLR A F0 MOV @DPTR, A ; SEND 2 BYTES 12 86 17 LCALL CODE_8617 ; Send 2 Bytes ; FOOTER BYTES 7D AA MOV R5, #0xAA 7E 55 MOV R6, #0X55 ; SEND 2 BYTES 12 86 17 LCALL CODE_8617 ; Send 2 Bytes ; BYE 22 RET