[prev in list] [next in list] [prev in thread] [next in thread]
List: bochs-cvs
Subject: [Bochs-cvs] [13279] trunk/bochs/iodev/display
From: vruppert--- via Bochs-cvs <bochs-cvs () lists ! sourceforge ! net>
Date: 2017-08-21 19:33:30
Message-ID: 1503344010.154631.10670 () sfp-scm-6 ! v30 ! ch3 ! sourceforge ! com
[Download RAW message or body]
Revision: 13279
Author: vruppert
Date: 2017-08-21 19:33:29 +0000 (Mon, 21 Aug 2017)
Log Message:
-----------
Fixed Voodoo pixel clock calculation.
- Now using float type for the 'clk0_freq' variable.
- DAC register 6 can switch to half pixel clock (ported from PCem).
- Writing value 0xf8 to PLL register 0x0e completes clock #0 setup.
Modified Paths:
--------------
trunk/bochs/iodev/display/voodoo.cc
trunk/bochs/iodev/display/voodoo_data.h
trunk/bochs/iodev/display/voodoo_func.h
Modified: trunk/bochs/iodev/display/voodoo.cc
===================================================================
--- trunk/bochs/iodev/display/voodoo.cc 2017-08-20 20:25:45 UTC (rev 13278)
+++ trunk/bochs/iodev/display/voodoo.cc 2017-08-21 19:33:29 UTC (rev 13279)
@@ -324,7 +324,7 @@
new bx_shadow_num_c(dac, name, &v->dac.reg[i], BASE_HEX);
}
new bx_shadow_num_c(dac, "read_result", &v->dac.read_result, BASE_HEX);
- new bx_shadow_num_c(dac, "clk0_freq", &v->dac.clk0_freq, BASE_DEC);
+ new bx_shadow_num_c(dac, "clk0_freq", &v->dac.clk0_freq);
bx_list_c *fbi = new bx_list_c(vstate, "fbi", "framebuffer");
new bx_shadow_data_c(fbi, "ram", v->fbi.ram, (4 << 20));
new bx_shadow_num_c(fbi, "rgboffs0", &v->fbi.rgboffs[0], BASE_HEX);
@@ -568,11 +568,11 @@
hsync = ((v->reg[hSync].u >> 16) & 0x3ff);
vsync = ((v->reg[vSync].u >> 16) & 0xfff);
}
- double hfreq = (double)(v->dac.clk0_freq * 1000) / htotal;
+ float hfreq = v->dac.clk0_freq / (float)htotal;
if (((v->reg[fbiInit1].u >> 20) & 3) == 1) { // VCLK div 2
hfreq /= 2;
}
- double vfreq = hfreq / (double)vtotal;
+ float vfreq = hfreq / (float)vtotal;
BX_VOODOO_THIS s.vdraw.htotal_usec = (unsigned)(1000000.0 / hfreq);
BX_VOODOO_THIS s.vdraw.vtotal_usec = (unsigned)(1000000.0 / vfreq);
BX_VOODOO_THIS s.vdraw.htime_to_pixel = (double)htotal / (1000000.0 / hfreq);
Modified: trunk/bochs/iodev/display/voodoo_data.h
===================================================================
--- trunk/bochs/iodev/display/voodoo_data.h 2017-08-20 20:25:45 UTC (rev 13278)
+++ trunk/bochs/iodev/display/voodoo_data.h 2017-08-21 19:33:29 UTC (rev 13279)
@@ -1621,7 +1621,7 @@
Bit8u clk0_m;
Bit8u clk0_n;
Bit8u clk0_p;
- Bit32u clk0_freq;
+ float clk0_freq;
};
Modified: trunk/bochs/iodev/display/voodoo_func.h
===================================================================
--- trunk/bochs/iodev/display/voodoo_func.h 2017-08-20 20:25:45 UTC (rev 13278)
+++ trunk/bochs/iodev/display/voodoo_func.h 2017-08-21 19:33:29 UTC (rev 13279)
@@ -1396,8 +1396,12 @@
}
break;
case 0x0e:
- if ((d->data_size == 1) && ((data & 0x21) == 0x21)) {
- d->clk0_freq = (Bit32u)((14318.0 * (d->clk0_m + 2)) / ((1 << d->clk0_p) \
* (d->clk0_n + 2))); + if ((d->data_size == 1) && (data == 0xf8)) {
+ d->clk0_freq = 14318184.0 * ((float)(d->clk0_m + 2) / (float)(d->clk0_n \
+ 2)) / (float)(1 << d->clk0_p); + Bit8u dacr6 = d->reg[6] & 0xf0;
+ if ((dacr6 == 0x20) || (dacr6 == 0x60) || (dacr6 == 0x70)) {
+ d->clk0_freq /= 2.0f;
+ }
Voodoo_update_timing();
}
break;
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Bochs-cvs mailing list
Bochs-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bochs-cvs
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic