European software will fail running with it.
mmm, many things to take in account... can you quote some european titles? I mean, will I be missing a lot or is just a few programs which wont run with this mapper?
That particular mapper works fine, but it has no readback on the mapper register (returns 0xFF on reads). European software will fail running with it. But it should work perfectly fine with Japanese software (including DOS2).
About what software are we talking about here? MSX1 softs usually don't care about the mappers. If the mapper is initialised, an MSX1 soft just sees a linear 64K.
And properly written DOS2 and Nextor software don't use the mapper directly.
If the problem is badly written MSX2 software, it doesn't matter because this is still MSX1.
That particular mapper works fine, but it has no readback on the mapper register (returns 0xFF on reads). European software will fail running with it. But it should work perfectly fine with Japanese software (including DOS2).
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.
European software will fail running with it.
mmm, many things to take in account... can you quote some european titles? I mean, will I be missing a lot or is just a few programs which wont run with this mapper?
If anyone cannot name MSX1 software that fails without back annotation, I suggest just build that mapper.
But, you can reserve space for a 7432 OR-gate, and a second set of 670 registers, just in case. So, if really needed, you can add that back annotation later. I can provide info how to do it.
OUT(255),0
Can definitely hang an MSX1, because (for most mappers) mapper registers are not defined at power-up. And "undefined" != "0". Usually registers are zero-ed (block 0 in all pages), but no guarantees there. So the above instruction usually will not hang an MSX1. But it might. Unlike on MSX2 and up where mappers are initialized by the BIOS (with block 0 in C000-FFFFh area).
Also if you run a program that changes the mapper configuration & hit reset, that changed configuration will remain. On MSX2 and up until the BIOS starts (before RAM is searched). On an MSX1 indefinitely until power-off or until you manually intervene.
This is only valid with the classic Memory Mappers that does not take into account the reset signal.
Most mappers (perhaps even some modern CPLD/FPGA based ones) aren't initialized by a hardware reset because it makes a mapper more complicated than it needs to be. And uses a cartridge slot signal where it doesn't need to be used.
Relying on the BIOS works fine. The issues with using a mapper on MSX1 is not a hardware problem, but lack of BIOS support.
XC9500 family CPLD's (XC9536 included) have the option to set power-up defaults for each register bit, and I took advantage of that in my CPLD-based mapper (also it supports read-back of the registers). But for above reason I didn't include /RESET signal. So at power-up it's initialized like default for MSX2 and up, and after that as long as the machine stays powered, a hardware reset will leave the current setting untouched.
I haven't seen a DIY mapper that properly initialises itself on reset. It's not easy to initialise 74xx670 registers without a processor. With CPLD it's not a problem, but investing time and money learning that stuff for a one-time DIY project isn't very practical IMO.
Well there is an in-between: buy a pre-configured CPLD from someone else. IIRC L.Padial was selling some, for example. I might as well, if original poster needs one 'bad enough'. XC9536 (or -72) can be found in PLCC housing, which is hobbyist-friendly. XC9500XL family is more current (not obsoleted by manufacturer), easier to find and cheaper, but needs a 3.3V supply which complicates things.
But programmable logic has advanced enough that @ this point in time, a small CPLD is often easier to find than a set of 74HC(T)/LS670. For the latter: let alone in DIP housing.
mmm, many things to take in account... can you quote some european titles? I mean, will I be missing a lot or is just a few programs which wont run with this mapper?
It's not title-specific, or "European" vs. "Japanese". Just sloppy programmers.
Basically most mapper-using software is for MSX2 or higher to begin with. Or makes the implicit assumption of "will use mapper" -> "will be MSX2 or up".
So there will be little software affected anyway. Perhaps some cracked megaROM disk versions, that happen to work on MSX1. Or could be made to work on MSX1 with a little tweaking. Perhaps a disk-copy program here or there.
For the bulk of software, either it won't need a mapper (read: on MSX1, initialize mapper once after power-up, done). Or it'll need an MSX2 or higher and thus not run on MSX1 anyway.
XC9500 family CPLD's (XC9536 included) have the option to set power-up defaults for each register bit, and I took advantage of that in my CPLD-based mapper (also it supports read-back of the registers). But for above reason I didn't include /RESET signal. So at power-up it's initialized like default for MSX2 and up, and after that as long as the machine stays powered, a hardware reset will leave the current setting untouched.
The Musical Memory Mapper cartridge uses a simple EPM7064 but it takes in into account the /RESET signal to initialize pages to 3, 2, 1 and 0. It is a good Mapper not too expensive that supports the MSX1.
Well, last night I successfully built a 512k mapper on a breadboard (with a lot of flying cables) following the design from the link I posted before (the one in portugese). It works on MSX2 of course.
On MSX1, as you said before, it needs initialization from basic but to my surprise MSXDOS2 and NEXTOR seems to initialize the mapper itself (without having to do it from BASIC), so if you cold-boot NEXTOR with the mapper plugged in it will boot in DOS2 mode, which is what I wanted to begin with!
But, you can reserve space for a 7432 OR-gate, and a second set of 670 registers, just in case. So, if really needed, you can add that back annotation later. I can provide info how to do it.
Please, by all means. I would like to have the info just in case I decide to add that feature later
It's not title-specific, or "European" vs. "Japanese". Just sloppy programmers.
Basically most mapper-using software is for MSX2 or higher to begin with. Or makes the implicit assumption of "will use mapper" -> "will be MSX2 or up".
So there will be little software affected anyway. Perhaps some cracked megaROM disk versions, that happen to work on MSX1. Or could be made to work on MSX1 with a little tweaking. Perhaps a disk-copy program here or there.
For the bulk of software, either it won't need a mapper (read: on MSX1, initialize mapper once after power-up, done). Or it'll need an MSX2 or higher and thus not run on MSX1 anyway.
So is not so critical to have read-back then. I would probably add it anyway just for the sake of doing it.
Thank you guys for all the info!
However, many MSX1 does not select the memory extension by default because the internal RAM is in a inferior slot. You'll need a other program in language machine for it or boot on DOS2 (a DOS2 patched for MSX1 or Nextor).
...and you can try with RUNDOS1.COM for sepcific MSX-DOS1 software.
But, you can reserve space for a 7432 OR-gate, and a second set of 670 registers, just in case. So, if really needed, you can add that back annotation later. I can provide info how to do it.
Please, by all means. I would like to have the info just in case I decide to add that feature later
Here it is
(Lousy Photoshop work but maybe clear enough.)
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. Note the /BUSDIR, if you're building this as internal that line doesn't exist and is not needed.
I haven't tested this one, but I think it should work B-)
(Ignore that transparent "hat" in the picture, I didn't notice I was saving with alpha) LOL!
OUT(255),0
Can definitely hang an MSX1, because (for most mappers) mapper registers are not defined at power-up. And "undefined" != "0". Usually registers are zero-ed (block 0 in all pages), but no guarantees there. So the above instruction usually will not hang an MSX1. But it might. Unlike on MSX2 and up where mappers are initialized by the BIOS (with block 0 in C000-FFFFh area).
What Mapper do you know that do not put their registers to zero? (Of course except the unused bits that are usually set to 1)
The programs in Basic below would not be valid with Mappers like this.