Ultimate Fenix In Project


Puck2099

Certified Guru
Joined
Oct 22, 2004
Messages
422
Location
Madrid, Spain
Website
www.gp32wip.com
Hi,

Now I have a bit more free time for a month I've thought to work in Fenix for a while.

I've received a lot of petitions asking me to port a newer Fenix version, well, that will be Ultimate Fenix (ufenix to abbreviate).

I've read that newer versions are quite more faster and less buggy than the ones used in GP2X and GP32 (0.84) so I'll use the lastest one (0.92a) as a starting point.

I don't know when I'll be able to release something functional, but I'll need Fenix developers' help to try their projects with the new runtime.

This new Ultimate Fenix will have an obvious disadvantage, it will be incompatible with projects compiled to 0.84 version, so you'll have to recompile them to use this new interpeter and they won't be able to use in GP32, but I think it's a minor issue.

I only wanted to let you know that I'm not dead and will start this project stronger than before :)

Sorry for my bad English :p

Regards
 
That is amazing news. I can't tell you how happy I am. I'll be pleased to help in anyway I can.
 
Haven`t seen you for ages, Puck! Nice that you`re back!
You can count me in, too, this is awesome!
0.92a just got ported to dreamcast, maybe this could be of interest for you?
Linkylink
 
Puck2099 said:
Hi,

Now I have a bit more free time for a month I've thought to work in Fenix for a while.

I've received a lot of petitions asking me to port a newer Fenix version, well, that will be Ultimate Fenix (ufenix to abbreviate).

I've read that newer versions are quite more faster and less buggy than the ones used in GP2X and GP32 (0.84) so I'll use the lastest one (0.92a) as a starting point.

I don't know when I'll be able to release something functional, but I'll need Fenix developers' help to try their projects with the new runtime.

This new Ultimate Fenix will have an obvious disadvantage, it will be incompatible with projects compiled to 0.84 version, so you'll have to recompile them to use this new interpeter and they won't be able to use in GP32, but I think it's a minor issue.

I only wanted to let you know that I'm not dead and will start this project stronger than before :)

Sorry for my bad English :p

Regards
I'm in aswell. May I suggest that you use OGG940 to move OGG decoding to the 940t, if at all possible?
 
Last edited by a moderator:
Puck2099 said:
Hi,

Now I have a bit more free time for a month I've thought to work in Fenix for a while.

I've received a lot of petitions asking me to port a newer Fenix version, well, that will be Ultimate Fenix (ufenix to abbreviate).

I've read that newer versions are quite more faster and less buggy than the ones used in GP2X and GP32 (0.84) so I'll use the lastest one (0.92a) as a starting point.

I don't know when I'll be able to release something functional, but I'll need Fenix developers' help to try their projects with the new runtime.

This new Ultimate Fenix will have an obvious disadvantage, it will be incompatible with projects compiled to 0.84 version, so you'll have to recompile them to use this new interpeter and they won't be able to use in GP32, but I think it's a minor issue.




Is this a new fenix?
If yes where can we download it from?
 
Last edited by a moderator:
You should read what the post says. It`s going to be ported, its not ported already >_<.

Here are the changes since 0.86 (couldn`t find any older), partly translated with a crappy web based translator.


