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

  1. ;*** CRC32B PROGRAM - BY ├RAIG ┬RUCE - 14-╧CT-93
  2.  
  3. .SEQ ACEHEAD.S
  4. .ORG ACE┴PP┴DDRESS
  5. .OBJ "@0:CRC32"
  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. CRC╘ABLE0 = *
  19.    .BYTE $00,$96,$2C,$BA,$19,$8F,$35,$A3,$32,$A4,$1E,$88,$2B,$BD,$07,$91
  20.    .BYTE $64,$F2,$48,$DE,$7D,$EB,$51,$C7,$56,$C0,$7A,$EC,$4F,$D9,$63,$F5
  21.    .BYTE $C8,$5E,$E4,$72,$D1,$47,$FD,$6B,$FA,$6C,$D6,$40,$E3,$75,$CF,$59
  22.    .BYTE $AC,$3A,$80,$16,$B5,$23,$99,$0F,$9E,$08,$B2,$24,$87,$11,$AB,$3D
  23.    .BYTE $90,$06,$BC,$2A,$89,$1F,$A5,$33,$A2,$34,$8E,$18,$BB,$2D,$97,$01
  24.    .BYTE $F4,$62,$D8,$4E,$ED,$7B,$C1,$57,$C6,$50,$EA,$7C,$DF,$49,$F3,$65
  25.    .BYTE $58,$CE,$74,$E2,$41,$D7,$6D,$FB,$6A,$FC,$46,$D0,$73,$E5,$5F,$C9
  26.    .BYTE $3C,$AA,$10,$86,$25,$B3,$09,$9F,$0E,$98,$22,$B4,$17,$81,$3B,$AD
  27.    .BYTE $20,$B6,$0C,$9A,$39,$AF,$15,$83,$12,$84,$3E,$A8,$0B,$9D,$27,$B1
  28.    .BYTE $44,$D2,$68,$FE,$5D,$CB,$71,$E7,$76,$E0,$5A,$CC,$6F,$F9,$43,$D5
  29.    .BYTE $E8,$7E,$C4,$52,$F1,$67,$DD,$4B,$DA,$4C,$F6,$60,$C3,$55,$EF,$79
  30.    .BYTE $8C,$1A,$A0,$36,$95,$03,$B9,$2F,$BE,$28,$92,$04,$A7,$31,$8B,$1D
  31.    .BYTE $B0,$26,$9C,$0A,$A9,$3F,$85,$13,$82,$14,$AE,$38,$9B,$0D,$B7,$21
  32.    .BYTE $D4,$42,$F8,$6E,$CD,$5B,$E1,$77,$E6,$70,$CA,$5C,$FF,$69,$D3,$45
  33.    .BYTE $78,$EE,$54,$C2,$61,$F7,$4D,$DB,$4A,$DC,$66,$F0,$53,$C5,$7F,$E9
  34.    .BYTE $1C,$8A,$30,$A6,$05,$93,$29,$BF,$2E,$B8,$02,$94,$37,$A1,$1B,$8D
  35.  
  36. CRC╘ABLE1 = *
  37.    .BYTE $00,$30,$61,$51,$C4,$F4,$A5,$95,$88,$B8,$E9,$D9,$4C,$7C,$2D,$1D
  38.    .BYTE $10,$20,$71,$41,$D4,$E4,$B5,$85,$98,$A8,$F9,$C9,$5C,$6C,$3D,$0D
  39.    .BYTE $20,$10,$41,$71,$E4,$D4,$85,$B5,$A8,$98,$C9,$F9,$6C,$5C,$0D,$3D
  40.    .BYTE $30,$00,$51,$61,$F4,$C4,$95,$A5,$B8,$88,$D9,$E9,$7C,$4C,$1D,$2D
  41.    .BYTE $41,$71,$20,$10,$85,$B5,$E4,$D4,$C9,$F9,$A8,$98,$0D,$3D,$6C,$5C
  42.    .BYTE $51,$61,$30,$00,$95,$A5,$F4,$C4,$D9,$E9,$B8,$88,$1D,$2D,$7C,$4C
  43.    .BYTE $61,$51,$00,$30,$A5,$95,$C4,$F4,$E9,$D9,$88,$B8,$2D,$1D,$4C,$7C
  44.    .BYTE $71,$41,$10,$20,$B5,$85,$D4,$E4,$F9,$C9,$98,$A8,$3D,$0D,$5C,$6C
  45.    .BYTE $83,$B3,$E2,$D2,$47,$77,$26,$16,$0B,$3B,$6A,$5A,$CF,$FF,$AE,$9E
  46.    .BYTE $93,$A3,$F2,$C2,$57,$67,$36,$06,$1B,$2B,$7A,$4A,$DF,$EF,$BE,$8E
  47.    .BYTE $A3,$93,$C2,$F2,$67,$57,$06,$36,$2B,$1B,$4A,$7A,$EF,$DF,$8E,$BE
  48.    .BYTE $B3,$83,$D2,$E2,$77,$47,$16,$26,$3B,$0B,$5A,$6A,$FF,$CF,$9E,$AE
  49.    .BYTE $C2,$F2,$A3,$93,$06,$36,$67,$57,$4A,$7A,$2B,$1B,$8E,$BE,$EF,$DF
  50.    .BYTE $D2,$E2,$B3,$83,$16,$26,$77,$47,$5A,$6A,$3B,$0B,$9E,$AE,$FF,$CF
  51.    .BYTE $E2,$D2,$83,$B3,$26,$16,$47,$77,$6A,$5A,$0B,$3B,$AE,$9E,$CF,$FF
  52.    .BYTE $F2,$C2,$93,$A3,$36,$06,$57,$67,$7A,$4A,$1B,$2B,$BE,$8E,$DF,$EF
  53.  
  54. CRC╘ABLE2 = *
  55.    .BYTE $00,$07,$0E,$09,$6D,$6A,$63,$64,$DB,$DC,$D5,$D2,$B6,$B1,$B8,$BF
  56.    .BYTE $B7,$B0,$B9,$BE,$DA,$DD,$D4,$D3,$6C,$6B,$62,$65,$01,$06,$0F,$08
  57.    .BYTE $6E,$69,$60,$67,$03,$04,$0D,$0A,$B5,$B2,$BB,$BC,$D8,$DF,$D6,$D1
  58.    .BYTE $D9,$DE,$D7,$D0,$B4,$B3,$BA,$BD,$02,$05,$0C,$0B,$6F,$68,$61,$66
  59.    .BYTE $DC,$DB,$D2,$D5,$B1,$B6,$BF,$B8,$07,$00,$09,$0E,$6A,$6D,$64,$63
  60.    .BYTE $6B,$6C,$65,$62,$06,$01,$08,$0F,$B0,$B7,$BE,$B9,$DD,$DA,$D3,$D4
  61.    .BYTE $B2,$B5,$BC,$BB,$DF,$D8,$D1,$D6,$69,$6E,$67,$60,$04,$03,$0A,$0D
  62.    .BYTE $05,$02,$0B,$0C,$68,$6F,$66,$61,$DE,$D9,$D0,$D7,$B3,$B4,$BD,$BA
  63.    .BYTE $B8,$BF,$B6,$B1,$D5,$D2,$DB,$DC,$63,$64,$6D,$6A,$0E,$09,$00,$07
  64.    .BYTE $0F,$08,$01,$06,$62,$65,$6C,$6B,$D4,$D3,$DA,$DD,$B9,$BE,$B7,$B0
  65.    .BYTE $D6,$D1,$D8,$DF,$BB,$BC,$B5,$B2,$0D,$0A,$03,$04,$60,$67,$6E,$69
  66.    .BYTE $61,$66,$6F,$68,$0C,$0B,$02,$05,$BA,$BD,$B4,$B3,$D7,$D0,$D9,$DE
  67.    .BYTE $64,$63,$6A,$6D,$09,$0E,$07,$00,$BF,$B8,$B1,$B6,$D2,$D5,$DC,$DB
  68.    .BYTE $D3,$D4,$DD,$DA,$BE,$B9,$B0,$B7,$08,$0F,$06,$01,$65,$62,$6B,$6C
  69.    .BYTE $0A,$0D,$04,$03,$67,$60,$69,$6E,$D1,$D6,$DF,$D8,$BC,$BB,$B2,$B5
  70.    .BYTE $BD,$BA,$B3,$B4,$D0,$D7,$DE,$D9,$66,$61,$68,$6F,$0B,$0C,$05,$02
  71.  
  72. CRC╘ABLE3 = *
  73.    .BYTE $00,$77,$EE,$99,$07,$70,$E9,$9E,$0E,$79,$E0,$97,$09,$7E,$E7,$90
  74.    .BYTE $1D,$6A,$F3,$84,$1A,$6D,$F4,$83,$13,$64,$FD,$8A,$14,$63,$FA,$8D
  75.    .BYTE $3B,$4C,$D5,$A2,$3C,$4B,$D2,$A5,$35,$42,$DB,$AC,$32,$45,$DC,$AB
  76.    .BYTE $26,$51,$C8,$BF,$21,$56,$CF,$B8,$28,$5F,$C6,$B1,$2F,$58,$C1,$B6
  77.    .BYTE $76,$01,$98,$EF,$71,$06,$9F,$E8,$78,$0F,$96,$E1,$7F,$08,$91,$E6
  78.    .BYTE $6B,$1C,$85,$F2,$6C,$1B,$82,$F5,$65,$12,$8B,$FC,$62,$15,$8C,$FB
  79.    .BYTE $4D,$3A,$A3,$D4,$4A,$3D,$A4,$D3,$43,$34,$AD,$DA,$44,$33,$AA,$DD
  80.    .BYTE $50,$27,$BE,$C9,$57,$20,$B9,$CE,$5E,$29,$B0,$C7,$59,$2E,$B7,$C0
  81.    .BYTE $ED,$9A,$03,$74,$EA,$9D,$04,$73,$E3,$94,$0D,$7A,$E4,$93,$0A,$7D
  82.    .BYTE $F0,$87,$1E,$69,$F7,$80,$19,$6E,$FE,$89,$10,$67,$F9,$8E,$17,$60
  83.    .BYTE $D6,$A1,$38,$4F,$D1,$A6,$3F,$48,$D8,$AF,$36,$41,$DF,$A8,$31,$46
  84.    .BYTE $CB,$BC,$25,$52,$CC,$BB,$22,$55,$C5,$B2,$2B,$5C,$C2,$B5,$2C,$5B
  85.    .BYTE $9B,$EC,$75,$02,$9C,$EB,$72,$05,$95,$E2,$7B,$0C,$92,$E5,$7C,$0B
  86.    .BYTE $86,$F1,$68,$1F,$81,$F6,$6F,$18,$88,$FF,$66,$11,$8F,$F8,$61,$16
  87.    .BYTE $A0,$D7,$4E,$39,$A7,$D0,$49,$3E,$AE,$D9,$40,$37,$A9,$DE,$47,$30
  88.    .BYTE $BD,$CA,$53,$24,$BA,$CD,$54,$23,$B3,$C4,$5D,$2A,$B4,$C3,$5A,$2D
  89.  
  90. ;******** STANDARD LIBRARY ********
  91.  
  92. PUTS = *
  93.    LDX #STDOUT
  94. FPUTS = *
  95.    STA ZP+0
  96.    STY ZP+1
  97.    LDY #$FF
  98. -  INY
  99.    LDA (ZP),Y
  100.    BNE -
  101.    TYA
  102.    LDY #0
  103.    JMP WRITE
  104. EPUTS = *
  105.    LDX #STDERR
  106.    JMP FPUTS
  107.  
  108. PUTCHAR = *
  109.    LDX #STDOUT
  110. PUTC = *
  111.    STA PUTC┬UFFER
  112.    LDA #<PUTC┬UFFER
  113.    LDY #>PUTC┬UFFER
  114.    STA ZP+0
  115.    STY ZP+1
  116.    LDA #1
  117.    LDY #0
  118.    JMP WRITE
  119.    PUTC┬UFFER .BUF 1
  120.  
  121. GETCHAR = *
  122.    LDX #STDIN
  123. GETC = *
  124.    LDA #<GETC┬UFFER
  125.    LDY #>GETC┬UFFER
  126.    STA ZP+0
  127.    STY ZP+1
  128.    LDA #1
  129.    LDY #0
  130.    JSR READ
  131.    BEQ +
  132.    LDA GETC┬UFFER
  133.    RTS
  134. +  SEC
  135.    RTS
  136.    GETC┬UFFER .BUF 1
  137.  
  138. GETARG = *
  139.    STY ZP+1
  140.    ASL
  141.    STA ZP+0
  142.    ROL ZP+1
  143.    CLC
  144.    LDA ACE┴RGV
  145.    ADC ZP+0
  146.    STA ZP+0
  147.    LDA ACE┴RGV+1
  148.    ADC ZP+1
  149.    STA ZP+1
  150.    LDY #0
  151.    LDA (ZP),Y
  152.    TAX
  153.    INY
  154.    LDA (ZP),Y
  155.    STX ZP+0
  156.    STA ZP+1
  157.    RTS
  158.  
  159. ;===CRC32===
  160. CRC┴RG = 2
  161. CRC╬AME = 4
  162. IN┬UF╠EN = 6
  163.  
  164. CRC═AIN = *
  165.    ;** CHECK ARGUMENT COUNT
  166.    LDA ACE┴RGC+1
  167.    BNE CRC┼NOUGH┴RGS
  168.    LDA ACE┴RGC+0
  169.    CMP #2
  170.    BCS CRC┼NOUGH┴RGS
  171.  
  172. CRC╒SAGE = *
  173.    LDA #<CRC╒SAGE═SG
  174.    LDY #>CRC╒SAGE═SG
  175.    JMP EPUTS
  176.  
  177. CRC╒SAGE═SG = *
  178.    .ASC "╒SAGE: CRC32B FILE1 FILE2 ... FILE╬"
  179.    .BYTE CHR├╥
  180.    .BYTE 0
  181.  
  182. CRC┼NOUGH┴RGS = *
  183.    ;** GET INPUT BUFFER LENGTH
  184.    SEC
  185.    LDA ACE═EM╘OP+0
  186.    SBC #<CRC╔N┬UF
  187.    STA IN┬UF╠EN+0
  188.    LDA ACE═EM╘OP+1
  189.    SBC #>CRC╔N┬UF
  190.    STA IN┬UF╠EN+1
  191.    ;** MAIN LOOP
  192.    LDA #1
  193.    LDY #0
  194.    STA CRC┴RG+0
  195.    STY CRC┴RG+1
  196. -  JSR CHECKSTOP
  197.    LDA CRC┴RG+0
  198.    LDY CRC┴RG+1
  199.    JSR GETARG
  200.    LDA ZP+0
  201.    LDY ZP+1
  202.    STA CRC╬AME
  203.    STY CRC╬AME+1
  204.    ORA ZP+1
  205.    BEQ CRC┼XIT
  206.    JSR CRC32
  207.    BCC +
  208.    JSR CRC┼RROR
  209. +  INC CRC┴RG+0
  210.    BNE +
  211.    INC CRC┴RG+1
  212. +  JMP -
  213.  
  214. CRC┼XIT = *
  215.    RTS
  216.  
  217. CHECKSTOP = *
  218.    JSR STOPKEY
  219.    BCS +
  220.    RTS
  221. +  LDA #<STOPPED═SG
  222.    LDY #>STOPPED═SG
  223.    JSR EPUTS
  224.    LDA #1
  225.    LDX #0
  226.    JMP EXIT
  227.    STOPPED═SG = *
  228.    .ASC "<╙TOPPED>"
  229.    .BYTE CHR├╥,0
  230.  
  231. CRC┼RROR = *
  232.    LDA #<CRC┼RROR═SG1
  233.    LDY #>CRC┼RROR═SG1
  234.    JSR EPUTS
  235.    LDA CRC╬AME+0
  236.    LDY CRC╬AME+1
  237.    JSR EPUTS
  238.    LDA #<CRC┼RROR═SG2
  239.    LDY #>CRC┼RROR═SG2
  240.    JMP EPUTS
  241.  
  242. CRC┼RROR═SG1 = *
  243.    .ASC "┼RROR READING FILE "
  244.    .BYTE CHR╤UOTE,0
  245.  
  246. CRC┼RROR═SG2 = *
  247.    .BYTE CHR╤UOTE,CHR├╥,0
  248.  
  249. BUF╨TR = 8
  250. BUF├OUNT = 10
  251. INFILE = 12
  252.  
  253. CRC32 = *
  254.    ;** OPEN FILE
  255.    LDA CRC╬AME+0
  256.    LDY CRC╬AME+1
  257.    STA ZP+0
  258.    STY ZP+1
  259.    LDA #"R"
  260.    JSR OPEN
  261.    BCC +
  262.    RTS
  263. +  STA INFILE
  264.    ;** ENCODE FILE
  265.    JSR CRC┬ODY
  266.    ;** CLOSE FILE
  267.    LDA INFILE
  268.    JSR CLOSE
  269.    RTS
  270.  
  271. CH = 13         ;(1)
  272. CRC┴CCUM = 34   ;(4)
  273. CRC╘EMP  = 38   ;(4)
  274.  
  275. CRC┬ODY = *
  276.    LDX #3
  277.    LDA #$FF
  278. -  STA CRC┴CCUM,X
  279.    DEX
  280.    BPL -
  281.    LDA #0
  282.    STA BUF├OUNT+0
  283.    STA BUF├OUNT+1
  284.  
  285.    ;***SCAN FILE
  286.  
  287.    NEXT├HAR = *
  288.    JSR GET┬YTE
  289.    BCS CRC╨RINT
  290.    STA CH
  291.  
  292. ;** CRC = 0X╞╞╞╞╞╞╞╞;
  293. ;** WHILE( (C=GETC(FP)) != ┼╧╞ ) 
  294. ;**     CRC = (CRC>>8) & 0X00╞╞╞╞╞╞ ^ CRC╘ABLE[ (CRC^C) & 0X╞╞ ];
  295. ;** 
  296. ;** RETURN( CRC^0X╞╞╞╞╞╞╞╞ );
  297.  
  298.    LDA CRC┴CCUM+0       ;.╪ = (CRC^C) & 0X╞╞
  299.    EOR CH
  300.    TAX
  301.  
  302.    LDA CRC┴CCUM+1       ;CRC = (CRC>>8) & 0X00╞╞╞╞╞╞ ^ CRC╘ABLE[ .╪ ]
  303.    EOR CRC╘ABLE0,X
  304.    STA CRC┴CCUM+0
  305.    LDA CRC┴CCUM+2
  306.    EOR CRC╘ABLE1,X
  307.    STA CRC┴CCUM+1
  308.    LDA CRC┴CCUM+3
  309.    EOR CRC╘ABLE2,X
  310.    STA CRC┴CCUM+2
  311.    LDA CRC╘ABLE3,X
  312.    STA CRC┴CCUM+3
  313.    JMP NEXT├HAR
  314.  
  315.    CRC╨RINT = *
  316.    LDA #<RES═SG1+8
  317.    LDY #>RES═SG1+8
  318.    STA SYSWORK+0
  319.    STY SYSWORK+1
  320.    LDY #9
  321.    LDX #3
  322. -  LDA CRC┴CCUM,X
  323.    EOR #$FF
  324.    PHA
  325.    LSR
  326.    LSR
  327.    LSR
  328.    LSR
  329.    JSR PUT╚EX
  330.    PLA
  331.    JSR PUT╚EX
  332.    DEX
  333.    BPL -
  334.    LDA #<RES═SG1
  335.    LDY #>RES═SG1
  336.    JSR PUTS
  337.    LDA CRC╬AME+0
  338.    LDY CRC╬AME+1
  339.    JSR PUTS
  340.    LDA #<RES═SG2
  341.    LDY #>RES═SG2
  342.    JSR PUTS
  343.    CLC
  344.    RTS
  345.  
  346. PUT╚EX = *
  347.    AND #$0F
  348.    ORA #$30
  349.    CMP #$3A
  350.    BCC +
  351.    ADC #6
  352. +  STA RES═SG1,Y
  353.    INY
  354.    RTS
  355.  
  356. RES═SG1 = *
  357.    .ASC "CRC32B = 12345678 FOR "
  358.    .BYTE CHR╤UOTE,0
  359. RES═SG2 = *
  360.    .BYTE CHR╤UOTE,CHR├╥,0
  361.  
  362. GET┬YTE = *
  363.    LDA BUF├OUNT+0
  364.    ORA BUF├OUNT+1
  365.    BEQ GET┬YTE╞ILL┬UF
  366.    LDY #0
  367.    LDA (BUF╨TR),Y
  368.    INC BUF╨TR
  369.    BNE +
  370.    INC BUF╨TR+1
  371. +  LDX BUF├OUNT+0
  372.    BNE +
  373.    DEC BUF├OUNT+1
  374. +  DEC BUF├OUNT+0
  375.    CLC
  376.    RTS
  377.  
  378. GET┬YTE╞ILL┬UF = *
  379.    JSR CHECKSTOP
  380.    LDA #<CRC╔N┬UF
  381.    LDY #>CRC╔N┬UF
  382.    STA ZP+0
  383.    STY ZP+1
  384.    STA BUF╨TR+0
  385.    STY BUF╨TR+1
  386.    LDA IN┬UF╠EN+0
  387.    LDY IN┬UF╠EN+1
  388.    LDX INFILE
  389.    JSR READ
  390.    BEQ +
  391.    BCS +
  392.    STA BUF├OUNT+0
  393.    STY BUF├OUNT+1
  394.    JMP GET┬YTE
  395. +  SEC
  396.    RTS
  397.  
  398. ;===THE END===
  399. CRC┬SS = *
  400. CRC╔N┬UF  = CRC┬SS
  401.