summaryrefslogtreecommitdiffstats
path: root/documentation/UEFI general/UEFI Programming with FASM
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/UEFI general/UEFI Programming with FASM')
-rw-r--r--documentation/UEFI general/UEFI Programming with FASM146
1 files changed, 0 insertions, 146 deletions
diff --git a/documentation/UEFI general/UEFI Programming with FASM b/documentation/UEFI general/UEFI Programming with FASM
deleted file mode 100644
index 472b757..0000000
--- a/documentation/UEFI general/UEFI Programming with FASM
+++ /dev/null
@@ -1,146 +0,0 @@
-UEFI Programming with FASM
-
-As an extra, I will also demonstrate same Hello World example in assembly (using FASM, that currently has experimental UEFI support since version 1.67.28):
-
-First we need some to create simple UEFI headers (efi.inc):
-
-;for 32/64 portability and automatic natural align in structure definitions
-
-struc int8 {
- . db ?
-}
-struc int16 {
- align 2
- . dw ?
-}
-struc int32 {
- align 4
- . dd ?
-}
-struc int64 {
- align 8
- . dq ?
-}
-struc intn {
- align 8
- . dq ?
-}
-struc dptr {
- align 8
- . dq ?
-}
-
-;symbols
-
-EFIERR = 0x8000000000000000
-EFI_SUCCESS = 0
-EFI_LOAD_ERROR = EFIERR or 1
-EFI_INVALID_PARAMETER = EFIERR or 2
-EFI_UNSUPPORTED = EFIERR or 3
-EFI_BAD_BUFFER_SIZE = EFIERR or 4
-EFI_BUFFER_TOO_SMALL = EFIERR or 5
-EFI_NOT_READY = EFIERR or 6
-EFI_DEVICE_ERROR = EFIERR or 7
-EFI_WRITE_PROTECTED = EFIERR or 8
-EFI_OUT_OF_RESOURCES = EFIERR or 9
-EFI_VOLUME_CORRUPTED = EFIERR or 10
-EFI_VOLUME_FULL = EFIERR or 11
-EFI_NO_MEDIA = EFIERR or 12
-EFI_MEDIA_CHANGED = EFIERR or 13
-EFI_NOT_FOUND = EFIERR or 14
-EFI_ACCESS_DENIED = EFIERR or 15
-EFI_NO_RESPONSE = EFIERR or 16
-EFI_NO_MAPPING = EFIERR or 17
-EFI_TIMEOUT = EFIERR or 18
-EFI_NOT_STARTED = EFIERR or 19
-EFI_ALREADY_STARTED = EFIERR or 20
-EFI_ABORTED = EFIERR or 21
-EFI_ICMP_ERROR = EFIERR or 22
-EFI_TFTP_ERROR = EFIERR or 23
-EFI_PROTOCOL_ERROR = EFIERR or 24
-
-;helper macro for definition of relative structure member offsets
-
-macro struct name
-{
- virtual at 0
- name name
- end virtual
-}
-
-;structures
-
-struc EFI_TABLE_HEADER {
- .Signature int64
- .Revision int32
- .HeaderSize int32
- .CRC32 int32
- .Reserved int32
-}
-struct EFI_TABLE_HEADER
-
-struc EFI_SYSTEM_TABLE {
- .Hdr EFI_TABLE_HEADER
- .FirmwareVendor dptr
- .FirmwareRevision int32
- .ConsoleInHandle dptr
- .ConIn dptr
- .ConsoleOutHandle dptr
- .ConOut dptr
- .StandardErrorHandle dptr
- .StdErr dptr
- .RuntimeServices dptr
- .BootServices dptr
- .NumberOfTableEntries intn
- .ConfigurationTable dptr
-}
-struct EFI_SYSTEM_TABLE
-
-struc SIMPLE_TEXT_OUTPUT_INTERFACE {
- .Reset dptr
- .OutputString dptr
- .TestString dptr
- .QueryMode dptr
- .SetMode dptr
- .SetAttribute dptr
- .ClearScreen dptr
- .SetCursorPosition dptr
- .EnableCursor dptr
- .Mode dptr
-}
-struct SIMPLE_TEXT_OUTPUT_INTERFACE
-
-And here is the assembly code itself (hello.asm):
-
-format pe64 dll efi
-entry main
-
-section '.text' code executable readable
-
-include 'efi.inc'
-
-main:
- sub rsp, 4*8 ; reserve space for 4 arguments
-
- mov [Handle], rcx ; ImageHandle
- mov [SystemTable], rdx ; pointer to SystemTable
-
- lea rdx, [_hello]
- mov rcx, [SystemTable]
- mov rcx, [rcx + EFI_SYSTEM_TABLE.ConOut]
- call [rcx + SIMPLE_TEXT_OUTPUT_INTERFACE.OutputString]
-
- add rsp, 4*8
- mov eax, EFI_SUCCESS
- retn
-
-
-section '.data' data readable writeable
-
-Handle dq ?
-SystemTable dq ?
-_hello du 'Hello World',13,10,'(From EFI app written in FASM)',13,10,0
-
-section '.reloc' fixups data discardable
-
-Compile and link it with fasm.exe hello_world.asm.