(* =========================================================================== BBS: Canada Remote Systems Date: 07-14-93 (10:28) Number: 30550 From: BERNIE PALLEK Refer#: NONE To: DENNIS HO Recvd: NO Subj: NEATO VIDEO TRICKS Conf: (1221) F-PASCAL --------------------------------------------------------------------------- DH> Could anyone possibly tell me how I could make the DH> characters on the screen change the the next letter until DH> they are Z then they disappear? Sort of a melting effect. DH> I realize that this would probably have to be done in ASM DH> but I would just like the source to incorperate into one of DH> my programs. Hi, Dennis. Just a suggestion: it would probably look better if they decremented down to a space character (and it would be easier to program), but here's an example: *) PROGRAM MeltTheCharactersInVideoMemory; { untested, by Bernie Pallek, 1993 } { best used in 80x25 mode, or you may have problems :') } { I don't think the program needs a USES clause } CONST vidSeg : Word = $B800; { use $B000 for mono monitors } VAR max : Byte; w1, w2 : Word; BEGIN { the below part finds the max. number of iterations req'd by the melting loop } max := 0; FOR w1 := 0 TO 1999 DO IF (Mem[vidSeg : w1 * 2] > max) THEN max := Mem[vidSeg : w1 * 2]; { I know, I know, bad indenting style :') } FOR w1 := 1 TO max DO { could be from *0* TO max } { by using w1 * 2, we skip the colour attributes } FOR w2 := 0 TO 1999 DO IF (Mem[vidSeg : w2 * 2] > 32) THEN Mem[vidSeg : w2 * 2] := Mem[vidSeg : w2 * 2] - 1; END. Oh, you want me to *explain* it. I see. Well, text video memory is set up like this: 4000 bytes starting at $B800 (for colour, $B000 for mono). The first byte ($B800 : 0) rep's the ASCII code of the char at 1, 1 (screen pos.), and the next byte ($B800 : 1) rep's the colour attribute of the char at 1, 1. Then comes the ASCII code for the next character, and then the colour for it. This keeps going, and when you reach memory position $B800 : 160 (that 160 is decimal, not hex), it wraps to the next line on your screen. This goes on until you reach $B800 : 3999, which is the lower-right char's colour attribute. The beginning part just finds how many times the characters will have to be updated before they are all space characters. BTW, sorry for not making them turn to Zs; it was easier to do it with spaces, and you may modify the program as you wish. Have fun, TTYL. Bernie. ___ * SLMR 2.0 * ... I wouldn't be caught dead with a necrophiliac! --- Maximus 2.01wb * Origin: * idiot savant * +1 416 935 6628 * (1:247/128)