------------------------------------------------------------------------------- Evolution of GEMA ------------------------------------------------------------------------------- Version 1.0 : First official release. Version 1.1 : Optimization, debugging. Version 1.2 : Relocation, segmentation managing. Version 1.3 : Linux portability, ehanced arithmetic processing. Version 1.4 : DJGPP 32-bit adaptation, cleaner source, optimizations. Version 1.4r: Macros and INCLUDE. Version 1.5 : Relocation functions debugged. Version 1.5r: ONCE directive, funny options. Version 1.6 : INCLUDE in shareware release, documentation reviewed and translated into english. Some new funny options were included. Version 1.6r: Now manages default 32-bits pages in protected mode. Version 1.7 : LOCK is now a prefix. New info message for PC-relative code. EXE signature fixed. DS.x are now faster. Fixed mistake between label and register names with underscores ( thanks to M.Furic ) . "--optimize" feature. Version 1.7r: Improved "--optimize". New "opt" directive. Version 1.8 : Recompiled with GCC 2.6.3 + New GO32 -> Faster and safer SHLD and SHRD are finally implemented. Version 1.8r: Idem. Version 1.9 : New directives to check the size of code in a segment : REAL, REALMODE, UNREAL, UNLIMIT, FLAT and SEGSIZE. Extended warnings. ';' support for non-independent comments. ALL opcodes from 8086 to P6 are now supported, including undocumented ones : AAM #, AAD #, SALC, ICEBP, INT01, UMOV, LOADALL, CMOV, RDPMC, UD and UD2. Version 1.9r: Idem + INT01/TRAP01 aliases fixed. Version 2.0 : Optimizations ( the parser is actually faster ) Absolute ASSUME. frm.s fixed. Little, but nasty bug with offsets fixed. Version 2.0r: Idem. Version 2.1 : Fixed backward BRA.S and warnings in quiet mode. Version 2.1r: Idem + Recompiled with DJGPP 2. Version 2.2 : First pass about 30% faster. Global optimizations. Version 2.2r: Idem. Version 2.3a: Lotsa internal improvements. Version 2.3b: New 3-passes optimizer / cross-references solver. Now performs backward and forward optimizations. "title" directive. Changes in command line options. Version 2.3c: Automatic third pass in case of floating opcode sizes. Improved verbose output. 486 optimizations. Optimal relocation table for better compression. Version 2.3 : No public release. Version 2.3r: Not released. Version 2.4 : Cleaner warnings/errors/misc. messages. push # fixed. Improved automatic optimizations like GenST/GenAM : null offsets removal, null branches replaced with nops, global short branches reduction, ... New directives for BSS segments. This release of GEMA is actually smart, clean and reliable compared to the previous ones. Version 2.4r: Idem. Version 2.5a: USE16/USE32/OPT directives. Peephole optimizations fixed. Long conditional jumps fixed. Version 2.5b: move.? a,addr & move.? addr,a optimized. Minor fixes. New release of ASM2GEMA, NO MORE IN THE PACKAGE. Available separately. Some changes in the documentations. Version 2.5c: Instructions like : "and.l #$ff,a" were equivalent to "and.l #-1,a" or "and.l #$ffffffff,a" . This is due to a bug in Hacker's View ( the disassembler I use to understand how Intel opcodes are working ) . Fixed. "mulu" was documented as a "mul" synonym, but not implemented. Fixed. No basic check was done in addressing modes for speed purposes. For instance, "(si+4)" gave no error nor warning. Fixed. Many thanks to Alexey Voinov for reporting these bugs. ':' operator changed ( see the documentation ) . Version 2.5d: Ehanced optimizations. Bug fixes. Unuseful "-a" option. Private release for The Party V. Version 2.5r: Idem. Version 2.6a: Added TRAP03/INT03. Mistakes in the documentation fixed. Optimization of conditional jumps fixed. Bpe/Spe bugs fixed. Added CWSDPMI beta 9. Version 2.6r: Not released yet. This release is an beta-version. Although I did lotsa tests, the generated code *MIGHT* be wrong when USE32 is enabled. If you find such bugs, please report them to me as fast as possible. When USE16 is enabled ( by default ), all should be reliable. The automatic optimizations may fail when crossed references implies variable- length blocks ( ie. ds.l label2-label1 ) . After some unsuccessful tries, GEMA disable the optimizations and restart from scratch in two passes. If "opt +o" is encountered in that case, it restarts until all is resolved. These features of automatic optimizations are still under development, as well as the ".OBJ" object files support. In that release, the "-c" flag is available, but the object support is not fully implemented yet. As some people had troubles in getting in touch with me, here are four e-mail addresses I should answer from : denis_r@epita.fr ( not denis_f ) j@nether.net root@the_one.epita.fr Last revision in date : The Party V, December 27th, 1995.