Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

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