flat assembler
Message board for the users of flat assembler.

Index > Compiler Internals > How to download an older version of FASM ?

Goto page 1, 2  Next
Author
Thread Post new topic Reply to topic
shutdownall



Joined: 02 Apr 2010
Posts: 517
Location: Munich
shutdownall 13 May 2012, 19:53
Hi,

I wanted to know if it's possible to get an older version of FASM or in the concrete case an older specification of the FAS file format of version 1.69 ?
I think it has changed in newer version 1.70.

I don't want to update now to this version as I made many customized programming on the two versions for FASM-Z80 and FASM-ZX81 for retro programmers (not released yet but in a few weeks I think).

And I think the last functional updates are more or less useless for 8 Bit CPUs.

Thanks for help.
Maybe someone of you has it on the hard disk, would help to post the fas description. By the way, maybe it's a good idea to provide a version info in the fas documentation. Wink
Post 13 May 2012, 19:53
View user's profile Send private message Send e-mail Reply with quote
Tomasz Grysztar



Joined: 16 Jun 2003
Posts: 8349
Location: Kraków, Poland
Tomasz Grysztar 13 May 2012, 19:57
The fas documentation was intended to be version-independent. Note this section:
fas documentation wrote:
If header is shorter than 64 bytes, it comes from a version that does not support dumping some of the structures. It should then be interpreted that the data for missing structures could not be provided, not that the size of that data is zero.
The format of the particular structures does not change from version to version, but new structures may be added by new version and the simply header gets longer.

As for the old versions of fasm, you can find them on the old website.
Post 13 May 2012, 19:57
View user's profile Send private message Visit poster's website Reply with quote
shutdownall



Joined: 02 Apr 2010
Posts: 517
Location: Munich
shutdownall 13 May 2012, 20:11
I did read that but not sure if symbol references is a new feature added to fasm. Would be a good idea to add fas.txt somewhere to the sources. The link to the website didn't really help as 1.69 was not archived nor does the archive contain the manuals. Wink

I will try to interprete the manual myself but would be a better feeling to have a trustable documentation. Shocked
Post 13 May 2012, 20:11
View user's profile Send private message Send e-mail Reply with quote
Tomasz Grysztar



Joined: 16 Jun 2003
Posts: 8349
Location: Kraków, Poland
Tomasz Grysztar 13 May 2012, 20:14
The newer version of this documentation is intended to be more complete and corrected and I wouldn't really want you to use the older one, that's why it's previous stages are not archived.
If there was something there that wouldn't work correctly with older versions, it would be documented as well. The thing is: this document should a base for writing a tools that should work with all .fas files, no matter what version of fasm produced them.
Post 13 May 2012, 20:14
View user's profile Send private message Visit poster's website Reply with quote
shutdownall



Joined: 02 Apr 2010
Posts: 517
Location: Munich
shutdownall 13 May 2012, 20:50
Tomasz Grysztar wrote:
The newer version of this documentation is intended to be more complete and corrected and I wouldn't really want you to use the older one.


Okay, accepted. Very Happy


Tomasz Grysztar wrote:
The thing is: this document should a base for writing a tools that should work with all .fas files, no matter what version of fasm produced them.


You do not really believe this, don't you ? Cool

In fact I don't like to have separate command line tools as I integrate some useful ore needed functions directly in the IDE. So in that case wether previous nor newer versions would really benefit from it. But that's my personal philosophy of how things or tools have to work. Wink
Post 13 May 2012, 20:50
View user's profile Send private message Send e-mail Reply with quote
Tomasz Grysztar



Joined: 16 Jun 2003
Posts: 8349
Location: Kraków, Poland
Tomasz Grysztar 13 May 2012, 21:15
shutdownall wrote:
You do not really believe this, don't you ? Cool
I did think it through. The tools that come with fasm should work with any .fas produced by any version of fasm. The newly introduced high bit fields for values in old versions have simply value 0, so are not a problem.

The idea behind .fas was that it should be some standard format outputted by fasm, so when you follow the specification of this format, you should not have to care about what particular version produced it (though the header contains information about version if you really need it). Just like when you use linker to produce executable from .obj file, you do not expect that the .obj produced by new version of fasm will suddenly be different in such a way that your linker will refuse to work with it. There is a specification for .obj format and it does not depend on what version of what tool is used to produce it.

