A scrolling news display for the May 1984 issue. A sparkle effect flickers across a stippled background, and then two framed one-line windows take turns scrolling their messages, with title panels above and below. Pressing P pauses the scroll, B runs it backward and F forward again.
The messages are kept in string variables saved with the program. The first reports that Timex has only the TS-2068 (at $99.95), TS-2040 printer paper and software left to sell, with orders taken on 1-800-24-TIMEX. The second says that Synchro-Sette also publishes Commodore 64 software, explains that a yellow card in the issue means a subscription has run out, and announces that publication will stop after the October 1984 issue.
Program Analysis
Program Structure
- Background (lines 10–96):
POKE 16418,0setsDF_SZto zero so the program can print on all 24 rows, then a stippled field is drawn inside a block-graphic frame. - Sparkle (lines 100–340): three times over, 50 random display-file addresses are saved in arrays
D()andE()and overwritten with black squares (code 128), then restored. End-of-line bytes (118) are recognised and left alone. - Panels (lines 400–530): the background is redrawn with the title boxes and two empty message windows.
- Scrolling (lines 1000–2610): 26-character slices of
A$andB$are printed in turn, with backward routines at 1500 and 2500.
Notable Techniques
- Writing to the display file with
POKEwhile skipping the 118 end-of-line bytes keeps the collapsed ZX81 display intact. - The program is saved to start with
GOTO 10instead ofRUN, so the message strings are kept.
Potential Issues
DF_SZis never set back to 2, so if the program is stopped there is no room for the input line and the system may behave unpredictably until it is reset.- Line 80 sets
Q$to a title string that is never used.
Source Code
10 FAST
20 POKE 16418,0
30 PRINT "▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜"
40 FOR N=1 TO 22
50 PRINT AT N,0;"▌[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒▐"
60 NEXT N
70 PRINT AT 23,0;"▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟"
80 LET Q$="█[T][H][E]█[S][Y][N][C][H][R][O][-][S][E][T][T][E]█[B][U][L][L][E][T][I][N]█[B][O][A][R][D]█[F][O][R]█[M][A][Y]█[1][9][8][4]█"
90 LET X=PEEK 16396+256*PEEK 16397
95 DIM D(50)
96 DIM E(50)
100 SLOW
105 FOR I=1 TO 3
110 FOR N=1 TO 50
120 LET B=INT (RND*792)+1+X
130 IF PEEK B=118 THEN GOTO 170
140 LET C=PEEK B
150 POKE B,128
160 GOTO 200
170 LET C=118
200 LET D(N)=C
210 LET E(N)=B
220 NEXT N
300 FOR N=1 TO 50
320 POKE E(N),D(N)
330 NEXT N
340 NEXT I
400 PRINT AT 0,0;"▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜"
410 FOR N=1 TO 22
420 PRINT AT N,0;"▌[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒[▒]▒▐"
430 NEXT N
440 PRINT AT 23,0;"▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟"
500 PRINT AT 3,5;"▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜";AT 4,5;"▌█[T][H][E]█[B][U][L][L][E][T][I][N]█[B][O][A][R][D]█▐";AT 5,5;"▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟"
510 PRINT AT 18,5;"▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜";AT 19,5;"▌████[F][O][R]█[M][A][Y]█[1][9][8][4]████▐";AT 20,5;"▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟"
520 PRINT AT 8,2;"▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜";AT 9,2;"▌";AT 9,29;"▐";AT 10,2;"▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟"
530 PRINT AT 13,2;"▛▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▜";AT 14,2;"▌";AT 14,29;"▐";AT 15,2;"▙▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▟"
1000 FOR N=1 TO LEN A$-25
1010 PRINT AT 9,3;A$(N TO N+25)
1020 IF INKEY$ ="B" THEN GOTO 1500
1030 IF INKEY$ ="P" THEN PAUSE 40000
1090 NEXT N
1100 GOTO 2000
1500 FOR I=N TO 1 STEP -1
1510 PRINT AT 9,3;A$(I TO I+25)
1520 IF INKEY$ ="F" THEN GOTO 1600
1530 IF INKEY$ ="P" THEN PAUSE 40000
1590 NEXT I
1600 LET N=I
1610 GOTO 1090
2000 FOR N=1 TO LEN B$-25
2010 PRINT AT 14,3;B$(N TO N+25)
2020 IF INKEY$ ="B" THEN GOTO 2500
2030 IF INKEY$ ="P" THEN PAUSE 40000
2090 NEXT N
2100 GOTO 1000
2500 FOR I=N TO 1 STEP -1
2510 PRINT AT 14,3;B$(I TO I+25)
2520 IF INKEY$ ="F" THEN GOTO 2600
2530 IF INKEY$ ="P" THEN PAUSE 40000
2590 NEXT I
2600 LET N=I
2610 GOTO 2090
9998 SAVE "BULLETI[N]"
9999 GOTO 10Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
