Apple ][+#
Open 8bitworkshop IDE
Click here to program the Apple II in the 8bitworkshop IDE now!
Apple ][+ Specifications#
- Lifespan
1979-1983
- Media
Cassette tape, 5.25” floppy disk (Disk II)
- CPU
MOS Technology 6502 @ 1 MHz
- Memory
16K-48K RAM, 12K ROM (expandable to 64K with a Language Card)
- Display
40x24 text, 40x48 lo-res graphics (16 colors), 280x192 hi-res graphics (6 colors)
- Sound
1-bit speaker
- Input
Keyboard, paddle controllers, joystick

History#
The Apple ][+ was introduced by Apple Computer, Inc. in June 1979 as an enhancement to the original Apple ][ model, which was released in 1977. The Apple ][ series of computers were designed primarily by Steve Wozniak and marketed by Steve Jobs. The Apple ][+ added the Applesoft BASIC programming language, which was integrated into the ROM and replaced the Integer BASIC of the original Apple ][. The Apple ][+ also featured an improved keyboard, with keys for control characters and lowercase letters.
The Apple ][+ was successful in the early years of personal computing, especially in the education market. It was eventually succeeded by the Apple //e in 1983, which replaced the discrete IC-based circuitry with a single ASIC chip.
Programming#
Applesoft BASIC was developed by Microsoft. It offered improved floating-point arithmetic and graphics commands compared to Integer BASIC. On an unexpanded Apple ][+, Integer BASIC is no longer available; it can be restored by loading it into RAM on an optional Language Card (the same card that provides the bank-switched RAM described below).
The 8bitworkshop IDE doesn’t include the original Apple ROMs, so BASIC is not available. Instead, you can program in 6502 assembler or in C with the CC65 compiler tools.
Memory Map#
Address Range |
Description |
|---|---|
|
Zero page |
|
Stack |
|
Input buffer, variables |
|
Free space |
|
DOS Vectors |
|
Text/Lores Page 1 |
|
Free space |
|
Hires Page 1 |
|
Hires Page 2 |
|
Free space |
|
I/O switches and slot ROM |
|
ROM (or bank-switched RAM bank 1/2 with Language Card) |
|
ROM (Applesoft BASIC, Monitor), or RAM with Language Card |
I/O Switches and Softswitches#
The Apple ][+ uses memory-mapped I/O with “softswitches” - reading or writing (or in
some cases just accessing, read or write) specific memory addresses toggles hardware features.
Note that the 80-column/auxiliary-memory switches found at $C000-$C00F on the later Apple //e
(80STORE, RAMRD, RAMWRT, ALTZP, SLOTC3ROM, 80COL, ALTCHARSET, INTCXROM) don’t exist on the
][+ - on this machine $C000 and $C010 are the keyboard data and strobe registers instead.
Address |
Function |
|---|---|
|
Keyboard data (read); bit 7 set if a key has been pressed, bits 0-6 are the ASCII code |
|
Keyboard strobe (read or write clears the keyboard strobe / “any key down” flag) |
|
Cassette output toggle |
|
Speaker toggle |
|
Utility strobe (game I/O connector) |
|
Graphics mode |
|
Text mode |
|
Mixed graphics/text off |
|
Mixed graphics/text on |
|
Text/graphics page 1 |
|
Text/graphics page 2 |
|
Lo-res graphics |
|
Hi-res graphics |
|
Annunciator 0 off |
|
Annunciator 0 on |
|
Annunciator 1 off |
|
Annunciator 1 on |
|
Annunciator 2 off |
|
Annunciator 2 on |
|
Annunciator 3 off |
|
Annunciator 3 on |
|
Cassette input |
|
Push button 0 (open-apple / PB0) |
|
Push button 1 (closed-apple / PB1) |
|
Push button 2 (PB2) |
|
Paddle 0 analog input (PDL0) |
|
Paddle 1 analog input (PDL1) |
|
Paddle 2 analog input (PDL2) |
|
Paddle 3 analog input (PDL3) |
|
Paddle trigger (resets paddle RC timers) |
|
Language Card bank switching (see below) |
|
Slot I/O (peripheral card soft switches; |
Language Card Bank Switching ($C080-$C08F)#
A 16K Language Card in slot 0 (or the equivalent built-in RAM on later machines) adds two
extra 4K RAM banks that can be swapped in under the $D000-$DFFF ROM area, plus 8K of RAM
that lives under $E000-$FFFF. Access to $D000-$DFFF is controlled by bit 3 of the
address (bank 1 vs. bank 2); access to $E000-$FFFF always uses the same RAM regardless
of which bank is selected. The switches are accessed by reading (not writing) the
following addresses; writing is enabled only after the switch has been read twice in a row:
Address |
Read source ( |
Write |
|---|---|---|
|
RAM bank 2 |
Write-protected |
|
ROM |
RAM bank 2 (after 2 reads) |
|
ROM |
Write-protected |
|
RAM bank 2 |
RAM bank 2 (after 2 reads) |
|
RAM bank 1 |
Write-protected |
|
ROM |
RAM bank 1 (after 2 reads) |
|
ROM |
Write-protected |
|
RAM bank 1 |
RAM bank 1 (after 2 reads) |
$C084-$C087 mirror $C080-$C083, and $C08C-$C08F mirror $C088-$C08B.
Typical usage:
To run code from language-card RAM, read
$C081(or$C089for bank 1) twice to select ROM-read/RAM-write, copy your code/data into$D000-$FFFF, then read$C080/$C088once to switch back to reading RAM with writes disabled.DOS 3.3 and ProDOS both relocate parts of themselves into language-card RAM using this mechanism to free up main memory.
Graphics Modes#
Text Mode (40x24)#
Standard text display using the built-in character set. Characters are stored in the text page starting at $0400.
Lo-Res Graphics (40x48, 16 colors)#
Low-resolution color graphics with 16 available colors. Each byte represents two 4-bit pixels vertically stacked.
Hi-Res Graphics (280x192, 6 colors)#
High-resolution monochrome graphics with color artifacts. Uses two graphics pages at $2000 and $4000.
Development Tools#
CC65 Compiler#
C programs are compiled using the CC65 toolchain, which provides:
Standard C library support
Apple II-specific extensions
TGI (Tiny Graphics Interface) graphics library
Conio (console I/O) library
Assembly Tools#
DASM - Versatile macro assembler (
.a,.dasm)Merlin32 - Apple II-specific assembler (
.lnk)CA65 - CC65’s linker-aware assembler (
.s,.ca65)
Memory Configuration#
Programs that use hi-res graphics should include the following:
#define CFGFILE apple2-hgr.cfg
#pragma data-name(push,"HGR")
#pragma data-name(pop)
For details and other configuration files, see the CC65 documentation.
Binary Formats#
The 8bitworkshop Apple II platform detects multiple binary formats for loading programs:
Disk Images (.dsk files)#
16-sector, 35-track disk images (143,360 bytes)
Automatically detected and mounted as a DiskII drive in slot 6
Supports Apple DOS 3.3 format with multiple files
AppleSingle Format#
Header signature:
$00 $05 $16 $00(first 4 bytes)Load address: Stored at offset
$38-$39(big-endian)Header size: 58 bytes
Used by CC65 compiler (
exehdr.s)
DOS 3.3 Binary Format#
4-byte header: origin address (2 bytes, little-endian) + size (2 bytes, little-endian)
Automatically detected when:
Size matches file length minus 4 bytes
Origin address is less than
$C000Origin + size is less than
$13000Origin is
$803or aligned to$xx00
Programs load at the specified origin address in the header
Raw Binary Format#
Default load address:
$803Used when no other format is detected