PC-Draw v3.0

Products: PC-DRAW
Date: 1987
Type: Program
Platform(s): TS 2068

PC-Draw v3.0 is a printed circuit board artwork design and printing system that produces output suitable for photographic negative production and chemical etching. The package consists of multiple tape-loaded components including a screen loader, machine code block (“PC-Code”), and a BASIC driver program, with separate variants for two different hardware platforms. The printer driver configuration subsystem supports at least five parallel interface types — A&J, Tasman B, Aerco, Oliger, and a user-definable “Other” — with port addresses, busy-line polarity, strobe type (hardware or software), and bit number all configurable via POKE operations into the machine code block. Print jobs can be queued for up to six copies, each independently set for true or mirror image, quick or camera-ready quality, and grid overlay options; print parameters are passed to the machine code routine by POKEing ASCII codes of option characters into fixed addresses before calling RANDOMIZE USR. The loader component also includes a version-conversion routine that detects v2.0 file format by signature byte checks at known addresses and upgrades files in place using a machine code conversion call.


Program Analysis

Program Structure

The listing contains several distinct programs that load sequentially from tape, each starting at line 10. The overall load chain is:

  1. Bootstrap loader (lines 10–40): Sets colors, loads PC-Scrn as a SCREEN$, then loads PC-Code as a CODE block, then chains to Draw.
  2. Draw / tape utility (lines 10–210): A machine code save/load utility that reads a filename from memory at address 36082, then either saves or loads the machine code block based on a mode flag PEEKed from address 36066.
  3. PC-Draw main program — ZX Spectrum variant (lines 220–1370): Handles backup copy creation, printer driver configuration, and the main LOAD/PRINT/QUIT workflow. Operates with machine code at address 54344 and driver block at arc=64445.
  4. PC-Print — TS-2068 variant (lines 10–1440, second occurrence): A parallel printer support package with its machine code at address 33290 and driver block at arc=34161. Presents a title screen identifying itself as “For TS-2068 Ver.3.0”.

The entire listing appears to be a dump of both platform variants interleaved, with the bootstrap and tape utility appearing twice (once for each variant’s tape set).

Machine Code Integration

The main computational work is delegated entirely to machine code blocks loaded from tape. Key entry points and data addresses differ between the two platform variants:

ParameterSpectrum variantTS-2068 variant
CODE load address5434433290
CODE length (saved)11192 bytes1042 bytes
RANDOMIZE USR entry27512 (Draw utility) / none explicit in main33290
Printer driver block base (arc)6444534161
Printer width POKE62945 / 6294633285
Date string POKE base6460134317
Print options POKE baseN/A (Spectrum variant uses different flow)33286

Print job parameters (mirror/true, quality, grid) are communicated to machine code in the TS-2068 variant by POKEing the ASCII codes of single-character option responses into addresses 33286, 33287, and 33288 (loop: FOR f=SGN PI TO INT PI, i.e., f=1 to 3), then invoking RANDOMIZE USR 33290.

Printer Driver Configuration

The printer driver is a small machine code stub at arc whose Z80 opcodes are patched in place by POKE statements to adapt it for different parallel interfaces. The configuration encodes port numbers, strobe polarity, and busy-bit position directly as instruction operands:

  • POKE arc, b — busy-in port number (used as operand of an IN instruction)
  • POKE arc+7, o — data-out port number (operand of OUT)
  • POKE arc+11, e — strobe port number
  • POKE arc+3, 40-8*d — busy polarity: 40 = JR NZ (low=busy), 32 = JR Z (high=busy)
  • POKE arc+10, s — strobe opcode: 211 = OUT (n),A software strobe; 219 = IN A,(n) as NOP-equivalent for hardware strobe
  • POKE arc+2, c*8+71 — bit-test mask baked into a AND n or similar instruction (71 = LD B,A, with bit offset scaled by 8)
  • POKE arc+12, 61+140*(s=219) — 61 = DEC A for software strobe; 201 = RET for hardware strobe (140+61=201), effectively making the strobe output a no-op for hardware-strobe interfaces

This approach allows a single machine code routine to serve multiple interface designs without requiring separate code blocks for each.

Key BASIC Idioms and Techniques

The TS-2068 variant makes extensive use of VAL "number" in place of numeric literals throughout GO TO, GO SUB, POKE, and expression contexts. This is a memory optimization: storing a number as a string literal in BASIC saves the 5-byte floating-point number that would otherwise be embedded inline. The same variant also uses SGN PI (= 1) and NOT PI (= 0) and INT PI (= 3) as compact substitutes for the corresponding integer constants.

The computed GO TO idiom appears in the TS-2068 variant’s interface-detection block, where LET z=VAL "222" sets a base line number and branches are expressed as GO TO z, GO TO z+SGN PI, and GO TO z-INT PI to reach nearby lines 219, 222, and 223, saving bytes compared to literal line numbers in each branch.

The bep variable holds the line number of the BEEP subroutine (1320), and calls such as GO SUB bep and GO SUB bep+SGN PI (= 1321) are used throughout, allowing the subroutine address to be changed in one place.

Version Detection and File Conversion

Lines 820–840 of the TS-2068 variant implement an automatic v2.0-to-v3.0 file conversion. Six bytes at fixed addresses within the just-loaded CODE block are checked against known v2.0 signature values (PEEK 65186=255, PEEK 65182=62, PEEK 65183=150, etc.). If all match, the program POKEs the ASCII code for ‘2’ (50) into address 33286 and calls RANDOMIZE USR 33290 to perform the conversion in machine code, then reports “CONVERTED”. Otherwise it POKEs ‘3’ (51) to flag a v3.0 file.

ON ERR Usage

Both variants make use of ON ERR GO TO to trap tape verify failures. The pattern used is: set ON ERR GO TO error_handler, perform VERIFY, then immediately ON ERR RESET to cancel the trap. The error handler prints a message and INPUTs a save/ignore choice (y$="s" to retry, "i" to continue). This provides robust tape error recovery without crashing to BASIC error messages.

Filename Recovery from Screen

Lines 721–724 of the TS-2068 variant contain an unusual technique: if a file was loaded with an empty name (a$="" after a blank LOAD), the program attempts to reconstruct the filename by scanning screen row 2 (the LOAD header display line) using SCREEN$(2,f), searching backward from column 28 for the last non-space character, then reading forward from column 7 to that column to assemble a$. This recovers the filename that the tape header printed on screen during loading.

Tape Utility (Draw / Save-Load Stub)

The Draw program (lines 10–210, appearing twice) is a self-modifying tape utility. It reads a filename string from memory starting at address 36082 by PEEKing bytes until a space (32) is found, building n$. A mode byte at 36066 selects save (108 = ASCII ‘l’? — actually used as a flag) or load behavior. In save mode, it determines the CODE block start address by reading the system variable at 65209/65210 and SAVEs from there to address 65535. In load mode it LOADs n$CODE and optionally patches address 37048 with 201 (Z80 RET) if the loaded block’s end address is below 37771. Lines 40 and 30 use DELETE to remove program lines before and after use, a self-modifying BASIC technique.

