VGA

Drivers for various video cards
  • да...забыл сказать, что BIOS 4fxx я не использовал. граический режим работает, но память недоступна :(
  • я незнаю, может будет кому полезно
    h-fovorit.narod.ru/all/video.zip - дока по видеорежимам. Я в этом не шарю, но мож кому пригодится.
  • http://www.h-favorit.narod.ru/all/video.zip - выше неправильно!!!
  • Зачем запускать систему в Bochs ?

    Если хочеш поэкспериментировать с ядром,то нужно запускать Колибри как основную операционную систему,тогда проблем с доступом к видеопамяти не будет.

    Я вообще виртуальным машинам не доверяю.Всё проверяю на реальной системе.
  • cyberGnom
    См. исходники bochs, файл vga.cc. У тебя почему-то включен alpha-режим, но при этом видеопамять находится по адресам 0xA0000-0xBFFFF. Либо ты сделал что-то не то, либо bochs не поддерживает такой режим.
  • Хотел спросить, вот в режиме "VGA 16 colors" чему bpp равен, 32?
    У меня так показывает
    Spoiler:Image
    Вот исходник
    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.
  • Да. Там виртуальный фреймбуфер 32bpp.
  • Who is online

    Users browsing this forum: No registered users and 2 guests