Subversion Repositories Kolibri OS

Rev

Rev 2057 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2057 Rev 2235
1
;***************************************************************
1
;***************************************************************
2
; project name:    PCI Device Enumeration
2
; project name:    PCI Device Enumeration
3
; target platform: KolibriOS
3
; target platform: KolibriOS
4
; compiler:        flat assembler 1.68
4
; compiler:        flat assembler 1.68
5
; version:         2.3
5
; version:         2.3
6
; last update:     Jule 2011
6
; last update:     Jule 2011
7
; maintained by:   Jason Delozier 
7
; maintained by:   Jason Delozier 
8
;                  Sergey Kuzmin 
8
;                  Sergey Kuzmin 
9
;                  Mihailov Ilia 
9
;                  Mihailov Ilia 
10
;                  Marat Zakiyanov 
10
;                  Marat Zakiyanov 
11
;                  Artem Jerdev  
11
;                  Artem Jerdev  
12
;                  Evgeny Grechnikov (diamond)
12
;                  Evgeny Grechnikov (diamond)
13
;                  Veronica (CleverMouse)
13
;                  Veronica (CleverMouse)
14
; old project site:  http://www.coolthemes.narod.ru/pcidev.html
14
; old project site:  http://www.coolthemes.narod.ru/pcidev.html
15
; new project site:  http://board.kolibrios.org/viewtopic.php?f=42&t=73
15
; new project site:  http://board.kolibrios.org/viewtopic.php?f=42&t=73
16
;***************************************************************
16
;***************************************************************
17
;Summary: This program will attempt to scan the PCI Bus
17
;Summary: This program will attempt to scan the PCI Bus
18
;        and display basic information about each device
18
;        and display basic information about each device
19
;        connected to the PCI Bus.
19
;        connected to the PCI Bus.
20
;***************************************************************
20
;***************************************************************
21
;-----------------------------------------------------------------------------
21
;-----------------------------------------------------------------------------
22
include '../../../macros.inc'
22
include '../../../macros.inc'
23
 
23
 
24
include	'../../../develop/libraries/box_lib/load_lib.mac'
24
include	'../../../develop/libraries/box_lib/load_lib.mac'
25
;-----------------------------------------------------------------------------
25
;-----------------------------------------------------------------------------
26
	use32
26
	use32
27
	org 0x0
27
	org 0x0
28
	db 'MENUET01'	; 8 byte id
28
	db 'MENUET01'	; 8 byte id
29
	dd 0x01		; header version
29
	dd 0x01		; header version
30
	dd START	; start of code
30
	dd START	; start of code
31
	dd IM_END	; size of image
31
	dd IM_END	; size of image
32
	dd I_END	; memory for app
32
	dd I_END	; memory for app
33
	dd stacktop	; esp
33
	dd stacktop	; esp
34
	dd 0	; I_Param
34
	dd 0	; I_Param
35
	dd path		; APPLICATION PATH
35
	dd path		; APPLICATION PATH
36
;-----------------------------------------------------------------------------
36
;-----------------------------------------------------------------------------
37
@use_library	; load_lib macro
37
@use_library	; load_lib macro
38
;-----------------------------------------------------------------------------
38
;-----------------------------------------------------------------------------
39
START:
39
START:
40
	mcall	68,11
40
	mcall	68,11
41
	mcall	66,1,1
41
	mcall	66,1,1
42
;-----------------------------------------------------------------------------
42
;-----------------------------------------------------------------------------
43
load_libraries l_libs_start,end_l_libs
43
load_libraries l_libs_start,end_l_libs
44
;-----------------------------------------------------------------------------
44
;-----------------------------------------------------------------------------
45
;OpenDialog	initialisation
45
;OpenDialog	initialisation
46
	push    dword OpenDialog_data
46
	push    dword OpenDialog_data
47
	call    [OpenDialog_Init]
47
	call    [OpenDialog_Init]
48
	
48
	
49
	mov	edi,filename_area
49
	mov	edi,filename_area
50
	mov	esi,start_temp_file_name
50
	mov	esi,start_temp_file_name
51
	call	copy_file_name_path
51
	call	copy_file_name_path
52
;-----------------------------------------------------------------------------
52
;-----------------------------------------------------------------------------
53
	mcall	68,12,4096*4 ; 16 Kb - I hope this will be enough for store of data
53
	mcall	68,12,4096*4 ; 16 Kb - I hope this will be enough for store of data
54
	mov	[store_text_area_start],eax
54
	mov	[store_text_area_start],eax
55
;-----------------------------------------------------------------------------	
55
;-----------------------------------------------------------------------------	
56
	call draw_window
56
	call draw_window
57
still:
57
still:
58
	mcall	10			; wait here for event
58
	mcall	10			; wait here for event
59
	dec	eax			; redraw request ?
59
	dec	eax			; redraw request ?
60
	jz	red
60
	jz	red
61
	dec	eax			; key in buffer ?
61
	dec	eax			; key in buffer ?
62
	jz	key
62
	jz	key
63
	dec	eax			; button in buffer ?
63
	dec	eax			; button in buffer ?
64
	jz	button
64
	jz	button
65
	jmp	still
65
	jmp	still
66
;-----------------------------------------------------------------------------
66
;-----------------------------------------------------------------------------
67
red:					; redraw
67
red:					; redraw
68
	call	get_window_param
68
	call	get_window_param
69
	mov	eax, [Proc_Info.box.left]; store the window coordinates into the Form Structure
69
	mov	eax, [Proc_Info.box.left]; store the window coordinates into the Form Structure
70
	mov	[Form + 2], ax		; x start position
70
	mov	[Form + 2], ax		; x start position
71
	mov	eax, [Proc_Info.box.top];
71
	mov	eax, [Proc_Info.box.top];
72
	mov	[Form + 6], ax		; ystart position
72
	mov	[Form + 6], ax		; ystart position
73
	mov	eax, [Proc_Info.box.width]	;
73
	mov	eax, [Proc_Info.box.width]	;
74
	mov	[Form], ax		; window width
74
	mov	[Form], ax		; window width
75
	mov	eax, [Proc_Info.box.height]	;
75
	mov	eax, [Proc_Info.box.height]	;
76
	mov	[Form + 4] ,ax		; window height
76
	mov	[Form + 4] ,ax		; window height
77
	call	draw_window		; go redraw window now
77
	call	draw_window		; go redraw window now
78
	jmp	still
78
	jmp	still
79
;-----------------------------------------------------------------------------
79
;-----------------------------------------------------------------------------
80
key:					; key
80
key:					; key
81
	mcall	2			; just read it and ignore
81
	mcall	2			; just read it and ignore
82
	cmp	[extended_key],1
82
	cmp	[extended_key],1
83
	je	.extended_key
83
	je	.extended_key
84
	test	al, al
84
	test	al, al
85
	jnz	still
85
	jnz	still
86
	cmp	ah, 0xE0
86
	cmp	ah, 0xE0
87
	jne	@f
87
	jne	@f
88
	mov	[extended_key],1
88
	mov	[extended_key],1
89
	jmp	still
89
	jmp	still
90
@@:
90
@@:
91
	cmp	ah,129	; Esc
91
	cmp	ah,129	; Esc
92
	je	button.exit
92
	je	button.exit
93
	cmp	ah,159
93
	cmp	ah,159
94
	je	call_OpenDialog
94
	je	call_OpenDialog
95
	jmp	still
95
	jmp	still
96
.extended_key:
96
.extended_key:
97
	mov	[extended_key],0
97
	mov	[extended_key],0
98
	cmp	ah,129	; Esc
98
	cmp	ah,129	; Esc
99
	je	button.exit
99
	je	button.exit
100
	cmp	ah,159
100
	cmp	ah,159
101
	je	call_OpenDialog
101
	je	call_OpenDialog
102
	jmp	still
102
	jmp	still
103
;-----------------------------------------------------------------------------
103
;-----------------------------------------------------------------------------
104
button: 				; button
104
button: 				; button
105
	mcall	17			; get id
105
	mcall	17			; get id
106
	cmp	ah,2
106
	cmp	ah,2
