I have released a new version of Solar assembler.
You can get it here:
http://www.oby.ro/sol_asm/files/sol_asm_2009_10_23_v33_02.zip
And the manual is here:
http://www.oby.ro/sol_asm/docs/sol_asm_manual.htm
As always I welcome comments, feature requests and bug reports...
It has been a while since I have posted about it here so below you have a short overall description:
- it can assemble 16/32/64 bits instructions up to SSE 4.2 and virtualization extensions
- it has HLL primitives like: PROC/ARG/LOCAL, INVOKE, MACRO, .IF / .ELSEIF / .ENDIF, .WHILE, .REPEAT
- it runs on Windows, Linux, Unix, MacOSX and Solar_OS
- it can directly generate binary, PE32, DLL and PE64
- it generates OBJ for: OMF32, COFF32, COFF64, ELF32, ELF64 and MACHO32
- it generates listing and debug info
- syntax is close to MASM/TASM but with some serious differences (like use of [])
- pretty fast for large ASM projects
- it is free if used for making your own assembler or your own OS or for teaching and learning ASM
- it is closed source
The site for it is here: http://www.oby.ro/sol_asm/
Solar Assembler is written in Solar Assembler ;) and I have converted my other huge ASM projects to it, hence today Solar_OS and Hostile Encounter RTS are now also written in Sol_Asm.
Thanks Bogdan that's great! :U
What about the syntax highlight for RadAsm?
KetilO recently published a full package and I still can't see "SoloAsm.ini" in it. ::)
Hi Ficko,
I forgot to mention that an older but functional syntax highlighting for RadASM and a series of application templates are included in the Sol_Asm download. Check the RadASM_INI sub folder in the zip. You will find there the sol_asm.ini and other needed files.
AFAIK Ketilo did some improvements in latest RadASM for parsing Sol_Asm syntax... as you can see here: http://www.masm32.com/board/index.php?topic=12115.0
But I still have to integrate with my older INI and then maybe I can "push" an official Sol_Asm programming package towards Ketilo.
Anyway what you find inside the download should work ok.
I do use RadASM IDE every day with Sol_Asm and it works very well.
Cool! :U
Bogdan,
This is looking genuinely impressive, I just spent some time reading the manual and the capacity is starting to become very powerful. Shame I don't have a few spare lifetimes to learn all this stuff.
Bogdon,
Is there any chance of getting the manual in a download?
Wget.
Hi Bogdan,
Thanks for the new release :U
Oh, and I also forgot to mention that Vortex has made a lot of small but very instructive samples for Sol_Asm and his tools also support Sol_Asm.
You can get those samples in the downloads pages here: http://www.oby.ro/sol_asm/sol_asm_download_samples.htm
Or seek and find them (and newer versions) scattered all over the place in the Solar forums :D http://www.oby.ro/forum/index.php
Thank you Vortex ;)
Quote from: rags on October 25, 2009, 04:46:03 AM
Bogdon,
Is there any chance of getting the manual in a download?
The manual is made of a single HTML page exactly for easy grabing. Hence you could also "Save Page As..." or the equivalent in your browser when you are viewing the manual. Alternatively you could "Save Link As" with a right click on the manual link in the first post above.
But you are right, maybe I should make it available as a single zip download.
Quote from: hutch-- on October 25, 2009, 03:34:27 AM
Bogdan,
This is looking genuinely impressive, I just spent some time reading the manual and the capacity is starting to become very powerful. Shame I don't have a few spare lifetimes to learn all this stuff.
Thanks for your kind words Hutch.
And you never know how many spare lives you will have ;)
Anyway I think you (and a lot of other people) are already set up with MASM and MASM32 and if anything should happen to MASM then JWASM can save the day. However alternatives like Sol_Asm can be fun to test ride once in a while ;)
I created Sol_Asm as a result of too much energy pouring outside and I use it as an incentive towards everybody creating his/her own tools.
It is very funny to run completely on your own created tools. It gives a sense of independence and a touch or responsibility since you can not blame bugs on anybody else :D
:bg
Aha Bogdan, you may have a new monster in the wings, new ideas in an assembler are reasonably rare, many that have been around in the past were about 1990 MASM standard, your new one is shaping up to be the 2020 model, truly a tool of the 21st century.
What about a Vlad Tepes version, put the fear of God into them ?
Quote from: hutch-- on October 25, 2009, 10:54:17 AM
...
What about a Vlad Tepes version, put the fear of God into them ?
This statement made my day of good laughter. :cheekygreen: Maybe when it gets Beta :))
But I do not believe in using fear as a teaching tool... the God that is "feared" is no God at all.
As a side note:
==========
It is true that Vlad Tepes was kind of sadistic and his use of extreme fear and punishment created an environment of extreme honesty in our country for the short time that he was a king. It is said that you could leave gold coins on the street and NOBODY would dare to even touch it for weeks or months ... nobody would dare to steal or trick you for whatever reasons... not even the rich and powerfully ones.
BUT it is ALSO true that at the very moment Tepes was no longer a king... the people reverted to the old habits in a day or a few hours... and of course that everybody was after his head as a safety precaution.
Overall his actions together with a few other local stories resulted in the Dracula's myth and an endless series of vampire movies but no evolution in mankind.
Hence I think that it is better to use "incentives for the good people" in teaching. Make it so that the one that are good have a lot of advantages and the ones that are bad have no advantage at all ... and a lot of problems :D
IMHO it is more important to remove the advantages of doing the bad thing ...even if the offender is never found ... than it is to add more punishment to it.
Obviously Vlad Tepes did not agree with me :green
Quote from: hutch-- on October 25, 2009, 10:54:17 AM
:bg
Aha Bogdan, you may have a new monster in the wings, new ideas in an assembler are reasonably rare, many that have been around in the past were about 1990 MASM standard, your new one is shaping up to be the 2020 model, truly a tool of the 21st century.
...
I hope I can defeat the "monster inside" Sol_Asm and make it "more simple" while in the same time being more usefully.
My "ideas" for improving ASM compilers come from my experience with doing big applications in ASM and of course from a lifetime spent mostly as a programmer.
Hi Bogdan,
Thanks for your kind words and for your support.
Quote
I created Sol_Asm as a result of too much energy pouring outside and I use it as an incentive towards everybody creating his/her own tools.
It is very funny to run completely on your own created tools. It gives a sense of independence and a touch or responsibility since you can not blame bugs on anybody else :D
You said very nicely. Creating your own OS, the Solar OS is also a very important independance. Concerning your own OS, you can create your own specifications without dealing with unnecessary complications. Sometimes, I pull out my hair to understand some cryptic MS specifications looking like Hieroglyph.
Physicist Richard Feynman's quote :
QuoteWhat I cannot create, I do not understand.
Quote from: Vortex on October 25, 2009, 04:54:05 PM
Physicist Richard Feynman's quote :
"What I cannot create, I do not understand."
SO very true ... I completely agree.
With one addition of course :toothy : Create as much as possible from scratch ;).
Again a "side note" :
===============
For example you will learn something but not really much about computer design by using prefabricated kits and components in building your own computer. Or you can create your car from spare parts and kits but unless you create your own engine and/or parts you will not learn seriously about mechanics.
In the same way the "reuse of code" and "learning by copy and paste" is much less usefully than a full creation from scratch.
Of course some primitives must be learned by small simple examples and this is where teaching has it's glory ... but as soon as you are capable to fly on your own... spread your wings and "re-invent the wheel" for as many times as it takes. Invent small simple tests in level with your expertise in order to understand and learn new concepts. Always seek concepts first and implementations later.
Then compare your creation it with other prefabricated or available "wheels/code"... Test and compare in a "loop" and improve your design/implementation.
This way you will learn a lot more than by simply accepting the predefined "library of wheels designs". Your neuronal paths will improve and in time you will become able to design and improve almost anything and you will not even "know" how you did it ;)
Keep accepting code re-usability myths and use or copy paste in order to reach your target faster and easier and in time you will not evolve at all or become just another good "robot worker" but nothing more ...
You are truly "over" something only once you have created it from scratch... Now ... where did I put that FPGA kit for creating my own CPU before I die ? :cheekygreen:
BTW, a new version of Sol_Asm is avaialble here:
http://www.oby.ro/sol_asm/files/sol_asm_2009_10_25_v33_04.zip
It fixes a critical bug found by Vortex in structure initializations code and a minor bug in #store directive.
The manual for version 0.33.02 is still valid
I completely agree with you Bogdan.
I'll add that the best thing you can do to improve your programming projects is to work hard on your skills as a programmer. All the development methodologies in the world (Agile programming and the rest) cannot give you the confidence and the experience you get by learning things from scratch.
I am personally not at the level I want to be yet but I'm taking the work-hard no-surprises path and it's giving results.
:bg
Its probably a language/humour difference, the "monster" here is not the image of evil but a capacity so powerful that it puts the fear of God into lessor competitors. The idea of a "Vlad Tepes" version is an image of an all powerful conqurering version that leaves the opposition in awe of its power.
I must confess though, I have been a fan of good vampire movies all my life. Some are very poor but the good ones have a good feel to them. Parts of Romania have very interesting torrain which I find very interesting. My favourite version of Dracula is the Francis Ford Cupola version made in the early 1990s with Gary Oldman.
Quote from: hutch-- on October 25, 2009, 11:33:07 PM
... but a capacity so powerful that it puts the fear of God into lessor competitors. The idea of a "Vlad Tepes" version is an image of an all powerful conqurering version that leaves the opposition in awe of its power.
Yes, may be ... in 2020. :bg
I downloaded the recent version and tried one or two things:
; minimal test file
section "code" class_code
.entry _start
_start:
.if eax != 1 || ( ecx == 2 && ebx == 4 ) || ( esi > 1 && edi < 2 )
mov edx,3
.endif
nop
ret
The good thing is: it works. :U
The bad thing is hidden and requires a disassembly:
_start:
00000000: 83 F8 01 cmp eax,1
00000003: 0F 85 24 00 00 00 jne 0000002D
00000009: 83 F9 02 cmp ecx,2
0000000C: 0F 85 09 00 00 00 jne 0000001B
00000012: 83 FB 04 cmp ebx,4
00000015: 0F 84 12 00 00 00 je 0000002D
0000001B: 83 FE 01 cmp esi,1
0000001E: 0F 86 0E 00 00 00 jbe 00000032
00000024: 83 FF 02 cmp edi,2
00000027: 0F 83 05 00 00 00 jae 00000032
0000002D: BA 03 00 00 00 mov edx,3
00000032: 90 nop
00000033: C3 ret
This code generation probably isn't something which deserves "fear" or "awe" ... :eek
Quote from: japheth on October 26, 2009, 12:30:26 PM
... This code generation probably isn't something which deserves "fear" or "awe" ... :eek
I tried "-size" switch to defeat Japheth "sarcasm" :P but I got this:
00401027 |. 83F8 01 CMP EAX,1
0040102A |. 75 28 JNE SHORT 00401054
0040102C |. 90 NOP
0040102D |. 90 NOP
0040102E |. 90 NOP
0040102F |. 90 NOP
00401030 |. 83F9 02 CMP ECX,2
00401033 |. 75 0D JNE SHORT 00401042
00401035 |. 90 NOP
00401036 |. 90 NOP
00401037 |. 90 NOP
00401038 |. 90 NOP
00401039 |. 83FB 04 CMP EBX,4
0040103C |. 74 16 JE SHORT 00401054
0040103E |. 90 NOP
0040103F |. 90 NOP
00401040 |. 90 NOP
00401041 |. 90 NOP
00401042 |> 83FE 01 CMP ESI,1
00401045 |. 76 12 JBE SHORT 00401059
00401047 |. 90 NOP
00401048 |. 90 NOP
00401049 |. 90 NOP
0040104A |. 90 NOP
0040104B |. 83FF 02 CMP EDI,2
0040104E |. 73 09 JNB SHORT 00401059
00401050 |. 90 NOP
00401051 |. 90 NOP
00401052 |. 90 NOP
00401053 |. 90 NOP
00401054 |> BA 03000000 MOV EDX,3
00401059 |> 6A 00 PUSH 0
Which optimized the jumps but didn't take out the nops. :'(
Yes guys I am aware of this code size optimization issue and when the time comes I will remove the NOP's and improve HLL code generation. Currently it helps me debug the HLL primitives as it is.
And BTW contrary to popular belief many times the LONGER instructions encoding are faster (even if bloated) on Intel CPU's ;)
Japeth's sarcasm if welcomed, I do not mind it.... if he tests and finds some real problems / bugs in Sol_Asm the he helps even if he is ironic.
This "problem" is well known to me. Try without HLL .IF's (aka "pure" jumps) and you will see that Sol_ASM does remove the bloat when the -size command is given. The fact that HLL generated code is not yet shown in listing is documented in the manual. Again this will be fixed in future releases.
To save Japeth another known to me found: Sol_Asm does make some extra probably not needed passes (again not yet optimized) in this case.
As I have said before: "early optimizations are the root of all evil" and I do respect this concept.
I will optimize this issue near the "end of development" ie when all features are added, module relations are established and algorithms optimized (in the beta phase). Anyway it is pretty fast even without those optimizations ;)
Thanks for testing and reporting this Japeth...
Ficko do not worry, the NOP's will vanish in future releases.
BTW "fear" or "awe" is not what I seek. You should be in awe about your own creations and not about my own ;)
I think Hutch was referring to the fact that Sol_Asm has many improvements and new things when compared to "standard" assemblers like MASM/TASM.
FOR example the fact that it auto generates the PROTO from the PROC definitions later in source files, huge line sizes, "_" in numbers, multiple instructions on the same line, mini resource compiler/parser, the fact that it generates binary for OS development and PE32/64 without a linker ...etc ... stuff like this.
It should be clear that Sol_Asm is still under development and not all parts are finished or optimized yet.
Bug reports are welcomed...sarcastic or not :cheekygreen:
Hence if you find any other things that you do not like in Sol_Asm or new features that you would like to see implemented please feel free to express yourself.
That explains thanks.
:bg
I would not want Japheth to feel left out of it after the resurrection of WASM from the dead into a decent assembler again but I am not all that well versed in germanic history to pick an appropriate folk hero to model after. Now with his exensive knowledge of DE folk heros, a personality should not be all that hard to find, how about Bismarke (the polititian not the ship), Charlemaine, Attilla the Hun, we will leave out "Mein Feuhrer". You could even go with Martin Luther for having shaken the European world way back then.
Just be warned though, Vlad Tepes was very skillful and truly ruthless so just as you start to feel comfortable and relaxed in the late evening, he may appear and suck the life out of you. :P
Quote from: hutch-- on October 27, 2009, 01:55:15 AM
I am not all that well versed in germanic history to pick an appropriate folk hero to model after. Now with his exensive knowledge of DE folk heros, a personality should not be all that hard to find, how about (the polititian not
Bismarke - yes
Charlemaine - yes
Attilla the Hun - no, isn't regarded as "German" in Germany
Martin Luther - yes
"Mein Feuhrer" - yes :toothy ( it's "Fuehrer"!)
Missing:
Arminius ( "Battle of Teutoburg...")
Siegfried :toothy
Theodoric the Great
Otto the Great
Frederick Barbarossa
Frederick II
:bg
This is the one I forgot, Metternich. I did some modern European history at high school and Metternich was a very interesting and talented character. I left out both the "Fuehrer" and the "Kaiser" as they both flopped in the long haul.