diff options
author | leleraffa97@hotmail.it <leleraffa97@hotmail.it> | 2017-06-23 12:18:24 +0200 |
---|---|---|
committer | leleraffa97@hotmail.it <leleraffa97@hotmail.it> | 2017-06-23 12:18:24 +0200 |
commit | ac89960fbe89141aea31da9a329bfa39d67eede7 (patch) | |
tree | 5fd8f8baefd80d235ebe43167f89c580d137ce22 /sw/z80/kernel/include/progman.h | |
parent | libc memset, memcmp (diff) | |
download | z80uPC-ac89960fbe89141aea31da9a329bfa39d67eede7.tar.gz z80uPC-ac89960fbe89141aea31da9a329bfa39d67eede7.zip |
Order and update of the struct
Separation of boot and login sections
Improuved program manager system
Diffstat (limited to 'sw/z80/kernel/include/progman.h')
-rw-r--r-- | sw/z80/kernel/include/progman.h | 68 |
1 files changed, 46 insertions, 22 deletions
diff --git a/sw/z80/kernel/include/progman.h b/sw/z80/kernel/include/progman.h index 5d01f1c..b59e14a 100644 --- a/sw/z80/kernel/include/progman.h +++ b/sw/z80/kernel/include/progman.h @@ -13,13 +13,41 @@ #define PROG_0_INFO // TODO #define PROG_1_INFO // TODO find a space in the ram -struct program_info { +struct prog_status { - volatile int enabled:1; - volatile int running:1; - volatile int exiting:1; - volatile int heap_addr:13; - volatile void (*quit_cb)(void); // 16 + // The program is in execution + + uint8_t running:1; + + // The program is executing its quit callback + + uint8_t exiting:1; + + uint8_t unused:6; // TODO, find a usage for these bits +}: + +struct prog_data { + + struct prog_status status; + + /* + * The following addresses are needed to map + * map the usable memory for dynamic allocations + */ + + // Virtual address of the heap + + uint8_t heap_addr:12; + + // Virtual address of the stack limit + + uint8_t stack_limit:12; + + /* + * Function called when the program exits normally + */ + + void (*quit_cb)(void); // 16 }; /* @@ -32,20 +60,23 @@ void progman_init(); * Check if it can start a new program * If it succedes, the program id is returned, * otherwise it is returned an error number +* +* ! Disable virtual addresses when this function is called */ #define PROG_REQ_FULL -1 -#define PROG_REQ_ERR -2 // Maybe we don't need this, but just in case -int8_t prog_req(struct program_info *info); +int8_t prog_req(); /* * It allocates a program in the RAM * To obtain the right id call prog_req() first * Basic informations must be allocated and referenced by a program_base struct +* +* ! Disable virtual addresses when this function is called */ -struct program_base { +struct prog_space { void * inst_set; // pointer to the instructions set size_t inst_size; // size of the instructions set @@ -53,33 +84,26 @@ struct program_base { size_t data_size; // size of the bss/data space }; -void prog_alloc(int8_t id, struct program_info *info, const struct program_base *base); +void prog_alloc(int8_t id, struct prog_data *data, const struct prog_space *space); /* * It jumps the program counter to the given one */ -void prog_exec(int8_t id, struct program_info *info); +void prog_exec(int8_t id, struct prog_data *data); /* * It sets a quit callback */ -void prog_0_qcb(void (*callback)(void)); -void prog_1_qcb(void (*callback)(void)); +void prog_0_set_qcb(void (*callback)(void)); +void prog_1_set_qcb(void (*callback)(void)); /* * It quits a program, if a callback is set, it will be called */ -void prog_0_quit(); -void prog_1_quit(); - -/* -* It forces a program to quit -*/ - -void prog_0_fquit(); -void prog_1_fquit(); +void prog_0_quit(uint8_t force); +void prog_1_quit(uint8_t force); #endif
\ No newline at end of file |