openMSX bugs

페이지 10/15
3 | 4 | 5 | 6 | 7 | 8 | 9 | | 11 | 12 | 13 | 14 | 15

By gdx

Enlighted (6437)

gdx의 아바타

21-03-2021, 12:30

I noticed that the status register 0 of the TMS99xx doesn't return the right values by default.

My MSX2 and turbo R return always the same following values after reset and a screen mode change with "A$= BIN$(vdp(8))".

In screen0: 10011111
In screen1: 10011111
In screen2: 10011111

OpenMSX return also the same values whatever the VDP but...

The real National CF-2700 :

In screen0: 11001000
In screen1: 10011111
In screen2: 11010001

The real Toshiba HX-10DP returns:

In screen0: 11001000
In screen1: 11001111
In screen2: 11010001

By PingPong

Enlighted (4156)

PingPong의 아바타

21-03-2021, 12:59

In screen 2, It does appear that there is a sprite overflow situation on sprite n. 17
In screen 0 there is a sprite overflow on sprite 8. A mode without sprites?
In screen 1 of Toshiba there is a sprite overflow on sprite 15
Weird that screen 0 there is a sprite overflow status

By Manuel

Ascended (19678)

Manuel의 아바타

21-03-2021, 22:46

Which VDP's are in these machines you tried that on, gdx?

By gdx

Enlighted (6437)

gdx의 아바타

22-03-2021, 01:06

Probably a TMS9918ANL for the National CF-2700 and I don't know for the Toshiba HX-10DP, Maybe a TMS9918A. There is a heatsink.

https://www.msx.org/wiki/National_CF-2700

By gdx

Enlighted (6437)

gdx의 아바타

23-03-2021, 03:34

There is another bug which is not insignificant. The VDP type test on the wiki works fine on OpenMSX and other emulators but not on real MSX1. It works fine too on real MSX2 and Turbo R. On real MSX1 the returned value changes sometime randomly. (Tested many times on two real Japanese MSX1)

https://www.msx.org/wiki/How_to_detect_VDP_type

By gdx

Enlighted (6437)

gdx의 아바타

24-03-2021, 14:22

I fixed the routine but it would be nice if this different behavior was emulated.

By Manuel

Ascended (19678)

Manuel의 아바타

24-03-2021, 21:12

We can only fix it if you explain what is actually going on.... that goes for all these things.

By Grauw

Ascended (10821)

Grauw의 아바타

24-03-2021, 21:42

I assume you’re referring to this detection code?

Status register 1 does not exist on TMS9918. Thus, you read the 5th sprite bits of status register 0, it seems the routine relies on this. I think the 5th sprite bits give the internal sprite counter of the VDP until it is latched when a 5th sprite is found, or something like that (your findings seem to suggest this is only the case on TMS9918 and not V99x8). Therefore, if you use this value you may get various values. I think this is not implemented on openMSX, which could explain the difference.

p.s. Register 15 does not exist on TMS9918, so due to the mirroring you are writing the value 8 and then 0 to register 7, rather than restoring it to its original value. This can mess up the text and background colour (leave the screen blank).

By Manuel

Ascended (19678)

Manuel의 아바타

24-03-2021, 21:46

@Grauw can you also say such sensible things about the status register 0 findings at the top of this page?

Quote:

I think the 5th sprite bits give the internal sprite counter of the VDP until it is latched when a 5th sprite is found, or something like that (your findings seem to suggest this is only the case on TMS9918 and not V99x8). Therefore, if you use this value you may get various values. I think this is not implemented on openMSX, which could explain the difference.

If someone designs tests to find out how it works in enough detail, we'd be happy to implement it.

By Grauw

Ascended (10821)

Grauw의 아바타

24-03-2021, 21:56

I don’t know (haven’t tested) the exact behaviour. It is more a suspicion than a known fact. I think I recall Tom Harte implemented something in his CLK emulator. Or maybe it was someone else and something similar related to s#3-s#6.

Knowing the exact behaviour can potentially be very useful, it might allow to detect the current position of the raster beam with some sprites placed across the screen vertically. But exact details on how this behaves on each VDP are needed.

페이지 10/15
3 | 4 | 5 | 6 | 7 | 8 | 9 | | 11 | 12 | 13 | 14 | 15