0.92
-Fix in the prototype of functions that return a pointer
-unload_map optimized
-Added NULL check in bitmap_get
-Fixed support for fli/flc files
-Executables have icons again.
-Fixed crashes due to font unloads. Now if a font is unloaded while being used, text which uses it is deleted safely.
-Fixed SUBSTR function behaviour.
-Added the following functions:
CD_NUMTRACKS(cdnumber) – Returns the number of available tracks in the specified CD.
CD_CURRTRACK(cdnumber) – Returns the number of the current track.
-Added invalid parameters check in CD functions.
-Fixed shift right and shift left operations to support the different SIGNED/UNSIGNED data types.
-Reimplemented fixed point operations, improving performance and precision. This affects to commands such as ADVANCE and mode7 functions.
-Fixed ADVANCE function: sometimes, if the distance was less than 1 it didn't advance.
-Fixed and completed animated bitmaps support.
-Fixed screen refresh in operations that refresh blendops
-Fixed screen refresh when refreshing, loading or doing any operation over palettes.
-Some more fixes related to screen refresh.
-Fixed some operations related to fade.
-Fixed some critical errors and some functions which made the program crash now make use of the error return.
-Fixed return values of the GET_REAL_POINT function when the control point was not defined.
-Fixed lack of refresh when the size of a region is modified
-PUT_SCREEN does not make the program fall down if an unexisting map is used.
-Rewriten and fixed FILTER and BLUR functions.
-GRAYSCALE does not make the program crash when using a map with depth different from 16bpp.
-Added the MEMCMP function (pointer addr1, pointer addr2, int size) to compare memory areas. The function returns 0 if they are equal and any other value if they are different.
-Fixed initializations in instance_new and fixed instance_duplicate logic, which affected CLONE function and caused random crashes.
-Added the following commands to the debug window: KILLALL, WEAKUPALL, SLEEPALL, FREEZEALL.
-Fixed creation, erasing and moving of draw primitives. Sometimes appeared previously deleted draws and some draws were deleted when they should not.

0.89d
-Fixed the blend substractive formula.
-Fixed functions MKDIR and CD.
-Fixed Alt+W in debug mode when the program goes fullscreen using the variable full_screen.
-Fixed the maps rotation and scalation.
-Now when you press Alt+X in debug mode, you exit immediately.

0.89b
-Fixed the prototyping of Processes/Functions.
-Several corrections in the scroll mechanism.
-Function "move_scroll()" enabled.
-Fixed the file opening in Windows Vista.

0.89a
-Fixed the compilation of pointers to structures.
-Fix when in debug's console you want to show: IDProcess.Variable[ Index ]
-Fixed some aesthetic aspects in debug's console (help colores and other things), that were eliminated by error.

0.89
-Fixed and fully functional the stub scheme.
-There is no limit now to the size of png loading and saving.
-Fixed a bug when saving strings in files.
-New debug's console variable : "FILES" that shows the number of open files in use.
-New identifier "DECLARE" that let us declare prototypes of Functions/Processes with their variables, before using them.

0.88d
-Them are not necessary, but for a matter of clarity: LOAD_FPL UNLOAD_FGC UNLOAD_FBM
-You can change the size of debug's console using : CONSOLE_LINES and CONSOLE_COLUMNS.
-Now the debug's console freezes all fenix processing and updating.
-The instruction "DEBUG;" freezes inmediatly the program execution, there is no wait to the next frame.
-The message "Failed to open message file: msg/en.msg" was eliminated

0.88a
-Added to the debug's console, support to variable assignment to the remaining data types, except POINTER, STRUCT, ARRAY.
-The strings in debug's console can use double quotes ( " ), or simple quotes ( ' )
-The name of the scale filters Constants have been changed to:
SCALE_NONE - Deactivates the scale.
SCALE_SCALE2X - Actual scale filter 2x (Also you can activate it using the flag in the variable "graph_mode" like allways or using variable SCALE_MODE = SCALE_NONE)
SCALE_HQ2X - 2x scale with hq2x filter (better quality, less performance)
SCALE_SCANLINE2X - 2x scale with scanline filter
SCALE_NORMAL2X or SCALE_NOFILTER - 2x scale without filter

0.88
-Fixed the bug about graphics flickering caused by problems in the change of the Z in version 0.87e.
-Eliminated the use of MessageBox because critical errors with the interpreter (fxi) in Windows; caused by problems with the last SDL version. Now the output goes to stderr.txt.
-New Scale Filters : scale2x, hq2x, scanline2x, normal2x
-To support this there is a new global variable named "scale_mode",
The simple set of this variable realizes the scale.
The possible values are :
SCALE_NOFILTER - Deactivates the scale.
SCALE_SCALE2X - Actual scale filter 2x (Also you can activate it using the flag in the variable "graph_mode" like allways)
SCALE_HQ2X - 2x scale with hq2x filter (better quality, less performance)
SCALE_SCANLINE2X - 2x scale with scanline filter
SCALE_NORMAL2X - 2x scale without filter

