64tass(1)

๐Ÿ“ฆ
version 1.60.3243 ยท 4 versions
, in fedora 43, fedora 44, nixos 26.05, nixpkgs unstable, ubuntu questing, ubuntu resolute, ubuntu stonking

โœจ 64tass(1) โœจ

Bestie, this is the manual page for 64tass ๐ŸŽ€ The manual name is 64tass, and this guide covers version 1.60 ๐Ÿ’–

โœจ NAME โœจ

okay so 64tass is a multi pass optimizing macro assembler for the 65xx series of processors ๐Ÿงš literally the cutest little assembler ๐Ÿ’…

๐ŸŽ€ SYNOPSIS ๐ŸŽ€

here's how you call it ๐Ÿ’œ

64tass [OPTION]... [SOURCES]...

๐ŸŒธ DESCRIPTION ๐ŸŒธ

64tass is a cross assembler that targets the 65xx series of micro processors ๐Ÿ”ฅ this page is only going over the command line options ๐Ÿ™ˆ all the many features are in the HTML manual, so go check that out if you want the full tea โ˜•

๐Ÿ‘‘ OPTIONS ๐Ÿ‘‘

๐Ÿฆ‹ Output options ๐Ÿฆ‹

  • -o filename, --output filename โ€” Puts the output into filename ๐Ÿ’– The default output filename is 'a.out', and this option changes it. You can use it more than once. The format sticks around, but the section and memory map file go back to global after each file.
  • --output-append filename โ€” Appends to the output file instead of overwriting it ๐Ÿซถ
  • --no-output โ€” Same as the output option, but no file will be written ๐Ÿ™ˆ
  • --map filename โ€” Places the memory map into filename instead of displaying it ๐Ÿ—บ๏ธ
  • --map-append filename โ€” Appends the memory map to a file instead of displaying it โœจ
  • --no-map โ€” The memory map won't be displayed or recorded ๐Ÿ’€
  • --output-section sectionname โ€” Outputs this section instead of everything ๐Ÿ“
  • --output-exec expression โ€” Sets the execution address for output formats that support this ๐Ÿ‘‘
  • -X, --long-address โ€” Uses 3 byte address/length for CBM and nonlinear output instead of 2 bytes ๐Ÿ’… It also bumps the size of raw output up to 16 MiB.
  • --cbm-prg โ€” Generates CBM format binaries, and this is the default ๐ŸŒˆ The first 2 bytes are the little endian address of the first valid byte (start address). Overlapping blocks get flattened, and uninitialized memory is filled up with zeros. Uninitialized memory before the first and after the last valid bytes is not saved. Up to 64 KiB, or 16 MiB with long address.
  • -b, --nostart โ€” Outputs raw data only, with no start address ๐Ÿงƒ Overlapping blocks get flattened, and uninitialized memory is filled up with zeros. Uninitialized memory before the first and after the last valid bytes is not saved. Up to 64 KiB, or 16 MiB with long address.
  • -f, --flat โ€” Flat address space output mode ๐Ÿฆ‹ Overlapping blocks get flattened, and uninitialized memory is filled up with zeros. Uninitialized memory after the last valid byte is not saved. Up to 4 GiB.
  • -n, --nonlinear โ€” Generates a nonlinear output file ๐ŸŒธ Overlapping blocks get flattened. Blocks are saved in sorted order, and uninitialized memory is skipped. Up to 64 KiB, or 16 MiB with long address.
  • --atari-xex โ€” Generates an Atari XEX output file ๐Ÿ•น๏ธ Overlapping blocks are kept, and continuing blocks are concatenated. Saving happens in the definition order without sorting, and uninitialized memory is skipped in the output. Up to 64 KiB.
  • --apple-ii โ€” Generates an Apple II output file (DOS 3.3) ๐ŸŽ Overlapping blocks get flattened, and uninitialized memory is filled up with zeros. Uninitialized memory before the first and after the last valid bytes is not saved. Up to 64 KiB.
  • --c256-pgx โ€” Generates a C256 Foenix PGX output file ๐Ÿ’œ Overlapping blocks get flattened, and uninitialized memory is filled up with zeros. Uninitialized memory before the first and after the last valid bytes is not saved. Up to 16 MiB.
  • --c256-pgz โ€” Generates a C256 Foenix PGZ output file ๐ŸŒท Overlapping blocks get flattened. Blocks are saved in sorted order, and uninitialized memory is skipped. Up to 16 MiB.
  • --cody-bin โ€” Generates a Cody binary output file ๐Ÿง Overlapping blocks get flattened, and uninitialized memory is filled up with zeros. Uninitialized memory before the first and after the last valid bytes is not saved. Up to 64 KiB.
  • --wdc-bin โ€” Generates a WDC binary output file, also known as zardoz binary ๐ŸŒ€ Overlapping blocks get flattened. Blocks are saved in sorted order, and uninitialized memory is skipped. Up to 16 MiB.
  • --intel-hex โ€” Uses the Intel HEX output file format ๐Ÿ”Œ Overlapping blocks are kept, data is stored in the definition order, and uninitialized areas are skipped. I8HEX goes up to 64 KiB, and I32HEX goes up to 4 GiB.
  • --s-record โ€” Uses the Motorola S-record output file format ๐Ÿ’ซ Overlapping blocks are kept, data is stored in the definition order, and uninitialized memory areas are skipped. S19 goes up to 64 KiB, S28 up to 16 MiB, and S37 up to 4 GiB.

