; 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