home *** CD-ROM | disk | FTP | other *** search
- ;
- ; hires_payfield.asm
- ;
- ; This example sets up a high resolution, interlaced display with one
- ; bitplane. This example also relies on the include file hw_examples.i.
-
- ;
- LEA CUSTOM,a0 ; Address of custom chips
- MOVE.W #$9204,BPLCON0(a0) ; Hires, one bitplane, interlaced
- MOVE.W #0,BPLCON1(a0) ; Horizontal scroll value = 0
- MOVE.W #80,BPL1MOD(a0) ; Modulo = 80 for odd bitplanes
- MOVE.W #80,BPL2MOD(a0) ; Ditto for even bitplanes
- MOVE.W #$003C,DDFSTRT(a0) ; Set data-fetch start for Hires
- MOVE.W #$00D4,DDFSTOP(a0) ; Set data-fetch stop
- MOVE.W #$2C81,DIWSTRT(a0) ; Set display window start
- MOVE.W #$F4C1,DIWSTOP(a0) ; Set display window stop
- ;
- ; Set up color registers
- ;
- MOVE.W #$000F,COLOR00(a0) ; Background color = blue
- MOVE.W #$0FFF,COLOR01(a0) ; Foreground color = white
- ;
- ; Set up bitplane at $20000
- ;
- LEA $20000,a1 ; Point a1 at bitplane
- LEA CHARLIST(pc),a2 ; a2 points at character data
- MOVE.W #400,d1 ; Write 400 lines of data
- MOVE.W #20,d0 ; Write 20 long words per line
- L1:
- MOVE.L (a2),(a1)+ ; Write a long word
- DBRA d0,L1 ; Decrement counter and loop until full...
- ;
- MOVE.W #20,d0 ; Reset long word counter
- ADDQ.L #4,a2 ; Point at next word in char list
- CMPI.L #$FFFFFFFF,(a2) ; End of char list?
- BNE L2
- LEA CHARLIST(pc),a2 ; Yes, reset a2 to beginning of list
- L2: DBRA d1,L1 ; Decrement line counter and loop until done...
- ;
- ; Start DMA
- ;
- MOVE.W #(DMAF_SETCLR!DMAF_RASTER!DMAF_MASTER),DMACON(a0)
- ; Enable bitplane DMA only, no Copper
-
- ; Because this example has no Copper list, it sits in a loop waiting
- ; for the vertical blanking interval. When it comes, you check the LOF
- ; ( long frame ) bit in VPOSR. If LOF = 0, this is a short frame and the
- ; bitplane pointers are set to point to $20050. If LOF = 1, then this is
- ; a long frame and the bitplane pointers are set to point to $20000. This
- ; keeps the long and short frames in the right relationship to each other.
-
- VLOOP: MOVE.W INTREQR(a0),d0 ; Read interrupt requests
- AND.W #$0020,d0 ; Mask off all but vertical blank
- BEQ VLOOP ; Loop until vertical blank comes
- MOVE.W #$0020,INTREQ(a0) ; Reset vertical interrupt
- MOVE.W VPOSR(a0),d0 ; Read LOF bit into d0 bit 15
- BPL VL1 ; If LOF = 0, jump
- MOVE.L #$20000,BPL1PTH(a0) ; LOF = 1, point to $20000
- BRA VLOOP ; Back to top
- VL1:
- MOVE.L #$20050,BPL1PTH(a0) ; LOF = 0, point to $20050
- BRA VLOOP ; Back to top
- ;
- ; Character list
- ;
- CHARLIST:
- DC.L $18FC3DF0,$3C6666D8,$3C66C0CC,$667CC0CC
- DC.L $7E66C0CC,$C36666D8,$C3FC3DF0,$00000000
- DC.L $FFFFFFFF
-