mirror of
https://github.com/ipxe/ipxe
synced 2025-12-20 20:10:18 +03:00
[comboot] Add COMBOOT and COM32 support
This commit is contained in:
committed by
Michael Brown
parent
aa28544373
commit
e8b22f203f
40
src/tests/comboot/shuffle-simple.asm
Normal file
40
src/tests/comboot/shuffle-simple.asm
Normal file
@@ -0,0 +1,40 @@
|
||||
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
|
||||
|
||||
136
src/tests/comboot/version.asm
Normal file
136
src/tests/comboot/version.asm
Normal file
@@ -0,0 +1,136 @@
|
||||
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: $"
|
||||
Reference in New Issue
Block a user