I would learn C and x86/arm assembly first enough to bootstrap.
It's usually good to learn how to write ld linker scripts and how to make something bootable from grub.
Then, I would look Rust because it's easier to create correct no_std kernels.
arm architecture and instruction (ISA) reference
https://github.com/isometimes/rpi4-osdev
https://developer.arm.com/documentation/ddi0487/ia/?lang=en
x86 architecture and instruction (ISA) reference
https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html
PC programming
Ralf Brown's Interrupt List
https://www.ctyme.com/rbrown.htm
PC VGA programming
http://www.osdever.net/FreeVGA/vga/vga.htm
gas - gnu assembler (multiplatform, assembly --assembler-> binary instructions )
https://sourceware.org/binutils/docs/as/
yasm - x86 assembler
nasm - x86 assembler
gdb - gnu debugger
gdb server protocol
https://sourceware.org/gdb/onlinedocs/gdb/Remote-Protocol.html
lldb - llvm debugger
C99 reference
https://en.cppreference.com/w/c/99
Secure C programming practices
https://www.misra.org.uk/misra-c/
https://github.com/danmar/cppcheck
C with inline assembly
https://gcc.gnu.org/onlinedocs/gcc/Using-Assembly-Language-with-C.html
https://en.cppreference.com/w/c/language/asm
https://firexfly.com/clang-inline-assembly/
Emulator
How to make old versions of grub boot 64-bit code
https://forum.osdev.org/viewtopic.php?f=1&t=21944
The FreeBSD also lists reference PC hardware programming books for OS development and OS bootstrapping
https://docs.freebsd.org/en/books/arch-handbook/boot/
https://docs.freebsd.org/en/books/handbook/bibliography/#bibliography-hardware