s1 s2

The goal of Effectus project is to make it compatible with Action! programming language as close as possible. Currently available is Win32 version of the program. examples\ folder includes some demonstration programs to show what Effectus currently can do. The runtime library consists of several libraries. Besides runtime.asm there are several others, depending on which routines are used. The implementation of runtime library routines can be changed, but the number and order of parameters must not be changed. This is one of the rules you must follow to successfully compile Effectus program. Also, additional requirement for proper working of Effectus is that config.ini configuration file must be in the same directory as the executable program.

Effectus compiles and produce MADS assembly language source code and binary file. Source code can be further modified with the use of MADS for additional improvements. The restrictions mentioned above comply just to the stage when Effectus source code is compiling. You can set default values for MADS and Effectus source code folder, program starting address, extensions, etc. in config.ini file. In time I will add new extra features. Maintaining the compatibily with Action! will be of HIGH priority, but new core routines and statements will be eventually implemented.

The name Effectus comes from Latin word for "execution".

I have to thank the author of MADS, Tebe, who helped me with many important suggestions to improve the code. Thanks go also to TXG/MNX for an idea for compile status information.

You are welcome to check Effectus forum to discuss its functionality or anything else!


Features
(in some cases limited functionality)


Supported Action! procedures and functions

Click here for brief list of supported Action! commands!


Supported Action! global system variables

color, device


Add-on Action! procedures

Asm - This procedure allows you to directly write assembly language code as part of the the final MADS assembly language program
PrintG, PrintGE - Temporary available procedures for printing text on screen in graphics modes with text window. These will be probably removed when ordinary Print procedures will be fixed.


Rules (and current restrictions)

- Every command (statement) must be on separate line
- Declared variables must follow these rules:
  - Just one type declaration line for each of currently supported types, no space after comma (if more than one variable is declared)
  - No spaces allowed between variable and expression
  - BYTE ARRAY or CHAR ARRAY must be chosen, not both
  - declared BYTE ARRAY and CHAR ARRAY variables must be set some dimension, only one value can be set for every such variable throughout the program
- Only literal numbers allowed as PROC (procedure) parameters (with the exception of the first parameter, which represents memory address and can be substituted with the variable)
- IF-ELSE, WHILE and FOR branch rules:
  - No logical operators supported yet
  - The second operand compared MUST NOT be a variable, just literal numbers are allowed right now (for example: WHILE i>0)
- INCLUDE statement currently only supports user defined libraries on current directory for console version, for GUI version of Effectus only those on directory for Effectus sources set by config.ini are acceptable
- If comments are used, ";" currently takes the whole line as the comments
- Currently you are not recommended to use reserved words in comments and strings
- Arithmetics partially implemented (8-bit addition, substraction, multiplication and division) and incrementing of the variable by 1 (for example: i=i+1 or i==+1)
- When Graphics routines are used, you may not use ordinary text printing functions. Instead, use PrintG or PrintGE.


Found bugs (many of them fixed and removed)

- PrintE procedure behaves strange if positioned anywhere else than the first position in a line, which is recommended
- SndRst sometimes messes other routines near it. Recommended is putting an empty line after this procedure.
- Currently you are not recommended to use reserved words in comments and strings
- FOR branch statement has few issues
- Branch loops do not work properly yet when string manipulation routines are used, because only one value can be set for every such string throughout the program


Effectus release files and directories


To do

- FUNCs (functions)
- I/O routines
- Local variables
- Variable types (ARRAYs, POINTERs, type structures)
- INCLUDE files
- DEFINE constants (partly implemented, currently only literal numeric values allowed)
- Recursion (non-Action! functionality)
- Nested procedures and functions (non-Action! functionality)
- Support for player/missiles
- Floating point support
- Syntax checking
- implementing MADS features and compiling options
- remaining set of procedures, functions and other functionality of Action! language
- ...