1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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: $"
|