home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / ACE-R11-SCR2.ARC / CRC32A.S < prev    next >
Encoding:
Text File  |  2019-04-13  |  4.1 KB  |  315 lines

  1. ;*** CRC32A PROGRAM - BY ├RAIG ┬RUCE
  2.  
  3. .SEQ ACEHEAD.S
  4. .ORG ACE┴PP┴DDRESS
  5. .OBJ "@0:CRC32A"
  6.  
  7. JMP CRC═AIN
  8. .BYTE ACE╔─1,ACE╔─2,ACE╔─3
  9. .BYTE 64,0  ;** STACK,RESERVED
  10.  
  11. ;*** GLOBAL DECLARATIONS
  12.  
  13. LIBWORK = $40
  14.  
  15. CHR├╥ = $0D
  16. CHR╤UOTE = $22
  17.  
  18. ;******** STANDARD LIBRARY ********
  19. PUTS = *
  20.    LDX #STDOUT
  21. FPUTS = *
  22.    STA ZP
  23.    STY ZP+1
  24.    LDY #$FF
  25. -  INY
  26.    LDA (ZP),Y
  27.    BNE -
  28.    TYA
  29.    LDY #0
  30.    JMP WRITE
  31. EPUTS = *
  32.    LDX #STDERR
  33.    JMP FPUTS
  34.  
  35. PUTCHAR = *
  36.    LDX #STDOUT
  37. PUTC = *
  38.    STA PUTC┬UFFER
  39.    LDA #<PUTC┬UFFER
  40.    LDY #>PUTC┬UFFER
  41.    STA ZP
  42.    STY ZP+1
  43.    LDA #1
  44.    LDY #0
  45.    JMP WRITE
  46.    PUTC┬UFFER .BUF 1
  47.  
  48. GETCHAR = *
  49.    LDX #STDIN
  50. GETC = *
  51.    LDA #<GETC┬UFFER
  52.    LDY #>GETC┬UFFER
  53.    STA ZP
  54.    STY ZP+1
  55.    LDA #1
  56.    LDY #0
  57.    JSR READ
  58.    BEQ +
  59.    LDA GETC┬UFFER
  60.    RTS
  61. +  SEC
  62.    RTS
  63.    GETC┬UFFER .BUF 1
  64.  
  65. GETARG = *
  66.    STY ZP+1
  67.    ASL
  68.    STA ZP
  69.    ROL ZP+1
  70.    CLC
  71.    LDA ACE┴RGV
  72.    ADC ZP
  73.    STA ZP
  74.    LDA ACE┴RGV+1
  75.    ADC ZP+1
  76.    STA ZP+1
  77.    LDY #0
  78.    LDA (ZP),Y
  79.    TAX
  80.    INY
  81.    LDA (ZP),Y
  82.    STX ZP
  83.    STA ZP+1
  84.    RTS
  85.  
  86. ;===CRC32===
  87. CRC┴RG = 2
  88. CRC╬AME = 4
  89. IN┬UF╠EN = 6
  90.  
  91. CRC═AIN = *
  92.    ;** CHECK ARGUMENT COUNT
  93.    LDA ACE┴RGC+1
  94.    BNE CRC┼NOUGH┴RGS
  95.    LDA ACE┴RGC
  96.    CMP #2
  97.    BCS CRC┼NOUGH┴RGS
  98.  
  99. CRC╒SAGE = *
  100.    LDA #<CRC╒SAGE═SG
  101.    LDY #>CRC╒SAGE═SG
  102.    JMP EPUTS
  103.  
  104. CRC╒SAGE═SG = *
  105.    .ASC "╒SAGE: CRC32 FILE1 FILE2 ... FILE╬"
  106.    .BYTE CHR├╥
  107.    .BYTE 0
  108.  
  109. CRC┼NOUGH┴RGS = *
  110.    ;** GET INPUT BUFFER LENGTH
  111.    SEC
  112.    LDA ACE═EM╘OP+0
  113.    SBC #<CRC╔N┬UF
  114.    STA IN┬UF╠EN
  115.    LDA ACE═EM╘OP+1
  116.    SBC #>CRC╔N┬UF
  117.    STA IN┬UF╠EN+1
  118.    ;** MAIN LOOP
  119.    LDA #1
  120.    LDY #0
  121.    STA CRC┴RG
  122.    STY CRC┴RG+1
  123. -  JSR CHECKSTOP
  124.    LDA CRC┴RG
  125.    LDY CRC┴RG+1
  126.    JSR GETARG
  127.    LDA ZP
  128.    LDY ZP+1
  129.    STA CRC╬AME
  130.    STY CRC╬AME+1
  131.    ORA ZP+1
  132.    BEQ CRC┼XIT
  133.    JSR CRC32
  134.    BCC +
  135.    JSR CRC┼RROR
  136. +  INC CRC┴RG
  137.    BNE +
  138.    INC CRC┴RG+1
  139. +  JMP -
  140.  
  141. CRC┼XIT = *
  142.    RTS
  143.  
  144. CHECKSTOP = *
  145.    JSR STOPKEY
  146.    BCS +
  147.    RTS
  148. +  LDA #<STOPPED═SG
  149.    LDY #>STOPPED═SG
  150.    JSR EPUTS
  151.    LDA #1
  152.    LDX #0
  153.    JMP EXIT
  154.    STOPPED═SG = *
  155.    .ASC "<╙TOPPED>"
  156.    .BYTE CHR├╥,0
  157.  
  158. CRC┼RROR = *
  159.    LDA #<CRC┼RROR═SG1
  160.    LDY #>CRC┼RROR═SG1
  161.    JSR EPUTS
  162.    LDA CRC╬AME
  163.    LDY CRC╬AME+1
  164.    JSR EPUTS
  165.    LDA #<CRC┼RROR═SG2
  166.    LDY #>CRC┼RROR═SG2
  167.    JMP EPUTS
  168.  
  169. CRC┼RROR═SG1 = *
  170.    .ASC "┼RROR READING FILE "
  171.    .BYTE CHR╤UOTE,0
  172.  
  173. CRC┼RROR═SG2 = *
  174.    .BYTE CHR╤UOTE,CHR├╥,0
  175.  
  176. BUF╨TR = 8
  177. BUF├OUNT = 10
  178. INFILE = 12
  179.  
  180. CRC32 = *
  181.    ;** OPEN FILE
  182.    LDA CRC╬AME
  183.    LDY CRC╬AME+1
  184.    STA ZP
  185.    STY ZP+1
  186.    LDA #"R"
  187.    JSR OPEN
  188.    BCC +
  189.    RTS
  190. +  STA INFILE
  191.    ;** ENCODE FILE
  192.    JSR CRC┬ODY
  193.    ;** CLOSE FILE
  194.    LDA INFILE
  195.    JSR CLOSE
  196.    RTS
  197.  
  198. ;CRC32 VERSION 1.0 FOR THE ├-128 AND ├-64 BY ├RAIG ┬RUCE 23-═AY-92
  199.  
  200. CH = 13         ;(1)
  201. CRC┴CCUM = 34   ;(4)
  202.  
  203. CRC╠OW  = $B7
  204. CRC═ID1 = $1D
  205. CRC═ID2 = $C1
  206. CRC╚IGH = $04
  207.  
  208. CRC┬ODY = *
  209.    LDX #3
  210.    LDA #0
  211. -  STA CRC┴CCUM,X
  212.    DEX
  213.    BPL -
  214.    STA BUF├OUNT
  215.    STA BUF├OUNT+1
  216.  
  217.    ;***SCAN FILE
  218.  
  219.    NEXT├HAR = *
  220.    JSR GET┬YTE
  221.    BCS CRC╨RINT
  222.    STA CH
  223.    LDX #8
  224.  
  225.    NEXT┬IT = *
  226.    ASL CH
  227.    ROL CRC┴CCUM+0
  228.    ROL CRC┴CCUM+1
  229.    ROL CRC┴CCUM+2
  230.    ROL CRC┴CCUM+3
  231.    BCC +
  232.    LDA CRC┴CCUM+0 
  233.    EOR #CRC╠OW
  234.    STA CRC┴CCUM+0
  235.    LDA CRC┴CCUM+1
  236.    EOR #CRC═ID1
  237.    STA CRC┴CCUM+1
  238.    LDA CRC┴CCUM+2 
  239.    EOR #CRC═ID2
  240.    STA CRC┴CCUM+2
  241.    LDA CRC┴CCUM+3 
  242.    EOR #CRC╚IGH
  243.    STA CRC┴CCUM+3
  244. +  DEX
  245.    BNE NEXT┬IT
  246.    JMP NEXT├HAR
  247.  
  248.    CRC╨RINT = *
  249.    LDA #<RES═SG1+9
  250.    LDY #>RES═SG1+9
  251.    STA ZP+0
  252.    STY ZP+1
  253.    LDX #CRC┴CCUM
  254.    LDA #10
  255.    JSR UTOA
  256.    LDA #" "
  257.    STA RES═SG1+19
  258.    LDA #<RES═SG1
  259.    LDY #>RES═SG1
  260.    JSR PUTS
  261.    LDA CRC╬AME
  262.    LDY CRC╬AME+1
  263.    JSR PUTS
  264.    LDA #<RES═SG2
  265.    LDY #>RES═SG2
  266.    JSR PUTS
  267.    CLC
  268.    RTS
  269.  
  270. RES═SG1 = *
  271.    .ASC "CRC32A = 1234567890 FOR "
  272.    .BYTE CHR╤UOTE,0
  273. RES═SG2 = *
  274.    .BYTE CHR╤UOTE,CHR├╥,0
  275.  
  276. GET┬YTE = *
  277.    LDA BUF├OUNT
  278.    ORA BUF├OUNT+1
  279.    BEQ GET┬YTE╞ILL┬UF
  280.    LDY #0
  281.    LDA (BUF╨TR),Y
  282.    INC BUF╨TR
  283.    BNE +
  284.    INC BUF╨TR+1
  285. +  LDX BUF├OUNT
  286.    BNE +
  287.    DEC BUF├OUNT+1
  288. +  DEC BUF├OUNT
  289.    CLC
  290.    RTS
  291.  
  292. GET┬YTE╞ILL┬UF = *
  293.    JSR CHECKSTOP
  294.    LDA #<CRC╔N┬UF
  295.    LDY #>CRC╔N┬UF
  296.    STA ZP
  297.    STY ZP+1
  298.    STA BUF╨TR
  299.    STY BUF╨TR+1
  300.    LDA IN┬UF╠EN
  301.    LDY IN┬UF╠EN+1
  302.    LDX INFILE
  303.    JSR READ
  304.    BEQ +
  305.    BCS +
  306.    STA BUF├OUNT
  307.    STY BUF├OUNT+1
  308.    JMP GET┬YTE
  309. +  SEC
  310.    RTS
  311.  
  312. ;===THE END===
  313. CRC┬SS = *
  314. CRC╔N┬UF  = CRC┬SS
  315.