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
;\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
; 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
\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
; 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
; 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
\r
L31:\r
inc cx\r
- mov bx,[x1]\r
+ mov bx,[bp+4]\r
push cx\r
ModeXAddr\r
\r
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
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
\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
\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
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
_x_line endp\r
\r
end\r
-\1a
\ No newline at end of file