summaryrefslogtreecommitdiff
path: root/gpxe/src/tests/comboot/version.asm
blob: 01140423902f33a489ea7a8a039284f9e211fe43 (plain)
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: $"