; 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