apps,nanos-lite,proc: press F12 to change game

This commit is contained in:
Zihao Yu 2017-08-04 23:12:07 +08:00
parent 4793cd1ac8
commit c58336da18
3 changed files with 13 additions and 2 deletions

View File

@ -15,6 +15,10 @@ size_t read_events(void *buf) {
char keydown_char = (key & 0x8000 ? 'd' : 'u');
key &= ~0x8000;
if (key != _KEY_NONE) {
if (key == _KEY_F12 && keydown_char == 'u') {
extern void change_game(void);
change_game();
}
return sprintf(buf, "k%c %s\n", keydown_char, names[key]) - 1;
}
else {

View File

@ -26,6 +26,7 @@ int main() {
load_prog("/bin/pal");
load_prog("/bin/hello");
load_prog("/bin/litenes");
_trap();

View File

@ -22,12 +22,18 @@ void load_prog(const char *filename) {
}
static int cnt = 0;
static PCB* game_pcb = &pcb[0];
void change_game() {
Log("game change!");
game_pcb = (game_pcb == &pcb[0] ? &pcb[2] : &pcb[0]);
}
_RegSet* schedule(_RegSet *prev) {
// when current == NULL at the very beginning, it will not cover
// any valid data, so it will be safe to write to memory near NULL
current->tf = prev;
if (current == &pcb[0]) {
if (current == game_pcb) {
cnt ++;
if (cnt == 200) {
current = &pcb[1];
@ -35,7 +41,7 @@ _RegSet* schedule(_RegSet *prev) {
}
}
else {
current = &pcb[0];
current = game_pcb;
}
_switch(&current->as);
return current->tf;