void Canvas::keyPressEvent(QKeyEvent *event) { QGraphicsView::keyPressEvent(event); if (event->isAccepted()) return; if (event->key() == Qt::Key_Space) { QGraphicsItem* i = scene->itemAt( mapToScene(mapFromGlobal(QCursor::pos())), QTransform()); Control* control = dynamic_cast<Control*>(i); if (control) { control->toggleInspector(); } } else if (event->key() == Qt::Key_Alt) { hideUI(); } else if (event->key() == Qt::Key_A && (event->modifiers() & Qt::ShiftModifier)) { QMenu* m = new QMenu(this); auto window = dynamic_cast<MainWindow*>(parent()->parent()); Q_ASSERT(window); window->populateMenu(m, false); m->exec(QCursor::pos()); m->deleteLater(); } else if (event->key() == Qt::Key_S && (event->modifiers() & Qt::ShiftModifier)) { ports_visible = !ports_visible; emit(showPorts(ports_visible)); } }
int main(void) { uint32_t reg[16]={0}; //se creo un arreglo de 13 variables de 32 bits para los 13 registros char bandera[4]={0}; //La bandera se definio como un arreglo de 4 variables siendo la primera la bandera de negativo int ch=0,j=0,z; uint16_t Mnem=0x0; uint8_t MemRAM[256],m=0; reg[13]=0x100; for(j=0;j<=0xff;j++) { MemRAM[j]=0xff; } int num_instructions; ins_t read; char** instructions; instruction_t instruction; num_instructions = readFile("code.txt", &read); if(num_instructions==-1) { return 0; } if(read.array==NULL) { return 0; } instructions = read.array; initscr(); /* Inicia modo curses */ curs_set(0); /* Cursor Invisible */ raw(); /* Activa modo raw */ keypad(stdscr, TRUE); /* Obtener F1, F2, etc */ noecho(); /* No imprimir los caracteres leidos */ start_color(); /* Permite manejar colores */ init_pair(1, COLOR_WHITE, COLOR_CYAN); /* Pair 1 -> Texto blanco fondo cyan */ bkgd(COLOR_PAIR(1)); //se rellena el todo el fondo de color cyan mostrar_registro(reg); move(4, 40); printw("Banderas"); move(6, 40); printw("N=%d\n",bandera[0]); move(7, 40); printw("Z=%d\n",bandera[1]); move(8, 40); printw("C=%d\n",bandera[2]); move(9, 40); printw("V=%d\n",bandera[3]); move(11, 40); printw("PC=%X\n",reg[15]*2); move(12, 40); printw("LR=%X\n",reg[14]*2); move(13, 40); printw("SP=%X\n",reg[13]); move(4, 55); printw("Emulador ARM Cortex-M0"); mostrar_ram(MemRAM); initIO();showPorts(); border( ACS_VLINE, ACS_VLINE, ACS_HLINE, ACS_HLINE, ACS_ULCORNER, ACS_URCORNER, ACS_LLCORNER, ACS_LRCORNER ); refresh(); while(ch != 'q') { ch = getch(); /* Espera entrada del usuario */ if(ch=='a'||ch=='b') { teclas(ch,&m); } clear(); INT(irq, reg, MemRAM, bandera, &m); showPorts(); move(2, 15); printw("%s",instructions[reg[15]]); instruction = getInstruction(instructions[reg[15]]); decodeInstruction(instruction, reg, bandera, MemRAM, &Mnem); mostrar_registro(reg); move(2, 40); printw("Instruccion --> 0x%.4X",Mnem); move(4, 40); printw("Banderas"); move(6, 40); printw("N=%d\n",bandera[0]); move(7, 40); printw("Z=%d\n",bandera[1]); move(8, 40); printw("C=%d\n",bandera[2]); move(9, 40); printw("V=%d\n",bandera[3]); move(11, 40); printw("PC=%X\n",reg[15]*2); move(12, 40); printw("LR=%X\n",reg[14]); move(13, 40); printw("SP=%X\n",reg[13]); move(4, 55); printw("Emulador ARM Cortex-M0"); move(5, 55); printw("Presione q para Salir"); move(6, 55); printw("Presione a para modificar el estado del puerto A"); move(7, 55); printw("Presione b para modificar el estado del puerto B"); mostrar_ram(MemRAM); border( ACS_VLINE, ACS_VLINE, ACS_HLINE, ACS_HLINE, ACS_ULCORNER, ACS_URCORNER, ACS_LLCORNER, ACS_LRCORNER ); refresh(); /* Imprime en la pantalla Sin esto el printw no es mostrado */ } attroff(COLOR_PAIR(1)); /* DEshabilita los colores Pair 1 */ endwin(); free(read.array); /* Finaliza el modo curses */ return 0; }