107
	je	call_OpenDialog
107
	je	call_OpenDialog
108
	cmp	ah, 1			; button id = 1 ?
108
	cmp	ah, 1			; button id = 1 ?
109
	jne	still
109
	jne	still
110
.exit:
110
.exit:
111
	mcall	-1			; close this program
111
	mcall	-1			; close this program
112
;-----------------------------------------------------------------------------
112
;-----------------------------------------------------------------------------
113
call_OpenDialog:
113
call_OpenDialog:
114
	mov	[OpenDialog_data.type],1	; Save
114
	mov	[OpenDialog_data.type],1	; Save
115
	
115
	
116
	push    dword OpenDialog_data
116
	push    dword OpenDialog_data
117
	call    [OpenDialog_Start]
117
	call    [OpenDialog_Start]
118
 
118
 
119
	cmp	[OpenDialog_data.status],2	; OpenDialog does not start
119
	cmp	[OpenDialog_data.status],2	; OpenDialog does not start
120
	je	.save_file_default_path
120
	je	.save_file_default_path
121
	
121
	
122
	cmp	[OpenDialog_data.status],1
122
	cmp	[OpenDialog_data.status],1
123
	jne	still
123
	jne	still
124
	
124
	
125
	call	store_data
125
	call	store_data
126
	jmp	still
126
	jmp	still
127
;----------------------------------------	
127
;----------------------------------------	
128
.save_file_default_path:
128
.save_file_default_path:
129
	mov	edi,file_name
129
	mov	edi,file_name
130
	mov	esi,file_default_path
130
	mov	esi,file_default_path
131
	call	copy_file_name_path
131
	call	copy_file_name_path
132
	call	store_data
132
	call	store_data
133
	jmp	still
133
	jmp	still
134
;----------------------------------------	
134
;----------------------------------------	
135
copy_file_name_path:
135
copy_file_name_path:
136
	xor	eax,eax
136
	xor	eax,eax
137
	cld
137
	cld
138
@@:
138
@@:
139
	lodsb
139
	lodsb
140
	stosb
140
	stosb
141
	test	eax,eax
141
	test	eax,eax
142
	jnz	@r
142
	jnz	@r
143
	ret
143
	ret
144
;-----------------------------------------------------------------------------
144
;-----------------------------------------------------------------------------
145
prepare_text_area:
145
prepare_text_area:
146
	mov	edi,[store_text_area_start]
146
	mov	edi,[store_text_area_start]
147
 
147
 
148
	push	edi
148
	push	edi
149
	mov	ecx,4096 ; 16 Kb - I hope this will be enough for store of data
149
	mov	ecx,4096 ; 16 Kb - I hope this will be enough for store of data
150
	mov	eax,dword '    '
150
	mov	eax,dword '    '
151
	cld
151
	cld
152
	rep	stosd
152
	rep	stosd
153
	pop	edi
153
	pop	edi
154
	
154
	
155
	mov	esi,PCIWin
155
	mov	esi,PCIWin
156
	xor	ecx,ecx
156
	xor	ecx,ecx
157
@@:
157
@@:
158
	mov	cl,[esi]
158
	mov	cl,[esi]
159
	inc	esi
159
	inc	esi
160
	rep	movsb
160
	rep	movsb
161
	mov	al,0Ah ; CR - carriage return
161
	mov	al,0Ah ; CR - carriage return
162
	stosb
162
	stosb
163
	cmp	[esi],byte 0xFF
163
	cmp	[esi],byte 0xFF
164
	jne	@r	
164
	jne	@r	
165
 
165
 
166
	mov	[store_text_area_end],edi
166
	mov	[store_text_area_end],edi
167
	
167
	
168
	xor	edi,edi
168
	xor	edi,edi
169
	ret
169
	ret
170
;-----------------------------------------------------------------------------		
170
;-----------------------------------------------------------------------------		
171
get_window_param:
171
get_window_param:
172
	mcall	9, Proc_Info, -1	; window redraw requested so get 
172
	mcall	9, Proc_Info, -1	; window redraw requested so get 
173
					; new window coordinates and size
173
					; new window coordinates and size
174
	ret
174
	ret
175
;-----------------------------------------------------------------------------	
175
;-----------------------------------------------------------------------------	
176
draw_window:
176
draw_window:
177
	call	prepare_text_area
177
	call	prepare_text_area
178
	
178
	
179
	mov	byte [total], 0
179
	mov	byte [total], 0
180
	mcall	12, 1			; start of draw
180
	mcall	12, 1			; start of draw
181
	; DRAW WINDOW
181
	; DRAW WINDOW
182
	mcall	0,dword [Form],dword [Form + 4],0x13ffffff,0x805080d0,title
182
	mcall	0,dword [Form],dword [Form + 4],0x13ffffff,0x805080d0,title
183
	
183
	
184
	call	get_window_param
184
	call	get_window_param
185
	
185
	
186
	mov	eax,[Proc_Info+70] ;status of window
186
	mov	eax,[Proc_Info+70] ;status of window
187
	test	eax,100b
187
	test	eax,100b
188
	jne	.end
188
	jne	.end
189
	
189
	
190
	mcall	8,<450,100>,<25,25>,2,0xC0C0C0
190
	mcall	8,<450,100>,<25,25>,2,0xC0C0C0
191
	shr	ecx,16
191
	shr	ecx,16
192
	mov	bx,cx
192
	mov	bx,cx
193
	add	ebx,13 shl 16+4
193
	add	ebx,13 shl 16+4
194
	mcall	4,,0x80000000,text_save_button
194
	mcall	4,,0x80000000,text_save_button
195
	add	bx,11
195
	add	bx,11
196
	mcall	,,,text_save_button.1
196
	mcall	,,,text_save_button.1
197
	; Insert horizontal bars  in list area
197
	; Insert horizontal bars  in list area
198
	mov	eax, 13 		; draw bar system function
198
	mov	eax, 13 		; draw bar system function
199
	mov	ebx, 18 		; set Xstart position of bar
199
	mov	ebx, 18 		; set Xstart position of bar
200
	shl	ebx, 16 		;
200
	shl	ebx, 16 		;
201
	mov	bx, word [Form] ; get width of window
201
	mov	bx, word [Form] ; get width of window
202
	sub	bx, 32			; bar is 32 pixels shorter then window width
202
	sub	bx, 32			; bar is 32 pixels shorter then window width
203
	mov	ecx, 119 * 65536 + 10	; set Ystart(109) and Height(10) of bar   109
203
	mov	ecx, 119 * 65536 + 10	; set Ystart(109) and Height(10) of bar   109
204
	mov	edx, 0xC0C0C0		; set color of bar
204
	mov	edx, 0xC0C0C0		; set color of bar
205
.again:	;begin draw bar loop
205
.again:	;begin draw bar loop
206
	mcall				; draw bar to window area
206
	mcall				; draw bar to window area
207
	shr	ecx, 16 		; move the Ystart position to working area
207
	shr	ecx, 16 		; move the Ystart position to working area
208
	add	ecx, 34 		; add 34 pixels to Y Start (moves bar down)
208
	add	ecx, 34 		; add 34 pixels to Y Start (moves bar down)
209
	cmp	cx, word [Form + 4]	; is the Ystart position outside of window area
209
	cmp	cx, word [Form + 4]	; is the Ystart position outside of window area
210
	jae	.nomo			; if so stop drawing bars
210
	jae	.nomo			; if so stop drawing bars
211
	sub	ecx, 14 		; if not, we only need 20 pixels between bar tops
211
	sub	ecx, 14 		; if not, we only need 20 pixels between bar tops
212
	shl	ecx, 16 		; set that values as Ystart
212
	shl	ecx, 16 		; set that values as Ystart
213
	add	ecx, 10 		; Bar Height is always 10 pixels
213
	add	ecx, 10 		; Bar Height is always 10 pixels
214
	jmp	.again			; draw another bar
214
	jmp	.again			; draw another bar
215
;-----------------------------------------------------------------------------
215
;-----------------------------------------------------------------------------
216
.nomo:					;done drawing bars here
216
.nomo:					;done drawing bars here
217
	; start PCI stuff
