--- /dev/null
+;-----------------------------------------------------------\r
+;\r
+; MXPP.ASM - Get/put pixel functions\r
+; Copyright (c) 1993,1994 by Alessandro Scotti\r
+;\r
+;-----------------------------------------------------------\r
+WARN PRO\r
+INCLUDE MODEX.DEF\r
+\r
+PUBLIC mxGetPixel\r
+PUBLIC mxPutPixel\r
+\r
+MX_TEXT SEGMENT USE16 PARA PUBLIC 'CODE'\r
+ ASSUME cs:MX_TEXT, ds:NOTHING, es:NOTHING\r
+\r
+EXTRN mx_BytesPerLine : WORD\r
+EXTRN mx_VideoSegment : WORD\r
+EXTRN mx_ClipX1 : WORD\r
+EXTRN mx_ClipY1 : WORD\r
+EXTRN mx_ClipX2 : WORD\r
+EXTRN mx_ClipY2 : WORD\r
+\r
+;-----------------------------------------------------------\r
+;\r
+; Gets a pixel.\r
+;\r
+; Input:\r
+; X, Y = pixel coordinates\r
+; Output:\r
+; pixel color\r
+;\r
+mxGetPixel PROC FAR\r
+ ARG Y:WORD, \\r
+ X:WORD = ARG_SIZE\r
+ ASSUME ds:NOTHING\r
+ .enter 0\r
+ .push ds, si\r
+\r
+ xor ax, ax\r
+ mov si, [X]\r
+ cmp si, [mx_ClipX1]\r
+ jl @@Exit\r
+ cmp si, [mx_ClipX2]\r
+ jg @@Exit\r
+ mov bx, [Y]\r
+ cmp bx, [mx_ClipY1]\r
+ jl @@Exit\r
+ cmp bx, [mx_ClipY2]\r
+ jg @@Exit\r
+\r
+ mov al, 04h ; Set read plane\r
+ mov ah, BYTE PTR [X]\r
+ and ah, 3\r
+ mov dx, GDC\r
+ out dx, ax\r
+\r
+ mov ds, [mx_VideoSegment]\r
+ mov ax, bx\r
+ mul [mx_BytesPerLine]\r
+ .shr si, 2\r
+ add si, ax\r
+\r
+ mov al, ds:[si] ; Get pixel value\r
+ xor ah, ah\r
+\r
+@@Exit:\r
+ .pop ds, si\r
+ .leave ARG_SIZE\r
+mxGetPixel ENDP\r
+\r
+;-----------------------------------------------------------\r
+;\r
+; Puts a pixel of the specified color.\r
+;\r
+; Input:\r
+; X, Y = pixel coordinates\r
+; Color = pixel color\r
+; Output:\r
+; none\r
+;\r
+mxPutPixel PROC FAR\r
+ ARG Color:BYTE:2, \\r
+ Y:WORD, \\r
+ X:WORD = ARG_SIZE\r
+ .enter 0\r
+ .push ds, si\r
+\r
+ mov si, [X]\r
+ cmp si, [mx_ClipX1]\r
+ jl @@Exit\r
+ cmp si, [mx_ClipX2]\r
+ jg @@Exit\r
+ mov ax, [Y]\r
+ cmp ax, [mx_ClipY1]\r
+ jl @@Exit\r
+ cmp ax, [mx_ClipY2]\r
+ jg @@Exit\r
+\r
+ mov ds, [mx_VideoSegment]\r
+ mul [mx_BytesPerLine]\r
+ .shr si, 2\r
+ add si, ax\r
+\r
+ mov cl, BYTE PTR [X] ; Set write plane\r
+ and cl, 3\r
+ mov ax, 0102h\r
+ shl ah, cl\r
+ mov dx, TS\r
+ out dx, ax\r
+\r
+ mov al, [Color] ; Write pixel\r
+ mov ds:[si], al\r
+\r
+@@Exit:\r
+ xor ax, ax\r
+ .pop ds, si\r
+ .leave ARG_SIZE\r
+mxPutPixel ENDP\r
+\r
+MX_TEXT ENDS\r
+END\r