Home » Archimedes archive » Archimedes World » AW-1995-06_Disc2.adf » June95_2 » InTheMag/AcornAns/DeepDeep/QuikDith/!QuikDith/s/ass

InTheMag/AcornAns/DeepDeep/QuikDith/!QuikDith/s/ass

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Archimedes World » AW-1995-06_Disc2.adf » June95_2
Filename: InTheMag/AcornAns/DeepDeep/QuikDith/!QuikDith/s/ass
Read OK:
File size: 4D89 bytes
Load address: 0000
Exec address: 0000
File contents
r0      RN      0
r1      RN      1
r2      RN      2
r3      RN      3
r4      RN      4
r5      RN      5
r6      RN      6
r7      RN      7
r8      RN      8
r9      RN      9
r10     RN      10
r11     RN      11
r12     RN      12
r13     RN      13
r14     RN      14
r15     RN      15

a1      RN      r0
a2      RN      r1
a3      RN      r2
a4      RN      r3
v1      RN      r4
v2      RN      r5
v3      RN      r6
v4      RN      r7
v5      RN      r8
v6      RN      r9
sl      RN      r10
fp      RN      r11
ip      RN      r12
sp      RN      r13
lr      RN      r14
pc      RN      r15

        AREA    |C$$code|, CODE, READONLY

; g256wnp_internal
; a leaf APCS function
; to dither from source to destination sprite
;
; C prototype
; void g256wnp_internal(int x, int y, char *dp, char *sp, compact_dither_error *de, char *lut, unsigned int *pal256def)
; x is sprite width in pixels, y is height in pixels,
; dp pts to destination sprite image (8bpp),
; sp pts to source image (16bpp),
; de pts to line buffer to hold compact_dither_errors (each of form er,eg,eb,byte-to-pad - all signed chars),
; lut pts to 32768 byte look up table to map 15 bit rbg colour to nearest available colour number in default palette,
; pal256def pts to 256 int list of default palette
;

                ^       4, fp
dxp             #       4
dyp             #       4
ddp             #       4
dsp             #       4
dde             #       4
dlut            #       4
dpal256def      #       4

gwi_xp          RN      r0
gwi_yp          RN      r1      ;nb also is gwi_m4
gwi_m4          RN      r1      ;nb also is gwi_yp
gwi_dp          RN      r2
gwi_sp          RN      r3
gwi_de          RN      r4
gwi_lut         RN      r5
gwi_pal256def   RN      r6
gwi_r           RN      r7
gwi_g           RN      r8
gwi_b           RN      r9
gwi_i           RN      r10
gwi_m3          RN      r11     ;nb also is fp
gwi_m2          RN      r12
gwi_m1          RN      r13
gwi_lde         RN      r14

        ASSERT  gwi_m1>gwi_m2 :LAND: gwi_m2>gwi_m3 :LAND: gwi_m3>gwi_m4
				;Note, scanning of image is done in a serpentine fashion to reduce dither
				;pattern effects, & to maintain speed the main processing code is replicated,
        MACRO			;more or less, three times: 1st to scan the top row (for which we have no
$label  gwi_seg1		;precalculated errors from a row above), & then twice more, once to scan odd
				;rows right to left & once for scanning even rows left to right.
				;This macro contains code common to each of the three incidents - it is
				;entered with gwi_r, _g & _b containing the desired destination colour
				;(including any error terms added in), & it writes to destination image the
				;nearest colour available, then calculates the error term for this pixel in
				;gwi_lde (last dither error).
