Re: x86_64 Programming
Posted: Sun Jan 24, 2021 8:08 pm
No, because those are all you need in a boot loader. You want to read data from disk (obviously), set up screen and get user keystrokes. What else do you need?PavelCheckov wrote:Is there a more advanced version for assembly, because the article says that it gives limited access, and only three things to do?
NASM is not easier and it doesn't have as sophisticated macros as FASM. The uefi_call_wrapper macro takes advantage of those macro functions to accumulate arguments etc. That's just not possible with NASM. You could however convert the source into NASM macros, by creating 11 ones depending on the number of arguments: uefi_call_wrapper0, uefi_call_wrapper1, uefi_call_wrapper2 etc.PavelCheckov wrote:I know the article says that it is meant for FASM, but will uefi.inc work with NASM as well? (I only have NASM, and personally consider it easier to use)
Then are you sure you want to code Assembly for UEFI? That's a difficult task by all standards. UEFI was specifically designed with C/C++ in mind (and bloat may I add).PavelCheckov wrote:Im very new to OS development, and am just trying to figure how to output text to the screen and input text
Here's what you'll need:
SystemTable->ConIn->ReadKeyStroke - to get a character from keyboard (INT 16h/AX=0)
SystemTable->ConOut->OutputString - to write string to the screen (no BIOS equivalent, maybe INT 10h/AH=0Eh in a loop)
SystemTable->BootServices->LocateProtocol - to find pointers to interfaces not listed in the SystemTable
One of those further interfaces is GOP, which provides similar functions like VESA (INT 10h/AX=4Fxx). Another one is SIMPLE_FILE_SYSTEM_PROTOCOL, to load files from the ESP. If you're new to OSDev, I would not recommend reading disks at sector level, but if you want, use BLOCK_IO_PROTOCOL (INT 13h). All of these have wiki pages.
What do you mean? What what? The compiled kernel.efi? You should create a bootable disk image with an EFI System Partition and boot that image in qemu, or write it to an USB stick and boot it on real machine (you obviously won't need any OS on your test machine, just set it up to boot from USB sticks).PavelCheckov wrote:I more meant where should I put what
Cheers,
bzt