TFMSX rev 2 features & problems

Home for the Terriblefire MSX clone

Moderators: terriblefire, Terriblefire Moderator

User avatar
NYYRIKKI
Posts: 24
Joined: Sat Sep 30, 2023 12:20 pm
Location: Helsinki
Contact:

Re: TFMSX rev 2 features & problems

Post by NYYRIKKI »

Ouch... I found another problem from my machine... I was wondering why I can't make my machine to boot on MSX2+ mode. On Friday I received my PLCC32 adapter, so today I took a closer look of the problem and it seems that the boot logo code was missing, that caused TFMSX to crash on boot. How ever the bigger problem is that there is no enough space to fix this due to fact that last 16kB of the dip selectable 64kB block seems not to be mapped to MSX memory at all!

I can understand if you don't want to support burning full KANJI-BASIC or any extra stuff like BASIC compiler or joystick disk drive, but it would be nice if you would have enough memory space to put even full boot logo in to the ROMs!!! For now I solved the issue by removing "M" and "S" from the MSX2+ boot logo so that you get just a big simple "X" on the memory counter / title screen. The animation is also replaced with simple fade. With this simplified logo I was able to fit all the functionality back to 48KB, but it was a very tight fit.

Here is the ROM that I wrote today to my TFMSX:
https://msx.fi/temp/NEW_TFMSX_ver1.zip

The available configs in it are:

0 MSX2 (English) with added memory counter
1 MSX2 (Finnish/Swedish)
2 MSX2+ Japanese (60Hz)
3 MSX2+ Finnish/Swedish (50Hz)

At least on MSX2+ setups I've added possibility to switch between 50Hz/60Hz during boot time by holding down "H"-key until beep.

Another thing I noticed while playing with these ROMs is that there is no RAM on bit 7 in I/O port #F4... Not a big thing at all, but likely easy to fix as well. Normally this bit is used by MSX2+ BIOS to distinguish hard boot from soft boot.
User avatar
arkadiusz.makarenko
Moderator Team
Moderator Team
Posts: 1192
Joined: Wed Jun 19, 2019 7:36 am
Location: Edinburgh

Re: TFMSX rev 2 features & problems

Post by arkadiusz.makarenko »

It looks that 5 keys are not mapped correctly, and some annoyingly in wrong position.

I will try to chaise which ones need to be remapped.

PXL_20231020_183954088.jpg
PXL_20231020_183954088.jpg (120.95 KiB) Viewed 424 times

Ps
Need to save this program to floppy
Do not trust people. They are capable of greatness.
~ Stanislaw Lem
terriblefire
Moderator Team
Moderator Team
Posts: 5291
Joined: Mon Aug 28, 2017 10:56 pm
Location: Glasgow, UK

Re: TFMSX rev 2 features & problems

Post by terriblefire »

NYYRIKKI wrote: Mon Oct 16, 2023 4:16 am Ouch... I found another problem from my machine... I was wondering why I can't make my machine to boot on MSX2+ mode. On Friday I received my PLCC32 adapter, so today I took a closer look of the problem and it seems that the boot logo code was missing, that caused TFMSX to crash on boot. How ever the bigger problem is that there is no enough space to fix this due to fact that last 16kB of the dip selectable 64kB block seems not to be mapped to MSX memory at all!

I can understand if you don't want to support burning full KANJI-BASIC or any extra stuff like BASIC compiler or joystick disk drive, but it would be nice if you would have enough memory space to put even full boot logo in to the ROMs!!! For now I solved the issue by removing "M" and "S" from the MSX2+ boot logo so that you get just a big simple "X" on the memory counter / title screen. The animation is also replaced with simple fade. With this simplified logo I was able to fit all the functionality back to 48KB, but it was a very tight fit.

Here is the ROM that I wrote today to my TFMSX:
https://msx.fi/temp/NEW_TFMSX_ver1.zip

The available configs in it are:

0 MSX2 (English) with added memory counter
1 MSX2 (Finnish/Swedish)
2 MSX2+ Japanese (60Hz)
3 MSX2+ Finnish/Swedish (50Hz)

