This is the original code, yes, but I've altered the starting vram address of the routine. This prints out information on three save files, in a loop, starting at 3B90 and adding 80 to the start address each time (so entry #2 is printed at 3C10, then entry #3 is printed at 3C90.) Each 40 bytes represents a line of tiles in VRAM. The issue is that, in an effort to utilize the space originally reserved for dakuten diacriticals and expand out the names of the towns the player can save in, I've moved everything up a line so it starts at 3B50. Each entry still takes up 80 bytes, so entry 1 should start at 3B50, entry 2 at 3BD0, and entry 3 at 3C50. The text is still rendering as if the diacriticals were present (removing that breaks just about everything else in the game) - it's just starting at a different address. The origin address, as it were, is the address that the diacritical gets printed at, while the text gets printed at the next line down - diacritical + 40, as it were. The problem is that this particular print routine isn't expecting text to start at xxD0 in VRAM, so when it adds 40 to the address of the diacritical to get the address of the text itself, well, this happens.
Malias - I'm guessing that would probably work, but I'm going to need to put the code somewhere else (hence my question about assemblers.) Edit: to clarify, I'm not really familiar with the zilog z80 instruction set, and I was hoping for an in-place solution.