What happen if:

ページ 1/2
| 2

By PingPong

Prophet (4093)

PingPong さんの画像

16-11-2008, 19:56

the msx vdp require two bytes to set the vram ptr.

What happen if, the vramptr = 0x1000
and one does

out (0x99),80

out (0x98),byte to write

Does the next byte be written on 0x1080 ?

I ask this because on the sms vdp seem to work. Because the vdp are similar i'm asking myself if can work.

I cannot test on the real hw, and i'm not sure that emulators emulate this.....

anyone know?

ログイン/登録して投稿

By Edwin

Paragon (1182)

Edwin さんの画像

16-11-2008, 21:24

I don't think so. The first byte is pure data, it needs the second byte to determine where it must go.

By flyguille

Prophet (3031)

flyguille さんの画像

16-11-2008, 22:51

it works twice?

can be 2 things

one that the out x98 event does NOt reset the addr set cursor...

so
if initially the vramptr is 1000

then you do

out x99, 80

vramtr is 1080

so you do out x98, data

then

out x99, 40

and vramptr must be 4081 and NOT 1040

now, if the out x98,0 really resets the "set cursor "

so, after an out x98, with just only one out x99 you will be sure that you sets the LMB

but, it is documented? no

By flyguille

Prophet (3031)

flyguille さんの画像

16-11-2008, 22:54

now, if every REAL VDP CHIP works in the same way.. WE as community can to document it!

then emulators will be adjusted in that way

By flyguille

Prophet (3031)

flyguille さんの画像

16-11-2008, 22:56

PingPong, if from this idea, comes out that first case is true, it will be a real speed up!....

By ARTRAG

Enlighted (6923)

ARTRAG さんの画像

17-11-2008, 00:06

I think that it cannot work as you say...
IIRC the sms has two independent registers, one for vram write, one for vram read.
Tthis allows you to read one byte from one location and write it to another location with just one "in" and one "out"
this is very different from what we have in the msx vdp

By flyguille

Prophet (3031)

flyguille さんの画像

17-11-2008, 00:40

I think that it cannot work as you say...
IIRC the sms has two independent registers, one for vram write, one for vram read.
Tthis allows you to read one byte from one location and write it to another location with just one "in" and one "out"
this is very different from what we have in the msx vdp

But, i hasn't mentioned nothing about 2 differents VRAM PTR....

Maybe you are confused , remember that our VDP hasta an auto-increment function on the VAR-PTR...

I just mentiones that if a read or write operation on port x98 has not efect in the sequence of filling the VRAM addr on port x99, that meands that the second time that you do OUT x99, you will set the ADDR'S HIGH BYTE instead of the LOW.

But, if the case is that, a read or write operation REALLY resets the FILLING ADDR PTR BYTE POINTER, you can be sure that after an transfer operation, the out x99,x fill change the LOW BYTE .

THIS is undocumented AREA, but if all real CHIPS works in this last case.... we can to set is as TRUE DOCUMENTED NOW!, and then with all emulators behaving this way....

will allows to write software, that within an range of 256 bytes, we can to write it ramdonly using one out 99 and one out 98.... is is like an 33% speed improve....

offcourse most soft is done in the way that they works with blocks of vram precaching on RAM if is necesary...

But maybe DEMOS can gain in this behavior

By hap

Paragon (2042)

hap さんの画像

17-11-2008, 11:35

On MSX1 TMS VDPs, but not on MSX2 and up, the address low byte is updated at the first write. Accessing $98 indeed resets the 'cursor'.
This behaviour is supported on emulators.

By PingPong

Prophet (4093)

PingPong さんの画像

17-11-2008, 20:36

thinking a lot this could not work. effectively how can the vdp guess that the first byte outputted on 99h is for the address ptr and not the value of a vdp register? It has no way to determine. Umh, now i'm asking myself how can things on SMS work?

By flyguille

Prophet (3031)

flyguille さんの画像

17-11-2008, 21:33

thinking a lot this could not work. effectively how can the vdp guess that the first byte outputted on 99h is for the address ptr and not the value of a vdp register? It has no way to determine. Umh, now i'm asking myself how can things on SMS work?

easy...

if the HIGH BYTE of VRAM PTR, alread has &B1xxxxxxx and then you changes the LOW BYTE, it still is pointing to a VDP REG.

if the HIGH BYTE of VRAM PTR, alread has &B0xxxxxxx and then you changes the LOW BYTE, it still is pointing to a real VRAM.

By PingPong

Prophet (4093)

PingPong さんの画像

17-11-2008, 22:16

thinking a lot this could not work. effectively how can the vdp guess that the first byte outputted on 99h is for the address ptr and not the value of a vdp register? It has no way to determine. Umh, now i'm asking myself how can things on SMS work?

easy...

if the HIGH BYTE of VRAM PTR, alread has &B1xxxxxxx and then you changes the LOW BYTE, it still is pointing to a VDP REG.

if the HIGH BYTE of VRAM PTR, alread has &B0xxxxxxx and then you changes the LOW BYTE, it still is pointing to a real VRAM.

Yes, but you are sending only 1 byte the low byte, that does not contains any info about the fact there is a register value or a low addr value.
I do not thing the tms vdp is soo smart to remember the last use of 0x99 port and to treat this value as a low byte addr value....

ページ 1/2
| 2