ZX-TERM*80

Products: ZX-TERM*80
Date: 1987
Type: Cassette
Platform(s): TS 1000
Tags: Terminal

ZX-TERM*80 is a terminal emulator configuration and installation program that sets up machine code routines for serial communications via Westridge or Byte-Back modems. The BASIC loader patches embedded machine code in memory to support eight different printer interfaces (Tasman, Aerco, Oliger, Memotech, Ener-Z, Eprom Services, and Byte-Back) by POKEing 24-byte driver blocks from a table at address 20824 into a fixed driver slot at 20098. It allows the user to configure the UART mode word (stop bits, parity, character length, baud rate) via a direct POKE to address 16563, and supports optional relocation of the machine code block away from its default base of 28672 using RAND USR 21969. The program can save its configured state back to tape and enters the terminal via RAND USR of the computed entry point. A 16K machine code payload embedded in line 0’s REM statement contains the actual terminal, upload/download (derived from “Mini-XMOD” by Harvey Taylor), and hi-res routines (WRX-16 by Wilf Rigter).

SCRAM Board required – 8K in 8->16 K region. Support for Westridge and Byteback Modems. Support for TASMAN TYPE B OR C, AERCO OR OLIGER 2068, OLIGER 1000 (MAPPED FFFF), MEMOTECH CENTRONICS, MEMOTECH RS232, ENER-Z REPORT GENERATOR, EPROM SERVICES C.P.,BYTE-BACK C.P. printer interfaces.


Program Analysis

Program Structure

The program is organized into a BASIC loader (lines 1–2030) that configures and launches a large machine code terminal emulator. Line 0 is a massive REM statement containing the entire 16K machine code payload, which is uploaded to RAM addresses in the 8K→16K region via a SCRAM board. Lines 1–2 are identification and upload REMs. Lines 10–18 contain encoded printer driver data as REM statements. The main interactive configuration logic runs from line 100 onward, and subroutines appear at lines 2000 and 9000.

Configuration Flow

  1. Line 30: checks Z$ for “S” to branch to a tape-save shortcut (line 50).
  2. Lines 100–185: modem selection (Westridge or Byte-Back), patching machine code bytes at several specific addresses using a string-patch subroutine at line 2000.
  3. Lines 200–295: printer interface selection; copies a 24-byte driver block from a table starting at address 20824 (offset by 40 per interface type) into address 20098.
  4. Lines 300–370: optional UART mode word configuration via INPUT M / POKE VAL "16563",M.
  5. Lines 400–470: optional user customization via STOP, allowing manual POKEs before continuing.
  6. Lines 500–680: optional relocation — computes offset O=A-28672, calls RAND USR 21969 to execute a relocation routine, and adjusts the entry-point variable Z.
  7. Lines 700–760: memory configuration (16/32K vs 64K), patching addresses 16572–16573.
  8. Lines 900–1020: optional save to tape (“ZXT80”), then launch via RAND USR 20624 and RAND USR Z.

Machine Code Integration

The machine code binary is stored in the REM at line 0, occupying the 16K region made available by the SCRAM board (addresses 8192–16383). Line 2 contains the upload instruction as a comment: “UPLOAD 3600-3FFF TO A$”. The loader patches specific bytes within the machine code using the subroutine at line 2000, which iterates over a string D$ and POKEs each character code to successive addresses starting at A. This technique allows the BASIC program to rewrite Z80 instruction sequences (e.g., switching between CALL/RET variants for different modems) without a separate assembler.

Key BASIC Idioms

  • Conditional string patching: LET D$=("string1" AND Z$="W")+("string2" AND Z$="B") exploits the fact that boolean expressions evaluate to the string or to a null string, effectively selecting one of two byte sequences based on modem choice.
  • VAL "number" in GOTO/GOSUB: used consistently throughout (e.g., GOTO VAL "100") as a memory optimization to avoid storing floating-point line-number constants.
  • SGN PI for 1: used in place of the literal 1 in FOR loops and arithmetic (e.g., FOR N=SGN PI TO LEN D$, LET D=D+SGN PI).
  • NOT PI for 0: used when POKEing a zero flag byte (line 205).
  • Keypress subroutine (line 9000): the classic PAUSE 0 / INKEY$ wait idiom — flushes any held key, then spins until a new keypress is registered, returning it in Z$.

Printer Driver Table

Lines 10–18 encode driver data for eight printer interfaces in REM statements. During configuration (lines 250–290), the selected interface number Z$ indexes into the table: A = 20824 + 40 * VAL Z$, and 24 bytes are copied from there to address 20098. The table is laid out as follows:

KeyInterface
1Tasman Type B or C
2Aerco or Oliger 2068
3Oliger 1000 (mapped FFFF)
4Memotech Centronics
5Memotech RS232
6Ener-Z Report Generator
7Eprom Services C.P.
8Byte-Back C.P.

Memory Map and Address Constants

AddressPurpose
16535Flag byte: 0 (no printer) or 1 (printer present)
16563UART mode word (stop bits, parity, char length, baud)
16564Modem timing constant
16572–16573Memory size configuration (16/32K vs 64K)
16655Modem init string target
16964Modem type byte (62=Westridge, 201=Byte-Back)
18089Modem scroll/return patch target
20098Active printer driver slot (24 bytes)
20172Modem name string target
20624Machine code initialization entry point
20787Upload entry point (referenced in line 2 REM)
20824Base of printer driver table (8 × 40 bytes)
21969Relocation routine entry point
22305Modem HALT-sequence patch target
28672Default machine code base address (0x7000)

Relocation Support

Lines 600–680 implement a relocation feature. The user enters a new base address A; the offset O = A - 28672 is computed, validated (IF O < NOT PI rejects negative offsets), and passed to the machine code via RAND O before calling the relocation routine at address 21969 with RAND USR 21969. The terminal entry point variable Z is then adjusted by the same offset. After relocation, the new RAND USR entry address is printed for the user’s reference.

Notable Observations

  • The program acknowledges that upload/download routines are derived from “Mini-XMOD” by Harvey Taylor, and hi-res routines (WRX-16) by Wilf Rigter, crediting both in the splash screen REM at line 20.
  • The splash screen in line 20 is constructed entirely within a single GOSUB-triggered PRINT block using block graphics characters to draw a decorative banner.
  • Line 2 stores the machine code upload command as a REM with a live RAND USR 20787 embedded in it — this is a common technique to document the entry point while keeping it executable if the line number is ever called directly.
  • The CHR$ VAL "118" at line 172 generates a HALT opcode (0x76), used to build patched Z80 instruction sequences inserted into the machine code for modem-specific timing.

Content

Appears On

Related Products

Terminal program that offers 40, 60 and 80-column mode on the ZX81/TS 1000. Supports data transfers, full ASCII support, printer...

Related Content

Image Gallery

