sylveos

Toy Operating System
Log | Files | Refs

bootloader.zig (766B)


      1 const standalone = @import("./standalone.zig");
      2 
      3 pub const bootloader_asm =
      4     \\ b skip
      5     \\ .space 0x200000-0x8004,0
      6     \\ skip:
      7     \\
      8 ;
      9 
     10 pub fn make(comptime kmain: *const fn () callconv(.c) void, comptime abort: *const fn () callconv(.c) void) type {
     11     return struct {
     12         pub fn _start() linksection(".kmain") callconv(.naked) noreturn {
     13             asm volatile (bootloader_asm ++ standalone.standalone_asm
     14                 :
     15                 : [CLEAR_MODE_MASK] "i" (standalone.CLEAR_MODE_MASK),
     16                   [SUPER_MODE] "i" (standalone.SUPER_MODE),
     17                   [CLEAR_MODE_IRQ_FIQ] "i" (standalone.CLEAR_MODE_IRQ_FIQ),
     18                   [kmain_fn] "X" (kmain),
     19                   [abort_fn] "X" (abort),
     20             );
     21         }
     22     };
     23 }