Unit dac; Interface Procedure TextFadeIn(Speed : Integer); Procedure TextFadeOut(Speed : Integer); Implementation Uses Dos, Crt; Type DacType = Array[1..256,1..3] of Byte; Var dac1, dac2 : DacType; x, y, i, erg, gesamt : Word; Procedure Read_DACs(Var Dac : DacType); Var r : Registers; begin r.ax := $1017; r.bx := 0; r.cx := 256; r.es := SEG(Dac); r.dx := Ofs(Dac); Intr($10, r); end; Procedure Write_DACs(Dac : DacType); Var r : Registers; begin r.ax := $1012; r.bx := 0; r.cx := 256; r.es := seg(Dac); r.dx := Ofs(Dac); Intr($10, r); end; { fade....} Procedure TextFadeOut(Speed : Integer); begin; Repeat erg := 0; For x := 1 to 256 do For y := 1 to 3 do begin if dac2[x, y] > 0 then DEC(dac2[x, y]); erg := erg + dac2[x, y]; end; Write_Dacs(dac2); Delay(Speed); Until erg = 0; end; { restore....fades also} Procedure TextFadeIn(Speed : Integer); begin; Repeat erg := 0; For x := 1 to 256 do For y := 1 to 3 do begin if dac2[x, y] < dac1[x, y] then INC(dac2[x,y]); erg := erg + dac2[x, y]; end; Write_Dacs(dac2); Delay(Speed); Until (erg = gesamt) or (KeyPressed); Write_Dacs(dac1); end; begin Read_Dacs(dac1); dac2 := dac1; gesamt := 0; For x := 1 to 256 do For y := 1 to 3 do gesamt := gesamt + dac1[x, y]; end.