Files
playfield/playfield.s
T
2024-03-17 15:47:29 +11:00

67 lines
1.9 KiB
ArmAsm

CUSTOM = $DFF000
BPLCON0 = $100
BPLCON1 = $102
BPLCON2 = $104
BPL1MOD = $108
DDFSTRT = $092
DDFSTOP = $094
DIWSTRT = $08E
DIWSTOP = $090
VPOSR = $004
COLOR00 = $180
COLOR01 = $182
COLOR02 = $184
COLOR03 = $186
DMACON = $096
COPJMP1 = $088
COP1LCH = $080 ;Copper location register 1
; (high three bits)
LEA CUSTOM,A0 ;A0 points at custom chips
MOVE.W #$1200,BPLCON0(A0) ;One bit-plane, 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 bit-planes
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 biy-plane with $FF00FF00 to produce stripes
;
MOVE.L #$21000,A1 ;Point at beginning of bit-plane
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
SUBQ.W #1,D1 ;Decrement counter
BNE LOOP ;Loop until bit-plane is filled
;
; Set up Copper list at $20000
;
MOVE.L #$20000,A1 ;Point at Copper list destination
LEA COPPERL,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
;
; 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 #$8380,DMACON(A0) ;Enable bit-plane and Copper DMA
HERE: BRA HERE ;Do do next task
;
; This is the data for the Copper list.
;
COPPERL:
DC.W $00E0,$0002 ;Move $0002 to address $0E0
; (BPL1PTH)
DC.W $00E2,$1000 ;Move $1000 to address $0E2
; (BPL1PTL)
DC.W $FFFF,$FFFE ;End of Copper list
;