]> 4ch.mooo.com Git - 16.git/blobdiff - 16/xlib/xline.asm
wwww
[16.git] / 16 / xlib / xline.asm
index 6c9c5c56c0421726f7355e80805b13312fb278eb..910c1fc9c13be1b844e81ab8586ed288c2d208cb 100755 (executable)
@@ -26,9 +26,10 @@ ModeXAddr       macro
        mov     dx,[_ScrnLogicalByteWidth]\r
        mul     dx\r
        pop     dx\r
-       shr     bx,2\r
+       shr     bx,1\r
+       shr     bx,1\r
        add     bx,ax\r
-       add     bx,[PgOffs]\r
+       add     bx,[bp+14]\r
        and     cl,3\r
        endm\r
 \r
@@ -44,7 +45,7 @@ ModeXAddr       macro
 ;\r
 \r
 _x_line        proc\r
-ARG     x1:word,y1:word,x2:word,y2:word,Color:word,PgOffs:word\r
+;ARG     x1:word,y1:word,x2:word,y2:word,Color:word,PgOffs:word\r
 LOCAL   vertincr:word,incr1:word,incr2:word,routine:word=LocalStk\r
        push    bp              ; Set up stack frame\r
        mov     bp,sp\r
@@ -60,8 +61,8 @@ LOCAL   vertincr:word,incr1:word,incr2:word,routine:word=LocalStk
 ; check for vertical line\r
 \r
        mov     si,[_ScrnLogicalByteWidth]\r
-       mov     cx,[x2]\r
-       sub     cx,[x1]\r
+       mov     cx,[bp+8]\r
+       sub     cx,[bp+4]\r
        jz      VertLine\r
 \r
 ; force x1 < x2\r
@@ -70,19 +71,19 @@ LOCAL   vertincr:word,incr1:word,incr2:word,routine:word=LocalStk
 \r
        neg     cx\r
 \r
-       mov     bx,[x2]\r
-       xchg    bx,[x1]\r
-       mov     [x2],bx\r
+       mov     bx,[bp+8]\r
+       xchg    bx,[bp+4]\r
+       mov     [bp+8],bx\r
 \r
-       mov     bx,[y2]\r
-       xchg    bx,[y1]\r
-       mov     [y2],bx\r
+       mov     bx,[bp+10]\r
+       xchg    bx,[bp+6]\r
+       mov     [bp+10],bx\r
 \r
 ; calc dy = abs(y2 - y1)\r
 \r
 L01:\r
-       mov     bx,[y2]\r
-       sub     bx,[y1]\r
+       mov     bx,[bp+10]\r
+       sub     bx,[bp+6]\r
        jnz     short skip\r
        jmp     HorizLine\r
 skip:          jns     L03\r
@@ -113,14 +114,17 @@ L04:
 ; calc first pixel address\r
 \r
        push    cx\r
-       mov     ax,[y1]\r
-       mov     bx,[x1]\r
+       mov     ax,[bp+6]\r
+       mov     bx,[bp+4]\r
        ModeXAddr\r
        mov     di,bx\r
        mov     al,1\r
        shl     al,cl\r
        mov     ah,al           ; duplicate nybble\r
-       shl     al,4\r
+       shl     al,1\r
+       shl     al,1\r
+       shl     al,1\r
+       shl     al,1\r
        add     ah,al\r
        mov     bl,ah\r
        pop     cx\r
@@ -130,8 +134,8 @@ L04:
 ; routine for verticle lines\r
 \r
 VertLine:\r
-       mov     ax,[y1]\r
-       mov     bx,[y2]\r
+       mov     ax,[bp+6]\r
+       mov     bx,[bp+10]\r
        mov     cx,bx\r
        sub     cx,ax\r
        jge     L31\r
@@ -140,7 +144,7 @@ VertLine:
 \r
 L31:\r
        inc     cx\r
-       mov     bx,[x1]\r
+       mov     bx,[bp+4]\r
        push    cx\r
        ModeXAddr\r
 \r
@@ -149,7 +153,7 @@ L31:
        mov     al,MAP_MASK\r
        out     dx,ax\r
        pop     cx\r
-       mov     ax, word ptr [Color]\r
+       mov     ax, word ptr [bp+12]\r
 \r
 ; draw the line\r
 \r
@@ -164,15 +168,15 @@ L32:
 HorizLine:\r
        push    ds\r
 \r
-       mov     ax,[y1]\r
-       mov     bx,[x1]\r
+       mov     ax,[bp+6]\r
+       mov     bx,[bp+4]\r
        ModeXAddr\r
 \r
        mov     di,bx     ; set dl = first byte mask\r
        mov     dl,00fh\r
        shl     dl,cl\r
 \r
-       mov     cx,[x2] ; set dh = last byte mask\r
+       mov     cx,[bp+8] ; set dh = last byte mask\r
        and     cl,3\r
        mov     dh,00eh\r
        shl     dh,cl\r
@@ -180,17 +184,19 @@ HorizLine:
 \r
 ; determine byte offset of first and last pixel in line\r
 \r
-       mov     ax,[x2]\r
-       mov     bx,[x1]\r
+       mov     ax,[bp+8]\r
+       mov     bx,[bp+4]\r
 \r
-       shr     ax,2     ; set ax = last byte column\r
-       shr     bx,2    ; set bx = first byte column\r
+       shr     ax,1     ; set ax = last byte column\r
+       shr     bx,1    ; set bx = first byte column\r
+       shr     ax,1     ; set ax = last byte column\r
+       shr     bx,1    ; set bx = first byte column\r
        mov     cx,ax    ; cx = ax - bx\r
        sub     cx,bx\r
 \r
        mov     ax,dx    ; mov end byte masks to ax\r
        mov     dx,SC_INDEX ; setup dx for VGA outs\r
-       mov     bx, [Color]\r
+       mov     bx, [bp+12]\r
 \r
 ; set pixels in leftmost byte of line\r
 \r
@@ -231,7 +237,7 @@ L44:
 \r
 LoSlopeLine:\r
        mov     al,MAP_MASK\r
-       mov     bh,byte ptr [Color]\r
+       mov     bh,byte ptr [bp+12]\r
 L10:\r
        mov     ah,bl\r
 \r
@@ -283,7 +289,7 @@ HiSlopeLine:
        mov     al,MAP_MASK\r
 L21:            out    dx,ax\r
        push    ax\r
-       mov     ax,[Color]\r
+       mov     ax,[bp+12]\r
        mov     es:[di],al\r
        pop     ax\r
        add     di,bx\r
@@ -314,4 +320,3 @@ Lexit:
 _x_line        endp\r
 \r
 end\r
-\1a
\ No newline at end of file