21

Apple II computers don't come with DOS in ROM, but rather need to boot from a floppy disk to make the disk drives usable. The IIc was the first Apple II that came with a built-in disk drive, so booting it was a must (it also omitted the cassette ports earlier Apple IIs had). You could extend to further drives by connecting to a floppy expansion port.

The original IIc ROM version (version 255) supported booting from external drives by simply entering

PR #7

(Apparently, this was also documented in the manuals, and apparently, it only ever worked for ProDOS, the standard that came with the computer, but still better than nothing)

The follow-up ROM version (version 0, came in a ROM double the size of the original, so any omissions can't have been for space reasons), removed this feature, severely hampering usability of externally connected drives. This feature was never restored in any of the later ROM revisions (3, 4) until just recently in ROM version 4X, a hobbyist's project, which nicely presents a boot menu including an option to boot from external drives on CTRL-[closed Apple]-Reset.

As a work-around for the missing feature in later ROM revisions, Apple proposed (in the IIc Technical Reference Manual) using the built-in monitor and entering and calling a 10-bytes code sequence to boot from external drives (not exactly an improvement over PR #7)

Why did Apple remove such an important feature? How was this accepted by customers? Why did they never restore that feature by adding the 10 missing bytes to a ROM that had by far enough space?

EDIT: The 3.5 ROM update manual bluntly claims

PR #7 (from BASIC) or 7<CONTROL>P (from Monitor) no longer causes the system to boot from the external Disk II drive because that ROM space is now used for new features.

The removal I can confirm but the reasoning seems untrue to me (considering the size of the new ROM).

The IIc Technical Notes blatantly state

ROM Version 255 (the "correct" behavior)

PR #7 boots the second drive

ROM Version 0

PR #7 returns the message "Apple Talk Off Line"

(With no Apple Talk support on the IIc ever this does not look like a very useful message, but rather like a bug)

ROM Version 3

PR #7 kills the system

(Similarly unhelpful, but rather looks like another bug)

  • 4
    This is a very nicely asked question. You explained well enough that I both understand the question, and learned something about the subject matter besides. – Wayne Conrad Jan 24 at 18:54
  • 1
    Is it just the ROM that changed? Or is the Disk II no longer exposed in a slot? – Tommy Feb 8 at 19:31
  • 3
    The Internet thinks (ref1,ref2) that Apple tried, and failed, to add support for AppleTalk networking to the IIc through an external serial adapter. Maybe it ran out of space in the ROM and decided booting from external drives was an expendable feature, then neglected to put it back in when the experiment failed. – snips-n-snails Feb 8 at 21:29
  • 1
    @Tommy The IIc doesn't have slots, but "emulates" them. I guess Disk II still occupies a slot with the new ROM, because it still works - you simply can't boot from it. So, IMHO, it's just the ROM that was changed. – tofro Feb 11 at 8:49
  • 1
    @traal Replacing working code with a broken implementation of AppleTalk and just leaving the remnants in a production machine sounds even worse than I thought. – tofro Feb 11 at 8:51
4

Whilst this is not a definitive answer, by looking at Apple IIc ROM Version1, which more fully lists the features of each ROM version, it seems that the disk support was actually improved, whilst, unfortunately, removing the ability to easily boot from the second drive (although the second drive could still be accessed post-boot).

One can only surmise that the designers assumed that booting from the internal drive only would be sufficient, and that losing the easily access ability to boot from the external drive was a price worth paying for access to the AppleTalk instead (using PR#7) as well as the additional drive support, namely:

  • UniDisk 3.5 drive,
  • the Apple 3.5 drives
  • IIc Memory Expansion Card

In actual fact, from information from a Google forum (see below2), Apple IIc Booting from external drive, it turns out that the code was not actually removed, just the ability to access the code easily by using PR#7 - the engineers presumably thought that the AppleTalk was a better use for the PR#7, although PR#5 would work for an external UniDisk 3.5". The leftover code could still be accessed by typing the following code in the Monitor, from Booting from an external drive on the Apple IIc:

300:A9 E0 A0 01 A2 60 4C 0B C6

300G

More poignantly, from 8-THE APPLE IIC - Firmware

What about the unassigned slot 7? Here they put a small piece of code to allow booting from the external 5.25 drive by typing “PR#7” from Applesoft.

and further down the page, Overcoming limitations

The disk port on the original IIc was only designed to control an external 5.25 disk drive. Apple sold the Disk IIc for $329, and other companies later sold similar drives for less. Despite this firmware limitation, Quark Engineering released a 10 MB Winchester hard drive called the QC10 that would work with this disk port, and was the first hard disk available for the IIc.

and Enhancements

Rudimentary firmware was also included to allowing the IIc to be attached to an AppleTalk network (a message that said “AppleTalk Offline” would appear if you typed “PR#7” from BASIC), but it was never completed, and did not appear in future revisions of the IIc ROMs.

From which, one could infer that Apple dropped the boot support as third party drives were cheaper, and they didn't wish to support these more popular drives.


Wikipedia - UniDisk 3.5 support (ROM version ‘0’), confirms that which snip-n-snails stated in their comment:

The new ROM supported “intelligent” devices such as the Apple UniDisk 3.5-inch (800 KB) floppy drive and Smartport-based hardisks, in addition to an external 5.25-inch floppy drive.

and

The upgraded ROM added rudimentary support for an external AppleTalk networking device which was yet to be developed. When attempting to boot virtual slot 7, users would encounter the message “APPLETALK OFFLINE.” The IIc, however, had no built-in networking capabilities, and no external device was ever released.


Footnotes

1 ROM feature list, from Apple IIc ROM Version (this list expands slightly upon that given in Apple IIc Technical Note#7 - Existing Versions). To see which ROM version you have use PRINT PEEK(64447) (64447 = $FBBF):

Original IIc ( $FBBF = $FF or 255 in decimal)

  • Can use the IIc external drive only
  • No AppleTalk firmware
  • PR#7 boots the second drive
  • Mouse firmware maps to slot 4
  • Serial firmware does not mask incoming linefeed characters
  • Serial firmware does not support XON/XOFF protocol

3.5 ROM IIc ( $FBBF = $00 )

  • Can use the IIc external drive and the UniDisk 3.5 drive
  • AppleTalk firmware maps to slot 7
  • PR#7 returns the message "AppleTalk Off Line"
  • Mouse firmware maps to slot 4
  • Serial firmware defaults to mask all incoming linefeed characters
  • Serial firmware supports XON/XOFF protocol
  • Adds the Mini-Assembler to the Monitor
  • Adds the Built-in Diagnostics

Original "Memory-Expandable" IIc ( $FBBF = $03 )

  • Can use the IIc external drive, the UniDisk 3.5 drive, and the IIc Memory Expansion Card
  • Mouse firmware maps to slot 7
  • No AppleTalk firmware
  • PR#7 kills the system
  • Serial firmware defaults to mask all incoming linefeed characters
  • Serial firmware supports XON/XOFF protocol

Revised "Memory-Expandable" IIc ( $FBBF = $04 )

  • Same as Original Memory-Expandable, plus:

    • Keyboard buffering firmware bug fixed
    • Firmware returns correct information when the Memory Expansion Card is not present

Apple IIc Plus ( $FBBF = $05 )

  • Can use the external IIc drive, the UniDisk 3.5 drive, the Apple 3.5 drives, but not the original IIc Memory Expansion Card.
  • Contains a Memory Expansion Card connector
  • 3.5" internal drive replaces 5.25" internal drive
  • Mouse maps to slot 7
  • PR#7 kills the system
  • 4 MHz 65C02 microprocessor
  • Accelerator chip and static RAM cache permit operation up to 4 MHz
  • Keyboard replaced with Apple Standard Keyboard (minus numeric keypad)
  • Internal power supply
  • Internal modem connector
  • Serial ports refitted with mini-DIN 8 connectors
  • Headphone jack has been removed
  • Volume control relocated above the keyboard
  • 40/80 column switch replaced by keyboard (Sholes/Dvorak) switch

2 However, it is possible to boot from the external UniDisk 3.5". From Apple IIc Booting from external drive, this post

If my copy of the IIc hardware reference manual is to be believed, you can boot from the first external drive by typing PR#5. I suspect this only applies to a UniDisk 3.5, and not a 5.25" drive.

and this post

Yes, PR#5 will boot the first external UniDisk in the //c's drive chain.

I recall typing in a small segment of assembly code (from inCider/A+, Nibble, or some such magazine) that would boot the external 5.25" drive, even if you had a //c with newer ROMs. I don't think it worked on anything but a //c, but I can't remember for sure. If you'd like me to dig it up and post it to the 'net, email me. I'm sure I can find it...it's only a matter of digging through a few of my BASIC programming disks. :^)

and this post mentions booting from the 5.25" external drive, using the leftover code:

Actually, you can boot from an external 5.25" driver on the //c with ROM revision 2. The code necessary is in ROM (the ROM listing comments even tell that you can do it), but due to some omission you can't activate it by a single command.

You can boot however from the external driver by hacking in a short machine program. All you have to do is set X to $60, Y to $01, and A to $e0 and jump do some address... was it $c611? Take a look at the listing...

1

Short Answer:

Not just ROM code, but as well I/O space is a premium and unlike ROM size it can't be increased. There are only 7 slots and only 7 devices can be present (*1) and accessed (*2). When Apple added (intended to add) AppleTalk with ROM 0, Slot 7 was assigned. With ROM 3 this was dropped allowing the use of Slot 7 for the mouse interface. Either change resulted in code that the boot sequence could not identify as DISK II card.


The Long Read:

When taking about 'space' required in the Apple II it's not only about ROM code but also I/O Addresses and the Slot PROM. Woz' I/O design only allows for 7 devices to be added. While looking like a lot in 1977, the basic Apple didn't offer much build in I/O, so already simple serial or parallel interfaces had to be added as card and grab one. The generic 'driver framework' (*3) only knows one entry point (*4) per device, located at Cn00 where n is the slot number (1..7).

As result any device to be offered by the ROM that should be available to legacy programs in general and BASIC in particular did need a slot assignment. With the intention of putting AppleTalk in, with ROM 0, it had to have a hard assigned slot, so 7 was choosen. Similar with ROM 3 when the mouse was made available as Mouse 'Card'.

The Apple IIgs later avoided the problem of fixed assignment by letting the user configure which interfaces should appear at which address/entry point (within limits)


*1 - Slot 1..7; Slot 0 has no assigned resources - it's I/O address ranges are assigned to the motherboard

*2 - That is with the 'classic' methods present since the first II. ProDOS did add ways for loading additional drivers handling devices outside that scheme - similar GSOS.

*3 - While being extreme simple it was well thought thru and joined several components together, so it's fair to call it a framework.

*4 - No, there are no separate entrance vectors set by PR# or IN'. Both just set their respective vector (CSW/KSW) to Cn00. If a card could support both ways it was supposed to look for it's signature in either switch and acct accordingly - if found in both, it should work as if the call was meant as output.

For bidirectional devices it was common to tweak both vectors to different locations within the PROM (after being called first), so later call would point to either specific routine - and a Cn00 would indicate a reinitialisation of either - to be detected by comparing the lower address byte of the relevant switch being 00.

Ok, while I still think the concept is very clever, it's not as thought thru as I like to assume.

  • I'm not sure whether lack of I/O space can actually have been the issue - After all, the external drives still work, you simply can't boot from them (and there's this 10 bytes of machine code that can still enable booting in later ROM versions without hampering any other function). – tofro Apr 26 at 17:50
  • @tofro Keep in mind, that the PROM with the entry point for booting is part of the I/O space. C700 being the entry point for slot 7. For each device there can be only one entry point. PR#7 does a JSR to C700. So either it can lead to floppy boot, or offer access to the mouse, but not bot. The code mentioned doesn't 'reinstall' external boot is the code that was at C700 in a ROM 255 IIc an got replaced by appletalk/mouse code. nothing secret here. – Raffzahn Apr 26 at 22:15
  • That just confirms the fact that Apple has replaced working external drive boot code with non-working Appletalk code in later ROM versions - Apparently, no none actually wanted to boot from external floppies at that time when they could get by with this.... – tofro Apr 27 at 6:33
  • @tofro Sure, if the goal is to make an on purpose negative conclusion. In a more neutral way it just shows that the 7 slot concept of the Apple II is quite limited. The workings are much like with any other Apple II - one slot can only hold one card, and in there is a mouse card, then there can't be a disk controller. If you plug the controller at Slot 7, then there is no controller. It's that simple. – Raffzahn Apr 27 at 6:44
  • Hmm. Without "making a negative conclusion on purpose", with later ROM versions Apple has removed a working card and plugged in a non-working one into the same slot. Then sold the whole thing. Great. – tofro Apr 27 at 6:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.