217
	; start PCI stuff
218
	call	Get_PCI_Info		; get pci version and last bus, scan for and draw each pci device
218
	call	Get_PCI_Info		; get pci version and last bus, scan for and draw each pci device
219
 
219
 
220
	; Window inteface
220
	; Window inteface
221
	mov	cx, [PCI_Version]
221
	mov	cx, [PCI_Version]
222
	add	ch, '0'
222
	add	ch, '0'
223
	mov	[PCIWin + 85], ch	; 0xBADCODE but it works !
223
	mov	[PCIWin + 85], ch	; 0xBADCODE but it works !
224
	mov	ch, cl
224
	mov	ch, cl
225
	shr	cl, 4
225
	shr	cl, 4
226
	and	ch, 0x0f
226
	and	ch, 0x0f
227
	add	cx, '00'
227
	add	cx, '00'
228
	mov	[PCIWin + 87], cx
228
	mov	[PCIWin + 87], cx
229
	mov	cl, [PCI_LastBus]	; will only work if [PCI_LastBus] < 10
229
	mov	cl, [PCI_LastBus]	; will only work if [PCI_LastBus] < 10
230
	add	cl, '0'
230
	add	cl, '0'
231
	mov	[PCIWin + 106], cl
231
	mov	[PCIWin + 106], cl
232
 
232
 
233
	mov	edx, PCIWin
233
	mov	edx, PCIWin
234
	mov	ebx, 20 * 65536 + 25	; x start, ystart of text
234
	mov	ebx, 20 * 65536 + 25	; x start, ystart of text
235
	mov	ecx, 0x224466		; color of text
235
	mov	ecx, 0x224466		; color of text
236
	mov	eax, 4
236
	mov	eax, 4
237
@@:
237
@@:
238
	movzx	esi, byte[edx]
238
	movzx	esi, byte[edx]
239
	inc	edx
239
	inc	edx
240
	mcall
240
	mcall
241
	add	ebx, 10
241
	add	ebx, 10
242
	add	edx, esi
242
	add	edx, esi
243
	cmp	byte[edx], -1
243
	cmp	byte[edx], -1
244
	jne	@b
244
	jne	@b
245
	; Quantity of devices...
245
	; Quantity of devices...
246
	movzx	ecx, byte [total]	; number to draw
246
	movzx	ecx, byte [total]	; number to draw
247
	mcall	47, 0x00020000,,150 * 65536 + 65, 0x224466
247
	mcall	47, 0x00020000,,150 * 65536 + 65, 0x224466
248
	
248
	
249
	mov	ebx,ecx
249
	mov	ebx,ecx
250
	mov	ecx,2
250
	mov	ecx,2
251
	mov	edi,[store_text_area_start]
251
	mov	edi,[store_text_area_start]
252
	add	edi,157
252
	add	edi,157
253
	push	edi
253
	push	edi
254
	call	binary_to_hex_string
254
	call	binary_to_hex_string
255
	pop	edi
255
	pop	edi
256
	mov	[edi+2],byte 'h'
256
	mov	[edi+2],byte 'h'
257
	
257
	
258
	mov	ah, [MMIO_allowed]
258
	mov	ah, [MMIO_allowed]
259
	or 	ah, ah
259
	or 	ah, ah
260
	jz 	@f
260
	jz 	@f
261
	mov	ah, [MMIO_Bus]	; =255 if MMIO disabled / not found
261
	mov	ah, [MMIO_Bus]	; =255 if MMIO disabled / not found
262
	and	ah, 0x7f
262
	and	ah, 0x7f
263
	inc	ah
263
	inc	ah
264
	jo	@f	
264
	jo	@f	
265
	call	Try_MMIO
265
	call	Try_MMIO
266
@@:
266
@@:
267
.end:
267
.end:
268
	mcall	12, 2			; end of draw
268
	mcall	12, 2			; end of draw
269
	ret
269
	ret
270
;-----------------------------------------------------------------------------
270
;-----------------------------------------------------------------------------
271
store_data:
271
store_data:
272
	mov	eax,[store_text_area_start]
272
	mov	eax,[store_text_area_start]
273
	mov	[fileinfo.return],eax
273
	mov	[fileinfo.return],eax
274
	mov	ebx,[store_text_area_end]
274
	mov	ebx,[store_text_area_end]
275
	sub	ebx,eax
275
	sub	ebx,eax
276
	inc	ebx
276
	inc	ebx
277
	mov	[fileinfo.size],ebx
277
	mov	[fileinfo.size],ebx
278
	mcall	70,fileinfo
278
	mcall	70,fileinfo
279
	ret
279
	ret
280
;-----------------------------------------------------------------------------
280
;-----------------------------------------------------------------------------
281
;* Gets the PCI Version and Last Bus
281
;* Gets the PCI Version and Last Bus
282
Get_PCI_Info:
282
Get_PCI_Info:
283
	mcall	62, 0
283
	mcall	62, 0
284
	mov	word [PCI_Version], ax
284
	mov	word [PCI_Version], ax
285
	mcall	62, 1
285
	mcall	62, 1
286
	mov	byte [PCI_LastBus], al
286
	mov	byte [PCI_LastBus], al
287
	;----------------------------------------------------------
287
	;----------------------------------------------------------
288
	;* Get all devices on PCI Bus
288
	;* Get all devices on PCI Bus
289
	cmp	al, 0xff		; 0xFF means no pci bus found
289
	cmp	al, 0xff		; 0xFF means no pci bus found
290
	jne	Pci_Exists		;
290
	jne	Pci_Exists		;
291
	ret				; if no bus then leave
291
	ret				; if no bus then leave
292
;-----------------------------------------------------------------------------	
292
;-----------------------------------------------------------------------------	
293
Pci_Exists:
293
Pci_Exists:
294
	mov	byte [V_Bus], 0 	; reset varibles
294
	mov	byte [V_Bus], 0 	; reset varibles
295
	mov	byte [V_Dev], 0 	;
295
	mov	byte [V_Dev], 0 	;
296
	mov	edx,  20 * 65536 + 110	; set start write position
296
	mov	edx,  20 * 65536 + 110	; set start write position
297
Start_Enum:
297
Start_Enum:
298
	mov	bl, 6			; get a dword
298
	mov	bl, 6			; get a dword
299
	mov	bh, byte [V_Bus]	; bus of pci device
299
	mov	bh, byte [V_Bus]	; bus of pci device
300
	mov	ch, byte [V_Dev]	; device number/function
300
	mov	ch, byte [V_Dev]	; device number/function
301
	mov	cl, 0			; offset to device/vendor id
301
	mov	cl, 0			; offset to device/vendor id
302
	mcall	62			; get ID's
302
	mcall	62			; get ID's
303
 
303
 
304
	cmp	ax, 0			; Vendor ID should not be 0 or 0xFFFF
304
	cmp	ax, 0			; Vendor ID should not be 0 or 0xFFFF
305
	je	nextDev 		; check next device if nothing exists here
305
	je	nextDev 		; check next device if nothing exists here
306
	
306
	
307
	cmp	ax, 0xffff		;
307
	cmp	ax, 0xffff		;
308
	je	nextDev 		;
308
	je	nextDev 		;
309
 
309
 
310
	mov	word [PCI_Vendor], ax	; There is a device here, save the ID's
310
	mov	word [PCI_Vendor], ax	; There is a device here, save the ID's
311
	shr	eax, 16 		;
311
	shr	eax, 16 		;
312
	mov	word [PCI_Device], ax	;
312
	mov	word [PCI_Device], ax	;
313
	mov	bl, 4			; Read config byte
313
	mov	bl, 4			; Read config byte
314
	mov	bh, byte [V_Bus]	; Bus #
314
	mov	bh, byte [V_Bus]	; Bus #
315
	mov	ch, byte [V_Dev]	; Device # on bus
315
	mov	ch, byte [V_Dev]	; Device # on bus
316
	mov	cl, 0x08		; Register to read (Get Revision)
316
	mov	cl, 0x08		; Register to read (Get Revision)
