--- title: "PeeWee-DOS" id: 72447 type: "computer_media" slug: "peewee-dos" url: "http://localhost/computer_media/peewee-dos/" markdown_url: "http://localhost/computer_media/peewee-dos.md" published_at: "2026-10-24T00:59:43+00:00" modified_at: "2026-10-24T00:59:43+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/10/peeweedos-1.png" excerpt: "A joke disk operating system that answers every command typed at its A> prompt with an absurd error message before staging a mock system meltdown." 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: "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: "Michael Leidel" slug: "michael-leidel" taxonomy: "indiv" url: "http://localhost/indiv/michael-leidel/" genre: - name: "Entertainment" slug: "entertainment" taxonomy: "genre" url: "http://localhost/type/entertainment/" media_type: "Program" programmers: - name: "Michael Leidel" slug: "michael-leidel" taxonomy: "indiv" url: "http://localhost/indiv/michael-leidel/" download_url: "https://archive.org/download/timex-sinclair-software-archive/PeeWee-DOS%20%281986%29%28Leidel%2C%20Michael%29%28TS2068%29%28US%29%28Program%29.zip" tsrun_member: "PeeWee-DOS (1986)(Leidel, Michael)(TS2068)(US)(Program)/PeeWee-DOS (1986)(Leidel, Michael)(TS2068)(US)(Program).tap" mediadate: "1986" images: - url: "http://localhost/wp-content/uploads/2026/10/peeweedos-1.png" - url: "http://localhost/wp-content/uploads/2026/10/peeweedos-2.png" article_media: - id: 42325 title: "DOMSDOS for 1000 & 2068" type: "article" url: "http://localhost/article/domsdos-for-1000-2068/" - id: 43067 title: "DOMSDOS" type: "article" url: "http://localhost/article/domsdos/" media_type_tags: "Entertainment" license: false --- # PeeWee-DOS PeeWee-DOS is an April Fool program that pretends to be a CP/M-style disk operating system. After a start-up beep and the banner “PeeWee-DOS VERSION 0.5 (C) Itty Bitty Machine Co.,1986”, it shows an `A>` prompt and accepts whatever you type. Each command you enter is answered with an error message from a list of 66, which runs from the plausible (“Non-System Disk in Drive A”, “BDOS error on Drive A”) to the silly (“Colonel error”, “Stack spilling out onto desktop”). Now and then it just says “Huh?”. When it runs out of messages, the program fakes a breakdown (“My mind is slipping, Dave…”), flashes REBOOT and starts again. REM lines credit Michael Leidel, who adapted it from DOMSDOS, a program taken from LIST Library Tape #4.6 that first appeared in April 1984 and was reprinted in April 1985. DOMSDOS is covered in the CATS and LISTing newsletter articles linked to this post. Two copies were on the Larken disks; this is the fuller 104-line version, as the other copy is missing about 30 of the error-message DATA lines. ## Program Analysis ### Start-up Line 30 creates `e$(100,64)`, and line 40 READs messages into it until it reaches the `"END"` marker. `POKE 23609,1` sets a short keyboard click, and the banner is followed by a series of low BEEPs that sound like a drive seeking. ### Command line Lines 100–116 make a simple line editor from `INKEY$`. Each character is echoed in front of an underscore cursor with a short BEEP. `CHR$ 12` (DELETE) backs the cursor up, and ENTER calls the routine at line 118. `POKE 23692,255` keeps the screen from stopping with a “scroll?” prompt as messages pile up. ### Error selection Line 120 replies “Huh?” one time in ten. Otherwise line 150 prints `e$(s)`, and line 160 moves `s` to the next message. When `s` reaches the `"END"` entry, line 151 plays out the meltdown with long PAUSEs, then a flashing red REBOOT, and RUN restarts the program. ### Notable Techniques - A message table read from DATA into a fixed-width string array, with a sentinel entry marking the end. - An `INKEY$` loop that gives a convincing command-line prompt, with its own cursor and backspace handling. - Uses `POKE 23692,255` to suppress the scroll prompt. ### Potential Issues - The messages are meant to be picked at random, but `n` is set to 0 in line 20 and never changed, so line 140 always starts at message 1. The test in line 160 (`RND+(1)*2<1`) can never be true, so the counter never resets. As a result the messages always come out in DATA order, which testing confirmed. Only the “Huh?” replies are random. - The `+(1)*` in lines 140 and 160 look like transcription slips for a plain `*`, carried over from the source listing. This copy came from a Larken disk. For tape, the LKDOS prefixes were removed from the SAVE and LOGICALL lines, and the saved variables were dropped, because the program builds its own message table. It was tested in ZEsarUX on a stock TS2068. ## Source Code ``` 1 REM PeeWee-DOS 2 REM Version 0.5 3 REM by Michael Leidel 4 REM adapted from DOMSDOS taken from LIST Library Tape #4.6 5 REM Originally appeared in April 1984, reprinted in April 1985. This is a DOS written in BASIC, and intended for use on all domestic computers. This version does not have any bugs...maybe 6 REM type RUN to "boot" your new DOS. GOTO 9999 to SAVE it to tape. 7 RANDOMIZE 10 BEEP .8,24 20 LET n=0: LET i=1: LET k=i 25 LET s=0 30 DIM e$(100,64) 40 READ e$(i): IF e$(i,1 TO 3)<>"END" THEN LET i=i+1: GO TO 40 50 CLS 55 POKE 23609,1 60 PRINT "PeeWee-DOS" 70 PRINT "VERSION 0.5" 80 PRINT "(C) Itty Bitty Machine Co.,1986" 90 PRINT 92 BEEP .8,-40: PAUSE 10: BEEP 1,-40: PAUSE 20: BEEP 2,-40: PAUSE 20: BEEP .005,12 95 PRINT 100 PRINT "A>_"; 102 POKE 23692,255 104 LET l$=INKEY$ 106 IF l$="" THEN GO TO 104 108 IF l$=CHR$ 13 THEN GO SUB 118: GO TO 95 112 IF l$=CHR$ 12 THEN PRINT (CHR$ 8)+(CHR$ 8)+"_ "+(CHR$ 8);: BEEP .01,48: PAUSE 3: GO TO 104 116 PRINT (CHR$ 8)+l$+"_";: BEEP .005,12: PAUSE 6: GO TO 104 118 REM process command 119 PRINT (CHR$ 8)+" ": PRINT : PRINT 120 IF RND<.1 THEN PRINT "Huh?": RETURN 140 IF S=0 THEN LET S=INT (RND+(1)*N+1) 150 IF e$(s,1 TO 3)<>"END" THEN PRINT E$(S) 151 IF e$(s,1 TO 3)="END" THEN PRINT "Wait a minute...": PAUSE 300: PRINT : PRINT : PRINT "Wait a minute...": PAUSE 300: PRINT : PRINT : PRINT "Oh, no! Major fatal type error!!": PAUSE 300: PRINT : PRINT : PRINT "My mind is slipping, Dave...": PAUSE 300: PRINT : PRINT : PRINT "I can feel it, Dave...": PAUSE 300: PRINT : PRINT : PRINT "Good evening, gentlemen. I would like to...": PAUSE 90: CLS : PRINT AT 12,12; INK 2; FLASH 1;" REBOOT ": PAUSE 200: RUN 160 IF S>0 THEN LET S=S+1: IF RND+(1)*2<1 THEN LET S=0 170 RETURN 172 DATA "Non-System Disk in Drive A" 174 DATA "Command not found" 180 DATA "Can't continue error" 190 DATA "Frankly, can't continue error" 200 DATA "Can't take any more error" 210 DATA "BDOS error on Drive A" 220 DATA "Disc drive inoperable" 230 DATA "Main Bus failure error" 240 DATA "Are you sure?" 250 DATA "I mean, are you really sure??" 260 DATA "Command not recognized" 270 DATA "Reboot and retry" 280 DATA "Division by Zero error" 290 DATA "Division by Zero error again" 300 DATA "Please reconsider..." 310 DATA "Please, please reconsider" 320 DATA "Pressing wrong keys error" 330 DATA "Help, I'm on fire!" 340 DATA "You can't be serious..." 350 DATA "Try keying HELP" 360 DATA "Key SYSGEN to recover" 365 DATA "Illegal Subscript" 370 DATA "Illegal substance - call POLICE" 380 DATA "Out of memory" 390 DATA "Out of sight" 400 DATA "Out of mind" 410 DATA "Too much" 420 DATA "Too complex" 430 DATA "Much too complex" 440 DATA "NEXT without FOR" 450 DATA "FOR without NEXT" 460 DATA "FOR without FOR" 470 DATA "NEXT without NEXT" 480 DATA "GOTO undefined" 490 DATA "GOTO Jail...Do not pass GO...Do not collect $200" 500 DATA "Bad subscript" 510 DATA "Naughty subscript" 520 DATA "EVIL subscript!!" 530 DATA "Syntax error" 535 DATA "Surtax error" 540 DATA "Syntax currently 15" 550 DATA "File locked" 560 DATA "File missing" 570 DATA "File missing...believed killed in action" 580 DATA "Language not available" 590 DATA "Language not printable" 592 DATA "Command Interpreter error" 594 DATA "Slight error" 595 DATA "Major error" 596 DATA "Colonel error" 597 DATA "Fatal error" 598 DATA "Fatal Kernel error" 599 DATA "Apoplectic error" 600 DATA "Unspeakable error" 610 DATA "Program too large" 620 DATA "Program too small" 630 DATA "Range error (aim higher)" 632 DATA "Stack Underflow" 634 DATA "Stack Overflow" 636 DATA "Stack spilling out onto desktop" 640 DATA "Write Protected" 650 DATA "Really Write Protected" 660 DATA "Read Protected" 670 DATA "Read AND Write Protected" 680 DATA "Not Worth Reading At All..." 682 DATA "End-of-File Encountered" 690 DATA "END" 9992 SAVE "DOS.B1" LINE 1 9998 REM was LKDOS-only ```