DOS 2.20: How exactly does the mapper work ?

By foske

Resident (36)

foske's picture

19-02-2007, 14:58

Hi,

I've seen many schematics of a DOS 2.20 hardware mod, but I'm trying to find out whether it's possible to put DOS2.20 in a subslot which already contains another ROM (in a different bank). I know DOS 2.20 is 64 kB, but memory mapped. So, how exactly does the memory mapper work: which bank is used for DOS 2.20 and which address should be used by the memory map register ? Most implementations use only the upper 4 address bits to select the register...

Does anybody know whether it should be at all possible to put two different roms in one subslot when they do not use the same banks ?

Login or register to post comments

By foske

Resident (36)

foske's picture

19-02-2007, 15:30

Ok, I overlooked the CS1 input signal... So, the CS1 line indicates that the ROM is mapped in bank 1, right ? However, the address decoder takes part of bank 1 too (0x6XXX). Now that looks inefficient to me ?

By zeilemaker54

Champion (331)

zeilemaker54's picture

19-02-2007, 15:46

the DOS2 kernel is indeed in page 1 (04000H-07FFFH), but has 4 'segments' which can be selected by writing the segmentnummer in the 'segmentregister'. This is generally (but not always) at address 06000H. In order to keep the hardware design simple (and cheap), the complete decoding of address 06000H is not performed but only the decoding of 6XXX.

segment 0 = dos2 environment (including diskbasic)
segment 1 = support routines + (error) messages
segment 2 = dos2 kernel (bdos)
segment 3 = MSX KANJI (standalone) or dos1 kernel (MSX Turbo-R)

By foske

Resident (36)

foske's picture

19-02-2007, 16:50

Thanks for your excellent explanation, but it still doesn't explain why a 64 kB ROM is reduced to a 48 kB ROM by using the address range of 0x6000-0x6FFF for the mapper register. Or is the trick that you can only write into the mapper register and only read from the ROM ?

By HansO

Paladin (672)

HansO's picture

19-02-2007, 18:40

Thanks for your excellent explanation, but it still doesn't explain why a 64 kB ROM is reduced to a 48 kB ROM by using the address range of 0x6000-0x6FFF for the mapper register. Or is the trick that you can only write into the mapper register and only read from the ROM ?

The 64K rom is divided in 4 segments, each 16K in size. The mapper maps in one of those 4 segments at the 16K window 4000H - 7FFFH. So nothing is spilled.
The mapper register is a write only memory location, so reading the same location gives ROM content, writing does load the register. In fact, writing to ROM does not make sense!
And giving it the name register is a lot of honour for two flipflops in a row..

By foske

Resident (36)

foske's picture

20-02-2007, 09:40

Thanks Hans !

I got the picture now. I am aware that writing to EPROMs doesn't really make sense unless you got programming logic and voltages applied :-) Then the next question of course is why an address decoder is used at all, and not simply /CS1 is OR-ed with /WR. Or does /CS1 contain /RD? Any recommendations about a good MSX Engine (the Philips one) manual ? Oh man what a questions...

So. What I am trying to find out is whether I can put MSXDOS 2.20 in Slot 30, bank 1. The MSX2 Extension ROM is in bank 0. Now I have to find out what exactly SLT3/30 from the Engine does, if it only gets low in bank 0 I need to copy the slot select logic. Why I want to do it ? Because everybody uses slot 3.1 for this and IMHO it is a waste of slot 3.0 :-). I like turning left when the obvious way is right...