--- title: "Computer Coach" id: 51871 type: "computer_media" slug: "computer-coach" url: "http://localhost/computer_media/computer-coach/" markdown_url: "http://localhost/computer_media/computer-coach.md" published_at: "2023-08-16T01:42:19+00:00" modified_at: "2026-04-03T07:59:14+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2019/02/20230809-041332.jpg" excerpt: "An animated, interactive introduction to microcomputer concepts that teaches CPU, RAM, ROM, and peripherals using block-graphic diagrams and a clever string-encoded drawing system." 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: "Timex Computer Corporation" slug: "timex-computer-corporation" taxonomy: "post_tag" url: "http://localhost/tag/timex-computer-corporation/" - 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/Computer Coach (1983)(Timex)(US)(TS1000)(Cassette).zip" mediadate: "1983" producer_company: - id: 11401 title: "Timex Computer Corporation" type: "company" url: "http://localhost/company/timex-computer-corporation/" related_products: - id: 12207 title: "Computer Coach" type: "product" url: "http://localhost/product/computer-coach/" media_type_tags: "Education" --- Computer Coach is an interactive educational program that teaches introductory microcomputer concepts such as hardware, software, CPU, RAM, ROM, peripherals, and mass storage. The program uses block graphics extensively to draw animated diagrams of a computer system, including representations of a keyboard, monitor, tape drive, disk drive, and internal components. A string-encoded coordinate system at lines 1300–1330 parses six-character strings via VAL to extract X, Y, and length parameters, which are then used by subroutines at lines 1100 and 1200 to draw vertical and horizontal lines of solid block characters. The program uses PEEK and POKE on address 16514 to detect which “side” of a two-part cassette tape sequence is loaded, branching to different lesson content accordingly. FAST and SLOW mode switching is used throughout to balance display speed during graphics rendering. *** ## Program Analysis ### Program Structure The program is organized as a collection of subroutines called from a main narrative flow. Execution begins at line 2000 via the `GOTO 2000` at line 2. The listing appears twice in the source, representing two sides of a cassette tape; a PEEK/POKE mechanism at lines 2096–2099 and 3000 distinguishes which side is active. Side 1 (when `PEEK 16514 <> 61`) prints “END OF SIDE 1” (actually “END OF SIDE 2” in the second copy) and stops, while Side 2 continues into the full lesson sequence. The overall lesson flow is linear, advancing through screens with `PAUSE` delays and loops that repeat label-flashing animations before moving on. ### Subroutine Map | Lines | Purpose | | --- | --- | | 200–212 | Animated “bee” character, loops `T*3.3` times | | 300–330 | Draws full computer diagram (D=1 then D=7) via subroutine 800, then falls through to 850 | | 490 | Orphaned `PAUSE 4000` (unreachable, dead code) | | 500–530 | Plots a circle of radius `R` centered at (24.5, 15.5) | | 687 | Orphaned `NEXT I` (unreachable, dead code) | | 800–890 | Master diagram renderer; draws components depending on level `D` (0–7) | | 900–971 | Label-flash subroutines: inverse then normal text for each component | | 1100–1140 | Draw vertical double-wide bar using parsed `A$` | | 1200–1240 | Draw horizontal double-tall bar using parsed `A$` | | 1300–1330 | Parse `A$` into X, Y, L coordinates | | 1400–1430 | Print a full 32-character row of solid blocks | | 2000–2099 | Title screen builder and side-detection logic | | 3000–4700 | Main lesson sequence (Side 2 content) | ### String-Encoded Coordinate System A compact drawing convention is used throughout the title screen construction (lines 2010–2082). The string variable `A$` holds a six-digit string, which subroutine 1300 parses using `VAL (A$(1 TO 2))`, `VAL (A$(3 TO 4))`, and `VAL (A$(5 TO 6))` to extract column (`X`), row (`Y`), and length (`L`) respectively. Subroutine 1100 then draws a vertical bar of `L` double-wide block characters, and subroutine 1200 draws a horizontal bar two characters tall. Together these are used to render large decorative letterforms on the title screen. ### Layered Diagram Renderer (Subroutine 800) The subroutine at line 800 draws a computer system diagram in up to eight progressive layers controlled by the variable `D`. Each layer falls through via a cascade of `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 ```