317
	mcall	62			; Read it
317
	mcall	62			; Read it
318
	
318
	
319
	mov	byte [PCI_Rev], al	; Save it
319
	mov	byte [PCI_Rev], al	; Save it
320
	mov	cl, 0x0b		; Register to read (Get class)
320
	mov	cl, 0x0b		; Register to read (Get class)
321
	mcall	62			; Read it
321
	mcall	62			; Read it
322
 
322
 
323
	mov	byte [PCI_Class], al	; Save it
323
	mov	byte [PCI_Class], al	; Save it
324
	mov	cl, 0x0a		; Register to read (Get Subclass)
324
	mov	cl, 0x0a		; Register to read (Get Subclass)
325
	mcall	62			; Read it
325
	mcall	62			; Read it
326
	mov	byte [PCI_SubClass], al; Save it
326
	mov	byte [PCI_SubClass], al; Save it
327
; by Mario79 august 2006
327
; by Mario79 august 2006
328
	mov	cl, 0x09		; Register to read (Get Interface)
328
	mov	cl, 0x09		; Register to read (Get Interface)
329
	mcall	62			; Read it
329
	mcall	62			; Read it
330
	
330
	
331
	mov  [PCI_Interface], al	; Save it
331
	mov  [PCI_Interface], al	; Save it
332
;
332
;
333
; by Ghost april 2007
333
; by Ghost april 2007
334
	mov	cl, 0x3c		; Register to read (Get IRQ)
334
	mov	cl, 0x3c		; Register to read (Get IRQ)
335
@@:
335
@@:
336
	mcall	62			; Read it
336
	mcall	62			; Read it
337
	
337
	
338
	mov	[PCI_IRQ], al		; Save it
338
	mov	[PCI_IRQ], al		; Save it
339
; by CleverMouse juny 2011
339
; by CleverMouse juny 2011
340
	mov	cl, 0x0e
340
	mov	cl, 0x0e
341
	mcall	62
341
	mcall	62
342
	
342
	
343
	push	eax
343
	push	eax
344
	inc	byte [total]		; one more device found
344
	inc	byte [total]		; one more device found
345
	call	Print_New_Device	; print device info to screen
345
	call	Print_New_Device	; print device info to screen
346
; don't scan for nonzero functions if zero function says "not multifunction device"
346
; don't scan for nonzero functions if zero function says "not multifunction device"
347
	pop	eax
347
	pop	eax
348
	test	al, al
348
	test	al, al
349
	js	nextDev
349
	js	nextDev
350
	
350
	
351
	test	byte [V_Dev], 7
351
	test	byte [V_Dev], 7
352
	jnz	nextDev
352
	jnz	nextDev
353
	
353
	
354
	or	byte [V_Dev], 7
354
	or	byte [V_Dev], 7
355
nextDev:
355
nextDev:
356
	inc	byte [V_Dev]		; next device on this bus
356
	inc	byte [V_Dev]		; next device on this bus
357
	jnz	Start_Enum		; jump until we reach zero
357
	jnz	Start_Enum		; jump until we reach zero
358
	;(used to be JNO which caused bug!!! 30-4-2006, JMD)
358
	;(used to be JNO which caused bug!!! 30-4-2006, JMD)
359
	mov	byte [V_Dev], 0 	; reset device number
359
	mov	byte [V_Dev], 0 	; reset device number
360
	inc	byte [V_Bus]		; next bus
360
	inc	byte [V_Bus]		; next bus
361
	mov	al, byte [PCI_LastBus]	; get last bus
361
	mov	al, byte [PCI_LastBus]	; get last bus
362
	cmp	byte [V_Bus], al	; was it last bus
362
	cmp	byte [V_Bus], al	; was it last bus
363
	jbe	Start_Enum		; if not jump to keep searching
363
	jbe	Start_Enum		; if not jump to keep searching
364
	ret
364
	ret
365
;-----------------------------------------------------------------------------
365
;-----------------------------------------------------------------------------
366
no_ummio_allowed:
366
no_ummio_allowed:
367
	xor 	al,al
367
	xor 	al,al
368
	mov 	[MMIO_allowed],al		; re-enter the subroutine
368
	mov 	[MMIO_allowed],al		; re-enter the subroutine
369
;------------------------------------------------------------------
369
;------------------------------------------------------------------
370
;* Print device info to screen
370
;* Print device info to screen
371
 
371
 
372
Print_New_Device:
372
Print_New_Device:
373
	xor 	esi, esi	    	; default text color
373
	xor 	esi, esi	    	; default text color
374
	mov 	cl, [MMIO_allowed]
374
	mov 	cl, [MMIO_allowed]
375
	or	cl,cl
375
	or	cl,cl
376
	jz	no_ummio_here
376
	jz	no_ummio_here
377
	mov 	ch, byte [V_Bus]
377
	mov 	ch, byte [V_Bus]
378
	mov 	cl, byte [V_Dev]
378
	mov 	cl, byte [V_Dev]
379
	mcall	62, 11		; detect uMMIO
379
	mcall	62, 11		; detect uMMIO
380
	
380
	
381
	and	ax,0x7fff
381
	and	ax,0x7fff
382
	inc 	ax			; -1 returned?
382
	inc 	ax			; -1 returned?
383
	jo 	no_ummio_allowed
383
	jo 	no_ummio_allowed
384
	
384
	
385
	inc 	ax			; -2 returned?
385
	inc 	ax			; -2 returned?
386
	jo 	no_ummio_here
386
	jo 	no_ummio_here
387
	
387
	
388
	inc 	ax			; -3 returned?
388
	inc 	ax			; -3 returned?
389
	jo 	no_ummio_here
389
	jo 	no_ummio_here
390
	
390
	
391
	mov 	esi, 0x990033   ; highlighted text color
391
	mov 	esi, 0x990033   ; highlighted text color
392
	mov 	bh, byte [V_Bus]
392
	mov 	bh, byte [V_Bus]
393
	mov 	bl, byte [V_Dev]
393
	mov 	bl, byte [V_Dev]
394
	mov 	byte [MMIO_Bus], bh
394
	mov 	byte [MMIO_Bus], bh
395
	mov 	byte [MMIO_Dev], bl
395
	mov 	byte [MMIO_Dev], bl
396
	add 	bh,'0'
396
	add 	bh,'0'
397
	mov 	[PCIWin + 129], bh	; uMMIO bus
397
	mov 	[PCIWin + 129], bh	; uMMIO bus
398
	mov 	al, bl
398
	mov 	al, bl
399
	shr 	al, 1
399
	shr 	al, 1
400
	shr 	al, 1
400
	shr 	al, 1
401
	shr 	al, 1
401
	shr 	al, 1
402
	add 	al,'0'
402
	add 	al,'0'
403
	mov 	[PCIWin + 131], al	; uMMIO device
403
	mov 	[PCIWin + 131], al	; uMMIO device
404
	and 	bl, 7
404
	and 	bl, 7
405
	add 	bl, '0'
405
	add 	bl, '0'
406
	mov 	[PCIWin + 133], bl	; uMMIO function
406
	mov 	[PCIWin + 133], bl	; uMMIO function
407
 
407
 
408
no_ummio_here:
408
no_ummio_here:
409
	movzx	ecx,word [PCI_Vendor]	; Pointer to number to be written
409
	movzx	ecx,word [PCI_Vendor]	; Pointer to number to be written
410
	mcall	47, 0x00040100		; Write Vendor ID
410
	mcall	47, 0x00040100		; Write Vendor ID
411
	
411
	
412
	call	store_4_digits
412
	call	store_4_digits
413
	
413
	
414
	and	edx, 0xFFFF		;*****************************************
414
	and	edx, 0xFFFF		;*****************************************
415
	or	edx, 54 * 65536 ; X start becomes 54
415
	or	edx, 54 * 65536 ; X start becomes 54
416
	movzx	ecx, word [PCI_Device]	; get Vendor ID
416
	movzx	ecx, word [PCI_Device]	; get Vendor ID
417
	mcall				; Draw Vendor ID to Window
417
	mcall				; Draw Vendor ID to Window
