Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3497 yogev_ezra 1
; Programa Mostra memoria
2
; Projeto: Clovis Bombardelli e Felipe Gustavo Bombardelli
3
; Usar Fasm Assembler
4
; Dez/2007
5
 
6
 
7
; Infos:
8
; keys: w - add 0x200 to current memory address
9
;	s - sub 0x200
10
;	e - add 0x10
11
;	d - sub 0x10
12
;
13
 
14
use32
15
 
16
  org    0x0
17
 
18
STACK_SIZE=1024
19
 
20
  db     'MENUET01'              ; 8 byte id
21
  dd     0x01                    ; header version
22
  dd     START                   ; start of code
23
  dd     I_END                   ; size of image
24
  dd     I_END+STACK_SIZE        ; memory for app
25
  dd     I_END+STACK_SIZE        ; esp
26
  dd     0x0 , 0x0               ; I_Param , I_Icon
27
 
28
 
29
 
30
 
31
 
32
START:
33
 
34
 
35
main:
36
 
37
	call monta_quadro
38
 
39
.a:	mov eax, 11		; espera por evento
40
	int 0x40			; 0= -> redraw
41
	or al,al
42
	jz .h
43
	cmp al, 2			; 1= -> REDRAW
44
	jb main			; 2= -> tecla pressionada
45
	jz .c                         ; 3= -> botão pressionado
46
 
47
; botão
48
	mov  eax,17      		;
49
	int 0x40                   	; OBSERVAÇÕES
50
	cmp  ah,1        		; se o botão apertado for fechar, minimizar, maximizar...todos devem ser do sistema
51
	jnz  .b     		; mover...etc
52
	or   eax,-1   		; saida do aplicativo   **************************deve ser do sistema
53
	int 0x40            	; 					nunca do aplicativo
54
 
55
.b:	jmp .a   	; loop para novo evento
56
 
57
 
58
; tecla
59
.c:	mov  eax,2		; getkey
60
	int 0x40
61
	;cmp al, 1
62
	;jnz .a
63
	cmp ah, 'w'
64
      	jne .a1
65
      	add [end_base], 0x200
66
	jmp main			;
67
.a1:  	cmp ah, 's'
68
      	jne .a2
69
      	cmp [end_base], dword 0x80000000
70
      	jbe .a2
71
      	sub [end_base], 0x200
72
	jmp main			;
73
.a2:	cmp ah, 'e'
74
      	jne .a3
75
      	add [end_base], 0x10
76
	jmp main			;
77
.a3:  	cmp ah, 'd'
78
      	jne .b1
79
      	cmp [end_base], dword 0x80000000
80
      	jbe .b1
81
      	sub [end_base], 0x10
82
.b1:	jmp main
83
 
84
 
85
; atualiza apenas o codigo hex / ascii
86
.h:
87
	call hex_loop
88
;	inc [contador]		; usado apenas para testar a dinamica
89
	jmp .a		; retorna para buscar novo evento
90
 
91
 
92
monta_quadro:
93
 
94
  ; posição inicial, subfunção 1
95
 
96
    	mov  eax,12
97
    	mov  ebx,1
98
    	int 0x40
99
 
100
  ; Desenha o quadro
101
 
102
    	mov  eax,0                     ; função 0 : define e monta o quadro
103
    	mov  ebx,100*65536+480         ; [x pos] *65536 + [x lar]
104
    	mov  ecx,100*65536+440         ; [y pos] *65536 + [y alt]
105
    	mov  edx,[cor_janela]        	 ; cor area RRGGBB
106
    	mov  edi,titulo                ; Titulo
107
    	int 0x40
108
 
109
  ; escreve texto no quadro (barra superior)
110
 
111
  	mov edi,[cor_janela]
112
  	mov  eax,4
113
	mov ecx, [cor_texto]
114
	mov  ebx,8*65536+8
115
	mov  edx,teste
116
	int 0x40
117
 
118
  	add  ebx,11		; adiciona espaço na coord y
119
 
120
  	mov  eax,4
121
	mov ecx, [cor_texto]
122
	mov  edx,barra1
123
	int 0x40
124
 
125
 	call hex_loop
126
 
127
  ; posição final, subfunção 2
128
 
129
.d:	mov  eax,12
130
    	mov  ebx,2
131
    	int 0x40
132
 
133
	ret
134
 
135
  ; buscar conteudo da memoria para mostrar
136
 
137
hex_loop:
138
   	xor eax, eax
139
   	mov ebx, [end_base]	; endereço base
140
 
141
  ; imprime o endereço
142
 
