--- title: "80 Column Text Reader" id: 72934 type: "computer_media" slug: "80-column-text-reader" url: "http://localhost/computer_media/80-column-text-reader/" markdown_url: "http://localhost/computer_media/80-column-text-reader.md" published_at: "2026-10-27T21:30:14+00:00" modified_at: "2026-10-27T21:30:14+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/10/m-2-5.png" excerpt: "Read ASCII text files at 80 characters a line on the TS2068, using its 64-column video mode and the Timex 80-column routines." 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: "Bob Redman" slug: "bob-redman" taxonomy: "indiv" url: "http://localhost/indiv/bob-redman/" - name: "Mike Finn" slug: "mike-finn" taxonomy: "indiv" url: "http://localhost/indiv/mike-finn/" genre: - name: "64 Column" slug: "64-column" taxonomy: "genre" url: "http://localhost/type/64-column/" media_type: "Program" programmers: - name: "Bob Redman" slug: "bob-redman" taxonomy: "indiv" url: "http://localhost/indiv/bob-redman/" - name: "Mike Finn" slug: "mike-finn" taxonomy: "indiv" url: "http://localhost/indiv/mike-finn/" download_url: "https://archive.org/download/timex-sinclair-software-archive/80%20Column%20Text%20Reader%20%28198x%29%28Redman%2C%20Bob%29%28TS2068%29%28US%29%28Program%29.zip" tsrun_member: "80 Column Text Reader (198x)(Redman, Bob)(TS2068)(US)(Program)/80 Column Text Reader (198x)(Redman, Bob)(TS2068)(US)(Program).tap" mediadate: "198x" images: - url: "http://localhost/wp-content/uploads/2026/10/m-2-5.png" - url: "http://localhost/wp-content/uploads/2026/10/h-1.png" - url: "http://localhost/wp-content/uploads/2026/10/h-2.png" article_media: - id: 62948 title: "80 Column Software Driver" type: "article" url: "http://localhost/article/80-column-software-driver/" related_content: - id: 71880 title: "40 and 80 Column Mode Support" type: "computer_media" url: "http://localhost/computer_media/40-and-80-column-mode-support/" - id: 71862 title: "80 Column Mode Support (ASC 002)" type: "document" url: "http://localhost/document/80-column-mode-support-asc-002/" media_type_tags: "64 Column" license: false --- # 80 Column Text Reader 80 Column Text Reader loads a plain ASCII text file, such as one captured with a modem program or saved from a word processor, and shows it at 80 characters a line using the TS2068’s 64-column video mode. At start-up you choose the ink colour and whether carriage returns are kept or suppressed; a menu then lets you recustomize, load a text file, read it, or quit. The text is read page by page, ending with “End of Text – Press any key to continue”. The opening REM credits the program: “80 Col. text reader BASIC by Bob Redman, M/C from Timex Tech Manual with Additional MC routines by M Finn”. The machine code is the 80-column display package published by Timex (see 40 and 80 Column Mode Support), with extra routines by Mike Finn. The copy here came from Bob Swoger’s Larken disks, which held three copies of the program. ## Program Analysis ### Structure Line 9000 is the entry point: it clears memory to 57343, loads the 2,538-byte code block `80col` at 57344, applies patches, initializes 80-column mode and asks for the colour. Text files load as CODE at 37800 after the buffer is cleared with `RANDOMIZE USR 59767`. ### Notable Techniques - Lines 1000–1045 READ a table of address/length/byte groups from DATA and POKE corrections into the bank-switching routines (Get_Status, PUT_WORD, BANK_ENABLE and others) – fixes to the code as printed in the Timex Technical Manual. - The ink colour is set by POKEing 57361 and calling `USR 57362`; carriage-return suppression POKEs four bytes at 59661. - Other entry points: `USR 57358` clears the screen, `USR 57381` sets 80-column mode (after POKE 57380,8), and `USR 59648` shows the text. ### Potential Issues - Menu choices are typed into an INPUT and need ENTER after the digit. This copy came from a Larken disk and was converted to load from tape: the code is loaded from tape by name, the disk save line was made a REM, and a short sample text file was added to the tape (load it with option 2, name “sample”). It was tested in ZEsarUX: the colour and menu screens and the 80-column display of the sample file work. ## Source Code ``` 1 REM 80 Col. text reader BASIC by Bob Redman, M/C from Timex Tech Manual with Additional MC routines by M Finn 2 GO TO 9000 1000 REM ______patches__________ 1005 RESTORE 1105 1010 FOR t=1 TO 12 1015 READ add,len 1020 FOR i=1 TO len 1025 READ val: POKE add,val 1030 LET add=add+1 1035 NEXT i 1040 NEXT t 1045 RETURN 1100 REM Get_Status Corrections 1105 DATA 25610,2,40,36 1110 DATA 25614,4,40,55,40,39 1115 DATA 25648,26,14,255,219,255,230,128,40,18,24,8,14,255,219,255,230,128,32,8,219,244,47,24,2,219,244,79 1300 REM PUT_WORD Corrects 1305 DATA 25408,1,213 1310 DATA 25424,6,193,209,115,35,114,43 1400 REM BANK_ENABLE Corrects 1405 DATA 25753,1,0 1410 DATA 25757,1,243 1415 DATA 25884,1,251 1500 REM RESTORE_STATUS Correct 1505 DATA 25930,1,243 1510 DATA 25968,1,251 1600 REM XFR_BYTES Corrects 1605 DATA 26474,1,95 1700 REM CALL_BANK Corrects 1705 DATA 26128,1,9 1710 RETURN 5000 GO SUB 8040: PRINT AT 0,0;"Choose function:" 5010 RESTORE 5999 5020 FOR i=1 TO 4: READ a$: PRINT AT 2*i,0;i;") ";a$: NEXT i 5030 INPUT a$ 5040 IF a$<"1" OR a$>"4" THEN GO TO 5000 5050 GO SUB 8040: GO SUB 5000+100*VAL a$(1) 5060 IF a$="4" THEN STOP 5070 GO TO 5000 5100 GO SUB 7000: RETURN 5200 GO SUB 8040 5210 INPUT "Choose text file";n$: IF n$="" THEN RETURN 5215 RANDOMIZE USR 59767: REM Zero Ram Buffer 5220 LOAD n$CODE 37800 5230 RETURN 5300 RANDOMIZE USR 59648: RETURN 5400 POKE 57380,0: RANDOMIZE USR 57381: RETURN 5999 DATA "Recustomize","Load ASCII Text","Read Text 80 columns","Quit" 7000 REM customize 7010 PRINT AT 0,0;"Choose ink color!" 7020 RESTORE 7120 7030 FOR i=0 TO 7 7040 READ a$ 7050 PRINT AT 2*i+3,0;i;" ";a$ 7060 NEXT i 7070 INPUT "Choose ink color (1 to 7) ";a$: IF a$<"0" OR a$>"7" THEN GO TO 7070 7080 POKE 57361,7*(8-VAL a$(1)): RANDOMIZE USR 57362: RANDOMIZE USR 57358 7090 INPUT "Suppress carriage returns (Y or N)";a$: IF a$="y" OR a$="Y" THEN FOR i=0 TO 3: POKE 59661+i,0: NEXT I: RETURN 7100 RESTORE 7130: FOR i=0 TO 3: READ a: POKE 59661+i,a: NEXT i: RETURN 7120 DATA "Black","Blue","Red","Magenta","Green","Cyan","Yellow","White" 7130 DATA 254,13,40,13 8000 REM initialize 80 columns 8010 POKE 57380,8: RANDOMIZE USR 57381: REM 80 column 8020 POKE 57389,21: REM BOTLN 8030 POKE 57390,1: REM SCRCNT 8040 RANDOMIZE USR 57358: REM clrscr 8050 RETURN 9000 REM enter here 9005 BORDER 4 9010 CLEAR 57343 9020 LOAD "80col"CODE 57344 9030 GO SUB 1000: REM patches 9040 GO SUB 8000: REM initialize 9050 GO SUB 7000: REM customize 9060 RANDOMIZE USR 57358: GO TO 5000 9999 REM SAVE "80rdr" LINE 9005: SAVE "80col"CODE 57344,2538 ```