спосибо за мподсказку, всёровно не грузится, работаю пока в загрузчике, зато с весой и зашишеным режимом получается узнаю LFB и другое, устанавливаю режим, перехожу в зашишеный режим, адрес LFB причем не смешается закрашиваю фон, зацыкливаю на проверку клавиатуры. Подскажите правильно ли я обхожусь с клавиатурой, нельзя перехватить вектор клавиатуры и как бы мне ешё мышку добавить через порты, у нее бывает и 5 кнопок, олесики, это с каждой в отдельности надо разбираться? И еще подскажите, в ПМ режиме никак уже нельзя вызвать функции биус int10, int13 org 0x7C00 use16 start: xor ax,ax mov ds,ax mov es,ax mov ss,ax mov sp,0x7C00
mov bx,4112h mov ax,4f01h ;узнаем LFB режима 640:480:4 mov di,Mode_Info mov cx,bx int 10h
mov ax,4f02h ;установим режим int 10h
cli lgdt [gdtr] mov eax, cr0 or al,0x1 mov cr0,eax jmp 0x10: protected use32
protected: mov ax,0x8 mov ds,ax mov es,ax mov ss,ax mov esp,0x7C00
cmp byte[ModeInfo_BitsPerPixel],32 jne ErrorStop
mov ebx,[clTeal] call fill_screen
.wait: in al, 64h ;считываем состояние test al, 1h ;если 1 то нажата клавиша jz .wait
in al, 60h ;скан-код нажатия получаем из порта 60
cmp al, 05h ;скан-код je .fin cmp al, 0bh ;скан-код je .one cmp al, 0ah ;скан-код je .one cmp al, 04h ;скан-код je .one
jmp .wait
.fin: mov ebx,[clLime] call fill_screen mov al,0 jmp .wait
.one: mov ebx,[clFuchsia] call fill_screen mov al,0 jmp .wait
fill_screen: mov edi,[ModeInfo_PhysBasePtr]
mov ecx,640*480 .next: mov dword[edi],ebx add edi,4 loop .next ret
ErrorStop: hlt jmp $
gdt: dw 0x0000, 0x0000, 0x0000, 0x0000 sys_data: dw 0xFFFF, 0x0000, 0x9200, 0x00CF sys_code: dw 0xFFFF, 0x0000, 0x9800, 0x00CF gdt_end:
gdtr: dw gdt_end - gdt - 1 dd gdt
clFuchsia dd 00FF11FFh clTeal dd 00888800h clLime dd 0006FF06h
times 510- ($-start) db 0 dw 0xaa55
|