diff --git a/AcessNative/acesskernel_src/Details.txt b/AcessNative/acesskernel_src/Details.txt new file mode 100644 index 0000000000000000000000000000000000000000..bd2095365c1a513bf4e2e641f26b01280551eea9 --- /dev/null +++ b/AcessNative/acesskernel_src/Details.txt @@ -0,0 +1,7 @@ +Provides Acess Kernel services +- UDP Server listening on 127.0.0.1:2766 (0XACE) + > See ld-acess.so_src/syscalls for the spec +- Starts acess applications + > Provides kernel loader services and loads libacess +- Provides "vterms" / control panel +- Cross platform (GTK?/SDL) \ No newline at end of file diff --git a/AcessNative/acesskernel_src/Makefile b/AcessNative/acesskernel_src/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..d7bfcb8ad73cf1018e5e70789fcf74dd6889a784 --- /dev/null +++ b/AcessNative/acesskernel_src/Makefile @@ -0,0 +1,43 @@ +# AcessNative Server +# Makefile + +ifeq ($(PLATFORM),) + PLATFORM := lin +endif + +KERNEL_SRC = ../../Kernel/ + +KERNEL_OBJ := logging.o adt.o +KERNEL_OBJ += vfs/main.o vfs/open.o vfs/acls.o vfs/io.o vfs/dir.o vfs/nodecache.o vfs/mount.o +KERNEL_OBJ += vfs/fs/root.o vfs/fs/devfs.o +KERNEL_OBJ += drv/vterm.o drv/fifo.o + +OBJ := main.o video.o keyboard.o mouse.o nativefs.o vfs_handle.o +OBJ += $(addprefix $(KERNEL_SRC),$(KERNEL_OBJ)) + +OBJ := $(addsuffix .$(PLATFORM),$(OBJ)) + +CPPFLAGS += -I include/ -I $(KERNEL_SRC)include/ +CFLAGS += -Wall +LDFLAGS += -lSDL -lSDLmain + +ifeq ($(PLATFORM),win) + BIN := ../AcessKernel.exe +endif +ifeq ($(PLATFORM),lin) + BIN := ../AcessKernel + CFLAGS += +endif + +.PHONY: all clean + +all: $(BIN) + +clean: + $(RM) $(BIN) $(OBJ) + +$(BIN): $(OBJ) + $(CC) $(LDFLAGS) -o $@ $(OBJ) + +%.o.$(PLATFORM): %.c + $(CC) -c $< -o $@ $(CFLAGS) $(CPPFLAGS) diff --git a/AcessNative/acesskernel_src/include/arch.h b/AcessNative/acesskernel_src/include/arch.h new file mode 100644 index 0000000000000000000000000000000000000000..e98578907a201446b8ed26c8b7a8139153a88c1b --- /dev/null +++ b/AcessNative/acesskernel_src/include/arch.h @@ -0,0 +1,37 @@ +/** + */ +#ifndef _ARCH_H_ +#define _ARCH_H_ + +#include <stdint.h> +#include <stdlib.h> + +#define _MODULE_NAME_ "NativeKernel" + +#define BITS (sizeof(intptr_t)*8) + +typedef uint8_t Uint8; +typedef uint16_t Uint16; +typedef uint32_t Uint32; +typedef uint64_t Uint64; + +typedef int8_t Sint8; +typedef int16_t Sint16; +typedef int32_t Sint32; +typedef int64_t Sint64; + +typedef intptr_t Uint; + +typedef intptr_t tVAddr; +typedef intptr_t tPAddr; + +struct sShortSpinlock +{ + int Lock; +}; + +#define SHORTLOCK(...) +#define SHORTREL(...) + +#endif + diff --git a/AcessNative/acesskernel_src/include/heap.h b/AcessNative/acesskernel_src/include/heap.h new file mode 100644 index 0000000000000000000000000000000000000000..2052559721256defb62359afbe037ebc5b8afe54 --- /dev/null +++ b/AcessNative/acesskernel_src/include/heap.h @@ -0,0 +1,8 @@ +/** + */ +#ifndef _HEAP_H_ +#define _HEAP_H_ + +// NOP (stdlib.h defines the heap functions) + +#endif diff --git a/AcessNative/acesskernel_src/keyboard.c b/AcessNative/acesskernel_src/keyboard.c new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/AcessNative/acesskernel_src/main.c b/AcessNative/acesskernel_src/main.c new file mode 100644 index 0000000000000000000000000000000000000000..45e6aa02a603b7ce2788907ed5102bcc67c42809 --- /dev/null +++ b/AcessNative/acesskernel_src/main.c @@ -0,0 +1,52 @@ +/* + * Acess2 Native Kernel + * - Acess kernel emulation on another OS using SDL and UDP + * + * Kernel Main + */ +#include <stdio.h> +#include <stdlib.h> +#include <SDL/SDL.h> + +int main(int argc, char *argv[]) +{ + return 0; +} + +void LogF(const char *Fmt, ...) +{ + va_list args; + va_start(args, Fmt); + vprintf(Fmt, args); + va_end(args); +} + +void Log(const char *Fmt, ...) +{ + va_list args; + printf("Log: "); + va_start(args, Fmt); + vprintf(Fmt, args); + va_end(args); + printf("\n"); +} + +void Warning(const char *Fmt, ...) +{ + va_list args; + printf("Warning: "); + va_start(args, Fmt); + vprintf(Fmt, args); + va_end(args); + printf("\n"); +} + +int CheckMem(void *Mem, int Count) +{ + return 1; +} + +int CheckString(const char *String) +{ + return 1; +} diff --git a/AcessNative/acesskernel_src/mouse.c b/AcessNative/acesskernel_src/mouse.c new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/AcessNative/acesskernel_src/nativefs.c b/AcessNative/acesskernel_src/nativefs.c new file mode 100644 index 0000000000000000000000000000000000000000..71774e23f41c1b91e9f80fd892704e2dbec73c96 --- /dev/null +++ b/AcessNative/acesskernel_src/nativefs.c @@ -0,0 +1,17 @@ +/* + * Acess2 Native Kernel + * - Acess kernel emulation on another OS using SDL and UDP + * + * nativefs.c + * - Host filesystem access + */ +#include <acess.h> +#include <vfs.h> + +// === GLOBALS === + +// === CODE === +tVFS_Node *Native_Mount(const char *Device, const char **Arguments) +{ + return NULL; +} diff --git a/AcessNative/acesskernel_src/vfs_handle.c b/AcessNative/acesskernel_src/vfs_handle.c new file mode 100644 index 0000000000000000000000000000000000000000..aab30fc08b20496b81623b5e241ee694ca522d28 --- /dev/null +++ b/AcessNative/acesskernel_src/vfs_handle.c @@ -0,0 +1,115 @@ +/* + * Acess2 VFS + * - AllocHandle, GetHandle + */ +#define DEBUG 0 +#include <acess.h> +#include "vfs.h" +#include "vfs_int.h" +#include "vfs_ext.h" + +// === CONSTANTS === +#define MAX_KERNEL_FILES 128 +#define MAX_USER_FILES 64 + +// === PROTOTYPES === +tVFS_Handle *VFS_GetHandle(int FD); + int VFS_AllocHandle(int FD, tVFS_Node *Node, int Mode); + +typedef struct sUserHandles +{ + struct sUserHandles *Next; + int PID; + tVFS_Handle Handles[MAX_USER_FILES]; +} tUserHandles; + +// === GLOBALS === +tUserHandles *gpUserHandles = NULL; +tVFS_Handle gaKernelHandles[MAX_KERNEL_FILES]; + +// === CODE === +/** + * \fn tVFS_Handle *VFS_GetHandle(int FD) + * \brief Gets a pointer to the handle information structure + */ +tVFS_Handle *VFS_GetHandle(int FD) +{ + tVFS_Handle *h; + + //Log_Debug("VFS", "VFS_GetHandle: (FD=0x%x)", FD); + + if(FD < 0) return NULL; + + if(FD & VFS_KERNEL_FLAG) { + FD &= (VFS_KERNEL_FLAG - 1); + if(FD >= MAX_KERNEL_FILES) return NULL; + h = &gaKernelHandles[ FD ]; + } + else { + tUserHandles *ent; + int pid = Threads_GetPID(); + for( ent = gpUserHandles; ent; ent = ent->Next ) { + if( ent->PID == pid ) break; + if( ent->PID > pid ) { + Log_Error("VFS", "PID %i does not have a handle list", pid); + return NULL; + } + } + if(FD >= CFGINT(CFG_VFS_MAXFILES)) return NULL; + h = &ent->Handles[ FD ]; + } + + if(h->Node == NULL) return NULL; + //Log_Debug("VFS", "VFS_GetHandle: RETURN %p", h); + return h; +} + +int VFS_AllocHandle(int bIsUser, tVFS_Node *Node, int Mode) +{ + int i; + + // Check for a user open + if(bIsUser) + { + tUserHandles *ent, *prev; + int pid = Threads_GetPID(); + for( ent = gpUserHandles; ent; prev = ent, ent = ent->Next ) { + if( ent->PID == pid ) break; + if( ent->PID > pid ) break; + } + if( ent->PID > pid ) { + ent = calloc( 1, sizeof(tUserHandles) ); + if( prev ) { + ent->Next = prev->Next; + prev->Next = ent; + } + else { + ent->Next = gpUserHandles; + gpUserHandles = ent; + } + } + // Get a handle + for(i=0;i<CFGINT(CFG_VFS_MAXFILES);i++) + { + if(ent->Handles[i].Node) continue; + ent->Handles[i].Node = Node; + ent->Handles[i].Position = 0; + ent->Handles[i].Mode = Mode; + return i; + } + } + else + { + // Get a handle + for(i=0;i<MAX_KERNEL_FILES;i++) + { + if(gaKernelHandles[i].Node) continue; + gaKernelHandles[i].Node = Node; + gaKernelHandles[i].Position = 0; + gaKernelHandles[i].Mode = Mode; + return i|VFS_KERNEL_FLAG; + } + } + + return -1; +} diff --git a/AcessNative/acesskernel_src/video.c b/AcessNative/acesskernel_src/video.c new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391