Notes on the: ECM Computer 16159278 EPROM Id: 86BDZL Car: 93 Z28 A4, LT1 V-8 Prom is 32 KB, and is mapped at $8000, some memory appears to be at to $0000-$0300 range There various 68HC11 registers at $1000-$10?? There is something at $4000 which appears to be used to pass arguments to subroutines The prom configuration data and tables begins at $8000-$9000 The code begins at $A000-$FFFF Vectors: Reset: $FC00 ClkFail: $FC8A Watchdog: $FC84 Interrupt Table: SCI serial system: F5D7 SPI Serial Transfer Complete: F56B Pulse Accumulator Input Edge: FCA1 Pulse Accumulator Overflow: FCA1 Timer Overflow: FCA1 Timer Input Capture 4/Ouptput Compare 5: FC96 Timer Output Compare 4: A655 Timer Output Compare 3: B36C Timer Output Compare 2: B3C7 Timer Output Compare 1: B446 Timer Input Capture 3: B248 Timer Input Capture 2: FC96 Timer Input Capture 1: B422 Real Time Interrupt: FC96 !IRQ: BO15 !XIRQ pin: FC77 Software Interrupt: FC72 Illegal Opcode Trap: FC7F Cop Failure: FC84 Clock Monitor Fail: FC8A !RESET: FC00 ALDL Code: SCI Receiver buffer full flowchart (ALDL input) SCI Transmit buffer is empty flowchart (ALDL output) Valid if 0x10 of M[$006A] is clear Input Message: 0xF4 Length Mode Databytes checksum Length is 0x55 + real databytes length Input Mode: 0x00 Return Message: 0xF4 0x56 0x00 Input Mode = 0x01 ; Length = 0x57 ; Databytes = 0x00 Return Message: 0xF4 0x95 0x01 63databytes checksum 63 Databytes containing various operating parameters. This data is the data returned by diacom. Input Mode = 0x02 ; Length = 0x?? ; Databytes = ?? Input Mode = 0x03 ; Length = 0x?? ; Databytes = ?? Input Mode = 0x04 ; Length = 0x?? ; Databytes = ?? Input Mode = 0x0A ; Length = 0x56 ; no databytes Return Message: Unknown This is supposed to be the command to clear the diag codes. Input Message: 0x40 Length+0x55 databytes checksum Inputted message is saved at 0x028A Return Message: 0x?? 0x?? 15databytes checksum 15 Databytes Input Message: 0x42 Length+0x55 databytes checksum Inputted message is saved at 0x028A Return Message: 0x?? 0x?? 3databytes checksum 3 databytes Valid if 0x10 of M[$006A] is set Input Message: 0x01 Length+0x55 databytes checksum Inputted message is saved at 0x028A Input Message: 0x02 Length+0x55 databytes checksum Inputted message is saved at 0x028A Input Message: 0x03 Length+0x55 databytes checksum Inputted message is saved at 0x028A TCC Lockup Control Memory Locations TCC Lockup Control Flowchart A/D Convertor Channels ADC#0 Stored to 0x00DC - Ignition Voltage ADC#1 Stored to 0x00D4 - TPS Voltage ADC#2 Stored to 0x00D5 - Manifold Air Temperature voltage ADC#3 Stored to 0x00E1 - A/C Evap. Temperature voltage ADC#4 Stored to 0x00D7 - A/C Pressure voltage ADC#5 Stored to 0x00D8 - Right O2 sensor voltage ADC#6 Stored to 0x00D9 - Left O2 sensor voltage ADC#7 Stored to 0x00DA - Manifold Pressure Sensor voltage Stored to 0x00DF E692: Clear Interrupts E695: if (bit 0x10 of $005C is clear) then if ( A >= M[$8430] (value is 0xD3)) then E69E: Set Bit 0x40 of $005C E6A1: Clear Bit 0xA0 of $005C (goto B6BE) goto E6BE E6A6: else if (A >= $842F (value is 0xD3)) then E6AB: Set bit 0x20 of $005C E6AE: Clear bit 0xC0 of $005C (goto E6BE) goto E6BE E6B3: else E6B6: if (A < $8431 (value is 0x28)) then E6B8: Set 0x80 of $005C E6BB: Clear 0x60 of $005C E6BE: goto E6BE else goto E6CB endif endif endif else goto E6CB endif E6BE: A = $01DE E6C4: if ( A <= $842E (value is 0x32)) then E6C6 $01DE ++ E6C9 goto E6CE else goto E6D1 endif E6CB: $01DE = 0 E6CE: Clear 0xE0 of $005C E6D1: A = $00D5 E6D3: Compliement A E6D4: $0234 = A E6D7: A = $0049 E6DB: if (A == 0x0B) then E6DD: A = $0234 E6E3: if (A < $83E9 (value is )) then E6E5: A = $01E7 E6EB: if (A <= $83EA (value is )) then E6ED: if bit 0x40 of $0058 is clear then E6F1: A = $01A9 E6F7: if (A <= $83EB (value is )) then E6F9: goto E713 else goto E702 endif E7FB: X = $0013 F700: if ( E6FB: else 0x0000 0x0001 0x0002 - ALDL 0xF4 0x01 Byte #9 - NVMW2 - NON - VOLITILE MODE WORD 0 - NOT USED 1 - 1 = CLOSED LOOP (FUEL) TIMER TIMED OUT 2 - NOT USED 3 - 1 = PLUGGABLE MEMORY FAILURE (M51) 4 - NOT USED 5 - 1 = FUEL ENABLED VIA FEDS OR FREQUENCY Bit is set in ALDL routine dealing with first byte of 0x40 and input message was equal to M[$0218](word) Bit is cleared if 0x40 is ALDL first byte input message and M[$0203] > 0x0008 6 - NOT USED 7 - 1 = ESC ENABLED BY DELTA COOLANT 0x0003 - ALDL 0xF4 0x01 Byte #3 - MALFFLG1 - Malfunction Word #1 0 - Code 23 - Mat Sensor Low 1 - Code 22 - Throttle Sensor Postion Low 2 - CODE 21 - THROTTLE SENSOR POSITION HIGH 3 - CODE 16 - LO RES. PULSE FAILURE 4 - CODE 15 - COOLANT SENSOR LOW TEMPERATURE 5 - CODE 14 - COOLANT SENSOR HIGH TEMPERATURE 6 - CODE 13 - LEFT OXYGEN SENSOR FAILED 7 - CODE 12 - NO REFERENCE PULSES 0x0004 - ALDL 0xF4 0x01 Byte #4 - MALFFLG2 - Malfunction Word #2 0 - CODE 34 - MAP SENSOR LOW 1 - CODE 33 - MAP SENSOR HIGH 2 - CODE 32 - EGR DIAGNOSTIC 3 - CODE 28 - QDM #3 4 - CODE 27 - QDM #3 5 - CODE 26 - QDM #3 6 - CODE 25 - MAT SENSOR HIGH 7 - CODE 24 - VEHICLE SPEED SENSOR 0x0005 - ALDL 0xF4 0x01 Byte #5 - MALFFLG3 - MALFUNCTION WORD #3 0 - CODE 51 - PROM ERROR - Comfirmed - Bad checksum does set this. if 0x8008 is not 0xAA or 0xDA then checksum is used. bit 0x01 1 - CODE 46 - FUEL ENABLE FAILURE 2 - CODE 45 - LEFT OXYGEN SENSOR RICH 3 - CODE 44 - LEFT OXYGEN SENSOR LEAN 4 - CODE 43 - ESC FAILURE 5 - CODE 42 - EST GROUNDED 6 - CODE 41 - EST OPEN 7 - CODE 36 - HI RES. PULSE FAILURE 0x0006 - ALDL 0xF4 0x01 Byte #6 - MALFFLG4 - MALFUNCTION WORD 4 0 - CODE 63 - RIGHT OXYGEN SENSOR FAILURE 1 - CODE 62 - OIL TEMPERATURE SENSOR HIGH 2 - CODE 61 - C.V. IV A/C COMPRESSOR FAULT 3 - CODE 56 - NOT USED 4 - CODE 55 - FUEL LEAN MALFUNCTION 5 - CODE 54 - NOT USED 6 - CODE 53 - SYSTEM VOLTAGE PROBLEM 7 - CODE 52 - OIL TEMPERATURE SENSOR LOW 0x0007 - ALDL 0xF4 0x01 Byte #7 - MALFFLG5 - MALFUNCTION WORD 5 0 - CODE 72 - GEAR SWITCH FAILURE 1 - CODE 71 - A/C EVAPORATOR TEMP SENSOR FAILURE 2 - CODE 69 - A/C CLUTCH CIRCUIT OPEN 3 - CODE 68 - A/C RELAY SHORTED 4 - CODE 67 - A/C PRESSURE TRANSDUCER DEGRADED 5 - CODE 66 - A/C PRESSURE TRANSDUCER OPEN OR SHORTED 6 - CODE 65 - RIGHT OXYGEN SENSOR RICH 7 - CODE 64 - RIGHT OXYGEN SENSOR LEAN 0x0013 (0x3013) - ALDL 0xF4 0x01 Byte #47 TIME ENGINE RUNNING TIME IN SECONDS (MSB) 0x0014 (0x3014) - ALDL 0xF4 0x01 Byte #48 TIME+1 ENGINE RUNNING TIME IN SECONDS (LSB) SECONDS = (MSB*256 + LSB) 0x0015 BLM Cell Left #1 0x0016 BLM Cell Left #2 0x0017 BLM Cell Left #3 0x0018 BLM Cell Left #4 0x0019 BLM Cell Left #5 0x001A BLM Cell Left #6 0x001B BLM Cell Left #7 0x001C BLM Cell Left #8 0x001D BLM Cell Left #9 0x001E BLM Cell Left #10 0x001F BLM Cell Left #11 0x0020 BLM Cell Left #12 0x0021 BLM Cell Left #13 0x0022 BLM Cell Left #14 0x0023 BLM Cell Left #15 0x0024 BLM Cell Left #16 0x0025 BLM Cell Left #17 0x0026 BLM Cell Left #18 0x0027 BLM Cell left #19 0x0028 BLM Cell Right #1 0x0029 BLM Cell Right #2 0x002A BLM Cell Right #3 0x002B BLM Cell Right #4 0x002C BLM Cell Right #5 0x002D BLM Cell Right #6 0x002E BLM Cell Right #7 0x002F BLM Cell Right #8 0x0030 BLM Cell Right #9 0x0031 BLM Cell Right #10 0x0032 BLM Cell Right #11 0x0033 BLM Cell Right #12 0x0034 BLM Cell Right #13 0x0035 BLM Cell Right #14 0x0036 BLM Cell Right #15 0x0037 BLM Cell Right #16 0x0038 BLM Cell Right #17 0x0039 BLM Cell Right #18 0x003A BLM Cell Right #19 0x003B - ALDL 0xF4 0x01 Byte #40 ISSPMP IAC PRESET MOTOR POSITION N = IAC STEPS 0x003C - ALDL 0xF4 0x01 Byte #38 ISMNMPKA KEEP - ALIVE IAC MINIMUM MOTOR POSITION N = IAC STEPS 0x003F - ALDL 0xF4 0x01 Byte #27 NVADBARO NON - VOLITILE COMPUTED A/D BAROMETER VOLTS = N*(5/256) KPA = (N + 28.06)/2.71) 0x0046 incremented only. Nothing else seems to be done to it. At 0xB28B 0x0047 - ALDL 0xF4 0x01 Byte #34 RESETCTR RESET COUNTER FOR MALF 51 0x0049 - Fan timer counter? 0x004B - ALDL 0xF4 0x01 Byte #11 - IODPORTB - IOD PORT B INPUT DATA/OUTPUT CONTROL WORD Value is stored to both this address and 0x4002 0 - 1 = CHECK ENGINE LIGHT ON 1 - 1 = QDM FAULT 1 NOT INDICATED 2 - 1 = QDM FAULT 2 NOT INDICATED 3 - 1 = QDM FAULT 3 NOT INDICATED 4 - 1 = SXR TRANSMISSION ENABLED 5 - 1 = C.A.R.S. LIGHT ON 6 - 1 = D, R CAR A/C REQUEST (Y-CAR OPTION NOT SELECTED) 7 - 1 = NOT USED 0x004C - ALDL 0xF4 0x01 Byte #10 - IODPORTC - IOD PORT C OUTPUT CONTROL WORD Copied from 0x4004 in some places 0 - 1 = IN DRIVE (0 = P/N) 1 - 1 = IN 3RD OR 4TH GEAR 2 - 0 = IN 4TH GEAR 3 - 1 = IN LOW, 3RD, OR 4TH GEAR 4 - 1 = PSPS NOT CRAMPED (NOT USED) 5 - 1 = A/C CLUTCH ENGAGED 6 - 0 = A/C REQUESTED (Y - CAR) 7 - 0 = TRACTION CONTROL ACTIVE 0x004F - bit 0x01 bit 0x02 bit 0x04 bit 0x08 bit 0x10 bit 0x20 bit 0x40 - if bit is set then gosub 5800 diag routine - should never be set. bit 0x80 - if bit is set then gosub 5100 diag routine - should never be set. 0x0050 - ALDL 0xF4 0x01 Byte #12 - MW1 - MODE WORD 1 0 1 = FIRST REFERENCE PULSE HAS BEEN DETECTED 1 1 = IDLE SPARK HIGH GAIN MODE ENABLED 2 1 = IDLE SPARK LOW GAIN MODE ENABLED 3 1 = UNDERSPEED (USED BY IDLE SPARK LOGIC) 4 1 = ROAD SPEED 1ST PULSE DETECTED 5 0 = A/C CLUTCH ON 6 1 = 1ST SPI ERROR DETECTED (2ND IS FATAL) 7 1 = ENGINE RUNNING (SPARK) 0x0051 - ALDL 0xF4 0x01 Byte #13 - MW2 - MODE WORD 2 0 1 = MORE THAN 100 MSECS. FOR SPI MESSAGE TO COMPLETE 1 1 = RUN SPARK ENABLED 2 1 = REFERENCE PULSE OCCURRED (6.25 MSEC. CHECK) 3 1 = ELITE DELAY STARTED 4 0 = REVERSE INHIBITED (F-CAR ONLY) 5 1 = A/C DISABLED DUE TO COMPRESSOR FAULT DETECTED 6 1 = HIGH BATTERY VOLTAGE 7 1 = USE LO A/C OFF EVAP. TEMP THRESH DUE TO WARM START 0x0052 bit 0x01 Set if a complete valid messages has been received, with a valid checksum Cleared a bit later if 0xF4 is the first byte. bit 0x02 bit 0x04 bit 0x10 bit 0x20 bit 0x40 Set if 0xF4 is the current message id. bit 0x80 0x0053 bit 0x01 bit 0x02 bit 0x04 bit 0x10 bit 0x20 bit 0x40 ALDL 0x40 - if bit 0x40 of M[$0053] is clear goto F6DF and set this bit. bit 0x80 Bit is cleared if M[$88D7] (0x02) + 1 > M[$0164] (throttle axis load variable), Otherwise bit will be set, it is set before this comparison. If this bit is already set the +1 will note be done. 0x0054 - ALDL 0xF4 0x01 Byte #16 - LCCPMW - LCC & CCP MODE WORD 0 1 = CCP ENABLED 1 1 = CCMREVS FLIP-FLOP 2 1 = MALFS HAVE OCCURRED 3 1 = ALDL MODE 4 BYPASS FUEL COMMANDED 4 SECOND TIME COOLANT 5 1 = FALSE REFERENCE PULSE DETECTED 6 1 = KWARM KICKDOWN REQUESTED 7 1 = CLOSED THROTTLE SPARK ACTIVE 0x0055 bit 0x02 - if set then M[$8913] is added to the idle speed. 0x0057 - ALDL 0xF4 0x01 Byte #18 - AIRMW - MAJOR LOOP MODE WORD 0 1 = IAC MOTOR MOVING (LAST PASS) 1 1 = AIR TO PORTS OR CONVERTER, 0 = AIR DEVERTED 2 1 = AIR TO EXHAUST PORTS, 0 = AIR TO CONVERTER 3 1 = IAC MOTOR RESET PREVIOUSLY VIA SLEWING 4 1 = A/C REQUESTED (F - CAR) 5 1 = IAC MOTOR EXTENDING (0 = RETRACTING) 6 1 = LAST 3.125 MSEC. IRQ WAS IAC 320 HZ INTERRUPT 7 1 = DECEL ENLEANMENT ENABLED 0x0058 bit 0x01 bit 0x02 cleared if M[$0164] bit 0x04 set if TPS is above 0xF6 (M[$83E3]. bit 0x20 set if TPS is below 0x0C (M[$83E8], cleared if engine is not running, and not used (or ignored if bit 0x02 of M[$83C9] (0xFF) is clear. 0x0059 Bit 0x10 seems to be set if the conversion is not complete after 0x0C clock cycles - Error Flag? Bit 0x01 seems to be set if the conversion at E685, A18E, A1FD, F86B is not complete Bit 0x04 $01ED, and prom $843C 0x005A - ALDL 0xF4 0x01 Byte #21 - DIAGMW3 - Diagnostic mode word 3 0 1 = INTEGRATORS BEING FORCED TO 128 (USED IN M32) 1 MALF 44 OR 45 HAS BEEN DETECTED 2 1 = BYPASS O2 MALF LOGIC - INT. BEING RESET 3 1 = M53 ACTIVE (VOLTAGE > 17 OR VOLTAGE < 8) 4 1 = MALF 13 DETECTED 5 1 = IN DIAGNOSTIC MODE LAST PASS (FOR NVM CLEAR) 6 1 = MALF 36 INDICATED AND LATCHED (HI REF. FAULT) 7 1 = DIAGNOSTIC MODE HAS BEEN ENTERED 0x005C - ALDL 0xF4 0x01 Byte #17 - DIAGMW5 - DIAGNOSTIC MODE WORD 5 0 1 = REFERENCE PULSE OCCURRED THIS 100 MSECS. (M36 LOGIC) 1 1 = MALF 41 (OPEN EST) DETECTED 2 1 = MALF 42 (GROUNDED EST) DETECTED 3 1 = MALF 16 FIRST PASS HAS OCCURRED 4 NOT USED * 5 1 = MALF 43A PRESENT (ONE ESC SENSOR OPEN)(not used in f-car) * 6 1 = MALF 43C PRESENT (BOTH ESC SENSORS OPEN) Y-CAR ONLY 1 = MALF 43C PRESENT (ESC SENSOR OPEN) F-CAR ONLY * 7 1 = MALF 43D PRESENT (BOTH ESC SENSORS GROUNDED) Y-CAR ONLY 1 = MALF 43D PRESENT (ESC SENSOR GROUNDED) F-CAR ONLY 0x005C bits 0xE0 seem to be set/cleared when A/D port #7 is in a certain state. bits 0x10 seem to be set if port #3 > $CFB3 0x0060 bits 0x80 cleared/set when $00D6 is around bit 0x40 is set if the rev limiter has been engaged and the TPS is greater than This is only used with the rev limiter. The rev limiter will not be engaged if the throttle load axis variable is less the 0x03. bit 0x20 if this bit is set then byte 0x8876 (0x0D) is subtracted from the open loop to closed loop crossover point, this bit is cleared when the closed loop mode was used in the last run, set if open loop was used last pass. bit 0x04 is set if BLMCELL has just been calculated, cleared otherwise. 0x0061 - ALDL 0xF4 0x01 Byte #19 - MWFA1 - FUEL - AIR MODE WORD 0 1 = AIR DIVERTED 1 1 = LEARN CONTROL ENABLED 2 1 = LOW RPM HYSTERESIS FLAG IN CRANKING 3 1 = LEFT BANK BLM CHANGE INTEGRATOR RESET FLAG 4 1 = RIGHT BANK BLM CHANGE INTEGRATOR RESET FLAG 5 NOT USED 6 1 = CATALYTIC CONVERTER OVERTEMP ENABLED if this bit is set, then 0x8876 (0x0D) is subtracted from the open loop to closed loop crossover point. Makes the open loop mode start earlier than if overtemp is not enabled. 7 1 = ENGINE IS CLOSED LOOP (BOTH SENSORS C.L.) 0x0063 - Status stuff for left BLM and fuel control 0x01 0x02 - Used in left BLM code - bypasses left BLM adjustment if this bit is set and left integrator is >= 0x06 bypasses left BLM adjustment if this bit is cleared and left integrator is <= -0x06 0x04 - bit is set if integrator needs to go down (left integrator) bit is cleared if integrator needs to go up (left integrator) 0x08 0x10 0x20 0x40 0x80 0x0064 - Status stuff for right BLM and fuel control 0x01 0x02 - Used in right BLM code - bypasses right BLM adjustment if this bit is set and right integrator is >= 0x06, bypasses right BLM adjustment if this bit is cleared and right integrator is <= -0x06 0x04 - bit is set if integrator needs to go down (right integrator) bit is cleared if integrator needs to go up (right integrator) 0x08 0x10 0x20 0x40 0x80 0x0065 - ALDL 0xF4 0x01 Byte #63 FANMW FAN CONTROL MODE WORD 0 1 = FAN 1 ENABLED (ALL PID FAN 1 STEPS ADDED) 1 1 = SPI FAILED (USED FOR ALDL) 2 1 = FAN 1 REQUESTED 3 1 = FAN 2 ENABLED (ALL PID FAN 2 STEPS ADDED) 4 1 = FAN 2 REQUESTED 5 1 = FAN 1 ENABLED BY HIGH OIL TEMPERATURE 6 1 = HIGH RPM FAN ENABLE 7 1 = NOT USED 0x0066 TCCMV - TCC Mode Word 0 - 1 = TCC LOCKED 1 - 1 = KCOASTS COAST RELEASE TPS THRESHOLD IN USE (HI MPH) 2 - 1 = 4-3/4-2 DOWNSHIFT RELEASE IN PROGRESS 3 - 1 = STATUS OF FOURTH GEAR LAST PASS 4 - 1 = TCC LOCKED FOR PASS-BY NOISE 5 - 1 = 1-2 UPSHIFT IN PROGRESS 6 - 1 = 2-3 UPSHIFT IN PROGRESS 7 - 1 = IN FOURTH GEAR 0x0067 - CARSMW - MODE FOR COMPUTER AIDED RATIO SELECTION LOGIC 0 - 1 = CARS DISABLED DUE TO LOW BAROMETRIC PRESSURE 1 - 1 = CARS ACTIVE 2 - NOT USED 3 - NOT USED 4 - 1 = TRANSMISSION IN FOURTH GEAR 5 - 1 = TRANSMISSION IN FIRST GEAR 6 - 1 = WAIT FOR VEHICLE SPEED RESET 7 - 1 = TRANSMISSION IN SECOND GEAR 0x0068 bits 0x10 cleared/set when $00D6 is around bits 0x20 ALDL code - set if 0xF4 and mode 0x01, 0x02, 0x04, 0x04, 0x0A are used. 0x006A bit 0x10 - bit is set if valid input would command would be 0x01, 0x02, or 0x03 if the bit is clear valid input commands are: 0xF4, 0x40, 0x42 bit 0x40 - bit 0x80 - Bit is set in ALDL routine when a two byte output is in progress. the second byte is stored in 0x02BB in the first pass through the routine. This is for the 0x3000-0x6FFF series addresses in the ALDL routines. 0x006B bit 0x01 set in the ALDL code, 0x20 of M[$0002] is also set. It is set when 0x40 ALDL command is used, and M[$0218](word) is equal to the input data/message send in. 0x0070 bit 0x80 - controls which idle table is used - set is out of gear, cleared is in gear. 0x0071 bit 0x04 - set if TPS is above 0xF6. - Seem to be TPS high error code. bit 0x02 - set if TPS is below 0x0C. - Seem to be TPS low error code. 0x0074 bit 0x40 - set if high battery voltage (A/A input #1) - when bit 0x40 of M[$0051] was already set, probably high on two differenc checks. 0x007D - ALDL 0xF4 0x01 Byte #42 NEWRFPER PRESENT MINOR LOOP REFERENCE PERIOD (MSB) 0x007E - ALDL 0xF4 0x01 Byte #43 NEWRFPER+1 PRESENT MINOR LOOP REFERENCE PERIOD (LSB) MSEC = (MSB*256 + LSB)/65.536 0x009A - MSB Added to get left injector with M[$00CD] 0x009B - LSB 0x009C (0x309C) - ALDL 0xF4 0x01 Byte #56 LBPINJC LEFT BANK LOW VOLTAGE CORRECTED BPW (MSB) 0x009D (0x309D) - ALDL 0xF4 0x01 Byte #57 LBPINJC+1 LEFT BANK LOW VOLTAGE CORRECTED BPW (LSB) MSECS. = (MSB 256 + LSB)/131 0x00A6 - MSB Added to get right injector with M[$00CD] 0x00A7 - LSB 0x00A8 (0x30A8) - ALDL 0xF4 0x01 Byte #58 RBPINJC RIGHT BANK LOW VOLTAGE CORRECTED BPW (MSB) 0x00A9 (0x30A9) - ALDL 0xF4 0x01 Byte #59 RBPINJC+1 RIGHT BANK LOW VOLTAGE CORRECTED BPW (LSB) MSECS. = (MSB * 256 + LSB)/131 0x00BA (Word) - Lag filtered engine rpm. If B <= M[$8B35] (0x30) (750 rpm) then ???? 0x00CD - MSB Added to get left injector with M[$009A], added to get right injector with M[$00A6] 0x00CE - LSB 0x00CF - ALDL 0xF4 0x01 Byte #52 MPH VEHICLE SPEED MPH = N KPH = (1.61 * N) 0x00D4 A/D Port #1 - ALDL 0xF4 0x01 Byte #24 - ADTHROT - A/D RESULT FOR TPS INPUT VOLTS = N*(5/256) Value Compared to 0xF9, compared with $83E4,$83E3,$83E8 sets 0x04 of $0058, sets 0x04 of $0071, 0x20 of $0058 0x00D5 A/D Port #2 - ALDL 0xF4 0x01 Byte #28 ADMAT A/D RESULT FOR MANIFOLD TEMPERATURE INPUT SEE MAT LOOK-UP TABLE (DEFAULTED) Complemented and compared to 0xF9 0x00D6 A/D port #3 Value Special things done in range > 0x64 or < 0x28 0x00D7 A/D port #4 - ALDL 0xF4 0x01 Byte #20 - ADACPRES - A/D Result for A/C pressure Transducer 0x00D8 A/D Port #5 - ALDL 0xF4 0x01 Byte #30 ADRO2 A/D RESULT FOR RIGHT O2 SENSOR INPUT MV = N*4.42 0x00D9 A/D Port #6 - ALDL 0xF4 0x01 Byte #29 ADLO2 A/D RESULT FOR LEFT O2 SENSOR INPUT MV = N*4.42 0x00DA A/D Port #7 - ALDL 0xF4 0x01 Byte #23 - ADMAP - A/D RESULT FOR MANIFOLD PRESSURE SENSOR INPUT ALDL 0x40 Byte #2 ALDL 0x42 Byte #2 VOLTS = N*5/256 (kpa = (N + 28.06)/2.71) 0x00DB A/D port #3 Value 0x00DC A/D Port #0 Value - ALDL 0xF4 0x01 Byte #25 - ADBAT - A/D RESULT FOR IGNITION VOLTAGE INPUT VOLTS = N/10 Value Limited to 0xAA if Bit 0x10 of $005C is set if < 0x1E set 0x10 of 0x004B, if > 0x5A clear 0x10 of 0x004B 0x00DD A/D Port #3 Value - ALDL 0xF4 0x01 Byte #26 - ADOILTMP - A/D RESULT FOR OIL TEMPERATURE SENSOR INPUT SEE OIL TEMP. LOOK-UP TABLE (NON-DEFAULTED) 0x00DE A/D port #3 Value 0x00DF A/D port #3 Value 0x00E0 A/D port #3 Value 0x00E1 - A/D Port #3 - ALDL 0xF4 0x01 Byte #45 ADACEVAP A/D RESULT FROM A/C EVAPORATOR TEMP. SEE A/C LOOK-UP TABLE 0x00EC - ALDL 0xF4 0x01 Byte #44 SAREF LIMITED SPARK RELATIVE TO REF. PULSE DEGREES = N 0x00F7 - Counter - counts passes with engine running - spark 0x00F8 (0x30F8) - ALDL 0xF4 0x01 Byte #50 OLDESCCT ECU ESC COUNTER VALUE FROM LAST MINOR LOOP (MSB) 0x00F9 (0x30F9) - ALDL 0xF4 0x01 Byte #51 OLDESCCT+1 (LSB) NOT USED N = (MSB) 0x00FB - ALDL 0xF4 0x01 Byte #49 NOCKRTD RETARD DUE TO KNOCK DEGREES = N/2 0x0110 - ALDL 0xF4 0x01 Byte #41 ISESDD DESIRED IDLE SPEED RPM = N * 12.5 0x0112 - Byte - Engine Running Time in seconds (M[$0014] - LSB) 0x0122 - RPM - odd offset and odd scaling. 0x0123 - ALDL 0xF4 0x01 Byte #46 NTRPMX ENGINE SPEED ALDL 0x40 Byte #1 ALDL 0x42 Byte #1 RPM = N * 25 0x0124 - RPM = N * 12.5 0x0125 - RPM = N * 31.25 0x0126 - RPM M[$0125] + 0x50 (80 dec) limited to 0xFF. 0x0127 - word - M[$0124] lag filtered with "LV + ( 256 * M[$0124] - LV ) * 0x33 (51 dec)" 0x0129 - byte - M[$0127] at time -T 0x012A - byte - M[$0127] at time -2T 0x012B - byte - M[$0127] at time -3T 0x012C - byte - M[$0127] at time -4T 0x012D - word - M[$0124] lag filtered with "LV + ( 256 * M[$0124] - LV ) * 0x10 (16 dec)" 0x0143 - ALDL 0xF4 0x01 Byte #37 RINT INTEGRATOR VALUE FOR RIGHT O2 SENSOR N = COUNTS 0x0144 - ALDL 0xF4 0x01 Byte #36 LINT INTEGRATOR VALUE FOR LEFT O2 SENSOR N = COUNTS 0x0147 - ALDL 0xF4 0x01 Byte #31 LBLM LEFT BANK BLOCK LEARN MULTIPLIER N = COUNTS 0x0148 - ALDL 0xF4 0x01 Byte #32 RBLM RIGHT BANK BLOCK LEARN MULTIPLIER N = COUNTS 0x0149 - ALDL 0xF4 0x01 Byte #33 BLMCELL BLOCK LEARN MULTIPLIER CELL NUMBER N = NUMBER 0x014A - Used with left BLM - incremented when Left BLM value does not change, reset if it changes. Left blm is not allowed to change while this value is less than M[$87A9] (0x0C) 0x014B - Used with right BLM - incremented when Right BLM value does not change, reset if it changes Right BLM is not allowed to change while this value is less than M[$87A9] (0x0C) 0x0164 - ALDL 0xF4 0x01 Byte #53 NTPSLD THROTTLE LOAD AXIS VARIABLE ALDL 0x40 Byte #3 ALDL 0x42 Byte #3 % THROTTLE = N/2.56 0x0165 - Value from 0x0164 is saved here. 0x0166 - Subtracted from throttle load axis variable - seems to relate to the torque convertor being on or off maybe last pass throttle load axis variable. A copy is 0x0164 is put here later in the code. 0x016B - Lag filtered throttle load axis variable related info. the word is set if Throttle input voltage < M[$016B] to ((Throttle input voltage (MSB of word))- M[$016B](word)) * M[$8681] (0x01) 0x016B - Value of 0x30 (from M[$8680]) is saved here if bit 0x80 of M[$0050] is clear (engine not running (spark)) 0x016C - value of 0x00 (CLR) is done if bit 0x80 if M[$0050] is clear (engine not running (spark)) 0x0173 - MSB (Word) Lag filtered value for right O2 sensor input D = X + ( 256 * A - X ) * M[$0188] 0x0174 - LSB 0x0175 - MSB (word) lag filtered value for left O2 sensor input D = X + ( 256 * A - X ) * M[$0187] 0x0176 - LSB 0x0177 - MSB (word) lag filtered value for right O2 sensor input D = X + ( 255 * A - X ) * 0x05 0x0178 - LSB 0x0179 - MSB (word) lag filtered value for left O2 sensor input D = X + ( 256 * A - X ) * 0x05 0x017A - LSB 0x0187 - byte - lag filter coefficient for left O2 sensor input at M[$0175] table is indexed with M[$0193] comes from table 0x8771 (0x03 0x06 0x0A 0x0C 0x0D) 0x0188 - byte - lag filter coefficient for right O2 sensor input at M[$0173] table is indexed with M[$0193] comes from table 0x8776 (0x03 0x06 0x0B 0x0D 0x0E) 0x0199 - MSB (Word) Lag filtered throttle load axis variable. D = X + ( 256 * A - X ) * 0x08 0x019A 0x019B - MSB (Word) Lag filtered manifold pressure sensor input. D = X + ( 256 * A - X ) * 0x04 0x019C - LSB 0x01A9 - MSB (Word) Lag filtered Coolent Temperature sensor input. D = X + ( 256 * A - X ) * 0x10 0x01AA - LSB 0x01AB - (byte) ALDL 0xF4 0x01 Byte #22 - COOLDEGA - COOLANT TEMPERATURE LINEARIZED (NON-DEFAULTED) DEGREES C = (N*.75 - 40) DEGS. F = (1.35N - 40) 0x01AC - (byte) 0x01A9 limited to 0xD0 0x01AD - (byte) subtracted from M[$01A9] - is set to coolent temp lag filtered 0x01DE compared with $842E, incremented if A/D port #7 > $8431, reset if less than. 0x01ED incremented, if above $843C bit 0x04 of $0059 set, and bit 0x10 of $0074 is set 0x01E7 compared with $83EA 0x01FB - ALDL 0xF4 0x01 Byte #39 PURGEDC PURGE DUTY CYCLE % DC = N/2.56 0x01FE - byte 0x0049 is saved here at some point in time, it does not seem to be used for anything else. 0x01FF - ALDL 0xF4 0x01 Byte #62 EGRDC EGR DUTY CYCLE DC = N/2.56 0x0203 - Word - Used in ALDL routine when input starts with 0x40 Compared with 0x0008, If D is < 0x0008 bit 0x20 of 0x0002 is cleared. 0x0204 - See Above. 0x0213 - ALDL 0xF4 0x01 Byte #15 - PORTASD - PORT A DATA REGISTOR 0 FUEL TRIGGER 1 LOW RESOLUTION REFERENCE PULSE INPUT 2 EST FEEDBACK 3 INJECTOR 2 FAULT 4 INJECTOR 1 FAULT 5 INJECTOR DRIVER 1 6 INJECTOR DRIVER 2 7 SPI HANDSHAKE LINE 0x0214 - ALDL 0xF4 0x01 Byte #35 CYLSD COPY OF LOWER BYTE OF CYL SERIAL DATA 0x0215 (0x3215) - ALDL 0xF4 0x01 Byte #60 REFPERSD COPY OF REFPER FOR SERIAL DATA (MSB) 0x0216 (0x3216) - ALDL 0xF4 0x01 Byte #61 REFPERSD+1 COPY OF REFPER FOR SERIAL DATA (LSB) MSECS. = (MSB * 256 + LSB)/65.535 0x0217 Byte - Used in 0x40 ALDL input routines. If it is 0 then, M[$02C0] (word) is set to 0. 0x0218 Byte - Compared with 0x028A ( M[ M[ M[$0288] + 0x07 ]] 0x0288 should be 0x89E7 0x89E7 + 0x07 should be 0x028A 0x028A will me the "message" after the 0x40 length command. 0x0222 Word - compared to M[$8562] word is 0xFFFF, used with TCC locked for by-pass noise. 0x0224 Word - if not zero, then decremented and put back into M[$0224] seems to be initialized to 0x00F0. Something to do with TCC locked for by-pass noise. 0x0226 set to a value depending on if you are in 4th gear or not. The value seems to be the same in both cases with this prom image. When this value reaches 0 then TCC may lock. set to same value as 0x0227 if 0x227 is greater. 0x0227 temp counter. Is set to time 4-3/4-2 downshift. Downshift in progress bit is set while this value is not zero. 0x0234 Stored $00D5 Compared with $83E9 0x0252 Word - Difference between M[$0164] - M[$0254], throttle axis load variable - lag filtered throttle load axis variable 0x0254 Word - Lag filtered throttle load axis variable. Will be at least throttle load axis varible or greater. 0x025A Byte - Engine Running time seconds (M[$0014] LSB) 0x0262 (0x3262) - ALDL 0xF4 0x01 Byte #54 ACTVOL36 100 MSEC . OLD HI RES. PULSE COUNT (M36 LOGIC) (MSB) 0x0263 (0x3263) - ALDL 0xF4 0x01 Byte #55 ACTVOL36+1 100 MSEC . OLD HI RES. PULSE COUNT (M36 LOGIC) (LSB) 0x0286 Byte Counter - for Serial Communications Data Steram 0x0287 Checksum - for Serial Communications Data Stream 0x0288 Address of data stream - Only used with 0xF4 input data stream. 0x028A Buffer used for input ALDL message - Number of bytes are unknown (maybe up to 171 bytes) 0x02AD Copied from 0x028B if message id was 0xF4, and mode was not 0x00 or 0x04, so mode 0x01, 0x02, 0x03 0x0A 0x02AE 0x028C " 0x02AF 0x028D " 0x02B0 0x028E " 0x02B1 0x028F " 0x02B2 0x0290 " 0x02B3 0x0291 " - if bit 0x02 and bit 0x01 are set then M[$02B3] is used as idle speed. 0x02B4 0x0292 " - Idle rpm is forced to this if bit 0x02 and 0x01 of M[$02B3] are set. 0x02B5 0x0293 " 0x02B6 0x0294 " 0x02B7 First byte of input message 0xF4, 0x40, 0x42, 0x01, 0x02, 0x03 0x02B8 Temp storage for ALDL - Length of current input message. 0x02B9 Set to 0 upon entry of ALDL byte receive routine 0x02BB Temp storage for ALDL two byte routines - 0x3000-0x6FFF series addresses. code is in flowchart F783_ F857 in the code at lines 0xF820, and 0xF818. 0x02C0 Word - used in 0x40 ALDL input routine. set to 0xFFFF in 0x40 ALDL routine if first two bytes of input message/data are equal to M[$0214](word), and 0x02C0 was not zero. Set to 0x0000 if M[$0217] is 0, in ALDL 0x40 routine. Set to value from M[$100E](word)(timer counter reg #1), if ALDL input byte is 0x40 and bit 0x40 of M[$0053] is clear. 0x1000 0x1001 0x1002 0x1003 0x1004 0x1005 0x1006 0x1007 0x1008 0x1009 0x100A 0x100B Timer Output Counter 0x01 0x02 0x04 0x08 Force timer output compare OC1 #5 0x10 Force timer output compare OC1 #4 0x20 Force timer output compare OC1 #3 0x40 Force timer output compare OC1 #2 0x80 Force timer output compare OC1 #1 (same as compare is true) 0x100C 0x01 0x02 0x04 0x08 Timer output compare mask OC1 #5 M3 0 = disabled 0x10 Timer output compare mask OC1 #4 M4 1 = enabled to control pin output of port A 0x20 Timer output compare mask OC1 #3 M5 0x40 Timer output compare mask OC1 #2 M6 0x80 Timer output compare mask OC1 #1 M7 0x100D 0x01 0x02 0x04 0x08 Data bit OC1 - Send out if compare mask is true to bit 3 port A 0x10 Data bit OC1 - Send out if compare mask is true to bit 4 port A 0x20 Data bit OC1 - Send out if compare mask is true to bit 5 port A 0x40 Data bit OC1 - Send out if compare mask is true to bit 6 port A 0x80 Data bit OC1 - Send out if compare mask is true to bit 7 port A 0x100E 0x100F 0x1010 0x1011 0x1012 0x1013 0x1014 0x1015 0x1016 Timer Counter Register #1 - MSB 0x1017 Timer Counter Register #1 - LSB 0x1018 Timer Counter Register #2 - MSB - Used for Right Injector 0x1019 Timer Counter Register #2 - LSB 0x101A Timer Counter Register #3 - MSB - Used for Left Injector 0x101B Timer Counter Register #3 - LSB 0x101C Timer Counter Register #4 - MSB 0x101D Timer Counter Register #4 - LSB 0x101E 0x101F 0x1020 0x01 0x02 0x04 0x08 0x10 - Timer output #3 level - Left injector control 0x20 - Timer output mode #3 0x40 - Timer output #2 level - Right injector control 0x80 - Timer output mode #2 0x1021 0x1022 Timer Interrrupt Mask #1 0x01 0x02 0x04 0x08 0x10 - Timer Output Compare Interrupt #4 1 = enable interrupt 0x20 - Timer Output Compare Interrupt #3 0 = disable interrupt 0x40 - Timer Output Compare Interrupt #2 0x80 - Timer Output Compare Interrupt #1 0x1023 0x1024 0x1025 0x1026 0x1027 0x1028 0x1029 0x102A 0x102B BAUD - Baud Rate Register 0x102C SCCR1 - Serial Communcations Control Register #1 0x01 0x02 0x04 0x08 Wakeup by Address Mark/Idle 0 = Wakeup by IDLE line recognition 1 = Wakeup by address mark (most significant data bit set) 0x10 Mode (Select Character Format) 1 = Start Bit, 8 data bits, 1 stop bit 0 = Start bit, 9 data bits, 1 stop bit 0x20 0x40 Transmit Data bit 8 0x80 Receive Data Bit 8 0x102D SCCR2 - Serial Communcations Control Register #2 0x01 SBK - Send Break 0 = Break generator off 1 = Break codes generated 0x02 RWU - Receiver Wakeup Control 0 = Normal SCI receiver 1 = Wakeup enabled and receiver interrupts inhibited 0x04 RE - Receiver Enable 0 = Receiver Disabled 1 = Receiver Enabled 0x08 TE - Transmitter Enable 0 = Transmitter Disabled 1 = Transmitter Enabled 0x10 ILIE - Idle-Line Interrupt Enable 0 = IDLE interrupts disabled 1 = SCI interrupt requested when IDLE status flag is set 0x20 RIE - Receiver Interrupt Enable 0 = RDRC and OR interrupts diabled 1 = SCI interrupt requested when RDRF flag or the OR status flag is set 0x40 TCIE - Transmit Complete Interrupt Enable 0 = TC interruts disabled 1 = SCI interrupt requested when TC status flag is set 0x80 TIE - Transmit Interrupt Enable 0 = TDRE interrupts disabled 1 = SCI Interrupt requested when TDRE status flag is set 0x102E SCSR - SCI Status Register 0x01 Always 0 0x02 FE - Framing Error 0 = Stop Bit detected 1 = Zero Detected 0x04 NF - Noise Error Flag 0 = Unanimous Decision 1 = Noise Detected 0x08 OR - Overrun Error Flag 0 = No Overrun 1 = Overrun Detected 0x10 IDLE - Idle line detected flag 0 = RxD line is active 1 = RxD line is idle 0x20 RDRF - Receive Data Register Full Flag Cleared by reading SCSR and then reading SCDR 0 = SCDR empty 1 = SCDR full 0x40 TC - Transmit Complete Flag The TC flag is cleared by reading SCSR and then writing to SCDR 0 = Transmitter Busy 1 = Transmitter Idle 0x80 TDRE - Transmit Data Register Empty Flag This flag is set when SCDR is empty. Clear the TDRE flag by reading SCSR and then writing to SCDR. 0 = SCDR busy 1 = SCDR empty 0x102F SCDR - Serial Communications Data Register. if written to it is a transmit register if read from it is a receive register 0x1030 ADCTL - A/D Control/Status 0x80 CCF - Conversion Complete Flag 1 = Conversion Complete 0x40 Always 0 0x20 SCAN - Continuous Scan Control 1 = Continuously update A/D values 0x10 MULT - Multiple Channel/Single Channel Control 0 = Perform 4 conversion on a single channel 1 = Put 4 channels into each of the 4 registers Lower Nibble - Defines channel selection 0000 - 0111 = Defines channel #0 through #7 1000 - 1011 = Reserved 1100 - 1111 = Refrence voltages 0x1031 ADR1 - A/D result #1 Register 0x1032 ADR2 - A/D result #2 register 0x1033 ADR3 - A/D result #3 Register 0x1034 ADR4 - A/D result #4 Register 0x1039 Config - System Configuration Options This can be written to only once in the first 64 cycles out of reset in normal modes or anytime in special modes Default is 00010000. 0x80 A/D power up 1 = A/D powered up 0 = A/D powered down 0x40 CSEL - Clock Select 0 = A/D and EEPROM use system E clock 1 = A/D and EEPROM use internal RC clock 0x20 IRQE - Configure !IRQ for edge-sensitive only operation 0x10 DLY - Oscillator Startup delay 0x08 CME - Clock Monitor Enable 0x04 FCME - Force Clock Monitor Enable 0x02 CR[1:0] - Cop timer rate select bits 0x01 0x4000 Some stuff is stored here - what is it? - Copy of 0x004A? 0x4002 Copy of 0x004B? 0x80 0x40 0x20 0x10 - Bit is set after message out is started. 0x4004 - IODPORTC - IOD PORT C OUTPUT CONTROL WORD ?????? Copied to 0x004C in some places 0 - 1 = IN DRIVE (0 = P/N) 1 - 1 = IN 3RD OR 4TH GEAR 2 - 0 = IN 4TH GEAR 3 - 1 = IN LOW, 3RD, OR 4TH GEAR 4 - 1 = PSPS NOT CRAMPED (NOT USED) 5 - 1 = A/C CLUTCH ENGAGED 6 - 0 = A/C REQUESTED (Y - CAR) 7 - 0 = TRACTION CONTROL ACTIVE 0x400A - set to 0xF700 if battery voltage > 17 or < 8 volts. 0x8000 Prom ID MSB - ALDL 0xF4 0x01 Byte #1 0x8001 Prom ID LSB - ALDL 0xF4 0x01 Byte #2 0x8002 0x8004 0x8006 Checksum Location 0x8008 Must be 0xAA or 0xDA, 0xAA seems to disable the checksum. 0xDA seems to need to be set if the checksum is used (actually 0xAA appears to also work for this) 0x800A 0x800C 0x800E 0x8010 0x8012 0x8016 0x8017 Compared with A/D port #3 Value 0x8018 byte is 0x0D bit 0x02 is clear then part throttle routine lockup users rpm rather than speed to index, 0x02 is clear on this chip so rpm is used. 0x801A byte is 0xB3 bit 0x08 is used in TCC lockup routine. 0x08 is clear, so bit 0x02 of M[$0060] is not checked, and cannot bypass alot of the TCC lockup routine 0x801B 0x801C 0x801D 0x801E Byte is 0x00 Compared with vehicle speed - 0x00CF - Higher is goto 0xAF0D - clear bit 0x10 of M[$0051] - Reverse inhibited 0x801F Byte is 0x00 Compared with vehicle speed - 0x00CF - BCC - Higher or equal is goto 0xAF10 - clear bit 0x10 of M[$0051] - Reverse inhibited 0x8020 0x8022 0x8024 0x8026 0x8028 Subtracted from table lookup on $8029 0x8029 Table, B = 0x10, starts at $8029 until $8036, indexes with FC14 Value from 0x01AC, Result subtracted from $8028, and stored in 0x0108 0x802A 0x802B 0x802C 0x802D 0x802E 0x802F 0x8030 0x8031 0x8032 0x8033 0x8034 0x8035 0x8036 0x8037 0x8038 Table, B = 0x10, starts at 0x8038 until 0x803F, indexes with FC14 Result is added A = A + B; if ( A > M[$8023] (value 0x2E)) then A = M[$8023]; if (A < M[$010A]) then A = M[$010A]; stored $00EE Value from $0123; if (A > 0x70) then A = 0x70 0x8040 Table, B = 0x10, starts at 0x8040 until 0x8047, indexes with FC14 Result is added A = A + B; if ( A > M[$8023] (value 0x2E)) then A = M[$8023]; if (A < M[$010A]) then A = M[$010A]; stored $00EF Value from $0123; if (A > 0x70) then A = 0x70 0x8048 Table, B = 0x10, starts at 0x8048 until 0x80??, indexes with FC14 Result is added A = A + B; if ( A > M[$8023] (value 0x2E)) then A = M[$8023]; if (A < M[$010A]) then A = M[$010A]; stored $00F0 Value is from $0123, if (A > 0x70) then A = 0x70 0x8078 Table, B = 0x10, starts at $8078 until $8080, indexes with FC14 Value $01A9 / 2 is input, stored in $0109 0x8081 Table, B = 0x10, starts at $8081 until $8089, indexes with FC14 Result is at $020A, index is $01A9 / 2. 0x808A Table, B = 0x10, starts at $808A until $8092, indexes with FC14 Result is compared to $0208. Index is from $01A9 (coolent temp lag filtered); A = A / 2, 0x8093 Table, B = 0x10, starts at $8093 until $809B, indexes with FC14 Result is divided by 4 and stored as a DWORD at $0206. Index is from $01A9, A = A / 2, coolent temp lag filtered. 0x809E byte is 0x00 - compared against coolent temp lag filtered 0x809F byte is 0xFF - compared against coolent temp lag filtered - M[$01AD] 0x82EA Byte is 0xC0 - RPM value compared with 0x0123 - Value is 4800 rpm. 0x82F6 Table, B = 0x10, starts at $82F6 until $8???, indexes with FC14 0x0123 is rpm. rpm = 0x0123 * 25. 0xC0 is equivalent to 4800 rpm, 0xB8 is 4600 rpm. Result is A = A - M[$0160]; if (A < 0) then A = 0 ; stored to 0x00FF Index is from $0123 and must be greater than $82EA (value is 0xC0), calc is: A = $0123 - 0xB8; if (A < 0) then A = 0; A = A * 2 0x8305 Table, B = 0x10, starts at 0x8305 until $8???, indexes with FC14 Result is A = A - M[$0161], if (A < 0) then A = 0; stored in $00FF Index is from $0123 and must be greater than $82EC (value is 0xC0). Calc is: A = A - 0xB8; if (A < 0) then A = 0; A = A * 2 0x8333 Byte is 0x50; compared with desired idle speed; rpm = value * 12.5 translates to 1000rpm. 0x8337 Byte is 0x02; added to desired idle speed, rpm = value * 12.5 0x834C Table, B = 0x10, starts at 0x834C until $8???, indexes with FC14 Result is in $0105 Index is in $0123, if ( A > 0xC0) then A = 0xC0 Table is indexed with rpm; rpm = value * 25 0x835A byte is 0x02 - 50 rpm. 0x835D Table, B = 0x10, starts at 0x835D until $83??, indexes with FC14 Result is D = A * M[$00FA]; D = D * 2 ; A = A + M[$00FB]; .... index is in $0123. - Indexed with rpm 0x837F Table, B = 0x10, starts at 0x837F until 0x83??, indexes with FC10 result stored to 0x00FC index is in $0123 - indexed by rpm / 2 0x8387 Table, B = 0x10, starts at 0x8387 until 0x83??, indexes with FC14 Result is in $00FC; Index is $0150 ; A = A / 2 0x83A6 Table, indexes with FC14, Result is Index is A = M[$01A9] / 2 (coolent temp lag filtered / 2 ) 0x83AF Table, indexes with FC14 Result is Index is $0123 - Engine rpm. / 2. 0x83C9 Byte is 0xFF - bit 0x02 being cleared bypasses the TPS check against M[$83E8] lower limit TPS voltage error value. bit 0x04 being cleared bypasses the TPS check against M[$83E3] upper limit TPS voltage error value. 0x83E3 Byte is 0xF6 - Value is TPS upper limit to set error code, and use 0x83E7 as TPS value. 0x83E7 Byte is 0x38 - Value is used as the throttle input voltage if TPS is above 0xF6 or below 0x0C. Must be a default value to use in a failure, otherwise TPS input value is used. 0x83E8 Byte is 0x0C - Compared to M[$00D4] - throttle input voltage bit 0x02 of M[$0071] is set if TPS is below this value. bit 0x20 of M[$0058] is set if TPS is below this value. 0x83D4 Compared with A/D port #3 Value, 0x8300 Table, B = 0x50, starts at $8300 until $830E? , indexes with FC10 Result is at $0160, index into is from $0158 0x830F Table, B = 0x50, starts at $830F until $8313?, indexes with FC10 Result is at $0161, index into is from $0158 0x8317 Table, B = 0x10, starts at 0x8317 until $8332, indexes with FC14 Result is subtracted from $8316, and stored to $000C, index into is from $01AC 0x833E Table, B = 0x10, starts at 0x833E until 0x83??, indexes with FC14 Result is put on stack. 0x8343 Table, used if bit 0x08 of M[$0050] is clear, starts at 0x8343 to 0x8346, indexes with FC14 Result is used in a calc. Index is from 0x0150; if ( A > 0x60) then A = 0x60; A = A / 2 0x834B byte is 0xFF compared with vehicle speed 0x835A byte is 0x02 compared with vehicle speed 0x835B byte is 0x30, compared with coolent temp lag filtered 0x835C byte is 0x35 compared with coolent temp lag filtered minus M[$01AD], if greater than, then sets esc enabled by delta coolent bit 0x80 of M[$0002] 0x837F Table, B = 0x10, starts at $837F until $83A0 Result is at $00FC, index into is from $0123 divided by 2 0x8390 Table, B = 0x10, starts at $8390 until $83A0, indexes with FC14 Result is at $00FD, index into is from $01A9 0x83A6 Table, B = 0x10, starts at $83A6 until $83??, indexes with FC14 Result is used in a multiply and stored in $01D9, index is from $01A9 / 2. 0x83AF Table, B = 0x10, starts at $83Af until $83??, indexes with FC14 Result is transfered to B and used in index $83B8 table. Index is from $0123 ; A = A / 2 0x83B8 Table, B is from 0x83AF table calc., starts at 0x83B8 until 0x83??, indexes with FC14 Result is D = A * B ; B = M[$01D9]; D = A * B; M[$01DA] = A Index is from $0123 ; A = A / 2 This table is the ve table for < 2000 rpm 0x83B8 is added to rpm 0x83B9 is added to map If under 2000 rpm use the following: Address = $83B8 + (RPM - 400)/6.25 0x8C5F Table - Ve table for over 2000 rpm. The addresses on the right are the bytes that control the failure. The numbers in the table are the diagnostic code. Bits 7 6 5 4 3 2 1 0 $83C9 12 13 14 15 16 21 22 23 $83CA 24 25 26 27 28 32 33 34 $83CB 36 41 42 43 44 45 46 51 $83CC 52 53 54 55 56 61 62 63 $83CD 64 65 66 67 68 69 71 72 In my bin, codes 52, 54, 56, 62, 67, 72 were disabled. It seems normal. - Eric 0x83D3 byte is 0x05 - Lag Filter for left and right O2 sensor M[$0177] (right O2), M[$0179] (left O2) 0x8417 Table, B = 0x10, starts at $8417 until $8427, indexes with FC14 Result is at A = A + B and compared with $8415 and limited to value of $8415 and then stored to $015[CBDEF] 0x842C Compared with $00E0 (port #3 Value) 0x842E compared with $01DE, if less than, then increment, 0x842F Compared with A/D port #3 Value, if greater than, bit 0x20 of $005C set, 0xC0 of $005C reset 0x8430 Compared with A/D port #7 Value 0x843B Compared with A/D port #7 Value 0x8430 Compared with A/D port #3 Value, if greater than, bit 0x40 of $005C set, 0xA0 of $005C reset 0x8431 Compared with A/D port #3 Value, if less than, $01DE is reset, and bits 0xE0 of $005C cleared, else $01DE is incremented 0x846A Compared with A/D port #7 Value 0x849F Table, $849F is 0x08 table size, starts $84A0 until $84B9? indexes with FC09 Used in index into another table at $84A9. 0x84BA byte is 0x - fan #1 on temp - low vehicle speed 0x84BB byte is 0x - fan #1 on temp - high vehicle speed 0x84BC byte is 0x - fan #2 on temp - low vehicle speed 0x84BD byte is 0x - fan #2 on temp - high vehicle speed. 0x84BE Byte is 0x00 - speed that separates fan on/off by car mph 0x84CF Byte is 0x8E - used if fan #1 is not enabled - AC pressure CMP 0x84D0 Byte is 0xFF - used if fan #1 is not enabled - Vehicle Speed CMP 0x84D1 Byte is 0x79 - used if fan #1 is enabled - compared against AC pressure transducer and used for fans. 0x84D2 Byte is 0xFF - used if fan #1 is enabled - compared against Vehicle speed 0x84D5 Byte is 0x79 - compared against AC pressure transducer and used for fans. AC pressure has to be above this to run the fan. 0x84D6 Byte is 0x24 - 36 - compared against speed, fans are handled different if above this speed. I don't believe the fans will run above this speed. 0x84DB Byte is 0x85, compared against Coolent temp lag filtered. Converts to 140 degrees F. Compared to 0x01A9. The next 6 entries seem to be related to torque convertor locked for by-pass noise 0x855E byte is 0xFF compared to $0164 - Throttle axis load variable, if less than resets word M[$0222] to zero. 0x855F byte is 0xFE compared to $00CF - Vehicle speed - if less than resets word M[$0222] to zero. 0x8560 byte is 0xFF compared to $00CF - Vehicle speed - if greater than resets word M[$0222] to zero 0x8561 byte is 0xFF compared to $00CF - Vehicle speed - if less than resets word M[$0222] to zero 0x8562 word is 0xFFFF compared to value stored at M[$0222], if greater than sets M[$0222] = M[$8564] (0x00F0) 0x8564 word is 0x00F0 value that M[$0224] is reset to. 0x856B byte is 0x78 compared to M[$01A9]. If less than, most of the TCC lockup routine is bypassed. This should be engine temp or something similar. 0x856C byte is 0x20, compared to $00CF (vehicle speed), seems to control torque convertor lockup. if kcoast coast TPS threshold (hi mph) bit in M[$0066] is set then 0x05 is added to it to get 37 mph. value would translate to 32 mph. If vehicle speed is less than this value then kcoast bit is cleared, and M[$856D] is used to compare to throttle load axis variable. 0x856D byte is 0x08 - used to compare to throttle load axis variable if kcoast bit is cleared. 0x856E byte is 0x00 - used to compare to throttle load axis variable if kcoast bit is set. 0x856F byte is 0x03 - subtracted from 856D or 856D if torque convertor is locked. 0x8570 byte is 0x00 - 0x0D is subtracted from this value if torque convertor is not locked. if throttle axis load variable is less than this, then it goes to the throttle axis load tables off 0x8577 or 0x8593. 0x8571 byte is 0x05 - Starting counter, decremented, times 4-3/4-2 downshift. 0x8574 byte is 0x00 - value to reset M[$0226] to if we are not in 4th gear. 0x8573 byte is 0x00 - Value to reset M[$0226] to if we are in 4th gear 0x8574 byte is 0x00, compared to $00CF (vehicle speed), if speed is less than then M[$0226] is reset to 0x0. 0x8575 byte is 0x5C, compared to $00CF (vehicle speed), this byte seems to be the value that controls 3rd gear WOT lockup (guess), 95 has been verified as the speed at which the TCC locks in 3rd gear. *IMPORTANT* 0x8576 byte is 0x00 - subtracted from vehicle speed if we are not in 3rd or 4th gear - changes min speed to unlock/lock if not 3rd or 4th gear. 0x8577 byte is 0x30 - controls part throttle lockup min speed if not in 4th gear, and TCC is unlocked. (min speed to lock when not in 4th gear) 0x8578 byte is 0xFF - max lockup speed in above case. 0x8579 byte is 0x2D - controls part throttle lockup min speed if not in 4th gear, and TCC is lcoked (min speed to unlock when not in 4th gear) 0x857A byte is 0xFF - max lockup speed in above case. part throttle lockup table used when not in 4th gear, and TCC is locked. Indexed with 0xFC10, B = 0x18, A = M[$00CF] (vehicle speed) * 2 0x857B Byte is 0x26 0 mph 0x857C Byte is 0x26 20 0x857D Byte is 0x26 28 0x857E Byte is 0x26 36 0x857F Byte is 0x38 44 0x8580 Byte is 0x4F 52 0x8581 Byte is 0x61 60 0x8582 Byte is 0x78 68 0x8583 Byte is 0x78 76 0x8584 Byte is 0x78 84 0x8585 Byte is 0x78 92 0x8586 Byte is 0x78 100 part throttle lockup table used when not in 4th gear, and TCC is not locked. Indexed with 0xFC10, B = 0x18, A = M[$00CF] (vehicle speed) * 2 0x8587 Byte is 0x12 0 mph 0x8588 Byte is 0x12 20 0x8589 Byte is 0x12 28 0x858A Byte is 0x12 36 0x858B Byte is 0x21 44 0x858C Byte is 0x2E 52 0x858D Byte is 0x3D 60 0x858E Byte is 0x4D 68 0x858F Byte is 0x5A 76 0x8590 Byte is 0x5A 84 0x8591 Byte is 0x5A 92 0x8592 Byte is 0x5A 100 0x8593 byte is 0x30 - controls part throttle lockup min speed if in 4th gear, and TCC is unlocked (min speed to lock in 4th gear) 0x8594 byte is 0xFF - max lockup speed in above case. 0x8595 byte is 0x2D - controls part throttle lockup min speed if in 4th gear, and TCC is locked (min speed to unlock when in 4th gear) 0x8596 byte is 0xFF - max lockup speed in above case. part throttle lockup table used when in 4th gear, and TCC is locked. Indexed with 0xFC10, B = 0x18, A = M[$00CF] (vehicle speed) * 2 0x8597 byte is 0x26 0 mph 0x8598 byte is 0x26 20 mph 0x8599 byte is 0x26 28 mph 0x859A byte is 0x26 36 mph 0x859B byte is 0x38 44 mph 0x859C byte is 0x4F 52 mph 0x859D byte is 0x61 60 mph 0x859E byte is 0x78 68 mph 0x859F byte is 0x78 76 mph 0x85A0 byte is 0x78 84 mph 0x85A1 byte is 0x78 92 mph 0x85A2 byte is 0x78 100 mph part throttle lockup table used when in 4th gear, and TCC is not locked. Indexed with 0xFC10, B = 0x18, A = M[$00CF] (vehicle speed) * 2 0x85A3 byte is 0x12 0 mph 0x85A4 byte is 0x12 20 mph 0x85A5 byte is 0x12 28 mph 0x85A6 byte is 0x12 36 mph 0x85A7 byte is 0x21 44 mph 0x85A8 byte is 0x2E 52 mph 0x85A9 byte is 0x3D 60 mph 0x85AA byte is 0x4D 68 mph 0x85AB byte is 0x5A 76 mph 0x85AC byte is 0x5A 84 mph 0x85AD byte is 0x5A 92 mph 0x85AE byte is 0x5A 100 mph 0x85B4 Byte is 0x 0x85B5 Byte is 0xA7 (185.45 degrees) This is compared against the coolent temp lag filter M[$01A9]. 0x8623 Table, B = 0x10, starts at $8623 to $8632, indexes with FC14 Reults is used in a call to FB83 with X=0x8621, index is from $01AC. 0x8633 Table, B = 0x10, starts at $8633 until $8641, indexes with FC14 Used in call to FB83 with X = 0x8621, index is from $01AC 0x8641 Table, B = 0x10, starts at $8641 until $8651, indexes with FC14 Result is at $003E, index into is from $0235 0x8652 Table, B = 0x50, starts at $8652 until $866F, indexes with FC10 Used in call to FB83 with X = SP? (stack) B = 0x50, index is from $0158, X = 0x01B8 used in call to FB83 0x867C Word is 0x0C4E - Fuel Injector divisor? 0x867F Byte 0x6F used to multiply times TPS to scale to throttle load axis variable. 0x8680 Byte is 0x30 - Used to Set byte 0x016B to 0x30, if bit 0x08 of M[$0050] is clear (engine not running (spark)) 0x8681 Byte is 0x01 - Used to set byte 0x016B multiplied times TPS - M[$016B] if tps < M[$016B] (msb of this word) 0x868A Byte is 0xFF - Speed limiter - this value and the next 3 words are used if bit 0x40 of M[$0060] is clear. 0x868B Word is 0x00A8 - rev limiter for 1st gear. Value is in ms of the format (msb*256+lsb)/65.536 and is compared to the period reference timer that appears to be 1/4 of the time to complete an revolution. A value of 0x00A8 is around 5800 rpm or so. 0x868D Word is 0x00A8 - rev limiter for 2nd gear - see 0x868B 0x868F Word is 0x00A8 - rev limiter for 3rd+ gear - see 0x868B 0x8691 byte is 0xFF - speed limiter - this value and the next 3 words are used if bit 0x40 of M[$0060] is set 0x8692 Word is 0x00A9 - rev limiter for 1st gear - see 0x868B 0x8694 Word is 0x00A9 - rev limiter for 2nd gear - see 0x868B 0x8696 Word is 0x00A9 - rev limiter for 3rd+ gear - see 0x868B 0x8698 Byte is 0x03 - Compared with Throttle load axis variable - 0x0164 0x8699 Table, $8699 is 0x20 table size, starts $89A0 until $871B? indexes with FC09 Result is in $00CC, index is from $00DC Result*4 is in $00CD as a dword 0x00 to 0x30 maps to range 0x00 to 0x18 0x30 to 0x94 maps to range 0x18 to 0xE0 0x94 to 0xC4 maps to range 0xE0 to 0xF8 0xC4 to 0xFF maps to 0xF8 0x86D3 Table, B = 0x10, starts at $86D3 until $86E3, indexes with FC14 Result is used in some calcs., index is from $0150 Calcs are B = A; A = 0; X = Current Stack value; D = D + M[$X] (pushed earlier), X = D 0x86E4 Table, B = 0x10, starts at $86E4 until $871B, indexes with FC14 Result is used in another index, index is from $01AC Result is transfered to B, and used to index $872B, with A from $0235 0x8700 Table, B = 0x10, starts at $8700 until $870E, indexes with FC14 Result is in $003E, index is from $01AC 0x870E Table, B = 0x10, starts at $870E until $871C, indexes with FC14 Result is in $00D1, index is from $01AC 0x871D Table, B = 0x10, starts at $871D until $872A, indexes with FC14 Result is in $01B4, index is from $01AC 0x872B Table, B = Result from $86E4 index, starts at $872B until $873B, indexes with FC14 Result is in A, and A = A + B limited to $FF and stored as a DWORD to $0008 0x8747 Byte is 0x02 - Step down for fuel integrator 0x8748 Byte is 0x02 - Step up for fuel integrator 0x8749 byte is 0xFE - max integrator value 0x874A Byte is 0x01 - min integrator value 0x879D Byte is 0x1C - 700 rpm - BLM Cell Below is +0 0x879E Byte is 0x30 - 1200 rpm - BLM Cell Below is +1 0x879F Byte is 0x50 - 2000 rpm - BLM Cell Below is +2, above is +3 0x87A0 Byte is 0x20 - Used against M[$0154] - adds +4 if greater than 0x87A1 Byte is 0x32 - Used against M[$0154] - adds +4 if greater than 0x87A2 Byte is 0x50 - Used against M[$0154] - adds +4 if greater than 0x87A9 Byte is 0x0C compared to M[$014A] - believed to be counter to time for left BLM cell 0x87AA Byte is 0x01 (dec 1) Amount to raise/lower block cell learn by, when it needs to be raised/lowered. 0x87AB Byte is 0xA0 (dec 160) Block learn cell top limit - left 0x87AC Byte is 0x6C (dec 108) Block learn cell bottom limit - left. 0x87AD Byte is 0x7A - seems to be bottom BLM limit for BLM cell 18 on first initialization of computer 0x87AE Byte is 0x86 - seems to be top BLM limit for BLM cell 18 on first initialization of computer 0x87AF Byte is 0x06 if integrator is greater than or less than 0x80 (128) by more than this value, then the BLM is adjusted. 0x87B0 Byte is 0x06 if integrator is greater than or less than 0x80 (128) by more than this value, then the BLM is adjusted 0x87B5 byte is 0x04 - Lag filter value for manifold pressure sensor input 0x87B7 byte is 0x08 - Lag filter value for throttle load axis variable. 0x87DB table, indexed with M[$01A9] - coolent temp lag filtered. 0x87ED Byte is 0x20 compared with engine rpm, 800 rpm. 0x87F4 byte is 0x0D compared with coolent temp lag filtered, -22 degrees F. 0x87F5 Byte is 0x1E compared with vehicle speed, 30 mph 0x87F6 Byte is 0x28 compared with vehicle speed. 40 mph. 0x8802 Table, B = 0x??, starts 0x8802 until 0x88??, indexes with FC14 Result is in Index is from $0123, engine rpm. 0x880C Table, B = 0x10, starts 0x880C until 0x88??, indexes with FC14 Result is in $0189 Index is from $0164, if ( A > 0x80) then A = 0x80 0x8819 Byte is 0x24, Lag filter value for throttle percentage (throttle load axis variable), used with $0254. 0x882C Table, B = 0x10, starts at $882C until $88?? , indexes with FC14 Result is used in call to FB83., index is $0252 * 2 limited to 0xFF 0x884C Table, B = 0x50, starts at $884C until $884A, indexes with FC10 Result is in $0163, index is from $0158 0x8852 Byte is 0x0A Lag filter coefficient used with M[$012D], and with M[$0124] 0x885B Table, $885B is 0x08 table size, starts $885C until $8864? indexes with FC09 9 values? Result is in $025F, index is from $01A9 0x8865 Table, $8865 is 0x08 table size, starts $8866 until $8873? indexes with FC09 Result is in 0x025D, index is from 0x01A9 0x8874 byte is 0x0F - used when open loop current pass to compare with M[$0154], unless open loop last pass. 0x8875 byte is 0x06 - subtracted from M[$8875] if open loop last pass is set and compared with M[$0154] 0x8876 byte is 0x0D, subtracted from table that determines closed loop to open loop throttle percentage if bit 0x20 of M[$0060] is set. This prevents the closed loop to open loop from switching back and forth without a large throttle change. This is subtracted if we where in open loop the last time throught. 0x8877 byte is 0x10, subtracted from table that determines closed loop to open loop throttle percentage if bit 0x40 of M[$0061] is set (if catalytic overtemp enabled) 0x8878 byte is 0xD1, compared with coolent temp lag filtered, 240 degrees F. table 0x8879 is used if engine coolent temp is greater than 240. table 0x888A is used if the engine coolent temp is less than 240. 0x8879 table, used if coolent temp lag filtered is less than or equal to M[$8878] (0xD1) (240 degrees F) indexed with M[$0123] (engine rpm) 0x8879 byte is 0xB4 0 - 400 rpm 0x887A byte is 0xB4 400 - 800 rpm 0x887B byte is 0xB4 800 - 1200 rpm 0x887C byte is 0xB4 1200 - 1600 rpm 0x887D byte is 0xB4 1600 - 2000 rpm 0x887E byte is 0xB4 2000 - 2400 rpm 0x887F byte is 0xB4 2400 - 2800 rpm 0x8880 byte is 0xB4 2800 - 3200 rpm 0x8881 byte is 0xA9 3200 - 3600 rpm 0x8882 byte is 0x80 3600 - 4000 rpm 0x8883 byte is 0x67 4000 - 4400 rpm 0x8884 byte is 0x4D 4400 - 4800 rpm 0x8885 byte is 0x4D 4800 - 5200 rpm 0x8886 byte is 0x33 5200 - 5600 rpm 0x8887 byte is 0x33 5600 - 6000 rpm 0x8888 byte is 0x33 6000 - 6400 rpm 0x8889 byte is 0x33 6400 rpm + 0x888A table, used if coolent temp lag filtered is greater than to M[$8878] (0xD1) (240 degrees F) indexed with M[$0123] (engine rpm) 0x888A byte is 0x66 0 - 400 rpm 0x888A byte is 0x66 400 - 800 rpm 0x888A byte is 0x33 800 - 1200 rpm 0x888A byte is 0x1A 1200 - 1600 rpm 0x888A byte is 0x1A 1600 - 2000 rpm 0x888A byte is 0x1A 2000 - 2400 rpm 0x888A byte is 0x1A 2400 - 2800 rpm 0x888A byte is 0x1A 2800 - 3200 rpm 0x888A byte is 0x1A 3200 - 3600 rpm 0x888A byte is 0x1A 3600 - 4000 rpm 0x888A byte is 0x1A 4000 - 4400 rpm 0x888A byte is 0x1A 4400 - 4800 rpm 0x888A byte is 0x1A 4800 - 5200 rpm 0x888A byte is 0x1A 5200 - 5600 rpm 0x888A byte is 0x1A 5600 - 6000 rpm 0x888A byte is 0x1A 6000 - 6400 rpm 0x888A byte is 0x1A 6400 rpm + 0x889B Table, 0x889B is 0x04 table size, starts 0x889C until 0x8881? indexes with FC09 Result is in 0x0185, index is from 0x01A9 0x88A1 Table, WOT Fuel Table. 0x88A1 Byte is 0x64 - 0 rpm , 400 rpm Stock is 0x8F 0x88A2 Byte is 0x64 - 800 rpm Stock is 0x89 0x88A3 Byte is 0x64 - 1200 rpm Stock is 0x90 0x88A4 Byte is 0x67 - 1600 rpm Stock is 0x87 0x88A5 Byte is 0x67 - 2000 rpm Stock is 0x88 0x88A6 Byte is 0x6A - 2400 rpm Stock is 0x89 0x88A7 Byte is 0x6D - 2800 rpm Stock is 0x8B 0x88A8 Byte is 0x6E - 3200 rpm Stock is 0x90 0x88A9 Byte is 0x71 - 3600 rpm Stock is 0x90 0x88AA Byte is 0x89 - 4000 rpm Stock is 0x8B 0x88AB Byte is 0x95 - 4500 rpm Stock is 0x8B 0x88AC Byte is 0xB0 - 5000 rpm Stock is 0x90 0x88AD Byte is 0xBD - 5500 rpm Stock is 0x8B 0x88AE Byte is 0xC1 - 6000 rpm Stock is 0x78 0x88AF Byte is 0xA7 - 6500 rpm Stock is 0x78 0x88B0 Byte is 0xA4 - 7000 rpm Stock is 0x78 0x88B1 Byte is 0x78 - 7500 rpm Stock is 0x78 0x88B2 Byte is 0x33 Lag filter coefficient used with M[$0127], and with M[$0124] 0x88B7 Byte is 0x00 Idle increase to be used if A/C is on. Units are value*12.5 0x88B8 Table, Idle vs. coolent temp. use if bit 0x80 of M[$0070] is clear (in gear) 0x88B8 Byte is 0x44 850 rpm -40.0 Stock is 0x40 800 rpm 0x88B9 Byte is 0x44 850 rpm -18.4 Stock is 0x40 800 rpm 0x88BA Byte is 0x44 850 rpm 3.2 Stock is 0x40 800 rpm 0x88BB Byte is 0x44 850 rpm 24.8 Stock is 0x40 800 rpm 0x88BC Byte is 0x44 850 rpm 46.4 Stock is 0x40 800 rpm 0x88BD Byte is 0x44 850 rpm 68.0 Stock is 0x40 800 rpm 0x88BE Byte is 0x44 850 rpm 89.6 Stock is 0x40 800 rpm 0x88BF Byte is 0x44 850 rpm 111.2 Stock is 0x40 800 rpm 0x88C0 Byte is 0x44 850 rpm 132.8 Stock is 0x3C 750 rpm 0x88C1 Byte is 0x44 850 rpm 154.4 Stock is 0x34 650 rpm 0x88C2 Byte is 0x44 850 rpm 176.9 Stock is 0x2C 550 rpm 0x88C3 Byte is 0x44 850 rpm 197.6 Stock is 0x2C 550 rpm 0x88C4 Byte is 0x44 850 rpm 219.2 Stock is 0x2C 550 rpm 0x88C5 Byte is 0x44 850 rpm 240.8 Stock is 0x2C 550 rpm 0x88C6 Table idle vs. coolent temp. use if bit 0x80 of M[$0070] is set (out of gear) 0x88C6 Byte is 0x60 1200 rpm -40.0 Stock is 0x60 1200 rpm 0x88C7 Byte is 0x60 1200 rpm -18.4 Stock is 0x60 1200 rpm 0x88C8 Byte is 0x60 1200 rpm 3.2 Stock is 0x60 1200 rpm 0x88C9 Byte is 0x50 1000 rpm 24.8 Stock is 0x50 1000 rpm 0x88CA Byte is 0x4C 950 rpm 46.4 Stock is 0x4C 950 rpm 0x88CB Byte is 0x48 900 rpm 68.0 Stock is 0x48 900 rpm 0x88CC Byte is 0x48 900 rpm 89.6 Stock is 0x48 900 rpm 0x88CD Byte is 0x48 900 rpm 111.2 Stock is 0x48 900 rpm 0x88CE Byte is 0x48 900 rpm 132.8 Stock is 0x44 850 rpm 0x88CF Byte is 0x48 900 rpm 154.4 Stock is 0x3C 750 rpm 0x88D0 Byte is 0x48 900 rpm 176.9 Stock is 0x34 650 rpm 0x88D1 Byte is 0x48 900 rpm 197.6 Stock is 0x34 650 rpm 0x88D2 Byte is 0x48 900 rpm 219.2 Stock is 0x34 650 rpm 0x88D3 Byte is 0x48 900 rpm 240.8 Stock is 0x34 650 rpm 0x88D7 Byte is 0x02 - Compared to throttle load axis variable. if bit 0x08 of M[$0053] is set 1 is added to it. Then it is compared to the throttle load axis variable, if this value is less than or equal to the throttle load axis variable then bit 0x08 of M[$0053]. 0x88F6 table, indexed with FC14, index is coolent temp lag filtered / 4. Result is stored in M[$0117]. 0x88FE Compared with IAC counts - max limit? 0x8912 Byte is 0x15 - 21 seconds - Compared with engine running time LSB in seconds 0x8913 Byte is 0x0A - Added to idle speed if bit 0x02 of M[$0055] is set. Units are value*12.5 0x8914 Table, 0x8914 is 0x08 table size, starts 0x8915 until 0x891D indexes with FC09 Result is in A?, index is from 0x01A9, coolent temp lag filtered. 0x891E Table, B = 0x10, starts at 0x891E until 0x8935, indexes with FC14 Result is in $011D, index is from $01AC 0x892C Something for IAC. 0x8935 Table, B = 0x10, starts at 0x8935 until 0x8945, indexes with FC14 Result is in $011D, index is from $01A9 (coolent temp lag filtered) 0x8946 Table, B = 0x10, starts at 0x8946 until 0x8953, indexes with FC14 Result is in put on stack, and later pulled off stack and multiplied times value from $8954 table 0x8954 Table, B = 0x50, starts at 0x8954 until 0x8958, indexes with FC10 Result is used in a multiply times B * 2 in put in 0x0121 (limited to 0xFF) 0x8973 Table, B = 0x50, starts at 0x8973 until 0x89??, indexes with FC10 Result is used in calc., index is from 0x0158 0x897C Table, B = 0x10, starts at 0x897C until 0x89??, indexes with FC14 Result is in $024F. Index is from $0123 - Indexed with engine rpm. 0x898E-0x89AE Table indexed with M[0x0049] & 0x1F (limited to 0x1F) 0x898E Word is 0x0000 0x8990 Word is 0x0000 0x8992 Word is 0x0000 0x8994 Word is 0x0000 0x8996 Word is 0x0000 0x8998 Word is 0x0000 0x899A Word is 0x0000 0x899C Word is 0x0000 0x899E Word is 0x8997 0x89A0 Word is 0x0000 0x89A2 Word is 0x0000 0x89A4 Word is 0x0000 0x89A6 Word is 0x0000 0x89A8 Word is 0x0000 0x89AA Word is 0x0000 0x89AC Word is 0x0000 0x89E7 Word is 8A0E - This is a linked list for ALDL commands - This list is used if M[$006A] bit 0x10 is cleared. 0x89E9 Byte is 0x40 - this is a ALDL input value/commands. 0x89EA Byte is 0x80 0x89EB Byte is 0x0F - Length of data to output - 15 bytes for this command. 0x89EC Word is 0x028A - Location to use for .... 0x89EE Word is 0x028A - Location to use to save input message 0x89F0 Word is 0x0123 - ALDL 0x40 Byte #1 NTRPMX ENGINE SPEED RPM = N * 25 0x89F2 Word is 0x00DA - ALDL 0x40 Byte #2 - ADMAP - A/D RESULT FOR MANIFOLD PRESSURE SENSOR INPUT VOLTS = N*5/256 (kpa = (N + 28.06)/2.71) 0x89F4 Word is 0x0164 - ALDL 0x40 Byte #3 NTPSLD THROTTLE LOAD AXIS VARIABLE % THROTTLE = N/2.56 0x89F6 Word is 0x01A9 0x89F8 Word is 0x0235 0x89FA Word is 0x006B 0x89FC Word is 0x006C 0x89FE Word is 0x0046 0x8A00 Word is 0x3044 0x8A02 Word is 0x3045 0x8A04 Word is 0x898D 0x8A06 Word is 0x00CF 0x8A08 Word is 0x01D7 0x8A0A Word is 0x02C0 0x8A0C Word is 0x02C1 0x8A0E Word is 0x8A1D - This is a linked list for ALDL commands 0x8A10 Byte is 0x42 - This is a ALDL input value/command. 0x8A11 Byte is 0x80 0x8A12 Byte is 0x03 - Length of data to output - 3 bytes for this command 0x8A13 Word is 0x028A - Location to use for ... 0x8A15 Word is 0x028A - Location to use to save input message 0x8A17 Word is 0x0123 - ALDL 0x42 Byte #1 NTRPMX ENGINE SPEED RPM = N * 25 0x8A19 Word is 0x00DA - ALDL 0x42 Byte #2 - ADMAP - A/D RESULT FOR MANIFOLD PRESSURE SENSOR INPUT VOLTS = N*5/256 (kpa = (N + 28.06)/2.71) 0x8A1B Word is 0x0164 - ALDL 0x42 Byte #3 - NTPSLD THROTTLE LOAD AXIS VARIABLE % THROTTLE = N/2.56 0x8A1D Word is 0x0000 - Input is 0xF4 0x?? 0x00 0x8A1F Byte is 0xF4 - This is a ALDL input value/command 0x8A20 Byte is 0x00 0x8A21 Byte is 0x01 - Length of data to output - 1 byte for this command 0x8A22 Word is 0x028A - Location to use for .... 0x8A24 Word is 0x028A - Location to use to save input message. 0x8A26 Word is 0x0000 - Input is 0xF4 0x?? 0x01 0x8A28 Byte is 0xF4 0x8A29 Byte is 0x80 0x8A2A Byte is 0x40 0x8A2B Word is 0x028A - Location to use for .... 0x8A2D Word is 0x028A - Location to use to save input message 0x8A2F Word is 0x8000 - ALDL 0xF4 0x01 Byte #1 - Prom ID byte #1 0x8A31 Word is 0x8001 - ALDL 0xF4 0x01 Byte #2 - Prom ID byte #2 0x8A33 Word is 0x0003 - ALDL 0xF4 0x01 Byte #3 - MALFFLG1 - Malfunction Word #1 0 - Code 23 - Mat Sensor Low 1 - Code 22 - Throttle Sensor Postion Low 2 - CODE 21 - THROTTLE SENSOR POSITION HIGH 3 - CODE 16 - LO RES. PULSE FAILURE 4 - CODE 15 - COOLANT SENSOR LOW TEMPERATURE 5 - CODE 14 - COOLANT SENSOR HIGH TEMPERATURE 6 - CODE 13 - LEFT OXYGEN SENSOR FAILED 7 - CODE 12 - NO REFERENCE PULSES 0x8A35 Word is 0x0004 - ALDL 0xF4 0x01 Byte #4 - MALFFLG2 - Malfunction Word #2 0 - CODE 34 - MAP SENSOR LOW 1 - CODE 33 - MAP SENSOR HIGH 2 - CODE 32 - EGR DIAGNOSTIC 3 - CODE 28 - QDM #3 4 - CODE 27 - QDM #3 5 - CODE 26 - QDM #3 6 - CODE 25 - MAT SENSOR HIGH 7 - CODE 24 - VEHICLE SPEED SENSOR 0x8A37 Word is 0x0005 - ALDL 0xF4 0x01 Byte #5 - MALFFLG3 - MALFUNCTION WORD #3 0 - CODE 51 - PROM ERROR 1 - CODE 46 - FUEL ENABLE FAILURE 2 - CODE 45 - LEFT OXYGEN SENSOR RICH 3 - CODE 44 - LEFT OXYGEN SENSOR LEAN 4 - CODE 43 - ESC FAILURE 5 - CODE 42 - EST GROUNDED 6 - CODE 41 - EST OPEN 7 - CODE 36 - HI RES. PULSE FAILURE 0x8A39 Word is 0x0006 - ALDL 0xF4 0x01 Byte #6 - MALFFLG4 - MALFUNCTION WORD 4 0 - CODE 63 - RIGHT OXYGEN SENSOR FAILURE 1 - CODE 62 - OIL TEMPERATURE SENSOR HIGH 2 - CODE 61 - C.V. IV A/C COMPRESSOR FAULT 3 - CODE 56 - NOT USED 4 - CODE 55 - FUEL LEAN MALFUNCTION 5 - CODE 54 - NOT USED 6 - CODE 53 - SYSTEM VOLTAGE PROBLEM 7 - CODE 52 - OIL TEMPERATURE SENSOR LOW 0x8A3B Word is 0x0007 - ALDL 0xF4 0x01 Byte #7 - MALFFLG5 - MALFUNCTION WORD 5 0 - CODE 72 - GEAR SWITCH FAILURE 1 - CODE 71 - A/C EVAPORATOR TEMP SENSOR FAILURE 2 - CODE 69 - A/C CLUTCH CIRCUIT OPEN 3 - CODE 68 - A/C RELAY SHORTED 4 - CODE 67 - A/C PRESSURE TRANSDUCER DEGRADED 5 - CODE 66 - A/C PRESSURE TRANSDUCER OPEN OR SHORTED 6 - CODE 65 - RIGHT OXYGEN SENSOR RICH 7 - CODE 64 - RIGHT OXYGEN SENSOR LEAN 0x8A3D Word is 0x0066 - ALDL 0xF4 0x01 Byte #8 - TCCMV - TCC Mode Word 0 - 1 = TCC LOCKED 1 - 1 = KCOASTS COAST RELEASE TPS THRESHOLD IN USE (HI MPH) 2 - 1 = 4-3/4-2 DOWNSHIFT RELEASE IN PROGRESS 3 - 1 = STATUS OF FOURTH GEAR LAST PASS 4 - 1 = TCC LOCKED FOR PASS-BY NOISE 5 - 1 = 1-2 UPSHIFT IN PROGRESS 6 - 1 = 2-3 UPSHIFT IN PROGRESS 7 - 1 = IN FOURTH GEAR 0x8A3F Word is 0x0002 - ALDL 0xF4 0x01 Byte #9 - NVMW2 - NON - VOLITILE MODE WORD 0 - NOT USED 1 - 1 = CLOSED LOOP (FUEL) TIMER TIMED OUT 2 - NOT USED 3 - 1 = PLUGGABLE MEMORY FAILURE (M51) 4 - NOT USED 5 - 1 = FUEL ENABLED VIA FEDS OR FREQUENCY 6 - NOT USED 7 - 1 = ESC ENABLED BY DELTA COOLANT 0x8A41 Word is 0x0067 - ALDL 0xF4 0x01 Byte #10 - CARSMW - MODE FOR COMPUTER AIDED RATIO SELECTION LOGIC 0 - 1 = CARS DISABLED DUE TO LOW BAROMETRIC PRESSURE 1 - 1 = CARS ACTIVE 2 - NOT USED 3 - NOT USED 4 - 1 = TRANSMISSION IN FOURTH GEAR 5 - 1 = TRANSMISSION IN FIRST GEAR 6 - 1 = WAIT FOR VEHICLE SPEED RESET 7 - 1 = TRANSMISSION IN SECOND GEAR 0x8A43 Word is 0x004C - ALDL 0xF4 0x01 Byte #11 - IODPORTC - IOD PORT C OUTPUT CONTROL WORD 0 - 1 = IN DRIVE (0 = P/N) 1 - 1 = IN 3RD OR 4TH GEAR 2 - 0 = IN 4TH GEAR 3 - 1 = IN LOW, 3RD, OR 4TH GEAR 4 - 1 = PSPS NOT CRAMPED (NOT USED) 5 - 1 = A/C CLUTCH ENGAGED 6 - 0 = A/C REQUESTED (Y - CAR) 7 - 0 = TRACTION CONTROL ACTIVE 0x8A45 Word is 0x004B - ALDL 0xF4 0x01 Byte #12 - IODPORTB - IOD PORT B INPUT DATA/OUTPUT CONTROL WORD 0 - 1 = CHECK ENGINE LIGHT ON 1 - 1 = QDM FAULT 1 NOT INDICATED 2 - 1 = QDM FAULT 2 NOT INDICATED 3 - 1 = QDM FAULT 3 NOT INDICATED 4 - 1 = SXR TRANSMISSION ENABLED 5 - 1 = C.A.R.S. LIGHT ON 6 - 1 = D, R CAR A/C REQUEST (Y-CAR OPTION NOT SELECTED) 7 - 1 = NOT USED 0x8A47 Word is 0x0050 - ALDL 0xF4 0x01 Byte #13 - MW1 - MODE WORD 1 0 1 = FIRST REFERENCE PULSE HAS BEEN DETECTED 1 1 = IDLE SPARK HIGH GAIN MODE ENABLED 2 1 = IDLE SPARK LOW GAIN MODE ENABLED 3 1 = UNDERSPEED (USED BY IDLE SPARK LOGIC) 4 1 = ROAD SPEED 1ST PULSE DETECTED 5 0 = A/C CLUTCH ON 6 1 = 1ST SPI ERROR DETECTED (2ND IS FATAL) 7 1 = ENGINE RUNNING (SPARK) 0x8A49 Word is 0x0051 - ALDL 0xF4 0x01 Byte #14 - MW2 - MODE WORD 2 0 1 = MORE THAN 100 MSECS. FOR SPI MESSAGE TO COMPLETE 1 1 = RUN SPARK ENABLED 2 1 = REFERENCE PULSE OCCURRED (6.25 MSEC. CHECK) 3 1 = ELITE DELAY STARTED 4 0 = REVERSE INHIBITED (F-CAR ONLY) 5 1 = A/C DISABLED DUE TO COMPRESSOR FAULT DETECTED 6 1 = HIGH BATTERY VOLTAGE 7 1 = USE LO A/C OFF EVAP. TEMP THRESH DUE TO WARM START 0x8A4B Word is 0x0213 - ALDL 0xF4 0x01 Byte #15 - PORTASD - PORT A DATA REGISTOR 0 FUEL TRIGGER 1 LOW RESOLUTION REFERENCE PULSE INPUT 2 EST FEEDBACK 3 INJECTOR 2 FAULT 4 INJECTOR 1 FAULT 5 INJECTOR DRIVER 1 6 INJECTOR DRIVER 2 7 SPI HANDSHAKE LINE 0x8A4D Word is 0x0054 - ALDL 0xF4 0x01 Byte #16 - LCCPMW - LCC & CCP MODE WORD 0 1 = CCP ENABLED 1 1 = CCMREVS FLIP-FLOP 2 1 = MALFS HAVE OCCURRED 3 1 = ALDL MODE 4 BYPASS FUEL COMMANDED 4 SECOND TIME COOLANT 5 1 = FALSE REFERENCE PULSE DETECTED 6 1 = KWARM KICKDOWN REQUESTED 7 1 = CLOSED THROTTLE SPARK ACTIVE 0x8A4F Word is 0x005C - ALDL 0xF4 0x01 Byte #17 - DIAGMW5 - DIAGNOSTIC MODE WORD 5 0 1 = REFERENCE PULSE OCCURRED THIS 100 MSECS. (M36 LOGIC) 1 1 = MALF 41 (OPEN EST) DETECTED 2 1 = MALF 42 (GROUNDED EST) DETECTED 3 1 = MALF 16 FIRST PASS HAS OCCURRED 4 NOT USED * 5 1 = MALF 43A PRESENT (ONE ESC SENSOR OPEN)(not used in f-car) * 6 1 = MALF 43C PRESENT (BOTH ESC SENSORS OPEN) Y-CAR ONLY 1 = MALF 43C PRESENT (ESC SENSOR OPEN) F-CAR ONLY * 7 1 = MALF 43D PRESENT (BOTH ESC SENSORS GROUNDED) Y-CAR ONLY 1 = MALF 43D PRESENT (ESC SENSOR GROUNDED) F-CAR ONLY 0x8A51 Word is 0x0057 - ALDL 0xF4 0x01 Byte #18 - AIRMW - MAJOR LOOP MODE WORD 0 1 = IAC MOTOR MOVING (LAST PASS) 1 1 = AIR TO PORTS OR CONVERTER, 0 = AIR DEVERTED 2 1 = AIR TO EXHAUST PORTS, 0 = AIR TO CONVERTER 3 1 = IAC MOTOR RESET PREVIOUSLY VIA SLEWING 4 1 = A/C REQUESTED (F - CAR) 5 1 = IAC MOTOR EXTENDING (0 = RETRACTING) 6 1 = LAST 3.125 MSEC. IRQ WAS IAC 320 HZ INTERRUPT 7 1 = DECEL ENLEANMENT ENABLED 0x8A53 Word is 0x0061 - ALDL 0xF4 0x01 Byte #19 - MWFA1 - FUEL - AIR MODE WORD 0 1 = AIR DIVERTED 1 1 = LEARN CONTROL ENABLED 2 1 = LOW RPM HYSTERESIS FLAG IN CRANKING 3 1 = LEFT BANK BLM CHANGE INTEGRATOR RESET FLAG 4 1 = RIGHT BANK BLM CHANGE INTEGRATOR RESET FLAG 5 NOT USED 6 1 = CATALYTIC CONVERTER OVERTEMP ENABLED 7 1 = ENGINE IS CLOSED LOOP (BOTH SENSORS C.L.) 0x8A55 Word is 0x00D7 - ALDL 0xF4 0x01 Byte #20 - ADACPRES - A/D Result for A/C pressure Transducer 0x8A57 Word is 0x005A - ALDL 0xF4 0x01 Byte #21 - DIAGMW3 - Diagnostic mode word 3 0 1 = INTEGRATORS BEING FORCED TO 128 (USED IN M32) 1 MALF 44 OR 45 HAS BEEN DETECTED 2 1 = BYPASS O2 MALF LOGIC - INT. BEING RESET 3 1 = M53 ACTIVE (VOLTAGE > 17 OR VOLTAGE < 8) 4 1 = MALF 13 DETECTED 5 1 = IN DIAGNOSTIC MODE LAST PASS (FOR NVM CLEAR) 6 1 = MALF 36 INDICATED AND LATCHED (HI REF. FAULT) 7 1 = DIAGNOSTIC MODE HAS BEEN ENTERED 0x8A59 Word is 0x01AB - ALDL 0xF4 0x01 Byte #22 - COOLDEGA - COOLANT TEMPERATURE LINEARIZED (NON-DEFAULTED) DEGREES C = (N*.75 - 40) DEGS. F = (1.35N - 40) 0x8A5B Word is 0x00DA - ALDL 0xF4 0x01 Byte #23 - ADMAP - A/D RESULT FOR MANIFOLD PRESSURE SENSOR INPUT VOLTS = N*5/256 (kpa = (N + 28.06)/2.71) 0x8A5D Word is 0x00D4 - ALDL 0xF4 0x01 Byte #24 - ADTHROT - A/D RESULT FOR TPS INPUT VOLTS = N*(5/256) 0x8A5F Word is 0x00DC - ALDL 0xF4 0x01 Byte #25 - ADBAT - A/D RESULT FOR IGNITION VOLTAGE INPUT VOLTS = N/10 0x8A61 Word is 0x00DD - ALDL 0xF4 0x01 Byte #26 - ADOILTMP - A/D RESULT FOR OIL TEMPERATURE SENSOR INPUT SEE OIL TEMP. LOOK-UP TABLE (NON-DEFAULTED) 0x8A63 Word is 0x003F - ALDL 0xF4 0x01 Byte #27 NVADBARO NON - VOLITILE COMPUTED A/D BAROMETER VOLTS = N*(5/256) KPA = (N + 28.06)/2.71) 0x8A65 Word is 0x00D5 - ALDL 0xF4 0x01 Byte #28 ADMAT A/D RESULT FOR MANIFOLD TEMPERATURE INPUT SEE MAT LOOK-UP TABLE (DEFAULTED) 0x8A67 Word is 0x00D9 - ALDL 0xF4 0x01 Byte #29 ADLO2 A/D RESULT FOR LEFT O2 SENSOR INPUT MV = N*4.42 0x8A69 Word is 0x00D8 - ALDL 0xF4 0x01 Byte #30 ADRO2 A/D RESULT FOR RIGHT O2 SENSOR INPUT MV = N*4.42 0x8A6B Word is 0x0147 - ALDL 0xF4 0x01 Byte #31 LBLM LEFT BANK BLOCK LEARN MULTIPLIER N = COUNTS 0x8A6D Word is 0x0148 - ALDL 0xF4 0x01 Byte #32 RBLM RIGHT BANK BLOCK LEARN MULTIPLIER N = COUNTS 0x8A6F Word is 0x0149 - ALDL 0xF4 0x01 Byte #33 BLMCELL BLOCK LEARN MULTIPLIER CELL NUMBER N = NUMBER 0x8A71 Word is 0x0047 - ALDL 0xF4 0x01 Byte #34 RESETCTR RESET COUNTER FOR MALF 51 0x8A73 Word is 0x0214 - ALDL 0xF4 0x01 Byte #35 CYLSD COPY OF LOWER BYTE OF CYL SERIAL DATA 0x8A75 Word is 0x0144 - ALDL 0xF4 0x01 Byte #36 LINT INTEGRATOR VALUE FOR LEFT O2 SENSOR N = COUNTS 0x8A77 Word is 0x0143 - ALDL 0xF4 0x01 Byte #37 RINT INTEGRATOR VALUE FOR RIGHT O2 SENSOR N = COUNTS 0x8A79 Word is 0x003C - ALDL 0xF4 0x01 Byte #38 ISMNMPKA KEEP - ALIVE IAC MINIMUM MOTOR POSITION N = IAC STEPS 0x8A7B Word is 0x01FB - ALDL 0xF4 0x01 Byte #39 PURGEDC PURGE DUTY CYCLE % DC = N/2.56 0x8A7D Word is 0x003B - ALDL 0xF4 0x01 Byte #40 ISSPMP IAC PRESET MOTOR POSITION N = IAC STEPS 0x8A7F Word is 0x0110 - ALDL 0xF4 0x01 Byte #41 ISESDD DESIRED IDLE SPEED RPM = N * 12.5 0x8A81 Word is 0x307D (0x007D) - ALDL 0xF4 0x01 Byte #42 NEWRFPER PRESENT MINOR LOOP REFERENCE PERIOD (MSB) 0x8A83 Word is 0x307E (0x007E) - ALDL 0xF4 0x01 Byte #43 NEWRFPER+1 PRESENT MINOR LOOP REFERENCE PERIOD (LSB) MSEC = (MSB*256 + LSB)/65.536 0x8A85 Word is 0x00EC - ALDL 0xF4 0x01 Byte #44 SAREF LIMITED SPARK RELATIVE TO REF. PULSE DEGREES = N 0x8A87 Word is 0x00E1 - ALDL 0xF4 0x01 Byte #45 ADACEVAP A/D RESULT FROM A/C EVAPORATOR TEMP. SEE A/C LOOK-UP TABLE 0x8A89 Word is 0x0123 - ALDL 0xF4 0x01 Byte #46 NTRPMX ENGINE SPEED RPM = N * 25 0x8A8B Word is 0x3013 (0x0013) - ALDL 0xF4 0x01 Byte #47 TIME ENGINE RUNNING TIME IN SECONDS (MSB) 0x8A8D Word is 0x3014 (0x0014) - ALDL 0xF4 0x01 Byte #48 TIME+1 ENGINE RUNNING TIME IN SECONDS (LSB) SECONDS = (MSB*256 + LSB) 0x8A8F Word is 0x00FB - ALDL 0xF4 0x01 Byte #49 NOCKRTD RETARD DUE TO KNOCK DEGREES = N/2 0x8A91 Word is 0x30F8 (0x00F8) - ALDL 0xF4 0x01 Byte #50 OLDESCCT ECU ESC COUNTER VALUE FROM LAST MINOR LOOP (MSB) 0x8A93 Word is 0x30F9 (0x00F9) - ALDL 0xF4 0x01 Byte #51 OLDESCCT+1 (LSB) NOT USED N = (MSB) 0x8A95 Word is 0x00CF - ALDL 0xF4 0x01 Byte #52 MPH VEHICLE SPEED MPH = N KPH = (1.61 * N) 0x8A97 Word is 0x0164 - ALDL 0xF4 0x01 Byte #53 NTPSLD THROTTLE LOAD AXIS VARIABLE % THROTTLE = N/2.56 0x8A99 Word is 0x3262 (0x0262) - ALDL 0xF4 0x01 Byte #54 ACTVOL36 100 MSEC . OLD HI RES. PULSE COUNT (M36 LOGIC) (MSB) 0x8A9B Word is 0x3263 (0x0263) - ALDL 0xF4 0x01 Byte #55 ACTVOL36+1 100 MSEC . OLD HI RES. PULSE COUNT (M36 LOGIC) (LSB) 0x8A9D Word is 0x309C (0x009C) - ALDL 0xF4 0x01 Byte #56 LBPINJC LEFT BANK LOW VOLTAGE CORRECTED BPW (MSB) 0x8A9E Word is 0x309D (0x009D) - ALDL 0xF4 0x01 Byte #57 LBPINJC+1 LEFT BANK LOW VOLTAGE CORRECTED BPW (LSB) MSECS. = (MSB 256 + LSB)/131 0x8AA1 Word is 0x30A8 (0x00A8) - ALDL 0xF4 0x01 Byte #58 RBPINJC RIGHT BANK LOW VOLTAGE CORRECTED BPW (MSB) 0x8AA3 Word is 0x30A9 (0x00A9) - ALDL 0xF4 0x01 Byte #59 RBPINJC+1 RIGHT BANK LOW VOLTAGE CORRECTED BPW (LSB) MSECS. = (MSB * 256 + LSB)/131 0x8AA5 Word is 0x3215 (0x0215) - ALDL 0xF4 0x01 Byte #60 REFPERSD COPY OF REFPER FOR SERIAL DATA (MSB) 0x8AA7 Word is 0x3216 (0x0216) - ALDL 0xF4 0x01 Byte #61 REFPERSD+1 COPY OF REFPER FOR SERIAL DATA (LSB) MSECS. = (MSB * 256 + LSB)/65.535 0x8AA9 Word is 0x01FF - ALDL 0xF4 0x01 Byte #62 EGRDC EGR DUTY CYCLE DC = N/2.56 0x8AAB Word is 0x0065 - ALDL 0xF4 0x01 Byte #63 FANMW FAN CONTROL MODE WORD 0 1 = FAN 1 ENABLED (ALL PID FAN 1 STEPS ADDED) 1 1 = SPI FAILED (USED FOR ALDL) 2 1 = FAN 1 REQUESTED 3 1 = FAN 2 ENABLED (ALL PID FAN 2 STEPS ADDED) 4 1 = FAN 2 REQUESTED 5 1 = FAN 1 ENABLED BY HIGH OIL TEMPERATURE 6 1 = HIGH RPM FAN ENABLE 7 1 = NOT USED 0x8AAD Word is 0x0000 - Input mode 0xF4 0x?? 0x02 0x8AAF Byte is 0xF4 0x8AB0 Byte is 0x40 0x8AB1 Byte is 0x41 0x8AB2 Word is 0x028A - Location to use for .... 0x8AB4 Word is 0x028A - Location to use to save input message 0x8AB6 Word is 0x0000 - Input mode 0xF4 0x?? 0x03 0x8AB8 Byte is 0xF4 0x8AB9 Byte is 0x40 0x8ABA Byte is 0x11 0x8ABB Word is 0x028A 0x8ABD Word is 0x028A 0x8ABF Word is 0x0000 - Input Mode 0xF4 0x?? 0x04 0x8AC1 Byte is 0xF4 0x8AC2 Byte is 0x40 0x8AC3 Byte is 0x01 0x8AC4 Word is 0x028A 0x8AC6 Word is 0x028A 0x8AC8 Word is 0x0000 - Input mode 0xF4 0x?? 0x0A 0x8ACA Byte is 0xF4 0x8ACB Byte is 0x40 0x8ACC Byte is 0x01 0x8ACD Word is 0x028A 0x8ACF Word is 0x028A This list is a list of address of 0xF4 prefixed mode commands. 0x8AD1 word is 0x8A1D = ALDL 0xF4 0x?? 0x00 data list address - output message 0xF4 0x56 0x00 checksum 0x8AD3 word is 0x8A26 = ALDL 0xF4 0x?? 0x01 data list address - output fixed data stream 0xF4 0x95 0x01, 64 data bytes, checksum 0x8AD5 word is 0x8AAD = ALDL 0xF4 0x?? 0x02 data list address 0x8AD7 word is 0x8AB6 = ALDL 0xF4 0x?? 0x03 data list address 0x8AD9 word is 0x8ABF = ALDL 0xF4 0x?? 0x04 data list address 0x8ADB word is 0x8AC8 = ALDL 0xF4 0x?? 0x0A data list address - clear diag codes The following table is used with ALDL input message 0x40 for some sort of address/scaling. X is 0x8ADD, and B is added to it, B is anded with 0x3F 0x8ADD Byte is 0x45 0x8ADE Byte is 0x78 0x8ADF Byte is 0xC8 0x8AE0 Byte is 0x4E 0x8AE1 Byte is 0xA5 0x8AE2 Byte is 0x8D 0x8AE3 Byte is 0x16 0x8AE4 Byte is 0x89 0x8AE5 Byte is 0xB7 0x8AE6 Byte is 0xF2 0x8AE7 Byte is 0x3E 0x8AE8 Byte is 0x3C 0x8AE9 Byte is 0xA9 0x8AEA Byte is 0x87 0x8AEB Byte is 0xAB 0x8AEC Byte is 0x99 0x8AED Byte is 0x15 0x8AEE Byte is 0x6F 0x8AEF Byte is 0x23 0x8AF0 Byte is 0x6A 0x8AF1 Byte is 0x5D 0x8AF2 Byte is 0x04 0x8AF3 Byte is 0x19 0x8AF4 Byte is 0x52 0x8AF5 Byte is 0x88 0x8AF6 Byte is 0xF9 0x8AF7 Byte is 0x44 0x8AF8 Byte is 0xCD 0x8AF9 Byte is 0x0B 0x8AFA Byte is 0x1E 0x8AFB Byte is 0xA8 0x8AFC Byte is 0x0F 0x8AFD Byte is 0x40 0x8AFE Byte is 0xE0 0x8AFF Byte is 0x05 0x8B00 Byte is 0x95 0x8B01 Byte is 0xCA 0x8B02 Byte is 0x7F 0x8B03 Byte is 0x02 0x8B04 Byte is 0x3D 0x8B05 Byte is 0x75 0x8B06 Byte is 0xD4 0x8B07 Byte is 0x53 0x8B08 Byte is 0x4B 0x8B09 Byte is 0xE7 0x8B0A Byte is 0x56 0x8B0B Byte is 0x1D 0x8B0C Byte is 0x37 0x8B0D Byte is 0x47 0x8B0E Byte is 0xAD 0x8B0F Byte is 0x0D 0x8B10 Byte is 0xAE 0x8B11 Byte is 0x08 0x8B12 Byte is 0x0C 0x8B13 Byte is 0x28 0x8B14 Byte is 0xD0 0x8B15 Byte is 0xD9 0x8B16 Byte is 0x30 0x8B17 Byte is 0x13 0x8B18 Byte is 0xB5 0x8B19 Byte is 0xFA 0x8B1A Byte is 0x70 0x8B1B Byte is 0x50 0x8B1C Byte is 0xBA 0x8B34 Byte is 0x9F - this is supposed to be cylinder volume. 0x8B35 byte is 0x30 - compared with engine rpm, 750 rpm. RPM for lag filter at M[$00BA] is different if rpm is greater than or equal to this value. 0x8B36 byte is 0x03 - compared with throttle load axis variable - if above this value M[$00BA] = 0xFF 0x00 0x8B37 byte is 0x06 - Used in lag filter with M[$00BA] 0x8B00 Byte is 0x8D3C Table, B = 0x10, starts at $8D3C until $8D??, indexes with FC10 Result is used in multiply, index is from $015A / 2. 0x8D70 Table, B = 0x50, starts at 0x8D70 until 0x8EF7, indexes with FC10 Result is at 0x0162, index into is from 0x0158 0xB80B Code for Knock Sensor Failure. 0xC8C8 - Code to reset BLM to 128 if below 128 when the car goes WOT (Left BLM) 0xC8CB - changed BMI to BEQ so BLM is always changed to 128 0xC925 - Code to reset BLM to 128 if below 128 when the car goes WOT (Right BLM) 0xC928 - changed BMI to BEQ so BLM is always changed to 128. 0xCF54-0xCF72 - This is a table of jump/branch address, based on the value of M[$0049] 0xCF54 Value is 0xCF75 0xCF56 Value is 0xCF86 0xCF58 Value is 0xD29F 0xCF5A Value is 0xD541 0xCF5C Value is 0xD704 0xCF5E Value is 0xDA66 0xCF60 Value is 0xDC3E 0xCF62 Value is 0xDD10 0xCF64 Value is 0xE206 0xCF66 Value is 0xE2D4 0xCF68 Value is 0xE4B6 0xCF6A Value is 0xE648 0xCF6C Value is 0xE8BB 0xCF6E Value is 0xED05 0xCF70 Value is 0xEF38 0xCF72 Value is 0xF132 0xEDD3 Code to control TCC. 0xEDD3-0xEF37 Flowchart of this subroutine Edge Diagrammer Flowchart File 0xF43B Throttle load axis variable calculation, and throttle input voltage limit check. 0xF43B-0xF4C6 Flowchart of this subroutine EDGE Diagrammer Flowchart File 0xF56B SPI serial Transfer Complete Interrupt 0xF5D7 SCI Serial System general Interrupt - Figures out what the reason was and goes to the proper subroutine 0xF608 SCI Receiver Buffer Full Interrupt 0xF608-0xF782 Flowchart of this subroutine EDGE Diagrammer Flowchart File 0xF783 SCI Transmit buffer is empty and trasmitting is enabled subroutine 0xF783-0xF857 Flowchart of this subroutine EDGE Diagrammer Flowchart File 0xF858 Computer Initialization Code? 0xF858-0xFA5C Flowchart of this subroutine EDGE Diagrammer Flowchart File 0xFA5D Word is 0xFA66 points to address FA66 linked list of ALDL input commands -- This list is used if M[$006A] bit 0x10 is set. 0xFA5F Byte is 0x01 - This is one of the ALDL input values/commands. 0xFA66 Word is 0xFA6F points to address FA6F linked list of ALDL input commands 0xFA68 Byte is 0x02 - This is one of the ALDL input values/commands. 0xFA6F Word is 0x0000 end of ALDL linked list starting at 0xFA5D. 0xFA71 Byte is 0x03 - This is one of the ALDL input values/commands. 0xFAA3 Looks to subtract B from A and put result in M[$010F] (signed) 0xFAB5 for (x = 0x0005; x!= 0x0000;x--) D = D + M[$(X+0x02)] return from subroutine 0xFAC3 0xFB3D Store A to A/D control and wait until conversion is complete, sets M[$0059] bit 0x01 if conversion has a problem 0xFB4D 0xFB5A Negate address M[$4006] 0xFB63 Subroutine Inputs: X, A, B Outputs: D = XIN + (AIN*256 - XIN ) * BIN 0xFB63-0xFB82 Flowchart of this subroutine EDGE Diagrammer Flowchart File 0xFC31 Checksum Routine - Sums 0x8008 through 0x8008 + 0x7FF8 checksum is located at 0x8006 if 0x8008 is 0xAA it seems to disable the checksum, if 0x8008 is 0xDA everything is ok. if checksum is bad sets $0002 bit 0x80 and bit 0x01 of $0005 and calles $FAB5. 0xFCDF Table, B = 0x10, starts at $FCDF until $FD8D (0 from here to $FF9F, indexes with FC14 Value from $00D5 complemented and stored to $0234, and result stored to $0235,$0236 Some calculations done value * 8 and stored to $023C, $023E, $0240, $0242, $0244, $0246, $0248, $024A as a DWORD. 0xFD8F-$FF9F - Everything is 0.