/*============================================================*/ /*============================================================*/ /*== ==*/ /*== 1-Bit Assembler Rendering Routines ==*/ /*== ==*/ /*============================================================*/ /*============================================================*/ /*======================================================== Includes */ #include "Globals.h" #include "UnivUtilities.h" #include "RenderAsm1.h" /*======================================================== Functions */ /*======================================================== DropDoorToWorkMapAsm1 */ void DropDoorToWorkMapAsm1 (void) { long srcAddress, destAddress; srcAddress = theDoor.srcAddrs[theDoor.doorOpen][theDoor.doorState]; destAddress = theDoor.workDestAddr[theDoor.doorOpen]; asm 68000 { move.l srcAddress, a0 ; src bitmap address move.l destAddress, a1 ; dest screen address ; 0 = source 1 = dest move.w partsRowBytes, d0 ; next row offset move.w workRowBytes, d1 ; next row offset move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 2 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 3 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 4 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 5 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 6 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 7 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 8 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 9 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 10 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 11 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 12 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 13 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 14 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 15 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 16 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 17 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 18 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 19 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 20 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 21 } destAddress = theDoor.backDestAddr[theDoor.doorOpen]; asm 68000 { move.l srcAddress, a0 ; src bitmap address move.l destAddress, a1 ; dest screen address ; 0 = source 1 = dest move.w partsRowBytes, d0 ; next row offset move.w workRowBytes, d1 ; next row offset move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 2 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 3 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 4 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 5 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 6 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 7 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 8 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 9 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 10 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 11 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 12 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 13 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 14 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 15 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 16 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 17 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 18 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 19 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 20 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 21 } } /*======================================================== MaskCursorAsm1 */ void MaskCursorAsm1 (long dest, short shiftRight) { asm 68000 { move.l a2, -(sp) ; save a2 on stack move.l d3, -(sp) ; save d3 on stack move.l d4, -(sp) ; save d4 on stack move.l d5, -(sp) ; save d5 on stack move.l d6, -(sp) ; save d6 on stack move.l boardCursor.srcAddr, a0 ; src bitmap address move.l dest, a1 ; dest screen address move.l boardCursor.maskAddr, a2 ; mask bitmap address move.w partsRowBytes, d0 ; next row offset (parts) move.w maskRowBytes, d6 ; next row offset (mask) move.w workRowBytes, d1 ; next row offset move.w shiftRight, d2 ; d2 will hold # of bits to shift right move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest move.l (sp)+, d6 ; restore d6 from stack move.l (sp)+, d5 ; restore d5 from stack move.l (sp)+, d4 ; restore d4 from stack move.l (sp)+, d3 ; restore d3 from stack move.l (sp)+, a2 ; restore a2 from stack } } /*======================================================== MaskBallAsm1 */ void MaskBallAsm1 (long dest, short shiftRight) { asm 68000 { move.l a2, -(sp) ; save a2 on stack move.l d3, -(sp) ; save d3 on stack move.l d4, -(sp) ; save d4 on stack move.l d5, -(sp) ; save d5 on stack move.l d6, -(sp) ; save d6 on stack move.l ballSrcAddr, a0 ; src bitmap address move.l dest, a1 ; dest screen address move.l ballMaskAddr, a2 ; mask bitmap address move.w partsRowBytes, d0 ; next row offset (parts) move.w workRowBytes, d1 ; next row offset move.w maskRowBytes, d6 ; next row offset (mask) move.w shiftRight, d2 ; d2 will hold # of bits to shift right move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d6, a2 ; add row offset to mask move.l (a2), d4 ; move mask row 1 lsr.l d2, d4 ; shift d4 logically d2 bits to the right move.l (a0), d5 ; move src row 1 lsr.l d2, d5 ; shift d5 logically d2 bits to the right and.l d4, d5 ; clear trash bits not.l d4 ; invert mask and.l d4, (a1) ; and mask to dest or.l d5, (a1) ; or src to dest move.l (sp)+, d6 ; restore d6 from stack move.l (sp)+, d5 ; restore d5 from stack move.l (sp)+, d4 ; restore d4 from stack move.l (sp)+, d3 ; restore d3 from stack move.l (sp)+, a2 ; restore a2 from stack } } /*======================================================== MaskPlayerAsm1 */ void MaskPlayerAsm1 (long src, long dest, long mask, short shiftRight) { asm 68000 { move.l a2, -(sp) ; save a2 on stack move.l d3, -(sp) ; save d3 on stack move.l d4, -(sp) ; save d4 on stack move.l d5, -(sp) ; save d5 on stack move.l d6, -(sp) ; save d6 on stack move.l d7, -(sp) ; save d7 on stack move.l src, a0 ; src bitmap address move.l dest, a1 ; dest screen address move.l mask, a2 ; mask bitmap address move.w partsRowBytes, d0 ; next row offset (parts) move.w workRowBytes, d1 ; next row offset move.w shiftRight, d2 ; d2 will hold # of bits to shift right move.w #32, d3 ; copy shiftRight to d3 sub.w d2, d3 ; calculate value to shift left in d3 move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest adda.w d0, a2 ; add row offset to mask suba.w #10, a2 ; compensate for mask/parts difference move.l (a2), d4 ; move mask row 1 move.l d4, d5 ; copy the mask to d5 lsr.l d2, d4 ; shift d4 bits to the right lsl.l d3, d5 ; shift d5 bits to the left move.l (a0), d6 ; move src row 1 move.l d6, d7 ; copy the src to d7 lsr.l d2, d6 ; shift d6 bits to the right lsl.l d3, d7 ; shift d7 bits to the left and.l d4, d6 ; clean out unwanted bits and.l d5, d7 ; clean out unwanted bits not.l d4 ; invert mask not.l d5 ; invert mask and.l d4, (a1) ; and mask to dest and.l d5, 4(a1) ; and mask to dest or.l d6, (a1) ; or src to dest or.l d7, 4(a1) ; or src to dest move.l (sp)+, d7 ; restore d7 from stack move.l (sp)+, d6 ; restore d6 from stack move.l (sp)+, d5 ; restore d5 from stack move.l (sp)+, d4 ; restore d4 from stack move.l (sp)+, d3 ; restore d3 from stack move.l (sp)+, a2 ; restore a2 from stack } } /*======================================================== DumpWholePlayerAsm1 */ void DumpWholePlayerAsm1 (long src, long dest) { asm 68000 { move.l src, a0 ; src bitmap address move.l dest, a1 ; dest screen address ; 0 = source 1 = dest move.w workRowBytes, d0 ; next row offset move.w screenRowBytes, d1 ; next row offset subq.w #4, d0 ; compensate for (a0)+ inc. (4 x +'s) subq.w #4, d1 ; compensate for (a1)+ increment move.l (a0)+,(a1)+ ; move row 1 move.w (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 2 move.w (a0),(a1) ; move row 2 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 3 move.w (a0),(a1) ; move row 3 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 4 move.w (a0),(a1) ; move row 4 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 5 move.w (a0),(a1) ; move row 5 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 6 move.w (a0),(a1) ; move row 6 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 7 move.w (a0),(a1) ; move row 7 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 8 move.w (a0),(a1) ; move row 8 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 9 move.w (a0),(a1) ; move row 9 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 10 move.w (a0),(a1) ; move row 10 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 11 move.w (a0),(a1) ; move row 11 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 12 move.w (a0),(a1) ; move row 12 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 13 move.w (a0),(a1) ; move row 13 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 14 move.w (a0),(a1) ; move row 14 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 15 move.w (a0),(a1) ; move row 15 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 16 move.w (a0),(a1) ; move row 16 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 17 move.w (a0),(a1) ; move row 17 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 18 move.w (a0),(a1) ; move row 18 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 19 move.w (a0),(a1) ; move row 19 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 20 move.w (a0),(a1) ; move row 20 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 21 move.w (a0),(a1) ; move row 21 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 22 move.w (a0),(a1) ; move row 22 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 23 move.w (a0),(a1) ; move row 23 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 24 move.w (a0),(a1) ; move row 24 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 25 move.w (a0),(a1) ; move row 25 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 26 move.w (a0),(a1) ; move row 26 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 27 move.w (a0),(a1) ; move row 27 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 28 move.w (a0),(a1) ; move row 28 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 29 move.w (a0),(a1) ; move row 29 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 30 move.w (a0),(a1) ; move row 30 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 31 move.w (a0),(a1) ; move row 31 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 32 move.w (a0),(a1) ; move row 32 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 33 move.w (a0),(a1) ; move row 33 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 34 move.w (a0),(a1) ; move row 34 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 35 move.w (a0),(a1) ; move row 35 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 36 move.w (a0),(a1) ; move row 36 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 37 move.w (a0),(a1) ; move row 37 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 38 move.w (a0),(a1) ; move row 38 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 39 move.w (a0),(a1) ; move row 39 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 40 move.w (a0),(a1) ; move row 40 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 41 move.w (a0),(a1) ; move row 41 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 42 move.w (a0),(a1) ; move row 42 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 43 move.w (a0),(a1) ; move row 43 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 44 move.w (a0),(a1) ; move row 44 } } /*======================================================== DumpWholeBallAsm1 */ void DumpWholeBallAsm1 (long src, long dest) { asm 68000 { move.l src, a0 ; src bitmap address move.l dest, a1 ; dest screen address ; 0 = source 1 = dest move.w workRowBytes, d0 ; next row offset move.w screenRowBytes, d1 ; next row offset move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 1 } } /*======================================================== DumpCursorAsm1 */ void DumpCursorAsm1 (long src, long dest) { asm 68000 { move.l src, a0 ; src bitmap address move.l dest, a1 ; dest screen address ; 0 = source 1 = dest move.w workRowBytes, d0 ; next row offset move.w screenRowBytes, d1 ; next row offset move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 2 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 3 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 4 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 5 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 6 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 7 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 8 } } /*======================================================== DumpDoorToScreenAsm1 */ void DumpDoorToScreenAsm1 (void) { long srcAddress, destAddress; srcAddress = theDoor.workDestAddr[theDoor.doorOpen]; destAddress = theDoor.screenDestAddr[theDoor.doorOpen]; asm 68000 { move.l srcAddress, a0 ; src bitmap address move.l destAddress, a1 ; dest screen address ; 0 = source 1 = dest move.w workRowBytes, d0 ; next row offset move.w screenRowBytes, d1 ; next row offset move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 2 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 3 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 4 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 5 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 6 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 7 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 8 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 9 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 10 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 11 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 12 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 13 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 14 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 15 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 16 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 17 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 18 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 19 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 20 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 21 } } /*======================================================== PatchPlayerAsm1 */ void PatchPlayerAsm1 (long src, long dest) { asm 68000 { move.l src, a0 ; src bitmap address move.l dest, a1 ; dest screen address ; 0 = source 1 = dest move.w backRowBytes, d0 ; next row offset move.w workRowBytes, d1 ; next row offset subq.w #4, d0 ; compensate for (a0)+ inc. (4 x +'s) subq.w #4, d1 ; compensate for (a1)+ increment move.l (a0)+,(a1)+ ; move row 1 move.w (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 2 move.w (a0),(a1) ; move row 2 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 3 move.w (a0),(a1) ; move row 3 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 4 move.w (a0),(a1) ; move row 4 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 5 move.w (a0),(a1) ; move row 5 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 6 move.w (a0),(a1) ; move row 6 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 7 move.w (a0),(a1) ; move row 7 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 8 move.w (a0),(a1) ; move row 8 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 9 move.w (a0),(a1) ; move row 9 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 10 move.w (a0),(a1) ; move row 10 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 11 move.w (a0),(a1) ; move row 11 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 12 move.w (a0),(a1) ; move row 12 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 13 move.w (a0),(a1) ; move row 13 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 14 move.w (a0),(a1) ; move row 14 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 15 move.w (a0),(a1) ; move row 15 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 16 move.w (a0),(a1) ; move row 16 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 17 move.w (a0),(a1) ; move row 17 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 18 move.w (a0),(a1) ; move row 18 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 19 move.w (a0),(a1) ; move row 19 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 20 move.w (a0),(a1) ; move row 20 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 21 move.w (a0),(a1) ; move row 21 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 22 move.w (a0),(a1) ; move row 22 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 23 move.w (a0),(a1) ; move row 23 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 24 move.w (a0),(a1) ; move row 24 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 25 move.w (a0),(a1) ; move row 25 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 26 move.w (a0),(a1) ; move row 26 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 27 move.w (a0),(a1) ; move row 27 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 28 move.w (a0),(a1) ; move row 28 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 29 move.w (a0),(a1) ; move row 29 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 30 move.w (a0),(a1) ; move row 30 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 31 move.w (a0),(a1) ; move row 31 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 32 move.w (a0),(a1) ; move row 32 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 33 move.w (a0),(a1) ; move row 33 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 34 move.w (a0),(a1) ; move row 34 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 35 move.w (a0),(a1) ; move row 35 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 36 move.w (a0),(a1) ; move row 36 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 37 move.w (a0),(a1) ; move row 37 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 38 move.w (a0),(a1) ; move row 38 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 39 move.w (a0),(a1) ; move row 39 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 40 move.w (a0),(a1) ; move row 40 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 41 move.w (a0),(a1) ; move row 41 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 42 move.w (a0),(a1) ; move row 42 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 43 move.w (a0),(a1) ; move row 43 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0)+,(a1)+ ; move row 44 move.w (a0),(a1) ; move row 44 } } /*======================================================== PatchBallAsm1 */ void PatchBallAsm1 (long src, long dest) { asm 68000 { move.l src, a0 ; src bitmap address move.l dest, a1 ; dest screen address ; 0 = source 1 = dest move.w backRowBytes, d0 ; next row offset move.w workRowBytes, d1 ; next row offset move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 2 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 3 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 4 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 5 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 6 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 7 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 8 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 9 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 10 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 11 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 12 } } /*======================================================== PatchCursorAsm1 */ void PatchCursorAsm1 (long src, long dest) { asm 68000 { move.l src, a0 ; src bitmap address move.l dest, a1 ; dest screen address ; 0 = source 1 = dest move.w backRowBytes, d0 ; next row offset move.w workRowBytes, d1 ; next row offset move.l (a0),(a1) ; move row 1 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 2 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 3 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 4 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 5 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 6 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 7 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest move.l (a0),(a1) ; move row 8 } } /*======================================================== RenderSceneAsm1 */ void RenderSceneAsm1 (void) { long srcAddress, destAddress; long ballOffIs, playerOffIs, opponentOffIs, cursorOffIs; Point offsetPt; char theMode; ballOffIs = workRowOffsets[theBall.isRect.top] + (long)(((short)theBall.isRect.left & 0xFFF0) >> 3); playerOffIs = workRowOffsets[thePlayer.isRect.top] + (long)(((short)thePlayer.isRect.left & 0xFFF0) >> 3); opponentOffIs = workRowOffsets[theOpponent.isRect.top] + (long)(((short)theOpponent.isRect.left & 0xFFF0) >> 3); offsetPt.h = 0; offsetPt.v = 0; ShieldCursor(&screenRect, offsetPt); if (knowsColor) { theMode = true32b; SwapMMUMode(&theMode); } /* dick with the door */ if (theDoor.stateChanged) DropDoorToWorkMapAsm1(); if ((showBoardCursor) && (!disableBoardCursor) && (drawThisFrame)) { cursorOffIs = workRowOffsets[boardCursor.isRect.top] + (long)(((short)boardCursor.isRect.left & 0xFFF0) >> 3); destAddress = (long)offWorkBits.baseAddr + cursorOffIs; MaskCursorAsm1 (destAddress, boardCursor.isRect.left & 0x000F); } if ((theBall.mode == kBallRolling) && (!theBall.dontDraw) && (drawThisFrame)) { destAddress = (long)offWorkBits.baseAddr + ballOffIs; MaskBallAsm1 (destAddress, theBall.isRect.left & 0x000F); } /* mask the bastards to the work map - back to front! */ if (playerInBack) { if ((thePlayer.mode != kInStasis) && (drawThisFrame)) { destAddress = (long)offWorkBits.baseAddr + playerOffIs; MaskPlayerAsm1(thePlayer.srcAddr, destAddress, thePlayer.maskAddr, thePlayer.isRect.left & 0x000F); } if ((theOpponent.mode != kInStasis) && (drawThisFrame)) { destAddress = (long)offWorkBits.baseAddr + opponentOffIs; MaskPlayerAsm1(theOpponent.srcAddr, destAddress, theOpponent.maskAddr, theOpponent.isRect.left & 0x000F); } } else { if ((theOpponent.mode != kInStasis) && (drawThisFrame)) { destAddress = (long)offWorkBits.baseAddr + opponentOffIs; MaskPlayerAsm1(theOpponent.srcAddr, destAddress, theOpponent.maskAddr, theOpponent.isRect.left & 0x000F); } if ((thePlayer.mode != kInStasis) && (drawThisFrame)) { destAddress = (long)offWorkBits.baseAddr + playerOffIs; MaskPlayerAsm1(thePlayer.srcAddr, destAddress, thePlayer.maskAddr, thePlayer.isRect.left & 0x000F); } } /* blast them to the screen */ if ((thePlayer.mode != kInStasis) && (drawThisFrame)) { srcAddress = (long)offWorkBits.baseAddr + playerOffIs; destAddress = screenRowAddrs[thePlayer.isRect.top] + (long)(((short)thePlayer.isRect.left & 0xFFF0) >> 3); DumpWholePlayerAsm1(srcAddress, destAddress); srcAddress = (long)offWorkBits.baseAddr + workRowOffsets[thePlayer.wasRect.top] + (long)(((short)thePlayer.wasRect.left & 0xFFF0) >> 3); destAddress = screenRowAddrs[thePlayer.wasRect.top] + (long)(((short)thePlayer.wasRect.left & 0xFFF0) >> 3); DumpWholePlayerAsm1(srcAddress, destAddress); } if ((theOpponent.mode != kInStasis) && (drawThisFrame)) { srcAddress = (long)offWorkBits.baseAddr + opponentOffIs; destAddress = screenRowAddrs[theOpponent.isRect.top] + (long)(((short)theOpponent.isRect.left & 0xFFF0) >> 3); DumpWholePlayerAsm1(srcAddress, destAddress); srcAddress = (long)offWorkBits.baseAddr + workRowOffsets[theOpponent.wasRect.top] + (long)(((short)theOpponent.wasRect.left & 0xFFF0) >> 3); destAddress = screenRowAddrs[theOpponent.wasRect.top] + (long)(((short)theOpponent.wasRect.left & 0xFFF0) >> 3); DumpWholePlayerAsm1(srcAddress, destAddress); } if ((theBall.mode == kBallRolling) && (drawThisFrame)) { srcAddress = (long)offWorkBits.baseAddr + ballOffIs; destAddress = screenRowAddrs[theBall.isRect.top] + (long)(((short)theBall.isRect.left & 0xFFF0) >> 3); DumpWholeBallAsm1(srcAddress, destAddress); srcAddress = (long)offWorkBits.baseAddr + workRowOffsets[theBall.wasRect.top] + (long)(((short)theBall.wasRect.left & 0xFFF0) >> 3); destAddress = screenRowAddrs[theBall.wasRect.top] + (long)(((short)theBall.wasRect.left & 0xFFF0) >> 3); DumpWholeBallAsm1(srcAddress, destAddress); } else if (theBall.eraseTheBall) { srcAddress = (long)offWorkBits.baseAddr + workRowOffsets[theBall.eraser.top] + (long)(((short)theBall.eraser.left & 0xFFF0) >> 3); destAddress = screenRowAddrs[theBall.eraser.top] + (long)(((short)theBall.eraser.left & 0xFFF0) >> 3); DumpWholeBallAsm1(srcAddress, destAddress); theBall.eraseTheBall = FALSE; } if ((showBoardCursor) && (!disableBoardCursor) && (drawThisFrame)) { srcAddress = (long)offWorkBits.baseAddr + cursorOffIs; destAddress = screenRowAddrs[boardCursor.isRect.top] + (long)(((short)boardCursor.isRect.left & 0xFFF0) >> 3); DumpCursorAsm1(srcAddress, destAddress); srcAddress = (long)offWorkBits.baseAddr + workRowOffsets[boardCursor.wasRect.top] + (long)(((short)boardCursor.wasRect.left & 0xFFF0) >> 3); destAddress = screenRowAddrs[boardCursor.wasRect.top] + (long)(((short)boardCursor.wasRect.left & 0xFFF0) >> 3); DumpCursorAsm1(srcAddress, destAddress); } if (theDoor.stateChanged) DumpDoorToScreenAsm1(); /* plug up the holes on the work map */ if ((thePlayer.mode != kInStasis) && (drawThisFrame)) { srcAddress = (long)offBackBits.baseAddr + playerOffIs; destAddress = (long)offWorkBits.baseAddr + playerOffIs; PatchPlayerAsm1(srcAddress, destAddress); } if ((theOpponent.mode != kInStasis) && (drawThisFrame)) { srcAddress = (long)offBackBits.baseAddr + opponentOffIs; destAddress = (long)offWorkBits.baseAddr + opponentOffIs; PatchPlayerAsm1(srcAddress, destAddress); } if ((theBall.mode == kBallRolling) && (drawThisFrame)) { srcAddress = (long)offBackBits.baseAddr + ballOffIs; destAddress = (long)offWorkBits.baseAddr + ballOffIs; PatchBallAsm1(srcAddress, destAddress); } if ((showBoardCursor) && (!disableBoardCursor) && (drawThisFrame)) { srcAddress = (long)offBackBits.baseAddr + cursorOffIs; destAddress = (long)offWorkBits.baseAddr + cursorOffIs; PatchCursorAsm1(srcAddress, destAddress); } if (knowsColor) SwapMMUMode(&theMode); ShowCursor(); } /*======================================================== ReplayWorkToMainAsm1 */ void ReplayWorkToMainAsm1 (void) { Point offsetPt; char theMode; offsetPt.h = 0; offsetPt.v = 0; ShieldCursor(&screenRect, offsetPt); if (knowsColor) { theMode = true32b; SwapMMUMode(&theMode); } asm 68000 { move.l replaySrc, a0 ; src bitmap address move.l replayDest, a1 ; dest screen address ; 0 = source 1 = dest move.w workRowBytes, d0 ; next row offset move.w screenRowBytes, d1 ; next row offset subi.w #20, d0 ; compensate for (a0)+ increment subi.w #20, d1 ; compensate for (a1)+ increment move.w #128, d2 ; d2 will count rows @1 move.l (a0)+,(a1)+ ; move long 1 move.l (a0)+,(a1)+ ; move long 2 move.l (a0)+,(a1)+ ; move long 3 move.l (a0)+,(a1)+ ; move long 4 move.l (a0)+,(a1)+ ; move long 5 move.l (a0),(a1) ; move long 6 adda.w d0, a0 ; add row offset to src adda.w d1, a1 ; add row offset to dest subq.w #1, d2 ; decrement row counter bne @1 ; do another row until d2 = 0 } if (knowsColor) SwapMMUMode(&theMode); ShowCursor(); }