English Amiga Board

English Amiga Board (http://eab.abime.net/index.php)
-   Coders. Asm / Hardware (http://eab.abime.net/forumdisplay.php?f=112)
-   -   copper skip and copjmp2 (http://eab.abime.net/showthread.php?t=101896)

Rock'n Roll 23 April 2020 20:43

copper skip and copjmp2
 
I make some tests with the copper skip instruction
and a second copperlist.

This program works if a wait instruction (on the same
line) before the skip instruction in the copperlist exists.
Without this wait instruction the skip instruction doesn't work.
I found no information about this behaviour in any documents.

Is this a normal behaviour?
Is this wait instruction always necessery?


start:
;.....
move.l #cop2,$84(a5) ; pointer COP
move.l #cop1,$80(a5) ; pointer COP
move.w d0,$88(a5) ; start COP
;.....
move.w #$ff01,skip ; dynamicly change from programm
;move.w #$fffe,skip
;.....

****************************************************************************

Cop1: ; copperlist 1
dc.w $1007,$fffe
dc.w $180,$F00 ; red
;dc.w $4007,$fffe ; wait $fffe
; without this instruction it doesn't work
dc.w $4007 ; the same as before??? !!!!!!!!
skip:
dc.w $ff01 ; skip $ff01 or wait $fffe
dc.w $8a,0 ; copjmp2 start (skip the next instruction)

dc.w $180,$0F0 ; green
dc.w $6007,$fffe
dc.w $180,$00F ; blue
dc.w $ffff,$fffe

****************************************************************************

Cop2: ; copperlist 2
dc.w $8007,$fffe
dc.w $180,$000 ; black
dc.w $A007,$fffe
dc.w $180,$FFF ; white
dc.w $C007,$fffe
dc.w $180,$FF0 ; yellow
dc.w $ffff,$fffe


;remeber: the only different between wait and skip are:
;SECOND WAIT INSTRUCTION WORD (IR2)
;Bit 0 Always set to 0 - so the end is even

;SECOND SKIP INSTRUCTION WORD (IR2)
;Bit 1 Always set to 1 - so the end is odd

DanScott 23 April 2020 22:22

It only does the SKIP if the beam has passed $4007.. without the WAIT, the beam is somewhere just after $1007 by the time it hits the skip instruction...

ross 23 April 2020 22:35

You don't have to use SKIP but CNOP, see this code:
Code:

start:
        lea        $dff000,a5
        move.w        #$4000,$9a(a5)
        move.w        #$0100,$96(a5)

        move.l #cop2,$84(a5) ; pointer COP
        move.l #cop1,$80(a5) ; pointer COP
;        move.w d0,$88(a5)        ; start COP
;        WHY! I wonder why everywhere in tutorials they put a copperjump without explaining the contraindications..

.ll        moveq        #50-1,d1        ;1s blink
.wb        moveq        #$20,d0
        and.w        $1e(a5),d0
        beq.b        .wb
        move.w        d0,$9c(a5)
        dbf        d1,.wb
        eori.w        #$1fe^$8a,skip        ; ;)
        bra.b        .ll


        SECTION        CHIP,data_c

****************************************************************************
cop1: ; copperlist 1
        dc.w $1007,$fffe
        dc.w $180,$F00 ; red

        dc.w $4007,$fffe ; wait $fffe
skip:
        dc.w $8a,0 ; copjmp2 start or CNOP

        dc.w $180,$0F0 ; green
        dc.w $6007,$fffe
        dc.w $180,$00F ; blue
        dc.w $ffff,$fffe

****************************************************************************
cop2: ; copperlist 2
        dc.w $8007,$fffe
        dc.w $180,$000 ; black
        dc.w $A007,$fffe
        dc.w $180,$FFF ; white
        dc.w $C007,$fffe
        dc.w $180,$FF0 ; yellow
        dc.w $ffff,$fffe

SKIP skips following MOVE instruction unless beam position has been reached.
But in you code (without the WAIT) beam position is in video line $10, so the following MOVE (the CJMP) is always executed!

EDIT: ops, too much time to edit the code and Dan already replied :D

Rock'n Roll 24 April 2020 19:44

Thanks, now I know how the copper skip instruction works.
(I believed the skip command its a combination of wait and skip.
It waits like the normal wait command and if the condition is true,
then it skips the next move instruction.)

DanScott 24 April 2020 19:51

No, the SKIP instruction doesn't wait at all. Otherwise my copper "loops" would not work


All times are GMT +2. The time now is 03:32.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2020, vBulletin Solutions Inc.

Page generated in 0.04950 seconds with 11 queries