Summer of '85: DOSBOS is rejected by ANALOG Computing
Although my first Atari computer was the Atari 400, we were able to upgrade it to an Atari 800XL by 1985. The 800XL was a tremendous improvement with its much improved keyboard and 64K of RAM. Eventually we also got a 1050 disk drive for it, which made programming much easier.
Writing programs and saving them on cassette was an exercise in patience that I didn’t have as a young teenager.
One of the first programs of a decent size that I actually completed was something I called DOSBOS. It was a “utility” that let you view disk contents (and a few other things) from BASIC. It was not very elegant as it was a BASIC program itself, but I worked on it for many weeks each day after school.
Still, I remember that my Dad was very impressed with it and encouraged me to submit it to a magazine. Magazine submissions required an accompanying printout, but we didn’t yet have a printer. As I recall, he was able to print my docs and the program listing at his work (on green bar paper) so that I could submit it.
My favorite Atari magazine back then was ANALOG, so that was the one I decided to submit it to. Alas, it was rejected, which shouldn’t have been too surprising. ANALOG published some high-quality programs and this first program of mine was just not good enough.
I still have a rejection letter for it, though! I really like this rejection letter, because it is personal with hand-written comments:
Looking at the dates on the printout and the letter, it took me about 2 months to hear back from ANALOG. I guess compared to that, waiting a couple days for something to get approved for the Apple App Store is nothing!
The docs for DOSBOS spanned 6 pages and were longer than the program itself which was only 2 pages!
Like I said, I’m not surprised DOSBOS was rejected. Being a BASIC program greatly limited its usefulness. To use it you had to LIST it to disk so it could be ENTERed. It used high line numbers so it would have less of a chance of overwriting a BASIC program you were working on, but if any lines were the same you could lose your code.
With Atari BASIC you could SAVE or LIST programs to disk. Saving was faster, but LOADing a SAVEd program erased what was in memory. LISTing was slower because it was writing the plain text to disk (instead of the tokenized version), which made the files bigger. But you could ENTER it which would act as if it were typed in and thus not erase what was in memory, unless the line numbers overlapped.
This meant the process to use DOSBOS when working on a BASIC program was:
ENTER “D:DOSBOS.LST”
GOTO 32000This started running it and then you could use it how you wanted.
Since you didn’t want it to stick around when saving your actual program, you would manually remove it by doing this:
GOTO DELETEThat command makes use of Atari BASIC’s ability to use variables at GOTO locations as I described in Programming the Atari with BASIC.
Frankly, it was probably just easier to save your program and type DOS to get to the actual DOS menu. Nevertheless, it was fun to create and it always feels good to finish something. And I have to say, I still really like the name DOSBOS!
Here is the original program listing, printed on that green bar paper that was so common at the time.
I actually still have this on a 5.25” floppy disk:
Here is the BASIC source code, although the inverse characters I used for text and comments do not display properly:
32000 REM DOSBOS VERSION 3.8 5-2-85 by Paul Lefebvre
32005 REM THIS PROGRAM USES LESS THAN 5K OF RAM !!!!
32010 REM ƒ…Õ†÷¡“…¡¬Ã≈”¨†œ–≈Œ†…œ√¬ß”
32015 CLR :DIM FL$(28),FL2$(28),FL3$(15):CLOSE #1:CLOSE #3
32020 OPEN #1,4,0,"E:":OPEN #3,4,0,"K:"
32025 POKE 54286,64:? "}":POKE 65,0:POKE 702,64:POKE 694,0:GOSUB 32300
32030 CLOSE #2:POSITION 0,(X+2)/2:? "††™™™™†ƒœ”¬œ”†≥Æ∏†‚˘†–·ıφÃÂÊ‚ˆÚ†™™™™†":POSITION 2,(X+4)/2
32035 ? "A. Enter File G. Unlock File":? "B. Exit DOSBOS H. Write Dos":? "C. Copy File ";
32040 ? "I. Format Disk":? "D. Delete File J. Load File":? "E. Rename File K. Save File":? "F. Lock";
32045 ? " File L. List File"
32050 POSITION 2,(X+16)/2:? "CHOICE?";:GET #3,CH:? CHR$(CH):IF CH=155 THEN GOTO 32025
32055 REM «œ‘œ†ƒ≈”…“≈ƒ†∆’Œ√‘…œŒ
32060 ON CH-64 GOTO 32155,32075,32120,32140,32235,32165,32175,32220,32205,32185,32085,32100
32065 ? "˝":POSITION 9,(X+16)/2:? " ":GOTO 32050
32070 REM ≈ÿ…‘†–“œ«“¡Õ
32075 CLOSE #1:CLOSE #3:? "}":CLR :POKE 65,3:LET DOSBOS=32000:DELETE=32480:TRAP 40000:? "∆“≈≈†“¡ÕΩ";FRE(0):END
32080 REM ”¡÷≈†∆…Ã≈
32085 ? "Save under what name?";:GOSUB 32450
32090 ? "Saving ";FL2$;" ...";:TRAP 32280:SAVE FL2$:GOTO 32025
32095 REM Ã…”‘†∆…Ã≈
32100 ? "List under what name?";:GOSUB 32450
32105 ? "Listing ";FL2$;" to disk ...";
32110 TRAP 32280:LIST FL2$,0,31999:GOTO 32025
32115 REM √œ–Ÿ†∆…Ã≈†®±©
32120 ? "Copy what file?";:GOSUB 32450
32125 ? "Insert source disk,press “≈‘’“Œ?";:GET #3,R:IF R<>155 THEN 32025
32130 MEM=FRE(0):GOTO 32390
32135 REM ƒ≈Ã≈‘≈†∆…Ã≈
32140 ? "Delete what file?";:GOSUB 32450
32145 ? "Deleting ";FL2$;" ...";:CMD=33:GOTO 32440
32150 REM ≈Œ‘≈“†∆…Ã≈†®±©
32155 ? "Enter what file?";:GOSUB 32450:GOTO 32375
32160 REM Ü√À†∆…Ã≈
32165 ? "Lock what file?";:GOSUB 32450:? "Locking ";FL2$;" ...";:CMD=35:GOTO 32440
32170 REM ’ŒÃœ√À†∆…Ã≈
32175 ? "Unlock what file?";:GOSUB 32450:? "Unlocking ";FL2$;" ...";:CMD=36:GOTO 32440
32180 REM Ü¡ƒ†ÔÚ†“’Œ†∆…Ã≈
32185 ? "Load what file?";:GOSUB 32450:TRAP 32275
32190 ? "Run this file also?";:GET #3,R:IF R=ASC("Y") THEN ? :? "Running ";FL2$;" ...";:RUN FL2$
32195 ? :? "Loading ";FL2$;" ...";:LOAD FL2$
32200 REM ∆œ“Õ¡‘†ƒ…”À†ƒ“…÷≈†£±
32205 ? "Press 'Y' to format disk ":? "in drive #1?";:GET #3,R:IF R<>89 THEN 32025
32210 ? :? "Formating disk in drive one ...";:CMD=254:FL2$="D1:":GOTO 32440
32215 REM ◊“…‘≈†ƒœ”Æ”Ÿ”†‘œ†ƒ“…÷≈†£±
32220 ? "Press 'Y' to write DOS.SYS ":? "to drive #1?";:GET #3,R:IF R<>89 THEN 32025
32225 ? :? "Writing DOS.SYS to drive one ...";:TRAP 32280:OPEN #2,8,0,"D:DOS.SYS":GOTO 32025
32230 REM “≈Œ¡Õ≈†∆…Ã≈
32235 ? "Old Filename?";:GOSUB 32450
32240 ? "New Filename?";:INPUT #1,FL3$:FL$=FL2$:FL$(LEN(FL$)+1)=",":FL$(LEN(FL$)+1)=FL3$
32245 ? "Renaming ";FL2$;" ...";:TRAP 32280:FL2$=FL$:CMD=32:GOTO 32440
32250 REM –’‘†ƒ≈÷…√≈†ßƒ±∫߆…Œ†∆…Ã≈Œ¡Õ≈
32255 IF FL$="" THEN GOTO 32025
32260 IF FL$(1,2)="D:" THEN FL2$=FL$:RETURN
32265 FL2$(1,3)="D1:":FL2$(4)=FL$:RETURN
32270 REM ≈““œ“†»¡ŒƒÃ≈“†®±©
32275 POKE 842,12:POKE 54286,64
32280 ? :? "ERROR-";:GOSUB 32350
32285 ? "Press any key to continue ";:GET #3,R
32290 GOTO 32015
32295 REM ƒ…“≈√‘œ“Ÿ†“œ’‘…Œ≈
32300 POKE 752,1:CLOSE #4:OPEN #4,6,0,"D:*.*":X=-1
32305 TRAP 32280:X=X+1:IF X=29 THEN 32340
32310 INPUT #4,FL$
32315 IF FL$(5,16)="FREE SECTORS" THEN POSITION 2,(X)/2:? FL$:POSITION 21,(X)/2:? "FREE RAM=";FRE(0):GOTO 32340
32320 FL2$=FL$(11):FL3$=FL$(1,10):FL$(11,11)=".":FL$(12)=FL2$:FL$(1,10)=FL3$
32325 IF X/2=INT(X/2) THEN POSITION 2,(X)/2:? FL$:GOTO 32305
32330 POSITION 21,(X-1)/2:? FL$
32335 GOTO 32305
32340 CLOSE #4:POKE 752,0:RETURN
32345 REM ≈““œ“†»¡ŒƒÃ≈“†®≤©
32350 IF PEEK(195)=170 THEN ? "∆ÈφŒÔÙ†∆ÔıÓ‰":RETURN
32355 IF PEEK(195)=144 THEN ? "ƒÈÛΆ…Û†–ÚÔلى":RETURN
32360 IF PEEK(195)=167 THEN ? "∆Èφ–ÚÔلى":RETURN
32365 ? PEEK(195):RETURN
32370 REM ≈Œ‘≈“†∆…Ã≈†®≤©
32375 ? "}":TRAP 32275:POKE 54286,0:POKE 54272,0:POSITION 2,15:? "POKE 842,12:GOTO 32025"
32380 POSITION 2,10:POKE 842,13:ENTER FL2$
32385 REM √œ–Ÿ†∆…Ã≈†®≤©
32390 CLOSE #1:LGTH=0:BYTE=0:SAV=0:DIM PROG(INT(MEM/8)):? :? "Copying ";FL2$;" ...";
32395 OPEN #1,4,0,FL2$:TRAP 32415
32400 GET #1,BYTE:LGTH=LGTH+1:PROG(LGTH)=BYTE
32405 IF LGTH>INT(MEM/8) THEN ? "Œœ‘†≈Œœ’«»†“¡Õ°˝":FOR DELAY=1 TO 500:NEXT DELAY:GOTO 32430
32410 GOTO 32400
32415 ? :? "˝Insert dest'n disk,press “≈‘’“Œ?";:GET #3,R
32420 OPEN #2,8,0,FL2$:TRAP 32280
32425 FOR SAV=1 TO LGTH:PUT #2,PROG(SAV):NEXT SAV
32430 CLOSE #1:CLOSE #3:GOTO 32015
32435 REM ÿ…œ†√œÕÕ¡Œƒ†
32440 TRAP 32280:XIO CMD,#2,0,0,FL2$:GOTO 32025
32445 REM …Œ–’‘†”’¬≠“œ’‘…Œ≈
32450 INPUT #1,FL$:GOSUB 32255:RETURN
32455 ? "}":? "ƒœ”¬œ”†ƒ≈Ã≈‘≈“†–“œ«“¡Õ":FOR ERASE=32000 TO 32475 STEP 5
32460 POSITION 2,5:? ERASE:? "POKE 842,12:NEXT ERASE"
32465 POSITION 0,3:POKE 842,13:STOP
If for some weird reason you really want to give DOSBOS a try, here is an ATR disk image you can download and boot from with your favorite hardware or emulator:
At the BASIC prompt, you can load DOSBOS with this command:
LOAD “D:DOSBOS.BAS”Want to help support Goto 10? Check out the store, which has some merch you might like.








I never submitted to a magazine. Mine compressed binary load files, and while I was at it, I threw in a bunch of DOS-like utilities into the menu. It was compiled BASIC. Wish I had the source code. https://archive.org/details/a8b_BLOC_Binary_Load_Compressor_19xx_Nibbler_Maniacs