Advanced SCSI Programming Interface, or ASPI, is the glue that binds most major CDR software packages to the CDR drives. With so many different types of hardware out there, it's hard for software developers to add support in for each and every one of them. Adaptec, Inc. took that as a problem and created the ASPI layer that SCSI owners have grown to love.

Think of the following process flow:
Software -> Generic ASPI Layer -> Specific ASPI Interpreter -> SCSI Drive. Because not all drive manufacturers could decide on drivers that all had the same interface, Adaptec made a standard that forced them to agree on one section of the process flow. What the device drivers wanted to do underneath that was up to them. Now, software developers are able to interact with SCSI devices at a pretty high level, leaving the messier of workings to others like Adaptec and Tekram.

This article will attempt to give you an idea about how the makers of CDRWin, FireBurner, BlindRead, CloneCD, and others went about writing their applications to do what they wanted to do.

As a brief warning... there are many people out there who could program circles around me. I don't profess to be a master C/C++ programmer, but I know enough to be dangerous. =) So, if you've got suggestions about how to change things, by all means, let me know, and I'll take them under considerations.

Adaptec used to have their ASPI SDK (Software Development Kit) available for download from their FTP site, but that is no more. It now costs $13.50 USD to obtain. Ugh. I'd recommend a search for "ASPI SDK" on your favorite search engine (such as Google) to see if you can find more information about where one might find what we need. For reference, there's 2 important files for Win32 ASPI Programming: wnaspi32.h (winaspi.h for 16-bit version) and scsidefs.h. Since it appears that I can no longer distribute the files, your best bet is to grab the horribly mutilated .h -> .html files located at those links. All we really need are the header files, as we'll be interfacing with the dynamic link library (dll). If you find better links, please do let me know, thanks!

Any sample code that is provided will probably be fairly straight C, with *possibly* some C++ mixed in. It will be compilable under Microsoft Visual C++. I do not own Borland/Inprise, so I can't check that out. Porting the code shouldn't be a problem. If anyone would like to port the code to their favorite language (straight C++, Delphi/Pascal, etc.), let me know and I'll link your code port.

All source code offered will be under the Open Source GPL, unless otherwise noted. This is for fun and learning, let's keep it that way.

Once you've got your compiler and header files up (header files would help a lot for reference even if you weren't going to compile anything), we'll be ready to start exploring ASPI Programming!

Prev Next >>