--- title: "Skyplot" id: 64736 type: "computer_media" slug: "skyplot-2" url: "http://localhost/computer_media/skyplot-2/" markdown_url: "http://localhost/computer_media/skyplot-2.md" published_at: "2026-03-07T14:29:18+00:00" modified_at: "2026-04-01T15:48:29+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/03/skyplot-2.png" excerpt: "A randomised constellation quiz draws 28 star fields using UDG characters, then challenges you to name each pattern and its brightest star." category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" indiv: - name: "Eric Burgess" slug: "eric-burgess" taxonomy: "indiv" url: "http://localhost/indiv/eric-burgess/" - name: "Paul Holmgren" slug: "paul-holmgren" taxonomy: "indiv" url: "http://localhost/indiv/paul-holmgren/" genre: - name: "Astronomy" slug: "astronomy" taxonomy: "genre" url: "http://localhost/type/astronomy/" media_contents: - id: 64715 title: "Miscellaneous Programs" type: "computer_media" url: "http://localhost/computer_media/miscellaneous-programs/" media_type: "Program" programmers: - name: "Eric Burgess" slug: "eric-burgess" taxonomy: "indiv" url: "http://localhost/indiv/eric-burgess/" - name: "Paul Holmgren" slug: "paul-holmgren" taxonomy: "indiv" url: "http://localhost/indiv/paul-holmgren/" mediadate: "198x" images: - url: "http://localhost/wp-content/uploads/2026/03/skyplot-2.png" - url: "http://localhost/wp-content/uploads/2026/03/skyplot.png" media_type_tags: "Astronomy" --- This program is an interactive astronomy tutorial that displays dot-map representations of 28 constellations using UDG characters and asterisks, then quizzes the user on constellation and bright-star names. It uses a 29-element array L() to track which constellations have already been shown, randomly selecting unseen ones until all 28 have been displayed, at which point it ends with a completion message. A single UDG character (defined at line 8020 with the pattern 0,0,0,20,8,20,0,0 — a small triangle or arrow shape) is used throughout to represent dim stars. The program supports two quiz modes: constellations only, or constellations plus named bright stars (e.g., Polaris, Vega, Sirius), controlled by the variable AL. *** ## Program Structure The program is organised into three distinct regions. Lines 10–90 form the main dispatch loop, which randomly picks an unseen constellation and jumps to its drawing routine via `GO TO 100*L`. Lines 100–2820 (in steps of 100) are individual constellation blocks, each drawing a star field and calling the quiz subroutine. Lines 5000–8999 contain shared subroutines: `ASK` (5000), `STAR` (6000), `STAR1` (6020), `TEST` (7000), and `SETUP` (8000). Execution begins with `GO SUB 8E3` at line 10, which initialises variables, defines the UDG, prints the title screen, and reads the user’s mode selection before returning to the loop. ## Constellation Dispatch The 28 constellations are assigned integer identifiers 1–28 (excluding 29, which is reserved for the completion sentinel). The random selector at line 20 picks a value in `[N1, 28]` and rejects it if `L(L)` is already set (non-zero), then jumps to `100*L`. Each constellation block immediately sets `L(L)=N1` (i.e. 1) to mark it as seen. The exhaustion check at line 80 counts set entries with the loop at lines 50–70; if all 28 are set, control goes to line 8999. ## Variable Conventions | Variable | Meaning | | --- | --- | | `N1` | Constant 1, read from DATA at line 8010; used to avoid the literal digit 1 (memory optimisation) | | `FL` / `fl` | Flag: 0 on first visit, 1 after the constellation has been named once; triggers star-name challenge | | `AL` | Mode flag: 0 = constellations only, 1 = constellations + stars | | `L()` | 29-element array tracking seen constellations | | `C$` | Current constellation name | | `S$` | Current bright star name | | `ASK`, `STAR`, `STAR1`, `TEST` | Numeric variables holding line numbers used as computed `GO TO`/`GO SUB` destinations | ## Notable Techniques - **Computed destinations via numeric variables:**`LET ASK=5E3`, `LET STAR=6E3`, etc. at line 8160 allow `GO SUB ASK` and `GO TO TEST` — a clean way to alias subroutine entry points without hardcoding line numbers throughout the code. - **Multiplication dispatch:**`GO TO 100*L` at line 30 directly maps the random integer to its constellation block with no lookup table needed. - **UDG as dim-star glyph:** A single UDG “a” is defined with bytes `0,0,0,20,8,20,0,0` (binary: a small diamond/asterisk shape) and used pervasively as `\a` throughout PRINT statements to represent dim stars, distinguishing them visually from `*` (brighter) and `X` (brightest). - **`PRINT AT PI,...`:** Lines 1120, 2120, and 2320 use `AT PI`, which evaluates as `AT 3` (INT of π = 3). This is unusual but valid; it saves one byte over writing the literal `3`. - **Star-challenge gating:** The pattern `IF fl THEN GO SUB STAR` / `IF fl THEN PRINT ... FLASH N1;"X": GO TO STAR1` means the star identification challenge is only shown after the user has already named the constellation (since `FL` is set to 1 in `ASK` on return). - **Two-attempt quiz logic:** Both `ASK` and the star section allow exactly two attempts before revealing the answer, using consecutive `INPUT` statements rather than a loop. ## Source Code ``` 10 GO SUB 8E3 20 LET L=INT (RND*28)+N1: IF L(L) THEN GO TO 50 30 CLS : GO TO 100*L 50 LET K=0: FOR F=N1 TO 28 60 IF L(F) THEN LET K=K+1 70 NEXT F 80 IF K=28 THEN GO TO 8999 90 GO TO 20 100 LET C$="PISCES": LET L(L)=N1 110 PRINT AT 5,5;"\a"''''" \a"'''TAB 7;"\a \a"'TAB 19;"\a \a \a"'"\a";TAB 23;"\a"'TAB 28;"\a";TAB 23;"\a \a" 120 GO SUB ASK: GO TO TEST 200 LET C$="ARIES": LET S$="HAMAL": LET L(L)=N1 210 IF fl THEN GO SUB STAR 220 PRINT AT 6,23;"\a";TAB 22;"\a"''TAB 26;"\a";TAB 12;"\a"'TAB 13;"\a";TAB 11;"\a" 230 PRINT AT 15,25;"X";TAB 9;"\a";TAB 28;"*";TAB 5;"\a";TAB 28;"\a" 240 IF fl THEN PRINT AT 15,25; FLASH N1;"X": GO TO STAR1 250 GO SUB ASK: GO TO 210 300 LET C$="TAURUS": LET S$="ALDEBARAN": LET L(L)=N1 310 IF fl THEN GO SUB STAR 320 PRINT AT 3,0;"*"'''TAB 24;"\a::"''TAB 6;"\a"'"*"''TAB 13;"\a"'TAB 14;"\a\a" 330 PRINT AT 12,11;"X";AT 14,25;"\a \a";AT 16,29;"\a";TAB 23;"\a \a" 340 IF fl THEN PRINT AT 12,11; FLASH N1;"X": GO TO STAR1 350 GO SUB ASK: GO TO 310 400 LET C$="GEMINI": LET S$="CASTOR": LET L(L)=N1 410 IF fl THEN GO SUB STAR 420 PRINT AT 4,19;"\a" 430 PRINT AT 5,6;"X"''TAB 14;"\a"''" X"'TAB 7;"\a"'TAB 22;"*"'" \a"'TAB 12;"\a";TAB 29;"* *"," \a \a";AT 16,12;"*"'TAB 26;"X"''TAB 24;"*" 440 IF fl THEN PRINT AT 5,6; FLASH N1;"X": GO TO STAR1 450 GO SUB ASK: GO TO 410 500 LET C$="CANCER": LET L(L)=N1 510 PRINT AT 2,15;"\a";AT 8,15;"\a"';TAB 19;"\a";AT 12,15;"\a";TAB 26;"\a";AT 16,11;"\a";AT 18,25;"\a" 520 GO SUB ASK: GO TO TEST 600 LET C$="URSA MAJOR": LET S$="DUBHE": LET L(L)=N1 610 IF fl THEN GO SUB STAR 620 PRINT AT 8,31;"\a"''TAB 25;"*";TAB 8;"*"'TAB 12;"* *"," *"'TAB 25;"*";TAB 18;"*"''TAB 18;"\a"''TAB 25;"\a" 630 IF fl THEN PRINT AT 10,25; FLASH N1;"*": GO TO STAR1 640 GO SUB ASK: GO TO 610 700 LET C$="LEO": LET S$="REGULUS": LET L(L)=N1 710 IF fl THEN GO SUB STAR 720 PRINT AT 4,26;"\a",;TAB 30;"*";TAB 21;"\a";AT 8,6;"* \a"," *","\a";AT 11,23;"\a"," *"'"*" 730 PRINT AT 14,22;"X";AT 16,4;"\a"," \a";TAB 28;"\a";TAB 10;"\a"''TAB 6;"\a" 740 IF fl THEN PRINT AT 14,22; FLASH N1;"X": GO TO STAR1 750 GO SUB ASK: GO TO 710 800 LET C$="VIRGO": LET S$="SPICA": LET L(L)=N1 810 IF fl THEN GO SUB STAR 820 PRINT AT 5,12;"*";AT 7,25;"\a",TAB 26;"\a \a";AT 10,14;"*"';TAB 30;"*"," \a"',"* *";AT 15,6;"\a";AT 19,4;"x" 830 IF fl THEN PRINT AT 19,4; FLASH 1;"X": GO TO STAR1 840 GO SUB ASK: GO TO 810 900 LET C$="URSA MINOR": LET S$="POLARIS": LET L(L)=N1 910 IF fl THEN GO SUB STAR 920 PRINT AT 7,22;"X"''TAB 19;"\a"''," \a"'''TAB 14;"\a *"'TAB 20;"\a"'," *";TAB 15;"*" 930 IF fl THEN PRINT AT 7,22; FLASH N1;"X": GO TO STAR1 940 GO SUB ASK: GO TO 910 1000 LET C$="PEGASUS": LET L(L)=N1 1010 PRINT AT 6,22;"\a";TAB 19;"*"'TAB 21;"\a"'TAB 22;"\a"'''TAB 8;"*",TAB 19;"*"'''TAB 23;"*"''TAB 28;"*" 1020 GO SUB ASK: GO TO TEST 1100 LET C$="BOOTES": LET S$="ARCTURUS": LET L(L)=N1 1110 IF FL THEN GO SUB STAR 1120 PRINT AT PI,21;"\a \a"''TAB 22;"\a"''," *"'TAB 20;"*"''TAB 14;"*"''TAB 21;"\a"''TAB 19;"*"'''TAB 25;"X" 1130 IF fl THEN PRINT AT 17,25; FLASH N1;"X": GO TO STAR1 1140 GO SUB ASK: GO TO 1110 1200 LET C$="AURIGA": LET S$="CAPELLA": LET L(L)=N1 1210 IF FL THEN GO SUB STAR 1220 PRINT AT 4,12;"\a"'''''," X";TAB 10;"*"'TAB 21;"\a"'''TAB 12;"\a\a"," \a\a";TAB 10;"*"''''TAB 22;"*" 1230 IF fl THEN PRINT AT 9,18; FLASH N1;"X": GO TO STAR1 1240 GO SUB ASK: GO TO 1210 1300 LET C$="CEPHEUS": LET L(L)=N1 1310 PRINT AT 5,18;"*"''''''TAB 24;"*"'',"*"''''TAB 25;"*"'TAB 30;"*";TAB 17;"*" 1320 GO SUB ASK: GO TO TEST 1400 LET C$="CASSIOPEIA": LET L(L)=N1 1410 PRINT AT 6,15;"\a";TAB 14;"\a"'''''TAB 11;"*"''''," * *";TAB 15;"*"'TAB 22;"\a"'TAB 24;"*" 1420 GO SUB ASK: GO TO TEST 1500 LET C$="HERCULES": LET L(L)=N1 1510 PRINT AT 5,18;"* \a \a";TAB 30;"\a";TAB 28;"\a"''TAB 26;"*";TAB 13;"* *"'''TAB 26;"*";TAB 11;"\a"," *";TAB 9;"\a \a"'TAB 13;"*"'TAB 19;"*"''" \a";TAB 30;"*" 1520 GO SUB ASK: GO TO TEST 1600 LET C$="PERSEUS": LET S$="ALGOL": LET L(L)=N1 1610 IF FL THEN GO SUB STAR 1620 PRINT AT 5,23;"\a"''," * \a"'''" \a"," X \a \a"'" \a"'TAB 8;"\a *"'TAB 22;"\a"'''TAB 14;"\a"'TAB 23;"*";TAB 11;"*"'TAB 24;"\a" 1630 IF FL THEN PRINT AT 17,23; FLASH N1;"*": GO SUB STAR1 1640 GO SUB ASK: GO TO 1610 1700 LET C$="CYGNUS": LET S$="DENEB": LET L(L)=N1 1710 IF FL THEN GO SUB STAR 1720 PRINT AT 2,30;"\a";TAB 28;"\a"'''TAB 20;"\a";TAB 20;"\a"'" \a X";TAB 26;"*";TAB 10;"\a"'TAB 11;"\a"'," *";TAB 7;"\a"''TAB 24;"\a";TAB 14;"\a \a"''''TAB 30;"*" 1730 IF FL THEN PRINT AT 8,15; FLASH N1;"X": GO SUB STAR1 1740 GO SUB ASK: GO TO 1710 1800 LET C$="ANDROMEDA": LET L(L)=N1 1810 PRINT AT 5,14;"\a"'TAB 15;"\a"''''TAB 9;"*"'TAB 14;"\a \a";TAB 23;"\a"''TAB 20;"* \a";TAB 26;"\a"'TAB 31;"*";TAB 26;"\a" 1820 GO SUB ASK: GO TO TEST 1900 LET C$="LYRA": LET S$="VEGA": LET L(L)=N1 1910 IF FL THEN GO SUB STAR 1920 PRINT AT 5,15;"\a"''''TAB 19;"\a";TAB 8;"\a";TAB 21;"X";TAB 7;"\a"," \a";TAB 15;"\a \a"''''," *";TAB 14;"*" 1930 IF FL THEN PRINT AT 10,21; FLASH N1;"X": GO SUB STAR1 1940 GO SUB ASK: GO TO 1910 2000 LET C$="CANIS MINOR": LET S$="PROCYON": LET L(L)=N1 2010 IF FL THEN GO SUB STAR 2020 PRINT AT 8,21;"\a"'TAB 22;"*"''',;"X"'''" \a" 2030 IF fl THEN PRINT AT 12,16; FLASH N1;"X": GO TO STAR1 2040 GO SUB ASK: GO TO 2010 2100 LET C$="AQUILA": LET S$="ALTAIR": LET L(L)=N1 2110 IF FL THEN GO SUB STAR 2120 PRINT AT PI,27;"\a";TAB 25;"*"'',"*";TAB 15;"X"'TAB 20;"\a";TAB 14;"*"''''TAB 14;"\a *";TAB 9;"*"''''TAB 27;"*"'TAB 29;"*" 2130 IF FL THEN PRINT AT 7,15; FLASH N1;"X": GO SUB STAR1 2140 GO SUB ASK: GO TO 2110 2200 LET C$="CANIS MAJOR": LET S$="SIRIUS": LET L(L)=N1 2210 IF FL THEN GO SUB STAR 2220 PRINT AT 5,17;"\a"'TAB 21;"X"''TAB 23;"\a *"'',"*"'TAB 12;"\a \a";TAB 14;"*";TAB 9;"*"'TAB 15;"*"''TAB 15;"\a";TAB 24;"*"''," \a" 2230 IF fl THEN PRINT AT 6,21; FLASH N1;"X": GO TO STAR1 2240 GO SUB ASK: GO TO 2210 2300 LET C$="ORION": LET S$="RIGEL": LET L(L)=N1 2310 IF FL THEN GO SUB STAR 2320 PRINT AT PI,7;"\a \a:";TAB 29;"\a"'TAB 30;"\a";TAB 9;"X";TAB 30;"\a"'," \a *";TAB 30;"\a"''TAB 15;"\a"'TAB 29;"\a \a"'''," *"',"*";TAB 14;"* \a"''TAB 15;"\a";TAB 15;":"'TAB 23;"X"'TAB 11;"*" 2330 IF fl THEN PRINT AT 18,23; FLASH N1;"X": GO TO STAR1 2340 GO SUB ASK: GO TO 2310 2400 LET C$="LIBRA": LET L(L)=N1 2410 PRINT AT 4,22;"\a";AT 9,18;"*"''TAB 7;"\a"'TAB 13;"\a";TAB 8;"\a"'TAB 23;"*";AT 19,18;"\a" 2420 GO SUB ASK: GO TO TEST 2500 LET C$="AQUARIUS": LET L(L)=N1 2510 PRINT AT 7,4;"* * *";TAB 8;"*"''TAB 21;"* \a"''" \a"'TAB 30;"\a";TAB 25;"\a"''" \a"''" *" 2520 GO SUB ASK: GO TO TEST 2600 LET C$="SCORPIO": LET S$="ANTARES": LET L(L)=N1 2610 IF fl THEN GO SUB STAR 2620 PRINT AT 2,26;"\a*"'TAB 29;"\a"'TAB 30;"*"'''TAB 23;"* *" 2630 PRINT AT 8,21;"X";TAB 20;"*";TAB 30;"*"''''" * **"," * \a";TAB 20;"\a";TAB 6;"*";TAB 5;"*"," *"'''TAB 8;"*";TAB 14;"*" 2640 IF fl THEN PRINT AT 8,21; FLASH N1;"X": GO TO STAR1 2650 GO SUB ASK: GO TO 2610 2700 LET C$="CAPRICORNUS": LET L(L)=N1 2710 PRINT AT 4,30;"*"''TAB 29;"*"''" * \a \a \a"''''TAB 7;"\a"'TAB 12;":"'," \a \a";TAB 15;"*"'''',"*" 2720 GO SUB ASK: GO TO TEST 2800 LET c$="STAGITTARIUS": LET L(L)=N1 2810 PRINT AT 4,9;"\a";TAB 9;"\a"''TAB 12;"* \a";TAB 14;"\a"''TAB 15;"*";TAB 25;"*"'," *";TAB 27;"\a";TAB 12;"*";TAB 29;"\a";TAB 13;"*";TAB 26;"*"'TAB 29;"*"'''TAB 24;"*"''TAB 25;"*" 2820 GO SUB ASK: GO TO TEST 5000 REM ASK 5010 INPUT "NAME THIS CONSTELLATION",;A$ 5020 IF A$=C$ THEN GO TO 5080 5030 INPUT "SORRY, TRY AGAIN ";A$ 5040 IF A$=C$ THEN GO TO 5080 5050 PRINT AT 20,N1;"STILL WRONG BUT NICE TRY": PAUSE 180 5060 PRINT AT N1,N1;" IT IS ";C$,;AT 20,N1;,, 5070 GO TO 5090 5080 PRINT AT N1,N1; FLASH N1;C$;" IS CORRECT"; FLASH 0,: PAUSE 180 5090 INPUT "PRESS ENTER TO CONTINUE ";A$ 5100 LET FL=N1: RETURN 6000 REM STAR 6010 PRINT AT N1,N1;"NAME THIS STAR IN ";C$,: RETURN 6020 REM STAR1 6030 LET FL=0: INPUT A$ 6040 IF A$=S$ THEN GO TO 6090 6050 INPUT "SORRY, TRY AGAIN ";A$ 6060 IF A$=S$ THEN GO TO 6090 6070 PRINT AT N1,N1;"SORRY, THE STAR IS ";S$, 6080 GO TO TEST 6090 PRINT AT N1,N1;S$;" IS CORRECT.",; 6100 INPUT "ANOTHER TEST (Y/N) ";B$ 7000 REM TEST 7010 INPUT "ANOTHER TEST (Y/N) ";B$ 7020 IF B$="N" THEN CLS : PRINT AT 10,12; FLASH N1;"GOODBY": STOP 7030 IF AL=0 AND FL=N1 THEN LET FL=0 7040 LET AL=ABS (AL-N1) 7050 CLS : GO TO 20 8000 REM SETUP 8010 BORDER 0: PAPER 0: INK 7: CLS : READ n1,fl: DATA 1,0: DIM L(29) 8020 FOR a=0 TO 7: READ al: POKE USR "a"+a,al: NEXT a: DATA 0,0,0,20,8,20,0,0: PRINT ''TAB 6;"An Astronomy Program" 8030 PRINT 'TAB 12;"Tutorial" 8040 PRINT ''TAB 9;"CONSTELLATIONS" 8050 PLOT 68,122: DRAW 120,0: DRAW 0,-13: DRAW -120,0: DRAW 0,13 8060 PRINT ''"© Eric Burgess F.R.A.S.","© Mods By ""PEH SOFTWARE""" 8070 PRINT ''"All rights reserved by","S AND T Software Services" 8075 PRINT '"These are your stars: \a dim, * brighter, x the brightest." 8080 INPUT "Do you wish to see the programs instructions? ";a$: IF A$="" THEN GO TO 8080 8085 IF a$>="a" THEN PRINT FLASH n1;"Please put computer in CAPSLOCK.": GO TO 8090 8090 IF a$(N1)="Y" THEN GO TO 8120 8100 IF a$(N1)="N" THEN GO TO 8140 8110 GO TO 8080 8120 CLS : PRINT '"This program displays a","constellation selected at randomand asks for it's name."''"You have 2 tries before the correct name is revealed to you." 8130 PRINT '"Next the program asks for the name of a bright Star in the displayed constellation."''"Again you have 2 tries to name the Star before it's identified."''"Please pick either :","Constellations then the Stars or both mixed up." 8140 INPUT "SELECT: Constellations (1) OR Stars AND Constellations (2) ";AL 8150 LET AL=AL-1: IF al>1 THEN GO TO 8140 8160 LET ASK=5E3: LET STAR=6E3: LET STAR1=6020: LET TEST=7E3 8170 RETURN 8999 CLS : PRINT AT 10,0;"You have seen all the star fields in this quiz at least once. To repete this program please INPUT RUN ": STOP 9000 SAVE "star quiz" LINE PI: BEEP 1,10 ```