Requesting the BIOS' memory map
This commit is contained in:
parent
68d47cd451
commit
ae735033f0
2 changed files with 53 additions and 1 deletions
11
Qcommon.c
11
Qcommon.c
|
|
@ -40,12 +40,23 @@ void serial_write(const char *msg)
|
|||
}
|
||||
|
||||
extern void bios_write(const char *msg, unsigned length);
|
||||
extern void *bios_getmap(void *buffer);
|
||||
|
||||
unsigned char memmap[24 * 128];
|
||||
|
||||
void
|
||||
main()
|
||||
{
|
||||
bios_write("init\r\n", 6);
|
||||
void *end = bios_getmap(memmap);
|
||||
bios_write("karlos\r\n", 8);
|
||||
for (int i = 0; ; i++) {
|
||||
unsigned char *entry = memmap + 24 * i;
|
||||
if (entry >= end) break;
|
||||
unsigned char type = *(entry + 16);
|
||||
char c = type < 10 ? type + '0' : '?';
|
||||
bios_write(&c, 1);
|
||||
}
|
||||
for (;;) {
|
||||
__asm__ ("hlt" :);
|
||||
}
|
||||
|
|
|
|||
43
Rnbp.S
43
Rnbp.S
|
|
@ -1,4 +1,4 @@
|
|||
// vim: et:sw=12:ts=12:sts=12
|
||||
// vim: ft=gas:et:sw=12:ts=12:sts=12
|
||||
|
||||
.global _start
|
||||
|
||||
|
|
@ -13,6 +13,7 @@
|
|||
.code32
|
||||
mov $SS_DATA16, %ax
|
||||
mov %ax, %ds
|
||||
mov %ax, %es
|
||||
mov %ax, %ss
|
||||
ljmp $SS_CODE16, $9f
|
||||
9: .code16
|
||||
|
|
@ -22,6 +23,7 @@
|
|||
.code16
|
||||
mov $SS_DATA32, %ax
|
||||
mov %ax, %ds
|
||||
mov %ax, %es
|
||||
mov %ax, %ss
|
||||
ljmp $SS_CODE32, $9f
|
||||
9: .code32
|
||||
|
|
@ -164,6 +166,45 @@ bios_write: push %ebp
|
|||
pop %ebp
|
||||
ret
|
||||
|
||||
.global bios_getmap
|
||||
.code32
|
||||
bios_getmap:push %ebp
|
||||
mov %esp, %ebp
|
||||
push %ebx
|
||||
push %edi
|
||||
|
||||
mov 8+0(%ebp), %edi
|
||||
|
||||
PROT16
|
||||
.code16
|
||||
REAL
|
||||
|
||||
xor %ebx, %ebx
|
||||
_gmnext: movl $0, 20(%di)
|
||||
mov $0x534D4150, %edx // e820 magic number
|
||||
mov $24, %ecx
|
||||
mov $0xE820, %eax
|
||||
int $0x15
|
||||
jc _gmdone
|
||||
test %ebx, %ebx
|
||||
jz _gmdone
|
||||
add $24, %di
|
||||
jmp _gmnext
|
||||
_gmdone: add $24, %di
|
||||
|
||||
|
||||
PROT
|
||||
PROT32
|
||||
.code32
|
||||
|
||||
mov %edi, %eax
|
||||
|
||||
pop %edi
|
||||
pop %ebx
|
||||
mov %ebp, %esp
|
||||
pop %ebp
|
||||
ret
|
||||
|
||||
.data
|
||||
|
||||
real_ss: .word 0
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue