]> 4ch.mooo.com Git - 16.git/blob - 16/xw/mxll.asm
16_ca needs huge amounts of work and I should remember what needs to be done soon...
[16.git] / 16 / xw / mxll.asm
1 ;-----------------------------------------------------------\r
2 ;\r
3 ; MXLL.ASM - Load latches\r
4 ; Copyright (c) 1993,1994 by Alessandro Scotti\r
5 ;\r
6 ;-----------------------------------------------------------\r
7 WARN    PRO\r
8 INCLUDE MODEX.DEF\r
9 \r
10 PUBLIC  mxLoadLatches\r
11 \r
12 MX_TEXT         SEGMENT USE16 PARA PUBLIC 'CODE'\r
13                 ASSUME cs:MX_TEXT, ds:NOTHING, es:NOTHING\r
14 \r
15 EXTRN   mx_VideoSegment : WORD\r
16 \r
17 ;-----------------------------------------------------------\r
18 ;\r
19 ; Loads the specified value into the VGA latches.\r
20 ;\r
21 ; Input:\r
22 ;       BL      = value to load into latches\r
23 ; Output:\r
24 ;       none\r
25 ; Changes:\r
26 ;       bit mask register to FFh;\r
27 ;       function select register to "move";\r
28 ;       write mode to 00h.\r
29 ; Note:\r
30 ;       this is for internal use only.\r
31 ;\r
32 mxLoadLatches   PROC    NEAR\r
33         ASSUME  ds:NOTHING\r
34 \r
35         .push   ds, si\r
36         mov     dx, GDC\r
37         mov     ax, 0FF08h\r
38         out     dx, ax                  ; Set bit mask to FFh\r
39         mov     ax, 0003h\r
40         out     dx, ax                  ; Set function to "move"\r
41         mov     ax, 0005h\r
42         out     dx, ax                  ; Set write mode\r
43         mov     ax, [mx_VideoSegment]\r
44         mov     ds, ax\r
45         mov     si, 0FFFFh\r
46         mov     bh, 8                   ; BH = write plane mask\r
47         mov     cx, 3                   ; CX = count = read plane\r
48 ; Saves old values and force BL into latches\r
49 @@SetLoop:\r
50         mov     dx, GDC\r
51         mov     al, 04h\r
52         mov     ah, cl\r
53         out     dx, ax                  ; Select read plane\r
54         mov     dx, TS\r
55         mov     al, 02h\r
56         mov     ah, bh\r
57         out     dx, ax                  ; Select write plane\r
58         mov     al, ds:[si]\r
59         push    ax\r
60         mov     ds:[si], bl\r
61         mov     al, ds:[di]             ; Force value into latch\r
62         shr     bh, 1                   ; Next write plane\r
63         loop    @@SetLoop\r
64 ; Restore previous values\r
65         mov     cx, 3\r
66         mov     bh, 8\r
67         mov     dx, TS\r
68 @@ResetLoop:\r
69         mov     al, 02h\r
70         mov     ah, bh\r
71         out     dx, ax                  ; Select write plane\r
72         pop     ax\r
73         mov     ds:[si], al\r
74         shr     bh, 1                   ; Next write plane\r
75         loop    @@ResetLoop\r
76 ; Exit\r
77         .pop    ds, si\r
78         ret\r
79 mxLoadLatches   ENDP\r
80 \r
81 MX_TEXT         ENDS\r
82 END\r