

VisAss, AssBlaster and Flash8-AssBlaster stuff
----------------------------------------------

The pseudo opcode "\kc" cannot be converted, because ACME does not
have a matching pseudo opcode. The converter will insert an
explanatory message in the output file.

The pseudo opcode "\st" is converted to "!eof". To decide whether this
makes sense or not is left as an exercise for the reader.

"Marked" AssBlaster labels are converted to global ACME labels.
"Unmarked" AssBlaster labels are converted to local ACME labels.
If your AssBlaster sources contain marked (!) labels which read like
mnemonics ("^lda", "^nop" "^sed" or the like), ACME will interpret
the converted versions like instructions.
THE CONVERTER DOES NOT HANDLE THIS PROBLEM YET, so you will have to
change such label names by hand. If binaries produced by ACME and
AssBlaster are the same size, you don't have this problem.

AssBlaster allows the characters '[', ']' and '^' to be used in label
names. These are converted to uppercase letters, which does not cause
any problems - it just looks a bit strange... :)

Empty comments (semicolons at end-of-line) are stripped.

AssBlaster claims to support the 6510's undocumented ("illegal")
instructions. Actually, when I checked, it confused some of the
mnemonics ("asr" and "arr"), and for "lax" and "aax" (aka "sax") it
actually generated wrong opcodes for some addressing modes.

There's a slight problem with macros: Source codes that assemble fine
with AssBlaster *might* give "label not defined" errors after ACME
conversion. This is because AssBlaster macros can access all labels,
while ACME macros can only access global labels (besides their
arguments, of course).

To fix such errors, you'll have to
a) make the macro code reference global labels instead of local ones
and
b) define those global labels, of course.

  AssBlaster	    ACME (unfixed)		ACME (fixed by you)

  \md chk.c1,c2	    !macro chk .c1,.c2 {	!macro chk .c1,.c2 {
  lda #c1	    lda #.c1			lda #.c1
  ldx #c2	    ldx #.c2			ldx #.c2
  jsr sub	    jsr .sub			jsr sub		;<-FIX
  \de		    }				}

  \ma chk.5,7	    +chk 5,7			+chk 5,7
  rts		    rts				rts

sub:		  .sub			      .sub
  rts; later	    rts; later		      sub		;<-FIX
						rts; later


Hypra-Ass and Giga-Ass stuff
----------------------------

The following pseudo opcodes cannot be converted, because ACME does
not have any matching pseudo opcode. The converter will insert an
explanatory message in the output file.
	.on	(uses BASIC line numbers)
	.go	(uses BASIC line numbers)
	.co	(for chained assembly)
	.dp	(format rules)
	.li	(list on printer)
	.st	(stop output)

Empty comments (semicolons at end-of-line) are stripped.

There's a problem with macros: ACME macro parameters should be *local*
labels, but in Hypra-Ass and Giga-Ass, all labels are global.
THE CONVERTER DOES NOT HANDLE THIS PROBLEM, so you will have to fix
the macros manually:

  Hypra-Ass	    ACME (unfixed)		ACME (fixed by you)

  .ma chk (c1,c2)   !macro chk c1,c2 {		!macro chk .c1,.c2 {
  lda #c1	    lda #c1			lda #.c1
  ldx #c2	    ldx #c2			ldx #.c2
  jsr sub	    jsr sub			jsr sub
  .rt		    }				}
