I then try and display character 0
I get two vertical bars (seems to be the default for an undefined char)
We ran into this problem a while ago and if I get a chance I will look for the thread.
As I recall, the 'solution' I came up with is to use custom character 8 in place of 0 when trying to display the character. The address 08 is what is called a 'foldback address' for address 00 (the high bit is ignored) and it bypasses whatever problem there is with using address 0.