RetroPie forum home
    • Recent
    • Tags
    • Popular
    • Home
    • Docs
    • Register
    • Login

    Would you like to play Nokia (J2ME) games on Retropie?

    Scheduled Pinned Locked Moved Ideas and Development
    sdlemulatorawesome
    304 Posts 22 Posters 165.6k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • recompileR
      recompile @Allanbuzzy
      last edited by

      @allanbuzzy said in Would you like to play Nokia (J2ME) games on Retropie?:

      So N-Gage is supported? Awesome, that's good.

      Let me try that again. The N-Gage could run j2me and Symbian games. This project will only support j2me games. Symbian games will not work. Nokia had their own special api for games, which is fully supported, so j2me games written for the N-Gage will work. Again, Symbian games written for the N-Gage will not work.

      1 Reply Last reply Reply Quote 0
      • HexH
        Hex
        last edited by

        @recompile I have updated the C source to add support for interpolation/filter type .

        J doenst need to pass default (nearest) if not user specified. I can handle that in C

        Sent from 20,000 leagues under the sea.

        Powersaver Emulation station : https://github.com/hex007/EmulationStation
        ES dev script : https://github.com/hex007/es-dev/blob/master/es-tests.sh

        recompileR 1 Reply Last reply Reply Quote 0
        • recompileR
          recompile @Hex
          last edited by

          @hex said in Would you like to play Nokia (J2ME) games on Retropie?:

          J doenst need to pass default (nearest) if not user specified. I can handle that in C

          I know, but it's simpler for me to always pass something than to only pass it sometimes. I figured it would be simpler for you, as you can always expect 3 arguments. I like simple.

          1 Reply Last reply Reply Quote 0
          • HexH
            Hex
            last edited by Hex

            @recompile Will you be available for an hour or so for Gamepad testing?

            Do I need to support multiple gamepads or a single gamepad would suffice.

            Sent from 20,000 leagues under the sea.

            Powersaver Emulation station : https://github.com/hex007/EmulationStation
            ES dev script : https://github.com/hex007/es-dev/blob/master/es-tests.sh

            recompileR 1 Reply Last reply Reply Quote 0
            • recompileR
              recompile @Hex
              last edited by

              @hex One should be enough. I don't know of any two-player simultaneous games for old cellphones.

              I'll be around for testing.

              1 Reply Last reply Reply Quote 0
              • HexH
                Hex
                last edited by

                @recompile I have added gamepad support. Can you test it.

                Analog Joystick data is ignored.

                Sent from 20,000 leagues under the sea.

                Powersaver Emulation station : https://github.com/hex007/EmulationStation
                ES dev script : https://github.com/hex007/es-dev/blob/master/es-tests.sh

                recompileR 1 Reply Last reply Reply Quote 0
                • A
                  Allanbuzzy
                  last edited by

                  I would've liked the idea of N-Gage emulation, but oh well I hope someone writes a Symbian emulator.

                  "What do you play games on?"
                  "A LEGO brick."
                  "LEGO What?

                  1 Reply Last reply Reply Quote 0
                  • recompileR
                    recompile @Hex
                    last edited by

                    @hex I'm not getting anything from either gamepad.

                    1 Reply Last reply Reply Quote 0
                    • HexH
                      Hex
                      last edited by

                      @recompile I got a gamepad from a friend for testing. I think I am missing something in initialization. I will let you know once I start getting it working.

                      Sent from 20,000 leagues under the sea.

                      Powersaver Emulation station : https://github.com/hex007/EmulationStation
                      ES dev script : https://github.com/hex007/es-dev/blob/master/es-tests.sh

                      1 Reply Last reply Reply Quote 0
                      • HexH
                        Hex
                        last edited by Hex

                        @recompile I did a bit of digging and got all the keys to be recognized.

                        The Buttons LR StSl ABXY all generate button events which I can detect and send like keyboard events. We will need to differentiate them from keyboard values.

                        The Dpad on the other hand generates 2 data points. One tells if it is horizontal or vertical and another tells me if its Left/Top or Right/Bottom or Center (Released).

                        How do you want me to send over this data?

                        EDIT : I have updated C source so you can test which events are generated (O/p in string for testing).
                        run the sdl_interface directly sdl_interface 1 1 nearest
                        change focus to C while terminal set to keep on top to observe events. To exit Ctrl+C in terminal.

                        Sent from 20,000 leagues under the sea.

                        Powersaver Emulation station : https://github.com/hex007/EmulationStation
                        ES dev script : https://github.com/hex007/es-dev/blob/master/es-tests.sh

                        recompileR 1 Reply Last reply Reply Quote 0
                        • recompileR
                          recompile @Hex
                          last edited by

                          @hex We can use the event type flag to differentiate keyboard and gamepad events. we can, for example, use 2 and 3 instead of 0 and 1 for released/pressed.

                          We can also abstract the dpad weirdness, if you want, by tracking which direction is pressed, and sending a corresponding released event when the state changes. Alternately, you can send a different event type, say 4, packed with the current dpad state and I can track it on the J side and generate the proper key events.

                          On the C side, do you already know which events correspond to LR StSl ABXY or can you get them from retroarch or libretro?

                          1 Reply Last reply Reply Quote 0
                          • HexH
                            Hex
                            last edited by Hex

                            I have just one controller but this is my mapping, you can compare it with you event o/p

                            //A
                            1
                            1
                            //B
                            2
                            2
                            //X
                            0
                            0
                            //Y
                            3
                            3
                            //L
                            4
                            4
                            //R
                            5
                            5
                            // Start
                            9
                            9
                            //Select
                            8
                            8
                            //Up
                            X : -32768
                            X : 0
                            //Down
                            X : 32767
                            X : 0
                            // Left
                             : -32768
                             : 0
                            //Right
                             : 32767
                             : 0
                            

                            X replaces some wierd character that doesnt display here

                            Sent from 20,000 leagues under the sea.

                            Powersaver Emulation station : https://github.com/hex007/EmulationStation
                            ES dev script : https://github.com/hex007/es-dev/blob/master/es-tests.sh

                            recompileR 1 Reply Last reply Reply Quote 0
                            • recompileR
                              recompile @Hex
                              last edited by recompile

                              @hex Mine is quite different A:1 B:0 X: 3 Y:2 L:4 R:5 St:6 Sl:7

                              The dpad doesn't make any sense. Pressing Up, Down, Left, Right generates:

                              : -1
                              : -32768
                              : -1
                              : -32768
                              : -32768
                              : -32768
                              : -32768
                              : -32768
                              : -32768
                              : -32768
                              : -32768
                              : -32768

                              While that output is handy, this version is very broken.

                              1 Reply Last reply Reply Quote 0
                              • HexH
                                Hex
                                last edited by

                                @recompile I have got unique keys for all dpad keys now. I shall update C and let you know ASAP.

                                Sent from 20,000 leagues under the sea.

                                Powersaver Emulation station : https://github.com/hex007/EmulationStation
                                ES dev script : https://github.com/hex007/es-dev/blob/master/es-tests.sh

                                1 Reply Last reply Reply Quote 0
                                • HexH
                                  Hex
                                  last edited by

                                  @recompile Can you try it now? I have updated the C source

                                  Sent from 20,000 leagues under the sea.

                                  Powersaver Emulation station : https://github.com/hex007/EmulationStation
                                  ES dev script : https://github.com/hex007/es-dev/blob/master/es-tests.sh

                                  recompileR 1 Reply Last reply Reply Quote 0
                                  • recompileR
                                    recompile @Hex
                                    last edited by

                                    @hex I get nothing from the dpad, but I do get events from the analog sticks.

                                    1 Reply Last reply Reply Quote 0
                                    • HexH
                                      Hex
                                      last edited by Hex

                                      @recompile I have written some print statements to debug this issue. Can you try it standalone rather than using it with J. I have updated the source.

                                      ./sdl_interface 1 1 nearest

                                      All prints are in string while testing.

                                      Check line 179. That is where I dont know how to handle. Currently what I am doing is registering event if position is zero or Max on either sides. I got two controllers for testing , an SNES gamepad and Xbox controller.

                                      The Dpad on xbox controller does not yield max values and hence was getting ignored. What should be done in such case

                                      The Dpad on SNES controller works as expected and provides accurate values.

                                      Sent from 20,000 leagues under the sea.

                                      Powersaver Emulation station : https://github.com/hex007/EmulationStation
                                      ES dev script : https://github.com/hex007/es-dev/blob/master/es-tests.sh

                                      recompileR 1 Reply Last reply Reply Quote 0
                                      • recompileR
                                        recompile @Hex
                                        last edited by recompile

                                        @hex Let's make this easy.

                                        What we want: simple pressed/released events from the dpad

                                        What we have: a 'changed' event with a value range, giving us the current state of an axis.

                                        We know that when an axis state changes to 0, neither button related to that axis is pressed.

                                        We know that an axis can be in only 1 of three possible states +N | 0 | -N If Up is + and Down is -, then we know Up is pressed if value > 0 and Down is pressed if value < 0 ** That should answer your question about what to do with values outside the three points you were checking, as no points in the range remain unchecked.

                                        We can store the dpad's state in only four bits, using one bit for each direction. i.e. UDLR

                                        On each axis motion event, we make a copy of the old state and update it to reflect the current state. We can then compare the old state to the current state to generate events. (We need to make a copy to preserve the old state of the other axis.)

                                        For example if the old state is 1001 and the new state is 0101 we know we need to generate two events: up released and down pressed. If there's no change in state, we don't generate any events. Even a noisy analog control will look like a normal button on the J side.

                                        ** our comparisons could also look like >=1, <=-1, and >-1 & <1 if you want a little buffer around 0

                                        1 Reply Last reply Reply Quote 0
                                        • HexH
                                          Hex
                                          last edited by

                                          @recompile Good morning. Firstly I am adding rotation support for frames. So rotation param can be sent from J. As I go on exposing features it will be better if J only sends necessary params. Only if user specifies in config should J opt to send optional params.

                                          Let me recap what you are saying so we are on the same page

                                          • Always store prev state (will need to account for multiple analog sticks' axis)
                                          • Convert state in onStateChange into {0,1} per direction and check with prev value in {U,D,L,R} .
                                          • If value differs then fire event.

                                          I can have a threshold that acts like a cuttoff for event detection and have this working :)

                                          Another thing to note is these joysticks are capable of moving in two dimensions so will fire two events if moved diagonally. which should be acceptable.

                                          Sent from 20,000 leagues under the sea.

                                          Powersaver Emulation station : https://github.com/hex007/EmulationStation
                                          ES dev script : https://github.com/hex007/es-dev/blob/master/es-tests.sh

                                          recompileR 1 Reply Last reply Reply Quote 0
                                          • recompileR
                                            recompile @Hex
                                            last edited by

                                            @hex said in Would you like to play Nokia (J2ME) games on Retropie?:

                                            Firstly I am adding rotation support for frames.

                                            That's fine, I'm just not sure why we'd want/need it? Not very many games detect orientation, but those that do base it on the screen resolution and detect those changes by overriding the sizeChanged method on Displayable. (It's the only way to detect orientation changes.) Changing orientation, then, requires changing resolution. Changing resolution means killing sdl_interface and starting it again, so we wouldn't need to rotate there anyway.

                                            @hex said in Would you like to play Nokia (J2ME) games on Retropie?:

                                            Another thing to note is these joysticks are capable of moving in two dimensions so will fire two events if moved diagonally.

                                            Yep. If you press up/left you'll generate an "up pressed" and a "left pressed". If the user slides their thumb so they're only moving up, you'll fire a "left released" The games don't know about gamepads, so J will convert those to the relevant key events.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.

                                            Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.