]> 4ch.mooo.com Git - 16.git/blob - 16/x/mxhl.asm
cleaned up the repo from debugging watcom2 ^^
[16.git] / 16 / x / mxhl.asm
1 ;-----------------------------------------------------------\r
2 ;\r
3 ; MXHL.ASM - Horizontal line mask utility\r
4 ; Copyright (c) 1993,1994 by Alessandro Scotti\r
5 ;\r
6 ;-----------------------------------------------------------\r
7 WARN    PRO\r
8 INCLUDE MODEX.DEF\r
9 \r
10 PUBLIC  subHorizontalLineInfo\r
11 \r
12 MX_TEXT         SEGMENT USE16 PARA PUBLIC 'CODE'\r
13                 ASSUME cs:MX_TEXT, ds:NOTHING, es:NOTHING\r
14 \r
15 EXTRN   mx_BytesPerLine : WORD\r
16 \r
17 tblLeftSize     DW      00h, 03h, 02h, 01h\r
18 tblLeftMask     DB      00h, 0Eh, 0Ch, 08h\r
19 tblRightMask    DB      00h, 01h, 03h, 07h\r
20 tblPatchMask    DB      02h, 06h\r
21 \r
22 ;-----------------------------------------------------------\r
23 ;\r
24 ; Prepares register for fast horizontal line drawing.\r
25 ;\r
26 ; Input:\r
27 ;       BX, AX  = X, Y address of left pixel\r
28 ;       CX      = line width\r
29 ; Output:\r
30 ;       DI      = left pixel offset in video memory\r
31 ;       AL      = left block write plane mask (0 = none)\r
32 ;       AH      = right block write plane mask (0 = none)\r
33 ;       CX      = center block width in 4-pixel blocks\r
34 ;\r
35 subHorizontalLineInfo   PROC NEAR\r
36         ASSUME  ds:NOTHING\r
37 \r
38         mul     [mx_BytesPerLine]\r
39         mov     di, bx\r
40         shr     di, 1\r
41         shr     di, 1\r
42         add     di, ax                  ; Offset of left pixel\r
43 \r
44         and     bx, 03h\r
45         mov     al, tblLeftMask[bx]\r
46         shl     bx, 1\r
47         sub     cx, tblLeftSize[bx]\r
48         jge     @@1                     ; Ok to continue\r
49 \r
50 ; Special case: start and end in the middle of a 4-pixel block.\r
51 ; There are only three cases:\r
52 ;    Pixels     Left mask       CX      CX+2    Patch mask      Result\r
53 ; 1)  ..o.        ..xx          -1      1       .xx.            ..x.\r
54 ; 2)  .oo.        .xxx          -1      1       .xx.            .xx.\r
55 ; 3)  .o..        .xxx          -2      0       .x..            .x..\r
56 ; All other cases are automatically handled with the standard masks.\r
57         mov     bx, cx\r
58         inc     bx\r
59         inc     bx\r
60         and     al, tblPatchMask[bx]    ; Combine masks\r
61         xor     ah, ah                  ; No right block\r
62         xor     cx, cx                  ; No center block\r
63         jmp     @@Exit\r
64 \r
65 @@1:\r
66         mov     bx, cx\r
67         and     bx, 03h\r
68         mov     ah, tblRightMask[bx]\r
69         shr     cx, 2\r
70 \r
71 @@Exit:\r
72         ret\r
73 subHorizontalLineInfo   ENDP\r
74 \r
75 MX_TEXT         ENDS\r
76 END\r