[comp.sys.apple] Problems with UDC and Mac 800k Drive on Apple II+

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.