Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

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