--- title: "Unloader" id: 72450 type: "computer_media" slug: "unloader" url: "http://localhost/computer_media/unloader/" markdown_url: "http://localhost/computer_media/unloader.md" published_at: "2026-10-24T00:59:44+00:00" modified_at: "2026-10-24T00:59:44+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/10/unloader-1.png" excerpt: "Converts an MTERM terminal capture buffer or an MSCRIPT document into a Tasword file, splitting long files into several parts as needed." post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "TS 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" indiv: - name: "Kurt A. Casby" slug: "kurt-a-casby" taxonomy: "indiv" url: "http://localhost/indiv/kurt-a-casby/" genre: - name: "Utility" slug: "utility" taxonomy: "genre" url: "http://localhost/type/utility/" media_type: "Program" programmers: - name: "Kurt A. Casby" slug: "kurt-a-casby" taxonomy: "indiv" url: "http://localhost/indiv/kurt-a-casby/" download_url: "https://archive.org/download/timex-sinclair-software-archive/Unloader%20%28198x%29%28Casby%2C%20Kurt%20A.%29%28TS2068%29%28US%29%28Program%29.zip" tsrun_member: "Unloader (198x)(Casby, Kurt A.)(TS2068)(US)(Program)/Unloader (198x)(Casby, Kurt A.)(TS2068)(US)(Program).tap" mediadate: "198x" images: - url: "http://localhost/wp-content/uploads/2026/10/unloader-1.png" - url: "http://localhost/wp-content/uploads/2026/10/unloader-2.png" - url: "http://localhost/wp-content/uploads/2026/10/unloader-3.png" related_content: - id: 50516 title: "Loader V" type: "computer_media" url: "http://localhost/computer_media/loader-v/" media_type_tags: "Utility" license: false --- # Unloader Unloader converts text into Tasword format. It takes either an MTERM capture buffer, such as text saved from a bulletin board session, or an MSCRIPT word processor file, so the text can be loaded and edited in Tasword. The program asks for the name of the file to convert, LOADs it from tape as CODE, converts it, and then asks for a name to SAVE the Tasword file under. A file too long for one Tasword document is saved in several parts, with a flashing “-More to come-” before each new name is requested. “Finished!” appears after the last part. The title screen reads “UNLOADER *** by Kurt A. Casby!”. Line 9000 saves it as “Unloader” with an autostart, which shows it was distributed on tape before it was copied to a Larken disk. Casby also wrote Loader V, a front end for MTERM. ## Program Analysis ### Structure The BASIC part is only six lines. The conversion is done by machine code held in the line-0 REM, which on the TS2068 sits at a fixed address because BASIC starts at 26710. `CLEAR 27999` reserves memory from 28000 up. `USR 26721` initialises the converter, the source file is loaded at 38280, and `USR 26735` converts it into the buffer at 28000 and returns the length of the output. That block is then saved with `SAVE z$CODE 28000,length`. If `PEEK 26716` shows there is more text, `USR 26955` converts the next part and the save loop repeats. ### Notable Techniques - Machine code stored in a line-0 REM, so the whole utility is one BASIC file. - A flag byte inside the REM code reports when the conversion is finished, which drives the multi-part save loop from BASIC. - Numbers are written as `VAL "..."` and `SGN PI` to save memory. ### Potential Issues - The machine code assumes BASIC starts at 26710, so the program works only on a TS2068 where nothing has moved the start of BASIC. This copy came from a Larken disk. For tape, the LKDOS prefixes were removed from the disk SAVE and LOGICALL lines, and the saved variables were dropped. It was tested in ZEsarUX on a stock TS2068 with a sample text file: it loaded and converted the file, saved the result and reported “Finished!”. ## Source Code ``` 0 REM CODE !. f6fwj GO SUB VAL <>! COPY COPY yjCODE GO SUB POINT ( DRAW OR # COPY GO SUB LN STR$ kmCODE 2\h~ RETURN PAPER 3i GO SUB q STOP Ei:\h<2\h RETURN @ REM ~ RETURN ! PAPER PRINT h RETURN PRINT h OR MERGE ? RETURN (x RETURN POKE MOVE STR$ NOT PRINT h MOVE STR$ +:\h=2\h RETURN LET ~ RETURN + RANDOMIZE #6 :\h RETURN ? LINE ch~:\h<2\h GO TO MERGE RESTORE CODE GO SUB R GO SUB R LLIST MOVE PAPER MERGE RESTORE bkATTR CODE GO SUB R LLIST MOVE PAPER . h GO SUB C]h"_h>}2\hbkmCODE GO SUB RDM<>:\h RETURN CHR$ OUT hCODE RETURN ( NEXT #x RETURN CHR$ ..hy RETURN CHR$ ..hCODE 2\h CLOSE # GO SUB K]h*_hNOT :h 10 CLEAR VAL "27999": BORDER SGN PI: PAPER SGN PI: INK VAL "7": LET n$=" UNLOADER *** by Kurt A. Casby! Mterm buffer to Tasword file or Mscript file to Tasword file": CLS : PRINT n$''''''" Name of file to convert?": GO SUB VAL "98" 20 RANDOMIZE USR VAL "26721": LOAD z$CODE VAL "38280": LET length=USR VAL "26735" 30 CLS : PRINT n$''''''"Name for the new file?": BEEP VAL ".5",VAL "20": GO SUB VAL "98": SAVE z$CODE VAL "28000",length: IF PEEK VAL "26716"=SIN PI THEN CLS : PRINT n$;AT 10,10;" Finished! ": STOP 40 CLS : PRINT n$;AT VAL "10",VAL "8"; FLASH SGN PI;"-More to come-": BEEP VAL ".5",VAL "35": PAUSE VAL "30": LET length=USR VAL "26955": GO TO VAL "30" 98 INPUT "Filename? "; LINE z$: IF z$="" THEN GO TO VAL "98" 99 RETURN 9000 SAVE "Unloader" LINE VAL "10" 9992 SAVE "UNLDR.B1" LINE 0 9998 REM was LKDOS-only ```