Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; CRC-16/CCITT-FALSE calculation
- ; Initial value = 0xFFFF
- ;
- ; CRC-16/AUG-CCITT calculation
- ; Initial value = 0x1D0F
- ;
- ; 16-bit CRC-CCITT specification, which is:
- ; Width = 16 bits
- ; Truncated polynomial = 0x1021
- ; Input data is NOT reflected
- ; Output CRC is NOT reflected
- ; No XOR is performed on the output CRC
- ;
- ; unsigned short crc16(const unsigned char* data_p, unsigned char length){
- ; unsigned char x;
- ; unsigned short crc = 0xFFFF;
- ;
- ; while (length--){
- ; x = crc >> 8 ^ *data_p++;
- ; x ^= x>>4;
- ; crc = (crc << 8) ^ ((unsigned short)(x << 12)) ^ ((unsigned short)(x <<5)) ^ ((unsigned short)x);
- ; }
- ; return crc;
- ; }
- ORG 0x8000
- ld HL, null
- ld BC, size_null
- call crc
- ld HL, char_A
- ld BC, size_A
- call crc
- ld HL, num
- ld BC, size_num
- call crc
- ld HL, A256
- ld BC, size_A256
- call crc
- ret
- ; In: BC sum bytes
- ; Out: DE crc16
- crc:
- push HL
- push BC
- ld DE, 0xFFFF ; 3:10 CRC-16/CCITT-FALSE
- call crc_loopB
- call PRINT_DE
- pop BC
- pop HL
- ld A, ' '
- rst 10H
- ld DE, 0x1D0F ; 3:10 CRC-16/AUG-CCITT
- call crc_loopB
- call PRINT_DE
- ld A, 0x0D
- rst 10H
- ret
- ; In: BC sum bytes, DC start crc, HL data addr
- ; Out: DE crc16
- crc_loopB:
- ld A, B
- or C
- ret z
- dec BC
- inc C
- push BC
- ld B, C
- crc_loopC:
- ; In: HL = Data addr, DE old crc
- ; Out: DE new crc
- ; Pollutes: AF, DE, HL, C
- crc16_byte:
- ld A, (HL) ; 1:7
- xor D ; 1:4
- ld C, A ; 1:4 x = ((old_crc>>8) ^ data) & 0xff;
- rrca ; 1:4
- rrca ; 1:4
- rrca ; 1:4
- rrca ; 1:4
- and 0x0F ; 2:7
- xor C ; 1:4
- ld C, A ; 1:4 x ^= x>>4
- ;11:46
- add A, A ; 1:4
- add A, A ; 1:4
- add A, A ; 1:4
- add A, A ; 1:4 1111 0000
- xor E ; 1:4
- ld D, A ; 1:4 crc_hi = (old_crc << 8) ^ (x << 12)
- xor E ; 1:4
- add A, A ; 1:4 1110 0000
- xor C ; 1:4
- ld E, A ; 1:4 crc_lo = (x << 5) ^ x
- ld A, C ; 1:4
- rrca ; 1:4
- rrca ; 1:4
- rrca ; 1:4
- and 0x1F ; 2:7 0001 1111
- xor D ; 1:4
- ld D, A ; 1:4 crc_hi = (old_crc << 8) ^ (x << 12) ^ (x << 5)
- ;18:71
- inc HL ; 1:6
- djnz crc_loopC ; 2:8/13
- pop BC
- ld C, 0x00
- jr crc_loopB
- ;===============================
- ;TISK OBSAHU <DE> V HEXA KODU
- PRINT_DE:
- ld A, D
- call PRINT_A
- ld A,E
- ;-------------------------------
- PRINT_A:
- push AF
- call AHI2HEX ;VYPISE HORNI NIBBLE REG A
- rst 0x10 ; vypis znaku z registru A
- pop AF
- call ALO2HEX ;VYPISE DOLNI NIBBLE REG A
- rst 0x10 ; vypis znaku z registru A
- ret
- ;-------------------------------
- AHI2HEX:
- rrca
- rrca
- rrca
- rrca
- ALO2HEX:
- and 0x0F
- add A,0x90 ; hex-->ascii
- daa
- adc A,'@'
- daa
- ret
- null:
- size_null EQU $-null
- db 0x00
- char_A:
- db 'A'
- size_A EQU $-char_A
- db 0x00
- num:
- db "123456789"
- size_num EQU $-num
- db 0x00
- A256:
- db "AAAAAAAAAAAAAAAA"
- db "AAAAAAAAAAAAAAAA"
- db "AAAAAAAAAAAAAAAA"
- db "AAAAAAAAAAAAAAAA"
- db "AAAAAAAAAAAAAAAA"
- db "AAAAAAAAAAAAAAAA"
- db "AAAAAAAAAAAAAAAA"
- db "AAAAAAAAAAAAAAAA"
- db "AAAAAAAAAAAAAAAA"
- db "AAAAAAAAAAAAAAAA"
- db "AAAAAAAAAAAAAAAA"
- db "AAAAAAAAAAAAAAAA"
- db "AAAAAAAAAAAAAAAA"
- db "AAAAAAAAAAAAAAAA"
- db "AAAAAAAAAAAAAAAA"
- db "AAAAAAAAAAAAAAAA"
- size_A256 EQU $-A256
- db 0x00
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement