VOGONS


DOS Questions

Topic actions

Reply 240 of 258, by wierd_w

User metadata
Rank Oldbie
Rank
Oldbie

Fastlynx can do serial, lpt, and network (over ipx) xfers between vintage computers, and can do local file management. Could fit on a 360k floppy with some prodding. Could 'bootstrap itself' to a remote system that has ctty, for when you don't have a diskette drive on your victim pc.

So, YES.

Has a splitscreen mode, midnight-commander like interface.

It's vintage buyware.

Reply 241 of 258, by DaveDDS

User metadata
Rank Oldbie
Rank
Oldbie
wierd_w wrote on 2026-02-23, 16:51:

... Could fit on a 360k floppy with some prodding ...

Must be pretty big - DDLINK at 18k can fit on a 360k with lots of other stuff, no "prodding" needed.
The whole idea in its design was to take as little space as possible on a disk already full of other tools.

... Could 'bootstrap itself' to a remote system that has ctty, for when you don't have a diskette drive on your victim pc ..

This the first time I've heard of a similar tool which could do this! - DDLINK has had the ability to bootstrap itself over a serial connection since day one, but I've not seen this ability elsewhere (Even though an ImageDisk system is guaranteed to have "a floppy " ... it might not be a "normal" one (could be an 8" drive - and no guarantee that other/newer systems you might want to move things from have a floppy) - This was a "fun" develp[ment.

I used DDLINK to put stuff on a Poqet PC I got last year - no interface cables, internal drive batteries were dead so not easy to put stuff (incl DDLINK) onto it - fortunately I found pinout for expansion connector and was able to make a serial csble ... bootstrap DDLINK and go from there)

This was a dead-slow 8088 based machine, couldn't do DOS serial at more than about 2400 ... putting something big on would have been painful.
(assuming it would have run on an 8088)

Dave ::: https://dunfield.themindfactory.com ::: "Daves Old Computers"->Personal

Reply 242 of 258, by wierd_w

User metadata
Rank Oldbie
Rank
Oldbie

Yup. Has that ability.

Also *does* run on 8088s, and can work on MDA displays.

As for its *size*, it was the 'FX.CMD' file that was the whale. It's not needed to operate at all, it's the help file. Omitting it from the diskette was my standard practice.

Reply 243 of 258, by DaveDDS

User metadata
Rank Oldbie
Rank
Oldbie

Good to hear it works on 8088 - so many good things don't anymore.

The documentation for DDLINK is a separate 1050line/42k DDLINK.TXT which obviously isn't needed after you get a bit used to it. I also go out of my way to make the prompts along the bottom line show the key you use to activate a function:

A)ttr C)opy D)rive E)rase M)ult N)ew O)ption R)ename V)iew CR=Cd ESC=Quit

Once acivated a function will menu-prompt for any extra information it needs/

It also has some help users might need "on the go" built in, things like Command line, diagrams if you need to make a Comm or Lpt cable, and Keycodes for automated operation. The idea is that you only need to DDLINK.COM (and a packet driver if you are using network)

C:\>ddlink -?
DavesDataLINK - move/manipulate files via: serial, parallel or network

Use: DDLINK options

opts: /B[speed] Bootstrap remote (via com) [9600]
/M force Monochrome video
/S Server mode
P=[ii][,tttt] specify Packet int,type [60-80,DD11]
C=1-4[,speed] specify Com port ?C for [none,115200]
L=1-3|addr specify Lpt port ?L more [none]
K=keys automate Keycodes ?K help [none]
B=128-4096 specify Blocksize [1024]
T=factor specify Timeout factor [6]
E=1-255 cause server to End (errorlevel) [none]
Server causes end AFTER one session \ useful in
Client "" "" immediately / automated scripts
V=n override protocol Version [none]
may let different versions perform basic transfers (other feature
limitations) useful to update one system from another.

Start SERVER (/S) before CLIENT (no /S) [interaction is on CLIENT]

Dave Dunfield - https://dunfield.themindfactory.comDDLINK requires a "null modem" serial cable:
C:\>ddlink -?
DB9-DB9 DB25-DB25 DB9-DB25
-----------------------------------------------
GND 5-5 7-7 5-7 GND \
RXD 2-3 3-2 2-2 TXD > Always
TXD 3-2 2-3 3-3 RXD /
DTR 4-6 20-6 4-6 DSR \
DSR 6-4 6-20 6-20 DTR > DOS also needs
RTS 7-8 4-5 7-5 CTS > (for /B only)
CTS 8-7 5-4 8-4 RTS /

DDLINK uses the HARDWARE assignments for COM1-COM4:
COM# Addr IRQ
1 03F8 4
2 02F8 3
3 03E8 4
4 02E8 3
C:\>ddlink -?L
DDLINK requires a "bidirectional data-transfer" parallel cable:

DB25-DB25
---------------------------
GND 25-25 GND
D0 2-15 ERROR \
D1 3-13 SLCT > Must be wired
D2 4-12 PE > between BOTH
D3 5-10 ACK > ends (two wires)
D4 6-11 BUSY /
C:\>ddlink -?K
K= codes:

Any ASCII character ( use ~~ for single ~ )
~u Up ~U pgUp ~N eNter
~d Down ~D pgDn ~_ Space
~l Left ~h Home
~r Right ~e End ~E Escape

This help is actually stored at the end (after code and used data) of the .COM file, and can be removed (if you really need <18k) and the program still works.

It auto-detects color or mono (but you can force mono)

We could continue comparing them all day - lets just agree that they are both fairly decent/usable programs.

Dave ::: https://dunfield.themindfactory.com ::: "Daves Old Computers"->Personal

Reply 244 of 258, by wierd_w

User metadata
Rank Oldbie
Rank
Oldbie

Indeed.

It just amuses me that you basically reimplemented it whole cloth, from first principles, and it came out much the same way.

Only so many ways to do something right, afterall. 😁

Yours is a bit smaller on disk though, and 'actually free'.

Reply 245 of 258, by DaveDDS

User metadata
Rank Oldbie
Rank
Oldbie

