Recently, we've been contracted to add support for the Intel Atom X6000E platform to an RTOS called RTTarget http://www.on-time.com/rttarget-32.htm
Unfortunately, the company that provided RTTarget, On-Time Informatik GmbH has ceased operations back in 2022. But a lot of companies still use it. The RTOS implements the Win32 library allowing to run Windows applications on embedded x86 based platforms. After running them through a special tool that does fixups on .exe files.
Our primary goal was add support for the network adapter provided by the X6000E which uses IP blocks from Synopsis. I've decided to use the dwqe driver from OpenBSD, because all other network drivers that RTTarget supports were taken from BSD variants.. It was not easy due to lack of information and only brief documentation online about this Ethernet controller. In the end, we were able to achieve the desired result, it was perhaps one of the hardest challenges that I've achieved in my career until now and I've learned a great lot about Ethernet controllers and PHYs in process.
A lot of parts of RTTarget are written in pure x86 assembly using Borland Turbo Assembler (TASM), so I had to get back into the internals of the x86 architecture.
I did enjoy doing instruction level debugging in QEMU to diagnose early boot problems when using the UEFI mode. Rttarget can boot on 64-bit boot systems because the EFI loader provided by On-Time switches the processor from long mode (x86-64) back into regular protected mode (x86) before calling the boot vector of RTTarget-32.
I also enjoyed this project because it made me work with another compiler. Using something else instead of the usual GCC or LLVM clang is very rare nowadays... Borland C++ 5.5.1 provides very terse error messages that oblige the programmer to search for the error. GCC is way more helpful in this regard, pointing the exact cause and location of the error. C is also a language that supports many different styles, Rttarget-32 follows usual Windows conventions. That is heavy uses of typedefs and even lower case macros. But hey, it's still C, I can figure this out...
