MSX HDMI mutlimedia card

페이지 16/56
9 | 10 | 11 | 12 | 13 | 14 | 15 | | 17 | 18 | 19 | 20 | 21

By hit9918

Prophet (2899)

hit9918의 아바타

22-06-2014, 21:11

Look here
http://www.trilobyte-msx.com/uridium/
I think uridium uses two colormask bits.

patternregister and colorregister bits go like this:

The upper bit sets location 0k / 8k (I call it just "upper bit", it is in different locations in color vs pattern register).
Then follow two mask bits making linecounter AND 128 and linecounter AND 64.
They snip the address down to two charsets or to one charset.

Now patternregister got no more bits, but colorregister has some more lower mask bits:
They go AND on the top bits of the ascii value fetched from nametable.
This way things are snipped sub-charset, e.g. mask ascii 128-255 down to 0-127, getting doublebuffering without changes in the nametable.

here I described after checking out on real chip:
http://www.msx.org/forum/development/msx-development/new-hyb...

By hit9918

Prophet (2899)

hit9918의 아바타

22-06-2014, 21:27

Thecure has linemix
download http://msxdev.msxblue.com/?page_id=116
http://www.youtube.com/watch?v=ynPAdLn0xRE

On the one hand, it is no feature of 9929 but of the signal, on the other hand it is like made for TMS.
E.g. C64 has 4 colors in a tile, 3 of them same on the entire screen.
While on screen 2 every line you pick new color unlimited.

By ARTRAG

Enlighted (6493)

ARTRAG의 아바타

22-06-2014, 23:13

Uridium works in this way
http://www.msx.org/forum/msx-talk/general-discussion/msx-vap...
There is no double buffer, just twice the tiles

By maxis

Champion (512)

maxis의 아바타

22-06-2014, 22:42

@hit9918

Thank you for the tips. From all the provided info, I'll need to properly implement the behavior of the address/tile counters for each bit in the "always 1" bit fields of the Pattern Name & Color & Generator etc tables in all the screen modes.... I'll test this out on the V9938.

By hit9918

Prophet (2899)

hit9918의 아바타

22-06-2014, 23:50

@maxis,
on 9918 it is only in screen 2. on 9938 I dont know about the higher modi.

The chips do different in the sub-charset masking.
When you got a 9938 at hands, I am interested how it works.
I got the theory it works like 9118 and that does apply the ascii mask only on the color address, not on pattern.

9918 is no theory, I tested myself, it masks the ascii value, i.e. both pattern and color address change accordingly.

The "ascii", I mean the byte fetched from nametable.

By hit9918

Prophet (2899)

hit9918의 아바타

23-06-2014, 00:00

Uridium doesn't use sub-charset mask.
It masks color down to one charset to free vram.
Next frame things are flipped and that vram used for patterns.
Pattern mask is not used because it messes the sprites on MSX1.

By maxis

Champion (512)

maxis의 아바타

23-06-2014, 13:18

hit9918 wrote:

@maxis,
When you got a 9938 at hands, I am interested how it works.

I'll give it a try and share the results... Thanks

By ARTRAG

Enlighted (6493)

ARTRAG의 아바타

23-06-2014, 19:28

Apart using hasing techniques, is there some other option to remap seamless msx1 sprites in ennanched full color sprites?
260 bits are quite a lot also for modern hw...
Uridium is a nice test case as it implements split screen using sprite and status register, two sat and two spt on the screen apart hybrid mode

By maxis

Champion (512)

maxis의 아바타

23-06-2014, 22:51

ARTRAG wrote:

Apart using hasing techniques, is there some other option to remap seamless msx1 sprites in ennanched full color sprites?

IMHO, it depends on the each particular GFX engine implementation. Which game do you have in mind as the first candidate for the upgrade?

By hit9918

Prophet (2899)

hit9918의 아바타

23-06-2014, 23:21

I find C mirror bytes solve the VDP quirk fine.

		;coordinate SAT dump
		...
		outi		;Y
		outi		;X
		outi		;P
		;this one instead the usual 4th outi
		ld a,(de)		;C mirror bytes array
		inc e			;256 byte aligned array
		cp (hl)
		jr nz,update
updateret:	out (0x98),a		;dummy to inc vram pointer
		...
	
update:		ld a,(hl)
		ld (de),a		;update C byte in array
		;note the job to copy in a list, to be done in another function.
		ld (ix),e		;index = SAT position
		inc ix
		jp updateret

In all other code you use the C byte MSX1 style. Except that it is no color but index to 256 colorpatterns.
To make the low bit of C byte to mean EC bit, make every second colorpattern a copy that has the EC bits set.

And when you have an idea that requires 4 SATs... the method keeps working out of the box.
Every SAT has its own C mirror array.

페이지 16/56
9 | 10 | 11 | 12 | 13 | 14 | 15 | | 17 | 18 | 19 | 20 | 21