home *** CD-ROM | disk | FTP | other *** search
- ; lhcrc.a
- ;───────────────────────────────────────────────────────────────
- ; CRC routines for LHARC - same as those used by ARC and PKARC
- ;───────────────────────────────────────────────────────────────
-
- INSTXT "sfx.i"
-
- PUBLIC NewCRC ; CRC value. 2 bytes
- PUBLIC AdjCRC ; Accumulate .a into .NewCRC
- PUBLIC GenCRC ; Initialize. Generate the CRC table
- PUBLIC InitCRC ; Initialize. Clear .NewCRC
-
- BSS NewCRC,2
-
- ;──────────────────────────
- ; Clear new calculated CRC
- ;──────────────────────────
-
- InitCRC lda #0
- sta NewCRC
- sta NewCRC+1
- rts
-
- ;───────────────────────────────────────
- ; Adjust CRC. Call with character in .a
- ;───────────────────────────────────────
-
- BSS y_save,1
-
- AdjCRC pha
- sty y_save
- eor NewCRC
- tay
- lda crclo,y
- eor NewCRC+1
- sta NewCRC
- lda crchi,y
- sta NewCRC+1
- pla
- ldy y_save
- rts
-
- ;──────────────────────────────────────────────────────────────
- ; Code to generate the CRC table - Borrowed from LHARC sources
- ;──────────────────────────────────────────────────────────────
- ; mkcrc mov BX,offset crctab
- ; xor DX,DX
- ; mkc0 mov AX,DX
- ; mov CX,8
- ; mkc2 shr AX,1
- ; jnc mkc4
- ; xor AX,0a001h
- ; mkc4 loop mkc2
- ; mkc3 mov [BX],AX
- ; inc BX
- ; inc BX
- ; inc DL
- ; jnz mkc0
- ; mkc1 ret
-
- LO = T0
- HI = T1
- AX = T2
- AL = AX
- AH = AX+1
-
- BSS crclo,256
- BSS crchi,256
-
- GenCRC lda #<crclo
- sta LO
- sta HI
- lda #>crclo
- sta LO+1
- sta HI+1
- inc HI+1
- ldy #0
- Gen0 sty AL
- lda #0
- sta AH
- ldx #8
- Gen2 lsr AH
- ror AL
- bcc Gen4
- lda AL
- eor #$01
- sta AL
- lda AH
- eor #$a0
- sta AH
- Gen4 dex
- bne Gen2
- lda AL
- sta (LO),y
- lda AH
- sta (HI),y
- iny
- bne Gen0
- rts
-
- END
-