--- title: "MemoText V3C-J" id: 56699 type: "computer_media" slug: "memotext-v3c-j" url: "http://localhost/computer_media/memotext-v3c-j/" markdown_url: "http://localhost/computer_media/memotext-v3c-j.md" published_at: "2024-09-22T23:31:48+00:00" modified_at: "2026-04-03T07:58:56+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2024/09/MT0.jpeg" excerpt: "A full word-processor loader that verifies its own machine-code checksum, configures six printer interfaces by name, and patches line-feed behaviour before handing control to a Z80 editor engine." 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: "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/" genre: - name: "Word Processor" slug: "word-processor" taxonomy: "genre" url: "http://localhost/type/word-processor/" media_type: "Program" download_url: "https://archive.org/download/timex-sinclair-software-archive/MemoText%20V3C-J%20%281983%29%28Memotech%29%28TS1000%29%28US%29%28Program%29.zip" mediadate: "1983" images: - url: "http://localhost/wp-content/uploads/2024/09/MT0.jpeg" - url: "http://localhost/wp-content/uploads/2024/09/MT1.jpeg" - url: "http://localhost/wp-content/uploads/2024/09/MT2.jpeg" - url: "http://localhost/wp-content/uploads/2024/09/Tape-15.jpg" related_products: - id: 22405 title: "Memotext (RAM-based)" type: "product" url: "http://localhost/product/memotext-ram-based/" media_type_tags: "Word Processor" --- 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 value | Interface name | String label | | --- | --- | --- | | 1 | Memotech | MTECH | | 2 | AERCO | AERCO | | 3 | Byte-Back | BTBCK | | 4 | Tasman | TASMN | | 5 | Oliger | OLIGR | | 6 | Eprom Services | E-SRV | | 7 | User-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. ## 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 IFVAL "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"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" ```