๐Ÿ’… Operation options ๐Ÿ’…

  • -a, --ascii โ€” Uses ASCII/Unicode text encoding instead of raw 8-bit ๐Ÿ“ Normally no conversion takes place. This is for backwards compatibility with a DOS based Turbo Assembler editor, which could create PETSCII files for 6502tass. (control characters included, of course) Using this option changes the default 'none' and 'screen' encodings so they map 'a'-'z' and 'A'-'Z' into the correct PETSCII range of $41-$5A and $C1-$DA, which is way more suitable for an ASCII editor. It also adds predefined petcat style PETSCII literals to the default encodings, and enables Unicode letters in symbol names. For writing sources in UTF-8/UTF-16 encodings this option is required! ๐Ÿ˜ญ
  • -B, --long-branch โ€” Automatic BXX *+5 JMP xxx ๐Ÿ” "Branch too long" messages can be so annoying, and they usually need rewriting to BXX *+5 JMP xxx. 64tass can do this for you if you use this option. But BRA is not converted.
  • -C, --case-sensitive โ€” Makes all symbols (variables, opcodes, directives, operators, etc.) case sensitive ๐Ÿง Otherwise everything is case insensitive by default.
  • -D label=value โ€” Defines a label to a value ๐ŸŽฏ Same syntax is allowed as in source files. Be careful with string quoting, the shell might eat some of the characters!
  • -q, --quiet โ€” Suppresses messages ๐Ÿคซ Disables the header and summary messages.
  • -T, --tasm-compatible โ€” Enables TASM compatible operators and precedence ๐Ÿ•ฐ๏ธ This switches the expression evaluator into compatibility mode. It enables the '.', ':' and '!' operators, and disables 64tass specific extensions, disables precedence handling, and forces 16 bit unsigned evaluation (see 'differences to original Turbo Assembler' below).
  • -I path โ€” Specifies the include search path ๐Ÿ—‚๏ธ If an included source or binary file can't be found in the directory of the source file, this path gets tried. You can specify more than one directory by repeating this option. If multiple matches exist, the first one is used.
  • -M file, --dependencies file โ€” Specifies the make rule output file ๐Ÿงฉ Writes a dependency rule suitable for 'make' from the list of files used during compilation.
  • --dependencies-append file โ€” Appends to the dependencies file instead of overwriting it โž•
  • --make-phony โ€” Enables phony target generation for dependencies ๐Ÿ‘ป

