Permalink
Cannot retrieve contributors at this time
3477 lines (3020 sloc)
83.3 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include "asm_mac.i" | |
| func clearBitmapBuffer | |
| move.l 4(%sp),%a0 | a0 = buffer | |
| lea 20480(%a0),%a0 | a0 = buffer end | |
| movm.l %d2-%d7/%a2-%a6,-(%sp) | |
| | the function consume about 43200 cycles to clear the whole bitmap buffer | |
| moveq #0,%d1 | |
| move.l %d1,%d2 | |
| move.l %d1,%d3 | |
| move.l %d1,%d4 | |
| move.l %d1,%d5 | |
| move.l %d1,%d6 | |
| move.l %d1,%d7 | |
| move.l %d1,%a1 | |
| move.l %d1,%a2 | |
| move.l %d1,%a3 | |
| move.l %d1,%a4 | |
| move.l %d1,%a5 | |
| move.l %d1,%a6 | |
| moveq #38,%d0 | |
| .L01: | |
| movm.l %d1-%d7/%a1-%a6,-(%a0) | |
| movm.l %d1-%d7/%a1-%a6,-(%a0) | |
| movm.l %d1-%d7/%a1-%a6,-(%a0) | |
| movm.l %d1-%d7/%a1-%a6,-(%a0) | |
| movm.l %d1-%d7/%a1-%a6,-(%a0) | |
| movm.l %d1-%d7/%a1-%a6,-(%a0) | |
| movm.l %d1-%d7/%a1-%a6,-(%a0) | |
| movm.l %d1-%d7/%a1-%a6,-(%a0) | |
| movm.l %d1-%d7/%a1-%a6,-(%a0) | |
| movm.l %d1-%d7/%a1-%a6,-(%a0) | |
| dbra %d0,.L01 | |
| movm.l %d1-%d7/%a1-%a6,-(%a0) | |
| movm.l %d1-%d7/%a1-%a6,-(%a0) | |
| movm.l %d1-%d7/%a1-%a6,-(%a0) | |
| movm.l %d1-%d7/%a1-%a4,-(%a0) | |
| movm.l (%sp)+,%d2-%d7/%a2-%a6 | |
| rts | |
| func copyBitmapBuffer | |
| move.l 4(%sp),%a0 | a0 = src | |
| move.l 8(%sp),%a1 | a1 = dest | |
| movm.l %d2-%d7/%a2-%a6,-(%sp) | |
| | first 32 bytes transfer | |
| | remaing 20448 bytes to copy | |
| | the function consume about 92000 cycles to copy the whole bitmap buffer | |
| lea 20480(%a1),%a1 | a1 = dest end | |
| movm.l 20448(%a0),%d1-%d7/%a2 | |
| movm.l %d1-%d7/%a2,-(%a1) | |
| lea 20400(%a0),%a0 | a0 = src end - (48 + 32) | |
| moveq #41,%d0 | 42 * (48 bytes * 10) = 42 * 480 = 20160 (/20448) | |
| .L02: | |
| movm.l (%a0),%d1-%d7/%a2-%a6 | |
| lea -48(%a0),%a0 | |
| movm.l %d1-%d7/%a2-%a6,-(%a1) | 216 cycles for 48 bytes copy | |
| movm.l (%a0),%d1-%d7/%a2-%a6 | |
| lea -48(%a0),%a0 | |
| movm.l %d1-%d7/%a2-%a6,-(%a1) | |
| movm.l (%a0),%d1-%d7/%a2-%a6 | |
| lea -48(%a0),%a0 | |
| movm.l %d1-%d7/%a2-%a6,-(%a1) | |
| movm.l (%a0),%d1-%d7/%a2-%a6 | |
| lea -48(%a0),%a0 | |
| movm.l %d1-%d7/%a2-%a6,-(%a1) | |
| movm.l (%a0),%d1-%d7/%a2-%a6 | |
| lea -48(%a0),%a0 | |
| movm.l %d1-%d7/%a2-%a6,-(%a1) | |
| movm.l (%a0),%d1-%d7/%a2-%a6 | |
| lea -48(%a0),%a0 | |
| movm.l %d1-%d7/%a2-%a6,-(%a1) | |
| movm.l (%a0),%d1-%d7/%a2-%a6 | |
| lea -48(%a0),%a0 | |
| movm.l %d1-%d7/%a2-%a6,-(%a1) | |
| movm.l (%a0),%d1-%d7/%a2-%a6 | |
| lea -48(%a0),%a0 | |
| movm.l %d1-%d7/%a2-%a6,-(%a1) | |
| movm.l (%a0),%d1-%d7/%a2-%a6 | |
| lea -48(%a0),%a0 | |
| movm.l %d1-%d7/%a2-%a6,-(%a1) | |
| movm.l (%a0),%d1-%d7/%a2-%a6 | |
| lea -48(%a0),%a0 | |
| movm.l %d1-%d7/%a2-%a6,-(%a1) | |
| dbra %d0,.L02 | |
| | 288 bytes remaining = 6 * 48 | |
| movm.l (%a0),%d1-%d7/%a2-%a6 | |
| lea -48(%a0),%a0 | |
| movm.l %d1-%d7/%a2-%a6,-(%a1) | |
| movm.l (%a0),%d1-%d7/%a2-%a6 | |
| lea -48(%a0),%a0 | |
| movm.l %d1-%d7/%a2-%a6,-(%a1) | |
| movm.l (%a0),%d1-%d7/%a2-%a6 | |
| lea -48(%a0),%a0 | |
| movm.l %d1-%d7/%a2-%a6,-(%a1) | |
| movm.l (%a0),%d1-%d7/%a2-%a6 | |
| lea -48(%a0),%a0 | |
| movm.l %d1-%d7/%a2-%a6,-(%a1) | |
| movm.l (%a0),%d1-%d7/%a2-%a6 | |
| lea -48(%a0),%a0 | |
| movm.l %d1-%d7/%a2-%a6,-(%a1) | |
| movm.l (%a0),%d1-%d7/%a2-%a6 | |
| movm.l %d1-%d7/%a2-%a6,-(%a1) | |
| movm.l (%sp)+,%d2-%d7/%a2-%a6 | |
| rts | |
| func BMP_setPixelFastA | |
| moveq #-1,%d1 | d1 = 0xFFFFFFFF | |
| move.w 6(%sp),%d0 | d0 = X | |
| move.w 10(%sp),%d1 | d1 = Y | |
| .spf_01: | |
| lsl.w #7,%d1 | |
| lsr.w #1,%d0 | |
| jcs .spf_x_odd | |
| .spf_x_even: | |
| add.w %d0,%d1 | |
| add.w bmp_buffer_write+2,%d1 | |
| move.l %d1,%a0 | a0 = dst = &bmp_buffer_write[(y * BMP_PITCH) + (x >> 1)] | |
| move.b 15(%sp),%d1 | d1 = col | |
| move.b (%a0),%d0 | d0 = *dst | |
| and.b #0x0F,%d0 | |
| and.b #0xF0,%d1 | |
| or.b %d1,%d0 | |
| move.b %d0,(%a0) | *dst = (*dst & 0x0F) | (col & 0xF0); | |
| rts | |
| .spf_x_odd: | |
| add.w %d0,%d1 | |
| add.w bmp_buffer_write+2,%d1 | |
| move.l %d1,%a0 | a0 = dst = &bmp_buffer_write[(y * BMP_PITCH) + (x >> 1)] | |
| move.b 15(%sp),%d1 | d1 = col | |
| move.b (%a0),%d0 | d0 = *dst | |
| and.b #0xF0,%d0 | |
| and.b #0x0F,%d1 | |
| or.b %d1,%d0 | |
| move.b %d0,(%a0) | *dst = (*dst & 0xF0) | (col & 0x0F); | |
| rts | |
| func BMP_setPixelA | |
| moveq #-1,%d1 | d1 = 0xFFFFFFFF | |
| move.w 6(%sp),%d0 | d0.w = X | |
| move.w 10(%sp),%d1 | d1.w = Y | |
| cmp.w #256,%d0 | |
| jcc .sp_01 | |
| cmp.w #160,%d1 | |
| jcs .spf_01 | |
| .sp_01: | |
| rts | |
| func BMP_setPixelsFast_V2D | |
| move.l 4(%sp),%a0 | a0 = crd | |
| move.b 11(%sp),%d1 | d1 = col | |
| move.w 14(%sp),%d0 | d0 = num | |
| subq.w #1,%d0 | |
| movem.l %d2-%d6/%a2,-(%sp) | |
| move.l bmp_buffer_write,%a2 | a2 = bmp_buffer_write | |
| move.b #0x0F,%d3 | |
| move.b #0xF0,%d4 | |
| move.b %d1,%d5 | |
| move.b %d1,%d6 | |
| and.b %d3,%d5 | d5 = col & 0x0F = cd | |
| and.b %d4,%d6 | d6 = col & 0xF0 = cu | |
| .spsfv_loop: | |
| move.w (%a0)+,%d1 | d1 = X | |
| move.w (%a0)+,%d2 | d2 = Y | |
| lsl.w #7,%d2 | |
| lsr.w #1,%d1 | |
| jcs .spsfv_x_odd | |
| .spsfv_x_even: | |
| add.w %d1,%d2 | |
| lea.l (%a2,%d2.w),%a1 | a1 = dst = &bmp_buffer_write[(y * BMP_PITCH) + (x >> 1)] | |
| move.b (%a1),%d2 | d2 = *dst | |
| and.b %d3,%d2 | |
| or.b %d6,%d2 | |
| move.b %d2,(%a1) | *dst = (*dst & 0x0F) | cu; | |
| dbra.w %d0,.spsfv_loop | |
| movem.l (%sp)+,%d2-%d6/%a2 | |
| rts | |
| .spsfv_x_odd: | |
| add.w %d1,%d2 | |
| lea.l (%a2,%d2.w),%a1 | a1 = dst = &bmp_buffer_write[(y * BMP_PITCH) + (x >> 1)] | |
| move.b (%a1),%d2 | d2 = *dst | |
| and.b %d4,%d2 | |
| or.b %d5,%d2 | |
| move.b %d2,(%a1) | *dst = (*dst & 0xF0) | cd; | |
| dbra.w %d0,.spsfv_loop | |
| movem.l (%sp)+,%d2-%d6/%a2 | |
| rts | |
| func BMP_setPixels_V2D | |
| move.l 4(%sp),%a0 | a0 = crd | |
| move.b 11(%sp),%d1 | d1 = col | |
| move.w 14(%sp),%d0 | d0 = num | |
| subq.w #1,%d0 | |
| movem.l %d2-%d6/%a2-%a4,-(%sp) | |
| move.l bmp_buffer_write,%a2 | a2 = bmp_buffer_write | |
| move.b #0x0F,%d3 | |
| move.b #0xF0,%d4 | |
| move.b %d1,%d5 | |
| move.b %d1,%d6 | |
| and.b %d3,%d5 | d5 = col & 0x0F = cd | |
| and.b %d4,%d6 | d6 = col & 0xF0 = cu | |
| move.w #256,%a3 | |
| move.w #160,%a4 | |
| .spsv_loop: | |
| move.w (%a0)+,%d1 | d1 = X | |
| move.w (%a0)+,%d2 | d2 = Y | |
| cmp.w %a3,%d1 | |
| jcc .spsv_01 | |
| cmp.w %a4,%d2 | |
| jcs .spsv_02 | |
| .spsv_01: | |
| dbra.w %d0,.spsv_loop | |
| movem.l (%sp)+,%d2-%d6/%a2-%a4 | |
| rts | |
| .spsv_02: | |
| lsl.w #7,%d2 | |
| lsr.w #1,%d1 | |
| jcs .spsv_x_odd | |
| .spsv_x_even: | |
| add.w %d1,%d2 | |
| lea.l (%a2,%d2.w),%a1 | a1 = dst = &bmp_buffer_write[(y * BMP_PITCH) + (x >> 1)] | |
| move.b (%a1),%d2 | d2 = *dst | |
| and.b %d3,%d2 | |
| or.b %d6,%d2 | |
| move.b %d2,(%a1) | *dst = (*dst & 0x0F) | cu; | |
| dbra.w %d0,.spsv_loop | |
| movem.l (%sp)+,%d2-%d6/%a2-%a4 | |
| rts | |
| .spsv_x_odd: | |
| add.w %d1,%d2 | |
| lea.l (%a2,%d2.w),%a1 | a1 = dst = &bmp_buffer_write[(y * BMP_PITCH) + (x >> 1)] | |
| move.b (%a1),%d2 | d2 = *dst | |
| and.b %d4,%d2 | |
| or.b %d5,%d2 | |
| move.b %d2,(%a1) | *dst = (*dst & 0xF0) | cd; | |
| dbra.w %d0,.spsv_loop | |
| movem.l (%sp)+,%d2-%d6/%a2-%a4 | |
| rts | |
| func BMP_setPixelsFast | |
| move.l 4(%sp),%a0 | a0 = pixels | |
| move.w 10(%sp),%d0 | d0 = num | |
| subq.w #1,%d0 | |
| movem.l %d2-%d4/%a2,-(%sp) | |
| move.l bmp_buffer_write,%a2 | a2 = bmp_buffer_write | |
| move.b #0x0F,%d3 | |
| move.b #0xF0,%d4 | |
| .spsf_loop: | |
| move.w (%a0)+,%d1 | d1 = X | |
| move.w (%a0)+,%d2 | d2 = Y | |
| lsl.w #7,%d2 | |
| lsr.w #1,%d1 | |
| jcs .spsf_x_odd | |
| .spsf_x_even: | |
| add.w %d1,%d2 | |
| lea.l (%a2,%d2.w),%a1 | a1 = dst = &bmp_buffer_write[(y * BMP_PITCH) + (x >> 1)] | |
| move.w (%a0)+,%d1 | d1 = col | |
| move.b (%a1),%d2 | d2 = *dst | |
| and.b %d3,%d2 | |
| and.b %d4,%d1 | |
| or.b %d1,%d2 | |
| move.b %d2,(%a1) | *dst = (*dst & 0x0F) | (col & 0xF0); | |
| dbra.w %d0,.spsf_loop | |
| movem.l (%sp)+,%d2-%d4/%a2 | |
| rts | |
| .spsf_x_odd: | |
| add.w %d1,%d2 | |
| lea.l (%a2,%d2.w),%a1 | a1 = dst = &bmp_buffer_write[(y * BMP_PITCH) + (x >> 1)] | |
| move.w (%a0)+,%d1 | d1 = col | |
| move.b (%a1),%d2 | d2 = *dst | |
| and.b %d4,%d2 | |
| and.b %d3,%d1 | |
| or.b %d1,%d2 | |
| move.b %d2,(%a1) | *dst = (*dst & 0x0F) | (col & 0xF0); | |
| dbra.w %d0,.spsf_loop | |
| movem.l (%sp)+,%d2-%d4/%a2 | |
| rts | |
| func BMP_setPixels | |
| move.l 4(%sp),%a0 | a0 = pixels | |
| move.w 10(%sp),%d0 | d0 = num | |
| subq.w #1,%d0 | |
| movem.l %d2-%d6/%a2,-(%sp) | |
| move.l bmp_buffer_write,%a2 | a2 = bmp_buffer_write | |
| move.b #0x0F,%d3 | |
| move.b #0xF0,%d4 | |
| move.w #256,%d5 | |
| move.w #160,%d6 | |
| .sps_loop: | |
| move.w (%a0)+,%d1 | d1 = X | |
| move.w (%a0)+,%d2 | d2 = Y | |
| cmp.w %d5,%d1 | |
| jcc .sps_01 | |
| cmp.w %d6,%d2 | |
| jcs .sps_02 | |
| .sps_01: | |
| move.w (%a0)+,%d1 | d1 = col (ignore) | |
| dbra.w %d0,.sps_loop | |
| movem.l (%sp)+,%d2-%d6/%a2 | |
| rts | |
| .sps_02: | |
| lsl.w #7,%d2 | |
| lsr.w #1,%d1 | |
| jcs .sps_x_odd | |
| .sps_x_even: | |
| add.w %d1,%d2 | |
| lea.l (%a2,%d2.w),%a1 | a1 = dst = &bmp_buffer_write[(y * BMP_PITCH) + (x >> 1)] | |
| move.w (%a0)+,%d1 | d1 = col | |
| move.b (%a1),%d2 | d2 = *dst | |
| and.b %d3,%d2 | |
| and.b %d4,%d1 | |
| or.b %d1,%d2 | |
| move.b %d2,(%a1) | *dst = (*dst & 0x0F) | (col & 0xF0); | |
| dbra.w %d0,.sps_loop | |
| movem.l (%sp)+,%d2-%d6/%a2 | |
| rts | |
| .sps_x_odd: | |
| add.w %d1,%d2 | |
| lea.l (%a2,%d2.w),%a1 | a1 = dst = &bmp_buffer_write[(y * BMP_PITCH) + (x >> 1)] | |
| move.w (%a0)+,%d1 | d1 = col | |
| move.b (%a1),%d2 | d2 = *dst | |
| and.b %d4,%d2 | |
| and.b %d3,%d1 | |
| or.b %d1,%d2 | |
| move.b %d2,(%a1) | *dst = (*dst & 0x0F) | (col & 0xF0); | |
| dbra.w %d0,.sps_loop | |
| movem.l (%sp)+,%d2-%d6/%a2 | |
| rts | |
| func BMP_clipLine | |
| movm.l %d2-%d7,-(%sp) | |
| move.l 28(%sp),%a0 | a0 = &line | |
| movm.w (%a0),%d2-%d5 | d2 = x1, d3 = y1, d4 = x2, d5 = y2 | |
| move.w #255,%d0 | d0 = BMP_WIDTH - 1 | |
| move.w #159,%d1 | d1 = BMP_HEIGHT - 1 | |
| cmp.w %d0,%d2 | if (((u16) x1 < BMP_WIDTH) && | |
| jhi .L50 | |
| cmp.w %d0,%d4 | ((u16) x2 < BMP_WIDTH) && | |
| jhi .L50 | |
| cmp.w %d1,%d3 | ((u16) y1 < BMP_HEIGHT) && | |
| jhi .L50 | |
| cmp.w %d1,%d5 | ((u16) y2 < BMP_HEIGHT)) | |
| jhi .L50 | |
| movm.w %d2-%d5,(%a0) | update line | |
| moveq #1,%d0 | return 1; | |
| movm.l (%sp)+,%d2-%d7 | |
| rts | |
| .L60: | |
| move.w %d4,%d6 | |
| sub.w %d2,%d6 | d6 = dx = x2 - x1; | |
| move.w %d5,%d7 | |
| sub.w %d3,%d7 | d7 = dy = y2 - y1; | |
| tst.w %d2 | if (x1 < 0) | |
| jge .L38 | { | |
| muls.w %d7,%d2 | y1 -= (x1 * dy) / dx; | |
| divs.w %d6,%d2 | |
| sub.w %d2,%d3 | |
| moveq #0,%d2 | x1 = 0; | |
| jra .L39 | } | |
| .L38: | |
| cmp.w %d0,%d2 | else if (x1 >= BMP_WIDTH) | |
| jle .L39 | { | |
| sub.w %d0,%d2 | |
| muls.w %d7,%d2 | y1 -= ((x1 - (BMP_WIDTH - 1)) * dy) / dx; | |
| divs.w %d6,%d2 | |
| sub.w %d2,%d3 | |
| move.w %d0,%d2 | x1 = BMP_WIDTH - 1; | |
| | } | |
| .L39: | |
| tst.w %d4 | if (x2 < 0) | |
| jge .L41 | { | |
| muls.w %d7,%d4 | y2 -= (x2 * dy) / dx; | |
| divs.w %d6,%d4 | |
| sub.w %d4,%d5 | |
| moveq #0,%d4 | x2 = 0; | |
| jra .L42 | } | |
| .L41: | |
| cmp.w %d0,%d4 | else if (x2 >= BMP_WIDTH) | |
| jle .L42 | { | |
| sub.w %d0,%d4 | |
| muls.w %d7,%d4 | y2 -= ((x2 - (BMP_WIDTH - 1)) * dy) / dx; | |
| divs.w %d6,%d4 | |
| sub.w %d4,%d5 | |
| move.w %d0,%d4 | x2 = BMP_WIDTH - 1; | |
| | } | |
| .L42: | |
| tst.w %d3 | if (y1 < 0) | |
| jge .L44 | { | |
| muls.w %d6,%d3 | x1 -= (y1 * dx) / dy; | |
| divs.w %d7,%d3 | |
| sub.w %d3,%d2 | |
| moveq #0,%d3 | y1 = 0; | |
| jra .L45 | } | |
| .L44: | |
| cmp.w %d1,%d3 | else if (y1 >= BMP_HEIGHT) | |
| jle .L45 | { | |
| sub.w %d1,%d3 | |
| muls.w %d6,%d3 | x1 -= ((y1 - (BMP_HEIGHT - 1)) * dx) / dy; | |
| divs.w %d7,%d3 | |
| sub.w %d3,%d2 | |
| move.w %d1,%d3 | y1 = BMP_HEIGHT - 1; | |
| .L45: | } | |
| tst.w %d5 | if (y2 < 0) | |
| jge .L47 | { | |
| muls.w %d6,%d5 | x2 -= (y2 * dx) / dy; | |
| divs.w %d7,%d5 | |
| sub.w %d5,%d4 | |
| moveq #0,%d5 | y2 = 0; | |
| jra .L48 | } | |
| .L47: | |
| cmp.w %d1,%d5 | else if (y2 >= BMP_HEIGHT) | |
| jle .L48 | { | |
| sub.w %d1,%d5 | |
| muls.w %d6,%d5 | x2 -= ((y2 - (BMP_HEIGHT - 1)) * dx) / dy; | |
| divs.w %d7,%d5 | |
| sub.w %d5,%d4 | |
| move.w %d1,%d5 | y2 = BMP_HEIGHT - 1; | |
| | } | |
| .L48: | |
| cmp.w %d0,%d2 | if (((u16) x1 < BMP_WIDTH) && | |
| jhi .L50 | |
| cmp.w %d0,%d4 | ((u16) x2 < BMP_WIDTH) && | |
| jhi .L50 | |
| cmp.w %d1,%d3 | ((u16) y1 < BMP_HEIGHT) && | |
| jhi .L50 | |
| cmp.w %d1,%d5 | ((u16) y2 < BMP_HEIGHT)) | |
| jhi .L50 | { | |
| movm.w %d2-%d5,(%a0) | update line | |
| moveq #1,%d0 | return 1; | |
| movm.l (%sp)+,%d2-%d7 | |
| rts | } | |
| .L50: | |
| tst.w %d2 | if (((x1 < 0) && (x2 < 0)) || | |
| jge .L53 | |
| tst.w %d4 | |
| jlt .L52 | |
| .L53: | |
| cmp.w %d0,%d2 | ((x1 >= BMP_WIDTH) && (x2 >= BMP_WIDTH)) || | |
| jle .L54 | |
| cmp.w %d0,%d4 | |
| jgt .L52 | |
| .L54: | |
| tst.w %d3 | ((y1 < 0) && (y2 < 0)) || | |
| jge .L55 | |
| tst.w %d5 | |
| jlt .L52 | |
| .L55: | |
| cmp.w %d1,%d3 | ((y1 >= BMP_HEIGHT) && (y2 >= BMP_HEIGHT))) | |
| jle .L60 | |
| cmp.w %d1,%d5 | |
| jle .L60 | |
| .L52: | |
| moveq #0,%d0 | return 0; | |
| movm.l (%sp)+,%d2-%d7 | |
| rts | |
| func BMP_drawLine | |
| movem.l %d2-%d7/%a2-%a5,-(%sp) | |
| move.l 44(%sp),%a0 | a0 = &line | |
| movem.w (%a0)+,%d2-%d6 | d2 = x1, d3 = y1, d4 = x2, d5 = y2, d6 = col | |
| .dl_start: | |
| moveq #1,%d0 | d0 = stepx = 1 | |
| move.w #128,%d1 | d1 = stepy = BMP_PITCH; | |
| sub.w %d2,%d4 | d4 = deltax | |
| jge .dl_01 | { | |
| neg.w %d4 | deltax = -deltax; | |
| neg.w %d0 | stepx = -stepx; | |
| | } | |
| .dl_01: | |
| sub.w %d3,%d5 | d5 = deltay | |
| jge .dl_02 | { | |
| neg.w %d5 | deltay = -deltay; | |
| neg.w %d1 | stepy = -stepy; | |
| | } | |
| .dl_02: | | |
| move.w %d0,%a2 | a2 = stepx | |
| move.w %d1,%a3 | a3 = stepy | |
| move.w %d4,%a4 | a4 = dx | |
| move.w %d5,%a5 | a5 = dy | |
| move.l bmp_buffer_write,%d7 | |
| lsl.w #7,%d3 | |
| add.w %d3,%d7 | d7.l = &bmp_buffer_write[y1 * BMP_PITCH] | |
| move.l %d7,%a0 | a0 = *dst = &bmp_buffer_write[y1 * BMP_PITCH] | |
| moveq #-0x10,%d0 | d0 = mu = 0xF0 | |
| moveq #0x0F,%d1 | d1 = md = 0x0F | |
| move.b %d6,%d7 | |
| and.b %d0,%d6 | d6 = cu = col & mu | |
| and.b %d1,%d7 | d7 = cd = col & md | |
| cmp.w %d4,%d5 | if (deltax < deltay) | |
| jge .dl_on_dy | { | |
| .dl_on_dx: | |
| move.w %d4,%d3 | d2 = x | |
| asr.w #1,%d3 | d3 = delta = dx >> 1 | |
| | d4 = cnt = dx | |
| .dl_dx_loop: | while(cnt--) | |
| move.w %d2,%d5 | { | |
| lsr.w #1,%d5 | d5 = x >> 1 | |
| jcs .dl_dx_odd | if (x & 1) | |
| | { | |
| .dl_dx_even: | |
| lea (%a0,%d5.w),%a1 | a1 = d = dst + (x >> 1) | |
| move.b (%a1),%d5 | |
| and.b %d1,%d5 | |
| or.b %d6,%d5 | |
| move.b %d5,(%a1) | *d = (*d & md) | cu | |
| add.w %a2,%d2 | x += stepx | |
| sub.w %a5,%d3 | if ((delta -= dy) < 0) | |
| jpl .dl_dx_even_1 | { | |
| add.w %a3,%a0 | dst += stepy; (can be 16 bits as dst is in RAM) | |
| add.w %a4,%d3 | delta += dx; | |
| .dl_dx_even_1: | } | |
| dbra %d4,.dl_dx_loop | } | |
| .dl_end: | |
| movem.l (%sp)+,%d2-%d7/%a2-%a5 | |
| rts | |
| | else | |
| .dl_dx_odd: | { | |
| lea (%a0,%d5.w),%a1 | a1 = d = dst + (x >> 1) | |
| move.b (%a1),%d5 | |
| and.b %d0,%d5 | |
| or.b %d7,%d5 | |
| move.b %d5,(%a1) | *d = (*d & mu) | cd | |
| add.w %a2,%d2 | x += stepx | |
| sub.w %a5,%d3 | if ((delta -= dy) < 0) | |
| jpl .dl_dx_odd_1 | { | |
| add.w %a3,%a0 | dst += stepy; (can be 16 bits as dst is in RAM) | |
| add.w %a4,%d3 | delta += dx; | |
| .dl_dx_odd_1: | } | |
| dbra %d4,.dl_dx_loop | } | |
| movem.l (%sp)+,%d2-%d7/%a2-%a5 | |
| rts | |
| .dl_on_dy: | |
| move.w %d5,%d3 | d2 = x | |
| asr.w #1,%d3 | d3 = delta = dy >> 1 | |
| move.w %d5,%d4 | d4 = cnt = dy | |
| .dl_dy_loop: | while(cnt--) | |
| move.w %d2,%d5 | { | |
| lsr.w #1,%d5 | d5 = x >> 1 | |
| jcs .dl_dy_odd | if (x & 1) | |
| | { | |
| .dl_dy_even: | |
| lea (%a0,%d5.w),%a1 | a1 = d = dst + (x >> 1) | |
| move.b (%a1),%d5 | |
| and.b %d1,%d5 | |
| or.b %d6,%d5 | |
| move.b %d5,(%a1) | *d = (*d & md) | cu | |
| add.w %a3,%a0 | dst += stepy; (can be 16 bits as dst is in RAM) | |
| sub.w %a4,%d3 | if ((delta -= dx) < 0) | |
| jpl .dl_dy_even_1 | { | |
| add.w %a2,%d2 | x += stepx | |
| add.w %a5,%d3 | delta += dy; | |
| .dl_dy_even_1: | } | |
| dbra %d4,.dl_dy_loop | } | |
| movem.l (%sp)+,%d2-%d7/%a2-%a5 | |
| rts | |
| | else | |
| .dl_dy_odd: | { | |
| lea (%a0,%d5.w),%a1 | a1 = d = dst + (x >> 1) | |
| move.b (%a1),%d5 | |
| and.b %d0,%d5 | |
| or.b %d7,%d5 | |
| move.b %d5,(%a1) | *d = (*d & mu) | cd | |
| add.w %a3,%a0 | dst += stepy; (can be 16 bits as dst is in RAM) | |
| sub.w %a4,%d3 | if ((delta -= dx) < 0) | |
| jpl .dl_dy_odd_1 | { | |
| add.w %a2,%d2 | x += stepx | |
| add.w %a5,%d3 | delta += dy; | |
| .dl_dy_odd_1: | } | |
| dbra %d4,.dl_dy_loop | } | |
| movem.l (%sp)+,%d2-%d7/%a2-%a5 | |
| rts | |
| func BMP_isPolygonCulled | |
| movm.l %d2-%d5,-(%sp) | |
| move.l 20(%sp),%a1 | a1 = pts | |
| movm.w (%a1),%d0-%d5 | d0 = pts[0].x, d1 = pts[0].y, d2 = pts[1].x, d3 = pts[1].y, d4 = pts[2].x, d5 = pts[2].y | |
| sub.w %d0,%d4 | d4 = x2 - x0 | |
| sub.w %d1,%d3 | d3 = y1 - y0 | |
| muls.w %d4,%d3 | |
| sub.w %d0,%d2 | d2 = x1 - x0 | |
| sub.w %d1,%d5 | d5 = y2 - y0 | |
| muls.w %d5,%d2 | |
| cmp.l %d3,%d2 | culling test | |
| jge .L11 | if (d4 * d3 < d5 * d2) | |
| moveq #1,%d0 | return 1; | |
| movm.l (%sp)+,%d2-%d5 | |
| rts | |
| .L11: | |
| moveq #0,%d0 | return 0; | |
| movm.l (%sp)+,%d2-%d5 | |
| rts | |
| | internal use only | |
| | ----------------- | |
| | IN: | |
| | d0 = dx | |
| | d1 = dy | |
| | d7 = x | |
| | a1 = dst | |
| | | |
| | OUT: | |
| | d0 = ? | |
| | d1 = dy * 4 | |
| | d7 = ? | |
| | a1 = dst (updated) | |
| | a6 = ? | |
| fillEdge: | |
| ext.l %d0 | if (dx == 0) | |
| jeq fillEdgeFast | goto fillEdgeFast | |
| asl.l #7,%d0 | d0 = dx << 7 | |
| divs.w %d1,%d0 | d0 = (dx << 7) / dy | |
| ext.l %d0 | |
| ror.l #7,%d0 | d0 = step x | |
| swap %d7 | |
| move.w #0x8000, %d7 | |
| swap %d7 | d7 = x 32 bits extended | |
| add.w %d1,%d1 | |
| add.w %d1,%d1 | d1 = dy * 4 (for jump table) | |
| andi #0,%ccr | clear X flag | |
| .fe_fill_base2: | |
| move.l (.fe_fill_table-.fe_fill_base2)-2(%pc,%d1.w),%a6 | |
| jmp (%a6) | |
| .align 4 | |
| .fe_fill_table: | |
| .long .fe_fill_0 | |
| .long .fe_fill_1 | |
| .long .fe_fill_2 | |
| .long .fe_fill_3 | |
| .long .fe_fill_4 | |
| .long .fe_fill_5 | |
| .long .fe_fill_6 | |
| .long .fe_fill_7 | |
| .long .fe_fill_8 | |
| .long .fe_fill_9 | |
| .long .fe_fill_10 | |
| .long .fe_fill_11 | |
| .long .fe_fill_12 | |
| .long .fe_fill_13 | |
| .long .fe_fill_14 | |
| .long .fe_fill_15 | |
| .long .fe_fill_16 | |
| .long .fe_fill_17 | |
| .long .fe_fill_18 | |
| .long .fe_fill_19 | |
| .long .fe_fill_20 | |
| .long .fe_fill_21 | |
| .long .fe_fill_22 | |
| .long .fe_fill_23 | |
| .long .fe_fill_24 | |
| .long .fe_fill_25 | |
| .long .fe_fill_26 | |
| .long .fe_fill_27 | |
| .long .fe_fill_28 | |
| .long .fe_fill_29 | |
| .long .fe_fill_30 | |
| .long .fe_fill_31 | |
| .long .fe_fill_32 | |
| .long .fe_fill_33 | |
| .long .fe_fill_34 | |
| .long .fe_fill_35 | |
| .long .fe_fill_36 | |
| .long .fe_fill_37 | |
| .long .fe_fill_38 | |
| .long .fe_fill_39 | |
| .long .fe_fill_40 | |
| .long .fe_fill_41 | |
| .long .fe_fill_42 | |
| .long .fe_fill_43 | |
| .long .fe_fill_44 | |
| .long .fe_fill_45 | |
| .long .fe_fill_46 | |
| .long .fe_fill_47 | |
| .long .fe_fill_48 | |
| .long .fe_fill_49 | |
| .long .fe_fill_50 | |
| .long .fe_fill_51 | |
| .long .fe_fill_52 | |
| .long .fe_fill_53 | |
| .long .fe_fill_54 | |
| .long .fe_fill_55 | |
| .long .fe_fill_56 | |
| .long .fe_fill_57 | |
| .long .fe_fill_58 | |
| .long .fe_fill_59 | |
| .long .fe_fill_60 | |
| .long .fe_fill_61 | |
| .long .fe_fill_62 | |
| .long .fe_fill_63 | |
| .long .fe_fill_64 | |
| .long .fe_fill_65 | |
| .long .fe_fill_66 | |
| .long .fe_fill_67 | |
| .long .fe_fill_68 | |
| .long .fe_fill_69 | |
| .long .fe_fill_70 | |
| .long .fe_fill_71 | |
| .long .fe_fill_72 | |
| .long .fe_fill_73 | |
| .long .fe_fill_74 | |
| .long .fe_fill_75 | |
| .long .fe_fill_76 | |
| .long .fe_fill_77 | |
| .long .fe_fill_78 | |
| .long .fe_fill_79 | |
| .long .fe_fill_80 | |
| .long .fe_fill_81 | |
| .long .fe_fill_82 | |
| .long .fe_fill_83 | |
| .long .fe_fill_84 | |
| .long .fe_fill_85 | |
| .long .fe_fill_86 | |
| .long .fe_fill_87 | |
| .long .fe_fill_88 | |
| .long .fe_fill_89 | |
| .long .fe_fill_90 | |
| .long .fe_fill_91 | |
| .long .fe_fill_92 | |
| .long .fe_fill_93 | |
| .long .fe_fill_94 | |
| .long .fe_fill_95 | |
| .long .fe_fill_96 | |
| .long .fe_fill_97 | |
| .long .fe_fill_98 | |
| .long .fe_fill_99 | |
| .long .fe_fill_100 | |
| .long .fe_fill_101 | |
| .long .fe_fill_102 | |
| .long .fe_fill_103 | |
| .long .fe_fill_104 | |
| .long .fe_fill_105 | |
| .long .fe_fill_106 | |
| .long .fe_fill_107 | |
| .long .fe_fill_108 | |
| .long .fe_fill_109 | |
| .long .fe_fill_110 | |
| .long .fe_fill_111 | |
| .long .fe_fill_112 | |
| .long .fe_fill_113 | |
| .long .fe_fill_114 | |
| .long .fe_fill_115 | |
| .long .fe_fill_116 | |
| .long .fe_fill_117 | |
| .long .fe_fill_118 | |
| .long .fe_fill_119 | |
| .long .fe_fill_120 | |
| .long .fe_fill_121 | |
| .long .fe_fill_122 | |
| .long .fe_fill_123 | |
| .long .fe_fill_124 | |
| .long .fe_fill_125 | |
| .long .fe_fill_126 | |
| .long .fe_fill_127 | |
| .long .fe_fill_128 | |
| .long .fe_fill_129 | |
| .long .fe_fill_130 | |
| .long .fe_fill_131 | |
| .long .fe_fill_132 | |
| .long .fe_fill_133 | |
| .long .fe_fill_134 | |
| .long .fe_fill_135 | |
| .long .fe_fill_136 | |
| .long .fe_fill_137 | |
| .long .fe_fill_138 | |
| .long .fe_fill_139 | |
| .long .fe_fill_140 | |
| .long .fe_fill_141 | |
| .long .fe_fill_142 | |
| .long .fe_fill_143 | |
| .long .fe_fill_144 | |
| .long .fe_fill_145 | |
| .long .fe_fill_146 | |
| .long .fe_fill_147 | |
| .long .fe_fill_148 | |
| .long .fe_fill_149 | |
| .long .fe_fill_150 | |
| .long .fe_fill_151 | |
| .long .fe_fill_152 | |
| .long .fe_fill_153 | |
| .long .fe_fill_154 | |
| .long .fe_fill_155 | |
| .long .fe_fill_156 | |
| .long .fe_fill_157 | |
| .long .fe_fill_158 | |
| .long .fe_fill_159 | |
| .long .fe_fill_160 | |
| .fe_fill_160: | |
| move.w %d7,(%a1)+ | *src++ = fix16ToInt(x); | |
| addx.l %d0,%d7 | x += step; | |
| .fe_fill_159: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_158: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_157: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_156: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_155: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_154: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_153: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_152: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_151: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_150: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_149: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_148: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_147: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_146: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_145: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_144: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_143: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_142: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_141: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_140: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_139: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_138: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_137: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_136: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_135: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_134: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_133: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_132: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_131: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_130: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_129: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_128: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_127: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_126: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_125: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_124: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_123: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_122: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_121: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_120: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_119: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_118: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_117: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_116: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_115: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_114: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_113: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_112: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_111: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_110: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_109: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_108: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_107: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_106: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_105: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_104: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_103: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_102: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_101: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_100: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_99: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_98: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_97: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_96: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_95: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_94: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_93: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_92: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_91: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_90: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_89: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_88: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_87: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_86: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_85: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_84: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_83: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_82: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_81: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_80: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_79: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_78: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_77: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_76: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_75: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_74: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_73: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_72: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_71: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_70: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_69: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_68: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_67: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_66: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_65: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_64: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_63: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_62: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_61: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_60: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_59: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_58: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_57: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_56: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_55: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_54: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_53: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_52: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_51: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_50: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_49: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_48: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_47: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_46: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_45: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_44: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_43: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_42: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_41: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_40: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_39: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_38: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_37: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_36: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_35: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_34: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_33: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_32: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_31: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_30: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_29: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_28: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_27: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_26: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_25: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_24: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_23: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_22: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_21: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_20: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_19: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_18: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_17: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_16: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_15: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_14: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_13: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_12: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_11: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_10: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_9: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_8: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_7: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_6: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_5: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_4: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_3: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_2: | |
| move.w %d7,(%a1)+ | |
| addx.l %d0,%d7 | |
| .fe_fill_1: | |
| move.w %d7,(%a1)+ | |
| .fe_fill_0: | |
| rts | |
| | internal use only | |
| | ----------------- | |
| | IN: | |
| | d7 = x | |
| | d1 = dy | |
| | a1 = dst | |
| | | |
| | OUT: | |
| | d7 = ? | |
| | d1 = dy * 4 | |
| | a1 = dst (updated) | |
| | a6 = ? | |
| fillEdgeFast: | |
| move.w %d7,%a6 | |
| swap %d7 | |
| move.w %a6,%d7 | d7 = x = (x1 << 16) | x1 | |
| add.w %d1,%d1 | |
| add.w %d1,%d1 | for jump table | |
| .fef_fill_base: | |
| move.l (.fef_fill_table-.fef_fill_base)-2(%pc,%d1.w),%a6 | |
| jmp (%a6) | |
| .align 4 | |
| .fef_fill_table: | |
| .long .fef_fill_0 | |
| .long .fef_fill_1 | |
| .long .fef_fill_2 | |
| .long .fef_fill_3 | |
| .long .fef_fill_4 | |
| .long .fef_fill_5 | |
| .long .fef_fill_6 | |
| .long .fef_fill_7 | |
| .long .fef_fill_8 | |
| .long .fef_fill_9 | |
| .long .fef_fill_10 | |
| .long .fef_fill_11 | |
| .long .fef_fill_12 | |
| .long .fef_fill_13 | |
| .long .fef_fill_14 | |
| .long .fef_fill_15 | |
| .long .fef_fill_16 | |
| .long .fef_fill_17 | |
| .long .fef_fill_18 | |
| .long .fef_fill_19 | |
| .long .fef_fill_20 | |
| .long .fef_fill_21 | |
| .long .fef_fill_22 | |
| .long .fef_fill_23 | |
| .long .fef_fill_24 | |
| .long .fef_fill_25 | |
| .long .fef_fill_26 | |
| .long .fef_fill_27 | |
| .long .fef_fill_28 | |
| .long .fef_fill_29 | |
| .long .fef_fill_30 | |
| .long .fef_fill_31 | |
| .long .fef_fill_32 | |
| .long .fef_fill_33 | |
| .long .fef_fill_34 | |
| .long .fef_fill_35 | |
| .long .fef_fill_36 | |
| .long .fef_fill_37 | |
| .long .fef_fill_38 | |
| .long .fef_fill_39 | |
| .long .fef_fill_40 | |
| .long .fef_fill_41 | |
| .long .fef_fill_42 | |
| .long .fef_fill_43 | |
| .long .fef_fill_44 | |
| .long .fef_fill_45 | |
| .long .fef_fill_46 | |
| .long .fef_fill_47 | |
| .long .fef_fill_48 | |
| .long .fef_fill_49 | |
| .long .fef_fill_50 | |
| .long .fef_fill_51 | |
| .long .fef_fill_52 | |
| .long .fef_fill_53 | |
| .long .fef_fill_54 | |
| .long .fef_fill_55 | |
| .long .fef_fill_56 | |
| .long .fef_fill_57 | |
| .long .fef_fill_58 | |
| .long .fef_fill_59 | |
| .long .fef_fill_60 | |
| .long .fef_fill_61 | |
| .long .fef_fill_62 | |
| .long .fef_fill_63 | |
| .long .fef_fill_64 | |
| .long .fef_fill_65 | |
| .long .fef_fill_66 | |
| .long .fef_fill_67 | |
| .long .fef_fill_68 | |
| .long .fef_fill_69 | |
| .long .fef_fill_70 | |
| .long .fef_fill_71 | |
| .long .fef_fill_72 | |
| .long .fef_fill_73 | |
| .long .fef_fill_74 | |
| .long .fef_fill_75 | |
| .long .fef_fill_76 | |
| .long .fef_fill_77 | |
| .long .fef_fill_78 | |
| .long .fef_fill_79 | |
| .long .fef_fill_80 | |
| .long .fef_fill_81 | |
| .long .fef_fill_82 | |
| .long .fef_fill_83 | |
| .long .fef_fill_84 | |
| .long .fef_fill_85 | |
| .long .fef_fill_86 | |
| .long .fef_fill_87 | |
| .long .fef_fill_88 | |
| .long .fef_fill_89 | |
| .long .fef_fill_90 | |
| .long .fef_fill_91 | |
| .long .fef_fill_92 | |
| .long .fef_fill_93 | |
| .long .fef_fill_94 | |
| .long .fef_fill_95 | |
| .long .fef_fill_96 | |
| .long .fef_fill_97 | |
| .long .fef_fill_98 | |
| .long .fef_fill_99 | |
| .long .fef_fill_100 | |
| .long .fef_fill_101 | |
| .long .fef_fill_102 | |
| .long .fef_fill_103 | |
| .long .fef_fill_104 | |
| .long .fef_fill_105 | |
| .long .fef_fill_106 | |
| .long .fef_fill_107 | |
| .long .fef_fill_108 | |
| .long .fef_fill_109 | |
| .long .fef_fill_110 | |
| .long .fef_fill_111 | |
| .long .fef_fill_112 | |
| .long .fef_fill_113 | |
| .long .fef_fill_114 | |
| .long .fef_fill_115 | |
| .long .fef_fill_116 | |
| .long .fef_fill_117 | |
| .long .fef_fill_118 | |
| .long .fef_fill_119 | |
| .long .fef_fill_120 | |
| .long .fef_fill_121 | |
| .long .fef_fill_122 | |
| .long .fef_fill_123 | |
| .long .fef_fill_124 | |
| .long .fef_fill_125 | |
| .long .fef_fill_126 | |
| .long .fef_fill_127 | |
| .long .fef_fill_128 | |
| .long .fef_fill_129 | |
| .long .fef_fill_130 | |
| .long .fef_fill_131 | |
| .long .fef_fill_132 | |
| .long .fef_fill_133 | |
| .long .fef_fill_134 | |
| .long .fef_fill_135 | |
| .long .fef_fill_136 | |
| .long .fef_fill_137 | |
| .long .fef_fill_138 | |
| .long .fef_fill_139 | |
| .long .fef_fill_140 | |
| .long .fef_fill_141 | |
| .long .fef_fill_142 | |
| .long .fef_fill_143 | |
| .long .fef_fill_144 | |
| .long .fef_fill_145 | |
| .long .fef_fill_146 | |
| .long .fef_fill_147 | |
| .long .fef_fill_148 | |
| .long .fef_fill_149 | |
| .long .fef_fill_150 | |
| .long .fef_fill_151 | |
| .long .fef_fill_152 | |
| .long .fef_fill_153 | |
| .long .fef_fill_154 | |
| .long .fef_fill_155 | |
| .long .fef_fill_156 | |
| .long .fef_fill_157 | |
| .long .fef_fill_158 | |
| .long .fef_fill_159 | |
| .long .fef_fill_160 | |
| .fef_fill_160: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_158: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_156: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_154: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_152: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_150: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_148: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_146: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_144: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_142: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_140: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_138: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_136: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_134: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_132: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_130: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_128: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_126: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_124: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_122: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_120: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_118: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_116: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_114: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_112: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_110: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_108: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_106: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_104: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_102: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_100: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_98: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_96: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_94: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_92: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_90: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_88: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_86: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_84: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_82: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_80: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_78: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_76: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_74: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_72: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_70: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_68: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_66: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_64: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_62: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_60: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_58: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_56: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_54: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_52: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_50: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_48: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_46: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_44: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_42: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_40: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_38: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_36: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_34: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_32: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_30: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_28: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_26: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_24: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_22: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_20: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_18: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_16: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_14: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_12: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_10: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_8: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_6: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_4: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_2: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_0: | |
| rts | |
| .fef_fill_159: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_157: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_155: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_153: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_151: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_149: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_147: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_145: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_143: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_141: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_139: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_137: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_135: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_133: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_131: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_129: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_127: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_125: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_123: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_121: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_119: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_117: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_115: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_113: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_111: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_109: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_107: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_105: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_103: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_101: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_99: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_97: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_95: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_93: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_91: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_89: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_87: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_85: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_83: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_81: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_79: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_77: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_75: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_73: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_71: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_69: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_67: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_65: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_63: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_61: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_59: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_57: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_55: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_53: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_51: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_49: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_47: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_45: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_43: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_41: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_39: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_37: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_35: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_33: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_31: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_29: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_27: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_25: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_23: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_21: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_19: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_17: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_15: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_13: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_11: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_9: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_7: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_5: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_3: | |
| move.l %d7,(%a1)+ | |
| .fef_fill_1: | |
| move.w %d7,(%a1)+ | |
| rts | |
| | edges calculation | |
| | ----------------- | |
| | | |
| | d0 = dx / free use | |
| | d1 = dy / free use | |
| | d2 = yMin / x0 | |
| | d3 = yMax / y0 | |
| | d4 = xMin / x1 | |
| | d5 = xMax / y1 | |
| | d6 = BMP_HEIGHT-1/ymax | |
| | d7 = x / free use | |
| | a0 = pt / pt1 | |
| | a1 = edge / pt0 | |
| | a2 = ptYMin | |
| | a3 = BMP_WIDTH-1 | |
| | a4 = ptFirst | |
| | a5 = ptLast | |
| | a6 = free use | |
| | 0(sp) = left edge | |
| | 320(sp) = right edge | |
| | 640(sp) = left Ymin | |
| | 642(sp) = right Ymin | |
| | | |
| | polygon drawing | |
| | --------------- | |
| | | |
| | d0 = current col (32 bits extended) | |
| | d1 = other col (32 bits extended) | |
| | d2 = xl | |
| | d3 = xr | |
| | d4 = free use | |
| | d5 = free use | |
| | d6 = len | |
| | a0 = buf = &bmp_buffer_write[y] | |
| | a1 = &buf[x] | |
| | a2 = leftEdge | |
| | a3 = rightEdge | |
| | a4 = free use | |
| func BMP_drawPolygon | |
| movm.l %d2-%d7/%a2-%a6,-(%sp) | |
| move.l 48(%sp),%a0 | a0 = pt = &pts[0] | |
| move.w 54(%sp),%d1 | d1 = num | |
| move.w %d1,%d0 | |
| add.w %d0,%d0 | |
| add.w %d0,%d0 | d0 = num * 4 | |
| move.l %a0,%a4 | a4 = ptFirt | |
| lea (%a0,%d0.w),%a5 | a5 = ptLast | |
| move.l (%a0)+,%d0 | d0.w = y = pt->y; pt++; | |
| move.l %a0,%a2 | a2 = ptYMin = &pts[1] | |
| move.w %d0,%d2 | d2.w = yMin = y | |
| move.w %d0,%d3 | d3.W = yMax = y | |
| swap %d0 | |
| move.w %d0,%d4 | d4.w = xMin = x | |
| move.w %d0,%d5 | d5.W = xMax = x | |
| subq.w #2,%d1 | d1 = cnt = num - 2 | |
| .DP_pts_loop: | while (cnt--) { | |
| move.l (%a0)+,%d0 | y = pt->y; pt++; | |
| cmp.w %d2,%d0 | if (y < yMin) | |
| jge .DP_find_ymax | { | |
| move.w %d0,%d2 | yMin = y | |
| move.l %a0,%a2 | ptYMin = pt + 1 | |
| swap %d0 | d0 = x | |
| cmp.w %d4,%d0 | if (x < xMin) | |
| jge .DP_find_xmax | { | |
| move.w %d0,%d4 | xMin = x | |
| dbra %d1,.DP_pts_loop | continue | |
| jra .DP_pts_loop_done | } | |
| | } | |
| .DP_find_ymax: | |
| cmp.w %d3,%d0 | if (y > yMax) | |
| jle .DP_find_xmin | { | |
| move.w %d0,%d3 | yMax = y | |
| | } | |
| .DP_find_xmin: | |
| swap %d0 | d0 = x | |
| cmp.w %d4,%d0 | if (x < xMin) | |
| jge .DP_find_xmax | { | |
| move.w %d0,%d4 | xMin = x | |
| dbra %d1,.DP_pts_loop | continue | |
| jra .DP_pts_loop_done | } | |
| .DP_find_xmax: | |
| cmp.w %d5,%d0 | if (x > xMax) | |
| jle .DP_pts_loop_next | { | |
| move.w %d0,%d5 | xMax = x | |
| | | |
| .DP_pts_loop_next: | } | |
| dbra %d1,.DP_pts_loop | } | |
| .DP_pts_loop_done: | |
| subq.l #4,%a2 | fix ptYMin | |
| tst.w %d3 | if (yMax <= 0) // we use <= as it is simpler to ignore case where ymax = 0 here | |
| jle .DP_end0 | return 0 | |
| tst.w %d5 | if (xMax < 0) | |
| jlt .DP_end0 | return 0 | |
| move.l #159,%d6 | d6 = BMP_HEIGHT-1 | |
| cmp.w %d6,%d2 | if (yMin > BMP_HEIGHT) | |
| jgt .DP_end0 | return 0 | |
| move.l #255,%a3 | a3 = BMP_WIDTH-1 | |
| cmp.w %a3,%d4 | if (xMin > BMP_WIDTH) | |
| jgt .DP_end0 | return 0 | |
| lea -644(%sp),%sp | reserve memory for edge table and others | |
| cmp.w %d3,%d2 | if (yMin == yMax) | |
| jne .DP_no_single_line | { | |
| tst.w %d4 | if (xmin < 0) | |
| jge .DP_sl_xmin_ok | |
| moveq #0,%d4 | xmin = 0 | |
| .DP_sl_xmin_ok: | |
| cmp.w %a3,%d5 | if (xmax >= BMP_WIDTH) | |
| jle .DP_sl_xmax_ok | |
| move.w %a3,%d5 | xmax = BMP_WIDTH - 1 | |
| .DP_sl_xmax_ok: | |
| move.w %d3,%d6 | d6 = maxY | |
| add.w %d3,%d3 | |
| lea 0(%sp,%d3.w),%a0 | |
| move.w %d4,(%a0) | leftEdge[yMin] = xmin | |
| move.w %d5,320(%a0) | rightEdge[yMin] = xmax | |
| jra .drawPolygon_SL | draw polygon now (d2 = minY and d6 = maxY) | |
| | } | |
| .DP_end0: | |
| moveq #0,%d0 | |
| movm.l (%sp)+,%d2-%d7/%a2-%a6 | |
| rts | |
| .DP_no_single_line: | |
| cmp.w %d6,%d3 | if (ymax < BMP_HEIGHT) | |
| jge .DP_ymax_ok | |
| move.w %d3,%d6 | d6 = ymax | |
| .DP_ymax_ok: | |
| tst.w %d4 | if (xmin < 0) | |
| jlt .DP_XClip | goto XClip | |
| cmp.w %a3,%d5 | if (xmax >= BMP_WIDTH) | |
| jgt .DP_XClip | goto XClip | |
| | LEFT NO X CLIP | |
| | -------------- | |
| move.l %a2,%a0 | a0 = pt = ptYMin | |
| move.l (%a0),%d2 | d2.wl = y0 d2.wh = x0 | |
| cmp.l %a4,%a0 | if (pt == ptFirst) | |
| jne .DP_lnc_first | |
| move.l %a5,%a0 | pt = ptLast | |
| .DP_lnc_first: | |
| move.l -(%a0),%d4 | d4.wl = y1 d4.wh = x1 | |
| tst.w %d4 | while (y1 <= 0) | |
| jgt .DP_lnc_y1l_ok | { | |
| .DP_lnc_y1l_loop: | |
| move.l %d4,%d2 | d2.wl = y0 d2.wh = x0 | |
| cmp.l %a4,%a0 | if (pt == ptFirst) | |
| jne .DP_lnc_y1l_next | |
| move.l %a5,%a0 | pt = ptLast | |
| .DP_lnc_y1l_next: | |
| move.l -(%a0),%d4 | d4.wl = y1 d4.wh = x1 | |
| tst.w %d4 | } | |
| jle .DP_lnc_y1l_loop | |
| .DP_lnc_y1l_ok: | |
| move.w %d2,%d3 | d3 = y0 | |
| swap %d2 | d2 = x0 | |
| move.w %d4,%d5 | d5 = y1 | |
| swap %d4 | d4 = x1 | |
| | Clip Y0 | |
| tst.w %d3 | if (y0 < 0) | |
| jge .DP_lnc_y0_ok | { | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| muls.w %d3,%d0 | |
| divs.w %d1,%d0 | d0 = adj = (y0 * dx) / dy | |
| sub.w %d0,%d2 | x0 -= adj | |
| moveq #0,%d3 | y0 = 0 | |
| | } | |
| .DP_lnc_y0_ok: | |
| move.w %d3,640(%sp) | minYL = y0 | |
| move.l %sp,%d0 | |
| add.w %d3,%d0 | |
| add.w %d3,%d0 | |
| move.l %d0,%a1 | a1 = edge = &leftEdge[minYL] | |
| .DP_lnc_loop: | |
| | Clip Y1 | |
| cmp.w %d6,%d5 | if (y1 >= ymax) | |
| jlt .DP_lnc_y1h_ok | { | |
| | if (y1 > ymax) | |
| jeq .DP_lnc_y1h_nc | { | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| sub.w %d6,%d5 | |
| muls.w %d5,%d0 | |
| divs.w %d1,%d0 | d0 = adj = ((y1 - ymax) * dx) / dy | |
| sub.w %d0,%d4 | x1 -= adj | |
| move.w %d6,%d5 | y1 = ymax | |
| | } | |
| .DP_lnc_y1h_nc: | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| jeq .DP_lnc_done | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d2,%d7 | d7 = x | |
| pea .DP_lnc_done | fillEdge //; d7.w = x; d0 = dx; d1 = dy | |
| jra fillEdge | goto lnc_done | |
| | } | |
| .DP_lnc_end0: | |
| lea 644(%sp),%sp | release memory for edge table and others | |
| moveq #0,%d0 | |
| movm.l (%sp)+,%d2-%d7/%a2-%a6 | |
| rts | |
| .DP_lnc_y1h_ok: | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| jlt .DP_lnc_end0 | if (dy < 0) return 0 | |
| jeq .DP_lnc_next | if (dy) | |
| | { | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d2,%d7 | d7 = x | |
| jsr fillEdge | fillEdge //; d7.w = x; d0 = dx; d1 = dy | |
| | } | |
| .DP_lnc_next: | |
| move.w %d4,%d2 | x0 = x1 | |
| move.w %d5,%d3 | y0 = y1 | |
| cmp.l %a4,%a0 | if (pt == ptFirst) | |
| jne .DP_lnc_next_ok | |
| move.l %a5,%a0 | pt = ptLast | |
| .DP_lnc_next_ok: | |
| move.w -(%a0),%d5 | y1 = pt->y | |
| move.w -(%a0),%d4 | x1 = pt->x | |
| jra .DP_lnc_loop | |
| .DP_lnc_done: | |
| | RIGHT NO X CLIP | |
| | --------------- | |
| move.l %a2,%a0 | a0 = pt = ptYMin | |
| move.l (%a0)+,%d2 | d2.wl = y0 d2.wh = x0 | |
| cmp.l %a5,%a0 | if (pt == ptLast) | |
| jne .DP_rnc_first | |
| move.l %a4,%a0 | pt = ptFirst | |
| .DP_rnc_first: | |
| move.l (%a0)+,%d4 | d4.wl = y1 d4.wh = x1 | |
| tst.w %d4 | while (y1 <= 0) | |
| jgt .DP_rnc_y1l_ok | { | |
| .DP_rnc_y1l_loop: | |
| move.l %d4,%d2 | d2.wl = y0 d2.wh = x0 | |
| cmp.l %a5,%a0 | if (pt == ptLast) | |
| jne .DP_rnc_y1l_next | |
| move.l %a4,%a0 | pt = ptFirst | |
| .DP_rnc_y1l_next: | |
| move.l (%a0)+,%d4 | d4.wl = y1 d4.wh = x1 | |
| tst.w %d4 | } | |
| jle .DP_rnc_y1l_loop | |
| .DP_rnc_y1l_ok: | |
| move.w %d2,%d3 | d3 = y0 | |
| swap %d2 | d2 = x0 | |
| move.w %d4,%d5 | d5 = y1 | |
| swap %d4 | d4 = x1 | |
| | Clip Y0 | |
| tst.w %d3 | if (y0 < 0) | |
| jge .DP_rnc_y0_ok | { | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| muls.w %d3,%d0 | |
| divs.w %d1,%d0 | d0 = adj = (y0 * dx) / dy | |
| sub.w %d0,%d2 | x0 -= adj | |
| moveq #0,%d3 | y0 = 0 | |
| | } | |
| .DP_rnc_y0_ok: | |
| move.w %d3,642(%sp) | minYR = y0 | |
| lea 320(%sp),%a1 | a1 = &rightEdge[0] | |
| add.w %d3,%a1 | |
| add.w %d3,%a1 | a1 = edge = &rightEdge[minYR] | |
| .DP_rnc_loop: | |
| | Clip Y1 | |
| cmp.w %d6,%d5 | if (y1 >= ymax) | |
| jlt .DP_rnc_y1h_ok | { | |
| | if (y1 > ymax) | |
| jeq .DP_rnc_y1h_nc | { | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| sub.w %d6,%d5 | |
| muls.w %d5,%d0 | |
| divs.w %d1,%d0 | d0 = adj = ((y1 - ymax) * dx) / dy | |
| sub.w %d0,%d4 | x1 -= adj | |
| move.w %d6,%d5 | y1 = ymax | |
| | } | |
| .DP_rnc_y1h_nc: | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| jeq .DP_rnc_done | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d2,%d7 | d7 = x | |
| pea .DP_rnc_done | fillEdge //; d7.w = x; d0 = dx; d1 = dy | |
| jra fillEdge | goto rnc_done | |
| | } | |
| .DP_rnc_end0: | |
| lea 644(%sp),%sp | release memory for edge table and others | |
| moveq #0,%d0 | |
| movm.l (%sp)+,%d2-%d7/%a2-%a6 | |
| rts | |
| .DP_rnc_y1h_ok: | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| jlt .DP_rnc_end0 | if (dy < 0) return 0 | |
| jeq .DP_rnc_next | if (dy) | |
| | { | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d2,%d7 | d7 = x | |
| jsr fillEdge | fillEdge //; d7.w = x; d0 = dx; d1 = dy | |
| | } | |
| .DP_rnc_next: | |
| move.w %d4,%d2 | x0 = x1 | |
| move.w %d5,%d3 | y0 = y1 | |
| cmp.l %a5,%a0 | if (pt == ptLast) | |
| jne .DP_rnc_next_ok | |
| move.l %a4,%a0 | pt = ptFirst | |
| .DP_rnc_next_ok: | |
| move.w (%a0)+,%d4 | x1 = pt->x | |
| move.w (%a0)+,%d5 | y1 = pt->y | |
| jra .DP_rnc_loop | |
| .DP_rnc_done: | |
| move.w 642(%sp),%d2 | d2 = minYR, d6 = maxY | |
| move.w 640(%sp),%d3 | d3 = minYL | |
| cmp.w %d2,%d3 | if (minYL > minYR) | |
| jle .drawPolygon | |
| move.w %d3,%d2 | d2 = minYL | |
| jra .drawPolygon | |
| .DP_XClip: | |
| | LEFT WITH X CLIP | |
| | ---------------- | |
| move.l %a2,%a0 | a0 = pt = ptYMin | |
| move.l (%a0),%d2 | d2.wl = y0 d2.wh = x0 | |
| cmp.l %a4,%a0 | if (pt == ptFirst) | |
| jne .DP_l_first | |
| move.l %a5,%a0 | pt = ptLast | |
| .DP_l_first: | |
| move.l -(%a0),%d4 | d4.wl = y1 d4.wh = x1 | |
| tst.w %d4 | while (y1 <= 0) | |
| jgt .DP_l_y1l_ok | { | |
| .DP_l_y1l_loop: | |
| move.l %d4,%d2 | d2.wl = y0 d2.wh = x0 | |
| cmp.l %a4,%a0 | if (pt == ptFirst) | |
| jne .DP_l_y1l_next | |
| move.l %a5,%a0 | pt = ptLast | |
| .DP_l_y1l_next: | |
| move.l -(%a0),%d4 | d4.wl = y1 d4.wh = x1 | |
| tst.w %d4 | } | |
| jle .DP_l_y1l_loop | |
| .DP_l_y1l_ok: | |
| move.w %d4,%d5 | d5 = y1 | |
| swap %d4 | d4 = x1 | |
| move.w %d2,%d3 | d3 = y0 | |
| swap %d2 | d2 = x0 | |
| | Clip Y0 | |
| tst.w %d3 | if (y0 < 0) | |
| jge .DP_l_y0_ok | { | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| muls.w %d3,%d0 | |
| divs.w %d1,%d0 | d0 = adj = (y0 * dx) / dy | |
| sub.w %d0,%d2 | x0 -= adj | |
| moveq #0,%d3 | y0 = 0 | |
| | } | |
| .DP_l_y0_ok: | |
| | Clip X BEFORE | |
| cmp.w %a3,%d2 | if (x0 >= BMP_WIDTH) | |
| jle .DP_l_xl_ok | { | |
| cmp.w %a3,%d4 | while (x1 >= BMP_WIDTH) | |
| jle .DP_l_x0_clip | { | |
| .DP_l_xl_loop: | |
| cmp.w %d4,%d2 | if (x0 < x1) | |
| jlt .DP_l_end0 | return 0 | |
| cmp.w %d6,%d5 | if (y1 >= ymax) | |
| jge .DP_l_end0 | return 0 | |
| move.w %d4,%d2 | x0 = x1 | |
| move.w %d5,%d3 | y0 = y1 | |
| cmp.l %a4,%a0 | if (pt == ptFirst) | |
| jne .DP_l_xl_next | |
| move.l %a5,%a0 | pt = ptLast | |
| .DP_l_xl_next: | |
| move.w -(%a0),%d5 | y1 = pt->y | |
| move.w -(%a0),%d4 | x1 = pt->x | |
| cmp.w %a3,%d4 | | |
| jgt .DP_l_xl_loop | } | |
| .DP_l_x0_clip: | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| sub.w %a3,%d2 | |
| muls.w %d2,%d1 | |
| divs.w %d0,%d1 | d1 = adj = ((x0 - (BMP_WIDTH - 1)) * dy) / dx | |
| sub.w %d1,%d3 | y0 -= adj | |
| cmp.w %d6,%d3 | if (y0 > ymax) | |
| jgt .DP_l_end0 | return 0 | |
| move.w %a3,%d2 | x0 = BMP_WIDTH - 1 | |
| | } | |
| .DP_l_xl_ok: | |
| move.w %d3,640(%sp) | minYL = y0 | |
| move.l %sp,%d0 | |
| add.w %d3,%d0 | |
| add.w %d3,%d0 | |
| move.l %d0,%a1 | a1 = edge = &leftEdge[minYL] | |
| .DP_l_loop: | |
| | Clip Y1 against ymax | |
| cmp.w %d6,%d5 | if (y1 > ymax) | |
| jle .DP_l_y1_ok | { | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| sub.w %d6,%d5 | |
| muls.w %d5,%d0 | |
| divs.w %d1,%d0 | d0 = adj = ((y1 - ymax) * dx) / dy | |
| sub.w %d0,%d4 | x1 -= adj | |
| move.w %d6,%d5 | y1 = ymax | |
| | } | |
| | clip X0 < 0 | |
| .DP_l_y1_ok: | |
| tst.w %d2 | if (x0 < 0) | |
| jge .DP_l_x0p | { | |
| move.w %d4,%d0 | if (x1 < 0) | |
| jge .DP_l_x0n_x1p | { | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy = len | |
| jlt .DP_l_end0 | if (dy < 0) return 0 | |
| jeq .DP_l_next | if (dy) | |
| | { | |
| moveq #0,%d7 | d7 = x | |
| pea .DP_l_next | fillEdgeFast | |
| jra fillEdgeFast | } | |
| | goto next | |
| | } | |
| .DP_l_x0n_x1p: | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| jlt .DP_l_end0 | if (dy < 0) return 0 | |
| sub.w %d2,%d0 | d0 = dx | |
| muls.w %d2,%d1 | |
| moveq #0,%d2 | d1 = adj = (x0 * dy) / dx | |
| divs.w %d0,%d1 | x0 = 0 | |
| jeq .DP_l_test_x1p | if (adj) | |
| | { | |
| sub.w %d1,%d3 | y0 -= adj | |
| neg.w %d1 | d1 = -adj = len | |
| moveq #0,%d7 | d7 = x | |
| pea .DP_l_test_x1p | fillEdgeFast | |
| jra fillEdgeFast | } | |
| | goto test X1 >= BMP_WIDTH | |
| | } | |
| .DP_l_end0: | |
| lea 644(%sp),%sp | release memory for edge table and others | |
| moveq #0,%d0 | |
| movm.l (%sp)+,%d2-%d7/%a2-%a6 | |
| rts | |
| | clip X1 < 0 | |
| .DP_l_x0p: | |
| cmp.w %a3,%d4 | if (x1 < 0) | |
| jls .DP_l_x1_ok | { | |
| jgt .DP_l_x1p | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| jlt .DP_l_end0 | if (dy < 0) return 0 | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d1,%d3 | |
| muls.w %d4,%d3 | |
| divs.w %d0,%d3 | d3 = adj = (x1 * dy) / dx | |
| sub.w %d3,%d1 | dy -= adj | |
| jeq .DP_l_x1n_1 | if (dy) | |
| | { | |
| moveq #0,%d0 | |
| sub.w %d2,%d0 | d0 = new dx | |
| move.w %d2,%d7 | d7 = x | |
| jsr fillEdge | fillEdge | |
| | } | |
| .DP_l_x1n_1: | |
| tst.w %d3 | | |
| jeq .DP_l_next | if (adj) | |
| | { | |
| move.w %d3,%d1 | d1 = dy | |
| moveq #0,%d7 | d7 = x | |
| pea .DP_l_next | fillEdgeFast | |
| jra fillEdgeFast | } | |
| | goto next | |
| | } | |
| | clip x1 >= BMP_WIDTH | |
| .DP_l_test_x1p: | |
| cmp.w %a3,%d4 | if (x1 >= BMP_WIDTH) | |
| jle .DP_l_x1_ok | { | |
| .DP_l_x1p: | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| jlt .DP_l_end0 | if (dy < 0) return 0 | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| sub.w %a3,%d4 | |
| muls.w %d1,%d4 | |
| divs.w %d0,%d4 | d4 = adj = ((x1 - (BMP_WIDTH - 1)) * dy) / dx | |
| sub.w %d4,%d5 | y1 -= adj | |
| move.w %d5,%d6 | ymax = y1 | |
| sub.w %d4,%d1 | d1 = dy = (dy - adj) | |
| jeq .DP_l_done | if (dy) | |
| | { | |
| move.w %a3,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d2,%d7 | d7 = x | |
| | | |
| pea .DP_l_done | fillEdge //; d7.w = x; d0 = dx; d1 = dy | |
| jra fillEdge | } | |
| | goto done | |
| | } | |
| .DP_l_x1_ok: | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| jlt .DP_l_end0 | if (dy < 0) return 0 | |
| jeq .DP_l_next | if (dy) | |
| | { | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d2,%d7 | d7 = x | |
| jsr fillEdge | fillEdge //; d7.w = x; d0 = dx; d1 = dy | |
| | } | |
| .DP_l_next: | |
| cmp.w %d6,%d5 | if (y1 >= ymax) | |
| jge .DP_l_done | goto DP_l_done | |
| move.w %d4,%d2 | x0 = x1 | |
| move.w %d5,%d3 | y0 = y1 | |
| cmp.l %a4,%a0 | if (pt == ptFirst) | |
| jne .DP_l_next_ok | |
| move.l %a5,%a0 | pt = ptLast | |
| .DP_l_next_ok: | |
| move.w -(%a0),%d5 | y1 = pt->y | |
| move.w -(%a0),%d4 | x1 = pt->x | |
| jra .DP_l_loop | |
| .DP_l_done: | |
| | RIGHT WITH X CLIP | |
| | ----------------- | |
| move.l %a2,%a0 | a0 = pt = ptYMin | |
| move.l (%a0)+,%d2 | d2.wl = y0 d2.wh = x0 | |
| cmp.l %a5,%a0 | if (pt == ptLast) | |
| jne .DP_r_first | |
| move.l %a4,%a0 | pt = ptFirst | |
| .DP_r_first: | |
| move.l (%a0)+,%d4 | d4.wl = y1 d4.wh = x1 | |
| tst.w %d4 | while (y1 <= 0) | |
| jgt .DP_r_y1l_ok | { | |
| .DP_r_y1l_loop: | |
| move.l %d4,%d2 | d2.wl = y0 d2.wh = x0 | |
| cmp.l %a5,%a0 | if (pt == ptLast) | |
| jne .DP_r_y1l_next | |
| move.l %a4,%a0 | pt = ptFirst | |
| .DP_r_y1l_next: | |
| move.l (%a0)+,%d4 | d4.wl = y1 d4.wh = x1 | |
| tst.w %d4 | } | |
| jle .DP_r_y1l_loop | |
| .DP_r_y1l_ok: | |
| move.w %d2,%d3 | d3 = y0 | |
| swap %d2 | d2 = x0 | |
| move.w %d4,%d5 | d5 = y1 | |
| swap %d4 | d4 = x1 | |
| | Clip Y0 | |
| tst.w %d3 | if (y0 < 0) | |
| jge .DP_r_y0_ok | { | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| muls.w %d3,%d0 | |
| divs.w %d1,%d0 | d0 = adj = (y0 * dx) / dy | |
| sub.w %d0,%d2 | x0 -= adj | |
| moveq #0,%d3 | y0 = 0 | |
| | } | |
| .DP_r_y0_ok: | |
| | Clip X BEFORE | |
| tst.w %d2 | if (x0 < 0) | |
| jge .DP_r_xl_ok | { | |
| tst.w %d4 | while (x1 < 0) | |
| jge .DP_r_x0_clip | { | |
| .DP_r_xl_loop: | |
| cmp.w %d4,%d2 | if (x0 > x1) | |
| jgt .DP_r_end0 | return 0 | |
| cmp.w %d6,%d5 | if (y1 >= ymax) | |
| jge .DP_r_end0 | return 0 | |
| move.w %d4,%d2 | x0 = x1 | |
| move.w %d5,%d3 | y0 = y1 | |
| cmp.l %a5,%a0 | if (pt == ptLast) | |
| jne .DP_r_xl_next | |
| move.l %a4,%a0 | pt = ptFirst | |
| .DP_r_xl_next: | |
| move.w (%a0)+,%d4 | x1 = pt->x | |
| move.w (%a0)+,%d5 | y1 = pt->y | |
| tst.w %d4 | |
| jlt .DP_r_xl_loop | } | |
| .DP_r_x0_clip: | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| muls.w %d2,%d1 | |
| divs.w %d0,%d1 | d1 = adj = (x0 * dy) / dx | |
| sub.w %d1,%d3 | y0 -= adj | |
| cmp.w %d6,%d3 | if (y0 > ymax) | |
| jgt .DP_r_end0 | return 0 | |
| moveq #0,%d2 | x0 = 0 | |
| | } | |
| .DP_r_xl_ok: | |
| move.w %d3,642(%sp) | minYR = y0 | |
| lea 320(%sp),%a1 | a1 = &rightEdge[0] | |
| add.w %d3,%a1 | |
| add.w %d3,%a1 | a1 = edge = &rightEdge[minYR] | |
| .DP_r_loop: | |
| | Clip Y1 against ymax | |
| cmp.w %d6,%d5 | if (y1 > ymax) | |
| jle .DP_r_y1_ok | { | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| sub.w %d6,%d5 | |
| muls.w %d5,%d0 | |
| divs.w %d1,%d0 | d0 = adj = ((y1 - ymax) * dx) / dy | |
| sub.w %d0,%d4 | x1 -= adj | |
| move.w %d6,%d5 | y1 = ymax | |
| | } | |
| | clip X0 >= BMP_WIDTH | |
| .DP_r_y1_ok: | |
| cmp.w %a3,%d2 | if (x0 >= BMP_WIDTH) | |
| jle .DP_r_x0p | { | |
| cmp.w %a3,%d4 | if (x1 >= BMP_WIDTH) | |
| jle .DP_r_x0n_x1p | { | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy = len | |
| jlt .DP_r_end0 | if (dy < 0) return 0 | |
| jeq .DP_r_next | if (dy) | |
| | { | |
| move.w %a3,%d7 | d7 = x | |
| pea .DP_r_next | fillEdgeFast | |
| jra fillEdgeFast | } | |
| | goto next | |
| | } | |
| .DP_r_x0n_x1p: | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| jlt .DP_r_end0 | if (dy < 0) return 0 | |
| move.w %d2,%d0 | |
| sub.w %d4,%d0 | d0 = -dx | |
| sub.w %a3,%d2 | d2 = x0 - (BMP_WIDTH - 1) | |
| muls.w %d2,%d1 | |
| move.w %a3,%d2 | d1 = adj = (((BMP_WIDTH - 1) - x0) * dy) / dx | |
| divs.w %d0,%d1 | x0 = BMP_WIDTH - 1 | |
| jeq .DP_r_test_x1p | if (adj) | |
| | { | |
| add.w %d1,%d3 | y0 += adj | |
| move.w %a3,%d7 | d7 = x | |
| pea .DP_r_test_x1p | fillEdgeFast | |
| jra fillEdgeFast | } | |
| | goto test X1 >= BMP_WIDTH | |
| | } | |
| .DP_r_end0: | |
| lea 644(%sp),%sp | release memory for edge table and others | |
| moveq #0,%d0 | |
| movm.l (%sp)+,%d2-%d7/%a2-%a6 | |
| rts | |
| | clip X1 >= BMP_WIDTH | |
| .DP_r_x0p: | |
| cmp.w %a3,%d4 | if (x1 >= BMP_WIDTH) | |
| jls .DP_r_x1_ok | { | |
| jle .DP_r_x1p | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| jlt .DP_r_end0 | if (dy < 0) return 0 | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d4,%d7 | |
| sub.w %a3,%d7 | d7 = x1 - (BMP_WIDTH - 1) | |
| move.w %d1,%d3 | d3 = dy | |
| muls.w %d7,%d3 | |
| divs.w %d0,%d3 | d3 = adj = ((x1 - (BMP_WIDTH - 1)) * dy) / dx | |
| sub.w %d3,%d1 | dy -= adj | |
| jeq .DP_r_x1n_1 | if (dy) | |
| | { | |
| move.w %a3,%d0 | |
| sub.w %d2,%d0 | d0 = new dx | |
| move.w %d2,%d7 | d7 = x | |
| jsr fillEdge | fillEdge | |
| | } | |
| .DP_r_x1n_1: | |
| tst.w %d3 | | |
| jeq .DP_r_next | if (adj) | |
| | { | |
| move.w %d3,%d1 | d1 = dy | |
| move.w %a3,%d7 | d7 = x | |
| pea .DP_r_next | fillEdgeFast | |
| jra fillEdgeFast | } | |
| | goto next | |
| | } | |
| | clip x1 < 0 | |
| .DP_r_test_x1p: | |
| tst.w %d4 | if (x1 < 0) | |
| jge .DP_r_x1_ok | { | |
| .DP_r_x1p: | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| jlt .DP_r_end0 | if (dy < 0) return 0 | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| muls.w %d1,%d4 | |
| divs.w %d0,%d4 | d4 = adj = (x1 * dy) / dx | |
| sub.w %d4,%d5 | y1 -= adj | |
| cmp.w %d6,%d5 | if (y1 < ymax) | |
| jge .DP_r_ymax_ok | |
| move.w %d5,%d6 | ymax = y1 | |
| .DP_r_ymax_ok: | |
| sub.w %d4,%d1 | d1 = dy = (dy - adj) | |
| jeq .DP_r_done | if (dy) | |
| | { | |
| moveq #0,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d2,%d7 | d7 = x | |
| pea .DP_r_done | fillEdge //; d7.w = x; d0 = dx; d1 = dy | |
| jra fillEdge | } | |
| | goto done | |
| | } | |
| .DP_r_x1_ok: | |
| move.w %d5,%d1 | |
| sub.w %d3,%d1 | d1 = dy | |
| jlt .DP_r_end0 | if (dy < 0) return 0 | |
| jeq .DP_r_next | if (dy) | |
| | { | |
| move.w %d4,%d0 | |
| sub.w %d2,%d0 | d0 = dx | |
| move.w %d2,%d7 | d7 = x | |
| jsr fillEdge | fillEdge //; d7.w = x; d0 = dx; d1 = dy | |
| | } | |
| .DP_r_next: | |
| cmp.w %d6,%d5 | if (y1 >= ymax) | |
| jge .DP_r_done | goto DP_r_done | |
| move.w %d4,%d2 | x0 = x1 | |
| move.w %d5,%d3 | y0 = y1 | |
| cmp.l %a5,%a0 | if (pt == ptLast) | |
| jne .DP_r_next_ok | |
| move.l %a4,%a0 | pt = ptFirst | |
| .DP_r_next_ok: | |
| move.w (%a0)+,%d4 | x1 = pt->x | |
| move.w (%a0)+,%d5 | y1 = pt->y | |
| jra .DP_r_loop | |
| .DP_r_done: | |
| move.w 642(%sp),%d2 | d2 = minYR, d6 = maxY | |
| move.w 640(%sp),%d3 | d3 = minYL | |
| cmp.w %d2,%d3 | if (minYL > minYR) | |
| jle .drawPolygon | |
| move.w %d3,%d2 | d2 = minYL | |
| | polygon drawing | |
| | --------------- | |
| .drawPolygon: | |
| subq.w #1,%d6 | we do not draw the last line (simpler) | |
| .drawPolygon_SL: | |
| sub.w %d2,%d6 | d6 = len = maxY - minY | |
| jlt .dp_end0 | < 0 = nothing to draw --> exit | |
| move.b 644+59(%sp),%d1 | d1 = col | |
| move.b %d1,-(%sp) | |
| move.w (%sp)+,%d0 | d0 = d1 << 8 | |
| move.b %d1,%d0 | d0 = col word extended | |
| move.w %d0,%d1 | d1 = col word extended | |
| swap %d1 | |
| move.w %d0,%d1 | d1 = odd line col extended to 32 bits | |
| move.l %d1,%d0 | |
| rol.l #4,%d0 | d0 = even line col exchanged to 32 bits | |
| btst #0,%d2 | odd line ? | |
| jeq .dp_odd_line | |
| exg %d0,%d1 | change to odd color scheme | |
| .dp_odd_line: | |
| add.w %d2,%d2 | d2 = minY * 2 | |
| lea 0(%sp,%d2.w),%a2 | a2 = edgeL = &leftEdge[minY] | |
| lea 320(%a2),%a3 | a3 = edgeR = &rightEdge[minY] | |
| move.l bmp_buffer_write,%a0 | |
| lsl.w #6,%d2 | |
| add.w %d2,%a0 | a0 = buf = &bmp_buffer_write[minY * BMP_PITCH] | |
| | while (len--) | |
| .dp_293: | { | |
| move.w (%a2)+,%d2 | xl = *edgeL | |
| jge .dp_291 | |
| moveq #0,%d2 | |
| .dp_291: | |
| move.w (%a3)+,%d3 | xr = *edgeR | |
| | cmp.w #255,%d3 | |
| | jle .dp_292 | |
| | move.w #255,%d3 | |
| .dp_292: | |
| cmp.w %d2,%d3 | if (xr < xl) continue; | |
| jlt .dp_175 | |
| .dp_290: | |
| asr.w #1,%d2 | a1 = dst = &buf[xl >> 1] | |
| lea (%a0,%d2.w),%a1 | if (xl & 1) | |
| jcc .dp_179 | { | |
| moveq #-16,%d4 | |
| and.b (%a1),%d4 | d4 = buf[xl >> 1] & 0xF0 | |
| moveq #15,%d5 | |
| and.b %d0,%d5 | d5 = color & 0x0F | |
| or.b %d4,%d5 | |
| move.b %d5,(%a1)+ | buf[xl >> 1] = (buf[xl >> 1] & 0xF0) | (color & 0x0F) | |
| addq.w #1,%d2 | xl++ | |
| | } | |
| .dp_179: | |
| asr.w #1,%d3 | if (!(xr & 1)) | |
| jcs .dp_180 | { | |
| moveq #15,%d4 | |
| and.b (%a0,%d3.w),%d4 | d4 = buf[xr >> 1] & 0x0F | |
| moveq #-16,%d5 | |
| and.b %d0,%d5 | d5 = color & 0xF0 | |
| or.b %d4,%d5 | |
| move.b %d5,(%a0,%d3.w) | buf[xr >> 1] = (buf[xr >> 1] & 0x0F) | (color & 0xF0) | |
| subq.w #1,%d3 | xr-- | |
| | } | |
| .dp_180: | |
| sub.w %d2,%d3 | d3 = width | |
| jlt .dp_175 | |
| asr.w #1,%d2 | dst is byte aligned ? | |
| jcc .dp_163 | |
| move.b %d0,(%a1)+ | align dst to word | |
| subq.w #1,%d3 | |
| .dp_163: | |
| add.w %d3,%d3 | |
| add.w %d3,%d3 | d3 = width * 4 | |
| .dp_fill_base: | |
| move.l (.dp_fill_table-.dp_fill_base)-2(%pc,%d3.w),%a4 | |
| jmp (%a4) | |
| .dp_end0: | |
| lea 644(%sp),%sp | release memory for edge table and others | |
| moveq #0,%d0 | |
| movm.l (%sp)+,%d2-%d7/%a2-%a6 | |
| rts | |
| .align 4 | |
| .long .dp_175 | |
| .long .dp_175 | |
| .long .dp_175 | |
| .dp_fill_table: | |
| .long .dp_fill_01 | |
| .long .dp_fill_02 | |
| .long .dp_fill_03 | |
| .long .dp_fill_04 | |
| .long .dp_fill_05 | |
| .long .dp_fill_06 | |
| .long .dp_fill_07 | |
| .long .dp_fill_08 | |
| .long .dp_fill_09 | |
| .long .dp_fill_10 | |
| .long .dp_fill_11 | |
| .long .dp_fill_12 | |
| .long .dp_fill_13 | |
| .long .dp_fill_14 | |
| .long .dp_fill_15 | |
| .long .dp_fill_16 | |
| .long .dp_fill_17 | |
| .long .dp_fill_18 | |
| .long .dp_fill_19 | |
| .long .dp_fill_20 | |
| .long .dp_fill_21 | |
| .long .dp_fill_22 | |
| .long .dp_fill_23 | |
| .long .dp_fill_24 | |
| .long .dp_fill_25 | |
| .long .dp_fill_26 | |
| .long .dp_fill_27 | |
| .long .dp_fill_28 | |
| .long .dp_fill_29 | |
| .long .dp_fill_30 | |
| .long .dp_fill_31 | |
| .long .dp_fill_32 | |
| .long .dp_fill_33 | |
| .long .dp_fill_34 | |
| .long .dp_fill_35 | |
| .long .dp_fill_36 | |
| .long .dp_fill_37 | |
| .long .dp_fill_38 | |
| .long .dp_fill_39 | |
| .long .dp_fill_40 | |
| .long .dp_fill_41 | |
| .long .dp_fill_42 | |
| .long .dp_fill_43 | |
| .long .dp_fill_44 | |
| .long .dp_fill_45 | |
| .long .dp_fill_46 | |
| .long .dp_fill_47 | |
| .long .dp_fill_48 | |
| .long .dp_fill_49 | |
| .long .dp_fill_50 | |
| .long .dp_fill_51 | |
| .long .dp_fill_52 | |
| .long .dp_fill_53 | |
| .long .dp_fill_54 | |
| .long .dp_fill_55 | |
| .long .dp_fill_56 | |
| .long .dp_fill_57 | |
| .long .dp_fill_58 | |
| .long .dp_fill_59 | |
| .long .dp_fill_60 | |
| .long .dp_fill_61 | |
| .long .dp_fill_62 | |
| .long .dp_fill_63 | |
| .long .dp_fill_64 | |
| .long .dp_fill_65 | |
| .long .dp_fill_66 | |
| .long .dp_fill_67 | |
| .long .dp_fill_68 | |
| .long .dp_fill_69 | |
| .long .dp_fill_70 | |
| .long .dp_fill_71 | |
| .long .dp_fill_72 | |
| .long .dp_fill_73 | |
| .long .dp_fill_74 | |
| .long .dp_fill_75 | |
| .long .dp_fill_76 | |
| .long .dp_fill_77 | |
| .long .dp_fill_78 | |
| .long .dp_fill_79 | |
| .long .dp_fill_80 | |
| .long .dp_fill_81 | |
| .long .dp_fill_82 | |
| .long .dp_fill_83 | |
| .long .dp_fill_84 | |
| .long .dp_fill_85 | |
| .long .dp_fill_86 | |
| .long .dp_fill_87 | |
| .long .dp_fill_88 | |
| .long .dp_fill_89 | |
| .long .dp_fill_90 | |
| .long .dp_fill_91 | |
| .long .dp_fill_92 | |
| .long .dp_fill_93 | |
| .long .dp_fill_94 | |
| .long .dp_fill_95 | |
| .long .dp_fill_96 | |
| .long .dp_fill_97 | |
| .long .dp_fill_98 | |
| .long .dp_fill_99 | |
| .long .dp_fill_100 | |
| .long .dp_fill_101 | |
| .long .dp_fill_102 | |
| .long .dp_fill_103 | |
| .long .dp_fill_104 | |
| .long .dp_fill_105 | |
| .long .dp_fill_106 | |
| .long .dp_fill_107 | |
| .long .dp_fill_108 | |
| .long .dp_fill_109 | |
| .long .dp_fill_110 | |
| .long .dp_fill_111 | |
| .long .dp_fill_112 | |
| .long .dp_fill_113 | |
| .long .dp_fill_114 | |
| .long .dp_fill_115 | |
| .long .dp_fill_116 | |
| .long .dp_fill_117 | |
| .long .dp_fill_118 | |
| .long .dp_fill_119 | |
| .long .dp_fill_120 | |
| .long .dp_fill_121 | |
| .long .dp_fill_122 | |
| .long .dp_fill_123 | |
| .long .dp_fill_124 | |
| .long .dp_fill_125 | |
| .long .dp_fill_126 | |
| .long .dp_fill_127 | |
| .long .dp_fill_128 | |
| .long .dp_fill_129 | |
| .long .dp_fill_129 | |
| .long .dp_fill_129 | |
| .long .dp_fill_129 | |
| .dp_fill_128: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_124: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_120: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_116: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_112: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_108: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_104: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_100: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_96: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_92: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_88: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_84: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_80: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_76: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_72: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_68: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_64: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_60: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_56: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_52: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_48: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_44: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_40: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_36: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_32: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_28: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_24: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_20: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_16: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_12: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_08: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_04: | |
| move.l %d0,(%a1) | |
| .dp_175: | |
| lea 128(%a0),%a0 | |
| exg %d0,%d1 | exchange color scheme | |
| dbra %d6,.dp_293 | } | |
| lea 644(%sp),%sp | release memory for edge table and others | |
| moveq #1,%d0 | |
| movm.l (%sp)+,%d2-%d7/%a2-%a6 | |
| rts | |
| .dp_fill_126: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_122: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_118: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_114: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_110: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_106: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_102: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_98: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_94: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_90: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_86: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_82: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_78: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_74: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_70: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_66: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_62: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_58: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_54: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_50: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_46: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_42: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_38: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_34: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_30: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_26: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_22: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_18: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_14: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_10: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_06: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_02: | |
| move.w %d0,(%a1) | |
| lea 128(%a0),%a0 | |
| exg %d0,%d1 | exchange color scheme | |
| dbra %d6,.dp_293 | } | |
| lea 644(%sp),%sp | release memory for edge table and others | |
| moveq #1,%d0 | |
| movm.l (%sp)+,%d2-%d7/%a2-%a6 | |
| rts | |
| .dp_fill_129: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_125: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_121: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_117: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_113: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_109: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_105: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_101: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_97: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_93: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_89: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_85: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_81: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_77: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_73: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_69: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_65: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_61: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_57: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_53: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_49: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_45: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_41: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_37: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_33: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_29: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_25: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_21: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_17: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_13: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_09: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_05: | |
| move.l %d0,(%a1)+ | |
| move.b %d0,(%a1) | |
| lea 128(%a0),%a0 | |
| exg %d0,%d1 | exchange color scheme | |
| dbra %d6,.dp_293 | } | |
| lea 644(%sp),%sp | release memory for edge table and others | |
| moveq #1,%d0 | |
| movm.l (%sp)+,%d2-%d7/%a2-%a6 | |
| rts | |
| .dp_fill_127: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_123: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_119: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_115: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_111: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_107: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_103: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_99: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_95: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_91: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_87: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_83: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_79: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_75: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_71: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_67: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_63: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_59: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_55: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_51: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_47: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_43: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_39: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_35: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_31: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_27: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_23: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_19: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_15: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_11: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_07: | |
| move.l %d0,(%a1)+ | |
| .dp_fill_03: | |
| move.w %d0,(%a1)+ | |
| .dp_fill_01: | |
| move.b %d0,(%a1) | |
| lea 128(%a0),%a0 | |
| exg %d0,%d1 | exchange color scheme | |
| dbra %d6,.dp_293 | } | |
| lea 644(%sp),%sp | release memory for edge table and others | |
| moveq #1,%d0 | |
| movm.l (%sp)+,%d2-%d7/%a2-%a6 | |
| rts |