{ > Any one out there have code to do this > > Rotate_PAL_Up(count : byte; from,to: byte): > ie. Rotate_Pal_Up(10,100,120); > will rotate the pal up 10 times between the ranges of 100 and 12 > back after 120... > > Rotate_Pal_Down(c,f,t : byte); basicly same as abov! Thanks! You asked for the palette cycling routine, here you are! As you can see, there is NO cycling routine in this piece of code which does all the job. There are several smaller routines (GetRGB, SetRGB etc.) and then the actual cycling routine which uses other smaller routines. That's because all these routines are from my own vga util library and I was too lazy to put them to together to a one piece of code... :) } Program CyclePaletteExample; Uses crt; Type PaletteType = Record red : Byte; green : Byte; blue : Byte; End; Var rgb : PaletteType; pal : Array [0..255] of PaletteType; Var aa1 : Word; {Some temp variables} aa5 : Byte; Procedure SetRGB(col, r, g, b : Byte); Begin ASM CLI END; Port[$3C8] := col; Port[$3C9] := r; Port[$3C9] := g; Port[$3C9] := b; ASM STI END; End; Procedure GetRGB(col : Byte); Begin Port[$3C7] := col; rgb.red := Port[$3C9]; rgb.green := Port[$3C9]; rgb.blue := Port[$3C9]; End; Procedure SetPalette; Begin For aa5 := 0 to 255 Do SetRGB(aa5,pal[aa5].red,pal[aa5].green,pal[aa5].blue); End; Procedure GetPalette; Begin For aa5 := 0 to 255 Do Begin GetRGB(aa5); pal[aa5] := rgb; End; End; Procedure CyclePalette(s, e, n, d : Byte); Var c1 : PaletteType; Begin If d = 1 then Begin aa1 := 0; Repeat c1 := pal[e]; For aa5 := e downto s + 1 Do Begin pal[aa5] := pal[aa5 - 1]; End; pal[s] := c1; Inc(aa1); SetPalette; {Sets cycled palette} Until aa1 = n; End; If d = 2 then Begin aa1 := 0; Repeat c1 := pal[s]; For aa5 := s to e - 1 Do Begin pal[aa5] := pal[aa5 + 1]; End; pal[e] := c1; Inc(aa1); SetPalette; {Sets cycled palette} Until aa1 = n; End; End; Begin ASM MOV AX,$13 {Video mode is now 13h = 320 x 200 and 256 colors} INT $10 End; For aa1 := 0 to 255 Do Mem[$A000:aa1] := aa1; {Draw 255 pixels} GetPalette; {Loads palette from vga's registers} Repeat CyclePalette(1,255,1,1); {Palette cycling!} Until KeyPressed; {Press any key to continue! :)} ASM MOV AX,$3 {Back to the text mode} INT $10 End; End. { Example: CyclePalette(120, 140, 10, 1) would rotate colors between the ranges 120 and 140 10 times. The last parameter (d) is the direction of palette rotation: 1 From the first specified color to the last specified color 2 From the last specified color to the first specified color }