Anomalies and Notes

  • Line 140 of the TS-2068 variant branches to VAL "120" on invalid date length, but line 120 does not exist in the listing — this would re-execute the INPUT at line 130, effectively re-prompting. This appears intentional.
  • Line 370 in the TS-2068 variant (the reconfigure entry point) is referenced by GO TO VAL "370" from line 330, but the listing jumps from line 360 directly to 380 — line 370 is absent. The GO TO at 330 would target 380 via fall-through, which is harmless in context.
  • The DIM j$(3,n) at line 890 creates a 2D string array with fixed first dimension 3 and variable second dimension n (copies). Each element stores a single character response, accessed as j$(1,f), j$(2,f), j$(3,f) for mirror/quality/grid options per copy.
  • The Spectrum variant’s interface selection at line 1160 uses the boolean expression (l>2) to compute port address differences between Tasman (l=2) and Aerco/Oliger (l=3,4) in a single line, avoiding separate branches.

Content

Appears On

Related Products

Allows user to design detailed printed circuit board artwork which can be printed and photographed to produce a negative for...

Related Articles

External keyboard for TS2068, sound booster, RGB interface and cartridge adaptor from John Mathewson. Utility tape for TS1000/ZX81/TS1500 from LST...
256K RAM from Larken; PC-DRAW from MDM Enterprises; tax software from ABBA Soft; Beta Basic 3; BBSes; West coast fair...
Review of program for drawing printed circuit boards.

Related Content

Image Gallery

