mirror of
https://github.com/uffejakobsen/acme.git
synced 2024-12-23 10:29:46 +00:00
6cd245dc76
git-svn-id: https://svn.code.sf.net/p/acme-crossass/code-0/trunk@56 4df02467-bbd4-4a76-a152-e7ce94205b78
87 lines
3.1 KiB
Plaintext
87 lines
3.1 KiB
Plaintext
|
|
|
|
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 } }
|