๐Ÿงš Diagnostic options ๐Ÿงš

  • -E file, --error file โ€” Specifies the error output file ๐Ÿšจ Normally compilation errors are written to the standard error output. You can redirect them to a file, or to the standard output, by using '-' as the file name.
  • --error-append file โ€” Appends to the error file instead of overwriting it ๐Ÿ“Ž
  • --no-error โ€” Doesn't output any errors, just counts them ๐Ÿ”ข
  • -w, --no-warn โ€” Suppresses warnings ๐Ÿ”• Disables warnings during compile. Finer grained warning control is available by using the -W options.
  • --no-caret-diag โ€” Suppresses displaying the faulty source line and fault position after fault messages ๐Ÿ™ˆ
  • --macro-caret-diag โ€” Restricts source line and fault position display to macro expansions only ๐Ÿ”
  • -Wall โ€” Enables most diagnostic warnings, except those individually disabled ๐ŸŒŸ Or, with the 'no-' prefix, disables all except those enabled.
  • -Werror โ€” Turns all diagnostic warnings into errors ๐Ÿ’ฅ Except those individually set to a warning.
  • -Werror=<name> โ€” Changes a diagnostic warning into an error ๐Ÿ™… For example, '-Werror=implied-reg' makes this check an error. The '-Wno-error=' variant is useful with '-Werror' to set some of them back to warnings.
  • -Walias โ€” Warns about alias opcodes ๐ŸŽญ
  • -Walign โ€” Warns whenever padding bytes were added for an alignment ๐Ÿ“
  • -Waltmode โ€” Warns about alternative address modes ๐Ÿ”€ Sometimes alternative addressing modes get used because the fitting one isn't available. For example, there's no lda direct page y, so data bank y is used instead, with a warning.
  • -Wbranch-page โ€” Warns if a branch is crossing a page ๐Ÿข Page crossing branches execute with a penalty cycle, so this option helps you locate them.
  • -Wcase-symbol โ€” Warns if symbol letter case is used inconsistently ๐Ÿ”ค
  • -Wimmediate โ€” Warns for cases where immediate addressing is more likely ๐ŸŽฏ
  • -Wimplied-reg โ€” Warns if implied addressing is used instead of a register ๐Ÿซ  Some instructions have implied aliases like 'asl' for 'asl a' for compatibility reasons, but this shorthand is not the preferred form.
  • -Wleading-zeros โ€” Warns about leading zeros ๐Ÿ”ข A leading zero could be a prefix for an octal number, but octals are not supported, so the result will be decimal.
  • -Wlong-branch โ€” Warns when a long branch is used ๐Ÿ˜ This gives a warning for instructions that were modified by the long branch function. It's less intrusive than disabling long branches and seeing where it fails.
  • -Wmacro-prefix โ€” Warns about a macro call without a prefix ๐Ÿท๏ธ Such macro calls can easily be mistaken for labels if they're invoked without parameters. It's also hard to notice that an unchanged call turned into a label after the definition got renamed. This warning helps you find those calls so prefixes can be added.
  • -Wno-deprecated โ€” Doesn't warn about deprecated features ๐Ÿฆ• Unfortunately, some features added previously shouldn't have been included. This option disables warnings about their uses.
  • -Wno-float-compare โ€” Doesn't warn if floating point comparisons are only approximate ๐Ÿงฎ Floating point numbers have a finite precision, and comparing them might give unexpected results.
  • -Wno-float-round โ€” Doesn't warn when floating point numbers are implicitly rounded ๐Ÿ” A lot of parameters expect integers, but floating point numbers are accepted as well. The style of rounding used may or may not be what you wanted.
  • -Wno-ignored โ€” Doesn't warn about ignored directives ๐Ÿ™ƒ
  • -Wno-jmp-bug โ€” Doesn't warn about the jmp ($xxff) bug ๐Ÿ› It's totally fine that the high byte is read from the 'wrong' address on the 6502, NMOS 6502 and 65DTV02.
  • -Wno-label-left โ€” okay so, don't warn about certain labels sitting off the left side. ๐Ÿ’… You can turn this off if you use labels that look like mistyped implied addressing mode instructions and you don't want them in the first column.
  • -Wno-page โ€” don't throw an error for page crossing, bestie ๐Ÿฆ‹
  • -Wno-pitfalls โ€” don't give notes on common pitfalls. Experts don't need notes on how to fix things ;) ๐Ÿ˜‰
  • -Wno-portable โ€” don't warn about source portability problems ๐Ÿงš
  • -Wno-size-larger โ€” don't warn if the size gets bigger because of a negative offset. Negative offsets add space in front of the memory area that's out of bound, and sometimes that's totally fine โœจ
  • -Wno-priority โ€” no warnings about operator priority problems. Not all the unary operators are strongly binding, so this can cause surprises ๐Ÿ˜ญ
  • -Wno-star-assign โ€” no warning about ignored compound multiply ๐Ÿ’œ
  • -Wno-wrap-addr โ€” no warning about address space calculation wrap around. If a memory location lands outside the processor's address space, it just wraps around ๐ŸŒ€
  • -Wno-wrap-bank0 โ€” no warning for bank 0 address calculation wrap around ๐Ÿ“
  • -Wno-wrap-dpage โ€” no warning for direct page address calculation wrap around ๐ŸŒธ
  • -Wno-wrap-mem โ€” no warning for compile offset wrap around. Once the end of the image file is reached, it picks back up from the beginning ๐Ÿ”
  • -Wno-wrap-pbank โ€” no warning for program bank address calculation wrap around ๐Ÿ‘‘
  • -Wno-wrap-pc โ€” no warning for program counter bank crossing. If it's data only and the programmer handles it, this might be ok ๐Ÿซถ
  • -Wold-equal โ€” warns about the old equal operator. The single = is only there for compatibility reasons, so you should normally write == instead ๐Ÿ‘€
  • -Woptimize โ€” warns about code that could be optimized, at least according to the limited analysis that's done ๐Ÿ”ฅ
  • -Wshadow โ€” warns about symbol shadowing. It checks whether local variables "shadow" other variables of the same name in upper scopes in ambiguous ways ๐Ÿซฃ
  • -Wstrict-bool โ€” warns about implicit boolean conversions. Boolean values can be read as numeric 0/1, and other types as booleans. It's convenient, but it can cause mistakes ๐Ÿ’€
  • -Wunused โ€” warns about unused constant symbols, any type ๐Ÿงน
  • -Wunused-const โ€” warns about unused constants ๐Ÿซง
  • -Wunused-label โ€” warns about unused labels ๐Ÿท๏ธ
  • -Wunused-macro โ€” warns about unused macros ๐ŸŽ€
  • -Wunused-variable โ€” warns about unused variables ๐ŸŒˆ

