From 6576cf1e5dd48f5b918792c75d19fc4debe93b40 Mon Sep 17 00:00:00 2001 From: Yann MAGNIN Date: Mon, 24 Feb 2020 00:05:27 +0100 Subject: [PATCH] Update kernel/util organisation + add scheduler !! --- include/kernel/dbr.h | 10 - include/kernel/devices/display.h | 4 +- include/kernel/devices/keyboard.h | 2 +- include/kernel/devices/tty.h | 2 +- include/kernel/extra.h | 10 - include/kernel/fs/file.h | 2 +- include/kernel/fs/filesystem.h | 2 +- include/kernel/fs/gladfs.h | 2 +- include/kernel/fs/smemfs.h | 2 +- include/kernel/fs/vfs.h | 2 +- include/kernel/loader.h | 2 +- include/kernel/process.h | 2 +- include/kernel/syscall.h | 74 +------ include/kernel/util.h | 51 ----- include/kernel/{ => util}/atomic.h | 0 include/kernel/util/casio.h | 65 ++++++ include/kernel/util/debug.h | 14 ++ include/kernel/{font.h => util/draw.h} | 17 +- include/kernel/{ => util}/elf.h | 0 include/kernel/util/extra.h | 18 ++ include/kernel/util/string.h | 31 +++ include/kernel/util/timer.h | 31 +++ include/kernel/{ => util}/types.h | 0 include/kernel/{ => util}/unistd_32.h | 0 include/kernel/vbr.h | 11 - src/kernel/bootstrap/mpu.c | 2 +- src/kernel/bootstrap/start.c | 11 +- src/kernel/bootstrap/vhex.c | 2 +- src/kernel/context/fx9860/restore.c | 2 +- src/kernel/context/fx9860/save.c | 2 +- src/kernel/devices/display/close.c | 7 - src/kernel/devices/display/ioctl.c | 48 ----- src/kernel/devices/display/open.c | 11 - src/kernel/devices/display/write.c | 68 ------ src/kernel/devices/tty/file_op/read.c | 8 +- src/kernel/devices/tty/file_op/write.c | 6 +- src/kernel/devices/tty/inode_op/open.c | 2 +- src/kernel/devices/ubc/close.c | 10 - src/kernel/devices/ubc/open.c | 51 ----- src/kernel/fs/gladfs/file/read.c | 4 +- src/kernel/fs/gladfs/file/write.c | 4 +- src/kernel/fs/gladfs/filesystem/mount.c | 4 +- src/kernel/fs/gladfs/inode/creat.c | 2 +- src/kernel/fs/gladfs/inode/get_name.c | 4 +- src/kernel/fs/gladfs/inode/mkdir.c | 2 +- .../fs/gladfs/superblock/alloc_fragdata.c | 2 +- src/kernel/fs/gladfs/superblock/alloc_inode.c | 4 +- .../fs/gladfs/superblock/destroy_fragdata.c | 2 +- .../fs/gladfs/superblock/destroy_inode.c | 2 +- src/kernel/fs/smemfs/file/read.c | 4 +- src/kernel/fs/smemfs/filesystem/mount.c | 2 +- src/kernel/fs/smemfs/initialize.c | 2 +- src/kernel/fs/smemfs/inode/find_first_child.c | 3 +- .../fs/smemfs/inode/find_next_sibling.c | 3 +- src/kernel/fs/smemfs/inode/find_parent.c | 2 +- src/kernel/fs/smemfs/inode/get_mode.c | 2 +- src/kernel/fs/smemfs/inode/get_name.c | 2 +- src/kernel/fs/syscall/open.c | 6 +- src/kernel/fs/vfs/dentry/alloc.c | 2 +- src/kernel/fs/vfs/dentry/find_first_child.c | 1 - src/kernel/fs/vfs/dentry/find_next_sibling.c | 1 - src/kernel/fs/vfs/dentry/resolve.c | 3 +- src/kernel/fs/vfs/file/open.c | 2 +- src/kernel/fs/vfs/file/read.c | 2 +- src/kernel/fs/vfs/file/write.c | 1 - src/kernel/fs/vfs/inode/mkdir.c | 2 +- src/kernel/fs/vfs/inode/mknod.c | 2 +- src/kernel/fs/vfs/superblock/mount.c | 3 +- src/kernel/hardware/t6k11/variant.c | 3 +- src/kernel/hardware/tmu/handler.c | 4 +- src/kernel/hardware/ubc/handler.c | 2 +- src/kernel/hardware/vbr/exception.c | 2 +- src/kernel/hardware/vbr/exception_pre.s | 4 +- src/kernel/hardware/vbr/interrupt.c | 2 +- src/kernel/hardware/vbr/tlb.c | 2 +- src/kernel/loader/entry.c | 4 +- src/kernel/loader/header.c | 2 - src/kernel/loader/image.c | 3 +- src/kernel/memory/pm_free.c | 2 +- src/kernel/scheduler/add_task.c | 2 +- src/kernel/scheduler/debug.c | 2 +- src/kernel/scheduler/handler.S | 6 +- src/kernel/scheduler/process/create.c | 5 +- src/kernel/scheduler/schedule.c | 2 - src/kernel/scheduler/start.c | 5 +- src/kernel/scheduler/syscall/sys_exit.c | 2 +- src/kernel/scheduler/syscall/sys_fexecve.c | 5 +- src/kernel/syscall/handler.c | 4 +- src/kernel/syscall/syscall_pre.s | 17 +- src/kernel/syscall/test.S | 7 - src/kernel/test.c | 7 +- src/kernel/util/{ => atomic}/atomic.s | 2 - src/kernel/util/{ => casio}/syscall.s | 0 src/kernel/util/{font.c => draw/ascii.c} | 8 +- src/kernel/util/draw/clear.c | 27 +++ src/kernel/util/draw/clr_str_area.c | 43 ++++ src/kernel/util/draw/display.c | 16 ++ src/kernel/util/draw/reverse.c | 70 +++++++ src/kernel/util/draw/scroll.c | 38 ++++ src/kernel/util/{ => extra}/dbr.s | 0 src/kernel/util/{extra.s => extra/icbi.s} | 3 +- src/kernel/util/{ => extra}/vbr.s | 0 src/kernel/util/kvram.c | 194 ------------------ src/kernel/util/printk.c | 136 ------------ src/kernel/util/string.c | 92 --------- src/kernel/util/string/memcpy.c | 9 + src/kernel/util/string/memset.c | 9 + src/kernel/util/string/strcat.c | 17 ++ src/kernel/util/string/strchr.c | 31 +++ src/kernel/util/string/strcmp.c | 13 ++ src/kernel/util/string/strcpy.c | 27 +++ src/kernel/util/string/strlen.c | 23 +++ src/kernel/util/timer.c | 132 ------------ src/kernel/util/timer/constructor.c | 47 +++++ src/kernel/util/timer/install.c | 54 +++++ src/kernel/util/timer/start.c | 28 +++ src/kernel/util/timer/stop.c | 28 +++ src/kernel/util/timer/uninstall.c | 40 ++++ src/lib/display/dascii.S | 2 +- src/lib/display/dclear.S | 2 +- src/lib/display/dclr_str_area.S | 2 +- src/lib/display/dprint.S | 2 +- src/lib/display/dreverse.S | 2 +- src/lib/display/dscroll.S | 2 +- src/lib/display/dupdate.S | 2 +- src/lib/unistd/close.S | 2 +- src/lib/unistd/fexecve.S | 2 +- src/lib/unistd/fork.S | 2 +- src/lib/unistd/lseek.S | 2 +- src/lib/unistd/open.S | 2 +- src/lib/unistd/read.S | 2 +- src/lib/unistd/waitpid.S | 2 +- src/lib/unistd/write.S | 2 +- src/user/shell/util/check_builtin.c | 2 +- src/user/test/test.c | 6 +- 135 files changed, 826 insertions(+), 1052 deletions(-) delete mode 100644 include/kernel/dbr.h delete mode 100644 include/kernel/extra.h delete mode 100644 include/kernel/util.h rename include/kernel/{ => util}/atomic.h (100%) create mode 100644 include/kernel/util/casio.h create mode 100644 include/kernel/util/debug.h rename include/kernel/{font.h => util/draw.h} (67%) rename include/kernel/{ => util}/elf.h (100%) create mode 100644 include/kernel/util/extra.h create mode 100644 include/kernel/util/string.h create mode 100644 include/kernel/util/timer.h rename include/kernel/{ => util}/types.h (100%) rename include/kernel/{ => util}/unistd_32.h (100%) delete mode 100644 include/kernel/vbr.h delete mode 100644 src/kernel/devices/display/close.c delete mode 100644 src/kernel/devices/display/ioctl.c delete mode 100644 src/kernel/devices/display/open.c delete mode 100644 src/kernel/devices/display/write.c delete mode 100644 src/kernel/devices/ubc/close.c delete mode 100644 src/kernel/devices/ubc/open.c delete mode 100644 src/kernel/syscall/test.S rename src/kernel/util/{ => atomic}/atomic.s (96%) rename src/kernel/util/{ => casio}/syscall.s (100%) rename src/kernel/util/{font.c => draw/ascii.c} (96%) create mode 100644 src/kernel/util/draw/clear.c create mode 100644 src/kernel/util/draw/clr_str_area.c create mode 100644 src/kernel/util/draw/display.c create mode 100644 src/kernel/util/draw/reverse.c create mode 100644 src/kernel/util/draw/scroll.c rename src/kernel/util/{ => extra}/dbr.s (100%) rename src/kernel/util/{extra.s => extra/icbi.s} (92%) rename src/kernel/util/{ => extra}/vbr.s (100%) delete mode 100644 src/kernel/util/kvram.c delete mode 100644 src/kernel/util/printk.c delete mode 100644 src/kernel/util/string.c create mode 100644 src/kernel/util/string/memcpy.c create mode 100644 src/kernel/util/string/memset.c create mode 100644 src/kernel/util/string/strcat.c create mode 100644 src/kernel/util/string/strchr.c create mode 100644 src/kernel/util/string/strcmp.c create mode 100644 src/kernel/util/string/strcpy.c create mode 100644 src/kernel/util/string/strlen.c delete mode 100644 src/kernel/util/timer.c create mode 100644 src/kernel/util/timer/constructor.c create mode 100644 src/kernel/util/timer/install.c create mode 100644 src/kernel/util/timer/start.c create mode 100644 src/kernel/util/timer/stop.c create mode 100644 src/kernel/util/timer/uninstall.c diff --git a/include/kernel/dbr.h b/include/kernel/dbr.h deleted file mode 100644 index 5adfa41..0000000 --- a/include/kernel/dbr.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef __KERNEL_DBR_H__ -# define __KERNEL_DBR_H__ - -#include -#include - -extern void *dbr_set(void *dbr_new); -extern void *dbr_get(void); - -#endif /*__KERNEL_DBR_H__*/ diff --git a/include/kernel/devices/display.h b/include/kernel/devices/display.h index 954bbfa..5086ec2 100644 --- a/include/kernel/devices/display.h +++ b/include/kernel/devices/display.h @@ -3,8 +3,8 @@ #include #include -#include -#include +#include +#include // Define screen informations. #define DISPLAY_SCREEN_WIDTH (128) diff --git a/include/kernel/devices/keyboard.h b/include/kernel/devices/keyboard.h index feac659..e7bdaf0 100644 --- a/include/kernel/devices/keyboard.h +++ b/include/kernel/devices/keyboard.h @@ -3,7 +3,7 @@ #include #include -#include +#include #define KEYCODE_GEN(row, column) \ (((row & 0x0f) << 4) | ((column & 0x0f) << 0)) diff --git a/include/kernel/devices/tty.h b/include/kernel/devices/tty.h index 4e708bc..6e2b39a 100644 --- a/include/kernel/devices/tty.h +++ b/include/kernel/devices/tty.h @@ -5,7 +5,7 @@ #include #include #include -#include +#include // Define default buffer size. // TODO: remove me ? diff --git a/include/kernel/extra.h b/include/kernel/extra.h deleted file mode 100644 index 77b3e34..0000000 --- a/include/kernel/extra.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef __KERNEL_EXTRA_H__ -# define __KERNEL_EXTRA_H__ - -#include -#include - -// SH4-instruction -extern void icbi(void *area); - -#endif /*__KERNEL_EXTRA_H__*/ diff --git a/include/kernel/fs/file.h b/include/kernel/fs/file.h index 15d5a5a..958d482 100644 --- a/include/kernel/fs/file.h +++ b/include/kernel/fs/file.h @@ -3,7 +3,7 @@ #include #include -#include +#include #include #ifndef FILE_OPEN_NUMBER diff --git a/include/kernel/fs/filesystem.h b/include/kernel/fs/filesystem.h index edc2e16..7523f57 100644 --- a/include/kernel/fs/filesystem.h +++ b/include/kernel/fs/filesystem.h @@ -3,7 +3,7 @@ #include #include -#include +#include // FS flags #define FS_RDWR (0x01) diff --git a/include/kernel/fs/gladfs.h b/include/kernel/fs/gladfs.h index 84d5d55..6797363 100644 --- a/include/kernel/fs/gladfs.h +++ b/include/kernel/fs/gladfs.h @@ -3,7 +3,7 @@ #include #include -#include +#include # define GLADFS_INODE_NAME_LENGHT (16) diff --git a/include/kernel/fs/smemfs.h b/include/kernel/fs/smemfs.h index 2e59a1a..45d4878 100644 --- a/include/kernel/fs/smemfs.h +++ b/include/kernel/fs/smemfs.h @@ -3,7 +3,7 @@ #include #include -#include +#include #include #define CASIO_SMEM_NAME_LENGHT 12 diff --git a/include/kernel/fs/vfs.h b/include/kernel/fs/vfs.h index a4ca5e4..2e9bcc2 100644 --- a/include/kernel/fs/vfs.h +++ b/include/kernel/fs/vfs.h @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/include/kernel/loader.h b/include/kernel/loader.h index 2c41168..97196ed 100644 --- a/include/kernel/loader.h +++ b/include/kernel/loader.h @@ -5,7 +5,7 @@ #include #include #include -#include +#include // Function extern void *loader(const char *path, struct process *process); diff --git a/include/kernel/process.h b/include/kernel/process.h index 20c63ff..e98c5f1 100644 --- a/include/kernel/process.h +++ b/include/kernel/process.h @@ -6,7 +6,7 @@ #include #include #include -#include +#include #define PROCESS_NB_OPEN_FILE (4) #define PROCESS_USER_STACK_SIZE (2 * 1024) diff --git a/include/kernel/syscall.h b/include/kernel/syscall.h index 78a861f..84e476c 100644 --- a/include/kernel/syscall.h +++ b/include/kernel/syscall.h @@ -1,15 +1,16 @@ -#ifndef __CASIO_H__ -# define __CASIO_H__ +#ifndef __SYSCALL_H__ +# define __SYSCALL_H__ #include #include -#include +#include //--- // // Vhex part !! // //--- +// Process extern pid_t sys_fork(void); extern pid_t sys_getpid(void); extern pid_t sys_getppid(void); @@ -17,74 +18,11 @@ extern pid_t sys_waitpid(pid_t pid, int *wstatus, int options); extern pid_t sys_fexecve(const char *pathname); extern void sys_exit(int status); +// File extern int sys_open(const char *pathname, int flags, ...); extern ssize_t sys_write(int fd, const void *buf, size_t count); extern ssize_t sys_read(int fd, void *buf, size_t count); extern off_t sys_lseek(int fd, off_t offset, int whence); extern int sys_close(int fd); -//--- -// -// CASIO PART !! -// TODO: remove me ? -// -//---- - - -// Internal Casio datat structure -struct rect -{ - int left; - int top; - int right; - int bottom; -}; - -// -// Casio prototypes. -// -/* GetKey() - display Casio's VRAM and wait keyboard input. */ -void casio_GetKey(unsigned int *key); -void casio_GetKeyWait(int *row, int *column, int type_waiting, int timeout, int menu, unsigned int *key); - -/* Bdisp_PutDisp_DD - display Casio's VRAM on screen */ -void casio_Bdisp_PutDisp_DD(void); - -/* Bdisp_AllClr_VRAM() - clear entirely the Casio's VRAM */ -void casio_Bdisp_AllClr_VRAM(void); - -/* Bdisp_AreaClr_VRAM() - clear only VRAM area. */ -void casio_Bdisp_AreaClr_VRAM(const struct rect *buf); - -/* PrintMini() - print string in Casio's VRAM (and display on screen ?) */ -void casio_Bdisp_PrintMini(size_t x, size_t y, char const *str, int mode); - -/* Bdisp_DrawLine_VRAM() - draw line in Casio's VRAM. */ -void casio_Bdisp_DrawLine_VRAM(int x1, int y1, int x2, int y2); - -/* RestoreDisp() - restore saved screen. */ -void casio_RestoreDisp(unsigned char page); - -/* SaveDisp() - save the content of the screen. */ -void casio_SaveDisp(unsigned char page); - -/* Malloc() - malloc syscall */ -void *casio_Malloc(size_t size); - -/* Free() - free syscall */ -void *casio_Free(void *ptr); - -/* GetVRAM - Get the Video RAM used by Casio */ -void *casio_Bdisp_GetVRAM(void); - -/* Bkey_PutKeyCode - Inject keycode to key buffer */ -void casio_Bkey_PutKeymatrix(uint16_t *code); - -// Internal casio abstraction. -static inline void dclear_area(int x1, int y1, int x2, int y2) -{ - struct rect area = {.left = x1, .top = y1, .right = x2, .bottom = y2}; - casio_Bdisp_AreaClr_VRAM(&area); -} - -#endif /*__CASIO_H__*/ +#endif /*__SYSCALL_H__*/ diff --git a/include/kernel/util.h b/include/kernel/util.h deleted file mode 100644 index 2fef585..0000000 --- a/include/kernel/util.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef __KERNEL_UTIL_H__ -# define __KERNEL_UTIL_H__ - -#include -#include - -// String function -extern void *memset(void *s, int c, size_t n); -extern void *memcpy(void *dest, const void *src, size_t count); -extern char *strncpy(char *dest, char const *str, size_t size); -extern size_t strnlen(char const *str, size_t maxlen); -extern int strcmp(const char *s1, const char *s2); -extern int strncmp(const char *s1, const char *s2, size_t n); -extern char *strrchr(const char *s1, int c); -extern size_t strlen(char const *str); - -// Video RAM functions -extern void kvram_clear(void); -extern void kvram_display(void); -extern void kvram_scroll(int lines); -extern void kvram_ascii(int x, int y, char const c); -extern void kvram_reverse(int x, int y, int width, int height); -extern void kvram_clr_str_area(int x, int y, int width, int height); - -// Kernel printf-wrapper -extern void printk(int x, int y, char const *str, ...); - -// Hardware specific function (do not use !) -extern void t6k11_lcd_driver(void *vram); -extern void t6k11_variant_lcd_driver(uint8_t *vram); - -//--- -// Timer functions. -//--- -#define TIMER_NUMBER 3 -#define TIMER_UNUSED 0xff - -struct timer_cache_s -{ - void *callback; - volatile void *arg; - uint8_t status; -}; -extern int timer_uninstall(int timer_ID); -extern int timer_install(void *callback, void *arg, uint32_t ticks, uint8_t mode); -extern int timer_start(int timer_ID); - -// Debug wait -#define DBG_WAIT for(int i = 0 ; i < 3000000 ; i++) - -#endif /*__KERNEL_UTIL_H__*/ diff --git a/include/kernel/atomic.h b/include/kernel/util/atomic.h similarity index 100% rename from include/kernel/atomic.h rename to include/kernel/util/atomic.h diff --git a/include/kernel/util/casio.h b/include/kernel/util/casio.h new file mode 100644 index 0000000..73c1f16 --- /dev/null +++ b/include/kernel/util/casio.h @@ -0,0 +1,65 @@ +#ifndef __KERNEL_UTIL_CASIO_H__ +# define __KERNEL_UTIL_CASIO_H__ + +#include +#include + +// Internal Casio datat structure +struct rect +{ + int left; + int top; + int right; + int bottom; +}; + +// +// Casio prototypes. +// +/* GetKey() - display Casio's VRAM and wait keyboard input. */ +void casio_GetKey(unsigned int *key); +void casio_GetKeyWait(int *row, int *column, int type_waiting, int timeout, int menu, unsigned int *key); + +/* Bdisp_PutDisp_DD - display Casio's VRAM on screen */ +void casio_Bdisp_PutDisp_DD(void); + +/* Bdisp_AllClr_VRAM() - clear entirely the Casio's VRAM */ +void casio_Bdisp_AllClr_VRAM(void); + +/* Bdisp_AreaClr_VRAM() - clear only VRAM area. */ +void casio_Bdisp_AreaClr_VRAM(const struct rect *buf); + +/* PrintMini() - print string in Casio's VRAM (and display on screen ?) */ +void casio_Bdisp_PrintMini(size_t x, size_t y, char const *str, int mode); + +/* Bdisp_DrawLine_VRAM() - draw line in Casio's VRAM. */ +void casio_Bdisp_DrawLine_VRAM(int x1, int y1, int x2, int y2); + +/* RestoreDisp() - restore saved screen. */ +void casio_RestoreDisp(unsigned char page); + +/* SaveDisp() - save the content of the screen. */ +void casio_SaveDisp(unsigned char page); + +/* Malloc() - malloc syscall */ +void *casio_Malloc(size_t size); + +/* Free() - free syscall */ +void *casio_Free(void *ptr); + +/* GetVRAM - Get the Video RAM used by Casio */ +void *casio_Bdisp_GetVRAM(void); + +/* Bkey_PutKeyCode - Inject keycode to key buffer */ +void casio_Bkey_PutKeymatrix(uint16_t *code); + +// Internal casio abstraction. +static inline void dclear_area(int x1, int y1, int x2, int y2) +{ + struct rect area = {.left = x1, .top = y1, .right = x2, .bottom = y2}; + casio_Bdisp_AreaClr_VRAM(&area); +} + + + +#endif /*__KERNEL_UTIL_CASIO_H__*/ diff --git a/include/kernel/util/debug.h b/include/kernel/util/debug.h new file mode 100644 index 0000000..0864bb9 --- /dev/null +++ b/include/kernel/util/debug.h @@ -0,0 +1,14 @@ +#ifndef __KERNEL_UTIL_DEBUG_H__ +# define __KERNEL_UTIL_DEBUG_H__ + +#include +#include +#include + +// Wait debug (dirty) +#define DBG_WAIT for(int i = 0 ; i < 3000000 ; i++) + +// Prototype +void printk(int x, int y, char const *str, ...); + +#endif /*__KERNEL_UTIL_DEBUG_H__*/ diff --git a/include/kernel/font.h b/include/kernel/util/draw.h similarity index 67% rename from include/kernel/font.h rename to include/kernel/util/draw.h index 794e9c5..9d46297 100644 --- a/include/kernel/font.h +++ b/include/kernel/util/draw.h @@ -1,5 +1,5 @@ -#ifndef __KERNEL_FONT_H__ -# define __KERNEL_FONT_H__ +#ifndef __KERNEL_UTIL_DRAW_H__ +# define __KERNEL_UTIL_DRAW_H__ #include #include @@ -28,7 +28,14 @@ struct font_block_s int16_t y; }; -// Font function. -extern void font_draw(int x, int y, char n); -#endif /*__KERNEL_FONT_H__*/ + +// Prototype +extern void kvram_clear(void); +extern void kvram_display(void); +extern void kvram_scroll(int lines); +extern void kvram_reverse(int x, int y, int width, int height); +extern void kvram_clr_str_area(int x, int y, int width, int height); +extern void kvram_ascii(int x, int y, char const c); + +#endif /*__KERNEL_UTIL_DRAW_H__*/ diff --git a/include/kernel/elf.h b/include/kernel/util/elf.h similarity index 100% rename from include/kernel/elf.h rename to include/kernel/util/elf.h diff --git a/include/kernel/util/extra.h b/include/kernel/util/extra.h new file mode 100644 index 0000000..d8cf12a --- /dev/null +++ b/include/kernel/util/extra.h @@ -0,0 +1,18 @@ +#ifndef __KERNEL_UTIL_EXTRA_H__ +# define __KERNEL_UTIL_EXTRA_H__ + +#include +#include + +// DeBug Register abstract +extern void *dbr_set(void *dbr_new); +extern void *dbr_get(void); + +// SH4-instruction +extern void icbi(void *area); + +// Vector Based Register abstract. +extern void *vbr_set(void *vbr_new); +extern void *vbr_get(void); + +#endif /*__KERNEL_UTIL_EXTRA_H__*/ diff --git a/include/kernel/util/string.h b/include/kernel/util/string.h new file mode 100644 index 0000000..247ec9e --- /dev/null +++ b/include/kernel/util/string.h @@ -0,0 +1,31 @@ +#ifndef __KERNEL_UTIL_STRING_H__ +# define __KERNEL_UTIL_STRING_H__ + +#include +#include + +/* memset() - fill memory with a constant byte. */ +extern void *memset(void *s, int c, size_t n); +extern void *memcpy(void *dest, const void *src, size_t n); + +/* strcat() - concatenate two string */ +extern char *strcat(char *dest, char const *src); + +/* strcmp() - compare two strings */ +extern int strcmp(const char *s1, const char *s2); +extern int strncmp(const char *s1, const char *s2, size_t n); + +/* strcpy(), strncpy() - copy a string. */ +extern char *strncpy(char *dest, char const *str, size_t size); +extern char *strcpy(char *dest, char const *src); + +/* strlen - calculate the lenght of a string. */ +extern size_t strnlen(char const *str, size_t maxlen); +extern size_t strlen(char const *str); + +/* strchr - find the first / last occurent of the char c */ +extern char *strchr(const char *s1, int c); +extern char *strchrnul(const char *s1, int c); +extern char *strrchr(const char *s1, int c); + +#endif /*__KERNEL_UTIL_STRING_H__*/ diff --git a/include/kernel/util/timer.h b/include/kernel/util/timer.h new file mode 100644 index 0000000..959ed44 --- /dev/null +++ b/include/kernel/util/timer.h @@ -0,0 +1,31 @@ +#ifndef __KERNEL_UTIL_TIMER_H__ +# define __KERNEL_UTIL_TIMER_H__ + +#include +#include + +// Define internal timer informations +#define TIMER_NUMBER 3 +#define TIMER_UNUSED 0xff + +// Structure used by the timer abstraction +struct timer_cache_s +{ + void *callback; + volatile void *arg; + uint8_t status; +}; + +// Internal enum used to setup the timer +typedef enum { + TIMER_START, + TIMER_STOP +} tmode_t; + +// Prototypes +extern int timer_uninstall(int timer_ID); +extern int timer_install(void *callback, void *arg, uint32_t ticks, tmode_t mode); +extern int timer_start(int timer_ID); +extern int timer_stop(int timer_ID); + +#endif /*__KERNEL_UTIL_TIMER_H__*/ diff --git a/include/kernel/types.h b/include/kernel/util/types.h similarity index 100% rename from include/kernel/types.h rename to include/kernel/util/types.h diff --git a/include/kernel/unistd_32.h b/include/kernel/util/unistd_32.h similarity index 100% rename from include/kernel/unistd_32.h rename to include/kernel/util/unistd_32.h diff --git a/include/kernel/vbr.h b/include/kernel/vbr.h deleted file mode 100644 index e1a046a..0000000 --- a/include/kernel/vbr.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __KERNEL_VBR_H__ -# define __KERNEL_VBR_H__ - -#include -#include - -// Vbr helper. -extern void *vbr_set(void *vbr_new); -extern void *vbr_get(void); - -#endif /*__KERNEL_VBR_H__*/ diff --git a/src/kernel/bootstrap/mpu.c b/src/kernel/bootstrap/mpu.c index 6804b71..d9ccfbf 100644 --- a/src/kernel/bootstrap/mpu.c +++ b/src/kernel/bootstrap/mpu.c @@ -1,4 +1,4 @@ -#include +#include /* check_sh3 - Detecting sh3-based MPU */ static mpu_t check_sh3(uint16_t tplcr) diff --git a/src/kernel/bootstrap/start.c b/src/kernel/bootstrap/start.c index 2787c9a..d41e6ce 100644 --- a/src/kernel/bootstrap/start.c +++ b/src/kernel/bootstrap/start.c @@ -1,17 +1,16 @@ #include #include -#include +#include +#include +#include +#include +#include #include -#include #include #include #include -#include #include #include -#include - -//TODO: remove me ! #include #include #include diff --git a/src/kernel/bootstrap/vhex.c b/src/kernel/bootstrap/vhex.c index 3b923bc..033c0e3 100644 --- a/src/kernel/bootstrap/vhex.c +++ b/src/kernel/bootstrap/vhex.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include void vhex_context_set(void) { diff --git a/src/kernel/context/fx9860/restore.c b/src/kernel/context/fx9860/restore.c index 9951976..aa449f9 100644 --- a/src/kernel/context/fx9860/restore.c +++ b/src/kernel/context/fx9860/restore.c @@ -3,7 +3,7 @@ #include #include #include -#include +#include void fx9860_context_restore(fx9860_context_t *context) { diff --git a/src/kernel/context/fx9860/save.c b/src/kernel/context/fx9860/save.c index d6e8aa5..aba7cfe 100644 --- a/src/kernel/context/fx9860/save.c +++ b/src/kernel/context/fx9860/save.c @@ -3,7 +3,7 @@ #include #include #include -#include +#include void fx9860_context_save(fx9860_context_t *context) { diff --git a/src/kernel/devices/display/close.c b/src/kernel/devices/display/close.c deleted file mode 100644 index 9fbc92a..0000000 --- a/src/kernel/devices/display/close.c +++ /dev/null @@ -1,7 +0,0 @@ -#include - -int display_close(void) -{ - // Do nothing for now. - return (0); -} diff --git a/src/kernel/devices/display/ioctl.c b/src/kernel/devices/display/ioctl.c deleted file mode 100644 index d983441..0000000 --- a/src/kernel/devices/display/ioctl.c +++ /dev/null @@ -1,48 +0,0 @@ -#include -#include -#include - -void display_ioctl(uint32_t cmd, ...) -{ - extern int dcurx; - extern int dcury; - va_list ap; - - va_start(ap, cmd); - switch (cmd) - { - case DISPLAY_IOCTL_GETX: - { - int *ret = va_arg(ap, int *); - *ret = dcurx; - break; - } - case DISPLAY_IOCTL_GETY: - { - int *ret = va_arg(ap, int *); - *ret = dcury; - break; - } - case DISPLAY_IOCTL_SETX: - { - dcurx = va_arg(ap, int); - break; - } - case DISPLAY_IOCTL_SETY: - { - dcury = va_arg(ap, int); - break; - } - case DISPLAY_IOCTL_CLEAR: - { - kvram_clear(); - break; - } - case DISPLAY_IOCTL_DISPLAY: - { - kvram_display(); - break; - } - } - va_end(ap); -} diff --git a/src/kernel/devices/display/open.c b/src/kernel/devices/display/open.c deleted file mode 100644 index 780fd0e..0000000 --- a/src/kernel/devices/display/open.c +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include - -// Create VRAM global. -uint32_t vram[256]; - -int display_open(void) -{ - //TODO: handle gxcg50 !!! - return (0); -} diff --git a/src/kernel/devices/display/write.c b/src/kernel/devices/display/write.c deleted file mode 100644 index 2a1af81..0000000 --- a/src/kernel/devices/display/write.c +++ /dev/null @@ -1,68 +0,0 @@ -#include -#include -#include - -// Internal display cursor. -int dcurx = 0; -int dcury = 0; - -static void display_clear(void) -{ - int i; - - i = 256; - while (--i >= 0) - vram[i] = 0x00000000; -} - -static void display_ascii(int column, int row, char c) -{ - int x; - int y; - - // Get real X / Y positions. - y = row * (KERNEL_FONT_REAL_HEIGHT + 1); - x = column * (KERNEL_FONT_REAL_WIDTH + 1); - - // Draw ASCII character. - font_draw(x, y, c); -} - -ssize_t display_write(const void *buffer, size_t count) -{ - ssize_t i; - int x; - int y; - // Start atomic operation - atomic_start(); - - // Write ASCII charactere. - y = 0; - x = 0; - i = -1; - while (++i < (ssize_t)count) - { - // Draw ASCII character. - display_ascii(x + dcurx, y + dcury, ((uint8_t*)buffer)[i]); - - // Update draw position. - x = x + 1; - if (x + dcurx >= DISPLAY_SCREEN_WIDTH) - { - x = 0; - y = y + 1; - if (y + dcury >= DISPLAY_SCREEN_HEIGHT) - break; - } - } - - // Hardware-specifique screen driver. - // TODO: Handle OS 3.00 ! - //t6k11_display(vram); - - // End atomic operation. - atomic_stop(); - - // Return the number of written char. - return (i); -} diff --git a/src/kernel/devices/tty/file_op/read.c b/src/kernel/devices/tty/file_op/read.c index 5ebbfd9..209a7d3 100644 --- a/src/kernel/devices/tty/file_op/read.c +++ b/src/kernel/devices/tty/file_op/read.c @@ -1,9 +1,12 @@ #include #include #include -#include #include -#include +#include +#include +#include +#include +#include // Intenral functions static void wait_keyboard_event(void); @@ -117,7 +120,6 @@ static int check_special(struct keyboard_obj_s *keyboard, key_t key) { extern fx9860_context_t casio_context; extern fx9860_context_t vhex_context; - unsigned int tmp; switch (key) { diff --git a/src/kernel/devices/tty/file_op/write.c b/src/kernel/devices/tty/file_op/write.c index 7e29010..a791277 100644 --- a/src/kernel/devices/tty/file_op/write.c +++ b/src/kernel/devices/tty/file_op/write.c @@ -1,7 +1,8 @@ #include #include -#include -#include +#include +#include +#include // Internal TTY object. extern struct tty_s tty; @@ -107,7 +108,6 @@ static void tty_display(void) { int saved_start; int line_len; - int row_last; int scolumn; int srow; int line; diff --git a/src/kernel/devices/tty/inode_op/open.c b/src/kernel/devices/tty/inode_op/open.c index fe67d33..214bec6 100644 --- a/src/kernel/devices/tty/inode_op/open.c +++ b/src/kernel/devices/tty/inode_op/open.c @@ -1,7 +1,7 @@ #include #include #include -#include +#include // Internal TTY object. struct tty_s tty; diff --git a/src/kernel/devices/ubc/close.c b/src/kernel/devices/ubc/close.c deleted file mode 100644 index 64836dc..0000000 --- a/src/kernel/devices/ubc/close.c +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include - -int ubc_close(void) -{ - //FIXME: check MPU before call this function !!! - //FIXME: Disable all chennel before power OFF ? - SH7305_POWER.MSTPCR0.UBC = 1; - return (1); -} diff --git a/src/kernel/devices/ubc/open.c b/src/kernel/devices/ubc/open.c deleted file mode 100644 index 9a645cc..0000000 --- a/src/kernel/devices/ubc/open.c +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include -#include -#include -#include -#include - -// Internal data used by UBC device. -void *casio_dbr; - -// Internal function. -extern void ubc_handler_pre(void); - -int ubc_open(void) -{ - //FIXME: check MPU before call this function !!! - // Power ON the User Break Controller. - SH7305_POWER.MSTPCR0.UBC = 0; - - // Set Debug Based Register address. - casio_dbr = dbr_set(&ubc_handler_pre); - - // Setup Channel 0. - SH7305_UBC.CRR0.PCB = 1; // Set PC break adter instruction break. - SH7305_UBC.CRR0.BIE = 1; // Request a Break. - - SH7305_UBC.CBR0.MFE = 0; // Enable Match Flag. - SH7305_UBC.CBR0.MFI = 0b000000; // Set UBC.CCMFR.MF0 = 1, when break occur. - SH7305_UBC.CBR0.AIE = 0; // Disable ASID check. - SH7305_UBC.CBR0.SZ = 0b010; // Disable Match condition. - SH7305_UBC.CBR0.CD = 0; // Use Operand Bus for Operand Access. - SH7305_UBC.CBR0.ID = 0b01; // Selecte instruction Fetch cycle. - SH7305_UBC.CBR0.RW = 0b11; // Use Read or Write for match condition. - SH7305_UBC.CBR0.CE = 0; // Disable Channel 0. - - // Set up target address. - SH7305_UBC.CAR0 = 0x00000000; // Tested programe address ! - SH7305_UBC.CAMR0 = 0x00000000; // Address Mask. - - // Setup Control register. - SH7305_UBC.CBCR.UBDE = 1; // Use DBR instead of VBR. - - - //@note: - // You *SHOULD* use `icbi` SH4 instruction - // After channel enable, otherwise the calculator - // will freeze. - SH7305_UBC.CBR0.CE = 1; // Enable Channel 0 ! - icbi((void*)0xa0000000); - return (0); -} diff --git a/src/kernel/fs/gladfs/file/read.c b/src/kernel/fs/gladfs/file/read.c index c8fc638..7724071 100644 --- a/src/kernel/fs/gladfs/file/read.c +++ b/src/kernel/fs/gladfs/file/read.c @@ -1,6 +1,6 @@ #include -#include -#include +#include +#include // Internal helper extern struct gladfs_fragment_data_s **gladfs_file_pos(off_t *offset, struct gladfs_inode_s *inode, off_t pos); diff --git a/src/kernel/fs/gladfs/file/write.c b/src/kernel/fs/gladfs/file/write.c index bc10cd7..a9351c6 100644 --- a/src/kernel/fs/gladfs/file/write.c +++ b/src/kernel/fs/gladfs/file/write.c @@ -1,6 +1,6 @@ #include -#include -#include +#include +#include // Internal helper extern struct gladfs_fragment_data_s **gladfs_file_pos(off_t *offset, struct gladfs_inode_s *inode, off_t pos); diff --git a/src/kernel/fs/gladfs/filesystem/mount.c b/src/kernel/fs/gladfs/filesystem/mount.c index 2f425bc..abb95b1 100644 --- a/src/kernel/fs/gladfs/filesystem/mount.c +++ b/src/kernel/fs/gladfs/filesystem/mount.c @@ -1,6 +1,6 @@ #include -#include -#include +#include +#include /* gladfs_mount() - GladFS mount primitive (sync) */ void *gladfs_mount(void) diff --git a/src/kernel/fs/gladfs/inode/creat.c b/src/kernel/fs/gladfs/inode/creat.c index 644b79d..a629f57 100644 --- a/src/kernel/fs/gladfs/inode/creat.c +++ b/src/kernel/fs/gladfs/inode/creat.c @@ -1,6 +1,6 @@ #include #include -#include +#include /* gladfs_creat() - Create new "empty" inode (atomically, sync) */ void *gladfs_creat(void *parent_inode, const char *file_name, mode_t mode) diff --git a/src/kernel/fs/gladfs/inode/get_name.c b/src/kernel/fs/gladfs/inode/get_name.c index e09bdf1..177ec6c 100644 --- a/src/kernel/fs/gladfs/inode/get_name.c +++ b/src/kernel/fs/gladfs/inode/get_name.c @@ -1,6 +1,6 @@ #include -#include -#include +#include +#include /* gladfs_get_name() - Dump the name of a file (sync) */ int gladfs_get_name(void *inode, char *name, size_t count) diff --git a/src/kernel/fs/gladfs/inode/mkdir.c b/src/kernel/fs/gladfs/inode/mkdir.c index 3217bff..d1504de 100644 --- a/src/kernel/fs/gladfs/inode/mkdir.c +++ b/src/kernel/fs/gladfs/inode/mkdir.c @@ -1,6 +1,6 @@ #include #include -#include +#include /* gladfs_mkdir() - Create new folder inode (atomically, sync) */ void *gladfs_mkdir(void *parent_inode, const char *file_name, mode_t mode) diff --git a/src/kernel/fs/gladfs/superblock/alloc_fragdata.c b/src/kernel/fs/gladfs/superblock/alloc_fragdata.c index f4ab86d..f953665 100644 --- a/src/kernel/fs/gladfs/superblock/alloc_fragdata.c +++ b/src/kernel/fs/gladfs/superblock/alloc_fragdata.c @@ -1,6 +1,6 @@ #include #include -#include +#include /* gladfs_alloc_fragdata() - Superblock primitive to alloc "empty" fragment data block (sync) */ int gladfs_alloc_fragdata(struct gladfs_fragment_data_s **parent, int nb_block) diff --git a/src/kernel/fs/gladfs/superblock/alloc_inode.c b/src/kernel/fs/gladfs/superblock/alloc_inode.c index 671e22a..173e55d 100644 --- a/src/kernel/fs/gladfs/superblock/alloc_inode.c +++ b/src/kernel/fs/gladfs/superblock/alloc_inode.c @@ -1,7 +1,7 @@ #include #include -#include -#include +#include +#include /* gladfs_alloc_inode() - Superblock primitive to alloc "empty" inode (sync) */ struct gladfs_inode_s *gladfs_alloc_inode(const char *name, mode_t mode) diff --git a/src/kernel/fs/gladfs/superblock/destroy_fragdata.c b/src/kernel/fs/gladfs/superblock/destroy_fragdata.c index 85d26ed..2497548 100644 --- a/src/kernel/fs/gladfs/superblock/destroy_fragdata.c +++ b/src/kernel/fs/gladfs/superblock/destroy_fragdata.c @@ -1,6 +1,6 @@ #include #include -#include +#include /* gladfs_destroy_fragdata() - Free'd allocated fragmented data (sync) */ /* @note: *WARNING* no verification will be done, so do not use this primitive */ diff --git a/src/kernel/fs/gladfs/superblock/destroy_inode.c b/src/kernel/fs/gladfs/superblock/destroy_inode.c index b695fb4..0d74745 100644 --- a/src/kernel/fs/gladfs/superblock/destroy_inode.c +++ b/src/kernel/fs/gladfs/superblock/destroy_inode.c @@ -1,6 +1,6 @@ #include #include -#include +#include /* gladfs_destroy_inode() - Free'd allocated inode (sync) */ /* @note: *WARNING* no verification will be done, so do not use this primitive */ diff --git a/src/kernel/fs/smemfs/file/read.c b/src/kernel/fs/smemfs/file/read.c index b2f9cf8..09b3a34 100644 --- a/src/kernel/fs/smemfs/file/read.c +++ b/src/kernel/fs/smemfs/file/read.c @@ -1,7 +1,7 @@ #include #include -#include -#include +#include +#include /* casio_smem_data_base_address() - Generate the fragmented data address (0xa0000000 + offset) */ static void *casio_smem_get_data_base_address(smemfs_fragdata_t *fragment) diff --git a/src/kernel/fs/smemfs/filesystem/mount.c b/src/kernel/fs/smemfs/filesystem/mount.c index 365fbda..c72889d 100644 --- a/src/kernel/fs/smemfs/filesystem/mount.c +++ b/src/kernel/fs/smemfs/filesystem/mount.c @@ -1,5 +1,5 @@ #include -#include +#include /* casio_smem_mount() - Mount the file system (sync) */ void *smemfs_mount(void) diff --git a/src/kernel/fs/smemfs/initialize.c b/src/kernel/fs/smemfs/initialize.c index c312625..cb0adbd 100644 --- a/src/kernel/fs/smemfs/initialize.c +++ b/src/kernel/fs/smemfs/initialize.c @@ -1,6 +1,6 @@ #include #include -#include +#include // Kernel FS block struct file_system_type smemfs_filesystem = diff --git a/src/kernel/fs/smemfs/inode/find_first_child.c b/src/kernel/fs/smemfs/inode/find_first_child.c index 54d544f..7aee1c4 100644 --- a/src/kernel/fs/smemfs/inode/find_first_child.c +++ b/src/kernel/fs/smemfs/inode/find_first_child.c @@ -1,6 +1,5 @@ #include -#include -#include +#include /* smemfs_find_first_child() - Find the fist file in the (folder) inode (sync) */ void *smemfs_find_first_child(void *inode) diff --git a/src/kernel/fs/smemfs/inode/find_next_sibling.c b/src/kernel/fs/smemfs/inode/find_next_sibling.c index 72a25ad..3016949 100644 --- a/src/kernel/fs/smemfs/inode/find_next_sibling.c +++ b/src/kernel/fs/smemfs/inode/find_next_sibling.c @@ -1,6 +1,5 @@ #include -#include -#include +#include /* smemfs_find_next_sibling() - Find the next file from the same parent (sync) */ void *smemfs_find_next_sibling(void *inode) diff --git a/src/kernel/fs/smemfs/inode/find_parent.c b/src/kernel/fs/smemfs/inode/find_parent.c index 87881fd..8d37754 100644 --- a/src/kernel/fs/smemfs/inode/find_parent.c +++ b/src/kernel/fs/smemfs/inode/find_parent.c @@ -1,5 +1,5 @@ #include -#include +#include /* smemfs_find_parent() - Return the parent inode */ void *smemfs_find_parent(void *inode) diff --git a/src/kernel/fs/smemfs/inode/get_mode.c b/src/kernel/fs/smemfs/inode/get_mode.c index 31a86ca..c8391ee 100644 --- a/src/kernel/fs/smemfs/inode/get_mode.c +++ b/src/kernel/fs/smemfs/inode/get_mode.c @@ -1,6 +1,6 @@ #include #include -#include +#include /* smemfs_get_mode() - Return the permission dans the type of a file (sync) */ mode_t smemfs_get_mode(void *inode) diff --git a/src/kernel/fs/smemfs/inode/get_name.c b/src/kernel/fs/smemfs/inode/get_name.c index d944080..a20b31c 100644 --- a/src/kernel/fs/smemfs/inode/get_name.c +++ b/src/kernel/fs/smemfs/inode/get_name.c @@ -1,5 +1,5 @@ #include -#include +#include /* smemfs_get_name() - Dump the name of a file (sync) */ int smemfs_get_name(void *inode, char *buf, size_t count) diff --git a/src/kernel/fs/syscall/open.c b/src/kernel/fs/syscall/open.c index 83ac8b7..263f8f8 100644 --- a/src/kernel/fs/syscall/open.c +++ b/src/kernel/fs/syscall/open.c @@ -1,18 +1,18 @@ #include #include -#include +#include int sys_open(const char *pathname, int flags, ...) { extern struct process *process_current; // DEBUG ! - kvram_clear(); + /*kvram_clear(); printk(0, 0, "Syscall open() !"); printk(0, 1, "path: %s", pathname); printk(0, 2, "flags: %#x", flags); kvram_display(); - DBG_WAIT; + DBG_WAIT;*/ // Get current process if (process_current == NULL) diff --git a/src/kernel/fs/vfs/dentry/alloc.c b/src/kernel/fs/vfs/dentry/alloc.c index 1b08754..0075c38 100644 --- a/src/kernel/fs/vfs/dentry/alloc.c +++ b/src/kernel/fs/vfs/dentry/alloc.c @@ -1,6 +1,6 @@ #include #include -#include +#include /* vfs_dentry_alloc() - Allocate new "empty" dentry */ struct dentry *vfs_dentry_alloc(const char *name, mode_t mode) diff --git a/src/kernel/fs/vfs/dentry/find_first_child.c b/src/kernel/fs/vfs/dentry/find_first_child.c index 463a386..38458eb 100644 --- a/src/kernel/fs/vfs/dentry/find_first_child.c +++ b/src/kernel/fs/vfs/dentry/find_first_child.c @@ -1,6 +1,5 @@ #include #include -#include #include // diff --git a/src/kernel/fs/vfs/dentry/find_next_sibling.c b/src/kernel/fs/vfs/dentry/find_next_sibling.c index 882b0b1..a22d851 100644 --- a/src/kernel/fs/vfs/dentry/find_next_sibling.c +++ b/src/kernel/fs/vfs/dentry/find_next_sibling.c @@ -1,6 +1,5 @@ #include #include -#include struct dentry *vfs_dentry_find_next_sibling(struct dentry *dentry) { diff --git a/src/kernel/fs/vfs/dentry/resolve.c b/src/kernel/fs/vfs/dentry/resolve.c index afb8fe2..f2eb03c 100644 --- a/src/kernel/fs/vfs/dentry/resolve.c +++ b/src/kernel/fs/vfs/dentry/resolve.c @@ -1,7 +1,8 @@ #include #include #include -#include +#include +#include static int get_name(int *name_lenght, const char *path, char *name) { diff --git a/src/kernel/fs/vfs/file/open.c b/src/kernel/fs/vfs/file/open.c index 7204d12..156b5c9 100644 --- a/src/kernel/fs/vfs/file/open.c +++ b/src/kernel/fs/vfs/file/open.c @@ -1,6 +1,6 @@ #include #include -#include +#include /* vfs_open() - Open file named pathname */ int vfs_open(FILE *file, char const *pathname, int flags) diff --git a/src/kernel/fs/vfs/file/read.c b/src/kernel/fs/vfs/file/read.c index 5b8cc97..9b8fd0a 100644 --- a/src/kernel/fs/vfs/file/read.c +++ b/src/kernel/fs/vfs/file/read.c @@ -1,5 +1,5 @@ #include -#include +#include ssize_t vfs_read(FILE *file, void *buf, size_t count) { diff --git a/src/kernel/fs/vfs/file/write.c b/src/kernel/fs/vfs/file/write.c index bd625b6..d6e3059 100644 --- a/src/kernel/fs/vfs/file/write.c +++ b/src/kernel/fs/vfs/file/write.c @@ -1,5 +1,4 @@ #include -#include ssize_t vfs_write(FILE *file, const void *buf, size_t count) { diff --git a/src/kernel/fs/vfs/inode/mkdir.c b/src/kernel/fs/vfs/inode/mkdir.c index 956555e..b8209c5 100644 --- a/src/kernel/fs/vfs/inode/mkdir.c +++ b/src/kernel/fs/vfs/inode/mkdir.c @@ -1,7 +1,7 @@ #include #include #include -#include +#include /* vfs_mkdir() - Attempts to create a directory named pathname */ int vfs_mkdir(const char *pathname, mode_t mode) diff --git a/src/kernel/fs/vfs/inode/mknod.c b/src/kernel/fs/vfs/inode/mknod.c index b1c3a64..89a073a 100644 --- a/src/kernel/fs/vfs/inode/mknod.c +++ b/src/kernel/fs/vfs/inode/mknod.c @@ -1,6 +1,6 @@ #include #include -#include +#include /* gevice_get() - Find internal device */ struct device *device_get(dev_t major) diff --git a/src/kernel/fs/vfs/superblock/mount.c b/src/kernel/fs/vfs/superblock/mount.c index 1c1c2c6..7b454ca 100644 --- a/src/kernel/fs/vfs/superblock/mount.c +++ b/src/kernel/fs/vfs/superblock/mount.c @@ -1,6 +1,7 @@ #include #include -#include +#include +#include #include // Internal informations diff --git a/src/kernel/hardware/t6k11/variant.c b/src/kernel/hardware/t6k11/variant.c index d5fb4ed..93e2ebc 100644 --- a/src/kernel/hardware/t6k11/variant.c +++ b/src/kernel/hardware/t6k11/variant.c @@ -1,5 +1,4 @@ -#include -#include +#include // Internal symbols static volatile uint8_t *sel = (void *)0xb4000000; diff --git a/src/kernel/hardware/tmu/handler.c b/src/kernel/hardware/tmu/handler.c index 3eafc74..ce50c06 100644 --- a/src/kernel/hardware/tmu/handler.c +++ b/src/kernel/hardware/tmu/handler.c @@ -1,10 +1,10 @@ #include -#include +#include void timer_handler(void) { extern struct timer_cache_s timercache[TIMER_NUMBER]; - static uint32_t counter = 0; + //static uint32_t counter = 0; uint32_t intevt; int timer_ID; diff --git a/src/kernel/hardware/ubc/handler.c b/src/kernel/hardware/ubc/handler.c index c5b74ad..2644c8f 100644 --- a/src/kernel/hardware/ubc/handler.c +++ b/src/kernel/hardware/ubc/handler.c @@ -2,7 +2,7 @@ #include #include #include -#include +#include // Internal function. diff --git a/src/kernel/hardware/vbr/exception.c b/src/kernel/hardware/vbr/exception.c index d7cea0c..2cbf253 100644 --- a/src/kernel/hardware/vbr/exception.c +++ b/src/kernel/hardware/vbr/exception.c @@ -1,4 +1,4 @@ -#include +#include void exception_handler(void) { diff --git a/src/kernel/hardware/vbr/exception_pre.s b/src/kernel/hardware/vbr/exception_pre.s index 6e5ec5c..2d5beee 100644 --- a/src/kernel/hardware/vbr/exception_pre.s +++ b/src/kernel/hardware/vbr/exception_pre.s @@ -37,7 +37,7 @@ kernel_stack_switch_end: bt trapa_entry ! ...if yes, jump at ! Call high-level abstraction - mov.l .exception_handler, r0 ! get high-level aception abstraction + mov.l .exception_handler, r0 ! get high-level exception abstraction jsr @r0 ! call abstraction nop ! (db) nop bra exception_handler_exit ! jump at @@ -45,7 +45,7 @@ kernel_stack_switch_end: trapa_entry: ! Check current process - tst r2, r2 ! if current process == NULL... + tst r8, r8 ! if current process == NULL... bt exception_handler_exit ! ...if yes, jump at ! Call syscall pre handler diff --git a/src/kernel/hardware/vbr/interrupt.c b/src/kernel/hardware/vbr/interrupt.c index 2b3e119..240256d 100644 --- a/src/kernel/hardware/vbr/interrupt.c +++ b/src/kernel/hardware/vbr/interrupt.c @@ -1,4 +1,4 @@ -#include +#include // Handler prototype. extern void keysc_handler(void); diff --git a/src/kernel/hardware/vbr/tlb.c b/src/kernel/hardware/vbr/tlb.c index 478544b..19d86ec 100644 --- a/src/kernel/hardware/vbr/tlb.c +++ b/src/kernel/hardware/vbr/tlb.c @@ -1,4 +1,4 @@ -#include +#include __attribute__((section(".vhex.tlb"), interrupt_handler)) void tlb_handler(void) diff --git a/src/kernel/loader/entry.c b/src/kernel/loader/entry.c index 3c938f5..e22b86b 100644 --- a/src/kernel/loader/entry.c +++ b/src/kernel/loader/entry.c @@ -1,8 +1,8 @@ #include #include #include -#include -#include +#include +#include void *loader(const char *path, struct process *process) { diff --git a/src/kernel/loader/header.c b/src/kernel/loader/header.c index 48d54f6..ae6ac7f 100644 --- a/src/kernel/loader/header.c +++ b/src/kernel/loader/header.c @@ -1,7 +1,5 @@ #include #include -#include -#include /* loader_get_header() - get ELF header and check validity */ int loader_get_header(FILE *file, Elf32_Ehdr *header) diff --git a/src/kernel/loader/image.c b/src/kernel/loader/image.c index 554a7fc..a7ed517 100644 --- a/src/kernel/loader/image.c +++ b/src/kernel/loader/image.c @@ -1,8 +1,7 @@ #include #include #include -#include -#include +#include /* loader_load_image() - Load the program into Virtual Memory */ void *loader_load_image(FILE *file, Elf32_Ehdr *header, struct process *process) diff --git a/src/kernel/memory/pm_free.c b/src/kernel/memory/pm_free.c index 77f69c3..ca0a612 100644 --- a/src/kernel/memory/pm_free.c +++ b/src/kernel/memory/pm_free.c @@ -1,5 +1,5 @@ #include -#include +#include void pm_free(void *ptr) { diff --git a/src/kernel/scheduler/add_task.c b/src/kernel/scheduler/add_task.c index 78b45d3..48e1d19 100644 --- a/src/kernel/scheduler/add_task.c +++ b/src/kernel/scheduler/add_task.c @@ -1,5 +1,5 @@ #include -#include +#include static struct sched_task *sched_alloc(void) { diff --git a/src/kernel/scheduler/debug.c b/src/kernel/scheduler/debug.c index 2a18839..d752f6b 100644 --- a/src/kernel/scheduler/debug.c +++ b/src/kernel/scheduler/debug.c @@ -1,6 +1,6 @@ #include #include -#include +#include // Test uint32_t counter = 0; diff --git a/src/kernel/scheduler/handler.S b/src/kernel/scheduler/handler.S index 69c7bb0..8e26dca 100644 --- a/src/kernel/scheduler/handler.S +++ b/src/kernel/scheduler/handler.S @@ -66,10 +66,6 @@ get_contexts: mov r15, r8 ! save first context pointer add #-4, r15 ! create second context pointer mov r15, r9 ! save second context pointer - add #-4, r15 ! create context pointer - mov.l r15, @r8 ! save context pointer - add #-4, r15 ! create context pointer - mov.l r15, @r9 ! save context pointer ! call high level abstraction mov r8, r4 ! send current contexts pointer @@ -81,7 +77,7 @@ get_contexts: ! Restore stack and register (epilogue) mov.l @r8, r4 ! save current context mov.l @r9, r5 ! save next context - add #16, r15 ! restore stack + add #8, r15 ! restore stack lds.l @r15+, pr ! restore pr register mov.l @r15+, r8 ! restore r8 register mov.l @r15+, r9 ! restore r9 register diff --git a/src/kernel/scheduler/process/create.c b/src/kernel/scheduler/process/create.c index 54a036f..5b2a158 100644 --- a/src/kernel/scheduler/process/create.c +++ b/src/kernel/scheduler/process/create.c @@ -1,7 +1,8 @@ #include -#include +#include #include -#include +#include +#include struct process *process_create(const char *name) { diff --git a/src/kernel/scheduler/schedule.c b/src/kernel/scheduler/schedule.c index fa618bf..819663b 100644 --- a/src/kernel/scheduler/schedule.c +++ b/src/kernel/scheduler/schedule.c @@ -1,6 +1,4 @@ #include -#include -#include //TODO: assembly ! // @note: This part *SHOULD* be exeption safe ! diff --git a/src/kernel/scheduler/start.c b/src/kernel/scheduler/start.c index d983b41..dc8ec8d 100644 --- a/src/kernel/scheduler/start.c +++ b/src/kernel/scheduler/start.c @@ -1,7 +1,8 @@ #include #include #include -#include +#include +#include // Internal data used by the scheduler handler uint32_t sched_timer_id = 0; @@ -92,7 +93,7 @@ void sched_start(void) // Setup TMU0 (scheduler) interrupt ! // @note: I use Po/4 on TMU prescaler // TODO: generate quantum and quantum counter for preemption ! - uint32_t ticks = (per_freq / 4) / 16; + uint32_t ticks = (per_freq / 4) / 32; sched_timer_id = timer_install(NULL, NULL, ticks, 0); sched_timer_address = (uint32_t)&SH7305_TMU.TIMER[sched_timer_id].TCR; sched_timer_intevt = 0x400 + (0x20 * sched_timer_id); diff --git a/src/kernel/scheduler/syscall/sys_exit.c b/src/kernel/scheduler/syscall/sys_exit.c index affe2a5..0fdd59f 100644 --- a/src/kernel/scheduler/syscall/sys_exit.c +++ b/src/kernel/scheduler/syscall/sys_exit.c @@ -1,5 +1,5 @@ #include -#include +#include void sys_exit(int status) { diff --git a/src/kernel/scheduler/syscall/sys_fexecve.c b/src/kernel/scheduler/syscall/sys_fexecve.c index e79095a..91aa681 100644 --- a/src/kernel/scheduler/syscall/sys_fexecve.c +++ b/src/kernel/scheduler/syscall/sys_fexecve.c @@ -1,14 +1,13 @@ #include #include #include -#include -#include +#include +#include pid_t sys_fexecve(const char *pathname) { struct process *proc; pid_t child_pid; - FILE *bin; int error; // Start atomic operation diff --git a/src/kernel/syscall/handler.c b/src/kernel/syscall/handler.c index 19651e5..0778892 100644 --- a/src/kernel/syscall/handler.c +++ b/src/kernel/syscall/handler.c @@ -1,5 +1,5 @@ #include -#include +#include static void sys_test(uint32_t a, uint32_t b, uint32_t c, uint32_t d) { @@ -42,7 +42,7 @@ void *sys_get_handler(int sysno) { // Check sysno validity if (sysno < 0 || sysno >= 16) - return (0); + return (NULL); // DEBUG /*kvram_clear(); diff --git a/src/kernel/syscall/syscall_pre.s b/src/kernel/syscall/syscall_pre.s index af4dfab..9891376 100644 --- a/src/kernel/syscall/syscall_pre.s +++ b/src/kernel/syscall/syscall_pre.s @@ -24,6 +24,12 @@ _syscall_pre: bt.s syscall_pre_exit ! ...if yes, jump at mov r0, r9 ! save kernel handler into unbankable register + ! We should restore the user stack + mov.l .process_current, r10 ! get current_process adress + mov.l @r10, r10 ! get current process + mov.l r15, @r10 ! save current kernel stack + mov.l @(4, r10), r15 ! restore user stack + ! Get and save SR register stc sr, r0 ! get SR register mov r0, r8 ! save SR register @@ -36,22 +42,17 @@ _syscall_pre: and r1, r0 ! set SR.BL = 0, SR.RB = 0 and SR.IMASK = 0b0000 ldc r0, sr ! update SR regsiter - ! We should restore the user stack - mov.l .process_current, r10 ! get current_process adress - mov.l @r10, r10 ! get current process - mov.l r15, @r10 ! save current kernel stack - mov.l @(4, r10), r15 ! restore user stack - ! Call kernel abstraction jsr @r9 ! call system handler nop ! (db) nop. + ! Restore SR regsiter + ldc r8, sr ! SR.BL = 1, SR.RB = 1 and SR.IMASK = old mask. + ! Switch stack mov.l r15, @(4, r10) ! save user stack mov.l @r10, r15 ! restore kernel stack - ! Restore SR regsiter - ldc r8, sr ! SR.BL = 1, SR.RB = 1 and SR.IMASK = old mask. syscall_pre_exit: ! Restore used regsiter. diff --git a/src/kernel/syscall/test.S b/src/kernel/syscall/test.S deleted file mode 100644 index 0d15d8d..0000000 --- a/src/kernel/syscall/test.S +++ /dev/null @@ -1,7 +0,0 @@ -.global _dtest - -.align 2 -_dtest: - trapa #0 - rts - nop diff --git a/src/kernel/test.c b/src/kernel/test.c index 6f529ec..d5e309c 100644 --- a/src/kernel/test.c +++ b/src/kernel/test.c @@ -1,13 +1,13 @@ #include #include #include -#include +#include +#include +#include // Tree-wrapper static void vfs_test(struct dentry *node, int level) { - int curr_line; - // Check error. if (node == NULL) return; @@ -29,7 +29,6 @@ void kernel_test(void) { extern struct dentry *vfs_root_node; char path[] = "/../dev/./../dev/////tty"; - void *test; FILE file; // Debug ! diff --git a/src/kernel/util/atomic.s b/src/kernel/util/atomic/atomic.s similarity index 96% rename from src/kernel/util/atomic.s rename to src/kernel/util/atomic/atomic.s index 16df0fb..a5ab28b 100644 --- a/src/kernel/util/atomic.s +++ b/src/kernel/util/atomic/atomic.s @@ -12,7 +12,6 @@ .extern _atomic_counter .align 2 -/*TODO: Fix reentrace corruption !!!*/ /* ** @proto: uint32_t atomic_start(void) ** @return: @@ -46,7 +45,6 @@ atomic_start_exit: rts ! exit. nop ! (db) nop. -/*TODO: Fix reentrace corruption !!!*/ /* ** @proto: uint32_t atomic_stop(void) ** @return: diff --git a/src/kernel/util/syscall.s b/src/kernel/util/casio/syscall.s similarity index 100% rename from src/kernel/util/syscall.s rename to src/kernel/util/casio/syscall.s diff --git a/src/kernel/util/font.c b/src/kernel/util/draw/ascii.c similarity index 96% rename from src/kernel/util/font.c rename to src/kernel/util/draw/ascii.c index ff7dc1b..24100ba 100644 --- a/src/kernel/util/font.c +++ b/src/kernel/util/draw/ascii.c @@ -1,6 +1,6 @@ -#include +#include #include -#include +#include // Font bitmap. static const uint8_t kernel_font_bitmap[] = { @@ -37,7 +37,6 @@ static const uint8_t kernel_font_bitmap[] = { 0x92, 0xa9, 0x39, 0x93, 0x03, 0x80 }; - static void font_draw_core(struct font_block_s *fblock) { extern uint32_t vram[256]; @@ -89,7 +88,8 @@ static void font_draw_core(struct font_block_s *fblock) } -void font_draw(int x, int y, char c) +/* kvram_ascii() - Draw ASCII character into Video RAM */ +void kvram_ascii(int x, int y, char const c) { struct font_block_s fblock; diff --git a/src/kernel/util/draw/clear.c b/src/kernel/util/draw/clear.c new file mode 100644 index 0000000..52e7e24 --- /dev/null +++ b/src/kernel/util/draw/clear.c @@ -0,0 +1,27 @@ +#include +#include +#include + +// Internal Video RAM +uint32_t vram[256]; + +/* kvram_clear() - Wipe the Video RAM */ +void kvram_clear(void) +{ + int i; + + // The Video RAM is shared between each + // process and the kernel, so we should + // use atomic operation when we use it. + atomic_start(); + + // Wipe Video RAM + // @note: here, we suppose that the VRAM is + // 4-aligned + i = 256; + while (--i >= 0) + vram[i] = 0x00000000; + + // End of atomic operation + atomic_stop(); +} diff --git a/src/kernel/util/draw/clr_str_area.c b/src/kernel/util/draw/clr_str_area.c new file mode 100644 index 0000000..fe1d238 --- /dev/null +++ b/src/kernel/util/draw/clr_str_area.c @@ -0,0 +1,43 @@ +//#include +//#include +//#include + +/* kvram_clr_str_area() - Clear area based on kernel font size on Video RAM */ +//FIXME: secure (DO NOT USE IT !!!!!!) +/*void kvram_clr_str_area(int x, int y, int width, int height) +{ + uint32_t vram_offset_y; + int cur_x; + int cur_y; + + // Initialize part + x = x * (KERNEL_FONT_REAL_WIDTH + 1); + y = y * (KERNEL_FONT_REAL_HEIGHT + 1); + width = width * (KERNEL_FONT_REAL_WIDTH + 1); + height = height * (KERNEL_FONT_REAL_HEIGHT + 1); + + // Get VRAM offset + vram_offset_y = y << 2; + + // Start atomic operations + atomic_start(); + + // Clear area, pixel per pixel x____x + // TODO: update me !!!! + cur_y = -1; + while (++cur_y < height) + { + cur_x = -1; + while (++cur_x < width) + { + vram[((x + cur_x) >> 5) + vram_offset_y] &= + ~(0x80000000 >> ((x + cur_x) & 31)); + } + + // update internal counter + vram_offset_y = vram_offset_y + 4; + } + + // Stop atomic operations + atomic_stop(); +}*/ diff --git a/src/kernel/util/draw/display.c b/src/kernel/util/draw/display.c new file mode 100644 index 0000000..6f887af --- /dev/null +++ b/src/kernel/util/draw/display.c @@ -0,0 +1,16 @@ +#include + +/* kvram_display() - Disaplay Video RAM into screen */ +void kvram_display(void) +{ + extern void t6k11_variant_lcd_driver(void *vram); + extern void t6k11_lcd_driver(void *vram); + extern uint32_t vram[256]; + + //TODO: handle screen hadware ! + //TODO: load dynamically screen driver during the boot + if (*(uint8_t*)0xa0010021 == '3') + t6k11_variant_lcd_driver((void*)vram); + else + t6k11_lcd_driver(vram); +} diff --git a/src/kernel/util/draw/reverse.c b/src/kernel/util/draw/reverse.c new file mode 100644 index 0000000..126aa2e --- /dev/null +++ b/src/kernel/util/draw/reverse.c @@ -0,0 +1,70 @@ +#include +#include +#include + +/* kvram_reverse() - Reverse Video RAM area */ +void kvram_reverse(int x, int y, int width, int height) +{ + extern uint32_t vram[256]; + int vram_offset_y; + int j; + + // Check error. + if (width < 0 || height < 0) + return; + + // Get "real" X position and area width. + if (x < 0) + { + width = width + x; + x = 0; + } else { + if (x + width >= DISPLAY_SCREEN_WIDTH) + width = DISPLAY_SCREEN_WIDTH - x; + } + + // Get "real" Y position and area height. + if (y < 0) + { + height = height + x; + y = 0; + } else { + if (y + height >= DISPLAY_SCREEN_HEIGHT) + height = DISPLAY_SCREEN_HEIGHT - x; + } + + // Check potential error. + // @note we do not check height because the while() + // while do the job for us. + if (width < 0) + return; + + // Generate VRAM offset for Y axis. + // @note: + // The screen width size is always 128 and we + // use 4-aligned Video RAM so 32 pixels per "slot" + // and 128 / 32 = 4. + // y * 4 can be optimised by used shift operator, + // this is why we use y << 2 because 2^2 = 4. + vram_offset_y = (y + height - 1) << 2; + + + // The Video RAM is sheared between each + // process and the kernel, so we should + // use atomic operation when we use it. + atomic_start(); + + // Reverse area + while (--height >= 0) + { + j = width + x; + while (--j >= x) + { + vram[(j >> 5) + vram_offset_y] ^= 0x80000000 >> (j & 31); + } + vram_offset_y = vram_offset_y - 4; + } + + // End of atomic operation + atomic_stop(); +} diff --git a/src/kernel/util/draw/scroll.c b/src/kernel/util/draw/scroll.c new file mode 100644 index 0000000..f9aade5 --- /dev/null +++ b/src/kernel/util/draw/scroll.c @@ -0,0 +1,38 @@ +#include +#include + +/* kvram_scroll() - Scroll up the Video RAM */ +//FIXME: This part is hardware specific (128x64px)!! +void kvram_scroll(int lines) +{ + extern uint32_t vram[256]; + int i; + + // The Video RAM is shared between each + // process and the kernel, so we should + // use atomic operation when we use it. + atomic_start(); + + // Scoll n lines + i = 0; + while ((i >> 2) < 63 - lines) + { + vram[i + 0] = vram[i + (lines << 2) + 0]; + vram[i + 1] = vram[i + (lines << 2) + 1]; + vram[i + 2] = vram[i + (lines << 2) + 2]; + vram[i + 3] = vram[i + (lines << 2) + 3]; + i = i + 4; + } + // Clear last n lines + while ((i >> 2) < 64) + { + vram[i + 0] = 0x00000000; + vram[i + 1] = 0x00000000; + vram[i + 2] = 0x00000000; + vram[i + 3] = 0x00000000; + i = i + 4; + } + + // End of atomic operation + atomic_stop(); +} diff --git a/src/kernel/util/dbr.s b/src/kernel/util/extra/dbr.s similarity index 100% rename from src/kernel/util/dbr.s rename to src/kernel/util/extra/dbr.s diff --git a/src/kernel/util/extra.s b/src/kernel/util/extra/icbi.s similarity index 92% rename from src/kernel/util/extra.s rename to src/kernel/util/extra/icbi.s index 4c6f95a..6227b10 100644 --- a/src/kernel/util/extra.s +++ b/src/kernel/util/extra/icbi.s @@ -1,5 +1,5 @@ +.text .global _icbi - .type _icbi, @function .align 2 @@ -7,3 +7,4 @@ _icbi: .word 0b0000010011100011 ! SH4 intstruction "icbi @r4" rts ! exit nop ! (db) nop. +.end diff --git a/src/kernel/util/vbr.s b/src/kernel/util/extra/vbr.s similarity index 100% rename from src/kernel/util/vbr.s rename to src/kernel/util/extra/vbr.s diff --git a/src/kernel/util/kvram.c b/src/kernel/util/kvram.c deleted file mode 100644 index 9d675fe..0000000 --- a/src/kernel/util/kvram.c +++ /dev/null @@ -1,194 +0,0 @@ -#include -#include -#include - -// Internal Video RAM -uint32_t vram[256]; - -/* kvram_clear() - Wipe the Video RAM */ -void kvram_clear(void) -{ - int i; - - // The Video RAM is shared between each - // process and the kernel, so we should - // use atomic operation when we use it. - atomic_start(); - - // Wipe Video RAM - // @note: here, we suppose that the VRAM is - // 4-aligned - i = 256; - while (--i >= 0) - vram[i] = 0x00000000; - - // End of atomic operation - atomic_stop(); -} - -/* kvram_display() - Disaplay Video RAM into screen */ -void kvram_display(void) -{ - //TODO: handle screen hadware ! - //TODO: load dynamically screen driver during the boot - if (*(uint8_t*)0xa0010021 == '3') - t6k11_variant_lcd_driver((void*)vram); - else - t6k11_lcd_driver(vram); -} - -/* kvram_scroll() - Scroll up the Video RAM */ -void kvram_scroll(int lines) -{ - int i; - - // The Video RAM is shared between each - // process and the kernel, so we should - // use atomic operation when we use it. - atomic_start(); - - // Scoll n lines - i = 0; - while ((i >> 2) < 63 - lines) - { - vram[i + 0] = vram[i + (lines << 2) + 0]; - vram[i + 1] = vram[i + (lines << 2) + 1]; - vram[i + 2] = vram[i + (lines << 2) + 2]; - vram[i + 3] = vram[i + (lines << 2) + 3]; - i = i + 4; - } - // Clear last n lines - while ((i >> 2) < 64) - { - vram[i + 0] = 0x00000000; - vram[i + 1] = 0x00000000; - vram[i + 2] = 0x00000000; - vram[i + 3] = 0x00000000; - i = i + 4; - } - - // End of atomic operation - atomic_stop(); -} - -/* kvram_reverse() - Reverse Video RAM area */ -void kvram_reverse(int x, int y, int width, int height) -{ - int vram_offset_y; - int j; - - // Check error. - if (width < 0 || height < 0) - return; - - // Get "real" X position and area width. - if (x < 0) - { - width = width + x; - x = 0; - } else { - if (x + width >= DISPLAY_SCREEN_WIDTH) - width = DISPLAY_SCREEN_WIDTH - x; - } - - // Get "real" Y position and area height. - if (y < 0) - { - height = height + x; - y = 0; - } else { - if (y + height >= DISPLAY_SCREEN_HEIGHT) - height = DISPLAY_SCREEN_HEIGHT - x; - } - - // Check potential error. - // @note we do not check height because the while() - // while do the job for us. - if (width < 0) - return; - - // Generate VRAM offset for Y axis. - // @note: - // The screen width size is always 128 and we - // use 4-aligned Video RAM so 32 pixels per "slot" - // and 128 / 32 = 4. - // y * 4 can be optimised by used shift operator, - // this is why we use y << 2 because 2^2 = 4. - vram_offset_y = (y + height - 1) << 2; - - - // The Video RAM is sheared between each - // process and the kernel, so we should - // use atomic operation when we use it. - atomic_start(); - - // Reverse area - while (--height >= 0) - { - j = width + x; - while (--j >= x) - { - vram[(j >> 5) + vram_offset_y] ^= 0x80000000 >> (j & 31); - } - vram_offset_y = vram_offset_y - 4; - } - - // End of atomic operation - atomic_stop(); -} - -/* kvram_clr_str_area() - Clear area based on kernel font size on Video RAM */ -//FIXME: secure -void kvram_clr_str_area(int x, int y, int width, int height) -{ - uint32_t vram_offset_y; - int cur_x; - int cur_y; - - // Initialize part - x = x * (KERNEL_FONT_REAL_WIDTH + 1); - y = y * (KERNEL_FONT_REAL_HEIGHT + 1); - width = width * (KERNEL_FONT_REAL_WIDTH + 1); - height = height * (KERNEL_FONT_REAL_HEIGHT + 1); - - // Get VRAM offset - vram_offset_y = y << 2; - - // Start atomic operations - atomic_start(); - - //DEbug - /*kvram_clear(); - printk(0, 0, "kvram_clr_str_area debug !"); - printk(0, 1, "x = %d", x); - printk(0, 2, "y = %d", y); - printk(0, 3, "width = %d", width); - printk(0, 4, "height = %d", height); - kvram_display(); - DBG_WAIT;*/ - - // Clear area, pixel per pixel x____x - // TODO: update me !!!! - cur_y = -1; - while (++cur_y < height) - { - cur_x = -1; - while (++cur_x < width) - { - vram[((x + cur_x) >> 5) + vram_offset_y] &= - ~(0x80000000 >> ((x + cur_x) & 31)); - } - - // update internal counter - vram_offset_y = vram_offset_y + 4; - } - - // Stop atomic operations - atomic_start(); -} - -/* kvram_ascii() - Draw ASCII character into Video RAM */ -void kvram_ascii(int x, int y, char const c) -{ - font_draw(x, y, c); -} diff --git a/src/kernel/util/printk.c b/src/kernel/util/printk.c deleted file mode 100644 index 5b84b0d..0000000 --- a/src/kernel/util/printk.c +++ /dev/null @@ -1,136 +0,0 @@ -#include -#include -#include - -void printk(int x, int y, char const *str, ...) -{ - char hex[] = "0123456789abcdef"; - char buffer[16]; - int default_pos_x; - int starting_x; - int digits; - int32_t nb; - uint8_t base; - va_list ap; - int i; - - // Get starting variable args - va_start(ap, str); - - // Initialize part - i = -1; - starting_x = x; - x = x * (KERNEL_FONT_REAL_WIDTH + 1); - y = y * (KERNEL_FONT_REAL_HEIGHT + 1); - default_pos_x = x; - - // Walk into string and display character by character - while (str[++i] != '\0') - { - // New line - if (str[i] == '\n') - { - y = y + KERNEL_FONT_REAL_HEIGHT + 1; - x = default_pos_x; - continue; - } - // Horizontal tab - if (str[i] == '\t') - { - x = x / (KERNEL_FONT_REAL_WIDTH + 1); - x = (x + (4 - ((x - starting_x) & 3))) * (KERNEL_FONT_REAL_WIDTH + 1); - continue; - } - // String format "simple" - if (str[i] == '%') - { - if (str[i + 1] == 'd' || str[i + 1] == 'x') - { - // Initialise - digits = 0; - nb = va_arg(ap, int32_t); - base = (str[i + 1] == 'd') ? 10 : 16; - - // Check negative value - // FIXME: negative error (max) - if (nb < 0 && str[i + 1] == 'd') - { - nb = 0 - nb; - font_draw(x, y, '-'); - x = x + KERNEL_FONT_REAL_WIDTH + 1; - } - - // Generate buffer - // @note: generate in LSB mode. - while (digits == 0 || nb != 0) - { - buffer[digits++] = hex[nb % base]; - nb = nb / base; - } - - // Reverse dans display string - while (--digits >= 0) - { - font_draw(x, y, buffer[digits]); - x = x + KERNEL_FONT_REAL_WIDTH + 1; - } - i = i + 1; - continue; - } - if ((str[i + 1] == '#' && str[i + 2] == 'x') || str[i + 1] == 'p') - { - // add @ if 'p' (pointer) - if (str[i + 1] == 'p') - { - font_draw(x, y, '@'); - x = x + KERNEL_FONT_REAL_WIDTH + 1; - } - - // Add "0x" - font_draw(x, y, '0'); - x = x + KERNEL_FONT_REAL_WIDTH + 1; - font_draw(x, y, 'x'); - x = x + KERNEL_FONT_REAL_WIDTH + 1; - - // Get value - digits = 0; - nb = va_arg(ap, uint32_t); - while (digits < 8) - { - buffer[digits++] = hex[nb & 0x0f]; - nb = nb >> 4; - } - - // Display string. - while (--digits >= 0) - { - font_draw(x, y, buffer[digits]); - x = x + KERNEL_FONT_REAL_WIDTH + 1; - } - - // Update cursor - i = (str[i + 1] == '#') ? i + 2 : i + 1; - continue; - } - if (str[i + 1] == 's') - { - digits = 0; - nb = va_arg(ap, uint32_t); - while (((char*)nb)[digits] != '\0') - { - font_draw(x, y, ((char*)nb)[digits++]); - x = x + KERNEL_FONT_REAL_WIDTH + 1; - } - i = i + 1; - continue; - } - } - - // Default, display character - font_draw(x, y, str[i]); - x = x + KERNEL_FONT_REAL_WIDTH + 1; - } - - // End of variodic args. - va_end(ap); -} diff --git a/src/kernel/util/string.c b/src/kernel/util/string.c deleted file mode 100644 index c6734e9..0000000 --- a/src/kernel/util/string.c +++ /dev/null @@ -1,92 +0,0 @@ -#include - -//TODO: update me :( -void *memset(void *s, int c, size_t n) -{ - while ((int)--n >= 0) - ((uint8_t*)s)[n] = c; - return (s); -} - -//TODO: update me :( -void *memcpy(void *dest, const void *src, size_t count) -{ - for (size_t i = 0 ; i < count ; i = i + 1) - ((uint8_t*)dest)[i] = ((uint8_t*)src)[i]; - return (dest); -} - -// TODO: update me :( -char *strncpy(char *dest, char const *str, size_t size) -{ - size_t i; - - if (str == NULL || dest == NULL) - return (0); - i = -1; - while (++i < size && str[i] != '\0') - dest[i] = str[i]; - dest[i] = '\0'; - return (dest); -} - -// TODO: update me :( -size_t strnlen(char const *str, size_t maxlen) -{ - size_t i; - - if (str == NULL) - return (0); - i = -1; - while (str[++i] != '\0' && (size_t)i < maxlen); - return (i); -} - -// TODO: update me :( -size_t strlen(char const *str) -{ - int i; - - if (str == NULL) - return (0); - i = -1; - while (str[++i] != '\0'); - return (i); -} - -//TODO: update me :( -int strcmp(const char *s1, const char *s2) -{ - if (s1 == NULL || s2 == NULL) - return (0); - while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2) - { - s1 += 1; - s2 += 1; - } - return (*s1 - *s2); -} - -//TODO: update me :( -int strncmp(const char *s1, const char *s2, size_t n) -{ - if (s1 == NULL || s2 == NULL) - return (0); - size_t i = -1; - while (++i < n && s1[i] != '\0' && s2[i] != '\0' && s1[i] == s2[i]); - return (s1[i] - s2[i]); -} - -//TODO asm ? -char *strrchr(const char *s1, int c) -{ - void *saved; - - saved = NULL; - for (int i = 0 ; s1[i] != '\0' ; i++) - { - if (s1[i] == (char)c) - saved = (void *)&s1[i]; - } - return (saved); -} diff --git a/src/kernel/util/string/memcpy.c b/src/kernel/util/string/memcpy.c new file mode 100644 index 0000000..2275433 --- /dev/null +++ b/src/kernel/util/string/memcpy.c @@ -0,0 +1,9 @@ +#include + +//TODO: update me !! +void *memcpy(void *dest, const void *src, size_t count) +{ + for (size_t i = 0 ; i < count ; i = i + 1) + ((uint8_t*)dest)[i] = ((uint8_t*)src)[i]; + return (dest); +} diff --git a/src/kernel/util/string/memset.c b/src/kernel/util/string/memset.c new file mode 100644 index 0000000..3695278 --- /dev/null +++ b/src/kernel/util/string/memset.c @@ -0,0 +1,9 @@ +#include + +//TODO: update me :( +void *memset(void *s, int c, size_t n) +{ + while ((int)--n >= 0) + ((uint8_t*)s)[n] = c; + return (s); +} diff --git a/src/kernel/util/string/strcat.c b/src/kernel/util/string/strcat.c new file mode 100644 index 0000000..d6f0b49 --- /dev/null +++ b/src/kernel/util/string/strcat.c @@ -0,0 +1,17 @@ +#include + +char *strcat(char *dest, char const *src) +{ + size_t i; + size_t start; + + if (src == NULL || dest == NULL) + return (0); + i = -1; + start = -1; + while (dest[++start] != '\0'); + while (src[++i] != '\0') + dest[start + i] = src[i]; + dest[i + start] = '\0'; + return (dest); +} diff --git a/src/kernel/util/string/strchr.c b/src/kernel/util/string/strchr.c new file mode 100644 index 0000000..e1cf8e2 --- /dev/null +++ b/src/kernel/util/string/strchr.c @@ -0,0 +1,31 @@ +#include + +//TODO: asm ? +char *strchr(const char *s1, int c) +{ + int i = -1; + while (s1[++i] != '\0' && s1[i] != c); + return ((s1[i] == '\0') ? NULL : (void*)&s1[i]); +} + +//TODO: asm ? +char *strchrnul(const char *s1, int c) +{ + int i = -1; + while (s1[++i] != '\0' && s1[i] != c); + return ((void*)&s1[i]); +} + +//TODO asm ? +char *strrchr(const char *s1, int c) +{ + void *saved; + + saved = NULL; + for (int i = 0 ; s1[i] != '\0' ; i++) + { + if (s1[i] == c) + saved = (void *)&s1[i]; + } + return (saved); +} diff --git a/src/kernel/util/string/strcmp.c b/src/kernel/util/string/strcmp.c new file mode 100644 index 0000000..5fa9cd7 --- /dev/null +++ b/src/kernel/util/string/strcmp.c @@ -0,0 +1,13 @@ +#include + +int strcmp(const char *s1, const char *s2) +{ + if (s1 == NULL || s2 == NULL) + return (0); + while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2) + { + s1 += 1; + s2 += 1; + } + return (*s1 - *s2); +} diff --git a/src/kernel/util/string/strcpy.c b/src/kernel/util/string/strcpy.c new file mode 100644 index 0000000..cbdf92d --- /dev/null +++ b/src/kernel/util/string/strcpy.c @@ -0,0 +1,27 @@ +#include + +char *strcpy(char *dest, char const *src) +{ + size_t i; + + if (src == NULL || dest == NULL) + return (0); + i = -1; + while (src[++i] != '\0') + dest[i] = src[i]; + dest[i] = '\0'; + return (dest); +} + +char *strncpy(char *dest, char const *str, size_t size) +{ + size_t i; + + if (str == NULL || dest == NULL) + return (0); + i = -1; + while (++i < size && str[i] != '\0') + dest[i] = str[i]; + dest[i] = '\0'; + return (dest); +} diff --git a/src/kernel/util/string/strlen.c b/src/kernel/util/string/strlen.c new file mode 100644 index 0000000..17248b8 --- /dev/null +++ b/src/kernel/util/string/strlen.c @@ -0,0 +1,23 @@ +#include + +size_t strlen(char const *str) +{ + size_t i; + + if (str == NULL) + return (0); + i = -1; + while (str[++i] != '\0'); + return (i); +} + +size_t strnlen(char const *str, size_t maxlen) +{ + size_t i; + + if (str == NULL) + return (0); + i = -1; + while (str[++i] != '\0' && (size_t)i < maxlen); + return (i); +} diff --git a/src/kernel/util/timer.c b/src/kernel/util/timer.c deleted file mode 100644 index 15f0682..0000000 --- a/src/kernel/util/timer.c +++ /dev/null @@ -1,132 +0,0 @@ -#include -#include -#include - -// Internal timer "cache". -struct timer_cache_s timercache[TIMER_NUMBER]; - -__attribute__((constructor)) -void timer_constructor(void) -{ - // Initialise internal cache - for (int i = 0 ; i < TIMER_NUMBER ; i = i + 1) - { - timercache[i].status = TIMER_UNUSED; - timercache[i].callback = NULL; - timercache[i].arg = NULL; - } - - // Configure TMU - SH7305_TMU.TSTR.STR0 = 0; // Stop timer 0 - SH7305_TMU.TSTR.STR1 = 0; // Stop timer 1 - SH7305_TMU.TSTR.STR2 = 0; // Stop timer 2 - - // Configure TMU timers - for (int i = 0 ; i < 3 ; ++i) - { - SH7305_TMU.TIMER[i].TCOR = 0xffffffff; // Reset timer constant register - SH7305_TMU.TIMER[i].TCNT = 0xffffffff; // Reset timer counter - SH7305_TMU.TIMER[i].TCR.UNF = 0; // Clear interrupt flags - SH7305_TMU.TIMER[i].TCR.UNIE = 0; // Disable timerinterrupt - SH7305_TMU.TIMER[i].TCR.CKREG = 0b00; // Count on rising edge - SH7305_TMU.TIMER[i].TCR.TPSC = 0b000; // Select P/4 prescaler - } -} - -int timer_install(void *callback, void *arg, uint32_t ticks, uint8_t mode) -{ - extern struct timer_cache_s timercache[TIMER_NUMBER]; - int timer_ID; - - // Do atomic operation because of - // sheared timer cache. - atomic_start(); - - // Find free timer. - timer_ID = -1; - while (++timer_ID < TIMER_NUMBER && - timercache[timer_ID].status != TIMER_UNUSED); - if (timer_ID >= TIMER_NUMBER) - return (-1); - - // Debug !! - /*kvram_clear(); - printk(0, 0, "Timer find: %d\n", timer_ID); - printk(0, 1, "TMU = %p\n", &SH7305_TMU.TIMER[timer_ID]); - kvram_display(); - DBG_WAIT;*/ - - // Initialise internal timer data. - timercache[timer_ID].callback = callback; - timercache[timer_ID].status = mode; - timercache[timer_ID].arg = arg; - - // Initialise hardware module. - SH7305_TMU.TSTR.BYTE &= ~(1 << timer_ID); // Stop timer. - - // Setup Timer - SH7305_TMU.TIMER[timer_ID].TCOR = ticks; - SH7305_TMU.TIMER[timer_ID].TCNT = ticks; - - // Configure timer - SH7305_TMU.TIMER[timer_ID].TCR.UNF = 0; // Clear interrupt flag. - SH7305_TMU.TIMER[timer_ID].TCR.UNIE = 1; // Enable interrupt. - - // Start timer if needed. - if (mode & 1) - SH7305_TMU.TSTR.BYTE |= 1 << timer_ID; - - // End of atomic operations. - // and return the timer ID. - atomic_stop(); - return (timer_ID); -} - -int timer_uninstall(int timer_ID) -{ - extern struct timer_cache_s timercache[TIMER_NUMBER]; - - // Check bad ID - if (timer_ID < 0 || timer_ID >= TIMER_NUMBER) - return (-1); - - // Start Atomic operation. - atomic_start(); - - // Stop Hardware timer. - SH7305_TMU.TSTR.BYTE &= ~(1 << timer_ID); - - // Uninit hardware timer. - SH7305_TMU.TIMER[timer_ID].TCR.UNF = 0; // Clear interrupt flag. - SH7305_TMU.TIMER[timer_ID].TCR.UNIE = 0; // Disable interrupt. - SH7305_TMU.TIMER[timer_ID].TCOR = 0xffffffff; - SH7305_TMU.TIMER[timer_ID].TCNT = 0xffffffff; - - // Free'd timer cache. - timercache[timer_ID].status = TIMER_UNUSED; - timercache[timer_ID].callback = NULL; - timercache[timer_ID].arg = NULL; - - // Stop atomic operation and return. - atomic_stop(); - return (0); -} - -int timer_start(int timer_ID) -{ - extern struct timer_cache_s timercache[TIMER_NUMBER]; - - // Check bad ID - if (timer_ID < 0 || timer_ID >= TIMER_NUMBER) - return (-1); - - // Start Atomic operation. - atomic_start(); - - // Start hardware timer. - SH7305_TMU.TSTR.BYTE |= 1 << timer_ID; - - // Stop atomic operation and return. - atomic_stop(); - return (0); -} diff --git a/src/kernel/util/timer/constructor.c b/src/kernel/util/timer/constructor.c new file mode 100644 index 0000000..5a87373 --- /dev/null +++ b/src/kernel/util/timer/constructor.c @@ -0,0 +1,47 @@ +#include +#include +#include + +// Internal timer "cache". +struct timer_cache_s timercache[TIMER_NUMBER]; + +/* +** void timer_constructor(void) +** +** @info +** Constructor called during the bootstrap of the +** kernel. Should not be called anymore. +*/ +__attribute__((constructor)) +void timer_constructor(void) +{ + // Initialise internal cache + for (int i = 0 ; i < TIMER_NUMBER ; i = i + 1) + { + timercache[i].status = TIMER_UNUSED; + timercache[i].callback = NULL; + timercache[i].arg = NULL; + } + + // Start atomic operations + atomic_start(); + + // Configure TMU + SH7305_TMU.TSTR.STR0 = 0; // Stop timer 0 + SH7305_TMU.TSTR.STR1 = 0; // Stop timer 1 + SH7305_TMU.TSTR.STR2 = 0; // Stop timer 2 + + // Configure TMU timers + for (int i = 0 ; i < 3 ; ++i) + { + SH7305_TMU.TIMER[i].TCOR = 0xffffffff; // Reset timer constant register + SH7305_TMU.TIMER[i].TCNT = 0xffffffff; // Reset timer counter + SH7305_TMU.TIMER[i].TCR.UNF = 0; // Clear interrupt flags + SH7305_TMU.TIMER[i].TCR.UNIE = 0; // Disable timerinterrupt + SH7305_TMU.TIMER[i].TCR.CKREG = 0b00; // Count on rising edge + SH7305_TMU.TIMER[i].TCR.TPSC = 0b000; // Select P/4 prescaler + } + + // Stop atomic operations + atomic_stop(); +} diff --git a/src/kernel/util/timer/install.c b/src/kernel/util/timer/install.c new file mode 100644 index 0000000..bdc57f9 --- /dev/null +++ b/src/kernel/util/timer/install.c @@ -0,0 +1,54 @@ +#include +#include +#include + +/* +** int timer_instal(void*, void*, tmode_t) +** +** @info +** This function will try to setup an hardware timer. +*/ +int timer_install(void *callback, void *arg, uint32_t ticks, tmode_t mode) +{ + extern struct timer_cache_s timercache[TIMER_NUMBER]; + int timer_ID; + + // Do atomic operation because of + // sheared timer cache and I/O access. + atomic_start(); + + // Find free timer. + timer_ID = -1; + while (++timer_ID < TIMER_NUMBER && + timercache[timer_ID].status != TIMER_UNUSED); + if (timer_ID >= TIMER_NUMBER) + { + atomic_stop(); + return (-1); + } + + // Initialise internal timer data. + timercache[timer_ID].callback = callback; + timercache[timer_ID].status = mode; + timercache[timer_ID].arg = arg; + + // Initialise hardware module. + SH7305_TMU.TSTR.BYTE &= ~(1 << timer_ID); // Stop timer. + + // Setup Timer + SH7305_TMU.TIMER[timer_ID].TCOR = ticks; + SH7305_TMU.TIMER[timer_ID].TCNT = ticks; + + // Configure timer + SH7305_TMU.TIMER[timer_ID].TCR.UNF = 0; // Clear interrupt flag. + SH7305_TMU.TIMER[timer_ID].TCR.UNIE = 1; // Enable interrupt. + + // Start timer if needed. + if (mode == TIMER_START) + SH7305_TMU.TSTR.BYTE |= 1 << timer_ID; + + // End of atomic operations. + // and return the timer ID. + atomic_stop(); + return (timer_ID); +} diff --git a/src/kernel/util/timer/start.c b/src/kernel/util/timer/start.c new file mode 100644 index 0000000..f4f937c --- /dev/null +++ b/src/kernel/util/timer/start.c @@ -0,0 +1,28 @@ +#include +#include +#include + +/* +** int timer_start(int timer_ID) +** +** @info +** This function will try to start hardware timer. +*/ +int timer_start(int timer_ID) +{ + extern struct timer_cache_s timercache[TIMER_NUMBER]; + + // Check bad ID + if (timer_ID < 0 || timer_ID >= TIMER_NUMBER) + return (-1); + + // Start Atomic operation. + atomic_start(); + + // Start hardware timer. + SH7305_TMU.TSTR.BYTE |= 1 << timer_ID; + + // Stop atomic operation and return. + atomic_stop(); + return (0); +} diff --git a/src/kernel/util/timer/stop.c b/src/kernel/util/timer/stop.c new file mode 100644 index 0000000..7636828 --- /dev/null +++ b/src/kernel/util/timer/stop.c @@ -0,0 +1,28 @@ +#include +#include +#include + +/* +** int timer_stop(int timer_ID) +** +** @info +** This function will try to stop hardware timer. +*/ +int timer_stop(int timer_ID) +{ + extern struct timer_cache_s timercache[TIMER_NUMBER]; + + // Check bad ID + if (timer_ID < 0 || timer_ID >= TIMER_NUMBER) + return (-1); + + // Start Atomic operation. + atomic_start(); + + // Start hardware timer. + SH7305_TMU.TSTR.BYTE &= ~(1 << timer_ID); + + // Stop atomic operation and return. + atomic_stop(); + return (0); +} diff --git a/src/kernel/util/timer/uninstall.c b/src/kernel/util/timer/uninstall.c new file mode 100644 index 0000000..9ae94e0 --- /dev/null +++ b/src/kernel/util/timer/uninstall.c @@ -0,0 +1,40 @@ +#include +#include +#include + +/* +** int timer_instal(int timer_ID) +** +** @info +** This function will uninstall hardware timer. +** After this function, the timer ID should not be used. +*/ +int timer_uninstall(int timer_ID) +{ + extern struct timer_cache_s timercache[TIMER_NUMBER]; + + // Check bad ID + if (timer_ID < 0 || timer_ID >= TIMER_NUMBER) + return (-1); + + // Start Atomic operation. + atomic_start(); + + // Stop Hardware timer. + SH7305_TMU.TSTR.BYTE &= ~(1 << timer_ID); + + // Uninit hardware timer. + SH7305_TMU.TIMER[timer_ID].TCR.UNF = 0; // Clear interrupt flag. + SH7305_TMU.TIMER[timer_ID].TCR.UNIE = 0; // Disable interrupt. + SH7305_TMU.TIMER[timer_ID].TCOR = 0xffffffff; + SH7305_TMU.TIMER[timer_ID].TCNT = 0xffffffff; + + // Free'd timer cache. + timercache[timer_ID].status = TIMER_UNUSED; + timercache[timer_ID].callback = NULL; + timercache[timer_ID].arg = NULL; + + // Stop atomic operation and return. + atomic_stop(); + return (0); +} diff --git a/src/lib/display/dascii.S b/src/lib/display/dascii.S index ffce2b7..9e2daa3 100644 --- a/src/lib/display/dascii.S +++ b/src/lib/display/dascii.S @@ -1,8 +1,8 @@ +#include .text .global _dascii .type _dascii, @function -#include "kernel/unistd_32.h" .align 2 _dascii: diff --git a/src/lib/display/dclear.S b/src/lib/display/dclear.S index d6f59ef..bac78ef 100644 --- a/src/lib/display/dclear.S +++ b/src/lib/display/dclear.S @@ -1,8 +1,8 @@ +#include .text .global _dclear .type _dclear, @function -#include "kernel/unistd_32.h" .align 2 _dclear: diff --git a/src/lib/display/dclr_str_area.S b/src/lib/display/dclr_str_area.S index b62c747..e8d43bd 100644 --- a/src/lib/display/dclr_str_area.S +++ b/src/lib/display/dclr_str_area.S @@ -1,8 +1,8 @@ +#include .text .global _dclr_str_area .type _dclr_str_area, @function -#include "kernel/unistd_32.h" .align 2 _dclr_str_area: diff --git a/src/lib/display/dprint.S b/src/lib/display/dprint.S index cca047b..cb8719f 100644 --- a/src/lib/display/dprint.S +++ b/src/lib/display/dprint.S @@ -1,8 +1,8 @@ +#include "kernel/util/unistd_32.h" .text .global _dprint .type _dprint, @function -#include "kernel/unistd_32.h" .align 2 _dprint: diff --git a/src/lib/display/dreverse.S b/src/lib/display/dreverse.S index 4b84715..81781d4 100644 --- a/src/lib/display/dreverse.S +++ b/src/lib/display/dreverse.S @@ -1,8 +1,8 @@ +#include .text .global _dreverse .type _dreverse, @function -#include "kernel/unistd_32.h" .align 2 _dreverse: diff --git a/src/lib/display/dscroll.S b/src/lib/display/dscroll.S index af3a2b8..17a355e 100644 --- a/src/lib/display/dscroll.S +++ b/src/lib/display/dscroll.S @@ -1,8 +1,8 @@ +#include .text .global _dscroll .type _dscroll, @function -#include "kernel/unistd_32.h" .align 2 _dclear: diff --git a/src/lib/display/dupdate.S b/src/lib/display/dupdate.S index d7a90f5..329b975 100644 --- a/src/lib/display/dupdate.S +++ b/src/lib/display/dupdate.S @@ -1,8 +1,8 @@ +#include .text .global _dupdate .type _dupdate, @function -#include "kernel/unistd_32.h" .align 2 _dupdate: diff --git a/src/lib/unistd/close.S b/src/lib/unistd/close.S index 1c3abf9..0f767e0 100644 --- a/src/lib/unistd/close.S +++ b/src/lib/unistd/close.S @@ -1,8 +1,8 @@ +#include .text .global _close .type _close, @function -#include "kernel/unistd_32.h" .align 2 _close: diff --git a/src/lib/unistd/fexecve.S b/src/lib/unistd/fexecve.S index e70296d..fdba526 100644 --- a/src/lib/unistd/fexecve.S +++ b/src/lib/unistd/fexecve.S @@ -1,8 +1,8 @@ +#include .text .global _fexecve .type _fexecve, @function -#include "kernel/unistd_32.h" .align 2 _fexecve: diff --git a/src/lib/unistd/fork.S b/src/lib/unistd/fork.S index df2c001..59bc7df 100644 --- a/src/lib/unistd/fork.S +++ b/src/lib/unistd/fork.S @@ -1,8 +1,8 @@ +#include .text .global _fork .type _fork, @function -#include "kernel/unistd_32.h" .align 2 _fork: diff --git a/src/lib/unistd/lseek.S b/src/lib/unistd/lseek.S index 59a3f88..3420698 100644 --- a/src/lib/unistd/lseek.S +++ b/src/lib/unistd/lseek.S @@ -1,8 +1,8 @@ +#include .text .global _lseek .type _lseek, @function -#include "kernel/unistd_32.h" .align 2 _lseek: diff --git a/src/lib/unistd/open.S b/src/lib/unistd/open.S index 5dd9385..24dedbf 100644 --- a/src/lib/unistd/open.S +++ b/src/lib/unistd/open.S @@ -1,8 +1,8 @@ +#include .text .global _open .type _open, @function -#include "kernel/unistd_32.h" .align 2 _open: diff --git a/src/lib/unistd/read.S b/src/lib/unistd/read.S index 21f94c3..a3f9969 100644 --- a/src/lib/unistd/read.S +++ b/src/lib/unistd/read.S @@ -1,8 +1,8 @@ +#include .text .global _read .type _read, @function -#include "kernel/unistd_32.h" .align 2 _read: diff --git a/src/lib/unistd/waitpid.S b/src/lib/unistd/waitpid.S index dd4c3e7..631faaa 100644 --- a/src/lib/unistd/waitpid.S +++ b/src/lib/unistd/waitpid.S @@ -1,8 +1,8 @@ +#include .text .global _waitpid .type _waitpid, @function -#include "kernel/unistd_32.h" .align 2 _waitpid: diff --git a/src/lib/unistd/write.S b/src/lib/unistd/write.S index c4dc6a8..db948c2 100644 --- a/src/lib/unistd/write.S +++ b/src/lib/unistd/write.S @@ -1,8 +1,8 @@ +#include .text .global _write .type _write, @function -#include "kernel/unistd_32.h" .align 2 _write: diff --git a/src/user/shell/util/check_builtin.c b/src/user/shell/util/check_builtin.c index b3cf2b9..f451ce5 100644 --- a/src/user/shell/util/check_builtin.c +++ b/src/user/shell/util/check_builtin.c @@ -18,7 +18,6 @@ //} };*/ - //TODO: use agc, argv. int check_builtin(char *cmd) { @@ -45,6 +44,7 @@ int check_builtin(char *cmd) dclr_str_area(0, 1, 20, 1); dprint(0, 1, "P process: %d", counter); dupdate(); + counter = counter + 1; for (int i = 0 ; i < 30000 ; ++i); } diff --git a/src/user/test/test.c b/src/user/test/test.c index 7ba5a73..7425fa4 100644 --- a/src/user/test/test.c +++ b/src/user/test/test.c @@ -6,9 +6,9 @@ int main(void) while (1) { // Display data - dclr_str_area(0, 2, 20, 1); - dprint(0, 2, "C process: %d", counter); - dupdate(); +// dclr_str_area(0, 2, 20, 1); +// dprint(0, 2, "C process: %d", counter); +// dupdate(); // Update counter and "wait" counter = counter + 1;