Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1599 art_zh 1
$Revision: 1598 $
2
 
3
  use32 	     ;
4
  org	 0x0	     ;
5
 
6
  db	 'MENUET01'  ;
7
  dd	 0x01	     ;
8
  dd	 START	     ;
9
  dd	 I_END	     ;
10
  dd	 0x1000      ;
11
  dd	 0x1000      ;
12
  dd	 0x0	     ;
13
  dd	 0x0	     ;
14
 
15
include 'MACROS.INC' ;
16
 
17
PCIE_SPACE	equ	0xF0000000
18
PCIE_ADDR	equ	0xF00A0000    ; bdf0:20.0  = SB7xx PCI Config Registers
19
BOX_COLOR	equ	0xE0D8D0
20
 
21
START:
22
 
23
	mov	edx, 0x88
24
	add	edx, PCIE_ADDR
25
	mov	eax, 0x00010101
26
	mov	[edx], eax
27
 
28
 
29
red:
30
 
31
    call draw_window
32
 
33
still:
34
    mcall 10		; event waiting
35
 
36
    cmp  eax,1		; redraw window
37
    je	 red		;
38
    cmp  eax,2		; key pressed?
39
    je	 key		;
40
    cmp  eax,3		; button hit?
41
    je	 button 	;
42
 
43
    jmp  still		; none of that
44
 
45
;---------------------------------------------------------------------
46
 
47
 key:		       ; key pressed
48
   jmp	  red
49
 
50
;---------------------------------------------------------------------
51
 
52
  button:
53
    mcall 17		; get the button ID
54
    cmp   ah, 1
55
    jne   .bt2
56
    mcall -1
57
.bt2:
58
	cmp	ah, 2
59
	jne	.bt3
60
	sub	[Reg],4   ; Rg# decrement
61
	jmp	red
62
.bt3:
63
	cmp	ah, 3
64
	jne	.bt4
65
	add	[Reg],4   ; Rg# increment
66
	jmp	red
67
.bt4:
68
	cmp	ah, 4
69
	jne	.bt5
70
	add	[Reg],4*16	; PgDn
71
	jmp	red
72
.bt5:
73
	cmp	ah, 5
74
	jne	.bt6
75
	mov	edx, [Reg]
76
	cmp	edx, 4*16
77
	jb	@f
78
	sub	edx, 4*16
79
	mov	[Reg],edx      ; PgUp
80
	jmp	red
81
@@:
82
	xor	edx, edx
83
	mov	[Reg], edx
84
	jmp	red
85
 
86
.bt6:
87
	cmp	ah, 6
88
	jne	still
89
	mcall	37, 1		; get the mouse pointer
90
	shr	eax, 16 	; only X needed
91
	sub	eax, 124	; check the left border
92
	jb	red
93
	xor	edx, edx
94
	mov	ebx, 12
95
	div	ebx
96
	cmp	eax, 32 	; check the right border
97
	jnb	red
98
	mov	ecx, 31
99
	sub	ecx, eax	 ; reverse the bit order
100
	mov	ebx, [Rct]
101
	btc	ebx, ecx	; invert the bit
102
	mov	eax, [Reg]
103
	add	eax, PCIE_ADDR
104
	mov	[Rct], ebx
105
	mov	[eax], ebx
106
 
107
    jmp   red
108
 
109
 
110
;------------------------------------------------
111
print_config_reg:
112
;------------------------------------------------
113
	mov	eax, [reg]
114
	and	eax, 0x0FFC
115
	mov	ebx, 4*65536+256   ; 4 hex digits
116
	mov	ecx, eax
117
	mov	dx,[stX]
118
	shl	edx,16		   ; = X*65536
119
	mov	dx,[stY]	   ; = edx + Y
120
	mov	esi,0
121
	mcall 47		   ; print reg#
122
	mov	eax, [reg]
123
	add	eax, PCIE_ADDR
124
	mov	ecx, [eax]
125
	add	edx, 36*65536	   ; right column
