//	M021 : CRC calculation
option unsigned;

//------------------------------------------------------------------------------//
//																				//
//	CRC calculation																//
//																				//
//------------------------------------------------------------------------------//
function main()
{
	define	bno, crc;

	_Cls();										//	Clear screen

	_PrintF("%d, %d, %d, %d\n", _CRC_ITL, _CRC_ITR, _CRC_16L, _CRC_16R);


	bno = _MemAlloc(16);

	_PrintF("Memory block clear\n");
	_ClrMemBlk(bno, 0x12);
	_DumpMemBlk(bno);
	_PrintF("\n");

	_PrintF("--- CRC setting at the last 2 bytes ---\n");

	_PrintF("CCITT Left feed, initial value = 0x0000\n");
	crc = _CalcCrc(_CRC_ITL, bno, 0, 14);
	_PutMemBlk(bno, 14, 2, crc);
	_DumpMemBlk(bno);
	_PrintF("\n");

	_PrintF("CCITT Right feed, initial value = 0xFFFF\n");
	crc = _CalcCrc(_CRC_ITR, bno, 0, 14, 0xFFFF);
	_PutMemBlk(bno, 14, 2, crc);
	_DumpMemBlk(bno);
	_PrintF("\n");

	_PrintF("ANSI-CRC left feed, initial value = 0xFFFF\n");
	crc = _CalcCrc(_CRC_16L, bno, 0, 14, 0xFFFF);
	_PutMemBlk(bno, 14, 2, crc);
	_DumpMemBlk(bno);
	_PrintF("\n");

	_PrintF("ANSI-CRC right feed, initial value = 0x0000\n");
	crc = _CalcCrc(_CRC_16R, bno, 0, 14, 0x0000);
	_PutMemBlk(bno, 14, 2, crc);
	_DumpMemBlk(bno);
	_PrintF("\n");

	_PrintF("ANSI-CRC right feed, initial value = 0x0000, big endian\n");
	crc = _CalcCrc(_CRC_16R, bno, 0, 14, 0x0000);
	_PutMemBlk(bno, 14, 2, crc, _TRUE);
	
	_DumpMemBlk(bno);
	_PrintF("\n");


	_MemFree(bno);								//	Memory block release
}
