Jonathan Hoyle
http://www.jonhoyle.com
So 256x192 looks right to me.
But If I remember well, when in 40 columns mode, each character is 7 pixels
wide: so 40x7 = 280...
Guillaume.
Actually, in text mode (40 columns), the size is 6 pixels wide,
40x6=240, leaving 16 pixels blank (8 on either side).
But that's not the situation here. Both emulators are running TI
Basic, both have 32 columns of characters to access, but the MESS
emulator has screen real estate outside the 32 x 24 characters on the
screen whilst V9T9 does not.
I ran the following test in TI Basic on each emulator:
100 CALL CLEAR
105 REM CHANGE SCREEN TO DARK YELLOW
110 CALL SCREEN(11)
115 REM MAKE ALL SPACES MEDIUM RED
120 CALL COLOR(1, 9, 9)
130 GOTO 130
The behavior is what I expected from the VT9T emulator: the entire
screen was red. On the MESS emulator, the inner 256 X 192 portion of
the screen was red, but it was bordered by a yellow edge.
The fact that CALL SCREEN() operates on this outer edge tells me that
the TI-99/4A screen resolution is in fact 280 X 210, despite the
numerous documentation to the contrary. Perhaps TI did this
intentionally, understanding that some TV's in the day were known to
clip some screen real estate. It might also explain some of the
borders I see on some game screenshots.
I must admit, this is a bit of astounding news to me, as I thought I
had understood everything about this computer over 25 years ago. In
any case, someone with a *REAL* TI-99/4A will want to test this for
themselves, just to verify what I am saying is true.
Jonathan Hoyle
http://www.jonhoyle.com
Yes, it would be news to me to, if you were correct. You are not. The
resolution is 256x192. And TI BASIC displayed text on the middle 28
columns due to the overscan on early tvs...
Although you are correct about TI Basic's text display being squeezed
into 28 characters, a running Basic program can affect the ASCII text
and colors for all of the 32 x 24 grid of characters using CALL
HCHAR() and CALL VCHAR(), not just the middle 28. When doing this in
M.E.S.S., you can set only the center 256x192 square. However, you
can also affect the color of an exterior border (12 pixels per
vertical edge, 9 pixels per horizontal edge) using CALL SCREEN(), as
my program above showed. This has nothing to do with TI Basic
displayed text.
Since CALL SCREEN() is entirely built into the TI-99 roms and not part
of the M.E.S.S. emulator, I fail to see how the color of a 12x9
exterior border can change by this call unless TI itself expected it
to be there.
Winston, I am not ignoring the possibility that I am wrong about this
(which is why I was hoping someone could test this on a real
TI-99/4A). However, your correct (but unrelated) point about TI Basic
text display does not explain this phenomenon. The TI-rom based CALL
SCREEN() function does indeed change the colors of a 280 x 210 field.
I also Googled some TI-99 screen photos and found what appears to be
possible confirmation of my theory. For both this TI-99/4 photo
[ http://www.hollandsimpson.com/blog/ti994-monitor.jpg ] as well as
this TI-99/4A photo [ http://www.blakespot.com/images/ti99.jpg ], we
see blue exterior borders on the right and left sides (respectively)
from the color grid of the startup screen. You'll recall that the 16
colored blocks in the startup screen is precisely 16 pixels wide a
piece, making the colored strip exactly 256 pixels across. If the
TI-99/4A screen were only 256 pixels wide, we should never see this
blue border.
Jonathan Hoyle
http://www.jonhoyle.com
Look, I've owned a TI-99 since 1982, know it down to the machine
level. It is 256x192, regardless of whether or not the emulator shows
it to be.
> I also Googled some TI-99 screen photos and found what appears to be
> possible confirmation of my theory. For both this TI-99/4 photo
> [http://www.hollandsimpson.com/blog/ti994-monitor.jpg] as well as
> this TI-99/4A photo [http://www.blakespot.com/images/ti99.jpg], we
> see blue exterior borders on the right and left sides (respectively)
> from the color grid of the startup screen. You'll recall that the 16
> colored blocks in the startup screen is precisely 16 pixels wide a
> piece, making the colored strip exactly 256 pixels across. If the
> TI-99/4A screen were only 256 pixels wide, we should never see this
> blue border.
The images you show can be shown on any such monitor by varying the
horizontal screen size.
I still have a real 4A hooked up through an XRGB unit to a modern VGA
monitor.
On a real TI there is a much more pronounced border on the top and
bottom of the image than on either side - but these area not
"addressable" areas, meaning you cannot put pixels there, or even
sprites. Just the color of CALL SCREEN.
Agreed. But the fact that CALL SCREEN() does address this area
indicates that TI is in fact using a 280 x 210 screen area. That TI
exposes only 256 x 192 of them to most of its APIs doesn't change this
fact. I presume that it oversizes this screen area to 280 x 210 to
compensate for TV cut offs. It also makes sense that CALL SCREEN()
would operate on this bordered area, so as to make the image appear
seemless.
By the way, the M.E.S.S. emulator's "Hardware Info" does indeed list
its screen setting as: "280 x 210 (H) 60.000000 Hz". I don't know if
this information is derived from the ROMs or if it's hard coded.
Jonathan Hoyle
http://www.jonhoyle.com
Wow, this is news. (Well, at least to me...M.E.S.S. apparently
understood this all along.) However, the evidence seems overwhelming.
This inspired me to look up the documentation for the TI video display
processor at: http://www.nouspikel.com/ti99/titechpages.htm . Toward
the bottom, there is a "Synchronization signals" section which refers
to the 256 x 192 area as the "Active Display", but there exists 15
pixels as a right border and 13 pixelss as a left border.
Additionally, a 27 pixel top border and a 24 pixel bottom border.
This is already larger than 280 x 210 range that M.E.S.S. claims is
the screen real estate. That CALL SCREEN bleeds into some of this
border area is interesting, but I am guessing that most of this border
is never seen by the user as it is off the visual range of most TV's
of the day.
This is interesting to hear! I have always wondered why when I took
screen shots using MESS that there was usually a border around the
screen. Sometimes a different color. You can especially see this on
various Tunnels of Doom title screen shots on the web that were taken
in MESS. and you can see the border on the title screen which is not
there if you play it on a TV. Matter of fact 2 borders on the title
screen (black and orange).
There is an active display area, which is either 256x192 or 240x192,
depending on whether the display is in text mode or not. Note that in
text mode characters are only 6 pixels wide.
The NTSC chip outputs 262 lines per frame at 60fps and the PAL chip
outputs 313 lines per frame at 50fps, noninterlaced (section 3.6.2 of
the datasheet). Any time the VDP is not outputting active graphics, it
outputs the background color (ie: CALL SCREEN always affects the
overscan area). Table 3-3 contains the pixel clock timings for various
modes, and I'll copy it here for you, laid out to be a little easier
to read with proportional fonts. Unfortunately the table doesn't cover
the PAL modes, only NTSC. I *believe* they just have extra border at
the top and bottom, but I would also expect the sync timing to be
different.
HORIZONTAL (Pixel Clocks in Normal Mode/Pixel Clocks in text mode)
Active Display/256/240
Right Border/15/25
Right Blanking/8/8
Horizontal Sync/26/26
Left Blanking/2/2
Color Burst/14/14
Left Blanking/8/8
Left Border/13/19
Total horizontal size: 342 pixels, 284 displayed (all modes)
VERTICAL (in lines)
Active display/192
Bottom border/24
Bottom blanking/3
Vertical Sync/3
Top blanking/13
Top border/27
Total vertical size: 262 lines, 243 displayed
I don't have a link to any good, clear NTSC descriptions anymore, but
if you Google around a bit you should be able to figure out what each
of the above elements are.
Thanks for that detailed summary. Maybe you can answer some of my
remaining questions then?:
1. CALL SCREEN() is the only Basic function I am aware of that can
affect the screen outside the active display area. Is this true, or
is there another?
2. Since CALL SCREEN() must have an assembly language component, there
is at least one command in assembler that can modify pixels outside
the active display. Do you know what that is?
3. CALL SCREEN() appears to affect a screen range of 280 x 210.
Nothing in these posts really points to 280 and 210 as special
numbers. Is 280 x 210 just an arbitrary area chosen by CALL SCREEN(),
or is there some specific meaning behind these numbers.
4. M.E.S.S.'s hardware profile states explicitly that the TI-99/4A has
a 280 x 210 screen display at 60 Hz. Did M.E.S.S. choose this
arbitrarily, or did it obtain this information somewhere in the ROMs?
5. Aside from the screen color, is there anything an assembler
programmer can do to screen real estate outside the active display?
Thanks in advance,
Jonathan Hoyle
http://www.jonhoyle.com
I guess the emulator was made by Raphael Nabet for the MESS team. He
might be on this group and could help answer the 280x210 question.
I'd like to hear Mr. Nabet's response. I'm wondering if CALL SCREEN()
fills the entire bordered area of 284 x 243 (active display plus
borders), but the M.E.S.S. emulator crops the this to 280 x 210. It
would be very hard to tell, unless someone with an actual TI can shift
the monitor's center to the max and see if he can count the pixels.
math1723 and darkmane have described this properly.
There maximum number of INDIVIDUALLY ADDRESSABLE pixels are 256 x 192.
The top/bottom/left/right border area can be viewed as a rectangle
circumscribed around the active area. This circumscribed rectangle can
be controlled as a single unit. You can view it as a hollow rectangular
SINGLE pixel, which can be have its' color changed as a whole by setting
the least significant 4 bits of VDP register seven - which is what
happens when CALL SCREEN() is invoked.
So, I guess the actual addressable resolution of the VDP (in Graphics
I/II modes) is 256 x 192 + 1 B-I-G hollowed out rectangular pixel.
Urbite
An American TI-99 outputs a 284*243 picture, of which 256*192 are part of
the programmable display, except in text mode where only 240*192 pixels
are programmable. Other pixels are part of the border. I don't know the
exact values for an European TI-99, but the horizontal resolution may be
the same 284 as in an American TI, and the vertical resolution must be
around 350.
Not all users are aware of the existence of borders because most TV sets
cut the borders.Ę(Incidentally, this is the actual reason why TI added the
borders in the first place, because they did not want meaningful content
to be cut by TV sets. At this, they failed partially, as some TV sets cut
a portion of the 256*192 programmable display as well, and most programs
including TI Basic did not use all of it to compensate.) However, some
video monitors do display the borders, at least partially. The MESS
display of 240*210 cuts some of the borders, but still displays a
significant part of them.
There is no way that I know of to display anything in the border, only the
border color can be set. I guess that if you changed the border color
repeatedly in the midst of each video frame, you could have some
interesting effects like a background rainbowĘ; however, since the CPU is
not synchronous with the VDP, the result would be unpredictable on a
ti-99/4 or /4a (ti-99/5 and /8 should not have this problem).
To change the background color in assembly or GPL, you must write the
color index in the LSNybble of VDP register 7. The MSNybble is significant
in text mode (it is the text color), but not in other modes.
Best regards,
Rapha‘l Nabet
>
> There is no way that I know of to display anything in the border, only the
> border color can be set. I guess that if you changed the border color
> repeatedly in the midst of each video frame, you could have some
> interesting effects like a background rainbowÊ; however, since the CPU is
> not synchronous with the VDP, the result would be unpredictable on a
> ti-99/4 or /4a (ti-99/5 and /8 should not have this problem).
Have you read Tursi's messages concerning utilizing the sprite
collision bit to synchronize something to a point on the screen?
Check out http://www.99er.net/cgi-bin/ikonboard/ikonboard.cgi?act=ST;f=3;t=26;st=0;&#entry1
or
> Have you read Tursi's messages concerning utilizing the sprite
> collision bit to synchronize something to a point on the screen?
>
> Check out http://www.99er.net/cgi-bin/ikonboard/ikonboard.cgi?act=3DST;f=3D3=
> ;t=3D26;st=3D0;&#entry1
>
> or
>
> http://tinyurl.com/5djlt9
I did not know this trick, kudos to the inventor of this tricks, this is
one of these things that seem obvious in retrospect but are none the
easier to invent.
Yes, it should theorically work and enable us to do rainbow effects. I can
hardly imagine using this trick in a game, but it could be neat in a demo.
Regards
Yep. That is what I thought, too! "D'oh" 30 years later! ;)
The last person fumbling around with these settings was perhaps me ...
(if you are talking about the recent version of MESS).
I had to put quite some work into the TI emulation of Raphael to get it
working again, after the other MESS maintainers changed code in the core
- and broke the TI emulation in several places. One change affected the
video display with the 9918/9, 9928/9 - for some versions, no border was
displayed at all.
As I did not have enough background information I tried a setting which
seemed plausible to me, making the screen look like in prior-0.97
versions. So you probably should not put too much trust into the values
found in ti99_4x.c. I remember that I did not have to change many
values; I think it were some zeros that had to be replaced with other
values in the screen profiles.
Michael
The fact that the NTSC and PAL versions of the TI output more than 192
horizontal lines had nothing to do with TVs cropping the image. The
9918/29's addressable area is 256x192, and both NTSC and PAL have more
than 192 horizontal lines. In NTSC, there are 525 lines interlaced.
That means 262.5 lines non-interlaced, which is exactly what the NTSC
model put out. In PAL, you have a 625i image, and the TI put out 312.5
lines out, non-interlaced.
Because there was a border above and below the addressable area, the
pixels weren't square. That means that if you draw a circle on the TI,
you'd come out with an ellipse on your TV / monitor. This was bad
enough in NTSC, where 71% of the vertical was adressable (192 of
262.5), but much worse in PAL, where the borders were only 61% of the
vertical was addressable, leaving a large background colour strip
above and below the image, constituting 39%!
If TI had simply put out 192 lines, this wouldn't have been compatible
with standard TV sets, so there was a need for a workaround. Emulators
don't need this workaround, and that makes them inaccurate in terms of
rendering. A circle drawn comes out as a circle in MESS.
That addresses the vertical business. As for the horizontal, yes, I
agree with the comment above that TI probably added some extra pixels
per line to get around TV sets cropping the sides. Since the
horizontal resolution on analogue TVs isn't fixed, it was completely
up to TI to decide how many pixels to add per line. The vertical
resolution, as mentioned above, is a constant in NTSC and PAL, and
it's not something you get around easily.
One digression, though, as if this weren't confusing enough: The PAL
TIs put out 312.5 lines 50 times per second. This is equivalent to 25
frames with both fields of each frame being drawn in exactly the same
place. This is NOT standard timing, and causes problems sometimes -
for example, if you tried to record the output to VHS, the recorder
would have trouble locking onto the signal or recording any colour.
I've been told that the NTSC version of the console put out a standard
NTSC interlaced signal, but I don't believe this. I've never had the
opportunity to own and NTSC console. I wish I could get my hands on
one.
I'm currently trying to maintain your TI emulation in MESS, but I'm in
need of some technical descriptions, specifically, the smc92x4 of the
HFDC. Do you have a copy of the data sheet?
You can answer to the above mail address or replace the newsmail08 by
michael.
TIA,
Michael