418
 
418
 
419
	call	store_4_digits
419
	call	store_4_digits
420
	
420
	
421
	and	edx, 0xFFFF		;*****************************************
421
	and	edx, 0xFFFF		;*****************************************
422
	or	edx, 98 * 65536 ; X start becomes 98
422
	or	edx, 98 * 65536 ; X start becomes 98
423
	movzx	ecx, byte [V_Bus]	; get bus number
423
	movzx	ecx, byte [V_Bus]	; get bus number
424
	mcall	,0x00020100		; draw bus number to screen
424
	mcall	,0x00020100		; draw bus number to screen
425
 
425
 
426
	call	store_2_digits
426
	call	store_2_digits
427
	
427
	
428
	and	edx, 0xFFFF		;*****************************************
428
	and	edx, 0xFFFF		;*****************************************
429
	or	edx, 128 * 65536	; X start becomes 128
429
	or	edx, 128 * 65536	; X start becomes 128
430
	movzx	ecx, byte [V_Dev]	; get device number
430
	movzx	ecx, byte [V_Dev]	; get device number
431
	shr	ecx, 3			; device number is bits 3-7
431
	shr	ecx, 3			; device number is bits 3-7
432
	mcall				; Draw device Number To Window
432
	mcall				; Draw device Number To Window
433
 
433
 
434
	call	store_2_digits
434
	call	store_2_digits
435
	
435
	
436
	and	edx, 0xFFFF		;*****************************************
436
	and	edx, 0xFFFF		;*****************************************
437
	or	edx, 155 * 65536	; X start becomes 155
437
	or	edx, 155 * 65536	; X start becomes 155
438
	movzx	ecx, byte [V_Dev]	; get Function number
438
	movzx	ecx, byte [V_Dev]	; get Function number
439
	and	ecx, 7			; function is first 3 bits
439
	and	ecx, 7			; function is first 3 bits
440
	mcall				; Draw Function Number To Window
440
	mcall				; Draw Function Number To Window
441
	
441
	
442
	call	store_2_digits
442
	call	store_2_digits
443
	
443
	
444
	and	edx, 0xFFFF		;*****************************************
444
	and	edx, 0xFFFF		;*****************************************
445
	or	edx, 179 * 65536	; X start becomes 179
445
	or	edx, 179 * 65536	; X start becomes 179
446
	movzx	ecx, byte [PCI_Rev]	; get revision number
446
	movzx	ecx, byte [PCI_Rev]	; get revision number
447
	mcall				; Draw Revision to screen
447
	mcall				; Draw Revision to screen
448
	
448
	
449
	call	store_2_digits
449
	call	store_2_digits
450
	
450
	
451
	and	edx, 0xFFFF		;*****************************************
451
	and	edx, 0xFFFF		;*****************************************
452
	or	edx, 215*65536		; X start becomes 215
452
	or	edx, 215*65536		; X start becomes 215
453
	movzx	ecx, byte [PCI_Class]	; get PCI_Class
453
	movzx	ecx, byte [PCI_Class]	; get PCI_Class
454
	mcall				; Draw Class to screen
454
	mcall				; Draw Class to screen
455
	
455
	
456
	call	store_2_digits
456
	call	store_2_digits
457
	
457
	
458
	and	edx, 0xFFFF		;*****************************************
458
	and	edx, 0xFFFF		;*****************************************
459
	or	edx, 250*65536		; X start becomes 250
459
	or	edx, 250*65536		; X start becomes 250
460
	movzx	ecx, byte [PCI_SubClass]; get sub class
460
	movzx	ecx, byte [PCI_SubClass]; get sub class
461
	mcall				; Draw Sub Class to screen
461
	mcall				; Draw Sub Class to screen
462
	
462
	
463
	call	store_2_digits
463
	call	store_2_digits
464
	
464
	
465
; from Mario79 august 2006
465
; from Mario79 august 2006
466
	and	edx, 0xFFFF		;*****************************************
466
	and	edx, 0xFFFF		;*****************************************
467
	or	edx, 280 * 65536	; X start becomes 280
467
	or	edx, 280 * 65536	; X start becomes 280
468
	movzx	ecx, [PCI_Interface]	; get Interface
468
	movzx	ecx, [PCI_Interface]	; get Interface
469
	mcall
469
	mcall
470
	
470
	
471
	call	store_2_digits
471
	call	store_2_digits
472
	
472
	
473
;
473
;
474
; from Ghost april 2007                 ;*****************************************
474
; from Ghost april 2007                 ;*****************************************
475
	and	edx, 0xFFFF
475
	and	edx, 0xFFFF
476
	or	edx, 310 * 65536	; X start becomes 310
476
	or	edx, 310 * 65536	; X start becomes 310
477
	movzx	ecx, [PCI_IRQ]		; get Interface
477
	movzx	ecx, [PCI_IRQ]		; get Interface
478
	cmp	cl, 0x0f		; IRQ between 0..15
478
	cmp	cl, 23   		; IRQ between 0..23
479
	ja	@f
479
	ja	@f
480
 
480
 
481
	mcall
481
	mcall
482
 
482
 
483
	call	store_2_digits
483
	call	store_2_digits
484
	jmp	.PCI_Vendor
484
	jmp	.PCI_Vendor
485
@@:	
485
@@:	
486
	call	store_NA
486
	call	store_NA
487
.PCI_Vendor:
487
.PCI_Vendor:
488
	;Write Names
488
	;Write Names
489
	movzx	ebx, dx 	; Set y position
489
	movzx	ebx, dx 	; Set y position
490
	or	ebx, 340 * 65536	; set Xposition to 340
490
	or	ebx, 340 * 65536	; set Xposition to 340
491
 
491
 
492
;------------------------------------------------------------------
492
;------------------------------------------------------------------
493
; Prints the Vendor's Name based on Vendor ID
493
; Prints the Vendor's Name based on Vendor ID
494
;
494
;
495
; Modified on ??-04-2007 by Ghost for size
495
; Modified on ??-04-2007 by Ghost for size
496
;------------------------------------------------------------------
496
;------------------------------------------------------------------
497
	mov	edx, VendorsTab
497
	mov	edx, VendorsTab
498
	mov	cx, word[PCI_Vendor]
498
	mov	cx, word[PCI_Vendor]
499
 
499
 
500
.fn:
500
.fn:
501
	mov	ax, [edx]
501
	mov	ax, [edx]
502
	add	edx, 6
502
	add	edx, 6
503
	test	ax, ax
503
	test	ax, ax
504
	jz	.find
504
	jz	.find
505
	
505
	
506
	cmp	ax, cx
506
	cmp	ax, cx
507
	jne	.fn
507
	jne	.fn
508
	
508
	
509
.find:
509
.find:
510
	mov	edx, [edx - 4]
510
	mov	edx, [edx - 4]
511
	mcall	4,, 0x80000000		; lets print the vendor Name
511
	mcall	4,, 0x80000000		; lets print the vendor Name
512
	
512
	
513
	mov	[store_text_size],42
513
	mov	[store_text_size],42
514
	call	store_text
514
	call	store_text
515
;------------------------------------------------------------------
515
;------------------------------------------------------------------
516
; Get description based on Class/Subclass
516
; Get description based on Class/Subclass
517
;
517
;
518
; Modified on ??-04-2007 by Ghost for size
518
; Modified on ??-04-2007 by Ghost for size
519
;------------------------------------------------------------------
519
;------------------------------------------------------------------
520
	mov	eax, dword [PCI_Class]
520
	mov	eax, dword [PCI_Class]
521
	and	eax, 0xffffff
521
	and	eax, 0xffffff
522
	xor	edx, edx
522
	xor	edx, edx
523
	xor	esi, esi
523
	xor	esi, esi
524
.fnc:
524
.fnc:
525
	inc	esi
525
	inc	esi
526
	mov	ecx, [Classes + esi * 8 - 8]
526
	mov	ecx, [Classes + esi * 8 - 8]
527
	cmp	cx, 0xffff
527
	cmp	cx, 0xffff
528
	je	.endfc
528
	je	.endfc
529
	
