gdx. the wiki table says
SLTWRK = Pointer or slot ID of work area for slot 0-0
SLTWRK+2 = Pointer or slot ID of work area for slot 0-1
SLTWRK+4 = Pointer or slot ID of work area for slot 0-2
this table is wrong because it has no pages.
the table size is 128 bytes
4 pages x 16 subslots x 2 byte = 128 byte
SLTWRK+ 0 = for slot 0-0 page 0 SLTWRK+ 2 = for slot 0-0 page 1 SLTWRK+ 4 = for slot 0-0 page 2 SLTWRK+ 6 = for slot 0-0 page 3 SLTWRK+ 8 = for slot 0-1 page 0 SLTWRK+10 = for slot 0-1 page 1 SLTWRK+12 = for slot 0-1 page 2 SLTWRK+14 = for slot 0-1 page 3 ...
OK, this is the order that was wrong not the calculation. It was indicated in the text for the pages.
The SLTWRK area of the pages for slot 0-0 are reserved for use of the BIOS:
SLTWRK+0 RAMDISK (MSX2 and up).
b7,b3-b0 slotid of RAMDISK
b6 set RAMDISK is initialized, reset RAMDISK is not initialized
b5 set RAMDISK functionality disabled (CALL MEMINI), reset normal operation
SLTWRK+1 KANJI BASIC
SLTWRK+2 KANJI BASIC
SLTWRK+4 KANJI BASIC or HANGUL
SLTWRK+5 KANJI BASIC or HANGUL
That is wrong. This depends on the location of the ROMs in the slots.
You should block wiki editing for new users (less than 5 posts on the forum for example) to avoid spam.
You also can banish this fake user:
https://www.msx.org/users/Samwebstudio
OK, this is the order that was wrong not the calculation. It was indicated in the text for the pages.
The SLTWRK area of the pages for slot 0-0 are reserved for use of the BIOS:
SLTWRK+0 RAMDISK (MSX2 and up).
b7,b3-b0 slotid of RAMDISK
b6 set RAMDISK is initialized, reset RAMDISK is not initialized
b5 set RAMDISK functionality disabled (CALL MEMINI), reset normal operation
SLTWRK+1 KANJI BASIC
SLTWRK+2 KANJI BASIC
SLTWRK+4 KANJI BASIC or HANGUL
6
SLTWRK+5 KANJI BASIC or HANGUL
That is wrong. This depends on the location of the ROMs in the slots.
I wrote the text regarding SLTWRk+0 ... SLTWRK+5. Can you explain what is wrong? I can show you the sources to prove it is right.
Look these examples for Sony HB-F700F:
To know Disk-ROM buffer we use following methode as said by hit9918.
SLTWRK address = FD09H + 32*primary slot + 8*expanded slot + 2*page
HB-F700F have its Disk-ROM in slot 3-0 page 1.
The calculation is: FD09H + 32*3 + 8*0 +2*1 = 0FD6Bh
If we read the 2 bytes at address 0FD6Bh, we get F1C0h. So Disk-ROM work area is at this address in main RAM.
If we know buffer for Main-ROM (it use buffer for CALL MEMINI from MSX2).
The calculation is: FD09H + 32*0 + 8*0 +2*0 = 0FD09h
If we read the byte at address 0FD09h, we get CFh because the byte format is "F RMD APP RES SS1 SS0 PS1 PS0" as I was indicated. (the bit RMD = Set if the RAM is used by instruction CALL MEMINI, 0 otherwise)
By cons the Kanji Rom seems to be an exception. In Kanji mode the bytes SLTWRK+1 to SLTWRK+6 are used but differently from what you describe. I noticed that SLTWRK+1 is the slot ID of the firmware Rom on Panasonic MSX2+ and turbo R followed by an address. SLTWRK+4 is the slot ID of slot Kanji Basic ROM followed by another address. I don't know what these addresses are.
Look these examples for Sony HB-F700F:
To know Disk-ROM buffer we use following methode as said by hit9918.
SLTWRK address = FD09H + 32*primary slot + 8*expanded slot + 2*page
HB-F700F have its Disk-ROM in slot 3-0 page 1.
The calculation is: FD09H + 32*3 + 8*0 +2*1 = 0FD6Bh
If we read the 2 bytes at address 0FD6Bh, we get F1C0h. So Disk-ROM work area is at this address in main RAM.
If we know buffer for Main-ROM (it use buffer for CALL MEMINI from MSX2).
The calculation is: FD09H + 32*0 + 8*0 +2*0 = 0FD09h
If we read the byte at address 0FD09h, we get CFh because the byte format is "F RMD APP RES SS1 SS0 PS1 PS0" as I was indicated. (the bit RMD = Set if the RAM is used by instruction CALL MEMINI, 0 otherwise)
By cons the Kanji Rom seems to be an exception. In Kanji mode the bytes SLTWRK+1 to SLTWRK+6 are used but differently from what you describe. I noticed that SLTWRK+1 is the slot ID of the firmware Rom on Panasonic MSX2+ and turbo R followed by an address. SLTWRK+4 is the slot ID of slot Kanji Basic ROM followed by another address. I don't know what these addresses are.
Of course this calculation is right for extension roms, like the diskrom. But the 2 bytes are free to use for the extension, it can be used for anything. The wiki states the pointer use, which is the most used. Why the slotid is mentioned as a use for SLTWRK specificly is unclear to me, because that is not a common use.
As you can see in my msxsyssrc project, SLTWRK+0 (normally for slot 0-0 page 0 extension), is used for the build-in ramdisk: https://sourceforge.net/p/msxsyssrc/git/ci/master/tree/base200/subrom.mac line 10065. According to your explaination it should be stored in the SLTWRK entry of the subrom slot, page 0. But as you can see, this is not the case, it is hardcoded at SLTWRK+0. Which is OK, because slot 0-0 is reserved for BIOS anyway (impossible location for an extension).
The same goes for KANJI BASIC:
https://sourceforge.net/p/msxsyssrc/git/ci/master/tree/kanji/kanji.mac line 318
And for HANGUL:
https://sourceforge.net/p/msxsyssrc/git/ci/master/tree/base200/difkor.mac line 21
So it is save to say ASCII/Microsoft have reserved SLTWRK+0 .. SLTWRK+7 for internal use. I hope with this explaination, you will see that my text is right and well thought out.
Of course this calculation is right for extension roms, like the diskrom. But the 2 bytes are free to use for the extension, it can be used for anything.
Not really free. I completed the explanation about SLTWRK. It's a mix of what has been said here and before.
https://www.msx.org/wiki/Slots
Say if it suits you.
Not really free.
Yes, really free. As of the MSX2 technical databook (carefully read the (2) remark):
7.3.2 notes on the creation of the cartridge software
In programs not requiring software from other cartridges (stand-alone
software such as games), the portion with the smaller address than the work
area used by BIOS (F380H) can be used freely.
But in programs which are executed by using BASIC interpreter functions, the
same area cannot be shared as the work area. To do this, there are three
methods:
(1) Place RAM on the cartridge itself (the safest and most reliable method).
(2) When one or two bytes are needed for the work area, use two bytes
corresponding to itself in SLTWRK (FD09H to ...) as the work area.
(3) When more than three bytes are needed for the work area, allocates it
from RAM used by BASIC. To do this, put the contents of BOTTOM (FC48H)
to the area corresponding to SLTWRK (FD09H to ...), and increase the
value of BOTTOM by the needed work area, then allocate it for the
work area (see figure 5.52).
Not really free because the MSX Datapack gives recommendations. So I put them in the Wiki.
(2) When one or two bytes are needed for the work area, use two bytes
corresponding to itself in SLTWRK (FD09H to ...) as the work area.
(3) When more than three bytes are needed for the work area, allocates it
from RAM used by BASIC. To do this, put the contents of BOTTOM (FC48H)
to the area corresponding to SLTWRK (FD09H to ...), and increase the
value of BOTTOM by the needed work area, then allocate it for the
work area (see figure 5.52).[/i]
That's what I put in the Wiki. Only the context is different. In the wiki, it's a general explanation. What you quote is an excerpt of explanation on how to reserve RAM for a ROM application. Maybe Wiki is not clear (I'm not good in English). That's why I asked for your opinion. More details are certainly needed but I do not think it's wise to remove everything under the pretext that in fact only the location of the two bytes is to respect.
The article about the VG 8240 says it contains a 64kB memory mapper. What is the source of that information? I would expect it to be plain RAM, actually.
Was the memory layout and the PCB ever photographed to also verify the statements about them?
@msxholder: do you know?