--- /dev/null
+;-----------------------------------------------------------\r
+;\r
+; MXSP.ASM - Set palette function\r
+; Copyright (c) 1993,1994 by Alessandro Scotti\r
+;\r
+;-----------------------------------------------------------\r
+WARN PRO\r
+INCLUDE MODEX.DEF\r
+\r
+PUBLIC mxSetPalette\r
+\r
+MX_TEXT SEGMENT USE16 PARA PUBLIC 'CODE'\r
+ ASSUME cs:MX_TEXT, ds:NOTHING, es:NOTHING\r
+\r
+;-----------------------------------------------------------\r
+;\r
+; Updates the VGA palette.\r
+;\r
+; Input:\r
+; Buffer = pointer to palette data (R,G,B)\r
+; Start = index of first color to set\r
+; Count = number of color to set\r
+; Output:\r
+; none\r
+;\r
+mxSetPalette PROC FAR\r
+ ARG Count:WORD, \\r
+ Start:WORD, \\r
+ Buffer:DWORD = ARG_SIZE\r
+ ASSUME ds:NOTHING\r
+ .enter 0\r
+ .push ds, si\r
+\r
+ lds si, [Buffer]\r
+ mov cx, [Count]\r
+ mov ax, [Start]\r
+ mov dx, 3C8h ; PEL write address register\r
+ out dx, al\r
+ inc dx\r
+ cld\r
+ cli ; Disable interrupts\r
+@@Loop:\r
+ lodsb\r
+ out dx, al ; Red\r
+ lodsb\r
+ out dx, al ; Green\r
+ lodsb\r
+ out dx, al ; Blue\r
+ loop @@Loop ; Loop until done\r
+ sti ; Enable interrupts\r
+\r
+ .pop ds, si\r
+ .leave ARG_SIZE\r
+mxSetPalette ENDP\r
+\r
+MX_TEXT ENDS\r
+END\r