mirror of
https://github.com/uffejakobsen/acme.git
synced 2024-11-26 15:49:18 +00:00
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 } }
|