]> 4ch.mooo.com Git - 16.git/blobdiff - 16/x_/mxll.asm
wwww
[16.git] / 16 / x_ / mxll.asm
diff --git a/16/x_/mxll.asm b/16/x_/mxll.asm
new file mode 100755 (executable)
index 0000000..34fec04
--- /dev/null
@@ -0,0 +1,82 @@
+;-----------------------------------------------------------\r
+;\r
+; MXLL.ASM - Load latches\r
+; Copyright (c) 1993,1994 by Alessandro Scotti\r
+;\r
+;-----------------------------------------------------------\r
+WARN    PRO\r
+INCLUDE MODEX.DEF\r
+\r
+PUBLIC  mxLoadLatches\r
+\r
+MX_TEXT         SEGMENT USE16 PARA PUBLIC 'CODE'\r
+                ASSUME cs:MX_TEXT, ds:NOTHING, es:NOTHING\r
+\r
+EXTRN   mx_VideoSegment : WORD\r
+\r
+;-----------------------------------------------------------\r
+;\r
+; Loads the specified value into the VGA latches.\r
+;\r
+; Input:\r
+;       BL      = value to load into latches\r
+; Output:\r
+;       none\r
+; Changes:\r
+;       bit mask register to FFh;\r
+;       function select register to "move";\r
+;       write mode to 00h.\r
+; Note:\r
+;       this is for internal use only.\r
+;\r
+mxLoadLatches   PROC    NEAR\r
+        ASSUME  ds:NOTHING\r
+\r
+        .push   ds, si\r
+        mov     dx, GDC\r
+        mov     ax, 0FF08h\r
+        out     dx, ax                  ; Set bit mask to FFh\r
+        mov     ax, 0003h\r
+        out     dx, ax                  ; Set function to "move"\r
+        mov     ax, 0005h\r
+        out     dx, ax                  ; Set write mode\r
+        mov     ax, [mx_VideoSegment]\r
+        mov     ds, ax\r
+        mov     si, 0FFFFh\r
+        mov     bh, 8                   ; BH = write plane mask\r
+        mov     cx, 3                   ; CX = count = read plane\r
+; Saves old values and force BL into latches\r
+@@SetLoop:\r
+        mov     dx, GDC\r
+        mov     al, 04h\r
+        mov     ah, cl\r
+        out     dx, ax                  ; Select read plane\r
+        mov     dx, TS\r
+        mov     al, 02h\r
+        mov     ah, bh\r
+        out     dx, ax                  ; Select write plane\r
+        mov     al, ds:[si]\r
+        push    ax\r
+        mov     ds:[si], bl\r
+        mov     al, ds:[di]             ; Force value into latch\r
+        shr     bh, 1                   ; Next write plane\r
+        loop    @@SetLoop\r
+; Restore previous values\r
+        mov     cx, 3\r
+        mov     bh, 8\r
+        mov     dx, TS\r
+@@ResetLoop:\r
+        mov     al, 02h\r
+        mov     ah, bh\r
+        out     dx, ax                  ; Select write plane\r
+        pop     ax\r
+        mov     ds:[si], al\r
+        shr     bh, 1                   ; Next write plane\r
+        loop    @@ResetLoop\r
+; Exit\r
+        .pop    ds, si\r
+        ret\r
+mxLoadLatches   ENDP\r
+\r
+MX_TEXT         ENDS\r
+END\r