; FADE2.ACT››; Copyright 1983 by Action Computer Services›; All Right Reserved››; last modified September 22, 1983››;INCLUDE "SYS.ACT"›DEFINE STRING = "CHAR ARRAY"››DEFINE TAX = "$AA",› CLC = "$18",› RORX = "$7E", ; addr16,X› INX = "$E8",› BNE = "$D0",› RTS = "$60",› ROLX = "$3E", ; addr16,X› DEX = "$CA"›››CHAR CH=764›BYTE CONSOL=$D01F›CHAR shrinkH, shrinkV, center›BYTE line, tics, spacing, nlines›CARD dltop, fontBase, delay›BYTE ARRAY top›CARD ARRAY chars(40)›CARD POINTER dl, next›BYTE ARRAY ChCvt(0)=$490›BYTE ARRAY charBase(2048)›CARD ARRAY text(128)›CHAR ARRAY text_space(2560)››INCLUDE "FADE2.DAT"›››PROC Right=*(BYTE X)›[› TAX› CLC› RORX $0$0 ; address is filled in› INX› BNE $FA ; -6, goes to RORX instr.› RTS›]›››PROC Left=*(BYTE X)›[› TAX› CLC› ROLX $0$0 ; address is filled in› DEX› BNE $FA ; -6, goes to RORX instr.› RTS›]›››PROC MoveUp()› BYTE i, k, sl, X, w, b, t› CARD j, addrR=Right+3, addrL=Left+3› CHAR ARRAY p› BYTE ARRAY buf› BYTE ARRAY m1(0)=[$80$C0$E0$F0$F8$FC$FE$FF]› BYTE ARRAY m2(0)=[$7F$3F$1F$F$7$3$1$0]› BYTE ARRAY m3(0)=[$FF$7F$3F$1F$F$7$3$1]› BYTE ARRAY m4(0)=[$0$80$C0$E0$F0$F8$FC$FE]›››; freeze display if START key down› WHILE (CONSOL&1)=0 DO› delay = 3000› OD››; check for screen dump› IF (CONSOL&2)=0 THEN› Close(1)› Open(1,"P:",8)›› PrintDE(1,"L019T16[")›› top = dltop + 4› FOR i = 0 TO 191 STEP 8 DO› PrintD(1,"S0320")› FOR j = 0 TO 319 DO› next = top› t = 0› w = j RSH 3› b = $80 RSH (j & $7)› FOR k = 0 TO 7 DO› buf = next^› next = next + 3› t = t RSH 1› IF buf(w) & b THEN› t = t % $80› FI› OD› PutD(1, t)› OD› PutDE(1)› top = next› OD› Close(1)› FI›› sl = 0› next = dltop + 4›› IF shrinkV#'n THEN›; add +30 to next offset if top space› tics = tics + 1› IF tics>7 THEN› tics = 0› sl = 80› next = next + 240› ELSEIF tics=4 THEN› sl = 40› next = next + 120› ELSEIF tics=1 THEN› sl = 20› next = next + 60› ELSEIF tics=5 THEN› sl = 10› next = next + 30› FI› FI››; delay to make text more readable›; Oh well! I guess I made it too fast!› FOR j = 1 TO delay DO OD›› top = next^››; top space›; FOR i = sl TO 9 DO›; dl = next›; next = next + 3›; dl^ = next^›; OD›› FOR i = sl TO 159 DO› dl = next› next = next + 3› buf = next^›› IF shrinkH#'n THEN› w = word(i)› b = bit(i)› t = buf(w)› IF w<20 THEN› X = 255 - w› addrR = buf - X› Right(X)› buf(w) ==& m1(b) % (t & m2(b))› ELSE› X = 40 - w› addrL = buf + w - 1› Left(X)› buf(w) ==& m3(b) % (t & m4(b))› FI› ELSE› FOR t = 1 TO 8 DO OD› FI› dl^ = buf› OD››; bottom space›; end = 21 if top space› FOR i = 1 TO 31 DO› dl = next› next = next + 3› dl^ = next^› OD›› IF line<8 THEN› FOR i = 0 TO 39 DO› p = chars(i)› top(i) = p(line)› OD› ELSE› Zero(top, 40)› FI› next^ = top›RETURN›››PROC Fade()› BYTE n, ATRACT=$4D, large››; get the text› ReadMsg()›› Init()›› n = 0› delay = 0› WHILE CH=$FF DO › IF n>=nlines THEN› n = 0› delay = 0› FOR line = 8 TO 199 DO› MoveUp()› IF CH#$FF THEN EXIT FI› OD› FI››; turn off attact mode, we're›; changing the screen anyway› ATRACT = 0›› large = StrCvt(text(n))› FOR line = 0 TO spacing DO› MoveUp()› IF large THEN MoveUp() FI› IF CH#$FF THEN EXIT FI› OD›› n = n + 1› OD› CH = $FF› Graphics(0)›RETURN››