Miss EndarE
Miss EndarE
;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 KOUCHcode segment byte public assume cs:code,ds:code,es:code,ss:code org 0100h jmp Startmain proc nearRow 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 1A2: 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 cornerA3: 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 remainingA5: mov ax,[si] ;Get the char & attr from screen mov [si],dx ;Put top row char & attr thereA6: 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 ;NoA9: 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 portF1: 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 timeF2: 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 hiF3: pop cx pop dx pop ax ;Restore registers ret ;and return main endp code ends end main