The official spamwichtm unexpurgated comprehensive guide to troubleshooting those pesky modem calls...
Step one: GET INFO
Here are a few sample questions that should give you some ideas on where to begin with your APS procedure:
•	What is the specific problem statement?
•	What Kind of modem is it?
•	Internal or external (or PCMCIA)?
•	What com port/resources does Modem take?
•	Does the caller have 3rd party / proprietary communications software? Are these apps set to answer incoming calls?
•	What serial ports are present? What are their resources?
•	What serial communications devices are present? Another modem? A multifunction card? 
•	Where is the mouse? What kind of mouse is it?
•	What IRQs are available? What other devices are present on the system?
•	What Kind of display adapter do you have? (remember, if the caller has an s3 display adapter, there are known issues with having a modem on com4;  namely, you’ll get GPF’s when you initialize the modem.  Using the updated s3 drivers will fix that; otherwise you’ve got to get the modem off com4)

Step 2: Confirm that the port works.
1) 	in the dos vm, echo atdt >com<x>.  If this works, proceed to using a TAPI application.  If It fails, goto step 2.
2) 	Shut down, restart, press F8, command prompt only.  Echo ATDT > Com<x>. If it fails, check to see whether it is a “win modem”.  There’s a new set of modems out there that will not work in command prompt only. If it is, proceed to Troubleshooting the port.  If it is not, you have reached a support boundary. If it doesn’t work in dos, you’re not responsible to make it work in Windows.
How to determine if it’s a port issue:
		If ANY of the following are true, quit fussing over the modem- it’s a port issue.

1) 	Protect mode and safe mode (or debug) disagree on port resources.
2) 	You receive errors accessing / writing to / opening the port
3) 	win95 claims that there’s another application controlling the port and you disagree
4) 	echo ATM1L3X1DT > com<x> fails. (where x= the port to which 95 has the modem set)
5) 	The modem fails the diagnostics/more info query and you have already reinstalled the driver.

What the tests really do:
“More info” from control panel/modems/diagnostics : all it does is test whether the modem is present on the designated port and is functional.  This test does not rely upon a functional win95 port driver. A successful ‘more info’ tells you 2 things:
1) 	the modem is present and functional to the degree that it is capable of receiving AT commands.  (This does not mean that the port is functional, nor does it confirm that the Modem driver is present or functional.)
2) 	the modem is present on the port selected on the diagnostics tab.

Echo ATM1L3X1DT12345 > Com<x>: tests the port. This test does not rely upon a present or functional Modem driver.  A successful echo in the dos VM tells you the following:
1) 	The modem is present on the port designated as <x>.
2) 	The port driver on port <x> is functional.  (This does not mean that the modem driver is good—it simply means that the AT commands that you sent to the modem made it there via a call to com<x>
Step 3: Eliminate Device Contention.
If you suspect device contention, perform the following:
1) 	Create a new hardware profile. (just as a backup.  Note that this will generate a message on reboot: “windows cannot determine what configuration you are in...” and this is okay. Just remember what configuration you’re in.)
2) 	Remove all the ports, modem(s) involved. (Windows will ask you if you want to remove each device in all profiles?  The answer is No. We only want to do so in your test profile.)
3) 	On the subsequent restart, boot into your test profile with a step by step confirmation from the F8 menu.  Say no to autoexec.bat and config.sys (in case of real mode drivers interfering)
4) 	If nothing detects, run hardware detection.   If ports detect but the modem doesn’t, run add new hardware/choose NO on detection, select “modem” as hardware type, allow Windows to detect the modem.  (This will just search existing ports and is very quick.) If nothing detects then it’s time to look at hardware a bit more closely...
5) 	If, after hardware is redetected you still have the same conflicts or problems, try removing from your test profile any nic cards, multifunction cards, “other devices” etc  that look suspicious and repeat steps 2-5.

Remember, the things we’re looking for when screening for device contention are:
1)  3rd party device drivers or apps loading from win.ini or system.ini
2) 	Real mode drivers/TSR’s from auto/config
3) 	Protect mode devices that are misbehaving.

