Bootloader: Clear screen, better memcpy
Clear screen before jumping to kernel. Memcpy now uses ebx as offset register, so only one register has to updated every loop
This commit is contained in:
parent
95af728e39
commit
d1444761a3
|
@ -82,15 +82,20 @@ stage2_main:
|
||||||
|
|
||||||
call elf_read_kernel_to_memory
|
call elf_read_kernel_to_memory
|
||||||
|
|
||||||
cli
|
# re-enter 80x25 text mode to clear screen
|
||||||
|
pushw %ax
|
||||||
|
movb $0x03, %al
|
||||||
|
movb $0x00, %ah
|
||||||
|
int $0x10
|
||||||
|
popw %ax
|
||||||
|
|
||||||
|
cli
|
||||||
|
|
||||||
# setup protected mode
|
# setup protected mode
|
||||||
movl %cr0, %ebx
|
movl %cr0, %ebx
|
||||||
orb $1, %bl
|
orb $1, %bl
|
||||||
movl %ebx, %cr0
|
movl %ebx, %cr0
|
||||||
|
|
||||||
|
|
||||||
# jump to kernel in protected mode
|
# jump to kernel in protected mode
|
||||||
ljmpl $0x18, $protected_mode
|
ljmpl $0x18, $protected_mode
|
||||||
|
|
||||||
|
|
|
@ -170,7 +170,7 @@ elf_read_kernel_to_memory:
|
||||||
andl $0x7FFFFFFF, %edi
|
andl $0x7FFFFFFF, %edi
|
||||||
movl (elf_program_header + p_filesz), %ecx
|
movl (elf_program_header + p_filesz), %ecx
|
||||||
|
|
||||||
call print_hex32; call print_newline
|
#call print_hex32; call print_newline
|
||||||
|
|
||||||
call *%esi
|
call *%esi
|
||||||
|
|
||||||
|
|
|
@ -409,13 +409,14 @@ ext2_inode_read_bytes:
|
||||||
addl %edx, %esi
|
addl %edx, %esi
|
||||||
|
|
||||||
# very dumb memcpy with 32 bit addresses
|
# very dumb memcpy with 32 bit addresses
|
||||||
|
movl $0, %ebx
|
||||||
.ext2_inode_read_bytes_memcpy_partial:
|
.ext2_inode_read_bytes_memcpy_partial:
|
||||||
movb (%esi), %al
|
movb (%esi, %ebx), %al
|
||||||
movb %al, (%edi)
|
movb %al, (%edi, %ebx)
|
||||||
incl %esi
|
incl %ebx
|
||||||
incl %edi
|
|
||||||
decl %ecx
|
decl %ecx
|
||||||
jnz .ext2_inode_read_bytes_memcpy_partial
|
jnz .ext2_inode_read_bytes_memcpy_partial
|
||||||
|
addl %ebx, %edi
|
||||||
|
|
||||||
# check if all sectors are read
|
# check if all sectors are read
|
||||||
cmpl $0, 4(%esp)
|
cmpl $0, 4(%esp)
|
||||||
|
@ -441,13 +442,14 @@ ext2_inode_read_bytes:
|
||||||
|
|
||||||
# very dumb memcpy with 32 bit addresses
|
# very dumb memcpy with 32 bit addresses
|
||||||
movl $ext2_block_buffer, %esi
|
movl $ext2_block_buffer, %esi
|
||||||
|
movl $0, %ebx
|
||||||
.ext2_inode_read_bytes_memcpy:
|
.ext2_inode_read_bytes_memcpy:
|
||||||
movb (%esi), %al
|
movb (%esi, %ebx), %al
|
||||||
movb %al, (%edi)
|
movb %al, (%edi, %ebx)
|
||||||
incl %esi
|
incl %ebx
|
||||||
incl %edi
|
|
||||||
decl %ecx
|
decl %ecx
|
||||||
jnz .ext2_inode_read_bytes_memcpy
|
jnz .ext2_inode_read_bytes_memcpy
|
||||||
|
addl %ebx, %edi
|
||||||
|
|
||||||
# read next block if more sectors remaining
|
# read next block if more sectors remaining
|
||||||
cmpl $0, 4(%esp)
|
cmpl $0, 4(%esp)
|
||||||
|
|
Loading…
Reference in New Issue