Jump to content
IGNORED

576 and 1008 Characters


Omegamatrix

Recommended Posts

I made a few 36 character demos a while back. One of them was an interlaced 36 character demo, which is good for CRT's. Orange808 found an issue though with it on his consoles. When looking at the glitch it was obvious that it was 1 pixel off due to unusual positioning

 

    sta.w  HMOVE                 ;4  @73   early hmove, HMP0 = $40 (left 12)
    sta    RESP0                 ;3  @76   strobing after HMOVE!

 

On his console it was one pixel to the right of where it should have been. To fix it I used HMP0 = $50 (left 13), and then added in an auto-detection routine for it to differentiate between consoles.

 

 

 

I have since made a couple of demos for the display. One is a 1008 character demo (perhaps the first time for over 1,000 characters on the 2600?), and the second is 576 character demo which is taller digits. On my LED TV they don't look too good, but if you have a CRT they might be okay.

 

Toggle the left difficulty switch to scroll the letters or keep them stationary.

 

1008Char.thumb.png.c2a9ff5fe603320f1dfc404e02306ce8.png

 

1008Char.bin

 

 

576Char.thumb.png.9858d6051b54944cae5c9075f8074df1.png

 

576Char.bin

 

 

 

  • Like 16
Link to comment
Share on other sites

Impressive!

 

IMG_1212.thumb.jpg.55cf8562959e3623c3c54dce387baee4.jpg

 

576 looks best, less apparent flicker than 1008 due to the doubled-up vertical pixels.

 

During the development of the 32 character text displayfound a 3x4 pixel font, which with I think you'd get 1188.

 

image.png.92677d59d58ca49eb6b0ac6e2872b747.png

 

Just for grins I filled part of the font table with $F0 to see if it was suitable for a 144 pixel display, guess not. Impressive nonetheless!

 

990034025_ScreenShot2020-09-27at11_38_06AM.thumb.png.a126c7bffbc23a988b6709fd4b6e7804.png

 

 

 

Link to comment
Share on other sites

26 minutes ago, SpiceWare said:

576 looks best, less apparent flicker than 1008 due to the doubled-up vertical pixels.

 

During the development of the 32 character text displayfound a 3x4 pixel font, which with I think you'd get 1188.

Yeah, looking at your screen the height of the doubled up looks good. The flicker could definitely be reduced as I'm flickering $xE on $x0. Going down from $xE will make it less bright but also flicker less.

 

The four pixel font is interesting, but I think it would be most effective as a mixture of upper and lower case as one aphabet set, i.e. never use upper case B because lower case b is much more readable.

 

 

26 minutes ago, SpiceWare said:

Just for grins I filled part of the font table with $F0 to see if it was suitable for a 144 pixel display, guess not. Impressive nonetheless

 

There are certainly gaps. With the interlaced display I use a black background as there are HMOVE bars every second line. To help mask them I use PF0, but I am also using the Ball to mask a pixel in the kernel so the background is black. Each row can be any color though.

 

The non-interlaced 36 pixel display I made can be any background and row color. It shows a lot better on my LED TV than the interlaced version, but on a CRT it looks worse for flicker. On my LED TV the interlaced version shows horizontal gaps in all the letters making it hard to read, and I can't force my TV into another mode to compensate. Any interlaced kernel on my TV has that problem, Harmony menu included.

 

There will always be a problem with flicker and different TV types. The only way around it is avoding flicker altogether, or writing two completely different kernels for a game and giving the user an option between them. If that is an in-game menu option it is not so practical as space is still a constraint in most games. 

 

 

Link to comment
Share on other sites

Cool! I tested on the Jr console I have hooked up to my CRT.

I agree with @SpiceWare that the 576 chars one looks best. The 1008 one flickers too much for my taste.

 

I recently tested various consoles by resetting an object position while an HMOVE is still performing its operations, and my conclusion is that the offset between different consoles is the result of a race condition.
If the strobe to RESxx coincides with one of the extra CLK pulses that the position counter receives during an HMOVE, the resulting position depends on which of the two events happens first.

 

Here is a table with the (hopefully correct) timing of the extra CLK pulses for HMOVE cycles form 73 to 3.

 

                HMOVE extra CLK pulses

              |                 HMOVE cycle
HCOUNT  CPU   | 73      74      75      0       1       2       3
----------------------------------------------------------------------
0       0     | 1*      1                       
1       1.33  | 2       2       1       
2       2.67  | 3       3       2       1   
3       4     | 4*      4*      3*      2*      1*      1
4       5.33  | 5       5       4       3       2       2       1
5       6.67  | 6       6       5       4       3       3       2
6       8     | 7*      7*      6*      5*      4*      4*      3*
7       9.33  | 8       8       7       6       5       5       4
8       10.67 | 9       9       8       7       6       6       5
9       12    | 10*     10*     9*      8*      7*      7*      6*
10      13.33 | 11      11      10      9       8       8       7
11      14.67 | 12      12      11      10      9       9       8
12      16    | 13*     13*     12*     11*     10*     10*     9*      
13      17.33 | 14      14      13      12      11      11      10
14      18.67 | 15      15      14      13      12      12      11
15      20    |                 15*     14*     13*     13*     12*
16      21.33 |                         15      14      14      13
17      22.67 |                                 15      15      14
-------NORMAL HBLANK END-----
18      24    |             |                                   15*
19      25.33 |             |
                            --EXTENDED HBLANK END (hmove bar) ---------

* = a RESXX on this cycle causes race condition with the extra CLK pulse.

 

Edited by alex_79
  • Like 3
Link to comment
Share on other sites

I've made another demo. For this one I fixed the auto-detection to be at the top of the kernel. Please note I don't do exhaustive in-rom testing of multiple values to see which one will work for HMP0. I assume that if it is not one case then it is the other, which seems to work for now.

 

In this demo you can scroll up and down to adjust the brightness (affects the flicker). Left and right will scroll the display. I have also included the code which is not optimized at all. I know it can be heavily optimized, but this is just a demo.

 

576Char.thumb.png.590839b6edeb35bf510039786557bea5.png

 

576Char_20200927_A.zip

 

 

 

  • Like 11
Link to comment
Share on other sites

3 hours ago, JetSetIlly said:

This opens a lot of possibilities. My first thought was a port of Adventureland and the other early Scott Adams' adventures. Tricky I suspect but not impossible.

 

https://en.wikipedia.org/wiki/Adventureland_(video_game)

 

I'm already have Scott interested.  Sssh.

  • Like 2
  • Haha 1
Link to comment
Share on other sites

20 hours ago, Omegamatrix said:

I've made another demo. For this one I fixed the auto-detection to be at the top of the kernel. Please note I don't do exhaustive in-rom testing of multiple values to see which one will work for HMP0. I assume that if it is not one case then it is the other, which seems to work for now.

 

576Char.thumb.png.590839b6edeb35bf510039786557bea5.png

 

 

 

It's lovely.

In the PlusCart menu, we have found that 12-line-high characters look very good, and the double-line enforced on all characters.

 

29588296_ScreenShot2020-09-29at1_48_31am.thumb.png.6dc1336388dfa882893dc7bf734dc1ad.png

 

The above font, "Glacier Belle" is my favourite. We have 4 different fonts at the moment.  I would be happy to share the characterset data with you. What I'd also be interested in doing is using your 36-char wide kernel in place of the current 32-char wide kernel on the PlusCart, if that's something you'd be open to.

 

  • Like 2
Link to comment
Share on other sites

On 9/27/2020 at 9:50 AM, SpiceWare said:

Impressive!

 

IMG_1212.thumb.jpg.55cf8562959e3623c3c54dce387baee4.jpg

 

576 looks best, less apparent flicker than 1008 due to the doubled-up vertical pixels.

 

During the development of the 32 character text displayfound a 3x4 pixel font, which with I think you'd get 1188.

 

image.png.92677d59d58ca49eb6b0ac6e2872b747.png

 

Just for grins I filled part of the font table with $F0 to see if it was suitable for a 144 pixel display, guess not. Impressive nonetheless!

 

990034025_ScreenShot2020-09-27at11_38_06AM.thumb.png.a126c7bffbc23a988b6709fd4b6e7804.png

 

 

hey my guy: so your vcs is not going to a TV, but a colour CRT computer monitor?  and you have probably the direct mod that a lot of atari big dogs have- so with the combo of those two things you must have a real HQ screen- is it similar to what you would play dos games on- 

Edited by chewy
Link to comment
Share on other sites

6 minutes ago, chewy said:

hey my guy: so your vcs is not going to a TV, but a colour CRT computer monitor?  and you have probably the direct mod that a lot of atari big dogs have- so with the combo of those two things you must have a real HQ screen- is it similar to what you would play dos games on- 

 

That's a Commodore 1084S monitor, came with my Amiga 2000HD back in 1991. I've never connected it to a PC; though am pretty sure it would support CGA and the 200-line graphic modes of EGA as they use a horizontal scan rate of 15.7 kHz, which is the same that NTSC and PAL use.  However it wouldn't support EGA's 350-line modes, as those are at 21.8 kHz, and definitely not VGA.

 

My 2600 has a CyberTech S-Video Card, think I installed in 2004. The 1084S supports split chroma-luma input via 2 RCA jacks, which was used with the C= 64 and 128. That's basically the same as S-Video, but the S-Video spec didn't come out until 1987 - 5 years after the C=64 was released.

 

I use an S-Video to RCA cable to connect it, similar to this one from Console5.  The CyberTech also features stereo audio, which is why I designed Medieval Mayhem with that in mind.  The stereo you hear in this video is what I hear on my Atari and C=1084S.
 

 

 

  • Thanks 1
Link to comment
Share on other sites

8 hours ago, Andrew Davie said:

 

It's lovely.

In the PlusCart menu, we have found that 12-line-high characters look very good, and the double-line enforced on all characters.

 

29588296_ScreenShot2020-09-29at1_48_31am.thumb.png.6dc1336388dfa882893dc7bf734dc1ad.png

 

The above font, "Glacier Belle" is my favourite. We have 4 different fonts at the moment.  I would be happy to share the characterset data with you. What I'd also be interested in doing is using your 36-char wide kernel in place of the current 32-char wide kernel on the PlusCart, if that's something you'd be open to.

 

Of course you guys can use the 36 char kernel. Please feel free. I would recommend though testing it on a few more consoles before full commital. Orange808 did try a version of the rom which had the different HMP0 value. It worked on his 4 switch, but he had a 7800 which was intermittent. That's where I hope the auto-detection will help as I run it every frame. I will PM him to see if he can try the new rom, but if anyone else can run some tests that would also help.

 

 

Link to comment
Share on other sites

On 9/27/2020 at 9:27 PM, Omegamatrix said:

I've made another demo. For this one I fixed the auto-detection to be at the top of the kernel. Please note I don't do exhaustive in-rom testing of multiple values to see which one will work for HMP0. I assume that if it is not one case then it is the other, which seems to work for now.

 

In this demo you can scroll up and down to adjust the brightness (affects the flicker). Left and right will scroll the display. I have also included the code which is not optimized at all. I know it can be heavily optimized, but this is just a demo.

 

576Char.thumb.png.590839b6edeb35bf510039786557bea5.png

 

576Char_20200927_A.zip 4.45 kB · 19 downloads

 

 

 

Amazing, that looks excellent.

  • Like 1
Link to comment
Share on other sites

On 9/27/2020 at 9:27 PM, Omegamatrix said:

For this one I fixed the auto-detection to be at the top of the kernel. Please note I don't do exhaustive in-rom testing of multiple values to see which one will work for HMP0. I assume that if it is not one case then it is the other, which seems to work for now.

There should only be two possible results:
1 - the extra clock at cycle 0 happens slightly before the reset of the position counter -> the player is moved left one pixel, then it's repositioned (at pixel 3, as we are in HBLANK), then moved left one pixel for each of the remaining clock pulses. For a HMP0 value of $40 (12 pulses), it will then move left 11 pixels from position 3, ending at 152.
2 - the extra clock at cycle 0 happens slightly after the reset of the position counter -> the player is positioned at pixel 3 and then moved left one pixel for the current and following clock pulses (so 12 in total), ending at position 151.
 

 

 

I did some tests with my consoles. Here are the results when running the roms posted in this thread:

 

1008 Char and 576 Char: The first 2 chars are garbled on the Light 6er on every other row. Works fine on all other consoles

 

1008_char_7800.thumb.jpg.cb2705642c3f0760bd45bf0b3fd407de.jpg576_char_7800.thumb.jpg.9972ee4a2cc04728dd4b1ad6bda0a302.jpg

 

1008_char_JR_84.thumb.jpg.91a407ae57cabfbae5d8109720c96914.jpg576_char_JR_84.thumb.jpg.5975f307722f5b8d89dd35caec1e03e9.jpg

 

1008_char_JR_91.thumb.jpg.8c841cd84b3abc59bca113dbc4324638.jpg576_char_JR_91.thumb.jpg.f941d6bee05fb6d1ff4b8a670994251e.jpg

 

1008_char_L6.thumb.jpg.c5bd8a35741d8f1ebe63d645df01f997.jpg576_char_L6.thumb.jpg.00c99ffb6baa6a92bb358ae395658ff0.jpg

 

1008_char_SECAM.thumb.jpg.fb8950719075d0a35e508ad4952dcd60.jpg576_char_SECAM.thumb.jpg.43059128a2fabeb6ba7a1369ebb42def.jpg

 

1008_char_VADER.thumb.jpg.6148d831d10edf501106f632e58880d2.jpg576_char_VADER.thumb.jpg.ee39ac18f52bbfd467f3636d9030997d.jpg

 

576 Char multicolor: slight issue on the very first pixel row for the L6. Fine on the other consoles.

 

576_charA_7800.thumb.jpg.5ff7d4ce87787edde72ec4aa9edbe8d4.jpg

576_charA_JR_84.thumb.jpg.2665b3e559353d384fa9b94cfd837593.jpg

576_charA_JR_91.thumb.jpg.225e2ed515b9073c877861d9953b2602.jpg

576_charA_L6.thumb.jpg.acc8f0f198a6800576d8feca01b9f3c5.jpg

576_charA_SECAM.thumb.jpg.ecf9941c14d9c5a1c6ea624a22cd321a.jpg

576_charA_VADER.thumb.jpg.18c4a7621fdbb23392aa8499c5f6510c.jpg

 

I also tried the 36 char demo posted here, which doesn't display correctly on my L6. By looking at the included source, there is room to move the RESP0 strobe from the critical cycle 0 without affecting the timing of the rest of the kernel.

So I compiled a few modified versions with that RESP0 happening at cycle 1,2 or 3 (and changing the HMP0 values accordingly, to keep the alignment).
I would have expected all three versions to work reliably on all consoles, and while this is true for the "cycle 1" and "cycle 2" ones, the "cycle 3" shows another positioning issue on three of my consoles!!
This seems to be a different kind of race condition, as there aren't HMOVE clock pulses at cycle 3, and the difference in positioning is 3 pixels, not just 1.

36_char_7800_1.thumb.jpg.cce27acb25f7019c6982021724e04437.jpg

 

36_char_7800_2.thumb.jpg.e6d6601373462f76aaa51f7e4113320a.jpg

 

36_char_JR_84.thumb.jpg.8e9250970714c4e8ff89aaae3370cdcd.jpg

 

36_char_L6_1.thumb.jpg.3e6abe467ce46c103117bccfa399aebe.jpg

 

36_char_L6_2.thumb.jpg.9ca70ff2479ede3f425f70bfbe8333dc.jpg

 

36_char_L6_3.thumb.jpg.33b7fcc3b1c669ba98d4ee16e8d95bc9.jpg

 

36_char_SECAM.thumb.jpg.8e9a52ab550575723f6fd13fe5abb5fc.jpg

 

36_char_VADER_1.thumb.jpg.4b75f4998134c2c0579800fb6d91f86a.jpg

 

36_char_VADER_2.thumb.jpg.6ae797e029b1578d918fdb100acfb877.jpg

 

Here the results with an altered rom that helps showing the positioning of the players:

36_char_debug_L6_1.thumb.jpg.0908cf5be3c381815cad55047b659fe9.jpg

 

