예제 #1
0
keyprog_t *keypad_key_press(CPU_t *cpu, unsigned int vk, BOOL *changed)
{
	int i;
	keypad_t *keypad = cpu->pio.keypad;

	if (keypad == NULL) {
		return NULL;
	}
	for(i = 0; i < NumElm(keygrps); i++)
	{
		if (keygrps[i].vk == vk)
		{
			int orig, group = keygrps[i].group, bit = keygrps[i].bit;
			if (group == KEYGROUP_ON && bit == KEYBIT_ON) {
				orig = keypad->on_pressed;
			} else {
				orig = keypad->keys[group][bit];
			}
			keypad_press(cpu, group, bit);
			if (changed) {
				if (group == KEYGROUP_ON && bit == KEYBIT_ON) {
					*changed = orig != keypad->on_pressed;
				} else {
					*changed = orig != keypad->keys[group][bit];
				}
			}
			return &keygrps[i];
		}
	}	
	return NULL;
}
예제 #2
0
SAVESTATE_t* CreateSave(const TCHAR *author, const TCHAR *comment , int model) {
	SAVESTATE_t* save = (SAVESTATE_t*) malloc(sizeof(SAVESTATE_t));
	if (!save) return NULL;

	save->version_major = CUR_MAJOR;
	save->version_minor = CUR_MINOR;
	save->version_build = CUR_BUILD;

	memset(save->author, 0, sizeof(save->author));
	memset(save->comment, 0, sizeof(save->comment));
#ifdef WINVER
#ifdef _UNICODE
	char buffer[64];
	size_t numConv;
	wcstombs_s(&numConv, save->author, author, sizeof(save->author));
	wcstombs_s(&numConv, save->comment, comment, sizeof(save->author));
#else
	StringCbCopy(save->author, sizeof(save->author), author);
	StringCbCopy(save->comment, sizeof(save->comment), comment);
#endif
#else
	strncpy(save->author, author, sizeof(save->author));
	strncpy(save->comment, comment, sizeof(save->comment));
#endif
	
	save->model = model;
	save->chunk_count = 0;
	
	u_int i;
	for(i = 0; i < NumElm(save->chunks); i++) {
		save->chunks[i] = NULL;
	}
	return save;
}
예제 #3
0
keyprog_t *keypad_key_release(CPU_t *cpu, unsigned int vk) {
	keypad_t *keypad = cpu->pio.keypad;
	
	if (keypad == NULL)
	{
		return NULL;
	}

	for (int i = 0; i < NumElm(keygrps); i++)
	{
		if (keygrps[i].vk == vk)
		{	
			keypad_release(cpu, keygrps[i].group, keygrps[i].bit);
			return &keygrps[i];
		}
	}
	return NULL;
}
예제 #4
0
keyprog_t *keypad_key_press(CPU_t *cpu, unsigned int vk)
{
	int i;
	keypad_t * keypad = cpu->pio.keypad;

	if (keypad == NULL) {
		return NULL;
	}
	for(i = 0; i < NumElm(defaultkeys); i++)
	{
		if (keygrps[i].vk == vk)
		{
			keypad_press(cpu, keygrps[i].group, keygrps[i].bit);
			return &keygrps[i];
		}
	}	
	return NULL;
}
예제 #5
0
SAVESTATE_t* CreateSave(const char *author, const char *comment , int model) {
	SAVESTATE_t* save = (SAVESTATE_t*) malloc(sizeof(SAVESTATE_t));
	if (!save) return nullptr;

	save->version_major = CUR_MAJOR;
	save->version_minor = CUR_MINOR;
	save->version_build = CUR_BUILD;

	memset(save->author, 0, sizeof(save->author));
	memset(save->comment, 0, sizeof(save->comment));
	strncpy(save->author, author, sizeof(save->author));
	strncpy(save->comment, comment, sizeof(save->comment));
	
	save->model = model;
	save->chunk_count = 0;
	
	uint32_t i;
	for(i = 0; i < NumElm(save->chunks); i++) {
		save->chunks[i] = nullptr;
	}
	return save;
}
예제 #6
0
void LoadSE_AUX(SAVESTATE_t* save, SE_AUX_t *se_aux) {
	int i;
	if (!se_aux) {
		return;
	}
	CHUNK_t* chunk = FindChunk(save, SE_AUX_tag);
	if (!chunk) {
		return;
	}
	
	bool is_83p = save->model < TI_83PSE && save->version_minor == 1;
	if (is_83p) {
		LINKASSIST_t *linka = (LINKASSIST_t *) se_aux;
		linka->link_enable	= ReadChar(chunk);
		linka->in			= ReadChar(chunk);
		linka->out			= ReadChar(chunk);
		linka->working		= ReadChar(chunk);
		linka->receiving	= ReadInt(chunk);
		linka->read			= ReadInt(chunk);
		linka->ready		= ReadInt(chunk);
		linka->error		= ReadInt(chunk);
		linka->sending		= ReadInt(chunk);
		linka->last_access	= ReadDouble(chunk);
		linka->bit			= ReadInt(chunk);
		return;
	}
	
	se_aux->clock.enable		= ReadChar(chunk);
	se_aux->clock.set			= ReadInt(chunk);
	se_aux->clock.base			= ReadInt(chunk);
	se_aux->clock.lasttime		= ReadDouble(chunk);
	
	for(i = 0; i < 7; i++) {
		se_aux->delay.reg[i]	= ReadChar(chunk);
	}
	
	for(i = 0; i < NumElm(se_aux->md5.reg); i++)
	{
		se_aux->md5.reg[i]		= ReadInt(chunk);
	}
	se_aux->md5.s				= ReadChar(chunk);
	se_aux->md5.mode			= ReadChar(chunk);
	
	se_aux->linka.link_enable	= ReadChar(chunk);
	se_aux->linka.in			= ReadChar(chunk);
	se_aux->linka.out			= ReadChar(chunk);
	se_aux->linka.working		= ReadChar(chunk);
	se_aux->linka.receiving		= ReadInt(chunk);
	se_aux->linka.read			= ReadInt(chunk);
	se_aux->linka.ready			= ReadInt(chunk);
	se_aux->linka.error			= ReadInt(chunk);
	se_aux->linka.sending		= ReadInt(chunk);
	se_aux->linka.last_access	= ReadDouble(chunk);
	se_aux->linka.bit			= ReadInt(chunk);

	se_aux->xtal.lastTime		= ReadDouble(chunk);
	se_aux->xtal.ticks			= ReadLong(chunk);

	for(i = 0; i < 3; i++) {
		se_aux->xtal.timers[i].lastTstates	= ReadLong(chunk);
		se_aux->xtal.timers[i].lastTicks	= ReadDouble(chunk);
		se_aux->xtal.timers[i].divsor		= ReadDouble(chunk);
		se_aux->xtal.timers[i].loop			= ReadInt(chunk);
		se_aux->xtal.timers[i].interrupt	= ReadInt(chunk);
		se_aux->xtal.timers[i].underflow	= ReadInt(chunk);
		se_aux->xtal.timers[i].generate		= ReadInt(chunk);
		se_aux->xtal.timers[i].active		= ReadInt(chunk);
		se_aux->xtal.timers[i].clock		= ReadChar(chunk);
		se_aux->xtal.timers[i].count		= ReadChar(chunk);
		se_aux->xtal.timers[i].max			= ReadChar(chunk);
	}
	if (save->version_minor >= 1)
		se_aux->model_bits = ReadInt(chunk);
	else
		se_aux->model_bits = save->model == TI_84P ? 0 : 1;
	chunk = FindChunk(save, USB_tag);
	if (!chunk) return;
	chunk->pnt = 0;

	se_aux->usb.USBLineState = ReadInt(chunk);
	se_aux->usb.USBEvents = ReadInt(chunk);
	se_aux->usb.USBEventMask = ReadInt(chunk);
	se_aux->usb.LineInterrupt = ReadInt(chunk);
	se_aux->usb.ProtocolInterrupt = ReadInt(chunk);
	se_aux->usb.ProtocolInterruptEnabled = ReadInt(chunk);
	se_aux->usb.DevAddress = ReadInt(chunk);
	se_aux->usb.Port4A = ReadChar(chunk);
	se_aux->usb.Port4C = ReadChar(chunk);
	se_aux->usb.Port54 = ReadChar(chunk);
}
예제 #7
0
	{"AF", {0xF5}, 1, 11, 11, false, 0x00, 1}};

