;----------------------------------------------- ; ; ECM 1228746, MaskId: $61 ; ; Disassembly of ANLU, '89 Police Caprice ; ; 350 ci, auto, TBI ; ; (Also used in TBI f-body's) ; ; By, Robert Rauscher, March 2001 ; ; No guarantees of accuracy, use at your own risk. ; ; As many areas are the same as the 1227747 ECM. ; I want to thank the Ecmguy for his hac of ASDZ. ; ;----------------------------------------------- ; ; Map Calculations & Conversions: ; ; KPa = (SdMap * 0.3125) + 20 ; ; ; Convert from ADC to SdMap (used in code): ; ; SdMap = ((ADC - 26) * 151 ) / 128 ; ; KPa = (ADC * 0.369) + 10.415 ; ;----------------------------------------------- L0000 EQU $00 ; status word ; b7 = ; b6 = ; b5 = ; b4 = engine shutdown in effect ; b3 = ; b2 = ; b1 = HeadsUp on Line ; b0 = L0001 EQU $01 ; status word ; b7 = *Engine is Running ; b6 = ; b5 = ; b4 = vss detects movement ; b3 = ; b2 = ; b1 = ; b0 = L0002 EQU $02 ; status word ; b7 = *in idle (non-aldl mode) ; b6 = ; b5 = gt 2 vdc & lt 3 vdc (10K Ohm), aldl mode ; b4 = lt 800mv (shorted), field service mode ; b3 = lt 2 vdc (3.9K Ohm), backup mode ; b2 = ?????(used in drp logic) ; b1 = ; b0 = ?????(used in vss logic) ; Normal mode (R>=20K ohm) ; ALDL mode (R==10K ohm) ; Backup mode (R==3.9 K ohm) ; Field Service (R<=500 ohm) L0003 EQU $03 ; status word ; b7 = ; b6 = ; b5 = ; b4 = ; b3 = ; b2 = ; b1 = ; b0 = L0004 EQU $04 ; N/U L0005 EQU $05 ; status word, EGR quals ; b7 = cmd tcc to lock, turn on shift light ; b6 = ; b5 = ; b4 = ; b3 = ; b2 = ; b1 = ; b0 = L0006 EQU $06 ; status word ; b7 = ; b6 = ; b5 = ; b4 = x-cnt occurred ; b3 = ; b2 = ; b1 = ; b0 = do factory diags! L0007 EQU $07 ; status word ; b7 = ; b6 = ; b5 = ; b4 = ; b3 = DFCO flag ; b2 = ; b1 = ; b0 = L0008 EQU $08 ; status word ; b7 = ; b6 = ; b5 = tps test, tps low err ; b4 = ; b3 = ; b2 = tps test, tps hi err ; b1 = ; b0 = L0009 EQU $09 ; status word ; b7 = have required knock cnt's for diag ; b6 = ESC 43 err, runaway knock ; b5 = ; b4 = ; b3 = ; b2 = ; b1 = ; b0 = L000A EQU $0A ; status word ; b7 = ; b6 = ; b5 = ; b4 = ; b3 = Coolant diag failed, using default val ; b2 = INT has been reset ; b1 = O2 sensor is ready?? ; b0 = L000B EQU $0B ; status word ; b7 = ; b6 = iat bit ; b5 = ; b4 = ; b3 = ; b2 = ; b1 = ; b0 = L000C EQU $0C ; diag error flags control word ; b7 = ; b6 = ; b5 = ; b4 = ; b3 = ; b2 = ; b1 = ; b0 = L000D EQU $0D ; status word ; b7 = *In PE/WOT mode ; b6 = accel enrichment in effect ; b5 = quasi async flag ; b4 = decel enleanment in effect ; b3 = need to reset INT bit, new blm cell in use ; b2 = need to reset INT bit ; b1 = ; b0 = L000E EQU $0E ; status word, a/f mode ; b7 = *Closed loop flag (cleared on forced open loop) ; b6 = Rich/Lean direction flag, 1 = moving richer ; b5 = ; b4 = Async fuel flag, narrow bpw ; b3 = ; b2 = ; b1 = BLM enable flag, 1 = Enable store, (learn mode) ; b0 = L000F EQU $0F ; status word ; b7 = idle change required direction bit, 1 == too high ; b6 = ; b5 = ; b4 = in hiway fuel mode ; b3 = ; b2 = ; b1 = ; b0 = high speed fuel kill L0010 EQU $10 ; status word ; b7 = P/S stall saver in effect ; b6 = decay out L00C2 steps, use coef @ 0xD5EA or 0xD5E9 ; b5 = ; b4 = Park/Neut, 1 ; b3 = A/C enabled, 1 ; b2 = ; b1 = ; b0 = L0011 EQU $11 ; L0012 EQU $12 ; error flag 1 L0013 EQU $13 ; error flag 2 L0014 EQU $14 ; error flag 3 L0015 EQU $15 ; L0016 EQU $16 ; cksum location, msb L0017 EQU $17 ; cksum location. lsb L0018 EQU $18 ; drp count, msb L0019 EQU $19 ; drp count, lsb L001A EQU $1A ; rpm scaled, 400 to 2400 by 200's, 2400 to 4800 by 400's L001B EQU $1B ; rpm / 25 L001C EQU $1C ; rpm / 25 one delayed L001D EQU $1D ; rpm / 12.5, filtered, msb L001E EQU $1E ; rpm / 12.5, filtered, lsb L001F EQU $1F ; rpm / 12.5, filtered, one delayed L0020 EQU $20 ; rpm / 12.5, delayed from L001D, for IAC idle ctrl L0021 EQU $21 ; coolant, defaulted, 1k pu, inverse, adc cnts L0022 EQU $22 ; startup coolant, adc inverse L0023 EQU $23 ; coolant, 1k pu, inverse, adc cnts L0024 EQU $24 ; iat, 1k pu, inverse, adc cnts L0025 EQU $25 ; s/d map, KPa = (N * 0.3125) + 20 L0026 EQU $26 ; s/d map, one delayed from L0025 L0027 EQU $27 ; s/d map, two delayed from L0025 L0028 EQU $28 ; ADC map value, raw, filtered, msb L0029 EQU $29 ; ADC map value, raw, filtered, lsb L002A EQU $2A ; adc map val, raw? L002B EQU $2B ; map term for BPW & gms/sec calc's L002C EQU $2C ; s/d map, slo filtered from L0025, msb L002D EQU $2D ; s/d map, slo filtered from L0025, lsb L002E EQU $2E ; vac L002F EQU $2F ; delta of rising map, from ae routine L0030 EQU $30 ; mph, filtered, msb L0031 EQU $31 ; mph, filtered, lsb L0032 EQU $32 ; init to 160 or 159, vss interval counter L0033 EQU $33 ; mph calcs, (MSB), tmp space | L0034 EQU $34 ; mph calcs, (LSB), tmp space | L0035 EQU $35 ; mph calcs, (MSB), tmp space | - VSS Work L0036 EQU $36 ; mph calcs, (LSB), tmp space | L0037 EQU $37 ; mph calcs, (MSB), tmp space | L0038 EQU $38 ; mph calcs, (LSB), tmp space | L0039 EQU $39 ; O2, adc, filtered, round up from L003A L003A EQU $3A ; O2, minor loop filtered, msb L003B EQU $3B ; O2, minor loop filtered, lsb L003C EQU $3C ; O2, major loop filtered, msb (slow) L003D EQU $3D ; O2, major loop filtered, lsb (slow) L003E EQU $3E ; O2, filtered vs. airflow, msb L003F EQU $3F ; O2, filtered vs. airflow, lsb L0040 EQU $40 ; Battery Volts, * 10, adc cnts L0041 EQU $41 ; Pump Volts, * 10, adc cnts L0042 EQU $42 ; tps, adc cnts, volts = n * .0196 L0043 EQU $43 ; tps%, from idle L0044 EQU $44 ; tps%, one delayed from L0043 L0045 EQU $45 ; tps%, slow filtered, msb L0046 EQU $46 ; tps%, slow filtered, lsb L0047 EQU $47 ; tps minimum setting, idle position, msb L0048 EQU $48 ; tps minimum setting, idle position, lsb L0049 EQU $49 ; tmp storage L004A EQU $4A ; tmp storage L004B EQU $4B ; tmp storage L004C EQU $4C ; tmp storage L004D EQU $4D ; tmp storage L004E EQU $4E ; tmp storage L004F EQU $4F ; tmp storage L0050 EQU $50 ; tmp storage L0051 EQU $51 ; L0052 EQU $52 ; L0053 EQU $53 ; L0054 EQU $54 ; L0055 EQU $55 ; L0056 EQU $56 ; L0057 EQU $57 ; drp one delayed (RefPer), msb L0058 EQU $58 ; drp one delayed (RefPer), lsb L0059 EQU $59 ; dynamic dwell, msb L005A EQU $5A ; dynamic dwell, lsb L005B EQU $5B ; L005C EQU $5C ; L005D EQU $5D ; SA for EGR L005E EQU $5E ; L005F EQU $5F ; SA from coolant vs vac comp L0060 EQU $60 ; tcc locked retard SA L0061 EQU $61 ; final SA, msb L0062 EQU $62 ; final SA, lsb L0063 EQU $63 ; drp info, msb L0064 EQU $64 ; drp info, lsb L0065 EQU $65 ; choke SA decay delay L0066 EQU $66 ; 160Hz rts counter L0067 EQU $67 ; init to $80, bit for ADC hardware L0068 EQU $68 ; start/crank timer of some nature L0069 EQU $69 ; PA3 cnt, msb L006A EQU $6A ; PA3 cnt, msb L006B EQU $6B ; L006C EQU $6C ; L006D EQU $6D ; knock retard SA L006E EQU $6E ; counter/timer, msb L006F EQU $6F ; counter/timer, lsb L0070 EQU $70 ; aldl L0071 EQU $71 ; aldl byte count (20) L0072 EQU $72 ; aldl data byte L0073 EQU $73 ; L0074 EQU $74 ; L0075 EQU $75 ; L0076 EQU $76 ; L0077 EQU $77 ; L0078 EQU $78 ; L0079 EQU $79 ; L007A EQU $7A ; L007B EQU $7B ; tcc timer, or gear L007C EQU $7C ; N/V ratio L007D EQU $7D ; used in egr test, a clsd lp term L007E EQU $7E ; L007F EQU $7F ; L0080 EQU $80 ; L0081 EQU $81 ; L0082 EQU $82 ; L0083 EQU $83 ; L0084 EQU $84 ; L0085 EQU $85 ; diag timer L0086 EQU $86 ; diag timer, O2 lean L0087 EQU $87 ; diag timer, O2 rich L0088 EQU $88 ; L0089 EQU $89 ; diag timer L008A EQU $8A ; error 34 timer, map L008B EQU $8B ; diag timer L008C EQU $8C ; filtered SA val, msb L008D EQU $8D ; filtered SA val, lsb L008E EQU $8E ; L008F EQU $8F ; L0090 EQU $90 ; knock test timer, ESC 43 L0091 EQU $91 ; diag timer L0092 EQU $92 ; error log timer L0093 EQU $93 ; EST circuit data, msb L0094 EQU $94 ; EST circuit data, lsb L0095 EQU $95 ; err 42A cnt'r L0096 EQU $96 ; fuel pump volts diag timer L0097 EQU $97 ; async fuel accumulator, msb L0098 EQU $98 ; async fuel accumulator, lsb L0099 EQU $99 ; accel enrichment vs coolant L009A EQU $9A ; transient fuel calc interval timer (for tps/map filters) L009B EQU $9B ; O2 ready/clsd lp ok timeout timer L009C EQU $9C ; decel coolant factor vs coolant L009D EQU $9D ; DFCO fuel mult L009E EQU $9E ; post DFCO timer L009F EQU $9F ; DFCO timer L00A0 EQU $A0 ; blm cell # in current use L00A1 EQU $A1 ; BLM, bin val L00A2 EQU $A2 ; integrator L00A3 EQU $A3 ; desired AFR L00A4 EQU $A4 ; HiWay Fuel timer L00A5 EQU $A5 ; Injector Constant L00A6 EQU $A6 ; inj cnst, egr lag filtered, msb L00A7 EQU $A7 ; inj cnst, egr lag filtered, lsb L00A8 EQU $A8 ; VE% for bpw calc, from lookup at $D2AE L00A9 EQU $A9 ; Inverse coolant term for bpw calc L00AA EQU $AA ; sync bpw, msb L00AB EQU $AB ; sync bpw, lsb L00AC EQU $AC ; async tmp bpw, msb L00AD EQU $AD ; async tmp bpw, lsb L00AE EQU $AE ; integrator delay timer L00AF EQU $AF ; INTegrator timer term L00B0 EQU $B0 ; closed loop correction term (prop & int) L00B1 EQU $B1 ; bpw inj volts correction term L00B2 EQU $B2 ; afr vs coolant, open loop L00B3 EQU $B3 ; crank afr L00B4 EQU $B4 ; choke afr decay mult L00B5 EQU $B5 ; blk learn tmr L00B6 EQU $B6 ; integrator delay tmr L00B7 EQU $B7 ; x-counts L00B8 EQU $B8 ; proportional gain term L00B9 EQU $B9 ; O2, minor loop filtered, one delayed from L003A L00BA EQU $BA ; gms/sec, limited to 64 L00BB EQU $BB ; proportional timer for CLT L00BC EQU $BC ; an afr val L00BD EQU $BD ; an afr timer val L00BE EQU $BE ; L00BF EQU $BF ; IAC steps, lag filtered, msb L00C0 EQU $C0 ; IAC steps, lag filtered, lsb L00C1 EQU $C1 ; IAC steps, lag filtered, msb L00C2 EQU $C2 ; IAC steps, lag filtered, lsb L00C3 EQU $C3 ; throttle follower steps, filtered, msb L00C4 EQU $C4 ; throttle follower steps, filtered, lsb L00C5 EQU $C5 ; throttle follower steps, raw L00C6 EQU $C6 ; idle control delay timer L00C7 EQU $C7 ; IAC steps, A/C, park position L00C8 EQU $C8 ; L00C9 EQU $C9 ; IAC steps, bias L00CA EQU $CA ; Delay timer for low BatV IAC step changes L00CB EQU $CB ; IAC steps added for low BatV L00CC EQU $CC ; L00CD EQU $CD ; idle correction term for SA & IAC L00CE EQU $CE ; desired idle speed L00CF EQU $CF ; desired idle rpm / 12.5, final L00D0 EQU $D0 ; L00D1 EQU $D1 ; L00D2 EQU $D2 ; used to test for stack overflow in rts 9, (L0000, b2) L00D3 EQU $D3 ; stack L00D4 EQU $D4 ; stack L00D5 EQU $D5 ; stack L00D6 EQU $D6 ; stack L00D7 EQU $D7 ; stack L00D8 EQU $D8 ; stack L00D9 EQU $D9 ; stack L00DA EQU $DA ; stack L00DB EQU $DB ; stack L00DC EQU $DC ; stack L00DD EQU $DD ; L00DE EQU $DE ; status word ; b7 = ; b6 = vss ok? ; b5 = ; b4 = ; b3 = ; b2 = ; b1 = enough time has elapsed for closed loop ; b0 = O2 ready for closed loop L00DF EQU $DF ; status word ; b7 = ; b6 = engine start ok ; b5 = ; b4 = ; b3 = ; b2 = hot restart, 75c threshold ; b1 = EGR active bit ; b0 = L00E0 EQU $E0 ; status word ; b7 = iac ctrl for io ; b6 = shut down MCU output ; b5 = iac ctrl for io ; b4 = tps ae in effect ; b3 = ; b2 = iac opening ; b1 = ; b0 = O2 ready for closed loop L00E1 EQU $E1 ; malf error flag 1, perm storage/aldl L00E2 EQU $E2 ; malf error flag 2, perm storage/aldl L00E3 EQU $E3 ; malf error flag 3, perm storage/aldl L00E4 EQU $E4 ; L00E5 EQU $E5 ; choke adjustment to AFR L00E6 EQU $E6 ; choke AFR decay timer L00E7 EQU $E7 ; choke SA L00E8 EQU $E8 ; choke SA decay timer L00E9 EQU $E9 ; successful start up's (w/o err) L00EA EQU $EA ; error flag cksum L00EB EQU $EB ; eng run time, msb L00EC EQU $EC ; eng run time, lsb L00ED EQU $ED ; blm cell 0 L00EE EQU $EE ; blm cell 1 L00EF EQU $EF ; blm cell 2 L00F0 EQU $F0 ; blm cell 3 L00F1 EQU $F1 ; blm cell 4 L00F2 EQU $F2 ; blm cell 5 L00F3 EQU $F3 ; blm cell 6 L00F4 EQU $F4 ; blm cell 7 L00F5 EQU $F5 ; blm cell 8 L00F6 EQU $F6 ; blm cell 9 L00F7 EQU $F7 ; blm cell 10 L00F8 EQU $F8 ; blm cell 11 L00F9 EQU $F9 ; blm cell 12 L00FA EQU $FA ; blm cell 13 L00FB EQU $FB ; blm cell 14 L00FC EQU $FC ; blm cell 15 L00FD EQU $FD ; Current IAC position, steps L00FE EQU $FE ; baro pressure, A/D cnts, msb L00FF EQU $FF ; baro pressure, A/D cnts, lsb ;-------------------------------------- ; I/O ;-------------------------------------- L0801 EQU $0801 ; MCU2 I/O ; In: ; b7 ~A/C Request ; b6 P/S Request ; b5 High Gear ; b4 Park/Neutral ; ; Out: ; b3 TCC/Shift Light ; b2 A/C Drive ; b1 Air Divert ; b0 Air Select L0880 EQU $0880 ; Monitor BatV loss (b7) L0881 EQU $0881 ; MCU1 I/O ; In: ; b7 gnd ; b6 cal12 ; b5 ~cranking ; b4 b9in ; ; Out: ; b3 sentry, distributor bypass ; b2 iac-enable ; b1 iac-b ; b0 iac-a ;-------------------------------------- ; ECM hardware counter locations ;-------------------------------------- LBC00 EQU $BC00 ; DRP counter LBC02 EQU $BC02 ; VSS counter LBC04 EQU $BC04 ; MAF/VATS Frequency LBC06 EQU $BC06 ; EST Circuit LBC08 EQU $BC08 ; Cam Sensor LBC0A EQU $BC0A ; Knock counter (PA3) LBC0C EQU $BC0C ; LBC0E EQU $BC0E ; sync bpw LBC10 EQU $BC10 ; LBC12 EQU $BC12 ; ALDL serial data LBC14 EQU $BC14 ; async bpw LBC16 EQU $BC16 ; egr LBC18 EQU $BC18 ; throttle kicker ($D3FF | $D000, on/off) LBC1A EQU $BC1A ; VATS freq?? LBC1C EQU $BC1C ; Spark Dwell cnt'r, pulse width LBC1E EQU $BC1E ; LBC20 EQU $BC20 ; EST fall cnt'r, time from ref pulse 'til coil fires LBC22 EQU $BC22 ; LBC24 EQU $BC24 ; est LBC26 EQU $BC26 ; Last EST Fall cnt'r LBC28 EQU $BC28 ; EST fall - last EST fall cnt'r LBC2A EQU $BC2A ; LBC2C EQU $BC2C ; est LBC2E EQU $BC2E ; LBC30 EQU $BC30 ; LBC32 EQU $BC32 ; LBC34 EQU $BC34 ; LBC36 EQU $BC36 ; EST Fall cnt'r LBC38 EQU $BC38 ; High Spd rts counter LBC3A EQU $BC3A ; LBC3C EQU $BC3C ; PWM control register ; 0000 0000 0000 1010 @ powerup ; 1011 1001 0010 1010 @ init ; 0000 0000 0000 0100 for watchdog (COP) ; 0000 0000 0000 1000 for CES light ; 0000 0000 0001 0000 for est (bypass?) ; 0000 0000 0100 0000 for ?? ; 0000 0000 1000 0000 for async bpw LBC3E EQU $BC3E ; N/U ;-------------------------------------- ; ADC Addresses ;-------------------------------------- LC000 EQU $C000 ; A/D Address LC002 EQU $C002 ; A/D Address ;*================================================== ;*================================================== ;* ;* This is the Start of the EPROM ;* ;*================================================== ;*================================================== ORG $D000 ; ---------------------- LD000: FDB $4A3F ; Check Sum LD002: FDB $16D1 ; prom id ; ---------------------- LD004: FCB $61 ; mask id ; ---------------------- LD005: FCB $23 ; option byte: 0010 0011 ; b7: 1 = egr type ; b6: 1 = ; b5: 1 = use IAT for hot restart threshold ; b4: 1 = ; b3: 1 = ; b2: 1 = ; b1: 1 == dfco tcc unlock ; b0: 1 == LD006: FCB $11 ; option byte: 0001 0001 ; b7: 1 = ; b6: 1 = ; b5: 1 = reset INT on AE ; b4: 1 = do int reset on blm cell change ; b3: 0 = do inj cnst baro adj ; b2: 1 = ; b1: 1 = use rpm for tcc unlock thres (else mph) ; b0: 1 = LD007: FCB $24 ; option byte: 0010 0100 ; b7: 1 = Shift Light (0 = tcc) ; b6: 1 = VATS enable ; b5: 1 = high gear sw polarity ; b4: 1 = ; b3: 1 = ; b2: 1 = ; b1: 1 = ; b0: 1 = ; ---------------------- LD008: FCB 0 ; throttle kicker flag ; ---------------------- LD009: FCB 0 ; initial SA (base timing) ; ---------------------- LD00A: FCB 192 ; max rpm for slope SA rpm / 25, 4800 rpm LD00B: FCB 32 ; deg / 1k rpm, VAL = N * 65536/7200, 3.5 deg/1K rpm ; ---------------------- LD00C: FCB 240 ; map filter coef, for L0028 ; ---------------------- LD00D: FCB 57 ; Main SA bias, 20 deg LD00E: FCB 57 ; Coolant SA bias, 20 deg ; ---------------------- LD00F: FCB 8 ; cyl count ; ---------------------- LD010: FDB 2458 ; startup drp, 400 rpm ; ---------------------- LD012: FCB 6 ; eng run time out param, drp's LD013: FCB 40 ; eng off time, (4 sec's) ; ---------------------- LD014: FDB 114 ; max SA, 40.1deg LD016: FDB 65525 ; min SA, -3.5deg ($FFF5) ; ---------------------- LD018: FCB 6 ; filt coef, filter SA from startup? ; ---------------------- LD019: FCB 11 ; 11, 3.8 deg SA max for egr LD01A: FCB 12 ; filter coef for egr SA off LD01B: FCB 8 ; filter coef for egr SA on ; ---------------------- LD01C: FCB 240 ; filter coef for rpm / 12.5, L001D/L001E LD01D: FCB 200 ; max rpm for pseudo baro read LD01E: FCB 128 ; 50%, min tps% for pseudo baro read LD01F: FCB 10 ; 3.9% max delta tps for pseudo baro read ; ---------------------- LD020: FCB 192 ; Baro filter coef ; ---------------------- LD021: FCB 6 ; aldl sa val, 2.1 deg ; ---------------------- ; Hiway quals ; ---------------------- LD022: FCB 240 ; vac, hiway SA & Fuel threshold LD023: FCB 52 ; mph, hiway SA threshold LD024: FDB 4800 ; timer hiway SA, sec * 80 = 60 sec ; ---------------------- LD026: FCB 2 ; choke SA decay delay mult LD027: FCB 241 ; choke SA decay mult ; ---------------------- LD028: FCB 57 ; TCC locked SA bias, 20 deg LD029: FCB 6 ; mph threshold for transient fuel calc interval timer (for tps/map filters) LD02A: FCB 32 ; 10Kpa, delta map for transient fuel calc interval timer (for tps/map filters) LD02B: FCB 10 ; 3Kpa, delta map thres for transient fuel calc interval timer (for tps/map filters) ; ---------------------- ; hyst pairs, used in ; transient tps/rpm SA ; indexed tbl ; ---------------------- LD02C: FCB 3 ; delta tps%, 1.2%, opening tps LD02D: FCB 3 ; delta tps%, 1.2%, closing tps LD02E: FCB 128 ; tps%, 50%, opening tps LD02F: FCB 26 ; tps%, 10%, closing tps LD030: FCB 9 ; delta rpm/25 val, opening tps LD031: FCB 7 ; delta rpm/25 val, closing tps ; ---------------------- LD032: FCB 13 ; delta rpm val, 325 rpm LD033: FCB 3 ; delta rpm val, 75 rpm ; ---------------------- ; knock quals ; ---------------------- LD034: FCB 10 ; 10 mph, knock qual thres LD035: FCB 80 ; 1000 rpm, knock qual thres LD036: FCB 126 ; 50c, knock coolant qual thres LD037: FCB 2 ; min cnts to do retard ;*================================================== ;* Main SA Table ;* ;* Val = Spk Adv + Bias * (256/90) ;*================================================== LD038: FCB 1 ; flag, use map FCB 0 ; row offset FCB 32 ; col offset FCB 15 ; cols per row ; 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 Kpa FCB 105 105 105 105 105 105 105 102 94 77 64 60 48 45 42 ; 400 FCB 102 102 102 102 102 102 108 106 102 94 88 74 57 45 42 ; 600 FCB 102 105 105 105 105 105 102 102 100 94 88 71 57 48 42 ; 800 FCB 108 114 114 110 108 106 105 102 99 90 84 70 64 57 48 ; 1000 FCB 111 112 112 112 112 112 112 104 100 95 88 70 65 65 63 ; 1200 FCB 108 122 122 120 118 118 118 110 103 97 91 76 71 64 62 ; 1400 FCB 111 114 122 125 126 124 116 110 102 97 91 77 71 70 68 ; 1600 FCB 114 119 125 125 125 121 112 106 105 103 99 86 74 73 72 ; 1800 FCB 114 120 125 125 125 125 122 114 108 104 99 92 82 74 74 ; 2000 FCB 125 128 130 131 131 128 125 115 107 104 103 96 88 78 76 ; 2200 FCB 125 128 131 131 131 131 128 116 106 104 104 101 96 82 77 ; 2400 FCB 128 134 134 134 134 131 128 120 114 108 105 101 96 80 78 ; 2800 FCB 128 137 139 139 139 135 131 122 114 109 105 101 98 84 81 ; 3200 FCB 133 139 142 139 137 134 131 128 119 111 105 97 91 86 83 ; 3600 ;*================================================== ;* Coolant Comp SA: VAC Vs. Deg c Cool ;* ;* Values shown include 20 deg bias ;* Added SA = Tbl - 57 * (90 / 256) ;* ;* ;* Tbl = (256/90) x Spk + coolant bias ;*================================================== LD10E: FCB 0 ; flag, use vac FCB 0 ; row offset FCB 64 ; col offset FCB 5 ; cols per row ; Vac 40 30 20 10 0 Cool: FCB 68 80 80 80 86 ; -40 FCB 68 80 80 80 86 ; 5 FCB 57 68 74 74 86 ; 25 FCB 51 57 71 71 86 ; 38 FCB 45 57 63 63 71 ; 50 FCB 45 57 57 60 63 ; 64 FCB 57 65 68 63 63 ; 80 FCB 53 48 41 45 45 ; 110 FCB 10 9 8 16 16 ; Hot ;*================================================== ;* Hiway Spk Adv vs Vac ;* ;* Added SA when in Hiway Mode ;* ;* Val = Spk Adv * (256/90) ;*================================================== LD13F: ;--------------------------------- ; Spk ; Vac ;--------------------------------- FCB 6 ; 50 FCB 0 ; 40 FCB 0 ; 30 FCB 0 ; 20 FCB 0 ; 10 FCB 0 ; 0 ;*================================================== ;* TCC Locked Spark Retard: Rpm vs Vac ;* ;* Val = (Spk Adv + Bias) * (256/90) ;*================================================== LD145: FCB 0 ; flag, use vac FCB 32 ; row offset, rpm FCB 64 ; col offset, vac FCB 5 ; cols per row ; Vac: 40 30 20 10 0 ; rpm FCB 57 57 54 50 44 ; 800 FCB 57 57 54 50 44 ; 1200 FCB 57 57 54 50 44 ; 1600 FCB 57 57 54 50 44 ; 2000 ;*================================================== ;* PE/WOT SA vs Baro ;* ;* Tbl = SA / 0.352 ;*================================================== LD15D: ;---------------------------------- ; Mult ; Baro Kpa ;---------------------------------- FCB 17 ; 75 ; 6 deg FCB 14 ; 85 ; 5 deg FCB 11 ; 95 ; 3.9 deg FCB 11 ; 105 ; 3.9 deg ;*================================================== ;* SA corr idle high vs rpm / 3.125 ;* ;* Val = Spk Adv * (256/90) ;*================================================== LD161: FCB 96 ; uppr limit, 300 rpm ;--------------------------------- ; Spk ; rpm ;--------------------------------- FCB 3 ; 0 FCB 21 ; 50 FCB 21 ; 100 FCB 18 ; 150 FCB 15 ; 200 FCB 15 ; 250 FCB 15 ; 300 ;*================================================== ;* SA corr idle high multplier vs s/d map ;* ;* Val = Mult / 256 ;*================================================== LD169: FCB 96 ; uppr limit, 50 map ;--------------------------------- ; Mult ; Map ;--------------------------------- FCB 255 ; 20 FCB 255 ; 25 FCB 200 ; 30 FCB 175 ; 35 FCB 160 ; 40 FCB 64 ; 45 FCB 64 ; 50 ;----------------------------------------------- ;----------------------------------------------- LD171: FCB 0 ; ;*================================================== ;* SA corr idle low vs rpm / 3.125 ;* ;* Val = Spk Adv * (256/90) ;*================================================== LD172: FCB 96 ; uppr limit, 300 rpm ;--------------------------------- ; Spk ; rpm ;--------------------------------- FCB 3 ; 0 FCB 15 ; 50 FCB 18 ; 100 FCB 15 ; 150 FCB 15 ; 200 FCB 9 ; 250 FCB 6 ; 300 ;*================================================== ;* SA corr idle low multplier vs s/d map ;* ;* Val = Mult / 256 ;*================================================== LD17A: FCB 96 ; uppr limit, 50 map ;--------------------------------- ; Mult ; Map ;--------------------------------- FCB 0 ; 20 FCB 80 ; 25 FCB 120 ; 30 FCB 160 ; 35 FCB 200 ; 40 FCB 255 ; 45 FCB 255 ; 50 ;----------------------------------------------- ;----------------------------------------------- LD182: FCB 0 ; ;*================================================== ;* Choke SA vs Cool ;* ;* Initial Sa Which Is Decayed In Some Time Period ;* ;* Val = Spk Adv * (256/90) ;*================================================== LD183: FCB 4 ; 5 Line Table ;--------------------------------- ; Deg's ; Deg c Cool ;--------------------------------- FCB 14 ; COLD FCB 10 ; 24.0 FCB 14 ; 49.7 FCB 14 ; 80.5 FCB 14 ; HOT ;*================================================== ;* Choke Spk Time Out Decay Delay vs Cool ;* ;* Tbl = Seconds ;*================================================== LD189: FCB 8 ; 9 line table ;--------------------------------- ; Sec's ; Deg C ;--------------------------------- FCB 10 ; COLD FCB 5 ; FCB 0 ; 24.0 FCB 5 ; FCB 10 ; 49.7 FCB 20 ; FCB 20 ; 80.5 FCB 20 ; FCB 20 ; HOT ;*================================================== ;* Max Knock Retard SA ;* ;* PE mode vs Rpm ;* ;*================================================== LD193: FCB 80 ; upr rpm limit ;--------------------------------- ; pct/msec ; RPM ;--------------------------------- FCB 52 ; 400 FCB 74 ; 800 FCB 74 ; 1200 FCB 74 ; 1600 FCB 74 ; 2000 ;*================================================== ;* Max Knock Retard SA ;* ;* non-PE mode vs Vac ;* ;*================================================== LD199: FCB 128 ; upr vac limit ;--------------------------------- ; pct/msec ; Vac ;--------------------------------- FCB 85 ; 40 FCB 68 ; 30 FCB 68 ; 20 FCB 68 ; 10 FCB 80 ; 0 ;*================================================== ;* IAT max knock retard SA multiplier ;* ;* tbl = Mult * 128 ;*================================================== LD19F: ;--------------------------------- ; Mult ; IAT c ;--------------------------------- FCB 128 ; -40 FCB 128 ; 5 FCB 128 ; 23 FCB 128 ; 38 FCB 128 ; 50 FCB 141 ; 62 FCB 154 ; 80 FCB 154 ; 107 FCB 154 ; 200 ;*================================================== ;* Spk Latencies Correction vs Rpm ;* ;* 0 - 4800 RPM ;* ;* tbl = usec/15.26 ;*================================================== LD1A8: FCB 192 ; upper rpm tbl limit ;--------------------------------- ; usec ; rpm ;--------------------------------- FCB 0 ; 0 FCB 0 ; 400 FCB 14 ; 800 FCB 18 ; 1200 FCB 20 ; 1600 FCB 16 ; 2000 FCB 18 ; 2400 FCB 16 ; 2800 FCB 20 ; 3200 FCB 21 ; 3600 FCB 19 ; 4000 FCB 20 ; 4400 FCB 20 ; 4800 ;*================================================== ;* Retard Attack Rate vs Rpm: PE mode ;* ;* Deg/msec ;* Tbl = (deg/ms)/.0255 ;*================================================== LD1B6: FCB 80 ; upr rpm limit ;--------------------------------- ; pct/msec ; RPM ;--------------------------------- FCB 8 ; 400 FCB 12 ; 800 FCB 24 ; 1200 FCB 36 ; 1600 FCB 40 ; 2000 ;*================================================== ;* Retard Attack Rate vs Rpm: non-PE mode ;* ;* Deg/msec ;* Tbl = (deg/ms)/.0255 ;*================================================== LD1BC: FCB 128 ; upr vac limit ;--------------------------------- ; pct/msec ; Vac ;--------------------------------- FCB 10 ; 40 FCB 8 ; 30 FCB 9 ; 20 FCB 10 ; 10 FCB 11 ; 0 ;*================================================== ;* Retard Recovery Rate vs Rpm: PE mode ;* ;* Tbl = (%/ms) * (256/500) ;* Tbl = 0.512 * %/ms ;*================================================== LD1C2: FCB 64 ; upr rpm limit ;--------------------------------- ; pct/msec ; RPM ;--------------------------------- FCB 42 ; 400 FCB 32 ; 800 FCB 19 ; 1200 FCB 10 ; 1600 ;*================================================== ;* Retard Recovery Rate vs Vac: non-PE mode ;* ;* Tbl = (%/ms) * (256/500) ;* Tbl = 0.512 * %/ms ;*================================================== LD1C7: FCB 120 ; upr vac limit ;--------------------------------- ; pct/msec ; Vac ;--------------------------------- FCB 30 ; FCB 24 ; FCB 18 ; FCB 13 ; ;----------------------------------------------- ;----------------------------------------------- LD1CB: FCB 0 ; ;*================================================== ;* 2d lkup ;* ;* Base SA for Transient SA vs delta map ;*================================================== LD1CC: ;--------------------------------- ; SA ; delta map ;--------------------------------- FCB 64 ; 0 FCB 160 ; 10 FCB 224 ; 20 FCB 255 ; 30 FCB 255 ; 40 FCB 255 ; 50 FCB 255 ; 60 FCB 255 ; 70 ;*================================================== ;* ;* MAP mult for trans SA vs s/d map cnts ;* ;* tbl = mult * 256 ;*================================================== LD1D5: ;--------------------------------- ; mult ; s/d map ;--------------------------------- FCB 0 ; 20 FCB 0 ; 25 FCB 0 ; 30 FCB 0 ; 35 FCB 0 ; 40 FCB 0 ; 45 FCB 8 ; 50 FCB 14 ; 55 FCB 14 ; 60 FCB 14 ; 65 FCB 14 ; 70 FCB 14 ; 75 FCB 14 ; 80 FCB 11 ; 85 FCB 11 ; 90 FCB 9 ; 95 FCB 9 ; 100 ;*================================================== ;* delta tps & rpm SA term mult vs delta rpm / 25 ;* ;* Indexed Lookup vs delta rpm/25 value ;* ;* SA mult of next table ;* ;* tbl = mult * 64 ;*================================================== LD1E6: ;---------------------------------- ; SA ; delta rpm ;---------------------------------- FCB 240 ; 0 FCB 243 ; 25 FCB 246 ; 50 FCB 248 ; 75 FCB 250 ; 100 FCB 250 ; 125 FCB 250 ; 150 FCB 250 ; 175 FCB 0 ; 200 FCB 247 ; 225 FCB 6 ; 250 FCB 8 ; 275 FCB 10 ; 300 FCB 13 ; 325 FCB 16 ; 350 FCB 18 ; 375 FCB 20 ; 400 ;*================================================== ;* delta tps & rpm SA term vs rpm / 25 ;* ;* 2d lkup w/upr limt in 1st tbl entry, lwr limt in B ;* by rpm / 25 ;*================================================== LD1F7: FCB 128 ; uppr rpm/25 limit ;---------------------------------- ; Mult ; rpm ;---------------------------------- FCB 96 ; 400 FCB 96 ; 800 FCB 96 ; 1200 FCB 64 ; 1600 FCB 48 ; 2000 FCB 32 ; 2400 FCB 24 ; 2800 FCB 18 ; 3200 ;*================================================== ;* IAT mult for trans SA vs iat adc cnts ;* ;* tbl = mult * 256 ;*================================================== LD200: FCB 4 ; line cnt ;---------------------------------- ; Mult ; iat ;---------------------------------- FCB 0 ; 200c FCB 64 ; 80c FCB 176 ; 48c FCB 255 ; 23c FCB 255 ; -40c ;*================================================== ;* Baro Correction vs Tps ;* ;* Used to correct Pseudo baro read ;* TBL = N * 2.7 * (256/40) ;* TBL = N * 17.28 ;* ;* Kpa/1K RPM ;*================================================== LD206: FCB 4 ; 5 Line Table ;--------------------------------- ; Kpa/1K RPM ; %TPS ;--------------------------------- FCB 100 ; 0 FCB 100 ; 25 FCB 95 ; 50 FCB 30 ; 75 FCB 5 ; 100 ;*================================================== ;* EGR Quals ;* ;* Hyst pairs ;* 11 byte indexed table ;*================================================== LD20C: FCB 177 ; 30c, coolant thres LD20D: FCB 165 ; 35c, coolant thres LD20E: FCB 0 ; 0, mph thres LD20F: FCB 0 ; 0, mph thres LD210: FCB 5 ; 2%, tps thres LD211: FCB 9 ; 3.5%, tps thres LD212: FCB 16 ; 25 Kpa, map thres LD213: FCB 26 ; 28 Kpa, map thres ; LD214: FCB 128 ; 50%, tps thres LD215: FCB 196 ; 76%, tps thres LD216: FCB 207 ; 80% tps thres ; ---------------------- LD217: FCB 1279 ; $4FF, egr something or other ;*================================================== ;* ;*================================================== LD219: FCB 117 ; scalar to convert from tps adc to tps% LD21A: FCB 51 ; tps idle setting init value LD21B: FCB 1 ; tps idle setting filter coeficient ;*================================================== ;* ;* Closed loop stuff ;* ;*================================================== LD21C: FCB 240 ; O2 filter coef, minor loop LD21D: FCB 138 ; O2 init value, 599mV LD21E: FCB 32 ; LD21F: FCB 48 ; tps% thres LD220: FCB 128 ; tps% thres LD221: FCB 4 ; tps% delta thres LD222: FCB 8 ; IAC opening additional AE bpw, 120usc LD223: FCB 0 ; timer/counter for transient fuel calc interval timer (for tps/map filters) LD224: FCB 16 ; tps filter coef for L0045 LD225: FCB 64 ; coolant threshold for following filt coef's LD226: FCB 20 ; filter coef for L002C, s/d map term LD227: FCB 36 ; filter coef for L002C, s/d map term ; ---------------------- LD228: FCB 199 ; coolant val, 20c, adc cnts, HiWay SA & Fuel threshold ; also for closed loop hot/cold timer threshold ; ---------------------- LD229: FCB 15 ; closed loop eng run threshold, hot LD22A: FCB 200 ; closed loop eng run threshold, cold LD22B: FCB 128 ; closed loop coolant thres, 48c ; ---------------------- LD22C: FCB 50 ; O2 sensor ready timeout, exit clsd lp ; ---------------------- ; blm enable thresholds ; ---------------------- LD22D: FCB 189 ; 25c, min cool thres LD22E: FCB 0 ; 200c, max cool thres LD22F: FCB 20 ; 26 Kpa, min s/d map thres LD230: FCB 255 ; 100 Kpa, max s/d map thres LD231: FCB 240 ; 6000 rpm, max rpm ; ---------------------- LD232: FCB 147 ; stoich LD233: FCB 18 ; idle afr vs Vac (1.8 afr), used instead of afr vs vac ; ---------------------- LD234: FCB 52 ; hiwayfuel mph threshold, 52 LD235: FCB 166 ; cmp'd against a clsd lp term used in egr test LD236: FCB 100 ; hiway fuel lockout timer val LD237: FCB 255 ; hiway fuel timer val, stay in ; ---------------------- LD238: FCB 12 ; blm update time LD239: FCB 32 ; blm cell boundry, rpm / 25, 800 rpm LD23A: FCB 64 ; blm cell boundry, rpm / 25, 1600 rpm LD23B: FCB 96 ; blm cell boundry, rpm / 25, 2400 rpm LD23C: FCB 30 ; blm cell boundry, s/d map, 29.4 Kpa LD23D: FCB 112 ; blm cell boundry, s/d map, 55.0 Kpa LD23E: FCB 176 ; blm cell boundry, s/d map, 75.0 Kpa LD23F: FCB 2 ; blm cell hyst, rpm / 25, 50 rpm LD240: FCB 6 ; blm cell hyst, s/d map, 1.9Kpa ; ---------------------- LD241: FCB 135 ; Injector Constant LD242: FCB 32 ; inj cnst filter coef for egr off LD243: FCB 28 ; inj cnst filter coef for egr on ; ---------------------- LD244: FCB 3 ; INT delta from 128 to move blm cell LD245: FCB 1 ; amount to move blm for adjustment ; ---------------------- LD246: FCB 150 ; max blm LD247: FCB 108 ; min blm ; ---------------------- ; O2 State Limits ; Val = N * 230.4 ; mV = Val * 4.3403 ; ---------------------- LD248: FCB 187 ; Hi O2 to stay closed loop, 811 mV LD249: FCB 84 ; Lo O2 to stay closed loop, 365 mV LD24A: FCB 128 ; Hi O2 to go closed loop, 556 mV LD24B: FCB 56 ; Lo O2 to go closed loop, 243 mV ; ---------------------- LD24C: FCB 132 ; use when in idle, instead of indx lkup vs airflow LD24D: FCB 159 ; use when in idle LD24E: FCB 160 ; use when in idle ; ---------------------- LD24F: FCB 24 ; cls lp decel, enlean map thresh. (26 kpa) LD250: FCB 40 ; cls lp decel, enlean rpm thresh. (1000 rpm) ; ---------------------- LD251: FCB 40 ; minimum INT LD252: FCB 158 ; maximum INT ; ---------------------- LD253: FCB 200 ; max lean afr, 20:1 ; ---------------------- LD254: FCB 205 ; clear flood tps% threshold, 80% LD255: FCB 200 ; clear flood afr, 20:1 ; ---------------------- LD256: FCB 241 ; cranking coolant threshold, -10c ; ---------------------- LD257: FCB 23 ; coolant for tps% tbl threshold, 120c LD258: FCB 8 ; tps% hyst to stay in PE LD259: FCB 112 ; coolant threshold to enrich PE afr, ~55c LD25A: FCB 10 ; make pe richer by this afr * 10 ; ---------------------- LD25B: FCB 9 ; delay mult to decay choke afr LD25C: FCB 25 ; inital delay from eng strt to decay choke afr LD25D: FCB 152 ; cool/iat threshold, 40c ; ---------------------- LD25E: FCB 72 ; hot restart iat | coolant threshold, 75c LD25F: FCB 2 ; added iac steps for hot restart LD260: FCB 35 ; addtional choke afr for hot-restart (3.5:1) ; ---------------------- LD261: FCB 255 ; min mph threshold to restore fuel LD262: FCB 255 ; max mph threshold to kill fuel ; ---------------------- LD263: FDB 65 ; max sync bpw to exit async fuel, 992usec LD265: FDB 45 ; min sync bpw to enter async fuel, 687usec LD267: FDB 26 ; injector bias, added to bpw, 396usec LD269: FDB 786 ; max async bpw, 12msec LD26B: FDB 45 ; min async bpw, 687usec ; ---------------------- ; decel enleanment quals ; ---------------------- LD26D: FCB 3 ; delta tps% required for decel enleanment LD26E: FCB 8 ; delta s/d map required for decel enleanment LD26F: FCB 224 ; decel enleanment factor ; ---------------------- ; decel fuel cut off quals ; ---------------------- LD270: FCB 54 ; rpm limit for not in dfco, 1350 rpm LD271: FCB 34 ; rpm limit for in dfco, 850 LD272: FCB 40 ; mph limit for not in dfco LD273: FCB 35 ; mph limit for in dfco LD274: FCB 34 ; map limit, lower (adc cnts) 23 KPa = (ADC * 0.369) + 10.415 LD275: FCB 66 ; map limit, upper (adc cnts) 35 KPa LD276: FCB 4 ; delta rpm thres for dfco LD277: FCB 10 ; delta map threshold, 23KPa LD278: FDB 262 ; fuel pulse when exiting dfco. 15.26usec LD27A: FCB 80 ; dfco timer LD27B: FCB 160 ; ??? msec, after decel fuel cut off for bpw ; val = msec x 0.80 LD27C: FCB 8 ; tps% dfco threshold LD27D: FCB 1 ; 10.2% mult for bpw in decel fuel c/o LD27E: FCB 231 ; dfco coolant threshold, 0c ; ---------------------- ; ---------------------- LD27F: FCB 36 ; 156 mvdc, O2 window for fast O2 r/l LD280: FCB 0 ; O2 err val threshold for int & prop timer resets ; ---------------------- ; values for gms/sec calc ; ---------------------- LD281: FCB 120 ; scalar for gms/sec calc LD282: FCB 18 ; offset for map term LD283: FCB 164 ; max for rpm term LD284: FCB 100 ; max for map term ; ---------------------- LD285: FCB 7 ; mph threshold for in idle detection ; ---------------------- ; prop stuff ; ---------------------- LD286: FCB 9 ; prop duration for in idle LD287: FCB 4 ; prop gain multiplier for idle LD288: FCB 1 ; prop gain multiplier for idle LD289: FCB 10 ; mean R/L O2 threshold for idle LD28A: FCB 14 ; mean R/L O2 threshold for idle LD28B: FCB 232 ; O2 err term multiplier for rich O2 LD28C: FCB 208 ; O2 err term multiplier for in idle ; ---------------------- LD28D: FCB 0 ; coolant threshold for status bits b6 & b5 of L0003 LD28E: FCB 25 ; an afr val LD28F: FCB 2 ; an afr timer val LD290: FCB 13 ; an afr sub'd val ; ---------------------- LD291: FDB $FFFF ; vats freq LD293: FDB $FFFF ; vats freq ;*================================================== ;* Accel Enrich vs Diff Map ;* ;* Async Only To Stretch Bpw ;* Table = msec * 16.384 ;*================================================== LD295: FCB 4 ; 5 lines in table ;--------------------------------- ; msec ; Kpa MAP ;--------------------------------- FCB 3 ; 0 FCB 6 ; 20 FCB 14 ; 40 FCB 18 ; 60 FCB 32 ; 80 ;*================================================== ;* Accel Enrich vs Diff Tps ;* ;* Async Only To Stretch Bpw ;* Tbl = 16.384 * msec ;* Tbl = 0.016384 * usec ;* ;* Added to delta map AE & IAC opening ;*================================================== LD29B: FCB 4 ; 5 lines in table ;--------------------------------- ; usec ; Diff %TPS ;--------------------------------- FCB 9 ; 0.0 FCB 10 ; 3.1 FCB 11 ; 6.2 FCB 18 ; 9.4 FCB 36 ; 12.5 ;*================================================== ;* ;* EGR Injector Constant vs. Vac ;* ;*================================================== LD2A1: FCB 176 ; upper table limit ;--------------------------------- ; cnst ; vac ;--------------------------------- FCB 135 ; FCB 133 ; FCB 133 ; FCB 136 ; FCB 121 ; FCB 121 ; FCB 121 ; FCB 120 ; FCB 120 ; FCB 121 ; FCB 120 ; FCB 120 ; ;*================================================== ;* ;* VE%, FL1 ;* ;*================================================== LD2AE: FCB 0 ; row offset, map FCB 16 ; col offset, rpm FCB 8 ; col's per row LD2B1: ; ------------------------------------------------------------ ; Rpm: 400 800 1200 1600 2000 2400 2800 3200 ; Map: ; ------------------------------------------------------------ FCB 50 62 58 59 66 80 75 78 ; 20 FCB 48 75 80 80 90 89 90 99 ; 30 FCB 71 88 90 95 100 101 109 112 ; 40 FCB 85 103 102 101 107 108 114 122 ; 50 FCB 110 115 110 107 112 118 120 126 ; 60 FCB 122 121 114 110 115 116 122 130 ; 70 FCB 124 126 116 112 116 119 120 128 ; 80 FCB 135 128 112 108 112 116 120 128 ; 90 FCB 140 135 115 100 101 99 94 100 ; 100 ;*================================================== ;* ;* VE% vs rpm / 25, FL2 ;* ;* Stored in L0050, added to FL1 ;* ;*================================================== LD2F9: ; ---------------------------- ; VE ; Rpm ; ---------------------------- FCB 64 ; 0 FCB 66 ; 400 FCB 74 ; 800 FCB 96 ; 1200 FCB 112 ; 1600 FCB 116 ; 2000 FCB 118 ; 2400 FCB 117 ; 2800 FCB 112 ; 3200 FCB 102 ; 3600 FCB 100 ; 4000 FCB 94 ; 4400 FCB 96 ; 4800 FCB 88 ; 5200 FCB 76 ; 5600 FCB 68 ; 6000 FCB 60 ; 6375 ;*================================================== ;* 2d lkup vs. coolant adc ;* ;* inverse coolant term for BPW calc ;* ;*================================================== LD30A: ;---------------------------------------------- ; BIN VAL ; Deg K Deg C Deg F ;---------------------------------------------- FCB 107 ; 423K HOT HOT FCB 122 ; 410 138.0c 280f FCB 132 ; 379 107.0 225 FCB 137 ; 365 91.0 196 FCB 142 ; 352 80.0 176* FCB 145 ; 345 71.0 160 FCB 149 ; 336 63.0 145 FCB 152 ; 329 56.0 133 FCB 155 ; 323 49.3 121 FCB 158 ; 317 43.3 110 FCB 161 ; 311 37.0 99 FCB 165 ; 303 30.5 87 FCB 169 ; 296 23.5 74** FCB 173 ; 289 15.5 60 FCB 179 ; 279 6.0 43 FCB 189 ; 265 -8.5 17 FCB 211 ; 237K COLD COLD ;*================================================== ;* Voltage Comp vs Battery (FuelPump) for BPW calc ;* ;* Tbl = Mult * 128 ;*================================================== LD31B: ;--------------------------------- ; Mult ; % PmpV ;--------------------------------- FCB 128 ; 1.000 0.0 FCB 128 ; 1.000 1.6 FCB 255 ; 1.250 3.2 FCB 255 ; 1.250 4.8 FCB 235 ; 1.148 6.4 FCB 176 ; 1.148 8.0 FCB 145 ; 1.100 9.6 FCB 129 ; 1.100 11.2 FCB 128 ; 1.047 12.8 FCB 126 ; 1.000 14.4* FCB 126 ; 0.984 16.0 FCB 122 ; 0.819 17.6 FCB 120 ; 0.938 19.2 FCB 118 ; 0.938 20.8 FCB 116 ; 0.906 22.4 FCB 114 ; 0.891 24.0 FCB 112 ; 0.875 25.5 ;*================================================== ;* Decel Coolant Factor vs Coolant Temp ;* ;* Table = factor * 32 ;*================================================== LD32C: FCB 4 ; 5 line table ;--------------------------------- ; MULT ; Deg c ;--------------------------------- FCB 96 ; COLD FCB 80 ; 24.0 FCB 64 ; 49.0 FCB 64 ; 80.5 FCB 64 ; HOT ;*================================================== ;* Accel Enrich vs Coolant ;* ;* Used as a multiplier of final TPS & MAP PW val ;* ;* Tbl = 32 * Factor ;*================================================== LD332: ;---------------------------------- ; Factor Cool deg c ;---------------------------------- FCB 208 ; COLD FCB 192 ; -8.5 FCB 181 ; 6.0 FCB 160 ; 15.5 FCB 143 ; 23.5 FCB 131 ; 30.5 FCB 120 ; 37.0 FCB 109 ; 43.3 FCB 96 ; 49.3 FCB 86 ; 56.0 FCB 77 ; 63.0 FCB 64 ; 71.0 FCB 56 ; 80.0 FCB 44 ; 91.0 FCB 40 ; 107.0 FCB 40 ; 138.5 FCB 36 ; HOT ;*================================================== ;* Open Loop AFR vs Vacuum ;* ;* Sum Vac Afr (LAfrVac) + Cool Afr (LAfrCool) ;* ;* Tbl = AFR * 10 ;*================================================== LD343: FCB 8 ; 9 line table ;--------------------------------- ; AFR ; VAC Kpa ;--------------------------------- FCB 22 ; 80 FCB 24 ; 70 FCB 24 ; 60 FCB 24 ; 50 FCB 20 ; 40 FCB 20 ; 30 FCB 12 ; 20 FCB 7 ; 10 FCB 5 ; 0 ;*================================================== ;* Choke Afr Vs. Cool ;* ;* Sub'd from desired afr to make richer ;* ;* Table = afr * 10 ;*================================================== LD34D: ;---------------------------------- ; MULT ; Deg c Cool ;---------------------------------- FCB 35 ; COLD FCB 30 ; -7.0 FCB 30 ; 6.5 FCB 25 ; 16.0 FCB 20 ; 24.0 FCB 16 ; 31.0 FCB 21 ; 37.3 FCB 21 ; 43.7 FCB 21 ; 49.7 FCB 21 ; 56.5 FCB 18 ; 63.5 FCB 16 ; 71.5 FCB 15 ; 80.5 FCB 10 ; 92.0 FCB 10 ; 108.5 FCB 10 ; 138.5 FCB 10 ; HOT ;*================================================== ;* Time Out Decay Mult vs Cool ;* (choke Afr Mult Vs. Cool) ;* ;* After Start Up Afr, ;* Increases With Time, Simulating A Choke. ;* ;* Table = Factor * 256 ;*================================================== LD35E: ;---------------------------------- ; MULT ; Deg c Cool ;---------------------------------- FCB 248 ; COLD FCB 248 ; -7.0 FCB 248 ; 6.5 FCB 248 ; 16.0 FCB 240 ; 24.0 FCB 230 ; 31.0 FCB 248 ; 37.3 FCB 248 ; 43.7 FCB 248 ; 49.7 FCB 248 ; 56.5 FCB 248 ; 63.5 FCB 230 ; 71.5 FCB 224 ; 80.5 FCB 192 ; 92.0 FCB 192 ; 108.5 FCB 192 ; 138.5 FCB 192 ; HOT ;*================================================== ;* Crank Afr vs Coolant ;* ;* Afr During Crank ;* ;* Tbl = AFR * 10 ;*================================================== LD36F: ;---------------------------------- ; AFR ; Deg c Cool ;---------------------------------- FCB 4 ; COLD FCB 20 ; -7.0 FCB 25 ; 6.5 FCB 50 ; 16.0 FCB 64 ; 24.0 FCB 64 ; 31.0 FCB 64 ; 37.3 FCB 64 ; 43.7 FCB 64 ; 49.7 FCB 64 ; 56.5 FCB 64 ; 63.5 FCB 64 ; 71.5 FCB 64 ; 80.5 FCB 64 ; 92.0 FCB 80 ; 108.5 FCB 80 ; 138.5 FCB 64 ; HOT ;*================================================== ;* Cold Engine Crank AFR multiplier vs Vac ;* ;* ;* Cold crank AFR Mult? for cts < -10c vs Vac ;* ;*================================================== LD380: ;---------------------------------- ; AFR mult ; Vac ;---------------------------------- FCB 13 ; FCB 15 ; FCB 16 ; FCB 20 ; FCB 30 ; FCB 28 ; FCB 26 ; FCB 24 ; FCB 22 ; FCB 21 ; FCB 15 ; ;*================================================== ;* Open Loop AFR vs Coolant ;* ;* Sum Vac Afr (LAfrVac) + Cool Afr (LAfrCool) ;* ;* Tbl = AFR * 10 ;*================================================== LD38B: ;---------------------------------- ; AFR ; Deg c Cool ;---------------------------------- FCB 80 ; COLD FCB 103 ; -7.0 FCB 105 ; 6.5 FCB 110 ; 16.0 FCB 118 ; 24.0 FCB 122 ; 31.0 FCB 132 ; 37.3 FCB 133 ; 43.7 FCB 133 ; 49.7 FCB 133 ; 56.5 FCB 127 ; 63.5 FCB 127 ; 71.5 FCB 127 ; 80.5 FCB 127 ; 92.0 FCB 122 ; 108.5 FCB 116 ; 138.5 FCB 116 ; HOT ;*================================================== ;* Async Mult vs Rpm Table ;* ;* ;* This Mult Is Used To Convert Sync PW ;* (pw/cyl) to Async (pw/12.5 Msec) Inj. ;* For Async Injections ;* ;* (note: not used for AE) ;* ;* ASync Is Both Injectors @ 80Hz, ;* Sync Is Alternating Injections ;* ;* Factor = (Cyls/2) * (rpm/60) * (0.0125/2) ;* ;* .0125 = Pulse Period, (80 Hz) ;* ;* ;* Tbl = Mult * 64 ;*================================================== LD39C: FCB 8 ; 9 Line Table ;---------------------------------- ; Mult ; rpm ;---------------------------------- FCB 0 ; 0 FCB 21 ; 800 FCB 43 ; 1600 FCB 64 ; 2400 FCB 85 ; 3200 FCB 107 ; 4000 FCB 128 ; 4800 FCB 149 ; 5600 FCB 171 ; 6400 ;*================================================== ;* BPW Injector Constant Mult vs iat ;* ;* Tbl = Mult * 128 ;*================================================== LD3A6: ;---------------------------------- ; Mult ; iat ;---------------------------------- FCB 131 ; 48c FCB 136 ; 63c FCB 148 ; 80c FCB 134 ; 110c ;*================================================== ;* BPW Injector Constant Mult vs Baro ;* ;* Tbl = Mult * 128 ;*================================================== LD3AA: ;---------------------------------- ; Mult ; Baro Kpa ;---------------------------------- FCB 134 ; 75 FCB 130 ; 85 FCB 128 ; 95 FCB 128 ; 105 ;*================================================== ;* Tps Mult vs. Baro ;* ;* tbl = factor * 255 ;*================================================== LD3AE: ;---------------------------------- ; MULT ; Kpa BARO ;---------------------------------- FCB 213 ; 75 FCB 213 ; 85 FCB 255 ; 95 FCB 255 ; 105 ;*================================================== ;* Tps vs Rpm Thresh For Wot Enable ;* ;* Low coolant tbl ;* Table = % * 2.55 ;*================================================== LD3B2: ;---------------------------------- ; tps ; RPM ;---------------------------------- FCB 98 ; FCB 115 ; FCB 128 ; FCB 128 ; FCB 128 ; ;*================================================== ;* Wot Fuel Afr Vs. Rpm ;* ;* Tbl = AFR * 10 ;*================================================== LD3B7: ;---------------------------------- ; AFR ; RPM ;---------------------------------- FCB 124 ; 800 FCB 111 ; 1600 FCB 118 ; 2400 FCB 106 ; 3200 FCB 120 ; 4000 ;*================================================== ;* HiWay Mode AFR vs Vac ;* ;* tbl = afr * 10 ;*================================================== LD3BC: ;---------------------------------- ; Afr ; Vac, Kpa ;---------------------------------- FCB 150 ; 80 FCB 150 ; 70 FCB 166 ; 60 FCB 166 ; 50 FCB 160 ; 40 FCB 155 ; 30 FCB 150 ; 20 FCB 144 ; 10 FCB 144 ; 0 ;*================================================== ;* Tps vs Rpm Thresh For Wot Enable ;* ;* High coolant tbl ;* Table = % * 2.55 ;*================================================== LD3C5: ;---------------------------------- ; tps% ; RPM ;---------------------------------- FCB 128 ; 400 FCB 128 ; 1200 FCB 77 ; 1600 FCB 77 ; 3200 FCB 77 ; 4800 ;----------------------------------------------- ; 2d lkup's: ; ; Proportional & int stuff ; Table lookups are by gms/sec airflow ; ; L004D: mean R/L O2 threshold ; L004E: rich O2 threshold ; L004F: lean O2 threshold ; L00AF: INT delay ;------------------------------------------------- ;*================================================== ;* Integrator Delay vs Air Flow ;* 5 Line Tbl, Use Air Flow 0-64 Bin ;* ;* Mult x Int Delay Mult (vs. Slo O2) * LIntDlyMult ;* ;* tbl = Sec's * 40 ;* = msec * 0.04 ;* ;* msec = val / 0.04 = val * 25 ;* (stored in L00AF) ;*================================================== LD3CA: ;---------------------------------- ; msec's ; air flow ;---------------------------------- FCB 22 ; 0 FCB 18 ; 16 FCB 12 ; 32 FCB 8 ; 48 FCB 6 ; 64 ;*================================================== ;* Mean Rich/Lean Threshold For Unfiltered O2 ;* As A Function Of Flow ;* ;* mV = val * 4.34 ;* Tbl = 230.4 * Vdc ;* (stored in L004D) ;*================================================== LD3CF: ;---------------------------------- ; mvdc ; air flow ;---------------------------------- FCB 120 ; 0 FCB 120 ; 16 FCB 134 ; 32 FCB 134 ; 48 FCB 130 ; 64 ;*================================================== ;* Rich O2 Threshold as Funct Of Air Flow ;* ;* mV = val * 4.34 ;* Tbl = 230.4 * Vdc ;* (stored in L004E) ;*================================================== LD3D4: ;---------------------------------- ; mvdc ; air flow ;---------------------------------- FCB 135 ; 0 FCB 135 ; 16 FCB 138 ; 32 FCB 138 ; 48 FCB 132 ; 64 ;*================================================== ;* Lean O2 Threshold as Funct Of Air Flow ;* ;* mV = val * 4.34 ;* Tbl = 230.4 * Vdc ;* (stored in L004F) ;*================================================== LD3D9: ;---------------------------------- ; mvdc ; air flow ;---------------------------------- FCB 120 ; 0 FCB 120 ; 16 FCB 132 ; 32 FCB 128 ; 48 FCB 128 ; 64 ;*================================================== ; **** End of table indexing ;*================================================== ;*================================================== ;* 2d lkup ;* ;* O2 filter coef vs airflow (gms/sec) ;* Used for L003E ;*================================================== LD3DE: ;---------------------------------- ; Coef ; air flow ;---------------------------------- FCB 4 ; 0 FCB 6 ; 16 FCB 11 ; 32 FCB 18 ; 48 FCB 22 ; 64 ;*================================================== ;* Proportional Value vs Slo O2 Error ;* ;* For Selecting Bin Val To Adjust Proportional Gains ;* ;* ;* Tbl = Bin * 1 ;* ;* The ERR value used for the lookup is from ;* the O2 ERR VAL, this is calc'd from the SLO ;* FILT O2 & R/L O2 thresholds. It is the term ;* of how far from desired we are. ;*================================================== LD3E3: ;---------------------------------- ; Bin ; O2 Err ;---------------------------------- FCB 18 ; 0 FCB 18 ; 8 FCB 18 ; 16 FCB 12 ; 24 FCB 12 ; 32 FCB 20 ; 40 FCB 24 ; 48 FCB 36 ; 56 FCB 40 ; 64 FCB 48 ; 72 FCB 48 ; 80 FCB 48 ; 88 FCB 48 ; 96 ;*================================================== ;* Proportional Term Duration vs. O2 Error ;* ;* For Selecting Sec's To Allow Adjust To Take Affect ;* ;* Tbl = Sec's * 40 ;* msec * 0.04 ;*================================================== LD3F0: ;---------------------------------- ; msec's ; O2 Error ;---------------------------------- FCB 2 ; 0 FCB 3 ; 8 FCB 4 ; 16 FCB 8 ; 24 FCB 16 ; 32 FCB 32 ; 40 FCB 64 ; 48 FCB 96 ; 56 FCB 120 ; 64 FCB 120 ; 72 FCB 120 ; 80 FCB 120 ; 88 FCB 120 ; 96 ;*================================================== ;* Proportional Duration Offset Tbl vs Air Flow ;* ;* ;* Tbl = Sec's * 40 ;* msec * 0.04 ;* msec = N * 25 ;*================================================== LD3FD: ;---------------------------------- ; msec ; Air Flow gms/sec ;---------------------------------- FCB 10 ; 0 FCB 6 ; 16 FCB 4 ; 32 FCB 2 ; 48 FCB 1 ; 64 ;*================================================== ;* Proportional Gain Flow Factor vs Air Flow ;* ;* Used to modify prop gain count. ;* ;* Tbl = Mult * 256 ;*================================================== LD402: ;---------------------------------- ; Mult ; Air Flow ;---------------------------------- FCB 16 ; 0 FCB 18 ; 16 FCB 40 ; 32 FCB 64 ; 48 FCB 80 ; 64 ;*================================================== ;* Int Delay Mult vs Slow O2 Error ;* ;* Integrator Delay As Funct Of Slow O2 ;* ;* Mult x Int Delay Mult (vs. Slo O2) * LIntDly ;* ;* Tbl = Factor * 256 ;*================================================== LD407: ;---------------------------------- ; mult ; O2 Error ;---------------------------------- FCB 255 ; 0 FCB 255 ; 8 FCB 255 ; 16 FCB 224 ; 24 FCB 192 ; 32 FCB 160 ; 40 FCB 128 ; 48 FCB 96 ; 56 FCB 80 ; 64 FCB 128 ; 72 FCB 160 ; 80 FCB 192 ; 88 FCB 192 ; 96 ;----------------------------------------------- ; ALDL list ;----------------------------------------------- ;---------------------------- LD414: FDB $D002 ; 1. eprom id lsb LD416: FDB $D003 ; 2. eprom id msb ;---------------------------- LD418: FDB $00FD ; 3. current IAC posit, (0-255) ; n = counts ;---------------------------- LD41A: FDB $0023 ; 4. coolant ; see table 1 ;---------------------------- LD41C: FDB $0030 ; 5. mph, ; (mph/1) ;---------------------------- LD41E: FDB $002A ; 6. map, (a/d, 0-255) ; volts = n * .0196 ;---------------------------- LD420: FDB $001B ; 7. rpm/25 ; rpm = n * 25 ;---------------------------- LD422: FDB $0042 ; 8. tps (a/d, 0-255) ; volts = n * .0196 ;---------------------------- LD424: FDB $00A2 ; 9. integrator, (0-255) ;---------------------------- LD426: FDB $0039 ; 10. O2 (a/d), mvdc = 0.2304 * a/d val?? ; mv = N * (1000/226) = N * 4.425?? ;---------------------------- LD428: FDB $00E1 ; 11. error flag 1 ; ; b7 error code 12 no drp ; b6 error code 13 oxygen sensor ; b5 error code 14 coolant sensor hi ; b4 error code 15 coolant sensor low ; ; b3 error code 21 tps high ; b2 error code 22 tps low ; b1 error code 23 iat sensor lo ; b0 error code 24 vss ;---------------------------- LD42A: FDB $00E2 ; 12. error flag 2 ; ; b7 error code 25 iat sensor hi ; b6 error code 31 governor fail ; b5 error code 32 not used (egr) ; b4 error code 33 map sensor high ; ; b3 error code 34 map sensor low ; b2 error code 35 not used ; b1 error code 41 not used ; b0 error code 42 est monitor error ;---------------------------- LD42C: FDB $00E3 ; 13. error flg 3 ; ; b7 error code 43 knock spark control failure ; b6 error code 44 O2 lean ; b5 error code 45 O2 rich ; b4 error code 51 prom error ; ; b3 error code 55 adu error, netres/RTS ovrrun ; b2 error code 54 not used ; b1 error code 53 fuel pump relay failure ; b0 error code 52 cal pack missing ;-------------------------------------- LD42E: FDB $000E ; 14. a/f mode word flag 1, (flag), ; ; b7 closed loop flag, 1 = closed loop ; b6 rich/lean flag, 1 = rich ; b5 closed loop flag, 1 = closed loop ; b4 async fuel flag ; ; b3 4-3 downshift for tcc unlock ; b2 low battery, 1 = low ; b1 blm enable flag, 1 = enable store ; b0 clear flood flag, 1 = cranked in c/flood ;-------------------------------------- LD430: FDB $0040 ; 15 battery volts, (a/d, 0-255) vbatt/10 ;-------------------------------------- LD432: FDB $0801 ; 16. mcu2 i/o ; ; b7 air conditioner, 0 = a/c requested ; b6 p/s pressure switch ; b5 high gear, 0 = switch open ; b4 park neutral, 0 = drive ; ; b3 tcc/shift light ; b2 a/c ; b1 air divert ; b0 select ;-------------------------------------- LD434: FDB $0069 ; 17. PA3, counts of msb only ;-------------------------------------- LD436: FDB $00A1 ; 18. BLM, (blm/1) ;-------------------------------------- LD438: FDB $0024 ; 19. IAT, a/d ;---------------------------- ;*================================================== ;* ;* Table 1 --- Coolant Temperature, 1k pu ;* ;* ;* A/D degrees A/D ;* counts C Inv ;* ------- ------- --- ;* 255 -40 0 ;* 251 -30 4 ;* 250 -25 5 ;* 247 -20 8 ;* 245 -15 10 ;* 241 -10 14 ;* 237 - 5 18 ;* 231 0 24 ;* 225 5 30 ;* 218 10 37 ;* 209 15 46 ;* 199 20 56 ;* 189 25 66 ;* 177 30 78 ;* 165 35 90 ;* 152 40 103 ;* 139 45 116 ;* 126 50 129 ;* 114 55 141 ;* 102 60 153 ;* 92 65 163 ;* 81 70 174 ;* 72 75 183 ;* 64 80 191 ;* 56 85 199 ;* 50 90 205 ;* 44 95 211 ;* 39 100 216 ;* 34 105 221 ;* 30 110 225 ;* 26 115 229 ;* 23 120 232 ;* 21 125 234 ;* 18 130 237 ;* 16 135 239 ;* 14 140 241 ;* 13 145 242 ;* 12 150 243 ;* 0 200 255 ;* ;*================================================== ;* Pressure in KPa to Inches Mercury Vacuum ;*================================================== ;* ;* KPa "Hg ;* 0 0 ;* 10 2.9 ;* 20 5.9 ;* 30 8.9 ;* 40 11.8 ;* 50 14.8 ;* 60 17.7 ;* 70 20.7 ;* 80 23.7 ;* 90 26.6 ;* 100 29.6 ;* ;*================================================== ;*================================================== ;* Diagnostic Parameter Mask's ;* ;* 0 = Disable error recognition ;* 1 = Enable error recognition ;* ;*================================================== LD43A: FCB $FF ; 1111 1111, 255 ; b7 code 12, No ref's, (eng not running) ; b6 code 13, O2 sensor ; b5 code 14, Coolant Sensor Hi ; b4 code 15, Coolant sensor Lo ; ; b3 code 21, TPS hi ; b2 code 22, TPS lo ; b1 code 23, IAT Sensor Lo ; b0 code 24, VSS ; LD43B: FCB $B9 ; 1011 1001, 185 ; b7 code 25, IAT Sensor Hi ; b6 code 31, MAP LOW, (NOT USED) ; b5 code 32, EGR failure, ; b4 code 33, MAP Sensor hi ; ; b3 code 34, MAP Sensor low ; b2 code 35, IAC error, (NOT USED) ; b1 code 41, NO DRP , (NOT USED) ; b0 code 42, EST Mon error LD43C: FCB $F3 ; 1111 0011, 243 ; b7 code 43, ESC failure ; b6 code 44, O2 Lean ; b5 code 45, O2 Rich ; b4 code 51, EPROM error ; ; b3 code 52, Cal-pack missing, (NOT USED) ; b2 code 53, VATS, (NOT USED) ; b1 code 54, Fuel pump relay malfunction ; b0 code 55, ADU Error, netres/RTS ovrrun ;---------------------------------------------- LD43D: FCB 50 ; good startups to erase error codes ;---------------------------------------------- ; Error Log Time Constants ;---------------------------------------------- LD43E: FCB 10 ; error log time constant 1, 1 sec LD43F: FCB 20 ; error log time constant 2, 2 sec LD440: FCB 100 ; error log time constant 3, 10 sec LD441: FCB 120 ; error log time constant 4, 12 sec ;---------------------------------------------- ; Error 13 param's ; O2 Sensor ;---------------------------------------------- LD442: FCB 60 ; Time since run eable, (120 Sec) LD443: FCB 81 ; 352 mvdc, O2 Sensor Lo limit O2 Test window LD444: FCB 127 ; 552 mvdc, O2 Sensor Hi limit ; LD445: FCB 13 ; TPS Min limit, (5%) LD446: FCB 30 ; Time limit, (60 Sec) ;---------------------------------------------- ; Error 13/14 param's ; O2/map ;---------------------------------------------- LD447: FCB 81 ; 65c, Coolant Min thresh, 1k PU ;---------------------------------------------- ; Error 14 param's ; Hi Coolant ;---------------------------------------------- LD448: FDB 2 ; eng run time val for coolant high diag test, 2 sec LD44A: FCB 12 ; high coolant error limit, inverse ;---------------------------------------------- ; Error 15 param's ; Lo Coolant ;---------------------------------------------- LD44B: FDB 30 ; eng run time val for coolant low diag test, 30 sec LD44D: FCB 252 ; low coolant error limit, inverse ;---------------------------------------------- ; Error 14/15 param ; Coolant default ;---------------------------------------------- LD44E: FCB 100 ; coolant value on diag error ;---------------------------------------------- ; Error 21 param's ; Tps High ;---------------------------------------------- LD44F: FCB 128 ; 2.5vdc, TPS limit, LD450: FCB 80 ; 8 Sec, Time limtit, LD451: FCB 112 ; 51.7 Kpa Baro limit, ;---------------------------------------------- ; Error 22 param's ; Tps Low ;---------------------------------------------- LD452: FCB 10 ; tps limit, 0.20 vdc LD453: FCB 80 ; default tps, 0.?? vdc (~??%) ;---------------------------------------------- ; Error 23 param's ; Lo iat ;---------------------------------------------- LD454: FCB 250 ; low iat error limit, inverse LD455: FDB 301 ; min engine run time for valid test LD457: FCB 35 ; mph diag threshold LD458: FCB 152 ; default iat on diag error ;---------------------------------------------- ; Error 24 ; Vss ;---------------------------------------------- LD459: FCB 5 ; mph threshold ; ; valid test rpm window LD45A: FCB 64 ; rpm threshold LD45B: FCB 240 ; rpm threshold LD45C: FCB 40 ; map adc threshold LD45D: FCB 8 ; tps% threshold LD45E: FCB 5 ; 5 sec time limit ;---------------------------------------------- ; Error 25 param's ; Hi iat ;---------------------------------------------- LD45F: FCB 16 ; high iat error limit, inverse ;---------------------------------------------- ; Error 32 param's ; EGR ;---------------------------------------------- LD460: FCB 10 ; LD461: FCB 80 ; LD462: FCB 144 ; LD463: FCB 23 ; LD464: FCB 51 ; LD465: FCB 10 ; LD466: FCB 3 ; LD467: FCB 1 ; LD468: FCB 25 ; LD469: FCB 8 ; LD46A: FCB 50 ; LD46B: FCB 1 ; LD46C: FCB 12 ; SA multiplier for L008C, 4.2deg LD46D: FCB 128 ; filt coef for L008C LD46E: FCB 32 ; filt coef for L008C LD46F: FCB 40 ; LD470: FCB 19 ; ;---------------------------------------------- ; Error 33 param's ; Map High ;---------------------------------------------- LD471: FCB 10 ; ?% TPS limit LD472: FCB 156 ; ??.0 Kpa, BARO max limit LD473: FCB 50 ; 5 Sec's Time limit ;---------------------------------------------- ; Error 34 param's ; Map Low ;---------------------------------------------- LD474: FCB 5 ; map limit, (11.9 kpa) LD475: FCB 64 ; 1200 rpm, (64 * 12.5 + 400) LD476: FCB 2 ; 0.05 sec time limit (sec * 80) LD477: FCB 54 ; 21% tps ; ---------------------- LD478: FCB 218 ; 90.8 kpa default map/baro (adc cnts) ; max adc map on error ;---------------------------------------------- ; Error 33/34 Param ; Map Default Coef ;---------------------------------------------- LD479: FCB 146 ; MAP default coef, COEF * 64, for tps value ;---------------------------------------------- ; Map Bias Default vs Rpm ;---------------------------------------------- LD47A: FCB 64 ; upper tbl limit ;---------------------------------- ; a/d val ; rpm ;---------------------------------- FCB 91 ; 800 FCB 45 ; 1600 FCB 10 ; 2400 FCB 0 ; 3200 ;---------------------------------------------- LD47F: FCB 6 ; IAC test val LD480: FCB 145 ; LD481: FCB 0 ; ;---------------------------------------------- ; Error 42 param's ; EST error ;---------------------------------------------- LD482: FCB 4 ; scaled rpm val LD483: FCB 0 ; Num PA1 cnt's for error LD484: FCB 4 ; Num of EST faults for 42A LD485: FCB 4 ; Num of EST faults for 42B ;---------------------------------------------- ; Error 43 param's ; ESC error ;---------------------------------------------- LD486: FDB 240 ; knock sec's thres from eng run LD488: FCB 235 ; runaway knock cnts for ESC err 43 LD489: FCB 5 ; timer duration LD48A: FCB 53 ; 87c, coolant thres low LD48B: FCB 12 ; 150c, coolant thres high LD48C: FCB 160 ; 4000 rpm, max rpm thres LD48D: FCB 196 ; 81.25 KPa, min map thres LD48E: FCB 40 ; added SA for knock test, 14 deg LD48F: FCB 57 ; added SA for knock test, 20 deg LD490: FCB 2 ; required knock cnts for diag ;---------------------------------------------- ; Error 44 ; O2 Lean ;---------------------------------------------- LD491: FCB 58 ; 251mV, low limit LD492: FCB 50 ; diag timer val ;---------------------------------------------- ; Error 45 ; O2 Rich ;---------------------------------------------- LD493: FCB 173 ; 751 mvdc, O2 sensor hi limit LD494: FCB 30 ; diag timer, O2 rich LD495: FCB 51 ; 20%, tps hi limit LD496: FCB 0 ; 0%, tps low limit ;---------------------------------------------- LD497: FCB 0 ; timer for error codes? ;---------------------------------------------- ; Error 54 ; Pump Relay Error ;---------------------------------------------- LD498: FCB 30 ; fuel pump volts diag time value ;---------------------------------------------- ;---------------------------------------------- LD499: FCB 2 ; timer val LD49A: FCB 1 ; major loop O2 filter coef, for L003C LD49B: FCB 161 ; O2 val, 699mV LD49C: FCB 65 ; O2 val, 282mV LD49D: FCB 50 ; LD49E: FCB 164 ; scaled rpm val LD49F: FCB 20 ; counter/timer val, in L0077 LD4A0: FCB 8 ; map val, 22.5 Kpa LD4A1: FCB 80 ; delta map val, 25 Kpa LD4A2: FCB 199 ; coolant thres, 20c LD4A3: FCB 50 ; timer/counter for L0078 LD4A4: FCB 0 ; timer/counter thres for L0079 LD4A5: FCB 96 ; coolant thres, 67c LD4A6: FCB 255 ; map thres LD4A7: FCB 255 ; rpm / 25 val, 6375 LD4A8: FCB 38 ; rpm / 25 val, 950 rpm LD4A9: FCB 1 ; timer/counter thres for L007F ; ---------------------- ; hyst pairs ; ---------------------- LD4AA: FCB 2 ; mph LD4AB: FCB 1 ; mph LD4AC: FCB 8 ; tps% LD4AD: FCB 5 ; tps% ; ---------------------- LD4AE: FCB 205 ; ;---------------------------------------------- ;---------------------------------------------- LD4AF: FCB 123 ; int val, egr tst? LD4B0: FCB 116 ; int val, egr tst? LD4B1: FCB 3 ; egr test val? LD4B2: FCB 16 ; egr test val? LD4B3: FCB 5 ; egr? LD4B4: FCB 20 ; mph thres LD4B5: FCB 112 ; blm thres ;----------------------------------------------- ; TCC ;----------------------------------------------- LD4B6: FCB 102 ; 60c, min for tcc lookup ; indexed table entries LD4B7: FCB 3 ; LD4B8: FCB 40 ; mph thres LD4B9: FCB 10 ; tps limit LD4BA: FCB 21 ; tps limit LD4BB: FCB 4 ; tps limti hyst LD4BC: FCB 0 ; LD4BD: FCB 128 ; filter coef for MPH / 1, L0030 LD4BE: FCB 1 ; lk/unlk? delay val LD4BF: FCB 6 ; re-lock delay val LD4C0: FCB 80 ; mph thres for mandatory lockup of tcc ;----------------------------------------------- ; TCC ;----------------------------------------------- LD4C1: FCB 38 255 ; lk > mph LD4C3: FCB 36 255 ; unlk < mph ;----------------------------------------------- ; 2d lkup's w/SBA ; ; tps% req TCC relock/unlock vs. mph ;----------------------------------------------- ; mph: 20 24 28 32 36 40 44 48 52 56 60 LD4C5: FCB 2 2 19 58 68 72 78 82 104 120 120 LD4D0: FCB 1 1 8 10 27 37 45 52 64 90 96 ;----------------------------------------------- ;----------------------------------------------- LD4DB: FCB 32 255 ; lk > mph LD4DD: FCB 30 255 ; unlk < mph ;----------------------------------------------- ; 2d lkup's w/SBA ; ; tps% req TCC relock/unlock vs. mph ;----------------------------------------------- ; mph: 20 24 28 32 36 40 44 48 52 56 60 LD4DF: FCB 2 2 10 56 74 88 97 112 120 120 120 LD4EA: FCB 1 1 8 22 41 51 69 84 90 90 96 ;*================================================== ;* Tps Mult vs. Baro ;* ;* tbl = factor * 255 ;*================================================== ; MULT ; Kpa BARO ;---------------------------------- LD4F5: FCB 255 ; 75 FCB 255 ; 85 FCB 255 ; 95 FCB 255 ; 105 ;*================================================== ;* ;* Shift Light Parameters ;* ;* Indexed tbl + 19 ;*================================================== LD4F9: FCB 160 ; 1st gr n/v FCB 99 ; 2nd gr n/v FCB 65 ; 3rd gr n/v FCB 49 ; 4th gr n/v** FCB 100 ; FCB 66 ; FCB 50 ; LD500: FCB 35 ; FCB 38 ; FCB 39 ; FCB 42 ; FCB 51 ; FCB 128 ; FCB 128 ; FCB 128 ; FCB 128 ; FCB 209 ; FCB 13 ; FCB 16 ; FCB 176 ; ; ---------------------- LD50D: FCB 10 ; LD50E: FCB 15 ; ;*================================================== ;* ;* IAC Parameters ;* ;*================================================== LD50F: FCB 40 ; LD510: FCB 18 ; LD511: FCB 160 ; IAC park position ; ---------------------- ; Stall Saver ; ---------------------- LD512: FCB 38 ; 475 rpm, rpm / 12.5, go into stall saver LD513: FCB 52 ; 650 rpm, rpm / 12.5, exit stall saver ; ---------------------- LD514: FCB 5 ; 2%, tps% threshold, max for idle adjust allowed ;--------------------------------------------- ; Indexed Tbl ; ; Timer delay before changing IAC for idle ;--------------------------------------------- LD515: FCB 3 ; small error retract, idle too lo LD516: FCB 1 ; large error retract, idle too lo LD517: FCB 2 ; small err extend, idle too hi LD518: FCB 0 ; large err extend, idle too hi ;--------------------------------------------- ; These two are rpm breakpoints for desired idle rpm IAC changes LD519: FCB 3 ; neg err bk pt for large gain wd (rpm / 12.5) LD51A: FCB 4 ; pos err bk pt for large gain wd (rpm / 12.5) ; ---------------------- ; ---------------------- LD51B: FCB 2 ; 25 rpm, stall saver hyst? LD51C: FCB 3 ; LD51D: FCB 200 ; retract pulse steps LD51E: FCB 22 ; non-vol ram fail init for L00E4 LD51F: FCB 87 ; 8.7 vdc, stepper motor protect LD520: FCB 16 ; LD521: FCB 9 ; LD522: FCB 1 ; idle control delay for in gear, rpm > 900 rpm LD523: FCB 60 ; ; ---------------------- LD524: FCB 36 ; 102c, coolant threshold for added A/C IAC steps LD525: FCB 5 ; added A/C steps LD526: FCB 3 ; added steps for ?? LD527: FCB 65 ; LD528: FCB 2 ; LD529: FCB 0 ; LD52A: FCB 45 ; 562.5 rpm, added to idle rpm for low BatV? LD52B: FCB 80 ; 1000 idle rpm for aldl mode LD52C: FCB 44 ; 550 rpm, desired idle speed LD52D: FCB 1 ; added to IAC w/low BatV LD52E: FCB 12 ; max added to IAC w/low BatV LD52F: FCB 250 ; mph threshold LD530: FCB 126 ; BatV thres, 12.6 volts LD531: FCB 16 ; delay val for low BatV changes LD532: FCB 191 ; Max IAC steps LD533: FCB 90 ; LD534: FCB 56 ; LD535: FCB 112 ; rpm / 12.5, 1400 rpm LD536: FCB 72 ; rpm / 12.5, 900 rpm LD537: FCB 2 ; LD538: FCB 96 ; max TF steps LD539: FCB 32 ; TF decay filt coef, < low mph LD53A: FCB 16 ; TF decay filt coef, > low mph & < high mph LD53B: FCB 25 ; TF decay filt coef, > high mph LD53C: FCB 64 ; filt coef LD53D: FCB 15 ; filt coef LD53E: FCB 5 ; TF decay low mph thres, between filt coef @ D539 & D53A LD53F: FCB 20 ; TF decay high mph thres, between filt coef @ D53A & D53B LD540: FCB 10 ; min TF steps if mph > 5 LD541: FCB 6 ; 2.3%, TF tps% bias LD542: FCB 32 ; TF factor in prk/neut LD543: FCB 64 ; TF factor not in prk/neut LD544: FCB 4 ; LD545: FCB 156 ; LD546: FCB 25 ; mph threshold, IAC bias ;*================================================== ;* IAC Motor Position vs Coolant ;* ;* Tbl = Steps ;*================================================== LD547: ;--------------------------------- ; steps ; Deg c Deg f ;--------------------------------- FCB 200 ; COLD COLD FCB 190 ; -8.5 17 FCB 154 ; 6.0 43 FCB 140 ; 15.5 60 FCB 131 ; 23.5 74 FCB 125 ; 30.5 87 FCB 115 ; 37.0 99 FCB 100 ; 43.3 110 FCB 85 ; 49.3 121 FCB 75 ; 56.0 133 FCB 68 ; 63.0 145 FCB 66 ; 71.0 160 FCB 66 ; 80.0 176 FCB 64 ; 91.0 196 FCB 65 ; 107. 225 FCB 65 ; 136. 277 FCB 65 ; HOT HOT ;*================================================== ;* Position After Motor Reset vs Baro ;* ;* Tbl = Steps ;*================================================== LD558: ;--------------------------------- ; STEPS ; Kpa BARO ;--------------------------------- FCB 20 ; 75 FCB 18 ; 85 FCB 15 ; 95 FCB 10 ; 105 ;*================================================== ;* A/C requested additional steps ;* ;* Tbl = Steps ;*================================================== LD55C: ;--------------------------------- ; STEPS ; Kpa BARO ;--------------------------------- FCB 4 ; 75 FCB 2 ; 85 FCB 0 ; 95 FCB 0 ; 105 ;*================================================== ;* Additional IAC Motor Position vs Coolant ;* ;* Tbl = Steps ;*================================================== LD560: ;--------------------------------- ; steps ; Deg c Deg f ;--------------------------------- FCB 1 ; COLD COLD FCB 1 ; 6.0 43 FCB 1 ; 23.5 74 FCB 1 ; 37.0 99 FCB 1 ; 49.3 121 FCB 1 ; 63.0 145 FCB 1 ; 80.0 176 FCB 1 ; 107. 225 FCB 3 ; HOT HOT ;----------------------------------------------- ; ; Start of Code ; ;----------------------------------------------- ORG $D569 ;*============================================== ;* ;* Fuel Minor Loop ;* ;*============================================== LD569: 86 03 LDAA #3 ; O2 channel LD56B: C6 01 LDAB #1 ; return immed LD56D: BD FC 1A JSR LFC1A ; ADC routine LD570: BD FA 90 JSR LFA90 ; ; ; ; Lookup VE% from FL2 table ; LD573: 96 1B LDAA L001B ; rpm / 25 LD575: CE D2 F9 LDX #$D2F9 ; FL2 VE% tbl LD578: BD FB 95 JSR LFB95 ; 2d lkup LD57B: 97 50 STAA L0050 ; ; ; ; read O2 from ADC & start tps convert ; LD57D: BD FC 27 JSR LFC27 ; get O2 val from adc LD580: 97 39 STAA L0039 ; save raw O2 ; LD582: 86 0B LDAA #11 ; tps channel LD584: C6 01 LDAB #1 ; return immed LD586: BD FC 1A JSR LFC1A ; ADC routine LD589: 96 3A LDAA L003A ; O2, minor loop filtered LD58B: 97 B9 STAA L00B9 ; O2, minor loop filtered, one delayed from L003A ; ; lag filter O2 term ; LD58D: DE 3A LDX L003A ; O2, minor loop filtered LD58F: 96 39 LDAA L0039 ; O2, adc raw LD591: F6 D2 1C LDAB LD21C ; filt coef, 240 LD594: BD FB 40 JSR LFB40 ; Lag Filter LD597: DD 3A STD L003A ; O2, minor loop filtered ; LD599: 58 LSLB ; round up A, O2 val, filtered LD59A: 89 00 ADCA #0 ; LD59C: 97 39 STAA L0039 ; O2, minor loop filtered (rndup) ; ; lag filter O2 term vs. airflow ; LD59E: 36 PSHA ; save O2 LD59F: 96 BA LDAA L00BA ; gms/sec, limited to 64 LD5A1: CE D3 DE LDX #$D3DE ; filt coef tbl vs gms/sec LD5A4: BD FB 95 JSR LFB95 ; 2d lkup LD5A7: 16 TAB ; filt coef LD5A8: 32 PULA ; O2 val LD5A9: DE 3E LDX L003E ; O2, filtered vs. airflow LD5AB: BD FB 40 JSR LFB40 ; Lag Filter LD5AE: DD 3E STD L003E ; O2, filtered vs. airflow ; ; Lookup Main VE% ; LD5B0: 96 25 LDAA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LD5B2: 44 LSRA ; LD5B3: D6 1B LDAB L001B ; rpm / 25 LD5B5: 2A 02 BPL LD5B9 ; LD5B7: C6 80 LDAB #128 ; LD5B9: CE D2 AE LDX #$D2AE ; LD5BC: BD FB B3 JSR LFBB3 ; 3d lkup LD5BF: 9B 50 ADDA L0050 ; add in VE% from FL2 tbl LD5C1: 24 02 BCC LD5C5 ; LD5C3: 86 FF LDAA #255 ; ; LD5C5: 97 A8 STAA L00A8 ; VE% ; ; ; get TPS val from adc ; LD5C7: BD FC 27 JSR LFC27 ; get tps val from adc LD5CA: 97 42 STAA L0042 ; tps, adc cnts, volts = n * .0196 ; ; ; ; LD5CC: D6 08 LDAB L0008 ; status word LD5CE: C4 DF ANDB #$DF ; LD5D0: 96 01 LDAA L0001 ; status word LD5D2: 2A 18 BPL LD5EC ; Engine is not Running ; LD5D4: B6 D4 3A LDAA LD43A ; Diag mask 1, 1111 1111 LD5D7: 85 04 BITA #$04 ; LD5D9: 27 19 BEQ LD5F4 ; ; LD5DB: 96 42 LDAA L0042 ; tps, adc cnts, volts = n * .0196 LD5DD: B1 D4 52 CMPA LD452 ; LD5E0: 24 12 BCC LD5F4 ; ; LD5E2: 96 12 LDAA L0012 ; error flag 1 LD5E4: 8A 04 ORAA #$04 ; LD5E6: 97 12 STAA L0012 ; error flag 1 LD5E8: CA 20 ORAB #$20 ; LD5EA: 20 08 BRA LD5F4 ; ; LD5EC: B6 D2 1A LDAA LD21A ; 51, tps idle setting init LD5EF: 97 47 STAA L0047 ; tps minimum setting, idle position ; LD5F1: 7F 00 48 CLR L0048 ; ; ; ; Test if in Idle ; LD5F4: D7 08 STAB L0008 ; status word LD5F6: BD FC DA JSR LFCDA ; minimum tps setting & tps% calc LD5F9: D6 02 LDAB L0002 ; status word LD5FB: C4 7F ANDB #$7F ; pre-clr in idle bit LD5FD: B1 D5 14 CMPA LD514 ; 5, 2% tps LD600: 22 09 BHI LD60B ; bra if tps% > 2%, not in idle ; LD602: 96 30 LDAA L0030 ; mph / 1, filtered LD604: B1 D2 85 CMPA LD285 ; 7 mph LD607: 22 02 BHI LD60B ; bra if mph > 7 mph ; LD609: CA 80 ORAB #$80 ; set in idle bit LD60B: D7 02 STAB L0002 ; status word ; ; ; Take two paths depending on engine running or not ; LD60D: 96 01 LDAA L0001 ; status word LD60F: 2B 03 BMI LD614 ; Engine is Running LD611: 7E D6 D5 JMP LD6D5 ; ;----------------------------------------------- ; ; Engine is Running ; ;----------------------------------------------- LD614: F6 08 01 LDAB L0801 ; MCU2 I/O LD617: 96 03 LDAA L0003 ; status word LD619: 85 08 BITA #$08 ; LD61B: 27 15 BEQ LD632 ; ; LD61D: C5 10 BITB #$10 ; pk/neut bir LD61F: 26 15 BNE LD636 ; bra if in pk/neut ; LD621: 84 F7 ANDA #$F7 ; clear b3, pk/neut status bit ; LD623: F6 D2 8D LDAB LD28D ; 0, coolant thres LD626: 85 20 BITA #$20 ; LD628: 26 0E BNE LD638 ; ; LD62A: D1 21 CMPB L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LD62C: 24 0A BCC LD638 ; ; LD62E: 8A 60 ORAA #$60 ; LD630: 20 06 BRA LD638 ; ; ; ; test for pk/neut on io and set internal status bit ; LD632: C5 10 BITB #$10 ; b4 of MCUIO2, 0801 LD634: 27 02 BEQ LD638 ; bra if not in pk/nuet ; LD636: 8A 08 ORAA #$08 ; set pk/neut status bit ; ; save status bit ; LD638: 97 03 STAA L0003 ; status word ; ; ; ; LD63A: 5F CLRB ; LD63B: 96 25 LDAA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LD63D: 93 2C SUBD L002C ; s/d map, slo filtered from L0025 LD63F: 23 2E BLS LD66F ; bra if map val is dropping, less load ; LD641: 5D TSTB ; test to rnd up A LD642: 2A 01 BPL LD645 ; no rndup of A ; LD644: 4C INCA ; rndup A ; LD645: 36 PSHA ; Save delta of rising map LD646: 97 2F STAA L002F ; Save delta of rising map ;------------------------------------------------- ; Is map rising fast enough to need a map AE? ;------------------------------------------------- LD648: F6 D2 1E LDAB LD21E ; 32 ; LD64B: 96 43 LDAA L0043 ; tps%, from idle LD64D: B1 D2 1F CMPA LD21F ; 48, 18.7% LD650: 22 05 BHI LD657 ; bra if tps% > 18.7% ; ;------------------------------------------------- ; map ae term requirement is dbl'd ;------------------------------------------------- LD652: 58 LSLB ; double val from D21E, LD653: 24 02 BCC LD657 ; ; LD655: C6 FF LDAB #255 ; ;------------------------------------------------- ; Have enough delta map for AE? ;------------------------------------------------- LD657: 32 PULA ; get delta of rising map LD658: 11 CBA ; compare LD659: 23 17 BLS LD672 ; bra if not enough delta map ;------------------------------------------------- ; Have enough delta map for map AE ;------------------------------------------------- ; Lk Up Accel Enrich vs Diff Map ; *** Pump Shot *** ; ; Async Only To Stretch Bpw ; Table = msec * 16.384 ;------------------------------------------------- LD65B: CE D2 95 LDX #$D295 ; LD65E: BD FB 8C JSR LFB8C ; 2d lkup w/line cnt ;------------------------------------------------- ; see if enough tps% to double map AE term ;------------------------------------------------- LD661: D6 43 LDAB L0043 ; tps%, from idle LD663: F1 D2 20 CMPB LD220 ; 128 LD666: 23 0B BLS LD673 ; ; LD668: 48 ASLA ; LD669: 24 08 BCC LD673 ; LD66B: 86 FF LDAA #255 ; LD66D: 20 04 BRA LD673 ; ; ; ; map is dropping ; LD66F: 7F 00 2F CLR L002F ; diff map ;------------------------------------------------- ; Save Map Pump shot value ;------------------------------------------------- LD672: 4F CLRA ; ; LD673: 97 4B STAA L004B ; save pump shot ;------------------------------------------------- ; Ck Current Tps vs Old tps ; Check if enough delta tps for tps Accel Enrich ;------------------------------------------------- LD675: D6 E0 LDAB L00E0 ; status word LD677: 96 43 LDAA L0043 ; tps%, from idle LD679: 90 44 SUBA L0044 ; tps%, one delayed from L0043 LD67B: 23 20 BLS LD69D ; bra if new tps% <= old tps% ; clear PS ; ; reg A == delta tps if > 0 ; ; ck afr opt word 2 ; ; LD67D: C5 10 BITB #$10 ; LD67F: 26 05 BNE LD686 ; ; ; ; check for enough delta tps to enrich ae ; LD681: B1 D2 21 CMPA LD221 ; 4, 1.6% tps LD684: 23 17 BLS LD69D ; bra if delta tps% <= 1.6% ; go clr tps PS ; LD686: 48 ASLA ; delta tps% *= 2 LD687: 25 06 BCS LD68F ; ; LD689: 48 ASLA ; delta tps% *= 2 LD68A: 25 03 BCS LD68F ; ; LD68C: 48 ASLA ; delta tps% *= 2 LD68D: 24 02 BCC LD691 ; ; LD68F: 86 FF LDAA #255 ; clr ovrflw ;------------------------------------------------- ; Lk Up Accel Enrich vs Diff Tps ; **** Tps Pump Shot ****** ; ; Async Only To Stretch Bpw. ; Table = msec * 16.384 ;------------------------------------------------- LD691: CE D2 9B LDX #$D29B ; LD694: BD FB 8C JSR LFB8C ; 2d lkup w/line cnt ; LD697: D6 E0 LDAB L00E0 ; status word LD699: CA 10 ORAB #$10 ; set b4, (tps ae in effect) LD69B: 20 03 BRA LD6A0 ; ;------------------------------------------------- ; clear tps pump shot value ;------------------------------------------------- LD69D: 4F CLRA ; LD69E: C4 EF ANDB #$EF ; ;------------------------------------------------- ; save tps AE status & term ;------------------------------------------------- LD6A0: D7 E0 STAB L00E0 ; save status word LD6A2: 97 4A STAA L004A ; save pump shot bpw ;------------------------------------------------- ; check for opening IAC, add extra fuel ;------------------------------------------------- LD6A4: 4F CLRA ; pre-clr, IAC added fuel when opening LD6A5: D6 E0 LDAB L00E0 ; status word LD6A7: C5 04 BITB #$04 ; b2 (iac opening) LD6A9: 27 03 BEQ LD6AE ; ; LD6AB: B6 D2 22 LDAA LD222 ; IAC opening additional AE bpw, 120usc ;------------------------------------------------- ; Sum totals: IAC map AE & tps AE ;------------------------------------------------- LD6AE: 9B 4A ADDA L004A ; add IAC opening to ae bpw LD6B0: 25 04 BCS LD6B6 ; bra if ovrflw ; LD6B2: 9B 4B ADDA L004B ; add in map ae LD6B4: 24 02 BCC LD6B8 ; ; LD6B6: 86 FF LDAA #255 ; clear ovrflw LD6B8: 27 13 BEQ LD6CD ; ; ;------------------------------------------------- ; reg A has total additional async fuel, ; now scale according to coolant term ; and add to fuel accumulator. ;------------------------------------------------- LD6BA: D6 99 LDAB L0099 ; accel enrichment vs coolant LD6BC: 3D MUL ; LD6BD: 04 LSRD ; LD6BE: 04 LSRD ; LD6BF: 04 LSRD ; ; LD6C0: D3 97 ADDD L0097 ; async fuel accumulator LD6C2: DD 97 STD L0097 ; async fuel accumulator LD6C4: FD 04 47 STD L0447 ; HU ram ;------------------------------------------------- ; do status bits ;------------------------------------------------- LD6C7: 96 0D LDAA L000D ; status word LD6C9: 8A 60 ORAA #$60 ; b6 & b5, reset INT & quasi async LD6CB: 20 04 BRA LD6D1 ; ; ;------------------------------------------------- ; bra here for AE & IAC sums == 0 ;------------------------------------------------- LD6CD: 96 0D LDAA L000D ; status word LD6CF: 84 BF ANDA #$BF ; 1011 1111 ; LD6D1: 97 0D STAA L000D ; status word LD6D3: 20 09 BRA LD6DE ; ; ; ; Eng not running branches here ; LD6D5: 96 43 LDAA L0043 ; tps%, from idle LD6D7: 5F CLRB ; LD6D8: DD 45 STD L0045 ; tps%, slow filtered ; LD6DA: 96 25 LDAA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LD6DC: DD 2C STD L002C ; s/d map, slo filtered from L0025 ; LD6DE: 96 DF LDAA L00DF ; status word LD6E0: 85 40 BITA #$40 ; engine start ok LD6E2: 27 16 BEQ LD6FA ; bra to not start eng ; ; ; eng start ok here ; ; Check for high speed fuel shutoff ; LD6E4: F6 D2 61 LDAB LD261 ; 255 mph LD6E7: 96 0F LDAA L000F ; status word LD6E9: 85 01 BITA #$01 ; fuel kill bit, 1 == in kill LD6EB: 27 06 BEQ LD6F3 ; bra if b0 == 0 ; LD6ED: 7A 00 0F DEC L000F ; set b0 to 0 LD6F0: F6 D2 62 LDAB LD262 ; 255 mph ; LD6F3: D1 30 CMPB L0030 ; mph / 1, filtered LD6F5: 22 06 BHI LD6FD ; bra if thres > current mph LD6F7: 7C 00 0F INC L000F ; set b0 of L000F to 1 ; LD6FA: 7E D8 74 JMP LD874 ; kill engine ;----------------------------------------------- ; ; Lets do fuel, engine run OK'd ; ;----------------------------------------------- ;*============================================== ;* ;* Start building the BPW ;* ;* BPW = BPC * MAP * ~T * ~AFR * VE * BVcor * BLM * DFCO * DE +- CLT ;* ;*============================================== LD6FD: 96 A5 LDAA L00A5 ; Injector Constant LD6FF: D6 A3 LDAB L00A3 ; desired AFR LD701: C1 3F CMPB #63 ; 6.3 afr LD703: 22 2D BHI LD732 ; bra if afr > 6.3 ; LD705: C1 0F CMPB #15 ; 1.5 afr LD707: 22 09 BHI LD712 ; bra if afr > 1.5 ( && < 6.3) ; ;------------------------------------------------- ; AFR =< 1.5 ;------------------------------------------------- LD709: 5F CLRB ; lsb of bpw term LD70A: DD AA STD L00AA ; save that & inj cnst LD70C: 96 A3 LDAA L00A3 ; desired AFR LD70E: 48 ASLA ; x2 LD70F: 48 ASLA ; x2 LD710: 20 07 BRA LD719 ; ; ;------------------------------------------------- ; AFR > 1.5 & =< 6.3 ;------------------------------------------------- LD712: C6 40 LDAB #64 ; LD714: 3D MUL ; LD715: DD AA STD L00AA ; start of bpw LD717: 96 A3 LDAA L00A3 ; desired AFR ; LD719: 48 ASLA ; LD71A: 48 ASLA ; LD71B: 20 1C BRA LD739 ; ; ;----------------------------------------------- ; ; Another entry to below Subroutine to add to BPW ; ;----------------------------------------------- LD71D: 36 PSHA ; LD71E: DC AA LDD L00AA ; sync bpw LD720: 05 LSLD ; LD721: 24 03 BCC LD726 ; LD723: CC FF FF LDD #$FFFF ; clr ovrflw LD726: DD AA STD L00AA ; sync bpw LD728: 32 PULA ; ;----------------------------------------------- ; ; Subroutine to add to BPW ; ;----------------------------------------------- LD729: CE 00 AA LDX #$00AA ; sync bpw LD72C: BD FC 05 JSR LFC05 ; AB = (A x *X) / 256 LD72F: DD AA STD L00AA ; sync bpw LD731: 39 RTS ; ;----------------------------------------------- ; ; Build up that BPW ; ;----------------------------------------------- LD732: C6 10 LDAB #16 ; constant LD734: 3D MUL ; A has inj cnst LD735: DD AA STD L00AA ; sync bpw ; LD737: 96 A3 LDAA L00A3 ; desired AFR LD739: CE FE 35 LDX #$FE35 ; Inverse AFR term tbl LD73C: BD FB 8C JSR LFB8C ; 2d lkup w/line cnt LD73F: 8D E8 BSR LD729 ; add to BPW ; LD741: 96 A8 LDAA L00A8 ; VE% LD743: 8D E4 BSR LD729 ; add to BPW ; LD745: 96 2B LDAA L002B ; map term for BPW & gms/sec calc's LD747: 8D E0 BSR LD729 ; add to BPW ; LD749: 96 A9 LDAA L00A9 ; Inverse coolant term for bpw calc LD74B: 8D DC BSR LD729 ; add to BPW ; LD74D: 96 0D LDAA L000D ; status word LD74F: 2B 04 BMI LD755 ; bra if in PE/WOT mode LD751: 96 A1 LDAA L00A1 ; BLM, bin val LD753: 8D C8 BSR LD71D ; add to BPW * 2 ;----------------------------------------------- ; End of BPW calc so Far ;----------------------------------------------- ;*============================================== ;* ;* Check DFCO qual's ;* ;*============================================== ; LD755: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LD757: B1 D2 7E CMPA LD27E ; 231, 0c LD75A: 23 03 BLS LD75F ; coolant high enough for DFCO LD75C: 7E D7 FC JMP LD7FC ; skip dfco ;----------------------------------------------- ;----------------------------------------------- LD75F: 96 10 LDAA L0010 ; status word LD761: 85 10 BITA #$10 ; b4, in park/neut LD763: 26 23 BNE LD788 ; bra if b4 == 1, exit fuel c/o ; LD765: D6 08 LDAB L0008 ; status word LD767: C5 24 BITB #$24 ; tps diag bits LD769: 26 07 BNE LD772 ; skip tps qual if tps diags xx ; LD76B: 96 43 LDAA L0043 ; tps%, from idle LD76D: B1 D2 7C CMPA LD27C ; 8, 3.1% LD770: 24 2C BCC LD79E ; bra if tps% > 8 ; LD772: 96 1F LDAA L001F ; rpm / 12.5, filtered, one delayed LD774: 90 1D SUBA L001D ; rpm / 12.5, filtered LD776: 25 05 BCS LD77D ; bra if rpm rising ; LD778: B1 D2 76 CMPA LD276 ; delta rpm val, 4 LD77B: 22 0B BHI LD788 ; bra if delta rpm > 4: 50 rpm ; LD77D: C5 C0 BITB #$C0 ; LD77F: 26 34 BNE LD7B5 ; ; LD781: 96 2F LDAA L002F ; delta of rising map, from ae routine LD783: B1 D2 77 CMPA LD277 ; 10, 23KPa LD786: 23 1B BLS LD7A3 ; bra if delta map < 23 Kpa ;------------------------------- ; ; Here To Come Out of DFCO ; ; ; L009E: Post DFCO timer ; L00AF: DFCO timer ; ;------------------------------- ; LD788: 96 9E LDAA L009E ; post DFCO timer LD78A: 27 12 BEQ LD79E ; bra if tmr == 0 ; LD78C: DC 97 LDD L0097 ; async fuel accumulator LD78E: F3 D2 78 ADDD LD278 ; fuel pulse when exiting dfco LD791: 24 03 BCC LD796 ; bra if no ovrflw ; LD793: CC 7F FF LDD #$7FFF ; use max LD796: DD 97 STD L0097 ; async fuel accumulator LD798: 96 0D LDAA L000D ; status word LD79A: 8A 20 ORAA #$20 ; set b5, quasi-async fuel in effect LD79C: 97 0D STAA L000D ; status word ; ; ; DFCO just active ; LD79E: 7F 00 9E CLR L009E ; post DFCO timer LD7A1: 20 4D BRA LD7F0 ; ; ; ; do map limits ; LD7A3: 96 28 LDAA L0028 ; map adc value, raw LD7A5: D6 07 LDAB L0007 ; status word LD7A7: B1 D2 74 CMPA LD274 ; decel fuel c/o map thresh, lower, 23 kpa LD7AA: 25 09 BCS LD7B5 ; bra if map < lower limit ; LD7AC: C5 08 BITB #$08 ; b3, dfco active bit LD7AE: 27 40 BEQ LD7F0 ; bra if not in dfco ; LD7B0: B1 D2 75 CMPA LD275 ; decel fuel c/o map thresh, upper, 35 KPa LD7B3: 24 3B BCC LD7F0 ; bra if map > upper limit ; ; ; do rpm & mph limits ; ; 4 line table ; ; rpm: 1350/850 ; mph: 40/35 ; LD7B5: CE D2 70 LDX #$D270 ; point to 4 line tbl, use X as index LD7B8: D6 07 LDAB L0007 ; status word LD7BA: C5 08 BITB #$08 ; b3, dfco avtive bit LD7BC: 27 01 BEQ LD7BF ; bra if not in dfco ; LD7BE: 08 INX ; nxt tbl entry ; LD7BF: 96 1B LDAA L001B ; rpm / 25 LD7C1: A1 00 CMPA 0,X ; 1350/850 rpm LD7C3: 23 C3 BLS LD788 ; bra to exit dfco ; LD7C5: 96 30 LDAA L0030 ; mph / 1, filtered LD7C7: A1 02 CMPA 2,X ; 40/35 mph LD7C9: 25 BD BCS LD788 ; bra to exit dfco ; ; ; Check decel fuel C/O timer ; LD7CB: 96 9F LDAA L009F ; DFCO timer LD7CD: 26 1E BNE LD7ED ; ; LD7CF: CA 08 ORAB #$08 ; set dfco active bit LD7D1: D7 07 STAB L0007 ; status word LD7D3: B6 D2 7B LDAA LD27B ; 400 msec, after decel fuel cut off for bpw ; val = msec x 0.80 LD7D6: 97 9E STAA L009E ; post DFCO timer ; LD7D8: 96 0D LDAA L000D ; status word LD7DA: 8A 10 ORAA #$10 ; set b4, entering decel enleanment LD7DC: 97 0D STAA L000D ; status word ; LD7DE: 96 9D LDAA L009D ; DFCO fuel mult LD7E0: B0 D2 7D SUBA LD27D ; 10.2% mult for bpw in decel fuel c/o LD7E3: 24 01 BCC LD7E6 ; bra if no underflow ; LD7E5: 4F CLRA ; LD7E6: 97 9D STAA L009D ; DFCO fuel mult LD7E8: BD D7 29 JSR LD729 ; add to BPW LD7EB: 20 6B BRA LD858 ; ; ; LD7ED: 4A DECA ; decr decel fuel tmr LD7EE: 20 03 BRA LD7F3 ; ; ; ; do DFCO timers ; LD7F0: B6 D2 7A LDAA LD27A ; 80 LD7F3: 97 9F STAA L009F ; save DFCO timer LD7F5: 96 9E LDAA L009E ; post DFCO LD7F7: 27 03 BEQ LD7FC ; bra if tmr == 0 ; LD7F9: 7A 00 9E DEC L009E ; decr post DFCO timer ;------------------------------------------------- ; ; No DFCO bra here ; ;------------------------------------------------- LD7FC: 96 07 LDAA L0007 ; status word LD7FE: 84 F7 ANDA #$F7 ; clr b3, dfco bit LD800: 97 07 STAA L0007 ; status word LD802: 86 FF LDAA #255 ; LD804: 97 9D STAA L009D ; DFCO fuel mult, set to max ;*============================================== ;* ;* Check for decel enleanment ;* ;*============================================== LD806: DC 45 LDD L0045 ; tps%, slow filtered LD808: 58 LSLB ; get b7 of reg B, need to round LD809: 89 00 ADCA #0 ; round A LD80B: 24 01 BCC LD80E ; LD80D: 4A DECA ; ; LD80E: 90 43 SUBA L0043 ; tps%, from idle LD810: 25 40 BCS LD852 ; bra if filtered tps < current, skip enlean ; ;------------------------------- ; check decel enleanment quals ;------------------------------- ; ; check delta tps% ; ; LD812: B1 D2 6D CMPA LD26D ; 3, 1.2% LD815: 23 3B BLS LD852 ; no decel enlean if <= 1.2% ; ; ; check delta map ; LD817: DC 2C LDD L002C ; s/d map, slo filtered from L0025 LD819: 58 LSLB ; LD81A: 89 00 ADCA #0 ; LD81C: 24 01 BCC LD81F ; LD81E: 4A DECA ; LD81F: 90 25 SUBA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LD821: 25 2F BCS LD852 ; no decel enlean ; LD823: B1 D2 6E CMPA LD26E ; 8 LD826: 23 2A BLS LD852 ; no decel enlean if map delta < ; ; ; do decel enleanment ; ; ((decel fac * cool fac) * 8 ) / 256 ; ; LD828: F6 D2 6F LDAB LD26F ; 224, decel enleanment factor LD82B: 3D MUL ; LD82C: D6 9C LDAB L009C ; decel coolant factor vs coolant LD82E: 3D MUL ; AB = A * B LD82F: 05 LSLD ; AB *= 8 LD830: 25 06 BCS LD838 ; LD832: 05 LSLD ; LD833: 25 03 BCS LD838 ; LD835: 05 LSLD ; LD836: 24 02 BCC LD83A ; LD838: 86 FF LDAA #255 ; LD83A: 40 NEGA ; LD83B: 27 15 BEQ LD852 ; no decel enlean ; LD83D: D6 0D LDAB L000D ; status word LD83F: CA 10 ORAB #$10 ; decel enleanment in effect LD841: D7 0D STAB L000D ; status word LD843: 36 PSHA ; enleanment bpw term ; ; mult decel enleanment into sync & async bpw's ; LD844: CE 00 97 LDX #$0097 ; async fuel accumulator LD847: BD FC 05 JSR LFC05 ; AB = (A x *X) / 256 LD84A: DD 97 STD L0097 ; async fuel accumulator ; LD84C: 32 PULA ; enleanment bpw term LD84D: BD D7 29 JSR LD729 ; add to sync BPW LD850: 20 06 BRA LD858 ; ;------------------------------------------------- ; ; Skip decel enleanment bra here ; ;------------------------------------------------- LD852: 96 0D LDAA L000D ; status word LD854: 84 EF ANDA #$EF ; 1110 1111 LD856: 97 0D STAA L000D ; status word ;*============================================== ;* ;* Continue Building BPW ;* ;*============================================== ;------------------------------------------------- ; ; Add volts correction term to bpw ; ;------------------------------------------------- LD858: 96 B1 LDAA L00B1 ; bpw inj volts correction term LD85A: BD D7 1D JSR LD71D ; add to BPW * 2 ;------------------------------------------------- ; ; add closed loop correction term to BPW ; ; INT & Proportional ; ;------------------------------------------------- LD85D: 4F CLRA ; LD85E: D6 B0 LDAB L00B0 ; closed loop correction term LD860: 2B 09 BMI LD86B ; bra if term negative ; ;------------------------------- ; Do positive INT/Prop, more fuel ;------------------------------- LD862: D3 AA ADDD L00AA ; bpw, (sync), add in clsd lp corr term LD864: 24 10 BCC LD876 ; bra if no overflow ; LD866: CC FF FF LDD #$FFFF ; max it, clr ovrflw LD869: 20 0B BRA LD876 ; continue >> ; ;------------------------------- ; Do negative INT/Prop, less fuel ;------------------------------- LD86B: 50 NEGB ; B is INT/Prop term LD86C: DD 49 STD L0049 ; tmp storage ; LD86E: DC AA LDD L00AA ; sync bpw LD870: 93 49 SUBD L0049 ; subtract out clsd lp corr term LD872: 24 02 BCC LD876 ; bra if no underflow ;------------------------------- ; no fuel here ;------------------------------- LD874: 4F CLRA ; to clear sync bpw LD875: 5F CLRB ; to clear sync bpw ;------------------------------- ; ; Done with INT & Prop terms, ; Save Final BPW result! ; ;------------------------------- LD876: DD AA STD L00AA ; sync bpw LD878: FD 04 58 STD L0458 ; HU ram ;------------------------------- ; Mult BPW * 4 and save tmp ; for async bpw calc ;------------------------------- LD87B: 05 LSLD ; BPW *= 2 LD87C: 25 05 BCS LD883 ; bra if ovrflw ; LD87E: 05 LSLD ; BPW *= 2 LD87F: 25 02 BCS LD883 ; bra if ovrflw ; LD881: 2A 03 BPL LD886 ; bra if not ovrflw ; LD883: CC 7F FF LDD #$7FFF ; load max ; ;------------------------------------------------- ; ; Look Up Async Mult vs Rpm ; ; Convert sync bpw to an async bpw term. This ; term is not always used. However, it is ; available if required. ;------------------------------------------------- LD886: DD 4B STD L004B ; tmp of modified sync bpw LD888: 96 1B LDAA L001B ; rpm / 25 LD88A: CE D3 9C LDX #$D39C ; conversion tbl LD88D: BD FB 8C JSR LFB8C ; 2d lkup w/line cnt ; LD890: CE 00 4B LDX #$004B ; addr of tmp of modified sync bpw LD893: BD FC 05 JSR LFC05 ; AB = (A x *X) / 256 LD896: DD 4F STD L004F ; tmp storage ;*============================================== ;* ;* Time to do Injector Pulse Programming ;* ;* ;* 0xBC0E: sync pulse width counter ;* 0xBC14: async pulse width counter ;* 0xBC3C: PWM control, bit 0x0080 for async bpw ;* ;*============================================== LD898: 96 00 LDAA L0000 ; status word LD89A: 85 10 BITA #$10 ; engine shutdown LD89C: 27 08 BEQ LD8A6 ; bra if not shutting down ; ; Do Zero Pw Sync Injection, engine shutdown ; or fuel kill in effect. ; LD89E: 4F CLRA ; LD89F: 5F CLRB ; LD8A0: FD BC 0E STD LBC0E ; ecu sync bpw LD8A3: 7E D9 47 JMP LD947 ; ;------------------------------------------------ ; ; Test if need to do async fuel. ; ; Test BPW switch points, if < low point, do ; async fuel. Bpw needs to be > than upper ; point to go back to sync fuel. ; ;------------------------------------------------ LD8A6: 96 01 LDAA L0001 ; status word LD8A8: 2A 24 BPL LD8CE ; Engine is not Running ; LD8AA: DE AA LDX L00AA ; sync bpw LD8AC: BC D2 63 CPX LD263 ; max bpw hyst val, 992usec LD8AF: 22 1D BHI LD8CE ; ; LD8B1: 96 0E LDAA L000E ; status word LD8B3: 85 10 BITA #$10 ; b4, async fuel in effect LD8B5: 26 09 BNE LD8C0 ; bra if in async fuel, stay ; LD8B7: BC D2 65 CPX LD265 ; min bpw hyst val, 687usec LD8BA: 22 12 BHI LD8CE ; ; LD8BC: 8A 10 ORAA #$10 ; set b4, async fuel in effect LD8BE: 97 0E STAA L000E ; status word ;------------------------------- ; ; Doing async fuel only ; ;------------------------------- LD8C0: DC 4F LDD L004F ; async inj BPW (cnvt'd from sync bpw) LD8C2: D3 AC ADDD L00AC ; async tmp bpw LD8C4: DD AC STD L00AC ; async tmp bpw ; ; Do Zero Sync Injection, ; then go do async fuel ; LD8C6: CE 00 00 LDX #$0000 ; LD8C9: FF BC 0E STX LBC0E ; ecu sync bpw LD8CC: 20 20 BRA LD8EE ; bra & do async fuel ;------------------------------- ; ; Do sync fuel. Clear async ; fuel flag & tmp async fuel ; ;------------------------------- LD8CE: 96 0E LDAA L000E ; a/f mode word flag LD8D0: 84 EF ANDA #$EF ; clr b4, async fuel flag LD8D2: 97 0E STAA L000E ; status word, a/f mode LD8D4: CE 00 00 LDX #$0000 ; LD8D7: DF AC STX L00AC ; clear async fuel ; ; Add In Inj Offset Bias ; And Do Sync Injection ; LD8D9: FC D2 67 LDD LD267 ; injector bias, 396usec LD8DC: D3 AA ADDD L00AA ; sync bpw LD8DE: 25 02 BCS LD8E2 ; bra if no ovrflw LD8E0: 2A 03 BPL LD8E5 ; LD8E2: CC 7F FF LDD #7FFF ; ; LD8E5: FD BC 0E STD LBC0E ; ecu sync bpw ; ; Test if doing quasi-async fuel ; LD8E8: 96 0D LDAA L000D ; status word LD8EA: 85 20 BITA #$20 ; quasi flag LD8EC: 27 59 BEQ LD947 ; bra if no quasi async fuel ;------------------------------- ; ; Do (quasi)ASync fuel ; ;------------------------------- LD8EE: DC AC LDD L00AC ; async tmp bpw LD8F0: D3 97 ADDD L0097 ; async fuel accumulator LD8F2: 37 PSHB ; LD8F3: 36 PSHA ; LD8F4: 38 PULX ; async bpw LD8F5: BC D2 69 CPX LD269 ; max async bpw, 12msec LD8F8: 22 13 BHI LD90D ; bra if bpw > 12msec ; LD8FA: BC D2 6B CPX LD26B ; min async bpw, 687usec LD8FD: 23 42 BLS LD941 ; bra if bpw < minimum ; LD8FF: F3 D2 67 ADDD LD267 ; injector bias, 396usec LD902: FD BC 14 STD LBC14 ; ecu async bpw ; ; ; Now Clear Async Values ; LD905: 4F CLRA ; LD906: 5F CLRB ; LD907: DD 97 STD L0097 ; async fuel accumulator LD909: DD AC STD L00AC ; async tmp bpw LD90B: 20 18 BRA LD925 ; ;------------------------------- ; ; Async Fuel Requested is ; greater than 11.99msec. ; ;------------------------------- LD90D: FC D2 69 LDD LD269 ; LD910: F3 D2 67 ADDD LD267 ; injector bias, 396usec LD913: FD BC 14 STD LBC14 ; ecu async bpw LD916: DC AC LDD L00AC ; async tmp bpw LD918: B3 D2 69 SUBD LD269 ; max async bpw, 12msec LD91B: 24 06 BCC LD923 ; ; LD91D: D3 97 ADDD L0097 ; async fuel accumulator LD91F: DD 97 STD L0097 ; async fuel accumulator LD921: 4F CLRA ; LD922: 5F CLRB ; ; LD923: DD AC STD L00AC ; async tmp bpw ;------------------------------- ; ; toggle pwm bit to kick off ; async fuel. ; ;------------------------------- LD925: BD FD 19 JSR LFD19 ; delay, rts only LD928: FC BC 3C LDD LBC3C ; PWM control register LD92B: C4 7F ANDB #$7F ; clr b7 LD92D: BD FD 19 JSR LFD19 ; delay, rts only ; LD930: FD BC 3C STD LBC3C ; PWM control register LD933: CA 80 ORAB #$80 ; set b7 LD935: BD FD 19 JSR LFD19 ; delay, rts only ; LD938: FD BC 3C STD LBC3C ; PWM control register ; LD93B: 96 0D LDAA L000D ; status word LD93D: 8A 20 ORAA #$20 ; set b5, quasi-async fuel LD93F: 20 04 BRA LD945 ; ; ;------------------------------- ; Finished w/Async fuel ;------------------------------- LD941: 96 0D LDAA L000D ; status word LD943: 84 DF ANDA #$DF ; clr b5, quasi-async fuel ; LD945: 97 0D STAA L000D ; status word ;*=============================================== ;* ;* Jump to from zero sync fuel ;* ;* Alternate between two different code ;* paths every other pass through. ;* ;*=============================================== LD947: 96 66 LDAA L0066 ; 160Hz rts counter LD949: 84 03 ANDA #$03 ; LD94B: 81 03 CMPA #$03 ; LD94D: 27 03 BEQ LD952 ; LD94F: 7E DC 43 JMP LDC43 ; ;*================================================== ;* ;* Enter Fuel Loop1 ;* ;*================================================== ;------------------------------------------------- ; Decide whether to use open loop afr or ; closed loop afr. ;------------------------------------------------- LD952: B6 D2 32 LDAA LD232 ; 14.7, stoich LD955: D6 0E LDAB L000E ; status word, a/f mode LD957: 2B 1E BMI LD977 ; bra if in closed loop ; ; ; not closed loop here ; LD959: B6 D2 33 LDAA LD233 ; 18 (1.8 afr vs vac for idle) LD95C: D6 02 LDAB L0002 ; status word LD95E: 2B 08 BMI LD968 ; bra if in idle ; ;------------------------------------------------- ; Do Open Loop Engine Afr vs Vacuum/Coolant ;------------------------------------------------- LD960: CE D3 43 LDX #$D343 ; Open Loop AFR vs Vacuum LD963: 96 2E LDAA L002E ; vac LD965: BD FB 8C JSR LFB8C ; 2d lkup w/line cnt ; LD968: 9B B2 ADDA L00B2 ; add in afr from AfrCool tbl LD96A: 24 02 BCC LD96E ; bra if no ovrflw LD96C: 86 FF LDAA #255 ; ; LD96E: 90 E5 SUBA L00E5 ; choke adj, makes richer LD970: 25 04 BCS LD976 ; bra if udrflw LD972: 90 BC SUBA L00BC ; ??an afr val LD974: 24 01 BCC LD977 ; bra if no udrflw ; LD976: 4F CLRA ; clr undrflw ; ; Check if OK for hiway fuel mode ; LD977: D6 01 LDAB L0001 ; status word LD979: 2A 72 BPL LD9ED ; Engine is not Running ; LD97B: D6 0E LDAB L000E ; status word, a/f mode LD97D: 2A 35 BPL LD9B4 ; bra if open loop, no hiway ; LD97F: D6 2E LDAB L002E ; vac LD981: F1 D0 22 CMPB LD022 ; 240 LD984: 24 2E BCC LD9B4 ; bra if vac > thres, no hiway ; LD986: D6 21 LDAB L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LD988: F1 D2 28 CMPB LD228 ; 199, 20c LD98B: 24 27 BCC LD9B4 ; bra if cool < thres, no hiway ; LD98D: D6 DE LDAB L00DE ; status word LD98F: C5 10 BITB #$10 ; b4, ???? LD991: 26 07 BNE LD99A ; bra if b4 == 1, skip nxt qual ; LD993: D6 7D LDAB L007D ; used in egr test, a clsd lp term LD995: F1 D2 35 CMPB LD235 ; 166 LD998: 23 1A BLS LD9B4 ; bra if thres <= 166, no hiway ; LD99A: D6 08 LDAB L0008 ; status word LD99C: C5 C0 BITB #$C0 ; b7 & b6 LD99E: 26 14 BNE LD9B4 ; bra if b7 | b6 == 1, no hiway ; LD9A0: D6 30 LDAB L0030 ; mph / 1, filtered LD9A2: F1 D2 34 CMPB LD234 ; 52 mph LD9A5: 25 0D BCS LD9B4 ; bra if vehicle mph < 52, no hiway ; ; ; passed all quals for hiway mode ; LD9A7: D6 0F LDAB L000F ; status word LD9A9: C5 10 BITB #$10 ; in hiway mode LD9AB: 27 12 BEQ LD9BF ; bra if not in hiway mode, OK for hiway ; LD9AD: D6 A4 LDAB L00A4 ; HiWay Fuel timer, max time LD9AF: F1 D2 37 CMPB LD237 ; 255 LD9B2: 25 15 BCS LD9C9 ; bra if timer < 255, stay in hiway ; ; ; No hiway fuel here ; LD9B4: 7F 00 A4 CLR L00A4 ; HiWay Fuel timer LD9B7: D6 0F LDAB L000F ; status word LD9B9: C4 EF ANDB #$EF ; clr b4, 1110 1111 LD9BB: D7 0F STAB L000F ; status word LD9BD: 20 22 BRA LD9E1 ; ; ; Hiway fuel OK here ; LD9BF: D6 A4 LDAB L00A4 ; HiWay Fuel timer LD9C1: F1 D2 36 CMPB LD236 ; 100 LD9C4: 25 12 BCS LD9D8 ; bra if lockout timer < 100 LD9C6: 7F 00 A4 CLR L00A4 ; HiWay Fuel timer ; LD9C9: D6 0F LDAB L000F ; status word LD9CB: CA 10 ORAB #$10 ; set b4, in hiway afr mode LD9CD: D7 0F STAB L000F ; status word ; LD9CF: CE D3 BC LDX #$D3BC ; hiway afr tbl LD9D2: 96 2E LDAA L002E ; vac LD9D4: 44 LSRA ; LD9D5: BD FB 95 JSR LFB95 ; 2d lkup ; LD9D8: D6 66 LDAB L0066 ; 160Hz rts counter LD9DA: C1 33 CMPB #$33 ; chk if time to inc timer LD9DC: 26 03 BNE LD9E1 ; bra if not yet ; LD9DE: 7C 00 A4 INC L00A4 ; HiWay Fuel timer ; ; ; check that afr isn't any leaner than 20:1 ; LD9E1: B1 D2 53 CMPA LD253 ; 200, max lean afr, 20:1 LD9E4: 23 03 BLS LD9E9 ; LD9E6: B6 D2 53 LDAA LD253 ; 200, max lean afr, 20:1 LD9E9: 97 A3 STAA L00A3 ; desired AFR LD9EB: 20 38 BRA LDA25 ; ;----------------------------------------------- ; ; Engine not running branch here ; ;----------------------------------------------- LD9ED: B6 D2 55 LDAA LD255 ; clear flood afr, 20:1 LD9F0: F6 D2 54 LDAB LD254 ; clear flood tps% thres, 80% LD9F3: D1 43 CMPB L0043 ; tps%, from idle LD9F5: 23 2A BLS LDA21 ; bra if in clear flood ; LD9F7: 96 B3 LDAA L00B3 ; crank afr LD9F9: D6 21 LDAB L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LD9FB: F1 D2 56 CMPB LD256 ; 241, coolant threshold, -10c LD9FE: 23 21 BLS LDA21 ; bra if coolant > -10c ; ; ; Cold crank AFR Mult? for cts < -10c vs Vac ; LDA00: 36 PSHA ; LDA01: 96 2E LDAA L002E ; vac LDA03: C6 60 LDAB #96 ; LDA05: CE D3 80 LDX #$D380 ; LDA08: BD FB 91 JSR LFB91 ; 2d lkup w/SBA LDA0B: 33 PULB ; LDA0C: 3D MUL ; LDA0D: 05 LSLD ; LDA0E: 25 09 BCS LDA19 ; LDA10: 05 LSLD ; LDA11: 25 06 BCS LDA19 ; LDA13: 05 LSLD ; LDA14: 25 03 BCS LDA19 ; LDA16: 05 LSLD ; LDA17: 24 02 BCC LDA1B ; LDA19: 86 FF LDAA #255 ; ; LDA1B: 91 B2 CMPA L00B2 ; afr vs coolant, open loop LDA1D: 25 02 BCS LDA21 ; use richer of two afr's LDA1F: 96 B2 LDAA L00B2 ; afr vs coolant, open loop ; LDA21: 97 A3 STAA L00A3 ; desired AFR LDA23: 20 24 BRA LDA49 ; ;----------------------------------------------- ; ; Continue with eng running ; ;----------------------------------------------- ;*============================================== ;* ;* Do Power Enrichment Quals ;* ;*============================================== ; ; get baro adj tps% val ; LDA25: CE D3 AE LDX #$D3AE ; Tps Mult vs. Baro LDA28: BD FB 67 JSR LFB67 ; get a baro adjusted tps% value LDA2B: 36 PSHA ; save baro adj tps% ; ; get tps% required for PE from tbl vs. rpm ; LDA2C: CE D3 C5 LDX #$D3C5 ; tps% for pe tbl ; LDA2F: D6 21 LDAB L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LDA31: F1 D2 57 CMPB LD257 ; 23, coolant threshold, 120c LDA34: 23 03 BLS LDA39 ; bra if coolant > 120c ; LDA36: CE D3 B2 LDX #$D3B2 ; tps% for pe tbl ; ; ; Do Lookup for tps% required ; LDA39: 8D 16 BSR LDA51 ; do 2d lkup w/scaled rpm ; ; if in PE now, sub out tps% hyst ; LDA3B: 96 0D LDAA L000D ; status word LDA3D: 2A 06 BPL LDA45 ; bra if not in PE already ; LDA3F: F0 D2 58 SUBB LD258 ; result of lookup - 8 LDA42: 24 01 BCC LDA45 ; bra if no undrflw LDA44: 5F CLRB ; ; ; ; now test for enough tps% for PE ; LDA45: 32 PULA ; baro adj tps% LDA46: 10 SBA ; LDA47: 24 13 BCC LDA5C ; ; ; ; bra here for no PE ; LDA49: 96 0D LDAA L000D ; status word LDA4B: 84 7F ANDA #$7F ; clr b7, 0111 1111, PE mode bit LDA4D: 97 0D STAA L000D ; status word LDA4F: 20 29 BRA LDA7A ; ; ;----------------------------------------------- ; ; SubRoutine for 2d lookup w/scaled rpm val ; ;----------------------------------------------- LDA51: 96 1A LDAA L001A ; rpm scaled LDA53: 44 LSRA ; rpm /= 2 LDA54: 44 LSRA ; rpm /= 2 LDA55: 89 00 ADCA #0 ; rnd up A LDA57: BD FB 95 JSR LFB95 ; 2d lkup LDA5A: 16 TAB ; return w/val in both A & B LDA5B: 39 RTS ; and done >>>> ;----------------------------------------------- ; ; Go Into or Stay in PE/WOT mode ; ;----------------------------------------------- LDA5C: 96 0D LDAA L000D ; status word LDA5E: 8A 80 ORAA #$80 ; set b7, PE mode active bit LDA60: 97 0D STAA L000D ; status word ; LDA62: CE D3 B7 LDX #$D3B7 ; Wot Fuel Afr Vs. Rpm LDA65: 8D EA BSR LDA51 ; do 2d lkup w/scaled rpm ; LDA67: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LDA69: B1 D2 59 CMPA LD259 ; 112, ~55c LDA6C: 25 06 BCS LDA74 ; bra if coolant > thres ; LDA6E: F0 D2 5A SUBB LD25A ; 10, 1.0:1 afr richer LDA71: 24 01 BCC LDA74 ; ; LDA73: 5F CLRB ; ; ; Save current AFR, richer of two vals ; LDA74: D1 A3 CMPB L00A3 ; desired AFR LDA76: 24 02 BCC LDA7A ; LDA78: D7 A3 STAB L00A3 ; desired AFR ;----------------------------------------------- ; ; ; ;----------------------------------------------- LDA7A: 96 00 LDAA L0000 ; check for Headsup on line LDA7C: 85 02 BITA #$02 ; LDA7E: 27 03 BEQ LDA83 ; LDA80: BD 58 00 JSR L5800 ; ;*================================================== ;* ;* BLM Stuff ;* ;* See: ;*================================================== LDA83: 96 0D LDAA L000D ; status word LDA85: 84 FB ANDA #$FB ; clr b2, 1111 1011 INT reset bit LDA87: 97 0D STAA L000D ; status word ; ; Check if still in same BLM cell ; LDA89: D6 A0 LDAB L00A0 ; blm cell # in current use LDA8B: C4 03 ANDB #$03 ; LDA8D: CE D2 39 LDX #$D239 ; cell boundry tbl by rpm LDA90: 3A ABX ; LDA91: 09 DEX ; LDA92: 5D TSTB ; LDA93: 27 0F BEQ LDAA4 ; ; LDA95: A6 00 LDAA 0,X ; 32, 800 rpm LDA97: B0 D2 3F SUBA LD23F ; 2, 50 rpm hyst LDA9A: 25 04 BCS LDAA0 ; ; LDA9C: 91 1B CMPA L001B ; rpm / 25 LDA9E: 22 3B BHI LDADB ; ; LDAA0: C1 03 CMPB #3 ; LDAA2: 27 0B BEQ LDAAF ; ; LDAA4: A6 01 LDAA 1,X ; 64, 1600 rpm LDAA6: BB D2 3F ADDA LD23F ; 2, 50 rpm hyst LDAA9: 25 04 BCS LDAAF ; ; LDAAB: 91 1B CMPA L001B ; rpm / 25 LDAAD: 25 2C BCS LDADB ; ; LDAAF: D6 A0 LDAB L00A0 ; blm cell # in current use LDAB1: C4 0C ANDB #$0C ; LDAB3: 54 LSRB ; LDAB4: 54 LSRB ; ; LDAB5: CE D2 3C LDX #$D23C ; cell boundry tbl by map, 29.4 Kpa LDAB8: 3A ABX ; LDAB9: 09 DEX ; LDABA: 5D TSTB ; LDABB: 27 0F BEQ LDACC ; ; LDABD: A6 00 LDAA 0,X ; 29.4 Kpa LDABF: B0 D2 40 SUBA LD240 ; 6, 1.9KPa hyst on cell boundy LDAC2: 25 04 BCS LDAC8 ; ; LDAC4: 91 25 CMPA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LDAC6: 22 13 BHI LDADB ; ; LDAC8: C1 03 CMPB #3 ; LDACA: 27 0B BEQ LDAD7 ; ; LDACC: A6 01 LDAA 1,X ; 55.0 Kpa LDACE: BB D2 40 ADDA LD240 ; 6, 1.9KPa hyst on cell boundy LDAD1: 25 04 BCS LDAD7 ; ; LDAD3: 91 25 CMPA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LDAD5: 25 04 BCS LDADB ; ; LDAD7: D6 A0 LDAB L00A0 ; blm cell # in current use LDAD9: 20 32 BRA LDB0D ; ; ; New cell in use, calc which one ; LDADB: 96 0D LDAA L000D ; status word LDADD: 8A 0C ORAA #$0C ; flag new cell in use, reset int LDADF: 97 0D STAA L000D ; status word ; LDAE1: 5F CLRB ; LDAE2: 96 1B LDAA L001B ; rpm / 25 LDAE4: B1 D2 39 CMPA LD239 ; 32, 800 rpm LDAE7: 25 0D BCS LDAF6 ; LDAE9: 5C INCB ; LDAEA: B1 D2 3A CMPA LD23A ; 64, 1600 rpm LDAED: 25 07 BCS LDAF6 ; LDAEF: 5C INCB ; LDAF0: B1 D2 3B CMPA LD23B ; 96, 2400 rpm LDAF3: 25 01 BCS LDAF6 ; LDAF5: 5C INCB ; ; LDAF6: 96 25 LDAA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LDAF8: B1 D2 3C CMPA LD23C ; cell boundry, 29.4 Kpa LDAFB: 25 10 BCS LDB0D ; LDAFD: CB 04 ADDB #4 ; LDAFF: B1 D2 3D CMPA LD23D ; cell boundry, 55 Kpa LDB02: 25 09 BCS LDB0D ; LDB04: CB 04 ADDB #4 ; LDB06: B1 D2 3E CMPA LD23E ; cell boundry, 75 Kpa LDB09: 25 02 BCS LDB0D ; LDB0B: CB 04 ADDB #4 ; ; LDB0D: CE 00 ED LDX #$00ED ; BLM Cells LDB10: 3A ABX ; LDB11: A6 00 LDAA 0,X ; get current cell value LDB13: B1 D2 46 CMPA LD246 ; 150, max blm LDB16: 22 05 BHI LDB1D ; LDB18: B1 D2 47 CMPA LD247 ; 108, min blm LDB1B: 24 09 BCC LDB26 ; ; ; trouble, cell is outa' limit terms ; LDB1D: 96 07 LDAA L0007 ; status word LDB1F: 8A 40 ORAA #$40 ; LDB21: 97 07 STAA L0007 ; status word ; LDB23: BD FD D7 JSR LFDD7 ; Set all BLM cells to 128 LDB26: 97 A1 STAA L00A1 ; BLM, bin val LDB28: D7 A0 STAB L00A0 ; blm cell # in current use ; ; check if EGR active ; LDB2A: D6 DF LDAB L00DF ; status word LDB2C: C5 02 BITB #$02 ; tst b1 LDB2E: 27 0C BEQ LDB3C ; bra if b1 == 0, EGR active bit ; ; Do EGR lookup of Injector Constant ; LDB30: 96 2E LDAA L002E ; vac LDB32: 43 COMA ; 1's comp LDB33: 81 40 CMPA #64 ; LDB35: 23 0D BLS LDB44 ; ; LDB37: 44 LSRA ; LDB38: 8B 60 ADDA #96 ; LDB3A: 20 09 BRA LDB45 ; go do lookup ; ; Do Egr off Injector Constant ; LDB3C: B6 D2 41 LDAA LD241 ; 135, Injector Constant, egr off LDB3F: F6 D2 42 LDAB LD242 ; filt coef, 32 LDB42: 20 0A BRA LDB4E ; go filter it ; ; do lookup of egr on Injector Constant ; LDB44: 48 ASLA ; ; LDB45: CE D2 A1 LDX #$D2A1 ; LDB48: BD FB 82 JSR LFB82 ; 2d lkup w/upr limt in 1st tbl entry LDB4B: F6 D2 43 LDAB LD243 ; filt coef, 28 ; LDB4E: DE A6 LDX L00A6 ; inj cnst, egr lag filtered LDB50: BD FB 40 JSR LFB40 ; Lag Filter LDB53: DD A6 STD L00A6 ; inj cnst, egr lag filtered LDB55: 58 LSLB ; round up A LDB56: 89 00 ADCA #0 ; LDB58: 36 PSHA ; save inj cnst ; ; Do iat correction to inj cnst ; LDB59: CE D3 A6 LDX #$D3A6 ; iat correction to Inj Cnst LDB5C: 96 24 LDAA L0024 ; iat, 1k pu, inverse, adc cnts LDB5E: 43 COMA ; 1's comp LDB5F: 44 LSRA ; A /= 2 LDB60: C6 50 LDAB #80 ; lower limit for lookup LDB62: BD FB 91 JSR LFB91 ; 2d lkup w/SBA LDB65: 33 PULB ; get inj cnst LDB66: 3D MUL ; (A * B) / 128 LDB67: 05 LSLD ; (Inj Cnst * Mult) / 128 LDB68: 24 02 BCC LDB6C ; bra if no ovrflw LDB6A: 86 FF LDAA #255 ; ; ; ; Check option byte to do baro adjustment on inj cnst ; LDB6C: F6 D0 06 LDAB LD006 ; option byte: 0001 0001 LDB6F: C5 08 BITB #$08 ; b3 == 0 LDB71: 26 0E BNE LDB81 ; do not bra LDB73: 36 PSHA ; save inj cnst ; ; Do Baro Adjustment on Injector Cnst ; LDB74: CE D3 AA LDX #$D3AA ; BPW Injector Constant Mult vs Baro LDB77: BD FB 6F JSR LFB6F ; get baro & do 2d lkup LDB7A: 33 PULB ; get inj cnst LDB7B: 3D MUL ; LDB7C: 05 LSLD ; AB *= 2 LDB7D: 24 02 BCC LDB81 ; bra if no ovrflw LDB7F: 86 FF LDAA #255 ; ; LDB81: 97 A5 STAA L00A5 ; Injector Constant ;----------------------------------------------- ; ; ;----------------------------------------------- LDB83: 96 66 LDAA L0066 ; 160Hz rts counter LDB85: 85 04 BITA #$04 ; LDB87: 26 03 BNE LDB8C ; LDB89: 7E DC 40 JMP LDC40 ; JMP LE3D4, return to rts loop ;----------------------------------------------- ; ; ;----------------------------------------------- LDB8C: 96 9A LDAA L009A ; transient fuel calc interval timer (for tps/map filters) LDB8E: 26 29 BNE LDBB9 ; LDB90: B6 D2 23 LDAA LD223 ; 0 LDB93: 97 9A STAA L009A ; transient fuel calc interval timer (for tps/map filters) ; ; lag filter tps% term ; LDB95: F6 D2 24 LDAB LD224 ; filt coef, 16 LDB98: DE 45 LDX L0045 ; tps%, slow filtered LDB9A: 96 43 LDAA L0043 ; tps%, from idle LDB9C: BD FB 40 JSR LFB40 ; Lag Filter LDB9F: DD 45 STD L0045 ; tps%, slow filtered ; ; ; lag filter slo map term ; LDBA1: F6 D2 27 LDAB LD227 ; filt coef, 37 LDBA4: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LDBA6: B1 D2 25 CMPA LD225 ; 64 LDBA9: 25 03 BCS LDBAE ; bra if coolant > thres ; LDBAB: F6 D2 26 LDAB LD226 ; filt coef, 20 ; LDBAE: DE 2C LDX L002C ; s/d map, slo filtered from L0025 LDBB0: 96 25 LDAA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LDBB2: BD FB 40 JSR LFB40 ; Lag Filter LDBB5: DD 2C STD L002C ; s/d map, slo filtered from L0025 ; LDBB7: 20 03 BRA LDBBC ; ; ; ; LDBB9: 7A 00 9A DEC L009A ; transient fuel calc interval timer (for tps/map filters) ; ;----------------------------------------------- ; ; Check if time to move BLM ; ;----------------------------------------------- LDBBC: 96 0E LDAA L000E ; status word, a/f mode LDBBE: 85 02 BITA #$02 ; learn enable bit LDBC0: 27 6F BEQ LDC31 ; bra to not move BLM ; LDBC2: 96 0D LDAA L000D ; status word LDBC4: 85 08 BITA #$08 ; LDBC6: 26 69 BNE LDC31 ; bra to not move BLM ; LDBC8: 96 A2 LDAA L00A2 ; integrator LDBCA: 81 80 CMPA #128 ; tst if INT @ neutral of 128 LDBCC: 27 63 BEQ LDC31 ; bra to not move BLM ; ; ; check INT delay timer ; LDBCE: D6 B6 LDAB L00B6 ; integrator delay tmr LDBD0: 5C INCB ; adv timer LDBD1: 2B 07 BMI LDBDA ; bra if ovrflw ; LDBD3: D7 B6 STAB L00B6 ; integrator delay tmr LDBD5: 58 LSLB ; B /= 2 LDBD6: D1 AF CMPB L00AF ; INTegrator timer term LDBD8: 25 5C BCS LDC36 ; bra to not move BLM ; ; ; check BLM delay timer ; LDBDA: D6 B5 LDAB L00B5 ; blk learn tmr LDBDC: 5C INCB ; LDBDD: 27 07 BEQ LDBE6 ; ; LDBDF: D7 B5 STAB L00B5 ; blk learn tmr LDBE1: F1 D2 38 CMPB LD238 ; 12, blm update time LDBE4: 25 50 BCS LDC36 ; bra to not move BLM ; LDBE6: 80 80 SUBA #128 ; normalize INT to 0 LDBE8: 25 0D BCS LDBF7 ; bra if int removing fuel, < 128 ; ; check if enough + delta int to move blm ; LDBEA: B1 D2 44 CMPA LD244 ; 3, INT delta from 128 to move blm cell LDBED: 23 47 BLS LDC36 ; LDBEF: 96 0E LDAA L000E ; status word, a/f mode LDBF1: 85 40 BITA #$40 ; b6, fast R/L direction bit LDBF3: 26 41 BNE LDC36 ; if b6, rich, do not update BLM (rich & adding fuel) LDBF5: 20 0C BRA LDC03 ; ; ; check if enough - delta int to move blm ; LDBF7: 40 NEGA ; LDBF8: B1 D2 44 CMPA LD244 ; 3, INT delta from 128 to move blm cell LDBFB: 23 39 BLS LDC36 ; LDBFD: 96 0E LDAA L000E ; status word, a/f mode LDBFF: 85 40 BITA #$40 ; b6, fast R/L direction bit LDC01: 27 33 BEQ LDC36 ; bra if not b6, lean ; ; Time to adjust the current blm cell ; LDC03: CE 00 ED LDX #$00ED ; BLM Cells LDC06: D6 A0 LDAB L00A0 ; blm cell # in current use LDC08: 3A ABX ; LDC09: A6 00 LDAA 0,X ; get current blm cell val ; LDC0B: D6 0E LDAB L000E ; status word, a/f mode LDC0D: C5 40 BITB #$40 ; LDC0F: 27 0F BEQ LDC20 ; ; ; ; remove fuel from blm ; LDC11: B0 D2 45 SUBA LD245 ; blm modifier, 1 LDC14: 25 05 BCS LDC1B ; ; LDC16: B1 D2 47 CMPA LD247 ; 108, min blm LDC19: 24 12 BCC LDC2D ; bra if blm >= min ; LDC1B: B6 D2 47 LDAA LD247 ; 108, min blm LDC1E: 20 0D BRA LDC2D ; ; ; add fuel to blm ; LDC20: BB D2 45 ADDA LD245 ; blm modifier, 1 LDC23: 25 05 BCS LDC2A ; ; LDC25: B1 D2 46 CMPA LD246 ; 150, max blm LDC28: 23 03 BLS LDC2D ; bra if blm <= max ; LDC2A: B6 D2 46 LDAA LD246 ; 150, max blm ; ; misc blm/prop/int work ; LDC2D: A7 00 STAA 0,X ; save new cell value LDC2F: 97 A1 STAA L00A1 ; BLM, bin val ; LDC31: 5F CLRB ; clr B LDC32: D7 B6 STAB L00B6 ; integrator delay tmr LDC34: D7 B5 STAB L00B5 ; blk learn tmr ; LDC36: 96 0D LDAA L000D ; status word LDC38: 84 F7 ANDA #$F7 ; 1111 0111 LDC3A: 97 0D STAA L000D ; status word ; LDC3C: 96 1D LDAA L001D ; rpm / 12.5, filtered LDC3E: 97 1F STAA L001F ; rpm / 12.5, filtered, one delayed LDC40: 7E E3 D4 JMP LE3D4 ; return to rts loop ;----------------------------------------------- ; End of Fuel Loop 1 ;----------------------------------------------- ;*================================================== ;* ;* Enter Fuel Loop2 ;* ;*================================================== ; ; Check whether O2 is good for closed loop ; LDC43: 96 01 LDAA L0001 ; status word LDC45: 2A 23 BPL LDC6A ; Engine is not Running ; LDC47: 96 0E LDAA L000E ; status word, a/f mode LDC49: 2B 08 BMI LDC53 ; bra if closed loop ; LDC4B: B6 D2 4A LDAA LD24A ; O2 val to go clsd lp, 556mv LDC4E: F6 D2 4B LDAB LD24B ; O2 val to go clsd lp, 243mv LDC51: 20 06 BRA LDC59 ; ; LDC53: B6 D2 48 LDAA LD248 ; O2 val to stay clsd lp, 811mv LDC56: F6 D2 49 LDAB LD249 ; O2 val to stay clsd lp, 365mv ; LDC59: 91 39 CMPA L0039 ; O2, adc, filtered, round up from L003A LDC5B: 25 04 BCS LDC61 ; bra if clsd lp ok ; LDC5D: D1 39 CMPB L0039 ; O2, adc, filtered, round up from L003A LDC5F: 23 09 BLS LDC6A ; bra if clsd lp not ok ; LDC61: 7F 00 9B CLR L009B ; clear closed loop timeout timer LDC64: D6 DE LDAB L00DE ; status word LDC66: CA 01 ORAB #1 ; set b0, ok to go closed loop LDC68: D7 DE STAB L00DE ; status word ; ; calc gms/sec airflow ; ; simplified: ; ; gms/sec = ( (((map * 120d) / 256) + 18) * (rpm / 12.5) ) / 256 ; ; LDC6A: 96 2B LDAA L002B ; map term for BPW & gms/sec calc's LDC6C: F6 D2 81 LDAB LD281 ; 120, constant LDC6F: 3D MUL ; LDC70: BB D2 82 ADDA LD282 ; 18, add in offset LDC73: B1 D2 84 CMPA LD284 ; 100, max map term LDC76: 23 03 BLS LDC7B ; LDC78: B6 D2 84 LDAA LD284 ; 100 ; LDC7B: D6 1B LDAB L001B ; rpm / 25 LDC7D: 58 LSLB ; B *= 2, now rpm / 12.5 LDC7E: 25 05 BCS LDC85 ; LDC80: F1 D2 83 CMPB LD283 ; 164, max rpm term LDC83: 23 03 BLS LDC88 ; LDC85: F6 D2 83 LDAB LD283 ; 164 ; LDC88: 3D MUL ; map term * rpm LDC89: 81 40 CMPA #64 ; max airflow val LDC8B: 23 02 BLS LDC8F ; bra if <= 64 ; LDC8D: 86 40 LDAA #64 ; load max allowed LDC8F: 97 BA STAA L00BA ; gms/sec, limited to 64 ;------------------------------------------------- ; ; Four Pass Loop ; ; Table lookups are by gms/sec airflow ; ; L004D: mean R/L O2 threshold ; L004E: rich O2 threshold ; L004F: lean O2 threshold ; L00AF: INT delay ;------------------------------------------------- LDC91: C6 03 LDAB #3 ; do 4 tables LDC93: 96 02 LDAA L0002 ; status word LDC95: 2A 0B BPL LDCA2 ; bra if not in idle ; LDC97: B6 D2 4C LDAA LD24C ; 132, sub val for in idle LDC9A: 97 4E STAA L004E ; LDC9C: FC D2 4D LDD LD24D ; 159, 160, sub vals for in idle LDC9F: DD 4F STD L004F ; tmp storage LDCA1: 5F CLRB ; ; LDCA2: D7 4C STAB L004C ; loop cnt, 0 | 3 <<<< LDCA4: 86 05 LDAA #5 ; lines per table LDCA6: 3D MUL ; nxt tbl addr offset LDCA7: CE D3 CA LDX #$D3CA ; first tbl addr LDCAA: 3A ABX ; add in offset LDCAB: 96 BA LDAA L00BA ; gms/sec, limited to 64 LDCAD: BD FB 95 JSR LFB95 ; 2d lkup LDCB0: CE 00 4D LDX #$004D ; LDCB3: D6 4C LDAB L004C ; LDCB5: 27 06 BEQ LDCBD ; done w/lkup's>>> LDCB7: 3A ABX ; LDCB8: A7 00 STAA 0,X ; LDCBA: 5A DECB ; LDCBB: 20 E5 BRA LDCA2 ; do next tbl>>> ; LDCBD: 97 AF STAA L00AF ; save from last lkup ; INTegrator timer term ;------------------------------------------------- ; ; Check & flag direction of O2 value, fast filt minor loop ; ;------------------------------------------------- LDCBF: D6 0E LDAB L000E ; status word, a/f mode LDCC1: 96 4E LDAA L004E ; mean R/L threshold from lookup LDCC3: BB D2 7F ADDA LD27F ; 156 mvdc, O2 window for fast O2 r/l LDCC6: 25 04 BCS LDCCC ; bra if ovrflw ; LDCC8: 91 3A CMPA L003A ; O2, minor loop filtered LDCCA: 25 15 BCS LDCE1 ; go set rich direction flag, filt O2 > mean R/L ; LDCCC: 96 4E LDAA L004E ; LDCCE: B0 D2 7F SUBA LD27F ; 156 mvdc, O2 window for fast O2 r/l LDCD1: 25 04 BCS LDCD7 ; bra if underflow ; LDCD3: 91 3A CMPA L003A ; O2, minor loop filtered LDCD5: 22 06 BHI LDCDD ; bra if O2 < fast filt - fast O2 R/L bias ; LDCD7: 96 3A LDAA L003A ; O2, minor loop filtered LDCD9: 91 B9 CMPA L00B9 ; O2, minor loop filtered, one delayed from L003A LDCDB: 22 04 BHI LDCE1 ; bra if O2 richer than one delayed O2 ; ; ; set as leaner ; LDCDD: C4 BF ANDB #$BF ; clr b6, L000E, rich bit: show leaner LDCDF: 20 02 BRA LDCE3 ; ; ; ; set as richer ; LDCE1: CA 40 ORAB #$40 ; set b6, richer ; ; ; LDCE3: D1 0E CMPB L000E ; a/f mode word flag, test for x-cnt LDCE5: 27 0C BEQ LDCF3 ; bra if no change in Richer/Leaner bit ; ; ; Increment O2 Cross Counts ; LDCE7: 7C 00 B7 INC L00B7 ; x-counts ; LDCEA: 96 06 LDAA L0006 ; LDCEC: 8A 10 ORAA #$10 ; set b4, x-cnt occurred LDCEE: 97 06 STAA L0006 ; ; LDCF0: 4F CLRA ; clear prop timer LDCF1: 20 05 BRA LDCF8 ; ; ; ; incr prop duration timer ; LDCF3: 96 BB LDAA L00BB ; proportional timer for CLT LDCF5: 4C INCA ; LDCF6: 27 02 BEQ LDCFA ; ; LDCF8: 97 BB STAA L00BB ; proportional timer for CLT ; ; check if need to reset INT ; LDCFA: D7 0E STAB L000E ; status word, a/f mode LDCFC: 2A 72 BPL LDD70 ; bra if not closed loop, reset int to 128 ; LDCFE: 96 05 LDAA L0005 ; LDD00: 85 02 BITA #$02 ; b1, ???? LDD02: 27 06 BEQ LDD0A ; bra if b1 == 0 ; LDD04: 84 FD ANDA #$FD ; clr b1, 1111 1101 LDD06: 97 05 STAA L0005 ; LDD08: 20 66 BRA LDD70 ; bra reset int to 128 ; ; reset int if one of these ; LDD0A: 96 0F LDAA L000F ; status word LDD0C: 85 10 BITA #$10 ; in hiway fuel bit LDD0E: 26 5A BNE LDD6A ; bra if in hiway fuel ; LDD10: 96 07 LDAA L0007 ; status word LDD12: 85 08 BITA #$08 ; DFCO flag LDD14: 26 54 BNE LDD6A ; bra if in dfco ; LDD16: D6 0D LDAB L000D ; status word LDD18: 2B 50 BMI LDD6A ; bra if in PE/WOT mode ; ; ; ae int reset test ; LDD1A: F6 D0 06 LDAB LD006 ; option byte: 0001 0001 LDD1D: C5 20 BITB #$20 ; bit 5, if set reset INT on AE LDD1F: 27 0C BEQ LDD2D ; bra if b5 == 0, chk other for INT reset ; LDD21: D6 0D LDAB L000D ; status word LDD23: C5 40 BITB #$40 ; b6, need to reset int on ae mode LDD25: 27 06 BEQ LDD2D ; bra if == 0, no int reset on ae ; LDD27: C4 BF ANDB #$BF ; clr b6, 1011 1111 LDD29: D7 0D STAB L000D ; status word LDD2B: 20 43 BRA LDD70 ; bra reset int to 128 ; ; decel enleanment int reset test ; LDD2D: D6 0D LDAB L000D ; status word LDD2F: C5 10 BITB #$10 ; decel enleanment in effect LDD31: 27 0C BEQ LDD3F ; bra if no decel enleanment ; LDD33: 96 0E LDAA L000E ; status word, a/f mode LDD35: 85 40 BITA #$40 ; b6, rich LDD37: 26 47 BNE LDD80 ; bra if b6, rich, skip reset of INT ; LDD39: 96 A2 LDAA L00A2 ; integrator LDD3B: 2A 43 BPL LDD80 ; bra if int < 128, no reset ; LDD3D: 20 31 BRA LDD70 ; bra reset int to 128 ; ; ; blm cell change int reset test ; LDD3F: F6 D0 06 LDAB LD006 ; option byte: 0001 0001 LDD42: C5 10 BITB #$10 ; b4, 1 = do int reset on blm cell change LDD44: 27 06 BEQ LDD4C ; bra for no int reset on blm cell change ; LDD46: 96 0D LDAA L000D ; status word LDD48: 85 04 BITA #$04 ; blm cell change bit LDD4A: 26 24 BNE LDD70 ; bra if == 1, go reset int ; ; ; test for aldl mode ; LDD4C: D6 02 LDAB L0002 ; status word LDD4E: C5 20 BITB #$20 ; b5, aldl mode forced closed loop (10K) LDD50: 26 2E BNE LDD80 ; bra if b5, closed loop, do not reset INT ; ; ; Ck Decel Qual's ; LDD52: D6 25 LDAB L0025 ; s/d map, KPa = (N * 0.3125) + 20 LDD54: F1 D2 4F CMPB LD24F ; cls lp decel, enlean map thresh. (26 kpa) LDD57: 22 27 BHI LDD80 ; bra if map > thresh, no INT reset ; LDD59: D6 1B LDAB L001B ; rpm / 25 LDD5B: F1 D2 50 CMPB LD250 ; cls lp decel, enlean rpm thresh. (1000 rpm) LDD5E: 23 20 BLS LDD80 ; bra if <= 1000 rpm ; LDD60: 96 0E LDAA L000E ; status word, a/f mode LDD62: 85 40 BITA #$40 ; b6, rich LDD64: 26 1A BNE LDD80 ; bra if b6, no INT reset ; LDD66: 96 A2 LDAA L00A2 ; integrator LDD68: 2A 16 BPL LDD80 ; subbing fuel, no INT reset ; ; set bit & clear INT stuff ; LDD6A: 96 0A LDAA L000A ; status word LDD6C: 8A 04 ORAA #$04 ; set b2 LDD6E: 97 0A STAA L000A ; status word ; ; Do INT reset & filtered O2 ; LDD70: 86 66 LDAA #102 ; 443 mV LDD72: 97 3E STAA L003E ; O2, filtered vs. airflow ; LDD74: 86 80 LDAA #128 ; neutral val LDD76: 97 A2 STAA L00A2 ; integrator LDD78: 4F CLRA ; LDD79: 97 AE STAA L00AE ; integrator delay timer LDD7B: 97 B8 STAA L00B8 ; proportional gain term LDD7D: 7E DE 90 JMP LDE90 ; do closed-loop-correction-term ;------------------------------------------------- ; ; Calculate O2 Error Value ; ;------------------------------------------------- LDD80: D6 07 LDAB L0007 ; status word LDD82: 96 3E LDAA L003E ; O2, slo filtered vs. airflow LDD84: 91 4F CMPA L004F ; rich O2 threshold (tmp) LDD86: 22 0C BHI LDD94 ; bra if O2 > rich O2 threshold ; LDD88: 90 50 SUBA L0050 ; lean O2 threshold (tmp) LDD8A: 25 03 BCS LDD8F ; bra if O2 < lean O2 threshold ; ; ; inside of rich/lean O2 thresholds ; LDD8C: 4F CLRA ; O2 error is zero LDD8D: 20 21 BRA LDDB0 ; bra to save O2 error term ; ; ; O2 val < lean threshold ; LDD8F: 40 NEGA ; 2's comp of O2 error LDD90: C4 FD ANDB #$FD ; clear b1 of L0007, R/L Flag, slo O2 LDD92: 20 0A BRA LDD9E ; ; ; ; O2 val > rich O2 threshold ; LDD94: 90 4F SUBA L004F ; tmp storage LDD96: F6 D2 8B LDAB LD28B ; 232, LDD99: 3D MUL ; LDD9A: D6 07 LDAB L0007 ; status word LDD9C: CA 02 ORAB #2 ; ; ; continue calc of O2 err term ; LDD9E: D7 07 STAB L0007 ; status word LDDA0: 97 4E STAA L004E ; ; LDDA2: D6 02 LDAB L0002 ; status word LDDA4: 2A 04 BPL LDDAA ; bra if not in idle ; LDDA6: F6 D2 8C LDAB LD28C ; 208, O2 err term multiplier for in idle LDDA9: 3D MUL ; ; LDDAA: 81 60 CMPA #96 ; LDDAC: 23 02 BLS LDDB0 ; ; LDDAE: 86 60 LDAA #96 ; ; LDDB0: B7 04 5D STAA L045D ; HU ram for O2 err term LDDB3: 48 ASLA ; O2 Err *= 2 LDDB4: 97 4E STAA L004E ; O2 Err Term * 2 ; LDDB6: CE D3 E3 LDX #$D3E3 ; LDDB9: BD FB 95 JSR LFB95 ; 2d lkup LDDBC: 97 B8 STAA L00B8 ; proportional gain term ; LDDBE: D6 02 LDAB L0002 ; status word LDDC0: 2A 28 BPL LDDEA ; bra if not in idle ; ; ; additional idle stuff ; LDDC2: B6 D2 86 LDAA LD286 ; 9, prop duration offset for in idle LDDC5: 36 PSHA ; ; LDDC6: CE D2 87 LDX #$D287 ; LDDC9: DC 0E LDD L000E ; status word, a/f mode & L000F LDDCB: 85 40 BITA #$40 ; LDDCD: 26 02 BNE LDDD1 ; ; LDDCF: C8 84 EORB #$84 ; toggle b7 & b2 of L000F ; LDDD1: C5 08 BITB #$08 ; tst b3 of L000F LDDD3: 27 04 BEQ LDDD9 ; ; LDDD5: C5 04 BITB #$04 ; LDDD7: 26 09 BNE LDDE2 ; ; LDDD9: C5 40 BITB #$40 ; LDDDB: 27 04 BEQ LDDE1 ; ; LDDDD: C5 80 BITB #$80 ; test idle level LDDDF: 26 01 BNE LDDE2 ; ; LDDE1: 08 INX ; ; LDDE2: A6 02 LDAA 2,X ; mean R/L O2 threshold for idle LDDE4: 97 4D STAA L004D ; save mean R/L O2 threshold for idle LDDE6: A6 00 LDAA 0,X ; prop gain multiplier LDDE8: 20 11 BRA LDDFB ; ; ; ; ; Not in idle here ; LDDEA: 96 4E LDAA L004E ; O2 Err Term * 2 LDDEC: CE D3 F0 LDX #$D3F0 ; LDDEF: BD FB 95 JSR LFB95 ; 2d lkup LDDF2: 36 PSHA ; ; LDDF3: 96 BA LDAA L00BA ; gms/sec, limited to 64 LDDF5: CE D4 02 LDX #$D402 ; LDDF8: BD FB 95 JSR LFB95 ; 2d lkup ; ; ; ; ; LDDFB: D6 B8 LDAB L00B8 ; proportional gain term LDDFD: 3D MUL ; LDDFE: 89 00 ADCA #0 ; LDE00: 97 B8 STAA L00B8 ; proportional gain term ; ; ; LDE02: 96 BA LDAA L00BA ; gms/sec, limited to 64 LDE04: CE D3 FD LDX #$D3FD ; LDE07: BD FB 95 JSR LFB95 ; 2d lkup LDE0A: 33 PULB ; LDE0B: 1B ABA ; add to prop duration LDE0C: 24 02 BCC LDE10 ; LDE0E: 86 FF LDAA #255 ; ; LDE10: 97 50 STAA L0050 ; final prop duration term ; LDE12: 96 4E LDAA L004E ; O2 Err Term * 2 LDE14: CE D4 07 LDX #$D407 ; LDE17: BD FB 95 JSR LFB95 ; 2d lkup LDE1A: D6 AF LDAB L00AF ; INTegrator timer term LDE1C: 3D MUL ; LDE1D: D6 02 LDAB L0002 ; status word LDE1F: 2A 06 BPL LDE27 ; bra if not in idle ; LDE21: 9B 4D ADDA L004D ; LDE23: 24 02 BCC LDE27 ; LDE25: 86 FF LDAA #255 ; ; LDE27: 97 AF STAA L00AF ; INTegrator timer term LDE29: B7 04 5E STAA L045E ; HU ram ; ; LDE2C: 96 07 LDAA L0007 ; status word LDE2E: 84 02 ANDA #$02 ; LDE30: D6 0E LDAB L000E ; status word, a/f mode LDE32: C4 40 ANDB #$40 ; LDE34: 1B ABA ; LDE35: 27 0D BEQ LDE44 ; ; LDE37: 81 42 CMPA #66 ; LDE39: 27 09 BEQ LDE44 ; ; LDE3B: 96 B8 LDAA L00B8 ; proportional gain term LDE3D: 27 0C BEQ LDE4B ; ; LDE3F: 7A 00 B8 DEC L00B8 ; proportional gain term LDE42: 20 07 BRA LDE4B ; ; ; LDE44: 96 4E LDAA L004E ; O2 Err Term LDE46: B1 D2 80 CMPA LD280 ; 0 LDE49: 22 0E BHI LDE59 ; ; LDE4B: 7F 00 AE CLR L00AE ; integrator delay timer LDE4E: 96 BB LDAA L00BB ; proportional timer for CLT LDE50: 91 50 CMPA L0050 ; LDE52: 23 2B BLS LDE7F ; ; LDE54: 7F 00 B8 CLR L00B8 ; proportional gain term LDE57: 20 26 BRA LDE7F ; ; LDE59: 96 AE LDAA L00AE ; integrator delay timer LDE5B: 91 AF CMPA L00AF ; INTegrator timer term LDE5D: 25 03 BCS LDE62 ; LDE5F: 4F CLRA ; LDE60: 20 01 BRA LDE63 ; ; LDE62: 4C INCA ; ; LDE63: 97 AE STAA L00AE ; integrator delay timer LDE65: 26 18 BNE LDE7F ; ; ; ; time to move INT ; LDE67: 96 A2 LDAA L00A2 ; integrator LDE69: D6 07 LDAB L0007 ; status word LDE6B: C5 02 BITB #$02 ; LDE6D: 26 08 BNE LDE77 ; ; LDE6F: B1 D2 52 CMPA LD252 ; 158, max int LDE72: 27 09 BEQ LDE7D ; ; LDE74: 4C INCA ; incr INT LDE75: 20 06 BRA LDE7D ; ; LDE77: B1 D2 51 CMPA LD251 ; 40, min int LDE7A: 27 01 BEQ LDE7D ; ; LDE7C: 4A DECA ; decr INT ; ; save new INT value ; LDE7D: 97 A2 STAA L00A2 ; integrator ; LDE7F: 96 B8 LDAA L00B8 ; proportional gain term LDE81: D6 0E LDAB L000E ; status word, a/f mode LDE83: C5 40 BITB #$40 ; LDE85: 27 09 BEQ LDE90 ; ; LDE87: 96 A2 LDAA L00A2 ; integrator LDE89: 90 B8 SUBA L00B8 ; proportional gain term LDE8B: 24 09 BCC LDE96 ; ; LDE8D: 4F CLRA ; LDE8E: 20 06 BRA LDE96 ; LDE90: 9B A2 ADDA L00A2 ; integrator LDE92: 24 02 BCC LDE96 ; ; LDE94: 86 FF LDAA #255 ; LDE96: 80 80 SUBA #128 ; LDE98: 97 B0 STAA L00B0 ; closed loop correction term ; LDE9A: B6 D4 3C LDAA LD43C ; diag mask 3, 1111 0011 LDE9D: 85 02 BITA #$02 ; LDE9F: 27 3C BEQ LDEDD ; ; LDEA1: 96 00 LDAA L0000 ; status word LDEA3: D6 09 LDAB L0009 ; status word LDEA5: 85 10 BITA #$10 ; engine shutdown LDEA7: 27 04 BEQ LDEAD ; ; LDEA9: C4 FD ANDB #$FD ; LDEAB: 20 2E BRA LDEDB ; ; LDEAD: C5 04 BITB #$04 ; LDEAF: 26 2C BNE LDEDD ; ; LDEB1: B6 08 81 LDAA L0881 ; MCU1 I/O LDEB4: 85 20 BITA #$20 ; LDEB6: 27 21 BEQ LDED9 ; ; LDEB8: 96 01 LDAA L0001 ; status word LDEBA: 2B 21 BMI LDEDD ; Engine is Running ; LDEBC: D6 96 LDAB L0096 ; fuel pump volts diag timer LDEBE: 5C INCB ; LDEBF: F1 D4 98 CMPB LD498 ; LDEC2: 23 1A BLS LDEDE ; ; LDEC4: 96 41 LDAA L0041 ; Pump Volts, * 10, adc cnts LDEC6: D6 09 LDAB L0009 ; status word LDEC8: 81 28 CMPA #40 ; 4.0v LDECA: 24 0D BCC LDED9 ; ; LDECC: 96 E3 LDAA L00E3 ; LDECE: 8A 02 ORAA #$02 ; LDED0: 97 E3 STAA L00E3 ; LDED2: BD FD 1A JSR LFD1A ; Do CkSum on Error Flags LDED5: 97 EA STAA L00EA ; error flag cksum LDED7: CA 02 ORAB #$02 ; LDED9: CA 04 ORAB #$04 ; LDEDB: D7 09 STAB L0009 ; status word ; ; LDEDD: 5F CLRB ; LDEDE: D7 96 STAB L0096 ; fuel pump volts diag timer LDEE0: 7E DC 40 JMP LDC40 ; JMP LE3D4, return to rts loop ;----------------------------------------------- ; ; Misc 80Hz stuff ; ;----------------------------------------------- LDEE3: F6 08 01 LDAB L0801 ; MCU2 I/O LDEE6: B6 D0 07 LDAA LD007 ; option byte: 0010 0100 LDEE9: 85 04 BITA #$04 ; b2 == 1 LDEEB: 27 02 BEQ LDEEF ; do not bra LDEED: C8 40 EORB #$40 ; ; LDEEF: 96 10 LDAA L0010 ; status word LDEF1: 84 E3 ANDA #$E3 ; LDEF3: C5 40 BITB #$40 ; LDEF5: 26 02 BNE LDEF9 ; LDEF7: 8A 04 ORAA #$04 ; ; LDEF9: C5 10 BITB #$10 ; LDEFB: 27 02 BEQ LDEFF ; LDEFD: 8A 10 ORAA #$10 ; LDEFF: 5D TSTB ; LDF00: 2B 02 BMI LDF04 ; bra if A/C not requested LDF02: 8A 08 ORAA #$08 ; set A/C on bit ; LDF04: 97 10 STAA L0010 ; status word LDF06: D6 02 LDAB L0002 ; status word LDF08: C5 20 BITB #$20 ; LDF0A: 27 15 BEQ LDF21 ; LDF0C: D6 1B LDAB L001B ; rpm / 25 LDF0E: F1 D5 23 CMPB LD523 ; LDF11: 23 0E BLS LDF21 ; LDF13: D6 E0 LDAB L00E0 ; status word LDF15: C5 08 BITB #$08 ; LDF17: 26 08 BNE LDF21 ; LDF19: CA 08 ORAB #$08 ; LDF1B: D7 E0 STAB L00E0 ; status word LDF1D: 84 FE ANDA #$FE ; LDF1F: 20 0E BRA LDF2F ; ; LDF21: 85 01 BITA #$01 ; LDF23: 26 2D BNE LDF52 ; LDF25: 85 02 BITA #$02 ; LDF27: 26 12 BNE LDF3B ; LDF29: D6 00 LDAB L0000 ; status word LDF2B: C5 20 BITB #$20 ; LDF2D: 27 23 BEQ LDF52 ; ; LDF2F: 8A 02 ORAA #2 ; LDF31: 97 10 STAA L0010 ; status word LDF33: F6 D5 1D LDAB LD51D ; 200, retract pulse steps LDF36: D7 FD STAB L00FD ; Current IAC position, steps LDF38: 5F CLRB ; LDF39: D7 C7 STAB L00C7 ; IAC steps, A/C, park position LDF3B: D6 FD LDAB L00FD ; Current IAC position, steps ; LDF3D: 27 01 BEQ LDF40 ; ; LDF3F: 39 RTS ; ;----------------------------------------------- ; ; ;----------------------------------------------- LDF40: 8A 01 ORAA #1 ; LDF42: 97 10 STAA L0010 ; status word LDF44: B6 D5 0F LDAA LD50F ; 40 LDF47: 97 E4 STAA L00E4 ; ; LDF49: BB D5 10 ADDA LD510 ; 18 LDF4C: 24 02 BCC LDF50 ; LDF4E: 86 FF LDAA #255 ; ; LDF50: 97 BE STAA L00BE ; ; LDF52: D6 00 LDAB L0000 ; status word LDF54: C5 10 BITB #$10 ; engine shutdown LDF56: 26 04 BNE LDF5C ; bra if shutting down ; LDF58: D6 01 LDAB L0001 ; status word LDF5A: 2B 0E BMI LDF6A ; Engine is Running ; ; ; engine shutdown or not running ; LDF5C: F6 D5 11 LDAB LD511 ; 160, IAC park position LDF5F: 96 14 LDAA L0014 ; error flag 3 LDF61: 85 10 BITA #$10 ; LDF63: 26 02 BNE LDF67 ; LDF65: D7 C7 STAB L00C7 ; IAC steps, A/C, park position ; LDF67: 7E E0 FD JMP LE0FD ; ;----------------------------------------------- ; ; ;----------------------------------------------- LDF6A: D6 07 LDAB L0007 ; status word LDF6C: C5 08 BITB #$08 ; LDF6E: 27 0B BEQ LDF7B ; LDF70: 8D 3E BSR LDFB0 ; set L0010, b6 == 1 & clr B LDF72: B6 D5 20 LDAA LD520 ; LDF75: 91 BF CMPA L00BF ; IAC steps, lag filtered LDF77: 25 02 BCS LDF7B ; ; LDF79: DD BF STD L00BF ; IAC steps, lag filtered ; LDF7B: 96 10 LDAA L0010 ; status word LDF7D: 85 04 BITA #$04 ; LDF7F: 27 0B BEQ LDF8C ; ; LDF81: 8D 2D BSR LDFB0 ; set L0010, b6 == 1 & clr B LDF83: B6 D5 21 LDAA LD521 ; LDF86: 91 C1 CMPA L00C1 ; IAC steps, lag filtered LDF88: 25 02 BCS LDF8C ; LDF8A: DD C1 STD L00C1 ; IAC steps, lag filtered ; LDF8C: F6 D5 13 LDAB LD513 ; 52, 650 rpm to exit stall saver LDF8F: 96 10 LDAA L0010 ; status word LDF91: 2B 03 BMI LDF96 ; ; LDF93: F6 D5 12 LDAB LD512 ; 38, 475 rpm LDF96: D1 1D CMPB L001D ; rpm / 12.5, filtered LDF98: 25 1E BCS LDFB8 ; ; LDF9A: 8A 80 ORAA #$80 ; LDF9C: 84 BF ANDA #$BF ; LDF9E: 97 10 STAA L0010 ; status word ; ; Get IAC steps vs. Baro ; LDFA0: CE D5 58 LDX #$D558 ; steps vs. baro LDFA3: BD FB 6F JSR LFB6F ; get baro & do 2d lkup LDFA6: D6 C1 LDAB L00C1 ; IAC steps, lag filtered LDFA8: 11 CBA ; LDFA9: 25 16 BCS LDFC1 ; LDFAB: 5F CLRB ; LDFAC: DD C1 STD L00C1 ; IAC steps, lag filtered LDFAE: 20 11 BRA LDFC1 ; ;----------------------------------------------- ; ; Subroutine ; ; set L0010, b6 == 1 & clr B ;----------------------------------------------- LDFB0: D6 10 LDAB L0010 ; status word LDFB2: CA 40 ORAB #$40 ; LDFB4: D7 10 STAB L0010 ; status word LDFB6: 5F CLRB ; LDFB7: 39 RTS ; ;----------------------------------------------- ; ; ;----------------------------------------------- LDFB8: 4D TSTA ; LDFB9: 2A 06 BPL LDFC1 ; bra if b7 == 0 ; LDFBB: 84 7F ANDA #$7F ; 0111 1111 LDFBD: 8A 40 ORAA #$40 ; 0100 0000 LDFBF: 97 10 STAA L0010 ; status word ; ; ; Calc Throttle Follower IAC steps ; LDFC1: F6 D5 43 LDAB LD543 ; 64, TF factor not in prk/neut LDFC4: 96 10 LDAA L0010 ; status word LDFC6: 85 10 BITA #$10 ; prk/neut bit LDFC8: 27 03 BEQ LDFCD ; bra if not in prk/neut ; LDFCA: F6 D5 42 LDAB LD542 ; 32, TF factor in prk/neut ; LDFCD: 96 43 LDAA L0043 ; tps%, from idle LDFCF: B0 D5 41 SUBA LD541 ; 6, TF tps% bias LDFD2: 24 01 BCC LDFD5 ; bra if tps% > 6, 2.3% ; LDFD4: 4F CLRA ; else, no TF ; LDFD5: 3D MUL ; do the math LDFD6: 05 LSLD ; LDFD7: 25 06 BCS LDFDF ; LDFD9: 05 LSLD ; LDFDA: 25 03 BCS LDFDF ; LDFDC: 05 LSLD ; LDFDD: 24 02 BCC LDFE1 ; LDFDF: 86 FF LDAA #255 ; LDFE1: 97 C5 STAA L00C5 ; throttle follower steps, raw LDFE3: 90 C3 SUBA L00C3 ; throttle follower steps, filtered LDFE5: 23 12 BLS LDFF9 ; LDFE7: B1 D5 44 CMPA LD544 ; 4 LDFEA: 23 0D BLS LDFF9 ; ; LDFEC: B6 D5 38 LDAA LD538 ; 96, max TF steps LDFEF: 91 C5 CMPA L00C5 ; throttle follower steps, raw LDFF1: 23 02 BLS LDFF5 ; bra if max TF <= current TF steps ; LDFF3: 96 C5 LDAA L00C5 ; throttle follower steps, raw LDFF5: 8D B9 BSR LDFB0 ; set L0010, b6 == 1 & clr B LDFF7: DD C3 STD L00C3 ; throttle follower steps, filtered ; ; ; Get IAC steps vs coolant ; LDFF9: CE D5 47 LDX #$D547 ; LDFFC: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LDFFE: 43 COMA ; 1's comp LDFFF: BD FB 95 JSR LFB95 ; 2d lkup LE002: D6 DF LDAB L00DF ; status word LE004: C5 10 BITB #$10 ; LE006: 26 30 BNE LE038 ; ; LE008: C4 04 ANDB #$04 ; b2 of L00DF LE00A: 27 03 BEQ LE00F ; bra if not in hot restart LE00C: F6 D2 5F LDAB LD25F ; added iac steps for hot restart ; LE00F: 36 PSHA ; LE010: 37 PSHB ; ; LE011: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LE013: 43 COMA ; 1's comp LE014: 44 LSRA ; LE015: CE D5 60 LDX #$D560 ; LE018: BD FB 95 JSR LFB95 ; 2d lkup LE01B: 33 PULB ; LE01C: 1B ABA ; LE01D: 91 55 CMPA L0055 ; LE01F: 32 PULA ; LE020: 24 1C BCC LE03E ; ; ; ; ; LE022: D6 DF LDAB L00DF ; status word LE024: CA 10 ORAB #$10 ; LE026: C4 FB ANDB #$FB ; LE028: D7 DF STAB L00DF ; status word LE02A: F6 D5 27 LDAB LD527 ; 65 LE02D: D1 BF CMPB L00BF ; IAC steps, lag filtered LE02F: 25 07 BCS LE038 ; LE031: D7 BF STAB L00BF ; IAC steps, lag filtered LE033: BD DF B0 JSR LDFB0 ; set L0010, b6 == 1 & clr B LE036: D7 C0 STAB L00C0 ; ; ; ; LE038: B0 D5 27 SUBA LD527 ; 65 LE03B: 24 01 BCC LE03E ; LE03D: 4F CLRA ; ; LE03E: 97 CD STAA L00CD ; LE040: D6 03 LDAB L0003 ; status word LE042: 96 10 LDAA L0010 ; status word LE044: 85 08 BITA #$08 ; LE046: 26 07 BNE LE04F ; LE048: 4F CLRA ; LE049: C4 FB ANDB #$FB ; LE04B: D7 03 STAB L0003 ; status word LE04D: 20 13 BRA LE062 ; LE04F: C5 04 BITB #$04 ; LE051: 26 11 BNE LE064 ; LE053: CA 04 ORAB #$04 ; LE055: D7 03 STAB L0003 ; status word LE057: 96 CD LDAA L00CD ; LE059: 26 09 BNE LE064 ; LE05B: D6 02 LDAB L0002 ; status word LE05D: 2A 05 BPL LE064 ; bra if not in idle LE05F: B6 D5 28 LDAA LD528 ; 2 LE062: 97 C8 STAA L00C8 ; ; LE064: 96 CE LDAA L00CE ; desired idle speed LE066: D6 10 LDAB L0010 ; status word LE068: 2A 0A BPL LE074 ; bra if stall saver not in effect ; LE06A: B6 D5 13 LDAA LD513 ; 52, 650 rpm to exit stall saver LE06D: BB D5 1B ADDA LD51B ; 25 rpm, stall saver hyst? LE070: 24 02 BCC LE074 ; LE072: 86 FF LDAA #255 ; ; LE074: 91 1D CMPA L001D ; rpm / 12.5, filtered LE076: 22 04 BHI LE07C ; ; LE078: C4 DF ANDB #$DF ; LE07A: 20 02 BRA LE07E ; ; ; LE07C: CA 20 ORAB #$20 ; LE07E: 96 E4 LDAA L00E4 ; LE080: D7 10 STAB L0010 ; status word LE082: C5 08 BITB #$08 ; LE084: 27 08 BEQ LE08E ; ; LE086: 91 BE CMPA L00BE ; LE088: 23 02 BLS LE08C ; ; LE08A: 97 BE STAA L00BE ; ; ; Add up the IAC steps ; LE08C: 96 BE LDAA L00BE ; LE08E: 9B CD ADDA L00CD ; LE090: 25 2A BCS LE0BC ; ; LE092: 9B BF ADDA L00BF ; IAC steps, lag filtered LE094: 25 26 BCS LE0BC ; ; LE096: 9B C1 ADDA L00C1 ; IAC steps, lag filtered LE098: 25 22 BCS LE0BC ; ; LE09A: 97 49 STAA L0049 ; LE09C: F6 D5 40 LDAB LD540 ; 10 LE09F: D1 C3 CMPB L00C3 ; throttle follower steps, filtered LE0A1: 24 0B BCC LE0AE ; ; LE0A3: 1B ABA ; LE0A4: 25 16 BCS LE0BC ; ; LE0A6: 91 C3 CMPA L00C3 ; throttle follower steps, filtered LE0A8: 24 0A BCC LE0B4 ; ; LE0AA: 96 C3 LDAA L00C3 ; throttle follower steps, filtered LE0AC: 20 10 BRA LE0BE ; ; LE0AE: 96 C3 LDAA L00C3 ; throttle follower steps, filtered LE0B0: 9B 49 ADDA L0049 ; LE0B2: 25 08 BCS LE0BC ; ; LE0B4: 9B CC ADDA L00CC ; LE0B6: 25 04 BCS LE0BC ; ; LE0B8: 9B C8 ADDA L00C8 ; LE0BA: 24 02 BCC LE0BE ; ; LE0BC: 86 FF LDAA #255 ; LE0BE: D6 10 LDAB L0010 ; status word LE0C0: C5 10 BITB #$10 ; LE0C2: 27 06 BEQ LE0CA ; ; LE0C4: B0 D5 29 SUBA LD529 ; 0 LE0C7: 24 01 BCC LE0CA ; ; LE0C9: 4F CLRA ; LE0CA: 97 C7 STAA L00C7 ; IAC steps, A/C, park position ; ; ; ; Check if need A/C IAC steps vs. baro ; LE0CC: D6 10 LDAB L0010 ; status word LE0CE: C5 08 BITB #$08 ; LE0D0: 27 21 BEQ LE0F3 ; ; LE0D2: CE D5 5C LDX #$D55C ; A/C requested additional steps LE0D5: BD FB 6F JSR LFB6F ; get baro & do 2d lkup ; LE0D8: D6 21 LDAB L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LE0DA: F1 D5 24 CMPB LD524 ; 36, 102c, coolant threshold LE0DD: 24 05 BCC LE0E4 ; ; LE0DF: BB D5 25 ADDA LD525 ; 5 steps LE0E2: 25 0D BCS LE0F1 ; ; LE0E4: 9B C7 ADDA L00C7 ; IAC steps, A/C, park position LE0E6: 25 09 BCS LE0F1 ; ; LE0E8: D6 02 LDAB L0002 ; status word LE0EA: 2B 07 BMI LE0F3 ; bra if in idle ; LE0EC: BB D5 26 ADDA LD526 ; 3 steps LE0EF: 24 02 BCC LE0F3 ; LE0F1: 86 FF LDAA #255 ; ; ; ; LE0F3: 16 TAB ; LE0F4: 90 C9 SUBA L00C9 ; IAC steps, bias LE0F6: 24 03 BCC LE0FB ; LE0F8: D7 C9 STAB L00C9 ; IAC steps, bias LE0FA: 4F CLRA ; LE0FB: 97 C7 STAA L00C7 ; IAC steps, A/C, park position ; LE0FD: 96 00 LDAA L0000 ; status word LE0FF: 85 02 BITA #$02 ; LE101: 27 03 BEQ LE106 ; no HU LE103: BD 58 03 JSR L5803 ; ; LE106: 39 RTS ; done >>>> ;----------------------------------------------- ; ; Reset Vector ; ;----------------------------------------------- LE107: 8E 00 DC LDS #$DC ; load stack address LE10A: BD FD 19 JSR LFD19 ; delay, rts only LE10D: CE 00 0A LDX #$000A ; LE110: FF BC 3C STX LBC3C ; PWM control register ; LE113: CE BC 00 LDX #$BC00 ; ecm drp counter LE116: 4F CLRA ; LE117: 5F CLRB ; ; LE118: ED 00 STD 0,X ; clear ecu counters<< LE11A: 08 INX ; LE11B: 08 INX ; LE11C: 8C BC 38 CPX #$BC38 ; last ecu addr to clear LE11F: 26 F7 BNE LE118 ; not done yet>>> ; LE121: CE 01 99 LDX #$0199 ; 0000 0001 1001 1001 LE124: FF BC 0C STX LBC0C ; ; LE127: CE 00 D1 LDX #$00D1 ; clear from L00D1 to L0000 ; LE12A: 6F 00 CLR 0,X ; clear scratch pad ram<<<< LE12C: 09 DEX ; LE12D: 8C FF FF CPX #$FFFF ; LE130: 26 F8 BNE LE12A ; bra if not done yet>>>> ; LE132: F6 08 80 LDAB L0880 ; Monitor BatV loss (b7) LE135: F7 08 80 STAB L0880 ; Monitor BatV loss (b7) LE138: 2B 07 BMI LE141 ; ; LE13A: BD FD 1A JSR LFD1A ; Do CkSum on Error Flags LE13D: 91 EA CMPA L00EA ; error flag cksum LE13F: 27 1E BEQ LE15F ; bra if cksum ok ; ; ; ECM Battery lost, additional reset's ; LE141: CE 00 FF LDX #$00FF ; clear from top of ram LE144: 6F 00 CLR 0,X ; LE146: 09 DEX ; LE147: 8C 00 DC CPX #$00DC ; LE14A: 26 F8 BNE LE144 ; until done>>>> ; LE14C: B6 D5 1E LDAA LD51E ; 22 LE14F: 97 E4 STAA L00E4 ; ; LE151: B6 D5 11 LDAA LD511 ; 160, IAC park position LE154: 97 FD STAA L00FD ; Current IAC position, steps ; LE156: BD FD D7 JSR LFDD7 ; Set all BLM cells to 128 ; LE159: 96 07 LDAA L0007 ; status word LE15B: 8A 40 ORAA #$40 ; LE15D: 97 07 STAA L0007 ; status word ; LE15F: 96 E4 LDAA L00E4 ; LE161: BB D5 10 ADDA LD510 ; 18 LE164: 24 02 BCC LE168 ; LE166: 86 FF LDAA #255 ; ; LE168: 97 BE STAA L00BE ; ; LE16A: 96 E0 LDAA L00E0 ; status word LE16C: 84 C0 ANDA #$C0 ; LE16E: 97 E0 STAA L00E0 ; status word ; LE170: FE 58 00 LDX L5800 ; HU on line? LE173: 8C 7E 58 CPX #$7E58 ; chk for cookie val LE176: 26 03 BNE LE17B ; bra for no HU LE178: BD 58 15 JSR L5815 ; go do HU ; ; Do eprom cksum ; LE17B: CE E0 00 LDX #$E000 ; end of EPROM + 1 LE17E: DF 4D STX L004D ; LE180: CE D0 04 LDX #$D004 ; Beginning of cksum area LE183: BD E2 89 JSR LE289 ; Do CheckSum LE186: B3 D0 00 SUBD LD000 ; sub out cksum val LE189: 26 07 BNE LE192 ; bra if cksum does not match ; ; cksum OK, ck mask id ; LE18B: B6 D0 04 LDAA LD004 ; maskId LE18E: 81 61 CMPA #$61 ; ck maskid LE190: 27 24 BEQ LE1B6 ; ; ; cksum failed, chk for x maskid ; LE192: B6 D0 04 LDAA LD004 ; maskId LE195: 81 AA CMPA #$AA ; test for x maskid LE197: 27 1D BEQ LE1B6 ; bra if it is, ok ; ; ; Eprom checksum error here ; LE199: BD FC 40 JSR LFC40 ; do SES light on ; LE19C: 96 14 LDAA L0014 ; error flag 3 LE19E: 8A 10 ORAA #$10 ; b4 LE1A0: 97 14 STAA L0014 ; error flag 3 ; LE1A2: 96 E3 LDAA L00E3 ; set eprom err code LE1A4: 8A 10 ORAA #$10 ; b4 LE1A6: 97 E3 STAA L00E3 ; save ; LE1A8: BD FD 1A JSR LFD1A ; Do CkSum on Error Flags LE1AB: 97 EA STAA L00EA ; error flag cksum ; LE1AD: 86 0C LDAA #12 ; aldl channel LE1AF: BD FF 00 JSR LFF00 ; ADC w/wait for data LE1B2: 81 99 CMPA #153 ; LE1B4: 24 FC BCC LE1B2 ; loop here if in normal mode ; LE1B6: CE F9 2A LDX #$F92A ; LE1B9: FF BC 3C STX LBC3C ; PWM control register ; ; init map ; LE1BC: 86 05 LDAA #5 ; map channel LE1BE: BD FF 00 JSR LFF00 ; ADC w/wait for data LE1C1: 97 28 STAA L0028 ; map adc value, raw ; LE1C3: 80 1A SUBA #26 ; ADC to S/D calc LE1C5: C6 97 LDAB #151 ; LE1C7: BD FC 6C JSR LFC6C ; A = (A * B) / 128 LE1CA: 97 25 STAA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LE1CC: 97 2C STAA L002C ; s/d map, slo filtered from L0025 ; ; init baro, iat & coolant ; LE1CE: BD FC C0 JSR LFCC0 ; init baro LE1D1: BD FD 84 JSR LFD84 ; init iat LE1D4: BD FD 27 JSR LFD27 ; Read Coolant Temp & do Diag Tests LE1D7: 97 22 STAA L0022 ; save startup coolant, adc inverse LE1D9: BD FD E5 JSR LFDE5 ; Test Iat | Cts against 75c threshold ; ; init O2 values ; LE1DC: B6 D2 1D LDAA LD21D ; 138 LE1DF: 97 3A STAA L003A ; O2, minor loop filtered LE1E1: 97 39 STAA L0039 ; O2, adc, filtered, round up from L003A LE1E3: 97 3C STAA L003C ; O2, major loop filtered (slow) LE1E5: 97 3E STAA L003E ; O2, filtered vs. airflow ; ; init tps value ; LE1E7: 86 0B LDAA #11 ; TPS channel LE1E9: BD FF 00 JSR LFF00 ; ADC w/wait for data LE1EC: 97 42 STAA L0042 ; tps, adc cnts, volts = n * .0196 ; LE1EE: B6 D2 1A LDAA LD21A ; 51, tps idle setting init LE1F1: 97 47 STAA L0047 ; tps minimum setting, idle position LE1F3: BD FC DA JSR LFCDA ; minimum tps setting & tps% calc LE1F6: 97 44 STAA L0044 ; tps%, one delayed from L0043 LE1F8: 97 45 STAA L0045 ; tps%, slow filtered ; ; init batV ; LE1FA: BD FE FE JSR LFEFE ; read BatV adc channel LE1FD: 97 40 STAA L0040 ; Battery Volts, * 10, adc cnts ; LE1FF: FC BC 06 LDD LBC06 ; EST Circuit LE202: DD 93 STD L0093 ; EST circuit data ; LE204: 96 FD LDAA L00FD ; Current IAC position, steps LE206: 97 C7 STAA L00C7 ; IAC steps, A/C, park position ; LE208: 96 DE LDAA L00DE ; status word LE20A: 85 04 BITA #$04 ; LE20C: 26 06 BNE LE214 ; ; LE20E: D6 09 LDAB L0009 ; status word LE210: CA 04 ORAB #$04 ; LE212: D7 09 STAB L0009 ; status word ; LE214: FE BC 04 LDX LBC04 ; MAF/VATS Frequency LE217: 84 FB ANDA #$FB ; LE219: 97 DE STAA L00DE ; status word ; LE21B: B6 D2 32 LDAA LD232 ; 14.7, stoich LE21E: 97 A3 STAA L00A3 ; desired AFR LE220: 97 B3 STAA L00B3 ; crank afr LE222: FF BC 1A STX LBC1A ; vats ; LE225: 86 0E LDAA #$0E ; start @ rts # $0E LE227: 97 66 STAA L0066 ; 160Hz rts counter ; LE229: 86 80 LDAA #128 ; LE22B: 97 67 STAA L0067 ; init to $80, bit for ADC hardware LE22D: 97 A1 STAA L00A1 ; BLM, bin val ; LE22F: 86 14 LDAA #20 ; twenty bytes of aldl data LE231: 97 71 STAA L0071 ; aldl byte count ; LE233: 86 A0 LDAA #160 ; LE235: 97 32 STAA L0032 ; vss interval counter, 159 | 160 ; LE237: BD FD D7 JSR LFDD7 ; Set all BLM cells to 128 LE23A: BD FF 05 JSR LFF05 ; LE23D: 24 44 BCC LE283 ; ; LE23F: 4F CLRA ; PumpV channel LE240: BD FF 00 JSR LFF00 ; ADC w/wait for data LE243: 81 A0 CMPA #160 ; 16.0v LE245: 23 3C BLS LE283 ; bra if BatV <= 16.0V ; LE247: BD FE FE JSR LFEFE ; read BatV adc channel LE24A: 81 64 CMPA #100 ; 10.0v LE24C: 24 35 BCC LE283 ; bra if BatV > 10.0V ; LE24E: 96 06 LDAA L0006 ; LE250: 8A 01 ORAA #$01 ; Do factory diags! LE252: 97 06 STAA L0006 ; ;----------------------------------------------- ; ; Do Factory Diags! ; ;----------------------------------------------- ; ; init coolant? ; LE254: 86 CC LDAA #204 ; deault coolant temp LE256: 97 21 STAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LE258: 97 23 STAA L0023 ; coolant, adc cnts ; ; set stack pointer & $AA fill ; LE25A: CE 00 DC LDX #$00DC ; LE25D: 35 TXS ; LE25E: 86 AA LDAA #$AA ; stack fill val LE260: 08 INX ; LE261: A7 00 STAA 0,X ; LE263: 8C 00 FF CPX #$FF ; end of stack? LE266: 25 F8 BCS LE260 ; no, not yet>>>> ; LE268: CE E0 00 LDX #$E000 ; LE26B: DF 4D STX L004D ; LE26D: CE D0 00 LDX #$D000 ; LE270: 8D 17 BSR LE289 ; Do CheckSum LE272: DD 16 STD L0016 ; ; LE274: 86 F0 LDAA #240 ; LE276: 97 4D STAA L004D ; LE278: 8D 0F BSR LE289 ; Do CheckSum LE27A: DD 12 STD L0012 ; error flag 1 LE27C: 7F 00 4D CLR L004D ; LE27F: 8D 08 BSR LE289 ; Do CheckSum LE281: DD 14 STD L0014 ; error flag 3 ; LE283: FE BC 38 LDX LBC38 ; LE286: 7E E3 FE JMP LE3FE ; go wait for next interrupt ;*================================================== ;* ;* SubRoutine ;* ;* Do CheckSum on area of Memory ;* ;* Enter with: ;* ;* L004D,E => last memory location + 1 ;* X => first memory location ;* ;*================================================== LE289: 4F CLRA ; LE28A: 5F CLRB ; LE28B: DF 49 STX L0049 ; ; LE28D: 7C 00 4A INC L004A ; inc COP kick timer<<<< LE290: 2A 11 BPL LE2A3 ; ; LE292: 7F 00 4A CLR L004A ; clear COP kick timer LE295: 36 PSHA ; LE296: 37 PSHB ; LE297: FC BC 3C LDD LBC3C ; PWM control register LE29A: C8 04 EORB #$04 ; toggle b2, watch dog LE29C: 8D 0E BSR LE2AC ; LE29E: FD BC 3C STD LBC3C ; PWM control register LE2A1: 33 PULB ; LE2A2: 32 PULA ; ; LE2A3: EB 00 ADDB 0,X ; add in next byte value LE2A5: 89 00 ADCA #0 ; LE2A7: 08 INX ; LE2A8: 9C 4D CPX L004D ; holds last addr + 1 LE2AA: 26 E1 BNE LE28D ; not done >>>> ; LE2AC: 39 RTS ; ;*================================================== ;* ;* Vector Handler ;* ;* Hardware tickler ;* ;*================================================== LE2AD: FC BC 38 LDD LBC38 ; ecm LE2B0: 85 10 BITA #$10 ; test bit 4 LE2B2: 26 01 BNE LE2B5 ; bra if b4 == 1 LE2B4: 3B RTI ; just return ;----------------------------------------------- ; ;----------------------------------------------- LE2B5: 30 TSX ; stack pointer to X LE2B6: 8C 00 D6 CPX #$00D6 ; mid-point of stack LE2B9: 27 06 BEQ LE2C1 ; ; LE2BB: D6 00 LDAB L0000 ; flag stack error LE2BD: CA 01 ORAB #1 ; LE2BF: D7 00 STAB L0000 ; status word ; LE2C1: 8E 00 DC LDS #$00DC ; load stack address LE2C4: D6 02 LDAB L0002 ; status word LE2C6: 85 08 BITA #$08 ; LE2C8: 27 02 BEQ LE2CC ; ; LE2CA: CA 04 ORAB #4 ; LE2CC: 85 20 BITA #$20 ; LE2CE: 27 02 BEQ LE2D2 ; ; LE2D0: CA 01 ORAB #1 ; LE2D2: 96 00 LDAA L0000 ; status word LE2D4: 85 10 BITA #$10 ; engine shutdown LE2D6: 27 02 BEQ LE2DA ; ; LE2D8: C4 FB ANDB #$FB ; LE2DA: D7 02 STAB L0002 ; status word LE2DC: 96 06 LDAA L0006 ; LE2DE: 47 ASRA ; LE2DF: 25 06 BCS LE2E7 ; ; LE2E1: 96 14 LDAA L0014 ; error flag 3 LE2E3: 85 10 BITA #$10 ; LE2E5: 26 0A BNE LE2F1 ; ; LE2E7: 86 BF LDAA #191 ; LE2E9: BD FC 42 JSR LFC42 ; LE2EC: 86 40 LDAA #64 ; LE2EE: BD FC 4D JSR LFC4D ; LE2F1: DE EB LDX L00EB ; eng run time LE2F3: 96 66 LDAA L0066 ; 160Hz rts counter LE2F5: 4C INCA ; LE2F6: 81 A0 CMPA #160 ; LE2F8: 26 1E BNE LE318 ; ; ; one second has elapsed ; LE2FA: D6 06 LDAB L0006 ; LE2FC: C8 20 EORB #32 ; LE2FE: D7 06 STAB L0006 ; LE300: D6 01 LDAB L0001 ; status word LE302: 2B 0B BMI LE30F ; Engine is Running ; LE304: 7F 00 55 CLR L0055 ; LE307: 96 DF LDAA L00DF ; status word LE309: 84 EF ANDA #$EF ; LE30B: 97 DF STAA L00DF ; status word LE30D: 20 08 BRA LE317 ; LE30F: 7C 00 55 INC L0055 ; ; ; LE312: 08 INX ; LE313: 27 02 BEQ LE317 ; LE315: DF EB STX L00EB ; eng run time ; LE317: 4F CLRA ; ; LE318: 97 66 STAA L0066 ; 160Hz rts counter LE31A: 84 1F ANDA #$1F ; LE31C: 26 09 BNE LE327 ; ; LE31E: D6 00 LDAB L0000 ; HU on line? LE320: C5 02 BITB #$02 ; LE322: 27 03 BEQ LE327 ; LE324: BD 58 0F JSR L580F ; ; LE327: 96 06 LDAA L0006 ; LE329: 47 ASRA ; LE32A: 24 03 BCC LE32F ; LE32C: 7E FE 6B JMP LFE6B ; ;----------------------------------------------- ; ; ;----------------------------------------------- LE32F: CC 05 01 LDD #$0501 ; map channel, return immed LE332: BD FC 1A JSR LFC1A ; ADC routine ; LE335: BD EB A7 JSR LEBA7 ; check for BatV overvolts ; LE338: 96 02 LDAA L0002 ; status word LE33A: 47 ASRA ; LE33B: 24 05 BCC LE342 ; LE33D: 48 ASLA ; LE33E: 97 02 STAA L0002 ; status word LE340: 20 13 BRA LE355 ; LE342: D6 32 LDAB L0032 ; vss interval counter, 159 | 160 LE344: 5C INCB ; LE345: C1 9F CMPB #159 ; LE347: 23 08 BLS LE351 ; LE349: D6 01 LDAB L0001 ; status word LE34B: C4 EF ANDB #$EF ; 1110 1111 LE34D: D7 01 STAB L0001 ; status word LE34F: C6 9F LDAB #159 ; LE351: D7 32 STAB L0032 ; vss interval counter, 159 | 160 LE353: 20 23 BRA LE378 ; ;------------------------------------ ; VSS work ;------------------------------------ LE355: D6 01 LDAB L0001 ; status word LE357: C5 10 BITB #$10 ; b4, vss detects movement bit LE359: 26 0D BNE LE368 ; bra if b4 == 1 ; LE35B: CA 10 ORAB #$10 ; b4, vss detects movement bit LE35D: D7 01 STAB L0001 ; save status word LE35F: FE BC 02 LDX LBC02 ; VSS counter LE362: 08 INX ; LE363: DF 37 STX L0037 ; L0037 & L0038 LE365: 08 INX ; LE366: DF 35 STX L0035 ; L0035 & L0036 ; ; shift vss vals ; ; L0033 & L0034 << L0035 & L0036 << L0037 & L0038 << LBC02 ; LE368: 7F 00 32 CLR L0032 ; vss interval counter, 159 | 160 ; LE36B: DE 35 LDX L0035 ; LE36D: DF 33 STX L0033 ; ; LE36F: DE 37 LDX L0037 ; LE371: DF 35 STX L0035 ; ; LE373: FE BC 02 LDX LBC02 ; VSS counter LE376: DF 37 STX L0037 ; ;------------------------------- ; ;------------------------------- ; ; check vats ; LE378: 96 DF LDAA L00DF ; status word LE37A: 85 40 BITA #$40 ; vats ok bit LE37C: 26 28 BNE LE3A6 ; bra if b6 == 1, OK ; LE37E: FE BC 04 LDX LBC04 ; MAF/VATS Frequency LE381: F6 D0 07 LDAB LD007 ; option byte: 0010 0100 LE384: C5 40 BITB #$40 ; LE386: 27 1A BEQ LE3A2 ; bra if b6 == 0, no VATS ; LE388: 3C PSHX ; move X to AB LE389: 32 PULA ; LE38A: 33 PULB ; LE38B: B3 BC 1A SUBD LBC1A ; vats LE38E: 27 16 BEQ LE3A6 ; LE390: 37 PSHB ; LE391: 36 PSHA ; LE392: 96 DF LDAA L00DF ; status word LE394: FF BC 1A STX LBC1A ; vats LE397: 38 PULX ; LE398: BC D2 91 CPX LD291 ; LE39B: 22 09 BHI LE3A6 ; LE39D: BC D2 93 CPX LD293 ; LE3A0: 25 04 BCS LE3A6 ; ; LE3A2: 8A 40 ORAA #$40 ; b6, engine start ok LE3A4: 97 DF STAA L00DF ; status word ; ; ; ; LE3A6: BD FC 27 JSR LFC27 ; get val from adc LE3A9: 97 2A STAA L002A ; adc map val, raw? LE3AB: D6 14 LDAB L0014 ; error flag 3 LE3AD: C5 10 BITB #$10 ; LE3AF: 27 08 BEQ LE3B9 ; LE3B1: 96 66 LDAA L0066 ; 160Hz rts counter LE3B3: 47 ASRA ; LE3B4: 25 1E BCS LE3D4 ; return to rts loop LE3B6: 7E EA 14 JMP LEA14 ; ;----------------------------------------------- ; ; ;----------------------------------------------- LE3B9: 96 66 LDAA L0066 ; 160Hz rts counter LE3BB: 47 ASRA ; test b0 LE3BC: 25 05 BCS LE3C3 ; bra if b0 == 1 ; LE3BE: BD DE E3 JSR LDEE3 ; misc init & IAC stuff ; ; Go Do Spark Minor Loop ; LE3C1: 20 5E BRA LE421 ; Spark Minor Loop >>>> ; ; ; Keep est alive? ; LE3C3: B6 08 81 LDAA L0881 ; MCU1 I/O LE3C6: D6 02 LDAB L0002 ; status word LE3C8: C5 08 BITB #$08 ; b3, aldl backup mode (3.9K Ohm) LE3CA: 26 02 BNE LE3CE ; bra if b3 == 1, (limp) ; LE3CC: 88 08 EORA #8 ; toggle b3, sentry, bypass LE3CE: B7 08 81 STAA L0881 ; MCU1 I/O ; ; Go Do Fuel Minor Loop ; LE3D1: 7E D5 69 JMP LD569 ; Fuel Minor Loop >>>> ;----------------------------------------------- ; ; ;----------------------------------------------- LE3D4: 96 66 LDAA L0066 ; 160Hz rts counter LE3D6: 47 ASRA ; LE3D7: 24 05 BCC LE3DE ; LE3D9: 86 FB LDAA #251 ; LE3DB: BD FC 42 JSR LFC42 ; ; ; ; Time to run a major loop ; LE3DE: D6 66 LDAB L0066 ; 160Hz rts counter LE3E0: C4 0F ANDB #$0F ; get lower 4 bits LE3E2: CE E4 01 LDX #$E401 ; Major loop jmp table addr LE3E5: 58 LSLB ; B *= 2 for 2 byte addr's LE3E6: 3A ABX ; add to X LE3E7: EE 00 LDX 0,X ; Load Address to jmp to LE3E9: AD 00 JSR 0,X ; Run a Major Loop ; LE3EB: 96 01 LDAA L0001 ; status word LE3ED: 85 04 BITA #$04 ; LE3EF: 26 0D BNE LE3FE ; LE3F1: 8A 04 ORAA #4 ; LE3F3: 97 01 STAA L0001 ; status word LE3F5: D6 66 LDAB L0066 ; 160Hz rts counter LE3F7: D7 DD STAB L00DD ; LE3F9: 0E CLI ; LE3FA: 84 FB ANDA #$FB ; LE3FC: 97 01 STAA L0001 ; status word LE3FE: 0E CLI ; LE3FF: 20 FD BRA LE3FE ; ;----------------------------------------------- ; ; 100msec RTS table ; ;----------------------------------------------- LE401: FCB $EA35 ; 0 FCB $EAFB ; 1 FCB $EB02 ; 2 FCB $EB27 ; 3 FCB $EC42 ; 4 FCB $EDFB ; 5 FCB $FE04 ; 6 FCB $F269 ; 7 FCB $F4D0 ; 8 FCB $F19F ; 9 FCB $FD19 ; A, rts FCB $EFC7 ; B FCB $FD19 ; C, rts FCB $F529 ; D FCB $FE1B ; E FCB $EC57 ; F ;----------------------------------------------- ; ; Spark Minor Loop ; ;----------------------------------------------- LE421: BD FA 90 JSR LFA90 ; LE424: D6 26 LDAB L0026 ; s/d map, one delayed from L0025 LE426: D7 27 STAB L0027 ; s/d map, two delayed from L0025 LE428: D6 25 LDAB L0025 ; s/d map, KPa = (N * 0.3125) + 20 LE42A: D7 26 STAB L0026 ; s/d map, one delayed from L0025 ; ; Convert map & baro to vac ; LE42C: C6 97 LDAB #151 ; LE42E: 96 FE LDAA L00FE ; baro pressure, A/D cnts LE430: 90 28 SUBA L0028 ; map adc value, raw LE432: 22 03 BHI LE437 ; LE434: 86 01 LDAA #1 ; LE436: 0C CLC ; ; LE437: BD FC 68 JSR LFC68 ; A = (A * B) / 128 LE43A: 40 NEGA ; LE43B: 97 2E STAA L002E ; vac ; ; ; Convert Map to S/D Map ; LE43D: C6 97 LDAB #151 ; LE43F: 96 28 LDAA L0028 ; map adc value, raw LE441: 80 1A SUBA #26 ; LE443: BD FC 68 JSR LFC68 ; A = (A * B) / 128 LE446: 97 25 STAA L0025 ; s/d map, KPa = (N * 0.3125) + 20 ; ; ; do map sensor low diag, err 34 ; LE448: D6 08 LDAB L0008 ; status word LE44A: C4 7F ANDB #$7F ; clear b3, lo map err LE44C: C5 04 BITB #$04 ; b2, tps hi err LE44E: 26 21 BNE LE471 ; bra if b2 == 1, do not do test ; LE450: 96 2A LDAA L002A ; map value, ADC cnts LE452: B1 D4 74 CMPA LD474 ; map limit, (11.9 kpa) LE455: 24 1A BCC LE471 ; bra if map gt 14.4, no err ; LE457: 96 8A LDAA L008A ; error 34 timer, map, (12.5 msec incr's) LE459: B1 D4 76 CMPA LD476 ; LE45C: 22 18 BHI LE476 ; ; LE45E: 96 1A LDAA L001A ; rpm scaled LE460: B1 D4 75 CMPA LD475 ; bra if rpm < 1200 for incr timer & no err yet LE463: 25 07 BCS LE46C ; LE465: 96 43 LDAA L0043 ; tps%, from idle LE467: B1 D4 77 CMPA LD477 ; LE46A: 23 05 BLS LE471 ; LE46C: 7C 00 8A INC L008A ; error 34 timer, map LE46F: 20 0D BRA LE47E ; ; LE471: 7F 00 8A CLR L008A ; error 34 timer, map LE474: 20 08 BRA LE47E ; bra for no error ; ; ; map test failed ; LE476: 96 13 LDAA L0013 ; error flag 2 LE478: 8A 08 ORAA #$08 ; LE47A: 97 13 STAA L0013 ; error flag 2 LE47C: CA 80 ORAB #$80 ; LE47E: D7 08 STAB L0008 ; status word ;------------------------------- ; ;------------------------------- LE480: 96 02 LDAA L0002 ; status word LE482: 85 04 BITA #$04 ; LE484: 27 67 BEQ LE4ED ; ; ;------------------------------- ; ; exponential decay dynamic dwell to zero ; ;------------------------------- LE486: DC 59 LDD L0059 ; dynamic dwell LE488: 04 LSRD ; LE489: 04 LSRD ; LE48A: 04 LSRD ; LE48B: 43 COMA ; 1's comp LE48C: 53 COMB ; 1's comp LE48D: D3 59 ADDD L0059 ; dynamic dwell LE48F: 2A 02 BPL LE493 ; LE491: 4F CLRA ; LE492: 5F CLRB ; ; LE493: DD 59 STD L0059 ; dynamic dwell ;------------------------------- ; engine in crank ? ;------------------------------- LE495: 7F 00 68 CLR L0068 ; start/crank timer of some nature LE498: 96 01 LDAA L0001 ; status word LE49A: 2A 15 BPL LE4B1 ; Engine is not Running LE49C: 85 40 BITA #$40 ; LE49E: 27 69 BEQ LE509 ; LE4A0: DE 63 LDX L0063 ; drp info LE4A2: 8C FE F0 CPX #65264 ; $FEF0, (15 rpm, crank speed?) LE4A5: 22 62 BHI LE509 ; ; LE4A7: F6 D0 18 LDAB LD018 ; 6, filt coef LE4AA: 86 FF LDAA #255 ; LE4AC: BD FB 40 JSR LFB40 ; Lag Filter LE4AF: 20 38 BRA LE4E9 ; ; LE4B1: D6 00 LDAB L0000 ; status word LE4B3: C5 08 BITB #$08 ; LE4B5: 27 45 BEQ LE4FC ; LE4B7: FC D0 10 LDD LD010 ; 400 rpm, startup drp cnt LE4BA: B3 BC 00 SUBD LBC00 ; ecm drp counter LE4BD: 22 05 BHI LE4C4 ; LE4BF: 4F CLRA ; LE4C0: 97 51 STAA L0051 ; LE4C2: 20 3C BRA LE500 ; ; LE4C4: 96 51 LDAA L0051 ; LE4C6: B1 D0 12 CMPA LD012 ; 6, eng run time out param, drp's LE4C9: 4C INCA ; LE4CA: 25 F4 BCS LE4C0 ; ; ; ; engine is now running ; LE4CC: 96 01 LDAA L0001 ; status word LE4CE: 8A 80 ORAA #$80 ; Engine is Running LE4D0: 97 01 STAA L0001 ; status word ; ; check for clear flood mode ; LE4D2: B6 D2 54 LDAA LD254 ; clear flood tps% thres, 80% LE4D5: 91 43 CMPA L0043 ; tps%, from idle LE4D7: 22 06 BHI LE4DF ; ; LE4D9: 96 08 LDAA L0008 ; status word LE4DB: 8A 01 ORAA #$01 ; set in clr-flood LE4DD: 97 08 STAA L0008 ; status word ; LE4DF: 96 DE LDAA L00DE ; status word LE4E1: 8A 08 ORAA #$08 ; set b3 LE4E3: 97 DE STAA L00DE ; status word ; LE4E5: 4F CLRA ; LE4E6: 97 51 STAA L0051 ; LE4E8: 5F CLRB ; ; LE4E9: DD 63 STD L0063 ; drp info LE4EB: 20 1C BRA LE509 ; ; ;------------------------------- ; ;------------------------------- LE4ED: 96 68 LDAA L0068 ; start/crank timer of some nature LE4EF: D6 01 LDAB L0001 ; status word LE4F1: 81 17 CMPA #23 ; 23 secs? LE4F3: 25 0E BCS LE503 ; ; LE4F5: C4 7F ANDB #$7F ; Engine is not Running LE4F7: D7 01 STAB L0001 ; status word LE4F9: 7E EA 27 JMP LEA27 ; ;----------------------------------------------- ; ; ;----------------------------------------------- LE4FC: CA 08 ORAB #$08 ; 0000 1000 LE4FE: D7 00 STAB L0000 ; status word ; LE500: 7E EA 14 JMP LEA14 ; ;----------------------------------------------- ; ; Do RPM calculations ; ;----------------------------------------------- LE503: 5D TSTB ; b7 of L0001 LE504: 2A FA BPL LE500 ; bra Engine is not Running ; LE506: 4C INCA ; L0068, start/crank timer of some nature LE507: 97 68 STAA L0068 ; start/crank timer of some nature ; LE509: 86 04 LDAA #$04 ; 0000 0100 LE50B: BD FC 4D JSR LFC4D ; ; LE50E: 96 1B LDAA L001B ; rpm / 25 LE510: 97 1C STAA L001C ; rpm / 25 one delayed ; LE512: FC BC 00 LDD LBC00 ; ecm drp counter LE515: DD 18 STD L0018 ; drp count LE517: DD 4F STD L004F ; drp count ; ; calc drp relative to 8 cyl ; LE519: CE 00 18 LDX #$0018 ; drp counter val LE51C: B6 D0 0F LDAA LD00F ; cyl count LE51F: C6 20 LDAB #32 ; constant LE521: 3D MUL ; LE522: 17 TBA ; LE523: 27 05 BEQ LE52A ; bra if B == 0, 8 cyl LE525: BD FC 05 JSR LFC05 ; AB = (A x *X) / 256 LE528: DD 18 STD L0018 ; drp count relative to 8 cyl ; ; ; calc rpm values ; LE52A: DC 18 LDD L0018 ; drp count LE52C: 05 LSLD ; AB *= 2 LE52D: DD 4B STD L004B ; tmp store LE52F: CC 01 33 LDD #307 ; constant for 6375 rpm max LE532: BD FB DE JSR LFBDE ; vss/rpm calc routine (FDIV) LE535: DD 49 STD L0049 ; rpm / 25, tmp storage ; LE537: 81 60 CMPA #96 ; 2400 rpm LE539: 25 09 BCS LE544 ; bra if rpm < 2400 ; ; ; rpm >= 2400 here ; LE53B: C3 40 80 ADDD #$4080 ; add 64 to A & 128 to B for rnd up LE53E: 24 0B BCC LE54B ; 1600 rpm offset? LE540: 86 FF LDAA #255 ; LE542: 20 07 BRA LE54B ; ; ; rpm < 2400 here ; LE544: 05 LSLD ; AB *= 2, now rpm / 12.5 LE545: 83 1F 80 SUBD #$1F80 ; sub 31 from A & 128 from B (rnd dwn) LE548: 24 01 BCC LE54B ; bra if no undr flw LE54A: 4F CLRA ; clr undrflw ; ; save rpm term ; LE54B: 97 1A STAA L001A ; 400 - 2400 x 200's ; 2400 - 4800 x 400's ; ; ; do rpm / 25 ; LE54D: DC 49 LDD L0049 ; rpm / 25, tmp LE54F: C3 00 80 ADDD #$0080 ; round up LE552: 24 02 BCC LE556 ; LE554: 86 FF LDAA #255 ; LE556: 97 1B STAA L001B ; rpm / 25 ; ; do rpm / 12.5, filtered ; LE558: DC 49 LDD L0049 ; rpm / 25, tmp LE55A: 05 LSLD ; now rpm / 12.5 LE55B: 24 03 BCC LE560 ; LE55D: CC FF FF LDD #$FFFF ; clear overflow LE560: DE 1D LDX L001D ; rpm / 12.5, filtered LE562: 27 06 BEQ LE56A ; bra if == 0 LE564: F6 D0 1C LDAB LD01C ; filter coef, 240 LE567: BD FB 40 JSR LFB40 ; Lag Filter LE56A: DD 1D STD L001D ; rpm / 12.5, filtered ;*================================================== ;* ;* Do Dwell Calculation ;* ;*================================================== ;------------------------------- ; ; Dynamic Dwell ; ;------------------------------- LE56C: 86 FF LDAA #255 ; pre-load max dynamic dwell LE56E: D6 25 LDAB L0025 ; s/d map, KPa = (N * 0.3125) + 20 LE570: D0 27 SUBB L0027 ; s/d map, two delayed LE572: 25 04 BCS LE578 ; bra if map dropping ; ; ; Check for map Accel ; LE574: C1 20 CMPB #32 ; 10 KPa delta test LE576: 24 0B BCC LE583 ; bra if delta map > 10 KPa ; ; ---------------------- ; No Accel ; ; If Delta RefPer > Dynamic Dwell ; set ; Dynamic Dwell = -2 * Delta RefPer ; ---------------------- LE578: DC 57 LDD L0057 ; drp one delayed (RefPer) LE57A: 93 4F SUBD L004F ; drp count LE57C: 05 LSLD ; LE57D: 93 59 SUBD L0059 ; dynamic dwell LE57F: 2B 04 BMI LE585 ; LE581: D3 59 ADDD L0059 ; dynamic dwell LE583: DD 59 STD L0059 ; dynamic dwell ; ; Limit Dynamic Dwell to RefPer/8; 11 deg for V8 ; LE585: DC 4F LDD L004F ; drp count LE587: 04 LSRD ; LE588: 04 LSRD ; LE589: 04 LSRD ; LE58A: 93 59 SUBD L0059 ; dynamic dwell LE58C: 24 04 BCC LE592 ; ; ; Save new dynamic dwell (was > (RefPer/8)) ; LE58E: D3 59 ADDD L0059 ; dynamic dwell LE590: DD 59 STD L0059 ; dynamic dwell ;------------------------------- ; ; Done w/Dynamic Dwell, do Static Dwell ; ;------------------------------- LE592: DC 4F LDD L004F ; drp count LE594: DD 57 STD L0057 ; save as old drp cnt/RefPer for nxt pass LE596: 04 LSRD ; RefPer /= 2 LE597: 83 00 E5 SUBD #229 ; 3.49msec (15.26 usec/bit) LE59A: 24 05 BCC LE5A1 ; ; ; ; RefPer/2 <= 3.49msec (RefPer <= 7msec) ; ; 1). LT 7.0 ms: Static Dwell = 4.7 ms + (RefPer - 7ms) / 2 ; LE59C: C3 01 34 ADDD #308 ; LE59F: 20 10 BRA LE5B1 ; ; ; RefPer/2 > 3.49msec ; LE5A1: 04 LSRD ; LE5A2: 83 01 27 SUBD #295 ; LE5A5: 25 05 BCS LE5AC ; ; ; RefPer/2 > 4.5msec ; ; 2). GT 7.0 ms and LT 25 ms: ; Static Dwell = 4.7 ms + (RefPer - 7 ms) / 16 ; LE5A7: C3 01 7E ADDD #382 ; LE5AA: 20 05 BRA LE5B1 ; ; ; Make RefPer = (RefPer + 23.3 msec) / 4 ; ; 3). GT 25 ms: Static Dwell = 5.825 ms + (RefPer - 25 ms) / 46 ; LE5AC: C3 05 F7 ADDD #1527 ; LE5AF: 04 LSRD ; LE5B0: 04 LSRD ; LE5B1: DD 49 STD L0049 ; ; ; Check BatV dwell required ; LE5B3: 86 78 LDAA #120 ; 12.0v LE5B5: 90 40 SUBA L0040 ; Battery Volts, * 10, adc cnts LE5B7: 24 01 BCC LE5BA ; LE5B9: 4F CLRA ; ; ; BatV dwell comp ; ; A has BatV delta from 12.0V ; LE5BA: C6 04 LDAB #4 ; LE5BC: 3D MUL ; D = delta BatV * 4: 610usec/volt ; ; Add the BatV + Stat Dwell + Dyn Dwell together ; LE5BD: D3 49 ADDD L0049 ; LE5BF: D3 59 ADDD L0059 ; dynamic dwell LE5C1: DD 5B STD L005B ; dwell to ecu (15.26 usec bit) ; ; Limit dwell to ensure a 600usec firing period ; LE5C3: FC BC 00 LDD LBC00 ; ecm drp counter LE5C6: 83 00 27 SUBD #39 ; LE5C9: 93 5B SUBD L005B ; LE5CB: 24 04 BCC LE5D1 ; ; ; add back the original dwell minus the 600 usec for firing ; LE5CD: D3 5B ADDD L005B ; LE5CF: DD 5B STD L005B ; ;*================================================== ;* ;* Do SA lookups ;* ;*================================================== ; ; Lookup Main SA ; LE5D1: CE D0 38 LDX #$D038 ; Main SA tbl LE5D4: BD FA 84 JSR LFA84 ; get s/d map in A LE5D7: 16 TAB ; LE5D8: 96 1A LDAA L001A ; rpm scaled LE5DA: 81 D0 CMPA #208 ; max of 3600 rpm LE5DC: 23 02 BLS LE5E0 ; LE5DE: 86 D0 LDAA #208 ; LE5E0: BD FB B3 JSR LFBB3 ; 3d lkup, saved in L0049 ; ; Do slope SA ; LE5E3: D6 1B LDAB L001B ; rpm / 25 LE5E5: C1 90 CMPB #144 ; 3600 rpm, start of slope LE5E7: 23 15 BLS LE5FE ; LE5E9: F1 D0 0A CMPB LD00A ; 192: 4800 rpm LE5EC: 23 03 BLS LE5F1 ; bra if rpm <= 4800 LE5EE: F6 D0 0A LDAB LD00A ; use as max: 4800 rpm ; LE5F1: C0 90 SUBB #144 ; slope start rpm offset LE5F3: 58 LSLB ; now rpm / 12.5 LE5F4: B6 D0 0B LDAA LD00B ; 32, 3.5 deg/1K rpm LE5F7: 3D MUL ; LE5F8: 9B 49 ADDA L0049 ; add in from main SA lookup LE5FA: 24 02 BCC LE5FE ; LE5FC: 86 FF LDAA #255 ; ; LE5FE: 16 TAB ; LE5FF: 4F CLRA ; LE600: DD 4F STD L004F ; SA so Far ; ; Alternate between tcc locked & Coolant Comp SA ; LE602: 96 66 LDAA L0066 ; 160Hz rts counter LE604: 85 02 BITA #$02 ; b1, 0000 0010 LE606: 27 23 BEQ LE62B ; bra if b1 == 0 ; ; Do Locked TCC retard SA, Rpm vs. Vac ; LE608: B6 D0 28 LDAA LD028 ; 57, SA bias LE60B: F6 D0 07 LDAB LD007 ; option byte: 0010 0100 LE60E: 2B 17 BMI LE627 ; do not bra, tcc equiped ; LE610: D6 05 LDAB L0005 ; LE612: 2A 13 BPL LE627 ; bra if b7 == 0, tcc unlocked ; LE614: CE D1 45 LDX #$D145 ; LE617: BD FA 84 JSR LFA84 ; get vac into A LE61A: 44 LSRA ; LE61B: 16 TAB ; LE61C: 96 1B LDAA L001B ; rpm / 25 LE61E: 81 50 CMPA #80 ; 2000 rpm max LE620: 23 02 BLS LE624 ; LE622: 86 50 LDAA #80 ; LE624: BD FB B3 JSR LFBB3 ; 3d lkup ; LE627: 97 60 STAA L0060 ; tcc lcked retard SA LE629: 20 11 BRA LE63C ; skip coolant comp lkup>> ; ; Do Coolant & Vac SA compensation ; LE62B: CE D1 0E LDX #$D10E ; LE62E: BD FA 84 JSR LFA84 ; get vac into A LE631: 44 LSRA ; LE632: 16 TAB ; LE633: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LE635: 43 COMA ; 1's comp LE636: 44 LSRA ; deg C /= 2 LE637: BD FB B3 JSR LFBB3 ; 3d lkup LE63A: 97 5F STAA L005F ; Coolant & Vac SA ; ; Do EGR SA ; ; This will lag filter L005D to 0 | 255 depending upon L00DF, b1 ; b1 of L00DF is EGR active bit ; LE63C: DE 5D LDX L005D ; EGR filtered SA ; LE63E: F6 D0 1A LDAB LD01A ; filt coef, 12, egr off LE641: 96 DF LDAA L00DF ; status word LE643: 84 02 ANDA #$02 ; b1 LE645: 27 05 BEQ LE64C ; bra if b1 == 0, no egr ; LE647: F6 D0 1B LDAB LD01B ; filt coef, 8, egr on LE64A: 86 FF LDAA #255 ; ; LE64C: BD FB 40 JSR LFB40 ; Lag Filter LE64F: DD 5D STD L005D ; EGR filtered SA ; LE651: C3 00 80 ADDD #$80 ; round up A LE654: 36 PSHA ; save A ; LE655: F6 D0 19 LDAB LD019 ; 11, 3.8 deg SA max for egr LE658: 3D MUL ; LE659: 89 00 ADCA #0 ; (L005D * 11) / 256 ; LE65B: 97 4C STAA L004C ; added to SA ; ; ; Do PE SA ; ; The inverse of L005D is used to attack in PE/WOT SA ; LE65D: 4F CLRA ; pre-clr SA value LE65E: D6 09 LDAB L0009 ; status word LE660: 2A 0E BPL LE670 ; bra if b7 == 0 ; required knock has NOT occurred ; LE662: C5 60 BITB #$60 ; 0110 0000 LE664: 26 0A BNE LE670 ; bra if have ESC diag errors ; LE666: D6 0D LDAB L000D ; status word LE668: 2A 06 BPL LE670 ; bra if not in PE/WOT mode ; LE66A: CE D1 5D LDX #$D15D ; PE SA tbl LE66D: BD FB 6F JSR LFB6F ; get baro & do 2d lkup ; LE670: 33 PULB ; msb of L005D, used to attack LE671: 53 COMB ; 1's comp LE672: 3D MUL ; (~L005D * LkUp) / 256 LE673: 89 00 ADCA #0 ; LE675: 97 4E STAA L004E ; added to SA ; ; Do HiWay SA mode ; LE677: CE 00 00 LDX #$0000 ; used to clr L006E,F LE67A: 96 2E LDAA L002E ; vac LE67C: B1 D0 22 CMPA LD022 ; 240 LE67F: 24 16 BCC LE697 ; bra & clr L006E timer ; LE681: D6 21 LDAB L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LE683: F1 D2 28 CMPB LD228 ; 199, 20c LE686: 24 0F BCC LE697 ; bra & clr L006E timer ; LE688: D6 30 LDAB L0030 ; mph / 1, filtered LE68A: F1 D0 23 CMPB LD023 ; 52 mph LE68D: 25 08 BCS LE697 ; bra & clr L006E timer ; LE68F: DE 6E LDX L006E ; timer LE691: BC D0 24 CPX LD024 ; 4800 (4800 / 80 = 60 sec) LE694: 22 06 BHI LE69C ; go do SA lookup ; LE696: 08 INX ; advance timer LE697: DF 6E STX L006E ; save timer LE699: 4F CLRA ; pre-clr spark LE69A: 20 09 BRA LE6A5 ; go save 0 deg SA & continue ; LE69C: 44 LSRA ; VAC /= 2 LE69D: C6 30 LDAB #48 ; lower vac limit LE69F: CE D1 3F LDX #$D13F ; HiWay SA table LE6A2: BD FB 91 JSR LFB91 ; 2d lkup w/SBA ; LE6A5: 97 4D STAA L004D ; HiWay SA ; ; ; for transient fuel calc interval timer (for tps/map filters) ; LE6A7: D6 0D LDAB L000D ; status word ; LE6A9: 96 30 LDAA L0030 ; mph / 1, filtered LE6AB: B1 D0 29 CMPA LD029 ; 6 LE6AE: 22 0D BHI LE6BD ; bra if mph > 6 mph ; LE6B0: 96 25 LDAA L0025 ; s/d map, KPa = (N * 0.3125) + 20 ; LE6B2: C5 02 BITB #$02 ; LE6B4: 27 0E BEQ LE6C4 ; ; LE6B6: 90 2C SUBA L002C ; s/d map, slo filtered from L0025 LE6B8: B1 D0 2B CMPA LD02B ; 10, 3KPa LE6BB: 24 17 BCC LE6D4 ; bra if delta map > 3 Kpa ; ; here for no transient fuel calc interval timer (for tps/map filters) ; LE6BD: C4 FD ANDB #$FD ; clr b1, 1111 1101 LE6BF: D7 0D STAB L000D ; status word LE6C1: 4F CLRA ; clear for no SA LE6C2: 20 2D BRA LE6F1 ; ; ; ; LE6C4: 90 27 SUBA L0027 ; s/d map, two delayed from L0025 LE6C6: 25 F5 BCS LE6BD ; ; LE6C8: B1 D0 2A CMPA LD02A ; 32, 10 KPa LE6CB: 25 F0 BCS LE6BD ; ; ; ; Here to do transient fuel calc interval timer (for tps/map filters) ; LE6CD: CA 02 ORAB #$02 ; LE6CF: D7 0D STAB L000D ; status word LE6D1: 7F 00 9A CLR L009A ; transient fuel calc interval timer (for tps/map filters) ; LE6D4: 44 LSRA ; delta map /= 2 LE6D5: CE D1 CC LDX #$D1CC ; LE6D8: BD FB 95 JSR LFB95 ; 2d lkup LE6DB: 36 PSHA ; save result ; ; get map mult for trans SA ; LE6DC: 96 25 LDAA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LE6DE: CE D1 D5 LDX #$D1D5 ; LE6E1: BD FB 95 JSR LFB95 ; 2d lkup LE6E4: 33 PULB ; base trans sa LE6E5: 3D MUL ; LE6E6: 36 PSHA ; save result of calc ; ; ; get iat mult for trans SA ; LE6E7: 96 24 LDAA L0024 ; iat, 1k pu, inverse, adc cnts LE6E9: CE D2 00 LDX #$D200 ; LE6EC: BD FB 8C JSR LFB8C ; 2d lkup w/line cnt LE6EF: 33 PULB ; LE6F0: 3D MUL ; ; LE6F1: 97 4B STAA L004B ; trans SA ; ; Load additional ALDL SA value ; LE6F3: 5F CLRB ; LE6F4: 96 02 LDAA L0002 ; status word LE6F6: 85 20 BITA #$20 ; LE6F8: 27 03 BEQ LE6FD ; bra for no ALDL SA ; LE6FA: F6 D0 21 LDAB LD021 ; 6, 2.1 deg of aldl SA ; ; Add up the SA so far ; LE6FD: DE 4F LDX L004F ; SA so far LE6FF: 3A ABX ; from previous lookup ; LE700: D6 5F LDAB L005F ; Coolant & Vac SA LE702: 3A ABX ; LE703: D6 60 LDAB L0060 ; Tcc locked retard SA LE705: 3A ABX ; LE706: D6 4B LDAB L004B ; Transient SA LE708: 3A ABX ; LE709: D6 4C LDAB L004C ; Egr SA LE70B: 3A ABX ; LE70C: D6 4E LDAB L004E ; Pe SA LE70E: 3A ABX ; LE70F: D6 4D LDAB L004D ; Hiway SA LE711: 3A ABX ; LE712: D6 E7 LDAB L00E7 ; Choke SA LE714: 3A ABX ; ; LE715: DF 4F STX L004F ; SA ; ; Do idle correction SA ; LE717: CE D1 72 LDX #$D172 ; SA corr idle low LE71A: DC 02 LDD L0002 ; status word LE71C: 2A 30 BPL LE74E ; bra if not in idle ; LE71E: C5 08 BITB #$08 ; b3 of L0003 LE720: 26 2C BNE LE74E ; bra if b3 == 1 ; LE722: D6 CD LDAB L00CD ; LE724: 26 28 BNE LE74E ; ; LE726: 96 CF LDAA L00CF ; desired idle rpm / 12.5, final LE728: 90 1D SUBA L001D ; rpm / 12.5, filtered LE72A: 24 05 BCC LE731 ; bra if idle < desired ; LE72C: 40 NEGA ; delta from desired & true rpm LE72D: 5A DECB ; LE72E: CE D1 61 LDX #$D161 ; SA corr idle high ; LE731: 37 PSHB ; L00CD LE732: 3C PSHX ; tbl address LE733: 48 ASLA ; rpm/12.5 *= 2 LE734: 48 ASLA ; rpm/12.5 *= 2 ; rpm now / 3.125 ; LE735: BD FB 82 JSR LFB82 ; 2d lkup w/upr limt in 1st tbl entry ; ; LE738: 38 PULX ; get tbl addr LE739: 36 PSHA ; save result of lookup LE73A: C6 08 LDAB #8 ; offset to next tbl LE73C: 3A ABX ; add to tbl addr LE73D: 96 25 LDAA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LE73F: BD FB 82 JSR LFB82 ; 2d lkup w/upr limt in 1st tbl entry LE742: 33 PULB ; result of SA lookup LE743: 3D MUL ; LE744: 16 TAB ; (SA * Mult) / 256 ; LE745: 32 PULA ; L00CD LE746: 4D TSTA ; LE747: 27 01 BEQ LE74A ; ; LE749: 53 COMB ; 1's comp ; LE74A: D3 4F ADDD L004F ; SA LE74C: DD 4F STD L004F ; SA ; ; Some sort of delta tps% & delta rpm SA term ; ; ; LD02C: FCB 3 ; delta tps%, 1.2% ; LD02D: FCB 3 ; delta tps%, 1.2% (closing) ; LD02E: FCB 128 ; tps%, 50% ; LD02F: FCB 26 ; tps%, 10% (closing) ; LD030: FCB 9 ; ; LD031: FCB 7 ; (closing) LE74E: CE D0 2C LDX #$D02C ; indexed tbl address LE751: 96 43 LDAA L0043 ; tps%, from idle LE753: D6 44 LDAB L0044 ; tps%, one delayed from L0043 LE755: 10 SBA ; LE756: 24 04 BCC LE75C ; bra if opening throttle ; ; ; throttle is closing ; LE758: 40 NEGA ; 2's compl LE759: 08 INX ; LE75A: D6 43 LDAB L0043 ; tps%, from idle ; ; ; throttle is opening (| closing) ; LE75C: A1 00 CMPA 0,X ; delta tps% LE75E: 25 27 BCS LE787 ; bra if delta tps > 0,X (1.2%) ; LE760: E1 02 CMPB 2,X ; tps% LE762: 24 06 BCC LE76A ; bra if tps% < 2,X (10% | 50%) ; LE764: D6 03 LDAB L0003 ; status word LE766: CA 02 ORAB #$02 ; LE768: 20 25 BRA LE78F ; ; ; ; delta tps% < 1.2% & TPS% < 10% | 50% ; LE76A: 96 1B LDAA L001B ; rpm / 25 LE76C: 90 1C SUBA L001C ; rpm / 25 one delayed LE76E: 8B 08 ADDA #8 ; add in 200 rpm LE770: 2A 01 BPL LE773 ; bra if no undrflow LE772: 4F CLRA ; ; LE773: 81 10 CMPA #16 ; delta of 400 rpm, max val LE775: 23 02 BLS LE779 ; bra if <= 400 rpm LE777: 86 10 LDAA #16 ; load max ; LE779: B1 D0 33 CMPA LD033 ; 3, 75 rpm LE77C: 25 15 BCS LE793 ; bra if < 75 rpm, go do lkup ; LE77E: B1 D0 32 CMPA LD032 ; 13, 325 rpm LE781: 24 10 BCC LE793 ; bra if > 325 rpm, go do lkup ; LE783: DC 4F LDD L004F ; SA LE785: 20 31 BRA LE7B8 ; and skip next routine ; ; ; delta tps% > 0,X (1.2%) ; LE787: D6 03 LDAB L0003 ; status word LE789: C5 02 BITB #$02 ; b1 LE78B: 27 DD BEQ LE76A ; ; LE78D: C4 FD ANDB #$FD ; ; ; delta tps% < 0,x (1.2%) & tps% > 10% | 50% ; LE78F: D7 03 STAB L0003 ; status word LE791: A6 04 LDAA 4,X ; 7 | 9 ; ; ; do lookup and get indexed mult ; LE793: 36 PSHA ; delta rpm/25 value LE794: 96 1B LDAA L001B ; rpm / 25 LE796: C6 10 LDAB #16 ; lwr lim of 400 rpm LE798: CE D1 F7 LDX #$D1F7 ; tbl addr LE79B: BD FB 83 JSR LFB83 ; 2d lkup w/upr limt in 1st tbl entry, lwr limt in B ; LE79E: 33 PULB ; delta rpm/25 value LE79F: CE D1 E6 LDX #$D1E6 ; LE7A2: 3A ABX ; add in delta rpm/25 offset LE7A3: E6 00 LDAB 0,X ; get mult value LE7A5: 2A 01 BPL LE7A8 ; bra if b7 == 0 LE7A7: 50 NEGB ; ; LE7A8: 3D MUL ; AB = A * B LE7A9: 05 LSLD ; mult result by 4 LE7AA: 05 LSLD ; LE7AB: 16 TAB ; LE7AC: 4F CLRA ; LE7AD: 6D 00 TST 0,X ; tst mult term LE7AF: 2A 02 BPL LE7B3 ; LE7B1: 50 NEGB ; LE7B2: 4A DECA ; ; LE7B3: FD 04 51 STD L0451 ; HU ram ; LE7B6: D3 4F ADDD L004F ; SA ; ; sub off SA bias's ; LE7B8: F0 D0 0D SUBB LD00D ; 57, 20 deg, coolant comp bias LE7BB: 82 00 SBCA #0 ; LE7BD: F0 D0 0E SUBB LD00E ; 57, 20 deg, tcc locked bias LE7C0: 82 00 SBCA #0 ; LE7C2: F0 D0 28 SUBB LD028 ; 57, 20 deg, main SA bias LE7C5: 82 00 SBCA #0 ; LE7C7: DD 49 STD L0049 ; SA ; ; ; Check for HU's SA ; LE7C9: 96 00 LDAA L0000 ; status word LE7CB: 85 02 BITA #$02 ; LE7CD: 27 03 BEQ LE7D2 ; LE7CF: BD 58 0C JSR L580C ; HU ; ; Sub off Initial SA (base) ; LE7D2: DC 49 LDD L0049 ; SA LE7D4: F0 D0 09 SUBB LD009 ; 0, initial SA (base timing) LE7D7: 82 00 SBCA #0 ; LE7D9: DD 61 STD L0061 ; SA ; ; Test for max SA allowed ; LE7DB: FC D0 14 LDD LD014 ; max SA, 40.1deg LE7DE: 93 61 SUBD L0061 ; SA LE7E0: 2E 04 BGT LE7E6 ; LE7E2: D3 61 ADDD L0061 ; LE7E4: DD 61 STD L0061 ; SA ; ; Knock retard ; LE7E6: FC BC 0A LDD LBC0A ; Knock counter (PA3) LE7E9: DD 4A STD L004A ; tmp PA3 cnts LE7EB: 93 69 SUBD L0069 ; any new knocks? LE7ED: 4D TSTA ; LE7EE: 27 02 BEQ LE7F2 ; LE7F0: C6 FF LDAB #255 ; rolled to A, set MAX cnt's ; LE7F2: D7 4D STAB L004D ; delta knock cnts (new ones) LE7F4: DE EB LDX L00EB ; eng run time LE7F6: BC D4 86 CPX LD486 ; 240 sec's LE7F9: 23 0B BLS LE806 ; bra if eng run < 240 sec ; LE7FB: F1 D4 90 CMPB LD490 ; 2 cnts LE7FE: 23 09 BLS LE809 ; bra if new cnts <= 2 ; LE800: 96 09 LDAA L0009 ; status word LE802: 8A 80 ORAA #$80 ; flag that required knock has occurred LE804: 97 09 STAA L0009 ; status word ; LE806: 7F 00 90 CLR L0090 ; knock test timer, ESC 43 ; LE809: DE 4A LDX L004A ; tmp PA3 cnts LE80B: DF 69 STX L0069 ; perm PA3 cnts ; ; Check Knock Retard quals ; LE80D: 4F CLRA ; LE80E: D6 21 LDAB L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LE810: F1 D0 36 CMPB LD036 ; 50c LE813: 24 7C BCC LE891 ; ; LE815: 96 30 LDAA L0030 ; mph / 1, filtered LE817: B1 D0 34 CMPA LD034 ; 10 mph LE81A: 24 07 BCC LE823 ; ; LE81C: 96 1D LDAA L001D ; rpm / 12.5, filtered LE81E: B1 D0 35 CMPA LD035 ; 1000 rpm LE821: 25 7B BCS LE89E ; ; LE823: 96 40 LDAA L0040 ; Battery Volts, * 10, adc cnts LE825: 81 5A CMPA #90 ; 9.0V LE827: 25 06 BCS LE82F ; bra if BatV < 9v ; LE829: 96 09 LDAA L0009 ; status word LE82B: 85 60 BITA #$60 ; LE82D: 27 04 BEQ LE833 ; ; ; ; Low BatV, use max knock's ; LE82F: 86 FF LDAA #255 ; max LE831: 97 4D STAA L004D ; delta knock cnts (new ones) ; ; Lookup IAT knock retard SA multiplier ; LE833: CE D1 9F LDX #$D19F ; LE836: 96 24 LDAA L0024 ; iat, 1k pu, inverse, adc cnts LE838: 43 COMA ; 1's comp LE839: 44 LSRA ; IAT /= 2 LE83A: BD FB 95 JSR LFB95 ; 2d lkup LE83D: 97 4E STAA L004E ; ; ; Decide whether PE or Not ; LE83F: D6 0D LDAB L000D ; status word LE841: 2A 0D BPL LE850 ; bra if not in PE/WOT mode ; ; Do PE Knock tbls ; LE843: CE D1 B6 LDX #$D1B6 ; LE846: 3C PSHX ; LE847: CE D1 93 LDX #$D193 ; knck sa mul tbl LE84A: 96 1B LDAA L001B ; rpm / 25 LE84C: C6 10 LDAB #16 ; lwr limit for lkup LE84E: 20 13 BRA LE863 ; ; ; Do non-PE Knock tbls ; LE850: 86 FF LDAA #255 ; LE852: D6 08 LDAB L0008 ; status word LE854: C5 C0 BITB #$C0 ; LE856: 26 02 BNE LE85A ; ; LE858: 96 2E LDAA L002E ; vac ; LE85A: C6 40 LDAB #64 ; lwr limit for lkup LE85C: CE D1 BC LDX #$D1BC ; LE85F: 3C PSHX ; LE860: CE D1 99 LDX #$D199 ; ; ; lkup & calc Knock SA Multiplier ; LE863: 44 LSRA ; vac | rpm LE864: DD 4F STD L004F ; tmp storage, lkup idx & lwr lim LE866: BD FB 83 JSR LFB83 ; 2d lkup w/upr limt in 1st tbl entry, lwr limt in B LE869: D6 4E LDAB L004E ; IAT knock retard SA multiplier LE86B: 3D MUL ; LE86C: 05 LSLD ; LE86D: 24 02 BCC LE871 ; LE86F: 86 FF LDAA #255 ; ; LE871: 97 4E STAA L004E ; max SA knock retard allowed ; ; Do Final Knock Attack SA Calc ; LE873: 38 PULX ; LE874: DC 4F LDD L004F ; tmp storage LE876: BD FB 83 JSR LFB83 ; 2d lkup w/upr limt in 1st tbl entry, lwr limt in B LE879: D6 4D LDAB L004D ; delta knock cnts (new ones) LE87B: F1 D0 37 CMPB LD037 ; 2, min cnts to do retard LE87E: 24 01 BCC LE881 ; LE880: 5F CLRB ; ; LE881: 3D MUL ; LE882: 05 LSLD ; LE883: 25 04 BCS LE889 ; ; LE885: 9B 6D ADDA L006D ; knock retard SA LE887: 24 02 BCC LE88B ; ; LE889: 86 FF LDAA #255 ; LE88B: 91 4E CMPA L004E ; max SA knock retard allowed LE88D: 23 02 BLS LE891 ; ; LE88F: 96 4E LDAA L004E ; max SA knock retard allowed ; ; ; Sub Knock SA from total SA ; LE891: 97 6D STAA L006D ; knock retard SA LE893: 44 LSRA ; sa /= 2 LE894: 97 49 STAA L0049 ; tmp save LE896: DC 61 LDD L0061 ; get final SA LE898: D0 49 SUBB L0049 ; sub out knock retard LE89A: 82 00 SBCA #0 ; rnd dwn LE89C: DD 61 STD L0061 ; and Save ; ; ; Lag Filter val in L008C ; LE89E: B6 D4 3B LDAA LD43B ; diag mask 2, 1011 1001 LE8A1: 85 20 BITA #$20 ; 0010 0000 LE8A3: 27 2B BEQ LE8D0 ; do not bra ; LE8A5: F6 D4 6E LDAB LD46E ; 32, filt coef LE8A8: DE 8C LDX L008C ; SA term LE8AA: 96 0B LDAA L000B ; LE8AC: 84 04 ANDA #$04 ; b2 LE8AE: 27 05 BEQ LE8B5 ; ; LE8B0: 86 FF LDAA #255 ; LE8B2: F6 D4 6D LDAB LD46D ; 128, filt coef ; LE8B5: BD FB 40 JSR LFB40 ; Lag Filter LE8B8: DD 8C STD L008C ; SA term LE8BA: CE 00 8C LDX #$008C ; SA term addr LE8BD: B6 D4 6C LDAA LD46C ; 4.2deg LE8C0: BD FC 05 JSR LFC05 ; AB = (A x *X) / 256 LE8C3: 58 LSLB ; LE8C4: 89 00 ADCA #0 ; rndup A ; ; Now sub L008C from final SA ; LE8C6: 97 49 STAA L0049 ; LE8C8: DC 61 LDD L0061 ; final SA LE8CA: D0 49 SUBB L0049 ; LE8CC: 82 00 SBCA #0 ; LE8CE: DD 61 STD L0061 ; final SA ; ; Check & adjust for Minimum SA ; LE8D0: FC D0 16 LDD LD016 ; min SA, -3.5deg ($FFF5) LE8D3: 93 61 SUBD L0061 ; LE8D5: 2D 04 BLT LE8DB ; LE8D7: D3 61 ADDD L0061 ; LE8D9: DD 61 STD L0061 ; Final SA ; ; Add SA to create knock, if required ; LE8DB: 96 90 LDAA L0090 ; knock test timer, ESC 43 LE8DD: 27 1B BEQ LE8FA ; ; LE8DF: DE 61 LDX L0061 ; final SA LE8E1: F6 D4 8E LDAB LD48E ; added SA for knock test, 14 deg LE8E4: 96 09 LDAA L0009 ; status word LE8E6: 85 10 BITA #$10 ; LE8E8: 27 03 BEQ LE8ED ; ; LE8EA: F6 D4 8F LDAB LD48F ; added SA for knock test, 20 deg LE8ED: 3A ABX ; LE8EE: BC D0 14 CPX LD014 ; max SA, 40.1deg LE8F1: 23 05 BLS LE8F8 ; ; LE8F3: 7F 00 90 CLR L0090 ; clr knock test timer LE8F6: DE 61 LDX L0061 ; LE8F8: DF 61 STX L0061 ; Final SA ; ; ; test if SA is adv | rtd ; LE8FA: DC 61 LDD L0061 ; Final SA LE8FC: 2B 08 BMI LE906 ; ; LE8FE: 96 01 LDAA L0001 ; status word LE900: 84 FE ANDA #$FE ; LE902: 97 01 STAA L0001 ; status word LE904: 20 07 BRA LE90D ; ; LE906: 96 01 LDAA L0001 ; status word LE908: 8A 01 ORAA #1 ; LE90A: 97 01 STAA L0001 ; status word LE90C: 50 NEGB ; ; LE90D: 96 63 LDAA L0063 ; drp info LE90F: 7D 00 64 TST L0064 ; LE912: 2A 01 BPL LE915 ; LE914: 4C INCA ; ; LE915: 3D MUL ; LE916: 4C INCA ; ; ; ; check HU ; LE917: D6 00 LDAB L0000 ; status word LE919: C5 02 BITB #$02 ; LE91B: 27 03 BEQ LE920 ; LE91D: BD 58 12 JSR L5812 ; ; ; ; Convert SA to time based & program ecu ; LE920: CE 00 18 LDX #$0018 ; DRP cnt's LE923: BD FC 05 JSR LFC05 ; AB = (A x *X) / 256 LE926: DD 4E STD L004E ; ; ; Lookup SA latency corretion ; LE928: 96 1B LDAA L001B ; rpm / 25 LE92A: CE D1 A8 LDX #$D1A8 ; LE92D: BD FB 82 JSR LFB82 ; 2d lkup w/upr limt in 1st tbl entry LE930: 97 4C STAA L004C ; ; ; ; Finalize SA value for ecu programming ; LE932: D6 01 LDAB L0001 ; status word LE934: C5 01 BITB #$01 ; LE936: 26 06 BNE LE93E ; LE938: 4F CLRA ; LE939: 5F CLRB ; LE93A: 93 4E SUBD L004E ; LE93C: 20 02 BRA LE940 ; LE93E: DC 4E LDD L004E ; LE940: D0 4C SUBB L004C ; LE942: 82 00 SBCA #0 ; LE944: DD 49 STD L0049 ; LE946: 4F CLRA ; LE947: 5F CLRB ; LE948: B3 BC 00 SUBD LBC00 ; ecm drp counter LE94B: 04 LSRD ; LE94C: 04 LSRD ; LE94D: 04 LSRD ; LE94E: 04 LSRD ; LE94F: 8A F0 ORAA #$F0 ; ; ; Program ecu SA counters ; LE951: F3 BC 20 ADDD LBC20 ; LE954: 93 49 SUBD L0049 ; LE956: 2B 04 BMI LE95C ; ; LE958: D3 49 ADDD L0049 ; LE95A: DD 49 STD L0049 ; ; LE95C: DC 49 LDD L0049 ; LE95E: B3 BC 20 SUBD LBC20 ; LE961: BD FD 19 JSR LFD19 ; delay, rts only LE964: FD BC 28 STD LBC28 ; LE967: BD FD 19 JSR LFD19 ; delay, rts only LE96A: F3 BC 1C ADDD LBC1C ; LE96D: 93 5B SUBD L005B ; LE96F: 01 NOP ; LE970: DE 5B LDX L005B ; LE972: FD BC 26 STD LBC26 ; LE975: BD FD 19 JSR LFD19 ; delay, rts only LE978: FF BC 1C STX LBC1C ; LE97B: BD FD 19 JSR LFD19 ; delay, rts only LE97E: DC 49 LDD L0049 ; LE980: FD BC 36 STD LBC36 ; ; ; Do EST diag test ; LE983: 96 00 LDAA L0000 ; status word LE985: 85 08 BITA #$08 ; LE987: 27 6D BEQ LE9F6 ; ; LE989: D6 02 LDAB L0002 ; status word LE98B: C5 04 BITB #$04 ; LE98D: 27 4D BEQ LE9DC ; LE98F: FE BC 06 LDX LBC06 ; EST Circuit LE992: DF 49 STX L0049 ; LE994: F6 D4 3B LDAB LD43B ; diag mask 2, 1011 1001 LE997: C5 01 BITB #$01 ; LE999: 27 43 BEQ LE9DE ; LE99B: F6 08 81 LDAB L0881 ; MCU1 I/O LE99E: C5 20 BITB #$20 ; LE9A0: 27 2C BEQ LE9CE ; LE9A2: D6 01 LDAB L0001 ; status word LE9A4: C5 40 BITB #$40 ; LE9A6: 26 41 BNE LE9E9 ; LE9A8: 96 00 LDAA L0000 ; status word LE9AA: 2B 26 BMI LE9D2 ; ; LE9AC: 36 PSHA ; LE9AD: DC 49 LDD L0049 ; LE9AF: 93 93 SUBD L0093 ; EST circuit data LE9B1: 4D TSTA ; LE9B2: 32 PULA ; LE9B3: 26 0D BNE LE9C2 ; LE9B5: F1 D4 83 CMPB LD483 ; 0 LE9B8: 22 08 BHI LE9C2 ; LE9BA: 85 40 BITA #$40 ; LE9BC: 26 20 BNE LE9DE ; LE9BE: 8A 40 ORAA #64 ; LE9C0: 20 0C BRA LE9CE ; LE9C2: D6 95 LDAB L0095 ; err 42A cnt'r LE9C4: F1 D4 84 CMPB LD484 ; 4, Num of EST faults for 42A LE9C7: 22 09 BHI LE9D2 ; LE9C9: 7C 00 95 INC L0095 ; err 42A cnt'r LE9CC: 84 BF ANDA #$BF ; LE9CE: DF 93 STX L0093 ; EST circuit data LE9D0: 20 08 BRA LE9DA ; ; ; LE9D2: 8A 80 ORAA #$80 ; LE9D4: D6 13 LDAB L0013 ; error flag 2 LE9D6: CA 01 ORAB #$01 ; LE9D8: D7 13 STAB L0013 ; error flag 2 ; LE9DA: 97 00 STAA L0000 ; status word LE9DC: 20 4E BRA LEA2C ; LE9DE: D6 01 LDAB L0001 ; status word LE9E0: CA 40 ORAB #64 ; LE9E2: D7 01 STAB L0001 ; status word LE9E4: 7F 00 95 CLR L0095 ; err 42A cnt'r LE9E7: DF 93 STX L0093 ; EST circuit data LE9E9: 84 F7 ANDA #$F7 ; LE9EB: 97 00 STAA L0000 ; status word LE9ED: FC BC 2C LDD LBC2C ; LE9F0: BD FD 19 JSR LFD19 ; delay, rts only LE9F3: FD BC 24 STD LBC24 ; LE9F6: 96 13 LDAA L0013 ; error flag 2 LE9F8: 8A 01 ORAA #1 ; LE9FA: D6 DE LDAB L00DE ; status word LE9FC: 2A 09 BPL LEA07 ; LE9FE: 97 13 STAA L0013 ; error flag 2 LEA00: FC BC 3C LDD LBC3C ; PWM control register LEA03: C4 EF ANDB #$EF ; LEA05: 20 05 BRA LEA0C ; LEA07: FC BC 3C LDD LBC3C ; PWM control register LEA0A: CA 10 ORAB #16 ; LEA0C: BD FD 19 JSR LFD19 ; delay, rts only LEA0F: FD BC 3C STD LBC3C ; PWM control register LEA12: 20 18 BRA LEA2C ; LEA14: 86 04 LDAA #4 ; LEA16: BD FC 4D JSR LFC4D ; LEA19: CE FF FF LDX #$FFFF ; LEA1C: DF 18 STX L0018 ; drp count LEA1E: 96 DE LDAA L00DE ; status word LEA20: 85 08 BITA #$08 ; LEA22: 26 03 BNE LEA27 ; LEA24: 08 INX ; LEA25: DF EB STX L00EB ; eng run time LEA27: 86 EF LDAA #239 ; LEA29: BD FC 42 JSR LFC42 ; LEA2C: 96 02 LDAA L0002 ; status word LEA2E: 84 FB ANDA #$FB ; LEA30: 97 02 STAA L0002 ; status word LEA32: 7E E3 D4 JMP LE3D4 ; return to rts loop ;----------------------------------------------- ; ; End of Minor Spark Loop ; ;----------------------------------------------- ;*================================================== ;* ;* Real Time Service Routine 0 ;* ;*================================================== LEA35: 86 02 LDAA #$02 ; BatV channel LEA37: 5F CLRB ; wait for data LEA38: BD FC 1A JSR LFC1A ; ADC routine LEA3B: 36 PSHA ; ; LEA3C: CC 00 01 LDD #$0001 ; PumpV channel & return immed LEA3F: BD FC 1A JSR LFC1A ; ADC routine ; LEA42: 32 PULA ; BatV LEA43: 36 PSHA ; BatV LEA44: D6 00 LDAB L0000 ; status word LEA46: 81 5A CMPA #90 ; 9.0v LEA48: 24 4A BCC LEA94 ; bra if BatV >= 9v LEA4A: 81 28 CMPA #40 ; 4.0v LEA4C: 24 7B BCC LEAC9 ; bra if BatV >= 4v ; LEA4E: 96 40 LDAA L0040 ; Battery Volts, * 10, adc cnts LEA50: 81 28 CMPA #40 ; LEA52: 24 75 BCC LEAC9 ; bra if BatV >= 4v ; ; ; BatV < 4.0v ; LEA54: 4F CLRA ; LEA55: 97 EB STAA L00EB ; eng run time, msb LEA57: 97 EC STAA L00EC ; eng run time, lsb LEA59: 8A 04 ORAA #4 ; LEA5B: 97 DE STAA L00DE ; status word LEA5D: 96 01 LDAA L0001 ; status word LEA5F: 84 7F ANDA #$7F ; Engine is not Running LEA61: 97 01 STAA L0001 ; status word LEA63: 96 DF LDAA L00DF ; status word LEA65: 84 05 ANDA #$05 ; LEA67: C4 DF ANDB #$DF ; LEA69: C5 10 BITB #$10 ; engine shutdown in effect LEA6B: 26 23 BNE LEA90 ; bra if true ; LEA6D: 85 01 BITA #$01 ; LEA6F: 27 08 BEQ LEA79 ; ; LEA71: 96 10 LDAA L0010 ; status word LEA73: 84 FC ANDA #$FC ; LEA75: 97 10 STAA L0010 ; status word LEA77: CA 20 ORAB #$20 ; LEA79: CA 10 ORAB #$10 ; engine shutdown LEA7B: D7 00 STAB L0000 ; status word ; ; ; LEA7D: 96 24 LDAA L0024 ; iat, 1k pu, inverse, adc cnts LEA7F: F6 D0 05 LDAB LD005 ; option byte: 0010 0011 LEA82: C5 20 BITB #$20 ; tst b5 LEA84: 26 02 BNE LEA88 ; b5 == 1, do bra LEA86: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts ; LEA88: B1 D2 5D CMPA LD25D ; cool/iat threshold, 40c LEA8B: 86 04 LDAA #4 ; LEA8D: 25 01 BCS LEA90 ; LEA8F: 4F CLRA ; ; LEA90: 97 DF STAA L00DF ; status word LEA92: 20 35 BRA LEAC9 ; ; ; BatV >= 9.0v ; LEA94: C5 10 BITB #$10 ; LEA96: 27 05 BEQ LEA9D ; LEA98: FE BC 06 LDX LBC06 ; EST Circuit LEA9B: DF 93 STX L0093 ; EST circuit data LEA9D: 96 DF LDAA L00DF ; status word LEA9F: 85 40 BITA #$40 ; LEAA1: 26 1A BNE LEABD ; LEAA3: 96 56 LDAA L0056 ; LEAA5: B1 D4 97 CMPA LD497 ; LEAA8: 23 0B BLS LEAB5 ; LEAAA: 96 E3 LDAA L00E3 ; LEAAC: 8A 04 ORAA #4 ; LEAAE: 97 E3 STAA L00E3 ; LEAB0: BD FD 1A JSR LFD1A ; Do CkSum on Error Flags LEAB3: 97 EA STAA L00EA ; error flag cksum LEAB5: 7C 00 56 INC L0056 ; LEAB8: 26 03 BNE LEABD ; LEABA: 7A 00 56 DEC L0056 ; LEABD: 96 DE LDAA L00DE ; status word LEABF: 84 FB ANDA #$FB ; LEAC1: 97 DE STAA L00DE ; status word LEAC3: C4 EF ANDB #$EF ; LEAC5: C4 DF ANDB #$DF ; LEAC7: D7 00 STAB L0000 ; status word ; ; BatV >= 4v & < 9v ; LEAC9: 32 PULA ; BatV from ADC LEACA: 97 40 STAA L0040 ; Battery Volts, * 10, adc cnts LEACC: BD FC 27 JSR LFC27 ; get val from adc, Pump Volts LEACF: 97 41 STAA L0041 ; save PmpV adc val ; LEAD1: D6 01 LDAB L0001 ; status word LEAD3: 2A 10 BPL LEAE5 ; Engine is not Running LEAD5: CA 08 ORAB #$08 ; LEAD7: 96 DF LDAA L00DF ; status word LEAD9: 8A 01 ORAA #$01 ; LEADB: 97 DF STAA L00DF ; status word LEADD: 20 19 BRA LEAF8 ; ; ; eng off time ; LEADF: 96 DE LDAA L00DE ; status word LEAE1: 84 FB ANDA #$FB ; LEAE3: 97 DE STAA L00DE ; status word LEAE5: 4F CLRA ; LEAE6: C5 08 BITB #$08 ; LEAE8: 26 09 BNE LEAF3 ; LEAEA: 96 52 LDAA L0052 ; LEAEC: 27 08 BEQ LEAF6 ; LEAEE: B1 D0 13 CMPA LD013 ; 40, eng off time, (4 sec's) LEAF1: 22 EC BHI LEADF ; ; LEAF3: 4C INCA ; LEAF4: 97 52 STAA L0052 ; LEAF6: C4 F7 ANDB #$F7 ; LEAF8: D7 01 STAB L0001 ; status word LEAFA: 39 RTS ; ;*================================================== ;* ;* Real Time Service Routine 1 ;* ;*================================================== LEAFB: BD FD 27 JSR LFD27 ; Read Coolant Temp & do Diag Tests LEAFE: BD FC 79 JSR LFC79 ; Psuedo Baro Read LEB01: 39 RTS ; ;*================================================== ;* ;* Real Time Service Routine 2 ;* ;* Ck Diag Mode Status ;* ;* Normal mode (R>=20K ohm) ;* ALDL mode (R==10K ohm) ;* Backup mode (R==3.9 K ohm) ;* Field Service (R<=500 ohm) ;*================================================== LEB02: 86 0C LDAA #12 ; aldl channel LEB04: 5F CLRB ; wait for data LEB05: BD FC 1A JSR LFC1A ; ADC routine ; LEB08: D6 02 LDAB L0002 ; status word LEB0A: C4 C7 ANDB #$C7 ; clr b5, b4 & b3: 1100 0111 ; LEB0C: 81 28 CMPA #40 ; 800 mv LEB0E: 25 0C BCS LEB1C ; bra if diag sw lt 800 mvdc ; LEB10: 81 64 CMPA #100 ; 2.0 vdc LEB12: 25 0C BCS LEB20 ; bra if diag sw lt 2 vdc ; LEB14: 81 99 CMPA #153 ; 3.06 vdc LEB16: 24 0A BCC LEB22 ; bra if diag sw gt 3.06 vdc ; LEB18: CA 20 ORAB #$20 ; set b5, diag sw gt 2 vdc & lt 3.06 vdc LEB1A: 20 06 BRA LEB22 ; backup mode ; LEB1C: CA 10 ORAB #$10 ; set b4, diag sw lt 800 mvdc, shorted mode LEB1E: 20 02 BRA LEB22 ; ; LEB20: CA 08 ORAB #$08 ; set b3, diag sw lt 2 vdc, backup mode ; LEB22: D7 02 STAB L0002 ; flag wd, diag sw gt 3.06 vdc LEB24: 7E FD 84 JMP LFD84 ; init iat ;*================================================== ;* ;* Real Time Service Routine 3 ;* ;* Do EGR active quals ;*================================================== LEB27: CE D2 0C LDX #$D20C ; indexed table ; ; Do coolant qual ; LEB2A: A6 01 LDAA 1,X ; 35c LEB2C: D6 05 LDAB L0005 ; LEB2E: C5 04 BITB #$04 ; tst b2 LEB30: 27 02 BEQ LEB34 ; ; LEB32: A6 00 LDAA 0,X ; 30c LEB34: 91 21 CMPA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LEB36: 22 04 BHI LEB3C ; bra if coolant > threshold, inv ; LEB38: C4 FB ANDB #$FB ; 1111 1011, clr b2 of L0005 LEB3A: 20 2E BRA LEB6A ; ; ; ; Do tps qual ; LEB3C: CA 04 ORAB #$04 ; set b2, coolant ual passed ; LEB3E: 96 08 LDAA L0008 ; status word LEB40: 85 24 BITA #$24 ; tps ok bits LEB42: 26 12 BNE LEB56 ; bra if tps prob ; LEB44: A6 05 LDAA 5,X ; 9, 3.5% tps LEB46: C5 20 BITB #$20 ; tst b5 of L0005 LEB48: 27 02 BEQ LEB4C ; bra if == 0 ; LEB4A: A6 04 LDAA 4,X ; 5, 2% tps LEB4C: 91 43 CMPA L0043 ; tps%, from idle LEB4E: 25 04 BCS LEB54 ; ; LEB50: C4 DF ANDB #$DF ; 1101 1111, clr b5 of L0005 LEB52: 20 16 BRA LEB6A ; ; ; ; Do mph qual ; LEB54: CA 20 ORAB #$20 ; set b5, tps qual passed ; LEB56: 96 DE LDAA L00DE ; status word LEB58: 85 40 BITA #$40 ; tst b6, vss ok LEB5A: 26 12 BNE LEB6E ; bra if == 1 ; LEB5C: A6 03 LDAA 3,X ; 0 LEB5E: C5 40 BITB #$40 ; tst b6 of L0005 LEB60: 27 02 BEQ LEB64 ; bra if == 0 ; LEB62: A6 02 LDAA 2,X ; 0 LEB64: 91 30 CMPA L0030 ; mph / 1, filtered LEB66: 23 06 BLS LEB6E ; ; LEB68: C4 BF ANDB #$BF ; 1011 1111, clr b6 of L0005 ; LEB6A: C4 FE ANDB #$FE ; 1111 1110, clr b0 of L0005 LEB6C: 20 27 BRA LEB95 ; ; ; ; Do map qual ; LEB6E: CA 40 ORAB #40 ; set b6, map qual passed ; LEB70: A6 07 LDAA 7,X ; 28 Kpa LEB72: C5 10 BITB #$10 ; tst b4 of L0005 LEB74: 27 02 BEQ LEB78 ; ; LEB76: A6 06 LDAA 6,X ; 25 Kpa LEB78: 91 25 CMPA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LEB7A: 23 04 BLS LEB80 ; ; LEB7C: C4 EF ANDB #$EF ; LEB7E: 20 EA BRA LEB6A ; ; ; LEB80: CA 10 ORAB #$10 ; set b4, map qual passed ; LEB82: A6 08 LDAA 8,X ; 50% tps LEB84: 91 43 CMPA L0043 ; tps%, from idle LEB86: 25 E2 BCS LEB6A ; ; LEB88: C5 01 BITB #$01 ; b0 of L0005 LEB8A: 27 01 BEQ LEB8D ; ; LEB8C: 08 INX ; from 9,X to 10,X LEB8D: 96 2E LDAA L002E ; vac LEB8F: A1 09 CMPA 9,X ; 76% | 80% tps LEB91: 22 D7 BHI LEB6A ; ; ; LEB93: CA 01 ORAB #$01 ; final tps qual passed ; LEB95: D7 05 STAB L0005 ; ; LEB97: 96 DF LDAA L00DF ; status word LEB99: 84 FD ANDA #$FD ; 1111 1101, clr b2 LEB9B: 85 20 BITA #$20 ; tst b5 LEB9D: 26 05 BNE LEBA4 ; bra if b5 == 1 ; LEB9F: 57 ASRB ; tst b0 LEBA0: 24 02 BCC LEBA4 ; bra if b0 == 0 ; LEBA2: 8A 02 ORAA #$02 ; set b1, EGR active bit ; LEBA4: 97 DF STAA L00DF ; status word LEBA6: 39 RTS ; ;----------------------------------------------- ; ; SubRoutine ; ; Check for BatV overvolts ; ;----------------------------------------------- LEBA7: D6 E0 LDAB L00E0 ; status word LEBA9: 96 40 LDAA L0040 ; Battery Volts, * 10, adc cnts LEBAB: 81 AB CMPA #171 ; 17.1v LEBAD: 23 06 BLS LEBB5 ; bra if batV <= 17.1v ; LEBAF: C4 DF ANDB #$DF ; b6, shut down MCU output LEBB1: C4 FB ANDB #$FB ; IAC enable bit, 1111 1011 LEBB3: 20 74 BRA LEC29 ; shut down IAC ; LEBB5: 96 14 LDAA L0014 ; error flag 3 LEBB7: 85 10 BITA #$10 ; LEBB9: 26 17 BNE LEBD2 ; ; LEBBB: 96 00 LDAA L0000 ; status word LEBBD: 85 10 BITA #$10 ; engine shutdown LEBBF: 26 26 BNE LEBE7 ; ; LEBC1: 96 01 LDAA L0001 ; status word LEBC3: 2A 17 BPL LEBDC ; Engine is not Running LEBC5: 96 40 LDAA L0040 ; Battery Volts, * 10, adc cnts LEBC7: B1 D5 1F CMPA LD51F ; 8.7 volt LEBCA: 22 0A BHI LEBD6 ; bra if BatV > 8.7v ; ; ; flag an IAC undervolt condition ; LEBCC: 96 0E LDAA L000E ; status word, a/f mode LEBCE: 8A 04 ORAA #4 ; LEBD0: 97 0E STAA L000E ; status word, a/f mode ; LEBD2: CA 20 ORAB #$20 ; LEBD4: 20 DB BRA LEBB1 ; ; ; ; BatV ok ; LEBD6: 96 0E LDAA L000E ; status word, a/f mode LEBD8: 84 FB ANDA #$FB ; LEBDA: 97 0E STAA L000E ; status word, a/f mode ; LEBDC: 96 01 LDAA L0001 ; status word LEBDE: 2B 07 BMI LEBE7 ; Engine is Running LEBE0: 96 02 LDAA L0002 ; status word LEBE2: 0D SEC ; LEBE3: 85 10 BITA #$10 ; LEBE5: 26 06 BNE LEBED ; ; LEBE7: 96 C7 LDAA L00C7 ; IAC steps, A/C, park position LEBE9: 90 FD SUBA L00FD ; Current IAC position, steps LEBEB: 27 E5 BEQ LEBD2 ; ; LEBED: C5 20 BITB #$20 ; LEBEF: 27 E1 BEQ LEBD2 ; LEBF1: 24 0B BCC LEBFE ; ; LEBF3: C4 FA ANDB #$FA ; LEBF5: 96 FD LDAA L00FD ; Current IAC position, steps LEBF7: 27 19 BEQ LEC12 ; ; LEBF9: 4A DECA ; LEBFA: 97 FD STAA L00FD ; Current IAC position, steps LEBFC: 20 14 BRA LEC12 ; ; LEBFE: CA 01 ORAB #1 ; LEC00: 96 FD LDAA L00FD ; Current IAC position, steps LEC02: B1 D5 32 CMPA LD532 ; 191 LEC05: 24 CB BCC LEBD2 ; ; LEC07: 7C 00 FD INC L00FD ; Current IAC position, steps LEC0A: 96 10 LDAA L0010 ; status word LEC0C: 85 40 BITA #$40 ; LEC0E: 26 02 BNE LEC12 ; LEC10: CA 04 ORAB #$04 ; LEC12: 17 TBA ; LEC13: 84 C0 ANDA #$C0 ; LEC15: 27 0C BEQ LEC23 ; ; LEC17: 81 C0 CMPA #$C0 ; LEC19: 27 08 BEQ LEC23 ; ; LEC1B: C5 01 BITB #$01 ; LEC1D: 26 08 BNE LEC27 ; ; LEC1F: C8 80 EORB #$80 ; LEC21: 20 06 BRA LEC29 ; ; LEC23: C5 01 BITB #$01 ; LEC25: 26 F8 BNE LEC1F ; ; LEC27: C8 40 EORB #$40 ; ; ; Step IAC (or shutdown on undr/ovr volt) ; ; MCU1 I/O: ; b2 iac-enable ; b1 iac-b ; b0 iac-a LEC29: D7 E0 STAB L00E0 ; status word LEC2B: B6 08 81 LDAA L0881 ; MCU1 I/O LEC2E: 84 F8 ANDA #$F8 ; clr iac ctrl bits LEC30: 58 LSLB ; LEC31: 2A 02 BPL LEC35 ; ; LEC33: 8A 02 ORAA #2 ; iac-b ; LEC35: 24 02 BCC LEC39 ; ; LEC37: 8A 01 ORAA #1 ; iac-a ; LEC39: 58 LSLB ; LEC3A: 2A 02 BPL LEC3E ; ; LEC3C: 8A 04 ORAA #4 ; iac-enb ; LEC3E: B7 08 81 STAA L0881 ; MCU1 I/O LEC41: 39 RTS ; ;*================================================== ;* ;* Real Time Service Routine 4 ;* ;*================================================== LEC42: D6 01 LDAB L0001 ; status word LEC44: 2B 0E BMI LEC54 ; Engine is Running ; LEC46: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LEC48: 97 22 STAA L0022 ; startup coolant, adc inverse LEC4A: 5F CLRB ; LEC4B: B6 D2 1D LDAA LD21D ; 138, 599mV LEC4E: DD 3A STD L003A ; O2, minor loop filtered LEC50: DD 3C STD L003C ; O2, major loop filtered (slow) LEC52: 97 39 STAA L0039 ; O2, adc, filtered, round up from L003A ; LEC54: 7E FD FA JMP LFDFA ; ;*================================================== ;* ;* Real Time Service Routine F ;* ;* 5 Hz routine ;* ;*================================================== LEC57: 96 66 LDAA L0066 ; 160Hz rts counter LEC59: 85 10 BITA #$10 ; LEC5B: 27 01 BEQ LEC5E ; bra if b4 == 0, time for this routine LEC5D: 39 RTS ; ;----------------------------------------------- ; ; ;----------------------------------------------- LEC5E: 5F CLRB ; LEC5F: 96 0E LDAA L000E ; status word, a/f mode LEC61: 2B 22 BMI LEC85 ; bra if closed loop ; ; LEC63: 96 03 LDAA L0003 ; status word LEC65: 85 40 BITA #$40 ; LEC67: 26 19 BNE LEC82 ; ; LEC69: 96 BD LDAA L00BD ; an afr timer val LEC6B: 27 03 BEQ LEC70 ; ; LEC6D: 4A DECA ; LEC6E: 20 1A BRA LEC8A ; ; LEC70: 96 66 LDAA L0066 ; 160Hz rts counter LEC72: 81 8F CMPA #143 ; LEC74: 26 16 BNE LEC8C ; ; LEC76: D6 BC LDAB L00BC ; an afr val LEC78: F0 D2 90 SUBB LD290 ; 13 LEC7B: 24 01 BCC LEC7E ; ; LEC7D: 5F CLRB ; LEC7E: D7 BC STAB L00BC ; an afr val LEC80: 20 0A BRA LEC8C ; ; LEC82: F6 D2 8E LDAB LD28E ; 25 ; ; bra here if closed loop ; LEC85: D7 BC STAB L00BC ; an afr val ; LEC87: B6 D2 8F LDAA LD28F ; 2 ; ; save timer val & clear status bit ; LEC8A: 97 BD STAA L00BD ; an afr timer val ; LEC8C: 96 03 LDAA L0003 ; status word LEC8E: 84 BF ANDA #$BF ; 1011 1111 LEC90: 97 03 STAA L0003 ; status word ; ; lookup volts correction for bpw ; LEC92: 96 41 LDAA L0041 ; Pump Volts, * 10, adc cnts LEC94: CE D3 1B LDX #$D31B ; tbl addr LEC97: BD FB 95 JSR LFB95 ; 2d lkup LEC9A: 97 B1 STAA L00B1 ; bpw inj volts correction term ; ; lookup decel coolant factor vs coolant ; LEC9C: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LEC9E: 43 COMA ; 1's comp LEC9F: 97 50 STAA L0050 ; tmp storage of inverse coolant val ; LECA1: CE D3 2C LDX #$D32C ; LECA4: BD FB 8C JSR LFB8C ; 2d lkup w/line cnt LECA7: 97 9C STAA L009C ; decel coolant factor vs coolant ; ; lookup accel enrichment vs coolant ; LECA9: 96 50 LDAA L0050 ; tmp storage of inverse coolant val LECAB: CE D3 32 LDX #$D332 ; LECAE: BD FB 95 JSR LFB95 ; 2d lkup LECB1: 97 99 STAA L0099 ; accel enrichment vs coolant ; ; lookup inverse coolant term for bpw calc ; LECB3: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LECB5: CE D3 0A LDX #$D30A ; LECB8: BD FB 95 JSR LFB95 ; 2d lkup LECBB: 97 A9 STAA L00A9 ; Inverse coolant term for bpw calc ; ; ; LECBD: D6 01 LDAB L0001 ; status word LECBF: 2B 54 BMI LED15 ; bra if Engine is Running ;----------------------------------------------- ; ; Engine not running here ; ; Init engine pre-start variables. ; Choke: sa & fuel, iat ; ; ;----------------------------------------------- LECC1: D6 DE LDAB L00DE ; status word LECC3: C5 08 BITB #$08 ; LECC5: 26 38 BNE LECFF ; LECC7: F6 08 81 LDAB L0881 ; MCU1 I/O LECCA: C5 20 BITB #$20 ; LECCC: 26 05 BNE LECD3 ; LECCE: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LECD0: BD FD E5 JSR LFDE5 ; Test Iat | Cts against 75c threshold ; ; lookup choke AFR ; LECD3: CE D3 4D LDX #$D34D ; LECD6: 96 50 LDAA L0050 ; tmp storage of inverse coolant val LECD8: BD FB 95 JSR LFB95 ; 2d lkup LECDB: D6 DF LDAB L00DF ; status word LECDD: C5 04 BITB #$04 ; b2 LECDF: 27 03 BEQ LECE4 ; bra if b2 == 0 LECE1: BB D2 60 ADDA LD260 ; 3.5:1 afr LECE4: 97 E5 STAA L00E5 ; choke adjustment to AFR ; ; ; LECE6: B6 D2 5C LDAA LD25C ; 25, inital delay from eng strt to decay choke afr LECE9: 97 E6 STAA L00E6 ; choke AFR decay timer ; ; lkup choke SA ; LECEB: CE D1 83 LDX #$D183 ; LECEE: 96 50 LDAA L0050 ; tmp storage of inverse coolant val LECF0: BD FB 8C JSR LFB8C ; 2d lkup w/line cnt LECF3: 97 E7 STAA L00E7 ; choke SA ; ; lkup choke SA decay timer ; LECF5: CE D1 89 LDX #$D189 ; LECF8: 96 50 LDAA L0050 ; tmp storage of inverse coolant val LECFA: BD FB 8C JSR LFB8C ; 2d lkup w/line cnt LECFD: 97 E8 STAA L00E8 ; choke SA decay timer ; ; lkup choke AFR decay mult ; LECFF: CE D3 5E LDX #$D35E ; LED02: 96 50 LDAA L0050 ; tmp storage of inverse coolant val LED04: BD FB 95 JSR LFB95 ; 2d lkup LED07: 97 B4 STAA L00B4 ; choke afr decay mult ; ; lkup crank AFR ; LED09: CE D3 6F LDX #$D36F ; LED0C: 96 50 LDAA L0050 ; tmp storage of inverse coolant val LED0E: BD FB 95 JSR LFB95 ; 2d lkup LED11: 97 B3 STAA L00B3 ; crank afr ; LED13: 20 3A BRA LED4F ; bra around engine run stuff ;----------------------------------------------- ; ; Engine is running here ; ;----------------------------------------------- ; ; Decay Choke AFR ; LED15: 96 E6 LDAA L00E6 ; choke AFR decay timer LED17: 26 0E BNE LED27 ; ; LED19: B6 D2 5B LDAA LD25B ; 9, delay mult to decay choke afr LED1C: 97 E6 STAA L00E6 ; choke AFR decay timer LED1E: 96 E5 LDAA L00E5 ; choke adjustment to AFR LED20: D6 B4 LDAB L00B4 ; choke afr decay mult LED22: 3D MUL ; LED23: 97 E5 STAA L00E5 ; choke adjustment to AFR LED25: 20 03 BRA LED2A ; ; LED27: 7A 00 E6 DEC L00E6 ; choke AFR decay timer ; ; Decay Choke SA ; LED2A: 96 E8 LDAA L00E8 ; choke SA decay timer LED2C: 27 0B BEQ LED39 ; ; LED2E: 96 66 LDAA L0066 ; 160Hz rts counter LED30: 84 F0 ANDA #$F0 ; LED32: 26 1B BNE LED4F ; ; LED34: 7A 00 E8 DEC L00E8 ; choke SA decay timer LED37: 20 16 BRA LED4F ; ; LED39: 96 65 LDAA L0065 ; choke SA decay delay LED3B: 27 05 BEQ LED42 ; ; LED3D: 7A 00 65 DEC L0065 ; choke SA decay delay LED40: 20 0D BRA LED4F ; ; LED42: B6 D0 26 LDAA LD026 ; 2, choke SA decay delay mult LED45: 97 65 STAA L0065 ; choke SA decay delay ; LED47: 96 E7 LDAA L00E7 ; choke SA LED49: F6 D0 27 LDAB LD027 ; 241, choke SA decay mult LED4C: 3D MUL ; LED4D: 97 E7 STAA L00E7 ; choke SA ;----------------------------------------------- ; ; Continue on, both eng run & eng not run ; ; Lookup Open Loop AFR vs Coolant ; ;----------------------------------------------- LED4F: CE D3 8B LDX #$D38B ; Open Loop AFR vs Coolant LED52: 96 50 LDAA L0050 ; tmp storage of inverse coolant val LED54: BD FB 95 JSR LFB95 ; 2d lkup LED57: 97 B2 STAA L00B2 ; afr vs coolant, open loop ; LED59: 96 01 LDAA L0001 ; status word LED5B: 2A 61 BPL LEDBE ; Engine is not Running ; ; test if O2 ready timed out, go open loop ; LED5D: 96 0A LDAA L000A ; status word LED5F: 85 02 BITA #$02 ; b1 LED61: 27 05 BEQ LED68 ; ; LED63: 7F 00 9B CLR L009B ; O2 ready/clsd lp ok timeout timer LED66: 20 56 BRA LEDBE ; ; LED68: D6 DE LDAB L00DE ; status word LED6A: 96 9B LDAA L009B ; O2 ready/clsd lp ok timeout timer LED6C: B1 D2 2C CMPA LD22C ; 50, O2 ready timeout LED6F: 24 05 BCC LED76 ; ; LED71: 4C INCA ; LED72: 97 9B STAA L009B ; O2 ready/clsd lp ok timeout timer LED74: 20 04 BRA LED7A ; ; LED76: C4 FE ANDB #$FE ; clear O2 ready bit LED78: D7 DE STAB L00DE ; status word ; ; ; LED7A: C5 01 BITB #$01 ; LED7C: 27 40 BEQ LEDBE ; ; LED7E: 96 02 LDAA L0002 ; status word LED80: 84 30 ANDA #$30 ; LED82: 26 22 BNE LEDA6 ; ; LED84: D6 DE LDAB L00DE ; status word LED86: C5 02 BITB #$02 ; LED88: 26 1C BNE LEDA6 ; ; ; ; do closed loop time threshold ; LED8A: DC EB LDD L00EB ; eng run time LED8C: 04 LSRD ; LED8D: 96 22 LDAA L0022 ; startup coolant, adc inverse LED8F: B1 D2 28 CMPA LD228 ; 199, 20c LED92: 23 07 BLS LED9B ; ; LED94: F1 D2 2A CMPB LD22A ; 200, clsd loop eng run cold LED97: 24 07 BCC LEDA0 ; ; LED99: 20 23 BRA LEDBE ; ; LED9B: F1 D2 29 CMPB LD229 ; 15, clsd loop eng run hot LED9E: 25 1E BCS LEDBE ; ; ; ; set status that enough time has elapsed for closed loop ; LEDA0: 96 DE LDAA L00DE ; status word LEDA2: 8A 02 ORAA #2 ; b1 LEDA4: 97 DE STAA L00DE ; status word ; ; check coolant thres for closed loop ; LEDA6: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LEDA8: B1 D2 2B CMPA LD22B ; closed loop coolant thres, 48c LEDAB: 24 11 BCC LEDBE ; ; ; ; set closed loop bit ; LEDAD: D6 0E LDAB L000E ; status word, a/f mode LEDAF: CA 80 ORAB #$80 ; set in closed loop ; LEDB1: 96 00 LDAA L0000 ; status word LEDB3: 85 02 BITA #$02 ; LEDB5: 27 0B BEQ LEDC2 ; LEDB7: B6 04 0D LDAA L040D ; HU ram LEDBA: 84 03 ANDA #$03 ; LEDBC: 27 04 BEQ LEDC2 ; ; ; ; clear closed loop bit ; LEDBE: D6 0E LDAB L000E ; status word, a/f mode LEDC0: C4 7F ANDB #$7F ; clear in closed loop bit ; ; ; Do BLM learn enable quals ; LEDC2: D7 0E STAB L000E ; status word, a/f mode LEDC4: 2A 30 BPL LEDF6 ; bra if not in closed loop ; LEDC6: 96 08 LDAA L0008 ; status word LEDC8: 84 C0 ANDA #$C0 ; LEDCA: 26 2A BNE LEDF6 ; bra for no learn ; LEDCC: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LEDCE: B1 D2 2D CMPA LD22D ; 189, 25c LEDD1: 24 23 BCC LEDF6 ; bra for no learn ; LEDD3: B1 D2 2E CMPA LD22E ; 0, 200c LEDD6: 25 1E BCS LEDF6 ; bra for no learn ; LEDD8: 96 A3 LDAA L00A3 ; desired AFR LEDDA: B1 D2 32 CMPA LD232 ; 14.7, stoich LEDDD: 26 17 BNE LEDF6 ; bra for no learn ; LEDDF: 96 25 LDAA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LEDE1: B1 D2 30 CMPA LD230 ; 255, 100Kpa LEDE4: 22 10 BHI LEDF6 ; bra for no learn ; LEDE6: B1 D2 2F CMPA LD22F ; 20, 26Kpa LEDE9: 25 0B BCS LEDF6 ; bra for no learn ; LEDEB: 96 1B LDAA L001B ; rpm / 25 LEDED: B1 D2 31 CMPA LD231 ; 240, 6000 rpm LEDF0: 24 04 BCC LEDF6 ; bra for no learn ; ; ; learn OK ; LEDF2: CA 02 ORAB #2 ; set b1 LEDF4: 20 02 BRA LEDF8 ; ; ; ; learn NOT OK ; LEDF6: C4 FD ANDB #$FD ; clr b1, 1111 1101 LEDF8: D7 0E STAB L000E ; status word, a/f mode LEDFA: 39 RTS ; ;*================================================== ;* ;* Real Time Service Routine 5 ;* ;*================================================== LEDFB: DE 3C LDX L003C ; O2, major loop filtered (slow) LEDFD: F6 D4 9A LDAB LD49A ; filt coef, 1 LEE00: 96 39 LDAA L0039 ; O2, adc, filtered, round up from L003A LEE02: BD FB 40 JSR LFB40 ; Lag Filter LEE05: DD 3C STD L003C ; O2, major loop filtered (slow) ; LEE07: 96 22 LDAA L0022 ; startup coolant, adc inverse LEE09: B1 D4 A2 CMPA LD4A2 ; 199, 20c LEE0C: 23 04 BLS LEE12 ; ; LEE0E: 96 0E LDAA L000E ; status word, a/f mode LEE10: 2A 05 BPL LEE17 ; bra if not closed loop ; LEE12: 96 0A LDAA L000A ; status word LEE14: 47 ASRA ; tst b0 LEE15: 24 03 BCC LEE1A ; bra if b0 == 0 ; LEE17: 7E EF 08 JMP LEF08 ; ;----------------------------------------------- ; ; ;----------------------------------------------- LEE1A: 96 0F LDAA L000F ; status word LEE1C: 85 10 BITA #$10 ; hiway mode bit LEE1E: 26 F7 BNE LEE17 ; bra if in hiway fuel ; LEE20: D6 07 LDAB L0007 ; status word LEE22: 96 0E LDAA L000E ; status word, a/f mode LEE24: 2A 0E BPL LEE34 ; bra if not closed loop LEE26: CA 80 ORAB #128 ; LEE28: D7 07 STAB L0007 ; status word LEE2A: 7F 00 77 CLR L0077 ; LEE2D: B6 D4 A3 LDAA LD4A3 ; 50 LEE30: 97 78 STAA L0078 ; LEE32: 20 23 BRA LEE57 ; ; ; ; LEE34: 5D TSTB ; LEE35: 2A 07 BPL LEE3E ; LEE37: 96 78 LDAA L0078 ; LEE39: 27 DC BEQ LEE17 ; LEE3B: 4A DECA ; LEE3C: 97 78 STAA L0078 ; LEE3E: D6 77 LDAB L0077 ; LEE40: 96 76 LDAA L0076 ; LEE42: 90 25 SUBA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LEE44: 23 08 BLS LEE4E ; LEE46: B1 D4 A1 CMPA LD4A1 ; delta map val, 25 Kpa LEE49: 23 03 BLS LEE4E ; LEE4B: F6 D4 9F LDAB LD49F ; LEE4E: 5D TSTB ; LEE4F: 27 06 BEQ LEE57 ; LEE51: 5A DECB ; LEE52: D7 77 STAB L0077 ; LEE54: 7E EF 02 JMP LEF02 ; ;----------------------------------------------- ; ; ;----------------------------------------------- LEE57: D6 66 LDAB L0066 ; 160Hz rts counter LEE59: C4 F0 ANDB #$F0 ; LEE5B: D7 4E STAB L004E ; LEE5D: 96 0D LDAA L000D ; status word LEE5F: 2B 16 BMI LEE77 ; bra if in PE/WOT mode ; LEE61: 7F 00 79 CLR L0079 ; LEE64: D6 1A LDAB L001A ; rpm scaled LEE66: F1 D4 9E CMPB LD49E ; 164 LEE69: 23 1C BLS LEE87 ; LEE6B: D6 73 LDAB L0073 ; LEE6D: F1 D4 99 CMPB LD499 ; 2 LEE70: 22 2B BHI LEE9D ; LEE72: 5C INCB ; LEE73: 26 13 BNE LEE88 ; LEE75: 20 13 BRA LEE8A ; ; ; ; LEE77: D6 79 LDAB L0079 ; LEE79: F1 D4 A4 CMPB LD4A4 ; 0 LEE7C: 24 1F BCC LEE9D ; LEE7E: D6 4E LDAB L004E ; LEE80: 26 03 BNE LEE85 ; LEE82: 7C 00 79 INC L0079 ; LEE85: 20 73 BRA LEEFA ; LEE87: 5F CLRB ; LEE88: D7 73 STAB L0073 ; ; ; ; LEE8A: D6 3C LDAB L003C ; O2, major loop filtered (slow) LEE8C: F1 D4 9B CMPB LD49B ; O2 val, 699mV LEE8F: 23 0E BLS LEE9F ; LEE91: D6 74 LDAB L0074 ; LEE93: F1 D4 9D CMPB LD49D ; 50 LEE96: 5C INCB ; LEE97: 25 0B BCS LEEA4 ; LEE99: 8A 01 ORAA #1 ; LEE9B: 97 0D STAA L000D ; status word ; LEE9D: 20 69 BRA LEF08 ; LEE9F: D6 74 LDAB L0074 ; LEEA1: 27 0A BEQ LEEAD ; LEEA3: 5A DECB ; LEEA4: 7D 00 4E TST L004E ; LEEA7: 26 08 BNE LEEB1 ; LEEA9: D7 74 STAB L0074 ; LEEAB: 20 04 BRA LEEB1 ; LEEAD: 84 FE ANDA #$FE ; LEEAF: 97 0D STAA L000D ; status word LEEB1: 84 01 ANDA #$01 ; LEEB3: 26 53 BNE LEF08 ; LEEB5: D6 3C LDAB L003C ; O2, major loop filtered (slow) LEEB7: F1 D4 9C CMPB LD49C ; O2 val, 282mV LEEBA: 24 10 BCC LEECC ; LEEBC: D6 0E LDAB L000E ; status word, a/f mode LEEBE: 2A 0C BPL LEECC ; bra if not closed loop LEEC0: 96 75 LDAA L0075 ; LEEC2: B1 D4 9D CMPA LD49D ; 50 LEEC5: 22 41 BHI LEF08 ; LEEC7: D6 4E LDAB L004E ; LEEC9: 26 03 BNE LEECE ; LEECB: 4C INCA ; LEECC: 97 75 STAA L0075 ; LEECE: 96 25 LDAA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LEED0: B1 D4 A0 CMPA LD4A0 ; 8, 22.5 Kpa LEED3: 25 33 BCS LEF08 ; LEED5: B1 D4 A6 CMPA LD4A6 ; 255 LEED8: 22 1C BHI LEEF6 ; LEEDA: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LEEDC: B1 D4 A5 CMPA LD4A5 ; 96, coolant thres, 67c LEEDF: 24 15 BCC LEEF6 ; LEEE1: 96 30 LDAA L0030 ; mph / 1, filtered LEEE3: F6 D0 05 LDAB LD005 ; option byte: 0010 0011 LEEE6: C5 01 BITB #$01 ; LEEE8: 26 02 BNE LEEEC ; LEEEA: 96 1B LDAA L001B ; rpm / 25 LEEEC: B1 D4 A7 CMPA LD4A7 ; 255, 6375 rpm LEEEF: 22 05 BHI LEEF6 ; LEEF1: B1 D4 A8 CMPA LD4A8 ; 38, 950 rpm LEEF4: 24 12 BCC LEF08 ; LEEF6: D6 07 LDAB L0007 ; status word LEEF8: 2B 08 BMI LEF02 ; LEEFA: D6 07 LDAB L0007 ; status word LEEFC: C4 FE ANDB #$FE ; LEEFE: CA 04 ORAB #4 ; LEF00: 20 0C BRA LEF0E ; LEF02: D6 07 LDAB L0007 ; status word LEF04: C4 FA ANDB #$FA ; LEF06: 20 06 BRA LEF0E ; ; ; ; LEF08: D6 07 LDAB L0007 ; status word LEF0A: CA 01 ORAB #1 ; LEF0C: C4 FB ANDB #$FB ; LEF0E: D7 07 STAB L0007 ; status word LEF10: 96 25 LDAA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LEF12: 97 76 STAA L0076 ; LEF14: 5F CLRB ; LEF15: 96 40 LDAA L0040 ; Battery Volts, * 10, adc cnts LEF17: 81 AB CMPA #171 ; LEF19: 96 02 LDAA L0002 ; status word LEF1B: 25 08 BCS LEF25 ; LEF1D: 85 40 BITA #$40 ; LEF1F: 26 18 BNE LEF39 ; LEF21: 8A 40 ORAA #64 ; LEF23: 20 02 BRA LEF27 ; LEF25: 84 BF ANDA #$BF ; LEF27: 97 02 STAA L0002 ; status word LEF29: 96 01 LDAA L0001 ; status word LEF2B: 2B 0F BMI LEF3C ; Engine is Running LEF2D: 96 0A LDAA L000A ; status word LEF2F: 2B 04 BMI LEF35 ; LEF31: 4F CLRA ; LEF32: 5A DECB ; LEF33: 20 32 BRA LEF67 ; LEF35: 86 FD LDAA #253 ; LEF37: 20 2E BRA LEF67 ; LEF39: 37 PSHB ; LEF3A: 20 32 BRA LEF6E ; ; ; Setup for MCU2 Output ; LEF3C: 4F CLRA ; pre-clr LEF3D: D6 05 LDAB L0005 ; status word LEF3F: 2A 02 BPL LEF43 ; bra if tcc unlocked, shft light off ; LEF41: 8A 08 ORAA #$08 ; turn on tcc/shift light ; LEF43: C5 01 BITB #$01 ; LEF45: 27 08 BEQ LEF4F ; ; LEF47: D6 0B LDAB L000B ; LEF49: C5 04 BITB #$04 ; LEF4B: 26 02 BNE LEF4F ; ; LEF4D: 8A 01 ORAA #$01 ; ; LEF4F: D6 07 LDAB L0007 ; status word LEF51: C5 04 BITB #$04 ; LEF53: 27 02 BEQ LEF57 ; ; LEF55: 8A 10 ORAA #$10 ; ; LEF57: C5 01 BITB #$01 ; LEF59: 26 02 BNE LEF5D ; ; LEF5B: 8A 20 ORAA #$20 ; ; LEF5D: D6 0E LDAB L000E ; status word, a/f mode LEF5F: C5 08 BITB #$08 ; LEF61: 27 02 BEQ LEF65 ; ; LEF63: 84 F7 ANDA #$F7 ; ; LEF65: D6 7D LDAB L007D ; used in egr test, a clsd lp term LEF67: 36 PSHA ; ; ; ; Do throttle kicker output ; LEF68: 7D D0 08 TST LD008 ; 0, throttle kicker flag LEF6B: 27 01 BEQ LEF6E ; LEF6D: 53 COMB ; 1's comp ; LEF6E: 4F CLRA ; LEF6F: 05 LSLD ; LEF70: 05 LSLD ; LEF71: 27 02 BEQ LEF75 ; LEF73: CA 03 ORAB #$03 ; ; LEF75: 8A D0 ORAA #$D0 ; LEF77: FD BC 18 STD LBC18 ; throttle kicker ($D3FF | $D000, on/off) ; ; Do actual MCU2 output ; ; Out: ; b3 TCC/Shift Light ; b2 A/C Drive ; b1 Air Divert ; b0 Air Select LEF7A: F6 08 01 LDAB L0801 ; MCU2 I/O LEF7D: C4 F0 ANDB #$F0 ; mask out lower nibble ; LEF7F: 32 PULA ; LEF80: 85 04 BITA #$04 ; LEF82: 27 02 BEQ LEF86 ; LEF84: CA 04 ORAB #$04 ; LEF86: 85 08 BITA #$08 ; LEF88: 27 02 BEQ LEF8C ; LEF8A: CA 08 ORAB #$08 ; LEF8C: 85 10 BITA #$10 ; LEF8E: 27 02 BEQ LEF92 ; LEF90: CA 01 ORAB #$01 ; LEF92: 85 20 BITA #$20 ; LEF94: 27 02 BEQ LEF98 ; LEF96: CA 02 ORAB #$02 ; ; LEF98: F7 08 01 STAB L0801 ; MCU2 I/O ; ; ; ; Do EGR output ; LEF9B: 47 ASRA ; LEF9C: 24 1D BCC LEFBB ; LEF9E: FC BC 16 LDD LBC16 ; egr LEFA1: 7D D0 05 TST LD005 ; option byte: 0010 0011 LEFA4: 2A 09 BPL LEFAF ; ; LEFA6: B3 D2 17 SUBD LD217 ; 1279, $4FF LEFA9: 81 D0 CMPA #208 ; $D0 LEFAB: 23 13 BLS LEFC0 ; LEFAD: 20 14 BRA LEFC3 ; ; LEFAF: F3 D2 17 ADDD LD217 ; 1279, $4FF LEFB2: 81 D3 CMPA #211 ; LEFB4: 23 0D BLS LEFC3 ; LEFB6: CC D3 FF LDD #$D3FF ; LEFB9: 20 08 BRA LEFC3 ; ; LEFBB: 7D D0 05 TST LD005 ; option byte: 0010 0011 LEFBE: 2B F6 BMI LEFB6 ; ; LEFC0: CC D0 00 LDD #$D000 ; LEFC3: FD BC 16 STD LBC16 ; egr LEFC6: 39 RTS ; ;*================================================== ;* ;* Real Time Service Routine B ;* ;*================================================== LEFC7: 96 00 LDAA L0000 ; status word LEFC9: 85 10 BITA #$10 ; engine shutdown LEFCB: 26 06 BNE LEFD3 ; LEFCD: 86 9F LDAA #159 ; LEFCF: 91 32 CMPA L0032 ; vss interval counter, 159 | 160 LEFD1: 22 04 BHI LEFD7 ; LEFD3: 4F CLRA ; LEFD4: 5F CLRB ; LEFD5: 20 20 BRA LEFF7 ; ; ; ; calc mph from vss variables ; LEFD7: DC 35 LDD L0035 ; LEFD9: 93 33 SUBD L0033 ; LEFDB: DD 49 STD L0049 ; LEFDD: DC 37 LDD L0037 ; LEFDF: 93 35 SUBD L0035 ; LEFE1: D3 49 ADDD L0049 ; LEFE3: 46 RORA ; LEFE4: 56 RORB ; LEFE5: DD 4B STD L004B ; tmp storage LEFE7: DD 4F STD L004F ; tmp storage LEFE9: CC 01 CC LDD #460 ; constant LEFEC: BD FB DE JSR LFBDE ; vss/rpm calc routine (FDIV) ; LEFEF: DE 30 LDX L0030 ; mph / 1, filtered LEFF1: F6 D4 BD LDAB LD4BD ; filt coef, 128 LEFF4: BD FB 40 JSR LFB40 ; Lag Filter ; LEFF7: DD 30 STD L0030 ; mph / 1, filtered ; ; calc N/V ratio ; LEFF9: 96 1B LDAA L001B ; rpm / 25 LEFFB: CE 00 4F LDX #$004F ; LEFFE: BD FC 05 JSR LFC05 ; AB = (A x *X) / 256 LF001: DD 4F STD L004F ; tmp storage LF003: 86 0E LDAA #14 ; LF005: BD FC 05 JSR LFC05 ; AB = (A x *X) / 256 LF008: 4D TSTA ; LF009: 27 02 BEQ LF00D ; LF00B: C6 FF LDAB #255 ; ; LF00D: D7 7C STAB L007C ; N/V ratio ;----------------------------------------------- ; ; Decide which: TCC | Shift Light ; ;----------------------------------------------- LF00F: F6 D0 07 LDAB LD007 ; option byte: 0010 0100 LF012: 2A 03 BPL LF017 ; bra to do tcc LF014: 7E F1 06 JMP LF106 ; go do shift light ;----------------------------------------------- ; ; Do TCC ; ;----------------------------------------------- LF017: F8 08 01 EORB L0801 ; MCU2 I/O LF01A: C4 20 ANDB #$20 ; high gear switch LF01C: D7 50 STAB L0050 ; save higr stat LF01E: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LF020: B1 D4 B6 CMPA LD4B6 ; 102 LF023: 23 03 BLS LF028 ; bra if cool > 60c ; LF025: 7E F0 EB JMP LF0EB ; unock & exit ;----------------------------------------------- ; ; Coolant OK for tcc lock ; ;----------------------------------------------- LF028: F6 D0 05 LDAB LD005 ; option byte: 0010 0011 LF02B: 96 07 LDAA L0007 ; status word LF02D: C5 02 BITB #$02 ; b1 of D005 LF02F: 27 04 BEQ LF035 ; b1 == 1, do not bra ; ; ; LF031: 85 08 BITA #$08 ; b3 of L0007 LF033: 26 F0 BNE LF025 ; ; LF035: CE D4 B7 LDX #$D4B7 ; indexed tbl LF038: E6 01 LDAB 1,X ; 40 (mph) LF03A: 85 10 BITA #$10 ; b4 of L0007 LF03C: 26 04 BNE LF042 ; ; LF03E: CB 05 ADDB #5 ; add 5 mph LF040: 25 04 BCS LF046 ; ; LF042: D1 30 CMPB L0030 ; mph / 1, filtered LF044: 23 06 BLS LF04C ; bra if mph > 40 | 45 mph ; LF046: 84 EF ANDA #$EF ; LF048: E6 02 LDAB 2,X ; LF04A: 20 04 BRA LF050 ; ; LF04C: 8A 10 ORAA #$10 ; LF04E: E6 03 LDAB 3,X ; ; LF050: 97 07 STAA L0007 ; status word LF052: 96 05 LDAA L0005 ; LF054: 2A 05 BPL LF05B ; bra if tcc unlocked ; LF056: E0 04 SUBB 4,X ; LF058: 24 01 BCC LF05B ; LF05A: 5F CLRB ; ; LF05B: 37 PSHB ; LF05C: BD FA 7A JSR LFA7A ; get map | vac | tps variable LF05F: F6 D4 B7 LDAB LD4B7 ; LF062: C1 03 CMPB #3 ; LF064: 26 03 BNE LF069 ; LF066: BD FB 64 JSR LFB64 ; get a baro adjusted tps% value LF069: 33 PULB ; LF06A: 11 CBA ; LF06B: 25 B8 BCS LF025 ; ; LF06D: CE D4 DB LDX #$D4DB ; tcc relock-unlock tbl, hi gr? LF070: 96 50 LDAA L0050 ; hi gear stat LF072: 27 03 BEQ LF077 ; ; LF074: CE D4 C1 LDX #$D4C1 ; tcc relock-unlock tbl, lo gr? ; LF077: C6 0E LDAB #14 ; LF079: 96 05 LDAA L0005 ; LF07B: 2A 04 BPL LF081 ; bra if tcc unlocked ; LF07D: 08 INX ; LF07E: 08 INX ; LF07F: C6 01 LDAB #1 ; ; LF081: 96 30 LDAA L0030 ; mph / 1, filtered LF083: A1 00 CMPA 0,X ; LF085: 25 64 BCS LF0EB ; LF087: 08 INX ; LF088: A1 00 CMPA 0,X ; LF08A: 24 5F BCC LF0EB ; LF08C: 3A ABX ; adj tbl index LF08D: 96 05 LDAA L0005 ; LF08F: 2A 12 BPL LF0A3 ; bra if tcc unlocked ; LF091: B6 D0 06 LDAA LD006 ; option byte: 0001 0001 LF094: 85 02 BITA #$02 ; LF096: 27 0B BEQ LF0A3 ; do bra, use mph ; LF098: C6 60 LDAB #96 ; LF09A: 96 1A LDAA L001A ; rpm scaled LF09C: 48 ASLA ; LF09D: 24 02 BCC LF0A1 ; LF09F: 86 FF LDAA #255 ; LF0A1: 20 10 BRA LF0B3 ; ; ; ; LF0A3: DC 30 LDD L0030 ; mph / 1, filtered LF0A5: 05 LSLD ; mph *= 2 LF0A6: 25 07 BCS LF0AF ; LF0A8: 05 LSLD ; mph *= 2 LF0A9: 25 04 BCS LF0AF ; ; LF0AB: 81 F0 CMPA #240 ; max of 60 mph LF0AD: 25 02 BCS LF0B1 ; LF0AF: 86 F0 LDAA #240 ; ; LF0B1: C6 50 LDAB #80 ; min of 20 mph ; ; ; LF0B3: BD FB 91 JSR LFB91 ; 2d lkup w/SBA LF0B6: 27 33 BEQ LF0EB ; bra if == 0, do unlk LF0B8: 36 PSHA ; save tps% required ; LF0B9: BD FB 64 JSR LFB64 ; get a baro adjusted tps% value LF0BC: 33 PULB ; LF0BD: 11 CBA ; test tps% val LF0BE: 22 2B BHI LF0EB ; bra if enough to unlock ; LF0C0: D6 0E LDAB L000E ; status word, a/f mode LF0C2: C5 08 BITB #$08 ; LF0C4: 27 09 BEQ LF0CF ; LF0C6: 7A 00 7B DEC L007B ; tcc timer, or gear LF0C9: 26 13 BNE LF0DE ; LF0CB: C4 F7 ANDB #$F7 ; LF0CD: 20 0F BRA LF0DE ; ; LF0CF: 96 50 LDAA L0050 ; hi-gr stat LF0D1: 27 0B BEQ LF0DE ; LF0D3: C5 20 BITB #$20 ; LF0D5: 26 07 BNE LF0DE ; ; LF0D7: CA 08 ORAB #$08 ; LF0D9: B6 D4 BE LDAA LD4BE ; 1 LF0DC: 97 7B STAA L007B ; tcc timer, or gear ; LF0DE: 96 7A LDAA L007A ; LF0E0: 27 03 BEQ LF0E5 ; LF0E2: 4A DECA ; LF0E3: 20 0B BRA LF0F0 ; ; ; ; lock tcc ; LF0E5: 96 05 LDAA L0005 ; LF0E7: 8A 80 ORAA #$80 ; cmd tcc to lock LF0E9: 20 12 BRA LF0FD ; ; ; unlock tcc unless > 80 mph ; LF0EB: D6 0E LDAB L000E ; status word, a/f mode LF0ED: B6 D4 BF LDAA LD4BF ; 6, relock delay ; LF0F0: 97 7A STAA L007A ; LF0F2: 96 30 LDAA L0030 ; mph / 1, filtered LF0F4: B1 D4 C0 CMPA LD4C0 ; 80 mph LF0F7: 24 EC BCC LF0E5 ; bra if mph > 80 mph ; LF0F9: 96 05 LDAA L0005 ; LF0FB: 84 7F ANDA #$7F ; 0111 1111, unlk tcc ; LF0FD: C4 DF ANDB #$DF ; 1101 1111 LF0FF: DA 50 ORAB L0050 ; LF101: D7 0E STAB L000E ; status word, a/f mode LF103: 97 05 STAA L0005 ; LF105: 39 RTS ; ;----------------------------------------------- ; ; Shift Light Here ; ;----------------------------------------------- LF106: CE D4 F9 LDX #$D4F9 ; LF109: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LF10B: A1 10 CMPA 16,X ; LF10D: 24 32 BCC LF141 ; LF10F: A6 11 LDAA 17,X ; LF111: D6 7B LDAB L007B ; tcc timer, or gear LF113: C1 02 CMPB #2 ; LF115: 23 02 BLS LF119 ; LF117: A6 12 LDAA 18,X ; LF119: 91 43 CMPA L0043 ; tps%, from idle LF11B: 22 24 BHI LF141 ; LF11D: 96 30 LDAA L0030 ; mph / 1, filtered LF11F: 81 05 CMPA #5 ; LF121: 25 1E BCS LF141 ; LF123: 96 1B LDAA L001B ; rpm / 25 LF125: A1 13 CMPA 19,X ; LF127: 22 2C BHI LF155 ; LF129: 81 28 CMPA #40 ; LF12B: 25 14 BCS LF141 ; ; ; ; figure out which gear tranny is in ; LF12D: D6 7C LDAB L007C ; N/V ratio LF12F: 4F CLRA ; LF130: 4C INCA ; <<<< LF131: 97 7B STAA L007B ; tcc timer, or gear LF133: E1 00 CMPB 0,X ; LF135: 22 04 BHI LF13B ; LF137: E1 04 CMPB 4,X ; LF139: 22 20 BHI LF15B ; LF13B: 08 INX ; LF13C: 8C D4 FC CPX #$D4FC ; eprom addr LF13F: 23 EF BLS LF130 ; >>>> ; LF141: B6 D5 0D LDAA LD50D ; 10 LF144: D6 7B LDAB L007B ; tcc timer, or gear LF146: C1 02 CMPB #2 ; LF148: 23 03 BLS LF14D ; LF14A: B6 D5 0E LDAA LD50E ; 15 LF14D: 97 7A STAA L007A ; LF14F: 96 05 LDAA L0005 ; LF151: 84 7F ANDA #$7F ; LF153: 20 04 BRA LF159 ; ; LF155: 96 05 LDAA L0005 ; LF157: 8A 80 ORAA #$80 ; shift light on LF159: 20 A8 BRA LF103 ; ; LF15B: 96 1B LDAA L001B ; rpm / 25 LF15D: A1 08 CMPA 8,X ; LF15F: 23 E0 BLS LF141 ; LF161: 3C PSHX ; LF162: BD FB 64 JSR LFB64 ; get a baro adjusted tps% value LF165: 38 PULX ; LF166: E6 0C LDAB 12,X ; LF168: 3D MUL ; LF169: 05 LSLD ; LF16A: 25 05 BCS LF171 ; LF16C: C3 00 80 ADDD #128 ; LF16F: 24 02 BCC LF173 ; LF171: 86 FF LDAA #255 ; LF173: 36 PSHA ; LF174: CE D4 C5 LDX #$D4C5 ; LF177: D6 7B LDAB L007B ; tcc timer, or gear LF179: C1 02 CMPB #2 ; LF17B: 23 03 BLS LF180 ; LF17D: CE D4 DF LDX #$D4DF ; LF180: C6 0B LDAB #11 ; LF182: 96 05 LDAA L0005 ; LF184: 2B 01 BMI LF187 ; bra if tcc lk, shft light on LF186: 3A ABX ; LF187: C6 28 LDAB #40 ; LF189: 96 1B LDAA L001B ; rpm / 25 LF18B: 81 C8 CMPA #200 ; LF18D: 25 02 BCS LF191 ; LF18F: 86 C8 LDAA #200 ; LF191: BD FB 91 JSR LFB91 ; 2d lkup w/SBA LF194: 33 PULB ; LF195: 11 CBA ; LF196: 25 A9 BCS LF141 ; LF198: 96 7A LDAA L007A ; LF19A: 27 B9 BEQ LF155 ; LF19C: 4A DECA ; LF19D: 20 AE BRA LF14D ; ;*================================================== ;* ;* Real Time Service Routine 9 ;* ;*================================================== ; ; Egr test ; LF19F: 96 02 LDAA L0002 ; status word LF1A1: 85 20 BITA #$20 ; b5 LF1A3: 26 36 BNE LF1DB ; ; LF1A5: 96 07 LDAA L0007 ; status word LF1A7: 85 08 BITA #$08 ; b3, dfco LF1A9: 26 30 BNE LF1DB ; bra if in dfco ; LF1AB: CE D4 AA LDX #$D4AA ; tbl addr LF1AE: 96 7D LDAA L007D ; used in egr test, a clsd lp term LF1B0: 27 03 BEQ LF1B5 ; ; LF1B2: CE D4 AB LDX #$D4AB ; tbl addr ; LF1B5: D6 30 LDAB L0030 ; mph / 1, filtered LF1B7: E1 00 CMPB 0,X ; 2 | 1 LF1B9: 23 17 BLS LF1D2 ; ; LF1BB: D6 43 LDAB L0043 ; tps%, from idle LF1BD: E1 02 CMPB 2,X ; 8 | 5 LF1BF: 22 1F BHI LF1E0 ; ; LF1C1: F6 D0 06 LDAB LD006 ; option byte: 0001 0001 LF1C4: C5 04 BITB #$04 ; b2 == 0 LF1C6: 26 0A BNE LF1D2 ; do not bra ; LF1C8: D6 DE LDAB L00DE ; status word LF1CA: C5 40 BITB #$40 ; b6 LF1CC: 26 04 BNE LF1D2 ; ; LF1CE: C5 10 BITB #$10 ; b4 LF1D0: 26 09 BNE LF1DB ; ; LF1D2: D6 DE LDAB L00DE ; status word LF1D4: C4 EF ANDB #$EF ; clr b4, 1110 1111 LF1D6: D7 DE STAB L00DE ; status word ; LF1D8: 7F 00 7E CLR L007E ; ; ; ; LF1DB: 4F CLRA ; LF1DC: 97 7F STAA L007F ; LF1DE: 20 76 BRA LF256 ; ; ; ; LF1E0: D6 DE LDAB L00DE ; status word LF1E2: C5 10 BITB #$10 ; LF1E4: 27 02 BEQ LF1E8 ; ; LF1E6: 96 7E LDAA L007E ; LF1E8: D6 2E LDAB L002E ; vac LF1EA: F1 D4 AE CMPB LD4AE ; LF1ED: 22 2C BHI LF21B ; ; LF1EF: D6 7F LDAB L007F ; LF1F1: F1 D4 A9 CMPB LD4A9 ; 1 LF1F4: 5C INCB ; LF1F5: 25 54 BCS LF24B ; ; LF1F7: D6 A2 LDAB L00A2 ; integrator LF1F9: F1 D4 AF CMPB LD4AF ; 123 LF1FC: 24 0D BCC LF20B ; ; LF1FE: F1 D4 B0 CMPB LD4B0 ; 116 LF201: 24 18 BCC LF21B ; ; LF203: B0 D4 B3 SUBA LD4B3 ; 5 LF206: 22 13 BHI LF21B ; ; LF208: 4F CLRA ; LF209: 20 10 BRA LF21B ; ; ; LF20B: F6 D4 B1 LDAB LD4B1 ; 3 LF20E: 7D 00 B0 TST L00B0 ; closed loop correction term LF211: 2B 03 BMI LF216 ; bra if >= 128, removing fuel LF213: F6 D4 B2 LDAB LD4B2 ; 16 ; LF216: 1B ABA ; LF217: 24 02 BCC LF21B ; LF219: 86 FF LDAA #255 ; ; LF21B: D6 0E LDAB L000E ; status word, a/f mode LF21D: 2B 07 BMI LF226 ; bra if closed loop LF21F: F6 D0 05 LDAB LD005 ; option byte: 0010 0011 LF222: C5 08 BITB #$08 ; LF224: 27 B2 BEQ LF1D8 ; ; LF226: B1 D2 35 CMPA LD235 ; 166 LF229: 23 16 BLS LF241 ; ; LF22B: D6 30 LDAB L0030 ; mph / 1, filtered LF22D: F1 D4 B4 CMPB LD4B4 ; 20 mph LF230: 23 0F BLS LF241 ; bra if mph <= 20 mph ; LF232: D6 A1 LDAB L00A1 ; BLM, bin val LF234: F1 D4 B5 CMPB LD4B5 ; 112 LF237: 23 08 BLS LF241 ; bra if blm <= 112 ; LF239: 97 7E STAA L007E ; LF23B: D6 DE LDAB L00DE ; status word LF23D: CA 10 ORAB #$10 ; LF23F: 20 07 BRA LF248 ; ; LF241: 7F 00 7E CLR L007E ; LF244: D6 DE LDAB L00DE ; status word LF246: C4 EF ANDB #$EF ; LF248: D7 DE STAB L00DE ; status word LF24A: 5F CLRB ; LF24B: D7 7F STAB L007F ; ; LF24D: D6 00 LDAB L0000 ; status word LF24F: C5 02 BITB #$02 ; b1 LF251: 27 03 BEQ LF256 ; LF253: BD 58 06 JSR L5806 ; HU ; ; ; LF256: D6 05 LDAB L0005 ; LF258: C4 F7 ANDB #$F7 ; 1111 0111 LF25A: 97 7D STAA L007D ; used in egr test, a clsd lp term LF25C: 27 02 BEQ LF260 ; ; LF25E: CA 08 ORAB #$08 ; 0000 1000 ; LF260: D1 05 CMPB L0005 ; LF262: 27 02 BEQ LF266 ; ; LF264: CA 02 ORAB #$02 ; 0000 0010 LF266: D7 05 STAB L0005 ; LF268: 39 RTS ; ;*================================================== ;* ;* Real Time Service Routine 7 ;* ;* IAC stuff ;*================================================== ; ; check which routine to run ; LF269: 96 30 LDAA L0030 ; mph / 1, filtered LF26B: D6 66 LDAB L0066 ; 160Hz rts counter LF26D: C5 10 BITB #$10 ; chk b4 LF26F: 27 31 BEQ LF2A2 ; bra if b4 == 0 ; ; ; ; LF271: B1 D5 2F CMPA LD52F ; 250 LF274: 22 25 BHI LF29B ; bra if mph > 250 mph ; LF276: 96 CA LDAA L00CA ; Delay timer for low BatV IAC step changes LF278: 4C INCA ; LF279: B1 D5 31 CMPA LD531 ; 16 LF27C: 23 21 BLS LF29F ; ; ; ; Do BatV adj to IAC steps ; LF27E: D6 CB LDAB L00CB ; BatV idle bump steps LF280: 96 40 LDAA L0040 ; Battery Volts, * 10, adc cnts LF282: B1 D5 30 CMPA LD530 ; 12.6 v LF285: 24 0F BCC LF296 ; bra if BatV >= 12.6v ; LF287: FB D5 2D ADDB LD52D ; 1, add a step LF28A: 25 05 BCS LF291 ; bra if ovrflw ; LF28C: F1 D5 2E CMPB LD52E ; 12, max allowed to add LF28F: 23 03 BLS LF294 ; ; LF291: F6 D5 2E LDAB LD52E ; 12, use max LF294: 20 06 BRA LF29C ; ; ; LF296: F0 D5 2D SUBB LD52D ; 1, sub a step LF299: 24 01 BCC LF29C ; bra if no undrflw ; LF29B: 5F CLRB ; clr undrflw LF29C: D7 CB STAB L00CB ; IAC steps added for low BatV ; LF29E: 4F CLRA ; ; LF29F: 97 CA STAA L00CA ; Delay timer for low BatV IAC step changes LF2A1: 39 RTS ; ;----------------------------------------------- ; ; ;----------------------------------------------- ; ; IAC stuff ; LF2A2: B1 D5 46 CMPA LD546 ; 25 mph, reset bias LF2A5: 25 03 BCS LF2AA ; bra if mph < 25 mph ; LF2A7: 7F 00 C9 CLR L00C9 ; clear IAC steps, bias ; ; ; ; figure out idle rpm required ; LF2AA: F6 D5 2B LDAB LD52B ; 80, 1000 rpm LF2AD: 96 02 LDAA L0002 ; status word LF2AF: 85 20 BITA #$20 ; b5, b5, aldl mode forced closed loop (10K) LF2B1: 26 0E BNE LF2C1 ; bra if b5 == 1 ; LF2B3: F6 D5 2C LDAB LD52C ; 44, 550 rpm, desired idle LF2B6: 96 10 LDAA L0010 ; status word LF2B8: 85 08 BITA #$08 ; LF2BA: 27 03 BEQ LF2BF ; ; LF2BC: F6 D5 2A LDAB LD52A ; 45, +562.5 rpm LF2BF: DB CB ADDB L00CB ; IAC rpm/12.5 added for low BatV ; LF2C1: D7 CE STAB L00CE ; desired idle rpm ; ; ; chk if want to lag filter TF steps out ; LF2C3: 96 10 LDAA L0010 ; status word LF2C5: 85 40 BITA #$40 ; tst b6, decay out tf steps LF2C7: 27 62 BEQ LF32B ; bra if == 0, do not decay out TF ; ; ; Lag filter Decay the IAC throttle follower ; ; Decide which filt coef to use based on vehicle speed ; LF2C9: B6 D5 39 LDAA LD539 ; filt coef, 32 LF2CC: D6 30 LDAB L0030 ; mph / 1, filtered LF2CE: F1 D5 3E CMPB LD53E ; 5 mph LF2D1: 25 0B BCS LF2DE ; bra if mph < 5 ; LF2D3: B6 D5 3A LDAA LD53A ; filt coef, 16 LF2D6: F1 D5 3F CMPB LD53F ; 20 mph LF2D9: 25 03 BCS LF2DE ; bra if mph < 20 mph ; LF2DB: B6 D5 3B LDAA LD53B ; filt coef, 25 ; LF2DE: 97 4F STAA L004F ; tmp storage LF2E0: 96 C5 LDAA L00C5 ; throttle follower steps, raw LF2E2: 91 C3 CMPA L00C3 ; throttle follower steps, filtered LF2E4: 22 17 BHI LF2FD ; ; LF2E6: B6 D5 40 LDAA LD540 ; 10, min TF steps if mph > 5 LF2E9: F1 D5 3E CMPB LD53E ; 5 mph LF2EC: 25 04 BCS LF2F2 ; bra if mph < 5 ; LF2EE: 91 C5 CMPA L00C5 ; throttle follower steps, raw LF2F0: 24 02 BCC LF2F4 ; ; LF2F2: 96 C5 LDAA L00C5 ; throttle follower steps, raw LF2F4: DE C3 LDX L00C3 ; throttle follower steps, filtered LF2F6: D6 4F LDAB L004F ; filt coef, tmp storage LF2F8: BD FB 40 JSR LFB40 ; Lag Filter LF2FB: DD C3 STD L00C3 ; throttle follower steps, filtered ; ; ; Lag filter IAC ; LF2FD: DE BF LDX L00BF ; IAC steps, lag filtered LF2FF: F6 D5 3C LDAB LD53C ; filt coef, 64 LF302: 4F CLRA ; LF303: BD FB 40 JSR LFB40 ; Lag Filter LF306: DD BF STD L00BF ; IAC steps, lag filtered ; ; ; Lag filter IAC ; LF308: DE C1 LDX L00C1 ; IAC steps, lag filtered LF30A: F6 D5 3D LDAB LD53D ; filt coef, 15 LF30D: 4F CLRA ; LF30E: BD FB 40 JSR LFB40 ; Lag Filter LF311: DD C1 STD L00C1 ; IAC steps, lag filtered ; ; ; see if time to reset 'do TF decay' bit ; LF313: 9A C3 ORAA L00C3 ; throttle follower steps, filtered LF315: 9A BF ORAA L00BF ; IAC steps, lag filtered LF317: 26 06 BNE LF31F ; ; LF319: 96 10 LDAA L0010 ; status word LF31B: 84 BF ANDA #$BF ; clr b6, 1011 1111 LF31D: 97 10 STAA L0010 ; status word ; ; ; ; LF31F: D6 10 LDAB L0010 ; status word LF321: C5 20 BITB #$20 ; LF323: 26 1A BNE LF33F ; ; LF325: 96 CC LDAA L00CC ; LF327: 27 1A BEQ LF343 ; ; LF329: 20 14 BRA LF33F ; ; ; ; ; LF32B: 96 00 LDAA L0000 ; status word LF32D: 85 02 BITA #$02 ; LF32F: 27 0E BEQ LF33F ; ; LF331: 96 11 LDAA L0011 ; LF333: 84 F0 ANDA #$F0 ; LF335: 27 08 BEQ LF33F ; ; LF337: 81 80 CMPA #$80 ; LF339: 27 04 BEQ LF33F ; ; LF33B: 81 90 CMPA #$90 ; LF33D: 26 04 BNE LF343 ; ; LF33F: 96 01 LDAA L0001 ; status word LF341: 2B 06 BMI LF349 ; Engine is Running ; LF343: B6 D5 18 LDAA LD518 ; large err extend, idle too hi LF346: 97 C6 STAA L00C6 ; idle control delay timer LF348: 39 RTS ; ;----------------------------------------------- ; ; Check & decrement counter ; Timer delay for Idle Correction ; ;----------------------------------------------- LF349: 96 C6 LDAA L00C6 ; idle control delay timer LF34B: 27 04 BEQ LF351 ; LF34D: 4A DECA ; LF34E: 97 C6 STAA L00C6 ; idle control delay timer LF350: 39 RTS ; ;----------------------------------------------- ; ; Exec Here if L00C6 == 0, time to adjust idle ; ;----------------------------------------------- LF351: 96 10 LDAA L0010 ; status word LF353: 2A 0C BPL LF361 ; bra if b7 == 0, P/S stall not in effect ; ; ; P/S Stall Saver in Effect ; LF355: B6 D5 13 LDAA LD513 ; 52, 650 rpm to exit stall saver LF358: BB D5 1B ADDA LD51B ; 25 rpm, stall saver hyst? LF35B: 24 06 BCC LF363 ; LF35D: 86 FF LDAA #255 ; LF35F: 20 02 BRA LF363 ; ; ; ; Here for Idle Control Changes ; LF361: 96 CE LDAA L00CE ; desired idle speed ; LF363: 97 CF STAA L00CF ; desired idle rpm / 12.5, final ; ; Lookup IAC delay for idle correction steps ; LF365: CE D5 15 LDX #$D515 ; IAC idle adjust timer table LF368: 90 1D SUBA L001D ; rpm / 12.5, filtered LF36A: 22 09 BHI LF375 ; bra if idle < desired ; ; ; Idle RPM too High ; LF36C: 40 NEGA ; LF36D: B1 D5 19 CMPA LD519 ; neg err bk pt for large gain wd against Delta LF370: 23 0B BLS LF37D ; use this tbl entry ; LF372: 08 INX ; next tbl entry LF373: 20 08 BRA LF37D ; ; ; ; Idle RPM too Low ; LF375: 08 INX ; next tbl, idle too low LF376: 08 INX ; LF377: B1 D5 1A CMPA LD51A ; pos err bk pt for large gain wd against delta LF37A: 23 01 BLS LF37D ; ; LF37C: 08 INX ; next tbl entry ; ; Load Idle Control Delay Value ; LF37D: E6 00 LDAB 0,X ; Get extend/retract Idle corr timer val ; ; ; load a default iac delay for in gr, rpm > 900 ; LF37F: 96 10 LDAA L0010 ; status word LF381: 85 10 BITA #$10 ; pk/neut LF383: 27 0E BEQ LF393 ; bra if not in prk/neut ; LF385: 96 1D LDAA L001D ; rpm / 12.5, filtered LF387: B1 D5 36 CMPA LD536 ; 72, rpm / 12.5, 900 rpm LF38A: 22 07 BHI LF393 ; bra if rpm > 900 rpm ; LF38C: 96 C8 LDAA L00C8 ; LF38E: 27 03 BEQ LF393 ; ; LF390: F6 D5 22 LDAB LD522 ; 1, default delay for in gear, rpm too high ; ; ; ; LF393: D7 C6 STAB L00C6 ; idle control delay timer LF395: 96 C8 LDAA L00C8 ; LF397: 27 03 BEQ LF39C ; bra if L00C8 == 0 ; LF399: 7A 00 C8 DEC L00C8 ; LF39C: D6 0F LDAB L000F ; status word LF39E: C4 33 ANDB #$33 ; LF3A0: 96 20 LDAA L0020 ; LF3A2: 90 1D SUBA L001D ; rpm / 12.5, filtered LF3A4: 24 03 BCC LF3A9 ; LF3A6: CA 04 ORAB #$04 ; LF3A8: 40 NEGA ; LF3A9: B1 D5 1C CMPA LD51C ; LF3AC: 25 02 BCS LF3B0 ; ; LF3AE: CA 08 ORAB #$08 ; LF3B0: 96 1D LDAA L001D ; rpm / 12.5, filtered LF3B2: 97 20 STAA L0020 ; LF3B4: 96 CF LDAA L00CF ; desired idle rpm / 12.5, final LF3B6: 90 1D SUBA L001D ; rpm / 12.5, filtered LF3B8: 24 03 BCC LF3BD ; bra if idle too low ; LF3BA: CA 80 ORAB #$80 ; flag as idle too high LF3BC: 40 NEGA ; ; LF3BD: D7 0F STAB L000F ; status word LF3BF: B1 D5 1B CMPA LD51B ; 25 rpm, stall saver hyst? LF3C2: 24 04 BCC LF3C8 ; ; LF3C4: 7F 00 C8 CLR L00C8 ; LF3C7: 39 RTS ; ;----------------------------------------------- ; ; ;----------------------------------------------- LF3C8: CA 40 ORAB #$40 ; LF3CA: D7 0F STAB L000F ; status word ; LF3CC: 96 30 LDAA L0030 ; mph / 1, filtered LF3CE: 27 05 BEQ LF3D5 ; bra if mph == 0!, do idle control ; LF3D0: 96 10 LDAA L0010 ; status word LF3D2: 2A 3D BPL LF411 ; bra if b7 == 0, P/S stall not in effect LF3D4: 39 RTS ; ;----------------------------------------------- ; ; 0 mph comes here ; ; Allowed to Adjust Idle ; ;----------------------------------------------- LF3D5: 96 43 LDAA L0043 ; tps%, from idle LF3D7: B1 D5 14 CMPA LD514 ; 5, 2%, max allowed for idle adj LF3DA: 22 35 BHI LF411 ; bra if tps > thresh ; LF3DC: 96 10 LDAA L0010 ; status word LF3DE: 85 20 BITA #$20 ; LF3E0: 26 47 BNE LF429 ; bra if b5 == 1, idle too low ; LF3E2: 96 02 LDAA L0002 ; status word LF3E4: 85 20 BITA #$20 ; b5, aldl mode forced closed loop (10K) LF3E6: 26 48 BNE LF430 ; bra if on aldl mode ; LF3E8: B6 D5 36 LDAA LD536 ; 72, rpm / 12.5, 900 rpm LF3EB: D6 CD LDAB L00CD ; LF3ED: 27 34 BEQ LF423 ; ; LF3EF: D6 DF LDAB L00DF ; status word LF3F1: C5 10 BITB #$10 ; LF3F3: 27 1B BEQ LF410 ; ; LF3F5: D6 21 LDAB L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LF3F7: F1 D5 45 CMPB LD545 ; LF3FA: 23 03 BLS LF3FF ; ; LF3FC: B6 D5 35 LDAA LD535 ; 112, rpm / 12.5, 1400 rpm LF3FF: D6 10 LDAB L0010 ; status word LF401: C5 40 BITB #$40 ; LF403: 26 0B BNE LF410 ; ; LF405: D6 C9 LDAB L00C9 ; LF407: 91 1D CMPA L001D ; rpm / 12.5, filtered LF409: 24 05 BCC LF410 ; ; LF40B: 5C INCB ; LF40C: 27 02 BEQ LF410 ; LF40E: D7 C9 STAB L00C9 ; LF410: 39 RTS ; ;----------------------------------------------- ; ; Adjust IAC steps in L00CC ; ; idle adjustment ; ;----------------------------------------------- LF411: 96 CC LDAA L00CC ; either decr | incr, idle control counts LF413: D6 0F LDAB L000F ; status word LF415: 2A 06 BPL LF41D ; IAC, whether L00CC inc'd | dec'd (idle spd) ; ; ; L000F, b7 == 1, idle too high ; LF417: 4D TSTA ; LF418: 27 06 BEQ LF420 ; ; LF41A: 4A DECA ; LF41B: 20 03 BRA LF420 ; ; ; ; L000F, b7 == 0, idle too low ; LF41D: 4C INCA ; LF41E: 27 FA BEQ LF41A ; ; LF420: 97 CC STAA L00CC ; LF422: 39 RTS ; ;----------------------------------------------- ; ; ;----------------------------------------------- LF423: D6 10 LDAB L0010 ; status word LF425: C5 10 BITB #$10 ; LF427: 26 D6 BNE LF3FF ; ; LF429: 96 C9 LDAA L00C9 ; LF42B: B0 D5 37 SUBA LD537 ; 2 LF42E: 24 01 BCC LF431 ; ; LF430: 4F CLRA ; LF431: 97 C9 STAA L00C9 ; LF433: 96 10 LDAA L0010 ; status word LF435: D6 0F LDAB L000F ; status word LF437: 2A 2C BPL LF465 ; ; LF439: D6 CC LDAB L00CC ; LF43B: 27 05 BEQ LF442 ; ; LF43D: 5A DECB ; LF43E: D7 CC STAB L00CC ; LF440: 20 20 BRA LF462 ; ; LF442: 85 08 BITA #$08 ; LF444: 27 15 BEQ LF45B ; LF446: 96 BE LDAA L00BE ; LF448: D6 E4 LDAB L00E4 ; LF44A: 11 CBA ; LF44B: 22 06 BHI LF453 ; ; LF44D: 5D TSTB ; LF44E: 27 01 BEQ LF451 ; ; LF450: 5A DECB ; LF451: D7 E4 STAB L00E4 ; LF453: 4D TSTA ; LF454: 27 2B BEQ LF481 ; ; LF456: 4A DECA ; LF457: 97 BE STAA L00BE ; LF459: 20 07 BRA LF462 ; ; LF45B: 96 E4 LDAA L00E4 ; LF45D: 27 22 BEQ LF481 ; ; LF45F: 4A DECA ; LF460: 97 E4 STAA L00E4 ; LF462: 5F CLRB ; LF463: 20 32 BRA LF497 ; ; LF465: 85 08 BITA #$08 ; LF467: 27 0C BEQ LF475 ; ; LF469: 96 BE LDAA L00BE ; LF46B: B1 D5 33 CMPA LD533 ; 90 LF46E: 24 2B BCC LF49B ; ; LF470: 4C INCA ; LF471: 97 BE STAA L00BE ; LF473: 20 2F BRA LF4A4 ; ; LF475: 96 E4 LDAA L00E4 ; LF477: B1 D5 34 CMPA LD534 ; 56 LF47A: 24 1F BCC LF49B ; ; LF47C: 4C INCA ; LF47D: 97 E4 STAA L00E4 ; LF47F: 20 23 BRA LF4A4 ; LF481: 7C 00 FD INC L00FD ; Current IAC position, steps ; LF484: 96 1D LDAA L001D ; rpm / 12.5, filtered LF486: 90 CE SUBA L00CE ; desired idle speed LF488: 25 D8 BCS LF462 ; ; ; ; IAC diag test? ; LF48A: B0 D4 7F SUBA LD47F ; 6 LF48D: 25 D3 BCS LF462 ; ; LF48F: D6 D0 LDAB L00D0 ; LF491: F1 D4 81 CMPB LD481 ; 0 LF494: 24 08 BCC LF49E ; LF496: 5C INCB ; LF497: D7 D0 STAB L00D0 ; LF499: 20 09 BRA LF4A4 ; ; LF49B: 7A 00 FD DEC L00FD ; Current IAC position, steps LF49E: 96 10 LDAA L0010 ; status word LF4A0: 84 FC ANDA #$FC ; LF4A2: 97 10 STAA L0010 ; status word LF4A4: B6 D4 3A LDAA LD43A ; Diag mask 1, 1111 1111 LF4A7: 85 01 BITA #$01 ; LF4A9: 27 24 BEQ LF4CF ; ; LF4AB: 96 DE LDAA L00DE ; status word LF4AD: 85 40 BITA #$40 ; LF4AF: 27 1E BEQ LF4CF ; ; LF4B1: F6 D5 1E LDAB LD51E ; 22 LF4B4: 96 10 LDAA L0010 ; status word LF4B6: 85 08 BITA #$08 ; LF4B8: 26 08 BNE LF4C2 ; ; LF4BA: D1 E4 CMPB L00E4 ; LF4BC: 23 02 BLS LF4C0 ; ; LF4BE: D7 E4 STAB L00E4 ; LF4C0: 20 0D BRA LF4CF ; ; LF4C2: FB D5 10 ADDB LD510 ; 18 LF4C5: 24 02 BCC LF4C9 ; ; LF4C7: C6 FF LDAB #255 ; LF4C9: D1 BE CMPB L00BE ; LF4CB: 23 02 BLS LF4CF ; ; LF4CD: D7 BE STAB L00BE ; LF4CF: 39 RTS ; ;*================================================== ;* ;* Real Time Service Routine 8 ;* ;*================================================== LF4D0: D6 66 LDAB L0066 ; 160Hz rts counter LF4D2: C5 10 BITB #$10 ; LF4D4: 26 29 BNE LF4FF ; bra if not time to decay knock SA ; ; ; decay out knock retard SA ; LF4D6: D6 0D LDAB L000D ; status word LF4D8: 2B 09 BMI LF4E3 ; bra if in PE/WOT mode ; LF4DA: CE D1 C7 LDX #$D1C7 ; non-PE recovery tbl LF4DD: 96 2E LDAA L002E ; vac LF4DF: C6 48 LDAB #72 ; lwr tbl limit LF4E1: 20 07 BRA LF4EA ; ; LF4E3: CE D1 C2 LDX #$D1C2 ; PE recovery tbl LF4E6: 96 1B LDAA L001B ; rpm / 25 LF4E8: C6 10 LDAB #16 ; lwr tbl limit ; LF4EA: 44 LSRA ; LF4EB: BD FB 83 JSR LFB83 ; 2d lkup w/upr limt in 1st tbl entry, lwr limt in B ; ; LF4EE: D6 6D LDAB L006D ; knock retard SA LF4F0: 3D MUL ; LF4F1: 89 00 ADCA #0 ; LF4F3: 40 NEGA ; LF4F4: 26 02 BNE LF4F8 ; LF4F6: 86 FF LDAA #255 ; ; LF4F8: 9B 6D ADDA L006D ; knock retard SA LF4FA: 25 01 BCS LF4FD ; LF4FC: 4F CLRA ; LF4FD: 97 6D STAA L006D ; knock retard SA ; ; Knock sensor diag test ; LF4FF: B6 D4 3C LDAA LD43C ; diag mask 3, 1111 0011 LF502: 2A 24 BPL LF528 ; LF504: 96 6C LDAA L006C ; LF506: 4C INCA ; LF507: 81 27 CMPA #39 ; LF509: 25 1B BCS LF526 ; ; LF50B: FC BC 0A LDD LBC0A ; Knock counter (PA3) LF50E: 97 49 STAA L0049 ; LF510: D6 09 LDAB L0009 ; status word ; LF512: 90 6B SUBA L006B ; LF514: B1 D4 88 CMPA LD488 ; 235, runaway knock cnts LF517: 25 04 BCS LF51D ; ; LF519: CA 40 ORAB #$40 ; 0100 0000, esc 43 err LF51B: 20 02 BRA LF51F ; ; LF51D: C4 BF ANDB #$BF ; 1011 1111 ; LF51F: D7 09 STAB L0009 ; status word ; LF521: 96 49 LDAA L0049 ; LF523: 97 6B STAA L006B ; LF525: 4F CLRA ; ; LF526: 97 6C STAA L006C ; LF528: 39 RTS ; ;*================================================== ;* ;* Real Time Service Routine D ;* ;* Do Error Diagnostics on Sensors ;*================================================== LF529: D6 66 LDAB L0066 ; 160Hz rts counter LF52B: 96 08 LDAA L0008 ; status word LF52D: C4 F0 ANDB #$F0 ; LF52F: 26 0A BNE LF53B ; LF531: 8A 08 ORAA #8 ; LF533: D6 EC LDAB L00EC ; eng run time, lsb LF535: C5 01 BITB #$01 ; LF537: 26 02 BNE LF53B ; LF539: 8A 10 ORAA #$10 ; LF53B: 97 08 STAA L0008 ; status word ; LF53D: B6 08 81 LDAA L0881 ; MCU1 I/O LF540: 85 40 BITA #$40 ; b6, cal12 (netres) LF542: 26 06 BNE LF54A ; bra if b6, have netres ; LF544: 96 14 LDAA L0014 ; error flag 3 LF546: 8A 08 ORAA #$08 ; set b3, adu/netres error LF548: 97 14 STAA L0014 ; error flag 3 ; LF54A: D6 0A LDAB L000A ; status word LF54C: 96 02 LDAA L0002 ; status word LF54E: 85 10 BITA #$10 ; test b4, aldl shorted mode LF550: 27 5D BEQ LF5AF ; ; LF552: CA 80 ORAB #$80 ; LF554: D7 0A STAB L000A ; status word ; LF556: 7F 00 92 CLR L0092 ; error log timer LF559: 96 01 LDAA L0001 ; status word LF55B: 2A 6C BPL LF5C9 ; Engine is not Running LF55D: D6 0E LDAB L000E ; status word, a/f mode LF55F: 2B 0E BMI LF56F ; bra if closed loop LF561: 96 06 LDAA L0006 ; LF563: 84 F7 ANDA #$F7 ; LF565: 88 40 EORA #64 ; LF567: 97 06 STAA L0006 ; LF569: 85 40 BITA #$40 ; LF56B: 26 37 BNE LF5A4 ; LF56D: 20 2B BRA LF59A ; ; ; LF56F: 96 06 LDAA L0006 ; LF571: 85 08 BITA #$08 ; LF573: 26 15 BNE LF58A ; ; LF575: D6 08 LDAB L0008 ; status word LF577: C5 08 BITB #$08 ; LF579: 27 E6 BEQ LF561 ; ; LF57B: 8A 08 ORAA #8 ; LF57D: 97 06 STAA L0006 ; LF57F: D6 0E LDAB L000E ; status word, a/f mode LF581: C5 40 BITB #$40 ; LF583: 27 1C BEQ LF5A1 ; ; LF585: BD FC 40 JSR LFC40 ; do SES light on LF588: 20 1A BRA LF5A4 ; LF58A: 96 08 LDAA L0008 ; status word LF58C: 85 08 BITA #$08 ; LF58E: 27 14 BEQ LF5A4 ; LF590: 96 06 LDAA L0006 ; LF592: 85 10 BITA #$10 ; LF594: 27 E9 BEQ LF57F ; LF596: 84 EF ANDA #$EF ; LF598: 97 06 STAA L0006 ; LF59A: FC BC 3C LDD LBC3C ; PWM control register LF59D: C5 08 BITB #$08 ; LF59F: 26 E4 BNE LF585 ; LF5A1: BD FC 4B JSR LFC4B ; ; LF5A4: 7F 00 0C CLR L000C ; LF5A7: 96 06 LDAA L0006 ; LF5A9: 8A 04 ORAA #$04 ; LF5AB: 97 06 STAA L0006 ; LF5AD: 20 30 BRA LF5DF ; ; ;----------------------------------------------- ; ; ADU error comes here ; ;----------------------------------------------- LF5AF: C4 7F ANDB #$7F ; LF5B1: D7 0A STAB L000A ; status word LF5B3: 96 06 LDAA L0006 ; LF5B5: 84 E3 ANDA #$E3 ; LF5B7: 97 06 STAA L0006 ; LF5B9: 7F 00 0C CLR L000C ; LF5BC: 96 14 LDAA L0014 ; error flag 3 LF5BE: 84 10 ANDA #$10 ; LF5C0: 27 03 BEQ LF5C5 ; LF5C2: 7E F9 D6 JMP LF9D6 ; ; ; LF5C5: 96 01 LDAA L0001 ; status word LF5C7: 2B 16 BMI LF5DF ; Engine is Running LF5C9: 96 06 LDAA L0006 ; LF5CB: 84 E3 ANDA #$E3 ; 1110 0011 LF5CD: 97 06 STAA L0006 ; LF5CF: 4F CLRA ; clear a bunch of diag timers LF5D0: 97 85 STAA L0085 ; LF5D2: 97 91 STAA L0091 ; timer/counter LF5D4: 97 89 STAA L0089 ; LF5D6: 97 86 STAA L0086 ; diag timer, O2 lean LF5D8: 97 87 STAA L0087 ; diag timer, O2 rich LF5DA: 97 8B STAA L008B ; LF5DC: 7E F9 22 JMP LF922 ; ;----------------------------------------------- ; ; ;----------------------------------------------- LF5DF: 96 08 LDAA L0008 ; status word LF5E1: 85 02 BITA #$02 ; LF5E3: 26 24 BNE LF609 ; LF5E5: D6 EC LDAB L00EC ; eng run time, lsb LF5E7: C1 0A CMPB #10 ; LF5E9: 25 1E BCS LF609 ; LF5EB: 8A 02 ORAA #2 ; LF5ED: 97 08 STAA L0008 ; status word LF5EF: 7C 00 E9 INC L00E9 ; successful start up's (w/o err) LF5F2: 96 E9 LDAA L00E9 ; successful start up's (w/o err) LF5F4: B1 D4 3D CMPA LD43D ; LF5F7: 23 10 BLS LF609 ; LF5F9: 4F CLRA ; clear error flags LF5FA: 97 E1 STAA L00E1 ; error flag 1 LF5FC: 97 E2 STAA L00E2 ; error flag 2 LF5FE: 97 E3 STAA L00E3 ; error flag 3 LF600: 97 E9 STAA L00E9 ; successful start up's (w/o err) LF602: 97 0C STAA L000C ; LF604: BD FD 1A JSR LFD1A ; Do CkSum on Error Flags LF607: 97 EA STAA L00EA ; error flag cksum LF609: D6 08 LDAB L0008 ; status word LF60B: C5 24 BITB #$24 ; LF60D: 26 4A BNE LF659 ; LF60F: 96 0A LDAA L000A ; status word LF611: 85 40 BITA #$40 ; LF613: 26 0E BNE LF623 ; LF615: DC EB LDD L00EB ; eng run time LF617: 04 LSRD ; LF618: F1 D4 42 CMPB LD442 ; LF61B: 25 3C BCS LF659 ; LF61D: 96 0A LDAA L000A ; status word LF61F: 8A 40 ORAA #$40 ; LF621: 97 0A STAA L000A ; status word ;---------------------------------------------- ; ; Test O2 Window ; ;---------------------------------------------- LF623: D6 39 LDAB L0039 ; O2, adc, filtered, round up from L003A LF625: F1 D4 44 CMPB LD444 ; LF628: 22 2F BHI LF659 ; LF62A: F1 D4 43 CMPB LD443 ; LF62D: 23 2A BLS LF659 ; LF62F: D6 88 LDAB L0088 ; LF631: F1 D4 46 CMPB LD446 ; LF634: 22 28 BHI LF65E ; LF636: 96 08 LDAA L0008 ; status word LF638: 85 10 BITA #$10 ; LF63A: 27 28 BEQ LF664 ; LF63C: D6 21 LDAB L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LF63E: F1 D4 47 CMPB LD447 ; LF641: 22 21 BHI LF664 ; LF643: 96 43 LDAA L0043 ; tps%, from idle LF645: B1 D4 45 CMPA LD445 ; LF648: 22 0A BHI LF654 ; LF64A: 7D 00 88 TST L0088 ; LF64D: 27 15 BEQ LF664 ; LF64F: 7A 00 88 DEC L0088 ; LF652: 20 10 BRA LF664 ; LF654: 7C 00 88 INC L0088 ; LF657: 20 0B BRA LF664 ; LF659: 7F 00 88 CLR L0088 ; LF65C: 20 06 BRA LF664 ; LF65E: 96 12 LDAA L0012 ; error flag 1 LF660: 8A 40 ORAA #64 ; LF662: 97 12 STAA L0012 ; error flag 1 ;-------------------------------------------------- ; ; Err 21 Diag Test, TPS ; ;-------------------------------------------------- LF664: D6 08 LDAB L0008 ; status word LF666: C4 FB ANDB #$FB ; LF668: 96 42 LDAA L0042 ; tps, adc cnts, volts = n * .0196 LF66A: B1 D4 4F CMPA LD44F ; LF66D: 23 13 BLS LF682 ; LF66F: 96 85 LDAA L0085 ; LF671: B1 D4 50 CMPA LD450 ; LF674: 22 11 BHI LF687 ; LF676: 96 FE LDAA L00FE ; baro pressure, A/D cnts LF678: B1 D4 51 CMPA LD451 ; LF67B: 24 05 BCC LF682 ; LF67D: 7C 00 85 INC L0085 ; LF680: 20 0D BRA LF68F ; LF682: 7F 00 85 CLR L0085 ; LF685: 20 08 BRA LF68F ; LF687: 96 12 LDAA L0012 ; error flag 1 LF689: 8A 08 ORAA #8 ; LF68B: 97 12 STAA L0012 ; error flag 1 LF68D: CA 04 ORAB #4 ; LF68F: D7 08 STAB L0008 ; status word ;-------------------------------------------------- ; ; Err 24 Diag Test, VSS ; ;-------------------------------------------------- LF691: 96 08 LDAA L0008 ; status word LF693: D6 DE LDAB L00DE ; status word LF695: 85 E4 BITA #$E4 ; LF697: 26 2E BNE LF6C7 ; ; LF699: 96 30 LDAA L0030 ; mph / 1, filtered LF69B: B1 D4 59 CMPA LD459 ; 5 LF69E: 22 27 BHI LF6C7 ; bra if > 5 mph ; LF6A0: 96 91 LDAA L0091 ; timer/counter LF6A2: B1 D4 5E CMPA LD45E ; 5 LF6A5: 22 32 BHI LF6D9 ; ; LF6A7: 96 28 LDAA L0028 ; map adc value, raw LF6A9: B1 D4 5C CMPA LD45C ; 40 LF6AC: 24 19 BCC LF6C7 ; ; LF6AE: 96 10 LDAA L0010 ; status word LF6B0: 85 10 BITA #$10 ; LF6B2: 26 13 BNE LF6C7 ; ; LF6B4: 96 43 LDAA L0043 ; tps%, from idle LF6B6: B1 D4 5D CMPA LD45D ; 8 LF6B9: 24 0C BCC LF6C7 ; bra if tps% > 8 ; LF6BB: 96 1A LDAA L001A ; rpm scaled LF6BD: B1 D4 5A CMPA LD45A ; 64 LF6C0: 23 05 BLS LF6C7 ; ; LF6C2: B1 D4 5B CMPA LD45B ; 240 LF6C5: 23 07 BLS LF6CE ; ; ; ; LF6C7: 7F 00 91 CLR L0091 ; timer/counter LF6CA: C4 BF ANDB #$BF ; clr b6 of L00DE LF6CC: 20 13 BRA LF6E1 ; ; LF6CE: 96 08 LDAA L0008 ; status word LF6D0: 85 08 BITA #$08 ; LF6D2: 27 0F BEQ LF6E3 ; LF6D4: 7C 00 91 INC L0091 ; timer/counter LF6D7: 20 0A BRA LF6E3 ; ; ; ; ; LF6D9: 96 12 LDAA L0012 ; error flag 1 LF6DB: 8A 01 ORAA #1 ; LF6DD: 97 12 STAA L0012 ; error flag 1 LF6DF: CA 40 ORAB #$40 ; b6, 0100 0000 ; LF6E1: D7 DE STAB L00DE ; status word ; ;-------------------------------------------------- ; ; Err 32 Diag Test, EGR ; ;-------------------------------------------------- LF6E3: D6 0B LDAB L000B ; ; LF6E5: CE D4 3B LDX #$D43B ; diag mask 2, 1011 1001 LF6E8: A6 00 LDAA 0,X ; LF6EA: 85 20 BITA #$20 ; LF6EC: 27 49 BEQ LF737 ; ; LF6EE: C5 08 BITB #$08 ; LF6F0: 26 45 BNE LF737 ; ; LF6F2: C5 10 BITB #$10 ; LF6F4: 26 0B BNE LF701 ; ; LF6F6: 96 8B LDAA L008B ; LF6F8: A1 25 CMPA 37,X ; LF6FA: 25 48 BCS LF744 ; ; LF6FC: CA 10 ORAB #16 ; LF6FE: 7F 00 8B CLR L008B ; LF701: 96 05 LDAA L0005 ; LF703: 47 ASRA ; LF704: 24 31 BCC LF737 ; ; LF706: 96 2E LDAA L002E ; vac LF708: A1 26 CMPA 38,X ; LF70A: 23 2B BLS LF737 ; LF70C: A1 27 CMPA 39,X ; LF70E: 22 27 BHI LF737 ; ; LF710: 96 43 LDAA L0043 ; tps%, from idle LF712: A1 28 CMPA 40,X ; LF714: 23 21 BLS LF737 ; ; LF716: A1 29 CMPA 41,X ; LF718: 22 1D BHI LF737 ; ; LF71A: 90 45 SUBA L0045 ; tps%, slow filtered LF71C: 24 01 BCC LF71F ; ; LF71E: 40 NEGA ; LF71F: A1 2C CMPA 44,X ; LF721: 22 14 BHI LF737 ; ; LF723: 96 30 LDAA L0030 ; mph / 1, filtered LF725: A1 2F CMPA 47,X ; LF727: 25 0E BCS LF737 ; ; LF729: B6 D0 07 LDAA LD007 ; option byte: 0010 0100 LF72C: 2B 21 BMI LF74F ; ; LF72E: B8 08 01 EORA L0801 ; MCU2 I/O LF731: 84 28 ANDA #$28 ; LF733: 81 08 CMPA #8 ; LF735: 27 18 BEQ LF74F ; ; ; ;-------------------------------------------------- ; ; ;-------------------------------------------------- LF737: C5 04 BITB #$04 ; LF739: 27 02 BEQ LF73D ; ; LF73B: C4 EF ANDB #$EF ; LF73D: C4 FB ANDB #$FB ; LF73F: 7F 00 8B CLR L008B ; LF742: 20 5A BRA LF79E ; ; ; LF744: 96 08 LDAA L0008 ; status word LF746: 85 08 BITA #$08 ; LF748: 27 F8 BEQ LF742 ; ; LF74A: 7C 00 8B INC L008B ; LF74D: 20 F3 BRA LF742 ; ; LF74F: 96 7C LDAA L007C ; N/V ratio LF751: A1 35 CMPA 53,X ; LF753: 23 E2 BLS LF737 ; ; LF755: A1 34 CMPA 52,X ; LF757: 24 DE BCC LF737 ; ; LF759: 96 2E LDAA L002E ; vac LF75B: 40 NEGA ; LF75C: C5 04 BITB #$04 ; LF75E: 26 0C BNE LF76C ; ; LF760: 97 8E STAA L008E ; LF762: 96 8B LDAA L008B ; LF764: A1 2A CMPA 42,X ; LF766: 23 E2 BLS LF74A ; ; LF768: CA 04 ORAB #4 ; LF76A: 20 D3 BRA LF73F ; ; LF76C: 90 8E SUBA L008E ; LF76E: 25 04 BCS LF774 ; ; LF770: A1 2E CMPA 46,X ; LF772: 24 15 BCC LF789 ; ; LF774: 96 8B LDAA L008B ; LF776: A1 2D CMPA 45,X ; LF778: 25 D0 BCS LF74A ; ; LF77A: 96 8F LDAA L008F ; LF77C: 4C INCA ; LF77D: A1 2B CMPA 43,X ; LF77F: 25 04 BCS LF785 ; ; LF781: CA 01 ORAB #1 ; LF783: A6 2B LDAA 43,X ; LF785: 97 8F STAA L008F ; LF787: 20 B2 BRA LF73B ; ; LF789: 96 8F LDAA L008F ; LF78B: A0 30 SUBA 48,X ; LF78D: 22 F6 BHI LF785 ; ; LF78F: 4F CLRA ; LF790: C4 FE ANDB #$FE ; LF792: 97 8F STAA L008F ; LF794: B6 D0 06 LDAA LD006 ; option byte: 0001 0001 LF797: 47 ASRA ; LF798: 24 A1 BCC LF73B ; do not branch ; LF79A: CA 08 ORAB #8 ; LF79C: 20 9D BRA LF73B ; ; LF79E: D7 0B STAB L000B ; LF7A0: C5 01 BITB #$01 ; LF7A2: 27 0C BEQ LF7B0 ; ; LF7A4: 96 13 LDAA L0013 ; error flag 2 LF7A6: 8A 20 ORAA #$20 ; LF7A8: 97 13 STAA L0013 ; error flag 2 LF7AA: 96 DF LDAA L00DF ; status word LF7AC: 8A 20 ORAA #$20 ; LF7AE: 97 DF STAA L00DF ; status word ;-------------------------------------------------- ; ; Err 33 Diag Test, Map Hi ; ;-------------------------------------------------- LF7B0: D6 08 LDAB L0008 ; status word LF7B2: C4 BF ANDB #$BF ; LF7B4: C5 24 BITB #$24 ; LF7B6: 26 20 BNE LF7D8 ; LF7B8: B6 D4 72 LDAA LD472 ; LF7BB: 91 FE CMPA L00FE ; baro pressure, A/D cnts LF7BD: 23 02 BLS LF7C1 ; LF7BF: 96 FE LDAA L00FE ; baro pressure, A/D cnts LF7C1: 91 2A CMPA L002A ; adc map val, raw? LF7C3: 24 13 BCC LF7D8 ; LF7C5: 96 89 LDAA L0089 ; LF7C7: B1 D4 73 CMPA LD473 ; LF7CA: 22 11 BHI LF7DD ; LF7CC: 96 43 LDAA L0043 ; tps%, from idle LF7CE: B0 D4 71 SUBA LD471 ; LF7D1: 24 05 BCC LF7D8 ; LF7D3: 7C 00 89 INC L0089 ; LF7D6: 20 0D BRA LF7E5 ; LF7D8: 7F 00 89 CLR L0089 ; LF7DB: 20 08 BRA LF7E5 ; LF7DD: 96 13 LDAA L0013 ; error flag 2 LF7DF: 8A 10 ORAA #$10 ; LF7E1: 97 13 STAA L0013 ; error flag 2 LF7E3: CA 40 ORAB #$40 ; LF7E5: D7 08 STAB L0008 ; status word ; ;-------------------------------------------------- ; ; Err 42 Diag Test, EST ; ;-------------------------------------------------- LF7E7: 96 02 LDAA L0002 ; status word LF7E9: 85 08 BITA #$08 ; LF7EB: 26 36 BNE LF823 ; LF7ED: 96 66 LDAA L0066 ; 160Hz rts counter LF7EF: 85 10 BITA #$10 ; LF7F1: 26 30 BNE LF823 ; LF7F3: 96 01 LDAA L0001 ; status word LF7F5: 85 40 BITA #$40 ; LF7F7: 27 2A BEQ LF823 ; LF7F9: 5F CLRB ; LF7FA: FE BC 06 LDX LBC06 ; EST Circuit LF7FD: B6 08 81 LDAA L0881 ; MCU1 I/O LF800: 85 20 BITA #$20 ; LF802: 27 1B BEQ LF81F ; LF804: 96 1A LDAA L001A ; rpm scaled LF806: B1 D4 82 CMPA LD482 ; LF809: 23 14 BLS LF81F ; LF80B: 9C 93 CPX L0093 ; EST circuit data LF80D: 26 10 BNE LF81F ; LF80F: D6 95 LDAB L0095 ; err 42A cnt'r LF811: F1 D4 85 CMPB LD485 ; 4, Num of EST faults for 42B LF814: 22 03 BHI LF819 ; LF816: 5C INCB ; LF817: 20 06 BRA LF81F ; LF819: 96 DE LDAA L00DE ; status word LF81B: 8A 80 ORAA #128 ; LF81D: 97 DE STAA L00DE ; status word LF81F: D7 95 STAB L0095 ; err 42A cnt'r LF821: DF 93 STX L0093 ; EST circuit data LF823: B6 D4 3C LDAA LD43C ; diag mask 3, 1111 0011 LF826: 2A 6D BPL LF895 ; ; LF828: DE EB LDX L00EB ; eng run time LF82A: BC D4 86 CPX LD486 ; 240 sec's LF82D: 23 66 BLS LF895 ; ; LF82F: D6 09 LDAB L0009 ; status word LF831: 2A 04 BPL LF837 ; ; LF833: C4 DF ANDB #$DF ; LF835: 20 5C BRA LF893 ; ; LF837: C5 20 BITB #$20 ; LF839: 26 5A BNE LF895 ; ; LF83B: 96 02 LDAA L0002 ; status word LF83D: 85 38 BITA #$38 ; LF83F: 26 54 BNE LF895 ; ; LF841: C5 10 BITB #$10 ; LF843: 27 0E BEQ LF853 ; ; LF845: 85 02 BITA #$02 ; LF847: 26 0A BNE LF853 ; ; LF849: D6 0D LDAB L000D ; status word LF84B: 2B 48 BMI LF895 ; bra if in PE/WOT mode ; LF84D: 8A 02 ORAA #2 ; LF84F: 97 02 STAA L0002 ; status word LF851: 20 42 BRA LF895 ; ; LF853: 96 0D LDAA L000D ; status word LF855: 2A 3E BPL LF895 ; bra if not in PE/WOT mode ; LF857: 96 08 LDAA L0008 ; status word LF859: 85 C0 BITA #$C0 ; LF85B: 26 38 BNE LF895 ; ; LF85D: 96 00 LDAA L0000 ; status word LF85F: 9A DE ORAA L00DE ; status word LF861: 2B 32 BMI LF895 ; LF863: 96 0A LDAA L000A ; status word LF865: 85 08 BITA #$08 ; LF867: 26 2C BNE LF895 ; LF869: 96 1B LDAA L001B ; rpm / 25 LF86B: B1 D4 8C CMPA LD48C ; 160, 4000 rpm, max limit LF86E: 22 25 BHI LF895 ; ; LF870: 96 25 LDAA L0025 ; s/d map, KPa = (N * 0.3125) + 20 LF872: B1 D4 8D CMPA LD48D ; 196, 81.25 KPa, min limit LF875: 23 1E BLS LF895 ; ; LF877: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LF879: B1 D4 8A CMPA LD48A ; 53, ~87c LF87C: 24 17 BCC LF895 ; ; LF87E: B1 D4 8B CMPA LD48B ; 12, ~150c LF881: 23 12 BLS LF895 ; ; LF883: 96 90 LDAA L0090 ; knock test timer, ESC 43 LF885: 4C INCA ; LF886: B1 D4 89 CMPA LD489 ; 5, timer val LF889: 23 0B BLS LF896 ; LF88B: C5 10 BITB #$10 ; LF88D: 27 02 BEQ LF891 ; LF88F: CA 20 ORAB #$20 ; ; LF891: CA 10 ORAB #$10 ; LF893: D7 09 STAB L0009 ; status word ; LF895: 4F CLRA ; LF896: 97 90 STAA L0090 ; knock test timer, ESC 43 LF898: 96 09 LDAA L0009 ; status word LF89A: 85 60 BITA #$60 ; LF89C: 27 06 BEQ LF8A4 ; LF89E: 96 14 LDAA L0014 ; error flag 3 LF8A0: 8A 80 ORAA #$80 ; set b7, knock cnt'l failure LF8A2: 97 14 STAA L0014 ; error flag 3 ;-------------------------------------------------- ; ; Error 44 test, O2 Lean ; ;-------------------------------------------------- LF8A4: D6 0A LDAB L000A ; status word LF8A6: C4 FD ANDB #$FD ; LF8A8: B6 D4 91 LDAA LD491 ; 251mV, low limit LF8AB: 91 3C CMPA L003C ; O2, major loop filtered (slow) LF8AD: 23 1A BLS LF8C9 ; LF8AF: 96 86 LDAA L0086 ; diag timer, O2 lean LF8B1: B1 D4 92 CMPA LD492 ; diag timer val, 50 LF8B4: 22 18 BHI LF8CE ; LF8B6: 96 0E LDAA L000E ; status word, a/f mode LF8B8: 2A 0F BPL LF8C9 ; bra if not closed loop LF8BA: C5 04 BITB #$04 ; LF8BC: 26 0B BNE LF8C9 ; LF8BE: 96 08 LDAA L0008 ; status word LF8C0: 85 08 BITA #$08 ; LF8C2: 27 12 BEQ LF8D6 ; LF8C4: 7C 00 86 INC L0086 ; diag timer, O2 lean LF8C7: 20 0D BRA LF8D6 ; LF8C9: 7F 00 86 CLR L0086 ; diag timer, O2 lean LF8CC: 20 08 BRA LF8D6 ; LF8CE: 96 14 LDAA L0014 ; error flag 3 LF8D0: 8A 40 ORAA #$40 ; LF8D2: 97 14 STAA L0014 ; error flag 3 LF8D4: CA 02 ORAB #$02 ; ;-------------------------------------------------- ; ; Error 45 test, O2 Rich ; ;-------------------------------------------------- LF8D6: 96 3C LDAA L003C ; O2, major loop filtered (slow) LF8D8: B1 D4 93 CMPA LD493 ; 751 mvdc, O2 sensor hi limit LF8DB: 23 26 BLS LF903 ; ; LF8DD: 96 87 LDAA L0087 ; diag timer, O2 rich LF8DF: B1 D4 94 CMPA LD494 ; LF8E2: 22 24 BHI LF908 ; LF8E4: 96 0E LDAA L000E ; status word, a/f mode LF8E6: 2A 1B BPL LF903 ; bra if not closed loop LF8E8: C5 04 BITB #$04 ; LF8EA: 26 17 BNE LF903 ; LF8EC: 96 43 LDAA L0043 ; tps%, from idle LF8EE: B1 D4 95 CMPA LD495 ; 20%, tps hi limit LF8F1: 22 05 BHI LF8F8 ; LF8F3: B1 D4 96 CMPA LD496 ; 0%, tps hi limit LF8F6: 24 0B BCC LF903 ; LF8F8: 96 08 LDAA L0008 ; status word LF8FA: 85 08 BITA #$08 ; LF8FC: 27 12 BEQ LF910 ; LF8FE: 7C 00 87 INC L0087 ; diag timer, O2 rich LF901: 20 0D BRA LF910 ; LF903: 7F 00 87 CLR L0087 ; diag timer, O2 rich LF906: 20 08 BRA LF910 ; LF908: 96 14 LDAA L0014 ; error flag 3 LF90A: 8A 20 ORAA #32 ; LF90C: 97 14 STAA L0014 ; error flag 3 LF90E: CA 02 ORAB #2 ; LF910: C4 FB ANDB #$FB ; LF912: D7 0A STAB L000A ; status word ;-------------------------------------------------- ; ;-------------------------------------------------- LF914: 96 09 LDAA L0009 ; status word LF916: 84 02 ANDA #$02 ; LF918: 9A 14 ORAA L0014 ; error flag 3 LF91A: 97 14 STAA L0014 ; error flag 3 LF91C: 96 06 LDAA L0006 ; LF91E: 85 04 BITA #$04 ; LF920: 26 0D BNE LF92F ; LF922: 96 0A LDAA L000A ; status word LF924: 2A 03 BPL LF929 ; LF926: 7E F9 EA JMP LF9EA ; ;----------------------------------------------- ; ; ;----------------------------------------------- LF929: 96 00 LDAA L0000 ; status word LF92B: 85 10 BITA #$10 ; engine shutdown LF92D: 27 03 BEQ LF932 ; LF92F: 7E F9 D9 JMP LF9D9 ; ;----------------------------------------------- ; ; do stuff with error flags ; ;----------------------------------------------- LF932: BD FC CB JSR LFCCB ; Setup error flag masks into RAM LF935: 96 15 LDAA L0015 ; LF937: 9A 16 ORAA L0016 ; LF939: 9A 17 ORAA L0017 ; LF93B: 26 1F BNE LF95C ; LF93D: DC 12 LDD L0012 ; error flag 1 LF93F: 94 49 ANDA L0049 ; LF941: D4 4A ANDB L004A ; LF943: DD 15 STD L0015 ; LF945: 96 14 LDAA L0014 ; error flag 3 LF947: 94 4B ANDA L004B ; LF949: 97 17 STAA L0017 ; LF94B: 96 92 LDAA L0092 ; error log timer LF94D: 27 05 BEQ LF954 ; LF94F: 7A 00 92 DEC L0092 ; error log timer LF952: 20 61 BRA LF9B5 ; LF954: 96 0A LDAA L000A ; status word LF956: 84 FE ANDA #$FE ; LF958: 97 0A STAA L000A ; status word LF95A: 20 59 BRA LF9B5 ; ;-------------------------------------------------- ;-------------------------------------------------- LF95C: CE 00 03 LDX #$0003 ; LF95F: 4F CLRA ; LF960: E6 11 LDAB 17,X ; LF962: E4 14 ANDB 20,X ; LF964: E4 48 ANDB 72,X ; LF966: E7 14 STAB 20,X ; LF968: 27 01 BEQ LF96B ; LF96A: 4C INCA ; LF96B: 09 DEX ; LF96C: 26 F2 BNE LF960 ; LF96E: 7C 00 92 INC L0092 ; error log timer LF971: D6 0A LDAB L000A ; status word LF973: 4D TSTA ; LF974: 26 11 BNE LF987 ; LF976: 57 ASRB ; LF977: F6 D4 3E LDAB LD43E ; error log time constant 1, 1 sec LF97A: 24 03 BCC LF97F ; LF97C: F6 D4 40 LDAB LD440 ; error log time constant 3, 10 sec LF97F: D1 92 CMPB L0092 ; error log timer LF981: 22 32 BHI LF9B5 ; LF983: D7 92 STAB L0092 ; error log timer LF985: 20 2E BRA LF9B5 ; LF987: 57 ASRB ; LF988: F6 D4 3F LDAB LD43F ; error log time constant 2, 2 sec LF98B: 24 03 BCC LF990 ; LF98D: F6 D4 41 LDAB LD441 ; error log time constant 4, 12 sec LF990: D1 92 CMPB L0092 ; error log timer LF992: 22 21 BHI LF9B5 ; LF994: B6 D4 40 LDAA LD440 ; error log time constant 3, 10 sec LF997: 97 92 STAA L0092 ; error log timer LF999: 96 0A LDAA L000A ; status word LF99B: 8A 01 ORAA #1 ; LF99D: 97 0A STAA L000A ; status word LF99F: 5F CLRB ; ; LF9A0: CE 00 03 LDX #$0003 ; ; LF9A3: A6 E0 LDAA $E0,X ; LF9A5: AA 14 ORAA $14,X ; LF9A7: A7 E0 STAA $E0,X ; LF9A9: E7 14 STAB $14,X ; LF9AB: 09 DEX ; LF9AC: 26 F5 BNE LF9A3 ; ; LF9AE: D7 E9 STAB L00E9 ; successful start up's (w/o err) LF9B0: BD FD 1A JSR LFD1A ; Do CkSum on Error Flags LF9B3: 97 EA STAA L00EA ; error flag cksum LF9B5: 96 01 LDAA L0001 ; status word LF9B7: 2B 08 BMI LF9C1 ; Engine is Running LF9B9: 85 02 BITA #$02 ; LF9BB: 26 19 BNE LF9D6 ; LF9BD: 8A 02 ORAA #2 ; LF9BF: 20 02 BRA LF9C3 ; LF9C1: 84 FD ANDA #$FD ; LF9C3: 97 01 STAA L0001 ; status word LF9C5: 96 02 LDAA L0002 ; status word LF9C7: 85 08 BITA #$08 ; LF9C9: 26 0B BNE LF9D6 ; LF9CB: 96 0A LDAA L000A ; status word LF9CD: 85 01 BITA #$01 ; LF9CF: 26 05 BNE LF9D6 ; LF9D1: BD FC 4B JSR LFC4B ; do SES light off LF9D4: 20 03 BRA LF9D9 ; ; LF9D6: BD FC 40 JSR LFC40 ; do SES light on LF9D9: 96 08 LDAA L0008 ; status word LF9DB: 84 E7 ANDA #$E7 ; LF9DD: 97 08 STAA L0008 ; status word LF9DF: 4F CLRA ; LF9E0: 5F CLRB ; LF9E1: DD 12 STD L0012 ; error flag 1 LF9E3: 96 14 LDAA L0014 ; error flag 3 LF9E5: 84 10 ANDA #$10 ; LF9E7: 97 14 STAA L0014 ; error flag 3 LF9E9: 39 RTS ; ;*================================================== ;* ;* Do Blink Out of Error Codes ;* ;*================================================== LF9EA: 96 0C LDAA L000C ; LF9EC: 85 40 BITA #$40 ; LF9EE: 27 4B BEQ LFA3B ; LF9F0: 7A 00 84 DEC L0084 ; LF9F3: 26 E4 BNE LF9D9 ; LF9F5: 85 10 BITA #$10 ; LF9F7: 27 0A BEQ LFA03 ; LF9F9: 84 EF ANDA #$EF ; LF9FB: C6 04 LDAB #4 ; LF9FD: 97 0C STAA L000C ; LF9FF: D7 84 STAB L0084 ; LFA01: 20 CE BRA LF9D1 ; LFA03: 85 20 BITA #$20 ; LFA05: 26 0A BNE LFA11 ; LFA07: D6 80 LDAB L0080 ; LFA09: 26 0F BNE LFA1A ; LFA0B: C6 08 LDAB #$08 ; LFA0D: 8A 20 ORAA #$20 ; LFA0F: 20 EC BRA LF9FD ; LFA11: D6 81 LDAB L0081 ; LFA13: 27 12 BEQ LFA27 ; LFA15: 7A 00 81 DEC L0081 ; LFA18: 20 03 BRA LFA1D ; LFA1A: 7A 00 80 DEC L0080 ; LFA1D: 8A 10 ORAA #$10 ; LFA1F: 97 0C STAA L000C ; LFA21: 86 04 LDAA #4 ; LFA23: 97 84 STAA L0084 ; LFA25: 20 AF BRA LF9D6 ; LFA27: D6 82 LDAB L0082 ; LFA29: 85 03 BITA #$03 ; LFA2B: 27 04 BEQ LFA31 ; LFA2D: 80 21 SUBA #33 ; LFA2F: 20 37 BRA LFA68 ; LFA31: 96 83 LDAA L0083 ; LFA33: 5C INCB ; LFA34: C1 1A CMPB #26 ; LFA36: 25 05 BCS LFA3D ; LFA38: 4F CLRA ; LFA39: 20 C2 BRA LF9FD ; LFA3B: C6 02 LDAB #2 ; LFA3D: C1 02 CMPB #2 ; LFA3F: 26 08 BNE LFA49 ; LFA41: 96 E1 LDAA L00E1 ; LFA43: B4 D4 3A ANDA LD43A ; Diag mask 1, 1111 1111 LFA46: 49 ROLA ; LFA47: 20 19 BRA LFA62 ; LFA49: C1 0A CMPB #10 ; LFA4B: 26 07 BNE LFA54 ; LFA4D: 96 E2 LDAA L00E2 ; LFA4F: B4 D4 3B ANDA LD43B ; diag mask 2, 1011 1001 LFA52: 20 0B BRA LFA5F ; LFA54: C1 12 CMPB #$12 ; LFA56: 26 07 BNE LFA5F ; LFA58: B6 D4 3C LDAA LD43C ; diag mask 3, 1111 0011 LFA5B: 8A 10 ORAA #16 ; LFA5D: 94 E3 ANDA L00E3 ; LFA5F: 49 ROLA ; LFA60: 24 D1 BCC LFA33 ; LFA62: 97 83 STAA L0083 ; LFA64: D7 82 STAB L0082 ; LFA66: 86 42 LDAA #66 ; LFA68: 97 0C STAA L000C ; LFA6A: 4F CLRA ; LFA6B: 4C INCA ; LFA6C: C0 05 SUBB #5 ; LFA6E: 22 FB BHI LFA6B ; LFA70: CB 05 ADDB #5 ; LFA72: 97 80 STAA L0080 ; LFA74: D7 81 STAB L0081 ; LFA76: C6 1C LDAB #28 ; LFA78: 20 85 BRA LF9FF ; ;----------------------------------------------- ; ;----------------------------------------------- LFA7A: A6 00 LDAA 0,X ; LFA7C: 81 03 CMPA #3 ; LFA7E: 26 04 BNE LFA84 ; get map | vac variable ; LFA80: 96 43 LDAA L0043 ; tps%, from idle LFA82: 20 0A BRA LFA8E ; ;*================================================== ;* ;* SubRoutine ;* ;* Get s/d map or vac depending upon value ;* pointed to by X ;* ;* *X == 0, use vac ;* *X != 0, use s/d map ;* ;*================================================== LFA84: A6 00 LDAA 0,X ; get flag val LFA86: 26 04 BNE LFA8C ; bra if != 0 ; LFA88: 96 2E LDAA L002E ; vac LFA8A: 20 02 BRA LFA8E ; ; LFA8C: 96 25 LDAA L0025 ; s/d map, KPa = (N * 0.3125) + 20 ; LFA8E: 08 INX ; inc X to beginning of table LFA8F: 39 RTS ; ;----------------------------------------------- ; ; Do default map if errors ; ;----------------------------------------------- LFA90: 96 2A LDAA L002A ; adc map val, raw LFA92: D6 08 LDAB L0008 ; status word LFA94: C5 C0 BITB #$C0 ; map errs? LFA96: 27 28 BEQ LFAC0 ; bra if map OK ; ; ; map sensor failed, create a map val from tps & rpm ; LFA98: D6 01 LDAB L0001 ; status word LFA9A: 2A 21 BPL LFABD ; Engine is not Running LFA9C: B6 D4 79 LDAA LD479 ; 146 LFA9F: D6 43 LDAB L0043 ; tps%, from idle LFAA1: 3D MUL ; LFAA2: 05 LSLD ; LFAA3: 25 18 BCS LFABD ; LFAA5: 05 LSLD ; LFAA6: 25 15 BCS LFABD ; LFAA8: 36 PSHA ; LFAA9: 96 1B LDAA L001B ; rpm / 25 LFAAB: 44 LSRA ; LFAAC: CE D4 7A LDX #$D47A ; Map Bias Default vs Rpm LFAAF: C6 10 LDAB #16 ; LFAB1: BD FB 83 JSR LFB83 ; 2d lkup w/upr limt in 1st tbl entry, lwr limt in B LFAB4: 33 PULB ; LFAB5: 1B ABA ; LFAB6: 25 05 BCS LFABD ; ; LFAB8: B1 D4 78 CMPA LD478 ; 218, max adc map on error LFABB: 23 03 BLS LFAC0 ; LFABD: B6 D4 78 LDAA LD478 ; 218 ; LFAC0: F6 D0 0C LDAB LD00C ; filt coef, 240 LFAC3: DE 28 LDX L0028 ; map adc value, raw LFAC5: 8D 79 BSR LFB40 ; Lag Filter LFAC7: DD 28 STD L0028 ; map adc value, raw ; ; ; create map term for BPW & gms/sec calc's ; ; L002B = ((MapAdc * 189) / 256) + 21 ; LFAC9: CE 00 28 LDX #$0028 ; map adc value, raw LFACC: 86 BD LDAA #189 ; LFACE: BD FC 05 JSR LFC05 ; AB = (A x *X) / 256 LFAD1: C3 15 32 ADDD #5426 ; 21d & 50d LFAD4: 97 2B STAA L002B ; map term for BPW & gms/sec calc's ; ; ; do aldl stuff ; LFAD6: CC 01 1F LDD #$11F ; LFAD9: FD BC 12 STD LBC12 ; ALDL serial data LFADC: 96 70 LDAA L0070 ; LFADE: 26 43 BNE LFB23 ; LFAE0: 86 08 LDAA #8 ; LFAE2: 97 70 STAA L0070 ; LFAE4: 96 06 LDAA L0006 ; LFAE6: 47 ASRA ; LFAE7: 24 25 BCC LFB0E ; LFAE9: CE FE 3B LDX #$FE3B ; LFAEC: C6 0C LDAB #12 ; LFAEE: 96 1A LDAA L001A ; rpm scaled LFAF0: 27 47 BEQ LFB39 ; LFAF2: 3A ABX ; LFAF3: 80 10 SUBA #16 ; LFAF5: 22 FB BHI LFAF2 ; LFAF7: D6 71 LDAB L0071 ; aldl byte count LFAF9: C1 0B CMPB #11 ; LFAFB: 24 1E BCC LFB1B ; LFAFD: 54 LSRB ; LFAFE: 24 04 BCC LFB04 ; LFB00: 96 22 LDAA L0022 ; startup coolant, adc inverse LFB02: 20 30 BRA LFB34 ; LFB04: 58 LSLB ; LFB05: 3A ABX ; LFB06: EE 00 LDX 0,X ; LFB08: EC 00 LDD 0,X ; LFB0A: D7 22 STAB L0022 ; startup coolant, adc inverse LFB0C: 20 26 BRA LFB34 ; LFB0E: 96 02 LDAA L0002 ; status word LFB10: D6 71 LDAB L0071 ; aldl byte count LFB12: 27 20 BEQ LFB34 ; LFB14: CE D4 14 LDX #$D414 ; LFB17: C1 14 CMPB #20 ; LFB19: 25 12 BCS LFB2D ; LFB1B: 4F CLRA ; LFB1C: 97 71 STAA L0071 ; aldl byte count LFB1E: 4A DECA ; LFB1F: 97 72 STAA L0072 ; aldl data byte LFB21: 20 1C BRA LFB3F ; LFB23: 7A 00 70 DEC L0070 ; LFB26: 78 00 72 LSL L0072 ; aldl data byte LFB29: 24 0E BCC LFB39 ; LFB2B: 20 12 BRA LFB3F ; LFB2D: 5A DECB ; LFB2E: 58 LSLB ; LFB2F: 3A ABX ; LFB30: EE 00 LDX 0,X ; LFB32: A6 00 LDAA 0,X ; LFB34: 97 72 STAA L0072 ; aldl data byte LFB36: 7C 00 71 INC L0071 ; aldl byte count LFB39: CC 00 17 LDD #23 ; LFB3C: FD BC 12 STD LBC12 ; ALDL serial data LFB3F: 39 RTS ; ;*================================================== ;* ;* Lag Filter Routine ;* ;* Lags new value, always between old value and ;* new value by % of filter coef/256 ;* ;* AB = X + ((A - X) * B) / 256 ;* NEW = Old + ((New - Old) * FCoef) / 256 ;* ;* Enter With: ;* ;* X Reg Old Value ;* A Reg New Value ;* B Reg Filt Coef ;* ;* Exit With: ;* ;* A Reg New Filtered Value (msb) ;* B Reg New Filtered Value (lsb) ;* ;*================================================== LFB40: DF 4B STX L004B ; save old val LFB42: D7 49 STAB L0049 ; LFB44: 26 04 BNE LFB4A ; ; LFB46: DC 4B LDD L004B ; filter coef == 0 LFB48: 20 19 BRA LFB63 ; load old val & exit ; LFB4A: 3D MUL ; do calc LFB4B: DD 4D STD L004D ; LFB4D: 96 49 LDAA L0049 ; LFB4F: 40 NEGA ; LFB50: D6 4C LDAB L004C ; LFB52: 3D MUL ; LFB53: 89 00 ADCA #0 ; LFB55: 97 4A STAA L004A ; LFB57: 96 49 LDAA L0049 ; LFB59: 40 NEGA ; LFB5A: D6 4B LDAB L004B ; LFB5C: 3D MUL ; LFB5D: DB 4A ADDB L004A ; LFB5F: 89 00 ADCA #0 ; LFB61: D3 4D ADDD L004D ; ; LFB63: 39 RTS ; >>>> ;*================================================== ;* ;* get a baro adjusted tps% value ;* ;*================================================== LFB64: CE D4 F5 LDX #$D4F5 ; tbl of 255's ; ; ; another entry point with own baro comp tbl ; LFB67: 8D 06 BSR LFB6F ; get baro & do 2d lkup LFB69: D6 43 LDAB L0043 ; tps%, from idle LFB6B: 3D MUL ; LFB6C: 89 00 ADCA #0 ; (tps% * mult) / 256 LFB6E: 39 RTS ; ;*================================================== ;* ;* get baro & do 2d lkup, 4 line tbl ;* ;*================================================== LFB6F: 96 FE LDAA L00FE ; baro pressure, A/D cnts LFB71: 80 0D SUBA #13 ; LFB73: C6 97 LDAB #151 ; LFB75: 3D MUL ; LFB76: 89 00 ADCA #0 ; LFB78: 81 8F CMPA #143 ; LFB7A: 23 02 BLS LFB7E ; LFB7C: 86 8F LDAA #143 ; LFB7E: C6 60 LDAB #96 ; LFB80: 20 0F BRA LFB91 ; 2d lkup w/SBA ;*================================================== ;* ;* 2d lkup w/upr limt in 1st tbl entry ;* ;*================================================== LFB82: 5F CLRB ; ;*================================================== ;* ;* 2d lkup w/upr limt in 1st tbl entry, lwr limt in B ;* ;*================================================== LFB83: A1 00 CMPA 0,X ; LFB85: 23 02 BLS LFB89 ; LFB87: A6 00 LDAA 0,X ; LFB89: 08 INX ; LFB8A: 20 05 BRA LFB91 ; 2d lkup w/SBA ;*================================================== ;* ;* 2d lkup w/line cnt ;* ;*================================================== LFB8C: E6 00 LDAB 0,X ; LFB8E: 08 INX ; LFB8F: 20 06 BRA LFB97 ; ;*================================================== ;* ;* 2d lkup w/SBA ;* ;*================================================== LFB91: 10 SBA ; LFB92: 24 01 BCC LFB95 ; 2d lkup LFB94: 4F CLRA ; ;*================================================== ;* ;* 2d lkup ;* ;*================================================== LFB95: C6 10 LDAB #16 ; LFB97: 3D MUL ; LFB98: 37 PSHB ; LFB99: 16 TAB ; LFB9A: 3A ABX ; LFB9B: EC 00 LDD 0,X ; ; ; entry from 3d routine ; LFB9D: 97 49 STAA L0049 ; LFB9F: 10 SBA ; LFBA0: 33 PULB ; LFBA1: 25 09 BCS LFBAC ; LFBA3: 3D MUL ; LFBA4: 40 NEGA ; LFBA5: 9B 49 ADDA L0049 ; LFBA7: 58 LSLB ; LFBA8: 82 00 SBCA #0 ; LFBAA: 20 04 BRA LFBB0 ; LFBAC: 40 NEGA ; LFBAD: 3D MUL ; LFBAE: 99 49 ADCA L0049 ; LFBB0: 97 49 STAA L0049 ; LFBB2: 39 RTS ; ;*================================================== ;* ;* 3d lkup ;* ;*================================================== LFBB3: A0 00 SUBA 0,X ; LFBB5: 24 01 BCC LFBB8 ; LFBB7: 4F CLRA ; LFBB8: E0 01 SUBB 1,X ; LFBBA: 24 01 BCC LFBBD ; LFBBC: 5F CLRB ; LFBBD: D7 4B STAB L004B ; LFBBF: C6 10 LDAB #16 ; LFBC1: 3D MUL ; LFBC2: 37 PSHB ; LFBC3: E6 02 LDAB 2,X ; LFBC5: 37 PSHB ; LFBC6: 3D MUL ; LFBC7: 3A ABX ; LFBC8: 08 INX ; LFBC9: 08 INX ; LFBCA: 08 INX ; LFBCB: 3C PSHX ; LFBCC: 96 4B LDAA L004B ; LFBCE: 8D C5 BSR LFB95 ; 2d lkup LFBD0: 97 4A STAA L004A ; LFBD2: 96 4B LDAA L004B ; LFBD4: 38 PULX ; LFBD5: 33 PULB ; LFBD6: 3A ABX ; LFBD7: 8D BC BSR LFB95 ; 2d lkup LFBD9: 16 TAB ; LFBDA: 96 4A LDAA L004A ; LFBDC: 20 BF BRA LFB9D ; ;*================================================== ;* ;* vss/rpm calc routine (FDIV) ;* ;*================================================== LFBDE: CE FF FF LDX #$FFFF ; LFBE1: DF 49 STX L0049 ; LFBE3: 93 4B SUBD L004B ; LFBE5: 25 06 BCS LFBED ; LFBE7: 20 19 BRA LFC02 ; LFBE9: 93 4B SUBD L004B ; LFBEB: 24 05 BCC LFBF2 ; LFBED: D3 4B ADDD L004B ; LFBEF: 0C CLC ; LFBF0: 20 01 BRA LFBF3 ; LFBF2: 0D SEC ; LFBF3: 79 00 4A ROL L004A ; LFBF6: 79 00 49 ROL L0049 ; LFBF9: 24 07 BCC LFC02 ; LFBFB: 05 LSLD ; LFBFC: 24 EB BCC LFBE9 ; LFBFE: 93 4B SUBD L004B ; LFC00: 20 F0 BRA LFBF2 ; LFC02: DC 49 LDD L0049 ; LFC04: 39 RTS ; ;*================================================== ;* ;* 8 x 16 Multiply Routine ;* ;* AB = (A * *X) / 256 ;* ;* Enter With: ;* ;* A = op1 ;* X = address of op2 ;* ;* Exit With: ;* ;* AB = result ;* ;*================================================== LFC05: 97 49 STAA L0049 ; LFC07: E6 01 LDAB 1,X ; LFC09: 3D MUL ; LFC0A: 58 LSLB ; LFC0B: 89 00 ADCA #0 ; ; LFC0D: 97 4A STAA L004A ; LFC0F: A6 00 LDAA 0,X ; LFC11: D6 49 LDAB L0049 ; LFC13: 3D MUL ; LFC14: 97 49 STAA L0049 ; LFC16: 4F CLRA ; LFC17: D3 49 ADDD L0049 ; LFC19: 39 RTS ; ;*================================================== ;* ;* ADC Routine ;* ;* On entry: ;* A = channel to convert ;* B = 0/1, 1 to return immed ;* ;* On exit: ;* A = B = Data ;* ;* $00 pump, fuel ;* $01 self test? ;* $02 bat ;* $03 O2 ;* $04 cts ;* $05 map ;* $0A iat ;* $0B tps ;* $0C aldl diag ;* $0D gnd ;* $0E gnd ;* $0F gnd ;* ;*================================================== LFC1A: 37 PSHB ; LFC1B: 16 TAB ; LFC1C: DA 67 ORAB L0067 ; init to $80, bit for ADC hardware LFC1E: 86 01 LDAA #1 ; LFC20: FD C0 02 STD LC002 ; LFC23: 33 PULB ; LFC24: 5D TSTB ; LFC25: 26 18 BNE LFC3F ; ; ; entry point to retrieve adc data ; LFC27: CE 00 19 LDX #$0019 ; LFC2A: B6 C0 00 LDAA LC000 ; LFC2D: 2B 0C BMI LFC3B ; LFC2F: 09 DEX ; LFC30: 26 F8 BNE LFC2A ; LFC32: 96 14 LDAA L0014 ; error flag 3 LFC34: 8A 01 ORAA #1 ; LFC36: 97 14 STAA L0014 ; error flag 3 LFC38: 4F CLRA ; LFC39: 20 04 BRA LFC3F ; LFC3B: FC C0 00 LDD LC000 ; LFC3E: 17 TBA ; LFC3F: 39 RTS ; ;*================================================== ;* ;* Two inverse PWM control routines ;* ;* CES light & misc PWM control ;*================================================== LFC40: 86 F7 LDAA #$F7 ; 1111 0111, CES light on ; LFC42: FE BC 3C LDX LBC3C ; PWM control register LFC45: DF 4F STX L004F ; tmp storage LFC47: 94 50 ANDA L0050 ; LFC49: 20 09 BRA LFC54 ; ; LFC4B: 86 08 LDAA #$08 ; 0000 1000, CES light off ; ; another entry point ; LFC4D: FE BC 3C LDX LBC3C ; PWM control register LFC50: DF 4F STX L004F ; tmp storage LFC52: 9A 50 ORAA L0050 ; ; ; now do the work. . . ; LFC54: 84 FE ANDA #$FE ; 1111 1110, clr b0 LFC56: 8A 22 ORAA #$22 ; 0010 0010 LFC58: 97 50 STAA L0050 ; LFC5A: 96 4F LDAA L004F ; tmp storage LFC5C: 84 FB ANDA #$FB ; LFC5E: 8A F9 ORAA #$F9 ; LFC60: 97 4F STAA L004F ; tmp storage LFC62: DE 4F LDX L004F ; tmp storage LFC64: FF BC 3C STX LBC3C ; PWM control register ; LFC67: 39 RTS ; >>>> ;*================================================== ;* ;* 8 x 8 Multiply ;* ;* A = (A * B) / 128 ;* ;* Enter With: ;* ;* A = op1 ;* B = op2 ;* ;* Exit With: ;* ;* A = result ;* ;*================================================== LFC68: 24 02 BCC LFC6C ; A = (A * B) / 128 LFC6A: 4F CLRA ; LFC6B: 39 RTS ; ; ; another entry point ; LFC6C: 3D MUL ; LFC6D: 05 LSLD ; LFC6E: 25 06 BCS LFC76 ; LFC70: 5D TSTB ; LFC71: 2A 05 BPL LFC78 ; LFC73: 4C INCA ; LFC74: 26 02 BNE LFC78 ; LFC76: 86 FF LDAA #255 ; LFC78: 39 RTS ; ;*================================================== ;* ;* Continuation of Real Time Service Routine #1 ;* ;* Psuedo Baro Read ;*================================================== LFC79: 4F CLRA ; A = 0 LFC7A: D6 00 LDAB L0000 ; status word LFC7C: C5 10 BITB #$10 ; engine shutdown bit LFC7E: 26 30 BNE LFCB0 ; bra if in shutdown ; LFC80: D6 28 LDAB L0028 ; map adc value, raw LFC82: D1 FE CMPB L00FE ; baro pressure, A/D cnts LFC84: 22 2A BHI LFCB0 ; ; LFC86: 96 1A LDAA L001A ; rpm scaled LFC88: B1 D0 1D CMPA LD01D ; 200, ??? rpm LFC8B: 22 33 BHI LFCC0 ; init baro ; LFC8D: 96 43 LDAA L0043 ; tps%, from idle LFC8F: B1 D0 1E CMPA LD01E ; 50% LFC92: 23 2C BLS LFCC0 ; init baro ; LFC94: 90 45 SUBA L0045 ; tps%, slow filtered LFC96: 24 01 BCC LFC99 ; LFC98: 40 NEGA ; LFC99: B1 D0 1F CMPA LD01F ; 3.9% LFC9C: 22 22 BHI LFCC0 ; init baro ; ;-------------------------------------------------- ; Pseudo Baro Correction vs Tps ; ; Tbl = N * 2.7 * (256/40) ; Tbl = N * 17.28 ; ; KPa/1k Rpm ; ; Baro = (((rpm / 25) - 16) * Corr[tps%]) / 256 ; ;-------------------------------------------------- LFC9E: 96 43 LDAA L0043 ; tps%, from idle LFCA0: CE D2 06 LDX #$D206 ; LFCA3: BD FB 8C JSR LFB8C ; 2d lkup w/line cnt LFCA6: D6 1B LDAB L001B ; rpm / 25 LFCA8: C0 10 SUBB #16 ; 400 rpm LFCAA: 24 01 BCC LFCAD ; LFCAC: 5F CLRB ; ; LFCAD: 3D MUL ; LFCAE: 89 00 ADCA #0 ; ; ; LFCB0: 9B 28 ADDA L0028 ; map adc value, raw LFCB2: 24 02 BCC LFCB6 ; LFCB4: 86 FF LDAA #255 ; ; LFCB6: F6 D0 20 LDAB LD020 ; filt coef, 192 LFCB9: DE FE LDX L00FE ; baro pressure, A/D cnts LFCBB: BD FB 40 JSR LFB40 ; Lag Filter LFCBE: 20 08 BRA LFCC8 ; ;-------------------------------------------------- ; ; Set Baro Pressure or Default Value ; ;-------------------------------------------------- LFCC0: 96 FE LDAA L00FE ; baro pressure, A/D cnts LFCC2: 26 06 BNE LFCCA ; ; LFCC4: B6 D4 78 LDAA LD478 ; 218 LFCC7: 5F CLRB ; ; LFCC8: DD FE STD L00FE ; baro pressure, A/D cnts ; LFCCA: 39 RTS ; >>>> ;*================================================== ;* ;* Setup error flag masks into RAM ;* ;*================================================== LFCCB: FC D4 3A LDD LD43A ; Diag mask 1, 1111 1111 LFCCE: 8A 80 ORAA #$80 ; LFCD0: DD 49 STD L0049 ; LFCD2: B6 D4 3C LDAA LD43C ; diag mask 3, 1111 0011 LFCD5: 8A 10 ORAA #$10 ; LFCD7: 97 4B STAA L004B ; LFCD9: 39 RTS ; ;*================================================== ;* ;* SubRoutine ;* ;* Do TPS work: filter and convert adc to % ;* ;*================================================== LFCDA: 96 43 LDAA L0043 ; tps%, from idle LFCDC: 97 44 STAA L0044 ; tps%, one delayed from L0043 ; LFCDE: 96 42 LDAA L0042 ; tps, adc cnts, volts = n * .0196 LFCE0: D6 08 LDAB L0008 ; status word LFCE2: C5 24 BITB #$24 ; 0010 0100, b5 & b2 LFCE4: 27 03 BEQ LFCE9 ; bra if diags OK ; LFCE6: B6 D4 53 LDAA LD453 ; 80, diag err value ; ; ; lag filter in lower tps value ; LFCE9: 36 PSHA ; LFCEA: D6 47 LDAB L0047 ; tps minimum setting, idle position LFCEC: 11 CBA ; LFCED: 22 0A BHI LFCF9 ; LFCEF: DE 47 LDX L0047 ; tps minimum setting, idle position LFCF1: F6 D2 1B LDAB LD21B ; filt coef, 1 LFCF4: BD FB 40 JSR LFB40 ; Lag Filter LFCF7: DD 47 STD L0047 ; tps minimum setting, idle position ; LFCF9: DC 47 LDD L0047 ; tps minimum setting, idle position LFCFB: 5D TSTB ; round up A LFCFC: 2A 01 BPL LFCFF ; LFCFE: 4C INCA ; ; ; ; sub idle setting from current setting ; LFCFF: 16 TAB ; LFD00: 32 PULA ; LFD01: 10 SBA ; now A is tps - idle tps LFD02: 24 01 BCC LFD05 ; LFD04: 4F CLRA ; ; ; ; convert from adc to tps% ; LFD05: F6 D2 19 LDAB LD219 ; 117, scalar for tps conversion LFD08: 3D MUL ; LFD09: 05 LSLD ; LFD0A: 25 09 BCS LFD15 ; LFD0C: 05 LSLD ; LFD0D: 25 06 BCS LFD15 ; LFD0F: 5D TSTB ; LFD10: 2A 05 BPL LFD17 ; LFD12: 4C INCA ; LFD13: 26 02 BNE LFD17 ; LFD15: 86 FF LDAA #255 ; ; LFD17: 97 43 STAA L0043 ; tps%, from idle ;*================================================== ;* ;* Real Time Service Routine A & C ;* ;* Common delay location ;*================================================== LFD19: 39 RTS ; ;----------------------------------------------- ; ; Do CkSum on Error Flags ; ; From L00E1 - L00E3 ;----------------------------------------------- LFD1A: CE 00 03 LDX #$0003 ; offset LFD1D: 4F CLRA ; LFD1E: AB E0 ADDA $E0,X ; loc one before first err flg LFD20: 48 ASLA ; LFD21: 89 00 ADCA #0 ; LFD23: 09 DEX ; LFD24: 26 F8 BNE LFD1E ; ; LFD26: 39 RTS ; >>>> ;*================================================== ;* ;* SubRoutine ;* ;* Read Coolant Temp & do Diag Tests ;* ;*================================================== LFD27: 86 04 LDAA #4 ; Coolant channel LFD29: 5F CLRB ; wait for data LFD2A: BD FC 1A JSR LFC1A ; ADC routine LFD2D: 97 23 STAA L0023 ; coolant, adc cnts ; ; ; do high coolant diag test ; LFD2F: D6 0A LDAB L000A ; status word LFD31: C4 F7 ANDB #$F7 ; clr b3 LFD33: D7 0A STAB L000A ; status word ; LFD35: B1 D4 4A CMPA LD44A ; 12, high coolant limit LFD38: 24 1E BCC LFD58 ; bra if coolant OK ; LFD3A: DE EB LDX L00EB ; eng run time LFD3C: BC D4 48 CPX LD448 ; 2 sec's LFD3F: 22 08 BHI LFD49 ; ; LFD41: D6 E1 LDAB L00E1 ; LFD43: C5 20 BITB #$20 ; LFD45: 27 11 BEQ LFD58 ; LFD47: 20 06 BRA LFD4F ; ; LFD49: D6 12 LDAB L0012 ; error flag 1 LFD4B: CA 20 ORAB #$20 ; b5, set LFD4D: D7 12 STAB L0012 ; error flag 1 LFD4F: D6 0A LDAB L000A ; status word LFD51: CA 08 ORAB #$08 ; cool diag failed LFD53: D7 0A STAB L000A ; status word LFD55: B6 D4 4E LDAA LD44E ; 100, coolant diag default val ; ; ; do low coolant diag test ; LFD58: B1 D4 4D CMPA LD44D ; 252, low coolant limit LFD5B: 23 24 BLS LFD81 ; ; LFD5D: DE EB LDX L00EB ; eng run time LFD5F: BC D4 4B CPX LD44B ; 30 sec's LFD62: 22 0E BHI LFD72 ; LFD64: D6 E1 LDAB L00E1 ; LFD66: C5 10 BITB #$10 ; LFD68: 26 0E BNE LFD78 ; LFD6A: D6 08 LDAB L0008 ; status word LFD6C: C5 01 BITB #$01 ; LFD6E: 27 11 BEQ LFD81 ; LFD70: 20 06 BRA LFD78 ; ; LFD72: D6 12 LDAB L0012 ; error flag 1 LFD74: CA 10 ORAB #$10 ; LFD76: D7 12 STAB L0012 ; error flag 1 ; LFD78: D6 0A LDAB L000A ; status word LFD7A: CA 08 ORAB #$08 ; LFD7C: D7 0A STAB L000A ; status word LFD7E: B6 D4 4E LDAA LD44E ; 100, coolant diag default val ; LFD81: 97 21 STAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LFD83: 39 RTS ; >>>> ;*================================================== ;* ;* SubRoutine ;* ;* Do IAT ADC fetch & diag limits ;* ;*================================================== LFD84: 86 0A LDAA #10 ; iat channel LFD86: 5F CLRB ; wait for data LFD87: BD FC 1A JSR LFC1A ; ADC routine LFD8A: 97 24 STAA L0024 ; iat, 1k pu, inverse, adc cnts ; LFD8C: D6 0B LDAB L000B ; LFD8E: DE EB LDX L00EB ; eng run time LFD90: BC D4 55 CPX LD455 ; 301 sec's LFD93: 23 3F BLS LFDD4 ; bra if not time to run diag ; ; ; do low iat diag test ; LFD95: B1 D4 54 CMPA LD454 ; 250, min iat val for diag LFD98: 23 0D BLS LFDA7 ; LFD9A: C5 20 BITB #$20 ; LFD9C: 26 2B BNE LFDC9 ; ; LFD9E: CA 20 ORAB #$20 ; LFDA0: 96 30 LDAA L0030 ; mph / 1, filtered LFDA2: B1 D4 57 CMPA LD457 ; 35 mph LFDA5: 23 02 BLS LFDA9 ; bra if mph <= 35 mph ; LFDA7: C4 DF ANDB #$DF ; ; ; ; do low coolant diag test ; LFDA9: 96 24 LDAA L0024 ; iat, 1k pu, inverse, adc cnts LFDAB: B1 D4 5F CMPA LD45F ; 16, high limit LFDAE: 22 0D BHI LFDBD ; bra if within limit ; LFDB0: C5 40 BITB #$40 ; tst b6 of L000B LFDB2: 26 0D BNE LFDC1 ; ; LFDB4: CA 40 ORAB #$40 ; set b6 LFDB6: 96 30 LDAA L0030 ; mph / 1, filtered LFDB8: B1 D4 57 CMPA LD457 ; 35 mph LFDBB: 22 17 BHI LFDD4 ; bra if > 35 mph ; LFDBD: C4 BF ANDB #$BF ; clr b6, 1011 1111, of L000B LFDBF: 20 13 BRA LFDD4 ; LFDC1: 96 13 LDAA L0013 ; error flag 2 LFDC3: 8A 80 ORAA #$80 ; b7 LFDC5: 97 13 STAA L0013 ; error flag 2 LFDC7: 20 06 BRA LFDCF ; ; LFDC9: 96 12 LDAA L0012 ; error flag 1 LFDCB: 8A 02 ORAA #$02 ; b1 LFDCD: 97 12 STAA L0012 ; error flag 1 ; LFDCF: B6 D4 58 LDAA LD458 ; 152, 40c, default iat on diag error LFDD2: 97 24 STAA L0024 ; iat, 1k pu, inverse, adc cnts ; LFDD4: D7 0B STAB L000B ; LFDD6: 39 RTS ; ;*================================================== ;* ;* Set all BLM cells to 128 ;* ;*================================================== LFDD7: CE 00 ED LDX #$00ED ; BLM Cells LFDDA: 86 80 LDAA #128 ; reset val ; LFDDC: A7 00 STAA 0,X ; LFDDE: 08 INX ; LFDDF: 8C 00 FC CPX #$00FC ; last cell LFDE2: 23 F8 BLS LFDDC ; ; LFDE4: 39 RTS ; ;*================================================== ;* ;* Test Iat | Cts against 75c threshold ;* ;* Clear b2 of L00DF if IAT < 75c ;* hot restart detection ;* ;*================================================== LFDE5: F6 D0 05 LDAB LD005 ; option byte: 0010 0011 LFDE8: C5 20 BITB #$20 ; b5, 0010 0000 LFDEA: 27 02 BEQ LFDEE ; do not bra LFDEC: 96 24 LDAA L0024 ; iat, 1k pu, inverse, adc cnts ; LFDEE: B1 D2 5E CMPA LD25E ; iat | coolant threshold, 75c LFDF1: 25 06 BCS LFDF9 ; bra if iat > 75c ; LFDF3: D6 DF LDAB L00DF ; status word LFDF5: C4 FB ANDB #$FB ; clr b2, 1111 1011 LFDF7: D7 DF STAB L00DF ; status word ; LFDF9: 39 RTS ; ;*================================================== ;* ;* Do headsup if online ;* ;*================================================== LFDFA: 96 00 LDAA L0000 ; status word LFDFC: 85 02 BITA #$02 ; LFDFE: 27 03 BEQ LFE03 ; LFE00: BD 58 09 JSR L5809 ; LFE03: 39 RTS ; ;*================================================== ;* ;* Real Time Service Routine 6 ;* ;*================================================== LFE04: 8D F4 BSR LFDFA ; LFE06: 96 D1 LDAA L00D1 ; LFE08: 27 06 BEQ LFE10 ; LFE0A: 96 00 LDAA L0000 ; status word LFE0C: 8A 04 ORAA #4 ; LFE0E: 97 00 STAA L0000 ; status word ; LFE10: CE 01 99 LDX #$0199 ; LFE13: FF BC 0C STX LBC0C ; LFE16: CE 00 00 LDX #$0000 ; LFE19: 20 03 BRA LFE1E ; go do ram refresh ;*================================================== ;* ;* Real Time Service Routine E ;* ;* RAM Refresh ;*================================================== LFE1B: CE 00 80 LDX #$0080 ; ; ; another entry point ; LFE1E: 86 10 LDAA #16 ; LFE20: 9F 49 STS L0049 ; LFE22: 35 TXS ; LFE23: 38 PULX ; LFE24: 3C PSHX ; LFE25: 38 PULX ; LFE26: 38 PULX ; LFE27: 3C PSHX ; LFE28: 38 PULX ; LFE29: 38 PULX ; LFE2A: 3C PSHX ; LFE2B: 38 PULX ; LFE2C: 38 PULX ; LFE2D: 3C PSHX ; LFE2E: 38 PULX ; LFE2F: 4A DECA ; LFE30: 26 F1 BNE LFE23 ; LFE32: 9E 49 LDS L0049 ; LFE34: 39 RTS ; ;*================================================== ;* ;* 2d TBL Vs. AFR ;* ;* Inverse AFR term for BPW calc ;* ;*================================================== LFE35: FCB 16 ; line count ;--------------------------------------------- ; ~AFR ; afr ;--------------------------------------------- FCB 255 ; 0.0 FCB 255 ; 1.6 FCB 255 ; 3.2 FCB 255 ; 4.8 FCB 255 ; 6.4 FCB 205 ; 8.0 FCB 171 ; 9.6 FCB 146 ; 11.2 FCB 128 ; 12.8 FCB 114 ; 14.4 FCB 102 ; 16.0 FCB 93 ; 17.6 FCB 85 ; 19.2 FCB 79 ; 20.8 FCB 73 ; 22.4 FCB 68 ; 24.0 FCB 64 ; 25.5 ;----------------------------------------------- ; ; this is a table! ; ;----------------------------------------------- LFE47: FDB $0028 ; LFE49: FDB $002A ; LFE4B: FDB $0030 ; LFE4D: FDB $0032 ; LFE4F: FDB $0034 ; LFE51: FDB $0026 ; LFE53: FDB $001C ; LFE55: FDB $0012 ; LFE57: FDB $0014 ; LFE59: FDB $0016 ; LFE5B: FDB $D002 ; LFE5D: FDB $0066 ; LFE5F: FDB $BC00 ; LFE61: FDB $BC02 ; LFE63: FDB $BC04 ; LFE65: FDB $BC06 ; LFE67: FDB $BC0A ; LFE69: FDB $0020 ; ;*================================================== ;* ;* Factory Diags ;* ;*================================================== LFE6B: BD FF 05 JSR LFF05 ; LFE6E: 24 FE BCC LFE6E ; LFE70: FE BC 3C LDX LBC3C ; LFE73: DF 18 STX L0018 ; LFE75: BD FE FE JSR LFEFE ; read BatV adc channel LFE78: 5F CLRB ; LFE79: 81 28 CMPA #40 ; LFE7B: 23 1D BLS LFE9A ; LFE7D: D6 23 LDAB L0023 ; coolant, adc cnts LFE7F: 27 1A BEQ LFE9B ; LFE81: 81 5A CMPA #90 ; LFE83: 25 16 BCS LFE9B ; LFE85: 5F CLRB ; LFE86: B6 08 81 LDAA L0881 ; MCU1 I/O LFE89: 84 30 ANDA #$30 ; LFE8B: 91 1A CMPA L001A ; rpm scaled LFE8D: 27 0C BEQ LFE9B ; LFE8F: 97 1A STAA L001A ; rpm scaled LFE91: D7 70 STAB L0070 ; LFE93: D7 66 STAB L0066 ; 160Hz rts counter LFE95: D7 1B STAB L001B ; rpm / 25 LFE97: 5A DECB ; LFE98: D7 71 STAB L0071 ; aldl byte count LFE9A: 5C INCB ; LFE9B: D7 23 STAB L0023 ; coolant, adc cnts LFE9D: BD FA D6 JSR LFAD6 ; LFEA0: DC 18 LDD L0018 ; drp count LFEA2: C8 04 EORB #4 ; LFEA4: FD BC 3C STD LBC3C ; PWM control register LFEA7: 96 1A LDAA L001A ; rpm scaled LFEA9: 27 26 BEQ LFED1 ; LFEAB: F6 08 81 LDAB L0881 ; MCU1 I/O LFEAE: C8 08 EORB #8 ; LFEB0: F7 08 81 STAB L0881 ; MCU1 I/O LFEB3: 81 20 CMPA #32 ; LFEB5: 26 5C BNE LFF13 ; LFEB7: 4F CLRA ; LFEB8: C6 C5 LDAB #197 ; LFEBA: FD BC 14 STD LBC14 ; ecu async bpw LFEBD: CE 01 00 LDX #$0100 ; LFEC0: DF 4D STX L004D ; LFEC2: CE 00 DD LDX #$00DD ; LFEC5: BD E2 89 JSR LE289 ; LFEC8: DD 1C STD L001C ; rpm / 25 one delayed LFECA: DC 18 LDD L0018 ; drp count LFECC: CA 80 ORAB #128 ; LFECE: FD BC 3C STD LBC3C ; PWM control register LFED1: DC 18 LDD L0018 ; drp count LFED3: 84 F7 ANDA #$F7 ; LFED5: C4 6F ANDB #$6F ; LFED7: CA 08 ORAB #8 ; LFED9: 7F 08 81 CLR L0881 ; MCU1 I/O LFEDC: FD BC 3C STD LBC3C ; PWM control register LFEDF: 7F 08 01 CLR L0801 ; MCU2 I/O LFEE2: CE BC 0E LDX #$BC0E ; ecu sync bpw LFEE5: 4F CLRA ; LFEE6: 5F CLRB ; LFEE7: ED 00 STD 0,X ; LFEE9: 8D 19 BSR LFF04 ; LFEEB: ED 06 STD 6,X ; LFEED: 86 F0 LDAA #240 ; LFEEF: 8D 13 BSR LFF04 ; LFEF1: ED 08 STD 8,X ; LFEF3: 8D 0F BSR LFF04 ; LFEF5: ED 0A STD 10,X ; LFEF7: 8D 0B BSR LFF04 ; LFEF9: ED 0C STD 12,X ; LFEFB: 7E FF C6 JMP LFFC6 ; ;*================================================== ;* ;* Read BatV adc channel ;* ;*================================================== LFEFE: 86 02 LDAA #2 ; ;*================================================== ;* ;* ADC routine w/wait for data ;* ;*================================================== LFF00: 5F CLRB ; wait for data LFF01: BD FC 1A JSR LFC1A ; ADC routine LFF04: 39 RTS ; ;----------------------------------------------- ; ; ;----------------------------------------------- LFF05: 86 0C LDAA #12 ; aldl channel LFF07: 8D F7 BSR LFF00 ; ADC w/wait for data LFF09: 81 28 CMPA #40 ; LFF0B: 25 04 BCS LFF11 ; LFF0D: 81 64 CMPA #100 ; LFF0F: 25 01 BCS LFF12 ; LFF11: 0C CLC ; LFF12: 39 RTS ; ;*================================================== ;* ;* Factory test stuff? ;* ;*================================================== LFF13: B6 08 01 LDAA L0801 ; MCU2 I/O LFF16: 54 LSRB ; LFF17: 54 LSRB ; LFF18: 54 LSRB ; LFF19: 54 LSRB ; LFF1A: 84 F0 ANDA #$F0 ; LFF1C: 1B ABA ; LFF1D: 97 20 STAA L0020 ; LFF1F: 96 66 LDAA L0066 ; 160Hz rts counter LFF21: 84 0F ANDA #$0F ; LFF23: 36 PSHA ; LFF24: 8D DA BSR LFF00 ; ADC w/wait for data LFF26: CE 00 26 LDX #$0026 ; s/d map, one delayed from L0025 LFF29: 33 PULB ; LFF2A: 3A ABX ; LFF2B: A7 00 STAA 0,X ; LFF2D: 5D TSTB ; LFF2E: 26 4E BNE LFF7E ; LFF30: C6 80 LDAB #128 ; LFF32: 96 1B LDAA L001B ; rpm / 25 LFF34: 26 02 BNE LFF38 ; LFF36: 86 03 LDAA #3 ; LFF38: 4A DECA ; LFF39: 97 1B STAA L001B ; rpm / 25 LFF3B: 27 08 BEQ LFF45 ; LFF3D: C6 1A LDAB #26 ; LFF3F: 81 02 CMPA #2 ; LFF41: 26 02 BNE LFF45 ; LFF43: C6 E6 LDAB #230 ; LFF45: CE F0 00 LDX #$F000 ; LFF48: 3A ABX ; LFF49: FF BC 16 STX LBC16 ; egr LFF4C: B6 08 01 LDAA L0801 ; MCU2 I/O LFF4F: 84 0F ANDA #$0F ; LFF51: 26 02 BNE LFF55 ; LFF53: 86 10 LDAA #16 ; LFF55: 44 LSRA ; LFF56: FF BC 18 STX LBC18 ; throttle kicker ($D3FF | $D000, on/off) LFF59: B7 08 01 STAA L0801 ; MCU2 I/O LFF5C: DC 18 LDD L0018 ; drp count LFF5E: CA 18 ORAB #24 ; LFF60: 24 02 BCC LFF64 ; LFF62: C4 F7 ANDB #$F7 ; LFF64: FD BC 3C STD LBC3C ; PWM control register LFF67: 96 21 LDAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LFF69: 48 ASLA ; LFF6A: 89 00 ADCA #0 ; LFF6C: 97 21 STAA L0021 ; coolant, defaulted, 1k pu, inverse, adc cnts LFF6E: 84 03 ANDA #$03 ; LFF70: FF BC 1A STX LBC1A ; vats LFF73: F6 08 81 LDAB L0881 ; MCU1 I/O LFF76: C4 FC ANDB #$FC ; LFF78: CA 04 ORAB #4 ; LFF7A: 1B ABA ; LFF7B: B7 08 81 STAA L0881 ; MCU1 I/O LFF7E: FE BC 00 LDX LBC00 ; ecm drp counter LFF81: BD FF 04 JSR LFF04 ; LFF84: FC BC 00 LDD LBC00 ; ecm drp counter LFF87: 04 LSRD ; LFF88: 04 LSRD ; LFF89: DD 1E STD L001E ; LFF8B: CC 02 8F LDD #655 ; LFF8E: 8C 02 8F CPX #655 ; LFF91: 22 11 BHI LFFA4 ; LFF93: 8C 01 48 CPX #328 ; LFF96: 25 16 BCS LFFAE ; LFF98: 04 LSRD ; LFF99: FD BC 0E STD LBC0E ; ecu sync bpw LFF9C: C6 06 LDAB #6 ; LFF9E: DD 4B STD L004B ; LFFA0: 4F CLRA ; LFFA1: 5F CLRB ; LFFA2: 20 17 BRA LFFBB ; LFFA4: FD BC 0E STD LBC0E ; ecu sync bpw LFFA7: 04 LSRD ; LFFA8: DD 4B STD L004B ; LFFAA: DC 1E LDD L001E ; LFFAC: 20 0D BRA LFFBB ; LFFAE: 4F CLRA ; LFFAF: C6 42 LDAB #66 ; LFFB1: FD BC 0E STD LBC0E ; ecu sync bpw LFFB4: C6 C5 LDAB #197 ; LFFB6: DD 4B STD L004B ; LFFB8: 5F CLRB ; LFFB9: 93 1E SUBD L001E ; LFFBB: DE 4B LDX L004B ; LFFBD: FF BC 1C STX LBC1C ; LFFC0: BD FD 19 JSR LFD19 ; delay, rts only LFFC3: FD BC 36 STD LBC36 ; ; LFFC6: BD FE 10 JSR LFE10 ; LFFC9: 7E E3 FE JMP LE3FE ; ;----------------------------------------------- ; ; ;----------------------------------------------- LFFCC: FILL $00, 39 ; ;----------------------------------------------- ;----------------------------------------------- LFFF3: FCB $7E ;----------------------------------------------- ; vector table ;----------------------------------------------- LFFF4: FCB $DF2F ; LFFF6: FCB $E2B4 ; RTI LFFF8: FCB $E2AD ; LFFFA: FCB $E2B4 ; RTI LFFFC: FCB $E107 ; reset LFFFE: FCB $E107 ; reset ;----------------------------------------------- ;----------------------------------------------- ; eof ;