: ConOut SystemTable 64 + @ ; : ConOut.OutputString ConOut 8 + @ ; : ConOut.OutputString() ConOut SWAP ConOut.OutputString EFICALL2 ; : ConOut.ClearScreen() ConOut DUP 48 + @ EFICALL1 ; : BootServices SystemTable 96 + @ ; : BootServices.LocateProtocol BootServices 320 + @ ; : GraphicsOutputProtocol \ [TODO] It would be nice to cache this value, so we don't have to get it \ every time. \ (next line) *Protocol = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID HERE @ 5348063987722529246 , 7661046075708078998 , 0 \ *Registration HERE @ 0 , \ **Interface BootServices.LocateProtocol EFICALL3 DROP HERE @ 8 - @ \ *Interface ; : GOP.Blt GraphicsOutputProtocol 16 + @ ; : GOP.Blt() ( GOP buffer mode sx sy dx dy dw dh pitch -- ) GOP.Blt EFICALL10 0 = IF ELSE S" Warning: Invalid Blt()" TELL THEN ; : GOP.SetMode GraphicsOutputProtocol 8 + @ ; : EfiBltVideoFill 0 ; \ Store a null-terminated UTF-16 string HERE, and return a pointer to \ its buffer at runtime. : UTF16" HERE @ BEGIN KEY DUP C, 0 C, 34 = UNTIL HERE @ 2 - HERE ! \ Remove final " 0 C, 0 C, \ Null terminator ; \ Push length for null-terminated string ( s -- s n ) : @32 DUP BEGIN DUP C@ IF 1 + 0 ELSE 1 THEN UNTIL OVER - ; ConOut.ClearScreen() \ Report Firmware Vendor UTF16" Firmware vendor: " ConOut.OutputString() SystemTable 24 + @ ConOut.OutputString() UTF16" version:" ConOut.OutputString() SystemTable 32 + SPACE DUP C@ .U 1 + SPACE DUP C@ .U 1 + SPACE DUP C@ .U 1 + SPACE DUP C@ .U 1 + DROP NEWLINE