VirtualBox

vbox的更動 4539 路徑 trunk/src/VBox/Devices/Graphics


忽略:
時間撮記:
2007-9-5 下午04:53:45 (17 年 以前)
作者:
vboxsync
訊息:

Modified double-scan and non-zero starting row scan count handling. Fixes mode 6 (CGA),
although modes 4 and 5 remain broken.

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/Devices/Graphics/DevVGA.cpp

    r4382 r4539  
    18531853#endif /* !VBOX */
    18541854{
    1855     int y1, y, update, page_min, page_max, linesize, y_start, double_scan, mask;
     1855    int y1, y2, y, update, page_min, page_max, linesize, y_start, double_scan, mask;
    18561856    int width, height, shift_control, line_offset, page0, page1, bwidth;
    1857     int disp_width, multi_scan, multi_run;
     1857    int disp_width, multi_run;
    18581858    uint8_t *d;
    18591859    uint32_t v, addr1, addr;
     
    18701870    shift_control = (s->gr[0x05] >> 5) & 3;
    18711871    double_scan = (s->cr[0x09] >> 7);
    1872     if (shift_control != 1) {
    1873         multi_scan = (((s->cr[0x09] & 0x1f) + 1) << double_scan) - 1;
    1874     } else {
    1875         /* in CGA modes, multi_scan is ignored */
    1876         /* XXX: is it correct ? */
    1877         multi_scan = double_scan;
    1878     }
    1879     multi_run = multi_scan;
     1872    multi_run = double_scan;
    18801873    if (shift_control != s->shift_control ||
    18811874        double_scan != s->double_scan) {
     
    19831976
    19841977    y1 = 0;
     1978    y2 = s->cr[0x09] & 0x1F;    /* starting row scan count */
    19851979    for(y = 0; y < height; y++) {
    19861980        addr = addr1;
     
    20442038        }
    20452039        if (!multi_run) {
    2046             mask = (s->cr[0x17] & 3) ^ 3;
    2047             if ((y1 & mask) == mask)
     2040//            mask = (s->cr[0x17] & 3) ^ 3;
     2041//            if ((y & mask) == mask)
     2042//                addr1 += line_offset;
     2043            y1++;
     2044            multi_run = double_scan;
     2045
     2046            if (y2 == 0) {
     2047                y2 = s->cr[0x09] & 0x1F;
    20482048                addr1 += line_offset;
    2049             y1++;
    2050             multi_run = multi_scan;
     2049            } else {
     2050                --y2;
     2051            }
    20512052        } else {
    20522053            multi_run--;
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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