From de447bcec4b86a24df150665533c748116868520 Mon Sep 17 00:00:00 2001
From: Yogev Ezra <pr@kolibrios.org>
Date: Thu, 9 May 2013 18:49:02 +0000
Subject: [PATCH] Add some more sources from MENUET32

git-svn-id: svn://kolibrios.org@3497 a494cfbc-eb01-0410-851d-a64ba20cac60
---
 .../develop/cmd/trunk/examples/AUTOEXEC.CMD   |   5 +
 .../develop/cmd/trunk/examples/EXAMPLE.CMD    |  35 ++
 programs/develop/cmd/trunk/examples/HELLO.ASM |  70 ++++
 programs/develop/cmd/trunk/examples/PARAM.ASM |  55 +++
 programs/media/paint/trunk/PAINT.ASM          | 365 ++++++++++++++++++
 programs/system/mm/trunk/MM.asm               | 276 +++++++++++++
 6 files changed, 806 insertions(+)
 create mode 100644 programs/develop/cmd/trunk/examples/AUTOEXEC.CMD
 create mode 100644 programs/develop/cmd/trunk/examples/EXAMPLE.CMD
 create mode 100644 programs/develop/cmd/trunk/examples/HELLO.ASM
 create mode 100644 programs/develop/cmd/trunk/examples/PARAM.ASM
 create mode 100644 programs/media/paint/trunk/PAINT.ASM
 create mode 100644 programs/system/mm/trunk/MM.asm

