	.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:	
	dec	$271c
	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 reached the end of line
	BEQ     l_8a7e

	BRA		check

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

check:
	lda		$271c
	bne		decode

	JMP     l_89e2

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

; This is useless if the tiles are contiguous
_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
; Generated by the encoder
BPE_COMPRESSED_STRING_LEN=196
BPE_UNCOMPRESSED_STRING_LEN=1530
BPE_PAIR_COUNT=71
ENCODED_CHAR_MIN=70
ENCODED_CHAR_MAX=250
_bpe_first:
	.db $00, $02, $47, $48, $06, $4a, $4b, $0a
	.db $4d, $4e, $0e, $50, $51, $12, $53, $54
	.db $16, $56, $57, $24, $59, $5a, $46, $4f
	.db $5b, $5e, $5f, $60, $2c, $62, $63, $30
	.db $65, $66, $34, $68, $69, $6a, $6b, $6c
	.db $6d, $3c, $5d, $61, $6e, $43, $5c, $70
	.db $71, $72, $4c, $58, $67, $7a, $55, $73
	.db $43, $2c, $7d, $49, $81, $7c, $64, $84
	.db $6f, $86, $52, $88, $7d, $7f, $8b
_bpe_second:
	.db $01, $03, $04, $05, $07, $08, $09, $0b
	.db $0c, $0d, $0f, $10, $11, $13, $14, $15
	.db $17, $18, $19, $25, $26, $27, $49, $52
	.db $28, $29, $2a, $2b, $2d, $2e, $2f, $31
	.db $32, $33, $35, $36, $37, $38, $39, $3a
	.db $3b, $3d, $55, $64, $6f, $43, $4c, $58
	.db $67, $5c, $70, $71, $72, $46, $58, $73
	.db $74, $2c, $74, $4c, $5d, $61, $67, $6e
	.db $74, $4f, $7c, $5b, $7e, $2c, $73
