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,99 @@
|
||||
;DROPSY TEXT effect for Nowhere Man's VCL - TASM will assemble as is using
|
||||
;VCL recommended switches. When screen is thoroughly dropsie'd, that is all
|
||||
;letters have fallen to a single line across the bottom of the monitor,
|
||||
;the routine will exit to DOS and restore the command prompt. I excerpted
|
||||
;quite a bit of this from some public domain video routines optimized for
|
||||
;the accursed a86 assembler and reworked the whole magilla until TASM
|
||||
;wouldn't choke when swallowing the source. It attempts to meet
|
||||
;minimum requirements for VCL formatting. Heck, this is a nice routine
|
||||
;to have at your fingertips; you gotta admit a CASCADE-virus-like effect
|
||||
;is always something people wanna see. And it's commented up the
|
||||
;kazoo, one of the features I like best about VCL code. Hope you find
|
||||
;it useful. -URNST KOUCH
|
||||
|
||||
code segment byte public
|
||||
assume cs:code,ds:code,es:code,ss:code
|
||||
org 0100h
|
||||
|
||||
jmp Start
|
||||
|
||||
main proc near
|
||||
|
||||
Row dw 24 ;Rows to do initially
|
||||
|
||||
;First, get current video mode and page.
|
||||
Start: mov cx,0B800h ;color display, color video mem for page 1
|
||||
mov ah,15 ;Get current video mode
|
||||
int 10h
|
||||
cmp al,2 ;Color?
|
||||
je A2 ;Yes
|
||||
cmp al,3 ;Color?
|
||||
je A2 ;Yes
|
||||
cmp al,7 ;Mono?
|
||||
je A1 ;Yes
|
||||
int 20h ;No,quit
|
||||
|
||||
;here if 80 col text mode; put video segment in ds.
|
||||
A1: mov cx,0A300h ;Set for mono; mono videomem for page 1
|
||||
A2: mov bl,0 ;bx=page offset
|
||||
add cx,bx ;Video segment
|
||||
mov ds,cx ;in ds
|
||||
|
||||
;start dropsy effect
|
||||
xor bx,bx ;Start at top left corner
|
||||
A3: push bx ;Save row start on stack
|
||||
mov bp,80 ;Reset column counter
|
||||
;Do next column in a row.
|
||||
A4: mov si,bx ;Set row top in si
|
||||
mov ax,[si] ;Get char & attr from screen
|
||||
cmp al,20h ;Is it a blank?
|
||||
je A7 ;Yes, skip it
|
||||
mov dx,ax ;No, save it in dx
|
||||
mov al,20h ;Make it a space
|
||||
mov [si],ax ;and put on screen
|
||||
add si,160 ;Set for next row
|
||||
mov di,cs:Row ;Get rows remaining
|
||||
A5: mov ax,[si] ;Get the char & attr from screen
|
||||
mov [si],dx ;Put top row char & attr there
|
||||
A6: call Vert ;Wait for 2 vert retraces
|
||||
mov [si],ax ;Put original char & attr back
|
||||
;Do next row, this column.
|
||||
add si,160 ;Next row
|
||||
dec di ;Done all rows remaining?
|
||||
jne A5 ;No, do next one
|
||||
mov [si-160],dx ;Put char & attr on line 25 as junk
|
||||
;Do next column on this row.
|
||||
A7: add bx,2 ;Next column, same row
|
||||
dec bp ;Dec column counter; done?
|
||||
jne A4 ;No, do this column
|
||||
;Do next row.
|
||||
A8: pop bx ;Get current row start
|
||||
add bx,160 ;Next row
|
||||
dec cs:Row ;All rows done?
|
||||
jne A3 ;No
|
||||
A9: mov ax,4C00h
|
||||
int 21h ;Yes, quit to DOS with error code
|
||||
|
||||
;routine to deal with snow on CGA screen.
|
||||
Vert: push ax
|
||||
push dx
|
||||
push cx ;Save all registers used
|
||||
mov cl,2 ;Wait for 2 vert retraces
|
||||
mov dx,3DAh ;CRT status port
|
||||
F1: in al,dx ;Read status
|
||||
test al,8 ;Vert retrace went hi?
|
||||
je F1 ;No, wait for it
|
||||
dec cl ;2nd one?
|
||||
je F3 ;Yes, write during blanking time
|
||||
F2: in al,dx ;No, get status
|
||||
test al,8 ;Vert retrace went low?
|
||||
jne F2 ;No, wait for it
|
||||
jmp F1 ;Yes, wait for next hi
|
||||
F3: pop cx
|
||||
pop dx
|
||||
pop ax ;Restore registers
|
||||
ret ;and return
|
||||
|
||||
main endp
|
||||
code ends
|
||||
end main
|
||||
Reference in New Issue
Block a user