Remove the SET_GLOBAL macro - it is no longer used and since it was only available in "32bit flat" mode it does not have much use.
Signed-off-by: Kevin O'Connor kevin@koconnor.net --- README | 21 ++++++++++----------- src/biosvar.h | 4 ---- 2 files changed, 10 insertions(+), 15 deletions(-)
diff --git a/README b/README index 6844e52..1e61e2f 100644 --- a/README +++ b/README @@ -104,23 +104,22 @@ mode instead of a segment/offset pair.
Most BIOS variables are stored in global variables, the "BDA", or "EBDA" memory areas. Because this is common, three sets of helper -macros (GET/SET_GLOBAL, GET/SET_BDA, and GET/SET_EBDA) are available -to simplify these accesses. Also, an area in the 0xc0000-0xf0000 -memory range is made available for internal BIOS run-time variables -that are marked with the VARLOW attribute. These variables can then -be accessed with the GET/SET_LOW macros. +macros (GET_GLOBAL, GET/SET_BDA, and GET/SET_EBDA) are available to +simplify these accesses. Also, an area in the 0xc0000-0xf0000 memory +range is made available for internal BIOS run-time variables that are +marked with the VARLOW attribute. These variables can then be +accessed with the GET/SET_LOW macros.
Global variables defined in the C code can be read in 16bit mode if the variable declaration is marked with VAR16, VARFSEG, or VAR16FIXED. The GET_GLOBAL macro will then allow read access to the variable. Global variables are stored in the 0xf000 segment. Because the f-segment is marked read-only during run-time, the 16bit code is not -permitted to change the value of 16bit variables (use of the -SET_GLOBAL macro from 16bit mode will cause a link error). Code -running in 32bit mode can not access variables with VAR16, but can -access variables marked with VARFSEG, VARLOW, VAR16FIXED, or with no -marking at all. The 32bit code can use the GET/SET_GLOBAL macros, but -they are not required. +permitted to change the value of 16bit variables. Code running in +32bit mode can not access variables with VAR16, but can access +variables marked with VARFSEG, VARLOW, VAR16FIXED, or with no marking +at all. The 32bit code can use the GET_GLOBAL macros, but they are +not required.
GCC 16 bit stack limitations: diff --git a/src/biosvar.h b/src/biosvar.h index 051cd1e..58bcbce 100644 --- a/src/biosvar.h +++ b/src/biosvar.h @@ -99,10 +99,6 @@ static inline u16 get_global_seg(void) { #define GET_GLOBAL(var) \ GET_VAR(GLOBAL_SEGREG, *(typeof(&(var)))((void*)&(var) \ + get_global_offset())) -#define SET_GLOBAL(var, val) do { \ - ASSERT32FLAT(); \ - (var) = (val); \ - } while (0) #if MODESEGMENT #define GLOBALFLAT2GLOBAL(var) ((typeof(var))((void*)(var) - BUILD_BIOS_ADDR)) #else