home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 25 / amigaformatcd25.iso / websites / amidoom / adoom_src-0.7.lha / ADoom_src / c2p_akiko.s < prev    next >
Text File  |  1997-12-29  |  2KB  |  88 lines

  1. ;void __asm c2p_akiko (register __a0 UBYTE *chunky_data,
  2. ;                      register __a1 PLANEPTR raster,
  3. ;                      register __a2 UBYTE *dirty_list,
  4. ;                      register __d1 ULONG plsiz,
  5. ;                      register __a5 UBYTE *akiko_address);
  6.  
  7. ; a0 -> width*height chunky pixels in fastmem
  8. ; a1 -> contiguous bitplanes in chipmem
  9. ; a2 -> dirty list (1-byte flag for whether each 32 pixel "unit" needs updating)
  10. ; d1 = width*height/8   (width*height must be a multiple of 32)
  11.  
  12.     ifeq    depth-8
  13.         xdef    _c2p_8_akiko
  14. _c2p_8_akiko:
  15.     else
  16.     ifeq    depth-6
  17.         xdef    _c2p_6_akiko
  18. _c2p_6_akiko:
  19.     else
  20.         fail    "unsupported depth!"
  21.     endc
  22.     endc
  23.  
  24.         xref    _GfxBase
  25.  
  26.         movem.l    a2/a3/a6,-(sp)
  27.  
  28.         move.l    d1,d0        ; plsiz
  29.         lsl.l    #3,d0        ; 8*plsiz
  30.         lea    (a0,d0.l),a3    ; a3 -> end of chunky data
  31.         sub.l    d1,d0        ; d0 = 7*plsiz
  32.     ifle depth-6
  33.         sub.l    d1,d0
  34.         sub.l    d1,d0        ; d0 = 5*plsiz if depth=6
  35.     endc
  36.  
  37.         movem.l    d0/d1/a0/a1,-(sp)
  38.         movea.l    (_GfxBase).l,a6
  39.         jsr    (_LVOOwnBlitter,a6) ; gain exclusive use of Akiko
  40.         movem.l    (sp)+,d0/d1/a0/a1
  41.  
  42. loop:        tst.b    (a2)+        ; does next 32 pixel unit need updating?
  43.         bne.b    c2p        ; branch if yes
  44.  
  45.         adda.w    #32,a0        ; skip 32 pixels on input
  46.         addq.l    #4,a1        ; skip 32 pixels on output
  47.  
  48.         cmpa.l    a3,a0
  49.         bne.b    loop
  50.         bra.b    exit        ; exit if no changes
  51.  
  52. c2p:        move.l    (a0)+,(a5)    ; write 32 pixels to akiko
  53.         move.l    (a0)+,(a5)
  54.         move.l    (a0)+,(a5)
  55.         move.l    (a0)+,(a5)
  56.         move.l    (a0)+,(a5)
  57.         move.l    (a0)+,(a5)
  58.         move.l    (a0)+,(a5)
  59.         move.l    (a0)+,(a5)
  60.  
  61.         move.l    (a5),(a1)    ; plane 0
  62.         adda.l    d1,a1
  63.         move.l    (a5),(a1)    ; plane 1
  64.         adda.l    d1,a1
  65.         move.l    (a5),(a1)    ; plane 2
  66.         adda.l    d1,a1
  67.         move.l    (a5),(a1)    ; plane 3
  68.         adda.l    d1,a1
  69.         move.l    (a5),(a1)    ; plane 4
  70.         adda.l    d1,a1
  71.     ifgt depth-6
  72.         move.l    (a5),(a1)    ; plane 5
  73.         adda.l    d1,a1
  74.         move.l    (a5),(a1)    ; plane 6
  75.         adda.l    d1,a1
  76.     endc
  77.         move.l    (a5),(a1)+    ; last plane
  78.  
  79.         suba.l    d0,a1        ; -7*plsiz (or 5*plsiz) (or 3*plsiz)
  80.  
  81.         cmpa.l    a3,a0
  82.         bne.b    loop
  83.  
  84. exit:        jsr    (_LVODisownBlitter,a6) ; free Akiko
  85.  
  86.         movem.l    (sp)+,a2/a3/a6
  87.         rts
  88.