MSX Turbo-R behavior with 1MB external mapper

Page 1/4
| 2 | 3 | 4

By sd_snatcher

Prophet (3471)

sd_snatcher's picture

30-06-2010, 19:41

I need someone to test this:
We all know that the MSX Turbo-R return only the lower 5bits when the mapper register is read.
But what happens when an external memory-mapper of >=1MB is connected? Is this behavior fixed? Are all 8bits of the mapper-register read correctly because of the presence of the external register?
What the following command return on basic after booting it with SHIFT pressed?

? INP(254)
Login or register to post comments

By Jipe

Paragon (1502)

Jipe's picture

01-07-2010, 11:12

on all MSX the mapper by default is the larger mapper connect in a slot or internal

on the turbo-r the mapper by default is the internal mapper connectting on the R800 even if external is larger

By sd_snatcher

Prophet (3471)

sd_snatcher's picture

01-07-2010, 15:54

Ok, but that's on the software side and not related to the mapper-registers, right? On the hardware side any MSX with more than one memory-mapper connected simultaneously, all mapper-registers will be connected in parallel since all of them uses the same set of I/O ports.
I want to know how this will behave on a Turbo-R.

By SLotman

Paragon (1238)

SLotman's picture

01-07-2010, 17:18

On my ST, using external 1Mb mapper, on top slot (with Carchano's IDE on back slot) ?inp(254) = 225
(I get the same result on OpenMSX and on real machine, with or without shift being pressed and even without IDE - emulated or not)

But you know, reading mapper registers is wrong, and should be avoided since it won't work on all systems! Wink

By Leo

Paragon (1236)

Leo's picture

01-07-2010, 20:21

the behaviour is not fixed.
in fact when reading register 254 , you trigger two reads , one from each mapper , the result is a kind of or logical operation.
you must write only on the register 254 , and store somewhere the valueto remind what you wrote just before.
you can also notice when writing in one mapper bank you write same value to the other bank as well, there two write operation in parallel, so when you switch from one mapper to another you may want to restore the 4 values.
i dont think it will be different on turboR.

Does anyone knows how to activate the internal r800 mmu + dma 0/1 ?

By sd_snatcher

Prophet (3471)

sd_snatcher's picture

02-07-2010, 01:46

@SLotman:

Thanks for the test! Who's the maker of your external 1MB memory-mapper? What does the PRINT PEEK(254) return when this mapper is connected to a MSX without memory-mapper? (An Expert 1.1, i.e.)

@Leo:
the behaviour is not fixed.
in fact when reading register 254 , you trigger two reads , one from each mapper , the result is a kind of or logical operation.

Interesting. I guess this is caused by the bus' pull-up registers. So, any circuit that drives the signal to 1 will have an extra help of the pull-ups to win the up/down war.

you must write only on the register 254 , and store somewhere the valueto remind what you wrote just before

Yep, I know that. But it's said that a lot of european games/demos do read the registers (hence the existence of the MAP2 tool) and will not work on a Turbo-R that has its internal RAM expanded to 1MB.

Does anyone knows how to activate the internal r800 mmu + dma 0/1 ?

I don't know and I never saw any R800 datasheet anywhere. But you can try having a look at the Z280 CPU datasheet, since both chips are related to the unreleased Z800 CPU.

By Jipe

Paragon (1502)

Jipe's picture

02-07-2010, 10:01

will not work on a Turbo-R that has its internal RAM expanded to 1MB.

try this : http://msxinfo.msxblue.com/msxdocs/msxturbor1mb.pdf

By Leo

Paragon (1236)

Leo's picture

02-07-2010, 15:07

Does anyone knows how to activate the internal r800 mmu + dma 0/1 ?

I don't know and I never saw any R800 datasheet anywhere. But you can try having a look at the Z280 CPU datasheet, since both chips are related to the unreleased Z800 CPU.

Yes i have the Z280 datasheet , but it does not seems to work , i saw that dma woudl transfer ram to IOs
only if ram is above 64kb , since R800 see only 64kb and its MMU is not managing the 256kb but the S1990 does it , i guess it is dead : if everything goes like Z280.

By SLotman

Paragon (1238)

SLotman's picture

02-07-2010, 15:19

@SLotman:Thanks for the test! Who's the maker of your external 1MB memory-mapper?
No problem, anytime I can, just ask Smile
The maker is Maluf/B@ss - it can be actually a 4Mb mapper, if I get my hands on a 4Mb memory - since I only have 1Mb, that's what it is now Smile

What does the PRINT PEEK(254) return when this mapper is connected to a MSX without memory-mapper? (An Expert 1.1, i.e.)
That I cannot test... I only have the ST connected here.

Interesting. I guess this is caused by the bus' pull-up registers. So, any circuit that drives the signal to 1 will have an extra help of the pull-ups to win the up/down war.
There's actually a program to select the bigger mapper as the default one... MemTr, if I remember it right. There should be a thread here somewhere I started about it some time ago Smile

How it works exactly... I don't know Tongue

Yep, I know that. But it's said that a lot of european games/demos do read the registers (hence the existence of the MAP2 tool) and will not work on a Turbo-R that has its internal RAM expanded to 1MB.
Someone told me a long time ago it was something related to detecting mapper size... some programs didn't expect anything bigger than 256/512 - and when they find something like 1024 or higher, the counter overflows, and the soft get a wrong mapper size, probably not even detecting a mapper at all.

Does anyone knows how to activate the internal r800 mmu + dma 0/1 ?
DMA isn't connected on turbo-R, so I don't think you can use it anyway at all.
And for MMU? No clue - I just know the R800 have some extra commands for multiplication: MULUB and MULUW.
MULUB A,x -> HL = A * x (x = B,C,D or E)
MULUW HL,BC ->DEHL = HL * BC
MULUW HL,SP ->DEHL = HL * SP

That's all I could find out about R800.

By sd_snatcher

Prophet (3471)

sd_snatcher's picture

02-07-2010, 23:18

will not work on a Turbo-R that has its internal RAM expanded to 1MB.

try this : http://msxinfo.msxblue.com/msxdocs/msxturbor1mb.pdf

That's just the mod I had in mind when I opened this thread. I'm glad it's your work, thanks for your effort on fixing it! But I'm wondering exactly how it works, because it implements an external register just as it happens when an external memory-mapper is connected.

Why the memory-mapper connected to the external slot doesn't fix the mapper register the same way then?

By Jipe

Paragon (1502)

Jipe's picture

03-07-2010, 12:15

i think the register work but the memory just actived with the slot select signal

Page 1/4
| 2 | 3 | 4