forked from KolibriOS/kolibrios
/system/mm: remove because user access to operating system memory won't ever be possible again
git-svn-id: svn://kolibrios.org@8293 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
c9cad25adc
commit
a97fad65bb
@ -1,285 +0,0 @@
|
|||||||
; Programa Mostra memoria
|
|
||||||
; Projeto: Clovis Bombardelli e Felipe Gustavo Bombardelli
|
|
||||||
; Usar Fasm Assembler
|
|
||||||
; Dez/2007
|
|
||||||
|
|
||||||
|
|
||||||
; Infos:
|
|
||||||
; keys: w - add 0x200 to current memory address
|
|
||||||
; s - sub 0x200
|
|
||||||
; e - add 0x10
|
|
||||||
; d - sub 0x10
|
|
||||||
;
|
|
||||||
|
|
||||||
use32
|
|
||||||
|
|
||||||
org 0x0
|
|
||||||
|
|
||||||
STACK_SIZE=1024
|
|
||||||
|
|
||||||
db 'MENUET01' ; 8 byte id
|
|
||||||
dd 0x01 ; header version
|
|
||||||
dd START ; start of code
|
|
||||||
dd I_END ; size of image
|
|
||||||
dd I_END+STACK_SIZE ; memory for app
|
|
||||||
dd I_END+STACK_SIZE ; esp
|
|
||||||
dd 0x0 , 0x0 ; I_Param , I_Icon
|
|
||||||
|
|
||||||
include 'lang.inc' ;language support
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
START:
|
|
||||||
|
|
||||||
|
|
||||||
main:
|
|
||||||
|
|
||||||
call monta_quadro
|
|
||||||
|
|
||||||
.a: mov eax, 11 ; espera por evento
|
|
||||||
int 0x40 ; 0= -> redraw
|
|
||||||
or al,al
|
|
||||||
jz .h
|
|
||||||
cmp al, 2 ; 1= -> REDRAW
|
|
||||||
jb main ; 2= -> tecla pressionada
|
|
||||||
jz .c ; 3= -> botão pressionado
|
|
||||||
|
|
||||||
; botão
|
|
||||||
mov eax,17 ;
|
|
||||||
int 0x40 ; OBSERVAÇÕES
|
|
||||||
cmp ah,1 ; se o botão apertado for fechar, minimizar, maximizar...todos devem ser do sistema
|
|
||||||
jnz .b ; mover...etc
|
|
||||||
or eax,-1 ; saida do aplicativo **************************deve ser do sistema
|
|
||||||
int 0x40 ; nunca do aplicativo
|
|
||||||
|
|
||||||
.b: jmp .a ; loop para novo evento
|
|
||||||
|
|
||||||
|
|
||||||
; tecla
|
|
||||||
.c: mov eax,2 ; getkey
|
|
||||||
int 0x40
|
|
||||||
;cmp al, 1
|
|
||||||
;jnz .a
|
|
||||||
cmp ah, 'w'
|
|
||||||
jne .a1
|
|
||||||
add [end_base], 0x200
|
|
||||||
jmp main ;
|
|
||||||
.a1: cmp ah, 's'
|
|
||||||
jne .a2
|
|
||||||
cmp [end_base], dword 0x80000000
|
|
||||||
jbe .a2
|
|
||||||
sub [end_base], 0x200
|
|
||||||
jmp main ;
|
|
||||||
.a2: cmp ah, 'e'
|
|
||||||
jne .a3
|
|
||||||
add [end_base], 0x10
|
|
||||||
jmp main ;
|
|
||||||
.a3: cmp ah, 'd'
|
|
||||||
jne .b1
|
|
||||||
cmp [end_base], dword 0x80000000
|
|
||||||
jbe .b1
|
|
||||||
sub [end_base], 0x10
|
|
||||||
.b1: jmp main
|
|
||||||
|
|
||||||
|
|
||||||
; atualiza apenas o codigo hex / ascii
|
|
||||||
.h:
|
|
||||||
call hex_loop
|
|
||||||
; inc [contador] ; usado apenas para testar a dinamica
|
|
||||||
jmp .a ; retorna para buscar novo evento
|
|
||||||
|
|
||||||
|
|
||||||
monta_quadro:
|
|
||||||
|
|
||||||
; posição inicial, subfunção 1
|
|
||||||
|
|
||||||
mov eax,12
|
|
||||||
mov ebx,1
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
; Desenha o quadro
|
|
||||||
|
|
||||||
mov eax,0 ; função 0 : define e monta o quadro
|
|
||||||
mov ebx,100*65536+480 ; [x pos] *65536 + [x lar]
|
|
||||||
mov ecx,100*65536+440 ; [y pos] *65536 + [y alt]
|
|
||||||
mov edx,[cor_janela] ; cor area RRGGBB
|
|
||||||
mov edi,titulo ; Titulo
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
; escreve texto no quadro (barra superior)
|
|
||||||
|
|
||||||
mov edi,[cor_janela]
|
|
||||||
mov eax,4
|
|
||||||
mov ecx, [cor_texto]
|
|
||||||
mov ebx,8*65536+8
|
|
||||||
mov edx,teste
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
add ebx,11 ; adiciona espaço na coord y
|
|
||||||
|
|
||||||
mov eax,4
|
|
||||||
mov ecx, [cor_texto]
|
|
||||||
mov edx,barra1
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
call hex_loop
|
|
||||||
|
|
||||||
; posição final, subfunção 2
|
|
||||||
|
|
||||||
.d: mov eax,12
|
|
||||||
mov ebx,2
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
; buscar conteudo da memoria para mostrar
|
|
||||||
|
|
||||||
hex_loop:
|
|
||||||
xor eax, eax
|
|
||||||
mov ebx, [end_base] ; endereço base
|
|
||||||
|
|
||||||
; imprime o endereço
|
|
||||||
|
|
||||||
mov edx, 8*65536+40 ; posição inicial hex
|
|
||||||
mov [pos_ascii], edx
|
|
||||||
add [pos_ascii], 360*65536 ; posição inicial ascii
|
|
||||||
mov word [pos_x], 0
|
|
||||||
mov al, [quant_linhas]
|
|
||||||
mov edi,[cor_janela]
|
|
||||||
|
|
||||||
.c: push eax ;
|
|
||||||
push edx ;
|
|
||||||
|
|
||||||
push ebx ; salva endereço base
|
|
||||||
mov al, 47
|
|
||||||
mov ecx, ebx ; imprime o endereço
|
|
||||||
mov ebx, 0x00080100
|
|
||||||
mov esi, [cor_endereco]
|
|
||||||
int 0x40
|
|
||||||
pop ebx ;
|
|
||||||
|
|
||||||
add edx, 60*65536 ; pula 8 espaços mais alguma coisa
|
|
||||||
|
|
||||||
; busca hexcode
|
|
||||||
|
|
||||||
mov esi, [cor_hexcode]
|
|
||||||
mov al, 4
|
|
||||||
|
|
||||||
.b: push eax ; ----------------------------------------------------------ok
|
|
||||||
|
|
||||||
mov al, 72 ; ebx= endereço de leitura (nao funcionou...) change this service to another
|
|
||||||
int 0x40 ; retorna ecx= dword da posição ebx
|
|
||||||
|
|
||||||
push ebx ; ----------------------------------------------------------ok
|
|
||||||
mov ebx, 0x00020100 ; 2 digitos, modo hex
|
|
||||||
mov al, 4
|
|
||||||
|
|
||||||
.a: push eax ; controle -------------------------------------------------ok
|
|
||||||
push ecx ; codigo
|
|
||||||
push edx ; posição
|
|
||||||
and ecx, 0xff
|
|
||||||
mov al, 47
|
|
||||||
int 0x40
|
|
||||||
call imprime_car$
|
|
||||||
pop edx ;
|
|
||||||
pop ecx ;
|
|
||||||
shr ecx, 8
|
|
||||||
add edx, (18)*65536
|
|
||||||
pop eax ; ----------------------------------------------------------ok
|
|
||||||
dec al
|
|
||||||
jnz .a
|
|
||||||
|
|
||||||
pop ebx ; ----------------------------------------------------------ok
|
|
||||||
add ebx, 4 ; soma 4 ao endereço base
|
|
||||||
pop eax ; ----------------------------------------------------------ok
|
|
||||||
dec al ; imprimir mais 4 vezes incrementando ebx em 4
|
|
||||||
jnz .b
|
|
||||||
|
|
||||||
pop edx ;
|
|
||||||
add edx, 10 ;
|
|
||||||
|
|
||||||
; imprime a string ascii
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
push edx
|
|
||||||
mov al, 4
|
|
||||||
mov ebx, [pos_ascii] ; endereço na tela
|
|
||||||
mov edx, ascii_string ; endereço da string
|
|
||||||
or ecx, [cor_ascii] ; cor
|
|
||||||
int 0x40
|
|
||||||
mov [ascii_x], byte 0
|
|
||||||
add [pos_ascii], 10
|
|
||||||
pop edx
|
|
||||||
pop ebx
|
|
||||||
|
|
||||||
pop eax ;
|
|
||||||
dec al
|
|
||||||
jnz .c
|
|
||||||
ret
|
|
||||||
|
|
||||||
imprime_car$: ; ecx tem o caractere a imprimir
|
|
||||||
|
|
||||||
push ebx
|
|
||||||
xor ebx, ebx
|
|
||||||
mov bl, [ascii_x]
|
|
||||||
or cl, cl
|
|
||||||
jnz .c
|
|
||||||
mov cl, 0x20
|
|
||||||
.c: mov [ebx+ascii_string], cl
|
|
||||||
inc [ascii_x]
|
|
||||||
pop ebx
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
; para acessar a memoria do sistema:
|
|
||||||
;
|
|
||||||
; acessar a base das tabelas de paginaçao
|
|
||||||
; com o endereço buscar o descritor de pagina
|
|
||||||
; ler o endereço físico ndo descritor
|
|
||||||
; ou buscar a pagina do sistema e ler nele o endereço fisico
|
|
||||||
|
|
||||||
; DATA AREA
|
|
||||||
align 0x10
|
|
||||||
;contador dd 0 ; para testar a dinamica
|
|
||||||
cor_janela dd 0x346f72c3 ; atrib, tipo, corRGB
|
|
||||||
cor_texto dd 0xc0fffffe ; fonte variavel, cor branca
|
|
||||||
cor_endereco dd 0xc0fffffc
|
|
||||||
cor_hexcode dd 0xc0fffffd
|
|
||||||
cor_ascii dd 0xc0fffffa
|
|
||||||
pos_x db 0
|
|
||||||
pos_y db 0
|
|
||||||
quant_linhas db 0x20
|
|
||||||
ascii_x db 0
|
|
||||||
end_base dd 0x80000000 ; ok
|
|
||||||
pos_ascii dd 0
|
|
||||||
ascii_string rb 0x11
|
|
||||||
reservado rb 3
|
|
||||||
|
|
||||||
if lang eq it
|
|
||||||
titulo db 'Visualizza la memoria del sistema operativo',0
|
|
||||||
teste db '-------- ----------------- Codice Hex ----------------- -- A S C I I --',0
|
|
||||||
barra1 db 'Indirizzo:00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 0123456789abcdef',0
|
|
||||||
|
|
||||||
else if lang eq es
|
|
||||||
titulo db 'Mostra a memoria do sistema operacional',0
|
|
||||||
teste db '-------- ------------------ Hex Code ------------------- -- A S C I I --',0
|
|
||||||
barra1 db 'Address: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 0123456789abcdef',0
|
|
||||||
|
|
||||||
else
|
|
||||||
titulo db 'Displays the operating system memory',0
|
|
||||||
teste db '-------- ------------------ Hex Code ------------------- -- A S C I I --',0
|
|
||||||
barra1 db 'Address: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 0123456789abcdef',0
|
|
||||||
end if
|
|
||||||
|
|
||||||
align 0x10
|
|
||||||
I_END:
|
|
||||||
|
|
||||||
|
|
||||||
; service 72 from system calls
|
|
||||||
;
|
|
||||||
; must contain:
|
|
||||||
; mov eax, [eax]
|
|
||||||
; mov [esp+32], eax
|
|
||||||
; ret
|
|
||||||
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
|||||||
#!gmake
|
|
||||||
|
|
||||||
# Macro
|
|
||||||
FASM=/opt/bin/fasm
|
|
||||||
KPACK=/opt/bin/kpack
|
|
||||||
LANG=lang.inc
|
|
||||||
FILE=MM
|
|
||||||
SOURCE=${FILE}.asm
|
|
||||||
OUT=${FILE}.bin
|
|
||||||
|
|
||||||
en:
|
|
||||||
echo "lang fix en" > ${LANG}
|
|
||||||
${FASM} ${SOURCE} ${OUT}
|
|
||||||
it:
|
|
||||||
echo "lang fix it" > ${LANG}
|
|
||||||
${FASM} ${SOURCE} ${OUT}
|
|
||||||
es:
|
|
||||||
echo "lang fix es" > ${LANG}
|
|
||||||
${FASM} ${SOURCE} ${OUT}
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f ${LANG} ${OUT}
|
|
Loading…
Reference in New Issue
Block a user