At least on MSX2+ setups I've added possibility to switch between 50Hz/60Hz during boot time by holding down "H"-key until beep.

Another thing I noticed while playing with these ROMs is that there is no RAM on bit 7 in I/O port #F4... Not a big thing at all, but likely easy to fix as well. Normally this bit is used by MSX2+ BIOS to distinguish hard boot from soft boot.
From memory i map the full 64 as a 32K rom, 16k subrom and the final 16k is mapped as a DOS rom. This was so MSX2 could have a DOS rom. I guess DOS comes on the floppy controllers so i could put this elsewhere?

EDIT: Ops looks like i disabled mapping the dos rom.
———
"It is not necessarily a supply voltage at no load, but the amount of current it can provide when touched that
indicates how much hurting you shall receive."
User avatar
arkadiusz.makarenko
Moderator Team
Moderator Team
Posts: 1192
Joined: Wed Jun 19, 2019 7:36 am
Location: Edinburgh

Re: TFMSX rev 2 features & problems

Post by arkadiusz.makarenko »

Keyboard codes for reference

Code: Select all

#define KEY_NONE                               0x00
#define KEY_ERRORROLLOVER                      0x01
#define KEY_POSTFAIL                           0x02
#define KEY_ERRORUNDEFINED                     0x03
#define KEY_A                                  0x04
#define KEY_B                                  0x05
#define KEY_C                                  0x06
#define KEY_D                                  0x07
#define KEY_E                                  0x08
#define KEY_F                                  0x09
#define KEY_G                                  0x0A
#define KEY_H                                  0x0B
#define KEY_I                                  0x0C
#define KEY_J                                  0x0D
#define KEY_K                                  0x0E
#define KEY_L                                  0x0F
#define KEY_M                                  0x10
#define KEY_N                                  0x11
#define KEY_O                                  0x12
#define KEY_P                                  0x13
#define KEY_Q                                  0x14
#define KEY_R                                  0x15
#define KEY_S                                  0x16
#define KEY_T                                  0x17
#define KEY_U                                  0x18
#define KEY_V                                  0x19
#define KEY_W                                  0x1A
#define KEY_X                                  0x1B
#define KEY_Y                                  0x1C
#define KEY_Z                                  0x1D
#define KEY_1_EXCLAMATION_MARK                 0x1E
#define KEY_2_AT                               0x1F
#define KEY_3_NUMBER_SIGN                      0x20
#define KEY_4_DOLLAR                           0x21
#define KEY_5_PERCENT                          0x22
#define KEY_6_CARET                            0x23
#define KEY_7_AMPERSAND                        0x24
#define KEY_8_ASTERISK                         0x25
#define KEY_9_OPARENTHESIS                     0x26
#define KEY_0_CPARENTHESIS                     0x27
#define KEY_ENTER                              0x28
#define KEY_ESCAPE                             0x29
#define KEY_BACKSPACE                          0x2A
#define KEY_TAB                                0x2B
#define KEY_SPACEBAR                           0x2C
#define KEY_MINUS_UNDERSCORE                   0x2D
#define KEY_EQUAL_PLUS                         0x2E
#define KEY_OBRACKET_AND_OBRACE                0x2F
#define KEY_CBRACKET_AND_CBRACE                0x30
#define KEY_BACKSLASH_VERTICAL_BAR             0x31
#define KEY_NONUS_NUMBER_SIGN_TILDE            0x32
#define KEY_SEMICOLON_COLON                    0x33
#define KEY_SINGLE_AND_DOUBLE_QUOTE            0x34
#define KEY_GRAVE ACCENT AND TILDE             0x35
#define KEY_COMMA_AND_LESS                     0x36
#define KEY_DOT_GREATER                        0x37
#define KEY_SLASH_QUESTION                     0x38
#define KEY_CAPS LOCK                          0x39
#define KEY_F1                                 0x3A
#define KEY_F2                                 0x3B
#define KEY_F3                                 0x3C
#define KEY_F4                                 0x3D
#define KEY_F5                                 0x3E
#define KEY_F6                                 0x3F
#define KEY_F7                                 0x40
#define KEY_F8                                 0x41
#define KEY_F9                                 0x42
#define KEY_F10                                0x43
#define KEY_F11                                0x44
#define KEY_F12                                0x45
#define KEY_PRINTSCREEN                        0x46
#define KEY_SCROLL LOCK                        0x47
#define KEY_PAUSE                              0x48
#define KEY_INSERT                             0x49
#define KEY_HOME                               0x4A
#define KEY_PAGEUP                             0x4B
#define KEY_DELETE                             0x4C
#define KEY_END1                               0x4D
#define KEY_PAGEDOWN                           0x4E
#define KEY_RIGHTARROW                         0x4F
#define KEY_LEFTARROW                          0x50
#define KEY_DOWNARROW                          0x51
#define KEY_UPARROW                            0x52
#define KEY_KEYPAD_NUM_LOCK_AND_CLEAR          0x53
#define KEY_KEYPAD_SLASH                       0x54
#define KEY_KEYPAD_ASTERIKS                    0x55
#define KEY_KEYPAD_MINUS                       0x56
#define KEY_KEYPAD_PLUS                        0x57
#define KEY_KEYPAD_ENTER                       0x58
#define KEY_KEYPAD_1_END                       0x59
#define KEY_KEYPAD_2_DOWN_ARROW                0x5A
#define KEY_KEYPAD_3_PAGEDN                    0x5B
#define KEY_KEYPAD_4_LEFT_ARROW                0x5C
#define KEY_KEYPAD_5                           0x5D
#define KEY_KEYPAD_6_RIGHT_ARROW               0x5E
#define KEY_KEYPAD_7_HOME                      0x5F
#define KEY_KEYPAD_8_UP_ARROW                  0x60
#define KEY_KEYPAD_9_PAGEUP                    0x61
#define KEY_KEYPAD_0_INSERT                    0x62
#define KEY_KEYPAD_DECIMAL_SEPARATOR_DELETE    0x63
#define KEY_NONUS_BACK_SLASH_VERTICAL_BAR      0x64
#define KEY_APPLICATION                        0x65
#define KEY_POWER                              0x66
#define KEY_KEYPAD_EQUAL                       0x67
#define KEY_F13                                0x68
#define KEY_F14                                0x69
#define KEY_F15                                0x6A
#define KEY_F16                                0x6B
#define KEY_F17                                0x6C
#define KEY_F18                                0x6D
#define KEY_F19                                0x6E
#define KEY_F20                                0x6F
#define KEY_F21                                0x70
#define KEY_F22                                0x71
#define KEY_F23                                0x72
#define KEY_F24                                0x73
#define KEY_EXECUTE                            0x74
#define KEY_HELP                               0x75
#define KEY_MENU                               0x76
#define KEY_SELECT                             0x77
#define KEY_STOP                               0x78
#define KEY_AGAIN                              0x79
#define KEY_UNDO                               0x7A
#define KEY_CUT                                0x7B
#define KEY_COPY                               0x7C
#define KEY_PASTE                              0x7D
#define KEY_FIND                               0x7E
#define KEY_MUTE                               0x7F
#define KEY_VOLUME_UP                          0x80
#define KEY_VOLUME_DOWN                        0x81
#define KEY_LOCKING_CAPS_LOCK                  0x82
#define KEY_LOCKING_NUM_LOCK                   0x83
#define KEY_LOCKING_SCROLL_LOCK                0x84
#define KEY_KEYPAD_COMMA                       0x85
#define KEY_KEYPAD_EQUAL_SIGN                  0x86
#define KEY_INTERNATIONAL1                     0x87
#define KEY_INTERNATIONAL2                     0x88
#define KEY_INTERNATIONAL3                     0x89
#define KEY_INTERNATIONAL4                     0x8A
#define KEY_INTERNATIONAL5                     0x8B
#define KEY_INTERNATIONAL6                     0x8C
#define KEY_INTERNATIONAL7                     0x8D
#define KEY_INTERNATIONAL8                     0x8E
#define KEY_INTERNATIONAL9                     0x8F
#define KEY_LANG1                              0x90
#define KEY_LANG2                              0x91
#define KEY_LANG3                              0x92
#define KEY_LANG4                              0x93
#define KEY_LANG5                              0x94
#define KEY_LANG6                              0x95
#define KEY_LANG7                              0x96
#define KEY_LANG8                              0x97
#define KEY_LANG9                              0x98
#define KEY_ALTERNATE_ERASE                    0x99
#define KEY_SYSREQ                             0x9A
#define KEY_CANCEL                             0x9B
#define KEY_CLEAR                              0x9C
#define KEY_PRIOR                              0x9D
#define KEY_RETURN                             0x9E
#define KEY_SEPARATOR                          0x9F
#define KEY_OUT                                0xA0
#define KEY_OPER                               0xA1
#define KEY_CLEAR_AGAIN                        0xA2
#define KEY_CRSEL                              0xA3
#define KEY_EXSEL                              0xA4
#define KEY_KEYPAD_00                          0xB0
#define KEY_KEYPAD_000                         0xB1
#define KEY_THOUSANDS_SEPARATOR                0xB2
#define KEY_DECIMAL_SEPARATOR                  0xB3
#define KEY_CURRENCY_UNIT                      0xB4
#define KEY_CURRENCY_SUB_UNIT                  0xB5
#define KEY_KEYPAD_OPARENTHESIS                0xB6
#define KEY_KEYPAD_CPARENTHESIS                0xB7
#define KEY_KEYPAD_OBRACE                      0xB8
#define KEY_KEYPAD_CBRACE                      0xB9
#define KEY_KEYPAD_TAB                         0xBA
#define KEY_KEYPAD_BACKSPACE                   0xBB
#define KEY_KEYPAD_A                           0xBC
#define KEY_KEYPAD_B                           0xBD
#define KEY_KEYPAD_C                           0xBE
#define KEY_KEYPAD_D                           0xBF
#define KEY_KEYPAD_E                           0xC0
#define KEY_KEYPAD_F                           0xC1
#define KEY_KEYPAD_XOR                         0xC2
#define KEY_KEYPAD_CARET                       0xC3
#define KEY_KEYPAD_PERCENT                     0xC4
#define KEY_KEYPAD_LESS                        0xC5
#define KEY_KEYPAD_GREATER                     0xC6
#define KEY_KEYPAD_AMPERSAND                   0xC7
#define KEY_KEYPAD_LOGICAL_AND                 0xC8
#define KEY_KEYPAD_VERTICAL_BAR                0xC9
#define KEY_KEYPAD_LOGIACL_OR                  0xCA
#define KEY_KEYPAD_COLON                       0xCB
#define KEY_KEYPAD_NUMBER_SIGN                 0xCC
#define KEY_KEYPAD_SPACE                       0xCD
#define KEY_KEYPAD_AT                          0xCE
#define KEY_KEYPAD_EXCLAMATION_MARK            0xCF
#define KEY_KEYPAD_MEMORY_STORE                0xD0
#define KEY_KEYPAD_MEMORY_RECALL               0xD1
#define KEY_KEYPAD_MEMORY_CLEAR                0xD2
#define KEY_KEYPAD_MEMORY_ADD                  0xD3
#define KEY_KEYPAD_MEMORY_SUBTRACT             0xD4
#define KEY_KEYPAD_MEMORY_MULTIPLY             0xD5
#define KEY_KEYPAD_MEMORY_DIVIDE               0xD6
#define KEY_KEYPAD_PLUSMINUS                   0xD7
#define KEY_KEYPAD_CLEAR                       0xD8
#define KEY_KEYPAD_CLEAR_ENTRY                 0xD9
#define KEY_KEYPAD_BINARY                      0xDA
#define KEY_KEYPAD_OCTAL                       0xDB
#define KEY_KEYPAD_DECIMAL                     0xDC
#define KEY_KEYPAD_HEXADECIMAL                 0xDD
#define KEY_LEFTCONTROL                        0xE0
#define KEY_LEFTSHIFT                          0xE1
#define KEY_LEFTALT                            0xE2
#define KEY_LEFT_GUI                           0xE3
#define KEY_RIGHTCONTROL                       0xE4
#define KEY_RIGHTSHIFT                         0xE5
#define KEY_RIGHTALT                           0xE6
#define KEY_RIGHT_GUI                          0xE7




