64tass(1)
โจ 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 intofilename๐ 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 intofilenameinstead 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 for6502tass.(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-$5Aand$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โ AutomaticBXX *+5 JMP xxx๐ "Branch too long" messages can be so annoying, and they usually need rewriting toBXX *+5 JMP xxx. 64tass can do this for you if you use this option. ButBRAis 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-Woptions.--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 noldadirect 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 thejmp ($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--nostartas 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/.pendblocks, 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 simplelabel = $xfashion 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 โจ
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
- fedora 43: 64tass 1.60.3243-2.fc43 ยท LGPL-2.0-only AND LGPL-2.0-or-later AND GPL-2.0-or-later AND MIT
- fedora 44: 64tass 1.60.3243-4.fc44 ยท LGPL-2.0-only AND LGPL-2.0-or-later AND GPL-2.0-or-later AND MIT
- nixos 26.05: 64tass 1.60.3243
- nixpkgs unstable: 64tass 1.60.3243
- ubuntu questing: 64tass 1.60.3243-1
- ubuntu resolute: 64tass 1.60.3243-1build1 ยท GPL-2.0-or-later
- ubuntu stonking: 64tass 1.60.3243-1build1 ยท GPL-2.0-or-later
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms