80 column text mode at quite high resolution
80 column text mode at quite high resolution
So...
Alec: Hope no problem!
This was actually an older idea, but seeing how people would like to have a good 80 character wide mode, I made an attempt at it on this weekend. It looks pretty good even on my small NTSC composite display, I purposely designed it so the characters should avoid producing color artifacting (tiles are 17 cycles wide especially for this reason).
Partly it is a "normal" code tile mode which would be capable to do colour like Mode 9, however as an initial, probably most generally useful attempt, I recreated an IBM 437 codepage on it. What is particularly new is that this mode has no actual pixels, the display essentially is some 1400 "pixels" wide (AVR cycles). The generator essentially compiles a tileset for this mode while optimizing it (which results in that this full IBM 437 character set takes "only" 20 kilobytes of ROM space).
The code as it is now is available on my fork for experimenting (It is a mess for now, the mode definitely needs more work, however the example should compile fine):
https://github.com/Jubatian/uzebox/tree ... ideoMode80
Alec: Hope no problem!
This was actually an older idea, but seeing how people would like to have a good 80 character wide mode, I made an attempt at it on this weekend. It looks pretty good even on my small NTSC composite display, I purposely designed it so the characters should avoid producing color artifacting (tiles are 17 cycles wide especially for this reason).
Partly it is a "normal" code tile mode which would be capable to do colour like Mode 9, however as an initial, probably most generally useful attempt, I recreated an IBM 437 codepage on it. What is particularly new is that this mode has no actual pixels, the display essentially is some 1400 "pixels" wide (AVR cycles). The generator essentially compiles a tileset for this mode while optimizing it (which results in that this full IBM 437 character set takes "only" 20 kilobytes of ROM space).
The code as it is now is available on my fork for experimenting (It is a mess for now, the mode definitely needs more work, however the example should compile fine):
https://github.com/Jubatian/uzebox/tree ... ideoMode80
- Attachments
-
- m80demo.uze
- Video mode demo
- (28.54 KiB) Downloaded 551 times
-
- Posts: 1488
- Joined: Mon Feb 11, 2013 8:08 am
- Location: Brisbane, Australia
Re: 80 column text mode at quite high resolution
Looks good on a real CRT.
However I can't make it look very good on my LCD display that is 320 pixels across.
What is your small NTSC display you are using?
However I can't make it look very good on my LCD display that is 320 pixels across.
What is your small NTSC display you are using?
Re: 80 column text mode at quite high resolution
That is simply not possible since 320 pixels is just not enough for this, no matter how you try it! Even with the most optimal mapping, one character would be 4 physical pixels, which makes it impossible to do 80 columns text on that, unless purposely designing a tiny font for the display with a few cheats here and there (such as an "m" is completely impossible with that). I don't think it is possible at all with the Uzebox (as we can not sync to the physical pixel boundaries to pull off such tweaks). I think my panel is a 800x480 one or something alike, so has about ~600 pixels in 4:3.CunningFellow wrote: ↑Sun Nov 17, 2019 9:09 pm However I can't make it look very good on my LCD display that is 320 pixels across.
EDIT: A bit of stuff added, colors, vertical scrolling, splits, any of these only if you explicitly interact with the corresponding variables (by default, it is just BW text ready to go).
- Attachments
-
- m80demo.uze
- Some color & scrolling
- (28.75 KiB) Downloaded 558 times
Re: 80 column text mode at quite high resolution
Was debugging my telnet client and fell on this
If you could fit an inverse video mode into it that would be truly be something. Mode 9 is 80 chars wide in principle, but technically, on a real ntsc screen, only about 76 are usable.
Looked at your demo and counting the chars on a line...seems to be more that 80?!? What I'm I missing?If you could fit an inverse video mode into it that would be truly be something. Mode 9 is 80 chars wide in principle, but technically, on a real ntsc screen, only about 76 are usable.
Re: 80 column text mode at quite high resolution
Wow, that's a cool means to view the forum there!
You can already do inverse if you start playing around with it: Set up a display list, then you can (should be able to unless I bugged it!) set any global Foreground / Background color.Of course you could create a longer display list for splits, but a single entry display list is useful if you want to set global colors for text or smooth-scrolling the entire screen.
The demo is more than 80 columns, it is 86 actually, so that's why it looks odd. If you remove SCREEN_TILES_H from the demo's Makefile, it will give you a normal 80 column display.
Why it fits is that these tiles are 17 cycles wide contrary to 18 in Mode 9. The normal CGA high-res would be 16 cycles / tile, but I purposely avoided that as it is 2 colorburst clocks, so the characters would be very prone to pick up as color signal (that's how NTSC color tricks worked in old games). Otherwise with this mechanism, even going down to 15 cycles / tile would be possible, however I believe this is the most useful, a reasonably okay 80 characters display even on composite. I purposely designed the characters as well to avoid composite artifacting (although Mode 9 should also normally do well in this regard with the 3 cycles wide pixels).
You can already do inverse if you start playing around with it: Set up a display list, then you can (should be able to unless I bugged it!) set any global Foreground / Background color.
Code: Select all
m80_dlist_tdef dlist[1];
dlist[0].vramrow = 0U;
dlist[0].tilerow = 0U;
dlist[0].bgc = 0xFFU; /* Background color => White */
dlist[0].fgc = 0x00U; /* Foreground color => Black */
dlist[0].next = 0U; /* End of Display List */
m80_dlist = &dlist[0];
The demo is more than 80 columns, it is 86 actually, so that's why it looks odd. If you remove SCREEN_TILES_H from the demo's Makefile, it will give you a normal 80 column display.
Why it fits is that these tiles are 17 cycles wide contrary to 18 in Mode 9. The normal CGA high-res would be 16 cycles / tile, but I purposely avoided that as it is 2 colorburst clocks, so the characters would be very prone to pick up as color signal (that's how NTSC color tricks worked in old games). Otherwise with this mechanism, even going down to 15 cycles / tile would be possible, however I believe this is the most useful, a reasonably okay 80 characters display even on composite. I purposely designed the characters as well to avoid composite artifacting (although Mode 9 should also normally do well in this regard with the 3 cycles wide pixels).
Re: 80 column text mode at quite high resolution
Did a bit of tweaking around. Now Mode 80 can actually fake Mode 9:
To get there, as the repo is now, change the tileset in Mode80core.s, line 139, then in videoMode80.c, SetFontTilesIndex(0) (instead of 0x20 as in the Mode9 demo charset space is at position 0), as well as either removing or changing SCREEN_TILES_H in the demo's Makefile to 80. It will look pretty much like if it was Mode 9.
What this does is that its generator does pretty well compacting the character set, so you get this fake Mode 9 with a less than 10Kbyte character set (more than 10 Kbytes smaller than the actual Mode 9 demo).
Tweaking the generators for different dimensions is simple, both contain definitions for this on the top, so you can get other dimensions out of this video mode as well.
To get there, as the repo is now, change the tileset in Mode80core.s, line 139, then in videoMode80.c, SetFontTilesIndex(0) (instead of 0x20 as in the Mode9 demo charset space is at position 0), as well as either removing or changing SCREEN_TILES_H in the demo's Makefile to 80. It will look pretty much like if it was Mode 9.
What this does is that its generator does pretty well compacting the character set, so you get this fake Mode 9 with a less than 10Kbyte character set (more than 10 Kbytes smaller than the actual Mode 9 demo).
Tweaking the generators for different dimensions is simple, both contain definitions for this on the top, so you can get other dimensions out of this video mode as well.
- Attachments
-
- m809demo.uze
- Mode 80 faking Mode 9
- (18.21 KiB) Downloaded 558 times
Re: 80 column text mode at quite high resolution
Wow, this looks great!
-
- Posts: 1488
- Joined: Mon Feb 11, 2013 8:08 am
- Location: Brisbane, Australia
Re: 80 column text mode at quite high resolution
Yes - Very wow.
Jubatian - you are a coding machine.
Jubatian - you are a coding machine.
Re: 80 column text mode at quite high resolution
I added documentation, hope it could help starting out! I set it up so navigating to the mode displays it in GitHub, so the repo link takes you there:
https://github.com/Jubatian/uzebox/tree ... ideoMode80
https://github.com/Jubatian/uzebox/tree ... ideoMode80
- nicksen782
- Posts: 714
- Joined: Wed Feb 01, 2012 8:23 pm
- Location: Detroit, United States
- Contact:
Re: 80 column text mode at quite high resolution
"You have been eaten by a grue!"
... Zork.
... Zork.