Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1565 art_zh 1
;;      rs780 HT misc registers test
2
		;;	(C) art_zh 2010
3
		;;	
4
 
5
 
6
  use32 	     ;
7
  org	 0x0	     ;
8
 
9
  db	 'MENUET01'  ;
10
  dd	 0x01	     ;
11
  dd	 START	     ;
12
  dd	 I_END	     ;
13
  dd	 0x1000      ;
14
  dd	 0x1000      ;
15
  dd	 0x0	     ;
16
  dd	 0x0	     ;
17
 
18
include 'MACROS.INC' ;
19
 
20
PCIE_SPACE	equ	0xF0000000
21
PCIE_ADDR	equ	0xF0000000	; bus 0, dev 0 fn 0 -- don't change!
22
MISC_NB_INDEX	equ	0xF0000060	; index reg for inderect space access
23
MISC_NB_DAT	equ	0xF0000064	; inderect space data register
24
BOX_COLOR	equ	0xE0D8D0
25
 
26
START:
27
 
28
 
29
 
30
 
31
 
32
red:
33
 
34
    call draw_window
35
 
36
still:
37
    mcall 10		; event waiting
38
 
39
    cmp  eax,1		; redraw window
40
    je	 red		;
41
    cmp  eax,2		; key pressed?
42
    je	 key		;
43
    cmp  eax,3		; button hit?
44
    je	 button 	;
45
 
46
    jmp  still		; none of that
47
 
48
;---------------------------------------------------------------------
49
 
50
 key:		       ; key pressed
51
   jmp	  red
52
 
53
;---------------------------------------------------------------------
54
 
55
  button:
56
    mcall 17		; get the button ID
57
    cmp   ah, 1
58
    jne   .bt2
59
    mcall -1
60
.bt2:
61
	cmp	ah, 2
62
	jne	.bt3
63
	dec	[Reg]	  ; Rg# decrement
64
	jmp	red
65
.bt3:
66
	cmp	ah, 3
67
	jne	.bt4
68
	inc	[Reg]	  ; Rg# increment
69
	jmp	red
70
.bt4:
71
	cmp	ah, 4
72
	jne	.bt5
73
	add	[Reg],16      ; PgDn
74
	jmp	red
75
.bt5:
76
	cmp	ah, 5
77
	jne	.bt6
78
	mov	edx, [Reg]
79
	cmp	edx, 16
80
	jb	@f
81
	sub	edx, 16
82
	mov	[Reg],edx      ; PgUp - general case
83
	jmp	red
84
@@:
85
	xor	edx, edx
86
	mov	[Reg], edx     ; PgUp - the upper page
87
	jmp	red
88
 
89
.bt6:
90
	cmp	ah, 6
91
	jne	still
92
	mcall	37, 1		; get the mouse pointer
93
	shr	eax, 16 	; only X needed
94
	sub	eax, 124	; check the left border
95
	jb	red
96
	xor	edx, edx
97
	mov	ebx, 12
98
	div	ebx
99
	cmp	eax, 32 	; check the right border
100
	jnb	red
101
	mov	ecx, 31
102
	sub	ecx, eax	; reverse the bit order
103
	mov	ebx, [Rct]
104
	btc	ebx, ecx	; invert the bit
105
	mov	[Rct], ebx
106
	call	write_misc
107
 
108
    jmp   red
109
 
110
 
111
;------------------------------------------------
112
print_config_reg:
113
;------------------------------------------------
114
	mov	eax, [Reg]
115
	and	eax, 0x07F
116
	mov	ebx, 3*65536+256   ; 3 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	ecx, edx	   ; store edx
124
	call	read_misc	   ; get content
125
	mov	edx, ecx
126
	mov	ecx, eax
127
	add	edx, 36*65536	   ; right column
128
	mov	ebx, 8*65536+256   ; 8 hex digits
129
	mcall 47		   ; print config data
130
	ret
131
 
132
;------------------------------------------------
133
read_misc:
134
; in:  [Reg] = reg#  |  out: eax = [Rct] = data
135
;------------------------------------------------
136
	mov	edx,  MISC_NB_INDEX
137
	mov	al,  byte[Reg]
138
	and	eax, 0x07F
139
	mov	[edx], eax
140
	add	dl,  4
141
	mov	eax, [edx]
142
	mov	[Rct], eax
143
	ret
144
;------------------------------------------------
145
write_misc:
146
; in:  [Reg] = reg#; [Rct] = data
147
;------------------------------------------------
148
	mov	edx,  MISC_NB_INDEX
149
	mov	al,  byte[Reg]
150
	and	eax, 0x07F
151
	or	eax, 0x080    ; WriteEnable bit
152
	mov	[edx], eax
153
	add	dl,  4
154
	mov	eax, [Rct]
155
	mov	[edx], eax
156
	sub	dl,  4
157
	xor	eax,   eax
158
	mov	[edx], eax    ; safety precaution
159
	ret
160
 
161
 
162
;------------------------------------------------
163
    draw_window:
164
;------------------------------------------------
165
 
166
 
167
    mcall 12, 1
168
    mcall 0, 72*65536+530, 410*65536+290, 0x14A0B8A0,,title
169
; -----------------------------------------------------------------
170
; BUTTONS:   Xleft    Xwid,  Ytop    Yheig
171
    mcall 8, 370*65536+ 40,  26*65536+ 18, 2, 0xA0B8A0 ;  <<
172
    mcall  ,		  ,  51*65536+ 18, 3,	       ;  >>
173
    mcall  , 425*65536+ 90,  26*65536+ 18, 4,	       ; Next Page
174
    mcall  ,		  ,  51*65536+ 18, 5,	       ; Prev Page
175
    mcall  ,117*65536+ 400,  97*65536+ 40, 6,	       ; Bits
176
 
177
	call	read_misc	; read the current reg
178
 
179
	mov	ebx, bitstr2
180
	inc	ebx
181
	mov	edx, [Rct]
182
	mov	ecx, 0x80000000
183
	xor	eax, eax
184
.stringtest:
185
	test	edx, ecx
186
	jz	@f
187
	mov	byte [ebx+eax*2],'I'	; bit dump
188
	jmp	.nextbit
189
@@:
190
	mov	byte [ebx+eax*2],'0'
191
.nextbit:
192
	inc	eax
193
	shr	ecx, 1
194
	jnz	.stringtest
195
 
196
; button txt:  X *65536+ Y
197
    mcall  4, 378*65536+32 ,0x10000000, butstr2,3
198
    mcall  ,  378*65536+57 ,	      , butstr3,
199
    mcall  ,  436*65536+32 ,	      , butstr4,9
200
    mcall  ,  436*65536+57 ,	      , butstr5,
201
 
202
    mcall  4, 122*65536+101,0	       , bitstr0,65
203
    mcall  ,  122*65536+110,0	       , bitstr1,65
204
    mcall  ,  122*65536+117,0	       , bitstr2,65
205
    mcall  ,  122*65536+126,0	       , bitstr3,65
206
; -----------------------------------------------------------------
207
;    draw the reg-value box
208
	mov	ebx, 10*65536+100	; Xleft | Xwidth
209
	mov	ecx, 26*65536+250	; Ytop  | Yheight
210
	mov	edx, BOX_COLOR
211
	mcall	13
212
;    draw the reg-address box
213
	mov	ebx, 206*65536+146	; Xleft | Xwidth
214
	mov	cx, 44			; Yheight only
215
	mcall	13
216
 
217
;    fill the data box
218
	mov	bx, 40	       ; upper position
219
	mov	[stY],bx
220
	mov	eax, [Reg]     ; store original#
221
	mov	[reg], eax
222
.print_reg_names:
223
	call	print_config_reg
224
	add	[stY],14
225
	inc	[Reg]
226
	mov	edx,[reg]
227
	mov	eax, 16
228
	add	eax, edx
229
	cmp	eax,[Reg]
230
	ja	.print_reg_names
231
	mov	[Reg], edx	; restore original#
232
 
233
;   fill the status box
234
	mcall	4, 210*65536+30,0,str1,12
235
	mcall	,  210*65536+44, ,str2,
236
	mcall	,  210*65536+56, ,str3,
237
	call	read_misc		; refresh the content
238
	mov	ecx, MISC_NB_DAT
239
	mov	edx, 300*65536+30
240
	mov	ebx, 8*65536+256
241
	mcall	47
242
	add	dx, 14
243
	mov	ecx,[Reg]
244
	mov	esi, 0
245
	mcall	47
246
	add	dx,14
247
	mov	ecx, [Rct]
248
	mcall	47
249
 
250
;     print extra info
251
	mov	ebx, 120*65536+160
252
	xor	ecx, ecx
253
	mov	edx, info1
254
@@:
255
	mcall	4,,,,66
256
	add	edx, 66
257
	add	ebx, 14
258
	cmp	edx, info_end
259
	jb	@b
260
 
261
    mcall 12, 2 		   ; функция 12: сообщить ОС об отрисовке окна
262
 
263
ret
264
 
265
 
266
align 4
267
;-------------------------------------------------
268
 
269
  pix	dd  0x55AACC33
270
  pxX	dd  200
271
  pxY	dd  160
272
  stX	dw  18
273
  stY	dw  0
274
  reg	dd  0	     ; reg-storage
275
 
276
  Rct	dd  0	     ; reg content
277
  Reg	dd  0x00     ; reg number
278
 
279
 
280
 title db '                       RS780 NB MISC Indirect Registers ',0
281
;------------------------------------------------------------------------------------
282
 reg_str   db	'Reg#| hex.Value  '
283
;------------------------------------------------------------------------------------
284
str1	db	'access addr:'
285
str2	db	'Reg. number:'
286
str3	db	'Reg.content:'
287
 
288
 butstr2 db ' << '
289
 butstr3 db ' >> '
290
 butstr4 db 'Next Page'
291
 butstr5 db 'Prev Page'
292
 
293
bitstr0  db	'31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
294
		209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
295
		209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
296
		205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
297
bitstr1  db	179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
298
bitstr2  db	179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
299
		179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
300
bitstr3  db	212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
301
		205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
302
		205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
303
		205,207,205,207,205,207,205,207,205,207,205,190
304
 
305
info1	db	'---------------- Indirect registers shortlist --------------------'
306
	db	'                                                                  '
307
info2	db	' reg00: hides acces to pcie config registers and some hardware    '
308
	db	' reg08,0B : PCIe link config & IOC control                        '
309
	db	' reg0C : select/disable bridges                                   '
310
	db	' reg32-39, 22-26 : PCIE_NBCONFIG bits                             '
311
	db	' reg40-43 : GPIO pads   | regs74-79 : SCRATCH                     '
312
	db	'------------------------------------------------------------------'
313
info_end:
314
 
315
I_END:		; end of program
316
 
317
	rd 256
318
 
319
align 256
320
st_0: