Jump to content
IGNORED

Effectus - New Atari cross-compiler (Alpha stage)


Gury

Recommended Posts

Hi twh/f2,

 

Yes, you can simply copy'n'paste resulting Effectus/MADS code to your existing MADS projects, because Effectus uses MADS as assembler/linker, so they are 100% compatible. You can modify and enhance produced ASM code anytime. However, Effectus in its nature tries to simulate Action! and parse its code. There is still so much to do. When you use produced code, be sure not to interfere with your own project, because Effectus uses some internal and global variables at specific locations and stack. Modify them where necessary. Also, some linked libraries are included in the main program, depending on used functionality, with many internal functions which you can remove or enhance as you wish.

 

Indeed, there is command line version of Effectus, called effcon. You can check for brief information at http://gury.atari8.info/effectus/effcon.htm. Currently, there is just Win32 version of the programs (GUI & console). But, Linux / Unix version may appear, but not in near future, because I do not own Linux or Unix based machine yet. However, porting the program should not be such a problem, because it's written in Free Pascal, which can produce code for many platforms and machines.

Link to comment
Share on other sites

  • 1 year later...

Hi Devwebcl,

 

The project is not dead, don't worry. It was stopped for some time now (life and work issues), but it will continue. I plan to make a new version soon, including some necessary and important features from Action! language. Following updates will bring some freedom in programming, bringing syntax structures from languages like C# and Delphi. The main task, compiling original Action! source, will remain the same. When new versions will be published, I will appreciate very much that you folks help me test it and report back every issue you come by.

 

Consequently, Linux version will appear. MADS version, which Effectus needs for proper compiling your programs, will be specifically mentioned.

 

Greetings,

Gury

Link to comment
Share on other sites

If you'd released the source, a Linux version probably would already have appeared :)

Yes, probably :)

 

Eventually source code will be released, but not at this point. It has to be reviewed first and when I will think it is ready for public release, I will do so.

Link to comment
Share on other sites

  • 2 months later...

Hi all,

 

Here is new version of Effectus. Most important additions are improved support for ARRAY and POINTER declaration and manipulation (but not all features are implemented yet) and limited support for arrays of TYPE records (strings not yet supported). You can look at these features in new examples here.

 

There are many things to look at in more detail, such as handling variable expressions, including calculations, etc.

 

Linux version is in the works, which will be very similar to Win32 console version. I have decided to drop GUI version for now.

 

Program installation and usage is covered here. Version of MADS currently used and tested with the program is 1.8.5 and 1.8.6.

 

New on the site will be bug tracking page for reporting errors and other peculiar behaviors of Effectus, when emulating Action! programming language. There will be explanations, what can and cannot be done with current version of the program, with appropriate source code to demonstrate particular behavior. On this page I will also demonstrate other people's findings who will help me with testing Effectus.

 

Greetings,

Gury

Link to comment
Share on other sites

  • 3 weeks later...

Hi there,

 

Here is new version of Effectus!

 

eff.png

 

Version 0.0.9

 

- Linux version of the program, but it is not fully stable yet. For more information, read this. Also, I compiled MADS version 1.8.5 for Linux with Free Pascal for using with Linux version of Effectus. It can be downloaded in download section

 

- TYPE declaration is one of the Effectus statements, which allow code to be freely placed on multiple lines. The only restriction is having only one variable type on single line. Some examples:

 

TYPE rec=[iNT a, b

CARD calc1, calc2

INT c]

 

TYPE rec2 = [iNT a,b

BYTE c

]

 

TYPE rec3=[

BYTE a, b

CARD c

INT k, m, p

BYTE value

]

 

- Improved support for ARRAY variables used in FOR loops. Some examples:

 

FOR i=0 TO 2

DO

Print("Element ")

PrintCE(item(i))

OD

 

FOR i = 0 TO 2

DO

data(i) = 1

PrintBE(data(i))

OD

 

FOR i = 0 TO 2

DO

j = data(i)

PrintCE(j)

OD

 

- Arithmetics:

 

- Increment, decrement, multiplication and division expression syntax

Some examples:

 

x==+1

x==-2

x==/3

x==*4

 

- Aritmetics is viable on two operands (numbers or variables, also mixed)

Some examples:

 

n1=13+76

n1=100-n2

m = n * t

u = v / 10

 

- Pre-declared variables allowed, for example:

 

BYTE i=[3]

 

- Improved ARRAY declaration and manipulation

 

- Fixed procedures SCopy and InputS. Strings are handled using the actual ARRAY variables.

SCopy also allows copying one Array variable parameter to another, as shown in the following example:

 

SCopy(Str1, Str2)

 

- No space dependency on one line for most of the code, for example:

 

n=10

n = 10

n=n+1

n = n + 1

 

- Fixed issue in FOR loop syntax (if last argument was variable, the loop ended with iteration minus one)

 

- New core routines implemented for more robust, optimized and organized code, which will help in

faster development of new features of Action! programming language

 

- Configuration file Config.ini is not needed anymore. Program can work without it, but with care taken.

In this case default values are set. That is, MADS cross-assembler is searched from system path configuration.

If it isn't there, an error is raised except if -md: parameter is used like this:

 

effectus examples\poke.eff -md:c:\atari\utils\mads\

 

If config.ini file does not exist, Effectus runtime library is automatically searched in lib directory on the root directory where Effectus is run.

If you want to read runtime library from another location, set it with -rl parameter, like this:

 

effectus examples\poke.eff -md:c:\atari\utils\mads\ -rl:c:\atari\effectus\lib\

 

Of course, you can still use config.ini file. In this case, parameter values from that file are used by Effectus.

 

- Revised examples showing new features

 

Gury

Edited by Gury
Link to comment
Share on other sites

Very nice! Um... Gury? Just how does one use the ASM command?

Hi dwhyte,

 

The ASM command was meant as substitute for Action! statement as shown if following example:

 

CARD FUNC MultiplyB=*(BYTE a,x)

[$85 $E0 $86 $E1 $A9 $00 $85 $A0 $A2

$08 $46 $E0 $90 $03 $18 $65 $E1 $6A

$66 $A0 $CA $D0 $F3 $85 $A1 $60]

 

which will also have to be implemented in Effectus, of course.

 

ASM is used like this:

 

PROC WaitForKey()

 

ASM(" mwa #$ff 764")

ASM("wait ldy:iny 764")

ASM(" beq wait")

ASM(" mwa #$ff 764")

 

RETURN

 

Actually, it literary and directly makes assembler code, which is then compiled with other code as usual.

 

I have some thoughts about making extended functionality with additional core procedures and functions, which do not exist in ordinary Action! But that can lead to potential incompatibilities with existing code, so such extensions must be thought out first. If they will exist, it would be good to be able to make a choice, which mode to use when compiling Effectus program. It could be solved with extra parameter on command line, for example. We will see.

Link to comment
Share on other sites

hi Gury

 

I really liked this version of console effectus, so I can use my favorite text editor.

I wrote the following example

 

; Demo1 Effectus
MODULE

PROC Main()
 INT i
 GRAPHICS(2)
 POSITION(5,5) PRINTD(6,"hi, atariage")
 FOR i=0 TO 2
 DO
  PRINTE("hi, AtariAge")
 OD
RETURN

 

and I see that one does not develop the command POSITION and PRINTD. I hope that progress effectus as there are several that are waiting to have something easy to program to the assembler

 

Greetings

Link to comment
Share on other sites

Hi ascrnet,

 

Currently only one statement is allowed on a particular line, for example, correct version in your case:

 

POSITION(5,5)

PRINTD(6,"hi, atariage")

 

Of course, this restriction will be eliminated, but in later version. Thank you for testing, I will check PrintD routine for printing to the device. The only blocks of statements in current development of Effectus, which allow multi-line staments, are TYPE, FOR and WHILE. Other missing block will follow.

 

I am in the middle of preparing new version with new features, changes and fixes. One of them will be renaming Effectus variables internally to ones with specific prefix or suffix, because there is an issue when the variable name with the same name as existing one in specific assembly runtime library is used.

 

I will try to make some more time for Effectus, I really want to make it more complete.

Link to comment
Share on other sites

Hi all,

 

New version of Effectus is here.

 

Hey ascrnet, the example you provided works now. Only take into consideration to split statements in separate lines. You actually found a bug when printing to the device with PrintD and PrintDE procedures. Thank you!

 

Linux version was compiled and tested in Ubuntu 8.10. Linux version of Effectus still has some problems in compiling some of the example programs. I will look at it in more detail.

 

You can find Effectus also on http://www.atari-effectus.com/, http://www.atari-effectus.org/ and http://www.atari-effectus.net/

 

Use Refresh button to refresh cached pages if it happens the web browser renders old ones.

 

Version release 0.0.10:

 

- PrintF procedure support (currently only %I, %U and %E options supported)! Some examples:

 

PrintF("The integer number is %I.%E%E", n)

PrintF("The n=%I and i=%U.%E", n, i)

 

