On Mon, Nov 22, 2010 at 10:12:38AM -0500, Stefan Berger wrote:
On 11/20/2010 01:28 PM, Kevin O'Connor wrote:
That looks to be doing the same thing that stacks.c:call32() does.
As it looks, this function allows no parameters to be passed. What I would be adding is a function allowing transitioning from 16 bit to 32 bit with >3 parameters (6 currently). There's some nastiness involved due to the 'ret + n' of functions being called with stack parameters, which starts with 4 parameters, and which does need explicit code in the transitioning function to fix up the stack as the caller expects it. As said, I am using a call table for transitioning that but calls are rather invisible from the C code perspective due to some tricks with #defines.
It wont be a big deal to pass one or two parameters through call32() - SeaBIOS has gcc use register passing by default so it just requires setting %eax/%ecx. If more than a couple parameters are needed, then the caller should populate a struct on the stack and then pass a pointer to the struct.