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 25RAND USR VAL "24267"(5E4BH) — initialisation/upload, lines 62 and 1082RAND USR VAL "24313"(5E79H) — functions screen renderer, line 100RAND USR VAL "45965"(B38DH) — display/border routine, lines 205 and 250RAND USR VAL "45159"(B067H) — full screen copy to printer, lines 250, 2020RAND USR VAL "45182"(B07EH) — partial screen copyRAND USR VAL "45193"(B089H) — LLISTRAND USR VAL "45441",45446,45451— LPRINT with case-selection variantsRAND USR VAL "43851"(AB4BH) — preserve-RAMTOP startRAND USR VAL "46657"(B641H) — full-RAM startRAND USR VAL "46555"(B5DBH) — restart after QITRAND 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 inGO TO,GO SUB,POKE, andFORtargets — conserves memory by storing the number as a short string rather than a five-byte floating-point constant.NOT PIfor the constant 0 —PIis non-zero soNOT PIevaluates to 0, saving bytes versus the literal0.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
IFis 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 TOa REM executes the next line, so this effectively jumps to line 1 — a deliberate shortcut to restart. - Line 53 uses
IF INKEY$="S" THEN RUNafterPAUSE Qwithout a precedingPAUSE 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
Source Code
0 REM E54F21C046 6 A7E3C28 C7ABE30 37E817723232318F047A77921BF46ED425D 9E56A54EBED524D19D1EDB847AF121B10FCE1C97A93D511E446EB66EBCD70A8D1C97BA7C87A93C8CB3F4F833C5F3C32E74679A7C8D516 0CD70A8D1C9E526C0CB7F28 2D6406F7EE1CD34B0C9E5F5E67FFE1C38 5F1C68018E4F118E1 0E5C5D521C0467EFEFF2831BB202E235E2356EB7E23FE 138FA2813D61C87878787477E23D61C38FA80CDD9A818E521C346 11E 011C046EDB0D118C6D1C1E1C932E246E5D521 04611 047 1 0 1EDB0D1E1C93AE146A7C821 047 1 0 111 046EDB03AE246A7C821E546347E6F3616C93AFF4332EA462142 122E84621 63C22EB4621ED46AF 6 C772310FC2AFA4322EE46AF 6E621 046772310FC2EC03D 621772310FC2AE84622E6463AFD4332F846C9 0 03AE7463D32E4463C93D0ED443C47 E 026466B7E2BA720 1 C10F82379A7CAA4A87A9347B97B3015 0 048 03AED46CB477B28 87E23A720FB10F97D416F7E2BA720FB78 D28 D 4 C26FF 5249130FB7C2646 DD5C555CD70A8C1D179A720DEC9 0 0ED5BE5467BA7282192281E3AE346A728 5CDA4A818133AF046A728 5CDB2A818 83AF846FE3ECCA3A94211 046CDEEA8131ACDCDA810F63E DCD45AAC381A9CD8DB3CD46 FD8AF184A 0 032F84647C5CD 6AAC12AEC462422EC467CBD28 A 520 2A7C9CD45AA18EB26 022EC463AEB46A7C847CD45AA10FBAFC9CD54AAC021EA46343AFE43FE3820113E18 13536CDC4B4B83EA4CAF5B8C42A A2AF2467CA7C8E521E14611 044 119 0EDB02142 122E64622E84621 0 122F04622F546E122EE46AFC9 0CD5FA9CD89AACD94B122EE467E23ED5BE5461646FEFE38123AF546A73E64CA51AAAF32F5462AF64618DFFE 1283830 B1AA728D532E146AFCD2EA94F7BA720 53AE7465F1D3AE646BB28111379127B32E54679FE163E 0CCA1AB18ADCD41A93E 1CD81AA18A07E23 1D5AAC5E52120C1BE232328 4232318F74E2346E1C5C92A 440C344B67ED61CD8FE A3FD8C547237ED61C38 BD6 A30 723 4C6 A10FC4778C1A7C9D5E5CD51ABD130 3EBD1C9ED52EB191D28F7577ED61C3F3015FE A30115F7AFE143F38 A878787828283A723D1C97AD1C922EE46C32EA97B11E346EB36 12377EBC9CD51AB30 23E 1A728FBF53E3322EE4632F846F1C1C32DAB3E6418EECD51AB4F3AED46B9D07932EC46C9CD51AB32EB46C93AE646477B3C3C4FCD51AB3CB938 14F7AB9D83AE746B9D07932E746 0 0 0 03D32E546C93AE84647CD51AB3CB828 1D032E9464F3AE646B9D87BA728DA3CB938D6C93AE946473AE7464FCD70ABB838 332E846B9D8BBD832E646C93AF146A7281FE13E3332F8463E 1CD81AA3AED4621 04411E146 132 0EDB032ED46C3D2AA22F2467E233D20FB7E23FE2D20F53AED46A7C0B3C03AC0463CC0E12ED2E5C3A1AA 022EE463AF046EE 132F0462810CDE2B3ED5BE5465AED53E546C1C32BABED5BE546CDB2A8ED53E5463AE746BAC8D818E4E57E233D20FB237EA72816EBC121BF46237E23233C20F9702B712B3AE54677EBC93AE646BB20E4E1C1AFC32BABEB21 0457E23BB20 47EBA28 523232318F2237E23666FEB7E23FE1F38 67E23FE1C30FA22F646EB3E 132F546C9 03AEA46112144EB36FF2B361C2B361B2B361B34D66430FBC6642334D6 A30FBC6 A2386772B2B3E1CBE20 523BE20 123EB18C2ED5BE5467BBAC83E16C32EA923EB2AF84337ED52EBD0E1C3 7 2CDE7 2CD67AD18FB E 1 6 03E7FDBFED3FF1F30481717382710F1F13E 3BA303C215344CD67ADCB7A7920 3BE20D4231730F12AF64350CD67AD71CD51AD18F6D51E94 61A1DDBFE17CB7B7B38F510F5D120 4FE5630B33FCB1130AEC9CD 7 23EA6C3 FB0 03A9943FE2620 A21 0487E3C3EA5C2D6B5CD18B6FE2628 8CDD7B83E8BC2D6B5131AA720FB1B1AC680123A994332534421C84422F64321CA4422F843CD5FAD2A 44025ED5B9643D5ED52ED5BC844ED523E89DAD6B5E122F6431922F84316BECD5FAD2AF84322964336FFC3DBB5 05E37CB13C89FE6 5C6 44FD3FF 62310FECD46 F30 C 61E10FE D20EEA710FD18E0CD 7 23EA6C3D6B5CDE7 221534411CB BCD46 F30EA10FE1B7AB320F4CD33AECB7E2328F82AF643CD33AECD51AD18F83A9943FE2620 93A 0483C3E8CCAD6B521C84422F643232322F843CD18B6FE2620 911 048D52A96431811CDD7B83E8CCAD6B579E5234E2346 9D1D5E5ED5222C84421534477AF23BE20FC2BCBFECD5DAE3E3F325344E122F843E122F643CD5DAEC3DBB5 07E23FE1DC8FE1EC8FE3528 BFE2928 73EA7CD92B437C97EFE1A20 43EA818F22B 6 A237EFE1AC8FE1C38F0FE4030EC10F118E8 6 07E23A728FB3D20 C7EFE3A28163EA9CD92B437C9D61B30 43EAA18F3 4FE1038DF18F5CB40C83EAB18E5AF32F2432AEB43 115 0 9E5E1237E3C2867FE 220F7E5237EEB 6 E2120C1BE2328 923232310F73EAC18577EEBA728DB23FE 82010CD70AB473EAD384578A73EAE283F18C6FE 120 5CD51AB18EAFE 220 7CD51AB30B418DFFE4038 721F243AE7718A7FE2020 7CDEAAE3818189ECD1EAF3811C1E518953AF243A7CADBB5E53EAFCD92B4E12BC35DB7 0 0 0 021 0487E3C3EB0CAD6B57E234E2346545D 9E5FE293E1328 13DCD92B4218340 1 9 0EB23EDB03EA0 13338CDC4B4B8CADBB5E118CD2A964336FFC3D6B5EDA078B1C8CB7628F77EFEC020 13DCBB7121323 B3E76121318E718E3F5DB3F F38FBF1DB2FC9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0C93A9E43FD9634FE183FD09F329C43A7C916182A C40237EFE7628 5CDDDA818F5CD8DB31520EFC9ED4B324079FE19D05718E02A A40CDD8 97EFE76C846234E23E5C5E111E8 3CDBBB01164 0CDBBB011 A 0CDBBB011 1 0CDBBB0AF32 940CDDDA818 FAFED5238 33C18F919C630CD34B0C9E15E2356231B7AB320 ACD8DB3CD46 FD02318B17EFE7E20 C23232323231B1B1B1B1B18DFF5E67FFE4030 BF1CDDDA83E 132 94018CD3A 940A728 9AF32 940CDDDA818 43C32 940F1CD75 9 AF5E67FFE F20 23E92CDDDA8 3F1FE8038EDAF32 940CDDDA8189AED4B324079C6A047ED5B1040EB7EB82816C68020 2CF 1B828 7C5CDF2 9C118EB235E235618 D235E2356231B4623231B1B10FA237AB320 4CD8DB3C97EFE7620 5CD8DB318 3CDCDA81B18E721CDA818 821DDA818 32134B0227CB118A1 02AEE46CD23 FC34EB0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0119E4021E0C3 1D6 2EDB0ED5B96432A 44025252323AFED52CD9AB2C3D9AF 0E5 116 1CDF5 8E1E51E 3 1F0D8CDE1 7CDAD AC9 021D9C9228AB33E 0328CB3CD2A ACD2B FC9 0 0E5D5C5F521D9C9 1 019 0 07E814F2310FAFE362068CD50B32A C40E52A8AB3 011 05D 118 3EDB021 05D367622 C403E 8 6FF10FE3D20F9CD46 F3038CDBB 21121 07DFEEF28 218EE7CFEDF28 6FEEF28 D18E3CD48B3FEC028DC3C1918 DCD48B3FE 028D13DF5AFED52F1328CB3228AB318AAE122 C40CD50B3F1C1D1C9 0 03A8CB32A8AB3C9 021C0C611 05D 119 37EF51A77F1122313 B78B1C818F22A964323CD9D14C313 43E 521A543CD26B63E 621C643CD26B6C9CD71B3C3DBB5 0 0D9C9 03E DCD34B03E ACD34B0C921 0307EFEC32027237EFE112021237EFE3A201BCD23 F2A964323CD9D14FD362E 021DBB5227B40217B4022 240C31B333EB1CD92B4C3DEB5 0CDAD14E5D113 1 01036 0EDB0C9 0 07BA7C0C13AE74632E546C99628 4FEFE38 4C1C3 0B43A3440777B3CC9FFCDBB 2E5CB84ED4B9B43A7ED42D1219D433A34402015C6 6CB4620 2C61823961730DD2BCBC63A344018 2CB8623CDEDB3424BC5CB80ED439B43C128C3C5CB80CD5AB9C1505ED5CBC0CDBD 7D17E219D43CB4E202CCB42C0CDCE1430 3C680C9A7C8D61CFE 1C8FE 3C87BFE1AC8FE77C8FE7920 3CBCEC9FE703884FE743080C97BFE7928 9FE1B30F417CB1A3F1FCB8EC9C5E5D5CD7EB6218E40CB7F28 1 9412B36 010FBE63FEB472160C13E76BE2320FC10FA7EFE7628 4EDA018F7D1E1C1AF3DC9CD92B4E5D5219D4336 0C5CD 0B4C1B828 3B920F0D1E1C9F53E73 6 09528 74F545D23EDB02B70F1C9215444ED5BE943 120 0EDB0C9115454ED539F43CDEEB4CD 0B421FEB4E5ED5B9F4326446B473AE8434F78FE7220 C7BFE54C81D462B7E702377C9FE7320 77BBAC81C2318EEFE7720 D7BFE54C81D152BD5CDDCB4D1C9FE762010 D28 7CDDCB4D1C3EEB47AFE54C818F3CB4928 A DFE7920117EEE8877C9AF329D434F78FE1CD8FE40D0CB7728 5CB41C018D0A720147BFE54C8BA28 8231C7EA728961D2B2B7EA7C823FE 3C830 2B9C03E73BAC8141CD55F5470239528 74F6B2B 6 0EDB83E 812D1C9 6 126 621E8437021544322E94324E5 1 01F36 8237110FCCD92B4CDFBB4E1C9 0CD92B418 3CDB0B2ED7B 4403E 3CDB4B51180C0 617 E 32E541ABE132328 C7B813C5F10F03E8418D6 0 0 D20EBEB4E2346C5 1 3 0119A432B2BEDB8C32A A 0CD2A A3E 2CDB4B53A9943EBC9 0E5CDB5B5D1 120 0EDB0 6201B1AA720 710F93EFF12C9131318F8216EA422 440F9CD23 F217D4022 C40 61936762310FB221040CD9A14CDD2B3CD2A ACD2B F3E 7 176 0CDC4B4CD71B3C3A2B9 0 0 0 0 0 0 0 0 0F5CD2B F 110 0F1C92AA3437E3C28 AFEC120 135CBB62318F221C040 E16AF 620772310FC367623 D20F4C3A8B8 01614CD20BE1520FAC360B7EB2123413E 6 1432036 02310FB 93D20F4EBC92AA343 E1518 EFEFF2834FEC020 13DCBB77718 916 0 61F7ECB7720E9A720 2545D2310F3EB7CA720 6EB8620 12B2BCBF67E3C20 236C023AF D20D72B23EB2A9F43ED5238 8CD20BEEB E 118C5 CC5193C20 11BA7EBED52444D2AA343C5EBD92A9B43ED4B2540ED42D9C457B0ED52444D21C040EBCD19B03AEF431213C1CD19B0EBC1367623 D20FAC932E843CD8CB82AA343229F433E 832EF43CDCDB6CD 0B4216BB7E52A9F43ED5BA343A7ED52444D19FE76C8FE7920 93AEF43EE8832EF43C9FE77201578B1C813ED53A343 B78B1C82B545D2BEDB8 0 0C9FE7220 B78B1CC 5B9C82B229F43C9FE7320 97EFEFFC823229F43C9FE70202678B120 BCD 5B9C82AA343229F43C92B7E BCB7728EA78B128 82B7E BCB7728F523229F43C9FE7120 B7E23FEFFC8CB7728F718EDA7201478B1C82B7EA7C8FE40C8237EFE4028D9A728D6AFFE 120 83AE843FE 3C03E 1FE 3203632EF43CDCDB6CD 0B4FE 320 63E 832EF43C9FE3628 9473AE843FE 228E478 6 721 0C1BE2328 6232310F818D44E2346E1C518D7CD38B91BED53A3436778B17C28 5626B23EDB01218C1CD87B63AE84318 CCD18B6CDD7B8C03E8CC3D6B5 FD0C34AAF22A143ED5B9643D5EBA7ED52444DED5B 44015E1EDB8EB2322A343C92A 44025ED5BA343A7ED5223444D2AA14323EBEDB02A9643EB2B229643ED52EB2AEB43234E2346EB 9EB722B73C9 021 048 E 94F7E3CC879BE234E234620F34F23CD40BC2B2B7920F12BA7C92AF84322964336FFF5CD2A AF1C3D6B5E52AA1437E3C2827E5 1 0 0 42B7E3CFE 230 448A728 978FE1F20EFAFB928F3473CE11BEDB813ED53A34322A143E1C9A7C9F52AA143EBA7ED527C19EB268AA728 5253D28 125F16F7CCD92B47CFE8A7DD8E1C9CBC03EFEB828 8 738FAE1C1C3 0B4CB803EFEB9CABD 7 738F918EECD7BB822EB433E93CD92B4CD8DB91E93 E 9EDB0C35AB73E12CD92B4118340232323 1 9 0EDB03E 3C937 021 04836FF229643C3DBB5CD18B6CDD7B83E8BC2D6B571E52336152336 023 1 9 0EBEDB0EBD12323C9E5CD2A A 6 03E10CDB8B5D1 1 9 0EDB0C9CDADB9D52B2BCDCCB9 DEB7123712371229643E11885CD7BB8232323E53E14CDB4B518D5CDADB92B2BE5 E36 9 570237023702296433E421312D13E DCD92B4 11D 621844071C5D53E88CDB4B5D1 1 9 0EDB0C1 C10EBC3DBB5CD7BB8 1 C 0 9EB18D622F0437EFEFF3E8ECA92B4114341 6 6C5 620AF1B1210FC E837EFEFE28 4EDA018F723EB 9EBC110E6C97E3CC8545D 6 67E23FEFE20FA10F87CA77EEBC9CD6EBAC8E52A9643ED5223444DE1E5CDBAB8E17CA7C922EB43 1 C 0 9E5CD2A AE13E 611 241 1 9 0EDB0 E5AEB 9EB3D20F323C9F323CD43BA3E FCD92B421BDBAE5219D4336 0CD 0B4FE2638F4FE2A3813FE2B28 FFE3328 BFE3528 7FE3620E0C3DBB5218540773E88CD92B47E2AF043FE332013CD6EBAEB3E8ECA92B47E3C3E8ECA92B4C343BAFE2B20 A 143 02AEB43 9C343BAFE3520162B7E3C3E8ECA92B4 6 62B7EFEFE38FA10F823C343BAFE2920 ECDB9B6CD82BA2B7E3C20E32318EBE5472A 4402525ED5B9643ED523E8AE1DA92B478FE2620 ACD82BA3E8ECA92B418 BFE27CCB9B6CD6EBA28 1EB3E 332E84322F04321234122E9433E 81154441213 11F 0EDB01B2154741A1B25A728FAEBCDFEB4FE762821 163 02AE943FE707D20 CFE2320 3217543A7ED4218C8FE1220 321C040 918BE E 621314311FF443EFE121B 61F2B7EA720 510F92B18 77948 6 0EDB84F79 E43A7ED424F D20DF7B2F4F2A9643E5E5 9229643EBE1ED4BF043ED42444D 3E1EDB821FF444FEDB84F2AEB43235E2356EB 9EB722B73C921544422EB43CD7BB8E5234E2346 9EBE1CD86BAC3DBB5CDF4B9C3DBB5CDF4B9EBCDCCB9C3DBB5E5D5 6 91AFE1C30 3AF 6 1BE20 4231310F1D1E1C911 0452AFA43ED53F6437E233CC8FE 220F87EFE3820F32318 FEB2AF6437323722371237023EB18DD 07E1170BCD5 1A543FE1DC8 EC6FE1EC8E523FE292034ED5BF2437AA7282C 0 E 6EBCD40BC28 E79 1 9 0 94F D20F23E99C3F5B83E 691ED4BF44357E1A7C8 A 3FEFE20FA1520F7C93E16CD92B4E1E5118440237EFE1C38 4121318F62A96437E363522EB432336 32336 02377237723772296432BE52B3E 2CD5AB7C1E1C93D 6 2CDB8B57E3D20 B2E72 11E 07EA72B28 B3D3E9D20E816452E55 DC9 D20ED18F0 6 126 2C5CD87B6CD2A A3E1CCD 2BD28FB58EDB03EFF12CD2A AC1 520 E3E1ECD 2BD1E2028 2EDB03EFF127832FC43CD2A ACDE7 22AEB43 115 0 9EB21 045131AFEFF20 9CD 7 22AEB43C37CB9BE20EED5237E3C28 5131ABE28F6E120DCE52BCD8CB8229F43EBCD 5B93AFC43C61FCD92B4CD 7 2CDCDB6AF329D43CD 0B4FE332824FE3820162AEB43CD8DB932E843D1C36EB7CD7BB8CD98BAC3BABAFE2A20D73AFC43A720D1F5CDE7 2CD87B6F1D1FE332887D5EB2BCD8CB811 0451A13233C20FA2B1E1F474F131A C3C20FA1B D28 72B 0EBEDB813EB22A343CD87B6D1C364BD 614ED5BA343C5CD 5B9C110F9ED539F43C36BB72AA343ED4BA1437E3C28103D23 3 2CB7728F43DFEBF28 2D63F 222A343ED43A143C9372A9F43ED5BA343ED4BA143ED52 9E5ED73F043CD87B62AEB43 116 0 97E233C20 D3EA2ED7BF043E1CD92B4C35DB7FE 220EA7E3D20E6E5 4CB482328DFE1D1C1C523ED42 93018A723ED52E56069C1ED42E5 9E56069C1192B2B2B2BD518102B2B2BC5EB2BED42 923EB3EA138B5E5ED5228AEE5D92A 44025ED5B9643C1ED52ED423E89D9389CE5D56069CD8CB8ED5BA143E1C1C52313EDB01BED53A143CD87B6C1E1C5CD8CB8C1 9232322A3432AA1432B2B22A143CD87B6E1C1C35DB7CD7BB8 1 C 0 9E5 E A 922FA432A964322F84321 04536 02310FBCD2A A3E17 13828CDC4B432FE433E11 13E33CDC4B432FD43CDDEBFE1E57EA73E2E28183E15CD92B4AF329D43CD 0B4FE2E28 8FE3828 4FE2620ED32FC4326 0D1FE2E28 E3E29CDD7B83E9BCAD6B5 1 C 0 922F243 E37 922F4433AFC43FE2E2839F52AF4437E3C3E8ECAF5B8F1FE38201ACD43BA2AF243CDA4BA3E1A 13835CDC4B4F5CD2A AF1FE3828182AF443119F407EFEFE30 4EDA018F7CD56BCCD2A ACDCCAA2AF84322964336FF3AFC43FE2ECADBB52AF443CD6EBAEB189B3E23CDB4B5CD70AB473E8438F57832FF43C9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 020202020202020202020202223243A3F28293E3C3D2B2D2A2F3B2C2E303132333435363738396162636465666768696A6B6C6D6E6F707172737475767778797A20202020202020202020207C252660217B7D7E5F5B405D7F5C5E2720303132333435363738394142434445464748494A4B4C4D4E4F505152535455565758595A28392BDEB926392B76B928292B 2BA26292B39BA32292BBDBD29392B19BC29292B19BC37392B36BC37292B30BC35392B 3BF31392BC5AD31292BC5AD31262BC5AD38392B85AE38292B85AE38262B85AE2938357AB2362E3967B328292982B32A343898B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3673B870 CBE71AEB62A25BD2B26BD3244BE2DC4B2 0 0 0 0 0 0 0 0 0 0 026 1E3AB27 2DCAB2E 2 8AC31 0B2AB33 1CEAB35 0CAAB37 0A7AB3C 826AC2D403FAC288086AC3A 4B6AC3820E3AC3F 012AD16 045AD 0 0 0 0 0 0 0 076393434 03134332C763326322A F762B3A3328392E3433 F762E333B26312E29762926392A 01D762926392A 01E7632392A282D 03B1F2A262776 076382D343739 0342B 0383526282A76B4BAB980B4AB80B8B5A6A8AA762631372A26293E 02A3D2E38393876333439 035372A382A3339762B2E2A3129 0 F F763334 03234372A 0372A2838762628392E3433 0 F76292639262B2E312A 03326322A F762F3A38392E2B3E 0BE18B3 F76392A3D391676292639261676332A3C 03326322A F76A6313118B82A3118AE33353A39 F762E33353A3976B82E332C312A18A8343339 F76B5372E3339 035262C2A18B63A2E39 F762B2E2A3129 0322E38322639282D76B5372E333918B8302E35 F76292639262B2E312A 0322E38382E332C76382A2637282D 03839372E332C F76 1322E38382E332C762A3D282D26332C2A 03839372E332C F76AA3D1B18B32A3D3918B8393435 F76B32A3D3918B8393435 F7632343B2A 02E33 0272A393C2A2A3376 1 1 0322E38382E332C763839263739 035262C2A F7635372E3339 038393435352A29762B2E312A38 02A3D2E383976A7B7AAA6B098AAB7B7B4B776333439 01D1A1E1A351A2976383E3339263D 03C3734332C763334 0 13A 02639 02A332976333439 02D2A3D762D26312B 0333A32272A37763A333033343C33 028343232263329763334 0333A32272A37763F2A3734 02E333B26312E2976 12D18 128 038392E3131 034352A33762A3329 0372A26282D2A29762A382B 03438 02627382A333976 0 0 0 0 0 076 0 0 0 0 0 0 0 076 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 076 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 076 7 3 3 3 3A6BBA6AEB1A6A7B1AA80B2AAB2B4B7BE94 3 3 3 3 3 3 3 3 38476 528292B1828392B 016 028372A26392A 026 0332A3C 02B2E312A 0 0 08576 529292B1829392B 016 0292A312A392A 0103C2E352A11 026 02B2E312A8576 537292B1837392B 016 0372A3326322A 026 02B2E312A 0 0 0 0 0 0 08576 531292B1831392B 016 031342629 026 02B2E312A 0 0 0 0 0 0 0 0 08576 538292B1838392B 016 038263B2A 026 02B2E312A 0 0 0 0 0 0 0 0 08576 538262B1831262B 016 038263B2A1831342629 0263131 02B2E312A38 08576 526292B 016 0282D26332C2A 029263926 02B2E2A3129 03326322A38 08576 532292B 016 032262E3339262E33 010282D26332C2A11 029263926 0 08576 526392B 016 026322A3329 0102A292E3911 0392A3D39 02B2E312A 0 08576 535392B 016 035372E3339 0343A39 026 0392A3D39 02B2E312A 0 0 08576 5293835 016 0292E383531263E 02B2E312A38 015 02B372A2A 0322A328576 5362E39 016 0372A393A3733 03934 02726382E28 0 0 0 0 0 0 0 0 08576 52A3438 016 02C34 03934 02A3D2639373433 0341838 0322A333A 0 08576 5 0B7AAB9BAB7B380B9B480B2AAB2B4B9AABDB980ABB7B4B280AAB8AB8E 08576 5 035372A3838 0211A 031 010312A39111A 0392D2A33 02A33392A37 08576 7 3 3A9A6B9A680ABAEB1AA80A6A8B9AEB4B3B88090B694B6BAAEB991 3 38476 5 7 32628392E343338 03934 0283A37372A3339 0372A28343729 3 3848576 5261426322A332983832814293A35312E2826392A83832914292A312A392A8576 527 014 028372A26392A 026 0332A3C 02731263330 0372A28343729 08576 5331A351A2B14332A3D391A35372A3B2E343A381A2B2E373839 02B2E312A8576 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 37676 0 1481E1170A8218240EDB0C9 0 02A1040117D40A7ED52EB 1 0 0A77E894F38 7231B7AB3C818F3 418F6 0 0 0 1D6 2ED5B C4021E0C3EDB0C9
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.



