[comboot] Support COMBOOT in 64-bit builds

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2016-04-14 16:48:41 +01:00
parent 4afb758423
commit 5e5450c2d0
12 changed files with 180 additions and 102 deletions

View File

@@ -1,40 +0,0 @@
bits 16
org 100h
jmp start
shuffle_start:
push 0xB800
pop es
mov cx, 80*24*2
mov ax, 'AA'
xor di, di
rep stosw
.lbl: jmp .lbl
shuffle_end:
nop
shuffle_len equ (shuffle_end - shuffle_start + 1)
start:
; calculate physical address of shuffled part
xor eax, eax
push ds
pop ax
shl eax, 4
add ax, shuffle_start
mov dword [source], eax
mov ax, 0012h
mov di, shuffle_descriptors
mov cx, num_shuffle_descriptors
mov ebp, 0x7c00
int 22h
int3
shuffle_descriptors:
dd 0x7C00
source: dd 0
dd shuffle_len
num_shuffle_descriptors equ 1

View File

@@ -1,136 +0,0 @@
bits 16
org 100h
_start:
; first check for SYSLINUX
mov ah, 30h
int 21h
cmp eax, 59530000h
jne .not_syslinux
cmp ebx, 4c530000h
jne .not_syslinux
cmp ecx, 4e490000h
jne .not_syslinux
cmp edx, 58550000h
jne .not_syslinux
; now get syslinux version
mov ax, 0001h
int 22h
push cx
push dx
push di
push si
push es
; print version string
mov dx, str_version
mov ah, 09h
int 21h
pop es
pop bx
push es
mov ax, 0002h
int 22h
; print copyright string
mov dx, str_copyright
mov ah, 09h
int 21h
pop es
pop bx
mov ax, 0002h
int 22h
; print syslinux derivative id
mov dx, str_derivative
mov ah, 09h
int 21h
pop ax
call print_hex_byte
; print version number
mov dx, str_version_num
mov ah, 09h
int 21h
pop cx
push cx
mov ax, cx
and ax, 0FFh
call print_dec_word
mov dl, '.'
mov ah, 02h
int 21h
pop cx
mov ax, cx
shr ax, 8
call print_dec_word
ret
.not_syslinux:
mov dx, str_not_syslinux
mov ah, 09h
int 21h
ret
; input: al = byte to print in hex
print_hex_byte:
push ax
shr al, 4
call print_hex_nybble
pop ax
call print_hex_nybble
ret
; input: bottom half of al = nybble to print in hex
print_hex_nybble:
push ax
mov bl, al
and bx, 1111b
mov dl, [str_hex + bx]
mov ah, 02h
int 21h
pop ax
ret
str_hex: db "01234567890abcdef"
; input: ax = word to print
print_dec_word:
mov cx, 10
mov word [.count], 0
.loop:
xor dx, dx
div cx
inc word [.count]
push dx
test ax, ax
jnz .loop
.print:
pop dx
add dx, '0'
mov ah, 02h
int 21h
dec word [.count]
jnz .print
ret
.count: dw 0
str_not_syslinux: db "Not SYSLINUX or derivative (running on DOS?)$"
str_version: db "Version: $"
str_copyright: db 10, "Copyright: $"
str_derivative: db 10, "Derivative ID: 0x$"
str_version_num: db 10, "Version number: $"