529
	
530
	cmp	cx, ax
530
	cmp	cx, ax
531
	jne	.fnc
531
	jne	.fnc
532
	
532
	
533
	test	ecx, 0xff000000
533
	test	ecx, 0xff000000
534
	jz	@f
534
	jz	@f
535
	
535
	
536
	mov	edx, [Classes + esi * 8 - 4]
536
	mov	edx, [Classes + esi * 8 - 4]
537
	jmp	.fnc
537
	jmp	.fnc
538
@@:
538
@@:
539
	cmp	eax, ecx
539
	cmp	eax, ecx
540
	jne	.fnc
540
	jne	.fnc
541
	
541
	
542
	xor	edx, edx
542
	xor	edx, edx
543
.endfc:
543
.endfc:
544
	test	edx, edx
544
	test	edx, edx
545
	jnz	@f
545
	jnz	@f
546
	
546
	
547
	mov	edx, [Classes + esi * 8 - 4]
547
	mov	edx, [Classes + esi * 8 - 4]
548
@@:
548
@@:
549
	and	ebx, 0x0000FFFF 	; clear X position
549
	and	ebx, 0x0000FFFF 	; clear X position
550
	or	ebx, 0x24E0000		; set X position to 590 pixels
550
	or	ebx, 0x24E0000		; set X position to 590 pixels
551
	mcall	4,, 0x80000000,, 32	; draw the text
551
	mcall	4,, 0x80000000,, 32	; draw the text
552
	
552
	
553
	mov	[store_text_size],0
553
	mov	[store_text_size],0
554
	call	store_text
554
	call	store_text
555
	call	store_CR
555
	call	store_CR
556
	
556
	
557
	movzx	edx, bx 	; get y coordinate
557
	movzx	edx, bx 	; get y coordinate
558
	add	edx, 0x0014000A 	; add 10 to y coordinate and set x coordinate to 20
558
	add	edx, 0x0014000A 	; add 10 to y coordinate and set x coordinate to 20
559
	mov	[gr_pos], edx
559
	mov	[gr_pos], edx
560
	ret
560
	ret
561
;------------------------------------------------------------------
561
;------------------------------------------------------------------
562
; Get the user-MMIO related info
562
; Get the user-MMIO related info
563
;
563
;
564
; Added on ??-12-2009 by art_zh
564
; Added on ??-12-2009 by art_zh
565
;------------------------------------------------------------------
565
;------------------------------------------------------------------
566
Try_MMIO:
566
Try_MMIO:
567
	xor	ebx, ebx
567
	xor	ebx, ebx
568
	mov	edx, ebx
568
	mov	edx, ebx
569
	mov	bh, [MMIO_BAR]
569
	mov	bh, [MMIO_BAR]
570
	or	bx, 12			; function 12
570
	or	bx, 12			; function 12
571
	mov	ecx, 4096		; =1 page to map
571
	mov	ecx, 4096		; =1 page to map
572
	mcall	62
572
	mcall	62
573
	
573
	
574
	mov	[MMIO_Map], eax 	; store MMIO lin.addr.
574
	mov	[MMIO_Map], eax 	; store MMIO lin.addr.
575
	mov	ecx, 0x80990022 	; print color : red
575
	mov	ecx, 0x80990022 	; print color : red
576
	add	bh, '0'
576
	add	bh, '0'
577
	cmp	eax, -3
577
	cmp	eax, -3
578
	jne	@f
578
	jne	@f
579
	
579
	
580
	mov	[bar_um+3], bh
580
	mov	[bar_um+3], bh
581
	mov	ebx, [gr_pos]
581
	mov	ebx, [gr_pos]
582
	mov	edx, bar_um
582
	mov	edx, bar_um
583
	mcall	4
583
	mcall	4
584
	
584
	
585
	jmp	mmio_next_bar
585
	jmp	mmio_next_bar
586
@@:
586
@@:
587
	cmp	eax, -4
587
	cmp	eax, -4
588
	jne	@f
588
	jne	@f
589
	mov	[bar_io+3], bh
589
	mov	[bar_io+3], bh
590
	mov	ebx, [gr_pos]
590
	mov	ebx, [gr_pos]
591
	mov	edx, bar_io
591
	mov	edx, bar_io
592
	mcall	4
592
	mcall	4
593
	
593
	
594
	jmp	mmio_next_bar
594
	jmp	mmio_next_bar
595
@@:
595
@@:
596
	cmp	bh, '6' 	; expansion ROM ?
596
	cmp	bh, '6' 	; expansion ROM ?
597
	je	@f
597
	je	@f
598
	mov	[bar_ram+3], bh
598
	mov	[bar_ram+3], bh
599
	mov	ebx, [gr_pos]
599
	mov	ebx, [gr_pos]
600
	mov	edx, bar_ram
600
	mov	edx, bar_ram
601
	mcall	4
601
	mcall	4
602
	
602
	
603
	jmp	mmio_dump
603
	jmp	mmio_dump
604
;-----------------------------------------------------------------------------
604
;-----------------------------------------------------------------------------
605
@@:
605
@@:
606
	mov	ebx, [gr_pos]
606
	mov	ebx, [gr_pos]
607
	mov	edx, bar_rom
607
	mov	edx, bar_rom
608
	mcall	4
608
	mcall	4
609
 
609
 
610
mmio_dump:
610
mmio_dump:
611
	mov	edx, [MMIO_Map]
611
	mov	edx, [MMIO_Map]
612
	mov	esi, 64
612
	mov	esi, 64
613
	mov	ecx, 0x099		; dump color : blue
613
	mov	ecx, 0x099		; dump color : blue
614
	add	ebx, 10
614
	add	ebx, 10
615
	mov	[gr_pos], ebx
615
	mov	[gr_pos], ebx
616
	mcall	4
616
	mcall	4
617
	
617
	
618
	mov	ecx, [MMIO_Map] 	; release the tried page
618
	mov	ecx, [MMIO_Map] 	; release the tried page
619
	mcall	62,13
619
	mcall	62,13
620
 
620
 
621
mmio_next_bar:
621
mmio_next_bar:
622
	mov	bh, [MMIO_BAR]
622
	mov	bh, [MMIO_BAR]
623
	inc	bh
623
	inc	bh
624
	cmp	bh,7
624
	cmp	bh,7
625
	je	@f
625
	je	@f
626
	
626
	
627
	mov	[MMIO_BAR], bh
627
	mov	[MMIO_BAR], bh
628
	add	[gr_pos], 10
628
	add	[gr_pos], 10
629
	jmp	Try_MMIO
629
	jmp	Try_MMIO
630
;-----------------------------------------------------------------------------
630
;-----------------------------------------------------------------------------
631
@@:
631
@@:
632
	xor	bh,bh
632
	xor	bh,bh
633
	mov	[MMIO_BAR], bh
633
	mov	[MMIO_BAR], bh
634
	ret
634
	ret
635
;-----------------------------------------------------------------------------
635
;-----------------------------------------------------------------------------
636
store_CR:
636
store_CR:
637
	pusha
637
	pusha
638
	mov	edi,[store_text_area_end]
638
	mov	edi,[store_text_area_end]
639
	mov	[edi],word 0A20h ; CR (carriage return) + SPACE
639
	mov	[edi],word 0A20h ; CR (carriage return) + SPACE
640
	add	dword [store_text_area_end],2
640
	add	dword [store_text_area_end],2
641
	popa
641
	popa
642
	ret	
642
	ret	
643
;-----------------------------------------------------------------------------
643
;-----------------------------------------------------------------------------
644
store_text:
644
store_text:
645
	pusha
645
	pusha
646
	inc	dword [store_text_area_end]
646
	inc	dword [store_text_area_end]
647
	mov	esi,edx	
647
	mov	esi,edx	
648
	mov	edi,[store_text_area_end]
648
	mov	edi,[store_text_area_end]
649
	push	edi
649
	push	edi
650
	xor	eax,eax
650
	xor	eax,eax
651
	cld
651
	cld
652
@@:
652
@@:
653
	lodsb
653
	lodsb
654
	test	eax,eax
