init:
;clr ICflag
set TMRT=RPM<1t TMRA (pre256?? toff256??)

scanDs: scan D1 && D2 (Dflag=0)
↓ call ICon && goto FwdFront || ↑ nop

FwdFront: read TMRT → T, restart TMRT
goto ScanD

ScanD:  scan D1 || D2 (Dflag=1|0)
↓ goto FwdFront || ↑ goto RearFront

RearFront: if ICflag=1 ; call ICoff ; (stop TMRA)
??1st	start TMRA (toff)
	swap D1-D2 Dflag
goto compAA

compAA:
tonH:tonL=TH:TL/4 (>>2)
pTMRon = tonH:tonL/FF*2 (>>7) ; предделитель TMR0, OPTION:0:[PS2:0]
TMRon = tonH:tonL/[pTMRon]    ; TMR0, где pTMRon = закодированный Коэф в OPTION:0:[PS2:0]

if T > 7RPM  | T < 1RPM ; AA=0 ; else compAA=f(T)

find xDPZ
let loAA hiAA loRPM hiRPM               sub 2b - 2b
loDPZ=loRPM-T                           mul 2b * 2b
hiDPZ=xDPZ-loDPZ                        add 4b + 4b
AA=(hiAA*loDPZ+loAA*hiDPZ)/xDPZ         div 4b : 2b

toffH:toffL=TH:TL-AAH:AAL-tonH:tonL
pTMRoff = toffH:toffL/FF*2 (>>7) ; предделитель TMR0, OPTION:0:[PS2:0]
TMRoff = toffH:toffL/[pTMRoff]   ; TMR0, где pTMRoff = закодированный Коэф в OPTION:0:[PS2:0]
goto ScanD

ICon:	if D1; PORTB IC1=1 (Dflag) ; else PORTB IC2=1 TAH=1 RMW!!!
	set ICflag
return

ICoff:	clr PORTB RMW!!!
	clr ICflag
return

int004h:  if TMRA ; stop TMRA
	if ICflag=0 ; call ICon ; else call ICoff
	if AA≠0 ; start TMRA (ton)
retfie
	  else TMRT ; stop TMRT ; set TMRT (RPM<1t)	факт переполнения на малых оборотах, значение для след цикла
retfie

Dflag=D1/D2=0
ICflag=PORTB IC1/IC2=1
tonflag в цикле (ICoff по зад фронту и последующее прерывание TMRA)