$label  MOV     gwi_m1, gwi_r, ASR #3	;from here . . .
        CMP     gwi_r, #255
        MOVGT   gwi_m1, #31
        CMP     gwi_r, #0
        MOVLT   gwi_m1, #0		;to here, round r component down to 5 bits & clip to 0-31 (into _m1 bits 0-4)
        MOV     gwi_m2, gwi_g, ASR #3
        CMP     gwi_g, #255
        MOVGT   gwi_m2, #31
        CMP     gwi_g, #0
        MOVLT   gwi_m2, #0
        ADD     gwi_m1, gwi_m1, gwi_m2, ASL #5	;as above, for g component, into _m1 bits 5-9
        MOV     gwi_m2, gwi_b, ASR #3
        CMP     gwi_b, #255
        MOVGT   gwi_m2, #31
        CMP     gwi_b, #0
        MOVLT   gwi_m2, #0
        ADD     gwi_m1, gwi_m1, gwi_m2, ASL #10	;as above, for b component, into _m1 bits 10-14
					;ie _m1 is now the desired 15 bits rgb colour
        LDRB    gwi_m1, [gwi_lut, gwi_m1]	;set _m1 to number of nearest available colour via a look up table
        STRB    gwi_m1, [gwi_dp, #0]		;write this to destination image
        LDR     gwi_m1, [gwi_pal256def, gwi_m1, ASL #2]	;read the 24 bit rgb value of the colour just written
        MOV     gwi_m2, gwi_m1, LSL #16		;from here . . .
	SUB	gwi_m3, gwi_r, gwi_m2, LSR #24
        CMP     gwi_m3, #127
        MOVGT   gwi_m3, #127
        CMP     gwi_m3, #-127
        MOVLT   gwi_m3, #-127
        AND     gwi_m3, gwi_m3, #255		;to here, calc (desired red)-(used red), & clip to a signed 8 bit value
        MOV     gwi_m2, gwi_m1, LSL #8
        SUB     gwi_m2, gwi_g, gwi_m2, LSR #24
        CMP     gwi_m2, #127
        MOVGT   gwi_m2, #127
        CMP     gwi_m2, #-127
        MOVLT   gwi_m2, #-127
        AND     gwi_m2, gwi_m2, #255
        ADD     gwi_m3, gwi_m3, gwi_m2, LSL #8	;as above, for green, inserting the error into correct bits in _m3
        SUB     gwi_m2, gwi_b, gwi_m1, LSR #24
        CMP     gwi_m2, #127
        MOVGT   gwi_m2, #127
        CMP     gwi_m2, #-127
        MOVLT   gwi_m2, #-127
        AND     gwi_m2, gwi_m2, #255
        ADD     gwi_lde, gwi_m3, gwi_m2, LSL #16	;as above, for blue - _lde now holds all three signed
							;8 bit error terms
        MEND

gwi_asl DCD     0					;storage for sl, fp & sp, during internal calcs
gwi_afp DCD     0
gwi_asp DCD     0

gwi_aj          DCD     0				;current row number

        EXPORT  g256wnp_internal

gwinsta DCB     "g256wnp_internal", 0
        ALIGN
gwinend DCD     &ff000000 + gwinend - gwinsta

g256wnp_internal

        MOV     ip, sp
        STMFD   sp!, {a1-a4}		;stack fn args x,y,dp & sp onto stack below remaining args de,lut & pal256def
        STMFD   sp!, {r4-r9, fp, ip, lr, pc}
        SUB     fp, ip, #20             ;leaf fn & little need of stack, so don't bother with stack checking

        STR     sl, gwi_asl
        STR     fp, gwi_afp
        STR     sp, gwi_asp             ; strictly, don't need to save this, as restore frame from fp which
                                        ; contains old sp, however keep it here in case change code st need
                                        ; to make an external APCS call
        ;set up regs now
        LDR     gwi_xp, dxp		;note dxp etc are register relative - so this actually does LDR _xp, [fp, #4]
        LDR     gwi_yp, dyp		;sprite heights in pixels (xp is corresponding widths)
        LDR     gwi_dp, ddp		;ptr to destination sprite image (ie image data itself & not the spr hdr)
        LDR     gwi_sp, dsp		;ptr to source sprite image
        LDR     gwi_de, dde		;ptr to a buffer for error terms (must be xp words long)
        LDR     gwi_lut, dlut		;ptr to lut to map 15bit rgb colour to nearest available in default 8bpp pal
        LDR     gwi_pal256def, dpal256def	;ptr to default 8bpp 256 entry palette (used to calc errors)

        ;code
        MOV     gwi_i, gwi_xp		;current column number (actually, xp-number)
        CMP     gwi_i, #0
        BLE     gwi_xloop1done

gwi_xloop1
	TST	gwi_sp, #3
	BIC	gwi_r, gwi_sp, #3
        LDR	gwi_m1, [gwi_r, #0]
	MOVNE	gwi_m1, gwi_m1, LSR #16	;set _m1 b0-15 to the 16bit colour for current pixel in source image
        AND     gwi_r, gwi_m1, #31	;from here . . .
        MOV     gwi_g, gwi_m1, LSR #5
        AND     gwi_g, gwi_g, #31
        MOV     gwi_b, gwi_m1, LSR #10
        AND     gwi_b, gwi_b, #31	;to here, extract three r,g & b 5 bit components into _r, _g & _b
	ORR	gwi_r, gwi_r, gwi_r, LSL #5	;from here . . .
	MOV	gwi_r, gwi_r, LSR #2
	ORR	gwi_g, gwi_g, gwi_g, LSL #5
	MOV	gwi_g, gwi_g, LSR #2
	ORR	gwi_b, gwi_b, gwi_b, LSL #5
	MOV	gwi_b, gwi_b, LSR #2		;to here, extend to 8 bit, such that span full range 0-255
        CMP     gwi_i, gwi_xp
        BEQ     gwi_xl1_b1
					;if not on first pixel in row, there is an error term to add in from left:
        MOV     gwi_m1, gwi_lde, LSL #24	;extract red error from _lde &
        MOV     gwi_m1, gwi_m1, ASR #24		;sign extend it to 32 bits
        RSBS    gwi_m1, gwi_m1, gwi_m1, ASL #3	;from here . . .
        ADDMI   gwi_m1, gwi_m1, #15		;	(need to ensure *7/16 will round towards 0, rather than down)
        ADD     gwi_r, gwi_r, gwi_m1, ASR #4	;to here, add to _r 7/16 lde red error term
        MOV     gwi_m1, gwi_lde, LSL #16	;from here . . .
        MOV     gwi_m1, gwi_m1, ASR #24
        RSBS    gwi_m1, gwi_m1, gwi_m1, ASL #3
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_g, gwi_g, gwi_m1, ASR #4	;to here, extract green error & add 7/16 of it into _g
        MOV     gwi_m1, gwi_lde, LSL #8		;from here . . .
        MOV     gwi_m1, gwi_m1, ASR #24
        RSBS    gwi_m1, gwi_m1, gwi_m1, ASL #3
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_b, gwi_b, gwi_m1, ASR #4	;to here, extract blue error from lde & add 7/16 into _b
        STR     gwi_lde, [gwi_de, gwi_i, ASL #2]	;buffer lde for when processing row below

gwi_xl1_b1

        gwi_seg1				;write to destination image & calculate error for this pixel (into lde)

        ADD     gwi_dp, gwi_dp, #1		;step through destination image one pixel
        ADD     gwi_sp, gwi_sp, #2		;step through source image one pixel
        SUBS    gwi_i, gwi_i, #1
        BGT     gwi_xloop1			;& repeat till all of first row processed
gwi_xloop1done
						;now step down to next row (remember, serpentine scanning)
        RSB     gwi_m2, gwi_xp, #4
        AND     gwi_m1, gwi_m2, #3		; . . . to get past righthand wastage of last row, dest image
        ADD     gwi_m1, gwi_m1, gwi_xp		; . . . to get past end of next row
        SUB     gwi_m1, gwi_m1, #1		; . . . to get back to last pixel on that row
        ADD     gwi_dp, gwi_dp, gwi_m1		;make the adjustment to _dp
  	SUB	gwi_m1, gwi_m2, gwi_xp		;from here . . .
        AND     gwi_m1, gwi_m1, #3
        ADD     gwi_m1, gwi_m1, gwi_xp, LSL #1
        SUB     gwi_m1, gwi_m1, #2
        ADD     gwi_sp, gwi_sp, gwi_m1		;to here, as above for src image (note, it has 2*xp bytes per
						; row, plus righthand wastage)
        SUBS    gwi_m1, gwi_yp, #2
        BMI     gwi_yloopdone			;carry on with next row, unless all rows done (note, subtract
        STR     gwi_m1, gwi_aj			; 2 from yp initially since yp is # rows counting from 1, &
						; branch cond is MI, ie loop counts rows including 0)
					;note, de buffer holds errors for row above, running from right in low
					;memory to left side in high mem. Next row will be scanned right to
gwi_yloop				;left, so need extract errors from buffer in increasing memory order.

        STR     gwi_lde, [gwi_de, #0]	;buffer error for final pixel from last row
        MOV     gwi_i, #1
        CMP     gwi_i, gwi_xp
        BGT     gwi_xloop2done
					;all remaining code is similar to preceeding, except have to add in
gwi_xloop2				;errors from row above, & scan row in reverse direction
	TST	gwi_sp, #3		;from here . . .
	BIC	gwi_r, gwi_sp, #3
        LDR	gwi_m1, [gwi_r, #0]
	MOVNE	gwi_m1, gwi_m1, LSR #16
        AND     gwi_r, gwi_m1, #31
        MOV     gwi_g, gwi_m1, LSR #5
        AND     gwi_g, gwi_g, #31
        MOV     gwi_b, gwi_m1, LSR #10
        AND     gwi_b, gwi_b, #31
	ORR	gwi_r, gwi_r, gwi_r, LSL #5
	MOV	gwi_r, gwi_r, LSR #2
	ORR	gwi_g, gwi_g, gwi_g, LSL #5
	MOV	gwi_g, gwi_g, LSR #2
	ORR	gwi_b, gwi_b, gwi_b, LSL #5
	MOV	gwi_b, gwi_b, LSR #2	;to here, read source pixel rgb colour into _r,_g & _b, three 8 bit components

        SUB     gwi_m4, gwi_i, #1	;from here . . .
        LDR     gwi_m4, [gwi_de, gwi_m4, ASL #2]
        MOV     gwi_m1, gwi_m4, LSL #24
        MOV     gwi_m1, gwi_m1, ASR #24
        ADDS    gwi_m1, gwi_m1, gwi_m1, ASL #2
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_r, gwi_r, gwi_m1, ASR #4
        MOV     gwi_m1, gwi_m4, LSL #16
        MOV     gwi_m1, gwi_m1, ASR #24
        ADDS    gwi_m1, gwi_m1, gwi_m1, ASL #2
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_g, gwi_g, gwi_m1, ASR #4
        MOV     gwi_m1, gwi_m4, LSL #8
        MOV     gwi_m1, gwi_m1, ASR #24
        ADDS    gwi_m1, gwi_m1, gwi_m1, ASL #2
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_b, gwi_b, gwi_m1, ASR #4	;to here, add in 5/16 error for pixel above

        CMP     gwi_i, #1
        BEQ     gwi_xl2_b1

        SUB     gwi_m2, gwi_i, #2		;similiarly (if not on rightmost column) . . .
        LDR     gwi_m4, [gwi_de, gwi_m2, ASL #2]
        MOV     gwi_m1, gwi_m4, LSL #24
        MOVS    gwi_m1, gwi_m1, ASR #24
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_r, gwi_r, gwi_m1, ASR #4
        MOV     gwi_m1, gwi_m4, LSL #16
        MOVS    gwi_m1, gwi_m1, ASR #24
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_g, gwi_g, gwi_m1, ASR #4
        MOV     gwi_m1, gwi_m4, LSL #8
        MOVS    gwi_m1, gwi_m1, ASR #24
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_b, gwi_b, gwi_m1, ASR #4	;add in 1/16 error for pixel to above right

        STR     gwi_lde, [gwi_de, gwi_m2, ASL #2]	;can now safely overwrite value in buffer with lde for next row

        MOV     gwi_m1, gwi_lde, LSL #24
        MOV     gwi_m1, gwi_m1, ASR #24
        RSBS    gwi_m1, gwi_m1, gwi_m1, ASL #3
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_r, gwi_r, gwi_m1, ASR #4
        MOV     gwi_m1, gwi_lde, LSL #16
        MOV     gwi_m1, gwi_m1, ASR #24
        RSBS    gwi_m1, gwi_m1, gwi_m1, ASL #3
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_g, gwi_g, gwi_m1, ASR #4
        MOV     gwi_m1, gwi_lde, LSL #8
        MOV     gwi_m1, gwi_m1, ASR #24
        RSBS    gwi_m1, gwi_m1, gwi_m1, ASL #3
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_b, gwi_b, gwi_m1, ASR #4	;now add in 7/16 error for pixel to right

gwi_xl2_b1
        CMP     gwi_i, gwi_xp
        BEQ     gwi_xl2_b2

        LDR     gwi_m4, [gwi_de, gwi_i, ASL #2]	;if not on far left column . . .
        MOV     gwi_m1, gwi_m4, LSL #24
        MOV     gwi_m1, gwi_m1, ASR #24
        ADDS    gwi_m1, gwi_m1, gwi_m1, ASL #1
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_r, gwi_r, gwi_m1, ASR #4
        MOV     gwi_m1, gwi_m4, LSL #16
        MOV     gwi_m1, gwi_m1, ASR #24
        ADDS    gwi_m1, gwi_m1, gwi_m1, ASL #1
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_g, gwi_g, gwi_m1, ASR #4
        MOV     gwi_m1, gwi_m4, LSL #8
        MOV     gwi_m1, gwi_m1, ASR #24
        ADDS    gwi_m1, gwi_m1, gwi_m1, ASL #1
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_b, gwi_b, gwi_m1, ASR #4	;add in 3/16 error for pixel to above left

gwi_xl2_b2

        gwi_seg1				;write destination pixel & calc new error for pixel

        SUB     gwi_dp, gwi_dp, #1
        SUB     gwi_sp, gwi_sp, #2
        ADD     gwi_i, gwi_i, #1
        CMP     gwi_i, gwi_xp
        BLE     gwi_xloop2			;loop back til all of right to left row processed
gwi_xloop2done

        RSB     gwi_m2, gwi_xp, #4
        AND     gwi_m1, gwi_m2, #3
        ADD     gwi_m1, gwi_m1, gwi_xp
        ADD     gwi_m1, gwi_m1, #1
        ADD     gwi_dp, gwi_dp, gwi_m1
  	SUB	gwi_m1, gwi_m2, gwi_xp
        AND     gwi_m1, gwi_m1, #3
        ADD     gwi_m1, gwi_m1, gwi_xp, LSL #1
        ADD     gwi_m1, gwi_m1, #2
        ADD     gwi_sp, gwi_sp, gwi_m1		;step sp, dp to next row (to be scanned left to right)

        LDR     gwi_m1, gwi_aj
        SUBS    gwi_m1, gwi_m1, #1
        STR     gwi_m1, gwi_aj
        BMI     gwi_yloopdone			;continue with next row, unless all done

        SUB     gwi_m1, gwi_xp, #1
        STR     gwi_lde, [gwi_de, gwi_m1, ASL #2]	;buffer error for final pixel on last row
        MOV     gwi_i, gwi_xp
        CMP     gwi_i, #0
        BLE     gwi_xloop3done

gwi_xloop3
	TST	gwi_sp, #3			;from here . . .
	BIC	gwi_r, gwi_sp, #3
        LDR	gwi_m1, [gwi_r, #0]
	MOVNE	gwi_m1, gwi_m1, LSR #16
        AND     gwi_r, gwi_m1, #31
        MOV     gwi_g, gwi_m1, LSR #5
        AND     gwi_g, gwi_g, #31
        MOV     gwi_b, gwi_m1, LSR #10
        AND     gwi_b, gwi_b, #31
	ORR	gwi_r, gwi_r, gwi_r, LSL #5
	MOV	gwi_r, gwi_r, LSR #2
	ORR	gwi_g, gwi_g, gwi_g, LSL #5
	MOV	gwi_g, gwi_g, LSR #2
	ORR	gwi_b, gwi_b, gwi_b, LSL #5
	MOV	gwi_b, gwi_b, LSR #2		;to here, read r,g & b colour of current source pixel

        SUB     gwi_m4, gwi_i, #1		;for pixel above . . .
        LDR     gwi_m4, [gwi_de, gwi_m4, ASL #2]
        MOV     gwi_m1, gwi_m4, LSL #24
        MOV     gwi_m1, gwi_m1, ASR #24
        ADDS    gwi_m1, gwi_m1, gwi_m1, ASL #2
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_r, gwi_r, gwi_m1, ASR #4
        MOV     gwi_m1, gwi_m4, LSL #16
        MOV     gwi_m1, gwi_m1, ASR #24
        ADDS    gwi_m1, gwi_m1, gwi_m1, ASL #2
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_g, gwi_g, gwi_m1, ASR #4
        MOV     gwi_m1, gwi_m4, LSL #8
        MOV     gwi_m1, gwi_m1, ASR #24
        ADDS    gwi_m1, gwi_m1, gwi_m1, ASL #2
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_b, gwi_b, gwi_m1, ASR #4	;add in 5/16 error

        CMP     gwi_i, gwi_xp
        BEQ     gwi_xl3_b1
						;if not on leftmost column . . .
        LDR     gwi_m4, [gwi_de, gwi_i, ASL #2]
        MOV     gwi_m1, gwi_m4, LSL #24
        MOVS    gwi_m1, gwi_m1, ASR #24
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_r, gwi_r, gwi_m1, ASR #4
        MOV     gwi_m1, gwi_m4, LSL #16
        MOVS    gwi_m1, gwi_m1, ASR #24
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_g, gwi_g, gwi_m1, ASR #4
        MOV     gwi_m1, gwi_m4, LSL #8
        MOVS    gwi_m1, gwi_m1, ASR #24
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_b, gwi_b, gwi_m1, ASR #4	;add in 1/16 error for pixel to above left

        STR     gwi_lde, [gwi_de, gwi_i, ASL #2]	;buffer last error

        MOV     gwi_m1, gwi_lde, LSL #24
        MOV     gwi_m1, gwi_m1, ASR #24
        RSBS    gwi_m1, gwi_m1, gwi_m1, ASL #3
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_r, gwi_r, gwi_m1, ASR #4
        MOV     gwi_m1, gwi_lde, LSL #16
        MOV     gwi_m1, gwi_m1, ASR #24
        RSBS    gwi_m1, gwi_m1, gwi_m1, ASL #3
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_g, gwi_g, gwi_m1, ASR #4
        MOV     gwi_m1, gwi_lde, LSL #8
        MOV     gwi_m1, gwi_m1, ASR #24
        RSBS    gwi_m1, gwi_m1, gwi_m1, ASL #3
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_b, gwi_b, gwi_m1, ASR #4	;& add in 7/16 error for pixel to left

gwi_xl3_b1
        CMP     gwi_i, #1
        BEQ     gwi_xl3_b2
						;if not on far right . . .
        SUB     gwi_m2, gwi_i, #2
        LDR     gwi_m4, [gwi_de, gwi_m2, ASL #2]
        MOV     gwi_m1, gwi_m4, LSL #24
        MOV     gwi_m1, gwi_m1, ASR #24
        ADDS    gwi_m1, gwi_m1, gwi_m1, ASL #1
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_r, gwi_r, gwi_m1, ASR #4
        MOV     gwi_m1, gwi_m4, LSL #16
        MOV     gwi_m1, gwi_m1, ASR #24
        ADDS    gwi_m1, gwi_m1, gwi_m1, ASL #1
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_g, gwi_g, gwi_m1, ASR #4
        MOV     gwi_m1, gwi_m4, LSL #8
        MOV     gwi_m1, gwi_m1, ASR #24
        ADDS    gwi_m1, gwi_m1, gwi_m1, ASL #1
        ADDMI   gwi_m1, gwi_m1, #15
        ADD     gwi_b, gwi_b, gwi_m1, ASR #4	;add in 3/16 error for pixel to above right

gwi_xl3_b2

        gwi_seg1			;write destination pixel & calc its error

        ADD     gwi_dp, gwi_dp, #1
        ADD     gwi_sp, gwi_sp, #2
        SUBS    gwi_i, gwi_i, #1
        BGT     gwi_xloop3		;continue till all of left to right row processed
gwi_xloop3done

        RSB     gwi_m2, gwi_xp, #4
        AND     gwi_m1, gwi_m2, #3
        ADD     gwi_m1, gwi_m1, gwi_xp
        SUB     gwi_m1, gwi_m1, #1
        ADD     gwi_dp, gwi_dp, gwi_m1
  	SUB	gwi_m1, gwi_m2, gwi_xp
        AND     gwi_m1, gwi_m1, #3
        ADD     gwi_m1, gwi_m1, gwi_xp, LSL #1
        SUB     gwi_m1, gwi_m1, #2
        ADD     gwi_sp, gwi_sp, gwi_m1	;step dp, sp to start of next right-to-left row

        LDR     gwi_m1, gwi_aj
        SUBS    gwi_m1, gwi_m1, #1
        STR     gwi_m1, gwi_aj
        BPL     gwi_yloop		;& repeat, until all rows done

gwi_yloopdone
        ;all done
        LDR     sp, gwi_asp
        LDR     fp, gwi_afp
        LDR     sl, gwi_asl
        LDMEA   fp, {r4-r9, fp, sp, pc}^	;get out of here!



        END
00000000  0a 72 30 20 20 20 20 20  20 52 4e 20 20 20 20 20  |.r0      RN     |
00000010  20 30 0a 72 31 20 20 20  20 20 20 52 4e 20 20 20  | 0.r1      RN   |
00000020  20 20 20 31 0a 72 32 20  20 20 20 20 20 52 4e 20  |   1.r2      RN |
00000030  20 20 20 20 20 32 0a 72  33 20 20 20 20 20 20 52  |     2.r3      R|
00000040  4e 20 20 20 20 20 20 33  0a 72 34 20 20 20 20 20  |N      3.r4     |
00000050  20 52 4e 20 20 20 20 20  20 34 0a 72 35 20 20 20  | RN      4.r5   |
00000060  20 20 20 52 4e 20 20 20  20 20 20 35 0a 72 36 20  |   RN      5.r6 |
00000070  20 20 20 20 20 52 4e 20  20 20 20 20 20 36 0a 72  |     RN      6.r|
00000080  37 20 20 20 20 20 20 52  4e 20 20 20 20 20 20 37  |7      RN      7|
00000090  0a 72 38 20 20 20 20 20  20 52 4e 20 20 20 20 20  |.r8      RN     |
000000a0  20 38 0a 72 39 20 20 20  20 20 20 52 4e 20 20 20  | 8.r9      RN   |
000000b0  20 20 20 39 0a 72 31 30  20 20 20 20 20 52 4e 20  |   9.r10     RN |
000000c0  20 20 20 20 20 31 30 0a  72 31 31 20 20 20 20 20  |     10.r11     |
000000d0  52 4e 20 20 20 20 20 20  31 31 0a 72 31 32 20 20  |RN      11.r12  |
000000e0  20 20 20 52 4e 20 20 20  20 20 20 31 32 0a 72 31  |   RN      12.r1|
000000f0  33 20 20 20 20 20 52 4e  20 20 20 20 20 20 31 33  |3     RN      13|
00000100  0a 72 31 34 20 20 20 20  20 52 4e 20 20 20 20 20  |.r14     RN     |
00000110  20 31 34 0a 72 31 35 20  20 20 20 20 52 4e 20 20  | 14.r15     RN  |
00000120  20 20 20 20 31 35 0a 0a  61 31 20 20 20 20 20 20  |    15..a1      |
00000130  52 4e 20 20 20 20 20 20  72 30 0a 61 32 20 20 20  |RN      r0.a2   |
00000140  20 20 20 52 4e 20 20 20  20 20 20 72 31 0a 61 33  |   RN      r1.a3|
00000150  20 20 20 20 20 20 52 4e  20 20 20 20 20 20 72 32  |      RN      r2|
00000160  0a 61 34 20 20 20 20 20  20 52 4e 20 20 20 20 20  |.a4      RN     |
00000170  20 72 33 0a 76 31 20 20  20 20 20 20 52 4e 20 20  | r3.v1      RN  |
00000180  20 20 20 20 72 34 0a 76  32 20 20 20 20 20 20 52  |    r4.v2      R|
00000190  4e 20 20 20 20 20 20 72  35 0a 76 33 20 20 20 20  |N      r5.v3    |
000001a0  20 20 52 4e 20 20 20 20  20 20 72 36 0a 76 34 20  |  RN      r6.v4 |
000001b0  20 20 20 20 20 52 4e 20  20 20 20 20 20 72 37 0a  |     RN      r7.|
000001c0  76 35 20 20 20 20 20 20  52 4e 20 20 20 20 20 20  |v5      RN      |
000001d0  72 38 0a 76 36 20 20 20  20 20 20 52 4e 20 20 20  |r8.v6      RN   |
000001e0  20 20 20 72 39 0a 73 6c  20 20 20 20 20 20 52 4e  |   r9.sl      RN|
000001f0  20 20 20 20 20 20 72 31  30 0a 66 70 20 20 20 20  |      r10.fp    |
00000200  20 20 52 4e 20 20 20 20  20 20 72 31 31 0a 69 70  |  RN      r11.ip|
00000210  20 20 20 20 20 20 52 4e  20 20 20 20 20 20 72 31  |      RN      r1|
00000220  32 0a 73 70 20 20 20 20  20 20 52 4e 20 20 20 20  |2.sp      RN    |
00000230  20 20 72 31 33 0a 6c 72  20 20 20 20 20 20 52 4e  |  r13.lr      RN|
00000240  20 20 20 20 20 20 72 31  34 0a 70 63 20 20 20 20  |      r14.pc    |
00000250  20 20 52 4e 20 20 20 20  20 20 72 31 35 0a 0a 20  |  RN      r15.. |
00000260  20 20 20 20 20 20 20 41  52 45 41 20 20 20 20 7c  |       AREA    ||
00000270  43 24 24 63 6f 64 65 7c  2c 20 43 4f 44 45 2c 20  |C$$code|, CODE, |
00000280  52 45 41 44 4f 4e 4c 59  0a 0a 3b 20 67 32 35 36  |READONLY..; g256|
00000290  77 6e 70 5f 69 6e 74 65  72 6e 61 6c 0a 3b 20 61  |wnp_internal.; a|
000002a0  20 6c 65 61 66 20 41 50  43 53 20 66 75 6e 63 74  | leaf APCS funct|
000002b0  69 6f 6e 0a 3b 20 74 6f  20 64 69 74 68 65 72 20  |ion.; to dither |
000002c0  66 72 6f 6d 20 73 6f 75  72 63 65 20 74 6f 20 64  |from source to d|
000002d0  65 73 74 69 6e 61 74 69  6f 6e 20 73 70 72 69 74  |estination sprit|
000002e0  65 0a 3b 0a 3b 20 43 20  70 72 6f 74 6f 74 79 70  |e.;.; C prototyp|
000002f0  65 0a 3b 20 76 6f 69 64  20 67 32 35 36 77 6e 70  |e.; void g256wnp|
00000300  5f 69 6e 74 65 72 6e 61  6c 28 69 6e 74 20 78 2c  |_internal(int x,|
00000310  20 69 6e 74 20 79 2c 20  63 68 61 72 20 2a 64 70  | int y, char *dp|
00000320  2c 20 63 68 61 72 20 2a  73 70 2c 20 63 6f 6d 70  |, char *sp, comp|
00000330  61 63 74 5f 64 69 74 68  65 72 5f 65 72 72 6f 72  |act_dither_error|
00000340  20 2a 64 65 2c 20 63 68  61 72 20 2a 6c 75 74 2c  | *de, char *lut,|
00000350  20 75 6e 73 69 67 6e 65  64 20 69 6e 74 20 2a 70  | unsigned int *p|
00000360  61 6c 32 35 36 64 65 66  29 0a 3b 20 78 20 69 73  |al256def).; x is|
00000370  20 73 70 72 69 74 65 20  77 69 64 74 68 20 69 6e  | sprite width in|
00000380  20 70 69 78 65 6c 73 2c  20 79 20 69 73 20 68 65  | pixels, y is he|
00000390  69 67 68 74 20 69 6e 20  70 69 78 65 6c 73 2c 0a  |ight in pixels,.|
000003a0  3b 20 64 70 20 70 74 73  20 74 6f 20 64 65 73 74  |; dp pts to dest|
000003b0  69 6e 61 74 69 6f 6e 20  73 70 72 69 74 65 20 69  |ination sprite i|
000003c0  6d 61 67 65 20 28 38 62  70 70 29 2c 0a 3b 20 73  |mage (8bpp),.; s|
000003d0  70 20 70 74 73 20 74 6f  20 73 6f 75 72 63 65 20  |p pts to source |
000003e0  69 6d 61 67 65 20 28 31  36 62 70 70 29 2c 0a 3b  |image (16bpp),.;|
000003f0  20 64 65 20 70 74 73 20  74 6f 20 6c 69 6e 65 20  | de pts to line |
00000400  62 75 66 66 65 72 20 74  6f 20 68 6f 6c 64 20 63  |buffer to hold c|
00000410  6f 6d 70 61 63 74 5f 64  69 74 68 65 72 5f 65 72  |ompact_dither_er|
00000420  72 6f 72 73 20 28 65 61  63 68 20 6f 66 20 66 6f  |rors (each of fo|
00000430  72 6d 20 65 72 2c 65 67  2c 65 62 2c 62 79 74 65  |rm er,eg,eb,byte|
00000440  2d 74 6f 2d 70 61 64 20  2d 20 61 6c 6c 20 73 69  |-to-pad - all si|
00000450  67 6e 65 64 20 63 68 61  72 73 29 2c 0a 3b 20 6c  |gned chars),.; l|
00000460  75 74 20 70 74 73 20 74  6f 20 33 32 37 36 38 20  |ut pts to 32768 |
00000470  62 79 74 65 20 6c 6f 6f  6b 20 75 70 20 74 61 62  |byte look up tab|
00000480  6c 65 20 74 6f 20 6d 61  70 20 31 35 20 62 69 74  |le to map 15 bit|
00000490  20 72 62 67 20 63 6f 6c  6f 75 72 20 74 6f 20 6e  | rbg colour to n|
000004a0  65 61 72 65 73 74 20 61  76 61 69 6c 61 62 6c 65  |earest available|
000004b0  20 63 6f 6c 6f 75 72 20  6e 75 6d 62 65 72 20 69  | colour number i|
000004c0  6e 20 64 65 66 61 75 6c  74 20 70 61 6c 65 74 74  |n default palett|
000004d0  65 2c 0a 3b 20 70 61 6c  32 35 36 64 65 66 20 70  |e,.; pal256def p|
000004e0  74 73 20 74 6f 20 32 35  36 20 69 6e 74 20 6c 69  |ts to 256 int li|
000004f0  73 74 20 6f 66 20 64 65  66 61 75 6c 74 20 70 61  |st of default pa|
00000500  6c 65 74 74 65 0a 3b 0a  0a 20 20 20 20 20 20 20  |lette.;..       |
00000510  20 20 20 20 20 20 20 20  20 5e 20 20 20 20 20 20  |         ^      |
00000520  20 34 2c 20 66 70 0a 64  78 70 20 20 20 20 20 20  | 4, fp.dxp      |
00000530  20 20 20 20 20 20 20 23  20 20 20 20 20 20 20 34  |       #       4|
00000540  0a 64 79 70 20 20 20 20  20 20 20 20 20 20 20 20  |.dyp            |
00000550  20 23 20 20 20 20 20 20  20 34 0a 64 64 70 20 20  | #       4.ddp  |
00000560  20 20 20 20 20 20 20 20  20 20 20 23 20 20 20 20  |           #    |
00000570  20 20 20 34 0a 64 73 70  20 20 20 20 20 20 20 20  |   4.dsp        |
00000580  20 20 20 20 20 23 20 20  20 20 20 20 20 34 0a 64  |     #       4.d|
00000590  64 65 20 20 20 20 20 20  20 20 20 20 20 20 20 23  |de             #|
000005a0  20 20 20 20 20 20 20 34  0a 64 6c 75 74 20 20 20  |       4.dlut   |
000005b0  20 20 20 20 20 20 20 20  20 23 20 20 20 20 20 20  |         #      |
000005c0  20 34 0a 64 70 61 6c 32  35 36 64 65 66 20 20 20  | 4.dpal256def   |
000005d0  20 20 20 23 20 20 20 20  20 20 20 34 0a 0a 67 77  |   #       4..gw|
000005e0  69 5f 78 70 20 20 20 20  20 20 20 20 20 20 52 4e  |i_xp          RN|
000005f0  20 20 20 20 20 20 72 30  0a 67 77 69 5f 79 70 20  |      r0.gwi_yp |
00000600  20 20 20 20 20 20 20 20  20 52 4e 20 20 20 20 20  |         RN     |
00000610  20 72 31 20 20 20 20 20  20 3b 6e 62 20 61 6c 73  | r1      ;nb als|
00000620  6f 20 69 73 20 67 77 69  5f 6d 34 0a 67 77 69 5f  |o is gwi_m4.gwi_|
00000630  6d 34 20 20 20 20 20 20  20 20 20 20 52 4e 20 20  |m4          RN  |
00000640  20 20 20 20 72 31 20 20  20 20 20 20 3b 6e 62 20  |    r1      ;nb |
00000650  61 6c 73 6f 20 69 73 20  67 77 69 5f 79 70 0a 67  |also is gwi_yp.g|
00000660  77 69 5f 64 70 20 20 20  20 20 20 20 20 20 20 52  |wi_dp          R|
00000670  4e 20 20 20 20 20 20 72  32 0a 67 77 69 5f 73 70  |N      r2.gwi_sp|
00000680  20 20 20 20 20 20 20 20  20 20 52 4e 20 20 20 20  |          RN    |
00000690  20 20 72 33 0a 67 77 69  5f 64 65 20 20 20 20 20  |  r3.gwi_de     |
000006a0  20 20 20 20 20 52 4e 20  20 20 20 20 20 72 34 0a  |     RN      r4.|
000006b0  67 77 69 5f 6c 75 74 20  20 20 20 20 20 20 20 20  |gwi_lut         |
000006c0  52 4e 20 20 20 20 20 20  72 35 0a 67 77 69 5f 70  |RN      r5.gwi_p|
000006d0  61 6c 32 35 36 64 65 66  20 20 20 52 4e 20 20 20  |al256def   RN   |
000006e0  20 20 20 72 36 0a 67 77  69 5f 72 20 20 20 20 20  |   r6.gwi_r     |
000006f0  20 20 20 20 20 20 52 4e  20 20 20 20 20 20 72 37  |      RN      r7|
00000700  0a 67 77 69 5f 67 20 20  20 20 20 20 20 20 20 20  |.gwi_g          |
00000710  20 52 4e 20 20 20 20 20  20 72 38 0a 67 77 69 5f  | RN      r8.gwi_|
00000720  62 20 20 20 20 20 20 20  20 20 20 20 52 4e 20 20  |b           RN  |
00000730  20 20 20 20 72 39 0a 67  77 69 5f 69 20 20 20 20  |    r9.gwi_i    |
00000740  20 20 20 20 20 20 20 52  4e 20 20 20 20 20 20 72  |       RN      r|
00000750  31 30 0a 67 77 69 5f 6d  33 20 20 20 20 20 20 20  |10.gwi_m3       |
00000760  20 20 20 52 4e 20 20 20  20 20 20 72 31 31 20 20  |   RN      r11  |
00000770  20 20 20 3b 6e 62 20 61  6c 73 6f 20 69 73 20 66  |   ;nb also is f|
00000780  70 0a 67 77 69 5f 6d 32  20 20 20 20 20 20 20 20  |p.gwi_m2        |
00000790  20 20 52 4e 20 20 20 20  20 20 72 31 32 0a 67 77  |  RN      r12.gw|
000007a0  69 5f 6d 31 20 20 20 20  20 20 20 20 20 20 52 4e  |i_m1          RN|
000007b0  20 20 20 20 20 20 72 31  33 0a 67 77 69 5f 6c 64  |      r13.gwi_ld|
000007c0  65 20 20 20 20 20 20 20  20 20 52 4e 20 20 20 20  |e         RN    |
000007d0  20 20 72 31 34 0a 0a 20  20 20 20 20 20 20 20 41  |  r14..        A|
000007e0  53 53 45 52 54 20 20 67  77 69 5f 6d 31 3e 67 77  |SSERT  gwi_m1>gw|
000007f0  69 5f 6d 32 20 3a 4c 41  4e 44 3a 20 67 77 69 5f  |i_m2 :LAND: gwi_|
00000800  6d 32 3e 67 77 69 5f 6d  33 20 3a 4c 41 4e 44 3a  |m2>gwi_m3 :LAND:|
00000810  20 67 77 69 5f 6d 33 3e  67 77 69 5f 6d 34 0a 09  | gwi_m3>gwi_m4..|
00000820  09 09 09 3b 4e 6f 74 65  2c 20 73 63 61 6e 6e 69  |...;Note, scanni|
00000830  6e 67 20 6f 66 20 69 6d  61 67 65 20 69 73 20 64  |ng of image is d|
00000840  6f 6e 65 20 69 6e 20 61  20 73 65 72 70 65 6e 74  |one in a serpent|
00000850  69 6e 65 20 66 61 73 68  69 6f 6e 20 74 6f 20 72  |ine fashion to r|
00000860  65 64 75 63 65 20 64 69  74 68 65 72 0a 09 09 09  |educe dither....|
00000870  09 3b 70 61 74 74 65 72  6e 20 65 66 66 65 63 74  |.;pattern effect|
00000880  73 2c 20 26 20 74 6f 20  6d 61 69 6e 74 61 69 6e  |s, & to maintain|
00000890  20 73 70 65 65 64 20 74  68 65 20 6d 61 69 6e 20  | speed the main |
000008a0  70 72 6f 63 65 73 73 69  6e 67 20 63 6f 64 65 20  |processing code |
000008b0  69 73 20 72 65 70 6c 69  63 61 74 65 64 2c 0a 20  |is replicated,. |
000008c0  20 20 20 20 20 20 20 4d  41 43 52 4f 09 09 09 3b  |       MACRO...;|
000008d0  6d 6f 72 65 20 6f 72 20  6c 65 73 73 2c 20 74 68  |more or less, th|
000008e0  72 65 65 20 74 69 6d 65  73 3a 20 31 73 74 20 74  |ree times: 1st t|
000008f0  6f 20 73 63 61 6e 20 74  68 65 20 74 6f 70 20 72  |o scan the top r|
00000900  6f 77 20 28 66 6f 72 20  77 68 69 63 68 20 77 65  |ow (for which we|
00000910  20 68 61 76 65 20 6e 6f  0a 24 6c 61 62 65 6c 20  | have no.$label |
00000920  20 67 77 69 5f 73 65 67  31 09 09 3b 70 72 65 63  | gwi_seg1..;prec|
00000930  61 6c 63 75 6c 61 74 65  64 20 65 72 72 6f 72 73  |alculated errors|
00000940  20 66 72 6f 6d 20 61 20  72 6f 77 20 61 62 6f 76  | from a row abov|
00000950  65 29 2c 20 26 20 74 68  65 6e 20 74 77 69 63 65  |e), & then twice|
00000960  20 6d 6f 72 65 2c 20 6f  6e 63 65 20 74 6f 20 73  | more, once to s|
00000970  63 61 6e 20 6f 64 64 0a  09 09 09 09 3b 72 6f 77  |can odd.....;row|
00000980  73 20 72 69 67 68 74 20  74 6f 20 6c 65 66 74 20  |s right to left |
00000990  26 20 6f 6e 63 65 20 66  6f 72 20 73 63 61 6e 6e  |& once for scann|
000009a0  69 6e 67 20 65 76 65 6e  20 72 6f 77 73 20 6c 65  |ing even rows le|
000009b0  66 74 20 74 6f 20 72 69  67 68 74 2e 0a 09 09 09  |ft to right.....|
000009c0  09 3b 54 68 69 73 20 6d  61 63 72 6f 20 63 6f 6e  |.;This macro con|
000009d0  74 61 69 6e 73 20 63 6f  64 65 20 63 6f 6d 6d 6f  |tains code commo|
000009e0  6e 20 74 6f 20 65 61 63  68 20 6f 66 20 74 68 65  |n to each of the|
000009f0  20 74 68 72 65 65 20 69  6e 63 69 64 65 6e 74 73  | three incidents|
00000a00  20 2d 20 69 74 20 69 73  0a 09 09 09 09 3b 65 6e  | - it is.....;en|
00000a10  74 65 72 65 64 20 77 69  74 68 20 67 77 69 5f 72  |tered with gwi_r|
00000a20  2c 20 5f 67 20 26 20 5f  62 20 63 6f 6e 74 61 69  |, _g & _b contai|
00000a30  6e 69 6e 67 20 74 68 65  20 64 65 73 69 72 65 64  |ning the desired|
00000a40  20 64 65 73 74 69 6e 61  74 69 6f 6e 20 63 6f 6c  | destination col|
00000a50  6f 75 72 0a 09 09 09 09  3b 28 69 6e 63 6c 75 64  |our.....;(includ|
00000a60  69 6e 67 20 61 6e 79 20  65 72 72 6f 72 20 74 65  |ing any error te|
00000a70  72 6d 73 20 61 64 64 65  64 20 69 6e 29 2c 20 26  |rms added in), &|
00000a80  20 69 74 20 77 72 69 74  65 73 20 74 6f 20 64 65  | it writes to de|
00000a90  73 74 69 6e 61 74 69 6f  6e 20 69 6d 61 67 65 20  |stination image |
00000aa0  74 68 65 0a 09 09 09 09  3b 6e 65 61 72 65 73 74  |the.....;nearest|
00000ab0  20 63 6f 6c 6f 75 72 20  61 76 61 69 6c 61 62 6c  | colour availabl|
00000ac0  65 2c 20 74 68 65 6e 20  63 61 6c 63 75 6c 61 74  |e, then calculat|
00000ad0  65 73 20 74 68 65 20 65  72 72 6f 72 20 74 65 72  |es the error ter|
00000ae0  6d 20 66 6f 72 20 74 68  69 73 20 70 69 78 65 6c  |m for this pixel|
00000af0  20 69 6e 0a 09 09 09 09  3b 67 77 69 5f 6c 64 65  | in.....;gwi_lde|
00000b00  20 28 6c 61 73 74 20 64  69 74 68 65 72 20 65 72  | (last dither er|
00000b10  72 6f 72 29 2e 0a 24 6c  61 62 65 6c 20 20 4d 4f  |ror)..$label  MO|
00000b20  56 20 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |V     gwi_m1, gw|
00000b30  69 5f 72 2c 20 41 53 52  20 23 33 09 3b 66 72 6f  |i_r, ASR #3.;fro|
00000b40  6d 20 68 65 72 65 20 2e  20 2e 20 2e 0a 20 20 20  |m here . . ..   |
00000b50  20 20 20 20 20 43 4d 50  20 20 20 20 20 67 77 69  |     CMP     gwi|
00000b60  5f 72 2c 20 23 32 35 35  0a 20 20 20 20 20 20 20  |_r, #255.       |
00000b70  20 4d 4f 56 47 54 20 20  20 67 77 69 5f 6d 31 2c  | MOVGT   gwi_m1,|
00000b80  20 23 33 31 0a 20 20 20  20 20 20 20 20 43 4d 50  | #31.        CMP|
00000b90  20 20 20 20 20 67 77 69  5f 72 2c 20 23 30 0a 20  |     gwi_r, #0. |
00000ba0  20 20 20 20 20 20 20 4d  4f 56 4c 54 20 20 20 67  |       MOVLT   g|
00000bb0  77 69 5f 6d 31 2c 20 23  30 09 09 3b 74 6f 20 68  |wi_m1, #0..;to h|
00000bc0  65 72 65 2c 20 72 6f 75  6e 64 20 72 20 63 6f 6d  |ere, round r com|
00000bd0  70 6f 6e 65 6e 74 20 64  6f 77 6e 20 74 6f 20 35  |ponent down to 5|
00000be0  20 62 69 74 73 20 26 20  63 6c 69 70 20 74 6f 20  | bits & clip to |
00000bf0  30 2d 33 31 20 28 69 6e  74 6f 20 5f 6d 31 20 62  |0-31 (into _m1 b|
00000c00  69 74 73 20 30 2d 34 29  0a 20 20 20 20 20 20 20  |its 0-4).       |
00000c10  20 4d 4f 56 20 20 20 20  20 67 77 69 5f 6d 32 2c  | MOV     gwi_m2,|
00000c20  20 67 77 69 5f 67 2c 20  41 53 52 20 23 33 0a 20  | gwi_g, ASR #3. |
00000c30  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 67  |       CMP     g|
00000c40  77 69 5f 67 2c 20 23 32  35 35 0a 20 20 20 20 20  |wi_g, #255.     |
00000c50  20 20 20 4d 4f 56 47 54  20 20 20 67 77 69 5f 6d  |   MOVGT   gwi_m|
00000c60  32 2c 20 23 33 31 0a 20  20 20 20 20 20 20 20 43  |2, #31.        C|
00000c70  4d 50 20 20 20 20 20 67  77 69 5f 67 2c 20 23 30  |MP     gwi_g, #0|
00000c80  0a 20 20 20 20 20 20 20  20 4d 4f 56 4c 54 20 20  |.        MOVLT  |
00000c90  20 67 77 69 5f 6d 32 2c  20 23 30 0a 20 20 20 20  | gwi_m2, #0.    |
00000ca0  20 20 20 20 41 44 44 20  20 20 20 20 67 77 69 5f  |    ADD     gwi_|
00000cb0  6d 31 2c 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |m1, gwi_m1, gwi_|
00000cc0  6d 32 2c 20 41 53 4c 20  23 35 09 3b 61 73 20 61  |m2, ASL #5.;as a|
00000cd0  62 6f 76 65 2c 20 66 6f  72 20 67 20 63 6f 6d 70  |bove, for g comp|
00000ce0  6f 6e 65 6e 74 2c 20 69  6e 74 6f 20 5f 6d 31 20  |onent, into _m1 |
00000cf0  62 69 74 73 20 35 2d 39  0a 20 20 20 20 20 20 20  |bits 5-9.       |
00000d00  20 4d 4f 56 20 20 20 20  20 67 77 69 5f 6d 32 2c  | MOV     gwi_m2,|
00000d10  20 67 77 69 5f 62 2c 20  41 53 52 20 23 33 0a 20  | gwi_b, ASR #3. |
00000d20  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 67  |       CMP     g|
00000d30  77 69 5f 62 2c 20 23 32  35 35 0a 20 20 20 20 20  |wi_b, #255.     |
00000d40  20 20 20 4d 4f 56 47 54  20 20 20 67 77 69 5f 6d  |   MOVGT   gwi_m|
00000d50  32 2c 20 23 33 31 0a 20  20 20 20 20 20 20 20 43  |2, #31.        C|
00000d60  4d 50 20 20 20 20 20 67  77 69 5f 62 2c 20 23 30  |MP     gwi_b, #0|
00000d70  0a 20 20 20 20 20 20 20  20 4d 4f 56 4c 54 20 20  |.        MOVLT  |
00000d80  20 67 77 69 5f 6d 32 2c  20 23 30 0a 20 20 20 20  | gwi_m2, #0.    |
00000d90  20 20 20 20 41 44 44 20  20 20 20 20 67 77 69 5f  |    ADD     gwi_|
00000da0  6d 31 2c 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |m1, gwi_m1, gwi_|
00000db0  6d 32 2c 20 41 53 4c 20  23 31 30 09 3b 61 73 20  |m2, ASL #10.;as |
00000dc0  61 62 6f 76 65 2c 20 66  6f 72 20 62 20 63 6f 6d  |above, for b com|
00000dd0  70 6f 6e 65 6e 74 2c 20  69 6e 74 6f 20 5f 6d 31  |ponent, into _m1|
00000de0  20 62 69 74 73 20 31 30  2d 31 34 0a 09 09 09 09  | bits 10-14.....|
00000df0  09 3b 69 65 20 5f 6d 31  20 69 73 20 6e 6f 77 20  |.;ie _m1 is now |
00000e00  74 68 65 20 64 65 73 69  72 65 64 20 31 35 20 62  |the desired 15 b|
00000e10  69 74 73 20 72 67 62 20  63 6f 6c 6f 75 72 0a 20  |its rgb colour. |
00000e20  20 20 20 20 20 20 20 4c  44 52 42 20 20 20 20 67  |       LDRB    g|
00000e30  77 69 5f 6d 31 2c 20 5b  67 77 69 5f 6c 75 74 2c  |wi_m1, [gwi_lut,|
00000e40  20 67 77 69 5f 6d 31 5d  09 3b 73 65 74 20 5f 6d  | gwi_m1].;set _m|
00000e50  31 20 74 6f 20 6e 75 6d  62 65 72 20 6f 66 20 6e  |1 to number of n|
00000e60  65 61 72 65 73 74 20 61  76 61 69 6c 61 62 6c 65  |earest available|
00000e70  20 63 6f 6c 6f 75 72 20  76 69 61 20 61 20 6c 6f  | colour via a lo|
00000e80  6f 6b 20 75 70 20 74 61  62 6c 65 0a 20 20 20 20  |ok up table.    |
00000e90  20 20 20 20 53 54 52 42  20 20 20 20 67 77 69 5f  |    STRB    gwi_|
00000ea0  6d 31 2c 20 5b 67 77 69  5f 64 70 2c 20 23 30 5d  |m1, [gwi_dp, #0]|
00000eb0  09 09 3b 77 72 69 74 65  20 74 68 69 73 20 74 6f  |..;write this to|
00000ec0  20 64 65 73 74 69 6e 61  74 69 6f 6e 20 69 6d 61  | destination ima|
00000ed0  67 65 0a 20 20 20 20 20  20 20 20 4c 44 52 20 20  |ge.        LDR  |
00000ee0  20 20 20 67 77 69 5f 6d  31 2c 20 5b 67 77 69 5f  |   gwi_m1, [gwi_|
00000ef0  70 61 6c 32 35 36 64 65  66 2c 20 67 77 69 5f 6d  |pal256def, gwi_m|
00000f00  31 2c 20 41 53 4c 20 23  32 5d 09 3b 72 65 61 64  |1, ASL #2].;read|
00000f10  20 74 68 65 20 32 34 20  62 69 74 20 72 67 62 20  | the 24 bit rgb |
00000f20  76 61 6c 75 65 20 6f 66  20 74 68 65 20 63 6f 6c  |value of the col|
00000f30  6f 75 72 20 6a 75 73 74  20 77 72 69 74 74 65 6e  |our just written|
00000f40  0a 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00000f50  20 67 77 69 5f 6d 32 2c  20 67 77 69 5f 6d 31 2c  | gwi_m2, gwi_m1,|
00000f60  20 4c 53 4c 20 23 31 36  09 09 3b 66 72 6f 6d 20  | LSL #16..;from |
00000f70  68 65 72 65 20 2e 20 2e  20 2e 0a 09 53 55 42 09  |here . . ...SUB.|
00000f80  67 77 69 5f 6d 33 2c 20  67 77 69 5f 72 2c 20 67  |gwi_m3, gwi_r, g|
00000f90  77 69 5f 6d 32 2c 20 4c  53 52 20 23 32 34 0a 20  |wi_m2, LSR #24. |
00000fa0  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 67  |       CMP     g|
00000fb0  77 69 5f 6d 33 2c 20 23  31 32 37 0a 20 20 20 20  |wi_m3, #127.    |
00000fc0  20 20 20 20 4d 4f 56 47  54 20 20 20 67 77 69 5f  |    MOVGT   gwi_|
00000fd0  6d 33 2c 20 23 31 32 37  0a 20 20 20 20 20 20 20  |m3, #127.       |
00000fe0  20 43 4d 50 20 20 20 20  20 67 77 69 5f 6d 33 2c  | CMP     gwi_m3,|
00000ff0  20 23 2d 31 32 37 0a 20  20 20 20 20 20 20 20 4d  | #-127.        M|
00001000  4f 56 4c 54 20 20 20 67  77 69 5f 6d 33 2c 20 23  |OVLT   gwi_m3, #|
00001010  2d 31 32 37 0a 20 20 20  20 20 20 20 20 41 4e 44  |-127.        AND|
00001020  20 20 20 20 20 67 77 69  5f 6d 33 2c 20 67 77 69  |     gwi_m3, gwi|
00001030  5f 6d 33 2c 20 23 32 35  35 09 09 3b 74 6f 20 68  |_m3, #255..;to h|
00001040  65 72 65 2c 20 63 61 6c  63 20 28 64 65 73 69 72  |ere, calc (desir|
00001050  65 64 20 72 65 64 29 2d  28 75 73 65 64 20 72 65  |ed red)-(used re|
00001060  64 29 2c 20 26 20 63 6c  69 70 20 74 6f 20 61 20  |d), & clip to a |
00001070  73 69 67 6e 65 64 20 38  20 62 69 74 20 76 61 6c  |signed 8 bit val|
00001080  75 65 0a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |ue.        MOV  |
00001090  20 20 20 67 77 69 5f 6d  32 2c 20 67 77 69 5f 6d  |   gwi_m2, gwi_m|
000010a0  31 2c 20 4c 53 4c 20 23  38 0a 20 20 20 20 20 20  |1, LSL #8.      |
000010b0  20 20 53 55 42 20 20 20  20 20 67 77 69 5f 6d 32  |  SUB     gwi_m2|
000010c0  2c 20 67 77 69 5f 67 2c  20 67 77 69 5f 6d 32 2c  |, gwi_g, gwi_m2,|
000010d0  20 4c 53 52 20 23 32 34  0a 20 20 20 20 20 20 20  | LSR #24.       |
000010e0  20 43 4d 50 20 20 20 20  20 67 77 69 5f 6d 32 2c  | CMP     gwi_m2,|
000010f0  20 23 31 32 37 0a 20 20  20 20 20 20 20 20 4d 4f  | #127.        MO|
00001100  56 47 54 20 20 20 67 77  69 5f 6d 32 2c 20 23 31  |VGT   gwi_m2, #1|
00001110  32 37 0a 20 20 20 20 20  20 20 20 43 4d 50 20 20  |27.        CMP  |
00001120  20 20 20 67 77 69 5f 6d  32 2c 20 23 2d 31 32 37  |   gwi_m2, #-127|
00001130  0a 20 20 20 20 20 20 20  20 4d 4f 56 4c 54 20 20  |.        MOVLT  |
00001140  20 67 77 69 5f 6d 32 2c  20 23 2d 31 32 37 0a 20  | gwi_m2, #-127. |
00001150  20 20 20 20 20 20 20 41  4e 44 20 20 20 20 20 67  |       AND     g|
00001160  77 69 5f 6d 32 2c 20 67  77 69 5f 6d 32 2c 20 23  |wi_m2, gwi_m2, #|
00001170  32 35 35 0a 20 20 20 20  20 20 20 20 41 44 44 20  |255.        ADD |
00001180  20 20 20 20 67 77 69 5f  6d 33 2c 20 67 77 69 5f  |    gwi_m3, gwi_|
00001190  6d 33 2c 20 67 77 69 5f  6d 32 2c 20 4c 53 4c 20  |m3, gwi_m2, LSL |
000011a0  23 38 09 3b 61 73 20 61  62 6f 76 65 2c 20 66 6f  |#8.;as above, fo|
000011b0  72 20 67 72 65 65 6e 2c  20 69 6e 73 65 72 74 69  |r green, inserti|
000011c0  6e 67 20 74 68 65 20 65  72 72 6f 72 20 69 6e 74  |ng the error int|
000011d0  6f 20 63 6f 72 72 65 63  74 20 62 69 74 73 20 69  |o correct bits i|
000011e0  6e 20 5f 6d 33 0a 20 20  20 20 20 20 20 20 53 55  |n _m3.        SU|
000011f0  42 20 20 20 20 20 67 77  69 5f 6d 32 2c 20 67 77  |B     gwi_m2, gw|
00001200  69 5f 62 2c 20 67 77 69  5f 6d 31 2c 20 4c 53 52  |i_b, gwi_m1, LSR|
00001210  20 23 32 34 0a 20 20 20  20 20 20 20 20 43 4d 50  | #24.        CMP|
00001220  20 20 20 20 20 67 77 69  5f 6d 32 2c 20 23 31 32  |     gwi_m2, #12|
00001230  37 0a 20 20 20 20 20 20  20 20 4d 4f 56 47 54 20  |7.        MOVGT |
00001240  20 20 67 77 69 5f 6d 32  2c 20 23 31 32 37 0a 20  |  gwi_m2, #127. |
00001250  20 20 20 20 20 20 20 43  4d 50 20 20 20 20 20 67  |       CMP     g|
00001260  77 69 5f 6d 32 2c 20 23  2d 31 32 37 0a 20 20 20  |wi_m2, #-127.   |
00001270  20 20 20 20 20 4d 4f 56  4c 54 20 20 20 67 77 69  |     MOVLT   gwi|
00001280  5f 6d 32 2c 20 23 2d 31  32 37 0a 20 20 20 20 20  |_m2, #-127.     |
00001290  20 20 20 41 4e 44 20 20  20 20 20 67 77 69 5f 6d  |   AND     gwi_m|
000012a0  32 2c 20 67 77 69 5f 6d  32 2c 20 23 32 35 35 0a  |2, gwi_m2, #255.|
000012b0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
000012c0  67 77 69 5f 6c 64 65 2c  20 67 77 69 5f 6d 33 2c  |gwi_lde, gwi_m3,|
000012d0  20 67 77 69 5f 6d 32 2c  20 4c 53 4c 20 23 31 36  | gwi_m2, LSL #16|
000012e0  09 3b 61 73 20 61 62 6f  76 65 2c 20 66 6f 72 20  |.;as above, for |
000012f0  62 6c 75 65 20 2d 20 5f  6c 64 65 20 6e 6f 77 20  |blue - _lde now |
00001300  68 6f 6c 64 73 20 61 6c  6c 20 74 68 72 65 65 20  |holds all three |
00001310  73 69 67 6e 65 64 0a 09  09 09 09 09 09 09 3b 38  |signed........;8|
00001320  20 62 69 74 20 65 72 72  6f 72 20 74 65 72 6d 73  | bit error terms|
00001330  0a 20 20 20 20 20 20 20  20 4d 45 4e 44 0a 0a 67  |.        MEND..g|
00001340  77 69 5f 61 73 6c 20 44  43 44 20 20 20 20 20 30  |wi_asl DCD     0|
00001350  09 09 09 09 09 3b 73 74  6f 72 61 67 65 20 66 6f  |.....;storage fo|
00001360  72 20 73 6c 2c 20 66 70  20 26 20 73 70 2c 20 64  |r sl, fp & sp, d|
00001370  75 72 69 6e 67 20 69 6e  74 65 72 6e 61 6c 20 63  |uring internal c|
00001380  61 6c 63 73 0a 67 77 69  5f 61 66 70 20 44 43 44  |alcs.gwi_afp DCD|
00001390  20 20 20 20 20 30 0a 67  77 69 5f 61 73 70 20 44  |     0.gwi_asp D|
000013a0  43 44 20 20 20 20 20 30  0a 0a 67 77 69 5f 61 6a  |CD     0..gwi_aj|
000013b0  20 20 20 20 20 20 20 20  20 20 44 43 44 20 20 20  |          DCD   |
000013c0  20 20 30 09 09 09 09 3b  63 75 72 72 65 6e 74 20  |  0....;current |
000013d0  72 6f 77 20 6e 75 6d 62  65 72 0a 0a 20 20 20 20  |row number..    |
000013e0  20 20 20 20 45 58 50 4f  52 54 20 20 67 32 35 36  |    EXPORT  g256|
000013f0  77 6e 70 5f 69 6e 74 65  72 6e 61 6c 0a 0a 67 77  |wnp_internal..gw|
00001400  69 6e 73 74 61 20 44 43  42 20 20 20 20 20 22 67  |insta DCB     "g|
00001410  32 35 36 77 6e 70 5f 69  6e 74 65 72 6e 61 6c 22  |256wnp_internal"|
00001420  2c 20 30 0a 20 20 20 20  20 20 20 20 41 4c 49 47  |, 0.        ALIG|
00001430  4e 0a 67 77 69 6e 65 6e  64 20 44 43 44 20 20 20  |N.gwinend DCD   |
00001440  20 20 26 66 66 30 30 30  30 30 30 20 2b 20 67 77  |  &ff000000 + gw|
00001450  69 6e 65 6e 64 20 2d 20  67 77 69 6e 73 74 61 0a  |inend - gwinsta.|
00001460  0a 67 32 35 36 77 6e 70  5f 69 6e 74 65 72 6e 61  |.g256wnp_interna|
00001470  6c 0a 0a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |l..        MOV  |
00001480  20 20 20 69 70 2c 20 73  70 0a 20 20 20 20 20 20  |   ip, sp.      |
00001490  20 20 53 54 4d 46 44 20  20 20 73 70 21 2c 20 7b  |  STMFD   sp!, {|
000014a0  61 31 2d 61 34 7d 09 09  3b 73 74 61 63 6b 20 66  |a1-a4}..;stack f|
000014b0  6e 20 61 72 67 73 20 78  2c 79 2c 64 70 20 26 20  |n args x,y,dp & |
000014c0  73 70 20 6f 6e 74 6f 20  73 74 61 63 6b 20 62 65  |sp onto stack be|
000014d0  6c 6f 77 20 72 65 6d 61  69 6e 69 6e 67 20 61 72  |low remaining ar|
000014e0  67 73 20 64 65 2c 6c 75  74 20 26 20 70 61 6c 32  |gs de,lut & pal2|
000014f0  35 36 64 65 66 0a 20 20  20 20 20 20 20 20 53 54  |56def.        ST|
00001500  4d 46 44 20 20 20 73 70  21 2c 20 7b 72 34 2d 72  |MFD   sp!, {r4-r|
00001510  39 2c 20 66 70 2c 20 69  70 2c 20 6c 72 2c 20 70  |9, fp, ip, lr, p|
00001520  63 7d 0a 20 20 20 20 20  20 20 20 53 55 42 20 20  |c}.        SUB  |
00001530  20 20 20 66 70 2c 20 69  70 2c 20 23 32 30 20 20  |   fp, ip, #20  |
00001540  20 20 20 20 20 20 20 20  20 20 20 3b 6c 65 61 66  |           ;leaf|
00001550  20 66 6e 20 26 20 6c 69  74 74 6c 65 20 6e 65 65  | fn & little nee|
00001560  64 20 6f 66 20 73 74 61  63 6b 2c 20 73 6f 20 64  |d of stack, so d|
00001570  6f 6e 27 74 20 62 6f 74  68 65 72 20 77 69 74 68  |on't bother with|
00001580  20 73 74 61 63 6b 20 63  68 65 63 6b 69 6e 67 0a  | stack checking.|
00001590  0a 20 20 20 20 20 20 20  20 53 54 52 20 20 20 20  |.        STR    |
000015a0  20 73 6c 2c 20 67 77 69  5f 61 73 6c 0a 20 20 20  | sl, gwi_asl.   |
000015b0  20 20 20 20 20 53 54 52  20 20 20 20 20 66 70 2c  |     STR     fp,|
000015c0  20 67 77 69 5f 61 66 70  0a 20 20 20 20 20 20 20  | gwi_afp.       |
000015d0  20 53 54 52 20 20 20 20  20 73 70 2c 20 67 77 69  | STR     sp, gwi|
000015e0  5f 61 73 70 20 20 20 20  20 20 20 20 20 20 20 20  |_asp            |
000015f0  20 3b 20 73 74 72 69 63  74 6c 79 2c 20 64 6f 6e  | ; strictly, don|
00001600  27 74 20 6e 65 65 64 20  74 6f 20 73 61 76 65 20  |'t need to save |
00001610  74 68 69 73 2c 20 61 73  20 72 65 73 74 6f 72 65  |this, as restore|
00001620  20 66 72 61 6d 65 20 66  72 6f 6d 20 66 70 20 77  | frame from fp w|
00001630  68 69 63 68 0a 20 20 20  20 20 20 20 20 20 20 20  |hich.           |
00001640  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001650  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 63  |             ; c|
00001660  6f 6e 74 61 69 6e 73 20  6f 6c 64 20 73 70 2c 20  |ontains old sp, |
00001670  68 6f 77 65 76 65 72 20  6b 65 65 70 20 69 74 20  |however keep it |
00001680  68 65 72 65 20 69 6e 20  63 61 73 65 20 63 68 61  |here in case cha|
00001690  6e 67 65 20 63 6f 64 65  20 73 74 20 6e 65 65 64  |nge code st need|
000016a0  0a 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
000016b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000016c0  20 20 20 20 20 20 20 20  20 3b 20 74 6f 20 6d 61  |         ; to ma|
000016d0  6b 65 20 61 6e 20 65 78  74 65 72 6e 61 6c 20 41  |ke an external A|
000016e0  50 43 53 20 63 61 6c 6c  0a 20 20 20 20 20 20 20  |PCS call.       |
000016f0  20 3b 73 65 74 20 75 70  20 72 65 67 73 20 6e 6f  | ;set up regs no|
00001700  77 0a 20 20 20 20 20 20  20 20 4c 44 52 20 20 20  |w.        LDR   |
00001710  20 20 67 77 69 5f 78 70  2c 20 64 78 70 09 09 3b  |  gwi_xp, dxp..;|
00001720  6e 6f 74 65 20 64 78 70  20 65 74 63 20 61 72 65  |note dxp etc are|
00001730  20 72 65 67 69 73 74 65  72 20 72 65 6c 61 74 69  | register relati|
00001740  76 65 20 2d 20 73 6f 20  74 68 69 73 20 61 63 74  |ve - so this act|
00001750  75 61 6c 6c 79 20 64 6f  65 73 20 4c 44 52 20 5f  |ually does LDR _|
00001760  78 70 2c 20 5b 66 70 2c  20 23 34 5d 0a 20 20 20  |xp, [fp, #4].   |
00001770  20 20 20 20 20 4c 44 52  20 20 20 20 20 67 77 69  |     LDR     gwi|
00001780  5f 79 70 2c 20 64 79 70  09 09 3b 73 70 72 69 74  |_yp, dyp..;sprit|
00001790  65 20 68 65 69 67 68 74  73 20 69 6e 20 70 69 78  |e heights in pix|
000017a0  65 6c 73 20 28 78 70 20  69 73 20 63 6f 72 72 65  |els (xp is corre|
000017b0  73 70 6f 6e 64 69 6e 67  20 77 69 64 74 68 73 29  |sponding widths)|
000017c0  0a 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |.        LDR    |
000017d0  20 67 77 69 5f 64 70 2c  20 64 64 70 09 09 3b 70  | gwi_dp, ddp..;p|
000017e0  74 72 20 74 6f 20 64 65  73 74 69 6e 61 74 69 6f  |tr to destinatio|
000017f0  6e 20 73 70 72 69 74 65  20 69 6d 61 67 65 20 28  |n sprite image (|
00001800  69 65 20 69 6d 61 67 65  20 64 61 74 61 20 69 74  |ie image data it|
00001810  73 65 6c 66 20 26 20 6e  6f 74 20 74 68 65 20 73  |self & not the s|
00001820  70 72 20 68 64 72 29 0a  20 20 20 20 20 20 20 20  |pr hdr).        |
00001830  4c 44 52 20 20 20 20 20  67 77 69 5f 73 70 2c 20  |LDR     gwi_sp, |
00001840  64 73 70 09 09 3b 70 74  72 20 74 6f 20 73 6f 75  |dsp..;ptr to sou|
00001850  72 63 65 20 73 70 72 69  74 65 20 69 6d 61 67 65  |rce sprite image|
00001860  0a 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |.        LDR    |
00001870  20 67 77 69 5f 64 65 2c  20 64 64 65 09 09 3b 70  | gwi_de, dde..;p|
00001880  74 72 20 74 6f 20 61 20  62 75 66 66 65 72 20 66  |tr to a buffer f|
00001890  6f 72 20 65 72 72 6f 72  20 74 65 72 6d 73 20 28  |or error terms (|
000018a0  6d 75 73 74 20 62 65 20  78 70 20 77 6f 72 64 73  |must be xp words|
000018b0  20 6c 6f 6e 67 29 0a 20  20 20 20 20 20 20 20 4c  | long).        L|
000018c0  44 52 20 20 20 20 20 67  77 69 5f 6c 75 74 2c 20  |DR     gwi_lut, |
000018d0  64 6c 75 74 09 09 3b 70  74 72 20 74 6f 20 6c 75  |dlut..;ptr to lu|
000018e0  74 20 74 6f 20 6d 61 70  20 31 35 62 69 74 20 72  |t to map 15bit r|
000018f0  67 62 20 63 6f 6c 6f 75  72 20 74 6f 20 6e 65 61  |gb colour to nea|
00001900  72 65 73 74 20 61 76 61  69 6c 61 62 6c 65 20 69  |rest available i|
00001910  6e 20 64 65 66 61 75 6c  74 20 38 62 70 70 20 70  |n default 8bpp p|
00001920  61 6c 0a 20 20 20 20 20  20 20 20 4c 44 52 20 20  |al.        LDR  |
00001930  20 20 20 67 77 69 5f 70  61 6c 32 35 36 64 65 66  |   gwi_pal256def|
00001940  2c 20 64 70 61 6c 32 35  36 64 65 66 09 3b 70 74  |, dpal256def.;pt|
00001950  72 20 74 6f 20 64 65 66  61 75 6c 74 20 38 62 70  |r to default 8bp|
00001960  70 20 32 35 36 20 65 6e  74 72 79 20 70 61 6c 65  |p 256 entry pale|
00001970  74 74 65 20 28 75 73 65  64 20 74 6f 20 63 61 6c  |tte (used to cal|
00001980  63 20 65 72 72 6f 72 73  29 0a 0a 20 20 20 20 20  |c errors)..     |
00001990  20 20 20 3b 63 6f 64 65  0a 20 20 20 20 20 20 20  |   ;code.       |
000019a0  20 4d 4f 56 20 20 20 20  20 67 77 69 5f 69 2c 20  | MOV     gwi_i, |
000019b0  67 77 69 5f 78 70 09 09  3b 63 75 72 72 65 6e 74  |gwi_xp..;current|
000019c0  20 63 6f 6c 75 6d 6e 20  6e 75 6d 62 65 72 20 28  | column number (|
000019d0  61 63 74 75 61 6c 6c 79  2c 20 78 70 2d 6e 75 6d  |actually, xp-num|
000019e0  62 65 72 29 0a 20 20 20  20 20 20 20 20 43 4d 50  |ber).        CMP|
000019f0  20 20 20 20 20 67 77 69  5f 69 2c 20 23 30 0a 20  |     gwi_i, #0. |
00001a00  20 20 20 20 20 20 20 42  4c 45 20 20 20 20 20 67  |       BLE     g|
00001a10  77 69 5f 78 6c 6f 6f 70  31 64 6f 6e 65 0a 0a 67  |wi_xloop1done..g|
00001a20  77 69 5f 78 6c 6f 6f 70  31 0a 09 54 53 54 09 67  |wi_xloop1..TST.g|
00001a30  77 69 5f 73 70 2c 20 23  33 0a 09 42 49 43 09 67  |wi_sp, #3..BIC.g|
00001a40  77 69 5f 72 2c 20 67 77  69 5f 73 70 2c 20 23 33  |wi_r, gwi_sp, #3|
00001a50  0a 20 20 20 20 20 20 20  20 4c 44 52 09 67 77 69  |.        LDR.gwi|
00001a60  5f 6d 31 2c 20 5b 67 77  69 5f 72 2c 20 23 30 5d  |_m1, [gwi_r, #0]|
00001a70  0a 09 4d 4f 56 4e 45 09  67 77 69 5f 6d 31 2c 20  |..MOVNE.gwi_m1, |
00001a80  67 77 69 5f 6d 31 2c 20  4c 53 52 20 23 31 36 09  |gwi_m1, LSR #16.|
00001a90  3b 73 65 74 20 5f 6d 31  20 62 30 2d 31 35 20 74  |;set _m1 b0-15 t|
00001aa0  6f 20 74 68 65 20 31 36  62 69 74 20 63 6f 6c 6f  |o the 16bit colo|
00001ab0  75 72 20 66 6f 72 20 63  75 72 72 65 6e 74 20 70  |ur for current p|
00001ac0  69 78 65 6c 20 69 6e 20  73 6f 75 72 63 65 20 69  |ixel in source i|
00001ad0  6d 61 67 65 0a 20 20 20  20 20 20 20 20 41 4e 44  |mage.        AND|
00001ae0  20 20 20 20 20 67 77 69  5f 72 2c 20 67 77 69 5f  |     gwi_r, gwi_|
00001af0  6d 31 2c 20 23 33 31 09  3b 66 72 6f 6d 20 68 65  |m1, #31.;from he|
00001b00  72 65 20 2e 20 2e 20 2e  0a 20 20 20 20 20 20 20  |re . . ..       |
00001b10  20 4d 4f 56 20 20 20 20  20 67 77 69 5f 67 2c 20  | MOV     gwi_g, |
00001b20  67 77 69 5f 6d 31 2c 20  4c 53 52 20 23 35 0a 20  |gwi_m1, LSR #5. |
00001b30  20 20 20 20 20 20 20 41  4e 44 20 20 20 20 20 67  |       AND     g|
00001b40  77 69 5f 67 2c 20 67 77  69 5f 67 2c 20 23 33 31  |wi_g, gwi_g, #31|
00001b50  0a 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00001b60  20 67 77 69 5f 62 2c 20  67 77 69 5f 6d 31 2c 20  | gwi_b, gwi_m1, |
00001b70  4c 53 52 20 23 31 30 0a  20 20 20 20 20 20 20 20  |LSR #10.        |
00001b80  41 4e 44 20 20 20 20 20  67 77 69 5f 62 2c 20 67  |AND     gwi_b, g|
00001b90  77 69 5f 62 2c 20 23 33  31 09 3b 74 6f 20 68 65  |wi_b, #31.;to he|
00001ba0  72 65 2c 20 65 78 74 72  61 63 74 20 74 68 72 65  |re, extract thre|
00001bb0  65 20 72 2c 67 20 26 20  62 20 35 20 62 69 74 20  |e r,g & b 5 bit |
00001bc0  63 6f 6d 70 6f 6e 65 6e  74 73 20 69 6e 74 6f 20  |components into |
00001bd0  5f 72 2c 20 5f 67 20 26  20 5f 62 0a 09 4f 52 52  |_r, _g & _b..ORR|
00001be0  09 67 77 69 5f 72 2c 20  67 77 69 5f 72 2c 20 67  |.gwi_r, gwi_r, g|
00001bf0  77 69 5f 72 2c 20 4c 53  4c 20 23 35 09 3b 66 72  |wi_r, LSL #5.;fr|
00001c00  6f 6d 20 68 65 72 65 20  2e 20 2e 20 2e 0a 09 4d  |om here . . ...M|
00001c10  4f 56 09 67 77 69 5f 72  2c 20 67 77 69 5f 72 2c  |OV.gwi_r, gwi_r,|
00001c20  20 4c 53 52 20 23 32 0a  09 4f 52 52 09 67 77 69  | LSR #2..ORR.gwi|
00001c30  5f 67 2c 20 67 77 69 5f  67 2c 20 67 77 69 5f 67  |_g, gwi_g, gwi_g|
00001c40  2c 20 4c 53 4c 20 23 35  0a 09 4d 4f 56 09 67 77  |, LSL #5..MOV.gw|
00001c50  69 5f 67 2c 20 67 77 69  5f 67 2c 20 4c 53 52 20  |i_g, gwi_g, LSR |
00001c60  23 32 0a 09 4f 52 52 09  67 77 69 5f 62 2c 20 67  |#2..ORR.gwi_b, g|
00001c70  77 69 5f 62 2c 20 67 77  69 5f 62 2c 20 4c 53 4c  |wi_b, gwi_b, LSL|
00001c80  20 23 35 0a 09 4d 4f 56  09 67 77 69 5f 62 2c 20  | #5..MOV.gwi_b, |
00001c90  67 77 69 5f 62 2c 20 4c  53 52 20 23 32 09 09 3b  |gwi_b, LSR #2..;|
00001ca0  74 6f 20 68 65 72 65 2c  20 65 78 74 65 6e 64 20  |to here, extend |
00001cb0  74 6f 20 38 20 62 69 74  2c 20 73 75 63 68 20 74  |to 8 bit, such t|
00001cc0  68 61 74 20 73 70 61 6e  20 66 75 6c 6c 20 72 61  |hat span full ra|
00001cd0  6e 67 65 20 30 2d 32 35  35 0a 20 20 20 20 20 20  |nge 0-255.      |
00001ce0  20 20 43 4d 50 20 20 20  20 20 67 77 69 5f 69 2c  |  CMP     gwi_i,|
00001cf0  20 67 77 69 5f 78 70 0a  20 20 20 20 20 20 20 20  | gwi_xp.        |
00001d00  42 45 51 20 20 20 20 20  67 77 69 5f 78 6c 31 5f  |BEQ     gwi_xl1_|
00001d10  62 31 0a 09 09 09 09 09  3b 69 66 20 6e 6f 74 20  |b1......;if not |
00001d20  6f 6e 20 66 69 72 73 74  20 70 69 78 65 6c 20 69  |on first pixel i|
00001d30  6e 20 72 6f 77 2c 20 74  68 65 72 65 20 69 73 20  |n row, there is |
00001d40  61 6e 20 65 72 72 6f 72  20 74 65 72 6d 20 74 6f  |an error term to|
00001d50  20 61 64 64 20 69 6e 20  66 72 6f 6d 20 6c 65 66  | add in from lef|
00001d60  74 3a 0a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |t:.        MOV  |
00001d70  20 20 20 67 77 69 5f 6d  31 2c 20 67 77 69 5f 6c  |   gwi_m1, gwi_l|
00001d80  64 65 2c 20 4c 53 4c 20  23 32 34 09 3b 65 78 74  |de, LSL #24.;ext|
00001d90  72 61 63 74 20 72 65 64  20 65 72 72 6f 72 20 66  |ract red error f|
00001da0  72 6f 6d 20 5f 6c 64 65  20 26 0a 20 20 20 20 20  |rom _lde &.     |
00001db0  20 20 20 4d 4f 56 20 20  20 20 20 67 77 69 5f 6d  |   MOV     gwi_m|
00001dc0  31 2c 20 67 77 69 5f 6d  31 2c 20 41 53 52 20 23  |1, gwi_m1, ASR #|
00001dd0  32 34 09 09 3b 73 69 67  6e 20 65 78 74 65 6e 64  |24..;sign extend|
00001de0  20 69 74 20 74 6f 20 33  32 20 62 69 74 73 0a 20  | it to 32 bits. |
00001df0  20 20 20 20 20 20 20 52  53 42 53 20 20 20 20 67  |       RSBS    g|
00001e00  77 69 5f 6d 31 2c 20 67  77 69 5f 6d 31 2c 20 67  |wi_m1, gwi_m1, g|
00001e10  77 69 5f 6d 31 2c 20 41  53 4c 20 23 33 09 3b 66  |wi_m1, ASL #3.;f|
00001e20  72 6f 6d 20 68 65 72 65  20 2e 20 2e 20 2e 0a 20  |rom here . . .. |
00001e30  20 20 20 20 20 20 20 41  44 44 4d 49 20 20 20 67  |       ADDMI   g|
00001e40  77 69 5f 6d 31 2c 20 67  77 69 5f 6d 31 2c 20 23  |wi_m1, gwi_m1, #|
00001e50  31 35 09 09 3b 09 28 6e  65 65 64 20 74 6f 20 65  |15..;.(need to e|
00001e60  6e 73 75 72 65 20 2a 37  2f 31 36 20 77 69 6c 6c  |nsure *7/16 will|
00001e70  20 72 6f 75 6e 64 20 74  6f 77 61 72 64 73 20 30  | round towards 0|
00001e80  2c 20 72 61 74 68 65 72  20 74 68 61 6e 20 64 6f  |, rather than do|
00001e90  77 6e 29 0a 20 20 20 20  20 20 20 20 41 44 44 20  |wn).        ADD |
00001ea0  20 20 20 20 67 77 69 5f  72 2c 20 67 77 69 5f 72  |    gwi_r, gwi_r|
00001eb0  2c 20 67 77 69 5f 6d 31  2c 20 41 53 52 20 23 34  |, gwi_m1, ASR #4|
00001ec0  09 3b 74 6f 20 68 65 72  65 2c 20 61 64 64 20 74  |.;to here, add t|
00001ed0  6f 20 5f 72 20 37 2f 31  36 20 6c 64 65 20 72 65  |o _r 7/16 lde re|
00001ee0  64 20 65 72 72 6f 72 20  74 65 72 6d 0a 20 20 20  |d error term.   |
00001ef0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 67 77 69  |     MOV     gwi|
00001f00  5f 6d 31 2c 20 67 77 69  5f 6c 64 65 2c 20 4c 53  |_m1, gwi_lde, LS|
00001f10  4c 20 23 31 36 09 3b 66  72 6f 6d 20 68 65 72 65  |L #16.;from here|
00001f20  20 2e 20 2e 20 2e 0a 20  20 20 20 20 20 20 20 4d  | . . ..        M|
00001f30  4f 56 20 20 20 20 20 67  77 69 5f 6d 31 2c 20 67  |OV     gwi_m1, g|
00001f40  77 69 5f 6d 31 2c 20 41  53 52 20 23 32 34 0a 20  |wi_m1, ASR #24. |
00001f50  20 20 20 20 20 20 20 52  53 42 53 20 20 20 20 67  |       RSBS    g|
00001f60  77 69 5f 6d 31 2c 20 67  77 69 5f 6d 31 2c 20 67  |wi_m1, gwi_m1, g|
00001f70  77 69 5f 6d 31 2c 20 41  53 4c 20 23 33 0a 20 20  |wi_m1, ASL #3.  |
00001f80  20 20 20 20 20 20 41 44  44 4d 49 20 20 20 67 77  |      ADDMI   gw|
00001f90  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 23 31  |i_m1, gwi_m1, #1|
00001fa0  35 0a 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |5.        ADD   |
00001fb0  20 20 67 77 69 5f 67 2c  20 67 77 69 5f 67 2c 20  |  gwi_g, gwi_g, |
00001fc0  67 77 69 5f 6d 31 2c 20  41 53 52 20 23 34 09 3b  |gwi_m1, ASR #4.;|
00001fd0  74 6f 20 68 65 72 65 2c  20 65 78 74 72 61 63 74  |to here, extract|
00001fe0  20 67 72 65 65 6e 20 65  72 72 6f 72 20 26 20 61  | green error & a|
00001ff0  64 64 20 37 2f 31 36 20  6f 66 20 69 74 20 69 6e  |dd 7/16 of it in|
00002000  74 6f 20 5f 67 0a 20 20  20 20 20 20 20 20 4d 4f  |to _g.        MO|
00002010  56 20 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |V     gwi_m1, gw|
00002020  69 5f 6c 64 65 2c 20 4c  53 4c 20 23 38 09 09 3b  |i_lde, LSL #8..;|
00002030  66 72 6f 6d 20 68 65 72  65 20 2e 20 2e 20 2e 0a  |from here . . ..|
00002040  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00002050  67 77 69 5f 6d 31 2c 20  67 77 69 5f 6d 31 2c 20  |gwi_m1, gwi_m1, |
00002060  41 53 52 20 23 32 34 0a  20 20 20 20 20 20 20 20  |ASR #24.        |
00002070  52 53 42 53 20 20 20 20  67 77 69 5f 6d 31 2c 20  |RSBS    gwi_m1, |
00002080  67 77 69 5f 6d 31 2c 20  67 77 69 5f 6d 31 2c 20  |gwi_m1, gwi_m1, |
00002090  41 53 4c 20 23 33 0a 20  20 20 20 20 20 20 20 41  |ASL #3.        A|
000020a0  44 44 4d 49 20 20 20 67  77 69 5f 6d 31 2c 20 67  |DDMI   gwi_m1, g|
000020b0  77 69 5f 6d 31 2c 20 23  31 35 0a 20 20 20 20 20  |wi_m1, #15.     |
000020c0  20 20 20 41 44 44 20 20  20 20 20 67 77 69 5f 62  |   ADD     gwi_b|
000020d0  2c 20 67 77 69 5f 62 2c  20 67 77 69 5f 6d 31 2c  |, gwi_b, gwi_m1,|
000020e0  20 41 53 52 20 23 34 09  3b 74 6f 20 68 65 72 65  | ASR #4.;to here|
000020f0  2c 20 65 78 74 72 61 63  74 20 62 6c 75 65 20 65  |, extract blue e|
00002100  72 72 6f 72 20 66 72 6f  6d 20 6c 64 65 20 26 20  |rror from lde & |
00002110  61 64 64 20 37 2f 31 36  20 69 6e 74 6f 20 5f 62  |add 7/16 into _b|
00002120  0a 20 20 20 20 20 20 20  20 53 54 52 20 20 20 20  |.        STR    |
00002130  20 67 77 69 5f 6c 64 65  2c 20 5b 67 77 69 5f 64  | gwi_lde, [gwi_d|
00002140  65 2c 20 67 77 69 5f 69  2c 20 41 53 4c 20 23 32  |e, gwi_i, ASL #2|
00002150  5d 09 3b 62 75 66 66 65  72 20 6c 64 65 20 66 6f  |].;buffer lde fo|
00002160  72 20 77 68 65 6e 20 70  72 6f 63 65 73 73 69 6e  |r when processin|
00002170  67 20 72 6f 77 20 62 65  6c 6f 77 0a 0a 67 77 69  |g row below..gwi|
00002180  5f 78 6c 31 5f 62 31 0a  0a 20 20 20 20 20 20 20  |_xl1_b1..       |
00002190  20 67 77 69 5f 73 65 67  31 09 09 09 09 3b 77 72  | gwi_seg1....;wr|
000021a0  69 74 65 20 74 6f 20 64  65 73 74 69 6e 61 74 69  |ite to destinati|
000021b0  6f 6e 20 69 6d 61 67 65  20 26 20 63 61 6c 63 75  |on image & calcu|
000021c0  6c 61 74 65 20 65 72 72  6f 72 20 66 6f 72 20 74  |late error for t|
000021d0  68 69 73 20 70 69 78 65  6c 20 28 69 6e 74 6f 20  |his pixel (into |
000021e0  6c 64 65 29 0a 0a 20 20  20 20 20 20 20 20 41 44  |lde)..        AD|
000021f0  44 20 20 20 20 20 67 77  69 5f 64 70 2c 20 67 77  |D     gwi_dp, gw|
00002200  69 5f 64 70 2c 20 23 31  09 09 3b 73 74 65 70 20  |i_dp, #1..;step |
00002210  74 68 72 6f 75 67 68 20  64 65 73 74 69 6e 61 74  |through destinat|
00002220  69 6f 6e 20 69 6d 61 67  65 20 6f 6e 65 20 70 69  |ion image one pi|
00002230  78 65 6c 0a 20 20 20 20  20 20 20 20 41 44 44 20  |xel.        ADD |
00002240  20 20 20 20 67 77 69 5f  73 70 2c 20 67 77 69 5f  |    gwi_sp, gwi_|
00002250  73 70 2c 20 23 32 09 09  3b 73 74 65 70 20 74 68  |sp, #2..;step th|
00002260  72 6f 75 67 68 20 73 6f  75 72 63 65 20 69 6d 61  |rough source ima|
00002270  67 65 20 6f 6e 65 20 70  69 78 65 6c 0a 20 20 20  |ge one pixel.   |
00002280  20 20 20 20 20 53 55 42  53 20 20 20 20 67 77 69  |     SUBS    gwi|
00002290  5f 69 2c 20 67 77 69 5f  69 2c 20 23 31 0a 20 20  |_i, gwi_i, #1.  |
000022a0  20 20 20 20 20 20 42 47  54 20 20 20 20 20 67 77  |      BGT     gw|
000022b0  69 5f 78 6c 6f 6f 70 31  09 09 09 3b 26 20 72 65  |i_xloop1...;& re|
000022c0  70 65 61 74 20 74 69 6c  6c 20 61 6c 6c 20 6f 66  |peat till all of|
000022d0  20 66 69 72 73 74 20 72  6f 77 20 70 72 6f 63 65  | first row proce|
000022e0  73 73 65 64 0a 67 77 69  5f 78 6c 6f 6f 70 31 64  |ssed.gwi_xloop1d|
000022f0  6f 6e 65 0a 09 09 09 09  09 09 3b 6e 6f 77 20 73  |one.......;now s|
00002300  74 65 70 20 64 6f 77 6e  20 74 6f 20 6e 65 78 74  |tep down to next|
00002310  20 72 6f 77 20 28 72 65  6d 65 6d 62 65 72 2c 20  | row (remember, |
00002320  73 65 72 70 65 6e 74 69  6e 65 20 73 63 61 6e 6e  |serpentine scann|
00002330  69 6e 67 29 0a 20 20 20  20 20 20 20 20 52 53 42  |ing).        RSB|
00002340  20 20 20 20 20 67 77 69  5f 6d 32 2c 20 67 77 69  |     gwi_m2, gwi|
00002350  5f 78 70 2c 20 23 34 0a  20 20 20 20 20 20 20 20  |_xp, #4.        |
00002360  41 4e 44 20 20 20 20 20  67 77 69 5f 6d 31 2c 20  |AND     gwi_m1, |
00002370  67 77 69 5f 6d 32 2c 20  23 33 09 09 3b 20 2e 20  |gwi_m2, #3..; . |
00002380  2e 20 2e 20 74 6f 20 67  65 74 20 70 61 73 74 20  |. . to get past |
00002390  72 69 67 68 74 68 61 6e  64 20 77 61 73 74 61 67  |righthand wastag|
000023a0  65 20 6f 66 20 6c 61 73  74 20 72 6f 77 2c 20 64  |e of last row, d|
000023b0  65 73 74 20 69 6d 61 67  65 0a 20 20 20 20 20 20  |est image.      |
000023c0  20 20 41 44 44 20 20 20  20 20 67 77 69 5f 6d 31  |  ADD     gwi_m1|
000023d0  2c 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 78 70  |, gwi_m1, gwi_xp|
000023e0  09 09 3b 20 2e 20 2e 20  2e 20 74 6f 20 67 65 74  |..; . . . to get|
000023f0  20 70 61 73 74 20 65 6e  64 20 6f 66 20 6e 65 78  | past end of nex|
00002400  74 20 72 6f 77 0a 20 20  20 20 20 20 20 20 53 55  |t row.        SU|
00002410  42 20 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |B     gwi_m1, gw|
00002420  69 5f 6d 31 2c 20 23 31  09 09 3b 20 2e 20 2e 20  |i_m1, #1..; . . |
00002430  2e 20 74 6f 20 67 65 74  20 62 61 63 6b 20 74 6f  |. to get back to|
00002440  20 6c 61 73 74 20 70 69  78 65 6c 20 6f 6e 20 74  | last pixel on t|
00002450  68 61 74 20 72 6f 77 0a  20 20 20 20 20 20 20 20  |hat row.        |
00002460  41 44 44 20 20 20 20 20  67 77 69 5f 64 70 2c 20  |ADD     gwi_dp, |
00002470  67 77 69 5f 64 70 2c 20  67 77 69 5f 6d 31 09 09  |gwi_dp, gwi_m1..|
00002480  3b 6d 61 6b 65 20 74 68  65 20 61 64 6a 75 73 74  |;make the adjust|
00002490  6d 65 6e 74 20 74 6f 20  5f 64 70 0a 20 20 09 53  |ment to _dp.  .S|
000024a0  55 42 09 67 77 69 5f 6d  31 2c 20 67 77 69 5f 6d  |UB.gwi_m1, gwi_m|
000024b0  32 2c 20 67 77 69 5f 78  70 09 09 3b 66 72 6f 6d  |2, gwi_xp..;from|
000024c0  20 68 65 72 65 20 2e 20  2e 20 2e 0a 20 20 20 20  | here . . ..    |
000024d0  20 20 20 20 41 4e 44 20  20 20 20 20 67 77 69 5f  |    AND     gwi_|
000024e0  6d 31 2c 20 67 77 69 5f  6d 31 2c 20 23 33 0a 20  |m1, gwi_m1, #3. |
000024f0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 67  |       ADD     g|
00002500  77 69 5f 6d 31 2c 20 67  77 69 5f 6d 31 2c 20 67  |wi_m1, gwi_m1, g|
00002510  77 69 5f 78 70 2c 20 4c  53 4c 20 23 31 0a 20 20  |wi_xp, LSL #1.  |
00002520  20 20 20 20 20 20 53 55  42 20 20 20 20 20 67 77  |      SUB     gw|
00002530  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 23 32  |i_m1, gwi_m1, #2|
00002540  0a 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |.        ADD    |
00002550  20 67 77 69 5f 73 70 2c  20 67 77 69 5f 73 70 2c  | gwi_sp, gwi_sp,|
00002560  20 67 77 69 5f 6d 31 09  09 3b 74 6f 20 68 65 72  | gwi_m1..;to her|
00002570  65 2c 20 61 73 20 61 62  6f 76 65 20 66 6f 72 20  |e, as above for |
00002580  73 72 63 20 69 6d 61 67  65 20 28 6e 6f 74 65 2c  |src image (note,|
00002590  20 69 74 20 68 61 73 20  32 2a 78 70 20 62 79 74  | it has 2*xp byt|
000025a0  65 73 20 70 65 72 0a 09  09 09 09 09 09 3b 20 72  |es per.......; r|
000025b0  6f 77 2c 20 70 6c 75 73  20 72 69 67 68 74 68 61  |ow, plus rightha|
000025c0  6e 64 20 77 61 73 74 61  67 65 29 0a 20 20 20 20  |nd wastage).    |
000025d0  20 20 20 20 53 55 42 53  20 20 20 20 67 77 69 5f  |    SUBS    gwi_|
000025e0  6d 31 2c 20 67 77 69 5f  79 70 2c 20 23 32 0a 20  |m1, gwi_yp, #2. |
000025f0  20 20 20 20 20 20 20 42  4d 49 20 20 20 20 20 67  |       BMI     g|
00002600  77 69 5f 79 6c 6f 6f 70  64 6f 6e 65 09 09 09 3b  |wi_yloopdone...;|
00002610  63 61 72 72 79 20 6f 6e  20 77 69 74 68 20 6e 65  |carry on with ne|
00002620  78 74 20 72 6f 77 2c 20  75 6e 6c 65 73 73 20 61  |xt row, unless a|
00002630  6c 6c 20 72 6f 77 73 20  64 6f 6e 65 20 28 6e 6f  |ll rows done (no|
00002640  74 65 2c 20 73 75 62 74  72 61 63 74 0a 20 20 20  |te, subtract.   |
00002650  20 20 20 20 20 53 54 52  20 20 20 20 20 67 77 69  |     STR     gwi|
00002660  5f 6d 31 2c 20 67 77 69  5f 61 6a 09 09 09 3b 20  |_m1, gwi_aj...; |
00002670  32 20 66 72 6f 6d 20 79  70 20 69 6e 69 74 69 61  |2 from yp initia|
00002680  6c 6c 79 20 73 69 6e 63  65 20 79 70 20 69 73 20  |lly since yp is |
00002690  23 20 72 6f 77 73 20 63  6f 75 6e 74 69 6e 67 20  |# rows counting |
000026a0  66 72 6f 6d 20 31 2c 20  26 0a 09 09 09 09 09 09  |from 1, &.......|
000026b0  3b 20 62 72 61 6e 63 68  20 63 6f 6e 64 20 69 73  |; branch cond is|
000026c0  20 4d 49 2c 20 69 65 20  6c 6f 6f 70 20 63 6f 75  | MI, ie loop cou|
000026d0  6e 74 73 20 72 6f 77 73  20 69 6e 63 6c 75 64 69  |nts rows includi|
000026e0  6e 67 20 30 29 0a 09 09  09 09 09 3b 6e 6f 74 65  |ng 0)......;note|
000026f0  2c 20 64 65 20 62 75 66  66 65 72 20 68 6f 6c 64  |, de buffer hold|
00002700  73 20 65 72 72 6f 72 73  20 66 6f 72 20 72 6f 77  |s errors for row|
00002710  20 61 62 6f 76 65 2c 20  72 75 6e 6e 69 6e 67 20  | above, running |
00002720  66 72 6f 6d 20 72 69 67  68 74 20 69 6e 20 6c 6f  |from right in lo|
00002730  77 0a 09 09 09 09 09 3b  6d 65 6d 6f 72 79 20 74  |w......;memory t|
00002740  6f 20 6c 65 66 74 20 73  69 64 65 20 69 6e 20 68  |o left side in h|
00002750  69 67 68 20 6d 65 6d 2e  20 4e 65 78 74 20 72 6f  |igh mem. Next ro|
00002760  77 20 77 69 6c 6c 20 62  65 20 73 63 61 6e 6e 65  |w will be scanne|
00002770  64 20 72 69 67 68 74 20  74 6f 0a 67 77 69 5f 79  |d right to.gwi_y|
00002780  6c 6f 6f 70 09 09 09 09  3b 6c 65 66 74 2c 20 73  |loop....;left, s|
00002790  6f 20 6e 65 65 64 20 65  78 74 72 61 63 74 20 65  |o need extract e|
000027a0  72 72 6f 72 73 20 66 72  6f 6d 20 62 75 66 66 65  |rrors from buffe|
000027b0  72 20 69 6e 20 69 6e 63  72 65 61 73 69 6e 67 20  |r in increasing |
000027c0  6d 65 6d 6f 72 79 20 6f  72 64 65 72 2e 0a 0a 20  |memory order... |
000027d0  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 67  |       STR     g|
000027e0  77 69 5f 6c 64 65 2c 20  5b 67 77 69 5f 64 65 2c  |wi_lde, [gwi_de,|
000027f0  20 23 30 5d 09 3b 62 75  66 66 65 72 20 65 72 72  | #0].;buffer err|
00002800  6f 72 20 66 6f 72 20 66  69 6e 61 6c 20 70 69 78  |or for final pix|
00002810  65 6c 20 66 72 6f 6d 20  6c 61 73 74 20 72 6f 77  |el from last row|
00002820  0a 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00002830  20 67 77 69 5f 69 2c 20  23 31 0a 20 20 20 20 20  | gwi_i, #1.     |
00002840  20 20 20 43 4d 50 20 20  20 20 20 67 77 69 5f 69  |   CMP     gwi_i|
00002850  2c 20 67 77 69 5f 78 70  0a 20 20 20 20 20 20 20  |, gwi_xp.       |
00002860  20 42 47 54 20 20 20 20  20 67 77 69 5f 78 6c 6f  | BGT     gwi_xlo|
00002870  6f 70 32 64 6f 6e 65 0a  09 09 09 09 09 3b 61 6c  |op2done......;al|
00002880  6c 20 72 65 6d 61 69 6e  69 6e 67 20 63 6f 64 65  |l remaining code|
00002890  20 69 73 20 73 69 6d 69  6c 61 72 20 74 6f 20 70  | is similar to p|
000028a0  72 65 63 65 65 64 69 6e  67 2c 20 65 78 63 65 70  |receeding, excep|
000028b0  74 20 68 61 76 65 20 74  6f 20 61 64 64 20 69 6e  |t have to add in|
000028c0  0a 67 77 69 5f 78 6c 6f  6f 70 32 09 09 09 09 3b  |.gwi_xloop2....;|
000028d0  65 72 72 6f 72 73 20 66  72 6f 6d 20 72 6f 77 20  |errors from row |
000028e0  61 62 6f 76 65 2c 20 26  20 73 63 61 6e 20 72 6f  |above, & scan ro|
000028f0  77 20 69 6e 20 72 65 76  65 72 73 65 20 64 69 72  |w in reverse dir|
00002900  65 63 74 69 6f 6e 0a 09  54 53 54 09 67 77 69 5f  |ection..TST.gwi_|
00002910  73 70 2c 20 23 33 09 09  3b 66 72 6f 6d 20 68 65  |sp, #3..;from he|
00002920  72 65 20 2e 20 2e 20 2e  0a 09 42 49 43 09 67 77  |re . . ...BIC.gw|
00002930  69 5f 72 2c 20 67 77 69  5f 73 70 2c 20 23 33 0a  |i_r, gwi_sp, #3.|
00002940  20 20 20 20 20 20 20 20  4c 44 52 09 67 77 69 5f  |        LDR.gwi_|
00002950  6d 31 2c 20 5b 67 77 69  5f 72 2c 20 23 30 5d 0a  |m1, [gwi_r, #0].|
00002960  09 4d 4f 56 4e 45 09 67  77 69 5f 6d 31 2c 20 67  |.MOVNE.gwi_m1, g|
00002970  77 69 5f 6d 31 2c 20 4c  53 52 20 23 31 36 0a 20  |wi_m1, LSR #16. |
00002980  20 20 20 20 20 20 20 41  4e 44 20 20 20 20 20 67  |       AND     g|
00002990  77 69 5f 72 2c 20 67 77  69 5f 6d 31 2c 20 23 33  |wi_r, gwi_m1, #3|
000029a0  31 0a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |1.        MOV   |
000029b0  20 20 67 77 69 5f 67 2c  20 67 77 69 5f 6d 31 2c  |  gwi_g, gwi_m1,|
000029c0  20 4c 53 52 20 23 35 0a  20 20 20 20 20 20 20 20  | LSR #5.        |
000029d0  41 4e 44 20 20 20 20 20  67 77 69 5f 67 2c 20 67  |AND     gwi_g, g|
000029e0  77 69 5f 67 2c 20 23 33  31 0a 20 20 20 20 20 20  |wi_g, #31.      |
000029f0  20 20 4d 4f 56 20 20 20  20 20 67 77 69 5f 62 2c  |  MOV     gwi_b,|
00002a00  20 67 77 69 5f 6d 31 2c  20 4c 53 52 20 23 31 30  | gwi_m1, LSR #10|
00002a10  0a 20 20 20 20 20 20 20  20 41 4e 44 20 20 20 20  |.        AND    |
00002a20  20 67 77 69 5f 62 2c 20  67 77 69 5f 62 2c 20 23  | gwi_b, gwi_b, #|
00002a30  33 31 0a 09 4f 52 52 09  67 77 69 5f 72 2c 20 67  |31..ORR.gwi_r, g|
00002a40  77 69 5f 72 2c 20 67 77  69 5f 72 2c 20 4c 53 4c  |wi_r, gwi_r, LSL|
00002a50  20 23 35 0a 09 4d 4f 56  09 67 77 69 5f 72 2c 20  | #5..MOV.gwi_r, |
00002a60  67 77 69 5f 72 2c 20 4c  53 52 20 23 32 0a 09 4f  |gwi_r, LSR #2..O|
00002a70  52 52 09 67 77 69 5f 67  2c 20 67 77 69 5f 67 2c  |RR.gwi_g, gwi_g,|
00002a80  20 67 77 69 5f 67 2c 20  4c 53 4c 20 23 35 0a 09  | gwi_g, LSL #5..|
00002a90  4d 4f 56 09 67 77 69 5f  67 2c 20 67 77 69 5f 67  |MOV.gwi_g, gwi_g|
00002aa0  2c 20 4c 53 52 20 23 32  0a 09 4f 52 52 09 67 77  |, LSR #2..ORR.gw|
00002ab0  69 5f 62 2c 20 67 77 69  5f 62 2c 20 67 77 69 5f  |i_b, gwi_b, gwi_|
00002ac0  62 2c 20 4c 53 4c 20 23  35 0a 09 4d 4f 56 09 67  |b, LSL #5..MOV.g|
00002ad0  77 69 5f 62 2c 20 67 77  69 5f 62 2c 20 4c 53 52  |wi_b, gwi_b, LSR|
00002ae0  20 23 32 09 3b 74 6f 20  68 65 72 65 2c 20 72 65  | #2.;to here, re|
00002af0  61 64 20 73 6f 75 72 63  65 20 70 69 78 65 6c 20  |ad source pixel |
00002b00  72 67 62 20 63 6f 6c 6f  75 72 20 69 6e 74 6f 20  |rgb colour into |
00002b10  5f 72 2c 5f 67 20 26 20  5f 62 2c 20 74 68 72 65  |_r,_g & _b, thre|
00002b20  65 20 38 20 62 69 74 20  63 6f 6d 70 6f 6e 65 6e  |e 8 bit componen|
00002b30  74 73 0a 0a 20 20 20 20  20 20 20 20 53 55 42 20  |ts..        SUB |
00002b40  20 20 20 20 67 77 69 5f  6d 34 2c 20 67 77 69 5f  |    gwi_m4, gwi_|
00002b50  69 2c 20 23 31 09 3b 66  72 6f 6d 20 68 65 72 65  |i, #1.;from here|
00002b60  20 2e 20 2e 20 2e 0a 20  20 20 20 20 20 20 20 4c  | . . ..        L|
00002b70  44 52 20 20 20 20 20 67  77 69 5f 6d 34 2c 20 5b  |DR     gwi_m4, [|
00002b80  67 77 69 5f 64 65 2c 20  67 77 69 5f 6d 34 2c 20  |gwi_de, gwi_m4, |
00002b90  41 53 4c 20 23 32 5d 0a  20 20 20 20 20 20 20 20  |ASL #2].        |
00002ba0  4d 4f 56 20 20 20 20 20  67 77 69 5f 6d 31 2c 20  |MOV     gwi_m1, |
00002bb0  67 77 69 5f 6d 34 2c 20  4c 53 4c 20 23 32 34 0a  |gwi_m4, LSL #24.|
00002bc0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00002bd0  67 77 69 5f 6d 31 2c 20  67 77 69 5f 6d 31 2c 20  |gwi_m1, gwi_m1, |
00002be0  41 53 52 20 23 32 34 0a  20 20 20 20 20 20 20 20  |ASR #24.        |
00002bf0  41 44 44 53 20 20 20 20  67 77 69 5f 6d 31 2c 20  |ADDS    gwi_m1, |
00002c00  67 77 69 5f 6d 31 2c 20  67 77 69 5f 6d 31 2c 20  |gwi_m1, gwi_m1, |
00002c10  41 53 4c 20 23 32 0a 20  20 20 20 20 20 20 20 41  |ASL #2.        A|
00002c20  44 44 4d 49 20 20 20 67  77 69 5f 6d 31 2c 20 67  |DDMI   gwi_m1, g|
00002c30  77 69 5f 6d 31 2c 20 23  31 35 0a 20 20 20 20 20  |wi_m1, #15.     |
00002c40  20 20 20 41 44 44 20 20  20 20 20 67 77 69 5f 72  |   ADD     gwi_r|
00002c50  2c 20 67 77 69 5f 72 2c  20 67 77 69 5f 6d 31 2c  |, gwi_r, gwi_m1,|
00002c60  20 41 53 52 20 23 34 0a  20 20 20 20 20 20 20 20  | ASR #4.        |
00002c70  4d 4f 56 20 20 20 20 20  67 77 69 5f 6d 31 2c 20  |MOV     gwi_m1, |
00002c80  67 77 69 5f 6d 34 2c 20  4c 53 4c 20 23 31 36 0a  |gwi_m4, LSL #16.|
00002c90  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00002ca0  67 77 69 5f 6d 31 2c 20  67 77 69 5f 6d 31 2c 20  |gwi_m1, gwi_m1, |
00002cb0  41 53 52 20 23 32 34 0a  20 20 20 20 20 20 20 20  |ASR #24.        |
00002cc0  41 44 44 53 20 20 20 20  67 77 69 5f 6d 31 2c 20  |ADDS    gwi_m1, |
00002cd0  67 77 69 5f 6d 31 2c 20  67 77 69 5f 6d 31 2c 20  |gwi_m1, gwi_m1, |
00002ce0  41 53 4c 20 23 32 0a 20  20 20 20 20 20 20 20 41  |ASL #2.        A|
00002cf0  44 44 4d 49 20 20 20 67  77 69 5f 6d 31 2c 20 67  |DDMI   gwi_m1, g|
00002d00  77 69 5f 6d 31 2c 20 23  31 35 0a 20 20 20 20 20  |wi_m1, #15.     |
00002d10  20 20 20 41 44 44 20 20  20 20 20 67 77 69 5f 67  |   ADD     gwi_g|
00002d20  2c 20 67 77 69 5f 67 2c  20 67 77 69 5f 6d 31 2c  |, gwi_g, gwi_m1,|
00002d30  20 41 53 52 20 23 34 0a  20 20 20 20 20 20 20 20  | ASR #4.        |
00002d40  4d 4f 56 20 20 20 20 20  67 77 69 5f 6d 31 2c 20  |MOV     gwi_m1, |
00002d50  67 77 69 5f 6d 34 2c 20  4c 53 4c 20 23 38 0a 20  |gwi_m4, LSL #8. |
00002d60  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 67  |       MOV     g|
00002d70  77 69 5f 6d 31 2c 20 67  77 69 5f 6d 31 2c 20 41  |wi_m1, gwi_m1, A|
00002d80  53 52 20 23 32 34 0a 20  20 20 20 20 20 20 20 41  |SR #24.        A|
00002d90  44 44 53 20 20 20 20 67  77 69 5f 6d 31 2c 20 67  |DDS    gwi_m1, g|
00002da0  77 69 5f 6d 31 2c 20 67  77 69 5f 6d 31 2c 20 41  |wi_m1, gwi_m1, A|
00002db0  53 4c 20 23 32 0a 20 20  20 20 20 20 20 20 41 44  |SL #2.        AD|
00002dc0  44 4d 49 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |DMI   gwi_m1, gw|
00002dd0  69 5f 6d 31 2c 20 23 31  35 0a 20 20 20 20 20 20  |i_m1, #15.      |
00002de0  20 20 41 44 44 20 20 20  20 20 67 77 69 5f 62 2c  |  ADD     gwi_b,|
00002df0  20 67 77 69 5f 62 2c 20  67 77 69 5f 6d 31 2c 20  | gwi_b, gwi_m1, |
00002e00  41 53 52 20 23 34 09 3b  74 6f 20 68 65 72 65 2c  |ASR #4.;to here,|
00002e10  20 61 64 64 20 69 6e 20  35 2f 31 36 20 65 72 72  | add in 5/16 err|
00002e20  6f 72 20 66 6f 72 20 70  69 78 65 6c 20 61 62 6f  |or for pixel abo|
00002e30  76 65 0a 0a 20 20 20 20  20 20 20 20 43 4d 50 20  |ve..        CMP |
00002e40  20 20 20 20 67 77 69 5f  69 2c 20 23 31 0a 20 20  |    gwi_i, #1.  |
00002e50  20 20 20 20 20 20 42 45  51 20 20 20 20 20 67 77  |      BEQ     gw|
00002e60  69 5f 78 6c 32 5f 62 31  0a 0a 20 20 20 20 20 20  |i_xl2_b1..      |
00002e70  20 20 53 55 42 20 20 20  20 20 67 77 69 5f 6d 32  |  SUB     gwi_m2|
00002e80  2c 20 67 77 69 5f 69 2c  20 23 32 09 09 3b 73 69  |, gwi_i, #2..;si|
00002e90  6d 69 6c 69 61 72 6c 79  20 28 69 66 20 6e 6f 74  |miliarly (if not|
00002ea0  20 6f 6e 20 72 69 67 68  74 6d 6f 73 74 20 63 6f  | on rightmost co|
00002eb0  6c 75 6d 6e 29 20 2e 20  2e 20 2e 0a 20 20 20 20  |lumn) . . ..    |
00002ec0  20 20 20 20 4c 44 52 20  20 20 20 20 67 77 69 5f  |    LDR     gwi_|
00002ed0  6d 34 2c 20 5b 67 77 69  5f 64 65 2c 20 67 77 69  |m4, [gwi_de, gwi|
00002ee0  5f 6d 32 2c 20 41 53 4c  20 23 32 5d 0a 20 20 20  |_m2, ASL #2].   |
00002ef0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 67 77 69  |     MOV     gwi|
00002f00  5f 6d 31 2c 20 67 77 69  5f 6d 34 2c 20 4c 53 4c  |_m1, gwi_m4, LSL|
00002f10  20 23 32 34 0a 20 20 20  20 20 20 20 20 4d 4f 56  | #24.        MOV|
00002f20  53 20 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |S    gwi_m1, gwi|
00002f30  5f 6d 31 2c 20 41 53 52  20 23 32 34 0a 20 20 20  |_m1, ASR #24.   |
00002f40  20 20 20 20 20 41 44 44  4d 49 20 20 20 67 77 69  |     ADDMI   gwi|
00002f50  5f 6d 31 2c 20 67 77 69  5f 6d 31 2c 20 23 31 35  |_m1, gwi_m1, #15|
00002f60  0a 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |.        ADD    |
00002f70  20 67 77 69 5f 72 2c 20  67 77 69 5f 72 2c 20 67  | gwi_r, gwi_r, g|
00002f80  77 69 5f 6d 31 2c 20 41  53 52 20 23 34 0a 20 20  |wi_m1, ASR #4.  |
00002f90  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 67 77  |      MOV     gw|
00002fa0  69 5f 6d 31 2c 20 67 77  69 5f 6d 34 2c 20 4c 53  |i_m1, gwi_m4, LS|
00002fb0  4c 20 23 31 36 0a 20 20  20 20 20 20 20 20 4d 4f  |L #16.        MO|
00002fc0  56 53 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |VS    gwi_m1, gw|
00002fd0  69 5f 6d 31 2c 20 41 53  52 20 23 32 34 0a 20 20  |i_m1, ASR #24.  |
00002fe0  20 20 20 20 20 20 41 44  44 4d 49 20 20 20 67 77  |      ADDMI   gw|
00002ff0  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 23 31  |i_m1, gwi_m1, #1|
00003000  35 0a 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |5.        ADD   |
00003010  20 20 67 77 69 5f 67 2c  20 67 77 69 5f 67 2c 20  |  gwi_g, gwi_g, |
00003020  67 77 69 5f 6d 31 2c 20  41 53 52 20 23 34 0a 20  |gwi_m1, ASR #4. |
00003030  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 67  |       MOV     g|
00003040  77 69 5f 6d 31 2c 20 67  77 69 5f 6d 34 2c 20 4c  |wi_m1, gwi_m4, L|
00003050  53 4c 20 23 38 0a 20 20  20 20 20 20 20 20 4d 4f  |SL #8.        MO|
00003060  56 53 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |VS    gwi_m1, gw|
00003070  69 5f 6d 31 2c 20 41 53  52 20 23 32 34 0a 20 20  |i_m1, ASR #24.  |
00003080  20 20 20 20 20 20 41 44  44 4d 49 20 20 20 67 77  |      ADDMI   gw|
00003090  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 23 31  |i_m1, gwi_m1, #1|
000030a0  35 0a 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |5.        ADD   |
000030b0  20 20 67 77 69 5f 62 2c  20 67 77 69 5f 62 2c 20  |  gwi_b, gwi_b, |
000030c0  67 77 69 5f 6d 31 2c 20  41 53 52 20 23 34 09 3b  |gwi_m1, ASR #4.;|
000030d0  61 64 64 20 69 6e 20 31  2f 31 36 20 65 72 72 6f  |add in 1/16 erro|
000030e0  72 20 66 6f 72 20 70 69  78 65 6c 20 74 6f 20 61  |r for pixel to a|
000030f0  62 6f 76 65 20 72 69 67  68 74 0a 0a 20 20 20 20  |bove right..    |
00003100  20 20 20 20 53 54 52 20  20 20 20 20 67 77 69 5f  |    STR     gwi_|
00003110  6c 64 65 2c 20 5b 67 77  69 5f 64 65 2c 20 67 77  |lde, [gwi_de, gw|
00003120  69 5f 6d 32 2c 20 41 53  4c 20 23 32 5d 09 3b 63  |i_m2, ASL #2].;c|
00003130  61 6e 20 6e 6f 77 20 73  61 66 65 6c 79 20 6f 76  |an now safely ov|
00003140  65 72 77 72 69 74 65 20  76 61 6c 75 65 20 69 6e  |erwrite value in|
00003150  20 62 75 66 66 65 72 20  77 69 74 68 20 6c 64 65  | buffer with lde|
00003160  20 66 6f 72 20 6e 65 78  74 20 72 6f 77 0a 0a 20  | for next row.. |
00003170  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 67  |       MOV     g|
00003180  77 69 5f 6d 31 2c 20 67  77 69 5f 6c 64 65 2c 20  |wi_m1, gwi_lde, |
00003190  4c 53 4c 20 23 32 34 0a  20 20 20 20 20 20 20 20  |LSL #24.        |
000031a0  4d 4f 56 20 20 20 20 20  67 77 69 5f 6d 31 2c 20  |MOV     gwi_m1, |
000031b0  67 77 69 5f 6d 31 2c 20  41 53 52 20 23 32 34 0a  |gwi_m1, ASR #24.|
000031c0  20 20 20 20 20 20 20 20  52 53 42 53 20 20 20 20  |        RSBS    |
000031d0  67 77 69 5f 6d 31 2c 20  67 77 69 5f 6d 31 2c 20  |gwi_m1, gwi_m1, |
000031e0  67 77 69 5f 6d 31 2c 20  41 53 4c 20 23 33 0a 20  |gwi_m1, ASL #3. |
000031f0  20 20 20 20 20 20 20 41  44 44 4d 49 20 20 20 67  |       ADDMI   g|
00003200  77 69 5f 6d 31 2c 20 67  77 69 5f 6d 31 2c 20 23  |wi_m1, gwi_m1, #|
00003210  31 35 0a 20 20 20 20 20  20 20 20 41 44 44 20 20  |15.        ADD  |
00003220  20 20 20 67 77 69 5f 72  2c 20 67 77 69 5f 72 2c  |   gwi_r, gwi_r,|
00003230  20 67 77 69 5f 6d 31 2c  20 41 53 52 20 23 34 0a  | gwi_m1, ASR #4.|
00003240  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00003250  67 77 69 5f 6d 31 2c 20  67 77 69 5f 6c 64 65 2c  |gwi_m1, gwi_lde,|
00003260  20 4c 53 4c 20 23 31 36  0a 20 20 20 20 20 20 20  | LSL #16.       |
00003270  20 4d 4f 56 20 20 20 20  20 67 77 69 5f 6d 31 2c  | MOV     gwi_m1,|
00003280  20 67 77 69 5f 6d 31 2c  20 41 53 52 20 23 32 34  | gwi_m1, ASR #24|
00003290  0a 20 20 20 20 20 20 20  20 52 53 42 53 20 20 20  |.        RSBS   |
000032a0  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 31 2c  | gwi_m1, gwi_m1,|
000032b0  20 67 77 69 5f 6d 31 2c  20 41 53 4c 20 23 33 0a  | gwi_m1, ASL #3.|
000032c0  20 20 20 20 20 20 20 20  41 44 44 4d 49 20 20 20  |        ADDMI   |
000032d0  67 77 69 5f 6d 31 2c 20  67 77 69 5f 6d 31 2c 20  |gwi_m1, gwi_m1, |
000032e0  23 31 35 0a 20 20 20 20  20 20 20 20 41 44 44 20  |#15.        ADD |
000032f0  20 20 20 20 67 77 69 5f  67 2c 20 67 77 69 5f 67  |    gwi_g, gwi_g|
00003300  2c 20 67 77 69 5f 6d 31  2c 20 41 53 52 20 23 34  |, gwi_m1, ASR #4|
00003310  0a 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00003320  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6c 64 65  | gwi_m1, gwi_lde|
00003330  2c 20 4c 53 4c 20 23 38  0a 20 20 20 20 20 20 20  |, LSL #8.       |
00003340  20 4d 4f 56 20 20 20 20  20 67 77 69 5f 6d 31 2c  | MOV     gwi_m1,|
00003350  20 67 77 69 5f 6d 31 2c  20 41 53 52 20 23 32 34  | gwi_m1, ASR #24|
00003360  0a 20 20 20 20 20 20 20  20 52 53 42 53 20 20 20  |.        RSBS   |
00003370  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 31 2c  | gwi_m1, gwi_m1,|
00003380  20 67 77 69 5f 6d 31 2c  20 41 53 4c 20 23 33 0a  | gwi_m1, ASL #3.|
00003390  20 20 20 20 20 20 20 20  41 44 44 4d 49 20 20 20  |        ADDMI   |
000033a0  67 77 69 5f 6d 31 2c 20  67 77 69 5f 6d 31 2c 20  |gwi_m1, gwi_m1, |
000033b0  23 31 35 0a 20 20 20 20  20 20 20 20 41 44 44 20  |#15.        ADD |
000033c0  20 20 20 20 67 77 69 5f  62 2c 20 67 77 69 5f 62  |    gwi_b, gwi_b|
000033d0  2c 20 67 77 69 5f 6d 31  2c 20 41 53 52 20 23 34  |, gwi_m1, ASR #4|
000033e0  09 3b 6e 6f 77 20 61 64  64 20 69 6e 20 37 2f 31  |.;now add in 7/1|
000033f0  36 20 65 72 72 6f 72 20  66 6f 72 20 70 69 78 65  |6 error for pixe|
00003400  6c 20 74 6f 20 72 69 67  68 74 0a 0a 67 77 69 5f  |l to right..gwi_|
00003410  78 6c 32 5f 62 31 0a 20  20 20 20 20 20 20 20 43  |xl2_b1.        C|
00003420  4d 50 20 20 20 20 20 67  77 69 5f 69 2c 20 67 77  |MP     gwi_i, gw|
00003430  69 5f 78 70 0a 20 20 20  20 20 20 20 20 42 45 51  |i_xp.        BEQ|
00003440  20 20 20 20 20 67 77 69  5f 78 6c 32 5f 62 32 0a  |     gwi_xl2_b2.|
00003450  0a 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |.        LDR    |
00003460  20 67 77 69 5f 6d 34 2c  20 5b 67 77 69 5f 64 65  | gwi_m4, [gwi_de|
00003470  2c 20 67 77 69 5f 69 2c  20 41 53 4c 20 23 32 5d  |, gwi_i, ASL #2]|
00003480  09 3b 69 66 20 6e 6f 74  20 6f 6e 20 66 61 72 20  |.;if not on far |
00003490  6c 65 66 74 20 63 6f 6c  75 6d 6e 20 2e 20 2e 20  |left column . . |
000034a0  2e 0a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
000034b0  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 34  |  gwi_m1, gwi_m4|
000034c0  2c 20 4c 53 4c 20 23 32  34 0a 20 20 20 20 20 20  |, LSL #24.      |
000034d0  20 20 4d 4f 56 20 20 20  20 20 67 77 69 5f 6d 31  |  MOV     gwi_m1|
000034e0  2c 20 67 77 69 5f 6d 31  2c 20 41 53 52 20 23 32  |, gwi_m1, ASR #2|
000034f0  34 0a 20 20 20 20 20 20  20 20 41 44 44 53 20 20  |4.        ADDS  |
00003500  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |  gwi_m1, gwi_m1|
00003510  2c 20 67 77 69 5f 6d 31  2c 20 41 53 4c 20 23 31  |, gwi_m1, ASL #1|
00003520  0a 20 20 20 20 20 20 20  20 41 44 44 4d 49 20 20  |.        ADDMI  |
00003530  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 31 2c  | gwi_m1, gwi_m1,|
00003540  20 23 31 35 0a 20 20 20  20 20 20 20 20 41 44 44  | #15.        ADD|
00003550  20 20 20 20 20 67 77 69  5f 72 2c 20 67 77 69 5f  |     gwi_r, gwi_|
00003560  72 2c 20 67 77 69 5f 6d  31 2c 20 41 53 52 20 23  |r, gwi_m1, ASR #|
00003570  34 0a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |4.        MOV   |
00003580  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 34  |  gwi_m1, gwi_m4|
00003590  2c 20 4c 53 4c 20 23 31  36 0a 20 20 20 20 20 20  |, LSL #16.      |
000035a0  20 20 4d 4f 56 20 20 20  20 20 67 77 69 5f 6d 31  |  MOV     gwi_m1|
000035b0  2c 20 67 77 69 5f 6d 31  2c 20 41 53 52 20 23 32  |, gwi_m1, ASR #2|
000035c0  34 0a 20 20 20 20 20 20  20 20 41 44 44 53 20 20  |4.        ADDS  |
000035d0  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |  gwi_m1, gwi_m1|
000035e0  2c 20 67 77 69 5f 6d 31  2c 20 41 53 4c 20 23 31  |, gwi_m1, ASL #1|
000035f0  0a 20 20 20 20 20 20 20  20 41 44 44 4d 49 20 20  |.        ADDMI  |
00003600  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 31 2c  | gwi_m1, gwi_m1,|
00003610  20 23 31 35 0a 20 20 20  20 20 20 20 20 41 44 44  | #15.        ADD|
00003620  20 20 20 20 20 67 77 69  5f 67 2c 20 67 77 69 5f  |     gwi_g, gwi_|
00003630  67 2c 20 67 77 69 5f 6d  31 2c 20 41 53 52 20 23  |g, gwi_m1, ASR #|
00003640  34 0a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |4.        MOV   |
00003650  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 34  |  gwi_m1, gwi_m4|
00003660  2c 20 4c 53 4c 20 23 38  0a 20 20 20 20 20 20 20  |, LSL #8.       |
00003670  20 4d 4f 56 20 20 20 20  20 67 77 69 5f 6d 31 2c  | MOV     gwi_m1,|
00003680  20 67 77 69 5f 6d 31 2c  20 41 53 52 20 23 32 34  | gwi_m1, ASR #24|
00003690  0a 20 20 20 20 20 20 20  20 41 44 44 53 20 20 20  |.        ADDS   |
000036a0  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 31 2c  | gwi_m1, gwi_m1,|
000036b0  20 67 77 69 5f 6d 31 2c  20 41 53 4c 20 23 31 0a  | gwi_m1, ASL #1.|
000036c0  20 20 20 20 20 20 20 20  41 44 44 4d 49 20 20 20  |        ADDMI   |
000036d0  67 77 69 5f 6d 31 2c 20  67 77 69 5f 6d 31 2c 20  |gwi_m1, gwi_m1, |
000036e0  23 31 35 0a 20 20 20 20  20 20 20 20 41 44 44 20  |#15.        ADD |
000036f0  20 20 20 20 67 77 69 5f  62 2c 20 67 77 69 5f 62  |    gwi_b, gwi_b|
00003700  2c 20 67 77 69 5f 6d 31  2c 20 41 53 52 20 23 34  |, gwi_m1, ASR #4|
00003710  09 3b 61 64 64 20 69 6e  20 33 2f 31 36 20 65 72  |.;add in 3/16 er|
00003720  72 6f 72 20 66 6f 72 20  70 69 78 65 6c 20 74 6f  |ror for pixel to|
00003730  20 61 62 6f 76 65 20 6c  65 66 74 0a 0a 67 77 69  | above left..gwi|
00003740  5f 78 6c 32 5f 62 32 0a  0a 20 20 20 20 20 20 20  |_xl2_b2..       |
00003750  20 67 77 69 5f 73 65 67  31 09 09 09 09 3b 77 72  | gwi_seg1....;wr|
00003760  69 74 65 20 64 65 73 74  69 6e 61 74 69 6f 6e 20  |ite destination |
00003770  70 69 78 65 6c 20 26 20  63 61 6c 63 20 6e 65 77  |pixel & calc new|
00003780  20 65 72 72 6f 72 20 66  6f 72 20 70 69 78 65 6c  | error for pixel|
00003790  0a 0a 20 20 20 20 20 20  20 20 53 55 42 20 20 20  |..        SUB   |
000037a0  20 20 67 77 69 5f 64 70  2c 20 67 77 69 5f 64 70  |  gwi_dp, gwi_dp|
000037b0  2c 20 23 31 0a 20 20 20  20 20 20 20 20 53 55 42  |, #1.        SUB|
000037c0  20 20 20 20 20 67 77 69  5f 73 70 2c 20 67 77 69  |     gwi_sp, gwi|
000037d0  5f 73 70 2c 20 23 32 0a  20 20 20 20 20 20 20 20  |_sp, #2.        |
000037e0  41 44 44 20 20 20 20 20  67 77 69 5f 69 2c 20 67  |ADD     gwi_i, g|
000037f0  77 69 5f 69 2c 20 23 31  0a 20 20 20 20 20 20 20  |wi_i, #1.       |
00003800  20 43 4d 50 20 20 20 20  20 67 77 69 5f 69 2c 20  | CMP     gwi_i, |
00003810  67 77 69 5f 78 70 0a 20  20 20 20 20 20 20 20 42  |gwi_xp.        B|
00003820  4c 45 20 20 20 20 20 67  77 69 5f 78 6c 6f 6f 70  |LE     gwi_xloop|
00003830  32 09 09 09 3b 6c 6f 6f  70 20 62 61 63 6b 20 74  |2...;loop back t|
00003840  69 6c 20 61 6c 6c 20 6f  66 20 72 69 67 68 74 20  |il all of right |
00003850  74 6f 20 6c 65 66 74 20  72 6f 77 20 70 72 6f 63  |to left row proc|
00003860  65 73 73 65 64 0a 67 77  69 5f 78 6c 6f 6f 70 32  |essed.gwi_xloop2|
00003870  64 6f 6e 65 0a 0a 20 20  20 20 20 20 20 20 52 53  |done..        RS|
00003880  42 20 20 20 20 20 67 77  69 5f 6d 32 2c 20 67 77  |B     gwi_m2, gw|
00003890  69 5f 78 70 2c 20 23 34  0a 20 20 20 20 20 20 20  |i_xp, #4.       |
000038a0  20 41 4e 44 20 20 20 20  20 67 77 69 5f 6d 31 2c  | AND     gwi_m1,|
000038b0  20 67 77 69 5f 6d 32 2c  20 23 33 0a 20 20 20 20  | gwi_m2, #3.    |
000038c0  20 20 20 20 41 44 44 20  20 20 20 20 67 77 69 5f  |    ADD     gwi_|
000038d0  6d 31 2c 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |m1, gwi_m1, gwi_|
000038e0  78 70 0a 20 20 20 20 20  20 20 20 41 44 44 20 20  |xp.        ADD  |
000038f0  20 20 20 67 77 69 5f 6d  31 2c 20 67 77 69 5f 6d  |   gwi_m1, gwi_m|
00003900  31 2c 20 23 31 0a 20 20  20 20 20 20 20 20 41 44  |1, #1.        AD|
00003910  44 20 20 20 20 20 67 77  69 5f 64 70 2c 20 67 77  |D     gwi_dp, gw|
00003920  69 5f 64 70 2c 20 67 77  69 5f 6d 31 0a 20 20 09  |i_dp, gwi_m1.  .|
00003930  53 55 42 09 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |SUB.gwi_m1, gwi_|
00003940  6d 32 2c 20 67 77 69 5f  78 70 0a 20 20 20 20 20  |m2, gwi_xp.     |
00003950  20 20 20 41 4e 44 20 20  20 20 20 67 77 69 5f 6d  |   AND     gwi_m|
00003960  31 2c 20 67 77 69 5f 6d  31 2c 20 23 33 0a 20 20  |1, gwi_m1, #3.  |
00003970  20 20 20 20 20 20 41 44  44 20 20 20 20 20 67 77  |      ADD     gw|
00003980  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 67 77  |i_m1, gwi_m1, gw|
00003990  69 5f 78 70 2c 20 4c 53  4c 20 23 31 0a 20 20 20  |i_xp, LSL #1.   |
000039a0  20 20 20 20 20 41 44 44  20 20 20 20 20 67 77 69  |     ADD     gwi|
000039b0  5f 6d 31 2c 20 67 77 69  5f 6d 31 2c 20 23 32 0a  |_m1, gwi_m1, #2.|
000039c0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
000039d0  67 77 69 5f 73 70 2c 20  67 77 69 5f 73 70 2c 20  |gwi_sp, gwi_sp, |
000039e0  67 77 69 5f 6d 31 09 09  3b 73 74 65 70 20 73 70  |gwi_m1..;step sp|
000039f0  2c 20 64 70 20 74 6f 20  6e 65 78 74 20 72 6f 77  |, dp to next row|
00003a00  20 28 74 6f 20 62 65 20  73 63 61 6e 6e 65 64 20  | (to be scanned |
00003a10  6c 65 66 74 20 74 6f 20  72 69 67 68 74 29 0a 0a  |left to right)..|
00003a20  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00003a30  67 77 69 5f 6d 31 2c 20  67 77 69 5f 61 6a 0a 20  |gwi_m1, gwi_aj. |
00003a40  20 20 20 20 20 20 20 53  55 42 53 20 20 20 20 67  |       SUBS    g|
00003a50  77 69 5f 6d 31 2c 20 67  77 69 5f 6d 31 2c 20 23  |wi_m1, gwi_m1, #|
00003a60  31 0a 20 20 20 20 20 20  20 20 53 54 52 20 20 20  |1.        STR   |
00003a70  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 61 6a  |  gwi_m1, gwi_aj|
00003a80  0a 20 20 20 20 20 20 20  20 42 4d 49 20 20 20 20  |.        BMI    |
00003a90  20 67 77 69 5f 79 6c 6f  6f 70 64 6f 6e 65 09 09  | gwi_yloopdone..|
00003aa0  09 3b 63 6f 6e 74 69 6e  75 65 20 77 69 74 68 20  |.;continue with |
00003ab0  6e 65 78 74 20 72 6f 77  2c 20 75 6e 6c 65 73 73  |next row, unless|
00003ac0  20 61 6c 6c 20 64 6f 6e  65 0a 0a 20 20 20 20 20  | all done..     |
00003ad0  20 20 20 53 55 42 20 20  20 20 20 67 77 69 5f 6d  |   SUB     gwi_m|
00003ae0  31 2c 20 67 77 69 5f 78  70 2c 20 23 31 0a 20 20  |1, gwi_xp, #1.  |
00003af0  20 20 20 20 20 20 53 54  52 20 20 20 20 20 67 77  |      STR     gw|
00003b00  69 5f 6c 64 65 2c 20 5b  67 77 69 5f 64 65 2c 20  |i_lde, [gwi_de, |
00003b10  67 77 69 5f 6d 31 2c 20  41 53 4c 20 23 32 5d 09  |gwi_m1, ASL #2].|
00003b20  3b 62 75 66 66 65 72 20  65 72 72 6f 72 20 66 6f  |;buffer error fo|
00003b30  72 20 66 69 6e 61 6c 20  70 69 78 65 6c 20 6f 6e  |r final pixel on|
00003b40  20 6c 61 73 74 20 72 6f  77 0a 20 20 20 20 20 20  | last row.      |
00003b50  20 20 4d 4f 56 20 20 20  20 20 67 77 69 5f 69 2c  |  MOV     gwi_i,|
00003b60  20 67 77 69 5f 78 70 0a  20 20 20 20 20 20 20 20  | gwi_xp.        |
00003b70  43 4d 50 20 20 20 20 20  67 77 69 5f 69 2c 20 23  |CMP     gwi_i, #|
00003b80  30 0a 20 20 20 20 20 20  20 20 42 4c 45 20 20 20  |0.        BLE   |
00003b90  20 20 67 77 69 5f 78 6c  6f 6f 70 33 64 6f 6e 65  |  gwi_xloop3done|
00003ba0  0a 0a 67 77 69 5f 78 6c  6f 6f 70 33 0a 09 54 53  |..gwi_xloop3..TS|
00003bb0  54 09 67 77 69 5f 73 70  2c 20 23 33 09 09 09 3b  |T.gwi_sp, #3...;|
00003bc0  66 72 6f 6d 20 68 65 72  65 20 2e 20 2e 20 2e 0a  |from here . . ..|
00003bd0  09 42 49 43 09 67 77 69  5f 72 2c 20 67 77 69 5f  |.BIC.gwi_r, gwi_|
00003be0  73 70 2c 20 23 33 0a 20  20 20 20 20 20 20 20 4c  |sp, #3.        L|
00003bf0  44 52 09 67 77 69 5f 6d  31 2c 20 5b 67 77 69 5f  |DR.gwi_m1, [gwi_|
00003c00  72 2c 20 23 30 5d 0a 09  4d 4f 56 4e 45 09 67 77  |r, #0]..MOVNE.gw|
00003c10  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 4c 53  |i_m1, gwi_m1, LS|
00003c20  52 20 23 31 36 0a 20 20  20 20 20 20 20 20 41 4e  |R #16.        AN|
00003c30  44 20 20 20 20 20 67 77  69 5f 72 2c 20 67 77 69  |D     gwi_r, gwi|
00003c40  5f 6d 31 2c 20 23 33 31  0a 20 20 20 20 20 20 20  |_m1, #31.       |
00003c50  20 4d 4f 56 20 20 20 20  20 67 77 69 5f 67 2c 20  | MOV     gwi_g, |
00003c60  67 77 69 5f 6d 31 2c 20  4c 53 52 20 23 35 0a 20  |gwi_m1, LSR #5. |
00003c70  20 20 20 20 20 20 20 41  4e 44 20 20 20 20 20 67  |       AND     g|
00003c80  77 69 5f 67 2c 20 67 77  69 5f 67 2c 20 23 33 31  |wi_g, gwi_g, #31|
00003c90  0a 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00003ca0  20 67 77 69 5f 62 2c 20  67 77 69 5f 6d 31 2c 20  | gwi_b, gwi_m1, |
00003cb0  4c 53 52 20 23 31 30 0a  20 20 20 20 20 20 20 20  |LSR #10.        |
00003cc0  41 4e 44 20 20 20 20 20  67 77 69 5f 62 2c 20 67  |AND     gwi_b, g|
00003cd0  77 69 5f 62 2c 20 23 33  31 0a 09 4f 52 52 09 67  |wi_b, #31..ORR.g|
00003ce0  77 69 5f 72 2c 20 67 77  69 5f 72 2c 20 67 77 69  |wi_r, gwi_r, gwi|
00003cf0  5f 72 2c 20 4c 53 4c 20  23 35 0a 09 4d 4f 56 09  |_r, LSL #5..MOV.|
00003d00  67 77 69 5f 72 2c 20 67  77 69 5f 72 2c 20 4c 53  |gwi_r, gwi_r, LS|
00003d10  52 20 23 32 0a 09 4f 52  52 09 67 77 69 5f 67 2c  |R #2..ORR.gwi_g,|
00003d20  20 67 77 69 5f 67 2c 20  67 77 69 5f 67 2c 20 4c  | gwi_g, gwi_g, L|
00003d30  53 4c 20 23 35 0a 09 4d  4f 56 09 67 77 69 5f 67  |SL #5..MOV.gwi_g|
00003d40  2c 20 67 77 69 5f 67 2c  20 4c 53 52 20 23 32 0a  |, gwi_g, LSR #2.|
00003d50  09 4f 52 52 09 67 77 69  5f 62 2c 20 67 77 69 5f  |.ORR.gwi_b, gwi_|
00003d60  62 2c 20 67 77 69 5f 62  2c 20 4c 53 4c 20 23 35  |b, gwi_b, LSL #5|
00003d70  0a 09 4d 4f 56 09 67 77  69 5f 62 2c 20 67 77 69  |..MOV.gwi_b, gwi|
00003d80  5f 62 2c 20 4c 53 52 20  23 32 09 09 3b 74 6f 20  |_b, LSR #2..;to |
00003d90  68 65 72 65 2c 20 72 65  61 64 20 72 2c 67 20 26  |here, read r,g &|
00003da0  20 62 20 63 6f 6c 6f 75  72 20 6f 66 20 63 75 72  | b colour of cur|
00003db0  72 65 6e 74 20 73 6f 75  72 63 65 20 70 69 78 65  |rent source pixe|
00003dc0  6c 0a 0a 20 20 20 20 20  20 20 20 53 55 42 20 20  |l..        SUB  |
00003dd0  20 20 20 67 77 69 5f 6d  34 2c 20 67 77 69 5f 69  |   gwi_m4, gwi_i|
00003de0  2c 20 23 31 09 09 3b 66  6f 72 20 70 69 78 65 6c  |, #1..;for pixel|
00003df0  20 61 62 6f 76 65 20 2e  20 2e 20 2e 0a 20 20 20  | above . . ..   |
00003e00  20 20 20 20 20 4c 44 52  20 20 20 20 20 67 77 69  |     LDR     gwi|
00003e10  5f 6d 34 2c 20 5b 67 77  69 5f 64 65 2c 20 67 77  |_m4, [gwi_de, gw|
00003e20  69 5f 6d 34 2c 20 41 53  4c 20 23 32 5d 0a 20 20  |i_m4, ASL #2].  |
00003e30  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 67 77  |      MOV     gw|
00003e40  69 5f 6d 31 2c 20 67 77  69 5f 6d 34 2c 20 4c 53  |i_m1, gwi_m4, LS|
00003e50  4c 20 23 32 34 0a 20 20  20 20 20 20 20 20 4d 4f  |L #24.        MO|
00003e60  56 20 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |V     gwi_m1, gw|
00003e70  69 5f 6d 31 2c 20 41 53  52 20 23 32 34 0a 20 20  |i_m1, ASR #24.  |
00003e80  20 20 20 20 20 20 41 44  44 53 20 20 20 20 67 77  |      ADDS    gw|
00003e90  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 67 77  |i_m1, gwi_m1, gw|
00003ea0  69 5f 6d 31 2c 20 41 53  4c 20 23 32 0a 20 20 20  |i_m1, ASL #2.   |
00003eb0  20 20 20 20 20 41 44 44  4d 49 20 20 20 67 77 69  |     ADDMI   gwi|
00003ec0  5f 6d 31 2c 20 67 77 69  5f 6d 31 2c 20 23 31 35  |_m1, gwi_m1, #15|
00003ed0  0a 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |.        ADD    |
00003ee0  20 67 77 69 5f 72 2c 20  67 77 69 5f 72 2c 20 67  | gwi_r, gwi_r, g|
00003ef0  77 69 5f 6d 31 2c 20 41  53 52 20 23 34 0a 20 20  |wi_m1, ASR #4.  |
00003f00  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 67 77  |      MOV     gw|
00003f10  69 5f 6d 31 2c 20 67 77  69 5f 6d 34 2c 20 4c 53  |i_m1, gwi_m4, LS|
00003f20  4c 20 23 31 36 0a 20 20  20 20 20 20 20 20 4d 4f  |L #16.        MO|
00003f30  56 20 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |V     gwi_m1, gw|
00003f40  69 5f 6d 31 2c 20 41 53  52 20 23 32 34 0a 20 20  |i_m1, ASR #24.  |
00003f50  20 20 20 20 20 20 41 44  44 53 20 20 20 20 67 77  |      ADDS    gw|
00003f60  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 67 77  |i_m1, gwi_m1, gw|
00003f70  69 5f 6d 31 2c 20 41 53  4c 20 23 32 0a 20 20 20  |i_m1, ASL #2.   |
00003f80  20 20 20 20 20 41 44 44  4d 49 20 20 20 67 77 69  |     ADDMI   gwi|
00003f90  5f 6d 31 2c 20 67 77 69  5f 6d 31 2c 20 23 31 35  |_m1, gwi_m1, #15|
00003fa0  0a 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |.        ADD    |
00003fb0  20 67 77 69 5f 67 2c 20  67 77 69 5f 67 2c 20 67  | gwi_g, gwi_g, g|
00003fc0  77 69 5f 6d 31 2c 20 41  53 52 20 23 34 0a 20 20  |wi_m1, ASR #4.  |
00003fd0  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 67 77  |      MOV     gw|
00003fe0  69 5f 6d 31 2c 20 67 77  69 5f 6d 34 2c 20 4c 53  |i_m1, gwi_m4, LS|
00003ff0  4c 20 23 38 0a 20 20 20  20 20 20 20 20 4d 4f 56  |L #8.        MOV|
00004000  20 20 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |     gwi_m1, gwi|
00004010  5f 6d 31 2c 20 41 53 52  20 23 32 34 0a 20 20 20  |_m1, ASR #24.   |
00004020  20 20 20 20 20 41 44 44  53 20 20 20 20 67 77 69  |     ADDS    gwi|
00004030  5f 6d 31 2c 20 67 77 69  5f 6d 31 2c 20 67 77 69  |_m1, gwi_m1, gwi|
00004040  5f 6d 31 2c 20 41 53 4c  20 23 32 0a 20 20 20 20  |_m1, ASL #2.    |
00004050  20 20 20 20 41 44 44 4d  49 20 20 20 67 77 69 5f  |    ADDMI   gwi_|
00004060  6d 31 2c 20 67 77 69 5f  6d 31 2c 20 23 31 35 0a  |m1, gwi_m1, #15.|
00004070  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00004080  67 77 69 5f 62 2c 20 67  77 69 5f 62 2c 20 67 77  |gwi_b, gwi_b, gw|
00004090  69 5f 6d 31 2c 20 41 53  52 20 23 34 09 3b 61 64  |i_m1, ASR #4.;ad|
000040a0  64 20 69 6e 20 35 2f 31  36 20 65 72 72 6f 72 0a  |d in 5/16 error.|
000040b0  0a 20 20 20 20 20 20 20  20 43 4d 50 20 20 20 20  |.        CMP    |
000040c0  20 67 77 69 5f 69 2c 20  67 77 69 5f 78 70 0a 20  | gwi_i, gwi_xp. |
000040d0  20 20 20 20 20 20 20 42  45 51 20 20 20 20 20 67  |       BEQ     g|
000040e0  77 69 5f 78 6c 33 5f 62  31 0a 09 09 09 09 09 09  |wi_xl3_b1.......|
000040f0  3b 69 66 20 6e 6f 74 20  6f 6e 20 6c 65 66 74 6d  |;if not on leftm|
00004100  6f 73 74 20 63 6f 6c 75  6d 6e 20 2e 20 2e 20 2e  |ost column . . .|
00004110  0a 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |.        LDR    |
00004120  20 67 77 69 5f 6d 34 2c  20 5b 67 77 69 5f 64 65  | gwi_m4, [gwi_de|
00004130  2c 20 67 77 69 5f 69 2c  20 41 53 4c 20 23 32 5d  |, gwi_i, ASL #2]|
00004140  0a 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00004150  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 34 2c  | gwi_m1, gwi_m4,|
00004160  20 4c 53 4c 20 23 32 34  0a 20 20 20 20 20 20 20  | LSL #24.       |
00004170  20 4d 4f 56 53 20 20 20  20 67 77 69 5f 6d 31 2c  | MOVS    gwi_m1,|
00004180  20 67 77 69 5f 6d 31 2c  20 41 53 52 20 23 32 34  | gwi_m1, ASR #24|
00004190  0a 20 20 20 20 20 20 20  20 41 44 44 4d 49 20 20  |.        ADDMI  |
000041a0  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 31 2c  | gwi_m1, gwi_m1,|
000041b0  20 23 31 35 0a 20 20 20  20 20 20 20 20 41 44 44  | #15.        ADD|
000041c0  20 20 20 20 20 67 77 69  5f 72 2c 20 67 77 69 5f  |     gwi_r, gwi_|
000041d0  72 2c 20 67 77 69 5f 6d  31 2c 20 41 53 52 20 23  |r, gwi_m1, ASR #|
000041e0  34 0a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |4.        MOV   |
000041f0  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 34  |  gwi_m1, gwi_m4|
00004200  2c 20 4c 53 4c 20 23 31  36 0a 20 20 20 20 20 20  |, LSL #16.      |
00004210  20 20 4d 4f 56 53 20 20  20 20 67 77 69 5f 6d 31  |  MOVS    gwi_m1|
00004220  2c 20 67 77 69 5f 6d 31  2c 20 41 53 52 20 23 32  |, gwi_m1, ASR #2|
00004230  34 0a 20 20 20 20 20 20  20 20 41 44 44 4d 49 20  |4.        ADDMI |
00004240  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |  gwi_m1, gwi_m1|
00004250  2c 20 23 31 35 0a 20 20  20 20 20 20 20 20 41 44  |, #15.        AD|
00004260  44 20 20 20 20 20 67 77  69 5f 67 2c 20 67 77 69  |D     gwi_g, gwi|
00004270  5f 67 2c 20 67 77 69 5f  6d 31 2c 20 41 53 52 20  |_g, gwi_m1, ASR |
00004280  23 34 0a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |#4.        MOV  |
00004290  20 20 20 67 77 69 5f 6d  31 2c 20 67 77 69 5f 6d  |   gwi_m1, gwi_m|
000042a0  34 2c 20 4c 53 4c 20 23  38 0a 20 20 20 20 20 20  |4, LSL #8.      |
000042b0  20 20 4d 4f 56 53 20 20  20 20 67 77 69 5f 6d 31  |  MOVS    gwi_m1|
000042c0  2c 20 67 77 69 5f 6d 31  2c 20 41 53 52 20 23 32  |, gwi_m1, ASR #2|
000042d0  34 0a 20 20 20 20 20 20  20 20 41 44 44 4d 49 20  |4.        ADDMI |
000042e0  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |  gwi_m1, gwi_m1|
000042f0  2c 20 23 31 35 0a 20 20  20 20 20 20 20 20 41 44  |, #15.        AD|
00004300  44 20 20 20 20 20 67 77  69 5f 62 2c 20 67 77 69  |D     gwi_b, gwi|
00004310  5f 62 2c 20 67 77 69 5f  6d 31 2c 20 41 53 52 20  |_b, gwi_m1, ASR |
00004320  23 34 09 3b 61 64 64 20  69 6e 20 31 2f 31 36 20  |#4.;add in 1/16 |
00004330  65 72 72 6f 72 20 66 6f  72 20 70 69 78 65 6c 20  |error for pixel |
00004340  74 6f 20 61 62 6f 76 65  20 6c 65 66 74 0a 0a 20  |to above left.. |
00004350  20 20 20 20 20 20 20 53  54 52 20 20 20 20 20 67  |       STR     g|
00004360  77 69 5f 6c 64 65 2c 20  5b 67 77 69 5f 64 65 2c  |wi_lde, [gwi_de,|
00004370  20 67 77 69 5f 69 2c 20  41 53 4c 20 23 32 5d 09  | gwi_i, ASL #2].|
00004380  3b 62 75 66 66 65 72 20  6c 61 73 74 20 65 72 72  |;buffer last err|
00004390  6f 72 0a 0a 20 20 20 20  20 20 20 20 4d 4f 56 20  |or..        MOV |
000043a0  20 20 20 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |    gwi_m1, gwi_|
000043b0  6c 64 65 2c 20 4c 53 4c  20 23 32 34 0a 20 20 20  |lde, LSL #24.   |
000043c0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 67 77 69  |     MOV     gwi|
000043d0  5f 6d 31 2c 20 67 77 69  5f 6d 31 2c 20 41 53 52  |_m1, gwi_m1, ASR|
000043e0  20 23 32 34 0a 20 20 20  20 20 20 20 20 52 53 42  | #24.        RSB|
000043f0  53 20 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |S    gwi_m1, gwi|
00004400  5f 6d 31 2c 20 67 77 69  5f 6d 31 2c 20 41 53 4c  |_m1, gwi_m1, ASL|
00004410  20 23 33 0a 20 20 20 20  20 20 20 20 41 44 44 4d  | #3.        ADDM|
00004420  49 20 20 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |I   gwi_m1, gwi_|
00004430  6d 31 2c 20 23 31 35 0a  20 20 20 20 20 20 20 20  |m1, #15.        |
00004440  41 44 44 20 20 20 20 20  67 77 69 5f 72 2c 20 67  |ADD     gwi_r, g|
00004450  77 69 5f 72 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |wi_r, gwi_m1, AS|
00004460  52 20 23 34 0a 20 20 20  20 20 20 20 20 4d 4f 56  |R #4.        MOV|
00004470  20 20 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |     gwi_m1, gwi|
00004480  5f 6c 64 65 2c 20 4c 53  4c 20 23 31 36 0a 20 20  |_lde, LSL #16.  |
00004490  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 67 77  |      MOV     gw|
000044a0  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |i_m1, gwi_m1, AS|
000044b0  52 20 23 32 34 0a 20 20  20 20 20 20 20 20 52 53  |R #24.        RS|
000044c0  42 53 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |BS    gwi_m1, gw|
000044d0  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |i_m1, gwi_m1, AS|
000044e0  4c 20 23 33 0a 20 20 20  20 20 20 20 20 41 44 44  |L #3.        ADD|
000044f0  4d 49 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |MI   gwi_m1, gwi|
00004500  5f 6d 31 2c 20 23 31 35  0a 20 20 20 20 20 20 20  |_m1, #15.       |
00004510  20 41 44 44 20 20 20 20  20 67 77 69 5f 67 2c 20  | ADD     gwi_g, |
00004520  67 77 69 5f 67 2c 20 67  77 69 5f 6d 31 2c 20 41  |gwi_g, gwi_m1, A|
00004530  53 52 20 23 34 0a 20 20  20 20 20 20 20 20 4d 4f  |SR #4.        MO|
00004540  56 20 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |V     gwi_m1, gw|
00004550  69 5f 6c 64 65 2c 20 4c  53 4c 20 23 38 0a 20 20  |i_lde, LSL #8.  |
00004560  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 67 77  |      MOV     gw|
00004570  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |i_m1, gwi_m1, AS|
00004580  52 20 23 32 34 0a 20 20  20 20 20 20 20 20 52 53  |R #24.        RS|
00004590  42 53 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |BS    gwi_m1, gw|
000045a0  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |i_m1, gwi_m1, AS|
000045b0  4c 20 23 33 0a 20 20 20  20 20 20 20 20 41 44 44  |L #3.        ADD|
000045c0  4d 49 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |MI   gwi_m1, gwi|
000045d0  5f 6d 31 2c 20 23 31 35  0a 20 20 20 20 20 20 20  |_m1, #15.       |
000045e0  20 41 44 44 20 20 20 20  20 67 77 69 5f 62 2c 20  | ADD     gwi_b, |
000045f0  67 77 69 5f 62 2c 20 67  77 69 5f 6d 31 2c 20 41  |gwi_b, gwi_m1, A|
00004600  53 52 20 23 34 09 3b 26  20 61 64 64 20 69 6e 20  |SR #4.;& add in |
00004610  37 2f 31 36 20 65 72 72  6f 72 20 66 6f 72 20 70  |7/16 error for p|
00004620  69 78 65 6c 20 74 6f 20  6c 65 66 74 0a 0a 67 77  |ixel to left..gw|
00004630  69 5f 78 6c 33 5f 62 31  0a 20 20 20 20 20 20 20  |i_xl3_b1.       |
00004640  20 43 4d 50 20 20 20 20  20 67 77 69 5f 69 2c 20  | CMP     gwi_i, |
00004650  23 31 0a 20 20 20 20 20  20 20 20 42 45 51 20 20  |#1.        BEQ  |
00004660  20 20 20 67 77 69 5f 78  6c 33 5f 62 32 0a 09 09  |   gwi_xl3_b2...|
00004670  09 09 09 09 3b 69 66 20  6e 6f 74 20 6f 6e 20 66  |....;if not on f|
00004680  61 72 20 72 69 67 68 74  20 2e 20 2e 20 2e 0a 20  |ar right . . .. |
00004690  20 20 20 20 20 20 20 53  55 42 20 20 20 20 20 67  |       SUB     g|
000046a0  77 69 5f 6d 32 2c 20 67  77 69 5f 69 2c 20 23 32  |wi_m2, gwi_i, #2|
000046b0  0a 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |.        LDR    |
000046c0  20 67 77 69 5f 6d 34 2c  20 5b 67 77 69 5f 64 65  | gwi_m4, [gwi_de|
000046d0  2c 20 67 77 69 5f 6d 32  2c 20 41 53 4c 20 23 32  |, gwi_m2, ASL #2|
000046e0  5d 0a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |].        MOV   |
000046f0  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 34  |  gwi_m1, gwi_m4|
00004700  2c 20 4c 53 4c 20 23 32  34 0a 20 20 20 20 20 20  |, LSL #24.      |
00004710  20 20 4d 4f 56 20 20 20  20 20 67 77 69 5f 6d 31  |  MOV     gwi_m1|
00004720  2c 20 67 77 69 5f 6d 31  2c 20 41 53 52 20 23 32  |, gwi_m1, ASR #2|
00004730  34 0a 20 20 20 20 20 20  20 20 41 44 44 53 20 20  |4.        ADDS  |
00004740  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |  gwi_m1, gwi_m1|
00004750  2c 20 67 77 69 5f 6d 31  2c 20 41 53 4c 20 23 31  |, gwi_m1, ASL #1|
00004760  0a 20 20 20 20 20 20 20  20 41 44 44 4d 49 20 20  |.        ADDMI  |
00004770  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 31 2c  | gwi_m1, gwi_m1,|
00004780  20 23 31 35 0a 20 20 20  20 20 20 20 20 41 44 44  | #15.        ADD|
00004790  20 20 20 20 20 67 77 69  5f 72 2c 20 67 77 69 5f  |     gwi_r, gwi_|
000047a0  72 2c 20 67 77 69 5f 6d  31 2c 20 41 53 52 20 23  |r, gwi_m1, ASR #|
000047b0  34 0a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |4.        MOV   |
000047c0  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 34  |  gwi_m1, gwi_m4|
000047d0  2c 20 4c 53 4c 20 23 31  36 0a 20 20 20 20 20 20  |, LSL #16.      |
000047e0  20 20 4d 4f 56 20 20 20  20 20 67 77 69 5f 6d 31  |  MOV     gwi_m1|
000047f0  2c 20 67 77 69 5f 6d 31  2c 20 41 53 52 20 23 32  |, gwi_m1, ASR #2|
00004800  34 0a 20 20 20 20 20 20  20 20 41 44 44 53 20 20  |4.        ADDS  |
00004810  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |  gwi_m1, gwi_m1|
00004820  2c 20 67 77 69 5f 6d 31  2c 20 41 53 4c 20 23 31  |, gwi_m1, ASL #1|
00004830  0a 20 20 20 20 20 20 20  20 41 44 44 4d 49 20 20  |.        ADDMI  |
00004840  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 31 2c  | gwi_m1, gwi_m1,|
00004850  20 23 31 35 0a 20 20 20  20 20 20 20 20 41 44 44  | #15.        ADD|
00004860  20 20 20 20 20 67 77 69  5f 67 2c 20 67 77 69 5f  |     gwi_g, gwi_|
00004870  67 2c 20 67 77 69 5f 6d  31 2c 20 41 53 52 20 23  |g, gwi_m1, ASR #|
00004880  34 0a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |4.        MOV   |
00004890  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 34  |  gwi_m1, gwi_m4|
000048a0  2c 20 4c 53 4c 20 23 38  0a 20 20 20 20 20 20 20  |, LSL #8.       |
000048b0  20 4d 4f 56 20 20 20 20  20 67 77 69 5f 6d 31 2c  | MOV     gwi_m1,|
000048c0  20 67 77 69 5f 6d 31 2c  20 41 53 52 20 23 32 34  | gwi_m1, ASR #24|
000048d0  0a 20 20 20 20 20 20 20  20 41 44 44 53 20 20 20  |.        ADDS   |
000048e0  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 31 2c  | gwi_m1, gwi_m1,|
000048f0  20 67 77 69 5f 6d 31 2c  20 41 53 4c 20 23 31 0a  | gwi_m1, ASL #1.|
00004900  20 20 20 20 20 20 20 20  41 44 44 4d 49 20 20 20  |        ADDMI   |
00004910  67 77 69 5f 6d 31 2c 20  67 77 69 5f 6d 31 2c 20  |gwi_m1, gwi_m1, |
00004920  23 31 35 0a 20 20 20 20  20 20 20 20 41 44 44 20  |#15.        ADD |
00004930  20 20 20 20 67 77 69 5f  62 2c 20 67 77 69 5f 62  |    gwi_b, gwi_b|
00004940  2c 20 67 77 69 5f 6d 31  2c 20 41 53 52 20 23 34  |, gwi_m1, ASR #4|
00004950  09 3b 61 64 64 20 69 6e  20 33 2f 31 36 20 65 72  |.;add in 3/16 er|
00004960  72 6f 72 20 66 6f 72 20  70 69 78 65 6c 20 74 6f  |ror for pixel to|
00004970  20 61 62 6f 76 65 20 72  69 67 68 74 0a 0a 67 77  | above right..gw|
00004980  69 5f 78 6c 33 5f 62 32  0a 0a 20 20 20 20 20 20  |i_xl3_b2..      |
00004990  20 20 67 77 69 5f 73 65  67 31 09 09 09 3b 77 72  |  gwi_seg1...;wr|
000049a0  69 74 65 20 64 65 73 74  69 6e 61 74 69 6f 6e 20  |ite destination |
000049b0  70 69 78 65 6c 20 26 20  63 61 6c 63 20 69 74 73  |pixel & calc its|
000049c0  20 65 72 72 6f 72 0a 0a  20 20 20 20 20 20 20 20  | error..        |
000049d0  41 44 44 20 20 20 20 20  67 77 69 5f 64 70 2c 20  |ADD     gwi_dp, |
000049e0  67 77 69 5f 64 70 2c 20  23 31 0a 20 20 20 20 20  |gwi_dp, #1.     |
000049f0  20 20 20 41 44 44 20 20  20 20 20 67 77 69 5f 73  |   ADD     gwi_s|
00004a00  70 2c 20 67 77 69 5f 73  70 2c 20 23 32 0a 20 20  |p, gwi_sp, #2.  |
00004a10  20 20 20 20 20 20 53 55  42 53 20 20 20 20 67 77  |      SUBS    gw|
00004a20  69 5f 69 2c 20 67 77 69  5f 69 2c 20 23 31 0a 20  |i_i, gwi_i, #1. |
00004a30  20 20 20 20 20 20 20 42  47 54 20 20 20 20 20 67  |       BGT     g|
00004a40  77 69 5f 78 6c 6f 6f 70  33 09 09 3b 63 6f 6e 74  |wi_xloop3..;cont|
00004a50  69 6e 75 65 20 74 69 6c  6c 20 61 6c 6c 20 6f 66  |inue till all of|
00004a60  20 6c 65 66 74 20 74 6f  20 72 69 67 68 74 20 72  | left to right r|
00004a70  6f 77 20 70 72 6f 63 65  73 73 65 64 0a 67 77 69  |ow processed.gwi|
00004a80  5f 78 6c 6f 6f 70 33 64  6f 6e 65 0a 0a 20 20 20  |_xloop3done..   |
00004a90  20 20 20 20 20 52 53 42  20 20 20 20 20 67 77 69  |     RSB     gwi|
00004aa0  5f 6d 32 2c 20 67 77 69  5f 78 70 2c 20 23 34 0a  |_m2, gwi_xp, #4.|
00004ab0  20 20 20 20 20 20 20 20  41 4e 44 20 20 20 20 20  |        AND     |
00004ac0  67 77 69 5f 6d 31 2c 20  67 77 69 5f 6d 32 2c 20  |gwi_m1, gwi_m2, |
00004ad0  23 33 0a 20 20 20 20 20  20 20 20 41 44 44 20 20  |#3.        ADD  |
00004ae0  20 20 20 67 77 69 5f 6d  31 2c 20 67 77 69 5f 6d  |   gwi_m1, gwi_m|
00004af0  31 2c 20 67 77 69 5f 78  70 0a 20 20 20 20 20 20  |1, gwi_xp.      |
00004b00  20 20 53 55 42 20 20 20  20 20 67 77 69 5f 6d 31  |  SUB     gwi_m1|
00004b10  2c 20 67 77 69 5f 6d 31  2c 20 23 31 0a 20 20 20  |, gwi_m1, #1.   |
00004b20  20 20 20 20 20 41 44 44  20 20 20 20 20 67 77 69  |     ADD     gwi|
00004b30  5f 64 70 2c 20 67 77 69  5f 64 70 2c 20 67 77 69  |_dp, gwi_dp, gwi|
00004b40  5f 6d 31 0a 20 20 09 53  55 42 09 67 77 69 5f 6d  |_m1.  .SUB.gwi_m|
00004b50  31 2c 20 67 77 69 5f 6d  32 2c 20 67 77 69 5f 78  |1, gwi_m2, gwi_x|
00004b60  70 0a 20 20 20 20 20 20  20 20 41 4e 44 20 20 20  |p.        AND   |
00004b70  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |  gwi_m1, gwi_m1|
00004b80  2c 20 23 33 0a 20 20 20  20 20 20 20 20 41 44 44  |, #3.        ADD|
00004b90  20 20 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |     gwi_m1, gwi|
00004ba0  5f 6d 31 2c 20 67 77 69  5f 78 70 2c 20 4c 53 4c  |_m1, gwi_xp, LSL|
00004bb0  20 23 31 0a 20 20 20 20  20 20 20 20 53 55 42 20  | #1.        SUB |
00004bc0  20 20 20 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |    gwi_m1, gwi_|
00004bd0  6d 31 2c 20 23 32 0a 20  20 20 20 20 20 20 20 41  |m1, #2.        A|
00004be0  44 44 20 20 20 20 20 67  77 69 5f 73 70 2c 20 67  |DD     gwi_sp, g|
00004bf0  77 69 5f 73 70 2c 20 67  77 69 5f 6d 31 09 3b 73  |wi_sp, gwi_m1.;s|
00004c00  74 65 70 20 64 70 2c 20  73 70 20 74 6f 20 73 74  |tep dp, sp to st|
00004c10  61 72 74 20 6f 66 20 6e  65 78 74 20 72 69 67 68  |art of next righ|
00004c20  74 2d 74 6f 2d 6c 65 66  74 20 72 6f 77 0a 0a 20  |t-to-left row.. |
00004c30  20 20 20 20 20 20 20 4c  44 52 20 20 20 20 20 67  |       LDR     g|
00004c40  77 69 5f 6d 31 2c 20 67  77 69 5f 61 6a 0a 20 20  |wi_m1, gwi_aj.  |
00004c50  20 20 20 20 20 20 53 55  42 53 20 20 20 20 67 77  |      SUBS    gw|
00004c60  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 23 31  |i_m1, gwi_m1, #1|
00004c70  0a 20 20 20 20 20 20 20  20 53 54 52 20 20 20 20  |.        STR    |
00004c80  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 61 6a 0a  | gwi_m1, gwi_aj.|
00004c90  20 20 20 20 20 20 20 20  42 50 4c 20 20 20 20 20  |        BPL     |
00004ca0  67 77 69 5f 79 6c 6f 6f  70 09 09 3b 26 20 72 65  |gwi_yloop..;& re|
00004cb0  70 65 61 74 2c 20 75 6e  74 69 6c 20 61 6c 6c 20  |peat, until all |
00004cc0  72 6f 77 73 20 64 6f 6e  65 0a 0a 67 77 69 5f 79  |rows done..gwi_y|
00004cd0  6c 6f 6f 70 64 6f 6e 65  0a 20 20 20 20 20 20 20  |loopdone.       |
00004ce0  20 3b 61 6c 6c 20 64 6f  6e 65 0a 20 20 20 20 20  | ;all done.     |
00004cf0  20 20 20 4c 44 52 20 20  20 20 20 73 70 2c 20 67  |   LDR     sp, g|
00004d00  77 69 5f 61 73 70 0a 20  20 20 20 20 20 20 20 4c  |wi_asp.        L|
00004d10  44 52 20 20 20 20 20 66  70 2c 20 67 77 69 5f 61  |DR     fp, gwi_a|
00004d20  66 70 0a 20 20 20 20 20  20 20 20 4c 44 52 20 20  |fp.        LDR  |
00004d30  20 20 20 73 6c 2c 20 67  77 69 5f 61 73 6c 0a 20  |   sl, gwi_asl. |
00004d40  20 20 20 20 20 20 20 4c  44 4d 45 41 20 20 20 66  |       LDMEA   f|
00004d50  70 2c 20 7b 72 34 2d 72  39 2c 20 66 70 2c 20 73  |p, {r4-r9, fp, s|
00004d60  70 2c 20 70 63 7d 5e 09  3b 67 65 74 20 6f 75 74  |p, pc}^.;get out|
00004d70  20 6f 66 20 68 65 72 65  21 0a 0a 0a 0a 20 20 20  | of here!....   |
00004d80  20 20 20 20 20 45 4e 44  0a                       |     END.|
00004d89