What is a large amount of RAM useful for?

페이지 2/3
1 | | 3

By Manuel

Ascended (16040)

Manuel의 아바타

06-02-2018, 23:41

It used to be useful when you had to run cracked megaROMs you couldn't afford to buy and there were no flash-RAMs...

Other than that, it's useful if you want to copy floppy disks using FastCopy 3 for instance.

By ToriHino

Champion (424)

ToriHino의 아바타

07-02-2018, 00:51

Grauw wrote:

Using the Nextor 4-key hack to force the external mapper to be primary does not count tbh, software that can use >192K of memory should just support secondary mappers by themselves, and be able to use the total amount of memory and run on the R800 at full speed… (does RoboIMF? if no, feature request from me Wink)

I agree it does not really count. As you mention, the software itself should support additional mappers, regardless which brand or type. I see what I can do about the feature request Tongue

By Grauw

Ascended (8711)

Grauw의 아바타

07-02-2018, 01:12

If you’re using the DOS2 mapper routines, it is as easy as allocating with B=%0010000, storing the slot ID it returns along with the bank ID, and when selecting a new bank, also change the slot (if you’re really performance-minded, you could first check if the slot changed, but in VGMPlay I just do it always).

syn wrote:

A bit unfortunate, since I'd like to put my 20MB to good use.

Mmmh, I guess we should think of a way Big smile.

By ToriHino

Champion (424)

ToriHino의 아바타

08-02-2018, 19:03

Grauw wrote:

If you’re using the DOS2 mapper routines, it is as easy as allocating with B=%0010000, storing the slot ID it returns along with the bank ID, and when selecting a new bank, also change the slot (if you’re really performance-minded, you could first check if the slot changed, but in VGMPlay I just do it always).

Ok, indeed looks very easy. Is setting the main slot ID enough? Or to put it different, will the mapper routines scan for mappers in all sub-slots as well?

By Grauw

Ascended (8711)

Grauw의 아바타

08-02-2018, 23:27

If you specify a slot explicitly then you must specify a full slot ID.

But, there is no need to specify a slot explicitly. Set the slot ID bits to 0 to conveniently indicate “the primary mapper’s slot”. So 0 010 0000 means "try to get a segment from the primary mapper, or else from another one".

This is exactly what you usually want; primary mapper segments will be returned first, internal mapper on turboR for best performance, and largest mapper on earlier MSX generations to require the fewest slot switches. After the primary mapper is depleted, it will start to return pages from the secondary, ternary, etc. mappers. The slot it allocated from will be returned together with the segment number.

And then as said, store these (segment, slot) IDs together, and when selecting a new segment, also change the slot. If you feel inclined you can optimise it to only do the slot-change when needed, but in VGMPlay I simply select it always.

ALL_SEG - Parameters:   A=0 => allocate user segment
                        A=1 => allocate system segment
                        B=0 => allocate primary mapper
                        B!=0 => allocate 
                        FxxxSSPP slot address (primary mapper, if 0)
                        xxx=000 allocate specified slot only
                        xxx=001 allocate other slots than specified
                        xxx=010 try to allocate specified slot and,
                                if it failed, try another slot (if any)
                        xxx=011 try to allocate other slots than specified and,
                                if it failed, try specified slot
          Results:      Carry set => no free segments
                        Carry clear => segment allocated
                                       A=new segment number
                                       B=slot address of mapper slot
                                         (0 if called as B=0)

http://map.grauw.nl/resources/dos2_environment.php#c5_4

By WORP3

Paladin (806)

WORP3의 아바타

09-02-2018, 13:05

Meits wrote:

Do both MIDI players support external memory as well when used on a turbo R?

I guess it depends on your msxdos version. I can remember that in the past msxdos only takes memory out of one slot.

By Grauw

Ascended (8711)

Grauw의 아바타

09-02-2018, 16:52

WORP3: As I described above DOS2 supports memory from all slots, just several application programs allocate solely from the primary slot (with B=0). So it depends on the application, if they explicitly chose not to support secondary mappers for reasons of laziness. (DOS1 has no memory mapper support at all.)

By ToriHino

Champion (424)

ToriHino의 아바타

09-02-2018, 20:20

I modified the player to use other mappers next to the primary mapper as well, but now the DOS calls to read from disk go hyper when i select a memory page and slot other than the primary mapper. Guess I have to look further into that.

By ToriHino

Champion (424)

ToriHino의 아바타

10-02-2018, 11:56

Found the problem, apparently the DOS2 read commands can only read to the primary mapper Also good to know that ENASLT disables the interrupt and leaves it like this when finished.

By Grauw

Ascended (8711)

Grauw의 아바타

10-02-2018, 19:59

Ah, yes, that’s indeed a weird little quirk, you need to load to a temp area and then copy. About slot select routines, you always need to make sure to enable interrupts afterwards. On MSX1 they are left disabled, the MSX2 BIOS attempts to restore them but has a small chance of failing due to a Z80 bug, so you should not rely on that and still enable them manually always.

페이지 2/3
1 | | 3