|
DSEG AT 20h
Ecc1: ds 1 ; Эти переменные - только в
Ecc2: ds 1 ; побитово адресуемой InRAM (20H-2FH)
Ecc3: ds 1 ; ECC
Count: ds 1 ; ECC
DSEG AT 10h
sum: ds 1 ;
paritr: ds 1 ; Эти переменные должны быть
paritc: ds 1 ; в InRAM с прямой (direct) адресацией
p8_2: ds 1 ;
p16_2: ds 1 ; переменные для вычисления ECC
p32_2: ds 1 ;
p64_2: ds 1 ;
p128_2: ds 1 ;
p256_2: ds 1 ;
p512_2: ds 1 ;
p1024_2: ds 1 ;
Rezerv1: ds 1
Rezerv2: ds 1
Rezerv3: ds 1
ISEG AT 0A0h
BUFF16: ds 16
p0c equ p8_2 ; переменные для вычисления ECC
p1c equ p16_2 ;
p2c equ p32_2 ;
p3c equ p64_2 ;
p4c equ p128_2 ;
p5c equ p256_2 ;
p6c equ p512_2 ;
p7c equ p1024_2 ;
b8_2 bit Ecc1.0
b8_1 bit Ecc1.1
b16_2 bit Ecc1.2
b16_1 bit Ecc1.3
b32_2 bit Ecc1.4
b32_1 bit Ecc1.5
b64_2 bit Ecc1.6
b64_1 bit Ecc1.7
b128_2 bit Ecc2.0
b128_1 bit Ecc2.1
b256_2 bit Ecc2.2
b256_1 bit Ecc2.3
b512_2 bit Ecc2.4
b512_1 bit Ecc2.5
b1024_2 bit Ecc2.6
b1024_1 bit Ecc2.7
b1_2 bit Ecc3.2
b1_1 bit Ecc3.3
b2_2 bit Ecc3.4
b2_1 bit Ecc3.5
b4_2 bit Ecc3.6
b4_1 bit Ecc3.7
FL1 bit Ecc3.0
FL2 bit Ecc3.1
FL3 bit Ecc3.2
FL4 bit Ecc3.3
FL5 bit Ecc3.4
FL6 bit Ecc3.5
FL7 bit Ecc3.6
FL8 bit Ecc3.7
ECC_CODE SEGMENT CODE
RSEG ECC_CODE
HAMMTABLE:
dB 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0
dB 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1
dB 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1
dB 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0
dB 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1
dB 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0
dB 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0
dB 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1
dB 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1
dB 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0
dB 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0
dB 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1
dB 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0
dB 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1
dB 1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1
dB 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0
CalcECC:
;=====================================================================
; Расчет ЕСС для 256 байт. Адрес первого байта данных в XRAM
; передается в DPTR. Расчитанная ЕСС размещается в переменных
; Есс1:Ecc2:Ecc3. DPTR после выполнения содержит адрес байта
; за обсчитанными 256.
;=====================================================================
mov A,R0
push ACC
push B
clr A ;
mov R0,#Sum ; Обнуляем переменные
mov B,#11 ;
ecc_clearv: ;
mov @R0,A ;
inc R0 ;
djnz B,ecc_clearv ;
mov ecc1,A
mov ecc2,A
mov ecc3,A
mov Count,A
ecc_c1:
movx A,@DPTR
inc DPTR
xrl ParitC,A
push DPH
push DPL
mov DPTR,#HAMMTABLE
movc A,@A+DPTR
mov Paritr,A
pop DPL
pop DPH
xrl Sum,A
mov A,ParitR
jb Count.0,$+5
xrl p8_2,A
;-------------------------------------------------------------------
jb Count.1,$+5
xrl p16_2,A
;-------------------------------------------------------------------
jb Count.2,$+5
xrl p32_2,A
;-------------------------------------------------------------------
jb Count.3,$+5
xrl p64_2,A
;-------------------------------------------------------------------
jb Count.4,$+5
xrl p128_2,A
;-------------------------------------------------------------------
jb Count.5,$+5
xrl p256_2,A
;-------------------------------------------------------------------
jb Count.6,$+5
xrl p512_2,A
;-------------------------------------------------------------------
jb Count.7,$+5
xrl p1024_2,A
inc Count
mov A,Count
jz $+5
ljmp ecc_c1
;--------------------------------------------------------------------
; Раскидываем биты по своим местам
;--------------------------------------------------------------------
clr FL1
mov A,Sum
jz ecc_bites
setb FL1
ecc_bites:
mov A,p8_2
mov C,ACC.0
mov b8_2,C
jnb FL1,$+4
cpl C
mov b8_1,C
mov A,p16_2
mov C,ACC.0
mov b16_2,C
jnb FL1,$+4
cpl C
mov b16_1,C
mov A,p32_2
mov C,ACC.0
mov b32_2,C
jnb FL1,$+4
cpl C
mov b32_1,C
mov A,p64_2
mov C,ACC.0
mov b64_2,C
jnb FL1,$+4
cpl C
mov b64_1,C
mov A,p128_2
mov C,ACC.0
mov b128_2,C
jnb FL1,$+4
cpl C
mov b128_1,C
mov A,p256_2
mov C,ACC.0
mov b256_2,C
jnb FL1,$+4
cpl C
mov b256_1,C
mov A,p512_2
mov C,ACC.0
mov b512_2,C
jnb FL1,$+4
cpl C
mov b512_1,C
mov A,p1024_2
mov C,ACC.0
mov b1024_2,C
jnb FL1,$+4
cpl C
mov b1024_1,C
mov A,Ecc1
cpl A
mov Ecc1,A
mov A,Ecc2
cpl A
mov Ecc2,A
;--------------------------------------------------------------------
; Рассчет оставшихся битов
;--------------------------------------------------------------------
mov Ecc3,#00
mov A,ParitC
mov R0,#p0c
mov B,#8
ecc_bcopy:
rrc A
jc $+6
mov @R0,#0
sjmp $+4
mov @R0,#1
inc R0
djnz B,ecc_bcopy
mov A,p6c
xrl A,p4c
xrl A,p2c
xrl A,p0c
mov C,Acc.0
mov b1_2,C
mov A,p7c
xrl A,p5c
xrl A,p3c
xrl A,p1c
mov C,Acc.0
mov b1_1,C
mov A,p5c
xrl A,p4c
xrl A,p1c
xrl A,p0c
mov C,Acc.0
mov b2_2,C
mov A,p7c
xrl A,p6c
xrl A,p3c
xrl A,p2c
mov C,Acc.0
mov b2_1,C
mov A,p3c
xrl A,p2c
xrl A,p1c
xrl A,p0c
mov C,Acc.0
mov b4_2,C
mov A,p7c
xrl A,p6c
xrl A,p5c
xrl A,p4c
mov C,Acc.0
mov b4_1,C
mov A,Ecc3
cpl A
mov Ecc3,A
pop ACC
mov R0,A
pop B
RET;=============================================================>>>>>
E-mail: info@telesys.ru