L0086 ;; b3 set if done with receiving data from eside ;; b4 1 = IGNITION OFF l_00a5 ;; b2 1 = ENGINE CLOSED LOOP l_00a6 ;status byte ;; b0 fan 1 ;; b1 fan 2 ;; b67 ShiftAB l_00a7 ;status byte, some bits related to PRNDL & PATTERN ;; b2 AIR pump l_00a9 ; status & malfs? from eside ;; b4 CRUISE ACTIVE L00AD ;; b0 set if data to eside is ready & chsm is calculated ;; b2 flag for all fes data rec'd ;; b3 set if 00ad b6 was set, get 16 fes bytes, else get 20 ;; b6 if 00ad b6 is set, get 16 fes bytes, else get 20 L00C7 ;; b0 1 = NOT IN NORMAL MODE L00C9 ;; b1 1 = IN HOT MODE l_00D3 ;; b2 1=NOT NORMAL MODE hot? l_00D7 ;16 PRNDLFLG RANGE INDICATION ;; 0 1 = LOW ;; 1 1 = DRIVE 2 ;; 2 1 = DRIVE 3 ;; 3 1 = DRIVE 4 ;; 4 1 = NOT USED ;; 5 1 = REVERSE ;; 6 1 = PARK/NEUTRAL ;; 7 1 = INVALID L00D8 ; PRNDLFLG RANGE INDICATION l_00E2 ; SDINMW1 INPUT MODE WORD 1 ;; 0 1 = A/C CLUTCH STATUS ;; 1 1 = A/C REQUEST ;; 2 1 = HEATED WINDSHIELD REQUEST ;; 3 1 = POWER STEERING PRESSURE SWITCH ;; 4 1 = OIL CHANGE RESET SWITCH ;; 5 1 = OIL LEVEL SWITCH ;; 6 1 = PARK/NEUTRAL SWITCH ;; 7 1 = CRUISE ACTIVE l_00E3 ; 10 SDINMW2 INPUT MODE WORD 2 ;; 0 1 = TCC BRAKE SWITCH ;; 1 1 = NOT USED ;; 2 1 = TRANSMISSION PERFORMANCE/NORMAL SWITCH PRESSED ;; 3 1 = TRANSMISSION MODE A ;; 4 1 = TRANSMISSION MODE B ;; 5 1 = TRANSMISSION MODE C ;; 6 1 = SPARK RETARD REQUEST ;; 7 1 = ASR ACTIVE l_00E4 ; 11 SDOUTMW1 OUTPUT MODE WORD 1 ;; 0 1 = TCC CONTROL ;; 1 1 = TCC ENABLE ;; 2 1 = SHIFT A SEE TABLE ;; 3 1 = SHIFT B SEE TABLE ;; 4 1 = SKIP SHIFT ACTIVE ;; 5 NOT USED ;; 6 NOT USED ;; 7 NOT USED l_00E5 ; 12 SDOUTMW2 OUTPUT MODE WORD 2 ;; 0 1 = FAN 1 RELAY ;; 1 1 = FAN 2 RELAY ;; 2 1 = A.I.R. PUMP ;; 3 1 = A/C CLUTCH ;; 4 NOT USED ;; 5 NOT USED ;; 6 NOT USED ;; 7 NOT USED l_00E6 ; 13 SDSTMW1 STATUS MODE WORD 1 ;; 0 1 = ENGINE CLOSED LOOP ;; 1 1 = LEFT O2 READY ;; 2 1 = RIGHT O2 READY ;; 3 1 = LEARN ENABLED ;; 4 1 = CLEAN CANISTER ;; 5 1 = CATALYTIC CONVERTER OVERTEMP ;; 6 1 = ENGINE MALFS OCCURRED ;; 7 1 = TRANSMISSION MALFS OCCURRED l_00E7 ; 14 SDSTMW2 STATUS MODE WORD 2 ;; 0 1 = POWER ENRICHMENT ACTIVE ;; 1 1 = KICKDOWN PATTERN ;; 2 1 = MALF 43A ACTIVE ;; 3 1 = MALF 43C ACTIVE ;; 4 1 = MALF 43D ACTIVE ;; 5 1 = INJECTOR FAULT DETECTED THIS RUN CYCLE ;; 6 1 = FEDS ENABLED ;; 7 1 = RESET OCCURRED THIS RUN CYCLE l_00E9 ; 42 SDADPTBL SERIAL DATA ADAPTABLE SHIFT MW ;; 0 1 = NOT IN NORMAL MODE traced 032701 ;; 1 1 = LAST WAS STANDARD ADAPT ;; 2 1 = LONG SHIFT DELAY ;; 3 1 = LONG SHIFT TIME ;; 4 1 = NOT WITHIN TPS RANGE ;; 5 1 = EXCESSIVE DELTA TPS ;; 6 1 = IN HOT MODE traced 032701 ;; 7 1 = EXCESSIVE DELTA VEHICLE SPEED l_00EA ; 44 MISCSTAT MISC STATUS BITS ;; 0 1 = START OF SHIFT ;; 1 1 = END OF SHIFT ;; 2 1 = POWERTRAIN IN MOTION ;; 3 1 = IGNITION OFF traced 032701 ;; 4 NOT USED ;; 5 NOT USED ;; 6 NOT USED ;; 7 NOT USED l_019D ; one MPH/bit road speed variable l_01A7 ;RAW LINEARIZED COOLANT TEMPERATURE ;; DEG C = .75N - 40 ;; DEG F = 1.35N - 40 l_01bd ;LINEARIZED OIL TEMPERATURE TERM ;; DEGC = .8N - 40 ;; DEG F = 1.44N - 40 l_0231 ; RBLM*RCORRCL*2 l_0233 ; l_0233_what_filtrd_$01 l_02E4 ; sent to eside data starts at 02e4 L040E ; PRNDLFLG RANGE INDICATION L182A ; $01 unless reset occurred this run cycle 2131 ;12.5/bit 700 rpm 3BEA 3 ;;jump table called from 3C13 ;;3BEB db $08, $02, $08, $75, $3B, $F7, $3B, $F7, $3B, $F7 ;;3BF5 db $3C, $62, $39 3C00 B ;subr to clr Carry if m0600=255 3C03 2 ;branch if carry set (if C=1) 3C05 F ; contents of m->B 3C08 C ;compare B & 5 3C0A 2 ;branch if higher 3C0C C ;else jump table base addr 3C0F 5 ; B x 2 3C10 3 ; B+X->X 3C11 E ; cont of addr in X -> X 3C13 A ; jump to add 3C15 B ; subr to set m0600 & m0601 = 0 3C18 F ; cont of m ->B 3C1B C ; mask. turn off bit3 3C1D F ; B ->m 3C27 B ;subr to clr Carry if m0600=255 3C2A 8 ; A-255 3C2C 2 ; 3C2E 0 ;clear carry bit 3C2F 2 ;jump to return 3C31 0 ;set carry bit C=1 3C32 3 ; 3C33 8 ;subr to set m0600 & m0601 = 0 3C35 B ; 3C38 8 ; 3C3A B ; 3C3D 3 ; 4097 B ; PRNDLFLG RANGE INDICATION 409B 1 ;branch if normal patt requested 40A1 1 ;branch if performance patt requested 40A7 1 ; 1=NOT NORMAL MODE hot? 40B3 1 ; ASR ACTIVE 40B9 1 ; 1 = KICKDOWN PATTERN 40C5 1 ; TCC BRAKE SWITCH brk_on=1 40CB B ; bits 1,2 norm, perf pattern 40E8 1 ; SKIP SHIFT ACTIVE 412D 1 ; 1 = LEARN ENABLED 413F 1 ; 1 = CATALYTIC CONVERTER OVERTEMP 4149 1 ; 1 = ENGINE CLOSED LOOP 415B 1 ; 1 = POWER ENRICHMENT ACTIVE 4173 1 ; 1 = LEARN ENABLED 417D 1 ; 1 = ENGINE CLOSED LOOP 418F 1 ; 1 = CATALYTIC CONVERTER OVERTEMP 4195 1 ; 1 = POWER ENRICHMENT ACTIVE 426C 8 ;0000 0001 into init 426E B ;ram[3:0] = 0000, ram from $0000-$03ff ;; reg[3:0] = 0001, registers from $1000-$105f 4271 8 ;1001 1001 4273 B ; ADPU = 1 a/d sys power enabled ;; CSEL = 0 Clock Sel - a/d & eeprom use sys E clock ;; IRQE = 0 IRQ edge - low level sensitive operation ;; DLY = 1 Start UP delay 4000 E clk cycles ;; CME = 1 clock monitor enabled ;; FCME = 0 monitor follows CME state ;; CR[1:0] = 01 Divide E by 2^17 for COP timeout reset 4278 B ;PR[1:0] = 11 Timer prescaler = 16 427B 7 ;Block Protect Register - EEPROM & CONFIG registers unlocked 427E F ;wagon $0c01 - is this rev #? 4284 C ; = 85 m0200 - 85 4286 2 ; br if m0200 = 85 4288 8 ; else 0001 0000 Config locked, all eeprom unlocked 428A C ; = 170 428E 8 ;0001 0001 4290 B ;Block Protect Register - CONFIG locked, ;; if $11 BPRT0 locked - SIDERAIL # BPRT1 unlocked - ENDMODEL & VIN ;; if $10 all unlocked 43BC B ; $01 unless reset occurred this run cycle 43C2 B ; $01 unless reset occurred this run cycle 43C5 B ; $01 unless reset occurred this run cycle 442E 2 ; trap 44A8 C ; bt17_202f_what?_f_of_cooltemp ??? ;; 202F db $18, $18, $18, $18, $18, $13, $10, $10, $10 456B B ; $30 = 48 456E B ; l_0233_what_filtrd_$01 4598 B ; map - current baro 459B 2 ; br if map < baro 459D B ; else store new baro 45B6 8 ;26 4796 9 ;set to Normal Shift Pattern requested 47D1 1 ; AC clutch 4841 C ;; bytes 2807 14 bt14_IAC_ParkPosVsCool steps = bytes 48A3 C ; bt17_283c_what_f((NVADBARO-13)*151/256-80) 48E2 F ; current counter val 48E5 C ; add 12 48E8 F ; store in toc4 reg. ;; hc11_outcomp4 interrupt will occur 12 * 5.33 musec = .06 ms from now.... 491F C ; 614 * .00533 ms = 3.27 ms ;; hc11_outcomp4 interupt will occur 3.25 ms from now 497D 1 ; trap 4AA7 1 ;if clr, 4AAB 8 ;limit O2RAW to $66 (102*4.4 = 452mV) 4AAD B ; ADL02RAW_[450mV] 4ACD 1 ;if clr, 4AD1 8 ; limit O2RAW to $66 (102*4.4 = 452mV) 4AD3 B ; ADR02RAW_[450mV] 4B3C F ; $38 12.5/bit 700 rpm 4B3F 2 ; br if rpm<700 4BAC C ;151 4BAE 8 ;26 4BB3 B ; 2*(ADMAP-26)*151/256 4BBC B ;* A Reg = New value (to be filtered) 4BBF F ;* B Reg = Q (Filter coef) $20 4BCE B ;NVADBARO-ADMAP 4BD1 2 ; br if NVADBARO > ADMAP 4BD3 4 ; else A=0 4BD4 8 ;NVADBARO-ADMAP + 29 4BD8 8 ; limit to 255 4BDA B ;NVADBARO-ADMAP + 29 4BDD C ; A=$F6 (246), B=$97 (151) 4BE0 B ; A=217-NVADBARO-ADMAP 4BE6 B ; 2*(217-NVADBARO-ADMAP)*151/256 4BFD B ;closed loop - short term int 4C00 F ;long term int 4C03 3 ; A*B->D 4C04 0 ; short * long * 2 4C09 B ; LBLM*LCORRCL*2 4C20 B ;closed loop - short term int 4C23 F ;long term int 4C26 3 ; A*B->D 4C27 0 ; short * long * 2 4C2C B ; RBLM*RCORRCL*2 4C63 1 ; 1 = FEDS ENABLED 4C6F C ;b_26d7_SpeedLimitMPHFuelCO 4C72 1 ; 1=FuelCut 4C76 C ;b_26dc_SpeedLimitMPHFuelResume 4C7C A ;b_26d7 or b_26dc MPH Fuel CO or Resume 4C80 1 ;1=2nd gear or above..? 4C89 1 ;w_26d8,da or w_26dd,df RPM Fuel CO or Resume 4C8C 2 ; br if refper>threshold, ie rpmthreshold 4CA7 1 ;else 1=FuelCut 4CAA 2 ; set FuelCut bit 4CAF 1 ; 1=FuelCut 4CB2 1 0; 1 = turn fuel off!!! 4CB7 1 0; 1 = turn fuel off!!! 4CF6 1 ; ASR ACTIVE 4CFB 1 ; ASR ACTIVE 4D34 1 ; MISCSTAT b4 NOT USED.. dOA!!! 4DEF 1 ; b67_ShiftAB 4E04 1 ; b67_ShiftAB 4E1E 1 ; MISCSTAT b4 NOT USED.. dOA!!! 4E48 1 ; MISCSTAT b4 NOT USED.. dOA!!! 4E62 9 ; m0290 & m00ee 4E7F 9 ; set to zeros 4E81 9 ; | 4E83 9 ; | 4E85 9 ; | 4E87 9 ; | 4F12 1 ; MISCSTAT b4 NOT USED.. dOA!!! 4F22 1 ; MISCSTAT b4 NOT USED.. dOA!!! 4F6E 1 ; MISCSTAT b4 NOT USED.. dOA!!! 4F78 D ;get loop counter m007c->B 4F7A C ;mask B, now B=0,1,2, or 3 4F7C C ;get jump table base addr ->X, 4 addresses 4F7F 5 ;shift B left (mult x 2), now B=0,2,4 or 8 4F80 3 ;base plus offset 4F81 E ;get addr in table 4F83 6 ;go there loop_a_00,01,02,03 ;;4F85 db $4F, $8D, $4F, $A7, $4F, $B2, $4F, $D0, $BD, $8F 4FDA 1 ; 1 = FEDS ENABLED 4FDD 1 ; 1 = FEDS ENABLED 5158 7 ; $01 unless reset occurred this run cycle 5178 C ; 461 517B 0 ; D/X -> X, remain -> D 517C 8 ; 461/X -> D, remain -> X 517F C ; round off msb 5184 8 ; limit to 255, 6375 rpm 5186 B ; 25 rpm / bit ;; 461*256*25= 2950400 ;; 1/(2949120 / 60 / 1000) = .020345 ;; .020345 / .005078 = 4 increments per rev on 01c3 518A 3 ; get back unlimited rpm 518B 0 ; *2 518E C ; round off msb 5193 8 ; limit to 255, 3188 rpm 5195 B ; 12.5 rpm / bit 51AA C ; 369 51AD 0 ; D/X -> X, remain -> D 51AE 8 ; D/X -> D, remain -> X ;; 461/369 * 25 = 31.25 rpm/bit 51AF C ; round off msb 51B4 8 ; limit to 255, 7969 rpm 51B6 B ; 31.25 rpm/bit 5217 F ; = 0 in wagon 5225 1 ; br if 2026 b2 clr, switch for something ;; b2 = 0 in both 6spd & wagon 5233 2 ; store $00 -> 022e_tes 5244 F ; m0295 is stored as lsb, at $b9d3, in aldl mode 4 command section ;; Function Mode 4 – Device Control Functions 5247 5 ; m0295 * 2 5248 1 ; if clr, store 2*m0295 -> 022e lsb ;; ; $00 -> 022e msb 524C 8 ; else $ff -> A 524E 5 ; $00-B -> B 524F 2 ; and store it 5255 F ; existing B = L202B, or L012F ? ;; ; B + m0295 -> B 5258 8 ; A + carry bit -> A 525A F ; B + m0295 -> B 525D 8 ; A + carry bit -> A 5261 F ; B - m0295 -> B 5264 8 ; A - carry bit -> A 5266 F ; B - m0295 -> B 5269 8 ; A - carry bit -> A 527E 1 ; 1 = IGNITION OFF 52BE 1 ; 1 = IGNITION OFF 52DC 1 ; PARK/NEUTRAL SWITCH 5302 1 ;A->B, preserve A 5309 F ; $01 530C 2 ;if A>1 530E B ; A-> m0179 5315 B ; $02 5318 4 ; 2*A 5319 B ; 4->m0179 5394 1 ; if $2028 b1 set, disable ;; some e side thing l_00ab from adding more IAC at $5426 539C 1 ; clr, don't add more IAC 53A5 1 ; clr, don't add more IAC 53AA 1 ; if this bit set, add more IAC 540E 3 ; hold on to old A 540F B ; 1 mph / bit 5412 4 ; mult x 2 5413 2 ; br if mph > 128 5415 4 ; mult x 2 5416 2 ; br if mph < 64 5418 8 ; else use 64 mph table value 541A C ; table base address ;; 27a5 17 bt17_IAC_Fol_StepsVsMPH mph = 0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64 541D B ; look it up 5420 3 ; get old A off stack -> B 5421 1 ; old A + A -> A 5424 8 ; limit to 255 5426 1 ; if this bit set, add more L2798 IAC steps ;; setting this bit can be disabled by clearing $2028 b1 542D 1 ; add L2798 to A 5430 8 ; limit to 255 5432 3 ; set aside steps so far 5433 B ; rpm scaled in 25 rpm/bit 5436 C ;; bytes 27ba 17 bt17_IAC_WhatSteps?VsRPM 5439 B ; lookup what for steps vs. rpm 543C 3 ; set aside 5442 8 ; limit to 255 5462 8 ; auto trans 5464 2 ; branch if auto trans 5475 8 ; limit to 255 5480 2 ; br to clr L008a b0 5485 2 ; br to clr L008a b0 548F 1 ; this line sets bit if auto trans 5496 1 ; 1 = LOW 549D 1 ; 1 = DRIVE 2 54A4 1 ; 1 = DRIVE 3 54AF 2 ; br if rpm > 800 54B4 2 ; br if rpm < 3000 54B8 4 ; 50 rpm / bit 552D B ; rpm-desired idle speed 5530 2 ; br if rpmX 61DD A ;go to addr in table ;;6291 db $62, $B2, $66, $C3, $67, $59, $6F, $D0, $71, $EB ;;629B db $73, $CD, $73, $DA, $74, $7E, $74, $FB, $75, $E1 ;;62A5 db $75, $EB, $7E, $9C, $82, $3F, $82, $49, $82, $53 ;;62AF db $83, $C5 6318 1 ; 1 = FEDS ENABLED 631C 1 ; 1=vats disabled or passed freq test 636B 1 ; SPARK RETARD REQUEST 63A8 1 ; 1 = REVERSE 63AC 1 ; 1 = NOT USED, 1 = PARK/NEUTRAL 63E5 1 ; A/C CLUTCH STATUS 63EB 1 ; A/C REQUEST 63F1 1 ; HEATED WINDSHIELD REQ 63F7 1 ; POWER STEERING PRESS SWITCH 63FD 1 ; OIL CHANGE RESET SWITCH 6403 1 ; OIL LEVEL SWITCH 6409 1 ; PARK/NEUTRAL SWITCH 640F 1 ; CRUISE ACTIVE 6418 1 ; TCC BRAKE SWITCH INPUT 641E 1 ; NOT USED 6424 1 ; TRANS PERF/NORMAL SWITCH INPUT 642A 1 ; TRANS MODE A 6430 1 ; TRANS MODE B 6436 1 ; TRANS MODE C 643C 1 ; SPARK RETARD REQUEST 6442 1 ; ASR ACTIVE 644A 4 ;0-> A for next one ;; get various mem bits, & store in aldl mode byte 644B 1 ;if m003c bit 0 is clear, skip setting bit 644F 8 ; else sets TccCtrl bit, SDOUTMW1, bit 0 6451 1 ;if m00c2 bit 7 clr, skip 6455 8 ; else set TCCEnable bit, SDOUTMW1, bit 1 6457 1 ;if m00c2 bit 6 clr, skip 645B 8 ; else set SHIFTA (shft sol A) bit 2 645D 1 ;if m00a6 bit 7 clr, skip 6461 8 ; else set SHIFTB (shft sol B) bit 3 6463 1 ;if m009d bit 1 clr, skip 6467 8 ; else set SKIP SHIFT ACTIVE, bit 4 6469 9 ;store accumulated bits from A-> mode byte for aldl 646B 4 ;0-> A for next one 6470 8 ; fan 1 6476 8 ; fan 2 647C 8 ; AIR pump 6482 8 ; AC clutch 6487 1 ; 1 = ENGINE CLOSED LOOP 648D 1 ; 1 = LEFT O2 READY 6493 1 ; 1 = RIGHT O2 READY 6499 1 ; 1 = LEARN ENABLED 649F 1 ; 1 = CLEAN CANISTER 64A9 8 ; 1 = CATALYTIC CONVERTER OVERTEMP 64BB 2 ; branch if none set in fault bytes 2 - 8 64BD 8 ; 1 = ENGINE MALFS OCCURRED 64CB 2 ; branch if none set in fault bytes 7 - 12 64CD 8 ; 1 = TRANSMISSION MALFS OCCURRED 64D2 1 ; 1 = POWER ENRICHMENT ACTIVE 64D8 1 ; 1 = KICKDOWN PATTERN 64DE 1 ; 1 = MALF 43A ACTIVE 64E4 1 ; 1 = MALF 43C ACTIVE 64EA 1 ; 1 = MALF 43D ACTIVE 64F0 1 ; 1 = INJECTOR FAULT DETECTED THIS RUN CYCLE 64F6 1 ; 1 = FEDS ENABLED 64FC F ; $01 unless reset occurred this run cycle 64FF C ; m182a - $01 6501 2 ; br (don't set bit) if m182a equaled one 6503 8 ;1 = RESET OCCURRED THIS RUN CYCLE 6508 1 ; TCC RANGE CONTINGENCY 650E 1 ; TCC MIN TPS CONTINGENCY 6514 1 ; Brake ON, TCC Off 651A 1 ; Negative Delta TPS 6520 1 ; TCC SLIP CONTINGENCY 6526 1 ; TCC A/C ON Contingency 652C 1 ; TCC ENgaged 6535 1 ; 1 = NOT IN NORMAL MODE 653B 1 ; 1 = LAST WAS STANDARD ADAPT 6541 1 ; 1 = LONG SHIFT DELAY 6547 1 ; 1 = LONG SHIFT TIME 654D 1 ; 1 = NOT WITHIN TPS RANGE 6553 1 ; 1 = EXCESSIVE DELTA TPS 6559 1 ; 1 = IN HOT MODE 655F 1 ; 1 = EXCESSIVE DELTA VEHICLE SPEED 6568 1 ; 1 = START OF SHIFT 656E 1 ; 1 = END OF SHIFT 6574 1 ; 1 = POWERTRAIN IN MOTION 657A 1 ; 1 = IGNITION OFF 6580 1 ; MISCSTAT b4 NOT USED.. dOA!!! 6606 8 ; O2RAW to $66 (102*4.4 = 452mV) 6704 B ; $F0 6707 2 ; br if 01a7 < $F0, < 284 deg F 670B B ; $0000 6759 1 ; 1 = IGNITION OFF 6763 2 ; br if 6D29 1 ; AC clutch 6D44 1 ; MISCSTAT b4 NOT USED.. dOA!!! 6D53 1 ; AC clutch 6D5B 1 1; bits 0&1 = fan 1 & 2 6D76 1 1; bits 0&1 = fan 1 & 2 6DB1 2 ; br if 2026 b6 set. br if auto 6DB3 F ; else store GP6TEGR 6E19 5 ; clear B 6E22 F ; EGR if 6E5A 1 1; bits 0&1 = fan 1 & 2 6E5F 1 1; bits 0&1 = fan 1 & 2 6E66 1 ; set if done with receiving data from eside 6E6E 1 ; AC clutch 6ECB 1 0; bits 0&1 = fan 1 & 2 6ED0 1 0; bits 0&1 = fan 1 & 2 6F01 F ; EGR sometimes.... 6F0A 1 ; SKIP SHIFT ACTIVE 6F24 1 ; SKIP SHIFT ACTIVE 6FD7 1 ; 1 = IGNITION OFF 701E 1 ; 1 = CLEAN CANISTER 702B 1 ; 1 = CLEAN CANISTER 7034 1 ; 1 = CLEAN CANISTER 70B7 1 ; 1 = ENGINE CLOSED LOOP 70BB 1 ; 1 = CLEAN CANISTER 70E6 1 ; 1 = CLEAN CANISTER 70EF 1 ; 1 = CLEAN CANISTER 712D 1 ; 1 = IGNITION OFF 7191 B ; A row, B col, X tbl addr, A returned val 71D1 B ; volts = 5N/255 ;; kpa = (N+28.06)/2.71 = N/2.71 + 10.35 71D4 8 ; 13 71D6 C ; 151 71D8 3 ; A*B-> D A = (NVADBARO-13*151)/256max143 71DB 8 ; 143 71DF 8 ; limit to 143 7241 1 ; 1 = ENGINE CLOSED LOOP 7383 1 ; PARK/NEUTRAL SWITCH 74FB ; PARK/NEUTRAL SWITCH 7546 1 ; 1 = POWER ENRICHMENT ACTIVE 754A C ; b_2604_EgrEnableMinMAP 776B 1 ; 1 = ENGINE CLOSED LOOP 781C 1 ; 1=vats NOT disabled & NOT passed freq test 7918 1 ; MISCSTAT b4 NOT USED.. dOA!!! 7ACF 1 ; 1 = ENGINE CLOSED LOOP 7AFD 1 ; 1 = ENGINE CLOSED LOOP 7B4D 1 ; 1 = turn fuel off!!! 7B51 1 ; 1 = ENGINE CLOSED LOOP 7B55 1 ; 1 = POWER ENRICHMENT ACTIVE 7BCF 1 ; AC clutch 7D1C 1 ; 1 = ENGINE CLOSED LOOP 7D4A 1 ; 1 = ENGINE CLOSED LOOP 7E3A 1 ; AC clutch 7E89 1 ; AC clutch 7EAB 1 ; 1 = MALF 43C ACTIVE 7EB8 1 ; 1 = MALF 43A ACTIVE 7EC5 1 ; 1 = MALF 43D ACTIVE 80AB 1 ; 1 = ENGINE CLOSED LOOP 80BB 1 ; 1 = CATALYTIC CONVERTER OVERTEMP 80CF 5 ; B=0 80D3 8 ; rpm - $20, -400 rpm 80D5 2 ; br if rpm>400 80D7 4 ; else A=0 80D8 8 ; 2000 rpm 80DA 2 ; br if rpm<2000+400 80DF 8 ; rpm + 1600 80E1 2 ; br if rpm< 4775 80E3 8 ; else use A=$ff 80E5 B ; $B1, either A = RPM_12.5/bit - $20 ;; or A = NTRPMX_25/bit + $40 80E8 2 ; br if either RPM < 2612.5 ;; or RPM < 2825 ;; this br zeros out m01b5 80EA F ; else 80ED F ; B-$0A, B-10 80F0 2 ; br if B>10 80F2 C ; else increment B 80F9 1 ; 1 = POWER ENRICHMENT ACTIVE 81B5 1 ; 1 = LEFT O2 READY 81C6 1 ; 1 = RIGHT O2 READY 81EB 1 ; 1 = RIGHT O2 READY 81EF 1 ; 1 = LEFT O2 READY 81F3 1 0; 1 = ENGINE CLOSED LOOP 81F8 1 0; 1 = ENGINE CLOSED LOOP 8208 1 ; 1 = ENGINE CLOSED LOOP 8236 1 ; 1 = LEARN ENABLED 823B 1 ; 1 = LEARN ENABLED 825B C ;bt17_202f_what?_f_of_cooltemp ??? 82B2 C ;; bytes 2807 14 bt14_IAC_ParkPosVsCool steps = bytes 830F 1 ; 1=2nd gear or above..? 839E 1 ; 1=2nd gear or above..? 83A2 1 ; SKIP SHIFT ACTIVE 83BE 1 ; SKIP SHIFT ACTIVE 86C3 1 ; AC clutch 8839 1 ; PARK/NEUTRAL SWITCH 8865 1 ; 1 = IGNITION OFF 8903 0 ; rpm - ISESDD *2 8904 0 ; *4 8908 5 ;B = -B ....? 8A3E F ; l_0233_what_filtrd_$01 8A4A F ; l_0233_what_filtrd_$01 8A53 F ; l_0233_what_filtrd_$01 8A56 F ; l_0233_what_filtrd_$01 8A5C 1 ; A,B=L0233 8A5D 3 ; A=ADTHROTT or Default 8A5E 1 ;A-B->A ADTHROTT-L0233 8A62 F ; $56 = 86 8A65 3 ; A*86 -> D 8A66 C ; round off msb 8A69 0 ; *2 8A6C 0 ; *2 8A6D 2 ; limit to 255 8A8E B ;$30 = 48 8A91 B ; l_0233_what_filtrd_$01 8C58 C ;;FC50 bt37_fc50_gear_indxd_lkup_pointers: ;;FC50 db $06, $1A, $5A, $1A, $5B, $1A, $5C, $1A, $5A, $1A ;;FC5A db $5B, $1A, $5C, $1A, $5A, $1A, $5B, $1A, $5C, $1A ;;FC64 db $5A, $1A, $5B, $1A, $5C, $1A, $5A, $1A, $5B, $1A ;;FC6E db $5C, $1A, $5A, $1A, $5B, $1A, $5C 8C72 1 ; 1 = KICKDOWN PATTERN 8CB3 C ;;FC75 bt37_fc75_gear_indxd_lkup_pointers: ;;FC75 db $06, $1A, $5D, $1A, $5E, $1A, $5F, $1A, $5D, $1A ;;FC7F db $5E, $1A, $5F, $1A, $5D, $1A, $5E, $1A, $5F, $1A ;;FC89 db $5D, $1A, $5E, $1A, $5F, $1A, $5D, $1A, $5E, $1A ;;FC93 db $5F, $1A, $5D, $1A, $5E, $1A, $5F, 8CCD 1 ; 1 = KICKDOWN PATTERN 8E1B 1 ; ASR ACTIVE 8E3B 1 ; 1 = IN HOT MODE 8E4A 1 ; ASR ACTIVE 8E7A 1 ; 1 = DRIVE 3 8F02 1 ;1 = LOW, 1 = DRIVE 2 8F60 B ; A row, B col, X tbl addr, A returned val 8F64 1 ;br if Perf Pat requested 9009 1 ; AC clutch 9010 1 ; clear TCC BRAKE SWITCH brk_on=1 9013 1 ; br if aldl TCC BRAKE SWITCH INPUT set 9017 1 ; else set TCC BRAKE SWITCH brk_on=1 9021 1 ; 1 = POWERTRAIN IN MOTION 902B 1 6; 1 = POWER ENRICHMENT ACTIVE 9035 1 ; CRUISE ACTIVE 903E C ;TRANS MODE A,B,C 9040 C ; table of prndl to set as f(trans_modes) ;; $88, $08, $88, $04, $20, $40, $01, $02 ;; 10001000 00001000 10001000 00000100 00100000 01000000 00000001 00000010 ;; ILLEGALR,D4 D4 ILLEGALR,D4 D3 REV P/N Low D2 904F 9 ; PRNDLFLG RANGE INDICATION 9051 1 ; A - B ... what's in A 9052 2 ; br if A = trans mode prndl 9054 7 ; else clr m00d6 9057 D ; set to trans mode prndl 90DF B ; X*D/256^2->D 911A ;; table of prndl to set as f(trans_modes) ;; 10001000 00001000 10001000 00000100 00100000 01000000 00000001 00000010 ;; ILLEGALR,D4 D4 ILLEGALR,D4 D3 REV P/N Low D2 9131 1 ; 1 = DRIVE 2 913E 9 ; set Norm Pat Requested 9143 1 ; 1 = IGNITION OFF 915A 1 ; NOT USED 917B 1 ; 1=NOT NORMAL MODE hot? 9186 1 ; TRANS PERF/NORMAL SWITCH INPUT 91A7 1 ;br if b1 set & set 00D3 to $01 (normal), 91AB 8 ; else set 00D3 to $02 (performance) 91AD 9 ;set PATTERN 91B2 2 ; jmp to ret 91B4 1 ; NOT USED 91D3 8 ; maybe set 00D3 to $01 (normal), 91D5 1 ; if NOT NORMAL MODE hot?, br & set to normal 91D9 8 ; else set 00D3 to $04 (what mode?) 91DB 9 ;set PATTERN 91E0 1 ; br if NOT NORMAL MODE hot? 91EA 2 ; set 00D3 to $02 (performance) 91EC 8 ; set 00D3 to $01 (normal) 9215 1 ; set if 00ad b6 was set, get 16 fes bytes, else get 20 922A 2 ; use defaulted TPS a/d value 922F B ; ADTHROTT - min_ADTHROTT 9232 2 ; br if ADTHROTT > min_ADTHROTT 9234 C ; D = New Value to be filtered 9236 F ; X = Addr of Old Filtered Value 9239 1 ;$10 Y = Addr of Coeff Q ;; b_2861_min_ADTHROTT_increasing_fltr_coef 9240 F ; 182e_min_ADTHROT_filt_$10 ;; NEW = ( Q*(New-Old) + Old ) * (1+Q) 9246 B ; A= delta mph=old mph - new mph 9249 2 ; br if decel 924B 1 ; clr veh pos accel stat bit 9250 1 ;br if was accel, 1=veh pos accel stat bit 925C 1 ; TCC BRAKE SWITCH brk_on=1 9260 B ; $05 delta mph - 2.5 mph 9263 2 ; br if delmph < 2.5 mph/loop_interval 9265 B ; else, Use delmph as min_ADTHROT...? 9268 B ; $01 delmph+1 926B B ; $40 9270 B ; $40 max limit to $40 A/D counts 9276 1 ; 1=veh pos accel stat bit 927F F ; 9282 F ; 1ad6->1ad7, 1ad5->1ad6 9285 F ; 9288 F ; 1ad4->1ad5, 1ad3->1ad4 928D B ; $5A default TPS a/d counts....? 9291 2 ; skip the filter if defaulted 9296 F ; $ff 255/256 filter coef 929C F ; $1b0f is 1ad4_NDTHRPOS_old1_fltd_$ff 929F B ; TPS A/D counts 92A7 2 ;br if overflow clear 92AF B ; 1b11 = +128 + la57 -128 +1b0f 92B2 F ;$ED a/d counts 92B5 1 ; br if in kickdn 1 = KICKDOWN PATTERN 92B9 F ;$E5 a/d counts 92BC 1 ; 1 = KICKDOWN PATTERN 92BF F ; if is in kickdown 2890 - 1b0f ;; if not in kickdown 288f - 1b0f 92C4 1 ; br if NOT NORMAL MODE hot? prevent kickdown 92C8 1 ; 1 = KICKDOWN PATTERN 92CF B ; ADTHROTT - min_ADTHROTT 92D2 2 ; br to ret if ADTHROTT < min_ADTHROTT 92D9 1 ; $F0 240/256 filter coef ;; b_2863_min_ADTHROTT_decreasing_fltr_coef 92E3 B ; $40 92E8 B ; $40 min limit to $40 A/D counts 92FA 1 ; A-B->A ADTHROTT - min_ADTHROT 92FB 2 ; br if ADTHROTT > min_ADTHROTT 92FD 4 ; else A=0 92FE F ;$56 9301 3 ; $56*(ADTHROTT-min_ADTHROT) 9302 C ; $20*4 = $80 round off lsb 9308 0 ; 4* 930E B ; 4*86/256*(ADTHROTT-min_ADTHROT) 9311 3 ; NDTHRPOS=1.3437(ADTHROTT-min_ADTHROT) 9398 1 ; 1 = IGNITION OFF 93F8 1 ; 1 = REVERSE 9465 1 ; 1 = POWERTRAIN IN MOTION 9474 1 ; 1 = POWERTRAIN IN MOTION 947C 1 ; 1 = POWERTRAIN IN MOTION 9568 C ; Norm(b0),Perf(b1),Unknown(b2) Pattern 956A 2 ; br if in one of above modes, set 00c7 = $00 956C 8 ; else NOT IN NORMAL MODE, set 00c7 b0 = 1 9586 1 ; 1 = END OF SHIFT 95B5 1 ; 1 = START OF SHIFT 95C2 1 ; 1 = START OF SHIFT 95D0 F ;gear = N+1 95D3 5 ;1st -1, 2nd 0, 3rd 1, 4th 2 95D5 A ; 2nd 1ac1, 3rd 1ac2, 4th 1ac3 95E4 1 ; TCC ENgaged 9614 1 ; 1 = END OF SHIFT 9666 1 ; 1 = NOT IN NORMAL MODE 9677 8 ; set 00c7 b0 to 1 = NOT IN NORMAL MODE 9686 1 ;1 = LOW, 1 = DRIVE 2 96D1 1 ; 1 = IN HOT MODE 96D5 8 ; 00c9 b1 1 = IN HOT MODE 96EA 1 ; 1 = REVERSE 9705 B ; A row, B col, X tbl addr, A returned val 97D4 B ; A row, B col, X tbl addr, A returned val 98AC E ; $2E, $6D, $2E, $7E, $2E, $8F 9909 1 ;1 = LOW, 1 = DRIVE 2 9913 1 ; 1 = LOW 9939 1 ; 1 = NOT USED, 1 = PARK/NEUTRAL 9958 1 ; LOW,D2,D3,D4 995C 1 ; PRNDL LOW,D2,D3,D4 9967 1 ; PRNDL REV 9975 1 ; 1 = REVERSE 99C2 B ; A row, B col, X tbl addr, A returned val 9AA7 1 ; NOTUSED,REV,P/N 9B02 1 ; 1 = START OF SHIFT 9B33 1 ; 1 = END OF SHIFT 9C75 B ; A row, B col, X tbl addr, A returned val 9CC7 1 ; Negative Delta TPS bit 9CDB 1 ; Negative Delta TPS bit 9D10 A ;34ff $1f (6psd) $51 (wagon) 9D21 A ;34fb $ed (6spd & wagon) 9D36 1 ;old-new -> A 9D37 2 ;branch if decreasing THRPOS 9D39 B ;$ed (-18) old-new - $ed 9D3C 2 ;br if old-new > 9D3E B ;$50 (80) 9D43 B ; $09 old-new 9D57 F ; slip rpm N/8 9D5A 1 ; $f9c0 (wagon) -200 rpm 9D60 1 ; set TCC SLIP CONTINGENCY 9D65 B ; $00c8 (wagon) 25 rpm 9D6A 1 ; clear TCC SLIP CONTINGENCY 9D6D F ; $04 9D78 F ; $08 9D7B B ; $26 13 mph 9D82 B ; $24 12 mph 9D8D F ; $04 9D98 F ; $08 9D9E B ;$7f (wagon) 0111 1111 9DA1 8 ;test if 34d9 b2 (M AND mask) 9DA3 2 ; branch if b2 clear, ;; and skip chance to set mintps bit 9DA5 F ;else compare ndtpscounts to $04 or $08 9DA8 2 ; br if ndtpscounts > $04 or $08 9DAA 1 ;else set mintps status bit 9DB1 1 ; Negative Delta TPS bit 9DF4 1 ; 1 = IN HOT MODE 9EBD C ;;FE2F bt49_fe2f_gear_indxd_lkup_pointers: ;;FE2F db $08, $00, $00, $37, $58, $37, $69, $37, $7A, $00 ;;FE39 db $00, $37, $58, $37, $69, $37, $7A, $00, $00, $00 ;;FE43 db $00, $37, $69, $37, $7A, $00, $00, $00, $00, $37 ;;FE4D db $69, $37, $7A, $00, $00, $00, $00, $37, $69, $37 ;;FE57 db $7A, $00, $00, $37, $58, $37, $69, $37, $7A 9ED7 C ;;FE91 bt49_fe91_gear_indxd_lkup_pointers: ;;FE91 db $08, $00, $00, $37, $8B, $37, $9C, $37, $AD, $00 ;;FE9B db $00, $37, $8B, $37, $9C, $37, $AD, $00, $00, $00 ;;FEA5 db $00, $37, $9C, $37, $AD, $00, $00, $00, $00, $37 ;;FEAF db $9C, $37, $AD, $00, $00, $00, $00, $37, $9C, $37 ;;FEB9 db $AD, $00, $00, $37, $8B, $37, $9C, $37, $AD 9F81 C ;;FE60 bt49_fe60_gear_indxd_lkup_pointers: ;;FE60 db $08, $00, $00, $36, $F2, $37, $03, $37, $14, $00 ;;FE6A db $00, $36, $F2, $37, $03, $37, $14, $00, $00, $00 ;;FE74 db $00, $37, $03, $37, $14, $00, $00, $00, $00, $37 ;;FE7E db $03, $37, $14, $00, $00, $00, $00, $37, $03, $37 ;;FE88 db $14, $00, $00, $36, $F2, $37, $03, $37, $14 9FA6 C ;;FEC2 bt49_fec2_gear_indxd_lkup_pointers: ;;FEC2 db $08, $00, $00, $37, $25, $37, $36, $37, $47, $00 ;;FECC db $00, $37, $25, $37, $36, $37, $47, $00, $00, $00 ;;FED6 db $00, $37, $36, $37, $47, $00, $00, $00, $00, $37 ;;FEE0 db $36, $37, $47, $00, $00, $00, $00, $37, $36, $37 ;;FEEA db $47, $00, $00, $37, $25, $37, $36, $37, $47 9FF6 1 ; TCC ENgaged A0C0 B ;6spd =$02 00000010, wagon =$41 01000001 A0C3 8 ;compare bit 7 A0C5 2 ;if automatic (b7 set), do the math A0C7 7 ; else, don't bother shifting & lockup ;; *******set shift solenoids state*********** A0CD C ; $40, $00, $00, $40 A0D1 A ; lookup sol logic with respect to gear A0D3 D ; A= either 0 or 01000000 (bit6) ;; ; b67_ShiftAB A0D5 C ; set or clr bit6, depending on gear. gear 1,4 = ON A0D8 9 ; store b67_ShiftAB A0DA F ; 1,2,3,4 or 0,1,2,3?? must be 0,1,2,3 A0DD C ; $80, $80, $00, $00 A0E1 A ; lookup sol logic with respect to gear A0E3 D ; A= either 0 or 10000000 (bit7) b67_ShiftAB A0E5 C ; B and mask -> B, preserve all other bits A0E7 1 ; set or clr bit7, depending on gear. gear 1,2 = ON A0E8 9 ; b67_ShiftAB, b2_FuelCut A10E 1 ; set TccEnable bit A11E 1 ;clr TccEnable bit A129 1 ;clr TccEnable bit A12E 1 ;clr TccCtrl bit A134 1 ;$0000 A138 2 ;branch if tccdc is <=0 A13A 1 ; else branch if bit clear A13E 1 ; set TccCtrl bit A161 1 ; br if NOT NORMAL MODE hot? A19A 1 ; br if not NOT NORMAL MODE hot? A19E 1 ; NOTUSED,REV,P/N A21B 1 ; $65 A228 1 ; 1 = REVERSE A245 1 ; if IN HOT MODE, b=34e7 A249 F ; else b=34e6 A24C 1 ; clear IN HOT MODE A252 1 ; set IN HOT MODE A33F C ; called with Y=fb37 or fb43 A342 3 ; B=l_1B4E_GEAR A3C9 8 ; LOW,D2,D3 A3E3 3 ;; l_a3e4_bottmval_a3f0_lkup ;; lookup subroutine, using a3f0, ;; called with B,X, same as a3f0 ;; if returned table base is valid ;; sub looks up value there. ;; could be used to just get bottom value in the table ;; A3E4 ; preserve passed index A3E7 2 ; branch if addr is valid (nonzero) A3E9 4 ; else 0 -> A A3EA 2 ; jump to ret A3EC A ; lookup value there A3EF 3 ;; a3f0_lkup_indxd_tbl_base_addr ;; subroutine to get one of 6 sets of data table base addresses ;; indexed by B within each set. ;; 6 cases are: ;; called with: ;; B = index within each set ;; X = base of address lookup table ;; mX will be number of bytes ;; in each set, should be 2 less than max ;; index passed to sub in B. ;; total length of addr table should be ;; 6 * mX + 1 ;; returns: ;; X = data table base address ;; B reg value is preserved ;; if returned table base is zero, carry bit is ;; set so caller knows to ignore it. ;; A3F0 ; preserve for later, to return in B from sub A3F1 A ; mX -> A number of bytes in each set A3F3 0 ; X + 1 -> X inc to first byte of first set A3F4 5 ; B x 2 -> B convert index to 2 byte offset A3F5 3 ; B + X -> X X = Bth word in set A3F6 1 ; A -> B hold on to num bytes in each set A3F7 B ; 6spd $0C (00001100), wagon $09(00001001) A3FA 8 ; test if auto trans A3FC 2 ; branch if auto trans, ...? A3FE 1 ; else branch if clr 1 = IN HOT MODE A402 A ; else load first byte A404 A ; or with second byte A406 2 ; branch if Z=1 if bytes are not both zero? Use first set A408 3 ; B + X -> X add num bytes in each set. A409 1 ; else branch if NOT NORMAL MODE hot?, Use 2nd set A40D 3 ; B + X -> X add num bytes in each set. A40E 1 ; else branch if ... Use 3rd or 4th set A412 3 ; B + X -> X add num bytes in each set. use 4th set A413 3 ; B + X -> X add num bytes in each set. use 5th set A414 1 ; else branch if Performance Pattern ;; use 3rd if branch from a40e A418 3 ; B + X -> X add num bytes in each set. use 6th set A419 0 ; clear carry A41A E ; look up addr from table A41C 2 ; branch if Z=1, non zero addr looked up? A41E 0 ; else set carry. tell main not to use result addr A41F 3 ; put stacked value back in B A428 1 ; 1 = IN HOT MODE A433 1 ;br if NOT NORMAL MODE hot? A44D 8 ; bits 5&6 A44F 8 ; 0010 0000 A459 5 ; gear=N+1 - 1 A45A 5 ; *2, 1st gear=-2, 2nd=0, 3rd=2,4th=4 A464 6 ; A473 ;; bt17_1864_what_f_CURCELL_2nd_gear ;; bt17_1875_what_f_CURCELL_2nd_gear A586 1 ; 1 = LONG SHIFT DELAY A594 1 ; 1 = LONG SHIFT TIME A5BE 1 ; 1 = LONG SHIFT DELAY A5D1 1 ; 1 = LAST WAS STANDARD ADAPT A693 1 ; 1 = IGNITION OFF A6E5 ;;label 1830 bt17_1830_EADPT2 Pressure modifier 2nd gear, 17 bytes ;;label 1841 bt17_1841_EADPT3 Pressure modifier 3rd gear, 17 bytes ;;label 1852 bt17_1852_EADPT3 Pressure modifier 4th gear, 17 bytes A6F6 1 ; 1 = POWERTRAIN IN MOTION A75E 1 ; 1 = IN HOT MODE A793 3 ;; l_a794_chk_mskd_dtcs?_set ;; sub to check if various dtcs? are set ;; (not sure what these addrs are, could be dtcs from E side?, but they are in aldl stream) ;; l_000F_unused,l_0010_unused ;; l_0011_unused,l_0012_unused,l_0013_unused,0014 noref ;; using various passed mask set ;; calibration mask set ;; ;; preserves B & Y registers ;; ;; returns Z bit set if any bits were on in set of bits to be checked ;; ;; called with ;; X = various passed mask set address ;; ff54,ff5a,ff60,ff66,ff6c, or ff72 ;;ff54 $4D, $98, $31, $FB, $F3, $A0 (same in both 6psd & wagon) ;;ff5a $00, $80, $31, $11, $75, $A0 ;;FF60 $00, $00, $3D, $87, $69, $90, ;;FF66 $00, $00, $00, $12, $04, $00, ;;ff6a $00, $80, $01, $01, $21, $80, ;;FF72 $00, $00, $3C, $86, $48, $10, ;;ff78 $00, $00, $3C, $80, $48, $10, ;; ;; calibration mask set (disable checking) ;;2867 L2867: db $98, $FF (wagon) $98, $FD (6spd) ;;2869 L2869: db $FE, $B6, $10, $00 $FF, $F6, $00, $00 ;;286D L286D: db $00, $00 (same in both 6psd & wagon) ;;286F L286F: db $00, $00, $00, $00, ;; A796 3 ; preserve B & Y A797 1 ; $2867 -> Y A79B C ; $6 -> B A79D 3 ; X + 6 -> X increment passed addr by 6 (always $00) A79E 1 ; m2867+11 -> A A=$00 (all passes) A7A1 4 ; $ff-A -> A invert bits A=$ff (all passes) A7A2 1 ; m2867+5 & A -> A 0 & A -> A, A=$00 (pass 1) A7A5 3 ;save X for a minute A7A6 C ; l_000E_MALFFW12,l_000F_unused,l_0010_unused A7A9 3 ; l_0011_unused,l_0012_unused,l_0013_unused,0014 noref A7AA A ; A & m000E+B -> A A=$00 (pass 1) A7AC 3 ;get X back A7AD A ; A & passedaddr+6 -> A A7AF 2 ; branch if same bits were set in 0014&286c¬(2872) (first pass) A7B2 1 ; decrement, check preceeding byte A7B5 2 ; check up to 6 times A7B7 3 ; get back original B & Y A7BA 4 ; check A to set Z bit if any codes were set A7F6 3 ;; l_a7f7_chk_dtcs?_set ;; similar to l_a794_chk_mskd_dtcs?_set ;; except uses fixed mask set ff7e, and stores yes/no result in L00ce ;; so doesn't call with or return anything in registers A7FB 1 ; $2867 -> Y A7FF C ; $6 -> B A801 1 ; m2867+11 -> A A=$00 (all passes) A804 1 ; m2867+5 & A -> A 0 & A -> A, A=$00 (pass 1) A807 C ; l_000E_MALFFW12,l_000F_unused,l_0010_unused A80A 3 ; l_0011_unused,l_0012_unused,l_0013_unused,0014 noref A80B A ; A & m000E+B -> A A=$00 (pass 1) A80D C ;$00, $80, $30, $92, $42, $20, $00, A811 A ; A & mff7e+B -> A A824 C ; LOW,D2,D3 A8E0 1 ; 1 = NOT USED, 1 = PARK/NEUTRAL A90C 1 ; 1 = IGNITION OFF A917 1 ; ILLEGAL RANGE A95B 1 ; TCC BRAKE SWITCH brk_on=1 AA00 1 ; TCC BRAKE SWITCH brk_on=1 AB6D 1 ; 1 = NOT USED, 1 = PARK/NEUTRAL ACC6 1 ; 1 = IGNITION OFF ACCA 1 ; ASR ACTIVE ACCE 1 ; 1 = NOT USED, 1 = PARK/NEUTRAL AD01 1 ;bit 6 DTC 80 TRANS COMPNNT SLIPPING AD12 1 ;bit 6 DTC 80 TRANS COMPNNT SLIPPING AD17 1 ;bit 6 DTC 80 TRANS COMPNNT SLIPPING AD23 1 ; TCC ENgaged AD4A 1 ; D3,D4 AD57 1 ;bit 6 DTC 80 TRANS COMPNNT SLIPPING AD5A 1 ;bit 6 DTC 80 TRANS COMPNNT SLIPPING ADA7 1 ; D3,D4 AE1C 1 ; LOW,D2,D3,D4 AE89 1 ; LOW,D2,D3,D4 AFD4 C ; base address of tcc calibration bytes AFDA D ; start by zeroing out flag bytes 00c4 & 00c5 AFE5 2 ; if l2875 b4 clear, branch AFE7 B ; counter? AFEC 8 ; decrement by one AFEE B ; and store AFF1 1 ; ASR ACTIVE AFF5 B ; if asr active AFF8 B ; put l2897 in m1b6f instead of orig value B002 1 ; set l00c5 b4. aldl use only B005 1 ; this bit set/clrd in sub_LA1FD B00C B ;$ff 255 mph (6spd) B016 B ;$fe 254 mph (6spd) B025 1 ; 34d9 b3 tcc range contingency enable B029 1 ; LOW,D2 B02D 1 ; 1 = IN HOT MODE tcc will lock in d2, and LOW? B031 1 ; TCC RANGE CONTINGENCY B034 1 ; 34d9 b5 trans temp tcc contingency enable B038 A ; 34e4 $35 B03A 1 ;branch if TccCtrl bit (if Locked) B03E A ; 34e5 $32(6spd) $31(wagon) B045 1 ;min trans temp B048 1 ; 34d9 b6 engine temp tcc contingency enable B04C A ; 34e2 $78 (6spd) $82 (auto) B04E 1 ;branch if TccCtrl bit (if Locked) B052 A ; 34e3 $75 (6spd) $7a (auto) B059 1 ;min engine temp B05C 1 ; TCC BRAKE SWITCH brk_on=1 B060 1 ; Brake ON, TCC Off ;; to disable brake on contingency, change bset to bclr ;; 14 10100 to 15 10101, use switch b060 addr, mask 1, checked disables contingency B063 1 ;$34d9 $7f (wagon) 0111 1111 ;; $34d9 b1 NDTPS TCC Contingency Switch. enable=1, disable=0 B073 1 ; aldl Negative Delta TPS bit B082 1 ; 34da $0c (6spd) $1c (auto) B08E 1 ; 34da $0c (6spd) $1c (auto) B092 1 ; 1 = IN HOT MODE B0A2 1 ;branch if TccCtrl bit (if Locked) B0AD 1 ; TCC A/C ON Contingency B0B0 C ; $34da $1c 00011100 (wagon) $0c (6spd) B0B3 1 ; br if $34da b0 clear, disabled slip contingency? B0B7 1 ; br if TCC SLIP CONTINGENCY not set? B0BB 1 ;else set aldl TCC SLIP CONTINGENCY flag B0BE 1 ; br if $34da b2 clear, mintps cntin cntrl bit B0C2 1 ; br if clear, mintps status bit B0C6 1 ; else clr mintps status bit B0C9 1 ; set aldl TCC MIN TPS CONTINGENCY B0D3 1 ; branch if no dtcs? set B0D7 C ;else 34e8 -> X $FE B0DA 1 ; branch if ____? B0DE 0 ; else 34e9 -> X $FF B0F8 8 ; Gear - 3 B0FA 2 ; br if gear=3 B0FC 1 ; else set bit B0FF C ;bt17_37be_tccdc/$11_f(pressure) B105 4 ; pressure * 2 B108 8 ; limit to 255 B10D 1 ; A -> B, A still same. lkdup val * $11 B153 1 ; Brake ON, TCC Off B181 1 ; 1 = IN HOT MODE B1C0 1 ; 1 = KICKDOWN PATTERN B203 1 ; 1 = KICKDOWN PATTERN B242 1 ; 1 = IN HOT MODE B28B 1 ; 1 = NOT USED, 1 = PARK/NEUTRAL B2B7 1 ; LOW,D2,D3,D4 B2BB 1 ; PRNDL LOW,D2,D3,D4 B2BF 1 ; PRNDL REV B2C3 1 ; 1 = REVERSE B2FA 1 ; 1 = REVERSE B2FE 1 ; LOW,D2,D3,D4 B39E 1 ; NOTUSED,REV,P/N B4EB F ; called with $B51E,$B524,$B52A,$B530 B4F0 3 ; gear - 1 * 2 B500 F ; called with X = $b518 B504 5 ; gear - 1 * 2 B505 3 ; B506 E ;$3A1D, $3A2E, $3A2E, $3A3F B50E B ; $00 B536 1 ; set if data to eside is ready & chsm is calculated B53A 7 ; else skip checksumming & storing fes data B53D 1 ; bit2, flag for all fes data rec'd B541 7 ; else skip checksumming & storing fes data B544 1 ; if 00ad b6 is set, get 16 fes bytes, else get 20 ;; ; if bit is clear, set it @2 B548 1 ; else set if 00ad b6 was set, get 16 fes bytes, else get 20 B54B 1 ; if 00ad b6 is set, get 16 fes bytes, else get 20 B54E 1 ; clear flag for all fes data rec'd B554 B ;0 B557 B ;1 B55A B ;2 B55D B ;3 B560 B ;4 B563 B ;5 B566 B ;6 B569 B ;7 GP6EP2CT msb B56C B ;8 GP6EP2CT lsb B56F B ;9 B572 B ;10 GP6ENOCK B575 B ;11 GP6ESPKO msb B578 B ;12 GP6EAFND msb * 2 B57B B ;13 GP6ERPMC B57E B ;14 SDCYLID B581 B ;15 B584 B ;16 mltiplxd B587 B ;17 mltiplxd B58A B ;18 mltiplxd B58D B ;19 mltiplxd B590 B ;20 mltiplxd B593 B ;21 mltiplxr_indx B596 B ;22 B599 B ;23 B59C B ;24 B59F 8 ; add 02ca to 02e2, +1 B5A1 B ; compare to recd checksum B5A4 2 ; branch if checksum good, go store rec'd data B5A6 B ; else, load number of failed checksums? B5AD B ; increment it and store it for next time B5B0 B ; A - $28 B5B3 2 ; br if A < $28 (40 bytes) B5B5 7 ; else give up for now, too many cksm failures? B5B8 1 ; set if done with receiving data from eside B5BB 7 ; and skip storing fes data, since it must be bad data B5BE B ;0 B609 F ; recd from e side 0,1,2,3 or 4 B60C 3 ; A*B->D 5*02df B60D C ; base addr B610 3 ; B= lsb of 5*02df B614 E ; B619 E ; B61B B ; B61E A ;these 5 rec'd bytes will get put at ;; 02df = 0 02ae-02b2 (never ref'd) maybe l_02ae_ADMAP fts and back fes again..? ;; 02df = 1 02b3-02b7 lw_02B3_GP6EBPWL ;; 02df = 2 02b8-02bc L02B8 = $02B8 l_bt4_02b9_Module2BitPattern ;; 02df = 3 02bd-02c1 lw_02BD_GP6EBPWR = $02BD ;; L02BF = $02BF ;; 02df = 4 02c2-02c6 lw_02C5_GP6EAFND = $02C5 ;; L02C6 = $02C6 ;; something looks funny on index = 4, 02c5&6 should be a word, but it looks like c5 is passed as the ;; lsb of a word, and c6 is passed as a byte, have to see what eside does when this is sent. ;; 02df = 5+ ???? ;; B628 8 ; save existing b7 B62A B ; take only bits 0-6 from eside B643 1 ; AC clutch B653 0 ; disable interrupts B661 1 ; TCC ENgaged B66A B ;0 sent to eside data starts at 02e4 B66D 9 ; b67_ShiftAB, b2_FuelCut B67C B ; RBLM*RCORRCL*2 B6A0 F ; l_0233_what_filtrd_$01 B6A6 B ; round to nearest msb, send only msb B6DB B ;21 egr to eside B6DE B ;0 sent to eside data starts at 02e5 B6E1 B ;1 B6E4 B ;2 B6E7 B ;3 B6EA B ;4 RBLM*RCORRCL*2 B6ED B ;5 B6F0 B ;6 B6F3 B ;7 B6F6 B ;8 B6F9 B ;9 B6FC B ;10 B6FF B ;11 B702 B ;12 B705 B ;13 B708 B ;14 Coolant temp filtered B70B B ;15 Desired Idle Speed, 12.5 rpm/bit B70E B ;16 B711 B ;17 B714 B ;18 B717 B ;19 B71A B ;20 B71D B ;21 B720 B ;22 EGR duty cycle 2.55% / bit B723 B ;23? B726 B ;24? B72B B ;25 data to eside spi checksum? B72E 1 ; set if data to eside is ready & chsm is calculated B734 8 ;$d4 = 1101 0100 B736 B ; spie, spe, cpha bits set ;; spie - spi interrupt enabled ;; mstr = 1 master mode B74F 2 ; !!! ??? br never, but to where? B765 8 ; $c4 = 1100 0100 B767 B ; spie, spe, cpha bits set ;; spie - spi interrupt enabled ;; mstr = 0 slave mode B76A B ; sent to eside data starts at 02e4 B770 0 ; enable interrupts B77B F ;$10 = 16 B77E 1 ; if 00ad b6 is set, get 16 fes bytes, else get 20 B782 F ;$14 = 20 B785 1 ; A - B B786 2 ; br if A < B (if A < (16 or 20) ). not done B788 1 ; set if done with receiving data from eside B790 C ;base addr recd data table B793 F ; offset recd data B796 3 ; X + B -> X B797 B ; spsr -> A B79A C ; B-$19 (25) B79C 2 ;branch if B<25 B79E B ; else spdr -> A reading spsr&spdr clrs the spif bit B7A1 A ; rec'd data byte -> m02ca+L02c7 ;; rec'd from eside data starts at 02ca B7A3 2 ; no more data to recv? B7A8 8 ;1101 0100 B7AA B ;set spie,spe,mstr,cpha bits enable spi,mastr mode B7AD 1 ; clr m1008 bit5, portD, SS slave select line B7B1 A ; m02ca+l02c7+27 -> A ;; sent to eside data starts at 02e5 (02ca + 27, 02c7=0) ;; but 02e4 looks more like the start B7B3 B ; A -> spdr transmit data byte to e side B7B7 B ; recv data byte -> A B7BA A ; A-> m02ca+l02c7 B7BC C ; B + 2 -> B B7BE 1 ; set m1008 bit5, portD, SS slave select line B7C5 8 ;1100 0100 B7C7 B ;set spie,spe,cpha bits enable spi, slave mode B7CA B ; read spsr B7CD B ; read spdr, reading spsr&spdr clrs the spif bit B7D0 A ; recd byte -> m02ca+l02c7 + 1 B7D2 C ; B-$1A (26) B7D4 2 ; branch if B<26, ie: 25 bytes sent to eside ;; sent to eside data should end at 02fe (02e5 + 25) ;; but 02e4 + 25 = 02fd, which looks like actual end ;; ; else no more data to recv? B7D6 1 ; set flag for all fes data rec'd B7D9 2 ; jmp to reti B7DB A ; m02ca+l02c7 + 28 -> A B7DD B ; A -> spdr, send last byte? B7E0 F ; B -> L02c7 B7E4 ;SCI interrupt handler B822 F ;SCI Receiver interrupt B83E C ; main table of aldl commands ;;| Main table of commands F343 ;;| ;;| |+4 = xmit flag ;;| |+5 = xmit bytes ;;| |+8,9 rcvr buffer ;;| ;;|F343 F3 71 40 41 80 12 19 92 19 92 01 56 01 ;;|F350 08 01 76 01 A2 02 56 00 9E 00 9F 18 2D 18 2B 18 ;;|F360 2C 3B 00 01 9D 01 BD 19 83 19 84 1B 16 00 00 00 00 ;;| ;;|F371 F3 81 42 43 80 03 19 92 19 92 01 56 01 08 01 76 ;;| ;;|F381 F3 8B 91 90 80 80 00 00 19 92 B850 1 ;unknown command rcvd, but >= 0xE0 B87E B ; store last byte B88D A ; valid command received B8BD F ;command = 0x40 or 0x4* B8C6 1 ; 1 = FEDS ENABLED B8C9 1 ; 1 = FEDS ENABLED B8E7 1 ; 1 = FEDS ENABLED B92D 1 ; 0xF4 command gets us here B938 2 ; if mode < $0d, then it's valid B93A 7 ; else restart B950 8 ; B970 C ; 0xF4 command gets us here ;; $F7A9 F38B, F395 ;; $F7AD F715, F71F, F729, F733, F73F ;; $F7B7 F749, F753, F75D, F767, F771 ;; $F7C1 F77B, F787, F3AD, F42F, F495 B97A F ; store data, to be used by l_bb98_start_xmit sub B97D C ; vector table, addr indxd by mode B987 A ; call mode command subroutine B98C ;mode 0 ;;| F38B also used for mode 0 ;;|F38B 00 00 F4 F4 00 01 19 92 19 92 B9A2 ;;| Table of commands for mode 1 F395 ;;| ;;| 0 1 2 3 4 5 6 ;;|F395 F3A3 F425 F48B F4FF F58F F5F3 F6BF ;;| ;;| mode 1 msg 0 ;;| ;;|F3A3 00 00 F4 F4 80 3D 19 92 19 92 ;;1 00 0C ;;2 00 04 ;;3 00 05 ;;4 00 06 ;;5 00 07 ;;6 00 08 ;;7 00 09 ;;8 00 0A ;;9 00 E2 ;;10 00 E3 ;;11 00 E4 ;;12 00 E5 ;;13 00 E6 ;;14 00 E7 ;;15 00 0D ;;16 00 D7 ;;17 02 43 ;;18 FF FF ;;19 01 C3 ;;20 02 42 ;;21 01 34 ;;22 01 56 ;;23 01 A7 ;;24 01 BD ;;25 02 59 ;;26 02 50 ;;27 01 02 ;;28 01 08 ;;29 01 07 ;;30 01 76 ;;31 01 17 ;;32 18 28 ;;33 01 24 ;;34 01 26 ;;35 01 13 ;;36 01 1B ;;37 01 65 ;;38 01 63 ;;39 01 64 ;;40 01 62 ;;41 01 61 ;;42 FF FF ;;43 02 B3 ;;44 FF FF ;;45 02 BD ;;46 FF FF ;;47 02 C5 ;;48 02 2A ;;49 18 25 ;;50 18 26 ;;51 02 41 ;;52 02 3A ;;53 FF FF ;;54 02 38 ;;55 01 03 ;;56 02 37 ;;57 00 0E ;;58 01 9D ;;59 FF FF ;;60 00 42 ;;| ;;| mode 1 msg 1 ;;| ;;|F425 00 00 F4 F4 80 2F 19 92 19 92 ;;1 00 09 ;;2 00 0A ;;3 00 0B ;;4 00 0C ;;5 00 0D ;;6 01 07 ;;7 1A D3 ;;8 FF FF ;;9 1A D8 ;;10 1B 4A ;;11 1B 57 ;;12 1A 99 ;;13 1A 9A ;;14 1A 98 ;;15 00 D7 ;;16 01 17 ;;17 1B 4E ;;18 1A 94 ;;19 1A 95 ;;20 1A 85 ;;21 1A 86 ;;22 FF FF ;;23 1B 5B ;;24 1A 82 ;;25 1A 83 ;;26 FF FF ;;27 28 73 ;;28 1A 7F ;;29 01 9D ;;30 FF FF ;;31 1B 3F ;;32 01 A2 ;;33 1B 15 ;;34 FF FF ;;35 1A 77 ;;36 00 E2 ;;37 00 E3 ;;38 00 E4 ;;39 00 E6 ;;40 00 E7 ;;41 00 E8 ;;42 00 E9 ;;43 00 D3 ;;44 00 EA ;;45 00 EB ;;46 00 EC ;;| ;;| mode 1 msg 2 ;;| ;;|F48B 00 00 F4 F4 80 36 19 92 19 92 ;;1 02 03 ;;2 02 04 ;;3 02 05 ;;4 02 06 ;;5 02 07 ;;6 02 08 ;;7 02 09 ;;8 02 0A ;;9 02 0B ;;10 02 0C ;;11 02 0D ;;12 02 0E ;;13 00 03 ;;14 00 04 ;;15 00 05 ;;16 00 06 ;;17 00 07 ;;18 00 08 ;;19 00 09 ;;20 00 0A ;;21 00 0B ;;22 00 0C ;;23 00 0D ;;24 00 0E ;;25 02 6D ;;26 FF FF ;;27 01 C3 ;;28 00 E3 ;;29 00 D7 ;;30 00 DA ;;31 00 D9 ;;32 00 DC ;;33 00 DB ;;34 00 DE ;;35 00 DD ;;36 00 44 ;;37 00 45 ;;38 00 46 ;;39 00 47 ;;40 00 48 ;;41 00 49 ;;42 00 4A ;;43 00 4B ;;44 00 4C ;;45 00 4D ;;46 00 4E ;;47 00 4F ;;48 00 0F ;;49 00 10 ;;50 00 11 ;;51 00 12 ;;52 00 13 ;;53 00 14 ;;| ;;| mode 1 msg 3 no aldl definition document ;;| ;;|F4FF 00 00 F4 F4 80 44 19 92 19 92 01 02 01 03 01 04 01 ;;|F510 05 01 06 01 07 01 08 01 09 01 0A 01 0B 01 0C 01 ;;|F520 0D 01 0E 01 0F 18 28 01 11 01 12 01 13 01 14 01 ;;|F530 15 01 16 01 17 01 18 01 19 01 1A 01 1B 01 1C 01 ;;|F540 1D 01 1E 01 24 01 25 01 26 01 27 00 7D 00 7E 00 ;;|F550 7F 10 00 10 02 02 B7 02 B6 02 AE 02 AF 02 B1 02 ;;|F560 B2 02 B0 02 B5 02 C0 02 C1 02 C2 02 C3 02 C4 F7 ;;|F570 C5 F7 C6 F7 C7 F7 C8 F7 C9 F7 CA F7 CB F7 CC F7 ;;|F580 CD F7 CE F7 CF F7 D0 F7 D1 F7 D2 F7 D7 F7 D8 ;;| ;;| mode 1 msg 4 ;;| ;;|F58F 00 00 F4 F4 80 2E 19 92 19 92 ;;vin 0E 24 0E 25 0E 26 0E 27 0E 28 0E 29 0E 2A 0E 2B 0E 2C 0E 2D 0E 2E 0E 2F 0E 30 0E 31 0E 32 0E 33 0E 34 ;;endmodel 0E 20 0E 21 0E 22 0E 23 ;;siderail 0E 04 0E 05 0E 06 0E 07 0E 08 0E 09 0E 0A 0E 0B 0E 0C 0E 0D 0E 0E 0E 0F 0E 10 0E 11 0E 12 0E 13 ;;m1btptrn 20 00 20 01 20 02 20 03 ;;gp6em2p1 02 B9 02 BA 02 BB 02 BC ;;| ;;| mode 1 msg 5 no aldl definition document ;;| ;;|F5F3 00 00 F4 F4 80 62 19 92 19 92 00 5C 00 ;;|F600 5D 00 5E 00 5F 00 60 00 61 00 44 00 45 00 46 00 ;;|F610 47 00 48 00 49 00 56 00 57 00 58 00 59 00 5A 00 ;;|F620 5B 00 4A 00 4B 00 4C 00 4D 00 4E 00 4F 00 50 00 ;;|F630 51 00 52 00 53 00 54 00 55 00 69 00 63 00 6A 00 ;;|F640 64 00 6B 00 65 00 6C 00 66 00 6D 00 67 00 6E 00 ;;|F650 68 00 6F 00 70 00 71 00 72 00 73 00 74 00 75 00 ;;|F660 76 00 77 00 78 00 79 00 7A F7 D3 F7 D4 F7 D5 F7 ;;|F670 D6 19 2B 19 2C 19 2D 19 2E 19 2F 19 30 19 31 19 ;;|F680 32 19 33 19 34 19 35 19 36 19 37 19 38 19 39 19 ;;|F690 3A 19 3D 19 3E 19 41 19 42 19 43 19 44 19 45 19 ;;|F6A0 46 19 47 19 48 19 49 19 4A 19 4B 19 4C 19 4D 19 ;;|F6B0 4E 19 4F 19 50 19 26 19 27 19 28 19 29 19 2A ;;| ;;| mode 1 msg 6 ;;| ;;|F6BF 00 00 F4 F4 80 27 19 92 19 92 ;;2nd press adapt 18 30 18 31 18 32 18 33 18 34 18 35 18 36 18 37 18 38 18 39 18 3A 18 3B 18 3C 18 3D 18 3E 18 3F 18 40 ;;3rd press adapt 18 41 18 42 18 43 18 44 18 45 18 46 18 47 18 48 18 49 18 4A 18 4B 18 4C 18 4D 18 4E 18 4F 18 50 18 51 ;;35 00 E9 ;;36 1B 56 ;;37 1A 94 ;;38 1A 95 ;;| B9B0 ;;| mode 2 ;;|F715 00 00 F4 F4 40 41 19 92 19 92 B9B1 ;;|mode 3 ;;|F71F 00 00 F4 F4 40 11 19 92 19 92 B9B2 ;;|mode 4 ;;|F729 00 00 F4 F4 40 01 19 92 19 92 B9E4 ;;|mode 5 ;;|F733 00 00 F4 F4 80 02 19 92 19 92 19 85 BA75 ;;|mode 6 ;;|F73F 00 00 F4 F4 40 02 19 92 19 92 BA76 ;;| F253 = cmnd table for mode 7 commands ;;| ;;|F253 F2 85 0A 0A 00 03 19 92 00 00 00 00 01 ;;|F260 5D 01 5E 00 00 00 00 00 00 00 00 00 00 00 00 00 ;;|F270 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;;|F280 00 00 00 00 00 F2 B7 10 10 00 06 19 92 00 00 01 ;;|F290 A2 00 00 00 00 3B 00 00 82 01 BD 00 00 00 00 00 ;;|F2A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;;|F2B0 00 00 00 00 00 00 00 ;;| ;;|F2B7 F2 CB 91 90 00 05 19 92 00 ;;|F2C0 00 01 56 00 A0 02 56 00 A1 02 6D ;;| ;;|F2CB F2 D7 F0 F0 00 01 19 92 00 00 3A FF ;;|F2D7 F2 F5 40 40 00 0A 19 92 00 ;;|F2E0 00 01 56 01 57 01 9D 01 A2 00 A4 18 2B 18 2C 3B ;;|F2F0 00 01 76 00 9E ;; ;;|F2F5 F3 1B 45 45 00 0E 19 92 00 00 00 ;;|F300 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0A 00 ;;|F310 0B 00 0C 00 0D 00 0E 00 00 00 00 ;;| ;;|F31B F3 25 12 12 00 00 19 92 00 00 ;;| ;;|F325 F3 2F 10 10 00 00 19 92 00 00 ;;| ;;|F32F F3 39 92 92 00 00 19 92 00 00 ;;| ;;|F339 00 00 A6 A6 00 00 19 ;;|F340 92 00 00 BA76 C ;mode 7 BA7C A ; $0a BA80 E ; $F285 -> X BA90 ;;|mode 8 ;;|F753 00 00 F4 F4 00 01 19 92 19 92 BA90 1 ;disable chatter comms BA94 ;;|mode 9 ;;|F75D 00 00 F4 F4 00 01 19 92 19 92 BA94 1 ; enable chatter comms BA98 ;;|mode A ;;|F767 00 00 F4 F4 00 01 19 92 19 92 BA99 ;;|mode B ;;|F771 00 00 F4 F4 80 80 19 92 19 92 BA9A ;;|mode C ;;|F77B 00 00 F4 F4 80 02 19 92 19 92 19 79 BAD7 ;; mode D ;;|F787 F7 8B F7 9B ;;| ;;|F78B 00 00 F4 F4 80 04 19 92 19 92 02 A7 02 A8 02 A9 ;;| ;;|F79B 00 00 F4 F4 80 03 19 92 19 92 02 A7 02 AA BB98 ; start transmitting BBFF 8 ;$AA(170)->A BC01 B ;A->m1985 BC04 0 ;disable interrupts BC08 F ;tcnt -> m1986 BC0B 7 ; 0 -> m1988 BC0E 8 ; %1000000, bit 7 BC10 B ; set TOF bit. BC18 8 ; %00000100->A BC1A B ; %00000100->sccr2, RE bit, receiver enable BC1D C ; $1803->X BC20 1 ; clear bit 6 of $1803 BC23 F ; SCI stat reg->A, SCI data reg->B BC26 4 ; 0->A, why? scsr->A & then clr it? BC27 B ; 0->198a, zero out checksum BC2A B ; sccr2->A, SCI contrl reg 2 BC2D 8 ; sccr2 OR bit2 ->A, set RWU bit, wakeup enabled & recv interrupts inhibited BC2F B ; A->sccr2, put back in sccr2 BC32 8 ; gosub, retrn from BD05, A=SCI data reg, B=m198a chksm BC34 8 ;A-$E0 BC36 2 ;branch if A<$E0 BC38 8 ;else A-$F4 BC3A 2 ; branch if A=$F4 good message id BC3C 8 ; else gosub, retrn from BD05, A=SCIdatreg, B=m198a chksm BC3E 8 ; A-$54 base message length! BC40 B ; store command length BC43 8 ; gosub, retrn from BD05, A=SCI data reg, B=m198a chksm BC45 7 ;m198e-1 -> m198e BC48 2 ;test Z bit, from above, or returned from BD05? BC4A 5 ;test B-0 BC4B 2 ;branch if m198a chksum retrnd from BD05 = 0 BC4D 2 ;else jump to ret BC4F 8 ; gosub, retrn from BD05, A=scdr(recvd byte), B=m198a chksm BC51 8 ; A-$56 -> A BC53 2 ;branch if scdr was less than $56, bad message length, start over BC55 B ; else store command length BC58 8 ; gosub, retrn from BD05, A=SCI data reg, B=m198a chksm BC5A 8 ; A-5 BC5C 2 ; branch if not mode 5, go to trap BC5E 8 ; else gosub, retrn from BD05, A=SCI data reg, B=m198a chksm BC60 5 ; B-0 BC61 2 ; branch if chksm not = 0 BC63 B ; else m197a -> A BC66 8 ; set bit 0 BC68 B ; put back in m197a ;; load args to pass to subBD06 BC6B C ;1->B cmndlen BC6D 1 ;m1985 -> Y BC71 B ;sub transmit data? BC74 2 ;jump to ret BC76 8 ; A-6 BC78 2 ; branch into trap if A!=6 BC7A 8 ; else gosub, retrn from BD05, A=SCI data reg, B=m198a chksm BC7C B ; scdr -> m1990 BC7F 7 ; decrement cmndlen, m - 1 -> m BC82 8 ; gosub, retrn from BD05, A=SCI data reg, B=m198a chksm BC84 B ; scdr -> m1990 BC87 7 ; decrement cmndlen, m - 1 -> m BC8A 1 ; m1990,1991 -> Y BC8E 1 ; Y-$200 BC92 2 ; branch if addr is less than $200 BC94 8 ; else gosub, retrn from BD05, A=SCI data reg, B=m198a chksm BC96 1 ; A->addrY, overwrite desired mem location? BC99 1 ; Y+1->Y BC9B 7 ; decrement m198e BC9E 2 ; branch if m198e != 0 yet BCA0 8 ; else gosub, retrn from BD05, A=SCI data reg, B=m198a chksm BCA2 5 ; B-0 BCA3 2 ; branch if chksm = 0 BCA5 7 ; else BCA8 1 ; m1990,1991 -> Y BCAC 1 ; call sub commnded by aldl? BCB0 C ; $55->A, $AA->B BCB3 B ; $55->coprst, arms cop timer reset BCB6 F ; $AA->coprst, resets cop timer BCBC B ; $50->L1806, 80 why? what is L1806, only a few BCBF F ; $A0->L1806, 160 why? BCC2 B ; L1988->A BCC5 8 ; A-$0F, if A<$0F C bit set, if A=$0F Z bit set BCC7 2 ; if 1988>15 (C&Z bits = 0) branch to trap BCC9 2 ; if 1988!=15 (Z=0) branch, ie if 1988<15. if 1988=15 continue BCCB 1 ; Y->stack, BCCD 1 ; tcnt->Y BCD1 1 ; Y-L1986, C=1 if YY, get back pigeonholed index BCD7 2 ; if tcnt>=L1986 branch back to here, trap BCD9 F ; tflg2->B, timer interrupt flag register BCDC C ; B AND %10000000, TOF bit, timer overflow flag, if TOF not set Z=1 BCDE 2 ; if TOF is not set, branch, ie branch if tcnt has not overflowed BCE0 C ; %1000000, bit 7 BCE2 F ; set the TOF bit BCE5 4 ; A=A+1 BCE6 B ; A->L1988 BCEC 8 ;scsr bits 1,2,3 noise, overrun, frame error BCEE 2 ; branch if bits 1,2&3 were set? or if clear? BCF0 3 ; else stack->X BCF1 7 ; start again? BCF7 8 ;scsr bit5, rec data reg full flag BCF9 2 ; if data recd, gosub, retrn from BD05, A=SCI data reg, B=m198a chksm BCFB B ; scdr -> A BCFE 1 ; A->B BCFF F ; m+B -> B BD02 F ; B -> m198a BDA0 F ;SCI tranmitter interrupt BDA9 A ; +5 byte = # of xmit bytes BDAB 1 ; br if mode 0 BDCD 1 ; xmit mode byte BDD6 1 ; xmit 197e (2nd half) BDDA 1 ; mode 7 BDDE 1 ; modes 1 & 7 BDE2 1 ; none of mine BDED 1 ;my 0x89 = 0 (from dh) BDF1 1 ; mode 7 BE1B 0 ; mode = 2 BE1E 3 ;; if x = 0xffff, then xmit the double byte at [Y] ;; if x < 0x1000 then xmit [x] ;; if x >= 0x180f then xmit [x] ;; else xmit [x & 0xFF] BE36 F ;store lower byte in 197e BE39 1 ; set flag to indicate this BE3C 2 ;xmit upper byte (in acc) BE3E 1 ;xmit 197e (lower byte of the double byte value) BE46 A ; xmit mX BE50 ; xmit A C885 1 ; 1 = ENGINE CLOSED LOOP D10F E ;ld contents of addr passed in X ->B D111 C ;compare B w/ 7 D113 2 ;branch if X <= 7 D115 C ;else 7->B D117 E ; set addr in X to 7 D119 C ;jump table base addr D11C 5 ;B x 2, make B into addr offset D11D 3 ;B+X->X, create jump address D11E E ;put contents of addr in X->X D120 6 ;jump to addr ;; 8 vectors here, first address is 9th word later, also cmpB #$07 means 8 ;;D122 db $D1, $32, $D1, $32, $D1, $70, $D1, $BE, $D1, $F9 ;;D12C db $D2, $34, $D2, $5F, $D2, $B2, $FE, $1B, $E9, $B6 D315 E ;addr in X+1->B D317 C ;compare B w/ 4 D319 2 ;branch if X <= 7 D31B C ;else 0->B D31D E ; set addr in X to 0+1 D31F C ;jump table base ->X D322 5 ;B x 2, make B into addr offset D323 3 ;B+X->X, create jump address D324 E ;put addr in X->X D326 6 ;jump to addr ;; 5 vectors here, first address is 6th word later, also cmpB #$04 means 5 ;;D328 db $D3, $32, $D3, $5C, $D3, $90, $D3, $C3, $D3, $F6 ;;D332 db $FE, $1B, D474 E ;contents of addr passed in X -> B D476 C ;compare B&X D478 2 ;branch if B<=18 D47A C ;else set B=0 D47C E ; B->addr in X D47E C ;jump table base addr D481 5 ; Bx2, create table offset D482 3 ; B+X->X D483 E ;load contents of addr X ->X D485 6 ;jump to addr ;; looks like there are 25 addresses in the jump table, first addr points to 26th word later, ;; but don't see how last 6 can get called (branch if B<=18)... why? ;;D487 db $D4, $B9, $D4, $CE, $D4, $CE, $D5, $0C, $D5, $0C ;;D491 db $D5, $2D, $D5, $4E, $D5, $77, $D5, $4E, $D5, $77 ;;D49B db $D5, $4E, $D5, $77, $D5, $4E, $D5, $77, $D5, $4E ;;D4A5 db $D5, $77, $D5, $A2, $D5, $DE, $D5, $DE, $D6, $0F ;;D4AF db $D6, $2E, $D6, $4D, $D6, $6B, $D6, $92, $D6, $B9 ;;D4B9 db $FE, $1C, D77F E ;contents of addr in X->B D781 C ;compare B & 43 D783 2 ;branch if B<=43 D785 C ;else 43->B D787 E ; B->addr in X D789 C ;jump table base addr D78C 5 ;B x 2, create offset D78D 3 ;B+X->X D78E E ;contents of addr in X->X D790 6 ; jump to addr ;; appear to be 44 addr in jump table, first addr D7EA is 45th word later ;;D792 db $D7, $EA, $D7, $EA, $D8, $27, $D8, $27, $D8, $48 ;;D79C db $D8, $69, $D8, $92, $D8, $69, $D8, $92, $D8, $69 ;;D7A6 db $D8, $92, $D8, $69, $D8, $92, $D8, $69, $D8, $92 ;;D7B0 db $D8, $69, $D8, $92, $D8, $69, $D8, $92, $D8, $69 ;;D7BA db $D8, $92, $D8, $69, $D8, $92, $D8, $69, $D8, $92 ;;D7C4 db $D8, $BD, $D9, $30, $D9, $30, $D9, $30, $D9, $30 ;;D7CE db $D9, $30, $D9, $62, $D9, $93, $D9, $C4, $D9, $F5 ;;D7D8 db $DA, $26, $DA, $57, $DA, $80, $DA, $A9, $DA, $D2 ;;D7E2 db $DA, $FB, $DB, $23, $DB, $4B, $DB, $73, $FE, $1C ;;D7EC db $9F, $B6, DC70 C ; clear all DTC bits...??? DC73 E ; $0000 - $0020 DE66 1 ; MISCSTAT b4 NOT USED.. dOA!!! E8FF 1 ; MISCSTAT b4 NOT USED.. dOA!!! EAFF 1 ; 1 = IGNITION OFF EB04 1 ; 1 = IGNITION OFF EB3A ;; from anht.hac same lag filter subroutine ;;******************************************************* ;;* LAG_FIL.SRC ;;* ;;* First order lag filter ;;* ;;* Filter out unwnated transients from 8 bit unsigned ;;* intigers. ;;* ;;* Computes NEWVALUE = OLDVALUE + Q * (INPUT - OLDVALUE) ;;* where Q is a 8 bit fraction (00.xx) ;;* ;;* Call with: ;;* X Reg = old value (prior filtered value) ;;* A Reg = New value (to be filtered) ;;* B Reg = Q (Filter coef) ;; Result returned in A, with B=0 ;;* ;;* Exec time: 104 Cycles ;;* Stack req: 6 Bytes ;;* Code length: 35 Bytes ;;* ;;* ALGORITHEM: ;;* NEW = OLD + Q * (IN - OLD) ;;* = OLD HIGH + OLD LOW + Q * (IN - OLD HIGH) ;;* - Q * OLD LOW ;;* = OLD HIGH + Q * (IN - OLD HIGH) HIGH2 ;;* + Q * (IN - OLD HIGH) HIGH ;;* + Q * (IN - OLD HIGH) LOW ;;* + ;;* + (1-Q) * OLD LOW ;; EB3A 3 ; SAVE Q TO STACK EB3C 3 ; SAVE OLD VAL EB3D 3 ; SP -> X EB3E A ; RESULT = INPUT(A) - OLD VALUE(X) EB42 5 ;else EB45 E ; CALC OLD VALUE HIGH + Q * DELTA HIGH2 EB4D E ; CALC (1 - Q) * (OLDVALUE LOW) EB52 3 ;else EB57 E ; ADD Q * DELTA EB5C 3 ;;************************************************end of lag filter EB5D ;;* 8X16MULT.SRC from anht_hac ;;* ;;* 8 x 16 Multiply with 16 bit result result rounded ;;* to the upper 16 bits. ;;* ;;* CALL WITH: ;;* A Reg = 8 BIT Multiplier ;;* X Reg = Adderss og 16 bit Multiplicand ;;* ;;* RETURN WITH: ;;* A Reg = MSB of 16 bit result ;;* B Reg = LSM of 16 bit result ;;* ;;* Exec time: 66 Cycles ;;* Code length: 20 Bytes ;;* Stack req: 3 Bytes EB5D 3 ; SAVE A A*X->D 8 x 16 Multiply EB5E E ; LSB OF X with 16 bit result result EB60 3 ; MSB PARTIAL PROD rounded to the upper 16 bits. EB61 8 ; ROUND same as anht.hac EB63 3 ; get back multiplier EB64 3 ; SAVE PARTIAL PRODUCT EB65 A ; GET MSB OF MULTIPLICAND EB67 3 ; MSB PARTIAL PRODUCT EB68 3 ; preserve X EB6A E ; ADD IN LSB PARTIAL PROD EB6C 8 ; ROUND EB6E 3 ; get back X EB70 3 ; Result of A*X is left in D EB71 ; A row, B col, X tbl addr, A returned val ;;* LKUP_3D.SRC ;;* ;;* 3D Look up routine. Returns with the table value, ;;* (interpolated), based on 2 independent inputs. ;;* ;;* INPUTS: ;;* 1. R min value, (Rows) ;;* 2. Q min value, (Col's) ;;* 3. RNUM, number of Q Vals, (col's) ;;* in each R table ;;* 4. Thr 1st R table, R num entries in length ;;* ;;* 4 + RNUM secont R table ;;* 4 + (N-1) Nth R table ;;* ;;* CALL WITH: ;;* A Reg = R input, (Row arg) ;;* B Reg = Q input, (Coll arg) ;;* X Reg = Table start address ;;* ;;* RETURNS WITH: ;;* A Reg = F(Q,R) ;;* ;;* EXEC TIME: 257 - 264 Cycles ;;* SRACK REG: 9 Bytes ;;* CODE LENGTH: 114 BYTES EB75 A ; CALC ROW ARG OFFSET, (LIMITED TO 0) EB79 4 ; ... ELSE EB7A E ; CALC COL ARG OFFSET, (LIMITED TO 0) EB7E 5 ; ... ELSE EB7F 3 ; XFER TABLE ADDR TO Y REG EB82 3 ; SAVE ROW ADDRESS EB83 8 ; SPLIT COL ARG INTO TABLE OFFSET EB85 3 ; & INTERP PORTION EB86 3 ; SAVE INTERP PORTION TO STACK EB8A 3 ; GET ROW ARG EB8C 8 ; SPLIT ROW ARG INTO R EB8E 3 ; TABLE NUMBER EB8F 3 ; (MAX RESULT IS 255D) EBA4 4 ; ... else EBA8 2 ;; INTERP Y2, RND DOWN EBBA 4 ; ... else EBBE 2 ;; Interp Y & round down if nesessary EBC8 1 ; Y1 - Y2 EBC9 1 ; FRACTION MULT EBCC 2 ; BR IF D >= 0 EBCE 4 ;ELSE INTERP Y (RND UP IF Req) EBD3 2 ; TO EXIT ROUTINE ;; INTERP Y, & ROUND DOWN IF NECESSARY EBE5 A ; A-X -> A EBF2 3 ; X+2 -> X EBF3 2 ; jump into lkup2d_nooff_tblspc ;;********************************************************** ;;from anht.hac. Same 2D lookup sub ;;* LKUP_2DA.SRC ;;* ;;* l_ebf5_lkup2d_nooff_tblspc ;;* LEBF5: 2D table look up w/no offset ;;* spacing from table ;;* ;;* l_ebfc_lkup2d_off_tblspc ;;* ebfc_LKUP_2D: 2D table lookup w/offset ;;* spaced from table ;;* ;;* l_ec00_lkup2d_nooff_16spc ;;* ec00_P4LKUPQ: 2D table lookup ;;* spaced 16 ;;* ;;* Returns a value from a table based on the value of an ;;* independent varable. Only certin values of indepenednt ;;* varable are represnted in the table. ;;* ;;* Call Arg: ;;* A Reg = independent var ;;* X Reg = Address of table ;;* ;;* LKUP_2D: l_ebfc_lkup2d_off_tblspc ;;* B Reg = Value of independednt var ;;* ;;* LEBF5 & LKU_PQ: l_ec00_lkup2d_nooff_16spc l_ebf5_lkup2d_nooff_tblspc ;;* B Reg = Ignmored & 1st tabulated val is 0 ;;* ;;* LEBF5: ;;* 1st byt of table = 256/H (subsequent bytes ;;* are the tabulated values) ;;* EXAMPLE: ;;* 2 for H = 128, (3 table entries max) ;;* 16 for H = 16, (17 table entries max) ;;* 25 for H = 10.4, (26 table entries max) ;;* ;;* LKUP_2D & LKU_PQ ;;* This byte omitedm H = 16 ;;* ;;* RETURNS WITH: A Reg = table value ;;* ;;* EXEC TIME: LEBF5 = 81 - 82 cyc ;;* LKUP_2D = 78 - 81 ;;* LKUP_Q = 73 - 74 ;;* ;;* STACK REQ: 4 Bytes ;;* ;;* ;;* ORG $EBF5 ;;********************************************************** EBF5 ; 2D LK UP W/LINE COUNT EBF7 E ; Get 256/spacing value EBFA 2 ;;----------------- ;; LKUP_2D_OFFSET: ENTRY ;;----------------- EBFC ; Subtract offset EBFD 2 ; Br if D > 0 ;; 2D LOOK UP, NO OFFSET ... else EBFF 4 ;;----------------- ;; 2D LOOK UP, NO OFF SET ;;----------------- EC02 C ;Set 256/spacing, H to 16 (=$10) ;;--------------------------------- ;; Seperate val into table offset ;; & interp fraction ;;-------------------------------- EC08 E ;Pick up Y1 & Y2 EC0A 1 ;Get delta Y1 - Y2, EC0B 3 ;Ck if table is increasing EC0C 2 ;Br if not inc EC0E 4 ; ELSE Interp & round up if req EC12 2 ;;--------------------- ;; Interp & round ;; down if req'ed ;;--------------------- EC1C 3 ;;*****************************************end of 2D lookup subroutine*********** EC5B 2 ; if a previous op set the carry bit EC5D 4 ; then A=0 EC5F 3 ; A*B -> D EC60 0 ; *2 EC64 2 ; br if plus EC66 4 ; else A+1 -> A ;; round up msb if lsb>$80 EC69 8 ; limit to $FF EC6C 3 ;set aside X Old -> stack EC6D 3 ; SP -> X point to where Old got put EC6E A ; D - m(X:X+1) -> D D=Delt=New-Old EC70 3 ;set aside B (lsb of Delt) EC73 1 ; mY -> B Coeff EC76 3 ; A * B -> D D = DelQ = Deltmsb * Q EC79 1 ; mY -> B Coeff EC7C 3 ; A * B -> D D = DelQ = Deltmsb * Q EC7D 1 ; A - mY -> A DelQmsb - Q -> DelQmsb EC80 2 ;; l_ec82_filter_sub ;; Computes NEW = ( Q*(New-Old) + Old ) * (1+Q) ;; where Q is a 8 bit fraction (00.xx) ;; ;; Called with: ;; D = New Value to be filtered ;; X = Addr of Old Filtered Value ;; Y = Addr of Coeff Q ;; ;; Returns: ;; D = Result filtered value ;; X = preserved ;; EC82 3 ;set aside X Old -> stack EC83 3 ; SP -> X point to where Old got put EC84 A ; D - m(X:X+1) -> D D=Delt=New-Old EC86 3 ;set aside B (lsb of Delt) EC87 1 ; mY -> B Coeff EC8A 2 ; branch if carry set from D-m(X:X+1) EC8C 3 ;else A * B -> D D = DelQ = Deltmsb * Q EC8F 3 ; A * B -> D D = DelQ = Deltmsb * Q EC90 1 ; A - mY -> A DelQmsb - Q -> DelQmsb EC93 E ; D + mX:X+1 -> D DelQ+Old EC95 E ; A->mX, B->mX+1 DelQ+Old -> spot on stack where Old got put earlier EC97 3 ; stack -> A (DelQ+Old)msb EC98 1 ; mY -> B Q EC9B 3 ; A * B -> D (DelQ+Old)msb * Q -> D EC9C A ; A + mX+1 + C -> (DelQ+Old)lsb + lsb((DelQ+Old)msb * Q) EC9E 1 ; -> B lsb of D EC9F A ; mX -> A (DelQ+Old)msb + msb((DelQ+Old)msb * Q) ECA1 8 ; A + $00 + C -> A msb of D ECA3 3 ; preserve original X ECC1 ; X*D/256^2->D ;; similar to 1616b from anht_hac ;;* 1616B.SRC ;;* ;;* DO a 16 X 16 Multiply & return upper 2 bytes ;;* ;;* Multiplication is done useing the HC11 MUL instruction ;;* ;;* CALL WITH: ;;* X Reg = Multiplicand ;;* A Reg = MSB of Multiplier ;;* B Reg = LSB of Multiplier ;;* ;;* RETURNS WITH: ;;* A & B Reg = Upper 2 bytes of 32 bit product ;;* Cy = MSB bit of 3rd byte for rounding ECC2 3 ; MAKE SPACE ON STACK FOR MSB OF RESULT ECC3 3 ; MULTIPLICAND TO STACK ECC4 3 ; LSB OF MULTIPLIER ECC5 3 ; MSB OF MULTIPLIER ECC7 A ; GET LSB OF MULTIPLICAND ECC9 3 ; LSB OF MULT'ER * LSB OF MULT'CND ECCA E ; TEMP SAVE LSB OF FINAL RESULT ECCC E ; LSB MULT'ER->A & MSB MULT'CND->B ECCE 3 ; LSB MULT'ER * MSB MULT'ER ECCF E ; ADD LSB OF RESULT TO TEMP LSB OF FINAL RESULT ECD3 E ; SAVE FOR LATER ECD5 A ; GET MSB OF MULT'ER ECD7 E ; GET LSB OF MULT'CND ECD9 6 ; clear LSB OF MULT'CND ECDB 3 ; MSB MULTP'ER * LSB MULT'CND ECDC E ; ADD RESULT TO TEPM LSB OF FINAL RESULT ECDE 6 ; ROTATE CY IN TO OVERFLOW COUNTER ECE2 A ; GET MSB OF MULT'ER ECE4 E ; GET MSB OF MULT'CND ECE6 3 ; MSB MULT'ER * MS MULT'CND ECE7 E ; ADD MSB OF FINAL TO OVERFLOW COUNTer FFFF ; end of comments