--- title: "Introduction to Computers" id: 51900 type: "computer_media" slug: "introduction-to-computers" url: "http://localhost/computer_media/introduction-to-computers/" markdown_url: "http://localhost/computer_media/introduction-to-computers.md" published_at: "2023-08-16T01:42:21+00:00" modified_at: "2026-04-03T07:59:11+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2019/02/20230809-041332.jpg" excerpt: "A two-sided educational slideshow teaches microcomputer fundamentals using animated block-graphic diagrams, flashing labels, and a charmingly animated \"buzzword bee.\"" category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "Boston Electronic Systems Training" slug: "boston-electronic-systems-training" taxonomy: "post_tag" url: "http://localhost/tag/boston-electronic-systems-training/" - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "TS 1000" slug: "ts1000" taxonomy: "post_tag" url: "http://localhost/tag/ts1000/" model: - name: "Timex/Sinclair 1000" slug: "ts-1000" taxonomy: "model" url: "http://localhost/model/ts-1000/" genre: - name: "Education" slug: "education" taxonomy: "genre" url: "http://localhost/type/education/" media_type: "Cassette" download_url: "https://archive.org/download/timex-sinclair-software-archive/Introduction to Computers (1983)(Boston Electronic Systems Training)(US)(TS1000)(Cassette).zip" mediadate: "1983" producer_company: - id: 10695 title: "Boston Electronic Systems Training" type: "company" url: "http://localhost/company/boston-electronic-systems-training/" related_products: - id: 11906 title: "BEST Computer Coach" type: "product" url: "http://localhost/product/best-computer-coach/" media_type_tags: "Education" --- # Introduction to Computers This program is an interactive educational presentation about microcomputer concepts, spanning two sides (programs) that teach topics such as hardware, software, peripherals, CPU, RAM, ROM, and mass storage. The presentation draws detailed block-graphic diagrams of a computer system on screen, including representations of the keyboard, TV display, tape drive, disk drive, CPU, RAM, and ROM chips, progressively revealing components using a level parameter (D) passed to subroutine 800. A PEEK/POKE technique at address 16514 is used to distinguish between Side 1 and Side 2 of the tape, branching execution accordingly. Label-flashing animations are achieved by printing inverse-video characters followed immediately by normal text in loops (subroutines 900–971), and a “buzzing bee” wing-flap animation is produced in subroutine 200 by rapidly cycling through block-graphic characters. The title screen uses a string-encoded coordinate system (subroutines 1100–1300) where a six-character string encodes X, Y, and length to draw horizontal or vertical double-pixel lines. *** ## Program Analysis The listing actually contains two separate but nearly identical programs (Side 1 and Side 2 of a tape-based educational course), each beginning at line 1 with a `REM` marker and line 2 with `GOTO 2000`. Both share the same subroutine library (lines 200–1430) and title-screen drawing code (lines 2000–2099), but diverge in their main content sections starting at line 3000. Side 1 covers computer systems, peripherals, CPU, and RAM; Side 2 covers hardware vs. software, ROM, loading programs, and mass storage. ### Program Structure | Line Range | Purpose | | --- | --- | | 1–2 | REM identifier and entry-point jump | | 200–212 | Buzzword Bee wing-flap animation subroutine | | 300–330 | Full system diagram builder (calls 800, then jumps into 850) | | 490 | Standalone PAUSE (orphaned, never called directly) | | 500–530 | Circle-drawing subroutine using PLOT and trigonometry | | 687 | Orphaned `NEXT I` (dead code / vestigial) | | 800–890 | Layered computer diagram renderer, controlled by variable `D` | | 900–971 | Flashing-label subroutines for each labeled component | | 1100–1140 | Vertical double-wide bar drawing via encoded string `A$` | | 1200–1240 | Horizontal double-tall bar drawing via encoded string `A$` | | 1300–1330 | String decoder: extracts X, Y, L from 6-char `A$` | | 1400–1430 | Prints a full 32-character row of solid block characters | | 2000–2099 | Title screen construction and side-detection logic | | 3000–4700 | Main lesson content (diverges between Side 1 and Side 2) | ### Side Detection via PEEK/POKE A notable technique appears at lines 2096–2097 (and 3000). The program uses `PEEK (16514)` to read a byte in the system variables area. On first run (Side 1), this value is not 61, so the program POKEs 61 into that address, prints “END OF SIDE 1”, and halts. When Side 2 is loaded and run, the POKEd value is now 61, so execution branches to line 3000 instead. At line 3000, the value is updated to 63, preventing re-entry. This is a clever two-state machine using a single system-variable byte as persistent state across tape loads, without any external storage. ### Layered Diagram Renderer (Subroutine 800) Subroutine 800 draws a diagram of the computer system incrementally, controlled by the integer variable `D`. The structure is a chain of guarded sections: after drawing each component, the code checks `IF D][Z][A][P][<]";AT 3,3;">ZAP<" 4000 NEXT I 4010 CLS 4020 PRINT AT 1,3;"<-THE BUZZWORD BEE";AT 2,5;"WILL TELL YOU ABOUT";AT 4,0;"[B][U][Z][Z][W][O][R][D][S] - NICKNAMES FOR SOME TECHNICAL TERMS";AT 7,0;"A MEANINGLESS BUZZ TO OUTSIDERS" 4050 LET T=30 4060 GOSUB 200 4070 GOSUB 300 4080 PRINT AT 21,0;"[S][Y][S][T][E][M] IS PARTS WORKING TOGETHER"; 4090 PAUSE 4230 4100 PRINT AT 21,0;"COMPUTER PARTS ARE ALL INSIDE "; 4110 FOR I=0 TO 3 4120 GOSUB 920 4130 GOSUB 930 4140 GOSUB 940 4150 NEXT I 4160 LET A$=" " 4170 PRINT AT 10,8;A$;AT 14,2;A$;AT 14,8;A$ 4180 PRINT AT 21,0;"VISIBLE PARTS ARE [P][E][R][I][P][H][E][R][A][L][S]"; 4190 FOR I=1 TO 3 4200 GOSUB 910 4210 GOSUB 950 4220 GOSUB 960 4230 GOSUB 970 4240 NEXT I 4250 CLS 4260 PRINT AT 4,0;"PERIPHERALS - THE DEVICES";AT 5,0;"ATTACHED TO A COMPUTER";AT 7,0;"I/O DEVICES DO [I]NPUT AND [O]UTPUT";AT 9,0;"COMPUTER + PERIPHERALS = SYSTEM" 4270 LET T=19 4280 GOSUB 200 4290 LET D=0 4300 GOSUB 800 4310 PRINT AT 21,0;"KEYBOARD IS INPUT PERIPHERAL"; 4320 FOR I=1 TO 10 4330 GOSUB 910 4340 NEXT I 4350 GOSUB 810 4360 PRINT AT 21,0;"TV SCREEN IS OUTPUT PERIPHERAL" 4365 FOR I=1 TO 10 4370 GOSUB 950 4380 NEXT I 4390 GOSUB 850 4400 PRINT AT 21,0;"THE BRAIN CONTROLS EVERYTHING " 4410 GOSUB 820 4420 FOR I=1 TO 66 4425 GOSUB 920 4430 NEXT I 4440 CLS 4450 PRINT AT 4,0;"CPU - [C]ENTRAL [P]ROCESSING [U]NIT";AT 6,0;"THE MAIN BRAIN OF THE COMPUTER" 4460 LET T=40 4470 GOSUB 200 4480 LET D=3 4490 GOSUB 800 4500 PRINT AT 21,0;"THE BRAIN NEEDS MEMORY" 4510 FOR I=1 TO 80 4520 GOSUB 930 4530 NEXT I 4540 PRINT AT 4,0;"RAM - [R]ANDOM [A]CCESS [M]EMORY" 4550 LET T=20 4560 GOSUB 200 4570 CLS 4580 PRINT "SEQUENTIAL ACCESS RANDOM ACCESSDEPENDS ON ORDER DOES NOT" 4590 FOR I=1 TO 9 4600 LET X=INT (7.5+6*COS (PI/6*(I+1))) 4610 LET Y=INT (9.5-6*SIN (PI/6*(I+1))) 4620 PRINT AT Y,X;CHR$ (156+I) 4630 LET Y=INT ((I-1)/3) 4640 LET X=I-3*Y 4650 PRINT AT 4+2*Y,20+2*X;CHR$ (156+I) 4660 NEXT I 4670 PRINT AT 12,12;"[0]";AT 10,24;"[0]" 4672 LET R=15 4674 GOSUB 500 4676 LET R=8 4678 GOSUB 500 4680 FOR I=43 TO 54 4681 PLOT I,37 4682 PLOT I,20 4683 NEXT I 4684 FOR I=20 TO 37 4685 PLOT 42,I 4686 PLOT 55,I 4687 NEXT I 4690 PAUSE 180 4700 GOTO 2000 1 REM X 2 GOTO 2000 200 PRINT AT 0,0;" V " 202 PRINT "▀O▀" 206 FOR I=0 TO T*3.3 208 PRINT AT 1,0;"[~~]O[~~]";AT 1,0;"▄O▄";AT 1,0;"[,,]O[,,]";AT 1,0;"▀O▀" 210 NEXT I 212 RETURN 300 LET D=1 310 GOSUB 800 320 LET D=7 325 FAST 330 GOTO 850 490 PAUSE 4000 500 FOR I=0 TO 2*PI STEP 1/R 510 PLOT INT (15.5+R*COS (I)),INT (24.5+R*SIN (I)) 520 NEXT I 530 RETURN 687 NEXT I 800 CLS 801 FAST 802 PRINT AT 8,0;"▛▀▀▀▀▀▀▀▀▀▀▀▜";AT 9,0;"▌TIMEX";AT 9,12;"▐";AT 10,0;"▌ 1000";AT 10,12;"▐" 803 FOR I=11 TO 19 804 PRINT AT I,0;"▌";AT I,12;"▐" 805 NEXT I 806 PRINT AT 20,0;"▙▄▄▄▄▄▄▄▄▄▄▄▟" 807 IF D<1 THEN GOTO 880 810 FOR I=16 TO 19 811 FOR J=1 TO 10 812 PRINT AT I,J;"▗" 813 NEXT J 814 NEXT I 815 IF D<2 THEN GOTO 880 820 PRINT AT 13,1;"▛▀▀▀▜";AT 14,1;"▌CPU▐";AT 15,1;"▙▄▄▄▟" 821 IF D<3 THEN GOTO 880 830 PRINT AT 13,7;"▛▀▀▀▜";AT 14,7;"▌RAM▐";AT 15,7;"▙▄▄▄▟" 836 IF D<4 THEN GOTO 880 840 PRINT AT 9,7;"▛▀▀▀▜";AT 10,7;"▌ROM▐";AT 11,7;"▙▄▄▄▟" 846 IF D<5 THEN GOTO 880 850 PRINT AT 0,1;"▛▀▀▀▀▀▀▀▀▀▜";AT 1,1;"▌▟▀▀▀▀▀▙ O▐" 851 FOR I=2 TO 4 852 PRINT AT I,1;"▌▌";AT I,8;"▐ .▐" 853 NEXT I 854 PRINT AT 5,1;"▌▜▄▄▄▄▄▛ .▐";AT 6,1;"▙▄▄▄▄▄▄▄▄▄▟" 859 IF D<6 THEN GOTO 880 860 PRINT AT 8,14;"▛▀▀▀▀▀▀▜" 861 FOR I=9 TO 13 862 PRINT AT I,14;"▌▒▒▒▒▒▒▐" 863 NEXT I 864 PRINT AT 14,14;"▌~~~~~~~~~~~~▐" 865 FOR I=15 TO 17 866 PRINT AT I,14;"▌██████▐" 867 NEXT I 868 PRINT AT 18,14;"▙▄▄▄▄▄▄▟";AT 19,14;"▌▐ ▌▐ ▌▐";AT 20,14;"▙▟▄▙▟▄▙▟" 869 IF D<7 THEN GOTO 880 870 PRINT AT 16,23;"▄▄▄▄▄▄▄▄▄";AT 17,23;"▌";AT 17,31;"▐";AT 18,23;"▌▄▄▄█▄▄▄▐";AT 19,23;"▌ ▀ ▐";AT 20,23;"▙▄▄▄▄▄▄▄▟" 880 SLOW 890 RETURN 900 PRINT AT 9,1;"[T][I][M][E][X]";AT 10,2;"[1][0][0][0]";AT 9,1;"TIMEX";AT 10,2;"1000" 901 RETURN 910 PRINT AT 18,2;"[K][E][Y][B][O][A][R][D]";AT 18,2;"KEYBOARD" 911 RETURN 920 PRINT AT 14,2;"[C][P][U]";AT 14,2;"CPU" 921 RETURN 930 PRINT AT 14,8;"[R][A][M]";AT 14,8;"RAM" 931 RETURN 940 PRINT AT 10,8;"[R][O][M]";AT 10,8;"ROM" 941 RETURN 950 PRINT AT 3,3;"█[T]█[V]█";AT 3,3;" T V " 951 RETURN 960 PRINT AT 16,16;"TAPE";AT 16,16;"[T][A][P][E]" 961 RETURN 970 PRINT AT 18,25;"[D][I][S][K]";AT 19,25;"[D][R][I][V][E]";AT 18,25;"DISK";AT 19,25;"DRIVE" 971 RETURN 1100 GOSUB 1300 1110 FOR I=Y TO Y+L-1 1120 PRINT AT I,X;"██" 1130 NEXT I 1140 RETURN 1200 GOSUB 1300 1210 FOR I=X TO X+L-1 1220 PRINT AT Y,I;"█";AT Y+1,I;"█" 1230 NEXT I 1240 RETURN 1300 LET X=VAL (A$(1 TO 2)) 1310 LET Y=VAL (A$(3 TO 4)) 1320 LET L=VAL (A$(5 TO 6)) 1330 RETURN 1400 FOR I=1 TO 32 1410 PRINT "█"; 1420 NEXT I 1430 RETURN 2000 CLS 2005 FAST 2010 LET A$="010112" 2012 GOSUB 1100 2014 LET A$="030103" 2016 GOSUB 1200 2018 LET A$="030604" 2020 GOSUB 1200 2022 LET A$="031103" 2024 GOSUB 1200 2026 LET A$="060210" 2028 GOSUB 1100 2030 PRINT AT 1,6;"▙";AT 2,7;"▙";AT 3,5;"▜";AT 5,5;"▟";AT 6,7;"▘";AT 7,7;"▖";AT 8,5;"▜";AT 10,5;"▟";AT 11,7;"▛";AT 12,6;"▛" 2032 LET A$="090112" 2034 GOSUB 1100 2036 LET A$="110105" 2038 GOSUB 1200 2040 LET A$="110603" 2042 GOSUB 1200 2044 LET A$="111105" 2046 GOSUB 1200 2048 LET A$="180105" 2050 GOSUB 1200 2052 LET A$="180605" 2054 GOSUB 1200 2056 LET A$="181105" 2058 GOSUB 1200 2060 LET A$="220202" 2062 GOSUB 1100 2064 LET A$="170205" 2066 GOSUB 1100 2068 LET A$="220705" 2070 GOSUB 1100 2072 LET A$="171002" 2074 GOSUB 1100 2076 PRINT AT 1,17;"▗";AT 1,23;"▖";AT 3,19;"▛";AT 3,21;"▜";AT 5,19;"▙";AT 6,23;"▖";AT 7,17;"▝";AT 8,21;"▜";AT 10,19;"▙";AT 10,21;"▟";AT 12,17;"▝";AT 12,23;"▘" 2078 LET A$="250106" 2080 GOSUB 1200 2081 LET A$="270310" 2082 GOSUB 1100 2083 PRINT 2084 FOR J=1 TO 4 2085 GOSUB 1400 2086 NEXT J 2087 PRINT AT 14,0;"[B][O][S][T][O][N]";AT 15,8;"[E][L][E][C][T][R][O][N][I][C]";AT 16,16;"[S][Y][S][T][E][M][S]";AT 17,24;"[T][R][A][I][N][I][N][G]" 2092 PRINT "█INTRODUCTION TO MICROCOMPUTERS█" 2094 GOSUB 1400 2095 SLOW 2096 IF PEEK (16514)=61 THEN GOTO 3000 2097 POKE 16514,61 2098 PRINT TAB 9;"END OF SIDE 2" 2099 STOP 3000 POKE 16514,63 3010 PRINT " PRESS [E][N][T][E][R] WHEN MUSIC BEGINS" 3020 IF INKEY$ ="" THEN GOTO 3020 3030 GOSUB 300 3040 PRINT AT 21,0;"THIS IS ALL [H][A][R][D][W][A][R][E]" 3060 FOR I=1 TO 11 3070 FOR J=0 TO 7 3080 GOSUB (900+10*J) 3090 NEXT J 4000 NEXT I 4010 CLS 4020 PRINT AT 4,0;"[H][A][R][D][W][A][R][E] - THE PHYSICAL PARTS OFTHE SYSTEM";AT 7,0;"[S][O][F][T][W][A][R][E] - INSTRUCTIONS FOR THE HARDWARE (CPU) TO FOLLOW";AT 10,0;"PIECES OF SOFTWARE ARE [P][R][O][G][R][A][M][S]" 4050 LET T=43 4060 GOSUB 200 4070 CLS 4080 PRINT TAB 5;"THIS EVENINGS PROGRAM:";AT 2,0;"8:00 STAGE BAND";AT 3,7;"MAS QUE NADA";AT 4,7;"TRACES";AT 5,7;"MARIA";AT 7,0;"8:45 ORCHESTRA";AT 8,7;"PRELUDE IN C";AT 9,7;"ANDALUCIA SUITE";AT 11,0;"9:30 JAZZ ENSEMBLE";AT 12,7;"25 OR 6 TO 4";AT 13,7;"COUNT BASIE MEDLEY";AT 15,5;"CONCERT ENDS AT 10:00" 4090 PAUSE 3510 4100 LET D=4 4110 GOSUB 800 4120 PRINT AT 21,0;"PROGRAMS GO HERE" 4130 FOR I=1 TO 3 4140 GOSUB 930 4150 GOSUB 940 4160 NEXT I 4170 PRINT AT 21,0;"THIS IS PERMANENT" 4180 FOR I=1 TO 20 4190 GOSUB 940 4200 NEXT I 4210 CLS 4220 PRINT AT 4,0;"ROM - [R]EAD [O]NLY [M]EMORY";AT 6,0;"PERMANENT MEMORY FOR THE CPU TO READ, BUT NOT WRITE INTO";AT 9,0;"ROM IS [F][I][R][M][W][A][R][E] - SOFTWARE FIXEDUNALTERABLY IN HARDWARE" 4230 LET T=135 4240 GOSUB 200 4250 CLS 4260 PRINT AT 4,0;"LOADING A PROGRAM - PROCESS THE CPU USES TO READ A PROGRAM AND PLACE IT IN RAM" 4270 LET T=15 4280 GOSUB 200 4290 LET D=7 4300 GOSUB 800 4310 PRINT AT 21,0;"PROGRAMS GO HERE" 4320 FOR I=1 TO 5 4330 GOSUB 930 4340 NEXT I 4350 PRINT AT 21,0;"THEY MAY BE ENTERED FROM HERE" 4365 FOR I=1 TO 3 4370 GOSUB 910 4380 NEXT I 4385 LET D=7 4390 GOSUB 850 4400 PRINT AT 21,0;"OR LOADED INTO RAM IF SAVED HERE" 4410 FOR I=1 TO 66 4420 GOSUB 960 4430 GOSUB 970 4440 NEXT I 4450 CLS 4455 PRINT AT 4,0;"[M][A][S][S] [S][T][O][R][A][G][E] - EXTERNAL MEMORY -THE COMPUTERS LIBRARY";AT 7,0;"THESE DEVICES ARE PERIPHRALS FORSTORING PROGRAMS AND OTHER DATA" 4460 LET T=45 4470 GOSUB 200 4480 GOSUB 300 4490 PRINT AT 21,0;"TAPE DRIVES ARE SEQUENTIAL" 4500 FOR I=1 TO 10 4510 GOSUB 960 4530 NEXT I 4540 PRINT AT 21,0;"DISK DRIVES ARE RANDOM-ACCESS" 4550 FOR I=1 TO 20 4560 GOSUB 970 4570 NEXT I 4580 GOSUB 800 4590 PRINT AT 21,0;"YOU NOW KNOW THESE THINGS" 4600 FOR I=1 TO 5 4610 FOR J=0 TO 7 4620 GOSUB 900+10*J 4630 NEXT J 4640 NEXT I 4650 GOTO 2000 ```