[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: iDisk on IIgs



D Finnigan <dog_cow@macgui.com> wrote:

> Oracle wrote:
> > 
> > Do you know what  the IIGS firmware may check for understand that the
> > card is an original DISK II Controller?
> > 
> 
> Probably the same thing that the AutoStart ROM checks for.

Clearly not. Autostart (for a IIc, IIgs, or enhanced IIe) looks for the
first three Disk ][ ID bytes (20, 00, 03) but ignores the fourth one.

The 20 00 03 3C pattern was required by the Apple ][+ and unenhanced
IIe, which prevents them autostarting from a SmartPort card. SmartPort
requires 00 in the fourth ID byte.

There is a fifth ID byte for a Disk ][ or UniDisk 5.25 controller, which
is recognised by ProDOS: CnFF=00. I seem to recall that the 13-sector
Disk ][ firmware had CnFF=FF, which was also unique (at the time).

Cards with ProDOS block drivers have a value somewhere between 00 and FF
in CnFF (probably has to be between 0A and F8 in reality). It indicates
the low-order byte of the address of the ProDOS block driver in the CnXX
space.

The mechanism which the IIgs uses is four bits in the speed register
which are set by the firmware if it detects what appears to be a Disk ][
or UniDisk 5.25 controller in slot 4-7. I expect it is looking for the
same ID bytes as ProDOS (20 00 03 3C plus CnFF=00). If the iDisk has a
ProDOS block driver in firmware, it is impossible to make the firmware
recognise it automatically.

GS/OS's 5.25" driver does a similar check in software for a Disk ][ or
UniDisk 5.25 controller in slots 1-3.

If the appropriate bit in the register is set, then the hardware detects
an access to the MOTOR ON I/O register (C0n9), which slows down the
computer to Normal speed. When the MOTOR OFF I/O register (C0n8) is
accessed, the configured speed (typically Fast) is restored.

If the iDisk doesn't use C0n9/C0n8 for its "enter timing critical code"
and "exit timing critical code" I/O registers, it wouldn't work even if
software had set the appropriate speed register bit.

If the iDisk has speed critical code, it should be detecting that it is
running on a IIgs, saving the speed register, setting the computer to
normal speed, then restoring the speed register on exit.

-- 
David Empson
dempson@actrix.gen.nz