VirtualBox

Changeset 7776 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Apr 7, 2008 3:54:46 PM (17 years ago)
Author:
vboxsync
Message:

Some adjustments to the logo stuff; adding one todo.

Location:
trunk/src/VBox/Devices/Graphics
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Graphics/DevVGA.cpp

    r7774 r7776  
    104104#include "Builtins.h"
    105105#include "Builtins2.h"
     106
    106107
    107108/*******************************************************************************
     
    145146    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
    146147};
     148
    147149
    148150#ifndef VBOX_DEVICE_STRUCT_TESTCASE
     
    35813583                case LOGO_CMD_SET_OFFSET:
    35823584                    pData->offLogoData = u32;
    3583                 break;
     3585                    break;
    35843586                case LOGO_CMD_SET_X:
    3585                     pData->LogoX = u32;
    3586                 break;
     3587                    pData->xLogo = u32;
     3588                    break;
    35873589                case LOGO_CMD_SET_Y:
    3588                     pData->LogoY = u32;
    3589                 break;
     3590                    pData->yLogo = u32;
     3591                    break;
    35903592                case LOGO_CMD_SET_WIDTH:
    3591                     pData->LogoWidth = u32;
    3592                 break;
     3593                    pData->cxLogo = u32;
     3594                    break;
    35933595                case LOGO_CMD_SET_HEIGHT:
    3594                     pData->LogoHeight = u32;
    3595                 break;
     3596                    pData->cyLogo = u32;
     3597                    break;
    35963598                case LOGO_CMD_SET_DEPTH:
    3597                     pData->LogoDepth = u32;
    3598                 break;
     3599                    pData->cBitsLogo = u32;
     3600                    break;
    35993601                case LOGO_CMD_SET_PALSIZE:
    3600                     pData->PalSize = u32;
    3601                 break;
     3602                    pData->cbPal = u32;
     3603                    break;
    36023604                default:
    36033605                    Log(("vbeIOPortWriteCMDLogo: invalid command %d\n", pData->LogoCommand));
     
    36213623            case LOGO_CMD_SET_PALSIZE:
    36223624                pData->LogoCommand = u32 & 0xFF00;
    3623             break;
     3625                break;
     3626
    36243627            case LOGO_CMD_SET_DEFAULT:
    36253628                pData->BmpImage = LOGO_IMAGE_DEFAULT;
    36263629                pData->offLogoData = 0;
    36273630                pData->LogoCommand = LOGO_CMD_NOP;
    3628             break;
     3631                break;
     3632
    36293633            case LOGO_CMD_SET_PAL:
    36303634            {
     
    36363640                    pu8Pal = (uint8_t *)&g_abVgaDefBiosLogo[pData->offLogoData];
    36373641
    3638                 for (i = 0; i <= pData->PalSize; i++)
     3642                for (i = 0; i <= pData->cbPal; i++)
    36393643                {
    3640                     uint8_t  b;
    3641                     uint32_t p = 0;
     3644                    uint32_t u32Pal = 0;
    36423645
    36433646                    for (j = 0; j < 3; j++)
    36443647                    {
    3645                         p <<= 8;
    3646                         b = (uint8_t)*pu8Pal++;
    3647                         p |= b;
     3648                        uint8_t b = *pu8Pal++;
     3649                        u32Pal <<= 8;
     3650                        u32Pal |= b;
    36483651                    }
    3649                     *pu8Pal++;
    3650 
    3651                     pData->Palette[i] = p;
     3652                    pu8Pal++; /* skip unused byte */
     3653
     3654                    pData->au32Palette[i] = u32Pal;
    36523655                }
     3656                break;
    36533657            }
    3654             break;
     3658
    36553659            case LOGO_CMD_CLS:
    36563660            {
     
    36623666                        *pu32TmpPtr++ = 0;
    36633667                }
     3668                break;
    36643669            }
    3665             break;
     3670
    36663671            case LOGO_CMD_SHOW_BMP:
    36673672            case LOGO_CMD_SHOW_TEXT:
     
    36723677                 * Determin bytes per pixel in the destination buffer.
    36733678                 */
    3674                 size_t      scr_cx = LOGO_MAX_WIDTH;
    3675                 size_t      scr_cy = LOGO_MAX_HEIGHT;
    3676 
    36773679                if ((u32 & 0xFF00) == LOGO_CMD_SHOW_TEXT)
    36783680                {
    3679                     pData->LogoX = LOGO_F12TEXT_X;
    3680                     pData->LogoY = LOGO_F12TEXT_Y;
    3681 
    3682                     pData->LogoWidth = LOGO_F12TEXT_WIDTH;
    3683                     pData->LogoHeight = LOGO_F12TEXT_HEIGHT;
    3684                     pData->LogoDepth = 1;
     3681                    pData->xLogo = LOGO_F12TEXT_X;
     3682                    pData->yLogo = LOGO_F12TEXT_Y;
     3683
     3684                    pData->cxLogo = LOGO_F12TEXT_WIDTH;
     3685                    pData->cyLogo = LOGO_F12TEXT_HEIGHT;
     3686                    pData->cBitsLogo = 1;
    36853687                }
    36863688
    3687                 uint32_t        cx = pData->LogoWidth;
    3688                 uint32_t        cy = pData->LogoHeight;
     3689                uint32_t        cx = pData->cxLogo;
     3690                uint32_t        cy = pData->cyLogo;
    36893691                const uint8_t  *pu8Src;
    36903692                uint8_t        *pu8TmpPtr;
     
    36953697                uint16_t        i;
    36963698
    3697                 pu8Dst += pData->LogoX * 4 + pData->LogoY * cbLineDst;
    3698 
    3699                 switch (pData->LogoDepth)
     3699                pu8Dst += pData->xLogo * 4 + pData->yLogo * cbLineDst;
     3700
     3701                switch (pData->cBitsLogo)
    37003702                {
    37013703                    case 1:
    3702                         pu8Dst += pData->LogoHeight * cbLineDst;
     3704                        pu8Dst += pData->cyLogo * cbLineDst;
    37033705                        cbPadBytes = 0;
    3704                     break;
     3706                        break;
     3707
    37053708                    case 4:
    3706                         if (((pData->LogoWidth % 8) == 0) || ((pData->LogoWidth % 8) > 6))
     3709                        if (((pData->cxLogo % 8) == 0) || ((pData->cxLogo % 8) > 6))
    37073710                            cbPadBytes = 0;
    3708                         else if ((pData->LogoWidth % 8) <= 2)
     3711                        else if ((pData->cxLogo % 8) <= 2)
    37093712                            cbPadBytes = 3;
    3710                         else if ((pData->LogoWidth % 8) <= 4)
     3713                        else if ((pData->cxLogo % 8) <= 4)
    37113714                            cbPadBytes = 2;
    37123715                        else
    37133716                            cbPadBytes = 1;
    3714                     break;
     3717                        break;
     3718
    37153719                    case 8:
    3716                         cbPadBytes = ((pData->LogoWidth % 4) == 0) ? 0 : (4 - (pData->LogoWidth % 4));
    3717                     break;
     3720                        cbPadBytes = ((pData->cxLogo % 4) == 0) ? 0 : (4 - (pData->cxLogo % 4));
     3721                        break;
     3722
    37183723                    case 24:
    37193724                        cbPadBytes = cx % 4;
    3720                     break;
     3725                        break;
    37213726                }
    37223727
    3723                 if (pData->LogoDepth == 1)
     3728                if (pData->cBitsLogo == 1)
    37243729                    pu8Src = &g_abLogoF12BootText[0];
    37253730                else
     
    37373742                    pu8TmpPtr = pu8Dst;
    37383743
    3739                     if (pData->LogoDepth != 1)
     3744                    if (pData->cBitsLogo != 1)
    37403745                        j = 0;
    37413746
     
    37443749                        uint8_t pix;
    37453750
    3746                         switch (pData->LogoDepth)
     3751                        switch (pData->cBitsLogo)
    37473752                        {
    37483753                            case 1:
     
    37593764                                *pu8TmpPtr++;
    37603765
    3761                                 if (j++ >= 7) j = 0;
     3766                                j = (j + 1) % 8;
     3767                                break;
    37623768                            }
    3763                             break;
     3769
    37643770                            case 4:
    37653771                            {
    3766                                 uint32_t p;
    3767 
    37683772                                if (!j)
    37693773                                    c = *pu8Src++;
     
    37723776                                c <<= 4;
    37733777
    3774                                 p = pData->Palette[pix];
    3775 
    3776                                 pix = (p >> 16) & 0xFF;
     3778                                uint32_t u32Pal = pData->au32Palette[pix];
     3779
     3780                                pix = (u32Pal >> 16) & 0xFF;
    37773781                                *pu8TmpPtr++ = pix * cbStep / LOGO_SHOW_STEPS;
    3778                                 pix = (p >> 8) & 0xFF;
     3782                                pix = (u32Pal >> 8) & 0xFF;
    37793783                                *pu8TmpPtr++ = pix * cbStep / LOGO_SHOW_STEPS;
    3780                                 pix = p & 0xFF;
     3784                                pix = u32Pal & 0xFF;
    37813785                                *pu8TmpPtr++ = pix * cbStep / LOGO_SHOW_STEPS;
    37823786                                *pu8TmpPtr++;
    37833787
    3784                                 if (j++ >= 1) j = 0;
     3788                                j = (j + 1) % 2;
     3789                                break;
    37853790                            }
    3786                             break;
     3791
    37873792                            case 8:
    37883793                            {
    3789                                 uint32_t p;
    3790 
    3791                                 p = pData->Palette[*pu8Src++];
    3792 
    3793                                 pix = (p >> 16) & 0xFF;
     3794                                uint32_t u32Pal = pData->au32Palette[*pu8Src++];
     3795
     3796                                pix = (u32Pal >> 16) & 0xFF;
    37943797                                *pu8TmpPtr++ = pix * cbStep / LOGO_SHOW_STEPS;
    3795                                 pix = (p >> 8) & 0xFF;
     3798                                pix = (u32Pal >> 8) & 0xFF;
    37963799                                *pu8TmpPtr++ = pix * cbStep / LOGO_SHOW_STEPS;
    3797                                 pix = p & 0xFF;
     3800                                pix = u32Pal & 0xFF;
    37983801                                *pu8TmpPtr++ = pix * cbStep / LOGO_SHOW_STEPS;
    37993802                                *pu8TmpPtr++;
     3803                                break;
    38003804                            }
    3801                             break;
     3805
    38023806                            case 24:
    38033807                                *pu8TmpPtr++ = *pu8Src++ * cbStep / LOGO_SHOW_STEPS;
     
    38053809                                *pu8TmpPtr++ = *pu8Src++ * cbStep / LOGO_SHOW_STEPS;
    38063810                                *pu8TmpPtr++;
    3807                             break;
     3811                                break;
    38083812                        }
    38093813                    }
     
    38163820                 * Invalidate the area.
    38173821                 */
    3818                 pData->pDrv->pfnUpdateRect(pData->pDrv, 0, 0, scr_cx, scr_cy);
     3822/** @todo cannot call this here. Just set the appropriate dirty bits. */
     3823                pData->pDrv->pfnUpdateRect(pData->pDrv, 0, 0, LOGO_MAX_WIDTH, LOGO_MAX_WIDTH);
    38193824
    38203825                pData->LogoCommand = LOGO_CMD_NOP;
     3826                break;
    38213827            }
    3822             break;
     3828
    38233829            default:
    38243830                Log(("vbeIOPortWriteCMDLogo: invalid command %d\n", u32));
     
    54495455            if (VBOX_SUCCESS(rc))
    54505456            {
    5451                 if (cbFile > 0)
     5457                if (cbFile > 0 && cbFile < 32*_1M)
    54525458                    LogoHdr.cbLogo = (uint32_t)cbFile;
    54535459                else
     
    54615467             */
    54625468            LogRel(("vgaR3Construct: Failed to open logo file '%s', rc=%Vrc!\n", pData->pszLogoFile, rc));
    5463             RTFileClose(FileLogo);
     5469            if (FileLogo != NIL_RTFILE)
     5470                RTFileClose(FileLogo);
    54645471            FileLogo = NIL_RTFILE;
    54655472            MMR3HeapFree(pData->pszLogoFile);
  • trunk/src/VBox/Devices/Graphics/DevVGA.h

    r7774 r7776  
    331331    uint8_t                     Padding8;       /**< Alignment padding. */
    332332    /** Logo X. */
    333     uint16_t                    LogoX;
     333    uint16_t                    xLogo;
    334334    /** Logo Y. */
    335     uint16_t                    LogoY;
     335    uint16_t                    yLogo;
    336336    /** Logo width. */
    337     uint16_t                    LogoWidth;
     337    uint16_t                    cxLogo;
    338338    /** Logo height. */
    339     uint16_t                    LogoHeight;
     339    uint16_t                    cyLogo;
    340340    /** Logo depth. */
    341     uint16_t                    LogoDepth;
     341    uint16_t                    cBitsLogo;
    342342    /** Palette size. */
    343     uint16_t                    PalSize;
     343    uint16_t                    cbPal;
    344344    /** Palette data. */
    345     uint32_t                    Palette[256];
     345    uint32_t                    au32Palette[256];
    346346#endif /* VBOX */
    347347} VGAState;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette