commit 0b544320f42ecdd1b105aff22b56de2f80d4ecfa
parent 97f0001d189e7a4d65182e9f85f801ea2e2a66f3
Author: Christian Ermann <christianermann@gmail.com>
Date:   Sun, 16 Jun 2024 17:19:50 -0400
Add efi.forth and word for loading into dictionary
Diffstat:
| M | Dockerfile | | | 1 | + | 
| A | efi.forth | | | 159 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | 
| M | forth.asm | | | 16 | ++++++++++++++-- | 
3 files changed, 174 insertions(+), 2 deletions(-)
diff --git a/Dockerfile b/Dockerfile
@@ -10,6 +10,7 @@ RUN apt-get update && apt-get -y upgrade && \
 COPY forth.asm /
 COPY efi.asm /
 COPY base.forth /
+COPY efi.forth /
 COPY run.sh /
 
 RUN fasm forth.asm BOOTX64.EFI
diff --git a/efi.forth b/efi.forth
@@ -0,0 +1,159 @@
+
+: STRUCT 0 ;
+: ENDSTRUCT FIELD DROP ;
+
+: EFI:int32 4 + ;
+: EFI:int64 8 + ;
+
+STRUCT
+FIELD EFI:TableHeader:Signature  EFI:int64
+FIELD EFI:TableHeader:Revision   EFI:int32
+FIELD EFI:TableHeader:HeaderSize EFI:int32
+FIELD EFI:TableHeader:CRC32      EFI:int32
+FIELD EFI:TableHeader:Reserved   EFI:int32
+ENDSTRUCT EFI:TableHeader
+
+STRUCT
+FIELD EFI:SystemTable:Hdr                  EFI:TableHeader
+FIELD EFI:SystemTable:FirmwareVendor       EFI:int64
+FIELD EFI:SystemTable:FirmwareRevision     EFI:int64
+FIELD EFI:SystemTable:ConsoleInHandle      EFI:int64
+FIELD EFI:SystemTable:ConIn                EFI:int64
+FIELD EFI:SystemTable:ConsoleOutHandle     EFI:int64
+FIELD EFI:SystemTable:ConOut               EFI:int64
+FIELD EFI:SystemTable:StandardErrorHandle  EFI:int64
+FIELD EFI:SystemTable:StdErr               EFI:int64
+FIELD EFI:SystemTable:RuntimeServices      EFI:int64
+FIELD EFI:SystemTable:BootServices         EFI:int64
+FIELD EFI:SystemTable:NumberOfTableEntries EFI:int64
+FIELD EFI:SystemTable:ConfigurationTable   EFI:int64
+ENDSTRUCT EFI:SystemTable
+
+STRUCT
+FIELD EFI:TextOutput:Reset             EFI:int64
+FIELD EFI:TextOutput:OutputString      EFI:int64
+FIELD EFI:TextOutput:TestString        EFI:int64
+FIELD EFI:TextOutput:QueryMode         EFI:int64
+FIELD EFI:TextOutput:SetMode           EFI:int64
+FIELD EFI:TextOutput:SetAttribute      EFI:int64
+FIELD EFI:TextOutput:ClearScreen       EFI:int64
+FIELD EFI:TextOutput:SetCursorPosition EFI:int64
+FIELD EFI:TextOutput:EnableCursor      EFI:int64
+FIELD EFI:TextOutput:Mode              EFI:int64
+ENDSTRUCT EFI:TextOutput
+
+STRUCT
+FIELD EFI:TextInput:Reset               EFI:int64
+FIELD EFI:TextInput:ReadKeyStroke       EFI:int64
+FIELD EFI:TextInput:WaitForKey          EFI:int64
+FIELD EFI:TextInput:SetState            EFI:int64
+FIELD EFI:TextInput:RegisterKeyNotify   EFI:int64
+FIELD EFI:TextInput:UnregisterKeyNotify EFI:int64
+ENDSTRUCT EFI:TextInput
+
+STRUCT
+FIELD EFI:BootServices:Hdr                                 EFI:TableHeader
+FIELD EFI:BootServices:RaiseTPL                            EFI:int64
+FIELD EFI:BootServices:RestoreTPL                          EFI:int64
+FIELD EFI:BootServices:AllocatePages                       EFI:int64
+FIELD EFI:BootServices:FreePages                           EFI:int64
+FIELD EFI:BootServices:GetMemoryMap                        EFI:int64
+FIELD EFI:BootServices:AllocatePool                        EFI:int64
+FIELD EFI:BootServices:FreePool                            EFI:int64
+FIELD EFI:BootServices:CreateEvent                         EFI:int64
+FIELD EFI:BootServices:SetTimer                            EFI:int64
+FIELD EFI:BootServices:WaitForEvent                        EFI:int64
+FIELD EFI:BootServices:SignalEvent                         EFI:int64
+FIELD EFI:BootServices:CloseEvent                          EFI:int64
+FIELD EFI:BootServices:CheckEvent                          EFI:int64
+FIELD EFI:BootServices:InstallProtocolInterface            EFI:int64
+FIELD EFI:BootServices:ReinstallProtocolInterface          EFI:int64
+FIELD EFI:BootServices:UninstallProtocolInterface          EFI:int64
+FIELD EFI:BootServices:HandleProtocol                      EFI:int64
+FIELD EFI:BootServices:Reserved                            EFI:int64
+FIELD EFI:BootServices:RegisterProtocolNotify              EFI:int64
+FIELD EFI:BootServices:LocateHandle                        EFI:int64
+FIELD EFI:BootServices:LocateDevicePath                    EFI:int64
+FIELD EFI:BootServices:InstallConfigurationTable           EFI:int64
+FIELD EFI:BootServices:LoadImage                           EFI:int64
+FIELD EFI:BootServices:StartImage                          EFI:int64
+FIELD EFI:BootServices:Exit                                EFI:int64
+FIELD EFI:BootServices:UnloadImage                         EFI:int64
+FIELD EFI:BootServices:ExitBootServices                    EFI:int64
+FIELD EFI:BootServices:GetNextMonotonicCount               EFI:int64
+FIELD EFI:BootServices:Stall                               EFI:int64
+FIELD EFI:BootServices:SetWatchdogTimer                    EFI:int64
+FIELD EFI:BootServices:ConnectController                   EFI:int64
+FIELD EFI:BootServices:DisconnectController                EFI:int64
+FIELD EFI:BootServices:OpenProtocol                        EFI:int64
+FIELD EFI:BootServices:CloseProtocol                       EFI:int64
+FIELD EFI:BootServices:OpenProtocolInformation             EFI:int64
+FIELD EFI:BootServices:ProtocolsPerHandle                  EFI:int64
+FIELD EFI:BootServices:LocateHandleBuffer                  EFI:int64
+FIELD EFI:BootServices:LocateProtocol                      EFI:int64
+FIELD EFI:BootServices:InstallMultipleProtocolInterfaces   EFI:int64
+FIELD EFI:BootServices:UninstallMultipleProtocolInterfaces EFI:int64
+FIELD EFI:BootServices:CalculateCrc32                      EFI:int64
+FIELD EFI:BootServices:CopyMem                             EFI:int64
+FIELD EFI:BootServices:SetMem                              EFI:int64
+FIELD EFI:BootServices:CreateEventEx                       EFI:int64
+ENDSTRUCT EFI:BootServices
+
+STRUCT
+FIELD EFI:RuntimeServices:Hdr                       EFI:int64
+FIELD EFI:RuntimeServices:GetTime                   EFI:int64
+FIELD EFI:RuntimeServices:SetTime                   EFI:int64
+FIELD EFI:RuntimeServices:GetWakeupTime             EFI:int64
+FIELD EFI:RuntimeServices:SetWakeupTime             EFI:int64
+FIELD EFI:RuntimeServices:SetVirtualAddressMap      EFI:int64
+FIELD EFI:RuntimeServices:ConvertPointer            EFI:int64
+FIELD EFI:RuntimeServices:GetVariable               EFI:int64
+FIELD EFI:RuntimeServices:GetNextVariableName       EFI:int64
+FIELD EFI:RuntimeServices:SetVariable               EFI:int64
+FIELD EFI:RuntimeServices:GetNextHighMonotonicCount EFI:int64
+FIELD EFI:RuntimeServices:ResetSystem               EFI:int64
+FIELD EFI:RuntimeServices:UpdateCapsule             EFI:int64
+FIELD EFI:RuntimeServices:QueryCapsuleCapabilities  EFI:int64
+FIELD EFI:RuntimeServices:QueryVariableInfo         EFI:int64
+ENDSTRUCT EFI:RuntimeServices
+
+CODE EFI:CALL0
+    RAX POP
+    RAX CALL-INDIRECT
+    RAX PUSH
+;CODE
+
+CODE EFI:CALL1
+    RCX POP
+    RAX POP
+    RAX CALL-INDIRECT
+    RAX PUSH
+;CODE
+
+CODE EFI:CALL2
+    RDX POP
+    RCX POP
+    RAX POP
+    RAX CALL-INDIRECT
+    RAX PUSH
+;CODE
+
+CODE EFI:CALL3
+    R8  POP
+    RDX POP
+    RCX POP
+    RAX POP
+    RAX CALL-INDIRECT
+    RAX PUSH
+;CODE
+
+CODE EFI:CALL4
+    R9  POP
+    R8  POP
+    RDX POP
+    RCX POP 
+    RAX POP
+    RAX CALL-INDIRECT
+    RAX PUSH
+;CODE
+
diff --git a/forth.asm b/forth.asm
@@ -268,8 +268,6 @@ main:
     initialize_stack
     mov rbp, return_stack_top
     mov rsi, program
-    mov [input_buffer], forth_base
-    mov [input_buffer.len], forth_base.len
     NEXT
 }
 
@@ -1169,6 +1167,16 @@ defcode "(", 1, 0, LEFT_PAREN
 .end:
     NEXT
 
+defcode "LOAD_BASE", 9, 0, LOAD_BASE
+    mov [input_buffer], forth_base
+    mov [input_buffer.len], forth_base.len
+    NEXT
+
+defcode "LOAD_EFI", 8, 0, LOAD_EFI
+    mov [input_buffer], forth_efi
+    mov [input_buffer.len], forth_efi.len
+    NEXT
+
 section '.data' data readable writable
 
 version_string db 'soup forth v0.1', 0xA
@@ -1211,6 +1219,10 @@ forth_base:
 file './base.forth'
 forth_base.len = $ - forth_base
 
+forth_efi:
+file './efi.forth'
+forth_efi.len = $ - forth_efi
+
 align 4096
 return_stack rb 8192
 return_stack_top: