fbset-2.1/ 40755 1750 1750 0 6734166315 12022 5ustar kopteinkopteinfbset-2.1/etc/ 40755 1750 1750 0 6650601300 12556 5ustar kopteinkopteinfbset-2.1/etc/CVS/ 40755 1750 1750 0 6650601300 13211 5ustar kopteinkopteinfbset-2.1/etc/CVS/Root100644 1750 1750 47 6650601277 14132 0ustar kopteinkoptein:pserver:geert@cvs.linux-m68k.org:/CVS fbset-2.1/etc/CVS/Repository100644 1750 1750 17 6650601277 15363 0ustar kopteinkoptein/CVS/fbset/etc fbset-2.1/etc/CVS/Entries100644 1750 1750 312 6650601300 14616 0ustar kopteinkoptein/fb.modes.ATI/1.1.1.1/Sun Jan 17 19:15:47 1999// /fb.modes.Falcon/1.1.1.1/Sun Jan 17 19:15:47 1999// /fb.modes.NTSC/1.1.1.1/Sun Jan 17 19:15:47 1999// /fb.modes.PAL/1.1.1.1/Sun Jan 17 19:15:47 1999// D fbset-2.1/etc/fb.modes.ATI100644 1750 1750 53057 6650433343 14753 0ustar kopteinkoptein# # Sample video modes # # These data are based on the CRTC parameters in # # Mach64 Programmer's Guide, Appendix C # (C) 1998 ATI Technologies Inc. # # # 640x480, 60 Hz, Non-Interlaced (25.175 MHz dotclock) # # Horizontal Vertical # Resolution 640 480 # Scan Frequency 31.469 kHz 59.94 Hz # Sync Width 3.813 us 0.064 ms # 12 chars 2 lines # Front Porch 0.636 us 0.318 ms # 2 chars 10 lines # Back Porch 1.907 us 1.048 ms # 6 chars 33 lines # Active Time 25.422 us 15.253 ms # 80 chars 480 lines # Blank Time 6.356 us 1.430 ms # 20 chars 45 lines # Polarity negative negative # mode "640x480-60" # D: 25.175 MHz, H: 31.469 kHz, V: 59.94 Hz geometry 640 480 640 480 8 timings 39722 48 16 33 10 96 2 endmode # # 640x480, 72 Hz, Non-Interlaced (31.20 MHz dotclock) # # Horizontal Vertical # Resolution 640 480 # Scan Frequency 37.500 kHz 72.12 Hz # Sync Width 1.282 us 0.080 ms # 5 chars 3 lines # Front Porch 0.769 us 0.240 ms # 3 chars 9 lines # Back Porch 4.103 us 0.747 ms # 16 chars 28 lines # Active Time 20.513 us 12.800 ms # 80 chars 480 lines # Blank Time 6.154 us 1.067 ms # 24 chars 40 lines # Polarity negative negative # mode "640x480-72" # D: 31.20 MHz, H: 37.500 kHz, V: 72.12 Hz geometry 640 480 640 480 8 timings 32052 128 24 28 9 40 3 endmode # # 640x480, 75 Hz, Non-Interlaced (31.50 MHz dotclock) # # Horizontal Vertical # Resolution 640 480 # Scan Frequency 37.500 kHz 75.00 Hz # Sync Width 2.032 us 0.080 ms # 8 chars 3 lines # Front Porch 0.508 us 0.027 ms # 2 chars 1 lines # Back Porch 3.810 us 0.427 ms # 15 chars 16 lines # Active Time 20.317 us 12.800 ms # 80 chars 480 lines # Blank Time 6.349 us 0.533 ms # 25 chars 20 lines # Polarity negative negative # mode "640x480-75" # D: 31.50 MHz, H: 37.500 kHz, V: 75.00 Hz geometry 640 480 640 480 8 timings 31747 120 16 16 1 64 3 endmode # # 640x480, 90 Hz, Non-Interlaced (39.91 MHz dotclock) # # Horizontal Vertical # Resolution 640 480 # Scan Frequency 47.969 kHz 90.00 Hz # Sync Width 1.002 us 0.292 ms # 5 chars 14 lines # Front Porch 0.902 us 0.521 ms # 4 chars 25 lines # Back Porch 2.907 us 0.292 ms # 15 chars 14 lines # Active Time 16.036 us 10.007 ms # 80 chars 480 lines # Blank Time 4.811 us 1.105 ms # 24 chars 53 lines # Polarity negative negative # mode "640x480-90" # D: 39.91 MHz, H: 47.969 kHz, V: 90.00 Hz geometry 640 480 640 480 8 timings 25057 120 32 14 25 40 14 endmode # # 640x480, 100 Hz, Non-Interlaced (44.90 MHz dotclock) # # Horizontal Vertical # Resolution 640 480 # Scan Frequency 52.948 kHz 99.71 Hz # Sync Width 2.851 us 0.227 ms # 16 chars 12 lines # Front Porch 0.801 us 0.416 ms # 4 chars 22 lines # Back Porch 0.981 us 0.322 ms # 6 chars 17 lines # Active Time 14.254 us 9.065 ms # 80 chars 480 lines # Blank Time 4.633 us 0.963 ms # 26 chars 51 lines # Polarity negative negative # mode "640x480-100" # D: 44.90 MHz, H: 52.948 kHz, V: 99.71 Hz geometry 640 480 640 480 8 timings 22272 48 32 17 22 128 12 endmode # # 800x600, 48 Hz, Interlaced (36.00 MHz dotclock) # # Horizontal Vertical # Resolution 800 600 # Scan Frequency 33.835 kHz 96.39 Hz # Sync Width 3.556 us 0.177 ms # 16 chars 12 lines # Front Porch 2.222 us 0.163 ms # 10 chars 11 lines # Back Porch 1.555 us 1.167 ms # 7 chars 79 lines # Active Time 22.222 us 8.867 ms # 100 chars 600 lines # Blank Time 7.333 us 1.507 ms # 33 chars 102 lines # Polarity positive positive # mode "800x600-48-lace" # D: 36.00 MHz, H: 33.835 kHz, V: 96.39 Hz geometry 800 600 800 600 8 timings 27778 56 80 79 11 128 12 laced true hsync high vsync high endmode # # 800x600, 56 Hz, Non-Interlaced (36.00 MHz dotclock) # # Horizontal Vertical # Resolution 800 600 # Scan Frequency 35.156 kHz 56.25 Hz # Sync Width 2.000 us 0.057 ms # 9 chars 2 lines # Front Porch 0.667 us 0.028 ms # 3 chars 1 lines # Back Porch 3.555 us 0.626 ms # 16 chars 22 lines # Active Time 22.222 us 17.067 ms # 100 chars 600 lines # Blank Time 6.222 us 0.711 ms # 28 chars 25 lines # Polarity positive positive # mode "800x600-56" # D: 36.00 MHz, H: 35.156 kHz, V: 56.25 Hz geometry 800 600 800 600 8 timings 27778 128 24 22 1 72 2 hsync high vsync high endmode # # 800x600, 60 Hz, Non-Interlaced (40.00 MHz dotclock) # # Horizontal Vertical # Resolution 800 600 # Scan Frequency 37.879 kHz 60.32 Hz # Sync Width 3.200 us 0.106 ms # 16 chars 4 lines # Front Porch 1.000 us 0.026 ms # 5 chars 1 lines # Back Porch 2.200 us 0.607 ms # 11 chars 23 lines # Active Time 20.000 us 15.840 ms # 100 chars 600 lines # Blank Time 6.400 us 0.739 ms # 32 chars 28 lines # Polarity positive positive # mode "800x600-60" # D: 40.00 MHz, H: 37.879 kHz, V: 60.32 Hz geometry 800 600 800 600 8 timings 25000 88 40 23 1 128 4 hsync high vsync high endmode # # 800x600, 70 Hz, Non-Interlaced (44.90 MHz dotclock) # # Horizontal Vertical # Resolution 800 600 # Scan Frequency 44.544 kHz 70.04 Hz # Sync Width 3.207 us 0.269 ms # 18 chars 12 lines # Front Porch 0.535 us 0.202 ms # 3 chars 9 lines # Back Porch 0.891 us 0.337 ms # 5 chars 15 lines # Active Time 17.817 us 13.470 ms # 100 chars 600 lines # Blank Time 4.633 us 0.808 ms # 26 chars 36 lines # Polarity positive negative # mode "800x600-70" # D: 44.90 MHz, H: 44.544 kHz, V: 70.04 Hz geometry 800 600 800 600 8 timings 22272 40 24 15 9 144 12 hsync high endmode # # 800x600, 72 Hz, Non-Interlaced (50.00 MHz dotclock) # # Horizontal Vertical # Resolution 800 600 # Scan Frequency 48.090 kHz 72.19 Hz # Sync Width 2.400 us 0.125 ms # 15 chars 6 lines # Front Porch 1.120 us 0.769 ms # 7 chars 37 lines # Back Porch 1.280 us 0.478 ms # 8 chars 23 lines # Active Time 16.000 us 12.477 ms # 100 chars 600 lines # Blank Time 4.800 us 1.372 ms # 30 chars 66 lines # Polarity positive positive # mode "800x600-72" # D: 50.00 MHz, H: 48.090 kHz, V: 72.19 Hz geometry 800 600 800 600 8 timings 20000 64 56 23 37 120 6 hsync high vsync high endmode # # 800x600, 75 Hz, Non-Interlaced (49.50 MHz dotclock) # # Horizontal Vertical # Resolution 800 600 # Scan Frequency 46.875 kHz 75.00 Hz # Sync Width 1.616 us 0.064 ms # 10 chars 3 lines # Front Porch 0.323 us 0.021 ms # 2 chars 1 lines # Back Porch 3.232 us 0.448 ms # 20 chars 21 lines # Active Time 16.162 us 12.800 ms # 100 chars 600 lines # Blank Time 5.172 us 0.533 ms # 32 chars 25 lines # Polarity positive positive # mode "800x600-75" # D: 49.50 MHz, H: 46.875 kHz, V: 75.00 Hz geometry 800 600 800 600 8 timings 20203 160 16 21 1 80 3 hsync high vsync high endmode # # 800x600, 90 Hz, Non-Interlaced (56.64 MHz dotclock) # # Horizontal Vertical # Resolution 800 600 # Scan Frequency 57.097 kHz 89.92 Hz # Sync Width 1.130 us 0.193 ms # 8 chars 11 lines # Front Porch 0.071 us 0.140 ms # 1 chars 8 lines # Back Porch 2.189 us 0.280 ms # 15 chars 16 lines # Active Time 14.124 us 10.508 ms # 100 chars 600 lines # Blank Time 3.390 us 0.613 ms # 24 chars 35 lines # Polarity positive positive # mode "800x600-90" # D: 56.64 MHz, H: 57.097 kHz, V: 89.92 Hz geometry 800 600 800 600 8 timings 17656 120 8 16 8 64 11 hsync high vsync high endmode # # 800x600, 100 Hz, Non-Interlaced (67.50 MHz dotclock) # # Horizontal Vertical # Resolution 800 600 # Scan Frequency 62.500 kHz 100.00 Hz # Sync Width 0.948 us 0.064 ms # 8 chars 4 lines # Front Porch 0.000 us 0.112 ms # 0 chars 7 lines # Back Porch 3.200 us 0.224 ms # 27 chars 14 lines # Active Time 11.852 us 9.600 ms # 100 chars 600 lines # Blank Time 4.148 us 0.400 ms # 35 chars 25 lines # Polarity positive positive # mode "800x600-100" # D: 67.50 MHz, H: 62.500 kHz, V: 100.00 Hz geometry 800 600 800 600 8 timings 14815 216 0 14 7 64 4 hsync high vsync high endmode # # 1024x768, 43 Hz, Interlaced (44.90 MHz dotclock) # # Horizontal Vertical # Resolution 1024 768 # Scan Frequency 35.522 kHz 86.96 Hz # Sync Width 3.920 us 0.113 ms # 22 chars 8 lines # Front Porch 0.178 us 0.014 ms # 1 chars 1 lines # Back Porch 1.247 us 0.563 ms # 7 chars 40 lines # Active Time 22.806 us 10.810 ms # 128 chars 768 lines # Blank Time 5.345 us 0.690 ms # 30 chars 49 lines # Polarity positive positive # mode "1024x768-43-lace" # D: 44.90 MHz, H: 35.522 kHz, V: 86.96 Hz geometry 1024 768 1024 768 8 timings 22272 56 8 40 1 176 8 laced true hsync high vsync high endmode # # 1024x768, 60 Hz, Non-Interlaced (65.00 MHz dotclock) # # Horizontal Vertical # Resolution 1024 768 # Scan Frequency 48.363 kHz 60.00 Hz # Sync Width 2.092 us 0.124 ms # 17 chars 6 lines # Front Porch 0.369 us 0.062 ms # 3 chars 3 lines # Back Porch 2.462 us 0.601 ms # 20 chars 29 lines # Active Time 15.754 us 15.880 ms # 128 chars 768 lines # Blank Time 4.923 us 0.786 ms # 40 chars 38 lines # Polarity negative negative # mode "1024x768-60" # D: 65.00 MHz, H: 48.363 kHz, V: 60.00 Hz geometry 1024 768 1024 768 8 timings 15385 160 24 29 3 136 6 endmode # # 1024x768, 70 Hz, Non-Interlaced (75.00 MHz dotclock) # # Horizontal Vertical # Resolution 1024 768 # Scan Frequency 56.476 kHz 70.07 Hz # Sync Width 1.813 us 0.106 ms # 17 chars 6 lines # Front Porch 0.320 us 0.053 ms # 3 chars 3 lines # Back Porch 1.921 us 0.514 ms # 18 chars 29 lines # Active Time 13.653 us 13.599 ms # 128 chars 768 lines # Blank Time 4.053 us 0.673 ms # 38 chars 38 lines # Polarity negative negative # mode "1024x768-70" # D: 75.00 MHz, H: 56.476 kHz, V: 70.07 Hz geometry 1024 768 1024 768 8 timings 13334 144 24 29 3 136 6 endmode # # 1024x768, 72 Hz, Non-Interlaced (75.00 MHz dotclock) # # Horizontal Vertical # Resolution 10224 768 # Scan Frequency 58.230 kHz 72.245 Hz # Sync Width 1.813 us 0.103 ms # 17 chars 6 lines # Front Porch 0.320 us 0.052 ms # 3 chars 3 lines # Back Porch 1.387 us 0.498 ms # 13 chars 29 lines # Active Time 13.653 us 13.189 ms # 128 chars 768 lines # Blank Time 3.520 us 0.653 ms # 33 chars 38 lines # Polarity negative negative # mode "1024x768-72" # D: 75.00 MHz, H: 58.230 kHz, V: 72.245 Hz geometry 10224 768 10224 768 8 timings 13334 104 24 29 3 136 6 endmode # # 1024x768, 75 Hz, Non-Interlaced (78.75 MHz dotclock) # # Horizontal Vertical # Resolution 1024 768 # Scan Frequency 60.023 kHz 75.03 Hz # Sync Width 1.219 us 0.050 ms # 12 chars 3 lines # Front Porch 0.203 us 0.017 ms # 2 chars 1 lines # Back Porch 2.235 us 0.466 ms # 22 chars 28 lines # Active Time 13.003 us 12.795 ms # 128 chars 768 lines # Blank Time 3.657 us 0.533 ms # 36 chars 32 lines # Polarity positive positive # mode "1024x768-75" # D: 78.75 MHz, H: 60.023 kHz, V: 75.03 Hz geometry 1024 768 1024 768 8 timings 12699 176 16 28 1 96 3 hsync high vsync high endmode # # 1024x768, 90 Hz, Non-Interlaced (100.0 MHz dotclock) # # Horizontal Vertical # Resolution 1024 768 # Scan Frequency 76.220 kHz 90.20 Hz # Sync Width 0.960 us 0.197 ms # 12 chars 15 lines # Front Porch 0.000 us 0.276 ms # 0 chars 21 lines # Back Porch 1.920 us 0.537 ms # 24 chars 41 lines # Active Time 10.240 us 10.076 ms # 128 chars 768 lines # Blank Time 2.880 us 1.010 ms # 36 chars 77 lines # Polarity negative negative # mode "1024x768-90" # D: 100.0 MHz, H: 76.220 kHz, V: 90.20 Hz geometry 1024 768 1024 768 8 timings 10000 192 0 41 21 96 15 endmode # # 1024x768, 100 Hz, Non-Interlaced (110.0 MHz dotclock) # # Horizontal Vertical # Resolution 1024 768 # Scan Frequency 79.023 kHz 99.78 Hz # Sync Width 0.800 us 0.101 ms # 11 chars 8 lines # Front Porch 0.000 us 0.000 ms # 0 chars 0 lines # Back Porch 2.545 us 0.202 ms # 35 chars 16 lines # Active Time 9.309 us 9.719 ms # 128 chars 768 lines # Blank Time 3.345 us 0.304 ms # 46 chars 24 lines # Polarity negative negative # mode "1024x768-100" # D: 110.0 MHz, H: 79.023 kHz, V: 99.78 Hz geometry 1024 768 1024 768 8 timings 9091 280 0 16 0 88 8 endmode # # 1152x864, 43 Hz, Interlaced (65.0 MHz dotclock) # # Horizontal Vertical # Resolution 1152 864 # Scan Frequency 45.904 kHz 87.02 Hz # Sync Width 1.969 us 0.098 ms # 16 chars 9 lines # Front Porch 1.062 us 0.850 ms # 9 chars 78 lines # Back Porch 1.031 us 1.133 ms # 8 chars 104 lines # Active Time 17.723 us 9.411 ms # 144 chars 864 lines # Blank Time 4.062 us 2.080 ms # 33 chars 191 lines # Polarity positive positive # mode "1152x864-43-lace" # D: 65.0 MHz, H: 45.904 kHz, V: 87.02 Hz geometry 1152 864 1152 864 8 timings 15385 64 72 104 78 128 9 laced true hsync high vsync high endmode # # 1152x864, 47 Hz, Interlaced (65.0 MHz dotclock) # # Horizontal Vertical # Resolution 1152 864 # Scan Frequency 44.890 kHz 94.80 Hz # Sync Width 1.969 us 0.100 ms # 16 chars 9 lines # Front Porch 1.415 us 0.334 ms # 11 chars 30 lines # Back Porch 1.170 us 0.490 ms # 10 chars 44 lines # Active Time 17.723 us 9.624 ms # 144 chars 864 lines # Blank Time 4.554 us 0.924 ms # 37 chars 83 lines # Polarity positive positive # mode "1152x864-47-lace" # D: 65.0 MHz, H: 44.890 kHz, V: 94.80 Hz geometry 1152 864 1152 864 8 timings 15385 80 88 44 30 128 9 laced true hsync high vsync high endmode # # 1152x864, 60 Hz, Non-Interlaced (80.0 MHz dotclock) # # Horizontal Vertical # Resolution 1152 864 # Scan Frequency 54.945 kHz 59.98 Hz # Sync Width 1.400 us 0.091 ms # 14 chars 5 lines # Front Porch 0.800 us 0.109 ms # 8 chars 6 lines # Back Porch 1.600 us 0.746 ms # 16 chars 41 lines # Active Time 14.400 us 15.725 ms # 144 chars 864 lines # Blank Time 3.800 us 0.946 ms # 38 chars 52 lines # Polarity positive positive # mode "1152x864-60" # D: 80.0 MHz, H: 54.945 kHz, V: 59.98 Hz geometry 1152 864 1152 864 8 timings 12500 128 64 41 6 112 5 hsync high vsync high endmode # # 1152x864, 70 Hz, Non-Interlaced (100.0 MHz dotclock) # # Horizontal Vertical # Resolution 1152 864 # Scan Frequency 66.138 kHz 69.99 Hz # Sync Width 1.520 us 0.166 ms # 19 chars 11 lines # Front Porch 0.390 us 0.197 ms # 5 chars 13 lines # Back Porch 1.690 us 0.862 ms # 21 chars 57 lines # Active Time 11.520 us 13.064 ms # 144 chars 864 lines # Blank Time 3.600 us 1.225 ms # 45 chars 81 lines # Polarity positive positive # mode "1152x864-70" # D: 100.0 MHz, H: 66.138 kHz, V: 69.99 Hz geometry 1152 864 1152 864 8 timings 10000 168 40 57 13 152 11 hsync high vsync high endmode # # 1152x864, 75 Hz, Non-Interlaced (110.0 MHz dotclock) # # Horizontal Vertical # Resolution 1152 864 # Scan Frequency 75.137 kHz 74.99 Hz # Sync Width 1.309 us 0.106 ms # 18 chars 8 lines # Front Porch 0.245 us 0.599 ms # 3 chars 45 lines # Back Porch 1.282 us 1.132 ms # 18 chars 85 lines # Active Time 10.473 us 11.499 ms # 144 chars 864 lines # Blank Time 2.836 us 1.837 ms # 39 chars 138 lines # Polarity positive positive # mode "1152x864-75" # D: 110.0 MHz, H: 75.137 kHz, V: 74.99 Hz geometry 1152 864 1152 864 8 timings 9091 144 24 85 45 144 8 hsync high vsync high endmode # # 1152x864, 80 Hz, Non-Interlaced (110.0 MHz dotclock) # # Horizontal Vertical # Resolution 1152 864 # Scan Frequency 76.389 kHz 79.74 Hz # Sync Width 1.018 us 0.092 ms # 14 chars 7 lines # Front Porch 0.127 us 0.393 ms # 2 chars 30 lines # Back Porch 1.473 us 0.747 ms # 20 chars 57 lines # Active Time 10.473 us 11.311 ms # 144 chars 864 lines # Blank Time 2.618 us 1.231 ms # 36 chars 94 lines # Polarity positive positive # mode "1152x864-80" # D: 110.0 MHz, H: 76.389 kHz, V: 79.74 Hz geometry 1152 864 1152 864 8 timings 9091 160 16 57 30 112 7 hsync high vsync high endmode # # 1280x1024, 43 Hz, Interlaced (80.00 MHz dotclock) # # Horizontal Vertical # Resolution 1024 1024 # Scan Frequency 50.000 kHz 87.03 Hz # Sync Width 1.000 us 0.100 ms # 10 chars 10 lines # Front Porch 1.000 us 0.500 ms # 10 chars 50 lines # Back Porch 2.000 us 0.650 ms # 20 chars 65 lines # Active Time 16.000 us 10.240 ms # 160 chars 1024 lines # Blank Time 4.000 us 1.250 ms # 40 chars 125 lines # Polarity positive positive # mode "1280x1024-43-lace" # D: 80.00 MHz, H: 50.000 kHz, V: 87.03 Hz geometry 1024 1024 1024 1024 8 timings 12500 160 80 65 50 80 10 laced true hsync high vsync high endmode # # 1280x1024, 47 Hz, Interlaced (80.00 MHz dotclock) # # Horizontal Vertical # Resolution 1280 1024 # Scan Frequency 50.000 kHz 94.97 Hz # Sync Width 1.000 us 0.100 ms # 10 chars 10 lines # Front Porch 1.000 us 0.010 ms # 10 chars 1 lines # Back Porch 2.000 us 0.180 ms # 20 chars 18 lines # Active Time 16.000 us 10.240 ms # 160 chars 1024 lines # Blank Time 4.000 us 0.290 ms # 40 chars 29 lines # Polarity positive positive # mode "1280x1024-47-lace" # D: 80.00 MHz, H: 50.000 kHz, V: 94.97 Hz geometry 1280 1024 1280 1024 8 timings 12500 160 80 18 1 80 10 laced true hsync high vsync high endmode # # 1280x1024, 60 Hz, Non-Interlaced (108.00 MHz dotclock) # # Horizontal Vertical # Resolution 1280 1024 # Scan Frequency 63.981 kHz 60.02 Hz # Sync Width 1.037 us 0.047 ms # 14 chars 3 lines # Front Porch 0.444 us 0.015 ms # 6 chars 1 lines # Back Porch 2.297 us 0.594 ms # 31 chars 38 lines # Active Time 11.852 us 16.005 ms # 160 chars 1024 lines # Blank Time 3.778 us 0.656 ms # 51 chars 42 lines # Polarity positive positive # mode "1280x1024-60" # D: 108.00 MHz, H: 63.981 kHz, V: 60.02 Hz geometry 1280 1024 1280 1024 8 timings 9260 248 48 38 1 112 3 hsync high vsync high endmode # # 1280x1024, 70 Hz, Non-Interlaced (126.00 MHz dotclock) # # Horizontal Vertical # Resolution 1280 1024 # Scan Frequency 74.645 kHz 70.02 Hz # Sync Width 0.889 us 0.067 ms # 14 chars 5 lines # Front Porch 0.635 us 0.013 ms # 10 chars 1 lines # Back Porch 1.714 us 0.483 ms # 27 chars 36 lines # Active Time 10.159 us 13.718 ms # 160 chars 1024 lines # Blank Time 3.238 us 0.563 ms # 51 chars 42 lines # Polarity positive positive # mode "1280x1024-70" # D: 126.00 MHz, H: 74.645 kHz, V: 70.02 Hz geometry 1280 1024 1280 1024 8 timings 7937 216 80 36 1 112 5 hsync high vsync high endmode # # 1280x1024, 74 Hz, Non-Interlaced (135.00 MHz dotclock) # # Horizontal Vertical # Resolution 1280 1024 # Scan Frequency 78.855 kHz 74.11 Hz # Sync Width 1.067 us 0.380 ms # 18 chars 30 lines # Front Porch 0.237 us 0.000 ms # 4 chars 0 lines # Back Porch 1.896 us 0.127 ms # 32 chars 10 lines # Active Time 9.481 us 12.986 ms # 160 chars 1024 lines # Blank Time 3.200 us 0.507 ms # 54 chars 40 lines # Polarity positive positive # mode "1280x1024-74" # D: 135.00 MHz, H: 78.855 kHz, V: 74.11 Hz geometry 1280 1024 1280 1024 8 timings 7408 256 32 10 0 144 30 hsync high vsync high endmode # # 1280x1024, 75 Hz, Non-Interlaced (135.00 MHz dotclock) # # Horizontal Vertical # Resolution 1280 1024 # Scan Frequency 79.976 kHz 75.02 Hz # Sync Width 1.067 us 0.038 ms # 18 chars 3 lines # Front Porch 0.119 us 0.012 ms # 2 chars 1 lines # Back Porch 1.837 us 0.475 ms # 31 chars 38 lines # Active Time 9.481 us 12.804 ms # 160 chars 1024 lines # Blank Time 3.022 us 0.525 ms # 51 chars 42 lines # Polarity positive positive # mode "1280x1024-75" # D: 135.00 MHz, H: 79.976 kHz, V: 75.02 Hz geometry 1280 1024 1280 1024 8 timings 7408 248 16 38 1 144 3 hsync high vsync high endmode # # 1600x1200, 60 Hz, Non-Interlaced (156.00 MHz dotclock) # # Horizontal Vertical # Resolution 1600 1200 # Scan Frequency 76.200 kHz 60.00 Hz # Sync Width 1.026 us 0.105 ms # 20 chars 8 lines # Front Porch 0.205 us 0.131 ms # 4 chars 10 lines # Back Porch 1.636 us 0.682 ms # 32 chars 52 lines # Active Time 10.256 us 15.748 ms # 200 chars 1200 lines # Blank Time 2.872 us 0.866 ms # 56 chars 66 lines # Polarity negative negative # mode "1600x1200-60" # D: 156.00 MHz, H: 76.200 kHz, V: 60.00 Hz geometry 1600 1200 1600 1200 8 timings 6411 256 32 52 10 160 8 endmode # # 1600x1200, 66 Hz, Non-Interlaced (172.00 MHz dotclock) # # Horizontal Vertical # Resolution 1600 1200 # Scan Frequency 82.700 kHz 66.00 Hz # Sync Width 0.791 us 0.036 ms # 17 chars 3 lines # Front Porch 0.233 us 0.036 ms # 5 chars 3 lines # Back Porch 1.767 us 0.567 ms # 38 chars 47 lines # Active Time 9.302 us 14.512 ms # 200 chars 1200 lines # Blank Time 2.791 us 0.532 ms # 60 chars 44 lines # Polarity negative negative # mode "1600x1200-66" # D: 172.00 MHz, H: 82.700 kHz, V: 66.00 Hz geometry 1600 1200 1600 1200 8 timings 5814 304 40 47 3 136 3 endmode # # 1600x1200, 76 Hz, Non-Interlaced (198.00 MHz dotclock) # # Horizontal Vertical # Resolution 1600 1200 # Scan Frequency 95.200 kHz 76.00 Hz # Sync Width 0.687 us 0.052 ms # 17 chars 5 lines # Front Porch 0.202 us 0.032 ms # 5 chars 3 lines # Back Porch 1.535 us 0.441 ms # 38 chars 42 lines # Active Time 8.081 us 12.606 ms # 200 chars 1200 lines # Blank Time 2.424 us 0.525 ms # 60 chars 50 lines # Polarity negative negative # mode "1600x1200-76" # D: 198.00 MHz, H: 95.200 kHz, V: 76.00 Hz geometry 1600 1200 1600 1200 8 timings 5051 304 40 42 3 136 5 endmode fbset-2.1/etc/fb.modes.Falcon100644 1750 1750 10714 6650433343 15531 0ustar kopteinkoptein# # Sample Video Mode Database File (Keith's Falcon version) # # Video Mode Template # # mode "" # geometry # timings # hsync (low|high) # vsync (low|high) # csync (low|high) # extsync (false|true) # bcast (false|true) # laced (false|true) # double (false|true) # endmode # # Geometry and timings are mandatory. # For the other options: the first value is the default. # Pixel clocks (in ps, picoseconds) for the different types of xres. # # xres: 320 640 832 # ----- ----- ----- # Falcon SVGA 79444 39722 31250 # ------------------------------------------------------------- # Falcon video modes that work on my monitor # Note : my monitor is nothing special - a bog standard cheepo SVGA fixed # frequency job, and all these modes are use the internal clock. Those # with multisyncs could possibly add even more modes. # Keith Tomlin (tomlin@zippy.spods.dcs.kcl.ac.uk) # 640x480 2 colours mode "640x480x2" geometry 640 480 640 480 1 timings 39722 42 18 31 11 100 3 endmode # 640x960 2 colours interlaced mode "640x960x2" geometry 640 960 640 960 1 timings 39722 42 18 62 22 100 6 laced true endmode # 640x240 2 colours double line mode "640x240x2" geometry 640 240 640 240 1 timings 39722 42 18 31 11 100 3 double true endmode # 832x480 2 colours mode "832x480x2" geometry 832 480 832 480 1 timings 31250 42 18 31 11 128 3 endmode # 832x960 2 colours interlaced mode "832x960x2" geometry 832 960 832 960 1 timings 31250 42 18 62 22 128 6 laced true endmode # 832x480 256 colours mode "832x480x256" geometry 832 480 0 0 8 timings 31250 42 18 31 11 128 3 endmode # 832x960 256 colours interlace (yes, this really works!) mode "832x960x256" geometry 832 960 0 0 8 timings 31250 42 18 62 22 128 6 laced true endmode # 640x480 4 colours mode "640x480x4" geometry 640 480 640 480 2 timings 39722 50 14 31 11 96 3 endmode # 640x480 16 colours mode "640x480x16" geometry 640 480 640 480 4 timings 39722 42 18 31 11 100 3 endmode # 640x960 16 colours mode "640x960x16" geometry 640 960 640 960 4 timings 39722 42 18 62 22 100 6 laced true endmode # 640x240 16 colours mode "640x240x16" geometry 640 240 640 240 4 timings 39722 42 18 31 11 100 3 double true endmode # 832x480 16 colours mode "832x480x16" geometry 832 480 832 480 4 timings 31250 42 18 31 11 128 3 endmode # 832x960 16 colours mode "832x960x16" geometry 832 960 832 960 4 timings 31250 42 18 62 22 128 6 laced true endmode # 832x240 16 colours mode "832x240x16" geometry 832 240 832 240 4 timings 31250 42 18 31 11 128 3 double true endmode # 640x480 256 colours mode "640x480x256" geometry 640 480 640 480 8 timings 39722 42 18 31 11 100 3 endmode # 640x240 256 colours mode "640x240x256" geometry 640 240 640 240 8 timings 39722 42 18 31 11 100 3 double true endmode # vga resolutions mode "vga2" geometry 640 480 640 480 1 timings 39722 42 18 31 11 100 3 endmode mode "vga4" geometry 640 480 640 480 2 timings 39722 50 14 31 11 96 3 endmode mode "vga16" geometry 640 480 640 480 4 timings 39722 42 18 31 11 100 3 endmode mode "vga256" geometry 640 480 640 480 8 timings 39722 42 18 31 11 100 3 endmode # TT resolutions mode "ttmid" geometry 640 480 640 480 4 timings 39722 42 18 31 11 100 3 endmode mode "ttlow" geometry 320 480 320 480 8 timings 39722 31 9 31 11 50 3 endmode # ST resolutions mode "sthigh" geometry 640 400 640 400 1 timings 39722 42 18 31 11 100 3 endmode mode "stmid" geometry 640 200 640 200 2 timings 39722 50 14 31 11 96 3 double true endmode mode "stlow" geometry 320 200 320 200 4 timings 79444 21 9 31 11 50 3 double true endmode fbset-2.1/etc/fb.modes.NTSC100644 1750 1750 11162 6650433343 15074 0ustar kopteinkoptein# # Sample Video Mode Database File (NTSC version) # # Video Mode Template # # mode "" # geometry # timings # hsync (low|high) # vsync (low|high) # csync (low|high) # extsync (false|true) # bcast (false|true) # laced (false|true) # double (false|true) # double (false|true) # endmode # # Geometry and timings are mandatory. # For the other options: the first value is the default. # Pixel clocks (in ps, picoseconds) for the different types of machines # # LORES HIRES SHRES # ----- ----- ----- # PAL: 140968 70484 35242 # NTSC: 139682 69841 34920 # # Although, you best use the smallest values, since they will be rounded # _up_ to the next possible value by the frame buffer device. # Standard AmigaOS video modes mode "ntsc" # H: 15 kHz, V: 59 Hz geometry 640 200 640 200 4 timings 69841 106 86 44 16 76 2 bcast true endmode mode "ntsc-lace" # H: 15 kHz, V: 59 Hz geometry 640 400 640 400 4 timings 69841 106 86 88 33 76 4 bcast true laced true endmode mode "pal" # H: 15 kHz, V: 50 Hz geometry 640 256 640 256 4 timings 69841 106 86 40 14 76 2 bcast true endmode mode "pal-lace" # H: 15 kHz, V: 50 Hz geometry 640 512 640 512 4 timings 69841 106 86 80 29 76 4 bcast true laced true endmode mode "multiscan" # H: 30 kHz, V: 58 Hz geometry 640 480 640 480 4 timings 34920 96 112 29 8 72 8 endmode mode "multiscan-lace" # H: 30 kHz, V: 58 Hz geometry 640 960 640 960 4 timings 34920 96 112 58 16 72 16 laced true endmode mode "euro36" # H: 15 kHz, V: 72 Hz geometry 640 200 640 200 4 timings 69841 92 124 6 6 52 5 endmode mode "euro36-lace" # H: 15 kHz, V: 72 Hz geometry 640 400 640 400 4 timings 69841 92 124 12 12 52 10 laced true endmode mode "euro72" # H: 29 kHz, V: 68 Hz geometry 640 400 640 400 4 timings 34920 164 92 9 9 80 8 endmode mode "euro72-lace" # H: 29 kHz, V: 68 Hz geometry 640 800 640 800 4 timings 34920 164 92 18 18 80 16 laced true endmode mode "super72" # H: 23 kHz, V: 70 Hz geometry 800 300 800 300 4 timings 34920 212 140 10 11 80 7 endmode mode "super72-lace" # H: 23 kHz, V: 70 Hz geometry 800 600 800 600 4 timings 34920 212 140 20 22 80 14 laced true endmode mode "dblntsc" # H: 27 kHz, V: 57 Hz geometry 640 200 640 200 4 timings 34920 196 124 18 17 80 4 double true endmode mode "dblntsc-ff" # H: 27 kHz, V: 57 Hz geometry 640 400 640 400 4 timings 34920 196 124 36 35 80 7 endmode mode "dblntsc-lace" # H: 27 kHz, V: 57 Hz geometry 640 800 640 800 4 timings 34920 196 124 72 70 80 14 laced true endmode mode "dblpal" # H: 27 kHz, V: 47 Hz geometry 640 256 640 256 4 timings 34920 196 124 14 13 80 4 double true endmode mode "dblpal-ff" # H: 27 kHz, V: 47 Hz geometry 640 512 640 512 4 timings 34920 196 124 28 27 80 7 endmode mode "dblpal-lace" # H: 27 kHz, V: 47 Hz geometry 640 1024 640 1024 4 timings 34920 196 124 56 54 80 14 laced true endmode # Standard VGA video modes mode "vga" # H: 31 kHz, V: 59 Hz geometry 640 480 640 480 4 timings 34920 64 96 30 9 112 2 endmode mode "vga70" # H: 31 kHz, V: 69 Hz geometry 640 400 640 400 4 timings 34920 64 96 35 12 112 2 vsync high csync high endmode # Custom video modes mode "640x480" # H: 33.78 kHz, V: 67.56 Hz geometry 640 480 640 480 4 timings 34920 24 64 17 1 112 2 endmode mode "704x528" # H: 31.39 kHz, V: 57.28 Hz geometry 704 528 704 528 4 timings 34920 16 72 17 1 112 2 endmode mode "768x576" # H: 27.50 kHz, V: 89.85 Hz geometry 768 576 768 576 4 timings 34920 36 148 30 4 80 2 laced true hsync high vsync high endmode mode "832x624" # H: 27.71 kHz, V: 83.97 Hz geometry 832 624 832 624 4 timings 34920 4 108 30 4 80 2 laced true vsync high hsync high endmode mode "896x672" # H: 26.08 kHz, V: 73.67 Hz geometry 896 672 896 672 4 timings 34920 4 124 30 4 64 2 laced true vsync high endmode mode "960x720" # H: 24.63 kHz, V: 65.33 Hz geometry 960 720 960 720 4 timings 34920 4 148 30 2 40 2 laced true endmode mode "1024x768" # H: 23.33 kHz, V: 58.05 Hz geometry 1024 768 1024 768 4 timings 34920 4 172 30 4 16 2 laced true endmode fbset-2.1/etc/fb.modes.PAL100644 1750 1750 11421 6650433343 14737 0ustar kopteinkoptein# # Sample Video Mode Database File (PAL version) # # Video Mode Template # # mode "" # geometry # timings # hsync (low|high) # vsync (low|high) # csync (low|high) # extsync (false|true) # bcast (false|true) # laced (false|true) # double (false|true) # double (false|true) # endmode # # Geometry and timings are mandatory. # For the other options: the first value is the default. # Pixel clocks (in ps, picoseconds) for the different types of machines # # LORES HIRES SHRES # ----- ----- ----- # PAL: 140968 70484 35242 # NTSC: 139682 69841 34920 # # Although, you best use the smallest values, since they will be rounded # _up_ to the next possible value by the frame buffer device. # Standard AmigaOS video modes mode "ntsc" # H: 15.625 kHz, V: 59.638 Hz geometry 640 200 640 200 4 timings 70484 106 86 44 16 76 2 bcast true endmode mode "ntsc-lace" # H: 15.625 kHz, V: 59.524 Hz geometry 640 400 640 400 4 timings 70484 106 86 88 33 76 4 bcast true laced true endmode mode "pal" # H: 15.625 kHz, V: 50.081 Hz geometry 640 256 640 256 4 timings 70484 106 86 40 14 76 2 bcast true endmode mode "pal-lace" # H: 15.625 kHz, V: 50.000 Hz geometry 640 512 640 512 4 timings 70484 106 86 80 29 76 4 bcast true laced true endmode mode "multiscan" # H: 30.843 kHz, V: 58.748 Hz geometry 640 480 640 480 4 timings 35242 96 112 29 8 72 8 endmode mode "multiscan-lace" # H: 30.843 kHz, V: 58.748 Hz geometry 640 960 640 960 4 timings 35242 96 112 58 16 72 16 laced true endmode mode "euro36" # H: 15.625 kHz, V: 72.005 Hz geometry 640 200 640 200 4 timings 70484 92 124 6 6 52 5 endmode mode "euro36-lace" # H: 15.625 kHz, V: 72.005 Hz geometry 640 400 640 400 4 timings 70484 92 124 12 12 52 10 laced true endmode mode "euro72" # H: 29.073 kHz, V: 68.246 Hz geometry 640 400 640 400 4 timings 35242 164 92 9 9 80 8 endmode mode "euro72-lace" # H: 29.073 kHz, V: 68.246 Hz geometry 640 800 640 800 4 timings 35242 164 92 18 18 80 16 laced true endmode mode "super72" # H: 23.032 kHz, V: 70.219 Hz geometry 800 300 800 300 4 timings 35242 212 140 10 11 80 7 endmode mode "super72-lace" # H: 23.032 kHz, V: 70.219 Hz geometry 800 600 800 600 4 timings 35242 212 140 20 22 80 14 laced true endmode mode "dblntsc" # H: 27.284 kHz, V: 57.079 Hz geometry 640 200 640 200 4 timings 35242 196 124 18 17 80 4 double true endmode mode "dblntsc-ff" # H: 27.284 kHz, V: 57.079 Hz geometry 640 400 640 400 4 timings 35242 196 124 36 35 80 7 endmode mode "dblntsc-lace" # H: 27.284 kHz, V: 57.079 Hz geometry 640 800 640 800 4 timings 35242 196 124 72 70 80 14 laced true endmode mode "dblpal" # H: 27.284 kHz, V: 47.533 Hz geometry 640 256 640 256 4 timings 35242 196 124 14 13 80 4 double true endmode mode "dblpal-ff" # H: 27.284 kHz, V: 47.533 Hz geometry 640 512 640 512 4 timings 35242 196 124 28 27 80 7 endmode mode "dblpal-lace" # H: 27.284 kHz, V: 47.533 Hz geometry 640 1024 640 1024 4 timings 35242 196 124 56 54 80 14 laced true endmode # Standard VGA video modes mode "vga" # H: 31.113 kHz, V: 59.718 Hz geometry 640 480 640 480 4 timings 35242 64 96 30 9 112 2 endmode mode "vga70" # H: 31.113 kHz, V: 69.294 Hz geometry 640 400 640 400 4 timings 35242 64 96 35 12 112 2 vsync high csync high endmode # Custom video modes mode "640x480" # H: 33.78 kHz, V: 67.56 Hz geometry 640 480 640 480 4 timings 35242 24 64 17 1 112 2 endmode mode "704x528" # H: 31.39 kHz, V: 57.28 Hz geometry 704 528 704 528 4 timings 35242 16 72 17 1 112 2 endmode mode "768x576" # H: 27.50 kHz, V: 89.85 Hz geometry 768 576 768 576 4 timings 35242 36 148 30 4 80 2 laced true hsync high vsync high endmode mode "832x624" # H: 27.71 kHz, V: 83.97 Hz geometry 832 624 832 624 4 timings 35242 4 108 30 4 80 2 laced true vsync high hsync high endmode mode "896x672" # H: 26.08 kHz, V: 73.67 Hz geometry 896 672 896 672 4 timings 35242 4 124 30 4 64 2 laced true vsync high endmode mode "960x720" # H: 24.63 kHz, V: 65.33 Hz geometry 960 720 960 720 4 timings 35242 4 148 30 2 40 2 laced true endmode mode "1024x768" # H: 23.33 kHz, V: 58.05 Hz geometry 1024 768 1024 768 4 timings 35242 4 172 30 4 16 2 laced true endmode fbset-2.1/GetVideoMode.c100644 1750 1750 14776 6650433342 14627 0ustar kopteinkoptein /* * Under AmigaOS: gcc -noixemul GetVideoMode.c -o GetVideoMode * * Usage: * * GetVideoMode * GetVideoMode NONAMEOK * GetVideoMode ... */ #include #include #include #include #include #include #include #define LOW 0 #define HIGH 1 struct VideoMode { STRPTR name; struct { ULONG xres; ULONG yres; ULONG vxres; ULONG vyres; ULONG depth; } geometry; struct { ULONG pixclock; ULONG left; ULONG right; ULONG upper; ULONG lower; ULONG hslen; ULONG vslen; } timings; struct { ULONG hsync : 1; ULONG vsync : 1; ULONG csync : 1; ULONG gsync : 1; ULONG extsync : 1; ULONG bcast : 1; ULONG laced : 1; ULONG dblscan : 1; } options; }; struct DisplayInfo DisplayInfo; struct DimensionInfo DimensionInfo; struct MonitorInfo MonitorInfo; struct NameInfo NameInfo; struct VideoMode VideoMode; void GetVideoMode(ULONG id, BOOL nonameok) { ULONG colorclock_to_dotclock; ULONG diwstrt_h, diwstop_h, diwstrt_v, diwstop_v; ULONG hsstrt, hsstop, htotal, vsstrt, vsstop, vtotal; if (!GetDisplayInfoData(NULL, (UBYTE *)&DisplayInfo, sizeof(DisplayInfo), DTAG_DISP, id) || !GetDisplayInfoData(NULL, (UBYTE *)&DimensionInfo, sizeof(DimensionInfo), DTAG_DIMS, id) || !GetDisplayInfoData(NULL, (UBYTE *)&MonitorInfo, sizeof(MonitorInfo), DTAG_MNTR, id)) return; if (GetDisplayInfoData(NULL, (UBYTE *)&NameInfo, sizeof(NameInfo), DTAG_NAME, id)) VideoMode.name = NameInfo.Name; else if (nonameok) VideoMode.name = NULL; else return; VideoMode.geometry.xres = DimensionInfo.Nominal.MaxX+1; VideoMode.geometry.yres = DimensionInfo.Nominal.MaxY+1; VideoMode.geometry.vxres = VideoMode.geometry.xres; VideoMode.geometry.vyres = VideoMode.geometry.yres; VideoMode.geometry.depth = DimensionInfo.MaxDepth < 2 ? 1 : DimensionInfo.MaxDepth>>1; VideoMode.options.hsync = MonitorInfo.Mspc->BeamCon0 & HSYNCTRUE ? HIGH : LOW; VideoMode.options.vsync = MonitorInfo.Mspc->BeamCon0 & VSYNCTRUE ? HIGH : LOW; VideoMode.options.csync = MonitorInfo.Mspc->BeamCon0 & CSYNCTRUE ? HIGH : LOW; VideoMode.options.gsync = MonitorInfo.Mspc->BeamCon0 & GSYNCTRUE ? TRUE : FALSE; VideoMode.options.extsync = FALSE; VideoMode.options.laced = DisplayInfo.PropertyFlags & DIPF_IS_LACE ? TRUE : FALSE; VideoMode.options.dblscan = DisplayInfo.PropertyFlags & DIPF_IS_SCANDBL ? TRUE : FALSE; VideoMode.timings.pixclock = (double)DisplayInfo.PixelSpeed/35*25E9/ SysBase->ex_EClockFrequency; switch (DisplayInfo.PixelSpeed) { case 35: VideoMode.timings.pixclock = 25E9/SysBase->ex_EClockFrequency; colorclock_to_dotclock = 8; break; case 70: VideoMode.timings.pixclock = 50E9/SysBase->ex_EClockFrequency; colorclock_to_dotclock = 4; break; case 140: VideoMode.timings.pixclock = 100E9/SysBase->ex_EClockFrequency; colorclock_to_dotclock = 2; break; default: printf("Unexpected pixel clock of %d ns\n", DisplayInfo.PixelSpeed); return; } diwstrt_h = MonitorInfo.DefaultViewPosition.x*colorclock_to_dotclock>>1; diwstrt_v = MonitorInfo.DefaultViewPosition.y; hsstrt = MonitorInfo.Mspc->ms_Special->hsync.asi_Start*colorclock_to_dotclock; hsstop = MonitorInfo.Mspc->ms_Special->hsync.asi_Stop*colorclock_to_dotclock; htotal = (MonitorInfo.TotalColorClocks+1)*colorclock_to_dotclock; vsstrt = MonitorInfo.Mspc->ms_Special->vsync.asi_Start/MonitorInfo.TotalColorClocks; vsstop = MonitorInfo.Mspc->ms_Special->vsync.asi_Stop/MonitorInfo.TotalColorClocks; vtotal = MonitorInfo.TotalRows+1; if (VideoMode.options.laced) { diwstrt_v <<= 1; vsstrt <<= 1; vsstop <<= 1; vtotal <<= 1; } if (VideoMode.options.dblscan) { diwstrt_v >>= 1; vsstrt >>= 1; vsstop >>= 1; vtotal >>= 1; } diwstop_h = diwstrt_h+VideoMode.geometry.xres; diwstop_v = diwstrt_v+VideoMode.geometry.yres; if (MonitorInfo.Mspc->ms_Flags & MSF_REQUEST_SPECIAL) { VideoMode.timings.left = diwstrt_h-hsstop; VideoMode.timings.right = htotal+hsstrt-diwstop_h; VideoMode.timings.upper = diwstrt_v-vsstop; VideoMode.timings.lower = vtotal+vsstrt-diwstop_v; VideoMode.timings.hslen = hsstop-hsstrt; VideoMode.timings.vslen = vsstop-vsstrt; VideoMode.options.bcast = FALSE; } else { /* * Not yet implemented */ VideoMode.timings.left = 0; VideoMode.timings.right = 0; VideoMode.timings.upper = 0; VideoMode.timings.lower = 0; VideoMode.timings.hslen = 0; VideoMode.timings.vslen = 0; VideoMode.options.bcast = TRUE; } if (VideoMode.name) printf("mode \"%.32s\"\n", VideoMode.name); else printf("mode \"0x%08x\"\n", id); printf("\tgeometry %d %d %d %d %d\n", VideoMode.geometry.xres, VideoMode.geometry.yres, VideoMode.geometry.vxres, VideoMode.geometry.vyres, VideoMode.geometry.depth); printf("\ttimings %d %d %d %d %d %d %d\n", VideoMode.timings.pixclock, VideoMode.timings.left, VideoMode.timings.right, VideoMode.timings.upper, VideoMode.timings.lower, VideoMode.timings.hslen, VideoMode.timings.vslen); if (VideoMode.options.hsync) puts("\thsync high"); if (VideoMode.options.vsync) puts("\tvsync high"); if (VideoMode.options.csync) puts("\tcsync high"); if (VideoMode.options.extsync) puts("\textsync true"); if (VideoMode.options.bcast) puts("\tbcast true"); if (VideoMode.options.laced) puts("\tlaced true"); if (VideoMode.options.dblscan) puts("\tdouble true"); puts("endmode\n"); } int main(void) { struct RDArgs *rdargs; LONG args[] = { NULL, NULL }; STRPTR *ids; ULONG id; if (!(rdargs = ReadArgs("ID/M,NONAMEOK/S", args, NULL))) PrintFault(IoErr(), NULL); else if (ids = (STRPTR *)args[0]) do { sscanf(*ids++, "%x", &id); GetVideoMode(id, 1); } while (*ids); else for (id = INVALID_ID; (id = NextDisplayInfo(id)) != INVALID_ID;) GetVideoMode(id, args[1]); return 0; } fbset-2.1/INSTALL100644 1750 1750 654 6650433342 13127 0ustar kopteinkoptein FBSET INSTALLATION GUIDE Change the current directory to the directory containing the fbset sources and type make install This will create the fbset binary and install it, together with the manual pages. It also creates the standard frame buffer special device nodes. The etc subdirectory contains sample frame buffer mode definitions files. Copy one of them to /etc/fb.modes and edit it to your needs. Enjoy! fbset-2.1/Makefile100644 1750 1750 2027 6650433342 13552 0ustar kopteinkoptein# # Linux Frame Buffer Device Configuration # CC = gcc -Wall -O2 -I. BISON = bison -d FLEX = flex INSTALL = install RM = rm -f All: fbset fbset: fbset.o modes.tab.o lex.yy.o fbset.o: fbset.c fbset.h fb.h modes.tab.o: modes.tab.c fbset.h fb.h lex.yy.o: lex.yy.c fbset.h modes.tab.h lex.yy.c: modes.l $(FLEX) modes.l modes.tab.c: modes.y $(BISON) modes.y install: fbset if [ -f /sbin/fbset ]; then rm /sbin/fbset; fi $(INSTALL) fbset /usr/sbin $(INSTALL) fbset.8 /usr/man/man8 $(INSTALL) fb.modes.5 /usr/man/man5 if [ ! -c /dev/fb0 ]; then mknod /dev/fb0 c 29 0; fi if [ ! -c /dev/fb1 ]; then mknod /dev/fb1 c 29 32; fi if [ ! -c /dev/fb2 ]; then mknod /dev/fb2 c 29 64; fi if [ ! -c /dev/fb3 ]; then mknod /dev/fb3 c 29 96; fi if [ ! -c /dev/fb4 ]; then mknod /dev/fb4 c 29 128; fi if [ ! -c /dev/fb5 ]; then mknod /dev/fb5 c 29 160; fi if [ ! -c /dev/fb6 ]; then mknod /dev/fb6 c 29 192; fi if [ ! -c /dev/fb7 ]; then mknod /dev/fb7 c 29 224; fi clean: $(RM) *.o fbset lex.yy.c modes.tab.c modes.tab.h fbset-2.1/fb.h100644 1750 1750 43162 6734165254 12706 0ustar kopteinkoptein#ifndef _LINUX_FB_H #define _LINUX_FB_H #include /* Definitions of frame buffers */ #define FB_MAJOR 29 #define FB_MODES_SHIFT 5 /* 32 modes per framebuffer */ #define FB_NUM_MINORS 256 /* 256 Minors */ #define FB_MAX (FB_NUM_MINORS / (1 << FB_MODES_SHIFT)) #define GET_FB_IDX(node) (MINOR(node) >> FB_MODES_SHIFT) /* ioctls 0x46 is 'F' */ #define FBIOGET_VSCREENINFO 0x4600 #define FBIOPUT_VSCREENINFO 0x4601 #define FBIOGET_FSCREENINFO 0x4602 #define FBIOGETCMAP 0x4604 #define FBIOPUTCMAP 0x4605 #define FBIOPAN_DISPLAY 0x4606 /* 0x4607-0x460B are defined below */ /* #define FBIOGET_MONITORSPEC 0x460C */ /* #define FBIOPUT_MONITORSPEC 0x460D */ /* #define FBIOSWITCH_MONIBIT 0x460E */ #define FBIOGET_CON2FBMAP 0x460F #define FBIOPUT_CON2FBMAP 0x4610 #define FB_TYPE_PACKED_PIXELS 0 /* Packed Pixels */ #define FB_TYPE_PLANES 1 /* Non interleaved planes */ #define FB_TYPE_INTERLEAVED_PLANES 2 /* Interleaved planes */ #define FB_TYPE_TEXT 3 /* Text/attributes */ #define FB_TYPE_VGA_PLANES 4 /* EGA/VGA planes */ #define FB_AUX_TEXT_MDA 0 /* Monochrome text */ #define FB_AUX_TEXT_CGA 1 /* CGA/EGA/VGA Color text */ #define FB_AUX_TEXT_S3_MMIO 2 /* S3 MMIO fasttext */ #define FB_AUX_TEXT_MGA_STEP16 3 /* MGA Millenium I: text, attr, 14 reserved bytes */ #define FB_AUX_TEXT_MGA_STEP8 4 /* other MGAs: text, attr, 6 reserved bytes */ #define FB_AUX_VGA_PLANES_VGA4 0 /* 16 color planes (EGA/VGA) */ #define FB_AUX_VGA_PLANES_CFB4 1 /* CFB4 in planes (VGA) */ #define FB_AUX_VGA_PLANES_CFB8 2 /* CFB8 in planes (VGA) */ #define FB_VISUAL_MONO01 0 /* Monochr. 1=Black 0=White */ #define FB_VISUAL_MONO10 1 /* Monochr. 1=White 0=Black */ #define FB_VISUAL_TRUECOLOR 2 /* True color */ #define FB_VISUAL_PSEUDOCOLOR 3 /* Pseudo color (like atari) */ #define FB_VISUAL_DIRECTCOLOR 4 /* Direct color */ #define FB_VISUAL_STATIC_PSEUDOCOLOR 5 /* Pseudo color readonly */ #define FB_ACCEL_NONE 0 /* no hardware accelerator */ #define FB_ACCEL_ATARIBLITT 1 /* Atari Blitter */ #define FB_ACCEL_AMIGABLITT 2 /* Amiga Blitter */ #define FB_ACCEL_S3_TRIO64 3 /* Cybervision64 (S3 Trio64) */ #define FB_ACCEL_NCR_77C32BLT 4 /* RetinaZ3 (NCR 77C32BLT) */ #define FB_ACCEL_S3_VIRGE 5 /* Cybervision64/3D (S3 ViRGE) */ #define FB_ACCEL_ATI_MACH64GX 6 /* ATI Mach 64GX family */ #define FB_ACCEL_DEC_TGA 7 /* DEC 21030 TGA */ #define FB_ACCEL_ATI_MACH64CT 8 /* ATI Mach 64CT family */ #define FB_ACCEL_ATI_MACH64VT 9 /* ATI Mach 64CT family VT class */ #define FB_ACCEL_ATI_MACH64GT 10 /* ATI Mach 64CT family GT class */ #define FB_ACCEL_SUN_CREATOR 11 /* Sun Creator/Creator3D */ #define FB_ACCEL_SUN_CGSIX 12 /* Sun cg6 */ #define FB_ACCEL_SUN_LEO 13 /* Sun leo/zx */ #define FB_ACCEL_IMS_TWINTURBO 14 /* IMS Twin Turbo */ #define FB_ACCEL_3DLABS_PERMEDIA2 15 /* 3Dlabs Permedia 2 */ #define FB_ACCEL_MATROX_MGA2064W 16 /* Matrox MGA2064W (Millenium) */ #define FB_ACCEL_MATROX_MGA1064SG 17 /* Matrox MGA1064SG (Mystique) */ #define FB_ACCEL_MATROX_MGA2164W 18 /* Matrox MGA2164W (Millenium II) */ #define FB_ACCEL_MATROX_MGA2164W_AGP 19 /* Matrox MGA2164W (Millenium II) */ #define FB_ACCEL_MATROX_MGAG100 20 /* Matrox G100 (Productiva G100) */ #define FB_ACCEL_MATROX_MGAG200 21 /* Matrox G200 (Myst, Mill, ...) */ #define FB_ACCEL_SUN_CG14 22 /* Sun cgfourteen */ #define FB_ACCEL_SUN_BWTWO 23 /* Sun bwtwo */ #define FB_ACCEL_SUN_CGTHREE 24 /* Sun cgthree */ #define FB_ACCEL_SUN_TCX 25 /* Sun tcx */ #define FB_ACCEL_MATROX_MGAG400 26 /* Matrox G400 */ struct fb_fix_screeninfo { char id[16]; /* identification string eg "TT Builtin" */ char *smem_start; /* Start of frame buffer mem */ /* (physical address) */ __u32 smem_len; /* Length of frame buffer mem */ __u32 type; /* see FB_TYPE_* */ __u32 type_aux; /* Interleave for interleaved Planes */ __u32 visual; /* see FB_VISUAL_* */ __u16 xpanstep; /* zero if no hardware panning */ __u16 ypanstep; /* zero if no hardware panning */ __u16 ywrapstep; /* zero if no hardware ywrap */ __u32 line_length; /* length of a line in bytes */ char *mmio_start; /* Start of Memory Mapped I/O */ /* (physical address) */ __u32 mmio_len; /* Length of Memory Mapped I/O */ __u32 accel; /* Type of acceleration available */ __u16 reserved[3]; /* Reserved for future compatibility */ }; /* Interpretation of offset for color fields: All offsets are from the right, * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you * can use the offset as right argument to <<). A pixel afterwards is a bit * stream and is written to video memory as that unmodified. This implies * big-endian byte order if bits_per_pixel is greater than 8. */ struct fb_bitfield { __u32 offset; /* beginning of bitfield */ __u32 length; /* length of bitfield */ __u32 msb_right; /* != 0 : Most significant bit is */ /* right */ }; #define FB_NONSTD_HAM 1 /* Hold-And-Modify (HAM) */ #define FB_ACTIVATE_NOW 0 /* set values immediately (or vbl)*/ #define FB_ACTIVATE_NXTOPEN 1 /* activate on next open */ #define FB_ACTIVATE_TEST 2 /* don't set, round up impossible */ #define FB_ACTIVATE_MASK 15 /* values */ #define FB_ACTIVATE_VBL 16 /* activate values on next vbl */ #define FB_CHANGE_CMAP_VBL 32 /* change colormap on vbl */ #define FB_ACTIVATE_ALL 64 /* change all VCs on this fb */ #define FB_ACCELF_TEXT 1 /* text mode acceleration */ #define FB_SYNC_HOR_HIGH_ACT 1 /* horizontal sync high active */ #define FB_SYNC_VERT_HIGH_ACT 2 /* vertical sync high active */ #define FB_SYNC_EXT 4 /* external sync */ #define FB_SYNC_COMP_HIGH_ACT 8 /* composite sync high active */ #define FB_SYNC_BROADCAST 16 /* broadcast video timings */ /* vtotal = 144d/288n/576i => PAL */ /* vtotal = 121d/242n/484i => NTSC */ #define FB_SYNC_ON_GREEN 32 /* sync on green */ #define FB_VMODE_NONINTERLACED 0 /* non interlaced */ #define FB_VMODE_INTERLACED 1 /* interlaced */ #define FB_VMODE_DOUBLE 2 /* double scan */ #define FB_VMODE_MASK 255 #define FB_VMODE_YWRAP 256 /* ywrap instead of panning */ #define FB_VMODE_SMOOTH_XPAN 512 /* smooth xpan possible (internally used) */ #define FB_VMODE_CONUPDATE 512 /* don't update x/yoffset */ struct fb_var_screeninfo { __u32 xres; /* visible resolution */ __u32 yres; __u32 xres_virtual; /* virtual resolution */ __u32 yres_virtual; __u32 xoffset; /* offset from virtual to visible */ __u32 yoffset; /* resolution */ __u32 bits_per_pixel; /* guess what */ __u32 grayscale; /* != 0 Graylevels instead of colors */ struct fb_bitfield red; /* bitfield in fb mem if true color, */ struct fb_bitfield green; /* else only length is significant */ struct fb_bitfield blue; struct fb_bitfield transp; /* transparency */ __u32 nonstd; /* != 0 Non standard pixel format */ __u32 activate; /* see FB_ACTIVATE_* */ __u32 height; /* height of picture in mm */ __u32 width; /* width of picture in mm */ __u32 accel_flags; /* acceleration flags (hints) */ /* Timing: All values in pixclocks, except pixclock (of course) */ __u32 pixclock; /* pixel clock in ps (pico seconds) */ __u32 left_margin; /* time from sync to picture */ __u32 right_margin; /* time from picture to sync */ __u32 upper_margin; /* time from sync to picture */ __u32 lower_margin; __u32 hsync_len; /* length of horizontal sync */ __u32 vsync_len; /* length of vertical sync */ __u32 sync; /* see FB_SYNC_* */ __u32 vmode; /* see FB_VMODE_* */ __u32 reserved[6]; /* Reserved for future compatibility */ }; struct fb_cmap { __u32 start; /* First entry */ __u32 len; /* Number of entries */ __u16 *red; /* Red values */ __u16 *green; __u16 *blue; __u16 *transp; /* transparency, can be NULL */ }; struct fb_con2fbmap { __u32 console; __u32 framebuffer; }; struct fb_monspecs { __u32 hfmin; /* hfreq lower limit (Hz) */ __u32 hfmax; /* hfreq upper limit (Hz) */ __u16 vfmin; /* vfreq lower limit (Hz) */ __u16 vfmax; /* vfreq upper limit (Hz) */ unsigned dpms : 1; /* supports DPMS */ }; #ifdef __KERNEL__ #include struct fb_info; struct fb_info_gen; struct vm_area_struct; struct file; /* * Frame buffer operations */ struct fb_ops { /* open/release and usage marking */ int (*fb_open)(struct fb_info *info, int user); int (*fb_release)(struct fb_info *info, int user); /* get non settable parameters */ int (*fb_get_fix)(struct fb_fix_screeninfo *fix, int con, struct fb_info *info); /* get settable parameters */ int (*fb_get_var)(struct fb_var_screeninfo *var, int con, struct fb_info *info); /* set settable parameters */ int (*fb_set_var)(struct fb_var_screeninfo *var, int con, struct fb_info *info); /* get colormap */ int (*fb_get_cmap)(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info); /* set colormap */ int (*fb_set_cmap)(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info); /* pan display */ int (*fb_pan_display)(struct fb_var_screeninfo *var, int con, struct fb_info *info); /* perform fb specific ioctl */ int (*fb_ioctl)(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg, int con, struct fb_info *info); /* perform fb specific mmap */ int (*fb_mmap)(struct fb_info *info, struct file *file, struct vm_area_struct *vma); /* switch to/from raster image mode */ int (*fb_rasterimg)(struct fb_info *info, int start); }; /* * This is the interface between the low-level console driver and the * low-level frame buffer device */ struct display { /* Filled in by the frame buffer device */ struct fb_var_screeninfo var; /* variable infos. yoffset and vmode */ /* are updated by fbcon.c */ struct fb_cmap cmap; /* colormap */ char *screen_base; /* pointer to top of virtual screen */ /* (virtual address) */ int visual; int type; /* see FB_TYPE_* */ int type_aux; /* Interleave for interleaved Planes */ u_short ypanstep; /* zero if no hardware ypan */ u_short ywrapstep; /* zero if no hardware ywrap */ u_long line_length; /* length of a line in bytes */ u_short can_soft_blank; /* zero if no hardware blanking */ u_short inverse; /* != 0 text black on white as default */ struct display_switch *dispsw; /* low level operations */ void *dispsw_data; /* optional dispsw helper data */ #if 0 struct fb_fix_cursorinfo fcrsr; struct fb_var_cursorinfo *vcrsr; struct fb_cursorstate crsrstate; #endif /* Filled in by the low-level console driver */ struct vc_data *conp; /* pointer to console data */ struct fb_info *fb_info; /* frame buffer for this console */ int vrows; /* number of virtual rows */ unsigned short cursor_x; /* current cursor position */ unsigned short cursor_y; int fgcol; /* text colors */ int bgcol; u_long next_line; /* offset to one line below */ u_long next_plane; /* offset to next plane */ u_char *fontdata; /* Font associated to this display */ unsigned short _fontheightlog; unsigned short _fontwidthlog; unsigned short _fontheight; unsigned short _fontwidth; int userfont; /* != 0 if fontdata kmalloc()ed */ u_short scrollmode; /* Scroll Method */ short yscroll; /* Hardware scrolling */ unsigned char fgshift, bgshift; unsigned short charmask; /* 0xff or 0x1ff */ }; struct fb_info { char modename[40]; /* default video mode */ kdev_t node; int flags; #define FBINFO_FLAG_MODULE 1 /* Low-level driver is a module */ struct fb_ops *fbops; struct fb_monspecs monspecs; struct display *disp; /* initial display variable */ struct vc_data *display_fg; /* Console visible on this display */ char fontname[40]; /* default font name */ int (*changevar)(int); /* tell console var has changed */ int (*switch_con)(int, struct fb_info*); /* tell fb to switch consoles */ int (*updatevar)(int, struct fb_info*); /* tell fb to update the vars */ void (*blank)(int, struct fb_info*); /* tell fb to (un)blank the screen */ /* arg = 0: unblank */ /* arg > 0: VESA level (arg-1) */ /* From here on everything is device dependent */ }; #ifdef MODULE #define FBINFO_FLAG_DEFAULT FBINFO_FLAG_MODULE #else #define FBINFO_FLAG_DEFAULT 0 #endif /* * This structure abstracts from the underlying hardware. It is not * mandatory but used by the `generic' frame buffer operations. * Read drivers/video/skeletonfb.c for more information. */ struct fbgen_hwswitch { void (*detect)(void); int (*encode_fix)(struct fb_fix_screeninfo *fix, const void *par, struct fb_info_gen *info); int (*decode_var)(const struct fb_var_screeninfo *var, void *par, struct fb_info_gen *info); int (*encode_var)(struct fb_var_screeninfo *var, const void *par, struct fb_info_gen *info); void (*get_par)(void *par, struct fb_info_gen *info); void (*set_par)(const void *par, struct fb_info_gen *info); int (*getcolreg)(unsigned regno, unsigned *red, unsigned *green, unsigned *blue, unsigned *transp, struct fb_info *info); int (*setcolreg)(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info); int (*pan_display)(const struct fb_var_screeninfo *var, struct fb_info_gen *info); int (*blank)(int blank_mode, struct fb_info_gen *info); void (*set_disp)(const void *par, struct display *disp, struct fb_info_gen *info); }; struct fb_info_gen { struct fb_info info; /* Entries for a generic frame buffer device */ /* Yes, this starts looking like C++ */ u_int parsize; struct fbgen_hwswitch *fbhw; /* From here on everything is device dependent */ }; /* * `Generic' versions of the frame buffer device operations */ extern int fbgen_get_fix(struct fb_fix_screeninfo *fix, int con, struct fb_info *info); extern int fbgen_get_var(struct fb_var_screeninfo *var, int con, struct fb_info *info); extern int fbgen_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info); extern int fbgen_get_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info); extern int fbgen_set_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info); extern int fbgen_pan_display(struct fb_var_screeninfo *var, int con, struct fb_info *info); extern int fbgen_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg, int con, struct fb_info *info); /* * Helper functions */ extern int fbgen_do_set_var(struct fb_var_screeninfo *var, int isactive, struct fb_info_gen *info); extern void fbgen_set_disp(int con, struct fb_info_gen *info); extern void fbgen_install_cmap(int con, struct fb_info_gen *info); extern int fbgen_update_var(int con, struct fb_info *info); extern int fbgen_switch(int con, struct fb_info *info); extern void fbgen_blank(int blank, struct fb_info *info); struct fb_videomode { const char *name; struct fb_var_screeninfo var; }; /* drivers/char/fbmem.c */ extern int register_framebuffer(struct fb_info *fb_info); extern int unregister_framebuffer(const struct fb_info *fb_info); extern int fbmon_valid_timings(u_int pixclock, u_int htotal, u_int vtotal, const struct fb_info *fb_info); extern int fbmon_dpms(const struct fb_info *fb_info); extern int num_registered_fb; extern struct fb_info *registered_fb[FB_MAX]; extern char con2fb_map[MAX_NR_CONSOLES]; /* drivers/video/fbcon.c */ extern struct display fb_display[MAX_NR_CONSOLES]; /* drivers/video/fbcmap.c */ extern int fb_alloc_cmap(struct fb_cmap *cmap, int len, int transp); extern void fb_copy_cmap(struct fb_cmap *from, struct fb_cmap *to, int fsfromto); extern int fb_get_cmap(struct fb_cmap *cmap, int kspc, int (*getcolreg)(u_int, u_int *, u_int *, u_int *, u_int *, struct fb_info *), struct fb_info *fb_info); extern int fb_set_cmap(struct fb_cmap *cmap, int kspc, int (*setcolreg)(u_int, u_int, u_int, u_int, u_int, struct fb_info *), struct fb_info *fb_info); extern struct fb_cmap *fb_default_cmap(int len); extern void fb_invert_cmaps(void); /* VESA Blanking Levels */ #define VESA_NO_BLANKING 0 #define VESA_VSYNC_SUSPEND 1 #define VESA_HSYNC_SUSPEND 2 #define VESA_POWERDOWN 3 #endif /* __KERNEL__ */ #if 1 #define FBCMD_GET_CURRENTPAR 0xDEAD0005 #define FBCMD_SET_CURRENTPAR 0xDEAD8005 #endif #if 1 /* Preliminary */ /* * Hardware Cursor */ #define FBIOGET_FCURSORINFO 0x4607 #define FBIOGET_VCURSORINFO 0x4608 #define FBIOPUT_VCURSORINFO 0x4609 #define FBIOGET_CURSORSTATE 0x460A #define FBIOPUT_CURSORSTATE 0x460B struct fb_fix_cursorinfo { __u16 crsr_width; /* width and height of the cursor in */ __u16 crsr_height; /* pixels (zero if no cursor) */ __u16 crsr_xsize; /* cursor size in display pixels */ __u16 crsr_ysize; __u16 crsr_color1; /* colormap entry for cursor color1 */ __u16 crsr_color2; /* colormap entry for cursor color2 */ }; struct fb_var_cursorinfo { __u16 width; __u16 height; __u16 xspot; __u16 yspot; __u8 data[1]; /* field with [height][width] */ }; struct fb_cursorstate { __s16 xoffset; __s16 yoffset; __u16 mode; }; #define FB_CURSOR_OFF 0 #define FB_CURSOR_ON 1 #define FB_CURSOR_FLASH 2 #endif /* Preliminary */ #endif /* _LINUX_FB_H */ fbset-2.1/fb.modes.5100644 1750 1750 12060 6650433343 13714 0ustar kopteinkoptein.TH fb.modes 8 "Aug 1996" local "Linux frame buffer utils" .SH NAME fb.modes \- frame buffer modes file .SH DESCRIPTION .I /etc/fb.modes contains an unlimited number of video mode descriptions. The general format of a video mode is: .sp mode .RI \" name \" .RS geometry .RI < xres > .RI < yres > .RI < vxres > .RI < vyres > .RI < depth > .br timings .RI < pixclock > .RI < left > .RI < right > .RI < upper > .RI < lower > .RI < hslen > .RI < vslen > .br .B options .RI < value > .RE endmode .SH OPTIONS geometry options: .RS .TP .I xres visible horizontal resolution (in pixels) .TP .I yres visible vertical resolution (in pixels) .TP .I vxres virtual horizontal resolution (in pixels) .TP .I vyres virtual vertical resolution (in pixels) .TP .I depth display depth (in bits per pixel) .RE .PP timing options: .RS .TP .I pixclock length of one pixel (in picoseconds) .TP .I left left margin (in pixels) .TP .I right right margin (in pixels) .TP .I upper upper margin (in pixel lines) .TP .I lower lower margin (in pixel lines) .TP .I hslen horizontal sync length (in pixels) .TP .I vslen vertical sync length (in pixel lines) .RE .PP other options: .RS the first value of this options is the default .TP .IR \fBhsync "\ {" low | high } the horizontal sync polarity .TP .IR \fBvsync "\ {" low | high } the vertical sync polarity .TP .IR \fBcsync "\ {" low | high } the composite sync polarity .TP .IR \fBextsync "\ {" false | true } enable or disable external resync. If enabled the sync timings are not generated by the frame buffer device and must be provided externally instead. Note that this option may not be supported by every frame buffer device .TP .IR \fBlaced "\ {" false | true } enable or disable interlace. If enabled the display will be split in two frames, each frame contains only even and odd lines respectively. These two frames will be displayed alternating, this way twice the lines can be displayed and the vertical frequency for monitor stays the same, but the visible vertical frequency gets halved .TP .IR \fBdouble "\ {" false | true } enable or disable doublescan. If enabled every line will be displayed twice and this way the horizontal frequency can easily be doubled, so that the same resolution can be displayed on different monitors, even if the horizontal frequency specification differs. Note that this option may not be supported by every frame buffer device .RE .SH INTERNALS Generally a frame buffer display is organized as follows: .sp .ad c +\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-+\-\-\-+ .br .RB "|\ \ \ |\ \ \ \ \ \ \ " ^ "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |" .br .RB "|\ \ \ |\ \ \ \ \ \ \ " | "\ " \fI5 "\ \ \ \ \ |\ \ \ |\ \ \ |" .br .RB "|\ \ \ |\ \ \ \ \ \ \ " v "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |" .br +\-\-\-#################\-\-\-+\-\-\-+ .br .RB "|\ \ \ #\ \ \ \ \ \ \ " ^ "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |" .br .RB "|\ \ \ #\ \ \ \ \ \ \ " | "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |" .br .RB "|\ \ \ #\ \ \ \ \ \ \ " | "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |" .br .RI "| " 1 " # " \fB| " " 2 " # " 3 " | " 4 " |" .br .RB "|" "<\->" "#" "<\-\-\-\-\-\-+\-\-\-\-\-\->" "#" "<\->" "|" "<\->" "|" .br .RB "|\ \ \ #\ \ \ \ \ \ \ " | "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |" .br .RB "|\ \ \ #\ \ \ \ \ \ \ " | "\ " \fI6 "\ \ \ \ \ #\ \ \ |\ \ \ |" .br .RB "|\ \ \ #\ \ \ \ \ \ \ " | "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |" .br .RB "|\ \ \ #\ \ \ \ \ \ \ " v "\ \ \ \ \ \ \ #\ \ \ |\ \ \ |" .br +\-\-\-#################\-\-\-+\-\-\-+ .br .RB "|\ \ \ |\ \ \ \ \ \ \ " ^ "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |" .br .RB "|\ \ \ |\ \ \ \ \ \ \ " | "\ " \fI7 "\ \ \ \ \ |\ \ \ |\ \ \ |" .br .RB "|\ \ \ |\ \ \ \ \ \ \ " v "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |" .br +\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-+\-\-\-+ .br .RB "|\ \ \ |\ \ \ \ \ \ \ " ^ "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |" .br .RB "|\ \ \ |\ \ \ \ \ \ \ " | "\ " \fI8 "\ \ \ \ \ |\ \ \ |\ \ \ |" .br .RB "|\ \ \ |\ \ \ \ \ \ \ " v "\ \ \ \ \ \ \ |\ \ \ |\ \ \ |" .br +\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-+\-\-\-+ .sp .ad n .RS .I 1 \t left margin .br .I 2 \t xres .br .I 3 \t right margin .br .I 4 \t horizontal sync len .br .I 5 \t upper margin .br .I 6 \t yres .br .I 7 \t lower margin .br .I 8 \t vertical sync len .RE .sp The area bordered with `#' is the visible display area. Horizontal and vertical frequencies can now easily be calculated, for this the sum of horizontal or vertical values are important .RS .sp htotal\ =\ left\ +\ xres\ +\ right\ +\ hslen .br vtotal\ =\ upper\ +\ yres\ +\ lower\ +\ vslen .sp .RE The length of one line can now be calculated with pixclock .RS .sp line\ =\ pixclock\ *\ htotal .sp .RE and we have the horizontal frequency .RS .sp hfreq\ =\ 1E12\ /\ line\ =\ 1E12\ /\ (pixclock\ *\ htotal) .sp .RE To get the vertical frequency vtotal must eventually adjusted. If the display is laced, vtotal must be halved or if the display is a doublescan one, vtotal must be doubled. Now we can calculate the length of one frame .RS .sp if\ (lace)\ \ \ vtotal\ /=\ 2 .br if\ (double)\ vtotal\ *=\ 2 .sp frame\ =\ vtotal\ *\ line .sp .RE and we get also the vertical frequency .RS .sp vfreq\ =\ 1E12\ /\ frame\ =\ hfreq\ /\ vtotal .sp .RE .SH SEE ALSO .BR fbset "(8), " fbdev (4) fbset-2.1/fbset.8100644 1750 1750 13176 6734165254 13344 0ustar kopteinkoptein.TH fbset 8 "July 1998" local "Linux frame buffer utils" .SH NAME fbset \- show and modify frame buffer device settings .SH SYNOPSIS .B fbset .RI [ options ] .RI [ mode ] .SH DESCRIPTION .B This documentation is out of date!! .PP .B fbset is a system utility to show or change the settings of the frame buffer device. The frame buffer device provides a simple and unique interface to access different kinds of graphic displays. .PP Frame buffer devices are accessed via special device nodes located in the /dev directory. The naming scheme for these nodes is always .IR \fBfb < n >, where .I n is the number of the used frame buffer device. .PP .B fbset uses an own video mode database located in /etc/fb.modes. An unlimited number of video modes can be defined in this database. For further information see .BR fb.modes (5). .SH OPTIONS If no option is given, .B fbset will display the current frame buffer settings. .sp General options: .RS .TP .BR \-\-help ",\ " \-h display an usage information .TP .BR \-\-now ",\ " \-n change the video mode immediately. If no frame buffer device is given via .B \-fb , then this option is activated by default .TP .BR \-\-show ",\ " \-s display the video mode settings. This is default if no further option or only a frame buffer device via .B \-fb is given .TP .BR \-\-info ",\ " \-i display all available frame buffer information .TP .BR \-\-verbose ",\ " \-v display information what .B fbset is currently doing .TP .BR \-\-version ",\ " \-V display the version information about .B fbset .TP .BR \-\-xfree86 ",\ " \-x display the timing information as it's needed by XFree86 .RE .PP Frame buffer device nodes: .RS .TP .BR \-fb "\ <" \fIdevice > .I device gives the frame buffer device node. If no device via .B \-fb is given, .I /dev/fb0 is used .TP .RE .PP Video mode database: .RS .TP .BR \-db "\ <" \fIfile > set an alternative video mode database file (default is .IR /etc/fb.modes ), see also .BR fb.modes (5) .RE .PP Display geometry: .RS .TP .BR \-xres "\ <" \fIvalue > set visible horizontal resolution (in pixels) .TP .BR \-yres "\ <" \fIvalue > set visible vertical resolution (in pixels) .TP .BR \-vxres "\ <" \fIvalue > set virtual horizontal resolution (in pixels) .TP .BR \-vyres "\ <" \fIvalue > set virtual vertical resolution (in pixels) .TP .BR \-depth "\ <" \fIvalue > set display depth (in bits per pixel) .TP .BR \-\-geometry ",\ " \-g "\ ..." set all geometry parameters at once in the order .RI < xres > .RI < yres > .RI < vxres > .RI < vyres > .RI < depth >, e.g. .B \-g .I 640 400 640 400 4 .TP .BR \-match "\ \ \ \ \ \ " make the physical resolution match the virtual resolution .RE .PP Display timings: .RS .TP .BR \-pixclock "\ <" \fIvalue > set the length of one pixel (in picoseconds). Note that the frame buffer device may only support some pixel lengths .TP .BR \-left "\ <" \fIvalue > set left margin (in pixels) .TP .BR \-right "\ <" \fIvalue > set right margin (in pixels) .TP .BR \-upper "\ <" \fIvalue > set upper margin (in pixel lines) .TP .BR \-lower "\ <" \fIvalue > set lower margin (in pixel lines) .TP .BR \-hslen "\ <" \fIvalue > set horizontal sync length (in pixels) .TP .BR \-vslen "\ <" \fIvalue > set vertical sync length (in pixel lines) .TP .BR \-\-timings ",\ " \-t "\ ..." set all timing parameters at once in the order .RI < pixclock > .RI < left > .RI < right > .RI < upper > .RI < lower > .RI < hslen > .RI < vslen >, e.g. .B \-g .I 35242 64 96 35 12 112 2 .RE .PP Display flags: .RS .TP .IR \fB\-hsync "\ {" low | high } set the horizontal sync polarity .TP .IR \fB\-vsync "\ {" low | high } set the vertical sync polarity .TP .IR \fB\-csync "\ {" low | high } set the composite sync polarity .TP .IR \fB\-extsync "\ {" false | true } enable or disable external resync. If enabled the sync timings are not generated by the frame buffer device and must be provided externally instead. Note that this option may not be supported by every frame buffer device .TP .IR \fB\-bcast "\ {" false | true } enable or disable broadcast modes. If enabled the frame buffer generates the exact timings for several broadcast modes (e.g. PAL or NTSC). Note that this option may not be supported by every frame buffer device .TP .IR \fB\-laced "\ {" false | true } enable or disable interlace. If enabled the display will be split in two frames, each frame contains only even and odd lines respectively. These two frames will be displayed alternating, this way twice the lines can be displayed and the vertical frequency for the monitor stays the same, but the visible vertical frequency gets halved .TP .IR \fB\-double "\ {" false | true } enable or disable doublescan. If enabled every line will be displayed twice and this way the horizontal frequency can easily be doubled, so that the same resolution can be displayed on different monitors, even if the horizontal frequency specification differs. Note that this option may not be supported by every frame buffer device .RE .PP Display positioning: .RS .TP .IR \fB\-move "\ {" left | right | up | down } move the visible part of the display in the specified direction .TP .BR \-step "\ <" \fIvalue > set step size for display positioning (in pixels or pixel lines), if .B \-step is not given display will be moved 8 pixels horizontally or 2 pixel lines vertically .RE .SH EXAMPLE To set the used video mode for .B X insert the following in rc.local: .RS .sp .B fbset -fb .I /dev/fb0 vga .sp .RE and make the used frame buffer device known to .BR X : .RS .sp .B export .RI FRAMEBUFFER= /dev/fb0 .RE .SH FILES .I /dev/fb* .br .I /etc/fb.modes .SH SEE ALSO .BR fb.modes "(5), " fbdev (4) .SH AUTHORS .TP Geert Uytterhoeven .TP Roman Zippel .br man files fbset-2.1/fbset.c100644 1750 1750 70340 6734165442 13412 0ustar kopteinkoptein/* * Linux Frame Buffer Device Configuration * * © Copyright 1995-1999 by Geert Uytterhoeven * (Geert.Uytterhoeven@cs.kuleuven.ac.be) * * -------------------------------------------------------------------------- * * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of the Linux * distribution for more details. * * Petr Vandrovec : * -grayscale, -rgba, -nonstd, VGA modes reporting * * Brad Midgley : * -match * */ #include #include #include #include #include #include #include #include #include struct file; struct inode; #include "fb.h" #include "fbset.h" /* * Default Frame Buffer Special Device Node */ #define DEFAULT_FRAMEBUFFER "/dev/fb0" /* * Default Video Mode Database File */ #define DEFAULT_MODEDBFILE "/etc/fb.modes" /* * Command Line Options */ static const char *ProgramName; static int Opt_test = 0; static int Opt_show = 0; static int Opt_info = 0; static int Opt_version = 0; static int Opt_verbose = 0; static int Opt_xfree86 = 0; static int Opt_change = 0; static int Opt_all = 0; static const char *Opt_fb = NULL; const char *Opt_modedb = DEFAULT_MODEDBFILE; static const char *Opt_xres = NULL; static const char *Opt_yres = NULL; static const char *Opt_vxres = NULL; static const char *Opt_vyres = NULL; static const char *Opt_depth = NULL; static const char *Opt_pixclock = NULL; static const char *Opt_left = NULL; static const char *Opt_right = NULL; static const char *Opt_upper = NULL; static const char *Opt_lower = NULL; static const char *Opt_hslen = NULL; static const char *Opt_vslen = NULL; static const char *Opt_accel = NULL; static const char *Opt_hsync = NULL; static const char *Opt_vsync = NULL; static const char *Opt_csync = NULL; static const char *Opt_gsync = NULL; static const char *Opt_extsync = NULL; static const char *Opt_bcast = NULL; static const char *Opt_laced = NULL; static const char *Opt_double = NULL; static const char *Opt_move = NULL; static const char *Opt_step = NULL; static const char *Opt_modename = NULL; static const char *Opt_rgba = NULL; static const char *Opt_nonstd = NULL; static const char *Opt_grayscale = NULL; static const char *Opt_matchyres = NULL; static struct { const char *name; const char **value; const int change; } Options[] = { { "-fb", &Opt_fb, 0 }, { "-db", &Opt_modedb, 0 }, { "-xres", &Opt_xres, 1 }, { "-yres", &Opt_yres, 1 }, { "-vxres", &Opt_vxres, 1 }, { "-vyres", &Opt_vyres, 1 }, { "-depth", &Opt_depth, 1 }, { "-nonstd", &Opt_nonstd, 1}, { "-pixclock", &Opt_pixclock, 1 }, { "-left", &Opt_left, 1 }, { "-right", &Opt_right, 1 }, { "-upper", &Opt_upper, 1 }, { "-lower", &Opt_lower, 1 }, { "-hslen", &Opt_hslen, 1 }, { "-vslen", &Opt_vslen, 1 }, { "-accel", &Opt_accel, 1 }, { "-hsync", &Opt_hsync, 1 }, { "-vsync", &Opt_vsync, 1 }, { "-csync", &Opt_csync, 1 }, { "-gsync", &Opt_gsync, 1 }, { "-extsync", &Opt_extsync, 1 }, { "-bcast", &Opt_bcast, 1 }, { "-laced", &Opt_laced, 1 }, { "-double", &Opt_double, 1 }, { "-move", &Opt_move, 1 }, { "-step", &Opt_step, 1 }, { "-rgba", &Opt_rgba, 1 }, { "-grayscale", &Opt_grayscale, 1 }, { NULL, NULL, 0 } }; /* * Video Mode Database */ struct VideoMode *VideoModes = NULL; /* * Hardware Text Modes */ static struct textentry { __u32 id; const char *name; } Textmodes[] = { { FB_AUX_TEXT_MDA, "Monochrome text" }, { FB_AUX_TEXT_CGA, "CGA/EGA/VGA Color text" }, { FB_AUX_TEXT_S3_MMIO, "S3 MMIO fasttext" }, { FB_AUX_TEXT_MGA_STEP16, "MGA Millennium I step 16 text" }, { FB_AUX_TEXT_MGA_STEP8, "MGA step 8 text" }, }; static struct textentry VGAModes[] = { { FB_AUX_VGA_PLANES_VGA4, "VGA 16 colors in 4 planes" }, { FB_AUX_VGA_PLANES_CFB4, "VGA 16 colors in 1 plane" }, { FB_AUX_VGA_PLANES_CFB8, "VGA 256 colors in 4 planes" }, /* last entry has name == NULL */ { 0, NULL} }; /* * Hardware Accelerators */ static struct accelentry { __u32 id; const char *name; } Accelerators[] = { { FB_ACCEL_NONE, "No" }, { FB_ACCEL_ATARIBLITT, "Atari Blitter" }, { FB_ACCEL_AMIGABLITT, "Amiga Blitter" }, { FB_ACCEL_S3_TRIO64, "S3 Trio64" }, { FB_ACCEL_NCR_77C32BLT, "NCR 77C32BLT" }, { FB_ACCEL_S3_VIRGE, "S3 ViRGE" }, { FB_ACCEL_ATI_MACH64GX, "ATI Mach64GX" }, { FB_ACCEL_DEC_TGA, "DEC 21030 TGA" }, { FB_ACCEL_ATI_MACH64CT, "ATI Mach64CT" }, { FB_ACCEL_ATI_MACH64VT, "ATI Mach64VT" }, { FB_ACCEL_ATI_MACH64GT, "ATI Mach64GT" }, { FB_ACCEL_SUN_CREATOR, "Sun Creator/Creator3D" }, { FB_ACCEL_SUN_CGSIX, "Sun cg6" }, { FB_ACCEL_SUN_LEO, "Sun leo/zx" }, { FB_ACCEL_IMS_TWINTURBO, "IMS Twin Turbo" }, { FB_ACCEL_3DLABS_PERMEDIA2, "3Dlabs Permedia 2" }, { FB_ACCEL_MATROX_MGA2064W, "Matrox MGA2064W (Millennium)" }, { FB_ACCEL_MATROX_MGA1064SG, "Matrox MGA1064SG (Mystique)" }, { FB_ACCEL_MATROX_MGA2164W, "Matrox MGA2164W (Millennium II)" }, { FB_ACCEL_MATROX_MGA2164W_AGP, "Matrox MGA2164W (Millennium II AGP)" }, { FB_ACCEL_MATROX_MGAG100, "Matrox G100 (Productiva G100)" }, { FB_ACCEL_MATROX_MGAG200, "Matrox G200 (Millennium, Mystique)" }, { FB_ACCEL_SUN_CG14, "Sun cg14" }, { FB_ACCEL_SUN_BWTWO, "Sun bw2" }, { FB_ACCEL_SUN_CGTHREE, "Sun cg3" }, { FB_ACCEL_SUN_TCX, "Sun tcx" }, { FB_ACCEL_MATROX_MGAG400, "Matrox G400" }, }; /* * Current Video Mode */ struct VideoMode Current; /* * Function Prototypes */ int OpenFrameBuffer(const char *name); void CloseFrameBuffer(int fh); void GetVarScreenInfo(int fh, struct fb_var_screeninfo *var); void SetVarScreenInfo(int fh, struct fb_var_screeninfo *var); void GetFixScreenInfo(int fh, struct fb_fix_screeninfo *fix); static void ConvertFromVideoMode(const struct VideoMode *vmode, struct fb_var_screeninfo *var); static void ConvertToVideoMode(const struct fb_var_screeninfo *var, struct VideoMode *vmode); static int atoboolean(const char *var); static void ReadModeDB(void); static struct VideoMode *FindVideoMode(const char *name); static void ModifyVideoMode(struct VideoMode *vmode); static void DisplayVModeInfo(struct VideoMode *vmode); static void DisplayFBInfo(struct fb_fix_screeninfo *fix); static int FillScanRates(struct VideoMode *vmode); static void Usage(void) __attribute__ ((noreturn)); int main(int argc, char *argv[]); /* * Print an Error Message and Exit */ void Die(const char *fmt, ...) { va_list ap; fflush(stdout); va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); exit(1); } /* * Open the Frame Buffer Device */ int OpenFrameBuffer(const char *name) { int fh; if (Opt_verbose) printf("Opening frame buffer device `%s'\n", name); if ((fh = open(name, O_RDONLY)) == -1) Die("open %s: %s\n", name, strerror(errno)); return fh; } /* * Close the Frame Buffer Device */ void CloseFrameBuffer(int fh) { close(fh); } /* * Get the Variable Part of the Screen Info */ void GetVarScreenInfo(int fh, struct fb_var_screeninfo *var) { if (ioctl(fh, FBIOGET_VSCREENINFO, var)) Die("ioctl FBIOGET_VSCREENINFO: %s\n", strerror(errno)); } /* * Set (and Get) the Variable Part of the Screen Info */ void SetVarScreenInfo(int fh, struct fb_var_screeninfo *var) { if (ioctl(fh, FBIOPUT_VSCREENINFO, var)) Die("ioctl FBIOPUT_VSCREENINFO: %s\n", strerror(errno)); } /* * Get the Fixed Part of the Screen Info */ void GetFixScreenInfo(int fh, struct fb_fix_screeninfo *fix) { if (ioctl(fh, FBIOGET_FSCREENINFO, fix)) Die("ioctl FBIOGET_FSCREENINFO: %s\n", strerror(errno)); } /* * Conversion Routines */ static void ConvertFromVideoMode(const struct VideoMode *vmode, struct fb_var_screeninfo *var) { memset(var, 0, sizeof(struct fb_var_screeninfo)); var->xres = vmode->xres; var->yres = vmode->yres; var->xres_virtual = vmode->vxres; var->yres_virtual = vmode->vyres; var->bits_per_pixel = vmode->depth; var->nonstd = vmode->nonstd; if (Opt_test) var->activate = FB_ACTIVATE_TEST; else var->activate = FB_ACTIVATE_NOW; if (Opt_all) var->activate = FB_ACTIVATE_ALL; var->accel_flags = vmode->accel_flags; var->pixclock = vmode->pixclock; var->left_margin = vmode->left; var->right_margin = vmode->right; var->upper_margin = vmode->upper; var->lower_margin = vmode->lower; var->hsync_len = vmode->hslen; var->vsync_len = vmode->vslen; if (vmode->hsync == HIGH) var->sync |= FB_SYNC_HOR_HIGH_ACT; if (vmode->vsync == HIGH) var->sync |= FB_SYNC_VERT_HIGH_ACT; if (vmode->csync == HIGH) var->sync |= FB_SYNC_COMP_HIGH_ACT; if (vmode->gsync == HIGH) var->sync |= FB_SYNC_ON_GREEN; if (vmode->extsync == TRUE) var->sync |= FB_SYNC_EXT; if (vmode->bcast == TRUE) var->sync |= FB_SYNC_BROADCAST; if (vmode->laced == TRUE) var->vmode = FB_VMODE_INTERLACED; else if (vmode->dblscan == TRUE) var->vmode = FB_VMODE_DOUBLE; else var->vmode = FB_VMODE_NONINTERLACED; var->vmode |= FB_VMODE_CONUPDATE; var->red.length = vmode->red.length; var->red.offset = vmode->red.offset; var->green.length = vmode->green.length; var->green.offset = vmode->green.offset; var->blue.length = vmode->blue.length; var->blue.offset = vmode->blue.offset; var->transp.length = vmode->transp.length; var->transp.offset = vmode->transp.offset; var->grayscale = vmode->grayscale; } static void ConvertToVideoMode(const struct fb_var_screeninfo *var, struct VideoMode *vmode) { vmode->name = NULL; vmode->xres = var->xres; vmode->yres = var->yres; vmode->vxres = var->xres_virtual; vmode->vyres = var->yres_virtual; vmode->depth = var->bits_per_pixel; vmode->nonstd = var->nonstd; vmode->accel_flags = var->accel_flags; vmode->pixclock = var->pixclock; vmode->left = var->left_margin; vmode->right = var->right_margin; vmode->upper = var->upper_margin; vmode->lower = var->lower_margin; vmode->hslen = var->hsync_len; vmode->vslen = var->vsync_len; vmode->hsync = var->sync & FB_SYNC_HOR_HIGH_ACT ? HIGH : LOW; vmode->vsync = var->sync & FB_SYNC_VERT_HIGH_ACT ? HIGH : LOW; vmode->csync = var->sync & FB_SYNC_COMP_HIGH_ACT ? HIGH : LOW; vmode->gsync = var->sync & FB_SYNC_ON_GREEN ? TRUE : FALSE; vmode->extsync = var->sync & FB_SYNC_EXT ? TRUE : FALSE; vmode->bcast = var->sync & FB_SYNC_BROADCAST ? TRUE : FALSE; vmode->grayscale = var->grayscale; vmode->laced = FALSE; vmode->dblscan = FALSE; switch (var->vmode & FB_VMODE_MASK) { case FB_VMODE_INTERLACED: vmode->laced = TRUE; break; case FB_VMODE_DOUBLE: vmode->dblscan = TRUE; break; } vmode->red.length = var->red.length; vmode->red.offset = var->red.offset; vmode->green.length = var->green.length; vmode->green.offset = var->green.offset; vmode->blue.length = var->blue.length; vmode->blue.offset = var->blue.offset; vmode->transp.length = var->transp.length; vmode->transp.offset = var->transp.offset; FillScanRates(vmode); } static int atoboolean(const char *var) { int value = 0; if (!strcasecmp(var, "false") || !strcasecmp(var, "low") || !strcasecmp(var, "no") || !strcasecmp(var, "off") || !strcmp(var, "0")) value = 0; else if (!strcasecmp(var, "true") || !strcasecmp(var, "high") || !strcasecmp(var, "yes") || !strcasecmp(var, "on") || !strcmp(var, "1")) value = 1; else Die("Invalid value `%s'\n", var); return value; } void AddVideoMode(const struct VideoMode *vmode) { struct VideoMode *vmode2; if (FindVideoMode(vmode->name)) Die("%s:%d: Duplicate mode name `%s'\n", Opt_modedb, line, vmode->name); vmode2 = malloc(sizeof(struct VideoMode)); *vmode2 = *vmode; if (!FillScanRates(vmode2)) Die("%s:%d: Bad video mode `%s'\n", Opt_modedb, line, vmode2->name); vmode2->next = VideoModes; VideoModes = vmode2; } /* * Read the Video Mode Database */ static void ReadModeDB(void) { if (Opt_verbose) printf("Reading mode database from file `%s'\n", Opt_modedb); if (!(yyin = fopen(Opt_modedb, "r"))) Die("fopen %s: %s\n", Opt_modedb, strerror(errno)); yyparse(); fclose(yyin); } static void getColor(struct color *color, const char** opt) { char* ptr; color->length = 0; color->offset = 0; ptr = (char*)(*opt); if (!ptr) return; color->length = strtoul(ptr, &ptr, 0); if (!ptr) return; if (*ptr == '/') color->offset = strtoul(ptr+1, &ptr, 0); if (ptr) { while (*ptr && isspace(*ptr)) ptr++; if (*ptr == ',') { ptr++; } else if (*ptr) Die("Bad RGBA syntax, rL/rO,gL/gO,bL/bO,tL/tO or rL,gL,bL,tL\n"); } *opt = ptr; return; } void makeRGBA(struct VideoMode *vmode, const char* opt) { getColor(&vmode->red, &opt); getColor(&vmode->green, &opt); getColor(&vmode->blue, &opt); getColor(&vmode->transp, &opt); } /* * Find a Video Mode */ static struct VideoMode *FindVideoMode(const char *name) { struct VideoMode *vmode; for (vmode = VideoModes; vmode; vmode = vmode->next) if (!strcmp(name, vmode->name)) break; return vmode; } /* * Modify a Video Mode */ static void ModifyVideoMode(struct VideoMode *vmode) { u_int hstep = 8, vstep = 2; if (Opt_xres) vmode->xres = strtoul(Opt_xres, NULL, 0); if (Opt_yres) vmode->yres = strtoul(Opt_yres, NULL, 0); if (Opt_vxres) vmode->vxres = strtoul(Opt_vxres, NULL, 0); if (Opt_vyres) vmode->vyres = strtoul(Opt_vyres, NULL, 0); if (Opt_depth) vmode->depth = strtoul(Opt_depth, NULL, 0); if (Opt_nonstd) vmode->nonstd = strtoul(Opt_nonstd, NULL, 0); if (Opt_accel) vmode->accel_flags = atoboolean(Opt_accel) ? FB_ACCELF_TEXT : 0; if (Opt_pixclock) vmode->pixclock = strtoul(Opt_pixclock, NULL, 0); if (Opt_left) vmode->left = strtoul(Opt_left, NULL, 0); if (Opt_right) vmode->right = strtoul(Opt_right, NULL, 0); if (Opt_upper) vmode->upper = strtoul(Opt_upper, NULL, 0); if (Opt_lower) vmode->lower = strtoul(Opt_lower, NULL, 0); if (Opt_hslen) vmode->hslen = strtoul(Opt_hslen, NULL, 0); if (Opt_vslen) vmode->vslen = strtoul(Opt_vslen, NULL, 0); if (Opt_hsync) vmode->hsync = atoboolean(Opt_hsync); if (Opt_vsync) vmode->vsync = atoboolean(Opt_vsync); if (Opt_csync) vmode->csync = atoboolean(Opt_csync); if (Opt_gsync) vmode->gsync = atoboolean(Opt_gsync); if (Opt_extsync) vmode->extsync = atoboolean(Opt_extsync); if (Opt_bcast) vmode->bcast = atoboolean(Opt_bcast); if (Opt_laced) vmode->laced = atoboolean(Opt_laced); if (Opt_double) vmode->dblscan = atoboolean(Opt_double); if (Opt_grayscale) vmode->grayscale = atoboolean(Opt_grayscale); if (Opt_step) hstep = vstep = strtoul(Opt_step, NULL, 0); if (Opt_matchyres) vmode->vyres = vmode->yres; if (Opt_move) { if (!strcasecmp(Opt_move, "left")) { if (hstep > vmode->left) Die("The left margin cannot be negative\n"); vmode->left -= hstep; vmode->right += hstep; } else if (!strcasecmp(Opt_move, "right")) { if (hstep > vmode->right) Die("The right margin cannot be negative\n"); vmode->left += hstep; vmode->right -= hstep; } else if (!strcasecmp(Opt_move, "up")) { if (vstep > vmode->upper) Die("The upper margin cannot be negative\n"); vmode->upper -= vstep; vmode->lower += vstep; } else if (!strcasecmp(Opt_move, "down")) { if (vstep > vmode->lower) Die("The lower margin cannot be negative\n"); vmode->upper += vstep; vmode->lower -= vstep; } else Die("Invalid direction `%s'\n", Opt_move); } if (Opt_rgba) { makeRGBA(vmode, Opt_rgba); } if (!FillScanRates(vmode)) Die("Bad video mode\n"); } /* * Display the Video Mode Information */ static void DisplayVModeInfo(struct VideoMode *vmode) { u_int res, sstart, send, total; puts(""); if (!Opt_xfree86) { printf("mode \"%dx%d", vmode->xres, vmode->yres); if (vmode->pixclock) { printf("-%d\"\n", (int)(vmode->vrate+0.5)); printf(" # D: %5.3f MHz, H: %5.3f kHz, V: %5.3f Hz\n", vmode->drate/1E6, vmode->hrate/1E3, vmode->vrate); } else puts("\""); printf(" geometry %d %d %d %d %d\n", vmode->xres, vmode->yres, vmode->vxres, vmode->vyres, vmode->depth); printf(" timings %d %d %d %d %d %d %d\n", vmode->pixclock, vmode->left, vmode->right, vmode->upper, vmode->lower, vmode->hslen, vmode->vslen); if (vmode->hsync) puts(" hsync high"); if (vmode->vsync) puts(" vsync high"); if (vmode->csync) puts(" csync high"); if (vmode->gsync) puts(" gsync true"); if (vmode->extsync) puts(" extsync true"); if (vmode->bcast) puts(" bcast true"); if (vmode->laced) puts(" laced true"); if (vmode->dblscan) puts(" double true"); if (vmode->nonstd) printf(" nonstd %u\n", vmode->nonstd); if (vmode->accel_flags) puts(" accel true"); if (vmode->grayscale) puts(" grayscale true"); printf(" rgba %u/%u,%u/%u,%u/%u,%u/%u\n", vmode->red.length, vmode->red.offset, vmode->green.length, vmode->green.offset, vmode->blue.length, vmode->blue.offset, vmode->transp.length, vmode->transp.offset); puts("endmode\n"); } else { printf("Mode \"%dx%d\"\n", vmode->xres, vmode->yres); if (vmode->pixclock) { printf(" # D: %5.3f MHz, H: %5.3f kHz, V: %5.3f Hz\n", vmode->drate/1E6, vmode->hrate/1E3, vmode->vrate); printf(" DotClock %5.3f\n", vmode->drate/1E6+0.001); } else puts(" DotClock Unknown"); res = vmode->xres; sstart = res+vmode->right; send = sstart+vmode->hslen; total = send+vmode->left; printf(" HTimings %d %d %d %d\n", res, sstart, send, total); res = vmode->yres; sstart = res+vmode->lower; send = sstart+vmode->vslen; total = send+vmode->upper; printf(" VTimings %d %d %d %d\n", res, sstart, send, total); printf(" Flags "); if (vmode->laced) printf(" \"Interlace\""); if (vmode->dblscan) printf(" \"DoubleScan\""); if (vmode->hsync) printf(" \"+HSync\""); else printf(" \"-HSync\""); if (vmode->vsync) printf(" \"+VSync\""); else printf(" \"-VSync\""); if (vmode->csync) printf(" \"Composite\""); if (vmode->extsync) puts(" # Warning: XFree86 doesn't support extsync\n"); if (vmode->bcast) printf(" \"bcast\""); if (vmode->accel_flags) puts(" # Warning: XFree86 doesn't support accel\n"); if (vmode->grayscale) puts(" # Warning: XFree86 doesn't support grayscale\n"); puts("\nEndMode\n"); } } /* * Display the Frame Buffer Device Information */ static void DisplayFBInfo(struct fb_fix_screeninfo *fix) { int i; puts("Frame buffer device information:"); printf(" Name : %s\n", fix->id); printf(" Address : %p\n", fix->smem_start); printf(" Size : %d\n", fix->smem_len); printf(" Type : "); switch (fix->type) { case FB_TYPE_PACKED_PIXELS: puts("PACKED PIXELS"); break; case FB_TYPE_PLANES: puts("PLANES"); break; case FB_TYPE_INTERLEAVED_PLANES: printf("INTERLEAVED PLANES (%d bytes interleave)\n", fix->type_aux); break; case FB_TYPE_TEXT: for (i = 0; i < sizeof(Textmodes)/sizeof(*Textmodes); i++) if (fix->type_aux == Textmodes[i].id) break; if (i < sizeof(Textmodes)/sizeof(*Textmodes)) puts(Textmodes[i].name); else printf("Unknown text (%d)\n", fix->type_aux); break; case FB_TYPE_VGA_PLANES: { struct textentry *t; for (t = VGAModes; t->name; t++) if (fix->type_aux == t->id) break; if (t->name) puts(t->name); else printf("Unknown VGA mode (%d)\n", fix->type_aux); } break; default: printf("%d (UNKNOWN)\n", fix->type); printf(" Type_aux : %d\n", fix->type_aux); break; } printf(" Visual : "); switch (fix->visual) { case FB_VISUAL_MONO01: puts("MONO01"); break; case FB_VISUAL_MONO10: puts("MONO10"); break; case FB_VISUAL_TRUECOLOR: puts("TRUECOLOR"); break; case FB_VISUAL_PSEUDOCOLOR: puts("PSEUDOCOLOR"); break; case FB_VISUAL_DIRECTCOLOR: puts("DIRECTCOLOR"); break; case FB_VISUAL_STATIC_PSEUDOCOLOR: puts("STATIC PSEUDOCOLOR"); break; default: printf("%d (UNKNOWN)\n", fix->visual); break; } printf(" XPanStep : %d\n", fix->xpanstep); printf(" YPanStep : %d\n", fix->ypanstep); printf(" YWrapStep : %d\n", fix->ywrapstep); printf(" LineLength : %d\n", fix->line_length); if (fix->mmio_len) { printf(" MMIO Address: %p\n", fix->mmio_start); printf(" MMIO Size : %d\n", fix->mmio_len); } printf(" Accelerator : "); for (i = 0; i < sizeof(Accelerators)/sizeof(*Accelerators); i++) if (fix->accel == Accelerators[i].id) break; if (i < sizeof(Accelerators)/sizeof(*Accelerators)) puts(Accelerators[i].name); else printf("Unknown (%d)\n", fix->accel); } /* * Calculate the Scan Rates for a Video Mode */ static int FillScanRates(struct VideoMode *vmode) { u_int htotal = vmode->left+vmode->xres+vmode->right+vmode->hslen; u_int vtotal = vmode->upper+vmode->yres+vmode->lower+vmode->vslen; if (vmode->dblscan) vtotal <<= 2; else if (!vmode->laced) vtotal <<= 1; if (!htotal || !vtotal) return 0; if (vmode->pixclock) { vmode->drate = 1E12/vmode->pixclock; vmode->hrate = vmode->drate/htotal; vmode->vrate = vmode->hrate/vtotal*2; } else { vmode->drate = 0; vmode->hrate = 0; vmode->vrate = 0; } return 1; } /* * Print the Usage Template and Exit */ static void Usage(void) { puts(VERSION); Die("\nUsage: %s [options] [mode]\n\n" "Valid options:\n" " General options:\n" " -h, --help : display this usage information\n" " --test : don't change, just test whether the mode is " "valid\n" " -s, --show : display video mode settings\n" " -i, --info : display all frame buffer information\n" " -v, --verbose : verbose mode\n" " -V, --version : print version information\n" " -x, --xfree86 : XFree86 compatibility mode\n" " -a, --all : change all virtual consoles on this device\n" " Frame buffer special device nodes:\n" " -fb : processed frame buffer device\n" " (default is " DEFAULT_FRAMEBUFFER ")\n" " Video mode database:\n" " -db : video mode database file\n" " (default is " DEFAULT_MODEDBFILE ")\n" " Display geometry:\n" " -xres : horizontal resolution (in pixels)\n" " -yres : vertical resolution (in pixels)\n" " -vxres : virtual horizontal resolution (in pixels)\n" " -vyres : virtual vertical resolution (in pixels)\n" " -depth : display depth (in bits per pixel)\n" " -nonstd : select nonstandard video mode\n" " -g, --geometry ... : set all geometry parameters at once\n" " -match : set virtual vertical resolution by virtual resolution\n" " Display timings:\n" " -pixclock : pixel clock (in picoseconds)\n" " -left : left margin (in pixels)\n" " -right : right margin (in pixels)\n" " -upper : upper margin (in pixel lines)\n" " -lower : lower margin (in pixel lines)\n" " -hslen : horizontal sync length (in pixels)\n" " -vslen : vertical sync length (in pixel lines)\n" " -t, --timings ... : set all timing parameters at once\n" " Display flags:\n" " -accel : hardware text acceleration enable (false or " "true)\n" " -hsync : horizontal sync polarity (low or high)\n" " -vsync : vertical sync polarity (low or high)\n" " -csync : composite sync polarity (low or high)\n" " -gsync : synch on green (false or true)\n" " -extsync : external sync enable (false or true)\n" " -bcast : broadcast enable (false or true)\n" " -laced : interlace enable (false or true)\n" " -double : doublescan enable (false or true)\n" " -rgba : recommended length of color entries\n" " -grayscale : grayscale enable (false or true)\n" " Display positioning:\n" " -move : move the visible part (left, right, up or " "down)\n" " -step : step increment (in pixels or pixel lines)\n" " (default is 8 horizontal, 2 vertical)\n", ProgramName); } /* * Main Routine */ int main(int argc, char *argv[]) { struct VideoMode *vmode; struct fb_var_screeninfo var; struct fb_fix_screeninfo fix; int fh = -1, i; ProgramName = argv[0]; /* * Parse the Options */ while (--argc > 0) { argv++; if (!strcmp(argv[0], "-h") || !strcmp(argv[0], "--help")) Usage(); else if (!strcmp(argv[0], "-v") || !strcmp(argv[0], "--verbose")) Opt_verbose = 1; else if (!strcmp(argv[0], "-V") || !strcmp(argv[0], "--version")) Opt_version = 1; else if (!strcmp(argv[0], "--test")) Opt_test = 1; else if (!strcmp(argv[0], "-s") || !strcmp(argv[0], "--show")) Opt_show = 1; else if (!strcmp(argv[0], "-i") || !strcmp(argv[0], "--info")) { Opt_show = 1; Opt_info = 1; } else if (!strcmp(argv[0], "-x") || !strcmp(argv[0], "--xfree86")) Opt_xfree86 = 1; else if (!strcmp(argv[0], "-a") || !strcmp(argv[0], "--all")) Opt_all = 1; else if (!strcmp(argv[0], "-g") || !strcmp(argv[0], "--geometry")) { if (argc > 5) { Opt_xres = argv[1]; Opt_yres = argv[2]; Opt_vxres = argv[3]; Opt_vyres = argv[4]; Opt_depth = argv[5]; Opt_change = 1; argc -= 5; argv += 5; } else Usage(); } else if (!strcmp(argv[0], "-t") || !strcmp(argv[0], "--timings")) { if (argc > 7) { Opt_pixclock = argv[1]; Opt_left = argv[2]; Opt_right = argv[3]; Opt_upper = argv[4]; Opt_lower = argv[5]; Opt_hslen = argv[6]; Opt_vslen = argv[7]; Opt_change = 1; argc -= 7; argv += 7; } else Usage(); } else if (!strcmp(argv[0], "-match")) { Opt_matchyres = argv[0]; Opt_change = 1; } else { for (i = 0; Options[i].name; i++) if (!strcmp(argv[0], Options[i].name)) break; if (Options[i].name) { if (argc-- > 1) { *Options[i].value = argv[1]; Opt_change |= Options[i].change; argv++; } else Usage(); } else if (!Opt_modename) { Opt_modename = argv[0]; Opt_change = 1; } else Usage(); } } if (Opt_version || Opt_verbose) puts(VERSION); if (!Opt_fb) Opt_fb = DEFAULT_FRAMEBUFFER; /* * Open the Frame Buffer Device */ fh = OpenFrameBuffer(Opt_fb); /* * Get the Video Mode */ if (Opt_modename) { /* * Read the Video Mode Database */ ReadModeDB(); if (!(vmode = FindVideoMode(Opt_modename))) Die("Unknown video mode `%s'\n", Opt_modename); Current = *vmode; if (Opt_verbose) printf("Using video mode `%s'\n", Opt_modename); } else { GetVarScreenInfo(fh, &var); ConvertToVideoMode(&var, &Current); if (Opt_verbose) printf("Using current video mode from `%s'\n", Opt_fb); } if (Opt_change) { /* * Optionally Modify the Video Mode */ ModifyVideoMode(&Current); /* * Set the Video Mode */ ConvertFromVideoMode(&Current, &var); if (Opt_verbose) printf("Setting video mode to `%s'\n", Opt_fb); SetVarScreenInfo(fh, &var); ConvertToVideoMode(&var, &Current); } /* * Display some Video Mode Information */ if (Opt_show || !Opt_change) DisplayVModeInfo(&Current); if (Opt_info) { if (Opt_verbose) puts("Getting further frame buffer information"); GetFixScreenInfo(fh, &fix); DisplayFBInfo(&fix); } /* * Close the Frame Buffer Device */ CloseFrameBuffer(fh); exit(0); } fbset-2.1/fbset.h100644 1750 1750 3466 6734165514 13404 0ustar kopteinkoptein/* * Linux Frame Buffer Device Configuration * * © Copyright 1995-1998 by Geert Uytterhoeven * (Geert.Uytterhoeven@cs.kuleuven.ac.be) * * -------------------------------------------------------------------------- * * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of the Linux * distribution for more details. */ #include #include #ifdef __GLIBC__ #include #endif #define VERSION "Linux Frame Buffer Device Configuration " \ "Version 2.1 (23/06/1999)\n" \ "(C) Copyright 1995-1999 by Geert Uytterhoeven\n" #define LOW (0) #define HIGH (1) #define FALSE (0) #define TRUE (1) struct color { unsigned int length; unsigned int offset; }; struct VideoMode { struct VideoMode *next; const char *name; /* geometry */ __u32 xres; __u32 yres; __u32 vxres; __u32 vyres; __u32 depth; __u32 nonstd; /* acceleration */ __u32 accel_flags; /* timings */ __u32 pixclock; __u32 left; __u32 right; __u32 upper; __u32 lower; __u32 hslen; __u32 vslen; /* flags */ unsigned hsync : 1; unsigned vsync : 1; unsigned csync : 1; unsigned gsync : 1; unsigned extsync : 1; unsigned bcast : 1; unsigned laced : 1; unsigned dblscan : 1; unsigned grayscale : 1; /* scanrates */ double drate; double hrate; double vrate; /* RGB entries */ struct color red, green, blue, transp; }; extern FILE *yyin; extern int line; extern const char *Opt_modedb; extern int yyparse(void); extern void Die(const char *fmt, ...) __attribute__ ((noreturn)); extern void AddVideoMode(const struct VideoMode *vmode); extern void makeRGBA(struct VideoMode *vmode, const char* opt); fbset-2.1/modeline2fb100755 1750 1750 10471 6650433343 14251 0ustar kopteinkoptein#!/usr/bin/perl # Simple modeline-to-fb.modes translator # (c) 1998 by Patrick Reynolds # distributed under the GNU General Public License # mapping of modeline options to fb.modes options %options_map = ( "-hsync" => "hsync low", "-vsync" => "vsync low", "+hsync" => "hsync high", "+vsync" => "vsync high", "interlace" => "laced true", "doublescan" => "double true" ); @possible_vxres = ( 640, 800, 1024, 1152, 1280, 1600, 1920, 2048 ); # default settings (override with -d and -r) $depth = 8; $rounding = 128; # parse options while ($ARGV[0] =~ /^-/) { $arg = shift; if ($arg eq "-d" || $arg eq "--depth") { if (!($arg = shift @ARGV)) { usage("-d requires an argument"); } $depth = $arg; } elsif ($arg eq "-r" || $arg eq "--rounding") { if (!($arg = shift @ARGV)) { usage("-r requires an argument"); } $rounding = $arg; } elsif ($arg eq "-x" || $arg eq "--vxres") { if (!($arg = shift @ARGV)) { usage("-x requires an argument"); } push @possible_vxres, (split/,/,$arg); @possible_vxres = sort { $a <=> $b } @possible_vxres; print "new vxres: " . (join ",", @possible_vxres) . "\n"; } elsif ($arg eq "-h" || $arg eq "--help") { usage(); } else { usage("unknown option: $arg"); } } # find out how much video memory is available open(FBSET, "fbset -i|") || die "could not detect available video memory"; while () { if (/Size\s*:\s*(\d+)/) { $size = $1; last; } } if (!$size) { die "could not detect available video memory"; } # huge kludge (hey, that rhymes!) ... # subtract 16384 from the available memory $size # why? the default 640x480 mode uses all but 16384, and when I set it # to use more than that, it oopses (!). So... for safety's sake, and # because you probably don't use those 15-25 lines anyway... $size -= 16384; print "# modes.fb - video mode descriptions for fbset # # See fbset(8) and fb.modes(5) for more information "; $flag = 0; # read all XF86Config files while(<>) { chomp; next if !(($name, $clock, $xres, $xsyncstart, $xsyncend, $xfres, $yres, $ysyncstart, $ysyncend, $yfres, $extra) = /^\s*modeline\s+"([^"]+)"\s+([0-9.]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s*(.*)$/i); $flag = 1; # timing transformations, as described in the fb HOWTO $pixtime = int(1000000/$clock); $left = $xfres - $xsyncend; $right = $xsyncstart - $xres; $hsynclen = $xsyncend - $xsyncstart; $top = $yfres - $ysyncend; $bottom = $ysyncstart - $yres; $vsynclen = $ysyncend - $ysyncstart; # pick a virtual X and Y resolution $vxres = get_vxres($xres); if ($vxres < 0) { print STDERR "Could not guess a good virtual resolution for mode $name.\n"; print STDERR "Use the advanced options --rounding and --vxres.\n"; next; } $vyres = int($size/$vxres); # print out our entry print "mode \"$name\"\n"; print " geometry $xres $yres $vxres $vyres $depth\n"; print " timings $pixtime $left $right $top $bottom $hsynclen $vsynclen\n"; # handle extra options at the end of the modeline $extra =~ tr/A-Z/a-z/; @options = split/\s+/,$extra; foreach (@options) { if ($options_map{$_}) { print " $options_map{$_}\n"; } else { print " # unknown option: $_\n"; } } print "endmode\n\n"; } if (!$flag) { print STDERR "No modelines found.\n"; print STDERR "Make sure the file you specified was an XF86Config file and\n"; print STDERR "used the single-line Modeline format.\n\n"; print STDERR "Use \"$0 --help\" for help.\n"; } sub get_vxres { foreach (@possible_vxres) { return $_ if ($_ >= $_[0] && ($_ % $rounding) == 0); } return -1; } sub usage { print STDERR "$_[0]\n" if ($_[0]); print STDERR "$0 [OPTION] [FILES]\n\n"; print STDERR " -d,--depth depth use a certain display depth (default is 8)\n"; print STDERR " -h,--help what you see here\n\n"; print STDERR "Advanced options:\n"; print STDERR " -r,--rounding div vxres divisor (default is 128)\n"; print STDERR " -x,--vxres X,X,X,... extra possible vxres values\n\n"; print STDERR "[FILES] refers to one or more XF86Config files. Note that\n"; print STDERR "all modelines must be in single-line format.\n\n"; print STDERR "Example:\n"; print STDERR " $0 -d 16 /etc/X11/XF86Config\n"; exit 0; } fbset-2.1/modes.l100644 1750 1750 4461 6734165254 13411 0ustar kopteinkoptein /* * Linux Frame Buffer Device Configuration * * © Copyright 1995-1998 by Geert Uytterhoeven * (Geert.Uytterhoeven@cs.kuleuven.ac.be) * * -------------------------------------------------------------------------- * * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of the Linux * distribution for more details. */ %{ #define YYSTYPE long #include #include #include "fbset.h" #include "modes.tab.h" struct keyword { const char *name; int token; int value; }; static struct keyword keywords[] = { { "mode", MODE, 0 }, { "geometry", GEOMETRY, 0 }, { "timings", TIMINGS, 0 }, { "hsync", HSYNC, 0 }, { "vsync", VSYNC, 0 }, { "csync", CSYNC, 0 }, { "gsync", GSYNC, 0 }, { "extsync", EXTSYNC, 0 }, { "bcast", BCAST, 0 }, { "laced", LACED, 0 }, { "double", DOUBLE, 0 }, { "rgba", RGBA, 0 }, { "nonstd", NONSTD, 0 }, { "accel", ACCEL, 0 }, { "grayscale", GRAYSCALE, 0 }, { "endmode", ENDMODE, 0 }, { "low", POLARITY, LOW }, { "high", POLARITY, HIGH }, { "false", BOOLEAN, FALSE }, { "true", BOOLEAN, TRUE }, { "", -1, 0 } }; int line = 1; void yyerror(const char *s) { Die("%s:%d: %s\n", Opt_modedb, line, s); } int yywrap(void) { return 1; } static int FindToken(const char *s) { int i; for (i = 0; keywords[i].token > 0; i++) if (!strcasecmp(s, keywords[i].name)) { yylval = keywords[i].value; return keywords[i].token; } Die("%s:%d: Unknown keyword `%s'\n", Opt_modedb, line, s); } static const char *CopyString(const char *s) { int len; char *s2; len = strlen(s)-2; if (!(s2 = malloc(len+1))) Die("No memory\n"); strncpy(s2, s+1, len); s2[len] = '\0'; return s2; } %} keyword [a-zA-Z][a-zA-Z0-9]* number [0-9]* string \"[^\"\n]*\" comment \#([^\n]*) space [ \t]+ junk . %% {keyword} { return FindToken(yytext); } {number} { yylval = strtoul(yytext, NULL, 0); return NUMBER; } {string} { yylval = (unsigned long)CopyString(yytext); return STRING; } {comment}$ break; {space} break; \n { line++; break; } {junk} { Die("%s:%d: Invalid token `%s'\n", Opt_modedb, line, yytext); } %% fbset-2.1/modes.y100644 1750 1750 5416 6734165254 13427 0ustar kopteinkoptein/* * Linux Frame Buffer Device Configuration * * © Copyright 1995-1998 by Geert Uytterhoeven * (Geert.Uytterhoeven@cs.kuleuven.ac.be) * * -------------------------------------------------------------------------- * * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of the Linux * distribution for more details. */ %{ #define YYSTYPE long #include #include #include #include "fb.h" #include "fbset.h" extern int yylex(void); extern void yyerror(const char *s); extern int line; static struct VideoMode VideoMode; static void ClearVideoMode(void) { memset(&VideoMode, 0, sizeof(VideoMode)); VideoMode.accel_flags = FB_ACCELF_TEXT; } %} %start file %token MODE GEOMETRY TIMINGS HSYNC VSYNC CSYNC GSYNC EXTSYNC BCAST LACED DOUBLE RGBA NONSTD ACCEL GRAYSCALE ENDMODE POLARITY BOOLEAN STRING NUMBER %% file : vmodes ; vmodes : /* empty */ | vmodes vmode ; vmode : MODE STRING geometry timings options ENDMODE { VideoMode.name = (const char *)$2; AddVideoMode(&VideoMode); ClearVideoMode(); } ; geometry : GEOMETRY NUMBER NUMBER NUMBER NUMBER NUMBER { ClearVideoMode(); VideoMode.xres = $2; VideoMode.yres = $3; VideoMode.vxres = $4; VideoMode.vyres = $5; VideoMode.depth = $6; } ; timings : TIMINGS NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER { VideoMode.pixclock = $2; VideoMode.left = $3; VideoMode.right = $4; VideoMode.upper = $5; VideoMode.lower = $6; VideoMode.hslen = $7; VideoMode.vslen = $8; } ; options : /* empty */ | options hsync | options vsync | options csync | options gsync | options extsync | options bcast | options laced | options double | options rgba | options nonstd | options accel | options grayscale ; hsync : HSYNC POLARITY { VideoMode.hsync = $2; } ; vsync : VSYNC POLARITY { VideoMode.vsync = $2; } ; csync : CSYNC POLARITY { VideoMode.csync = $2; } ; gsync : GSYNC POLARITY { VideoMode.gsync = $2; } ; extsync : EXTSYNC BOOLEAN { VideoMode.extsync = $2; } ; bcast : BCAST BOOLEAN { VideoMode.bcast = $2; } ; laced : LACED BOOLEAN { VideoMode.laced = $2; } ; double : DOUBLE BOOLEAN { VideoMode.dblscan = $2; } ; rgba : RGBA STRING { makeRGBA(&VideoMode, (const char*)$2); } ; nonstd : NONSTD NUMBER { VideoMode.nonstd = $2; } ; accel : ACCEL BOOLEAN { VideoMode.accel_flags = $2; } ; grayscale : GRAYSCALE BOOLEAN { VideoMode.grayscale = $2; } ; %%