Ignore:
Timestamp:
2009-03-18T16:26:01Z (15 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
eada065e
Parents:
7dfc120a
Message:

properly detect VESA 16 bpp modes with 5:5:5 colors

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia32/src/boot/vesa_real.inc

    r7dfc120a r1496f87  
    55#define VESA_INFO_SIZE 1024
    66
    7 #define VESA_MODE_ATTRIBUTES_OFFSET 0
    8 #define VESA_MODE_LIST_PTR_OFFSET 14
    9 #define VESA_MODE_SCANLINE_OFFSET 16
    10 #define VESA_MODE_WIDTH_OFFSET 18
    11 #define VESA_MODE_HEIGHT_OFFSET 20
    12 #define VESA_MODE_BPP_OFFSET 25
    13 #define VESA_MODE_PHADDR_OFFSET 40
    14 
    15 #define VESA_END_OF_MODES 0xffff
    16 
    17 #define VESA_OK 0x4f
    18 
    19 #define VESA_GET_INFO 0x4f00
    20 #define VESA_GET_MODE_INFO 0x4f01
    21 #define VESA_SET_MODE 0x4f02
    22 #define VESA_SET_PALETTE 0x4f09
     7#define VESA_MODE_ATTRIBUTES_OFFSET  0
     8#define VESA_MODE_LIST_PTR_OFFSET    14
     9#define VESA_MODE_SCANLINE_OFFSET    16
     10#define VESA_MODE_WIDTH_OFFSET       18
     11#define VESA_MODE_HEIGHT_OFFSET      20
     12#define VESA_MODE_BPP_OFFSET         25
     13#define VESA_MODE_RED_MASK_OFFSET    31
     14#define VESA_MODE_RED_POS_OFFSET     32
     15#define VESA_MODE_GREEN_MASK_OFFSET  33
     16#define VESA_MODE_GREEN_POS_OFFSET   34
     17#define VESA_MODE_BLUE_MASK_OFFSET   35
     18#define VESA_MODE_BLUE_POS_OFFSET    36
     19#define VESA_MODE_PHADDR_OFFSET      40
     20
     21#define VESA_END_OF_MODES  0xffff
     22
     23#define VESA_OK  0x4f
     24
     25#define VESA_GET_INFO       0x4f00
     26#define VESA_GET_MODE_INFO  0x4f01
     27#define VESA_SET_MODE       0x4f02
     28#define VESA_SET_PALETTE    0x4f09
    2329
    2430.code32
     
    278284                vga_not_set:
    279285               
    280                 mov VESA_MODE_PHADDR_OFFSET(%di), %esi
    281                 mov VESA_MODE_WIDTH_OFFSET(%di), %ax
     286                # store mode parameters
     287                #  eax = bpp[8] scanline[16]
     288                #  ebx = width[16]  height[16]
     289                #  edx = red_mask[8] red_pos[8] green_mask[8] green_pos[8]
     290                #  esi = blue_mask[8] blue_pos[8]
     291                #  edi = linear frame buffer
     292               
     293                mov VESA_MODE_BPP_OFFSET(%di), %al
     294                xor %ah, %ah
    282295                shl $16, %eax
    283                 mov VESA_MODE_HEIGHT_OFFSET(%di), %ax
    284                 mov VESA_MODE_BPP_OFFSET(%di), %bl
    285                 xor %bh, %bh
     296                mov VESA_MODE_SCANLINE_OFFSET(%di), %ax
     297               
     298                mov VESA_MODE_WIDTH_OFFSET(%di), %bx
    286299                shl $16, %ebx
    287                 mov VESA_MODE_SCANLINE_OFFSET(%di), %bx
    288                 mov %eax, %edi
     300                mov VESA_MODE_HEIGHT_OFFSET(%di), %bx
     301               
     302                mov VESA_MODE_BLUE_MASK_OFFSET(%di), %dl
     303                shl $8, %edx
     304                mov VESA_MODE_BLUE_POS_OFFSET(%di), %dl
     305                mov %edx, %esi
     306               
     307                mov VESA_MODE_RED_MASK_OFFSET(%di), %dl
     308                shl $8, %edx
     309                mov VESA_MODE_RED_POS_OFFSET(%di), %dl
     310                shl $8, %edx
     311                mov VESA_MODE_GREEN_MASK_OFFSET(%di), %dl
     312                shl $8, %edx
     313                mov VESA_MODE_GREEN_POS_OFFSET(%di), %dl
     314               
     315                mov VESA_MODE_PHADDR_OFFSET(%di), %edi
    289316               
    290317                vesa_leave_real:
    291318               
    292                         mov %cr0, %eax
    293                         or $1, %eax
    294                         mov %eax, %cr0
     319                        mov %cr0, %ecx
     320                        or $1, %ecx
     321                        mov %ecx, %cr0
    295322                       
    296323                        jmp vesa_leave_real2
Note: See TracChangeset for help on using the changeset viewer.