Comment by thristian

14 hours ago

Steve Wozniak was incredibly foresighted when designing the Apple II, to make sure that expansion cards could disable the default ROMs and even disable the CPU, making this kind of thing possible. The article mentions a chunk of memory "used by peripheral devices"; every expansion card got its own slice of the address space, so you could plug a card in any slot and it would Just Work (maybe you'd have to tell software what slot the card was in). I was very disappointed when I "upgraded" to a 386 and suddenly cards had to be manually configured to non-conflicting IRQs and I/O addresses.

And if something didn't work he included a complete debugger inside "Apple II Machine Language Monitor" in ROM so you could always just disassemble and poke at things, pipe disassembly to the printer, read memory, change code, add own macros to CTRL+Y and rerun stuff. All that without extra software or a massive pile of printed assembly.

from BASIC:

  CALL -151 (short for CALL 65385, but BASIC can't handle unsigned INT so that wouldn't work)  
  F666G  

and the machine is your playground.

I don't think this is entirely due to Wozniak. Early "home" computer systems were based on connecting cards to a bus (eg the S-100 bus), eg. with one card supporting the CPU, another RAM, a third for disk drive, video card etc, etc. The cards where then memory mapped, presumably you controlled the memory mapping by setting jumpers. (I guess you're saying that Apple II managed this automatically?) Of course the full story might be a bit more complicated: 6502 and 6800 used memory mapped I/O, whereas 8080 (and Z80?) had certain I/O pins coming out of the CPU.

  • Memory mapping happened automatically. Each card was mapped based on the slot it was in. $C000 - $C700 I believe with each slot assigned 256 bytes.

    • You're correct; slot 6 for instance is $C600. If you crashed to the system monitor you could boot a disk by entering C600G (with the 'G' standing for 'go to').

      IIRC the disk controller had firmware that loaded the first 256 byte sector from disk into memory.

      5 replies →

>to make sure that expansion cards could disable the default ROMs and even disable the CPU, making this kind of thing possible.

Today we would call this bus mastering, yes?

Clearly Steve Wozniak was a very unique [technical and geeky] guy at that time. Thinking about interoperability at that time was prophetic.

  • I woldn't go so far as to say it was "prophetic". Contemporary DEC PDP-8 (OMNIBUS) and PDP-11 (UNIBUS / QBUS) systems have a similar approach to "interoperability", where cards for peripherals were also mapped into the machine's address space. It was great that Woz saw the utility of this and brought it into the homebrew/microcomputer design.

  • I think it was more driven by his own desire to not limit what future hardware hacking he wanted to do with this computer he just designed.