;
; lores_playfield.asm
;
; This example sets up a 320 x 200 playfield with one bitplane, which
; is located at $21000. Also, a Copper list is set up at $20000.
;
; This example relies on the include file hw_examples.i.
;
LEA CUSTOM,a0 ; a0 points at custom chips
MOVE.W #$1200,BPLCON0(a0) ; One bitplane, enable composite color
MOVE.W #0,BPLCON1(a0) ; Set horizontal scroll value to 0
MOVE.W #0,BPL1MOD(a0) ; Set modulo to 0 for all odd bitplanes
MOVE.W #$0038,DDFSTRT(a0) ; Set data-fetch start to $38
MOVE.W #$00D0,DDFSTOP(a0) ; Set data-fetch stop to $D0
MOVE.W #$2C81,DIWSTRT(a0) ; Set DIWSTRT to $2C81
MOVE.W #$F4C1,DIWSTOP(a0) ; Set DIWSTOP to $F4C1
MOVE.W #$0F00,COLOR00(a0) ; Set background color to red
MOVE.W #$0FF0,COLOR01(a0) ; Set color register 1 to yellow
;
; Fill bitplane with $FF00FF00 to produce stripes
;
MOVE.L #$21000,a1 ; Point at beginning of bitplane
MOVE.L #$FF00FF00,d0 ; We will write $FF00FF00 long words
MOVE.W #2000,d1 ; 2000 long words = 8000 bytes
;
LOOP: MOVE.L d0,(a1)+ ; Write a long word
DBRA d1,LOOP ; Decrement counter and loop until done...
;
; Set up Copper list at $20000
;
MOVE.L #$20000,a1 ; Point at Copper list destination
LEA COPPERL(pc),a2 ; Point a2 at Copper list data
CLOOP: MOVE.L (a2),(a1)+ ; Move a word
CMPI.L #$FFFFFFFE,(a2)+ ; Check for last longword of Copper list
BNE CLOOP ; Loop until entire copper list is moved
;
; Point Copper at Copper list
;
MOVE.L #$20000,COP1LCH(a0) ; Write to Copper location register
MOVE.W COPJMP1(a0),d0 ; Force copper to $20000
;
; Start DMA
;
MOVE.W #(DMAF_SETCLR!DMAF_COPPER!DMAF_RASTER!DMAF_MASTER),DMACON(a0)
; Enable bitplane and Copper DMA
BRA .... ; Go do next task
;
; This is the data for the Copper list.
;
COPPERL:
DC.W BPL1PTH,$0002 ; Move $0002 to address $0E0 (BPL1PTH)
DC.W BPL1PTL,$1000 ; Move $1000 to address $0E2 (BPL1PTL)
DC.W $FFFF,$FFFE ; End of Copper list
;