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