diff --git a/boot/easyboot/menu.cfg b/boot/easyboot/menu.cfg index 4883fa1..5e7a59f 100644 --- a/boot/easyboot/menu.cfg +++ b/boot/easyboot/menu.cfg @@ -5,3 +5,4 @@ default 1 1000 menuentry Astryon default kernel core module init + module memory diff --git a/boot/memory b/boot/memory new file mode 100755 index 0000000..4b558d2 Binary files /dev/null and b/boot/memory differ diff --git a/system/build.zig b/system/build.zig index 49dbeaf..c3f13dd 100644 --- a/system/build.zig +++ b/system/build.zig @@ -1,9 +1,11 @@ const std = @import("std"); const init = @import("init/build.zig"); +const memory = @import("memory/build.zig"); pub fn buildAsSubmodule(b: *std.Build, build_step: *std.Build.Step, optimize: std.builtin.OptimizeMode, system_module: *std.Build.Module) void { const system_step = b.step("system", "Build core system services"); init.buildAsSubmodule(b, system_step, optimize, system_module); + memory.buildAsSubmodule(b, system_step, optimize, system_module); build_step.dependOn(system_step); } diff --git a/system/memory/build.zig b/system/memory/build.zig new file mode 100644 index 0000000..6279438 --- /dev/null +++ b/system/memory/build.zig @@ -0,0 +1,45 @@ +const std = @import("std"); + +const here = "system/memory"; + +pub fn buildAsSubmodule(b: *std.Build, build_step: *std.Build.Step, optimize: std.builtin.OptimizeMode, system_module: *std.Build.Module) void { + var disabled_features = std.Target.Cpu.Feature.Set.empty; + var enabled_features = std.Target.Cpu.Feature.Set.empty; + + disabled_features.addFeature(@intFromEnum(std.Target.x86.Feature.mmx)); + disabled_features.addFeature(@intFromEnum(std.Target.x86.Feature.sse)); + disabled_features.addFeature(@intFromEnum(std.Target.x86.Feature.sse2)); + disabled_features.addFeature(@intFromEnum(std.Target.x86.Feature.avx)); + disabled_features.addFeature(@intFromEnum(std.Target.x86.Feature.avx2)); + enabled_features.addFeature(@intFromEnum(std.Target.x86.Feature.soft_float)); + + const target_query = std.Target.Query{ + .cpu_arch = std.Target.Cpu.Arch.x86_64, + .os_tag = std.Target.Os.Tag.freestanding, + .abi = std.Target.Abi.none, + .cpu_features_sub = disabled_features, + .cpu_features_add = enabled_features, + }; + + const memory = b.addExecutable(.{ + .name = "memory", + .root_source_file = b.path(here ++ "/main.zig"), + .target = b.resolveTargetQuery(target_query), + .optimize = optimize, + .code_model = .default, + }); + + memory.root_module.addImport("system", system_module); + + const install = b.addInstallArtifact(memory, .{ + .dest_dir = .{ + .override = .{ .custom = "boot/" }, + }, + }); + + var memory_step = b.step("memory", "Build the memory manager"); + memory_step.dependOn(&memory.step); + memory_step.dependOn(&install.step); + + build_step.dependOn(memory_step); +} diff --git a/system/memory/main.zig b/system/memory/main.zig new file mode 100644 index 0000000..32bee9e --- /dev/null +++ b/system/memory/main.zig @@ -0,0 +1,16 @@ +const system = @import("system"); + +const vm = system.vm; +const syscalls = system.syscalls; + +fn setTokens() void { + var tokens: u64 = 0; + tokens |= @intFromEnum(system.kernel.Token.PhysicalMemory); + syscalls.setTokens(syscalls.getThreadId(), tokens) catch {}; +} + +export fn _start(_: u64, _: u64) callconv(.C) noreturn { + setTokens(); + + while (true) {} +}