| 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: $" |