Agnus/
Read/ Denise/
Register Address Write Paula Function
-------- ------- ----- ------- --------
COPINS 08C W A Copper instruction fetch identify
This is a dummy address that is generated by the
Copper whenever it is loading instructions into
its own instruction register. This actually occurs
every Copper cycle except for the second (IR2)
cycle of the MOVE instruction. The three types
of instructions are shown below.
MOVE Move immediate to destination.
WAIT Wait until beam counter is equal to, or
greater than. (keeps Copper off of bus
until beam position has been reached).
SKIP Skip if beam counter is equal to or greater
than (skips following MOVE instruction unless
beam position has been reached).
MOVE WAIT UNTIL SKIP IF
-------- ----------- ------------
BIT# IR1 IR2 IR1 IR2 IR1 IR2
---- ---- ---- ---- ---- ---- ----
15 X RD15 VP7 BFD * VP7 BFD *
14 X RD14 VP6 VE6 VP6 VE6
13 X RD13 VP5 VE5 VP5 VE5
12 X RD12 VP4 VE4 VP4 VE4
11 X RD11 VP3 VE3 VP3 VE3
10 X RD10 VP2 VE2 VP2 VE2
09 X RD09 VP1 VE1 VP1 VE1
08 DA8 RD08 VP0 VE0 VP0 VE0
07 DA7 RD07 HP8 HE8 HP8 HE8
06 DA6 RD06 HP7 HE7 HP7 HE7
05 DA5 RD05 HP6 HE6 HP6 HE6
04 DA4 RD04 HP5 HE5 HP5 HE5
03 DA3 RD03 HP4 HE4 HP4 HE4
02 DA2 RD02 HP3 HE3 HP3 HE3
01 DA1 RD01 HP2 HE2 HP2 HE2
00 0 RD00 1 0 1 1
IR1=First instruction register
IR2=Second instruction register
DA =Destination address for MOVE instruction. Fetched
during IR1 time, used during IR2 time on RGA bus.
RD =RAM data moved by MOVE instruction at IR2 time
directly from RAM to the address given by the
DA field.
VP =Vertical beam position comparison bit.
HP =Horizontal beam position comparison bit.
VE =Enable comparison (mask bit).
HE =Enable comparison (mask bit).
* NOTE BFD=Blitter finished disable. When this bit
is true, the Blitter Finished flag will
have no effect on the Copper. When this
bit is zero, the Blitter Finished flag
must be true (in addition to the rest of
the bit comparisons) before the Copper
can exit from its wait state or skip
over an instruction. Note that the V7
comparison cannot be masked.
The Copper is basically a two-cycle machine that
requests the bus only during odd memory cycles
(4 memory cycles per instruction). This prevents
collisions with display, audio, disk, refresh, and
sprites, all of which use only even cycles. It
therefore needs (and has) priority over only the
blitter and microprocessor.
There are only three types of instructions:
MOVE immediate, WAIT until, and SKIP if. All
instructions (except for WAIT) require two bus
cycles (and two instruction words). Since only
the odd bus cycles are requested, four memory
cycle times are required per instruction
(memory cycles are 280 ns.)
There are two indirect jump registers, cop1lc and
cop2lc . these are 18-bit pointer registers whose
contents are used to modify the program counter for
initialization or jumps. They are transferred to
the program counter whenever strobe addresses
copjmp1 or copjmp2 are written. in addition,
cop1lc is automatically used at the beginning of
each vertical blank time.
It is important that one of the jump registers be
initialized and its jump strobe address hit after
power-up but before Copper DMA is initialized.
This insures a determined startup address and state.