Jef Raskin's Swyft Card
I now have made a reproduction SwyftCard available. Go to my SwyftCard page for more information.
If you don’t know what a Swyft card is, Jef Raskin was working on a low cost “appliance” computer called the Macintosh at Apple. Steve Jobs took over the project and moved the project in a quite different direction. Jef left Apple and founded a company called “Information Appliance”. The first product was the Swyft card that plugged into an Apple IIe and ran his software. The software was an integrated word processor and calculator, which had access to Applesoft and included a few other printing and communications capabilities. Later they came out with the Swyft computer which was later licensed to Canon – which called it the Canon Cat. I have not explored functionality that much, but the software looks pretty clever, despite the lack of a GUI.
This experiment modifies a SUPERPROTO to act exactly like a Swyft card.
The Swyft card is designed to only work in slot three of the Apple II. The original Swyft card, is made up of only 3 integrated circuits and supporting capacitors and resistors. The three ICs are the
- 27C128 16k byte PROM
- 16R4 PAL - programmable array logic
- LM311 voltage comparator
Documenation can be found at this URL: Scanned Swyft Card Document
Modifying a SUPERPROTO to Work Like a Swyft Card
The 28C256 EEPROM included with the SUPERPROTO is can be used to replace the 27C128 PROM on the Swyft card. The PROM on the Swyft card is mapped into the Apple II ROM space (D000-FFFF), so changes need to be made in addressing the 28C256 EEPROM on the SUPERPROTO which is normally mapped into the I/O space C8000-CFFF plus I/O select C100 - C1FF, (depending upon slot).
With the Swyft card, the 16R4 PAL controls access to the PROM, including mapping the both the low two banks 0000-0FFF and 01000-1FFF into D000-DFFF. This is accomplished by using the I/O Device select addresses C030 through C032.
- Addressing C030 enables the Swyft card and sets the D000-Dfff address reange to select PROM address 0000-0FFF.
- Addressing C031 disables the Swyft card and allows the Apple IIe motherboard PROM to be addressed.
- Addressing C032 enables the Swyft card and sets the D000-Dfff address reange to select PROM address 1000-1FFF.
By reprogramming, the 22V10 GAL on the SUPERPROTO can be used to replace the 16R4 PAL on the Swyft Card. In addition to different address conections, changes need to be made to the GAL program to support the Swyft Cards bank switched D000 address space and other Swyft Card features. The revised SUPERPROTO GAL equations are described later in this document. The following schematic of the SUPERPROTO shows the wiring changes necessary to turn it into a Swyft card.
In addition to the changes detailed above, the LM311 reset circuit from the Swyft card schematic (above) needs to be built up in a proto area.
If the write enable jumper is installed, the modified SUPERPROTO still supports writing the EEPROM. However since the Swyft functionality replaces monitor functionality in the Apple II, in order to write to the EEPROM, you would have to put a program in DRAM and execute it from DRAM, without referencing any of the normal Apple II monitor functions in order to successfully change the EEPROM contents. It is recommended that the EEPROM write enable jumper is NOT installed in a SUPERPROTO based Swyft card.
If you aren't writing to the EEPROM, then the 74LS245 could be replaced by a series of wire jumpers connecting the data bus together. However, having this transceiver in place, probably isn't a bad idea, especially considering the known issues with using a EEPROM on the Apple II bus.
Bill of Materials
Base SUPERPROTO Components
- SUPERPROTO PCB
- 22V10 GAL
- 24 pin 300 mil wide socket
- 28 pin 600 mil wide socket
- 74L245 (recommended)
- 20 pin 300 mil wide socket
- 6 .1UF caps
- 1 2 pin header
- 1 shunt (optional - to enable writes to 28C256)
- 1 10K 1/4 watt resistor
LM311 reset circuit (also uses 1 .1UF cap from base SUPERPROTO list)
- LM 311 voltage comparator
- 8 pin 300 mil wide socket
- 1 100K 1/4 watt resistor
- 1 10UF cap
- 3 3K or 3.3K 1/4 watt resistors
- 1 1n4148 diode
- wirewrap wire - wirewrap wire is recommended because it is easier to solder to the pins on the back side of the board than heavier gauge hook up wire
Modifying the SUPERPROTO PCB
Before soldering any components on the SUPERPROTO PCB, make the cuts as shown in the schematic at the locations described in the following images. Using these locations makes adding wires later on, much easier, as vias can be used as convent wiring points, if still connected to the pins that the wires need to connect to. The best way to make cuts is to use a sharp hobby knife and make two slices across the trace, being careful not to cut adjacent traces. Use an ohm meter to confirm that the cut is complete.
There are a total of 10 cuts to be made.
- 7 MHZ clock separated from GAL pin1
- I/O Strobe separated from GAL pin 2
- PH1 clock separated from GAL pin 3
- Address A8 separated from GAL pin 5
- Address A9 separated from GAL pin 6
- Address A10 separated from GAL pin 7
- I/O select separated from GAL pin 9
- GAL pin 16 separated from EEPROM pin 21, A10
- GAL pin 19 separated from EEPROM pin 24, A9
- GAL pin 20 separated from EEPROM pin 25, A8
After making these cuts, you can solder in the GAL, EEPROM and 74LS245 sockets.
Adding Address Bus Connections
In the image below, the 12 red wires are used to correctly connect the address bus to the GAL and the EEPROM.
- Address bit 0 to GAL pin 2 - front of PCB - connect pin 2 of edge connector to via marked STROBE near GAL
- Address bit 1 to GAL pin3 - front of PCB - connect pin 3 of edge connector to via near pin 23 of GAL
- Address bit 12 to GAL pin 9 - front of PCB - connect pin 14 of edge connector to via marked I/O SEL near pin 1 of edge connector
- Address bit 13 to GAL pin 5 - back of PCB - connect via near pin 18 of GAL to via near pin 28 of EEPROM
- Address bit 14 to GAL pin 6 - back of PCB - connect pin 16 of edge connector to via near pin 26 of EEPROM
- Address bit 15 to GAL pin 7 - back of PCB - connect pin 17 of edge connector to via near pin 25 of EEPROM
- Address bit 8 to EEPROM pin 25 - front of PCB - connect pin 10 of edge connector to via pin 1 of EEPROM
- Address bit 9 to EEPROM pin 24 - back of PCB - connect pin 11 of edge connector directly to pin 24 EEPROM
- Address bit 10 to EEPROM pin 21 - back of PCB - connect pin 12 of edge connector directly to pin 21 EEPROM
- Address bit 11 to EEPROM pin 23 - front of PCB - connect pin 13 of edge connector to via marked P 11 near pin 14 of EEPROM
- GAL decoded Address bit 12 (pin 14) to EEPROM address bit 12 (pin 2) - front of PCB - connect via near "GROUND" legend to nearby via marked P 12 near pin 14 of EEPROM (see image)
- Address bit 13 to EEPROM pin 26 - front of PCB - connect pin 15 of edge connector to via marked P 13 near pin 14 of EEPROM
- Also add a solder blob to the solder jumper marked P14 to ground address bit 14 of the EEPROM
Adding Modified Control Connections
In the image above, the 3 of the 4 blue wires connected to the GAL are Apple II bus control signals needed to support the Swyft Card functionality.
- 3 MHZ clock to GAL pin 1 - back of PCB - connect pin 37 of edge connector to directly to pin 1 of GAL
- INHIBIT to GAL pin 22 - back of PCB - connect pin 32 of edge connector to via near pin 12 of GAL (see image)
- RESET to GAL pin 19 - back of PCB - connect via underneath 74LS245 to directly pin 19 of GAL (see image)
Add LM311 Based Reset Circuit
Use the image as a reference on how to connect this circuit
- Solder in 8 pin dip socket near legend U1 in proto area area designed for ICs
- Connect pin 1 to ground via
- Connect pin 4 to ground via
- Connect pin 3 to ground via using 3K resistor
- Connect "minus" side of 10uF electrolytic cap to ground via and "plus" side to first row of pads
+ 5 volt connections
- Connect pin 8 to +5 via
- Connect 3K resistor from first row of pads to +5 volt via
- Connect +5 volt via to eleventh row of pads with a jumper
- Connect +5 volt to both sides of eleventh row of pads with a second jumper
- Connect 1N4148 diode from row 9 to row 11 (+5 volts) - make sure diode is oriented with "bar" on +5 volt end
- Connect 3K resistor from pin 3 to to row 11 (+ 5volts)
- Connect 100K resistor from row 9 to row 11 (+5 volts)
Finish connectons to LM311 reset circuit
- Connect a jumper from pin 7 to resistor in row 1
- Connect a .1UF capacitor from pin 7 to row 3
- Connect a jumper from .1UF capacitor on row 3 to 1N4148 diode on row 9
- Connect a jumper from pin 2 to .1 UF capacitor on row 3
- Connect a jumper from pin 2 to plus side of 10UF capacitor on row 1
Connect Reset Signal to GAL
- On back of board connect from first row (near 3K pull up resistor) to GAL pin 13
Finish with rest of components
- 5 Decoupling Capacitors - instead of placing C5 in specified location, I choose to place it between the LM311 and the U2 legend
- 1 10K pull up resistor - near EEPROM - prevents inadvertent writes to the EEPROM
- 2 pin KK header - shunt can be installed later, if you wish to write EEPROM contents
Check Connections, Install ICs and GoTo Town
- Check all your work with a ohm meter before proceeding.
- If you have preprogrammed GAL and EEPROMs you can install the ICs (remember the SUPERPROTO is upside down compared to normal Apple II cards).
- Install the modified card into slot 3.
- Put a unformatted floppy in your floppy drive (refer to manual for a way to overwrite preformatted floppies).
- Power on and explore Jef Raskins approach to using a computer.
Documentation, PROM Code and More Information
The Swyft card is designed to run in an Apple IIe, with a revision later than revision A. It requires a Disk ][ in slot 6.
Like minded people and PROM binary code: Canon Cat Google Group (PROM binary has been posted in this group)
Documenation: Scanned Swyft Card Document
SUPERPROTO kits are available in limited quantities for $65, plus $10 shipping and handling. send email to: email@example.com and specify that you are interested the special Swyft card SUPERPROTO kit. The special swyft card kit includes the components needed to build a SUPERPROTO into a Swyft Card, with modified GAL and EEPROM, but does not include 6522 VIA or wirewrap wire. Building this kit requires significant rework of the base SUPERPROTO card and is for advanced hobbyists only.
SUPERPROTO GAL Equations for Swyft Card Emulation
Note that I'm debating whether to change to D and OE of the reset and inhibit outputs, to leave the D signal "ON" and just use the OE to output. This should result in slightly quieter operation.
Name SWYFT22V10 ; PartNo A ; Date 8/20/2013 ; Revision 01 ; Designer Engineer ; Company willegal.net ; Assembly None ; Location ; Device g22v10; /****************************************************************/ /* */ /* Apple 2 I/O board support chip */ /* */ /****************************************************************/ /* Allowable Target Device Types : GAL22V10 */ /****************************************************************/ /** Inputs **/ PIN 1 = 2MHZclock; /* O3 Clock */ PIN 2 = A0; /* address line 0 */ PIN 3 = A1; /* address line 1 */ PIN 4 = rw; /* read write (write low) */ PIN [5..7] = [A13,A14,A15]; /* Address lines A13-A15 */ PIN 8 = prom_write_dis; /* disable writes to eeprom */ PIN 9 = A12; /* Address lines A12 */ PIN 10 = !devsel; /* device select */ PIN 13 = !lreset; /* local reset */ /** Outputs **/ PIN 14 = AO12; /* address A12 output */ PIN 17 = active; /* board active */ PIN 18 = !rd_oe; /* read/output enable (28F256 pin 22) */ PIN 20 = !bank; /* bank selected */ PIN 21 = !rom_en; /* rom enable */ PIN 22 = !inhibit; /* inhibits motherboard ROMS */ PIN 23 = !board_en ; /* controls 74LS245 out en */ PIN 19 = !sreset; /* system reset */ /** Declarations and Intermediate Variable Definitions **/ /** Logic Equations **/ active.D = (devsel & !A0 # (!devsel & active)) # lreset; rd_oe = rw & rom_en; rom_en = board_en & (rw # !prom_write_dis); board_en = active & !lreset & ( A15 & A14 & (A13 # A12)); inhibit.d = board_en; inhibit.oe = board_en; bank.D = (devsel & !A1 # (!devsel & bank)) # lreset; AO12 = (A12 & !A13) # (!A13 & bank); sreset.oe = lreset; sreset = lreset;