	case off		mcopy /usr/local/ainclude/m16.smartstacks	mcopy crc.macroot	start	end* calculate the crc.  returns value in little endian format.* unsigned pascal long PngCrc(long crc, char *data, int len)PngCrc	start		using CRCTable	DefineStack	FixStack	BegParmslength	Worddata	LongWordcrc	LongWord	EndParms	BeginStack* for (n = 0; n < len; n++)*   crc = CrcTable[(crc ^ data[n]) & 0xff] ^ (crc >> 8);	ldy #0loop	cpy <length	beq eloop*	x  = (crc ^ data[n]) & 0x00ff	lda [<data],y*	and #$00ff		; doesn't matter...	eor <crc	and #$00ff	asl a			; x 4 to index.	asl a	tax			; save*	crc = crc >> 8	lda <crc	xba	and #$00ff	sta <crc* move the 8 bits from crc+2.low --> crc.hi	lda <crc+2	xba	pha			;save ...	and #$ff00*	ora <crc*	sta <crc	tsb <crc	pla			; restore	and #$00ff	sta <crc+2*	crc = crc ^ CrcTable[x]	lda Table,x	eor <crc	sta <crc	lda Table+2,x	eor <crc+2	sta <crc+2	iny	bra loopeloop	anop* return crc ^ 0xffffffff*	lda <crc*	eor #$ffff*	tay*	lda <crc+2*	eor #$ffff*	tax	ldx <crc+2	ldy <crc	EndStack	tya	rtl	end* calculate the crc.  returns value in little endian format.* unsigned pascal long AdlerCrc(long crc char *data, int len)AdlerCrc	start		DefineStack	FixStack	BegParmslength	Worddata	LongWordcrc	LongWord	EndParms	BeginStack* for (n = 0; n < length; n++) {*  s1 = (s1 + data[n]) % 65521*  s2 = (s1 + s2) % 65521* }** we have a slight problem, however.  Since a 16-bit integer maxes* out at 65535, there's a 240/255 probability the number will overflow.* to catch that we simply check for the carry bit and if it's set,* add 15 (65536 + x - 65521 = x + 15)	ldy #0loop	cpy <length	beq eloop	lda [data],y	and #$00ff	clc	adc <crc        bcc check1* overflow.  a = a + 65536 - 65521.	clc	adc #15	bra s1check1	anop	cmp #65521	bcc s1	sbc #65521	; carry bit still set from cmps1	anop	sta <crc	clc	adc <crc+2	bcc check2* overflow.  a = a + 65536 - 65521.	clc	adc #15	bra s2check2	anop	cmp #65521	bcc s2	sbc #65521	; carry bit still set from cmps2	anop	sta <crc+2	iny	bra loopeloop	anop	ldx <crc+2	ldy <crc	EndStack	tya	rtl	endCRCTable	DataTable	anop	dc i4'$00000000'	dc i4'$77073096'	dc i4'$ee0e612c'	dc i4'$990951ba'	dc i4'$076dc419'	dc i4'$706af48f'	dc i4'$e963a535'	dc i4'$9e6495a3'	dc i4'$0edb8832'	dc i4'$79dcb8a4'	dc i4'$e0d5e91e'	dc i4'$97d2d988'	dc i4'$09b64c2b'	dc i4'$7eb17cbd'	dc i4'$e7b82d07'	dc i4'$90bf1d91'	dc i4'$1db71064'	dc i4'$6ab020f2'	dc i4'$f3b97148'	dc i4'$84be41de'	dc i4'$1adad47d'	dc i4'$6ddde4eb'	dc i4'$f4d4b551'	dc i4'$83d385c7'	dc i4'$136c9856'	dc i4'$646ba8c0'	dc i4'$fd62f97a'	dc i4'$8a65c9ec'	dc i4'$14015c4f'	dc i4'$63066cd9'	dc i4'$fa0f3d63'	dc i4'$8d080df5'	dc i4'$3b6e20c8'	dc i4'$4c69105e'	dc i4'$d56041e4'	dc i4'$a2677172'	dc i4'$3c03e4d1'	dc i4'$4b04d447'	dc i4'$d20d85fd'	dc i4'$a50ab56b'	dc i4'$35b5a8fa'	dc i4'$42b2986c'	dc i4'$dbbbc9d6'	dc i4'$acbcf940'	dc i4'$32d86ce3'	dc i4'$45df5c75'	dc i4'$dcd60dcf'	dc i4'$abd13d59'	dc i4'$26d930ac'	dc i4'$51de003a'	dc i4'$c8d75180'	dc i4'$bfd06116'	dc i4'$21b4f4b5'	dc i4'$56b3c423'	dc i4'$cfba9599'	dc i4'$b8bda50f'	dc i4'$2802b89e'	dc i4'$5f058808'	dc i4'$c60cd9b2'	dc i4'$b10be924'	dc i4'$2f6f7c87'	dc i4'$58684c11'	dc i4'$c1611dab'	dc i4'$b6662d3d'	dc i4'$76dc4190'	dc i4'$01db7106'	dc i4'$98d220bc'	dc i4'$efd5102a'	dc i4'$71b18589'	dc i4'$06b6b51f'	dc i4'$9fbfe4a5'	dc i4'$e8b8d433'	dc i4'$7807c9a2'	dc i4'$0f00f934'	dc i4'$9609a88e'	dc i4'$e10e9818'	dc i4'$7f6a0dbb'	dc i4'$086d3d2d'	dc i4'$91646c97'	dc i4'$e6635c01'	dc i4'$6b6b51f4'	dc i4'$1c6c6162'	dc i4'$856530d8'	dc i4'$f262004e'	dc i4'$6c0695ed'	dc i4'$1b01a57b'	dc i4'$8208f4c1'	dc i4'$f50fc457'	dc i4'$65b0d9c6'	dc i4'$12b7e950'	dc i4'$8bbeb8ea'	dc i4'$fcb9887c'	dc i4'$62dd1ddf'	dc i4'$15da2d49'	dc i4'$8cd37cf3'	dc i4'$fbd44c65'	dc i4'$4db26158'	dc i4'$3ab551ce'	dc i4'$a3bc0074'	dc i4'$d4bb30e2'	dc i4'$4adfa541'	dc i4'$3dd895d7'	dc i4'$a4d1c46d'	dc i4'$d3d6f4fb'	dc i4'$4369e96a'	dc i4'$346ed9fc'	dc i4'$ad678846'	dc i4'$da60b8d0'	dc i4'$44042d73'	dc i4'$33031de5'	dc i4'$aa0a4c5f'	dc i4'$dd0d7cc9'	dc i4'$5005713c'	dc i4'$270241aa'	dc i4'$be0b1010'	dc i4'$c90c2086'	dc i4'$5768b525'	dc i4'$206f85b3'	dc i4'$b966d409'	dc i4'$ce61e49f'	dc i4'$5edef90e'	dc i4'$29d9c998'	dc i4'$b0d09822'	dc i4'$c7d7a8b4'	dc i4'$59b33d17'	dc i4'$2eb40d81'	dc i4'$b7bd5c3b'	dc i4'$c0ba6cad'	dc i4'$edb88320'	dc i4'$9abfb3b6'	dc i4'$03b6e20c'	dc i4'$74b1d29a'	dc i4'$ead54739'	dc i4'$9dd277af'	dc i4'$04db2615'	dc i4'$73dc1683'	dc i4'$e3630b12'	dc i4'$94643b84'	dc i4'$0d6d6a3e'	dc i4'$7a6a5aa8'	dc i4'$e40ecf0b'	dc i4'$9309ff9d'	dc i4'$0a00ae27'	dc i4'$7d079eb1'	dc i4'$f00f9344'	dc i4'$8708a3d2'	dc i4'$1e01f268'	dc i4'$6906c2fe'	dc i4'$f762575d'	dc i4'$806567cb'	dc i4'$196c3671'	dc i4'$6e6b06e7'	dc i4'$fed41b76'	dc i4'$89d32be0'	dc i4'$10da7a5a'	dc i4'$67dd4acc'	dc i4'$f9b9df6f'	dc i4'$8ebeeff9'	dc i4'$17b7be43'	dc i4'$60b08ed5'	dc i4'$d6d6a3e8'	dc i4'$a1d1937e'	dc i4'$38d8c2c4'	dc i4'$4fdff252'	dc i4'$d1bb67f1'	dc i4'$a6bc5767'	dc i4'$3fb506dd'	dc i4'$48b2364b'	dc i4'$d80d2bda'	dc i4'$af0a1b4c'	dc i4'$36034af6'	dc i4'$41047a60'	dc i4'$df60efc3'	dc i4'$a867df55'	dc i4'$316e8eef'	dc i4'$4669be79'	dc i4'$cb61b38c'	dc i4'$bc66831a'	dc i4'$256fd2a0'	dc i4'$5268e236'	dc i4'$cc0c7795'	dc i4'$bb0b4703'	dc i4'$220216b9'	dc i4'$5505262f'	dc i4'$c5ba3bbe'	dc i4'$b2bd0b28'	dc i4'$2bb45a92'	dc i4'$5cb36a04'	dc i4'$c2d7ffa7'	dc i4'$b5d0cf31'	dc i4'$2cd99e8b'	dc i4'$5bdeae1d'	dc i4'$9b64c2b0'	dc i4'$ec63f226'	dc i4'$756aa39c'	dc i4'$026d930a'	dc i4'$9c0906a9'	dc i4'$eb0e363f'	dc i4'$72076785'	dc i4'$05005713'	dc i4'$95bf4a82'	dc i4'$e2b87a14'	dc i4'$7bb12bae'	dc i4'$0cb61b38'	dc i4'$92d28e9b'	dc i4'$e5d5be0d'	dc i4'$7cdcefb7'	dc i4'$0bdbdf21'	dc i4'$86d3d2d4'	dc i4'$f1d4e242'	dc i4'$68ddb3f8'	dc i4'$1fda836e'	dc i4'$81be16cd'	dc i4'$f6b9265b'	dc i4'$6fb077e1'	dc i4'$18b74777'	dc i4'$88085ae6'	dc i4'$ff0f6a70'	dc i4'$66063bca'	dc i4'$11010b5c'	dc i4'$8f659eff'	dc i4'$f862ae69'	dc i4'$616bffd3'	dc i4'$166ccf45'	dc i4'$a00ae278'	dc i4'$d70dd2ee'	dc i4'$4e048354'	dc i4'$3903b3c2'	dc i4'$a7672661'	dc i4'$d06016f7'	dc i4'$4969474d'	dc i4'$3e6e77db'	dc i4'$aed16a4a'	dc i4'$d9d65adc'	dc i4'$40df0b66'	dc i4'$37d83bf0'	dc i4'$a9bcae53'	dc i4'$debb9ec5'	dc i4'$47b2cf7f'	dc i4'$30b5ffe9'	dc i4'$bdbdf21c'	dc i4'$cabac28a'	dc i4'$53b39330'	dc i4'$24b4a3a6'	dc i4'$bad03605'	dc i4'$cdd70693'	dc i4'$54de5729'	dc i4'$23d967bf'	dc i4'$b3667a2e'	dc i4'$c4614ab8'	dc i4'$5d681b02'	dc i4'$2a6f2b94'	dc i4'$b40bbe37'	dc i4'$c30c8ea1'	dc i4'$5a05df1b'	dc i4'$2d02ef8d'	End
