10 FIB .U
SPACE S" (Expected: 59)" TELL NEWLINE ;
+\ This example calls the Blt() function on UEFI's Graphics Output Protocol. See
+\ the UEFI specification and uefi.f for more information.
+: BLUE-SQUARE
+ GraphicsOutputProtocol
+ HERE @ 255 C, 0 C, 0 C, 0 C, \ Buffer with single blue pixel
+ EfiBltVideoFill
+ 0 0 \ Source
+ 100 100 20 20 \ Destination
+ 0
+ GOP.Blt() ;
+
HELLO
TEST-FIB
+BLUE-SQUARE
: BootServices SystemTable 96 + @ ;
: BootServices.LocateProtocol BootServices 320 + @ ;
-: BootServices.LocateProtocol(GOP)
+: GraphicsOutputProtocol
+ \ [TODO] It would be nice to cache this value, so we don't have to get it
+ \ every time.
HERE @ 5348063987722529246 , 7661046075708078998 , \ *Protocol = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID
0 \ *Registration
HERE @ 0 , \ **Interface
BootServices.LocateProtocol EFICALL3 DROP
HERE @ 8 - @ \ *Interface
;
-: GOP.Blt BootServices.LocateProtocol(GOP) 16 + @ ;
-: GOP.SetMode BootServices.LocateProtocol(GOP) 8 + @ ;
+: 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.
HERE @ 2 - HERE ! \ Remove final "
0 C, 0 C, \ Null terminator
;
-
- BootServices.LocateProtocol(GOP) \ *This
- HERE @ 255 C, 0 C, 0 C, 0 C, \ *BltBuffer = single blue pixel
- 0 \ BltOperation = EfiBltVideoFill
- 0 \ SourceX
- 0 \ SourceY
- 100 \ DestinationX
- 200 \ DestinationY
- 400 \ Width
- 20 \ Height
- 0 \ Delta (unused)
-GOP.Blt EFICALL10
-.U NEWLINE