--- title: "LKDOS Utilities v2.1 (Larken Edition)" id: 72958 type: "computer_media" slug: "lkdos-utilities-v2-1-larken-edition" url: "http://localhost/computer_media/lkdos-utilities-v2-1-larken-edition/" markdown_url: "http://localhost/computer_media/lkdos-utilities-v2-1-larken-edition.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/2022/04/20230809-041332.jpg" excerpt: "Richard Hurd's LKDOS disk utilities: batch copying, copies between mismatched drives, quad-density formats and conversions, with docs." 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: "Richard Hurd" slug: "richard-hurd" taxonomy: "indiv" url: "http://localhost/indiv/richard-hurd/" genre: - name: "Utility" slug: "utility" taxonomy: "genre" url: "http://localhost/type/utility/" media_type: "Diskette" programmers: - name: "Richard Hurd" slug: "richard-hurd" taxonomy: "indiv" url: "http://localhost/indiv/richard-hurd/" download_url: "https://archive.org/download/timex-sinclair-software-archive/LKDOS%20Utilities%20v2.1%20%281989%29%28Hurd%2C%20Richard%29%28TS2068%29%28CA%29%28Larken%20Disk%29.zip" tsrun_member: "LKDOS Utilities v2.1 (1989)(Hurd, Richard)(TS2068)(CA)(Larken Disk)/disk files/AUTOSTART.tap" mediadate: "1989" article_media: - id: 23386 title: "LKDOS Disk Utility Double to Quad" type: "article" url: "http://localhost/article/lkdos-disk-utility-double-to-quad/" related_content: - id: 47663 title: "RAMDisk Backup & Restore Utility" type: "document" url: "http://localhost/document/ramdisk-backup-restore-utility/" - id: 24827 title: "Toronto Timex-Sinclair Users Club" type: "usergroup" url: "http://localhost/usergroup/toronto-timex-sinclair-users-club/" - id: 72734 title: "Larken System Utility Programs (Larken Edition)" type: "computer_media" url: "http://localhost/computer_media/larken-system-utility-programs-larken-edition/" media_type_tags: "Utility" license: false --- # LKDOS Utilities v2.1 (Larken Edition) LKDOS Utilities v2.1 is Richard Hurd’s set of disk utilities for the Larken (LKDOS) disk system, written for the Toronto T/S Users Club in 1988–89. **It needs a TS2068 with the Larken disk interface**; it has not been converted for tape. The disk’s own menu runs: - **The Copy Machine**: copies or erases a batch of files flagged in a 64-column file list. Its copy routine comes from Larry Kenny’s MOVE and its 64-column display from Wes Brzozowski’s SINCUS 64 Column BASIC. - **ODDBALL COPY v2**: copies whole disks between two drives of different kinds, through a buffer disk. - **FORMAT PLUS**: formats custom quad-density disks with room for up to 159 files. - **DOUBLE TO QUAD** v1.1: converts double-density disks to quad density. - **SINGLE DRIVE COPY** and **LARKEN TWO DRIVE COPY** (“tweaked by Richard Hurd”). - **RAMDISK BACKUP & RESTORE**. The programs are credited “© 1988 Richard Hurd for the Toronto T/S Users Club”, “(C) 1989 Richard Hurd” and “by R.H.”. The disk includes the Copy Machine instructions, an annotated copy of its BASIC and the ODDBALL COPY documentation, which are included as text. The menu loads FORMAT PLUS as `form+.B1`, but the file extracted from this disk is named `form.B1`. The download has the raw disk image, every file from the disk as a TAP, the three documents as text, and a README. ## Source Code ``` 5 REM THE COPY MACHINE 10 RANDOMIZE USR 100: POKE 23730,39999: RANDOMIZE USR 100: LOAD "batch.C1"CODE 20 RANDOMIZE USR 60000 30 PRINT a$ 40 IF INKEY$<>"" THEN GO TO 40 50 IF INKEY$="" THEN GO TO 50 60 RANDOMIZE USR 60651 100 PAPER 1: INK 9: BORDER 1 110 POKE 23658,8: CLS : PRINT AT 0,0; INVERSE 1;" "'" LKDOS "'" COPY "'" MACHINE "'" "''' INVERSE 0;"Catalog A Disk?" 120 IF INKEY$="" THEN GO TO 120 130 IF INKEY$<>"Y" THEN GO TO 170 140 INPUT "Drive 0 1 2 3 or 4 ";a: IF a>4 THEN GO TO 140 150 CLS : RANDOMIZE USR 100: GO TO a: RANDOMIZE USR 100: CAT "",: INPUT "Another Catalog? "; LINE b$: IF b$="Y" THEN GO TO 140 160 CLS 190 FOR f=0 TO 7: POKE USR "a"+f,0: NEXT f: POKE USR "a"+3,255 200 RANDOMIZE USR 60000 210 PRINT INK 0 220 BRIGHT 1 230 PRINT FLASH 0 280 RANDOMIZE USR 52837 290 IF PEEK 56872=2 THEN GO TO 310 300 IF PEEK 56872=1 THEN RANDOMIZE USR 100: GO TO PEEK 56880: RANDOMIZE USR 53225 310 BEEP .1,10 320 RANDOMIZE USR 60651: CLEAR 31999: PRINT AT 0,0; INVERSE 1;" "'" LKDOS "'" COPY "'" MACHINE "'" " 330 PRINT 340 IF PEEK 56864=1 THEN PRINT TAB 10;"MODE> BATCH COPY" 350 IF PEEK 56864=2 THEN PRINT TAB 10;"MODE> COPY ALL" 360 IF PEEK 56864=3 THEN PRINT TAB 10;"MODE> BATCH ERASE" 370 GO TO 390 380 STOP : REM gotta start over 390 DELETE 0,220: IF PEEK 56876=0 THEN GO TO 500 400 DIM n$(PEEK 56876,9) 410 RANDOMIZE USR 40063: RANDOMIZE USR 46195 420 LET u=PEEK 56876 430 LET Odrv=PEEK 56860: LET Ddrv=PEEK 56862 440 IF PEEK 56864=3 THEN GO TO 460 450 GO TO 1000 460 REM batch erase 470 FOR n=1 TO u 480 RANDOMIZE USR 100: ERASE n$(n), 490 NEXT n 500 GO TO 8000 999 REM batch copy 1000 FOR n=1 TO PEEK 56876 1005 PRINT AT 16,6;" ": GO SUB 7000 1010 FOR f=1 TO 9: POKE Onam,CODE n$(n,f): LET Onam=Onam+1: NEXT f 1130 FOR a=1 TO 9: POKE Dnam,CODE n$(n,a): LET Dnam=Dnam+1: NEXT a 1140 PRINT AT 10,0;"Copying ";n$(n);AT 10,18;" on Drive ";Odrv 1150 PRINT AT 12,14;"TO" 1160 PRINT AT 14,8;n$(n);" on Drive ";Ddrv 1170 IF n>1 AND Odrv=Ddrv THEN GO SUB 7320 1200 RANDOMIZE USR 100: GO TO Odrv: LET rt=USR indir: IF rt<>0 THEN GO TO rt 2000: LET rt=USR Ld1: IF rt<>0 THEN GO TO rt 2010 LET Tlen=PEEK 34002: LET pass=1: IF Tlen>(PEEK Nbcs)-1 THEN LET Pass=2 2100 GO SUB DesDrv 2200 LET rt=USR Svnam: IF rt<>0 THEN GO TO rt 2300 LET rt=USR Svdata: IF rt<>0 THEN GO TO rt 2400 IF pass=1 THEN GO TO 5000 2500 GO SUB OrgDrv: LET rt=USR Ld2: IF rt<>0 THEN GO TO rt 2700 GO SUB DesDrv: LET rt=USR Svdata: IF rt<>0 THEN GO TO rt 5000 LET rt=USR Svend: IF rt<>0 THEN GO TO rt 5050 PRINT AT 16,6;"File Copied": BEEP .1,10: BEEP .1,10 5060 NEXT n 5070 GO TO 8000 5990 REM -- Error Msgs -- 6000 PRINT FLASH 1;"File Not Found": GO TO 6500 6010 PRINT FLASH 1;"Disk Full": GO TO 6500 6020 PRINT FLASH 1;"Data Error": GO TO 6500 6030 PRINT FLASH 1;"Rename Error": GO TO 6500 6500 BEEP .5,5: BEEP .5,1: PAUSE 100: GO TO 1005 7000 LET Mem=34800: LET Owka=34700: LET Dwka=34750: LET Onam=34600: LET Dnam=34650 7100 LET indir=32000: LET Ld1=32003: LET Ld2=32006: LET Svnam=32009: LET Svdata=32012: LET Svend=32015: LET Renam=32018 7150 LET OrgDrv=7300: LET DesDrv=7400: LET Nbcs=34003: LET Bsize=34004 7160 REM DDen Bsize=5120 Nbcs=7 SDen Bsize=2050 Nbcs=14 7170 POKE Nbcs,7: RANDOMIZE USR 100: POKE Bsize,5120 7200 RETURN 7300 IF Odrv<>Ddrv THEN RANDOMIZE USR 100: GO TO Odrv: RETURN 7320 INPUT "Insert Source Disk"; LINE a$: RETURN 7400 IF Odrv<>Ddrv THEN RANDOMIZE USR 100: GO TO Ddrv: RETURN 7420 INPUT "Insert Destination Disk"; LINE a$: RETURN 8000 REM end routine 8010 CLS : PRINT AT 0,0; INVERSE 1;" "'" LKDOS "'" COPY "'" MACHINE "'" " 8030 PRINT ''"1) RESTART COPY MACHINE" 8040 PRINT '"2) RESTART AN AUTOSTART PROGRAM" 8050 PRINT '"3) RESET COMPUTER" 8060 PRINT ''" PRESS 1 - 3" 8070 IF INKEY$<>"" THEN GO TO 8070 8080 IF INKEY$="" THEN GO TO 8080 8090 IF INKEY$="3" THEN PRINT USR 0 8100 CLS : PRINT "WHICH DRIVE 0-4?" 8110 IF INKEY$<>"" THEN GO TO 8110 8120 IF INKEY$="" THEN GO TO 8120 8130 LET d=CODE INKEY$-48: IF d<0 OR d>4 THEN BEEP .1,0: GO TO 8130 8140 RANDOMIZE USR 100: GO TO d 8150 RANDOMIZE USR 100: NEW 9998 STOP 9999 RANDOMIZE USR 100: SAVE "cpmach.B1" LINE 10 ```