The same I wanted to have with .fas - I had to devise my own format only because none of the existing debug info format were capable of containing all the data fasm can provide and which can be useful for various purposes. Thus came the idea that fasm should have its own format and then external tools could be provided to produce any other debug info format out of it, when needed (just like objconv can be used to convert objects generated by fasm into format that it doesn't support).
Post 13 May 2012, 21:15
View user's profile Send private message Visit poster's website Reply with quote
shutdownall



Joined: 02 Apr 2010
Posts: 517
Location: Munich
shutdownall 14 May 2012, 15:10
Tomasz Grysztar wrote:

The same I wanted to have with .fas - I had to devise my own format only because none of the existing debug info format were capable of containing all the data fasm can provide and which can be useful for various purposes.


Yes - I agree in that point. FAS has many many data inside as I looked at the documentation. Even in which pass a label has been stored. That is weird but can offer some useful custom features.

In your example with the obj file - well it is not important which version (or which program) created it - every linker will accept it. BUT the object file definition does not change from version to version.
(didn't proove - just assume it)
Post 14 May 2012, 15:10
View user's profile Send private message Send e-mail Reply with quote
Tomasz Grysztar



Joined: 16 Jun 2003
Posts: 8349
Location: Kraków, Poland
Tomasz Grysztar 14 May 2012, 18:20
shutdownall wrote:
In your example with the obj file - well it is not important which version (or which program) created it - every linker will accept it. BUT the object file definition does not change from version to version.
(didn't proove - just assume it)
But that's the version of object file specification then, and this is a different version than the version of the tool itself. If such distinction is needed, then usually specification provides information how you should recognize different versions and what kind of data can you expect in each case.
Post 14 May 2012, 18:20
View user's profile Send private message Visit poster's website Reply with quote
revolution
When all else fails, read the source


Joined: 24 Aug 2004
Posts: 20292
Location: In your JS exploiting you and your system
revolution 01 Mar 2023, 17:18
Tomasz Grysztar wrote:
As for the old versions of fasm, you can find them on the old website.
Sadly now 404. Sad
Post 01 Mar 2023, 17:18
View user's profile Send private message Visit poster's website Reply with quote
revolution
When all else fails, read the source


Joined: 24 Aug 2004
Posts: 20292
Location: In your JS exploiting you and your system
revolution 01 Mar 2023, 17:29
Post 01 Mar 2023, 17:29
View user's profile Send private message Visit poster's website Reply with quote
bitRAKE



Joined: 21 Jul 2003
Posts: 4016
Location: vpcmpistri
bitRAKE 02 Mar 2023, 17:42
Post 02 Mar 2023, 17:42
View user's profile Send private message Visit poster's website Reply with quote
revolution
When all else fails, read the source


Joined: 24 Aug 2004
Posts: 20292
Location: In your JS exploiting you and your system
revolution 02 Mar 2023, 19:05
Some zip links:
1999-05-04: unreleased version 0.90
1999-07-01: unreleased version 1.00
2000-06-19: release 1.0
2000-07-01: release 1.01
2000-07-06: release 1.02
2000-07-19: release 1.03
2000-08-10: release 1.04
2000-08-16: release 1.05
2000-08-23: release 1.06
2000-10-07: release 1.07
2000-11-13: release 1.08
2001-01-04: release 1.09
2001-03-22: release 1.10
2001-06-25: release 1.11
2001-08-23: release 1.13
2001-10-17: release 1.14
2001-11-17: release 1.20
2002-01-18: release 1.30
2002-02-03: release 1.31
2002-03-06: release 1.32
2002-04-19: release 1.34
2002-05-06: release 1.35
2002-05-22: release 1.36
2002-06-12: release 1.37
2002-07-08: release 1.39
2002-08-04: release 1.40
2002-11-14: release 1.41
2002-12-05: release 1.42
2003-01-10: release 1.43
2003-01-19: release 1.44
2003-02-06: release 1.45
2003-04-09: release 1.46
2003-06-28: release 1.47
2003-07-24: release 1.48
2003-09-16: release 1.49
2003-12-08: release 1.50
2004-01-31: release 1.51
2004-04-03: release 1.52
2004-07-22: release 1.53
2004-08-04: release 1.54
2004-09-12: release 1.55
2004-09-27: release 1.56
2005-01-19: release 1.57
2005-02-12: release 1.58
2005-03-12: release 1.60
2005-06-14: release 1.62
2005-08-08: release 1.64
2006-05-07: release 1.66
2009-06-13: release 1.68
2012-04-17: release 1.70
2012-04-30: release 1.70.01
2012-05-22: release 1.70.02
2012-06-29: release 1.70.03
2012-09-21: release 1.71.00
2012-09-23: release 1.71.01
2012-09-26: release 1.71.02
2012-09-27: release 1.71.03
2012-10-10: release 1.71.04
2012-10-15: release 1.71.05
2012-11-22: release 1.71.06
2012-12-23: release 1.71.07
2013-03-08: release 1.71.08
2013-03-30: release 1.71.09
2013-04-03: release 1.71.10
2013-07-09: release 1.71.11
2013-08-04: release 1.71.12
2013-09-09: release 1.71.13
2013-10-25: release 1.71.14
2013-10-26: release 1.71.15
2013-10-30: release 1.71.16
2014-01-27: release 1.71.17
2014-02-02: release 1.71.18
2014-02-09: release 1.71.19
2014-02-27: release 1.71.20
2014-05-27: release 1.71.21
2014-09-28: release 1.71.22
2014-10-21: release 1.71.23
2014-10-27: release 1.71.24
2014-11-03: release 1.71.25
2014-11-12: release 1.71.26
2014-11-18: release 1.71.27
2014-12-01: release 1.71.28
2014-12-05: release 1.71.29
2014-12-07: release 1.71.30
2014-12-08: release 1.71.31
2015-01-04: release 1.71.32
2015-01-09: release 1.71.33
2015-02-17: release 1.71.34
2015-02-25: release 1.71.35
2015-02-25: release 1.71.36
2015-03-03: release 1.71.37
2015-03-09: release 1.71.38
2015-03-11: release 1.71.39
2015-10-19: release 1.71.40
2015-10-21: release 1.71.41
2015-10-22: release 1.71.42
2015-10-26: release 1.71.43
2015-10-27: release 1.71.44
2015-10-31: release 1.71.45
2015-10-31: release 1.71.46
2015-11-09: release 1.71.47
2015-11-18: release 1.71.48
2015-12-06: release 1.71.49
2016-01-30: release 1.71.50
2016-02-08: release 1.71.51
2016-05-13: release 1.71.52
2016-05-21: release 1.71.53
2016-06-09: release 1.71.54
2016-09-18: release 1.71.55
2016-09-19: release 1.71.56
2016-09-26: release 1.71.57
2016-12-08: release 1.71.58
2017-01-20: release 1.71.59
2017-02-05: release 1.71.60
2017-05-04: release 1.71.61
2017-05-08: release 1.71.62
2017-06-21: release 1.71.63
2017-10-20: release 1.72
2017-11-24: release 1.73.00
2017-11-25: release 1.73.01
2017-12-26: release 1.73.02
2018-04-15: release 1.73.03
2018-04-30: release 1.73.04
2019-01-03: release 1.73.05
2019-01-04: release 1.73.06
2019-01-30: release 1.73.07
2019-01-31: release 1.73.08
2019-02-17: release 1.73.09
2019-04-05: release 1.73.10
2019-04-19: release 1.73.11
2019-05-19: release 1.73.12
2019-07-14: release 1.73.13
2019-07-30: release 1.73.14
2019-08-01: release 1.73.15
2019-08-04: release 1.73.16
2019-11-10: release 1.73.17
2019-11-14: release 1.73.18
2019-11-28: release 1.73.19
2019-11-29: release 1.73.20
2019-12-05: release 1.73.21
2020-02-09: release 1.73.22
2020-04-09: release 1.73.23
2020-04-29: release 1.73.24
2020-08-20: release 1.73.25
2021-01-26: release 1.73.26
2021-01-27: release 1.73.27
2021-09-16: release 1.73.28
2021-12-23: release 1.73.29
2022-02-21: release 1.73.30
Post 02 Mar 2023, 19:05
View user's profile Send private message Visit poster's website Reply with quote
revolution
When all else fails, read the source


Joined: 24 Aug 2004
Posts: 20292
Location: In your JS exploiting you and your system
revolution 02 Mar 2023, 19:30
None of the github zip files have an executable, or any of the examples, that are included in the files hosted on the download page.

Someone starting from zero with fasm still needs flatassembler.net, or another site, hosting the original zips.
Post 02 Mar 2023, 19:30
View user's profile Send private message Visit poster's website Reply with quote
revolution
When all else fails, read the source


Joined: 24 Aug 2004
Posts: 20292
Location: In your JS exploiting you and your system
revolution 03 Mar 2023, 04:05
Also none of the github zip files have any of the IDE code, the includes, or macros.

win32ax.inc (et. al.), fasmd & fasmw not included.
Post 03 Mar 2023, 04:05
View user's profile Send private message Visit poster's website Reply with quote
bitRAKE



Joined: 21 Jul 2003
Posts: 4016
Location: vpcmpistri
bitRAKE 03 Mar 2023, 06:07
By combining the current WHATSNEW.TXT with the 1.60 version we have brief feature landscape to choose from.
Post 03 Mar 2023, 06:07
View user's profile Send private message Visit poster's website Reply with quote
revolution
When all else fails, read the source


Joined: 24 Aug 2004
Posts: 20292
Location: In your JS exploiting you and your system
revolution 03 Mar 2023, 15:29
I tried to recreate the executable from "2000-06-19: release 1.0" with v1.73.08. It almost gets there, but there are some changes.

First some preliminary work is needed.

Step 1: unzip and un-upx the original published fasm.com (32002 bytes). UPX claims to exactly decompress .com files.

Step 2: Create a small compatibility prefix file for v1.73 to account for changes in the spec from 23 years ago.
Code:
irp j,ja,jb,jc,je,jg,jl,jo,jp,js,jz,jae,jbe,jge,jle,jmp,jna,jnb,jnc,jne,jng,jnl,jno,jnp,jns,jnz,jpe,jpo {
        macro j args \{
                match byte, short \\{
                        j args
                \\}
        \}
}
irp v,  Ah,Bh,Ch,Dh,Eh,Fh,\
        A0h,A1h,A2h,A3h,A4h,A5h,A6h,A7h,A8h,A9h,AAh,ABh,ACh,ADh,AEh,AFh,\
        B0h,B1h,B2h,B3h,B4h,B5h,B6h,B7h,B8h,B9h,BAh,BBh,BCh,BDh,BEh,BFh,\
        C0h,C1h,C2h,C3h,C4h,C5h,C6h,C7h,C8h,C9h,CAh,CBh,CCh,CDh,CEh,CFh,\
        D0h,D1h,D2h,D3h,D4h,D5h,D6h,D7h,D8h,D9h,DAh,DBh,DCh,DDh,DEh,DFh,\
        E0h,E1h,E2h,E3h,E4h,E5h,E6h,E7h,E8h,E9h,EAh,EBh,ECh,EDh,EEh,EFh,\
        F0h,F1h,F2h,F3h,F4h,F5h,F6h,F7h,F8h,F9h,FAh,FBh,FCh,FDh,FEh,FFh,\
        AF0Fh,BA0Fh,D9DEh,E0DFh,FFFFh,FFFFFh,FFFFF0h { v equ 0#v }
include 'fasm.asm'    
This changes "jcc byte ..." to "jcc short ..." and makes symbolic equates for the un-prefixed hex numbers.

Step 3: Create symbolics links for the longer names used in the source, which DOS would have silently truncated.
Code:
ln -s expressi.inc source/expressions.inc
ln -s preproce.inc source/preprocessor.inc
ln -s assemble.inc source/assembler.inc    
Step 4: Assemble. And it succeeds. The output is 31995 bytes, seven bytes shorter.

There are 5 differences. One difference encodes one extra byte, four other differences encode eight fewer bytes.
Code:
129c129
<      14c:     2e 0f 01 16 88 02       lgdtw  cs:0x288
---
>      14c:     2e 66 0f 01 16 89 02    lgdtd  cs:0x289
190c190
<      1fc:     68 ff ff                push   0xffff
---
>      1fd:     6a ff                   push   0xffff
969c969
<      a21:     66 69 c9 0a 00 00 00    imul   ecx,ecx,0xa
---
>      a21:     66 6b c9 0a             imul   ecx,ecx,0xa
1928c1928
<     16db:     0f 84 7e 00             je     0x175d
---
>     16d8:     74 7e                   je     0x1758
7852c7852
<     5924:     0f 84 7f 00             je     0x59a7
---
>     591f:     74 7f                   je     0x59a0    
Looking more closely at the first.
Code:
system.inc:
;...
        lgdt    pword [cs:GDTR]         ; load GDT register
;...
GDTR dw 2*8-1                           ; limit of GDT
     dd ?                               ; linear address of GDT
;...    
The other four differences are size optimisations.
Post 03 Mar 2023, 15:29
View user's profile Send private message Visit poster's website Reply with quote
revolution
When all else fails, read the source


Joined: 24 Aug 2004
Posts: 20292
Location: In your JS exploiting you and your system
revolution 03 Mar 2023, 20:35
The eldest version of fasmw I can find is v1.41. I hope that is just because my DDG-fu is poor, and that older archives do still exist.

V1.41 contains files dated 2001-12-03 (e.g. FASMW.ICO). Which would suggest the earliest version of fasmw might have been v1.30.
Post 03 Mar 2023, 20:35
View user's profile Send private message Visit poster's website Reply with quote
Tomasz Grysztar



Joined: 16 Jun 2003
Posts: 8349
Location: Kraków, Poland
Tomasz Grysztar 04 Mar 2023, 10:28
The 1.41 was indeed the first version of FASMW IDE, but it reused some of the files from the earlier "Assembler Workplace" project, these are the roots going back to 2001 (see also my story about HDOS, which gives a bit more context).

revolution wrote:
Someone starting from zero with fasm still needs flatassembler.net, or another site, hosting the original zips.
This reminds me of a old idea, that I should have made a simple assembler in C, that would provide just enough features to be able to assemble fasm 1 to provide a jump-start on systems that only have a C compiler available. Or, if wrote fasmg in C++ as has been sometimes suggested, it could provide a similar ramp. But I did not. However you can jump-start either fasmg with fasm or fasm with fasmg if needed.
Post 04 Mar 2023, 10:28
View user's profile Send private message Visit poster's website Reply with quote
revolution
When all else fails, read the source


Joined: 24 Aug 2004
Posts: 20292
Location: In your JS exploiting you and your system
revolution 04 Mar 2023, 14:18
Good. I found the v1.40 announcement. It makes no mention of a GUI. Smile

I think an interpreted language might be better than a compiled HLL. Perhaps even bash (ash, sh, etc.) is a good choice. Not because it is great for things like this, but because it is ubiquitous and accessible. Or for non-nix systems perhaps BASIC is a better choice. An old Win95 or DOS machine can run BASIC.

It doesn't have to be fast or efficient, it's only got one job to do, running for a one time purpose. More important is that anyone can be confident with how it works and can see that it produces the proper output.


Last edited by revolution on 04 Mar 2023, 17:45; edited 1 time in total
Post 04 Mar 2023, 14:18
View user's profile Send private message Visit poster's website Reply with quote
bitRAKE



Joined: 21 Jul 2003
Posts: 4016
Location: vpcmpistri
bitRAKE 04 Mar 2023, 15:30
I've been thinking about writing fasmg in LLVM IR (or one of the higher-level abstraction like MIR) - to make it available for all the backends supported by LLVM.
Post 04 Mar 2023, 15:30
View user's profile Send private message Visit poster's website Reply with quote
Display posts from previous:
Post new topic Reply to topic

Jump to:  
Goto page 1, 2  Next

< 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.