home *** CD-ROM | disk | FTP | other *** search
/ The AGA Experience 1 / agavol1.iso / aga_programmers / source / chunky / chunky.s < prev    next >
Text File  |  1978-06-28  |  5KB  |  219 lines

  1.  
  2. ; My chunky copper display code. Idea based on COPASM.A by Patrick van Logchem
  3.  
  4. ; This will probably cause many enforcer hits, as it reads the test graphics
  5. ; from the whole 2Mb chip range. But then I don't have enforcer ;-]
  6.  
  7. HPIXELS            equ    89
  8. VPIXELS            equ    114
  9. OFFSET_NEXT_LINE    equ    4*(2+HPIXELS+((HPIXELS/32)+1))
  10. LINES            equ    2
  11.  
  12. ;max for 2 lines - HPIXELS=89
  13. ;maximum for _smooth_ scrolling is 118x86,128x79,89x114
  14.  
  15.         include    hardware/custom.i
  16.         incbin    GetControl
  17.  
  18.         lea    $dff000,a6
  19.         move.w    #$7fff,intena(a6)
  20.  
  21.         bsr    InitCopper
  22.  
  23.         move.l    PixelTable+8,cop1lc(a6)
  24.         move.w    #0,copjmp1(a6)
  25.  
  26. wait        btst    #10,$dff016
  27.         beq.s    wait
  28.  
  29.         move.l    bptr,a0
  30.         bsr    TranslateBuffer
  31.  
  32.         add.l    #2*VPIXELS,bptr
  33.  
  34.         and.l    #$1fffff,bptr
  35.         bsr    SwapBuffers
  36.  
  37.         btst    #6,$bfe001
  38.         bne.s    wait
  39.         rts
  40.         
  41. bptr        dc.l    0
  42. colour        dc.w    0
  43.  
  44. InitCopper    lea    CopperBuffer,a0
  45.         lea    PixelTable,a3
  46.  
  47.         lea    16(a3),a2
  48.         bsr    .docopper
  49. .docopper
  50.         move.l    a0,8(a3)
  51.         move.l    a2,(a3)+
  52.  
  53.         move.l    #$2001fffe,(a0)+
  54.  
  55.     ;    move.l    #$01800000,(a0)+    ; color0  = $0000
  56.     ;    move.l    #$010c0011,(a0)+    ; bplcon4 = $0011
  57.         move.l    #$008e277b,(a0)+    ; diwstrt = $2c81
  58.         move.l    #$01007201,(a0)+    ; bplcon0 = $0211
  59.         move.l    #$01040224,(a0)+    ; bplcon2 = $0224
  60.         move.l    #$009029bb,(a0)+    ; diwstop = $2cc1
  61.         move.l    #$00920018,(a0)+    ; ddfstrt = $0038
  62.         move.l    #$009400b8,(a0)+    ; ddfstop = $00d8
  63.         move.l    #$0102ccaa,(a0)+    ; bplcon1 = $0000
  64.         move.l    #$0108ffd0,(a0)+    ; bpl1mod = $ffd0 (-48)
  65.         move.l    #$010affd0,(a0)+    ; bpl2mod = $ffd0 (-48)
  66.         move.l    #$01e42100,(a0)+    ; diwhigh = $2100
  67.         move.l    #$01fc0003,(a0)+    ; fmode   = $0003
  68.  
  69.         move.l    #SpritesNull,d0
  70.         move.w    #$120,d1
  71.         moveq    #8-1,d2
  72. .wipesprites    move.w    d1,(a0)+
  73.         swap    d0
  74.         move.w    d0,(a0)+
  75.         swap    d0
  76.         addq.w    #2,d1
  77.         move.w    d1,(a0)+
  78.         addq.w    #2,d1
  79.         move.w    d0,(a0)+
  80.         dbf    d2,.wipesprites        store 8 copies of blank sprite
  81.  
  82.         move.l    #Bitplanes,d0
  83.         move.w    #$e0,d1
  84.         moveq    #7-1,d2            7 bitplanes
  85.         moveq    #40,d3            length of a plane...
  86.  
  87.         moveq    #-1,d4            flag=save colour pointer
  88.  
  89. .bploop        move.w    d1,(a0)+
  90.         swap    d0
  91.         move.w    d0,(a0)+
  92.         swap    d0
  93.         addq.w    #2,d1
  94.         move.w    d1,(a0)+
  95.         addq.w    #2,d1
  96.         move.w    d0,(a0)+
  97.         add.l    d3,d0
  98.         dbf    d2,.bploop        store the bitplane pointers
  99.  
  100.         move.l    #$01068c60,d0        select bank instruc
  101.         move.l    #$2407fffe,d1        wait line instruction
  102.         move.l    #$010c0011,d2        magic the change line bit
  103.         move.w    #$0180,d3        change colour reg
  104.         
  105.         move.w    #VPIXELS-1,d7        number of lines
  106. .lineloop    move.l    d0,d5
  107.         add.w    #$8000,d0
  108.         move.l    d1,(a0)+        put in wait line
  109.         add.l    #LINES<<24,d1
  110.         move.l    d2,(a0)+        change line colour
  111.         add.w    #$8000,d2
  112.  
  113.         move.w    #HPIXELS,d6        number of colours to do
  114.         bra.s    .selbank
  115. .pixelloop    move.w    d3,(a0)+        store change colour instruc
  116.  
  117.         tst.l    d4
  118.         beq.s    .nostoretable
  119.         move.l    a0,(a2)+        store address if on first line
  120.  
  121. .nostoretable    clr.w    (a0)+
  122.  
  123.         addq.w    #$0002,d3        next colour reg
  124.         cmp.w    #$01c0,d3        end of bank?
  125.         bne.s    .nextpix
  126. .selbank    move.w    #$0180,d3        restart colours with new bank
  127.         move.l    d5,(a0)+        select new bank
  128.         add.w    #$2000,d5        set next bank after this
  129. .nextpix    dbf    d6,.pixelloop
  130.  
  131.         moveq    #0,d4            so x pointers only on 1st line
  132.  
  133.         dbf    d7,.lineloop
  134.  
  135.         move.l    d1,(a0)+
  136.         move.l    d2,(a0)+        for the last line
  137.  
  138.         move.l    #$fffffffe,(a0)+    end copper list
  139.  
  140.         rts
  141.  
  142. SwapBuffers    lea    PixelTable,a0
  143.         movem.l    (a0),d0-d3
  144.         exg    d0,d1
  145.         exg    d2,d3
  146.         movem.l    d0-d3,(a0)
  147.         move.l    d3,cop1lc(a6)
  148.  
  149. .wait        move.l    vposr(a6),d0
  150.         lsr.l    #8,d0
  151.         and.w    #$1ff,d0
  152.         cmp.w    #$1f,d0
  153.         bne.s    .wait
  154.  
  155.         move.l    d3,cop1lc(a6)
  156.         move.w    d3,copjmp1(a6)
  157.  
  158.         rts
  159.  
  160. TranslateBuffer    move.l    PixelTable,a1        a0=buffer to read
  161.  
  162.         move.w    #OFFSET_NEXT_LINE,d2
  163.         move.w    #HPIXELS-1,d0        width
  164. .horizloop    move.w    #VPIXELS-1,d1
  165.         move.l    (a1)+,a2
  166. .vertloop    move.w    (a0)+,(a2)
  167.         add.w    d2,a2
  168.         dbf    d1,.vertloop
  169.         dbf    d0,.horizloop
  170.         rts
  171.  
  172.         section    ChipGfx,data_c
  173.  
  174. SpritesNull    dc.l    0,0,0,0
  175.  
  176. Bitplanes    dc.l    $1c71c71c,$71c71c71,$c71c71c7
  177.         dc.l    $1c71c71c,$71c71c71,$c71c71c7
  178.         dc.l    $1c71c71c,$71c71c71,$c71c71c7
  179.         dc.l    $1c71c71c
  180.  
  181.         dc.l    $03f03f03,$f03f03f0,$3f03f03f
  182.         dc.l    $03f03f03,$f03f03f0,$3f03f03f
  183.         dc.l    $03f03f03,$f03f03f0,$3f03f03f
  184.         dc.l    $03f03f03
  185.  
  186.         dc.l    $000fff00,$0fff000f,$ff000fff
  187.         dc.l    $000fff00,$0fff000f,$ff000fff
  188.         dc.l    $000fff00,$0fff000f,$ff000fff
  189.         dc.l    $000fff00
  190.  
  191.         dc.l    $000000ff,$ffff0000,$00ffffff
  192.         dc.l    $000000ff,$ffff0000,$00ffffff
  193.         dc.l    $000000ff,$ffff0000,$00ffffff
  194.         dc.l    $000000ff
  195.  
  196.         dc.l    $00000000,$0000ffff,$ffffffff
  197.         dc.l    $00000000,$0000ffff,$ffffffff
  198.         dc.l    $00000000,$0000ffff,$ffffffff
  199.         dc.l    $00000000
  200.  
  201.         dc.l    $00000000,$00000000,$00000000
  202.         dc.l    $ffffffff,$ffffffff,$ffffffff
  203.         dc.l    $00000000,$00000000,$00000000
  204.         dc.l    $ffffffff
  205.  
  206.         dc.l    $00000000,$00000000,$00000000
  207.         dc.l    $00000000,$00000000,$00000000
  208.         dc.l    $ffffffff,$ffffffff,$ffffffff
  209.         dc.l    $ffffffff
  210.  
  211.         section    copper,bss_c
  212.  
  213. ;PixelTable    dc.l    pixels_for_copper_1,pixels_for_copper_2
  214. ;        dc.l    copper_1,copper_2
  215.  
  216. PixelTable    ds.l    4
  217.         ds.l    2*HPIXELS
  218. CopperBuffer    ds.l    2*(VPIXELS*OFFSET_NEXT_LINE+100)
  219.