// vim: ft=gas:et:sw=12:ts=12:sts=12 .include "src/mode.S" .global bios_write .code32 bios_write: push %ebp mov %esp, %ebp push %ebx mov 8+0(%ebp), %edx mov 8+4(%ebp), %ecx PROT16 REAL .bwloop: test %ecx, %ecx jz .bwreturn xor %bx, %bx mov $0x0E, %ah mov (%edx), %al push %ecx push %edx int $0x10 pop %edx pop %ecx add $1, %edx sub $1, %ecx jmp .bwloop .bwreturn: PROT PROT32 pop %ebx mov %ebp, %esp pop %ebp ret .global bios_getmap .code32 bios_getmap:push %ebp mov %esp, %ebp push %ebx push %edi mov 8+0(%ebp), %edi PROT16 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 mov %edi, %eax pop %edi pop %ebx mov %ebp, %esp pop %ebp ret