README for ID, ID.OBJ, and source files by Scott Blackman Many years ago I wrote a short little program to identify various hardware features of my Apple II+. This program slowly grew as I acquired an Apple //e, and again when I got my Apple IIgs. Most recently, I have found it useful to test out the emulated hardware configuration of the various Apple II emulators which have been cropping up. As it sits, the program can identify many different hardware configurations, with the main constraint being that it has been tested only with hardware I could get my hands on. A couple of areas where I think this program shines: (1) It can detect how many 5.25 drives are attached to the Disk II. (2) It flips bits in order to detect cards which are installed in Slot 3 (not Auxiliary slot!), and slots which are currently disabled on a IIgs. (3) It detects the Mockingboard in what appears to be the right way, using interrupts, which I derived from the Ultima III bootup code. (4) It can identify some stuff in the IIgs Memory slot. I think this is a good one to use in conjunction "SlotScan" by Robert S. Claney, since I know we use a few different methods, and can identify a few non-overlapping things. I am also releasing the source code to this program, in the hope that people wanting to identify some hardware will extract and use my routine. I am releasing this software into the public domain. Use it or modify it as you see fit. I only ask that, if you distribute a similar "ID" program with one or more of these routines, you put my name on it too. **** IMPORTANT **** This program does things to your Apple that don't follow all the rules. It reads slot memory directly, makes SCSI and Smartport calls directly, makes the processor execute undocumented/illegal instructions, and otherwise does stuff that might not follow all the rules. I am NOT responsible if you break your computer, reformat your hard drive, or otherwise cause any undesirable effect to occur as a result of running my program. YOU are responsible for all the results of this program which I am releasing into the public domain. Of course, it is important to add that this program works beautifully on my computer, and that I think it only bends the rules, rather than breaking them. :-) **** CREDITS **** I derived some of the code in this program from a couple of sources ranging from reference books to commercial software. The //e, //c, IIgs references and TechNotes, of course, were invaluable. I got the idea for the drive detection by figuring out how Copy II+ did it, but I wrote my own code to do the job. The GS memory slot code was based on code I found in the AE RamKeeper CDA. The Mockingboard code was derived from code in the Ultima III bootup routine. I dug into the Apple High-Speed SCSI Utilities (Rev D) software to get information on the SCSI calls to identify the physical hard drive (rather than the partitions), get its ID, etc. There are lots of other little tidbits like that I picked up from various places, probably including comp.sys.apple2, inCider, Nibble, Call-A.P.P.L.E., and those other gems of the early 80's. Finally, the idea for the program came from a beta version of PRODOS (version B.4, dated 04-FEB-83 on the splash screen) -- the STARTUP file gave a (very rudimentary) "slot inventory" and I said, Gee that's neat. I believe later versions of the ProDOS system disks also had a slot inventory which you could get by pressing "S" at a menu. That ProDOS program is also where I got the information to detect the Silentype printer. **** SUMMARY **** Here are the things I know it can identify: Computer type (II, II+, //e, //e+, various //c, IIgs) Memory (16K language card, 64K 80-col card, IIgs memory) - does not include Slot 0 RAM over 16K, Auxiliary slot memory over 64K, or slot cards such as the Apple II Memory Expansion Card or RamFactor (although these slot cards show up under the Slot Inventory) Processor type - does this via illegal 6502 opcodes; perhaps not the safest way on some 6502 machines Game controller used/not used One-wire shift key mod (paddle 3) The slot inventory can detect: - Empty slots (the value of a memory location is not constant) - Cards following the Pascal I.D. protocol (but I don't just stop there for cards I can further identify) - Super Serial card - ASIO serial card - Apricorn graphics printer interface card - Mockingboard - Silentype printer card - Thunderclock - AppleMouse - ProDOS block devices - ProFILE - AE RamFactor - Disk II (13 or 16 sector, and number of drives attached, by looking at the latch value) - SmartPort - Apple II Memory Expansion Card - IIgs built-in RAM disk - ROM disk (such as AE RamKeeper) - UniDisk 3.5 - Apple 3.5 drive - SCSI card - returns drives, not just partitions, by making SCSI calls - I think it distinguishes Rev C vs Rev D Apple SCSI cards (I have a Rev D), but I have NEVER TRIED IT with a RamFast. - Auxiliary slot contents independently detected in addition to Slot 3. - IIgs Memory slot contents identified by a routine I grabbed from the AE RamKeeper CDA. Detects RamKeeper and its piggyback card(s). This only detects a couple of AE cards by name, since it came from AE originally.