2024-08-22 13:41:51 +02:00
|
|
|
#include <stdint.h>
|
|
|
|
#include <stddef.h>
|
2025-07-02 13:35:14 +02:00
|
|
|
#include <kernel/heap.h>
|
2024-08-22 13:41:51 +02:00
|
|
|
|
|
|
|
struct CPUState {
|
|
|
|
size_t eax;
|
|
|
|
size_t ebx;
|
|
|
|
size_t ecx;
|
|
|
|
size_t edx;
|
|
|
|
size_t eip;
|
|
|
|
size_t esp;
|
|
|
|
size_t ebp;
|
2024-11-27 21:57:18 +01:00
|
|
|
size_t edi;
|
|
|
|
size_t esi;
|
2024-08-22 13:41:51 +02:00
|
|
|
size_t cs;
|
|
|
|
size_t ds;
|
|
|
|
size_t eflags;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Task {
|
|
|
|
struct CPUState state;
|
2025-07-02 13:35:14 +02:00
|
|
|
size_t size;
|
|
|
|
struct Heap_Block* code;
|
|
|
|
struct Heap_Block* data;
|
|
|
|
bool needs_pages;
|
2024-08-22 13:41:51 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
void switch_task(
|
|
|
|
size_t eax,
|
|
|
|
size_t ebx,
|
|
|
|
size_t ecx,
|
|
|
|
size_t edx,
|
|
|
|
|
|
|
|
size_t ebp,
|
|
|
|
|
|
|
|
size_t esp_real,
|
|
|
|
|
|
|
|
size_t eip,
|
|
|
|
size_t cs,
|
|
|
|
size_t eflags,
|
|
|
|
size_t esp_fake,
|
|
|
|
size_t ds
|
|
|
|
);
|
|
|
|
void setup_tasks();
|
|
|
|
void add_task(struct Task task);
|