Do not trust people. They are capable of greatness.
~ Stanislaw Lem
User avatar
arkadiusz.makarenko
Moderator Team
Moderator Team
Posts: 1192
Joined: Wed Jun 19, 2019 7:36 am
Location: Edinburgh

Re: TFMSX rev 2 features & problems

Post by arkadiusz.makarenko »

On Ubuntu I can read codes using command xev , it displays all HID captures events.
Do not trust people. They are capable of greatness.
~ Stanislaw Lem
User avatar
arkadiusz.makarenko
Moderator Team
Moderator Team
Posts: 1192
Joined: Wed Jun 19, 2019 7:36 am
Location: Edinburgh

Re: TFMSX rev 2 features & problems

Post by arkadiusz.makarenko »

New keyboard firmware : https://github.com/arkadiuszmakarenko/T ... v2F730.bin

1. Download and start STM32CubeProgrammer
2. Connect USB A - USB A cable to lower USB port on TFMSX, and remove the jumper next to usb port. Power up TFMSX.

PXL_20231021_181258614.jpg
PXL_20231021_181258614.jpg (182.79 KiB) Viewed 345 times

3. Change dropdown to USB, and click connect (additional drivers might need to be installed? )

PXL_20231021_181339609.jpg
PXL_20231021_181339609.jpg (305.07 KiB) Viewed 345 times