36_char_debug_L6_3.thumb.jpg.3ce8fc2afb4476624a4b990d7413b832.jpg

 

36_char_debug_L6_2.thumb.jpg.c1635013fb4b8cc730395cfdab9efd87.jpg

 

36_Char_Interlaced_mod.zip

 

  • Like 1
Link to comment
Share on other sites

Thanks for all your tests Alex! Truthfully I knew the top line of the 576 Char multicolor was messed up because I forgot to apply the fix to the first line. I made a new rom since then and was awaiting some feedback, but since you have a console that has the same behavoir maybe you can try. This rom should work for all cases.

 

576Char__2020_09_30_A.bin

 

 

  • Like 3
Link to comment
Share on other sites

  • 4 months later...
On 10/4/2020 at 6:16 PM, alex_79 said:

I also tried the 36 char demo posted here, which doesn't display correctly on my L6. By looking at the included source, there is room to move the RESP0 strobe from the critical cycle 0 without affecting the timing of the rest of the kernel.

So I compiled a few modified versions with that RESP0 happening at cycle 1,2 or 3 (and changing the HMP0 values accordingly, to keep the alignment).
I would have expected all three versions to work reliably on all consoles, and while this is true for the "cycle 1" and "cycle 2" ones, the "cycle 3" shows another positioning issue on three of my consoles!!
This seems to be a different kind of race condition, as there aren't HMOVE clock pulses at cycle 3, and the difference in positioning is 3 pixels, not just 1.

 

36_char_L6_1.thumb.jpg.3e6abe467ce46c103117bccfa399aebe.jpg

 

36_char_L6_2.thumb.jpg.9ca70ff2479ede3f425f70bfbe8333dc.jpg

 

36_char_L6_3.thumb.jpg.33b7fcc3b1c669ba98d4ee16e8d95bc9.jpg

 

 

 

 

I've been working on this problem in Gopher2600 today and I believe I've identified the condition when "RESP0 cycle 3" applies.


To begin with I've implemented the condition for "RESP0 cycle 0" as described by @alex_79 in https://github.com/stella-emu/stella/issues/699 . That is, what we see is caused when RESPx is strobed during HBLANK and on the same video cycle as when the HMOVE ripple counter started.


As @alex_79 postulates "RESP0 cycle 3" is caused by a completely different race condition. I believe this is correct.

 

In my opinion, the image we see in the third screenshot is caused when:

 

1) RESPx has been strobed

2) scancounter START signal has been triggered (but before drawing starts)

3) HMOVE ripple counter has just ended

4) the player's phase-1 clock signal is rising/falling

 

Normally, a scancounter that has had its START signal triggered will not start drawing until the player position has actually been reset. On this type of machine however, the START signal will resolve without being affected by the RESPx strobe.

 

Reassuringly, these changes do not break any test in my regression database, so I believe this is partly accurate description of what is going on, if not entirely.

 

I've pushed the changes to Github: https://github.com/JetSetIlly/Gopher2600

 

Some screenshots. The flicker makes it difficult to capture a still-image but you can just see enough of the phosphor.

 

RESP0 cycle 0

RESP0_cycle0.thumb.png.1f9331a3d491b82ea537652533fbe750.png

 

RESP0 Cycle 1 and 2

RESP0_cycle1.thumb.png.48a6b9f752ba65c63f6cfa1d552767e2.png

 

RESP0 cycle 3

RESP0_cycle3.thumb.png.f81523f9da12bf2f3c1bad6ad8f157f3.png

  • Like 1
  • Thanks 2
Link to comment
Share on other sites

1 hour ago, JetSetIlly said:

In my opinion, the image we see in the third screenshot is caused when:

 

1) RESPx has been strobed

2) scancounter START signal has been triggered (but before drawing starts)

3) HMOVE ripple counter has just ended

4) the player's phase-1 clock signal is rising/falling

 

Normally, a scancounter that has had its START signal triggered will not start drawing until the player position has actually been reset. On this type of machine however, the START signal will resolve without being affected by the RESPx strobe.

Many thanks for the explanation.

Very interesting.

 

I've just pulled from git and compiled Gopher2600 with those changes.

It works great! :thumbsup:

 

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...