home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD v1.2 / amidev_cd_12.iso / reference_library / hardware / hard_examples / hires_playfield.asm < prev    next >
Assembly Source File  |  1992-08-20  |  3KB  |  70 lines

  1. ;
  2. ; hires_payfield.asm
  3. ;
  4. ; This example sets up a high resolution, interlaced display with one
  5. ; bitplane.  This example also relies on the include file hw_examples.i.
  6.  
  7. ;
  8.         LEA     CUSTOM,a0               ; Address of custom chips
  9.         MOVE.W  #$9204,BPLCON0(a0)      ; Hires, one bitplane, interlaced
  10.         MOVE.W  #0,BPLCON1(a0)          ; Horizontal scroll value = 0
  11.         MOVE.W  #80,BPL1MOD(a0)         ; Modulo = 80 for odd bitplanes
  12.         MOVE.W  #80,BPL2MOD(a0)         ; Ditto for even bitplanes
  13.         MOVE.W  #$003C,DDFSTRT(a0)      ; Set data-fetch start for Hires
  14.         MOVE.W  #$00D4,DDFSTOP(a0)      ; Set data-fetch stop
  15.         MOVE.W  #$2C81,DIWSTRT(a0)      ; Set display window start
  16.         MOVE.W  #$F4C1,DIWSTOP(a0)      ; Set display window stop
  17. ;
  18. ;  Set up color registers
  19. ;
  20.         MOVE.W  #$000F,COLOR00(a0)      ; Background color = blue
  21.         MOVE.W  #$0FFF,COLOR01(a0)      ; Foreground color = white
  22. ;
  23. ;  Set up bitplane at $20000
  24. ;
  25.         LEA     $20000,a1       ; Point a1 at bitplane
  26.         LEA     CHARLIST(pc),a2 ; a2 points at character data
  27.         MOVE.W  #400,d1         ; Write 400 lines of data
  28.         MOVE.W  #20,d0          ; Write 20 long words per line
  29. L1:
  30.         MOVE.L  (a2),(a1)+      ; Write a long word
  31.         DBRA    d0,L1           ; Decrement counter and loop until full...
  32. ;
  33.         MOVE.W  #20,d0          ; Reset long word counter
  34.         ADDQ.L  #4,a2           ; Point at next word in char list
  35.         CMPI.L  #$FFFFFFFF,(a2) ; End of char list?
  36.         BNE     L2
  37.         LEA     CHARLIST(pc),a2 ; Yes, reset a2 to beginning of list
  38. L2:     DBRA    d1,L1           ; Decrement line counter and loop until done...
  39. ;
  40. ;  Start DMA
  41. ;
  42.         MOVE.W  #(DMAF_SETCLR!DMAF_RASTER!DMAF_MASTER),DMACON(a0)
  43.                                 ; Enable bitplane DMA only, no Copper
  44.  
  45. ; Because this example has no Copper list, it sits in a loop waiting
  46. ; for the vertical blanking interval.  When it comes, you check the LOF
  47. ; ( long frame ) bit in VPOSR.  If LOF = 0, this is a short frame and the
  48. ; bitplane pointers are set to point to $20050.  If LOF = 1, then this is
  49. ; a long frame and the bitplane pointers are set to point to $20000.  This
  50. ; keeps the long and short frames in the right relationship to each other.
  51.  
  52. VLOOP:  MOVE.W  INTREQR(a0),d0          ; Read interrupt requests
  53.         AND.W   #$0020,d0               ; Mask off all but vertical blank
  54.         BEQ     VLOOP                   ; Loop until vertical blank comes
  55.         MOVE.W  #$0020,INTREQ(a0)       ; Reset vertical interrupt
  56.         MOVE.W  VPOSR(a0),d0            ; Read LOF bit into d0 bit 15
  57.         BPL     VL1                     ; If LOF = 0, jump
  58.         MOVE.L  #$20000,BPL1PTH(a0)     ; LOF = 1, point to $20000
  59.         BRA     VLOOP                   ; Back to top
  60. VL1:
  61.         MOVE.L  #$20050,BPL1PTH(a0)     ; LOF = 0, point to $20050
  62.         BRA     VLOOP                   ; Back to top
  63. ;
  64. ;  Character list
  65. ;
  66. CHARLIST:
  67.         DC.L    $18FC3DF0,$3C6666D8,$3C66C0CC,$667CC0CC
  68.         DC.L    $7E66C0CC,$C36666D8,$C3FC3DF0,$00000000
  69.         DC.L    $FFFFFFFF
  70.