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
- Line 30: checks
Z$for “S” to branch to a tape-save shortcut (line 50). - 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.
- 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.
- Lines 300–370: optional UART mode word configuration via
INPUT M/POKE VAL "16563",M. - Lines 400–470: optional user customization via
STOP, allowing manualPOKEs before continuing. - Lines 500–680: optional relocation — computes offset
O=A-28672, callsRAND USR 21969to execute a relocation routine, and adjusts the entry-point variableZ. - Lines 700–760: memory configuration (16/32K vs 64K), patching addresses 16572–16573.
- Lines 900–1020: optional save to tape (“ZXT80”), then launch via
RAND USR 20624andRAND 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"inGOTO/GOSUB: used consistently throughout (e.g.,GOTO VAL "100") as a memory optimization to avoid storing floating-point line-number constants.SGN PIfor 1: used in place of the literal1inFORloops and arithmetic (e.g.,FOR N=SGN PI TO LEN D$,LET D=D+SGN PI).NOT PIfor 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:
| Key | Interface |
|---|---|
| 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. |
Memory Map and Address Constants
| Address | Purpose |
|---|---|
| 16535 | Flag byte: 0 (no printer) or 1 (printer present) |
| 16563 | UART mode word (stop bits, parity, char length, baud) |
| 16564 | Modem timing constant |
| 16572–16573 | Memory size configuration (16/32K vs 64K) |
| 16655 | Modem init string target |
| 16964 | Modem type byte (62=Westridge, 201=Byte-Back) |
| 18089 | Modem scroll/return patch target |
| 20098 | Active printer driver slot (24 bytes) |
| 20172 | Modem name string target |
| 20624 | Machine code initialization entry point |
| 20787 | Upload entry point (referenced in line 2 REM) |
| 20824 | Base of printer driver table (8 × 40 bytes) |
| 21969 | Relocation routine entry point |
| 22305 | Modem HALT-sequence patch target |
| 28672 | Default 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-triggeredPRINTblock 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 20787embedded 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 aHALTopcode (0x76), used to build patched Z80 instruction sequences inserted into the machine code for modem-specific timing.
Content
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.

