(original) (raw)
;������� �� Mario79 mario79@ezmail.ru ���������������� � MenuetOS ========================= 1) ���������� ���������������� 1a) ��������� ���������� ��������� 1b) ������ �� ���������� 1c) ������������� ���������� ��������� ������ 1d) ��������� ���� ����� 1e) ������ 1f) ������ � �������� �������� ������� 1) ���������������� ���������� ��������� ��� MENUET-OS ======================================== 1a) ��������� ���������� ��������� =============================== ��������������� ��� Menuet ����� ���������� ������, ���� ������ �������� ��������� ���������� ���������. ����� ��������������, ��� � ��� ��� ���� ��������� ���� ���������������� �� ����������. MenuetOS API - ������ ��� �������� ����� ������� � ���������� ����������� �������������� �������. �������� ���������� ��������� �������� �� ��������. ������������ ������� ������� ���������� ��������� ��� �������, ������� ���������� ����������� ��������������. ������� ��� ���� �������, ������� ���������� ������������ �� ���������: ����������� ����, keypress (������� �������) � buttonpress (������� ������). ����-����� � ��������� ���������� � ��������� �� ��������� ���������: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; ������ ��������� ; ; ; ;;;;;;::;;;;;;;;;;;;;;;;;;;;;;; START: call draw_window ;;;;;;;;;;;;;;;;::;;;;;;; ; ; ; ����� ������� ; <----------------------------------------------------------I ; ; I ;;;;;::;;;;;;;;;;;;;;;;;; I I I ;;;;;;;;;;;;;;;;::;;;;;;; I ; ; I ; ; redraw - > call draw_window - > I ; ������ ������� ; - > key - > ��������� keypress - > ��������� - > I ; ; buttonpress - > ��������� buttonpress - > ��������� - > I ;;;;;::;;;;;;;;;;;;;;;;;; Draw_window: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; ������� ����������� ����� ���� ; ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ret ������� ������: ;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; ����������� ������ ; ; ; ;;;;;;;;;;;;;;;;;;;;;;;; ( ����� ������ ) 1b) ������ �� ���������� ==================== �������� ������������������� ���������� �� ���������� �������������� ��������� (1a). ��������� ������ Menuet ����������� ������� ���������� 'int 0x40', ����� ������� ����������� � �������� eax, � ������ ��������� ��� ������������� ���������� �������������� ������. ��������� �������� ���� ��������� �������, ��������� � ��������� ����� ��������� - � ������� (1g) ��������� �������. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; ������ ���������� ��������� ; ; ; ; ������������� � FASM ��� Menuet ; ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; The header (���������) use32 ; ���������� ������������ 32 ��������� ������� org 0x0 ; ������� ����� ����, ������ 0x0 db 'MENUET01' ; ������������� 8 ������ ��� ���������� ��������� dd 0x01 ; ������ �������� ����������� dd START ; ������ ���������� dd I_END ; ������ ������ dd 0x100000 ; ����� ������������ ������ ; �� ������ ���������� � ������ �� 0x0 �� ; ��������, ������������� �����. ��������� ; ���� ������ � ����������� ; �������������� � OS. dd 0x7fff0 ; ����������� ������� ����� � ������� ������ dd 0x0 ; �������� �������� ���������� ; ���� ����������� � �������� �������� �� ����, �������� ; ��������� �������� � ������. dd 0x0 ; ��������������� ��� ������ ; ������� ���� START: ; ������ ���������� call draw_window ; �������� ���� ; ����� ����, ��� ���� ��������, ����������� ������� ������� ����. ; ������� ������������ ������. event_wait: mov eax,10 ; ������� 10: ����� �� ������ int 0x40 ; ��� ������ ��������� � eax cmp eax,1 ; ������ ������� �����������? je red ; Expl.: ������� �������� �� ������ � ; ����� ���������� �������� ������ ���� �������� ��������. cmp eax,2 ; ������ ������� � ������? je key ; Expl.: ������������ ����� ������� � �� ����� ��� ; ���������� ����� ������� ���� ����. cmp eax,3 ; ������ ������ � ������? je button ; Expl.: ������������ ����� ���� �� ; ������ ���������� ���������. jmp event_wait ; ��������� ������ ������ ������ � ������������ ������. red: ; ������� ������ ����������� call draw_window ; �� �������� ������� window_draw � jmp event_wait ; ��������� ����� � event_wait key: ; ������� ������ Keypress mov eax,2 ; ������� ���������� � ah. ������� ������ ���� int 0x40 ; ��������� � ������� �� ��������� �������. jmp event_wait ; ������ ������� �������, ����������� ��� � ������� � ; event_wait. button: ; ������� ������ Buttonpress mov eax,17 ; ����� ������, ������������ � window_draw int 0x40 ; ��������� ah. cmp ��,1 ; ������ id=1? jne noclose mov eax,-1 ; ������� -1: ��������� ��� ��������� int 0x40 noclose: jmp event_wait ; ��� - ��� ������������ �������, ������� ; ��� ���������� �������� ; ********************************************* ; ****** ����������� ���� � ��������� ********* ; ********************************************* ; ; ����������� ����� ���� �������� � ���� �������. ����� ���� ����� ; ���� �������� ����� ��� ����� ������ ����� ���� (�����) ��� ����������� ; ��������� ��� ������������������ ������, ��� �������. ; ; ����������� ����� *�����*, ���� �������� � �������� fn 12, ebx = 1 � ebx = 2. draw_window: mov eax,12 ; ������� 12:�������� os � windowdraw (������ ����������� ����) mov ebx,1 ; 1, ������ ������ int 0x40 ; ������� ���� mov eax,0 ; ������� 0: ���������� � �������� ���� mov ebx,100*65536+300 ; [x ���������] *65536 + [x ������] mov ecx,100*65536+120 ; [y ���������] *65536 + [y ������] mov edx,0x02ffffff ; ���� ������� ������� RRGGBB ; 0x02000000 = ��� ���� 2 mov esi,0x808899ff ; ���� ������� ��������� RRGGBB ; 0x80000000 = ���� �������� mov edi,0x008899ff ; ���� ����� RRGGBB int 0x40 ; ����� ���� mov eax,4 ; ������� 4: �������� ����� � ���� mov ebx,8*65536+8 ; [x ���������] *65536 + [y ���������] mov ecx,0x00ddeeff ; ���� ������ RRGGBB mov edx,labelt ; ��������� �� ������ ������ mov esi,labellen-labelt ; ����� ������ int 0x40 ; ��������� ������ mov eax,8 ; ������� 8: ���������� � ������� ������ mov ebx,(300-19)*65536+12 ; [x ���������] *65536 + [x ������] mov ecx,5*65536+12 ; [y ���������] *65536 + [y ������] mov edx,1 ; ������������� ������ mov esi,0x6677cc ; ���� ������ RRGGBB int 0x40 mov ebx,25*65536+35 ; �������� ����� ���������� �������� 4 mov ecx,0x224466 mov edx,text mov esi,40 newline: ; ����� ��� ������� ������ mov eax,4 int 0x40 add ebx,10 add edx,40 cmp [edx],byte 'x' jne newline mov eax,12 ; ������� 12:�������� os � windowdraw (������ ����������� ����) mov ebx,2 ; 2, ����� ������ int 0x40 ret ; ********************************************** ; ************* ������� ������ ***************** ; ********************************************** ; ; ������ ����� ���� �������� ������� � ����� � ����� ������ ������. ; ������ ���������� �������� ����������� ��������� � ������ ������. text: db ' ���� ������ �������� �� ����� ������������, ' db ' A:\EXAMPLE.ASM ��� ���������������� ' db ' � ������. ��������� ������� ��������� � ����� ' db ' SYSFUNCS.TXT � ������� � CMD.TXT ' db ' x 128 x 128 mov ebx, 1 ; �� ������ ����������� ���, ������� �� ��������� - 1:1 mov ecx, 2 ; ������� ���������� � 2^ecx int 0x40 popa ret Shape_reference: ; 32 x 32 (window_size_X + 1) * (window_size_Y + 1) db 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 db 0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0 db 0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0 db 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0 db 0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0 db 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 db 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 db 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 db 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0 db 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0 db 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0 db 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 db 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 db 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 db 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 db 0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0 db 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0 db 0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0 db 0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0 db 0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 ; ********************************************* ; ******* ����������� ���� � ��������� ******** ; ********************************************* draw_window: mov eax,12 ; ������� 12:�������� os � windowdraw (������ ����������� ����) mov ebx,1 ; 1, ������ ������ int 0x40 ; ������� ���� mov eax,0 ; ������� 0: ���������� � �������� ���� mov ebx,100*65536 ; [x ���������] *65536 + [x ������] mov ecx,100*65536 ; [y ���������] *65536 + [y ������] mov bx,����� [x_size] mov cx,����� [y_size] mov edx,0x00cccc00 ; ���� ������� ������� RRGGBB, 8- > ���� �������� mov esi,0x00cccc00 ; ���� ������� ��������� RRGGBB, 8- > ���� �������� mov edi,0x00cccc00 ; ���� ����� RRGGBB int 0x40 ; ��������� ������ mov eax,8 ; ������� 8: ���������� � ������� ������ mov ebx,78*65536+12 ; [x ���������] *65536 + [x ������] mov ecx,20*65536+12 ; [y ���������] *65536 + [y ������] mov edx,1 ; ������������� ������ mov esi,0x5599cc ; ���� ������ RRGGBB int 0x40 mov eax,12 ; ������� 12:�������� os � windowdraw (������ ����������� ����) mov ebx,2 ; 2, ����� ������ int 0x40 ret ; DATA x_size dd 127 y_size dd 127 I_END: 1e) ������ =========== ��������� ���������� MenuetOS ����� ��������� ������� ������������ ����� ���������������� �������. ���� �� ���������� ��� ���������� � ���������, �� ������ ������ ����� ������� � ����� � ��� �� �����, � ��� ��� ������� ������ �� ������������ � �� ��������� �� � ����� ����������. �������� ��������� � ��������� ����������� ������ MenuetOS. ���, ��� �� ������ ������ ��� ���������� ����� ����. ������ �� ����� ������� �������� � ������� ��������� � ���������� �� �� ����� ������� ������ ��� �������, ������� �������� ���. ��� ����� ����� �� ����������� ����������� ���� � �.�. �������� ���������� ���������, ���� ������� ������ ���� ��������� �� ��������� �� ��������� (eax = -1) ���������� ������. ����� ������� � ���� ������� - create_thread. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; ������ ������ ; ; ; ; ������������� � FASM ��� Menuet ; ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; use32 org 0x0 db 'MENUET01' ; ������������� 8 ������ dd 0x01 ; ������ ��������� dd START ; ������ ���� dd I_END ; ������ ������ dd 0x100000 ; ������ ��� ���������� dd 0x80000 ; esp dd 0x0, 0x0 ; I_Param, I_Icon START: ; ������ ���������� call draw_window ; �������, �������� ���� event_wait: mov eax, 10 ; ����� ����� ������ int 0x40 cmp eax, 1 ; ������ �����������? je red cmp eax, 2 ; ������� � ������? je key cmp eax, 3 ; ������ � ������? je button jmp event_wait red: ; ����������� call draw_window jmp event_wait key: ; ������� mov eax,2 ; ������ ������� ���, � ������������ int 0x40 jmp event_wait button: ; ������ mov eax,17 ; �������� ������������� int 0x40 cmp ah,1 ; ������ id=1? jne noclose mov eax,-1 ; �������� ��� ��������� (�����) int 0x40 noclose: cmp ah,2 ; ������ create_thread (c������_�����) jne no_thread call create_thread jmp event_wait no_thread: jmp event_wait ; �������� ������ ; ; ���, ��� �� ������ ������, ������ ���� ����� ����� ������ � ecx � ; ����� ������� ����� � edx � �������� eax=51, ebx=1 create_thread: cmp [thread_stack],0xf0000 jge no_new_thread add [thread_stack],0x1000 mov eax, 51 ; thread_create ��������� ����� mov ebx,1 mov ecx,START mov edx,[thread_stack] int 0x40 no_new_thread: ret thread_stack dd 0x80000 ; ********************************************* ; ******* ����������� ���� � ����� ******** ; ********************************************* draw_window: mov eax,12 ; ������� 12:�������� os � windowdraw (������ ����������� ����) mov ebx,1 ; 1, ������ ������ mnt 0x40 ; ������� ���� mov eax,0 ; ������� 0: ���������� � �������� ���� mov ebx,10*65536+300 ; [x ������] *65536 + [x ������] mov ecx,10*65536+140 ; [y ������] *65536 + [y ������] mov esi,[thread_stack] sub esi,0x80000 shr esi,11 shl esi,16 add ebx,esi add ecx,esi mov edx,0x02ffffff ; ���� ������� ������� RRGGBB, 8- > ���� �������� mov esi,0x808899ff ; ���� ������� ������� RRGGBB, 8- > ���� �������� mov edi,0x008899ff ; ���� ����� RRGGBB int 0x40 ; ����� ���� mov eax,4 ; ������� 4: �������� ����� � ���� mov ebx,8*65536+8 ; [x ������] *65536 + [y ������] mov ecx,0x00ddeeff ; ���� ������ RRGGBB mov edx,labelt ; ��������� �� ��������� ������ mov esi,labellen-labelt ; ��������� ����� int 0x40 ; ��������� ������ mov eax,8 ; ������� 8: ���������� � �������� ������ mov ebx,(300-19) *65536+12 ; [x ������] *65536 + [x ������] mov ecx,5*65536+12 ; [y ������] *65536 + [y ������] mov edx,1 ; ������������� ������ mov esi,0x6677cc ; ���� ������ RRGGBB int 0x40 mov eax,8 ; ����� ������ ������ mov ebx,25*65536+128 mov ecx,88*65536+20 mov edx,2 mov esi,0x6677cc int 0x40 mov ebx,25*65536+35 ; ������� ��������� ���������� ��� ������ ������� 4 mov ecx,0x224466 mov edx,text mov esi,40 newline: mov eax,4 int 0x40 add ebx,10 add edx,40 cmp [edx],byte 'x' jne newline mov eax,12 ; ������� 12:�������� os � windowdraw (������ ����������� ����) mov ebx,2 ; 2, ����� ������ int 0x40 ret ; ������� ������ text: db ' ���� ������ ������� ������, ����������� ' db ' ��� �� ����� ��������� ���� �������. ��� �� ' db ' ��������� � ����� ����� ��� ������� ������. ' db ' ��� ���� ������� �� �� ����� ������. ' db ' ' db ' ' db ' ������� ����� ����� ' db 'x REC DATA (A) SYS_EVENT => READ DATA => PROCESS 1f) ��������� ������ � ������ ��������� ������� =============================================== ��������� ������ ���������� ��������� ��������� ������ � ������ ��������� �������. ���������� �������� ������������ ������� ����� � ���� ������ ��� ������ �� ������������ IRQ. ����: 1) ��������������� ������� ������ I/O 2) ��������������� IRQ 3) ����������������� IRQ 4) ������������� ������ ������� (EVENT) ��� ���������� IRQ 5) ��������� ������ 6) ��������� � �������� �� ��������� - ���������� IRQ � ������ ������� 7) ���������� IRQ 8) ���������� ������� ������ 9) ��������� ��������� ����� ����, ��� IRQ �����������������, � ���������� ������� ����� ������� ��� ��������� ����� �������, ����� (IRQ+16). ����� ���������� �������� �������, ������������ ������� ���������� ������, ������� ���������� ����� ����������. �������, ������������ ���� ���������� �������� ��������� ��������� ������ � ������ ��������� ������� ��� ���� ����� (A) �������������� ������������ �������� � ���� ������ �� (A) �������������� �����������. IRQ OWNER => REC DATA (A) SYS_EVENT => READ DATA => PROCESS 0 TIMER SYS 1 KEYBOARD SYS 2 free -> 3 COM MOUSE SYS/free ?> 4 COM MOUSE SYS/free ?> 5 SOUND BL. SYS 6 FLOPPY SYS 7 free -> 8 free -> 9 free -> 10 free -> 11 free -> 12 PS2 MOUSE SYS/free ?> 13 MATH PR. SYS 14 IDE SYS 15 IDE SYS ������ ��������� ������ � �������� �������� �������: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; ������ � �������� �������� ������� ; ; ; ; ������������� � FASM ��� Menuet ; ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; use32 org 0x0 db 'MENUET00' ; ������������� 8 ������ dd 56 ; ��������� ������ os dd START ; ������ ��������� dd I_END ; ������ ������ ��������� dd 0x100000 ; ��������� ����� ������ ; esp = 0x7FFF0 dd 0x00000000 ; reserved = �� ����������� ��������� START: ; ������ ���������� call draw_window ; ������� ������� ���� call program_real_time_data ; ������������� OS ��� ��������� ������ � ������ ��������� ������� call program_com_port ; ������������� com-���� ��� ������������� ���������� event_wait: mov eax,10 ; ������� ������� int 0x40 cmp eax,1 ; ������ �����������? je red cmp eax,2 ; ������� � ������? je key cmp eax,3 ; ������ � ������? je button cmp eax,16+4 ; RT: ����� ������� ��� ��������� ������ IRQ[������� �� ����������] (16+IRQ) je read_rt jmp event_wait ; ��������� ����� ������ ������� � ������������ ������. read_rt: ; RT ������ mov eax,42 ; ������� 42 ���������� ���������� ������ ��� IRQ 4 [������� �� ����������] mov ebx,4 ; int 0x40 ; OS ���������� ���������� ������. ; eax ����� ������ ���������� � ������ ; bl ������ ; ecx 0 = �����, ������ = ��� ������ � buf. call process_data jmp event_wait red: ; ����������� call draw_window jmp event_wait key: ; "�������" mov eax,2 ; ������ ��������� � ������������ int 0x40 jmp event_wait button: ; "������" mov eax,17 ; �������� ������������� int 0x40 cmp ��,1 ; ������������� ������ ����� 1? (id=1?) jne noclose call free_real_time_data mov eax,-1 ; ������� ��� ��������� int 0x40 noclose: jmp event_wait program_real_time_data: ; ��������� ������� ������ � �������� �������� ������� ; ; 1) ����������� ������� I/O ����� (����� ����� - ������) ; 2) ����������� IRQ (������ �� ����������) ; 3) ������������� IRQ (������ �� ����������) ; 4) ������������� ������ ������� (EVENT) ��� ���������� IRQ (������� �� ����������) ; pusha mov eax,46 ; �������������� ������ 0x3f0 - 0x3ff mov ebx,0 mov ecx,0x3f0 mov edx,0x3ff int 0x40 mov eax,45 ; ����������� irq 4 mov ebx,0 mov ecx,4 int 0x40 mov eax,44 ; ����� ������������ ����� ��� irq 4 mov ebx,irqtable mov ecx,4 int 0x40 mov eax,40 ; �������� ������ �� com1 � ������� irq 4 mov ebx,0000000000010000b shl 16 + 111b ; ����� ����� �� ����� ����� ; ������� (16+4) int 0x40 popa ret irqtable: dd 0x3f8+0x01000000 ; 3f8 = ���� ������: 01 = ������ �����, 02 = ������ ����� dd 0x0 ; 0x0 = ����������� ������ ��� ������� IRQ (������� �� ����������) dd 0x0 dd 0x0 dd 0x0 dd 0x0 dd 0x0 dd 0x0 dd 0x0 dd 0x0 dd 0x0 dd 0x0 dd 0x0 dd 0x0 dd 0x0 dd 0x0 free_real_time_data: ; ���������� ������������ ������� ; ; 1) �������� �������� �� ��������� ������� ; 2) ���������� irq ��� ������ ������� 45,1 ; 3) ���������� ������� ����� ��� ������ ������� 46,1 ; pusha mov eax,40 ; �������� �� ��������� ������� - ��������� ��������� ������� �� irq 4 mov ebx,111b int 0x40 mov eax,45 ; ���������� irq mov ebx,1 mov ecx,4 int 0x40 mov eax,46 ; ���������� ����� 0x3f0-0x3ff mov ebx,1 mov ecx,0x3f0 mov edx,0x3ff int 0x40 popa ret ; ��������� ������� - ��� ��������������� ���������� ������ ������. process_data: cmp ebx,80 jne nocd mov eax,19 mov ebx,cdplayer mov ecx,0 int 0x40 nocd: push ebx mov eax,[pos] add eax,1 cmp eax,10*20+1 jb noeaxz mov esi,text+10*4 mov edi,text mov ecx,10*21*4 cld rep movsb mov eax,13 mov ebx,20*65536+260 mov ecx,22*65536+220 mov edx,[wcolor] int 0x40 mov eax,10*19+1 noeaxz: mov [pos],eax pop ebx and ebx,0xff call draw_data ret draw_data: pusha xchg eax,ebx mov ecx,10 shl ebx,2 mov esi,3 newnum: xor edx,edx div ecx add edx,48 mov [ebx+text-1],dl dec ebx dec esi jnz newnum call draw_text popa ret draw_text: pusha mov ebx,25*65536+35 ; ����� ��������������� ������ ��� ������ ������� 4 mov ecx,0xffffff mov edx,text mov esi,40 mov edi,20 newline: mov eax,4 int 0x40 add ebx,10 add edx,40 dec edi jne newline popa ret program_com_port: ; ��������� ������� ���� ������������� COM ���� ��� ������������� �������� mov cx,0x3f3+8 mov bl,0x80 mov eax,43 int 0x40 mov cx,0x3f1+8 mov bl,0 mov eax,43 int 0x40 mov cx,0x3f0+8 mov bl,0x30 / 4 mov eax,43 int 0x40 mov cx,0x3f3+8 mov bl,3 mov eax,43 int 0x40 mov cx,0x3f4+8 mov bl,0xB mov eax,43 int 0x40 mov cx,0x3f1+8 mov bl,1 mov eax,43 int 0x40 mov eax,5 mov ebx,100 int 0x40 mov cx,0x3f8 mov bl,'I' mov eax,43 int 0x40 mov eax,5 mov ebx,10 int 0x40 mov cx,0x3f8 mov bl,'R' mov eax,43 int 0x40 ret ; ********************************************* ; ******* ����������� ���� � ����� ******** ; ********************************************* draw_window: mov eax,12 ; ������� 12:�������� os � windowdraw (������ ����������� ����) mov ebx,1 ; 1, ������ ������ int 0x40 ; ������� ���� mov eax,0 ; ������� 0: ���������� � ������� ���� mov ebx,100*65536+300 ; [x ������] *65536 + [x ������] mov ecx,100*65536+250 ; [y ������] *65536 + [y ������] mov edx,[wcolor] ; ���� ������� ������� RRGGBB, 8- > ���� mov esi,0x8099bbff ; ���� ������� ������� RRGGBB, 8- > ���� �������� mov edi,0x00ffffff ; ���� ����� RRGGBB int 0x40 ; ����� ���� mov eax,4 ; ������� 4: ����� ������ � ���� mov ebx,8*65536+8 ; [x ������] *65536 + [y ������] mov ecx,0x00ffffff ; ���� ������ RRGGBB mov edx,labelt ; ��������� �� ������ ������ mov esi,labellen-labelt ; ����� ��������� ������ int 0x40 ; ��������� ������ mov eax,8 ; ������� 8: ���������� � ������� ������ mov ebx,(300-19)*65536+12 ; [x ������] *65536 + [x ������] mov ecx,5*65536+12 ; [y ������] *65536 + [y ������] mov edx,1 ; ������������� ������ mov esi,0x5599cc ; ���� ������ RRGGBB int 0x40 call draw_text mov eax,12 mov ebx,2 int 0x40 ret ; ������� ������ wcolor dd 0x0 pos dd 0x0 cdplayer db 'CDPLAY' labelt db ' ������������ ��Ȩ���� ��� IRMAN � COM 1 ' labellen: text: I_END: