MemoText V3C-J

Date: 1983
Type: Program
Platform(s): TS 1000

MEMOTEXT is a word-processing and text-editing application for the ZX81/TS1000 platform, stored as a single BASIC loader that embeds a large block of Z80 machine code in line 0’s REM statement. The BASIC portion handles startup tasks including a checksum verification of the loaded machine code (line 15/25), RAM detection in the 32–64 K region (line 50), printer interface configuration for six named hardware options (Memotech, AERCO, Byte-Back, Tasman, Oliger, and Eprom Services), and optional customization of graphics character mappings. The machine code, which spans the REM statement at line 0 and occupies addresses approximately A870H–C6B7H, implements the full editor, a Universal BASIC Printer Driver (UPD), and integration hooks for the Exatron storage system. Printer output routines are selectable via RAND USR calls at addresses 45159, 45182, 45193, and 45441–45451 for screen copy, partial copy, LLIST, and LPRINT with case-selection modes respectively. The loader also patches line-feed/carriage-return behaviour at specific addresses (19360, 19365) to accommodate printers requiring LF-only, CR-only, or LF+CR sequences.


Program Analysis

Program Structure

The program is organised as a multi-phase BASIC loader. Line 0 is a REM statement holding the entire Z80 machine-code payload (several hundred bytes). Lines 1–99 handle initialisation, checksum verification, RAM testing, and tape-backup prompting. Lines 100–270 present a function-command screen with copy/backup options. Lines 300–330 handle the “no 32–64 K RAM” error path. Lines 400–480 manage an optional HELP file load before launching the main application. Lines 500–1090 implement a multi-step configuration wizard covering printer interface selection, custom graphics characters, and Exatron drive detection. Lines 2000–2040 are a reusable subroutine that prints a status bar and waits for Z (print copy) or C (continue). Lines 9000–9030 handle checksum failure recovery.

Machine Code Usage

All substantive functionality is implemented in Z80 machine code embedded in the line 0 REM. The BASIC lines invoke it exclusively through USR and RAND USR calls targeting specific absolute addresses:

  • USR VAL "24281" (5E59H) — checksum routine, called at lines 15 and 25
  • RAND USR VAL "24267" (5E4BH) — initialisation/upload, lines 62 and 1082
  • RAND USR VAL "24313" (5E79H) — functions screen renderer, line 100
  • RAND USR VAL "45965" (B38DH) — display/border routine, lines 205 and 250
  • RAND USR VAL "45159" (B067H) — full screen copy to printer, lines 250, 2020
  • RAND USR VAL "45182" (B07EH) — partial screen copy
  • RAND USR VAL "45193" (B089H) — LLIST
  • RAND USR VAL "45441", 45446, 45451 — LPRINT with case-selection variants
  • RAND USR VAL "43851" (AB4BH) — preserve-RAMTOP start
  • RAND USR VAL "46657" (B641H) — full-RAM start
  • RAND USR VAL "46555" (B5DBH) — restart after QIT
  • RAND USR VAL "3875" (0F23H) — called in the print-copy subroutine

The machine code at the addresses above covers the word-processor engine, the Universal BASIC Printer Driver (UPD), Exatron O/S integration, a memory monitor, and the CDD (change date) and DSP (display/monitor) utility functions mentioned in the banner text.

Initialisation and Checksum

Lines 5–8 establish frequently used constants using NOT PI (= 0) and VAL "nnn" literals, assigned to variables O, P, Q, R for 0, 32768, 65535, and 201 respectively. The value 201 (C9H) is the Z80 RET opcode; POKEing it to addresses 32768 and 65535 at lines 40–45 is a standard ZX81 technique for testing whether RAM exists at those boundary addresses. The checksum is computed by the machine-code routine at 5E59H; its result is stored in I at line 15 and re-verified at line 25 to detect corrupt tape loads.

Printer Interface Configuration

Lines 650–780 implement a hex-string patching system. Each of six named interfaces has a pre-defined string in I$(n) whose first five characters are a label and whose remaining characters are an ASCII-encoded hex dump of the output routine. Lines 740–780 decode each pair of hex characters into a byte value using the formula (CODE I$(IF,A)-28)*16 + CODE I$(IF,A+1)-28 and POKE it into address 18502 (4846H) onward. This effectively self-patches the printer driver at runtime without any assembler. A seventh “OTHER” option (lines 670–699) allows the user to enter a custom label and hex string.

IF valueInterface nameString label
1MemotechMTECH
2AERCOAERCO
3Byte-BackBTBCK
4TasmanTASMN
5OligerOLIGR
6Eprom ServicesE-SRV
7User-defined(input)

Line-Feed Patching

Lines 57–58 patch the machine code in-situ to configure carriage-return/line-feed behaviour. Address 19360 (4BA0H) is zeroed for LF-only mode; address 19365 (4BA5H) is zeroed for CR-only mode. When neither is patched both bytes retain their default values, producing LF+CR. The variable name IF (also used as the interface selector) shadows the BASIC keyword IF; because it is used only as a numeric variable in LET, INPUT, and arithmetic contexts this does not cause a parse error in ZX81 BASIC, though it is unconventional.

Key BASIC Idioms

  • VAL "number" used pervasively in GO TO, GO SUB, POKE, and FOR targets — conserves memory by storing the number as a short string rather than a five-byte floating-point constant.
  • NOT PI for the constant 0 — PI is non-zero so NOT PI evaluates to 0, saving bytes versus the literal 0.
  • PAUSE Q (Q = 65535) used at lines 52 and 310 as a long delay, effectively pausing until a key is pressed.
  • RAND USR … AND USR … at line 250 chains two machine-code calls in a single expression.
  • Inverse-video characters in PRINT statements produce highlighted labels on screen without needing separate attribute handling.

Notable Techniques

The version string “V3-2.07+UPD” in line 1’s REM, combined with the label strings embedded in I$() (lines 661–666), provides human-readable metadata within the binary. The configuration wizard at lines 500–790 is unusually sophisticated for a ZX81 BASIC program, implementing a complete hex-byte assembler/patcher using only string operations and POKE. The DIM I$(7,76) array at line 650 allocates exactly enough space for seven interface records of up to 76 characters each (5-char label + space + up to 70 hex characters + forced “C9” terminator).

Anomalies and Notes

  • Variable IF is used as a numeric variable name. This is legal in ZX81 BASIC (variable names are single letters optionally followed by alphanumerics, and the tokeniser distinguishes keywords from variable names by context), but it is confusing to read.
  • Line 160 GOTO O (i.e. GOTO 0) targets line 0, which is a REM. On ZX81, GO TO a REM executes the next line, so this effectively jumps to line 1 — a deliberate shortcut to restart.
  • Line 53 uses IF INKEY$="S" THEN RUN after PAUSE Q without a preceding PAUSE 0; since PAUSE Q already waits for a key, the INKEY$ test immediately follows the keypress event and is valid.
  • The A=VAL "11" boundary check in lines 865–870 of the graphics-customisation loop skips from code 10 to code 128, bypassing control characters. This is intentional to avoid patching non-printable entries.

Content

Appears On

Related Products

Includes Powell Hargrave’s Super Data Save (SDS) relocated and incorporated for fast load and saves of text. Help screens and...

Related Articles

Related Content

Image Gallery

Source Code

   0 REM E54F21C0466A7E3C28C7ABE3037E817723232318F047A77921BF46ED425D9E56A54EBED524D19D1EDB847AF121B10FCE1C97A93D511E446EB66EBCD70A8D1C97BA7C87A93C8CB3F4F833C5F3C32E74679A7C8D5160CD70A8D1C9E526C0CB7F282D6406F7EE1CD34B0C9E5F5E67FFE1C385F1C68018E4F118E10E5C5D521C0467EFEFF2831BB202E235E2356EB7E23FE138FA2813D61C87878787477E23D61C38FA80CDD9A818E521C34611E011C046EDB0D118C6D1C1E1C932E246E5D52104611047101EDB0D1E1C93AE146A7C82104710111046EDB03AE246A7C821E546347E6F3616C93AFF4332EA462142122E8462163C22EB4621ED46AF6C772310FC2AFA4322EE46AF6E621046772310FC2EC03D621772310FC2AE84622E6463AFD4332F846C9003AE7463D32E4463C93D0ED443C47E026466B7E2BA7201C10F82379A7CAA4A87A9347B97B3015004803AED46CB477B2887E23A720FB10F97D416F7E2BA720FB78D28D4C26FF5249130FB7C2646DD5C555CD70A8C1D179A720DEC900ED5BE5467BA7282192281E3AE346A7285CDA4A818133AF046A7285CDB2A81883AF846FE3ECCA3A94211046CDEEA8131ACDCDA810F63EDCD45AAC381A9CD8DB3CD46FD8AF184A0032F84647C5CD6AAC12AEC462422EC467CBD28A5202A7C9CD45AA18EB26022EC463AEB46A7C847CD45AA10FBAFC9CD54AAC021EA46343AFE43FE3820113E1813536CDC4B4B83EA4CAF5B8C42AA2AF2467CA7C8E521E146110441190EDB02142122E64622E846210122F04622F546E122EE46AFC90CD5FA9CD89AACD94B122EE467E23ED5BE5461646FEFE38123AF546A73E64CA51AAAF32F5462AF64618DFFE1283830B1AA728D532E146AFCD2EA94F7BA72053AE7465F1D3AE646BB28111379127B32E54679FE163E0CCA1AB18ADCD41A93E1CD81AA18A07E231D5AAC5E52120C1BE2323284232318F74E2346E1C5C92A440C344B67ED61CD8FEA3FD8C547237ED61C38BD6A307234C6A10FC4778C1A7C9D5E5CD51ABD1303EBD1C9ED52EB191D28F7577ED61C3F3015FEA30115F7AFE143F38A878787828283A723D1C97AD1C922EE46C32EA97B11E346EB3612377EBC9CD51AB3023E1A728FBF53E3322EE4632F846F1C1C32DAB3E6418EECD51AB4F3AED46B9D07932EC46C9CD51AB32EB46C93AE646477B3C3C4FCD51AB3CB93814F7AB9D83AE746B9D07932E74600003D32E546C93AE84647CD51AB3CB8281D032E9464F3AE646B9D87BA728DA3CB938D6C93AE946473AE7464FCD70ABB838332E846B9D8BBD832E646C93AF146A7281FE13E3332F8463E1CD81AA3AED462104411E1461320EDB032ED46C3D2AA22F2467E233D20FB7E23FE2D20F53AED46A7C0B3C03AC0463CC0E12ED2E5C3A1AA022EE463AF046EE132F0462810CDE2B3ED5BE5465AED53E546C1C32BABED5BE546CDB2A8ED53E5463AE746BAC8D818E4E57E233D20FB237EA72816EBC121BF46237E23233C20F9702B712B3AE54677EBC93AE646BB20E4E1C1AFC32BABEB210457E23BB2047EBA28523232318F2237E23666FEB7E23FE1F3867E23FE1C30FA22F646EB3E132F546C903AEA46112144EB36FF2B361C2B361B2B361B34D66430FBC6642334D6A30FBC6A2386772B2B3E1CBE20523BE20123EB18C2ED5BE5467BBAC83E16C32EA923EB2AF84337ED52EBD0E1C372CDE72CD67AD18FBE1603E7FDBFED3FF1F30481717382710F1F13E3BA303C215344CD67ADCB7A79203BE20D4231730F12AF64350CD67AD71CD51AD18F6D51E9461A1DDBFE17CB7B7B38F510F5D1204FE5630B33FCB1130AEC9CD723EA6C3FB003A9943FE2620A210487E3C3EA5C2D6B5CD18B6FE26288CDD7B83E8BC2D6B5131AA720FB1B1AC680123A994332534421C84422F64321CA4422F843CD5FAD2A44025ED5B9643D5ED52ED5BC844ED523E89DAD6B5E122F6431922F84316BECD5FAD2AF84322964336FFC3DBB505E37CB13C89FE65C644FD3FF62310FECD46F30C61E10FED20EEA710FD18E0CD723EA6C3D6B5CDE7221534411CBBCD46F30EA10FE1B7AB320F4CD33AECB7E2328F82AF643CD33AECD51AD18F83A9943FE262093A0483C3E8CCAD6B521C84422F643232322F843CD18B6FE2620911048D52A96431811CDD7B83E8CCAD6B579E5234E23469D1D5E5ED5222C84421534477AF23BE20FC2BCBFECD5DAE3E3F325344E122F843E122F643CD5DAEC3DBB507E23FE1DC8FE1EC8FE3528BFE292873EA7CD92B437C97EFE1A2043EA818F22B6A237EFE1AC8FE1C38F0FE4030EC10F118E8607E23A728FB3D20C7EFE3A28163EA9CD92B437C9D61B3043EAA18F34FE1038DF18F5CB40C83EAB18E5AF32F2432AEB4311509E5E1237E3C2867FE220F7E5237EEB6E2120C1BE2328923232310F73EAC18577EEBA728DB23FE82010CD70AB473EAD384578A73EAE283F18C6FE1205CD51AB18EAFE2207CD51AB30B418DFFE4038721F243AE7718A7FE20207CDEAAE3818189ECD1EAF3811C1E518953AF243A7CADBB5E53EAFCD92B4E12BC35DB70000210487E3C3EB0CAD6B57E234E2346545D9E5FE293E132813DCD92B4218340190EB23EDB03EA013338CDC4B4B8CADBB5E118CD2A964336FFC3D6B5EDA078B1C8CB7628F77EFEC02013DCBB7121323B3E76121318E718E3F5DB3FF38FBF1DB2FC9000000000000000000000000C93A9E43FD9634FE183FD09F329C43A7C916182AC40237EFE76285CDDDA818F5CD8DB31520EFC9ED4B324079FE19D05718E02AA40CDD897EFE76C846234E23E5C5E111E83CDBBB011640CDBBB011A0CDBBB01110CDBBB0AF32940CDDDA818FAFED523833C18F919C630CD34B0C9E15E2356231B7AB320ACD8DB3CD46FD02318B17EFE7E20C23232323231B1B1B1B1B18DFF5E67FFE4030BF1CDDDA83E13294018CD3A940A7289AF32940CDDDA81843C32940F1CD759AF5E67FFEF2023E92CDDDA83F1FE8038EDAF32940CDDDA8189AED4B324079C6A047ED5B1040EB7EB82816C680202CF1B8287C5CDF29C118EB235E235618D235E2356231B4623231B1B10FA237AB3204CD8DB3C97EFE76205CD8DB3183CDCDA81B18E721CDA818821DDA81832134B0227CB118A102AEE46CD23FC34EB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000119E4021E0C31D62EDB0ED5B96432A44025252323AFED52CD9AB2C3D9AF0E51161CDF58E1E51E31F0D8CDE17CDADAC9021D9C9228AB33E0328CB3CD2AACD2BFC900E5D5C5F521D9C91019007E814F2310FAFE362068CD50B32AC40E52A8AB301105D1183EDB02105D367622C403E86FF10FE3D20F9CD46F3038CDBB2112107DFEEF28218EE7CFEDF286FEEF28D18E3CD48B3FEC028DC3C1918DCD48B3FE028D13DF5AFED52F1328CB3228AB318AAE122C40CD50B3F1C1D1C9003A8CB32A8AB3C9021C0C61105D11937EF51A77F1122313B78B1C818F22A964323CD9D14C31343E521A543CD26B63E621C643CD26B6C9CD71B3C3DBB500D9C903EDCD34B03EACD34B0C9210307EFEC32027237EFE112021237EFE3A201BCD23F2A964323CD9D14FD362E021DBB5227B40217B4022240C31B333EB1CD92B4C3DEB50CDAD14E5D1131010360EDB0C9007BA7C0C13AE74632E546C996284FEFE384C1C30B43A3440777B3CC9FFCDBB2E5CB84ED4B9B43A7ED42D1219D433A34402015C66CB46202C61823961730DD2BCBC63A3440182CB8623CDEDB3424BC5CB80ED439B43C128C3C5CB80CD5AB9C1505ED5CBC0CDBD7D17E219D43CB4E202CCB42C0CDCE14303C680C9A7C8D61CFE1C8FE3C87BFE1AC8FE77C8FE79203CBCEC9FE703884FE743080C97BFE79289FE1B30F417CB1A3F1FCB8EC9C5E5D5CD7EB6218E40CB7F2819412B36010FBE63FEB472160C13E76BE2320FC10FA7EFE76284EDA018F7D1E1C1AF3DC9CD92B4E5D5219D43360C5CD0B4C1B8283B920F0D1E1C9F53E7360952874F545D23EDB02B70F1C9215444ED5BE9431200EDB0C9115454ED539F43CDEEB4CD0B421FEB4E5ED5B9F4326446B473AE8434F78FE7220C7BFE54C81D462B7E702377C9FE732077BBAC81C2318EEFE7720D7BFE54C81D152BD5CDDCB4D1C9FE762010D287CDDCB4D1C3EEB47AFE54C818F3CB4928ADFE7920117EEE8877C9AF329D434F78FE1CD8FE40D0CB77285CB41C018D0A720147BFE54C8BA288231C7EA728961D2B2B7EA7C823FE3C8302B9C03E73BAC8141CD55F547023952874F6B2B60EDB83E812D1C96126621E8437021544322E94324E5101F368237110FCCD92B4CDFBB4E1C90CD92B4183CDB0B2ED7B4403E3CDB4B51180C0617E32E541ABE132328C7B813C5F10F03E8418D600D20EBEB4E2346C5130119A432B2BEDB8C32AA0CD2AA3E2CDB4B53A9943EBC90E5CDB5B5D11200EDB06201B1AA720710F93EFF12C9131318F8216EA422440F9CD23F217D4022C4061936762310FB221040CD9A14CDD2B3CD2AACD2BF3E71760CDC4B4CD71B3C3A2B9000000000F5CD2BF1100F1C92AA3437E3C28AFEC120135CBB62318F221C040E16AF620772310FC367623D20F4C3A8B801614CD20BE1520FAC360B7EB2123413E6143203602310FB93D20F4EBC92AA343E1518EFEFF2834FEC02013DCBB77718916061F7ECB7720E9A7202545D2310F3EB7CA7206EB862012B2BCBF67E3C20236C023AFD20D72B23EB2A9F43ED52388CD20BEEBE118C5CC5193C2011BA7EBED52444D2AA343C5EBD92A9B43ED4B2540ED42D9C457B0ED52444D21C040EBCD19B03AEF431213C1CD19B0EBC1367623D20FAC932E843CD8CB82AA343229F433E832EF43CDCDB6CD0B4216BB7E52A9F43ED5BA343A7ED52444D19FE76C8FE792093AEF43EE8832EF43C9FE77201578B1C813ED53A343B78B1C82B545D2BEDB800C9FE7220B78B1CC5B9C82B229F43C9FE732097EFEFFC823229F43C9FE70202678B120BCD5B9C82AA343229F43C92B7EBCB7728EA78B12882B7EBCB7728F523229F43C9FE7120B7E23FEFFC8CB7728F718EDA7201478B1C82B7EA7C8FE40C8237EFE4028D9A728D6AFFE12083AE843FE3C03E1FE3203632EF43CDCDB6CD0B4FE32063E832EF43C9FE36289473AE843FE228E47867210C1BE23286232310F818D44E2346E1C518D7CD38B91BED53A3436778B17C285626B23EDB01218C1CD87B63AE84318CCD18B6CDD7B8C03E8CC3D6B5FD0C34AAF22A143ED5B9643D5EBA7ED52444DED5B44015E1EDB8EB2322A343C92A44025ED5BA343A7ED5223444D2AA14323EBEDB02A9643EB2B229643ED52EB2AEB43234E2346EB9EB722B73C9021048E94F7E3CC879BE234E234620F34F23CD40BC2B2B7920F12BA7C92AF84322964336FFF5CD2AAF1C3D6B5E52AA1437E3C2827E510042B7E3CFE230448A728978FE1F20EFAFB928F3473CE11BEDB813ED53A34322A143E1C9A7C9F52AA143EBA7ED527C19EB268AA7285253D28125F16F7CCD92B47CFE8A7DD8E1C9CBC03EFEB8288738FAE1C1C30B4CB803EFEB9CABD7738F918EECD7BB822EB433E93CD92B4CD8DB91E93E9EDB0C35AB73E12CD92B4118340232323190EDB03E3C93702104836FF229643C3DBB5CD18B6CDD7B83E8BC2D6B571E52336152336023190EBEDB0EBD12323C9E5CD2AA603E10CDB8B5D1190EDB0C9CDADB9D52B2BCDCCB9DEB7123712371229643E11885CD7BB8232323E53E14CDB4B518D5CDADB92B2BE5E369570237023702296433E421312D13EDCD92B411D621844071C5D53E88CDB4B5D1190EDB0C1C10EBC3DBB5CD7BB81C09EB18D622F0437EFEFF3E8ECA92B411434166C5620AF1B1210FCE837EFEFE284EDA018F723EB9EBC110E6C97E3CC8545D667E23FEFE20FA10F87CA77EEBC9CD6EBAC8E52A9643ED5223444DE1E5CDBAB8E17CA7C922EB431C09E5CD2AAE13E611241190EDB0E5AEB9EB3D20F323C9F323CD43BA3EFCD92B421BDBAE5219D43360CD0B4FE2638F4FE2A3813FE2B28FFE3328BFE35287FE3620E0C3DBB5218540773E88CD92B47E2AF043FE332013CD6EBAEB3E8ECA92B47E3C3E8ECA92B4C343BAFE2B20A14302AEB439C343BAFE3520162B7E3C3E8ECA92B4662B7EFEFE38FA10F823C343BAFE2920ECDB9B6CD82BA2B7E3C20E32318EBE5472A4402525ED5B9643ED523E8AE1DA92B478FE2620ACD82BA3E8ECA92B418BFE27CCB9B6CD6EBA281EB3E332E84322F04321234122E9433E8115444121311F0EDB01B2154741A1B25A728FAEBCDFEB4FE76282116302AE943FE707D20CFE23203217543A7ED4218C8FE1220321C040918BEE621314311FF443EFE121B61F2B7EA720510F92B187794860EDB84F79E43A7ED424FD20DF7B2F4F2A9643E5E59229643EBE1ED4BF043ED42444D3E1EDB821FF444FEDB84F2AEB43235E2356EB9EB722B73C921544422EB43CD7BB8E5234E23469EBE1CD86BAC3DBB5CDF4B9C3DBB5CDF4B9EBCDCCB9C3DBB5E5D5691AFE1C303AF61BE204231310F1D1E1C9110452AFA43ED53F6437E233CC8FE220F87EFE3820F32318FEB2AF6437323722371237023EB18DD07E1170BCD51A543FE1DC8EC6FE1EC8E523FE292034ED5BF2437AA7282C0E6EBCD40BC28E7919094FD20F23E99C3F5B83E691ED4BF44357E1A7C8A3FEFE20FA1520F7C93E16CD92B4E1E5118440237EFE1C384121318F62A96437E363522EB4323363233602377237723772296432BE52B3E2CD5AB7C1E1C93D62CDB8B57E3D20B2E7211E07EA72B28B3D3E9D20E816452E55DC9D20ED18F061262C5CD87B6CD2AA3E1CCD2BD28FB58EDB03EFF12CD2AAC1520E3E1ECD2BD1E20282EDB03EFF127832FC43CD2AACDE722AEB4311509EB21045131AFEFF209CD722AEB43C37CB9BE20EED5237E3C285131ABE28F6E120DCE52BCD8CB8229F43EBCD5B93AFC43C61FCD92B4CD72CDCDB6AF329D43CD0B4FE332824FE3820162AEB43CD8DB932E843D1C36EB7CD7BB8CD98BAC3BABAFE2A20D73AFC43A720D1F5CDE72CD87B6F1D1FE332887D5EB2BCD8CB8110451A13233C20FA2B1E1F474F131AC3C20FA1BD2872B0EBEDB813EB22A343CD87B6D1C364BD614ED5BA343C5CD5B9C110F9ED539F43C36BB72AA343ED4BA1437E3C28103D2332CB7728F43DFEBF282D63F222A343ED43A143C9372A9F43ED5BA343ED4BA143ED529E5ED73F043CD87B62AEB43116097E233C20D3EA2ED7BF043E1CD92B4C35DB7FE220EA7E3D20E6E54CB482328DFE1D1C1C523ED4293018A723ED52E56069C1ED42E59E56069C1192B2B2B2BD518102B2B2BC5EB2BED42923EB3EA138B5E5ED5228AEE5D92A44025ED5B9643C1ED52ED423E89D9389CE5D56069CD8CB8ED5BA143E1C1C52313EDB01BED53A143CD87B6C1E1C5CD8CB8C19232322A3432AA1432B2B22A143CD87B6E1C1C35DB7CD7BB81C09E5EA922FA432A964322F843210453602310FBCD2AA3E1713828CDC4B432FE433E1113E33CDC4B432FD43CDDEBFE1E57EA73E2E28183E15CD92B4AF329D43CD0B4FE2E288FE38284FE2620ED32FC43260D1FE2E28E3E29CDD7B83E9BCAD6B51C0922F243E37922F4433AFC43FE2E2839F52AF4437E3C3E8ECAF5B8F1FE38201ACD43BA2AF243CDA4BA3E1A13835CDC4B4F5CD2AAF1FE3828182AF443119F407EFEFE304EDA018F7CD56BCCD2AACDCCAA2AF84322964336FF3AFC43FE2ECADBB52AF443CD6EBAEB189B3E23CDB4B5CD70AB473E8438F57832FF43C9000000000000000020202020202020202020202223243A3F28293E3C3D2B2D2A2F3B2C2E303132333435363738396162636465666768696A6B6C6D6E6F707172737475767778797A20202020202020202020207C252660217B7D7E5F5B405D7F5C5E2720303132333435363738394142434445464748494A4B4C4D4E4F505152535455565758595A28392BDEB926392B76B928292B2BA26292B39BA32292BBDBD29392B19BC29292B19BC37392B36BC37292B30BC35392B3BF31392BC5AD31292BC5AD31262BC5AD38392B85AE38292B85AE38262B85AE2938357AB2362E3967B328292982B32A343898B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3673B870CBE71AEB62A25BD2B26BD3244BE2DC4B200000000000261E3AB272DCAB2E28AC310B2AB331CEAB350CAAB370A7AB3C826AC2D403FAC288086AC3A4B6AC3820E3AC3F012AD16045AD000000007639343403134332C763326322AF762B3A3328392E3433F762E333B26312E29762926392A01D762926392A01E7632392A282D03B1F2A262776076382D3437390342B0383526282A76B4BAB980B4AB80B8B5A6A8AA762631372A26293E02A3D2E38393876333439035372A382A3339762B2E2A31290FF76333403234372A0372A2838762628392E34330F76292639262B2E312A03326322AF762F3A38392E2B3E0BE18B3F76392A3D391676292639261676332A3C03326322AF76A6313118B82A3118AE33353A39F762E33353A3976B82E332C312A18A8343339F76B5372E3339035262C2A18B63A2E39F762B2E2A31290322E38322639282D76B5372E333918B8302E35F76292639262B2E312A0322E38382E332C76382A2637282D03839372E332CF761322E38382E332C762A3D282D26332C2A03839372E332CF76AA3D1B18B32A3D3918B8393435F76B32A3D3918B8393435F7632343B2A02E330272A393C2A2A3376110322E38382E332C763839263739035262C2AF7635372E3339038393435352A29762B2E312A3802A3D2E383976A7B7AAA6B098AAB7B7B4B77633343901D1A1E1A351A2976383E3339263D03C3734332C763334013A0263902A33297633343902D2A3D762D26312B0333A32272A37763A333033343C330283432322633297633340333A32272A37763F2A373402E333B26312E297612D18128038392E3131034352A33762A33290372A26282D2A29762A382B0343802627382A3339760000007600000000760000000000000000760000000000000000000000000000007673333A6BBA6AEB1A6A7B1AA80B2AAB2B4B7BE943333333338476528292B1828392B016028372A26392A0260332A3C02B2E312A0008576529292B1829392B0160292A312A392A0103C2E352A1102602B2E312A8576537292B1837392B0160372A3326322A02602B2E312A00000008576531292B1831392B01603134262902602B2E312A0000000008576538292B1838392B016038263B2A02602B2E312A0000000008576538262B1831262B016038263B2A1831342629026313102B2E312A3808576526292B0160282D26332C2A02926392602B2E2A312903326322A3808576532292B016032262E3339262E33010282D26332C2A11029263926008576526392B016026322A33290102A292E39110392A3D3902B2E312A008576535392B016035372E33390343A390260392A3D3902B2E312A000857652938350160292E383531263E02B2E312A3801502B372A2A0322A3285765362E390160372A393A37330393402726382E28000000000857652A343801602C340393402A3D263937343303418380322A333A00857650B7AAB9BAB7B380B9B480B2AAB2B4B9AABDB980ABB7B4B280AAB8AB8E085765035372A38380211A031010312A39111A0392D2A3302A33392A3708576733A9A6B9A680ABAEB1AA80A6A8B9AEB4B3B88090B694B6BAAEB9913384765732628392E343338039340283A37372A33390372A28343729338485765261426322A332983832814293A35312E2826392A83832914292A312A392A8576527014028372A26392A0260332A3C027312633300372A28343729085765331A351A2B14332A3D391A35372A3B2E343A381A2B2E37383902B2E312A857633333333333333333333333333333333767601481E1170A8218240EDB0C9002A1040117D40A7ED52EB100A77E894F387231B7AB3C818F3418F60001D62ED5BC4021E0C3EDB0C9
   1 REM V3-2.07+UPD
   2 FAST 
   5 LET O=NOT PI
   6 LET P=VAL "32768"
   7 LET Q=VAL "65535"
   8 LET R=VAL "201"
  10 CLS 
  14 REM %C%H%E%C%K%S%U%M
  15 LET I=USR VAL "24281"
  20 SAVE "MEMOTEX%T"
  25 IF USR VAL "24281"<>I THEN GOTO 9000
  30 REM %3%2%-%4%8%K%?
  32 SLOW 
  40 POKE P,R
  45 POKE Q,R
  50 IF PEEK P<>R OR PEEK Q<>R THEN GOTO VAL "300"
  51 PRINT "%M%E%M%O%T%E%X%T% %V%3%C%-%J% %H%A%S% %B%E%E%N% %L%O%A%D%E%D%.% CHECK-SUM INDICATES PROPER LOAD.",,,,"PRESS ""S"" TO BACKUP MASTER TAPE"
  52 PAUSE Q
  53 IF INKEY$="S" THEN RUN 
  54 CLS 
  55 PRINT "%L%I%N%E% %F%E%E%D%/%C%A%R%R%I%A%G%E% %R%E%T%U%R%N%:",,,"DOES YOUR PRINTER REQUIRE",,,"1. LF (0A HEX) ONLY","2. CR (0D HEX) ONLY","3. LF + CR"
  56 INPUT LF
  57 IF LF=NOT O THEN POKE VAL "19360",O
  58 IF LF=VAL "2" THEN POKE VAL "19365",O
  59 GOTO VAL "500"
  60 REM %U%P%L%O%A%D
  62 RAND USR VAL "24267"
  65 CLS 
  70 PRINT "***%M%E%M%O%T%E%X%T% %+% %U%P%D% %S%T%O%R%E%D**%V%3%C-%J*";TAB PI;" MEMORY USE: A870H-C6B7H"
  71 PRINT ,,"=====%A%D%D%I%T%I%O%N%A%L% %F%U%N%C%T%I%O%N%S%:======"
  72 PRINT """CDD""- CHANGE ""DATE 1/2"" DATA   ""QIT""- RETURN TO BASIC WARM BOOT""EOS""- GOTO EXATRON O.S. MENU   ""DSP""- INCLUDES FUNCTIONS SCREEN         AND MEMORY MONITOR"
  80 PRINT ,,TAB 7;"%T%O% %S%T%A%R%T% %M%E%M%O%T%E%X%T%:",,," RAND USR 46657 - USES  ALL  YOUR";TAB 8;"AVAILABLE RAM, OR "," RAND USR 43851 - PRESERVE RAMTOPRAND USR 46555-RESTART AFTER QIT"
  82 PRINT ,," OPTIONAL ""HELP"" FILE AVAILABLE   PRESS ""H"" FROM EXTENDED MODE"
  85 SLOW 
  90 GOSUB VAL "2000"
  99 REM %F%U%N%C%T%I%O%N%S% %S%C%R%E%E%N
 100 RAND USR VAL "24313"
 110 PRINT AT O,3;"%M%E%M%O%T%E%X%T% %F%U%N%C%T%I%O%N% %C%O%M%M%A%N%D%S"
 115 POKE VAL "16418",O
 120 PRINT AT VAL "22",O;"""Z"" TO COPY, ""S"" TO BACKUP SAVE "
 140 POKE VAL "16418",2
 145 IF INKEY$<>"" THEN GOTO VAL "145"
 150 IF INKEY$="" THEN GOTO 150
 160 IF INKEY$="S" THEN GOTO O
 170 IF INKEY$="Z" THEN GOTO VAL "200"
 180 GOTO VAL "400"
 200 FAST 
 205 RAND USR VAL "45965"
 210 PRINT AT O,NOT O;"==";TAB VAL "29";"==";AT VAL "16",NOT O;"==";TAB VAL "29";"==  --";TAB VAL "28";"---";TAB VAL "8";"--";TAB VAL "21";"--";AT VAL "21",O;"(%M%E%M%O%T%E%X%T% %P%G%M (C) %M%E%M%O%T%E%C%H% %I%N%C% )"
 220 FOR A=O TO VAL "21"
 230 PRINT AT A,O;"(";TAB 31;")"
 240 NEXT A
 250 RAND USR VAL "45159" AND USR VAL "45965"
 260 SLOW 
 270 GOTO VAL "100"
 300 PRINT "*****%N%O% %R%A%M% %I%N% %3%2%-%6%4%K% %R%E%G%I%O%N****",,"ENABLE 32 - 64K RAM, THEN ",,,"PRESS ANY KEY TO CONTINUE."
 310 PAUSE Q
 320 CLS 
 330 GOTO VAL "30"
 400 CLS 
 405 POKE VAL "43118",O
 406 POKE VAL "43119",VAL "250"
 410 PRINT "LOAD ""HELP"" FILE? Y / N"
 420 IF INKEY$="" THEN GOTO 420
 430 IF INKEY$="Y" THEN LOAD "HELP%1"
 470 RAND USR VAL "46657"
 480 STOP 
 500 CLS 
 510 PRINT "NOW TO ""CUSTOMIZE"" MEMOTEXT AND     U.P.D. FOR YOUR SYSTEM:",,,
 610 PRINT "SELECT YOUR C.P. INTERFACE:",,,"1. MEMOTECH",,"2. AERCO",,"3. BYTE-BACK",,"4. TASMAN",,"5. OLIGER",,"6. EPROM SERVICES","7. OTHER"
 620 INPUT IF
 630 IF IF<NOT O OR IF>VAL "7" THEN GOTO VAL "620"
 650 DIM I$(VAL "7",VAL "76")
 660 IF IF=VAL "7" THEN GOTO VAL "670"
 661 LET I$(VAL "1")="MTECH F5DB3F0F38FBF1DB2FC9"
 662 LET I$(VAL "2")="AERCO F5DB7FCB6720FAF1D37F0000DB7FC9"
 663 LET I$(VAL "3")="BTBCK F5DB1FCB7F28FAF1D31F0000DB1FC9"
 664 LET I$(VAL "4")="TASMN F5DBBFCB4720FAAFD3FB3DD37BD3FBF1D37B3EF7D3FB3EFFD3FBC9"
 665 LET I$(VAL "5")="OLIGR F53AFFFFFE1820F9F132FFFFC9"
 666 LET I$(VAL "6")="E-SRV F5DB9B1738FBF1D38BAFD3BB3CD3BBDB9B17300517300218F6C93E88D3BB3E01D3BBC9"
 669 GOTO VAL "700"
 670 PRINT " INPUT TYPE? ( TO 5 CHAR."
 678 INPUT I$(IF)( TO 5)
 680 PRINT " INPUT CODE TO SEND A CHARACTER:"
 690 INPUT I$(IF)(7 TO )
 692 PRINT ,,I$(IF),,"OK?"
 695 IF INKEY$="Y" THEN GOTO VAL "700"
 697 IF INKEY$="N" THEN GOTO VAL "670"
 699 GOTO 695
 700 FAST 
 705 FOR A=NOT O TO VAL "5"
 710 POKE A+22945,CODE I$(IF,A)
 720 NEXT A
 725 LET I$(IF,75 TO )="C9"
 730 LET AD=VAL "18502"
 740 FOR A=7 TO 75 STEP 2
 750 LET I=(CODE I$(IF,A)-28)*16+CODE I$(IF,A+1)-28
 755 IF I<O THEN LET I=O
 760 POKE AD,I
 770 LET AD=AD+NOT O
 780 NEXT A
 790 SLOW 
 800 PRINT AT VAL "18",O;"DO YOU WISH TO INPUT CUSTOMIZED GRAPHICS CHARACTERS FOR U.P.D.?"
 810 IF INKEY$="N" THEN GOTO VAL "1000"
 820 IF INKEY$<>"Y" THEN GOTO 810
 830 SCROLL 
 840 PRINT AT VAL "20",NOT O;"CODE CHR$ ","PRESENT  NEW ";TAB VAL "18";"VAL    VAL "
 850 SCROLL 
 855 LET AD=VAL "22546"
 860 FOR A=NOT O TO VAL "138"
 865 IF A=VAL "11" THEN LET AD=AD-VAL "64"
 870 IF A=VAL "11" THEN LET A=VAL "128"
 880 SCROLL 
 890 PRINT TAB 2;A;TAB 6;CHR$ A;TAB 19;PEEK (AD+A);TAB 26;"?"
 900 INPUT I
 910 PRINT AT VAL "21",VAL "26";I
 920 POKE (AD+A),I
 930 NEXT A
 940 SCROLL 
 950 PRINT " OK?"
 960 IF INKEY$="N" THEN GOTO VAL "830"
 970 IF INKEY$<>"Y" THEN GOTO 960
 1000 SCROLL 
 1010 SCROLL 
 1015 POKE VAL "20053",VAL "168"
 1020 PRINT "ARE YOU USING A+J EXATRON DRIVE?"
 1030 IF INKEY$="" THEN GOTO 1030
 1040 IF INKEY$="Y" THEN POKE VAL "20053",VAL "164"
 1050 FAST 
 1060 CLS 
 1070 PRINT "% %U%N%I%V%E%R%S%A%L% %B%A%S%I%C% %P%R%I%N%T%E%R% %D%R%I%V%E%R%  IS NOW CONFIGURED FOR ";I$(IF)( TO VAL "5");" IF ",,TAB VAL "5";"USR CALLS FROM BASIC:",TAB VAL "5";"''''''''''''''''''''''''''''''''''''''''''"," COPY SCREEN: RAND USR 45159","PARTIAL COPY : RAND (NO. LINES)","  THEN RAND USR 45182",,," LLIST PROGRAM: LIST (LINE NO.)","  THEN RAND USR 45193",,," LPRINT : RAND CODE ""(STRING)""","  THEN RAND USR ",," 45441 - REVERSE CASES LIKE M/T"," 45446 - INVERSE = LOWER CASE"," 45451 - SEND ASCII CODE DIRECT" 
 1080 PRINT "CHR$ 118 SENDS A LINE-FEED ",,,"%C%O%P%Y AND %L%L%I%S%T-INVERSE CHARACTERPRINTED AS LOWER CASE; %L%P%R%I%N%T - CASES SELECTED BY USR CALL."
 1082 RAND USR VAL "24267"
 1085 SLOW 
 1090 GOSUB VAL "2000"
 1100 GOTO VAL "60"
 2000 POKE VAL "16418",O
 2010 PRINT AT VAL "23",O;"% %P%R%E%S%S% %"%Z%"% %T%O% %C%O%P%Y%:% %"%C%"% %T%O% %C%O%N%T% "
 2020 IF INKEY$="Z" THEN RAND USR VAL "3875" AND USR VAL "45159"
 2025 SLOW 
 2030 IF INKEY$="C" THEN RETURN 
 2040 GOTO 2020
 9000 CLS 
 9010 PRINT "%L%O%A%D% %C%H%E%C%K% %F%A%I%L%E%D%-% %W%I%N%D% %T%A%P%E% %T%O% %A%N%O%T%H%E%R% %C%O%P%Y%,% %T%R%Y% %A% %D%I%F%F%E%R%E%N%T% % % %V%O%L%U%M%E% %S%E%T%T%I%N%G%,%A%N%Y% %K%E%Y% %T%O% %R%E%L%O%A%D"
 9020 PAUSE Q
 9030 LOAD "MEMOTEX%T"

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

People

No people associated with this content.

Scroll to Top