/
a.dankovtsev
/
hyper-cube-os
Обзор
Документация
Войти
/
a.dankovtsev
/
hyper-cube-os
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
HardwareAPI/HardwareAPI.asm
221 строка
4 KB
Alexander Dankovtsev
initialize
26 янв 2025, 09:52
26 янв 2025, 09:52
52ff222
Код
Авторство
О чём код?
format binary org 0 use32 dw 0 dd Read_Sector db 'Read_Sector' db 5 dup(0) dw 1 dd draw_text db 'Draw_text' db 7 dup(0) dw 0xFFFF ; �� �����: ; �����(���� ��������) ; ����� ������� ;[esp + 8] ����� ������� ;[esp + 4] ����� ;[esp] Read_Sector: mov edi, [esp+4] mov esi, [esp+8] mov dx, 0x3F6 ;��������� ����������, ���������� � 1 ��� 1 �������� 3F6h mov al, 2 out dx, al mov dx, 0x01F7 ; ���� ���� BSY = 0 m1: in al, dx test al, 0x80 jnz m1 mov ecx, esi ;����� ������ LBA � ��������� ����������������� ����� shr ecx, 24 or cl, 0xE0 mov dx, 0x01F6 ;����� ���������� �� ������. mov al, cl out dx, al mov dx, 0x01f7 m2: ;����, DRDY=1 � BSY=0 in al, dx test al, 0x80 jnz m2 test al, 0x40 jz m2 mov eax, esi mov dx, 0x1f3 ;��������� ����� out dx, al ;LBA[0:7] mov dx, 0x1f4 shr eax, 8 out dx, al ; LBA [8:15] mov dx, 0x1f5 shr eax, 8 out dx, al ; LBA [16:23] mov dx, 0x01f7 ;���� ������� ������ ������� mov al, 0x20 out dx, al mov dx, 0x03f6 m3: ;� ����� ���� ���� ��� ����� ��������� ;������ �������������� ������� ��������� in al, dx test al, 0x80 jnz m3 mov dx, 0x01f7 m4: ;������� ��� ���� � DRQ, ���� 1 - ������ ������. in al, dx test al, 0x08 jz m4 mov dx, 0x01f0 mov cx, 256 ;512 ���� (1 ������) rep insw ;����� ������. mov dx, 0x3f6 ;��������� ���������� �� ���������� mov al, 0 out dx, al ret 2*4 ; [esp + 8] left ; [esp + 4] top ; [esp] return ; ������� ���������� al draw_text: mov dword ptr regedit, edx ; ��������� ���������� ������ � ���������� mov edx, [esp + 4] mov dword ptr top, edx mov edx, [esp + 8] mov dword ptr left, edx mov edx, dword ptr regedit push esi push edi pushad pushfd ; ������� ������� mov byte ptr letter, al ; ������ ����� ������� mov esi, 0x10000 ; �������� � �������� xor ebx, ebx next_bl: cmp bl, al je ok_perform add esi, 48 inc bl jmp short next_bl ok_perform: ; ��������� ������� mov ebx, 0x00000080 ; ������������� 7-� ��� ; ���������� ������ �������� �� ��������� ; ������ ������ �� ���������� ��������� push esi mov esi, 0x7000 lodsd mov edx, eax pop esi mov eax, dword ptr top shl eax, 12 add edx, eax mov [0x00102000 - 4], edx mov edi, 0x003FF000 ; ���������� invlpg [edi] mov eax, dword ptr left add edi, eax xor edx, edx ; ������������� mov ecx, 24 ; ������ ����� 24 ������� jmp short go set_new_position: or edx, edx jnz set inc edx ; ����������� ������������� mov ebx, 0x00000080 ; ������������� 7-�� ��� jmp short go set: mov edx, [0x00102000 - 4] add edx, 0x1000 ; ������� �� ����� ������ mov [0x00102000 - 4], edx xor edx, edx ; �������� ������������� mov edi, 0x003FF000 ; ��������� �� ���������� invlpg [edi] ; �������� �� ������� ������ mov eax, dword ptr left shl eax, 2 add edi, eax mov ebx, 0x00000080 ; ������������� 7-�� ��� dec ecx ; ��������� ���-�� ����� or ecx, ecx jz end_of_letter ; ����� ���������� go: xor eax, eax lodsb ; ������� �� ������ ������� 8 ��� (1 ����) and eax, 0x000000FF next_bit: cmp ebx, 0 je set_new_position ; ����������� ��� ���� ? test eax, ebx ; ��������� ������� ��� jz white_dot ; ���� 0, �� ����� push eax ; �����, ������������� ������� mov eax, 0x00FF0000 ; ������� stosd ; ������������ pop eax ; ����������� �������� ��������, �. �. ������ ����� ������������� ���� shr ebx, 1 ; ��������� ��� jmp short next_bit white_dot: add edi, 4 ; ������ ��������� � ���������� ������� shr ebx, 1 ; ��������� ��� ����� �������� jmp short next_bit end_of_letter: mov esi, 0x7000 lodsd mov edx, eax mov [0x00102000 - 4], edx invlpg [0x003FF000] popfd popad pop edi pop esi pop eax mov dword ptr regedit, eax pop eax pop eax mov eax, dword ptr regedit push eax ret letter db ? left dd ? top dd ? regedit dd ? testing: mov edi, 0x3FE000 mov eax, 0x00FF0000 mov ecx, 1024 rep stosd jmp $ free_space db 4096-($-$$) dup(0)