Subversion Repositories Kolibri OS

Rev

Rev 3497 | Go to most recent revision | Details | Compare with Previous | 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
;
3628 fedesco 13
 
3497 yogev_ezra 14
use32
3628 fedesco 15
 
3497 yogev_ezra 16
  org    0x0
17
 
18
STACK_SIZE=1024
3628 fedesco 19
 
3497 yogev_ezra 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
 
3628 fedesco 28
include 'lang.inc' ;language support
3497 yogev_ezra 29
 
30
 
31
 
32
START:
33
 
34
 
35
main:
36
 
37
	call monta_quadro
3628 fedesco 38
 
3497 yogev_ezra 39
.a:	mov eax, 11		; espera por evento
3628 fedesco 40
	int 0x40			; 0= -> redraw
3497 yogev_ezra 41
	or al,al
42
	jz .h
3628 fedesco 43
	cmp al, 2			; 1= -> REDRAW
44
	jb main			; 2= -> tecla pressionada
45
	jz .c                         ; 3= -> botão pressionado
3497 yogev_ezra 46
 
3628 fedesco 47
; botão
48
	mov  eax,17      		;
3497 yogev_ezra 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
 
3628 fedesco 55
.b:	jmp .a   	; loop para novo evento
3497 yogev_ezra 56
 
3628 fedesco 57
 
58
; tecla
3497 yogev_ezra 59
.c:	mov  eax,2		; getkey
60
	int 0x40
3628 fedesco 61
	;cmp al, 1
3497 yogev_ezra 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
3628 fedesco 71
      	sub [end_base], 0x200
3497 yogev_ezra 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
3628 fedesco 88
;	inc [contador]		; usado apenas para testar a dinamica
3497 yogev_ezra 89
	jmp .a		; retorna para buscar novo evento
90
 
91
 
92
monta_quadro:
3628 fedesco 93
 
3497 yogev_ezra 94
  ; posição inicial, subfunção 1
3628 fedesco 95
 
96
    	mov  eax,12
97
    	mov  ebx,1
3497 yogev_ezra 98
    	int 0x40
3628 fedesco 99
 
3497 yogev_ezra 100
  ; Desenha o quadro
3628 fedesco 101
 
3497 yogev_ezra 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
3628 fedesco 108
 
3497 yogev_ezra 109
  ; escreve texto no quadro (barra superior)
3628 fedesco 110
 
111
  	mov edi,[cor_janela]
112
  	mov  eax,4
3497 yogev_ezra 113
	mov ecx, [cor_texto]
3628 fedesco 114
	mov  ebx,8*65536+8
115
	mov  edx,teste
116
	int 0x40
117
 
3497 yogev_ezra 118
  	add  ebx,11		; adiciona espaço na coord y
3628 fedesco 119
 
120
  	mov  eax,4
3497 yogev_ezra 121
	mov ecx, [cor_texto]
3628 fedesco 122
	mov  edx,barra1
123
	int 0x40
124
 
3497 yogev_ezra 125
 	call hex_loop
126
 
3628 fedesco 127
  ; posição final, subfunção 2
128
 
129
.d:	mov  eax,12
130
    	mov  ebx,2
131
    	int 0x40
132
 
133
	ret
134
 
3497 yogev_ezra 135
  ; buscar conteudo da memoria para mostrar
136
 
3628 fedesco 137
hex_loop:
3497 yogev_ezra 138
   	xor eax, eax
139
   	mov ebx, [end_base]	; endereço base
3628 fedesco 140
 
3497 yogev_ezra 141
  ; imprime o endereço
3628 fedesco 142
 
3497 yogev_ezra 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]
3628 fedesco 148
	mov edi,[cor_janela]
3497 yogev_ezra 149
 
3628 fedesco 150
.c:   	push eax		;
151
   	push edx		;
152
 
153
   	push ebx		; salva endereço base
3497 yogev_ezra 154
   	mov al, 47
155
   	mov ecx, ebx	; imprime o endereço
156
   	mov ebx, 0x00080100
157
   	mov esi, [cor_endereco]
158
   	int 0x40
3628 fedesco 159
	pop ebx		;
160
 
3497 yogev_ezra 161
	add edx, 60*65536	; pula 8 espaços mais alguma coisa
3628 fedesco 162
 
163
  ; busca hexcode
164
 
3497 yogev_ezra 165
	mov esi, [cor_hexcode]
166
	mov al, 4
167
 
168
.b:	push eax		; ----------------------------------------------------------ok
3628 fedesco 169
 
3497 yogev_ezra 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
3628 fedesco 178
 	push ecx		; codigo
179
 	push edx		; posição
3497 yogev_ezra 180
 	and ecx, 0xff
181
 	mov al, 47
182
 	int 0x40
183
 	call imprime_car$
3628 fedesco 184
 	pop edx		;
185
 	pop ecx		;
3497 yogev_ezra 186
 	shr ecx, 8
187
 	add edx, (18)*65536
188
 	pop eax		; ----------------------------------------------------------ok
189
 	dec al
190
 	jnz .a
3628 fedesco 191
 
3497 yogev_ezra 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
3628 fedesco 197
 
198
	pop edx		;
3497 yogev_ezra 199
 	add edx, 10	;
3628 fedesco 200
 
201
 ; imprime a string ascii
202
 
3497 yogev_ezra 203
 	push ebx
204
 	push edx
3628 fedesco 205
 	mov al, 4
206
      	mov ebx, [pos_ascii]	; endereço na tela
3497 yogev_ezra 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
3628 fedesco 214
 
215
 	pop eax		;
3497 yogev_ezra 216
 	dec al
217
 	jnz .c
218
	ret
3628 fedesco 219
 
3497 yogev_ezra 220
imprime_car$:		; ecx tem o caractere a imprimir
3628 fedesco 221
 
3497 yogev_ezra 222
	push ebx
223
	xor ebx, ebx
224
	mov bl, [ascii_x]
225
	or cl, cl
226
      	jnz .c
227
      	mov cl, 0x20
3628 fedesco 228
.c:	mov [ebx+ascii_string], cl
3497 yogev_ezra 229
	inc [ascii_x]
230
	pop ebx
231
	ret
232
 
3628 fedesco 233
 
3497 yogev_ezra 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
3628 fedesco 255
ascii_string	rb 0x11
3497 yogev_ezra 256
reservado		rb 3
257
 
3628 fedesco 258
if lang eq it
259
	titulo    db 'Visualizza la memoria del sistema operativo',0
260
	teste	db '--------  ----------------- Codice Hex  -----------------   -- A S C I I  --',0
261
	barra1	db 'Indirizzo:00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f   0123456789abcdef',0
3497 yogev_ezra 262
 
3628 fedesco 263
else if lang eq es
264
	titulo    db 'Mostra a memoria do sistema operacional',0
265
	teste	db '--------  ------------------ Hex Code -------------------   -- A S C I I  --',0
266
	barra1	db 'Address:  00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f   0123456789abcdef',0
3497 yogev_ezra 267
 
3628 fedesco 268
else
269
	titulo    db 'Displays the operating system memory',0
270
	teste	db '--------  ------------------ Hex Code -------------------   -- A S C I I  --',0
271
	barra1	db 'Address:  00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f   0123456789abcdef',0
272
end if
3497 yogev_ezra 273
 
274
align 0x10
275
I_END:
276
 
3628 fedesco 277
 
3497 yogev_ezra 278
; service 72 from system calls
3628 fedesco 279
;
3497 yogev_ezra 280
; must contain:
281
;       mov eax, [eax]
282
;	mov [esp+32], eax
283
;	ret
284