]> 4ch.mooo.com Git - 16.git/blob - 16/x/mxpp.asm
more
[16.git] / 16 / x / mxpp.asm
1 ;-----------------------------------------------------------\r
2 ;\r
3 ; MXPP.ASM - Get/put pixel functions\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  mxGetPixel\r
11 PUBLIC  mxPutPixel\r
12 \r
13 MX_TEXT         SEGMENT USE16 PARA PUBLIC 'CODE'\r
14                 ASSUME cs:MX_TEXT, ds:NOTHING, es:NOTHING\r
15 \r
16 EXTRN   mx_BytesPerLine : WORD\r
17 EXTRN   mx_VideoSegment : WORD\r
18 EXTRN   mx_ClipX1       : WORD\r
19 EXTRN   mx_ClipY1       : WORD\r
20 EXTRN   mx_ClipX2       : WORD\r
21 EXTRN   mx_ClipY2       : WORD\r
22 \r
23 ;-----------------------------------------------------------\r
24 ;\r
25 ; Gets a pixel.\r
26 ;\r
27 ; Input:\r
28 ;       X, Y    = pixel coordinates\r
29 ; Output:\r
30 ;       pixel color\r
31 ;\r
32 mxGetPixel      PROC    FAR\r
33         ARG     Y:WORD,                 \\r
34                 X:WORD                  = ARG_SIZE\r
35         ASSUME  ds:NOTHING\r
36         .enter  0\r
37         .push   ds, si\r
38 \r
39         xor     ax, ax\r
40         mov     si, [X]\r
41         cmp     si, [mx_ClipX1]\r
42         jl      @@Exit\r
43         cmp     si, [mx_ClipX2]\r
44         jg      @@Exit\r
45         mov     bx, [Y]\r
46         cmp     bx, [mx_ClipY1]\r
47         jl      @@Exit\r
48         cmp     bx, [mx_ClipY2]\r
49         jg      @@Exit\r
50 \r
51         mov     al, 04h                 ; Set read plane\r
52         mov     ah, BYTE PTR [X]\r
53         and     ah, 3\r
54         mov     dx, GDC\r
55         out     dx, ax\r
56 \r
57         mov     ds, [mx_VideoSegment]\r
58         mov     ax, bx\r
59         mul     [mx_BytesPerLine]\r
60         .shr    si, 2\r
61         add     si, ax\r
62 \r
63         mov     al, ds:[si]             ; Get pixel value\r
64         xor     ah, ah\r
65 \r
66 @@Exit:\r
67         .pop    ds, si\r
68         .leave  ARG_SIZE\r
69 mxGetPixel      ENDP\r
70 \r
71 ;-----------------------------------------------------------\r
72 ;\r
73 ; Puts a pixel of the specified color.\r
74 ;\r
75 ; Input:\r
76 ;       X, Y    = pixel coordinates\r
77 ;       Color   = pixel color\r
78 ; Output:\r
79 ;       none\r
80 ;\r
81 mxPutPixel      PROC    FAR\r
82         ARG     Color:BYTE:2,           \\r
83                 Y:WORD,                 \\r
84                 X:WORD                  = ARG_SIZE\r
85         .enter  0\r
86         .push   ds, si\r
87 \r
88         mov     si, [X]\r
89         cmp     si, [mx_ClipX1]\r
90         jl      @@Exit\r
91         cmp     si, [mx_ClipX2]\r
92         jg      @@Exit\r
93         mov     ax, [Y]\r
94         cmp     ax, [mx_ClipY1]\r
95         jl      @@Exit\r
96         cmp     ax, [mx_ClipY2]\r
97         jg      @@Exit\r
98 \r
99         mov     ds, [mx_VideoSegment]\r
100         mul     [mx_BytesPerLine]\r
101         .shr    si, 2\r
102         add     si, ax\r
103 \r
104         mov     cl, BYTE PTR [X]        ; Set write plane\r
105         and     cl, 3\r
106         mov     ax, 0102h\r
107         shl     ah, cl\r
108         mov     dx, TS\r
109         out     dx, ax\r
110 \r
111         mov     al, [Color]             ; Write pixel\r
112         mov     ds:[si], al\r
113 \r
114 @@Exit:\r
115         xor     ax, ax\r
116         .pop    ds, si\r
117         .leave  ARG_SIZE\r
118 mxPutPixel      ENDP\r
119 \r
120 MX_TEXT         ENDS\r
121 END\r