mirror of
https://github.com/uffejakobsen/acme.git
synced 2024-12-01 16:50:46 +00:00
131 lines
5.4 KiB
Plaintext
131 lines
5.4 KiB
Plaintext
|
|
||
|
|
||
|
ACME
|
||
|
|
||
|
...the ACME Crossassembler for Multiple Environments
|
||
|
|
||
|
--- Undocumented ("illegal") opcodes ---
|
||
|
|
||
|
|
||
|
Since release 0.87, ACME contains support for some of the undocumented
|
||
|
opcodes of the 6502 processor. Here they are:
|
||
|
|
||
|
| addressing mode |
|
||
|
Mnemo | 8 8,x 8,y 16 16,x 16,y (8,x) (8),y | performs:
|
||
|
------+--------------------------------------------------+-----------
|
||
|
slo | 07 17 -- 0f 1f 1b 03 13 | asl + ora
|
||
|
rla | 27 37 -- 2f 3f 3b 23 33 | rol + and
|
||
|
sre | 47 57 -- 4f 5f 5b 43 53 | lsr + eor
|
||
|
rra | 67 77 -- 6f 7f 7b 63 73 | ror + adc
|
||
|
sax | 87 -- 97 8f -- -- 83 -- | stx + sta
|
||
|
lax | a7 -- b7 af -- bf a3 b3 | ldx + lda
|
||
|
dcp | c7 d7 -- cf df db c3 d3 | dec + cmp
|
||
|
isc | e7 f7 -- ef ff fb e3 f3 | inc + sbc
|
||
|
|
||
|
In release 0.89, further ones were added:
|
||
|
|
||
|
| addressing mode |
|
||
|
Mnemo | implied #8 8 8,x 16 16,x | performs:
|
||
|
------+-------------------------------------+------------------------
|
||
|
anc | -- 2b -- -- -- -- | A = A & arg, then C=N
|
||
|
asr | -- 4b -- -- -- -- | A = A & arg, then lsr
|
||
|
arr | -- 6b -- -- -- -- | A = A & arg, then ror
|
||
|
sbx | -- cb -- -- -- -- | X = (A & X) - arg
|
||
|
dop | 80* 80 04 14 -- -- | skips next byte
|
||
|
top | 0c* -- -- -- 0c 1c | skips next two bytes
|
||
|
jam | 02 -- -- -- -- -- | crash (wait for reset)
|
||
|
|
||
|
Example:
|
||
|
!cpu 6510 ; activate additional mnemonics...
|
||
|
lax (some_zp_label,x) ; ...and use them. No, this
|
||
|
dcp (other_zp_label),y ; example does not make sense.
|
||
|
|
||
|
*) Note that "dop" and "top" can be used with implied addressing, but
|
||
|
the generated opcodes are those for immediate and 16-bit absolute
|
||
|
addressing, respectively. Using dop/top with x-indexed addressing
|
||
|
might have its uses when timing is critical (crossing a page border
|
||
|
adds a penalty cycle).
|
||
|
|
||
|
There is no guarantee that these opcodes actually work on a given 6502
|
||
|
(or 6510, or 8500, or 8502) CPU. But as far as I know, nobody ever
|
||
|
found an unmodified C64/C128 where these illegals didn't work. That's
|
||
|
why I used "6510" as the CPU keyword instead of "6502illegal" or
|
||
|
something like that.
|
||
|
|
||
|
These illegals will definitely *not* work on 65c02 and 65816 CPUs. But
|
||
|
I really should not have to tell you that ;)
|
||
|
|
||
|
Because there are no official mnemonics for these opcodes, different
|
||
|
people use different names for them. I hope my choices are not too
|
||
|
exotic for your taste.
|
||
|
|
||
|
Just for the sake of completeness: Here are all the remaining opcodes
|
||
|
(the ones ACME won't generate):
|
||
|
|
||
|
Opcode| Description
|
||
|
------+--------------------------------------------------------------
|
||
|
0b | same as 2b anc #8
|
||
|
12 | same as 02 and others jam CRASH
|
||
|
1a | same as (*legal*) ea nop
|
||
|
22 | same as 02 and others jam CRASH
|
||
|
32 | same as 02 and others jam CRASH
|
||
|
34 | same as 14 and others dop 8,x
|
||
|
3a | same as (*legal*) ea nop
|
||
|
3c | same as 1c and others top 16,x
|
||
|
42 | same as 02 and others jam CRASH
|
||
|
44 | same as 04 dop 8
|
||
|
52 | same as 02 and others jam CRASH
|
||
|
54 | same as 14 and others dop 8,x
|
||
|
5a | same as (*legal*) ea nop
|
||
|
5c | same as 1c and others top 16,x
|
||
|
62 | same as 02 and others jam CRASH
|
||
|
64 | same as 04 dop 8
|
||
|
72 | same as 02 and others jam CRASH
|
||
|
74 | same as 14 and others dop 8,x
|
||
|
7a | same as (*legal*) ea nop
|
||
|
7c | same as 1c and others top 16,x
|
||
|
82 | same as c2/e2 dop #8, but said to CRASH sometimes
|
||
|
89 | same as 80 dop #8
|
||
|
8b | see notes below
|
||
|
92 | same as 02 and others jam CRASH
|
||
|
93 | see notes below
|
||
|
9b | see notes below
|
||
|
9c | see notes below
|
||
|
9e | see notes below
|
||
|
9f | see notes below
|
||
|
ab | see notes below
|
||
|
b2 | same as 02 and others jam CRASH
|
||
|
bb | see notes below
|
||
|
c2 | same as 82/e2 dop #8, but said to CRASH sometimes
|
||
|
d2 | same as 02 and others jam CRASH
|
||
|
d4 | same as 14 and others dop 8,x
|
||
|
da | same as (*legal*) ea nop
|
||
|
dc | same as 1c and others top 16,x
|
||
|
e2 | same as 82/c2 dop #8, but said to CRASH sometimes
|
||
|
eb | same as (*legal*) e9 sbc #8
|
||
|
f2 | same as 02 and others jam CRASH
|
||
|
f4 | same as 14 and others dop 8,x
|
||
|
fa | same as (*legal*) ea nop
|
||
|
fc | same as 1c and others top 16,x
|
||
|
|
||
|
|
||
|
Concerning opcodes 8b, 93, 9b, 9c, 9e, 9f, ab, bb:
|
||
|
|
||
|
These opcodes are said to be unstable. For more information about what
|
||
|
they do, see these documents:
|
||
|
John West, Marko Mäkelä. '64doc' file, 1994/06/03.
|
||
|
Extra Instructions Of The 65XX Series CPU, Adam Vardy, 27 Sept. 1996
|
||
|
6502 Undocumented Opcodes, by Freddy Offenga, 5/17/1997
|
||
|
AAY64 (All About Your 64)
|
||
|
|
||
|
I did not see much point in assigning mnemonics for these opcodes. The
|
||
|
reference documents above call them:
|
||
|
8b: ane, xaa
|
||
|
93: sha, axa, ahx
|
||
|
9b: shs, tas, xas
|
||
|
9c: shy, say, sya
|
||
|
9e: shx, xas, sxa
|
||
|
9f: sha, axa, ahx
|
||
|
ab: lxa, oal, atx
|
||
|
bb: las, lar, lae
|