; ; M6811 Disassembler Generated Source Code ; ; For User Control File: APYP.CTL ; Program File: APYP7165.BIN ; Disassembly into File: APYP7165.DIS ; .title APYP 7165 L0000 = 0x0000 ; Minor/Major Loop Counter L0001 = 0x0001 ;58, Non Vol Mem Mode wd ; ; Bit 0 = O2 SENSOR READY ; 1 = CLOSED LOOP TIMER TIMED OUT ; 2 = NOT USED ; 3 = IMPROPER SHUTDOWN ; ; 4 = CCPstartup expire ; 5 = IAC KICKDOWN ENABLED ; 6 = KWARM KICKDOWN ENABLED ; 7 = EST monitor fail (ERR 42) ; ;ннннннннннннннннннннннннннннннннн L0002 = 0x0002 ; Mode Word 2 ; 0 = ERR 43 test in progress ; ; 4 = Skip IAC motor reset ; 6 = ERR 43 test completed ; 7 = ERR 43 TEST FAIL THIS START ;ннннннннннннннннннннннннннннннннн L0003 = 0x0003 ; Mode Word 3 ; ; b0 ; b1 VATS OK ; b2 ; b3 error 51, chksum ; ; b4 ; b5 VATS AREADY PASSED ; b6 error 36, MAF Burn off (B/O) PASSED ; b7 KNOCK ENBLED BY DIFF COOL ;ннннннннннннннннннннннннннннннннн L0004 = 0x0004 ;3, Err Flg #1 ; ; Bit 0 = ERR 23 MAT SENSOR LOW ; 1 = ERR 22 TPS LOW ; 2 = ERR 21 TPS HIGH ; 3 = ERR 16 NOT USED ; ; 4 = ERR 15 COOL SENSOR LOW TEMP. ; 5 = ERR 14 COOL SENSOR HIGH TEMP. ; 6 = ERR 13 O2 SENSOR ; 7 = ERR 12 NO REF PULSES ;ннннннннннннннннннннннннннннннннн L0005 = 0x0005 ;4, Err Flg #2 ; ; Bit 0 = ERR 35 NOT USED ; 1 = ERR 34 MAF SENSOR LOW ; 2 = ERR 33 MAF SENSOR HIGH ; 3 = ERR 32 EGR DIAG. ; ; 4 = ERR 31 NOT USED ; 5 = ERR 26 NOT USED ; 6 = ERR 25 MAT SENSOR HIGH ; 7 = ERR 24 VSS ;ннннннннннннннннннннннннннннннннн L0006 = 0x0006 ;5, Err Flg #3 ; ; Bit 0 = ERR 51 PROM ERROR ; 1 = ERR 46 VATS FAILED ; 2 = ERR 45 O2 SENSOR RICH ; 3 = ERR 44 O2 SENSOR LEAN ; ; 4 = ERR 43 ESC FAILURE ; 5 = ERR 42 EST ERROR ; 6 = ERR 41 CYL SELECT ERROR ; 7 = ERR 36 BURNOFF DIAG. ;ннннннннннннннннннннннннннннннннн ;6, Err Flg #4 ; ; Bit 0 = ERR 63 NOT USED ; 1 = ERR 62 NOT USED ; 2 = ERR 61 NOT USED ; 3 = ERR 56 NOT USED ; ; 4 = ERR 55 NOT USED ; 5 = ERR 54 FUEL PUMP VOLTAGE ; 6 = ERR 53 OVER VOLTAGE ; 7 = ERR 52 CAL PAC MISSING ;ннннннннннннннннннннннннннннннннн L0008 = 0x0008 ;7, Err Flg #5 ; ; Bit 0 = NOT USED ; 1 = NOT USED ; 2 = NOT USED ; 3 = NOT USED ; ; 4 = NOT USED ; 5 = ERR 66 NOT USED ; 6 = ERR 65 NOT USED ; 7 = ERR 64 NOT USED ;ннннннннннннннннннннннннннннннннн L0009 = 0x0009 ; Stay Alive Mem Cell 0 L000B = 0x000B ; Stay Alive Mem Cell B L000D = 0x000D ; START UP A/F Ratio (2 bytes) L000F = 0x000F ; (2 bytes) L0011 = 0x0011 L0012 = 0x0012 ; (2 bytes) L0014 = 0x0014 ; (2 bytes) L0016 = 0x0016 ; Successive powerups without error L0017 = 0x0017 ; Ck Sum OF Err Words (2 bytes) L0019 = 0x0019 ;52, Eng Run Time, Sec L001A = 0x001A ;53, LSB L001B = 0x001B ; 0x001B - 0x002A = BLM cell matrix in memory 16 bytes L0024 = 0x0024 ; no reference in program ??? L002B = 0x002B ;23, IAC Present Posit. L002C = 0x002C ; Idle spd A/C anticipate L002D = 0x002D ; THis loc loaded with value at LC597 during init (2 byte, high byte = 0) L002E = 0x002E ; ERR36 failed counter (max is at $C22D) ;ннннннннннннннннннннннннннннннннн L002F = 0x002F ;56, Mode wd - 1st FMD byte ; ; Bit 0 = PARK/NEUTRAL (0 = DRIVE) ; 1 = 3rd GEAR ; 2 = 4th GEAR ; 3 = POWER STEERING ( 1 = CRAMP) ; ; 4 = READ BUT NOT USED ; 5 = EGR DIAGNOSTIC ; 6 = FAN REQUEST <=> ACHP (A/C HI PRESSURE) ; 7 = AIR CONDITIONER ( 0 = A/CREQUESTED) ;ннннннннннннннннннннннннннннннннн L0030 = 0x0030 ; 2nd FMD Byte ;ннннннннннннннннннннннннннннннннн L0031 = 0x0031 ; SPI command byte to FMD chip ; b0 1 = use 348 ohm table, 0 = use 4k ohm table ; b1 = COP2 (FMD COP) ; b2 = EST enable bit ; b7 = 0 = FMD byte 1 read, 1 = sel FMD b2 read on SPI ;ннннннннннннннннннннннннннннннннн L0032 = 0x0032 ; FACT TST, FMD SERIAL INPUT ; b0 FACT TEST, FMD SERIAL IN ; b1 COP 2 bit ; b2 Enable Spark ;ннннннннннннннннннннннннннннннннн L0033 = 0x0033 ; Ignition OFF Timer - used to turn off (power down) CPU ;ннннннннннннннннннннннннннннннннн L0034 = 0x0034 ; MINOR LOOP MD word ; b0 STACK FAIL ; b1 1 = FORCE LOW PULSE, RESULT OPEN LOOP ; b2 STACK OVER WRITE ; b3 2nd DRP (PERIOD VALID) ; b4 1 = IGN OFF ; b5 ENABLE MAF Burn Off ; b6 LOCK IN error 42B ; b7 HEADS UP ON LINE ; ;ннннннннннннннннннннннннннннннннн L0035 = 0x0035 ;57, Minor Lp wd #1 ; ; Bit 0 = ADVANCE FLAG ( 0= ADV. , 1= RTD) ; 1 = CHK ENGINE LIGHT DELAY FLAG ; 2 = INTERRUPT SERVICE EXECUTION EXCEED 6.25 MSEC ; 3 = FAN ON DISABLED BY PID ; ; 4 = TCC ROAD SPEED 1st PULSE FLAG ; 5 = A/C CLUTCH FLAG ( 0= A/C CLUTCH ON) ; 6 = BYPASS CHECK ENABLE ; 7 = ENGINE RUNNING FLAG ( 1= RUNNING) ; ;ннннннннннннннннннннннннннннннннн L0036 = 0x0036 ;54, Minor Lp mode word #2 ; ; 0 = OVERDRIVE (1=ON, 0=OFF) ; 1 = ERR 14 or 15 THIS STARTUP ; 2 = REF PULSES OCCURRED (6.25 MSEC CHECK) ; 3 = 1= ALDL MODE, 8192 LOCKED IN, & MODE 4 ; ; 4 = DIAGNOSTIC SWITCH IN DIAGNOSTIC POSITION ; 5 = DIAGNOSTIC SWITCH IN ALDL POSITION ; 6 = HIGH BAT. VOLT. , DISABLE SOLENOID DISCRETS ; 7 = SHIFT LIGHT (1= ON, 0= OFF) ;ннннннннннннннннннннннннннннннннн L0037 = 0x0037 ; ; b0 Skip error 42 FOR STALL SVR BYPASS ; b1 IN STALL Saver BYPASS Spark ; b2 TMG ERROR check flag (CLR'd after each major loop segment is run) ; b3 TCC LOCKED FOR PASS BY NOISE ; b4 SHIFT LIGHT DELAY STARTED ; b5 BLEND SPARK ; b6 ?? ; b7 ?? ;ннннннннннннннннннннннннннннннннн L0038 = 0x0038 ;55, MPU Status wd, (Fan, P.S. etc) ; ; Bit 0 = PARK/NEUTRAL MODE ; 1 = NOT IN THIRD GEAR ; 2 = OVERDRIVE REQUEST ; 3 = EXCESSIVE POWER STEER PRES. ; , CLUTCH ANTICIPTE ; ; 4 = EGR DIAGNOSTIC SWITCH CLOSED ; 5 = TCC LOCKED ; 6 = FAN REQUEST BIT ; 7 = 0 = A/C REQUEST ;ннннннннннннннннннннннннннннннннн L0039 = 0x0039 ;Enrichment Fuel Management bits ; b0 ?? ; b1 1st time ACCEL ENR flag CLR ; b2 Inj Flag (SINCE LAST PULSE) ? ; b3 ACEL ENR flag ; b4 ?? ; b5 ?? ; b6 ?? ; b7 IN TPS ACELL ENRICH ;ннннннннннннннннннннннннннннннннн L003A = 0x003A ;SINGLE FIRE Mode Word ; b0 ?? ; b1 ?? ; b2 ?? ; b3 ?? ; b4 TOGGLE S/F F/F ; b5 clear SF ; b6 0 PW ; b7 IN SINGLE FIRE ;ннннннннннннннннннннннннннннннннн L003B = 0x003B ;Heads Up DISPLAY Mode Word ; b5, SET 1K RPM (1000 RPM) ;ннннннннннннннннннннннннннннннннн L003C = 0x003C ;OLD CCP STATUS BYTE ; b0 CCP PW flag (1 = CCP enabled, PW > 0) ; b1 START NOT ENAB'LED ; b2 ; b3 MODE 4 BYPASS FUEL ; b4 Cool flag ; b5 Knock Fail error 43A ?? ; b6 WARM KICK DOWN REQ ; b7 Spark Adv. decay time started ;ннннннннннннннннннннннннннннннннн L003D = 0x003D ;60, ALCL Mode Wd. ; ; Bit 0 = ALDL RESET ; 1 = NOT USED ; 2 = FIELD SERVICE MODE ; 3 = FIRST C/L PASS THRU FIELD SERVICE MODE DONE ; (1= DONE) ; ; 4 = FIELD SERVICE. O2 TRANSITION ; 5 = ONE SECOND FLAG (SYMMETRICAL) ; 6 = 200 MSEC TOGGLE BIT FOR 2.5 HZ FSM FLASH RATE ; 7 = PULLUP RESISTOR FOR COOL (4K ohm thermister) ;ннннннннннннннннннннннннннннннннн L003E = 0x003E ; AIR MODE WD ; b6 NV RAM Bad flag ;ннннннннннннннннннннннннннннннннн L003F = 0x003F ;61, Mjr Lp mode wd ; ; Bit 0 = 100 MSEC, OLD CCP PURGE ON FLAG (0= OFF) ; 1 = AIR CONTROLLED, 0= AIR DIVERTED ; 2 = AIR SWITCHED TO PORT ; 3 = NOT USED ; ; 4 = SKIP BURNOFF DUE TO > 17 VOLTS THIS STARTUP ; 5 = D.E. QSEC (1 = ON) ; 6 = BURN OFF AIR METER ; 7 = DECEL ENLEANMENT ; ;ннннннннннннннннннннннннннннннннн L0040 = 0x0040 ; Diagnostic mode word 1 ; b1 = ; b2 = ?? ; b3 = set if upper nibble of minor loop counter = 0 (1 second) ; b4 = set if b0 of LSB of engine run time is set (2 seconds) ; b5 = ?? ; b6 = ERR 34 ; b7 = ?? ;ннннннннннннннннннннннннннннннннн L0041 = 0x0041 ; Diagnostic Mode wd 2 ; b0 = ; b1 = ; b3 = ?? ; b4 = ?? ; b5=Err 54A ; b6 = ?? ;ннннннннннннннннннннннннннннннннн L0042 = 0x0042 ; DIAGNOSTIC MODE WD 3 ; b0 = Chk eng light ON ; b1 = Err 44/45 flag ; b2 = INT FORCED 128. ERR 44/45 ; b3 = HI V BATTERY ; b4 = ERR 13 DETECTED ; b5 = Err 54A ; b6 = ?? ; b7 = In diagnostic mode ;ннннннннннннннннннннннннннннннннн L0043 = 0x0043 ; Error code flash mode word ; b4 = light on ; b6 = ;ннннннннннннннннннннннннннннннннн L0044 = 0x0044 ; Fuel Mode word ; b1=0 if in Decel cutoff ; b2 = use ld val for BLM ; b3 = ; b6=1 if fuel cutoff ; b7=?? ;ннннннннннннннннннннннннннннннннн L0045 = 0x0045 ;63, Flg Word Fuel/Air Mode word ; ; Bit 0 = NOT USED ; 1 = LEARN CONTROL FLAG ; (1= ENABLE STORE, 0= DISABLE) ; 2 = NOT USED ; 3 = NOT USED ; ; 4 = VSS FAILURE ; 5 = EECC SLOW O2 RICH/LEAN FLAG ; 6 = RICH/LEAN FLAG (1= RICH , 0= LEAN) ; 7 = CLOSED LOOP FLAG (1= C/L , 0= O/L) ;ннннннннннннннннннннннннннннннннн L0046 = 0x0046 ;62, Serial Data Mode Word ; ; Bit 0 = EXPECTING FIRST 160 BAUD INTERRUPT ; 1 = EXPECTING SECOND 160 BAUD INTERRUPT ; 2 = IN 8192 MODE ; 3 = LOCKED IN 8192 MODE ; ; 4 = NOT USED ; 5 = NOT USED ; 6 = NOT USED ; 7 = NOT USED ; ;ннннннннннннннннннннннннннннннннн L0047 = 0x0047 ;59, MANUAL Xmission Mode wd ; ; Bit 0 = OVERDRIVE ON ; 1 = 1st GEAR DIRECT ; 2 = 1st GEAR LOOKнAHEAD OK ; 3 = 4th GEAR ; ; 4 = 1st GEAR OVERDRIVE ; 5 = DOWNSHIFT/OFF REQUEST ; 6 = UPSHIFT/ON REQUEST ; 7 = OVERDRIVE ACTIVE ; ;ннннннннннннннннннннннннннннннннн L0048 = 0x0048 ; ; b0 = ; b1 = ; b2 = ; b3 = ; b4 = ;ннннннннннннннннннннннннннннннннн L0049 = 0x0049 ; b4 = Err 51 ; b7 = Fact Test Mode ;ннннннннннннннннннннннннннннннннн L004A = 0x004A ; Test mode word ;ннннннннннннннннннннннннннннннннн L004B = 0x004B ; Factory test FMB byte 1 ; b0 = ; b1 = Skip memory clear if b0 & b1 set ;ннннннннннннннннннннннннннннннннн L004D = 0x004D ; HU spark flags ; b5 = ; b6 = ;ннннннннннннннннннннннннннннннннн L004E = 0x004E ; mode word ; b2 = Err 21, TPS high ;ннннннннннннннннннннннннннннннннн L004F = 0x004F ; ; b1 = ; b2 = ; b3 = ; b5 = ; b6 = ; b7 = ;ннннннннннннннннннннннннннннннннн L0050 = 0x0050 ; ; b0 = ;ннннннннннннннннннннннннннннннннн L0051 = 0x0051 ; ; b5 = ; b6 = ;ннннннннннннннннннннннннннннннннн L0055 = 0x0055 ; ; b0 = L0058 = 0x0058 ; RPM / 25 L0059 = 0x0059 ;11, RPM, Var L005A = 0x005A ; RPM/12.5 L005C = 0x005C ; RPM after BLM update L005D = 0x005D ; Restart Coolant L005F = 0x005F ;8, Coolant, A/D L0060 = 0x0060 ;9, Strt up Coolant, Deg C L0061 = 0x0061 ;29, MAT Val L0062 = 0x0062 ;28, Raw Ld Val 12.5 msec old L0063 = 0x0063 ; Normalized load, 25 msec old L0064 = 0x0064 ;26, Filtered Ld Val L0065 = 0x0065 ;27, A/D Test Channel 118-137 acceptable ; Used by A/D routine at $F2FC L0066 = 0x0066 ;14, Filt MPH, vehicle speed (MSB) ;15, Filt MPH+1, vehicle speed (LSB) L0068 = 0x0068 ; Vss, MPH/(16/5) L0069 = 0x0069 ; 1 second counter L006A = 0x006A ; Timer1 + 2 L006C = 0x006C ; Timer1 + 1 L006E = 0x006E ; Timer1 + 0 L0070 = 0x0070 ;17, o2 Filtered L0072 = 0x0072 ; Filt o2 vdc, minor loop L0074 = 0x0074 ; Filt o2 vdc, air inject L0076 = 0x0076 ; Old air flow (2 byte) L0078 = 0x0078 L007A = 0x007A L007C = 0x007C L007E = 0x007E ; Current air flow L007F = 0x007F ;34, Batt Vlts, A/D (0.1 volt/bit) L0080 = 0x0080 ;35, Fuel Pump VDC L0081 = 0x0081 ; ERR 54 timer L0082 = 0x0082 ;10, TPS, A/D (1/2.56% per bit) L0083 = 0x0083 ; TPS Ld Axis Var L0084 = 0x0084 ; Old TPS Ld Axis Var L0085 = 0x0085 ; TPS T/F Ld Axis Var L0086 = 0x0086 ; Old val from TPS table L0087 = 0x0087 ; Filtered low TPS, (A/D) L0088 = 0x0088 L0089 = 0x0089 ; DFCO Stall Saver Timer L008B = 0x008B ; Accel Enrich after DFCO L008C = 0x008C ; Ignition off timer L008E = 0x008E ;16, N/V Ratio RPM/MPH L008F = 0x008F ; (2 byte) L0091 = 0x0091 L0092 = 0x0092 ; shift lite delay counter L0094 = 0x0094 L0095 = 0x0095 L0096 = 0x0096 L0097 = 0x0097 L0099 = 0x0099 ;12, Ref Period time between reference pulses (MSB) ;13, Ref Period +1 (LSB) L009B = 0x009B L009D = 0x009D L009F = 0x009F L00A1 = 0x00A1 ;41, Sprk Adv rel to TDC (2 byte) ;42 Sprk Adv +1 (LSB) L00A3 = 0x00A3 L00A4 = 0x00A4 ; Old MPU status reg ; b3 = DRP during last 6.25 msec L00A5 = 0x00A5 ;43, OLDPA3, ESC Knock Cnt'r L00A7 = 0x00A7 L00A8 = 0x00A8 L00A9 = 0x00A9 ;44, Knock Retard L00AA = 0x00AA L00AB = 0x00AB L00AC = 0x00AC L00AD = 0x00AD L00AE = 0x00AE L00AF = 0x00AF L00B0 = 0x00B0 L00B1 = 0x00B1 L00B2 = 0x00B2 L00B3 = 0x00B3 L00B5 = 0x00B5 L00B6 = 0x00B6 L00B7 = 0x00B7 L00B8 = 0x00B8 L00B9 = 0x00B9 ; ERR funct LOGGING FILTER CONSTANT L00BA = 0x00BA L00BC = 0x00BC L00BD = 0x00BD ;38, UNLIMITED AIRFLOW, not defaulted (MAF Diag) L00BE = 0x00BE L00BF = 0x00BF L00C0 = 0x00C0 L00C2 = 0x00C2 L00C3 = 0x00C3 L00C4 = 0x00C4 L00C5 = 0x00C5 ; O2 sensor value in window timer (sec) L00C6 = 0x00C6 ;21, BLM cell Number L00C7 = 0x00C7 ;20, BLM base pulse fuel C.L. coarse correction, Scaled L00C8 = 0x00C8 L00C9 = 0x00C9 L00CB = 0x00CB L00CC = 0x00CC L00CD = 0x00CD ;19, BLM base PW fuel C.L. fine correction L00CE = 0x00CE L00CF = 0x00CF ; Filtered o2, 12.5 msec L00D0 = 0x00D0 ;22, Clsd/Lp Int. L00D1 = 0x00D1 ; Glock learn up/down counter (50 msec inc) L00D2 = 0x00D2 ; Inj Offset Correction (msec * 65.635 L00D3 = 0x00D3 L00D4 = 0x00D4 ; Cool temp AFR ratio L00D5 = 0x00D5 ;47, Total Air/Fuel Val (2 byte) ;48, Total A/F (LSB) L00D7 = 0x00D7 ; Current looked up AFR % chg/cool temp L00D8 = 0x00D8 ; Lean offset (if cool) from table L00D9 = 0x00D9 ; Load Val Limited Air Flow for Lookup L00DA = 0x00DA ; Time req for DFCO L00DB = 0x00DB ; Diff TPS for Accel Enrich L00DC = 0x00DC ;45, Base PW, Last Inject (2 byte) L00DE = 0x00DE ;46, LSB L00DF = 0x00DF ; AFR % Chg vs Coolant from table L00E0 = 0x00E0 ; Accel Enrich Accum Fuel L00E2 = 0x00E2 ; Accel Enrich PW L00E4 = 0x00E4 ; Transient TPS L00E6 = 0x00E6 ; Num of async pulses since accel enrich L00E7 = 0x00E7 ; Num of inj's since start of accel enrich L00E8 = 0x00E8 ; Diff Load Val for Accel Enrich L00E9 = 0x00E9 ; Diff Load Val Accel Enrich Factor L00EA = 0x00EA ; Diff Load Val Accel Enrich Factor L00EB = 0x00EB ; Transient Filter Loop Timer L00EC = 0x00EC ; Transient Filtered Load Value L00EE = 0x00EE ; Accel Enrich Coolantr Factor L00EF = 0x00EF ; Decel Active Time L00F0 = 0x00F0 ; Filtered TPS for Decel Enlean L00F1 = 0x00F1 ;36, DISPFLOW, Mass Air Flow gm/sec. 16 bit ;37, DISPFLOW+1, (LSB) L00F3 = 0x00F3 ; MAF A/F Value L00F5 = 0x00F5 L00F7 = 0x00F7 ;18, ALDL Rich/Lean Transition Counter L00F8 = 0x00F8 ;IAC Control Word ; b4 = in open loop L00F9 = 0x00F9 ;R/S decay timer mode word ; b0 = IAC motor moved ; b2 = motor reset done ; b3 = delay finished ; b5 = L00FA = 0x00FA ;33, Fan D.C. L00FB = 0x00FB ; minimum fan time L00FC = 0x00FC L00FD = 0x00FD L00FF = 0x00FF ; Rich or lean o2 div timer L0101 = 0x0101 L0102 = 0x0102 L0103 = 0x0103 L0104 = 0x0104 ; 50 msec old filtered RPM L0105 = 0x0105 ; 50 msec old filtered RPM L0107 = 0x0107 ;24, IAC Step Dir Cmd L0108 = 0x0108 ;25, Requested Idle Spd.RPM/12.5 L0109 = 0x0109 L010A = 0x010A ; IAC step delay counter after startup L010B = 0x010B ; T/F (Throttle Follower) Learn argument L010C = 0x010C ; PID A/C timer value L010D = 0x010D ; Dead band counter L010E = 0x010E ; TPS T/F Ld Axis var L010F = 0x010F ; IAC last position L0110 = 0x0110 L0111 = 0x0111 ; running counter L0112 = 0x0112 ; PID CLD Lp Timer L0113 = 0x0113 ; Init IAC warm park position L0115 = 0x0115 L0116 = 0x0116 L0117 = 0x0117 ; RAM address L0119 = 0x0119 ;31, EGR D.C. L011A = 0x011A ; MAT L011B = 0x011B ;32, Charcoal Can Prg D.C. L011C = 0x011C L011D = 0x011D L011E = 0x011E ;39, SAP, Tot Sprk Adv rel to TDC ;40, SAP+1 (LSB) L0121 = 0x0121 L0122 = 0x0122 ; copy of minor loop counter ($0000) L0123 = 0x0123 ;49, Run tot Fuel Consumed (2 byte) ;50, Total fuel delivered + 1 (LSB) L0125 = 0x0125 ; Pending fuel to add L0127 = 0x0127 ;51, Run tot Dist Run, (.0005mi/bit) L0128 = 0x0128 ; new MAF burnoff delay timer L0129 = 0x0129 ; old VATS period L012B = 0x012B ; Counter for Delay prior to passby/lockup L012D = 0x012D ; Counter to keep TCC locked up for passby L012F = 0x012F ; Spark adv blend mult L0130 = 0x0130 ;30, MAT Val, A/D value L0131 = 0x0131 ; SCI 50 Msec TIMER TO LOOK FOR 8192 BAUD L0132 = 0x0132 ; SCI serial byte counter L0133 = 0x0133 ; SCI Receive Serial checksum L0134 = 0x0134 ; SCI I/O buffer address pointer (2 bytes) ; $0136 = Input control block (ICB) Status Flags ; b5 = input complete ; b6 = input not complete ; b7 = input in work ; $0137 - $0154 = Default SCI input buffer (29 bytes) ; L0137 = 0x0137 ; Input control block (ICB+1) ; L0159 = 0x0159 ; SCI Input Control Block Status Flags ; b3 = Mode 4 L015A = 0x015A ; Mode 2,3 & 4 SCI Data byte 1 ; Mode 4 control word (b4 = enabled) L015B = 0x015B ; Mode 2,3 & 4 SCI Data byte 2 ; Mode 4 control word 6 AIR inj pwm value L015C = 0x015C ; Mode 2,3 & 4 SCI Data byte 3 ; Mode 4 control word 1 L015D = 0x015D ; Mode 2,3 & 4 SCI Data byte 4 ; Mode 4 control word 4 L015E = 0x015E ; Mode 2,3 & 4 SCI Data byte 5 L015F = 0x015F ; Mode 2,3 & 4 SCI Data byte 6 L0160 = 0x0160 ; Mode 2,3 & 4 SCI Data byte 7 ; Mode 4 control word (b0 & b1 used) L0161 = 0x0161 ; Mode 2,3 & 4 SCI Data byte 8 L0162 = 0x0162 ; Mode 2,3 & 4 SCI Data byte 9 ; Mode 4 control word - AFR value L0163 = 0x0163 ; Mode 2,3 & 4 SCI Data byte 10 ; Mode 4 control word - spark advance ; L0165 = 0x0165 ; SCI serial xmit TX Msg Len (byte #2 - $55) L0166 = 0x0166 ; SERIAL DATA TIME TO FORCE MODE 0 L0167 = 0x0167 ; Factory test Minor Loop Counter L0168 = 0x0168 ; IEEE check sum L016A = 0x016A ; NV RAM check sum L016C = 0x016C ; Reference period (2 byte) L016E = 0x016E ; IAC motor L016F = 0x016F ;ннннннннннннннннннннннннннннннннн ; Table FDMPRES ; All 12 A/D's are read and saved beginning at $0170 L0170 = 0x0170 ; A/D, Ch 0, **UNUSED** ; A/D, Ch 1, (0x10) Val = 10 * Batt V L0172 = 0x0172 ; A/D, Ch 2, (0x20) o2 sense v ; A/D, Ch 3, **UNUSED** L0174 = 0x0174 ; A/D, Ch 4, (0x40) Coolant temp, 4K ; A/D, Ch 5, (0x50) TPS V L0176 = 0x0176 ; A/D, Ch 6, (0x60) Val = 10 * Fuel pump V ; A.D, CH 7, (0x70) Val = 50 * Diagnostic pin B V ; < 0.8 = grounded ; 0.8 < V < 2.0 = fact test mode ; > 3.05 = road test mode L0178 = 0x0178 ; A/D, Ch 8, (0x80) MAT Temp ; A/D, Ch 9 **UNUSED** L017A = 0x017A ; A/D, Ch 10, (0xA0) MAF sensor ; A/D, Ch 11 **UNUSED** ;ннннннннннннннннннннннннннннннннн L017C = 0x017C L017D = 0x017D ; 4K Coolant temp L017E = 0x017E ; ALCL NUM BITS TO TX L017F = 0x017F ; LOCATION OF NEXT ENTRY IN EPROM TBL L0180 = 0x0180 ; SAVE DATA TO ALCL XMIT BYTE L0181 = 0x0181 ; UP CNTS VAL WHEN 6.25 MSEC INT L0182 = 0x0182 L0183 = 0x0183 L0184 = 0x0184 L01A4 = 0x01A4 L01A6 = 0x01A6 L01AB = 0x01AB L01AD = 0x01AD L01AE = 0x01AE ;Total A/F Ratio (Old) L01B0 = 0x01B0 L01B1 = 0x01B1 L01B2 = 0x01B2 L01B3 = 0x01B3 L01B4 = 0x01B4 L01B5 = 0x01B5 L01B6 = 0x01B6 ;ннннннннннннннннннннннннннннннннн L01B7 = 0x01B7 ; Stack overflow marker, non-zero shows stack grew down here L01F7 = 0x01F7 ; L01FF = 0x01FF ; 0x01FF end of RAM, stack starts here and grows down ; ;ннннннннннннннннннннннннннннннннн ; Heads Up Variables - ; L0454 = 0x0454 L0455 = 0x0455 L0456 = 0x0456 L0457 = 0x0457 L0459 = 0x0459 L045A = 0x045A L045B = 0x045B L045D = 0x045D L0463 = 0x0463 L0465 = 0x0465 ; L3C18 = 0x3C18 ;ннннннннннннннннннннннннннннннннн ; ; I/O 0x3FC0 - 0x3FFC ; L3FC0 = 0x3FC0 ; Ref Period Timer L3FC2 = 0x3FC2 ; Timer #1 (Input 5) ;0x3FC4 = Timer2 (Input 6) Unused? ;0x3FC6 = PA1 Cntr (Cum Pulses) Unused? L3FC8 = 0x3FC8 ; PA2 Cntr Spark PERIOD, (Spark Feed Bk, in 3) - PA2 counter L3FCA = 0x3FCA ; Cntr #3 - Knock counter (16.5 Khz cntr if In 4 is hi) L3FCC = 0x3FCC ; PW Mod cnt'r, (P8) ARC (U2 F5 out) L3FCE = 0x3FCE ; Injection DELAY - EFI DLY L3FD0 = 0x3FD0 ; To MCU - Sync Fuel = 0 - BPW = 5 msec L3FD2 = 0x3FD2 ; EGR PW Out Cnt'r L3FD4 = 0x3FD4 ; PW Mod Cnt'r, Acel Enrich L3FD6 = 0x3FD6 ; TCC PW Cnt'r L3FD8 = 0x3FD8 ; CCP PW Out Cnt'r L3FDA = 0x3FDA ; Mass Air B.U. PW TMR L3FDC = 0x3FDC ; Spark Dwell Counter ;0x3FDE - not used ;0x3FE0 = Cntr #4 (Cum pulses on in 5) Vss? ;0x3FE2 - not used L3FE4 = 0x3FE4 ; B Cnt'r Bgn nxt Dwell L3FE6 = 0x3FE6 ; EST Fall (Spark Dwell Counter??) L3FE8 = 0x3FE8 ; EST Last Fall (CURRENT EST FALL - LAST EST FALL??) ;0x3FEA - not used L3FEC = 0x3FEC ; B Cnt'r last ref ;0x3FEE - not used ;0x3FF0 - not used L3FF2 = 0x3FF2 ; U2 Fan Out Async PW Cnt'r L3FF6 = 0x3FF6 ; EST FALL CNT'R (Time Fm Ref to Fire IGN Cnt'r) L3FF8 = 0x3FF8 ; PA1 (VATS counter) L3FFA = 0x3FFA ; Get MCU Status Reg. L3FFC = 0x3FFC ; MCU CSR (U2 SES Out) ;-------------------------------------------------- L4000 = 0x4000 ; $4000 - SPI data I/O Register ; ; Read from SPI and Write to SPI register. ; An SPI transfer is initiated by clearing bit 7 of $4001 ; ; eg. LDX #$4001 ; SPI ; BCLR 0,X,$80 ; clear b7, TO START SPI XMIT ; ; SPI data I/O Register ;-------------------------------------------------- L4001 = 0x4001 ; $4001 - SCI/SPI prescale/control register ; ; Write to control SPI. Read to determine SPI status. ; ; Initially: LDAA #$8C ; 1000 1100 ; ; Bit 0 = SFO ; Bit 1 = SF1 ; SF1 SFO Freq Hz ; 0 0 542,288 ; 0 1 262,144 ; 1 0 131,072 ; 1 1 65,536 ; ; Bit 2 = SPO ; Bit 3 = SP1 ; SP1 SPO Frq Hz ; 0 0 542,288 ; 0 1 1,048,576 ; 1 0 1,572,864 ; 1 1 2,097,152 ; Bit 4 = ; Bit 5 = ; ; Bit 6 = 0 = SI, ; 1 = PRP for Serial Input ; ; Bit 7 = Initiate Xfer (write 0). Ready Bit (read 1=ready) ; 0 = Init TX/Rx Bits ; 1 = Xmiter Ready For Next Byte ; Serial Cnt'l set this to 1 ; ; SCI/SPI prescale/control register ;---------------------------------------------------------- L4002 = 0x4002 ; $4002 - Output Data Latch ; ; Bit 0 = IAC Phase A output ; Bit 1 - IAC Phase B output ; Bit 2 - In and Out SPI device- FMD ? (0 = Deselect SPI ?) ; Bit 3 - SPI interfaced ADC ; Bit 4 ; Bit 5 ; Bit 6 - In and Out SPI device ; Bit 7 - Output only SPI device ; ; Output Data Latch ;---------------------------------------------------------- L4003 = 0x4003 ; $4003 - DDR (Data Direction Register) ; ; For IO port B $4004 ; 1 = INPUT, 0 = OUTPUT ; ; Bit 0 ; Bit 1 ; Bit 2 ; Bit 3 ; Bit 4 ; Bit 5 ; Bit 6 ; Bit 7 ; ; Write Data direction register ;---------------------------------------------------------- L4004 = 0x4004 ; $4004 - Parallel I/O CSR ; ; Initially: LDAA #$90 ; 1001 0000 ; STAA L4004 ; Set Baud = 8192 ; ; Bit 0 = Input is Sync from Rx ; Bit 1 = Output to DO 1 or Tmr Cnt'l PW mod ; Bit 2 = Output to DO 2 ; b2 = enable IAC ; Bit 3 = Output to DO 3 SXR (UART transciever) ENABLE = 1 ; b3 = SCI Xmit via SXR ; Bit 4 = SSO ; Bit 5 = SS1 ; SS1 SSO BAUD RATE ; 0 1 8192 ; 1 0 1024 ; 1 1 256 ; ; Bit 6 = Match enab Bit ; Bit 7 = Not Used ; ; Parallel I/O CSR ;---------------------------------------------------------- ; L4005 = 0x4005 ; Free run Up Counter, 32768 Hz? ;---------------------------------------------------------- ; L4006 = 0x4006 ; Match Reg - IRQ when $4006 = $4005 ;---------------------------------------------------------- ; L4007 = 0x4007 ; Tx/Rx CSR ; ; b5 = RX Int Enabled ; b6 = SCI Xmit Complete Enabled ; b7 = Xmit Enabled ;---------------------------------------------------------- ; L4008 = 0x4008 ; Read to clear Tx/Rx status register ; b0 = IRQ flag ; b1 = framing error ; b2 = noise flag ; b3 = overrun ; ; b4 = ? ; b5 = RDRF - Rx Int ; b6 = TC - SCI Xmit Complete ; b7 = TDRE - Xmit Int ;---------------------------------------------------------- ; L4009 = 0x4009 ; Receive Data Register ; ; Read to clear framing error ;---------------------------------------------------------- ; L400A = 0x400A ; TX Data Reg, (SCI) ;---------------------------------------------------------- ; L400B = 0x400B ; COP1 - Watch dog timer ;---------------------------------------------------------- ; L400C = 0x400C ; CPU COP ;---------------------------------------------------------- ; ; ; Following locations are in Heads Up PROM ; L5000 = 0x5000 ; Set Log RAM to MPU L5800 = 0x5800 ; H.U. ROM Addr L5803 = 0x5803 ; TO HEADS UP L5806 = 0x5806 ; TO HEADS UP L5809 = 0x5809 ; TO HEADS UP L580C = 0x580C ; TO HEADS UP L580F = 0x580F ; TO HEADS UP L5812 = 0x5812 ; TO HEADS UP L5815 = 0x5815 ; TO HEADS UP L5818 = 0x5818 ; TO HEADS UP ;---------------------------------------------------------- ; L81AB = 0x81AB ;---------------------------------------------------------- ; LB0C5 = 0xB0C5 LB601 = 0xB601 LB640 = 0xB640 ; ;****************************************************** ; .area Cal (ABS) .org 0xC000 LC000: .dw 0x0DA3 ; Prom ID LC002: .dw 0x0491 ; Date Code LC004: .dw 0x17F5 ; Sequence Number LC006: .dw 0x3560 ; Check Sum LC008: .db 0x6E ; Pgm Match Byte, 0x6E = 1989 Prod. ; нSet 0xAA For bypass of Cksum LC009: .db 0x00 ; Num of Cyl ; 8 = 0000 0000, 0x00 ; 6 = 1100 0000, 0xC0 ; 4 = 1000 0000, 0x80 ; 3 = 0110 0000, 0x60 LC00A: .dw 0xCB05 ; Cust ID WORD #1 LC00C: .dw 0xA302 ; Cust ID WORD #2 ; LC00E: .dw 0x0CCD ; 66Hz, VATS Ck Value, Fail if VATS L.T. LC010: .dw 0x0666 ; 33hZ, VATS Ck Value, Fail if VATS G.T. ; LC012: .dw 0x0385 ; If Ign off time (sec) => this, turn off MPU ; Arg = Time * 80 (11.2 sec) ;нннннннннннннннннннннннннннннннннннннннн LC014: .db 0x90 ; 1001 0000 Air Fuel Opt Word 1, (BUA=0xB4, BUB=0xB5) ; ; b7 = Use Filter for Air flow ; b6 = Use TCC for Shft Lamp Cnt'l (Use A/D batt for inj Lk Up instead of pump vdc?) ; b5 = Req Clsed Lp for Can Purge ; b4 = VATS Enable ; ; b3 = (Let low TPS disable CCP?) ; b2 = Analog MAF Meter in use (vs FM DIGITAL) ; b1 = Single Fire Mode ; b0 = Manual Xmission (RPM for TCC vs MPH?) ; ;нннннннннннннннннннннннннннннннннннннннн LC015: .db 0x04 ; 0000 0100 2nd AIr Flow Mode Word, (BUA=BUB=0x04) ; ; b7 = ; b6 = ; b5 = ; b4 = ; ; b3 = ; b2 = ; b1 = 1 = 2 AIR valves, 0 = 1 valve ; b0 = (EGR diag, 1 pass opt?) ; ;нннннннннннннннннннннннннннннннннннннннн LC016: .db 0x44 ; 3rd AIr Flow Mode Word, 0100 0100 (BUA=0x62, BUB=0x42) ; ; b7 = (CCP when output energized?) ; b6 = Calc Base Inj PW, not Tbl (Mag Spd Sensor installed?) ; b5 = Int Reset when B.Lrn cell Chnge ; b4 = (Opt Inv MAT Lk up?) ; ; b3 = (Unlock TCC in decel fuel C/O?) ; b2 = (CPU Auto Ratio Sel, 0 = TCC?) ; b1 = Reset Corr/init of Auto Enrich ; b0 = ; ;нннннннннннннннннннннннннннннннннннннннн LC017: .db 0x08 ; 4th AIr Flow Mode Word, 0000 1000 (BUA=0x00, BUB=0x08) ; ; b7 = Use TCC out to Cnt'l A/C Clutch ; b6 = Use Pwr Steer Pressure Sw ; b5 = N.O. Cooling Fan Req input ; b4 = TCC lk'ed Hwy Mode Spark Ck On. ; ; b3 = If CCP Chg, force Int to 128 ; b2 = 4th Gear Hwy Mode Spark Adv on ; b1 = ; b0 = Use Ld Val for BLM not dispflow (err 32 disabled if passes 1 time?) ;нннннннннннннннннннннннннннннннннннннннн ;***************************************************** ;Spark param'a, (EST) ;TYPE 32 ECM P/N 122 ;***************************************************** LC018: .dw 0x0CCD ; Start up RPM (3277d = 300 RPM) ; Arg = (65536*120)/(RPM/Num cyl) LC01A: .db 0x08 ; 12.5 mS LP'S RPM must be up, (8 Lp's) LC01B: .db 0x20 ; If Diff Ld Val > Use Max Dwell LC01C: .db 0x11 ; Spark reference angle - Base Timing, (5.9 Deg), (Val/2.844) ; Initial advance нн 6 deg LC01D: .dw 0x0077 ; Maximum spark advance, 42 DEG Max S.A., (Rel to lead) LC01F: .dw 0xFFF5 ; 3.5 Deg Max S.A. Retard LC021: .dw 0x0039 ; Fixed S.A. For Diag, (20 Deg), (Val/2.844) LC023: .db 0x17 ; 8 Deg Add S.A. for ALDL, (Val/2.844) ; ; >> STALL SAVER PARAMS << ; NUM = ARG/12.5 For all RPM args ; LC024: .db 0x20 ; Stall Saver Spark Enable RPM Threshold 1 (400 RPM) ; Val = RPM / 12.5 LC025: .db 0x24 ; Stall Saver Spark Enable RPM Threshold 2 (450 RPM) LC026: .db 0x2C ; Stall Saver Spark Enable RPM Threshold 3 (550 RPM) LC027: .db 0x2C ; If RPM > Disable Stall Saver S.A. LC028: .db 0x10 ; Add To SABLND *** ; ; Hot Restart Spark Params ; LC029: .db 0xA0 ; If Cool > 80C DISABLE HOT RESTART, ; Num = (temp C +40) * 256/192) ; LC02A: .db 0x01 ; HOT RETARD, (9.8 Deg) ; Num = temp * 256/192) ; LC02B: .db 0x7E ; Coolant Temp Spark Correction Disable Temp ; Deg F = val * 1.35 - 40 ; ; Disable cold S.A. ; LC02C: .db 0xFF ; If cool diff fm start > 20c ; Num = temp C * 256/192) ;нннннннннннннннннннннннннннннннннннннннннннннн ; MAIN SPARK ADV vs LD vs RPM ; ; ; 12 x 12 ; ; TBL = SPK * (256/90) ; LC02D: .db 0x00 ; Min RPM Val .db 0x20 ; Min LD VALUE Value .db 0x0C ; COL'S/ROW ;нннннннннннннннннннннннннннннннннннннннннннннн ; 400 RPM ;SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x39 ; 20.0 32.0 .db 0x39 ; 20.0 48.0 .db 0x39 ; 20.0 64.0 .db 0x39 ; 20.0 80.0 .db 0x39 ; 20.0 96.0 .db 0x39 ; 20.0 112.0 .db 0x39 ; 20.0 128.0 .db 0x2B ; 15.1 144.0 .db 0x1C ; 9.8 160.0 .db 0x1C ; 9.8 176.0 .db 0x1C ; 9.8 192.0 .db 0x1C ; 9.8 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 600 RPM ; SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x39 ; 20.0 32.0 .db 0x39 ; 20.0 48.0 .db 0x39 ; 20.0 64.0 .db 0x39 ; 20.0 80.0 .db 0x39 ; 20.0 96.0 .db 0x39 ; 20.0 112.0 .db 0x39 ; 20.0 128.0 .db 0x2B ; 15.1 144.0 .db 0x1C ; 9.8 160.0 .db 0x1C ; 9.8 176.0 .db 0x1C ; 9.8 192.0 .db 0x1C ; 9.8 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 800 RPM ; SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x39 ; 20.0 32.0 .db 0x39 ; 20.0 48.0 .db 0x47 ; 25.0 64.0 .db 0x55 ; 29.9 80.0 .db 0x55 ; 29.9 96.0 .db 0x50 ; 28.1 112.0 .db 0x4D ; 27.1 128.0 .db 0x3E ; 21.8 144.0 .db 0x2E ; 16.2 160.0 .db 0x1C ; 9.8 176.0 .db 0x1C ; 9.8 192.0 .db 0x1C ; 9.8 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 1000 RPM ; SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x39 ; 20.0 32.0 .db 0x40 ; 22.5 48.0 .db 0x55 ; 29.9 64.0 .db 0x69 ; 36.9 80.0 .db 0x66 ; 35.9 96.0 .db 0x61 ; 34.1 112.0 .db 0x61 ; 34.1 128.0 .db 0x50 ; 28.1 144.0 .db 0x36 ; 19.0 160.0 .db 0x2F ; 16.5 176.0 .db 0x28 ; 14.1 192.0 .db 0x28 ; 14.1 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 1200 RPM ; ; SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x4B ; 20.0 32.0 .db 0x54 ; 20.0 48.0 .db 0x5C ; 25.0 64.0 .db 0x72 ; 30.0 80.0 .db 0x72 ; 30.0 96.0 .db 0x6C ; 28.0 112.0 .db 0x66 ; 27.0 128.0 .db 0x5B ; 22.0 144.0 .db 0x4A ; 16.2 160.0 .db 0x3C ; 9.8 176.0 .db 0x3C ; 9.8 192.0 .db 0x33 ; 9.8 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 1400 RPM ; SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x55 ; 29.9 32.0 .db 0x6F ; 39.0 48.0 .db 0x75 ; 41.1 64.0 .db 0x75 ; 41.1 80.0 .db 0x6F ; 39.0 96.0 .db 0x6F ; 39.0 112.0 .db 0x6C ; 38.0 128.0 .db 0x64 ; 35.2 144.0 .db 0x5B ; 32.0 160.0 .db 0x47 ; 25.0 176.0 .db 0x41 ; 22.9 192.0 .db 0x3C ; 21.1 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 1600 RPM ; SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x66 ; 35.9 32.0 .db 0x6F ; 39.0 48.0 .db 0x77 ; 41.8 64.0 .db 0x7D ; 43.9 80.0 .db 0x77 ; 41.8 96.0 .db 0x75 ; 41.1 112.0 .db 0x6C ; 38.0 128.0 .db 0x61 ; 34.1 144.0 .db 0x55 ; 29.9 160.0 .db 0x4D ; 27.1 176.0 .db 0x47 ; 25.0 192.0 .db 0x44 ; 23.9 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 1800 RPM ; SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x68 ; 36.6 32.0 .db 0x6E ; 38.7 48.0 .db 0x72 ; 40.1 64.0 .db 0x83 ; 46.1 80.0 .db 0x83 ; 46.1 96.0 .db 0x7D ; 43.9 112.0 .db 0x75 ; 41.1 128.0 .db 0x75 ; 41.1 144.0 .db 0x66 ; 35.9 160.0 .db 0x4D ; 27.1 176.0 .db 0x47 ; 25.0 192.0 .db 0x44 ; 23.9 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 2000 RPM ; SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x6F ; 39.0 32.0 .db 0x7D ; 43.9 48.0 .db 0x84 ; 46.4 64.0 .db 0x86 ; 47.1 80.0 .db 0x83 ; 46.1 96.0 .db 0x80 ; 45.0 112.0 .db 0x7D ; 43.9 128.0 .db 0x75 ; 41.1 144.0 .db 0x64 ; 35.2 160.0 .db 0x52 ; 28.8 176.0 .db 0x50 ; 28.1 192.0 .db 0x4A ; 26.0 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 2200 RPM ; SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x6F ; 39.0 32.0 .db 0x7D ; 43.9 48.0 .db 0x88 ; 47.8 64.0 .db 0x86 ; 47.1 80.0 .db 0x86 ; 47.1 96.0 .db 0x83 ; 46.1 112.0 .db 0x7D ; 43.9 128.0 .db 0x77 ; 41.8 144.0 .db 0x64 ; 35.2 160.0 .db 0x52 ; 28.8 176.0 .db 0x50 ; 28.1 192.0 .db 0x4D ; 27.1 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 2400 RPM ; SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x6F ; 39.0 32.0 .db 0x7D ; 43.9 48.0 .db 0x88 ; 47.8 64.0 .db 0x86 ; 47.1 80.0 .db 0x86 ; 47.1 96.0 .db 0x83 ; 46.1 112.0 .db 0x7D ; 43.9 128.0 .db 0x6F ; 39.0 144.0 .db 0x61 ; 34.1 160.0 .db 0x52 ; 28.8 176.0 .db 0x4D ; 27.1 192.0 .db 0x47 ; 25.0 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 2800 RPM ; SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x6F ; 39.0 32.0 .db 0x7D ; 43.9 48.0 .db 0x88 ; 47.8 64.0 .db 0x86 ; 47.1 80.0 .db 0x86 ; 47.1 96.0 .db 0x7D ; 43.9 112.0 .db 0x7D ; 43.9 128.0 .db 0x66 ; 35.9 144.0 .db 0x55 ; 29.9 160.0 .db 0x4D ; 27.1 176.0 .db 0x47 ; 25.0 192.0 .db 0x41 ; 22.9 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 3200 RPM ; SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x6F ; 39.0 32.0 .db 0x7D ; 43.9 48.0 .db 0x86 ; 47.1 64.0 .db 0x83 ; 46.1 80.0 .db 0x77 ; 41.8 96.0 .db 0x75 ; 41.1 112.0 .db 0x6C ; 38.0 128.0 .db 0x58 ; 30.9 144.0 .db 0x4A ; 26.0 160.0 .db 0x41 ; 22.9 176.0 .db 0x41 ; 22.9 192.0 .db 0x41 ; 22.9 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 3600 RPM ; SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x6F ; 39.0 32.0 .db 0x7D ; 43.9 48.0 .db 0x86 ; 47.1 64.0 .db 0x80 ; 45.0 80.0 .db 0x72 ; 40.1 96.0 .db 0x6F ; 39.0 112.0 .db 0x6C ; 38.0 128.0 .db 0x58 ; 30.9 144.0 .db 0x4A ; 26.0 160.0 .db 0x44 ; 23.9 176.0 .db 0x44 ; 23.9 192.0 .db 0x44 ; 23.9 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 4000 RPM ; SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x6F ; 39.0 32.0 .db 0x7D ; 43.9 48.0 .db 0x86 ; 47.1 64.0 .db 0x80 ; 45.0 80.0 .db 0x72 ; 40.1 96.0 .db 0x6F ; 39.0 112.0 .db 0x6C ; 38.0 128.0 .db 0x58 ; 30.9 144.0 .db 0x4D ; 27.1 160.0 .db 0x4D ; 27.1 176.0 .db 0x4D ; 27.1 192.0 .db 0x4D ; 27.1 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 4400 RPM ; SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x6F ; 39.0 32.0 .db 0x7D ; 43.9 48.0 .db 0x86 ; 47.1 64.0 .db 0x80 ; 45.0 80.0 .db 0x72 ; 40.1 96.0 .db 0x6F ; 39.0 112.0 .db 0x6C ; 38.0 128.0 .db 0x5E ; 33.1 144.0 .db 0x5E ; 33.1 160.0 .db 0x5E ; 33.1 176.0 .db 0x5E ; 33.1 192.0 .db 0x58 ; 30.9 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 4800 RPM ; SPK ADV LD VAL ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x6F ; 39.0 32.0 .db 0x7D ; 43.9 48.0 .db 0x86 ; 47.1 64.0 .db 0x80 ; 45.0 80.0 .db 0x72 ; 40.1 96.0 .db 0x6F ; 39.0 112.0 .db 0x6C ; 38.0 128.0 .db 0x64 ; 35.2 144.0 .db 0x64 ; 35.2 160.0 .db 0x64 ; 35.2 176.0 .db 0x64 ; 35.2 192.0 .db 0x64 ; 35.2 208.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; Spark latency correction, usec ; ; ; TBL = VAL/15.26 ; ; Usec RPM ;нннннннннннннннннннннннннннннннннннннннннннннн LC0FC: .db 0x08 ; 122 800 .db 0x0B ; 168 1200 .db 0x0C ; 147 1600 .db 0x0D ; 183 2000 .db 0x11 ; 259 2400 .db 0x0F ; 229 2800 .db 0x0D ; 198 3200 .db 0x0D ; 198 3600 .db 0x0D ; 198 4000 .db 0x0E ; 214 4400 .db 0x0E ; 214 4800 .db 0x0E ; 214 5200 .db 0x0E ; 214 5600 .db 0x0E ; 214 6000 ;нннннннннннннннннннннннннннннннннннннннннннннн ; COOLANT ADVANCE CORRECTION vs LOAD VAL vs COOL ; ; ; TBL = (SPK ADV + BIAS) * 256/90 ) ;нннннннннннннннннннннннннннннннннннннннннннннн ; LC10A: .db 0x39 ; 20 DEG SA, COOL TBL BIAS ; LC10B: .db 0x00 ; Ld selector 0 = LV8 ; 4 = LVALT .db 0x20 ; Min COOL Val, (н16 C) .db 0x20 ; Min LD VAL Value .db 0x09 ; COL'S/ROW ;нннннннннннннннннннннннннннннннннннннннннннннн ; н16 Deg c COOL ; spk adv LV8 ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x64 ;25.2 32.0 .db 0x72 ;21.1 48.0 .db 0x72 ;21.1 64.0 .db 0x72 ;21.1 80.0 .db 0x6C ;18.0 96.0 .db 0x64 ;15.2 112.0 .db 0x5E ;13.0 128.0 .db 0x58 ;10.9 144.0 .db 0x4D ;7.1 160.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; н4 Deg c COOL ; spk adv LV8 ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x64 ;15.2 32.0 .db 0x72 ;21.1 48.0 .db 0x72 ;21.1 64.0 .db 0x72 ;21.1 80.0 .db 0x6C ;18.0 96.0 .db 0x64 ;15.2 112.0 .db 0x5E ;13.0 128.0 .db 0x58 ;10.9 144.0 .db 0x4D ;7.1 160.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 8 Deg c COOL ; spk adv LV8 ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x64 ;15.2 32.0 .db 0x72 ;21.1 48.0 .db 0x72 ;21.1 64.0 .db 0x72 ;21.1 80.0 .db 0x6C ;18.0 96.0 .db 0x64 ;15.2 112.0 .db 0x5E ;13.0 128.0 .db 0x58 ;10.9 144.0 .db 0x4D ;7.1 160.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 20 Deg c COOL ; spk adv LV8 ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x55 ;9.9 32.0 .db 0x55 ;9.9 48.0 .db 0x55 ;9.9 64.0 .db 0x55 ;9.9 80.0 .db 0x55 ;9.9 96.0 .db 0x55 ;9.9 112.0 .db 0x55 ;9.9 128.0 .db 0x55 ;9.9 144.0 .db 0x4D ;7.1 160.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 32 Deg c COOL ; spk adv LV8 ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x39 ;0.0 32.0 .db 0x55 ;9.9 48.0 .db 0x55 ;9.9 64.0 .db 0x55 ;9.9 80.0 .db 0x55 ;9.9 96.0 .db 0x55 ;9.9 112.0 .db 0x55 ;9.9 128.0 .db 0x55 ;9.9 144.0 .db 0x4D ;7.1 160.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 44 Deg c COOL ; spk adv LV8 ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x39 ;0.0 32.0 .db 0x55 ;9.9 48.0 .db 0x55 ;9.9 64.0 .db 0x55 ;9.9 80.0 .db 0x55 ;9.9 96.0 .db 0x55 ;9.9 112.0 .db 0x55 ;9.9 128.0 .db 0x55 ;9.9 144.0 .db 0x4D ;7.1 160.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 56 Deg c COOL ; spk adv LV8 ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x39 ;0.0 32.0 .db 0x39 ;0.0 48.0 .db 0x39 ;0.0 64.0 .db 0x39 ;0.0 80.0 .db 0x39 ;0.0 96.0 .db 0x39 ;0.0 112.0 .db 0x39 ;0.0 128.0 .db 0x39 ;0.0 144.0 .db 0x39 ;0.0 160.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 68 Deg c COOL ; spk adv LV8 ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x39 ;0.0 32.0 .db 0x39 ;0.0 48.0 .db 0x39 ;0.0 64.0 .db 0x39 ;0.0 80.0 .db 0x39 ;0.0 96.0 .db 0x39 ;0.0 112.0 .db 0x39 ;0.0 128.0 .db 0x39 ;0.0 144.0 .db 0x39 ;0.0 160.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 80 Deg c COOL ; ; spk adv LV8 ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x39 ;0.0 32.0 .db 0x39 ;0.0 48.0 .db 0x39 ;0.0 64.0 .db 0x39 ;0.0 80.0 .db 0x39 ;0.0 96.0 .db 0x39 ;0.0 112.0 .db 0x39 ;0.0 128.0 .db 0x39 ;0.0 144.0 .db 0x39 ;0.0 160.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 92 Deg c COOL ; spk adv LV8 ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x39 ;0.0 32.0 .db 0x39 ;0.0 48.0 .db 0x39 ;0.0 64.0 .db 0x39 ;0.0 80.0 .db 0x39 ;0.0 96.0 .db 0x39 ;0.0 112.0 .db 0x39 ;0.0 128.0 .db 0x39 ;0.0 144.0 .db 0x39 ;0.0 160.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 104 Deg c COOL ; spk adv LV8 ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x39 ;0.0 32.0 .db 0x39 ;0.0 48.0 .db 0x39 ;0.0 64.0 .db 0x39 ;0.0 80.0 .db 0x39 ;0.0 96.0 .db 0x39 ;0.0 112.0 .db 0x39 ;0.0 128.0 .db 0x39 ;0.0 144.0 .db 0x39 ;0.0 160.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; 116 Deg c COOL ; spk adv LV8 ;нннннннннннннннннннннннннннннннннннннннннннннн .db 0x39 ;0.0 32.0 .db 0x39 ;0.0 48.0 .db 0x39 ;0.0 64.0 .db 0x33 ;-2.1 80.0 .db 0x2E ;-3.8 96.0 .db 0x28 ;-5.9 112.0 .db 0x28 ;-5.9 128.0 .db 0x28 ;-5.9 144.0 .db 0x28 ;-5.9 160.0 ;нннннннннннннннннннннннннннннннннннннннннннннн ; LC17B: .db 0xFF ;Minimum Coolant Temp for Highway Spark Mode ;Val = DegF / 1.35 + 40 LC17C: .db 0x64 ;Maximum LV8 for Highway Spark Mode ;Val = LV8 LC17D: .db 0x24 ;Minimum RPM for Highway Spark Mode ;Val = RPM /25 LC17E: .db 0x05 ;Highway Spark Mode Enable Delay ;Val = Sec ;---------------------------------------------- ;Highway Mode Spark Advance vs Load ; ;Val = degrees / 0.351567 ; ;Deg LV8 ;----------------------------------------------- LC17F: .db 0x17 ; 32 .db 0x17 ; 48 .db 0x17 ; 64 .db 0x0B ; 80 .db 0x0B ; 96 .db 0x00 ; 112 .db 0x00 ; 128 .db 0x00 ; 144 ;нннннннннннннннннннннннннннннннннннннннннннннн ;PE mode Spark Advance ; ;Val = SA / 0.351567 ; ;Deg RPM ;нннннннннннннннннннннннннннннннннннннннннннннн LC187: .db 0x00 ; 400 .db 0x08 ; 1200 .db 0x08 ; 2000 .db 0x1A ; 3200 .db 0x03 ; 4800 ;нннннннннннннннннннннннннннннннннннннннннннннн ;Startup Spark Advance vs Coolant Temperature ;TBL = SPK ADV * 256/90 ) LC18C: .db 0x02 ; ;adv deg F cool ;нннннннннннннннннннннннннннннннннннннннннннннн LC18D: .db 0x00 ;0.0 -40 .db 0x00 ;0.0 -18 .db 0x00 ;0.0 3 .db 0x00 ;0.0 24 .db 0x00 ;0.0 46 .db 0x1C ;9.8 68 .db 0x1C ;9.8 90 .db 0x0E ;4.9 111 .db 0x00 ;0.0 133 .db 0x00 ;0.0 154 .db 0x00 ;0.0 176 .db 0x00 ;0.0 198 .db 0x00 ;0.0 219 .db 0x00 ;0.0 241 ;нннннннннннннннннннннннннннннннннннннннннннннн ; START UP SPARK ADVANCE DECAY DELAY vs STARTUP COOL ; ; Table value = INJECTS ; ; TBL = VAL/LC188 ;нннннннннннннннннннннннннннннннннннннннннннннн ; LC19B: .dw 0x0100 ; Mult for tbl, ; (NUM = ARG * 256) ; ; DECAY DLY DEG c S/U COOL ;нннннннннннннннннннннннннннннннннн LC19D: .db 0x50 ;20,480 -40 .db 0x50 ;20,480 -28 .db 0x50 ;20,480 -16 .db 0x50 ;20,480 -4 .db 0x50 ;20,480 8 .db 0x50 ;20,480 20 .db 0x50 ;20,480 32 .db 0x50 ;20,480 44 .db 0x50 ;20,480 56 .db 0x50 ;20,480 68 .db 0x50 ;20,480 80 .db 0x50 ;20,480 92 .db 0x50 ;20,480 104 .db 0x50 ;20,480 116 ;нннннннннннннннннннннннннннннннннннннннннннннн ; START UP SPARK ADVANCE DECAY TIME vs STARTUP COOL ; ; ; TBL = INJECTS ;нннннннннннннннннннннннннннннннннннннннннннннн ;INJ'S DEG c S/U COOL ;нннннннннннннннннннннннннннннннннн LC1AB: .db 0xB6 ; -40 .db 0xB6 ; -28 .db 0xB6 ; -16 .db 0xB6 ; -4 .db 0xB6 ; 8 .db 0xB6 ; 20 .db 0xB6 ; 32 .db 0xB6 ; 44 .db 0xB6 ; 56 .db 0xB6 ; 68 .db 0xB6 ; 80 .db 0xB6 ; 92 .db 0xB6 ; 104 .db 0xB6 ; 116 ;нннннннннннннннннннннннннннннннннн ; LC1B9: .db 0x44 ;Minimum RPM for ESC (knock) enable ;Val = RPM / 12.5 (44h = 850 RPM) LC1BA: .db 0x02 ;Minimum MPH for ESC (knock) enable ;Val = MPH LC1BB: .db 0x30 ;Minimum Coolant Temp for ESC (knock) Enable ;Val = Deg F / 1.35 (30h = 65 degF) LC1BC: .byte 0x35 ;Minimum coolant temp change since start to enable ESC ;Val = LC1BD: .db 0xFF ;Maximum %TPS for ESC (knock) Enable ;Val = % / 0.390625 LC1BE: .byte 0x00 LC1BF: .byte 0xFF LC1C0: .byte 0xFF ;нннннннннннннннннннннннннннннннннннннннннннннн ;ESC (knock) Attack Rate ;TBL = Rate (degree per millisecond) / 0.0225 LC1C1: .db 0x84 ; ;Deg / ms RPM ;нннннннннннннннннннннннннннннннннннннннннннннн LC1C2: .db 0x07 ; 0.158 400 .db 0x08 ; 0.180 1200 .db 0x0D ; 0.293 2000 .db 0x10 ; 0.360 3200 .db 0x10 ; 0.360 4800 ;нннннннннннннннннннннннннннннннннннннннннннннн ;ESC (knock) Recovery Rate ;TBL = Rate / 1.95 ; ;Percent / sec RPM ;нннннннннннннннннннннннннннннннннннннннннннннн LC1C7: .db 0x14 ; 400 .db 0x14 ; 1200 .db 0x1A ; 2000 .db 0x1F ; 3200 .db 0x1F ; 4800 ;нннннннннннннннннннннннннннннннннннннннннннннн ;Maximum Knock Retard Degrees in PE ;TBL = Degrees / 0.1758 ; ;Degrees RPM ;нннннннннннннннннннннннннннннннннннннннннннннн LC1CC: .db 0x2E ; 800 .db 0x33 ; 1600 .db 0x3F ; 2400 .db 0x57 ; 3200 .db 0x44 ; 4000 .db 0x2C ; 4800 .db 0x2C ; 5600 .db 0x2C ; 6400 ; ;нннннннннннннннннннннннннннннннннннннннннннннн ;Maximum Knock Retard When Not in PE ;TBL = Degrees / 0.1758 ; ;Degrees LV8 ;нннннннннннннннннннннннннннннннннннннннннннннн LC1D4: .db 0x22 ; 0 .db 0x22 ; 32 .db 0x22 ; 64 .db 0x22 ; 96 .db 0x39 ; 128 .db 0x72 ; 160 .db 0x72 ; 192 .db 0x72 ; 224 .db 0x72 ; 256 ;********************************************* ;>>>DIAGNOSTIC PARAMS <<< ; ;General Params. ;********************************************* LC1DD: .db 0xF7 ; 1111 0111, Mask For Mal Funct flg 1 ; b 0 Disables ERR Recognition ; ; b 0 = ERR Code 23 MAT Sensor low ; b 1 = ERR Code 22 TPS low ; b 2 = ERR Code 21 TPS High ; b 3 = ERR Code 16 Not used ; ; b 4 = ERR Code 15 Cool Sensor Low Temp ; b 5 = ERR Code 14 Cool Sensor Hi Temp ; b 6 = ERR Code 13 Oxy Sensor ; b 7 = ERR Code 12 No Ref pulse (Dist) ;нннннннннннннннннннннннннннннннннннн .db 0xCE ; 1100 1110, Mask for ERR flag 2 ; ; b 0 = ERR Code 35 M/A ; b 1 = ERR Code 34 MAF Sensor low ; b 2 = ERR Code 33 MAF Sensor high ; b 3 = ERR Code 32 EGR Diag ; ; b 4 = ERR Code 31 ; b 5 = ERR Code 26 ; b 6 = ERR Code 25 MAT Sensor High ; b 7 = ERR Code 24 VSS ;нннннннннннннннннннннннннннннннннннн LC1DF: .db 0xFD ; 1111 1101, Mask For ERR flag 3 ; ; b 0 = ERR Code 51 Prom Error ; b 1 = ERR Code 46 VATS Fail ; b 2 = ERR Code 45 o2 Sensor Rich ; b 3 = ERR Code 44 o2 Sensor Lean ; ; b 4 = ERR Code 43 KNOCK Fail ; b 5 = ERR Code 42 SPK Monitor error ; b 6 = ERR Code 41 CYL Select error ; b 7 = ERR Code 36 Burn off Diag. ;нннннннннннннннннннннннннннннннннннн .db 0xE0 ; 1110 0000, Mask for ERR flg 4 ; ; b 0 = ERR Code 63 ; b 1 = ERR Code 62 ; b 2 = ERR Code 61 ; b 3 = ERR Code 56 ; ; b 4 = ERR Code 55 ADU Error ; b 5 = ERR Code 54 Fuel pump Voltage ; b 6 = ERR Code 53 Over voltage ; b 7 = ERR Code 52 Missing Cal Pack ;нннннннннннннннннннннннннннннннннннн LC1E1: .db 0x00 ; 0000 0000, Mask for ERR flg 5 ; ; b 0 = ERR Code ; b 1 = ERR Code ; b 2 = ERR Code ; b 3 = ERR Code ; ; b 4 = ERR Code ; b 5 = ERR Code (Err 65?) ; b 6 = ERR Code (Err 66?) ; b 7 = ERR Code ;нннннннннннннннннннннннннннннннннннннн ;нннннннннннннннннннннннннннннннннннн LC1E2: .db 0x32 ; 50d, SUCESSIVE PWR UP'S W/O ERROR ; LC1E3: .db 0x0A ; 1 Sec ERR funct LOGGING FILTER CONSTANT #1 ; Num + Arg * 10 ; .db 0x32 ; 5 Sec ERR funct LOGGING FILTER CONSTANT #2 ; Num = Arg * 10 ; LC1E5: .db 0x64 ; 10 Sec ERR funct LOGGING FILTER CONSTANT #3 ; Num = Arg * 10 ; .db 0x78 ; 12 Sec ERR funct LOGGING FILTER CONSTANT #4 ; Num = Arg * 10 ; ;ннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 13 Params ; >> o2 sensor << ;ннннннннннннннннннннннннннннннннннннннннннннн ; LC1E7: .db 0x92 ; Coolant lo limit. >= 70C, (157f) ; CALIB = (deg c н 40) * 256/192) LC1E8: .db 0x3C ; If eng run time < 30 Sec, disable ERR 13 ; CALIB = sec / 2 LC1E9: .db 0x4F ; If o2 volts <= 350 Mvdc, ERR 13 ; CALIB = vdc * 226 LC1EA: .db 0x7C ; If o2 volts > 548 Mvdc, ERR 13 ; CALIB = vdc * 226 LC1EB: .db 0x0D ; 5% TPS Min for ERR 13 ; CALIB = TPS * 2.56 LC1EC: .db 0x1E ; 15 Sec TPS Min time limit for ERR 13 ; CALIB = Sec / 2 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 14 Params ; >> Cool sensor Hi << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC1ED: .db 0xE3 ; If cool 130c, (266f) < then Disable #14 ; CALIB = (deg c +40) * 256/192 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 14/15 Params ; >> Cool sensor Hi/Lo << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC1EE: .db 0x87 ; 61c, (142f), Cool Temp for default #14/15 ; CALIB = (deg c +40) * 256/192) LC1EF: .dw 0x0000 ; If Eng run 0 Sec Disable #15 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 15 Params ; >> Cool sensor Low << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC1F1: .db 0xFA ; IF TPS A/D <= disable ERR #15 ; TBL4 ADCOOL4K ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR #21 Params ; >> TPS sensor Hi << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC1F2: .db 0xF6 ; IF TPS A/D > set ERR #21 LC1F3: .db 0x80 ; If TPS <= 50% disable #21 LC1F4: .db 0x1E ; 30 Sec's Time req for ERR #21 LC1F5: .db 0x0F ; If Air Flow >= 15 gm?sec, disable ERR #21 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 21/22 Params ; >> TPS sensor Hi/Lo << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC1F6: .db 0x30 ; Use as default A/D value for ; TPS if ERR #21 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 22 Params ; >> TPS sensor Lo << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC1F7: .db 0x0C ; If TPS A/D >= 12 then disable ERR #22 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 23 Params ; >> MAT sensor lo << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC1F8: .db 0x04 ; If MAT < Enable ERR 23 ; TBL3, A/D MAT INV LC1F9: .db 0x78 ; 12 Sec req for ERR #23 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 23/25 Params ; >> MAT sensor lo/Hi << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC1FA: .dw 0x00F0 ; if Eng Run time <= 120 SEC ; disable ERR #23 & ERR #25 LC1FC: .db 0x01 ; 1 MPH MIN TO ENABLE ERR 23/25 LC1FD: .db 0x1D ; If ERR #25 Use as Default ; for MAT, (Deg C) ;TBL3, ADMATINV ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 24 Params ; >> Vss Sensor << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC1FE: .db 0x03 ; If > 3 MPH then disable ERR 24 LC1FF: .db 0x28 ; If <= 1000 RPM, Disable ERR #24 ; TBL1, NTRPM LC200: .db 0xF0 ; If RPM > 6000 then disable ERR 24 ; TBL1, NTRPM LC201: .db 0x05 ; If => 2% TPS then Disable ERR 24 ; CALIB = Arg * 2.56, (1.93%) LC202: .db 0x1A ; If LV8 >= 26, Disable ERR 24 LC203: .db 0x04 ; 4 Sec's TIMER for ERR 24 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 25 Params ; >> MAT sensor Hi << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC204: .db 0xF3 ; If MAT > then Enable ERR 25 ; TBL3, ADMATINV LC205: .db 0x78 ; 12 Sec's req for ERR 25 ; CALIB = Sec's * 10 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 32 Params ; >> EGR Diag << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC206: .db 0x5E ; If COOL >= 30.5c, (87f), Skip ; Strt up ERR #32 ; CALIB = (deg c + 40) * 256/19) LC207: .db 0x80 ; If LV8 > 128 then Skip #32 .db 0xB0 ; If Cool < ?c, (?f), ; Disable ERR #32 ; CALIB = (deg c + 40) * 256/192) .db 0xC0 ; If EGR DC < 51.9%, skip ERR #32 ; CALIB = EGR DC * 2.56 .db 0x4D ; If TPS > 30%than Skip #32 ; CALIB = Arg * 2.56 .db 0x1A ; If TPS < 10%, Skip ERR #32 ; CALIB = Arg * 2.56 .dw 0x0A8C ; Log ERR #32 if tmr > 2700 CNT'S LC20E: .db 0x01 ; Inc ERR #32 tmr this amt ; every 100 Msec. ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 33 Params ; >> MAF Sensor Hi << ;нннннннннннннннннннннннннннннннннннннннннннннннннн LC20F: .db 0x26 ; If TPS >= 14.8%, set ERR #34 ; CALIB = Arg * 2.56 LC210: .db 0x2D ; If Air Flow <= 45 gms/sec ; disable ERR #33 LC211: .db 0x60 ; If > 0.6 Sec, Set code #33 ; CALIB + Arg * 160 LC212: .db 0x0A ; 800 Msec ERR 34 Min time req. ; CALIB = Arg * 10 LC213: .db 0x80 ; If RPM > Disable #33 ; RPM/25 LC214: .db 0x64 ; 10.0 VDC PUMP VDC FOR ERR 33 ENABLE ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 34 Params ; >> MAF Sensor Lo << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC215: .dw 0x0031 ; IF Analog CTS * 7 or PP2DLT < 55 ; Set ERR 34. LC217: .db 0x0A ; ERR #43, 0.2 Sec Min time req. ; CALIB + Arg * 10 LC218: .db 0x18 ; If RPM > 600, Ck ERR #34 LC219: .db 0x10 ; If TPS > 6.25%, Ck ERR #34 ; CALIB = Arg * 2.56, LC21A: .db 0x00 ; If LV8 >= 0, Ck ERR #34 LC21B: .db 0x82 ; If LV8 <= 130, Ck ERR #34 LC21C: .dw 0x0031 ; IF Analog CTS * 7 or ; PP2DLT <, enab ERR #34 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 33/34 Params ; >> MAF Sensor Hi/Lo << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC21E: .db 0xA7 ; If TPS > 65.2%, then use for MAF Default ; CALIB = Arg * 2.56 LC21F: .db 0x15 ; Gms/sec Scale factor ; gms/sec/IAC Count ; CALIB = Arg * 256 LC220: .dw 0x0400 ; 4 Gms/Sec default air flow offset ;CALIB = Arg * 256 ;нннннннннннннннннннннннннннннннннннннннннннн ; DEFAULT AIR FLOW OFFSET PER PCT TPS VS RPM ; Value = Gms/Sec * 100 pct, (Offset) ; ; TBL = Arg * 100 ;нннннннннннннннннннннннннннннннннннннннннннн LC222: .db 0x08 ; Table Value ; ; Gms/Sec RPM ;нннннннннннннннннннннннн .db 0x1E ; 0.30 400 .db 0x5A ; 0.90 800 .db 0x6E ; 1.10 1200 .db 0x87 ; 1.35 1600 .db 0x96 ; 1.50 2000 .db 0xAF ; 1.75 2400 .db 0xD2 ; 2.10 3200 .db 0xE1 ; 2.25 4000 .db 0xE6 ; 2.30 4800 ;нннннннннннннннннннннннннннннннннннннннннннн ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 36 Params ; >> MAF Burn off Diag << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC22C: .db 0x03 ; 0.3 Second Dly prior to Burn off ; CAL = Arg * 10 LC22D: .db 0x06 ; 6 fails req for ERR #36 If HLM air meter LC22E: .db 0x5F ; 1.90 VDC, Fail B/O test if HLM A/D GT 1.90 VDC LC22F: .db 0x14 ; Fail B/O test if A/D < 400 mvdc ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 41 Params ; >> Cyl Sel error << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC230: .db 0x00 ; Fuel mode ; 24 = TBI ; 16 = 4 Cyl PFI ; 8 = 6 Cyl PFI ; 0 = 8 Cyl PFI ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 42 Params ; >> EST monitor error << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC231: .db 0x04 ; RPM, tbl1,ntrpm ;TBL1 NTRPM LC232: .db 0x02 ;If SPK toggled, (PA1 cnt's) ; >= 2 times, prior to eng run set ERR #42 LC233: .db 0x40 ;1048.6 msec ERR 42 treshold, ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 43 Params ; >> KNOCK fail << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC234: .db 0x03 ; ? LC235: .db 0xFA ; If KNOCK low time > 3.67 Sec,Enab ERR #43 ; CALIB = Arg * 64 LC236: .db 0x01 ; ? LC237: .db 0xB4 ; 90C, (194) MIN COOL TO ENABLE ERR 43 ; CALIB = (Deg C + 40) * 256/192 LC238: .db 0xBE ; if LV LT this, disable ERR 43 test $BE = 190d LC239: .db 0x47 ; Add 10 Deg Sprk Adv for #43 test ; CALIB = Deg * 256/45 LC23A: .db 0x2D ; If 02 Sensor >= 0.19v, then disable #44 ; CALIB = Arg * 226 LC23B: .db 0x32 ; 20 Seconds to set #44 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 45 Params ; >> o2 Sensor rich << ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC23C: .db 0x9E ; If o2 Sensor >= 0.699v, disable ERR #45 ; CALIB = Arg * 226 LC23D: .db 0x32 ; 50 Seconds to set ERR LC23E: .db 0x05 ; If TPS > 1.95%, enab ERR #45 ; CALIB = Arg * 2.56 LC23F: .db 0x00 ; If TPS < 0%, enab ERR #45 ; CALIB = TPS% * 2.56 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR # 54 Params ; >> Fuel Pump voltage << ; CALIB = Arg * 10 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннн LC240: .db 0xFF ; ? LC241: .db 0x0F ; ? LC242: .db 0x14 ; 2.O VDC MIN PUMP VOLTS FOR ERR 54 LC243: .db 0x14 ; 2.O VDC MIN PUMP VOLTS FOR ERR 54 LC244: .db 0x14 ; 2.O VDC MIN IGN VOLTAGE FOR ERR 54 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ;***************************************************** ;>>> EGR QUAILIFICATIONS <<< ; LC245: .db 0x15 ;Enable EGR if TPS > x and EGR Duty Cycle != 0 ;Val = %TPS / .390625 .db 0x16 ;Enable EGR if TPS > x and EGR Duty Cycle = 0 ;Val = %TPS / .390625 LC247: .db 0x1E ;Disable EGR if MAT < x ;Val = DegF / 1.35 + 40 ;ннннннннннннннннннннннннннннннннннннннннннннннннннннн ; EGR Duty CYC vs LV8 & RPM ; ; Tbl Val(DC) = CALIB * 256/100) ;ннннннннннннннннннннннннннннннннннннннннннннннннннннн LC248: .db 0x20 ; Min Min Val for RPM .db 0x20 ; LV8 Min .db 0x09 ; 9 Lines in table ;нннннннннннннннннннннннннннннннннн ; 800 RPM ;нннннннннннннннннннннннннннннннннн .db 0x00 ;LV 32 .db 0x00 ;LV 48 .db 0x00 ;LV 64 .db 0x00 ;LV 80 .db 0x00 ;LV 96 .db 0x00 ;LV 112 .db 0x00 ;LV 128 .db 0x00 ;LV 144 .db 0x00 ;LV 160 ;нннннннннннннннннннннннннннннннн ; 1200 RPM ;ннннннннннннннннннннннннннннннннн .db 0xFF ;LV 32 .db 0xFF ;LV 48 .db 0xFF ;LV 64 .db 0xFF ;LV 80 .db 0xFF ;LV 96 .db 0xFF ;LV 112 .db 0xFF ;LV 128 .db 0xFF ;LV 144 .db 0xFF ;LV 160 ;ннннннннннннннннннннннннннннннннн ; 1600 RPM ;ннннннннннннннннннннннннннннннннн .db 0xFF ;LV 32 .db 0xFF ;LV 48 .db 0xFF ;LV 64 .db 0xFF ;LV 80 .db 0xFF ;LV 96 .db 0xFF ;LV 112 .db 0xFF ;LV 128 .db 0xFF ;LV 144 .db 0xFF ;LV 160 ;ннннннннннннннннннннннннннннннннн ; 2000 RPM ;ннннннннннннннннннннннннннннннннн .db 0xFF ;LV 32 .db 0xFF ;LV 48 .db 0xFF ;LV 64 .db 0xFF ;LV 80 .db 0xFF ;LV 96 .db 0xFF ;LV 112 .db 0xFF ;LV 128 .db 0xFF ;LV 144 .db 0xFF ;LV 160 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн ; EGR DUTY CYCLE MULTIPLIER (0н2) vs COOLANT ; Gain vs Coolant Temp. ; ; TABLE VAL = Mult * 128 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ; MULT COOL ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн LC26F: .db 0x00 ; 0 8 .db 0x00 ; 0 20 .db 0x00 ; 0 32 .db 0x00 ; 0 44 .db 0x80 ; 1 56 .db 0x80 ; 1 68 .db 0x80 ; 1 80 ;***************************************************** ;TRANSMISSION CONTROL DATA & PARAM's ;ECM TYPE 0x6E ; ;***************************************************** LC276: .byte 0x82 LC277: .byte 0x01 LC278: .byte 0x73 LC279: .byte 0x54 LC27A: .byte 0x07 LC27B: .byte 0x01 LC27C: .byte 0x45 LC27D: .byte 0x26 LC27E: .byte 0x6E LC27F: .byte 0x6E LC280: .byte 0x78 LC281: .db 0x06 .db 0x08 LC283: .db 0x03 .db 0x06 LC285: .db 0x08,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF LC28F: .byte 0xFF LC290: .byte 0x03 LC291: .byte 0x6E LC292: .byte 0x61 LC293: .byte 0x1E LC294: .byte 0x00 LC295: .byte 0x78 LC296: .byte 0x01 LC297: .byte 0x0C LC298: .byte 0x13 LC299: .byte 0x30 LC29A: .byte 0x5A LC29B: .byte 0x23 ; NO PASSBY L/U IF TPS < 99.6% ; CALIB = ARG * 2.56 ; LC29C: .byte 0x28 ; NO PASS BY L/U IF =< 28 MPH ; ; PASS BY RPH HYST PAIR ; LC29D: .byte 0x32 ; NO PASS BY L/U IF > 1250 RPM LC29E: .byte 0xFF ; NO PASS BY L/U IF RPM < 6375 ; CAL = ARG/25 LC29F: .dw 0xFFFF ; 819 SEC DLY PRIOR TO PASSBY/LOCKUP ; CALIB = ARG * 80 LC2A1: .dw 0x00F0 ; 240d KEEP TCC LK'ED UP FOR PASSBY 24 SEC ; CAL = ARG * 80 LC2A3: .byte 0x2B ; Retard spark if in Passby NOISE LC2A4: .byte 0x00 ; Unlock TCC if diff %TPS > this in 12.5 msec LC2A5: .byte 0x00 ; Unlock TCC if % TPS > this LC2A6: .db 0x00 ; TCC Unlock Time ; Val = sec / .1 LC2A7: .db 0x00 ; TCC Minimum Coolant Temp for Lockup ; Val = DegF / 1.35 + 40 LC2A8: .db 0x00 ; TCC Coast Release ; Val = MPH .db 0x00 ; TCC Low MPH Coast Load Limit ; Val = %TPS / 0.390625 .db 0x00 ; TCC Lock Delay After 4-3 Downshift ; Val = Sec / 0.1 .db 0x00 ; TCC Lock Delay Before Lock in Low Gear ; Val = Sec / 0.1 LC2AC: .db 0x00 ; TCC Delay Before Lock in High Gear ; Val = Sec / 0.1 LC2AD: .db 0x00 ; TCC Delay Bypass Speed ; Val = MPH LC2AE: .db 0x00 ; TCC Unlock Prevention Threshold ; Val = MPH LC2AF: .db 0x00 ; Offset to Vss when 3rd gear required LC2B0: .db 0x00 ; MPH Low Speed Limit For Low Gear Unlock to Lock Transition ; Val = MPH .db 0x00 ; MPH High Speed Limit For Low Gear Lock to Unlock Transition ; Val = MPH .db 0x00 ; MPH Low Speed Limit for Low Gear Lock to Unlock Transition ; Val = MPH .db 0x00 ; MPH High Speed Limit For Low Gear Unlock to Lock Transition ; Val = MPH ;------------------------------------------------- ; TCC Unlock Speed vs %TPS (Not in 4th) ; ; Val = %TPS / 0.390625 ; ; %TPS MPH ;------------------------------------------------- .db 0x00 ; 12 .db 0x00 ; 20 .db 0x00 ; 28 .db 0x00 ; 36 .db 0x00 ; 44 .db 0x00 ; 52 .db 0x00 ; 60 .db 0x00 ; 68 .db 0x00 ; 76 .db 0x00 ; 84 .db 0x00 ; 92 .db 0x00 ; 100 ;------------------------------------------------- ;TCC Lock Speed vs %TPS (Not in 4th) ; ;Val = %TPS / 0.390625 ; ;%TPS MPH ;------------------------------------------------- .db 0x00 ; 12 .db 0x00 ; 20 .db 0x00 ; 28 .db 0x00 ; 36 .db 0x00 ; 44 .db 0x00 ; 52 .db 0x00 ; 60 .db 0x00 ; 68 .db 0x00 ; 76 .db 0x00 ; 84 .db 0x00 ; 92 .db 0x00 ; 100 ;--------------------------------------------------------- LC2CC: .db 0x00 ; MPH Low Speed Limit For High Gear Unlock to Lock Transition ; Val = MPH .db 0x00 ; MPH High Speed Limit For High Gear Unlock to Lock Transition ; Val = MPH .db 0x00 ; MPH Low Speed Limit for High Gear Lock to Unlock Transition ; Val = MPH .db 0x00 ; MPH High Speed Limit for High Gear Lock to Unlock Transition ; Val = MPH ;------------------------------------------------- ; TCC Unlock Speed vs %TPS (In 4th) ; ; Val = %TPS / 0.390625 ; ; %TPS MPH ;------------------------------------------------- .db 0x00 ; 12 .db 0x00 ; 20 .db 0x00 ; 28 .db 0x00 ; 36 .db 0x00 ; 44 .db 0x00 ; 52 .db 0x00 ; 60 .db 0x00 ; 68 .db 0x00 ; 76 .db 0x00 ; 84 .db 0x00 ; 92 .db 0x00 ; 100 ;--------------------------------------------------------- ;TCC Lock Speed vs %TPS (In 4th) ; ;Val = %TPS / 0.390625 ; ;%TPS MPH ;------------------------------------------------- .db 0x00 ; 12 .db 0x00 ; 20 .db 0x00 ; 28 .db 0x00 ; 36 .db 0x00 ; 44 .db 0x00 ; 52 .db 0x00 ; 60 .db 0x00 ; 68 .db 0x00 ; 76 .db 0x00 ; 84 .db 0x00 ; 92 .db 0x00 ; 100 ;--------------------------------------------------------- LC2E8: .db 0xFF,0xFF,0xFF,0xFF,0xFF ;**************************************************** ;Check CARS LIGHT TABLE & CALIB'S ; ;**************************************************** LC2ED: .db 0x78 ; 50C, (122F) COOL TEMP FOR ENG LITE ENABLE ; CALIB = (TEMP C + 40) * 256/192) LC2EE: .db 0x0A ; 40 MPH LIMIT FOR LITE ENAB LC2EF: .db 0x08 ; ? LC2F0: .db 0x28 ; ? LC2F1: .db 0x2B ; 1400 RPM/25 Thres for lite .db 0xBE ; 5200 RPM/25, force lite on ;ннннннннннннннннннннннннннннннннннннннннннннннннннннн ; SHIFT Lite On Table, %TPS vs RPM ; ; Table Val = % TPS * 256/100) ;ннннннннннннннннннннннннннннннннннннннннннннннннннннн ;ннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ; %TPS RPM ;ннннннннннннннннннннннннннннннннннннннннннннннннннннн .db 0x26 ; 800 .db 0x33 ; 1600 .db 0x4D ; 2400 .db 0x66 ; 3200 .db 0x80 ; 4000 .db 0xFB ; 4800 .db 0xFE ; 5600 ;ннннннннннннннннннннннннннннннннннннннннннннннннннннн LC2FA: .db 0x27 ; Lite off, 625 RPM/25 .db 0xBA ; Force lite Off, 5100 RPM/25 ;ннннннннннннннннннннннннннннннннннннннннннннннннннннн ; SHIFT Lite Off Table, %TPS vs RPM ; ; Table Val = % TPS * 256/100) ;ннннннннннннннннннннннннннннннннннннннннннннннннннннн ;ннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ; %TPS RPM ;ннннннннннннннннннннннннннннннннннннннннннннннннннннн .db 0x2C ; 800 .db 0x38 ; 1600 .db 0x52 ; 2400 .db 0x6C ; 3200 .db 0x85 ; 4000 .db 0xFF ; 4800 .db 0xFF ; 5600 ;ннннннннннннннннннннннннннннннннннннннннннннннннннннн LC303: .db 0x01 ; E Lite on delay Mult ; CALIB = Arg ;ннннннннннннннннннннннннннннннннннннннннннннннннннннн ; Eng Lite on Modifier Delay vs TPS ; ; ; Tbl Val = Sec * 10/delay mult ; ; SEC'S %TPS ;нннннннннннннннннннннннннннннннннннннннннннннннннннн LC304: .db 0x0A ; 10 0.0 .db 0x05 ; 5 12.5 .db 0x05 ; 5 25.0 .db 0x0A ; 10 37.5 .db 0x0A ; 10 50.0 ;****************************************************** ;>>> Cooling Fan Tables & Params <<< ;****************************************************** ; LC309: .db 0x23 ;Minimum MPH for using Fan 1 Duty Cycle LC30A: .db 0x0B ;MPH for Fan 1 Turn on if A/C ON LC30B: .db 0x4B ;Minimum Fan 1 Time on ;Val = Seconds / 0.2 LC30C: .db 0xFF ;Fan 1 duty cycle if MPH < minimum and A/C pressure high ;Val = %DC / 0.390625 LC30D: .db 0xC5 ;Fan 1 Turn On (A/C on) ;Val = DegF / 1.35 + 40 ($C5 = 226 degF) .db 0xC1 ;Fan 1 Turn Off (A/C on) ;Val = DegF / 1.35 + 40 ($C1 = 221 degF) LC30F: .db 0xC5 ;Fan 1 Turn On (A/C off) ;Val = DegF / 1.35 + 40 ($C5 = 226 degF) .db 0xC1 ;Fan 1 Turn Off (A/C off) ;Val = DegF / 1.35 + 40 ($C1 = 221 degF) ;-------------------------------------------------------- ;Cooling Fan Duty Cycle vs. Coolant Temp ; ;Val = %DC / 0.39065 ; ;%DC DegF ;-------------------------------------------------------- LC311: .db 0xFF ;100 176 .db 0xFF ;100 198 .db 0xFF ;100 219 .db 0xFF ;100 241 .db 0xFF ;100 262 .db 0xFF ;100 284 .db 0xFF ;100 306 ;************************************************* ;>>> Air Injection Managment Tables & Param's <<< ; ;************************************************* LC318: .db 0x00 ; Max Air to ports if in Pwr Enrich ; If In WOT >= then divert Air, (Sec) ; .db 0x0A ; Divert if If RPM Cont > ____ > 10 SEC ; Cal = Arg * 10, (1 Sec) ; LC31A: .db 0xAA ; If Filtered o2 > 0.752 vdc for time (170 sec) ; Then divert ; Cal = Arg * 226 LC31B: .db 0x38 ; If Filtered o2 < 0.247 vdc & in closed loop for time (56 sec) ; Then divert ; Cal = Arg * 226 ; LC31C: .dw 0x01AE ; 20 sec Rich or Lean o2 Divert timer ; Cal = Arg * 10 ; .db 0xB1 ; Divert if cont > 4000 RPM & time > ; .db 0x0A ; Enable air to conv If > 1 SEC since ; last neg delta LV8 > is < LC320: .db 0x19 ; If LV8 < 25 then Divert LC321: .db 0x64 ; If LV8 > 100 & MPH > Divert Air LC322: .db 0x3C ; If > 60 MPH & LV8 > then divert .db 0x40 ; Enable air to conv if in open lp ; & 100 Msec Drop in LV8 < 64 .db 0x49 ; If Cool < 14c, (58.5f) then divert ; Cal = (Arg + 40) * 256/192 .db 0xFE ; If in Open Lp => 25.4 Sec after ; closed loop then Divert ; Cal = Arg * 10 ;************************************************* ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; >>> Delta TPS Accel Enrichment <<< ; Tables & params ;нннннннннннннннннннннннннннннннннннннннннннннннннн LC326: .db 0x20 ; 0.125, Trans TPS filter coef. ; Cal = Arg * 256 LC327: .db 0x0A ;Minimum Delta %TPS for Accel Enrich ;Val = %TPS / 0.390625 LC328: .db 0x0A ; 0 Async Accel Enrich if Neg Diff TPS > 3.9% ; Cal = msec * 2.56 LC329: .dw 0x0069 ; 1.69 msec Min Async Pulse Width ; Cal = msec * 65.536 LC32B: .dw 0x016C ;Maximum Enrich Async Pulse Width ;Val = msec / 0.015259 LC32D: .db 0x01 ; Cal of Injects in fuel limiting ;---------------------------------------- ;Accel Enrich %BPW Factor vs Async Pulse ; ;Val = Factor / 0.015625 ; ;Factor Pulse ;---------------------------------------- LC32E: .db 0x20 ; 1 .db 0x20 ; 2 .db 0x20 ; 3 .db 0x20 ; 4 .db 0x20 ; 5 .db 0x20 ; 6 .db 0x20 ; 7 .db 0x20 ; 8 ; ;--------------------------------------- LC336: .db 0x08 ; Num of Entries in table ;нннннннннннннннннннннннннннннннннннннннннннннннннн ;No of Accel Enrich Async Pulses vs Coolant Temp ; ;Val = # of pulses ; ;# degF ;---------------------------------------- .db 0x0C ; -40 .db 0x0C ; 3 .db 0x0C ; 46 .db 0x0C ; 90 .db 0x0C ; 133 .db 0x0C ; 176 .db 0x06 ; 219 .db 0x06 ; 262 .db 0x06 ; 306 ; ;ннннннннннннннннннннннннннннннннннннн ; Async Factor vs COOLANT ; 8 LINE TBL, BUB TYOE 0x32 ECM ; ; TBL = Factor * 128 ;нннннннннннннннннннннннннннннннннннннн LC340: .db 0x08 ; NUM OF ENTRIES IN TABLE ; ; MULT Deg C ;ннннннннннннннннннннннннн .db 0x80 ; -40 .db 0x80 ; -16 .db 0x80 ; 8 .db 0x60 ; 32 .db 0x40 ; 56 .db 0x40 ; 80 .db 0x40 ; 104 .db 0x40 ; 128 .db 0x40 ; 152 ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; FUEL Limiting Factor vs Coolant ; ; Bits 0 н 3 Are after Next Inject ; Bits 4 н 7 Trigger To Next inject ;нннннннннннннннннннннннннннннннннннннннннннннннннн LC34A: .db 0xDB ; -40 .db 0xDB ; -16 .db 0xDB ; 8 .db 0xDB ; 32 .db 0xDB ; 56 .db 0xA9 ; 80 .db 0xA9 ; 104 .db 0x99 ; 128 ;ннннннннннннннннннннннннннннннннннннн ; Differental Accel Enrichment ; Tables & param's ;нннннннннннннннннннннннннннннннннннннн LC352: .db 0x01 ; Loops between Filtering of Ld Vals, (sec) .db 0x20 ; Transient Ld Val Filter coef, (0.125) LC354: .db 0x80 ; Init Ld Val Filter constant LC355: .db 0xAA ; ? LC356: .db 0x14 ;Minimum Delta LV8 for Accel Enrich ;Val = LV8 ;---------------------------------------- ;Accel Enrich Factor vs Change in LV8 ; ;Val = Factor / 0.390625 ; LC357: .db 0x04 ; Num of lines in table н1 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ;Factor/100 LV8 ;---------------------------------------- .db 0x20 ; 0 .db 0x20 ; 64 .db 0x28 ; 128 .db 0x34 ; 192 .db 0x34 ; 256 ; ;-------------------------------------------- ;LV8 Accel Enrich Coolant Factor vs Coolant Temp ; ;Val = Multiplier / 0.0078125 ; LC35D: .db 0x08 ; Num of lines in table н1 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн ;Mult DegF ;-------------------------------------------- .db 0x37 ; -40 .db 0x37 ; 3 .db 0x37 ; 46 .db 0x2D ; 90 .db 0x19 ; 133 .db 0x00 ; 176 .db 0x00 ; 219 .db 0x00 ; 262 .db 0x00 ; 306 ; ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ACCEL ENRICH DECAY FACTOR VS COOLANT TEMP. ; ; TABLE VALUE + DIFF LD VAL PCT'AGE PER INJECT ; ; TBL VAL = %CHG * 256/100) ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн LC367: .db 0x08 ; Num of lines in table н1 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ; %CHG COOL Deg C ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн .db 0x40 ; -40 .db 0x40 ; -16 .db 0x2C ; 8 .db 0x2C ; 32 .db 0x40 ; 56 .db 0x66 ; 80 .db 0x80 ; 104 .db 0x99 ; 128 .db 0x99 ; 152 ;-------------------------------------------- ;Crank Fuel PW vs Coolant Temp ; ; LC371: .dw 0x3334 ; Scalar for max PW ; Cal = Scalar * 65.535 (200 msec) ; ; TBL = (usec * 65.536)/(Scalar) ; Scalar = 13108 ; ; usec Deg C ;-------------------------------------------- LC373: .db 0xCD ; 41001 -40 .db 0xB3 ; 35801 -18 .db 0x60 ; 19200 3 .db 0x2D ; 8995 25 .db 0x20 ; 6400 46 .db 0x14 ; 4000 68 .db 0x0F ; 3000 90 .db 0x0A ; 2000 111 .db 0x0A ; 2000 133 .db 0x0A ; 2000 154 .db 0x0A ; 2000 176 .db 0x0A ; 2000 198 .db 0x0A ; 2000 219 .db 0x0A ; 2000 241 ;-------------------------------------------- ;Crank Fuel PW vs TPS ; ;Val = Multiplier / .015625 ; ;Multiplier %TPS ;-------------------------------------------- LC381: .db 0x08 ; Num of lines in table н1 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн .db 0x40 ; 1 0 .db 0x40 ; 1 12.5 .db 0x40 ; 1 25.0 .db 0x40 ; 1 37.5 .db 0x40 ; 1 50.0 .db 0x40 ; 1 62.5 .db 0x40 ; 1 75.0 .db 0x00 ; 0 87.5 .db 0x00 ; 0 100.0 ; ;-------------------------------------------- ;Crank Fuel PW Multiplier vs Ref Pulse ; ;Val = Multiplier / 0.00390625 ; ;Mult Ref Pulse ;-------------------------------------------- LC38B: .db 0x00 ; 0 1 .db 0x00 ; 0 2 .db 0x00 ; 0 3 .db 0x00 ; 0 4 .db 0x00 ; 0 5 .db 0x00 ; 0 6 .db 0x00 ; 0 7 .db 0x00 ; 0 8 .db 0x80 ; .5 9 .db 0x80 ; .5 10 .db 0x40 ; .25 11 .db 0x40 ; .25 12 .db 0x40 ; .25 13 .db 0x40 ; .25 14 .db 0x40 ; .25 15 .db 0x40 ; .25 16 LC39B: .db 0x33 ; .20 17 .db 0x33 ; .20 18 .db 0x33 ; .20 19 .db 0x33 ; .20 20 .db 0x33 ; .20 21 .db 0x33 ; .20 22 .db 0x33 ; .20 23 .db 0x33 ; .20 24 ;***************************************************** ;>>> Fuel/Air Tables & Params <<< ; ;***************************************************** LC3A3: .db 0x70 ; Throt Hi н Throt Lo LC3A4: .db 0x23 ; 13.7% Min TPS Throttle Posit ; CALIB = Arg * 2.56 LC3A5: .db 0x01 ; Filt coef Low TPS, (0.0039) LC3A6: .db 0x10 ; Cool Temp Coef, (0.0625) ; CALIB = Arg * 256 ;****************** ;o2 SENSOR PARAMS ;****************** LC3A7: .db 0xF0 ; o2 Sens 12.5 Msec COEF, (0.9375) ; CALIB = Arg * 256 LC3A8: .db 0x05 ; o2 Sens 100 Msec coef, (0.0195) ; CALIB = Arg * 256 LC3A9: .db 0x66 ; 12.5 msec o2 Filter init val ; WHEN ENG NOT RUNNING, (0.398 VDC) ; CALIB = Arg * 256 ; ; Fuel Output Param's ; LC3AA: .db 0x55 ; ? ; LC3AB: .dw 0x0069 ; 1.693 msec Min Base PW ; CALIB = Arg * 65.536 LC3AD: .dw 0x0069 ; 1.693 msec Default Pulse Width ; CALIB = Arg * 65.536 LC3AF: .db 0xFF ;Speed Limiter - Stop Fuel ;Val = MPH .dw 0x0062 ;Rev Limiter - Stop Fuel ;Val = RPM * 983600 LC3B2: .db 0xFE ;Speed Limiter - Re-start Fuel ;Val = MPH .dw 0x0067 ;Rev Limiter - Re-start Fuel ;Val = RPM * 983600 ;---------------------------------- ;Injector Pulse Width Correction vs Battery Voltage ; ;Val = usec / 30.518 ; ;usec added vDC ;----------------------------------- LC3B5: .db 0x14 ; 0.0 .db 0x14 ; 1.6 .db 0x14 ; 3.2 .db 0xFE ; 4.8 .db 0xBA ; 6.4 .db 0x4C ; 8.0 .db 0x31 ; 9.6 .db 0x25 ; 11.2 .db 0x17 ; 12.8 .db 0x10 ; 14.4 .db 0x0F ; 16.0 .db 0x0A ; 17.6 .db 0x05 ; 19.2 .db 0x01 ; 20.8 .db 0x00 ; 22.4 .db 0x00 ; 24.0 .db 0x00 ; 25.6 ; ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн ; Inj Offset for Small PW's vs Base PW ; ; TBL = Msec * 65.536 Msec ; ; Offset Base ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн LC3C6: .db 0x11 ; 0.488 msec .db 0x08 ; 0.732 .db 0x06 ; 0.976 .db 0x05 ; 1.220 .db 0x04 ; 1.460 .db 0x03 ; 1.780 .db 0x03 ; 2.197 .db 0x01 ; 2.440 .db 0x00 ; 2.685 .db 0x00 ; 2.929 .db 0x00 ; 3.170 .db 0x00 ; 3.410 .db 0x00 ; 3.660 .db 0x00 ; 3.900 .db 0x00 ; ; ;***************************************************** ;>>> Open Loop Fuel Tables & Param's <<< ; ;***************************************************** LC3D5: .dw 0x01BD ;Stoichiometric A/F Ratio ;Val = AFR * 6553.6 LC3D7: .dw 0x01C6 ;Double Fire FI size @ 40 psig ;Val = lb/hr * 10150 LC3D9: .dw 0x038C ;Single Fire FI size @ 40 psig ;Val = lb/hr * 20300 LC3DB: .db 0x04 ;4 inj's, Startup inj startup decay rate ; ;---------------------------------- ;Open Loop AFR % Change vs LV8 ; ;Val = %Chg / .390625 ; ;%Chg LV8 ;---------------------------------- LC3DC: .db 0x00 ; 0 0 .db 0x00 ; 0 16 .db 0x00 ; 0 32 .db 0x0A ; 48 .db 0x0A ; 64 .db 0x0A ; 80 .db 0x0D ; 96 .db 0x12 ; 112 .db 0x12 ; 128 .db 0x17 ; 144 .db 0x1C ; 160 .db 0x21 ; 176 .db 0x21 ; 192 .db 0x21 ; 208 .db 0x21 ; 224 .db 0x21 ; 240 .db 0x21 ; 256 ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; START UP ENRICH vs COOL ; *** Choke *** ; ; TBL = 2.56 * PCT CHG ; ; PCT CHG Deg c COOL ;нннннннннннннннннннннннннннннннннннннннннннннннннн LC3ED: .db 0xF3 ; -40 .db 0xC0 ; -28 .db 0x80 ; -16 .db 0x80 ; -4 .db 0x80 ; 8 .db 0x50 ; 20 .db 0x50 ; 32 .db 0x40 ; 44 .db 0x31 ; 56 .db 0x26 ; 68 .db 0x26 ; 80 .db 0x0D ; 92 .db 0x0D ; 104 .db 0x0D ; 116 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн ; Start up Enrich Decay vs Cool Temp. ; ; Tbl Val = Num of Injects ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн LC3FB: .dw 0x0200 ;Scale factor for Table, (512d) ;-------------------------------------------------- LC3FD: .db 0x19 ; -40 .db 0x19 ; -28 .db 0x19 ; -16 .db 0x19 ; -4 .db 0x19 ; 8 .db 0x19 ; 20 .db 0x19 ; 32 .db 0x32 ; 44 .db 0x32 ; 56 .db 0x32 ; 68 .db 0x32 ; 80 .db 0x32 ; 92 .db 0x32 ; 104 .db 0x32 ; 116 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн ; Startup enrichment decay decay amount vs Cool Temp. ; ; Tbl Val = 6.5536 * % CHG ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн LC40B: .db 0xC5 ; -40 .db 0x90 ; -28 .db 0x42 ; -16 .db 0x42 ; -4 .db 0x42 ; 8 .db 0xC0 ; 20 .db 0xC0 ; 32 .db 0x42 ; 44 .db 0x42 ; 56 .db 0x42 ; 68 .db 0x42 ; 80 .db 0x42 ; 92 .db 0x42 ; 104 .db 0x42 ; 116 ;---------------------------------- ;Open Loop AFR % Change vs Coolant Temp ; LC419: .db 0xDD ; Scalar ; Arg = 256 - Value ; ;Val = % Chg * 2.56 * Scalar ; ;%chg deg F ;---------------------------------- LC41A: .db 0x99 ; -40 .db 0x72 ; -18 .db 0x4C ; 3 .db 0x32 ; 24 .db 0x26 ; 46 .db 0x19 ; 9.8 68 .db 0x19 ; 9.8 90 .db 0x19 ; 9.8 111 .db 0x19 ; 9.8 133 .db 0x19 ; 9.8 154 .db 0x19 ; 9.8 176 .db 0x19 ; 9.8 198 .db 0x19 ; 9.8 219 .db 0x19 ; 9.8 241 .db 0x19 ; 9.8 262 .db 0x19 ; 9.8 284 .db 0x19 ; 9.8 306 ; LC42B: .db 0x00,0x00,0x00,0x00,0x00,0x00 .db 0x00,0x00,0x00,0x00,0x00,0x26,0x26,0x26 .db 0x26,0x26,0x00 LC43C: .db 0x80 ;Maximum LV8 to remain in Highway Fuel ;Val = LV8 LC43D: .db 0xFF ;Minimum Coolant Temp for Highway Fuel Mode ;Val = DegF / 1.35 + 40 LC43E: .db 0x0A ;Highway Fuel Mode Enable Delay ;Val = sec LC43F: .db 0x3C ;Maximum Time in Highway Fuel Mode ;Val = Sec LC440: .db 0xFF ;MinimumSpeed to Enable Highway Fuel Mode ;Val = MPH ;----------------------------------------- ;Highway Mode A/F Ratio vs LV8 ; ;Val = AFR / 0.1 ; ;AFR LV8 ;----------------------------------------- LC441: .db 0x93 ; 32 .db 0x9B ; 64 .db 0x9B ; 96 .db 0x93 ; 128 ; LC445: .db 0x6B ;Closed Loop Enable Temp ;Val = DegF / 1.35 + 40 LC446: .db 0x93 ;Hot Closed Loop Timer Temp Threshold ;Val = DegF / 1.35 + 40 LC447: .db 0x49 ;Cold Closed Loop Timer Temp Threshold ;Val = DegF / 1.35 + 40 LC448: .db 0x96 ;Cold O2 Closed Loop Timer ;Val = Sec / 2.0 .db 0x67 ;Warm O2 Closed Loop Timer ;Val = Sec / 2.0 .db 0x1B ;Hot O2 Closed Loop Timer ;Val = Sec / 2.0 ; ; O2 Qualifiers (Window) ; LC44B: .db 0x9E ; If O2 < VAL then O2 is ready (158d = 699 mv) .db 0x2D ; If O2 > VAL then O2 is ready (45d = 199 mv) LC44D: .db 0x32 ; If O2 in above window > VAL seconds, then O2 NOT READY (50d = 10 sec) ; ; closed Loop Auth Limits ; for INT values ; LC44E: .db 0x46 ; C.L. Min correction value LC44F: .db 0xB4 ; C.L. Max Min correction value ; ; closed Loop Fuel Control Params ; LC450: .db 0x03 ; Max %TPS for Idle LC451: .db 0x30 ; Max MPH for Idle (48d = 15 MPH) LC452: .db 0x20 LC453: .db 0x0C ; 12d = 53 mv, Diff to make R/L window (Fast O2) LC454: .db 0x17 ; 23d = 100 mv, Diff R/L when air diverted LC455: .db 0x04 ; 4d = 17 mv, Min Error to make INT corr LC456: .db 0xE0 ; 224d = 0.870, Mult gain factor for pos errors LC457: .db 0x9A ; 154d = 0.600, Coeff for O2 filter constant LC458: .db 0x60 ; 96d = 32 degC, Offset for cool INT gain LC459: .db 0x8C .db 0x94 .db 0x98 .db 0x84 .db 0x84 .db 0x84 .db 0x84 .db 0x84 .db 0x84 ;------------------------------------------ ; Table ;------------------------------------------ LC462: .db 0x78 .db 0x80 .db 0x84 .db 0x70 .db 0x70 .db 0x70 .db 0x70 .db 0x70 .db 0x70 ;------------------------------------------ ;Closed Loop Rich/Lean Threshold vs Airflow ; ;Val = mvolt / 4.425 ; ;mvolt gm/sec airflow ;------------------------------------------- LC46B: .db 0x82 ; 0 .db 0x8A ; 8 .db 0x8E ; 16 .db 0x7A ; 24 .db 0x7A ; 32 .db 0x7A ; 40 .db 0x7A ; 48 .db 0x7A ; 56 .db 0x7A ; 64 ; ; Slow O2 Filter Coeff vs Air Flow ; ; TBL = Sec * 80 ; ; Sec Air Flow ; LC474: .db 0x20 ; 0 .db 0x1C ; 8 .db 0x1C ; 16 .db 0x1C ; 24 .db 0x18 ; 0.300 32 .db 0x14 ; 0.250 40 .db 0x10 ; 0.200 48 .db 0x10 ; 0.200 56 .db 0x10 ; 0.200 64 ; ; Slow O2 Filter Coeff vs Flow ; ; TBL = Mult * 256 ; ; Mult Flow LC47D: .db 0x10 ; 0.063 0 .db 0x18 ; 0.094 8 .db 0x20 ; 0.125 16 .db 0x24 ; 0.141 24 .db 0x28 ; 0.156 32 .db 0x2C ; 0.172 40 .db 0x2C ; 0.172 48 .db 0x2C ; 0.172 56 .db 0x2C ; 0.172 64 ; ; Proportional Step Size Gain vs Flow? ; ; Step Flow LC486: .db 0xC8 ; 0 .db 0xE0 ; 8 .db 0xEC ; 16 .db 0xF4 ; 24 .db 0xF8 ; 32 .db 0xFF ; 40 .db 0xFF ; 48 .db 0xFF ; 56 .db 0xFF ; 64 ; ; Proportional Step Size Gain vs RPM ; ; TBL = Sec * 80 ; ; Gain RPM LC48F: .db 0x14 ; 0.25 400 .db 0x0C ; 0.15 800 .db 0x08 ; 0.10 1200 .db 0x04 ; 0.05 1600 .db 0x03 ; 0.04 2000 .db 0x02 ; 0.03 2400 ; ; Proportional Step Size vs Error ; ; TBL = counts ; ; Error LC495: .db 0x03 ; 0 .db 0x03 ; 8 .db 0x03 ; 16 .db 0x02 ; 24 .db 0x02 ; 32 .db 0x02 ; 40 .db 0x03 ; 48 .db 0x04 ; 56 .db 0x04 ; 64 .db 0x04 ; 72 .db 0x04 ; 80 .db 0x04 ; 88 ; ; Proportional Step Duration vs Error ; ; TBL = Sec * 80 ; ; Error ;------------------------------------- LC4A1: .db 0x04 ; 0 .db 0x04 ; 8 .db 0x04 ; 16 .db 0x04 ; 24 .db 0x04 ; 32 .db 0x08 ; 40 .db 0x0C ; 48 .db 0x18 ; 56 .db 0x20 ; 64 .db 0x40 ; 72 .db 0x80 ; 80 .db 0xF0 ; 88 ; ; R/L Offset vs Coolant ; ; TBL = counts ; Deg C ;----------------------------- LC4AD: .db 0x00 ; -40 .db 0x00 ; -28 .db 0x00 ; -16 .db 0x00 ; -4 .db 0x01 ; 8 .db 0x10 ; 20 .db 0x10 ; 32 .db 0x10 ; 44 .db 0x10 ; 56 .db 0x10 ; 68 .db 0x00 ; 80 .db 0x00 ; 92 .db 0x00 ; 104 .db 0x00 ; 116 ; ; INT Delay Mult vs Error ; ; TBL = Mult Val ; ; Error ;----------------------------- LC4BB: .db 0xFF ; 0 .db 0xFF ; 8 .db 0xFF ; 16 .db 0xFF ; 24 .db 0x80 ; 32 .db 0x40 ; 40 .db 0x40 ; 48 .db 0x40 ; 56 .db 0x40 ; 64 .db 0x40 ; 72 .db 0x40 ; 80 LC4C6: .db 0x40 ; 88 ; LC4C7: .db 0x28 ; BLM Cell RPM Boundary #1 (1000 RPM) ; Val = RPM / 25 LC4C8: .db 0x30 ; BLM Cell RPM Boundary #2 (1200 RPM) ; Val = RPM / 25 LC4C9: .db 0x50 ; BLM Cell RPM Boundary #3 (2000 RPM) ; Val = RPM / 25 LC4CA: .db 0x0E ; BLM Cell Airflow Boundary #1 (14 gm/sec) ; Val = Grams / Sec LC4CB: .db 0x16 ; BLM Cell Airflow Boundary #2 (22 gm/sec) ; Val = Grams / Sec LC4CC: .db 0x22 ; BLM Cell Airflow Boundary #3 (34 gm/sec) ; Val = Grams / Sec LC4CD: .db 0x04 ; BLM RPM Hysteresis, (100 RPM) ; Val = RPM / 25 LC4CE: .db 0x01 ; BLM Airflow Hysteresis (1 gm/sec) ; Val = Grams / Sec LC4CF: .db 0x78 ; BLM Minimum Update Temp ; Val = DegF / 1.35 + 40 LC4D0: .db 0xF0 ; BLM Maximum Update Temp ; Val = DegF / 1.35 + 40 LC4D1: .db 0x00 ; BLM Minimum Update LV8 ; Val = LV8 / 0.0482143 LC4D2: .db 0x1C ; BLM Minimum Update Rate ; Val = Sec / 0.0482143 LC4D3: .db 0x02 ; BLM Update Amount ; Val = Interval LC4D4: .db 0xA0 ; Maximum Allowable BLM ; Val = BLM (160) LC4D5: .db 0x6C ; Minimum Allowable BLM ; Val = BLM (108) LC4D6: .db 0x05 ; Minimum Diff Between BLM and INT ; Val = BLM (5) LC4D7: .db 0x05 ; Maximum Diff Between BLM and INT ; Val = BLM (5) ;*************************************** ;Memory Stay Alive Tables & Param's ; ;************************************** LC4D8: .db 0x76 ; Low Lmt for SAM Cell 0 (BLM init values) .db 0x96 ; High Lmt for SAM Cell 0 LC4DA: .db 0x76 ; Low Lmt for other SAM Cell's .db 0x96 ; High Lmt for other SAM Cell's LC4DC: .db 0x00 ; Sam Cell A Number, Idle LC4DD: .db 0x0A ; SAM Cell B Number, Non Idle LC4DE: .db 0x4B ; Stop Cell O update when time up, 15 SEC'D ; CALIB = Arg * 5, (75/5 Sec's) LC4DF: .db 0xAB ; If Temp < 88c Then Skip SAM Update ; CALIB = (Arg + 40) * 256/192, (88.25 C) LC4E0: .db 0xBB ; If Temp > 100c Then Skip SAM Update ; CALIB = (Arg + 40) * 256/192, (100.25 C) LC4E1: .db 0x10 ; SAM A Filter Coef. ; CALIB = Arg * 256 LC4E2: .db 0x18 ; SAM B Filter Coef. ; CALIB = Arg * 256 ;***************************************************** ;Decel Enleanment Param's ; ;***************************************************** LC4E3: .db 0x26 ;Decel Enlean Enable LV8 Threshold ;Val = LV8 LC4E4: .db 0x24 ;Decel Enlean Enable RPM Threshold ;Val = RPM / 25 LC4E5: .byte 0xFF LC4E6: .db 0xF0 ;Decel Enlean Enable Delta TPS Threshold ;Val = %TPS / .390625 LC4E7: .db 0xF5 ;Decel Enlean Enable Delta LV8 Threshold ;Val = LV8 LC4E8: .byte 0x00 LC4E9: .byte 0x00 LC4EA: .db 0x80 ;Decel Enlean BPW Factor (Low DRP's) ;Val = Factor / 0.0078125 .db 0x80 ;Decel Enlean BPW Factor (High DRP's) ;Val = Factor / 0.0078125 LC4EC: .db 0x30 ;Deceleration Fuel Cut-Off Enable if RPM above x ;Val = RPM / 25 LC4ED: .db 0x28 ;Deceleration Fuel Cut-Off Remain if RPM above x ;Val = RPM / 25 LC4EE: .db 0x21 ;Deceleration Fuel Cut-Off Enable LV8 Threshold ;Val = LV8 LC4EF: .db 0x28 ;Deceleration Fuel Cut-Off Disable LV8 Threshold ;Val = LV8 LC4F0: .db 0x04 ;Deceleration Fuel Cut-Off Max RPM Decrease per 12.5 ms ;Val = RPM / 12.5 LC4F1: .byte 0x8C LC4F2: .db 0x08 ;Deceleration Fuel Cut-Off Enable %TPS Threshold ;Val = %TPS / 0.390625 LC4F3: .byte 0x00 LC4F4: .db 0x0F ;Deceleration Fuel Cut-off Disable Low VSS Speed Limit ;Val = MPH LC4F5: .byte 0x00 LC4F6: .byte 0x1E LC4F7: .byte 0x00,0x80 LC4F9: .byte 0x01 LC4FA: .db 0x00 ;Deceleration Fuel Cut-off Consecutive Minimum Delay ;Val = sec / 0.0125 .db 0xA0 LC4FC: .byte 0x0A LC4FD: .db 0x32 ;Minimum LV8 to Enable PE ;Val = LV8 LC4FE: .byte 0x0A LC4FF: .byte 0x10 LC500: .db 0xD5 ;Minimum Temp to use Hot Coolant PE %TPS ;Val = DegF / 1.35 + 40 ;-------------------------------------- ;Minimum %TPS to Enable PE vs RPM ;Val = %TPS / .390625 ;%TPS RPM ;-------------------------------------- LC501: .db 0xB4 ; 400 .db 0xB4 ; 1200 .db 0xB4 ; 2000 .db 0xB4 ; 2800 .db 0xB4 ; 3600 ;-------------------------------------- ;Minimum %TPS to Enable PE (Hot Coolant) vs RPM ;Val = %TPS / .390625 ;%TPS RPM ;-------------------------------------- LC506: .db 0xB4 ; 400 .db 0xB4 ; 1200 .db 0x26 ; 2000 .db 0x26 ; 2800 .db 0x26 ; 3600 ; LC50B: .db 0x08 ; ;-------------------------------------- ;PE vs Temp ; ;Val = % enrichment / 0.390625 ; ;% DegF ;-------------------------------------- .db 0x8C ; -40 .db 0x7D ; 3 .db 0x70 ; 8 .db 0x56 ; 46 .db 0x3A ; 133 .db 0x3A ; 176 .db 0x3A ; 219 .db 0x58 ; 262 .db 0x58 ; 306 ;-------------------------------------- ;PE vs RPM ; ;Val = % enrichment / 0.781225 + 100 ; ;% RPM ;-------------------------------------- LC515: .db 0x8F ; 0 .db 0x8F ; 400 .db 0x88 ; 800 .db 0x88 ; 1200 .db 0x80 ; 1600 .db 0x80 ; 2000 .db 0x88 ; 2400 .db 0x88 ; 2800 .db 0x80 ; 3200 .db 0x76 ; 3600 .db 0x76 ; 4000 .db 0x76 ; 4400 .db 0x76 ; 4800 .db 0x76 ; 5200 .db 0x76 ; 5600 .db 0x76 ; 6000 .db 0x76 ; 6400 ; ; IAC constants and tables for PID ; LC526: .db 0x20 ; Coeff RPM/12.5 filter LC527: .db 0xA0 ; Idle RPM Start Up Position ; Val = Steps LC528: .db 0x14 ; IAC Steps Added To Warm Park Position if A/C On ; Val = Steps LC529: .db 0x03 ; IAC Steps Added For Fan Anticipate ; Val = Steps LC52A: .db 0x05 ; IAC Steps added if cold eng SA is done ; Val = Steps .db 0x00 ; Idle Speed Adder Park/Neutral ; Val = RPM / 12.5 .db 0x80 ; Idle Speed Start-up Delay ; Val = ms / 8 .db 0x00 ; Idle Speed Adder A/C Enabled ; Val = RPM / 12.5 ;------------------------------------ ;Idle RPM vs Coolant Temp ; ;Val = RPM / 12.5 ; ;RPM DegF ;------------------------------------ LC52E: .db 0x60 ; -40 .db 0x60 ; -18 .db 0x54 ; 3 .db 0x50 ; 24 .db 0x48 ; 46 .db 0x48 ; 68 .db 0x40 ; 90 .db 0x40 ; 111 .db 0x40 ; 133 .db 0x40 ; 154 .db 0x3C ; 176 .db 0x38 ; 198 .db 0x38 ; 219 .db 0x38 ; 241 .db 0x3C ; 262 .db 0x3C ; 284 .db 0x31 ; 306 ;----------------------------------------- .db 0x04 ;IAC Target Speed Deadband For Park/Neutral ;Val = RPM / 12.5 .db 0x02 ;IAC Target Speed Deadband For Drive ;Val = RPM / 12.5 .db 0x02 LC542: .byte 0x06 LC543: .byte 0x03 LC544: .byte 0x02 LC545: .byte 0x06,0x06,0x20,0x20,0xFF,0x00,0x10,0x20 .byte 0x20,0x80 LC54F: .byte 0x10,0x28,0x20,0x0C,0x06,0xFF,0x05,0x05 .byte 0x05,0x10,0xA0,0x32,0xFF LC55C: .byte 0x14,0x20,0x01,0x05,0x0A,0x80,0x20,0x08 .db 0xFF ;Disable A/C Above %TPS ;Val = %TPS / 0.390625 LC565: .db 0xFF ;Disable A/C Above Delta %TPS ;Val = %TPS / 0.390625 LC566: .byte 0x00,0x01,0x01 .db 0xD7 ;Disable A/C Above Coolant Temp ;Val = DegF / 1.35 + 40 .db 0x0A,0x0A,0x10 LC56D: .byte 0x14 LC56E: .byte 0x14,0x28,0x08,0x00,0xA0,0x10 LC574: .byte 0xFF LC575: .byte 0x00 LC576: .byte 0x00,0x00 LC578: .byte 0x00,0x01 LC57A: .byte 0x0A LC57B: .db 0x19 ; Hot spark Retard min run time (sec.) .db 0x0C ;--------------------------------------------- ; Table - IAC mult vs Cool Temp ;--------------------------------------------- LC57D: .db 0x08 .db 0xCC,0xCC,0xE6,0xFF,0xFF .byte 0xFF,0xFF,0xFF,0xFF LC587: .db 0x08 ;--------------------------------------------- ;Warm IAC Park Steps vs. Coolant ; ;Val = Steps ; ;Steps DegF ;--------------------------------------------- .db 0x78 ; -40 .db 0x64 ; 3 .db 0x37 ; 46 .db 0x2F ; 90 .db 0x20 ; 133 .db 0x11 ; 176 .db 0x05 ; 219 .db 0x05 ; 262 .db 0x05 ; 306 LC591: .byte 0x78 LC592: .byte 0x87 LC593: .byte 0x05 LC594: .byte 0x01 LC595: .byte 0x14 LC596: .byte 0x08 LC597: .byte 0x28 ;This value loaded to L002D at init LC598: .db 0xA7 ;IAC Minimum Keep Alive Learning Temp ;Val = DegF / 1.35 + 40 LC599: .db 0xC0 ;IAC Maximum Keep Alive Learning Temp ;Val = DegF / 1.35 + 40 LC59A: .byte 0x0A LC59B: .byte 0x46 LC59C: .byte 0x01 LC59D: .byte 0x03 LC59E: .byte 0x64 LC59F: .db 0x1E .byte 0x1E,0x1E,0x17,0x0F,0x0D,0x0A .byte 0x0D,0x0F,0x12,0x1E,0x64,0x64,0x64,0x64 .byte 0x64,0x0F LC5B0: .byte 0x50 LC5B1: .byte 0x0A,0x32 LC5B3: .db 0x17,0x08 ;----------------------------------- ;MAF Table #1 ; ;Val = volts / 0.898 ; ;volts g/sec ;----------------------------------- .db 0x5D ; 0.00 .db 0x24 ; 0.18 .db 0x32 ; 0.37 .db 0x45 ; 0.55 .db 0x5D ; 0.73 .db 0x79 ; 0.91 .db 0x9B ; 1.10 .db 0xC5 ; 1.28 .db 0xF8 ; 1.46 ; .db 0x30 ; .db 0x08 ; ;----------------------------------- ;MAF Table #2 ; ;Val = volts / 0.1875 ; ;volts g/sec ;----------------------------------- .db 0x77 ; 1.46 .db 0x85 ; 1.55 .db 0x93 ; 1.65 .db 0xA3 ; 1.74 .db 0xB4 ; 1.83 .db 0xC6 ; 1.92 .db 0xD9 ; 2.01 .db 0xED ; 2.10 (changed from 2.20 to 2.10 by carlos) .db 0xFE ; 2.19 ; .db 0x53 ; .db 0x08 ; ;----------------------------------- ;MAF Table #3 ; ;Val = volts / 0.3242 ; ;volts g/sec ;----------------------------------- .db 0x93 ; 2.19 .db 0x9E ; 2.29 .db 0xAA ; 2.38 .db 0xB6 ; 2.47 .db 0xC3 ; 2.56 .db 0xD1 ; 2.65 .db 0xDF ; 2.74 .db 0xEE ; 2.83 .db 0xFD ; 2.93 ; .db 0x87 ; .db 0x08 ; ;----------------------------------- ;MAF Table #4 ; ;Val = volts / 0.5273 ; ;volts g/sec ;----------------------------------- .db 0x9C ; 2.93 .db 0xA6 ; 3.02 .db 0xB0 ; 3.11 .db 0xBB ; 3.20 .db 0xC6 ; 3.29 .db 0xD2 ; 3.38 .db 0xDE ; 3.47 .db 0xED ; 3.57 .db 0xFF ; 3.66 ; .db 0xCF ; .db 0x08 ; ;----------------------------------- ;MAF Table #5 ; ;Val = volts / 0.8086 ; ;volts g/sec ;----------------------------------- .db 0xA6 ; 3.66 .db 0xB0 ; 3.75 .db 0xBA ; 3.84 .db 0xC4 ; 3.93 .db 0xCF ; 4.02 .db 0xDB ; 4.11 .db 0xE6 ; 4.21 .db 0xF2 ; 4.30 .db 0xFF ; 4.39 ; .db 0xFF ; .db 0x10 ; ;----------------------------------- ;MAF Table #6 ; ;Val = volts / 0.9961 ; ;volts g/sec ;----------------------------------- .db 0xCF ; 4.39 .db 0xD5 ; 4.43 .db 0xDB ; 4.48 .db 0xE2 ; 4.52 .db 0xE9 ; 4.57 .db 0xF0 ; 4.62 .db 0xF8 ; 4.66 .db 0xFF ; 4.71 .db 0xFF ; 4.75 .db 0xFF ; 4.80 .db 0xFF ; 4.85 .db 0xFF ; 4.89 .db 0xFF ; 4.94 .db 0xFF ; 4.98 .db 0xFF ; 5.05 .db 0xFF ; 5.07 .db 0xFF ; 5.12 ; LC5FD: .byte 0x40 LC5FE: .byte 0x03,0x00 ;----------------------------------- ;Max Air Flow vs RPM ; ;Val = g/sec ; ;g/sec RPM ;----------------------------------- LC600: .db 0x17 ; 23 0 .db 0x17 ; 23 400 .db 0x1E ; 30 800 .db 0x30 ; 48 1200 .db 0x44 ; 68 1600 .db 0x59 ; 89 2000 .db 0x6F ; 111 2400 .db 0x8D ; 141 2800 .db 0xAA ; 170 3200 .db 0xC8 ; 200 3600 .db 0xDC ; 220 4000 .db 0xEC ; 236 4400 .db 0xF5 ; 245 4800 .db 0xF7 ; 247 5200 .db 0xF7 ; 247 5600 .db 0xF7 ; 247 6000 .db 0xFF ; 255 6400 ;ннннннннннннннннннннннннннннннннннннннннннннннннннн ;************************************************ ;>>> Serial Data Tables & Params <<< ; ;************************************************* LC611: .db 0x04 ; Dis String length, (Bytes) ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; DIS Addresses, Xmit ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн LC612: .dw 0xC009 ; Num O cyl Addr .dw 0x0123 ; Running total of fuel supplied Addr .dw 0x0127 ; Running total of Dist. Traveled Addr .dw 0xC620 ; Gal's/Sec Scale Factor Addr .dw 0x0000 ; .dw 0x0000 ; .dw 0x0000 ; ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн ; DISPLAY Fuel Rate Scale Factors ; ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн .db 0x76 ; Gals/Hr Inj flow rate ; CALIB = Arg / 32, ($7A = 3.8125 G/Hr) ;***************************************************** ;160 BAUD DIAGNOSTICS ;Table Of Addr's vs DATA ; ;***************************************************** LC621: .dw 0xC000 ; LOC 2, PROM ID (16 bits) .dw 0xC001 ; LOC 3, MSB .dw 0x002B ; LOC 4, IAC Present Posit. .dw 0x005F ; LOC 5, Coolant temp, (A/D) .dw 0x0066 ; LOC 6, Filtered MPH .dw 0x0119 ; LOC 7, EGR D/C .dw 0x0059 ; LOC 8, RPM .dw 0x0082 ; LOC 9, TPS (A/D) .dw 0x00CD ; LOC 10, Base FI Pulse Width .dw 0x0070 ; LOC 11, Filtered o2 Sig ;ннннннннннннннннннннннннннннннннн ; .dw 0x0004 ; LOC 12, Err Flg #1, (Sensors0) ; ; Bit 0 = ERR 23 MAT SENSOR LOW ; 1 = ERR 22 TPS LOW ; 2 = ERR 21 TPS HIGH ; 3 = ERR 16 NOT USED ; ; 4 = ERR 15 COOL SENSOR LOW TEMP. ; 5 = ERR 14 COOL SENSOR HIGH TEMP. ; 6 = ERR 13 O2 SENSOR ; 7 = ERR 12 NO REF PULSES ;ннннннннннннннннннннннннннннннннн ; .dw 0x0005 ; LOC 13, Err Flg #2 ; ; Bit 0 = ERR 35 NOT USED ; 1 = ERR 34 MAF SENSOR LOW ; 2 = ERR 33 MAF SENSOR HIGH ; 3 = ERR 32 EGR DIAG. ; ; 4 = ERR 31 NOT USED ; 5 = ERR 26 NOT USED ; 6 = ERR 25 MAT SENSOR HIGH ; 7 = ERR 24 VSS ;ннннннннннннннннннннннннннннннннн .dw 0x0006 ; LOC 14, Err Flg #3 ; ; Bit 0 = ERR 51 PROM ERROR ; 1 = ERR 46 VATS FAILED ; 2 = ERR 45 O2 SENSOR RICH ; 3 = ERR 44 O2 SENSOR LEAN ; ; 4 = ERR 43 ESC FAILURE ; 5 = ERR 42 EST ERROR ; 6 = ERR 41 CYL SELECT ERROR ; 7 = ERR 36 BURNOFF DIAG. ;ннннннннннннннннннннннннннннннннн .dw 0x0007 ; L0C 15, Err Flg #4 ; ; Bit 0 = ERR 63 NOT USED ; 1 = ERR 62 NOT USED ; 2 = ERR 61 NOT USED ; 3 = ERR 56 NOT USED ; ; 4 = ERR 55 NOT USED ; 5 = ERR 54 FUEL PUMP VOLTAGE ; 6 = ERR 53 OVER VOLTAGE ; 7 = ERR 52 CAL PAC MISSING ;ннннннннннннннннннннннннннннннннн .dw 0x0045 ; 16, MAF Flow .dw 0x0061 ; 17, MAT .dw 0x0038 ; 18, MCU Stat Flf, (Xmission etc) .dw 0x00A5 ; 19, ECU PA3 Counter .dw 0x00C7 ; 20, BLM Mult. .dw 0x00F7 ; 21, Rich/Lean Counter .dw 0x00F1 ; 22, Decell Fuel Gms/Sec .dw 0x00F2 ; 23, LSB .dw 0x00DC ; 24, Base PW (Last Inj), 16 bits .dw 0x00DD ; 25, LSB ;***************************************************** ;MODE 0, REVERT TO NORMAL MODE. ; ;ALDL DEVICE MUST REQUEST MODE 0 BY ;XMITING THE FOLLOWING MSG TO ;THE ECM: ; ;MSG ID = 0x80 ;MSG LEN 1+55 = 0x56 ;MODE = 0x00 ;CKSUM = 0x29 ??? ; ;THE ECM WILL RESPOND WITH: ; ;MSG ID = 0x80 ;MSG LEN 64+85 = 0x95 ;MODE = 0x00 ;CKSUM = 0xcc ; ;***************************************************** LC651: .dw 0x0000 ; Next Msg entry address ; .db 0x80 ; DEVICE ID Code ; .db 0x00 ; Option Flag Word ; .db 0x01 ; Output Msg Length .db 0x01 ; Input Msg Length ; .dw 0x0164 ; Addr of output cnt'l block, (1 Byte long) .dw 0x0136 ; Addr of input cnt'l block, (29 bytes long) ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ADDR'S OF DIFFERENT MODE BLOCKS ; ; Table Of Addr's vs DATA ; ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн .dw 0xC651 ; MSG CODE 0x80 Mode 0 Entries .dw 0xC665 ; MSG CODE 0x80 Mode 1 Entries .dw 0xC6ED ; Msg Code 0x80 Mode 2 Entries .dw 0xC6F7 ; Msg Code 0x80 Mode 3 Entries .dw 0xC701 ; Msg Code 0x80 Mode 4 Entries ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн ;***************************************************** ;MODE 1 FIXED DATA DATA STREAM ;ALDL DEV MUST REQUEST MODE 1 BY ;XMITING THE FOLLOWING MSG TO ;THE ECM: ; ;MSG ID = 0x80 ;MSG LEN 1+0x55 = 0x56 ;MODE = 0x01 ;CKSUM = 0x29 ; ;THE ECM WILL RESPOND WITH: ; ;MSG ID = 0x80 ;MSG LEN 64+85 = 0x95 ;MODE = 0x01 ;DATA BYTE 1 = 0xXX ;. ;. ;BATA BYTE 63 = 0xXX ;CKSUM = 0xcc ; ;***************************************************** .dw 0x0000 ; Nxt Msg Entry Addr ; .db 0x80 ; DEVICE ID Code ; .db 0x80 ; RAM/ROM FLAG ; .db 0x40 ; Output Msg Length .db 0x01 ; Input Msg Length ; .dw 0x0164 ; Addr of Output Cnt'l Block .dw 0x0136 ; Addr of Input Cnt'l Block ;***************************************************** .dw 0xC000 ;1, PROM ID MSB .dw 0xC001 ;2, PROM ID LSB ;ннннннннннннннннннннннннннннннннн .dw 0x0004 ;3, Err Flg #1 ; ; Bit 0 = ERR 23 MAT SENSOR LOW ; 1 = ERR 22 TPS LOW ; 2 = ERR 21 TPS HIGH ; 3 = ERR 16 NOT USED ; ; 4 = ERR 15 COOL SENSOR LOW TEMP. ; 5 = ERR 14 COOL SENSOR HIGH TEMP. ; 6 = ERR 13 O2 SENSOR ; 7 = ERR 12 NO REF PULSES ;ннннннннннннннннннннннннннннннннн .dw 0x0005 ;4, Err Flg #2 ; ; Bit 0 = ERR 35 NOT USED ; 1 = ERR 34 MAF SENSOR LOW ; 2 = ERR 33 MAF SENSOR HIGH ; 3 = ERR 32 EGR DIAG. ; ; 4 = ERR 31 NOT USED ; 5 = ERR 26 NOT USED ; 6 = ERR 25 MAT SENSOR HIGH ; 7 = ERR 24 VSS ;ннннннннннннннннннннннннннннннннн .dw 0x0006 ;5, Err Flg #3 ; ; Bit 0 = ERR 51 PROM ERROR ; 1 = ERR 46 VATS FAILED ; 2 = ERR 45 O2 SENSOR RICH ; 3 = ERR 44 O2 SENSOR LEAN ; ; 4 = ERR 43 ESC FAILURE ; 5 = ERR 42 EST ERROR ; 6 = ERR 41 CYL SELECT ERROR ; 7 = ERR 36 BURNOFF DIAG. ;ннннннннннннннннннннннннннннннннн .dw 0x0007 ;6, Err Flg #4 ; ; Bit 0 = ERR 63 NOT USED ; 1 = ERR 62 NOT USED ; 2 = ERR 61 NOT USED ; 3 = ERR 56 NOT USED ; ; 4 = ERR 55 NOT USED ; 5 = ERR 54 FUEL PUMP VOLTAGE ; 6 = ERR 53 OVER VOLTAGE ; 7 = ERR 52 CAL PAC MISSING ;ннннннннннннннннннннннннннннннннн .dw 0x0008 ;7, Err Flg #5 ; ; Bit 0 = NOT USED ; 1 = NOT USED ; 2 = NOT USED ; 3 = NOT USED ; ; 4 = NOT USED ; 5 = ERR 66 NOT USED ; 6 = ERR 65 NOT USED ; 7 = ERR 64 NOT USED ;ннннннннннннннннннннннннннннннннн .dw 0x005F ;8, Coolant, A/D .dw 0x0060 ;9, Strt up Coolant, Deg C .dw 0x0082 ;10, TPS, A/D .dw 0x0059 ;11, RPM, Var .dw 0x0099 ;12, Ref Period .dw 0x009A ;13, LSB .dw 0x0066 ;14, MPH Var for Disp. ;ннннннннннннннннннннннннннннннннн .dw 0x0003 ;15, Mode Word 3 ; b0 ; b1 VATS OK ; b2 ; b3 error 51, chksum ; b4 ; b5 VATS AREADY PASSED ; b6 error 36, MAF Burn off (B/O) PASSED ; b7 KNOCK ENBLED BY DIFF COOL ;ннннннннннннннннннннннннннннннннн .dw 0x008E ;16, N/V Ratio .dw 0x0070 ;17, o2 Filtered .dw 0x00F7 ;18, ALDL Rich/Lean Counter .dw 0x00CD ;19, Base PW Correction .dw 0x00C7 ;20, BLM base fuel pw correction, Coarse, Scaled .dw 0x00C6 ;21, BLM Cell Number .dw 0x00D0 ;22, INT Clsd/Lp Int. .dw 0x002B ;23, IAC Present Posit. .dw 0x0107 ;24, IAC Step Dir Cmd .dw 0x0108 ;25, Requested Idle Spd. .dw 0x0064 ;26, Filtered Ld Val .dw 0x0065 ;27, A/D test channel .dw 0x0062 ;28, Raw Ld Val .dw 0x0061 ;29, MAT Val .dw 0x0130 ;30, MAT Val, A/D .dw 0x0119 ;31, EGR D.C. .dw 0x011B ;32, Can Prg D.C. .dw 0x00FA ;33, Fan D.C. .dw 0x007F ;34, Batt Vlts, A/D .dw 0x0080 ;35, Pump VDC .dw 0x00F1 ;36, DISPFLOW, Mass Air Flow Gms/Sec, 16 bits .dw 0x00F2 ;37, LSB .dw 0x00BD ;38, UNLIMITED AIRFLOW, (MAF Diag) .dw 0x011E ;39, Tot Sprk Adv rel to TDC .dw 0x011F ;40, LSB .dw 0x00A1 ;41, Sprk Adv rel to ref pulse .dw 0x00A2 ;42, LSB .dw 0x00A5 ;43, ESC Knock Cnt'r .dw 0x00A9 ;44, Knock Retard .dw 0x00DC ;45, Base PW, Last Inject .dw 0x00DD ;46, LSB .dw 0x00D5 ;47, Total Air/Fuel Val .dw 0x00D6 ;48, LSB .dw 0x0123 ;49, Run tot Fuel Consumed .dw 0x0124 ;50, LSB .dw 0x0127 ;51, Run tot Dist Run, (.0005mi/bit) .dw 0x0019 ;52, Eng Run Time, Sec .dw 0x001A ;53, LSB ;ннннннннннннннннннннннннннннннннн .dw 0x0036 ;54, Minor Lp mode word #2 ; ; Bit 0 = 1= OVERDRIVE ON ; 0= OVERDRIVE OFF ; 1 = ERR 14 or 15 THIS STARTUP ; 2 = REF PULSES OCCURRED (6.25 MSEC CHECK) ; 3 = 1= ALDL MODE, 8192 LOCKED IN, & MODE 4 ; ; 4 = DIAGNOSTIC SWITCH IN DIAGNOSTIC POSITION ; 5 = DIAGNOSTIC SWITCH IN ALDL POSITION ; 6 = HIGH BAT. VOLT. , DISABLE SOLENOID DISCRETS ; 7 = SHIFT LIGHT (1= ON, 0= OFF) ;ннннннннннннннннннннннннннннннннн .dw 0x0038 ;55, MPU Status wd, (Fan, P.S. etc) ; ; Bit 0 = PARK/NEUTRAL MODE ; 1 = NOT IN THIRD GEAR ; 2 = OVERDRIVE REQUEST ; 3 = EXCESSIVE POWER STEER PRES. ; , CLUTCH ANTICIPTE ; ; 4 = EGR DIAGNOSTIC SWITCH CLOSED ; 5 = TCC LOCKED ; 6 = FAN REQUEST BIT ; 7 = 0 = A/C REQUEST ;ннннннннннннннннннннннннннннннннн .dw 0x002F ;56, Mode wd ; ; Bit 0 = PARK/NEUTRAL (0 = DRIVE) ; 1 = 3rd GEAR ; 2 = 4th GEAR ; 3 = POWER STEERING ( 1 = CRAMP) ; ; 4 = READ BUT NOT USED ; 5 = EGR DIAGNOSTIC ; 6 = FAN REQUEST <=> ACHP (A/C HI PRESSURE) ; 7 =AIR CONDITIONER ( 0 = A/CREQUESTED) ;ннннннннннннннннннннннннннннннннн .dw 0x0035 ;57, Minor Lp wd #1 ; ; Bit 0 = ADVANCE FLAG ( 0= ADV. , 1= RTD) ; 1 = CHK ENGINE LIGHT DELAY FLAG ; 2 = INTERRUPT SERVICE EXECUTION EXCEED 6.25 MSEC ; 3 = FAN ON DISABLED BY PID ; ; 4 = TCC ROAD SPEED 1st PULSE FLAG ; 5 = A/C CLUTCH FLAG ( 0= A/C CLUTCH ON) ; 6 = BYPASS CHECK ENABLE ; 7 = ENGINE RUNNING FLAG ( 1= RUNNING) ; ;ннннннннннннннннннннннннннннннннн .dw 0x0001 ;58, Non Vol Mem Mode wd ; ; Bit 0 = O2 SENSOR READY ; 1 = CLOSED LOOP TIMER TIMED OUT ; 2 = NOT USED ; 3 = IMPROPER SHUTDOWN ; ; 4 = NOT USED ; 5 = IAC KICKDOWN ENABLED ; 6 = KWARM KICKDOWN ENABLED ; 7 = ERR 42 FAILED ; ;ннннннннннннннннннннннннннннннннн .dw 0x0047 ;59, MANUAL Xmission Mode wd ; ; Bit 0 = OVERDRIVE ON ; 1 = 1st GEAR DIRECT ; 2 = 1st GEAR LOOKнAHEAD OK ; 3 = 4th GEAR ; ; 4 = 1st GEAR OVERDRIVE ; 5 = DOWNSHIFT/OFF REQUEST ; 6 = UPSHIFT/ON REQUEST ; 7 = OVERDRIVE ACTIVE ; ;ннннннннннннннннннннннннннннннннн .dw 0x003D ;60, ALCL Mode Wd. ; ; Bit 0 = ALDL RESET ; 1 = NOT USED ; 2 = FIELD SERVICE MODE ; 3 = FIRST C/L PASS THRU FIELD SERVICE MODE DONE ; (1= DONE) ; ; 4 = FIELD SERVICE. O2 TRANSITION ; 5 = ONE SECOND FLAG (SYMMETRICAL) ; 6 = 200 MSEC TOGGLE BIT FOR 2.5 HZ FSM FLASH RATE ; 7 = PULLUP RESISTOR FOR COOL ;ннннннннннннннннннннннннннннннннн .dw 0x003F ;61, Mjr Lp mode wd ; ; Bit 0 = 100 MSEC, OLD CCP PURGE ON FLAG (0= OFF) ; 1 = AIR CONTROLLED, 0= AIR DIVERTED ; 2 = AIR SWITCHED TO PORT ; 3 = NOT USED ; ; 4 = SKIP BURNOFF DUE TO > 17 VOLTS THIS STARTUP ; 5 = D.E. QSEC ; 6 = BURN OFF AIR METER ; 7 = DECEL ENLEANMENT ; ;ннннннннннннннннннннннннннннннннн .dw 0x0046 ;62, Serial Data Mode Word ; ; Bit 0 = EXPECTING FIRST 160 BAUD INTERRUPT ; 1 = EXPECTING SECOND 160 BAUD INTERRUPT ; 2 = IN 8192 MODE ; 3 = LOCKED IN 8192 MODE ; ; 4 = NOT USED ; 5 = NOT USED ; 6 = NOT USED ; 7 = NOT USED ; ;ннннннннннннннннннннннннннннннннн .dw 0x0045 ;63, Flg Word Fuel/Air Mode word ; ; Bit 0 = NOT USED ; 1 = LEARN CONTROL FLAG ; (1= ENABLE STORE, 0= DISABLE) ; 2 = NOT USED ; 3 = NOT USED ; ; 4 = VSS FAILURE ; 5 = EECC SLOW O2 RICH/LEAN FLAG ; 6 = RICH/LEAN FLAG (1= RICH , 0= LEAN) ; 7 = CLOSED LOOP FLAG (1= C/L , 0= O/L) ;ннннннннннннннннннннннннннннннннн ; ;***************************************************** ;MODE 2 SELECTABLE MEMORY DUMP ; ;ALDL DEV MUST REQUEST MODE 2 BY ;XMITING THE FOLLOWING MSG TO ;THE ECM: ; ;MSG ID = 0x80 ;MSG LEN 3+85 = 0x58 ;MODE = 0x02 ;START ADD MSB = 0xaa ;START ADD LSB = 0xaa ;CKSUM = 0xcc ; ;THE ECM WILL RESPOND WITH: ; ;MSG ID = 0x80 ;MSG LEN 65+85 = 0x96 ;MODE = 0x03 ;ADD CONT = 0xdd ;. ;. ;ADD (+63) CONT = 0xdd ;CKSUM = 0xcc ; ;***************************************************** .dw 0x0000 ; Nxt Msg Entry Addr .db 0x80 ; DEVICE Code .db 0x40 ; Option Flag Word .db 0x40 ; ???? .db 0x03 ; Input Msg Length .dw 0x0136 ; Addr of Output Cnt'l Block .dw 0x0136 ; Addr of Input Cnt'l Block ;***************************************************** ;MODE 3 RAM DUMP 0 to 8 ADDRESSES ; ;ALDL DEV MUST REQUEST MODE 3 BY ;XMITING THE FOLLOWING MSG TO ;THE ECM: ; ;MSG ID = 0x80 ;MSG LEN 2n+85 = 0x58 ;MODE = 0x03 ;ADD MSB = 0xaa ;ADD LSB = 0xaa ;. ;. ;ADD MSB = 0xaa ;ADD LSB = 0xaa ;CKSUM = 0xcc ; ;THE ECM WILL RESPOND WITH: ; ;MSG ID = 0x80 ;MSG LEN n+1+85 = 0xnn ;MODE = 0x03 ;ADD CONT = 0xdd ;ADD CONT = 0xdd ;. ;. ;ADD CONT = 0xdd ;ADD CONT = 0xdd ;CKSUM = 0xcc ; ; ;***************************************************** .dw 0x0000 ; Nxt Msg Entry Addr .db 0x80 ; DEVICE ID Code .db 0x40 ; RAM/ROM Flag Word .db 0x09 ; Output Msg Length .db 0x11 ; Input Msg Length .dw 0x0136 ; Addr of Output Cnt'l Bock .dw 0x0136 ; Addr of Input Cnt'l Block ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн ;***************************************************** ;MODE 4 MODIFIER OP'S ; ;MODE 4 WILL MODIFY ECM OPERATION ;& XMIT THE CONTENTS OF RAM, ;(0 н> 8 LOC'S) AS REQUESTED ; ;ALDL DEV MUST REQUEST MODE 4 BY ;XMITING THE FOLLOWING MSG TO ;THE ECM: ; ;MSG ID = 0x80 ;MSG LEN 2n+1+10+85 = 0xnn ;MODE = 0x04 ;CNTL WD 1 = 0xcc ;. ;. ;CNTL WD 10 = 0xcc ;ADD 1 MSB = 0xaa ;ADD 1 LSB = 0xaa ;. ;. ;ADD N MSB = 0xaa ;ADD N LSB = 0xaa ;CKSUM = 0xcc ; ;THE ECM WILL RESPOND WITH: ; ;MSG ID = 0x80 ;MSG LEN n+1+85 = 0xnn ;MODE = 0x04 ;ADD CONT = 0xdd ;. ;. ;ADD CONT = 0xdd ;CKSUM = 0xcc ; ; Control Word 1 [$0152] ; b0 = ALDL is controlling error lamp ; b1 = ALDL is controlling cooling fan ; Control Word 2 [$0153] ; b0 = turn ON error lamp ; b1 = turn on cooling fan ; Control Word 3 [$0154] ; b0 = commanding fuel ; b1 = set IAC mode ; b3 = disable EST ; b4 = reset BLM's ; b5 = reset IAC to max (255) ; b6 = clear system errors ($0005 - $0009) ; b7 = don't toggle COP2 every 6.25 ms ; Control Word 4 [$0155] ; b0 = commanding open loop ; b1 = IAC ??? ; Control Word 5 [$0156] ; b0 = ALDL is controlling EGR ; b1 = ALDL is controlling A/C ; b2 = ALDL is controlling TCC ; b3 = ALDL is controlling CCP ; b5 = Enable AIR mod ; b6 = Change AIR PW ; Control Word 6 [$0157] ; AIR inj PW or purge duty cycle ; Control Word 7 [$0158] ; b0 & b1 = ALDL is controlling IAC ; b2 = ALDL is controlling AFR ; b3 & b4 = ALDL is controlling spark ; b5 1=subtract spark, 0=add spark ; Control Word 8 [$0159] ; IAC commanded speed or offset to move IAC ; Control Word 9 [$015A] ; commanded AFR ; Control Word 10 [$015B] ; commanded spark adv or retard ; ;***************************************************** .dw 0x0000 ; Nxt Msg Entry Addr .db 0x80 ; DEVICE IDCode .db 0x00 ; RAM/ROM Flag Word .db 0x01 ; Output Msg Length .db 0x0B ; Input Msg Length .dw 0x0158 ; Addr of Output Cnt'l Block .dw 0x0136 ; Addr of Input Cnt'l Block ;нннннннннннннннннннннннннннннннннннннннннннннннннн LC70B: .db 0x05 .db 0x00 .db 0x00 .db 0x00 .db 0x00 ;***************************************************** ;END OF CALIB TABLES ;***************************************************** .page .area Code (ABS) ;************************************************* ;APYP 7165 ; ; ;ECM P/N 1227165 ;MY89 YB L98 ;GM P4 computer system ; ;RAM Locations 0x0000 н 0x00FF ;NON VOL RAM Locations ; ;MPU Status Reg's 0x3FFA ;MPU Control Reg's 0x3FFC ; ;************************************************* .org 0xC710 LC710: lds #L01FF ; Set Up Stack jsr LF4EE ; 11 Usec Delay ldaa #0x08 ; set b3 (0000 1000) staa 0x5000 ; Set Log RAM to MPU ldx #0x000A ; 0000 1010 brclr *L0003,#0x08,LC725; Mode Wd3, ERR 51 ; ...else ldx #0x0002 ; 0000 0010 LC725: stx 0x3FFC ; MCU CSR ldx #0x3FC0 ; Ref period timer clra ; Clr D Reg clrb ; LC72D: std 0x00,x ; CLR RAM inx ; inx ; cpx #0x3FFA ; Done ? bne LC72D ; Loop if not ; ... else ;************************************************* ;Set up MPU Devices ; ;************************************************* ldaa #0x8C ; 1000 1100 staa L4001 ; Set Prescaler Serial Port Val ldaa #0x8F ; 1000 1111 staa L4003 ; Set DDR Direction ldaa #0x90 ; 1001 0000 staa L4004 ; Set Baud = 8192 ; ; Test A/D Operation ; ldaa #0xB0 ; A/D Ch TST Ch. jsr LF2FC ; To A/D routine ; нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; Clr RAM ? ; RAM 0x01B2 н 0x002D, 185 BYTES ; ; нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ldx #L01B7 ; Last Used RAM Loc LC74D: clr 0x00,x ; Clear RAM dex ; Bump Addr Down cpx #L002E ; Done ? bne LC74D ; If Not Loop ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ldx #L4000 ; Base value for I/O Register indexing bset 0x04,x,#0x08 ; SET b3 of $4004 (Parallel I/O CSR) bset 0x02,x,#0x04 ; SET b2 of $4002 (Output Data Latch) = Select SPI ldaa #0x04 ; b2, EST ENABLE staa *L0031 ; Save Status to NON VOL RAM jsr LF332 ; Xmit to Serial Data bclr 0x02,x,#0x04 ; CLR b2 of $4002 (Output Data Latch) = Deнselect SPI staa *L002F staa *L004B ; FACTORY TST FMD BYTE 1 ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; ; Check Socketed device ; ; нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ldx #LC008 ; Starting address ldd #0x3FF8 ; Num of bytes to chksum jsr LF467 ; To Ck SUM sub, return w/ Y = Checksum ldaa LC008 ; Pgm match byte, $32 or $AA cmpa #0xAA ; IF its AN $AA Bypass beq LC786 ; Xit & Clr ER #51 Flg ; ... else cmpa #0x6E ; Ck for correct EPROM bne LC78B ; If Not exit w/error ; ... else cpy LC006 ; CK CK SUM VAL bne LC78B ; Bad Ck Sum, Xit w/Error ; ... else LC786: bclr *L0049,#0x10 ; Clr Er #51 Flg bra LC78E ; Exit Ck Sum test LC78B: bset *L0049,#0x10 ; Set Err, (#51) LC78E: ldx #0xFB1A ; Init MPU brclr *L0003,#0x08,LC798; Mode Wd3, ERR 51 ; ... else ldx #0xFB12 ; 64,274 LC798: stx 0x3FFC ; MCU CSR ; ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; A/D BATTERY VOLTAGE ; ; нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ldaa #0x10 ; Set Up For Batt Volts, A/D CH1 jsr LF2F7 ; To A/D staa *L007F ; Batt Volts, (A/D) cmpa #0x64 ; 100d = 10.0 vdc bcc LC7EF ; IF LT 10 VDC, EXIT via HU CHECK ; ... else bset *L0041,#0x20 ; set B5, ERR 54A ; ... Force Default for Pump Volts ; нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; CK FUEL PUMP VOLTAGE ; ; нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн jsr LE87C ; To Pump Subroutine ldaa *L0080 ; Pump VDC, (A/D) cmpa #0xA0 ; 160d = 16.0 vdc bcs LC7EF ; IF GT 16 VDC. EXIT via HU CHECK ; ... else ; нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; CK DIAG MODE STATUS ; (IF DIAG V gt 0.8V & lt 2V, SET FACT TEST) ; ; нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ldaa #0x70 ; A/D Ch 7 DIAG SW STATUS jsr LF2F7 ; To A/D Subroutine cmpa #0x64 ; 100d = 2.0 vdc bcc LC7EF ; IF GT 2.0 VDC, EXIT via HU CHECK ; ... se cmpa #0x28 ; 40d = 800 Mvdc bcs LC7EF ; IF LT 800 mvdc, EXIT via HU CHECK ; ... else bset *L0049,#0x80 ; Set b7, FACTORY Tst MODE. <ннн** bset *L0032,#0x04 ; Enable SPK ; нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; DO GM IEEE SUM, 0xC000 нн> 0xFFFF ; 0x4000 IN LENGTH ; ; нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ldx #LC000 ; START OF EPROM ldd #0x4000 ; LENGTH OF EPROM jsr LF467 ; To Ck Sum Subroutine sty L0168 ; IEEE CK SUM ; нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; INIT IAC & IGN OFF TIMER ; ; нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ldaa #0xCC ; 204d staa L016E ; IAC MOT staa *L0033 ; IGN TIMER ; ldaa *L004B ; FACTORY TST FMD BYTE 1 anda #0x03 ; b1 & b0, bne LC7EC ; Do NOT initialize RAM if b0 & b1 ; ... else ldx #0x0000 ; ldaa #0xAA ; LC7E4: staa 0x00,x ; Store $AA's in RAM locations $0000 - $002E inx ; cpx #L002F ; bne LC7E4 ; ; ... else LC7EC: jmp LC90A ; ; ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; CK IF HEADS UP PRESENT ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн LC7EF: ldx 0x5803 ; H.U. ROM Addr cpx #0x7E58 ; HU ID CODE bne LC7FA ; BR IF NO HEADS UP ; ... else jsr 0x5800 ; H.U. ROM Addr ;ннннннннннннннн LC7FA: jsr LF4E0 ; Subroutine to calculate RAM ERR Wd's Ck Sum cpd *L0017 ; Ck Sum OF Err Words beq LC821 ; BR IF Z (equal) ; ... else ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; Init RAM (Non Vol) ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; ; CLR RAM, $0001 - $002E ; ldx #L002E ; POINT TO TOP ADDRESS LC805: clr 0x00,x ; CLEAR MEM LOCATION dex ; DECR ADDRESS POINTER bne LC805 ; TILL DONE ; ... then ; ; DO ERR WD CKSUM ; jsr LF4E0 ; Call NON VOL RAM ERR Wd's Ck Sum std *L0017 ; Save Ck Sum OF Err Words ; ; INIT BLM CELLS ; jsr LF577 ; Sub to initialize BLM Table to 128 ; ; INIT IAC ; ldaa LC527 ; 144 IAC Idle Spd Start up park posit. staa *L002B ; Save Strt up IAC Posit ldaa LC597 ; clrb ; std *L002D ; ldaa #0x40 ; b6 staa *L003E ; Set NV RAM Bad Flg LC821: ldaa *L0049 ; MD WD bita #0x10 ; b4 = Err 51 beq LC848 ; BR IF NOT b4, ; ... else bset *L0003,#0x08 ; Set Err b3, ERR 51 jsr LF5DB ; Lite Ck Eng Lamp bset *L0006,#0x01 ; Err #3 Flg word bset *L0049,#0x10 ; Set b4, Err 51 jsr LF4E0 ; ERR Wd's Ck Sum std *L0017 ; Save Ck Sum OF Err Words ldaa *L0049 ; Mode Word bmi LC848 ; Br if b7, fact test mode ; ... else ; ; CK DIAG SW STATUS ; ldaa #0x70 ; A/D Ch 7 DIAG SW STATUS jsr LF2F7 ; To A/D Subroutine cmpa #0x28 ; 40d bcs LC848 ; BR IF A/D RESULT L.T. 800 MVDC ; ... else ;***************************************************** ; WAIT HERE FOR INTERRUPT ; LC845: swi bra LC845 ; ;***************************************************** ; LC848: jsr LECFF bset *L003D,#0x80 ; SET b7 jsr LF4EF ; TO SEG 6, Log RAM to MCU, Cool A/D brset *L0001,#0x08,LC882; BR IF b3, ; ... else ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; LK UP Start up Enrich vs Cool Temp ; ; ; Tbl Val = Pct Chg * 256/100) ;нннннннннннннннннннннннннннннннннннннннннннннннннн ldaa *L005D ; Restart Coolant brclr *L0044,#0x80,LC85D;Fuel mode word, b7 = ?? ; ... else ldaa *L0061 ; MAT LC85D: psha ; save MAT on stack cmpa #0xD0 ; 208d = 115c bls LC864 ; BR IF COOL GT 115c ; ... else ldaa #0xD0 ; USE 115c MAX FOR LK UP LC864: psha ldx #LC3ED ; INDEX START UP ENRICH Tbl jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) clrb std *L000D ; SAVE START UP ENRICH %CHG ;нннннннннннннннннннннннннннннннннннннннннннннннннн ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; LK UP Opn Lp AFR % Chg vs Cool Temp. ; ; Tbl = Pct Chg * 2.56 + AF BIAS ;ннннннннннннннннннннннннннннннннннннннннннннннн pulb ; GET COOL VAL FM STX pula pshb ldx #LC41A ; INDEX UP Opn Lp AFR % Chg Tbl jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) staa *L00D4 ; Cool Temp, AFR Ratio ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; LK UP Strt Up Spark Adv vs Cool Temp. ; ; TBL = SA deg * 256/90) ;нннннннннннннннннннннннннннннннннннннннннннннннннн pula ; GET COOL VAL FM STX ldx #LC18D ; Strt Up Spark Adv Tbl jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) staa *L0012 ; Spark Adv (START UP) ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; ; ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн LC882: ldaa *L005D ; Restart Coolant ldab LC016 ; 3rd Air Flow Mode Word rorb ; CY <- B0 bcs LC88C ; If NOT B0, use MAT value ; ... else ldaa *L0061 ; MAT value LC88C: ldx #LC59F jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) staa L01B0 ldaa *L005F ; Current Coolant bclr *L003C,#0x10 ; Old CCP Status Byte, b4 = coolant flag cmpa LC02B ; Coolant Temp Spark Correction Disable Temp bcs LC8A2 ; ; ... else bset *L0001,#0x40 ; NVRAM Mode Wd, b6 = Warm Kickdown Enabled LC8A2: cmpa LC206 ; ERR # 32 Params, 31c QUAL bcc LC8B5 ; BR IF COOL G.T. 31c ; ... else ldx *L0019 ; Eng Run Time (sec) bne LC8B5 ; BR IF N/Z ; ... else jsr LF319 ; Select FMD on SPI, read byte 1 (FMD discretes) bita #0x20 ; bne LC8B5 ; BR IF b5 ; ... else bset *L0042,#0x20 ; Diagnostic mode wd 2, b5 = Err 54A LC8B5: ldaa LC3A9 ; o2 filter init val staa *L0070 ; FILT o2 VDC staa *L0072 ; FILT o2 VDC staa *L0074 ; FILT o2 VDC ;ннннннннннннннннннннннннннннннннннннннннннннннннн ; ; GET TPS A/D & PROCESS ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн ldaa #0x50 ; A/D Ch 5, (TPS Voltage) jsr LF2F7 ; To A/D Subroutine staa *L0082 ; TPS, (A/D) ldaa LC3A4 ; Min TPS Posit staa *L0087 ; Fltered low TPS, (A/D) jsr LF493 ; To TPS Load Subroutine ldaa *L007F ; Batt Volts Value, (A/D) jsr LDDEB ; TO MAJOR LOOP SUNBOUTINE, Seg E ; W/BATTERY A/D VALUE ldd 0x3FC8 ; SPK Period std *L00BA ; OLD PA2 CNT'R ldd LC3D5 ; 445d, Get Stoich ratio std *L00D5 ; AFR bset *L0047,#0x05 ; Manual Xmission Mode Wd, b2 (1st gear lookahead) & b0 (OD on) ldaa #0x04 ; b2 jsr LF5EB ; Turn on CSR bit ldaa #0x0E ; 0000 1110 staa *L0000 ; Minor/Major Loop Counter ldaa #0x80 ; 128d staa *L00C7 ; Block Learn, Scaled staa *L00CD ; Base PW correction staa *L00D0 ; Closed Loop Int ldaa #0x19 staa L017F ; Next entry in EPROM table ldaa #0xA0 staa *L0069 ; 1 second counter ldaa LC527 ; Idle RPM IAC Startup Position (steps) adda *L002D ; ? bcs LC905 ; ; ... else adda L01B0 ; ? bcc LC907 ; ; ... else LC905: ldaa #0xFF LC907: staa L0113 ; Init IAC warmup park position (steps) LC90A: ldaa L4005 ; Free run Up Cnt'r adda #0x02 ; ADD 2 CNT'S staa L4006 ; Match Reg ldx #L4007 ; index TX/Rx CSR bset 0x00,x,#0x01 ; SET b0 jmp LCC1A ; ; ;***************************************************** ;IRQ1 SERVICE ROUTINE, CALLED FROM INT AT LFF2 ;TYPE 0x32, ECM P/N ; ;Executed every IRQ1 ;All Minor Loop done here: ; ;Air/Fuel ;SPK ;IAC ;Etc. ;***************************************************** LC91B: ldx #L4007 ; index TX/Rx CSR ; ; CK SCI RX STATUS, (8192 BAUD) ; brset 0x01,x,#0x01,LC98E; BR IF b0 ; ... else brclr 0x00,x,#0x20,LC931; BR IF b5, If RX Int Not enab ; ... else brclr 0x01,x,#0x20,LC952; BR IF NOT b5, If not RX Int ; ... else bset *L0046,#0x08 ; Set 8192 Baud jsr LFBB9 ; SCI RX SUBROUTINE ;ннннннннннннннннннннннннннннннннннннннннннннннннн rti ;ннннннннннннннннннннннннннннннннннннннннннннннннн ; ; CK SCI XMIT STATUS, (8192 BAUD) ; LC931: brclr 0x00,x,#0x80,LC93D; If Xmit not enab. ; ... else brclr 0x01,x,#0x80,LC952; IF not Xmit Int. ; ... else jsr LFC89 ; Xmit Handler ;ннннннннннннннннннннннннннннннннннннннннннннннннн rti ;ннннннннннннннннннннннннннннннннннннннннннннннннн LC93D: brclr 0x00,x,#0x40,LC952; If SCI Xmit Complete not Enab ; ... else brclr 0x01,x,#0x40,LC952; If SCI Xmit not Complete ; ; Disable SCI Xmit Via SXR ; ldaa L4004 ; Par I/O CSR anda #0xF7 ; Disable Xmit Via SXR staa L4004 ; Par I/O CSR ; ; Enab RX Int's ; ldaa #0x27 ; Enab RX Int's staa L4007 ; TX/Rx CSR ;ннннннннннннннннннннннннннннннннннннннннннннннннн LC952: rti ;ннннннннннннннннннннннннннннннннннннннннннннннннн ; LC953: ldaa L0181 ; UP CNTS VAL WHEN 6.25 MSEC INT adda #0x8F ; 143d staa L4006 ; Match Reg bclr *L0046,#0x01 ; Clr 1st Int Expected Flg jsr LF9C2 ; TO 160 BAUD SERIAL ????????????? ; ;ннннннннннннннннннннннннннннннннннннннннннннннннн rti ;ннннннннннннннннннннннннннннннннннннннннннннннннн ; LC962: ldaa L0181 ; UP CNTS VAL WHEN 6.25 MSEC INT adda #0xCD ; 205d staa L4006 ; bclr *L0046,#0x02 ; Clr 2nd Expected Int Flg ldaa #0x04 ; Set Ser Data Line Hi jsr LF5EB ; Turn On a CSR bit brclr *L0036,#0x20,LC98D; BR IF NOT b5, (SW IN DIAG MODE) ; ... else ldaa L017F ; LOCATION OF NEXT ENTRY IN EPROM TBL cmpa #0x19 ; 25d bne LC98D ; ; ... else ldaa L017E ; ALCL NUM OF BITS TO TX bne LC98D ; BR IF NZ ; ... else ldaa #0x09 ; 450 Msec staa L0131 ; 50 Msec TIMER TO LOOK FOR 8192 BAUD ; bset *L0046,#0x04 ; Serial Data Mode Wd, b2 = in 8192 mode jsr LFB9A ; Init 8192 Baud Ser Reg's ;ннннннннннннннннннннннннннннннннннннннннннннннннн LC98D: rti ;нннннннннннннннннннннннннннннннннннннннннннннннннн ;ннннннннннннннннннннннннннннннннннннннннннннн ; 6.25 Msec Int Logic ; ;ннннннннннннннннннннннннннннннннннннннннннннн LC98E: brset *L0046,#0x01,LC953; BR IF b0, 1st Serial Data Input ; ... else brset *L0046,#0x02,LC962; BR IF b1, 2nd Serial Data Input ; ... else brclr *L0049,#0x80,LC99D; BR IF b3, ; ... else jmp LFD7C ; To Factory test routine ;ннннннннннннннннннннннннннннннннннннннннннннннннн ; LC99D: brset *L0035,#0x04,LC9AD; If tmg error already flaged ; ... else brclr *L0037,#0x04,LC9AD; IF NOT b2, (TMG ERROR CK FLG) ; ... else ldaa *L0000 ; Fm NON VOL RAM staa L0122 ; Save Counter bset *L0035,#0x04 ; Minor Loop mode wd 1 - SET b2, Int serv execution > 6.25 msec LC9AD: bset *L0037,#0x04 ; SET b2, (FLG FOR TMG ERR CHK) ; ldab L4006 ; Match Reg stab L0181 ; UP CNTS VAL WHEN 6.25 MSEC INT ; brclr *L0046,#0x04,LC9D3; If Not in 8192 Baud mode ; ... else addb #0xCD ; 205d Set Up for 6.25 Ms Int. brset *L0046,#0x08,LC9E2 ; If locked in 8192 Baud Mode ; ... else dec L0131 ; 50 Msec TIMER TI LOOK FOR 8192 BAUD bne LC9E2 ; BR IF Z ; ... else bclr *L0046,#0x04 ; Disable 8192 Baud mode ldaa L4004 ; Parallel I/O CSR oraa #0x08 ; Set b3 staa L4004 ; Update CSR ldab L4006 ; Match Reg LC9D3: addb #0x0B ; 13d Set up for 160 Ms Int, (160 Baud) bset *L0046,#0x03 ; Serial Data Mode Word ; SET b0 (Expecting 1st 160 baud interrupt) & ; SET b1 (Expecting 2nd 160 baud interrupt ldaa #0xFB ; 1111 1011 jsr LF5DD ; Set Serial line Low (b3?) ldaa #0x01 ; staa L4007 ; Disable 8192 Baud Int's LC9E2: stab L4006 ; Save 160 Int time cli ; CLR & RESTORE INTERUPTS ; ; TEST FOR VALID STX ; tsx ; Save STX pointer lds #L01FF ; REнSET USR STX cpx #L01F7 ; Ck STX ptr VS Home Addr beq LC9F2 ; BR IF STX AT 0x01F7 ; ... else bset *L0034,#0x01 ; SET b0, STACK FAIL LC9F2: jsr LDEB0 ; Ck Vss Every 6.25 Ms ldd 0x3FFA ; Get MCU Status Reg. staa *L00A4 ; Old MPU status reg ; bita #0x08 ; b3, (DRP DURRING LAST 6.25 msec) bne LCA01 jmp LCAA2 ; LCA01: bset *L0036,#0x04 ; Minor Lp mode word 2, b2 = ref pulse occurred (6.25 ms check) brset *L0034,#0x10,LCA60;Minor Lp mode word, b4 = ign off ; ... else brset *L0035,#0x80,LCA7C;Minor Lp mode word 1, b7 = engine running ; ... else brclr *L0003,#0x20,LCA60;? ; ... else ldab L0121 ;? andb #0x0F ldx #LC38B ; Crank Fuel PW multiplier for 1 ref pulse brclr *L003E,#0x02,LCA21; Air Mode Word, b1 = ? ; ... else ldx #LC39B ; Crank Fuel PW multiplier for 17 ref pulses andb #0x07 LCA21: abx ldy #0x0000 ldaa 0x00,x beq LCA6A ; ; ... else ldy *L00C9 beq LCA6A ; ; ... else ldx #L00C9 jsr LF39F ; Mult 8 x 16 subroutine pshb psha addd L0123 ; Total Fuel Consumed std L0123 pulx ldab *L00D2 ; Inj offset correction abx abx stx L0463 ; HU RAM stx 0x3FF2 ; Async PW controller jsr LF4EE ; 11 usec delay ldd 0x3FFC ; MCU CSR jsr LF4EE ; 11 usec delay oraa #0x04 std 0x3FFC ; MCU CSR jsr LF4EE ; 11 usec delay anda #0xFB ; 1111 1011 std 0x3FFC ; MCU CSR bra LCA6E ; ; LCA60: ldx #0x0000 stx *L00C9 stx L0463 ; HU RAM bra LCA7C ; ; LCA6A: sty L0463 ; HU RAM LCA6E: ldab L0121 cmpb #0x0E bls LCA78 ; ; ... else bset *L003E,#0x02 LCA78: incb stab L0121 LCA7C: brclr *L0031,#0x04,LCA94; SPI command byte to FMD chip, b2 = EST enable brset *L00A1,#0x80,LCA94; Spark Adv rel to TDC (high byte) ldaa L012F ; Spark Adv blend mult adda LC028 ; Add to SABLND bcc LCA91 ; ; ... else ldaa #0xFF bclr *L0037,#0x20 ; Mode word, b5 = blend spark LCA91: staa L012F ; Spark Adv blend mult LCA94: brset *L003C,#0x02,LCAA2; Old CCP status byte, b1 = Start not enabled ; ... else brset *L0035,#0x80,LCAA2; Minor loop wd 1, b7 = engine running ; ... else bset *L003C,#0x02 ; Old CCP status byte, b1 = Start not enabled clr L045D ; HU RAM LCAA2: ldaa *L0034 ; Minor Loop Mode Word bita #0x10 ; b4 = ign off beq LCAAB ; ; ... else bclr *L0036,#0x04 ; Minor loop mode word 2, b2 = ref pulses occurred ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; CHECK VATS ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн LCAAB: brset *L0003,#0x20,LCAD9; BR IF b5, VATS AREADY PASSED ; ... else ; ; CK IF VATS ENABLED ; ldaa LC014 ; A/F OPTION WD #1 bita #0x10 ; b4, VATS ON beq LCAD3 ; BR If NOT VATS ENABLED, (ERR 46) ; ... else ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; ; CK VATS FREQ, (PERIOD) WINDOW (33 н> 66Hz) ; ldd 0x3FF8 ; PA1 clv ; DELAY, (clr over flow flg) subd L0129 ; Old VATS PERIOD beq LCAD9 ; If No PULSE ; ... else ldx 0x3FF8 ; PA1 stx L0129 ; Old VATS pshb ; psha ; ; ; CK VATS FREQUENCY LIMITS ; subd LC00E ; 3277d, VATS Max Limit, 66Hz pula ; pulb ; bhi LCAD9 ; BR IF CNT'R LT VATS Max Limit ; ... else subd LC010 ; 1638d, VATS Min Value, 33hz bcs LCAD9 ; BR IF CNT'R GT VATS Max Limit ; ... else LCAD3: bset *L0003,#0x20 ; SET b5, Mode Wd3, VATS OK clr L00B7 LCAD9: ldx 0x3FC0 stx *L0099 ;************************************************ ;CK ALDL ; ;ECM P/N 1227165 ;************************************************* brset *L0046,#0x08,LCAE6; BR If 8192 Mode in locked Mode ; ... else brclr *L0036,#0x20,LCB06; BR If Not b5, DIAG SW IN in ALDL Mode ; ... else ;нннннннннннннннннннннннннннннн ; LOOK FOR ALDL MODE 4 ; (USE SERIAL DATA+1 ICB) ; ; ;нннннннннннннннннннннннннннннн LCAE6: ldaa L0159 ; SERIAL DATA+1 ICB, cmpa #0x04 ; CHK FOR Mode 4 bne LCAF6 ; NOT IN Mode 4 ; ... else brset *L0036,#0x08,LCB06; BR IF b3, exit (PRIOR MODE 4) bset *L0036,#0x08 ; Set Mode 4 Flg <нннн*** bra LCB06 ; ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; CK IF IN ALDL MODE 4 ; IF NOT IN MODE 4, CLR FLAGS ; ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн LCAF6: brclr *L0036,#0x08,LCB06; BR IF NOT b3, ALDL MODE 4, EXIT ; ... else bclr *L0036,#0x08 ; CLR b3, (MODE 4 FLG) bclr *L0037,#0x01 ; CLR b0, (SKP ERR 42 FOR STALL SVR BYPASS) bclr *L0046,#0x70 ; CLR b clr L00BC ; SPK Fd Bk counter, (Err #42) ;нннннннннннннннннннннннннннннннннннннннннннннннннн LCB06: ldaa *L0000 ; Minor Lp Counter inca ; Inc Minor Lp Counter cmpa #0xA0 ; If Loop Cnt 160 (16) bne LCB33 ; If not 160, (16) ; ... else brclr *L0035,#0x02,LCB14; ; ... else inc L01AD LCB14: ldab *L003D ; ALCL MOD WD eorb #0x20 ; b5, Toggle 1 Sec Flg stab *L003D ; ALCL MOD WD ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; ENG RUN TIME COUNTER ; ; Do not Inc time if eng not running ; Time in Sec's = 80 x .0125 ;нннннннннннннннннннннннннннннннннннннннннннннннннн ldab *L0035 ; Get Mode wd 1 bpl LCB23 ; BR IF ENG NOT RUNNING ; ... else ldx *L0019 ; Eng Run Time (sec) inx ; INC RUN TIME stx *L0019 ; Save Eng Run Time (sec) ;ннннннннннннннннннннннннннннннннннннннннннннн ;ннннннннннннннннннннннннннннннннннн ; If no Comm >= 30 Sec Force mode 0 ; (TM'R VAL AT C7F7) ;ннннннннннннннннннннннннннннннннннннннннннннн LCB23: ldaa L0166 ; SERIAL DATA TIME TO FORCE MODE 0 inca ; Incr Ser Data time out timer staa L0166 ; NEW Ser DATA TIME VAL cmpa LC70B ; 30 SEC, bls LCB32 ; BR TIME GT 30 SEC ; ... else clr L0159 ; SERIAL DATA+1 ICB, (STATUS) ; ; FORCE MODE 0 ; LCB32: clra ; Clr Minor loop counter LCB33: staa *L0000 ; Save Minor Lp Count sei ; TURN OFF INTERUPTS jsr LF319 ; Reset the FMD chip staa *L002F ; Save Results jsr LF31E ; Read other, (Byte 2) staa *L0030 ; Save 2nd FMD Byte cli ; CLEAR & RESTORE INTERUPTS ldx #0xD000 ; Set PW word to zero D.C. ldaa *L002F ; Get results coma ; Comp FMD bytes ldx #LC014 brset 0x02,x,#0x04,LCB54; ; ... else brclr 0x00,x,#0x04,LCB54; ; ... else eora #0x04 LCB54: brclr 0x03,x,#0x20,LCB5A; ; ... else eora #0x40 LCB5A: brset 0x03,x,#0x40,LCB60; ; ... else anda #0xF7 ; CLR b3, EXCESS PWR STEER ACTIVITY LCB60: staa *L0038 ; SAVE TO MCU INPUT STATUS WD ; ; CK A/C QUALS ; ldaa *L0083 ; TPS Ld Axis Var cmpa LC574 ; 100% TPS, bcs LCB7E ; BR IF TPS LT THRESH ; ... else cmpa LC575 ; 100% TPS bcc LCB7E ; BR IF TPS GT THRESH, (TO IAC LOOP) ; ... else ldaa *L0066 ; Vss cmpa LC576 ; 8 MPH bhi LCB7E ; SKIP PS SW READ IF > 8 MPH ; ; PWR STEER SW ; ldaa *L002F ; coma ; INVER anda #0x08 ; MASK, FOR b3, PWR STEER oraa *L0038 ; MCU INPUT STATUS WD staa *L0038 ; MCU INPUT STATUS WD ;нннннннннннннннннннннннннннннннннннннннннннннннннннннн ; Status Word *L0038, (RAM) ; Bit ; 0 1 = in Pk or Nuet ; 1 1 = Not in 3rd Gear or O.D. ; 3 1 = Pwr Steering Pw Sw, (Hi Load) ; ; 4 1 = EGR Diag closed ; 5 1 = TCC ; 6 1 = Cooling Fan Request ; 7 1 = A/C Compressor not On ;ннннннннннннннннннннннннннннннннннннннннннннннннннннннн LCB7E: jsr LF622 ; Do IAC 6.25 Ms Loop ldaa #0x50 ; A/D Ch 5, TPS Voltage) jsr LF2F7 ; To A/D subroutine staa *L0082 ; Save TPS, (A/D) jsr LF493 ; To TPS Load Subroutine ; ; Transient TPS Filter ; ldx *L00E4 ; Transient TPS ldaa *L0083 ; TPS Ld Axis Var ldab LC326 ; 0.125, Trans TPS filter coef. jsr LF389 ; FILTER ROUTINE std *L00E4 ; Transient TPS ; ; KEEP TRACK of SERIAL DATA & AIRFLOW HERE ; ldab *L00B8 ; MAF Hi TMR (100Ms) ldaa *L0035 ; Get mode wd 1 bmi LCBBF ; IRQ ? brset *L0034,#0x10,LCBBC; BR IF b4, IGN OFF ; ... else ldaa *L0080 ; Pump Volts, (A/D) cmpa LC214 ; 10 vdc, MIN FOR ERR 34 bls LCBBC ; BR IF VOLTAGE GT 10 V ; ... else cmpb LC211 ; 600 Msec MIN QUAL TO SET HI MAF ERR 33 bls LCBB2 ; BR IF MAF HI TIME G.T. 600 Msec ; ... else bset *L0040,#0x80 ; Diagnostic mode word 1, b7 = ?? bra LCBBF ; LCBB2: ldaa *L00BD ; Get Air Flow value cmpa LC210 ; If Air Flow <= 45 gms/sec disable ERR 33 bls LCBBC ; BR IF AIR FLOW G.T. 45 gms/S ; ... else incb ; INCR HI MAF TMR bra LCBBD ; LCBBC: clrb ; CLR ERR 33, MAF HI TMR LCBBD: stab *L00B8 ; ERR 33, MAP Hi TMR, (100Ms) ; ; CK EPROM ID BYTE ; LCBBF: ldab LC3AA ; Get EPROM ID cmpb #0x55 ; Is it 0x55 bne LCBEF ; If not do BAD EPROM err ldab LC355 ; cmpb #0xAA ; Is It 0xAA ? bne LCBEF ; If not do BAD EPROM err ; ... else ;ннннннннннннннннннннннннннннннннннннн ;On Even minor Loops Do: ; 1. Spark ; 2. O2 Sensor read ; 3. Road Speed, Vss ;нннннннннннннннннннннннннннннннннннннн ldaa *L0000 ; Get Minor Lp counter rora ; Test b0 bcc LCBD5 ; BR if 0 ; ... else LCBD2: jmp LD66E ; Do Air Fuel On Odd Loops LCBD5: bclr *L003C,#0x08 ; CLR b3, MODE 4 BYPASS FUEL ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; CK IF IN MODE 4 <нннн*** ; ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн brclr *L0036,#0x08,LCBE1; BR IF NOT b3, MODE 4 ; ... else ldaa L015C ; MD 4 CNTL WD 1 bmi LCBE6 ; BR if b7 SET ; ... else ;ннннннннннннн ; TOGGLE COP ;ннннннннннннн LCBE1: jsr LF353 ; Toggle COP 2 Each 6.25 Ms ; SPK Edge Constrant bra LCBEC ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн LCBE6: bset *L003C,#0x08 ; SET b3 bset *L0037,#0x01 ; SET b0, SKP ERR 42 FPR STALL .. ; SVR SPK BYPASS LCBEC: jmp LCC53 ; Minor Lp ; ;ннннннннннннннннннннннннннннннннннннннннннн ;If Bad EPROM Disable SPK, (even Loops) ; Don't tog COP 2, (Odd Loops) ;нннннннннннннннннннннннннннннннннннннннннннн LCBEF: bset *L0050,#0x01 bclr *L0035,#0x80 bset *L003D,#0x80 ldaa *L0000 ; Cont if EPROM bad rora ; bcs LCBD2 ; ; ... else jmp LD23A ; Go Disable SPK ;************************************************* ;************************************************* ;MAJOR LOOP SCHEDULER ; ;Here from IRQ @ 160 Hz ; ; ; ;************************************************* LCC00: ldaa *L0000 ; Get Loop Cnt in A rora ; CY <- b0 bcc LCC0A ; EXEC MJR LOOP, but SKIP COP on even counts ; ... else ldaa #0xFF ; Set COP hi every other Mjr loop staa L400B ; Arm COP1 LCC0A: ldab *L0000 ; Get Loop Cnt in B andb #0x0F ; Only use lower nibble ldx #LCC32 ; Point to Seg Addr Table (16 segments) lslb ; abx ; ADJ ADDRESS POINTER FOR PROPER SUB ADDR ldx 0x00,x ; Get SEG ADDR jsr 0x00,x ; Jump to SEG Addr pointed bclr *L0037,#0x04 ; CLR b2, TIMIMG ERR CK FLG ;ннннннннннннннннннннннннннннннннннннннннннннннннн LCC1A: cli ; CLEAR & RESTORE INTERUPTS ldx L0117 ; RAM address beq LCC2D LCC20: dex ; DECR ADDR POINTER dex ; (TWICE) LCC22: sei ; TURN OFF INTERUPTS ldd 0x00,x ; Load 16 bit value from RAM std 0x00,x ; Write back same value to RAM cli ; CLEAR & RESTORE INTERUPTS stx L0117 ; Save current RAM refresh Addr (b15 is copied to N flag) bne LCC20 LCC2D: ldx #L01B6 bra LCC22 ;ннннннннннннннннннннннннннннннннннн ; MAJOR LOOP SEGMENT TABLE ; TYPE 0x8D, 122 ;ннннннннннннннннннннннннннннннннннн LCC32: .dw LCC52 ; SEG 0, Do nothing, exit w/RTS .dw LEF52 ; SEG 1, Output Bit Sig', (TCC, CCP etc) .dw LE08F ; SEG 2, Vss Calc .dw LFA3B ; SEG 3, Log RAM to H.U. .dw LEA8E ; SEG 4, Misc 100 Msec .dw LEE8A ; SEG 5, A/C, Clsd Lp & Cool FAN .dw LF4EF ; SEG 6, Log RAM to MCU, Cool A/D .dw LEB74 ; SEG 7, L.U. Coolant var's .dw LCC52 ; SEG 8, Do Nothing, exit w/RTS .dw LE375 ; SEG 9, Inj Air Managment .dw LEC2D ; SEG A, Lk UP Man Air temp Var's .dw LDEF1 ; SEG B, EGR .dw LE781 ; SEG C, Can Purge .dw LF0E8 ; SEG D .dw LDDE6 ; SEG E, TCC (A/D voltage convert) .dw LED91 ; SEG F, Fuel/Air Major Lp LCC52: RTS ;***************************************************** ;KNOCK (A Minor loop routne) ; ;EXECUTED EVERY OTHER IRQ1 ; ;All Minor Lp functions Related to SPK & Rd Spd ;***************************************************** LCC53: ldaa *L0036 ; MD WD 2 anda #0x04 ; CLR b2, (DIAG SW IN DIAG MODE) oraa *L0041 ; DIAGNOSTIC MODE WD 2 staa *L0041 ; DIAGNOSTIC MODE WD 2 ;ннннннннннннннннннннннннннннннннннннннннннн ; LK UP Slow o2 Filter Coef Vs Air flow ; ; TBL = Mult * 256 ;ннннннннннннннннннннннннннннннннннннннннннн ldaa *L00D9 ; Ld Val Limited AIR FLOW for Lk Up ldx #LC47D ; TBL jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) psha ; FILT COEF TO STX ldaa *L005D ; COOLANT ldab LC457 ; Get cold o2 filter coef mul ; adda *L005D ; COOLANT bcc LCC70 ; IF NO OVERFLOW ; ... else ldaa #0xFF ; MAX VAL LCC70: pulb ; GET SLOW o2 vs FLOW RESULT FM STX mul ; tab ; ldaa *L0070 ; FILT o2 VDC ldx *L0072 ; Mnr lp slo flt jsr LF389 ; LAG FILTER ROUTINE std *L0072 ; SAVE FILTERED A/D o2 RESULT ; ; SPK 12.5 Msec Logic ; brclr *L0036,#0x04,LCC99; Skp to LCD54 if no ref ; н in last 12.5 msec ldd 0x3FC8 ; Get SPK Period subd *L00BA ; OLD PA2 CNT'R, Sub Value after ; Lst SPK Period tsta ; bne LCC8D ; ; ... else cmpb LC233 ; bls LCC95 ; ; ... else LCC8D: inc L00BC ; SPK Fd Bk counter, (Err #42) bne LCC95 ; BR IF NZ ; ... else dec L00BC ; SPK Fd Bk counter, (Err #42) LCC95: addd *L00BA ; OLD PA2 CNT'R, SPK Period std *L00BA ; OLD PA2 CNT'R, SPK Period LCC99: ldaa *L0036 ; MINOR LP MD WD 2 ldab *L0035 ; bmi LCCAD ; ; ... else ldx *L0099 ; Current Minor LP Ref PERIOD cpx LC018 ; Ck Start up RPM Lmt bcs LCCAD ; ; ... else anda #0xFB ; CLEAR b2, (DRP LAST 6.25 Msec) staa *L0036 ; clra ; bra LCCD9 ; LCCAD: bita #0x04 ; b2 beq LCD18 ; BR IF NOT b2 ; ... else anda #0xFB ; CLR b2, (DRP LAST 6.25 Msec) staa *L0036 ; ; ... and ;ннннннннннннннннннннннннн ; CALC DYNAMIC DWELL ; = (DYNAMIC DWELL/8) +1 ;ннннннннннннннннннннннннн ldd *L009D ; DYNAMIC DWELL lsrd ; Div by 8 lsrd ; lsrd ; coma ; comb ; addd *L009D ; Dynamic Dwell bpl LCCC2 ; Br if no overflow ; .... else clra ; USE ZERO clrb ; LCCC2: std *L009D ; Save Dynamic Dwell ;ннннннннннннннннннннннннн clr L00A3 ; Num Of Minor Loops between Ref Pulse (DRP) ldaa *L0035 ; bmi LCD34 ; BR IF B7, engine running ; ... else ldab *L0034 ; bitb #0x08 ; b3, 2nd DRP (PERIOD VALID) beq LCD27 ; BR IF NOT b3 ; .... else ldaa *L0097 ; Cont'r for Eng Strt Up cmpa LC01A ; Num OF 12.5 Ms lps reguired ; for RPM to be abover limit bcc LCCDD ; BR IF ; else inca ; LCCD9: staa *L0097 ; Cntr for Eng Strt Up bra LCD2B ; LCCDD: ldaa *L0035 ; oraa #0x80 ; SET b7, ENGINE RUNNING FLAG staa *L0035 ; bclr *L003C,#0x02 ; CLR b1 ; ; CK IF SINGLE FIRE MODE SEL ; ldaa LC014 ; AFR MD WD 1, 1011 0100 bita #0x02 ; b1, SINGLE FIRE MODE SEL beq LCCF3 ; BR IF NOT b1. If MAF in use ; .... else bset *L003A,#0x80 ; SET b7, (IN SINGLE FIRE) bclr *L003A,#0x50 ; CLR b4 & b6, (TGL SF & PW = 0) ;ннннннннннннннннннннннннннн ; MAF, (Hot Wire) Routines ; ;ннннннннннннннннннннннннннн LCCF3: clr L00B8 ; MAP Hi Cnt'r, (100 Ms) brset *L00F9,#0x04,LCD0B; ; ... else brset *L0034,#0x10,LCD0B; BR IF b4, (1 = IGN OFF) ; ... else ; ldx *L00F5 ; Diff Val to calc Air Flow cpx LC21C ; IF Analog VALS * 7 or ; PP2DLT < 85, enab ERR #34 bcc LCD0B ; ; ... else ldaa *L0040 ; Diagnostic mode word 1 oraa #0x40 ; SET b6, ERR #34 staa *L0040 ; Diagnostic mode word 1 LCD0B: ldaa *L0001 ; oraa #0x08 ; SET b3 staa *L0001 ; ldd 0x3FCA staa *L00A7 bra LCD34 ; LCD18: ldaa *L00A3 ; Num Of Minor Lp's between DRP'S cmpa #0x17 ; 23 DRP'S ? bcs LCD2E ; BR IF L.T. 23 DRP'S ; else ldx #0xFFFF ; stx 0x3FC0 ; Ref period Cnt'r, ; LCD24: swi ; LOOP HERE TILL INTERUPT bra LCD24 ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн LCD27: orab #0x08 ; SET b3, 2nd DRP, (PERIOD VALID) stab *L0034 ; MINOR LP MD WD 1 ; LCD2B: jmp LD23A ; ; LCD2E: tstb ; bpl LCD2B ; inca ; BUMP UP COUNTER staa *L00A3 ; NUM Of MINOR LOOPS BETWEEN DRP'S LCD34: ldaa #0x00 ; staa L400C ; ldx #0x0099 ldaa LC009 ; Get Num of Cyl's, (0 = 8 CYL) bne LCD45 ; BR IF NZ ; ... else ldd *L0099 ; Current Minor LP Ref Period fm MPU bra LCD48 ; ; ; CALC RPM VAL ; ; LCD45: jsr LF39F ; MUL 8 X 16 SUROUTINE LCD48: std L0465 ; IM RAM, NUM OF 65.5Khz cnts between DRPs ;ннннннннннннннннннннннннннннннннннннн ; RPM, RPM P, RPM/25 & RPM/12.5 ; ; Q = (153.6/RPM RER) * 2^8 ; ; PER = 1/65.5 Khz per bit ;нннннннннннннннннннннннннннннннннннннн pshb psha lsld pshb psha pulx ldd #0x0133 ; 15 * 512/25) or 153.6 * 2 jsr LF34E ; TO F DIV SUBROUTINE pshb psha cmpa #0x60 ; 96d = 2400 RPM bls LCD66 ; ; ... else ; ; ROUND Q & ADJ to HI RANGE (2400н4800) ; addd #0x4080 bcc LCD6D ; IF IN HI RANGE RPM/25 ldaa #0xFF ; If > 4800 RPM limit to 4800, (255d) bra LCD6D LCD66: lsld subd #0x1F80 bcc LCD6D clra LCD6D: staa *L0058 pula pulb pshb psha addd #0x0080 ; Round off bcc LCD7A ; if no overflow ; ... else ldaa #0xFF ; limit to 255 LCD7A: staa *L0059 ; RPM/25 ;ннннннннннннннннннннннн ; MAKE UNнFILT RPM/12.5 ;ннннннннннннннннннннннн pula pulb lsld bcs LCD86 ;IF OVERFLOW LIMIT TO 255, (3187 RPM) ; ... else addd #0x0080 bcc LCD88 LCD86: ldaa #0xFF ; USE MAX VAL, 3187 RPM LCD88: clrb ldx *L005A ; RPM/12.5, (UNнFILT) beq LCD93 ; IF 0, EXIT ; ... else ldab LC526 ; RPM 12.5 Msec IAC Filter Coef, (0.5) jsr LF389 ; FILTER ROUTINE LCD93: std *L005A ; FILT RPM/12.5 ;ннннннннннннннннннннннннн brclr *L0001,#0x80,LCD9E; BR IF NOT b7 ; ... else bclr *L0037,#0x03 ; b0 & b1, SKIP ERR 43.. & IN STALL SVR bra LCE05 LCD9E: cmpa LC024 ; Stall Svr Lmt, (400 RPM) bcs LCDAF ; ; ... else cmpa LC025 ; Stall Svr Lmt, (450 RPM) bcc LCDD3 ; ; ... else ldab *L005C cmpb LC026 ; Stall Svr Lmt, (550 RPM) bls LCDD3 ; ; ... else LCDAF: brset *L0037,#0x02,LCDD0; b1, IN STALL SVR BYPASS SPK clr L00BC ; SPK Fd Bk counter, (Err #42) ldd 0x3FFC ; CPU CR andb #0xEF ; CLR b4 jsr LF4EE ; 11 Usec Delay std 0x3FFC ; CPU CR bclr *L0031,#0x04 ; CLR b2, EST ENABLE BIT, OFF sei ; TURN OFF INTERUPTS jsr LF31E ; FMD SERIAL BYTE READ cli ; CLR & RESTORE INTERUPTS ldd 0x3FC8 ; Get SPK Period, (PA2 CNT'R) std *L00BA ; OLD PA2 CNT'R, SPK Period ldaa *L005A ; RPM/12.5 ; LCDD0: bset *L0037,#0x03 ; SET b1 & b0, STALL SAVER SPK FLAG ; ; NO STALL SAVER SA ; LCDD3: brclr *L0037,#0x02,LCE05; BR IF NOT b1, IN STALL SVR SPARK ; ... else ; ; Disable Stall SVR Lmt, (550 RPM) ; cmpa LC027 ; STALL SVR RPM THRESH bls LCE05 ; BR IF RPM GT 550 RPM ; ... else bclr *L0037,#0x03 ; Clear Stall SVR SPARK FLAG, b0 & b1 inc L00BC ; EST FB CNT'R, PREVENT ERR 42 ; ; ZERO VAL'S ; EST DWELL, EST PULSE WIDTH ; clra clrb std 0x3FDC ; TO SPK Dwell Cnt'r jsr LF4EE ; 11 Usec Delay std 0x3FE6 ; SPK Dwell Cnt'r jsr LF4EE ; 11 Usec Delay std 0x3FE8 ; CURRENT EST FALL н LAST EST FALL jsr LF4EE ; 11 Usec Delay std 0x3FF6 ; EST FALL CNT'R ; (Time From Ref to Fire IGN Cnt'r) jsr LF4EE ; 11 Usec Delay ldx 0x3FEC ; B Cnt'r last ref jsr LF4EE ; 11 Usec Delay stx 0x3FE4 ; B Cnt'r Bgn nxt Dwell ;*************** ;Compute Dwell ;*************** ; ; IF LOAD CHANGE DURING LAST ; 25 msec > 10 Kpa SET DWELL ; to 0xFFxx & Br to LCEC8 ... ; LCE05: ldaa #0xFF ldab *L0064 ; FILTERED LD VALUE subb *L0063 ; NORMALIZED LOAD, 25 Msec OLD bcs LCE12 ; BR IF OLD G.T. NEW ; ... else cmpb LC01B ; Ld Val vs Dwell Limit bcc LCE1D ; br if G.T. ; ... else ;нннннннннннннннннннннннннннннннннннннннн ; IF DELTA RFPER > DYNAMIC DWELL ; set DYNAMIC DWELL = н2 * DELTA REFPER ;ннннннннннннннннннннннннннннннннннннннннн LCE12: ldd *L009B ; OLD REF PER subd *L0099 ; CURRENT MNR LOOP DRP PERIOD lsld subd *L009D ; DYNAMIC DWELL bmi LCE1F ; ; ... else addd *L009D ; DYNAMIC DWELL LCE1D: std *L009D ; DYNAMIC DWELL ;нннннннннннннннннннннннннннннн ; Limit DYNAMIC DWELL to ; REF PERIOD/8, (11 DEG FOR V8) ;нннннннннннннннннннннннннннннн LCE1F: ldd *L0099 ; Current Minor LP Ref Period Fm MPU lsrd lsrd lsrd subd *L009D ; Dynamic Dwell bcc LCE2C ; Br if DYNAMIC DWELL > REFPER/8 ; ... else ; ; IF DYNAMIC DWELL > REFPER/8 set DYNAMIC DWELL to ; REFPER/8 ; addd *L009D ; Dynamic Dwell std *L009D ; SAVE NEW Dynamic Dwell LCE2C: ldd *L0099 ; Current Minor LP Ref Period fm MPU std *L009B ; Last Minor LP Ref Period fm MPU lsrd ; /2 subd #0x00E5 ; 229d = 3.49 Msec, (15.25 Msec/bit) bcc LCE3B ; BR IF D G.T. 3.5 Msec, ; ... else addd #0x0134 bra LCE4B ; EXIT via BATTERY COMP LCE3B: lsrd subd #0x0127 bcs LCE46 addd #0x017E bra LCE4B ;ннннннннннннннннннннннннннн ; D = 1/4 * D + 23.3 msec) ;ннннннннннннннннннннннннннн LCE46: addd #0x05F7 ;1527d = 23.3 Msec lsrd ; /4 lsrd ; ;****************************** ;BATTERY VOLTAGE COMPENSATION ; ;****************************** LCE4B: pshb ; psha ; ldaa #0x7C ; 124d = 12.4 Vdc suba *L007F ; Batt Volts Value, (A/D) bcc LCE54 ; BR IF BAT V L.T. 12.4 ; ... else clra ; NEGATIVE RESULT ; ; LOW BATTERY DWELL ; If Batt < 12.4 VDC ; LCE54: ldab #0x04 ; mul ; 630 usec/Volt tsx ; addd 0x00,x ; pulx ; addd *L009D ; Dynamic Dwell std *L009F ; Dwell Cnts to MPU ldd *L0099 ; Current Minor LP Ref Period fm MPU subd #0x0027 ; subd *L009F ;Dwell Cnts to MPU bcc LCE6C ; BR IF NO UNDERFLOW ; ... else addd *L009F ; Dwell Cnts to MPU, (15.25 Msec/BIT) std *L009F ; Dwell Cnts to MPU, (15.25 Msec/BIT) ;************************************************* ;LK UP MAIN SPARK ADV vs LD vs RPM ; ;TBL = SPK * 256/90) ;************************************************* LCE6C: ldx #LC02D ; POINT TO MIN SPK TBL ldaa *L0001 ; lsla ; bmi LCE8E ; Br IF WARM Kickdown enabled ; ... else ldab *L005D ; GET FILT COOLANT cmpb LC02B ; START UP COOLANT bcc LCE84 ; BR IF COOLANT GT 26c ; ... else subb *L0060 ; START UP COOL bcs LCE8A ; BR IF COOL LT *L005F ; ... else cmpb LC02C ; Cool Diff Lmt Fm Tbl, (20c) bcs LCE8A ; ; ... else LCE84: ldaa *L003C ; oraa #0x40 ; SET b6, WARM KICK Dn REQ staa *L003C ; LCE8A: ldab #0xD0 ;208d Max LOAD AXIS ON 1st WARM PASS bra LCE96 ; LCE8E: ldab *L0064 ; filtered ld value cmpb #0xD0 ; 208 gms/SEC MAX FOR LK UP bls LCE96 ; BR IF LD VAL GT 208 ; ... else ldab #0xD0 ; USE MAX LD VAL LCE96: ldaa *L0058 ; RPM/25 jsr LF3B5 ; 3d Lk Up Routine staa L0454 ; SAVE HU SPK VAL psha ; SAVE MAIN SPK TO STX ;************************************************* ;LK UP COOL COMP SPK ADV vs LD vs COOL ; ;************************************************* ldaa *L005D ; COOLANT cmpa #0xD0 ; Limit COOL DEG FL to 115c bls LCEA7 ; BR IF COOL LT 115c ; ... else ldaa #0xD0 ; USE 115c AS MAX LK UP VAL LCEA7: ldx #LC10B ; POINT TO COOL COMP SPK LD SEL BYTE ldab *L0064 ; FILTERED LD VALUE tst 0x00,x ; CK LD SELECTOR BYTE (0 = LD VAL) bne LCEB8 ; BR IF NZ ; ... else cmpb #0xA0 ; MAX LD VAL FOR LK UP bls LCEBB ; IF LD LT 160 ; ... else ldab #0xA0 ; USE MAX LD VAL FOR LK UP bra LCEBB ; LCEB8: lsrb ; LD VAL/2 addb #0x20 ; MIN LD VAL FOR LK UP LCEBB: inx ; POINT TO TBL jsr LF3B5 ; 3d Lk Up Routine staa L0455 ; SAVE HU COOL COMP SPK RESULT psha ; SAVECOOL COMP SPK TO STX ;************************************************* ; ; CK ; ldab LC017 ; AFR MD WD 4 ldaa *L0038 ; MCU INPUT STATUS WD bitb #0x10 ; b4, EGR DIAG CLOSED beq LCED0 ; BR IF NOT b4 ; ... else bita #0x20 ; b5, N.O. Fan Req beq LCEFE ; BR IF NOT b5 ; ... else LCED0: bitb #0x04 ; b2, 4th gr Hwy Mode Sprk Adv on beq LCEDB ; BR IF NOT b2 ; ... else ldaa *L008E ; N/V ratio cmpa LC293 ; Min 4th gr Val bhi LCEFE ; ; ... else LCEDB: ldaa *L0064 ; FILTERED LD VALUE cmpa LC17C ; If LV8 > 100 disable hiнway mode spark bhi LCEFE ; BE IF LD VAL LT 100 ; ... else ldab *L005D ; COOLANT cmpb LC17B ; If Coolant <= 59.8c, (139.5f), disable bls LCEFE ; BR IF COOL GT THRESH ; ... else ldab *L0058 ; RPM/25 cmpb LC17D ; If RPM is less than 6350 RPM, disable bcs LCEFE ; ; ... else ldab *L00AA ; Hiway Mode Spk Tmr cmpb LC17E ; Enable hiнway mode spark if > 10 Sec bhi LCF04 ; BR IF TMR LT 10 SEC ; ... else ldaa *L0000 ; GET MJR LOOP CNTR bne LCEFF ; ; ... else incb ; INCR TMR bra LCEFF ; LCEFE: clrb ; CLR TMR LCEFF: stab *L00AA ; Hiway Mode Spk Tmr clra ; bra LCF12 ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; LK UP HIGHWAY MODE SPARK ADVANCE vs LV8 (load) ; ; TABLE VALUE = SA * 256/90) ;нннннннннннннннннннннннннннннннннннннннннннннннннн LCF04: cmpa #0x90 ; 144d MAX LD VAL FOR LK UP bls LCF0A ; BR IF LD VAL LT 144 ; ... else ldaa #0x90 ; 144d MAX LD VAL FOR LK UP LCF0A: ldab #0x20 ; 32d MIN LD VAL FOR LK UP ldx #LC17F ; ADDR OF TBL jsr LF3F2 ; 2D Lk Up (offset in B subbed from A) LCF12: ldab *L003B ; HU DISPLAY MD WD andb #0xEF ; CLR b4 staa L0456 ; SAVE HU HIGHWAY MODE SPARK ADVANCE psha ; SAVE HIGHWAY MODE SPARK ADVANCE TO STX beq LCF1E ; BR IF Z ; ... else orab #0x10 ; SET b4 LCF1E: stab *L003B ; HU DISPLAY MD WD ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; HOT REнSTART RETARD ;нннннннннннннннннннннннннннннннннннннннннннннннннн ldaa *L0001 ; NV mem mode wd bita #0x20 ; b5 bne LCF34 ; BR IF b5, (if IAC kick dn enab) ; ... else ldab *L0060 ; START UP COOL THRESH cmpb LC029 ; Low Lmt for Hot Restart, (54c) bcs LCF34 ; Br if S/U coolant LT this ; ... else ldab *L001A ; Engine run time subb LC57B ; 25d, Hot Sprk Retard min Run Time bcs LCF3B ; Br if run time LT this ; ... else LCF34: clrb ; oraa #0x20 ; SET b5, IAC KICK DN ENABLE FLG staa *L0001 ; NV mem mode wd bra LCF3E ; ; LCF3B: ldab LC02A ; Hot Restard Lmt fm Tbl, (9.8 Deg) LCF3E: ldaa *L003B ; HU DISPLAY MD WD anda #0xDF ; CLEAR b5 stab L0457 ; pshb ; beq LCF4A ; oraa #0x20 ; SET b5 LCF4A: staa *L003B ; HU DISPLAY MD WD ;****************************** ;* PWR Enrich Spk Advance ;* ;****************************** clra ; Assume not in Pwr Enrich brclr *L0044,#0x20,LCF5B; Br if not B5, In Pwr Erich ldaa *L0058 ; RPM/25 lsra ; Div by 4, Scale for look up lsra ;******************************* ;* Lk Up Pwr Enr Spk Adv vs RPM ;* ;******************************* ldx #LC187 ; SA vs RPM table jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) LCF5B: psha ; Save Pwr Enrich SA to stack ;------------------------------- ; PWr Enrich Knock Test ; Err 38 ;------------------------------- clrb ; ldaa *L0036 ; Minor lp md wd 2 bita #0x10 ; B4 = in diagnostic mode bne LCF7E ; Br if in diagnostic mode brclr *L0031,#0x04,LCF7E; SPI byte from FMD chip, B2 = EST enabled ; Br if EST not enabled, ... else brset *L003B,#0x20,LCF7E; HUD mode ed ; ... else ldaa *L0002 ; Md wd 2 bmi LCF7E ; B7 = Err 43 test fail this start ; Br if prior failure, ... else rora ; B0 = Err 43 test in progress bcc LCF81 ; Br if not in progress, ... else ldaa *L005D ; FLT coolant temp cmpa LC237 ; Min coolant for test bls LCF81 ; If coolant LT, disable test ; ... else ldab L01A6 ; Err 43 test SA bra LCF81 ; ; LCF7E: bclr *L0002,#0x01 ; Mode Wd 2, b0 = ERR 43 test in progress ; Clear test in progress flag LCF81: pshb ;Save EST test SA clrb ; ldaa *L0036 ; MNR LP MD WD 2 bita #0x20 ; b4, DIAG SW IN DIAG MODE beq LCF8C ; BR IF NOT b5 ; ... else ;************************************************* ;SUM THE SPARK ADVANCES ; ;************************************************* ldab LC023 ; Added S.A. for ALDL Mode LCF8C: ldx #0x0000 ; ZERO OUT SPK ADV ACCUM abx ; + Test SA value pulb ; abx ; + KNOCK TEST SA pulb ; abx ; + PE SA, (2D lookup) pula ; Throw away pulb ; + Hiway mode SA, (2D lookup) abx pulb ; + Cool comp SA, (3d lookup) abx pulb ; + Main SA from table ( 3d lookup) abx ldab *L0012 ; + START UP vs coolant SPARK ADVANCE abx psha pshx ; SAVE PARTIAL SUMMED SPK ADV TO STX pula pulb tsx subb LC10A ; SUB OFF 20 DEG, COOL COMP SPK BIAS sbca #0x00 subb 0x00,x sbca #0x00 brclr *L0048,#0x10,LCFB5; ; ... else subb LC2A3 sbca #0x00 LCFB5: ins ; RESET STX std L011E ; FINAL SPK ADV VALUE ;ннннннннннннннннннннннннннннннннннннннннннннннннн ; CK IF HEADS UP CONNECTED ; MOD SPARK ;ннннннннннннннннннннннннннннннннннннннннннннннннн ldx *L0034 ; MINOR LOOP MD WD 1 bpl LCFC0 ; BR IF NO HEADS UP ON LINE ; ... else jsr 0x5806 ; TO HEADS UP ; ; GET INITAL LEAD FM CAL ; LCFC0: subb LC01C ; IGN LEAD Value sbca #0x00 ; std *L00A1 ; SPK ADV REL TO REF, (Unlim) ldd LC01D ; MAX S.A. Limit, Aprox 40 Deg subd *L00A1 ; SPK ADV REL TO REF, (Unlim) bgt LCFD2 ; BR IF SPK G.T SPK LMT ; ... else addd *L00A1 ; SPK ADV REL TO REF, (Unlim) std *L00A1 ; SPK ADV REL TO REF, (Unlim) LCFD2: jsr LFB60 ; TPS ACCEL ENR ?? ldd 0x3FCA ; Counter #3, 16.5 Khz pshb ; psha ; subd *L00A5 ; tsta ; beq LCFE1 ; ; ... else ldab #0xFF ; USE MAX VAL LCFE1: pulx ; pshb ; stx *L00A5 ; clra ; brset *L0003,#0x80,LD006; BR IF b7, KNOCK ENBLED BY DIFF COOL ; ... else ldab *L005D ; COOLANT subb *L0060 ; START UP COOL bls LCFFA ; BR IF COOL G.T. START UP COOL ; ... else cmpb LC1BC ; bls LCFFA ; bset *L0003,#0x80 ; SET b7, KNOCK ENBLED BY DIFF COOL bra LD006 ; ; ; CK KNOCK CONTROL QUAL'S ; LCFFA: ldab *L005D ; COOLANT cmpb LC1BB ; If COOLANT < 67c, DISABLE KNOCK bcc LD006 ; BR IF COOL GT 67c ; ... else bclr *L0041,#0x80 ; CLR b7, KNK ENABLED (BY COOLANT) bra LD06F ; ; LD006: bset *L0041,#0x80 ; SET b7, KNK ENABLED (BY COOLANT) ldab *L005A ; FILT RPM/12/5 cmpb LC1B9 ; If RPM = > 650 RPM KNOCK is ENABLED bcc LD017 ; BR IF RPM G.T. 650 ; ... else ; ; CK ERR #43 STATUS ; ldab *L0066 ; Filt MPH (MSB) cmpb LC1BA ; If ERR 43, then KNOCK retard 8 Deg bcs LD06F ; ; ... else LD017: brclr *L0037,#0x40,LD027; B6 = ?? ; ... else ldab *L0083 ; TPS ld axis var cmpb LC1BD ; Maximum %TPS for ESC (knock) Enable (255d) bhi LD06F ; Br if GT max ; ... else bclr *L0037,#0x40 ; B6 = ?? staa *L00AB ; ??? LD027: ldaa #0xFF ldab *L0002 ; MD WD 2 bmi LD04D ; b7 = ??? ; ... else ; ; CK BATTERY ; ldab *L007F ; Batt Volts Value, (A/D) cmpb #0x5D ; 93d = 9.3 VDC bcs LD04D ; BR IF BATTERY L.T. 9.3 VDC ; ... else ldab *L003C ; Old CCP status byte bitb #0x20 ; b5 = Knock Fail (Err 43A) bne LD04D ; BR IF b5 ; ... else ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; KNOCK ATACK RATE vs RPM ; ; TBL = ATTACK RATE IN Deg/MSEC /0.0225, ; 400 н 4800 RPM ;ннннннннннннннннннннннннннннннннннннннннннннннннн ldaa *L0058 ; RPM/25 lsra ; RPM/25/4 lsra ; ldx #LC1C2 ; Tbl Addr, ; н Diff Cool Temp G.T. Enab KNOCK jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) pulb ; GET KNOCK CNT FM STX pshb ; mul ; KNOCK CNT * ATACK RATE lsld ; MULT * 2 adda *L00A9 ; SUM TO KNOCK RETARD bcc LD04D ; .... else ; ... else ldaa #0xFF ; USE MAX VALUE LD04D: psha ; ldab *L0044 ; AF MODE WD bitb #0x20 ; b5, PWR ENR IS ACTIVE beq LD061 ; BR IF NOT b5 ; .. else ;ннннннннннннннннннннннннннннннннннннннннннннн ; Lk Up MAX KNOCK RETARD WHEN IN WOT vs RPM ; TBL = Deg * 256/45) 800 н 6400 RPM ;нннннннннннннннннннннннннннннннннннннннннннн ldx #LC1CC ; Point to tbl ldaa *L0059 ; RPM/25 lsra ; RPM * 2 ldab #0x10 ; Offset for Lk Up jsr LF3F2 ; 2D Lk Up (offset in B subbed from A) bra LD06A ; ; LD061: ldx #LC1D4 ; Point to tbl ldaa *L0064 lsra jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) LD06A: pulb ; cba ; COMP LK'ED UP RESULT to B reg bcs LD06F ; BR IF B G.T. K'ED UP RESULT ; .. else tba ; ; ; RETARD ; LD06F: staa *L00A9 ; Retard for knock lsra ; RETARD/2 psha ; ldab *L0034 ; MINOR LOOP MD WD 1 bpl LD07C ; ; .. else ldab *L004D ; HU SPK FLAGS rorb ; bcs LD085 ; ; .. else LD07C: ldd *L00A1 ; SPK ADV Rel to Ref, (Unlim) tsx ; subb 0x00,x ; sbca #0x00 ; std *L00A1 ; LD085: pula ; ldaa *L0002 ; MB WD 2 pulb ; tstb ; beq LD0A0 ; ; ... else bita #0x01 ; beq LD094 ; ; ... else anda #0xFE ; clr b0 bra LD09A ; ; LD094: ldab L012F incb bne LD09C ; ; ... else LD09A: oraa #0x40 ; set b6 LD09C: anda #0x7F ; CLEAR b7, ERR 43 TEST FAIL THIS START staa *L0002 ; MD WD 2 ;ннннннннннннннннннннннннннннннннн ; DIAG 20 Deg SPK ADV ;ннннннннннннннннннннннннннннннннн LD0A0: ldaa *L0042 ; CK IF IN DIAG, DIAGNOSTIC MODE WD 3 bpl LD0A9 ; Br if NOT b7 = in diagnostic mode ; ... else ldd LC021 ; 20 Deg, Fixed S.A. For diagnostics std *L00A1 ; Spk Adv Rel to Ref, (Unlim) ;ннннннннннннннннннннннннннннннннн ; LIMIT SPARK RETARD ;ннннннннннннннннннннннннннннннннн LD0A9: ldx LC01F ; MAX Spk. RETARD lIMIT FM tBL cpx *L00A1 ; SPK ADV REL TO Ref, (Unlim) blt LD0B2 ; ; ... else stx *L00A1 ; USE MAX LMT FOR Spk RTD ;нннннннннннннннннннннннннннннннннннннннннннннннн ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; CK IF IN MODE 4 < нннн**** ; ; CNT'L WD ..,b3 1 = CONTROLING SPK ; CNT'L WD ..,b5 1 = ; ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн LD0B2: brclr *L0036,#0x08,LD0E8; BR IF NOT b3, MODE 4 ; ... else ; ; CK MODE 4 CNT'L CWD 5, b3 ; ldaa L0160 ; ALDL FUNCT MOD ENABLE WD bita #0x08 ; b3 beq LD0E8 ; Br IF NOT b3, NOT DOING SPL, (EXIT) ; ... else ; ; CK IF ALDL MODIFING SPARK ; (MODE 4 CWD 8) ; ldab L0163 ; ALDL SPK ADV, (MODE 4 WD 8, b4) bita #0x10 ; b4 bne LD0D0 ; Br IF b4, CONTROLLING Spk ; ... else bita #0x20 ; Test b5 beq LD0CD ; Br NOT b5, IF ADV SPARK ; ldaa #0x80 ; 128d negb ; bra LD0E4 ; ; LD0CD: clra ; bra LD0E4 ; EXIT W/NO SPK MOD ; ; CK IF ADD or RETARD SPK ; LD0D0: bita #0x20 ; b5 bne LD0DD ; BR IF b5, SUBTRACT SPARK ADVANCE ; ... else ;---------------------- ; ADD SPARK ADVANCE ;---------------------- ; ldd *L00A1 ; SPK ADV REL TO REF, (Unlim) addb L0163 ; ALDL SPK ADV adca #0x00 ; 40 deg ??? bra LD0E4 ; GO SAVE SPK ADV ;----------------------- ; SUBTRACT SPARK ADVANCE ;----------------------- ; LD0DD: ldd *L00A1 ; Spk Adv Rel to Ref, (Unlim) subb L0163 ; ALDL SPK ADV sbca #0x00 ; LD0E4: std *L00A1 ; Spk Adv Rel to Ref, (Unlim) bra LD0FB ; ; LD0E8: brset *L0042,#0x80,LD0FB; BR IF b7, IN DIAGNOSTICS ; ... else ldx *L00A1 ; Spk Adv Rel to Ref, (Unlim) bmi LD0FB ; BR IF RETARD pshx ; tsx ; ldaa L012F ; SPK ADV BLEND MULT jsr LF39F ; MUL 8 X 16 SUROUTINE pulx ; std *L00A1 ; Spk Adv Rel to Ref, (Unlim) LD0FB: ldd *L00A1 ; Spk Adv Rel to Ref, (Unlim) bmi LD107 ; ldaa *L0035 ; anda #0xFE ; CLR b0, IF ADVANCE CLR ADV/RETARD FL staa *L0035 ; bra LD10E ; ; LD107: ldaa *L0035 ; oraa #0x01 ; SET b0, IF RETARD, (ADV/RETARD FLG) staa *L0035 ; negb ; LD10E: pshb ; ;ннннннннннннннннннннннннннннннннннннннннннннн ; CK HEADS UP ; MAKE SPK ADV REL TO TDC ; ;ннннннннннннннннннннннннннннннннннннннннннннн ldaa *L0034 ; CK IF HEADS UP ON LINE bpl LD116 ; BR IF NO HEADS UP ; ... else jsr 0x5809 ; TO HEADS UP <ннннннннннннннн ;***************************************************** ;SPARK OUT ROUTINE ; ;EXECUTED EVERY OTHER 1RQI ;ALL MNR LOOP SPARK FUNCTIONS and Vss ; ; ;***************************************************** LD116: pula ; tsx ; jsr LF39F ; MUL 8 X 16 SUROUTINE pulx ; pshb ; psha ; tsx ; ldab *L0035 ; FLAG rorb ; bcs LD12C ; TO SPK OUT ROUTINE ; ... else clra ; clrb ; subd 0x00,x ; pulx ; bra LD12E ; ; LD12B: rts ; ;***************************************************** ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; SPARK OUTPUT ROUTINE ; ; TYPE 0x6E ECM ;нннннннннннннннннннннннннннннннннннннннннннннннннн LD12C: pulb ; pulb ; LD12E: psha pshb ldx #LC0FC ; Spark latency correction tbl ldaa *L0059 ; RPM/25 cmpa #0xF0 ; 240d = 6000 RPM tbl lmt bls LD13B ; Br if LT max RPM ; ... else ldaa #0xF0 ; Force 6000 RPM LD13B: ldab #0x20 ; 32d = 800 RPM - Start here jsr LF3F2 ; 2D Lk Up (offset in B subbed from A) tab ; Result to B pula sba ; A - B tab pula sbca #0x00 ; Round off pshb psha tsx ;------------------------------------------------- ; Limit Spk Adv incr to DRP period/16 ;------------------------------------------------- clra clrb subd *L0099 ; Current minor loop DRP period lsrd ; Div by 16 lsrd lsrd lsrd oraa #0xF0 ; MASK FOR MSB addd 0x3FF6 ; Time Fm Ref to Fire IGN Cnt'r subd 0x00,x ; bmi LD177 ; ; ... else addd 0x00,x ; std 0x00,x ; lsld ; ldd *L0099 ; Current Minor LP Ref Period bcc LD16F ; ; ... else coma ; comb ; addd #0x0001 ; subd 0x00,x ; bcc LD173 ; ; ... else bra LD177 ; ; LD16F: subd 0x00,x ; bcc LD177 ; ; ... else LD173: addd 0x00,x ; std 0x00,x ; LD177: ldd 0x00,x ; subd 0x3FF6 ; TIME Fm Ref to Fire IGN Cnt'r (EST fall cntr) bsr LD12B ; SHORT DELAY ; std 0x3FE8 ; CURRENT SPK Fall Cnt'r (Current EST fall) bsr LD12B ; SHORT DELAY ; addd 0x3FDC ; SPK Dwell period cnt'r (EST Dwell pulse width) bsr LD12B ; SHORT DELAY ; subd *L009F ; Dwell Cnt's to CPU (15.25 ms/bit) std 0x3FE6 ; SPK Dwell Cnt'r (Last EST fall) bsr LD12B ; SHORT DELAY ; ldd *L009F ; Dwell Cnts to MPU (15.25 ms/bit) std 0x3FDC ; SPK Dwell period cnt'r (EST dwell - EST pulse width) bsr LD12B ; SHORT DELAY ; pula ; pulb ; std 0x3FF6 ; Time Fm Ref to Fire IGN Cnt'r (EST fall cntr) ldaa *L0034 ; MINOR LOOP MD WD 1 bita #0x08 ; b3, 1st DRP BIT = 1 IF 1ST DRP NOW beq LD1D8 ; BR IF NOT b3, 1st DRP ; ... else ;----------------------------------------------------- ; Err 42 routine ; Spk Mon Enabled ;----------------------------------------------------- bita #0x10 ; B4 = Ign on bne LD1C9 ; BR IF Ign off ; ... else ; ; CK IF ERR 42 ; SPK MON ENABLED ; ldab LC1DF ; Mask For ERR flag wd 3 bitb #0x20 ; b5, SKP Monitor error (EST monitor) beq LD1C9 ; BR IF Err 42 not enabled ; ... else ldab *L0035 ; Minor lp md wd 1 lslb ; move b6 to b7 bmi LD1C9 ; BR if b6 was SET ; ... else lsla ; get back old b7 bmi LD1BE ; BR if b7 was SET - go set Err 42A ; ... else ldab *L00BC ; SPK Fd Bk counter, (Err #42) clr L00BC ; SPK Fd Bk counter, (Err #42) cmpb LC232 ; ERR #42 Param, If SPK toggled, ; (PA1 cnt's) >= 2 times, ; bls LD1C6 ; BR IF LT 2 CNT'S ; LD1BE: bset *L0034,#0x40 ; SET b6, LOCK IN ERR 42B ldd 0x3FFC ; CPU CR bra LD20B ; ; LD1C6: bset *L0035,#0x40 ; BYPASS CHECK ENABLED LD1C9: ldx 0x3FEC ; B Cnt'r last ref ldab *L0034 ; MINOR LOOP MD WD 1 andb #0xF7 ; CLR b3, 1st DRP BIT, (VALID PERIOD) stab *L0034 ; incb ; incb ; stx 0x3FE4 ; B Cnt'r, Bgn nxt Dwell incb ; LD1D8: mul ; ldd 0x3FFC ; CPU CR orab #0x10 ; SET b4 brset *L0031,#0x04,LD1EB; BR IF b2, EST ENABLED ; ... else clr L012F ; SPK ADV BLEND MULT bset *L0037,#0x20 ; SET b5, (BLEND SPK) bset *L0031,#0x04 ; SET b2, EST enabled LD1EB: brset *L0037,#0x02,LD1F4; BR IF b1, (IN STALL SVR SPK) ; ... else tst L0001 ; NV RAM Mode wd bpl LD20E ; BR if b7 CLR (ERR 42 failed )TO CK MODE 4 ROUTINE ; ... else LD1F4: bclr *L0031,#0x04 ; CLR b2, EST enable andb #0xEF ; CLR b4, brclr *L0037,#0x01,LD20B; BR IF NOT b0, (SKP ERR42 FOR STALL SVR) ; ... else pshb ; ldab *L00BC ; SPK Fd Bk counter, (Err #42) cmpb LC232 ; pulb ; bls LD20E ; ; ... else bset *L0001,#0x80 ; SET b7, ERR 42 failed bra LD20E ; ; LD20B: bset *L0050,#0x20 ; SET b5, NEW ERR 2 ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; CK IF IN MODE 4 <нннн**** ; (MODE 4 MD WD 4, b3) ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн LD20E: brclr *L0036,#0x08,LD235; BR IF NOT b3, MODE 4 ; ... else psha ; ldaa L015C ; MODE 4 MD WD 4 bita #0x08 ; Test b3 beq LD234 ; BR IF NOT b3, EXIT ; ... else andb #0xEF ; CLR b4 bclr *L0031,#0x04 ; CLR b2, EST enable pula ; psha ; std 0x3FFC ; CPU CR sei ; TURN OFF INTERUPTS jsr LF31E ; SPI ROUTINE cli ; CLEAR & RESTORE INTERUPTS clr L00BC ; SPK Fd Bk counter, (Err #42) bset *L0037,#0x01 ; SET b0, in Stall Saver Spk bypass ; (SKIP ERR STALL SAVER SPK BYPASS) ldx 0x3FC8 ; SPK Period stx *L00BA ; OLD PA2 CNT'R LD234: pula ; LD235: std 0x3FFC ; CPU CR bra LD299 ; ;************************************************* ;END OF SPK OUT ;************************************************* ; ;************************************************* ;LOW RPM SPARK ; ;************************************************* ; ;------------------- ; Clear variables ;------------------- LD23A: ldaa #0x00 ; staa L400C ; CPU COP ldx #0xFFFF ; stx L0465 ; HU variable inx ; Zero IX stx *L0058 ; RPM/25 stx *L005A ; RPM/12.5 ldaa *L0001 ; NV RAM Md Wd bita #0x08 ; Test b3 bne LD252 ; BR b3, BAD SHUTDOWN ; ... else stx *L0019 ; Eng Run Time (sec) LD252: ldaa LC354 ; $80, Init Ld Val Filter const clrb ; Zero low order byte std *L00EC ; Store $8000 in Trans flt'rd Ld Val stx *L00E0 ; Zero Accel Enrich, Acum Fuel stab *L00E9 ; Zero Diff Ld Val Accel Enr Factor stab L010A ; Zero IAC delay counter after startup ldaa *L00F9 ; IAC control wd 2 bita #0x04 ; Test b3 bne LD291 ; BR if SET ; ... else bsr LD269 ; Do sub, then bra LD291 ; branch ;------------------------------------------ ; Subroutine called from various ; ;------------------------------------------- LD269: ldab *L003E ; AIR MODE WD lslb bpl LD273 ; BR if b6 CLR, (1 = NV RAM bad) ; ... else ldab LC55C ; A/C Default steps stab *L002C ; Idle Spd A/C Antic LD273: ldab LC527 ; Idle Spd Start up park posit. stab L0110 jsr LD367 ; ldaa #0xFF ; LIMIT staa L0108 ; IAC final position? ldaa #0x80 ; SET BIT 7, AC STATUS OFF staa *L00F8 ; IAC Cnt'l Word 1 clra ; ldab *L0038 ; MCU INPUT STATUS WD bitb #0x01 ; Test b0, IN PK/NEUT beq LD28E ; BR IF NOT b0, IN PK/NEUT ; ... else ldaa #0x90 ; Set b7 & b4 LD28E: staa *L00F9 ; IAC Md Wd #2 = 1001 0000 rts ; EXIT ;***************************************************** ; LD291: ldaa #0xEF ; TIME OUT AF CNT'R jsr LF5DD ; bclr *L0031,#0x04 ; CLR SPI command byte b2, EST enable bit LD299: sei ; TURN OFF INTERUPTS jsr LF31E ; FMD serial byte read cli ; CLEAR & RESTORE INTERUPTS brclr *L0035,#0x80,LD2F9; Br if not B7, 1 = engine running ; ... else jsr LFA6C ; TO FUEL OUT jsr LE46A ; TO ASYNC OUT ;---------------------------------------------------- ; Mode 4 processing ;---------------------------------------------------- ; brclr *L0036,#0x08,LD2F9; Br if not B3, 1 = ALDL mode 4 ; ... else ldx #L015C ; index mode 4 control wd 3 in serial buffer brclr 0x00,x,#0x40,LD2C9; Br if NOT B6, clear system errors ; ... else brset *L0046,#0x40,LD2CC; Br if B6, (errors cleared?) ; ... else bset *L0046,#0x40 ; set B6 ;---------------------------------------------------- ; Mode 4 Clear Error Words 1 - 5 ;---------------------------------------------------- clra clrb std *L0004 ; Err flags 1 & 2 std *L0006 ; Err flags 3 & 4 staa *L0008 ; Err flag 5 ldd #0x0001 ; Reset ... std *L0017 ; Chk sum of Err words to cleared stat bra LD2CC ; Exit ; LD2C9: bclr *L0046,#0x40 ; CLR B6, errors cleared ;---------------------------------------------------- ; Mode 4 reset IAC to max ;---------------------------------------------------- LD2CC: brset *L00F9,#0x04,LD2E6; R/S decay md wd, b2 = motor reset done ; ... else brclr 0x00,x,#0x20,LD2E3; Br if NOT B5 in mode 4 control wd 3 ; B5 = reset IAC to max ; ... else brset *L0046,#0x20,LD2E6; Br if B5 set, IAC reset to max ; ... else bset *L0046,#0x20 ; Set B5, IAC reset to max bset *L00F9,#0x04 ; R/S decay md wd, b2 = motor reset done bset *L002B,#0xFF ; IAC present position = 255d bra LD2E6 ; ; LD2E3: bclr *L0046,#0x20 ; CLR B5, IAC reset to max ;---------------------------------------------------- ; Mode 4 reset BLM's ;---------------------------------------------------- LD2E6: brclr 0x00,x,#0x10,LD2F6; Br if NOT B4 in mode 4 control wd 3 ; B4 = reset BLM's ; ... else brset *L0046,#0x10,LD2F9; Br if B4 Set ; ... else bset *L0046,#0x10 ; Set B4 jsr LF577 ; Sub to initialize BLM Table to 128 bra LD2F9 ; ; LD2F6: bclr *L0046,#0x10 ; CLR B4 ;***************************************************** ;PID MINOR LOOP ; ;12.5 MSEC CODE ; ; ;***************************************************** LD2F9: ldab *L00F9 ; IAC Md Wd #2 bitb #0x04 ; Test b2 bne LD31C ; BR IF b2 ; ... else ldaa *L0036 ; MNR LOOP MD WD2 bita #0x20 ; b5, DIAG SW IN ALDL MODE beq LD310 ; BR IF NOT b5 ; ... else ldaa *L003D ; ALCL Md Wd rora ; b0 -> Cy bcs LD310 ; BR if SET ; ... else ldaa *L0059 ; RPM/25 cmpa #0x50 ; 80d = 3200 RPM bcc LD31C ; BR if > ; ... else LD310: ldaa *L0002 ; Mode Wd 2 bita #0x10 ; Test b4, SKP IAC MOTOR RESET bne LD379 ; BR IF B4 ; ... else ldaa *L0034 ; Minor loop Md Wd 1 bita #0x10 ; Test b4, 1 = IGN OFF beq LD379 ; BR IF Ign ON ; ... else LD31C: ldaa *L002B ; IAC Present Posit bitb #0x02 ; Test b1 of IAC Mode Wd 2 bne LD335 ; BR if SET ; ... else bitb #0x04 ; Test b2 of IAC Mode Wd 2 bne LD330 ; BR IF SET ; ... else orab #0x04 ; SET b2 & ldaa #0xFF ; Max out staa *L002B ; IAC Present Posit LD32C: ldaa #0xFF ; 255d bra LD33D ; Set IAC step dir cmd ; LD330: tsta ; IAC Present Posit bne LD32C ; If > 0, set IAC step dir cnd to 255 ; ... else orab #0x02 ; SET b1 of IAC Mode Wd 2 LD335: suba LC527 ; IAC Present - Startup nega ; 2's complement of remainder bpl LD33D ; BR if Present < Startup ; ... else ldaa #0x7F ; A = 127d LD33D: staa L0107 ; IAC step dir cmd bne LD359 ; BR IF NZ ; ... else ldaa *L0036 ; MNR LP MD WD 2 bset *L0002,#0x10 ; SET b4, SKIP IAC MOTOR RESET in Md Wd 1 bita #0x20 ; Test b5, beq LD34E ; BR IF NOT b5 ; ... else bset *L003D,#0x01 ; SET b1, ALDL reset in ALCL Md Wd LD34E: ldaa *L0034 ; MINOR LOOP MD WD 1 bita #0x10 ; Test b4, 1 = IGN OFF bne LD359 ; BR IF b4 ; ... else jsr LD269 ; bra LD379 ; ; LD359: stab *L00F9 ; IAC Md Wd #2 LD35B: clr L010B ; ldab *L00F8 ; IAC Cnt'l Word andb #0xEF ; CLR b4 stab *L00F8 ; jmp LD666 ; ;----------------------------------- ; Subroutine ; ; Value passed in B is subtracted from ; IAC Present Posit ;------------------------------------ LD367: ldaa *L002B ; A = IAC Present Posit sba ; A <- A - B bcc LD36D ; BR if A > B ; ... else nega ; Carry was set, do 2's complement LD36D: bpl LD371 ; BR if N CLR ; ... else ldaa #0x7F ; SET b0 thru b6 LD371: bcs LD375 ; BR if Cy ; ... else oraa #0x80 ; SET b7 LD375: staa L0107 ; Store IAC Step Dir Cmd, and ... rts ; Return ;***************************************************** ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; Subroutine ;нннннннннннннннннннннннннннннннннннннннннннннннннн LD379: ldaa *L0035 ; MINOR LP MD WD bpl LD35B ; ; ... else ldaa *L0085 ; TPS T/F Ld Axies Var staa *L0086 ; Old Val Fm TPS Tbl ldaa *L0083 ; TPS Ld Axis Var tab ; subb *L0085 ; TPS T/F Ld Axies Var bcc LD389 ; ; ... else negb ; LD389: cmpb LC544 ; CMD speed Param bls LD390 ; ; ... else staa *L0085 ; TPS T/F Ld Axies Var LD390: ldab *L0040 ; Diagnostic mode word 1 andb #0x24 ; 0010 0100 Test b2 & b5 beq LD39C ; Br if b2 & b5 zero ; ... else ldaa LC543 ; CMD speed Param lsla ; staa *L0085 ; TPS T/F Ld Axies Var LD39C: jsr LE8E0 ; IAC tables and params ;***************************************************** ;PID ENGINE SPEED REGULATOR ; ;50 Msec PID LOGIC ; ; ; ;***************************************************** ldaa *L0000 ; minor loop counter anda #0x07 ; 0000 0111 beq LD3A8 ; Branch taken once every eight minor loops ; ... else jmp LD66B ; ;************************************** ;ESTABLISH IDLE SPEED CMD SPEEDS ; ; Here every 50 msec ;************************************** LD3A8: pshx ; pshx ; pshx ; pshx ; tsy ; ;нннннннннннннннннннннннннннннннннннннн ; LK UP IAC TARGET RPM vs coolant Temp. ; ; ;нннннннннннннннннннннннннннннннннннннн ldaa *L005D ; Deg c COOL ldx #LC52E ; INDEX TGT RPM Tbl jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) ldx #LC526 ; INDEX IAC Tables & Params bclr *L00F9,#0x20 ; ; CL P/N RPM CMD FLOOR ldab *L00F9 ; IAC Md Wd #2 ? bpl LD3C2 adda 0x05,x ; IAC offset added for pk/neut, (50 RPM) LD3C2: ldab *L00F8 bmi LD3C8 adda 0x07,x ; IAC Offset Cmd Spd Added, (0 RPM) LD3C8: ldab *L003B andb #0x20 beq LD3D0 adda 0x56,x ; Add 300 RPM speed offset if hot spark LD3D0: adda L01B4 ldab *L0036 bitb #0x20 beq LD3DB ldaa #0x50 ; 80d = 2000/25 LD3DB: staa L0108 ; MIN RPM IN P/N AS REQ RPM ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; CK IF IN MODE 4 ; MODE 4 CNT'L WD 8, b0 & b1 ; MODE 4 CNT'L WD .. HAS NEW IAC CMD SPEED ;нннннннннннннннннннннннннннннннннннннннннннннннннн brclr *L0036,#0x08,LD3F3; BR IF NOT b3, MODE 4 ; ... else ldaa L0160 ; ALDL FUNCT MOD ENABLE WD bita #0x01 ; b0 beq LD3F3 ; BR IF NOT b0, MOD'ING, (EXIT) ; ... else bita #0x02 ; Test b1 beq LD3F3 ; BR IF NOT b1, ; ... else, MOD'ING, (EXIT) ldaa L0161 ; GET ALDL IAC CMD SPEED staa L0108 ; IAC CNT'L SPEED LD3F3: cmpa *L005A ; RPM/12.5 bcc LD3FD ; ; ... else ldaa *L00F8 ; IAC Cnt'l Word oraa #0x02 ; SET b1, SET MOTOR RESET STARTED BIT staa *L00F8 ; IAC Cnt'l Word ;нннннннннннннннннннннннннннннннннннннннн ; CALC 50 Msec RPM RATE ; ; ;нннннннннннннннннннннннннннннннннннннннн LD3FD: ldd L0105 ; 50 Mssec OLD FILT RPM RATE subd *L005A ; RPM/12.5 rora ; SCALE RPM RATE rorb ; D/2 asra ; rorb ; D/4 asra ; rorb ; D/8 asra ; rorb ; D/16 bsr LD46E ; stab L0105 ; SAVE 50 Mssec FILT RPM RATE clra ; clrb ; std 0x00,y ldab *L005A ; RPM/12.5 std 0x04,y ldab L0108 ; IAC CNT'L SPEED subd 0x04,y bsr LD46E stab 0x04,y tba bpl LD428 ; ; ... else nega LD428: staa 0x02,y cmpa 0x1B,x bls LD432 ; ; ... else clra bra LD438 ; ; LD432: ldaa L010D ; DEAD BAND TMR inca ; BUMP UP TMR beq LD43B ; BR IF Z ; ... else LD438: staa L010D ; DEAD BAND TMR LD43B: ldaa 0x02,y cmpa LC542 bls LD446 clra bra LD44C ; ; LD446: ldaa L010E ; TPS T/F Ld Axies Var inca beq LD44F LD44C: staa L010E LD44F: ldaa L0112 beq LD458 ; ; ... else deca staa L0112 LD458: ldaa *L0085 cmpa 0x1D,x bcc LD464 ; ; ... else ldaa *L0068 cmpa 0x1F,x bls LD47E ; ; ... else LD464: ldaa *L00F8 anda #0xFE staa *L00F8 tba jmp LD4F4 ; ; LD46E: lsld bcc LD477 ; ; ... else inca beq LD47C ; ; ... else clrb bra LD47C ; ; LD477: tsta beq LD47C ; ; ... else ldab #0xFF ; MAX POS LMY LD47C: rorb rts ; /2 ;***************************************************** ;нннннннннннннннннннннннннннннннннннннннннн LD47E: tst L0068 ; VSS TABLE INPUT, MPH/(16/5) bne LD4E0 ; BR IF MOVING, SOME Vss ; .... else ldaa L0112 ; DISABLE CLSD LP PID TMR bne LD4F3 ; ; .... else pshb ; SAVE RPM ERR TO STX ldaa *L00F9 ; IAC Md Wd #2 bpl LD496 ; ; .... else ; ; NOW IN NEUTRAL ; bita #0x10 ; TST OLD PK/NEUT STATUS bne LD4A7 ; BR IF IT WAS NEUT ; .... else clrb ; oraa #0x10 ; SET b4, DLY TMR, XISTION DELAY bra LD49E ; ; ; NOW IN DRIVE ; LD496: bita #0x10 ; b4, WE WE IN DRIVE, (OLD VAL) beq LD4A7 ; BR IF NOT b4 ; ... else ; ; OLD STATE WAS NEUT ; ldab 0x46,x ; LC675, DELAY TMR, 320 Msec anda #0xEF ; CLR b4, OVR SPEED ENABLE LD49E: stab L0112 ; DISABLE CLSD LP PID TMR clr L010D clr L010E LD4A7: staa *L00F9 ; IAC Md Wd #2 bmi LD4DF ; GOTO TO OPN LOOP TESTS ; ... else ; ; OLD STATE WAS IN DRIVE ; SINCE IN DRIVE, LEARN MIN POSIT FOR IDLE ; ; 400 MSEC MIN RPM ERR DEAD BAND TIME BEFORE ; LEARN ENABLE/DISABLE ; ldaa L010E ; RPM ERR TMR cmpa 0x3A,x ; 400 Msec MIN RPM ERR TIME bls LD4DF ; GOTO TO OPN LOOP TESTS ; ... else ; ; LEARN NEW MIN POSIT FOR IDLE ; IF SLEWED ABS, DON'T LEARN ; ldaa *L00F9 ; IAC Md Wd #2 asra bcs LD4DF ; ; ... else ; ; HOT RESTART ACTIVE ? ; ldaa *L003B ; HU DISPLAY MD WD bita #0x20 ; b5 bne LD4DF ; ; ... else ; ; LEARN MIN MOTOR AT 100 MSEC LEARN RATE ; ldaa *L0000 ; MINOR LP CNTR cmpa #0x30 ; 48d bne LD4DF ; BR IF NOT LP # 0x30 ; ... else ; ; COMPARE PRESENT vs MIN MOTOR POSIT'S ; ldaa L0110 ;Minimum IAC position ldab L0116 ;Present IAC position beq LD4DF ; ; ... else bmi LD4D8 inca cmpa L0113 ; INIT IAC WARM PARK POSIT bls LD4DC ; ; ... else ldaa L0113 ; INIT IAC WARM PARK POSIT bra LD4DC ; ; LD4D8: deca bne LD4DC inca LD4DC: staa L0110 ; Minimum IAC position LD4DF: pulb ; GET RPM ERR FM STX LD4E0: ldaa *L00F8 ; IAC Cnt'l Word bita #0x04 ; B2, MOTOR RESET WORKING beq LD4F7 ; ; ... else bita #0x18 ; b3 & b4 0001 1000 bne LD4F3 ; ; ... else brset *L0038,#0x08,LD4F3; BR IF b,3, MCU INPUT STATUS WD PW STEER SW ; ... else ; ; BYPASS PID IF A/C ANTICIPATE STEPS ; ARE BEING TAKEN ; ldaa L010C ; PID A/C TIMER beq LD535 ; ; ... else ; ; DISABLE A/C LEARNING IF TPS OPEN or ; Vss GT 0 ; ; UNDER SPEED ENABLE CHECK FOR A PID OVERIDE ; LD4F3: tba ; SAVE ABC VSL OF RPM ERR LD4F4: tsta ; UNDER SPD ERR ? bpl LD523 ; BR IF SO, ; ... else LD4F7: clr L010D ; CLR DEAD BAND COUNTER ldab *L0068 ; MPH/ (16/5) beq LD520 ; ; ... else ldab L0116 ; Present IAC position ble LD520 ; ; ... else ldaa *L0000 ; MINOR LP CNTR anda #0x18 ; MASK 0001 1000 cmpa #0x18 bne LD520 ; BR IF b3 & b4 ; ... else ; ; WAIT FOR COMP MODE TO BE DONE ; ldaa *L00F8 ; IAC Cnt'l WorD bita #0x08 ; b3, COMP MODE bne LD520 ; BR IF b3 ; ... else anda #0xEF ; CLR b4, TF ACTIVE staa *L00F8 ; IAC Cnt'l Word ldab #0x81 ; 129 STEPS stab L0107 ; REQUEST MOTOR STEPS ldaa *L00F9 ; IAC Md Wd #2 oraa #0x20 ; SET b5, staa *L00F9 ; IAC Md Wd #2 LD520: jmp LD662 ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; ; CK IF MANUAL XMISH ; LD523: ldab 0x53,x ; FLAG, '1' if manual vech sel beq LD52B ; Br IF NOT MANUAL ; ... else ldab *L0068 ; MPH/(16/5) bne LD4F7 ; BR IF MOVING, (BYPASS UNDER SPD CK) ; ... else ; ; CK FOR PID ENABLE ; LD52B: cmpa 0x20,x ; 50 RPM, Min under spd err to enab PID bls LD4F7 ; IF ERR LT 50, BP PID REQULATOR ; ... else ldaa *L00F8 ; IAC Cnt'l Word anda #0xE7 ; CLR b3 & b4, TF & COMP MODE staa *L00F8 ; IAC Cnt'l Word ;******************** ;PID ENABLED ; ;******************** LD535: ldaa *L00F9 ; IAC Md Wd #2 bmi LD53A ; CK P/N ; ... else inx ; POINT TO 'IN DRIVE' SCALARS LD53A: ldaa 0x19,x ; LC648, Max RPM Err for deadband in P/N staa 0x05,y ldaa 0x2C,x ; 187.5 RPM/SEC, LC65B, ; NEUT RATE DEAD BAND ldab 0x2A,x ; LC659, PK/NEUT intigrator gain std 0x06,y ldab 0x04,y ; RESSTORE RPM ERR ldx #LC526 ; REнINDEX IAC Tables & Params ldaa 0x02,y ; ABS VAL OF RP ERR cmpa 0x05,y bls LD594 ; ; ... else LD554: tstb bmi LD57C ; ; ... else ldaa 0x21,x tst 0x04,y bmi LD585 ; ; ... else psha ldaa 0x02,y cmpa LC54F ; 50 RPM Min UNDER SPD ERROR ; TO ENABLE HI PROP & DERIV ; GAIN ADDITIONS, (RPM/12.5) pula bls LD585 ; ; ... else cmpb 0x23,x bls LD585 ; ; ... else adda 0x24,x bcc LD585 ; ; ... else pshb mul adca #0x00 pulb aba bpl LD588 ; ; ... else ldaa #0x7F bra LD588 ; ; LD57C: ldaa 0x22,x negb mul adca #0x00 ; ROUND OFF nega bra LD588 ; ; LD585: mul adca #0x00 ; ROUND OFF LD588: tab clra tstb bpl LD58E ; ; ... else coma LD58E: addd 0x00,y std 0x00,y LD594: cpx #LC52A ; STP'S ADDED FOR FAN 2 beq LD5AD ; ; ... else ldx #LC52A ; STP'S ADDED FOR FAN 2 ldab L0105 ; RPM tba bpl LD5A3 ; ; ... else nega LD5A3: staa 0x03,y cmpa 0x49,x bcc LD554 ; ; ... else ldd 0x00,y LD5AD: jsr LD46E stab 0x00,y bpl LD5B6 ; ; ... else negb LD5B6: tba ldab *L00F9 ; IAC Md Wd #2 bpl LD5C0 ; ; ... else ldab 0x2A,x mul adca #0x00 ; ROUND LD5C0: cmpa 0x39,x bcs LD5CF ; ; ... else clr L0109 ldab 0x00,y stab 0x04,y bra LD611 ; ; LD5CF: ldab 0x03,y cmpb 0x06,y bls LD5DA ; ; ... else jmp LD65C ; ; LD5DA: ldab 0x07,y ldaa 0x02,y cmpa 0x05,y bhi LD5F2 ; ; ... else cmpa 0x47,x bls LD65C ; ; ... else ldab 0x46,x tst L00F9 bpl LD5F2 ; ; ... else ldab 0x45,x LD5F2: mul lsld ldab 0x04,y bpl LD5FA ; ; ... else nega LD5FA: adda L0109 bvc LD604 ; ; ... else ldaa #0x7F bcc LD604 ; ; ... else nega LD604: staa 0x04,y staa L0109 bpl LD60D ; ; ... else nega LD60D: cmpa 0x39,x bcs LD65F ; ; ... else LD611: ldab 0x38,x mul adca #0x00 std 0x06,y ldaa 0x39,x mul adca #0x00 bpl LD622 ; ; ... else ldaa #0x7F LD622: staa 0x05,y ;ннннннннннннннннннннннннннннннннннннннннннннн ; LK UP IAC Mult vs Cool Temp ; ; ;ннннннннннннннннннннннннннннннннннннннннннннн ldx #LC57D ; Tbl Addr ldaa *L005D ; Restart COOLANT jsr LF3F8 ; 2d Lk Up W/ Interp pshy pulx ldab #0x06 abx jsr LF39F ; MUL 8 X 16 SUROUTINE lslb adca #0x00 tab ldaa 0x04,y rola ldaa 0x05,y bcc LD646 ; ; ... else nega orab #0x80 LD646: stab L0107 ; REQUEST MOTOR STEPS lslb beq LD652 ; ; ... else ldab *L00F9 orab #0x20 stab *L00F9 LD652: ldab L0109 beq LD662 ; ; ... else staa L0109 bra LD662 ; ; LD65C: clr L0109 LD65F: clr L0107 ; REQUEST MOTOR STEPS LD662: pulx pulx pulx pulx LD666: ldd *L005A ; RPM/12.5 std L0105 ; rpm LD66B: jmp LCC00 ; TO MJR LP EXEC ; ;************************************************* ; ;Air Fuel 12.5 Msec LOOP, ; ; ;************************************************* ; LD66E: ldx *L008C ; Ign Off tmr brclr *L0034,#0x10,LD6BE; BR IF NOT b4, (1 = IGN ON) cpx #0x0008 bcs LD6C1 ; ; ... else bclr *L0001,#0xFF ; NON VOL RAM Mode word bclr *L0002,#0xEF ; CLR ALL EST MD BITS ; EXCEPT FAILED THIS TEST BIT, (b4) ; b4, SKIP IAC MOTOR RESET bclr *L0003,#0xFF clr L00B7 cpx LC012 ; SEC, IF IGN OFF THIS TIME TURN OFF ECM bcs LD68D ; ; ... else ;нннннннннннннннннннннннннннннннннннн ; ; WAIT HERE FOR SOFTWARE INTERUPT ; SWI VECTOR TO 0x???? ;нннннннннннннннннннннннннннннннннннн LD68A: swi ; bra LD68A ; ;нннннннннннннннннннннннннннннннннннн LD68D: inx ; stx *L008C ; Ign Off tmr clra ; CLR ENG RUNNING TIMER clrb ; std *L0019 ; Eng Run Time (sec) ldaa *L0035 ; bpl LD6AF ; ; ... else jsr LF58A ; Go init ... ldaa *L0035 ; Minor loop md wd #1 brclr *L0034,#0x20,LD6AF;Minor loop md wd, BR IF NOT b5, (1 = IGN OFF) ; ... else ldab *L0066 ; MPH bne LD6AF ; br if non zero ; ... else brset *L003F,#0x10,LD6AF; Major loop mode wd, br if b5, D.E. Qsec ; ... else ldab *L003F ; Major loop mode word orab #0x40 ; set b6 = burn off air meter stab *L003F ; Major loop mode word LD6AF: anda #0x7F ; clear b7, eng running flag staa *L0035 ; Minor lOop mode wd #1 clr L0183 ; ?? clr L0097 ; Cntr for Eng Strt Up bclr *L003A,#0x80 ; Single fire md wd clear b7, (IN SINGLE FIRE) bra LD6C4 ; ; LD6BE: ldx #0xFFFF ; all one's LD6C1: inx ; roll over, set carry stx *L008C ; Ign Off tmr LD6C4: ldab *L0040 ; Diagnostic md wd #1 andb #0xDF ; Clear b5, ?? (1101 1111) ldaa *L0035 bpl LD6E1 ; ; ... else ; ; CK IF ERR 21 ENABLED ; ldaa LC1DD ; Mask For Mal Funct flg 1 bita #0x02 ; b1, ERR Code 22, TPS low beq LD6E9 ; Br IF NOT b1 ; ... else ldaa *L0082 ; TPS, (A/D) cmpa LC1F7 ; If TPS A/D >= 12 then disable ERR #22 bcc LD6E9 ; ; ... else bset *L004E,#0x02 ; set B1, NEW ERR 1 orab #0x20 ; b5 bra LD6E9 ; ; LD6E1: ldaa LC3A4 ; 14% Min TPS Throttle Posit (init val) staa *L0087 ; Fltered low TPS, (A/D) clr L0088 LD6E9: stab *L0040 ; Diagnostic mode word 1 ldd *L0083 ; TPS Ld Axis Var sba bcs LD71F ; ; ... else cmpa LC565 ; A/C Clutch Value bcs LD703 ; ; ... else ldab LC566 ; A/C Clutch, 0d cmpb L010C bcs LD703 ; ; ... else stab L010C bset *L0035,#0x20 LD703: brclr *L0048,#0x01,LD71F; ; ... else brclr *L0038,#0x04,LD712; ; ... else cmpa LC2A4 bhi LD717 ; ; ... else bra LD71F ; ; LD712: cmpa LC2A5 bls LD71F ; ; ... else LD717: bclr *L0048,#0x01 ldab LC2A6 stab *L0094 LD71F: ldaa *L0083 ; TPS Ld Axis Var staa *L0084 ; Old ___ ldx *L0099 ; Current Minor LP Ref Period ldd *L00F1 ; DISPFLOW, Mass Air Flow gm/sec jsr LF429 ; 16 * 16 Mult routine pshb ; Save Middle 2 Bytes of Product psha ; Save Middle 2 Bytes of Product ldaa *L0064 ; FILTERED LD VALUE ldab *L0062 std *L0062 tsx ldaa LC5B0 ; Ld VAR FOR SCALING LV8 Scale factors ; 80d = 80/64 = 16 jsr LF5B5 ; FACTOR IN 8x16 MULT ldd 0x00,x rolb rola bcc LD742 ; ; ... else ldd #0xFFFF LD742: lslb adca #0x00 ; ROUND pulx bcc LD74A ; ; ... else ldaa #0xFF ; USE MAX VAL LD74A: staa *L0064 ; FILTERED LD VALUE brclr *L0035,#0x80,LD753; ; ... else jmp LD787 ; ; LD753: ldaa *L005D brclr *L0044,#0x80,LD75B; ; ... else ldaa *L0061 LD75B: cmpa #0xD0 bls LD761 ; ; ... else ldaa #0xD0 LD761: ldx #LC373 jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) ldx #LC371 jsr LF39F pshb psha ldaa *L0083 ; TPS Ld Axis Var for Lk Up ldx #LC381 ; Tbl Addr jsr LF3F8 ; 2d Lk Up W/ Interp tsx jsr LF5B5 ; FACTOR IN 8x16 MULT pulx lsld bcc LD782 ; ; ... else ldd #0xFFFF LD782: std *L00C9 jmp LDD3B ; ; LD787: brclr *L003A,#0x80,LD78E; BR IF NOT b7, (IN SINGLE FIRE) ; ... else bset *L003A,#0x10 ; SET b4, (TOGGLE S/F F/F) LD78E: ldaa *L00EC ; Trans flt'rd Ld Val suba *L0064 ; filtered ld value bcs LD7BA ; ; ... else brclr *L003F,#0x80,LD7A2; ; ... else tst L00EF ; Decel Active Time beq LD7A2 ; ; ... else dec L00EF ; Decel Active Time bra LD7B2 ; ; LD7A2: cmpa LC4E7 ; Diff Ld Val Tresh For Decel enlean bcs LD7BA ; ; ... else ldaa *L00F0 ; Trans Fltr'ed TPS for н> Decel Enlean suba *L0083 ; TPS Ld Axis Var bcs LD7BA ; ; ... else cmpa LC4E6 ; Diff TPS Tresh For Decel enlean bcs LD7BA ; ; ... else LD7B2: bset *L003F,#0xA0 bclr *L0039,#0x10 bra LD7C2 ; ; LD7BA: ldaa LC4E8 ; Dcel Enlean time period staa *L00EF ; Decel Active Time bclr *L003F,#0x80 ; CLR b7 LD7C2: ldaa *L005D ; COOLANT cmpa LC4F3 ; Min Cool for Cut Off bcs LD844 ; ; ... else brset *L0038,#0x01,LD844; BR IF b0, MCU INPUT STATUS WD (IN PK/NEUT) ; ... else ldaa *L0045 ; AF MODE WD #2 bita #0x10 ; b4, Vss FAILURE bne LD7DA ; ; ... else ldaa *L0066 cmpa LC4F4 ; Vss Lmt for Cut Off bls LD844 ; ; ... else LD7DA: ldab *L0040 ; Diagnostic mode word 1 bitb #0x24 bne LD7ED ; ; ... else ldaa *L0083 ; TPS Ld Axis Var cmpa LC4F2 ; Lo TPS Lmt for Cut Off bls LD7ED ; ; ... else clra clrb std *L0089 ; DECEL Fuel C/O Stall svr timer bra LD844 ; ; LD7ED: ldaa *L005C suba *L005A ; RPM/12.5 bcs LD7F8 ; ; ... else cmpa LC4F0 ; Max RPM Time bcc LD844 ; ; ... else ; CK IF ; b6 HIGH LIMIT FUEL CUTOFF ENABLED ; b7 not used ; LD7F8: ldaa *L0044 ; AF MODE WD bitb #0xC0 ; b6 & b7 bne LD80C ; BR IF b6 & b7 ; ... else ldab LC4EE ; Max Ld val For Cut Off bita #0x02 ; b1, DECELL FUEL CUT OFF ENABLED beq LD808 ; br if not b1 ; ... else ldab LC4EF ; Stay In Cut off Ld val LD808: cmpb *L0064 ; FILTERED LD VALUE bcs LD844 ; BR IF LD VAL GT THRESH ; ... else ; ; CK RPM WINDOW TO STAY IN DECELL FUEL C/O ; ; LD80C: ldab LC4EC ; 1200 RPM, Cut off Decel Lmt bita #0x02 ; b1, DECELL FUEL CUT OFF ENABLED beq LD816 ; BR IF NOT b1, ; ... else ldab LC4ED ; Stay In Cut off RPM Lmt LD816: cmpb *L0059 ; RPM/25 bcc LD844 ; BR IF RPM LT 900 RPM ; ... else ldab *L00DA ; TIME Req FOR DECEL Fuel C/O bne LD841 ; ; ... else bita #0x02 ; b1, DECELL FUEL CUT OFF ENABLED bne LD826 ; ; ... else ldx *L0089 ; DECEL FUEL C/O STALL SVR TIMER bne LD844 ; ; ... else LD826: oraa #0x02 ; SET DECELL FUEL CUT OFF ENABLED FLG staa *L0044 ; AF MODE WD ; ; CK SINGLE FIRE MODE SEL ; ldab LC014 ; AFR MD WD 1 bitb #0x02 ; b1, SINGLE FIRE MODE SEL beq LD834 ; BR IF NOT SINGLE FIRE MODE SEL ; ... else bset *L003A,#0xA0 ; SET b7 & b5, (IN SF & CLR SF) LD834: ldab *L003E andb #0xEF ; CLR b4 stab *L003E ldx LC4FA ; 6.38 Sec, Min Time Between Consec DEFCO'S stx *L0089 ; Decel Fuel C/O Stall svr timer bra LD898 ; ; LD841: decb bra LD849 ; ; LD844: ldaa *L0044 ; AF MODE WD ldab LC4F1 ; Cut off Min Time LD849: stab *L00DA ; Time Req for Dcel Fuel C/O anda #0xFD ; CLR b1, DECELL FUEL CUT OFF ENABLED staa *L0044 ; AF MODE WD brclr *L003A,#0x20,LD856; BR IF NOT b5, (CLR SF FF) ; ... else bclr *L003A,#0x60 ; CLR b5 & b6, (CLR SF & 0 PW) LD856: ldaa *L003E ldx *L0089 ; Decel Fuel C/O Stall svr timer bne LD862 ; ; ... else anda #0xEF staa *L003E bra LD889 ; ; LD862: dex stx *L0089 ; Decel Fuel C/O Stall svr timer ldab LC4ED ; Cut Off RPM cmpb *L0059 ; RPM/25 bcc LD877 ; ; ... else ldab *L005C subb *L005A ; RPM/12.5 bcs LD889 ; ; ... else cmpb LC4F0 bcs LD889 ; ; ... else LD877: bita #0x10 bne LD889 ; ; ... else oraa #0x10 staa *L003E ldaa LC4F9 ; Num of Stall Svr Pulses staa *L008B ; Accel Enrich After Decel C/O ldaa LC4F6 ; Stall Sve Val staa *L00CC ; Stall Save IAC Stps, (Sec*80) LD889: jsr LFB60 ; TPS ACCEL ENR ?? ldaa *L0040 ; Diagnostic mode word 1 bita #0xC0 bne LD898 ; ; ... else ldaa *L0064 ; FILTERED LD VALUE suba *L00EC ; TRANS FLT'RD Ld Val bcc LD89B ; ; ... else LD898: clra bra LD8BA ; ; LD89B: suba LC356 ; Min Delta LV8 for Acel ENR bcc LD8A3 ; ; ... else clra bra LD8B4 ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; LK UP LV8 AE FACTOR vs DELTA LV8 ; ; DELTA LV8 ABOVE MINIMUM (LC33C) ; ; TYPE 0x32 ECM ; ; TBL = Mult * 128 ;нннннннннннннннннннннннннннннннннннннннннннннннннн LD8A3: staa *L00E8 ; Diff Ld Val for Accel Enrich bset *L0039,#0x08 ; SET b3 ldx #LC357 ; LV8 AE FACTOR Tbl jsr LF3F8 ; 2d Lk Up W/ Interp ldab *L00EE ; Accel Enr Cool Factor mul lsld bcs LD8B8 ; BR IF NO OVERFLOW ; ... else LD8B4: adda *L00E9 ; Diff Ld Val Accel Enr Factor bcc LD8BA ; BR IF NO OVERFLOW ; ; ... else LD8B8: ldaa #0xFF ; USE MAX VAL LD8BA: staa *L00E9 ; Diff Ld Val Accel Enr Factor bne LD8C5 ; BR IF NZ ; ... else ldx *L00E0 ; Accel Enrich, Acum Fuel bne LD8C5 ; BR IF NZ ; ; ... else bclr *L0039,#0x0E ; CLR b0, b1 & b2 ; GET o2 VDC & FILTER LD8C5: ldaa *L0070 ; FILT o2 VDC staa *L00CF ; Filtered o2, (12.5Ms) ldaa #0x20 ; A/D CH 2, (o2 Sense Voltage) jsr LF2F7 ; To A/D subroutine ldx *L0070 ; FILT o2 VDC ldab LC3A7 ; o2 Sens Coef, (time) jsr LF389 ; FILTER ROUTINE std *L0070 ; FILT o2 VDC ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; CK IF IN MODE 4 <нннн**** ; ; DO AFR MOD VIA ALDL MODE 4 ; ; MODE 4 MODE WD .. b2 HAS AFR STATUS ; MODE 4 MODE WD .. HAS NEW AFR VALUE ;нннннннннннннннннннннннннннннннннннннннннннннннннн brclr *L0036,#0x08,LD8F2; BR IF NOT b3, MODE 4 ; ... else ldaa L0160 ; MODE 4 MODE WD .. bita #0x04 ; b2 beq LD8F2 ; EXIT ; ... else ldab L0162 ; GET ALDL AFR VAL FROM MODE WD ... ; CALC NEW AFR clra pshb psha pulx ldd #0xFFFF idiv stx *L00D5 ; Total AFR Value bra LD95A ; EXIT AND BYPASS FOLLOWING AFR ; MOD ROUTINES ;************************************************* ;PWR ENRICHMENT TPS TRESHOLD vs RPM ; ; ;400 н 4800 RPM, 5 LINES ; ;TBL = TPS% * 2.56 ;************************************************* LD8F2: ldx #LC501 ; Index table: Pwr Enrichment TPS Treshold vs RPM ldaa *L005D ; Restart coolant cmpa LC500 ; Minimum Temp to use Hot Coolant PE %TPS bcs LD8FF ; br if less ; ... else ldx #LC506 ; Index table: Minimum %TPS to Enable PE (Hot Coolant) vs RPM LD8FF: ldaa *L0058 ; RPM/25 lsra ; x 2 lsra ; x 4 jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) ldab *L0044 ; AF MODE WD bitb #0x20 ; b5, PWR ENR IS ACTIVE beq LD912 ; BR IF NOT b5 ; ... else suba LC4FF ; TPS Hyst. Disable P.E. if TPS < 10 bcc LD912 ; ; ... else clra LD912: pshb andb #0xDF ; CLR b5, PWR ENR IS ACTIVE stab *L0044 ; AF MODE WD cmpa *L0083 ; TPS Ld Axis Var pulb bhi LD95D ; ; ... else ldaa LC4FD ; If Ld Val > 50, Enab Pwr Enrich bitb #0x20 ; b5 beq LD926 ; BR IF NOT b5 ; ... else suba LC4FE ; 10d, Hyst for Pwr En. LD926: cmpa *L0064 ; Filtered ld value bhi LD95D ; ; ... else ldab *L0044 ; AF MODE WD orab #0x20 ; SET b5, PWR ENR IS ACTIVE stab *L0044 ; AF MODE WD bclr *L003A,#0x80 ; CLR b7, (IN SINGLE FIRE) ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; LK UP Pwr Enrichment Air/Fuel Pct Change vs RPM ; 0 н> 6400 RPM, 128 = NO CHG ; ; ; TBL = (Pct Change * 1.28) + 128 ;нннннннннннннннннннннннннннннннннннннннннннннннннн ldx #LC515 ; Tbl Addr ldaa *L0059 ; RPM/25 jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) tab ; RESULT TO B reg ldx #0x0080 ; 128d = O% CHG VALUE abx ; ADD LK'ED UP VALUE TO NEUTRAL VAL ldab *L00D7 ; CURRENT LK'ED UP AFR % Chg/Cool Temp abx ; ADD LK'ED UP VALUE ; ; MULT PCT CHNG BY CURRENT STOCH VAL ; (DIV RESULT /256 ; ldd LC3D5 ; Get Stoch Ratio jsr LF429 ; Go To 16 * 16 Mult routine std *L00D5 ; NEW AFR Value brclr *L003D,#0x04,LD95A; ALDL Mode Wd, b2 = field service mode ; ... else cpd L01AE ;Total A/F Ratio (Old) bhi LD95A ; ; ... else ldd L01AE ;Total A/F Ratio (Old) std *L00D5 ;47, Total Air/Fuel Val (2 byte) LD95A: jmp LDA00 ; ; LD95D: ldab *L000D ; START UP A/F Ratio bclr *L0035,#0x02 ldaa #0x01 brclr *L0045,#0x80,LD9CC; ; ... else bclr *L003D,#0x04 ldaa *L0064 ; Filtered Ld Val cmpa LC43C ; Maximum LV8 to remain in Highway Fuel bhi LD9C1 ; Br if greater than max ; ... else ldaa *L0066 ; MPH Var for Disp. cmpa LC440 ; Minimum Speed to Enable Highway Fuel Mode bls LD9C1 ; Br if less than min ; ... else ldaa *L005D ;Restart coolant cmpa LC43D ;Minimum Coolant Temp for Highway Fuel Mode bls LD9C1 ;Br if less than min ;... else ldaa L011C ;? cmpa LC27C ;xmission data bls LD9C1 ;Br if less ;... else ldaa L01AD ;? bset *L0035,#0x02 ;Minor loop word 2, b1 = chk eng light delay flag brclr *L0037,#0x80,LD999;? word, b8 = ? ; ... else cmpa LC43F ;Maximum Time in Highway Fuel Mode bcc LD9C1 ; ; ... else bra LD9A4 ; ; LD999: cmpa LC43E ;Highway Fuel Mode Enable Delay bcs LD9C8 ; Br if less than delay ; ... else clr L01AD ; ? bset *L0037,#0x80 ; b8 = ? LD9A4: ldaa *L0064 ; Filtered Load value bpl LD9AA ; Br if LV8 < 127 ; ... else ldaa #0x80 ; A = 128d LD9AA: lsra ; A = 2 x LV8 ldx #LC441 ; Index to table: Highway Mode A/F vs LV8 ldab #0x10 ; Offset = 16d jsr LF3F2 ; 2D Lk Up (offset in B subbed from A) clrb ; B = 0, A = A/F ratio psha ; transfer A & B pshb ; to pulx ; X ldd #0xFFFF ; D = 65535d idiv ; X = D/X, D = remainder ldab *L000D ;START UP A/F Ratio (2 bytes) ldaa #0x01 ; A = 1 bra LD9F8 ; ; LD9C1: ldaa #0x01 ; A = 1 clr L01AD ; ? bra LD9F2 ; ; LD9C8: ldaa #0x01 ; A = 1 bra LD9F5 ; ; LD9CC: clra ; A = 0 staa L01AD ; ? bset *L003D,#0x04 ; ALCL mode wd, b2 = field service mode addb LC419 ; Open Loop AFR % change vs coolant temp adca #0x00 ; addb *L00D4 ; Cool temp AFR ratio adca #0x00 std *L00D5 ; Total Air/Fuel Val (2 byte) ldaa *L0064 ; Filtered Ld Val ldx #LC3DC ; Open Loop AFR % Change vs LV8 jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) tab ; Transfer to B clra ; A = 0 stab L0459 ; Update heads up variable addd *L00D5 ; Total Air/Fuel Val (2 byte) bcc LD9F2 ; Br if no overflow ; ... else ldd #0xFFFF ; Load max LD9F2: bclr *L0037,#0x80 ; b7 = ? LD9F5: ldx LC3D5 ; Stoichiometric A/F ratio LD9F8: jsr LF429 ; 16 * 16 mult std *L00D5 ; Total Air/Fuel Val (2 byte) std L01AE ; Total A/F Ratio (Old) LDA00: tst L00B8 ; MAP Hi Cnt'r, (100 Ms) bne LDA0C ; Br if non zero ; ... else ldaa *L0064 ; Filtered Ld Val cmpa LC238 ; if LV LT this, disable ERR 43 test bcc LDA12 ; Br if LV greater ; ... else LDA0C: ldaa *L0002 ; Mode word 2 anda #0xFE ; clear b0, ERR 43 test in progress staa *L0002 ; Mode word 2 LDA12: ldaa *L0034 ; Minor loop mode word, b7 = HU on line bpl LDA19 ; Br if HU not online ; ... else jsr 0x5803 ; to HU subroutine LDA19: ldy #L00F1 ; Index Y to MAF airflow, Gms/Sec ldaa LC017 ; 4th air flow mode word rora ; rotate b0 into cy bcc LDA27 ; br if NOT b0, use ld val for BLM, not DISPFLOW ; ... else ldy #L0064 ; Index Y to filtered load value LDA27: ldaa *L0044 ; Fuel mode word anda #0xFB ; 1111 1011, zero b2 staa *L0044 ; Fuel mode word ldab *L00C6 ; BLM Cell Number (cells 0-7) andb #0x03 ; isolate lowest 2 bits ldx #LC4C6 ; Index to table BLM Cell RPM & Airflow boundaries abx ; Add cell number to index tstb ; check for cell 0, idle beq LDA47 ; br if cell 0, idle ; ... else ; ; Check RPM bounds ; ldaa 0x00,x ; Get current RPM bound suba LC4CD ; BLM hysteresis (100 RPM) bcs LDA43 ; br if RPM l.t. bound value ; ... else cmpa *L0059 ; RPM/25 bhi LDA7F ; br if RPM l.t. bound value ; ... else LDA43: cmpb #0x03 ; cell 3? beq LDA52 ; br if yes ; ... else LDA47: ldaa 0x01,x ; load next value in table adda LC4CD ; add 100 RPM, BLM Hysteresis bcs LDA52 ; br if overflow ; ... else cmpa *L0059 ; RPM/25 bcs LDA7F ; br if < RPM ; ... else LDA52: ldab *L00C6 ; BLM cell number andb #0x0C ; isolate b2 & b3 lsrb ; shift to b0 & b1 lsrb ; ldx #LC4C9 ; index BLM RPM cell boundary #3 abx ; add cell number to index tstb ; was cell 0? (idle) beq LDA6F ; yes, skip over ; ... else ldaa 0x00,x ; get indexed BLM cell contents suba LC4CE ; subtract BLM hysteresis bcs LDA6B ; br if less ; ... else cmpa 0x00,y ; Y indexes DISPFLOW or LV8 bhi LDA7F ; br if greater ; ... else LDA6B: cmpb #0x03 ; B = 3? beq LDA7B ; br if yes ; ... else LDA6F: ldaa 0x01,x ; load next indexed BLM cell Airflow boundary adda LC4CE ; BLM hysteresis bcs LDA7B ; br if overflow ; ... else cmpa 0x00,y ; compare to indexed fuel or load value bcs LDA7F ; br if less ; ... else LDA7B: ldab *L00C6 ; BLM cell number bra LDAB2 ; ; LDA7F: clrb ; Clear BLM cell number counter ldaa *L0044 ; Fuel mode word oraa #0x0C ; 0000 1100, set b2 & b3 ; b2 = bl cell change ; b3 = delay blm update staa *L0044 ; Fuel mode word ldaa *L0059 ; RPM / 25 cmpa LC4C7 ; BLM Cell RPM Boundary #1 (low), 700 RPM bcs LDA9A ; br if less ; ... else incb ; inc cell pointer cmpa LC4C8 ; BLM Cell RPM Boundary #2 (mid), 1200 RPM bcs LDA9A ; br if less ; ... else incb ; inc cell pointer cmpa LC4C9 ; BLM Cell RPM Boundary #3 (high), 2000 RPM bcs LDA9A ; br if less ; ... else incb ; inc cell pointer LDA9A: ldaa 0x00,y ; get flow value cmpa LC4CA ; BLM Cell Airflow Boundary #1 (low), 12 gm/S bcs LDAB2 ; br if air flow < 12 gm/s ; ... else addb #0x04 ; bump cell number cmpa LC4CB ; BLM Cell Airflow Boundary #2 (mid), 22 gm/s) bcs LDAB2 ; br if air flow < 22 gm/s ; ... else addb #0x04 ; bump cell number cmpa LC4CC ; BLM Cell Airflow Boundary #3 (high), 34 gm/s bcs LDAB2 ; br if air flow < 34 gm/s ; ... else addb #0x04 ; bump cell number ; ; Update BLM cells ; LDAB2: ldx #L001B ; Point to BLM cell matrix in memory abx ; add cell num to pointer ldaa 0x00,x ; get current cell blm value cmpa LC4D4 ; 160d, max BLM limit bhi LDAC2 ; br if BLM > max BLM limit ; ... else cmpa LC4D5 ; 108d, min BLM limit bcc LDACB ; br if BLM < min BLM limit ; ... else LDAC2: ldaa *L003E ; Air Mode Wd oraa #0x40 ; set b6 staa *L003E ; Air Mode wd jsr LF577 ; Sub to initialize BLM Table to 128 LDACB: stab *L00C6 ; BLM cell number staa *L00C7 ; BLM bmi LDAD3 ; ; ... else ldaa #0x80 LDAD3: ldab *L0044 ; AF mode wd bitb #0x20 ; b5, P.E. is active beq LDADB ; br if not ; ... else staa *L00C7 ; BLM LDADB: ldd *L00F1 ; DISPFLOW, Mass Air Flow gm/sec lsld ; Air flow * 2 cmpa #0x80 bls LDAE4 ; ; ... else ;ннннннннннннннннннннннннннннннннннннннннннн ; LK UP Fast o2 R/L Treshold vs Air Flow ; ;ннннннннннннннннннннннннннннннннннннннннннн ldaa #0x80 ; Lk UP var LDAE4: staa *L00D9 ; Ld Val limited for Lk Up ldx #LC46B ; Table address jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) suba *L00D8 ; Lean offset, (if cool) brset *L003F,#0x02,LDAF5 ; ; ... else suba LC454 LDAF5: psha ldd LC44B cmpa *L0070 ; Filt O2 vdc bcs LDB01 ; ; ... else cmpb *L0070 bls LDB0A ; ; ... else LDB01: clr L00C5 ; Cl/Lp O2 NR timer, (200 ms inc) ldab *L0001 ; non vol RAM mode wd orab #0x01 ; Set b0 stab *L0001 ; non vol RAM mode wd LDB0A: pula psha ldab LC453 aba cmpa *L0070 pula bcs LDB26 ; ; ... else sba cmpa *L0070 bhi LDB20 ; ; ... else ldaa *L0070 cmpa *L00CF bhi LDB26 ; ; ... else LDB20: ldab *L0045 andb #0xBF bra LDB2A ; ; LDB26: ldab *L0045 orab #0x40 LDB2A: cmpb *L0045 beq LDB3A ; ; ... else inc L00F7 ldaa *L003D oraa #0x10 staa *L003D clra bra LDB3F ; ; LDB3A: ldaa *L00CE inca beq LDB41 ; ; ... else LDB3F: staa *L00CE LDB41: stab *L0045 ldab *L0045 bpl LDBA4 ; ; ... else ldaa *L0044 bita #0x22 bne LDB9E ; ; ... else brset *L0037,#0x80,LDB9E; ; ... else ldab LC016 bitb #0x20 beq LDB5C ; ; ... else bita #0x04 bne LDBA4 ; ; ... else LDB5C: ldaa *L0034 bita #0x02 bne LDBA4 ; ; ... else ldaa *L003F bmi LDB92 ; ; ... else bitb #0x02 beq LDB70 ; ; ... else brclr *L0039,#0x88,LDB70; ; ... else bra LDBA4 ; ; LDB70: ldaa LC017 bita #0x08 beq LDB7E ; ; ... else ldaa *L003C adda *L003F rora bcs LDBA4 ; ; ... else LDB7E: ldab *L0036 ; Minor Loop mode wd 2 bitb #0x20 ; b5 = in ALDL mode bne LDBAF ; ; ... else ldab *L0064 ; Filtered Load value cmpb LC4E3 ; Decek Enlean Enable LV8 Threshold bhi LDBAF ; ; ... else ldab *L0059 ; RPM cmpb LC4E4 ; Decel enlean Enable RPM Threshold (RPM/25) bls LDBAF ; ; ... else LDB92: ldaa *L0045 ; Fuel/Air mode wd bita #0x40 ; Test b6, rich/lean flag (0 = lean) bne LDBAF ; Br if rich ; ... else ldaa *L00D0 ; Closed loop Integrator cmpa #0x80 ; 128d = center of range bcs LDBAF ; Br if less than 128 ; ... else LDB9E: ldaa *L0042 ; Diagnostic mode wd 3 oraa #0x04 ; Set b2, INT FORCED 128. ERR 44/45 staa *L0042 ; Store it LDBA4: ldaa #0x80 ; 128d staa *L00D0 ; Closed loop Integrator clra ; 0 staa *L00CB ; ?? psha ; Save A jmp LDCCB ; ; LDBAF: ldaa *L00D9 ; Load Val Limited Air Flow for Lookup ldx #LC459 ; ?? jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) suba *L00D8 ; Subtract Lean offset (if cool) from table brset *L003F,#0x02,LDBC0; Major Loop Mode wd, b1 = AIR controlled, 0 = diverted ; ... else suba LC454 ; ?? LDBC0: cmpa *L0072 ; Filt o2 vdc, minor loop bcs LDBE2 ; ; ... else ldaa *L00D9 ; Load Val Limited Air Flow for Lookup ldx #LC462 jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) suba *L00D8 ; Subtract Lean offset (if cool) from table brset *L003F,#0x02,LDBD5; Major Loop Mode wd, b1 = AIR controlled, 0 = diverted ; ... else suba LC454 LDBD5: suba *L0072 ; Filt o2 vdc, minor loop bhi LDBDC ; ; ... else clra bra LDC13 ; ; LDBDC: ldab *L0045 ; Fuel Air mode wd andb #0xDF ; Clear b5, EECC Slow O2 rich/lean flag (1101 1111) bra LDBEE ; ; LDBE2: tab ldaa *L0072 ; Filt o2 vdc, minor loop sba ldab LC456 mul ldab *L0045 ; Fuel Air mode wd orab #0x20 ; Set b5, EECC Slow O2 rich/lean flag (0010 0000) LDBEE: stab *L0045 ; Fuel Air mode wd psha ; Save A on stack staa L045A ; HU variable ldaa *L00D9 ; Load Val Limited Air Flow for Lookup ldx #LC486 jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) ldab *L0083 ; TPS Ld Axis Var cmpb LC450 ; ?? bhi LDC0B ; ; ... else ldab *L0068 ; Vss, MPH/(16/5) bne LDC0B ; ; ... else ldab LC452 ; ?? mul LDC0B: pulb mul cmpa #0x58 bls LDC13 ldaa #0x58 LDC13: psha staa L045A ; HU variable lsla ldx #LC4A1 jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) psha ldaa *L0058 ; RPM / 25 cmpa #0xA0 ; 160d = 4000 RPM bls LDC27 ; ; ... else ldaa #0xA0 ; 160d LDC27: lsra ; /2 ldx #LC48F ; ?? jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) pulb aba bcc LDC34 ; ; ... else ldaa #0xFF LDC34: tab ldaa *L0045 ; Fuel Air Mode wd anda #0x60 ; b5 = EECC slow O2 rich/lean flag, b6 = rich/lean flag, 1 = rich (0110 0000) beq LDC3F ; Br if b5 & b6 were 0 ; ... else cmpa #0x60 bne LDC46 ; Br if b5 or b6 were non zero ; ... else LDC3F: pula psha cmpa LC455 bhi LDC50 ; ; ... else LDC46: clr L00CB ldaa *L00CE ; ?? cba bhi LDCAB ; ; ... else bra LDCB0 ; ; LDC50: pula psha lsla ldx #LC4BB jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) ldab *L005D ; Restart coolang negb subb LC458 bcs LDC66 ; ; ... else aba bcc LDC66 ; ; ... else ldaa #0xFF LDC66: psha ldaa *L00D9 ; Load Val Limited Air Flow for Lookup ldx #LC474 jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) pulb mul ldab *L0083 ; TPS Ld Axis Var cmpb LC450 bhi LDC83 ; ; ... else ldab *L0068 ; Vss, MPH/(16/5) bne LDC83 ; ; ... else adda LC451 bcc LDC83 ; ; ... else ldaa #0xFF LDC83: cmpa *L00CB ; ?? bhi LDC8A ; ; ... else clra bra LDC8D ; ; LDC8A: ldaa *L00CB inca LDC8D: staa *L00CB bne LDCB0 ; ; ... else ldaa *L00D0 ; Clsd/Lp Int. ldab *L0045 ; Air Fuel mode wd bitb #0x20 ; Test b5, EECC slow O2 rich/lean flag bne LDCA1 ; Br if non zero ; ... else cmpa LC44F beq LDCA7 ; ; ... else inca ; Increase INT value by one bra LDCA7 LDCA1: cmpa LC44E ; ?? beq LDCA7 ; ; ... else deca ; Decrease INT value by one LDCA7: staa *L00D0 ; Clsd/Lp Int. bra LDCB0 ; ; LDCAB: pula clra psha bra LDCBC ; ; LDCB0: pula lsla ldx #LC495 jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) psha staa L045B ; Heads up variable LDCBC: ldab *L0045 ; Fuel/Air mode wd lslb ; b7 to carry (Closed loop flag) bpl LDCCB ; br if b7 was set ( in closed loop) ; ... else ldaa *L00D0 ; Closed Loop INT pulb pshb sba bcc LDCD1 ; ; ... else clra bra LDCD1 ; ; LDCCB: adda *L00D0 ; Closed loop INT bcc LDCD1 ; Br if no overflow ; ... else ldaa #0xFF LDCD1: staa *L00CD ; BLM base PW fuel C.L. fine correction ldx *L0099 ; 0000, Crank RPM < then use this ldd *L00F1 ; DISPFLOW, Mass Air Flow gm/sec jsr LF429 ; Go to 16 * 16 Mult routine ; (Gms/Sec * DRP) lsrd ; VAL/2 ldx *L00D5 ; Total AFR Value jsr LF429 ; Go to 16 * 16 Mult routine ;ннннннннннннннннннннннннн ; INJ FLOW RATE, (23#/HR) ; (STOCH 14.7 = 445d) ;ннннннннннннннннннннннннн ldx LC3D7 ; Double Fire Inj Flow rate, (441) brclr *L003A,#0x80,LDCEA; BR IF NOT b7 (1 = SNGL FIRE) ; ... else ldx LC3D9 ; SINGLE FIRE Inj Flow rate, (882) LDCEA: jsr LF429 ; Go to 16 * 16 Mult routine ; (AFR * INJ FLOW RATE) ; rolb pshx ; SAVE TO STX pula pulb rolb rola std *L00C9 ldx #L00C9 ; Base PW Cls Lp Corr value ldaa *L00C7 ; Blk Lrn Mult, Scaled 1, rng 0н2 jsr LF5B5 ; FACTOR IN 8x16 MULT clra ; ; ; CK IF WE ARE TO LEAN or RICHEN FUEL ; ldab *L00CD ; Base PW Cls Lp Corr value subb #0x80 ; CK IF R or LRAN CORR bmi LDD08 ; BR IF BLM LT 128, (LEAN) ; ... else ; ; RICHEN ; addd *L00C9 ; SUM IN Base PW Cls Lp Corr Value bra LDD15 ; EXIT W/NEW Base PW Cls Lp Corr Value ; ; ; LEAN OUT ; LDD08: negb ; INVERT Base PW Cls Lp Corr Value pshb psha tsx ldd *L00C9 ; SUB Base PW Cls Lp Corr value subd 0x00,x pulx bcc LDD15 ; BR IF NO UNDERFLOW ; ... else clra clrb LDD15: std *L00C9 ; SAVE NEW Base PW Cls Lp Corr Value pulb lsrb bcc LDD20 ; ; ... else ldaa *L003E rora adcb #0x00 ; ROUND LDD20: clra pshb psha tsx ldaa *L0045 ; AF MODE WD #2 lsla lsla ldd *L00C9 bcs LDD30 ; ; ... else subd 0x00,x bra LDD32 ; ; LDD30: addd 0x00,x LDD32: std *L00C9 pulx jsr LFA43 jsr LE46A ;************************************************* ;AIR FUEL MINOR LOOP ;50 Msec ; ; ;************************************************* LDD3B: ldaa *L0000 anda #0x06 ; b1 & b2 beq LDD44 ; BR IF NOT b1 & b2 ; ... else jmp LDDE3 ; ; LDD44: ldd *L0044 ; AF MODE WD bitb #0x02 ; b1, DECELL FUEL CUT OFF ENABLED beq LDDA9 ; BR IF NOT b1 ; ... else_ bita #0x08 ; b3 bne LDDA9 ; ; ... else_ ; ; CK CLSD LP INT FOR STOCH ; ldaa *L00D0 ; Clsd Lp Int cmpa #0x80 beq LDDA9 ; BR IF INT = 128 ; ... else_ ; ; CK BLM UP DATE TIMER ; ldab *L00D1 ; Blk Lrn Up Date TMR, (50Ms Inc) incb ; INCR TMR bne LDD5A ; ; ... else decb LDD5A: stab *L00D1 ; SAVE NEW Blk Lrn Up Date TMR VAL cmpb LC4D2 ; BLM Update Rate, 450 Msec bcs LDDAC ; BR IF TMR L.T. 450 Msec ; ... else suba #0x80 ; CK CLSD LP INT VAL bcs LDD71 ; BR IF INT L.T 128, ; ... else cmpa LC4D6 ; CK If Clsd Lp INT > 5, Enab BLM Update bls LDDAC ; BR IF INT VAL GT 5 ; ... else ldaa *L0045 ; AF MODE WD #2 lsla bmi LDDAC ; ; ... else bra LDD7C ; ; LDD71: nega ; INVERT CLSD LP INT VALUE cmpa LC4D7 ; CK If Clsd Lp INT < 5, Enab BLM Update bls LDDAC ; BR IF INT VAL GT 5 ; ... else ldaa *L0045 lsla bpl LDDAC ; ; ... else LDD7C: ldx #L001B ; POINT TO BLM CELL MATRIX IN RAM ldab *L00C6 ; BLM CELL NUMBER abx ; ADJ CELL POINTER ADDRESS ldaa 0x00,x ; GET SELECTED BLM CELL VALUE ldab *L0045 ; AF MODE WD #2 lslb bpl LDD98 ; ; ... else suba LC4D3 ; SUB OFF 2, BLM Update Amt bcs LDD93 ; BR IF UNDERFLOW ; ... else cmpa LC4D5 ; 108, Min Allowable BLM bcc LDDA5 ; BR IF BLM G.T. MIN BLM VALUE ; ... else LDD93: ldaa LC4D5 ; 108, Min Allowable BLM bra LDDA5 ; ; LDD98: adda LC4D3 ; ADD 2, BLM Mult Update Amt bcs LDDA2 ; BR IF BLM OVERFLOW ; ... else cmpa LC4D4 ; 160, Max Allowable BLM bls LDDA5 ; BR IF BLM G.T. MAX VALUE ; ... else LDDA2: ldaa LC4D4 ; USE 160, Max Allowable BLM LDDA5: staa 0x00,x ; SAVE NEW BLM VAL TO CELL ADDR staa *L00C7 ; SAVE NEW BLM LDDA9: clrb ; CLR BLM UP DATE TIMER stab *L00D1 ; Blk Lrn U/D Cntr, (50Ms Inc) ;********************************** ; ;UPDATE BLM CELLS ; ;********************************** LDDAC: ldab *L00C6 ; Blk Lrn Mumt (cells 0н7) cmpb LC4DC ; SAM Cell A NUMBER, IDLE CELL NUM beq LDDB6 ; BR IF IDLE CELL ; ... else clrb stab *L00C8 ; Base PW LDDB6: ldaa *L0044 ; AF MODE WD anda #0xF7 ; CLR b3, DELAY BLM UPDATE, CELL CHANGE staa *L0044 ; AF MODE WD ldaa *L005A ; RPM/12.5 staa *L005C ; ; ; CK TRANS FLTR Lp TMR FOR LD VAL & TPS ; dec L00EB ; TRANS FLTR Lp TMR bpl LDDE3 ; BR IF TIMED OUT (EXIT) ; ... else ldd LC352 ; Loops between Filtering ; of Ld Vals, (1 sec) staa *L00EB ; Trans Fltr Lp TMR ; ; FILTER TRANSIENT LD VAL ; ldx *L00EC ; TRANSIENT FLT'RD Ld Val ldaa *L0064 ; Filtered ld value jsr LF389 ; FILTER ROUTINE std *L00EC ; NEW TRANSIENT FLT'RD Ld Val ; ; FILTER TRANSIENT TPS VAL ; ldaa *L00F0 ; Trans Fltr'ed TPS for Decel Enlean clrb pshb psha pulx ; GET OLD TPS Ld Axis Var ldab LC4E5 ; TPS Flt Coef (Enlean) ldaa *L0083 ; TPS Ld Axis Var jsr LF389 ; FILTER ROUTINE staa *L00F0 ; Trans Fltr'ed TPS for Decel Enlean LDDE3: jmp LCC00 ; TO MJR LP EXEC ;************************************************* ;MAJOR LOOP SUBROUTINE SEG E ; ;TCC (A/D voltage convert) ; ;************************************************* ; ; Test Batt Voltage ; LDDE6: ldaa #0x10 ; A/D Ch 1, (Battery Voltage) jsr LF2F7 ; To A/D subroutine LDDEB: staa *L007F ; Batt Volts Value, (A/D) cmpa #0x5A ; 9.0 VDC bcc LDDF7 ; BR if > 9 VDC ; ... else cmpa #0x28 ; 4.0 VDC bcs LDE30 ; BR if < 4 VDC to SET ign off flag & EXIT ; ... else bra LDE33 ; Exit ; LDDF7: bclr *L003F,#0x40 ; CLR b6, (Burn off air meter), Major Lp Md Wd ; brclr *L0034,#0x10,LDE06; BR IF NOT b4, (1 = IGN OFF) ; ... else ; ... here when ign is off ldx 0x3FC8 ; SPK Period stx *L00BA ; Old PA2 counter clr L00BC ; SPK Fd Bk counter, (Err #42) LDE06: ldd LC5B1 ; MAF burn off time (calib = 10) std *L00BE ; MAF BO time left clr L0128 ; MAF BO delay timer bclr *L0034,#0x10 ; CLR b4, (1 = IGN OFF), Minor Loop Md Wd 1 jsr LE0E7 ; TCC/OD Control Subroutine brset *L0003,#0x20,LDE33; ; ... else ldaa *L00B7 cmpa LC240 bhi LDE26 ; ; ... else inca beq LDE33 ; ; ... else staa *L00B7 bra LDE33 ; ; LDE26: bset *L0006,#0x02 jsr LF4E0 std *L0017 bra LDE33 LDE30: bset *L0034,#0x10 LDE33: brclr *L00F8,#0x04,LDE9E; ; ... else ldaa *L007F cmpa LC591 bhi LDE71 ; ; ... else clr L01B6 ldaa *L0000 cmpa #0x0E bne LDE9E ; ; ... else ldaa L01B5 cmpa LC593 bhi LDE57 ; ; ... else inca beq LDE9E ; ; ... else staa L01B5 bra LDE9E ; ; LDE57: clr L01B5 ldaa L01B4 adda LC594 bcc LDE64 ; ; ... else ldaa #0xFF LDE64: cmpa LC596 bls LDE6C ; ; ... else ldaa LC596 LDE6C: staa L01B4 bra LDE9E ; ; LDE71: cmpa LC592 bls LDE9E ; ; ... else clr L01B5 ldaa *L0000 cmpa #0x0E bne LDE9E ; ; ... else ldaa L01B6 cmpa LC593 bhi LDE8F ; ; ... else inca beq LDE9E ; ; ... else staa L01B6 bra LDE9E ; ; LDE8F: clr L01B6 ldaa L01B4 suba LC594 bcc LDE9B ; ; ... else clra LDE9B: staa L01B4 LDE9E: ldaa *L0066 cmpa LC595 bls LDEA8 ; ; ... else clr L01B4 LDEA8: brclr *L0034,#0x10,LDEAF; ; ... else clr L01B4 LDEAF: rts ;***************************************************** ; Subroutine ; ; Called by: ; $C9F2 ;***************************************************** LDEB0: ldd 0x3FC2 ; Get Timer #1 subd *L006E ; Subtract previous Timer #1 value beq LDEDF ; BR to Exit if no change ; ... Else inc L0127 ldab *L0035 ; Minor lp wd 1 bitb #0x10 ; b4 = TCC rd spd 1st pulse flag bne LDECD ; Br if no 1st pulse yet ; ... else orab #0x10 ; Set b4, TCC rd spd 1st pulse flag stab *L0035 ; Replace minor lp wd 1 ldx 0x3FC2 ; Get Timer1 inx ; Increment timer1 value stx *L006E ; $006E = timer1 + 1 inx stx *L006C ; $006c = timer1 + 2 LDECD: clr L0069 ; CLR 1-second counter ldx *L006C ; Get timer1 + 2 stx *L006A ; Put it in $006A ldx *L006E ; Get timer1 + 1 stx *L006C ; Put it in $006C ldx 0x3FC2 ; Timer1 stx *L006E ; Put Timer1 in $006E bra LDEF0 ; Done, so exit ; LDEDF: ldab *L0069 ; 1 second counter incb ; increment it cmpb #0x9F ; Compare to 159 bls LDEEE ; BR if <= ; ... else ; ; Here when Timer #1 counter hits 160 (1 second) ; ldab *L0035 ; Minor Lp Md Wd 1 andb #0xEF ; CLR b4, TCC road speed 1st pulse flag stab *L0035 ; Save it ldab #0xA0 ; Load B with 160 again (interrupts per second) LDEEE: stab *L0069 ; Store 1-second counter LDEF0: rts ; Done ; ;************************************************* ;MAJOR LOOP SUBROUTINE SEG B ; ;EGR ; ;************************************************* LDEF1: ldab *L0038 ; MCU INPUT STATUS WD rorb ; b0 -> Cy bcc LDEFC ; BR if NOT b0, in Park or Neut ; ... else ; ; here in Park or Neut ; ldab *L0036 ; MNR LOOP MD WD 2 bitb #0x20 ; b5, DIAG SW IN ALDL MODE beq LDF52 ; IF NOT ALDL Mode, disable EGR & Exit ; ... else LDEFC: ldaa L011A ; Get MAT cmpa LC247 ; Minimum MAT in Calib bcs LDF52 ; If MAT < minimum, then disable EGR & Exit ; ... else ldd LC245 ; Enable EGR if TPS > 1.95%, tst L0119 ; ERG PW bne LDF0D ; BR IF NZ ; ... else tba ; Accum B -> A LDF0D: cmpa *L0083 ; TPS Ld Axis Var bhi LDF52 ; If TPS then disable EGR & Exit ; ... else ldaa *L0044 ; AF MODE WD bita #0x20 ; b5, PWR ENR IS ACTIVE bne LDF52 ; IF NOT b5, then disable EGR & Exit ; ... else ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; Lk up EGR Duty CYC vs LV8 vs RPM ; ; Tbl Val(DC) = CALIB * 256/100) ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн ldx #LC248 ; EGR Duty CYC vs LV8 & RPM ldab *L0064 ; filt ld value cmpb #0xA0 ; 160 Gms/Sec bcs LDF22 ; BR IF LD VAL LT 160 Gms/Sec ; ... else ldab #0xA0 ; USE 160 Gms/Sec MAX FOR LK UP LDF22: ldaa *L0059 ; RPM/25 cmpa #0x50 ; 80d bls LDF2A ; BR to 3D Lk UP if <= 2000 RPM ; ... else ldaa #0x50 ; Default to 2000 RPM Max LDF2A: jsr LF3B5 ; Do 3D Lk Up Routine staa L0119 ; Store base EGR PW ; and look up the multiplier ;ннннннннннннннннннннннннннннннннннннннннннн ; EGR DUTY CYCLE MULTIPLIER (0н2) vs COOLANT ; Gain vs Coolant Temp. ; ; TABLE VAL = Mult * 128 ;нннннннннннннннннннннннннннннннннннннннннннн ldaa *L005D ; COOLANT cmpa #0xA0 ; 80c MAX FOR LK UP bls LDF38 ; BR IF COOL LT 80c ; ... else ldaa #0xA0 ; USE 80c AS MAX VAL FOR LK UP LDF38: ldab #0x40 ; 64d MIN COOL VAL, 8c ldx #LC26F ; EGR DUTY CYCLE MULTIPLIER Tbl jsr LF3F2 ; 2D Lk Up (offset in B subbed from A) ldab L0119 ; ERG PW mul ; x LK UP RESULT lsld ; x2 bcc LDF49 ; BR IF NO OVERFLOW ; ... else ldaa #0xFF ; USE MAX VAL ;ннннннннннннннннннннннннннннннннннннннннннннн ; CK IF IN HEADS UP ; ; ;ннннннннннннннннннннннннннннннннннннннннннннн LDF49: ldab *L0034 ; MINOR LOOP MD WD 1 bpl LDF53 ; BR if NOT b7, HU on line ; ... else jsr 0x580F ; service HEADS UP bra LDF53 ; then EXIT ; LDF52: clra ; DISABLE EGR LDF53: staa L0119 ; Store EGR PW, and ... rts ; EXIT ;***************************************************** ; ; END OF MAJOR LOOP SUBROUTINE SEG B ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; Subroutine to ? ; ; Called from Mjr Loop Sub Seg 5 ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн LDF57: brclr *L0036,#0x02,LDF5F; BR IF NOT b1, (ERR14/15 THIS START UP) ; ... else ldaa #0xFF bra LDF96 LDF5F: ldaa *L0066 ; Vss brset *L0038,#0x40,LDF71; BR IF b6, MCU INPUT STATUS WD ; COOL FAN REQUEST ; ... else cmpa LC309 ; 35 MPH bcc LDF71 ; BR IF Vss G.T 35 MPH ; ... else ldaa LC30C ; 99.6%, Fan Duty Cyc (FAN FULL ON) beq LDF9D ; ; ... else bra LDF96 ; ; LDF71: ldx #LC30F ; POINT TO FAN 2 brclr *L0038,#0x80,LDF7D; BR IF NOT b7, MCU INPUT STATUS WD ; A/C COMP NOT ON ; ... else cmpa LC30A ; 11 MPH bhi LDF80 ; BR IF GT 11 MPH ; ... else LDF7D: ldx #LC30D ; FAN 1 HYST PARAM'S LDF80: brclr *L00FA,#0xFF,LDF85; BE IF NOT 0xFF ; ... else inx ; OFF VAL ; ; Call 2D Lk Up ; LDF85: ldaa *L005D ; CURRENT COOLANT cmpa 0x00,x ; ON or OFF THRESH bcs LDF9D ; BE IF COOL L.T. THRSH ; ... else ldab #0xA0 ; 160d = 80c MIN VAL FOR LK UP ldx #LC311 ; Fan Duty Cycle Tabl Addr jsr LF3F2 ; 2D Lk Up (offset in B subbed from A) tsta ; CK FOR Z beq LDF9D ; ; ... else LDF96: ldab LC30B ; 15 Sec, Min Fan On Time stab *L00FB ; SAVE MIN FAN TIME bra LDFAA ; ; LDF9D: brclr *L00FB,#0xFF,LDFA6; Br IF MIN FAN TIME EXPIRED ; ... else dec L00FB ; DEC MIN FAN TIME bra LDFAC ; EXIT via RTS LDFA6: clra ; CLR MIN FAN TIME bclr *L0035,#0x08 LDFAA: staa *L00FA ; NEW MIN FAN TIME LDFAC: rts ; ;***************************************************** ;нннннннннннннннннннннннннннннн--------- ; Subroutine for A/C ; ; ; Called from Mjr Loop Sub Seg 5 ;--------------------------------------- LDFAD: ldx #LC526 ; INDEX IAC Tables & Params ldaa #0x80 psha ldab *L0035 ; Minor Lp Md Wd 1 ldaa *L00F9 ; IAC Cnt'l word #2 bita #0x04 bne LE00F ; BR if b3 SET ; ... else bita #0x08 beq LE00F ; BR if b4 CLR ; ... else ldaa L0112 ; DISABLE CLSD LP PID TMR beq LDFCB ; ; ... else ldaa *L00F8 ; IAC Cnt'l Word #1 anda #0xFE ; SET b0 jmp LE08B ; ; LDFCB: ldaa 0x3E,x ; %TPS to disable A/C bitb #0x20 ; Test b1 beq LDFD3 ; ; ... else suba #0x10 LDFD3: cmpa *L0085 ;TPS T/F Ld Axies Var bcs LE00F ; ; ... else ldaa #0xF9 bitb #0x20 bne LDFDE ; ; ... else clra LDFDE: adda 0x43,x cmpa *L005D bcs LE00F ; BR if Cool < cutoff temp ; ... else ldaa *L0038 ; MCU INPUT STATUS WD anda #0x80 ; A/C COMP NOT ON bne LDFEC ; BR IF NOT b7 ; ... else ins ; inc SP psha LDFEC: adda *L00F8 ; IAC Cnt'l Word bpl LE000 ldaa 0x41,x ; delay (sec) for clutch engage tst L0038 ; STATUS WD bpl LDFF9 ; BR if b7 CLR ; ... else ldaa 0x42,x ; delay (sec) for clutch dis-engage LDFF9: cmpa L010C ; PID A/C timer bcs LE015 ; BR if < timer ; ... else bra LE012 ; BR taken when >= timer ; LE000: ldaa L010C ; PID A/C timer beq LE015 ; BR if timed out ; ... else deca ; tick! bne LE012 ; BR if timed out ; ... else andb #0xDF ; CLR b5, 0 = A/C Clutch ON tst L0038 ; MCU INPUT STATUS WD bpl LE012 ; BR if NOT b7, A/C Comp ON Rq ; ... else LE00F: clra ; zero PID A/C timer value orab #0x20 ; SET b5, 1 = A/C Clutch OFF LE012: staa L010C ; Store new PID A/C timer value LE015: stab *L0035 ; Minor Lp Md Wd 1 ldaa *L00F8 ; IAC Cnt'l Word pulb pshb tstb bpl LE026 ; BR if NOT b7 ; ... else anda #0xFE ; CLR b0 bmi LE086 ; BR if b7 ; ... else oraa #0x20 ; SET b5, A/C Clutch = OFF bra LE03E ; ; LE026: anda #0xDF ; Clr b5 oraa #0x40 ; SET b6 bita #0x81 ; Test b7 & b0 beq LE08B ; BR if both CLR ; ... else ldab L010D ; Dead Band Counter cmpb 0x3A,x ; min dead band time bcs LE086 ; BR if < min time ; ... else eora #0x01 bpl LE043 ; BR if b7 CLR ; ... else ldab *L002B ; Get IAC Present Position stab L010F ; Move to IAC Last Position LE03E: clr L010D ; Zero Dead band counter bra LE086 LE043: psha ldaa *L002B ; IAC Present Posit suba L010F ; IAC Last Position bcc LE04C ; BR if Present > Last ; ... else clra ; Clear temp IAC Present Posit LE04C: ldab *L00F9 ; IAC cntrl wd 2 bpl LE054 ; BR if b7 CLR ; ... else ldab 0x3B,x ; Steps, P/N gain mul lsld ; x 2 LE054: ldab 0x37,x ; Max A/C learn steps cba bls LE05A ; ; ... else tba LE05A: ldab 0x38,x ; Min A/C learn steps cba bhi LE060 ; ; ... else tba LE060: tab suba *L002C ; Idle Spd A/C Antic bcs LE06E cmpa 0x39,x ; Max A/C learn pwr cycle steps bls LE06E ; ; ... else ldab 0x39,x tba addb *L002C ; Idle Spd A/C Antic LE06E: stab *L002C ; Idle Spd A/C Antic ldab *L00F9 bpl LE07F ; ; ... else ldab 0x35,x ; P/N TF mult to TF steps tsta bpl LE07E nega mul nega bra LE07F LE07E: mul LE07F: adda L010B staa L010B pula LE086: anda #0x7F ; CLEAR b7 tsx oraa 0x00,x LE08B: staa *L00F8 ; IAC Cnt'l Word pula rts ;************************************************* ;MAJOR LOOP SUBROUTINE SEG 2, Vss Calc ; ; ;CALCULATE ROAD SPEED IN MPH ;************************************************* ; LE08F: ldaa *L0034 ; MINOR LP MOD WD 1 bita #0x10 ; b4, (1 = IGN OFF) bne LE0E6 ; BR if ign off ; ... else ldaa #0xA0 ; 160 counts per second cmpa *L0069 ; 1 second counter bhi LE0A1 ; BR if [$0068] < 160) ; ... else clra clrb std *L0066 ; CLR Filtered MPH bra LE0D9 ; ...and skip down ; LE0A1: ldd *L006C ; ??? subd *L006A ; [$006C] - [$006A] pshb ; save remainder lo ? psha ; save remainder hi ? tsx ; X = last value stored on stack ldd *L006E subd *L006C ; [$006E] - [$006C] addd 0x00,x ; add in hi byte of [$006C] - [$006A] pulx ; [$006C] - [$006A] rora ; D/2 high byte rorb ; D/2 lo byte pshb psha pulx ; IX <- D ldd #0x01CC jsr LF34E ; TO F DIV SUBTOUTINE ldx *L0066 ; filtered MPH ldab LC28F ; Vss Filter coef jsr LF389 ; FILTER ROUTINE std *L0066 ; Filtered MPH addd #0x0080 ; + 128 bcc LE0CA ; BR if no overflow ; ... else deca ; subtract 1, then LE0CA: ldab #0xCD ; 205d mul ; D = (MPH + 128) x 205 addd #0x0020 ; + 32d cmpa #0x2F ; cMP result to $2Fxx bls LE0D7 ; BR if <= ; ... else ldd #0x3000 ; Load $3000 max LE0D7: lsld ; x2 lsld ; x2 LE0D9: ldab *L00B0 ; VSS Err timer cmpb LC203 ; 2 sec timer for Err 24 bls LE0E4 ; BR if not timed out ; ... else ldaa LC545 ; Enab C/L PID if MPH <= arg inca ; + 1 LE0E4: staa *L0068 ; MPH/(16/5) LE0E6: rts ; EXIT ;***************************************************** ; ;***************************************************** ; LE0E7: ldx *L0066 ; filtered MPH ldaa *L0059 ; RPM ldab #0x19 ; 25d mul ; RPM x 25 fdiv ; RPM/MPH pshx pula pulb staa *L008E ;N/V Ratio RPM/MPH cmpa LC291 ; ??? (110d) bhi LE119 ; ; ... else bclr *L0047,#0x20 cmpa LC293 ; ??? (30d) bcs LE11C ; ; ... else cmpa LC292 ; ??? (97d) bhi LE11C ; ; ... else ldab *L0091 cmpb LC294 ; ??? (00d) bhi LE114 ; ; ... else incb beq LE11F ; ; ... else stab *L0091 bra LE11F ; ; LE114: bset *L0047,#0x10 ; Manual xmission mode wd, b4 = 1st gear OD bra LE122 ; ; LE119: bset *L0047,#0x20 ; Manual xmission mode wd, b5 = downshift/OFF request LE11C: clr L0091 ; ??? LE11F: bclr *L0047,#0x10 ; Manual xmission mode wd, b4 = 1st gear OD LE122: ldaa LC016 ; AF mode wd 3 bita #0x04 ; b2 = ?? bne LE139 ; ; ... else bset *L0036,#0x01 ; Minor loop md wd 2, b0 = OD on ldaa LC014 ; AF Md Wd 1 bita #0x40 ; b6 = Use TCC for Shift Lamp Control beq LE136 ; br if NOT b6 ; ... else jmp LE1BD ; ; LE136: jmp LE23A ; ; LE139: brclr *L002F,#0x02,LE153; Md wd 1st FMD byte, b1 = 3rd gear ; ... else brclr *L0047,#0x04,LE14E; Manual xmission md wd, b2 = 1st gear lookahead OK ; ... else brclr *L0047,#0x08,LE14E; Manual xmission md wd, b3 = 4th gear ; ... else ldaa *L0047 ; Manual xmission md wd eora #0x01 ; toggle b0 = OD on staa *L0047 ; Manual xmission md wd bclr *L0047,#0x08 ; Manual xmission md wd, b3 = 4th gear LE14E: bset *L0047,#0x04 ; Manual xmission md wd, b2 = 1st gear lookahead OK bra LE15D LE153: brset *L0047,#0x04,LE15A; Manual xmission md wd, b2 = 1st gear lookahead OK ; ... else bset *L0047,#0x08 ; Manual xmission md wd, b3 = 4th gear LE15A: bclr *L0047,#0x04 ; Manual xmission md wd, b2 = 1st gear lookahead OK LE15D: brclr *L0035,#0x80,LE1B7; Minor lp md wd 1, b7 = Engine running ; ... else brclr *L0047,#0x01,LE1B7; Manual xmission md wd, b0 = OD on ; ... else ldaa *L0066 ; Filt MPH (MSB) cmpa LC298 ; ??? (19d) bcc LE1B7 ; ; ... else ldab *L0059 ; RPM cmpb LC299 ; ??? (48d) bls LE17F ; ; ... else ldab *L0083 ; TPS ld axis cmpb LC29A ; ??? (90d) bls LE17F ; ; ... else bset *L0047,#0x40 ; Manual xmission md wd, b6 = upshift/ON request bra LE1B7 ; ; LE17F: cmpa LC296 ; ??? (01d) bls LE1B4 ; ; ... else brset *L0047,#0x40,LE1A3; Manual xmission md wd, b6 = upshift/ON request cmpa LC297 ; ??? (12d) bcs LE1BD ; ; ... else ldab *L005D ; Restart coolant cmpb LC295 ; ??? (120d) bls LE1BD ; ; ... else bset *L0047,#0x40 ; Manual xmission md wd, b6 = upshift/ON request brclr *L0047,#0x20,LE1BD; Manual xmission md wd, b5 = downshift/OFF request ; ... else bset *L0047,#0x02 ; Manual xmission md wd, b1 = 1st gear direct bclr *L0036,#0x01 ; Minor lp md wd 2, b0 = OD on bra LE1BD ; ; LE1A3: adda #0x02 bcc LE1A9 ; ; ... else ldaa #0xFF LE1A9: cmpa LC297 ; ??? (12d) bcs LE1B7 ; ; ... else brset *L0047,#0x10,LE1B7; Manual xmission md wd, b4 = 1st gear OD ; ... else bra LE1BD ; ; LE1B4: bclr *L0047,#0x40 ; Manual xmission md wd, b6 = upshift/ON request LE1B7: bclr *L0047,#0x02 ; Manual xmission md wd, b1 = 1st gear direct bset *L0036,#0x01 ; Minor lp md wd 2, b0 = OD on LE1BD: ldaa *L005D ; Restart coolant cmpa LC2ED ; Coolant temp for shift light enable bls LE233 ; ; ... else ldaa *L0066 ; Filt MPH MSB cmpa LC2EE ; MPH limit for shift light enable bls LE233 ; ; ... else ldaa *L0083 ; TPS ld axis cmpa LC2EF ; ??? (08d) bcs LE233 ; ; ... else ldaa *L0064 ; Filt ld value cmpa LC2F0 ; ??? (40d) bls LE233 ; ; ... else ldaa *L008E ; NV ratio cmpa LC293 ; ??? (30d) bls LE233 ; ; ... else ldaa *L0059 ; RPM ldx #LC2F1 ; Index to RPM thresh for shift lite ON brclr *L0036,#0x80,LE1EC; ; ... else ldx #LC2FA ; Index to RPM thresh for shift lite OFF LE1EC: cmpa 0x00,x ; Lite off RPM/25 (39d = 975 RPM) bls LE233 ; ; ... else cmpa 0x01,x ; Force lite off RPM/25 (186d = 4650 RPM) bls LE201 ; ; ... else ldx #0x0000 ; 2 byte zero stx *L0092 ; ??? shift lite delay counter? bset *L0036,#0x80 ; Minor lp md wd 2, b7 = shift lite ON bset *L0037,#0x10 ; Minor lp md wd 3, b4 = shift lite delay started bra LE239 ; ; LE201: ldab #0x10 ; Offset = 16d lsra ; A/2 inx ; Increment pointer to lite ON or OFF table inx ; TPS vs RPM jsr LF3F2 ; 2D Lk Up (offset in B subbed from A) cmpa *L0083 ; TPS ld axis bcs LE233 ; ; ... else brset *L0037,#0x10,LE227; Minor lp md wd 3, b4 = shift light delay started ; ... else bset *L0037,#0x10 ; Minor lp md wd 3, b4 = shift light delay started ldaa *L0083 ; TPS ld axis bpl LE21A ; ; ... else ldaa #0x80 ; 128d LE21A: lsra ; A/2 ldx #LC304 ; Index to table "shift lite on modifier delay vs TPS jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) ldab LC303 ; Shift lite delay multiplier mul ; multiply delay std *L0092 ; shift lite delay counter LE227: bset *L0036,#0x80 ; Minor lp md wd 2, b7 = shift lite ON ldx *L0092 ; shift lite delay counter beq LE239 ; ; ... else dex ; decrement shift lite delay value stx *L0092 ; and store in delay counter bra LE236 ; ; LE233: bclr *L0037,#0x10 ; minor Lp Md Wd 3?, b4 = Shift Light Delay Started LE236: bclr *L0036,#0x80 ; Minor Lp Md Wd 2, b7 = Shift Light (1 = ON) LE239: rts ; ;***************************************************** ; TCC Lock and Unlock ; ;***************************************************** LE23A: ldx L012D ; Counter to keep TCC locked up for passby bne LE272 ; Br if active ; ... else ldaa *L0083 ; TPS Ld Axis Var cmpa LC29B ; NO PASSBY L/U IF TPS < 99.6% bcs LE26A ; ; ... else ldaa *L0066 ; Filt MPH, vehicle speed (MSB) cmpa LC29C ; NO PASS BY L/U IF =< 28 MPH bls LE26A ; ; ... else cmpa LC29D ; NO PASS BY L/U IF > 1250 RPM bhi LE26A ; ; ... else ldaa *L0059 ; RPM cmpa LC29E ; NO Passby L/U IF RPM < 6375 bcs LE26A ; Br if RPM less ; ... else ldx L012B ; Counter for Delay prior to passby/lockup cpx LC29F ; 819 SEC DLY PRIOR TO PASSBY/LOCKUP bhi LE264 ; Br if counter > delay in calib ; ... else inx ; Increment delay counter and bra LE26D ; Store it ; LE264: ldx LC2A1 ; KEEP TCC LK'ED UP FOR PASSBY 30 SEC stx L012D ; Counter to keep TCC locked up for passby LE26A: ldx #0x0000 ; LE26D: stx L012B ; Counter for Delay prior to passby/lockup bra LE27E ; ; LE272: dex ; Decrement count stx L012D ; Counter to keep TCC locked up for passby beq LE27E ; ; ... else bset *L0048,#0x11 jmp LE374 ; ; LE27E: bclr *L0048,#0x10 ; ??? ldaa *L005D ; Restart Coolant cmpa LC2A7 ; TCC Minimum Coolant Temp for Lockup (00d) bcc LE28B ; ; ... else LE288: jmp LE359 ; ; LE28B: ldaa LC016 ; AF Md Wd 3 bita #0x08 ; b3 = ??? beq LE296 ; ; ... else brset *L0044,#0x02,LE288; ; ... else LE296: ldx #LC2A8 ; Index misc TCC parameters ldab 0x00,x ; TCC Coast Release, MPH (00d) brset *L0048,#0x02,LE2A3; ??? ; ... else addb #0x05 ; bcs LE2A7 ; ; ... else LE2A3: cmpb *L0066 ; Filt MPH, vehicle speed (MSB) bls LE2AE ; Br if less ; ... else LE2A7: bclr *L0048,#0x02 ; ??? ldab 0x01,x ; TCC Low MPH Coast Load Limit bra LE2B3 ; ; LE2AE: bset *L0048,#0x02 ; ??? ldab 0x02,x ; TCC Lock Delay After 4-3 Downshift LE2B3: brclr *L0048,#0x01,LE2BC; ??? ; ... else subb 0x03,x ; TCC Lock Delay Before Lock in Low Gear bcc LE2BC ; ; ... else clrb LE2BC: pshb ldx #LC2E8 ; Index ??? table (5 bytes, all $FF) ldaa *L0064 ; Filtered Load Value lsra ; /2 lsra ; /4 jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) ldab *L0083 ; TPS ld axis var mul ; Multiply TPS by table value adca #0x00 ; Adjust carry bit staa *L0095 ; ??? pulb cba bcs LE288 ; ; ... else ldx #LC2CC ; Index High Gear TCC Lock/Unlock Transition parameters brclr *L0038,#0x04,LE2DC; ; ... else ldx #LC2B0 ; Index Low Gear TCC Lock/Unlock Transition parameters LE2DC: ldab #0x0F ; B = 15 brclr *L0048,#0x01,LE2E6; ??? Br if b0 of L0048 was clr ; ... else inx inx ; Index + 2 ldab #0x01 ; B = 1 if b0 of L0048 was set LE2E6: ldaa *L0066 ; Filt MPH, vehicle speed (MSB) brset *L002F,#0x02,LE2F2; Md wd 1st FMD byte, b1 = 3rd gear, Br if set ; ... else suba LC2AF ; ??? bcc LE2F2 ; Br if speed is greater ; ... else clra ; A = 0 LE2F2: cmpa 0x00,x ;MPH Low Speed Limit For Low Gear Unlock to Lock Transition bcs LE359 ; ; ... else inx ; X + 1 cmpa 0x00,x ;MPH High Speed Limit For Low Gear Lock to Unlock Transition bcc LE359 ; ; ... else abx ; B was either 1 or 15 depending on b0 of L0048 ; X points to either TCC Unlock or Lock vs TPS table brclr *L0048,#0x01,LE313; ??? ; ... else ldab LC014 ; AF Md Wd 1 bitb #0x01 ; b0 = Manual Xmission beq LE313 ; Br if auto xmission (skip over RPM, use MPH instead) ; ... else ldab #0x10 ; Offset in B, 16d ldaa *L0059 ; RPM cmpa #0xC0 ; 192d bcs LE31E ; Br if RPM < 192d to 2D lookup w/ offset ; ... else ldaa #0xC0 ; Load default of 192d and bra LE31E ; Br to 2D lookup w/ offset ; LE313: ldab #0x18 ; Offset in B, 24d ldaa *L0066 ; Filt MPH, vehicle speed (MSB) cmpa #0x64 ; 100d bcs LE31D ; Br if speed < 100 ; ... else ldaa #0x64 ; 100d LE31D: lsla ; x 2 LE31E: jsr LF3F2 ; 2D Lk Up (offset in B subbed from A) beq LE359 ; ; ... else tab ldaa *L0095 ; ??? cba bhi LE359 ; ; ... else brclr *L0048,#0x04,LE337; ??? ; ... else dec L0096 ; ??? bne LE34D ; ; ... else bclr *L0048,#0x04 ; ; ... else bra LE34D ; ; LE337: brclr *L0038,#0x04,LE34D; MPU Status wd, b2 = OD request ; ... else brset *L0048,#0x08,LE34D; ??? ; ... else bset *L0048,#0x04 ; ??? ldaa LC2AC ;TCC Delay Before Lock in High Gear staa *L0096 ; ??? cmpa *L0094 ; ??? bls LE34D ; ; ... else staa *L0094 ; ??? LE34D: ldaa *L0094 ; ??? beq LE354 ; ; ... else deca bra LE35C ; ; LE354: bset *L0048,#0x01 ; ??? bra LE368 ; ; LE359: ldaa LC2AD ; TCC Delay Bypass Speed LE35C: staa *L0094 ; ??? ldaa *L0066 ; Filt MPH, vehicle speed MSB cmpa LC2AE ; TCC Unlock Prevention Threshold bcc LE354 ; Br if speed < threshold ; ... else bclr *L0048,#0x01 ; ??? LE368: brclr *L0038,#0x04,LE371; MPU Status wd, b2 = OD request ; ... else bset *L0048,#0x08 ; ??? bra LE374 ; ; LE371: bclr *L0048,#0x08 ; ??? LE374: rts ; ; ;***************************************************** ;MAJOR LOOP SUNBROUTINE SEG 9 ; ;Inj Air Managment ; ;***************************************************** LE375: ldx #LC318 ; POINT TO AIR INJ PARAM'S ldab *L0045 ; AF MODE WD #2 andb #0x80 ; b7, MASK FOR b7, 1 = CLS LOOP orab *L003E stab *L003E ldaa *L005D ; COOLANT cmpa 0x0C,x ; LC324, If Cool < 14c, divert bcs LE38C ; ; ... else ldaa *L003C bita #0x04 ; b2 beq LE38F ; BR IF NOT b2 ; ... else LE38C: jmp LE45E ; ; LE38F: ldaa *L0045 ; AF MODE WD #2 bpl LE39D ; ; ... else clr L0102 ; 1 sec Timer - since last neg delta LV8 Enable air to conv If > 1 SEC ldaa 0x0D,x ; LC325, If in Open Lp => 25.4 Sec after ; closed loop, Divert staa L0103 ; 25.4 sec Timer - Open Lp after closed loop for AIR Divert bra LE3C7 ; ; LE39D: tstb bpl LE3A9 ; ; ... else ldaa L0103 ; 25.4 sec Timer - Open Lp after closed loop for AIR Divert beq LE38C ; Br if time done ; ... else deca ; Decrement timer staa L0103 ; 25.4 sec Timer - Open Lp after closed loop for AIR Divert LE3A9: brclr *L0035,#0x80,LE3C7; BR IF NOT b7, ENG RUNNING FLAG ; ... else ldab L0102 ; 1 sec Timer - since last neg delta LV8 Enable air to conv If > 1 SEC ldaa L0101 suba *L0064 ; FILTERED LD VALUE bls LE3BD ; ; ... else cmpa 0x0B,x ; LC323, Enable air to conv if in open lp ; & 100 Msec Drop in D VAL L.T. 64 gms/S bls LE3BD ldab 0x07,x ; LC31F, Enable air to conv If > 1 SEC ; since last neg delta LV8 > is < LE3BD: tstb beq LE3C7 ; ; ... else decb ; Decrement time stab L0102 ; 1 sec Timer - since last neg delta LV8 Enable air to conv If > 1 SEC jmp LE451 LE3C7: ldab *L0058 ; RPM/25 cmpb 0x06,x ; LC31E Divert if cont > 4000 RPM & time > bls LE3D8 ; ; ... else ldab *L00FC ; ??? cmpb 0x01,x ; LC319 Divert if If RPM Cont > ____ > 10 SEC bhi LE413 ; ; ... else incb bne LE3D9 ; ; ... else bra LE3DB ; ; LE3D8: clrb LE3D9: stab *L00FC ; ??? LE3DB: ldaa *L0044 ; AF MODE WD bita #0x20 ; b5, PWR ENR IS ACTIVE beq LE3EE ; BR IF NOT b5 ; ... else ldab L0104 ; 50 msec old filtered RPM cmpb 0x00,x ; LC318 If In WOT >= then divert Air, (Sec) beq LE413 ; ; ... else incb stab L0104 ; 50 msec old filtered RPM bra LE44B ; ; LE3EE: clr L0104 brset *L0037,#0x80,LE413; ; ... else ldx *L00FD ldab *L0074 cmpb LC31A ; If Filtered o2 > 752 MVDC for ___ ; Then divert bls LE406 ; ; ... else cpx LC31C ; 20 sec Rich or Lean o2 Divert timer bcc LE40F ; ; ... else inx bra LE40B ; ; LE406: ldx *L00FD beq LE415 ; ; ... else dex LE40B: stx *L00FD bra LE419 ; ; LE40F: oraa #0x01 ; SET b0, AIR INJ DIVERT staa *L0044 ; AF MODE WD LE413: bra LE45E LE415: anda #0xFE ; CLR b0, AIR INJ DIVERT staa *L0044 ; AF MODE WD LE419: rora bcs LE45E ; ; ... else cmpb LC31B ; If Filtered o2 > 247 MVDC & IN CLS LP ; Then divert bcc LE425 ; ; ... else ldaa *L0045 ; AF MODE WD #2 bmi LE42A ; ; ... else LE425: ldx #0x0000 bra LE432 ; ; LE42A: ldx *L00FF ; RICH OR LEAN o2 DIV TIMER cpx LC31C ; 200, 20 sec Rich or Lean o2 Div timer bhi LE45E ; BR IF TIME LT 20 Sec ; ... else inx ; INCR TMR LE432: stx *L00FF ; RICH OR LEAN o2 DIV TIMER ldaa *L0064 ; Filtered ld value cmpa LC320 ; If LV8 < 25 then Divert bcs LE45E ; ; ... else cmpa LC321 ; If LV8 > 100 & MPH > Divert Air bls LE447 ; ; ... else ldaa *L0066 ; CURRENT Vss cmpa LC322 ; If > 60 MPH & LV8 > then divert AIR bhi LE45E ; ; ... else LE447: ldab *L003E bmi LE451 ; ; ... else LE44B: ldab *L003F orab #0x06 ; b1 & b2 bra LE462 ; ; LE451: ldab *L003F ; ; ; CK AFR MD WD FOR NUM OF AIR VALVES ; ldaa LC015 ; 0x04, AFR Mode Wd 2 beq LE45E ; BR If zero, 1 AIR VALVE ; ... else andb #0xFB ; CLR b2, orab #0x02 ; SET b1, 1 = 2 AIR VALVES IN USE bra LE462 LE45E: ldab *L003F ; Major Lp mode wd andb #0xF9 ; CLR b1 (AIR = diverted) & b2 (AIR = not switched to port) LE462: stab *L003F ; Major Lp mode wd ldaa *L0064 ; FILT LD VALUE staa L0101 rts ; ;***************************************************** ; ;***************************************************** LE46A: brclr *L0035,#0x80,LE482; BR IF NOT b7 ; ... else brclr *L0039,#0x80,LE482; BR IF NOT b7 ; ... else ldab *L00E6 ; Num of Async Pulses since Accel Enr cmpb *L00DE ; Num of Async Pulses to do bcs LE485 ; BR IF TO DO G.T. DONE VAL (AS FUEL) ; ... else brset *L0039,#0x40,LE482; BR IF b6, ; ... else clr L00E6 ; Num of Async Pulses since Accel Enr bclr *L0039,#0x80 ; CLR b7 LE482: jmp LE4E1 ; ; ;************************************************* ;Accel Enrichment Factor % BPW INJ (0н4) ;(ASYNC FUEL CODE FOR DISFF TPS & STALL SVR) ; ; ;INDEXED LK UP, 8 LINES ; ;TBL = FACTOR * 64 ;************************************************* LE485: inc L00E6 ; Num of Async Pulses since Accel Enr cmpb #0x07 ; MAX OF 8 PULSES bls LE48E ; BR IF COUNT GT 7 ; ... else ldab #0x07 ; USE MAX FOR LK UP LE48E: ldx #LC32E ; TBL ADDRESS abx ; ADJ TBL POINTER ldaa 0x00,x ; GET VAL FM TBL psha ; SAVE TO STX ldd *L00C9 brclr *L003A,#0x80,LE49C; BR IF NOT b7, (IN SINGLE FIRE) ; ... else lsrd LE49C: pshb psha tsx ldaa 0x02,x jsr LF39F ; MUL 8 X 16 SUROUTINE pulx ins lsld bcs LE4AC ; BR IF OVER FLOW ; ... else lsld bcc LE4AF ; BR IF NO OVER FLOW ; ... else LE4AC: ldd #0xFFFF ; USE MAX VAL LE4AF: std *L00E2 ; New Accel Enrich PW ldaa *L00DF ; Cool Fact for Async Pulses ldx #L00E2 jsr LF5B5 ; FACTOR IN 8x16 MULT ldx LC32B ; 0364d, 5.5 msec Max Async Pulse Width cpx *L00E2 ; New Accel Enrich PW bhi LE4C2 ; BR IF GT 5.5 Msec THRESH ; ... else stx *L00E2 ; New Accel Enrich PW LE4C2: brclr *L0039,#0x40,LE4D5; BR IF NOT b6 ; ... else jsr LFB27 pshx tsx subd 0x00,x pulx bls LE4E1 ; ; ... else cpd *L00E2 ; New Accel Enrich PW bcs LE4D7 ; ; ... else LE4D5: ldd *L00E2 ; New Accel Enrich PW LE4D7: cpd LC329 ; 1.69 msec Min Async Pulse Width bcs LE4E1 ; ; ... else std *L00E2 ; New Accel Enrich PW bra LE4E5 ; ; LE4E1: clrb clra std *L00E2 ; New Accel Enrich PW LE4E5: brclr *L003E,#0x10,LE4FE; BR IF NOT b4 ; ... else brclr *L008B,#0xFF,LE4FE; BR IF NOT 0xFF ; ... else dec L008B ; Accel Enrich After Decel C/O ldd LC4F7 ; Cut off Stall Save PW addd *L00E2 ; New Accel Enrich PW std *L00E2 ; New Accel Enrich PW addd *L00E0 ; Accel Enrich, Acum Fuel bcc LE4FE ; ; ... else ldd #0xFFFF ; Load max value LE4FE: std *L00E0 ; Accel Enrich, Acum Fuel ldx *L00E2 ; New Accel Enrich PW beq LE51B ldab *L00D2 ; Inj Offset Corr, Ms*65.636 abx abx stx 0x3FF2 ; Async PW Cnt'r jsr LF4EE ; 11 Usec Delay ldaa #0x04 jsr LF606 ldaa #0xFB jsr LF4EE ; 11 Usec Delay jsr LF611 LE51B: brclr *L0034,#0x80,LE522; BR IF NOT b7, (HEADS UP ON LINE) ; ... else jsr 0x5818 ; <нннн TO HEADS UP LE522: ldd L0123 ; ACCEL ENR PW addd *L00E2 ; New Accel Enrich PW std L0123 rts ; ;***************************************************** ;DIAGNOSTIC QUALIFICATION CODE ; ; ; ;***************************************************** ; ; ERR 13 o2 SENSOR ; ; ; LE52B: ldab *L0040 ; Diagnostic mode word 1 bitb #0x24 ; Test bits 2 & 5 bne LE574 ; Br if non-zero ; ... else brset *L0042,#0x40,LE540; Diagnostic mode word 3, b6 = ?? ldd *L0019 ; Engine Run Time, sec lsrd ; /2 cmpb LC1E8 ; Disable Err 13 if run time/2 < this bcs LE574 ; Br if run time less ; ... else bset *L0042,#0x40 ; Diagnosti mode word 3, b6 = ?? ; ; CK ERR 13 o2 LIMITS ; LE540: ldab *L0070 ; o2 A/D VALUE cmpb LC1EA ; ERR 13, 548 Mvdc bhi LE574 ; BR IF o2 VDC LT 548 Mvdc ; ... else cmpb LC1E9 ; ERR 13, 350 Mvdc bls LE574 ; BR IF o2 VDC GT 350 Mvdc ; ... else ldab *L00AF ; o2 Sensor Hvy Ld Cnt'r н> (2 Sec) cmpb LC1EC ; 15 Sec TPS Min time limit for ERR 13 bhi LE579 ; ERR 13, 15 Sec TPS Min time limit ; ... else brclr *L0040,#0x10,LE57F; ; ... else ldab *L005D ; COOLANT cmpb LC1E7 ; ERR 13, COOL LOW LMT 70c bls LE57F ; BR IF COOL GT 70c ; ... else ldaa *L0083 ; TPS Ld Axis Var cmpa LC1EB ; ERR 13, 5% TPS Min bhi LE56F ; BR IF TPS LT 5% ; ... else tst L00AF ; o2 Sensor Hvy Ld Cnt'r, (2 Sec) beq LE57F ; ; ... else dec L00AF ; o2 Sensor Hvy Ld Cnt'r, (2 Sec) bra LE57F ; ; LE56F: inc L00AF ; o2 Sensor Hvy Ld Cnt'r, (2 Sec) bra LE57F ; ; LE574: clr L00AF ; o2 Sensor Hvy Ld Cnt'r, (2 Sec) bra LE57F ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR 21 HIGH TPS SENSOR ERROR ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; LE579: bset *L004E,#0x40 ; SET b6, NEW ERR 1 bset *L0042,#0x10 ; SET b4, ERR 13 DETECTED LE57F: ldab *L0040 bitb #0xC0 ; b6 & b7 bne LE5AB ; BR IF b6 & b7 ; ... else ldaa *L0082 ; TPS, (A/D) cmpa LC1F3 ; If TPS <= disable ERR 21 bls LE59F ; BR IF TPS GT 50% ; ... else ldaa *L00AC ; TPS Err cnt'r,(100Ms) cmpa LC1F4 ; 20 Sec's Time req for ERR 21 bhi LE5A6 ; BR IF TIME LT 20 SEC ; ... else ldaa *L00BD cmpa LC1F5 ; If Air Flow >= 12 gm?sec, ; disable ERR 21 bcc LE5A1 ; ; ... else inc L00AC ; TPS Err cnt'r,(100Ms) bra LE5AB ; ; LE59F: andb #0xFB ; 1111 1011 LE5A1: clr L00AC ; TPS Err cnt'r,(100Ms) bra LE5AB ; ; LE5A6: bset *L004E,#0x04 ; NEW ERR 1 orab #0x04 ; SET b2 LE5AB: stab *L0040 ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR 24 VSS SENSOR ERROR ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн bitb #0xE4 ; 1110 0100 bne LE5DD ; ; ... else ldaa *L0066 cmpa LC1FE ; If > 3 MPH then disable ERR 24 bhi LE5DD ; ; ... else ldaa *L00B0 ; VSS Err TIMER cmpa LC203 ; 2 Sec's for ERR 24 bhi LE5EB ; BR IF TIME LT 2 Sec ; ... else ldaa *L0064 ; Filtered LD VALUE cmpa LC202 ; If LV8 >= 26 LV8, Disable ERR 24 bcc LE5DD ; BR IF LD VAL GT 26 ; ... else ldaa *L0083 ; TPS Ld Axis Var cmpa LC201 ; If => 2% TPS then Disable ERR 24 bcc LE5DD ; BR IF TPS GT 2% ; ... else brset *L0038,#0x01,LE5DD; ; ... else ldaa *L0058 ; RPM/25 cmpa LC1FF ; If <= 1000 RPM, Disable ERR 24 bls LE5DD ; BR IF RPM GT 1000 RPM ; ... else cmpa LC200 ; If RPM > 6000 then disable ERR 24 bls LE5E2 ; BR IF RPM GT ; ... else LE5DD: clr L00B0 ; VSS Err cnt'r bra LE5F1 ; ; LE5E2: bitb #0x08 ; b3 beq LE5F1 ; BR IF NOT b3 ; ... else inc L00B0 ; VSS Err cnt'r bra LE5F1 ; ; LE5EB: bset *L004F,#0x80 ; ?? mode word, SET b7 bset *L0045,#0x10 ; Air/Fuel Mode Word, b4 = VSS failure LE5F1: brset *L002F,#0x20,LE5FB; 1st FMD byte, b5 = EGR diagnostic ; ... else brset *L0042,#0x20,LE611; Diagnostic mode word 3, b5 = Err 54A ; ... else bra LE63D ; ; LE5FB: bclr *L0042,#0x20 ; Diagnostic mode word 3, b5 = Err 54A brset *L0042,#0x08,LE63D; Diagnostic mode word 3, b3 = Batt hi V ; ... else ldx #LC207 ; Index Err 32 params ldaa *L0040 ; DIAGNOSTIC MODE WD 3 bita #0xE4 ; 1110 0100 bne LE63D ; ; ... else ldd *L00B3 ; EGR Diag Cnt'tr subd 0x05,x ; Log Err 32 if counter > this (2700) bls LE616 ; ; ... else LE611: bset *L004F,#0x08 bra LE64A ; ; LE616: ldaa *L0064 ; Filtered ld value cmpa 0x00,x ; Skip Err 32 if LV8 > this value (128) bcc LE633 ; ; ... else ldaa *L005D ; COOLANT cmpa 0x01,x ; Disable Err 32 if coolant < this value ($B0) bcs LE63D ; ; ... else ldaa L0119 ; EGR D.C. cmpa 0x02,x ; Skip Err 32 if EGR D.C. < this value ($C0) bls LE633 ; ; ... else ldaa *L0083 ; TPS Ld Axis Var cmpa 0x03,x ; Skip Err 32 if TPS > this value ($4D) bhi LE633 ; ; ... else cmpa 0x04,x ; Skip Err 32 if TPS < this value ($1A) bhi LE642 ; ; ... else LE633: ldx *L00B3 ; EGR Diag Cnt'tr beq LE648 ; Br if zero ; ... else dex ; decrement counter beq LE648 ; Br if zero ; ... else dex ; decrement counter bra LE648 ; Br ; LE63D: ldx #0x0000 ; Zero EGR Diag Counter bra LE648 ; ; LE642: ldx *L00B3 ; EGR Diag Cnt'tr ldab LC20E ; Inc Err 32 counter this amount every 100 ms abx ; add the amount in LE648: stx *L00B3 ; save EGR Diag Cnt'tr ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR 33 MASS FLOW HIGH ERROR ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн LE64A: ldab *L0040 ; Diagnostic mode word 1 bitb #0x24 ; Test b2 and b5 (0010 0100) bne LE681 ; Br if non zero ; ... else ldaa *L0080 ; Pump Volts, (A/D) cmpa LC214 ; 10.0 VDC MIN PUMP V FOR ERR 33 ENABLE bls LE681 ; BR IF PUMP V GT 10 VDC ; ... else brset *L0041,#0x20,LE68F; BR IF b5, ERR 54A ; ... else ldaa *L00BD ; AIR FLOW cmpa LC210 ; 45 gms/sec AIR MIN FOR ERR 33 ENABLE bls LE681 ; BR IF AIR FLOW GT 45 gms/sec ; ... else ldaa *L00B8 ; MAF Hi Cnt'r, (100Ms) cmpa LC212 ; 800 Msec MIN TIME QUAL FOR ERR 33 bhi LE689 ; BR IF TIME LT 800 Msec ; ... else ldaa *L0083 ; TPS Ld Axis Var suba LC20F ; 15% TPS MIN FOR ENABLE ERR 34 bcc LE681 ; BR IF TPS GT 15% ; ... else ldaa *L0058 ; RPM/25 cmpa LC213 ; 3200 RPM bhi LE681 ; BR IF RPM LT 3200 RPM ; ... else inc L00B8 ; inc MAF Hi Cnt'r, (100Ms) bne LE68F ; Rollover? ; ... else dec L00B8 ; dec MAF Hi Cnt'r, (100Ms) bra LE68F ; ; LE681: clr L00B8 ; CLR MAF Hi Cnt'r, (100Ms) bclr *L0040,#0x80 bra LE68F ; ; LE689: bset *L004F,#0x04 ; SET ERR 33 bset *L0040,#0x80 ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; ERR 34B MAF SENSOR ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн LE68F: ldx *L00F5 ; Diff Val to calc Air Flow cpx LC215 ; IF Analog CTS * 7 or PP2DLT < 55 bhi LE6CC ; BR IF .... ,(EXIT & CLR TMR) ; ... else ldaa *L00B5 ; ERR 34 TMR cmpa LC217 ; ERR #34, 200 MSEC Min time req. bcc LE6C4 ; BR IF TMR GT 200 MSEC ; ... else brclr *L0040,#0xA4,LE6A3; ; ... else bra LE6D2 ; ; ; ; ERR 34 CRITERIA ; LE6A3: ldab *L0058 ; RPM/25 cmpb LC218 ; If RPM > 600, Ck ERR #34 bcs LE6D2 ; BR IF RPM LT 600 RPM, (EXIT) ; ... else ldab *L0083 ; TPS Ld Axis Var cmpb LC219 ; If TPS > 6.25%, Ck ERR #34 bcs LE6D2 ; BR IF TPS LT 6.25%, (EXIT) ; ... else ldab *L0064 ; Filtered ld value cmpb LC21A ; If LV8 >= 0, Ck ERR #34 bcs LE6D2 ; BR IF LV8 LT 0 gms/sec, (EXIT) ; ... else cmpb LC21B ; If LV8 <= 130, Ck ERR #34 bhi LE6D2 ; BR IF LV8 LT 130 gms/sec, (EXIT) ; ... else inca ; INCR ERR 34 TIMER beq LE6D2 staa *L00B5 ; ERR 34 TMR bra LE6D2 LE6C4: bset *L004F,#0x02 ; SET bset *L0040,#0x40 ; SET ERR 34 bra LE6D2 ; ; LE6CC: clr L00B5 ; Clear ERR 34 TMR bclr *L0040,#0x40 ;************************************************* ;ERR 41 CYL SELECT ; ;************************************************* LE6D2: ldaa *L0041 ; DIAGNOSTIC MODE WD 2 lsra bcc LE6DA ; BR IF ; ... else bset *L0050,#0x40 ; b6, ERR 41 LE6DA: lsla staa *L0041 ; CLR ERR LAST 100 Msec FLAG brset *L0037,#0x01,LE709; Minor lp md wd 3, b0 = OD on ; ... else brset *L0000,#0x10,LE709; Minor/Major Loop Counter, this bit set every 8 minor/major loops ; ... else brclr *L0035,#0x40,LE709; Minor lp md wd 1, b6 = Bypass check enable ; ... else ldab *L00B6 ; ??? ldaa *L0058 ; RPM/25 cmpa LC231 ; RPM, tbl1,ntrpm bls LE703 ; BR IF RPM GT THRESH ; ... else ldaa *L00BC ; SPK Fd Bk counter, (Err #42) bne LE703 ; BR IF NZ ; ... else cmpb LC234 ; ??? in ERR 43 params bcc LE6FE ; ; ... else incb bra LE704 ; ; LE6FE: bset *L0001,#0x80 ; Nonvol mem md wd, b7 = EST monitor fail (ERR 42) bra LE706 ; ; LE703: clrb LE704: stab *L00B6 ; ??? LE706: clr L00BC ; ??? LE709: brset *L003C,#0x20,LE711; Old CCP status byte, b5 = Knock Fail (ERR 43A) ; ... else ldaa *L0002 ; MD WD 2 bpl LE714 ;BR if NOT b7, ERR 43 test fail this start ; ... else LE711: bset *L0050,#0x10 ; SET b4, ERR43 LE714: ldab *L0042 ; DIAGNOSTIC MODE WD 3 andb #0xFD ; CLR b1, ERR 44/45 FLG ;************************************************* ;ERR 44 LEAN o2 SENSOR ; ; ;************************************************* ldaa *L0040 bita #0xC0 bne LE77C ; ; ... else ldaa LC23A cmpa *L0074 ; o2 VDC bls LE73D ; ; ... else ldaa *L00AD ; o2 Lan Cnt'r (2 Sec) cmpa LC23B ; 20 Seconds to set #44 (50d) bhi LE742 ; ; ... else ldaa *L0045 ; AF MODE WD #2 bpl LE73D ; Br if not b7, (if not in closed loop) ; ... else bitb #0x04 ; b2 = Not Used ???? bne LE73D ; ; ... else brclr *L0040,#0x08,LE747; Diagnostic md wd 1, b3 = set if upper nibble of minor lp cntr = 0 ; ... else inc L00AD ;o2 Lan Cnt'r (2 Sec) bra LE747 ; ; LE73D: clr L00AD ; o2 Lean Cnt'r (2 Sec) bra LE747 ; ; LE742: bset *L0050,#0x08 ; b3, NEW ERR 2 orab #0x02 ;************************************************* ;ERR 45 RICH o2 SENSOR ; ; ; ; ;************************************************* LE747: ldaa *L0074 ; o2 VDC cmpa LC23C ; If o2 Sensor >= 0.699v, disable ERR #45 (158d) bls LE772 ; ; ... else ldaa *L00AE ; o2 Sensor Rich tmr, cmpa LC23D ; 50 Seconds to set ERR (50d) bhi LE777 ; ; ... else ldaa *L0045 ; AF MODE WD #2 bpl LE772 ; ; ... else bitb #0x04 bne LE772 ; ; ... else ldaa *L0083 ; TPS Ld Axis Var cmpa LC23E ; If TPS > 1.95%, enab ERR #45 (05d) bhi LE769 ; ; ... else cmpa LC23F ; If TPS < 0%, enab ERR #45 (00d) bcc LE772 ; ; ... else LE769: brclr *L0040,#0x08,LE77C; ; ... else inc L00AE ; o2 Sensor Rich tmr, bra LE77C ; ; LE772: clr L00AE ; o2 Sensor Rich tmr, bra LE77C ; ; LE777: bset *L0050,#0x04 ; b2, NEW ERR 2 orab #0x02 ; SET b1 ERR 44/55 HAS BEEN CAUGHT LE77C: andb #0xFB ; CLR b2 INT FORCED 128. ERR 44/45 stab *L0042 ; DIAGNOSTIC MODE WD 3 rts ;***************************************************** ;MAJOR LOOP SUBROUTINE, SEG C ; ;Can Purge ; ;***************************************************** LE781: ldaa *L003C ; OLD CCP STATUS BYTE lsrd ; /2 ldaa *L003F ; Major loop mode word rora ; b0 into carry (100 ms old ccp purge on flag) lsld ; restore bit positions, b0 = 0 staa *L003F ; Major loop mode word brset *L0036,#0x20,LE7D9; Minor loop mode word 2, b5 = Diagnostic mode ; ... else brset *L0044,#0x02,LE7D9; Fuel mode word, b1 = not in decel cutoff ; ... else brset *L0034,#0x10,LE7D3; Minor loop mode word, b4 = ignition off ; ... else ldaa *L005D ; Restart coolant temp cmpa LC280 ; ?? bls LE7D9 ; ; ... else ldx #LC281 ; Index to ?? table brclr *L003C,#0x01,LE7A7; Old CCP status byte, b0 = CCP enabled ; ... else ldx #LC283 ; Index to ?? LE7A7: ldab *L0068 ; VSS, MPH/(16/5) ldaa L011B ; CCP D.C. cmpb 0x00,x bls LE7D3 ; ; ... else ldab *L0083 cmpb 0x01,x bcc LE7DC ; ; ... else ldab LC014 ; Air fuel option word 1 bitb #0x08 ; b3 = ?? bne LE7D3 ; ; ... else brset *L0045,#0x10,LE7D3; ; ... else ldab *L0068 ; VSS, MPH/(16/5) cmpb LC27D ; ??? (38d) bls LE7D3 ; ; ... else ldab *L00C7 ; BLM base pulse fuel C.L. coarse correction cmpb LC27F ; ??? (110d) bls LE7D3 ; ; ... else brset *L003D,#0x02,LE7D9; ; ... else LE7D3: bclr *L003D,#0x02 clr L011C ; ??? LE7D9: jmp LE86D ; ; LE7DC: brclr *L003D,#0x02,LE7E6; ; ... else ldaa L011C ; ??? staa L011B ; ??? LE7E6: ldab *L0064 cmpb LC276 ; ??? (130d) bhi LE815 ; ; ... else ldab L011D ; ??? cmpb LC277 ; ??? (01d) bcc LE7FA ; ; ... else inc L011D ; ??? bra LE864 ; ; LE7FA: ldab *L00D0 cmpb LC278 ; ??? (115d) bcc LE80E ; ; ... else cmpb LC279 ; ??? (84d) bcc LE815 ; ; ... else suba LC27B ; ??? (01d) bcc LE815 ; ; ... else clra bra LE815 ; ; LE80E: adda LC27A ; ??? (07d) bcc LE815 ; ; ... else ldaa #0xFF LE815: clrb stab L011D brset *L0045,#0x80,LE827; ; ... else bclr *L003D,#0x02 ldab LC014 ; AF Md Wd 1 bitb #0x20 ; b5 = Require closed loop for can purge beq LE86D ; br if NOT b5 ; ... else LE827: psha ldaa L011B cmpa LC27C ; ??? (69d) bls LE847 ; ; ... else ldab *L0068 ; Vss, (MPH/(16/5)) cmpb LC27D ; ??? (38d) bls LE847 ; ; ... else ldab *L00C7 cmpb LC27E ; ??? (110d) bls LE847 ; ; ... else bset *L003D,#0x02 pula staa L011C bra LE864 ; ; LE847: bclr *L003D,#0x02 clr L011C ldd *L00F1 ; DISPFLOW, Mass Air Flow gm/sec cmpa #0x20 bcs LE856 ; ; ... else ldd #0xFFFF LE856: lsld lsld lsld ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; CCP Duty Cycle vs MAF, Gms/Sec ; ; Table Value = %DC * 2.56 ;нннннннннннннннннннннннннннннннннннннннннннннннннн ldx #LC285 ; Tbl Addr ; н CCP vs MAF, (%DC) jsr LF3F8 ; Call 2d Lk Up W/ Interp pulb cba bcs LE864 ; ; ... else tba ;ннннннннннннннннннннннннннннннннннннннннннннн ; CK IF HEADS UP CONNECTED ; CCP ;ннннннннннннннннннннннннннннннннннннннннннннн LE864: brclr *L0034,#0x80,LE871; BR if NOT b7, HU online ; ... else jsr 0x5812 ; H.U. ROM Addr bra LE871 ; BR, but do not clear CCP PW ; LE86D: clra ; CLEAR CCP PW clr L011D LE871: bclr *L003C,#0x01 staa L011B beq LE87C ; ; ... else bset *L003C,#0x01 LE87C: ldaa #0x60 ; A/D Ch 6, (Pump Voltage) jsr LF2F7 ; To A/D subroutine staa *L0080 ; PUMP VOLTS, (A/D) ldaa *L0041 ; DIAGNOSTIC MODE WD 2 bita #0x10 ; Test b4, SET ERR 54 (SET NOT RUNNING) bne LE8C0 ; BR IF b4 ; ... else bita #0x08 ; Test b3 beq LE8C5 ; BR IF NOT b3, (BYPASS ERR 54) ; ... else ldab *L007F ; 2.0 VDC Batt Volts Value cmpb LC244 ; 2.O VDC MIN IGN VOLTAGE FOR ERR 54 bcs LE8C5 ; BR IF IGN VDC LT 2 VDC, (bypass ERR #54) ; ... else bita #0x40 ; Test b6 beq LE8A5 ; BR IF NOT b6, ; ... else ldx *L0035 ; Minor Loop Md Wd 1 & 2 bpl LE8C5 ; (bypass ERR #54) ; ... else ldab *L0080 ; PUMP VOLTS, (a/d) cmpb LC243 ; 2.O VDC MIN PUMP VOLTS FOR ERR 54 bcc LE8BA ; IF PUMP VOLTS < 2V, (bypass ERR #54) ; ... else bra LE8C0 ; ;нннннннннннннннннннннннннннннннн ; ERR # 54 Params ; >> Fuel Pump voltage << ;нннннннннннннннннннннннннннннннн LE8A5: ldab *L0081 ; ERR 54 TIMER incb ; INCR ERR 54 TME beq LE8AC ; BR IF TMR = 0 ; ... else stab *L0081 ; Store ERR 54 TIMER LE8AC: cmpb LC241 ; 1.5 SEC'S MIN FOR ERR 54 bcc LE8BE ; BR IF TMR GT 1.5 SEC ; ... else ldab *L0080 ; PUMP VOLTS, (A/D) cmpb LC242 ; 2 VDC, MIN Pump Volts bcs LE8C5 ; BR IF PUMP VDC LT 2 VDC, (SET ERR #54) ; ... else oraa #0x40 ; SET b6 LE8BA: anda #0xDF ; CLR b5 bra LE8C5 ; ; LE8BE: oraa #0x10 ; SET b4 LE8C0: bset *L0051,#0x20 ; SET b5 oraa #0x20 ; SET b5 ; ; BYPASS ERR 54 TESTS ; LE8C5: tab ; A <- B andb #0x04 ; Mask off b2 (0000 0b00) anda #0xF3 ; CLR b2 & b3 (aaaa 00aa) lslb ; B = 0000 b000 aba ; A = aaaa b0aa staa *L0041 ; Diag Md Wd 2 tab ; B = aaaa b0aa ldaa *L0080 ; Get Pump Volts, (A/D) bitb #0x20 ; test b5 beq LE8D7 ; BR if zero.. ; ; ... else ;ннннннннннннннннннннннннннннн ; Get Batt V & CALL L.U. ; ;ннннннннннннннннннннннннннннн ldaa *L007F ; Batt Volts Value, (A/D), For Lk Up LE8D7: ldx #LC3B5 ; Point to Inj Offset vs Batt Tbl jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) staa *L00D2 ; Inj Offset Corr, Ms*65.636 fm tbl rts ; ;***************************************************** ;>>> IAC Tables & Params <<< ; ; ;***************************************************** LE8E0: ldx #LC526 ; INDEX IAC Tables & Params ldaa *L00F9 ; IAC Cnt'l word 2 bita #0x08 ; Test b3 beq LE948 ; BR IF NOT b3 ; ... else ldab *L00F8 ; IAC Cnt'l Word 1 ldaa *L0035 ; Minor Loop Md Wd 1 bita #0x08 ; Test b3, Fan On disabled by PID bne LE8F5 ; BR IF b3 ; ... else ldaa *L00FA ; New min fan time bne LE91D ; BR IF NZ ; ... else LE8F5: ldaa *L0001 ; NV RAM Md Wd lsla ; B6 -> B7 bmi LE93D ; Br if B6 was 1, Warm kickdown enabled ; ... else ldaa *L003C ; Old CCP Status Byte lsla ; B6 -> B7 bpl LE93D ; Br if B6 was 0, Warm kickdown required ; ... else ldaa LC52A ; Offset for cold engine lsla ; x2 suba L0115 ; IAC - ? bhi LE919 ; BR if ; ... else ldaa *L0001 ; NV RAM Md Wd oraa #0x40 ; SET b6, Warm kickdown enabled staa *L0001 ; Store it ldaa *L003C ; Old CCP status byte Old CCP status byte anda #0xBF ; Clr b6, Warm kickdown required staa *L003C ; Store it ldaa LC56E ; Closed loop PID disable timer (1 sec) bra LE93A ; ; LE919: ldaa #0x82 bra LE928 ; ; LE91D: ldaa LC529 ; Add steps for fan anticipate lsla ; x2 suba L0115 ; IAC - ? bls LE931 ; BR if <= ; ... else ldaa #0x02 ; 0000 0010 LE928: staa L0107 ; IAC step dir orab #0x08 ; SET b3 andb #0xEF ; CLR b4 1110 1111 bra LE946 ; ; LE931: ldaa *L0035 ; Minor Loop Md Wd 1 oraa #0x08 ; SET b3, Fan on disabled by PID staa *L0035 ; Store it ldaa LC56D ; Msec to disable closed loop PID after fan on LE93A: staa L0112 ; Closed loop PID disable timer LE93D: andb #0xF7 ; CLR b3 stab *L00F8 ; IAC Cnt'l Word clr L0115 ; IAC - ? bra LE949 ; Skip over return ; LE946: stab *L00F8 ; IAC Cnt'l Word LE948: rts ; EXIT ;***************************************************** ; ;***************************************************** ; LE949: ldaa *L00F9 ; IAC control word 2 bita #0x20 ; test b1 bne LE948 ; BR if b1 SET ; ... else ldaa *L0085 ; TPS T/F Ld Axies Var ldab *L003E ; Air Mode Wd bitb #0x10 ; Test b4 beq LE963 ; BR IF NOT b4, ; ... else ldab *L00CC ; Stall Save IAC Stps, (Sec*80) beq LE963 ; BR if zero ; ... else decb ; decrease by one, and stab *L00CC ; Stall Save IAC Stps, (Sec*80) adda LC4F5 ; 3.125% TPS Cut off STALL SAVER bcs LE977 ; BR if overflow ; ... else LE963: ldab *L0044 ; Fuel Mode Word bitb #0x02 ; Test b1 beq LE96E ; BR IF NOT b1, 0 = decel cutoff ; ... else adda LC4FC ; add 4% TPS, DFCO T/F TPS Default bra LE975 ; and Skip ; LE96E: ldab *L003F bpl LE979 ; ; ... else adda LC4E9 ; 0d, Decel Enlean T/F Default LE975: bcc LE979 ; ; ... else LE977: ldaa #0xFF LE979: ldab *L00F8 ; IAC Cnt'l Word cmpa 0x1D,x bhi LE99C ; ; ... else ldaa *L0086 ; Old Val Fm TPS Tbl cmpa 0x1D,x bls LE98A ; ; ... else ldaa 0x45,x staa L0112 ; DISABLE PID CLD LP TIMER LE98A: clra bitb #0x50 ; b4 & b6 bne LE9AA ; BR IF NOT b4 & b6 ; ... else ; ; CK PWR STEERING ; pshb ldab *L0038 ; MCU INPUT STATUS WD bitb #0x08 ; b3, PWR STEER SW BY HI PRESSURE pulb bne LE9AA ; BR IF b3, PWR STEER SW ; ; TPS NOISE ELEM, (DON'T MOD A/C COMPENSATION ; ; ... else tst L010B ; CK IF TF IS DONE beq LE9FB ; BR IF NOT DONE ; ... else LE99C: ldab 0x33,x ; TF GAIN TO B Reg mul ; STEP CMD = TPS * TF GAIN lsld ; x2 bcc LE9A4 ; BR IF NO OVERFLOW ; ... else ldaa #0xFF ; USE MAX VAL ; ; CK IF STEP CMG GT TF MAX LE9A4: ldab 0x34,x cba bls LE9AA ; BR IF SEEP CMD IS OK ; ... else tba ; ; CK IF PWR STEER PRESS HI ; LE9AA: ldab *L0038 ; MCU INPUT STATUS WD bitb #0x08 ; b3, PWR STEER SW beq LE9C7 ; BR IF NOT b3, ; ... else adda 0x51,x ; ADD PWR STEER ANTICIPATE bcc LE9B6 ; BR IF NO OVERFLOW ; ... else ldaa #0xFF ; USE MAX VAL LE9B6: ldab *L00F8 ; IAC Cnt'l Word bmi LE9C1 ; BR IF b7 ; ... else adda LC578 ; 0 IAC STPS, Pwr Steer Anticipate STEPS bcc LE9C1 ; BR IF NO OVERFLOW ; ... else ldaa #0xFF ; USE MAX VALUE LE9C1: orab #0x40 ; SET b6, LD IS BEING CONTROLED andb #0xFE ; CLR b0 (1111 1110) bra LE9F0 ; ; LE9C7: ldab *L00F8 ; IAC Cnt'l Word, A/C REQUEST bmi LE9EA ; BR if B7 ; ... else ldab *L002C ; Idle Spd A/C Antic cmpb 0x37,x bhi LE9D5 cmpb 0x38,x bcc LE9E0 LE9D5: ldab LC55C stab *L002C ; Idle Spd A/C Antic ldab *L003E orab #0x40 stab *L003E LE9E0: ldab *L00F8 ; IAC Cnt'l Word adda *L002C ; Idle Spd A/C Antic bcc LE9F0 ; BR IF NO OVERFLOW ; ... else ldaa #0xFF ; USE MAX VAL bra LE9F0 ; ; LE9EA: bitb #0x40 ; b6, LOAD IS BEING CNT'ED beq LE9F0 ; BR IF NOT b6 ; ... else orab #0x20 ; SET b5, LOAD IS BEING REMOVED LE9F0: stab *L00F8 ; IAC Cnt'l Word 1 ldab *L00F9 ; IAC Cnt'l Word 2, PK/NEUT bpl LE9FD ; BR IF IN DRIVE (b7 = 0) ; ... else ldab 0x35,x ; PK/NEUT MULT mul bra LEA0A ; ; LE9FB: bra LEA49 ; ; LE9FD: ldab *L0068 ; MPH/(16/5) cmpb 0x1F,x bls LEA0A ; ; ... else adda LC57A ; 5 Steps added to T.F. in drive & MOVING bcc LEA0A ; BR IF NO OVERFLOW ; ... else ldaa #0xFF ; USE MAX VALUE LEA0A: ldab *L00F8 ; AC Cnt'l Word orab #0x10 ; SET b4 suba L010B ; Throttle follower learn argument bcs LEA19 ; ; ... else bpl LEA2B ; ; ... else ldaa #0x7F bra LEA2B ; ; LEA19: bmi LEA1D ; ; ... else ldaa #0x81 LEA1D: nega pshb cmpa #0x03 bcc LEA28 ; ; ... else ldab 0x45,x stab L0112 ; DISABLE PID CLD LP TIMER LEA28: oraa #0x80 ; SET b6 pulb LEA2B: staa L0107 ; IAC step dir lsla beq LEA3D ; ; ... else bcs LEA8B ; ; ... else ldaa *L002B ; IAC present position cmpa 0x4C,x bcs LEA8B ; ; ... else andb #0xEF ; CLR b4 (1110 1111) bra LEA49 ; ; LEA3D: andb #0xCF ; CLR b4 & b5 (1100 1111) bpl LEA49 ; ; ... else ldaa *L0038 ; MPU status wd bita #0x08 ; test b3, excessive pwr steer press bne LEA49 ; ; ... else andb #0xBE ; CLR b6 (1011 1111) ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; CK IF IN MODE 4 <нннн **** ; SET IAC MODE ; ; MODE 4 CNT'L WD ... HAS FLAGS ;нннннннннннннннннннннннннннннннннннннннннннннннннн LEA49: brclr *L0036,#0x08,LEA5F; BR IF NOT b3, MODE 4 ; ... else ldaa L015C ; Mode 4 cntl wd 3 bita #0x02 ; Test b1, set IAC mode? beq LEA5F ; BR IF NOT b1 ; ... else ldaa L015D ; GET Mode 4 cntl wd 4, ALDL andb #0xFB ; CLR b2 (1111 1011) bita #0x02 ; Test b1 bne LEA8B ; BR IF b1 GO SAVE IAC CNT'L WD ; AND EXIT via RTS ; ... else orab #0x04 ; SET b2 LEA5F: bitb #0x04 ; Test b2 bne LEA8B ; Br IF NOT b2 ; ... else ldaa *L0068 ; MPH/(16/5) bne LEA87 ; BR IF NZ, MOVING ; ... else ldaa *L0085 ; TPS T/F Ld Axies Var cmpa 0x1D,x bcc LEA87 ; ; ... else ldaa *L005A ; RPM/12.5 cmpa L0108 bls LEA7A ; ; ... else ldaa #0x82 ; A <- 130d orab #0x02 ; SET b1 bra LEA88 ; ; LEA7A: ldaa #0x02 ; A <- 2 bitb #0x02 ; test b2 of B beq LEA88 ; Br if b2 CLR ; ... else orab #0x04 ; set b3 of B ldaa 0x44,x staa L0112 ; DISABLE PID CLD LP TIMER LEA87: clra LEA88: staa L0107 LEA8B: stab *L00F8 ; IAC Cnt'l Word rts ;***************************************************** ;MAJOR LOOP SUBROUTINE SEG 4, Misc 100 Msec ; ; ;***************************************************** LEA8E: ldab *L0036 andb #0xCF ; Clr b4 & b5 (DAIG MD & ALDL MODE) ; ; READ A/D AND CK DIAGNOSTIC PIN B VOLTAGE.... ; ldaa #0x70 ; A/D Ch 7, (Start/Run Pwr) jsr LF2F7 ; To A/D subroutine cmpa #0x28 ; 40d = 800 Mv (780 mv?) bcs LEAAB ; BR IF A/D LT 800 Mv, (GROUND'ED TST) ; ... else cmpa #0x64 ; 100d = 2.00 VDV bcs LEAAD ; BR IF A/D LT 2.00 VDC ; ... else cmpa #0x98 ; 152d = 3.04 VDV bcc LEAAD ; BR IF A/D GT 3.05 VDC, (ROAD TST MODE) ; ... else brset *L0046,#0x08,LEAAD; BR If 8192 Mode in locked Mode ; ... else orab #0x20 ; SET b5 bra LEAAD ; ; LEAAB: orab #0x10 ; SET b4, (DIAG SW IN DIAG MODE) ; (GROUND'ED DIAG PIN) LEAAD: stab *L0036 ldaa L01B7 ; Check for stack overflow beq LEABA ; Br if 'OK' ; ... else ldaa *L0034 ; MINOR LOOP MD WD 1 oraa #0x04 ; SET b2, STACK OVER WRITE staa *L0034 LEABA: clra ; D <- 0000 clrb std 0x3FCE ; Make sure delayed start of inj - EFI delay reg - is clear ldaa *L0035 ; Minor loop md wd 1 bmi LEAED ; Br if B7, engine running ; ... else ; ; Engine not running ; ldaa *L0044 ; Fuel mode wd anda #0xD5 ; CLEAR b1 b3 & b5 (1101 0101) staa *L0044 ldaa *L005D ; Filt COOLANT staa *L0060 ; Use as STARTUP COOLANT brset *L0001,#0x40,LEADC; NVol mem mode wd, BR IF b6, warm kickdown enabled (bad shutdown?) ; ... else cmpa LC02B ; Hot Restart Limit, (129F) bcs LEADC ; Br if less ; ... else ldaa *L0001 ; NV mem md wd oraa #0x40 ; SET b6, warm kickdown enabled staa *L0001 LEADC: clrb ldaa LC3A9 ; o2 filter init val fm ROM (O2 default filt value) std *L0070 ; minor loop filtered A/D O2 staa *L0074 ldaa LC527 ; Cold IAC park position staa L0110 jmp LEB6E ; Exit ; ; Engine Running ; LEAED: bclr *L0002,#0x10 ; CLR b4, SKIP IAC MOTOR RESET ldx *L0074 ; Old Diag O2 Filt val ldaa *L0070 ; New minor lp O2 filt val ldab LC3A8 ; 100 Msec o2 Coef jsr LF389 ; Lag filter routine std *L0074 ; New diag O2 Filt val ldaa *L0083 ; TPS ld bne LEB68 ; ; ... else ldaa *L0068 ; VSS table input bne LEB68 ; only learn at idle ; ... else ldaa *L005D ; Filt coolant temp cmpa LC598 ; 87C temp thresh bls LEB6E ; don't learn if too hot ; ... else cmpa LC599 ; 216F max for learn bcc LEB6E ; don't learn if too cold ; ... else ldaa L01B0 ; Idle speed time out steps bne LEB6E ; don't learn if too soon ; ... else brset *L003B,#0x20,LEB6E; Br if hot re-start retard on ; don't learn if in hot re-start retard ; ... else ldaa L01B4 ; diff desired RPM for low battery bne LEB6E ; don't learn if low bat adj ; ... else ldaa L01B3 ; IAC K/A motor timer cmpa LC59E ; 50 sec to learn min motor K/A steps bcc LEB2E ; Br if time to update learn value ; ... else inca ; increment timer beq LEB6E ; br if roll over to zero ; ... else staa L01B3 ; store IAC K/A motor timer bra LEB6E ; Exit ; ; Update Learn ; LEB2E: clr L01B3 ; IAC K/A motor timer ldaa *L002D ; Keep alive IAC position cmpa L0110 beq LEB6E ; don't learn if no change ; ... else bcs LEB45 ; Br if need to learn up ; ... else deca cmpa LC59A ; Min keep alive motor steps (10d) bcc LEB4E ; Br if greater ; ... else ldaa LC59A ; Load minimum bra LEB4E ; and branch ; LEB45: inca cmpa LC59B ; Max keep alive motor steps (70d) bls LEB4E ; Br if less ; ... else ldaa LC59B ; Load maximum LEB4E: psha ; Save on stack suba *L002D ; Keep alive IAC position bcc LEB54 ; ; ... else nega LEB54: adda L01B2 bcc LEB5B ; Br if no overflow ; ... else ldaa #0xFF ; Load max (255d) LEB5B: staa L01B2 cmpa LC59D ; Max delta steps/idle for KA learn (1d) pula bhi LEB6E ; ; ... else staa *L002D ; Keep alive IAC position bra LEB6E ; ; LEB68: clr L01B2 clr L01B3 ; IAC K/A motor timer LEB6E: ldaa #0x8F ; Set for output staa L4003 ; CPU DDR rts ; Return to major loop exe ; ;***************************************************** ;MAJOR LOOP SUBROUTINE, SEG 7 ; ;LK UP Coolant var's ; ;***************************************************** ; ; LK UP Rich/Lean Offset Vs Coolant Temp ; ; TBL = BIN VAL ; LEB74: ldaa *L005D ; COOLANT cmpa #0xD0 ; 208d = 115c bls LEB7C ; BR IF LT 115c ; ... else ldaa #0xD0 ; USE 115c MAX FOR LK UP LEB7C: ldx #LC4AD ; Rich/Lean Offset Tbl jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) staa *L00D8 ; Lean Offset, (if Cool) fm Tbl ; ; LK UP Number of ASYNC Pulses vs Coolant ; ldaa *L005D ; COOLANT ldx #LC336 ; Number of ASYNC Pulses Tbl jsr LF3F8 ; 2d Lk Up W/ Interp staa *L00DE ; Num of Async Pulses to do ; ; ANALOG MAF BURN OFF ROUTINE ; ldaa *L005D ; COOLANT ldx #LC340 ; Pwr Enrichment Air/Fuel Tbl jsr LF3F8 ; 2d Lk Up W/ Interp staa *L00DF ; LU AFR % Chg vs Cool Temp ldaa *L005D ldx #LC50B jsr LF3F8 staa *L00D7 brset *L00F9,#0x08,LEBB7; ; ... else ldaa LC016 rora bcc LEBB7 ; ; ... else ldaa *L005D ldx #LC59F jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) staa L01B0 LEBB7: brclr *L003C,#0x02,LEBC7; ; ... else brset *L0034,#0x33,LEBC7; ; ... else inc L045D bne LEBC7 ; ; ... else dec L045D LEBC7: brclr *L0034,#0x10,LEC1C; BR IF NOT b4, (1 = IGN NOT ON) ; ... else brclr *L003F,#0x40,LEC1C; BR IF NOT b6, IF NO ENABLED ; ... else brclr *L00BF,#0xFF,LEBD8; BR IF NOT 0xFF, BR IG DELAY = 0 ; ... else dec L00BF ; DECR CNT'R bra LEC1C ; ; LEBD8: brclr *L00BE,#0xFF,LEC1C; BR IF NOT 0xFF, BR IF B/O TOME = 0 ; ... else dec L00BE ; DECR CNT'R ldx #0xDFFF ; 57,343d stx 0x3FDA ; Mass Air B.U. PW TMR ; ; ANALOG MAF BURN OFF ERR 36 ; brset *L0040,#0x40,LEC2C; BR to EXIT via RTS IF b6 ; ... else ldaa L0128 ; MAF Burn off delay tmr cmpa LC22C ; 300 msec Dly prior to Burn off bcc LEBF7 ; BR IF TIME LT 300 msec ; ... else inca ; INCR MAF Burn off delay tmr staa L0128 ; SAVE NEW MAF Burn off delay tmr bra LEC2C ; EXIT via RTS ; ;ннннннннннннннннннннннннннн ; CK ERR 36 Params ; MAF Burn off Diag ;ннннннннннннннннннннннннннн LEBF7: ldaa #0xA0 ; A/D Ch A, (Mass Air Sensor Ch) jsr LF2F7 ; To A/D subroutine cmpa LC22E ; Fail B/O test if HLM A/D > 1.90 VDC bhi LEC0B ; BR IF MAF A/D VAL LT 1.90 VDC ; ... else cmpa LC22F ; Fail B/O test if A/D LT 400 mvdc bcs LEC0B ; BR IF MAF VAL L.T. 20 ; ... else clr L002E bra LEC17 ; ; LEC0B: brset *L003F,#0x08,LEC2C; ; ... else inc L002E bne LEC17 ; ; ... else dec L002E LEC17: bset *L003F,#0x08 bra LEC2C ; EXIT via RTS ; LEC1C: ldx #0xD000 ; 53,248d stx 0x3FDA ; Mass Air B.U. PW TMR ldaa *L002E cmpa LC22D bcs LEC2C ; ; ... else bset *L0050,#0x80 ; SET b7, NEW ERR 2 LEC2C: rts ;***************************************************** ;MAJOR LOOP SUBROUTINE ; ;SEG A, Lk UP Man Air temp Var's ; ;***************************************************** ; LEC2D: ldab *L0000 ; MJR LOOP CNTR bitb #0x10 ; b4 bne LEC4E ; BR IF b4 ; ... else ;нннннннннннннннннннннннннннннннннннннннн ; LK UP KNOCK % Recovery rate vs RPM ; ; RECOVERY/SEC * 256/500 ;нннннннннннннннннннннннннннннннннннннннн ldaa *L0058 ; RPM/25 lsra ; DIV BY 4 lsra ldx #LC1C7 ; KNOCK PCT. RECOVERY RATE Tbl jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) ; ; CALC KNOCK RETARD AS PROD OF ; RATE AND KNOCK RETARD WITH MIN ; VAL HELD TO ONE ; ldab *L00A9 ; Retard for knock mul ; RETARD * LK UP RESULT adca #0x00 ; ROUND nega bne LEC47 ; BR IF NZ ; .. else ldaa #0xFF ; USE MAX VAL LEC47: adda *L00A9 ; Retard for knock bcs LEC4C ; ; ... else clra ; CLR RETARD VALUE LEC4C: staa *L00A9 ; Retard for knock LEC4E: ldaa *L00AB beq LEC55 ; ; ... else deca staa *L00AB LEC55: ldx *L008F ldaa *L008E ldab LC290 jsr LF389 std *L008F suba *L008E bcs LEC89 ; ; ... else brset *L0037,#0x40,LEC7D; ; ... else ldab *L008E cmpb LC1C1 bhi LEC89 ; ; ... else cmpa LC1BF bls LEC89 ; ; ... else bset *L0037,#0x40 ldab LC1BE stab *L00AB LEC7D: cmpa LC1C0 bhi LEC89 ; ; ... else ldaa *L00AB bne LEC89 ; ; ... else bclr *L0037,#0x40 ; ; CK IF ERR #43 ENABLED ; (KNOCK FAIL) ; LEC89: ldaa LC1DF ; Mask For ERR flag 3 bita #0x10 ; b4 ERR #42 KNOCK FAIL beq LECFF ; BE IF NOT b4 ; ... else ldab *L0000 ; MJR LOOP COUNTER cmpb #0x1A ; 26d CK IF TIME FOR 1 SEC LOGIC bne LECD3 ; ; ... else ldaa *L0002 ; MDWD2 bita #0x40 ; b6, ERR 43 TEST OVER THIS STARTUP bne LECD3 ; BR IF b6 ; ... else bita #0x01 ; b0, ERR 43 TEST IN WORK bne LECC5 ; BR IF b0 ; ... else brset *L0034,#0x10,LECD3; ; ... else brclr *L0035,#0x80,LECD3; ; ... else tst L00B8 ; MAP Hi Cnt'r, (100Ms) bne LECD3 ; ; ... else ldab *L0064 ; Filtered ld value cmpb LC238 ; minimum LV for ERR 43 test bcs LECD3 ; BR IF LD VAL LT min, (DISABLE ERR 43) ; ... else ldab L012F incb bne LECD3 ; ; ... else ldab *L005D cmpb LC237 ; Min coolant to enable ERR 43 bls LECD3 ; ; ... else oraa #0x01 bra LECD1 ; ; LECC5: ldab L01A6 cmpb LC239 ; Spark adv to add for ERR 43 test bne LECD3 ; ; ... else anda #0xFE ; clr b0 oraa #0xC0 ; set b6 & b7 (1100 0000) LECD1: staa *L0002 ; Mode Wd 2 LECD3: ldaa *L00A8 inca cmpa #0x27 beq LECDE ; ; ... else staa *L00A8 bra LECFF ; ; LECDE: clr L00A8 ldd 0x3FCA ; Counter #3, 16.5Khz psha ldab *L003C andb #0xDF suba *L00A7 cmpa LC235 bcs LECFA ; ; ... else brset *L0034,#0x10,LECFA; ; ... else brclr *L0035,#0x80,LECFA; ; ... else orab #0x20 LECFA: stab *L003C pula staa *L00A7 LECFF: ldaa #0x80 ; A/D Ch 8, MAT jsr LF2F7 ; Get A/D reading coma staa L0130 staa *L0061 ldx *L0019 cpx LC1FA ; Min engine run time for ERR 23/25 test bls LED6E ; ; ... else ldab *L0066 ldaa *L0061 cmpa LC1F8 ; IF MAT lt this, enable ERR 23 (MAT sensor low) bcc LED2B ; ; ... else ldaa *L00B1 cmpa LC1F9 ; Seconds required for Err 23 (12) bhi LED33 ; ; ... else cmpb LC1FC ; MPH min to enable ERR 23/25 bhi LED2E ; ; ... else inc L00B1 bra LED36 ; ; LED2B: bclr *L0044,#0x10; ; ... else LED2E: clr L00B1 bra LED36 ; ; LED33: bset *L0044,#0x10 LED36: ldaa *L0061 cmpa LC204 ; if MAT > this then enable ERR 25 bcs LED4E ; ; ... else ldaa *L00B2 cmpa LC205 ; Min time req for ERR 25 (12 sec's) bhi LED56 ; ; ... else cmpb LC1FC ; Min MPH to enable ERR 23/25 (1 MPH) bls LED51 ; ; ... else inc L00B2 bra LED59 ; ; LED4E: bclr *L0041,#0x02 LED51: clr L00B2 bra LED59 ; ; LED56: bset *L0041,#0x02 LED59: brset *L0044,#0x10,LED66; ; ... else brclr *L0041,#0x02,LED6E; ; ... else bset *L004F,#0x40 bra LED69 ; ; LED66: bset *L004E,#0x01 LED69: ldaa LC1FD ; If ERR 25, use this default value for MAT (29 deg C) staa *L0061 ; MAT value LED6E: ldaa *L0061 ; MAT value staa L011A ; Stored MAT value ldx #LFFA7 jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) staa *L0061 brset *L00F9,#0x08,LED90; ; ... else ldaa LC016 rora bcs LED90 ; ; ... else ldaa *L0061 ldx #LC59F jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) staa L01B0 LED90: rts ;***************************************************** ;MAJOR LOOP SUBROUTINE SEG F ; ;Fuel/Air Major Lp ; ;***************************************************** ; LED91: ldaa *L0000 ; MJR LOOP CNTR bita #0x10 bne LEDE0 ; BYPASS 200 MSEC STUFF ... ; ; 200 MESC ROUTINE ; ldx #L001B ; POINT TO BLM CELLS ldaa *L00C8 ; CELL ZERO TMER inca ; INCR TMR beq LEDA1 ; BR IF Z (rollover) ; ... else staa *L00C8 ; NEW CELL ZERO TMER VALUE ; ; CK IF BL ENABLED ?? ; (L0045 b1) ; LEDA1: ldab *L0045 bitb #0x02 beq LEDDF ; BR IF BL NOT ENABLED ; ... else ; ; CK COOLANT FOR SAM ENABLE ; (88 н 100 C) ; ldab *L005D ; COOLANT cmpb LC4DF ; If Temp < 88c Then Skip SAM Update bcs LEDDF ; BR IF COOL LT 88c ; ... else cmpb LC4E0 ; If Temp > 100c Then Skip SAM Update bcc LEDDF ; BR IF COOL LT 100c ; ... else ; ; CK FOR IDLE/NON IDLE CELLS ; ldab *L00C6 ; BLM (cells 0н7) abx ; ADD CELL NUMBER TO ADDRESS POINTER ldaa 0x00,x ; GET CELL VALUE cmpb LC4DC ; 0, Sam Cell A Number, Idle beq LEDCE ; BR IF CELL 0 ; ... else cmpb LC4DD ; 9, SAM Cell B Number, Non Idle bne LEDDF ; BR IF NOT CELL 9 ; ... else ldx *L000B ; SAM Cell B ldab LC4E2 ; 24d, SAM B Filter Coef. jsr LF389 ; DO LAG FILTER std *L000B ; SAM Cell B bra LEDDF ; EXIT VIA RTS LEDCE: ldab *L00C8 ; CELL ZERO TMR cmpb LC4DE ; Stop Cell O update when time up ; 15 SEC'S bcc LEDDF ; BR IF TIME LT 15 SEC'S ; ... else ldx *L0009 ; SAM Cell 0 ldab LC4E1 ; SAM A Filter Coef. jsr LF389 ; DO LAG FILTER std *L0009 ;SAM Cell 0 LEDDF: rts ; ;***************************************************** ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; LK UP START UP ENRICH vs COOL ; ; ; TBL = 2.56 * PCT CHG ;нннннннннннннннннннннннннннннннннннннннннннннннннн LEDE0: ldaa *L005D ; FILT COOL TEMP ldx #LC35D ; START UP ENRICH jsr LF3F8 ; 2d Lk Up, (No Offset) staa *L00EE ldaa *L005D brclr *L0044,#0x80,LEDF2; ; ... else ldaa *L0061 LEDF2: psha cmpa #0xD0 bls LEDF9 ldaa #0xD0 LEDF9: psha ldab *L0035 bmi LEE4F ldab *L0001 bitb #0x08 bne LEE4F ldx #LC3ED jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) psha ldaa *L0061 ldx #LC42B jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) pulb aba ldab #0x00 bcc LEE1C ldd #0xFFFF LEE1C: std *L000D ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; START UP SPARK ADVANCE vs START UP COOLANT TEMP ; ; TBL = SA deg * 256/90) ;нннннннннннннннннннннннннннннннннннннннннннннннннн ldx #LC18D ; START UP SPARK TBL ldaa *L0060 ; START UP COOL cmpa #0xD0 ; CK MAX LK UP VAL, 208d = 115c bcs LEE29 ldaa #0xD0 ; CK MAX LK UP VAL, 208d = 115c LEE29: psha jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) clrb std *L0012 ; Spark Adv Time out pula ldx #LC19D jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) ldx #LC19B jsr LF39F std *L0014 ldx #LC3FD pula psha jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) ldx #LC3FB jsr LF39F std *L000F LEE4F: ldx #LC41A pula pula jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) staa *L00D4 ldx #LC367 ldaa *L005D jsr LF3F8 staa *L00EA ldx #LC587 ldaa *L005D jsr LF3F8 adda *L002D bcs LEE74 adda L01B0 bcc LEE76 LEE74: ldaa #0xFF LEE76: staa L0113 brset *L0034,#0x10,LEE89; ; ... else brset *L00F9,#0x04,LEE89; ; ... else cmpa L0110 bcc LEE89 ; ; ... else staa L0110 LEE89: rts ;***************************************************** ;MJR LOOP SUBROUTINE SEG 5 ; ;Clsd Lp QUAL'S, JP TO A/C & Cool FAN ; ;***************************************************** ; ; CK CLOSED LOOP QUAL'S ; LEE8A: ldaa *L0000 ; MJR LP CNTR bita #0x10 ; Fan done if b4 = 0 bne LEE96 ; BR IF b4 ; ... else jsr LDF57 ; Fan routine (fan & AC) jmp LDFAD ; To AC clutch routine ; LEE96: ldaa *L0035 ; Minor lp wd 1 bmi LEE9E ; Br if B7, eng running ; ... else brclr *L0001,#0x08,LEF0D; Br if OK shutdown ; ... else LEE9E: ldaa *L0042 ; Diagnostic md wd 2 bita #0x02 ; B1 = Err 44/45 flag beq LEEA9 ; Br if not commanding open loop due to err ; ... else clr L00C5 ; Clear closed O2 sens not ready timer ; and force open loop bra LEF0D ; ; ; ; Check for diagnostic or ALDL mode ; LEEA9: ldaa *L0036 ; Minor lp md wd 2 anda #0x30 ; B4 & B5 = diagnostic or ALDL mode bne LEEDE ; Br if not either ; ... else brclr *L0036,#0x08,LEEBA; Minor lp md wd 2, b3 = Mode 4 ; Br if not Mode 4 ; ... else ldx #L015C ; Index File control block (Mode 4 control words) brset 0x04,x,#0x04,LEF0D; ; ... else ; ; Check closed loop time qualifier ; LEEBA: ldab *L0001 ; NV Mem Md wd bitb #0x02 ; B1 = clsd lp timer timed out bne LEEDE ; Br if timed out ; ... else ldd *L0019 ; Eng run time, sec lsrd ; /2 ; Run time assumed < 512 sec since A reg (MSB)is overwritten ; ; Set up index to proper clsd lp timer based on startup coolant ; ldx #LC448 ; Base index is cold O2 clsd lp timer (150d sec/2) ldaa *L0060 ; Startup coolant cmpa LC447 ; Coolant vs cold clsd lp timer temp thresh (45 degF) bls LEED4 ; Br if LT threshold ; ... else inx ; Index Warm O2 clsd lp timer (103d sec/2) cmpa LC446 ; Coolant vs Hot clsd lp timer temp thresh (140 degF) bls LEED4 ; Br if LT threshold ; ... else inx ; Index Hot O2 clsd lp timer (27d sec/2) LEED4: cmpb 0x00,x ; Compare eng run time to proper ; clsd lp timer based on startup temp bcs LEF0D ; Br if run time is less than time to clsd lp ; ... else ; ; Here if run time exceeds clsd lp timer val ; ldaa *L0001 ; NV mem md wd oraa #0x02 ; Set b1, clsd lp timer timed out staa *L0001 ; save NV mem md wd LEEDE: ldaa *L005D ; Restart coolant temp cmpa LC445 ; Closed loop enable temp (53F) bls LEF0D ; Br if less ; ... else ; ; HU slew cls lp disable test ; (mod afr) ; ldaa *L0034 ; Minor lp md wd bpl LEEEF ; br if NOT b7, HU online ; ... else ldaa *L004D ; HU spark flags anda #0x60 ; clr all but b5, b6 (0110 0000) bne LEF0D ; Br if b5 or b6 were zero ; ... else ; ; O2 sensor ready test ; LEEEF: bset *L0034,#0x20 ; Minor lp md wd, b5 = enable MAF burnoff (?) ldab *L0001 ; NV mem md wd ldaa *L00C5 ; O2 "in window" timer cmpa LC44D ; O2 window qual (in window for 50 sec = ready) bcc LEF00 ; Br if O2 window qual met ; ... else inca ; Inc "O2 in window" timer staa *L00C5 ; Store it bra LEF04 ; ; LEF00: andb #0xFE ; Clr b0, O2 sensor ready stab *L0001 ; NV mem md wd LEF04: rorb ; shift b0 into carry bit bcc LEF0D ; Br if O2 sensor not ready ; ... else ldab *L0045 ; A/F md wd orab #0x80 ; set b7, in closed loop flag bra LEF11 ; ; LEF0D: ldab *L0045 ; A/F Mode Wd andb #0x7F ; b7 = 0, NOT in closed loop (0111 1111) LEF11: stab *L0045 ; A/F Mode Wd brclr *L0036,#0x08,LEF2A; Minor Lp mode word #2, b3 = Mode 4 ; ... else ;------------------------------------------------------ ; Handle Mode 4 actions ; ; Control Wd $015C, B0, 1 = Controlling Opn/Clsd loop ; Control Wd $015D, B0, 1 = Closed Loop ; ;------------------------------------------------------ ldx #L015C ; Index Mode 2,3 & 4 SCI Data byte 3 brclr 0x00,x,#0x01,LEF2A; Br if NOT B0 (ALDL not controlling opn/clsd loop) ; ... else brclr 0x01,x,#0x01,LEF27; Br if NOT B0, (ALDL not commanding clsd loop) ; ... else bset *L0045,#0x80 ; Set A/F Mode Wd, b7 (In Closed Loop) bra LEF2A ; ;------------------------------------------------------ ; ; Learn enable qualifiers ; LEF27: bclr *L0045,#0x80 ; Clr A/F Mode Wd, b7 (Not in Closed Loop) LEF2A: ldab *L0045 ; A/F Md Wd bpl LEF4A ; Br if B7=0, Not in closed loop ; ... else ; ; Check coolant limits ; ldaa *L005D ; Restart coolant cmpa LC4CF ; BLM Minimum Update Temp bls LEF4A ; Br if less ; ... else cmpa LC4D0 ; BLM Maximum Update Temp bhi LEF4A ; Br if greater ; ... else ; ; Check AFR for stoic ; ldx *L00D5 ; Total Air/Fuel Val cpx LC3D5 ; Stoichiometric A/F Ratio bne LEF4A ; Br if not equal ; ... else ; ; Set Learn Enable Flag ; orab #0x02 ; Set B1, learn control flag (0 = disable learn) ldaa *L0064 ; Filtered Ld Val cmpa LC4D1 ; BLM Minimum Update LV8 bcc LEF4C ; Br if Ld greater than min ; ... else ; ; Clear Learn Enable Flag ; LEF4A: andb #0xFD ; Clr B1, learn control flag (0 = disable learn) 1111 1101 LEF4C: stab *L0045 ; Store A/F md wd jsr LDFAD ; A/C subroutine ; rts ; END OF MJR LOOP SUBROUTINE SEG 5 ;***************************************************** ;MJR LOOP SEG 1, Output Bit Sig', (TCC, CCP etc) ; ; ; ;***************************************************** LEF52: ldaa *L007F ; Batt Volts Value, (A/D) cmpa #0xAB ; 171d = 17.1 VDC bcs LEF6C ; BR IF BATT V LT 17.1 VDC ; ... else bset *L003F,#0x10 ; Mjr lp md wd ; Set Flg to Disable Burn off brclr *L0036,#0x40,LEF67; Minor lp md wd 2 ;BR IF NOT b6, (HI V BATTERY) ; ... else bset *L0051,#0x40 ; ??? md wd, b6 ; set flg (b6), Hi Battery Err bset *L0042,#0x08 ; Set b3 in Diagnostic md wd 3 (HI V BATTERY) bra LEF7A ; ; LEF67: bset *L0036,#0x40 ; Minor lp md wd 2 - SET b6, (HI V BATTERY) bra LEF72 ; ; LEF6C: bclr *L0036,#0x40 ; Minor lp md wd 2 - CLR b6, (HI V BATTERY) bclr *L0042,#0x08 ; Diagnostic md wd 3 - Clr b3 (HI V BATTERY) LEF72: ldx *L0035 ; Ck Eng Run & Diag Modes bmi LEFC5 ; Go if Eng Running ; ... else ldx *L0042 ; Get 3rd Diag word + Err code flash word bmi LEF83 ; Br if B15, if In diag ; ... else ;ннннннннннннннннннннннннннннннннннн ; Not in Diag & Eng not running ;нннннннннннннннннннннннннннннннннннн LEF7A: ldx #0xD000 ldy #0xDFFF bra LEF8A ; ;ннннннннннннннннннннннннннннннннннн ; In Diag & Eng not running ;нннннннннннннннннннннннннннннннннннн LEF83: ldx #0xDFFF ldy #0xD000 LEF8A: stx 0x3FD2 ; EGR PW Out Cnt'r jsr LF4EE ; 11 Usec Delay stx 0x3FD6 ; TCC PW Out Cnt'r jsr LF4EE ; 11 Usec Delay tst LC016 ; Air flow md wd 3, b7 = CCP when output energized bmi LEFA1 ; ; ... else sty 0x3FD8 ; CCP PW Out Cnt'r bra LEFA4 ; ; LEFA1: stx 0x3FD8 ; CCP PW Out Cnt'r LEFA4: jsr LF4EE ; 11 usec delay ; 11 usec delay stx 0x3FCC ; PW Mod cnt'r, (P8) ARC jsr LF4EE ; 11 usec delay stx 0x3FD4 ; PW Mod Cnt'r, Acel Enrich cpx #0xD000 bne LEFBC ; ; ... else ldaa L4004 ; Par I/O CSR anda #0xFD ; REset B1 (1111 1101) bra LEFC1 ; ; LEFBC: ldaa L4004 ; Get Par I/O CSR byte oraa #0x02 ; Set b1 (0000 0010) LEFC1: staa L4004 ; Write to Par I/O CSR rts ; ;***************************************************** ;нннннннннннннннннннн ; Air Inj Cnt'l ;нннннннннннннннннннн LEFC5: ldx #0xDFFF ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; CK IF IN ALDL MODE 4 <нннн***LEE2A ; Air Inj Cnt'l ; ; CNT'L WD 5, b5, ENABLE AIR MOD ; CNT'L WD 6, AIR INJ PWM VAL ;нннннннннннннннннннннннннннннннннннннннннннннннннн ldaa *L003F ; Major lp md wd brclr *L0036,#0x08,LEFDE; BR IF NOT b3, MODE 4 ; ... else ldab L015A ; ICB Data byte 1 = Mode 4 CNT'L WD 1 bitb #0x10 ; test b4 beq LEFDE ; BR IF NOT 1, (ENABLED) ; ... else ldab L015B ; ICB Data byte 2, Mode 4 CNT'L WD 6, AIR INJ PWM VAL bitb #0x10 ; test b4, ??? beq LEFE2 ; ; ... else bra LEFE5 ; branch with IX = $DFFF ; LEFDE: bita #0x02 ; Major lp md wd bne LEFE5 ; Br if b1 = 0 air diverted ; ... else LEFE2: ldx #0xD000 ; IX = $D000 LEFE5: stx 0x3FCC ; PW Mod cnt'r, (P8) ARC ldx #0xDFFF ; IX = $DFFF if it wasn't already brclr *L0036,#0x08,LEFFF; BR IF NOT b3, MODE 4 ; ... else ldab L015A ; ICB Data byte 1 = Mode 4 CNT'L WD 1 bitb #0x20 ; Test B5 beq LEFFF ; Br if zero ; ... else ldab L015B ; ICB Data byte 2, Mode 4 CNT'L WD 6, AIR INJ PWM VAL bitb #0x20 ; Test B5 bne LF00D ; Br if not zero ; ... else bra LF00A ; ; LEFFF: ldab LC015 bitb #0x04 beq LF00A ; ; ... else bita #0x04 bne LF00D ; iF YES Go TURN ON ; ... else LF00A: ldx #0xD000 ; IF NO... LF00D: stx 0x3FD4 ; TURN OFF ldx #0xDFFF ; Load 100% D.C. brclr *L0036,#0x08,LF027; BR IF NOT b3, MODE 4 ; ... else ldab L015A ; CNT'L WD, b5 bitb #0x04 ; b2 beq LF027 ; BR IF NOT 1, (ENABLED) ; ... else ldab L015B ; CNT'L WD 6, AIR INJ PWM VAL bitb #0x04 ; b2 = bne LF054 ; ; ... else bra LF051 ; ; LF027: ldab LC017 bpl LF032 ; ; ... else brclr *L0035,#0x20,LF054; ; ... else bra LF051 ; ; LF032: ldab LC014 ; AF Md Wd 1, b7 = Use Filter for Air Flow lslb ; shift b7 into carry bpl LF03E ; br if NOT b7 brclr *L0036,#0x80,LF051; ; ... else bra LF054 ; ; LF03E: ldab LC016 bitb #0x04 bne LF04B ; ; ... else brclr *L0048,#0x01,LF051; ; ... else bra LF054 ; ; LF04B: brclr *L0047,#0x02,LF051; ; ... else bra LF054 ; ; LF051: ldx #0xD000 LF054: stx 0x3FD6 brclr *L0036,#0x08,LF07A; ; ... else clrb ldaa L015A bita #0x08 beq LF06E ; ; ... else ldaa L015B bita #0x08 beq LF07D ; ; ... else ldab #0xFF bra LF07D ; ; LF06E: ldaa L015E bita #0x02 beq LF07A ; ; ... else ldab L015F bra LF07D ; ; LF07A: ldab L011B LF07D: ldaa #0x34 tst LC016 bmi LF085 ; ; ... else comb LF085: lsld lsld orab #0x03 std 0x3FD8 brclr *L0036,#0x08,LF0A4; ; ... else ldaa L015A bita #0x02 beq LF0A4 ; ; ... else ldaa L4004 ldab L015B andb #0x02 anda #0xFD aba bra LF0B4 ; ; LF0A4: ldaa L4004 anda #0xFD tst L00FA beq LF0B4 ; ; ... else brclr *L0035,#0x08,LF0B4; ; ... else oraa #0x02 LF0B4: staa L4004 brclr *L0036,#0x08,LF0DA; ; ... else clrb ldaa L015A bita #0x40 beq LF0CE ; ; ... else ldaa L015B bita #0x40 bne LF0DE ; ; ... else ldab #0xFF bra LF0DE ; ; LF0CE: ldaa L015E bita #0x01 beq LF0DA ; ; ... else ldab L015F bra LF0DE ; ; LF0DA: ldab L0119 comb LF0DE: ldaa #0x34 lsld lsld orab #0x03 std 0x3FD2 rts ;***************************************************** ; MAJOR LOOP SUBROUTINE SEGMENT D ; DIAGNOSTICS ; ; Excuted on 100 Ms Clk ; Do Logging, and blinking of Err lamp ;***************************************************** LF0E8: bclr *L0040,#0x18 ; CLR b3 & b4 in Diag mode wd #1 (0001 1000) ldab *L0000 ; Get Minor Lp counter andb #0xF0 ; Test upper nibble (1111 0000) bne LF0FB ; BR if any bits set b4 - b7 ; ... else bset *L0040,#0x08 ; SET b3 in Diag mode wd #1 brclr *L001A,#0x01,LF0FB; ; ... else bset *L0040,#0x10 ; SET b4 in Diag mode wd #1 LF0FB: brset *L0040,#0x02,LF121; BR if b1 SET in Diag mode wd #1 ; ... else bset *L0040,#0x02 ;SET b1 in Diag mode wd #1 inc L0016 ldaa *L0016 cmpa LC1E2 bls LF121 ; ; ... else clra ldx #L0004 ldab #0x05 LF112: staa 0x00,x inx decb bne LF112 ; ; ... else staa *L0016 staa *L0043 staa *L00C2 incb std *L0017 LF121: brclr *L0036,#0x10,LF13E; ; ... else bset *L0042,#0x80 ; Diag mode wd 3, b7 = in Diag mode brclr *L0035,#0x80,LF136; ; ... else jsr LF22B ; ?? clra ; Zero A staa *L0043 ; Error code flash mode wd staa *L00C2 ; ?? bra LF17F ; ; LF136: bclr *L003D,#0x18 ; ALCL mode wd, b4 = O2 transition, b3 = first C/L pas jsr LF1AC ; ?? bra LF17F ; ; LF13E: bclr *L0042,#0x80 ; Diagnostic mode wd 3, b7 = in diag mode clra ; Zero A staa *L0043 ; Error flash mode wd = 0 staa *L00C2 ; ?? = 0 bclr *L003D,#0x18 ; ALCL mode wd, b4 = O2 transition, b3 = first C/L pass brclr *L0050,#0x01,LF15E; ?? ; ... else brclr *L0055,#0x01,LF15E; :: ; ... else bset *L0006,#0x01 ; Error flag wd 3, b0 = Err 51, PROM error jsr LF4E0 ; Subroutine to calculate RAM ERR Wd's Ck Sum std *L0017 ; Ck Sum OF Err Words (2 bytes) bset *L0042,#0x01 ; Set b0, chk eng light on bit bra LF17F ; ; LF15E: brclr *L0035,#0x80,LF16A; Minor Loop wd 1, b7 = engine running ; ... else jsr LE52B ; Diagnostics - Err 13, 21, 24, 33, 34B, 41, 44, 45 jsr LF268 ; ?? bra LF17F ; ; LF16A: bset *L0042,#0x01 ; Set b0, chk eng light on bit ; ; Zero 11 RAM locations beginning at $00AC ; ldab #0x0B ; num of locations clra ; Zero A ldx #L00AC ; ?? LF173: staa 0x00,x ; Zero location inx ; Next location decb ; Dec counter bne LF173 ; Loop ; ... else brclr *L0034,#0x10,LF17F; Skip if ign on (Minor Loop Mode wd, b4 = ign off) ; ... else stab *L00B8 ; Zero $00B8 ; ; Zero 5 RAM locations beginning at $004E LF17F: ldab #0x05 ; Load count clra ; zero A reg ldx #L004E ; index mode word @ $004E LF185: staa 0x00,x ; store mode word inx ; inc address decb ; dec count bne LF185 ; loop ; ... else brclr *L0036,#0x08,LF19F; Minor Loop Mode wd 2, b3 = Diagnostic mode ; ... else ldaa L015A ; Mode 2,3 & 4 SCI Data byte 1 bita #0x01 ; Test b0 beq LF19F ; Br if Zero ; ... else ldaa L015B ; Mode 2,3 & 4 SCI Data byte 2 bita #0x01 ; Test b0 beq LF1A3 ; Br if Zero ; ... else bra LF1A8 ; ; LF19F: brset *L0042,#0x01,LF1A8; Br if b0, chk eng light on bit ; ... else LF1A3: jsr LF5E9 ; Turn off ERR lamp bra LF1AB ; ; LF1A8: jsr LF5DB ; Turn on ERR lamp LF1AB: rts ; ;***************************************************** ; END of Major Loop Subroutine Segment D - Diagnostics ;***************************************************** ; LF1AC: brclr *L0043,#0x40,LF20C; ; ... else dec L00C4 bne LF22A ; ; ... else ldab #0x04 brset *L0042,#0x01,LF225;Br if b0, chk eng light on bit ; ... else ldx #L00C0 brclr *L0043,#0x20,LF1C3; ; ... else inx LF1C3: dec 0x00,x bmi LF1D0 ; ; ... else bset *L0042,#0x01 ; Set b0, chk eng light on bit ldab #0x04 stab *L00C4 bra LF22A ; ; LF1D0: brset *L0043,#0x20,LF1DB; ; ... else bset *L0043,#0x20 ldab #0x08 bra LF225 ; ; LF1DB: bclr *L0043,#0x20 brclr *L0043,#0x03,LF1E7; ; ... else dec L0043 bra LF20F ; ; LF1E7: ldab *L00C2 cmpb #0x27 bls LF1F5 ; ; ... else clr L00C2 bclr *L0043,#0x40 bra LF227 ; ; LF1F5: bitb #0x07 bne LF204 ; ; ... else lsrb lsrb lsrb ldx #L0004 abx ldab 0x00,x stab *L00C3 LF204: inc L00C2 lsl L00C3 bcc LF1E7 ; ; ... else LF20C: bset *L0043,#0x02 LF20F: ldab *L00C2 ldx #LFFB8 abx ldaa 0x00,x tab andb #0x0F lsra lsra lsra lsra std *L00C0 ldab #0x1C bset *L0043,#0x40 LF225: stab *L00C4 LF227: bclr *L0042,#0x01 ; Clr b0, chk eng light on bit LF22A: rts ;***************************************************** ; ;***************************************************** LF22B: brclr *L0045,#0x80,LF237; ; ... else brset *L003D,#0x08,LF245; ; ... else brset *L0040,#0x08,LF252; ; ... else LF237: ldaa *L003D anda #0xF7 eora #0x40 staa *L003D brclr *L003D,#0x40,LF25B; ; ... else bra LF267 ; ; LF245: brclr *L0040,#0x08,LF267; ; ... else brclr *L003D,#0x10,LF255; ; ... else bclr *L003D,#0x10 bra LF25B ; ; LF252: bset *L003D,#0x08 LF255: brclr *L0045,#0x40,LF25F; ; ... else bra LF264 ; ; LF25B: brclr *L0042,#0x01,LF264; Br if NOT b0, chk eng light on bit ; ... else LF25F: bclr *L0042,#0x01 ; Clr b0, chk eng light on bit bra LF267 ; ; LF264: bset *L0042,#0x01 ; Set b0, chk eng light on bit LF267: rts ; ;***************************************************** ; ;***************************************************** LF268: ldy #LC1E1 ; index Mask for ERR flg 5 clra ; Zero accum A ldx #L0005 ; Numb error flag masks LF270: oraa 0x52,x ; 82d + x dex bne LF270 ; Loop through all 5 values ; ... else tsta bne LF298 ; ; ... else ldx #L0005 ; Number of error flag masks (5) LF27B: ldaa 0x4D,x anda 0x00,y ; Mask for ERR flg n staa 0x52,x dey dex bne LF27B ; ; ... else ldaa *L00B9 ; ERR funct LOGGING FILTER CONSTANT beq LF290 ; ; ... else dec L00B9 ; ERR funct LOGGING FILTER CONSTANT bra LF2F6 ; ; LF290: bclr *L0042,#0x01 ; Diagnostic md wd 3, b0 = chk eng light on bit bclr *L003C,#0x04 ; Old CCP status byte, b2 = ??? bra LF2F6 ; ; LF298: ldx #L0005 clra ; Zero accum A LF29C: ldab 0x4D,x ; Indexed B load from $004E to $0052 andb 0x52,x ; Compare to $0053 to $0057 andb 0x00,y ; Set bits according to mask stab 0x52,x ; Store in $0053 to $0057 oraa 0x52,x ; Accumulate set bits in A dey dex bne LF29C ; Loop through all 5 values ; ... else inc L00B9 ; ERR funct LOGGING FILTER CONSTANT ldx #LC1E3 ; Index 1st Err funct logging filter constant (1 sec) brclr *L0042,#0x01,LF2B8; Br if NOT b0, chk eng light on bit ; ... else inx inx ; Index 3rd Err funct logging filter constant (10 sec) LF2B8: tsta beq LF2BC ; ; ... else inx ; Index 4th Err funct logging filter constant (12 sec) LF2BC: ldab 0x00,x ; Get filter constant in accum B cmpb *L00B9 ;ERR funct LOGGING FILTER CONSTANT bcc LF2F6 ; Br if greater ; ... else stab *L00B9 ; ERR funct LOGGING FILTER CONSTANT tsta beq LF2F6 ; ; ... else ldaa LC1E5 ; 10 Sec ERR funct LOGGING FILTER CONSTANT #3 staa *L00B9 ; ERR funct LOGGING FILTER CONSTANT clrb ldy #L01AB ldx #L0005 ; Number of error flag bytes LF2D4: ldaa 0x03,x ; Get error flag byte at IX ($0004 - $0008) oraa 0x52,x ; OR with byte at $0052 + x staa 0x03,x ; Store it ldaa 0x00,y ; Get byte at IY ($01A7 - $01AB) oraa 0x52,x ; OR with byte at $0052 + x staa 0x00,y stab 0x52,x dey dex bne LF2D4 ; Loop until X = 0 (5 times) ; ... else stab *L0016 jsr LF4E0 std *L0017 bset *L0042,#0x01 ; Set B0, chk eng light on bit bset *L003C,#0x04 LF2F6: rts ;***************************************************** ;A/D sub Routine ; ;Enter With A/D Ch 0 н B in A Reg. ; 0x10 = Ch 1, Batt voltage ; 0x20 = Ch 2, O2 sense voltage ; 0x40 = Ch 4, Coolant temp 4k ; 0x50 = Ch 5, TPS voltage ; 0x60 = Ch 6, Pump Voltage ; 0x70 = Ch 7, Start/Run Pwr (Diag Sw) ; 0x80 = Ch 8, Manifold Air Temp ; 0xA0 = Ch 10, Mass Air Flow Sensor ; ;Return w/Results in A Reg. ; ;***************************************************** LF2F7: sei ; Set Int Mask bsr LF2FC ; To A/D routine cli ; Clr int mask, Int's Enabled rts ;***************************************************** ;ннннннннннннннннннннннннннннннннннн ; A/D Subroutine ;ннннннннннннннннннннннннннннннннннн LF2FC: pshb ; Save Reg,s pshx ldx #L4002 ; Point to Serial Data Latch bclr 0x00,x,#0x08 ; Clr B3 jsr LF332 ; Xmit to Serial Data staa *L0065 ; Save to RAM Buffer ; ldaa #0x07 ; DELAY VALUE LF30B: deca bne LF30B ; Loop till 0 ; ... else ldaa #0xB0 ; 176d jsr LF332 ; Xmit to Serial Data bset 0x00,x,#0x08 ; Set b3, DISABLE SAD pulx ; Restore Reg's pulb rts ;***************************************************** ;P4 MODE'ING DEVICE, SPI READ ; ;1. LF1E0, SEL FMD ON SPI & READ BYTE 1, WHICH HAS FMD ;DESCRETES ; ;2. LF1E5, SEL FMD ON SPI & READ BYTE 2 ; ; ;RETURNS WITH: ;BYTE IN A Reg ;CY CLR IF NO FAILURE ;***************************************************** ; ; READ BYTE 1 ; LF319: bclr *L0031,#0x80 ; CLR b7, SEL FMD b1 READ bra LF321 ; ; ; READ BYTE 2 ; LF31E: bset *L0031,#0x80 ; SET b7, SEL FMD b2 READ LF321: pshx ldx #L4002 ; ENABLE CS FOR FMD bset 0x00,x,#0x04 ; Set b2 ldaa *L0031 ; SET UP FMD SPI INPUT jsr LF332 ; READ SEL FMD BYTES bclr 0x00,x,#0x04 ; CLR b2, DISABLE FMD pulx rts ;************************************************* ;Xmit to SPI Data ; ;DATA FROM A Reg LOAD SPI SR AND TRANSMITS ;TO SELECED DEVICE VIA SPI ; ;CALL: ;A = DATA TO BE XMITED VIA SPI ; ;RETURNING: ;A = RX'ED SPI DATA (O IF SPI FAIL) ; ;************************************************* LF332: pshx ; Save X reg staa L4000 ; To SPI S/Reg. ldx #L4001 bclr 0x00,x,#0x80 ; Clr b7, TO START SPI XMIT ; ; WAIT FOR SPI TO FINISH, 256 CYC MIN ; ldaa #0x16 ; TIME DELAY VAL clc ; CLR CY, SPI I/O ERR FLG LF33F: brset 0x00,x,#0x80,LF349; BR IF b7, SPI DONE ; ... else deca ; DEC DELAY VALUE bne LF33F ; BR IF DELAY NOT DONE ; ... else sec ; set carry bit bra LF34C ; ; ; GET RETURNED DATA FROM SPI ; ; LF349: ldaa L4000 ; Fm SPI S/Reg LF34C: pulx rts ; ;************************************************* ;FRACTIONAL DIVIDE ; ; ;************************************************* LF34E: fdiv ; DIVIDE X = D / X, D = remainder pshx ; SAVE QUOTIENT pula ; A = IXH pulb ; B = IXL rts ; ;************************************************ ;TOGGLE FMD COP ;LD FMD SPI IMAGE ;TOGGLE COP2 in BYTE ;OUTPUT via SPI ; ;************************************************ LF353: pshx ; save X ldaa *L0031 ; ACCESS SPI BYTE eora #0x02 ; COP2 staa *L0031 ; SPI command byte to FMD chip sei ; Turn off interrupts ldx #L4002 ; Pt to SPI Data Latch bset 0x00,x,#0x04 ; SEL FMD CHIP jsr LF332 ; Xmit via SPI bclr 0x00,x,#0x04 ; UNнSEL FMD CHIP cli ; Turn on interrupts pulx ; restore X rts ; return ;************************************************* ;GET IDLE AIR CONDITIONS ; ;RETURNS WITH: ;STATUS OF IAC A,B & C ;************************************************* ; LF36A: pshx ldaa L4002 ; Get SPI Data Latch anda #0x03 ; MASK OFF IAC BITS ldx #L4004 ; IO CNT'L REG PORT ADDRESS brclr 0x00,x,#0x04,LF379 ; IAC C ON ; ... else oraa #0x04 ; TURN ON BIT LF379: pulx rts ; ;***************************************************** ;OUTPUT THE IAC SOLENOIDS ;TOGGLES OF IAC SOLENOIDS ; ; ;***************************************************** ; LF37B: pshb anda #0x03 ; MASK b0 & b1 ldab L4002 ; Get SPI Data Latch andb #0xFC ; MASK OFF LOW ORDER aba ; NEW STATE staa L4002 ; To SPI Data Latch pulb rts ;***************************************************** ;FIRST ORDER LAG FILTER ; ;CALLING: ; X = OLD FILT VALUE ; A = NEW VALUE TO BE FILTERED ; B = FILT CONSTANT ; ;RETURNING: ; D = NEW FILT VALUE ; ;***************************************************** ; LF389: pshx ; Save old filt val pshb ; Save filt const mul ; D = new value * filt const pshb ; Save lo byte psha ; Save hi byte tsx ; X <- SP + 1 (points to saved hi byte) ldaa 0x02,x ; A <- saved filt const inx ; point X to old filt val (on stack) inx inx ; X is address of multiplicand (on stack) nega ; A is multiplier (2's complement of filt const) jsr LF39F ; MUL8X16 tsx ; X <- SP + 1 addd 0x00,x pulx ins ; Inc SP pulx rts ; ;***************************************************** ; MUL8X16 ; 8 X 16 Multiply with 16 bit result. ; ; output is rounded for 16 bit result. ; ; Calling Arg: ; A ACC = 8 BIT Multiplier ; X REG = Address of 16 Bit Multiplicand ; ; Returns with: ; A ACC = MSB of result ; B ACC = LSB 0f result ; Registers affected: ; A, B & Conditions Regester ; Execution time: ; 68 CPU Cycles ; Stack Used: ; 4 bytes ; Subs Called: ; None ;***************************************************** LF39F: pshx ; Save mutiplcand on stx psha ; save Mult'er on stx ldab 0x01,x mul ; Get 1st partial prod adca #0x00 psha ; Save partial prod. ldaa 0x00,x tsx ldab 0x01,x mul ; Get 2nd Partial prod. addb 0x00,x ; Add 1st part prod to 2nd. adca #0x00 pulx ; Restore STX pulx ; Get Mutl'cnd to X Reg. rts ; & Return ;***************************************************** ;ннннннннннннннннннннннннннннннннннннннннннннннннн rti ; Throw out Extraneous Interupts ;ннннннннннннннннннннннннннннннннннннннннннннннннн ;***************************************************** ; LKUP3D.src ; Main Look Up Subroutine, (3 Dem) ; ; Enter with: ; R = number of rows in table ; Q = minimum value of columns ; RNUM = Number of Q values, (NUM OF BK POINTS) ; ; Max Value Diff between table entries = 255 ; Call With: ; A = Row Arg ; B = Col Arg ; X = Tbl Addr ; ; Returns with: ; ACCA = Result, (Y = F(Q,R) ; ; Registers affected: ; A ACC & Conditions Regester ; ; Execution time: ; 155 CPU Cycles + (2 * p4lkupq+p4lkupr) ; ; Stack Used: ; 11 bytes ; ; Subs Called: ; p4lkupq ; p4lkupr ; ; ;***************************************************** LF3B5: suba 0x00,x ; Calc Row Arg offset, (Lmt to 0) pshb ; Save Col Arg to stack pshx ; Save Tbl offset to stack bcc LF3BC ; BR IF NO UNDERFLOW ; ... else clra LF3BC: subb 0x01,x ; Calc Col Arg offset, (Lmt to 0) bcc LF3C1 ; BR IF NO UNDERFLOW ; ... else clrb LF3C1: pshb ; Save Col Arg to stack ldab #0x10 ; Make In Arg Into Interp Inc's mul ; Calc Col Arg offset, (Lmt to 0) pshb ; Save Interp Inc's tp stack ldab 0x02,x ; Set Addr of tbl pshb mul abx inx inx inx pshx ; Save Tbl Addr on stack tsx ; ; ;Call 2d Lk Up, (No Offset) ; ldaa 0x04,x ;Get Col Arg for Lk Up ldx 0x00,x ;Tbl Addr jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) psha ;Save result Of Lk Up to stack tsx ldaa 0x05,x ; Get Col Arg ldab 0x04,x stab 0x05,x ; Put R(low) in highest STX ldab 0x03,x ; RNUM ldx 0x01,x ; Addr of Table abx jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) tab pula pulx pulx jsr LF40F ; Call Interpolate routine ins ; Restore Stack pulx ; Restore X pulb ; Restore B rts ; ;***************************************************** ; Look Up Routine 2 dimensional ; ; Use for tables with 1 byte Unsigned values and ; fixed spacing and a 1 byte unsigned Variable ; ; Four entries are provides, see each for enty & exit ; conditions. ; Enter with: ; FOUR ENTRY POINTS: ; ; 1. LKUP2D: A ACC = Independent Var Value ; B ACC = Offset to be subtracted fm A ACC ; prior to table look up ; ; 2. LKUPQ: A ACC = Independent Var Value, offset=0) ; X REG = Address of table ; ; 3. LKUPR: A ACC = 1st value for interpelation ; B ACC = 2nd value for interpelation ; ; 4. LKUP2C: A ACC = Independent Var Value, offset=0) ; X REG = Address of table ; ; Returns with: ; ACC A = Result, (Single byte Unнsigned table value) ; ; Regesters affected: ; A ACC & Conditions Regester ; ; Execution time: ; LKUP2D: 128 CPU cycles ; LKUPQ: 118 ; LKUPR: 62 ; LKUP2C: 126 ; ; Stack Used: ; LKUP2D: 10 bytes ; LKUPQ: 10 bytes ; LKUPR: 4 bytes ; LKUP2C 10 bytes ; ; Subs Called: ; None ;***************************************************** ; ;p4lkup2d Entry Point ; ; Use When an Offset of the Independent Var is in B ; ; Enter with: ; X = Addr of table ; A = Independent Var ; B = Offset to be sub'ed fm A ; ; Return with: ; A = Results ; ; 128 Cycles ;***************************************************** ; LF3F2: sba ;Sub Off set bcc LF3FF ;if not L.T. Zero, ; Call 2d Lk Up, No Offset (A = Ind. Var.) ; ... else clra ;Set To Zero if L.T. bra LF3FF ;& go to Lk Up ; н Call 2d Lk Up, (No Offset) ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; ; Use to interpolate fn table with fixed spacing which ; is specified in 1st byte of table, No B offset is ; allowed. ; ; Enter with: ; X = Addr of table ; A = Independent Variable ; ; Return with: ; A = Results ; ; 126 Cycles ;ннннннннннннннннннннннннннннннннннннннннннннннннннн LF3F8: pshb ; Save B pshx ; Save Table Addr ldab 0x00,x ; Get Spacing value inx bra LF403 ; Goto to Lk Up ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннннн ; 2d LK UP, Use When no Offset of the Independent Var. ; ; Enter with: ; X = Addr of table ; A = Independent Var, (offset = 0) ; ; Return with: ; A = Results ; ; 118 Cycles ;ннннннннннннннннннннннннннннннннннннннннннннннннннн ; LF3FF: pshb ; Save Col Input Arg pshx ; Save Table Addr ldab #0x10 ; Set Spacing LF403: mul ; Calc Increment D = A*B (Ind Var * Spacing) pshb ; Save Low Byte of Increment on Stack tab ; Copy High Byte of Increment into B abx ; Add High Byte of Increment to Table Addr ldd 0x00,x ; D = result bsr LF40F ; Call Interpolate routine pulb ; Restore Stack pulx pulb rts ; Return to Caller ;***************************************************** ; Interpolation Subroutine ; ; Use to interplate two 8 bit Values ; ; Enter with: ; A = 1st Value for interpolation ; B = 2nd Value for interpolation ; X = Table Address ; ; Return with: ; Stack = Results ; ; 62 Cycles ;***************************************************** LF40F: pshx ;Save X pshb ;Save B psha ;Save A sba ;2nd value > 1st value? A <- A - B tsx ;X points to last value saved on stack (A) ldab 0x06,x ;B = Low Byte of Table Address bcs LF421 ;If Cy Set (1st val < 2nd val) go round up ; ... else ;ннннннннннннннннннннннннннннн ; Interp & rnd Dwn if required ;ннннннннннннннннннннннннннннн mul ; D <- A * B (1st val * 2nd val) nega ; A <- -A adda 0x00,x ; 1st val (was saved on stack by calling routine) lslb ; B * 2 sbca #0x00 ; A <- A - 0 - CY bra LF425 ; ;нннннннннннннннннннн ; Interp & round UP ;нннннннннннннннннннн LF421: nega ; A <- -A mul ; D <- A * B ( -1st val * 2nd val) adca 0x00,x ; A <- A + 1st val + CY LF425: ins ; Restore Stack pulb pulx rts ; ;***************************************************** ; MUL16X16 ; 16 * 16 Mult Fixed Point Routine ; ; Call with: ; X = Multiplicand ; A = MSB of Multiplier ; B = LSB of Multiplier ; ; Returns with: ; A ACC = Middle 2 bytes of 32 bit product ; B ACC = Middle 2 bytes of 32 bit product ; X REG = upper 2 bytes of 32 bit result. ; ; Regesters affected: ; A, B, X & Conditions Regester ; Execution time = 182 CVycles max ; ; Middle (A & B) will be set to 0xFFFF if MSB oof the ; result is N.Z. ;***************************************************** ; LF429: psha ; Reserve for MSB of Result pshx ; Reserve for Part Result pshx ; Save Mutlpcand to Stack pshb ; Save LSB of Mult to Stack psha ; Save MSB of Mult to Stack tsx ldaa 0x03,x mul ; LSB of Mult'cnd * LSM of Mult adca #0x00 staa 0x05,x ldd 0x01,x mul ; LSB of Mult * MSB of Mult'cnd addb 0x05,x adca #0x00 std 0x04,x ldaa 0x00,x ; MSB mult'plr X LSB н ; Mult'cand ldab 0x03,x clr 0x06,x ; Clr MSB Of Result mul ; MSB Mult * LSB of Mult'cnd addd 0x04,x rol 0x06,x std 0x04,x ldaa 0x00,x ldab 0x02,x mul ; MSB Mult * MSB Mult'cnd addb 0x04,x ; MSB Result In A&B adca 0x06,x stab 0x04,x std 0x02,x ; 2 High Bytes to X tsta ; Hi Byte N.Z. ? beq LF461 ; If No go ; ... else ldd #0xFFFF ; Else Set To 0xFFFF std 0x04,x LF461: pulx ; Higher Bytes to X pulx pula pulb ins ; Restore Stack rts ;**************************************************** ;CKSUM: ; CALCULATE A STD GM CHECKSUM ; ; Output is A 16 bit result. ; ; Calling Arg: ; B = Number of bytes to cksum ; X = Starting address ; Returns with: ; Y = Checksum ; ; Execution time: ; 855,726 CPU Cycles, (FFFF bytes) ;**************************************************** ;EQU COP 0x400B ; Watch dog timer ; LF467: pshx ; Save start addr of SUM pshb psha ; Save num of bytes to sum lsrd ; count in 2's psha ; save hi byte (/2) on stx ldy #0x0000 ; clear Y Reg. tba ; Ck for ACCB = 0 after shift beq LF481 ; ;...else LF473: ldab 0x00,x ;Get byte aby ;Add to CHECKSUM (in Y reg) ldab 0x01,x ;Next byte aby ;Add to CHECKSUM ldab #0x02 ; Double increment pointer (in X reg) abx ;Point to next pair of bytes deca ;Dec counter bne LF473 ; ; ... else LF481: pshx ; Save current Address pointer ldx #0xFF00 ; COP Time Value stx L400B ; Toggle COP (every 512 bytes) tsx dec 0x02,x ; Dec hi order byte of count pulx ; Continue till all bytes done bpl LF473 ; ;...else ins ; Dump hi order counter pula ; Restore regesters pulb pulx rts ;& Return ;***************************************************** ; ; ; ;***************************************************** ; LF493: ldab *L0040 ; ; ; CK ID ERR 21 ENABLED ; ldaa LC1DD ; Mask For Mal Funct flg 1 bita #0x04 ; b2, ERR Code 21 TPS High beq LF4A8 ; BR IF NOT b2 ; ...else ldaa *L0082 ; TPS, (A/D) cmpa LC1F2 ; IF TPS A/D > set ERR #21 bls LF4A8 ; ; ...else orab #0x04 ; SET b2 bset *L004E,#0x04 ; SET b2 LF4A8: stab *L0040 ldaa *L0082 ; TPS, (A/D) bitb #0x24 ; b5 & b2 beq LF4B3 ; BR IF NOT b5 & b2 ; ...else ldaa LC1F6 LF4B3: psha ldab *L0087 ; Fltered low TPS, (A/D) cba bhi LF4C3 ; ; ...else ldx *L0087 ; Fltered low TPS, (A/D) ldab LC3A5 ; Lo TPS filter coef jsr LF389 ; 1st Order Lag Filter std *L0087 ; Fltered low TPS, (A/D) LF4C3: ldd *L0087 ; Fltered low TPS, (A/D) addd #0x0080 tab pula sba bcc LF4CE ; ; ...else clra LF4CE: ldab LC3A3 ; Hi/Lo TPS% mul addd #0x0020 lsld bcs LF4DB ; ; ...else lsld bcc LF4DD ; ; ...else LF4DB: ldaa #0xFF ; MAX VALUE LF4DD: staa *L0083 ; TPS Ld Axis Var rts ;***************************************************** ;Do Check sum of NON VOL MEMORY Err Flg Word's ; ;Return with: ;A = MSB of Ck Sum ;B = LSB of Ck Sum ;***************************************************** ; LF4E0: ldx #0x0005 ; Set For 5 EEPROM Flg,s ldd #0x0001 ; Inc for non zero sum LF4E6: addb 0x03,x ; Sum Flg Words adca #0x00 dex ; Dec till done bne LF4E6 ; Loop Till done ;...else ; rts ; ;***************************************************** ; ECU DELAY HERE ; 11 usec ; ;***************************************************** ; LF4EE: rts ;Return to caller ; ;***************************************************** ;MAJOR LOOP SUBROUTINE SEG 6, ; ;Log RAM to MCU, Cool A/D ; ; ;***************************************************** ; ; Read coolant temp & correct ; reading if failure occurs ; LF4EF: jsr LFA3B ; TO SEG 4, Log RAM to H.U. ldaa #0x40 ; A/D Ch 4, (Coolant Temp) jsr LF2F7 ; Go to to A/D psha ; Save A/D Coolant Value ;ннннннннннннннннннннннннннннннннннннннннннн ; LK UP COOL VALUE FM 2D TBL ; 3840 Ohm COOL Table ; ; ;ннннннннннннннннннннннннннннннннннннннннннн ldx #LFF81 ; INDEX 3840 ohm COOLANT Table brset *L003D,#0x80,LF508; BR IF b7, COP 2 not toggled ; ... else brclr *L0031,#0x01,LF508; BR IF NOT b0, If 4K Res value in use ; ... else ;ннннннннннннннннннннннннннннннннннннннннннн ; LK UP COOL VALUE FM 2D TBL ; 348 Ohm Table ; ; ;ннннннннннннннннннннннннннннннннннннннннннн ldx #LFF92 ; INDEX 348 OHM Cool sensor Table bra LF50E ; Lk Up Val ; LF508: adda #0x0A ; Wrap ? bcc LF50E ; BR IF NO OVER FLOW ; ... else ldaa #0xFF ; limit A/D VAL, (lk Up Var) LF50E: jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) staa *L005F ; Save For ALDL cmpa #0x78 ; 50 Deg C bhi LF520 ; If > 50 C Assume 348 Ohms ; ... else cmpa #0x6A ; 39.5 C bhi LF523 ; If 39.5 to 50 C assume No Change ; ... else bclr *L0031,#0x01 ; Use 4 K Ohms bra LF523 ; ; LF520: bset *L0031,#0x01 ; Use 348 Ohms LF523: bclr *L003D,#0x80 ; Reset COP2 Cool Flag ; ; Error #14 Hi Temp Failure ; pula brset *L003C,#0x08,LF56D; ; ... else psha ldaa *L005F ldab #0x20 ;Do Error #14 cmpa LC1ED ;If Cool < Calib ck Timmer 1st. pula bcc LF53D ; ; ... else ; ; Error #15 Low Temp Failure ; ldab #0x10 ; Do Err #15 cmpa LC1F1 bls LF55D ; If Cool > Calib, Filter ; ... else LF53D: ldx *L0019 cpx LC1EF ; Ck Eng Run time bls LF54B ; ; ... else bset *L0036,#0x02 ; SET b1, ERR 14/15 THIS START UP orab *L004E stab *L004E LF54B: bclr *L0044,#0x80 brset *L0036,#0x02,LF555; ; ... else bset *L0044,#0x80 LF555: ldaa LC1EE ; Use Default Cool Fm Equate clrb std *L005D ; COOLANT bra LF56D ;exit ; LF55D: ldaa *L005F brclr *L003C,#0x10,LF56E; ; ... else ldab LC3A6 ; Cool Temp Coef fm ROM ldx *L005D ; COOLANT jsr LF389 ; 1st Order Lag Filter std *L005D ; COOLANT LF56D: rts ; ;***************************************************** ; LF56E: clrb std *L005D ; COOLANT staa *L0060 bset *L003C,#0x10 ;Set Cool Flg rts ; ;***************************************************** ; ; Sub to initialize BLM Table to 128 ; ;***************************************************** ; LF577: clrb ; clear upper byte ldaa #0x80 ; Get Default Val 128 std *L0009 ; SAM Cell 0 std *L000B ; SAM Cell B ; ; Sub to initialize BLM table to value in A ; LF57E: ldx #0x0010 ; # of BLM Cells to init LF581: dex staa 0x1B,x ; $1B is beginning of BLM cell matrix cpx #0x0000 bne LF581 ; Loop through all cells ; Done ? ... else rts ; Return ;***************************************************** ; ; CK LOW LMT FOR SAM CELL'S 0 & B ; ;***************************************************** ; LF58A: ldaa *L000B ; Sty Alive Mem Cell B ldx #LC4DA ; 118, Low Lmt for other SAM Cell's bsr LF5A8 ; Sub to limit bounds on 8 bit integer, A = val, X = limit staa *L000B ; Sty Alive Mem Cell B bsr LF57E ; Sub to init all BLM cells to value in A ; ldaa *L0009 ; SAM Cell 0 ldx #LC4D8 ; 118, Low Lmt for SAM Cell 0 bsr LF5A8 ; Sub to limit bounds on 8 bit integer, A = val, X = limit staa *L0009 ; SAM Cell 0 ldx #L001B ; Point to beginning of BLM matrix in memory ldab LC4DC ; 0, SAM Cell A Number, Idle abx ; ADD TO BLM POINTER staa 0x00,x rts ; ;***************************************************** ;LIMIT ; ;Limit Bounds on 8 Bit Interger ;(Upper & Lower) ; ;Call with: ;A = Input Arg ;X = Bound ;Return: ;A ;***************************************************** LF5A8: cmpa 0x00,x ; Is A reg > Low limit ? bhi LF5AE ; If yes ; ... else ldaa 0x00,x ; If no Ld Low Limit LF5AE: cmpa 0x01,x ; Hi Limit ? bls LF5B4 ; If Yes, then return ldaa 0x01,x ; If no Ld High Limit LF5B4: rts ; ;***************************************************** ;FACTIN ;Factor in a 8 x 16 Multiply ; ;***************************************************** ; LF5B5: psha ;Save Input Arg. ldab 0x01,x mul ;Mult LSB of 16 Bit Num pshb psha tsy ldaa 0x02,y ; Set For 2nd Byte ldab 0x00,x mul ; Mult MSB of 16 bit Num addb 0x00,y ; Add LSB result to MSB result adca #0x00 rol 0x01,y ; Shft MSB for X 2 Mult rolb ; Prior result LSB rola bcc LF5D2 ; br if no overflow ; ... else ldd #0xFFFF ; Max Limmit of Exit Val LF5D2: std 0x00,x rol 0x01,y ;Clr Cy puly ins rts ; ;***************************************************** ;Set Up MCU CSR ;Enter as required to operate LSB of CSR ; ;Entry: ; LF4A8 To turn ON a bit ; LF49A To turn OFF a bit ; ;Exit: ; IX preserved ;***************************************************** ; ; To turn ON a BIT ; LF5DB: ldaa #0xF7 ; 1111 1000, Sw on Err Lamp ; ; Entry point to turn OFF a bit ; LF5DD: pshx ; Save IX ldx 0x3FFC ; MCU CSR, (Turn off a CSR bit) pshx tsy ; IY <- IX anda 0x01,y ; Test b0 of MCU CSR bra LF5F5 ; ; ; Entry point to TURN OFF ERR LAMP ; LF5E9: ldaa #0x08 ; 0000 1000 b3, Turn off err lamp ; ; Entry point to turn On a CSR bit ; LF5EB: pshx ; Save IX ldx 0x3FFC ; MCU CSR (Turn On a CSR bit) pshx ; [SP] <- $3FFC tsy ; IY <- [SP + 1] oraa 0x01,y ; A <- A OR [$3FFC + 1] LF5F5: anda #0xFE ; Mask off b0, MCU test normal oraa #0x02 ; SET b1 staa 0x01,y ; [$3FFC + 1] <- A pula ; A <- [SP] oraa #0xFB ; 1111 1011, SET All Bits but b2 psha ; [SP] <- A pulx ; IX <- [SP] stx 0x3FFC ; MCU CSR pulx ; Restore IX rts ; EXIT ;***************************************************** ;--------------------------------------------------------- ; Subroutine to Toggle ECU byte 1 ; ; ; ;--------------------------------------------------------- ; LF606: ldx 0x3FFC ; MCU CSR pshx tsy ; IY <- [SP+1] oraa 0x00,y ; Accum A <- A OR [$3FFC+0] bra LF61A ; ; LF611: ldx 0x3FFC ; MCU CSR pshx tsy ; IY <- [SP+1] anda 0x00,y ; Accum A <- A AND [$3FFC+0] LF61A: staa 0x00,y ; [$3FFC+0] <- Accum A pulx stx 0x3FFC ; MCU CSR rts ; EXIT ;***************************************************** ;IAC ; ;PID IDLE CONTROL ; ;***************************************************** LF622: ldx #LC526 ; INDEX IAC Tables & Params ldy #L4004 ; Use Y as Port Addr for IAC jsr LF36A ; Get IAC motor State lsl L00F9 ldab *L0038 ; P/N status in Bit 0 rorb ror L00F9 brset *L0050,#0x01,LF645; Br if M51 ldab *L0034 ; MINOR LOOP MD WD 1 bitb #0x10 ; b4, (1 = IGN ON) bne LF654 ; If not B/P open loop & T/F ; ... else ldab *L00F9 bitb #0x04 ; Is motor reset done ? bne LF654 ; If not B/P open loop & T/F ; ... else LF645: ldab *L0035 ; Get Eng Status fn minor LP MW bmi LF657 ; If running, GT open loop & T/F ; ... else ldab *L0036 ; MNR LOOP MD WD 2 bitb #0x10 ; b4, DIAG SW IN DIAG MODE beq LF654 ; BR IF NOT b4 ; ... else ldab #0x81 ; If in Diag, Extend motor stab L0107 ; Save Val as cmd'ed steps LF654: jmp LF711 ; & Step the motor ; ; IDLE SPEED OPEN LOOP ; LF657: ldab *L007F ; Get Present battery volts cmpb #0xAB ; Is it >17.5 V ? bhi LF661 ; If so shut off Motor cmpb #0x5A ; Is battery low ? bhi LF664 ; If not, go check engine ; ; DO START UP ROUTINE ; LF661: jmp LF7A1 ; ; LF664: clra brset *L00F9,#0x08,LF6B1; ; ... else ldab *L005A cmpb L0108 bcs LF676 ; ; .. else brset *L0035,#0x80,LF680; ; ... else bra LF67D ; ; LF676: brclr *L00F9,#0x40,LF67D; ; ... else bset *L00F9,#0x08 LF67D: jmp LF70E ; ; LF680: ldab L0113 bset *L00F9,#0x40 brset *L0038,#0x80,LF691; If A/C requested ; ... else addb LC528 ; Startup offset bcc LF691 ; BR if no overflow on add ; ... else ldab #0xFF ; Limit to 255 LF691: jsr LD367 ; Subtract value in B from IAC present position clra ; A = 0 cmpb L0110 ; Is valued subtracted < L0110 bcs LF6A2 ; yes, jump ; ... else ldaa L010A ; IAC step delay counter after startup brclr *L0000,#0x01,LF6A2;Branch on alternate loops of major/minor loop counter ; ... else inca LF6A2: cmpa 0x06,x ; Comp dlt to max desired bls LF70E ; If dly to0 short, B/P open loop ; ... else ldab *L00F9 ; R/S decay timer mode word orab #0x08 ; Set dly over stab *L00F9 ; save mode word clr L010A ; R/S dly counter after startup bra LF6D4 ; ; LF6B1: brset *L00F9,#0x20,LF711;R/S decay timer mode word ; ... else ldab *L00F8 ; IAC Cnt'l Word bitb #0x10 ; In the T/F mode ? bne LF6C3 ; If so issue a step ; ... else bitb #0x08 bne LF711 ; ... else bitb #0x04 ; Open loop step needed ? bne LF6D4 ; If not, B/P step issue ; ... else LF6C3: ldaa L0107 ; Steps being requested ? bpl LF6D4 ; If so,goto Trajectory Decay ; ... else ; ; TRAJECTORY DECAY ROUTINE ; bitb #0x20 ; A/C Steps being removed ? bne LF6D4 ; If so, B/P decay ; ... else dec L010A ; Dec decay step timer beq LF6D4 ; & if ready step motor ; ... else jmp LF7DC ; Else return with no step ;ннннннннннннннннннннннннннннннннннннннннннннннннннн LF6D4: ldaa 0x2F,x ; Get neutral delay ldab *L00F9 ; R/S decay timer bmi LF6EC ; BR if not in drive ; ... else ldaa *L0066 ; Mul MPH * 8, limit to 32d cmpa #0x20 ; at limit? bcs LF6E2 ; less than 32, branch ; ... else ldaa #0xFF ; load 255d LF6E2: lsla ; x 2 lsla ; x 4 lsla ; x 8 ldab 0x31,x ; Mul by drive delay Mult. mul adda 0x30,x ; Add to the drive delay bcs LF709 ; br if overflow ; ... else LF6EC: ldab *L00F8 ; IAC Cnt'l Word bitb #0x04 ; Ck if sys in open loop ? bne LF70E ; If no,BR arround O/L Calc's lsla ; x 2 bcs LF709 ; branch if overflow psha ;ннннннннннннннн ; Form RPM Error ;ннннннннннннннн ldab *L005A ; RPM/12.5 subb L0108 ; & sub desired speed clra ; A = 0 lsld ; D x 2 lsld ; D x 4 tsta ; A still = 0? bne LF70D ; no, branch ; ... else ;нннннннннннннннннннннн ; Increase Decay Counter ;нннннннннннннннннннннн comb ; B = 1 н pct RPM error ldaa 0x32,x ; Max delta count's mul pulb ; Get base count aba ; Add delta to base bcc LF70E ; Limit to max Num of minor loops ;нн per step LF709: ldaa #0xFF ; 255d bra LF70E ; Store Delta ; LF70D: pula ; Restore base decay to A LF70E: staa L010A ; Save base decay ;***************************************************** ;MOVE IAC MOTOR ; ;Accumulator A will contain MCU1io, and must not ;be changed. ; ;Accumulator B is used as GP scratch Pad. ;***************************************************** ; ; NORMAL MOVE IAC MOTOR ; LF711: bclr *L00F9,#0x01 ; clear b0 in IAC mode word ; ; CK IF HEADS UP CONNECTED ; U/D Motor posit fm HUD ; ldaa *L0034 ; MINOR LOOP MD WD 1 bpl LF71B ; If no b7, Bypass 12U update ; ... else jsr 0x580C ; TO HEADS UP <ннннннннн ;-------------------------------------------------------- ; CK IF IN ALDL MODE 4 <нннн**** ; MODE WD ... and MD WD ... ; ECM TYPE 0x32 ; IAC ;---------------------------------------------------------- LF71B: brclr *L0036,#0x08,LF740; BR IF NOT IN ALDL MODE 4 ldaa L0160 ; ALDL FUNCT MOD ENABLE WD bita #0x01 ; Test b0, beq LF740 ; BR IF NOT b0 ; ... else bita #0x02 ; Test b1, bne LF740 ; BR IF NOT b1 ; ... else ldaa *L002B ; IAC Present Posit suba L0161 ; mode 4 data byte 8 bcc LF732 ; br if underflow ; ... else nega ; 2's comp of A LF732: bpl LF736 ; br if positive (b7 set) ; ... else ldaa #0x7F ; 0111 1111 LF736: bcs LF73A ; ; ... else oraa #0x80 ; SET b7 LF73A: staa L0107 ; IAC step dir command bset *L00F9,#0x01 ; SET b0 in IAC mode word LF740: jsr LF36A ; Get Motor status ldab L0107 ; Get num of CMD steps lslb ; Any to do ?, нн> ; н put sel bits in Carry beq LF77A ; If no, put PWM the motor coils ; (12U mod FAN ?) ; ... else bita #0x04 ; Is step motor on ? beq LF79B ; If no, toggle on & нн> ; н wait 6.25 MS ; ... else dec L0107 ; If yes, cnt this CMD step ldab *L002B ; IAC Present Posit bcc LF75C ; If C=0, then Retract Pintel ; ... else ; ; EXTEND PINTEL CODE ; beq LF757 ; If Zero, stay in loop ; ... else decb ; Adj pressent motor posit. LF757: dec L0111 ; Dec running counter bra LF765 ; Update A/C & T/F flags ; ; RETRACT PINTEL CODE ; LF75C: cmpb 0x4C,x ; Limit motor posit. bcc LF77A ; Inc running counter ; ... else incb ; If < max Update posit. inc L0111 clc ; ; ; UPDATE A/C LEARING & THROTTLE FOLLOWER REG'S ; LF765: stab *L002B ; IAC Present Posit ldab *L00F8 ; IAC Cnt'l Word bitb #0x10 ; Is Throt follower active beq LF77A ; If no T/F, Ck Kwarm or Fan ; ... else ldab L010B ; Get the T/F Learn ARG. incb ; Assume step taken is retract bcc LF777 ; If step is retract, B/P DEC ; ... else decb ; Get bk orig Val of T/F Delta beq LF777 ; if orig = 0, then B/P DEC. ; ... else decb ; DEC, actual value of delta LF777: stab L010B LF77A: ldab *L00F8 ; IAC Cnt'l Word bitb #0x08 ; b3 beq LF783 ; BR IF NOT b3, ; ... else inc L0115 LF783: ldab *L002B ; IAC Present Posit cmpb 0x4C,x bls LF78E ; ... else ldab L0107 bpl LF79B ; ; ... else ; ; MOVE MOTOR 1 STEP ; LF78E: ldab L0111 ; RUNING COUNTER ldx #LFFA3 ; STEP TABLE andb #0x03 ; MASK FOR 2 LOWEST BITS anda #0xFC ; MASK OUT A & B BITS abx ; ADD TO BASE ADDRES oraa 0x00,x ; INSET NEW BITS ; ; PW MODULATE MOTOR (100pct. D.C.) ; ; ; IF YES TURN STEPPER ON ; LF79B: bset 0x00,y,#0x04 bra LF7A5 ; ; ; IF NO TURN STEPPER OFF ; LF7A1: bclr 0x00,y,#0x04 LF7A5: jsr LF37B ; UP DATE THE PORTS ;нннннннннннннннннннннннн ; BASE BIAS DETERMINATION ;ннннннннннннннннннннннн ldab L0110 ; ? addb L010B ; T/F (Throttle Follower) Learn argument bcc LF7B2 ; br if no overflow ; ... else ldab #0xFF ; 255d LF7B2: pshb ; save ldab L0115 ; ? ldaa *L003C ; Old CCP Status Byte lsla ; b7 -> Cy pula bpl LF7BD ; ... else negb LF7BD: aba tab ldaa *L002B ;IAC Present Posit sba staa L0116 ; ? ldab *L002B ;IAC Present Posit subb L0116 ; ? ldab #0x80 ; 128d bcc LF7D4 ; ; ... else cba bhi LF7D9 ; ; ... else incb bra LF7D8 ; ; LF7D4: cba bcs LF7D9 ; ; ... else decb LF7D8: tba LF7D9: staa L0116 ; ??? LF7DC: brclr *L00A4,#0x40,LF7F0; Old MPU status reg, b6 = ??? ; ... else ldab *L0030 ; 2nd FMD byte andb #0x18 ; mask b3 & b4 (0001 1000) cmpb LC230 ; Fuel mode, 0 = 8 cyl PFI beq LF7EC ; Br if 8 cyl ; ... else bset *L0041,#0x01 ; Diagnostic mode wd 2 ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; MAIN INJECTION ROUTINE ; ; 1. Cks cyl Select, Set Err If mismach ; 2. ; 3. ; 4. ; 5. ; 6. ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн LF7EC: brset *L0035,#0x80,LF7F3; Minor lp wd 1, b78 = engine running ; ... else LF7F0: jmp LF8FB ; Exit if no inject ; LF7F3: brclr *L00F9,#0x08,LF814; R/S decay timer mode wd, b3 = delay finished ; ... else tst L01B0 ; ??? beq LF814 ; ; ... else ldaa L01B1 ; ??? beq LF807 ; ; ... else deca staa L01B1 ; ??? bra LF814 ; ; LF807: ldaa L01B0 ; ??? deca staa L01B0 ; ??? ldaa LC59C ; ??? (01d) staa L01B1 LF814: brclr *L000D,#0xFF,LF84F; Start up A/F ratio, MSB ; ... else ldd *L000F ; ???, 2 byte beq LF823 ; ; ... else subd #0x0001 ; decrement std *L000F ; ???, 2 byte bra LF84F ; ; LF823: ldaa *L00D3 ; ??? beq LF82C ; ; ... else deca staa *L00D3 ; ??? bra LF84F ; ; LF82C: ldaa *L0060 cmpa #0xD0 bls LF834 ; ; ... else ldaa #0xD0 ; Startup coolant LF834: ldab LC3DB ; ??? (04d) stab *L00D3 ; ??? ldx #LC40B ; Index Table ??? vs coolant temp jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) psha ldd *L000D ; Startup A/F ratio tsx subb 0x00,x sbca #0x00 bcc LF84C ; store startup A/F ratio if no underflow ; ... else ldd #0x0000 ; Set to zero LF84C: std *L000D ; Save startup A/F ratio pula LF84F: brset *L0037,#0x20,LF8AD; ??? md wd, b5 = blend spark ; ... else ldd *L0014 ; ??? beq LF85E ; ; ... else subd #0x0001 ; decrement std *L0014 ; and store ??? bra LF8AD ; ; LF85E: brclr *L003C,#0x80,LF86B; Old CCP status byte, b7 = spark adv decay time started ; ... else ldaa *L0011 ; ??? beq LF86B ; ; ... else deca ; decrement staa *L0011 ; and store ??? bra LF8AD ; ; LF86B: bset *L003C,#0x80 ; Old CCP status byte, set b7 = spark adv decay time started ldaa *L0060 ; Startup coolant cmpa #0xD0 ; 208d bcs LF876 ; Br if L.T. 208d ; ... else ldaa #0xD0 LF876: ldab LC18C ; ??? 02d stab *L0011 ; ??? ldx #LC1AB ; Index Startup Spark Advance Decay Time vs Startup Coolant jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) psha ; save lookup value tsx ldd *L0012 ; ??? subb 0x00,x sbca #0x00 bcc LF88E ; ; ... else ldd #0x0000 LF88E: std *L0012 ; ??? pula bne LF8AD ; ; ... else brclr *L0002,#0x01,LF8A9; Mode Wd 2, b0 = ERR 43 test in progress ; ... else ldaa L01A6 ; ??? adda LC236 ; ??? (01d) bcs LF8A4 ; ; ... else cmpa LC239 ; Amt of spark to add for ERR 43 test bls LF8AA ; ; ... else LF8A4: ldaa LC239 ; Amt of spark to add for ERR 43 test bra LF8AA ; ; LF8A9: clra LF8AA: staa L01A6 LF8AD: brclr *L003A,#0x10,LF8B7; BR IF NOT b4, (TOGGLE SF F/F) ; ... else ldaa *L003A ; SINGLE FIRE MD WD eora #0x40 ; TOGGLE b6, (O PW) staa *L003A ; Single Fire Md Wd LF8B7: ldaa *L003E ; Air Md Wd eora #0x01 ; TOGGLE b0, ?? staa *L003E ; Air Md Wd bset *L0039,#0x14 ; SET b4 & b2 in Enrich Fuel Man Wd ; b2 = Inj flag ; b4 = ?? ldx *L00C9 ; Accel Enrich Accum stx *L00DC ; Base PW, Last Inj ldd L0123 ; ACCEL ENR PW addd L0125 ; Pending fuel to add std L0123 ; ACCEL ENR PW brclr *L0035,#0x80,LF8D9; BR IF Engine NOT running ; ... else inc L0183 bne LF8D9 ; BR if no roll over ; ... else dec L0183 LF8D9: brset *L003F,#0x20,LF8E1; BR IF b5, D.E. QSEC ; ... else brclr *L0039,#0x40,LF8E9; BR IF NOT b6, ?? ; ... else LF8E1: ldab *L00E7 ; Num of Inj,s simce Start Of Acel Enr incb ; INC NUM INJ'S cmpb LC32D ; Injects in fuel limiting bcs LF8F9 ; BR IF NUM INJ'S LT LMT THRESH (2) ; ... else LF8E9: brset *L003F,#0x80,LF8FB; BR IF b7, decel enleanment ; ... else bclr *L0039,#0x40 ; CLR b6, ?? bclr *L003F,#0x20 ; CLR b5, D.E. QSEC clrb ; B <- 0 stab *L00E6 ; Zero NUM OF ASYNC PULSES SINCE ACEL ENR clra ; D <- 0 std *L00E0 ; Zero ACCEL ENRICH, ACUM FUEL LF8F9: stab *L00E7 ; Update NUM OF INJ,S SINCE START of ACCEL ENR ;************************************************* ;ANALOG MAF ; ;MULT ANALOG VAL x 7 TO LOOK ;LIKE FM MAF AND USE FM TABLES ;************************************************* LF8FB: ldaa #0xA0 ; A/D Ch A, Mass Air Sensor jsr LF2F7 ; To A/D subroutine staa *L00F3 ; MAF A/F VALUE ldab #0x07 ; mul ; MAF A/D VALUE std *L00F5 ; Val to calc Air Flow cmpa #0x06 bls LF90E ; ; ... else ;нннннннннннннннннннннннннннннннннннннннн ; Mass Air Flow TABLE 1 ; ; TBL = gms/Sec * 11.1 ; ;нннннннннннннннннннннннннннннннннннннннн ldd #0x06FF LF90E: ldx #LC5B3 ; TABLE SCALAR Mass Air Flow TABLE 1 cmpa #0x02 bcc LF918 ; ; ... else lsrd ; Div by 2 ldaa #0x01 LF918: pshb ldab #0x0B deca mul abx pula ; Val for Lk Up ldab 0x00,x pshb inx ; ADJ Tbl Addr jsr LF3F8 ; Call 2d Lk Up W/ Interp pulb ; ; ; Mass Air FLow Limit Ck's ; mul ; To Make Gms/Sec Disp value staa *L00BD brclr *L0040,#0xC0,LF95B; ; ... else ; Make Default Airflow ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; LK UP Default air flow offset per pct TPS vs RPM ; P/O ERR 33/34 ; ; Value = Gms/Sec * 100 pct, (Offset) ; ; TBL = Arg * 100 ;ннннннннннннннннннннннннннннннннннннннннннннннннн ldaa *L0058 ; RPM/25 ldx #LC222 ; Default air flow offset TBL jsr LF3F8 ; 2d Lk Up Routine ldab LC21E ; If TPS > 65.2%, use for MAF Default cmpb *L0083 ; TPS Ld Axis Var bcs LF93F ; BR IF TPS LT THRESH ; ... else ldab *L0083 LF93F: mul std *L00F1 ; DISPFLOW, Mass Air Flow gm/sec ldaa *L002B ; IAC Present Posit ldab LC21F ; Gms/sec Scale factor mul addd *L00F1 ; DISPFLOW, Mass Air Flow gm/sec bcs LF951 ; ; ... else addd LC220 ; 4 Gms/Sec default air flow offset bcc LF954 ; ; ... else LF951: ldd #0xFFFF ; Max Val if Overflow LF954: jmp LF9B0 ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; ; Table For ADD overflows ; ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн LF957: .db 0x00 .db 0x40 .db 0x80 .db 0xC0 ; LF95B: pshb psha ldx LC014 ; AFR MD WD 1 - used to set sign bit pulx ; Move A & B regs into X bpl LF9A4 ; AFR Md Wd 1 b7 = Use Filter for Air Flow pshx ; Save ; Up Date Air Filter tbl ; ldx #L0076 ; OLD AIR FLOW ldab *L007E ; Current Air flow incb stab *L007E ; Current Air flow lslb ; Mult by 2 andb #0x07 ; Lmt to 7 bytes abx ; Point X to Value to Replace pula ; Get NewSPK Unlimited Value pulb std 0x00,x ; Save In Avg Buffer ;ннннннннннннннннннннннннннннннн ; CALC MASS AIR FLOW TERM ; ;ннннннннннннннннннннннннннннннн ldx #L00F1 ; Gms/Sec Disp Value ldaa LC5FD ; Mult for sliding filter nega jsr LF39F std *L00F1 ; DISPFLOW, Mass Air Flow gm/sec ; ; SUM UNLIMITED READS FOR NEW VALUE ; ldx #LF957 ldd *L0076 ; OLD AIR FLOW addd *L0078 bcc LF98A inx LF98A: addd *L007A bcc LF98F inx LF98F: addd *L007C bcc LF994 inx LF994: lsrd ; Avg By dividing by 4 lsrd oraa 0x00,x ; Add in Overflow pshb psha tsx ldaa LC5FD ; Mult for sliding filter jsr LF39F ; To 8 x 16 Mult routine pulx addd *L00F1 ; DISPFLOW, Mass Air Flow gm/sec LF9A4: std *L00F1 ; DISPFLOW, Mass Air Flow gm/sec ; ; Max Flow Vs RPM ; ldx *L00F1 ; DISPFLOW, Mass Air Flow gm/sec cpx LC5FE ; Min Allowable Flow, (3 gms/Sec) bcc LF9B2 ; GO CK AGANST MAX FLOW vs RPM ; ... else ldd LC5FE ; USE Min Allowable Flow, (3 gms/Sec) LF9B0: std *L00F1 ; DISPFLOW, Mass Air Flow gm/sec ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; LK UP Max Air Flow vs RPM ; ; 17 LINE, 0 н> 6400 RPM ; ; TBL = Grams/Sec ;нннннннннннннннннннннннннннннннннннннннннннннннннн LF9B2: ldx #LC600 ; Max Air Flow Tbl ldaa *L0059 ; RPM/25 jsr LF3FF ; Call 2d Lk Up, No Offset (A = Ind. Var.) ; cmpa *L00F1 ; DISPFLOW, Mass Air Flow gm/sec bhi LF9C1 ; BR IF MAX fm tbl LT ACTUAL Gms/Sec ; ... else clrb std *L00F1 ; DISPFLOW, Mass Air Flow gm/sec LF9C1: rts ;************************************************* ;(SCI) Serial Data Status ; ;160 BAUD ??? ; ;************************************************* LF9C2: ldaa L017E ; ALCL NUM BITS TO TX bne LFA1B ; BR IF NON Z ; ... else ldaa #0x08 ; 8 bits to tx staa L017E ; ALCL NUM BITS TO TX ldaa *L0049 ; Md Wd bpl LF9F8 ; BR if NOT b7 TO 160 BAUD TBL MANAGER ; ... else ldaa *L004A ; Test Md wd bne LF9D7 ; BR IF NZ ; ... else jmp LFA3A ; EXIT via RTS ; LF9D7: ldx #0xFD3C ldab #0x10 mul abx ldab L017F ; LOCATION OF NEXT ENTRY IN EPROM TBL cmpb #0x10 bcc LFA11 ; ; ... else lsrb bcc LF9ED ; ; ... else ldaa L016F bra LFA2F ; ; LF9ED: lslb abx ldx 0x00,x ldd 0x00,x stab L016F bra LFA2F ; ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; 160 BAUD DIAGNOSTICS ; ; MINOR LP MD WD 2 ; b4 = DIAG SW IN DIAG MODE ; b5 = DIAG SW IN ALDL MODE ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; LF9F8: ldaa *L0036 ; MINOR LP MD WD 2 ldab L017F ; LOCATION OF NEXT ENTRY IN EPROM TBL beq LFA2F ; BR IF Z ; ... else anda #0x30 ; MASK FOR b4 & b5 bne LFA0D ; BR IF b4 & b5, Diag or ALDL Mode ; ... else cmpb LC611 ; Disp String length, (Bytes) BUB = 4 bhi LFA11 ; BR if GR ; ... else ldx #LC612 ; DIS Addresses, Xmit (BUB has 4 addresses) bra LFA28 ; ; LFA0D: cmpb #0x19 ; [$018A] - 25 bne LFA25 ; BR if [$018A] <> 25 TO 160 BAUD DIAGNOSTICS ; ... else LFA11: clra ; A <- 0 staa L017F ; Zero [$018A], LOCATION OF NEXT ENTRY IN EPROM TBL deca ; A <- $FF staa L0180 ; ALCL XMIT BYTE bra LFA3A ; EXIT via RTS ; LFA1B: dec L017E ; ALCL NUM BITS TO TX lsl L0180 ; ALCL XMIT BYTE bcc LFA35 ; Output Nxt byte ; ... else bra LFA3A ; EXIT via RTS ; ;*********************************************** ;ALCL Xmit Table ; ;Table Of Addr's vs DATA ; ;*********************************************** LFA25: ldx #LC621 ; INDEX ADDRESS TABLE LFA28: decb ; [$018A] - 1 lslb ; x 2 bytes per address abx ; ADJ INDEX ldx 0x00,x ; GET DATA RAM ADDRESS ldaa 0x00,x ; GET DATA LFA2F: staa L0180 ; SAVE DATA TO ALCL XMIT BYTE inc L017F ; LOCATION OF NEXT ENTRY IN EPROM TBL LFA35: ldaa #0x04 ; Ld Ser Data w/0, 350 usec jsr LF5EB ; To turn ON a bit LFA3A: rts ; ; ;***************************************************** ;MAJOR LOOP SUBROUTINE SEG 3 ; ;LOG RAM ASSIGNMENT ; ;************************************************* ; ; CK IF HEADS UP CONNECTED ; LFA3B: ldaa *L0034 ; MINOR LOOP MD WD 1 bpl LFA42 ; Exit if not H.U. ; ... else jsr 0x5815 ; TO HEADS UP <нннннн ;ннннннннннннннннннннннннннннннннннннннннннннннннн LFA42: rts ; ;***************************************************** ;ннннннннннннннннннннннннннннннннннннннннннннннннн ; Fuel Out Subroutine ; ;ннннннннннннннннннннннннннннннннннннннннннннннннн LFA43: ldaa *L00E9 ; DIFF Ld Val ACCEL ENR FACTOR brclr *L0039,#0x02,LFA57; If ACCEL ENR FLG CLR ; ... else brclr *L0039,#0x04,LFA57; IF NO KiNJ SINCE LAST PULSE ; ... else suba *L00EA ; DIFF LlD VvAL FOR ACCCEL ENRICH bcc LFA55 ; if > = 0 ; ... else clra ; LIMIT TO ZERO bclr *L0039,#0x08 ; CLR ACEL ENR FLAG LFA55: staa *L00E9 ; Diff Ld Val Acel Enr Factor LFA57: bclr *L0039,#0x04 ; Reset Inj Flg bset *L0039,#0x02 ; Set 1st time Acel enr flg ldx #L00C9 ; Get data jsr LF39F ; Scale w/8 X 16 Mult addd *L00C9 ; Add to data bcc LFA6A ; ; ... else ldd #0xFFFF ; Set Max limit LFA6A: std *L00C9 ; ;ннннннннннннннннннннннннннн ; Fuel Output Cnt'l ;нннннннннннннннннннннннннн LFA6C: brclr *L0003,#0x20,LFA99; Mode Wd3, VATS OK ; ... else brset *L0034,#0x10,LFA99; BR IF b4, (1= IGN OFF) ; ... else brset *L0044,#0x02,LFA99; 0 if in Decel C/O ; ... else brclr *L0035,#0x80,LFAA0; B/P hi RPM & MPH C/O tst if ; н> not running ; ... else ldx #LC3AF ; Hi fuel C/O limit ldaa *L0066 brclr *L0044,#0x40,LFA88; If fuel not C/O ldx #LC3B2 ; Hi fuel C/O limit LFA88: bclr *L0044,#0x40 cmpa 0x00,x ; Is MPH > than lmt bhi LFA96 ; If Yes ldd *L0099 ; Current Minor LP Ref Period fm MPU cpd 0x01,x ; Is RPM > than limit bcc LFAA0 ; If not LFA96: bset *L0044,#0x40 ; Set Fuel cutoff flg LFA99: ldx #0x0000 ; Set Acel Enr to 0 stx *L00E0 ; Acel Enrich, Acum Fuel stx *L00C9 LFAA0: brclr *L003F,#0xA0,LFAA6; ; ... else bra LFAAF ; ; LFAA6: brclr *L0039,#0xC0,LFADB; ; ... else ldx #LFB27 ; Accel Enrich Fuel Subroutine bra LFAB5 ; Go do subroutine ; LFAAF: ldd LC4EA ; Lmt Fuel Factor fm ROM ldx #LFB3E ; Alternate entry point to Accel Enrich Fuel Subroutine LFAB5: jsr 0x00,x ; dispatch to subroutine at entry point indexed by X reg pshx pshb psha pulx pula pulb pshx tsx subd 0x00,x ; Fuel Supplied н lmt < 0 ? pulx bcs LFADB ; If so ; ... else pshb psha tsx ldd *L00C9 subd 0x00,x pulx bcs LFAD4 cpd LC3AB ; Min Base PW fm ROM bcc LFAD6 ;if so do 0 fuel ; ... else LFAD4: clra clrb LFAD6: pshb psha pulx bra LFADD ; ; LFADB: ldx *L00C9 LFADD: brclr *L003A,#0x80,LFAE8; BR IF NOT b7, (IN SNGL FIRE MODE) ; ... else brclr *L003A,#0x40,LFAE8; BR IF NOT b6, (0 PW) ldx #0x0000 LFAE8: stx L0125 ; Save Pending fuel for ; н> acum fuel beq LFB14 ; If 0 JMP AROUND OFFSET ; ... else cpx #0x0100 ; 3900 usec bcc LFB02 ; BR IF PW'S GT 3900 usec ; ... else pshx ; TEMP SAVE PW TO STX ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; Inj Offset for Small PW's vs Base PW ; ; FOR PW'S LT 3.9 Msec ; ; TBL = Msec * 65.536 Msec ;нннннннннннннннннннннннннннннннннннннннннннннннннн pula pula ; GET LSB OF PW FM STX ldab #0x20 ; Offset for Lk Up, (Min Lk up val) ldx #LC3C6 ; Table Addr jsr LF3F2 ; Call 2D Lk Up, (Low PW) tab ; COPY RESULTS TO B Reg ldx L0125 ; GET BPW abx ; ADD IN PW OFFSET LFB02: ldab *L00D2 ; INJ OFFSET CORR, Msec * 65.636 abx ; ADD IN PW OFFSET, (twice) abx ;нннннннннннннннннннннннн ; Min Base PW check ;нннннннннннннннннннннннн bclr *L0034,#0x02 ; b1, FORCE LOP PW, RESULT OPN LP cpx LC3AB ; base PW bhi LFB14 bset *L0034,#0x02 ; Set LOW PW RESULT OPN LP ldx LC3AD ; Default Base PW fm ROM ; ; Simu Fuel ; LFB14: cpx #0x7FFF bcs LFB1C ldx #0x7FFF LFB1C: stx 0x3FD0 ; To MCU brset *L003A,#0xC0,LFB26; BR IF b7 & b6, (IN SF & 0 PW) ; ... else stx L0463 ; To Base PW LFB26: rts ;***************************************************** ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; Accel enrich Fuel Subroutine ; INDEXED LK UP ; ; ; Bits 0 н 3 Are after Next Inject ; Bits 4 н 7 Trigger To Next inject ;нннннннннннннннннннннннннннннннннннннннннннннннннн LFB27: ldx #LC34A ; Fuel Lmt vs COOL ldab *L005D ; COOLANT lsrb ; Scale Coolant lsrb lsrb lsrb lsrb ; COOL/32 ; ; AFTER NEXT INJECT ; abx ; ADJ TBL POINTER (0 н 9) ldab 0x00,x ; Get fuel lmt factor lsld ; Get 4 bits TO MSB lsld lsld lsld andb #0xF0 ; 1111 0000, Mask, after Next Inject ; ; TRIGGER To NEXT INJECT ; ldaa 0x00,x ; Get fuel lmt factor FM TBL anda #0xF0 ; 1111 0000, Mask, Trig To Next inject ; ; $FB3E is Alternate entry point to subroutine ; LFB3E: brclr *L0039,#0x10,LFB43; BR IF NOT b4 ; ... else tba LFB43: ldx #L00C9 jsr LF39F ; Fuel Lmt x ?? (8 x 16 mult) lsld bcc LFB4F ; BR IF NO OVERFLOW ; ... else ldd #0xFFFF ; USE MAX LMT LFB4F: pshb psha ; SAVE TO STX ldd *L00DC ; Base PW, Last Inj addd *L00E0 ; Acel Enrich, Acum Fuel bcc LFB5A ; BR IF NO OVERFLOW ; ... else ldd #0xFFFF ; USE MAX LMT LFB5A: pshb ; SAVE TO STX psha pulx pula pulb rts ; ;***************************************************** ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; TPS ACCEL ENR ROUTINE ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн LFB60: ldaa *L0040 anda #0x24 ; b5 & b 2 bne LFB93 ; BR IF NZ ; ... else ldaa *L0083 ; TPS Ld Axis Var suba *L00E4 ; Transient TPS bcc LFB74 ; BR IF TPS GT TRANSIENT TPS ; ... else ; ; NEG TPS DIFF ; coma cmpa LC328 ; 0 Async Accel Enrich if Neg ; Diff TPS > 3.9% bhi LFB93 ; ; ... else bra LFB99 ; ; ; POS TPS DIFF ; LFB74: cmpa LC327 ; 3.9% Min Diff TPS for Pwr Enrichment bcs LFB93 ; BR IF TPS L.T. 3.9% Min Diff brset *L0039,#0x80,LFB8E; BR IF b7 ; ... else bclr *L0039,#0x10 ; CLR b4 ldx #L0184 LFB83: clr 0x00,x inx inx cpx #L01A4 bne LFB83 ; ; ... else staa *L00DB ; DIFF TPS for ACEL ENRICH LFB8E: bset *L0039,#0xE0 ; SET b&, 6 & 5 bra LFB99 ; ; LFB93: clr L00E6 ; CLR Num of Async Pulses Since Accel Enr bclr *L0039,#0x80 ; CLR b7, (IN TPS ACELL ENRICH) LFB99: rts ; ;***************************************************** ; LFB9A: ldaa L4008 ldaa #0x27 ; 0010 0111, staa L4007 ; SET SCI Cntl, (CSR) ldaa L4009 ; Read SERIAL DATA REG ; ; SET MPU CSR .... ; ldd 0x3FFC ; Read MPU CSR orab #0x04 ; SET b2 jsr LF4EE ; 11 usec DELAY std 0x3FFC ; MPU CSR ldaa L4004 anda #0xF7 staa L4004 rts ; ;************************************************* ; SERIAL DATA RECIEVE SUBROUTINE ; ; CALLED BY SCI INTERUPT ; ; CK'S FOR ERR'S, FRAME, OVER RUN ETC, IF ERR THEN ; FLAG ERR, SET SCI WAKE UP AND EXIT. ; ; IF NO SCI ERR, UP DATE RX CK SUM, CK RX BYTE CNT'R, ; ; IF 1st BYTE: ; CK vs ROM TBLS FOR A MATCH TO QUAL. ; SAVE INDEX ADDRESS IF A MATCH & INCR RX BNYTE CNT'R ; ELSE .... PUT SCI BACK TO SLEEP IF NO MATCH. ; ; IF 2nd BYTE: ; SUB OFF 0x55 TO GET BYTE COUNT. ; ; IF LAST BYTE: ; CK THE RX CK SUM, SW SCI TO TX AND RDY TO TX DATA ; IF BAD CK SUM (NZ), FLAG ERR & PUT SCI BACK TO SLEEP ;----------------------------------------------------- ; LFBB9: ldab L4008 ; TX/RX STATUS REG ldaa L4009 ; SERIAL DATA REG ldx L0134 ; INDEX current I/O BUFFER address pointer ; ; CK FRAMING & OVERRUN ERRORS ; bitb #0x0E ; Ck for OR or FRAME ERROR 0000 1110 bne LFC21 ; BR IF ERROR ; ... else ; ; UPDATE CKSUM ; tab ; DATA TO B reg addb L0133 ; ADD DATA TO CK SUM stab L0133 ; SAVE NEW CK SUM ; ; CK SCI BYTE CNT'R TO SEE WHICH BYTE IS EXPECTED ; ldab L0132 ; GET BYTE COUNTER bne LFBF0 ; BR IF NZ ; ... else IF BYTE CNT = 0, THE INCOMING BYTE S/B A DEVICE CODE ;------------------------------------------------------ ; ; Process Byte 1, Device Code ; ;------------------------------------------------------ ldx #LC651 ; INDEX Device Code in EPROM LFBD5: cmpa 0x02,x ; Compare SCI data byte to byte at [X]+2 beq LFBE6 ; IF CODE (Z) ; ... else ldx 0x00,x ; NXT ROM ADDR bne LFBD5 ; LAST ADDR ? ; ... else ; DEVICE CODE NOT FOUND ldaa #0x27 ; 0010 0111, staa L4007 ; SLEEP CMD, TX/Rx CSR clrb jmp LFC73 ; ; ; DEVICE CODE FOUND ; LFBE6: stx L0134 ldaa #0x25 staa L4007 bra LFC1B ; ; LFBF0: cmpb #0x01 bne LFBFB ; ; ... else suba #0x55 staa L0165 bra LFC1B ; ; LFBFB: subb #0x02 cmpb L0165 bcc LFC23 ; ; ... else tstb bne LFC16 ; ; ... else pshb tab cmpb #0x04 bhi LFC0D ; ; ... else lslb abx LFC0D: ldab #0x0A abx ldx 0x00,x stx L0134 pulb LFC16: ldx 0x08,x abx staa 0x01,x LFC1B: inc L0132 jmp LFC76 ; ; LFC21: bra LFC66 ; TO BRIDGE ; LFC23: ldab L0133 ; CKSUM beq LFC2A ; BR IF Z (OK CKCUM) ; ... else bra LFC66 LFC2A: ldab 0x04,x bmi LFC66 ; ; ... else ldx L0134 ; TBL POINTER FOR OCB ldaa 0x02,x ; GET MSG ID ldab L4008 ; SCI TX/RC STATUS REG ; ; TX MSG ID ; staa L400A ; TX Data Reg, (SCI) staa L0133 ; SCI CKSUM ldab #0x01 ; INIT BYTE CNT stab L0132 ; SAVE BYTE COUNTER ldaa L4004 ; Par I/O CSR oraa #0x08 ; ENABLE TX VIA SXR IC staa L4004 ; Par I/O CSR ldaa #0x81 ; 1000 0001, CLT TE TO FORCE IDLE staa L4007 ; SET SCI Cntl, (CSR) ldaa #0x89 ; 1000 1001, REнENABLE TX staa L4007 ; SET SCI Cntl, (CSR) ldaa L0137 bne LFC5B clr L0159 LFC5B: cmpa #0x04 bne LFC62 jsr LFC77 LFC62: clr L0166 rts ;***************************************************** ; ; CLR CURRENT TBL POINTER ; LFC66: clra clrb std L0134 ; CURRENT TBL POINTER ; ; SET SLEEP MODE ; ldaa #0x27 ; 0010 0111 staa L4007 ; SET SCI Cntl, (CSR) stab L0132 ; CLR BYTE COUNTER LFC73: stab L0133 ; CLR CKSUM LFC76: rts ; ;***************************************************** ; ----------------------------------------------------- ; XFER DATA FROM ICB TO MODE 2,3 & 4 OCB ; Called after message received w/ OK checksum ; LFC77: psha pshb ldaa 0x05,x ; GET INPUT MSG LENGTH ldx #L0137 ; INPUT BUFFER (ICB) ADDRESS+1 LFC7E: ldab 0x00,x stab 0x22,x ; XFER BYTE ICB TO ICB + 34d ; MODE 2,3 & 4 OCB inx ; NEXT ADDRESS deca ; DEC BYTE CNT bne LFC7E ; TILL DONE ; ... else pulb pula rts ; ;***************************************************** ;SERIAL MODE XMIT SUBROUTINE ; ;PROCESS SERIAL DATA via SCI PORT OF HC6801 ;READ BYTE COUNTER, L012F. ;FROM THE BYTE COUNT THE BYTE TO BE OUTPUTED IS ;DETERMINED TO BE: ;1. A DEVICE CODE ;2. NUMBER OF DATA BYTES ;3. DATA, FROM ROM DATA TBL or RAM DATA TBL ;4. 2 COMP CHECKSUM ;NOTE: (If last byte sent was cksum, ;the SCI is switched to wakeup mode) ; ; ;SEND DATA TO SCI PORT ;***************************************************** ; ; THE 1st BYTE WAS SENT IN RX ROUTINE WHEN ; XMIT WAS STARTED ; LFC89: ldx L0134 ; INDEX CURRENT DEVICE TBL ldab L0132 ; GET BYTE COUNTER cmpb #0x01 ; 2nd BYTE TO BE SENT bne LFCB0 ; ; ... else ; ; IF L012F = 1 THEN DATA = NOUT + NUM OF DATA BYTES ; ldaa 0x04,x ; DATA = NOUT + NUM OF DATA BYTES ldab L0137 ; INPUT CONTROL BLOCK (ICB+1) cmpb #0x02 ; Test b1 bls LFCA9 ; BR if <= ; ... else ldaa L0165 ; TX MSG LEN suba #0x01 ; less one cmpb #0x03 ; Test b3 of ICB beq LFCA7 ; BR if b3 CLR ; suba #0x0A ; take away 10 LFCA7: asra ; /2 inca ; INR MSG LENGTH LFCA9: staa L0165 ; TX MSG LEN adda #0x55 ; ADD ON TO MSG LENGTH, (85d) bra LFD27 ; GO TX SCI DATA ; LFCB0: cmpb #0x02 ; bne LFCB9 ; ; IF ... = 2 THEN DATA IS MODE (SAME AS MODE IN RX'ED MSG) ; ... else ldaa L0137 ; INPUT CONTROL BLOCK (ICB+1) bra LFD27 ; GO TX SCI DATA ; LFCB9: subb #0x02 ; SER BYTE CNT TO DATA BYTE CNT cmpb L0165 bcc LFD21 ; BR IF NOT ; ... else ; ; IF (0 <= L012Fн .... < NOUT) THEN SER DATA ; IS REGULAR DATA BYTE. .... IS NUM OF SERIAL ; SENT PRIOR TO SENDING REGULAR DATA, IN THIS ; CASE IT IS 2: THE DEVICE CODE & NUMBER OF DATA BYTES ; brset *L0037,#0x08,LFD15; ; ... else decb ldaa 0x03,x ; GET EPROM TBL OPT fLG'S bita #0x80 ; b7, EPROM TBL INPUT bne LFCD6 ; BR IF EPROM TBL ; ... else bita #0x40 ; b6, RAM TBL bne LFCDE ; BR IF RAM TBL ; ... else ; ; DATA IS FM OUTPUT BUFFER ; ldx 0x06,x ; Point to Output DCB abx ; ADD BYTE CNT TO INDEX ldaa 0x01,x ; Get Data fm Output buff bra LFD27 ; GO TX DATA ... ; ; DATA IS EPROM TABLE DRIVEN ; LFCD6: lslb ; GET DATA FROM EPROM TBL abx ; ADJUST INDEX ldx 0x0A,x ; POINT to ERPOM Tbl ldaa 0x00,x ; GET DATA FROM TBL bra LFD27 ; GO TX DATA ... ; ; DATA IS FM RAM TBL ; LFCDE: ldx 0x06,x ; RAM Tbl Addr ldaa L0137 ; INPUT CONTROL BLOCK (ICB+1) cmpa #0x02 ; Mode 2 ? beq LFCF7 ; BR IF MODE 2 ; ... else cmpa #0x04 ; Mode 4 ? bne LFCF0 ; BR IF MODE 4 ; ... else pshb ldab #0x0A abx pulb ; ; ; MODE 4 <ннннн**** ; LFCF0: inx ; NEXT ADDRESS FROM RAM lslb abx ; ADJ POINTER ldx 0x01,x ; GET NEW ADDRESS bra LFCFB ; GET DATA & XMIT ; ; MODE 2 <ннннн**** ; LFCF7: inx ; MODE 2 CALC NEXT ADDRESS ldx 0x01,x abx ; LFCFB: cpx #0x3000 bcs LFD1D cpx #0x6FFF bhi LFD1D pshx pula anda #0x01 psha pulx ldd 0x00,x stab L0182 bset *L0037,#0x08 bra LFD27 LFD15: bclr *L0037,#0x08 ldaa L0182 bra LFD27 ; ; ; GET 8 DATA FROM INDEXED VAL & GO TX DATA ; ; LFD1D: ldaa 0x00,x ; GET DATA bra LFD27 ; GO XMIT DATA ; LFD21: bne LFD35 ; BR IF NZ ; ... else ; ; IF ( ) THEN THE DATA TO BE SENT ; IS THE CK SUM (2'S COMPLEMENT) ; ldaa L0133 ; CKSUM nega ; NEGATE CKSUM FOR 2'S COMP ; ; XMIT DATA, UP DATE CKSUM & INCREMENT BYTE CNTR ; LFD27: staa L400A ; SCI TX Data <ннннн** adda L0133 ; UPDATE CKSUM staa L0133 ; NEW CKSUM inc L0132 ; INCR BYTE COUNTER bra LFD4B ; EXIT via RTS ;ннннннннннннннннннннннннннннннннннннннннннннн ; ALL BYTES HAVE BEEN SENT, SCI CLEARED & ; SWITCHED TO WAKE MODE ;ннннннннннннннннннннннннннннннннннннннннннннн LFD35: clra clrb staa L0133 ; CLR CKSUM std L0134 ; CLEAR DEVICE TBL POINTER staa L0132 ; CLR BYTE COUNTER ldaa L4008 ; tx/rx status reg ldaa L4009 ; SERIAL DATA REG, (CLR FRAME ERR) ; ; SWITCH FROM XMIT TO WAKE UP MODE ; ldaa #0x41 ; b6 & b0 staa L4007 ; SET SCI Cntl, (CSR) LFD4B: rts ; ;************************************************* ; ;TEST TABLE ; ;************************************************** ; ;Factory System test (ECM test) ; ; ;CALLS: P4 XMIT S3 ;A/D READ BATTTERY ;P4 CHECK SUM ;P4 A/D READ ; ; ;TABLE: HARDWARE I/F: BOFFECU ;PRP ; ; ;************************************************* .dw L0170 ; A/D, Ch 0/1, PRESSURE .dw L0172 ; A/D, Ch 2/3, o2 .dw L0174 ; A/D, Ch 4/5, Coolant, 4K .dw L0176 ; A/D, Ch 6/7, PUMP V .dw L0178 ; A/D, Ch 8/9, MAT Temp .dw L017A ; A/D, Ch 10/11, MAN A .dw L017C ; 4K Coolant temp .dw L004B ; FMD BYTE 1 & 2 .dw LC000 ; EPROM ID .dw LC002 ; Date Code .dw LC004 ; Seq Num .dw L0168 ; IEEE EPROM Ck Sum .dw L016A ; EEPROM Ck Sum .dw L4002 ; Serial Data Latch .dw L0049 ; MODE WD .dw L0000 ; MINOR LOOP COUNTER .dw 0x3FC0 ; Ref Period Timer .dw 0x3FC2 ; Timer #1 (Input 5) .dw 0x3FC4 ; Timer #2 (Input 6) .dw 0x3FC6 ; Cntr #1 (Cum Pulses) .dw 0x3FC8 ; Cntr #2 SPK PERIOD, (SPK Feed Bk, in 3) .dw 0x3FCA ; Cntr #3 (16.5 Khz cntr if In 4 is hi) .dw 0x3FE0 ; Cntr #4 (Cum pulses on in 5) .dw 0x3FF8 ; Timer #1A (B Cnt'r Last H.U Pulse) ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; FACTORY TEST ROUTINE ; ; ; Read FDM byte 1 & 2 ; (Fuel Modeling Device) ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; ; READ FMD BYTE 1 & 2 LFD7C: ldaa L4006 ; lds #0x01FF ; Set up STX staa L0181 ; UP CNTS VAL WHEN 6.25 Msec Ins. brclr *L004A,#0x03,LFD98 ; set b0 & b1 ; Mode = 4, (OD on, & in Drive) adda #0x0B ; 11d staa L4006 ; Match register bset *L0046,#0x03 ; 0000 0011, Ser data out Wd ; set b0 & b1. 8192 mode ldaa #0xFB ; CLR b2 jsr LF5DD ; Set Bit's, (CPU) bra LFDA0 LFD98: adda #0xCD staa L4006 ; Match register bclr *L0046,#0x03 ; clr b0 & b1,Ser data mode wd ; 11 = 1 & 2nd 160 baud interupt LFDA0: jsr LFE81 ; Tst for Factory mode ; ; SEL FMD CHIP ; ldx #L4002 ; FMD Data Latch bset 0x00,x,#0x04 ; b2 ldaa *L0032 ; FACT TST, FMD SERIAL INPUT oraa #0x80 ; Set b7 psha ; Save on STX jsr LF332 ; Call Xmit to Serial Data tab ; Byte 2 to B reg pula anda #0x7F ; CLR b7 ; ; Toggle FMD CS To do Read ; (0x4002 FMD Data Latch) ; bclr 0x00,x,#0x04 ; CLR b2 bset 0x00,x,#0x04 ; SET b2 jsr LF332 ; Call Xmit to Serial Data std *L004B ; FACTORY TST FMD BYTE 1 M& 2 bclr 0x00,x,#0x04 ; Deнselect FMD Chip cli ; CLR & RESTIORE INTERUPTS ; ; FACT TST MINOR LP Cnt'r ; Roll over at 96 counts ; ldaa L0167 ; FACT TST MINOR LP Cnt'r inca ; INCR LP CNT'R cmpa #0x60 ; 96d Roll over at 96 counts bcs LFDCD ; BR IF LP CNT'R GT 96 ; ; ... else clra LFDCD: staa L0167 ; FACT TST MINOR LP Cnt'r ; ; BATTERY/IGNITION ROUTINE ; jsr LFE7B ; Get Battery voltage ldab *L0033 ; Ign Tmr cmpa #0x28 ; 40d Tst for Batt < 4 VDV bhi LFDDE ; BR IF BATT LT 4.0 VDC ; ... else cmpb #0xA0 ; 160d Has Ign Been off for 1 sec ? bcs LFDFA ; ; ... else swi ; Reset MPU for Pwr Down LFDDE: tstb beq LFDFB ; ; ... else cmpa #0x5A ; 90d Tst for Ign on, (Batt V > 9 VDC) bcs LFDFB ; ; ... else clrb ldaa *L004B ; FACTORY TST FMD BYTE 1 anda #0x03 ; b0 & b1 cmpa *L004A ; Ck For Mode Changed ? beq LFDFB ; Yes It Has Changed ; ... else staa *L004A stab L017E ; ALCL NUM BITS TO TX stab L0167 ; FACT TST MINOR LP Cnt'r decb stab L017F ; LOCATION OF NEXT ENTRY IN EPROM TBL LFDFA: incb ; Bump up ign timer LFDFB: stab *L0033 ; IGN OFF TIMER ldd #0xFF00 ; Restart COP std L400B ; COP ARM/CLR ; ; Using FTMW 1 ; ldd 0x3FFC ; MCU CSR psha ldaa *L0032 ; FACT TST, FMD SERIAL INPUT eora #0x02 ; Toggle bit 1 tst L004A ; Mode 1 ? bne LFE2B orab #0x04 ; SET b2, Rase ALDL Line brset *L004B,#0x04,LFE18; BR IF b2, Fact tst wd #1. ; ... else andb #0xFB ; CLR b2 LFE18: tst L0033 ; IGN OFF TIMER, Is Ign off ? bne LFE21 ; BR IF TMR NZ ; ... else brclr *L004B,#0x03,LFE23;BR IF NOT b0 & b1, Fact tst wd #1 ; ... else ; ; Start toggeling COP 2 ; LFE21: staa *L0032 ; FACT TST, FMD SERIAL INPUT LFE23: pula std 0x3FFC ; MCU CSR bsr LFE80 ; Exit w/RTS bra LFE55 ; Toggle COP 2 ; ; Toggle COP 2 ; LFE2B: staa *L0032 ; FACT TST, FMD SERIAL INPUT pula std 0x3FFC ; MCU CSR ldaa *L004A ; Test mode lsra bcs LFE8F ; ; ... else ; ; MISC TEST MODE (3) ; clra ldab #0xC5 ; Set 3 msec Async PW std 0x3FF2 ; Async PW Cnt'r bsr LFE80 ; Exit w/rts ; ... else ldd 0x3FFC ; MCU CSR oraa #0x04 ; SET b2 bsr LFE80 ; Exit w/RTS ; ... else std 0x3FFC ; MCU CSR ldx #0x0000 ; Zero NV Mem Ck sum ldd #0x002F jsr LF467 ; Ck Sum Subroutine sty L016A ; Save NV RAM Ck sum ; ; All Off Mode ; LFE55: ldd 0x3FFC ; MCU CSR, Get Flags anda #0xFB ; CLR b2, Reset Async andb #0xEF ; CLR b7, Disable SPK orab #0x08 ; SET b3, Turn Off Err lamp bsr LFE80 ; Exit w/RTS, (Wait) ; ... else std 0x3FFC ; MCU CSR, Save new Arg clra ; Clr D reg. clrb bsr LFE80 ; Exit W/RTS ; ... else std 0x3FD0 ; Sync Fuel = 0 ldaa 0x4004 ; Par I/O CSR, EFI PW anda #0xF9 ; 1111 1001, Trn off FAN & IAC staa 0x4004 ; Par I/O CSR ldy #0x7000 bsr LFEC7 jmp LFF7D ; Exit FDM ; ; Get Battery voltage ; LFE7B: ldaa #0x10 ; A/D CH 1, (Battery Volts) LFE7D: jsr LF2FC ; To A/D routine LFE80: rts ; ;***************************************************** ;ннннннннннннннннннннннннннннннннннннннннн ; Test ALDL Mode for an A/D Value ; between 40 to 100 ; ; Branch to Appropriate mode on exit ;ннннннннннннннннннннннннннннннннннннннннн LFE81: ldaa #0x70 ; A/D Ch 7, (Start/Run Pwr) bsr LFE7D ; Want 40 min, 100 max cmpa #0x28 ; >= 40 ? bcs LFE8D ; If < 40 then SWI cmpa #0x64 ; 100 bcs LFE8E ; if < 100 then RTS ; ... else LFE8D: swi ; SOFTWARE INTERUPT LFE8E: rts ; ;***************************************************** ; I/O Check modes (2 & 4) ; Modes 2 & 4 xmit different ; serial data ;ннннннннннннннннннннннннннннннн ; Read all (12), A/D's ; & save results to table FDMPRES ;ннннннннннннннннннннннннннннннн LFE8F: ldx #L0170 ; Set up A/D storage in RAM clra ; Set A/D Ch 0, (Rd Cal Pack) clrb LFE94: jsr LF2F7 ; Call To A/D READ subroutine staa 0x00,x ; Save Results inx ; Bump up A/D storage pointer addb #0x10 ; Next A/D chan tba ; COPY B to A reg cmpb #0xC0 ; Stop if CH C, (0xC0) bcs LFE94 ; Loop if < ch C, (#12) ; ... else ; ; Sw coolant P.U's every ; 25 MSEC, (bits 0 & 1) ; ldab L0167 ; FACT TST MINOR LP Cnt'r bitb #0x03 ; b0 & b1 bne LFEBD ; BR IF b0 & b1 ; ... else ldaa L0174 ; Get coolant results brclr *L0032,#0x01,LFEB4; BR IF NOT b0, (FACT TST, FMD SERIAL IN) ; ... else staa L017C ; Save 348 Coolant results bra LFEB7 ; EXIT COOL FOR NEXT ROUTINE ; LFEB4: staa L017D ; Save 4K Coolant temp ; Toggle COP 2 LFEB7: ldab *L0032 eorb #0x01 ; TOGGLE b0 stab *L0032 ; FACT TST, FMD SERIAL INPUT LFEBD: ldab L0167 ; FACT TST MINOR LP Cnt'r bitb #0x0F beq LFED9 ; BR IF NOT 0x0F ; ... else jmp LFF29 ; ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; >>> 100 MSEC logic <<< ; ; Subroutine for writing s DC to all 6 ; PWM's, required DC must be in Y reg ;нннннннннннннннннннннннннннннннннннннннннннннннннн LFEC7: ldx #0x3FD2 ; EGR PW Cnt'r LFECA: sty 0x00,x inx inx cpx #0x3FDC ; SPK Dwell period cnt'r bne LFECA sty 0x3FCC rts ; ;***************************************************** ;ннннннннннннннннннннннннннннннн ; Exrcise PWM outputs ; ;ннннннннннннннннннннннннннннннн LFED9: cmpb #0x20 ;0010 0000, (seg xo in B reg) bls LFEDF subb #0x30 LFEDF: ldy #0xD39A cmpb #0x10 bhi LFEF1 ldy #0xD200 bcs LFEF1 ldy #0xD066 ; ;нннннннннннннннннннннннннннннн ; Tgggle MALF & Fan ;ннннннннннннннннннннннннннннннн LFEF1: bsr LFEC7 bsr LFE80 ldd 0x3FFC ; MCU CSR ldx #0x4004 psha orab #0x10 ; b4 ldaa L0167 ; FACT TST MINOR LP Cnt'r bita #0x10 ; Test Bit 4 beq LFF0C ; ; ... else orab #0x08 ; Make sure SPK is enabled (Bit 3) bset 0x00,x,#0x06 bra LFF11 LFF0C: andb #0xF7 ; CLR b3, ; MALF lite on, Fan off bclr 0x00,x,#0x02 LFF11: pula std 0x3FFC ; MCU CSR ;ннннннннннннннннннннн ; Exercise IAC Motor ;ннннннннннннннннннннн ldaa L016E ; IAC motor lsla adca #0x00 staa L016E ; Out 1 step to IAC motor anda #0x03 ; 0000 0011, save IAC A&B states ldab 0x4002 ; Get Serial Data Latch andb #0xFC ; 1111 1100, Mask for old IAC A & B & aba ; Add in new IAC a & B staa 0x4002 ; Get Serial Data Latch ;нннннннннннннннннннннннннннннн ; End of 100 Ms Routine ;нннннннннннннннннннннннннннннн ;ннннннннннннннннннннннннннннннн ; DO SPARK & FUEL ; based on RPM ;ннннннннннннннннннннннннннннннн LFF29: ldx 0x3FC0 ; Ld Last 2 Ref Periods pshx ; Save ref (RPM) pula pulb lsrd ; Divide Ref Per/4 lsrd ldy #0x0000 std L016C ; Save Ref Period for later ldd #0x028F ; 10 Ms Period cpx #0x028F ; < 100 hZ (655d) ? bhi LFF51 ; If Yes ; ... else cpx #0x0148 ; > 200 Hz (328d) ? bcs LFF5C ; If yes ;ннннннннннннннннн ; Base P.W. = 5Ms ; Dwell = 4 Ms ;ннннннннннннннннн lsrd std 0x3FD0 ; BPW = 5 msec ldab #0x06 ; Set dwell = 4 msec pshb psha clra clrb bra LFF6E ; ;ннннннннннннннннн ; Base P.W. = 10 Ms ; Dwell = 5 Ms ;ннннннннннннннннн LFF51: std 0x3FD0 ; Sync fuel cnt'r lsrd ; Div by 2 pshb ; 5 msec Dwell psha ; ldd L016C ; SPK Fall= REFPER/4(45 Deg retard) bra LFF6E ; Ref period ;ннннннннннннннннн ; Base P.W. = 1 Ms ; Dwell = 3 Ms ;ннннннннннннннннн LFF5C: ldy #0x0042 ; 1 Ms Fuel dly ldd #0x0042 ; Set BPW = 1 msec std 0x3FD0 ; Sync fuel cnt'r ldab #0xC5 ; 197d Set 3 msec Dwell pshb psha clrb subd L016C LFF6E: pulx stx 0x3FDC ; SPK Dwell period cnt'r bsr LFF80 std 0x3FF6 ; Tm Fm Ref to Fire IGN Cnt'r bsr LFF80 ; Short delay sty 0x3FCE ; EFI DLY LFF7D: jmp LCC1A ; WAITLOOP LFF80: rts ;***************************************************** ;нннннннннннннннннннннннннннннннннннннннннннннннннн ; Cool Temp L.U. Table; ; ; System uses 2 different Series resistors with ; the Coolant thermistor to make the range greater ; ; Table Arg = (Deg C + 40) * 256/192) ; ; APYP $6E mask: ; 4k Ohm Table is $FF81 ; 348 Ohm Table is $FF92 ;нннннннннннннннннннннннннннннннннннннннннннннннннннн ;ннннннннннннннннннннннннннннннннннннннннннн ; 3840 ohm Table ;ннннннннннннннннннннннннннннннннннннннннннн LFF81: .db 0xFF ; Hot 0 A/D .db 0xD7 ; 121 C 6 .db 0x9B ; 76 22 .db 0x84 ; 59 38 .db 0x75 ; 48 54 .db 0x6A ; 39 70 .db 0x61 ; 32 86 .db 0x58 ; 26 102 .db 0x51 ; 21 118 .db 0x4A ; 15 134 .db 0x43 ; 10 150 .db 0x3C ; 5 166 .db 0x34 ; н1 182 .db 0x2C ; н7 198 .db 0x22 ; н14 214 .db 0x16 ; н24 246 .db 0x00 ; н40 246 ; ;ннннннннннннннннннннннннннннннннннннннннннн ; 348 Ohm Table ;ннннннннннннннннннннннннннннннннннннннннннн LFF92: .db 0xFF ; Hot 0 A/D .db 0xFF ; Hot 16 .db 0xF9 ; 147 C 32 .db 0xDF ; 128 48 .db 0xCD ; 114 64 .db 0xBF ; 103 80 .db 0xB2 ; 94 96 .db 0xA7 ; 86 112 .db 0x9D ; 78 128 .db 0x93 ; 71 144 .db 0x89 ; 63 160 .db 0x7F ; 56 176 .db 0x75 ; 48 192 .db 0x68 ; 38 208 .db 0x59 ; 27 224 .db 0x43 ; 10 240 .db 0x00 ; Cold 256 ; ;ннннннннннннннннннннннннннннннннннннннннннн ; Stepper Motor State Table ;ннннннннннннннннннннннннннннннннннннннннннн LFFA3: .db 0x00 ; .db 0x01 ; .db 0x03 ; .db 0x02 ; ;ннннннннннннннннннннннннннннннннннннннннннн ; $FFA7 ; MAT Table for 1K Sensor ; 17 line table ; Temp C A/D, (Inv) ;ннннннннннннннннннннннннннннннннннннннннннн ; LFFA7: .db 0x00 ; -40 0 .db 0x2A ; -8 16 .db 0x3D ; 6 32 .db 0x4B ; 16 48 .db 0x55 ; 24 64 .db 0x5F ; 31 80 .db 0x67 ; 37 96 .db 0x6F ; 43 112 .db 0x78 ; 50 128 .db 0x80 ; 56 144 .db 0x89 ; 63 160 .db 0x94 ; 71 176 .db 0xA1 ; 81 192 .db 0xB0 ; 92 208 .db 0xC7 ; 109 244 .db 0xE3 ; 130 240 .db 0xFF ; 152 256 ;ннннннннннннннннннннннннннннннннннннннннннн ; ; MALF Number Table for Blink Out ; Tble out is 2 digit BCD number ;ннннннннннннннннннннннннннннннннннннннннннн LFFB8: .db 0x12 ; .db 0x12 ; Dummy place holder .db 0x13 ; O2 Sensor .db 0x14 ; Hi coolant .db 0x15 ; Lo coolant .db 0x16 ; Shorted injector .db 0x21 ; Hi TPS .db 0x22 ; Lo TPS .db 0x23 ; Lo MAT .db 0x24 ; Vss .db 0x25 ; Hi MAT .db 0x26 ; Not used .db 0x31 ; Not used .db 0x32 ; EGR .db 0x33 ; Hi MAP .db 0x34 ; Lo MAP .db 0x35 ; Not used .db 0x36 ; Not used .db 0x41 ; Cyl select err .db 0x42 ; EST .db 0x43 ; Knock fail .db 0x44 ; Lean O2 .db 0x45 ; Rich O2 .db 0x46 ; VATS .db 0x51 ; EPROM Error .db 0x52 ; Lo Oil Temp .db 0x53 ; Over voltage .db 0x54 ; Fuel pump voltage .db 0x55 ; Not used .db 0x56 ; Not used .db 0x61 ; Not used .db 0x62 ; Hi Oil Temp .db 0x63 ; Not used .db 0x64 ; Not used .db 0x65 ; Not used .db 0x66 ; Not used ; .db 0x00,0x00,0x00,0x00 .db 0x00,0x00,0x00,0x00 .db 0x00,0x00,0x00,0x00 .db 0x00,0x00,0x00,0x00 .db 0x00,0x00,0xC6,0x6F ;************************************************* ; VECTOR TABLE ; ;************************************************* .org 0xFFF0 LFFF0: .dw 0x6000 ;SWI LFFF2: .dw 0xC91B ;IRQ1 LFFF4: .dw 0xF3B4 ;IRQ LFFF6: .dw 0x6000 ;Illegal op code LFFF8: .dw 0xc710 ;Illegal address LFFFA: .dw 0xC710 ;COP timeout LFFFC: .dw 0xC710 ;Clock failed LFFFE: .dw 0xC710 ;Hot restart