mirror of
https://github.com/badvision/lawless-legends.git
synced 2025-03-03 16:29:06 +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<65>. '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
|