mirror of
https://github.com/pfusik/xasm.git
synced 2025-07-17 07:24:12 +00:00
Compare commits
85 Commits
xasm-3.0.2
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
f5903fb199 | ||
|
8eb2a5ae6f | ||
|
9732817a0b | ||
|
70c907bae6 | ||
|
7a666799ac | ||
|
95136d1546 | ||
|
ca5e88950f | ||
|
138331193a | ||
|
30c96357bc | ||
|
83d2f8ff1d | ||
|
9aae1ad4c4 | ||
|
f33c112ac6 | ||
|
57661276c2 | ||
|
a4225b6128 | ||
|
1da9f77458 | ||
|
2b7d21ae43 | ||
|
2f67b3bab4 | ||
|
afb9f7830e | ||
|
95cb5ae592 | ||
|
8f6621f079 | ||
|
52982169df | ||
|
8c7ef1a922 | ||
|
1a90ca04d3 | ||
|
73b382f9b7 | ||
|
7ba3f9f597 | ||
|
b815a448cd | ||
|
274dda9dd2 | ||
|
da58ad7950 | ||
|
52ef8c05d6 | ||
|
6f25038d95 | ||
|
57ef9b5c83 | ||
|
8f06fec50c | ||
|
d50d484e1f | ||
|
65a2c1fbdd | ||
|
d3908ec95e | ||
|
647cf9f3cf | ||
|
819701b9be | ||
|
301b904f60 | ||
|
420a83a897 | ||
|
2f8e97499d | ||
|
7ad066fc6f | ||
|
a0bfe1366d | ||
|
384643ab84 | ||
|
177ece15fc | ||
|
99099938b5 | ||
|
cb92f715a9 | ||
|
110d2c4dad | ||
|
ce134af833 | ||
|
92eac212cc | ||
|
90276dbe86 | ||
|
2e43507088 | ||
|
cc0eaf0e48 | ||
|
2dad630a75 | ||
|
36a4853b54 | ||
|
c4fc8ef51a | ||
|
ef297a78c7 | ||
|
061088aa62 | ||
|
dd3466a947 | ||
|
d2bd24a128 | ||
|
8d0870d1a1 | ||
|
d7c22cec84 | ||
|
b42f9dc2bf | ||
|
5680efc7f5 | ||
|
8c6ff185af | ||
|
5970a93423 | ||
|
389f7446e0 | ||
|
3cec1c8ee8 | ||
|
60d28a5c24 | ||
|
de22438740 | ||
|
cc5568795e | ||
|
d1276f3d97 | ||
|
2d8b3cde17 | ||
|
c357fba52c | ||
|
61327c8e5b | ||
|
167c441fed | ||
|
3a845f9a4f | ||
|
50bae061f7 | ||
|
520145268a | ||
|
059b631aab | ||
|
f2e7796c87 | ||
|
61bffbb8ec | ||
|
a2d6f9c864 | ||
|
3fc9b5c0f5 | ||
|
406354e06c | ||
|
6992795f55 |
16
.github/workflows/test.yml
vendored
Normal file
16
.github/workflows/test.yml
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
name: tests
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os: [windows-latest, ubuntu-latest]
|
||||||
|
dc: [dmd-latest, ldc-latest]
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@main
|
||||||
|
- uses: dlang-community/setup-dlang@v1
|
||||||
|
with:
|
||||||
|
compiler: ${{ matrix.dc }}
|
||||||
|
- run: dub build
|
||||||
|
- run: dub test
|
10
.gitignore
vendored
Normal file
10
.gitignore
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
/xasm
|
||||||
|
/xasm.exe
|
||||||
|
/xasm.obj
|
||||||
|
/xasm.html
|
||||||
|
/xasm.1
|
||||||
|
/xasm-test-*
|
||||||
|
/MANIFEST
|
||||||
|
/.dub
|
||||||
|
/.project
|
||||||
|
/signed
|
95
Makefile
95
Makefile
@@ -1,53 +1,74 @@
|
|||||||
VERSION = 3.0.2
|
VERSION = 3.2.1
|
||||||
|
|
||||||
ASCIIDOC = asciidoc -o $@ -a doctime
|
prefix = /usr/local
|
||||||
ASCIIDOC_POSTPROCESS = perl -pi.bak -e "s/527bbd;/20a0a0;/;END{unlink '$@.bak'}" $@
|
bindir = $(prefix)/bin
|
||||||
ASCIIDOC_VALIDATE = xmllint --valid --noout --nonet $@
|
mandir = $(prefix)/share/man/man1
|
||||||
RM = rm -f
|
ifeq ($(OS),Windows_NT)
|
||||||
ZIP = 7z a -mx=9 -tzip $@
|
EXEEXT = .exe
|
||||||
|
endif
|
||||||
|
|
||||||
all: xasm.exe xasm.html
|
SEVENZIP = 7z a -mx=9 -bd -bso0
|
||||||
|
|
||||||
xasm.exe: xasm.d
|
all: xasm$(EXEEXT) xasm.html
|
||||||
dmd -O -release $<
|
|
||||||
|
|
||||||
xasm.html: xasm.1.txt
|
xasm$(EXEEXT): source/app.d
|
||||||
$(ASCIIDOC) -d manpage $<
|
dmd -of$@ -O -release $<
|
||||||
$(ASCIIDOC_POSTPROCESS)
|
|
||||||
$(ASCIIDOC_VALIDATE)
|
|
||||||
|
|
||||||
dist: xasmpage-$(VERSION).zip
|
xasm.html: xasm.1.asciidoc
|
||||||
|
asciidoc -o - $< | sed -e "s/527bbd;/20a0a0;/" >$@
|
||||||
|
|
||||||
xasmpage-$(VERSION).zip: xasm261.zip xasm-$(VERSION)-src.zip xasm-$(VERSION)-windows.zip inflate6502.zip index.html inflate.html scite.png
|
xasm.1: xasm.1.asciidoc
|
||||||
$(RM) $@
|
a2x -f manpage $<
|
||||||
$(ZIP) $^
|
|
||||||
|
|
||||||
xasm-$(VERSION)-src.zip: xasm.d Makefile xasm.1.txt
|
install: xasm xasm.1
|
||||||
$(RM) $@
|
mkdir -p $(DESTDIR)$(bindir) && install xasm $(DESTDIR)$(bindir)/xasm
|
||||||
$(ZIP) $^
|
mkdir -p $(DESTDIR)$(mandir) && install -m 644 xasm.1 $(DESTDIR)$(mandir)/xasm.1
|
||||||
|
|
||||||
xasm-$(VERSION)-windows.zip: xasm.exe xasm.html xasm.properties
|
uninstall:
|
||||||
$(RM) $@
|
$(RM) $(DESTDIR)$(bindir)/xasm $(DESTDIR)$(mandir)/xasm.1
|
||||||
$(ZIP) $^
|
|
||||||
|
|
||||||
inflate6502.zip: inflate.asx gzip2deflate.c gzip2deflate.exe
|
install-scite: xasm.properties
|
||||||
$(RM) $@
|
mkdir -p $(DESTDIR)$(prefix)/share/scite && install -m 644 $< $(DESTDIR)$(prefix)/share/scite/xasm.properties
|
||||||
$(ZIP) $^
|
|
||||||
|
|
||||||
gzip2deflate.exe: gzip2deflate.c
|
uninstall-scite:
|
||||||
mingw32-gcc -s -O2 -Wall -o $@ $<
|
$(RM) $(DESTDIR)$(prefix)/share/scite/xasm.properties
|
||||||
|
|
||||||
index.html: index.txt
|
dist: srcdist ../xasm-$(VERSION)-windows.zip
|
||||||
$(ASCIIDOC) $<
|
|
||||||
$(ASCIIDOC_POSTPROCESS)
|
|
||||||
$(ASCIIDOC_VALIDATE)
|
|
||||||
|
|
||||||
inflate.html: inflate.txt
|
srcdist: MANIFEST
|
||||||
$(ASCIIDOC) $<
|
$(RM) ../xasm-$(VERSION).tar.gz && /usr/bin/tar -c --numeric-owner --owner=0 --group=0 --mode=644 -T MANIFEST --transform=s,,xasm-$(VERSION)/, | $(SEVENZIP) -tgzip -si ../xasm-$(VERSION).tar.gz
|
||||||
$(ASCIIDOC_POSTPROCESS)
|
|
||||||
$(ASCIIDOC_VALIDATE)
|
MANIFEST:
|
||||||
|
if test -e .git; then (git ls-files | grep -vF .gitignore && echo MANIFEST) | sort | dos2unix >$@ ; fi
|
||||||
|
|
||||||
|
../xasm-$(VERSION)-windows.zip: xasm.exe xasm.html xasm.properties signed
|
||||||
|
$(RM) $@ && $(SEVENZIP) -tzip $@ xasm.exe xasm.html xasm.properties
|
||||||
|
|
||||||
|
signed: xasm$(EXEEXT)
|
||||||
|
signtool sign -d "xasm $(VERSION)" -n "Open Source Developer, Piotr Fusik" -tr http://time.certum.pl -fd sha256 -td sha256 $< && touch $@
|
||||||
|
|
||||||
|
deb:
|
||||||
|
debuild -b -us -uc
|
||||||
|
|
||||||
|
osx: ../xasm-$(VERSION)-macos.dmg
|
||||||
|
|
||||||
|
../xasm-$(VERSION)-macos.dmg: osx/xasm osx/bin
|
||||||
|
ifdef PORK_CODESIGNING_IDENTITY
|
||||||
|
codesign --options runtime -f -s $(PORK_CODESIGNING_IDENTITY) osx/xasm
|
||||||
|
endif
|
||||||
|
hdiutil create -volname xasm-$(VERSION)-macos -srcfolder osx -format UDBZ -fs HFS+ -imagekey bzip2-level=3 -ov $@
|
||||||
|
/Applications/Xcode.app/Contents/Developer/usr/bin/notarytool submit --wait --keychain-profile recoilnotarization $@
|
||||||
|
|
||||||
|
osx/xasm: source/app.d
|
||||||
|
mkdir -p osx && dmd -of$@ -O -release $< && rm -f osx/xasm.o
|
||||||
|
|
||||||
|
osx/bin:
|
||||||
|
mkdir -p osx && ln -s /usr/local/bin $@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) xasmpage-$(VERSION).zip xasm-$(VERSION)-src.zip xasm-$(VERSION)-windows.zip xasm.exe xasm.html inflate6502.zip gzip2deflate.exe index.html inflate.html
|
$(RM) xasm xasm.exe xasm.obj xasm.html xasm.1 signed
|
||||||
|
rm -rf osx
|
||||||
|
|
||||||
|
.PHONY: all install uninstall install-scite uninstall-scite dist srcdist MANIFEST deb osx clean
|
||||||
|
|
||||||
.DELETE_ON_ERROR:
|
.DELETE_ON_ERROR:
|
||||||
|
112
README.md
Normal file
112
README.md
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
[](https://github.com/pfusik/xasm/actions/workflows/test.yml)
|
||||||
|
|
||||||
|
xasm
|
||||||
|
====
|
||||||
|
|
||||||
|
xasm is a 6502 cross-assembler with original syntax extensions.
|
||||||
|
By default it generates binaries
|
||||||
|
for [Atari 8-bit computers](http://en.wikipedia.org/wiki/Atari_8-bit_family).
|
||||||
|
|
||||||
|
Syntax
|
||||||
|
------
|
||||||
|
|
||||||
|
6502 assembly code is full of LDA, STA, LDA, STA sequences.
|
||||||
|
With xasm you can use MVA as a shortcut for an LDA/STA pair or even MWA for 16-bit transfers.
|
||||||
|
Short branches can be replaced with conditional skip and repeat pseudo-instructions.
|
||||||
|
You can use a pair of instructions with a shared argument.
|
||||||
|
These are just some of the features that help you program in a more concise way.
|
||||||
|
Let's look at typical 6502 code (which is also valid in xasm):
|
||||||
|
|
||||||
|
lda #<dest
|
||||||
|
sta ptr
|
||||||
|
lda #>dest
|
||||||
|
sta ptr+1
|
||||||
|
ldx #192
|
||||||
|
do_line
|
||||||
|
ldy #39
|
||||||
|
do_byte
|
||||||
|
lda pattern,y
|
||||||
|
sta (ptr),y
|
||||||
|
dey
|
||||||
|
bpl do_byte
|
||||||
|
lda #40
|
||||||
|
clc
|
||||||
|
adc ptr
|
||||||
|
sta ptr
|
||||||
|
bcc skip
|
||||||
|
inc ptr+1
|
||||||
|
skip
|
||||||
|
dex
|
||||||
|
bne do_line
|
||||||
|
|
||||||
|
Using xasm's features this code can be rewritten to:
|
||||||
|
|
||||||
|
mwa #dest ptr
|
||||||
|
ldx #192
|
||||||
|
do_line
|
||||||
|
ldy #39
|
||||||
|
mva:rpl pattern,y (ptr),y-
|
||||||
|
lda #40
|
||||||
|
add:sta ptr
|
||||||
|
scc:inc ptr+1
|
||||||
|
dex:bne do_line
|
||||||
|
|
||||||
|
xasm syntax is an extension of Quick Assembler's (created in 1991 for Atari 8-bit).
|
||||||
|
Accumulator shifts should be written as in `asl @`.
|
||||||
|
Whitespace is important: it is required before the instruction
|
||||||
|
and disallowed in the operands, because it separates a comment from the operand, e.g.
|
||||||
|
|
||||||
|
lda #0 this is a comment, no need for a semicolon
|
||||||
|
|
||||||
|
This may look weird at first, but it enables nice features such as instruction pairs
|
||||||
|
and two-argument pseudo-instructions.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
|
||||||
|
xasm is a command-line tool.
|
||||||
|
Therefore you additionally need a programmer's text editor.
|
||||||
|
|
||||||
|
I use [SciTE](http://www.scintilla.org/SciTE.html).
|
||||||
|
To install xasm syntax highlighting and single-keystroke compilation,
|
||||||
|
copy `xasm.properties` to the SciTE directory.
|
||||||
|
|
||||||
|
For single source file programs, press Ctrl+F7 to compile.
|
||||||
|
You can double-click error messages to go to the incorrect line.
|
||||||
|
Press F5 to run the program in the emulator.
|
||||||
|
|
||||||
|
For larger projects, I use GNU Make. Press F7 to build (and possibly run)
|
||||||
|
a project as described in the `Makefile`. You can find my Makefiles in
|
||||||
|
[my repositories](https://github.com/pfusik?tab=repositories) on GitHub.
|
||||||
|
|
||||||
|
If you prefer VIM, see a link below.
|
||||||
|
|
||||||
|
Poetic License
|
||||||
|
--------------
|
||||||
|
|
||||||
|
This work 'as-is' we provide.
|
||||||
|
No warranty express or implied.
|
||||||
|
We've done our best,
|
||||||
|
to debug and test.
|
||||||
|
Liability for damages denied.
|
||||||
|
|
||||||
|
Permission is granted hereby,
|
||||||
|
to copy, share, and modify.
|
||||||
|
Use as is fit,
|
||||||
|
free or for profit.
|
||||||
|
These rights, on this notice, rely.
|
||||||
|
|
||||||
|
Download
|
||||||
|
--------
|
||||||
|
|
||||||
|
[xasm 3.2.1](https://github.com/pfusik/xasm/releases) for Windows, macOS, Ubuntu and Fedora.
|
||||||
|
|
||||||
|
Links
|
||||||
|
-----
|
||||||
|
|
||||||
|
* [Atari800](https://atari800.github.io/) - portable emulator of Atari 8-bit computers
|
||||||
|
* [Atari XL/XE Source Archive](http://sources.pigwa.net/) - source code of Atari demos, utilities and games
|
||||||
|
* [cc65](https://cc65.github.io/) - C cross-compiler targeting 6502-based systems
|
||||||
|
* [MADS](http://mads.atari8.info/) - another 6502/65816 cross-assembler, partially supporting xasm's syntax
|
||||||
|
* [vim-xasm](https://github.com/lybrown/vim-xasm) - VIM syntax highlighting for xasm
|
||||||
|
* [WUDSN IDE](http://wudsn.com/) - Eclipse plugin, front-end to several 6502 cross-assemblers, including xasm
|
23
debian/changelog
vendored
Normal file
23
debian/changelog
vendored
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
xasm (3.2.1-1) UNRELEASED; urgency=low
|
||||||
|
|
||||||
|
* New release.
|
||||||
|
|
||||||
|
-- Piotr Fusik <fox@scene.pl> Thu, 8 Dec 2022 09:30:29 +0100
|
||||||
|
|
||||||
|
xasm (3.2.0-1) UNRELEASED; urgency=low
|
||||||
|
|
||||||
|
* New release.
|
||||||
|
|
||||||
|
-- Piotr Fusik <fox@scene.pl> Tue, 22 Jun 2021 20:59:45 +0200
|
||||||
|
|
||||||
|
xasm (3.1.1-1) UNRELEASED; urgency=low
|
||||||
|
|
||||||
|
* New release.
|
||||||
|
|
||||||
|
-- Piotr Fusik <fox@scene.pl> Wed, 20 Nov 2019 13:30:11 +0100
|
||||||
|
|
||||||
|
xasm (3.1.0-1) UNRELEASED; urgency=low
|
||||||
|
|
||||||
|
* First deb packaging.
|
||||||
|
|
||||||
|
-- Piotr Fusik <fox@scene.pl> Sun, 20 Jul 2014 19:08:15 +0200
|
1
debian/compat
vendored
Normal file
1
debian/compat
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
10
|
16
debian/control
vendored
Normal file
16
debian/control
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
Source: xasm
|
||||||
|
Maintainer: Piotr Fusik <fox@scene.pl>
|
||||||
|
Section: devel
|
||||||
|
Priority: optional
|
||||||
|
Standards-Version: 4.6.0
|
||||||
|
Build-Depends: debhelper (>= 7), dmd (>= 2), asciidoc-base
|
||||||
|
|
||||||
|
Package: xasm
|
||||||
|
Architecture: any
|
||||||
|
Depends: ${shlibs:Depends}
|
||||||
|
Description: 6502 cross-assembler with original syntax extensions.
|
||||||
|
|
||||||
|
Package: xasm-scite
|
||||||
|
Architecture: all
|
||||||
|
Depends: scite
|
||||||
|
Description: xasm syntax highlighting and single keystroke compilation for SciTE.
|
7
debian/copyright
vendored
Normal file
7
debian/copyright
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||||
|
Name: xasm
|
||||||
|
Source: https://github.com/pfusik/xasm
|
||||||
|
|
||||||
|
Files: *
|
||||||
|
Copyright: 1998-2021 Piotr Fusik <fox@scene.pl>
|
||||||
|
License: Poetic
|
6
debian/rules
vendored
Normal file
6
debian/rules
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/make -f
|
||||||
|
%:
|
||||||
|
dh $@
|
||||||
|
|
||||||
|
override_dh_auto_install:
|
||||||
|
$(MAKE) DESTDIR=$$(pwd)/debian/tmp prefix=/usr install install-scite
|
1
debian/xasm-scite.install
vendored
Normal file
1
debian/xasm-scite.install
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
usr/share/scite/xasm.properties
|
2
debian/xasm.install
vendored
Normal file
2
debian/xasm.install
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
usr/bin/xasm
|
||||||
|
usr/share/man/man1/xasm.1
|
5
dub.sdl
Normal file
5
dub.sdl
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
name "xasm"
|
||||||
|
description "6502 cross-assembler with original syntax extensions"
|
||||||
|
authors "Piotr Fusik"
|
||||||
|
copyright "Copyright © 1998-2021, Piotr Fusik"
|
||||||
|
license "poetic"
|
File diff suppressed because it is too large
Load Diff
112
www/index.txt
112
www/index.txt
@@ -1,112 +0,0 @@
|
|||||||
xasm - 6502 cross-assembler
|
|
||||||
===========================
|
|
||||||
|
|
||||||
xasm is a free tool for programming
|
|
||||||
http://en.wikipedia.org/wiki/Atari_8-bit_family[Atari 8-bit family computers].
|
|
||||||
|
|
||||||
History
|
|
||||||
-------
|
|
||||||
|
|
||||||
First version of xasm was written in 1998. I needed a cross-assembler
|
|
||||||
that could understand the syntax of Quick Assembler
|
|
||||||
which I used for 8-bit Atari programming before I got a PC.
|
|
||||||
Initially xasm supported the syntax of QA and nothing more.
|
|
||||||
I quickly realized that I could extend the syntax to make it more expressive.
|
|
||||||
This led to xasm 2.0, still in 1998. I added some more features
|
|
||||||
next year. In 2002 I released many versions which contained
|
|
||||||
mostly bugfixes. In 2005 there were some minor enhancements and bug fixes,
|
|
||||||
as well as the whole assembler was rewritten from the x86 assembly language
|
|
||||||
it was initially written in to the http://www.digitalmars.com/d/[D programming language].
|
|
||||||
Current version 3.0.2 was released 17th October 2009.
|
|
||||||
|
|
||||||
Syntax
|
|
||||||
------
|
|
||||||
|
|
||||||
6502 assembler code is usually full of LDA, STA, LDA, STA sequences.
|
|
||||||
With xasm you can use MVA as a shortcut for LDA/STA pair
|
|
||||||
or even MWA for 16-bit transfers. You can avoid defining labels
|
|
||||||
when you need short jumps, thanks to conditional skip
|
|
||||||
and repeat pseudo-instructions. You can put two instructions
|
|
||||||
that share their argument in one line.
|
|
||||||
These are just some of the features that help you program
|
|
||||||
in a more concise way. Let's look at typical 6502 code
|
|
||||||
(which is also valid in xasm):
|
|
||||||
|
|
||||||
-----------------------------
|
|
||||||
lda #<dest
|
|
||||||
sta ptr
|
|
||||||
lda #>dest
|
|
||||||
sta ptr+1
|
|
||||||
ldx #192
|
|
||||||
do_line
|
|
||||||
ldy #39
|
|
||||||
do_byte
|
|
||||||
lda pattern,y
|
|
||||||
sta (ptr),y
|
|
||||||
dey
|
|
||||||
bpl do_byte
|
|
||||||
lda #40
|
|
||||||
clc
|
|
||||||
adc ptr
|
|
||||||
sta ptr
|
|
||||||
bcc skip
|
|
||||||
inc ptr+1
|
|
||||||
skip
|
|
||||||
dex
|
|
||||||
bne do_line
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
Using xasm's features this code can be rewritten to:
|
|
||||||
|
|
||||||
-----------------------------
|
|
||||||
mwa #dest ptr
|
|
||||||
ldx #192
|
|
||||||
do_line
|
|
||||||
ldy #39
|
|
||||||
mva:rpl pattern,y (ptr),y-
|
|
||||||
lda #40
|
|
||||||
add:sta ptr
|
|
||||||
scc:inc ptr+1
|
|
||||||
dex:bne do_line
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
|
|
||||||
Usage
|
|
||||||
-----
|
|
||||||
|
|
||||||
xasm is a command-line tool.
|
|
||||||
Therefore you additionally need a programmer's text editor.
|
|
||||||
|
|
||||||
I use http://www.scintilla.org/SciTE.html[SciTE].
|
|
||||||
Syntax highlighting definition for it is included with xasm.
|
|
||||||
To install it, copy `xasm.properties` to the SciTE directory,
|
|
||||||
select _Options / Open Global Options File_, type `import xasm`
|
|
||||||
at the end and save the global configuration file.
|
|
||||||
|
|
||||||
image::scite.png[xasm code in SciTE]
|
|
||||||
|
|
||||||
Download
|
|
||||||
--------
|
|
||||||
|
|
||||||
- link:xasm-3.0.2-windows.zip[xasm 3.0.2 for Windows]
|
|
||||||
- link:xasm-3.0.2-src.zip[xasm 3.0.2 source code]
|
|
||||||
- link:xasm261.zip[xasm 2.6.1 for DOS]
|
|
||||||
|
|
||||||
For other systems, such as GNU/Linux and MacOS X, install a D 1.x compiler
|
|
||||||
and compile xasm from source code.
|
|
||||||
|
|
||||||
Inflate
|
|
||||||
-------
|
|
||||||
|
|
||||||
Do you need a good decompression routine for 6502?
|
|
||||||
See my link:inflate.html[inflate routine].
|
|
||||||
|
|
||||||
Links
|
|
||||||
-----
|
|
||||||
|
|
||||||
- http://atari800.sourceforge.net/[Atari800 emulator] - portable emulator of Atari 8-bit computers
|
|
||||||
- http://sources.pigwa.net/[Atari XL/XE Source Archive] - source code of Atari demos, utilities and games
|
|
||||||
- http://www.cc65.org/[cc65] - C cross-compiler targeting 6502-based systems
|
|
||||||
- http://epi.atari8.info/hcasm.php[HardCore Assembler] - 6502/65816 cross-assembler, partially supporting xasm's syntax
|
|
||||||
- http://mads.atari8.info/[MADS] - another 6502/65816 cross-assembler, partially supporting xasm's syntax
|
|
||||||
- http://wudsn.com/[WUDSN IDE] - Eclipse plugin, front-end to several 6502 cross-assemblers including xasm
|
|
BIN
www/scite.png
BIN
www/scite.png
Binary file not shown.
Before Width: | Height: | Size: 24 KiB |
@@ -1,6 +1,6 @@
|
|||||||
XASM (1)
|
XASM (1)
|
||||||
========
|
========
|
||||||
Piotr Fusik <fox@scene.pl>
|
:doctype: manpage
|
||||||
|
|
||||||
NAME
|
NAME
|
||||||
----
|
----
|
||||||
@@ -16,6 +16,7 @@ DESCRIPTION
|
|||||||
|
|
||||||
'SOURCE_FILE' is the name of the source file
|
'SOURCE_FILE' is the name of the source file
|
||||||
(you may omit the default `.asx` extension).
|
(you may omit the default `.asx` extension).
|
||||||
|
Using '-' as 'SOURCE_FILE' makes *xasm* read from standard input.
|
||||||
When invoked without any options, *xasm* assembles 'SOURCE_FILE'
|
When invoked without any options, *xasm* assembles 'SOURCE_FILE'
|
||||||
and writes the result to an object file named 'SOURCE_FILE'
|
and writes the result to an object file named 'SOURCE_FILE'
|
||||||
with the extension changed to `.obx`.
|
with the extension changed to `.obx`.
|
||||||
@@ -23,57 +24,61 @@ with the extension changed to `.obx`.
|
|||||||
OPTIONS
|
OPTIONS
|
||||||
-------
|
-------
|
||||||
|
|
||||||
*/c*::
|
*-c*::
|
||||||
Specifies that lines skipped due to a false condition
|
The listing should include conditionally skipped lines.
|
||||||
should be included in the listing file.
|
|
||||||
|
|
||||||
[[new_deflabel]]*/d:*'LABEL'='VALUE'::
|
[[new_deflabel]]*-d* 'LABEL'='VALUE'::
|
||||||
Defines a label.
|
Defines a label.
|
||||||
'LABEL' should be a valid label name.
|
'LABEL' should be a valid label name.
|
||||||
'VALUE' may be any expression (may reference to labels defined in source files).
|
'VALUE' may be any expression (potentially referencing labels defined in source files).
|
||||||
You may use several */d* options to define many labels from the command line.
|
You may use several *-d* options to define many labels on the command line.
|
||||||
|
|
||||||
*/i*::
|
*-i*::
|
||||||
Excludes included files from the listing file.
|
The listing file should exclude included files.
|
||||||
|
|
||||||
*/l*'[:LISTING_FILE]'::
|
*-l* '[LISTING_FILE]'::
|
||||||
Generates listing file.
|
Generates a listing file.
|
||||||
|
Using '-' as 'LISTING_FILE' makes *xasm* write to standard output.
|
||||||
If 'LISTING_FILE' is omitted, the listing filename
|
If 'LISTING_FILE' is omitted, the listing filename
|
||||||
is 'SOURCE_FILE' with the extension changed to `.lst`.
|
is 'SOURCE_FILE' with the extension changed to `.lst`.
|
||||||
|
|
||||||
[[new_makefile]]*/M*::
|
[[new_makefile]]*-M*::
|
||||||
Prints a rule for use in a `Makefile`.
|
Prints a `Makefile` rule.
|
||||||
First line of the rule lists 'OBJECT_FILE' as the target of the rule
|
First line of the rule lists 'OBJECT_FILE' as the target of the rule
|
||||||
and all source files (including the ones specified by `icl` and `ins` directives)
|
and all source files (including the ones specified with `icl` and `ins`) as dependencies.
|
||||||
as dependencies. The second line contains the command line with `OBJECT_FILE`
|
The second line contains the command line with 'OBJECT_FILE'
|
||||||
replaced by the *make* macro `$@` and `SOURCE_FILE` replaced by the macro `$<`.
|
replaced by the *make* macro `$@` and 'SOURCE_FILE' replaced by the macro `$<`.
|
||||||
Dollars in the command line are doubled.
|
Dollar signs in the command line are doubled.
|
||||||
Your `make` or shell may require more escaping.
|
Your *make* or shell may require further escaping.
|
||||||
|
|
||||||
*/o*':OBJECT_FILE'::
|
*-o* 'OBJECT_FILE'::
|
||||||
Sets output file name.
|
Sets output file name.
|
||||||
The default is 'SOURCE_FILE' with the extension changed to `.obx`.
|
Using '-' as 'OBJECT_FILE' makes *xasm* write to standard output.
|
||||||
|
The default is 'SOURCE_FILE' with the extension changed to `.obx`, or
|
||||||
|
standard output if standard input was specified as source.
|
||||||
|
|
||||||
[[new_fullpaths]]*/p*::
|
[[new_fullpaths]]*-p*::
|
||||||
Prints fully qualified file names in listing and error messages.
|
Prints absolute paths in listing and error messages.
|
||||||
This option works only on Windows and is silently ignored on other platforms.
|
|
||||||
|
|
||||||
[[new_quiet]]*/q*::
|
[[new_quiet]]*-q*::
|
||||||
Quiet mode. Prevents *xasm* from printing the logo and the summary.
|
Quiet mode. Prevents *xasm* from printing its banner and compilation summary.
|
||||||
|
|
||||||
*/t*'[:LABEL_FILE]'::
|
*-t* '[LABEL_FILE]'::
|
||||||
Generates label table.
|
Generates a label table.
|
||||||
If 'LABEL_FILE' is omitted then the table is appended to the listing.
|
Using '-' as 'LABEL_FILE' makes *xasm* write to standard output.
|
||||||
|
If 'LABEL_FILE' is omitted then the table is appended at the end of the listing.
|
||||||
|
|
||||||
[[new_unlabels]]*/u*::
|
[[new_unlabels]]*-u*::
|
||||||
Issues a warning message for each label whose value is unused.
|
Issues warnings for unreferenced labels.
|
||||||
|
|
||||||
Alternatively, you may use Unix-style options, for example:
|
Alternatively, you may use DOS-style options, for example:
|
||||||
|
|
||||||
-----------------------------------------------------------
|
-----------------------------------------------------------
|
||||||
xasm -i -d DEBUG=1 -l listing.lst source.asx
|
xasm /i /d:DEBUG=1 /l:listing.lst source.asx
|
||||||
-----------------------------------------------------------
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
These are deprecated because they are incompatible with https://www.msys2.org[MSYS2].
|
||||||
|
|
||||||
SYNTAX
|
SYNTAX
|
||||||
------
|
------
|
||||||
|
|
||||||
@@ -82,19 +87,41 @@ LF, CR, CR/LF and Atari ($9b) line terminators are supported.
|
|||||||
Labels and instructions are case-insensitive.
|
Labels and instructions are case-insensitive.
|
||||||
|
|
||||||
*xasm* is backward compatible with Quick Assembler.
|
*xasm* is backward compatible with Quick Assembler.
|
||||||
To compile QA sources with *xasm*, simply replace ATASCII-specific characters
|
To compile QA sources with *xasm*, simply replace ATASCII characters
|
||||||
with their integer codes. You also have to update all `OPT` directives,
|
in string literals with the corresponding integers.
|
||||||
but usually you can simply remove them.
|
Also update all `OPT` directives, but often you can omit them.
|
||||||
|
|
||||||
'Label' is a symbol that represents a signed 32-bit integer.
|
A 'label' is a symbol that represents a signed 32-bit integer.
|
||||||
You define a label by putting its name at the beginning of a line
|
You define a label by putting its name at the beginning of a line
|
||||||
(with no spaces before).
|
(with no spaces before).
|
||||||
The label will be assigned the current value of the 'origin counter'
|
The label will be assigned the current value of the 'origin counter'
|
||||||
(i.e. the address of the compiled instruction),
|
(that is, the address of the compiled instruction),
|
||||||
unless you use it with the `EQU` directive where it is assigned
|
unless you use it with the `EQU` directive to assign the specified value.
|
||||||
the value of the argument.
|
|
||||||
|
|
||||||
Instructions and directives must be preceded with some whitespace.
|
[[new_locallabel]]
|
||||||
|
Any label name starting with a `?` (question mark) is a 'local label'.
|
||||||
|
It is implicitly prefixed with the name of the most recently defined
|
||||||
|
'global label' (that is, a label without any `?` in name),
|
||||||
|
and remains visible until another global label is defined.
|
||||||
|
It is still possible to access a local label from anywhere in the source
|
||||||
|
by specifying its full name.
|
||||||
|
Local labels provide a way to reuse common, short label names while keeping
|
||||||
|
them unique.
|
||||||
|
Example:
|
||||||
|
----
|
||||||
|
foo ldy #0
|
||||||
|
?loop lda data,y ; full label name is FOO?LOOP
|
||||||
|
beq ?ret
|
||||||
|
jsr sendByte
|
||||||
|
iny:bne ?loop
|
||||||
|
?ret rts
|
||||||
|
|
||||||
|
bar lda baz
|
||||||
|
beq foo?ret ; ok
|
||||||
|
bne ?loop ; ERROR: Undeclared label: BAR?LOOP
|
||||||
|
----
|
||||||
|
|
||||||
|
'Instructions' and 'directives' must be preceded with some whitespace.
|
||||||
Without leading whitespace they are treated as label names.
|
Without leading whitespace they are treated as label names.
|
||||||
For example:
|
For example:
|
||||||
----
|
----
|
||||||
@@ -104,10 +131,10 @@ is a 6502 instruction, whereas
|
|||||||
----
|
----
|
||||||
nop
|
nop
|
||||||
----
|
----
|
||||||
defines a label called `nop`.
|
(without leading space) defines a label called `nop`.
|
||||||
|
|
||||||
Whole-line comments must start with a semicolon, an asterisk or a pipe,
|
Whole-line comments must start with a semicolon, an asterisk or a pipe,
|
||||||
with optional label definition and spaces before.
|
with an optional label definition and spaces before.
|
||||||
Here are examples of whole-line comments:
|
Here are examples of whole-line comments:
|
||||||
--------------------
|
--------------------
|
||||||
; this is a comment
|
; this is a comment
|
||||||
@@ -121,12 +148,12 @@ To assemble a single line several times,
|
|||||||
precede the repeat count with a colon, for example:
|
precede the repeat count with a colon, for example:
|
||||||
-----------------
|
-----------------
|
||||||
:4 asl @
|
:4 asl @
|
||||||
table :32*5 dta 5
|
mask_lookup :32 dta $80,$40,$20,$10,$08,$04,$02,$01
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
In lines with instructions or directives, a comment starts immediately
|
In lines with instructions or directives, a comment starts immediately
|
||||||
after the instruction/directive has been successfully parsed.
|
after the instruction/directive has been successfully parsed.
|
||||||
That is, in these lines *xasm* does not require a special character
|
That is, in such lines *xasm* does 'not' require any special character
|
||||||
to start a comment.
|
to start a comment.
|
||||||
-------------------------------------------------------------
|
-------------------------------------------------------------
|
||||||
lda foo ; this is a comment
|
lda foo ; this is a comment
|
||||||
@@ -135,7 +162,7 @@ to start a comment.
|
|||||||
-------------------------------------------------------------
|
-------------------------------------------------------------
|
||||||
|
|
||||||
[[new_pairing]]
|
[[new_pairing]]
|
||||||
You may put two instructions in one line so they share the operand.
|
You may put two or more instructions in one line, so they share their operand.
|
||||||
For example:
|
For example:
|
||||||
------------
|
------------
|
||||||
eor:sta foo
|
eor:sta foo
|
||||||
@@ -148,9 +175,9 @@ is equivalent to
|
|||||||
|
|
||||||
Note that
|
Note that
|
||||||
------------
|
------------
|
||||||
lda:tax #0
|
lda:tax:tay #0
|
||||||
------------
|
------------
|
||||||
is allowed because `#0` is treated as a comment for `tax`.
|
is allowed because `#0` is treated as a comment for `tax` and `tay`.
|
||||||
|
|
||||||
EXPRESSIONS
|
EXPRESSIONS
|
||||||
-----------
|
-----------
|
||||||
@@ -160,14 +187,14 @@ for 6502 indirect addressing.
|
|||||||
|
|
||||||
A number is:
|
A number is:
|
||||||
|
|
||||||
- a 32-bit decimal integer, e.g. `-12345`
|
- a 32-bit decimal integer, e.g. `12345`
|
||||||
- a 32-bit hexadecimal integer, e.g. `$abcd`
|
- a 32-bit hexadecimal integer, e.g. `$abcd`
|
||||||
- a 32-bit binary integer, e.g. `%10100101`
|
- a 32-bit binary integer, e.g. `%10100101`
|
||||||
- an ASCII character, e.g. `'a'` or `"a"`
|
- an ASCII character, e.g. `'a'` or `"a"`
|
||||||
- origin counter: `*`
|
- the current value of the origin counter: `*`
|
||||||
- a hardware register (see below), e.g. `^4e`
|
- a hardware register (see below), e.g. `^4e`
|
||||||
- [[new_opcode]]an opcode (see below), e.g. `{lda #0}` is `$a9`
|
- [[new_opcode]]an opcode (see below), e.g. `{lda #0}` is `$a9`
|
||||||
- [[new_linecnt]]the line repeat counter (see below): `#`
|
- [[new_linecnt]]the current value of the line repeat counter (see below): `#`
|
||||||
|
|
||||||
Abbreviations of Atari hardware registers are provided
|
Abbreviations of Atari hardware registers are provided
|
||||||
to save two characters (`$d40e` vs `^4e`)
|
to save two characters (`$d40e` vs `^4e`)
|
||||||
@@ -178,7 +205,7 @@ is the location of hardware registers.
|
|||||||
|
|
||||||
[cols="^m,^d,^m,^d",options="header"]
|
[cols="^m,^d,^m,^d",options="header"]
|
||||||
|================================================
|
|================================================
|
||||||
|Syntax|Chip |Value|Value (Atari 5200 mode `opt g+`)
|
|Syntax|Chip |Value|Value in Atari 5200 mode (`opt g+`)
|
||||||
| ^0x |GTIA |$D00x|`$C00x`
|
| ^0x |GTIA |$D00x|`$C00x`
|
||||||
| ^1x |GTIA |$D01x|`$C01x`
|
| ^1x |GTIA |$D01x|`$C01x`
|
||||||
| ^2x |POKEY|$D20x|`$E80x`
|
| ^2x |POKEY|$D20x|`$E80x`
|
||||||
@@ -228,14 +255,15 @@ The following 'binary operators' are supported:
|
|||||||
[[new_unary]]
|
[[new_unary]]
|
||||||
The following 'unary operators' are supported:
|
The following 'unary operators' are supported:
|
||||||
|
|
||||||
- `+` Plus (does nothing)
|
- `+` Plus (no operation)
|
||||||
- `-` Minus (changes the sign)
|
- `-` Minus (changes the sign)
|
||||||
- `~` Bitwise NOT (complements all bits)
|
- `~` Bitwise NOT (complements all bits)
|
||||||
- `!` Logical NOT (changes true to false and vice versa)
|
- `!` Logical NOT (changes true to false and vice versa)
|
||||||
- `<` Low (extracts the low byte)
|
- `<` Low (extracts the low byte)
|
||||||
- `>` High (extracts the high byte)
|
- `>` High (extracts the high byte)
|
||||||
|
|
||||||
The operator precedence is following:
|
Although the operators are like those used in C, C++, C# and Java,
|
||||||
|
their precedence is different:
|
||||||
|
|
||||||
- first: `[]` (brackets)
|
- first: `[]` (brackets)
|
||||||
- `+ - ~ < >` (unary)
|
- `+ - ~ < >` (unary)
|
||||||
@@ -246,68 +274,79 @@ The operator precedence is following:
|
|||||||
- `&&` (binary)
|
- `&&` (binary)
|
||||||
- last: `||` (binary)
|
- last: `||` (binary)
|
||||||
|
|
||||||
Although the operators are similar to those used in C, C++ and Java,
|
The compare and logical operators assume that zero is false
|
||||||
their priorities are different than in these languages.
|
and a non-zero is true. They return 1 for true.
|
||||||
|
|
||||||
Compare and logical operators assume that zero is false and a non-zero
|
|
||||||
is true. They return 1 for true.
|
|
||||||
|
|
||||||
Expressions are calculated in signed 32-bit arithmetic.
|
Expressions are calculated in signed 32-bit arithmetic.
|
||||||
"Arithmetic overflow" error signals overflow of the 32-bit range.
|
An overflow is signaled with an "Arithmetic overflow" error.
|
||||||
|
|
||||||
DIRECTIVES
|
DIRECTIVES
|
||||||
----------
|
----------
|
||||||
|
|
||||||
*EQU* - assign value of expression to label::
|
*EQU* - assign the value of an expression to a label::
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
+
|
||||||
----------
|
----------
|
||||||
five equ 5
|
five equ 5
|
||||||
here equ *
|
here equ *
|
||||||
----------
|
----------
|
||||||
|
|
||||||
[[new_opt]]*OPT* - set assembler options::
|
[[new_opt]]*OPT* - set assembler options::
|
||||||
Five options are available:
|
|
||||||
|
|
||||||
- `F` - fill the space between memory areas with `$FF`
|
Six options are available:
|
||||||
- `G` - Atari 5200 mode for hardware register abbreviations
|
|
||||||
|
- `F` - fill the space between noncontiguous memory areas with `$FF` bytes
|
||||||
|
- `G` - Atari 5200 mode for hardware register abbreviations (`^xx`)
|
||||||
- `H` - generate Atari executable headers
|
- `H` - generate Atari executable headers
|
||||||
- `L` - write to the listing
|
- `L` - write the listing
|
||||||
- `O` - write to the object file
|
- `O` - write the object file
|
||||||
|
- `U` - warn of unused labels
|
||||||
|
|
||||||
|
+
|
||||||
You can turn any of these on or off.
|
You can turn any of these on or off.
|
||||||
The default (if no `OPT` specified) is `opt f-g-h+l+o+`.
|
The default (before the first `OPT`) is `opt f-g-h+l+o+u+`.
|
||||||
|
For compatibility with MADS, `opt ?+` is accepted and ignored.
|
||||||
Examples:
|
Examples:
|
||||||
|
+
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
opt l- listing off
|
opt l- listing off
|
||||||
opt l+o- listing on, object file off
|
opt l+o- listing on, object file off
|
||||||
opt f+g+h- useful for Atari 5200 cartridges - raw output, 5200 hw regs
|
opt f+g+h- useful for Atari 5200 cartridges - raw output, 5200 hw regs
|
||||||
|
opt ?+ MADS compatibility, no effect
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
*ORG* - change value of the origin counter::
|
*ORG* - set the origin counter::
|
||||||
If Atari executable headers are enabled, you can include an operand prefix:
|
|
||||||
|
If Atari executable headers are enabled (`opt h+`), you can include an operand prefix:
|
||||||
|
|
||||||
- `a:` starts a new block even if it's superfluous
|
- `a:` starts a new block even if it's superfluous
|
||||||
because the new address equals the current address.
|
because the new address equals the current address.
|
||||||
- `f:` is same as `a:`, but additionally generates a double-`$FF` prefix
|
- `f:` is same as `a:`, but additionally generates a double `$FF` prefix
|
||||||
before the new header. This prefix is automatically generated
|
before the new header. This prefix is automatically generated
|
||||||
at the beginning of the file (no need to include `f:` in the first `ORG`).
|
at the beginning of the file (no need to include `f:` in the first `ORG`).
|
||||||
|
|
||||||
|
+
|
||||||
Examples:
|
Examples:
|
||||||
|
+
|
||||||
---------------
|
---------------
|
||||||
org $600
|
org $600
|
||||||
org f:$700
|
org f:$700
|
||||||
table org *+100
|
table org *+100
|
||||||
---------------
|
---------------
|
||||||
|
+
|
||||||
In the latter example `table` points to 100 bytes
|
In the latter example `table` points to 100 bytes
|
||||||
of uninitialized data (label is assigned with `*`
|
of uninitialized data (label is assigned with `*`
|
||||||
before the `ORG` directive is executed).
|
before the `ORG` directive is executed).
|
||||||
|
+
|
||||||
[[new_orgr]]Starting with version 2.6.0, *xasm* supports code
|
[[new_orgr]]*xasm* supports code that is relocated at run time.
|
||||||
that is relocated in the memory at runtime. Let's say you want your code
|
Let's say you want your code to be located on page zero for best performance.
|
||||||
to be located on page zero. You can't normally load it directly into this
|
You can't safely load it directly into this place,
|
||||||
place, so you load it at a different address and then move in your program.
|
so you load it at a different address and then move in your program.
|
||||||
`org r:` changes the address that it used for code generation
|
`org r:` changes the address that it used for code generation
|
||||||
but not the address used for generating Atari executable headers.
|
but not the address used for generating Atari executable headers.
|
||||||
Example:
|
Example:
|
||||||
|
+
|
||||||
--------------------------------------
|
--------------------------------------
|
||||||
org $8000
|
org $8000
|
||||||
ldx #code_length-1
|
ldx #code_length-1
|
||||||
@@ -320,10 +359,11 @@ code_zpage
|
|||||||
jmp * ; ... or something more sensible
|
jmp * ; ... or something more sensible
|
||||||
code_length equ *-code_zpage
|
code_length equ *-code_zpage
|
||||||
--------------------------------------
|
--------------------------------------
|
||||||
|
+
|
||||||
Note that both `*` and label definitions use the counter used
|
Note that both `*` and label definitions use the counter used
|
||||||
for code generation. There is no direct access to the other counter,
|
for code generation. There is no direct access to the other counter.
|
||||||
because I think this is not useful. If you really need it, you can
|
You can only calculate it:
|
||||||
always type something like:
|
+
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
where_am_i equ *-code_zpage+code_loaded
|
where_am_i equ *-code_zpage+code_loaded
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
@@ -341,17 +381,17 @@ where_am_i equ *-code_zpage+code_loaded
|
|||||||
You may enter many expressions in parentheses and combine different types
|
You may enter many expressions in parentheses and combine different types
|
||||||
of data in single line, separating things with commas.
|
of data in single line, separating things with commas.
|
||||||
|
|
||||||
You may also define a sine lookup table. The syntax is:
|
You may also build a sine lookup table. The syntax is:
|
||||||
-------------------------------
|
-------------------------------
|
||||||
sin(center,amp,size,first,last)
|
sin(center,amp,period,first,last)
|
||||||
-------------------------------
|
-------------------------------
|
||||||
where:
|
where:
|
||||||
|
|
||||||
* `center` is an integer which is added to every sine value
|
* `center` is an integer which is added to every sine value
|
||||||
* `amp` is the sine amplitude
|
* `amp` is the sine amplitude
|
||||||
* `size` is the sine period
|
* `period` is the number of values per sine period
|
||||||
* `first,last` define the range of sine arguments.
|
* `first,last` define the range of sine arguments.
|
||||||
They are optional. The default are `0,size-1`.
|
They are optional. The default are `0,period-1`.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
----------------------------
|
----------------------------
|
||||||
@@ -372,8 +412,7 @@ Real numbers are stored in the 6-byte Atari Floating-Point format.
|
|||||||
|
|
||||||
A character string consists of any number of characters surrounded by quotation
|
A character string consists of any number of characters surrounded by quotation
|
||||||
marks. You can include the quotation marks in the string by doubling them.
|
marks. You can include the quotation marks in the string by doubling them.
|
||||||
Placing a `*` character after a string inverts
|
If the string is suffixed with a `*` character, bit 7 in every byte gets inverted.
|
||||||
the highest bit in every byte of the string.
|
|
||||||
--
|
--
|
||||||
+
|
+
|
||||||
Examples of `DTA`:
|
Examples of `DTA`:
|
||||||
@@ -384,56 +423,72 @@ Examples of `DTA`:
|
|||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
*ICL* - include another source file::
|
*ICL* - include another source file::
|
||||||
|
|
||||||
Specifies another file to be included in the assembly as if the contents
|
Specifies another file to be included in the assembly as if the contents
|
||||||
of the referenced file appeared in place of the `ICL` statement.
|
of the referenced file appeared in place of the `ICL` statement.
|
||||||
The included file may contain other `ICL` statements.
|
The included file may contain other `ICL` statements.
|
||||||
The `.asx` extension is added if none given.
|
The `.asx` extension is added if none given.
|
||||||
Examples:
|
Examples:
|
||||||
|
+
|
||||||
-----------------
|
-----------------
|
||||||
icl 'macros.asx'
|
icl 'macros.asx'
|
||||||
icl 'lib/fileio'
|
icl 'lib/fileio'
|
||||||
-----------------
|
-----------------
|
||||||
Note: for portability, use only relative paths and slash as the separator.
|
+
|
||||||
This way your sources will compile under Windows and Linux.
|
NOTE: For Windows/macOS/Linux portability use relative paths
|
||||||
|
and slashes as path separators.
|
||||||
|
|
||||||
|
*END* - end this source file::
|
||||||
|
|
||||||
*END* - end assembling file::
|
|
||||||
May be used if the source file ends with something which shouldn't
|
May be used if the source file ends with something which shouldn't
|
||||||
be read by *xasm* (e.g. your notes). At the end of file it's optional.
|
be read by *xasm* (e.g. your notes).
|
||||||
|
|
||||||
|
*INS* - insert binary file contents::
|
||||||
|
|
||||||
*INS* - insert contents of file::
|
|
||||||
Copies every byte of the specified file into the object file and updates
|
Copies every byte of the specified file into the object file and updates
|
||||||
the origin counter, as if these bytes were defined with `DTA`.
|
the origin counter, as if these bytes were specified in a `DTA`.
|
||||||
You may specify a range of the file to insert. The syntax is:
|
You may specify a range of the file to insert. The syntax is:
|
||||||
|
+
|
||||||
-----------------------------
|
-----------------------------
|
||||||
ins 'file'[,offset[,length]]
|
ins 'file'[,offset[,length]]
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
+
|
||||||
The first byte in a file has the offset of zero.
|
The first byte in a file has the offset of zero.
|
||||||
If the offset is negative, it counts from the end of the file.
|
If the offset is negative, it counts from the end of the file.
|
||||||
Examples:
|
Examples:
|
||||||
|
+
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
ins 'picture.raw'
|
ins 'picture.raw'
|
||||||
ins 'file',-256 insert last 256 bytes of file
|
ins 'file',-256 ; insert last 256 bytes of file
|
||||||
ins 'file',10,10 insert bytes 10..19 of file
|
ins 'file',10,10 ; insert bytes 10..19 of file
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
|
|
||||||
*RUN* - set run address in the Atari executable format::
|
*RUN* - set the Atari executable run address::
|
||||||
|
|
||||||
|
+
|
||||||
---------
|
---------
|
||||||
run main
|
run main
|
||||||
---------
|
---------
|
||||||
|
+
|
||||||
is equivalent to:
|
is equivalent to:
|
||||||
|
+
|
||||||
------------
|
------------
|
||||||
org $2e0
|
org $2e0
|
||||||
dta a(main)
|
dta a(main)
|
||||||
------------
|
------------
|
||||||
|
|
||||||
*INI* - set init address in the Atari executable format::
|
*INI* - set the Atari executable init address::
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
+
|
||||||
------------
|
------------
|
||||||
ini showpic
|
ini showloadingpic
|
||||||
------------
|
------------
|
||||||
|
|
||||||
*ERT* - generate error if expression evaluates to true::
|
*ERT* - abort the assembly with an error if an expression is true::
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
+
|
||||||
-----------------------
|
-----------------------
|
||||||
ert *>$c000
|
ert *>$c000
|
||||||
ert len1>$ff||len2>$ff
|
ert len1>$ff||len2>$ff
|
||||||
@@ -443,10 +498,12 @@ Examples:
|
|||||||
*ELI* - else if::
|
*ELI* - else if::
|
||||||
*ELS* - else::
|
*ELS* - else::
|
||||||
*EIF* - end if::
|
*EIF* - end if::
|
||||||
|
|
||||||
With these directives you can construct fragments which
|
With these directives you can construct fragments which
|
||||||
are assembled only when a condition is met.
|
are assembled only when a condition is met.
|
||||||
Conditional constructions can be nested.
|
Conditional constructions can be nested.
|
||||||
Example:
|
Example:
|
||||||
|
+
|
||||||
-------------
|
-------------
|
||||||
noscr equ 1
|
noscr equ 1
|
||||||
widescr equ 1
|
widescr equ 1
|
||||||
@@ -459,7 +516,9 @@ widescr equ 1
|
|||||||
eif
|
eif
|
||||||
sta $22f
|
sta $22f
|
||||||
-------------
|
-------------
|
||||||
Note: the above example may be rewritten using the 'repeat line' feature:
|
+
|
||||||
|
NOTE: Alternatively, the above example can be written using the 'repeat line' feature:
|
||||||
|
+
|
||||||
--------------------------
|
--------------------------
|
||||||
noscr equ 1
|
noscr equ 1
|
||||||
widescr equ 1
|
widescr equ 1
|
||||||
@@ -471,18 +530,21 @@ widescr equ 1
|
|||||||
|
|
||||||
PSEUDO COMMANDS
|
PSEUDO COMMANDS
|
||||||
---------------
|
---------------
|
||||||
'Pseudo commands' are built-in macros. There are no user-defined macros in *xasm*.
|
'Pseudo commands' are built-in macros. There are 'no' user-defined macros in *xasm*.
|
||||||
|
|
||||||
|
*ADD* - add without carry::
|
||||||
|
|
||||||
*ADD* - addition without carry::
|
|
||||||
If you have ever programmed a 6502, you must have noticed that you had
|
If you have ever programmed a 6502, you must have noticed that you had
|
||||||
to use a `CLC` before `ADC` for every simple addition.
|
to use a `CLC` before `ADC` for every simple addition.
|
||||||
+
|
+
|
||||||
*xasm* can do it for you. `ADD` replaces two instructions: `CLC` and `ADC`.
|
*xasm* can do it for you. `ADD` replaces two instructions: `CLC` and `ADC`.
|
||||||
|
|
||||||
*SUB* - subtraction::
|
*SUB* - subtract::
|
||||||
It is `SEC` and `SBC`.
|
|
||||||
|
It is `SEC` followed by `SBC`.
|
||||||
|
|
||||||
[[new_repskip]]*RCC, RCS, REQ, RMI, RNE, RPL, RVC, RVS* - conditional repeat::
|
[[new_repskip]]*RCC, RCS, REQ, RMI, RNE, RPL, RVC, RVS* - conditional repeat::
|
||||||
|
|
||||||
These are branches to the previous instruction.
|
These are branches to the previous instruction.
|
||||||
They take no operand, because the branch target is the address
|
They take no operand, because the branch target is the address
|
||||||
of the previously assembled instruction or pseudo command.
|
of the previously assembled instruction or pseudo command.
|
||||||
@@ -505,6 +567,7 @@ copy_loop lda $500,x
|
|||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
*SCC, SCS, SEQ, SMI, SNE, SPL, SVC, SVS* - conditional skip::
|
*SCC, SCS, SEQ, SMI, SNE, SPL, SVC, SVS* - conditional skip::
|
||||||
|
|
||||||
These are branches over the next instruction. No operand is required,
|
These are branches over the next instruction. No operand is required,
|
||||||
because the target is the address of the instruction following
|
because the target is the address of the instruction following
|
||||||
the next instruction.
|
the next instruction.
|
||||||
@@ -518,9 +581,10 @@ Example:
|
|||||||
+
|
+
|
||||||
In the above example the 16-bit variable `ptr` is incremented by 40.
|
In the above example the 16-bit variable `ptr` is incremented by 40.
|
||||||
|
|
||||||
*JCC, JCS, JEQ, JMI, JNE, JPL, JVC, JVS* - conditional jumps::
|
*JCC, JCS, JEQ, JMI, JNE, JPL, JVC, JVS* - conditional jump::
|
||||||
|
|
||||||
These are long branches. While standard branches (such as `BNE`)
|
These are long branches. While standard branches (such as `BNE`)
|
||||||
have range of -128..+127, these jumps have range of 64 kB.
|
have range of -128..+127 bytes, these jumps have range of 64 KB.
|
||||||
For example:
|
For example:
|
||||||
+
|
+
|
||||||
---------
|
---------
|
||||||
@@ -534,6 +598,7 @@ is equivalent to:
|
|||||||
-------------
|
-------------
|
||||||
|
|
||||||
*INW* - increment word::
|
*INW* - increment word::
|
||||||
|
|
||||||
Increments a 16-bit word in the memory.
|
Increments a 16-bit word in the memory.
|
||||||
Example:
|
Example:
|
||||||
+
|
+
|
||||||
@@ -548,7 +613,8 @@ is equivalent to:
|
|||||||
sne:inc dest+1
|
sne:inc dest+1
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
*MVA, MVX, MVY* - move byte using accumulator, X or Y::
|
*MVA, MVX, MVY* - move a byte using the accumulator, X or Y::
|
||||||
|
|
||||||
Each of these pseudo commands requires two operands
|
Each of these pseudo commands requires two operands
|
||||||
and substitutes two commands:
|
and substitutes two commands:
|
||||||
+
|
+
|
||||||
@@ -559,33 +625,34 @@ and substitutes two commands:
|
|||||||
----------------------------------------
|
----------------------------------------
|
||||||
|
|
||||||
[[new_mwinde]]*MWA, MWX, MWY* - move word using accumulator, X or Y::
|
[[new_mwinde]]*MWA, MWX, MWY* - move word using accumulator, X or Y::
|
||||||
These pseudo commands require two operands and are combinations of two `MV*`'s:
|
|
||||||
|
These pseudo commands require two operands and are combinations of two `MVA`/`MVX`/`MWY`:
|
||||||
one to move the low byte, and the other to move the high byte.
|
one to move the low byte, and the other to move the high byte.
|
||||||
You can't use indirect nor pseudo addressing mode with `MW*`.
|
You can't use indirect nor pseudo addressing mode with `MWA`/`MWX`/`MWY`.
|
||||||
Destination must be an absolute address, optionally indexed.
|
Destination must be an absolute or zeropage address, optionally indexed.
|
||||||
When source is also an absolute address, an `mw* source dest` expands to:
|
When source is also an absolute or zeropage address, an `mwa source dest` expands to:
|
||||||
+
|
+
|
||||||
--------------------
|
--------------------
|
||||||
mv* source dest
|
mva source dest
|
||||||
mv* source+1 dest+1
|
mva source+1 dest+1
|
||||||
--------------------
|
--------------------
|
||||||
+
|
+
|
||||||
When source is an immediate value, an `mw* #immed dest` expands to:
|
When source is an immediate value, an `mwa #immed dest` expands to:
|
||||||
+
|
+
|
||||||
------------------
|
------------------
|
||||||
mv* <immed dest
|
mva <immed dest
|
||||||
mv* >immed dest+1
|
mva >immed dest+1
|
||||||
------------------
|
------------------
|
||||||
+
|
+
|
||||||
When `<immed` equals `>immed` and `immed` is not forward-referenced,
|
When `<immed` equals `>immed` and `immed` is not forward-referenced,
|
||||||
*xasm* skips the second `LD*`:
|
*xasm* skips the second `LDA`, generating the following code:
|
||||||
+
|
+
|
||||||
----------------
|
----------------
|
||||||
mv* <immed dest
|
mva <immed dest
|
||||||
st* dest+1
|
sta dest+1
|
||||||
----------------
|
----------------
|
||||||
+
|
+
|
||||||
If possible, `MWX` and `MWY` use increment/decrement commands.
|
If possible, `MWX` and `MWY` use increment/decrement instructions.
|
||||||
For example, `mwx #1 dest` expands to:
|
For example, `mwx #1 dest` expands to:
|
||||||
+
|
+
|
||||||
-----------
|
-----------
|
||||||
@@ -598,11 +665,11 @@ For example, `mwx #1 dest` expands to:
|
|||||||
ADDRESSING MODES
|
ADDRESSING MODES
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
All addressing modes are entered in the standard 6502 convention
|
Addressing modes are entered in the standard 6502 convention.
|
||||||
except for the accumulator addressing mode,
|
An exception is the accumulator mode marked with the `@` character
|
||||||
which should be marked with the `@` character (as in Quick Assembler).
|
for compatibility with Quick Assembler.
|
||||||
|
|
||||||
For Quick Assembler compatibility, there are two extra immediate
|
Also for Quick Assembler compatibility, there are two extra immediate
|
||||||
addressing modes: `<` and `>`, which use the low/high byte of a 16-bit word constant.
|
addressing modes: `<` and `>`, which use the low/high byte of a 16-bit word constant.
|
||||||
Unlike in Quick Assembler, you can alternatively use
|
Unlike in Quick Assembler, you can alternatively use
|
||||||
the more common syntax: `#<` and `#>`.
|
the more common syntax: `#<` and `#>`.
|
||||||
@@ -646,13 +713,47 @@ and pseudo commands, except for `MWA`, `MWX` and `MWY`:
|
|||||||
HISTORY
|
HISTORY
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
Version 3.2.1 (2022-12-08)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
- source can optionally be read from standard input, and object can be
|
||||||
|
written to standard output instead of files (by Adrian Matoga)
|
||||||
|
- <<new_pairing,any number of instructions in one line>> (by Adrian Matoga)
|
||||||
|
|
||||||
|
Version 3.2.0 (2021-06-22)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
- <<new_locallabel,local labels>> (contributed by Adrian Matoga)
|
||||||
|
- fixed emitted bytes not shown in the listing after `OPT L+` (by Adrian Matoga)
|
||||||
|
- emit shorter code for moving a negative immediate value with `MWX`/`MWY`
|
||||||
|
- Windows binary signed
|
||||||
|
- macOS binary signed, notarized, installed in `/usr/local/bin`
|
||||||
|
|
||||||
|
Version 3.1.1 (2019-11-20)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
- remove partial object file on error (requested by Bill Kendrick)
|
||||||
|
- report label name in the unused label warning (requested by Peter Dell)
|
||||||
|
- support `a:`/`f:` modifiers for `RUN`/`INI`
|
||||||
|
- improved performance with network drives (reported by Marek Pavlik)
|
||||||
|
|
||||||
|
Version 3.1.0 (2014-07-20)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
- OS X, Ubuntu and Fedora distributions
|
||||||
|
- `INS` can be repeated (suggested by Marek Pavlik) and taken "opcode" of
|
||||||
|
- `OPT U-` disables <<new_unlabels,*/u*>> unused label warnings
|
||||||
|
(suggested by Marek Pavlik)
|
||||||
|
- if the file to be included cannot be opened, report an error in the `ICL` line
|
||||||
|
(suggested by Peter Dell)
|
||||||
|
- removed duplicate filenames for <<new_makefile,*/M*>>
|
||||||
|
- implemented <<new_fullpaths,*/p*>> outside Windows
|
||||||
|
- source code updated from D1 to D2
|
||||||
|
- project moved to GitHub
|
||||||
|
|
||||||
Version 3.0.2 (2009-10-17)
|
Version 3.0.2 (2009-10-17)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
- fixed "Branch out of range" error message - was overstated by 256 bytes
|
- fixed "Branch out of range" error message - was overstated by 256 bytes
|
||||||
for backward branches
|
for backward branches
|
||||||
- <<new_makefile,new command-line option */M* prints Makefile rule>>
|
- <<new_makefile,new command-line option */M* prints a Makefile rule>>
|
||||||
- command-line options are now case-insensitive
|
- command-line options are now case-insensitive
|
||||||
- on Windows error messages are printed in red, warnings in yellow
|
- on Windows, error messages are printed in red, warnings in yellow
|
||||||
|
|
||||||
Version 3.0.1 (2007-04-22)
|
Version 3.0.1 (2007-04-22)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -663,11 +764,11 @@ Version 3.0.1 (2007-04-22)
|
|||||||
Version 3.0.0 (2005-05-22)
|
Version 3.0.0 (2005-05-22)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
- rewritten from the x86 assembly language to the
|
- rewritten from the x86 assembly language to the
|
||||||
http://www.digitalmars.com/d[D programming language] - Linux version
|
http://dlang.org/[D programming language] - Linux version
|
||||||
is now available and DOS is no longer supported
|
is now available and DOS is no longer supported
|
||||||
- no limits for line length, number of `ICLs`, `ORGs`,`IFTs` and labels
|
- no limits on line length, number of `ICLs`, `ORGs`, `IFTs` and labels
|
||||||
- Unix-style command-line options are supported
|
- Unix-style command-line options are supported
|
||||||
- */e* option is no longer supported
|
- the */e* option is removed
|
||||||
- the label table is now sorted alphabetically
|
- the label table is now sorted alphabetically
|
||||||
|
|
||||||
Version 2.6.1 (2005-05-21)
|
Version 2.6.1 (2005-05-21)
|
||||||
@@ -696,8 +797,7 @@ Version 2.6.0 (2005-02-07)
|
|||||||
- <<new_linecnt,line repeat counter>>
|
- <<new_linecnt,line repeat counter>>
|
||||||
- label values are now 32-bit, not just 17-bit
|
- label values are now 32-bit, not just 17-bit
|
||||||
- command-line options */n* and */s* are no longer supported
|
- command-line options */n* and */s* are no longer supported
|
||||||
- fatal I/O errors (such as floppy not ready) no longer print the annoying
|
- fatal I/O errors no longer print the annoying "Abort, Retry, Ignore" message
|
||||||
"Abort, Retry, Ignore" message
|
|
||||||
|
|
||||||
Version 2.5.2 (2002-10-03)
|
Version 2.5.2 (2002-10-03)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -712,7 +812,7 @@ Version 2.5.1 (2002-08-21)
|
|||||||
|
|
||||||
Version 2.5 (2002-07-08)
|
Version 2.5 (2002-07-08)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
- fixed another bug, very similar to the previous one, e.g.
|
- fixed another bug similar to the previous one, for example:
|
||||||
+
|
+
|
||||||
----------
|
----------
|
||||||
ift 0
|
ift 0
|
||||||
@@ -744,14 +844,13 @@ Version 2.4 (2002-05-22)
|
|||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
- fixed incorrect unary operator precedence
|
- fixed incorrect unary operator precedence
|
||||||
- fixed wrong label value after a skip pseudo command
|
- fixed wrong label value after a skip pseudo command
|
||||||
- the assembler is .EXE (.COM caused problems with DJGPP *make* due
|
- the assembler is an .EXE (.COM caused problems with DJGPP *make* due
|
||||||
to a bug in the DJGPP runtime)
|
to a bug in the DJGPP runtime)
|
||||||
- the assembler executable is not compressed (so it occupies less space in the ZIP)
|
- the assembler executable is no longer compressed
|
||||||
- improved command-line parsing: options may be used before source file name,
|
- improved command-line parsing: options may be used before the source file name,
|
||||||
tab character is a valid separator, slash may be used as a directory separator
|
tab is a valid separator, slash may be used as a directory separator
|
||||||
- error and warning messages are written to stderr, not stdout
|
- error and warning messages are written to stderr, not stdout
|
||||||
- added `==` (equals) operator, which is equivalent to `=`,
|
- added `==` (equals) operator, equivalent to `=`, but familiar to C/C++/Java programmers
|
||||||
but more natural for C/C++/Java programmers
|
|
||||||
- <<new_deflabel,added `/d:label=value` option: define a label>>
|
- <<new_deflabel,added `/d:label=value` option: define a label>>
|
||||||
- <<new_fullpaths,added `/p` option: print full paths
|
- <<new_fullpaths,added `/p` option: print full paths
|
||||||
in listing and error messages>>
|
in listing and error messages>>
|
||||||
@@ -779,11 +878,11 @@ Version 2.2 (1999-09-10)
|
|||||||
- fixed `ICL` in last line
|
- fixed `ICL` in last line
|
||||||
- fixed `OPT H-H+`
|
- fixed `OPT H-H+`
|
||||||
- fixed first `ORG *`
|
- fixed first `ORG *`
|
||||||
- no need to set origin counter until it's used
|
- no need to set the origin counter until it's needed
|
||||||
- allow Unix, Macintosh and Atari EOLs
|
- allow Unix, Macintosh and Atari EOLs
|
||||||
- value of 'true' changed to 1
|
- value of 'true' changed to 1
|
||||||
- command-line option to set environment variables on error
|
- command-line option to set environment variables on error
|
||||||
- commane-line option to assemble only if source is newer than object file
|
- command-line option to assemble only if the source is newer than the object file
|
||||||
- <<new_opcode,opcode extracting>>
|
- <<new_opcode,opcode extracting>>
|
||||||
- <<new_linerep,repeat line>>
|
- <<new_linerep,repeat line>>
|
||||||
- <<new_pairing,two instructions in line>>
|
- <<new_pairing,two instructions in line>>
|
||||||
@@ -792,7 +891,7 @@ Version 2.2 (1999-09-10)
|
|||||||
|
|
||||||
Version 2.0 (1998-11-12)
|
Version 2.0 (1998-11-12)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
- fixed: name of object file was truncated
|
- fixed: object filename was truncated
|
||||||
- fixed forward references in `EQU` and `DTA`
|
- fixed forward references in `EQU` and `DTA`
|
||||||
- fixed hex numbers
|
- fixed hex numbers
|
||||||
- `.OBX` is now the default extension for the object file
|
- `.OBX` is now the default extension for the object file
|
||||||
@@ -822,4 +921,4 @@ Piotr Fusik <fox@scene.pl>
|
|||||||
SEE ALSO
|
SEE ALSO
|
||||||
--------
|
--------
|
||||||
|
|
||||||
Website: http://xasm.atari.org[]
|
Website: https://github.com/pfusik/xasm[]
|
@@ -1,10 +1,12 @@
|
|||||||
# xasm settings for SciTE (http://www.scintilla.org/SciTE.html)
|
# xasm settings for SciTE (http://www.scintilla.org/SciTE.html)
|
||||||
|
|
||||||
file.patterns.asx=*.asx
|
file.patterns.xasm=*.asx
|
||||||
filter.asx=xasm (asx)|$(file.patterns.asm)|
|
filter.xasm=xasm (asx)|$(file.patterns.xasm)|
|
||||||
lexer.$(file.patterns.asx)=asm
|
*filter.xasm=$(filter.xasm)
|
||||||
|
lexer.$(file.patterns.xasm)=asm
|
||||||
|
*language.xasm=xasm|asx||
|
||||||
|
|
||||||
keywords.$(file.patterns.asx)= \
|
keywords.$(file.patterns.xasm)= \
|
||||||
adc add and asl bcc bcs beq bit \
|
adc add and asl bcc bcs beq bit \
|
||||||
bmi bne bpl brk bvc bvs clc cld \
|
bmi bne bpl brk bvc bvs clc cld \
|
||||||
cli clv cmp cpx cpy dec dex dey \
|
cli clv cmp cpx cpy dec dex dey \
|
||||||
@@ -32,9 +34,9 @@ style.asm.7=
|
|||||||
style.asm.12=$(colour.char)
|
style.asm.12=$(colour.char)
|
||||||
style.asm.13=$(colour.error)
|
style.asm.13=$(colour.error)
|
||||||
|
|
||||||
command.compile.$(file.patterns.asx)=xasm /o:$(FileName).xex $(FilePath)
|
command.compile.$(file.patterns.xasm)=xasm /o:$(FileName).xex $(FilePath)
|
||||||
command.build.$(file.patterns.asx)=make
|
command.build.$(file.patterns.xasm)=make
|
||||||
if PLAT_WIN
|
if PLAT_WIN
|
||||||
command.go.$(file.patterns.asx)=start $(FileName).xex
|
command.go.$(file.patterns.xasm)=start $(FileName).xex
|
||||||
if PLAT_GTK
|
if PLAT_GTK
|
||||||
command.go.$(file.patterns.asx)=atari800 -run $(FileName).xex
|
command.go.$(file.patterns.xasm)=atari800 -run $(FileName).xex
|
||||||
|
40
xasm.spec
Normal file
40
xasm.spec
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
Name: xasm
|
||||||
|
Version: 3.2.1
|
||||||
|
Release: 1
|
||||||
|
Summary: 6502 cross-assembler
|
||||||
|
License: Poetic
|
||||||
|
Source: http://pfusik.github.io/xasm/xasm-%{version}.tar.gz
|
||||||
|
URL: https://github.com/pfusik/xasm
|
||||||
|
BuildRequires: dmd >= 2, asciidoc
|
||||||
|
|
||||||
|
%description
|
||||||
|
xasm is a 6502 cross-assembler with original syntax extensions.
|
||||||
|
|
||||||
|
%global debug_package %{nil}
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q
|
||||||
|
|
||||||
|
%build
|
||||||
|
make xasm xasm.1
|
||||||
|
|
||||||
|
%install
|
||||||
|
make DESTDIR=%{buildroot} prefix=%{_prefix} install
|
||||||
|
|
||||||
|
%files
|
||||||
|
%{_bindir}/xasm
|
||||||
|
%{_mandir}/man1/xasm.1.gz
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Thu Dec 8 2022 Piotr Fusik <fox@scene.pl>
|
||||||
|
- 3.2.1-1
|
||||||
|
|
||||||
|
* Tue Jun 22 2021 Piotr Fusik <fox@scene.pl>
|
||||||
|
- 3.2.0-1
|
||||||
|
|
||||||
|
* Wed Nov 20 2019 Piotr Fusik <fox@scene.pl>
|
||||||
|
- 3.1.1-1
|
||||||
|
|
||||||
|
* Sun Jul 20 2014 Piotr Fusik <fox@scene.pl>
|
||||||
|
- 3.1.0-1
|
||||||
|
- Initial packaging
|
Reference in New Issue
Block a user