Subversion Repositories Kolibri OS

Rev

Rev 2057 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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