MSX1 Memory Mapper

Página 5/20
1 | 2 | 3 | 4 | | 6 | 7 | 8 | 9 | 10

Por RetroTechie

Paragon (1563)

Imagen del RetroTechie

15-02-2016, 23:23

zPasi wrote:

The idea is to duplicate the page register with a second pair of 670s. That duplicate is used just for back annotation. Maybe not the smartest way to do it, but works.

It has been used in the past (including by myself) because it's a faster circuit. With a single (set of) '670 you need a multiplexer to switch between A0/A1 and A14/A15 (read back registers vs. regular mapper use). That multiplexer + relatively slow '670 gives a delay that can make mappers fail @ 7 MHz etc.
Paralleling '670s takes that multiplexer delay out of the equation. Disadvantage is you have more connections to each Z80 data line (3 per data line vs. just in/out on the 'classic' circuit). These days there are very fast multiplexers, so using those & return to the multiplexer-based circuit may be better option today (if you prefer discrete logic over a small CPLD, that is). In terms of IC count / wiring / cost it often doesn't matter much (but for example '157s are easier to find / cheaper than extra '670s).

l_oliveira wrote:

Because I needed to mod the BIOS for it to work properly at 60Hz, I also added code to initialize the mapper on boot.

It's definitely a more elegant solution. Most of all because it solves the problem for any mapper inserted, regardless whether that mapper initializes it's own registers on power-up or hw reset.

But it's not a big issue really. If you want to use a mapper on MSX1, just make sure you understand the problem, apply solution and enjoy. Smile

Por gdx

Enlighted (6210)

Imagen del gdx

16-02-2016, 00:12

RetroTechie wrote:
l_oliveira wrote:

Because I needed to mod the BIOS for it to work properly at 60Hz, I also added code to initialize the mapper on boot.

It's definitely a more elegant solution. Most of all because it solves the problem for any mapper inserted, regardless whether that mapper initializes it's own registers on power-up or hw reset.

Except when the MSX does not like that we unsolder their chips. Particularly the MSX1 and older MSX2.

Por zPasi

Champion (499)

Imagen del zPasi

16-02-2016, 08:32

gdx wrote:
RetroTechie wrote:
l_oliveira wrote:

Because I needed to mod the BIOS for it to work properly at 60Hz, I also added code to initialize the mapper on boot.

It's definitely a more elegant solution. Most of all because it solves the problem for any mapper inserted, regardless whether that mapper initializes it's own registers on power-up or hw reset.

Except when the MSX does not like that we unsolder their chips. Particularly the MSX1 and older MSX2.

Yeah. I hate soldered ROMs Evil

The common solution these days seems to just cut the legs, and then desolder the remaining leg-parts one by one. I haven't tried it yet, but sounds easier and better than trying to desolder the whole chip at once.

Por tvalenca

Paladin (747)

Imagen del tvalenca

16-02-2016, 19:34

madscient wrote:

Since MSX system allows multiple mapper slot, mapper register should not be readable, originally.
Otherwise the multiple mapper registers are mapped on same I/O address, reading register causes bus conflict.
A part of Japanese software reading mapper register (e.g. Illusion City) also fails with such situation.

Considering that Illusion city is a Turbo-R "oriented" game (can't remember if Z80 is supported by default, but it is compatible) and Turbo-R selects it's (256k or 512k) internal mapper by default, it won't fail on the supported configuration.

That's a design flaw, of course. But it won't fail.

Por madscient

Master (193)

Imagen del madscient

18-02-2016, 20:22

Mapper register is not selectable at reading, since they are mapped on same I/O port address.
Regardless slot or mapper selection, all of mapper registers implemented on the computer will reflect reading.
Remember that the reading mapper register is not comply with memory mapper spec.

Additionally, Illusion city stores value of the register with improper mask.
Therefore, if the computer has greater than 1024KB memory, will also fail.

Illusion City was oriented A1ST/GT without any upgrade/improvement, but did not comply with turboR spec.

Por mars2000you

Enlighted (6480)

Imagen del mars2000you

18-02-2016, 20:33

There's an improved version of Illusion City that can be runned also on MSX2 (although a turbo Z80 is recommended).

Unfortunaly, it's an unfinished English or Portuguese translation. I don't know if the mentioned bug has been fixed.

Por tvalenca

Paladin (747)

Imagen del tvalenca

18-02-2016, 20:39

madscient wrote:

Additionally, Illusion city stores value of the register with improper mask.
Therefore, if the computer has greater than 1024KB memory, will also fail.

Illusion City was oriented A1ST/GT without any upgrade/improvement, but did not comply with turboR spec.

Didn't know about that. Since my GT has only 1MB, I would never know that. That's probably a bug, not a feature.

Por l_oliveira

Hero (534)

Imagen del l_oliveira

18-02-2016, 21:37

Turbo R can use a maximum of 1MB RAM or ROM as per the S1990 specs allow (A0-A19).

It can have multiple ROMs connected to it (I believe up to four 1MB ROM chips which is where that 4MB address space from the dumps comes from I suppose). Because the MSX engine chip chosen to implement the rest of MSX spec was a 512KB type it only have 5 bits of mapper address, which is adequate for 512KB of memory maximum.

So to enjoy 1MB you have to provide the 6th bit. It's a bug, a feature and a issue all together.

The reason why ASCII recommends people don't read the register is that when you write to one of the mappers you change the active page for all others. So a user program using a mapper which is not the default mapper on another slot will disturb memory control for DOS2. So DOS2 keeps it's own mapper page values shadow copied on RAM and assumes that nobody else will touch it due to that.

Por hit9918

Prophet (2932)

Imagen del hit9918

19-02-2016, 00:55

Quote:

The reason why ASCII recommends people don't read the register is that when you write to one of the mappers you change the active page for all others.

the problem is that when one reads the mapper, one gets returned trash.
that all mappers shuffle simultaneously never was a problem. the secondary slot registers dont flip simultaneously, the result is woes.
the issue was messed up by MSX2.
then later DOS2 fixed it by adding mirror bytes to sysarea.

the words "default mapper", "primary mapper" are about a whole different topic.
not about a mapper problem, but about a slot problem.
"primary mapper" = "cant flip to another slot".

Por gdx

Enlighted (6210)

Imagen del gdx

19-02-2016, 01:40

madscient wrote:

Mapper register is not selectable at reading, since they are mapped on same I/O port address.

Originally the mapper was designed to be alone. With the falling prices of memory, put a second Mapper was becoming interesting. They decided that the additional Mappers would without reading registers but given that this becomes complicated. The standard has evolved again and reading registers was considered obsolete. The MSX-DOS2 standard no longer takes account the state of any mapper registers. The hybrid solution did not last long. However the ideal is to have a mapper cartridge with a switch ON/OFF (or a strap like the MMM) to enable or not the registers reading.

Página 5/20
1 | 2 | 3 | 4 | | 6 | 7 | 8 | 9 | 10