Source Code

   10 CLEAR 54000
   15 INK 7: PAPER 7: BORDER 1
   20 LOAD "PC-Scrn"SCREEN$ 
   25 PRINT AT 0,0;
   30 LOAD "PC-Code"CODE 
   35 PRINT AT 0,0;
   40 LOAD "Draw"
   10 DELETE VAL "220",
   20 CLEAR VAL "27499"
   30 RANDOMIZE USR VAL "64615"
   40 DELETE ,VAL "30"
   50 LET l=VAL "36082"
   60 POKE VAL "23658",NOT PI
   70 IF PEEK VAL "36066"=VAL "113" THEN STOP 
   80 LET n$=""
   90 IF PEEK l<>VAL "32" THEN LET n$=n$+CHR$ PEEK l: LET l=l+1: GO TO VAL "90"
  100 IF PEEK VAL "36066"=VAL "108" THEN GO TO VAL "150"
  110 LET l=PEEK VAL "65209"+VAL "256"*PEEK VAL "65210"
  115 PRINT "Source = ";l,"Length = ";VAL "65536"-l
  120 SAVE n$CODE l,VAL "65536"-l
  130 CLS : GO SUB VAL "200"
  140 VERIFY n$CODE : GO TO VAL "190"
  150 CLS : PRINT : PRINT "    loading  **";n$;"**"
  160 GO SUB VAL "210"
  170 LOAD n$CODE 
  180 IF PEEK VAL "65207"+VAL "256"*PEEK VAL "65208"<VAL "37771" THEN POKE VAL "37048",VAL "201"
  190 BEEP VAL ".2",VAL "4": RANDOMIZE USR VAL "27512": GO TO VAL "50"
  200 BEEP VAL ".2",VAL "4": PRINT AT VAL "10",VAL "0";"        Rewind to verify        "
  210 PRINT "   If error occurs, goto 190    ",,: RETURN 
  220 REM ****cust enter****
  230 CLEAR 54300
  240 LOAD "PC-Code"CODE 
  250 PAPER 7: INK 0: BORDER 1: CLS 
  260 FOR f=1 TO 4
  270 PRINT AT 10,7; FLASH 1;"   Stop the tape   ": BEEP .4,6: NEXT f
  280 POKE 23658,0: POKE 23609,9
  290 PRINT AT 10,13;"DATE": INPUT " Date (xx/xx/xx) ";a$
  300 IF LEN a$>10 THEN GO TO 290
  310 FOR f=1 TO LEN a$: POKE 64601+f,CODE a$(f): NEXT f
  320 PRINT AT 10,9;"PRINTER WIDTH": INPUT " Printer width in chrs ? ";a
  330 POKE 62946,a
  340 IF a<32 OR a>136 THEN GO TO 320
  350 LET l=32
  360 IF l<a THEN LET l=l+5: GO TO 360
  370 POKE 62945,l
  380 PAPER 7: INK 0: BORDER 1
  390 GO TO 10
  400 DELETE 450,
  410 CLS : PRINT AT 10,10;"CUSTOM COPY": INPUT "Save Customized Copy? (y/n)";a$: IF a$<>"y" THEN GO TO 380
  420 PRINT ,,,,"       Saving 'PC-Custom'": SAVE "PC-Custom" LINE 220: PRINT ,,"       Saving 'PC-Code'": SAVE "PC-Code"CODE 54344,11192
  430 CLS : PRINT "   If error occurs, GOTO 410": PRINT AT 10,11;"VERIFYING": VERIFY "PC-Custom": VERIFY "PC-Code"CODE 
  440 GO TO 380
  450 CLEAR 54300
  460 BORDER 1: PRINT AT 7,10;"PC-DRAW  3.0": PRINT AT 9,2;"PRINTED CIRCUIT BOARD SYSTEM": PRINT AT 11,10;"LOADING CODE"
  470 LOAD ""CODE 54344
  480 PAPER 0: INK 7: BORDER 1: CLS 
  490 POKE 23658,0: POKE 23609,9
  500 FOR f=1 TO 4
  510 PRINT AT 10,7; FLASH 1;"   Stop the tape   ": BEEP .4,6: NEXT f
  520 CLS : PRINT AT 9,10;"BACK-UP COPY": INPUT "Make Back-up? (y/n)";a$: CLS : IF a$<>"y" THEN GO TO 610
  530 CLS : PRINT ,,,,"        Saving  'PC-Draw'": SAVE "PC-Draw" LINE 450: PRINT ,,"        Saving  'PC-Code'": SAVE "PC-Code"CODE 54344,11192
  540 ON ERR GO TO 580
  550 BEEP VAL ".2",VAL "4": PRINT AT VAL "10",VAL "0"; FLASH VAL "1";"        Rewind to verify        "
  560 PAUSE 150: CLS : PRINT AT 10,11;"VERIFYING": VERIFY "": VERIFY ""CODE 
  570 ON ERR RESET : GO TO 610
  580 ON ERR RESET : PRINT : PRINT "VERIFY was  BAD",,,,"Try a new   SAVE","    or      IGNOR"
  581 INPUT "(s/i)? ";y$
  600 IF y$="s" THEN GO TO 530
  610 BORDER 1
  620 GO SUB 650
  630 GO TO 400
  640 PAPER 7: INK 0: BORDER 1
  650 REM DRIVER is SET AT
  660 LET arc=64445
  670 CLS : PRINT AT 10,13;"DATE": INPUT " Date (xx/xx/xx) ";a$
  680 LET x$=a$
  690 IF LEN a$>10 THEN GO TO 670
  700 FOR f=1 TO LEN a$: POKE 64601+f,CODE a$(f): NEXT f
  710 PRINT AT 10,9;"PRINTER WIDTH": INPUT " Printer width in chrs ? ";a
  720 POKE 62946,a
  730 IF a<32 OR a>136 THEN GO TO 710
  740 LET l=32
  750 IF l<a THEN LET l=l+5: GO TO 750
  760 POKE 62945,l
  770 LET d=PEEK (arc+3): LET d$="Hi": LET a$="off": LET b=PEEK arc
  780 LET e=PEEK (arc+11): LET c=PEEK (arc+2): LET s=PEEK (arc+10): LET o=PEEK (arc+7)
  790 GO SUB 1370: CLS : PRINT " Your Printer Driver is set for "
  800 REM peeks of driver
  810 PRINT ,,"  The Date is  ";x$
  820 PRINT ,,"  Printer Width is ";a;" Chrs."
  830 IF PEEK arc<>65 THEN GO TO 860
  840 IF PEEK (arc+2)<>87 OR PEEK (arc+3)<>32 OR PEEK (arc+7)<>66 OR PEEK (arc+10)<>211 OR PEEK (arc+11)<>65 OR PEEK (arc+12)<>61 THEN GO TO 920
  850 PRINT ,,"  Printer Interface set for'A&J'": GO TO 930
  860 IF PEEK arc<>191 THEN GO TO 890
  870 IF PEEK (arc+2)<>71 OR PEEK (arc+3)<>32 OR PEEK (arc+7)<>123 OR PEEK (arc+10)<>219 OR PEEK (arc+11)<>127 OR PEEK (arc+12)<>201 THEN GO TO 920
  880 PRINT ,," Interface is set for 'Tasman B'": GO TO 930
  890 IF PEEK arc<>127 THEN GO TO 920
  900 IF PEEK (arc+2)<>103 OR PEEK (arc+3)<>32 OR PEEK (arc+7)<>127 OR PEEK (arc+10)<>219 OR PEEK (arc+11)<>127 OR PEEK (arc+12)<>201 THEN GO TO 920
  910 PRINT ,,"  Interface set for Oliger/Aerco": GO TO 930
  920 PRINT ,,"  Interface is set for 'Other'": GO TO 930
  930 PRINT ,,"  Port no. for data out is   ";: PRINT o
  940 PRINT ,,"  Port no. for busy in is    ";: PRINT b
  950 IF PEEK (arc+12)=201 THEN PRINT ,,"  Hardware Strobe": GO TO 970
  960 PRINT ,,"  Port no. for strobe is     ";: PRINT e
  970 PRINT ,,"  Bit number for busy in is  ";: PRINT (c-71)/8
  980 IF d=32 THEN LET d$="Hi"
  990 IF d=40 THEN LET d$="Low"
 1000 PRINT ,,"  Bit ";(c-71)/8;" is '";d$;"' for busy?  "
 1010 LET a$="on"
 1020 IF PEEK (arc+12)=201 THEN LET a$="off"
 1030 PRINT ,,"  Software strobe is '";a$;"'" 
 1040 GO SUB 1370: PRINT ,,"  Do you wish to reconfigure      your Printer Driver? (Y/N)    " 
 1050 IF INKEY$="Y" OR INKEY$="y" THEN GO TO 1090
 1060 IF INKEY$="n" OR INKEY$="N" THEN RETURN 
 1070 IF INKEY$="" THEN GO TO 1050
 1080 GO TO 1050
 1090 REM ***configure printer driver-pokes to printer driver
 1100 GO SUB 1340
 1110 CLS : PRINT ,,,,"   1   A&J",,"   2   Tasman",,"   3   Aerco",,"   4   Oliger",,"   5   Other   ";
 1120 INPUT " Selection please: ";l
 1130 CLS : IF l<1 OR l>5 THEN GO TO 1100
 1140 LET l=INT l: IF l=1 THEN LET e=65: LET b=65: LET c=2: LET d=1: LET s=211: LET o=66: GO TO 1290
 1150 IF l=5 THEN GO TO 1180
 1160 LET e=127: LET d=1: LET s=219: LET o=123+4*(l>2): LET b=191-64*(l>2): LET c=4*(l>2): GO SUB 1300
 1170 GO TO 770
 1180 GO SUB 1340
 1190 PRINT ,,,,"  Port no. for data out?   ";: INPUT o: PRINT o
 1200 PRINT ,,"  Port no. for busy in?    ";: INPUT b: PRINT b: LET e=b
 1210 PRINT ,,"  Bit number for busy in?   ";: INPUT c: PRINT c
 1220 PRINT ,,"  Is Bit ";c,,"  Hi or Low for busy? (1/0) ";: INPUT d: PRINT d
 1230 IF d<>0 AND d<>1 THEN GO TO 1220
 1240 PRINT ,,"  Software strobe? (y/n)    ";: INPUT a$: PRINT ;a$
 1250 IF a$="n" THEN LET s=219: GO TO 1270
 1260 LET s=211: PRINT ,,"  Port no. for strobe?     ";: INPUT e: PRINT e
 1270 PRINT ,,,,,,"Are options correct? (y/n)": INPUT b$
 1280 IF b$="n" THEN GO TO 1180
 1290 GO SUB 1300: GO TO 770
 1300 POKE arc,b: POKE arc+7,o: POKE arc+11,e
 1310 POKE arc+3,40-8*d
 1320 POKE arc+10,s: POKE arc+2,c*8+71: POKE arc+12,61+140*(s=219)
 1330 RETURN 
 1340 CLS : PRINT ,,"  Printer Interface Selection: "
 1350 PRINT "  ----------------------------": RETURN 
 1370 BEEP .01,.1: BEEP .01,.1: BEEP .01,.1: RETURN 
   10 PAPER NOT PI: INK VAL "7": BORDER SGN PI
   20 CLEAR VAL "33280"
   25 LET bep=VAL "1320"
   30 GO SUB bep
   40 PRINT AT VAL "5",VAL "13";"PC-Draw"
   50 PRINT AT VAL "7",VAL "5";"Printer Support Package"
   55 PRINT AT VAL "9",VAL "10";"For TS-2068"
   60 PRINT AT VAL "11",VAL "12";"Ver.3.0"
   70 PRINT AT VAL "13",VAL "7";"M.D.M. Enterprises"
   80 PRINT AT VAL "15",VAL "13";"\*1987"
   90 PRINT AT VAL "17",VAL "10";"LOADING CODE"
  100 LOAD "PC-PCode"CODE 
  110 POKE VAL "23609",VAL "8"
  130 INPUT " Date (xx/xx/xx) ";x$
  140 IF LEN x$>VAL "10" THEN GO TO VAL "120"
  150 FOR f=SGN PI TO LEN x$: POKE VAL "34317"+f,CODE x$(f): NEXT f
  160 INPUT " Printer width in chrs ? ";a
  170 POKE VAL "33285",a
  180 LET z$="(y/n)"
  195 LET arc=VAL "34161": LET d=PEEK (arc+3): LET d$="Hi": LET a$="off": LET b=PEEK arc
  197 LET e=PEEK (arc+11): LET c=PEEK (arc+2): LET s=PEEK (arc+10): LET o=PEEK (arc+7)
  200 GO SUB bep: CLS : PRINT " Your Printer Driver is set for "
  210 LET z=VAL "222"
  211 PRINT ,,"  The Date is  ";x$
  212 PRINT ,,"  Printer Width is ";a;" Chrs."
  213 IF PEEK arc<>65 THEN GO TO VAL "216"
  214 IF PEEK (arc+2)<>87 OR PEEK (arc+3)<>32 OR PEEK (arc+7)<>66 OR PEEK (arc+10)<>211 OR PEEK (arc+11)<>65 OR PEEK (arc+12)<>61 THEN GO TO z
  215 PRINT ,,"  Printer Interface set for'A&J'": GO TO z+SGN PI
  216 IF PEEK arc<>191 THEN GO TO z-INT PI
  217 IF PEEK (arc+2)<>71 OR PEEK (arc+3)<>32 OR PEEK (arc+7)<>123 OR PEEK (arc+10)<>219 OR PEEK (arc+11)<>127 OR PEEK (arc+12)<>201 THEN GO TO z
  218 PRINT ,," Interface is set for 'Tasman B'": GO TO z+SGN PI
  219 IF PEEK arc<>127 THEN GO TO z
  220 IF PEEK (arc+2)<>103 OR PEEK (arc+3)<>32 OR PEEK (arc+7)<>127 OR PEEK (arc+10)<>219 OR PEEK (arc+11)<>127 OR PEEK (arc+12)<>201 THEN GO TO z
  221 PRINT ,,"  Interface set for Oliger/Aerco": GO TO z+SGN PI
  222 PRINT ,,"  Interface is set for 'Other'": GO TO z+SGN PI
  229 PRINT ,,"  Port no. for data out is   ";: PRINT o
  230 PRINT ,,"  Port no. for busy in is    ";: PRINT b
  235 IF PEEK (arc+12)=201 THEN PRINT ,,"  Hardware Strobe": GO TO 250
  240 PRINT ,,"  Port no. for strobe is     ";: PRINT e
  250 PRINT ,,"  Bit number for busy in is  ";: PRINT (c-71)/8
  260 IF d=VAL "32" THEN LET d$="Hi"
  270 IF d=VAL "40" THEN LET d$="Low"
  280 PRINT ,,"  Bit ";(c-71)/8;" is '";d$;"' for busy?  "
  290 LET a$="on"
  300 IF PEEK (arc+12)=201 THEN LET a$="off"
  310 PRINT ,,"  Software strobe is '";a$;"'" 
  320 GO SUB bep+SGN PI: PRINT ,,"  Do you wish to reconfigure      your Printer Driver? (Y/N)    " 
  330 IF INKEY$="y" THEN GO TO VAL "370"
  340 IF INKEY$="n" THEN GO TO VAL "650"
  360 GO TO VAL "330"
  380 GO SUB VAL "620"
  390 PRINT ,,,,"   1   A&J",,"   2   Tasman B",,"   3   Aerco",,"   4   Oliger",,"   5   Other   ";
  400 INPUT " Selection please: ";l
  410 CLS : IF l<SGN PI OR l>VAL "5" THEN GO TO VAL "380"
  420 LET l=INT l: IF l=SGN PI THEN LET e=VAL "65": LET b=e: LET c=VAL "2": LET d=SGN PI: LET s=VAL "211": LET o=e+SGN PI: GO TO VAL "570"
  430 IF l=VAL "5" THEN GO TO VAL "460"
  440 LET e=VAL "127": LET d=SGN PI: LET s=VAL "219": LET o=VAL "123"+4*(l>2): LET b=VAL "191"-64*(l>2): LET c=4*(l>2): GO SUB VAL "580"
  450 GO TO VAL "190"
  460 GO SUB VAL "620"
  470 PRINT ,,,,"  Port no. for data out?   ";: INPUT o: PRINT o
  480 PRINT ,,"  Port no. for busy in?    ";: INPUT b: PRINT b: LET e=b
  490 PRINT ,,"  Bit number for busy in?   ";: INPUT c: PRINT c
  500 PRINT ,,"  Is Bit ";c,,"  Hi or Low for busy? (1/0) ";: INPUT d: PRINT d
  510 IF d<>0 AND d<>1 THEN GO TO VAL "500"
  520 PRINT ,,"  Software strobe? (y/n)    ";: INPUT a$: PRINT ;a$
  530 IF a$="n" THEN LET s=VAL "219": GO TO VAL "550"
  540 LET s=VAL "211": PRINT ,,"  Port no. for strobe?     ";: INPUT e: PRINT e
  550 PRINT ,,,,,,"Are options correct? ";z$: INPUT b$
  560 IF b$="n" THEN GO TO VAL "460"
  570 GO SUB VAL "580": GO TO VAL "190"
  580 POKE arc,b: POKE arc+7,o: POKE arc+11,e
  590 POKE arc+3,40-8*d
  600 POKE arc+10,s: POKE arc+2,c*8+71: POKE arc+12,61+140*(s=219)
  610 RETURN 
  620 CLS : PRINT ,,"  Printer Interface Selection: "
  630 PRINT "  ----------------------------": RETURN 
  640 GO TO VAL "190"
  650 INPUT "Save Customized Copy? (y/n)";a$: IF a$<>"y" THEN GO TO VAL "680"
  660 CLS : PRINT ,,,,"      Saving  'PC-Print'": SAVE "PC-Print" LINE 10: PRINT ,,"      Saving  'PC-PCode'": SAVE "PC-PCode"CODE 33290,1042
  667 ON ERR GO TO VAL "670"
  668 BEEP VAL ".2",VAL "4": PRINT AT VAL "10",NOT PI;"      Rewind to Verify     ": VERIFY "": VERIFY ""CODE 
  669 ON ERR RESET : GO TO VAL "680"
  670 GO SUB VAL "1400"
  673 IF y$="s" THEN GO TO VAL "660"
  680 DELETE ,110
  685 GO SUB VAL "690": GO TO VAL "857"
  690 GO SUB bep: INPUT "Name of File to be Loaded";a$: PRINT a$
  700 ON ERR GO TO VAL "740"
  710 LOAD a$CODE 
  720 ON ERR RESET 
  721 IF a$<>"" THEN GO TO VAL "800"
  722 FOR f=VAL "28" TO VAL "5" STEP -1
  723 IF SCREEN$ (2,f)=" " THEN NEXT f
  724 FOR j=VAL "7" TO f: LET a$=a$+SCREEN$ (2,j): NEXT j
  730 GO TO VAL "800"
  740 GO SUB bep: PRINT "      Load of "; PAPER 2;a$; PAPER 0;" was BAD ": PRINT " Do you wish to try again ";z$
  750 ON ERR RESET 
  760 IF INKEY$="y" THEN GO TO VAL "690"
  770 IF INKEY$="n" THEN GO TO VAL "1200"
  790 GO TO VAL "760"
  810 GO SUB bep: PRINT "    Load of "; PAPER VAL "2";a$; PAPER NOT PI;" was GOOD"
  820 IF PEEK 65187<>VAL "20" AND PEEK 65188<>VAL "20" AND PEEK 65186<>VAL "255" AND PEEK 65189<>VAL "0" AND PEEK 65182<>VAL "62" AND PEEK 65183<>VAL "150" THEN GO TO VAL "850"
  830 PRINT : PRINT : PRINT PAPER VAL "2";a$; PAPER NOT PI;" was a Version 2.0 file"
  840 POKE 33286,VAL "50": RANDOMIZE USR 33290: PRINT : PRINT : PRINT "           CONVERTED"
  850 PRINT : PRINT PAPER VAL "2";a$; PAPER NOT PI;" is a Version 3.0 file": POKE 33286,VAL "51"
  852 INPUT "DO YOU WISH TO SAVE (y/n)? ";y$
  853 IF y$="y" THEN GO SUB VAL "1340"
  855 RETURN 
  857 GO SUB bep+SGN PI: INPUT "LOAD, PRINT, QUIT (l/p/q)? ";y$
  858 IF y$="q" THEN GO TO VAL "1250"
  859 IF y$="l" THEN GO TO VAL "685"
  860 CLS : PRINT "  No. of Copies to be printed": PRINT ,,"          (1 to 6)? ";
  870 INPUT n: PRINT n
  880 LET n=INT n: IF n<SGN PI OR n>VAL "6" THEN GO TO VAL "860"
  890 DIM j$(3,n)
  900 FOR f=SGN PI TO n
  910 PRINT ,,"     No.";f;" Copy of "; PAPER VAL "2";a$; PAPER NOT PI
  920 PRINT : PRINT ,,"  True or Mirror image (t/m)? ";
  930 INPUT j$(1,f): PRINT j$(1,f)
  940 PRINT ,,"  Quick or Camera-Ready (q/c)?";
  950 INPUT j$(2,f): PRINT j$(2,f)
  960 PRINT ,,"  Grid or No Grid (g/n)?      ";
  970 INPUT j$(3,f): PRINT j$(3,f)
  980 PRINT ,,,,"No.";f;" Copy of "; PAPER VAL "2";a$; PAPER NOT PI;" OK? ";z$;: INPUT n$
  990 CLS : IF n$<>"y" THEN GO TO VAL "910"
  995 NEXT f
 1000 GO SUB bep+SGN PI: PRINT ,,"     File is now ready to be                Printed": PAUSE VAL "50"
 1010 GO SUB bep+SGN PI: PRINT ,,"      Set your Printer and               press any key"
 1027 PAUSE NOT PI
 1030 FOR j=SGN PI TO n
 1040 FOR f=SGN PI TO INT PI: POKE 33286+f,CODE j$(f,j): NEXT f
 1050 PAUSE VAL "40"
 1052 FOR k=SGN PI TO LEN a$: POKE 34330+k,CODE a$(k): NEXT k
 1054 POKE VAL "34330"+k,VAL "255"
 1060 GO SUB bep: PRINT ,,,,"         PRINTING FILE          "
 1070 RANDOMIZE USR 33290
 1080 NEXT j
 1090 GO SUB bep: PRINT "       Printout complete": PAUSE VAL "50"
 1100 GO SUB VAL "852": GO TO VAL "857"
 1250 GO SUB bep: PRINT ,,"   Do you wish to Load another           Program ";z$
 1260 IF INKEY$="n" THEN STOP 
 1280 IF INKEY$="" THEN GO TO VAL "1260"
 1300 CLEAR 65369: INPUT "Program Name?";c$
 1310 LOAD c$
 1320 CLS 
 1330 POKE 23658,NOT PI: BEEP VAL ".01",VAL ".1": BEEP VAL ".01",VAL ".1": BEEP VAL ".01",VAL ".1": RETURN 
 1340 LET l=PEEK 65209+256*PEEK 65210
 1350 INPUT "File Name? ";a$
 1360 SAVE a$CODE l,65536-l: CLS 
 1365 GO SUB  VAL "1390"
 1368 ON ERR GO TO VAL "1375"
 1370 VERIFY a$CODE 
 1371 ON ERR RESET : RETURN 
 1375 GO SUB VAL "1400"
 1377 IF y$="s" OR y$="S" THEN GO TO VAL "1350"
 1380 GO TO VAL "1371"
 1390 BEEP VAL ".2",VAL "4": PRINT AT VAL "10",NOT PI;"      Rewind to Verify     ": RETURN 
 1400 ON ERR RESET 
 1410 PRINT : PRINT "VERIFY was bad",,"Do a new SAVE or","Ignore? (s/i)"
 1420 INPUT y$
 1440 RETURN 
   10 CLEAR 54000
   15 INK 7: PAPER 7: BORDER 1
   20 LOAD "PC-Scrn"SCREEN$ 
   25 PRINT AT 0,0;
   30 LOAD "PC-Code"CODE 
   35 PRINT AT 0,0;
   40 LOAD "Draw"
   10 DELETE VAL "220",
   20 CLEAR VAL "27499"
   30 RANDOMIZE USR VAL "64615"
   40 DELETE ,VAL "30"
   50 LET l=VAL "36082"
   60 POKE VAL "23658",NOT PI
   70 IF PEEK VAL "36066"=VAL "113" THEN STOP 
   80 LET n$=""
   90 IF PEEK l<>VAL "32" THEN LET n$=n$+CHR$ PEEK l: LET l=l+1: GO TO VAL "90"
  100 IF PEEK VAL "36066"=VAL "108" THEN GO TO VAL "150"
  110 LET l=PEEK VAL "65209"+VAL "256"*PEEK VAL "65210"
  115 PRINT "Source = ";l,"Length = ";VAL "65536"-l
  120 SAVE n$CODE l,VAL "65536"-l
  130 CLS : GO SUB VAL "200"
  140 VERIFY n$CODE : GO TO VAL "190"
  150 CLS : PRINT : PRINT "    loading  **";n$;"**"
  160 GO SUB VAL "210"
  170 LOAD n$CODE 
  180 IF PEEK VAL "65207"+VAL "256"*PEEK VAL "65208"<VAL "37771" THEN POKE VAL "37048",VAL "201"
  190 BEEP VAL ".2",VAL "4": RANDOMIZE USR VAL "27512": GO TO VAL "50"
  200 BEEP VAL ".2",VAL "4": PRINT AT VAL "10",VAL "0";"        Rewind to verify        "
  210 PRINT "   If error occurs, goto 190    ",,: RETURN 
  220 REM ****cust enter****
  230 CLEAR 54300
  240 LOAD "PC-Code"CODE 
  250 PAPER 7: INK 0: BORDER 1: CLS 
  260 FOR f=1 TO 4
  270 PRINT AT 10,7; FLASH 1;"   Stop the tape   ": BEEP .4,6: NEXT f
  280 POKE 23658,0: POKE 23609,9
  290 PRINT AT 10,13;"DATE": INPUT " Date (xx/xx/xx) ";a$
  300 IF LEN a$>10 THEN GO TO 290
  310 FOR f=1 TO LEN a$: POKE 64601+f,CODE a$(f): NEXT f
  320 PRINT AT 10,9;"PRINTER WIDTH": INPUT " Printer width in chrs ? ";a
  330 POKE 62946,a
  340 IF a<32 OR a>136 THEN GO TO 320
  350 LET l=32
  360 IF l<a THEN LET l=l+5: GO TO 360
  370 POKE 62945,l
  380 PAPER 7: INK 0: BORDER 1
  390 GO TO 10
  400 DELETE 450,
  410 CLS : PRINT AT 10,10;"CUSTOM COPY": INPUT "Save Customized Copy? (y/n)";a$: IF a$<>"y" THEN GO TO 380
  420 PRINT ,,,,"       Saving 'PC-Custom'": SAVE "PC-Custom" LINE 220: PRINT ,,"       Saving 'PC-Code'": SAVE "PC-Code"CODE 54344,11192
  430 CLS : PRINT "   If error occurs, GOTO 410": PRINT AT 10,11;"VERIFYING": VERIFY "PC-Custom": VERIFY "PC-Code"CODE 
  440 GO TO 380
  450 CLEAR 54300
  460 BORDER 1: PRINT AT 7,10;"PC-DRAW  3.0": PRINT AT 9,2;"PRINTED CIRCUIT BOARD SYSTEM": PRINT AT 11,10;"LOADING CODE"
  470 LOAD ""CODE 54344
  480 PAPER 0: INK 7: BORDER 1: CLS 
  490 POKE 23658,0: POKE 23609,9
  500 FOR f=1 TO 4
  510 PRINT AT 10,7; FLASH 1;"   Stop the tape   ": BEEP .4,6: NEXT f
  520 CLS : PRINT AT 9,10;"BACK-UP COPY": INPUT "Make Back-up? (y/n)";a$: CLS : IF a$<>"y" THEN GO TO 610
  530 CLS : PRINT ,,,,"        Saving  'PC-Draw'": SAVE "PC-Draw" LINE 450: PRINT ,,"        Saving  'PC-Code'": SAVE "PC-Code"CODE 54344,11192
  540 ON ERR GO TO 580
  550 BEEP VAL ".2",VAL "4": PRINT AT VAL "10",VAL "0"; FLASH VAL "1";"        Rewind to verify        "
  560 PAUSE 150: CLS : PRINT AT 10,11;"VERIFYING": VERIFY "": VERIFY ""CODE 
  570 ON ERR RESET : GO TO 610
  580 ON ERR RESET : PRINT : PRINT "VERIFY was  BAD",,,,"Try a new   SAVE","    or      IGNOR"
  581 INPUT "(s/i)? ";y$
  600 IF y$="s" THEN GO TO 530
  610 BORDER 1
  620 GO SUB 650
  630 GO TO 400
  640 PAPER 7: INK 0: BORDER 1
  650 REM DRIVER is SET AT
  660 LET arc=64445
  670 CLS : PRINT AT 10,13;"DATE": INPUT " Date (xx/xx/xx) ";a$
  680 LET x$=a$
  690 IF LEN a$>10 THEN GO TO 670
  700 FOR f=1 TO LEN a$: POKE 64601+f,CODE a$(f): NEXT f
  710 PRINT AT 10,9;"PRINTER WIDTH": INPUT " Printer width in chrs ? ";a
  720 POKE 62946,a
  730 IF a<32 OR a>136 THEN GO TO 710
  740 LET l=32
  750 IF l<a THEN LET l=l+5: GO TO 750
  760 POKE 62945,l
  770 LET d=PEEK (arc+3): LET d$="Hi": LET a$="off": LET b=PEEK arc
  780 LET e=PEEK (arc+11): LET c=PEEK (arc+2): LET s=PEEK (arc+10): LET o=PEEK (arc+7)
  790 GO SUB 1370: CLS : PRINT " Your Printer Driver is set for "
  800 REM peeks of driver
  810 PRINT ,,"  The Date is  ";x$
  820 PRINT ,,"  Printer Width is ";a;" Chrs."
  830 IF PEEK arc<>65 THEN GO TO 860
  840 IF PEEK (arc+2)<>87 OR PEEK (arc+3)<>32 OR PEEK (arc+7)<>66 OR PEEK (arc+10)<>211 OR PEEK (arc+11)<>65 OR PEEK (arc+12)<>61 THEN GO TO 920
  850 PRINT ,,"  Printer Interface set for'A&J'": GO TO 930
  860 IF PEEK arc<>191 THEN GO TO 890
  870 IF PEEK (arc+2)<>71 OR PEEK (arc+3)<>32 OR PEEK (arc+7)<>123 OR PEEK (arc+10)<>219 OR PEEK (arc+11)<>127 OR PEEK (arc+12)<>201 THEN GO TO 920
  880 PRINT ,," Interface is set for 'Tasman B'": GO TO 930
  890 IF PEEK arc<>127 THEN GO TO 920
  900 IF PEEK (arc+2)<>103 OR PEEK (arc+3)<>32 OR PEEK (arc+7)<>127 OR PEEK (arc+10)<>219 OR PEEK (arc+11)<>127 OR PEEK (arc+12)<>201 THEN GO TO 920
  910 PRINT ,,"  Interface set for Oliger/Aerco": GO TO 930
  920 PRINT ,,"  Interface is set for 'Other'": GO TO 930
  930 PRINT ,,"  Port no. for data out is   ";: PRINT o
  940 PRINT ,,"  Port no. for busy in is    ";: PRINT b
  950 IF PEEK (arc+12)=201 THEN PRINT ,,"  Hardware Strobe": GO TO 970
  960 PRINT ,,"  Port no. for strobe is     ";: PRINT e
  970 PRINT ,,"  Bit number for busy in is  ";: PRINT (c-71)/8
  980 IF d=32 THEN LET d$="Hi"
  990 IF d=40 THEN LET d$="Low"
 1000 PRINT ,,"  Bit ";(c-71)/8;" is '";d$;"' for busy?  "
 1010 LET a$="on"
 1020 IF PEEK (arc+12)=201 THEN LET a$="off"
 1030 PRINT ,,"  Software strobe is '";a$;"'" 
 1040 GO SUB 1370: PRINT ,,"  Do you wish to reconfigure      your Printer Driver? (Y/N)    " 
 1050 IF INKEY$="Y" OR INKEY$="y" THEN GO TO 1090
 1060 IF INKEY$="n" OR INKEY$="N" THEN RETURN 
 1070 IF INKEY$="" THEN GO TO 1050
 1080 GO TO 1050
 1090 REM ***configure printer driver-pokes to printer driver
 1100 GO SUB 1340
 1110 CLS : PRINT ,,,,"   1   A&J",,"   2   Tasman",,"   3   Aerco",,"   4   Oliger",,"   5   Other   ";
 1120 INPUT " Selection please: ";l
 1130 CLS : IF l<1 OR l>5 THEN GO TO 1100
 1140 LET l=INT l: IF l=1 THEN LET e=65: LET b=65: LET c=2: LET d=1: LET s=211: LET o=66: GO TO 1290
 1150 IF l=5 THEN GO TO 1180
 1160 LET e=127: LET d=1: LET s=219: LET o=123+4*(l>2): LET b=191-64*(l>2): LET c=4*(l>2): GO SUB 1300
 1170 GO TO 770
 1180 GO SUB 1340
 1190 PRINT ,,,,"  Port no. for data out?   ";: INPUT o: PRINT o
 1200 PRINT ,,"  Port no. for busy in?    ";: INPUT b: PRINT b: LET e=b
 1210 PRINT ,,"  Bit number for busy in?   ";: INPUT c: PRINT c
 1220 PRINT ,,"  Is Bit ";c,,"  Hi or Low for busy? (1/0) ";: INPUT d: PRINT d
 1230 IF d<>0 AND d<>1 THEN GO TO 1220
 1240 PRINT ,,"  Software strobe? (y/n)    ";: INPUT a$: PRINT ;a$
 1250 IF a$="n" THEN LET s=219: GO TO 1270
 1260 LET s=211: PRINT ,,"  Port no. for strobe?     ";: INPUT e: PRINT e
 1270 PRINT ,,,,,,"Are options correct? (y/n)": INPUT b$
 1280 IF b$="n" THEN GO TO 1180
 1290 GO SUB 1300: GO TO 770
 1300 POKE arc,b: POKE arc+7,o: POKE arc+11,e
 1310 POKE arc+3,40-8*d
 1320 POKE arc+10,s: POKE arc+2,c*8+71: POKE arc+12,61+140*(s=219)
 1330 RETURN 
 1340 CLS : PRINT ,,"  Printer Interface Selection: "
 1350 PRINT "  ----------------------------": RETURN 
 1370 BEEP .01,.1: BEEP .01,.1: BEEP .01,.1: RETURN 
   10 PAPER NOT PI: INK VAL "7": BORDER SGN PI
   20 CLEAR VAL "33280"
   25 LET bep=VAL "1320"
   30 GO SUB bep
   40 PRINT AT VAL "5",VAL "13";"PC-Draw"
   50 PRINT AT VAL "7",VAL "5";"Printer Support Package"
   55 PRINT AT VAL "9",VAL "10";"For TS-2068"
   60 PRINT AT VAL "11",VAL "12";"Ver.3.0"
   70 PRINT AT VAL "13",VAL "7";"M.D.M. Enterprises"
   80 PRINT AT VAL "15",VAL "13";"\*1987"
   90 PRINT AT VAL "17",VAL "10";"LOADING CODE"
  100 LOAD "PC-PCode"CODE 
  110 POKE VAL "23609",VAL "8"
  130 INPUT " Date (xx/xx/xx) ";x$
  140 IF LEN x$>VAL "10" THEN GO TO VAL "120"
  150 FOR f=SGN PI TO LEN x$: POKE VAL "34317"+f,CODE x$(f): NEXT f
  160 INPUT " Printer width in chrs ? ";a
  170 POKE VAL "33285",a
  180 LET z$="(y/n)"
  195 LET arc=VAL "34161": LET d=PEEK (arc+3): LET d$="Hi": LET a$="off": LET b=PEEK arc
  197 LET e=PEEK (arc+11): LET c=PEEK (arc+2): LET s=PEEK (arc+10): LET o=PEEK (arc+7)
  200 GO SUB bep: CLS : PRINT " Your Printer Driver is set for "
  210 LET z=VAL "222"
  211 PRINT ,,"  The Date is  ";x$
  212 PRINT ,,"  Printer Width is ";a;" Chrs."
  213 IF PEEK arc<>65 THEN GO TO VAL "216"
  214 IF PEEK (arc+2)<>87 OR PEEK (arc+3)<>32 OR PEEK (arc+7)<>66 OR PEEK (arc+10)<>211 OR PEEK (arc+11)<>65 OR PEEK (arc+12)<>61 THEN GO TO z
  215 PRINT ,,"  Printer Interface set for'A&J'": GO TO z+SGN PI
  216 IF PEEK arc<>191 THEN GO TO z-INT PI
  217 IF PEEK (arc+2)<>71 OR PEEK (arc+3)<>32 OR PEEK (arc+7)<>123 OR PEEK (arc+10)<>219 OR PEEK (arc+11)<>127 OR PEEK (arc+12)<>201 THEN GO TO z
  218 PRINT ,," Interface is set for 'Tasman B'": GO TO z+SGN PI
  219 IF PEEK arc<>127 THEN GO TO z
  220 IF PEEK (arc+2)<>103 OR PEEK (arc+3)<>32 OR PEEK (arc+7)<>127 OR PEEK (arc+10)<>219 OR PEEK (arc+11)<>127 OR PEEK (arc+12)<>201 THEN GO TO z
  221 PRINT ,,"  Interface set for Oliger/Aerco": GO TO z+SGN PI
  222 PRINT ,,"  Interface is set for 'Other'": GO TO z+SGN PI
  229 PRINT ,,"  Port no. for data out is   ";: PRINT o
  230 PRINT ,,"  Port no. for busy in is    ";: PRINT b
  235 IF PEEK (arc+12)=201 THEN PRINT ,,"  Hardware Strobe": GO TO 250
  240 PRINT ,,"  Port no. for strobe is     ";: PRINT e
  250 PRINT ,,"  Bit number for busy in is  ";: PRINT (c-71)/8
  260 IF d=VAL "32" THEN LET d$="Hi"
  270 IF d=VAL "40" THEN LET d$="Low"
  280 PRINT ,,"  Bit ";(c-71)/8;" is '";d$;"' for busy?  "
  290 LET a$="on"
  300 IF PEEK (arc+12)=201 THEN LET a$="off"
  310 PRINT ,,"  Software strobe is '";a$;"'" 
  320 GO SUB bep+SGN PI: PRINT ,,"  Do you wish to reconfigure      your Printer Driver? (Y/N)    " 
  330 IF INKEY$="y" THEN GO TO VAL "370"
  340 IF INKEY$="n" THEN GO TO VAL "650"
  360 GO TO VAL "330"
  380 GO SUB VAL "620"
  390 PRINT ,,,,"   1   A&J",,"   2   Tasman B",,"   3   Aerco",,"   4   Oliger",,"   5   Other   ";
  400 INPUT " Selection please: ";l
  410 CLS : IF l<SGN PI OR l>VAL "5" THEN GO TO VAL "380"
  420 LET l=INT l: IF l=SGN PI THEN LET e=VAL "65": LET b=e: LET c=VAL "2": LET d=SGN PI: LET s=VAL "211": LET o=e+SGN PI: GO TO VAL "570"
  430 IF l=VAL "5" THEN GO TO VAL "460"
  440 LET e=VAL "127": LET d=SGN PI: LET s=VAL "219": LET o=VAL "123"+4*(l>2): LET b=VAL "191"-64*(l>2): LET c=4*(l>2): GO SUB VAL "580"
  450 GO TO VAL "190"
  460 GO SUB VAL "620"
  470 PRINT ,,,,"  Port no. for data out?   ";: INPUT o: PRINT o
  480 PRINT ,,"  Port no. for busy in?    ";: INPUT b: PRINT b: LET e=b
  490 PRINT ,,"  Bit number for busy in?   ";: INPUT c: PRINT c
  500 PRINT ,,"  Is Bit ";c,,"  Hi or Low for busy? (1/0) ";: INPUT d: PRINT d
  510 IF d<>0 AND d<>1 THEN GO TO VAL "500"
  520 PRINT ,,"  Software strobe? (y/n)    ";: INPUT a$: PRINT ;a$
  530 IF a$="n" THEN LET s=VAL "219": GO TO VAL "550"
  540 LET s=VAL "211": PRINT ,,"  Port no. for strobe?     ";: INPUT e: PRINT e
  550 PRINT ,,,,,,"Are options correct? ";z$: INPUT b$
  560 IF b$="n" THEN GO TO VAL "460"
  570 GO SUB VAL "580": GO TO VAL "190"
  580 POKE arc,b: POKE arc+7,o: POKE arc+11,e
  590 POKE arc+3,40-8*d
  600 POKE arc+10,s: POKE arc+2,c*8+71: POKE arc+12,61+140*(s=219)
  610 RETURN 
  620 CLS : PRINT ,,"  Printer Interface Selection: "
  630 PRINT "  ----------------------------": RETURN 
  640 GO TO VAL "190"
  650 INPUT "Save Customized Copy? (y/n)";a$: IF a$<>"y" THEN GO TO VAL "680"
  660 CLS : PRINT ,,,,"      Saving  'PC-Print'": SAVE "PC-Print" LINE 10: PRINT ,,"      Saving  'PC-PCode'": SAVE "PC-PCode"CODE 33290,1042
  667 ON ERR GO TO VAL "670"
  668 BEEP VAL ".2",VAL "4": PRINT AT VAL "10",NOT PI;"      Rewind to Verify     ": VERIFY "": VERIFY ""CODE 
  669 ON ERR RESET : GO TO VAL "680"
  670 GO SUB VAL "1400"
  673 IF y$="s" THEN GO TO VAL "660"
  680 DELETE ,110
  685 GO SUB VAL "690": GO TO VAL "857"
  690 GO SUB bep: INPUT "Name of File to be Loaded";a$: PRINT a$
  700 ON ERR GO TO VAL "740"
  710 LOAD a$CODE 
  720 ON ERR RESET 
  721 IF a$<>"" THEN GO TO VAL "800"
  722 FOR f=VAL "28" TO VAL "5" STEP -1
  723 IF SCREEN$ (2,f)=" " THEN NEXT f
  724 FOR j=VAL "7" TO f: LET a$=a$+SCREEN$ (2,j): NEXT j
  730 GO TO VAL "800"
  740 GO SUB bep: PRINT "      Load of "; PAPER 2;a$; PAPER 0;" was BAD ": PRINT " Do you wish to try again ";z$
  750 ON ERR RESET 
  760 IF INKEY$="y" THEN GO TO VAL "690"
  770 IF INKEY$="n" THEN GO TO VAL "1200"
  790 GO TO VAL "760"
  810 GO SUB bep: PRINT "    Load of "; PAPER VAL "2";a$; PAPER NOT PI;" was GOOD"
  820 IF PEEK 65187<>VAL "20" AND PEEK 65188<>VAL "20" AND PEEK 65186<>VAL "255" AND PEEK 65189<>VAL "0" AND PEEK 65182<>VAL "62" AND PEEK 65183<>VAL "150" THEN GO TO VAL "850"
  830 PRINT : PRINT : PRINT PAPER VAL "2";a$; PAPER NOT PI;" was a Version 2.0 file"
  840 POKE 33286,VAL "50": RANDOMIZE USR 33290: PRINT : PRINT : PRINT "           CONVERTED"
  850 PRINT : PRINT PAPER VAL "2";a$; PAPER NOT PI;" is a Version 3.0 file": POKE 33286,VAL "51"
  852 INPUT "DO YOU WISH TO SAVE (y/n)? ";y$
  853 IF y$="y" THEN GO SUB VAL "1340"
  855 RETURN 
  857 GO SUB bep+SGN PI: INPUT "LOAD, PRINT, QUIT (l/p/q)? ";y$
  858 IF y$="q" THEN GO TO VAL "1250"
  859 IF y$="l" THEN GO TO VAL "685"
  860 CLS : PRINT "  No. of Copies to be printed": PRINT ,,"          (1 to 6)? ";
  870 INPUT n: PRINT n
  880 LET n=INT n: IF n<SGN PI OR n>VAL "6" THEN GO TO VAL "860"
  890 DIM j$(3,n)
  900 FOR f=SGN PI TO n
  910 PRINT ,,"     No.";f;" Copy of "; PAPER VAL "2";a$; PAPER NOT PI
  920 PRINT : PRINT ,,"  True or Mirror image (t/m)? ";
  930 INPUT j$(1,f): PRINT j$(1,f)
  940 PRINT ,,"  Quick or Camera-Ready (q/c)?";
  950 INPUT j$(2,f): PRINT j$(2,f)
  960 PRINT ,,"  Grid or No Grid (g/n)?      ";
  970 INPUT j$(3,f): PRINT j$(3,f)
  980 PRINT ,,,,"No.";f;" Copy of "; PAPER VAL "2";a$; PAPER NOT PI;" OK? ";z$;: INPUT n$
  990 CLS : IF n$<>"y" THEN GO TO VAL "910"
  995 NEXT f
 1000 GO SUB bep+SGN PI: PRINT ,,"     File is now ready to be                Printed": PAUSE VAL "50"
 1010 GO SUB bep+SGN PI: PRINT ,,"      Set your Printer and               press any key"
 1027 PAUSE NOT PI
 1030 FOR j=SGN PI TO n
 1040 FOR f=SGN PI TO INT PI: POKE 33286+f,CODE j$(f,j): NEXT f
 1050 PAUSE VAL "40"
 1052 FOR k=SGN PI TO LEN a$: POKE 34330+k,CODE a$(k): NEXT k
 1054 POKE VAL "34330"+k,VAL "255"
 1060 GO SUB bep: PRINT ,,,,"         PRINTING FILE          "
 1070 RANDOMIZE USR 33290
 1080 NEXT j
 1090 GO SUB bep: PRINT "       Printout complete": PAUSE VAL "50"
 1100 GO SUB VAL "852": GO TO VAL "857"
 1250 GO SUB bep: PRINT ,,"   Do you wish to Load another           Program ";z$
 1260 IF INKEY$="n" THEN STOP 
 1280 IF INKEY$="" THEN GO TO VAL "1260"
 1300 CLEAR 65369: INPUT "Program Name?";c$
 1310 LOAD c$
 1320 CLS 
 1330 POKE 23658,NOT PI: BEEP VAL ".01",VAL ".1": BEEP VAL ".01",VAL ".1": BEEP VAL ".01",VAL ".1": RETURN 
 1340 LET l=PEEK 65209+256*PEEK 65210
 1350 INPUT "File Name? ";a$
 1360 SAVE a$CODE l,65536-l: CLS 
 1365 GO SUB  VAL "1390"
 1368 ON ERR GO TO VAL "1375"
 1370 VERIFY a$CODE 
 1371 ON ERR RESET : RETURN 
 1375 GO SUB VAL "1400"
 1377 IF y$="s" OR y$="S" THEN GO TO VAL "1350"
 1380 GO TO VAL "1371"
 1390 BEEP VAL ".2",VAL "4": PRINT AT VAL "10",NOT PI;"      Rewind to Verify     ": RETURN 
 1400 ON ERR RESET 
 1410 PRINT : PRINT "VERIFY was bad",,"Do a new SAVE or","Ignore? (s/i)"
 1420 INPUT y$
 1440 RETURN 

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top