--- title: "Banner Designer" id: 51973 type: "computer_media" slug: "banner-designer" url: "http://localhost/computer_media/banner-designer/" markdown_url: "http://localhost/computer_media/banner-designer.md" published_at: "2023-08-28T01:04:42+00:00" modified_at: "2026-03-30T21:41:03+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2023/08/SCR-20260330-lgvu.png" excerpt: "This 1985 banner printing utility drives multiple dot-matrix printers with machine code, large-font text, and cassette-loaded graphics icons — all configured from a polished menu 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: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" - name: "Zebra Systems" slug: "zebra-systems" taxonomy: "post_tag" url: "http://localhost/tag/zebra-systems/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" genre: - name: "Banner" slug: "banner" taxonomy: "genre" url: "http://localhost/type/banner/" media_type: "Program" download_url: "https://archive.org/download/timex-sinclair-software-archive/Banner%20Designer%20%281986%29%28Zebra%20Systems%29%28US%29%28TS2068%29%28Cassette%29.zip" producer_company: - id: 11469 title: "Zebra Systems, Inc." type: "company" url: "http://localhost/company/zebra-systems/" images: - url: "http://localhost/wp-content/uploads/2023/08/SCR-20260330-lgvu.png" - url: "http://localhost/wp-content/uploads/2023/08/Zebra-TS2068-Banner-Designer-back.jpg" - url: "http://localhost/wp-content/uploads/2023/08/Zebra-TS2068-Banner-Designer.jpg" related_products: - id: 35026 title: "Banner Designer" type: "product" url: "http://localhost/product/banner-designer/" media_type_tags: "Banner" --- Banner Designer is a large-format banner printing utility by Zebra Systems, Inc. (version 1.1, copyright 1985) that drives 80-column dot-matrix printers to produce oversized text and graphic headers. The program loads a companion machine code block (“Bcode”) to address 45928 and calls into it at computed entry points — the DEF FN a() function calculates the machine code’s current execution address by reading the PROG system variable at addresses 23635–23636 and adding an offset of 5. Supported printers include Epson RX/FX, Gemini 10x/SG10, Memotech DMX80, Panasonic 1090, Seikosha GP250, and Prowriter 8510, with parallel interface options for AERCO, Tasman, and A&J adapters; each printer type configures a block of printer control bytes (POKEd into addresses 49019–49058) that govern bitmap output formatting. Cassette-based graphic “icons” (256 bytes each) can be loaded by name as start and end decorations for the banner, with ON ERR handling providing a retry loop on tape read failure. *** ## Program Analysis ### Program Structure The program is organized into clearly delineated functional sections, navigated by a central menu loop: 1. **Initialization (lines 1–17):** REM block containing embedded machine code data, DEF FN definition, border/paper setup, CLEAR, and loading of the “Bcode” machine code block. 2. **Title screen (lines 20–44):** Splash display showing version, copyright, and publisher name. 3. **Main menu loop (lines 84–195):** Polls INKEY$ and dispatches to five sub-functions. 4. **Banner text entry (lines 300–370):** Loads “Bdesign” overlay, prompts for text and solid/outline mode. 5. **Banner printing (lines 400–480):** Writes banner text into machine code workspace and calls ML routines. 6. **Graphic selection — start/end (lines 540–553, 640–653):** Tape-loads 256-byte icon blocks with error recovery. 7. **Printer configuration (lines 2229–2740):** Two-stage selection of printer model and parallel interface, with printer control block loading. 8. **Tape error handler (lines 5800–5830):** ON ERR retry loop with a stored return address. 9. **Development utility (lines 9900–9999):** Manual entry of printer control block data and SAVE routines — not normally reached during operation. ### Machine Code Integration The machine code module “Bcode” is loaded to address 45928 (decimal) and occupies 8000 bytes (extending to approximately 53928). Three named entry points are referenced by comment: | Address | REM label | Purpose | | --- | --- | --- | | 49000 | PRNTstrg | Print banner text string | | 49003 | PRNTicon | Print a graphic icon | | 49006 | (install printer interface) | Configure parallel interface hardware | All machine code calls use `RANDOMIZE USR` rather than the more direct `USR` in an expression, discarding the return value cleanly. The printer control data block occupies addresses 49019–49058 (40 bytes in groups of 8), and additional POKEable parameters exist at 49009 (fill mode), 49010 (icon index), 49018 (interface type), 49021 (linefeed byte), 49571 (indent character), and 49583 (indent icon). ### DEF FN Address Calculation Line 2 defines `DEF FN a()=PEEK 23635+256*PEEK 23636+5`. Addresses 23635–23636 hold the PROG system variable, which points to the start of the BASIC program in RAM. Adding 5 steps past the two-byte line number, two-byte line length, and REM token at the start of line 1, landing inside the REM statement’s data — which contains the embedded machine code payload stored as BASIC token bytes. Each call to `RANDOMIZE USR FN a()` thus executes the code in that REM line after an appropriate `POKE` has configured the desired screen-display routine. ### ON ERR Error Handling The program uses ON ERR for two distinct purposes. During tape loading of icon files (lines 549, 649), `ON ERR GO TO 5800` is set before the LOAD and cleared with `ON ERR RESET` afterward. The error handler at line 5800 displays a flashing “TAPE ERROR” message, then enters a tight `PAUSE 4e4 / ON ERR GO TO 5822` loop (line 5822) to catch any further errors during the wait, before finally resetting the error trap and jumping to `DerrRet` — a variable holding the return destination (line 540 for start graphic, also used for end graphic despite the value not being updated to 640, which is a latent bug). ### Printer Control Block Loading (Lines 2229–2239) The subroutine at line 2230 reads a string variable (`x$`, set to `e$`, `g$`, or `p$` depending on the selected printer) and writes its bytes into consecutive 8-byte blocks starting at address 49019. The encoding uses byte value 254 as an “advance to next block” sentinel and 255 as an end-of-data terminator. This allows variable-length printer command sequences to be packed into a fixed block structure in machine code memory. ### Banner Text Transfer Lines 442–452 manually copy the banner text string `d$` character by character into machine code workspace at address 49121, using `CODE d$(n)` to extract each character’s code and `POKE dest,n` to write it. A 255 byte is appended as a string terminator before calling the `PRNTstrg` routine, mirroring a C-style null-terminated string in the ML layer. ### Notable Techniques - The `POKE 23658,8` at line 315 sets the FLAGS2 system variable bit to suppress the lower screen, providing a cleaner INPUT prompt appearance; it is restored to 0 at line 343. - The `CLEAR 45928` at line 10 both clears variables and sets RAMTOP, protecting the machine code area from BASIC’s variable heap. - The `PAUSE 4e4` idiom (approximately 27 minutes) is used as an indefinite pause pending a keypress, a common technique when PAUSE 0 behavior differs across ROM versions. - Lines 210–252 define a “loading” animation routine that is branched to by label but never actually called from the menu dispatch — it appears to be vestigial code or a display sequence invoked by the machine code itself. - The menu prompt at line 154 uses `INVERSE 1` to highlight the instruction, a simple but effective UI touch. - Line 2349 checks `k<1 OR k>3` after already executing GO SUBs for valid values, meaning invalid entries loop back correctly but the range check is slightly misaligned with the prompt text (“Select 1-5”), which lists more than three options sharing the same selection code of 1. ### Bugs and Anomalies - At line 649 (Select End Graphic), `LET DerrRet=540` incorrectly sets the tape error return address to 540 (Select Start Graphic) instead of 640 (Select End Graphic). A tape error while loading an end graphic will thus restart the start graphic selection instead. - The printer menu at line 2340 prompts “Select (1-5)” but only handles values 1, 2, and 3; values 4 and 5 pass through all three IF tests and the range check (`k<1 OR k>3`) catches them, looping back — so the menu text is misleading. - Variables `e$`, `g$`, and `p$` (holding printer control block data for Epson, Seikosha, and Prowriter respectively) are referenced but never assigned within the visible BASIC listing, implying they are loaded from the “Bdesign” overlay tape file at line 300. - Line 474 is the target of `GO TO 474` (line 470) but does not exist in the listing, which is a valid BASIC technique — execution falls through to the next available line (480), skipping the icon print call cleanly. ## Source Code ``` 1 REM !VAL \\ FREE !CODE \\ RETURN ( RETURN ( THEN \'. THEN AND *U\\>"PEEK #( IF RESTORE !LEN \\N!@ RESTORE !VAL \\ FREE NEW o>& THEN % THEN gSTR$ RESTORE !VAL \\ FREE LLIST RETURN 8 RETURN "TAB \\ LLIST RESTORE FREE = OR RETURN \a8p\aSTR$ X COPY OR \ao> THEN % THEN gSTR$ RESTORE !ATTR \\ FREE LLIST RETURN (j CAT OR RESTORE FREE W!ATTR \\ FREE RETURN z(u*TAB \\r#s+ OR STR$ "TAB \\ LLIST #STR$ OR RESTORE x RETURN !!CODE \\ THEN F PI GO SUB B"TAB \\*TAB \\ LPRINT PI GO SUB B"TAB \\ LLIST STR$ !CODE \\ THEN F*TAB \\(PI GO SUB BA\ePI GO SUB B\\ RETURN #"TAB \\ LLIST #>"PEEK >= DATA \:'! THEN ? THEN THEN - THEN ? THEN THEN ,T]!ATTR \\ FREE RETURN ( FLASH OR RESTORE FREE VERIFY *TAB \\r#s+"TAB \\ LLIST #STR$ *TAB \\ RETURN PI GO SUB B"TAB \\ LLIST #>"PEEK >=\b LLIST #>"PEEK >=\bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 2 DEF FN a()=PEEK 23635+256*PEEK 23636+5 10 BORDER 6: PAPER 6: INK 0: CLS : CLEAR 45928 12 LOAD "Bcode"CODE 45928,8000 16 POKE 23728,5: POKE 23729,1: POKE 23723,3 17 RANDOMIZE USR FN a() 20 REM "BANNER DESIGNER" 22 PRINT AT 8,11;"Version 1.1" 42 PRINT AT 19,7;"ZEBRA SYSTEMS, INC." 44 PRINT AT 18,7;"COPYRIGHT (C) 1985" 84 REM Main Menu 85 IF INKEY$>"" THEN GO TO 85 86 CLS : POKE 23728,2: POKE 23729,2: POKE 23723,3 87 RANDOMIZE USR FN a() 89 REM "BANNER DESIGNER" 120 PRINT AT 7,6;"1 - Select Start Graphic" 130 PRINT AT 9,6;"2 - Enter Banner Text" 138 PRINT AT 11,6;"3 - Select End Graphic" 140 PRINT AT 13,6;"4 - Print Banner" 152 PRINT AT 15,6;"5 - Select Printer" 154 PRINT AT 21,5; INVERSE 1;"< press #no to select >" 160 LET k$=INKEY$ 170 IF k$="1" THEN GO TO 540 180 IF k$="2" THEN GO TO 300 182 IF k$="3" THEN GO TO 640 183 IF k$="4" THEN GO TO 400 185 IF k$="5" THEN GO TO 2300 195 GO TO 160 210 POKE 23728,11: POKE 23729,13: POKE 23723,2 220 RANDOMIZE USR FN a() 230 REM "LOADING" 240 PRINT AT 11,11; FLASH 1; OVER 1;" " 250 PRINT AT 12,11; FLASH 1; OVER 1;" " 252 OVER 0 300 LOAD "Bdesign" 310 IF INKEY$>"" THEN GO TO 310 312 CLS : POKE 23728,10: POKE 23729,7: POKE 23723,2 313 RANDOMIZE USR FN a() 314 REM "ENTER BANNER TEXT" 315 POKE 23658,8 330 INPUT "Banner Text? ";d$ 340 INPUT "Characters Solid or Outline (S or O)? ";k$ 342 IF k$<>"S" AND k$<>"s" AND k$<>"O" AND k$<>"o" THEN GO TO 340 343 POKE 23658,0 344 IF k$="S" OR k$="s" THEN LET Fmode=1 346 IF k$="O" OR k$="o" THEN LET Fmode=0 370 GO TO 85 400 REM Print Banner 410 IF INKEY$>"" THEN GO TO 410 420 CLS 422 POKE 23728,6: POKE 23729,10: POKE 23723,2 424 RANDOMIZE USR FN a() 425 REM "PRINT BANNER" 426 PRINT AT 11,3;"< Press ENTER to abort; >";AT 12,3;"< any other to proceed >" 427 PAUSE 4e4: IF INKEY$=CHR$ 13 THEN GO TO 85 428 CLS : PRINT AT 10,6; FLASH 1;" PRINTING BANNER " 430 IF icon1=12 THEN GO TO 434 431 POKE 49010,icon1 432 RANDOMIZE USR 49003: REM PRNTicon 434 IF d$="" THEN GO TO 470 440 POKE 49009,Fmode 442 LET dest=49121 444 FOR n=1 TO LEN d$ 446 POKE dest,CODE d$(n) 448 LET dest=dest+1 450 NEXT n 452 POKE dest,255 454 RANDOMIZE USR 49000: REM PRNTstrg 470 IF icon2=12 THEN GO TO 474 471 POKE 49010,icon2 472 RANDOMIZE USR 49003: REM PRNTicon 480 GO TO 85 540 REM Select Start Graphic 541 IF INKEY$>"" THEN GO TO 541 542 CLS : POKE 23728,10: POKE 23729,7: POKE 23723,2 543 RANDOMIZE USR FN a() 544 REM "SELECT START GRAPHIC" 546 INPUT "Graphic Name?";k$: IF k$="" THEN GO TO 85 547 IF k$="none" THEN LET icon1=12: GO TO 85 548 LET icon1=0: PRINT AT 18,0; BRIGHT 1;"Place Graphics cassette intoyour recorder, cue to start ofdesired Graphic, and play Tape" 549 LET DerrRet=540: ON ERR GO TO 5800 550 LOAD k$+".G"CODE 45928,256 553 ON ERR RESET : GO TO 85 640 REM Select End Graphic 641 IF INKEY$>"" THEN GO TO 641 642 CLS : POKE 23728,10: POKE 23729,7: POKE 23723,2 643 RANDOMIZE USR FN a() 644 REM " SELECT END GRAPHIC" 646 INPUT "Graphic Name?";k$: IF k$="" THEN GO TO 85 647 IF k$="none" THEN LET icon2=12: GO TO 85 648 LET icon2=1: PRINT AT 18,0; BRIGHT 1;"Place Graphics cassette intoyour recorder, cue to start ofdesired Graphic, and play Tape" 649 LET DerrRet=540: ON ERR GO TO 5800 650 LOAD k$+".G"CODE 45928+256,256 653 ON ERR RESET : GO TO 85 2229 REM Load pcntrl Blocks 2230 LET a=0 2231 FOR m=49019 TO 49019+39 STEP 8 2232 LET daddr=m 2233 LET a=a+1: LET n=CODE x$(a): IF n=254 THEN GO TO 2236 2234 IF n=255 THEN RETURN 2235 POKE daddr,n: LET daddr=daddr+1: GO TO 2233 2236 NEXT m 2239 RETURN 2300 REM Printer Custom 2310 CLS 2320 PRINT ,,,,,," * 80 Column Printer *" 2322 PRINT " ---------------------" 2324 PRINT ,, 2326 PRINT " Epson RX/FX ......1" 2328 PRINT " Gemini 10x/SG10 ..1" 2330 PRINT " Memotech DMX80 ...1" 2332 PRINT " Panasonic 1090 ...1" 2333 PRINT " Spirit-80 ........1" 2334 PRINT " Legend 808 .......1" 2338 PRINT " Seikosha GP250 ...2" 2339 PRINT " Prowriter 8510 ...3" 2340 INPUT ,,,," Select (1-5) ";k 2341 PRINT AT 20,9; FLASH 1;" Please Wait " 2342 IF k=1 THEN GO SUB 2433 2347 IF k=2 THEN GO SUB 2600 2348 IF k=3 THEN GO SUB 2700 2349 IF k<1 OR k>3 THEN GO TO 2340 2350 CLS 2352 PRINT ,,,,,," * Parallel Interface *" 2354 PRINT " ----------------------" 2356 PRINT ,, 2358 PRINT " AERCO ..........1" 2359 PRINT " TASMAN-b .......2" 2360 PRINT " TASMAN-c .......3" 2361 PRINT " A&J ............4" 2362 INPUT ,,,," Select (1 or 4) ";k 2363 IF k<1 OR k>4 THEN GO TO 2362 2364 CLS : POKE 49018,k-1: RANDOMIZE USR 49006: REM install printer interface 2365 INPUT "Do you want LineFeed codes sent (Y or N)? ";k$ 2366 IF k$<>"Y" AND k$<>"y" AND k$<>"N" AND k$<>"n" THEN GO TO 2365 2367 IF k$="N" OR k$="n" THEN POKE 49021,0 2368 IF k$="Y" OR k$="y" THEN POKE 49021,10 2369 GO TO 85 2433 REM Epson 2435 LET x$=e$ 2437 GO SUB 2230: REM load block 2440 POKE 49571,10: REM set INDNTchr 2441 POKE 49583,2: REM set INDNTicn 2444 RETURN 2600 REM Seik250 2610 LET x$=g$ 2620 GO SUB 2230: REM load block 2640 GO TO 2440 2700 REM Prowriter 2710 LET x$=p$ 2720 GO SUB 2230: REM load block 2730 POKE 49571,20: REM set INDNTchr 2731 POKE 49583,14: REM set INDNTicn 2740 RETURN 5800 REM tape error 5815 PRINT AT 14,10; FLASH 1;" TAPE ERROR " 5820 PRINT AT 16,3;" press ENTER to try again" 5821 PAUSE 4e4 5822 ON ERR GO TO 5822 5830 ON ERR RESET : GO TO DerrRet 9900 REM ** input Pcntrl Blocks 9902 FOR n=1 TO 50 9910 INPUT x 9911 IF x=255 THEN GO TO 9930 9912 LET p$(n)=CHR$ x 9920 NEXT n 9930 FOR n=n TO 50: LET p$(n)=CHR$ 255: NEXT n 9999 SAVE "Bdesign" LINE 12: BEEP 1,40: SAVE "Bcode"CODE 45928,8000 1 REM !VAL \\ FREE !CODE \\ RETURN ( RETURN ( THEN \'. THEN AND *U\\>"PEEK #( IF RESTORE !LEN \\N!@ RESTORE !VAL \\ FREE NEW o>& THEN % THEN gSTR$ RESTORE !VAL \\ FREE LLIST RETURN 8 RETURN "TAB \\ LLIST RESTORE FREE = OR RETURN \a8p\aSTR$ X COPY OR \ao> THEN % THEN gSTR$ RESTORE !ATTR \\ FREE LLIST RETURN (j CAT OR RESTORE FREE W!ATTR \\ FREE RETURN z(u*TAB \\r#s+ OR STR$ "TAB \\ LLIST #STR$ OR RESTORE x RETURN !!CODE \\ THEN F PI GO SUB B"TAB \\*TAB \\ LPRINT PI GO SUB B"TAB \\ LLIST STR$ !CODE \\ THEN F*TAB \\(PI GO SUB BA\ePI GO SUB B\\ RETURN #"TAB \\ LLIST #>"PEEK >= DATA \:'! THEN ? THEN THEN - THEN ? THEN THEN ,T]!ATTR \\ FREE RETURN ( FLASH OR RESTORE FREE VERIFY *TAB \\r#s+"TAB \\ LLIST #STR$ *TAB \\ RETURN PI GO SUB B"TAB \\ LLIST #>"PEEK >=\b LLIST #>"PEEK >=\bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 2 DEF FN a()=PEEK 23635+256*PEEK 23636+5 10 BORDER 6: PAPER 6: INK 0: CLS : CLEAR 45928 12 LOAD "Bcode"CODE 45928,8000 16 POKE 23728,5: POKE 23729,1: POKE 23723,3 17 RANDOMIZE USR FN a() 20 REM "BANNER DESIGNER" 22 PRINT AT 8,11;"Version 1.1" 42 PRINT AT 19,7;"ZEBRA SYSTEMS, INC." 44 PRINT AT 18,7;"COPYRIGHT (C) 1985" 84 REM Main Menu 85 IF INKEY$>"" THEN GO TO 85 86 CLS : POKE 23728,2: POKE 23729,2: POKE 23723,3 87 RANDOMIZE USR FN a() 89 REM "BANNER DESIGNER" 120 PRINT AT 7,6;"1 - Select Start Graphic" 130 PRINT AT 9,6;"2 - Enter Banner Text" 138 PRINT AT 11,6;"3 - Select End Graphic" 140 PRINT AT 13,6;"4 - Print Banner" 152 PRINT AT 15,6;"5 - Select Printer" 154 PRINT AT 21,5; INVERSE 1;"< press #no to select >" 160 LET k$=INKEY$ 170 IF k$="1" THEN GO TO 540 180 IF k$="2" THEN GO TO 300 182 IF k$="3" THEN GO TO 640 183 IF k$="4" THEN GO TO 400 185 IF k$="5" THEN GO TO 2300 195 GO TO 160 210 POKE 23728,11: POKE 23729,13: POKE 23723,2 220 RANDOMIZE USR FN a() 230 REM "LOADING" 240 PRINT AT 11,11; FLASH 1; OVER 1;" " 250 PRINT AT 12,11; FLASH 1; OVER 1;" " 252 OVER 0 300 LOAD "Bdesign" 310 IF INKEY$>"" THEN GO TO 310 312 CLS : POKE 23728,10: POKE 23729,7: POKE 23723,2 313 RANDOMIZE USR FN a() 314 REM "ENTER BANNER TEXT" 315 POKE 23658,8 330 INPUT "Banner Text? ";d$ 340 INPUT "Characters Solid or Outline (S or O)? ";k$ 342 IF k$<>"S" AND k$<>"s" AND k$<>"O" AND k$<>"o" THEN GO TO 340 343 POKE 23658,0 344 IF k$="S" OR k$="s" THEN LET Fmode=1 346 IF k$="O" OR k$="o" THEN LET Fmode=0 370 GO TO 85 400 REM Print Banner 410 IF INKEY$>"" THEN GO TO 410 420 CLS 422 POKE 23728,6: POKE 23729,10: POKE 23723,2 424 RANDOMIZE USR FN a() 425 REM "PRINT BANNER" 426 PRINT AT 11,3;"< Press ENTER to abort; >";AT 12,3;"< any other to proceed >" 427 PAUSE 4e4: IF INKEY$=CHR$ 13 THEN GO TO 85 428 CLS : PRINT AT 10,6; FLASH 1;" PRINTING BANNER " 430 IF icon1=12 THEN GO TO 434 431 POKE 49010,icon1 432 RANDOMIZE USR 49003: REM PRNTicon 434 IF d$="" THEN GO TO 470 440 POKE 49009,Fmode 442 LET dest=49121 444 FOR n=1 TO LEN d$ 446 POKE dest,CODE d$(n) 448 LET dest=dest+1 450 NEXT n 452 POKE dest,255 454 RANDOMIZE USR 49000: REM PRNTstrg 470 IF icon2=12 THEN GO TO 474 471 POKE 49010,icon2 472 RANDOMIZE USR 49003: REM PRNTicon 480 GO TO 85 540 REM Select Start Graphic 541 IF INKEY$>"" THEN GO TO 541 542 CLS : POKE 23728,10: POKE 23729,7: POKE 23723,2 543 RANDOMIZE USR FN a() 544 REM "SELECT START GRAPHIC" 546 INPUT "Graphic Name?";k$: IF k$="" THEN GO TO 85 547 IF k$="none" THEN LET icon1=12: GO TO 85 548 LET icon1=0: PRINT AT 18,0; BRIGHT 1;"Place Graphics cassette intoyour recorder, cue to start ofdesired Graphic, and play Tape" 549 LET DerrRet=540: ON ERR GO TO 5800 550 LOAD k$+".G"CODE 45928,256 553 ON ERR RESET : GO TO 85 640 REM Select End Graphic 641 IF INKEY$>"" THEN GO TO 641 642 CLS : POKE 23728,10: POKE 23729,7: POKE 23723,2 643 RANDOMIZE USR FN a() 644 REM " SELECT END GRAPHIC" 646 INPUT "Graphic Name?";k$: IF k$="" THEN GO TO 85 647 IF k$="none" THEN LET icon2=12: GO TO 85 648 LET icon2=1: PRINT AT 18,0; BRIGHT 1;"Place Graphics cassette intoyour recorder, cue to start ofdesired Graphic, and play Tape" 649 LET DerrRet=540: ON ERR GO TO 5800 650 LOAD k$+".G"CODE 45928+256,256 653 ON ERR RESET : GO TO 85 2229 REM Load pcntrl Blocks 2230 LET a=0 2231 FOR m=49019 TO 49019+39 STEP 8 2232 LET daddr=m 2233 LET a=a+1: LET n=CODE x$(a): IF n=254 THEN GO TO 2236 2234 IF n=255 THEN RETURN 2235 POKE daddr,n: LET daddr=daddr+1: GO TO 2233 2236 NEXT m 2239 RETURN 2300 REM Printer Custom 2310 CLS 2320 PRINT ,,,,,," * 80 Column Printer *" 2322 PRINT " ---------------------" 2324 PRINT ,, 2326 PRINT " Epson RX/FX ......1" 2328 PRINT " Gemini 10x/SG10 ..1" 2330 PRINT " Memotech DMX80 ...1" 2332 PRINT " Panasonic 1090 ...1" 2333 PRINT " Spirit-80 ........1" 2334 PRINT " Legend 808 .......1" 2338 PRINT " Seikosha GP250 ...2" 2339 PRINT " Prowriter 8510 ...3" 2340 INPUT ,,,," Select (1-5) ";k 2341 PRINT AT 20,9; FLASH 1;" Please Wait " 2342 IF k=1 THEN GO SUB 2433 2347 IF k=2 THEN GO SUB 2600 2348 IF k=3 THEN GO SUB 2700 2349 IF k<1 OR k>3 THEN GO TO 2340 2350 CLS 2352 PRINT ,,,,,," * Parallel Interface *" 2354 PRINT " ----------------------" 2356 PRINT ,, 2358 PRINT " AERCO ..........1" 2359 PRINT " TASMAN-b .......2" 2360 PRINT " TASMAN-c .......3" 2361 PRINT " A&J ............4" 2362 INPUT ,,,," Select (1 or 4) ";k 2363 IF k<1 OR k>4 THEN GO TO 2362 2364 CLS : POKE 49018,k-1: RANDOMIZE USR 49006: REM install printer interface 2365 INPUT "Do you want LineFeed codes sent (Y or N)? ";k$ 2366 IF k$<>"Y" AND k$<>"y" AND k$<>"N" AND k$<>"n" THEN GO TO 2365 2367 IF k$="N" OR k$="n" THEN POKE 49021,0 2368 IF k$="Y" OR k$="y" THEN POKE 49021,10 2369 GO TO 85 2433 REM Epson 2435 LET x$=e$ 2437 GO SUB 2230: REM load block 2440 POKE 49571,10: REM set INDNTchr 2441 POKE 49583,2: REM set INDNTicn 2444 RETURN 2600 REM Seik250 2610 LET x$=g$ 2620 GO SUB 2230: REM load block 2640 GO TO 2440 2700 REM Prowriter 2710 LET x$=p$ 2720 GO SUB 2230: REM load block 2730 POKE 49571,20: REM set INDNTchr 2731 POKE 49583,14: REM set INDNTicn 2740 RETURN 5800 REM tape error 5815 PRINT AT 14,10; FLASH 1;" TAPE ERROR " 5820 PRINT AT 16,3;" press ENTER to try again" 5821 PAUSE 4e4 5822 ON ERR GO TO 5822 5830 ON ERR RESET : GO TO DerrRet 9900 REM ** input Pcntrl Blocks 9902 FOR n=1 TO 50 9910 INPUT x 9911 IF x=255 THEN GO TO 9930 9912 LET p$(n)=CHR$ x 9920 NEXT n 9930 FOR n=n TO 50: LET p$(n)=CHR$ 255: NEXT n 9999 SAVE "Bdesign" LINE 12: BEEP 1,40: SAVE "Bcode"CODE 45928,8000 ```