From: Kevin D. Quitt (KQuitt@ieeinc.com)
Date: Wed 06 Jun 2001 - 05:10:25 IDT
The built-in routine to set the palette takes 8 milliseconds on my machine; this is way too slow - it is possible to write the palette entirely during the vertical blanking period. This code works for DOS: push ds mov dx, 0x3D6 // Select XR14 mov al, 0x14 out dx, al mov dx, 0x3D7 // Enable VSYNC, Retrace, and HSYNC in al, dx and al, 0x8F or al, 0x50 out dx, al in al, dx mov dx, 0x3DA // Wait for Vertical retrace loop0: in al, dx and al, 0x08 jz loop0 mov dx, 0x3C8 // Send the palette mov al, 0 out dx, al mov cx, 768 lds si, pal mov dx, 0x3C9 rep outsb pop ds I've translated it to: void setPalette( uchar *thePalette ) { uchar stat; outb( 0x3D6, 0x14 ); // Select XR14 stat = inb( 0x3D7 ) & 0x8F; // Enable VSYNC, Retrace, and HSYNC outb( 0x3D7, stat | 0x50 ); while ( inb( 0x3D7 ) & 0x08 ) continue; outb( 0x3C8, 0 ); // Send the palette /* How do I put in the in-line assembly here? */ } -- _ Kevin D. Quitt KQuitt@ieeinc.com 96.37% of all statistics are made up ------------------------------------------------------------------ Unsubscribe: To: listbot@svgalib.org Body: unsubscribe linux-svgalib
This archive was generated by hypermail 2.1.4 : Wed 21 Jan 2004 - 22:10:24 IST