3 ## 0.4.0 (September 29, 2023)
5 This release is dedicated to Emily, the developer of Mu, she was a close and
6 dear friend of mine. Rest in piece, you will not be forgotten.
8 This release existed through both the previous release plan and the now
9 current goal oriented releases.
11 SquirrelJME is also available on RetroArch since the implementation of
12 RatufaCoat which is written in C and is capable of using the SquirrelJME
15 _Note that this is a work in progress and not everything will run, due to_
16 _the implementation being incomplete. However, it does work and is proven to_
17 _work, which means progress can continue as such. Later releases of_
18 _SquirrelJME will always be an improvement over the older versions._
20 More detailed changes:
22 * Modernized the build system to Gradle!
23 * This will make it much easier to develop and allow for contributions!
28 * Added a rehash indicator for the internal `__BucketMap__` so that
29 `java.util.Hashtable` knows when a reorder was performed.
30 * Added `java.util.Vector`, it was missing.
31 * Added support for ISO-8859-15, this is the newer encoding with the
33 * Added support for `os.arch`, `os.name`, and `os.version`.
34 * Corrected bug in `__CanSetPrintStream__` where if it were set to itself
35 then it could lead to infinite recursion, instead if this kind of
36 stream is attempted to be set it will use the target.
37 * Corrected `Integer.toString()` and `Long.toString()` to correctly
38 handle `MIN_VALUE`s. They are no longer printed as a bunch of
39 parenthesis and minus signs due to character overflow.
40 * Corrected `java.lang.Object.clone()` to return the new copy of the array
41 when cloning and not the original.
42 * Corrected `java.util.Objects.equals()` not correctly checking equality
44 * Fallback encoding is now UTF-8 and not ISO-8859-1.
45 * If the name of the requested resource is blank, ignore it.
46 * If a resource was not found, do a traditional search of the classpath
47 for the given resource. This technically is not valid, however some
48 games use the wrong class when looking up resources. Note that the
49 current suite will always be searched first to maintain the correct
51 * Implemented `java.lang`, `java.io`, and `java.util` classes.
52 * Made the stack trace printed by `Throwable` much cleaner so that it
53 takes up less screen space and is formatted a bit better.
54 * Removed `GuestDepth`, it is no longer a concept.
55 * Return values for `line.separator`, `microedition.encoding`,
56 `microedition.configuration`, and `microedition.locale`.
58 * Various fixes, implementation, and cleaning up.
60 * Implemented JDWP protocol, this is used for debugging.
62 * Made the system properties array `final`.
92 * Fixed bug in `ByteDeque` if an attempt was made to read from an
97 * Added the system property `cc.squirreljme.autolaunch` to automatically
98 launch a program once the program list is read.
99 * When a program is launched, instead of saying just "Loading..." instead
100 allow show the program which is being loaded in the title.
102 * Add null media support for: players, and volume control.
104 * Handle Konami's Mobile US games using a special system request.
105 * Implement `MIDlet.checkPermission()`.
107 * Added basic support for record stores.
109 * Added proprietary `ExtendedTaskManager` interface which can be used
110 to specify arguments, system properties, and console output alternatives
112 * Workaround for broken JAR manifests which violate the specification.
114 * Added a 12 strike font.
115 * Added capability flag for pointer events.
116 * Added support for getting the number of display colors which depends on
117 the pixel format of the display.
118 * Added support to get the number of alpha levels.
119 * Adjusted the style of the lowercase A character in the sans-serif font.
120 * Changed 16 strike font to be the large size font and made the 12 strike
121 font the medium size font.
122 * Corrected mapping of characters since SQFs are ISO-8859-1 and most games
123 may be ISO-8859-1, since some characters may be missing in the font
124 use similar graphics for them.
125 * Fully added `cc.squirreljme.runtime.lcdui.gfx.SerializedGraphics`, This
126 allows all of the graphics drawing functions to be forwarded when
127 graphics acceleration is used, previously only a subset of methods were
129 * Fixed crash in text drawing when an empty string is drawn.
130 * Fully drawn default fonts.
131 * Implemented `com.nokia.mid.ui.FullCanvas`.
132 * Made all the graphics operations not throw a `TODO`, instead they will
133 just draw a placeholder graphic.
134 * Moved the graphics drawing operations to another class.
135 * Removed the 24 strike font, it was too large.
136 * Support double buffered `GameCanvas`.
137 * Update the `Display` when a command is added or removed.
138 * Use a default title for a `Displayable` if one has not been set, this
139 will be in the order of the suite name, the main class, and if those
140 are not valid then "SquirrelJME" will be used instead.
141 * When a `Displayable` is made current and it is already the current
142 displayed item, always set the title since it may have been placed in
143 the background by another application calling `setCurrent()`.
145 * Override standard output and forward to standard error while a test is
146 running, so things are not kludged.
148 * Deleted as it is no longer needed.
150 * Corrected comparison behavior of `FieldReference`, it did not check the
151 class name, so if a class referred to a field of the same name when
152 using SummerCoat it will result in the wrong class field being read
153 from whatever class just happened to be set first.
154 * Corrected parsing of the stack map table.
155 * Removed `net.multiphasicapps.classfile.ExecutableCode`, it was not used.
157 * When writing the NPS snapshot, set a limit on how deep the stack can
158 traverse in the event an infinite recursive method was profiled.
162 * Added `read(byte[])` which forwards to the more optimal function
163 rather than the super-class which only performs single byte reads.
164 * When reading entries where the size is fully known, if the uncompressed
165 data size is fulfilled but there is still remaining compressed data
166 (in the case where a zero byte file is compressed to two bytes),
167 continue to read the compressed data to drain it out.
169 * Added a bunch of string representations for class structures.
170 * Created a stack-cached register based compiler for Java byte code.
171 * Implemented a new tree based unit system for packages and classes.
172 * `MergedPathSet` can be initialized by iterables now.
175 * Adjusted the Shaded JAR directory layout and added a dash in the path
176 so that classes technically become invalid.
177 * Allow properties to be obtained from internally passed system
179 * Added string representation for the stack map table.
180 * Add ability to start tasks with command line arguments, system
181 properties, and alternative console redirection (to capture output).
182 * Correct cases where `NullPointerException` is thrown when a `Display`
183 was initialized but was not yet claimed by any program.
184 * If a JAR is not valid, the launcher will no longer fail to start since
185 the invalid JAR is just ignored.
187 * Add limit to stack frame depth.
188 * Add support for system properties being based to virtual machine
190 * Allow inheritance of static methods in classes.
191 * Profiler thread lists are easier to read because the main suite is
192 listed instead of the VM identifier.
193 * Refactored greatly to be much leaner and simplified.
195 * New Virtual Machine.
196 * Fast and slim, written in C.
198 * Removed the `test.sh` script, it was empty.
199 * Removed unused scripts due to the Gradle refactor.
201 ## 0.2.0 (December 25, 2018)
203 SquirrelJME's first release!
205 Note that this is a work in progress and not everything will run, due to
206 the implementation being incomplete. However it does work and is proven to
207 work, which means progress can continue as such. Later releases of SquirrelJME
208 will always be an improvement over the older versions.