// toma un perro ya existente libre y lo recicla seteando x e y a la cucha. // luego inicializa su mapeo de memoria, tss, lo agrega al sched y pinta la pantalla void game_perro_reciclar_y_lanzar(perro_t *perro, uint tipo) { jugador_t *j = perro->jugador; perro->x = j->x_cucha; perro->y = j->y_cucha; perro->tipo = tipo; perro->libre = FALSE; // ahora debo llamar a rutinas que inicialicen un nuevo mapa de // memoria para el nuevo perro, que carguen su tss correspondiente, // lo scheduleen y finalmente lo pinten en pantalla //inicializa memoria int cr3 = mmu_inicializar_memoria_perro(perro, j->index, tipo); perro->cr3 = cr3; //pinta al perro screen_pintar_perro(perro); //agrega la tarea al scheduler sched_agregar_tarea(perro); //TODO: que onda la TSS, hay que cambiar la direccion de la tarea ??? // ~~~ completar ~~~ }
// toma un perro ya existente libre y lo recicla seteando x e y a la cucha. // luego inicializa su mapeo de memoria, tss, lo agrega al sched y pinta la pantalla void game_perro_reciclar_y_lanzar(perro_t *perro, uint tipo) { jugador_t *j = perro->jugador; perro->x = j->x_cucha; perro->y = j->y_cucha; perro->tipo = tipo; perro->libre = FALSE; perro->huesos = 0; perro->indice_reloj = 0; // ahora debo llamar a rutinas que inicialicen un nuevo mapa de // memoria para el nuevo perro, que carguen su tss correspondiente, // lo scheduleen y finalmente lo pinten en pantalla tss* tss_jugador = j->index == JUGADOR_A ? tss_jugadorA : tss_jugadorB; tss_inicializar_perro(&tss_jugador[perro->index], perro); tss_agregar_a_gdt(&tss_jugador[perro->index], GDT_IDX_TSS_PERRO(j->index, perro->index)); sched_agregar_tarea(perro); screen_pintar_perro(perro); }
void game_jugador_erigir_pirata(uint jugador, pirata_t* pirata, uint posicion, uint parametros) { sched_agregar_tarea(jugador, posicion, pirata->type, parametros); }