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; }
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; }
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; }
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; }
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; }
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); }
{"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},