+++ /dev/null
-;-----------------------------------------------------------\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