| Zeile 199: | Zeile 199: | ||
if (cpu->intr == 0x20) { | if (cpu->intr == 0x20) { | ||
new_cpu = schedule(cpu); | new_cpu = schedule(cpu); | ||
| − | tss[1] = ( | + | tss[1] = (uint32_t) (new_cpu + 1); |
}</c> | }</c> | ||
Außerdem müssen wir das TSS noch aktivieren. Dazu fügen wir der GDT einen zusätzlichen Eintrag hinzu und laden anschließend auch das Taskregister TR neu (nicht vergessen, das Limit der GDT zu erhöhen, wenn nötig): | Außerdem müssen wir das TSS noch aktivieren. Dazu fügen wir der GDT einen zusätzlichen Eintrag hinzu und laden anschließend auch das Taskregister TR neu (nicht vergessen, das Limit der GDT zu erhöhen, wenn nötig): | ||
| − | <c> set_entry(5, ( | + | <c> set_entry(5, (uint32_t) tss, sizeof(tss), |
GDT_FLAG_TSS | GDT_FLAG_PRESENT | GDT_FLAG_RING3); | GDT_FLAG_TSS | GDT_FLAG_PRESENT | GDT_FLAG_RING3); | ||