forth

A WIP implementation of Forth targeting UEFI x86-64.
git clone git://git.christianermann.dev/forth
Log | Files | Refs

efi.forth (6490B)


      1 
      2 : STRUCT 0 ;
      3 : ENDSTRUCT FIELD DROP ;
      4 
      5 : EFI:int32 4 + ;
      6 : EFI:int64 8 + ;
      7 
      8 STRUCT
      9 FIELD EFI:TableHeader:Signature  EFI:int64
     10 FIELD EFI:TableHeader:Revision   EFI:int32
     11 FIELD EFI:TableHeader:HeaderSize EFI:int32
     12 FIELD EFI:TableHeader:CRC32      EFI:int32
     13 FIELD EFI:TableHeader:Reserved   EFI:int32
     14 ENDSTRUCT EFI:TableHeader
     15 
     16 STRUCT
     17 FIELD EFI:SystemTable:Hdr                  EFI:TableHeader
     18 FIELD EFI:SystemTable:FirmwareVendor       EFI:int64
     19 FIELD EFI:SystemTable:FirmwareRevision     EFI:int64
     20 FIELD EFI:SystemTable:ConsoleInHandle      EFI:int64
     21 FIELD EFI:SystemTable:ConIn                EFI:int64
     22 FIELD EFI:SystemTable:ConsoleOutHandle     EFI:int64
     23 FIELD EFI:SystemTable:ConOut               EFI:int64
     24 FIELD EFI:SystemTable:StandardErrorHandle  EFI:int64
     25 FIELD EFI:SystemTable:StdErr               EFI:int64
     26 FIELD EFI:SystemTable:RuntimeServices      EFI:int64
     27 FIELD EFI:SystemTable:BootServices         EFI:int64
     28 FIELD EFI:SystemTable:NumberOfTableEntries EFI:int64
     29 FIELD EFI:SystemTable:ConfigurationTable   EFI:int64
     30 ENDSTRUCT EFI:SystemTable
     31 
     32 STRUCT
     33 FIELD EFI:TextOutput:Reset             EFI:int64
     34 FIELD EFI:TextOutput:OutputString      EFI:int64
     35 FIELD EFI:TextOutput:TestString        EFI:int64
     36 FIELD EFI:TextOutput:QueryMode         EFI:int64
     37 FIELD EFI:TextOutput:SetMode           EFI:int64
     38 FIELD EFI:TextOutput:SetAttribute      EFI:int64
     39 FIELD EFI:TextOutput:ClearScreen       EFI:int64
     40 FIELD EFI:TextOutput:SetCursorPosition EFI:int64
     41 FIELD EFI:TextOutput:EnableCursor      EFI:int64
     42 FIELD EFI:TextOutput:Mode              EFI:int64
     43 ENDSTRUCT EFI:TextOutput
     44 
     45 STRUCT
     46 FIELD EFI:TextInput:Reset               EFI:int64
     47 FIELD EFI:TextInput:ReadKeyStroke       EFI:int64
     48 FIELD EFI:TextInput:WaitForKey          EFI:int64
     49 FIELD EFI:TextInput:SetState            EFI:int64
     50 FIELD EFI:TextInput:RegisterKeyNotify   EFI:int64
     51 FIELD EFI:TextInput:UnregisterKeyNotify EFI:int64
     52 ENDSTRUCT EFI:TextInput
     53 
     54 STRUCT
     55 FIELD EFI:BootServices:Hdr                                 EFI:TableHeader
     56 FIELD EFI:BootServices:RaiseTPL                            EFI:int64
     57 FIELD EFI:BootServices:RestoreTPL                          EFI:int64
     58 FIELD EFI:BootServices:AllocatePages                       EFI:int64
     59 FIELD EFI:BootServices:FreePages                           EFI:int64
     60 FIELD EFI:BootServices:GetMemoryMap                        EFI:int64
     61 FIELD EFI:BootServices:AllocatePool                        EFI:int64
     62 FIELD EFI:BootServices:FreePool                            EFI:int64
     63 FIELD EFI:BootServices:CreateEvent                         EFI:int64
     64 FIELD EFI:BootServices:SetTimer                            EFI:int64
     65 FIELD EFI:BootServices:WaitForEvent                        EFI:int64
     66 FIELD EFI:BootServices:SignalEvent                         EFI:int64
     67 FIELD EFI:BootServices:CloseEvent                          EFI:int64
     68 FIELD EFI:BootServices:CheckEvent                          EFI:int64
     69 FIELD EFI:BootServices:InstallProtocolInterface            EFI:int64
     70 FIELD EFI:BootServices:ReinstallProtocolInterface          EFI:int64
     71 FIELD EFI:BootServices:UninstallProtocolInterface          EFI:int64
     72 FIELD EFI:BootServices:HandleProtocol                      EFI:int64
     73 FIELD EFI:BootServices:Reserved                            EFI:int64
     74 FIELD EFI:BootServices:RegisterProtocolNotify              EFI:int64
     75 FIELD EFI:BootServices:LocateHandle                        EFI:int64
     76 FIELD EFI:BootServices:LocateDevicePath                    EFI:int64
     77 FIELD EFI:BootServices:InstallConfigurationTable           EFI:int64
     78 FIELD EFI:BootServices:LoadImage                           EFI:int64
     79 FIELD EFI:BootServices:StartImage                          EFI:int64
     80 FIELD EFI:BootServices:Exit                                EFI:int64
     81 FIELD EFI:BootServices:UnloadImage                         EFI:int64
     82 FIELD EFI:BootServices:ExitBootServices                    EFI:int64
     83 FIELD EFI:BootServices:GetNextMonotonicCount               EFI:int64
     84 FIELD EFI:BootServices:Stall                               EFI:int64
     85 FIELD EFI:BootServices:SetWatchdogTimer                    EFI:int64
     86 FIELD EFI:BootServices:ConnectController                   EFI:int64
     87 FIELD EFI:BootServices:DisconnectController                EFI:int64
     88 FIELD EFI:BootServices:OpenProtocol                        EFI:int64
     89 FIELD EFI:BootServices:CloseProtocol                       EFI:int64
     90 FIELD EFI:BootServices:OpenProtocolInformation             EFI:int64
     91 FIELD EFI:BootServices:ProtocolsPerHandle                  EFI:int64
     92 FIELD EFI:BootServices:LocateHandleBuffer                  EFI:int64
     93 FIELD EFI:BootServices:LocateProtocol                      EFI:int64
     94 FIELD EFI:BootServices:InstallMultipleProtocolInterfaces   EFI:int64
     95 FIELD EFI:BootServices:UninstallMultipleProtocolInterfaces EFI:int64
     96 FIELD EFI:BootServices:CalculateCrc32                      EFI:int64
     97 FIELD EFI:BootServices:CopyMem                             EFI:int64
     98 FIELD EFI:BootServices:SetMem                              EFI:int64
     99 FIELD EFI:BootServices:CreateEventEx                       EFI:int64
    100 ENDSTRUCT EFI:BootServices
    101 
    102 STRUCT
    103 FIELD EFI:RuntimeServices:Hdr                       EFI:int64
    104 FIELD EFI:RuntimeServices:GetTime                   EFI:int64
    105 FIELD EFI:RuntimeServices:SetTime                   EFI:int64
    106 FIELD EFI:RuntimeServices:GetWakeupTime             EFI:int64
    107 FIELD EFI:RuntimeServices:SetWakeupTime             EFI:int64
    108 FIELD EFI:RuntimeServices:SetVirtualAddressMap      EFI:int64
    109 FIELD EFI:RuntimeServices:ConvertPointer            EFI:int64
    110 FIELD EFI:RuntimeServices:GetVariable               EFI:int64
    111 FIELD EFI:RuntimeServices:GetNextVariableName       EFI:int64
    112 FIELD EFI:RuntimeServices:SetVariable               EFI:int64
    113 FIELD EFI:RuntimeServices:GetNextHighMonotonicCount EFI:int64
    114 FIELD EFI:RuntimeServices:ResetSystem               EFI:int64
    115 FIELD EFI:RuntimeServices:UpdateCapsule             EFI:int64
    116 FIELD EFI:RuntimeServices:QueryCapsuleCapabilities  EFI:int64
    117 FIELD EFI:RuntimeServices:QueryVariableInfo         EFI:int64
    118 ENDSTRUCT EFI:RuntimeServices
    119 
    120 CODE EFI:CALL0
    121     RAX POP
    122     RAX CALL-INDIRECT
    123     RAX PUSH
    124 ;CODE
    125 
    126 CODE EFI:CALL1
    127     RCX POP
    128     RAX POP
    129     RAX CALL-INDIRECT
    130     RAX PUSH
    131 ;CODE
    132 
    133 CODE EFI:CALL2
    134     RDX POP
    135     RCX POP
    136     RAX POP
    137     RAX CALL-INDIRECT
    138     RAX PUSH
    139 ;CODE
    140 
    141 CODE EFI:CALL3
    142     R8  POP
    143     RDX POP
    144     RCX POP
    145     RAX POP
    146     RAX CALL-INDIRECT
    147     RAX PUSH
    148 ;CODE
    149 
    150 CODE EFI:CALL4
    151     R9  POP
    152     R8  POP
    153     RDX POP
    154     RCX POP 
    155     RAX POP
    156     RAX CALL-INDIRECT
    157     RAX PUSH
    158 ;CODE
    159