[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