--- title: "ZX-TERM*80" id: 51402 type: "computer_media" slug: "zxterm80" url: "http://localhost/computer_media/zxterm80/" markdown_url: "http://localhost/computer_media/zxterm80.md" published_at: "2023-07-30T08:00:16+00:00" modified_at: "2026-04-04T20:18:07+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2023/07/ZXT80.jpeg" excerpt: "A terminal emulator installer that patches machine code for eight printer interfaces, configures UART parameters, and optionally relocates the entire communications package in memory." 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: "SyncWare Co." slug: "syncware-co" taxonomy: "post_tag" url: "http://localhost/tag/syncware-co/" - name: "TS 1000" slug: "ts1000" taxonomy: "post_tag" url: "http://localhost/tag/ts1000/" model: - name: "Timex/Sinclair 1000" slug: "ts-1000" taxonomy: "model" url: "http://localhost/model/ts-1000/" indiv: - name: "Fred Nachbaur" slug: "fred-nachbaur" taxonomy: "indiv" url: "http://localhost/indiv/fred-nachbaur/" - name: "Harvey Taylor" slug: "harvey-taylor" taxonomy: "indiv" url: "http://localhost/indiv/harvey-taylor/" - name: "Wilf Rigter" slug: "wilf-rigter" taxonomy: "indiv" url: "http://localhost/indiv/wilf-rigter/" genre: - name: "Terminal" slug: "terminal" taxonomy: "genre" url: "http://localhost/type/terminal/" media_type: "Cassette" programmers: - name: "Fred Nachbaur" slug: "fred-nachbaur" taxonomy: "indiv" url: "http://localhost/indiv/fred-nachbaur/" - name: "Harvey Taylor" slug: "harvey-taylor" taxonomy: "indiv" url: "http://localhost/indiv/harvey-taylor/" - name: "Wilf Rigter" slug: "wilf-rigter" taxonomy: "indiv" url: "http://localhost/indiv/wilf-rigter/" download_url: "https://archive.org/download/timex-sinclair-software-archive/ZX%20Term%2080%20v2.5%20%281987%29%28Nachbaur%2C%20Fred%29%28US%29%28TS1000%29%28Program%29.zip" mediadate: "1987" producer_company: - id: 11370 title: "SyncWare Co." type: "company" url: "http://localhost/company/syncware-co/" images: - url: "http://localhost/wp-content/uploads/2023/07/ZXT80.jpeg" - url: "http://localhost/wp-content/uploads/2023/07/Tape.jpg" article_media: - id: 44100 title: "A ZX-TERM*80 Quirk" type: "article" url: "http://localhost/article/a-zx-term80-quirk/" - id: 42647 title: "Support for ZX-Term*80" type: "article" url: "http://localhost/article/support-for-zx-term80/" - id: 46354 title: "Support for ZX-Term*80" type: "article" url: "http://localhost/article/support-for-zx-term80-2/" related_products: - id: 20302 title: "ZX-TERM*80" type: "product" url: "http://localhost/product/zx-term80/" media_type_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 `POKE`s 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: | 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`-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. ## 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 #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,,#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 ,# RETURN64AT ( 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 ▞)▞ ; 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"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 ```