126
	mov	ebx, 8*65536+256   ; 8 hex digits
127
	mcall 47		   ; print config data
128
	ret
129
;------------------------------------------------
130
read_nbconfig:
131
; in:  dl = reg#  |  out: eax = data
132
;------------------------------------------------
133
	mov	ebx, 0xF0000000
134
	and	edx, 0x0FC
135
	mov	eax, dword [ebx+edx]
136
	ret
137
;------------------------------------------------
138
write_nbconfig:
139
; in: dl = reg#; eax = data
140
;------------------------------------------------
141
	mov	ebx, 0xF0000000
142
	and	edx, 0x0FC
143
	mov	dword [ebx+edx], eax
144
	ret
145
 
146
;------------------------------------------------
147
;read_htiunbind:
148
; in:  [HTr] = reg#  |  out: eax = data
149
;------------------------------------------------
150
;        mov     dl,  0x94
151
;        mov     al,  byte[HTr]
152
;        and     eax, 0x07C
153
;        call    write_nbconfig
154
;        add     dl,  4
155
;        call    read_nbconfig
156
;        ret
157
;------------------------------------------------
158
;write_htiunbind:
159
; in:  [HTr] = reg#; ecx = data
160
;------------------------------------------------
161
;        mov     dl,  0x94
162
;        mov     al,  byte[Reg]
163
;        and     eax, 0x017C
164
;        call    write_nbconfig
165
;        add     dl,  4
166
;        mov     ecx, eax
167
;        call    write_nbconfig
168
;        sub     dl,  4
169
;        mov     eax, 0x0
170
;        call    write_nbconfig
171
;        ret
172
 
173
 
174
 
175
 
176
 
177
 
178
 
179
;------------------------------------------------
180
    draw_window:
181
;------------------------------------------------
182
 
183
 
184
    mcall 12, 1
185
    mcall 0, 600*65536+530, 120*65536+290, 0x1499AABB,,title
186
; -----------------------------------------------------------------
187
; BUTTONS:   Xleft    Xwid,  Ytop    Yheig
188
    mcall 8, 370*65536+ 40,  26*65536+ 18, 2, 0x99AABB ;  <<
189
    mcall  ,		  ,  51*65536+ 18, 3,	       ;  >>
190
    mcall  , 425*65536+ 90,  26*65536+ 18, 4,	       ; PCIe Cfg
191
    mcall  ,		  ,  51*65536+ 18, 5,	       ; NB config
192
    mcall  , 117*65536+400,  97*65536+ 40, 6,	       ; Bits
193
 
194
	mov	edx, [Reg]
195
	add	edx, PCIE_ADDR		; reading the current reg content
196
	mov	ecx, [edx]
197
	mov	[Rct], ecx
198
 
199
	mov	ebx, bitstr2
200
	inc	ebx
201
	mov	edx, [Rct]
202
	mov	ecx, 0x80000000
203
	xor	eax, eax
204
.stringtest:
205
	test	edx, ecx
206
	jz	@f
207
	mov	byte [ebx+eax*2],'I'	; bit dump
208
	jmp	.nextbit
209
@@:
210
	mov	byte [ebx+eax*2],'0'
211
.nextbit:
212
	inc	eax
213
	shr	ecx, 1
214
	jnz	.stringtest
215
 
216
; button txt:  X *65536+ Y
217
    mcall  4, 378*65536+32 ,0x10000000, butstr2,3
218
    mcall  ,  378*65536+57 ,	      , butstr3,
219
    mcall  ,  436*65536+32 ,	      , butstr4,9
220
    mcall  ,  436*65536+57 ,	      , butstr5,
221
 
222
    mcall  4, 122*65536+101,0	       , bitstr0,65
223
    mcall  ,  122*65536+110,0	       , bitstr1,65
224
    mcall  ,  122*65536+117,0	       , bitstr2,65
225
    mcall  ,  122*65536+126,0	       , bitstr3,65
226
; -----------------------------------------------------------------
227
;    draw the reg-value box
228
	mov	ebx, 10*65536+100	; Xleft | Xwidth