654
	test	eax,eax
655
	jz	@f
655
	jz	@f
656
	stosb
656
	stosb
657
	inc	dword [store_text_area_end]
657
	inc	dword [store_text_area_end]
658
	jmp	@r
658
	jmp	@r
659
@@:
659
@@:
660
	pop	esi
660
	pop	esi
661
	mov	eax,[store_text_size]
661
	mov	eax,[store_text_size]
662
	test	eax,eax
662
	test	eax,eax
663
	jz	@f
663
	jz	@f
664
	sub	edi,esi
664
	sub	edi,esi
665
	sub	eax,edi
665
	sub	eax,edi
666
	add	[store_text_area_end],eax
666
	add	[store_text_area_end],eax
667
@@:
667
@@:
668
	popa
668
	popa
669
	ret	
669
	ret	
670
;-----------------------------------------------------------------------------
670
;-----------------------------------------------------------------------------
671
store_NA:
671
store_NA:
672
	pusha
672
	pusha
673
	mov	ebx,edx
673
	mov	ebx,edx
674
	mcall	4,,0x80000000,text_NA
674
	mcall	4,,0x80000000,text_NA
675
	mov	edi,[store_text_area_end]
675
	mov	edi,[store_text_area_end]
676
	mov	ax,[edx]
676
	mov	ax,[edx]
677
	mov	[edi+1],ax
677
	mov	[edi+1],ax
678
	add	[store_text_area_end],dword 5
678
	add	[store_text_area_end],dword 5
679
	popa
679
	popa
680
	ret
680
	ret
681
;-----------------------------------------------------------------------------
681
;-----------------------------------------------------------------------------
682
store_2_digits:
682
store_2_digits:
683
	pusha
683
	pusha
684
	inc	[store_text_area_end]
684
	inc	[store_text_area_end]
685
	mov	ebx,ecx
685
	mov	ebx,ecx
686
	mov	ecx,2
686
	mov	ecx,2
687
	mov	edi,[store_text_area_end]
687
	mov	edi,[store_text_area_end]
688
	call	binary_to_hex_string
688
	call	binary_to_hex_string
689
	add	[store_text_area_end],dword 4
689
	add	[store_text_area_end],dword 4
690
	popa
690
	popa
691
	ret
691
	ret
692
;-----------------------------------------------------------------------------
692
;-----------------------------------------------------------------------------
693
store_4_digits:
693
store_4_digits:
694
	pusha
694
	pusha
695
	mov	ebx,ecx
695
	mov	ebx,ecx
696
	mov	ecx,4
696
	mov	ecx,4
697
	mov	edi,[store_text_area_end]
697
	mov	edi,[store_text_area_end]
698
	call	binary_to_hex_string
698
	call	binary_to_hex_string
699
	add	[store_text_area_end],dword 6
699
	add	[store_text_area_end],dword 6
700
	popa
700
	popa
701
	ret
701
	ret
702
;-----------------------------------------------------------------------------
702
;-----------------------------------------------------------------------------
703
; ebx - value
703
; ebx - value
704
; ecx - digits
704
; ecx - digits
705
; edi - output string
705
; edi - output string
706
binary_to_hex_string:
706
binary_to_hex_string:
707
	add	edi,ecx
707
	add	edi,ecx
708
	dec	edi
708
	dec	edi
709
	std
709
	std
710
.1:
710
.1:
711
	mov	al,bl
711
	mov	al,bl
712
	and	al,0xf
712
	and	al,0xf
713
	shr	ebx,4
713
	shr	ebx,4
714
	cmp	al,9
714
	cmp	al,9
715
	jbe	@f
715
	jbe	@f
716
 
716
 
717
	add	al,0x27
717
	add	al,0x27
718
@@:
718
@@:
719
	add	al,0x30
719
	add	al,0x30
720
	stosb
720
	stosb
721
	dec	ecx
721
	dec	ecx
722
	jnz	.1
722
	jnz	.1
723
	cld
723
	cld
724
	ret
724
	ret
725
;-----------------------------------------------------------------------------
725
;-----------------------------------------------------------------------------
726
include 'vendors.inc'
726
include 'vendors.inc'
727
;-----------------------------------------------------------------------------
727
;-----------------------------------------------------------------------------
728
; DATA AREA
728
; DATA AREA
729
DATA
729
DATA
730
 
730
 
731
Form:	dw 800 ; window width (no more, special for 800x600)
731
Form:	dw 800 ; window width (no more, special for 800x600)
732
	dw 100 ; window x start
732
	dw 100 ; window x start
733
	dw 620 ; window height
733
	dw 620 ; window height
734
	dw 20 ; window y start
734
	dw 20 ; window y start
735
 
735
 
736
title	db 'PCI Device Enumerator v 2.3', 0
736
title	db 'PCI Device Enumerator v 2.3', 0
737
 
737
 
738
PCIWin mls \
738
PCIWin mls \
739
	'   Don`t forget to enable PCI Access to Applications in Setup Menu.',\
739
	'   Don`t forget to enable PCI Access to Applications in Setup Menu.',\
740
	'',\
740
	'',\
741
	'PCI Version  = x.xx; Last PCI Bus = x',\
741
	'PCI Version  = x.xx; Last PCI Bus = x',\
742
	'User MMIO channel = 0F.F:F ',\
742
	'User MMIO channel = 0F.F:F ',\
743
	'Number of PCI units =    ',\
743
	'Number of PCI units =    ',\
744
	'',\
744
	'',\
745
	'VenID DevID Bus# Dev# Fnc Rev  Class  Subclass/ IRQ                 Company                      Description',\
745
	'VenID DevID Bus# Dev# Fnc Rev  Class  Subclass/ IRQ                 Company                      Description',\
746
	'                                      Interface',\
746
	'                                      Interface',\
747
	'----- ----- ---- ---- --- ---  -----  --------- --- ------------------------------------------ --------------------------------'
747
	'----- ----- ---- ---- --- ---  -----  --------- --- ------------------------------------------ --------------------------------'
748
 
748
 
749
bar_ram db 'BARx: MMIO block', 0
749
bar_ram db 'BARx: MMIO block', 0
750
bar_io	db 'BARx: IO ports',0
750
bar_io	db 'BARx: IO ports',0
751
bar_um	db 'BARx: unmapped',0
751
bar_um	db 'BARx: unmapped',0
752
bar_rom db 'BAR6: Expansion ROM', 0
752
bar_rom db 'BAR6: Expansion ROM', 0
753
 
753
 
754
text_save_button:
754
text_save_button:
755
	db 'Save PCI list',0
755
	db 'Save PCI list',0
756
.1:	db '(Press S key)',0
756
.1:	db '(Press S key)',0
757
 
757
 
758
text_NA:
758
text_NA:
759
	db '--',0
759
	db '--',0
760
;---------------------------------------------------------------------
760
;---------------------------------------------------------------------
761
system_dir_ProcLib	db '/sys/lib/proc_lib.obj',0
761
system_dir_ProcLib	db '/sys/lib/proc_lib.obj',0
762
 
762
 
763
err_message_found_lib2	db 'proc_lib.obj - Not found!',0
763
err_message_found_lib2	db 'proc_lib.obj - Not found!',0
764
 
764
 
765
err_message_import2	db 'proc_lib.obj - Wrong import!',0
765
err_message_import2	db 'proc_lib.obj - Wrong import!',0
766
 
766
 
767
head_f_i:
767
head_f_i:
768
head_f_l	db 'error',0
768
head_f_l	db 'error',0
769
;---------------------------------------------------------------------
769
;---------------------------------------------------------------------
770
l_libs_start:
770
l_libs_start:
771
 
771
 
772
library02  l_libs system_dir_ProcLib+9, path, library_path, system_dir_ProcLib, \
772
library02  l_libs system_dir_ProcLib+9, path, library_path, system_dir_ProcLib, \
773
err_message_found_lib2, head_f_l, ProcLib_import, err_message_import2, head_f_i
773
err_message_found_lib2, head_f_l, ProcLib_import, err_message_import2, head_f_i
774
 
774
 
775
end_l_libs:
775
end_l_libs:
776
;---------------------------------------------------------------------
776
;---------------------------------------------------------------------
777
align 4
777
align 4
778
ProcLib_import:
778
ProcLib_import:
779
OpenDialog_Init		dd aOpenDialog_Init
779
OpenDialog_Init		dd aOpenDialog_Init
780
OpenDialog_Start	dd aOpenDialog_Start
780
OpenDialog_Start	dd aOpenDialog_Start
781
;OpenDialog__Version	dd aOpenDialog_Version
781
;OpenDialog__Version	dd aOpenDialog_Version
782
        dd      0
782
        dd      0
783
        dd      0
783
        dd      0
784
aOpenDialog_Init	db 'OpenDialog_init',0
784
aOpenDialog_Init	db 'OpenDialog_init',0
785
aOpenDialog_Start	db 'OpenDialog_start',0
785
aOpenDialog_Start	db 'OpenDialog_start',0
786
;aOpenDialog_Version	db 'Version_OpenDialog',0
786
;aOpenDialog_Version	db 'Version_OpenDialog',0
787
;---------------------------------------------------------------------
787
;---------------------------------------------------------------------
788
align 4
788
align 4
789
OpenDialog_data:
789
OpenDialog_data:
790
.type			dd 0
790
.type			dd 0
791
.procinfo		dd Proc_Info	;+4
791
.procinfo		dd Proc_Info	;+4
792
.com_area_name		dd communication_area_name	;+8
792
.com_area_name		dd communication_area_name	;+8
793
.com_area		dd 0	;+12
793
.com_area		dd 0	;+12
794
.opendir_pach		dd temp_dir_pach	;+16
794
.opendir_pach		dd temp_dir_pach	;+16
795
.dir_default_pach	dd communication_area_default_pach	;+20
795
.dir_default_pach	dd communication_area_default_pach	;+20
796
.start_path		dd open_dialog_path	;+24
796
.start_path		dd open_dialog_path	;+24
797
.draw_window		dd draw_window	;+28
797
.draw_window		dd draw_window	;+28
798
.status			dd 0	;+32
798
.status			dd 0	;+32
799
.openfile_pach 		dd file_name	;+36
799
.openfile_pach 		dd file_name	;+36
800
.filename_area		dd filename_area	;+40
800
.filename_area		dd filename_area	;+40
801
.filter_area		dd Filter
801
.filter_area		dd Filter
802
.x:
802
.x:
803
.x_size			dw 420 ;+48 ; Window X size
803
.x_size			dw 420 ;+48 ; Window X size
804
.x_start		dw 10 ;+50 ; Window X position
804
.x_start		dw 10 ;+50 ; Window X position
805
.y:
805
.y:
806
.y_size			dw 320 ;+52 ; Window y size
806
.y_size			dw 320 ;+52 ; Window y size
807
.y_start		dw 10 ;+54 ; Window Y position
807
.y_start		dw 10 ;+54 ; Window Y position
808
 
808
 
809
communication_area_name:
809
communication_area_name:
810
	db 'FFFFFFFF_open_dialog',0
810
	db 'FFFFFFFF_open_dialog',0
811
open_dialog_path:
811
open_dialog_path:
812
	db '/sys/File Managers/opendial',0
812
	db '/sys/File Managers/opendial',0
813
communication_area_default_pach:
813
communication_area_default_pach:
814
	db '/sys',0
814
	db '/sys',0
815
Filter:
815
Filter:
816
dd	Filter.end - Filter.1
816
dd	Filter.end - Filter.1
817
.1:
817
.1:
818
db	'TXT',0
818
db	'TXT',0
819
db	'LOG',0
819
db	'LOG',0
820
.end:
820
.end:
821
dd	0
821
dd	0
822
 
822
 
823
file_default_path:
823
file_default_path:
824
	db '/sys/'
824
	db '/sys/'
825
start_temp_file_name:	
825
start_temp_file_name:	
826
	db 'pcidev.txt',0
826
	db 'pcidev.txt',0
827
;---------------------------------------------------------------------
827
;---------------------------------------------------------------------
828
align	4
828
align	4
829
fileinfo:
829
fileinfo:
830
.subfunction	dd 2
830
.subfunction	dd 2
831
.Offset		dd 0
831
.Offset		dd 0
832
.Offset_1	dd 0
832
.Offset_1	dd 0
833
.size		dd 4096
833
.size		dd 4096
834
.return		dd 0
834
.return		dd 0
835
		db 0
835
		db 0
836
.name:		dd file_name
836
.name:		dd file_name
837
;-----------------------------------------------------------------------------
837
;-----------------------------------------------------------------------------
838
 
838
 
839
; UNINITIALIZED DATA AREA
839
; UNINITIALIZED DATA AREA
840
IM_END:
840
IM_END:
841
total		db ?
841
total		db ?
842
V_Bus		db ?
842
V_Bus		db ?
843
V_Dev		db ?
843
V_Dev		db ?
844
PCI_Version	dw ?
844
PCI_Version	dw ?
845
PCI_LastBus	db ?
845
PCI_LastBus	db ?
846
PCI_Device	dw ?
846
PCI_Device	dw ?
847
PCI_Vendor	dw ?
847
PCI_Vendor	dw ?
848
PCI_Bus 	db ?
848
PCI_Bus 	db ?
849
PCI_Dev 	db ?
849
PCI_Dev 	db ?
850
PCI_Rev 	db ?
850
PCI_Rev 	db ?
851
; don`t change order!!!
851
; don`t change order!!!
852
PCI_Class	db ?
852
PCI_Class	db ?
853
PCI_SubClass	db ?
853
PCI_SubClass	db ?
854
PCI_Interface	db ?
854
PCI_Interface	db ?
855
PCI_IRQ 	db ?
855
PCI_IRQ 	db ?
856
 
856
 
857
align 4
857
align 4
858
MMIO_Bus	db 255
858
MMIO_Bus	db 255
859
MMIO_Dev	db 255
859
MMIO_Dev	db 255
860
MMIO_BAR	db 0
860
MMIO_BAR	db 0
861
MMIO_allowed	db 1
861
MMIO_allowed	db 1
862
MMIO_Map	rd 8
862
MMIO_Map	rd 8
863
 
863
 
864
gr_pos		dd ?
864
gr_pos		dd ?
865
 
865
 
866
store_text_area_start	dd ?
866
store_text_area_start	dd ?
867
store_text_area_end	dd ?
867
store_text_area_end	dd ?
868
store_text_size		dd ?
868
store_text_size		dd ?
869
 
869
 
870
extended_key 	rb 1
870
extended_key 	rb 1
871
;---------------------------------------------------------------------
871
;---------------------------------------------------------------------
872
library_path:
872
library_path:
873
	rb 4096
873
	rb 4096
874
;---------------------------------------------------------------------
874
;---------------------------------------------------------------------
875
path:
875
path:
876
	rb 4096
876
	rb 4096
877
;---------------------------------------------------------------------
877
;---------------------------------------------------------------------
878
temp_dir_pach:
878
temp_dir_pach:
879
	rb 4096
879
	rb 4096
880
;---------------------------------------------------------------------
880
;---------------------------------------------------------------------
881
file_name:
881
file_name:
882
	rb 4096
882
	rb 4096
883
;---------------------------------------------------------------------
883
;---------------------------------------------------------------------
884
file_name_1:
884
file_name_1:
885
	rb 4096
885
	rb 4096
886
;---------------------------------------------------------------------
886
;---------------------------------------------------------------------
887
filename_area:
887
filename_area:
888
	rb 256
888
	rb 256
889
;---------------------------------------------------------------------
889
;---------------------------------------------------------------------
890
	rb 4096
890
	rb 4096
891
stacktop:
891
stacktop:
892
;---------------------------------------------------------------------
892
;---------------------------------------------------------------------
893
Proc_Info	process_information
893
Proc_Info	process_information
894
;---------------------------------------------------------------------
894
;---------------------------------------------------------------------
895
I_END:
895
I_END:
896
;-----------------------------------------------------------------------------
896
;-----------------------------------------------------------------------------