-
Notifications
You must be signed in to change notification settings - Fork 0
/
history
1464 lines (1417 loc) · 79.9 KB
/
history
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
vasm history
=============
- 1.8j (31.12.20)
o New CPU backend for the PDP-11 architecture.
o Fixed alignments in relocated-org blocks within a section.
o 6809: 16-bit branch with a negative distance of 127 bytes (-130 encoded)
was erroneously optimized to 8-bit branch (-129 encoded). Fixed.
o 6809: .dpage directive conflicts with .dpage section in std-syntax and
was renamed to .direct.
o 6809: Support label differences in immediate addressing modes, which
generate a pc-relative relocation.
o m68k: Fixed inappropriate cpu-type errors, when using directives or
macros starting with "mc", "mcf" or "ac".
o m68k: Illegal opcode extensions should also be reported in Devpac-
compatibility mode. Illegal opcode extensions for unsized instructions
are still ignored with -devpac.
o mot-syntax: pushsection and popsection directives.
o mot-syntax: msource directive to control source level debugging within
a macro (submitted by Soren Hannibal).
o mot-syntax: if1, if2, ifp1 directives for compatibility with a warning.
o oldstyle-syntax: org $addr works again for Z80.
- 1.8i (28.09.20)
o New CPU backend for 6809, 6309 and 68HC12.
o New output module "cdef" to write all absolute symbols as a series of
#define directives for inclusion in a C source.
o Do not read a source file with the same name from the CWD, when the
real source is actually located in a sub directory!
o Show an error when no numerical term follows a base-prefix.
o Do not show expression-evalulation errors before the final pass
(e.g. division by zero).
o New option -nomsg= to disable specific informational messages.
o Define an internal symbol depending on the host file system in use
(__UNIXFS, __AMIGAFS, __MSDOSFS).
o Fixed crash when printing errors from files with an absolute path.
o m68k: New option -extsd to allow small data with 020 extended addressing
modes.
o m68k: Disabled most of the new MOVE.L #x,Dn optimization from V1.8h for
ColdFire, which doesn't support .W and .B operations.
o m68k: Fixed encoding of ([...],ZRn,...).
o m68k: Fixed PFLUSHR immediate addressing mode.
o m68k: Some PMOVE reg,<ea> erroneously allowed immediate and PC-relative
addressing modes as destination.
o m68k: Allow A0 and A1 as small data base registers (near, -sdreg).
o m68k: External small-data symbol references may have a signed addend.
o jagrisc: Add more predefined condition codes. Now vasm supports the
same condition codes as the SMAC assembler.
o 6502: Fixed branches to external labels.
o 6502: New directive EZP. Like EQU, but use advises zero page addressing.
o 6502: -opt-branch can now also translate/optimize between BRA and JMP.
o ARM: Fixed a problems with auto-rotated immediate values. Now all
possible solutions should be found.
o ARM: Fixed oscillating optimization for ADR/ADRL (-opt-adr).
o ARM: Fixed handling of string/data directives with a single character.
o ARM: Fixed MSR status register bit mask (patch by Luna).
o mot-syntax: -devpac compatibility mode allows dots ('.') in labels (-ldots).
o mot-syntax: Fixed crash when reading a label field including '\' and
followed by a non-identifier character.
o oldstyle-syntax: -ast allows * to start comments in the first column.
o oldstyle-syntax: -i now also works for instructions with no operand.
o oldstyle-syntax: -ldots allows '.' within identifiers.
o oldstyle-syntax: added inline and einline directives from mot-syntax.
o oldstyle-syntax: added FCS directive, which is like FCC but sets the
MSB of the last character.
o madmac-syntax: Added missing .offset and .abs directives to start an
offset-section.
o std-syntax: Added .pushsection and .popsection directives.
o bin-output: Added support for Apple DOS binaries, Dragon DOS binaries
and Tandy Color Computer machine language files.
o vobj-output: Make some backends support larger sections sizes than
their target address allows.
- 1.8h (18.04.20)
o Reworked absolute ORG sections.
o -pic no longer reports references to undefined symbols.
o New option -pad=<value> can be used to define a different padding value
than zero for alignments and for filling gaps between absolute sections.
o Fixed alignment directives. Now also alignments which are not a power
of two are allowed (but probably not supported by all object file
formats).
o m68k: New optimizations for BAsm compatibility: MOVE.L #n,Dn is
transformed into a combination of MOVEQ and SWAP, ADD.W or NEG.W.
o m68k: New optimization flag for size, even when speed suffers. It will
optimize for example MOVE.L #x,Dn to MOVEQ #x>>n,Dn + LSL.W #n,Dn.
o m68k: Fix some situations where an absolute label from an ORG section
should be treated as a simple absolute value (e.g. MOVEQ).
o m68k: New option -nodpc to disallow direct encoding of absolute PC
displacements (also set automatically with -devpac compatibility).
o m68k: Added internal symbols _MOVEMBYTES and _MOVEMREGS for BAsm
compatibility.
o 6502: New directive ZPAGE, to declare a relocatable symbol as being
located in the zero-page, so vasm will use ZP-addressing, even on
external symbols.
o 6502: Allow 32-bit data directives.
o 6502: New option -bbcade for compatibility with the BBC ADE assembler,
contributed by Garry Marshall.
o z80: New option -intel-syntax switches to the old Intel 8080 syntax.
Contributed by Mark Jones.
o std-syntax: .org within a section allows an optional argument to define
a fill-value.
o mot-syntax: A SECTION directive with a single argument is interpreted
as section type when the selected output format does not support
section names (e.g. aout, tos, xfile). Otherwise the type defaults
to code, using the given argument as section name.
o mot-syntax: register list directives (REG, EQURL) also accept a
previously defined register list symbol.
o mot-syntax: Fix segfault/out-of-memory when a macro-argument enclosed in
< ... > is missing the '>'.
o mot-syntax: Allow comment-character directly attached to a macro directive.
o mot-syntax: RORG allows an optional argument to define a fill-value.
o mot-syntax: Only allow valid identifiers for macro names.
o mot-syntax: Fixed string expressions as macro arguments.
o mot-syntax: New directives db, dw and dl for ArgAsm, BAsm, HX68, Macro68,
MaxonAsm, OMA, ProAsm, Cape compatibility. They do not exist in PhxAss-
or Devpac-compatibility mode.
o oldstyle-syntax: The addend in the abyte directive is now a modifier,
where the special symbol ._ works as a placeholder for each expression
from the line.
o oldstyle-syntax: macro definitions and repetitions with -dotdir were
not correctly recognized.
o oldstyle-syntax: Fixed string expressions as macro arguments.
o oldstyle-syntax: New directives fi and str, contributed by Garry Marshall.
o oldstyle-syntax: New directives dsect and dend to implement offset-sections.
o madmac-syntax: Fixed string expressions as macro arguments.
o bin-output: option -atari-com may be used to output Atari 6502 COM files.
o output-hunk: Alignment directives behind DX are allowed.
- 1.8g (04.10.19)
o Do not print informational messages when generating dependencies.
o New option -depfile to specify a file name for the dependency output.
Code generation may happen in parallel in this case.
o Include the compile directory in the path, when printing error messages.
o Treat a subtraction of a label from a constant as constant, when the
label is from an absolute ORG section.
o m68k: -opt-allbra makes sure that branch-optimization is enabled.
o z80: "ld (BC/DE/HL),abs" is an illegal addressing mode.
o mot-syntax: SECTION directive with a single argument is interpreted as
section-type when the output format is "tos". Otherwise the type
defaults to CODE.
o mot-syntax: In devpac-compatibility mode allow '@' in the middle of labels.
o mot-syntax: -phxass compatibility mode allows dots ('.') in labels (-ldots).
o mot-syntax: Added support for Devpac IIF directive.
o output-hunk: Fixed LINE debug hunk output (-linedebug). Now it can
deal with code from multiple sources and the line numbers for
executing macros and repetitions are correct.
o output-hunk: New option -hunkpad=<code> selects the padding code for
code sections to achieve 32-bit alignment. Default to 0x4e71 (NOP)
for M68k.
- 1.8f (10.06.19)
o New option -wfail makes vasm return with an error code not only for
errors but also for warnings.
o 6502: Added missing WDC65C02 instructions (-wdc02): STP and WAI.
o m68k: Warn about DIVxL.L with identical quotient and remainder registers.
o m68k: Do not optimize or translate PC-relative addressing modes when
the referenced symbol is in a different section.
o m68k: RTD operand should be signed.
o m68k: Automatic optimization of absolute to base-relative addressing
(-sd option) must only be done when the target address is between offset
0 and 65535 in the small data section.
o z80: Forbid ixh/ixl operands on one side with h/l on the other.
o mot-syntax: Structure directives (RS, SO, FO) without an offset-expression
are not allowed in Devpac-compatibility mode (-devpac).
o mot-syntax: __LINE__ represents the correct line number again, after it
had been broken in the last version.
o mot-syntax: New directive DX for ProAsm/Barfly compatibility. Used to
create DataBss space in an executable file. Otherwise identical to DS.
o mot-syntax: New option -cnop=<code> sets a two-byte code for padding
CNOP-alignments. Defaults to 0x4e71 for M68k.
o output-hunk: Make sure all unsupported relocations in hunk-executables
are reported. Do not generate an executable with missing relocs.
o output-hunk: Do not pad a code section with 0x4e71 when skipping
DataBss contents at this point (-databss with -Fhunkexe).
- 1.8e (28.12.18)
o New option -dwarf automatically generates line debug information for
source level debugging in DWARF V2 or DWARF V3 format.
o New output module for Sharp X68000 Xfile executables. Can be selected
with the -Fxfile option.
o Repeatedly included files are only loaded once into memory.
o m68k: Avoid wrong branch-optimization info messages with -opt-allbra.
o 6502: Fixed LDA (zp,X) in 65C02 mode (-c02).
o 6502: -wdc02 enables the WDC65C02 extensions, like RMB, SMB, BBR, BBS.
o 6502: Support for Hudson Soft HuC6280 (new option -6280).
o 6502: New directive SETDP to set the current zero/direct-page address
for optimizations from abs to zp addressing modes.
o x86: Fixed crash with SWAPGS, when not supported by current cpu.
o std-syntax: Fixed potential buffer overflow when parsing macro arguments.
o output-hunk: Always try to include the full absolute source-path when
writing LINE debug hunks (-linedebug option).
- 1.8d (20.08.18)
o Repeat-loops with a single line generated a malformatted listing file.
o m68k: Recognize (PC) addressing mode and transform it into (0,PC).
o m68k: Only "fpu 1..7" may enable FPU code generation.
o m68k: -kick1hunks also prevents optimizing from absolute to 32-bit
PC-relative.
o ARM: Fixed instruction alignment in Thumb mode, which was broken since
1.8b (introduction of -noialign option).
o ARM: Fix for immediate operands like cmp r0,#'A' not working properly in
thumb mode (provided by Peter Petterson).
o PPC: tlbld is available as general PPC instruction again.
o z80: SBC addressing modes IX,ss and SBC IY,ss do not exist.
o z80: EX (SP),HL is not supported by GBZ80, but SRL is.
o mot-syntax: Report garbage at end of line for DC directives.
o mot-syntax: Labels with a double colon are automatically exported (xdef).
o mot-syntax: Allow '?' within identifiers, in Devpac-compatibility mode.
o madmac-syntax: Report garbage at end of line for DC directives.
o std-syntax: Fixed \@ (unique id) in macros, which was broken since 1.7h.
o vobj-output: Prevent crash when referencing undefined local symbols.
- 1.8c (15.03.18)
o Relocated ORG blocks within a section were not recognized, when their
start address was 0.
o The count in repeat-directives is always unsigned, even when given as
a negative value.
o Check for target address space overflows.
o Fixed crash when undefining non-existing register symbols.
o A redefined label is no longer a warning, but an error.
o ARM: Fixed compile-error from last release.
o vobj-output: Fixed uninitialized symbol index for internal/local symbols.
o oldstyle-syntax: New directive ROFFS to set the program counter relative
to the start of the current section.
- 1.8b (30.12.17)
o Option -noialign disables the automatic instruction alignment.
o m68k: New Apollo Core instructions (core >=4035.jic), provided by
Henryk Richter.
o m68k: Referencing absolute-short labels and optimizing labels into
absolute short addressing mode is allowed, when the label resides in
an absolute ORG section.
o jagrisc: Fixed MOVE PC,Rn instruction.
o oldstyle-syntax: Internal symbol __RPTCNT can be used as iteration counter
in the inner repeat loop.
o oldstyle-syntax: Numeric absolute symbol expansion is supported for macro
parameters of the form \<symbol>.
o vobj-output: Ignoring internal/local symbols does not work. Now we
create and use section symbols as a relocation reference.
- 1.8a (13.08.17)
o Increased number of fast-optimization passes from 50 to 200, as
very large sources (> 60000 lines), with lots of branches to optimize,
may still have optimization possibilities left after 50 passes.
o Repeat loops with an iterator symbol over an arbitrary sequence of values.
o m68k: New option -sd and directive OPT ON to enable optimizations of
absolute references to the small data section into a base register
relative addressing mode.
o m68k: New option -opt-jbra and directive OPT OB to convert all absolute
jumps to external labels into 32-bit PC-relative branches (68020 and up).
o m68k: OPT O+ in Devpac compatibilty mode does not enable PC-relative
optimizations (an explicit OPT A+ is needed).
o m68k: New Apollo Core instructions: PMULA, PMULH, STOREC, UNPACK1632.
o m68k: -m68020up option no longer includes Apollo Core.
o m68k: Devpac OPT Ln (with n=0,1,2,etc. for Atari) is recognized,
although it has no effect at the moment.
o m68k: Suppressed index registers ZRn, which are explicitely written in
the source, are no longer optimized away.
o PPC: -m option to select the CPU model starts working. By default the
instruction set of a 32-bit PPC (G2, G3, G4) with AltiVec is supported.
o x86: Floating point constants (.float, .double) are supported.
o mot-syntax: Optional offset and length arguments for INCBIN
(contributed by Andreas Larsson).
o std-syntax: New directives for gas compatibility: .irp and .irpc.
o bin-output: Fixed another sign-problem while padding between sections.
o hunk-output: Print source line for undefined symbols, when generating
an executable.
o vobj-output: Ignore all internal/local symbols, except "*tmpNNNNNNNN*",
which is required for certain relocations.
- 1.8 (16.05.17)
o External references in ORG or RORG sections are allowed.
o Option -depend only prints relative include file names, while the new
option -dependall prints all included file names, also with absolute paths.
o m68k: Support for Apollo Core 68080 and AMMX ISA.
o m68k: MSP, ISP and MMUSR are no valid 68060 control registers.
o 6502: Fixed potential segfault during zero-page optimization (new since
last version).
o jagrisc: Fixed SHLQ instruction.
o mot-syntax: Make NREF directive work for PhxAss compatibility. Allows
optimization of absolute references to base-relative.
o std-syntax: Labels ending on '$' are only local when all preceding
characters are digits.
o madmac-syntax: Fixed .long directive (which only aligned to even bytes).
o oldstyle-syntax: New options -i (ignore everything in the operand after a
blank), -noc (no C-style constant prefixes) and -noi (no intel-style
constant suffixes).
o oldstyle-syntax: Z80 supports multiple directives or instructions per
line, separated by a ':' character.
o oldstyle-syntax: Fixed parser problem with nested repeat/endrepeat blocks.
o output-hunk: -kick1hunks must not forbid base relative relocs and
references. It was supported by some 1.3 linkers (blink for example).
- 1.7h (14.02.17)
o Implemented a dynamic line buffer. No limitations on line lengths anymore.
o Octal escape sequences are limited to a maximum of three digits.
o Allow assembler text output (echo, printv) in offset sections.
o Print a warning for initialized data in a bss-type section. This already
worked in the past (1.2c and later), but has been lost somewhere.
o Some single-character labels and symbols will be rejected (depending
on the syntax module).
o -maxerrors=0 should print all errors in the source.
o Print expressions in the listing file and the test output in decimal and
hexadecimal form.
o m68k: Immediate- and PC-relative destination addressing modes for 68851
PMOVE are not allowed. PMOVE ea,PCSR doesn't exist.
o 6502: Perform zero-page optimization with a known label from an absolute
section.
o std-syntax: Fixed problem with parentheses in character constants.
o oldstyle-syntax: New option -org=<address> to set the absolute base
address of the program from the command line.
o oldstyle-syntax: Implemented some listing file directives, but without
any function yet: nam, subttl, page, space.
o bin-output: Fixed output section sorting, which didn't work with some
implementations of qsort().
o elf-output: Fixed external references in stabs.
o elf-output: Use a hash table for ELF symbols to speed up the output.
o hunk-output: Optimization to make it faster with many sections.
o test-output: Fixed crash when printing stabs without a value.
- 1.7g (02.11.16)
o Avoid a crash or internal error in some output modules, when an equate
refers to an undefined (imported) symbol.
o m68k: Optimizing/translating to 68020+ addressing modes for MOVEM didn't
work. For example MOVEM (40000,A0) was not automatically translated into
a bd32 addressing mode, but had to be explicitely written as (40000.l,A0).
o m68k: Optimizing MOVEM was not attempted, when using a register list
symbol in one operand and a label in the other.
o m68k: Fixed -opt-movem & -opt-speed optimization of MOVEM with two
registers, which saw a wrong instruction size and moved following labels.
o aout-output: Instructions with more than one relocation were no longer
supported since V1.7f.
- 1.7f (17.09.16)
o Print a warning when a constant is not representable using the target
data type.
o Show warnings or errors when an expression overflows the backend's
address data types.
o Warn about overflows caused by negative expressions in space directives.
o New option -chklabels makes vasm issue a warning when a label conflicts
with a mnemonic or directive name.
o Reworked internal relocation representation.
o m68k: Base-displacement addressing modes and suppressed registers are
allowed for CPU32. Just memory-indirect is illegal.
o m68k: Added FJcc mnemonics for GNU-as compatibility (-gas option).
o PPC: Added complete support for 403, 405, 440, 460, Book-E, e300 and e500
instruction sets.
o 6800: Fixed a bug which suppressed command line options for syntax- and
output-modules.
o 6800: Support for 6801/6803 compatible CPUs added (contributed by
Adrien Destugues).
o ARM: Thumb-mode [PC,#imm] and [SP,#imm] addressing modes were not
recognized.
p ARM: Fixed thumb-mode SP-adjustment instructions: ADD SP,#<9-bit unsigned>
and SUB SP,#<9-bit unsigned> (missing).
o ARM: External subroutine calls in thumb-mode with BL were broken.
o x86: Fixed determining the operation size when last register is %DX.
o x86: 32-bit only instructions failed, when selecting a 32-bit cpu using
the -m command line option.
o x86: Avoid Illegal Relocation error for calls and jumps in absolute mode.
o std-syntax: Data directives do no longer enforce natural alignment, for
compatibility with GNU-as! Use the -align option to keep the old behaviour.
o std-syntax: '0f' is another allowed float-constant prefix for GNU-as
compatibility.
o std-syntax: .stabs should support escape-characters in its string-field.
o std-syntax: Support progbits and nobits section type arguments for ELF
compatibility.
o mot-syntax: Retain the possibility to use multiple ORG directives and
output a real binary file, as before V1.7e. Only an ORG directive
after a SECTION directive is now relocated within that section.
o mot-syntax: Added IFMI (=IFLT) and IFPL (=IFGE).
o mot-syntax: Fixed problems when macro arguments are followed by blanks
and the -spaces option is given.
o mot-syntax: New directives inline and einline, to define an isolated block
for local labels.
o mot-syntax: New directives ifmacrod and ifmacrond to conditionally assemble
a block when a macro is defined or undefined (compatible with the same
directives on the Barfly assembler).
o madmac-syntax: Make ORG behave like in mot-syntax.
o vobj-output: The byte-offset to a relocation now always defines the
base for all relocation calculations (e.g. PC-relative).
o vobj-output: For little-endian the bit position in a byte of a reloc-field
is now counted from right to left. You will need at least vlink V0.15b to
link more complex little-endian relocations (e.g. ARM).
o hunk-output: -keepempty prevents the assembler from deleting empty sections.
o elf-output: -keepempty prevents the assembler from deleting empty sections.
- 1.7e (12.03.16)
o Ability to print the source line also in output module error messages.
o Current PC symbol in absolute code regions was erroneously relocated to
the section's base address.
o Make sure that labels from absolute code regions are not relocated.
o m68k: Fix for a bug introduced in last version: fmovem list,(An) and
fmovem list,(d,An) were no longer recognized as valid for M68k FPUs.
o PPC: Fixed mtvscr instruction, which uses the vB field instead of vD.
o ARM: Accept the new SVC mnemonic as an alias for SWI.
o ARM: Fixed macros. Previously only three characters for a macro name were
allowed. Qualifiers are not allowed on ARM macros.
o std-syntax: Permit the '$' as start character and in the middle of a
label (note: a terminating '$' still defines a local label!).
o std-syntax: A missing last macro argument no longer causes an error
message, but is replaced by a default value (when defined) or an empty
string.
o std-syntax: .org directive defines the offset from the current section's
start address when it appears within a section (GNU-as compatibility).
o mot-syntax: ORG directive can be used within any normal section to define
a block of code relocated to an absolute start address.
o mot-syntax: Numeric absolute symbol expansion is supported for macro
parameters of the form \<symbol> or \<$symbol> (hexadecimal value).
o madmac-syntax: Removed the -rorg option, which is the default behaviour
now.
o oldstyle-syntax: The special macro argument \@ is replaced by an
underscore, followed by a six-digit number again, as before V1.7c.
o tos-output: Check for overflows in relocation fields.
o aout-output: Fixed a crash since last version, when embedding absolute
code regions in a section.
- 1.7d (05.10.15)
o New option -depend to print the list of file dependencies for the
assembled source with the given options and conditions.
o New output module for Motorola srecord format, contributed by Joseph
Zatarski. It can be selected with the -Fsrec option.
o m68k: Replace all short-branches, except BSR, which have a zero distance
by a no-operation instruction. Now we use LEA (A6),A6 for no operation
as NOP has a special meaning for certain 68k models.
o m68k: A zero width in bitfield instructions is accepted. It is equivalent
to a width of 32 and used in some sources.
o m68k: New option -gas enables GNU-as specific mnemonics and additions.
68020/68881 is selected by default.
o m68k: New option -sgs to enable & as an additional immediate operand
prefix (SGS assembler).
o m68k: New option -no-fpu to ignore any FPU directives or options.
o m68k: Support immediate register list masks also for FMOVEM.
o m68k: jbra/jbsr are always converted to branches, when the selected CPU
supports 32-bit branches (gas compatibility).
o tr3200: Add data relocations. Fix PC-relative RJMP instruction.
o ARM: Accept an additional operand after an immediate constant to specify
the even rotate-count (0-30). Usually vasm does that automatically.
o mot-syntax: The symbol __LINE__ always contains the current line number.
o std-syntax: Add .even directive.
o std-syntax: Besides 0f also allow 0r as a floating point constant prefix.
o aout-output: Fixed common symbols.
o aout-output: Implemented stabs support.
- 1.7c (15.05.15)
o Complete redesign of the internal macro handling, which gives each
syntax module more possibilities for individual macro features.
o New syntax module: madmac, which tries to be compatible to the Atari
Madmac assembler syntax, used for 6502, 68000 and Jaguar RISC targets.
o New CPU backend for the virtual Trillek TR3200 CPU (known from 0x10c).
o Allow arithmetic operations with more than one label from absolute ORG
sections (like label1|label2). Support also depends on cpu backend and
should work at least in data for most backends now.
o Stop parsing a file at CP/M EOF character (0x1a), as seen in some sources.
o No longer allow redefining a symbol, defined by an equ/equiv directive,
with a set-directive.
o Fixed problems with escape character sequences in strings inside a
macro definition, when syntax module supports escape characters.
o m68k: In MULx.L Dn,Dl the Dh bits (bit 0-2, 2nd word) are undefined. Most
assemblers set Dh=Dl, similar to Dr=Dq in DIVx.L. So should we.
o m68k: New option -regsymredef allows redefinition of register symbols
while parsing the source.
o m68k: Fixed "OPT 0" in PhxAss compatibility mode (broken since V1.7),
which made all branches 16-bit size.
o m68k: Register lists defined by REG, EQURL, FREQ, FEQURL must not be
redefinable.
o PPC: Support for floating point data constants.
o jagrisc: Added absolute and relative 5 bit source operand relocations.
Fixed relative JR relocations.
o jagrisc: Fixed (R14+Rn) addressing mode.
o jagrisc: New JRISC specific directives: GPU, DSP, REGEQU, EQUR, REGUNDEF,
EQURUNDEF, CCDEF, CCUNDEF (madmac/smac compatible).
o z80: Fixed RST (again), when referencing labels from an absolute section.
o mot-syntax: New option -allmp makes all 36 macro arguments available, also
in standard vasm mode (no PhxAss or Devpac compatibility required).
o mot-syntax: New option -warncomm to warn about blanks in the operand
field, which may start an unwanted comment.
o mot-syntax: CNOP fills the padding words with NOP instructions in an
M68k code section.
o mot-syntax: The optional third argument of the SECTION directive may be
written as a numerical constant to define any memory attributes (hunk
format only).
o mot-syntax: New directive WEAK, to declare a symbol having weak binding,
for those output formats which support it.
o mot-syntax: New directive COMMON, to create a common symbol.
o mot-syntax: Made PRINTT and PRINTV directives more compatible to AsmOne.
o mot-syntax: Fixed RS.x without operand (same as RS.x 0).
o std-syntax: The standard GNU-as macro syntax, with named arguments,
default values and qualifiers, is supported now. Macro names became
case-insensitive.
o std-syntax: Directives are case-insensitive.
o std-syntax: New optional, non-standard, third argument for the .section
directive defines target specific memory attributes (currently hunk
format only).
o std-syntax: .b/.w/.l extensions do not belong to an identifier, when
the CPU is M68k.
o std-syntax: Directives to define floating point constants in data:
.float, .single and .double.
o std-syntax: .equiv directive. Works like .set and .equ, but cannot be
redefined.
o aout-output: Absolute ORG sections are appended to a .text section.
Support for Jaguar, which uses MID 0.
o bin-output: Sort sections by their start address before writing them.
o hunk-output: Align M68k code sections with NOP instructions.
o hunk-output: Supports any memory attributes in objects and executables.
o hunk-output: Warn about unsupported weak symbols.
o hunk-output: Fixed illegal memory access with unreferenced common symbols.
o hunk-output: Automatically generate short relocation hunks (HUNK_DREL32)
in executables, when possible and not forbidden by a -kick1hunks option.
o hunk-output: Support for 32-bit PC-relative relocations in executables
(available since AmigaOS3.0).
o tos-ouput: Warn about unsupported weak symbols.
o elf-output: Add support for jagrisc (EM_JAGRISC = 0x9004). This is an
unofficial definition done by the Jaguar scene.
o aout-output: For M68k use the SUN010 or SUN020 MID, depending on the
highest cpu type being used in the source.
- 1.7b (28.12.14)
o Fixed stack overflow and crash when using recursively defined symbols.
Bug was present since introducing new 128-bit and float expressions in 1.7.
o Issue a warning when a symbol was declared as external, but nowhere
referenced in the source.
o m68k: Do not optimize MOVEM to MOVEA or MOVE when predecrement or
postincrement addressing mode is used with a register from the list.
o m68k: The Devpac directive OPT X (xdebug) works now as expected for
hunk-format object files and for TOS executables.
o m68k: In Devpac-compatibility mode (-devpac) the __LK symbol is predefined
and reflects the output file type: 0 = Atari executable, 3 = Amiga object,
4 = Amiga executable, 99 = all others which are unknown to Devpac.
o m68k: MOVEM #list,-(An) must not reverse the bit mask automatically, but
expect an already reversed one.
o m68k: BTST #n,#m is illegal.
o m68k: LEA (d32,An),Am translation to MOVE.L/ADD.L stopped working with
V1.6c. Fixed again.
o ARM: TEQP, TSTP, CMNP and CMPP were missing for AA2.
o ARM: Fixed recognition of addressing mode and condition codes with
instructions written in upper case.
o 6502: New option -c02 to enable 65C02 instructions.
o mot-syntax: In PhxAss- and Devpac-compatibility mode only the directives
which are known by the emulated assembler are supported.
o mot-syntax: RS, SO and FO offset directives use an aligned offset in
Devpac-compatibility mode or when the -align option is given.
o std-syntax: The optional third argument of .balign/.p2align/.align is now
really supported and defines a maximum number of padding bytes.
o std-syntax: New directives: .balignw, .balignl, .p2alignw, .p2alignl,
.zero, .swbeg.
o std-syntax: .word should rather define 16-bit than 32-bit constants.
o std-syntax: .local followed by .comm should be the same as .lcomm.
o oldstyle-syntax: Fixed recognizion of .equ/.eq/.set/.mac/.macro with
-dotdir option.
o hunk-output: New option -linedebug automatically generates a LINE DEBUG
hunk for the input source.
o aout-output: Always generate an external reference to a weak symbol,
even when the symbol is defined.
o elf-output: Always generate an external reference to a weak symbol,
even when the symbol is defined.
- 1.7a (25.08.14)
o Addend for "external_label-current_section_label" PC-relative relocation
was not calculated correctly.
o Do not generate relocations with absolute ORG sections. External
references from such a section are illegal.
o Fixed PC-relative references between absolute ORG sections.
o Defining a macro with the same name as a directive or mnemonic no longer
causes and error, but a warning. Like most other assemblers vasm will
ignore this macro definition.
o New option -unsshift to make right-shift operations unsigned (logical),
depending on the CPU's target address type.
o Fixed some problems caused by signed sizes and section offsets.
o Fixed -x option again. It only printed the first undefined symbol.
o When specifying a listing file with -L <name> the source was not
included. The default is now to include it. Can still be controlled
by list/nolist directives.
o Allow printing of multiple optimization messages for a single source
line (-showopt).
o Fixed infinite loop with huge octal and binary values, which got a decimal
point or exponent.
o Automatically rearrange nodes from "const-symbol-symbol", so that
"symbol-symbol" is evaluated first, as it may yield a constant.
o Fix compiling with pre MSVC 2013 versions (missing strtold()).
o m68k: -opt-fconst, which is enabled in vasm-default mode since 1.6a,
was broken for double to single precision conversions, as it moved
following labels by 4 bytes.
o m68k: -devpac compatibility includes unsigned right-shifts.
o m68k: NEAR CODE from PhxAss is supported and translates all absolute
JMP/JSR with an external symbol into 16-bit PC-relative addressing mode.
o m68k: New option -sc to set small code mode (same as NEAR CODE directive).
o mot-syntax: SECTION with a single argument defaults to a code section,
except when the name is "data" or "bss".
o hunk-output: New option -kick1hunks to use only those hunk types and
u external reference types which have been valid at the time of Kickstart
1.x for compatibility with old assembler sources and old linkers.
o tos-output: A 16-bit aligned section size must also show up in the header.
o tos-output: New option -monst for writing Devpac MonST-compatible
symbols.
- 1.7 (02.07.14)
o Labels in an absolute ORG section have no longer any restrictions
regarding arithmetic and logical operations on them.
o New expression evaluation module. Now also supports floating point and
huge integer (128-bit) expressions in all backends.
o New CPU backend for the Jaguar GPU and DSP RISC processors.
o The path to the input source file is automatically added to the list
of include paths to search.
o Fixed a serious bug with offset sections. Labels from those sections
were still treated as real labels, instead of expressions (offsets),
until the final pass.
o The value of the repetition symbol (REPTN) was reset to -1 when
recursively calling a macro or entering an include file inside a repetition.
o The number of 50 fast optimization passes may not be enough in some
cases. So this phase will be extended by another pass whenever a pass
included no modifications which made the code larger.
o Exit immediately when the maximum number of errors has been reached and
not before printing an additional error.
o Escape code handling in string constants is no longer the default. It
has to be explicitely enabled using the -esc option. Although, it is
still the default in the std syntax module.
o 6800: Added some missing 6800 instructions (addb, dec).
o 6800: Labels are always addressed in extended mode. Use the < prefix
to override that.
o 6800: Accept lda and ldb as an alias for ldaa and ldab.
o z80: Data definitions in parentheses, although unnecessary, should be
allowed.
o m68k: Never try to optimize JMP/JSR (label,PC).
o m68k: Allow bad instruction aliases, like movea when the destination is
not An, but warn about it.
o m68k: New option -guess-ext makes the assembler accept a bad size extension,
as long as the instruction is unsized or there is just a single size
possible. This is the default setting for PhxAss- and Devpac-mode.
o m68k: The size extension of branch instructions is completely ignored,
also when illegal, if -guess-ext and -opt-allbra are specified (-phxass).
o m68k: The PhxAss OPT directive must not reset the -opt-allbra flag. It is
always enabled in PhxAss compatibility mode.
o ARM: Supports 64-bit data.
o mot-syntax: New directives import (same as xref) and export (same as xdef)
for Atari PureC/AHCC compatibility.
o mot-syntax: FAIL is no longer fatal and displays a normal user error
in the final pass.
o mot-syntax: Labels terminated by a colon must not start on the first
column of a line.
o mot-syntax: FEQU directive to assign floating point expressions to a symbol.
o mot-syntax: EQU.<size> and =.<size> to assign floating point expressions
in PhxAss compatibility mode.
o std-syntax: .comm and .lcomm will now use the default alignments from
the current CPU backend.
o std-syntax: .err is no longer fatal and displays a normal user error in
the final pass.
o std-syntax: .abort is no longer a fatal error, but terminates assembly
at that point with a normal error.
o oldstyle-syntax: FAIL is no longer fatal and displays a normal user error
in the final pass.
o oldstyle-syntax: Supports intel-style constant suffixes (like 'h' to
indicate hexadecimal).
o oldstyle-syntax: A terminating colon on a label is also allowed before
an equate, set or macro directive.
o oldstyle-syntax: Added IFD and IFND (same as IFDEF and IFNDEF).
o tos-output: Fixed a potential problem allocating 0 bytes, when there are
no reloctions in a file.
- 1.6c (09.02.14)
o New resolver strategies to prevent infinite oscillating optimizations.
After 50 passes the resolver switches into a safe mode, where only a
single instruction per pass is optimized. When there are still
instructions left, which alternate between different sizes, then optimization
will be disabled for them. This was mainly a problem with aggressive M68k
branch optimizations.
o New CPU backend for the 6800 family, contributed by Esben Norby.
Currently the 6800 and the 68HC11 models are supported.
o Quit with a fatal error when the internal line buffer (4096 bytes)
overflows, before overwriting innocent memory.
o Forbid structure recursion with a fatal error. Otherwise all available
memory will be allocated.
o Limit the maximum number of macro recursion levels to 1000. Can be
adjusted by specifying the new -maxmacrecurs=<n> option.
o Always converts path separators for the assembler's host OS, defined by
AMIGA, ATARI or MSDOS in the Makefile. Default is Unix.
o Expression parser: binary And, Or, Xor operators have now higher priority
than multiply and divide (same as Devpac).
o Also warn about auto-aligned data.
o m68k: Range check with unsigned operands didn't work when the value
is negative (for example ADDQ #-10,D0).
o m68k: Allow outer displacement as first expression in front of the
brackets for Devpac compatibility: (od,[bd,An,Xn])
o m68k: Warn about bad displacement positioning when not in Devpac
compatibility mode.
o m68k: OPT X (xdebug) is ignored now, as it has very different meaning
in Devpac-Atari and Devpac-Amiga.
o m68k: Allow a wrong size extension in Devpac mode, as long as the correct
size can be guessed (e.g. moveq.w -> moveq.l).
o m68k: Support OPTC directive and __OPTC symbol in PhxAss-compatibility mode.
o m68k: BASEREG may be reused for the same register without ENDB in PhxAss-
compatibility mode.
o m68k: ENDB doesn't not need to specify a register in PhxAss-compatibility
mode, as long as it is unambigious.
o m68k: An equate symbol used as displacement in a BASEREG operand, which
is defined later in the source, no longer generates an error.
o m68k: Removed useless optimization for LINK An,#0 into PEA/MOVE.
o m68k: Optimizing ASL #2,Dn into two ADDs is only allowed with -opt-lsl,
because it modifies the V-flag.
o m68k: Generally all optimizations which result in multiple instructions
need an additional -opt-speed option from now on.
o mot-syntax: Allow blanks in the operand and within expressions, when
-phxass mode is enabled.
o mot-syntax: In -phxass mode '*' comments can be used everywhere, but
have to be preceded by a space-character (blanks, tabs, etc.).
o mot-syntax: For compatibility with other assemblers (PhxAss, Barfly, etc.)
the SO directive will also manipulate the RS-counter (and the __RS symbol)
and vice versa.
o mot-syntax: -phxass mode defines the symbol _PHXASS_ with value 2, so it
is possible to differentiate it from the original (value 1).
o mot-syntax: When no output name is given in PhxAss mode, a default name
is constructed from the input name (name or name.o).
o oldstyle-syntax: Some new directives, used in 68HC11 sources: bsz, rmb, zmb,
fcb, fcc, fdb.
o bin-output: Fixed misdetection of overlapping sections, caused by signed
section origins (e.g. >= 0x8000 on 6502).
- 1.6b (01.05.13)
o Display a warning when instructions are automatically aligned. This might
help to find missing align directives and avoid bugs.
o Display an error when a macro name conflicts with a mnemonic or directive.
o Expression symbols (equates) which are based on label are exported as
an offseted label from the same section as the base.
o m68k: Fixed gas-compatible mnemonics: JB<cc> -> J<cc>.
o m68k: Fixed ColdFire ISA-B optimization "AND.L #$ff/#$ffff,Dn ->
MVZ.B/W Dn,Dn", which always used a D0 source register.
o m68k: Scale factor 8 is allowed for ColdFire chips with an FPU.
o PPC: Fixed relocations, which had been broken since 1.6a.
o x86: Fixed data relocations, which had been broken since 1.6a.
o mot-syntax: A comma in the comment field of an operand-less instruction
had been misinterpreted as an operand separator.
o mot-syntax: Allow labels on the same line as an ENDC/ENDIF directive.
o mot-syntax: Print the source and line number of the corresponding IF
directive, when the ENDC/ENDIF directive is missing.
o std-syntax: Allow labels on the same line as an .endif directive.
o std-syntax: When # is used as the first non-blank character on a line,
then it can still start a comment, even for architectures which define
a different comment character (e.g. ARM, M68k).
o tos-output: Fixed uninitialized relocation pointer, which could lead to
illegal memory accesses.
- 1.6a (02.04.13)
o The vasm core supports structure definitions. A structure name can
either be used as a directive to initialize data, or in expressions
as the structure's size. Its fields are available as local labels to
the global structure name, defining the field offsets.
(Originally contributed by Romain Giot, modified by Frank Wille.)
o The vasm core supports the creation of offsets sections. The contents
of such a section is not included in the output file and their labels
can be referenced as absolute offset symbols.
o Fixed -x option, which didn't display undefined symbols when there had
been other errors in the source.
o m68k: Division optimization (-opt-div, directive opt od) must not try
to optimize signed divisions, except with 1/-1. DIVS rounds towards
zero, while ASR rounds downwards.
o m68k: Fixed immediate extended precision operands, which load "0.0" or
"-0.0".
o m68k: -opt-fconst is enabled by default, except in Devpac and PhxAss mode.
Fixed a bug which prevented optimization of extended precision 0.0 to
single precision.
o PPC: Register symbols are no longer exported into most object formats.
o z80: Forbid operations between different index registers, like ix/iy
pairs and ld ixl,(ix+0) (fixed by Romain Giot).
o z80: Improved detection of indirect operands in parentheses (fixed by
Romain Giot).
o oldstyle-syntax: STRUCT and ENDSTRUCT directives for supporting
structures.
o mot-syntax: Devpac-compatible CARGS directive.
o mot-syntax: New directive OFFSET. Devpac-compatible, but additionally to
Devpac it allows any directive or instruction within such a section.
o vobj-output: Output was broken since 1.6, when relocations based on
the current-pc symbol had been used.
- 1.6 (29.12.12)
o New instruction/operand parser. Can handle instruction availability,
depending on selected cpu-type, and optional operands in common code.
o Now using the faster djb2 hash table algorithm. Tuned hash table sizes
for PPC, M68k and x86. Bigger symbol and macro hash tables.
o Symbol distances from two different sections are supported, when the
second symbol comes from the current section, by using a pc-relative
relocation with an appropriate addend.
o The vasm core supports named arguments of the form "\identifier". It
can be enabled by syntax modules on demand.
o "\@?" can be used in a macro to push the current id below the top item
on the stack.
o "\()" can be used to separate a macro name from the subsequent context.
o Macro and repeat directives in comments could have caused some confusion.
o Support for relocated origin blocks (RORG-blocks) in absolute output,
which assign all labels in this block to a different base address,
although the code is still physically placed at the original address.
o Only produce a listing file when -L option is given. A nolist directive at
the end of the source will not prevent writing of a listing file anymore.
o Do not include internal assembler symbols in the object file.
o m68k: B<cc> *+$80 is now optimized to B<cc>.B as well, because the
instruction will be 2 bytes smaller after that. Fall back to *+$7e
optimization, when we need too many passes due to oscillating instruction
sizes. Usually caused by an alignment directive before the destination label.
o m68k: Optimize CMP.W #0,An to TST.L An (TST.W An was wrong!).
o m68k: New optimization: DIVU/DIVS.L #x,Dn can be optimized into LSR/ASR
when x is a power of 2 and between 2 and 256. Negative values are handled
by appending a NEG.L. DIVU/DIVS.W #1 is supported for ColdFire ISA_B/C by
MVZ.W. DIVS.W #-1 by using NEG.W first. The new option is called -opt-div.
o m68k: New optimization: ANDI.? #-1,<ea> is optimized to TST.? <ea>.
ANDI.L #$ff/$ffff,Dn is optimized to MVZ.B/W Dn,Dn for ColdFire ISA_B/C.
o m68k: New optimizations: ORI #0,<ea> and EORI #0,<ea> are optimized to
TST <ea>. AND #0,<ea> is optimized to CLR <ea>, when allowed.
o m68k: New optimization: LEA 0,An is optimized to SUBA.L An,An.
o PPC: Reworked cpu selection.
o PPC: Reworked operand parser and evaluater. mfdec is now recognized.
o z80: Fixed crashes and internal errors when an expression creates an
illegal relocation.
o z80: Operands in parentheses were not allowed for defining data.
o z80: A '#' prefix selects hexadecimal radix, as used in some assemblers.
o z80: Fixed a bug with using invalid register-pairs in some addressing modes.
o z80: Added the hidden instruction OUT (C),0 (contributed by Romain Giot).
o 6502: Improved detection of indirect addressing modes. (expr)+(expr) and
(expr)+expr are no longer indirect.
o mot-syntax: PhxAss-compatibility mode allows blanks in operands.
o mot-syntax: Ignore AsmOne AUTO directive.
o mot-syntax: Although ignored, load, jumpptr and jumperr should accept
non-constant expressions.
o mot-syntax: Internal symbol REPTN can be used as iteration counter in
the inner repeat loop.
o mot-syntax: New directives: IFB and IFNB to check whether a macro argument
is blank or non-blank.
o oldstyle-syntax: Enabled support for named macro arguments.
o oldstyle-syntax: Fixed detection of endmac, endmacro, endrep and endrepeat.
o oldstyle-syntax: Conditional directives also allow non-constant expressions,
like label-differences. But the expression has to evaluate in the first
assembler pass.
o oldstyle-syntax: assert directive, displays an error message when the
expression is false.
o oldstyle-syntax: Allow access to any local symbol in the source by using
the syntax "global_name.local_name". The '.' is otherwise forbidden in
the middle of a label now.
o oldstyle-syntax: New directives rorg, rend, phase, dephase for a relocated
label origin.
o oldstyle-syntax: print a warning when alignment is too big.
o oldstyle-syntax: LIST and NOLIST directives to control listing file output.
o oldstyle-syntax: INCBIN got two optional arguments to skip bytes at the
beginning of a file and to restrict the size of the included data
(contributed by Romain Giot).
o oldstyle-syntax: New directive abyte, which adds a constant offset to
each byte written (contributed by Romain Giot).
o oldstyle-syntax: New directive ifused (contributed by Romain Giot).
o std-syntax: Implemented .abort, .err and .fail directives.
o std-syntax: Allow non-constant expressions for conditional directives,
with the same restrictions as in the other syntax modules.
o std-syntax: print a warning when alignment is too big.
o std-syntax: .list and .nolist directives to control listing file output.
o std-syntax: Enabled support for named macro arguments.
o std-syntax: New directives: .ifb and .ifnb to check whether a macro
argument is blank or non-blank.
- 1.5c (10.12.11)
o Define a __VASM symbol to identify the assembler.
o Reworked sources to use typedefs from stdint.h where appropriate.
o Fixed vobjdump to regard all information from an object as unsigned,
except symbol values and reloc addends and masks.
o m68k: Assign the current cpu/fpu/mmu type to the __VASM symbol.
o m68k: Define the __G2 symbol in Devpac compatibility mode.
o ARM: Fixed U-bit handling and sign in load/store addressing modes
dealing with labels (which are translated into PC-relative).
o ARM: The I-bit in halfword transfers must be flipped.
o z80: Fixed error message when 8-bit data is out of range (-128 .. 255).
o z80: Allow the offset to be an external symbol in ld (ix+offset).
o z80: Accept JP HL besides JP (HL), as most (?) assemblers do for
convenience.
o std-syntax: Section ".text","acrwx" is default when no .section or
.org directive is present.
o oldstyle-syntax: Section ".text","acrwx" is default when no SECTION or
ORG directive is present.
o oldstyle-syntax: A section directive without attribute defaults to
"acrwx".
o oldstyle-syntax: New option -autoexp to automatically export all
non-local symbols.
- 1.5b (05.08.11)
o m68k: Fixed -no-opt option.
o m68k: Fixed the (hopefully) last possibility for oscillating branch
optimizations. Example: bra lab; bra lab; lab:
o x86: Enabled experimental 64-bit support. The new option -m64 allows the
usage of 64-bit instructions. New directive .code64.
o 6502: Fixed ASL, ROR and ROL with addressing mode ABS,X (by Mauricio
M. Lucero).
o 6502,z80: Support /256 %256 and &255 operations with labels and generate
the appropriate relocations (Dominic Morris).
o z80: Bad relocations are now flagged by the correct error message.
o elf-output: Support for ELF64 and x86_64 relocations.
- 1.5a (01.04.11)
o Fixed -nocase option to make it no longer modify external symbol names,
which then broke linking.
o Made IfDef and IfNotDef directives work with local symbols.
o Additionally to the standard \@ to insert a unique ID within a macro the
symbols \@! and \@@ are supported to put the current ID onto the stack or
pull the last ID from the stack.
o PPC: Fixed detection of missing and extra operands.
o m68k: FPU register names may be used for symbols, as long as no FPU code
generation was enabled.
o m68k: Fixed a branch optimization bug, which occurs when the effect of
all translations is nullified, so that no label changes its address in
one pass.
o oldstyle-syntax: Fixed pc-symbol ('*') assignments. "* = <addr>" didn't
work in the first column.
o mot-syntax: Do not crash on PRINTT without operand, but just print
a newline.
o mot-syntax: Dots ('.') are allowed everywhere in the label, not only
at the beginning, when either the -devpac option or the new -ldots
option was specified.
o mot-syntax: Any local symbol in the source can be referenced using the
global_name\local_name syntax, as in PhxAss.
o mot-syntax: When OUTPUT is used with ".name" then it is not only appended
to the output name, but it also replaces a possible extension in it
(Devpac compatibility).
o mot-syntax: Option -localu makes local symbols start with an underscore
instead of a dot (from Devpac).
o vobj-output: A file without sections no longer causes an internal error.
- 1.5 (01.12.10)
o A "\\" inside a macro has to be replaced by "\" when the assembler is
in a mode without escape-code handling (e.g. Devpac-compatibility).
o When the syntax module supports CARG, then \., \+ and \- are accepted
to select a macro parameter with the index of the CARG-symbol. \+ will
post-increment CARG and \- post-decrement it (PhxAss compatibility).
o Space objects are allowed to use a relocation as fill pattern. Enhanced
all output modules to support space-relocations.
o Immediately close input files, after reading them in. So they are
available for modification before the first assembler pass starts.
o In case of an error or warning the respective source text line is now
printed below the message.
o Print a short report about sections and their size, when successfully
finishing assembly in verbose mode.
o m68k: Fixed a crash when using the ColdFire SATS instruction with
optimization enabled.
o m68k: Define symbols __CPU, __FPU and __MMU in PhxAss-compatibility mode,
according to the current cpu setting.
o m68k: Support Devpac optimizations OPT o3 - o12. Generic vasm
optimizations are no longer active in Devpac-compatibility mode. They
can be controlled with the new "OPT og" directive.
o m68k: Support optimizations which result in multiple instructions in a
clean way. Fixed the "LEA (d32,An),Am" and "Bcc out of range" hacks to
make use of it.
o m68k: New optimization: <op>.L #x,An is optimized to <op>.W #x,An when
x fits into a word. This mainly affects CMP instructions, as MOVE, ADD
and SUB were already handled in previous versions.
o m68k: New optimization: LEA (d,An),An is optimized to ADDQ/SUBQ #d,An.
o m68k: New optimization: ASL #1 is optimized to ADD and ASL #2
(byte/word only) into two ADDs. LSL will also be optimized, when the
new option -opt-lsl is given.
o m68k: New optimization: MULU/MULS.L #x,Dn can be optimized into LSL/ASL
when x is a power of 2 and between 0 and 256. Negative values are handled
by appending a NEG.L. MULU.W is supported for ColdFire ISA_B/C by MVZ.W.
MULS.W by using EXT.L first. The new option is called -opt-mul.
o m68k: New optimization: MOVEM with two registers is translated
into two separate MOVE instructions. Requires -opt-movem option, as long
as not only address registers are loaded.
o m68k: New optimization under -opt-fconst: FDIV #m,FPn is optimized to
FMUL #1/m,FPn when m is a power of 2 (i.e. the mantissa is zero).
o m68k: New optimization: LINK An,#0 is optimized to PEA (An) and
MOVE.L A7,An.
o m68k: New ColdFire optimization: MVZ/MVS #x,Dn to MOVEQ #x,Dn.
o m68k: The new optimization flag -opt-speed makes vasm optimize for
speed, even if this would increase the code size (Example: asl.l #2,Dn ->
add Dn,Dn + add Dn,Dn for 68000-68040).
o m68k: Bugfix: MOVEM #list,<ea> and MOVEM <ea>,#list were never optimized.
o m68k: MOVE SR/CCR instructions were not recognized for ColdFire.
o m68k: ColdFire ISA_B allows #<xxx>,(d16,An) for MOVE.B and MOVE.W.
o m68k: MOVEC should not warn about a correct .L operation size.
o m68k: MOV3Q is only available for ColdFire ISA_B and ISA_C. Also don't
optimize to MOV3Q for ISA_A.
o m68k: The OPT directive supports vasm-specific extensions for optimizations
not known to Devpac (-opt-movem/clr/pea/st/lsl/mul/fconst/brajmp/speed).
o m68k: OPT p=<type> has to support multiple types, separated by a '/'.
o m68k: New directive INITNEAR (from PhxAss). For simplicity it will
always generate a reference to _LinkerDB.
o m68k: Fixed the CPU directives to recognize ColdFire v2, v3, v4, v4e and
made it case-insensitive.
o m68k: Made -opt-fconst work with FMOVE.D #0,FPn.
o m68k: PC-relative optimization didn't work for "TST label" and cpu>=68020.
o m68k: New option -showcrit. Similar to -showopt, but only shows
optimizations which may have side effects (refer to the documentation).
o m68k: Bad extension warning (2006) has become an error.
o z80: Implemented a lo/hi-byte operator similar to 6502.
o z80: Relative jumps over a distance of more than 128 bytes must cause an
error message.
o mot-syntax: Supports CARG.
o mot-syntax: IF directives support the current-pc symbol (*).
o mot-syntax: Support REM and EREM from AsmOne, to skip everything between
those two directives.
o mot-syntax: Up to 36 macro arguments in PhxAss-compatibility mode.
o mot-syntax: Support CODE_C, DATA_C, BSS_C (and the *_F-variants).
o oldstyle-syntax: EQU and SET should be case-insensitive, like the rest
of the directives.
o oldstyle-syntax: Fixed ORG for the case when '$' is used as a hex-prefix
and the current-pc-symbol at the same time (Z80).
o oldstyle-syntax: Also support local symbols starting with a '.'.
o hunk-output: Fixed -databss option, which didn't recognize DCB/BLK
directives with a non-zero fill pattern.