mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2026-06-16 15:59:24 +00:00
re-organize
push
This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
;
|
||||
; grafix --- cgagrafa.asm
|
||||
;
|
||||
; stuff to plot points fast in 8086 assembler (BLEECH!!!)
|
||||
;
|
||||
; Written 4/87 by Scott Snyder (ssnyder@romeo.caltech.edu or @citromeo.bitnet)
|
||||
;
|
||||
; Modified 5/29/87 by sss to allow for different memory models
|
||||
;
|
||||
|
||||
title cgagrafa
|
||||
|
||||
include macros.ah
|
||||
|
||||
sseg
|
||||
endss
|
||||
|
||||
g_oddoff equ 02000h
|
||||
g_linsiz equ 80
|
||||
|
||||
dseg
|
||||
|
||||
ex g_drawbuf, dword
|
||||
ex g_pixbyte, word
|
||||
ex g_bitpix, word
|
||||
ex g_colormask, byte
|
||||
ex g_cmask_tbl, byte
|
||||
ex g_hicolormask, byte
|
||||
ex g_xor, word
|
||||
ex g_xcliplo, word
|
||||
ex g_xcliphi, word
|
||||
ex g_ycliplo, word
|
||||
ex g_ycliphi, word
|
||||
|
||||
endds
|
||||
|
||||
cseg _cgagrafa
|
||||
|
||||
; plot a point. ax = y; bl = c; cx = x;
|
||||
|
||||
pBegin plot
|
||||
|
||||
les si, g_drawbuf ; get address of buffer
|
||||
sar ax, 1 ; y /= 2
|
||||
jnc p1 ; add in offset if it was odd
|
||||
add si, g_oddoff
|
||||
p1: mov dx, g_linsiz ; y * g_linsiz
|
||||
mul dx
|
||||
add si, ax ; add to offset
|
||||
mov ax, cx ; x to AC (ohhh... what symmetry!)
|
||||
mov dx, 0
|
||||
div g_pixbyte
|
||||
add si, ax ; add quotient to offset (now complete)
|
||||
and bl, g_colormask ; get cmask
|
||||
mov bl, g_cmask_tbl[bx]
|
||||
mov cx, g_bitpix ; only works for bitpix = 0 or 1!
|
||||
dec cx
|
||||
shl dx, cl ; dx = mask shift count
|
||||
mov cx, dx
|
||||
mov dl, g_hicolormask ; get mask
|
||||
shr dl, cl ; shift it
|
||||
and bx, dx ; bx = cmask & mask
|
||||
mov al, es:[si] ; get image byte
|
||||
cmp g_xor, 0 ; xor mode?
|
||||
jne p2
|
||||
not dl ; no - (*ptr & ~mask) | (cmask & mask)
|
||||
and al, dl
|
||||
or al, bl
|
||||
jmp p3
|
||||
p2: xor al, bl ; yes - *ptr ^ (cmask & mask)
|
||||
p3: mov es:[si], al ; done!
|
||||
ret
|
||||
|
||||
pEnd plot
|
||||
|
||||
;
|
||||
; C interface for point plotter
|
||||
;
|
||||
; CGA_point(x, y, c)
|
||||
;
|
||||
|
||||
pBegin CGA_point
|
||||
push bp
|
||||
mov bp, sp
|
||||
push si
|
||||
push di
|
||||
|
||||
mov ax, [bp+argbase+2]
|
||||
mov bx, [bp+argbase+4]
|
||||
mov cx, [bp+argbase]
|
||||
call plot
|
||||
|
||||
pop di
|
||||
pop si
|
||||
mov sp, bp
|
||||
pop bp
|
||||
ret
|
||||
|
||||
pEnd CGA_point
|
||||
|
||||
;
|
||||
; write for pixels for circle drawing
|
||||
;
|
||||
; void CGA_write_pix(x1, y1, x2, y2, c)
|
||||
;
|
||||
|
||||
pBegin CGA_write_pix
|
||||
|
||||
push bp
|
||||
mov bp, sp
|
||||
push si
|
||||
push di
|
||||
|
||||
mov bx, [bp+argbase+8] ; bx = c (for plot)
|
||||
mov cx, [bp+argbase] ; cx = x1
|
||||
cmp cx, g_xcliplo ; check for clipping
|
||||
jb w2
|
||||
cmp cx, g_xcliphi
|
||||
ja w2
|
||||
|
||||
mov ax, [bp+argbase+2] ; ax = y1
|
||||
cmp ax, g_ycliplo ; do clipping
|
||||
jb w1
|
||||
cmp ax, g_ycliphi
|
||||
ja w1
|
||||
|
||||
push bx ; plot (x1, y1)
|
||||
push cx
|
||||
call plot
|
||||
pop cx
|
||||
pop bx
|
||||
|
||||
w1: mov ax, [bp+argbase+6] ; ax = y2
|
||||
cmp ax, g_ycliplo
|
||||
jb w2
|
||||
cmp ax, g_ycliphi
|
||||
ja w2
|
||||
|
||||
push bx ; plot (x1, y2)
|
||||
call plot
|
||||
pop bx
|
||||
|
||||
w2: mov cx, [bp+argbase+4] ; cx = x2
|
||||
cmp cx, g_xcliplo
|
||||
jb w4
|
||||
cmp cx, g_xcliphi
|
||||
ja w4
|
||||
|
||||
mov ax, [bp+argbase+2] ; ax = y1
|
||||
cmp ax, g_ycliplo ; do clipping
|
||||
jb w3
|
||||
cmp ax, g_ycliphi
|
||||
ja w3
|
||||
|
||||
push bx ; plot (x2, y1)
|
||||
push cx
|
||||
call plot
|
||||
pop cx
|
||||
pop bx
|
||||
|
||||
w3: mov ax, [bp+argbase+6] ; ax = y2
|
||||
cmp ax, g_ycliplo
|
||||
jb w4
|
||||
cmp ax, g_ycliphi
|
||||
ja w4
|
||||
|
||||
call plot ; plot (x2, y2)
|
||||
|
||||
w4: pop di
|
||||
pop si
|
||||
mov sp, bp
|
||||
pop bp
|
||||
ret
|
||||
|
||||
pEnd CGA_write_pix
|
||||
|
||||
df_ CGA_point
|
||||
df_ CGA_write_pix
|
||||
|
||||
endcs _cgagrafa
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user