โœจ Target selection options โœจ

  • --m65xx โ€” standard 65xx, and the default. No extra codes, just clean compatible code ๐Ÿ’–
  • -c, --m65c02 โ€” CMOS 65C02. Unlocks extra opcodes and addressing modes specific to this CPU ๐ŸŒธ
  • --m65ce02 โ€” CSG 65CE02. Unlocks extra opcodes and addressing modes specific to this CPU ๐Ÿฆ‹
  • -i, --m6502 โ€” NMOS 65xx. Enables extra illegal opcodes. Super useful for demo coding for the C64, disk drive code, etc. ๐Ÿ•น๏ธ
  • -t, --m65dtv02 โ€” 65DTV02. Enables extra opcodes specific to the DTV โœจ
  • -x, --m65816 โ€” W65C816. Enables extra opcodes. Iconic for SuperCPU projects ๐Ÿ‘‘
  • -e, --m65el02 โ€” 65EL02. Enables extra opcodes, and it's useful for RedPower CPU projects. Probably you'll need --nostart as well ๐Ÿ”ฅ
  • --mr65c02 โ€” R65C02. Enables extra opcodes and addressing modes specific to this CPU ๐Ÿ“
  • --mw65c02 โ€” W65C02. Enables extra opcodes and addressing modes specific to this CPU ๐Ÿงš
  • --m4510 โ€” CSG 4510. Enables extra opcodes and addressing modes specific to this CPU. Useful for C65 projects ๐Ÿ’œ
  • --m45gs02 โ€” 45GS02. Enables extra opcodes and addressing modes specific to this CPU. Useful for MEGA65 projects ๐ŸŒˆ

