#bm_BytesPerRow=0 #bm_Rows=2 #bm_Flags=4 #bm_Depth=5 #bm_Pad=6 #bm_Planes=8  [.w d2  ;offx [.w d3  ;offy ) d0,chunkybuff; a0  chunkyscreen ) d1,*mybmap; a1  BitMap ~.l d0,a0 ~.l d1,a1   y c2p_1x1_cpu5_bm   .c2p_1x1_cpu5_bm   ;     STRUCTURE BitMap,0 ;   0 WORD    bm_BytesPerRow ;   2 WORD    bm_Rows ;   4 BYTE    bm_Flags ;   5 BYTE    bm_Depth ;   6 WORD    bm_Pad ;   8 STRUCTURE bm_Planes,8*4 ;    LABEL bm_SIZEOF     ~.w  #256,d0   ~.w  #256,d1    .l d2-d7/a2-a6,-(a7)            ; A few sanity checks   ].b  #8,bm_Depth(a1)   ; At least 8 valid bplptrs?   L exitnodepth   ~.w  d0,d4   ~.w  d2,d5   C.w  #$1f,d4     ; Even 32-pixel width?   P exitno32   C.w  #$7,d5      ; Even 8-pixel xoffset?   P exitnoxoffs    #0,d4   ~.w  bm_BytesPerRow(a1),d4    ~.w  d0,c2p1x1_8_c5_bm_chunkyx ; Skip if 0 pixels to convert   H exit   ~.w  d1,c2p1x1_8_c5_bm_chunkyy   H exit    v.l d2      ; Offs to first pixel to draw in bpl   .w  d4,d3   }.l #3,d2   =.l d2,d3    |.w #3,d4     ; Modulo c2p required?   .w d0,d4   O exit   P c2p_mod    .w  d0,d1   =.l a0,d1   ~.l  d1,a2     ; Ptr to end of chunkybuffer    .l a0-a1/d3,-(a7)    .l bm_Planes(a1),a3-a6 ; Setup ptrs to bpl0-3   =.l d3,a3   =.l d3,a4   =.l d3,a5   =.l d3,a6    ~.l  (a0)+,d0    ; Convert lower 4 bpls   ~.l  (a0)+,d2   ~.l  (a0)+,d1   ~.l  (a0)+,d3    ~.l  #$0f0f0f0f,d6   ; Merge 4x1, part 1   B.l d6,d0   B.l d6,d1   B.l d6,d2   B.l d6,d3   |.l #4,d0   |.l #4,d1   .l  d2,d0   .l  d3,d1    ~.l  (a0)+,d2   ~.l  (a0)+,d6   ~.l  (a0)+,d3   ~.l  (a0)+,d7    ~.l  #$0f0f0f0f,d4   ; Merge 4x1, part 2   B.l d4,d2   B.l d4,d6   B.l d4,d3   B.l d4,d7   |.l #4,d2   |.l #4,d3   .l  d6,d2   .l  d7,d3    ~.w  d2,d6     ; Swap 16x2   ~.w  d3,d7   ~.w  d0,d2   ~.w  d1,d3     d2     d3   ~.w  d2,d0   ~.w  d3,d1   ~.w  d6,d2   ~.w  d7,d3    ~.l  #$33333333,d4   ~.l  d2,d6     ; Swap 2x2   ~.l  d3,d7   }.l #2,d6   }.l #2,d7   s.l d0,d6   s.l d1,d7   B.l d4,d6   B.l d4,d7   s.l d6,d0   s.l d7,d1   |.l #2,d6   |.l #2,d7   s.l d6,d2   s.l d7,d3    ~.l  #$00ff00ff,d4   ~.l  d1,d6     ; Swap 8x1   ~.l  d3,d7   }.l #8,d6   }.l #8,d7   s.l d0,d6   s.l d2,d7   X x1Star  .x1   ~.l  (a0)+,d0   ~.l  (a0)+,d2   ~.l  (a0)+,d1   ~.l  (a0)+,d3   ~.l  d7,(a3)+    ~.l  #$0f0f0f0f,d6   ; Merge 4x1, part 1   B.l d6,d0   B.l d6,d1   B.l d6,d2   B.l d6,d3   |.l #4,d0   |.l #4,d1   .l  d2,d0   .l  d3,d1    ~.l  (a0)+,d2   ~.l  (a0)+,d6   ~.l  (a0)+,d3   ~.l  (a0)+,d7   ~.l  d4,(a4)+    ~.l  #$0f0f0f0f,d4   ; Merge 4x1, part 2   B.l d4,d2   B.l d4,d6   B.l d4,d3   B.l d4,d7   |.l #4,d2   |.l #4,d3   .l  d6,d2   .l  d7,d3    ~.w  d2,d6     ; Swap 16x2   ~.w  d3,d7   ~.w  d0,d2   ~.w  d1,d3     d2     d3   ~.w  d2,d0   ~.w  d3,d1   ~.w  d6,d2   ~.w  d7,d3   ~.l  d5,(a5)+    ~.l  #$33333333,d4   ~.l  d2,d6     ; Swap 2x2   ~.l  d3,d7   }.l #2,d6   }.l #2,d7   s.l d0,d6   s.l d1,d7   B.l d4,d6   B.l d4,d7   s.l d6,d0   s.l d7,d1   |.l #2,d6   |.l #2,d7   s.l d6,d2   s.l d7,d3    ~.l  #$00ff00ff,d4   ~.l  d1,d6     ; Swap 8x1   ~.l  d3,d7   }.l #8,d6   }.l #8,d7   s.l d0,d6   s.l d2,d7   ~.l  a1,(a6)+ .x1Star   B.l d4,d6   B.l d4,d7   s.l d6,d0   s.l d7,d2   |.l #8,d6   |.l #8,d7   s.l d6,d1   s.l d7,d3    ~.l  #$55555555,d4   ~.l  d1,d5     ; Swap 1x1   ~.l  d3,d7   }.l #1,d5   }.l #1,d7   s.l d0,d5   s.l d2,d7   B.l d4,d5   B.l d4,d7   s.l d5,d0   s.l d7,d2   =.l d5,d5   =.l d7,d7   s.l d1,d5   s.l d3,d7    ~.l  d0,a1   ~.l  d2,d4    ^.l  a0,a2   P x1    ~.l  d7,(a3)+   ~.l  d4,(a4)+   ~.l  d5,(a5)+   ~.l  a1,(a6)+    .l (a7)+,a0-a1/d3    .l bm_Planes+4*4(a1),a3-a6 ; Setup ptrs to bpl4-7   =.l d3,a3   =.l d3,a4   =.l d3,a5   =.l d3,a6    ~.l  (a0)+,d0    ; Convert upper 4 bpls   ~.l  (a0)+,d2   ~.l  (a0)+,d1   ~.l  (a0)+,d3    ~.l  #$f0f0f0f0,d6   ; Merge 4x1, part 1   B.l d6,d0   B.l d6,d1   B.l d6,d2   B.l d6,d3   }.l #4,d2   }.l #4,d3   .l  d2,d0   .l  d3,d1    ~.l  (a0)+,d2   ~.l  (a0)+,d6   ~.l  (a0)+,d3   ~.l  (a0)+,d7    ~.l  #$f0f0f0f0,d4   ; Merge 4x1, part 2   B.l d4,d2   B.l d4,d6   B.l d4,d3   B.l d4,d7   }.l #4,d6   }.l #4,d7   .l  d6,d2   .l  d7,d3    ~.w  d2,d6     ; Swap 16x2   ~.w  d3,d7   ~.w  d0,d2   ~.w  d1,d3     d2     d3   ~.w  d2,d0   ~.w  d3,d1   ~.w  d6,d2   ~.w  d7,d3    ~.l  #$33333333,d4   ~.l  d2,d6     ; Swap 2x2   ~.l  d3,d7   }.l #2,d6   }.l #2,d7   s.l d0,d6   s.l d1,d7   B.l d4,d6   B.l d4,d7   s.l d6,d0   s.l d7,d1   |.l #2,d6   |.l #2,d7   s.l d6,d2   s.l d7,d3    ~.l  #$00ff00ff,d4   ~.l  d1,d6     ; Swap 8x1   ~.l  d3,d7   }.l #8,d6   }.l #8,d7   s.l d0,d6   s.l d2,d7   X x2Star  .x2   ~.l  (a0)+,d0   ~.l  (a0)+,d2   ~.l  (a0)+,d1   ~.l  (a0)+,d3   ~.l  d7,(a3)+    ~.l  #$f0f0f0f0,d6   ; Merge 4x1, part 1   B.l d6,d0   B.l d6,d1   B.l d6,d2   B.l d6,d3   }.l #4,d2   }.l #4,d3   .l  d2,d0   .l  d3,d1    ~.l  (a0)+,d2   ~.l  (a0)+,d6   ~.l  (a0)+,d3   ~.l  (a0)+,d7   ~.l  d4,(a4)+    ~.l  #$f0f0f0f0,d4   ; Merge 4x1, part 2   B.l d4,d2   B.l d4,d6   B.l d4,d3   B.l d4,d7   }.l #4,d6   }.l #4,d7   .l  d6,d2   .l  d7,d3    ~.w  d2,d6     ; Swap 16x2   ~.w  d3,d7   ~.w  d0,d2   ~.w  d1,d3     d2     d3   ~.w  d2,d0   ~.w  d3,d1   ~.w  d6,d2   ~.w  d7,d3   ~.l  d5,(a5)+    ~.l  #$33333333,d4   ~.l  d2,d6     ; Swap 2x2   ~.l  d3,d7   }.l #2,d6   }.l #2,d7   s.l d0,d6   s.l d1,d7   B.l d4,d6   B.l d4,d7   s.l d6,d0   s.l d7,d1   |.l #2,d6   |.l #2,d7   s.l d6,d2   s.l d7,d3    ~.l  #$00ff00ff,d4   ~.l  d1,d6     ; Swap 8x1   ~.l  d3,d7   }.l #8,d6   }.l #8,d7   s.l d0,d6   s.l d2,d7   ~.l  a1,(a6)+ .x2Star   B.l d4,d6   B.l d4,d7   s.l d6,d0   s.l d7,d2   |.l #8,d6   |.l #8,d7   s.l d6,d1   s.l d7,d3    ~.l  #$55555555,d4   ~.l  d1,d5     ; Swap 1x1   ~.l  d3,d7   }.l #1,d5   }.l #1,d7   s.l d0,d5   s.l d2,d7   B.l d4,d5   B.l d4,d7   s.l d5,d0   s.l d7,d2   =.l d5,d5   =.l d7,d7   s.l d1,d5   s.l d3,d7    ~.l  d0,a1   ~.l  d2,d4    ^.l  a0,a2   P x2    ~.l  d7,(a3)+   ~.l  d4,(a4)+   ~.l  d5,(a5)+   ~.l  a1,(a6)+   .exit   .l (a7)+,d2-d7/a2-a6 .earlyexit    .exitnodepth   ~.l  #-1,d0   X exit .exitno32   ~.l  #-2,d0   ~.l  d4,d1   X exit .exitnoxoffs   ~.l  #-3,d0   X exit  .c2p_mod   }.w #3,d4   ~.l  d4,c2p1x1_8_c5_bm_rowmod ; Modulo between two rows    ~.l  a0,a2     ; Ptr to end of line + 1 iter   =.w c2p1x1_8_c5_bm_chunkyx(pc),a2   =.w #32,a2    .l a0-a2/d1/d3,-(a7)    .l bm_Planes(a1),a3-a6 ; Setup ptrs to bpl0-3   =.l d3,a3   =.l d3,a4   =.l d3,a5   =.l d3,a6    ~.l  (a0)+,d0    ; Convert lower 4 bpls   ~.l  (a0)+,d2   ~.l  (a0)+,d1   ~.l  (a0)+,d3    ~.l  #$0f0f0f0f,d6   ; Merge 4x1, part 1   B.l d6,d0   B.l d6,d1   B.l d6,d2   B.l d6,d3   |.l #4,d0   |.l #4,d1   .l  d2,d0   .l  d3,d1    ~.l  (a0)+,d2   ~.l  (a0)+,d6   ~.l  (a0)+,d3   ~.l  (a0)+,d7    ~.l  #$0f0f0f0f,d4   ; Merge 4x1, part 2   B.l d4,d2   B.l d4,d6   B.l d4,d3   B.l d4,d7   |.l #4,d2   |.l #4,d3   .l  d6,d2   .l  d7,d3    ~.w  d2,d6     ; Swap 16x2   ~.w  d3,d7   ~.w  d0,d2   ~.w  d1,d3     d2     d3   ~.w  d2,d0   ~.w  d3,d1   ~.w  d6,d2   ~.w  d7,d3    ~.l  #$33333333,d4   ~.l  d2,d6     ; Swap 2x2   ~.l  d3,d7   }.l #2,d6   }.l #2,d7   s.l d0,d6   s.l d1,d7   B.l d4,d6   B.l d4,d7   s.l d6,d0   s.l d7,d1   |.l #2,d6   |.l #2,d7   s.l d6,d2   s.l d7,d3    ~.l  #$00ff00ff,d4   ~.l  d1,d6     ; Swap 8x1   ~.l  d3,d7   }.l #8,d6   }.l #8,d7   s.l d0,d6   s.l d2,d7   X modx1Star .modx1y   =.w c2p1x1_8_c5_bm_chunkyx(pc),a2 ; Skip to end of next line + 1                 ; iter   ~.l  c2p1x1_8_c5_bm_rowmod(pc),d0 ; Skip to beginning of next line   =.l d0,a3   =.l d0,a4   =.l d0,a5   =.l d0,a6 .modx1   ~.l  (a0)+,d0   ~.l  (a0)+,d2   ~.l  (a0)+,d1   ~.l  (a0)+,d3   ~.l  d7,(a3)+    ~.l  #$0f0f0f0f,d6   ; Merge 4x1, part 1   B.l d6,d0   B.l d6,d1   B.l d6,d2   B.l d6,d3   |.l #4,d0   |.l #4,d1   .l  d2,d0   .l  d3,d1    ~.l  (a0)+,d2   ~.l  (a0)+,d6   ~.l  (a0)+,d3   ~.l  (a0)+,d7   ~.l  d4,(a4)+    ~.l  #$0f0f0f0f,d4   ; Merge 4x1, part 2   B.l d4,d2   B.l d4,d6   B.l d4,d3   B.l d4,d7   |.l #4,d2   |.l #4,d3   .l  d6,d2   .l  d7,d3    ~.w  d2,d6     ; Swap 16x2   ~.w  d3,d7   ~.w  d0,d2   ~.w  d1,d3     d2     d3   ~.w  d2,d0   ~.w  d3,d1   ~.w  d6,d2   ~.w  d7,d3   ~.l  d5,(a5)+    ~.l  #$33333333,d4   ~.l  d2,d6     ; Swap 2x2   ~.l  d3,d7   }.l #2,d6   }.l #2,d7   s.l d0,d6   s.l d1,d7   B.l d4,d6   B.l d4,d7   s.l d6,d0   s.l d7,d1   |.l #2,d6   |.l #2,d7   s.l d6,d2   s.l d7,d3    ~.l  #$00ff00ff,d4   ~.l  d1,d6     ; Swap 8x1   ~.l  d3,d7   }.l #8,d6   }.l #8,d7   s.l d0,d6   s.l d2,d7   ~.l  a1,(a6)+ .modx1Star   B.l d4,d6   B.l d4,d7   s.l d6,d0   s.l d7,d2   |.l #8,d6   |.l #8,d7   s.l d6,d1   s.l d7,d3    ~.l  #$55555555,d4   ~.l  d1,d5     ; Swap 1x1   ~.l  d3,d7   }.l #1,d5   }.l #1,d7   s.l d0,d5   s.l d2,d7   B.l d4,d5   B.l d4,d7   s.l d5,d0   s.l d7,d2   =.l d5,d5   =.l d7,d7   s.l d1,d5   s.l d3,d7    ~.l  d0,a1   ~.l  d2,d4    ^.l  a0,a2   P modx1    .w  #1,c2p1x1_8_c5_bm_chunkyy   P modx1y    .l (a7)+,a0-a2/d1/d3    ~.w  d1,c2p1x1_8_c5_bm_chunkyy    .l bm_Planes+4*4(a1),a3-a6 ; Setup ptrs to bpl4-7   =.l d3,a3   =.l d3,a4   =.l d3,a5   =.l d3,a6    ~.l  (a0)+,d0    ; Convert lower 4 bpls   ~.l  (a0)+,d2   ~.l  (a0)+,d1   ~.l  (a0)+,d3    ~.l  #$f0f0f0f0,d6   ; Merge 4x1, part 1   B.l d6,d0   B.l d6,d1   B.l d6,d2   B.l d6,d3   }.l #4,d2   }.l #4,d3   .l  d2,d0   .l  d3,d1    ~.l  (a0)+,d2   ~.l  (a0)+,d6   ~.l  (a0)+,d3   ~.l  (a0)+,d7    ~.l  #$f0f0f0f0,d4   ; Merge 4x1, part 2   B.l d4,d2   B.l d4,d6   B.l d4,d3   B.l d4,d7   }.l #4,d6   }.l #4,d7   .l  d6,d2   .l  d7,d3    ~.w  d2,d6     ; Swap 16x2   ~.w  d3,d7   ~.w  d0,d2   ~.w  d1,d3     d2     d3   ~.w  d2,d0   ~.w  d3,d1   ~.w  d6,d2   ~.w  d7,d3    ~.l  #$33333333,d4   ~.l  d2,d6     ; Swap 2x2   ~.l  d3,d7   }.l #2,d6   }.l #2,d7   s.l d0,d6   s.l d1,d7   B.l d4,d6   B.l d4,d7   s.l d6,d0   s.l d7,d1   |.l #2,d6   |.l #2,d7   s.l d6,d2   s.l d7,d3    ~.l  #$00ff00ff,d4   ~.l  d1,d6     ; Swap 8x1   ~.l  d3,d7   }.l #8,d6   }.l #8,d7   s.l d0,d6   s.l d2,d7   X modx2Star  .modx2y   =.w c2p1x1_8_c5_bm_chunkyx(pc),a2 ; Skip to end of next line + 1                 ; iter   ~.l  c2p1x1_8_c5_bm_rowmod(pc),d0 ; Skip to beginning of next line   =.l d0,a3   =.l d0,a4   =.l d0,a5   =.l d0,a6 .modx2   ~.l  (a0)+,d0   ~.l  (a0)+,d2   ~.l  (a0)+,d1   ~.l  (a0)+,d3   ~.l  d7,(a3)+    ~.l  #$f0f0f0f0,d6   ; Merge 4x1, part 1   B.l d6,d0   B.l d6,d1   B.l d6,d2   B.l d6,d3   }.l #4,d2   }.l #4,d3   .l  d2,d0   .l  d3,d1    ~.l  (a0)+,d2   ~.l  (a0)+,d6   ~.l  (a0)+,d3   ~.l  (a0)+,d7   ~.l  d4,(a4)+    ~.l  #$f0f0f0f0,d4   ; Merge 4x1, part 2   B.l d4,d2   B.l d4,d6   B.l d4,d3   B.l d4,d7   }.l #4,d6   }.l #4,d7   .l  d6,d2   .l  d7,d3    ~.w  d2,d6     ; Swap 16x2   ~.w  d3,d7   ~.w  d0,d2   ~.w  d1,d3     d2     d3   ~.w  d2,d0   ~.w  d3,d1   ~.w  d6,d2   ~.w  d7,d3   ~.l  d5,(a5)+    ~.l  #$33333333,d4   ~.l  d2,d6     ; Swap 2x2   ~.l  d3,d7   }.l #2,d6   }.l #2,d7   s.l d0,d6   s.l d1,d7   B.l d4,d6   B.l d4,d7   s.l d6,d0   s.l d7,d1   |.l #2,d6   |.l #2,d7   s.l d6,d2   s.l d7,d3    ~.l  #$00ff00ff,d4   ~.l  d1,d6     ; Swap 8x1   ~.l  d3,d7   }.l #8,d6   }.l #8,d7   s.l d0,d6   s.l d2,d7   ~.l  a1,(a6)+ .modx2Star   B.l d4,d6   B.l d4,d7   s.l d6,d0   s.l d7,d2   |.l #8,d6   |.l #8,d7   s.l d6,d1   s.l d7,d3    ~.l  #$55555555,d4   ~.l  d1,d5     ; Swap 1x1   ~.l  d3,d7   }.l #1,d5   }.l #1,d7   s.l d0,d5   s.l d2,d7   B.l d4,d5   B.l d4,d7   s.l d5,d0   s.l d7,d2   =.l d5,d5   =.l d7,d7   s.l d1,d5   s.l d3,d7    ~.l  d0,a1   ~.l  d2,d4    ^.l  a0,a2   P modx2    .w  #1,c2p1x1_8_c5_bm_chunkyy   P modx2y    X exit  c2p1x1_8_c5_bm_chunkyx:  &.w  1 c2p1x1_8_c5_bm_chunkyy:  &.w  1 c2p1x1_8_c5_bm_rowmod: &.l  1    