flat assembler
Message board for the users of flat assembler.

Index > Projects and Ideas > Cross-platform, universal schematic development environment.

Author
Thread Post new topic Reply to topic
KostX



Joined: 19 Sep 2012
Posts: 41
KostX 14 Sep 2020, 18:58
I'm working on my own project called the Constructor. Main point of this is a simplification of a software development by visualization.

Once I've been working on a large project with thousands lines of code in assembler and I thought: All programmers starting learning any language from creating its schematic diagrams that visually show what the program has to do, so why don't I create such compiler that would let me to just build a schematic diagrams I need and then compile them into the ready executable module? Why not.

I've made some research in the internet and found out that such compilers are existing. Initially this idea has been appeared somewhere in '60s. And such software exist today but on my opinion, part of them is not pragmatic, another part is too oversimplified so it cannot unleash all the potential of the target platform. Third part found itself successful in game development and in 3D editors (I saw them in 3ds max).

So I decided to start writing my own, better version. This one must become a full functionality, cross-platform development environment wherein the software creation process is creating schematic diagrams from blocks with predefined CPU instructions, depending on target platform. I did a lot of job and not finished yet. I'm here to find confederates who ready to help me with my project.

Thanks in advance.
Post 14 Sep 2020, 18:58
View user's profile Send private message Reply with quote
bitRAKE



Joined: 21 Jul 2003
Posts: 4039
Location: vpcmpistri
bitRAKE 14 Sep 2020, 19:52
Intriguing idea!

Is it like Blockly meets UML?
Post 14 Sep 2020, 19:52
View user's profile Send private message Visit poster's website Reply with quote
KostX



Joined: 19 Sep 2012
Posts: 41
KostX 14 Sep 2020, 20:04
Yes, kind of. Take a screen shot of my program looking.[/img]


Description:
Filesize: 113.23 KB
Viewed: 6898 Time(s)

3.png


Description:
Filesize: 112.62 KB
Viewed: 6898 Time(s)

2.png


Description:
Filesize: 99.82 KB
Viewed: 6898 Time(s)

1.png


Post 14 Sep 2020, 20:04
View user's profile Send private message Reply with quote
AsmGuru62



Joined: 28 Jan 2004
Posts: 1620
Location: Toronto, Canada
AsmGuru62 14 Sep 2020, 20:16
I tried to make that same thing once, long ago. It got bulky and slow to create a useful code.
The system was able to create few types of blocks: sequence block, condition check (IF statement, basically), loop, variables block.
Then those things were connected with lines (mouse dragging mostly). Connected blocks become subroutines or functions, then sets of those plus some variables block become the object.
Anyhow, long story short - it quickly become too tedious to code in this monstrosity.
I realized, that it is way faster to just write code with help of some wizard-like interface,
or just have a cache of code fragments where you pick a fragment and with one click it will insert all lines of the fragment.

Just curios: what language you are using to do this?
When you say "cross-platform" -- do you mean different OS-es or different CPU-s? I am guessing both? If so, you should formalize all your blocks.
Formalizing means describing your code inside blocks with terms, which do not mention any CPU specifics (registers),
because if you mention r15 - it will not do well for x86, but OK for x64 and not good at all for ARM. You see?
And how do you optimize code?
Like if you have to load a register with same value in sequence of two code blocks -- you need to avoid the redundant load.

It is interesting project -- and looking great -- nice screens.
If you need any code to write -- I can help.

P.S. The secret of large project is just naming your functions properly: module_function.
Code:
    proc GarbageCollector_Allocate uses ebx ecx, BlkSize:DWORD
        ;
        ; ... your solution here ...
        ;
        ret
    endp
    
Post 14 Sep 2020, 20:16
View user's profile Send private message Send e-mail Reply with quote
KostX



Joined: 19 Sep 2012
Posts: 41
KostX 15 Sep 2020, 05:36
Quote:
Then those things were connected with lines (mouse dragging mostly). Connected blocks become subroutines or functions, then sets of those plus some variables block become the object.
Anyhow, long story short - it quickly become too tedious to code in this monstrosity.

I thought about that and what I became to: If connect both data and code lines, really, as you said, project becomes such as a "spiderweb". I'm not linked this way. On the other hand full denial of lines usage (as in scratch or blockly) makes project not so understandable. So I decided to connect with lines only these things that responsible for code. And all data setups through block parameters (see screen shot below).


How about values (variables)??? When compiler passes through scheme it can calculate distance from locations where some value used repeatedly. So, if value uses globally (at many locations withing whole project) in becomes a global varible. By access type these ones can be separated by read-only, read-write and uninitialized.
If value use within a function it becomes a local variable. If value uses between several instructions lines it stores in a register. Which register to use decides component library internal settings.


Quote:
When you say "cross-platform" -- do you mean different OS-es or different CPU-s?

Of course both.

Quote:
you should formalize all your blocks.

Each component from library links to its according operation file (.cso). Take a look at these directories:

\Configurations\Constructor script\Components\A_equal_B\A_equal_B__Operation.cso
\Configurations\Constructor script\Components\ShowMsg\ShowMsg__Operation.cso
\Configurations\Constructor script\Components\Terminate\Terminate__Operation.cso

\Configurations\Windows\Components\A_equal_B\A_equal_B__Operation.cso
\Configurations\Windows\Components\ShowMsg\ShowMsg__Operation.cso
\Configurations\Windows\Components\Terminate\Terminate__Operation.cso

Thus, when compilation performs, constructor passes through all blocks and links to data according to currently selected target platform (selected in bold).


Description:
Filesize: 92.88 KB
Viewed: 6881 Time(s)

4.png


Post 15 Sep 2020, 05:36
View user's profile Send private message Reply with quote
idle



Joined: 06 Jan 2011
Posts: 440
Location: Ukraine
idle 26 Apr 2021, 19:07
IDA has build [3d] graph option for code disassembly.
Stats, profiling? and fun.
And you are to do GIANT reverse job.

IF COND THEN DO visualisation into pseudo code, in fact.
The truth is that you are to spend years with the deal.

Anyway, interesting stuff.
Post 26 Apr 2021, 19:07
View user's profile Send private message Reply with quote
Display posts from previous:
Post new topic Reply to topic

Jump to:  


< Last Thread | Next Thread >
Forum Rules:
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.

Website powered by rwasa.