fernlader2/src/bios.S

80 lines
1.8 KiB
ArmAsm
Raw Normal View History

2026-02-18 10:40:02 +01:00
// 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