Remove push/pops

This commit is contained in:
Robbe Van Herck 2019-12-30 16:46:57 +01:00
parent bf8c360063
commit 69a76bb94d
No known key found for this signature in database
GPG key ID: A66F76F7B81BD784

View file

@ -14,20 +14,10 @@ jmp .start
; Function: check_a20 ; Function: check_a20
; ;
; Purpose: to check the status of the a20 line in a completely self-contained state-preserving way.
; The function can be modified as necessary by removing push's at the beginning and their
; respective pop's at the end if complete self-containment is not required.
;
; Returns: 0 in ax if the a20 line is disabled (memory wraps around) ; Returns: 0 in ax if the a20 line is disabled (memory wraps around)
; 1 in ax if the a20 line is enabled (memory does not wrap around) ; 1 in ax if the a20 line is enabled (memory does not wrap around)
check_a20: check_a20:
pushf
push ds
push es
push di
push si
cli cli
xor ax, ax ; ax = 0 xor ax, ax ; ax = 0
@ -40,34 +30,26 @@ check_a20:
mov si, 0x0510 mov si, 0x0510
mov al, byte [es:di] mov al, byte [es:di]
push ax mov bx, ax
mov al, byte [ds:si] mov al, byte [ds:si]
push ax
mov byte [es:di], 0x00 mov byte [es:di], 0x00
mov byte [ds:si], 0xFF mov byte [ds:si], 0xFF
cmp byte [es:di], 0xFF cmp byte [es:di], 0xFF
pop ax
mov byte [ds:si], al mov byte [ds:si], al
pop ax mov ax, bx
mov byte [es:di], al mov byte [es:di], al
mov ax, 0 mov ax, 0
je check_a20__exit je .check_a20__exit
mov ax, 1 mov ax, 1
check_a20__exit: .check_a20__exit:
pop si
pop di
pop es
pop ds
popf
ret ret
;;; Print string at bx ;;; Print string at bx
@ -163,8 +145,6 @@ call puthex
mov cx, 2 ; start at sector 2 (skip bootloader) mov cx, 2 ; start at sector 2 (skip bootloader)
mov bx, ELF_START ; write to ELF_START mov bx, ELF_START ; write to ELF_START
push bx
push cx
.read_disk_loop: .read_disk_loop:
; Read sector dl into memory ; Read sector dl into memory
@ -182,12 +162,8 @@ jc .read_disk_error
cmp cx, NUM_SECTORS cmp cx, NUM_SECTORS
jge .read_disk_end ; we have reached the sector limit, time to boot jge .read_disk_end ; we have reached the sector limit, time to boot
pop cx
pop bx
inc cl ; next sector inc cl ; next sector
add bx, 512 ; add 512 to data start so we don't overwrite sectors add bx, 512 ; add 512 to data start so we don't overwrite sectors
push bx
push cx
jmp .read_disk_loop jmp .read_disk_loop