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
Jump to: navigation, search
(made basic info table shorter)
(COP note)
 
(35 intermediate revisions by the same user not shown)
Line 7: Line 7:
|'''Speed'''
|'''Speed'''
|+
|+
|stack
|[[Stack Addressing|Stack]] (Interrupt)
|02
|02
|2 bytes
|2 bytes
|7 cycles
|8 cycles*
|}
|}


{| class="wikitable" style="float:right;clear:right;width:30%"
{| class="wikitable" style="float:right;clear:right;width:30%"
!colspan="9"|Flags Clobbered
!colspan="9"|Flags Affected
|+
|+
|N
|[[N Flag|N]]
|V
|[[V Flag|V]]
|M
|[[M Flag|M]]
|X
|[[X Flag|X]]
|D
|[[D Flag|D]]
|I
|[[I Flag|I]]
|Z
|[[Z Flag|Z]]
|C
|[[C Flag|C]]
|+
|+
|.
|.
Line 35: Line 35:
|}
|}


'''COP''' (Co-Processor) is a [[65c816]] instruction designed to run a co-processor command.
'''COP''' (Co-Processor) is a [[65c816]] instruction designed to run a co-processor command. COP triggers a software interrupt and control is routed to the COP handler, whose address is stored in the COP vector at $00:FFE4 (in [[native mode]] anyway, in emulation mode $FFF4 is used instead).  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>
 
The state of the [[interrupt disable flag]] has no effect on the behavior of COP although it will be set after COP runs.
 
Some examples of the kinds of microprocessors COP could be used to communicate with include:
* floating point
* graphics
 
The [[PBR]] is cleared, but in native mode its previous value is pushed to the [[stack]].
 
==== Syntax ====
<pre>
COP sig
</pre>
 
==== 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]].
 
[[File:cop.png]]
 
COP is not really used for anything on the SNES.<sup>[7]</sup>
 
=== See Also ===
* [[BRK]]
* [[WDM]]
* [[Enhancement Chips]]


=== External Links ===
=== External Links ===
* [[Eyes & Lichty]] page on COP: https://archive.org/details/0893037893ProgrammingThe65816/page/n473
# [[Eyes & Lichty]], [https://archive.org/details/0893037893ProgrammingThe65816/page/447 page 447] on COP
* [[Labiak]] page on COP: https://archive.org/details/Programming_the_65816/page/n145
# [[Labiak]], [https://archive.org/details/Programming_the_65816/page/n145 page 135] on COP
* snes9x implementation of COP: https://github.com/snes9xgit/snes9x/blob/master/cpuops.cpp#L2738
# 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
# https://forums.nesdev.org/viewtopic.php?p=176406#p176406


[[Category:ASM]]
[[Category:ASM]]
[[Category:65c816 additions]]
[[Category:65c816 additions]]
[[Category:Two-byte Instructions]]
[[Category:Single Admode Mnemonics]]

Latest revision as of 03:52, 23 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. COP triggers a software interrupt and control is routed to the COP handler, whose address is stored in the COP vector at $00:FFE4 (in native mode anyway, in emulation mode $FFF4 is used instead). 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 although it will be set after COP runs.

Some examples of the kinds of microprocessors COP could be used to communicate with include:

  • floating point
  • graphics

The PBR is cleared, but in native mode its previous value is pushed to the stack.

Syntax

COP sig

Cycle Skipped

cop.png

COP is not really used for anything on the SNES.[7]

See Also

External Links

  1. Eyes & Lichty, page 447 on COP
  2. Labiak, page 135 on COP
  3. section 7.15 of 65c816 datasheet
  4. snes9x implementation of COP: https://github.com/snes9xgit/snes9x/blob/master/cpuops.cpp#L2738
  5. https://ersanio.gitbook.io/assembly-for-the-snes/deep-dives/misc
  6. https://undisbeliever.net/snesdev/65816-opcodes.html#software-interrupts
  7. https://forums.nesdev.org/viewtopic.php?p=176406#p176406