]> 4ch.mooo.com Git - 16.git/blobdiff - 16/xw__/mxbb.asm
trying to translate that lib into open watcom...
[16.git] / 16 / xw__ / mxbb.asm
diff --git a/16/xw__/mxbb.asm b/16/xw__/mxbb.asm
new file mode 100755 (executable)
index 0000000..a403c63
--- /dev/null
@@ -0,0 +1,208 @@
+.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