Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / tests / comboot / version.asm
diff --git a/qemu/roms/ipxe/src/tests/comboot/version.asm b/qemu/roms/ipxe/src/tests/comboot/version.asm
new file mode 100644 (file)
index 0000000..0114042
--- /dev/null
@@ -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: $"