Classy Front End Demo

Developer(s): Paul Bingham
Date: 198x
Type: Program
Platform(s): TS 2068

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:

  1. 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.
  2. Font Table (lines 980–1200): Proportional bitmap glyph data for the “Classy” character set, covering printable ASCII and extended characters.
  3. Demo Screen (lines 2000–2100): Draws a bordered GUI-style main screen and renders the custom font character set as a showcase.
  4. 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 byte
  • POKE 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 offsetMeaning
0Glyph width in pixels (3–7)
1–7Column 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*10 where a = 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 up
  • CODE 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 3 duplicated 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

Appears On

Related Products

Related Articles

Program demonstrates printing with variable-width fonts using PLOT/DRAW.
In designing a machine code utility one faces the inevitable quandry of too many desires and not enough space. I...
Patching a bug from the fourth article in the series.
Continues article from prior issue with window and porthole code.
Two kinds of windows options are described. The first are rectangular with shadows down two sides and the second are...

Related Content

Image Gallery

Classy Front End Demo

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.

Scroll to Top