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 }