Step 4:  Once you’re confident that the port is functional, eliminate contending or
incompatible communications applications from the equation:
If you suspect that there’s a 3rd party driver seizing the port or that some other communications app is locking out a win95 comm app, perform the following and repeat the test
	1)System.cb conversion:
		Rename system.ini and win.ini
		Copy system.cb to system.ini
		Edit the new system.ini to include the following:
			[boot]	
			Drivers=Mmsystem.dll
			Comm.drv=comm.drv		(this sets the port driver)
			Mouse.drv=mouse.drv (or “lmouse.drv” if they have a logitech mouse)
			[386enh]
			mouse=*vmouse, msmouse.vxd
			device=*vcd			(virtual communications device)
	2)    Step by step boot no auto no config (can be done in conjunction with step 1)
	3)    Confirm that there is nothing in the startup folder
		If at this point you still show something active in your close program dialog box,
4) 	Reference the Run key in regedit: Use Q137637 and your discretion.  Always back up the   registry before going in 
5) 	When was the Telephon.ini file last accessed? Today? Reconstruct a fresh Telephon.ini file:
		Back up current telephon.ini
		Run Tapiini.exe at the Start/run command line.
6) 	Is comm.drv (control panel/modems/more info/driver) 5856 bytes, 7/11/95 9:50am?  If not, extract a fresh copy from cab3.  While you’re at it, also extract unimodem.vxd and serial.vxd. 
A note on boundaries:  If a legacy/3rd party application is binding the port and the caller wishes to use it and use 32-bit/tapi applications, you have the right to refer the caller to the support for those programs.  Usually at that point the fix is to get the upgrade.  If Hyperterminal and phone dialer don’t work, it’s your problem.   Also note that UnimodemV will allow multiple tapi apps to monitor the same port via the operator.

How to use Debug***** to query Bios Vector Tables for serial port info:
1) 	Get to a dos prompt.
2) 	At the Dos prompt, type the word “debug” (no quotes)
3) 	You will be greeted with a hyphen prompt. At the prompt, type “d40:0” (no quotes)
4) 	You will be greeted with a Table which follows the this format:

0040:0000    F8 03 F8 02 E8 03 E8 02--78 03 00 00 00 00 00 00      ..........x..............

In this table, the only information we’re interested in is on the top line, left hand side:  The information is arrayed in reverse-order data-bit pairs.  Note that in this example, there are 4 ports present. 
“F8 03” refers to a port’s i/o range 03f8\03ff, default settings for com1
“F8 02”  refers to i/o 02f8-02ff, default to com2
“E8 03” is default for com3
“E8 02” is default for com4
Info that’s on the right hand side refers to lpt ports. In this example, i/o 0378-037f is a standard lpt1.

5) 	To Quit debug, type ‘q’ at the hyphen prompt.

*****It should be noted that Debug is an exceptionally powerful utility and many many bad things could happen if your customer should do things here that you don’t tell him/her to do. Misuse of debug can cause the computer not to be able to reboot.  Use Debug AT YOUR DISCRETION.  This triage uses debug only as an information gathering tool.  Note that booting into safe mode and checking the port resources there accomplishes the same thing...

How to change com settings in windows 95:
First, determine if the port in question is supplied by an internal modem or supplied by the i/o card.
1) 	If the port is being supplied by the modem, change the i/o range of the modem and the port will follow. Changing the i/o range of the modem will cause the com# on the port to change. Sometimes changing the settings of the modem will require soft-setting or jumpering on the modem itself and then removing the modem from device manager and redetecting.  Remember, if the modem is plug and play, often it will not show its resources.  If this is the case, sometimes there are ways to change it’s plug and play properties... usually at this point, however, it’s a question of the modem’s plug and play functionality failing or a driver update is indicated; in either case, you’ve reached a boundary.
2) 	If the port is supplied by an i/o card (i.e., not connected to the modem) then it’s range is defined by the bios.  If we consider that device manager has no ability to affect the reality of the bios settings (in fact, device manager’s job is to synch up operating system settings with bios settings) this explains why moving them about using device manager is so hit-and-miss.  To change these resources, then, you go to the bios and do it there.***  You then remove the ports from device manager and redetect them if they do not reflect the changes you have made.  (This technique is a bit crude, but quite effective. For more info, see Q123992 or the table on the next page.)
 ***This calls for judgement on your part. If you shudder with fear at the thought of taking a particular customer into the bios, try a hardware configuration that doesn’t require changing the port addresses or DECLARE THAT YOU HAVE REACHED A BOUNDARY and send them to their hardware specialist/bios manufacturer.

