--- title: "Speech Synthesizer" id: 56716 type: "computer_media" slug: "speech-synthesizer-2" url: "http://localhost/computer_media/speech-synthesizer-2/" markdown_url: "http://localhost/computer_media/speech-synthesizer-2.md" published_at: "2024-09-22T23:31:48+00:00" modified_at: "2026-04-03T07:58:58+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2024/09/Speech-Synthesizer.jpg" excerpt: "Hidden inside a REM statement, over 2KB of machine code drives a complete speech synthesis library — discover how BASIC and Z80 code combine to make a computer talk." 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: "Tad Painter" slug: "tad-painter" taxonomy: "post_tag" url: "http://localhost/tag/tad-painter/" - 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: "Tad Painter" slug: "tad-painter" taxonomy: "indiv" url: "http://localhost/indiv/tad-painter/" genre: - name: "Speech Synthesis" slug: "speech-synthesis" taxonomy: "genre" url: "http://localhost/type/speech-synthesis/" media_type: "Program" programmers: - name: "Tad Painter" slug: "tad-painter" taxonomy: "indiv" url: "http://localhost/indiv/tad-painter/" download_url: "https://archive.org/download/timex-sinclair-software-archive/Speech%20Synthesizer%20%281984%29%28Painter%2C%20Tad%29%28TS1000%29%28US%29%28Cassette%29.zip" mediadate: "1984" producer_company: - id: 11380 title: "Tad Painter" type: "company" url: "http://localhost/company/tad-painter/" images: - url: "http://localhost/wp-content/uploads/2024/09/Speech-Synthesizer.jpg" article_media: - id: 70376 title: "REVIEW: TS1000 Speech Synthesizer" type: "article" url: "http://localhost/article/review-ts1000-speech-synthesizer/" related_products: - id: 37597 title: "Speech Synthesizer (1000/1500)" type: "product" url: "http://localhost/product/speech-synthesizer-1000-1500/" media_type_tags: "Speech Synthesis" --- This program implements a speech synthesis library using machine code stored in a REM statement at line 11 to drive audio output. The machine code occupies a substantial block (over 2KB of hex data in the REM) and is invoked via RAND USR 16514, which jumps directly into the code embedded in the REM at that address. The BASIC portion at lines 3000–4010 provides a word-playback library: it walks a linked list of word entries stored starting at address 29999, reading 16-bit word numbers and lengths packed as little-endian pairs, then calls subroutine 4000 to speak each word via POKEs to system variables and the machine code entry point. Subroutine 4000 deposits the word number into addresses 16593–16594 and constructs a one-item list at the display file workspace pointer (read from 16636–16637) before triggering the speech routine. *** ## Program Analysis ### Program Structure The program has two distinct layers. Line 11 is a REM statement containing the entire machine code payload — more than 2,000 bytes of Z80 object code encoded as hex escape sequences. Line 12 is a short REM acting as a guard comment. The BASIC proper begins at line 3000 and is split into two subroutines: - **Lines 3000–3070:** A word-list walker that traverses a linked list of speech entries stored downward from address 29999. - **Lines 4000–4010:** A speech-trigger subroutine that POKEs the word number into system memory, sets up a one-entry list at the display file area, and fires the machine code. ### Machine Code Invocation The machine code lives inside the REM at line 11. On a ZX81/TS1000/TS2068 the BASIC line storage begins at a well-known address; `RAND USR 16514` at line 4008 jumps directly into the body of that REM, bypassing the BASIC interpreter entirely. This is the classic “REM as code store” idiom, keeping the binary in a location that survives `NEW` and is not disturbed by normal BASIC execution. ### Word-List Data Format The speech library stores its vocabulary as a downward-growing linked list anchored at address 29999. Each entry occupies at least four bytes: | Offset from WA | Size | Content | | --- | --- | --- | | 0 / −1 | 2 bytes (big-endian) | Word number (`NO`) | | −2 / −3 | 2 bytes (big-endian) | Entry length in bytes (`NL`) | | −4 … −(4+NL−1) | NL bytes | Speech data for this word | The walker at line 3050 steps backwards by `4 + NL` bytes each iteration and stops when the working address `WA` is no longer greater than `DW` (the display-file pointer, used here as a lower-bound sentinel). ### Key BASIC Idioms - **16-bit big-endian read:**`PEEK WA*256+PEEK (WA-1)` — the high byte is at the higher address, low byte one below; a common pattern when packing 16-bit values into PEEK-accessible memory from machine code. - **Integer extraction:**`INT (NO/256)` gives the high byte; `NO-(INT (NO/256)*256)` gives the low byte. Repeated in lines 4001/4002 and 4004/4005 because ZX BASIC has no bitwise operators. - **Display-file pointer as workspace base:**`DW=PEEK 16636+256*PEEK 16637` reads the system variable `D_FILE`. The four POKEs at lines 4004–4007 write a minimal one-word speech list immediately at that address before the USR call. ### System Variable Usage | Address | System Variable | Use in program | | --- | --- | --- | | 16593–16594 | — | Receives the 16-bit word number before USR call | | 16636–16637 | `D_FILE` | Read to obtain `DW`; also used as scratch list base | | 16514 | — | Entry point into machine code in REM line 11 | ### Notable Techniques - The machine code block is large enough (~2 KB) to contain a full speech synthesis engine — likely a formant or LPC codec driving the EAR/MIC port or the TS2068 sound hardware (`D3 FF` = `OUT (FF),A`, and `ED 50` = `IN D,(C)` appear near the start of the REM data, consistent with audio I/O). - The sentinel check `IF WA>DW THEN GOTO 3010` (line 3060) reuses the display-file address as a safe lower bound, ensuring the walker never strays into the BASIC system area below the display file. - `RAND USR` is used rather than `USR` in a `LET`, discarding the integer return value — a standard idiom when only the machine code’s side-effects matter. ### Potential Anomalies - Lines 4001–4005 POKE the word number into *two* separate locations (16593/16594 and `DW`/`DW-1`). This redundancy suggests the machine code may read the value from either location depending on call path, or that one location is a parameter register and the other builds the in-memory list structure. - The REM at line 12 reads `0-23(DO NOT REMOVE)`, implying the first 24 bytes of the line 11 REM are a header or jump table that must remain intact for the `USR 16514` entry point to be valid. ## Source Code ``` 11 REM CDD440F3EFE21AC44687E187CB1F161C1520FD00CB47204D3FF184ED500010E9161C1520FD2BE5D511743A7ED52D1E120D2FB100C9212F75DB21CB6F28FADB11772B7CFE4020F1C91700212F75183A7ED42562B5E2B462B4E2BE52AD140A7ED52E120EB228940A7ED4222B040ED4B8940C97430000000000007430000010170000000000000000000000606B07572000000060003FE003C00F0001FFC00677F800FFF007FFF880407FFC07FFE001FFF00FFFE87A5FFC007FFFC03F43FC011FFFE83FC3FC3001FF83FC3FE181FF9FF0FD7C0C003FFC3FF0F0E1C7FFFC3FF8787083FFFC3FF07C0F7FC787BE1F01DFF1E1E787C371F1F1F787C07FF9E1EF87807BE3C79E1E083CF8E1E78F01E3CFE78F00F1E71E78F17F1C71C70E3E73CE39C3863CE71CF7EC739C739C70338E718C6380CE398C731C2319CE6398E11CCE63198E8C67339DCE0633198C46033F9CCC470F1DCE4627073FE7231383CFB39188C01F3DCCCE6607CEE6231182F3B198CCE099EC663318213398CC6470347B1D8C4603C7B198C470E7318CE27033398C471384273198E61BC06F78C5BF6901FEC297FFC80DF30B7ED2077D842FFE901BF4217FF480DEA10BFFA404F78D7FD206F785FFF202FF844BFFA027FA4FFF90033A8FFE9003D8C1FFE900798C1FFF800A5AC1FFF9046350BFFD200F7807FFE403D081FFF908607ED7FE181FC1FE13C1887F73C0F04433F8FC7802018DC7E3C10C673F1E8E0884E7AFCBC3C387C7C38B110C2C7211C163138FC706389C7C38143838F870C7071E0E0101700800001C00701000030383800007771C000383F03C003C07CFE0F07CF803F7F07C03E1F8FC1FC038001FC0FCFC01E0680FEFE0FC0F01EFF07F7E0783E1F07F83F07FF1F83F7FC1F83F07C1FC3F83FC1F83F7E0FC3FC3FCFC1F83FFC1FE1FE07EF81F83F7F07F3F07C1F87F07FFE83F7C0F838E7E0FC7C1F03E1F7F87E3E0F83FF8FF87C7E1F03F8F87F8FCA7C3E19E1F1FE1FA1FF80787C3F87F87C3E3C3E0FC3FC1E1F03E3E1F8FBC3C3EF87C3E3EFFF81E1E3E1E38F87C1E1E1E1E3C787C3C3C3C3CFFF87878F87AE3C3EE3C3C3C70F0F821F1E1E38FF801F1E1F78F0F881E1C3E71EF143C7879C3C3E187FF38F07830E3C3CE3C1E1C3878F18F785E1E3D43C1E1C3878F90F0F0A0E3C3E8783C3878F1F61E1EE1C387FFF7871E3FC383C1C3878FE1E1E078E3C3C878783C38F0FE1E1E7C3C7FFF1E71E1E7C3C0E38F1FE1C3C87087E31E1C0F187F11E1C383878F8F0E38383C38870F1873C3C4787377C3E0787EEF87C0F0F81E3E1E3C3C010E1E03C3C20387EA5117002B208000017C000002FFFE0002C007FBF800017F00FFD80200B7C017DA401005BD807FA341001F7D0AFD50102BFD01FFA0000ABFD143AEA14001FFA0975D6CA000FFE85FEB0400D7FF42FB4A88003FFA17FAC200A21FFB1555481141FFF415554205143FFF415554281143FFA17FAC0A07FF492FF5040521FFD01355404144FFE925AAA4091DFCB6BAAA000FFFF41FD5424A491FFD25D552227FB492BB58427FFD12B5504923FFA0BAAA047FFC16BA5092537FE8A7AA8892FFEA2FAA84965FFD01F5010D35FED6D512CB7FABFEA007FF5FF50125BFD20FEA8169B7D22FFA86FFFA2BFA84EFF20BAA8134DFEC17D50CBFFF27AA0926FF68F54124BFFC13FA80997F9A27FD044FBF44FBA0A1FFC89B74124CDF9326CC99136644DD8991FEC899D812277E899981118EEE41DCC1389FF25EE03C8FF9807F801CE33EE01FE0770CFF87FC0CE39FF1FF033867FC07FE0670CFF87F811C7FC3FE0C711FF807F808C706F305FF02718EF31CE318C631CC7398E719CE21CE31B9C67398E6338CC6318E7398CF18C671C7460870000000000000003F0C00001FFC000000FF000003FF000007FFC0C000FFE400003FFCC0FC0607FFF08473FFF0383D1BFE07FC36823F07F1B21F03F2FB1B0681DFC0EC3E487C0F87EF4F87E0F07C303E1F781F00E7C3F131F198F104113977808080F1F0402160000E03C0C0386071F0F807E1E0FE0FE03E3C03C37E0FE00FC0FFE1F801F801C1E1C7F387E187E187879E1FC71FC31F83C787C11FC1F823F83C787CF9FCE1F8C3F87FC1FF8FE61FCC3F97FFFF87E30FC43F887CFFBCFC31F8C3E1F8E3F71F8C7E3F863E38F8E7C31F47E1F8C7E67E19F843E0CFC73F33F09F807EC7C71F33F88FC7F0E7C61F13F88FC07EE7EE3F31F18F887D8FE07F3F01F0F81DF0FFCF84F88783FE1FC33E33E21E31C67C77C67C43C4F19F1DE13E01E4615F1FE27E43C9C7386F8AF20E4619E37C57DF22EF1FC47D0F021DE1FC0F8E63BC3F81F41C0678DE3C07310DE1F80F01C842FFE178F401DC7F0BC7A01EE3F89E390E63F85E38846F1F85E13807F0FC3F11C013D8FE3F11C03D87E1B88E09E87FBC8E01EC3FDC4701F43E87E0703F03C7F0381E0FE7D0FC7E1F8FC0FC31FCFC07EC80FC47603E287F03F801F03F827F4FB0A417FC5BB6803FE01976304116C936C24936DA49369C00000000000000000003E000000F0000003FE0000007FF0000001FC0000003FC0000007E040001FFF01040063FF000001FF000003FFFE60F80FB81FEC5E0373FC3F8F07723F01F8072227F1FA1F0231311F1FC9EC6703E1F8BC160307C3EF239181C0F07A3F198E0E2381C5E181C869EF3C1E0F03818F33CE7381E0783C1E102C215000084005E01040D21403D040003D01A81AB80003D140B70007C0FE805804003405F80412020016D027F4054008FE83FD402800541F507FA816402480BF801BEA9691A686FE416FA8A014037F28B55456A03F805FE47FA83A00FF809FF95FE8F50ABF07FB2FF5F40ABF2037FA9752F01FE017FF1BEB0607F2837FA09F50B43FA49FE955BA87C1FE3FF20BF50E47FAFF482FD43C0FB05FE87D25A05F5FE82FF41E01FD17FB05FE9203F17FF01FEC0DA0FFC03FF81015FFE1FF804C97FC03FF814A04FF0FFA2461DEE4BF99F237272221CE60E6619FF8211D8F0C0C2731528E01C0001D0FC00003FF101C7E07FFFFC07FE603FFF807FD681FFE803FFB43FFE0FEBD0FFFC03F3F43FFA00FC7FD0FF80BF8FF817E01FC2FCBF007F15E84E8081F827627C98FF03F3F0123F11F8F80223D3E8BE8C3F11FE2F838FF11E9E0718F38F1878070F383CC1F01FC3EF07CEF878F83F00FDF0FCFC03FF3F03F07F83F81FC03FC0FE7F003F83FC1C046C03E4F02FC3F87C7F83839F8FF83F870F833C731C3C1FC61EF1BE1AF1F1F17E71F9F21F19B3C1B871E887BE258E407B119C72E2F1824CCC66446760E1F1842C4DBE0F03C1CDF05D3C10E904C2F0742AAA9FA114002000201C800000100FF80080011000FF80C0400DD8081FF0701EC020FFC0003B01803FF042003BC0607F810801DF20747FE0C0EEC6F03FF80C01FFC0379FF8060EFD3D09FF80D01FFA17E11FF03407E01BC4FF60F01FFCEF13FD8780FFE81F84FFC9047FF1FC6FFE003FFC8DFE07F3F0FDDEC4FE03F130FF9FC8FCC7E60FE3F23F31F059983F9BB9FB1D819183F9BF9F91F81B307F3FB3763F4CC7F9FD9FD9F86C7E9FC9F8BF4C9F9BF23727C06FCDF83F23426FCBD1BF46C40DFBF46FC9F0B37FC0FF26C02EDFB16E13A0D3FE8BF25D0161FE2FD22D0103FF2FD23D803FE0FD23D007FA4FA16B00FF41F6DE01FE7FED4017EBED1A882F827DAB507F84FB06D05F44FB56B09F49B64EA241BE49F60BA013EC1E68D6837C93E8174403FC13E81740BE41FE8B65FAFF546BA2E97FAA15516C8BF512AA80905DFA9554002FD14FB6003F541BEE948ABBA55D55A55980EEA9A9447DF511D3A135800000000000000000000000003C0000003FE00400FFE000003FFE0800003FE000001FFE00001FFF800001FFF8029000FFC0060001FF201B001FFFE0101903FFFC101801FFF43001FF827F84BC3FE2FC86C4FF81F8243496C7D8FBA0B83F139191A07C3F3E0B80FC1F780E01F1F83CF07C3C2E7208D8DC4E62363718003B213003212103C0C400808264C008080D913C80000C0FC07F001307E07F44FE998199BB81B913703301F99F8FD99B803F81F83FC1B913F019807ECFF06EC4FC3F03F23F83B32771F01F91FCD999B84F81B99FD1F991B89B13367FA3762773601D9FF0DC89FC183ECDD86ECCDC0C87CCDC87ECCDCD6C9991FD89B8244C26EC7F44DE122637646F666E06C0FC8DFCFC091FF93FF13F0C8FD81BB11F001FB03722760FC09F915B05B3FE89DD21295C8B55B4833B02AAC087F52FE9544A52A2A5500000000000000000000000000000000000000000000008004081020C07050541068208C40C29E382815480F36860486030381C018B01EF6284743C1C06220E0FC70381CFC7E3FE46671F8FC7C1C1C7C3E1F0F0F0F8FC7E7E7E3E3F1F9F9F8F8FD3F1E7E3F07F678FCFCEF3DC81BFC7F0387E1F8FCE0F8FE4F2303F1F9381C447E7E2E06089F8F8F818183E3F1F137747C7C4C0E0E0F8F810C383E3E26DF747C4C1B1E0E8F8D8383EC1F1B37C1C1F1616078F83E366F8F346C0C0F1F068D8581E3EE8D8F3C7C1916160F8F93A54301E1F7C858387E4E1B9A078F81A1616FCF81A066F8F83C4C0783E3EF853E0C00000010FF5112007034E206243942980226B16C9D8531B42924C1DA95A945A56ED33E4AB26D99B76B43844998C47988DCB888B7E3D8CD703E10A78C48C8C3338CCDD98CC3510CE27D932F443326E250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040020000380000116000020D03C000981B70C0C80F8BF1FF41FA4FB3E800FE7FC9747E7FCBF67F93D7F3F87F8FF06C7D83F87E2FC1A0FC1FC5F07CDFE0FC3F7C1B04C1F7C1FA7477E3E0FD1AF83F364691AC8BF2E8F8361E7C593F468183E2E8F836081F0FC6D1B183FF47D1B07E0F8F8370F83D1E46C03E2F781B01F1F83E46C168FC1F03637E0F81B327E8DC9D22760DC8D8227E0DC8D27E8DC8D84F81781F8CB91F91B81B52F01B101F2F01F07E7E03E0F8DE0FE043F988FC00FE671C82654B18C7889E9099BACD6F0ED988AADD95AE0C3862202BA8FBDA1940C83C442B848C1E1D94E2F18465A24DC073654A1691E7C059C527F9A95E41C3AA86E53B6207581906195313B93BF5561CC3E1718CC98BB11B59F0E268CCC066E7DCB684E99F25CA2217505B9C189E4F92F8F3CC6AB1C98F7C2895C9BE99A8BA344198F15080CF74F1244582C144985A27262A4C2D043486B43A5EE4E0288923851311F7ED5340952442BB0AC1C3886389D89CF8E3338F062E3B73F8787E639F8B83C8CE2321F0781C46E270FC3EFDE06C7E1738384C7E172382E473E1C18D2211998DC8E0722110000002000003F03FD01002803F03FD0007801FF0FF40F21F81FF0FF407F807F07FE01FE8FE01FD01FFC7F27F07F8FFC17FA7F43FA7FE17EA3FC3FE3FE95EABE91FF3FD22D67F03FFA5FA51A811492DFE93F916B0F24365FE5BE53A97821B6FF2DF69B476806DFE93E932AF81FE1F6DF6AD6BE43ECFE4FED63C07F9FD1FD12F743FCBFC9B45B7C1FCBFC1F44BD83F93F83E8970FEDFE0FAD803FFE0FA2581FC3FC1F45B1F0FF7D16CF87F83E8960F83F93E41A792FC3EC1A0BC2F83F836785F07F16C0F03EFE0D81EF82F836783F0BED83E0FE2F8340F07E7C1F07C3F3F0683EF81F8341E7E0FC1AF7F07C1B783F87ED381F83ED3C1F83ED3C0F83ED83C0F83ED83E0F83ED3E0F83ED3E0F83ED3E0F83ED83E0F83ED8360F83E8D8164DD1F459064DD1F468036DB42C03EF8B42D03CF8B42E0391F1781C0F83C2FB81E0F8381EF7C0D0B83C1FB46C2703CF1B3C4800A1C807D1100019E0C081003B3B1000001FB12001003FA2018190327E0F0336274FC018032766CFC080FD01F80FFC0001FC06407FC0004E6034207F600047F224207FE00017D02C07FC00037B0380FFC0006F60525FF8000FE84E0BFF0037F980B7FE005B4229FF000FE01016FF8007FE1896FFC007FC01096FFC00FFD9A5FF800FF802141FF8007F84CA37F003FEA57F83FE007FF8B5E2F58003FE85BE97FC003FE86D683DC003FF86F697FC007FD0DFD2FF803FF4BFD49EE0FFB4FEA2D7007FD2DF52FF807FDADF5AF700FFA5BEA5EE01FFC77A97DC07FF5FEA5EE03FFFF52F701FE97FE96A80FE96F496A81FDADFD2D503FE5BD05AA0FE97F50EA807F4B7FB543FA5FD05AA03FA5BEA5AA17A5BD05AA03FE17D4B547F43DA87F80FF87F5F701FA5FFA5AA1E95FC16A80FA9FF4BD40794F5A1AA03D6FE82D502D2DED2D503D2FE92D50294B5A1FC05A9FD05AA014BFA4BD4087F416A8414FEA2F5ABFF55FA47F47A8101FFA2F50202FF55EA0505FE03D40E81FD2BA81E83FD07A81602FE07A80502FE05E8007FE07D007F3FF407E97FF1405DB7FF488040B6FDEC4C6A75EAB7CB1C32D4BD2B7036D5B34793A45AA54EE43946A1BA84A52135F935BCE63F8CD085DC626C84C018822462EFC1031C641982E20891740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000401048899B626081C078E54671BFAF4E32471C27CA38FF81748540E396903C7970C8972F80F864C7C881C3BA81D983207F807E41F81FF3FF817640187FED8993F67FB2F60D9BF02F603F3FCBD8FC0FF3F47F03FC0FD3F41FA07EC0FC3F01FB03B5F813E4E917E5FB364DF907E80D03FC09FA07C3FCFD0E40FF83F41336FC9DD007FC9F9003FEF817F284C1FDECE5236EE6B713F18E2A8A8736277F490DCDBEE70C241957A315EA774EAD32538306546BEF5E35BEB49E4C7441CB4252C4EA55F8C1199A34CF5FD6B9973972E49E9C1FA01CB229D838196C45C9ECB88D8F75B41A211DB98F3E000D8353819D81FCFE8D4B1DB7C4C87A31695150F4342FE1153D913B97A892D1A1F098CB02763035DCA224200231120060D000003000200AD3F00E0181F000000F998C00000FC781800E003FC75C01180C3F0182078C5F01F00181B0302680FC4CC019833F67E0200FE2301FF0009F8E80FEC0C003BC03407FC0003FC1C83FE0807F8035807FC040FF87B0FF8403FC0E43FF05003FE858807FE07C01FF01605FD81E03FE01602FFC1E0FF21714FF81003FE8E2BFF000FFA038AFFC0603FF1FC7FF7801FFCF693FF0781FF82F693FF307FF85F697D50703FFA5ADA5EFC0FFF4F7B4BDE0803FF97D6D3D70801FFC8FB6AEB803FFC8FEC2F7007FF2FF9ABAE03FE96F4D5F703FFD7FCD5FE07FFAFE9ABFC0FFCBFAD3D70FFE1FF2AFF07FC3FAD3550FFAFE9AB5C7FF7FED5D601FDBDED5561FD7BC96AA03F2F79D54D6BFB4B553D2F695554169FB5AAAA0B57D694AA0BABDAD55502AFDE95FE0A8FBA94AA0217BCA2AA042F7D2D54084FEA52B815ED4AEB23FA96AA52FFD4D54141EF4A550107BD2D7C0417F4A5F15FDD5402FE835500BFA8FDC05FC86AA07F51AA803FD0F5400FEABF507FC6A802FF55DE017FA0D501FFABD407FEF502017F23F400BFC3FA41FE1FF802C8FDF4A412FA59E6B547B5B22E9AF12EC9BA95EA47D9348A4066CD5AC254922389AC19AA71623898A8D42E192467732203029406CC61331118332017219C01071FA03132E00003E00FF83E0013000FF400016001FF80000EC003FC0000BE001FF80003F8007FE0007FE000FF8000FF8003FF80037F003FF0001FE000BFC0007F8007F8001FF090FE0007FF02752FF8000FF82160BFE0001FFC25B49FE000FFC2D25FF000FFC2DA5FF04001FFC2D45FF8007FE8528BDE0003FF082D0FFC003FF805A8BDE001FFC1B4BFE000FFC02B41FF007FC2B41EE000FFC05F8B5E00FFF07D0FF8001FFC1F83DE00FFC7E83DC003FF0FF0F78003FD03E83D401FF3F51FE001FB03FC1FF0BFD17F83F600FE3F817E805F1FE5FE05A5FC3FA1017E03FF78250B7C2FE82586B76B6256EA578F1BB56E4D3AC5BA74BA4C54A91323A25442C488FA02DC877998031284C7831E691B0D1811B724A0000000000000000000000000000000000000000007C000007C0000078003F001F003F801800FFF20FC01FF300FC07FC300FC0FFC88000399FF0FFF44FFE07E83FE4FE3FEFFE7F83F81FF8FF01FE37F89FC044FE27F01BC084FE7F01F81C0FE7F01F80C07FC3F01FC0F81FC0FAFC0781FC0FE1FC0781F80FC1F80F03F3F87F0E0FC7E0BC23F03F86F003F1FC2F07F07F1F003FE0FFD009E31D91CFFC23614C3BD82916C28C1086C8E1E373D2B92F0E0E61F138261F7909AF1C3E384105FBF21384F98DC83E90208E11EDC85691BA31B9594A0D478F46A23534F8AC6EE2AFC1991B03C42C56383C1F4267B1A333260F03BB9914C105678DEC02E6D94818887A53A3D981288E018422B160311380000884184820040A42D009C320F48FE024038D0D077A8C42107F0F0F8E57A844685E840318F1C14090AA2081A2EA5E0B05CD8A54410FF5404A12A8906AC50A1F40F098502171914201F98843648001F8100048001F81400080C0FC100000F87F0000FC03F07F007C0FC3F87E0003EFFC1FE07E01C7E0FF83FEFC0103F3FC1FF0FCCE3F81FC1FEF83803C1FC0FC1FF07C307F0FEFC1FEF81C07E1FE0FC1FE0F8EFF1FEF83FE1F801C7E3FC3F0FF87E0787F8FF07C3FE1F80E3C3FC3E1FF0FE787F1FE1F7F87E039F0FFF87F87F3E1F87FF83FC3E3C3F0FEFFF0FCF87E1FC3E1FC1FC3C3FF81F0FE1F83C7E3E0FC3F87C0E3E3F1FC3F87C0678FE1F87FF81FC7FFC3E878F7E0F81E780F0FC1F3C0F87E3F87C0F03CF7E1F8FCF381E0FC3F3C0C1F07E1F8BC0E0F83EFC1E080F8FCFC1E880F87CFC1E881F8FCFCBCC1F8FCF8BC81F0FC1F83C01F0FC1F8BC01F1FD1F83C43F1783F93D85E0FA3F7D0781F87E7B01FC7F0FCF80FE1FC1F01F0E13E3C03E718F38F8784379C3E60F80FF83FA7E0FF83F801F807F81FC0FE0F8FF11FC3E03FD07F0F80FFC01FC03E3FF807F1E01FF87F8003FF3E007C263E4301E1F8383F03F40F8383EB2FAF23DEFF970FD4179F9F83EF17C1C34678F5C7C6E7FC59C1F81F8F0C5E723C37B036E3C8C85E8782387E08F043A80103038781F01830334202C2C00000000FFC0000003F80C0000001FC0000000FE00007E0003F80000168007FE0000FE001FF8000FF0007FE00004FC0203FF0001FFB101FF800037F080FFC0001FFF9101FFC003FFA0407FF003FF7203FFC003FFF800FFE0003FD8BD8BFE000CFE85FCFC047D8FF81FC1FC081FF37723F03F0203FC5F81F81F8441FE1FC8FC8FC064FC1FC8D88F891F93B3F11F607E4FC0EC4FC207EFC0FE7E001B95BDA84FC004733087FE0006221FDC001E003FD804E110CEE60E00C0FFD806007FFC80380003DFC011FF9F9FFC007F87F9DFC7C3FC87E03F3333F3F01F803F13E1FC3B903F3E17A3F01F3E17A17221F7E2F47E3E1F7E2F46E2CEFC0E8DC4C3EF85E85C583E1F83D0787C3EF81E85C5C1FF81E85CCF8FC0F0AC26F87C0FC7E12743E07EF01F87E0781F80E07F1F81FC02F627F0BFC0171FF805FE0780FFE03FF85407FF8FFE1C81FFE3FF80707FF0FFC081FFC03FF0307FF01FFC5401FEC7FE203FFA3FF800FFE0FFC0103FF07FF001FF803FF840FFC03FFC00BF50FF6054BB913FF609016EC5FFB54847FA7FFA0FF42BF54503FE01FEC903FE8155C017F802EB805FE05FC01FF85FE01FD017EC00FF80E2B000000793F8000000FF00000007FC1800018003FF06000C0100FFC020003B90843FF04001B8001FF80001BE1200FFC0000FF8907FE280013BD827FE000351FC04023FF0001BFC84423FF000351FC04423FB00091FC0423FF0001C7F40108DFE00607F3FB1FE000FCFC0BD87F80C8FF8FC01D87F0088FF9F883FFD0320FE6E207C5F80391FA37217E5F8183F07E46F8FE0E0FC7FB37A7F0C0FD7EB77A7F081F0EF47E8FC0FCFF13F7E00FCDF93F07E07EFD1BF4FC0E9FF22FC1B818BF4FF07E065FB17E83F033FD1BE41B052FC1BF41B053FC1BE4BF083FC17E8F617F82FD1AC0FF05F23F803FC1FE8D6007F3F837C01FCFE0DF07D07F837803F81FE8F600FEFF06F017C83E916801F41BEFE01B41FA4FA0A1F6DF80803D5A3E5A254D3468345E1A14B06C532C165AAFDF6966855AD553F47FD8A76EB76BDA6C723D5BFA759B1D2A94A95A9595D88958CC8C47C37A18B311884687C6683203383A8961A0000002001F9018000181FF198000007FB10004080FE7000213001FF80001C8003FE000119000FFC0001B42C01FF870036307FE1001EC5801FF801001FE1E00FFC0780FF89007FE000FFF6801FF81803FFE00FFE003FF6007FF003FF6007FE207FF60017FE003FF601C43FF201FF403E7FC003FF80FEFF02007FF47E2FD8007FFA0FF57F0C001FF43FD1FE007FF49FE47F801FA9FE87F4007AFD1FE49F7ED3F60F8E0FDF64FD13E200BF2DD9374BF7E8DDB36284FCF336F4DC403FCE8D9F37C3E7E6EDCDC01F1F0F7727007D7B33733007E7E33393807EFE76793880FCFC7E62701EDF8F8C4E03CFE1F3A9C071FC3EEC70E3FF9D8E01CFFF3B1C03CFE1F3E1C039BE1E763803DFE2E763803C7E1F1F1C01CCFF8F8E073787C783118DC0E1C1C0217370787070407C7E4E5CC6FFCF4F89830E1E8C9D1F00347E5F93F01A57A1FFE0002FE07FF80003FC01FFE0007F03FFC0007C07FF8001F80FFF8000701FFF8003E01FFF8007C01FFF0001807FFE0000C81900680302005242CA408E12856AC9953258BD6A56DDAD5AD7AD5B938D4CE6663719ABBBB8E1D2F1983F33D1F3A5AC4444FC3AE56DCAD4B594A31A3258BE18467994479380E2B8786466C6198A6FCE461C3D89CD821FF419C46138227994723243EC8380D9992C6B1AAE2000000000000000000000000000000000000000000000000000000000003E0000006800000003FF807FFC0FFFE01FFFC0FFFC03FFF803FFF803FFF83FFF007FFF03FFE007FE87FAA40FFFDAAFF50103FF48BFD45027FFA057EA161FFD2B75564BFB217EB1A817FE526D65A97FB41B584925FE92FD4082FFC96EA0D07FE036D06D4FEBFD2F07FE03FD03F1FE83FB3E01FF05FA03F0FE9F43E01FC03F807F7FAFA07C07F816C0F8FF05B03F83FC12C4BE0FF4B30FA4F9268806D3C8346817C9744B28791EC1B30FC1F02F01F7C0BE1F07CBC03F7C1B01F3E0F81E1F07D283EFC0788C18000C40000C0008CE001001FED900F6001FFA48007E0003FF0F019DC04423FF0003F88423FF01001FF80C423FF0003FE7211FF8403FFE0321FF80E003F7F1908FFC601FFF01C8FFC02001FFF3908FFC703FFE07211FF80C007F8188C7FC07007FFC2223FF0807FFF3B11FF8001FFE4211FF8001FFC2F63FE06007FFF3F13F819039DFC1FC1FCCC03F8FC8FD9F808983F9F91FB1F02607E6E66E87E3303E46E5EC7E4407C8FC9C87C2662F47E27537080BDFC0F4270333BD09C87E054FCCF731FC0473BDCDEF070CE37FC040F81F31FFE03F03F8FFD3A1FC00FFF000FFCFFE01FCFF83FDE03F7FBF37F87E0FE7FC8FE2D5FD0FC87E1F83F4FC0FCF85F8FCF81F83FB81F01F7E0703E3E0FCF46C07C1F81F9D01F83E0762E7E0FCF42C0F81F3E1F03EFC1E274F3E07CF88D0F93B13A2207E4EC4ECC01F83F03F20FC0FC7E01D81FF85F8480FFC2FE1863FFF736DC7F34738F93F1F846D5847C69FF9306698C30107018E02F289881B8C1310703103F80F66F9F6823BE1CF943439F23C698723C67801831CB222C728CE9DB73609280F2C233047BF8C6BE21210C79801E3BC21633E34FA5A04CC1EFF1E17E1C3FC3DD13423AE44C09C2DC188F2EC4307BFBF38C0F605063BB9C24C33E2183A1FF111020C660237384A310CEABC36E330138DD32011B31741BDF9A5483610826BC3993627000C27700008000800128C081088C4996DBDC9E220389A3E324E07F7F32CF63AB77F1859E357E0C06C9B23AE3C1E22E7DFF1E1C9C63A363C73180D8FF89F98667C219170FC1B960E16C1DD02A1E349BE406234DF1E3CB3683020A989CE1B9C47103B8663EE3B9E373CF6251E1C0E7FC60CB3FC6C0F03378DF1D0FE6834120C46188701FC0C3EE30474F80CE1238301818FBC2188780263104012A14C49A2214208CF33C0200003000000000000000000000000402000000030190C007800000000000000000003FFF0FF37C3FFC3FF83FC176DFF41FE07F807F5FE07F2FC3ECFF7F916E03EFF07F81ECF817EBF07D7E0FF5F91AC2E87F44F93741D07E81F95A8360F913E45D137E81B96ECB03FC0DE27643F6FC13B03F41F813B07E81F813B2FDBF017A04B91BF3764397FE43F4068FF88FFC278E7E7CE27F3E60373FBF21C32BEFF33087B3E180F24678D386FF80C3388D8E08C99903EE3FF043C1F81859F1B2440843181BF1388C7011F97DC010367FC71CC37FF107F083889EF9BCFFFC81D1738FF840C8403EEF8F3A28C0FC4F1324E13C4C68C71A2143D9E1D99003878FFBE4EC7FFC6E28E1917C03E41F7827DCC1F8D87A1E0E318F06019878E039EFE61FC8C8E10FC003FE78B102318043ED2030E171C8666467C1C78652472420A1CDE32C2600231817C783230D84E07818400070385BC6C704743DFE3F00187F1FC0CC2107F01FC03400BC05FD08D212040C728C581A63426462C90401220800107248400001CE300000033800004000FF100142381FE000721848FFC0031181F01FF81C04071FE43FF820807F81FEC7FF044407F03FD8DFE0323FD1FF89FE03B2763FB1FF83F83FE1FF3FE7E07E2FCFC3FC1F91FC81F03F7F07EFC347E0FC1F83F2363E1F87E0FE1F91B0F83E3FC3F0FCD7A3E07C1F83F1B85E1F8FE1F83E173E0F4FE2F4FC2F14FC7C7C1F9F81A2363E7F8FC7CE3E7C7C7C7EE71838FC7C1E1E863C7C7C78783A18F1E1E1E1E1C8E37F1F1F8E8760E1E3E3F1F0FC3C7838FCFC361F1C3C7C7C3C1E3E383C7C381C7C7838F87838F0E0E3F1E0E3C3838FC731F1C1E3E1C18F8E071F0E0C7C778F87C7C7838FC3843C38387C7861C3C1C7E3830E1C1E3E1C17FE1F1E18387870FCF040E3E1C6E38371FF1B8E181C7C386E3840F1F0E1F8E13878387C3801E1EE1B8E10E1E078EE3883C71C371C01C381C3FE0C381C3F8E01C707C7EE31C1FFE1E01E1FC3C878187F0F21E011FFFF411238F1AC39F0D0995763207A4B52D05862756220236A1BED674BE22093E68E862AC3D4A1A88B0D8F31A48D19028FB2CBC98CA7CA4883C7D8DA5E417CE4F837653016B121F4774660ACE99DDD83626F8DC251E202C1ED41C931C82CA11F2E4CB89F5CC367A1DE3A812B8F702AD1E21E30C158A3298C282A03751FF49EE3E0F573C124959863702407FCDCC457C91442858101C352340001008E20010020101247225002300000E000400000006018006001F860008C0C0F1E08C0101E370FC4F18C381F01D87F13C80C03B1FE07FFC47E1719CE781F83F11E03F8C4E3CFE1FC8F0663170FE3F7E2386E78DE1F83F33C06319C7F1FC0F91F1CE67C3E1F81F11C13CE3338CF11E678E07E1F7C0F81E3C4738F23E47CF1C71FC7B9F83C7711C78FE3DC79F1E79CFF1FC3D878783A3FE1FE3DC39CC387F87FFF0F83C3F07FFF0F819C3C33C3EE1E38E1E1E0FFF80F1C7C3FE0F0787BEFF83E7873EFFC1F70FC1FFC1F01F83FF83F37E0FFE0FE181F7FF83F81F83FF81FC0F81FFC0FE07C1FFC7F07C0FFE07F807CFFE7F87C0FFC07F0F81FF8FE01F3FF1FC3E0FFE03F80FC1FFCFE01F3FF1F87E0FFC07E1F81FF01F807E7FC7E01F83FE3F0FC0FE0FC3F07F07F1FC1FC01F80FE7E0FE03DC1F03F0F107C61F81C3E187E001FFF09051C6A6E74721E34B1E1A1C3F3E5AC11EDAF7948EB1E6249DAA033B61135932592E593B04A59B5673185C53894C58F3E64B69794ED55BD4284574E13BBC8B8B29D9A633248F33758A85E1172ED4177564C35EE48EC476285885374921E4CA623AEA44CC21261C88AC36C67044144A709442859D3322650966AADA84D4C1B4682840E54885D2BBD920B610AC894D84DE042203340810810018924000207800FE07003A07A00FF4100FA07E005542C005D403E803EB00140FF50F55900AAA7F403FF8001415FE81AAA102115AFF405F500225FF407F5101035F41DF5000415FE07FE8000FFA0FFE801152FF40FFD000FFE07FA80003FF07FFC0007FE07FE80083FF801FFA0203FFE1FF5007FFC05FF510101FF82BEFA0107FFAFAA827FFC17DE847FFC2FAA8147FD82FB5824FFF4BEAA0101FFC5AA8007FE82AF8107FA4175D017FAA175D91FEC17FA024BFD92EF217FA57E80916E915FA0453EC91EE86C9F648BF42C9BF65DB493FF44DD89917F226EC3667FE27760644FE233709C8FFA13F8CC6FF8EE6637F847F80719FE11FE01C67F87B870FF0FF0E03FC01FE01C7FC3FC3C07F807F8038FF01FF07C1FF1FE0FAFE03FC0F3FC7F0383FEBF801007FE9A56FEB7AD485B944AB79F0A5ABE2DE6195A10A1A51E1551EE387B2A14C921BD811A92DF9C09B43D1AE71B3819638A13E4FC018184C723D9523316326CC89112ACC7C8CA1310E8FC2135273D1CD9C9066316CADD8786C5483A17986C813310E139CCF036E848CEC41C18948AF92FED050400190D21300600000700FF000007E03FE000003C07FC00007FC0FF800001F003FF000001FE00FFC080001FF07FF00003FE00FFE00007FF01FFC000FFF01FFE001FFFE03FFC0007FF00FFF000FFFC0FFF8001FFF00FFF0007FFE07FFC003FFE07FFC007FFE0FFF00FFFE47FF801FFFC1FFF0407FFB07FF803FFB10FFF803FFF10FFF003FFD43FFE40FFFCFFF903FF603FF401FFD1FFA037FE88FFB01FF682FFD017F686FFB12FFD41FB617EF817FE817FF057FA103EEC17FE802FF64AFF407FB57FA037E8275D03BF412AD84BFA5556805FF2AFF402FF04EFA107B857A017F825FD0FDC82FD07FA2FD07FE6FD0FF227FB0BA47FFE5A356FDBB4A94D7EEB66A45FEF4477A91A2A55ABD89D5A9548D2A8526850604D8232E1C0BE34E0F72F826C38B6E18863A4190123E8348D96131B646E1200600200F81F0F00800FE037013307801F87C0001C0807FE0001980003FB0200066000FE83003B000FFC0003F01C0FEC0001F8003FD00017B80201FF6200FEC0207FF0280FD38801FE81003F60903FE8000FFF087FD007FF4A41FF4003F8F62FF60103FE01EE37E33043FF3F95F818031FFC0FC8FC1683DDFC1FC8FC4E0703753FB1F8311F9BD8FEC7E1ABDDF89FC6E2623B9F89FC5E01B9FE6FE1381D8FE27FB80131FE67F1F806E3F91FC2E230FC47F2B8237CC7F19C2223D8FE238C47A1BC47311F8EF11C318FE3B88718EE15C2781047AE11C8A784728E8638C718F18C398F1C710E39C79879861EE1CE1E41877C7987CEAE0FFF83C31EE70F838E1E1E78787C1EE383E1E20F83DF07C1F1F0FFE07C3C7E07FC0FE03F0FF807F807C07FC01FE03E07FE3FF0F001FFCFF8F003803FE03800003FC0000007F80000003FC0000003FF00003E0FF80003E07FC0003E01FE0003F03FC7801FC0FF8007F801FF000AF110000E17001C003F3C000E0E1C3E33C0CC3C1C707E01E007FC1F77E03E083879EF9C3F20F61E1FF87FE0FC03C187C3CE0FB83F21FC0F87BC3E3FCF7F07E1FFF983E2018F0FF7F87C41F3C3BC3EF1F70F987C878FFFC7D87F43E8E1C73FE1FE1FA1F837E39FF1FC1F41F7E1CE3FC3FC7D781F07C1FF0FE3E83C0F0B8F3F87E1F43C0F03CE3E8F81E783E0FC7F83E078F787C3FE1F83E07838CE7F0BCF23C381C3F71FC2F03C38FC77F07CF23E313DCFE2F89E473E0399FC7E0791FE03E1FC3F03CFE03C1FC3F07CF80703EFC3F01CDC0F07FFC170C07FFC07E13803E3F01FC1F81B84FE1FC8774C07F7F61DE00FD7F0FF07F8FF01FF0FE01FE01FE03F80FF807FC0DC3FE1FF3307FF87FCC3FFC13FE0601FFE9FF00FF80FFF0801FF87FF07FF0FFE00FFE09FFC03FF83FF01FFA7FFC0FFC13FFA013D80BED0FFC91FFA85FA8B5FA415FAAB5DE4BAC57FAA857CAD76805D68BFD54175829F555D6825DA417DA97F805FA857EA06FB40AF5017E916BD604AB125FF53E478E05FBE38F8737FF8889838D1FE1F0313CF0E7E478C58041F6FFD4D847F83E8EAE03AE3F3BC1F01011DEF3F132D7E68DBFD4F8A7846F0BF3084315811BFBB41FC181BCDB70BC2073F166781E426CF018C6061CEF81FC07FFC38044CE803FEEC31087CE278F3EC781A43FE2162C666701FB986EC2403FFE1EDC208E07FE03D8618791FFE1607C01FFE46846EC3FF81501FD0FFE001FC1FF804A2000 12 REM 0-23(DO NOT REMOVE) 3000 REM SPEAKS LIBRARY 3005 LET WA=29999 3010 LET NO=PEEK WA*256+PEEK (WA-1) 3020 LET NL=PEEK (WA-2)*256+PEEK (WA-3) 3030 PRINT NO;" "; 3040 GOSUB 4000 3050 LET WA=WA-4-NL 3060 IF WA>DW THEN GOTO 3010 3065 PRINT 3070 RETURN 4000 REM LET NO=DESIRED WORD 4001 POKE 16594,INT (NO/256) 4002 POKE 16593,NO-(INT (NO/256)*256) 4003 LET DW=PEEK 16636+256*PEEK 16637 4004 POKE DW,INT (NO/256) 4005 POKE DW-1,NO-(INT (NO/256)*256) 4006 POKE DW-2,0 4007 POKE DW-3,1 4008 RAND USR 16514 4010 RETURN ```