brianw@microsoft.UUCP (Brian Willoughby) (07/05/89)
In case any of you remember my questions to the net concerning which 3.5 drive to purchase for my II+, I recently chose to order a Laser Computer Universal Disk Controller. Has anyone else run into the following problem? If so, or even if you have any comments or ideas, please send me EMail at ...!microsoft!brianw CONFIGURATION: I have a 64k II+ with the Transwarp Accelerator in slot 7. The Transwarp has a 4 MHz-rated 65c802 installed, running at 3.58 MHz. I bought a Mac 800k drive from a Mac owner who upgraded to an external hard disk. It is connected to the drive 1 connector of the UDC. PROBLEM: After several minutes of use at accelerated speeds, the 800k drive begins to take longer and longer to find a block, until it eventually returns I/O ERROR for every disk read. I have tried to isolate the source of the problem by changing the CPU speed and disabling the Transwarp. I believe that the speed is not a factor here, because I have set the DIP switches on the Transwarp card so that it executes at 1 MHz for accesses to slot 5 (where I have the UDC installed). The Transwarp has an address ($C074) which can select: 0 - Fast, 1 - Normal, 3 - Off (Motherboard CPU and memory). This soft switch can be changed while the Apple is powered up. After the errors start occurring, I have switched to 1 MHz operation (with the 65c802 on the Transwarp still active) and the errors do not go away. However, if I disable the Transwarp altogether (which requires pressing RESET after entering *C074:3), the errors promptly cease. I have no idea why this problem only occurs after the computer has operated for a while. The time involved is not constant - sometimes a short while, and sometimes I can use the UDC with the Transwarp at 3.58 MHz for quite some time. Powering down does not do any good (perhaps because the 65c802 and my main board R65c02 are both CMOS), unless I leave the computer off for a long time. CAUSE: Most likely, the problem is with the 65c802. I have printed out the ROM code from the UDC, and have noticed a few errors in the code that is executed when a 65c8xx is present. I'm not sure though, because there are no comments (obviously), and I haven't read it entirely. ACTION: I am going to continue to disassemble the UDC code, but I hope that someone else has a better solution so that I can use both my Transwarp c802 AND the 800k drive. EXAMPLE: The Firmware on the UDC uses the Carry to indicate whether a call was made to the SmartPort or the ProDOS entry point on the $C5xx page. Then both routines branch to the same address, later to use the value of the carry pushed on the stack (PHP) to determine how it was called. This is where the UDC code is in error: if a 65c8xx is present, the bank registers (and other 65c8xx-specific registers) are saved and initialized. During this code the Status word on the stack is lost and replaced with a 00. I can't remember which call is represented by carry high, but obviously this type of call (i.e. SmartPort or ProDOS entry) is not possible since the saved Carry value is zeroed. Any ideas as to how this can work on a IIgs? I know that it does, because I tried out the UDC on a friends IIgs before I ordered it. Comments to ...!microsoft!brianw Thanks.