	; Untested ...

	.code
	.bank 2
	.org $89e2

l_89e2: LDY     $271b
	INC     $271b
	stz	$271c
        LDA     [$5c], Y		; Load char
		
        CMP     #$ff			; [END]
        beq     l_8aaf			; end of string routine

l_89ee: CMP     #$fc			; [FC-CR]
        beq     l_8a7e			; jump line

	inc	$271c
	pha

decode:	
	pla
	cmp	#ENCODED_CHAR_MIN
	bcc	display
	cmp	#ENCODED_CHAR_MAX
	bcs	display
		sec
		sbc	#ENCODED_CHAR_MIN
		tay

		lda	_bpe_second, Y
		pha
		inc	$271c

		lda	_bpe_first, Y
		pha
		inc	$271c

		bra	decode
display:
	tay
	lda     _tile_addr, Y
	STA     $0002			; put char
        LDA     #$87
        STA     $0003
	
        INC     $2719
        LDA     $2719
        CMP     #$10			; check if we have reach the end of line
        BEQ     l_8a7e

	dec	$271c
	bne	decode
	BRA     l_89e2			; process next char


l_8a7e: STZ     $2719			; reset line char offset
        INC     $271a			; increment line offset?

        CLC     
        LDA     <$5a			; set Memory Address Write Register
        ADC     #$80
        STA     <$5a
        LDA     <$5b
        ADC     #$00
        STA     <$5b
        LDA     #$00
        STA     <$4a
        STA     $0000
        LDA     <$5a
        STA     $0002
        LDA     <$5b
	STA     $0003
        LDA     #$02			; use vram data register
        STA     <$4a
        STA     $0000

	lda	$271c
	bne	decode

	JMP     l_89e2

l_8aaf: INC     $2701	; [END]
        JMP     $8cab

_tile_addr:
	;     a    b    c    d    e    f    g    h    i
	.db $30, $32, $33, $34, $35, $36, $37, $3a, $3c
	;     j    k    l    m    n    o    p    q    r
	.db $3e, $3f, $40, $44, $46, $47, $49, $4b, $4d
	;     s    t    u    v    w    x    y    z    0
	.db $4e, $4f, $50, $51, $52, $53, $54, $55, $70
	;     1    2    3    4    5    6    7    8    9
	.db $71, $72, $73, $74, $75, $76, $77, $78, $79
	;     A    B    C    D    E    F    G    H    I
	.db $7A, $7B, $7C, $7D, $7E, $7F, $80, $81, $82
	;     J    K    L    M    N    O    P    Q    R
	.db $83, $84, $85, $86, $87, $88, $89, $8A, $8B
	;     S    T    U    V    W    X    Y    Z    !
	.db $8C, $8D, $8E, $8F, $90, $91, $92, $93, $94
	;     ?  (c)    ,         .    -
	.db $95, $96, $97, $98, $A0, $a1

	.data
	.bank 0
	.org $fc60
; This will be replaced by the ones generated by the bpe encoder
_bpe_first:
_bpe_second:
ENCODED_CHAR_MIN = 70 
ENCODED_CHAR_MAX = 250
