+++ /dev/null
-.387
- 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