Skip to content

Commit d9c47ca

Browse files
authored
Merge pull request #1191 from WizzardSK/j2me-docs
library: document the two J2ME cores
2 parents 83e37f3 + e0c2838 commit d9c47ca

3 files changed

Lines changed: 470 additions & 0 deletions

File tree

‎docs/library/freej2me.md‎

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
# Mobile - J2ME (FreeJ2ME)
2+
3+
## Background
4+
5+
FreeJ2ME is an emulator for J2ME (Java 2 Micro Edition), the platform the games on pre-smartphone mobile phones were written for. It implements MIDP 2.0 along with the manufacturer extensions those games reached for - Nokia's, Siemens', Motorola's - and runs the .jar the phone would have run.
6+
7+
The core is a front end rather than a reimplementation: it starts FreeJ2ME's own Java application and exchanges video, input and settings with it. **A Java runtime has to be installed on the machine**, and `freej2me-lr.jar` has to be in the frontend's system directory - the core cannot supply either.
8+
9+
### Author/License
10+
11+
The FreeJ2ME core has been authored by
12+
13+
- David Richardson
14+
- Saket Dandawate
15+
16+
The FreeJ2ME core is licensed under
17+
18+
- [GPLv3](https://github.com/hex007/freej2me/blob/master/LICENSE)
19+
20+
A summary of the licenses behind RetroArch and its cores can be found [here](../development/licenses.md).
21+
22+
## Extensions
23+
24+
Content that can be loaded by the FreeJ2ME core have the following file extensions:
25+
26+
- .jar
27+
28+
## Databases
29+
30+
RetroArch database(s) that are associated with the FreeJ2ME core:
31+
32+
- [Mobile - J2ME](https://github.com/libretro/libretro-database/blob/master/dat/Mobile%20-%20J2ME.dat)
33+
34+
## BIOS
35+
36+
The FreeJ2ME core requires the emulator's own Java application, which is not part of the core and has to be placed in the frontend's system directory by hand. It is built from the same repository as the core (`make -f Makefile.libretro` produces both) and published with its releases.
37+
38+
| Filename | Description |
39+
|-------------------|------------------------------------------------|
40+
| freej2me-lr.jar | FreeJ2ME's Java application. Required. |
41+
42+
The core also needs a Java runtime installed on the system: it launches `java -jar` (`javaw` on Windows), so a machine without one loads the core and then stops with nothing on screen.
43+
44+
## Features
45+
46+
Frontend-level settings or features that the FreeJ2ME core respects.
47+
48+
| Feature | Supported |
49+
|-------------------|:---------:|
50+
| Restart | ✔ |
51+
| Screenshots | ✔ |
52+
| Saves | ✕ |
53+
| States | ✕ |
54+
| Rewind | ✕ |
55+
| Netplay | ✕ |
56+
| Core Options | ✔ |
57+
| [Memory Monitoring (achievements)](../guides/memorymonitoring.md) | ✕ |
58+
| RetroArch Cheats | ✕ |
59+
| Native Cheats | ✕ |
60+
| Controls | ✔ |
61+
| Remapping | ✔ |
62+
| Multi-Mouse | ✕ |
63+
| Rumble | ✕ |
64+
| Sensors | ✕ |
65+
| Camera | ✕ |
66+
| Location | ✕ |
67+
| Subsystem | ✕ |
68+
| [Softpatching](../guides/softpatching.md) | ✕ |
69+
| Disk Control | ✕ |
70+
| Username | ✕ |
71+
| Language | ✕ |
72+
| Crop Overscan | ✕ |
73+
| LEDs | ✕ |
74+
75+
Saves are written by the Java application into its own directory under the frontend's save directory, so they survive, but they do not go through the frontend's save handling - hence no save states, no rewind and no netplay.
76+
77+
### Directories
78+
79+
The FreeJ2ME core's library name is 'FreeJ2ME'
80+
81+
### Geometry and timing
82+
83+
- The FreeJ2ME core's core provided FPS is 30
84+
- The FreeJ2ME core's base and maximum size follow the **Phone Resolution** core option, 240x320 by default
85+
- The FreeJ2ME core's supported pixel format is XRGB8888
86+
- Sound is produced by the Java application itself rather than sent through the frontend, so the frontend's audio settings do not apply to it
87+
88+
## Core options
89+
90+
The FreeJ2ME core has the following option(s) that can be tweaked from the core options menu. The default setting is bolded.
91+
92+
- **Phone Resolution (Core Restart required)** [freej2me_resolution] (96x65|96x96|104x80|128x128|132x176|128x160|176x208|176x220|208x208|**240x320**|320x240|240x400|352x416|360x640|640x360|480x800|800x480)
93+
94+
Not all J2ME games run at the same screen resolution. If the game's window is too small, or has sections of it cut off, try increasing or decreasing the internal screen resolution.
95+
96+
- **Rotate Screen** [freej2me_rotate] (**off**|on)
97+
98+
Some games, especially ones that support touch controls, tend to expect the screen to be rotated. This option comes in handy on those cases.
99+
100+
- **Phone Key Layout** [freej2me_phone] (**Standard**|Nokia|Siemens|Motorola)
101+
102+
Due to the different mobile phone manufacturers on the J2ME space, it's usual to have some games expecting a certain phone's key layout like Nokia's for example. If a game is not responding to the inputs correctly, try changing this option.
103+
104+
- **Game FPS Limit** [freej2me_fps] (Auto|**60**|30|15)
105+
106+
The J2ME platform allows a great deal of freedom when dealing with synchronization, so while many games are locked to a certain framerate internally, others allow for variable framerates when uncapped at the cost of higher CPU usage, and some even run faster than intended when they get over a certain FPS threshold. Use the option that best suits the game at hand.
107+
108+
- **Virtual Phone Sound** [freej2me_sound] (**on**|off)
109+
110+
Enables or disables the virtual phone's ability to load and play audio samples/tones. Some games require support for codecs not yet implemented, or have issues that can be worked around by disabling audio in FreeJ2ME (ID Software games such as DOOM II RPG having memory leaks with MIDI samples being one example). If a game doesn't run or has issues during longer sessions, try disabling this option.
111+
112+
- **Pointer Type** [freej2me_pointertype] (**Mouse**|Touch|None)
113+
114+
This option sets the type of pointer used by FreeJ2ME, can be set to use a Mouse, a Touchscreen or neither. Please note that only Mouse supports drag and drop motions
115+
116+
- **Pointer X Speed** [freej2me_pointerxspeed] (2|**4**|8|16)
117+
118+
This option sets the horizontal speed of the on-screen pointer when controlled by a joypad's analog stick.
119+
120+
- **Pointer Y Speed** [freej2me_pointeryspeed] (2|**4**|8|16)
121+
122+
This option sets the vertical speed of the on-screen pointer when controlled by a joypad's analog stick.
123+
124+
- **Pointer Inner Color** [freej2me_pointerinnercolor] (Black|Red|Green|Blue|Yellow|Pink|Cyan|**White**)
125+
126+
This option sets the on-screen pointer's inner color.
127+
128+
- **Pointer Outline Color** [freej2me_pointeroutercolor] (**Black**|Red|Green|Blue|Yellow|Pink|Cyan|White)
129+
130+
This option sets the on-screen pointer's outline color.
131+
132+
- **Pointer Click Indicator Color** [freej2me_pointerclickcolor] (Black|Red|Green|Blue|**Yellow**|Pink|Cyan|White)
133+
134+
This option sets the on-screen pointer's click indicator color.
135+
136+
## Joypad
137+
138+
| RetroPad Inputs | FreeJ2ME Inputs |
139+
|------------------------------------------------|-------------------------|
140+
| ![](../image/retropad/retro_dpad_up.png) | Arrow Up, Num 2 |
141+
| ![](../image/retropad/retro_dpad_down.png) | Arrow Down, Num 8 |
142+
| ![](../image/retropad/retro_dpad_left.png) | Arrow Left, Num 4 |
143+
| ![](../image/retropad/retro_dpad_right.png) | Arrow Right, Num 6 |
144+
| ![](../image/retropad/retro_b.png) | Num 7 |
145+
| ![](../image/retropad/retro_a.png) | Num 9 |
146+
| ![](../image/retropad/retro_x.png) | Num 0 |
147+
| ![](../image/retropad/retro_y.png) | Num 5, Pointer Click |
148+
| ![](../image/retropad/retro_l1.png) | Num 1 |
149+
| ![](../image/retropad/retro_r1.png) | Num 3 |
150+
| ![](../image/retropad/retro_l2.png) | Key * |
151+
| ![](../image/retropad/retro_r2.png) | Key # |
152+
| ![](../image/retropad/retro_select.png) | Left Options Key |
153+
| ![](../image/retropad/retro_start.png) | Right Back Key |
154+
| ![](../image/retropad/retro_right_stick.png) X | Pointer Horizontal Move |
155+
| ![](../image/retropad/retro_right_stick.png) Y | Pointer Vertical Move |
156+
157+
The right analog stick moves the on-screen pointer for games that expect a touchscreen or a mouse; **Pointer Type** decides whether it behaves as a mouse, as a touchscreen, or is turned off.
158+
159+
## External Links
160+
161+
- [Official FreeJ2ME Github Repository](https://github.com/hex007/freej2me)
162+
- [Libretro FreeJ2ME Core info file](https://github.com/libretro/libretro-super/blob/master/dist/info/freej2me_libretro.info)

0 commit comments

Comments
 (0)