--- title: "Videotex and Video 3-D (S.M.U.G. Video Digitizer)" id: 72952 type: "computer_media" slug: "videotex-and-video-3-d-s-m-u-g-video-digitizer" url: "http://localhost/computer_media/videotex-and-video-3-d-s-m-u-g-video-digitizer/" markdown_url: "http://localhost/computer_media/videotex-and-video-3-d-s-m-u-g-video-digitizer.md" published_at: "2026-10-27T21:30:11+00:00" modified_at: "2026-10-27T21:30:11+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/10/VIDTSC.C1.png" excerpt: "The S.M.U.G. video digitizer's program disk: Videotex greyscale capture, Video 3-D relief images and the 1989 Eye By Night, for the Larken system." post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "John McMichael" slug: "john-mcmichael" taxonomy: "post_tag" url: "http://localhost/tag/john-mcmichael/" - 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: "John McMichael" slug: "john-mcmichael" taxonomy: "indiv" url: "http://localhost/indiv/john-mcmichael/" genre: - name: "Video" slug: "video" taxonomy: "genre" url: "http://localhost/type/video/" media_type: "Diskette" programmers: - name: "John McMichael" slug: "john-mcmichael" taxonomy: "indiv" url: "http://localhost/indiv/john-mcmichael/" download_url: "https://archive.org/download/timex-sinclair-software-archive/Videotex%20and%20Video%203-D%20%281989%29%28McMichael%2C%20John%29%28TS2068%29%28US%29%28Larken%20Disk%29.zip" tsrun_member: "Videotex and Video 3-D (1989)(McMichael, John)(TS2068)(US)(Larken Disk)/disk files/ANLYZR.BW.tap" mediadate: "1989" producer_company: - id: 10989 title: "John McMichael" type: "company" url: "http://localhost/company/john-mcmichael/" images: - url: "http://localhost/wp-content/uploads/2026/10/VIDTSC.C1.png" - url: "http://localhost/wp-content/uploads/2026/10/VIDTMM.C1.png" - url: "http://localhost/wp-content/uploads/2026/10/VD3DMM.C1.png" - url: "http://localhost/wp-content/uploads/2026/10/EYEMNU.C1.png" article_media: - id: 23683 title: "Program Review: Videotex, Video 3D and Videocopy" type: "article" url: "http://localhost/article/program-review-videotex-video-3d-and-videocopy/" - id: 23574 title: "Software Review: Videotex v.15" type: "article" url: "http://localhost/article/software-review-videotex-v-15/" - id: 23228 title: "TS2068 Software Review: Videotex Digitiser Software" type: "article" url: "http://localhost/article/ts2068-software-review-videotex-digitiser-software/" - id: 65093 title: "Image Capture with the S.M.U.G. B&W Video Digitizer" type: "article" url: "http://localhost/article/image-capture-with-the-s-m-u-g-bw-video-digitizer/" related_products: - id: 27943 title: "VideoTex" type: "product" url: "http://localhost/product/videotex/" - id: 27944 title: "Video 3-D" type: "product" url: "http://localhost/product/video-3-d/" related_content: - id: 72181 title: "Eye By Night" type: "computer_media" url: "http://localhost/computer_media/eye-by-night/" media_type_tags: "Video" license: false --- # Videotex and Video 3-D (S.M.U.G. Video Digitizer) This is the program disk for the S.M.U.G. black-and-white video digitizer board, in Larken (LKDOS) format. **It needs a TS2068 with the Larken disk interface, and the digitizer board to capture images**; it has not been converted for tape. Its menu runs three programs: - **Eye By Night V1.0** (© S.M.U.G. 1989): the digitizer’s capture program, in a 1989 Larken build with a new graphic menu (image sync and threshold, single and multiple scans, view, clean, flip, invert, save and load, printing). - **Videotex V1.0** (© John McMichael 1989): captures four black-and-white scans at different brightness thresholds into a 24K “master file” and shows them as a greyscale image, with a grey-level slider, invert, flip, filter, an overlay of a second image, and small or full-page printing on a dot-matrix printer. - **Video 3-D V1.0** (© John McMichael 1989): turns a Videotex master file into a pseudo-3-D relief image, with a choice of depth, normal or inverted relief and optional colour. The disk also holds a second, reworked set of the BASIC programs (the `.BW` files) and `ANLYZR.BW`, a “WIDJUP image capture analyzer” that plots a master file’s grey-level histogram. These look like William J. Pedersen’s working copies. S.M.U.G. sold Videotex and Video 3-D separately; the Okimate printing companion, VideoCopy, is not on this disk. The download has the raw disk image, every file from the disk as a TAP, the digitizer’s three sample captures (JEFF01–03, 24K Videotex master files from a companion disk, which load into Videotex, Video 3-D or the analyzer without the digitizer hardware), and a README. The programs load their menu screens from disk each time they return to a menu, and Videotex swaps its code out to the RAMdisk to print, so a tape conversion was not attempted. The pictures here are the disk’s own title and menu screens. ## Source Code ``` 10 LET p=VAL "16": LET clen=VAL "64555": LET char=VAL "64526": LET bwld=VAL "64514": LET bwst=VAL "64502": LET copy=VAL "64496": LET glev=VAL "64475": LET pok6=VAL "64261": LET pok5=VAL "64189": LET pok4=VAL "64187": LET pict=VAL "64181": LET horf=VAL "64122": LET invt=VAL "64105": LET pok2=VAL "64064": LET pok3=VAL "64068": LET pok1=VAL "64056": LET cnvt=VAL "64032": LET cler=VAL "64013": LET brlv=VAL "63874": LET scan=VAL "63872": GO SUB VAL "3010" 20 GO SUB VAL "1000": PRINT #VAL "4": LOAD "VIDTMM.C1"SCREEN$ 30 PRINT AT VAL "13",p; FLASH SGN PI;"::"; FLASH NOT PI 40 IF INKEY$<>"" THEN GO TO VAL "40" 50 GO SUB VAL "550": IF k$<>"B" THEN GO TO VAL "100" 60 IF INKEY$<>"" THEN GO TO VAL "60" 70 GO SUB VAL "1100": GO SUB VAL "580": LET n=NOT PI 80 PRINT #NOT PI; PAPER VAL "7"; INK NOT PI;AT NOT PI,NOT PI;w$;AT SGN PI,NOT PI;"--------Adjust for SCAN ";SGN PI+n*INT PI;"-------": POKE brlv,VAL "4"+n*INT PI: RANDOMIZE USR scan: IF INKEY$="" THEN LET n=NOT n: GO TO VAL "80" 90 GO TO VAL "20" 100 IF k$<>"C" THEN GO TO VAL "200" 110 LET f=NOT PI: CLS : PRINT #VAL "4": LOAD "VIDTCM.C1"SCREEN$ 120 IF INKEY$<>"" THEN GO TO VAL "120" 130 GO SUB VAL "550": IF k$<>"F" AND k$<>"A" AND k$<>"P" THEN GO TO VAL "120" 140 IF k$="F" THEN GO SUB VAL "3000": LET f=NOT f: PRINT AT VAL "19",VAL "16"; PAPER SGN PI; INK VAL "6";("ON/OFF" AND f=SGN PI)+("ON/OFF" AND f=NOT PI): GO SUB VAL "3010": GO TO VAL "120" 150 GO SUB VAL "1100": RANDOMIZE USR cler: FOR n=SGN PI TO VAL "4": CLS : PRINT #NOT PI; PAPER VAL "7"; INK NOT PI;AT NOT PI,NOT PI;w$;AT SGN PI,NOT PI;("Press any key to initiate " AND k$="P")+("------------- -------------" AND k$="A");AT SGN PI,VAL "13"+(VAL "13" AND k$="P");"SCAN ";n: GO SUB VAL "590" 160 IF INKEY$<>"" THEN GO TO VAL "160" 170 IF k$="P" THEN PAUSE NOT PI: BEEP VAL ".002",SGN PI 180 RANDOMIZE USR scan: IF f THEN RANDOMIZE USR clen 190 RANDOMIZE USR cnvt: NEXT n: GO TO VAL "20" 200 IF k$<>"O" THEN GO TO VAL "350" 210 LET n=VAL "4": GO SUB VAL "590": LET o=NOT PI 220 CLS : PRINT #VAL "4": LOAD "VIDTOM.C1"SCREEN$ 225 GO SUB VAL "3000": PRINT AT VAL "9",VAL "6"; PAPER SGN PI; INK VAL "5";("TRANSPARENT/OPAQUE" AND NOT o)+("TRANSPARENT/OPAQUE" AND o): GO SUB VAL "3010" 230 IF INKEY$<>"" THEN GO TO VAL "230" 240 GO SUB VAL "550": IF k$="R" THEN GO TO VAL "20" 250 IF k$="C" THEN GO SUB VAL "1100": PRINT #NOT PI; PAPER VAL "7"; INK NOT PI;AT NOT PI,NOT PI;w$;AT SGN PI,NOT PI;"-------Overlay image scan.------": RANDOMIZE USR scan: GO TO VAL "330" 260 IF k$="L" THEN CLS : LET s=INT PI: GO SUB VAL "600": IF s<>VAL "4" THEN GO TO VAL "330" 270 IF k$="E" THEN RANDOMIZE USR cler: PRINT AT VAL "20",VAL "6"; PAPER VAL "2"; INK VAL "6";" MASTER FILE ERASED ": PAUSE VAL "100": GO TO VAL "20" 280 IF k$="O" THEN LET o=NOT o: GO TO VAL "225" 290 IF k$<>"B" THEN GO TO VAL "220" 300 GO SUB VAL "1100": GO SUB VAL "580" 310 PRINT #NOT PI; PAPER VAL "7"; INK NOT PI;AT NOT PI,NOT PI;w$;AT SGN PI,NOT PI;"---Adjust overlay brightness.---": RANDOMIZE USR scan: IF INKEY$="" THEN GO TO VAL "310" 320 GO SUB VAL "1000": GO TO VAL "220" 330 IF o THEN RANDOMIZE USR invt 340 RANDOMIZE USR cnvt: GO TO VAL "20" 350 IF k$="S" THEN LET s=NOT PI: GO SUB VAL "600": GO TO VAL "20" 360 IF k$="L" THEN LET s=SGN PI: GO SUB VAL "600": GO TO VAL "20" 370 IF k$="V" THEN GO TO VAL "430" 380 IF (k$="5" AND p=VAL "4") OR (k$="8" AND p=VAL "28") THEN BEEP VAL ".03",VAL "20": GO TO VAL "50" 390 IF k$="5" OR k$="8" THEN PRINT AT VAL "13",p; PAPER VAL "7"; INK NOT PI;"''": LET p=p-VAL "2"+(VAL "4" AND k$="8"): PRINT AT VAL "13",p; FLASH SGN PI;"::"; FLASH NOT PI: LET glev=glev-INT PI+(VAL "6" AND k$="8"): GO TO VAL "50" 410 IF k$="Q" THEN GO TO VAL "595" 420 GO TO VAL "40" 430 GO SUB VAL "1100": PRINT #NOT PI;AT NOT PI,VAL "23"; PAPER VAL "7"; INK NOT PI;"Greyscale";AT SGN PI,VAL "26"; INVERSE SGN PI;" ";CHR$ ((VAL "46"+p/VAL "2")+(VAL "39" AND p>VAL "22"));" ": POKE pok4,PEEK glev: POKE pok5,PEEK (glev+SGN PI): POKE pok6,PEEK (glev+VAL "2"): RANDOMIZE USR pict: GO TO VAL "445" 440 BEEP VAL ".03",VAL "20" 450 IF INKEY$<>"" THEN GO TO VAL "450" 460 GO SUB VAL "550": IF k$="I" THEN RANDOMIZE USR invt: GO TO VAL "440" 470 IF k$="H" THEN RANDOMIZE USR horf: GO TO VAL "440" 480 IF k$="F" THEN RANDOMIZE USR clen: GO TO VAL "440" 490 IF k$="M" OR k$="P" THEN RANDOMIZE USR bwst: GO SUB VAL "1000": GO SUB VAL "2000": PAUSE NOT PI: RANDOMIZE USR bwld 491 IF k$="M" OR k$="P" THEN PRINT #VAL "4": GO TO VAL "4": PRINT #VAL "4": SAVE "CODE.C1"CODE VAL "64000",VAL "1536": PRINT #VAL "4": GO TO NOT PI: PRINT #VAL "4": LOAD "ZPRINT.C1"CODE VAL "64000" 492 IF k$="M" THEN RANDOMIZE USR VAL "64006" 494 IF k$="P" THEN RANDOMIZE USR VAL "64009" 496 IF k$="P" OR k$="M" THEN LET d=NOT PI: GO SUB VAL "1000": GO SUB VAL "2010": PAUSE NOT PI: PRINT #VAL "4": GO TO VAL "4": PRINT #VAL "4": LOAD "CODE.C1"CODE VAL "64000": PRINT #VAL "4": GO TO NOT PI: GO TO VAL "20" 500 IF k$="S" THEN RANDOMIZE USR bwst: LET s=VAL "2": GO SUB VAL "600": RANDOMIZE USR bwld 510 IF k$="R" THEN GO TO VAL "20" 520 IF (k$="5" AND p=VAL "4") OR (k$="8" AND p=VAL "28") THEN BEEP VAL ".03",VAL "20": GO TO VAL "460" 530 IF k$="5" OR k$="8" THEN LET p=p-VAL "2"+(VAL "4" AND k$="8"): LET glev=glev-INT PI+(VAL "6" AND k$="8"): GO TO VAL "430" 540 GO TO VAL "450" 550 LET k$=INKEY$: IF k$="" THEN GO TO VAL "550" 560 IF CODE k$>VAL "95" THEN LET k$=CHR$ (CODE k$-VAL "32") 570 BEEP VAL ".002",SGN PI: RETURN 580 PRINT AT VAL "13",VAL "6";"any key to main menu": PAUSE VAL "110": RETURN 590 POKE brlv,n+INT PI: POKE pok1,INT PI+(n-SGN PI)*VAL "4": POKE pok2,VAL "48"+(n-SGN PI)*VAL "64": POKE pok3,VAL "51"+(n-SGN PI)*VAL "68": RETURN 595 CLS : GO SUB VAL "3000": PRINT #VAL "4": LOAD "MENU.B1" 600 IF INKEY$<>"" THEN GO TO VAL "600" 602 GO SUB VAL "1300": GO SUB VAL "4000": POKE VAL "23658",VAL "11" 603 IF s=NOT PI OR s=VAL "2" THEN INPUT #NOT PI; PAPER SGN PI; INK VAL "5";AT NOT PI,NOT PI;"FILE SAVE NAME - 6 CHARS.";AT SGN PI,NOT PI;"NO EXTENTIONS -";AT SGN PI,VAL "20";n$: POKE VAL "23658",SGN PI 604 IF s=SGN PI OR s=INT PI THEN INPUT #NOT PI; PAPER SGN PI; INK VAL "5";AT NOT PI,NOT PI;"FILE LOAD NAME - 6 CHARS.";AT SGN PI,NOT PI;"NO EXTENTIONS -";AT SGN PI,VAL "20";n$: POKE VAL "23658",SGN PI 605 IF LEN n$<>VAL "6" THEN GO TO VAL "602" 606 PRINT #NOT PI;AT NOT PI,NOT PI; PAPER SGN PI; INK VAL "5";"FILE NAME CORRECT";AT SGN PI,NOT PI;" 'Y' OR 'N'";TAB VAL "21"; PAPER SGN PI; INK VAL "2";"""";n$; 607 IF s=NOT PI OR s=SGN PI THEN PRINT #NOT PI;".CM""": LET c$=".CM" 608 IF s=VAL "2" OR s=INT PI THEN PRINT #NOT PI;".CF""": LET c$=".CF" 609 IF INKEY$="n" THEN GO TO VAL "602" 610 IF INKEY$="y" THEN GO TO VAL "618" 612 GO TO VAL "609" 618 PRINT #VAL "4": GO TO SGN PI: LET b$=n$+c$: POKE VAL "23728",VAL "100" 620 IF s=NOT PI THEN GO SUB VAL "1400": PRINT #VAL "4": SAVE b$CODE VAL "38912",VAL "24576" 630 IF s=SGN PI THEN GO SUB VAL "1500": PRINT #VAL "4": LOAD b$CODE VAL "38912" 640 IF s=INT PI THEN GO SUB VAL "1500": PRINT #VAL "4": LOAD b$CODE VAL "16384" 660 IF s=VAL "2" THEN RANDOMIZE USR bwld: PRINT #VAL "4": SAVE b$CODE VAL "32000",VAL "6912": RANDOMIZE USR bwld 665 IF PEEK VAL "23728"=VAL "101" THEN PRINT AT VAL "12",VAL "7"; PAPER VAL "6"; INK VAL "2";" REENTER FILE NAME ": PAUSE VAL "200": GO TO VAL "600" 670 PRINT #VAL "4": GO TO NOT PI: RETURN 1000 BORDER SGN PI: PAPER SGN PI: INK SGN PI: CLS : RETURN 1100 GO SUB VAL "1200": BORDER SGN PI: PAPER VAL "7": INK NOT PI: CLS : PRINT #NOT PI; PAPER VAL "7"; INK NOT PI;AT NOT PI,NOT PI;w$;AT SGN PI,NOT PI;w$: RETURN 1200 LET w$=" ": RETURN 1300 GO SUB VAL "1100": PRINT #VAL "4": GO TO SGN PI 1310 IF s=NOT PI OR s=SGN PI THEN PRINT #VAL "4": CAT "^^^^^^.CM",: GO TO VAL "1330" 1320 IF s=VAL "2" OR s=INT PI THEN PRINT #VAL "4": CAT "^^^^^^.CF", 1330 PRINT #VAL "4": GO TO NOT PI: RETURN 1400 IF s=NOT PI OR s=VAL "2" THEN PAPER SGN PI: CLS : PRINT AT VAL "12",VAL "9"; PAPER VAL "2"; INK VAL "6";" SAVING FILE ": RETURN 1500 IF s=SGN PI OR s=INT PI THEN PAPER SGN PI: CLS : PRINT AT VAL "12",VAL "9"; PAPER VAL "2"; INK VAL "6";" LOADING FILE ": RETURN 2000 PRINT #VAL "4": LOAD "VIDTR1.C1"SCREEN$ : RETURN 2010 PRINT #VAL "4": LOAD "VIDTR2.C1"SCREEN$ : RETURN 3000 POKE VAL "23606",NOT PI: POKE VAL "23607",VAL "60": RETURN 3010 RANDOMIZE USR char: RETURN 4000 PRINT #NOT PI; PAPER SGN PI; INK VAL "6";AT NOT PI,NOT PI;" PRESS 'C' TO CONTINUE ";AT SGN PI,NOT PI; INK VAL "2";" PRESS 'Q' TO QUIT - MAIN MENU " 4010 IF INKEY$="c" THEN GO TO VAL "4040" 4020 IF INKEY$="q" THEN GO SUB VAL "1000": GO TO VAL "20" 4030 GO TO VAL "4010" 4040 RETURN 9990 CLEAR VAL "31999": PRINT #VAL "4": LOAD "VDTEXT.C1"CODE VAL "63488": RANDOMIZE USR VAL "63999": RUN 9994 STOP 9995 PRINT #VAL "4": SAVE "VIDEOT.B1" LINE VAL "9990" ```