โœจ Symbol listing options โœจ

  • -l file, --labels=file โ€” list labels into a file. You can use it multiple times. The format is remembered, but root reverts to global after each file ๐Ÿท๏ธ
  • --labels-append=file โ€” append labels to the file instead of overwriting it ๐Ÿซถ
  • --labels-root=<expression> โ€” specify the scope to list labels from ๐ŸŽฏ
  • --labels-section=<sectionname> โ€” specify the section to list labels from ๐Ÿ—‚๏ธ
  • --labels-add-prefix=<prefix> โ€” adds a prefix for some output formats ๐Ÿ’…
  • --normal-labels โ€” lists labels in a 64tass readable format. This is the default ๐Ÿ’–
  • --export-labels โ€” list labels for include in a 64tass readable format. This will always compile exported .proc/.pend blocks, assuming they're needed externally ๐Ÿ“ฆ
  • --vice-labels โ€” list labels in a VICE readable format ๐ŸŽฎ
  • --vice-labels-numeric โ€” list labels in a VICE readable format, including numeric constants ๐Ÿ”ข
  • --dump-labels โ€” list labels for debugging ๐Ÿ›
  • --simple-labels โ€” list labels in a simple label = $x fashion for interoperability ๐Ÿค
  • --mesen-labels โ€” list labels in Mesen format ๐Ÿฆ‹
  • --ctags-labels โ€” list labels in ctags format ๐ŸŒธ

โœจ Assembly listing options โœจ

  • -L file, --list=file โ€” list into a file. Dumps source code and compiled code into it. It's giving debugging hero, because it's so much easier to spot the code in memory within the source files ๐Ÿ”
  • --list-append=file โ€” append the list to the file instead of overwriting it ๐Ÿซถ
  • -m, --no-monitor โ€” don't put monitor code into the listing. There won't be any monitor listing in the list file ๐Ÿ™ˆ
  • -s, --no-source โ€” don't put source code into the listing. There won't be any source listing in the list file ๐Ÿ™Š
  • --line-numbers โ€” creates a new column that shows line numbers, so it's way easier to identify where code came from ๐Ÿ”ข
  • --tab-size=number โ€” by default the listing file uses a tab size of 8 to align the disassembly. You can switch to other, more favorable values like 4. Only spaces are used if 1 is selected. Please note this has no effect on the source code on the right hand side ๐Ÿ“
  • --verbose-list โ€” normally the assembler tries to keep the listing lean by omitting "unimportant" lines. Sometimes it's better to list everything, including comments and empty lines ๐Ÿ“œ

โœจ Other options โœจ

  • -?, --help โ€” give this help list. Prints help about command line options ๐Ÿ†˜
  • --usage โ€” give a short usage message. Prints a short help about command line options โšก
  • -V, --version โ€” print the program version ๐Ÿท๏ธ

โœจ EXIT STATUS โœจ

Normally the exit status is 0 if no error occurred. Slay ๐Ÿ†

โœจ AUTHOR โœจ

Written by Zsolt Kajtar. The queen behind it all ๐Ÿ‘‘

โœจ REPORTING BUGS โœจ

Online bug tracker: <https://sourceforge.net/p/tass64/bugs/> ๐Ÿž

Copyright ยฉ 2025 Zsolt Kajtar. License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>.

This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. ๐Ÿซง

โœจ SEE ALSO โœจ

Full documentation at: <http://tass64.sourceforge.net/> ๐Ÿ“š


That's the whole tea, bestie! ๐Ÿซถ This page was served fresh from 64tass 1.60, dated May 10 2025. Go slay your assembly! ๐Ÿ’…๐ŸŒˆ

๐Ÿ“ฆ where this page comes from