Page 1 of 1
VGA
Posted: Mon Jun 27, 2005 5:48 pm
by cyberGnom
кто-нибудь знает, что означает сообщение Bochs'a вида
Code: Select all
00000931306p[CLVGA] >>PANIC<< mem_write: graphics: mapping = 0
это происходит при обращении к видеопамяти...может я не настроил что? до этого я только изменил разрешение через порты и показал, что режим графический....все сработало...но не удается ничего записать в видеопамять...
может знает кто, что такое mapping?
Posted: Wed Jun 29, 2005 6:15 pm
by cyberGnom
да...забыл сказать, что BIOS 4fxx я не использовал. граический режим работает, но память недоступна
Posted: Sat Sep 09, 2006 9:54 am
by Aqwas
я незнаю, может будет кому полезно
h-fovorit.narod.ru/all/video.zip - дока по видеорежимам. Я в этом не шарю, но мож кому пригодится.
Posted: Sat Sep 09, 2006 9:58 am
by Aqwas
Posted: Sat Sep 09, 2006 11:35 am
by andrew_programmer
Зачем запускать систему в Bochs ?
Если хочеш поэкспериментировать с ядром,то нужно запускать Колибри как основную операционную систему,тогда проблем с доступом к видеопамяти не будет.
Я вообще виртуальным машинам не доверяю.Всё проверяю на реальной системе.
Posted: Sat Sep 09, 2006 4:37 pm
by halyavin
cyberGnom
См. исходники bochs, файл vga.cc. У тебя почему-то включен alpha-режим, но при этом видеопамять находится по адресам 0xA0000-0xBFFFF. Либо ты сделал что-то не то, либо bochs не поддерживает такой режим.
Re: VGA
Posted: Sun Oct 23, 2016 12:45 pm
by 0CodErr
Хотел спросить, вот в режиме "VGA 16 colors" чему bpp равен, 32?
У меня так показывает
Spoiler:
Вот исходник
Spoiler:
Code: Select all
Unit Unit1;
(* -------------------------------------------------------- *)
Interface
(* -------------------------------------------------------- *)
Type
Dword = Cardinal;
Size = Record
Height: Word;
Width : Word;
End;
Var
hConsole: Pointer;
ConsoleInit: Procedure(WndWidth, WndHeight, ScrWidth, ScrHeight: Dword; Caption: PChar); StdCall;
ConsoleExit: Procedure(bCloseWindow: Cardinal); StdCall;
printf: Function(Const Format: PChar): Integer; CDecl VarArgs;
(* -------------------------------------------------------- *)
Procedure Main; Forward;
Procedure ThreadTerminate; Forward;
Function LoadLibrary(Path: PChar): Pointer; StdCall; Forward;
Function GetProcAddress(hLib: Pointer; ProcName: PChar): Pointer; StdCall; Forward;
Function GetScreenSize: Size; Forward;
Function GetScreenBitsPerPixel: Cardinal; Forward;
Function GetScreenBytesPerScanLine: Cardinal; Forward;
(* -------------------------------------------------------- *)
Implementation
(* -------------------------------------------------------- *)
Procedure Main();
Var
Screen: Size;
Begin
hConsole := LoadLibrary('/sys/lib/console.obj');
ConsoleInit := GetProcAddress(hConsole, 'con_init');
ConsoleExit := GetProcAddress(hConsole, 'con_exit');
printf := GetProcAddress(hConsole, 'con_printf');
ConsoleInit($FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, 'Test');
Screen := GetScreenSize();
printf('Screen = %dx%d'#10, Screen.Width, Screen.Height);
printf('ScreenBitsPerPixel = %d'#10, GetScreenBitsPerPixel);
printf('ScreenBytesPerScanLine = %d'#10, GetScreenBytesPerScanLine);
ConsoleExit(0);
ThreadTerminate;
End;
(* -------------------------------------------------------- *)
Function GetScreenSize: Size;
Asm
push ebx
mov eax, 61
mov ebx, 1
int 64
pop ebx
End;
(* -------------------------------------------------------- *)
Function GetScreenBitsPerPixel: Cardinal;
Asm
push ebx
mov eax, 61
mov ebx, 2
int 64
pop ebx
End;
(* -------------------------------------------------------- *)
Function GetScreenBytesPerScanLine: Cardinal;
Asm
push ebx
mov eax, 61
mov ebx, 3
int 64
pop ebx
End;
(* -------------------------------------------------------- *)
Procedure ThreadTerminate();
Asm
mov eax, $FFFFFFFF
int 64
End;
(* -------------------------------------------------------- *)
Function GetProcAddress(hLib: Pointer; ProcName: PChar): Pointer;
Asm
push esi
push edi
push ebx
mov edx, hLib
xor eax, eax
test edx, edx
jz @end
mov edi, ProcName
mov ecx, $FFFFFFFF
repne scasb
mov ebx, ecx
not ebx
@next:
mov esi, [edx]
test esi, esi
jz @end
mov ecx, ebx
mov edi, ProcName
add edx, 8
repe cmpsb
jne @next
mov eax, [edx - 4]
@end:
pop ebx
pop edi
pop esi
End;
(* -------------------------------------------------------- *)
Function LoadLibrary(Path: PChar): Pointer;
Asm
push ebx
mov eax, 68
mov ebx, 19
mov ecx, Path
int 64
pop ebx
End;
(* -------------------------------------------------------- *)
End.
Re: VGA
Posted: Tue Oct 25, 2016 5:58 am
by Serge
Да. Там виртуальный фреймбуфер 32bpp.