* remove "\r" nonsense
[mascara-docs.git] / amd64 / bareMetalOS-0.5.3 / programs / sysinfo.asm
bloba7f8c22d1614388bc3aac105ad0d121f995eddaa
1 ; System Information Program (v1.0, July 6 2010)
2 ; Written by Ian Seyler
4 ; BareMetal compile:
5 ; nasm sysinfo.asm -o sysinfo.app
8 [BITS 64]
9 [ORG 0x0000000000200000]
11 %INCLUDE "bmdev.asm"
13 start: ; Start of program label
15 mov rsi, startmessage ; Load RSI with memory address of string
16 call b_print_string ; Print the string that RSI points to
18 ;Get processor brand string
19 xor rax, rax
20 mov rdi, tstring
21 mov eax, 0x80000002
22 cpuid
23 stosd
24 mov eax, ebx
25 stosd
26 mov eax, ecx
27 stosd
28 mov eax, edx
29 stosd
30 mov eax, 0x80000003
31 cpuid
32 stosd
33 mov eax, ebx
34 stosd
35 mov eax, ecx
36 stosd
37 mov eax, edx
38 stosd
39 mov eax, 0x80000004
40 cpuid
41 stosd
42 mov eax, ebx
43 stosd
44 mov eax, ecx
45 stosd
46 mov eax, edx
47 stosd
48 xor al, al
49 stosb ; Terminate the string
50 mov rsi, tstring
51 call b_string_parse
52 mov rsi, cpustringmsg
53 call b_print_string
54 mov rsi, tstring
55 call b_print_string
57 ; Number of cores
58 call b_print_newline
59 mov rsi, numcoresmsg
60 call b_print_string
61 xor rax, rax
62 mov rsi, 0x5012
63 lodsw
64 mov rdi, tstring
65 call b_int_to_string
66 mov rsi, tstring
67 call b_print_string
69 ; Speed
70 call b_print_newline
71 mov rsi, speedmsg
72 call b_print_string
73 xor rax, rax
74 mov rsi, 0x5010
75 lodsw
76 mov rdi, tstring
77 call b_int_to_string
78 mov rsi, tstring
79 call b_print_string
80 mov rsi, mhzmsg
81 call b_print_string
83 ; L1 code/data cache info
84 call b_print_newline
85 mov eax, 0x80000005 ; L1 cache info
86 cpuid
87 mov eax, edx ; EDX bits 31 - 24 store code L1 cache size in KBs
88 shr eax, 24
89 mov rdi, tstring
90 call b_int_to_string
91 mov rsi, l1ccachemsg
92 call b_print_string
93 mov rsi, tstring
94 call b_print_string
95 mov rsi, kbmsg
96 call b_print_string
97 call b_print_newline
98 mov eax, ecx ; ECX bits 31 - 24 store data L1 cache size in KBs
99 shr eax, 24
100 mov rdi, tstring
101 call b_int_to_string
102 mov rsi, l1dcachemsg
103 call b_print_string
104 mov rsi, tstring
105 call b_print_string
106 mov rsi, kbmsg
107 call b_print_string
109 ; L2/L3 cache info
110 call b_print_newline
111 mov eax, 0x80000006 ; L2/L3 cache info
112 cpuid
113 mov eax, ecx ; ecx bits 31 - 16 store unified L2 cache size in KBs
114 shr eax, 16
115 mov rdi, tstring
116 call b_int_to_string
117 mov rsi, l2ucachemsg
118 call b_print_string
119 mov rsi, tstring
120 call b_print_string
121 mov rsi, kbmsg
122 call b_print_string
124 call b_print_newline
125 mov eax, edx ; edx bits 31 - 18 store unified L3 cache size in 512 KB chunks
126 shr eax, 18
127 and eax, 0x3FFFF ; Clear bits 18 - 31
128 shl eax, 9 ; Convert the value for 512 KB chunks to KBs (Multiply by 512)
129 mov rdi, tstring
130 call b_int_to_string
131 mov rsi, l3ucachemsg
132 call b_print_string
133 mov rsi, tstring
134 call b_print_string
135 mov rsi, kbmsg
136 call b_print_string
138 ;CPU features
139 call b_print_newline
140 mov rsi, cpufeatures
141 call b_print_string
142 mov rax, 1
143 cpuid
145 checksse:
146 test edx, 00000010000000000000000000000000b
147 jz checksse2
148 mov rsi, sse
149 call b_print_string
151 checksse2:
152 test edx, 00000100000000000000000000000000b
153 jz checksse3
154 mov rsi, sse2
155 call b_print_string
157 checksse3:
158 test ecx, 00000000000000000000000000000001b
159 jz checkssse3
160 mov rsi, sse3
161 call b_print_string
163 checkssse3:
164 test ecx, 00000000000000000000001000000000b
165 jz checksse41
166 mov rsi, ssse3
167 call b_print_string
169 checksse41:
170 test ecx, 00000000000010000000000000000000b
171 jz checksse42
172 mov rsi, sse41
173 call b_print_string
175 checksse42:
176 test ecx, 00000000000100000000000000000000b
177 jz checkaes
178 mov rsi, sse42
179 call b_print_string
181 checkaes:
182 test ecx, 00000010000000000000000000000000b
183 jz checkavx
184 mov rsi, aes
185 call b_print_string
187 checkavx:
188 test ecx, 00010000000000000000000000000000b
189 jz endit
190 mov rsi, avx
191 call b_print_string
193 endit:
194 ;RAM
195 call b_print_newline
196 mov rsi, memmessage
197 call b_print_string
198 xor rax, rax
199 mov rsi, 0x5020
200 lodsw
201 mov rdi, tstring
202 call b_int_to_string
203 mov rsi, tstring
204 call b_print_string
205 mov rsi, mbmsg
206 call b_print_string
209 call b_print_newline
211 ret ; Return to OS
213 startmessage: db 'System Information:', 13, 0
214 cpustringmsg: db 'CPU String: ', 0
215 numcoresmsg: db 'Number of cores: ', 0
216 speedmsg: db 'Detected speed: ', 0
217 l1ccachemsg: db 'L1 code cache: ', 0
218 l1dcachemsg: db 'L1 data cache: ', 0
219 l2ucachemsg: db 'L2 unified cache: ', 0
220 l3ucachemsg: db 'L3 unified cache: ', 0
221 cpufeatures: db 'CPU features: ', 0
222 kbmsg: db ' KiB', 0
223 mbmsg: db ' MiB', 0
224 mhzmsg: db ' MHz', 0
225 sse: db 'SSE ', 0
226 sse2: db 'SSE2 ', 0
227 sse3: db 'SSE3 ', 0
228 ssse3: db 'SSSE3 ', 0
229 sse41: db 'SSE4.1 ', 0
230 sse42: db 'SSE4.2 ', 0
231 aes: db 'AES ', 0
232 avx: db 'AVX ', 0
233 memmessage: db 'RAM: ', 0
235 tstring: times 50 db 0