1
0
Fork 0
mirror of https://gitlab.com/bztsrc/bootboot.git synced 2023-02-13 20:54:32 -05:00
bztsrc--bootboot/x86_64-bios/initrd.asm
2018-06-05 20:34:03 +02:00

62 lines
2.3 KiB
NASM

;*
;* x86_64-bios/initrd.asm
;*
;* Copyright (C) 2017 bzt (bztsrc@gitlab)
;*
;* Permission is hereby granted, free of charge, to any person
;* obtaining a copy of this software and associated documentation
;* files (the "Software"), to deal in the Software without
;* restriction, including without limitation the rights to use, copy,
;* modify, merge, publish, distribute, sublicense, and/or sell copies
;* of the Software, and to permit persons to whom the Software is
;* furnished to do so, subject to the following conditions:
;*
;* The above copyright notice and this permission notice shall be
;* included in all copies or substantial portions of the Software.
;*
;* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
;* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
;* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
;* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
;* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
;* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
;* DEALINGS IN THE SOFTWARE.
;*
;* This file is part of the BOOTBOOT Protocol package.
;* @brief Option ROM for initrd. mkfs utility also can do this.
;*
;* This may seem odd, but works with BIOS (up to 96k gzipped
;* initrd), and makes much more sense on EFI, where Option ROMs
;* can be 16M in size.
;*
;------------header------------
USE16
ORG 0h
rom: db 55h,0AAh ;ROM magic
db (rom_end-rom)/512 ;size in 512 blocks
.executor: xor ax, ax ;entry point
retf
.checksum: dw 0 ;checksum
.name: db "INITRD"
db 0,0
dd initrd_end-initrd, 0
db 0,0
.pnpptr: dw 0
.flags: dd 0
;------------data------------
initrd:
file "../../bin/ESP/BOOTBOOT/INITRD"
initrd_end:
;-----------padding to be multiple of 512----------
db (511-($-rom+511) mod 512) dup 0
rom_end:
;-----------BIOS checksum------------
chksum = 0
repeat $-rom
load b byte from (rom+%-1)
chksum = (chksum + b) mod 100h
end repeat
store byte (100h-chksum) at (rom.checksum)