1 // Structure layout of cpu registers the the bios uses.
3 // Copyright (C) 2008 Kevin O'Connor <kevin@koconnor.net>
5 // This file may be distributed under the terms of the GNU GPLv3 license.
10 #include "types.h" // u16
13 /****************************************************************
14 * Registers saved/restored in romlayout.S
15 ****************************************************************/
17 #define UREG(ER, R, RH, RL) union { u32 ER; struct { u16 R; u16 R ## _hi; }; struct { u8 RL; u8 RH; u8 R ## _hilo; u8 R ## _hihi; }; }
19 // Layout of registers passed in to irq handlers. Note that this
20 // layout corresponds to code in romlayout.S - don't change it here
21 // without also updating the assembler code.
25 UREG(edi, di, di_hi, di_lo);
26 UREG(esi, si, si_hi, si_lo);
27 UREG(ebx, bx, bh, bl);
28 UREG(edx, dx, dh, dl);
29 UREG(ecx, cx, ch, cl);
30 UREG(eax, ax, ah, al);
37 /****************************************************************
39 ****************************************************************/
41 // bregs flags bitdefs
46 set_cf(struct bregs *regs, int cond)
54 // Frequently used return codes
55 #define RET_EUNSUPPORTED 0x86
58 set_success(struct bregs *regs)
64 set_code_success(struct bregs *regs)
71 set_fail_silent(struct bregs *regs)
77 set_code_fail_silent(struct bregs *regs, u8 code)
83 #define set_fail(regs) \
84 __set_fail(__func__, __LINE__, (regs))
85 #define set_code_fail(regs, code) \
86 __set_code_fail(__func__, __LINE__, (regs), (code))
89 void __set_fail(const char *fname, int lineno, struct bregs *regs);
90 void __set_code_fail(const char *fname, int lineno, struct bregs *regs, u8 code);