⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 egagrafa.asm

📁 More than 800 virus code (old school) just for fun and studying prehistoric viruses. WARNING: use
💻 ASM
字号:
;
; grafix --- egagrafa.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	egagrafa

include macros.ah

sseg
endss

g_linsiz  equ	80
g_pixbyte equ	8
ega_gr_data equ 03cfh

dseg

	ex g_drawbuf,     dword
	ex g_xor,         word
	ex g_xcliplo,     word
	ex g_xcliphi,     word
	ex g_ycliplo,     word
	ex g_ycliphi,     word

endds

	exProc EGA_point_set
	exProc EGA_point_res

cseg	_egagrafa

EGA_plot label byte			; to get accurate profiling data

; plot a point. ax = y; bl = c; cx = x;

pBegin	plot

	les	si, g_drawbuf		; get address of buffer
	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	cx, g_pixbyte		; move it to use it...
	div	cx
	add	si, ax			; add quotient to offset (now complete)
	mov	al, 80h			; make mask
	mov	cx, dx
	shr	ax, cl			; shift it
	mov	dx, ega_gr_data		; shove it out to the mask register
	out	dx, al
	mov	al, es:[si]		; read data into latches
	mov	es:[si], al		; and do a write
	ret

pEnd	plot

;
; C interface for point plotter
;
; EGA_point(x, y, c)
;

pBegin	EGA_point

	push	bp
	mov	bp, sp
	push	si
	push	di

	push	[bp+argbase+4]			; call setup routine
	call	EGA_point_set
	add	sp, 2

	mov	ax, [bp+argbase+2]
	mov	bx, [bp+argbase+4]
	mov	cx, [bp+argbase]
	call	plot

	call	EGA_point_res		; reset EGA

	pop	di
	pop	si
	mov	sp, bp
	pop	bp
	ret

pEnd	EGA_point

;
; write for pixels for circle drawing
;
; void EGA_write_pix(x1, y1, x2, y2, c)
;
; can just ignore color here 'cause that's all setup at setup time...
;

pBegin	EGA_write_pix

	push	bp
	mov	bp, sp
	push	si
	push	di

	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	cx			; plot (x1, y1)
	call	plot
	pop	cx

w1:	mov	ax, [bp+argbase+6]	; ax = y2
	cmp	ax, g_ycliplo
	jb	w2
	cmp	ax, g_ycliphi
	ja	w2

	call	plot			; plot (x1, y2)

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	cx			; plot (x2, y1)
	call	plot
	pop	cx

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	EGA_write_pix

	df_ EGA_point
	df_ EGA_write_pix
	df_ EGA_plot

endcs	_egagrafa

end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -