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

Re: monitor on IIgs



"Bill Garber" <willy46pa@comcast.net> writes:
>Yes, for example, I placed a superdrive controller in slot 5 of my IIe,
>then attached the 800k drive. Leaving the 5.25 empty of disk, it sat
>there waiting for one, never scanning down to slot 5 for the 800k.
>Why? Whine to me please. ;-)

This is standard behavior for an Apple ][ ][+ or //e. The //c //c+ and
//gs are smarter. Why is this so? It is the Disk ][ controller card and
the measly 256 bytes of PROM it has for the boot code (plus the fact
that when it was written 3.5" drives were not even a gleam in the eye
of their designers).

The //c //c+ and //gs have newer code (and the ability to use code space
outside the range $C600..$C6FF for this task) and detect the absence of
a 5.25" diskette and scan down to the next lower slot (as do cards like
Apple SCSI card or Apple 1MB RAMdisk card).

Unlike the MFM <-> GCR problem, this problem can (and has been) solved
in software (well, firmware anyway). I have a //e in which I have installed
a modified set of CD & EF EPROMs. I made a small change to the code near
monitor label SLOOP ($FABA) which originally starts at slot 7 and scans
down to slot 1. My //e starts at slot 1 and scans up to slot 7. This was
done so that I could use my SCSI card in slot 4 (where Pascal 1.3 could
find it) and leave the Disk ][ controller in slot 6.

Here is the original code:

	LDA	#$C8
	STX	LOC0	; X known to be zero at this point
	STA	LOC1
SLOOP	LDY	#7
	DEC	LOC1
	LDA	LOC1
	CMP	#$C0
	BEQ	FIXSEV	; no bootable disk controllers
	STA	MSLOT
NXTBYT	LDA	(LOC0),Y
	CMP	DISKID-1,Y
	BNE	SLOOP	; try next slot
	DEY
	DEY
	BPL	NXTBYT
	JMP	(LOC0)	; go boot

As you can see, it is up to the disk controller firmware to return
to SLOOP if it cannot boot and the Disk ][ PROM doesn't.

My mods were to make the code look like:
	
	LDA	#$C0	<== start at slot 1
	STX	LOC0	; X known to be zero at this point
	STA	LOC1
SLOOP	LDY	#7
	INC	LOC1	<== move up the slots
	LDA	LOC1
	CMP	#$C8	<== stop at slot 7
	BEQ	FIXSEV	; no bootable disk controllers
	STA	MSLOT
NXTBYT	LDA	(LOC0),Y
	CMP	DISKID-1,Y
	BNE	SLOOP	; try next slot
	DEY
	DEY
	BPL	NXTBYT
	JMP	(LOC0)	; go boot

You also have to fix the ROM checksum byte otherwise the
self test fails.
--
David Wilson  School of IT & CS, Uni of Wollongong, Australia