Yeah, there are differences - everyone "thinks differently" which really shows up on software UI design. (One of the main reasons I've alwaus been kinda anal about writing most of tools I use daily)

Lookiong at your screenshot, I note it lists COM1 and COM2 on the local side, and only COM1 or the remote - perhaps you were using it with systems that only had 2/1 COM ports... It can't know whats available on the remote end yet.. Which raises a question, does FastLynx work with all 4 possible COM ports (on either end and during bootstrap)?

Also curious to know how it bootstraps and if it works in FreeDos? I start with "copy COMx: DDLINK.COM" then send a very small bootloader, then runs it to transfer the actual image. This relies on COPY being "mostly binary" and works well in MS-DOS and PC-DOS but didn't work in FreeDos - I ended up rewriting the bootloader to XOR encode/decode, avoid some characters that FreeDos didn't transfer!

Re: DDLINK: Easily move files between/To/From DOS systems

The other way I sometime bootstrap over serial is by "typing" the bootloader code intp DEBUG and running it - this relies on DEBUG being present and exactly the same interface... My DDLB tool which does this has some options to let you configure how it interfaces with DEBUG.

Alao, I'd forgotten, one of the recent improvements I made to DDLINK was to give it full context-menu help. I did this by adding DDLHLP.EXE (12k) which DDLINK chains to if it's present. If it's NOT present, DDLINK doesn't offer the '?' help key.

Dave ::: https://dunfield.themindfactory.com ::: "Daves Old Computers"->Personal

Reply 246 of 258, by DustyShinigami

User metadata
Rank Oldbie
Rank
Oldbie

In a batch file, is there a way of checking if an error has happened via a command? I’m trying to get FASTVID to initialise before Quake loads. However, if it fails with a ‘bad command or filename error’, it considers the check to be true and won’t bother running it again if I try.

OS: Windows 98 SE
CPU: Slot 1 Pentium III Coppermine 933MHz (SL448)
RAM: Kingston 256MB 133MHz
GPU: Nvidia 16MB Riva TNT/128MB Geforce 4 Ti 4200
Motherboard: ABit AB-BE6-II Intel 440BX
Sound Card: Sound Blaster Live Value CT4670

Reply 247 of 258, by Harry Potter

User metadata
Rank Oldbie
Rank
Oldbie

"IF ERRORLEVEL 1 CODE" will execute CODE if the last command returned at least 1. Prepending NOT to ERRORLEVEL executes CODE if <1. If you want the error to be exactly 1, try "IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 CODE". For errors between 1 and 3, use "IF ERRORLEVEL 1 IF NOT ERRORLEVEL 4 CODE". I don't know what error number is returned if an illegal command or filename is encountered, though. Maybe 255? If a particular program is giving you that error, try copying the program to C:\DOS or adding its path to the PATH statement in AUTOEXEC.BAT. If you do the latter, each path is to be separated by a semicolon.

Joseph Rose, a.k.a. Harry Potter
Working magic in the computer community

Reply 248 of 258, by NeoG_

User metadata
Rank Member
Rank
Member
DustyShinigami wrote on Yesterday, 19:38:

In a batch file, is there a way of checking if an error has happened via a command? I’m trying to get FASTVID to initialise before Quake loads. However, if it fails with a ‘bad command or filename error’, it considers the check to be true and won’t bother running it again if I try.

Bad command or filename seems to indicate the file or path doesn’t exist rather than FASTVID exiting

I’m curious what circumstances lead to the filename being invalid, however if that is the case you can do an IF EXISTS C:\PATH\TO\FASTVID.EXE to check if the filename/path is valid before running a command

98/DOS Rig: BabyAT AladdinV, K6-2+/550, V3 2000, 128MB PC100, 20GB HDD, 128GB SD2IDE, SB Live!, SB16-SCSI, PicoGUS, WP32 McCake, iNFRA CD, ZIP100
XP Rig: Lian Li PC-10 ATX, Gigabyte X38-DQ6, Core2Duo E6850, ATi HD5870, 2GB DDR2, 2TB HDD, X-Fi XtremeGamer

Reply 249 of 258, by DustyShinigami

User metadata
Rank Oldbie
Rank
Oldbie
Harry Potter wrote on Yesterday, 21:01:

"IF ERRORLEVEL 1 CODE" will execute CODE if the last command returned at least 1. Prepending NOT to ERRORLEVEL executes CODE if <1. If you want the error to be exactly 1, try "IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 CODE". For errors between 1 and 3, use "IF ERRORLEVEL 1 IF NOT ERRORLEVEL 4 CODE". I don't know what error number is returned if an illegal command or filename is encountered, though. Maybe 255? If a particular program is giving you that error, try copying the program to C:\DOS or adding its path to the PATH statement in AUTOEXEC.BAT. If you do the latter, each path is to be separated by a semicolon.

Yeesh. That's a lot to take in and process. ^^; I'm not sure what the error code would be in this case. But it's currently running from C:\DOSPRO\FASTVID. I've had the path statement added in the autoexec file and initiated in a particular DOS boot option. I've managed to get it working correctly now, but adding a command that checks if it gives an error would be useful, if possible.

OS: Windows 98 SE
CPU: Slot 1 Pentium III Coppermine 933MHz (SL448)
RAM: Kingston 256MB 133MHz
GPU: Nvidia 16MB Riva TNT/128MB Geforce 4 Ti 4200
Motherboard: ABit AB-BE6-II Intel 440BX
Sound Card: Sound Blaster Live Value CT4670

Reply 250 of 258, by DaveDDS

User metadata
Rank Oldbie
Rank
Oldbie

The simple answer is "if errorlevel ...." can be used to make .... conditional on the exit status of the last comamnd.

But... this can be tricky for newbies in DOS batch files. The tricky part is that it really means "if errorlevel >= x" ... so if you are doing commands on certain exit codes the commands will be performed on any higher exit code. This causes problems for things like GOTO - you have to test them in REVERSE order.

if errorlevel 1 goto x1
if errorlevel 2 goto x2

Is WRONG - it will always GOTO x1 if the exit code is 1 or HIGHER (you need to test higher ones first)

Here is a little .BAT file I wrote to show how it works (note: ERRLVL is a command of mine - see followind description :

@echo OFF
errlvl -q %1
if errorlevel 2 echo {2orHigher}
if errorlevel 3 echo {3}
if errorlevel 2 echo {2}
if errorlevel 1 echo {1}
if errorlevel 0 echo {always}
And some sample outputs:
R:\> TST 1
{1}
{always}
R:\> TST 2
{2orHigher}
{2}
{1}
{always}
R:\> TST 3
{2orHigher}
{3}
{2}
{1}
{always}

Note that testing ERRORLEVEL 0 makes no sense as that command will ALWAYS run (errorlevel can't be <0)

It is also important to realize that ERRORLEVEL is specifically set by programs when they terminate, and not all bother to set it. You should test whatever you are planning to use to confirm if/how it sets errorlevel!

ErRoR LeVeL test

use: ERRLVL [options] value(0-255) [1]
"" "" program_file [arguments] [2]
opts: -Q Quiet (less output)
-Maddress write exit-code to Memory at address
-Bfilename "" to Binary file \ Mutually
-T"" "" Text file > exclusive
-Ccommand execute Command (with exit-code) / (only one)
[1] Exits with the specified exit-code value (ERRORLEVEL)
[2] runs a program and reports it's exit-code
may optionally write that exit-code to: Memory or File
or execute a command with it in args.
if program_file does not exist in current directory, ERRLVL will search along
your PATH.
If program_file has no extension, ERRLVL will try: .BAT .COM and .EXE

address assumes hex \_ available : %=binary $=hex
value assumes decimal/~ base prefix: @=octal .=Decimal
-Ccommand may: '~_'=' ' '~('='<' '~~'='~' '~%@$.'=exit-code
contain : '~!'='|' '~)'='>' (%binary/@octal/$hex/.decimal)

Dave Dunfield - https://dunfield.themindfactory.com
Last edited by DaveDDS on 2026-02-26, 23:08. Edited 1 time in total.

Dave ::: https://dunfield.themindfactory.com ::: "Daves Old Computers"->Personal

Reply 251 of 258, by DustyShinigami

User metadata
Rank Oldbie
Rank
Oldbie
NeoG_ wrote on Yesterday, 21:32:
DustyShinigami wrote on Yesterday, 19:38:

In a batch file, is there a way of checking if an error has happened via a command? I’m trying to get FASTVID to initialise before Quake loads. However, if it fails with a ‘bad command or filename error’, it considers the check to be true and won’t bother running it again if I try.

Bad command or filename seems to indicate the file or path doesn’t exist rather than FASTVID exiting

I’m curious what circumstances lead to the filename being invalid, however if that is the case you can do an IF EXISTS C:\PATH\TO\FASTVID.EXE to check if the filename/path is valid before running a command

Okay, that's useful to know. I have managed to get it working right, but it seems a bit picky with how it's set up. I've had to really spell it out for it to initiate. Something like:

C:
CD C:\DOSPRO\FASTVID
FASTVID 111 -128 d0000000
CD\

That's more or less how I had it in the autoexec.bat and in my game's custom BAT file.

OS: Windows 98 SE
CPU: Slot 1 Pentium III Coppermine 933MHz (SL448)
RAM: Kingston 256MB 133MHz
GPU: Nvidia 16MB Riva TNT/128MB Geforce 4 Ti 4200
Motherboard: ABit AB-BE6-II Intel 440BX
Sound Card: Sound Blaster Live Value CT4670

Reply 252 of 258, by DaveDDS

User metadata
Rank Oldbie
Rank
Oldbie
NeoG_ wrote on Yesterday, 21:32:

... I’m curious what circumstances lead to the filename being invalid ...

Some quick reasons come to mind: Contains characters not allowed in filenames. Longer than 8.3 in systems not supporting long filenames. I'm sure there are more reasons.

Dave ::: https://dunfield.themindfactory.com ::: "Daves Old Computers"->Personal

Reply 253 of 258, by DaveDDS

User metadata
Rank Oldbie
Rank
Oldbie
NeoG_ wrote on Yesterday, 21:32:

... Bad command or filename seems to indicate the file or path doesn’t exist ...

I think he wants to know within a .BAT file, not on screen.

Somewhere I have a tool I wrote to deal with programs not setting errorlevel and DosBox not being able to redirect stderr; that runs a command and searches for certain strings of text in on-screen output after running it ... and returns an exit code indicating which (if any) strings occurred. If anyone wants, I could probably dig it up.

Dave ::: https://dunfield.themindfactory.com ::: "Daves Old Computers"->Personal

Reply 254 of 258, by NeoG_

User metadata
Rank Member
Rank
Member
DustyShinigami wrote on Yesterday, 22:57:
Okay, that's useful to know. I have managed to get it working right, but it seems a bit picky with how it's set up. I've had to […]
Show full quote

Okay, that's useful to know. I have managed to get it working right, but it seems a bit picky with how it's set up. I've had to really spell it out for it to initiate. Something like:

C:
CD C:\DOSPRO\FASTVID
FASTVID 111 -128 d0000000
CD\

That's more or less how I had it in the autoexec.bat and in my game's custom BAT file.

Not so much that it's picky but in DOS many situations are contextual, for example if the working directory changes in a batch file it can cause some applications not to work correctly. Those need to be taken into account when working in batch scripts. Explicitly changing the working directory before running a program is the safest way to make it work, but then you are changing back to CD\ or the root folder, I think quake doesn't care but some other apps may have an issue with it unless the batch file does another CD back to the game directory.

98/DOS Rig: BabyAT AladdinV, K6-2+/550, V3 2000, 128MB PC100, 20GB HDD, 128GB SD2IDE, SB Live!, SB16-SCSI, PicoGUS, WP32 McCake, iNFRA CD, ZIP100
XP Rig: Lian Li PC-10 ATX, Gigabyte X38-DQ6, Core2Duo E6850, ATi HD5870, 2GB DDR2, 2TB HDD, X-Fi XtremeGamer

Reply 255 of 258, by DustyShinigami

User metadata
Rank Oldbie
Rank
Oldbie
NeoG_ wrote on Yesterday, 23:41:
DustyShinigami wrote on Yesterday, 22:57:
Okay, that's useful to know. I have managed to get it working right, but it seems a bit picky with how it's set up. I've had to […]
Show full quote

Okay, that's useful to know. I have managed to get it working right, but it seems a bit picky with how it's set up. I've had to really spell it out for it to initiate. Something like:

C:
CD C:\DOSPRO\FASTVID
FASTVID 111 -128 d0000000
CD\

That's more or less how I had it in the autoexec.bat and in my game's custom BAT file.

Not so much that it's picky but in DOS many situations are contextual, for example if the working directory changes in a batch file it can cause some applications not to work correctly. Those need to be taken into account when working in batch scripts. Explicitly changing the working directory before running a program is the safest way to make it work, but then you are changing back to CD\ or the root folder, I think quake doesn't care but some other apps may have an issue with it unless the batch file does another CD back to the game directory.

I see. It just seems a bit out of the ordinary when usually I’ve put something like:

C:\DOSPRO\APP\PROGRAM.EXE /SWITCH

…and it works. Or, I’ve set the directory at the start, then added it like:

%PROGRAMLOCATION%\PROGRAM.EXE

OS: Windows 98 SE
CPU: Slot 1 Pentium III Coppermine 933MHz (SL448)
RAM: Kingston 256MB 133MHz
GPU: Nvidia 16MB Riva TNT/128MB Geforce 4 Ti 4200
Motherboard: ABit AB-BE6-II Intel 440BX
Sound Card: Sound Blaster Live Value CT4670

Reply 256 of 258, by DustyShinigami

User metadata
Rank Oldbie
Rank
Oldbie
DaveDDS wrote on Yesterday, 22:54:
The simple answer is "if errorlevel ...." can be used to make .... conditional on the exit status of the last comamnd. […]
Show full quote

The simple answer is "if errorlevel ...." can be used to make .... conditional on the exit status of the last comamnd.

But... this can be tricky for newbies in DOS batch files. The tricky part is that it really means "if errorlevel >= x" ... so if you are doing commands on certain exit codes the commands will be performed on any higher exit code. This causes problems for things like GOTO - you have to test them in REVERSE order.

if errorlevel 1 goto x1
if errorlevel 2 goto x2

Is WRONG - it will always GOTO x1 if the exit code is 1 or HIGHER (you need to test higher ones first)

Here is a little .BAT file I wrote to show how it works (note: ERRLVL is a command of mine - see followind description :

@echo OFF
errlvl -q %1
if errorlevel 2 echo {2orHigher}
if errorlevel 3 echo {3}
if errorlevel 2 echo {2}
if errorlevel 1 echo {1}
if errorlevel 0 echo {always}
And some sample outputs:
R:\> TST 1
{1}
{always}
R:\> TST 2
{2orHigher}
{2}
{1}
{always}
R:\> TST 3
{2orHigher}
{3}
{2}
{1}
{always}

Note that testing ERRORLEVEL 0 makes no sense as that command will ALWAYS run (errorlevel can't be <0)

It is also important to realize that ERRORLEVEL is specifically set by programs when they terminate, and not all bother to set it. You should test whatever you are planning to use to confirm if/how it sets errorlevel!

ErRoR LeVeL test

use: ERRLVL [options] value(0-255) [1]
"" "" program_file [arguments] [2]
opts: -Q Quiet (less output)
-Maddress write exit-code to Memory at address
-Bfilename "" to Binary file \ Mutually
-T"" "" Text file > exclusive
-Ccommand execute Command (with exit-code) / (only one)
[1] Exits with the specified exit-code value (ERRORLEVEL)
[2] runs a program and reports it's exit-code
may optionally write that exit-code to: Memory or File
or execute a command with it in args.
if program_file does not exist in current directory, ERRLVL will search along
your PATH.
If program_file has no extension, ERRLVL will try: .BAT .COM and .EXE

address assumes hex \_ available : %=binary $=hex
value assumes decimal/~ base prefix: @=octal .=Decimal
-Ccommand may: '~_'=' ' '~('='<' '~~'='~' '~%@$.'=exit-code
contain : '~!'='|' '~)'='>' (%binary/@octal/$hex/.decimal)

Dave Dunfield - https://dunfield.themindfactory.com

Wow, this is... heavy, heh. I would have to put all this into practise. Looks confusing and complicated. ^^; But thanks for taking the time out to do this. I just wish I understood it.

OS: Windows 98 SE
CPU: Slot 1 Pentium III Coppermine 933MHz (SL448)
RAM: Kingston 256MB 133MHz
GPU: Nvidia 16MB Riva TNT/128MB Geforce 4 Ti 4200
Motherboard: ABit AB-BE6-II Intel 440BX
Sound Card: Sound Blaster Live Value CT4670

Reply 257 of 258, by DaveDDS

User metadata
Rank Oldbie
Rank
Oldbie
DustyShinigami wrote on Today, 00:16:

Wow, this is... heavy, ... Looks confusing and complicated.

It's not that complicated, just a couple things you need to remember:

1) if ERRORLEVEL n
Means the last exit code was EQUAL to or HIGHER than n
This basically means you often has to test in reverse order, which is unnatural enough that it sometimes "catches" more experienced users:
Re: MS-DOS autostart CD without getting Abort-Retry-Fail

2) The exit code (errorlevel) is set by the program, and is not overly standardized or enforced.
Most programming languages will exit with 0 (success) if you just terminate (or worse, a random exit code) - You have to explicitly set the exit code when you exit, and a lot of people don't bother and just get whatever their programming language gives.

Exit codes are by far the easiest way to send a small nugget of information back to a calling program (which may be a batch file) - so I personally tend to use this feature a lot as many of my tools can invoke others

Last edited by DaveDDS on 2026-02-27, 13:39. Edited 1 time in total.

Dave ::: https://dunfield.themindfactory.com ::: "Daves Old Computers"->Personal

Reply 258 of 258, by DustyShinigami

User metadata
Rank Oldbie
Rank
Oldbie
DaveDDS wrote on Today, 13:09:
It's not that complicated, just a couple things you need to remember: […]
Show full quote
DustyShinigami wrote on Today, 00:16:

Wow, this is... heavy, ... Looks confusing and complicated.

It's not that complicated, just a couple things you need to remember:

1) if ERRORLEVEL n
Means the last exit code was EQUAK to or HIGHER than n
This basically means you often has to test in reverse order, which is unnatural enough that it sometimes "catches" more experienced users:
Re: MS-DOS autostart CD without getting Abort-Retry-Fail

2) The exit code (errorlevel) is set by the program, and is not overly standardized or enforced.
Most programming languages will exit with 0 (success) if you just terminate (or worse, a random exit code) - You have to explicitly set the exit code when you exit, and a lot of people don't bother and just get whatever their programming language gives.

Exit codes are by far the easiest way to send a small nugget of information back to a calling program (which may be a batch file) - so I personally tend to use this feature a lot as many of my tools can invoke others

That thread you've linked to, about autostarting a CD without abort, retry, or fail, will be a good one for me to practise with. That can happen to me a bit as well. Usually when I set CDBQ for a game, I'm not sure if it's because my CD drive is too fast for it to keep up, but often it'll act like there is no CD present, and gives me the abort, retry, and fail error. Usually I've had to get it to load up the root of the CD in order to get it to recognise it properly. Like this:

:CDSPD

IF %CDSPD% == TRUE GOTO FINAL
F:\
DIR/W
D:
%CDBQ%\CDBQ /P2 /DM /S1200
SET CDSPD=TRUE

OS: Windows 98 SE
CPU: Slot 1 Pentium III Coppermine 933MHz (SL448)
RAM: Kingston 256MB 133MHz
GPU: Nvidia 16MB Riva TNT/128MB Geforce 4 Ti 4200
Motherboard: ABit AB-BE6-II Intel 440BX
Sound Card: Sound Blaster Live Value CT4670