Hi Mike,
the Memory Map looks as following
Code:
$0000...$BFFFF RAM
$C00x Keyboard (Read) or 74HCT259 (Write AppleIIe Softswitches)
$C01x Keyboard Strobe (Read or Write) or 2 x 74HCT251 to read softswitches
$C02x unused, (on a Apple this is Tapeout)
$C03x unused, (on a Apple this is the Speaker, but at 8MHz CPU Clock this sounds horrible)
$C04x unused, (on a Apple this is the GAME Strobe)
$C05x 74HCT259 (Annunciators)
$C06x 74HCT251 (Inputs, $C061 and $C062 are connected to the ATTiny the others are free)
$C07x unused, (on a Apple this triggers the Timer of the 4 Paddles)
$C08x 74LS175 for the Language Card Emulation
$C09x First SCC2691
$C0Ax Second SCC2691
$C0Bx reserved for first 65C22 (on IO Expansion)
$C0Cx reserved for second 65C22 (on IO Expansion)
$C0Dx reserved for IO Expansion
$C0Ex unused
$C0Fx reserved CF-Card (on IO Expansion)
$C100...$C7FF EEPROM with Apple IIe Firmware (Cx-ROM) or IO-SLOT ROM
$C800...$CFFF Apple IIe Firmware (Cx-ROM)
$D000...$FFFF EEPROM with Apple II (Integer) Apple IIplus (Applesoft Basic) or Apple IIe ROM
$D000...$DFFF Bank Switched Language Card RAM
$E000...$FFFF Language Card RAM
Unused means that nothing is selected and the corresponding /SEL signal is not decoded/implemented. Reserved means that there is a /SEL signal that is asserted for this range and it is available on the IO Expansion (Breadboard interface).
The language card is fully operational and 100% compatible to the original Apple II Language Card. In Apple IIe emulation mode A16 of the SRAM is used to switch between Main/Aux RAM when addressing Bank0. So you have an Apple IIe with 128k RAM.
The first 64kbyte of the EEPROM are divided into 4 x 16kbytes sections. Apple II selects section 0, Apple IIplus selects section 1 and AppleIIe uses section 2 and 3. Which is selected depends on the C3ROM and CXROM softswitches. In case you want to have a IOSLOT ROM for the "Slots" you can put the code into the appropriate location in the EEPROM and it is switched in when CXROM is cleared or in case of $C3xx when C3ROM is set. $C800...$CFFF does not implement the C8-ROM Protocol. So you cannot have "Slots" with C8-ROM code. This range always shows what is in the C8-ROM Range of the Apple IIe Firmware. But I think this is not a limitation. You can always switch to true 816 mode in your IOSLOT ROM and execute code you have put into the second to firth 64kbyte of the EEPROM. I also could have implemented C8-ROM Protocol, but I run out of real estate on the board and I definitively wanted to have 2 ACIA on board. So it was either or.
The self-test completes successfully, so the Firmware does not complain that it is not running on a real AppleIIe. For this to work I have decoded the Windows and the Menu Key to assert Pin 0 and Pin 1 on Port A of the ATTiny which connect to the 74HCT251 inputs 1 and 2 (addresses $C061 and $C062). So with CTRL-ALT-DEL and Windows Key you do a cold start and with CTRL-ALT-DEL and Menu Key you do a System Test.
In 816 mode Bank1 to Bank 27 select the RAM and Bank 28 to Bank 31 select the EEPROM. A21, A22, A23 are not decoded. So you can have a maximum of 2Mbyte RAM (minus 256kbyte EEPROM).
The following signals go to the IO expansion
D0..7 (Buffered with a 245)
A0..A6 (Buffered with a 541)
RW (Buffered using the 8th Buffer of the 541)
PHI2
/OE (Read gated with PHI2)
/WE (Write gated with PHI2)
4 /IODEV signals for the ranges $C0Bx, $C0Cx, $C0Dx and $C0Fx
/IRQ
/RES
The CF-Card interface is going to be the top priority, but if possible I want to use the Common Memory Mode to keep it simple.
Peter