4.Click + and open file, select new firmware, and hit download.

PXL_20231021_181426948.jpg
PXL_20231021_181426948.jpg (294.67 KiB) Viewed 345 times

5. Power down TFMSX, set jumper again, as it was.

6. Power up TFMSX and enjoy.

Known issues
Key Select is not present on most keyboards, so it has been replaced with F6. F8 is combination of ctlr+shift+graph+code ,but I don't know how to test it.

New firmware passes above test.

Arek
Do not trust people. They are capable of greatness.
~ Stanislaw Lem
User avatar
arkadiusz.makarenko
Moderator Team
Moderator Team
Posts: 1192
Joined: Wed Jun 19, 2019 7:36 am
Location: Edinburgh

Re: TFMSX rev 2 features & problems

Post by arkadiusz.makarenko »

@NYYRIKKI
Could you make a call if I should implement usb mouse?
Do not trust people. They are capable of greatness.
~ Stanislaw Lem
User avatar
NYYRIKKI
Posts: 24
Joined: Sat Sep 30, 2023 12:20 pm
Location: Helsinki
Contact:

Re: TFMSX rev 2 features & problems

Post by NYYRIKKI »

Hi, @arkadiusz.makarenko

I now did manage to do the cable and tested you new keyboard driver... Close, but no cigar... You obviously ignored my last configuration file update and therefore ie. Numpad issue was not resolved and so there is still two keys on one physical key. Now also Graph & code jumped to wrong sides of space etc. I would also try to avoid using Windows-keys as they may not exist in all keyboards, but even if you use them, it makes more sense to use the right one instead of left one. Good thing is that as you managed to put "CODE" in to "Alt Gr" as this kind of proved that the scan codes in our USB-keyboards are the same, so this should not be reason for our problems.

