; Author: Pawel Jablonski ; E-mail: pj@xirx.net ; WWW: xirx.net ; GIT: git.xirx.net ; ; License: You can use this code however you like ; but leave information about the original author. ; Code is free for non-commercial and commercial use. map ../../../bin/rom/rom.map ; Header label const header " 0 1 2 3 4 5 6 7 8 9 a b c d e f" ; Second part of row prefix const prefixEnd "0 : " ; First label is the entry point .entry: call .main ret ; No arguments ; No return .main: push A push X push Y ; Load address to header mov low(*header), X mov high(*header), Y ; Print header call .xStringPrint ; Reset loop counter clr A .main_loop: push A ; Calc column number and 0x0f, A cmp 0, A pop A jne .main_loop_print_char ; Print new line every 16 chars call .xStringNewLine ; Print prefix fo current row call .printPrefix .main_loop_print_char: call .xStringPrintChar push A ; Calc column number and 0x0f, A cmp 0xf, A pop A ; Do not print space for last char in row je .main_loop_no_space push A ; Print space between chars mov ' ', A call .xStringPrintChar pop A .main_loop_no_space: ; Repeat loop 255+1 times loope 255, A, .main_loop ; Refresh the screen call .xLcdRefresh pop Y pop X pop A ret ; Arguments: ; A - Char number ; No return .printPrefix: push A push X push Y ; Calc row number swap A and 0x0f, A ; Print high part of hex call .printHalfHex ; Load address to prefix end mov low(*prefixEnd), X mov high(*prefixEnd), Y ; Print prefix end call .xStringPrint pop Y pop X pop A ret ; Arguments: ; A - Char number (4 bit) ; No return .printHalfHex: push A ; Change 4 bit hex to ASCII char cmp 0x9, A jge .printHalfHex_number cmp 0xf, A jge .printHalfHex_letter jmp .printHalfHex_end ; Print digit .printHalfHex_number: add '0', A call .xStringPrintChar jmp .printHalfHex_end ; Print letter .printHalfHex_letter: sub 0xa, A add 'a', A call .xStringPrintChar .printHalfHex_end: pop A ret