ACA1221EC is an accelerator for the A1200 computer. It is also compatible with the ACA500 and ACA500plus. Key features are:
- processor: MC68EC020-16 or MC68EC020-25
- two clock ports
- 16 MBytes 32-bit fast RAM (9 MBytes usable as fastmem)
- 1MB Maprom option, RAM-disk option
- variable clock speed
- autoconfig with 512 bytes flash ROM
- set the "MapROM" jumper in order to activate "MapROM" from a cold-start: The physical ROM will be copied to RAM and MapROM bit will be set. A sticker will be attached that changes the writing on the board from "ASync" to "MapROM".
- set the "unprotect" jumper to disable the autoconfig-ROM and enable writing to the Autoconfig-flash
|mem address||MemShuff=MemOff=0||MemShuff=1, MemOff=0||MemShuff=x, MemOff=1|
|$00.0000 to $1f.ffff||Chipram||Chipram||Chipram|
|$20.0000 to $3f.ffff||Fastmem||2M RAM-disk space||Host computer|
|$40.0000 to $4f.ffff||Fastmem||$c0-copy (write protected)||Host computer|
|$50.0000 to $5e.7fff||Fastmem||RAM-disk space||Host computer|
|$5e.8000 to $5e.ffff||Fastmem||32k trampoline area copy (write protected)||Host computer|
|$5f.0000 to $5f.ffff||Fastmem||RAM-disk space||Host computer|
|$60.0000 to $67.ffff||Fastmem||RAM-disk space or lower 512k MapROM-area||Host computer|
|$68.0000 to $77.ffff||Fastmem||RAM-disk space||Host computer|
|$78.0000 to $7f.ffff||Fastmem||RAM-disk space or upper 512k MapROM-area||Host computer|
|$80.0000 to $9f.ffff||Fastmem||RAM-disk space||Host computer|
|$a0.0000 to $bf.ffff||Host computer||Host computer||Host computer|
|$c0.0000 to $cf.ffff||Fastmem||Fastmem||Host computer|
|$d0.0000 to $de.7fff||Host computer||Host computer||Host computer|
|$de.8000 to $de.ffff||32k trampoline area||32k trampoline area||32k trampoline area|
|$df.0000 to $df.ffff||Host computer||Host computer||Host computer|
|$e0.0000 to $e7.ffff||Host computer or lower 512k MapROM area||Host computer or lower 512k MapROM area||Host computer or lower 512k MapROM area|
|$e8.0000 to $e9.ffff||Autoconfig and regsters||Autoconfig and regsters||Autoconfig and regsters|
|$ea.0000 to $f7.ffff||Host computer||Host computer||Host computer|
|$f8.0000 to $ff.ffff||Host computer or upper 512k MapROM area||Host computer or upper 512k MapROM area||Host computer or upper 512k MapROM area|
The ACA1221EC uses autoconfig, Vendor ID 4626 ($1212) and product ID 22 ($16). It is expected that the ACA1221EC is the first autoconfig device, and it will only work if it is mapped to $e9.0000 by the Amiga Kickstart. The 64k autoconfig space is divided into 16 4k-areas:
|$e9.0000 to $e9.0fff||Autoconfig nibbles|
|$e9.1000 to $e9.1fff||32 bytes memory window. This window is fully read/writable, and you can access with any bus width (8-, 16- and 32-bit-wide). This 32-byte area is mirrored 128 times. It is recommended to only use the first 32 bytes.|
|$e9.2000 to $e9.2fff||"trigger area". Reading this area returns 0. Writing to any location of this area can be considered "pressing enter". Only byte-wide write operations are recommended, as any higher width will also trigger a command twice (word-write) or even four times (longword-write). See further down for passing a command sequence.|
|$e9.3000 to $e9.3fff||status area of the card. Writing to this area has no effect. Reading this area returns the current status of the card in a single byte, which is mirrored 4096 times. See further down for a bit-by-bit description.|
|$e9.4000 to $e9.4fff||Reading returns bytes 0-255 of flash data, mirrored 16 times. Writing does nothing.|
|$e9.5000 to $e9.5fff||Reading returns bytes 256-511 of flash data, mirrored 16 times. Writing does nothing.|
|$e9.6000 to $e9.ffff||unused. Reading returns 0, writing does nothing.|
The autoconfig nibbles point to ROM vector $4f00. This will let you use continuous read access from $e9.4f00 up to $e9.50ff.
|bit 7||bit 6||bit 5||bit 4||bit 3||bit 2||bit 1||bit 0|
- JP-Protect will be 1 if the "unprotect" jumper is closed, otherwise 0
- JP-MapROM will be 0 if the "MapROM" jumper is closed, otherwise 1
- MapROM shows the current status of the 1MB MapROM option: 1=enabled
- MemOff and MemShuff bits will reflect the current status that has been set by the user.
- Speed1 and Speed0 will show the current clock speed as set by the user.
Passing a command
In order to execute a command on the ACA1221EC, write it to the memory area in $e91000, then execute it by writing any value into the trigger-area, then read the result code in the memory area.
A command is always 1-byte (the first byte), and it may have up to 31 parameter bytes. If your command has less than 31 parameter bytes, it is recommended to fill the rest of the memory area with $00. Available commands:
- $01: show version of the ACA1221EC card as result code in clear text, 0-terminated
- $02: get card's warranty ID (=serial number) and a human-readable name as result code (0-terminated string)
- $03: set memory control bits. One parameter byte contains MemShuff and MemOff in bits 0 and 1. Result code is "OK".
- $04: set temporary CPU speed until next cold boot. One parameter byte contains the selected speed in bits 0 and 1. Result code is "OK".
- $05: Activate Maprom. One parameter byte with the activation bit in LSB is required: Bit=1 means "activate MapROM", Bit=0 means "deactivate MapROM". Result code is "OK". When MapROM is activated, writes to the MapROM area (in "MemShuff" mode) are inhibited: They stay within the ACA1221EC (host computer won't see these accesses), but have no effect on memory contents.
- $06: Erase 512 bytes flash. Parameter bytes must be 0-terminated string "I AM SURE" and "unprotect" jumper must be set. Erasing means to set all 512 bytes to $ff. If the "I AM SURE"-string is not found, the result code will be "NO EFFECT". If the unprotect jumper is not set, you'll get "Error: Write protected.".
The $07 command (and all other unspecified commands) will show the version number of the ACA1221EC card in clear text, 0-terminated. This is identical to the $01 command.
Result codes: After execution of a command, a result code can be read in the memory area. The result code is clear text, ascii, 0-terminated.
Exact clock rates and clock switching
The base frequency of the ACA1221EC is 85.12548MHz. The four possible CPU clock rates are derived from this clock by whole-number division. Memory will always run at this main frequency, regardless of the CPU clock.
Use the $04 command to set CPU speeds. One parameter byte that can be $00, $01, $02 or $03 must follow.
- Speed $00 sets the divider to 4; the resulting CPU speed is 21.28MHz
- Speed $01 sets the divider to 3; the resulting CPU speed is 28.38MHz
- Speed $02 sets the divider to 5; the resulting CPU speed is 17.03MHz
- Speed $03 sets the divider to 2; the resulting CPU speed is 42.56MHz
For safety reasons, the ACA1221EC will always start with speed setting $02=17.03MHz.
For glitch-free speed changes, always use speed setting $00 (21.28MHz) as an intermediate speed. This will avoid short CPU clock pulses that could make the CPU crash. Only transitions to and from 21.28MHz are glitch-free, but a direct transition from 17MHz to 28MHz may cause a clock pulse as short as a 42MHz clock, which may cause trouble for CPU mask sets other than E13G. Only CPU mask E13G is known to work at 42.56MHz.
writing to flash
Writing to flash is automatically inhibited when the "unprotect" jumper is removed. If the jumper is closed, four changes are being made:
- The MapROM jumper cannot be set for mechanical reasons: Both jumpers can't be closed at the same time, because they share one pin.
- The Autoconfig ROM Diag Vector is disabled, so the computer won't attempt to use the flash contents on a cold-start. This is very useful if the flash contents are garbled and would keep the computer from starting.
- Byte-wise transparent writing to flash is possible in $e9.4000 and $e9.5000. It is recommended to verify written data, as writing is only possible if the byte in question has been $ff before. Single bytes cannot be set to $ff. Only the whole 512-byte area can be erased at a time.
- The Erase-Flash command $06 is enabled