// Author: Andrew Shinn
;

num hIdle1	= -1;
num hIdle2	= -1;
num hIdle3	= -1;
num hIdle	= -1;
num hIdleS	= -1;
num IACV_RTN	= 0x6E80;

void open()
{
	num rev;
	num x = 10;
	num y = 170;

	CreateBorder(x, y, 200, 90, 5, 0, "Idle Control");
	CreateStatic(x+5, y-5, 100, 20, 5, 0, "Idle RPM's");

	x = x + 20;
	y = y + 20;

	hIdle1 = CreateEdit(x, y, 75, 20, 5, 0, "Idle1");
	CreateStatic(x+80, y, 90, 20, 5, 0, "Cold Idle");
	setitem(hIdle1, round(1875600 / readword(0x2D58), 0));
	

	y = y + 20;
	rev = (readbyte(0x645F) - 128) * 62.52;
	hIdle2 = CreateEdit(x, y, 75, 20, 5, 0, "Idle2");
	CreateStatic(x+80, y, 90, 20, 5, 0, "Warm Idle");
	setitem(hIdle2, round(1875600 / readword(0x2D81), 0));

	y = y + 20;
	rev = (readbyte(0x6464) - 128) * 62.52;
	hIdle3 = CreateEdit(x, y, 75, 20, 5, 0, "Idle3");
	CreateStatic(x+80, y, 90, 20, 5, 0, "Moving Idle");
	setitem(hIdle3, round(1875600 / readword(0x2D43), 0));

	x = 10;
	y = 375;
	CreateBorder(x, y, 790, 90, 6, 0, "");
	CreateStatic(x+5, y-5, 80, 20, 6, 0, "IACV Adjust");

	hIdle = CreateHScroll(195, 420, 400, 20, 6, "IdleScroll", "Bleh");
	hIdleS = CreateEdit(595, 420, 40, 20, 6, 0, "Idle3");
	CreateBtn(150, 110, 70, 20, 8, "LoadGraphBtn", "Load Graph");
	CreateBtn(220, 110, 70, 20, 8, "SaveGraphBtn", "Save Graph");
	SetItemEx(hIdle, 0, 0, 100);

	rev = readword(IACV_RTN+1);

	if(readbyte(IACV_RTN) == 0xA6)
	{
		SetItemEx(hIdle, 1, 50 - rev);
	}
	else
	{
		SetItemEx(hIdle, 1, rev + 50);
	}
	IdleScroll();
}

void IdleScroll()
{
	setitem(hIdleS, GetItem(hIdle) - 50);
}

void DisableCRC()
{
	assemble("iacv_adjust.asm", IACV_RTN);
	writebyte(0x2b61, 0x03);
	writeword(0x2b62, IACV_RTN);
}

void save()
{
	num idle_val;
	writeword(0x2D58, 1875600 / GetItem(hIdle1));
	writeword(0x2D81, 1875600 / GetItem(hIdle2));
	writeword(0x2D43, 1875600 / GetItem(hIdle3));

	idle_val = GetItem(hIdle);
	if(idle_val < 50)
	{
		writebyte(IACV_RTN, 0xA6);
		writeword(IACV_RTN+1, 50 - idle_val);
	}
	else
	{
		writebyte(IACV_RTN, 0x86);
		writeword(IACV_RTN+1, idle_val - 50);
	}
}
