home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / CRC.SOURCE-CODE < prev    next >
Encoding:
Text File  |  2019-04-13  |  3.6 KB  |  183 lines

  1. ********************************
  2. *   CRC PROTOCOL CALCULATION   *
  3. *   FOR COMMODORE COMPUTERS    *
  4. *        By Tom Brown          *
  5. *                              *
  6. *                              *
  7. * THIS FILE MAY BE UPLOADED TO *
  8. * ANY BBS OR PAY SERVICE, PRO- *
  9. * VIDED THAT ALL COMMENTS RE-  *
  10. * MAIN INTACT, AND THAT THE    *
  11. * AUTHOR BE GIVEN FULL CREDIT  *
  12. * WHEN ANY OF THIS CALCULATION *
  13. * IS USED.                     *
  14. ********************************
  15.  
  16.  
  17.  
  18. calc = $1021
  19.  
  20.  
  21. ************************************
  22. * THE POLYNOMIAL $1021 IS FOR THE  *
  23. * CALCULATION 2^16 + 2^12 + 2^5 + 1*
  24. * THE NUMBER IS GOTTEN BY USING A  *
  25. * 1 IN EACH BIT CORRESPONDING TO   *
  26. * THE POLYNOMIAL.                  *
  27. * EG: $1021 HAS A 1 IN BIT 0,5,& 12*
  28. ************************************
  29.  
  30.  
  31.  
  32.  org $1300
  33.  
  34. *
  35. * FIRST, WE HAVE TO ERASE THE OLD
  36. * CRC VALUE AND INITIALIZE THE
  37. * POLYNOMIAL WE WILL USE FOR THE
  38. * CALCULATION. NOTE THAT THE POLY
  39. * VARIABLE CAN BE CHANGED IN ONE
  40. * PLACE TO BE USED BY THE WHOLE
  41. * ROUTINE.
  42. * A CALLING ROUTINE WILL CALL THIS
  43. * ONLY ONCE. SUBSEQUENT CALLS WILL
  44. * BE TO crcalc.
  45. *
  46.  
  47.  
  48. initcrc lda #0
  49.  sta crc ;CRC CALCULATION
  50.  sta crc+1
  51.  lda #<calc
  52.  sta poly ;POLYNOMIAL
  53.  lda #>calc
  54.  sta poly+1
  55.  rts
  56.  
  57.  
  58. *
  59. * THIS ROUTINE WILL CALCULATE THE
  60. * CRC CHECKSUM WITH THE BYTE CURRENTLY
  61. * IN THE ACCUMULATOR.
  62. *
  63.  
  64.  
  65. crcalc ldx #8 ;COUNT 8 BITS
  66. loop pha  ;SAVE DATA
  67.  
  68.  
  69. *
  70. * FIRST, WE xor BIT 7 OF DATA WITH
  71. * BIT 15 OF CRC (BIT 7 OF HIGH BYTE)
  72. *
  73.  
  74.  
  75.  
  76.  and #127 ;GET BIT 7
  77.  eor crc+1 ;HIGH BYTE
  78.  sta crc+1
  79.  
  80.  
  81. *
  82. * NOW WE SHIFT CRC (HI & LOW BYTES)
  83. * LEFT ONE BIT. THE asl PUTS A 0 INTO
  84. * BIT 0 OF CRC LOW,SHIFTS CRC LOW BYTE
  85. * LEFT ONE BIT, BIT 7 FALLING INTO THE
  86. * CARRY. THE rol SHIFTS THE CRC HIGH
  87. * BYTE LEFT 1 BIT, THE CARRY IS MOVED
  88. * INTO BIT 0 OF CRC HIGH BYTE, AND BIT
  89. * 7 FALLS INTO THE NOW-EMPTY CARRY
  90. *
  91.  
  92.  
  93.  clc  ;CLEAR CARRY
  94.  asl crc ;SHIFT LOW BYTE
  95.  rol crc+1 ;NOW HIGH
  96.  bcc crcalc1
  97.  
  98.  
  99. *
  100. * BIT 15 (BIT 7 OF HIGH CRC BYTE) OF
  101. * CRC WAS SHIFTED INTO THE CARRY.
  102. * IF THIS BIT WAS 1 THEN EXCLUSIVE-OR
  103. * THE CRC WITH THE POLYNOMIAL
  104. *
  105.  
  106.  
  107.  lda poly ;POLYNOMIAL LOW
  108.  eor crc ;CRC LOW BYTE
  109.  sta crc
  110.  lda poly+1 ;POLYNOMIAL HIGH
  111.  eor crc+1
  112.  sta crc+1
  113.  
  114.  
  115. *
  116. * NOW WE SHIFT THE DATA BYTE LEFT 1 BIT
  117. * AND DECREMENT OUR BIT COUNTER
  118. * AS LONG AS IT'S NOT ZERO, WE CONTINUE
  119. * OUR BITWISE CALCULATION
  120. *
  121.  
  122.  
  123. crcalc1 pla  ;RESTORE DATA
  124.  asl  ;NEW BIT 7
  125.  dex  ;DEC BIT COUNT
  126.  bne loop
  127.  rts  ;WHEW! DONE.
  128.  
  129.  
  130. *
  131. * THESE ARE THE DATA BYTES
  132. *
  133.  
  134. crc hex 0000
  135. poly hex 0000
  136.  
  137.  
  138. ********************************
  139. * THIS SOURCECODE WOULD NOT BE *
  140. * POSSIBLE WITHOUT THE HELP OF *
  141. * BOB UMFER (AKA cbm*bob) AND  *
  142. * PETE BOSWELL (AKA topper),   *
  143. * BOTH OF plink.               *
  144. ********************************
  145.  
  146.  
  147. ********************************
  148. * THIS CODE WAS WRITTEN ON THE *
  149. * merlin ASSEMBLER, FOR THE    *
  150. * COMMODORE 128. JUST CHANGE   *
  151. * THE LOAD LOCATION FOR THE 64 *
  152. * AS THERE ARE NO MACHINE      *
  153. * SPECIFIC ROUTINES USED       *
  154. ********************************
  155.  
  156.  
  157.  
  158. The following is the BASIC sourcecode in Basic 7.0 for the C-128
  159. to test the machine language CRC calculation routine.
  160. Answer 1 to the prompt each time & you should get the following
  161. sequence of numbers:
  162.  
  163. HIGH BYTE       LOW BYTE     COMBINED VALUE
  164. =========       ========     ==============
  165.  
  166.    16              33            4129
  167.    35              16            8976
  168.    20              32            5152
  169.    98             148           25236
  170.  
  171.  
  172. All values are, of course, in decimal
  173.  
  174.  
  175.  
  176. 10 SYS(DEC("1300"))
  177. 20 INPUT"ENTER VALUE";A$:A=VAL(A$)
  178. 30 SYS(DEC("1313")),A:A=PEEK(DEC("1340")):B=PEEK(DEC("133F"))
  179. 40 C=(A*256)+B
  180. 50 PRINTA,B,C
  181. 60 GOTO20
  182.  
  183.