I now fixed names on my version of config file based on your constants list. Can you please at least read it trough and compare to your implementation side by side. This is not "only right way to do it", but there are reasons why I've selected the extra keys that I have. (SELECT is usually close to STOP and so on) If you don't agree with this, we can talk about the remaining issues. Please include also your version when you change it, so that we can talk about the issues with same names.

Code: Select all

// Array of 3 elements USB_KEYCODE, MSX_ROW, MSX_BIT
static const uint8_t msxkeymap[MSX_KEYS_SIZE][3] =
{
		//7 &		6 ^		5 %		4 $		3 #		2 @		1 !		0 )
		{KEY_7_AMPERSAND,		KB_ROW_0,		KB_BIT_7},
		{KEY_6_CARET,			KB_ROW_0,		KB_BIT_6},
		{KEY_5_PERCENT,			KB_ROW_0,		KB_BIT_5},
		{KEY_4_DOLLAR,			KB_ROW_0,		KB_BIT_4},
		{KEY_3_NUMBER_SIGN,		KB_ROW_0,		KB_BIT_3},
		{KEY_2_AT,			KB_ROW_0,		KB_BIT_2},
		{KEY_1_EXCLAMATION_MARK,	KB_ROW_0,		KB_BIT_1},
		{KEY_0_CPARENTHESIS,		KB_ROW_0,		KB_BIT_0},

		//; :		] }		[ {		\ ¦		= +		- _		9 (		8 *
		{KEY_SEMICOLON_COLON,				KB_ROW_1,		KB_BIT_7},
		{KEY_CBRACKET_AND_CBRACE,			KB_ROW_1,		KB_BIT_6},
		{KEY_OBRACKET_AND_OBRACE ,			KB_ROW_1,		KB_BIT_5},
		{KEY_BACKSLASH_VERTICAL_BAR,			KB_ROW_1,		KB_BIT_4},
		{KEY_EQUAL_PLUS,				KB_ROW_1,		KB_BIT_3},
		{KEY_MINUS_UNDERSCORE,				KB_ROW_1,		KB_BIT_2},
		{KEY_9_OPARENTHESIS,				KB_ROW_1,		KB_BIT_1},
		{KEY_8_ASTERISK,				KB_ROW_1,		KB_BIT_0},

		//B		A		_	     / ?		. >		, <		` ~		' "
		{KEY_B,						KB_ROW_2,		KB_BIT_7},
		{KEY_A,						KB_ROW_2,		KB_BIT_6},
		{KEY_RIGHTCONTROL,				KB_ROW_2,		KB_BIT_5},
		{KEY_SLASH_QUESTION,				KB_ROW_2,		KB_BIT_4},
		{KEY_DOT_GREATER,				KB_ROW_2,		KB_BIT_3},
		{KEY_COMMA_AND_LESS,			        KB_ROW_2,		KB_BIT_2},
                {KEY_GRAVE_ACCENT_AND_TILDE,		        KB_ROW_2,		KB_BIT_1}, 
		{KEY_SINGLE_AND_DOUBLE_QUOTE,		        KB_ROW_2,		KB_BIT_0},


		//J		I		H		G		F		E		D		C
		{KEY_J,									KB_ROW_3,		KB_BIT_7},
		{KEY_I,									KB_ROW_3,		KB_BIT_6},
		{KEY_H,									KB_ROW_3,		KB_BIT_5},
		{KEY_G,									KB_ROW_3,		KB_BIT_4},
		{KEY_F,									KB_ROW_3,		KB_BIT_3},
		{KEY_E,									KB_ROW_3,		KB_BIT_2},
		{KEY_D,									KB_ROW_3,		KB_BIT_1},
		{KEY_C,									KB_ROW_3,		KB_BIT_0},
		//R		Q		P		O		N		M		L		K
		{KEY_R,									KB_ROW_4,		KB_BIT_7},
		{KEY_Q,									KB_ROW_4,		KB_BIT_6},
		{KEY_P,									KB_ROW_4,		KB_BIT_5},
		{KEY_O,									KB_ROW_4,		KB_BIT_4},
		{KEY_N,									KB_ROW_4,		KB_BIT_3},
		{KEY_M,									KB_ROW_4,		KB_BIT_2},
		{KEY_L,									KB_ROW_4,		KB_BIT_1},
		{KEY_K,									KB_ROW_4,		KB_BIT_0},
		//Z		Y		X		W		V		U		T		S
		{KEY_Z,									KB_ROW_5,		KB_BIT_7},
		{KEY_Y,									KB_ROW_5,		KB_BIT_6},
		{KEY_X,									KB_ROW_5,		KB_BIT_5},
		{KEY_W,									KB_ROW_5,		KB_BIT_4},
		{KEY_V,									KB_ROW_5,		KB_BIT_3},
		{KEY_U,									KB_ROW_5,		KB_BIT_2},
		{KEY_T,									KB_ROW_5,		KB_BIT_1},
		{KEY_S,									KB_ROW_5,		KB_BIT_0},

		//F3		F2		F1		CODE	CAPS	GRAPH	CTRL	SHIFT
		{KEY_F3,							KB_ROW_6,		KB_BIT_7},
		{KEY_F2,							KB_ROW_6,		KB_BIT_6},
		{KEY_F1,							KB_ROW_6,		KB_BIT_5},
		{KEY_LEFTALT,							KB_ROW_6,		KB_BIT_4},
		{0x39, 								KB_ROW_6,		KB_BIT_3},// KEY_CAPS LOCK,
		{KEY_RIGHTALT,							KB_ROW_6,		KB_BIT_2},
		{KEY_LEFTCONTROL,						KB_ROW_6,		KB_BIT_1},
		{KEY_LEFTSHIFT,							KB_ROW_6,		KB_BIT_0},
		{KEY_RIGHTSHIFT,						KB_ROW_6,		KB_BIT_0},
		{KEY_F10,							KB_ROW_6,		0xE8},

		//RET		SELECT	BS		STOP	TAB		ESC		F5		F4
		{KEY_KEYPAD_ENTER,						KB_ROW_7,		KB_BIT_7},
		{KEY_ENTER,							KB_ROW_7,		KB_BIT_7},
		{0x47,								KB_ROW_7,		KB_BIT_6}, // KEY_SCROLL LOCK
		{KEY_BACKSPACE,						        KB_ROW_7,		KB_BIT_5},
		{KEY_PAUSE,							KB_ROW_7,		KB_BIT_4},
		{KEY_TAB,							KB_ROW_7,		KB_BIT_3},
		{KEY_ESCAPE,							KB_ROW_7,		KB_BIT_2},
		{KEY_F5,							KB_ROW_7,		KB_BIT_1},
		{KEY_F4,							KB_ROW_7,		KB_BIT_0},

		//?		?		?		?		DEL		INS		HOME	SPACE
		{KEY_RIGHTARROW,						KB_ROW_8,		KB_BIT_7},
		{KEY_DOWNARROW,						        KB_ROW_8,		KB_BIT_6},
		{KEY_UPARROW,							KB_ROW_8,		KB_BIT_5},
		{KEY_LEFTARROW,						        KB_ROW_8,		KB_BIT_4},
		{KEY_DELETE,							KB_ROW_8,		KB_BIT_3},
		{KEY_INSERT,							KB_ROW_8,		KB_BIT_2},
		{KEY_HOME,							KB_ROW_8,		KB_BIT_1},
		{KEY_SPACEBAR,							KB_ROW_8,		KB_BIT_0},

		//NUM4	NUM3	NUM2	NUM1	NUM0	NUM/	NUM+	NUM*
		{KEY_KEYPAD_4_LEFT_ARROW,			        KB_ROW_9,		KB_BIT_7},
		{KEY_KEYPAD_3_PAGEDN,					KB_ROW_9,		KB_BIT_6},
		{KEY_KEYPAD_2_DOWN_ARROW,			        KB_ROW_9,		KB_BIT_5},
		{KEY_KEYPAD_1_END,					KB_ROW_9,		KB_BIT_4},
		{KEY_KEYPAD_0_INSERT,					KB_ROW_9,		KB_BIT_3},
		{KEY_KEYPAD_SLASH,					KB_ROW_9,		KB_BIT_2},
		{KEY_KEYPAD_PLUS,					KB_ROW_9,		KB_BIT_1},
		{KEY_KEYPAD_ASTERIKS,					KB_ROW_9,		KB_BIT_0},

		//NUM.	NUM,	NUM-	NUM9	NUM8	NUM7	NUM6	NUM5
		{KEY_KEYPAD_DECIMAL_SEPARATOR_DELETE,                   KB_ROW_10,		KB_BIT_7},
		{KEY_KEYPAD_NUM_LOCK_AND_CLEAR,	                        KB_ROW_10,	        KB_BIT_6}, 
		{KEY_KEYPAD_MINUS,					KB_ROW_10,		KB_BIT_5},
		{KEY_KEYPAD_9_PAGEUP,					KB_ROW_10,		KB_BIT_4},
		{KEY_KEYPAD_8_UP_ARROW,				        KB_ROW_10,		KB_BIT_3},
		{KEY_KEYPAD_7_HOME,					KB_ROW_10,		KB_BIT_2},
		{KEY_KEYPAD_6_RIGHT_ARROW,			        KB_ROW_10,		KB_BIT_1},
		{KEY_KEYPAD_5,						KB_ROW_10,		KB_BIT_0},

                // X   X   X   X   Cancel   X   Execute   X
		{KEY_F12,						KB_ROW_11,		KB_BIT_3},
       		{KEY_F11,			                        KB_ROW_11,		KB_BIT_1},

};
Do you think it would be also possible to support MSX leds on the USB-keyboard? In MSX CapsLock-led is controlled by PPI port C (I/O $AA), bit 6 and Kana-lock led (could be mapped ie. to ScrollLock led) is controlled by PSG register 15, bit 7. These are both inverted, so 0=Led on, 1=Led off
arkadiusz.makarenko wrote: Sun Oct 22, 2023 6:07 pm @NYYRIKKI
Could you make a call if I should implement usb mouse?
As I said this is close to situation of early PCs. Many MSX2 games (like ie. Breaker Breaker) benefit if you have mouse, but you can still play without (like ie. Sierra adventures on PC)... and you can still attach a real MSX mouse if you wish... After supporting USB keyboard and joypads this sounds to me like next logical step to take, but mostly it is about how you value your time.