instr reti_instrs[] = {
	{"", {0x4D, 0xED}, 2, 14, 14, false, 0x00, 2}};

instr retn_instrs[] = {
	{"", {0x45, 0xED}, 2, 14, 14, false, 0x00, 2}};

instr rlca_instrs[] = {
	{"", {0x07}, 1, 4, 4, false, 0x00, 1}};

instr rrca_instrs[] = {
	{"", {0x0F}, 1, 4, 4, false, 0x00, 1}};

opcode opcode_list[] = {
		{"LD",	ld_instrs,	NumElm(ld_instrs),	0,	&opcode_list[1], false},
		{"CALL",	call_instrs,	NumElm(call_instrs),	0,	&opcode_list[2], false},
		{"RET",	ret_instrs,	NumElm(ret_instrs),	0,	&opcode_list[3], false},
		{"JR",	jr_instrs,	NumElm(jr_instrs),	0,	&opcode_list[4], false},
		{"JP",	jp_instrs,	NumElm(jp_instrs),	0,	&opcode_list[5], false},
		{"ADD",	add_instrs,	NumElm(add_instrs),	0,	&opcode_list[6], false},
		{"INC",	inc_instrs,	NumElm(inc_instrs),	0,	&opcode_list[7], false},
		{"POP",	pop_instrs,	NumElm(pop_instrs),	0,	&opcode_list[8], false},
		{"PUSH",	push_instrs,	NumElm(push_instrs),	0,	&opcode_list[9], false},
		{"DEC",	dec_instrs,	NumElm(dec_instrs),	0,	&opcode_list[10], false},
		{"CP",	cp_instrs,	NumElm(cp_instrs),	0,	&opcode_list[11], false},
		{"OR",	or_instrs,	NumElm(or_instrs),	0,	&opcode_list[12], false},
		{"EX",	ex_instrs,	NumElm(ex_instrs),	0,	&opcode_list[13], false},
		{"XOR",	xor_instrs,	NumElm(xor_instrs),	0,	&opcode_list[14], false},
		{"EXX",	exx_instrs,	NumElm(exx_instrs),	0,	&opcode_list[15], false},
		{"SUB",	sub_instrs,	NumElm(sub_instrs),	0,	&opcode_list[16], false},