Home » Archimedes archive » Archimedes World » AW-1996-06-Disc 1.adf » !AcornAns_AcornAns » !Scape2/s/dith

!Scape2/s/dith

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-1996-06-Disc 1.adf » !AcornAns_AcornAns
Filename: !Scape2/s/dith
Read OK:
File size: 460E bytes
Load address: 0000
Exec address: 0000
Duplicates

There are 2 duplicate copies of this file in the archive:

File contents
; 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 (32bpp),
; 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
	LDR	gwi_m1, [gwi_sp, #0]
        AND     gwi_r, gwi_m1, #255	;from here . . .
        MOV     gwi_g, gwi_m1, LSR #8
        AND     gwi_g, gwi_g, #255
        MOV     gwi_b, gwi_m1, LSR #16
        AND     gwi_b, gwi_b, #255	;to here, extract three r,g & b 8 bit components into _r, _g & _b
        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, #4		;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
	ADD     gwi_sp, gwi_sp, gwi_xp, LSL #2	;from here . . .
        SUB     gwi_sp, gwi_sp, #4		;to here, as above for src image (note, it has 4*xp bytes per row)

        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
	LDR	gwi_m1, [gwi_sp, #0]
        AND     gwi_r, gwi_m1, #255	;from here . . .
        MOV     gwi_g, gwi_m1, LSR #8
        AND     gwi_g, gwi_g, #255
        MOV     gwi_b, gwi_m1, LSR #16
        AND     gwi_b, gwi_b, #255	;to here, extract three r,g & b 8 bit components into _r, _g & _b

        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, #4
        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
	ADD     gwi_sp, gwi_sp, gwi_xp, LSL #2
        ADD     gwi_sp, gwi_sp, #4		;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
	LDR	gwi_m1, [gwi_sp, #0]
        AND     gwi_r, gwi_m1, #255	;from here . . .
        MOV     gwi_g, gwi_m1, LSR #8
        AND     gwi_g, gwi_g, #255
        MOV     gwi_b, gwi_m1, LSR #16
        AND     gwi_b, gwi_b, #255	;to here, extract three r,g & b 8 bit components into _r, _g & _b

        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, #4
        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
	ADD     gwi_sp, gwi_sp, gwi_xp, LSL #2
        SUB     gwi_sp, gwi_sp, #4	;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 3b 20 67 32 35 36 77  6e 70 5f 69 6e 74 65 72  |.; g256wnp_inter|
00000010  6e 61 6c 0a 3b 20 61 20  6c 65 61 66 20 41 50 43  |nal.; a leaf APC|
00000020  53 20 66 75 6e 63 74 69  6f 6e 0a 3b 20 74 6f 20  |S function.; to |
00000030  64 69 74 68 65 72 20 66  72 6f 6d 20 73 6f 75 72  |dither from sour|
00000040  63 65 20 74 6f 20 64 65  73 74 69 6e 61 74 69 6f  |ce to destinatio|
00000050  6e 20 73 70 72 69 74 65  0a 3b 0a 3b 20 43 20 70  |n sprite.;.; C p|
00000060  72 6f 74 6f 74 79 70 65  0a 3b 20 76 6f 69 64 20  |rototype.; void |
00000070  67 32 35 36 77 6e 70 5f  69 6e 74 65 72 6e 61 6c  |g256wnp_internal|
00000080  28 69 6e 74 20 78 2c 20  69 6e 74 20 79 2c 20 63  |(int x, int y, c|
00000090  68 61 72 20 2a 64 70 2c  20 63 68 61 72 20 2a 73  |har *dp, char *s|
000000a0  70 2c 20 63 6f 6d 70 61  63 74 5f 64 69 74 68 65  |p, compact_dithe|
000000b0  72 5f 65 72 72 6f 72 20  2a 64 65 2c 20 63 68 61  |r_error *de, cha|
000000c0  72 20 2a 6c 75 74 2c 20  75 6e 73 69 67 6e 65 64  |r *lut, unsigned|
000000d0  20 69 6e 74 20 2a 70 61  6c 32 35 36 64 65 66 29  | int *pal256def)|
000000e0  0a 3b 20 78 20 69 73 20  73 70 72 69 74 65 20 77  |.; x is sprite w|
000000f0  69 64 74 68 20 69 6e 20  70 69 78 65 6c 73 2c 20  |idth in pixels, |
00000100  79 20 69 73 20 68 65 69  67 68 74 20 69 6e 20 70  |y is height in p|
00000110  69 78 65 6c 73 2c 0a 3b  20 64 70 20 70 74 73 20  |ixels,.; dp pts |
00000120  74 6f 20 64 65 73 74 69  6e 61 74 69 6f 6e 20 73  |to destination s|
00000130  70 72 69 74 65 20 69 6d  61 67 65 20 28 38 62 70  |prite image (8bp|
00000140  70 29 2c 0a 3b 20 73 70  20 70 74 73 20 74 6f 20  |p),.; sp pts to |
00000150  73 6f 75 72 63 65 20 69  6d 61 67 65 20 28 33 32  |source image (32|
00000160  62 70 70 29 2c 0a 3b 20  64 65 20 70 74 73 20 74  |bpp),.; de pts t|
00000170  6f 20 6c 69 6e 65 20 62  75 66 66 65 72 20 74 6f  |o line buffer to|
00000180  20 68 6f 6c 64 20 63 6f  6d 70 61 63 74 5f 64 69  | hold compact_di|
00000190  74 68 65 72 5f 65 72 72  6f 72 73 20 28 65 61 63  |ther_errors (eac|
000001a0  68 20 6f 66 20 66 6f 72  6d 20 65 72 2c 65 67 2c  |h of form er,eg,|
000001b0  65 62 2c 62 79 74 65 2d  74 6f 2d 70 61 64 20 2d  |eb,byte-to-pad -|
000001c0  20 61 6c 6c 20 73 69 67  6e 65 64 20 63 68 61 72  | all signed char|
000001d0  73 29 2c 0a 3b 20 6c 75  74 20 70 74 73 20 74 6f  |s),.; lut pts to|
000001e0  20 33 32 37 36 38 20 62  79 74 65 20 6c 6f 6f 6b  | 32768 byte look|
000001f0  20 75 70 20 74 61 62 6c  65 20 74 6f 20 6d 61 70  | up table to map|
00000200  20 31 35 20 62 69 74 20  72 62 67 20 63 6f 6c 6f  | 15 bit rbg colo|
00000210  75 72 20 74 6f 20 6e 65  61 72 65 73 74 20 61 76  |ur to nearest av|
00000220  61 69 6c 61 62 6c 65 20  63 6f 6c 6f 75 72 20 6e  |ailable colour n|
00000230  75 6d 62 65 72 20 69 6e  20 64 65 66 61 75 6c 74  |umber in default|
00000240  20 70 61 6c 65 74 74 65  2c 0a 3b 20 70 61 6c 32  | palette,.; pal2|
00000250  35 36 64 65 66 20 70 74  73 20 74 6f 20 32 35 36  |56def pts to 256|
00000260  20 69 6e 74 20 6c 69 73  74 20 6f 66 20 64 65 66  | int list of def|
00000270  61 75 6c 74 20 70 61 6c  65 74 74 65 0a 3b 0a 0a  |ault palette.;..|
00000280  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000290  5e 20 20 20 20 20 20 20  34 2c 20 66 70 0a 64 78  |^       4, fp.dx|
000002a0  70 20 20 20 20 20 20 20  20 20 20 20 20 20 23 20  |p             # |
000002b0  20 20 20 20 20 20 34 0a  64 79 70 20 20 20 20 20  |      4.dyp     |
000002c0  20 20 20 20 20 20 20 20  23 20 20 20 20 20 20 20  |        #       |
000002d0  34 0a 64 64 70 20 20 20  20 20 20 20 20 20 20 20  |4.ddp           |
000002e0  20 20 23 20 20 20 20 20  20 20 34 0a 64 73 70 20  |  #       4.dsp |
000002f0  20 20 20 20 20 20 20 20  20 20 20 20 23 20 20 20  |            #   |
00000300  20 20 20 20 34 0a 64 64  65 20 20 20 20 20 20 20  |    4.dde       |
00000310  20 20 20 20 20 20 23 20  20 20 20 20 20 20 34 0a  |      #       4.|
00000320  64 6c 75 74 20 20 20 20  20 20 20 20 20 20 20 20  |dlut            |
00000330  23 20 20 20 20 20 20 20  34 0a 64 70 61 6c 32 35  |#       4.dpal25|
00000340  36 64 65 66 20 20 20 20  20 20 23 20 20 20 20 20  |6def      #     |
00000350  20 20 34 0a 0a 67 77 69  5f 78 70 20 20 20 20 20  |  4..gwi_xp     |
00000360  20 20 20 20 20 52 4e 20  20 20 20 20 20 72 30 0a  |     RN      r0.|
00000370  67 77 69 5f 79 70 20 20  20 20 20 20 20 20 20 20  |gwi_yp          |
00000380  52 4e 20 20 20 20 20 20  72 31 20 20 20 20 20 20  |RN      r1      |
00000390  3b 6e 62 20 61 6c 73 6f  20 69 73 20 67 77 69 5f  |;nb also is gwi_|
000003a0  6d 34 0a 67 77 69 5f 6d  34 20 20 20 20 20 20 20  |m4.gwi_m4       |
000003b0  20 20 20 52 4e 20 20 20  20 20 20 72 31 20 20 20  |   RN      r1   |
000003c0  20 20 20 3b 6e 62 20 61  6c 73 6f 20 69 73 20 67  |   ;nb also is g|
000003d0  77 69 5f 79 70 0a 67 77  69 5f 64 70 20 20 20 20  |wi_yp.gwi_dp    |
000003e0  20 20 20 20 20 20 52 4e  20 20 20 20 20 20 72 32  |      RN      r2|
000003f0  0a 67 77 69 5f 73 70 20  20 20 20 20 20 20 20 20  |.gwi_sp         |
00000400  20 52 4e 20 20 20 20 20  20 72 33 0a 67 77 69 5f  | RN      r3.gwi_|
00000410  64 65 20 20 20 20 20 20  20 20 20 20 52 4e 20 20  |de          RN  |
00000420  20 20 20 20 72 34 0a 67  77 69 5f 6c 75 74 20 20  |    r4.gwi_lut  |
00000430  20 20 20 20 20 20 20 52  4e 20 20 20 20 20 20 72  |       RN      r|
00000440  35 0a 67 77 69 5f 70 61  6c 32 35 36 64 65 66 20  |5.gwi_pal256def |
00000450  20 20 52 4e 20 20 20 20  20 20 72 36 0a 67 77 69  |  RN      r6.gwi|
00000460  5f 72 20 20 20 20 20 20  20 20 20 20 20 52 4e 20  |_r           RN |
00000470  20 20 20 20 20 72 37 0a  67 77 69 5f 67 20 20 20  |     r7.gwi_g   |
00000480  20 20 20 20 20 20 20 20  52 4e 20 20 20 20 20 20  |        RN      |
00000490  72 38 0a 67 77 69 5f 62  20 20 20 20 20 20 20 20  |r8.gwi_b        |
000004a0  20 20 20 52 4e 20 20 20  20 20 20 72 39 0a 67 77  |   RN      r9.gw|
000004b0  69 5f 69 20 20 20 20 20  20 20 20 20 20 20 52 4e  |i_i           RN|
000004c0  20 20 20 20 20 20 72 31  30 0a 67 77 69 5f 6d 33  |      r10.gwi_m3|
000004d0  20 20 20 20 20 20 20 20  20 20 52 4e 20 20 20 20  |          RN    |
000004e0  20 20 72 31 31 20 20 20  20 20 3b 6e 62 20 61 6c  |  r11     ;nb al|
000004f0  73 6f 20 69 73 20 66 70  0a 67 77 69 5f 6d 32 20  |so is fp.gwi_m2 |
00000500  20 20 20 20 20 20 20 20  20 52 4e 20 20 20 20 20  |         RN     |
00000510  20 72 31 32 0a 67 77 69  5f 6d 31 20 20 20 20 20  | r12.gwi_m1     |
00000520  20 20 20 20 20 52 4e 20  20 20 20 20 20 72 31 33  |     RN      r13|
00000530  0a 67 77 69 5f 6c 64 65  20 20 20 20 20 20 20 20  |.gwi_lde        |
00000540  20 52 4e 20 20 20 20 20  20 72 31 34 0a 0a 20 20  | RN      r14..  |
00000550  20 20 20 20 20 20 41 53  53 45 52 54 20 20 67 77  |      ASSERT  gw|
00000560  69 5f 6d 31 3e 67 77 69  5f 6d 32 20 3a 4c 41 4e  |i_m1>gwi_m2 :LAN|
00000570  44 3a 20 67 77 69 5f 6d  32 3e 67 77 69 5f 6d 33  |D: gwi_m2>gwi_m3|
00000580  20 3a 4c 41 4e 44 3a 20  67 77 69 5f 6d 33 3e 67  | :LAND: gwi_m3>g|
00000590  77 69 5f 6d 34 0a 09 09  09 09 3b 4e 6f 74 65 2c  |wi_m4.....;Note,|
000005a0  20 73 63 61 6e 6e 69 6e  67 20 6f 66 20 69 6d 61  | scanning of ima|
000005b0  67 65 20 69 73 20 64 6f  6e 65 20 69 6e 20 61 20  |ge is done in a |
000005c0  73 65 72 70 65 6e 74 69  6e 65 20 66 61 73 68 69  |serpentine fashi|
000005d0  6f 6e 20 74 6f 20 72 65  64 75 63 65 20 64 69 74  |on to reduce dit|
000005e0  68 65 72 0a 09 09 09 09  3b 70 61 74 74 65 72 6e  |her.....;pattern|
000005f0  20 65 66 66 65 63 74 73  2c 20 26 20 74 6f 20 6d  | effects, & to m|
00000600  61 69 6e 74 61 69 6e 20  73 70 65 65 64 20 74 68  |aintain speed th|
00000610  65 20 6d 61 69 6e 20 70  72 6f 63 65 73 73 69 6e  |e main processin|
00000620  67 20 63 6f 64 65 20 69  73 20 72 65 70 6c 69 63  |g code is replic|
00000630  61 74 65 64 2c 0a 20 20  20 20 20 20 20 20 4d 41  |ated,.        MA|
00000640  43 52 4f 09 09 09 3b 6d  6f 72 65 20 6f 72 20 6c  |CRO...;more or l|
00000650  65 73 73 2c 20 74 68 72  65 65 20 74 69 6d 65 73  |ess, three times|
00000660  3a 20 31 73 74 20 74 6f  20 73 63 61 6e 20 74 68  |: 1st to scan th|
00000670  65 20 74 6f 70 20 72 6f  77 20 28 66 6f 72 20 77  |e top row (for w|
00000680  68 69 63 68 20 77 65 20  68 61 76 65 20 6e 6f 0a  |hich we have no.|
00000690  24 6c 61 62 65 6c 20 20  67 77 69 5f 73 65 67 31  |$label  gwi_seg1|
000006a0  09 09 3b 70 72 65 63 61  6c 63 75 6c 61 74 65 64  |..;precalculated|
000006b0  20 65 72 72 6f 72 73 20  66 72 6f 6d 20 61 20 72  | errors from a r|
000006c0  6f 77 20 61 62 6f 76 65  29 2c 20 26 20 74 68 65  |ow above), & the|
000006d0  6e 20 74 77 69 63 65 20  6d 6f 72 65 2c 20 6f 6e  |n twice more, on|
000006e0  63 65 20 74 6f 20 73 63  61 6e 20 6f 64 64 0a 09  |ce to scan odd..|
000006f0  09 09 09 3b 72 6f 77 73  20 72 69 67 68 74 20 74  |...;rows right t|
00000700  6f 20 6c 65 66 74 20 26  20 6f 6e 63 65 20 66 6f  |o left & once fo|
00000710  72 20 73 63 61 6e 6e 69  6e 67 20 65 76 65 6e 20  |r scanning even |
00000720  72 6f 77 73 20 6c 65 66  74 20 74 6f 20 72 69 67  |rows left to rig|
00000730  68 74 2e 0a 09 09 09 09  3b 54 68 69 73 20 6d 61  |ht......;This ma|
00000740  63 72 6f 20 63 6f 6e 74  61 69 6e 73 20 63 6f 64  |cro contains cod|
00000750  65 20 63 6f 6d 6d 6f 6e  20 74 6f 20 65 61 63 68  |e common to each|
00000760  20 6f 66 20 74 68 65 20  74 68 72 65 65 20 69 6e  | of the three in|
00000770  63 69 64 65 6e 74 73 20  2d 20 69 74 20 69 73 0a  |cidents - it is.|
00000780  09 09 09 09 3b 65 6e 74  65 72 65 64 20 77 69 74  |....;entered wit|
00000790  68 20 67 77 69 5f 72 2c  20 5f 67 20 26 20 5f 62  |h gwi_r, _g & _b|
000007a0  20 63 6f 6e 74 61 69 6e  69 6e 67 20 74 68 65 20  | containing the |
000007b0  64 65 73 69 72 65 64 20  64 65 73 74 69 6e 61 74  |desired destinat|
000007c0  69 6f 6e 20 63 6f 6c 6f  75 72 0a 09 09 09 09 3b  |ion colour.....;|
000007d0  28 69 6e 63 6c 75 64 69  6e 67 20 61 6e 79 20 65  |(including any e|
000007e0  72 72 6f 72 20 74 65 72  6d 73 20 61 64 64 65 64  |rror terms added|
000007f0  20 69 6e 29 2c 20 26 20  69 74 20 77 72 69 74 65  | in), & it write|
00000800  73 20 74 6f 20 64 65 73  74 69 6e 61 74 69 6f 6e  |s to destination|
00000810  20 69 6d 61 67 65 20 74  68 65 0a 09 09 09 09 3b  | image the.....;|
00000820  6e 65 61 72 65 73 74 20  63 6f 6c 6f 75 72 20 61  |nearest colour a|
00000830  76 61 69 6c 61 62 6c 65  2c 20 74 68 65 6e 20 63  |vailable, then c|
00000840  61 6c 63 75 6c 61 74 65  73 20 74 68 65 20 65 72  |alculates the er|
00000850  72 6f 72 20 74 65 72 6d  20 66 6f 72 20 74 68 69  |ror term for thi|
00000860  73 20 70 69 78 65 6c 20  69 6e 0a 09 09 09 09 3b  |s pixel in.....;|
00000870  67 77 69 5f 6c 64 65 20  28 6c 61 73 74 20 64 69  |gwi_lde (last di|
00000880  74 68 65 72 20 65 72 72  6f 72 29 2e 0a 24 6c 61  |ther error)..$la|
00000890  62 65 6c 20 20 4d 4f 56  20 20 20 20 20 67 77 69  |bel  MOV     gwi|
000008a0  5f 6d 31 2c 20 67 77 69  5f 72 2c 20 41 53 52 20  |_m1, gwi_r, ASR |
000008b0  23 33 09 3b 66 72 6f 6d  20 68 65 72 65 20 2e 20  |#3.;from here . |
000008c0  2e 20 2e 0a 20 20 20 20  20 20 20 20 43 4d 50 20  |. ..        CMP |
000008d0  20 20 20 20 67 77 69 5f  72 2c 20 23 32 35 35 0a  |    gwi_r, #255.|
000008e0  20 20 20 20 20 20 20 20  4d 4f 56 47 54 20 20 20  |        MOVGT   |
000008f0  67 77 69 5f 6d 31 2c 20  23 33 31 0a 20 20 20 20  |gwi_m1, #31.    |
00000900  20 20 20 20 43 4d 50 20  20 20 20 20 67 77 69 5f  |    CMP     gwi_|
00000910  72 2c 20 23 30 0a 20 20  20 20 20 20 20 20 4d 4f  |r, #0.        MO|
00000920  56 4c 54 20 20 20 67 77  69 5f 6d 31 2c 20 23 30  |VLT   gwi_m1, #0|
00000930  09 09 3b 74 6f 20 68 65  72 65 2c 20 72 6f 75 6e  |..;to here, roun|
00000940  64 20 72 20 63 6f 6d 70  6f 6e 65 6e 74 20 64 6f  |d r component do|
00000950  77 6e 20 74 6f 20 35 20  62 69 74 73 20 26 20 63  |wn to 5 bits & c|
00000960  6c 69 70 20 74 6f 20 30  2d 33 31 20 28 69 6e 74  |lip to 0-31 (int|
00000970  6f 20 5f 6d 31 20 62 69  74 73 20 30 2d 34 29 0a  |o _m1 bits 0-4).|
00000980  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00000990  67 77 69 5f 6d 32 2c 20  67 77 69 5f 67 2c 20 41  |gwi_m2, gwi_g, A|
000009a0  53 52 20 23 33 0a 20 20  20 20 20 20 20 20 43 4d  |SR #3.        CM|
000009b0  50 20 20 20 20 20 67 77  69 5f 67 2c 20 23 32 35  |P     gwi_g, #25|
000009c0  35 0a 20 20 20 20 20 20  20 20 4d 4f 56 47 54 20  |5.        MOVGT |
000009d0  20 20 67 77 69 5f 6d 32  2c 20 23 33 31 0a 20 20  |  gwi_m2, #31.  |
000009e0  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 67 77  |      CMP     gw|
000009f0  69 5f 67 2c 20 23 30 0a  20 20 20 20 20 20 20 20  |i_g, #0.        |
00000a00  4d 4f 56 4c 54 20 20 20  67 77 69 5f 6d 32 2c 20  |MOVLT   gwi_m2, |
00000a10  23 30 0a 20 20 20 20 20  20 20 20 41 44 44 20 20  |#0.        ADD  |
00000a20  20 20 20 67 77 69 5f 6d  31 2c 20 67 77 69 5f 6d  |   gwi_m1, gwi_m|
00000a30  31 2c 20 67 77 69 5f 6d  32 2c 20 41 53 4c 20 23  |1, gwi_m2, ASL #|
00000a40  35 09 3b 61 73 20 61 62  6f 76 65 2c 20 66 6f 72  |5.;as above, for|
00000a50  20 67 20 63 6f 6d 70 6f  6e 65 6e 74 2c 20 69 6e  | g component, in|
00000a60  74 6f 20 5f 6d 31 20 62  69 74 73 20 35 2d 39 0a  |to _m1 bits 5-9.|
00000a70  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00000a80  67 77 69 5f 6d 32 2c 20  67 77 69 5f 62 2c 20 41  |gwi_m2, gwi_b, A|
00000a90  53 52 20 23 33 0a 20 20  20 20 20 20 20 20 43 4d  |SR #3.        CM|
00000aa0  50 20 20 20 20 20 67 77  69 5f 62 2c 20 23 32 35  |P     gwi_b, #25|
00000ab0  35 0a 20 20 20 20 20 20  20 20 4d 4f 56 47 54 20  |5.        MOVGT |
00000ac0  20 20 67 77 69 5f 6d 32  2c 20 23 33 31 0a 20 20  |  gwi_m2, #31.  |
00000ad0  20 20 20 20 20 20 43 4d  50 20 20 20 20 20 67 77  |      CMP     gw|
00000ae0  69 5f 62 2c 20 23 30 0a  20 20 20 20 20 20 20 20  |i_b, #0.        |
00000af0  4d 4f 56 4c 54 20 20 20  67 77 69 5f 6d 32 2c 20  |MOVLT   gwi_m2, |
00000b00  23 30 0a 20 20 20 20 20  20 20 20 41 44 44 20 20  |#0.        ADD  |
00000b10  20 20 20 67 77 69 5f 6d  31 2c 20 67 77 69 5f 6d  |   gwi_m1, gwi_m|
00000b20  31 2c 20 67 77 69 5f 6d  32 2c 20 41 53 4c 20 23  |1, gwi_m2, ASL #|
00000b30  31 30 09 3b 61 73 20 61  62 6f 76 65 2c 20 66 6f  |10.;as above, fo|
00000b40  72 20 62 20 63 6f 6d 70  6f 6e 65 6e 74 2c 20 69  |r b component, i|
00000b50  6e 74 6f 20 5f 6d 31 20  62 69 74 73 20 31 30 2d  |nto _m1 bits 10-|
00000b60  31 34 0a 09 09 09 09 09  3b 69 65 20 5f 6d 31 20  |14......;ie _m1 |
00000b70  69 73 20 6e 6f 77 20 74  68 65 20 64 65 73 69 72  |is now the desir|
00000b80  65 64 20 31 35 20 62 69  74 73 20 72 67 62 20 63  |ed 15 bits rgb c|
00000b90  6f 6c 6f 75 72 0a 20 20  20 20 20 20 20 20 4c 44  |olour.        LD|
00000ba0  52 42 20 20 20 20 67 77  69 5f 6d 31 2c 20 5b 67  |RB    gwi_m1, [g|
00000bb0  77 69 5f 6c 75 74 2c 20  67 77 69 5f 6d 31 5d 09  |wi_lut, gwi_m1].|
00000bc0  3b 73 65 74 20 5f 6d 31  20 74 6f 20 6e 75 6d 62  |;set _m1 to numb|
00000bd0  65 72 20 6f 66 20 6e 65  61 72 65 73 74 20 61 76  |er of nearest av|
00000be0  61 69 6c 61 62 6c 65 20  63 6f 6c 6f 75 72 20 76  |ailable colour v|
00000bf0  69 61 20 61 20 6c 6f 6f  6b 20 75 70 20 74 61 62  |ia a look up tab|
00000c00  6c 65 0a 20 20 20 20 20  20 20 20 53 54 52 42 20  |le.        STRB |
00000c10  20 20 20 67 77 69 5f 6d  31 2c 20 5b 67 77 69 5f  |   gwi_m1, [gwi_|
00000c20  64 70 2c 20 23 30 5d 09  09 3b 77 72 69 74 65 20  |dp, #0]..;write |
00000c30  74 68 69 73 20 74 6f 20  64 65 73 74 69 6e 61 74  |this to destinat|
00000c40  69 6f 6e 20 69 6d 61 67  65 0a 20 20 20 20 20 20  |ion image.      |
00000c50  20 20 4c 44 52 20 20 20  20 20 67 77 69 5f 6d 31  |  LDR     gwi_m1|
00000c60  2c 20 5b 67 77 69 5f 70  61 6c 32 35 36 64 65 66  |, [gwi_pal256def|
00000c70  2c 20 67 77 69 5f 6d 31  2c 20 41 53 4c 20 23 32  |, gwi_m1, ASL #2|
00000c80  5d 09 3b 72 65 61 64 20  74 68 65 20 32 34 20 62  |].;read the 24 b|
00000c90  69 74 20 72 67 62 20 76  61 6c 75 65 20 6f 66 20  |it rgb value of |
00000ca0  74 68 65 20 63 6f 6c 6f  75 72 20 6a 75 73 74 20  |the colour just |
00000cb0  77 72 69 74 74 65 6e 0a  20 20 20 20 20 20 20 20  |written.        |
00000cc0  4d 4f 56 20 20 20 20 20  67 77 69 5f 6d 32 2c 20  |MOV     gwi_m2, |
00000cd0  67 77 69 5f 6d 31 2c 20  4c 53 4c 20 23 31 36 09  |gwi_m1, LSL #16.|
00000ce0  09 3b 66 72 6f 6d 20 68  65 72 65 20 2e 20 2e 20  |.;from here . . |
00000cf0  2e 0a 09 53 55 42 09 67  77 69 5f 6d 33 2c 20 67  |...SUB.gwi_m3, g|
00000d00  77 69 5f 72 2c 20 67 77  69 5f 6d 32 2c 20 4c 53  |wi_r, gwi_m2, LS|
00000d10  52 20 23 32 34 0a 20 20  20 20 20 20 20 20 43 4d  |R #24.        CM|
00000d20  50 20 20 20 20 20 67 77  69 5f 6d 33 2c 20 23 31  |P     gwi_m3, #1|
00000d30  32 37 0a 20 20 20 20 20  20 20 20 4d 4f 56 47 54  |27.        MOVGT|
00000d40  20 20 20 67 77 69 5f 6d  33 2c 20 23 31 32 37 0a  |   gwi_m3, #127.|
00000d50  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
00000d60  67 77 69 5f 6d 33 2c 20  23 2d 31 32 37 0a 20 20  |gwi_m3, #-127.  |
00000d70  20 20 20 20 20 20 4d 4f  56 4c 54 20 20 20 67 77  |      MOVLT   gw|
00000d80  69 5f 6d 33 2c 20 23 2d  31 32 37 0a 20 20 20 20  |i_m3, #-127.    |
00000d90  20 20 20 20 41 4e 44 20  20 20 20 20 67 77 69 5f  |    AND     gwi_|
00000da0  6d 33 2c 20 67 77 69 5f  6d 33 2c 20 23 32 35 35  |m3, gwi_m3, #255|
00000db0  09 09 3b 74 6f 20 68 65  72 65 2c 20 63 61 6c 63  |..;to here, calc|
00000dc0  20 28 64 65 73 69 72 65  64 20 72 65 64 29 2d 28  | (desired red)-(|
00000dd0  75 73 65 64 20 72 65 64  29 2c 20 26 20 63 6c 69  |used red), & cli|
00000de0  70 20 74 6f 20 61 20 73  69 67 6e 65 64 20 38 20  |p to a signed 8 |
00000df0  62 69 74 20 76 61 6c 75  65 0a 20 20 20 20 20 20  |bit value.      |
00000e00  20 20 4d 4f 56 20 20 20  20 20 67 77 69 5f 6d 32  |  MOV     gwi_m2|
00000e10  2c 20 67 77 69 5f 6d 31  2c 20 4c 53 4c 20 23 38  |, gwi_m1, LSL #8|
00000e20  0a 20 20 20 20 20 20 20  20 53 55 42 20 20 20 20  |.        SUB    |
00000e30  20 67 77 69 5f 6d 32 2c  20 67 77 69 5f 67 2c 20  | gwi_m2, gwi_g, |
00000e40  67 77 69 5f 6d 32 2c 20  4c 53 52 20 23 32 34 0a  |gwi_m2, LSR #24.|
00000e50  20 20 20 20 20 20 20 20  43 4d 50 20 20 20 20 20  |        CMP     |
00000e60  67 77 69 5f 6d 32 2c 20  23 31 32 37 0a 20 20 20  |gwi_m2, #127.   |
00000e70  20 20 20 20 20 4d 4f 56  47 54 20 20 20 67 77 69  |     MOVGT   gwi|
00000e80  5f 6d 32 2c 20 23 31 32  37 0a 20 20 20 20 20 20  |_m2, #127.      |
00000e90  20 20 43 4d 50 20 20 20  20 20 67 77 69 5f 6d 32  |  CMP     gwi_m2|
00000ea0  2c 20 23 2d 31 32 37 0a  20 20 20 20 20 20 20 20  |, #-127.        |
00000eb0  4d 4f 56 4c 54 20 20 20  67 77 69 5f 6d 32 2c 20  |MOVLT   gwi_m2, |
00000ec0  23 2d 31 32 37 0a 20 20  20 20 20 20 20 20 41 4e  |#-127.        AN|
00000ed0  44 20 20 20 20 20 67 77  69 5f 6d 32 2c 20 67 77  |D     gwi_m2, gw|
00000ee0  69 5f 6d 32 2c 20 23 32  35 35 0a 20 20 20 20 20  |i_m2, #255.     |
00000ef0  20 20 20 41 44 44 20 20  20 20 20 67 77 69 5f 6d  |   ADD     gwi_m|
00000f00  33 2c 20 67 77 69 5f 6d  33 2c 20 67 77 69 5f 6d  |3, gwi_m3, gwi_m|
00000f10  32 2c 20 4c 53 4c 20 23  38 09 3b 61 73 20 61 62  |2, LSL #8.;as ab|
00000f20  6f 76 65 2c 20 66 6f 72  20 67 72 65 65 6e 2c 20  |ove, for green, |
00000f30  69 6e 73 65 72 74 69 6e  67 20 74 68 65 20 65 72  |inserting the er|
00000f40  72 6f 72 20 69 6e 74 6f  20 63 6f 72 72 65 63 74  |ror into correct|
00000f50  20 62 69 74 73 20 69 6e  20 5f 6d 33 0a 20 20 20  | bits in _m3.   |
00000f60  20 20 20 20 20 53 55 42  20 20 20 20 20 67 77 69  |     SUB     gwi|
00000f70  5f 6d 32 2c 20 67 77 69  5f 62 2c 20 67 77 69 5f  |_m2, gwi_b, gwi_|
00000f80  6d 31 2c 20 4c 53 52 20  23 32 34 0a 20 20 20 20  |m1, LSR #24.    |
00000f90  20 20 20 20 43 4d 50 20  20 20 20 20 67 77 69 5f  |    CMP     gwi_|
00000fa0  6d 32 2c 20 23 31 32 37  0a 20 20 20 20 20 20 20  |m2, #127.       |
00000fb0  20 4d 4f 56 47 54 20 20  20 67 77 69 5f 6d 32 2c  | MOVGT   gwi_m2,|
00000fc0  20 23 31 32 37 0a 20 20  20 20 20 20 20 20 43 4d  | #127.        CM|
00000fd0  50 20 20 20 20 20 67 77  69 5f 6d 32 2c 20 23 2d  |P     gwi_m2, #-|
00000fe0  31 32 37 0a 20 20 20 20  20 20 20 20 4d 4f 56 4c  |127.        MOVL|
00000ff0  54 20 20 20 67 77 69 5f  6d 32 2c 20 23 2d 31 32  |T   gwi_m2, #-12|
00001000  37 0a 20 20 20 20 20 20  20 20 41 4e 44 20 20 20  |7.        AND   |
00001010  20 20 67 77 69 5f 6d 32  2c 20 67 77 69 5f 6d 32  |  gwi_m2, gwi_m2|
00001020  2c 20 23 32 35 35 0a 20  20 20 20 20 20 20 20 41  |, #255.        A|
00001030  44 44 20 20 20 20 20 67  77 69 5f 6c 64 65 2c 20  |DD     gwi_lde, |
00001040  67 77 69 5f 6d 33 2c 20  67 77 69 5f 6d 32 2c 20  |gwi_m3, gwi_m2, |
00001050  4c 53 4c 20 23 31 36 09  3b 61 73 20 61 62 6f 76  |LSL #16.;as abov|
00001060  65 2c 20 66 6f 72 20 62  6c 75 65 20 2d 20 5f 6c  |e, for blue - _l|
00001070  64 65 20 6e 6f 77 20 68  6f 6c 64 73 20 61 6c 6c  |de now holds all|
00001080  20 74 68 72 65 65 20 73  69 67 6e 65 64 0a 09 09  | three signed...|
00001090  09 09 09 09 09 3b 38 20  62 69 74 20 65 72 72 6f  |.....;8 bit erro|
000010a0  72 20 74 65 72 6d 73 0a  20 20 20 20 20 20 20 20  |r terms.        |
000010b0  4d 45 4e 44 0a 0a 67 77  69 5f 61 73 6c 20 44 43  |MEND..gwi_asl DC|
000010c0  44 20 20 20 20 20 30 09  09 09 09 09 3b 73 74 6f  |D     0.....;sto|
000010d0  72 61 67 65 20 66 6f 72  20 73 6c 2c 20 66 70 20  |rage for sl, fp |
000010e0  26 20 73 70 2c 20 64 75  72 69 6e 67 20 69 6e 74  |& sp, during int|
000010f0  65 72 6e 61 6c 20 63 61  6c 63 73 0a 67 77 69 5f  |ernal calcs.gwi_|
00001100  61 66 70 20 44 43 44 20  20 20 20 20 30 0a 67 77  |afp DCD     0.gw|
00001110  69 5f 61 73 70 20 44 43  44 20 20 20 20 20 30 0a  |i_asp DCD     0.|
00001120  0a 67 77 69 5f 61 6a 20  20 20 20 20 20 20 20 20  |.gwi_aj         |
00001130  20 44 43 44 20 20 20 20  20 30 09 09 09 09 3b 63  | DCD     0....;c|
00001140  75 72 72 65 6e 74 20 72  6f 77 20 6e 75 6d 62 65  |urrent row numbe|
00001150  72 0a 0a 20 20 20 20 20  20 20 20 45 58 50 4f 52  |r..        EXPOR|
00001160  54 20 20 67 32 35 36 77  6e 70 5f 69 6e 74 65 72  |T  g256wnp_inter|
00001170  6e 61 6c 0a 0a 67 77 69  6e 73 74 61 20 44 43 42  |nal..gwinsta DCB|
00001180  20 20 20 20 20 22 67 32  35 36 77 6e 70 5f 69 6e  |     "g256wnp_in|
00001190  74 65 72 6e 61 6c 22 2c  20 30 0a 20 20 20 20 20  |ternal", 0.     |
000011a0  20 20 20 41 4c 49 47 4e  0a 67 77 69 6e 65 6e 64  |   ALIGN.gwinend|
000011b0  20 44 43 44 20 20 20 20  20 26 66 66 30 30 30 30  | DCD     &ff0000|
000011c0  30 30 20 2b 20 67 77 69  6e 65 6e 64 20 2d 20 67  |00 + gwinend - g|
000011d0  77 69 6e 73 74 61 0a 0a  67 32 35 36 77 6e 70 5f  |winsta..g256wnp_|
000011e0  69 6e 74 65 72 6e 61 6c  0a 0a 20 20 20 20 20 20  |internal..      |
000011f0  20 20 4d 4f 56 20 20 20  20 20 69 70 2c 20 73 70  |  MOV     ip, sp|
00001200  0a 20 20 20 20 20 20 20  20 53 54 4d 46 44 20 20  |.        STMFD  |
00001210  20 73 70 21 2c 20 7b 61  31 2d 61 34 7d 09 09 3b  | sp!, {a1-a4}..;|
00001220  73 74 61 63 6b 20 66 6e  20 61 72 67 73 20 78 2c  |stack fn args x,|
00001230  79 2c 64 70 20 26 20 73  70 20 6f 6e 74 6f 20 73  |y,dp & sp onto s|
00001240  74 61 63 6b 20 62 65 6c  6f 77 20 72 65 6d 61 69  |tack below remai|
00001250  6e 69 6e 67 20 61 72 67  73 20 64 65 2c 6c 75 74  |ning args de,lut|
00001260  20 26 20 70 61 6c 32 35  36 64 65 66 0a 20 20 20  | & pal256def.   |
00001270  20 20 20 20 20 53 54 4d  46 44 20 20 20 73 70 21  |     STMFD   sp!|
00001280  2c 20 7b 72 34 2d 72 39  2c 20 66 70 2c 20 69 70  |, {r4-r9, fp, ip|
00001290  2c 20 6c 72 2c 20 70 63  7d 0a 20 20 20 20 20 20  |, lr, pc}.      |
000012a0  20 20 53 55 42 20 20 20  20 20 66 70 2c 20 69 70  |  SUB     fp, ip|
000012b0  2c 20 23 32 30 20 20 20  20 20 20 20 20 20 20 20  |, #20           |
000012c0  20 20 3b 6c 65 61 66 20  66 6e 20 26 20 6c 69 74  |  ;leaf fn & lit|
000012d0  74 6c 65 20 6e 65 65 64  20 6f 66 20 73 74 61 63  |tle need of stac|
000012e0  6b 2c 20 73 6f 20 64 6f  6e 27 74 20 62 6f 74 68  |k, so don't both|
000012f0  65 72 20 77 69 74 68 20  73 74 61 63 6b 20 63 68  |er with stack ch|
00001300  65 63 6b 69 6e 67 0a 0a  20 20 20 20 20 20 20 20  |ecking..        |
00001310  53 54 52 20 20 20 20 20  73 6c 2c 20 67 77 69 5f  |STR     sl, gwi_|
00001320  61 73 6c 0a 20 20 20 20  20 20 20 20 53 54 52 20  |asl.        STR |
00001330  20 20 20 20 66 70 2c 20  67 77 69 5f 61 66 70 0a  |    fp, gwi_afp.|
00001340  20 20 20 20 20 20 20 20  53 54 52 20 20 20 20 20  |        STR     |
00001350  73 70 2c 20 67 77 69 5f  61 73 70 20 20 20 20 20  |sp, gwi_asp     |
00001360  20 20 20 20 20 20 20 20  3b 20 73 74 72 69 63 74  |        ; strict|
00001370  6c 79 2c 20 64 6f 6e 27  74 20 6e 65 65 64 20 74  |ly, don't need t|
00001380  6f 20 73 61 76 65 20 74  68 69 73 2c 20 61 73 20  |o save this, as |
00001390  72 65 73 74 6f 72 65 20  66 72 61 6d 65 20 66 72  |restore frame fr|
000013a0  6f 6d 20 66 70 20 77 68  69 63 68 0a 20 20 20 20  |om fp which.    |
000013b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
000013d0  20 20 20 20 3b 20 63 6f  6e 74 61 69 6e 73 20 6f  |    ; contains o|
000013e0  6c 64 20 73 70 2c 20 68  6f 77 65 76 65 72 20 6b  |ld sp, however k|
000013f0  65 65 70 20 69 74 20 68  65 72 65 20 69 6e 20 63  |eep it here in c|
00001400  61 73 65 20 63 68 61 6e  67 65 20 63 6f 64 65 20  |ase change code |
00001410  73 74 20 6e 65 65 64 0a  20 20 20 20 20 20 20 20  |st need.        |
00001420  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
00001440  3b 20 74 6f 20 6d 61 6b  65 20 61 6e 20 65 78 74  |; to make an ext|
00001450  65 72 6e 61 6c 20 41 50  43 53 20 63 61 6c 6c 0a  |ernal APCS call.|
00001460  20 20 20 20 20 20 20 20  3b 73 65 74 20 75 70 20  |        ;set up |
00001470  72 65 67 73 20 6e 6f 77  0a 20 20 20 20 20 20 20  |regs now.       |
00001480  20 4c 44 52 20 20 20 20  20 67 77 69 5f 78 70 2c  | LDR     gwi_xp,|
00001490  20 64 78 70 09 09 3b 6e  6f 74 65 20 64 78 70 20  | dxp..;note dxp |
000014a0  65 74 63 20 61 72 65 20  72 65 67 69 73 74 65 72  |etc are register|
000014b0  20 72 65 6c 61 74 69 76  65 20 2d 20 73 6f 20 74  | relative - so t|
000014c0  68 69 73 20 61 63 74 75  61 6c 6c 79 20 64 6f 65  |his actually doe|
000014d0  73 20 4c 44 52 20 5f 78  70 2c 20 5b 66 70 2c 20  |s LDR _xp, [fp, |
000014e0  23 34 5d 0a 20 20 20 20  20 20 20 20 4c 44 52 20  |#4].        LDR |
000014f0  20 20 20 20 67 77 69 5f  79 70 2c 20 64 79 70 09  |    gwi_yp, dyp.|
00001500  09 3b 73 70 72 69 74 65  20 68 65 69 67 68 74 73  |.;sprite heights|
00001510  20 69 6e 20 70 69 78 65  6c 73 20 28 78 70 20 69  | in pixels (xp i|
00001520  73 20 63 6f 72 72 65 73  70 6f 6e 64 69 6e 67 20  |s corresponding |
00001530  77 69 64 74 68 73 29 0a  20 20 20 20 20 20 20 20  |widths).        |
00001540  4c 44 52 20 20 20 20 20  67 77 69 5f 64 70 2c 20  |LDR     gwi_dp, |
00001550  64 64 70 09 09 3b 70 74  72 20 74 6f 20 64 65 73  |ddp..;ptr to des|
00001560  74 69 6e 61 74 69 6f 6e  20 73 70 72 69 74 65 20  |tination sprite |
00001570  69 6d 61 67 65 20 28 69  65 20 69 6d 61 67 65 20  |image (ie image |
00001580  64 61 74 61 20 69 74 73  65 6c 66 20 26 20 6e 6f  |data itself & no|
00001590  74 20 74 68 65 20 73 70  72 20 68 64 72 29 0a 20  |t the spr hdr). |
000015a0  20 20 20 20 20 20 20 4c  44 52 20 20 20 20 20 67  |       LDR     g|
000015b0  77 69 5f 73 70 2c 20 64  73 70 09 09 3b 70 74 72  |wi_sp, dsp..;ptr|
000015c0  20 74 6f 20 73 6f 75 72  63 65 20 73 70 72 69 74  | to source sprit|
000015d0  65 20 69 6d 61 67 65 0a  20 20 20 20 20 20 20 20  |e image.        |
000015e0  4c 44 52 20 20 20 20 20  67 77 69 5f 64 65 2c 20  |LDR     gwi_de, |
000015f0  64 64 65 09 09 3b 70 74  72 20 74 6f 20 61 20 62  |dde..;ptr to a b|
00001600  75 66 66 65 72 20 66 6f  72 20 65 72 72 6f 72 20  |uffer for error |
00001610  74 65 72 6d 73 20 28 6d  75 73 74 20 62 65 20 78  |terms (must be x|
00001620  70 20 77 6f 72 64 73 20  6c 6f 6e 67 29 0a 20 20  |p words long).  |
00001630  20 20 20 20 20 20 4c 44  52 20 20 20 20 20 67 77  |      LDR     gw|
00001640  69 5f 6c 75 74 2c 20 64  6c 75 74 09 09 3b 70 74  |i_lut, dlut..;pt|
00001650  72 20 74 6f 20 6c 75 74  20 74 6f 20 6d 61 70 20  |r to lut to map |
00001660  31 35 62 69 74 20 72 67  62 20 63 6f 6c 6f 75 72  |15bit rgb colour|
00001670  20 74 6f 20 6e 65 61 72  65 73 74 20 61 76 61 69  | to nearest avai|
00001680  6c 61 62 6c 65 20 69 6e  20 64 65 66 61 75 6c 74  |lable in default|
00001690  20 38 62 70 70 20 70 61  6c 0a 20 20 20 20 20 20  | 8bpp pal.      |
000016a0  20 20 4c 44 52 20 20 20  20 20 67 77 69 5f 70 61  |  LDR     gwi_pa|
000016b0  6c 32 35 36 64 65 66 2c  20 64 70 61 6c 32 35 36  |l256def, dpal256|
000016c0  64 65 66 09 3b 70 74 72  20 74 6f 20 64 65 66 61  |def.;ptr to defa|
000016d0  75 6c 74 20 38 62 70 70  20 32 35 36 20 65 6e 74  |ult 8bpp 256 ent|
000016e0  72 79 20 70 61 6c 65 74  74 65 20 28 75 73 65 64  |ry palette (used|
000016f0  20 74 6f 20 63 61 6c 63  20 65 72 72 6f 72 73 29  | to calc errors)|
00001700  0a 0a 20 20 20 20 20 20  20 20 3b 63 6f 64 65 0a  |..        ;code.|
00001710  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00001720  67 77 69 5f 69 2c 20 67  77 69 5f 78 70 09 09 3b  |gwi_i, gwi_xp..;|
00001730  63 75 72 72 65 6e 74 20  63 6f 6c 75 6d 6e 20 6e  |current column n|
00001740  75 6d 62 65 72 20 28 61  63 74 75 61 6c 6c 79 2c  |umber (actually,|
00001750  20 78 70 2d 6e 75 6d 62  65 72 29 0a 20 20 20 20  | xp-number).    |
00001760  20 20 20 20 43 4d 50 20  20 20 20 20 67 77 69 5f  |    CMP     gwi_|
00001770  69 2c 20 23 30 0a 20 20  20 20 20 20 20 20 42 4c  |i, #0.        BL|
00001780  45 20 20 20 20 20 67 77  69 5f 78 6c 6f 6f 70 31  |E     gwi_xloop1|
00001790  64 6f 6e 65 0a 0a 67 77  69 5f 78 6c 6f 6f 70 31  |done..gwi_xloop1|
000017a0  0a 09 4c 44 52 09 67 77  69 5f 6d 31 2c 20 5b 67  |..LDR.gwi_m1, [g|
000017b0  77 69 5f 73 70 2c 20 23  30 5d 0a 20 20 20 20 20  |wi_sp, #0].     |
000017c0  20 20 20 41 4e 44 20 20  20 20 20 67 77 69 5f 72  |   AND     gwi_r|
000017d0  2c 20 67 77 69 5f 6d 31  2c 20 23 32 35 35 09 3b  |, gwi_m1, #255.;|
000017e0  66 72 6f 6d 20 68 65 72  65 20 2e 20 2e 20 2e 0a  |from here . . ..|
000017f0  20 20 20 20 20 20 20 20  4d 4f 56 20 20 20 20 20  |        MOV     |
00001800  67 77 69 5f 67 2c 20 67  77 69 5f 6d 31 2c 20 4c  |gwi_g, gwi_m1, L|
00001810  53 52 20 23 38 0a 20 20  20 20 20 20 20 20 41 4e  |SR #8.        AN|
00001820  44 20 20 20 20 20 67 77  69 5f 67 2c 20 67 77 69  |D     gwi_g, gwi|
00001830  5f 67 2c 20 23 32 35 35  0a 20 20 20 20 20 20 20  |_g, #255.       |
00001840  20 4d 4f 56 20 20 20 20  20 67 77 69 5f 62 2c 20  | MOV     gwi_b, |
00001850  67 77 69 5f 6d 31 2c 20  4c 53 52 20 23 31 36 0a  |gwi_m1, LSR #16.|
00001860  20 20 20 20 20 20 20 20  41 4e 44 20 20 20 20 20  |        AND     |
00001870  67 77 69 5f 62 2c 20 67  77 69 5f 62 2c 20 23 32  |gwi_b, gwi_b, #2|
00001880  35 35 09 3b 74 6f 20 68  65 72 65 2c 20 65 78 74  |55.;to here, ext|
00001890  72 61 63 74 20 74 68 72  65 65 20 72 2c 67 20 26  |ract three r,g &|
000018a0  20 62 20 38 20 62 69 74  20 63 6f 6d 70 6f 6e 65  | b 8 bit compone|
000018b0  6e 74 73 20 69 6e 74 6f  20 5f 72 2c 20 5f 67 20  |nts into _r, _g |
000018c0  26 20 5f 62 0a 20 20 20  20 20 20 20 20 43 4d 50  |& _b.        CMP|
000018d0  20 20 20 20 20 67 77 69  5f 69 2c 20 67 77 69 5f  |     gwi_i, gwi_|
000018e0  78 70 0a 20 20 20 20 20  20 20 20 42 45 51 20 20  |xp.        BEQ  |
000018f0  20 20 20 67 77 69 5f 78  6c 31 5f 62 31 0a 09 09  |   gwi_xl1_b1...|
00001900  09 09 09 3b 69 66 20 6e  6f 74 20 6f 6e 20 66 69  |...;if not on fi|
00001910  72 73 74 20 70 69 78 65  6c 20 69 6e 20 72 6f 77  |rst pixel in row|
00001920  2c 20 74 68 65 72 65 20  69 73 20 61 6e 20 65 72  |, there is an er|
00001930  72 6f 72 20 74 65 72 6d  20 74 6f 20 61 64 64 20  |ror term to add |
00001940  69 6e 20 66 72 6f 6d 20  6c 65 66 74 3a 0a 20 20  |in from left:.  |
00001950  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 67 77  |      MOV     gw|
00001960  69 5f 6d 31 2c 20 67 77  69 5f 6c 64 65 2c 20 4c  |i_m1, gwi_lde, L|
00001970  53 4c 20 23 32 34 09 3b  65 78 74 72 61 63 74 20  |SL #24.;extract |
00001980  72 65 64 20 65 72 72 6f  72 20 66 72 6f 6d 20 5f  |red error from _|
00001990  6c 64 65 20 26 0a 20 20  20 20 20 20 20 20 4d 4f  |lde &.        MO|
000019a0  56 20 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |V     gwi_m1, gw|
000019b0  69 5f 6d 31 2c 20 41 53  52 20 23 32 34 09 09 3b  |i_m1, ASR #24..;|
000019c0  73 69 67 6e 20 65 78 74  65 6e 64 20 69 74 20 74  |sign extend it t|
000019d0  6f 20 33 32 20 62 69 74  73 0a 20 20 20 20 20 20  |o 32 bits.      |
000019e0  20 20 52 53 42 53 20 20  20 20 67 77 69 5f 6d 31  |  RSBS    gwi_m1|
000019f0  2c 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |, gwi_m1, gwi_m1|
00001a00  2c 20 41 53 4c 20 23 33  09 3b 66 72 6f 6d 20 68  |, ASL #3.;from h|
00001a10  65 72 65 20 2e 20 2e 20  2e 0a 20 20 20 20 20 20  |ere . . ..      |
00001a20  20 20 41 44 44 4d 49 20  20 20 67 77 69 5f 6d 31  |  ADDMI   gwi_m1|
00001a30  2c 20 67 77 69 5f 6d 31  2c 20 23 31 35 09 09 3b  |, gwi_m1, #15..;|
00001a40  09 28 6e 65 65 64 20 74  6f 20 65 6e 73 75 72 65  |.(need to ensure|
00001a50  20 2a 37 2f 31 36 20 77  69 6c 6c 20 72 6f 75 6e  | *7/16 will roun|
00001a60  64 20 74 6f 77 61 72 64  73 20 30 2c 20 72 61 74  |d towards 0, rat|
00001a70  68 65 72 20 74 68 61 6e  20 64 6f 77 6e 29 0a 20  |her than down). |
00001a80  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 67  |       ADD     g|
00001a90  77 69 5f 72 2c 20 67 77  69 5f 72 2c 20 67 77 69  |wi_r, gwi_r, gwi|
00001aa0  5f 6d 31 2c 20 41 53 52  20 23 34 09 3b 74 6f 20  |_m1, ASR #4.;to |
00001ab0  68 65 72 65 2c 20 61 64  64 20 74 6f 20 5f 72 20  |here, add to _r |
00001ac0  37 2f 31 36 20 6c 64 65  20 72 65 64 20 65 72 72  |7/16 lde red err|
00001ad0  6f 72 20 74 65 72 6d 0a  20 20 20 20 20 20 20 20  |or term.        |
00001ae0  4d 4f 56 20 20 20 20 20  67 77 69 5f 6d 31 2c 20  |MOV     gwi_m1, |
00001af0  67 77 69 5f 6c 64 65 2c  20 4c 53 4c 20 23 31 36  |gwi_lde, LSL #16|
00001b00  09 3b 66 72 6f 6d 20 68  65 72 65 20 2e 20 2e 20  |.;from here . . |
00001b10  2e 0a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
00001b20  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |  gwi_m1, gwi_m1|
00001b30  2c 20 41 53 52 20 23 32  34 0a 20 20 20 20 20 20  |, ASR #24.      |
00001b40  20 20 52 53 42 53 20 20  20 20 67 77 69 5f 6d 31  |  RSBS    gwi_m1|
00001b50  2c 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |, gwi_m1, gwi_m1|
00001b60  2c 20 41 53 4c 20 23 33  0a 20 20 20 20 20 20 20  |, ASL #3.       |
00001b70  20 41 44 44 4d 49 20 20  20 67 77 69 5f 6d 31 2c  | ADDMI   gwi_m1,|
00001b80  20 67 77 69 5f 6d 31 2c  20 23 31 35 0a 20 20 20  | gwi_m1, #15.   |
00001b90  20 20 20 20 20 41 44 44  20 20 20 20 20 67 77 69  |     ADD     gwi|
00001ba0  5f 67 2c 20 67 77 69 5f  67 2c 20 67 77 69 5f 6d  |_g, gwi_g, gwi_m|
00001bb0  31 2c 20 41 53 52 20 23  34 09 3b 74 6f 20 68 65  |1, ASR #4.;to he|
00001bc0  72 65 2c 20 65 78 74 72  61 63 74 20 67 72 65 65  |re, extract gree|
00001bd0  6e 20 65 72 72 6f 72 20  26 20 61 64 64 20 37 2f  |n error & add 7/|
00001be0  31 36 20 6f 66 20 69 74  20 69 6e 74 6f 20 5f 67  |16 of it into _g|
00001bf0  0a 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00001c00  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6c 64 65  | gwi_m1, gwi_lde|
00001c10  2c 20 4c 53 4c 20 23 38  09 09 3b 66 72 6f 6d 20  |, LSL #8..;from |
00001c20  68 65 72 65 20 2e 20 2e  20 2e 0a 20 20 20 20 20  |here . . ..     |
00001c30  20 20 20 4d 4f 56 20 20  20 20 20 67 77 69 5f 6d  |   MOV     gwi_m|
00001c40  31 2c 20 67 77 69 5f 6d  31 2c 20 41 53 52 20 23  |1, gwi_m1, ASR #|
00001c50  32 34 0a 20 20 20 20 20  20 20 20 52 53 42 53 20  |24.        RSBS |
00001c60  20 20 20 67 77 69 5f 6d  31 2c 20 67 77 69 5f 6d  |   gwi_m1, gwi_m|
00001c70  31 2c 20 67 77 69 5f 6d  31 2c 20 41 53 4c 20 23  |1, gwi_m1, ASL #|
00001c80  33 0a 20 20 20 20 20 20  20 20 41 44 44 4d 49 20  |3.        ADDMI |
00001c90  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |  gwi_m1, gwi_m1|
00001ca0  2c 20 23 31 35 0a 20 20  20 20 20 20 20 20 41 44  |, #15.        AD|
00001cb0  44 20 20 20 20 20 67 77  69 5f 62 2c 20 67 77 69  |D     gwi_b, gwi|
00001cc0  5f 62 2c 20 67 77 69 5f  6d 31 2c 20 41 53 52 20  |_b, gwi_m1, ASR |
00001cd0  23 34 09 3b 74 6f 20 68  65 72 65 2c 20 65 78 74  |#4.;to here, ext|
00001ce0  72 61 63 74 20 62 6c 75  65 20 65 72 72 6f 72 20  |ract blue error |
00001cf0  66 72 6f 6d 20 6c 64 65  20 26 20 61 64 64 20 37  |from lde & add 7|
00001d00  2f 31 36 20 69 6e 74 6f  20 5f 62 0a 20 20 20 20  |/16 into _b.    |
00001d10  20 20 20 20 53 54 52 20  20 20 20 20 67 77 69 5f  |    STR     gwi_|
00001d20  6c 64 65 2c 20 5b 67 77  69 5f 64 65 2c 20 67 77  |lde, [gwi_de, gw|
00001d30  69 5f 69 2c 20 41 53 4c  20 23 32 5d 09 3b 62 75  |i_i, ASL #2].;bu|
00001d40  66 66 65 72 20 6c 64 65  20 66 6f 72 20 77 68 65  |ffer lde for whe|
00001d50  6e 20 70 72 6f 63 65 73  73 69 6e 67 20 72 6f 77  |n processing row|
00001d60  20 62 65 6c 6f 77 0a 0a  67 77 69 5f 78 6c 31 5f  | below..gwi_xl1_|
00001d70  62 31 0a 0a 20 20 20 20  20 20 20 20 67 77 69 5f  |b1..        gwi_|
00001d80  73 65 67 31 09 09 09 09  3b 77 72 69 74 65 20 74  |seg1....;write t|
00001d90  6f 20 64 65 73 74 69 6e  61 74 69 6f 6e 20 69 6d  |o destination im|
00001da0  61 67 65 20 26 20 63 61  6c 63 75 6c 61 74 65 20  |age & calculate |
00001db0  65 72 72 6f 72 20 66 6f  72 20 74 68 69 73 20 70  |error for this p|
00001dc0  69 78 65 6c 20 28 69 6e  74 6f 20 6c 64 65 29 0a  |ixel (into lde).|
00001dd0  0a 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |.        ADD    |
00001de0  20 67 77 69 5f 64 70 2c  20 67 77 69 5f 64 70 2c  | gwi_dp, gwi_dp,|
00001df0  20 23 31 09 09 3b 73 74  65 70 20 74 68 72 6f 75  | #1..;step throu|
00001e00  67 68 20 64 65 73 74 69  6e 61 74 69 6f 6e 20 69  |gh destination i|
00001e10  6d 61 67 65 20 6f 6e 65  20 70 69 78 65 6c 0a 20  |mage one pixel. |
00001e20  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 67  |       ADD     g|
00001e30  77 69 5f 73 70 2c 20 67  77 69 5f 73 70 2c 20 23  |wi_sp, gwi_sp, #|
00001e40  34 09 09 3b 73 74 65 70  20 74 68 72 6f 75 67 68  |4..;step through|
00001e50  20 73 6f 75 72 63 65 20  69 6d 61 67 65 20 6f 6e  | source image on|
00001e60  65 20 70 69 78 65 6c 0a  20 20 20 20 20 20 20 20  |e pixel.        |
00001e70  53 55 42 53 20 20 20 20  67 77 69 5f 69 2c 20 67  |SUBS    gwi_i, g|
00001e80  77 69 5f 69 2c 20 23 31  0a 20 20 20 20 20 20 20  |wi_i, #1.       |
00001e90  20 42 47 54 20 20 20 20  20 67 77 69 5f 78 6c 6f  | BGT     gwi_xlo|
00001ea0  6f 70 31 09 09 09 3b 26  20 72 65 70 65 61 74 20  |op1...;& repeat |
00001eb0  74 69 6c 6c 20 61 6c 6c  20 6f 66 20 66 69 72 73  |till all of firs|
00001ec0  74 20 72 6f 77 20 70 72  6f 63 65 73 73 65 64 0a  |t row processed.|
00001ed0  67 77 69 5f 78 6c 6f 6f  70 31 64 6f 6e 65 0a 09  |gwi_xloop1done..|
00001ee0  09 09 09 09 09 3b 6e 6f  77 20 73 74 65 70 20 64  |.....;now step d|
00001ef0  6f 77 6e 20 74 6f 20 6e  65 78 74 20 72 6f 77 20  |own to next row |
00001f00  28 72 65 6d 65 6d 62 65  72 2c 20 73 65 72 70 65  |(remember, serpe|
00001f10  6e 74 69 6e 65 20 73 63  61 6e 6e 69 6e 67 29 0a  |ntine scanning).|
00001f20  20 20 20 20 20 20 20 20  52 53 42 20 20 20 20 20  |        RSB     |
00001f30  67 77 69 5f 6d 32 2c 20  67 77 69 5f 78 70 2c 20  |gwi_m2, gwi_xp, |
00001f40  23 34 0a 20 20 20 20 20  20 20 20 41 4e 44 20 20  |#4.        AND  |
00001f50  20 20 20 67 77 69 5f 6d  31 2c 20 67 77 69 5f 6d  |   gwi_m1, gwi_m|
00001f60  32 2c 20 23 33 09 09 3b  20 2e 20 2e 20 2e 20 74  |2, #3..; . . . t|
00001f70  6f 20 67 65 74 20 70 61  73 74 20 72 69 67 68 74  |o get past right|
00001f80  68 61 6e 64 20 77 61 73  74 61 67 65 20 6f 66 20  |hand wastage of |
00001f90  6c 61 73 74 20 72 6f 77  2c 20 64 65 73 74 20 69  |last row, dest i|
00001fa0  6d 61 67 65 0a 20 20 20  20 20 20 20 20 41 44 44  |mage.        ADD|
00001fb0  20 20 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |     gwi_m1, gwi|
00001fc0  5f 6d 31 2c 20 67 77 69  5f 78 70 09 09 3b 20 2e  |_m1, gwi_xp..; .|
00001fd0  20 2e 20 2e 20 74 6f 20  67 65 74 20 70 61 73 74  | . . to get past|
00001fe0  20 65 6e 64 20 6f 66 20  6e 65 78 74 20 72 6f 77  | end of next row|
00001ff0  0a 20 20 20 20 20 20 20  20 53 55 42 20 20 20 20  |.        SUB    |
00002000  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 31 2c  | gwi_m1, gwi_m1,|
00002010  20 23 31 09 09 3b 20 2e  20 2e 20 2e 20 74 6f 20  | #1..; . . . to |
00002020  67 65 74 20 62 61 63 6b  20 74 6f 20 6c 61 73 74  |get back to last|
00002030  20 70 69 78 65 6c 20 6f  6e 20 74 68 61 74 20 72  | pixel on that r|
00002040  6f 77 0a 20 20 20 20 20  20 20 20 41 44 44 20 20  |ow.        ADD  |
00002050  20 20 20 67 77 69 5f 64  70 2c 20 67 77 69 5f 64  |   gwi_dp, gwi_d|
00002060  70 2c 20 67 77 69 5f 6d  31 09 09 3b 6d 61 6b 65  |p, gwi_m1..;make|
00002070  20 74 68 65 20 61 64 6a  75 73 74 6d 65 6e 74 20  | the adjustment |
00002080  74 6f 20 5f 64 70 0a 09  41 44 44 20 20 20 20 20  |to _dp..ADD     |
00002090  67 77 69 5f 73 70 2c 20  67 77 69 5f 73 70 2c 20  |gwi_sp, gwi_sp, |
000020a0  67 77 69 5f 78 70 2c 20  4c 53 4c 20 23 32 09 3b  |gwi_xp, LSL #2.;|
000020b0  66 72 6f 6d 20 68 65 72  65 20 2e 20 2e 20 2e 0a  |from here . . ..|
000020c0  20 20 20 20 20 20 20 20  53 55 42 20 20 20 20 20  |        SUB     |
000020d0  67 77 69 5f 73 70 2c 20  67 77 69 5f 73 70 2c 20  |gwi_sp, gwi_sp, |
000020e0  23 34 09 09 3b 74 6f 20  68 65 72 65 2c 20 61 73  |#4..;to here, as|
000020f0  20 61 62 6f 76 65 20 66  6f 72 20 73 72 63 20 69  | above for src i|
00002100  6d 61 67 65 20 28 6e 6f  74 65 2c 20 69 74 20 68  |mage (note, it h|
00002110  61 73 20 34 2a 78 70 20  62 79 74 65 73 20 70 65  |as 4*xp bytes pe|
00002120  72 20 72 6f 77 29 0a 0a  20 20 20 20 20 20 20 20  |r row)..        |
00002130  53 55 42 53 20 20 20 20  67 77 69 5f 6d 31 2c 20  |SUBS    gwi_m1, |
00002140  67 77 69 5f 79 70 2c 20  23 32 0a 20 20 20 20 20  |gwi_yp, #2.     |
00002150  20 20 20 42 4d 49 20 20  20 20 20 67 77 69 5f 79  |   BMI     gwi_y|
00002160  6c 6f 6f 70 64 6f 6e 65  09 09 09 3b 63 61 72 72  |loopdone...;carr|
00002170  79 20 6f 6e 20 77 69 74  68 20 6e 65 78 74 20 72  |y on with next r|
00002180  6f 77 2c 20 75 6e 6c 65  73 73 20 61 6c 6c 20 72  |ow, unless all r|
00002190  6f 77 73 20 64 6f 6e 65  20 28 6e 6f 74 65 2c 20  |ows done (note, |
000021a0  73 75 62 74 72 61 63 74  0a 20 20 20 20 20 20 20  |subtract.       |
000021b0  20 53 54 52 20 20 20 20  20 67 77 69 5f 6d 31 2c  | STR     gwi_m1,|
000021c0  20 67 77 69 5f 61 6a 09  09 09 3b 20 32 20 66 72  | gwi_aj...; 2 fr|
000021d0  6f 6d 20 79 70 20 69 6e  69 74 69 61 6c 6c 79 20  |om yp initially |
000021e0  73 69 6e 63 65 20 79 70  20 69 73 20 23 20 72 6f  |since yp is # ro|
000021f0  77 73 20 63 6f 75 6e 74  69 6e 67 20 66 72 6f 6d  |ws counting from|
00002200  20 31 2c 20 26 0a 09 09  09 09 09 09 3b 20 62 72  | 1, &.......; br|
00002210  61 6e 63 68 20 63 6f 6e  64 20 69 73 20 4d 49 2c  |anch cond is MI,|
00002220  20 69 65 20 6c 6f 6f 70  20 63 6f 75 6e 74 73 20  | ie loop counts |
00002230  72 6f 77 73 20 69 6e 63  6c 75 64 69 6e 67 20 30  |rows including 0|
00002240  29 0a 09 09 09 09 09 3b  6e 6f 74 65 2c 20 64 65  |)......;note, de|
00002250  20 62 75 66 66 65 72 20  68 6f 6c 64 73 20 65 72  | buffer holds er|
00002260  72 6f 72 73 20 66 6f 72  20 72 6f 77 20 61 62 6f  |rors for row abo|
00002270  76 65 2c 20 72 75 6e 6e  69 6e 67 20 66 72 6f 6d  |ve, running from|
00002280  20 72 69 67 68 74 20 69  6e 20 6c 6f 77 0a 09 09  | right in low...|
00002290  09 09 09 3b 6d 65 6d 6f  72 79 20 74 6f 20 6c 65  |...;memory to le|
000022a0  66 74 20 73 69 64 65 20  69 6e 20 68 69 67 68 20  |ft side in high |
000022b0  6d 65 6d 2e 20 4e 65 78  74 20 72 6f 77 20 77 69  |mem. Next row wi|
000022c0  6c 6c 20 62 65 20 73 63  61 6e 6e 65 64 20 72 69  |ll be scanned ri|
000022d0  67 68 74 20 74 6f 0a 67  77 69 5f 79 6c 6f 6f 70  |ght to.gwi_yloop|
000022e0  09 09 09 09 3b 6c 65 66  74 2c 20 73 6f 20 6e 65  |....;left, so ne|
000022f0  65 64 20 65 78 74 72 61  63 74 20 65 72 72 6f 72  |ed extract error|
00002300  73 20 66 72 6f 6d 20 62  75 66 66 65 72 20 69 6e  |s from buffer in|
00002310  20 69 6e 63 72 65 61 73  69 6e 67 20 6d 65 6d 6f  | increasing memo|
00002320  72 79 20 6f 72 64 65 72  2e 0a 0a 20 20 20 20 20  |ry order...     |
00002330  20 20 20 53 54 52 20 20  20 20 20 67 77 69 5f 6c  |   STR     gwi_l|
00002340  64 65 2c 20 5b 67 77 69  5f 64 65 2c 20 23 30 5d  |de, [gwi_de, #0]|
00002350  09 3b 62 75 66 66 65 72  20 65 72 72 6f 72 20 66  |.;buffer error f|
00002360  6f 72 20 66 69 6e 61 6c  20 70 69 78 65 6c 20 66  |or final pixel f|
00002370  72 6f 6d 20 6c 61 73 74  20 72 6f 77 0a 20 20 20  |rom last row.   |
00002380  20 20 20 20 20 4d 4f 56  20 20 20 20 20 67 77 69  |     MOV     gwi|
00002390  5f 69 2c 20 23 31 0a 20  20 20 20 20 20 20 20 43  |_i, #1.        C|
000023a0  4d 50 20 20 20 20 20 67  77 69 5f 69 2c 20 67 77  |MP     gwi_i, gw|
000023b0  69 5f 78 70 0a 20 20 20  20 20 20 20 20 42 47 54  |i_xp.        BGT|
000023c0  20 20 20 20 20 67 77 69  5f 78 6c 6f 6f 70 32 64  |     gwi_xloop2d|
000023d0  6f 6e 65 0a 09 09 09 09  09 3b 61 6c 6c 20 72 65  |one......;all re|
000023e0  6d 61 69 6e 69 6e 67 20  63 6f 64 65 20 69 73 20  |maining code is |
000023f0  73 69 6d 69 6c 61 72 20  74 6f 20 70 72 65 63 65  |similar to prece|
00002400  65 64 69 6e 67 2c 20 65  78 63 65 70 74 20 68 61  |eding, except ha|
00002410  76 65 20 74 6f 20 61 64  64 20 69 6e 0a 67 77 69  |ve to add in.gwi|
00002420  5f 78 6c 6f 6f 70 32 09  09 09 09 3b 65 72 72 6f  |_xloop2....;erro|
00002430  72 73 20 66 72 6f 6d 20  72 6f 77 20 61 62 6f 76  |rs from row abov|
00002440  65 2c 20 26 20 73 63 61  6e 20 72 6f 77 20 69 6e  |e, & scan row in|
00002450  20 72 65 76 65 72 73 65  20 64 69 72 65 63 74 69  | reverse directi|
00002460  6f 6e 0a 09 4c 44 52 09  67 77 69 5f 6d 31 2c 20  |on..LDR.gwi_m1, |
00002470  5b 67 77 69 5f 73 70 2c  20 23 30 5d 0a 20 20 20  |[gwi_sp, #0].   |
00002480  20 20 20 20 20 41 4e 44  20 20 20 20 20 67 77 69  |     AND     gwi|
00002490  5f 72 2c 20 67 77 69 5f  6d 31 2c 20 23 32 35 35  |_r, gwi_m1, #255|
000024a0  09 3b 66 72 6f 6d 20 68  65 72 65 20 2e 20 2e 20  |.;from here . . |
000024b0  2e 0a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |..        MOV   |
000024c0  20 20 67 77 69 5f 67 2c  20 67 77 69 5f 6d 31 2c  |  gwi_g, gwi_m1,|
000024d0  20 4c 53 52 20 23 38 0a  20 20 20 20 20 20 20 20  | LSR #8.        |
000024e0  41 4e 44 20 20 20 20 20  67 77 69 5f 67 2c 20 67  |AND     gwi_g, g|
000024f0  77 69 5f 67 2c 20 23 32  35 35 0a 20 20 20 20 20  |wi_g, #255.     |
00002500  20 20 20 4d 4f 56 20 20  20 20 20 67 77 69 5f 62  |   MOV     gwi_b|
00002510  2c 20 67 77 69 5f 6d 31  2c 20 4c 53 52 20 23 31  |, gwi_m1, LSR #1|
00002520  36 0a 20 20 20 20 20 20  20 20 41 4e 44 20 20 20  |6.        AND   |
00002530  20 20 67 77 69 5f 62 2c  20 67 77 69 5f 62 2c 20  |  gwi_b, gwi_b, |
00002540  23 32 35 35 09 3b 74 6f  20 68 65 72 65 2c 20 65  |#255.;to here, e|
00002550  78 74 72 61 63 74 20 74  68 72 65 65 20 72 2c 67  |xtract three r,g|
00002560  20 26 20 62 20 38 20 62  69 74 20 63 6f 6d 70 6f  | & b 8 bit compo|
00002570  6e 65 6e 74 73 20 69 6e  74 6f 20 5f 72 2c 20 5f  |nents into _r, _|
00002580  67 20 26 20 5f 62 0a 0a  20 20 20 20 20 20 20 20  |g & _b..        |
00002590  53 55 42 20 20 20 20 20  67 77 69 5f 6d 34 2c 20  |SUB     gwi_m4, |
000025a0  67 77 69 5f 69 2c 20 23  31 09 3b 66 72 6f 6d 20  |gwi_i, #1.;from |
000025b0  68 65 72 65 20 2e 20 2e  20 2e 0a 20 20 20 20 20  |here . . ..     |
000025c0  20 20 20 4c 44 52 20 20  20 20 20 67 77 69 5f 6d  |   LDR     gwi_m|
000025d0  34 2c 20 5b 67 77 69 5f  64 65 2c 20 67 77 69 5f  |4, [gwi_de, gwi_|
000025e0  6d 34 2c 20 41 53 4c 20  23 32 5d 0a 20 20 20 20  |m4, ASL #2].    |
000025f0  20 20 20 20 4d 4f 56 20  20 20 20 20 67 77 69 5f  |    MOV     gwi_|
00002600  6d 31 2c 20 67 77 69 5f  6d 34 2c 20 4c 53 4c 20  |m1, gwi_m4, LSL |
00002610  23 32 34 0a 20 20 20 20  20 20 20 20 4d 4f 56 20  |#24.        MOV |
00002620  20 20 20 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |    gwi_m1, gwi_|
00002630  6d 31 2c 20 41 53 52 20  23 32 34 0a 20 20 20 20  |m1, ASR #24.    |
00002640  20 20 20 20 41 44 44 53  20 20 20 20 67 77 69 5f  |    ADDS    gwi_|
00002650  6d 31 2c 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |m1, gwi_m1, gwi_|
00002660  6d 31 2c 20 41 53 4c 20  23 32 0a 20 20 20 20 20  |m1, ASL #2.     |
00002670  20 20 20 41 44 44 4d 49  20 20 20 67 77 69 5f 6d  |   ADDMI   gwi_m|
00002680  31 2c 20 67 77 69 5f 6d  31 2c 20 23 31 35 0a 20  |1, gwi_m1, #15. |
00002690  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 67  |       ADD     g|
000026a0  77 69 5f 72 2c 20 67 77  69 5f 72 2c 20 67 77 69  |wi_r, gwi_r, gwi|
000026b0  5f 6d 31 2c 20 41 53 52  20 23 34 0a 20 20 20 20  |_m1, ASR #4.    |
000026c0  20 20 20 20 4d 4f 56 20  20 20 20 20 67 77 69 5f  |    MOV     gwi_|
000026d0  6d 31 2c 20 67 77 69 5f  6d 34 2c 20 4c 53 4c 20  |m1, gwi_m4, LSL |
000026e0  23 31 36 0a 20 20 20 20  20 20 20 20 4d 4f 56 20  |#16.        MOV |
000026f0  20 20 20 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |    gwi_m1, gwi_|
00002700  6d 31 2c 20 41 53 52 20  23 32 34 0a 20 20 20 20  |m1, ASR #24.    |
00002710  20 20 20 20 41 44 44 53  20 20 20 20 67 77 69 5f  |    ADDS    gwi_|
00002720  6d 31 2c 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |m1, gwi_m1, gwi_|
00002730  6d 31 2c 20 41 53 4c 20  23 32 0a 20 20 20 20 20  |m1, ASL #2.     |
00002740  20 20 20 41 44 44 4d 49  20 20 20 67 77 69 5f 6d  |   ADDMI   gwi_m|
00002750  31 2c 20 67 77 69 5f 6d  31 2c 20 23 31 35 0a 20  |1, gwi_m1, #15. |
00002760  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 67  |       ADD     g|
00002770  77 69 5f 67 2c 20 67 77  69 5f 67 2c 20 67 77 69  |wi_g, gwi_g, gwi|
00002780  5f 6d 31 2c 20 41 53 52  20 23 34 0a 20 20 20 20  |_m1, ASR #4.    |
00002790  20 20 20 20 4d 4f 56 20  20 20 20 20 67 77 69 5f  |    MOV     gwi_|
000027a0  6d 31 2c 20 67 77 69 5f  6d 34 2c 20 4c 53 4c 20  |m1, gwi_m4, LSL |
000027b0  23 38 0a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |#8.        MOV  |
000027c0  20 20 20 67 77 69 5f 6d  31 2c 20 67 77 69 5f 6d  |   gwi_m1, gwi_m|
000027d0  31 2c 20 41 53 52 20 23  32 34 0a 20 20 20 20 20  |1, ASR #24.     |
000027e0  20 20 20 41 44 44 53 20  20 20 20 67 77 69 5f 6d  |   ADDS    gwi_m|
000027f0  31 2c 20 67 77 69 5f 6d  31 2c 20 67 77 69 5f 6d  |1, gwi_m1, gwi_m|
00002800  31 2c 20 41 53 4c 20 23  32 0a 20 20 20 20 20 20  |1, ASL #2.      |
00002810  20 20 41 44 44 4d 49 20  20 20 67 77 69 5f 6d 31  |  ADDMI   gwi_m1|
00002820  2c 20 67 77 69 5f 6d 31  2c 20 23 31 35 0a 20 20  |, gwi_m1, #15.  |
00002830  20 20 20 20 20 20 41 44  44 20 20 20 20 20 67 77  |      ADD     gw|
00002840  69 5f 62 2c 20 67 77 69  5f 62 2c 20 67 77 69 5f  |i_b, gwi_b, gwi_|
00002850  6d 31 2c 20 41 53 52 20  23 34 09 3b 74 6f 20 68  |m1, ASR #4.;to h|
00002860  65 72 65 2c 20 61 64 64  20 69 6e 20 35 2f 31 36  |ere, add in 5/16|
00002870  20 65 72 72 6f 72 20 66  6f 72 20 70 69 78 65 6c  | error for pixel|
00002880  20 61 62 6f 76 65 0a 0a  20 20 20 20 20 20 20 20  | above..        |
00002890  43 4d 50 20 20 20 20 20  67 77 69 5f 69 2c 20 23  |CMP     gwi_i, #|
000028a0  31 0a 20 20 20 20 20 20  20 20 42 45 51 20 20 20  |1.        BEQ   |
000028b0  20 20 67 77 69 5f 78 6c  32 5f 62 31 0a 0a 20 20  |  gwi_xl2_b1..  |
000028c0  20 20 20 20 20 20 53 55  42 20 20 20 20 20 67 77  |      SUB     gw|
000028d0  69 5f 6d 32 2c 20 67 77  69 5f 69 2c 20 23 32 09  |i_m2, gwi_i, #2.|
000028e0  09 3b 73 69 6d 69 6c 69  61 72 6c 79 20 28 69 66  |.;similiarly (if|
000028f0  20 6e 6f 74 20 6f 6e 20  72 69 67 68 74 6d 6f 73  | not on rightmos|
00002900  74 20 63 6f 6c 75 6d 6e  29 20 2e 20 2e 20 2e 0a  |t column) . . ..|
00002910  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00002920  67 77 69 5f 6d 34 2c 20  5b 67 77 69 5f 64 65 2c  |gwi_m4, [gwi_de,|
00002930  20 67 77 69 5f 6d 32 2c  20 41 53 4c 20 23 32 5d  | gwi_m2, ASL #2]|
00002940  0a 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00002950  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 34 2c  | gwi_m1, gwi_m4,|
00002960  20 4c 53 4c 20 23 32 34  0a 20 20 20 20 20 20 20  | LSL #24.       |
00002970  20 4d 4f 56 53 20 20 20  20 67 77 69 5f 6d 31 2c  | MOVS    gwi_m1,|
00002980  20 67 77 69 5f 6d 31 2c  20 41 53 52 20 23 32 34  | gwi_m1, ASR #24|
00002990  0a 20 20 20 20 20 20 20  20 41 44 44 4d 49 20 20  |.        ADDMI  |
000029a0  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 31 2c  | gwi_m1, gwi_m1,|
000029b0  20 23 31 35 0a 20 20 20  20 20 20 20 20 41 44 44  | #15.        ADD|
000029c0  20 20 20 20 20 67 77 69  5f 72 2c 20 67 77 69 5f  |     gwi_r, gwi_|
000029d0  72 2c 20 67 77 69 5f 6d  31 2c 20 41 53 52 20 23  |r, gwi_m1, ASR #|
000029e0  34 0a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |4.        MOV   |
000029f0  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 34  |  gwi_m1, gwi_m4|
00002a00  2c 20 4c 53 4c 20 23 31  36 0a 20 20 20 20 20 20  |, LSL #16.      |
00002a10  20 20 4d 4f 56 53 20 20  20 20 67 77 69 5f 6d 31  |  MOVS    gwi_m1|
00002a20  2c 20 67 77 69 5f 6d 31  2c 20 41 53 52 20 23 32  |, gwi_m1, ASR #2|
00002a30  34 0a 20 20 20 20 20 20  20 20 41 44 44 4d 49 20  |4.        ADDMI |
00002a40  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |  gwi_m1, gwi_m1|
00002a50  2c 20 23 31 35 0a 20 20  20 20 20 20 20 20 41 44  |, #15.        AD|
00002a60  44 20 20 20 20 20 67 77  69 5f 67 2c 20 67 77 69  |D     gwi_g, gwi|
00002a70  5f 67 2c 20 67 77 69 5f  6d 31 2c 20 41 53 52 20  |_g, gwi_m1, ASR |
00002a80  23 34 0a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |#4.        MOV  |
00002a90  20 20 20 67 77 69 5f 6d  31 2c 20 67 77 69 5f 6d  |   gwi_m1, gwi_m|
00002aa0  34 2c 20 4c 53 4c 20 23  38 0a 20 20 20 20 20 20  |4, LSL #8.      |
00002ab0  20 20 4d 4f 56 53 20 20  20 20 67 77 69 5f 6d 31  |  MOVS    gwi_m1|
00002ac0  2c 20 67 77 69 5f 6d 31  2c 20 41 53 52 20 23 32  |, gwi_m1, ASR #2|
00002ad0  34 0a 20 20 20 20 20 20  20 20 41 44 44 4d 49 20  |4.        ADDMI |
00002ae0  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |  gwi_m1, gwi_m1|
00002af0  2c 20 23 31 35 0a 20 20  20 20 20 20 20 20 41 44  |, #15.        AD|
00002b00  44 20 20 20 20 20 67 77  69 5f 62 2c 20 67 77 69  |D     gwi_b, gwi|
00002b10  5f 62 2c 20 67 77 69 5f  6d 31 2c 20 41 53 52 20  |_b, gwi_m1, ASR |
00002b20  23 34 09 3b 61 64 64 20  69 6e 20 31 2f 31 36 20  |#4.;add in 1/16 |
00002b30  65 72 72 6f 72 20 66 6f  72 20 70 69 78 65 6c 20  |error for pixel |
00002b40  74 6f 20 61 62 6f 76 65  20 72 69 67 68 74 0a 0a  |to above right..|
00002b50  20 20 20 20 20 20 20 20  53 54 52 20 20 20 20 20  |        STR     |
00002b60  67 77 69 5f 6c 64 65 2c  20 5b 67 77 69 5f 64 65  |gwi_lde, [gwi_de|
00002b70  2c 20 67 77 69 5f 6d 32  2c 20 41 53 4c 20 23 32  |, gwi_m2, ASL #2|
00002b80  5d 09 3b 63 61 6e 20 6e  6f 77 20 73 61 66 65 6c  |].;can now safel|
00002b90  79 20 6f 76 65 72 77 72  69 74 65 20 76 61 6c 75  |y overwrite valu|
00002ba0  65 20 69 6e 20 62 75 66  66 65 72 20 77 69 74 68  |e in buffer with|
00002bb0  20 6c 64 65 20 66 6f 72  20 6e 65 78 74 20 72 6f  | lde for next ro|
00002bc0  77 0a 0a 20 20 20 20 20  20 20 20 4d 4f 56 20 20  |w..        MOV  |
00002bd0  20 20 20 67 77 69 5f 6d  31 2c 20 67 77 69 5f 6c  |   gwi_m1, gwi_l|
00002be0  64 65 2c 20 4c 53 4c 20  23 32 34 0a 20 20 20 20  |de, LSL #24.    |
00002bf0  20 20 20 20 4d 4f 56 20  20 20 20 20 67 77 69 5f  |    MOV     gwi_|
00002c00  6d 31 2c 20 67 77 69 5f  6d 31 2c 20 41 53 52 20  |m1, gwi_m1, ASR |
00002c10  23 32 34 0a 20 20 20 20  20 20 20 20 52 53 42 53  |#24.        RSBS|
00002c20  20 20 20 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |    gwi_m1, gwi_|
00002c30  6d 31 2c 20 67 77 69 5f  6d 31 2c 20 41 53 4c 20  |m1, gwi_m1, ASL |
00002c40  23 33 0a 20 20 20 20 20  20 20 20 41 44 44 4d 49  |#3.        ADDMI|
00002c50  20 20 20 67 77 69 5f 6d  31 2c 20 67 77 69 5f 6d  |   gwi_m1, gwi_m|
00002c60  31 2c 20 23 31 35 0a 20  20 20 20 20 20 20 20 41  |1, #15.        A|
00002c70  44 44 20 20 20 20 20 67  77 69 5f 72 2c 20 67 77  |DD     gwi_r, gw|
00002c80  69 5f 72 2c 20 67 77 69  5f 6d 31 2c 20 41 53 52  |i_r, gwi_m1, ASR|
00002c90  20 23 34 0a 20 20 20 20  20 20 20 20 4d 4f 56 20  | #4.        MOV |
00002ca0  20 20 20 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |    gwi_m1, gwi_|
00002cb0  6c 64 65 2c 20 4c 53 4c  20 23 31 36 0a 20 20 20  |lde, LSL #16.   |
00002cc0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 67 77 69  |     MOV     gwi|
00002cd0  5f 6d 31 2c 20 67 77 69  5f 6d 31 2c 20 41 53 52  |_m1, gwi_m1, ASR|
00002ce0  20 23 32 34 0a 20 20 20  20 20 20 20 20 52 53 42  | #24.        RSB|
00002cf0  53 20 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |S    gwi_m1, gwi|
00002d00  5f 6d 31 2c 20 67 77 69  5f 6d 31 2c 20 41 53 4c  |_m1, gwi_m1, ASL|
00002d10  20 23 33 0a 20 20 20 20  20 20 20 20 41 44 44 4d  | #3.        ADDM|
00002d20  49 20 20 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |I   gwi_m1, gwi_|
00002d30  6d 31 2c 20 23 31 35 0a  20 20 20 20 20 20 20 20  |m1, #15.        |
00002d40  41 44 44 20 20 20 20 20  67 77 69 5f 67 2c 20 67  |ADD     gwi_g, g|
00002d50  77 69 5f 67 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |wi_g, gwi_m1, AS|
00002d60  52 20 23 34 0a 20 20 20  20 20 20 20 20 4d 4f 56  |R #4.        MOV|
00002d70  20 20 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |     gwi_m1, gwi|
00002d80  5f 6c 64 65 2c 20 4c 53  4c 20 23 38 0a 20 20 20  |_lde, LSL #8.   |
00002d90  20 20 20 20 20 4d 4f 56  20 20 20 20 20 67 77 69  |     MOV     gwi|
00002da0  5f 6d 31 2c 20 67 77 69  5f 6d 31 2c 20 41 53 52  |_m1, gwi_m1, ASR|
00002db0  20 23 32 34 0a 20 20 20  20 20 20 20 20 52 53 42  | #24.        RSB|
00002dc0  53 20 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |S    gwi_m1, gwi|
00002dd0  5f 6d 31 2c 20 67 77 69  5f 6d 31 2c 20 41 53 4c  |_m1, gwi_m1, ASL|
00002de0  20 23 33 0a 20 20 20 20  20 20 20 20 41 44 44 4d  | #3.        ADDM|
00002df0  49 20 20 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |I   gwi_m1, gwi_|
00002e00  6d 31 2c 20 23 31 35 0a  20 20 20 20 20 20 20 20  |m1, #15.        |
00002e10  41 44 44 20 20 20 20 20  67 77 69 5f 62 2c 20 67  |ADD     gwi_b, g|
00002e20  77 69 5f 62 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |wi_b, gwi_m1, AS|
00002e30  52 20 23 34 09 3b 6e 6f  77 20 61 64 64 20 69 6e  |R #4.;now add in|
00002e40  20 37 2f 31 36 20 65 72  72 6f 72 20 66 6f 72 20  | 7/16 error for |
00002e50  70 69 78 65 6c 20 74 6f  20 72 69 67 68 74 0a 0a  |pixel to right..|
00002e60  67 77 69 5f 78 6c 32 5f  62 31 0a 20 20 20 20 20  |gwi_xl2_b1.     |
00002e70  20 20 20 43 4d 50 20 20  20 20 20 67 77 69 5f 69  |   CMP     gwi_i|
00002e80  2c 20 67 77 69 5f 78 70  0a 20 20 20 20 20 20 20  |, gwi_xp.       |
00002e90  20 42 45 51 20 20 20 20  20 67 77 69 5f 78 6c 32  | BEQ     gwi_xl2|
00002ea0  5f 62 32 0a 0a 20 20 20  20 20 20 20 20 4c 44 52  |_b2..        LDR|
00002eb0  20 20 20 20 20 67 77 69  5f 6d 34 2c 20 5b 67 77  |     gwi_m4, [gw|
00002ec0  69 5f 64 65 2c 20 67 77  69 5f 69 2c 20 41 53 4c  |i_de, gwi_i, ASL|
00002ed0  20 23 32 5d 09 3b 69 66  20 6e 6f 74 20 6f 6e 20  | #2].;if not on |
00002ee0  66 61 72 20 6c 65 66 74  20 63 6f 6c 75 6d 6e 20  |far left column |
00002ef0  2e 20 2e 20 2e 0a 20 20  20 20 20 20 20 20 4d 4f  |. . ..        MO|
00002f00  56 20 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |V     gwi_m1, gw|
00002f10  69 5f 6d 34 2c 20 4c 53  4c 20 23 32 34 0a 20 20  |i_m4, LSL #24.  |
00002f20  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 67 77  |      MOV     gw|
00002f30  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |i_m1, gwi_m1, AS|
00002f40  52 20 23 32 34 0a 20 20  20 20 20 20 20 20 41 44  |R #24.        AD|
00002f50  44 53 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |DS    gwi_m1, gw|
00002f60  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |i_m1, gwi_m1, AS|
00002f70  4c 20 23 31 0a 20 20 20  20 20 20 20 20 41 44 44  |L #1.        ADD|
00002f80  4d 49 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |MI   gwi_m1, gwi|
00002f90  5f 6d 31 2c 20 23 31 35  0a 20 20 20 20 20 20 20  |_m1, #15.       |
00002fa0  20 41 44 44 20 20 20 20  20 67 77 69 5f 72 2c 20  | ADD     gwi_r, |
00002fb0  67 77 69 5f 72 2c 20 67  77 69 5f 6d 31 2c 20 41  |gwi_r, gwi_m1, A|
00002fc0  53 52 20 23 34 0a 20 20  20 20 20 20 20 20 4d 4f  |SR #4.        MO|
00002fd0  56 20 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |V     gwi_m1, gw|
00002fe0  69 5f 6d 34 2c 20 4c 53  4c 20 23 31 36 0a 20 20  |i_m4, LSL #16.  |
00002ff0  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 67 77  |      MOV     gw|
00003000  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |i_m1, gwi_m1, AS|
00003010  52 20 23 32 34 0a 20 20  20 20 20 20 20 20 41 44  |R #24.        AD|
00003020  44 53 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |DS    gwi_m1, gw|
00003030  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |i_m1, gwi_m1, AS|
00003040  4c 20 23 31 0a 20 20 20  20 20 20 20 20 41 44 44  |L #1.        ADD|
00003050  4d 49 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |MI   gwi_m1, gwi|
00003060  5f 6d 31 2c 20 23 31 35  0a 20 20 20 20 20 20 20  |_m1, #15.       |
00003070  20 41 44 44 20 20 20 20  20 67 77 69 5f 67 2c 20  | ADD     gwi_g, |
00003080  67 77 69 5f 67 2c 20 67  77 69 5f 6d 31 2c 20 41  |gwi_g, gwi_m1, A|
00003090  53 52 20 23 34 0a 20 20  20 20 20 20 20 20 4d 4f  |SR #4.        MO|
000030a0  56 20 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |V     gwi_m1, gw|
000030b0  69 5f 6d 34 2c 20 4c 53  4c 20 23 38 0a 20 20 20  |i_m4, LSL #8.   |
000030c0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 67 77 69  |     MOV     gwi|
000030d0  5f 6d 31 2c 20 67 77 69  5f 6d 31 2c 20 41 53 52  |_m1, gwi_m1, ASR|
000030e0  20 23 32 34 0a 20 20 20  20 20 20 20 20 41 44 44  | #24.        ADD|
000030f0  53 20 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |S    gwi_m1, gwi|
00003100  5f 6d 31 2c 20 67 77 69  5f 6d 31 2c 20 41 53 4c  |_m1, gwi_m1, ASL|
00003110  20 23 31 0a 20 20 20 20  20 20 20 20 41 44 44 4d  | #1.        ADDM|
00003120  49 20 20 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |I   gwi_m1, gwi_|
00003130  6d 31 2c 20 23 31 35 0a  20 20 20 20 20 20 20 20  |m1, #15.        |
00003140  41 44 44 20 20 20 20 20  67 77 69 5f 62 2c 20 67  |ADD     gwi_b, g|
00003150  77 69 5f 62 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |wi_b, gwi_m1, AS|
00003160  52 20 23 34 09 3b 61 64  64 20 69 6e 20 33 2f 31  |R #4.;add in 3/1|
00003170  36 20 65 72 72 6f 72 20  66 6f 72 20 70 69 78 65  |6 error for pixe|
00003180  6c 20 74 6f 20 61 62 6f  76 65 20 6c 65 66 74 0a  |l to above left.|
00003190  0a 67 77 69 5f 78 6c 32  5f 62 32 0a 0a 20 20 20  |.gwi_xl2_b2..   |
000031a0  20 20 20 20 20 67 77 69  5f 73 65 67 31 09 09 09  |     gwi_seg1...|
000031b0  09 3b 77 72 69 74 65 20  64 65 73 74 69 6e 61 74  |.;write destinat|
000031c0  69 6f 6e 20 70 69 78 65  6c 20 26 20 63 61 6c 63  |ion pixel & calc|
000031d0  20 6e 65 77 20 65 72 72  6f 72 20 66 6f 72 20 70  | new error for p|
000031e0  69 78 65 6c 0a 0a 20 20  20 20 20 20 20 20 53 55  |ixel..        SU|
000031f0  42 20 20 20 20 20 67 77  69 5f 64 70 2c 20 67 77  |B     gwi_dp, gw|
00003200  69 5f 64 70 2c 20 23 31  0a 20 20 20 20 20 20 20  |i_dp, #1.       |
00003210  20 53 55 42 20 20 20 20  20 67 77 69 5f 73 70 2c  | SUB     gwi_sp,|
00003220  20 67 77 69 5f 73 70 2c  20 23 34 0a 20 20 20 20  | gwi_sp, #4.    |
00003230  20 20 20 20 41 44 44 20  20 20 20 20 67 77 69 5f  |    ADD     gwi_|
00003240  69 2c 20 67 77 69 5f 69  2c 20 23 31 0a 20 20 20  |i, gwi_i, #1.   |
00003250  20 20 20 20 20 43 4d 50  20 20 20 20 20 67 77 69  |     CMP     gwi|
00003260  5f 69 2c 20 67 77 69 5f  78 70 0a 20 20 20 20 20  |_i, gwi_xp.     |
00003270  20 20 20 42 4c 45 20 20  20 20 20 67 77 69 5f 78  |   BLE     gwi_x|
00003280  6c 6f 6f 70 32 09 09 09  3b 6c 6f 6f 70 20 62 61  |loop2...;loop ba|
00003290  63 6b 20 74 69 6c 20 61  6c 6c 20 6f 66 20 72 69  |ck til all of ri|
000032a0  67 68 74 20 74 6f 20 6c  65 66 74 20 72 6f 77 20  |ght to left row |
000032b0  70 72 6f 63 65 73 73 65  64 0a 67 77 69 5f 78 6c  |processed.gwi_xl|
000032c0  6f 6f 70 32 64 6f 6e 65  0a 0a 20 20 20 20 20 20  |oop2done..      |
000032d0  20 20 52 53 42 20 20 20  20 20 67 77 69 5f 6d 32  |  RSB     gwi_m2|
000032e0  2c 20 67 77 69 5f 78 70  2c 20 23 34 0a 20 20 20  |, gwi_xp, #4.   |
000032f0  20 20 20 20 20 41 4e 44  20 20 20 20 20 67 77 69  |     AND     gwi|
00003300  5f 6d 31 2c 20 67 77 69  5f 6d 32 2c 20 23 33 0a  |_m1, gwi_m2, #3.|
00003310  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
00003320  67 77 69 5f 6d 31 2c 20  67 77 69 5f 6d 31 2c 20  |gwi_m1, gwi_m1, |
00003330  67 77 69 5f 78 70 0a 20  20 20 20 20 20 20 20 41  |gwi_xp.        A|
00003340  44 44 20 20 20 20 20 67  77 69 5f 6d 31 2c 20 67  |DD     gwi_m1, g|
00003350  77 69 5f 6d 31 2c 20 23  31 0a 20 20 20 20 20 20  |wi_m1, #1.      |
00003360  20 20 41 44 44 20 20 20  20 20 67 77 69 5f 64 70  |  ADD     gwi_dp|
00003370  2c 20 67 77 69 5f 64 70  2c 20 67 77 69 5f 6d 31  |, gwi_dp, gwi_m1|
00003380  0a 09 41 44 44 20 20 20  20 20 67 77 69 5f 73 70  |..ADD     gwi_sp|
00003390  2c 20 67 77 69 5f 73 70  2c 20 67 77 69 5f 78 70  |, gwi_sp, gwi_xp|
000033a0  2c 20 4c 53 4c 20 23 32  0a 20 20 20 20 20 20 20  |, LSL #2.       |
000033b0  20 41 44 44 20 20 20 20  20 67 77 69 5f 73 70 2c  | ADD     gwi_sp,|
000033c0  20 67 77 69 5f 73 70 2c  20 23 34 09 09 3b 73 74  | gwi_sp, #4..;st|
000033d0  65 70 20 73 70 2c 20 64  70 20 74 6f 20 6e 65 78  |ep sp, dp to nex|
000033e0  74 20 72 6f 77 20 28 74  6f 20 62 65 20 73 63 61  |t row (to be sca|
000033f0  6e 6e 65 64 20 6c 65 66  74 20 74 6f 20 72 69 67  |nned left to rig|
00003400  68 74 29 0a 0a 20 20 20  20 20 20 20 20 4c 44 52  |ht)..        LDR|
00003410  20 20 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |     gwi_m1, gwi|
00003420  5f 61 6a 0a 20 20 20 20  20 20 20 20 53 55 42 53  |_aj.        SUBS|
00003430  20 20 20 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |    gwi_m1, gwi_|
00003440  6d 31 2c 20 23 31 0a 20  20 20 20 20 20 20 20 53  |m1, #1.        S|
00003450  54 52 20 20 20 20 20 67  77 69 5f 6d 31 2c 20 67  |TR     gwi_m1, g|
00003460  77 69 5f 61 6a 0a 20 20  20 20 20 20 20 20 42 4d  |wi_aj.        BM|
00003470  49 20 20 20 20 20 67 77  69 5f 79 6c 6f 6f 70 64  |I     gwi_yloopd|
00003480  6f 6e 65 09 09 09 3b 63  6f 6e 74 69 6e 75 65 20  |one...;continue |
00003490  77 69 74 68 20 6e 65 78  74 20 72 6f 77 2c 20 75  |with next row, u|
000034a0  6e 6c 65 73 73 20 61 6c  6c 20 64 6f 6e 65 0a 0a  |nless all done..|
000034b0  20 20 20 20 20 20 20 20  53 55 42 20 20 20 20 20  |        SUB     |
000034c0  67 77 69 5f 6d 31 2c 20  67 77 69 5f 78 70 2c 20  |gwi_m1, gwi_xp, |
000034d0  23 31 0a 20 20 20 20 20  20 20 20 53 54 52 20 20  |#1.        STR  |
000034e0  20 20 20 67 77 69 5f 6c  64 65 2c 20 5b 67 77 69  |   gwi_lde, [gwi|
000034f0  5f 64 65 2c 20 67 77 69  5f 6d 31 2c 20 41 53 4c  |_de, gwi_m1, ASL|
00003500  20 23 32 5d 09 3b 62 75  66 66 65 72 20 65 72 72  | #2].;buffer err|
00003510  6f 72 20 66 6f 72 20 66  69 6e 61 6c 20 70 69 78  |or for final pix|
00003520  65 6c 20 6f 6e 20 6c 61  73 74 20 72 6f 77 0a 20  |el on last row. |
00003530  20 20 20 20 20 20 20 4d  4f 56 20 20 20 20 20 67  |       MOV     g|
00003540  77 69 5f 69 2c 20 67 77  69 5f 78 70 0a 20 20 20  |wi_i, gwi_xp.   |
00003550  20 20 20 20 20 43 4d 50  20 20 20 20 20 67 77 69  |     CMP     gwi|
00003560  5f 69 2c 20 23 30 0a 20  20 20 20 20 20 20 20 42  |_i, #0.        B|
00003570  4c 45 20 20 20 20 20 67  77 69 5f 78 6c 6f 6f 70  |LE     gwi_xloop|
00003580  33 64 6f 6e 65 0a 0a 67  77 69 5f 78 6c 6f 6f 70  |3done..gwi_xloop|
00003590  33 0a 09 4c 44 52 09 67  77 69 5f 6d 31 2c 20 5b  |3..LDR.gwi_m1, [|
000035a0  67 77 69 5f 73 70 2c 20  23 30 5d 0a 20 20 20 20  |gwi_sp, #0].    |
000035b0  20 20 20 20 41 4e 44 20  20 20 20 20 67 77 69 5f  |    AND     gwi_|
000035c0  72 2c 20 67 77 69 5f 6d  31 2c 20 23 32 35 35 09  |r, gwi_m1, #255.|
000035d0  3b 66 72 6f 6d 20 68 65  72 65 20 2e 20 2e 20 2e  |;from here . . .|
000035e0  0a 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
000035f0  20 67 77 69 5f 67 2c 20  67 77 69 5f 6d 31 2c 20  | gwi_g, gwi_m1, |
00003600  4c 53 52 20 23 38 0a 20  20 20 20 20 20 20 20 41  |LSR #8.        A|
00003610  4e 44 20 20 20 20 20 67  77 69 5f 67 2c 20 67 77  |ND     gwi_g, gw|
00003620  69 5f 67 2c 20 23 32 35  35 0a 20 20 20 20 20 20  |i_g, #255.      |
00003630  20 20 4d 4f 56 20 20 20  20 20 67 77 69 5f 62 2c  |  MOV     gwi_b,|
00003640  20 67 77 69 5f 6d 31 2c  20 4c 53 52 20 23 31 36  | gwi_m1, LSR #16|
00003650  0a 20 20 20 20 20 20 20  20 41 4e 44 20 20 20 20  |.        AND    |
00003660  20 67 77 69 5f 62 2c 20  67 77 69 5f 62 2c 20 23  | gwi_b, gwi_b, #|
00003670  32 35 35 09 3b 74 6f 20  68 65 72 65 2c 20 65 78  |255.;to here, ex|
00003680  74 72 61 63 74 20 74 68  72 65 65 20 72 2c 67 20  |tract three r,g |
00003690  26 20 62 20 38 20 62 69  74 20 63 6f 6d 70 6f 6e  |& b 8 bit compon|
000036a0  65 6e 74 73 20 69 6e 74  6f 20 5f 72 2c 20 5f 67  |ents into _r, _g|
000036b0  20 26 20 5f 62 0a 0a 20  20 20 20 20 20 20 20 53  | & _b..        S|
000036c0  55 42 20 20 20 20 20 67  77 69 5f 6d 34 2c 20 67  |UB     gwi_m4, g|
000036d0  77 69 5f 69 2c 20 23 31  09 09 3b 66 6f 72 20 70  |wi_i, #1..;for p|
000036e0  69 78 65 6c 20 61 62 6f  76 65 20 2e 20 2e 20 2e  |ixel above . . .|
000036f0  0a 20 20 20 20 20 20 20  20 4c 44 52 20 20 20 20  |.        LDR    |
00003700  20 67 77 69 5f 6d 34 2c  20 5b 67 77 69 5f 64 65  | gwi_m4, [gwi_de|
00003710  2c 20 67 77 69 5f 6d 34  2c 20 41 53 4c 20 23 32  |, gwi_m4, ASL #2|
00003720  5d 0a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |].        MOV   |
00003730  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 34  |  gwi_m1, gwi_m4|
00003740  2c 20 4c 53 4c 20 23 32  34 0a 20 20 20 20 20 20  |, LSL #24.      |
00003750  20 20 4d 4f 56 20 20 20  20 20 67 77 69 5f 6d 31  |  MOV     gwi_m1|
00003760  2c 20 67 77 69 5f 6d 31  2c 20 41 53 52 20 23 32  |, gwi_m1, ASR #2|
00003770  34 0a 20 20 20 20 20 20  20 20 41 44 44 53 20 20  |4.        ADDS  |
00003780  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |  gwi_m1, gwi_m1|
00003790  2c 20 67 77 69 5f 6d 31  2c 20 41 53 4c 20 23 32  |, gwi_m1, ASL #2|
000037a0  0a 20 20 20 20 20 20 20  20 41 44 44 4d 49 20 20  |.        ADDMI  |
000037b0  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 31 2c  | gwi_m1, gwi_m1,|
000037c0  20 23 31 35 0a 20 20 20  20 20 20 20 20 41 44 44  | #15.        ADD|
000037d0  20 20 20 20 20 67 77 69  5f 72 2c 20 67 77 69 5f  |     gwi_r, gwi_|
000037e0  72 2c 20 67 77 69 5f 6d  31 2c 20 41 53 52 20 23  |r, gwi_m1, ASR #|
000037f0  34 0a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |4.        MOV   |
00003800  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 34  |  gwi_m1, gwi_m4|
00003810  2c 20 4c 53 4c 20 23 31  36 0a 20 20 20 20 20 20  |, LSL #16.      |
00003820  20 20 4d 4f 56 20 20 20  20 20 67 77 69 5f 6d 31  |  MOV     gwi_m1|
00003830  2c 20 67 77 69 5f 6d 31  2c 20 41 53 52 20 23 32  |, gwi_m1, ASR #2|
00003840  34 0a 20 20 20 20 20 20  20 20 41 44 44 53 20 20  |4.        ADDS  |
00003850  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |  gwi_m1, gwi_m1|
00003860  2c 20 67 77 69 5f 6d 31  2c 20 41 53 4c 20 23 32  |, gwi_m1, ASL #2|
00003870  0a 20 20 20 20 20 20 20  20 41 44 44 4d 49 20 20  |.        ADDMI  |
00003880  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 31 2c  | gwi_m1, gwi_m1,|
00003890  20 23 31 35 0a 20 20 20  20 20 20 20 20 41 44 44  | #15.        ADD|
000038a0  20 20 20 20 20 67 77 69  5f 67 2c 20 67 77 69 5f  |     gwi_g, gwi_|
000038b0  67 2c 20 67 77 69 5f 6d  31 2c 20 41 53 52 20 23  |g, gwi_m1, ASR #|
000038c0  34 0a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |4.        MOV   |
000038d0  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 34  |  gwi_m1, gwi_m4|
000038e0  2c 20 4c 53 4c 20 23 38  0a 20 20 20 20 20 20 20  |, LSL #8.       |
000038f0  20 4d 4f 56 20 20 20 20  20 67 77 69 5f 6d 31 2c  | MOV     gwi_m1,|
00003900  20 67 77 69 5f 6d 31 2c  20 41 53 52 20 23 32 34  | gwi_m1, ASR #24|
00003910  0a 20 20 20 20 20 20 20  20 41 44 44 53 20 20 20  |.        ADDS   |
00003920  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 31 2c  | gwi_m1, gwi_m1,|
00003930  20 67 77 69 5f 6d 31 2c  20 41 53 4c 20 23 32 0a  | gwi_m1, ASL #2.|
00003940  20 20 20 20 20 20 20 20  41 44 44 4d 49 20 20 20  |        ADDMI   |
00003950  67 77 69 5f 6d 31 2c 20  67 77 69 5f 6d 31 2c 20  |gwi_m1, gwi_m1, |
00003960  23 31 35 0a 20 20 20 20  20 20 20 20 41 44 44 20  |#15.        ADD |
00003970  20 20 20 20 67 77 69 5f  62 2c 20 67 77 69 5f 62  |    gwi_b, gwi_b|
00003980  2c 20 67 77 69 5f 6d 31  2c 20 41 53 52 20 23 34  |, gwi_m1, ASR #4|
00003990  09 3b 61 64 64 20 69 6e  20 35 2f 31 36 20 65 72  |.;add in 5/16 er|
000039a0  72 6f 72 0a 0a 20 20 20  20 20 20 20 20 43 4d 50  |ror..        CMP|
000039b0  20 20 20 20 20 67 77 69  5f 69 2c 20 67 77 69 5f  |     gwi_i, gwi_|
000039c0  78 70 0a 20 20 20 20 20  20 20 20 42 45 51 20 20  |xp.        BEQ  |
000039d0  20 20 20 67 77 69 5f 78  6c 33 5f 62 31 0a 09 09  |   gwi_xl3_b1...|
000039e0  09 09 09 09 3b 69 66 20  6e 6f 74 20 6f 6e 20 6c  |....;if not on l|
000039f0  65 66 74 6d 6f 73 74 20  63 6f 6c 75 6d 6e 20 2e  |eftmost column .|
00003a00  20 2e 20 2e 0a 20 20 20  20 20 20 20 20 4c 44 52  | . ..        LDR|
00003a10  20 20 20 20 20 67 77 69  5f 6d 34 2c 20 5b 67 77  |     gwi_m4, [gw|
00003a20  69 5f 64 65 2c 20 67 77  69 5f 69 2c 20 41 53 4c  |i_de, gwi_i, ASL|
00003a30  20 23 32 5d 0a 20 20 20  20 20 20 20 20 4d 4f 56  | #2].        MOV|
00003a40  20 20 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |     gwi_m1, gwi|
00003a50  5f 6d 34 2c 20 4c 53 4c  20 23 32 34 0a 20 20 20  |_m4, LSL #24.   |
00003a60  20 20 20 20 20 4d 4f 56  53 20 20 20 20 67 77 69  |     MOVS    gwi|
00003a70  5f 6d 31 2c 20 67 77 69  5f 6d 31 2c 20 41 53 52  |_m1, gwi_m1, ASR|
00003a80  20 23 32 34 0a 20 20 20  20 20 20 20 20 41 44 44  | #24.        ADD|
00003a90  4d 49 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |MI   gwi_m1, gwi|
00003aa0  5f 6d 31 2c 20 23 31 35  0a 20 20 20 20 20 20 20  |_m1, #15.       |
00003ab0  20 41 44 44 20 20 20 20  20 67 77 69 5f 72 2c 20  | ADD     gwi_r, |
00003ac0  67 77 69 5f 72 2c 20 67  77 69 5f 6d 31 2c 20 41  |gwi_r, gwi_m1, A|
00003ad0  53 52 20 23 34 0a 20 20  20 20 20 20 20 20 4d 4f  |SR #4.        MO|
00003ae0  56 20 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |V     gwi_m1, gw|
00003af0  69 5f 6d 34 2c 20 4c 53  4c 20 23 31 36 0a 20 20  |i_m4, LSL #16.  |
00003b00  20 20 20 20 20 20 4d 4f  56 53 20 20 20 20 67 77  |      MOVS    gw|
00003b10  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |i_m1, gwi_m1, AS|
00003b20  52 20 23 32 34 0a 20 20  20 20 20 20 20 20 41 44  |R #24.        AD|
00003b30  44 4d 49 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |DMI   gwi_m1, gw|
00003b40  69 5f 6d 31 2c 20 23 31  35 0a 20 20 20 20 20 20  |i_m1, #15.      |
00003b50  20 20 41 44 44 20 20 20  20 20 67 77 69 5f 67 2c  |  ADD     gwi_g,|
00003b60  20 67 77 69 5f 67 2c 20  67 77 69 5f 6d 31 2c 20  | gwi_g, gwi_m1, |
00003b70  41 53 52 20 23 34 0a 20  20 20 20 20 20 20 20 4d  |ASR #4.        M|
00003b80  4f 56 20 20 20 20 20 67  77 69 5f 6d 31 2c 20 67  |OV     gwi_m1, g|
00003b90  77 69 5f 6d 34 2c 20 4c  53 4c 20 23 38 0a 20 20  |wi_m4, LSL #8.  |
00003ba0  20 20 20 20 20 20 4d 4f  56 53 20 20 20 20 67 77  |      MOVS    gw|
00003bb0  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |i_m1, gwi_m1, AS|
00003bc0  52 20 23 32 34 0a 20 20  20 20 20 20 20 20 41 44  |R #24.        AD|
00003bd0  44 4d 49 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |DMI   gwi_m1, gw|
00003be0  69 5f 6d 31 2c 20 23 31  35 0a 20 20 20 20 20 20  |i_m1, #15.      |
00003bf0  20 20 41 44 44 20 20 20  20 20 67 77 69 5f 62 2c  |  ADD     gwi_b,|
00003c00  20 67 77 69 5f 62 2c 20  67 77 69 5f 6d 31 2c 20  | gwi_b, gwi_m1, |
00003c10  41 53 52 20 23 34 09 3b  61 64 64 20 69 6e 20 31  |ASR #4.;add in 1|
00003c20  2f 31 36 20 65 72 72 6f  72 20 66 6f 72 20 70 69  |/16 error for pi|
00003c30  78 65 6c 20 74 6f 20 61  62 6f 76 65 20 6c 65 66  |xel to above lef|
00003c40  74 0a 0a 20 20 20 20 20  20 20 20 53 54 52 20 20  |t..        STR  |
00003c50  20 20 20 67 77 69 5f 6c  64 65 2c 20 5b 67 77 69  |   gwi_lde, [gwi|
00003c60  5f 64 65 2c 20 67 77 69  5f 69 2c 20 41 53 4c 20  |_de, gwi_i, ASL |
00003c70  23 32 5d 09 3b 62 75 66  66 65 72 20 6c 61 73 74  |#2].;buffer last|
00003c80  20 65 72 72 6f 72 0a 0a  20 20 20 20 20 20 20 20  | error..        |
00003c90  4d 4f 56 20 20 20 20 20  67 77 69 5f 6d 31 2c 20  |MOV     gwi_m1, |
00003ca0  67 77 69 5f 6c 64 65 2c  20 4c 53 4c 20 23 32 34  |gwi_lde, LSL #24|
00003cb0  0a 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
00003cc0  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 31 2c  | gwi_m1, gwi_m1,|
00003cd0  20 41 53 52 20 23 32 34  0a 20 20 20 20 20 20 20  | ASR #24.       |
00003ce0  20 52 53 42 53 20 20 20  20 67 77 69 5f 6d 31 2c  | RSBS    gwi_m1,|
00003cf0  20 67 77 69 5f 6d 31 2c  20 67 77 69 5f 6d 31 2c  | gwi_m1, gwi_m1,|
00003d00  20 41 53 4c 20 23 33 0a  20 20 20 20 20 20 20 20  | ASL #3.        |
00003d10  41 44 44 4d 49 20 20 20  67 77 69 5f 6d 31 2c 20  |ADDMI   gwi_m1, |
00003d20  67 77 69 5f 6d 31 2c 20  23 31 35 0a 20 20 20 20  |gwi_m1, #15.    |
00003d30  20 20 20 20 41 44 44 20  20 20 20 20 67 77 69 5f  |    ADD     gwi_|
00003d40  72 2c 20 67 77 69 5f 72  2c 20 67 77 69 5f 6d 31  |r, gwi_r, gwi_m1|
00003d50  2c 20 41 53 52 20 23 34  0a 20 20 20 20 20 20 20  |, ASR #4.       |
00003d60  20 4d 4f 56 20 20 20 20  20 67 77 69 5f 6d 31 2c  | MOV     gwi_m1,|
00003d70  20 67 77 69 5f 6c 64 65  2c 20 4c 53 4c 20 23 31  | gwi_lde, LSL #1|
00003d80  36 0a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |6.        MOV   |
00003d90  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |  gwi_m1, gwi_m1|
00003da0  2c 20 41 53 52 20 23 32  34 0a 20 20 20 20 20 20  |, ASR #24.      |
00003db0  20 20 52 53 42 53 20 20  20 20 67 77 69 5f 6d 31  |  RSBS    gwi_m1|
00003dc0  2c 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |, gwi_m1, gwi_m1|
00003dd0  2c 20 41 53 4c 20 23 33  0a 20 20 20 20 20 20 20  |, ASL #3.       |
00003de0  20 41 44 44 4d 49 20 20  20 67 77 69 5f 6d 31 2c  | ADDMI   gwi_m1,|
00003df0  20 67 77 69 5f 6d 31 2c  20 23 31 35 0a 20 20 20  | gwi_m1, #15.   |
00003e00  20 20 20 20 20 41 44 44  20 20 20 20 20 67 77 69  |     ADD     gwi|
00003e10  5f 67 2c 20 67 77 69 5f  67 2c 20 67 77 69 5f 6d  |_g, gwi_g, gwi_m|
00003e20  31 2c 20 41 53 52 20 23  34 0a 20 20 20 20 20 20  |1, ASR #4.      |
00003e30  20 20 4d 4f 56 20 20 20  20 20 67 77 69 5f 6d 31  |  MOV     gwi_m1|
00003e40  2c 20 67 77 69 5f 6c 64  65 2c 20 4c 53 4c 20 23  |, gwi_lde, LSL #|
00003e50  38 0a 20 20 20 20 20 20  20 20 4d 4f 56 20 20 20  |8.        MOV   |
00003e60  20 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |  gwi_m1, gwi_m1|
00003e70  2c 20 41 53 52 20 23 32  34 0a 20 20 20 20 20 20  |, ASR #24.      |
00003e80  20 20 52 53 42 53 20 20  20 20 67 77 69 5f 6d 31  |  RSBS    gwi_m1|
00003e90  2c 20 67 77 69 5f 6d 31  2c 20 67 77 69 5f 6d 31  |, gwi_m1, gwi_m1|
00003ea0  2c 20 41 53 4c 20 23 33  0a 20 20 20 20 20 20 20  |, ASL #3.       |
00003eb0  20 41 44 44 4d 49 20 20  20 67 77 69 5f 6d 31 2c  | ADDMI   gwi_m1,|
00003ec0  20 67 77 69 5f 6d 31 2c  20 23 31 35 0a 20 20 20  | gwi_m1, #15.   |
00003ed0  20 20 20 20 20 41 44 44  20 20 20 20 20 67 77 69  |     ADD     gwi|
00003ee0  5f 62 2c 20 67 77 69 5f  62 2c 20 67 77 69 5f 6d  |_b, gwi_b, gwi_m|
00003ef0  31 2c 20 41 53 52 20 23  34 09 3b 26 20 61 64 64  |1, ASR #4.;& add|
00003f00  20 69 6e 20 37 2f 31 36  20 65 72 72 6f 72 20 66  | in 7/16 error f|
00003f10  6f 72 20 70 69 78 65 6c  20 74 6f 20 6c 65 66 74  |or pixel to left|
00003f20  0a 0a 67 77 69 5f 78 6c  33 5f 62 31 0a 20 20 20  |..gwi_xl3_b1.   |
00003f30  20 20 20 20 20 43 4d 50  20 20 20 20 20 67 77 69  |     CMP     gwi|
00003f40  5f 69 2c 20 23 31 0a 20  20 20 20 20 20 20 20 42  |_i, #1.        B|
00003f50  45 51 20 20 20 20 20 67  77 69 5f 78 6c 33 5f 62  |EQ     gwi_xl3_b|
00003f60  32 0a 09 09 09 09 09 09  3b 69 66 20 6e 6f 74 20  |2.......;if not |
00003f70  6f 6e 20 66 61 72 20 72  69 67 68 74 20 2e 20 2e  |on far right . .|
00003f80  20 2e 0a 20 20 20 20 20  20 20 20 53 55 42 20 20  | ..        SUB  |
00003f90  20 20 20 67 77 69 5f 6d  32 2c 20 67 77 69 5f 69  |   gwi_m2, gwi_i|
00003fa0  2c 20 23 32 0a 20 20 20  20 20 20 20 20 4c 44 52  |, #2.        LDR|
00003fb0  20 20 20 20 20 67 77 69  5f 6d 34 2c 20 5b 67 77  |     gwi_m4, [gw|
00003fc0  69 5f 64 65 2c 20 67 77  69 5f 6d 32 2c 20 41 53  |i_de, gwi_m2, AS|
00003fd0  4c 20 23 32 5d 0a 20 20  20 20 20 20 20 20 4d 4f  |L #2].        MO|
00003fe0  56 20 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |V     gwi_m1, gw|
00003ff0  69 5f 6d 34 2c 20 4c 53  4c 20 23 32 34 0a 20 20  |i_m4, LSL #24.  |
00004000  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 67 77  |      MOV     gw|
00004010  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |i_m1, gwi_m1, AS|
00004020  52 20 23 32 34 0a 20 20  20 20 20 20 20 20 41 44  |R #24.        AD|
00004030  44 53 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |DS    gwi_m1, gw|
00004040  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |i_m1, gwi_m1, AS|
00004050  4c 20 23 31 0a 20 20 20  20 20 20 20 20 41 44 44  |L #1.        ADD|
00004060  4d 49 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |MI   gwi_m1, gwi|
00004070  5f 6d 31 2c 20 23 31 35  0a 20 20 20 20 20 20 20  |_m1, #15.       |
00004080  20 41 44 44 20 20 20 20  20 67 77 69 5f 72 2c 20  | ADD     gwi_r, |
00004090  67 77 69 5f 72 2c 20 67  77 69 5f 6d 31 2c 20 41  |gwi_r, gwi_m1, A|
000040a0  53 52 20 23 34 0a 20 20  20 20 20 20 20 20 4d 4f  |SR #4.        MO|
000040b0  56 20 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |V     gwi_m1, gw|
000040c0  69 5f 6d 34 2c 20 4c 53  4c 20 23 31 36 0a 20 20  |i_m4, LSL #16.  |
000040d0  20 20 20 20 20 20 4d 4f  56 20 20 20 20 20 67 77  |      MOV     gw|
000040e0  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |i_m1, gwi_m1, AS|
000040f0  52 20 23 32 34 0a 20 20  20 20 20 20 20 20 41 44  |R #24.        AD|
00004100  44 53 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |DS    gwi_m1, gw|
00004110  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |i_m1, gwi_m1, AS|
00004120  4c 20 23 31 0a 20 20 20  20 20 20 20 20 41 44 44  |L #1.        ADD|
00004130  4d 49 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |MI   gwi_m1, gwi|
00004140  5f 6d 31 2c 20 23 31 35  0a 20 20 20 20 20 20 20  |_m1, #15.       |
00004150  20 41 44 44 20 20 20 20  20 67 77 69 5f 67 2c 20  | ADD     gwi_g, |
00004160  67 77 69 5f 67 2c 20 67  77 69 5f 6d 31 2c 20 41  |gwi_g, gwi_m1, A|
00004170  53 52 20 23 34 0a 20 20  20 20 20 20 20 20 4d 4f  |SR #4.        MO|
00004180  56 20 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |V     gwi_m1, gw|
00004190  69 5f 6d 34 2c 20 4c 53  4c 20 23 38 0a 20 20 20  |i_m4, LSL #8.   |
000041a0  20 20 20 20 20 4d 4f 56  20 20 20 20 20 67 77 69  |     MOV     gwi|
000041b0  5f 6d 31 2c 20 67 77 69  5f 6d 31 2c 20 41 53 52  |_m1, gwi_m1, ASR|
000041c0  20 23 32 34 0a 20 20 20  20 20 20 20 20 41 44 44  | #24.        ADD|
000041d0  53 20 20 20 20 67 77 69  5f 6d 31 2c 20 67 77 69  |S    gwi_m1, gwi|
000041e0  5f 6d 31 2c 20 67 77 69  5f 6d 31 2c 20 41 53 4c  |_m1, gwi_m1, ASL|
000041f0  20 23 31 0a 20 20 20 20  20 20 20 20 41 44 44 4d  | #1.        ADDM|
00004200  49 20 20 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |I   gwi_m1, gwi_|
00004210  6d 31 2c 20 23 31 35 0a  20 20 20 20 20 20 20 20  |m1, #15.        |
00004220  41 44 44 20 20 20 20 20  67 77 69 5f 62 2c 20 67  |ADD     gwi_b, g|
00004230  77 69 5f 62 2c 20 67 77  69 5f 6d 31 2c 20 41 53  |wi_b, gwi_m1, AS|
00004240  52 20 23 34 09 3b 61 64  64 20 69 6e 20 33 2f 31  |R #4.;add in 3/1|
00004250  36 20 65 72 72 6f 72 20  66 6f 72 20 70 69 78 65  |6 error for pixe|
00004260  6c 20 74 6f 20 61 62 6f  76 65 20 72 69 67 68 74  |l to above right|
00004270  0a 0a 67 77 69 5f 78 6c  33 5f 62 32 0a 0a 20 20  |..gwi_xl3_b2..  |
00004280  20 20 20 20 20 20 67 77  69 5f 73 65 67 31 09 09  |      gwi_seg1..|
00004290  09 3b 77 72 69 74 65 20  64 65 73 74 69 6e 61 74  |.;write destinat|
000042a0  69 6f 6e 20 70 69 78 65  6c 20 26 20 63 61 6c 63  |ion pixel & calc|
000042b0  20 69 74 73 20 65 72 72  6f 72 0a 0a 20 20 20 20  | its error..    |
000042c0  20 20 20 20 41 44 44 20  20 20 20 20 67 77 69 5f  |    ADD     gwi_|
000042d0  64 70 2c 20 67 77 69 5f  64 70 2c 20 23 31 0a 20  |dp, gwi_dp, #1. |
000042e0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 67  |       ADD     g|
000042f0  77 69 5f 73 70 2c 20 67  77 69 5f 73 70 2c 20 23  |wi_sp, gwi_sp, #|
00004300  34 0a 20 20 20 20 20 20  20 20 53 55 42 53 20 20  |4.        SUBS  |
00004310  20 20 67 77 69 5f 69 2c  20 67 77 69 5f 69 2c 20  |  gwi_i, gwi_i, |
00004320  23 31 0a 20 20 20 20 20  20 20 20 42 47 54 20 20  |#1.        BGT  |
00004330  20 20 20 67 77 69 5f 78  6c 6f 6f 70 33 09 09 3b  |   gwi_xloop3..;|
00004340  63 6f 6e 74 69 6e 75 65  20 74 69 6c 6c 20 61 6c  |continue till al|
00004350  6c 20 6f 66 20 6c 65 66  74 20 74 6f 20 72 69 67  |l of left to rig|
00004360  68 74 20 72 6f 77 20 70  72 6f 63 65 73 73 65 64  |ht row processed|
00004370  0a 67 77 69 5f 78 6c 6f  6f 70 33 64 6f 6e 65 0a  |.gwi_xloop3done.|
00004380  0a 20 20 20 20 20 20 20  20 52 53 42 20 20 20 20  |.        RSB    |
00004390  20 67 77 69 5f 6d 32 2c  20 67 77 69 5f 78 70 2c  | gwi_m2, gwi_xp,|
000043a0  20 23 34 0a 20 20 20 20  20 20 20 20 41 4e 44 20  | #4.        AND |
000043b0  20 20 20 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |    gwi_m1, gwi_|
000043c0  6d 32 2c 20 23 33 0a 20  20 20 20 20 20 20 20 41  |m2, #3.        A|
000043d0  44 44 20 20 20 20 20 67  77 69 5f 6d 31 2c 20 67  |DD     gwi_m1, g|
000043e0  77 69 5f 6d 31 2c 20 67  77 69 5f 78 70 0a 20 20  |wi_m1, gwi_xp.  |
000043f0  20 20 20 20 20 20 53 55  42 20 20 20 20 20 67 77  |      SUB     gw|
00004400  69 5f 6d 31 2c 20 67 77  69 5f 6d 31 2c 20 23 31  |i_m1, gwi_m1, #1|
00004410  0a 20 20 20 20 20 20 20  20 41 44 44 20 20 20 20  |.        ADD    |
00004420  20 67 77 69 5f 64 70 2c  20 67 77 69 5f 64 70 2c  | gwi_dp, gwi_dp,|
00004430  20 67 77 69 5f 6d 31 0a  09 41 44 44 20 20 20 20  | gwi_m1..ADD    |
00004440  20 67 77 69 5f 73 70 2c  20 67 77 69 5f 73 70 2c  | gwi_sp, gwi_sp,|
00004450  20 67 77 69 5f 78 70 2c  20 4c 53 4c 20 23 32 0a  | gwi_xp, LSL #2.|
00004460  20 20 20 20 20 20 20 20  53 55 42 20 20 20 20 20  |        SUB     |
00004470  67 77 69 5f 73 70 2c 20  67 77 69 5f 73 70 2c 20  |gwi_sp, gwi_sp, |
00004480  23 34 09 3b 73 74 65 70  20 64 70 2c 20 73 70 20  |#4.;step dp, sp |
00004490  74 6f 20 73 74 61 72 74  20 6f 66 20 6e 65 78 74  |to start of next|
000044a0  20 72 69 67 68 74 2d 74  6f 2d 6c 65 66 74 20 72  | right-to-left r|
000044b0  6f 77 0a 0a 20 20 20 20  20 20 20 20 4c 44 52 20  |ow..        LDR |
000044c0  20 20 20 20 67 77 69 5f  6d 31 2c 20 67 77 69 5f  |    gwi_m1, gwi_|
000044d0  61 6a 0a 20 20 20 20 20  20 20 20 53 55 42 53 20  |aj.        SUBS |
000044e0  20 20 20 67 77 69 5f 6d  31 2c 20 67 77 69 5f 6d  |   gwi_m1, gwi_m|
000044f0  31 2c 20 23 31 0a 20 20  20 20 20 20 20 20 53 54  |1, #1.        ST|
00004500  52 20 20 20 20 20 67 77  69 5f 6d 31 2c 20 67 77  |R     gwi_m1, gw|
00004510  69 5f 61 6a 0a 20 20 20  20 20 20 20 20 42 50 4c  |i_aj.        BPL|
00004520  20 20 20 20 20 67 77 69  5f 79 6c 6f 6f 70 09 09  |     gwi_yloop..|
00004530  3b 26 20 72 65 70 65 61  74 2c 20 75 6e 74 69 6c  |;& repeat, until|
00004540  20 61 6c 6c 20 72 6f 77  73 20 64 6f 6e 65 0a 0a  | all rows done..|
00004550  67 77 69 5f 79 6c 6f 6f  70 64 6f 6e 65 0a 20 20  |gwi_yloopdone.  |
00004560  20 20 20 20 20 20 3b 61  6c 6c 20 64 6f 6e 65 0a  |      ;all done.|
00004570  20 20 20 20 20 20 20 20  4c 44 52 20 20 20 20 20  |        LDR     |
00004580  73 70 2c 20 67 77 69 5f  61 73 70 0a 20 20 20 20  |sp, gwi_asp.    |
00004590  20 20 20 20 4c 44 52 20  20 20 20 20 66 70 2c 20  |    LDR     fp, |
000045a0  67 77 69 5f 61 66 70 0a  20 20 20 20 20 20 20 20  |gwi_afp.        |
000045b0  4c 44 52 20 20 20 20 20  73 6c 2c 20 67 77 69 5f  |LDR     sl, gwi_|
000045c0  61 73 6c 0a 20 20 20 20  20 20 20 20 4c 44 4d 45  |asl.        LDME|
000045d0  41 20 20 20 66 70 2c 20  7b 72 34 2d 72 39 2c 20  |A   fp, {r4-r9, |
000045e0  66 70 2c 20 73 70 2c 20  70 63 7d 5e 09 3b 67 65  |fp, sp, pc}^.;ge|
000045f0  74 20 6f 75 74 20 6f 66  20 68 65 72 65 21 0a 0a  |t out of here!..|
00004600  0a 0a 20 20 20 20 20 20  20 20 45 4e 44 0a        |..        END.|
0000460e