summaryrefslogtreecommitdiffstats
path: root/sw/z80/kernel/include/progman.h
diff options
context:
space:
mode:
Diffstat (limited to 'sw/z80/kernel/include/progman.h')
-rw-r--r--sw/z80/kernel/include/progman.h68
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