Basic configurations for serial ports in Windows 95:
Default com# 	Basic configuration 	Irq	IRQ Editable?	      I/O Range	           Editable?
1	0	4	No	03f8-03ff	No	
	1	4	Yes	03f8-03ff	No	
2	2	3	No	02f8-02ff	No	
	3	3	Yes	02f8-02ff	No	
3	4	4	No	03e8-03ef	No	
	5	4	Yes	03e8-03ef	No	
4	6	3	No	02e8-02ef	No	
	7	3	Yes	02e8-02ef	No	
Various	8	Variable	Yes	Variable	Yes	
*Note that in the above table that odd-numbered basic configurations allow manual IRQ setting.  Basic configuration 8 allows full configuration in all respects.  To change the com#, change the I/O range and Windows will assign the default name to it.

Other useful info:
The AT command set is the global list of vocabulary words that are used by modems.  Not all modems support all AT commands, which is why we sometimes see failure codes on an otherwise successful modem query.  Hayes and US Robotics are pretty much the standard compatibility measure.
Here is a reakdown of some of the more popular AT commands -
AT - attention
M1 - speaker on until carrier detected.  
M2 - speaker always on
L2  - speaker volume set to 2 (=medium)
L3 -  Speaker volume set to highest.
DT - dial with tones, DP would be used if they have pulse phone service only 
12345 - just a few numbers for the modem to dial so we have something to listen for.  
HO - Hang up line
X0 - Sends OK, CONNECT, RING, NO CARRIER, and ERROR (according to USR)
X1 - Sends connect speed in addition to X0 (Use to dial without waiting to detect carrier)
/ - pause for 125 milliseconds
“ abcdefg....” - quotes allow you to dial letters or  numbers literally
, - Comma in dialing string = pause for two seconds
@ - In dialing string, wait for second dial tone (useful for manually dialing calling card numbers)

If the modem is on the same phone line you’re speaking on, it usually won’t dial because it can’t get a dial tone on the line.  You should be able to hear the *click* of the modem going on and off hook.  If you use the X1 command in the dialing string it should disable any checking abilities the modem may have that may be getting in the way of successfully completing this test: it tells any Hayes- compatible modem to go ahead and dial without waiting for carrier detection.
This would make our string look like this:
C:\echo ATM1L3X1DT12345 > com<x>

If the modem is on a different phone line and you don’t hear it dial, try
C:\ Echo ATM1L3X1DT(<phonenum>) > com <x> 
where <phonenum> is the number of the line on which you’re speaking.  You should hear it either register a busy signal over the pc speaker or try to interrupt the phone call which you’re on.
If there's no modem on the particular com port you're trying, you should get a "write fault error,"  "error writing comX" - but the lack of this error does not necessarily mean the modem is  responding. 
The only solid confirmation that we have of a responsive modem is when we hear it pick up the line and dial.

Still more information:

Are the ports configured correctly in the bios?
Obviously, this is beyond our support boundary, but you need to know how to approach it...
remember, ports are themselves devices and can conflict with each other.
Is the modem an internal? Is it “plug and play”?
If the answer to either of the above is “yes”, it’s important to know that this modem has its own UART, i.e. it supplies its own port.  As such, this port is another device to take into consideration; it also behaves differently than does its external cousins:

Major Differences between Internal and External Modems in Windows 95:

The Internal:					The External:					
1) 	Supplies its own UART, which it is capable of configuring, either through pnp functionality, soft setting, or by using jumpers on the modem itself.
	1) 	Uses an existing port, which it is not capable of modifying.
	
2) 	To move the port in question, modify the i/o range of the modem and its native port will follow.  On Internal modems, you set the modem settings to the i/o range of the port you want to designate.  For example, to set the internal modem’s port to com3, set the modem’s i/o range to 03e8-03ef.	2) 	To move the port, modify the properties of the port.  Remember, if you move the port to a range that does not have a resource allocated to a port in the bios, this port should not work.  Before moving Win95 i/o ranges, confirm that there’s a device available to move it to.

Setting an external modem to the same range as the target port will cause a conflict between the modem and the port.
	
3) 	Cannot use an “active” port; i.e. a resource that is already allocated in the bios.  To set an internal modem to Com2 02f8 where 02f8 is already allocated to a port in the bios, you need to either disable the port in the bios or change it’s resource settings in the bios.
	3) 	Must use an existing port.  To move the modem to a different port, usually it’s simplest to do it physically; unplug it from one plug and plug it to the next.  Some i/o controller cards support soft switching if this is for some reason necessary.

4) 	Has plug and play compatibility in that it can grab available resources on every boot; often fully plug and play Modems will not show resources in devman.
	4) 	Sometimes bills itself as plug and play inasmuch as it will work if the port to which you assign it is valid and has no conflicts.  Remember, a plug and play external modem will not succeed in functionally configuring itself it the port it chooses is not configured correctly.  If the port is not a plug and play device, a pnp external modem won’t fix it.

Fax issues:
Remember, check to see that the modem supports fax. The same rules apply to  fax modems: the port must first work, the modem must check out with an echo or more info query.
1) 	Is the modem a CAS Modem?  If the modem is a Cas modem, it is not supported by fax in Windows 95.  CAS modems are pretty rare, and usually really old.  Tip: if the modem is the intel satisfaxion, it’s a CAS modem.
2) 	Is it a Network Modem?  Windows 95 supports the sharing of a network modem (as a network printer) but for users to be able to connect to the share, exchange has to be running on the server and needs to be the first delivery service selected in control panel/ (mail&fax/ delivery tab) or else you’ll hear errors like “the specified server does not exist..” or “message undeliverable”.

Pcmcia issues:
1) 	Confirm that the protect mode socket services are installed.  If there is no pcmcia controller in devman, or pcmcia icon in control panel, they’re using real mode services.  They are usually configured in config/auto or system.ini/win.ini. If they are using protect mode drivers and they don’t work, it is a win95 problem.  If they are using protect mode drivers, they must be properly set up for it to be a win95 issue.  If there is a controller in devman/icon in control panel, there should be no active pcmcia statements in any of the above files.
2) 	The drivers for pcmcia socket services are: Pccard.vxd and Socketsv.vxd.  (If the machine uses the databook chipset, Dbkvssd.vxd is used in place of Pccard.vxd.  The databook chipset is used in Austin laptops.  Win95 also provides support for the databook pcmcia chipset- Maxstor Desk Runner cards use this.)  The following chipsets are intel-compatible: Cirrus Logic, Vadem, SCM Microsystems, Ricoh (IBM 755), Compaq, VLSI.
3) 	In general, Pcmcia devices follow the same rules as Internal modems: they are Typically software set or plug and play, supply their own UART.

Definitions: 

UART:   Universal Asynchronous Receiver Transmitter: The chip that controls the port.  Most PC serial communications today are performed this way.  By ‘asynchronous’ we mean that we use a parity data checking system that doesn’t require one bit of checking data for every bit of informational data; thus sender and receiver need not be synchronous.
“THOU-ART” is perhaps a better use of King’s English, tho.

Com  <x> port:  Operating System designation for a bios-assigned resource.  If it’s present on the machine, the bios must first detect it and assign it a resource or the operating system has no means of doing so.
Note that com3 and com4, if used, have a built in irq conflict with com1 and com2, respectively.

Versoin 1.0 Reviewed 07/24/00