diff src/aa_wordprocessor.asm @ 582:b455b31ce022

work on 2.97 stable
author heinrichsweikamp
date Mon, 26 Feb 2018 16:40:28 +0100
parents 95ee78f4a974
children ca4556fb60b9
line wrap: on
line diff
--- a/src/aa_wordprocessor.asm	Sun Feb 25 18:25:38 2018 +0100
+++ b/src/aa_wordprocessor.asm	Mon Feb 26 16:40:28 2018 +0100
@@ -1,6 +1,6 @@
 ;=============================================================================
 ;
-;   File aa_wordprocessor.asm
+;   File aa_wordprocessor.asm										## V2.97
 ;
 ;   Anti-aliased word processor
 ;
@@ -8,200 +8,179 @@
 ;=============================================================================
 ; HISTORY
 ;  2010-11-22 : [jDG] Creation.
-;  2010-12-01 : [jDG] Adding 3bits antialiased fonts.
+;  2010-12-01 : [jDG] Adding 3bits anti-aliased fonts.
 ;  2010-12-30 : [jDG] Revised to put temp into ACCESSRAM0
 ;  2012-08-12 : [mH]  Moved font28 into bootloader section 0x1C000
 ;
 ; BUGS :
 ;  * If the three fonts are not in the same half of the PROM memory, TBLPTRU
-;    will be badly set, and font48 or font90 will display giberish...
+;    will be badly set, and font48 or font90 will display gibberish...
 ;=============================================================================
 ;
 ; MEMORY FOOTPRINT:
 ;------------------
 ;
-; wp_wordprocessor : 8KB, including fonts.
-; aa_wordprocessor : 0.5KB code
-;                  + 3.5KB aa_font28 (reduced to 99 chars)
-;                  + 1.6KB aa_font48
-;                  + 2.2KB aa_font90
-;                  = 7.9 KB including fonts...
+; wp_wordprocessor : 8   KB, including fonts
+; aa_wordprocessor : 0.5 KB code
+;                  + 3.5 KB aa_font28 (reduced to 99 chars)
+;                  + 1.6 KB aa_font48
+;                  + 2.2 KB aa_font90
+;                  = 7.9 KB including fonts
 ;
 ; Input registers:
-;	buffer:26				String to print.
-;	win_font				Font size (0=tiny, 1=small, 2=medium, 3=large)
-;	win_color1:2			16bits unpacked color
-;	win_top, win_leftx2		Position on screen
-;	win_inverse				Inverse video mode.
+;  buffer:26            String to print
+;  win_font             Font size (0=tiny, 1=small, 2=medium, 3=large)
+;  win_color1:2         16bits unpacked color
+;  win_top, win_leftx2  Position on screen
+;  win_inverse          Inverse video mode
 ;
 ; Available general purpose registers:
-;   PRODH, PRODL	(needed for array indexing)
-;   FSRx            12bits. Usefull as RAM pointers.
+;  PRODH, PRODL	        needed for array indexing)
+;  FSRx                 12bits. Useful as RAM pointers.
 ;=============================================================================
 
 #include "hwos.inc"
 #include "tft.inc"
 
-        extern  aa_font16_block
-        extern  aa_font28_block
-        extern  aa_font36_block
-        extern  aa_font48_block
-        extern  aa_font90_block
-
-;=============================================================================
-; Temporary variables are overlayed in Bank 1, used also by C-code
-; (p2_deco), MPLAB math and stdlib libraries.
-
-        CBLOCK  tmp                     ; Data overlay in reserved tmp area.
-            aa_flags:1                  ; Various flags for aa_wordprocessor
-            aa_bitlen:1                 ; Count of pixels when decoding bitmaps.
-            aa_start:2                  ; PROM ptr to start of encoded bitmap
-            aa_end:2                    ; and end of it.
-            aa_temp:2                   ; Current color, divided by 2 or 4
-            ; Reserved to tmp+0x08...
-        ENDC
-; Flags allocation:
-#define		aa_antialias	aa_flags,0
-#define		aa_color_quart	aa_flags,1
-#define		aa_color_half	aa_flags,2
+	extern	aa_font16_block
+	extern	aa_font28_block
+	extern	aa_font36_block
+	extern	aa_font48_block
+	extern	aa_font90_block
 
 ;------------------------------------------------------------------------------
 ; Setup pointers for a char:
-; Inputs	WREG = char to draw, win_font
-; Output	aa_start, aa_end, win_height, aa_flags
-; Trashed	PRODH, PRODL, TBLPTR, TABLAT
+; Inputs   WREG = char to draw, win_font
+; Output   aa_start, aa_end, win_height, aa_flags
+; Trashed  PRODH, PRODL, TBLPTR, TABLAT
 ;
-basic   CODE
+basic	CODE
 aa_char_setup:
-		movwf	PRODL				    ; save char into PROD for now.
+	movwf	PRODL					; save char into PROD for now
+	movf	win_font,W,BANKED		; Get font number (updates Z flag)
+	bnz		aa_char_1
 
-		movf	win_font,W,BANKED	    ; Get font number (updates Z flag)
-		bnz		aa_char_1
-
-		; TINY font ---------------------------------------------------------
-		; Font TINY character folding...
+	; TINY font ---------------------------------------------------------
+	; Font TINY character folding...
 aa_char_0:
-		movlw	LOW aa_font16_block
-		movwf	TBLPTRL
-		movlw	HIGH aa_font16_block
-		movwf	TBLPTRH
-		movlw	UPPER aa_font16_block
-		movwf	TBLPTRU
-		bra		aa_char_99
-
-		; SMALL font ---------------------------------------------------------
-		; Font SMALL character folding...
-aa_char_1:
-		decfsz	WREG				    ; This is small font ???
-		bra		aa_char_2
+	movlw	LOW aa_font16_block
+	movwf	TBLPTRL
+	movlw	HIGH aa_font16_block
+	movwf	TBLPTRH
+	movlw	UPPER aa_font16_block
+	movwf	TBLPTRU
+	bra		aa_char_99
 
-		movlw	LOW aa_font28_block
-		movwf	TBLPTRL
-		movlw	HIGH aa_font28_block
-		movwf	TBLPTRH
-		movlw	UPPER aa_font28_block
-		movwf	TBLPTRU
-		bra		aa_char_99
-
-		; STD font -----------------------------------------------------------
-		; Font SMALL character folding...
-aa_char_2:
-		decfsz	WREG				    ; This is small font ???
-		bra		aa_char_3
+	; SMALL font ---------------------------------------------------------
+	; Font SMALL character folding...
+aa_char_1:
+	decfsz	WREG					; This is small font ???
+	bra		aa_char_2
+	movlw	LOW aa_font28_block
+	movwf	TBLPTRL
+	movlw	HIGH aa_font28_block
+	movwf	TBLPTRH
+	movlw	UPPER aa_font28_block
+	movwf	TBLPTRU
+	bra		aa_char_99
 
-		movlw	LOW aa_font36_block
-		movwf	TBLPTRL
-		movlw	HIGH aa_font36_block
-		movwf	TBLPTRH
-		movlw	UPPER aa_font36_block
-		movwf	TBLPTRU
-		bra		aa_char_99
+	; STD font -----------------------------------------------------------
+	; Font SMALL character folding...
+aa_char_2:
+	decfsz	WREG					; This is small font ???
+	bra		aa_char_3
+	movlw	LOW aa_font36_block
+	movwf	TBLPTRL
+	movlw	HIGH aa_font36_block
+	movwf	TBLPTRH
+	movlw	UPPER aa_font36_block
+	movwf	TBLPTRU
+	bra		aa_char_99
 
-		; MEDIUM font --------------------------------------------------------
+	; MEDIUM font --------------------------------------------------------
 aa_char_3:
-		decfsz	WREG				    ; This is medium font ???
-		bra		aa_char_4
+	decfsz	WREG				 	; This is medium font ???
+	bra		aa_char_4
 
-		; Font MEDIUM block:
-		movlw	LOW aa_font48_block
-		movwf	TBLPTRL
-		movlw	HIGH aa_font48_block
-		movwf	TBLPTRH
-		movlw	UPPER aa_font48_block
-		movwf	TBLPTRU
-		bra		aa_char_99
+	; Font MEDIUM block:
+	movlw	LOW aa_font48_block
+	movwf	TBLPTRL
+	movlw	HIGH aa_font48_block
+	movwf	TBLPTRH
+	movlw	UPPER aa_font48_block
+	movwf	TBLPTRU
+	bra		aa_char_99
 
-		; LARGE font ---------------------------------------------------------
+	; LARGE font ---------------------------------------------------------
 aa_char_4:
-		; Font LARGE block:
-		movlw	LOW aa_font90_block
-		movwf	TBLPTRL
-		movlw	HIGH aa_font90_block
-		movwf	TBLPTRH
-		movlw	UPPER aa_font90_block
-		movwf	TBLPTRU
-
-		; Execute font block -------------------------------------------------
-aa_char_99:
-        ; This is safe if the three fonts are in the same code segment
-        ; (and that segment do not span the 64K edge...)
-		movlw	UPPER aa_font16_block
-		movwf	TBLPTRU
+	; Font LARGE block:
+	movlw	LOW aa_font90_block
+	movwf	TBLPTRL
+	movlw	HIGH aa_font90_block
+	movwf	TBLPTRH
+	movlw	UPPER aa_font90_block
+	movwf	TBLPTRU
 
-        ; Proceed to character substitutions
+	; Execute font block -------------------------------------------------
+aa_char_99:
+	; This is safe if the three fonts are in the same code segment
+	; (and that segment do not span the 64K edge...)
+	movlw	UPPER aa_font16_block
+	movwf	TBLPTRU
+
+	; Proceed to character substitutions
 aa_char_30:
-		tblrd*+						    ; Read FROM char
-		movf	TABLAT,W			    ; Get it, and set Z,N
-		bz		aa_char_32			    ; Break at end of translations
-		
-		tblrd*+						    ; Read TO char
-		cpfseq	PRODL				    ; FROM == current char ? 
-		bra		aa_char_30		    	; Different: loop
-		movff	TABLAT, PRODL		    ; make substitution
-		bra		aa_char_30			    ; Loop.
+	tblrd*+							; Read FROM char
+	movf	TABLAT,W				; Get it, and set Z,N
+	bz		aa_char_32				; Break at end of translations
 
-        ; Make sure char is in the available range
-aa_char_32:
-		tblrd*+						    ; Read first char
-		movf	TABLAT,W			    ; get it.
-		subwf	PRODL,F				    ; (char - first) --> PRODL
+	tblrd*+							; Read TO char
+	cpfseq	PRODL					; FROM == current char ? 
+	bra		aa_char_30				; Different: loop
+	movff	TABLAT, PRODL			; make substitution
+	bra		aa_char_30				; Loop
 
-		tblrd*+						    ; Read nb chars
-		movf	TABLAT,W			    ; nbchars --> WREG
-		tblrd*+						    ; Read default char
-		cpfslt	PRODL				    ; if char > WREG ?
-		movff	TABLAT,PRODL		    ; replace PRODL
+	; Make sure char is in the available range
+aa_char_32:
+	tblrd*+							; Read first char
+	movf	TABLAT,W				; get it
+	subwf	PRODL,F					; (char - first) --> PRODL
+	tblrd*+							; Read nb chars
+	movf	TABLAT,W				; nbchars --> WREG
+	tblrd*+							; Read default char
+	cpfslt	PRODL					; if char > WREG ?
+	movff	TABLAT,PRODL			; replace PRODL
 
-        ; Decode font height and anti-aliasing mode
-		clrf	aa_flags                ; Default to no AA
-		tblrd*+						    ; Read font height + AA flag
-		movf	TABLAT,W			    ; into WREG
-		bnn		aa_char_34			    ; High bit set ?
-		bsf		aa_antialias            ; YES : then the font is AA.
+	; Decode font height and anti-aliasing mode
+	clrf	aa_flags				; Default to no AA
+	tblrd*+							; Read font height + AA flag
+	movf	TABLAT,W				; into WREG
+	bnn		aa_char_34				; High bit set ?
+	bsf		aa_antialias			; YES : then the font is AA
 aa_char_34:
-		andlw	0x7F				    ; Keep just font height,
-		movwf	win_height,BANKED	    ; then save it (its a register)
+	andlw	0x7F					; Keep just font height,
+	movwf	win_height,BANKED		; then save it (its a register)
 
-        ; Set PROM pointer to the char index
-		movf	PRODL,W				    ; Read back char
-		mullw	2					    ; PROD = 2*(char - base), TBLPTR=idx
-		movf	PRODL,W
-		addwf	TBLPTRL,F			    ; Add into TBLPTR (low byte)
-		movf	PRODH,W
-		addwfc	TBLPTRH,F			    ; and high byte.
+	; Set PROM pointer to the char index
+	movf	PRODL,W					; Read back char
+	mullw	2						; PROD = 2*(char - base), TBLPTR=idx
+	movf	PRODL,W
+	addwf	TBLPTRL,F				; Add into TBLPTR (low byte)
+	movf	PRODH,W
+	addwfc	TBLPTRH,F				; and high byte
 
-        ; Read start and stop pointers
-		tblrd*+						    ; aa_start = PROM16(*tblptr++)
-		movff	TABLAT,aa_start+0       ; Read low byte
-		tblrd*+
-		movff	TABLAT,aa_start+1       ; and high byte
+	; Read start and stop pointers
+	tblrd*+							; aa_start = PROM16(*tblptr++)
+	movff	TABLAT,aa_start+0		; Read low byte
+	tblrd*+
+	movff	TABLAT,aa_start+1		; and high byte
 
-		tblrd*+						    ; aa_end = PROM16(*tblptr++)
-		movff	TABLAT,aa_end+0         ; Read low byte
-		tblrd*+
-		movff	TABLAT,aa_end+1         ; and high byte
+	tblrd*+							; aa_end = PROM16(*tblptr++)
+	movff	TABLAT,aa_end+0			; Read low byte
+	tblrd*+
+	movff	TABLAT,aa_end+1			; and high byte
 
-		return
+	return
 
 ;------------------------------------------------------------------------------
 ; Character width
@@ -210,253 +189,254 @@
 ; Trashed	aa_bitlen, TBLPTR, TABLAT
 ;
 aa_char_width:
-		movff	aa_start+0, TBLPTRL     ;	TBLPTR = aa_start
-		movff	aa_start+1, TBLPTRH
-		clrf	aa_bitlen               ; clear reminders...
+	movff	aa_start+0, TBLPTRL		; TBLPTR = aa_start
+	movff	aa_start+1, TBLPTRH
+	clrf	aa_bitlen				; clear reminders...
 
 		; Read bitmap byte, and decode length:
 aa_char_width_1:
-    ifdef AA_BYTE_SWAP
-		btg		TBLPTRL,0  			    ; Toggle low ptr bit.
+
+	ifdef AA_BYTE_SWAP
+		btg		TBLPTRL,0			; Toggle low ptr bit
 		tblrd*
-		movf	TABLAT,W  			    ; Store to WREG
-		btg		TBLPTRL,0  			    ; Get is back
-		tblrd*+						    ; then increment (but trash TABLAT)
-		movwf	TABLAT  			    ; Then restore copy to TABLAT.
-    else
-		tblrd*+						    ; Normal read...
-		movf	TABLAT,W 			    ; Store copy to WREG
-    endif
-		btfss	aa_antialias            ; Antialiased font ?
-		bra		aa_char_width_10	    ; No: always 7 bits count
+		movf	TABLAT,W			; Store to WREG
+		btg		TBLPTRL,0			; Get is back
+		tblrd*+						; then increment (but trash TABLAT)
+		movwf	TABLAT				; Then restore copy to TABLAT
+	else
+		tblrd*+						; Normal read...
+		movf	TABLAT,W			; Store copy to WREG
+	endif
+
+	btfss	aa_antialias			; Anti-aliased font ?
+	bra		aa_char_width_10		; No: always 7 bits count
 
-		bn		aa_char_width_10	    ; Non-white pixels ?
-		andlw	0x1F				    ; Yes : 5 bits count.
+	bn		aa_char_width_10		; Non-white pixels ?
+	andlw	0x1F					; Yes : 5 bits count
 aa_char_width_10:
-		andlw	0x7F				    ; No: 7 bit count.
-		incf	WREG 				    ; WREG = repetition count
-		addwf	aa_bitlen,F             ; Add remaining pixels from last code.
-		
-		movf	win_height,W,BANKED	    ; WREG = - height
-		negf	WREG
+	andlw	0x7F					; No: 7 bit count
+	incf	WREG 					; WREG = repetition count
+	addwf	aa_bitlen,F				; Add remaining pixels from last code
+
+	movf	win_height,W,BANKED		; WREG = - height
+	negf	WREG
 
-		; This is a hand-made division by successive substraction of height
+	; This is a hand-made division by successive subtraction of height
 aa_char_width_2:
-		addwf	aa_bitlen,F             ; Try to substract win_height
-		bn		aa_char_width_3		    ; If neg it was a bad idea...
+	addwf	aa_bitlen,F				; Try to subtract win_height
+	bn		aa_char_width_3			; If neg it was a bad idea...
 
-		infsnz	win_width+0,F           ; Succeded: do a 16bit increment
-		incf	win_width+1,F           ; on the win_width counter.
-		bra		aa_char_width_2		    ; and loop.
+	infsnz	win_width+0,F			; Succeeded: do a 16bit increment
+	incf	win_width+1,F			; on the win_width counter
+	bra		aa_char_width_2			; and loop
 
 aa_char_width_3:
-		negf	WREG 				    ; WREG = +height
-		addwf	aa_bitlen,F             ; Restore true reminder.
+	negf	WREG					; WREG = +height
+	addwf	aa_bitlen,F				; Restore true reminder
 
-		; Are we done ?
-		movf	TBLPTRL,W 			    ; Compare TBLPTR to aa_end
-		cpfseq	aa_end+0  
-		bra		aa_char_width_1		    ; Loop if LOW is different
-		movf	TBLPTRH,W
-		cpfseq	aa_end+1                ; Loop to if HIGH is different
-		bra		aa_char_width_1
-
-		return
+	; Are we done ?
+	movf	TBLPTRL,W				; Compare TBLPTR to aa_end
+	cpfseq	aa_end+0  
+	bra		aa_char_width_1			; Loop if LOW is different
+	movf	TBLPTRH,W
+	cpfseq	aa_end+1				; Loop to if HIGH is different
+	bra		aa_char_width_1
+	return
 
 ;------------------------------------------------------------------------------
 ; String width
-; Inputs	buffer (SHOULD BE NULL TERMINATED)
-; Output	win_width, win_height
-; Trashed	PROD, TBLPTR, FSR2, aa_bitlen, aa_start, aa_end, aa_flags
+; Inputs   buffer (SHOULD BE NULL TERMINATED)
+; Output   win_width, win_height
+; Trashed  PROD, TBLPTR, FSR2, aa_bitlen, aa_start, aa_end, aa_flags
 ;
 aa_string_width:
-		lfsr	FSR2, buffer		    ; FSR2 pointer to start of string.
-
-		clrf	win_width+0             ; Clear width sum.
-		clrf	win_width+1             ; (16 bit counter)
+	lfsr	FSR2, buffer			; FSR2 pointer to start of string
+	clrf	win_width+0				; Clear width sum
+	clrf	win_width+1				; (16 bit counter)
 
 aa_string_width_1:
-		movf	POSTINC2,W  		    ; WREG = *FSR2++
-		bz		aa_string_width99	    ; Exit if null byte encountered.
+	movf	POSTINC2,W  			; WREG = *FSR2++
+	bz		aa_string_width99		; Exit if null byte encountered
 
-		rcall	aa_char_setup		    ; setup aa_start / aa_end
-		rcall	aa_char_width		    ; sum-up width into win_width
-		bra		aa_string_width_1	    ; and loop.
+	rcall	aa_char_setup			; setup aa_start / aa_end
+	rcall	aa_char_width			; sum-up width into win_width
+	bra		aa_string_width_1		; and loop
 
 aa_string_width99:
-		return
+	return
 
 ;------------------------------------------------------------------------------
 ; Decode a compressed char.
-; Inputs	aa_start, aa_end, win_height, win_invert, win_color1, win_color2
-; Output	none
-; Trashed	TBLPTR, TABLAT, PROD, aa_bitlen, aa_flags, aa_colorDir:2
+; Inputs   aa_start, aa_end, win_height, win_invert, win_color1, win_color2
+; Output   none
+; Trashed  TBLPTR, TABLAT, PROD, aa_bitlen, aa_flags, aa_colorDir:2
 ;
 aa_decode_char:
-		movff	aa_start+0, TBLPTRL     ; TBLPTR = aa_start
-		movff	aa_start+1, TBLPTRH
+	movff	aa_start+0, TBLPTRL		; TBLPTR = aa_start
+	movff	aa_start+1, TBLPTRH
 
-		; Read bitmap byte, and decode color & length
+	; Read bitmap byte, and decode color & length
 aa_decode_1:
-    ifdef AA_BYTE_SWAP
-		btg		TBLPTRL,0 			    ; Toggle low ptr bit.
+
+	ifdef AA_BYTE_SWAP
+		btg		TBLPTRL,0			; Toggle low ptr bit
 		tblrd*
