batocera-linux / batocera.linux

batocera.linux
https://batocera.org
Other
2.05k stars 528 forks source link

[v40] PC-98 (Neko Project 2 Kai) Keyboard Input Not Working On DOS - Cannot Boot Games #12936

Open loganknecht opened 2 weeks ago

loganknecht commented 2 weeks ago

Batocera build version

40 2024/08/01 01:28

Your architecture

Steam Deck

Your Graphic Processor Unit(s) (GPU)

AMD Custom GPU 0405

Issue description

Hello!

I'm having an issue with the Neko Project 2 Kai for PC98 keyboard input. I have read the documentation here and it doesn't seem to provide any clear guidance. https://wiki.batocera.org/systems:pc98

--- Quick Notes ---

I have attached the images to demonstrate my issue.

I am able to successfully launch games like Popful Mail, Rusty, etc. But I cannot use my keyboard to interact.

In addition to that, there are random games I'm testing like Tokimeki Sports Girl, where I am booted into the DOS menu. I'm more than happy to initiate the .bat file to run, but my keyboard input is not read in as being typed. Meaning I cannot enter commands like DIR /P etc.

HOWEVER, I can initiate Game Focus as others have recommended, but my keyboard input isn't being input to the DOS menu.


The situation I find myself in is this


What am I doing wrong here?

What do I need to do in order to use the DOS menu with my keyboard in order to launch these games?


Images

01 02 03 04

Detailed reproduction steps

  1. Install Batocera v40 via Balena Etcher to SD Card
  2. Insert into steam deck
  3. Hold Volume Minus (-) button while pressing power and select batocera sd card to boot to
  4. Connect to Batocera over network
  5. Transfer PC98 game to /usershare/roms/pc98
    • I used ときめきスポーツギャル3
  6. Open the game you transferred, it should boot to the DOS menu
  7. Press Scroll Lock to enable Game Focus
  8. Try typing

Details of any attempts to fix this yourself

I have tried

Nothing has been suggested on how to resolve this.

Details of any modifications you have made to Batocera.

N/A

Logs and data

No response

loganknecht commented 2 weeks ago

Hello.

A quick update on this.

I have been trying to debug this, and I am having no luck.

I cannot get the keyboard to work when a game boots to the DOS menu

I have tried deleting my configuration mapping at /usershare/system/configs/retroarch/config/remaps/common/common.rmp and that does nothing.

The current game (randomly picked) that I'm testing is ときめきスポーツギャル3. There are others as well that launch up asking me to boot with a Y/N and I cannot input.

I know the keyboard works because I can use it to navigate the emulation station menu. AND, I can toggle the Game Lock screen. I just can't seem to get the DOS menu to provide feedback.

I have once again checked my bios files and the MD5 hashes work correctly.

The only thing I can think of would be to hard-code the keyboard inputs into the common.rmp file so that the keyboard input is explicit, but I don't know how to do that.

Does anyone have suggestions regarding this?

loganknecht commented 1 week ago

Hello!

Follow-up

I have spent a significant amount of effort to get the keyboard input working for the PC-98 emulator Neko Project 2 Kai.

It just does not work.

To my knowledge, the PC-98 implementation just doesn't work if you need to work at the DOS level.

I would love to help with this if someone can guide me to the appropriate area for resolving this. Otherwise I am kindly requesting a fix for this. <3

loganknecht commented 1 week ago

I have spent some time trying to use a simple pad2key profile for the /usershare/system/configs/evmap/pc98.keys remap file.

However, it did not work. I cannot get keyboard input to work for the DOS menu or the games, despite having it mapped, and having a keyboard with the required keys.

{
  "actions_player1": [
      {
          "trigger": ["A"],
          "type": "key",
          "target": ["KEY_A"]
      },
      {
          "trigger": ["B"],
          "type": "key",
          "target": ["KEY_B"]
      },
      {
          "trigger": ["C"],
          "type": "key",
          "target": ["KEY_C"]
      },
      {
          "trigger": ["D"],
          "type": "key",
          "target": ["KEY_D"]
      },
      {
          "trigger": ["E"],
          "type": "key",
          "target": ["KEY_E"]
      },
      {
          "trigger": ["F"],
          "type": "key",
          "target": ["KEY_F"]
      },
      {
          "trigger": ["G"],
          "type": "key",
          "target": ["KEY_G"]
      },
      {
          "trigger": ["H"],
          "type": "key",
          "target": ["KEY_H"]
      },
      {
          "trigger": ["I"],
          "type": "key",
          "target": ["KEY_I"]
      },
      {
          "trigger": ["J"],
          "type": "key",
          "target": ["KEY_J"]
      },
      {
          "trigger": ["K"],
          "type": "key",
          "target": ["KEY_K"]
      },
      {
          "trigger": ["L"],
          "type": "key",
          "target": ["KEY_L"]
      },
      {
          "trigger": ["M"],
          "type": "key",
          "target": ["KEY_M"]
      },
      {
          "trigger": ["N"],
          "type": "key",
          "target": ["KEY_N"]
      },
      {
          "trigger": ["O"],
          "type": "key",
          "target": ["KEY_O"]
      },
      {
          "trigger": ["P"],
          "type": "key",
          "target": ["KEY_P"]
      },
      {
          "trigger": ["Q"],
          "type": "key",
          "target": ["KEY_Q"]
      },
      {
          "trigger": ["R"],
          "type": "key",
          "target": ["KEY_R"]
      },
      {
          "trigger": ["S"],
          "type": "key",
          "target": ["KEY_S"]
      },
      {
          "trigger": ["T"],
          "type": "key",
          "target": ["KEY_T"]
      },
      {
          "trigger": ["U"],
          "type": "key",
          "target": ["KEY_U"]
      },
      {
          "trigger": ["V"],
          "type": "key",
          "target": ["KEY_V"]
      },
      {
          "trigger": ["W"],
          "type": "key",
          "target": ["KEY_W"]
      },
      {
          "trigger": ["X"],
          "type": "key",
          "target": ["KEY_X"]
      },
      {
          "trigger": ["Y"],
          "type": "key",
          "target": ["KEY_Y"]
      },
      {
          "trigger": ["Z"],
          "type": "key",
          "target": ["KEY_Z"]
      },
      {
          "trigger": ["ESC"],
          "type": "key",
          "target": ["KEY_FN_ESC"]
      },
      {
          "trigger": ["F1"],
          "type": "key",
          "target": ["KEY_FN_F1"]
      },
      {
          "trigger": ["F2"],
          "type": "key",
          "target": ["KEY_FN_F2"]
      },
      {
          "trigger": ["F3"],
          "type": "key",
          "target": ["KEY_FN_F3"]
      },
      {
          "trigger": ["F4"],
          "type": "key",
          "target": ["KEY_FN_F4"]
      },
      {
          "trigger": ["F5"],
          "type": "key",
          "target": ["KEY_FN_F5"]
      },
      {
          "trigger": ["F6"],
          "type": "key",
          "target": ["KEY_FN_F6"]
      },
      {
          "trigger": ["F7"],
          "type": "key",
          "target": ["KEY_FN_F7"]
      },
      {
          "trigger": ["F8"],
          "type": "key",
          "target": ["KEY_FN_F8"]
      },
      {
          "trigger": ["F9"],
          "type": "key",
          "target": ["KEY_FN_F9"]
      },
      {
          "trigger": ["F10"],
          "type": "key",
          "target": ["KEY_FN_F10"]
      },
      {
          "trigger": ["F11"],
          "type": "key",
          "target": ["KEY_FN_F11"]
      },
      {
          "trigger": ["F12"],
          "type": "key",
          "target": ["KEY_FN_F12"]
      },
      {
          "trigger": ["APOSTROPHE"],
          "type": "key",
          "target": ["KEY_APOSTROPHE"]
      },
      {
          "trigger": ["BACKSLASH"],
          "type": "key",
          "target": ["KEY_BACKSLASH"]
      },
      {
          "trigger": ["BACKSPACE"],
          "type": "key",
          "target": ["KEY_BACKSPACE"]
      },
      {
          "trigger": ["CAPSLOCK"],
          "type": "key",
          "target": ["KEY_CAPSLOCK"]
      },
      {
          "trigger": ["COMMA"],
          "type": "key",
          "target": ["KEY_COMMA"]
      },
      {
          "trigger": ["DOT"],
          "type": "key",
          "target": ["KEY_DOT"]
      },
      {
          "trigger": ["ENTER"],
          "type": "key",
          "target": ["KEY_ENTER"]
      },
      {
          "trigger": ["EQUAL"],
          "type": "key",
          "target": ["KEY_EQUAL"]
      },
      {
          "trigger": ["GRAVE"],
          "type": "key",
          "target": ["KEY_GRAVE"]
      },
      {
          "trigger": ["LEFTALT"],
          "type": "key",
          "target": ["KEY_LEFTALT"]
      },
      {
          "trigger": ["LEFTBRACE"],
          "type": "key",
          "target": ["KEY_LEFTBRACE"]
      },
      {
          "trigger": ["LEFTCTRL"],
          "type": "key",
          "target": ["KEY_LEFTCTRL"]
      },
      {
          "trigger": ["LEFTSHIFT"],
          "type": "key",
          "target": ["KEY_LEFTSHIFT"]
      },
      {
          "trigger": ["MINUS"],
          "type": "key",
          "target": ["KEY_MINUS"]
      },
      {
          "trigger": ["NUMLOCK"],
          "type": "key",
          "target": ["KEY_NUMLOCK"]
      },
      {
          "trigger": ["RIGHTBRACE"],
          "type": "key",
          "target": ["KEY_RIGHTBRACE"]
      },
      {
          "trigger": ["RIGHTSHIFT"],
          "type": "key",
          "target": ["KEY_RIGHTSHIFT"]
      },
      {
          "trigger": ["SCROLLLOCK"],
          "type": "key",
          "target": ["KEY_SCROLLLOCK"]
      },
      {
          "trigger": ["SEMICOLON"],
          "type": "key",
          "target": ["KEY_SEMICOLON"]
      },
      {
          "trigger": ["SLASH"],
          "type": "key",
          "target": ["KEY_SLASH"]
      },
      {
          "trigger": ["SPACE"],
          "type": "key",
          "target": ["KEY_SPACE"]
      },
      {
          "trigger": ["TAB"],
          "type": "key",
          "target": ["KEY_TAB"]
      },

      {
          "trigger": ["KP1"],
          "type": "key",
          "target": ["KEY_KP1"]
      },
      {
          "trigger": ["KP2"],
          "type": "key",
          "target": ["KEY_KP2"]
      },
      {
          "trigger": ["KP3"],
          "type": "key",
          "target": ["KEY_KP3"]
      },
      {
          "trigger": ["KP4"],
          "type": "key",
          "target": ["KEY_KP4"]
      },
      {
          "trigger": ["KP5"],
          "type": "key",
          "target": ["KEY_KP5"]
      },
      {
          "trigger": ["KP5"],
          "type": "key",
          "target": ["KEY_KP5"]
      },
      {
          "trigger": ["KP6"],
          "type": "key",
          "target": ["KEY_KP6"]
      },
      {
          "trigger": ["KP7"],
          "type": "key",
          "target": ["KEY_KP7"]
      },
      {
          "trigger": ["KP8"],
          "type": "key",
          "target": ["KEY_KP8"]
      },
      {
          "trigger": ["KP9"],
          "type": "key",
          "target": ["KEY_KP9"]
      },
      {
          "trigger": ["KPASTERISK"],
          "type": "key",
          "target": ["KEY_KPASTERISK"]
      },
      {
          "trigger": ["KPDOT"],
          "type": "key",
          "target": ["KEY_KPDOT"]
      },
      {
          "trigger": ["KPENTER"],
          "type": "key",
          "target": ["KEY_KPENTER"]
      },
      {
          "trigger": ["KPEQUAL"],
          "type": "key",
          "target": ["KEY_KPEQUAL"]
      },
      {
          "trigger": ["KPJPCOMMA"],
          "type": "key",
          "target": ["KEY_KPJPCOMMA"]
      },
      {
          "trigger": ["KPMINUS"],
          "type": "key",
          "target": ["KEY_KPMINUS"]
      },
      {
          "trigger": ["KPPLUS"],
          "type": "key",
          "target": ["KEY_KPPLUS"]
      },
      {
          "trigger": ["KPSLASH"],
          "type": "key",
          "target": ["KEY_KPSLASH"]
      }
    ]
 }

At this point I don't know what else I can do.

I would love to be able to play an PC-98 game on Batocera, but that does not appear to be feasible on v40.

Is there someone or a maintainer that can confirm this?