📄 icw.c
字号:
/* * icw.c: * * RAMDAC definition for IC Works DACs. * This version only supports the 16-bit ZoomDAC (w30C516), which * is compatible with the AT&T 20C498. * This DAC exists in 110, 135 and 170 MHz versions. * It can do packed 24-bit color (BG-RB-GR). * The 170 MHz version has a PCLK limit of 135 MHz * (170 pixel clock for 16-bit path for 8bpp LUT). */#include <stdlib.h>#include <stdio.h>#include "libvga.h"#include "timing.h"#include "vgaregs.h"#include "driver.h" /* for __svgalib_driver_report */#include "ramdac.h"#ifdef INCLUDE_ICW_DAC_TESTstatic int ICW_probe(void){ unsigned char mi, di; _ramdac_dactocomm(); inb(PEL_MSK); /* Control register 0. */ mi = inb(PEL_MSK); /* Manufacturer ID. */ di = inb(PEL_MSK); /* Device ID. */ if (mi == 0x84) { if (di == 0x98) return 1; printf("svgalib: ICW_probe: Unknown IC Works DAC.\n"); } return 0;}#else#define ICW_probe 0#endif#ifdef INCLUDE_ICW_DACstatic void ICW_init(void){ if (__svgalib_driver_report) printf("svgalib: Using IC Works DAC (AT&T20C498-compatible).\n");}static int ICW_map_clock(int bpp, int pixelclock){ if (bpp == 8 && pixelclock > 80000) /* Use 16-bit path, clock doubling at RAMDAC. */ return pixelclock / 2; if (bpp == 16) return pixelclock; if (bpp == 24) /* Use the packed 24-bit mode. */ return pixelclock * 3 / 2; if (bpp == 32) return pixelclock * 2; return pixelclock;}static int ICW_map_horizontal_crtc(int bpp, int pixelclock, int htiming){ /* Not sure. */ if (bpp == 8 && pixelclock > 80000) /* Use 16-bit path, clock doubling at RAMDAC. */ return htiming / 2; if (bpp == 24) return htiming * 3 / 2; if (bpp == 32) return htiming * 2; return htiming;}static void ICW_initializestate(unsigned char *regs, int bpp, int colormode, int pixelclock){ regs[0] = 0; if (colormode == CLUT8_8) regs[0] = 0x02; if (colormode == RGB16_555) regs[0] = 0x10; if (colormode == RGB16_565) regs[0] = 0x30; if (colormode == RGB24_888_B) /* Packed mode. */ regs[0] = 0xB0; if (colormode == RGB32_888_B) regs[0] = 0x50;}static void ICW_qualify_cardspecs(CardSpecs * cardspecs, int dacspeed){ dacspeed = __svgalib_setDacSpeed(dacspeed, 110000); cardspecs->maxPixelClock4bpp = 0; cardspecs->maxPixelClock8bpp = dacspeed; cardspecs->maxPixelClock16bpp = dacspeed; cardspecs->maxPixelClock24bpp = dacspeed * 2 / 3; cardspecs->maxPixelClock32bpp = dacspeed / 2; cardspecs->mapClock = ICW_map_clock; cardspecs->mapHorizontalCrtc = ICW_map_horizontal_crtc;}DacMethods __svgalib_ICW_methods ={ IC_WORKS, "IC Works DAC", 0, ICW_probe, ICW_init, ICW_qualify_cardspecs, __svgalib_Sierra_32K_savestate, __svgalib_Sierra_32K_restorestate, ICW_initializestate, 1 /* State size. */};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -