We've just updated MediaWiki and its underlying software. If anything doesn't look or work quite right, please mention it to us. --RanAS
COP: Difference between revisions
From SnesLab
(→External Links: hid archive URL for E&L) |
(bullet points on signature bytes; more info) |
||
Line 35: | Line 35: | ||
|} | |} | ||
'''COP''' (Co-Processor) is a [[65c816]] instruction designed to run a co-processor command. The byte following the opcode is called the [[signature byte]] and is required by assemblers | '''COP''' (Co-Processor) is a [[65c816]] instruction designed to run a co-processor command. The byte following the opcode is called the [[signature byte]] and is required by assemblers: | ||
* Signature bytes of 00h to 7Fh can be programmer-defined | |||
* Signature bytes of 80h to FFh are reserved for future microprocessors by the [https://www.westerndesigncenter.com/ Western Design Center]<sup>[3]</sup> | |||
COP triggers a software interrupt and control is routed to the COP handler, whose address is stored in the COP vector at $FFF4. | The state of the [[interrupt disable flag]] has no effect on the behavior of COP. | ||
COP triggers a software interrupt and control is routed to the COP handler, whose address is stored in the COP vector at $FFF4. COP could be used to communicate with a floating point coprocessor, for example. | |||
The [[PBR]] is cleared, but in native mode its previous value is pushed to the [[stack]]. | The [[PBR]] is cleared, but in native mode its previous value is pushed to the [[stack]]. | ||
Line 55: | Line 59: | ||
=== External Links === | === External Links === | ||
# [[Eyes & Lichty]], [https://archive.org/details/0893037893ProgrammingThe65816/page/447 page 447] on COP | |||
# [[Labiak]], [https://archive.org/details/Programming_the_65816/page/n145 page 135] on COP | |||
# section 7.15 of 65c816 datasheet | |||
# snes9x implementation of COP: https://github.com/snes9xgit/snes9x/blob/master/cpuops.cpp#L2738 | |||
# https://ersanio.gitbook.io/assembly-for-the-snes/deep-dives/misc | |||
# https://undisbeliever.net/snesdev/65816-opcodes.html#software-interrupts | |||
[[Category:ASM]] | [[Category:ASM]] |
Revision as of 19:45, 9 August 2024
Basic Info | |||||||
---|---|---|---|---|---|---|---|
Addressing Mode | Opcode | Length | Speed | ||||
Stack (Interrupt) | 02 | 2 bytes | 8 cycles* |
Flags Affected | ||||||||
---|---|---|---|---|---|---|---|---|
N | V | M | X | D | I | Z | C | |
. | . | . | . | 0 | 1 | . | . |
COP (Co-Processor) is a 65c816 instruction designed to run a co-processor command. The byte following the opcode is called the signature byte and is required by assemblers:
- Signature bytes of 00h to 7Fh can be programmer-defined
- Signature bytes of 80h to FFh are reserved for future microprocessors by the Western Design Center[3]
The state of the interrupt disable flag has no effect on the behavior of COP.
COP triggers a software interrupt and control is routed to the COP handler, whose address is stored in the COP vector at $FFF4. COP could be used to communicate with a floating point coprocessor, for example.
The PBR is cleared, but in native mode its previous value is pushed to the stack.
Syntax
COP sig
Cycle Skipped
- COP takes one fewer cycle in emulation mode as it doesn't need to push the program counter bank register to the stack.
See Also
External Links
- Eyes & Lichty, page 447 on COP
- Labiak, page 135 on COP
- section 7.15 of 65c816 datasheet
- snes9x implementation of COP: https://github.com/snes9xgit/snes9x/blob/master/cpuops.cpp#L2738
- https://ersanio.gitbook.io/assembly-for-the-snes/deep-dives/misc
- https://undisbeliever.net/snesdev/65816-opcodes.html#software-interrupts