]> 4ch.mooo.com Git - 16.git/blobdiff - 16/x_/mxsp.asm
refresh wwww
[16.git] / 16 / x_ / mxsp.asm
diff --git a/16/x_/mxsp.asm b/16/x_/mxsp.asm
new file mode 100755 (executable)
index 0000000..1d08e71
--- /dev/null
@@ -0,0 +1,57 @@
+;-----------------------------------------------------------\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