; COUNTER 90 FF DA MOV DPTR, #0xFFDA ; use unused IAT raw value address for counter 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 AE MOV DPTR, #0xFDAE ; 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 0A JNB B.3 +10 ; 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 E5 F0 MOV A, B ; Flagbyte to A 90 FD AE MOV DPTR, #0xFDAE ; Logging Flagbyte Mem address F0 MOVX @DPTR, A ; Update XRAM flagbyte ; 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 ; 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 AE MOV DPTR, #0xFDAE ; Logging Flagbyte F0 MOVX @DPTR, A ; Update XRAM flagbyte ; DIVISOR FOR 2 75 F0 02 MOV B, #2 ; Divisor for 5 cycles in 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 ; INIT SERIAL PORT 75 AA FC MOV S0RELL, 0xFC 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 5-CYCLE HEADER BYTES 74 5A MOV A, #0x5A F5 99 MOV S0BUF, A ; Send 0x55, start of sequence 30 99 FD JNB S0CON.1, $ ; Wait on S0CON.TI to be set: transmit has completed C2 99 CLR S0CON.1 ; Clear S0CON.TI 74 A5 MOV A, #0xA5 F5 99 MOV S0BUF, A ; Send 0xAA, start of sequence 30 99 FD JNB S0CON.1, $ ; Wait on S0CON.TI to be set: transmit has completed C2 99 CLR S0CON.1 ; Clear S0CON.TI ; 0 N RPM E5 3B MOV A, RAM_3B ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 1 TL LOAD E5 40 MOV A, RAM_40 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 2 Z_ZYL RAM_11 CURRENT CYLINDER E5 11 MOV A, RAM_11 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 3 ZWOUT OUTPUT FIRING ANGLE E5 54 MOV A, RAM_54 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 4 ZWBEG ZW AFTER CHANGE LIMITATION E5 55 MOV A, RAM_55 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 5 ZWNEU ZW BEFORE CHANGE LIMITATION E5 5A MOV A, RAM_5A ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 6 DZW_KR KR-Ignition-Corr.Val (?) E5 10 MOV A, RAM_10 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 7 FALLT ZWISCHENSPEICHER FALLTIEFE 78 9F MOV R0, #0x9F E6 MOV A, @R0 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 8 XFALMIT SUMME DER ZW-SPAETVERSTELLUNGEN 90 FA 84 MOV DPTR, #0xFA84 ; Set DPTR to value E0 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; Knock correction: Get non-adapted values if RAM_2D is not set, otherwise jump down to getting the adaptive values 20 69 2A JB RAM_2D.1 +42 ; KRFLAG2.1 is set: adaptive values are used. Skip over non-adaptives at FA30-34 and get the adapted values ;9 XFALT5 FA30 90 FA 30 MOV DPTR, #0xFA30 ; Set DPTR to value E0 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 10 XFALT3 FA31 90 FA 31 MOV DPTR, #0xFA31 ; Set DPTR to value E0 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 11 XFALT1 FA32 90 FA 32 MOV DPTR, #0xFA32 ; Set DPTR to value E0 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 12 XFALT2 FA33 90 FA 33 MOV DPTR, #0xFA33 ; Set DPTR to value E0 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 13 XFALT4 FA34 90 FA 34 MOV DPTR, #0xFA34 ; Set DPTR to value E0 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; end of non-adaptive values ; now jump over the adaptive stuff 80 25 SJMP +37 ; Jump over adaptive stuff ; Get address in case depth map 90 FA 07 MOV DPTR, #0xFA07 ; XFALARO,{Address in case depth map} E0 MOV A, @DPTR ; Get value to A 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 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along A3 INC DPTR E0 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along A3 INC DPTR E0 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along A3 INC DPTR E0 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along A3 INC DPTR E0 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; Done with adaptive values ; 14 Z_ZYL RAM_11 CURRENT CYLINDER E5 11 MOV A, RAM_11 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 15 ZWGETR ADDITIONAL INGITION CORRECTION FOR GEAR ENGAGEMENT E5 66 MOV A, RAM_66 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 16 XFK_ANR ENRICHMENT FACTOR IN KNOCKING 90 FA 85 MOV DPTR, #0xFA85 ; Set DPTR to value E0 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 17 Bitwise values E4 CLR A A2 02 MOV C, RAM_20.2 ; status klopfen_ja / no 1: = a knock 92 E0 MOV A.0, C A2 69 MOV C, RAM_2D.1 ; KRFLG2.1 KR-adaptation engaged 92 E1 MOV A.1, C A2 6A MOV C, RAM_2D.2 ; KRFLG2.2 knock control engaged 92 E2 MOV A.2, C A2 6E MOV C, RAM_2D.6 ; KRFLG2.2 reduced width (?) 92 E3 MOV A.3, C A2 38 MOV C, RAM_27.0 ; Fuel Cutoff Active 92 E4 MOV A.4, C FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 18 AIR MASS HOB 78 A5 MOV R0, #0xA5 E6 MOV A, @R0 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 19 AIR MASS LOB 78 A6 MOV R0, #0xA6 E6 MOV A, @R0 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 20 TI INJECTION TIME HOB E5 6E MOV A, RAM_6E ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 21 TI_L INJECTION TIME LOB E5 6F MOV A, RAM_6F ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 22 UHLM MAF VOLTAGE E5 4B MOV A, RAM_4B ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 23 XTRA LONG TERM FUEL TRIM - IDLE 90 F8 04 MOV DPTR, #0xF804 ; Set DPTR to value E0 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 24 XFRA LONG TERM FUEL TRIM - PART LOAD 90 F8 00 MOV DPTR, #0xF800 ; Set DPTR to value E0 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 25 XFR SHORT TERM FUEL TRIM 90 F8 12 MOV DPTR, #0xF812 ; Set DPTR to value E0 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 26 XUSVK LAMBDA PROBE VOLTAGE BEFORE CAT 90 F9 50 MOV DPTR, #0xF950 ; Set DPTR to value E0 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 27 XWDKBL THROTTLE ANGLE RELATIVE TO LL 90 F9 23 MOV DPTR, #0xF923 ; Set DPTR to value E0 MOV A, @DPTR ; Get value to A FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 28-29 LFKORR/HFKORR 78 5B MOV R0, #0x5B E6 MOV A, @R0 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along 78 5C MOV R0, #0x5C E6 MOV A, @R0 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 30 VMESS SPEED KM/H 78 B7 MOV R0, #0xB7 E6 MOV A, @R0 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 31 TMOT MOTOR TEMP DEG C E5 38 MOV A, RAM_38 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; SEND FOOTER BYTES 74 AA MOV A, #0xAA F5 99 MOV S0BUF, A ; Send 0x55, start of sequence 30 99 FD JNB S0CON.1, $ ; Wait on S0CON.TI to be set: transmit has completed C2 99 CLR S0CON.1 ; Clear S0CON.TI 74 55 MOV A, #0x55 F5 99 MOV S0BUF, A ; Send 0xAA, start of sequence 30 99 FD JNB S0CON.1, $ ; Wait on S0CON.TI to be set: transmit has completed C2 99 CLR S0CON.1 ; Clear S0CON.TI 22 RET