-		movf	TABLAT,W 			    ; Store to WREG
-		btg		TBLPTRL,0 			    ; Get is back
-		tblrd*+						    ; then increment (but trash TABLAT)
-		movwf	TABLAT  			    ; Then restore copy to TABLAT.
-    else
-		tblrd*+						    ; Normal read...
-		movf	TABLAT,W			    ; Store copy to WREG
-    endif
-		btfss	aa_antialias            ; Antialiased font ?
-		bra		aa_decode_10		    ; No: always 7 bits count
-		bn		aa_decode_10		    ; Non-white pixels ?
-		andlw	0x1F				    ; Yes : 5 bits count.
-aa_decode_10:
-		andlw	0x7F				    ; No: 7 bit count.
-		incf	WREG				
-		movwf	aa_bitlen               ; repetition count --> aa_bitlen
+		movf	TABLAT,W			; Store to WREG
+		btg		TBLPTRL,0			; Get is back
+		tblrd*+						; then increment (but trash TABLAT)
+		movwf	TABLAT				; Then restore copy to TABLAT
+	else
+		tblrd*+						; Normal read...
+		movf	TABLAT,W			; Store copy to WREG
+	endif
 
-		;---- COLOR DECODING -------------------------------------------------
-		;
-		;   Code    Normal    Inverse
-		;   1xx        0%      100%	: Managed by aa_decode_13
-		;   011       25%       75%
-		;   010       50%       50%
-		;   001       75%       25%
-		;   000      100%        0% : Managed by aa_decode_13 too.
-		;
-		movf	TABLAT,W  			    ; Get back code
-		btfss	aa_antialias            ; Antialiased font ?
-		bra		aa_decode_13		    ; NO: 1bit case
+	btfss	aa_antialias			; Anti-aliased font ?
+	bra		aa_decode_10			; No: always 7 bits count
+	bn		aa_decode_10			; Non-white pixels ?
+	andlw	0x1F					; Yes : 5 bits count
+aa_decode_10:
+	andlw	0x7F					; No: 7 bit count
+	incf	WREG
+	movwf	aa_bitlen				; repetition count --> aa_bitlen
 
-		; Asymetry test: 1xx code is another case for 1bit color.
-		; This have to be done before inverse video, because
-		; of the asymetric processing !
-		bn		aa_decode_13		    ; decode as not-aa
+	;---- COLOR DECODING -------------------------------------------------
+	;
+	;   Code    Normal    Inverse
+	;   1xx        0%      100%	: Managed by aa_decode_13
+	;   011       25%       75%
+	;   010       50%       50%
+	;   001       75%       25%
+	;   000      100%        0% : Managed by aa_decode_13 too
+	;
+	movf	TABLAT,W				; Get back code
+	btfss	aa_antialias			; Anti-aliased font ?
+	bra		aa_decode_13			; NO: 1bit case
 
-		; Manage 000 special case too:
-		andlw	0xE0				    ; Select color bits
-		bz		aa_decode_13		    ; That's a 000 !
+	; Asymmetry test: 1xx code is another case for 1bit color.
+	; This have to be done before inverse video, because
+	; of the asymmetric processing !
+	bn		aa_decode_13			; decode as not-aa
 
-		; Apply reverse video, in a reversed way
-		btfss	win_invert  		    ; Inverse video mode ?
-		sublw	0x80
+	; Manage 000 special case too:
+	andlw	0xE0					; Select color bits
+	bz		aa_decode_13			; That's a 000 !
+
+	; Apply reverse video, in a reversed way
+	btfss	win_invert  			; Inverse video mode ?
+	sublw	0x80
 
-		; Move the two bits to aa_color_half and aa_color_quarter:
-		swapf	WREG				    ; --> 0000.0LL0 byte
-		iorlw	b'001'				    ; We are in AA mode, don't forget it !
-		movwf	aa_flags                ; save that to aa_color_(half/quad)/AA flags.
+	; Move the two bits to aa_color_half and aa_color_quarter:
+	swapf	WREG					; --> 0000.0LL0 byte
+	iorlw	b'001'					; We are in AA mode, don't forget it !
+	movwf	aa_flags				; save that to aa_color_(half/quad)/AA flags
 