NOTE: If scale is activated (setting the new variable or using the flag in "graph_mode"), you can change the filters changing the new variable without the need to use set_mode.

-Support up to 32 joysticks (deppending on OS)
-To the known functions, there has been added the next ones:
GET_JOY_BUTTON(joystick, buttom)
GET_JOY_POSITION(joystick, axis)
JOY_BUTTONS(joystick)
JOY_AXES(joystick)

0.87e
-Fixed an error related to priority in processes introduced in Fenix 0.84b (less priority value caused the process to execute earlier)
-Now, if Z changes, the process is taken into account in the next redraw.
-Enabled scale2x in MAC and Linux-PPC
-Fixed an error in mode 7 initialization when starting an already used mode7
-Changed configure.in to include X11 lib when it is available.
-Added MMX support but disabled for causing less performance to the standar with no MMX and crashes in the process for no apparent reason.

0.87d
-New Function : RESERVE_CHANNELS(NChannels)
Where NChannels is the number of channels to reserve (From 0)
Returns the amount of reserved channels ( -1 if Error)
-Fix in destroy_instances that makes that when you kill a son process with sons; They (the sons), don't relate good with his "new" big brother.
-Fix some debug messages and fatal errors.
-Some things were moved and ubicated in his correct place.
-Now the debug console can be invokated in the next frame using the statement "DEBUG" in to the source code.
-Now the console can block any process.
-Add new debug commands.
-There is a new console variable DEBUG that lets you enable and disable the debug's log.

0.87c
-The whole instance elimination system was rewritten, due to bad reconstruction in the structures. Some more bugs in the instances module.
-Signals are active in the same frame.
-These constants were added:
OS_BSD
STATUS_DEAD
STATUS_KILLED
STATUS_RUNNING
STATUS_SLEEPING
STATUS_FROZEN
STATUS_WAITING
-Fixed a bug in map/fpg download.
-Modification and fixes for debugging options.

0.87b
-2 new functions added:
PLAY_WAV(wav pointer, number of loops (-1 infinite loops)[, channel (-1 any channel)])
GET_TIMER(), returns a timer counter with millisecond precision.
-Fixed function move_window.

0.87a
-File cleaning.

0.87
-Now debug compilation is back again.

0.86g
-Rewrite of the fix to the strings freeing in the return of a function call.
-Dcb structure change was undone, but now that some optional info is saved, the dcb number was changed.
-Now freeing supports strings, string array and STRUCTS with strings.

0.86f
-Fix in freeing of strings using local functions(not instances).
-New version of dcb with storing of private variable type (arguments included).
-Unneeded code of public variables in local functions was eliminated.
-Now static strings are loaded from the dcb with a use counter at 0 and with reserved flag, so that they are now discarded(something very internal).

0.86e
-Fix of the order of code instructions (sysprocs.h, temporary change). It failed earlier on when DLLs with many functions were loaded.
-In Compile_varspace, the paramaters collision1 and collision2 were removed, the collision was added as an array, so it becomes possible to include X spaces of collision.
-The idea of "public" (local) variables per process. This makes it so that local variables for a single specific process can be defined and not for all the processes.
-Declaration LOCAL, PUBLIC and you DEPRIVE YOU, in any order inside a Process and inside the body of the program.
-Name of process is incorporated like type of data. This serves for referring to public variables (and local), inside a process of a specific type. It is necessary to be able to use the new functionality of public variables. The type of data finally finishes being an "int" to maintain compatibility.
-Compatibility with global LOCALITIES is maintained. Common local variables for all processes can be defined and other localities by process.
-Functions prototypes redefinition in pathfind.c because of a conflict with functions in C
-Enable functions MMX in GNUC
-New format of dcb, it makes use of sizeof of the structures utilized (earlier on a very problematic added size was used) and is added the sections of public data.
-Some memory freement because of certain errors in runtime functions
-The configuration is normalised, it's corrected and a backup for the windows version is made
-Cleaning in compilation, the folder "obj" was added, where the binaries are compiled or and the binary are left in the folder "bin"
-More debug information
-a clausule PUBLICS is added in the debug console
-several improvements in the code
-Other smaller bugs, that at present I do not remember...

