Hey folks,
I'm a total noob to SNES-Development, so please excuse my very basic question. Some googling didn't help me, so I thought this might be a good place to ask.
When programming for the SNES, is there any way to output text to something like a console, that can then be displayed to the screen? If not, what is the easiest way to output text? Some examples would help me a lot,
thanks in advance,
Boland
On hardware: draw it yourself, in one of the SNES videomode of your choice.
On emulators: some might support separate console windows, eg. in no$sns: 21FCh.W Write ASCII character to Debug Message Window
You can also write text to a specific RAM section and watch that in an emulator's memory viewer if it doesn't have a Debug Message Window.
@creaothceann and @nocash, thank you very much for your help!
Regarding the video/text mode, are there any code examples you could point to?
SNES doesn't have a 'text mode'.
You probably want Mode 1. BG layer 0 will have 16 colors, 4 bits per pixel (bpp). You write text by placing the appropriate letter tiles in the correct order on the BG.
You could modify one of the 'hello world' examples out there (I wrote one) and change the data.
You can make CHR-ROM (graphics) with most tile editors. If you use YY-CHR, you can write any font in Photoshop or GIMP, flatten image, change image mode to indexed, 15 or 16 colors, cut. Paste into YY-CHR, set to 4bpp mode. Save CHR, replacing the graphics from the example code.
Changing the data (BG tile map) will require some actual SNES knowledge. It's 2 bytes per tile*. Read the wiki. I would be lousy at explaining it.
*quote from wiki...
Each entry in the tilemap is 2 bytes, formatted as (high low):
vhopppcc cccccccc
v/h = Vertical/Horizontal flip this tile.
o = Tile priority.
ppp = Tile palette. The number of entries in the palette depends on the Mode and the BG.
cccccccccc = Tile number.
SNES sort of has a text mode - in that tile graphics modes can be traced back to classic computer text modes, just with more attribute bits, custom characters, and fine scrolling.
An easy way to print is to place the ASCII charater set in VRAM, and have it line up to ASCII values - e.g. tile 0x41 contains an 'A' character.
Then it's a matter of writing a really simple copy loop, with a source string pointing towards a VRAM destination.
mikejmoffitt wrote:
An easy way to print is to place the ASCII charater set in VRAM, and have it line up to ASCII values - e.g. tile 0x41 contains an 'A' character.
Then it's a matter of writing a really simple copy loop, with a source string pointing towards a VRAM destination.
This is exactly what I did for my history presentation ROM (I don't know where I posted it). I actually wrote the text in Microsoft Word, and then pasted it into the ASCII window of HxD and added spaces when necessary. I made sure to have my VRAM upload routine only write to the low bytes of VRAM, because that's where the tile selection data is.
The backgrounds layers are made out of 8x8 blocks positioned in a grid. So you need to make blocks with letters and numbers on them, and spell words with the letter blocks. It's the same reason why in Super Mario World, the blocks all look the same and are in a fixed grid.
dougeff wrote:
Changing the data (BG tile map) will require some actual SNES knowledge. It's 2 bytes per tile*. Read the wiki. I would be lousy at explaining it.
My SNES framework, which
will have its first release in a couple weeks should be released once I work out some rough edges, includes a raw tilemap editor. Stay tuned.
Quote:
My SNES framework, which will have its first release in a couple weeks, includes a raw tilemap editor. Stay tuned.
Cool.
HihiDanni wrote:
dougeff wrote:
Changing the data (BG tile map) will require some actual SNES knowledge. It's 2 bytes per tile*. Read the wiki. I would be lousy at explaining it.
My SNES framework, which will have its first release in a couple weeks, includes a raw tilemap editor. Stay tuned.
Nice. Is this going to use tiles or metatiles?
Well, I said it was a raw tilemap editor. So it just makes plain static, low level tilemaps for use in title screens and other single screen use cases. Metatiles will come later when I write a level format.
Wow, thanks for all your input! I'm glad this place exists, so much helpful stuff!