init:
set ovflwTMRT AA.0 clr ICflg
set TMRT=FF ;;TMRA (pre256?? toff256??)

scanDs: scan D1 && D2 (set Dflg)
↓ call ICon && goto FwdFront || ↑ nop

FwdFront: stop TMRT ; TMRT  → T ; [re]start TMRT
	mov LastData -> _ActData (pTMR[off|on] AA.0)
goto ScanD

ScanD:  scan D1 || D2 (Dflg)
↓ goto FwdFront || ↑ goto RearFront

RearFront: stop TMRA ; if ICflag=1 call ICoff
	swap D1-D2 Dflag
	if ovflwTMRT ; not start TMRA clr ovflwTMRT delay5ms call ICon
	else start TMRA (toff)
	clr AA.0
goto compAA

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

if T < 7RPM  | T > 1RPM ; AA=0 (Stsflg:AA.0=1) ; goto comp toff

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 = FF-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 ; if Stsflg:_AA.0=0 start TMRA (ton) ; retfie
		else call ICoff ; retfie
	  else TMRT stop TMRT ; set ovflwTMRT ; set AA.0 ; 0xFF → TMRT ; retfie  факт переполнения на малых оборотах, значение для след цикла

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