Ok, I've finally tested the OS in the real hardware, and... it doesn't work
the VBR seems to work in fact the second stage bootloader prints a string but then nothing, maybe the VBR does not load correctly all the file: the instruction right after the print is a call to a function very deep in the code...
I don't know I need to do some more testing... If you notice something weird in
this code let me know but I'm pretty sure about that, maybe is the fact that I assume that the memory that could be used by the EBDA is free, I may need to move around some bits
You should implement exception vectors that allow you to insert int 3 into the code and dump register state & halt. You should also print register state on faults. It's not so hard to do and definitely should be used in the second stage boot loader and forward. Since I never had the luxury of emulators with this built-in, I learned this the hard way on real hardware.