Source Code

   0 REM [Z][X][T][E][R][M][-][8][0] FN##WRND[4] //  ▞▝▒(4##[4]▒/▒4▒# RETURNLEN [U][Y][Y][U]LEN  RETURNLEN    RND#R# UNPLOT ▝3 ▜  OR  COPY REM #:($4 CLEAR/#    SQR     LN F? CLEARQ▛▘)[▒]RNDE#RND[B] GOSUB #S><=[Z]ACS #4 IF   ,LN  GOSUB #<LN #?S NEWY$LN  GOSUB ##~~#)[▒]RNDE#RND[B] GOSUB #**,AR##></ LIST  <=#TAN  PEEK #TAN  <=#TAN  PEEK #TAN  LN █# NEW▝COS / LIST LN F? CLEAR5 #E # FASTQ GOSUB 7Q#U▝# NEW█▘957#( UNPLOT Q#) CLS#7#7# LPRINT  FASTACS  UNPLOT  FAST6▛## GOSUB #G# GOSUB [K]SGN  LPRINT # GOSUB [K]LN ▚#<>5 NEW# CLEARQ[(]TAN LN ▚# CLEARQ[(]LN #▚# NEXT Y▒# ( CLEARLEN  INPUT W4 CLEAR▞[K])4 ##/▛  ▌ASN ,,#;# GOSUB ###W"" GOSUB #7 GOSUB PIE£RND) RUN ▙;Y2 GOSUB #Y PRINT ▘▛▝LN [P]▝LN [>]▝LN I#<>5 NEW##[8]▝ PRINT VAL STR$  FASTEORNDFY#[8][P]#4▀*/▝[Z]##6ORND<= RETURNLN [(]#C3#5RND#U▖#W NEWZM▖#▐##LN ##E£RNDACS  UNPLOT ▞U( RETURNLN [>]▝▞=( RETURN7/ GOSUB  CLEARACS ▝#C;E£RND)▝ [B] GOSUB # FOR E#RND FAST GOSUB # LPRINT K"#76#RNDTAN ▞~~( RETURNTAN  CLEARACS ▝CHR$ SQR #LN ####[£]#53#▞▞#LN K#7( RAND TAN #▜#Y+/ RAND ACS WACS 1ACS WACS 1ACS WACS 1ACS  GOTO TAN ACS 7ACS >ACS 7ACS >ACS 7ACS >TAN 5 4)▘4▘ COPY+Q  GOSUB [K]I▒ CLEAR#~~6(# CLEAR#£6># CLEAR#:6=#TAN U,,#[B]TAN 5,,##[B]4▘W▗▐##)▌ ;TAN LN  PLOT #4▘W5▒#▗▐##7#$$Y"█[)]#TAN LN  CLS# FASTR GOSUB ## LPRINT Q▒7#TAN VAL 7▘1 Q ##< GOSUB [K]AT 7Q▒7( GOSUB TAN LN £##I LN [S]#LN L#/SQR LN £##LN [S]#8I ###8ACS SACS SACS S▌ GOSUB [K]#▞▒LN L#LN  CLS#:▒#7##TAN LN USR #LN  PLOT #5▒(4▀5▒[4]6~~#4RND▘▌[F]2 ##LN [S]# FOR #LN [S]# GOSUB # FOR Q3 FAST;Q3 LPRINT  FAST▞2Y COPY7 FAST#;# LPRINT ( SAVE LN SIN #= LPRINT ▘3 ,,Q SAVE  GOSUB PIACS  NEW,,ACS  THEN7+4 RUN FQ SAVE TAN  GOSUB #:#LN  TO # GOSUB #£#LN  TO # GOSUB #~~##CHR$ ▀##LEN "#/[B]LN [V]▝GCOS / RAND LN [V]▝G""/ RAND LN  DIM #/ POKE LN [V]▝Y COPY[X]4▒[J] NEW#[B]MB#TAN  GOSUB #9#69#[B] GOSUB PI4 GOTO UB#W RETURN▝4 FASTLN ▌#- ACS C[3] PLOT AI▌[+]▐RACS ;S IF £""#HI▘4 PAUSE 5 COPYX CLEARACS ▝#C▀5#Y#;#RTAN 5 S CLEARACS ▀#C▀5 W#?# PRINT ##ACS [V]C▝ACS VLN SIN #; LET  PRINT 43▛VAL S▀ FAST/#)-#STR$  RETURN+: UNPLOT S▝: RETURN▞▒#J[5]>7<( SAVE /N)-#VAL STR$ ACS #▞▒#C▘J>7<( RUN SGN STR$ ▘ LIST ▒ CLEARACS ▀#C▝: STEP S▒,[5]><( IF /~~,▛▛▛▛[5]><( PLOT SGN  LPRINT #LN [S]#J NEW▛WM▒#▞▒VAL ,#U▒# RETURN▌S)JLEN ,,[B]##: C:3ACS ;( CLS/▛#[J]ACS )*( CLS[Q]#7#W NEW3C▘#:3,,<AT (LN  LET TAN LN ##LN 7?LN £##I LN [S]##[J]PEEK  CLSLN #?K8<= CLS*K CLS-4▞▒#<= CLS3K CLS# NEW█PEEK  CLSACS )( PAUSE 7+4 FOR <= CLS3K CLS14USR Y▖PEEK  CLS#[/]# LN  PLOT #COS  GOSUB #(#/▖LN  PLOT #COS  PRINT  CLEARQ,,▘ CLEAR#▀ PRINT  CLEARQ▀ VAL STR$  FAST# RETURNRNDC▛LN [Y]# LPRINT 7/ NEXT  LPRINT 7SGN AT  LET M▀# LET M,,#TAN  FASTYRNDLN [Y]# LPRINT # FASTLN [Y]# LPRINT 7 RETURNRNDCOS / POKE ) SAVE ▝ FASTE£RND; FOR  LPRINT #7 RETURNRNDCOS ></ RUN  CLEARQ,,▘ FASTSTR$ LN ##SGN  LPRINT -£LN ##5[J]Y/** PRINT  NEW?LEN 0# LET  NEW LIST 3333LEN 0TAN  PRINT LN [S]#NOT #NOT  LET TAN E£RND GOSUB ##RNDR GOSUB # FAST[J]LN [Y]# LPRINT  FAST#LN NOT # LPRINT ##NOT #AQ##TAN AR/ RAND LN [(]#COS  PRINT E:RNDY#[Y]ATN  SAVE # LET LN COS #RTAN LN 0#LN ▚# GOSUB #I#VVLN [9]#LN [/]# LET M,,#LN ##5<Z)▒▒LN ##5 NEWYLN [(]#5?Z CLEARACS ▝#C▀5"ZLN [,]#LN [Q]#LN  UNPLOT #K SAVE  RETURNINKEY$ ASN K# RETURNPIASN ## RETURN#ASN ## RETURN#ASN 1# RETURN#ASN  CLEAR# RETURN#ASN ## RETURN#ASN CHR$ # RETURN#ASN  IF # RETURN#ASN  LIST # RETURN#ASN ## RETURN#ASN [B]#LN [▒]# RETURN$ATN ~~#/[R] CLEARACS ▝#4: PRINT 5,,##[B]C▝Q▝ LET LN [V]#LN  REM #LN [£]##**#5[A]ZLN [(]## RUN #LN ##LN [O]#INT ;5▝#ACS #C<# NEW IF #5#ZLN ##5?Z)+▀#[<]#U▌# CLEAR[Y]▖COS 5RND#W NEWZM▌#▐##LN  PLOT #C▖ CLEARQ,,▀#LN  SLOW#LN [V]# RETURNRNDASN ~~#TAN  LN  PLOT # PRINT 5I#2GLN [7]#LN  DIM #LN  UNPLOT # RETURNPI4~~LN ## LET M,,##5# RETURN#C£ RETURN#4 SCROLLLN [O]#LN  DIM #/ NEWLN [8]#/ PLOT   CLEARACS ▝ PLOT 5▛ZLN [(]#LN  DIM #LN  UNPLOT #K CLS RETURNINKEY$ C▀LN [▒]# CLEARACS ▝[Q]#E# CLEARQ,,▝LN ## CLEARQ▀  CLEARQ>#5##LN ▜#### CLEAR5 RNDLN [H]=LN ▚#<>5▟▝Y2 GOSUB # GOSUB #▛#EG#▘9  GOSUB [K]5ORND PRINT ##[S]C UNPLOT  LET TAN E(RNDFF▞4#F( UNPLOT TAN UV#ACS #ACS [B]4? LET  PRINT 4▞LN ##F/▌Y▒#█##7#F LET TAN  RETURN#COS #LN  CLS#7#[S]# PRINT K▀LN ##F# LET  PRINT  RETURNRNDCTAN  CLEARACS V[A] FASTVAL LN ##AT  LPRINT Y▞ CLEAR[-]▀▟# RETURN SAVE SACS  CLEARACS V NEW/""LN  PLOT # PRINT  CLEARQ,,▘LN ##5SIN Z):▛LN ##5##)#(LN ##LN  DIM #LN  UNPLOT #K CLS RETURNPIC7 RETURN#C# RETURN#C# RETURN#C# RETURN4C# RETURN6C# RETURN8C# RETURN#C# RETURN#4NOT LN Z##(# LPRINT  LET  PRINT  FASTCOS 2#5 INPUT ZLN [7]#LN  DIM #LN  UNPLOT #K CLS RETURN2C" RETURN3C▛ RETURNPI4 LOAD  LPRINT /[$]CHR$ 0M,,#TAN LN Z#LN ▝#/ACS  LET C▖[J]#.#Y▘/ RAND U▝#LEN █M▝#E #77▞4#LEN █#ACS  UNPLOT #ACS [W]7( POKE /[7] CLEARQ▀ /[1] CLEARQ▀▝/[*] CLEARQ▀▀/[)] CLEARQ,,▘LN ##5SQR Y2#LN [I]#E£#LN [S]###<▘ ▀Q  GOSUB [K]LN LN #LN  UNPLOT #K CLS RETURNPIASN ,# RETURN64<U$# RETURN[▒]C**LEN ▒M$#LEN (M:#/ATN  RETURN74<=U$# RETURNCCAT CHR$ ▒/ SCROLL5,,ZLN [(]#LN  RUN #LN  UNPLOT #K CLSACS [R] RETURNAS,,ACS  COPYLN [▒]##LN  STOP##E# CLEARACS ▝#4,,5?Z CLEARACS ▝EXP /▛5£Z CLEARACS ▝[:] FAST5#Z CLEARACS ,,▚LN ## LPRINT LN ▜##Z# CLEARACS ▝#4"LN [<]#4# CLEARACS ▝LEN /CODE  CLEARACS ▝▚/[Y]   LN ##LN E~~LN F?)#▝5#ZLN [<]#LN [N]#LN  DIM #LN ##K CLS RETURNNC$ RETURNYC# RETURN£4 LOAD LN [/]#/[$]LN E~~#[I]#5▟RND)[0]Y▞▛,[Y]""7<( RAND TAN LN  PLOT # PRINT 2K5 STOP#LN [7]#LN [9]##(#Q#76£RND:/[J]▞4Q#7#( UNPLOT 7$4 NEXT Q#76(RNDLN [,]=LN [H]=#F?  LN [<]#4[H]LN E~~LN [N]#)▘ 5[?]ZLN [<]#5VRND▞(VAL <7STR$  FASTLN  DIM #LN ##K CLS LPRINT SGN  RETURN£C$ RETURN#C$ACS [R]#>AT ( LLIST /ATN AT ###AT FACS  RETURNLN 7?E#RND FAST)█RND[J] GOSUB # FOR #F# LPRINT LN [P]#)▘ 5[,]ZLN [<]#LN [9]#LN 7?)WRND# CLS▝INT .LN ###7?LN [V]▝Y COPY[X]COS ##LN [X]▛#TAN LN [9]#LN  UNPLOT #K CLS RETURNPIASN E#LN ##E▖RND)[S]▀[J] GOSUB ###▘ NEW# GOSUB PIS▝##STR$ ##)█RND GOSUB # FAST5#RND#7#7SGN #7#7 FOR ▘▛ 5[0]Y GOSUB [K]AT  FOR 6#RND[J]#7 FAST GOSUB PI LPRINT S RUN LN [P]##[▒]#5##2YLN [7]#LN  UNPLOT #K CLS5▝# RETURNPICOS  RETURN#C▒ RETURN#4 GOSUB ACS  NEWRTAN ACS [A]RTAN  LN  PLOT # PRINT [J]M,,#LN ##LN [M]#KH RETURN#4▌E(RND/?LN [3]#C~~ FASTE£RNDFF6#RND LPRINT 6#RND5##2SLN [7]#LN  DIM #LN  UNPLOT #K CLS RETURNPIASN ,# RETURN#C~~ RETURN#4 INPUT  CLEARACS ▝[I]/▖ CLEARACS ▝ INPUT LN USR #U)# RETURN[4]C▝K# PRINT E#RND#76#RND CLEARACS ▝#CODE  FOR #AT  RETURNRND4▖ACS #4KLN [V]# GOSUB ##RNDE#RND CLEARACS ▝#C▀E=RND[B] GOSUB #KLEN E#RNDF6#RNDY=LN [)]#5##)▝▀LN [<]#LN  RUN #5##LN [(]#LN  UNPLOT #K CLS RETURNPIASN ,# RETURN#ATN ▝# RETURN#C[>] RETURN#4 DIM LN ##/[£]LN [<]#COS 5#RNDTAN LN  PLOT # PRINT LN [<]#TAB [B]#[J]E#RND)[▒]RND GOSUB # FAST2=5[0]#LN [7]# LPRINT LN <=#5[D]#LN ##LN SGN #LN [9]##(#LN  POKE #**LN ##K RUN  RETURN£4 NEXT 5USR ##▒#LN  SAVE # PRINT LN █#ACS #C RAND  LET #[£]# FAST PRINT E£RND),,▘; FAST)5 ;SGN ▘#▘ GOSUB [K][J]▞4><( UNPLOT ▞<LN  PRINT ▒ LET  LPRINT RTAN LN  SAVE #)#▝LN [<]#/SGN LN ##LN E~~LN  SAVE #5###[(]#E#RND▘▟ # GOSUB [T] REM ##RTAN #[Y]4 POKE TAN EYRND6#RNDTAN  CLEARQW▘ CLEARQX  CLEARQ# 6YRND6RNDRNDTAN  FASTY▖LN  DIM #LN CHR$ # RETURN▞4 POKE  LPRINT TAN 5[▒]RNDU▝#ACS #COS E(RNDTAN LN  PLOT # PRINT  CLEARQ,,▘LN ##50#2▒LN [7]#LN ##5▜ 6E#5#▝6#RNDLN  UNPLOT #K CLS RETURNPIASN ,# RETURN#ASN [L]# RETURN#C# RETURN#4 DIM 5[A]Z24LN [7]#LN  UNPLOT #K CLS RETURNPIC[Y]LN ##LN E~~)##LN Q#SDLN 7?)[▒]RND GOSUB ### FOR )#RND GOSUB [K] FOR LN [P]##*#U▝#ACS #COS )█#LN Q#ABS [1]=LN SQR #5£##▒#LN [M]#K[W]LN B#LN [3]#LN ##LN ##LN CHR$ # RETURN+4 RAND UXRND RETURN,,S▒5[Q]#LN ##/CHR$ Y▘LN  DIM #UWRND PRINT LN  DIM # LET JLN  DIM #▞█VAL EYRND#76YRNDLN  DIM #AT ( LET EYRND GOSUB #£RNDU▝#ACS #C▖ GOSUB #=RND<[B] GOSUB #S▖ CLEARQ# COPYERNDRND▞█[J]▚7( UNPLOT LN  DIM #LN CHR$ # RETURN+C4 RETURN/C[6] RETURN▞4/EYRND6RNDRND CLEAROW CLEARQX U#RND[B]C[<]5LEN #/[,,] CLEAROXERNDRND6YRND5 RETURN#LN 0##2#LN [M]#ABS ▗# RETURN#4▞LN [<]#TAB [B]#CODE [,]=LN B#LN ##LN ##/I▘ #"VAL LN  POKE #AT S PRINT #[L]4 POKE 5 RETURN#LN 0#U#RND RETURN~~S:Y/LN  DIM #LN ##5**##▒#WM#RNDLN LN #Y+LN  DIM #LN CHR$ # RETURN▖CT RETURN▘4[Z]LN CHR$ #5WRND[Y]CW7[Y]4[M]LN CHR$ #5XRNDJ[Y]4[C]EWRND RETURN▘C?5WRNDP7PERNDRND)█ [B] GOSUB #ATN ##LN ##/,Y▞LN  DIM #LN ##LN  INPUT #5 REM #/[5]LN CHR$ #5WRNDJ[Y]4LEN ▞█VAL LN CHR$ #EYRND#76YRNDAT ( LET ▞█[J]ERNDRND▚7( UNPLOT M2#LN CHR$ #52#[Y]4YEYRND FASTE▖RND);▖U▝#ACS #C▀) ▘[B] GOSUB #SGN [B] GOSUB #K,,5#ZLN 0## FOR #EYRND6RNDRND5WRNDO7O CLEARQ# Y▞LN  DIM ##▌#ERNDRND6YRND#INT #-▞( RETURN.#[N]4 RAND TAN LN [S]#VAL LN [Y]# LET #[Y]#  LN  GOSUB ## FOR #LN  LIST # CLEARACS ▛#COS TAN                        Y~~/ TO  GOSUB #I#LN [/]#LN [O]#LN ##LN ##5[7]YLN ##LN [9]#LN [8]##2# M#### C######: [H]##### [C]######RND[4]0/[6]0/[8]0RND[S]####### ## [A]SCII ####?RND█[E][N][D]█[O][F]█[F][I][L][E]█RND[C]OPY [S]CROLL [N]EXT-PAGE  [S][H][/][S][P]=ESCRNDM##### U###=RND B#### F###=RND[U][P][L][O][A][D]█[A][B][O][R][T][E][D][.]RND[U][P][L][O][A][D]█[C][O][M][P][L][E][T][E][D][.]RND[D][O][W][N][L][O][A][D]█[A][B][O][R][T][E][D][.]RND[D][O][W][N][L][O][A][D]█[C][O][M][P][L][E][T][E][D][.]RND[R][E][P][E][A][T]█[B][L][O][C][K][:]RND[T][R][A][N][S][F][E][R]█[E][R][R][O][R][.]RND  [U]#####  [D]#######  [T]#######  SH/SP=ESC RND[P]###### ## [V]########?RND████[U][P][/][D][O][W][N]█[L][O][A][D]█[I][N]█[P][R][O][G][R][E][S][S]████RND[Z][X][-][T][E][R][M][*][8][0]██[V]█[2][.][2]RNDMETAMEDIA PROD. / SILICON MTN. COMPUTERSH##### T#####     F. N#######RND[E][S][C][A][P][E]█[I][N][V][O][K][E][D]RNDD### B##### ### I##########RND L#RND5 #6▖RNDFQYF RAND FF6▝RND5[(]RND) #▘ ( GOSUB [K]E(RND)▞ ;) Q▘ ~~ GOSUB [K]##▞
   1 REM [Z][X][-][T][E][R][M][*][8][0] (C)1987              BY FRED NACHBAUR        
   2 REM [U][P][L][O][A][D]█[3][6][0][0][-][3][F][F][F]█[T][O]█[A][$]          RAND USR 20787#     REM    E(RND# RETURNLEN TAB L>)▞ ; FOR 5 Q▘ ~~ GOSUB [K]TAN         
  10 REM [P][R][I][N][T][E][R]█[D][R][I][V][E][R][S]         
  11 REM [T][A][S][M]       PRINT  PRINT #[J]PEEK  CLSXPEEK #PEEK  CLS LET PEEK #Y RUN PEEK  CLSY COPYPEEK  CLS LET TAN 
  12 REM [A][E][R][C]       PRINT  PRINT #<=#   LET PEEK #  <=# LET TAN         
  13 REM [O][L][I][G]      M COPY COPYTAN                     
  14 REM [M][T][C][P]       PRINT <=J LET TAN                    
  15 REM [M][T][-][S]      M$JTAN                     
  16 REM [E][N][R][Z]       PRINT #PEEK ▌  <=▘YFPEEK ▘Y[C]PEEK ▘ LET TAN       
  17 REM [E][P][S][V]       PRINT #PEEK ["][J]PEEK [V]WPEEK [V]  <=[.] LET TAN         
  18 REM [B][B][C][K]      #PEEK 3TAN                     
  20 GOSUB USR .##LN F?E(RND)# [J] GOSUB # FOR ▘CHR$ ▝5[W]##>"F.#[L]4 LET ▘C7TAN RND▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒RND▀▀▛▝▖▗▘  ▝▀▛▀▐▀▘▛▀▖▐▖▗▌ ▗  ▗▀▖▞▚RND ▞  ▞▚ ▗▄  ▌ ▐▀ ▙▄▘▐▝▘▌▝▟▞ ▗▀▖▌▐RND▟▄▄▐  ▌    ▌ ▐▄▖▌ ▌▐  ▌▝▐▝ ▝▄▘▚▞RND▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒RND▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄RND~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~RNDCOPYRIGHT 1987 BY: FRED NACHBAURRND,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,RND▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀RND[P][R][E][S][S]█["][S]["]█[T][O]█[M][A][K][E]█[A]█[B][A][C][K][-][U][P]█[C][O][P][Y]RND[O][F]█[O][R][I][G][I][N][A][L]█[T][A][P][E][.]██[(][L][E][G][I][T][I][M][A][T][E]██RND███[U][S][E][R][S]█[*][*][*][*][O][N][L][Y][*][*][*][*][,]█[P][L][E][A][S][E][)]██RND                                RNDUP/DOWNLOADING PORTIONS OF PROG-RNDRAM FROM "MINI-XMOD",  BY HARVEYRNDTAYLOR. "WRX-16" HI-RES ROUTINESRNDBY WILF RIGTER. ALL RIGHTS RSVD.RND                                RND[D][I][S][T][.]█[B][Y][:]█[S][I][L][I][C][O][N]█[M][T][N][.]█[C][O][M][P][U][T][E][R][S]RND██████████[C][-][1][2][,][M][T][N][.]█[S][T][N][.]█[G][R][O][U][P]██RND[V]█[2][.][3]█████[N][E][L][S][O][N][,]█[B][C]█[C][A][N][A][D][A]█████RND  
  21 REM RND[R][E][L][O][C][A][T][E]RND##5£##7#7▀#[L]COS  FAST"##)#J[J] GOSUB ##[B]C2 RETURN CLEARC~~ RETURN<>C▞ RETURN GOSUB C▝/▘77###7#EMRND;#▝▀#▝ LPRINT /TAN  ######[(]#[.]#[3]#[C]#[Q]#TAB #LEN #SGN #USR #>=# STOP# RETURN#▞#8#B###########[1]#[5]#[8]#[E]#[L]# NEW# GOTO # PAUSE # PLOT # CLS#£#>#7###################[▒]#[=]#[;]#[N]#LN #SGN #USR #**#<=# RUN #▒#£#(#/#4#####["]#AT #COS #SQR #▝#▒#:#PI#############█#▚#[D]#[K]#TAN #<># STOP# CONT # POKE # COPY#▀#▒#"#:#=#*#.#2#B#H#W#Z#PI#########################▄#[?]#[;]#[0]#[3]#[6]#[C]#[F]#[I]#[L]#[Q]#CODE #LN #SQR #NOT #<># STOP# GOSUB # LIST # PRINT # IF # RETURN#▀#▞#,,#(#=#*#6#9#E#R#U#X###################[1]#[E]#[Z]#TAN # AND # LIST # SAVE #▘#▖#~~#$#(#T#W#################▟#▜#[J]#[R]#[U]#[X]#ASN #LN #USR #<=# SLOW# DIM # PAUSE # #▀#▞#<#*#,#V#Z#PI#############[▒]#[(]#[7]#[D]#[G]#[J]#[M]#<=# STOP# GOTO # RAND # UNPLOT #+#I#R#U###########[G]#[J]#[M]#[R]#[U]#[Z]#CHR$ #<=# THEN# LPRINT # LOAD #▘#▞#,,#£#<#C#F#INKEY$ #############█#▄#[~~]#[?]#[,]#[3]#[B]#[F]#[I]#[X]#""#CODE #SIN #ASN #LN #SQR #PEEK #CHR$ # AND # STOP# NEW# DIM # GOSUB # PRINT #0#6#B#H#K#N#Z#########▗#[~~]#[?]#[>]#[/]#[5]#[C]#[H]#[X]#""#TAN #ABS # CONT # FOR # INPUT # RUN # CLEAR# #▀#▞#"#:#)#=#*#9#C#J#Q#V#########[,]#[C]#[F]#[I]#[L]#[O]#[V]#[Y]#CODE #SIN #ASN #USR # THEN# LPRINT # GOSUB # LIST # NEXT # PLOT # CLEAR#▝#▌#(#1#X#RND#################█#[(]#[A]#[D]#[Y]#AT #ASN #NOT #<=# TO # SLOW# SCROLL# REM #:#>#+#/#.#5#8#B#E#▀█-█ COPY COPY 
  29 REM [Z][X][T][*][8][0]
  30 IF Z$<>"S" THEN GOTO VAL "100"
  40 CLS
  50 SAVE "ZXT8[0]"
  60 GOTO VAL "20"
 100 LET Z=VAL "32270"
 105 LET K=VAL "9000"
 107 LET L=VAL "2000"
 110 CLS
 120 PRINT "[W]ESTRIDGE/[B]YTE-BACK"
 125 GOSUB K
 130 IF Z$<>"B" AND Z$<>"W" THEN GOTO VAL "110"
 132 FAST
 135 LET D$=("[H]##### [C]######" AND Z$="W")+("[A]##### [O]#####." AND Z$="B")
 137 LET A=VAL "20172"
 138 GOSUB L
 140 LET D$=("<=#TAN  PEEK #TAN  <=#TAN  PEEK #TAN  " AND Z$="W")+("U COPYZTAN M COPYZTAN U RETURNZTAN M RETURNZTAN " AND Z$="B")
 142 LET A=VAL "16655"
 145 GOSUB L
 150 LET D$=(" RETURN#C£ RETURN#4 SCROLLLN [O]#LN  DIM #/ NEWLN [8]#/ PLOT  " AND Z$="W")+(" CLEAR FAST LPRINT )8 ; RETURN#4▖QR/▝Q*LN [8]#/ STEP " AND Z$="B")
 152 LET A=VAL "18089"
 155 GOSUB L
 160 POKE VAL "16964",(VAL "62" AND Z$="W")+(VAL "201" AND Z$="B")
 170 POKE VAL "16564",(VAL "55" AND Z$="W")+(VAL "23" AND Z$="B")
 172 LET D$=CHR$ VAL "118"
 175 LET D$=("6"+D$+"9"+D$+"E"+D$ AND Z$="W")+("F"+D$+"    " AND Z$="B")
 180 LET A=VAL "22305"
 185 GOSUB L
 200 CLS
 205 POKE VAL "16535",NOT PI
 210 PRINT "ENTER YOUR INTERFACE TYPE.",,,"(IF NO BIG PRINTER, PRESS ""X"")",,,"1: TASMAN TYPE B OR C","2: AERCO OR OLIGER 2068","3: OLIGER 1000 (MAPPED FFFF)","4: MEMOTECH CENTRONICS","5: MEMOTECH RS232","6: ENER-Z REPORT GENERATOR","7: EPROM SERVICES C.P.","8: BYTE-BACK C.P."
 215 SLOW
 220 GOSUB K
 230 IF Z$="X" THEN GOTO VAL "300"
 240 IF Z$<"1" OR Z$>"8" THEN GOTO VAL "200"
 245 CLS
 250 LET A=VAL "20824"+VAL "40"*VAL Z$
 260 LET D=VAL "20098"
 270 FOR N=A TO A+VAL "23"
 280 POKE D,PEEK N
 285 LET D=D+SGN PI
 290 NEXT N
 295 POKE VAL "16535",SGN PI
 300 CLS
 310 PRINT "CHANGE MODE WORD?"
 320 GOSUB K
 330 IF Z$="N" THEN GOTO VAL "400"
 335 IF Z$="Y" THEN GOTO VAL "345"
 340 GOTO VAL "300"
 345 CLS
 350 PRINT "ENTER MODE NUMBER, AS FOLLOWS:",,,"1 STOPBIT: ADD 64","1.5 STOPBITS: ADD 128","2 STOPBITS: ADD 192",,,"EVEN PARITY: ADD 32",,,"PARITY ENABLE: ADD 16",,,"CHARACTER LENGTH:","5: ADD 0",,"6: ADD 4",,"7: ADD 8",,"8: ADD 12",,,,"FOR 300 BAUD RATE:","WESTRIDGE: ADD 3   ","BYTE-BACK: ADD 2"
 360 INPUT M
 370 POKE VAL "16563",M
 400 CLS
 410 PRINT "INSTALL USER OPTIONS?"
 420 GOSUB K
 430 IF Z$="N" THEN GOTO VAL "500"
 440 IF Z$="Y" THEN GOTO VAL "450"
 445 GOTO VAL "420"
 450 CLS
 460 PRINT " POKE AS NEEDED, THEN GOTO 500"
 470 STOP
 500 CLS
 505 PRINT "RELOCATE?"
 510 GOSUB K
 520 IF Z$="N" THEN GOTO VAL "700"
 530 IF Z$<>"Y" THEN GOTO VAL "500"
 600 PRINT " TO ADDRESS?"
 610 INPUT A
 615 LET O=A-VAL "28672"
 620 IF O<NOT PI THEN GOTO VAL "500"
 630 RAND O
 640 RAND USR VAL "21969"
 650 LET Z=Z+O
 660 CLS
 670 PRINT " RAND USR ";Z;" TO ENTER"
 680 GOSUB K
 700 CLS
 710 PRINT "MEMORY:",,,,"1: 16/32K","2: 64K"
 720 GOSUB K
 730 IF Z$<>"1" AND Z$<>"2" THEN GOTO VAL "700"
 750 POKE VAL "16572",(VAL "60" AND Z$="1")+(VAL "217" AND Z$="2")
 760 POKE VAL "16573",(VAL "192" AND Z$="1")+(VAL "255" AND Z$="2")
 900 CLS
 910 PRINT " SAVE CONFIGURED PGM?"
 920 GOSUB K
 930 IF Z$="N" THEN GOTO VAL "1010"
 940 IF Z$<>"Y" THEN GOTO VAL "900"
 1000 SAVE "ZXT8[0]"
 1010 RAND USR VAL "20624"
 1020 RAND USR Z
 2000 FOR N=SGN PI TO LEN D$
 2010 POKE A+N,CODE D$(N)
 2020 NEXT N
 2030 RETURN
 9000 IF INKEY$ <>"" THEN GOTO 9000
 9010 LET Z$=INKEY$ 
 9020 IF Z$="" THEN GOTO 9010
 9030 RETURN

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

Scroll to Top