diff --git a/gcc/bindings.c b/gcc/bindings.c index c501c8f..0c29673 100644 --- a/gcc/bindings.c +++ b/gcc/bindings.c @@ -640,19 +640,41 @@ static inline unsigned int random_range( // system jump table -static inline void get_os_version(void) { +static inline struct return3 get_os_version(void) { + struct return3 result_0; call(0x00000810); + ret(0, result_0.return0); + ret(1, result_0.return1); + ret(2, result_0.return2); + return result_0; } // FXF jump table -static inline void parse_fxf_binary(void) { +static inline unsigned char* parse_fxf_binary( + unsigned char* fxf_memory_buffer +) { + unsigned char* result_0; + parameter(0, fxf_memory_buffer); call(0x00000910); + ret(0, result_0); + return result_0; } // task jump table -static inline void new_task(void) { +static inline void new_task( + unsigned char task_id, + unsigned char* initial_instruction_pointer, + unsigned char* initial_stack_pointer, + unsigned char* code_block_to_free, + unsigned char* stack_block_to_free +) { + parameter(0, task_id); + parameter(1, initial_instruction_pointer); + parameter(2, initial_stack_pointer); + parameter(3, code_block_to_free); + parameter(4, stack_block_to_free); call(0x00000A10); } @@ -664,12 +686,18 @@ static inline void end_current_task(void) { call(0x00000A18); } -static inline void get_current_task_id(void) { +static inline unsigned char get_current_task_id(void) { + unsigned char result_0; call(0x00000A1C); + ret(0, result_0); + return result_0; } -static inline void get_unused_task_id(void) { +static inline unsigned char get_unused_task_id(void) { + unsigned char result_0; call(0x00000A20); + ret(0, result_0); + return result_0; } static inline void is_task_id_used(void) { @@ -682,11 +710,20 @@ static inline void save_state_and_yield_task(void) { // memory jump table -static inline void allocate_memory(void) { +static inline unsigned char* allocate_memory( + unsigned int bytes_to_allocate +) { + unsigned char* result_0; + parameter(0, bytes_to_allocate); call(0x00000B10); + ret(0, result_0); + return result_0; } -static inline void free_memory(void) { +static inline void free_memory( + unsigned char* allocated_block +) { + parameter(0, allocated_block); call(0x00000B14); } @@ -720,7 +757,28 @@ static inline void destroy_window( call(0x00000C14); } -static inline void new_window_event(void) { +static inline void new_window_event( + unsigned int event_type, + unsigned int parameter0, + unsigned int parameter1, + unsigned int parameter2, + unsigned int parameter3, + unsigned int parameter4, + unsigned int parameter5, + unsigned int parameter6, + unsigned int parameter7, + unsigned char* window_struct +) { + parameter(0, event_type); + parameter(1, parameter0); + parameter(2, parameter1); + parameter(3, parameter2); + parameter(4, parameter3); + parameter(5, parameter4); + parameter(6, parameter5); + parameter(7, parameter6); + parameter(8, parameter7); + parameter(9, window_struct); call(0x00000C18); } @@ -785,12 +843,25 @@ static inline void start_dragging_window( call(0x00000C30); } -static inline void new_messagebox(void) { +static inline void new_messagebox( + char* first_line_str, + char* second_line_str, + char* third_line_str, + unsigned short x, + unsigned short y, + unsigned short width +) { + parameter(0, first_line_str); + parameter(1, second_line_str); + parameter(2, third_line_str); + parameter(3, x); + parameter(4, y); + parameter(5, width); call(0x00000C34); } -static inline unsigned int* get_active_window_struct(void) { - unsigned int* result_0; +static inline unsigned char* get_active_window_struct(void) { + unsigned char* result_0; call(0x00000C38); ret(0, result_0); return result_0; @@ -798,33 +869,81 @@ static inline unsigned int* get_active_window_struct(void) { // VFS jump table -static inline void open(void) { +static inline unsigned short open( + char* file_name, + unsigned char disk_id, + unsigned char* file_struct +) { + unsigned short result_0; + parameter(0, file_name); + parameter(1, disk_id); + parameter(2, file_struct); call(0x00000D10); + ret(0, result_0); + return result_0; } -static inline void seek(void) { +static inline void seek( + unsigned int offset, + unsigned char* file_struct +) { + parameter(0, offset); + parameter(1, file_struct); call(0x00000D14); } -static inline void tell(void) { +static inline unsigned int tell( + unsigned char* file_struct +) { + unsigned int result_0; + parameter(0, file_struct); call(0x00000D18); + ret(0, result_0); + return result_0; } -static inline void read(void) { +static inline unsigned int read( + unsigned int bytes_to_read, + unsigned char* file_struct, + unsigned char* destination_buffer +) { + unsigned int result_0; + parameter(0, bytes_to_read); + parameter(1, file_struct); + parameter(2, destination_buffer); call(0x00000D1C); + ret(0, result_0); + return result_0; } -static inline void write(void) { +static inline void write( + unsigned int bytes_to_write, + unsigned char* file_struct, + unsigned char* source_buffer +) { + parameter(0, bytes_to_write); + parameter(1, file_struct); + parameter(2, source_buffer); call(0x00000D20); } // widget jump table -static inline void draw_widgets_to_window(void) { +static inline void draw_widgets_to_window( + unsigned char* window_struct +) { + parameter(0, window_struct); call(0x00000E10); } -static inline void handle_widget_click(void) { +static inline void handle_widget_click( + unsigned char* window_struct, + unsigned short x, + unsigned short y +) { + parameter(0, window_struct); + parameter(1, x); + parameter(2, y); call(0x00000E14); } diff --git a/gcc/bindings.kts b/gcc/bindings.kts index f76aea9..21c6870 100755 --- a/gcc/bindings.kts +++ b/gcc/bindings.kts @@ -488,35 +488,48 @@ comment("fox32os definitions") comment("system jump table") define(0x00000810U, "get_os_version") { + returnstruct("return0", Type("struct return3")) + returnstruct("return1", Type("struct return3")) + returnstruct("return2", Type("struct return3")) } comment("FXF jump table") define(0x00000910U, "parse_fxf_binary") { + parameter(Byte.ref, "fxf_memory_buffer") + returns(Byte.ref) } comment("task jump table") define(0x00000A10U, "new_task") { + parameter(Byte, "task_id") + parameter(Byte.ref, "initial_instruction_pointer") + parameter(Byte.ref, "initial_stack_pointer") + parameter(Byte.ref, "code_block_to_free") + parameter(Byte.ref, "stack_block_to_free") } -define(0x00000A14U, "yield_task") { -} -define(0x00000A18U, "end_current_task") { -} +define(0x00000A14U, "yield_task") {} +define(0x00000A18U, "end_current_task") {} define(0x00000A1CU, "get_current_task_id") { + returns(Byte) } define(0x00000A20U, "get_unused_task_id") { + returns(Byte) } define(0x00000A24U, "is_task_id_used") { + // TODO: returning a value based on the Z flag } -define(0x00000A28U, "save_state_and_yield_task") { -} +define(0x00000A28U, "save_state_and_yield_task") {} comment("memory jump table") define(0x00000B10U, "allocate_memory") { + parameter(Word, "bytes_to_allocate") + returns(Byte.ref) } define(0x00000B14U, "free_memory") { + parameter(Byte.ref, "allocated_block") } comment("window jump table") @@ -535,6 +548,16 @@ define(0x00000C14U, "destroy_window") { parameter(Byte.ref, "window_struct") } define(0x00000C18U, "new_window_event") { + parameter(Word, "event_type") + parameter(Word, "parameter0") + parameter(Word, "parameter1") + parameter(Word, "parameter2") + parameter(Word, "parameter3") + parameter(Word, "parameter4") + parameter(Word, "parameter5") + parameter(Word, "parameter6") + parameter(Word, "parameter7") + parameter(Byte.ref, "window_struct") } define(0x00000C1CU, "get_next_window_event") { parameter(Byte.ref, "window_struct") @@ -567,29 +590,54 @@ define(0x00000C30U, "start_dragging_window") { parameter(Byte.ref, "window_struct") } define(0x00000C34U, "new_messagebox") { + parameter(IByte.ref, "first_line_str") + parameter(IByte.ref, "second_line_str") + parameter(IByte.ref, "third_line_str") + parameter(Half, "x") + parameter(Half, "y") + parameter(Half, "width") } define(0x00000C38U, "get_active_window_struct") { - returns(Word.ref) + returns(Byte.ref) } comment("VFS jump table") define(0x00000D10U, "open") { + parameter(IByte.ref, "file_name") + parameter(Byte, "disk_id") + parameter(Byte.ref, "file_struct") + returns(Half) } define(0x00000D14U, "seek") { + parameter(Word, "offset") + parameter(Byte.ref, "file_struct") } define(0x00000D18U, "tell") { + parameter(Byte.ref, "file_struct") + returns(Word) } define(0x00000D1CU, "read") { + parameter(Word, "bytes_to_read") + parameter(Byte.ref, "file_struct") + parameter(Byte.ref, "destination_buffer") + returns(Word) } define(0x00000D20U, "write") { + parameter(Word, "bytes_to_write") + parameter(Byte.ref, "file_struct") + parameter(Byte.ref, "source_buffer") } comment("widget jump table") define(0x00000E10U, "draw_widgets_to_window") { + parameter(Byte.ref, "window_struct") } define(0x00000E14U, "handle_widget_click") { + parameter(Byte.ref, "window_struct") + parameter(Half, "x") + parameter(Half, "y") } comment("event types")