- Bitwise operators LSH, RSH, XOR, !, & supported. Some examples:

 

n==!2

n=n XOR 2

n==!n

n=n&40

n==&2

b=a LSH 1

b=a RSH 1

 

- MOD (modulus) arithmetics operation support. Example:

 

n = 10 MOD 4

 

- Fixed usage of PrintE(""), which works properly as empty string with new line (carriage return) character at the end of string. Print("") assembles and compiles to nothing.

 

- Additional ARRAY declaration syntax support (experimental for now) for predeclared variables. Example:

 

BYTE ARRAY values=[1 2 3 4 5 6 7]

 

Currently only one line declaration apply as correct syntax

 

- Fixed printing to the screen with PrintD and PrintDE procedure. It happened that comma character "," was not handled properly in string and resulted in

splited string, which showed only characters before "," character - Bug found by ascrnet, a member of AtariAge portal. Thank you!

 

- Fixed usage of INCLUDE statement. Main program and the included source file will be assembled in the directory where Effectus is run. The resulting assembled main code will not contain absolute path of the included file, because both files are generated in the same directory.

 

Some examples:

 

INCLUDE "lib_test1.eff"

INCLUDE "c:\projects\lib_test2.eff"

 

- Additional freedom in typing commands. Some example:

 

PrintE ("")

Position ( 1, 3 )

Graphics (7)

 

- Printfg runtime library procedure usage removed from assembling and compiling, because Printf procedure should have all of the needed functionality for printing to the screen, including text windows in graphics modes.

 

- Removal of unnecessary assembler code for TYPE declaration, if it is not used

 

; Handling TYPE variables

.var struct_ptr_var .word

 

- readme.txt documentation file updated

 

- Added examples showing new features

 

Greetings to all Atarians

Edited by Gury
Link to comment
Share on other sites

  • 2 months later...

hi Gury

 

I tested the latest version of effectus and still fails to print in Figure 2 how

; Demo Effectus
MODULE

PROC Main()
 INT i
 GRAPHICS(2)
 POSITION(5,5) 
 PRINTD(6, "hi, atariage")
 FOR i=0 TO 2
 DO
         PRINTE("hi, AtariAge........")
 OD
RETURN

 

:? Errore :

_str_buffer_8 .byte ''

demo.asm (29) ERROR: String error

 

org $3200

icl 'c:\effectus\lib\equates.asm'
icl 'c:\effectus\lib\common.asm'

.var i .word

; Demo Effectus

MAIN
Graphics #2
Position #5, #5
Read #$60, #9, #_str_buffer_8, #1
mwa #0 I
for_loop_1
jsr printf
dta c'hi, AtariAge........',$9b,0
inw I
ldx I
cpx #3
jcc for_loop_1
jmp *

.link 'c:\effectus\lib\runtime.obx'
.link 'c:\effectus\lib\graphics.obx'
.link 'c:\effectus\lib\printf.obx'
.link 'c:\effectus\lib\io.obx'

_str_buffer_8 .byte ''

run Main

 

greetings

Link to comment
Share on other sites

Hi ascrnet,

 

I tested your example and obviously comma (",") is not allowed in the string parameter of PrintD command. I will look into the problem and report when it is fixed.

 

Thanks Gury, I will keep trying and let you know if I find something strange.

 

greetings

Link to comment
Share on other sites

Hi, ascrnet!

 

Here is new version 0.0.13 of Effectus. Please try again to compile your programs above. Loops with directives DO OD should work now. I also implemented EXIT directive for escaping from loop statements, including FOR and WHILE. Check the Examples page for additional examples, where also your examples are included.

 

Also implemented is SCopyS command.

 

Greetings

Link to comment
Share on other sites

  • 3 months later...

I was wondering if there has been any Action! on the Effectus compiler lately?

 

-Jim

Hi Jim, sorry for my late reply. If I understand your question correctly, you wonder if there is any new development of Effectus? Of course, it will be as soon as I get some more time. January and February were/are terrible, because my occupation didn't permit any time for anything else in my free time. Too tired. I hope everything will return to normal soon.

 

Greetings

Link to comment
Share on other sites

Thanks for the reply...you answered my question. I only recently found out about effectus and noticed that the last update was in october. I know from my own expreience with projects that it is easy to get off onto something else and never finish it. I am looking for programming tools (cross compilers, cross assemblers, etc) for using with a planned project which is to re-create the Atari 800 in an FPGA. Action! was always a good fit for the 6502/Atari and was pleased when I found out somebody was working to that end. Good luck with the project.

 

-Jim

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...