143
   	mov edx, 8*65536+40 ; posição inicial hex
144
   	mov [pos_ascii], edx
145
   	add [pos_ascii], 360*65536	; posição inicial ascii
146
   	mov word [pos_x], 0
147
   	mov al, [quant_linhas]
148
	mov edi,[cor_janela]
149
 
150
.c:   	push eax		;
151
   	push edx		;
152
 
153
   	push ebx		; salva endereço base
154
   	mov al, 47
155
   	mov ecx, ebx	; imprime o endereço
156
   	mov ebx, 0x00080100
157
   	mov esi, [cor_endereco]
158
   	int 0x40
159
	pop ebx		;
160
 
161
	add edx, 60*65536	; pula 8 espaços mais alguma coisa
162
 
163
  ; busca hexcode
164
 
165
	mov esi, [cor_hexcode]
166
	mov al, 4
167
 
168
.b:	push eax		; ----------------------------------------------------------ok
169
 
170
 	mov al, 72	; ebx= endereço de leitura (nao funcionou...) change this service to another
171
	int 0x40		; retorna ecx= dword da posição ebx
172
 
173
   	push ebx	 	; ----------------------------------------------------------ok
174
 	mov ebx, 0x00020100	; 2 digitos, modo hex
175
 	mov al, 4
176
 
177
.a:	push eax		; controle -------------------------------------------------ok
178
 	push ecx		; codigo
179
 	push edx		; posição
180
 	and ecx, 0xff
181
 	mov al, 47
182
 	int 0x40
183
 	call imprime_car$
184
 	pop edx		;
185
 	pop ecx		;
186
 	shr ecx, 8
187
 	add edx, (18)*65536
188
 	pop eax		; ----------------------------------------------------------ok
189
 	dec al
190
 	jnz .a
191
 
192
 	pop ebx		; ----------------------------------------------------------ok
193
 	add ebx, 4	; soma 4 ao endereço base
194
 	pop eax		; ----------------------------------------------------------ok
195
 	dec al		; imprimir mais 4 vezes incrementando ebx em 4
196
 	jnz .b
197
 
198
	pop edx		;
199
 	add edx, 10	;
200
 
201
 ; imprime a string ascii
202
 
203
 	push ebx
204
 	push edx
205
 	mov al, 4
206
      	mov ebx, [pos_ascii]	; endereço na tela
207
      	mov edx, ascii_string	; endereço da string
208
      	or ecx, [cor_ascii]		; cor
209
      	int 0x40
210
 	mov [ascii_x], byte 0
211
 	add [pos_ascii], 10
212
 	pop edx
213
 	pop ebx
214
 
215
 	pop eax		;
216
 	dec al
217
 	jnz .c
218
	ret
219
 
220
imprime_car$:		; ecx tem o caractere a imprimir
221
 
222
	push ebx
223
	xor ebx, ebx
224
	mov bl, [ascii_x]
225
	or cl, cl
226
      	jnz .c
227
      	mov cl, 0x20
228
.c:	mov [ebx+ascii_string], cl
229
	inc [ascii_x]
230
	pop ebx
231
	ret
232
 
233
 
234
; para acessar a memoria do sistema:
235
;
236
;	acessar a base das tabelas de paginaçao
237
;	com o endereço buscar o descritor de pagina
238
; 	ler o endereço físico ndo descritor
239
; ou 	buscar a pagina do sistema e ler nele o endereço fisico
240
 
241
; DATA AREA
242
align 0x10
243
;contador		dd 0			; para testar a dinamica
244
cor_janela  	dd 0x346f72c3		; atrib, tipo, corRGB
245
cor_texto 	dd 0xc0fffffe		; fonte variavel, cor branca
246
cor_endereco	dd 0xc0fffffc
247
cor_hexcode	dd 0xc0fffffd
248
cor_ascii		dd 0xc0fffffa
249
pos_x		db 0
250
pos_y		db 0
251
quant_linhas	db 0x20
252
ascii_x		db 0
253
end_base		dd 0x80000000		; ok
254
pos_ascii		dd 0
255
ascii_string	rb 0x11
256
reservado		rb 3
257
 
258
 
259
titulo    db 'Mostra a memoria do sistema operacional',0
260
 
261
teste	db '--------  ------------------ Hex Code -------------------   -- A S C I I  --',0
262
barra1	db 'Address:  00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f   0123456789abcdef',0
263
 
264
 
265
align 0x10
266
I_END:
267
 
268
 
269
; service 72 from system calls
270
;
271
; must contain:
272
;       mov eax, [eax]
273
;	mov [esp+32], eax
274
;	ret
275