diff --git a/programs/develop/cmd/trunk/examples/AUTOEXEC.CMD b/programs/develop/cmd/trunk/examples/AUTOEXEC.CMD
new file mode 100644
index 0000000000..b00dc39ce4
--- /dev/null
+++ b/programs/develop/cmd/trunk/examples/AUTOEXEC.CMD
@@ -0,0 +1,5 @@
+ver
+echo Type 'help' for help. Type '/example' for additional information (RUS)
+echo
+ends
+
diff --git a/programs/develop/cmd/trunk/examples/EXAMPLE.CMD b/programs/develop/cmd/trunk/examples/EXAMPLE.CMD
new file mode 100644
index 0000000000..4ce0d85bbe
--- /dev/null
+++ b/programs/develop/cmd/trunk/examples/EXAMPLE.CMD
@@ -0,0 +1,35 @@
+cls
+echo
+echo �� ���⥩訩 �ਬ�� �ᯮ��塞��� �ਯ� ��� �������� ���������
+echo ��ப� CMD ���ᨨ 0.24
+echo �ᯮ���� ������� echo � pause ��� �뢮�� ⥪�� � ����������
+echo ����������⢨� � ���짮��⥫��.
+echo � �裡 � �������筮� ��ࠡ�⪮� �������� � ��堭���� �ᯮ������
+echo �ਯ⮢ ����⥫쭮 ᮧ������ �ਯ�� ⮫쪮 � TINYPAD'e � �� �������� 㦥
+echo ��࠭�� �� ࠬ��� 䠩�, ���⮬ �� ��⠢���� ��᫥ ������ ���㦭��
+echo ᨬ����� (���ਬ��, �஡���).
+echo
+echo �ਬ�� �믮������ ���⥩襩 �ࠪ��᪮� ����� � ������� �ᯮ��塞��
+echo �ਯ⮢:
+echo
+echo ������ ���� ������� ��� ⮣�, �⮡� ᮧ���� ������� ����� 䠩�� CMD.ASM
+pause
+cp cmd.asm+cmd.bak
+echo
+echo ������ ������ ���� ������� ��� ⮣�, �⮡� �뢥�� ��� ⮫쪮 ��
+echo ᮧ������� 䠩�� �� ��࠭ � 㤮�⮢������ � ��� ������⢨� �� /RD/1
+pause
+ls cmd.bak
+echo
+echo ������ ������ ���� ������� ��� ⮣�, �⮡� 㤠���� ⮫쪮 �� ᮧ�����
+echo 䠩� CMD.BAK � ࠬ��᪠.
+pause
+del cmd.bak
+echo
+echo �� �맮�� ������� PAUSE �� ����� ������ ������� ESCAPE, �⮡� ��ࢠ��
+echo ࠡ��� �ਯ�. �믮������ ���譨� ������ � ������ ���ᨨ 㦥 ॠ��������.
+echo �ᯮ�짮����� ᨬ���� '/' � �ਯ�� �� ॠ��������. � ������ ���ᨨ
+echo �������� �ਯ�� ४��������� �������� �������� ends.
+echo ���� ����������.
+echo
+ends
\ No newline at end of file
diff --git a/programs/develop/cmd/trunk/examples/HELLO.ASM b/programs/develop/cmd/trunk/examples/HELLO.ASM
new file mode 100644
index 0000000000..8799c6ad80
--- /dev/null
+++ b/programs/develop/cmd/trunk/examples/HELLO.ASM
@@ -0,0 +1,70 @@
+; Hello, World! - Programm example for CMD shell
+; Compile with FASM for Menuet
+;
+; You must run this program from CMD shell only
+;
+
+use32
+
+   org 0x0
+
+   db 'MENUET01'
+   dd 0x01
+   dd START
+   dd I_END
+   dd 0x100000
+   dd 0x7fff0
+   dd 0x0
+   dd 0x0
+
+include "CMDIPC.INC"       ; ��������� 䠩� CMDIPC.INC
+
+START:
+ call initipc              ; ���樠����஢��� ��� ࠡ��� � CMD
+
+ mov eax,26                ; ����� ��ப�
+ mov ebx,hello_text        ; �����⥫� �� ��ப�
+ call print                ; �뢥�� ��ப�
+
+again:
+ call getkey               ; ������� ������ ������ � ����� �� � key
+
+ cmp byte [key],'Y'        ; ��� �ணࠬ�� �஢����, ����� �� �㦭. ������
+ je goodday
+ cmp byte [key],'y'
+ je goodday
+ cmp byte [key],'N'
+ je goodmorning
+ cmp byte [key],'n'
+ je goodmorning
+
+ jmp again                 ; �᫨ �㦭. ������ �� �����, � ����� �������
+                           ; ������
+goodday:                   ; �뢥�� �ਢ���⢨� Good Day, World!
+ call eol                  ; �ய����� ��ப�
+
+ mov eax,16
+ mov ebx,text4
+ call print
+
+ call eol                  ; �ய����� ��ப�
+
+ jmp endipc                ; �������� �ணࠬ��
+
+goodmorning:               ; �뢥�� �ਢ���⢨� Good Morning, World!
+ call eol
+
+ mov eax,20
+ mov ebx,text5
+ call print
+
+ call eol
+
+ jmp endipc                ; �������� �ணࠬ��
+
+hello_text db 'Is it after 12 noon? [Y\N]?'
+
+text4 db 'Good day, World!'
+text5 db 'Good morning, World!'
+
+I_END:
diff --git a/programs/develop/cmd/trunk/examples/PARAM.ASM b/programs/develop/cmd/trunk/examples/PARAM.ASM
new file mode 100644
index 0000000000..9e716f6fed
--- /dev/null
+++ b/programs/develop/cmd/trunk/examples/PARAM.ASM
@@ -0,0 +1,55 @@
+use32
+
+   org 0x0
+
+   db 'MENUET01'
+   dd 0x01
+   dd START
+   dd I_END
+   dd 0x100000
+   dd 0x7fff0
+   dd I_PARAM              ; 㪠��⥫� �� ��ࠬ����
+
+include "CMDIPC.INC"       ; ��������� 䠩� CMDIPC.INC
+
+START:
+ call initipc              ; ���樠����஢��� ��� ࠡ��� � CMD
+
+ mov eax,47                ; �뢥�� ᮮ�饭��
+ mov ebx,mess
+ call print
+
+ call eol                  ; �ய����� ��ப�
+ call eol
+
+ cmp [I_PARAM],byte 0      ; �஢����, ���� �� ��ࠬ����
+ jz noparam
+
+ mov eax,43
+ mov ebx,mess1
+ call print
+
+ call eol
+
+ mov eax,30                ; �뢥�� ��ࠬ����
+ mov ebx,I_PARAM
+ call print
+
+ jmp end1                  ; ���室 � ����� �ணࠬ��
+
+noparam:
+ mov eax,40                ; �뢥�� ᮮ�饭�� � ⮬, �� ��� ��ࠬ��஢
+ mov ebx,mess2
+ call print
+
+end1:
+ jmp endipc               ; �������� �ணࠬ��
+
+mess db 'PARAM.ASM - Test params in IPC programs for CMD'
+
+mess1 db 'This program was started with this params: '
+mess2 db 'This program was started without params!'
+
+I_PARAM db 0
+
+I_END:
\ No newline at end of file
diff --git a/programs/media/paint/trunk/PAINT.ASM b/programs/media/paint/trunk/PAINT.ASM
new file mode 100644
index 0000000000..c088f7f0bb
--- /dev/null
+++ b/programs/media/paint/trunk/PAINT.ASM
@@ -0,0 +1,365 @@
+;*********************************
+;*                               *
+;*    PAINT 0.02 ��� MenuetOS    *
+;*                               *
+;*     �������஢��� FASM'��     *
+;*                               *
+;*********************************
+
+;******************************************************************************
+; ��� �ணࠬ�� �� �㦭� ��쥧�� ��ᬠ�ਢ��� - �� �ᥣ� ���� �ਬ��,
+; � ���஬ ��������, ��� ࠡ���� � ������묨 ��⥬�묨 �㭪�ﬨ ����,
+; �� ����� �� ��ଠ��� ����᪨� ।����. ��� �ணࠬ�� ����� ���⮩,
+; � ��� �।�����祭� ��� ��, �� ⮫쪮 ��稭��� ������ ��ᥬ����,
+; ���⮬� � ��६���� ᤥ���� ��� ��� ����� ����� ������.
+; ��� �� �����, ��� �����쭮 ������ ��⨬���஢��, ��� �� �������
+; ����� ����㤭��� ��� ���������. � ����ࠫ�� ��⥫쭮 �ப������஢���
+; ᫮��� ����. ����, ���� �ணࠬ�� �ਭ������� �� ���, � Sniper'�, ���
+; ���ண� ���饬-� �� � ��ᠫ���.
+;   ���� � ���祭�� �ᬠ!
+;   ���� ����㡭�, ivan-yar@bk.ru
+;******************************************************************************
+
+; ������砥� ����室��� ������
+include 'macros.inc'
+
+;******************************************************************************
+
+; ������ ���������
+meos_app_start
+; ������� ����
+code
+    mov  eax,40       ; ᮮ�騬 ��⥬�, ����� ᮡ��� �㤥� ��ࠡ��뢠��
+    mov  ebx,0100101b ; ��᪠ ᮡ�⨩ - ����ᮢ�� (1) + ������ (3) + ���� (6
+    int  0x40         ; �� ������� ��뢠�� ��⥬��� �㭪��
+
+    mov  [workarea.cx],10  ; ���न���� ࠡ�祩 (������᪮�) ������
+    mov  [workarea.cy],45  ; ��� �ᮢ����
+
+red:
+    call draw_window   ; ��뢠�� ��楤��� ���ᮢ�� ����
+
+still:            ; ������� ���� ��������� - ���� ��������� ���������
+
+    mov  eax,10   ; �㭪�� 10 - ����� ᮡ���; �ணࠬ�� ��⠭���������� ��
+    int  0x40     ; ᫥����� ������� �� �㤥� �믮����� �� �� ���, ����
+                  ; �� �ந������ ᮡ�⨥
+
+    ; ⥯��� ॣ���� eax ᮤ�ন� ����� ᮡ���
+    ; ����।�� �ࠢ��� ��� � �ᥬ� �������묨 ���祭�ﬨ, �⮡� �맢���
+    ; �㦭� ��ࠡ��稪
+
+    cmp  eax,1    ; ����ᮢ��� ���� ?
+    je   red      ; �᫨ ॣ���� eax ࠢ�� ������, � ���室�� �� ���� red
+    cmp  eax,3    ; ����� ������ ?
+    je   button
+    cmp  eax,6    ; ����?
+    je   mouse
+
+    jmp  still    ; �᫨ �ந��諮 ᮡ�⨥, ���஥ �� �� ��ࠡ��뢠��,
+                  ; ���� �����頥��� � ��砫� 横��, ��� ⠪��� ����
+                  ; �� ������! �.�. �᫨ ��� ������� ��� ����, �
+                  ; ��祣� ���譮�� �� ������.
+
+;******************************************************************************
+
+  button:        ; ��ࠡ��稪 ������ ������ � ���� �ணࠬ��
+    mov  eax,17  ; �㭪�� N17 - ������� �����䨪��� ����⮩ ������
+    int  0x40
+
+    ; ⥯��� � ॣ���� ah ᮤ�ন��� �����䨪���.
+
+    shr  eax,8   ; ah -> al (ᤢ�� �� 8 ��� ��ࠢ�)
+
+    dec  al       ; �����䨪���_������--;
+    jnz  .noclose ; �᫨ १���� �।��饩 ������� ࠢ�� ���, ����뢠����
+                  ; ���� - ��� �� ���� noclose
+
+    or   eax,-1  ; ��室 �� �ணࠬ��
+    int  0x40
+
+  .noclose:
+    ; �᫨ �� � ������, ����� �����䨪��� ������ �� �� ࠢ�� ���...
+    ; ⥯��� � ��� � eax ᮤ�ন��� (����� 梥⭮� ������ - 1),
+    ; �.� ��� 1, ��� 2, ... ,��� 5
+
+    ; 㬥��訬 �� 1:
+    dec  eax
+
+    ; ��� �� ��� ������� ��������� � eax ������� ᫮�� �� ����� colors+eax*4
+    ; ��� colors - ᬥ饭�� ��⪨ colors, ��᫥ ���ன ���� ��᫥����⥫쭮���
+    ; 梥⮢, eax*4 - ����� 梥�, 㬭������ �� 4, �.�. �� ���� 梥� �㦭�
+    ; ���� ����.
+    mov  eax,[colors+eax*4]
+
+    ; ⥯��� �� ��⠭���� 梥�, ᮤ�ঠ騩�� � ॣ���� eax ��� �᭮����:
+    mov  [active_color],eax
+
+    ; �� ���, ᮡ�⢥���, � ���, �� �� ��� �ॡ������� ;)
+    ; ������ � ��砫� 横�� ��ࠡ�⪨ ᮡ�⨩
+    jmp  still
+
+;******************************************************************************
+
+  mouse:          ; ��ࠡ��稪 ���
+    mov  eax,37             ; ᭠砫� ����稬 ⥪�騥 ���न���� ���
+    mov  ebx,1
+    int  0x40
+
+    mov  ebx,eax            ; �८�ࠧ㥬 ��
+    shr  eax,16             ;   eax=x;
+    and  ebx,0xffff         ;   ebx=y;
+
+    cmp  ebx,22
+    jb   save_canvas
+
+    sub  eax,[workarea.cx]  ; x-=[workarea.cx]
+    cmp  eax,0              ; �᫨ ���� ����� ������᪮� ������,
+    jle  .not_pressed       ;   ��祣� �� ��㥬
+    cmp  eax,[workarea.sx]  ; �᫨ ���� �ࠢ��...
+    jae  .not_pressed
+
+    sub  ebx,[workarea.cy]
+    cmp  ebx,0              ; ...���...
+    jle  .not_pressed
+    cmp  ebx,[workarea.sy]  ; ...����...
+    jae  .not_pressed
+
+    ; ����� ������ ������?
+    mov  eax,37
+    mov  ebx,2
+    int  0x40
+
+    ; �᫨ ����� ������ (�.�. eax = 1), � ����� �����
+    cmp  eax,1
+    je   .leftbtn
+
+  .not_pressed:
+    ; ����� ������ �� �����, �������� ⥪�騥 ���न���� � �㤥� ����� ᮡ���
+    mov  [mouse_pressed],0   ; ���� �� �����
+    mov  eax,37              ; ����稬 ���न����
+    mov  ebx,1
+    int  0x40
+    mov  ebx,eax
+    shr  eax,16
+    and  ebx,0xffff
+    mov  [old_x],eax         ; �������� ��
+    mov  [old_y],ebx
+    jmp  still
+
+  .leftbtn:
+    ; ����� ������ �����, ���� �� �������!
+    mov  [mouse_pressed],1
+
+    ; ����稬 ���न���� ����� ��� (�⭮�⥫쭮 ����)
+    mov  eax,37              ; �㭪�� 37 - ������� ���ﭨ� ���
+    mov  ebx,1               ; ����㭪�� 1
+    int  0x40
+
+    ; ��।����� �� ⠪, �⮡� ��� �뫨 � ࠧ��� ॣ�����, �.�. eax � ebx
+    mov  ebx,eax
+    shr  eax,16
+    and  ebx,0xffff
+
+    ; �����⮢�� ��ࠬ���� ��� �㭪樨 �ᮢ���� �����
+    mov  ecx,[old_x]     ; ��� ��砫� ����㧨� ���� ���न����
+    mov  edx,[old_y]
+    mov  [old_x],eax     ; ⥯��� ��࠭�� ⥪�騥 � ����
+    mov  [old_y],ebx
+    shl  ecx,16          ; � ���孥� ᫮�� ��砫�� (⥪�騥) ���न����
+    shl  edx,16
+    add  eax,ecx         ; � � ������ ᫮�� ������, �.�. ����
+    add  ebx,edx
+
+    mov  ecx,ebx             ; �����塞 ॣ����� ⠪, ��� ��� �㦭� 38 �㭪樨
+    mov  ebx,eax
+    mov  eax,38              ; ����� �㭪樨 � eax
+    mov  edx,[active_color]  ; � edx 梥�
+    int  0x40
+
+;             - ���஡�� ���⠢��� ��㣨� ���祭�� (00090001)
+    mov  edi,0x00010001      ; �⮡� ����� �� �뫠 ᫨誮� ⮭���,
+    add  ebx,edi             ; ����㥬 �冷� �� 3!
+    int  0x40
+    add  ecx,edi
+    int  0x40
+    sub  ebx,edi
+    int  0x40
+
+    sub  ebx,edi             ; �� � �⮡� ᬮ�५��� ᮢᥬ ����,
+    int  0x40                ; ����㥬 �� 5!
+    sub  ecx,edi
+    int  0x40
+    sub  ecx,edi
+    int  0x40
+    add  ebx,edi
+    int  0x40
+    add  ebx,edi
+    int  0x40
+
+  jmp still
+
+;******************************************************************************
+
+save_canvas:
+    mov  eax,[process.x_size]
+    add  eax,[workarea.cx]
+    mov  ebx,[process.y_size]
+    add  ebx,[workarea.cy]
+
+    jmp still
+
+;******************************************************************************
+
+;   *********************************************
+;   *******  ����������� � ��������� ���� *******
+;   *********************************************
+
+draw_window:
+
+    mov  eax,48                    ; ���������� ��������� �����
+    mov  ebx,3
+    mov  ecx,sc
+    mov  edx,sizeof.system_colors
+    int  0x40
+
+    mov  eax,12      ; �㭪�� 12: ᮮ���� �� �� ���ᮢ�� ����
+    mov  ebx,1       ; 1, ��稭��� �ᮢ���
+    int  0x40
+
+                                   ; ������� ����
+    mov  eax,0                     ; �㭪�� 0 : ��।����� � ���ᮢ��� ����
+    mov  ebx,100*65536+400         ; [x ����] *65536 + [x ࠧ���]
+    mov  ecx,100*65536+300         ; [y ����] *65536 + [y ࠧ���]
+    mov  edx,[sc.work]             ; 梥� ࠡ�祩 ������  RRGGBB,8->color gl
+    or   edx,0x02000000
+    mov  esi,[sc.grab]             ; 梥� ������ ��������� RRGGBB,8->color gl
+    or   esi,0x80000000
+    mov  edi,[sc.frame]            ; 梥� ࠬ��            RRGGBB
+    int  0x40
+
+    mov  eax,9                     ; ����稬 ���ଠ�� � ᥡ�
+    mov  ebx,process
+    mov  ecx,-1
+    int  0x40
+
+    mov  eax,[process.x_size]      ; ����ந� ࠧ��� ࠡ�祩 ������
+    add  eax,-20                   ;   (� ࠧ��� ���� - 20)
+    mov  [workarea.sx],eax         ;
+    mov  eax,[process.y_size]      ;
+    add  eax,-60                   ;   (� ࠧ��� - 60)
+    mov  [workarea.sy],eax         ;
+
+                                   ; ��������� ����
+    mov  eax,4                     ; �㭪�� 4 : ������� � ���� ⥪��
+    mov  ebx,8*65536+8             ; [x] *65536 + [y]
+    mov  ecx,[sc.grab_text]        ; 梥�
+    or   ecx,0x10000000            ; ����
+    mov  edx,header                ; ���� ��ப�
+    mov  esi,header_len            ; � �� �����
+    int  0x40
+
+                                   ; ������ �������� ����
+    mov  eax,8                     ; �㭪�� 8 : ��।����� � ���ᮢ��� ������
+;   mov  ebx,(300-19)*65536+12     ; [x ����] *65536 + [x ࠧ���]
+    mov  ebx,[process.x_size]
+    add  ebx,-19
+    shl  ebx,16
+    add  ebx,12
+    mov  ecx,5*65536+12            ; [y ����] *65536 + [y ࠧ���]
+    mov  edx,1                     ; �����䨪��� ������
+    mov  esi,[sc.grab_button]      ; 梥� ������ RRGGBB
+    int  0x40
+
+    cmp  [process.y_size],80
+    jb   .finish
+
+    ; ᮧ��� ������ �롮� 梥�:
+    mov  ebx,10*65536+10           ; ��砫쭠� x ���न��� � ࠧ���
+    mov  ecx,27*65536+10           ; ��砫쭠� y ���न��� & size
+ .new_button:
+    inc  edx                       ; �����䨪���++;
+    mov  esi,[btn_colors-8+edx*4]  ; 梥� ������
+    int  0x40                      ; �⠢�� ������
+    add  ebx,12*65536              ; ᫥����� ������ �ࠢ�� �� 12
+    cmp  edx,9                     ; �ࠢ������ edx (�����䨪���) � 9
+    jbe  .new_button               ; �᫨ ����� ��� ࠢ�� -> ��� ���� �����
+
+    mov  eax,13                    ; ��⨬ "宫��" - ��������� �������
+    mov  ebx,[workarea.cx]
+    mov  ecx,[workarea.cy]
+    shl  ebx,16
+    shl  ecx,16
+    add  ebx,[workarea.sx]
+    add  ecx,[workarea.sy]
+    mov  edx,0xffffff
+    int  0x40
+
+ .finish:
+    mov  eax,12      ; ᮮ�頥� ��⥬� � �����襭�� ���ᮢ�� ����
+    mov  ebx,2
+    int  0x40
+
+    ret
+
+;******************************************************************************
+; ��砫� ������ ���樠����஢����� ������
+; �᫨ �� ��� �� �����, �� ����� "���樠����஢����", � ������:
+; �� � �����, ����� ��᢮��� ��砫쭮� ���祭��
+data
+
+header:                  ; ��ப� ���������
+   db  'PAINT v0.2 for MenuetOS'
+header_len = $ - header  ; � �� �����
+
+   mouse_pressed   db  0 ; �����뢠��, ����� �� �뫠 ���� � �।��騩 ������
+
+; 梥� ������
+btn_colors:
+   dd 0xdddddd ; white
+   dd 0x444444 ; black
+   dd 0x00dd00 ; green
+   dd 0x0000dd ; blue
+   dd 0xdd0000 ; red
+   dd 0xdd00dd ; magenta
+   dd 0xdddd00 ; yellow
+   dd 0x00dddd ; cyan
+   dd 0x559955 ; warm green
+
+; 梥� ���� (� ⮬ �� ���浪�, �� � 梥� ������)
+colors:
+   dd 0xffffff ; ����
+   dd 0x000000 ; ���
+   dd 0x00ff00 ; ������
+   dd 0x0000ff ; ᨭ��
+   dd 0xff0000 ; ����
+   dd 0xff00ff ; ������
+   dd 0xffff00 ; �����
+   dd 0x00ffff ; ���㡮�
+   dd 0x77bb77 ; ⥯�� ������
+
+;******************************************************************************
+; � ��� ��� ��稭����� ������� �����樠����஢����� ������, �.�.
+; ����� ����� ���祭�� �� ��᢮���. � �⫨稥 �� ����., �� 㢥��稢��� ࠧ���
+; 䠩��
+
+udata
+
+   active_color    dd  ?           ; ��⨢�� 梥�
+
+   old_x           dd  ?           ; ���� ���न���� ���
+   old_y           dd  ?
+
+   workarea:                       ; ���न���� � ࠧ���� ������᪮� ������
+       .cx     dd  ?               ;   c - ���������
+       .cy     dd  ?
+       .sx     dd  ?               ;   s - ࠧ����
+       .sy     dd  ?
+
+   sc          system_colors       ; ��⥬�� 梥�
+   process     process_information ; ���ଠ�� � �����
+
+   restflag    dd  ?
+   canvas      rb  800*600*3
+
+meos_app_end
diff --git a/programs/system/mm/trunk/MM.asm b/programs/system/mm/trunk/MM.asm
new file mode 100644
index 0000000000..ca35763e26
--- /dev/null
+++ b/programs/system/mm/trunk/MM.asm
@@ -0,0 +1,276 @@
+; 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
+
+
+
+
+
+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
+
+
+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
+
+
+align 0x10
+I_END:
+	
+
+; service 72 from system calls
+; 
+; must contain:
+;       mov eax, [eax]
+;	mov [esp+32], eax
+;	ret
+
+