Ok, I know that we all love MSX, but was it really best that they could do? Was it a flawless design? I think we can all agree that "No" is correct answer although MSX is pretty good standard.
I decided to open this topic so that we can document here together the clear design faults and bugs that we know to exist. I hope that you don't make this general wish list in ie. "I hope they would have added possibility to override video output with cartridge" style, but try to limit this close to existing design and changes that would have clearly made the design better to all of us without big extra HW costs. I know the exact rules are not easy to write, so please use your own consideration and try to explain your point of views.
To get this started I wrote few example points to both categories and I bet I'll continue pretty soon:
Known bugs:
-----------
- Paint algorithm does not always work correctly on MSX1.
- Double meaning of #FCC1: It represents if Slot 0 is expanded and where the BIOS is. (This was tried to fix in MSX2+ standard but obviously it was way too late.)
- They forgot to include calls to HBGFD and HENFD hooks when implementing DOS2 ROM to MSX tR.
Design flaws:
-------------
- Slot selecting: They implemented main slots in a reasonable way, but for some unknown reason they made Subslot selecting with memory mapped I/O. This is still today the biggest single issue that causes software incompatibility and makes changing slots a real pain.
- PSG register 14: It seems they added joystick port pin 8 write support later, but did not fix the order of bits making it unnecessarily hard to write general I/O routines that support both joystick ports with same routine.
- BASIC PRINT USING statement... Who thought that it is good idea to make the BASIC incompatible between different region versions?
- Disk BASIC. This is a real mess both internally and visibly. The commands don't use same logic than rest of BASIC (See ie. DSKO$) and legacy support of earlier MS-BASIC versions makes using of disk in own programs both ugly mess and very slow. Internally it seems that they did not quite remember to add everything needed when making BASIC, so Disk BASIC uses tricks like adding values to stack pointer and then jumping to seemingly random addresses inside BASIC ROM.
- Lack of read back support in devices like VDP, OPLL and memory mapper. Implementing read back would have made things really much easier.