--- /dev/null
+.387
+ PUBLIC MXPUTTILE
+ PUBLIC MXTRANSPUTTILE
+ EXTRN MX_BYTESPERLINE:BYTE
+ EXTRN MX_VIDEOSEGMENT:BYTE
+MX_TEXT SEGMENT PARA PUBLIC USE16 'CODE'
+ ASSUME CS:MX_TEXT, DS:DGROUP, SS:DGROUP
+MXPUTTILE:
+ push bp
+ mov bp,sp
+ sub sp,0
+ push ds
+ push si
+ push es
+ push di
+ mov ax,word ptr 0aH[bp]
+ mul word ptr cs:MX_BYTESPERLINE
+ mov di,word ptr 0cH[bp]
+ shr di,1
+ shr di,1
+ add di,ax
+ mov es,word ptr cs:MX_VIDEOSEGMENT
+ lds si,dword ptr 0eH[bp]
+ shr word ptr 8[bp],1
+ shr word ptr 8[bp],1
+ mov cl,byte ptr 0cH[bp]
+ and cl,3
+ mov ah,11H
+ shl ah,cl
+ mov word ptr 0aH[bp],4
+ mov bx,word ptr cs:MX_BYTESPERLINE
+ sub bx,word ptr 8[bp]
+L$1:
+ mov al,2
+ mov dx,3c4H
+ out dx,ax
+ mov word ptr 0cH[bp],di
+ mov dx,word ptr 6[bp]
+L$2:
+ mov cx,word ptr 8[bp]
+ shr cx,1
+ rep movsw
+ rcl cx,1
+ rep movsb
+ add di,bx
+ dec dx
+ jne L$2
+ mov di,word ptr 0cH[bp]
+ rol ah,1
+ adc di,0
+ dec word ptr 0aH[bp]
+ jne L$1
+ xor ax,ax
+ pop di
+ pop es
+ pop si
+ pop ds
+ mov sp,bp
+ pop bp
+ retf 0cH
+MXTRANSPUTTILE:
+ push bp
+ mov bp,sp
+ sub sp,0
+ push ds
+ push si
+ push es
+ push di
+ mov ax,word ptr 0aH[bp]
+ mul word ptr cs:MX_BYTESPERLINE
+ mov di,word ptr 0cH[bp]
+ shr di,1
+ shr di,1
+ add di,ax
+ mov es,word ptr cs:MX_VIDEOSEGMENT
+ lds si,dword ptr 0eH[bp]
+ shr word ptr 8[bp],1
+ shr word ptr 8[bp],1
+ mov cl,byte ptr 0cH[bp]
+ and cl,3
+ mov ah,11H
+ shl ah,cl
+ mov word ptr 0aH[bp],4
+ mov bx,word ptr cs:MX_BYTESPERLINE
+ sub bx,word ptr 8[bp]
+L$3:
+ mov al,2
+ mov dx,3c4H
+ out dx,ax
+ mov word ptr 0cH[bp],di
+ mov dx,word ptr 6[bp]
+L$4:
+ mov cx,word ptr 8[bp]
+ jcxz L$7
+L$5:
+ mov al,byte ptr [si]
+ test al,al
+ je L$6
+ mov byte ptr es:[di],al
+L$6:
+ inc si
+ inc di
+ dec cx
+ jne L$5
+L$7:
+ add di,bx
+ dec dx
+ jne L$4
+ mov di,word ptr 0cH[bp]
+ rol ah,1
+ adc di,0
+ dec word ptr 0aH[bp]
+ jne L$3
+ xor ax,ax
+ pop di
+ pop es
+ pop si
+ pop ds
+ mov sp,bp
+ pop bp
+ retf 0cH
+MX_TEXT ENDS
+ END