Difference between revisions of "ASCII-EX mapper"
From MSX Game Library
Line 15: | Line 15: | ||
! Bank (16kB) !! Switching address !! Initial segment | ! Bank (16kB) !! Switching address !! Initial segment | ||
|- | |- | ||
− | | 4000h~7FFFh (mirror: C000h~FFFFh) || Lower byte: 6000h (mirrors: 6001h~67FFh)<br/>{{COLOR|blue|Higher byte: 8000h (mirror: 8001h~87FFh)}} || | + | | 4000h~7FFFh (mirror: C000h~FFFFh) || Lower byte: 6000h (mirrors: 6001h~67FFh)<br/>{{COLOR|blue|Higher byte: 8000h (mirror: 8001h~87FFh)}} || 0000h |
|- | |- | ||
− | | 8000h~BFFFh (mirror: 0000h~3FFFh) || Lower byte: 7000h (mirrors: 7001h~77FFh)<br/>{{COLOR|blue|Higher byte: 9000h (mirror: 9001h~97FFh)}} || | + | | 8000h~BFFFh (mirror: 0000h~3FFFh) || Lower byte: 7000h (mirrors: 7001h~77FFh)<br/>{{COLOR|blue|Higher byte: 9000h (mirror: 9001h~97FFh)}} || 0000h |
|} | |} | ||
Line 25: | Line 25: | ||
! Bank (8kB) !! Switching address !! Initial segment | ! Bank (8kB) !! Switching address !! Initial segment | ||
|- | |- | ||
− | | 4000h~5FFFh (mirror: C000h~DFFFh) || Lower byte: 6000h (mirrors: 6001h~67FFh)<br/>{{COLOR|blue|Higher byte: 8000h (mirror: 8001h~87FFh)}} || | + | | 4000h~5FFFh (mirror: C000h~DFFFh) || Lower byte: 6000h (mirrors: 6001h~67FFh)<br/>{{COLOR|blue|Higher byte: 8000h (mirror: 8001h~87FFh)}} || 0000h |
|- | |- | ||
− | | 6000h~7FFFh (mirror: E000h~FFFFh) || Lower byte: 6800h (mirrors: 6801h~6FFFh)<br/>{{COLOR|blue|Higher byte: 8800h (mirror: 8801h~8FFFh)}} || | + | | 6000h~7FFFh (mirror: E000h~FFFFh) || Lower byte: 6800h (mirrors: 6801h~6FFFh)<br/>{{COLOR|blue|Higher byte: 8800h (mirror: 8801h~8FFFh)}} || 0000h |
|- | |- | ||
− | | 8000h~9FFFh (mirror: 0000h~1FFFh) || Lower byte: 7000h (mirrors: 7001h~77FFh)<br/>{{COLOR|blue|Higher byte: 9000h (mirror: 9001h~97FFh)}} || | + | | 8000h~9FFFh (mirror: 0000h~1FFFh) || Lower byte: 7000h (mirrors: 7001h~77FFh)<br/>{{COLOR|blue|Higher byte: 9000h (mirror: 9001h~97FFh)}} || 0000h |
|- | |- | ||
− | | A000h~BFFFh (mirror: 2000h~3FFFh) || Lower byte: 7800h (mirrors: 7801h~7FFFh)<br/>{{COLOR|blue|Higher byte: 9800h (mirror: 9801h~9FFFh)}} || | + | | A000h~BFFFh (mirror: 2000h~3FFFh) || Lower byte: 7800h (mirrors: 7801h~7FFFh)<br/>{{COLOR|blue|Higher byte: 9800h (mirror: 9801h~9FFFh)}} || 0000h |
|} | |} | ||
− | == Bank switching cost == | + | == Misc == |
+ | |||
+ | === Naming === | ||
+ | If ASCII-EX (ASCII extended) name poses a legal issue, we could simply called those mappers EX8 and EX16. | ||
+ | |||
+ | === Bank switching cost === | ||
The cost of switching only the lower or higher byte of the 16-bit segment register is the same that switching segment for standard ASCII mappers. | The cost of switching only the lower or higher byte of the 16-bit segment register is the same that switching segment for standard ASCII mappers. | ||
+ | |||
+ | LD (nn), A ; 14 t-states | ||
+ | ; or | ||
+ | LD HL,nn | ||
+ | LD (HL),A ; 19 t-states (11 + 8) | ||
[[Category:Proposal]] | [[Category:Proposal]] |
Revision as of 12:52, 23 November 2023
Here's a proposal for a mapper format operating with a 16-bit segment register and allowing ROMs of up to 512 MB (8 KB segment) or 1 GB (16 KB segment).
A 16-bit segment register may allow to select one of the 65536 segments for each memory bank.
The idea is to use the ASCII8/16 mapper format for the low byte of the segment register and to use the 8000h~9FFFh memory space unused by ASCII to manage the high byte. This way, we could build hardware capable of running standard ASCII8/16 ROMs in addition to the new 16-bit format.
Detection by emulators should be fairly easy (counting ROM write accesses).
Below, the parts in blue are the only additions to the standard ASCII8/16 format.
ASCII-EX16 mapper
Bank (16kB) | Switching address | Initial segment |
---|---|---|
4000h~7FFFh (mirror: C000h~FFFFh) | Lower byte: 6000h (mirrors: 6001h~67FFh) Higher byte: 8000h (mirror: 8001h~87FFh) |
0000h |
8000h~BFFFh (mirror: 0000h~3FFFh) | Lower byte: 7000h (mirrors: 7001h~77FFh) Higher byte: 9000h (mirror: 9001h~97FFh) |
0000h |
ASCII-EX8 mapper
Bank (8kB) | Switching address | Initial segment |
---|---|---|
4000h~5FFFh (mirror: C000h~DFFFh) | Lower byte: 6000h (mirrors: 6001h~67FFh) Higher byte: 8000h (mirror: 8001h~87FFh) |
0000h |
6000h~7FFFh (mirror: E000h~FFFFh) | Lower byte: 6800h (mirrors: 6801h~6FFFh) Higher byte: 8800h (mirror: 8801h~8FFFh) |
0000h |
8000h~9FFFh (mirror: 0000h~1FFFh) | Lower byte: 7000h (mirrors: 7001h~77FFh) Higher byte: 9000h (mirror: 9001h~97FFh) |
0000h |
A000h~BFFFh (mirror: 2000h~3FFFh) | Lower byte: 7800h (mirrors: 7801h~7FFFh) Higher byte: 9800h (mirror: 9801h~9FFFh) |
0000h |
Misc
Naming
If ASCII-EX (ASCII extended) name poses a legal issue, we could simply called those mappers EX8 and EX16.
Bank switching cost
The cost of switching only the lower or higher byte of the 16-bit segment register is the same that switching segment for standard ASCII mappers.
LD (nn), A ; 14 t-states ; or LD HL,nn LD (HL),A ; 19 t-states (11 + 8)