229
	mov	ecx, 26*65536+250	; Ytop  | Yheight
230
	mov	edx, BOX_COLOR
231
	mcall	13
232
;    draw the reg-address box
233
	mov	ebx, 206*65536+146	; Xleft | Xwidth
234
	mov	cx, 44			; Yheight only
235
	mcall	13
236
;    draw ZiS status box
237
;        mov     ebx, 206*65536+274      ; Xleft | Xwidth
238
;        mov     ecx,  84*65536+ 64      ; Ytop  | Yheight
239
;        mcall   13
240
;    draw the dump box
241
;        mov     ebx, 206*65536+274      ; Xleft | Xwidth
242
;        mov     ecx, 190*65536+232      ; Ytop  | Yheight
243
;        mcall   13
244
 
245
;    fill the data box
246
	mov	ebx, [Reg]
247
	mov	[reg],ebx
248
	mov	bx, 40	       ; upper position
249
	mov	[stY],bx
250
.print_reg_names:
251
	call	print_config_reg
252
	add	[stY],14
253
	add	[reg], 4
254
	mov	edx,[Reg]
255
	add	edx,16*4
256
	cmp	edx,[reg]
257
	ja	.print_reg_names
258
 
259
;   fill the status box
260
	mcall	4, 210*65536+30,0,str1,12
261
	mcall	,  210*65536+44, ,str2,
262
	mcall	,  210*65536+56, ,str3,
263
	mov	ecx, PCIE_ADDR
264
	mov	edx, 300*65536+30
265
	mov	ebx, 8*65536+256
266
	mcall	47
267
	add	dx, 14
268
	mov	ecx,[Reg]
269
	mov	esi, 0
270
	mcall	47
271
	add	dx,14
272
	mov	ecx, [Rct]
273
	mcall	47
274
 
275
;    print extra info
276
	mov	ebx, 120*65536+180
277
	xor	ecx, ecx
278
	mov	edx, info1
279
@@:
280
	mcall	4,,,,66
281
	add	edx, 66
282
	add	ebx, 14
283
	cmp	edx, info_end
284
	jb	@b
285
 
286
 
287
    mcall 12, 2 		   ; функция 12: сообщить ОС об отрисовке окна
288
 
289
ret
290
 
291
 
292
align 4
293
;-------------------------------------------------
294
 
295
  pix	dd  0x55AACC33
296
  pxX	dd  200
297
  pxY	dd  160
298
  stX	dw  18
299
  stY	dw  0
300
  reg	dd  0
301
 
302
  Rct	dd  0	     ; reg content
303
  Reg	dd  0x00     ; reg number
304
 
305
 
306
 title db '          SB710 PCI Config Registers - PCI_Reg ',0
307
;------------------------------------------------------------------------------------
308
 reg_str   db	'Reg#| hex.Value  '
309
;------------------------------------------------------------------------------------
310
str1	db	'bdf address:'
311
str2	db	'Reg. number:'
312
str3	db	'Reg.content:'
313
 
314
 butstr2 db ' << '
315
 butstr3 db ' >> '
316
 butstr4 db 'Next Page'
317
 butstr5 db 'Prev Page'
318
 
319
bitstr0  db	'31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
320
		209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
321
		209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
322
		205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
323
bitstr1  db	179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
324
bitstr2  db	179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
325
		179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
326
bitstr3  db	212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
327
		205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
328
		205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
329
		205,207,205,207,205,207,205,207,205,207,205,190
330
 
331
info1	db	'--------------------------- extra info ---------------------------'
332
info2	db	'| reg 00[31:16] (DeviceID): 4385=SB7100/710/750 SMBus module     |'
333
	db	'| reg                                                            |'
334
	db	'| reg                                                            |'
335
	db	'| reg                                                            |'
336
	db	'------------------------------------------------------------------'
337
info_end:
338
 
339
I_END:		; end of program
340
 
341
	rd 256
342
 
343
align 256
344
st_0: