FDAE BITS: 0: Request Logging 1: Request ACK from drive cycle logging routine 2: Keep logging enabled across drive cycles 3: Request for pre-start OBD-II -- Abandon listener routine until next drivecycle (drivecycle routine clears bit) 4: Inspection Mode -- Like pre-start OBD-II, but the drivecycle routine won't clear the flag, so listener is disable until power cycle. 5: XRAM dump - Dump the next byte and loop ; 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 ; DIVISOR FOR 3 75 F0 03 MOV B, #3 ; 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 5. 22 RET ; 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 ; Just bail if B.4, inspection mode, is set. 30 F4 01 JNB B.4 +1 ; Not in inspection mode: jump over RET 22 RET ; 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, unless B.2 is set. 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 ; 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 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 ; 2 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 ; 3 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 ; 4 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 ; 5 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 ; 6 V_EV EXTENSION OF THE INJECTION TIME (?) 78 73 MOV R0, #0x73 E6 MOV A, @R0 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 7 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 ; 8 Q16 AIR MASS FLOW 1.6KG/H 78 97 MOV R0, #0x97 E6 MOV A, @R0 ; Get Parameter Value FD MOV R5, A ; Set Parameter Value 12 86 0D LCALL CODE-860D ; Send it along ; 9 XML_SCATT AIRFLOW IN 4KG/H 90 FB A8 MOV DPTR, #0xFBA8 ; 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 XWDK ABSOLUTE THROTTLE ANGLE 90 F9 22 MOV DPTR, #0xF922 ; 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 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 ; 12 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 ; 13 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 ; 14 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 ; 15 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 ; 16 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 ; 17 TRADTV SHORT TERM FUEL TRIM? 78 65 MOV R0, #0x65 E6 MOV A, @R0 ; 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 Bytes: 90 FF DA E0 FB 04 F0 75 F0 03 EB 84 C5 F0 60 01 22 90 FD AE E0 F5 F0 30 F4 01 22 30 F3 0A C2 F3 C2 F0 E5 F0 90 FD AE F0 20 F0 01 22 20 F1 08 D2 F1 E5 F0 90 FD AE F0 75 AA FC 75 BA 03 75 98 40 43 87 80 43 D8 80 74 5A F5 99 30 99 FD C2 99 74 A5 F5 99 30 99 FD C2 99 E5 3B FD 12 86 0D E5 54 FD 12 86 0D E5 10 FD 12 86 0D E5 40 FD 12 86 0D E5 6E FD 12 86 0D E5 6F FD 12 86 0D 78 73 E6 FD 12 86 0D E5 4B FD 12 86 0D 78 97 E6 FD 12 86 0D 90 FB A8 E0 FD 12 86 0D 90 F9 22 E0 FD 12 86 0D 78 B7 E6 FD 12 86 0D 90 F9 50 E0 FD 12 86 0D E5 38 FD 12 86 0D 90 F8 04 E0 FD 12 86 0D 90 F8 00 E0 FD 12 86 0D 90 F8 12 E0 FD 12 86 0D 78 65 E6 FD 12 86 0D 74 AA F5 99 30 99 FD C2 99 74 55 F5 99 30 99 FD C2 99 22 --- CODE_860D: Call to send serial bytes from R5 C2 99 8D 99 30 99 FD C2 99 22 C2 99 CLR S0CON.1 8D 99 MOV S0BUF, R5 ; Send R5, Parameter Value 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