Use machine for building on CircleCI since it should be capable of using Docker and...
[SquirrelJME.git] / changelog.mkd
blob67cbb708f45ef4304759e5b1db98c8a75ea5958c
1 # Changelog
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
13 Runtime.
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!
24  * Modules
25    * `bluetooth`
26      * Stubbed.
27    * `cldc-compact`
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
32        Euro symbol.
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
43        on two objects.
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
50        behavior.
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`.
57    * `collections`
58      * Various fixes, implementation, and cleaning up.
59    * `debug-jdwp`
60      * Implemented JDWP protocol, this is used for debugging.
61    * `demo-hello`
62      * Made the system properties array `final`.
63    * `dio`
64      * Stubs.
65    * `dio-adc`
66      * Stubs.
67    * `dio-atcmd`
68      * Stubs.
69    * `dio-counter`
70      * Stubs.
71    * `dio-dac`
72      * Stubs.
73    * `dio-generic`
74      * Stubs.
75    * `dio-gpio`
76      * Stubs.
77    * `dio-i2cbus`
78      * Stubs.
79    * `dio-mmio`
80      * Stubs.
81    * `dio-modem`
82      * Stubs.
83    * `dio-pwm`
84      * Stubs.
85    * `dio-spibus`
86      * Stubs.
87    * `dio-uart`
88      * Stubs.
89    * `dio-watchdog`
90      * Stubs.
91    * `io`
92      * Fixed bug in `ByteDeque` if an attempt was made to read from an
93        empty deque.
94    * `jblend-api`
95        * Added API Stubs.
96    * `launcher`
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.
101    * `media-api`
102      * Add null media support for: players, and volume control.
103    * `meep-midlet`
104      * Handle Konami's Mobile US games using a special system request.
105      * Implement `MIDlet.checkPermission()`.
106    * `meep-rms`
107      * Added basic support for record stores.
108    * `meep-swm`
109      * Added proprietary `ExtendedTaskManager` interface which can be used
110        to specify arguments, system properties, and console output alternatives
111        to launched tasks.
112      * Workaround for broken JAR manifests which violate the specification.
113    * `midp-lcdui`
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
128        implemented.
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()`.
144    * `tac`
145      * Override standard output and forward to standard error while a test is
146        running, so things are not kludged.
147    * `tac-runner`
148      * Deleted as it is no longer needed.
149    * `tool-classfile`
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.
156    * `tool-profiler`
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.
159    * `vodafone-api`
160      * Added API Stubs.
161    * `zip`
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.
168  * Compiler Backend
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.
173  * Virtual Machines
174    * General
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
178        properties.
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.
186    * SpringCoat
187      * Add limit to stack frame depth.
188      * Add support for system properties being based to virtual machine
189        instances.
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.
194    * RatufaCoat
195      * New Virtual Machine.
196      * Fast and slim, written in C.
197  * Cleanup
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.