2016-12-28 20:32:00 +00:00
|
|
|
|
|
|
|
|
|
|
|
ACME
|
|
|
|
|
|
|
|
...the ACME Crossassembler for Multiple Environments
|
|
|
|
|
|
|
|
--- cpu types ---
|
|
|
|
|
|
|
|
|
|
|
|
ACME supports the following cpu types:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*** 6502
|
|
|
|
|
|
|
|
This is the instruction set of the original NMOS 6502 designed by MOS
|
|
|
|
(later CSG).
|
|
|
|
There are 151 documented opcodes.
|
2016-12-29 12:02:12 +00:00
|
|
|
ACME does not use "A" to indicate "accumulator addressing"; just write
|
|
|
|
the mnemonic without any argument: "LSR" will work, "LSR A" won't.
|
2016-12-28 20:32:00 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*** 6510
|
|
|
|
|
|
|
|
This is the 6502 variant used in the C64 computer. It uses the same
|
|
|
|
instruction set as the 6502, but in addition to that, ACME supports
|
|
|
|
most of the undocumented opcodes as well.
|
2016-12-28 21:03:38 +00:00
|
|
|
See "docs/Illegals.txt" for more info.
|
2016-12-28 20:32:00 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*** 65c02
|
|
|
|
|
|
|
|
This is the CMOS re-design of the 6502. It seems to have also been
|
|
|
|
available from Rockwell, GTE/CMD and others. Features:
|
|
|
|
- new instructions:
|
2017-01-05 17:02:13 +00:00
|
|
|
BRA near_target branch always
|
2016-12-29 12:02:12 +00:00
|
|
|
PHX/PHY/PLX/PLY push/pull X/Y register
|
2017-01-05 17:02:13 +00:00
|
|
|
STZ $12 store zero in zp
|
|
|
|
STZ $12, x store zero in zp, x-indexed
|
|
|
|
STZ $1234 store zero absolute
|
|
|
|
STZ $1234, x store zero absolute, x-indexed
|
|
|
|
TRB $12 test and reset bits in zp
|
|
|
|
TRB $1234 test and reset bits absolute
|
|
|
|
TSB $12 test and set bits in zp
|
|
|
|
TSB $1234 test and set bits absolute
|
2016-12-28 20:32:00 +00:00
|
|
|
- new addressing modes for existing instructions:
|
2016-12-29 12:02:12 +00:00
|
|
|
LDA/STA/ADC/SBC ($12) zp indirect
|
|
|
|
AND/ORA/EOR/CMP ($12) zp indirect
|
2017-01-05 17:02:13 +00:00
|
|
|
BIT #$12 immediate
|
|
|
|
BIT $12, x zp, x-indexed
|
|
|
|
BIT $1234, x absolute, x-indexed
|
2016-12-29 12:02:12 +00:00
|
|
|
INC increment accumulator
|
|
|
|
DEC decrement accumulator
|
|
|
|
JMP ($1234, x) x-indexed indirect
|
2016-12-28 20:32:00 +00:00
|
|
|
- bugfix for flags in decimal mode
|
|
|
|
- bugfix for JMP($xxff) instruction
|
|
|
|
- undocumented opcodes are NOPs (although of different lengths)
|
|
|
|
There are 178 documented opcodes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*** r65c02
|
|
|
|
|
2017-01-05 20:26:51 +00:00
|
|
|
This is a superset of 65c02, probably originally by Rockwell. It adds
|
|
|
|
bit manipulation instructions:
|
2017-01-05 17:02:13 +00:00
|
|
|
BBR0 $12, near_target branch on bit reset in zp
|
|
|
|
BBS0 $12, near_target branch on bit set in zp
|
|
|
|
RMB0 $12 reset memory bit in zp
|
|
|
|
SMB0 $12 set memory bit in zp
|
|
|
|
The digit in the mnemonic is the bit number, therefore it must be in
|
|
|
|
the 0..7 range.
|
2016-12-28 20:32:00 +00:00
|
|
|
Chips with this instruction set seem to have been available from
|
|
|
|
Rockwell, GTE/CMD and others.
|
|
|
|
There are 210 documented opcodes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*** w65c02
|
|
|
|
|
2017-01-05 17:02:13 +00:00
|
|
|
This is a superset of r65c02, originating at WDC. It adds two new
|
|
|
|
instructions:
|
|
|
|
STP stop (wait for reset)
|
|
|
|
WAI wait for interrupt
|
2016-12-28 20:32:00 +00:00
|
|
|
There are 212 documented opcodes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*** 65816
|
|
|
|
|
|
|
|
This is a superset of 65c02, originally designed by WDC (it seems to
|
|
|
|
have been available from GTE/CMD as well). Features:
|
|
|
|
- register sizes can be changed to 16-bit
|
|
|
|
- 24-bit address space
|
2017-01-05 17:02:13 +00:00
|
|
|
- several new instructions (including block transfers)
|
|
|
|
- several new addressing modes for existing instructions
|
2016-12-28 20:32:00 +00:00
|
|
|
There are 256 documented opcodes, but one of them ("WDM") is reserved
|
|
|
|
for future expansion.
|
2016-12-29 12:02:12 +00:00
|
|
|
See "docs/65816.txt" for more info.
|
2016-12-28 20:32:00 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*** 65ce02
|
|
|
|
|
|
|
|
This is a superset of r65c02, originating at CSG. Features:
|
|
|
|
- Z register
|
|
|
|
- 16-bit stack pointer
|
|
|
|
- 16-bit branches
|
2017-01-05 17:02:13 +00:00
|
|
|
- new instructions (including a few 16-bit operations)
|
|
|
|
- new addressing modes for existing instructions
|
2016-12-28 21:03:38 +00:00
|
|
|
There is a known bug: SBC does not work correctly in decimal mode.
|
2016-12-28 20:32:00 +00:00
|
|
|
There are 256 documented opcodes, but one of them ("AUG") is reserved
|
|
|
|
for future expansion.
|
2017-01-05 17:02:13 +00:00
|
|
|
ACME uses different mnemonics for old and new (long) branch
|
2016-12-29 12:02:12 +00:00
|
|
|
instructions:
|
2017-01-05 17:02:13 +00:00
|
|
|
BEQ near_target old, 8-bit offset
|
|
|
|
LBEQ far_target new, 16-bit offset
|
2016-12-29 12:02:12 +00:00
|
|
|
The original datasheet called BRA ("branch always") BRU ("branch
|
|
|
|
unconditional") instead. ACME accepts both mnemonics.
|
2016-12-28 20:32:00 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*** 4502
|
|
|
|
|
|
|
|
This is basically the same as 65ce02, but
|
|
|
|
- MAP replaces AUG
|
|
|
|
- EOM is synonymous to NOP
|
|
|
|
This cpu core can be found in the CSG4510 chip in the C65.
|
|
|
|
There are 256 documented opcodes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*** c64dtv2
|
|
|
|
|
|
|
|
This is the cpu in version 2 of the C64DTV. It uses a superset of the
|
|
|
|
6502 instruction set. Features:
|
|
|
|
- new instructions:
|
2017-01-05 17:02:13 +00:00
|
|
|
BRA near_target branch always
|
2016-12-29 12:02:12 +00:00
|
|
|
SAC #$12 set accumulator mapping
|
|
|
|
SIR #$12 set index register mapping
|
2016-12-28 20:32:00 +00:00
|
|
|
- support for some of the undocumented opcodes.
|
2020-04-14 00:28:31 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Here's a family tree:
|
|
|
|
|
|
|
|
6502 (standard)
|
|
|
|
|
|
|
|
|
|\_6510 (+ undocumented opcodes of nmos6502)
|
|
|
|
|
|
|
|
|
|\_c64dtv2 (+ bra/sac/sir and some illegals)
|
|
|
|
|
|
|
|
|
\_65c02 (+ bra/phx/phy/plx/ply/stz/trb/tsb, ...)
|
|
|
|
|
|
|
|
|
|\_65816 (16 bit regs, 24 bit address space, ...)
|
|
|
|
|
|
|
|
|
\_r65c02 (+ bit manipulation instructions)
|
|
|
|
|
|
|
|
|
|\_w65c02 (+ stp/wai)
|
|
|
|
|
|
|
|
|
\_65ce02 (+ Z reg, long branches, ...)
|
|
|
|
|
|
|
|
|
\_4502 (+ map/eom)
|