****************************************************************************
*(Amiga)       Display.s      Example code to display a playfield
****************************************************************************

               INCLUDE        "c:\headers.s\amiga\hardware\custom.i"

* Copper macros
cwait          MACRO          x,y
               DC.W           ($2c00+((\2)<<8)+(\1))!1,$fffe
               ENDM

cskip          MACRO          x,y
               DC.W           ($2c00+((\2)<<8)+(\1))!1,$ffff
               ENDM

cmove          MACRO          address,data
               DC.W           (\1)&$fffe,(\2)
               ENDM           

cend           MACRO
               DC.W           $ffff,$fffe
               ENDM

custom         EQU            $DFF000

               SECTION        example,CODE_C

start          movem.l        d0-d7/a0-a6,-(sp)
               move.l         #custom,a0
*              -------------------------------------------------------------
* Disable bitplane/copper/sprite DMA
               move.w         #%0000000110100000,dmacon(a0)
*              -------------------------------------------------------------
* Setup our palette
               lea            color(a0),a1        Address of colour registers
               lea            palette(pc),a2
               moveq          #32,d0
               bra.s          next_color
color_loop     move.w         (a2)+,(a1)+         Copy palette into registers
next_color     dbra           d0,color_loop
*              -------------------------------------------------------------
* Define the playfield
               move.w         #$2c81,diwstrt(a0)
               move.w         #$2cc1,diwstop(a0)
               move.w         #$0038,ddfstrt(a0)
               move.w         #$00d0,ddfstop(a0)
               move.w         #0,bpl1mod(a0)
               move.w         #0,bpl2mod(a0)
*              -------------------------------------------------------------
* Put bitplane addresses into copper list
               lea            copper_list(pc),a1
               lea            picture(pc),a2
               move.l         a2,d0
               moveq          #5,d1
               bra.s          next_bitplane
bitplane_loop  swap           d0              High word of address
               move.w         d0,2(a1)
               swap           d0              Low word of address
               move.w         d0,6(a1)
               add.l          #256*40,d0      Next bitplane address
               add.w          #8,a1
next_bitplane  dbra           d1,bitplane_loop
*              -------------------------------------------------------------
* Setup copper
               lea            copper_list(pc),a1
               move.l         a1,cop1lc(a0)
               move.w         #0,copjmp1(a0)
*              -------------------------------------------------------------
* Other bitplane control registers
               move.w         #$5200,bplcon0(a0)
               move.w         #0,bplcon1(a0)
               move.w         #0,bplcon2(a0)
*              -------------------------------------------------------------
* Enable bitplane and copper DMA (switch on screen !)
               move.w         #%1000001110000000,dmacon(a0)
*              -------------------------------------------------------------
* Wait forever
               move.l         #300000,d0
wait_loop      subq.l         #1,d0
               bne            wait_loop
*              -------------------------------------------------------------
out            movem.l        (sp)+,d0-d7/a0-a6
               rts
*---------------------------------------------------------------------------
copper_list    cmove          bplpt+0,0               1st bitplane address
               cmove          bplpt+0+2,0
               cmove          bplpt+4,0               2nd
               cmove          bplpt+4+2,0
               cmove          bplpt+8,0               3rd
               cmove          bplpt+8+2,0
               cmove          bplpt+12,0              4th
               cmove          bplpt+12+2,0
               cmove          bplpt+16,0              5th
               cmove          bplpt+16+2,0
               cend
*              -------------------------------------------------------------
* The palette and picture data
palette        INCBIN         palette.dat
picture        INCBIN         picture.dat

               END