-		;---- 2 bit x RGB(16bits) computation --------------------------------
-		clrf	PRODL				    ; We will accumulate result here...
-		clrf	PRODH
+	;---- 2 bit x RGB(16bits) computation --------------------------------
+	clrf	PRODL					; We will accumulate result here...
+	clrf	PRODH
 
-		; Take color div 2 into aa_temp. Max red = 15/31
-		rrcf	win_color1,W,BANKED	    ; xRRRRxGG
-		andlw	b'01111011'			    ; 0RRRR0GG (don't change C)
-		movwf	aa_temp+0
-		rrcf	win_color2,W,BANKED	    ; GGGxBBBB
-		andlw	b'11101111'			    ; GGG0BBBB
-		movwf	aa_temp+1
+	; Take color div 2 into aa_temp. Max red = 15/31
+	rrcf	win_color1,W,BANKED		; xRRRRxGG
+	andlw	b'01111011'				; 0RRRR0GG (don't change C)
+	movwf	aa_temp+0
+	rrcf	win_color2,W,BANKED		; GGGxBBBB
+	andlw	b'11101111'				; GGG0BBBB
+	movwf	aa_temp+1
 
-		btfss	aa_color_half
-		bra		aa_decode_12
+	btfss	aa_color_half
+	bra		aa_decode_12
 
-		movff	aa_temp+0,PRODH         ; Add color/2 if bit set.
-		movff	aa_temp+1,PRODL         ; TFT is big endian, so swap here.
+	movff	aa_temp+0,PRODH			; Add color/2 if bit set
+	movff	aa_temp+1,PRODL			; TFT is big endian, so swap here
 aa_decode_12:
-		btfss	aa_color_quart
-		bra		aa_decode_3
+	btfss	aa_color_quart
+	bra		aa_decode_3
 
-		; Divide it once again by 2. Max red = 7/31.
-		rrcf	aa_temp+0,W             ; xxRRRxxG
-		andlw	b'00111001'             ; 00RRR00G (don't change C)
-		movwf	aa_temp+0
-		rrcf	aa_temp+1,W             ; GGGxxBBB
-		andlw	b'11100111'             ; GGG00BBB
-		movwf	aa_temp+1
+	; Divide it once again by 2. Max red = 7/31.
+	rrcf	aa_temp+0,W				; xxRRRxxG
+	andlw	b'00111001'				; 00RRR00G (don't change C)
+	movwf	aa_temp+0
+	rrcf	aa_temp+1,W				; GGGxxBBB
+	andlw	b'11100111'				; GGG00BBB
+	movwf	aa_temp+1
 
-		movf	aa_temp+1,W             ; Add color/4
-		addwf	PRODL,F				    ; NOTE: 7/31+15/31=22/31,
-		movf	aa_temp+0,W             ; hence composants won't overlap.
-		addwfc	PRODH,F				    ; In right order, to propagate carry.
+	movf	aa_temp+1,W				; Add color/4
+	addwf	PRODL,F					; NOTE: 7/31+15/31=22/31,
+	movf	aa_temp+0,W				; hence components won't overlap
+	addwfc	PRODH,F					; In right order, to propagate carry
 
-		bra		aa_decode_3			    ; Done.
+	bra		aa_decode_3				; Done
 
-		; ---- Simple BLACK and WHITE cases ------------------------------
-aa_decode_13:							; Got a 1xx or a 000 code...
-		btfsc	win_invert  		    ; Inverse video mode ?
-		xorlw	0x80				    ; YES: invert levels.
-		bn		aa_decode_2			    ; Then test high bit.
+	; ---- Simple BLACK and WHITE cases ------------------------------
+aa_decode_13:						; Got a 1xx or a 000 code...
+	btfsc	win_invert  			; Inverse video mode ?
+	xorlw	0x80					; YES: invert levels
+	bn		aa_decode_2				; Then test high bit
 
-		; WHITE pixel (ie. full color)
-        bsf     tft_rs,0    ; RS_H				; Data
-		movff	win_color1,PORTA	    ; current draw color
-		movff	win_color2,PORTH	    ; (rem: TFT is big endian)
-		bra		aa_decode_4
+	; WHITE pixel (i.e. full color)
+	bsf		tft_rs,0				; RS_H Data
+	movff	win_color1,PORTA		; current draw color
+	movff	win_color2,PORTH		; (rem: TFT is big endian)
+	bra		aa_decode_4
 
 aa_decode_2:
-        bsf     tft_rs,0    ; RS_H				; Data
-		clrf	PORTA 				    ; BLACK pixel
-		clrf	PORTH
-        bra		aa_decode_4
+	bsf		tft_rs,0				; RS_H Data
+	clrf	PORTA					; BLACK pixel
+	clrf	PORTH
+	bra		aa_decode_4
 
 aa_decode_3:
-        bsf     tft_rs,0    ; RS_H				; Data
-    	movff	PRODH,PORTA	; Move high byte to PORTA
-        movff	PRODL,PORTH	; Move low byte to PORTH
+	bsf		tft_rs,0				; RS_H Data
+	movff	PRODH,PORTA				; Move high byte to PORTA
+	movff	PRODL,PORTH				; Move low byte to PORTH
 aa_decode_4:
 	bcf	INTCON,GIE
 aa_decode_4a:
-		;---- PIXEL WRITE LOOP -----------------------------------------------
-    	bcf     tft_nwr,0       ; WR_L
-        bsf     tft_nwr,0       ; WR_H                ; Tick
+	;---- PIXEL WRITE LOOP -----------------------------------------------
+	bcf		tft_nwr,0				; WR_L
+	bsf		tft_nwr,0				; WR_H Tick
+
+	decf	aa_bitlen,F
+	bnz		aa_decode_4a
 
-		decf	aa_bitlen,F
-		bnz		aa_decode_4a
-		
-	bsf	INTCON,GIE
-		;---- BYTE-CODE LOOP -------------------------------------------------
-		; Are we done ?
-		movf	TBLPTRL,W 			    ; Compare TBLPTR to aa_end
-		cpfseq	aa_end+0
-		bra		aa_decode_1             ; Loop if LOW is different
-		movf	TBLPTRH,W
-		cpfseq	aa_end+1			; Loop too if HIGH is different
-		bra		aa_decode_1
-		
-		return
+	bsf		INTCON,GIE
+	;---- BYTE-CODE LOOP -------------------------------------------------
+	; Are we done ?
+	movf	TBLPTRL,W				; Compare TBLPTR to aa_end
+	cpfseq	aa_end+0
+	bra		aa_decode_1				; Loop if LOW is different
+	movf	TBLPTRH,W
+	cpfseq	aa_end+1				; Loop too if HIGH is different
+	bra		aa_decode_1
+	return
 
 ;------------------------------------------------------------------------------
 ; Setup pointers for a char:
 ; Inputs : buffer : string to print (SHOULD BE NULL TERMINATED)
 ; Output : TFT commands on port D + clocks.
 ; 
-        global  aa_wordprocessor        ; Callable from C-code.
+	global	aa_wordprocessor		; Callable from C-code
 aa_wordprocessor:
-        banksel win_font                ; Bank1, just to be sure.
-		rcall	aa_string_width		    ; Set win_height, compute win_width:2
-		call	TFT_box_write		    ; Use that for the box.
+	banksel	win_font				; Bank1, just to be sure
+	rcall	aa_string_width			; Set win_height, compute win_width:2
+	call	TFT_box_write			; Use that for the box
 
-		; Restart the loop for each char to print
-		lfsr	FSR2, buffer		    ; FSR2 pointer to start of string.
+	; Restart the loop for each char to print
+	lfsr	FSR2, buffer			; FSR2 pointer to start of string
 
-		; DATA block comand
-		Index_out	0x22
+	; DATA block command
+	Index_out	0x22				; Index_out is a macro defined in tft.inc
 
 aa_wordprocessor_1:
-		movf	POSTINC2,W  		    ; WREG = *FSR2++
-		bz		aa_wordprocessor_99	    ; Exit if null byte encountered.
+	movf	POSTINC2,W  			; WREG = *FSR2++
+	bz		aa_wordprocessor_99		; Exit if null byte encountered
 
-		rcall	aa_char_setup		    ; setup aa_start / aa_end
-		rcall	aa_decode_char		    ; write pixels to screen
-		bra		aa_wordprocessor_1	    ; and loop.
+	rcall	aa_char_setup			; setup aa_start / aa_end
+	rcall	aa_decode_char			; write pixels to screen
+	bra		aa_wordprocessor_1		; and loop
 
 aa_wordprocessor_99:
-		; END of bloc commande
-		Index_out	0x00
+	; END of bloc command
+	Index_out	0x00
+	return
 
-        return
-        END
\ No newline at end of file
+	END