home *** CD-ROM | disk | FTP | other *** search
/ 17 Bit Software 1: Collection A / 17Bit_Collection_A.iso / files / 290.dms / 290.adf / quickrif.source / blit.asm < prev    next >
Assembly Source File  |  1989-01-31  |  2KB  |  108 lines

  1.  
  2.     include blit.i
  3. ;:ts=12
  4.  
  5. ;copy_lines_blit(s, d, planesize, linebytes, lines, planes)
  6. ;PLANEPTR    s,d;    source and dest planes of _contiguous_ data
  7. ;long    planesize;    offset to next plane
  8. ;WORD    linebytes;    offset to next line in plane
  9. ;WORD    lines;    lines in each plane
  10. ;WORD    planes;    # of planes
  11.  
  12.     public    _copy_lines_blit
  13. clbregs    reg    a2/a3/a4/a5/d3
  14. firstp    set 5*4+4
  15. s    set firstp
  16. d    set firstp+4
  17. planesize    set firstp+8
  18. linebytes    set firstp+12
  19. lines    set firstp+16
  20. planes    set firstp+20
  21. _copy_lines_blit
  22.     jsr    _OwnBlitter
  23.     jsr    _WaitBlit
  24.     movem.l    clbregs,-(sp)
  25.  
  26.     move.l    s(sp),a0
  27.     move.l    d(sp),a1
  28.     move.l    #(CUSTOMREGS+bltcon0),a2    ;get blitter regs
  29.     move.w    #COPY_MINTERM,(a2)+ ;minterm in con0
  30.     move.w    #0,(a2)+    ;zero out con1
  31.     move.w    #-1,(a2)+    ;full first word
  32.     move.w    #-1,(a2)+    ;full last word mask
  33.     add.w    #(bltamod-bltcpt),a2    ;skip to a modulus
  34.  
  35.     move.l    planesize(sp),d0
  36.     move.l    #0,d1
  37.     move.l    linebytes(sp),d1
  38.     sub.w    d1,d0    ;make modulus in d0
  39.     move.w    d0,(a2)+    ;store a modulus
  40.     move.w    d0,(a2)    ;store d modulus
  41.  
  42.     move.w    d1,d2
  43.     asr.w    #1,d2    ;d2 has words per line
  44.     move.l    planes(sp),d0;
  45.     asl.w    #6,d0;
  46.     or.w    d0,d2    ;d2 now has size according to blitter
  47.  
  48.     ;a2 -> blitsize (ie start it up) register
  49.     add.w    #bltsize-bltdmod,a2
  50.     lea    bltapt-bltsize(a2),a3    ;a3 -> apt
  51.     lea    bltdpt-bltsize(a2),a4    ;a4 -> dpt
  52.     lea    dmaconr-bltsize(a2),a5  ;a5 -> where to check if done
  53.     move.w    #$8400,dmacon-dmaconr(a5) ;nasty hog
  54.  
  55.     move.l    lines(sp),d3    ;set up counter in d0
  56.     bra    zcplblits
  57. cplblits    move.l    a0,(a3)    ;store a (source) pointer
  58.     move.l    a1,(a4)    ;store d (dest) pointer
  59.     move.w    d2,(a2)    ;feed blitter size and start it up
  60.     adda.w    d1,a0    ;go to next line of source
  61.     adda.w    d1,a1    ;and next line of dest
  62.     nop
  63. waitblt    move.w    (a5),d0    ;grab bits to see if blitter is
  64.     btst    #14,d0    ;done yet
  65.     bne    waitblt
  66. zcplblits    dbra    d3,cplblits
  67.  
  68.     move.w    #$0400,dmacon-dmaconr(a5) ; unhog
  69.  
  70.     movem.l    (sp)+,clbregs
  71.     jsr    _DisownBlitter
  72.     rts
  73.  
  74.     ;public    _skip_beam
  75.     ;public    _mskip_beam
  76. ;_mskip_beam    move.l    #$1800,d0
  77.     ;bra    skbeam
  78. ;_skip_beam
  79.     ;move.l    #$800,d0
  80. ;skbeam
  81.     ;move.l    #CUSTOMREGS+vposr,a0
  82.     ;move.l    #$e000,d1
  83. ;skwait    
  84.     ;move.l    (a0),d2    ;fetch beam position
  85.     ;and.l    #$3ffff,d2    ;mask off that wierd 9...
  86.     ;cmp.l    d2,d0
  87.     ;bhi    endskwait
  88.     ;cmp.l    d2,d1
  89.     ;bhi    skwait
  90. ;endskwait    rts
  91.  
  92.  
  93.     public    _poll_beam
  94. _poll_beam    
  95.     move.l    #CUSTOMREGS+vposr,a0
  96.     move.l    4(sp),a1
  97.     move.w    8(sp),d0
  98.     bra    zpblp
  99. pblp    
  100.     move.l    (a0),(a1)+
  101.     move.w    #100,d1
  102. p    
  103.     nop
  104.     dbra    d1,p
  105. zpblp    dbra    d0,pblp
  106.     rts
  107.  
  108.