26,7 → 26,7 |
#include <ll/i386/mb-info.h> |
#include <ll/i386/x-bios.h> |
|
FILE(X - Info); |
FILE(X-Info); |
|
/* |
The x_bios is stored in the low memory area and contains all the |
34,10 → 34,9 |
using a linear pointer, which is returned by the following call! |
*/ |
|
X_CALLBIOS *x_bios_address(void) |
X_CALLBIOS * x_bios_address(void) |
{ |
X_CALLBIOS *a = |
(X_CALLBIOS *) GDT_read(X_CALLBIOS_SEL, NULL, NULL, NULL); |
X_CALLBIOS *a = (X_CALLBIOS *)GDT_read(X_CALLBIOS_SEL,NULL,NULL,NULL); |
return (a); |
} |
|
46,30 → 45,32 |
WORD X_version(void) |
{ |
X_CALLBIOS *x_bios = x_bios_address(); |
return (x_bios->ver); |
return(x_bios->_ver); |
} |
|
void X_meminfo(LIN_ADDR * b1, DWORD * s1, LIN_ADDR * b2, DWORD * s2) |
void X_meminfo(LIN_ADDR *b1,DWORD *s1,LIN_ADDR *b2,DWORD *s2) |
{ |
struct multiboot_info *mbi = mbi_address(); |
if (mbi->flags & MB_INFO_USEGDT) { |
if (b1 != NULL) |
*b1 = (LIN_ADDR) mbi->mem_upbase; |
if (s1 != NULL) |
*s1 = mbi->mem_upper * 1024; |
if (b2 != NULL) |
*b2 = (LIN_ADDR) mbi->mem_lowbase; |
if (s2 != NULL) |
*s2 = mbi->mem_lower * 1024; |
int x = 0; |
|
if (mbi->flags & MB_INFO_BOOT_LOADER_NAME) { |
char *name; |
|
name = (char *) mbi->boot_loader_name; |
if (*name == 'X') { |
x = 1; |
} |
} |
if (x) { |
if (b1 != NULL) *b1 = (LIN_ADDR)mbi->mem_upbase; |
if (s1 != NULL) *s1 = mbi->mem_upper * 1024; |
if (b2 != NULL) *b2 = (LIN_ADDR)mbi->mem_lowbase; |
if (s2 != NULL) *s2 = mbi->mem_lower * 1024; |
} else { |
if (b1 != NULL) |
*b1 = (LIN_ADDR) 0x100000; |
if (s1 != NULL) |
*s1 = mbi->mem_upper * 1024; |
if (b2 != NULL) |
*b2 = (LIN_ADDR) 0x4000; |
if (s2 != NULL) |
*s2 = mbi->mem_lower * 1024; |
if (b1 != NULL) *b1 = (LIN_ADDR)0x100000; |
if (s1 != NULL) *s1 = mbi->mem_upper * 1024; |
if (b2 != NULL) *b2 = (LIN_ADDR)0x4000; |
if (s2 != NULL) *s2 = mbi->mem_lower * 1024; |
} |
/* |
#ifdef __OLD_MB__ |
91,12 → 92,11 |
/* Alert if a wrong addressing is intercepted */ |
/* Used only for debug purposes */ |
|
void check_addr(void *addr, char *caller) |
void check_addr(void *addr,char *caller) |
{ |
extern DWORD _stktop; |
if ((DWORD) (addr) < _stktop) { |
cprintf("CRISIS! Addr : %lx(%lx) Caller was %s\n", (DWORD) (addr), |
_stktop, caller); |
if ((DWORD)(addr) < _stktop) { |
cprintf("CRISIS! Addr : %lx(%lx) Caller was %s\n",(DWORD)(addr),_stktop,caller); |
} |
} |
#endif |