PUBLIC MXBITBLT EXTRN SUBHORIZONTALLINEINFO:BYTE EXTRN MX_VIDEOSEGMENT:BYTE EXTRN MX_BYTESPERLINE:BYTE MX_TEXT SEGMENT PARA PUBLIC USE16 'CODE' ASSUME CS:MX_TEXT, DS:DGROUP, SS:DGROUP MXBITBLT: push bp mov bp,sp sub sp,16H push ds push si push es push di cmp word ptr 0cH[bp],0 je L$2 mov ax,word ptr 10H[bp] and al,3 mov dx,word ptr 8[bp] and dl,3 mov bx,offset L$10 cmp al,dl jne L$1 mov bx,offset L$3 L$1: call bx L$2: xor ax,ax pop di pop es pop si pop ds mov sp,bp pop bp retf 0cH L$3: mov bx,word ptr 8[bp] mov ax,word ptr 6[bp] mov cx,word ptr 0cH[bp] call near ptr MX_TEXT:SUBHORIZONTALLINEINFO mov byte ptr -14H[bp],al mov byte ptr -16H[bp],ah mov word ptr 0cH[bp],cx mov ax,word ptr cs:MX_VIDEOSEGMENT mov ds,ax mov es,ax mov ax,word ptr 0eH[bp] mul word ptr cs:MX_BYTESPERLINE mov si,word ptr 10H[bp] shr si,1 shr si,1 add si,ax mov dx,3ceH mov ax,4105H out dx,ax cld mov ah,byte ptr -14H[bp] or ah,ah je L$5 mov dx,3c4H mov al,2 out dx,ax mov ax,word ptr cs:MX_BYTESPERLINE dec ax mov cx,word ptr 0aH[bp] push si push di L$4: movsb add si,ax add di,ax dec cx jne L$4 pop di pop si inc si inc di L$5: mov bx,word ptr 0cH[bp] test bx,bx je L$7 mov dx,3c4H mov ax,0f02H out dx,ax mov ax,word ptr cs:MX_BYTESPERLINE sub ax,bx mov dx,word ptr 0aH[bp] push si push di L$6: mov cx,bx rep movsb add si,ax add di,ax dec dx jne L$6 pop di pop si add si,bx add di,bx L$7: mov ah,byte ptr -16H[bp] or ah,ah je L$9 mov dx,3c4H mov al,2 out dx,ax mov ax,word ptr cs:MX_BYTESPERLINE dec ax mov cx,word ptr 0aH[bp] L$8: movsb add si,ax add di,ax dec cx jne L$8 L$9: mov dx,3ceH mov ax,4005H out dx,ax ret L$10: mov cx,word ptr 0cH[bp] mov bx,cx shr bx,1 shr bx,1 and cl,3 mov al,8 shr al,cl mov si,6 L$11: mov word ptr -8[bp+si],bx shr al,1 adc bx,0 dec si dec si jge L$11 mov ax,word ptr cs:MX_VIDEOSEGMENT mov ds,ax mov es,ax mov ax,word ptr 0eH[bp] mul word ptr cs:MX_BYTESPERLINE mov si,word ptr 10H[bp] shr si,1 shr si,1 add si,ax mov word ptr -0aH[bp],si mov ax,word ptr 6[bp] mul word ptr cs:MX_BYTESPERLINE mov di,word ptr 8[bp] shr di,1 shr di,1 add di,ax mov word ptr -0cH[bp],di mov ax,word ptr 10H[bp] and al,3 mov byte ptr -10H[bp],al mov cx,word ptr 8[bp] and cl,3 mov al,11H shl al,cl mov byte ptr -12H[bp],al cld mov byte ptr -0eH[bp],4 lea bx,-8[bp] L$12: cmp word ptr ss:[bx],0 je L$15 mov ah,byte ptr -12H[bp] and ah,0fH mov al,2 mov dx,3c4H out dx,ax mov ah,byte ptr -10H[bp] mov al,4 mov dx,3ceH out dx,ax mov dx,word ptr 0aH[bp] mov ax,word ptr cs:MX_BYTESPERLINE sub ax,word ptr ss:[bx] L$13: mov cx,word ptr ss:[bx] shr cx,1 rep movsw rcl cx,1 rep movsb add si,ax add di,ax dec dx jne L$13 inc bx inc bx inc byte ptr -10H[bp] and byte ptr -10H[bp],3 jne L$14 inc word ptr -0aH[bp] L$14: rol byte ptr -12H[bp],1 adc word ptr -0cH[bp],0 mov si,word ptr -0aH[bp] mov di,word ptr -0cH[bp] dec byte ptr -0eH[bp] jne L$12 L$15: ret MX_TEXT ENDS END