This program implements “CFE” (Classy Front End), a machine code-driven custom font printing engine paired with a graphical menu demonstration. Lines 4–7 load 1,502 bytes of Z80 machine code into memory at address 45000 using POKEs and a FOR/READ loop, then configure the system font pointer at addresses 23728–23729 to redirect character rendering through the new engine. The variable `print` is set to `code+13` (45013), pointing to the machine code’s main print entry point, which is then invoked throughout the program via `RANDOMIZE USR print`. The font table stored in lines 1000–1200 encodes each glyph as a variable-width bitmap: the first byte of each 8-byte record specifies the character’s pixel width (3–7 pixels), supporting proportional spacing and kerning. The demo section (lines 2000–9999) uses PLOT/DRAW to render a GUI-style bordered screen with a scrollable nine-item menu, navigated by pressing “6” (down) and “7” (up), with highlighted and unhighlighted menu item rendering handled by computed GOSUBs at lines 7890+a×10 and 7980+a×10.
Program Analysis
Program Structure
The program divides into four logical sections:
- Loader (lines 1–220): Reads 1,502 bytes of Z80 machine code from DATA statements and POKEs them into RAM at address 45000. Sets up the font pointer system variable.
- Font Table (lines 980–1200): Proportional bitmap glyph data for the “Classy” character set, covering printable ASCII and extended characters.
- Demo Screen (lines 2000–2100): Draws a bordered GUI-style main screen and renders the custom font character set as a showcase.
- Menu Navigation (lines 2500–8240): An interactive scrollable menu with nine items, drawn using PLOT/DRAW boxes and managed via computed GOSUBs.
Machine Code Loading
Lines 4–7 perform the machine code installation. LET code=45000 sets the load address, and LET print=code+13 (= 45013) is the entry point offset into the code — the first 13 bytes appear to be a dispatch/jump table or parameter block. Lines 6 POKEs the address into system variable locations 23728–23729 (the TS2068 font address pointer), using the standard low-byte/high-byte split:
POKE 23728,(code-256*INT(code/256))— low bytePOKE 23729,INT(code/256)— high byte
Line 7 loads 1,502 bytes with FOR t=code TO code+1501: READ o: POKE t,o: NEXT t. The comment on line 3 notes an 18-second load time, consistent with this quantity of DATA READs.
Font Table Format
Each glyph entry in lines 1000–1200 occupies 8 values. The first value is the character width in pixels (ranging from 3 to 7), followed by 7 bytes of column bitmap data. This proportional encoding enables the machine code renderer to perform kerning — packing characters closer together based on their individual widths rather than using a fixed 8-pixel cell. The font covers the full printable ASCII range from space (line 1000, 4-wide) through to at least code 95+ including lowercase and special symbols.
| Byte offset | Meaning |
|---|---|
| 0 | Glyph width in pixels (3–7) |
| 1–7 | Column bitmaps (vertical strips, LSB = top) |
RANDOMIZE USR Invocation Pattern
All rendering calls use RANDOMIZE USR print. The RANDOMIZE USR idiom calls the machine code routine at address print (45013) and discards the return value; using RANDOMIZE rather than LET x=USR print avoids the need for a dummy variable. The machine code routine reads its parameters (screen position, string content, color attributes) from the REM statement on the following line, which acts as an in-line data channel — the REM content is never displayed by BASIC but is parsed by the machine code.
REM-as-Data Technique
Every RANDOMIZE USR print call is immediately followed by a REM statement containing the print command parameters. This is a well-known technique: the machine code locates the next line in the BASIC program area and reads the bytes after the REM token as structured data (AT coordinates, string content, color codes). This allows complex print operations to be specified without using BASIC string variables or PRINT statements, and keeps the parameter data adjacent to the call site.
Computed GOSUB for Menu Items
The menu system uses arithmetic to select rendering subroutines. Two sets of subroutines exist:
- Lines 8000–8089 (unselected items): entry points at
7890 + a*10wherea= 11..19, giving lines 8000, 8010, …, 8080. - Lines 8090–8179 (selected/highlighted items): entry points at
7980 + a*10, giving lines 8090, 8100, …, 8170.
The variable a tracks the currently highlighted menu row (11–19). Navigation subroutines at lines 6000 and 6030 erase the old highlighted item, increment or decrement a with wraparound (11↔19), then re-render both normal and highlighted variants. The formula GO SUB 7890+a*10 is computed at runtime, an efficient dispatch table realized in pure BASIC.
Screen Layout and Graphics
Line 2005 draws a full-screen border rectangle using PLOT/DRAW sequences. Line 8200 draws the menu box as a separate inset rectangle using further PLOT/DRAW calls. The menu box drawing in line 8200 contains a subtle correction sequence — DRAW 0,-98: DRAW 113,0: DRAW 0,1: DRAW -112,0 — that adjusts the bottom of the box by one pixel to compensate for coordinate alignment, a common pixel-graphics workaround.
Navigation Input Handling
The main loop at lines 3000–3030 polls INKEY$ without a PAUSE, running as a tight busy-loop:
"6"— moves the menu selection down"7"— moves the menu selection upCODE INKEY$=13(Enter) — stops the program
This maps to the TS2068 cursor keys, which generate characters “5”–”8″ when shifted. Using CODE INKEY$=13 rather than INKEY$=CHR$ 13 is a minor optimization avoiding a string comparison.
Notable Anomalies
- Line 9999 contains
SAVE "cfe+demo" LINE 3duplicated twice on the same line, which causes the tape save to occur twice consecutively — likely intentional for reliability on cassette. - The entire listing is duplicated in the source file; this appears to be a template artifact rather than a program-level issue.
- The DATA on lines 1000–1200 uses a trailing period (
.) after some entries (e.g.,4,0,0,0,0,0,0,0.). In BASIC, the period is parsed as a decimal point with no digits, equivalent to.0= 0, so the trailing dot on the last value of each DATA item is harmless but unconventional — it simply evaluates the last number as a float with no fractional effect.
Content
Source Code
1 REM cfe/mc (+demo)
3 CLS : PRINT AT 9,4;"18 seconds to lift-off..."'''"The demo (lines 2000 thru 9999) is a dummy menu screen showing some of cfe's potential. To re-start GO TO 2000."
4 LET code=45000
5 LET print=code+13
6 POKE 23728,(code-256*INT (code/256)): POKE 23729,INT (code/256)
7 FOR t=code TO code+1501: READ o: POKE t,o: NEXT t
8 REM CFE CODE
10 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,213,197,229,245,217,8,213,197,229,245,237,91,176,92,24,13,0,0,0,0
20 DATA 0,0,0,0,0,225,35,24,7,42,85,92,1,5,0,9,126,254,173,32,6,235,54,2,235,24,77,254,172,32,6,235,54,1,235,24,67
30 DATA 254,34,32,6,229,33,26,1,25,233
40 DATA 235,22,65,1,116,0,9,114,35,35,35,119,62,0,205,48,18,62,69,215,62,82,215,62,82,215,62,79,215,62,82,215,62,32,215,62,120,215,62,120,215
50 DATA 205,9,32,56,251,241,225,193,209,8,217,241,225,193,209,201
60 DATA 35,126,1,97,8,213,229,33,3,0,25,235,225,185,32,3,26,24,50,12,19,16,246,209,1,48,10,185,40,8,12,16,250,235,22,66,24,164
70 DATA 213,198,208,79,35,26,254,1,40,4,30,59,24,2,30,44,126,187,121,40,11,6,9,129,16,253,79,62,208,134,129,35,209,1,118,92,2
80 DATA 35,229,26,254,2,40,35,1,8,168,58,118,92,111,62,0,189,40,8,60,245,120,145,71,241,24,245,120,213,235,17,12,0,25,209,119,62,2,18,225,24,140
90 DATA 58,118,92,1,8,8,103,62,0,203,68,40,1,129,203,33,203,44,16,245,213,235,17,11,0,25,209,119,225
100 DATA 35,24,2,24,141,126,254,34,32,51,35,126,254,58,32,18,229,33,38,0,229,46,11,124,25,119,35,126,214,8,119,225,25,233,254,59,40,5
110 DATA 33,126,0,24,233,35,126,254,13,32,5,33,126,0,25,233,43,229,33,38,0,25,233,254,39,32,14,35,126,254,39,32,4,62,34,24,8,43,126,24,4
120 DATA 203,127,32,20,6,7,229,213,22,0,95,213,225,25,16,253,209,229,24,122,198,185,24,236,254,199,40,248,254,200,40,244,254,201,40,240
130 DATA 24,5,235,22,67,24,137,254,197,40,77,254,195,40,114,254,172,40,120,254,204,40,18,254,203,40,104,254,198,40,102,254,205,40,100,254,226,40,98
140 DATA 24,217,229,213,225,35,126,254,1,40,7,54,1,1,138,24,24,5,54,0,1,217,229,33,73,2,25,112,35,113,24,123,229,8,217,197,245,121,193,144
150 DATA 193,79,120,198,248,71,8,24,101,229,33,45,2,25,126,254,56,40,4,54,56,24,2,54,48,24,88
160 DATA 193,33,198,1,25,9,8,126,8,126,213,229,33,11,0,25,78,35,70,225,197,24,18
170 DATA 24,68,24,162,24,160,24,158,24,156,229,33,11,0,25,53,24,47
180 DATA 217,193,217,71,35,175,126,197,6,8,23,217,48,7,197,245,205,62,38,241,193,4,217,16,241,193,217,12,120,198,248,71,217,16,225
190 DATA 209,33,11,0,25,229,217,225,113,35,112,217,33,26,1,25,233
200 DATA 62,0,50,119,92,35,126,254,34,40,37,254,195,32,46,213,225,1,116,0,9,54,61,35,35,35,58,119,92,6,2,79,175,121,23,56,4,16,251,14,32,121,119,33,92,0,25,233
210 DATA 33,37,0,25,58,119,92,119,33,126,0,25,233,203,127,40,21,1,199,2,185,40,13,12,16,250,254,172,32,183,58,119,92,61,24,174,198,185
220 DATA 229,213,6,7,22,0,95,213,225,25,16,253,209,229,193,33,198,1,25,9,58,119,92,134,225,24,145
980 REM CLASSY FONT TABLE DATA
1000 DATA 4,0,0,0,0,0,0,0.,3,0,94,94,0,0,0,0.,5,0,7,0,0,7,0,0.,6,34,255,34,34,255,34,0.,6,0,44,110,255,74,48,0
1010 DATA 7,0,12,10,102,50,94,54.,5,0,40,124,214,84,0,0.,3,0,4,3,0,0,0,0.,4,0,60,126,129,0,0,0.,4,0,129,126,60,0,0,0
1020 DATA 6,0,10,4,31,4,10,0.,6,0,16,16,124,16,16,0.,3,0,144,112,0,0,0,0.,5,0,24,24,24,24,0,0.,3,0,96,96,0,0,0,0
1030 DATA 4,0,96,24,6,0,0,0.,6,0,60,126,82,74,60,0.,4,0,68,126,64,0,0,0.,5,0,100,98,82,76,0,0.,6,0,34,66,74,126,50,0
1040 DATA 5,0,24,20,126,16,0,0.,5,0,46,78,74,50,0,0.,6,0,56,124,74,74,48,0.,5,0,2,114,26,14,0,0.,6,0,52,126,74,74,52,0
1050 DATA 6,0,12,94,82,82,60,0.,3,0,40,40,0,0,0,0.,3,0,168,104,0,0,0,0.,5,0,24,60,102,129,0,0.,3,40,40,40,0,0,0,0
1060 DATA 5,0,129,102,60,24,0,0.,6,0,4,2,82,94,12,0.,7,0,4,50,42,122,66,60.,6,0,124,126,18,18,124,0.,6,0,126,126,74,74,52,0
1070 DATA 6,0,60,126,66,66,36,0.,6,0,126,126,66,66,60,0.,6,0,126,126,74,74,66,0.,6,0,126,126,10,10,2,0.,6,0,60,126,66,82,116,0
1080 DATA 6,0,126,126,8,8,126,0.,5,0,66,126,126,66,0,0.,6,0,48,64,64,126,62,0.,6,0,126,126,24,36,66,0.,6,0,126,126,64,64,64,0
1090 DATA 7,0,126,126,4,8,4,126.,7,0,126,126,12,48,126,126.,6,0,60,126,66,66,60,0.,6,0,126,126,18,18,12,0.,6,0,60,126,82,98,252,0
1100 DATA 6,0,126,126,18,50,108,0.,6,0,44,110,74,74,48,0.,6,2,2,126,126,2,2,0.,6,0,62,126,64,64,62,0.,7,0,6,30,120,96,24,6
1110 DATA 7,0,62,126,64,48,64,62.,7,0,66,102,60,24,36,66.,7,2,6,12,120,120,4,2.,6,0,98,114,90,78,70,0.,3,0,255,129,0,0,0,0
1120 DATA 4,0,6,24,96,0,0,0.,3,0,129,255,0,0,0,0.,7,0,62,30,30,62,114,32.,6,128,128,128,128,128,128,0.,7,0,252,254,194,194,194,126
1130 DATA 5,0,48,120,72,120,0,0.,5,0,126,72,120,48,0,0.,5,0,48,120,72,72,0,0.,5,0,48,120,72,126,0,0.,5,0,48,120,104,88,0,0
1140 DATA 4,0,8,126,10,0,0,0.,5,0,176,248,200,248,0,0.,5,0,126,8,8,112,0,0.,4,0,72,122,64,0,0,0.,3,128,128,122,0,0,0,0
1150 DATA 5,0,126,16,48,72,0,0.,4,0,66,126,64,0,0,0.,7,0,120,120,8,120,8,112.,5,0,120,120,8,112,0,0.,5,0,48,120,72,48,0,0
1160 DATA 5,0,248,72,120,48,0,0.,5,0,48,120,72,248,0,0.,5,0,120,112,8,8,0,0.,5,0,80,88,120,40,0,0.,4,0,8,126,72,0,0,0
1170 DATA 5,0,56,120,64,120,0,0.,5,0,24,48,96,24,0,0.,7,0,56,120,64,48,64,56.,5,0,72,48,48,72,0,0.,5,0,152,184,96,56,0,0
1180 DATA 5,0,72,104,88,72,0,0.,6,1,1,1,1,1,1,0.,4,0,255,255,0,0,0,0.,6,170,170,170,170,170,170,0.,7,68,108,56,31,56,108,68
1190 DATA 5,0,24,60,231,36,0,0
1200 DATA 6,255,119,219,119,219,255,0.,3,0,24,24,0,0,0,0.,7,24,48,96,48,8,4,2
2000 REM DRAW MAIN SCREEN
2005 PAPER 5: BORDER 1: CLS : PAPER 7: FOR t=0 TO 7: PRINT " ";: NEXT t: PLOT 2,2: DRAW 250,0: DRAW 0,166: DRAW -250,0: DRAW 0,-166: PLOT 2,159: DRAW 250,0: RANDOMIZE USR print
2010 REM AT 0,1;">= File Edit OR Demo^ OR Windows Options";AT 1,0;" BEEP `BEEP BEEP BEEP BEEP BEEP BEEP BEEP BEEP CLASSY FRONT END DEMO BEEP BEEP BEEP BEEP BEEP BEEP BEEP BEEP BEEP "
2020 PAPER 5: RANDOMIZE USR print
2030 REM AT 2,2;">= New 2068 Medium character set:"
2040 FOR t=1 TO 6: RANDOMIZE USR print
2050 REM " !''#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO"
2060 RANDOMIZE USR print
2070 REM "AT PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyzAT AT ON ERRSTICKBEEP FREE "
2080 RANDOMIZE USR print
2090 REM " AT ©<=>=<>%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO"
2100 NEXT t
2500 REM ARROW KEY LOOP
2510 PAPER 7: GO SUB 8200
2520 LET a=11: GO SUB 6020
3000 IF INKEY$="6" THEN GO SUB 6000
3010 IF CODE INKEY$=13 THEN STOP
3020 IF INKEY$="7" THEN GO SUB 6030
3030 GO TO 3000
5990 REM MENU ICON
6000 PRINT AT a,6;" ": GO SUB 7890+a*10
6010 LET a=a+1: IF a=20 THEN LET a=11
6020 PRINT AT a,6;" ": GO SUB 7980+a*10: RETURN
6030 PRINT AT a,6;" ": GO SUB 7890+a*10
6040 LET a=a-1: IF a=10 THEN LET a=19
6050 PRINT AT a,6;" ": GO SUB 7980+a*10: RETURN
7990 REM menu subroutines
8000 RANDOMIZE USR print
8005 REM AT 11,6;">= AT AT ''Kerning'' function "
8009 RETURN
8010 RANDOMIZE USR print
8015 REM AT 12,6;">= AT OR Inverse AT AT printing "
8019 RETURN
8020 RANDOMIZE USR print
8025 REM AT 13,6;">= AT TO Vertical AT AT printing "
8029 RETURN
8030 RANDOMIZE USR print
8035 REM AT 14,6;">= AT NOT AT AT Line AT AT length AT tester "
8039 RETURN
8040 RANDOMIZE USR print
8045 REM AT 15,6;">= AT AT STEP, AT AT AND,AT AT THEN, AT AT STAT OP"
8049 RETURN
8050 RANDOMIZE USR print
8055 REM AT 16,6;">= AT ERROR AT AT codes A, B, C "
8059 RETURN
8060 RANDOMIZE USR print
8065 REM AT 17,6;">= AT Using color commands "
8069 RETURN
8070 RANDOMIZE USR print
8075 REM AT 18,6;">= AT Using OVER & ERASE "
8079 RETURN
8080 RANDOMIZE USR print
8085 REM AT 19,6;">= AT QUIT AT program AT demos "
8089 RETURN
8090 RANDOMIZE USR print
8095 REM AT 11,6;" OR >= AT AT ''Kerning'' function OR "
8099 RETURN
8100 RANDOMIZE USR print
8105 REM AT 12,6;" OR >= AT OR Inverse AT AT printing OR "
8109 RETURN
8110 RANDOMIZE USR print
8115 REM AT 13,6;" OR >= AT TO Vertical AT AT printing OR "
8119 RETURN
8120 RANDOMIZE USR print
8125 REM AT 14,6;" OR >= AT NOT AT Line AT AT length AT AT tester OR "
8129 RETURN
8130 RANDOMIZE USR print
8135 REM AT 15,6;" OR >= AT STEP, AT AT AND,AT AT THEN, AT AT STAT OP OR "
8139 RETURN
8140 RANDOMIZE USR print
8145 REM AT 16,6;" OR >= AT ERROR AT codes A, B, C OR "
8149 RETURN
8150 RANDOMIZE USR print
8155 REM AT 17,6;" OR >= AT Using color commands AT AT AT OR "
8159 RETURN
8160 RANDOMIZE USR print
8165 REM AT 18,6;" OR >= AT Using OVER & ERASE AT AT AT OR "
8169 RETURN
8170 RANDOMIZE USR print
8175 REM AT 19,6;" OR >= AT QUIT AT program AT demos AT AT AT OR "
8179 RETURN
8190 REM DRAW MENU BOX
8200 PAPER 7: FOR t=9 TO 20: PRINT AT t,6;" ": NEXT t: PLOT 46,104: DRAW 0,-98: DRAW 113,0: DRAW 0,1: DRAW -112,0: DRAW 0,88: DRAW 112,0: PLOT 46,104: DRAW 114,0: DRAW 0,-97: PAPER 3: RANDOMIZE USR print
8210 REM AT 9,6;"BEEP BEEP BEEP BEEP BEEP BEEP MENU BEEP BEEP BEEP BEEP BEEP BEEP BEEP "
8230 PAPER 7: FOR b=11 TO 19: GO SUB 7890+b*10: NEXT b
8240 RETURN
9999 SAVE "cfe+demo" LINE 3: SAVE "cfe+demo" LINE 3
1 REM cfe/mc (+demo)
3 CLS : PRINT AT 9,4;"18 seconds to lift-off..."'''"The demo (lines 2000 thru 9999) is a dummy menu screen showing some of cfe's potential. To re-start GO TO 2000."
4 LET code=45000
5 LET print=code+13
6 POKE 23728,(code-256*INT (code/256)): POKE 23729,INT (code/256)
7 FOR t=code TO code+1501: READ o: POKE t,o: NEXT t
8 REM CFE CODE
10 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,213,197,229,245,217,8,213,197,229,245,237,91,176,92,24,13,0,0,0,0
20 DATA 0,0,0,0,0,225,35,24,7,42,85,92,1,5,0,9,126,254,173,32,6,235,54,2,235,24,77,254,172,32,6,235,54,1,235,24,67
30 DATA 254,34,32,6,229,33,26,1,25,233
40 DATA 235,22,65,1,116,0,9,114,35,35,35,119,62,0,205,48,18,62,69,215,62,82,215,62,82,215,62,79,215,62,82,215,62,32,215,62,120,215,62,120,215
50 DATA 205,9,32,56,251,241,225,193,209,8,217,241,225,193,209,201
60 DATA 35,126,1,97,8,213,229,33,3,0,25,235,225,185,32,3,26,24,50,12,19,16,246,209,1,48,10,185,40,8,12,16,250,235,22,66,24,164
70 DATA 213,198,208,79,35,26,254,1,40,4,30,59,24,2,30,44,126,187,121,40,11,6,9,129,16,253,79,62,208,134,129,35,209,1,118,92,2
80 DATA 35,229,26,254,2,40,35,1,8,168,58,118,92,111,62,0,189,40,8,60,245,120,145,71,241,24,245,120,213,235,17,12,0,25,209,119,62,2,18,225,24,140
90 DATA 58,118,92,1,8,8,103,62,0,203,68,40,1,129,203,33,203,44,16,245,213,235,17,11,0,25,209,119,225
100 DATA 35,24,2,24,141,126,254,34,32,51,35,126,254,58,32,18,229,33,38,0,229,46,11,124,25,119,35,126,214,8,119,225,25,233,254,59,40,5
110 DATA 33,126,0,24,233,35,126,254,13,32,5,33,126,0,25,233,43,229,33,38,0,25,233,254,39,32,14,35,126,254,39,32,4,62,34,24,8,43,126,24,4
120 DATA 203,127,32,20,6,7,229,213,22,0,95,213,225,25,16,253,209,229,24,122,198,185,24,236,254,199,40,248,254,200,40,244,254,201,40,240
130 DATA 24,5,235,22,67,24,137,254,197,40,77,254,195,40,114,254,172,40,120,254,204,40,18,254,203,40,104,254,198,40,102,254,205,40,100,254,226,40,98
140 DATA 24,217,229,213,225,35,126,254,1,40,7,54,1,1,138,24,24,5,54,0,1,217,229,33,73,2,25,112,35,113,24,123,229,8,217,197,245,121,193,144
150 DATA 193,79,120,198,248,71,8,24,101,229,33,45,2,25,126,254,56,40,4,54,56,24,2,54,48,24,88
160 DATA 193,33,198,1,25,9,8,126,8,126,213,229,33,11,0,25,78,35,70,225,197,24,18
170 DATA 24,68,24,162,24,160,24,158,24,156,229,33,11,0,25,53,24,47
180 DATA 217,193,217,71,35,175,126,197,6,8,23,217,48,7,197,245,205,62,38,241,193,4,217,16,241,193,217,12,120,198,248,71,217,16,225
190 DATA 209,33,11,0,25,229,217,225,113,35,112,217,33,26,1,25,233
200 DATA 62,0,50,119,92,35,126,254,34,40,37,254,195,32,46,213,225,1,116,0,9,54,61,35,35,35,58,119,92,6,2,79,175,121,23,56,4,16,251,14,32,121,119,33,92,0,25,233
210 DATA 33,37,0,25,58,119,92,119,33,126,0,25,233,203,127,40,21,1,199,2,185,40,13,12,16,250,254,172,32,183,58,119,92,61,24,174,198,185
220 DATA 229,213,6,7,22,0,95,213,225,25,16,253,209,229,193,33,198,1,25,9,58,119,92,134,225,24,145
980 REM CLASSY FONT TABLE DATA
1000 DATA 4,0,0,0,0,0,0,0.,3,0,94,94,0,0,0,0.,5,0,7,0,0,7,0,0.,6,34,255,34,34,255,34,0.,6,0,44,110,255,74,48,0
1010 DATA 7,0,12,10,102,50,94,54.,5,0,40,124,214,84,0,0.,3,0,4,3,0,0,0,0.,4,0,60,126,129,0,0,0.,4,0,129,126,60,0,0,0
1020 DATA 6,0,10,4,31,4,10,0.,6,0,16,16,124,16,16,0.,3,0,144,112,0,0,0,0.,5,0,24,24,24,24,0,0.,3,0,96,96,0,0,0,0
1030 DATA 4,0,96,24,6,0,0,0.,6,0,60,126,82,74,60,0.,4,0,68,126,64,0,0,0.,5,0,100,98,82,76,0,0.,6,0,34,66,74,126,50,0
1040 DATA 5,0,24,20,126,16,0,0.,5,0,46,78,74,50,0,0.,6,0,56,124,74,74,48,0.,5,0,2,114,26,14,0,0.,6,0,52,126,74,74,52,0
1050 DATA 6,0,12,94,82,82,60,0.,3,0,40,40,0,0,0,0.,3,0,168,104,0,0,0,0.,5,0,24,60,102,129,0,0.,3,40,40,40,0,0,0,0
1060 DATA 5,0,129,102,60,24,0,0.,6,0,4,2,82,94,12,0.,7,0,4,50,42,122,66,60.,6,0,124,126,18,18,124,0.,6,0,126,126,74,74,52,0
1070 DATA 6,0,60,126,66,66,36,0.,6,0,126,126,66,66,60,0.,6,0,126,126,74,74,66,0.,6,0,126,126,10,10,2,0.,6,0,60,126,66,82,116,0
1080 DATA 6,0,126,126,8,8,126,0.,5,0,66,126,126,66,0,0.,6,0,48,64,64,126,62,0.,6,0,126,126,24,36,66,0.,6,0,126,126,64,64,64,0
1090 DATA 7,0,126,126,4,8,4,126.,7,0,126,126,12,48,126,126.,6,0,60,126,66,66,60,0.,6,0,126,126,18,18,12,0.,6,0,60,126,82,98,252,0
1100 DATA 6,0,126,126,18,50,108,0.,6,0,44,110,74,74,48,0.,6,2,2,126,126,2,2,0.,6,0,62,126,64,64,62,0.,7,0,6,30,120,96,24,6
1110 DATA 7,0,62,126,64,48,64,62.,7,0,66,102,60,24,36,66.,7,2,6,12,120,120,4,2.,6,0,98,114,90,78,70,0.,3,0,255,129,0,0,0,0
1120 DATA 4,0,6,24,96,0,0,0.,3,0,129,255,0,0,0,0.,7,0,62,30,30,62,114,32.,6,128,128,128,128,128,128,0.,7,0,252,254,194,194,194,126
1130 DATA 5,0,48,120,72,120,0,0.,5,0,126,72,120,48,0,0.,5,0,48,120,72,72,0,0.,5,0,48,120,72,126,0,0.,5,0,48,120,104,88,0,0
1140 DATA 4,0,8,126,10,0,0,0.,5,0,176,248,200,248,0,0.,5,0,126,8,8,112,0,0.,4,0,72,122,64,0,0,0.,3,128,128,122,0,0,0,0
1150 DATA 5,0,126,16,48,72,0,0.,4,0,66,126,64,0,0,0.,7,0,120,120,8,120,8,112.,5,0,120,120,8,112,0,0.,5,0,48,120,72,48,0,0
1160 DATA 5,0,248,72,120,48,0,0.,5,0,48,120,72,248,0,0.,5,0,120,112,8,8,0,0.,5,0,80,88,120,40,0,0.,4,0,8,126,72,0,0,0
1170 DATA 5,0,56,120,64,120,0,0.,5,0,24,48,96,24,0,0.,7,0,56,120,64,48,64,56.,5,0,72,48,48,72,0,0.,5,0,152,184,96,56,0,0
1180 DATA 5,0,72,104,88,72,0,0.,6,1,1,1,1,1,1,0.,4,0,255,255,0,0,0,0.,6,170,170,170,170,170,170,0.,7,68,108,56,31,56,108,68
1190 DATA 5,0,24,60,231,36,0,0
1200 DATA 6,255,119,219,119,219,255,0.,3,0,24,24,0,0,0,0.,7,24,48,96,48,8,4,2
2000 REM DRAW MAIN SCREEN
2005 PAPER 5: BORDER 1: CLS : PAPER 7: FOR t=0 TO 7: PRINT " ";: NEXT t: PLOT 2,2: DRAW 250,0: DRAW 0,166: DRAW -250,0: DRAW 0,-166: PLOT 2,159: DRAW 250,0: RANDOMIZE USR print
2010 REM AT 0,1;">= File Edit OR Demo^ OR Windows Options";AT 1,0;" BEEP `BEEP BEEP BEEP BEEP BEEP BEEP BEEP BEEP CLASSY FRONT END DEMO BEEP BEEP BEEP BEEP BEEP BEEP BEEP BEEP BEEP "
2020 PAPER 5: RANDOMIZE USR print
2030 REM AT 2,2;">= New 2068 Medium character set:"
2040 FOR t=1 TO 6: RANDOMIZE USR print
2050 REM " !''#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO"
2060 RANDOMIZE USR print
2070 REM "AT PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyzAT AT ON ERRSTICKBEEP FREE "
2080 RANDOMIZE USR print
2090 REM " AT ©<=>=<>%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO"
2100 NEXT t
2500 REM ARROW KEY LOOP
2510 PAPER 7: GO SUB 8200
2520 LET a=11: GO SUB 6020
3000 IF INKEY$="6" THEN GO SUB 6000
3010 IF CODE INKEY$=13 THEN STOP
3020 IF INKEY$="7" THEN GO SUB 6030
3030 GO TO 3000
5990 REM MENU ICON
6000 PRINT AT a,6;" ": GO SUB 7890+a*10
6010 LET a=a+1: IF a=20 THEN LET a=11
6020 PRINT AT a,6;" ": GO SUB 7980+a*10: RETURN
6030 PRINT AT a,6;" ": GO SUB 7890+a*10
6040 LET a=a-1: IF a=10 THEN LET a=19
6050 PRINT AT a,6;" ": GO SUB 7980+a*10: RETURN
7990 REM menu subroutines
8000 RANDOMIZE USR print
8005 REM AT 11,6;">= AT AT ''Kerning'' function "
8009 RETURN
8010 RANDOMIZE USR print
8015 REM AT 12,6;">= AT OR Inverse AT AT printing "
8019 RETURN
8020 RANDOMIZE USR print
8025 REM AT 13,6;">= AT TO Vertical AT AT printing "
8029 RETURN
8030 RANDOMIZE USR print
8035 REM AT 14,6;">= AT NOT AT AT Line AT AT length AT tester "
8039 RETURN
8040 RANDOMIZE USR print
8045 REM AT 15,6;">= AT AT STEP, AT AT AND,AT AT THEN, AT AT STAT OP"
8049 RETURN
8050 RANDOMIZE USR print
8055 REM AT 16,6;">= AT ERROR AT AT codes A, B, C "
8059 RETURN
8060 RANDOMIZE USR print
8065 REM AT 17,6;">= AT Using color commands "
8069 RETURN
8070 RANDOMIZE USR print
8075 REM AT 18,6;">= AT Using OVER & ERASE "
8079 RETURN
8080 RANDOMIZE USR print
8085 REM AT 19,6;">= AT QUIT AT program AT demos "
8089 RETURN
8090 RANDOMIZE USR print
8095 REM AT 11,6;" OR >= AT AT ''Kerning'' function OR "
8099 RETURN
8100 RANDOMIZE USR print
8105 REM AT 12,6;" OR >= AT OR Inverse AT AT printing OR "
8109 RETURN
8110 RANDOMIZE USR print
8115 REM AT 13,6;" OR >= AT TO Vertical AT AT printing OR "
8119 RETURN
8120 RANDOMIZE USR print
8125 REM AT 14,6;" OR >= AT NOT AT Line AT AT length AT AT tester OR "
8129 RETURN
8130 RANDOMIZE USR print
8135 REM AT 15,6;" OR >= AT STEP, AT AT AND,AT AT THEN, AT AT STAT OP OR "
8139 RETURN
8140 RANDOMIZE USR print
8145 REM AT 16,6;" OR >= AT ERROR AT codes A, B, C OR "
8149 RETURN
8150 RANDOMIZE USR print
8155 REM AT 17,6;" OR >= AT Using color commands AT AT AT OR "
8159 RETURN
8160 RANDOMIZE USR print
8165 REM AT 18,6;" OR >= AT Using OVER & ERASE AT AT AT OR "
8169 RETURN
8170 RANDOMIZE USR print
8175 REM AT 19,6;" OR >= AT QUIT AT program AT demos AT AT AT OR "
8179 RETURN
8190 REM DRAW MENU BOX
8200 PAPER 7: FOR t=9 TO 20: PRINT AT t,6;" ": NEXT t: PLOT 46,104: DRAW 0,-98: DRAW 113,0: DRAW 0,1: DRAW -112,0: DRAW 0,88: DRAW 112,0: PLOT 46,104: DRAW 114,0: DRAW 0,-97: PAPER 3: RANDOMIZE USR print
8210 REM AT 9,6;"BEEP BEEP BEEP BEEP BEEP BEEP MENU BEEP BEEP BEEP BEEP BEEP BEEP BEEP "
8230 PAPER 7: FOR b=11 TO 19: GO SUB 7890+b*10: NEXT b
8240 RETURN
9999 SAVE "cfe+demo" LINE 3: SAVE "cfe+demo" LINE 3
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