Ps. Your implementation of ctlr+shift+graph+code worked just fine.
User avatar
NYYRIKKI
Posts: 24
Joined: Sat Sep 30, 2023 12:20 pm
Location: Helsinki
Contact:

Re: TFMSX rev 2 features & problems

Post by NYYRIKKI »

terriblefire wrote: Fri Oct 20, 2023 8:00 pm From memory i map the full 64 as a 32K rom, 16k subrom and the final 16k is mapped as a DOS rom. This was so MSX2 could have a DOS rom. I guess DOS comes on the floppy controllers so i could put this elsewhere?

EDIT: Ops looks like i disabled mapping the dos rom.
Yes you did and I think it would be important to get this valuable 16kB back... I saw that you put DOS-ROM in that space, but that is quite useless idea. The ROM contains the hardware routines to interact with disk, but since you don't have disk drive, having the ROM does not help, mostly just eats up drive letters & memory in case someone adds a real drive(s). Even if you plan to implement some SD-card interface or similar later, this is not the way to go... You rather like to implement Nextor as then you don't need to worry about partitioning tools, file systems, disk emulation software or such as that you get as a free bonus. You only need to provide a way to read & write 512-byte blocks... The downside is though that it will not fit to 16kB, so some new way of mapping ROM would be needed as well. Anyway, this is already getting quite a far from the topic.

On my ROM set I used the missing 16kB for BASIC compiler as it makes more sense (in case you enable this at some point). How ever the MSX2+ boot screen is what I would use it in real life, if it would be working.
User avatar
arkadiusz.makarenko
Moderator Team
Moderator Team
Posts: 1192
Joined: Wed Jun 19, 2019 7:36 am
Location: Edinburgh

Re: TFMSX rev 2 features & problems

Post by arkadiusz.makarenko »

@NYYRIKKI

This is my test keyboard. It is cut version, and my goal is to squeeze in all keys on it, as it is what I am planning to use with my TFMSX.

PXL_20231030_101341933~2.jpg
PXL_20231030_101341933~2.jpg (215.42 KiB) Viewed 157 times

As you can see it doesn't have LEDs,so I completely forgot about them.

Ps.
I will have a look at numpad issue and your mapping suggestions later today.
Do not trust people. They are capable of greatness.
~ Stanislaw Lem
Post Reply

Return to “TFMSX”