Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- COLOR_RED = 40
- COLOR_GREEN = 70
- COLOR_UNDEF = 110
- include 'macro\proc16.inc'
- org 100h
- Main:
- stdcall Screen.SetGraphMode
- push $A000
- pop es
- stdcall Draw.Line,0,0,45,100,COLOR_RED
- stdcall Draw.Line,0,0,100,45,COLOR_GREEN
- stdcall Draw.Line,45,100,100,45,COLOR_UNDEF
- mov ah, 08h
- int 21h
- stdcall Screen.RestoreMode
- ret
- ;NOTE : (X2 >= X1) && (Y2 >= Y1)
- ; OR
- ; (X2 >= X1) && (Y2 <= Y1)
- proc Draw.Line uses di, x1,y1,x2,y2,color:BYTE
- ; FirstAddr
- ;
- local BasicAdd dw ?
- local OffsetAdd dw ?
- local IsIncY db ?
- mov di, [y1]
- imul di, 320
- add di, [x1]
- mov [IsIncY], 1
- mov ax, [x2]
- sub ax, [x1]
- mov bx, [y2]
- sub bx, [y1]
- jns @F
- neg bx
- mov [IsIncY], 0
- @@:
- cmp ax, bx
- js @F
- mov [BasicAdd], 0
- mov al, [IsIncY]
- test al, al
- jz .Dec
- mov [OffsetAdd], 320
- jmp .FI
- .Dec:
- mov [OffsetAdd], -320
- jmp .FI
- @@:
- mov [OffsetAdd], 1
- ;
- mov ax, [x1]
- mov bx, [y1]
- mov [x1], bx
- mov [y1], ax
- ;
- mov ax, [x2]
- mov bx, [y2]
- mov [x2], bx
- mov [y2], ax
- mov al, [IsIncY]
- test al, al
- jz .Dec2
- mov [BasicAdd], 319
- jmp .FI
- .Dec2:
- mov [BasicAdd], -321
- jmp .FI
- ; mov [BasicAdd], 319
- .FI:
- ; mov di, [y1]
- ; imul di, 320
- ; add di, [x1]
- xor bx, bx
- push ax
- mov ax, [x2]
- sub ax, [x1]
- jns @F
- neg ax
- @@:
- mov cx, ax
- pop ax
- mov dx, cx
- mov al, [color]
- .DrawLoop:
- stosb
- add di, [BasicAdd]
- push ax
- mov ax, [y2]
- sub ax, [y1]
- jns @F
- neg ax
- @@:
- add bx, ax
- pop ax
- js .EndLoop
- sal bx, 1
- cmp bx, dx
- jb @F
- add di, [OffsetAdd]
- sar bx, 1
- sub bx, dx
- jmp .EndLoop
- @@:
- sar bx,1
- .EndLoop:
- loop .DrawLoop
- ret
- endp
- proc Screen.SetGraphMode
- mov ah, $0F
- int 10h
- mov [Screen.bOldMode], al
- mov [Screen.bOldPage], bh
- mov ax, $0013
- int 10h
- ret
- endp
- proc Screen.RestoreMode
- movzx ax, [Screen.bOldMode]
- int 10h
- mov ah, $05
- mov al, [Screen.bOldPage]
- int 10h
- ret
- endp
- Screen.bOldMode db ?
- Screen.bOldPage db ?
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement