Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
hardware:copper_programming_model [2010/03/07 00:06]
gilgamesh
hardware:copper_programming_model [2010/03/09 14:53] (current)
gilgamesh
Line 1: Line 1:
 ====== Programming Copper ====== ====== Programming Copper ======
-Writing to one of the two registers ''COPJMP//n//'' (//n// = 1,2) causes a strobe and forces the copper to start operation and load the copper list beginning at the address in ''COPLC//n//''Then Copper is restarted at each vertical blanking+Writing to one of the two registers ''COPJMP//n//'' (//n// = 1,2) causes a strobe and forces the copper to start operation and load the copper list beginning at the address in ''COPLC//n//''The commands in the copper list, that is the sequence of copper commands in chipmem, is executed one by one. The Copper is restarted at each vertical blanking, forcing it to reload the command ''COPLC//n//'' points to.
- +
-The ''CDANG'' bit permits access to 1 the register address space between $40 and $7, including Blitter's registers. +
  
 Copper can call the CPU's attention by filing an interrupt request in ''INTREQ''. It can also move data into ''COPLC//n//'' to form a loop. To stop, Copper can either wait for the impossible, or turn its own access to DMA off. Copper can call the CPU's attention by filing an interrupt request in ''INTREQ''. It can also move data into ''COPLC//n//'' to form a loop. To stop, Copper can either wait for the impossible, or turn its own access to DMA off.
  
-===== Copper Lists ===== +===== Copper and Blitter =====
-Copper lists can consist of the following instructions:+
  
-=== WAIT === +The ''CDANG'' bit in ''COPCON'' permits access to 1 the register address space between $40 and $7including Blitter's registers.
-(2 word) waits until video beam counter is greater or equal the argument +
-During **WAIT** the memory bus will not be accessedfreeing it for different tasks. The bus is accessed at //uneven// memory cycles.+
  
-^15^14^13^12^11^10^9^8^7^6^5^4^3^2^1^0^ ^15^14^13^12^11^10^9^8^7^6^5^4^3^2^1^0^ +^15^14^13^12^11^10^09^08^07^06^05^04^03^02^01^00^ ^15^14^13^12^11^10^09^08^07^06^05^04^03^02^01^  00  ^ 
- VP  ||||||||  HP  |||||||1| |bfd|  VE  |||||||  HE  |||||||0| +| ||||||||||||||||::| |||||||||||||||  cdang|
- +
-  * ''VP'' vertical position 0,...,255: since there are 262 beam positions in NTSC, 0,...,6 refer to the last 7 lines before vertical blanking +
-  * ''HP'' horizontal position 0,...,112: 4 or 8 lines are aggregated   +
-  * ''bfd'' blitter finished disable bit: if 0 the Copper will wait until Blitter has set blitter finished flag +
-  * ''VE'' vertical compare enable: for each 0, the comparison with the according bit in VP is always true +
-  * ''HE'' horizontal compare enable: for each 0, the comparison with the according bit in HP is always true +
- +
-=== MOVE === +
- (2 word) moves data word into secified data register +
-^15^14^13^12^11^10^9^8^7^6^5^4^3^2^1^0^ ^15^14^13^12^11^10^9^8^7^6^5^4^3^2^1^0+
-|0|0|0|0|0|0|0|0 DA  |||||| |0| |  data  |||||||||||||||| +
- +
-  * ''DA''the destination register's address +
-  * ''data''one word of data to be written to the destination register +
- +
-=== SKIP === +
- (2 word) skip next instruction if video beam counter is greater or equal the argument +
- +
-^15^14^13^12^11^10^9^8^7^6^5^4^3^2^1^0^ ^15^14^13^12^11^10^9^8^7^6^5^4^3^2^1^0^ +
-|  VP  ||||||||  HP  |||||||1| |bfd|  VE  |||||||  HE  |||||||0| +
- +
-(see ''WAIT'' for reference) +
- +
-==== Copper Lists ==== +
-Writing to one of the two registers ''COPJMP//n//'' (n=1,2) causes a strobe and forces the copper to start operation and load the copper list beginning at the address in ''COPLC//n//''. Then Copper is restarted at each vertical blanking. +
- +
-The ''CDANG'' bit permits access to 1 the register address space between $40 and $7, including Blitter's registers. It resides in the ''COPCON'' register. +
- +
-^15^14^13^12^11^10^9^8^7^6^5^4^3^2^1^0^ ^15^14^13^12^11^10^9^8^7^6^5^4^3^2^1^0^ +
-| |||||||||||||||| | |||||||||||||||  cdang| +
- +
-Copper can call the CPU's attention by filing an interrupt request in ''INTREQ''. It can also move data into ''COPLC//n//'' to form a loop. To stop, Copper can either wait for the impossible by ''$FFFF,$FFFF'', or turn its own access to DMA off.+
  
 +===== Copper Lists =====
 Copper lists can consist of the following instructions: Copper lists can consist of the following instructions:
  
-=== WAIT ===+==== WAIT ====
 waits until video beam counter is greater or equal the argument waits until video beam counter is greater or equal the argument
 During **WAIT** the memory bus will not be accessed, freeing it for different tasks. The bus is accessed at //uneven// memory cycles. During **WAIT** the memory bus will not be accessed, freeing it for different tasks. The bus is accessed at //uneven// memory cycles.
  
-^15^14^13^12^11^10^9^8^7^6^5^4^3^2^1^0^ ^15^14^13^12^11^10^9^8^7^6^5^4^3^2^1^0^ +^15^14^13^12^11^10^09^08^07^06^05^04^03^02^01^00^ ^15^14^13^12^11^10^09^08^07^06^05^04^03^02^01^00^ 
-|  VP  ||||||||  HP  |||||||1| |bfd|  VE  |||||||  HE  |||||||0|+|  VP  ||||||||  HP  |||||||1|::: |bfd|  VE  |||||||  HE  |||||||0|
  
   * ''VP'' vertical position 0,...,255: since there are 262 beam positions in NTSC, 0,...,6 refer to the last 7 lines before vertical blanking   * ''VP'' vertical position 0,...,255: since there are 262 beam positions in NTSC, 0,...,6 refer to the last 7 lines before vertical blanking
Line 64: Line 27:
   * ''HE'' horizontal compare enable: for each 0, the comparison with the according bit in HP is always true   * ''HE'' horizontal compare enable: for each 0, the comparison with the according bit in HP is always true
  
-=== MOVE ===+==== MOVE ====
 moves data word into secified data register moves data word into secified data register
-^15^14^13^12^11^10^9^8^7^6^5^4^3^2^1^0^ ^15^14^13^12^11^10^9^8^7^6^5^4^3^2^1^0^ +^15^14^13^12^11^10^09^08^07^06^05^04^03^02^01^00^ ^15^14^13^12^11^10^09^08^07^06^05^04^03^02^01^00^ 
-|0|0|0|0|0|0|0|0|  DA  |||||| |0| | |  data  ||||||||||||||||+|0|0|0|0|0|0|0|0|  DA  |||||| |0|::: | |  data  ||||||||||||||||
  
   * ''DA'': the destination register's address   * ''DA'': the destination register's address
   * ''data'': one word of data to be written to the destination register   * ''data'': one word of data to be written to the destination register
  
-=== SKIP ===+==== SKIP ====
 skip next instruction if video beam counter is greater or equal the argument skip next instruction if video beam counter is greater or equal the argument
  
-^15^14^13^12^11^10^9^8^7^6^5^4^3^2^1^0^ ^15^14^13^12^11^10^9^8^7^6^5^4^3^2^1^0^ +^15^14^13^12^11^10^09^08^07^06^05^04^03^02^01^00^ ^15^14^13^12^11^10^09^08^07^06^05^04^03^02^01^00^ 
-|  VP  ||||||||  HP  |||||||1| |bfd|  VE  |||||||  HE  |||||||0|+|  VP  ||||||||  HP  |||||||1|::: |bfd|  VE  |||||||  HE  |||||||0|
  
 (see ''WAIT'' for reference) (see ''WAIT'' for reference)
Line 86: Line 49:
 |  COP1LC  |  080  |  2 words  | |  COP1LC  |  080  |  2 words  |
 |  COP2LC  |  080  |  2 words  | |  COP2LC  |  080  |  2 words  |
- 
  
  
hardware/copper_programming_model.1267916817.txt.gz · Last modified: 2010/03/07 00:06 by gilgamesh
Back to top
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0