/* update CRC */ unsigned short updcrc(c, crc) register c; \ c in A register unsigned crc; \ crc in zp,zp+1 { register count; \ count in X for (count=8; --count>=0;) { LDX #8 ._loop_ crc <<= 1; lsr crc:rol crc+1 carry := (crc & 0x10000) php crc += (((c<<=1) & 0x100) != 0); asl a:bcc _noinc_ lda crc:adc #0:sta crc lda crc+1:adc #0:sta crc+1 ._noinc_ if (crc & 0x10000) { plp:bcc _else_ crc ^= 0x1021; lda clc:eor #&21:sta crc lda crc+1:eor #&10:sta crc+1 } else { ._else_ } } DEX:BNE _loop_ return crc; rts } /* update CRC */ unsigned short updcrc(c, crc) register c; register unsigned crc; { register count; for (count=8; --count>=0;) { FOR X=1 TO 8 crc <<= 1; crc=crc*2 carry := (crc & 0x10000) cy=(crc AND &10000) crc += (((c<<=1) & 0x100) != 0); c=c*2:IF(c AND &100):crc=crc+1 if (crc & 0x10000) { crc ^= 0x1021; IF cy:crc=(crc EOR &1021)AND&FFFF } } NEXT X return crc; ENDPROC }