<0.86e
-Fix in the instruction code order(sysprocs.h, temporal change). Fix in the loading hangs of dlls with many functions.
-Compile_varspace, collision1 and collision2 parameters where eliminated, collision as array added, so that in this way you can include X collision spaces.
-Concept of "public" variables (locals) by process. This makes possible that you can define local variables for only a determined process and not for all the processes.
-LOCAL, PUBLIC and PRIVATE, in any order inside a process and into the program body.
-The process name is now incorporated as data type. This is used to reference public variables (and locals), within a process of specific type. It is necessary so that the new public variables functionality can be used. The data type finally ends being an "int" to keep compatibility.
-It is kept the compatibility with LOCAL global. there can be defined local variables common to all the processes and other locals by process.
-Prototype function redefinition in pathfind.c by conflict with C functions.
-Enabled MMX functions in GNUC.
-New dcb format, now sizeof is used in structures(before sizeof was made by hand and was very problematic), added public data sections.
-Some memory fixes added because of certain errors with runtime functions.
-configure updates and fixes, now it's got windows support.
-Compilation cleaning, obj folder added, where ".o" files are compiled and binaries are left in bin folder.
-More debug information.
-PUBLICS clausule added in debug console.
 
Hmm, think this is bad news, I just made some tests cause I noticed something, and the 0.84cvs version I am using to compile for gp2x is the fastest. o_O

I used this to test, results in the comments:
CODE

//0.84: 29fps
//0.87: 25fps
//0.89: 25fps
//0.92: 20fps


program test;
begin
set_mode(320,240,16);
set_fps(0,0);

write_int(0,5,5,0,&fps);

while(!key(_esc))

for(x=0; x<320; x++)
for(y=0; y<240; y++)
put_pixel(x,y,rgb(rand(0,255),rand(0,255),rand(0,255)));
end;
end;

frame;
end;

exit();
end;



This was tested on my work pc,
Pentium 4 2.8 GHz dualcore, 1gig ram.
 
Yeah, eeek.

The strange thing is, I did my water effect in 0.84 where it run pretty slowly, and then I compiled it in a newer
version, which gave me a speedup of about 100% !!! And now I`m not really able to reproduce this.

I hope Puck tracks this topic, or atleast thinks of checking back from time to time. I better pm him...
 
Quiest said:
Yeah, eeek.

The strange thing is, I did my water effect in 0.84 where it run pretty slowly, and then I compiled it in a newer
version, which gave me a speedup of about 100% !!! And now I`m not really able to reproduce this.

I hope Puck tracks this topic, or atleast thinks of checking back from time to time. I better pm him...
Yes, I track this topic but until 1st August I can only connect using my mobile phone.

Maybe newer versions are more optimized in some areas and less in others...

Anyway, I think it would be good to lose a bit of speed if we can avoid random crashes and other bugs...

By the way, I've made a prealpha and uploaded to megaupload (here). As I don't have my GP2X here and until 10 days I won't return home, I would like if you could try it.

I'm very interested in know how many FPS run each test (wait a bit until they get stabilized), you must exit them shutting down GP2X because I haven't implemented yet the controls.

Regards
 
Last edited by a moderator:
Thanks Puck, here are my results.

Test 1 : 54 fps

Test1_arm : 55/56 fps

Test2 : 52 fps

Test2_arm: 48 fps


edit:
I ran the same tests from the previous version of fenix and both ran at 26fps so this is a vast improvement :) . Things are looking good so far.
 
Here are my results.

Test 1: 56fps

Test1_arm: 55-56fps

Test2: 50fps

Test2_arm: 50fps

These tests were run from a beta of Open2x and at the bottom of the screen there seems to be tearing and I can see what was the gmenu in the background :S
 
Back
Top