1
0
mirror of https://github.com/pfusik/xasm.git synced 2024-06-12 14:29:53 +00:00

xasm 2.4 release.

This commit is contained in:
Piotr Fusik 2002-05-22 12:24:30 +02:00
parent af437b3eaa
commit c46bf8a027
23 changed files with 667 additions and 1541 deletions

View File

@ -1,105 +0,0 @@
<HTML>
<HEAD>
<TITLE>ANTIC Documentation</TITLE>
</HEAD>
<BODY BACKGROUND="atari.gif">
<CENTER>
<H1>ANTIC Documentation</H1>
by <A HREF="mailto:pfusik@elka.pw.edu.pl">Fox/Taquart</A><P>
<HR>
<P>
<H2>Registers</H2>
<TABLE BORDER>
<TR><TD><I>&nbsp;Address&nbsp;</I></TD><TD><I>&nbsp;Read register&nbsp;</I></TD><TD><I>&nbsp;Write register&nbsp;</I></TD></TR>
<TR><TD ALIGN=center><TT>^40</TT></TD><TD>unused</TD><TD><A HREF="#dmactl">DMACTL</A></TD></TR>
<TR><TD ALIGN=center><TT>^41</TT></TD><TD>unused</TD><TD><A HREF="#chrctl">CHRCTL</A></TD></TR>
<TR><TD ALIGN=center><TT>^42</TT></TD><TD>unused</TD><TD><A HREF="#dlptr">DLPTRL</A></TD></TR>
<TR><TD ALIGN=center><TT>^43</TT></TD><TD>unused</TD><TD><A HREF="#dlptr">DLPTRH</A></TD></TR>
<TR><TD ALIGN=center><TT>^44</TT></TD><TD>unused</TD><TD><A HREF="#hscrol">HSCROL</A></TD></TR>
<TR><TD ALIGN=center><TT>^45</TT></TD><TD>unused</TD><TD><A HREF="#vscrol">VSCROL</A></TD></TR>
<TR><TD ALIGN=center><TT>^46</TT></TD><TD>unused</TD><TD>unused</TD></TR>
<TR><TD ALIGN=center><TT>^47</TT></TD><TD>unused</TD><TD><A HREF="#pmbase">PMBASE</A></TD></TR>
<TR><TD ALIGN=center><TT>^48</TT></TD><TD>unused</TD><TD>unused</TD></TR>
<TR><TD ALIGN=center><TT>^49</TT></TD><TD>unused</TD><TD><A HREF="#chbase">CHBASE</A></TD></TR>
<TR><TD ALIGN=center><TT>^4A</TT></TD><TD>unused</TD><TD><A HREF="#wsync">WSYNC</A></TD></TR>
<TR><TD ALIGN=center><TT>^4B</TT></TD><TD><A HREF="#vcount">VCOUNT</A></TD><TD>unused</TD></TR>
<TR><TD ALIGN=center><TT>^4C</TT></TD><TD><A HREF="#lpenh">LPENH</A></TD><TD>unused</TD></TR>
<TR><TD ALIGN=center><TT>^4D</TT></TD><TD><A HREF="#lpenv">LPENV</A></TD><TD>unused</TD></TR>
<TR><TD ALIGN=center><TT>^4E</TT></TD><TD>unused</TD><TD><A HREF="#nmien">NMIEN</A></TD></TR>
<TR><TD ALIGN=center><TT>^4F</TT></TD><TD><A HREF="#nmist">NMIST</A></TD><TD>unused</TD></TR>
</TABLE>
<P>
<HR>
<P>
<H2>Description</H2>
</CENTER>
<A NAME="chbase"><U>CHBASE</U>
- <B>Characters base</B><BR>
Contains high byte of character set in text modes.<P>
<A NAME="chrctl"><U>CHRCTL</U>
- <B>Characters control</B><BR>
bit 0 - display characters 128-255 as spaces<BR>
bit 1 - display characters 128-255 as inverse<BR>
bit 2 - display all characters upside down<P>
<A NAME="dlptr"><U>DLPTRL</U> <U>DLPTRH</U>
- <B>Display List pointer</B><P>
<A NAME="dmactl"><U>DMACTL</U>
- <B>DMA control</B><BR>
bits 1,0 - width of screen<BR>
00 - screen off<BR>
01 - narrow screen - 256 pixels<BR>
10 - normal screen - 320 pixels<BR>
11 - wide screen - 384 pixels<BR>
bits 3,2 - DMA for Players/Missiles<BR>
00 - no DMA for P/MG<BR>
01 - DMA for missiles<BR>
10 - DMA for players and missiles<BR>
11 - DMA for players and missiles<BR>
bit 4 - P/MG resolution<BR>
0 - 120 lines<BR>
1 - 240 lines<BR>
bit 5 - DMA for Display List<BR>
bits 7-6 - unused<P>
<A NAME="hscrol"><U>HSCROL</U>
- <B>Horizontal scroll</B><P>
<A NAME="lpenh"><U>LPENH</U>
- <B>Light pen horizontal position</B><P>
<A NAME="lpenv"><U>LPENV</U>
- <B>Light pen vertical position</B><P>
<A NAME="nmien"><U>NMIEN</U>
- <B>NMI enable</B><BR>
bits 5-0 - unused<BR>
bit 6 - enable VBLKI<BR>
bit 7 - enable DLI<P>
<A NAME="nmist"><U>NMIST</U>
- <B>NMI status</B><BR>
bits 5-0 - unused<BR>
bit 6 - VBLKI occured<BR>
bit 7 - DLI occured<P>
<A NAME="pmbase"><U>PMBASE</U>
- <B>Player/missile base</B><BR>
High byte of P/MG data<P>
<A NAME="vcount"><U>VCOUNT</U>
- <B>Vertical count</B><BR>
Contains number of scanline divided by 2.<P>
<A NAME="vscrol"><U>VSCROL</U>
- <B>Vertial scroll</B><P>
<A NAME="wsync"><U>WSYNC</U>
- <B>Wait for synchronization</B><BR>
Any value written to this register stops CPU until right border of normal screen is reached.<P>
</BODY>
</HTML>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 372 B

View File

@ -1,99 +0,0 @@
* This program detects 6502 bugs.
* Please read text after program first.
icmd equ $342
ibuf equ $344
ilen equ $348
ciomain equ $e456
org $8000
dta h(*) Buggy jump fetches this byte...
lda #$ff ... and jumps to this location
jmp cont
start lda #11 Clear screen
ldx <clstxt
ldy #1
jsr callio
* Check ADC bug
sed
lda #$99 BCD 99+01=00
add #1
cld
seq Z flag set: no bug
lda #$ff
ldx <adctxt
jsr print
* Check BRK bug
sei Disable IRQs
inc ^4e Disable NMIs
mva #$fe ^31 Disable ROM
mwa #nmi $fffa Set my NMI vector
mwa #irq $fffe Set my IRQ vector
lsr ^4e Enable VBLKI
irq brk BRK interrupt - infinite loop, so...
nmi inc ^31 NMI always occurs on BRK
cli
pla:pla
sub <irq
seq Return adr points BRK: no bug
lda #$ff
ldx <brktxt
jsr print
* Check JMP bug
jmp (jmpptr) You'll receive a warning from X-Asm here!
cont ldx <jmptxt
jsr print
jmp * Halt CPU
* Print results (A=$ff:bug or 0:no_bug, X=<cmdtxt)
print pha Save A
lda #11 CIO write command
ldy #3 Print 3 letters
jsr callio
ldx <nobtxt
pla Restore A
seq A=0: X=<nobtxt
ldx <bugtxt A<>0: X=<bugtxt
lda #9 CIO write_to_eol command
ldy #$ff Limit of printed characters
callio sta icmd Call "E:" CIO: A-cmd X-<buf Y-len
stx ibuf
mva >* ibuf+1
sty ilen
mvx #0 ilen+1 Channel 0, length<256
jmp ciomain
clstxt dta b(125) Clear screen control code
adctxt dta c'ADC'
brktxt dta c'BRK'
jmptxt dta c'JMP'
bugtxt dta c' bug detected!',b($9b)
nobtxt dta c' bug NOT detected.',b($9b)
ert *>start|$ff Program should fit on one page
org *|$ff
jmpptr dta a(jmp1)
jmp1 lda #0 JMP bug not detected
jmp cont
run start
end
The program above detects 3 bugs:
- 'ADC bug'
Flags N,V,Z are not properly set after ADC or SBC in decimal mode.
You can't rely on these flags after BCD operation.
- 'BRK bug'
If an interrupt occurs on a BRK, it is executed with BRK-like values on stack.
This means a BRK is simply passed-by if a NMI occurs.
Beware of using BRK with other interrupts.
- 'JMP bug' - JMP ($xxff) fetches address from $xxff and $xx00.
X-Asm warns you of using such a jump.
All these bugs are supposedly fixed in CMOS chips.

66
doc/editors.htm Normal file
View File

@ -0,0 +1,66 @@
<HTML>
<HEAD>
<TITLE>Configuring editors for X-Assembler</TITLE>
</HEAD>
<BODY BGCOLOR=black TEXT=white LINK="#c0c0ff" VLINK="#c040c0" ALINK="#d06060">
<H2>How to configure a text editor for convenient use of X-Assembler</H2>
This document describes, how to setup a text editor to:
<UL>
<LI> highlight X-Assembler mnemonics
<LI> invoke the assembler with a single keystroke
<LI> place the cursor where an assembly error occured
</UL>
Of course these features are not available in <I>Windows Notepad</I>, so you must
pick another text editor. Fortunately there are many general-purpose text
editors for Windows. I'll fucus on three:
<UL>
<LI> <I>EditPlus</I> (<A HREF="http://www.editplus.com">www.editplus.com</A>)
<LI> <I>ConTEXT</I> (<A HREF="http://www.fixedsys.com/context">www.fixedsys.com/context</A>)
<LI> <I>Code-Genie</I> (<A HREF="http://www.code-genie.com">www.code-genie.com</A>)
</UL>
All of these have similar features. <I>EditPlus</I> is very good, unfortunately it is
shareware (you have to pay $30). The other editors are freeware. Personally
I prefer <I>Code-Genie</I>, which offers unique feature of editing binary files.<P>
<H3>Highlighting X-Assembler mnemonics</H3>
In the <TT>syntax</TT> subdirectory you'll find X-Assembler syntax definitions for all
these editors.
<UL>
<LI> Installation for <I>EditPlus</I>:
Select <B>Tools/Preferences</B>, then <B>Files/Settings &amp; syntax</B>,
then <B>Add</B>. Type <B>Description</B> (<TT>X-Assembler</TT>), <B>File extensions</B>
(<TT>asx</TT>), click <B>...</B> next to <B>Syntax file</B> and locate
the <TT>xasm.stx</TT> file. Then click <B>Syntax colors</B> and select your
favourite colors.
<LI> Installation for <I>ConTEXT</I>: Just copy <TT>X-Assembler.chl</TT>
to <TT>Highlighters</TT> subdirectory in the <I>ConTEXT</I> directory.
<LI> Installation for <I>Code-Genie</I>:
Copy <TT>X-Assembler.cgsyn</TT> to <TT>syn</TT> subdirectory in the <I>Code-Genie</I>
directory. Edit <TT>cgenie.conf</TT>, you can do it by selecting
<B>View/Settings</B>. Type:<BR>
<NOBR><TT>DefaultSyntax x-assembler asx</TT></NOBR><BR>
near other <TT>DefaultSyntax</TT> lines.
</UL>
<H3>Single-keystroke assembly</H3>
<UL>
<LI> <I>EditPlus</I>: Select <B>Tools/Configure User Tools</B>.
Then click <B>Add Tool</B>, type <B>Menu text</B> (<TT>xasm</TT>), <B>command</B>
(path to <TT>xasm.exe</TT>), <B>Argument</B> (<TT>$(FilePath)</TT>) and <B>Initial directory</B>
(<TT>$(FileDir)</TT>). Check <B>Capture output</B>.
<LI> <I>ConTEXT</I>: Select <B>Options/Environment Options</B>, then
the <B>Execute Keys</B> tab. Click <B>Add</B>, type <TT>asx</TT>, click
e.g. <B>F9</B>, locate <TT>xasm.exe</TT> by pressing the <TT>...</TT> button
in the top-right corner. Type <B>Start in</B> (<TT>%p</TT>)
and <B>parameters</B> (<TT>%n</TT>). Check <B>Use short DOS names</B>
and <B>Capture console output</B>.
Type <B>Compiler output parser rule</B> (<TT>%n (%l)</TT>).
<LI> <I>Code-Genie</I>: Select <B>View/Settings</B>, type:<BR>
<NOBR><TT>AddUserTool xasm xasm.exe /p\s$FP CaptureOutput $FD</TT></NOBR><BR>
near other <TT>AddUserTool</TT> lines (if <TT>xasm.exe</TT> is not on your
<TT>PATH</TT>, then you must type full path to it).
</UL>
<H3>Placing the cursor where an assembly error occured</H3>
This works same for all these three editors: just double-click the line
with the error message.
<P><HR><P><A HREF="index.htm">Back</A>
</BODY>
</HTML>

27
doc/faq.htm Normal file
View File

@ -0,0 +1,27 @@
<HTML>
<HEAD>
<TITLE>xasm FAQ</TITLE>
</HEAD>
<BODY BGCOLOR=black TEXT=white LINK="#c0c0ff" VLINK="#c040c0" ALINK="#d06060">
<H2>Frequently Asked Questions</H2>
<B>What is xasm?</B><BR>
xasm is a set of a few tools for developing software for 8-bit Atari
computers using a PC computer. It is mainly for people who are familiar
with Quick Assembler, which runs directly on Atari.
<P><B>I want to run xasm on my Amiga / Atari ST / Mac / ...</B><BR>
Unfortunately xasm is written in x86 assembly language, so it is
not portable.
<P><B>Why xasm, not X-ASM as in previous versions?</B><BR>
It's easier to pronounce. ;-)
<P><B>Why final edition?</B><BR>
Because I don't plan adding any new features. xasm is already a very
sophisticated tool, much more powerful than Quick Assembler.
Of course, it does not mean there won't be any new releases.
Very likely there will be bug fixes.
<P><B>What about supporting other 6502-based machines, other processors (65816 etc.) ?</B><BR>
xasm is not a universal 6502 cross-assembler. If you need a portable
cross-assembler (and maybe even an excellent C compiler), then visit
<A HREF="http://www.cc65.org">www.cc65.org</A>.
<P><HR><P><A HREF="index.htm">Back</A>
</BODY>
</HTML>

View File

@ -1,51 +0,0 @@
<HTML>
<HEAD>
<TITLE>GR0 1.1 Manual</TITLE>
</HEAD>
<BODY BACKGROUND="6502proc.gif">
<CENTER>
<H1>GR0 version 1.1</H1>
by <A HREF="mailto:pfusik@elka.pw.edu.pl">Fox/Taquart</A><P>
<HR>
</CENTER>
<H2>INTRODUCTION</H2>
GR0 is a simple tool that can change colors and font of DOS screen.
It can setup it to look similar to Atari text mode.
<H3>CHANGES</H3>
<H4>Version 1.1</H4>
<UL>
<LI> first release
</UL>
<HR>
<H2>USAGE</H2>
You can run GR0 without any parameters to see available options. They are:
<DL>
<DT><TT>/a</TT>
<DD>Set Atari scheme. It is equivalent to options <TT>/b:1 /c:7 /n /l /x</TT><P>
<DT><TT>/b:nn</TT>
<DD>Set background color nn, where nn is decimal number of range 0-15<P>
<DT><TT>/c:nn</TT>
<DD>Set foreground (letters) color nn, where nn is decimal number of range 0-15<P>
<DT><TT>/d</TT>
<DD>Set default PC font. Resets all characters.<P>
<DT><TT>/f:fname</TT>
<DD>Set external Atari font. Reads characters 0-127 from standard Atari font file
(8*8*128). In 25 lines mode, font is resized. Default extension .FNT will be added
to filename, if none given.<P>
<DT><TT>/i</TT>
<DD>Set characters 128-255 to inverse of 0-127.
<TT>/i</TT> can only be used with <TT>/a</TT>, <TT>/f</TT> or <TT>/x</TT>.<P>
<DT><TT>/l</TT>
<DD>Select 50 lines font. Without this option, 25 lines font is selected.<P>
<DT><TT>/n</TT>
<DD>Initialize text mode. Clears screen and restores default font and colors.<P>
<DT><TT>/x</TT>
<DD>Set Atari built-in font. Sets characters 0-127 to standard Atari font.
It looks better with /l option.<P>
</DL>
In Windows, font changes only in full-screen mode. Colors and number of lines change
also in a window.
</BODY>
</HTML>

View File

@ -1,511 +0,0 @@
<HTML>
<HEAD>
<TITLE>GTIA Documentation</TITLE>
</HEAD>
<BODY BACKGROUND="atari.gif">
<CENTER>
<H1>GTIA Documentation</H1>
by <A HREF="mailto:pfusik@elka.pw.edu.pl">Fox/Taquart</A><P>
<HR>
<P>
<H2>Registers</H2>
<TABLE BORDER>
<TR>
<TD><I>&nbsp;Address&nbsp;</I></TD><TD><I>&nbsp;Read register&nbsp;</I></TD><TD><I>&nbsp;Write register&nbsp;</I></TD>
<TD><I>&nbsp;Address&nbsp;</I></TD><TD><I>&nbsp;Read register&nbsp;</I></TD><TD><I>&nbsp;Write register&nbsp;</I></TD>
</TR><TR>
<TD ALIGN=center><TT>^00</TT></TD><TD><A HREF="#kolmxpf">KOLM0PF</A></TD><TD><A HREF="#hpospx">HPOSP0</A></TD>
<TD ALIGN=center><TT>^10</TT></TD><TD><A HREF="#trigx">TRIG0</A></TD><TD><A HREF="#grafpx">GRAFP3</A></TD>
</TR><TR>
<TD ALIGN=center><TT>^01</TT></TD><TD><A HREF="#kolmxpf">KOLM1PF</A></TD><TD><A HREF="#hpospx">HPOSP1</A></TD>
<TD ALIGN=center><TT>^11</TT></TD><TD><A HREF="#trigx">TRIG1</A></TD><TD><A HREF="#grafm">GRAFPM</A></TD>
</TR><TR>
<TD ALIGN=center><TT>^02</TT></TD><TD><A HREF="#kolmxpf">KOLM2PF</A></TD><TD><A HREF="#hpospx">HPOSP2</A></TD>
<TD ALIGN=center><TT>^12</TT></TD><TD>unused</TD><TD><A HREF="#colpmx">COLPM0</A></TD>
</TR><TR>
<TD ALIGN=center><TT>^03</TT></TD><TD><A HREF="#kolmxpf">KOLM3PF</A></TD><TD><A HREF="#hpospx">HPOSP3</A></TD>
<TD ALIGN=center><TT>^13</TT></TD><TD><A HREF="#trigx">TRIG3</A></TD><TD><A HREF="#colpmx">COLPM1</A></TD>
</TR><TR>
<TD ALIGN=center><TT>^04</TT></TD><TD><A HREF="#kolpxpf">KOLP0PF</A></TD><TD><A HREF="#hposmx">HPOSM0</A></TD>
<TD ALIGN=center><TT>^14</TT></TD><TD><A HREF="#pal">PAL</A></TD><TD><A HREF="#colpmx">COLPM2</A></TD>
</TR><TR>
<TD ALIGN=center><TT>^05</TT></TD><TD><A HREF="#kolpxpf">KOLP1PF</A></TD><TD><A HREF="#hposmx">HPOSM1</A></TD>
<TD ALIGN=center><TT>^15</TT></TD><TD>unused</TD><TD><A HREF="#colpmx">COLPM3</A></TD>
</TR><TR>
<TD ALIGN=center><TT>^06</TT></TD><TD><A HREF="#kolpxpf">KOLP2PF</A></TD><TD><A HREF="#hposmx">HPOSM2</A></TD>
<TD ALIGN=center><TT>^16</TT></TD><TD>unused</TD><TD><A HREF="#colpfx">COLPF0</A></TD>
</TR><TR>
<TD ALIGN=center><TT>^07</TT></TD><TD><A HREF="#kolpxpf">KOLP3PF</A></TD><TD><A HREF="#hposmx">HPOSM3</A></TD>
<TD ALIGN=center><TT>^17</TT></TD><TD>unused</TD><TD><A HREF="#colpfx">COLPF1</A></TD>
</TR><TR>
<TD ALIGN=center><TT>^08</TT></TD><TD><A HREF="#kolmxp">KOLM0P</A></TD><TD><A HREF="#sizepx">SIZEP0</A></TD>
<TD ALIGN=center><TT>^18</TT></TD><TD>unused</TD><TD><A HREF="#colpfx">COLPF2</A></TD>
</TR><TR>
<TD ALIGN=center><TT>^09</TT></TD><TD><A HREF="#kolmxp">KOLM1P</A></TD><TD><A HREF="#sizepx">SIZEP1</A></TD>
<TD ALIGN=center><TT>^19</TT></TD><TD>unused</TD><TD><A HREF="#colpfx">COLPF3</A></TD>
</TR><TR>
<TD ALIGN=center><TT>^0A</TT></TD><TD><A HREF="#kolmxp">KOLM2P</A></TD><TD><A HREF="#sizepx">SIZEP2</A></TD>
<TD ALIGN=center><TT>^1A</TT></TD><TD>unused</TD><TD><A HREF="#colbak">COLBAK</A></TD>
</TR><TR>
<TD ALIGN=center><TT>^0B</TT></TD><TD><A HREF="#kolmxp">KOLM3P</A></TD><TD><A HREF="#sizepx">SIZEP3</A></TD>
<TD ALIGN=center><TT>^1B</TT></TD><TD>unused</TD><TD><A HREF="#gtiactl">GTIACTL</A></TD>
</TR><TR>
<TD ALIGN=center><TT>^0C</TT></TD><TD><A HREF="#kolpxp">KOLP0P</A></TD><TD><A HREF="#sizem">SIZEM</A></TD>
<TD ALIGN=center><TT>^1C</TT></TD><TD>unused</TD><TD><A HREF="#vdelay">VDELAY</A></TD>
</TR><TR>
<TD ALIGN=center><TT>^0D</TT></TD><TD><A HREF="#kolpxp">KOLP1P</A></TD><TD><A HREF="#grafpx">GRAFP0</A></TD>
<TD ALIGN=center><TT>^1D</TT></TD><TD>unused</TD><TD><A HREF="#pmcntl">PMCNTL</A></TD>
</TR><TR>
<TD ALIGN=center><TT>^0E</TT></TD><TD><A HREF="#kolpxp">KOLP2P</A></TD><TD><A HREF="#grafpx">GRAFP1</A></TD>
<TD ALIGN=center><TT>^1E</TT></TD><TD>unused</TD><TD><A HREF="#hitclr">HITCLR</A></TD>
</TR><TR>
<TD ALIGN=center><TT>^0F</TT></TD><TD><A HREF="#kolpxp">KOLP3P</A></TD><TD><A HREF="#grafpx">GRAFP2</A></TD>
<TD ALIGN=center><TT>^1F</TT></TD><TD><A HREF="#consol">CONSOL</A></TD><TD><A HREF="#consol">CONSOL</A></TD>
</TR>
</TABLE>
<P><HR><P>
<H2>Colors</H2>
<TABLE WIDTH=100%><TR><TD></TD>
<TD WIDTH=6% ALIGN=center>0</TD>
<TD WIDTH=6% ALIGN=center>1</TD>
<TD WIDTH=6% ALIGN=center>2</TD>
<TD WIDTH=6% ALIGN=center>3</TD>
<TD WIDTH=6% ALIGN=center>4</TD>
<TD WIDTH=6% ALIGN=center>5</TD>
<TD WIDTH=6% ALIGN=center>6</TD>
<TD WIDTH=6% ALIGN=center>7</TD>
<TD WIDTH=6% ALIGN=center>8</TD>
<TD WIDTH=6% ALIGN=center>9</TD>
<TD WIDTH=6% ALIGN=center>A</TD>
<TD WIDTH=6% ALIGN=center>B</TD>
<TD WIDTH=6% ALIGN=center>C</TD>
<TD WIDTH=6% ALIGN=center>D</TD>
<TD WIDTH=6% ALIGN=center>E</TD>
<TD WIDTH=6% ALIGN=center>F</TD>
</TR><TR><TD ALIGN=center>0</TD>
<TD BGCOLOR="#000000"></TD>
<TD BGCOLOR="#101010"></TD>
<TD BGCOLOR="#1C1C1C"></TD>
<TD BGCOLOR="#2C2C2C"></TD>
<TD BGCOLOR="#3C3C3C"></TD>
<TD BGCOLOR="#4C4C4C"></TD>
<TD BGCOLOR="#585858"></TD>
<TD BGCOLOR="#686868"></TD>
<TD BGCOLOR="#787878"></TD>
<TD BGCOLOR="#888888"></TD>
<TD BGCOLOR="#949494"></TD>
<TD BGCOLOR="#A4A4A4"></TD>
<TD BGCOLOR="#B4B4B4"></TD>
<TD BGCOLOR="#C4C4C4"></TD>
<TD BGCOLOR="#D0D0D0"></TD>
<TD BGCOLOR="#E0E0E0"></TD>
</TR><TR><TD ALIGN=center>1</TD>
<TD BGCOLOR="#582000"></TD>
<TD BGCOLOR="#642C08"></TD>
<TD BGCOLOR="#6C3410"></TD>
<TD BGCOLOR="#784018"></TD>
<TD BGCOLOR="#804C24"></TD>
<TD BGCOLOR="#8C582C"></TD>
<TD BGCOLOR="#986034"></TD>
<TD BGCOLOR="#A06C3C"></TD>
<TD BGCOLOR="#AC7844"></TD>
<TD BGCOLOR="#B4844C"></TD>
<TD BGCOLOR="#C08C54"></TD>
<TD BGCOLOR="#CC985C"></TD>
<TD BGCOLOR="#D4A468"></TD>
<TD BGCOLOR="#E0B070"></TD>
<TD BGCOLOR="#E8B878"></TD>
<TD BGCOLOR="#F4C480"></TD>
</TR><TR><TD ALIGN=center>2</TD>
<TD BGCOLOR="#540000"></TD>
<TD BGCOLOR="#600C0C"></TD>
<TD BGCOLOR="#6C1414"></TD>
<TD BGCOLOR="#742020"></TD>
<TD BGCOLOR="#802C2C"></TD>
<TD BGCOLOR="#8C3434"></TD>
<TD BGCOLOR="#984040"></TD>
<TD BGCOLOR="#A44C4C"></TD>
<TD BGCOLOR="#AC5454"></TD>
<TD BGCOLOR="#B86060"></TD>
<TD BGCOLOR="#C46C6C"></TD>
<TD BGCOLOR="#D07474"></TD>
<TD BGCOLOR="#DC8080"></TD>
<TD BGCOLOR="#E48C8C"></TD>
<TD BGCOLOR="#F09494"></TD>
<TD BGCOLOR="#FCA0A0"></TD>
</TR><TR><TD ALIGN=center>3</TD>
<TD BGCOLOR="#580808"></TD>
<TD BGCOLOR="#641414"></TD>
<TD BGCOLOR="#6C1C1C"></TD>
<TD BGCOLOR="#782828"></TD>
<TD BGCOLOR="#843434"></TD>
<TD BGCOLOR="#903C3C"></TD>
<TD BGCOLOR="#984848"></TD>
<TD BGCOLOR="#A45454"></TD>
<TD BGCOLOR="#B05C5C"></TD>
<TD BGCOLOR="#BC6868"></TD>
<TD BGCOLOR="#C47474"></TD>
<TD BGCOLOR="#D07C7C"></TD>
<TD BGCOLOR="#DC8888"></TD>
<TD BGCOLOR="#E89494"></TD>
<TD BGCOLOR="#F09C9C"></TD>
<TD BGCOLOR="#FCA8A8"></TD>
</TR><TR><TD ALIGN=center>4</TD>
<TD BGCOLOR="#600034"></TD>
<TD BGCOLOR="#6C0C3C"></TD>
<TD BGCOLOR="#741444"></TD>
<TD BGCOLOR="#80204C"></TD>
<TD BGCOLOR="#882C58"></TD>
<TD BGCOLOR="#943460"></TD>
<TD BGCOLOR="#A04068"></TD>
<TD BGCOLOR="#A84C70"></TD>
<TD BGCOLOR="#B45478"></TD>
<TD BGCOLOR="#BC6080"></TD>
<TD BGCOLOR="#C86C88"></TD>
<TD BGCOLOR="#D47490"></TD>
<TD BGCOLOR="#DC809C"></TD>
<TD BGCOLOR="#E88CA4"></TD>
<TD BGCOLOR="#F094AC"></TD>
<TD BGCOLOR="#FCA0B4"></TD>
</TR><TR><TD ALIGN=center>5</TD>
<TD BGCOLOR="#500050"></TD>
<TD BGCOLOR="#5C0C5C"></TD>
<TD BGCOLOR="#681468"></TD>
<TD BGCOLOR="#742074"></TD>
<TD BGCOLOR="#7C2C7C"></TD>
<TD BGCOLOR="#883488"></TD>
<TD BGCOLOR="#944094"></TD>
<TD BGCOLOR="#A04CA0"></TD>
<TD BGCOLOR="#AC54AC"></TD>
<TD BGCOLOR="#B860B8"></TD>
<TD BGCOLOR="#C46CC4"></TD>
<TD BGCOLOR="#D074D0"></TD>
<TD BGCOLOR="#D880D8"></TD>
<TD BGCOLOR="#E48CE4"></TD>
<TD BGCOLOR="#F094F0"></TD>
<TD BGCOLOR="#FCA0FC"></TD>
</TR><TR><TD ALIGN=center>6</TD>
<TD BGCOLOR="#340060"></TD>
<TD BGCOLOR="#400C6C"></TD>
<TD BGCOLOR="#4C1874"></TD>
<TD BGCOLOR="#582480"></TD>
<TD BGCOLOR="#603088"></TD>
<TD BGCOLOR="#6C3C94"></TD>
<TD BGCOLOR="#7848A0"></TD>
<TD BGCOLOR="#8454A8"></TD>
<TD BGCOLOR="#905CB4"></TD>
<TD BGCOLOR="#9C68BC"></TD>
<TD BGCOLOR="#A874C8"></TD>
<TD BGCOLOR="#B480D4"></TD>
<TD BGCOLOR="#BC8CDC"></TD>
<TD BGCOLOR="#C898E8"></TD>
<TD BGCOLOR="#D4A4F0"></TD>
<TD BGCOLOR="#E0B0FC"></TD>
</TR><TR><TD ALIGN=center>7</TD>
<TD BGCOLOR="#000068"></TD>
<TD BGCOLOR="#0C0C70"></TD>
<TD BGCOLOR="#18187C"></TD>
<TD BGCOLOR="#202884"></TD>
<TD BGCOLOR="#2C3490"></TD>
<TD BGCOLOR="#384098"></TD>
<TD BGCOLOR="#444CA4"></TD>
<TD BGCOLOR="#5058AC"></TD>
<TD BGCOLOR="#5868B8"></TD>
<TD BGCOLOR="#6474C0"></TD>
<TD BGCOLOR="#7080CC"></TD>
<TD BGCOLOR="#7C8CD4"></TD>
<TD BGCOLOR="#8898E0"></TD>
<TD BGCOLOR="#90A8E8"></TD>
<TD BGCOLOR="#9CB4F4"></TD>
<TD BGCOLOR="#A8C0FC"></TD>
</TR><TR><TD ALIGN=center>8</TD>
<TD BGCOLOR="#08205C"></TD>
<TD BGCOLOR="#142C68"></TD>
<TD BGCOLOR="#203870"></TD>
<TD BGCOLOR="#28407C"></TD>
<TD BGCOLOR="#344C88"></TD>
<TD BGCOLOR="#405890"></TD>
<TD BGCOLOR="#4C649C"></TD>
<TD BGCOLOR="#5870A8"></TD>
<TD BGCOLOR="#6078B0"></TD>
<TD BGCOLOR="#6C84BC"></TD>
<TD BGCOLOR="#7890C8"></TD>
<TD BGCOLOR="#849CD0"></TD>
<TD BGCOLOR="#90A8DC"></TD>
<TD BGCOLOR="#98B0E8"></TD>
<TD BGCOLOR="#A4BCF0"></TD>
<TD BGCOLOR="#B0C8FC"></TD>
</TR><TR><TD ALIGN=center>9</TD>
<TD BGCOLOR="#083858"></TD>
<TD BGCOLOR="#144464"></TD>
<TD BGCOLOR="#20506C"></TD>
<TD BGCOLOR="#2C5C78"></TD>
<TD BGCOLOR="#386484"></TD>
<TD BGCOLOR="#447090"></TD>
<TD BGCOLOR="#507C98"></TD>
<TD BGCOLOR="#5C88A4"></TD>
<TD BGCOLOR="#6894B0"></TD>
<TD BGCOLOR="#74A0BC"></TD>
<TD BGCOLOR="#80ACC4"></TD>
<TD BGCOLOR="#8CB8D0"></TD>
<TD BGCOLOR="#98C0DC"></TD>
<TD BGCOLOR="#A4CCE8"></TD>
<TD BGCOLOR="#B0D8F0"></TD>
<TD BGCOLOR="#BCE4FC"></TD>
</TR><TR><TD ALIGN=center>A</TD>
<TD BGCOLOR="#004828"></TD>
<TD BGCOLOR="#0C5434"></TD>
<TD BGCOLOR="#185C3C"></TD>
<TD BGCOLOR="#246848"></TD>
<TD BGCOLOR="#307450"></TD>
<TD BGCOLOR="#3C7C5C"></TD>
<TD BGCOLOR="#488868"></TD>
<TD BGCOLOR="#549470"></TD>
<TD BGCOLOR="#649C7C"></TD>
<TD BGCOLOR="#70A884"></TD>
<TD BGCOLOR="#7CB490"></TD>
<TD BGCOLOR="#88BC9C"></TD>
<TD BGCOLOR="#94C8A4"></TD>
<TD BGCOLOR="#A0D4B0"></TD>
<TD BGCOLOR="#ACDCB8"></TD>
<TD BGCOLOR="#B8E8C4"></TD>
</TR><TR><TD ALIGN=center>B</TD>
<TD BGCOLOR="#005000"></TD>
<TD BGCOLOR="#0C5C0C"></TD>
<TD BGCOLOR="#186418"></TD>
<TD BGCOLOR="#247024"></TD>
<TD BGCOLOR="#307830"></TD>
<TD BGCOLOR="#3C843C"></TD>
<TD BGCOLOR="#489048"></TD>
<TD BGCOLOR="#549854"></TD>
<TD BGCOLOR="#5CA45C"></TD>
<TD BGCOLOR="#68AC68"></TD>
<TD BGCOLOR="#74B874"></TD>
<TD BGCOLOR="#80C480"></TD>
<TD BGCOLOR="#8CCC8C"></TD>
<TD BGCOLOR="#98D898"></TD>
<TD BGCOLOR="#A4E0A4"></TD>
<TD BGCOLOR="#B0ECB0"></TD>
</TR><TR><TD ALIGN=center>C</TD>
<TD BGCOLOR="#1C4C00"></TD>
<TD BGCOLOR="#285808"></TD>
<TD BGCOLOR="#346010"></TD>
<TD BGCOLOR="#406C18"></TD>
<TD BGCOLOR="#487824"></TD>
<TD BGCOLOR="#54842C"></TD>
<TD BGCOLOR="#608C34"></TD>
<TD BGCOLOR="#6C983C"></TD>
<TD BGCOLOR="#78A444"></TD>
<TD BGCOLOR="#84B04C"></TD>
<TD BGCOLOR="#90B854"></TD>
<TD BGCOLOR="#9CC45C"></TD>
<TD BGCOLOR="#A4D068"></TD>
<TD BGCOLOR="#B0DC70"></TD>
<TD BGCOLOR="#BCE478"></TD>
<TD BGCOLOR="#C8F080"></TD>
</TR><TR><TD ALIGN=center>D</TD>
<TD BGCOLOR="#384000"></TD>
<TD BGCOLOR="#444C08"></TD>
<TD BGCOLOR="#4C5814"></TD>
<TD BGCOLOR="#58641C"></TD>
<TD BGCOLOR="#647024"></TD>
<TD BGCOLOR="#707C2C"></TD>
<TD BGCOLOR="#788838"></TD>
<TD BGCOLOR="#849440"></TD>
<TD BGCOLOR="#909C48"></TD>
<TD BGCOLOR="#9CA850"></TD>
<TD BGCOLOR="#A4B45C"></TD>
<TD BGCOLOR="#B0C064"></TD>
<TD BGCOLOR="#BCCC6C"></TD>
<TD BGCOLOR="#C8D874"></TD>
<TD BGCOLOR="#D0E480"></TD>
<TD BGCOLOR="#DCF088"></TD>
</TR><TR><TD ALIGN=center>E</TD>
<TD BGCOLOR="#502800"></TD>
<TD BGCOLOR="#5C3408"></TD>
<TD BGCOLOR="#64400C"></TD>
<TD BGCOLOR="#705014"></TD>
<TD BGCOLOR="#785C1C"></TD>
<TD BGCOLOR="#846824"></TD>
<TD BGCOLOR="#8C7428"></TD>
<TD BGCOLOR="#988030"></TD>
<TD BGCOLOR="#A09038"></TD>
<TD BGCOLOR="#AC9C40"></TD>
<TD BGCOLOR="#B4A844"></TD>
<TD BGCOLOR="#C0B44C"></TD>
<TD BGCOLOR="#C8C054"></TD>
<TD BGCOLOR="#D4D05C"></TD>
<TD BGCOLOR="#DCDC60"></TD>
<TD BGCOLOR="#E8E868"></TD>
</TR><TR><TD ALIGN=center>F</TD>
<TD BGCOLOR="#541C00"></TD>
<TD BGCOLOR="#602808"></TD>
<TD BGCOLOR="#6C3014"></TD>
<TD BGCOLOR="#743C1C"></TD>
<TD BGCOLOR="#804828"></TD>
<TD BGCOLOR="#8C5430"></TD>
<TD BGCOLOR="#985C38"></TD>
<TD BGCOLOR="#A46844"></TD>
<TD BGCOLOR="#AC744C"></TD>
<TD BGCOLOR="#B88058"></TD>
<TD BGCOLOR="#C48860"></TD>
<TD BGCOLOR="#D09468"></TD>
<TD BGCOLOR="#DCA074"></TD>
<TD BGCOLOR="#E4AC7C"></TD>
<TD BGCOLOR="#F0B488"></TD>
<TD BGCOLOR="#FCC090"></TD>
</TR></TABLE>
<P><HR><P>
<H2>Description</H2>
</CENTER>
<A NAME="colbak"><U>COLBAK</U>
- <B>Color of background</B><BR>
bit 0 - unused<BR>
bits 3-1 - luminace<BR>
bits 7-4 - hue<P>
<A NAME="colpfx"><U>COLPF0</U> <U>COLPF1</U> <U>COLPF2</U> <U>COLPF3</U>
- <B>Colors of player field</B><BR>
bit 0 - unused<BR>
bits 3-1 - luminace<BR>
bits 7-4 - hue<P>
<A NAME="colpmx"><U>COLPM0</U> <U>COLPM1</U> <U>COLPM2</U> <U>COLPM3</U>
- <B>Colors of players and missiles</B><BR>
bit 0 - unused<BR>
bits 3-1 - luminace<BR>
bits 7-4 - hue<P>
<A NAME="consol"><U>CONSOL</U>
- <B>Consol keys</B><BR>
This is the only read/write register in GTIA.
Value written is negated on read. Bits 0-2 are ANDed
with state of consol keys. Reset bit means key pressed.<BR>
bit 0 - START key<BR>
bit 1 - SELECT key<BR>
bit 2 - OPTION key<BR>
bit 3 - click sound<BR>
bits 4-7 - unused (=0)<P>
<A NAME="grafm"><U>GRAFM</U>
- <B>Graphics of missiles</B><BR>
bits 1,0 - graphics of missile 0<BR>
bits 3,2 - graphics of missile 1<BR>
bits 5,4 - graphics of missile 2<BR>
bits 7,6 - graphics of missile 3<P>
<A NAME="grafpx"><U>GRAFP0</U> <U>GRAFP1</U> <U>GRAFP2</U> <U>GRAFP3</U>
- <B>Graphics of players</B><P>
<A NAME="gtiactl"><U>GTIACTL</U>
- <B>GTIA control</B><BR>
bits 3-0 - priorities of players and missiles<BR>
0001 - P0, P1, P2, P3, PF0, PF1, PF2, PF3, BAK<BR>
0010 - P0, P1, PF0, PF1, PF2, PF3, P2, P3, BAK<BR>
0100 - PF0, PF1, PF2, PF3, P0, P1, P2, P3, BAK<BR>
1000 - PF0, PF1, P0, P1, P2, P3, PF2, PF3, BAK<BR>
Players/missiles and playfields are mentioned from highest to lowest priority.<BR>
Other combinations of bits 3-0 cause strange side effects.<BR>
bit 4 - set all missiles color to COLPF3<BR>
bit 5 - enable ORing colors P0 with P1 and P2 with P3 on common areas<BR>
bits 7,6 - GTIA extra graphics mode<BR>
00 - off<BR>
01 - 16 luminaces<BR>
10 - 9 colors<BR>
11 - 16 hues<P>
<A NAME="hitclr"><U>HITCLR</U>
- <B>Clear collision registers</B><BR>
Any value written to this register causes collision registers to be reset.<P>
<A NAME="hposmx"><U>HPOSM0</U> <U>HPOSM1</U> <U>HPOSM2</U> <U>HPOSM3</U>
- <B>Horizontal positions of missiles</B><P>
<A NAME="hpospx"><U>HPOSP0</U> <U>HPOSP1</U> <U>HPOSP2</U> <U>HPOSP3</U>
- <B>Horizontal positions of players</B><P>
<A NAME="kolmxp"><U>KOLM0P</U> <U>KOLM1P</U> <U>KOLM2P</U> <U>KOLM3P</U>
- <B>Collisions of missiles with players</B><BR>
bit 0 - collision with player 0<BR>
bit 1 - collision with player 1<BR>
bit 2 - collision with player 2<BR>
bit 3 - collision with player 3<BR>
bits 4-7 - unused (=0)<P>
<A NAME="kolmxpf"><U>KOLM0PF</U> <U>KOLM1PF</U> <U>KOLM2PF</U> <U>KOLM3PF</U>
- <B>Collisions of missiles with playfield</B><BR>
bit 0 - collision with playfield 0<BR>
bit 1 - collision with playfield 1<BR>
bit 2 - collision with playfield 2<BR>
bit 3 - collision with playfield 3<BR>
bits 4-7 - unused (=0)<P>
<A NAME="kolpxp"><U>KOLP0P</U> <U>KOLP1P</U> <U>KOLP2P</U> <U>KOLP3P</U>
- <B>Collisions of players with players</B><BR>
bit 0 - collision with player 0<BR>
bit 1 - collision with player 1<BR>
bit 2 - collision with player 2<BR>
bit 3 - collision with player 3<BR>
bits 4-7 - unused (=0)<P>
<A NAME="kolpxpf"><U>KOLP0PF</U> <U>KOLP1PF</U> <U>KOLP2PF</U> <U>KOLP3PF</U>
- <B>Collisions of players with playfield</B><BR>
bit 0 - collision with playfield 0<BR>
bit 1 - collision with playfield 1<BR>
bit 2 - collision with playfield 2<BR>
bit 3 - collision with playfield 3<BR>
bits 4-7 - unused (=0)<P>
<A NAME="pal"><U>PAL</U>
- <B>PAL system flag</B><BR>
bit 0 - unused<BR>
bits 1-3 - 000 if TV system is PAL. Else it is NTSC<BR>
bits 4-7 - unused (=0)<P>
<A NAME="pmctl"><U>PMCTL</U>
- <B>Player/Missile Control</B><BR>
bit 0 - get missiles data from ANTIC<BR>
bit 1 - get players data from ANTIC<BR>
bit 2 - lock triggers when pressed<BR>
bits 3-7 - unused<P>
<A NAME="sizem"><U>SIZEM</U>
- <B>Sizes of missiles</B><BR>
Two bits set size of each missile:<BR>
00 - single size<BR>
01 - double size<BR>
10 - single size<BR>
11 - quad size<BR>
bits 1,0 - size of missile 0<BR>
bits 3,2 - size of missile 1<BR>
bits 5,4 - size of missile 2<BR>
bits 7,6 - size of missile 3<P>
<A NAME="sizepx"><U>SIZEP0</U> <U>SIZEP1</U> <U>SIZEP2</U> <U>SIZEP3</U>
- <B>Sizes of players</B><BR>
bits 1,0 - size of player (see <A HREF="#sizem">SIZEM</A>)<BR>
bits 2-7 - unused<P>
<A NAME="trigx"><U>TRIG0</U> <U>TRIG1</U> <U>TRIG3</U>
- <B>Triggers</B><BR>
TRIG0 and TRIG1 contain trigger status of two joysticks.
TRIG3 contains presence of cartridge.<BR>
bit 0 - reset if trigger pressed<BR>
bits 1-7 - unused (=0)<P>
<A NAME="vdelay"><U>VDELAY</U>
- <B>Vertical delay of players and missiles</B><BR>
Causes players and missiles to be displayed one scanline lower.
Works only in two-line resolution.<BR>
bit 0 - delay missile 0<BR>
bit 1 - delay missile 1<BR>
bit 2 - delay missile 2<BR>
bit 3 - delay missile 3<BR>
bit 4 - delay player 0<BR>
bit 5 - delay player 1<BR>
bit 6 - delay player 2<BR>
bit 7 - delay player 3<P>
</BODY>
</HTML>

View File

@ -1,39 +1,46 @@
<HTML>
<HEAD>
<TITLE>X-ASM 2.3 Package Documentation</TITLE>
<TITLE>xasm 2.4 final edition</TITLE>
</HEAD>
<BODY BACKGROUND="6502proc.gif">
<BODY BGCOLOR=black TEXT=white LINK="#c0c0ff" VLINK="#c040c0" ALINK="#d06060">
<TABLE ALIGN=center WIDTH=70%><TR><TD>
<CENTER>
<H1>X-ASM Package version 2.3</H1>
by <A HREF="mailto:pfusik@elka.pw.edu.pl">Fox/Taquart</A><P>
<HR>
<P>
Manuals of utilities:<P>
<TABLE>
<TR><TD><A HREF="xasm.htm">X-Assembler</A></TD><TD>6502 cross-assembler</TD></TR>
<TR><TD><A HREF="xboot.htm">X-BOOT</A></TD><TD>Atari executable -&gt; disk image converter</TD></TR>
<TR><TD><A HREF="xhead.htm">X-HEAD</A></TD><TD>Simple Atari executable analyzer</TD></TR>
<TR><TD><A HREF="xload.htm">X-LOAD</A></TD><TD>SIO2PC interface Atari executable loader</TD></TR>
<TR><TD><A HREF="gr0.htm">GR0</A></TD><TD>DOS screen adjuster</TD></TR>
</TABLE>
<P>
<HR>
<P>
Atari XL/XE documentation (under construction):<P>
<TABLE>
<TR><TD><A HREF="gtia.htm">GTIA</A></TD><TD>GTIA chip documentation</TD></TR>
<TR><TD><A HREF="pokey.htm">POKEY</A></TD><TD>POKEY chip documentation</TD></TR>
<TR><TD><A HREF="pia.htm">PIA</A></TD><TD>PIA chip documentation</TD></TR>
<TR><TD><A HREF="antic.htm">ANTIC</A></TD><TD>ANTIC chip documentation</TD></TR>
<TR><TD><A HREF="cpubugs.asx">CPUBUGS.ASX</A></TD><TD>6502 bugs detector source</TD</TR>
</TABLE>
<P>
<HR>
<P>
Visit X-ASM Homepage:
<A HREF="http://www.6502.org/users/fox/xasm">http://www.6502.org/users/fox/xasm</A>
<P>
All programs and documentation are <I>freeware</I>. Copyright (c) 1998-2000 Taquart.
<IMG SRC="6502proc.gif" ALT="intel outside - 6502 processor">
<BR CLEAR=all>
<H1>xasm 2.4 final edition</H1>
Copyright (c) 1998-2002 by <A HREF="mailto:fox@scene.pl">Piotr Fusik</A>
</CENTER>
<P>
<HR>
<P>this package contains following utilities (click program name for documentation):
<P>
<TABLE ALIGN=center BGCOLOR=white>
<TR><TD><FONT COLOR=black><B>Name</B></FONT></TD>
<TD><FONT COLOR=black><B>Description</B></FONT></TD></TR>
<TR><TD BGCOLOR=black><NOBR><A HREF="xasm.htm">X-Assembler</A></NOBR></TD>
<TD BGCOLOR=black>6502 cross-assembler</TD></TR>
<TR><TD BGCOLOR=black><A HREF="xboot.htm">X-BOOT</A></TD>
<TD BGCOLOR=black>Converts Atari executables to disk images</TD></TR>
<TR><TD BGCOLOR=black><A HREF="xhead.htm">X-HEAD</A></TD>
<TD BGCOLOR=black>Prints headers of an Atari executable file</TD></TR>
<TR><TD BGCOLOR=black><A HREF="xload.htm">X-LOAD</A></TD>
<TD BGCOLOR=black>Loads an executable file to an Atari computer via the SIO2PC interface</TD></TR>
</TABLE>
<P>other documents:
<UL>
<LI> <A HREF="editors.htm">How to configure a text editor for convenient use of X-Assembler</A><BR>
<LI> <A HREF="faq.htm">Frequently Asked Questions</A><P>
</UL>
<P>
xasm home page:
<A HREF="http://xasm.atari.org">http://xasm.atari.org</A>
<P>
<HR>
<P>Permission is granted to anyone to use this software and its documentation
for any purpose, including commercial applications, and redistribute it
freely in its original form. The author makes no representations about
the suitability of this software for any purpose. It is provided "as is"
without express or implied warranty.
</TD></TR></TABLE>
</BODY>
</HTML>

View File

@ -1,74 +0,0 @@
<HTML>
<HEAD>
<TITLE>PIA Documentation</TITLE>
</HEAD>
<BODY BACKGROUND="atari.gif">
<CENTER>
<H1>PIA Documentation</H1>
by <A HREF="mailto:pfusik@elka.pw.edu.pl">Fox/Taquart</A><P>
<HR>
<P>
<H2>Registers</H2>
<TABLE BORDER>
<TR><TD><I>&nbsp;Address&nbsp;</I></TD><TD><I>&nbsp;Read/Write register&nbsp;</I></TD></TR>
<TR><TD ALIGN=center><TT>^30</TT></TD><TD><A HREF="#porta">PORTA</A></TD></TR>
<TR><TD ALIGN=center><TT>^31</TT></TD><TD><A HREF="#portb">PORTB</A></TD></TR>
<TR><TD ALIGN=center><TT>^32</TT></TD><TD><A HREF="#pactl">PACTL</A></TD></TR>
<TR><TD ALIGN=center><TT>^33</TT></TD><TD><A HREF="#pbctl">PBCTL</A></TD></TR>
</TABLE>
<P>
<HR>
<P>
<H2>Description</H2>
</CENTER>
<A NAME="porta"><U>PORTA</U>
- <B>Port A</B><BR>
A bit is RESET on an event<BR>
bit 0 - joystick 0 up<BR>
bit 1 - joystick 0 down<BR>
bit 2 - joystick 0 left / paddle 0 button<BR>
bit 3 - joystick 0 right / paddle 1 button<BR>
bit 4 - joystick 1 up<BR>
bit 5 - joystick 1 down<BR>
bit 6 - joystick 1 left / paddle 0 button<BR>
bit 7 - joystick 1 right / paddle 1 button<P>
<A NAME="portb"><U>PORTA</U>
- <B>Port B</B><BR>
Controls memory.<BR>
bit 0 - $c000-$cfff and $d800-$ffff:<BR>
0 - RAM<BR>
1 - OS ROM<BR>
bit 1 - $a000-$bfff:<BR>
0 - BASIC ROM<BR>
1 - RAM<BR>
bits 6-2 - extended memory control<BR>
bit 7 - $5800-$5fff:<BR>
0 - SELF TEST ROM<BR>
1 - RAM<P>
<A NAME="pactl"><U>PACTL</U>
- <B>Port A Control</B><BR>
bits 1-0 - interrupts control (?) = 00<BR>
bit 2 - PORTA control<BR>
0 - input/output configuration<BR>
1 - data register<BR>
bit 3 - cassette motor<BR>
0 - on<BR>
1 - off<BR>
bits 7-4 - interrupts status (?) = 0011<P>
<A NAME="pbctl"><U>PBCTL</U>
- <B>Port B Control</B><BR>
bits 1-0 - interrupts control (?) = 00<BR>
bit 2 - PORTB control<BR>
0 - input/output configuration<BR>
1 - data register<BR>
bit 3 - serial devices command line<BR>
0 - on<BR>
1 - off<BR>
bits 7-4 - interrupts status (?) = 0011<P>
</BODY>
</HTML>

View File

@ -1,164 +0,0 @@
<HTML>
<HEAD>
<TITLE>POKEY Documentation</TITLE>
</HEAD>
<BODY BACKGROUND="atari.gif">
<CENTER>
<H1>POKEY Documentation</H1>
by <A HREF="mailto:pfusik@elka.pw.edu.pl">Fox/Taquart</A><P>
<HR>
<P>
<H2>Registers</H2>
<TABLE BORDER>
<TR><TD><I>&nbsp;Address&nbsp;</I></TD><TD><I>&nbsp;Read register&nbsp;</I></TD><TD><I>&nbsp;Write register&nbsp;</I></TD></TR>
<TR><TD ALIGN=center><TT>^20</TT></TD><TD><A HREF="#potx">POT0</A></TD><TD><A HREF="#audfx">AUDF1</A></TD></TR>
<TR><TD ALIGN=center><TT>^21</TT></TD><TD><A HREF="#potx">POT1</A></TD><TD><A HREF="#audcx">AUDC1</A></TD></TR>
<TR><TD ALIGN=center><TT>^22</TT></TD><TD><A HREF="#potx">POT2</A></TD><TD><A HREF="#audfx">AUDF2</A></TD></TR>
<TR><TD ALIGN=center><TT>^23</TT></TD><TD><A HREF="#potx">POT3</A></TD><TD><A HREF="#audcx">AUDC2</A></TD></TR>
<TR><TD ALIGN=center><TT>^24</TT></TD><TD>unused</TD><TD><A HREF="#audfx">AUDF3</A></TD></TR>
<TR><TD ALIGN=center><TT>^25</TT></TD><TD>unused</TD><TD><A HREF="#audcx">AUDC3</A></TD></TR>
<TR><TD ALIGN=center><TT>^26</TT></TD><TD>unused</TD><TD><A HREF="#audfx">AUDF4</A></TD></TR>
<TR><TD ALIGN=center><TT>^27</TT></TD><TD>unused</TD><TD><A HREF="#audcx">AUDC4</A></TD></TR>
<TR><TD ALIGN=center><TT>^28</TT></TD><TD><A HREF="#potst">POTST</A></TD><TD><A HREF="#audctl">AUDCTL</A></TD></TR>
<TR><TD ALIGN=center><TT>^29</TT></TD><TD><A HREF="#kbcode">KBCODE</A></TD><TD><A HREF="#stimer">STIMER</A></TD></TR>
<TR><TD ALIGN=center><TT>^2A</TT></TD><TD><A HREF="#random">RANDOM</A></TD><TD><A HREF="#skstres">SKSTRES</A></TD></TR>
<TR><TD ALIGN=center><TT>^2B</TT></TD><TD>unused</TD><TD><A HREF="#potgo">POTGO</A></TD></TR>
<TR><TD ALIGN=center><TT>^2C</TT></TD><TD>unused</TD><TD>unused</TD></TR>
<TR><TD ALIGN=center><TT>^2D</TT></TD><TD><A HREF="#serin">SERIN</A></TD><TD><A HREF="#serout">SEROUT</A></TD></TR>
<TR><TD ALIGN=center><TT>^2E</TT></TD><TD><A HREF="#irqst">IRQST</A></TD><TD><A HREF="#irqen">IRQEN</A></TD></TR>
<TR><TD ALIGN=center><TT>^2F</TT></TD><TD><A HREF="#skstat">SKSTAT</A></TD><TD><A HREF="#skctl">SKCTL</A></TD></TR>
</TABLE>
<P>
<HR>
<P>
<H2>Description</H2>
</CENTER>
<A NAME="audcx"><U>AUDC1</U> <U>AUDC2</U> <U>AUDC3</U> <U>AUDC4</U>
- <B>Audio control</B><BR>
bits 3-0 - volume control<BR>
bit 4 - channel control<BR>
0 - synthetize sound<BR>
1 - constant level<BR>
bits 7-5 - sound distortion<BR>
000 - with 5-bit and 17-bit registers<BR>
001 - with 5-bit register<BR>
010 - with 5-bit and 4-bit registers<BR>
011 - with 5-bit register<BR>
100 - with 17-bit register<BR>
101 - clear sound<BR>
110 - with 4-bit register<BR>
111 - clear sound<P>
<A NAME="audctl"><U>AUDCTL</U>
- <B>Audio control</B><BR>
bit 0 - base clock for all channels<BR>
0 - 64 kHz<BR>
1 - 15 kHz<BR>
bit 1 - channel 2 filter controlled by channel 4<BR>
bit 2 - channel 1 filter controlled by channel 3<BR>
bit 3 - join counters 3 and 4 into 16-bit channel<BR>
bit 4 - join counters 1 and 2 into 16-bit channel<BR>
bit 5 - base clock for channel 3<BR>
0 - according to bit 0<BR>
1 - 1.77 MHz (PAL), 1.79 MHz (NTSC)<BR>
bit 6 - base clock for channel 1<BR>
0 - according to bit 0<BR>
1 - 1.77 MHz (PAL), 1.79 MHz (NTSC)<BR>
bit 7 - distortion register<BR>
0 - 17-bit<BR>
1 - 9-bit<P>
<A NAME="audfx"><U>AUDF1</U> <U>AUDF2</U> <U>AUDF3</U> <U>AUDF4</U>
- <B>Audio frequency</B><P>
<A NAME="irqen"><U>IRQEN</U>
- <B>IRQ enable</B><BR>
1 - enable<BR>
bit 0 - timer 1<BR>
bit 1 - timer 2<BR>
bit 2 - timer 4<BR>
bit 3 - end of transmission<BR>
bit 4 - serial output<BR>
bit 5 - serial input<BR>
bit 6 - keyboard<BR>
bit 7 - BREAK key<P>
<A NAME="irqst"><U>IRQST</U>
- <B>IRQ status</B><BR>
0 - requested<BR>
bit 0 - timer 1<BR>
bit 1 - timer 2<BR>
bit 2 - timer 4<BR>
bit 3 - end of transmission<BR>
bit 4 - serial output<BR>
bit 5 - serial input<BR>
bit 6 - keyboard<BR>
bit 7 - BREAK key<P>
<A NAME="kbcode"><U>KBCODE</U>
- <B>Keyboard code</B><P>
<A NAME="potx"><U>POT0</U> <U>POT1</U> <U>POT2</U> <U>POT3</U>
- <B>Potentiometrs</B><BR>
Position of potentiometr in range 0-224<P>
<A NAME="potgo"><U>POTGO</U>
- <B>Potentiometr goes</B><BR>
Any value written to this registers starts measurement of potentiometrs<P>
<A NAME="potst"><U>POTST</U>
- <B>Potentiometrs status</B><BR>
0 means POTx contains proper value<BR>
1 means POTx is being measured<BR>
bit 0 - POT0<BR>
bit 1 - POT1<BR>
bit 2 - POT2<BR>
bit 3 - POT3<BR>
bits 7-4 - not used<P>
<A NAME="random"><U>RANDOM</U>
- <B>Random</B><P>
<A NAME="serin"><U>SERIN</U>
- <B>Serial input</B><BR>
Received byte<P>
<A NAME="serout"><U>SEROUT</U>
- <B>Serial output</B><BR>
A byte to be send<P>
<A NAME="skctl"><U>SKCTL</U>
- <B>Serial and keyboard control</B><BR>
bits 1,0 - POKEY control<BR>
00 - reset POKEY<BR>
11 - normal state<BR>
bit 2 - speed of A/D conversion<BR>
bit 3 - two-tone transmission<BR>
bits 6-4 - transmission speed control<BR>
bit 7 - force SPACE signal<P>
<A NAME="skstat"><U>SKSTAT</U>
- <B>Serial and keyboard status</B><BR>
bit 0 - unused (=0)<BR>
bit 1 - transmission<BR>
0 - in progress<BR>
bit 2 - keyboard status<BR>
0 - a key pressed<BR>
bit 3 - SHIFT key status<BR>
0 - pressed<BR>
bit 4 - serial input line state<BR>
bit 5 - keyboard buffer overflow<BR>
bit 6 - serial input buffer overflow<BR>
bit 7 - Framing Error occured<P>
<A NAME="skstres"><U>SKSTRES</U>
- <B>SKSTAT reset</B><BR>
Any value written to this register resets SKSTAT error flags<P>
<A NAME="stimer"><U>STIMER</U>
- <B>Start timers</B><BR>
Any value written to this register resets all counters<P>
</BODY>
</HTML>

View File

@ -1,14 +1,14 @@
<HTML><HEAD><TITLE>X-Assembler 2.3 Manual</TITLE></HEAD>
<HTML><HEAD><TITLE>X-Assembler 2.4</TITLE></HEAD>
<BODY BACKGROUND="6502proc.gif">
<CENTER>
<H1>X-Assembler version 2.3</H1>
by <A HREF="mailto:pfusik@elka.pw.edu.pl">Fox/Taquart</A><P>
<H1>X-Assembler version 2.4</H1>
<HR>
<H2>TABLE OF CONTENTS</H2>
<TABLE><TR><TD>
<UL><LI><A HREF="#intro">INTRODUCTION</A>
<UL><LI><A HREF="#changes">Changes</A>
<UL><LI><A HREF="#ver23">Version 2.3</A>
<UL><LI><A HREF="#ver24">Version 2.4</A>
<LI><A HREF="#ver23">Version 2.3</A>
<LI><A HREF="#ver22">Version 2.2</A>
<LI><A HREF="#ver20">Version 2.0</A>
<LI><A HREF="#ver12">Version 1.2</A>
@ -40,10 +40,32 @@ by <A HREF="mailto:pfusik@elka.pw.edu.pl">Fox/Taquart</A><P>
</TD></TR></TABLE></CENTER>
<P><HR>
<A NAME="intro"><H2>INTRODUCTION</H2>
The X-Assembler is a cross-assembler generating code for the 6502 processor.
The X-Assembler is a cross-assembler, which generates code for the 6502 processor.
It has been designed to be easy to use for Quick Assembler programmers,
therefore its syntax is an extension of QA's one.<BR>
<A NAME="changes"><H3>Changes</H3>
<A NAME="ver24"><H4>Version 2.4</H4>
<UL>
<LI> fixed a bug causing incorrect unary operator precedence
<LI> fixed wrong label value after a skip pseudo-command
<LI> the assembler is .EXE (.COM caused problems with DJGPP make due
to a bug in DJGPP runtime)
<LI> the assembler is not compressed (so it occupies less space in the ZIP)
<LI> improved command-line parsing: options may be used before source file
name, tab character is a valid separator, <TT>/</TT> may be used as directory
separator (Unix convention)
<LI> error and warning messages are written to stderr, not stdout
<LI> added <TT>==</TT> (equal) operator, which is equivalent to <TT>=</TT>
(but is more natural for C/C++/Java programmers)
<LI> <A HREF="#new_deflabel">added <TT>/d:label=value</TT> option: define a label</A>
<LI> <A HREF="#new_fullpaths">added <TT>/p</TT> option: print full paths in listing and error messages</A>
<LI> <A HREF="#new_quiet">added <TT>/q</TT> option: quiet mode</A>
<LI> <A HREF="#new_unlabels">added <TT>/u</TT> option: warn of unused labels</A>
<LI> <A HREF="#new_opto">writing to the object file may be suppressed with <TT>OPT O-</TT></A>
<LI> <A HREF="#new_eli">added <TT>ELI</TT> (else if) directive</A>
<LI> <A HREF="#new_mwinde"><TT>MWX</TT> and <TT>MWY</TT> may use <TT>INX</TT>/<TT>DEX</TT>
and <TT>INY</TT>/<TT>DEY</TT>, respectively, for generating smaller code</A>
</UL>
<A NAME="ver23"><H4>Version 2.3</H4>
<UL>
<LI> double skip (e.g. <TT>SCC:SNE</TT>) bug fixed
@ -107,7 +129,7 @@ assembling only if source newer than object option</A>
<A NAME="sysreq"><H3>System requirements</H3>
<UL>
<LI> a PC compatible computer with 386 or better CPU
(a numeric coprocessor is required for generating sinus tables)
(a numeric coprocessor is required for generating sine lookup tables)
<LI> a MS-DOS compatible OS
</UL>
<A NAME="srcreq"><H3>Source code requirements</H3>
@ -116,7 +138,7 @@ assembling only if source newer than object option</A>
Although different EOLs are supported,
CR/LF is recommended because it is standard for text files on PC.
<LI> No line of source can be longer than 256 characters.
<LI> There is no limitation on the length of the source.
<LI> There is no limitation on the length of the source file.
<LI> Tabulators can be used in place of spaces.
<LI> The assembler is not case-sensitive.
</UL>
@ -139,40 +161,75 @@ Following options are supported:
<DT><TT>/c</TT>
<DD>Enable listing false conditionals.<BR>
By default lines skipped due to false condition are not listed.<P>
<A NAME="new_deflabel">
<DT><TT>/d:label=value</TT>
<DD>Define a label.<BR>
<TT>label</TT> should be a valid label name.
<TT>value</TT> may be any expression (it may use forward references
to labels defined in the source file).
You may use several <TT>/d</TT> options to define many labels
from the command line.<P>
<A NAME="new_environment">
<DT><TT>/e</TT>
<DD>Enable setting environment variables pointing to the error location.<BR>
With this option, X-Asm sets two environment variables:
ERRFILE and ERRLINE.
They may be used in a batch file to locate error and set editor's
insertion point on it. For example, in my batch file I use such a construction:
insertion point on it. For example, you may create following batch file:
<PRE>XASM %1 /e
IF NOT ERRORLEVEL 1 GOTO ok
NCE +%ERRLINE% %ERRFILE%
:ok
</PRE>
NCE stands for Norton Classic Editor.<P>
If there was no error, variables point at last issued warning.
If there was no error, variables point to the last issued warning.
If no warning occured, they are removed from the environment.<P>
<B>Note:</B> NCE is an old editor for DOS. To learn about integration with
modern text editors for Windows <A HREF="editors.htm">read this</A>.
<P>
<DT><TT>/i</TT>
<DD>Disable listing included source. Only main source file will be listed.<P>
<DT><TT>/l[:fname]</TT>
<DT><TT>/l[:filename]</TT>
<DD>Enable generating listing.
If no <TT>fname</TT> given, listing is written to <TT>source.lst.</TT><P>
If no <TT>filename</TT> given, listing is written to <TT>source.lst</TT>
(where <TT>source</TT> is the name of the source file (without extension).<P>
<A NAME="new_newer">
<DT><TT>/n</TT>
<DD>Check source and object modification times and assemble only
<DD>Check source and object file modification time and assemble only
if source is newer than object file. X-Asm does NOT check included
nor inserted files but only main source, so be careful with this option.<P>
<DT><TT>/o:fname</TT>
<DD>Specify object name. Default is <TT>source.obx</TT>.<P>
<B>Note:</B> Much more powerful for this purpose is GNU make utility.
In DOS and Windows you may use its DJGPP port (available from
<A HREF="http://www.delorie.com/djgpp">http://www.delorie.com/djgpp</A>).<P>
<DT><TT>/o:filename</TT>
<DD>Specify object file name. Default is <TT>source.obx</TT>.
You may use the null device (<TT>/o:nul</TT>) to generate no object file.<P>
<A NAME="new_fullpaths">
<DT><TT>/p</TT>
<DD>Print fully qualified file names in listing and error messages.<BR>
This option is useful for the Code-Genie editor (see
<A HREF="editors.htm">here</A>), which can jump to the error location
only if full path is given.<P>
<A NAME="new_quiet">
<DT><TT>/q</TT>
<DD>Suppress info messages.<BR>
Prevents X-Asm from printing "<TT>X-Assembler 2.4 by Fox/Taquart</TT>"
and the summary (how many lines assembled and bytes written).
Good if you are building a project from many source files and don't want
tons of messages.<P>
<DT><TT>/s</TT>
<DD>Disable converting spaces to tabs in listing.
Using tabs makes listing file shorter.<BR>
<DD>Disable converting spaces to tabs in listing.<BR>
Using tabs makes listing file shorter.
Tab stops are assumed to be every 8 characters.<P>
<DT><TT>/t[:fname]</TT>
<DD>List label table.
If no <TT>fname</TT> given, table is written at the end of listing or to
<TT>source.tab</TT>.<P>
<DT><TT>/t[:filename]</TT>
<DD>List label table.<BR>
If no <TT>filename</TT> given, the table is written at the end of listing
or to <TT>source.tab</TT>.<P>
<A NAME="new_unlabels">
<DT><TT>/u</TT>
<DD>Warn of unused labels.<BR>
A warning message will be issued for each label, which value is never
used.<P>
</DL>
If source is incorrect, X-Asm stops on first encountered error.<P>
<A NAME="exitcod"><H3>Exit codes</H3>
@ -182,22 +239,22 @@ Meaning of exit codes returned by X-Asm:<BR>
1 = warning(s) only<BR>
0 = no errors, no warnings<BR>
<A NAME="listing"><H3>Listing structure</H3>
Line of listing includes:
A line of listing contains:
<UL>
<LI> decimal number of line of source file (if source is different than in
previous listed line, appropriate message line is issued)
<LI> hexadecimal origin value
<LI> hexadecimal bytes written to object file<BR>
<LI> hexadecimal origin counter value
<LI> hexadecimal values of bytes written to object file<BR>
Listed are also generated headers. A <TT>xxxx-yyyy&gt;</TT> in place of origin
represents generated header: <TT>$xxxx</TT> is the first and <TT>$yyyy</TT>
is the last byte of the block.
counter represents generated header: <TT>$xxxx</TT> is the first and
<TT>$yyyy</TT> is the last byte of the block.
A <TT>FFFF&gt;</TT> represents two $ff bytes written as a header prefix.<BR>
A plus sign placed after hex numbers stands for more bytes written to object
in this line, not listed through lack of space.
<LI> remaining part of listing line is a copy of source line
<LI> remaining part of listing line is verbatim copy of source line
</UL>
<A NAME="labtab"><H3>Label table structure</H3>
Line of label table includes:
A line of label table contains:
<UL>
<LI> some label attributes:<BR>
<TT>n</TT> - label defined but not used elsewhere<BR>
@ -214,7 +271,7 @@ reference and thus you can't make forward references to that label)
Source code is line-oriented. Every line of source consists of <I>fields</I>.
Same sequence of characters used in different fields has completely different meaning.
Fields are separated with one or more blank characters.
There can't be any space within a field excluding strings and comments.<P>
There can't be any space within a field, except for strings and comments.<P>
There are following types of fields:
<UL>
<LI> <A HREF="#label">label field</A>
@ -236,25 +293,28 @@ In the latter form, you must use a minimum of an instruction field.
It depends on the instruction, how many operands it takes.
Every instruction takes constant number of operands, therefore
there's no need to use a special character at the start of a comment, because after
succesfully taking operands, X-Asm discards the remaining part of line.<P>
succesfully taking operands, X-Asm discards the remaining part of line.
However, <A HREF="editors.htm">general purpose text editors</A> may highlight
the comments only if a special delimiter is used, and for that reason,
the semicolon is recommended to start a comment.<P>
<A NAME="label"><H4>Label field</H4>
This field is optional. It must start at first character in line, without
any blank characters before. The purpose of using label field is to define a label.<BR>
Label is a symbol representing an integer of range -$ffff..$ffff.<BR>
Name of a label can contain letters, digits and underscores (<TT>_</TT>).
Name of a label may contain letters, digits and underscores (<TT>_</TT>).
Digit can not be label's first character.
Name of a label can be as long as you want and all the characters
Name of a label may be as long as you want and all the characters
are meaningful. In Quick Assembler only 6 leading characters were recognized
and some sources may not compile under X-Asm for this reason.<BR>
Defining a label without using <TT>EQU</TT> makes it equal to current value
of the origin counter.<BR>
Label can't be redefined.<P>
Labels can't be redefined.<P>
<A NAME="new_linerep"><A NAME="repeat"><H4>Repeat count</H4>
Repeating means assembling single line several times as if
Repeating means here assembling single line several times as if
there were several identical lines. Note it is not just duplicating
bytes written to object.<BR>
bytes written to the object file.<BR>
Repeat count, which can be any valid expression, has to be preceded
with a colon.<BR>
Examples:
@ -263,7 +323,7 @@ Examples:
</PRE>
In the latter example each <TT>DTA</TT> has different operand value.<BR>
If repeat count equals zero, remaining part of line is not assembled.
This allows conditional assembly on single line to be more compact.
This allows compact single-line conditional assembly.
<A NAME="new_pairing"><A NAME="instr"><H4>Instruction field</H4>
If this is the first field in a line, the line must start with at least
@ -280,11 +340,11 @@ Example:
Note that
<PRE> lda:tax $80
</PRE>is correct, because <TT>$80</TT> is a comment for <TT>TAX</TT>.<P>
Single instruction always consists of 3 letters. It can be:
Single instruction always consists of 3 letters. It may be:
<OL TYPE=a>
<LI> 6502 command - standard mnemonics are used
<LI> <A HREF="#directives">directive
<LI> <A HREF="#pseudocom">pseudo-command
<LI> a 6502 command - standard mnemonics are used
<LI> <A HREF="#directives">a directive</A>
<LI> <A HREF="#pseudocom">a pseudo-command</A>
</OL>
<A NAME="operand"><H4>Operand field</H4>
@ -306,13 +366,13 @@ for 6502 indirect addressing.
<A NAME="numbers"><H4>Numbers</H4>
Numbers are 32-bit signed integers, in the range of -$7fffffff..$7fffffff.
A number can be:
A number may be:
<TABLE>
<TR><TD WIDTH=300><UL><LI> a decimal number</TD><TD><TT>-12345</TT></TD></TR>
<TR><TD><UL><LI> a hexadecimal number</TD><TD><TT>$abcd</TT></TD></TR>
<TR><TD><UL><LI> a binary number</TD><TD><TT>%10100101</TT></TD></TR>
<TR><TD><UL><LI> an ASCII character</TD><TD><TT>'a'</TT> or <TT>"a"</TT></TD></TR>
<TR><TD><UL><LI> an origin counter</TD><TD><TT>*</TT></TD></TR>
<TR><TD><UL><LI> the origin counter value</TD><TD><TT>*</TT></TD></TR>
<TR><TD><UL><LI> a hardware register</TD><TD><TT>^31</TT></TD></TR>
</UL></TABLE>
<DIV STYLE="MARGIN-LEFT: 54">
@ -329,9 +389,9 @@ where x is a hexadecimal digit.
<TR><TD WIDTH=300><UL><LI> an op-code</TD><TD><TT>{lda #0}</TT></TD></TR>
</UL></TABLE>
<DIV STYLE="MARGIN-LEFT: 54">
Byte op-code of instruction inside braces. Operand is discarded
Single-byte op-code of the instruction inside braces. Operand is discarded
and is necessary only for identifying addressing mode.
Instruction should begin right after left brace and right brace should
Instruction should begin just after the left brace and the right brace should
immediately follow the operand or the command in implied addressing mode.<BR>
<A NAME="new_op_op">You can skip the operand, if the addressing mode is fixed.
Examples:<BR>
@ -354,6 +414,7 @@ Examples:<BR>
<TR><TD><TT>&lt;&lt; </TT></TD><TD>Arithmetic shift left</TD></TR>
<TR><TD><TT>&gt;&gt; </TT></TD><TD>Arithmetic shift right</TD></TR>
<TR><TD><TT>= </TT></TD><TD>Equal</TD></TR>
<TR><TD><TT>== </TT></TD><TD>Equal (same as <TT>=</TT>)</TD></TR>
<TR><TD><TT>&lt;&gt; </TT></TD><TD>Not equal</TD></TR>
<TR><TD><TT>!= </TT></TD><TD>Not equal (same as <TT>&lt;&gt;</TT>)</TD></TR>
<TR><TD><TT>&lt; </TT></TD><TD>Less than</TD></TR>
@ -379,14 +440,14 @@ Examples:<BR>
<TR><TD> </TD><TD><TT>+ - ~ &lt; &gt;</TT><TD>(unary)</TD></TR>
<TR><TD> </TD><TD><TT>* / % & &lt;&lt; &gt;&gt;</TT><TD>(binary)</TD></TR>
<TR><TD> </TD><TD><TT>+ - | ^</TT><TD>(binary)</TD></TR>
<TR><TD> </TD><TD><TT>= &lt;&gt; != &lt; &gt; &lt;= &gt;=</TT><TD>(binary)</TD></TR>
<TR><TD> </TD><TD><TT>= == &lt;&gt; != &lt; &gt; &lt;= &gt;=</TT><TD>(binary)</TD></TR>
<TR><TD> </TD><TD><TT>!</TT><TD>(unary)</TD></TR>
<TR><TD> </TD><TD><TT>&&</TT><TD>(binary)</TD></TR>
<TR><TD>last </TD><TD><TT>||</TT><TD>(binary)</TD></TR>
</TABLE><P>
Operators are similar to used in C language, but their priorities are different
than in C.<P>
Compare and logical operators assume that zero is false and non-zero is true.
Note that although the operators are similar to these used in C, C++ and Java,
their priorities are different than in these languages.<P>
Compare and logical operators assume that zero is false and a non-zero is true.
They return 1 for true.<P>
While calculating expression, signed 32-bit arithmetic is used. When range of 32 bits
is exceeded, <TT>'Arithmetic overflow'</TT> error is generated.<P>
@ -401,23 +462,30 @@ Examples:
here equ *
</PRE>
<DT><TT><B>OPT</B></TT> - set assembling options
<DD>Currently there are two options: generating listing and generating headers.
<A NAME="new_opto">
<DT><TT><B>OPT</B></TT> - set assembly options
<DD>Three options are available:
<UL>
<LI> <TT>H</TT> - generate Atari executable headers
<LI> <TT>L</TT> - generate listing
<LI> <TT>O</TT> - generate object file
</UL>
You can turn any of these on or off.<BR>
Default (if no <TT>OPT</TT> specified) is <TT>opt l+h+</TT>.<BR>
Default (if no <TT>OPT</TT> specified) is <TT>opt h+l+o+</TT>.<BR>
Examples:
<PRE> opt l- listing off
opt h- headers off
opt l+h- listing on, headers off
opt l+o- listing on, object file off
</PRE>
<DT><TT><B>ORG</B></TT> - set new origin counter
<DD>You can set some options applied to new header (if headers are on):
<DT><TT><B>ORG</B></TT> - change value of the origin counter
<DD>You can set some options applied to the new header (if headers are
enabled):
<UL>
<LI><TT>a:</TT> tells X-Asm to always make a header, even it is unnecessary,
<LI> <TT>a:</TT> tells X-Asm to always make a header, even it is unnecessary,
like in <TT>ORG *</TT>.
<LI><TT>f:</TT> works same as <TT>a:</TT>, but additionally tells to generate
a $ff,$ff prefix before header. X-Asm adds it at the beginning of file
<LI> <TT>f:</TT> works same as <TT>a:</TT>, but additionally tells to generate
a $ff,$ff prefix before the header. X-Asm adds it at the beginning of the file
by default, so use this option only if you want the $ff's somewhere inside.<BR>
</UL>
Examples:
@ -442,18 +510,18 @@ before <TT>ORG</TT> directive is executed).<P>
</UL>
You may enter many expressions in parentheses and combine different types
of data in single line, separating things with commas.<BR>
You may also define a sinus table. Syntax is:<BR>
You may also define a sine lookup table. Syntax is:<BR>
<TT>sin(centre,amp,size,first,last)</TT><BR>
where:
<UL>
<LI> <TT>centre</TT> is a number which is added to every sinus value
<LI> <TT>amp</TT> is the amplitude of sinus
<LI> <TT>size</TT> is the period of sinus
<LI> <TT>centre</TT> is a number which is added to every sine value
<LI> <TT>amp</TT> is the sine amplitude
<LI> <TT>size</TT> is the sine period
<LI> <TT>first,last</TT> define range of values in the table.
They are optional. Default are <TT>0,size-1</TT>.
</UL>
Example: <TT>dta a(sin(0,1000,256,0,63))</TT> defines table of 64 words
representing a quarter of sinus with amplitude of 1000.<P>
representing a quarter of sine with amplitude of 1000.<P>
<LI> real numbers: <TT>r(-1.23456e12)</TT><BR>
Real numbers are written in 6-byte Atari Floating-Point format. You can't
combine reals with operators, as you can integers.<P>
@ -494,8 +562,8 @@ Example:
</PRE>
<DT><TT><B>INS</B></TT> - insert contents of file
<DD>Copies every byte of specified file into object file and moves origin
counter, as if these bytes were defined with <TT>DTA</TT>.<BR>
<DD>Copies every byte of specified file into the object file and updates
the origin counter, as if these bytes were defined with <TT>DTA</TT>.<BR>
You may specify range of inserted file. Syntax is following:
<PRE>
ins 'file'[,offset[,length]]
@ -510,7 +578,7 @@ Examples:
</PRE>
<DT><TT><B>RUN</B></TT> - generate run address
<DD>The Atari executable program should have run address specified.
<DD>The Atari executable program should have a run address specified.
A program may be loaded in many areas of memory and started from any address.
<PRE> run addr
</PRE>
@ -520,7 +588,7 @@ is equivalent to:
</PRE>
Examples:
<PRE> run start
run program
run main
</PRE>
<DT><TT><B>INI</B></TT> - generate init address
@ -537,7 +605,9 @@ Examples:
ert len1&gt;$ff||len2&gt;$ff
</PRE>
<A NAME="new_eli">
<DT><TT><B>IFT</B></TT> - assemble if expression is true<BR>
<TT><B>ELI</B></TT> - else if<BR>
<TT><B>ELS</B></TT> - else<BR>
<TT><B>EIF</B></TT> - end if<BR>
<DD>With these directives you can construct fragments which
@ -545,8 +615,11 @@ are assembled when a condition is met.
Conditional constructions can be nested.<BR>
Example:
<PRE>noscr equ 1
widescr equ 1
ift noscr
lda #0
eli widescr
lda #$23
els
lda #$22
eif
@ -554,8 +627,10 @@ Example:
</PRE>
Above example can be rewritten using line repeating feature:
<PRE>noscr equ 1
widescr equ 1
:noscr lda #0
:!noscr lda #$22
:!noscr&amp;&amp;widescr lda #$23
:!noscr&amp;&amp;!widescr lda #$22
sta $22f
</PRE>
@ -563,7 +638,7 @@ Above example can be rewritten using line repeating feature:
<HR>
<A NAME="pseudocom"><H3>Pseudo-commands</H3>
Pseudo-commands are built-in macros.
They are not illegal instructions and work on typical 6502.<P>
They are not unofficial instructions, so they work on typical 6502.<P>
<DL>
<DT><TT><B>ADD</B></TT> - addition without carry
<DD>If you have ever programmed 6502, you must have noticed that you had
@ -601,12 +676,12 @@ Example:
add:sta $80
scc:inc $81
</PRE>
In the above example word-sized variable $80 is incremented by 40.<BR>
In the above example word-size variable $80 is incremented by 40.<BR>
Nor conditional repeat nor skip pseudo-commands require operand,
thus they can be paired with any other command.<P>
<DT><TT><B>JCC, JCS, JEQ, JMI, JNE, JPL, JVC, JVS</B></TT> - conditional jumps
<DD>They are a kind of 'long' branches. While standard branches
<DD>These are a kind of 'long' branches. While standard branches
(<TT>BNE, BEQ</TT>) have range of -128..+127, these jumps have range
of all 64 kB.<BR>
Example:
@ -616,7 +691,7 @@ Example:
</PRE>
<DT><TT><B>INW</B></TT> - increment word
<DD>It is a 16-bit memory increment command.<BR>
<DD>Increments a 16-bit word in the memory.<BR>
Example:
<PRE> inw dest
</PRE>is equivalent to:
@ -632,17 +707,18 @@ and substitutes two commands:
mvy source dest = ldy source : sty dest
</PRE>
<A NAME="new_mwinde">
<DT><TT><B>MWA, MWX, MWY</B></TT> - move word using accumulator, X or Y
<DD>These pseudo-commands require two operands
and are combinations of two <TT>MV*</TT>'s:
one to move low byte, and the other to move high byte.<BR>
You can't use indirect nor pseudo addressing mode with <TT>MW*</TT>.
Destination must be absolute address (optionally indexed).<BR>
When source is also absolute, a <TT>MW* SOURCE DEST</TT> will be:
When source is also absolute, a <TT>mw* source dest</TT> will be:
<PRE> mv* source dest
mv* source+1 dest+1
</PRE>
When source is an immediate, a <TT>MW* #IMMED DEST</TT> will be:
When source is an immediate, a <TT>mw* #immed dest</TT> will be:
<PRE> mv* &lt;immed dest
mv* &gt;immed dest+1
</PRE>
@ -651,6 +727,11 @@ is not forward-referenced, X-Asm uses optimization:
<PRE> mv* &lt;immed dest
st* dest+1
</PRE>
If possible, <TT>MWX</TT> and <TT>MWY</TT> use increment/decrement
commands. E.g. <TT>mwx #1 dest</TT> is assembled as:
<PRE> mvx #1 dest
dex
stx dest+1
</DL>
</OL>
@ -662,16 +743,16 @@ the accumulator addressing mode, which should be marked with a
There are two extra immediate addressing modes:
<TT>&lt;</TT> and <TT>&gt;</TT>,
which use low/high byte of word rather than byte value.
which use low/high byte of 16-bit word constant.
They are for Quick Assembler compatibility.
You can use traditional <TT>#&lt;</TT> and <TT>#&gt;</TT>.
Note <NOBR><TT>lda &gt;$ff+5</TT></NOBR> loads 1 (<TT>&gt;$104</TT>),
while <NOBR><TT>lda #&gt;$ff+5</TT></NOBR>
loads 5 (<TT>0+5</TT>) to accumulator, because unary operator <TT>&gt;</TT> has higher
priority than plus has.<P>
loads 5 (<TT>0+5</TT>) to accumulator, because unary operator <TT>&gt;</TT>
has higher priority than the binary plus.<P>
In absolute addressing modes, X-Asm examines expression and uses zero-page
addressing mode if it supposes it is possible. You may override it with
In absolute addressing modes, X-Asm examines the expression and uses zero-page
addressing mode if it supposes it's possible. You may override it with
<TT>a:</TT> and <TT>z:</TT> prefixes.<P>
Examples:
@ -687,8 +768,8 @@ Examples:
There are also pseudo addressing modes, which are similar to
pseudo-commands. You may use them just like standard addressing modes
in all 6502 commands and pseudo-commands excluding
<TT>MWA</TT>, <TT>MWX</TT> and <TT>MWY</TT> only:
in all 6502 commands and pseudo-commands, except for
<TT>MWA</TT>, <TT>MWX</TT> and <TT>MWY</TT>:
<PRE> cmd a,x+ = cmd a,x : inx
cmd a,x- = cmd a,x : dex
cmd a,y+ = cmd a,y : iny
@ -704,7 +785,7 @@ in all 6502 commands and pseudo-commands excluding
<HR>
<A NAME="faq"><H2>FAQ</H2>
<UL>
<LI><B>Q:</B> Why does X-Asm ignore <TT>+2</TT> in following line?
<LI><B>Q:</B> Why does X-Asm ignore <TT>+2</TT> in the following line?
<PRE>label equ 1 +2
</PRE>
<B>A:</B> X-Asm treats space as operand terminator. Remaining part of line
@ -743,7 +824,8 @@ one equ 1
<B>A:</B> X-Asm reads source twice (in pass 1 and pass 2)
from the beginning until the end.<BR>
This allows forward references, but not too complex.<BR>
Keep in mind that assembler should know all the values in second pass.<P>
Keep in mind that the assembler must know all the values in the second
pass.<P>
Example:
<PRE>two equ one+one This value is known in 2nd pass only
one equ 1 This value is known as early as in 1st pass
@ -762,6 +844,7 @@ When you were assembling for the first time, both errors might exist,
but X-Asm stopped on the first one.<P>
<LI> If you have other questions/problems,
<A HREF=mailto:pfusik@elka.pw.edu.pl>write to me</A>.
<A HREF=mailto:fox@scene.pl>write to me</A>.
</UL>
<P><HR><P><A HREF="index.htm">Back</A>
</BODY></HTML>

View File

@ -1,25 +1,29 @@
<HTML>
<HEAD>
<TITLE>X-BOOT 5.0 Manual</TITLE>
<TITLE>X-BOOT 5.0</TITLE>
</HEAD>
<BODY BACKGROUND="6502proc.gif">
<CENTER>
<H1>X-BOOT version 5.0</H1>
by <A HREF="mailto:pfusik@elka.pw.edu.pl">Fox/Taquart</A><P>
<HR>
</CENTER>
<H2>INTRODUCTION</H2>
This tool converts Atari executable file (.OBX) to Atari disk image (.ATR),
which can be used in an emulator. For loading executable into real Atari
you need no .ATR, try using <A HREF="xload.htm">X-LOAD</A>.
This tool converts Atari executable files to disk images (ATR).
Since its first version, X-BOOT lost significance, because now you
can load an executable directly to Atari (e.g. using
<A HREF="xload.htm">X-LOAD</A>), and the emulators (e.g.
<A HREF="http://www.a800win.atari-area.prv.pl">Atari800Win PLus</A>).
However, X-BOOT may still be useful, especially when using
professional loader.
<H3>CHANGES</H3>
<H4>Version 5.0</H4>
<UL>
<LI> long file names support
<LI> more flexible syntax: <TT>obxmask atrfile</TT>
<LI> more flexible syntax: both <TT>obxmask atrfile</TT>
and <TT>obxfile atrpath</TT> can be used
<LI> internal write protection set in generated disk images
<LI> internal write protection flag (supported by APE and Atari800)
set in generated disk images
<LI> headers with end address less than start allowed
<LI> Unix-like <TT>-p</TT> option allowed
</UL>
@ -28,7 +32,7 @@ and <TT>obxfile atrpath</TT> can be used
<LI> wildcards support - now you can convert a set of files
<LI> .ATR name not required - name can be taken from executable
<LI> no length limit - files longer than 60k allowed
<LI> truncated executables handling
<LI> truncated executables are supported
<LI> checking for memory conflicts
<LI> better errors handling
</UL>
@ -43,19 +47,20 @@ and <TT>obxfile atrpath</TT> can be used
<HR>
<H2>USAGE</H2>
This is syntax for running X-BOOT:<P>
Syntax for invoking X-BOOT is following:<P>
<TT>XBOOT [/p] obxfiles [atrpath][atrfile]</TT><P>
Parameters in brackets are optional.<P>
If file name extension is omitted, the default .OBX or .ATR is added.
If no <TT>atrpath</TT> is given, disk images are written by default in
the directory where executables are.<P>
If file name contains spaces, you should enclose it in quotation marks.<P>
<TT>/p</TT> switch (or equivalent <TT>-p</TT>) forces writing 'professional loader',
which allows you to load code/data under ROM and disables ROM and interrupts
while starting program. By default, standard loader is used, which can load any
Atari executable not demanding DOS nor any special loader.<P>
Both loaders disable Atari Basic, so you needn't hold OPTION key while
booting.<P>
<TT>/p</TT> switch (or equivalent <TT>-p</TT>) forces writing 'professional
loader', which allows you to load code/data intro the RAM under ROM and starts
the program with disabled ROM and interrupts. By default, standard loader is
used, which can load any Atari executable not demanding DOS nor any special
loader.<P>
Both loaders disable Atari Basic, so you don't need to hold the OPTION key
while booting.<P>
Below are some examples:<P>
<DL>
<DT><TT>XBOOT -p test</TT>
@ -76,17 +81,18 @@ to current directory on current drive using professional loader.
<H2>DETAILS</H2>
Produced ATR is single density and as short as possible.
Loader occupies one boot sector.<P>
X-BOOT does not write executable in ATR as Atari file.
X-BOOT does not store the executable file in ATR as an Atari file.
You can't read it from an Atari DOS nor extract it somehow or other.
You can only run it by booting.<P>
For more details, read sources of loaders:
For more details, read source files of the loaders:
<UL>
<LI>Standard: <A HREF="xbootstd.asx">XBOOTSTD.ASX</A>
<LI>Professional: <A HREF="xbootpro.asx">XBOOTPRO.ASX</A>
</UL>
Loaders are so simple that they even do not detect end of file. Instead,
they are modified when end of file is reached. Disk image contains one
additional block, which doesn't belong to executable file, but changes
loader to run program instead of initializing.
they are modified when end of file is reached. The disk image contains one
additional block, which doesn't belong to the executable file, but alters
the loader to run the program instead of initializing.
<P><HR><P><A HREF="index.htm">Back</A>
</BODY>
</HTML>

View File

@ -1,18 +1,22 @@
<HTML>
<HEAD>
<TITLE>X-HEAD 1.1 Manual</TITLE>
<TITLE>X-HEAD 1.1</TITLE>
</HEAD>
<BODY BACKGROUND="6502proc.gif">
<CENTER>
<H1>X-HEAD version 1.1</H1>
by <A HREF="mailto:pfusik@elka.pw.edu.pl">Fox/Taquart</A><P>
<HR>
</CENTER>
<H2>INTRODUCTION</H2>
This tool prints headers of Atari executable.
You can examine which memory locations file loads into.
X-HEAD also shows init and run addresses.
This tool prints headers of an Atari executable file.
It shows, into which memory areas the file loads,
and what are init and run addresses.<P>
<B>Important note:</B> X-HEAD is an extremely simple tool. Jindrich Kubec
wrote a tool with similar purpose, but much more features (disassembly
in different formats, including X-Assembler), called ChkExe.
You can find it on
<A HREF="http://jindroush.atari.org">http://jindroush.atari.org</A>.
<H3>CHANGES</H3>
<H4>Version 1.1</H4>
<UL>
@ -25,18 +29,17 @@ X-HEAD also shows init and run addresses.
<HR>
<H2>USAGE</H2>
Simply run X-HEAD with executable filename. No options are supported yet.<P>
Simply run X-HEAD with executable filename. No options are supported.<P>
X-HEAD will read the file and display its headers in following format:
<PRE> bbbb-eeee xxxx</PRE>
where <TT>bbbb</TT> is the begin, <TT>eeee</TT> - the end of the block,
and <TT>xxxx</TT> is the execution address (init or run vector).<P>
and <TT>xxxx</TT> is the execution (init or run) address.<P>
The summary includes:<BR>
<TT>xxxx bytes</TT> - length of file, including headers<BR>
<TT>xxxx blocks</TT> - number of headers<BR>
<TT>xxxx inits</TT> - number of init blocks (<TT>02e2-02e3</TT>)<BR>
<TT>xxxx modules</TT> - number of <TT>FFFF</TT> headers (one at the beginning is required)<P>
All displayed numbers are hexadecimal, of course.<P>
You can redirect output to a file, for example:
<PRE>XHEAD TEST &gt;TEST.HDR
All displayed numbers are hexadecimal, of course.
<P><HR><P><A HREF="index.htm">Back</A>
</BODY>
</HTML>

View File

@ -1,24 +1,29 @@
<HTML>
<HEAD>
<TITLE>X-LOAD 1.0 Manual</TITLE>
<TITLE>X-LOAD 1.1</TITLE>
</HEAD>
<BODY BACKGROUND="6502proc.gif">
<CENTER>
<H1>X-LOAD version 1.0</H1>
by <A HREF="mailto:pfusik@elka.pw.edu.pl">Fox/Taquart</A><P>
<H1>X-LOAD version 1.1</H1>
<HR>
</CENTER>
<H2>INTRODUCTION</H2>
This tool can be used for loading executable files from PC into real
Atari computer via SIO2PC interface. Only input and output lines are
used, so that X-LOAD should work with all types of interface.<P>
However, it is experimental version. I'm not sure if it will work
This tool may be used to load an Atari executable file, stored on the PC,
into a real Atari computer, via the SIO2PC interface.
Only data input and data output lines are used, so X-LOAD should work
with all types of the interface.<P>
It is experimental version. I'm not sure if it will work
with every hardware. I've noticed it is not stable and sometimes
transmission can hang or distortions in loaded data may appear.
The reason is that there is no error-checking, while transmission is
fast (57.6 kbits/sec).<P>
<H3>CHANGES</H3>
<H4>Version 1.1</H4>
<UL>
<LI> files with no explicit run address are started from the beginning
of the first block
</UL>
<H4>Version 1.0</H4>
<UL>
<LI> first release
@ -26,47 +31,45 @@ fast (57.6 kbits/sec).<P>
<HR>
<H2>USAGE</H2>
You run X-LOAD from DOS prompt with executable filename and optional
options:<P>
You should pass as the parameters the executable file name and optionally
the options:<P>
<DL>
<DT><TT>/1</TT> - <TT>/4</TT>
<DD>Specify COM port number, which interface is attached to.
Default is COM2.<P>
<DD>Serial port number. Default is 2.<P>
<DT><TT>/p</TT>
<DD>Force using 'professional loader', which allows you to load
code/data under ROM and disables ROM and interrupts while starting program.
By default, standard loader is used, which can load any Atari executable
not demanding DOS or any special loader.<P>
<DD>Force using 'professional loader', which allows you to load code/data
into the RAM under ROM ($c000-$ffff) and starts the program with disabled
ROM and interrupts. By default, standard loader is used, which can load
any Atari executable not demanding DOS or any special loader.<P>
</DL>
After you run X-LOAD, you only have to boot your Atari and the program
will be loaded and run.<P>
While loading, you can watch on your PC memory locations, which program
loads to.<P>
After program was loaded and run, X-LOAD terminates. You may exit it
earlier at any time by pressing ESC key.<P>
While loading, PC prints memory locations, which the program loads into.<P>
After the program is loaded and run, X-LOAD terminates. You may exit it
earlier at any time by pressing the ESC key.<P>
<HR>
<H2>DETAILS</H2>
First X-LOAD sends a byte to Atari and then waits until Atari is booted.
That byte can be used to detect from Atari, that PC is ready for transmission.
First, X-LOAD sends a byte to Atari and then waits until the Atari is booted.
The byte can be used to detect from Atari, that PC is ready for transmission.
When you are testing your program, you may code periodic checking
if a byte was received, and performing cold reset in that case.
So that you needn't touch your Atari to run program on it.<P>
So you don't need to touch your Atari to run your program on it.<P>
While booting, X-LOAD accepts two commands for disk drive 1:<P>
<UL>
<LI> <TT>'S'</TT> - read status. Used for checking presence of disk drive.
<LI> <TT>'R'</TT> - read sector (only first). Used for reading boot program.
<LI> <TT>'S'</TT> - read status. Used by the Atari OS to check presence
of a disk drive.
<LI> <TT>'R'</TT> - read sector (only first). Used to transfer the loader.
</UL>
After Atari receives and runs its loader, the transmission runs at 57600
bits/sec. You can not hear any transmission sound, because the frequency
is too high for a human.<P>
Transmission protocol is very simple: Atari sends a byte to inform that
After the Atari receives and runs the loader, the transmission runs at 57600
bits/sec.<P>
The transmission protocol is very simple: Atari sends a byte to inform that
it is ready for receiving data. Then PC sends a 3-byte header and a block
of data. First two bytes of header are high and low byte of address
of last block byte minus $ff. Third byte equals low byte of
($100-block_length). Then come block data, which are loaded directly
into their memory location.
For more details, view sources of loaders:
of data. First two bytes of the header are the high and the low byte of the
address of the last byte in the block minus $ff. Third byte equals low byte
of ($100-block_length). Then come block data, which are loaded directly
into their memory locations.
For more details, view source files of the loaders:
<UL>
<LI>Standard: <A HREF="xloadstd.asx">XLOADSTD.ASX</A>
<LI>Professional: <A HREF="xloadpro.asx">XLOADPRO.ASX</A>
@ -74,8 +77,9 @@ For more details, view sources of loaders:
You may have noticed that X-LOAD is somehow similar to X-BOOT, which also
has two loaders. The main difference is that X-BOOT loaders use system
routines to get sectors at regular speed of 19200 bits/sec.
They use sector buffer and require some low memory locations not to be changed
because of operating system. In this respect X-LOAD loaders are better, because
allow loading into whole memory except for loader code.
They use sector buffer and require some low memory locations not to be altered
because of Atari operating system. In this respect X-LOAD loaders are better,
because they allow loading into whole memory except for the loader code.
<P><HR><P><A HREF="index.htm">Back</A>
</BODY>
</HTML>

5
file_id.diz Normal file
View File

@ -0,0 +1,5 @@
--== xasm 2.4 final edition ==--
interactive visual development environment
only for 8-bit Atari programming gurus
requirements: 386 + DOS or Windows

357
gr0.asm
View File

@ -1,357 +0,0 @@
IDEAL
P386
MODEL TINY
CODESEG
ORG 100h
include 'fox.mak'
smartio = 1
start:
db 2048 dup(0) ;compack
o_a = 1
o_b = 2
o_c = 4
o_d = 8
o_f = 10h
o_i = 20h
o_l = 40h
o_n = 80h
o_x = 100h
MACRO topt _op
testflag dx, _op
ENDM
mov si, 81h
mov bx, 0ff00h ;bh=attr mask, bl=attr set
xor dx, dx ;dx=options
gsw1: lodsb
cmp al, ' '
je gsw1
cmp al, 9
je gsw1
cmp al, 0dh
je gswx
cmp al, '/'
je gsw2
cmp al, '-'
je gsw2
usage: mov dx, offset usgtxt
panic: print
int 20h
smartdisk
rdpage: mov cx, 100h
fread
cmp ax, cx
jb _derr
ret
rdnum: lodsb
cmp al, ':'
jne usage
lodsw
sub ax, '00'
cmp al, 10
jae usage
cmp ah, 10
jae rdnum1
xchg al, ah
aad ;al:=10*ah+al
cmp al, 15
ja usage
ret
rdnum1: dec si
ret
gsw2: lodsb
and al, 0dfh
mov di, offset swilet
mov cx, 9
repne scasb
jne usage
bts dx, cx
jc usage
cmp al, 'B'
je sw_b
cmp al, 'C'
je sw_c
cmp al, 'F'
je sw_f
jmp gsw1
sw_b: call rdnum
shl al, 4
and bh, 0fh
or bl, al
jmp gsw1
sw_c: call rdnum
and bh, 0f0h
or bl, al
jmp gsw1
sw_f: cmp [byte si], ':'
jne usage
mov di, offset fname-1
swf1: movsb
cmp [byte si], ' '
je swf2
cmp [byte si], 9
je swf2
cmp [byte si], 0dh
jne swf1
swf2: pusha
mov bx, di
mov cx, di
sub cx, offset fname
je short jusage
adex1: dec bx
cmp [byte bx], '.'
je adexn
cmp [byte bx], '\'
loopne adex1
adex2: mov eax, 'TNF.'
stosd
adexn: mov [byte di], 0
fopen fname
mov dx, offset font+100h ;digits
call rdpage
mov dx, offset font+200h ;letters
call rdpage
mov dx, offset font ;controls
call rdpage
mov dx, offset font+300h ;low letters
call rdpage
fclose
popa
jmp gsw1
gswx: test dx, dx
jz jusage
topt o_a ;obsluz opcje a
jz atrok
setflag dx, o_n+o_l
topt o_b
jnz anob
and bx, 0f0fh
or bl, 10h
anob: topt o_c
jnz anoc
and bx, 0f0f0h
or bl, 7
anoc: topt o_d+o_f+o_x
jnz atrok
setflag dx, o_x
atrok:
mov ax, dx ;sprawdz opcje fontu
and ax, o_d+o_f+o_x
jz nofnt
bsf cx, ax ;dozwolona max 1 z opcji d,f,x
btr ax, cx
test ax, ax
jz fntok
jusage: jmp usage
nofnt: topt o_l ;jezeli l i zadna z d,f,x, to ustaw d
jz fntok
setflag dx, o_d
fntok: topt o_i
jz noinv0
topt o_f+o_x ;i tylko razem z f lub x
jz jusage
noinv0:
push bx
; inicjuj tryb tekstowy
topt o_n
jz noini
push dx
mov ax, 3
int 10h
pop dx
noini:
; wczytaj font domyslny
topt o_d+o_f+o_x
jz nodef
mov ax, 1112h
topt o_l
jnz def50
mov al, 14h
def50: push dx
xor bl, bl
int 10h
pop dx
nodef:
; wczytaj font uzytkownika
topt o_f+o_x
jz nocust
; ustaw odpowiedni font
mov cx, 128
topt o_i
jz noinv
; inwertuj znaki 0-127 na 128-255
mov si, offset font
mov di, offset ifont
mov cx, 1024
mkinv: lodsb
not al
stosb
loop mkinv
mov cx, 256
noinv: mov bp, offset font
mov bx, 800h
topt o_l
jnz nodbl
; rob font o podwojonej wysokosci
mov si, offset font
mov di, offset dfont
push cx
mov cx, 2048
mkdbl: lodsb
mov ah, al
stosw
loop mkdbl
pop cx
mov bp, offset dfont
mov bh, 16
nodbl: push dx
xor dx, dx
mov ax, 1110h
int 10h
pop dx
nocust:
; jezeli przelaczylismy 50->25 to skorygowac polozenie kursora
topt o_l
jnz nococu
topt o_d+o_f+o_x
jz nococu
xor bh, bh
mov ah, 3
int 10h ;wez pozycje kursora
sub dh, 25
jb nococu
xor bh, bh
mov ah, 2
int 10h ;ustaw kursor
mov ax, 0b800h ;przesuwa dolna polowke ekranu do gory
mov ds, ax
mov es, ax
mov si, 2*80*25
xor di, di
mov cx, si
rep movsb
mov ax, [di] ;czysci dolna polowke
mov al, ' '
mov cx, 80*25
rep stosw
push cs
pop ds
push cs
pop ds
nococu:
; ustaw kolory
pop bx
cmp bh, 0ffh
je nocol
push 0b800h
pop es
xor di, di
mov cx, 80*50
cls: inc di
and [es:di], bh
or [es:di], bl
inc di
loop cls
nocol: ret
swilet db 'XNLIFDCBA'
usgtxt db 'GR0 version 1.1 by Fox/Taquart',eol
db 'Customizes DOS screen.',eol
db 'Available options:',eol
db '/a Set Atari scheme = /b:1 /c:7 /n /l /x',eol
db '/b:nn Set background color 0-15',eol
db '/c:nn Set foreground color 0-15',eol
db '/d Set default PC font',eol
db '/f:fname Set external Atari font',eol
db '/i Set characters 128-255 to inverse',eol
db '/l Select 50 lines font',eol
db '/n Initialize text mode (clears screen)',eol
db '/x Set Atari built-in font',eot
smarterr
font db 0,54,127,127,62,28,8,0,24,24,24,31,31,24,24,24,3
db 3,3,3,3,3,3,3,24,24,24,248,248,0,0,0,24,24,24
db 248,248,24,24,24,0,0,0,248,248,24,24,24,3,7,14,28,56
db 112,224,192,192,224,112,56,28,14,7,3,1,3,7,15,31,63,127
db 255,0,0,0,0,15,15,15,15,128,192,224,240,248,252,254,255,15
db 15,15,15,0,0,0,0,240,240,240,240,0,0,0,0,255,255,0
db 0,0,0,0,0,0,0,0,0,0,0,255,255,0,0,0,0,240
db 240,240,240,0,28,28,119,119,8,28,0,0,0,0,31,31,24,24
db 24,0,0,0,255,255,0,0,0,24,24,24,255,255,24,24,24,0
db 0,60,126,126,126,60,0,0,0,0,0,255,255,255,255,192,192,192
db 192,192,192,192,192,0,0,0,255,255,24,24,24,24,24,24,255,255
db 0,0,0,240,240,240,240,240,240,240,240,24,24,24,31,31,0,0
db 0,120,96,120,96,126,24,30,0,0,24,60,126,24,24,24,0,0
db 24,24,24,126,60,24,0,0,24,48,126,48,24,0,0,0,24,12
db 126,12,24,0,0,0,0,0,0,0,0,0,0,0,24,24,24,24
db 0,24,0,0,102,102,102,0,0,0,0,0,102,255,102,102,255,102
db 0,24,62,96,60,6,124,24,0,0,102,108,24,48,102,70,0,28
db 54,28,56,111,102,59,0,0,24,24,24,0,0,0,0,0,14,28
db 24,24,28,14,0,0,112,56,24,24,56,112,0,0,102,60,255,60
db 102,0,0,0,24,24,126,24,24,0,0,0,0,0,0,0,24,24
db 48,0,0,0,126,0,0,0,0,0,0,0,0,0,24,24,0,0
db 6,12,24,48,96,64,0,0,60,102,110,118,102,60,0,0,24,56
db 24,24,24,126,0,0,60,102,12,24,48,126,0,0,126,12,24,12
db 102,60,0,0,12,28,60,108,126,12,0,0,126,96,124,6,102,60
db 0,0,60,96,124,102,102,60,0,0,126,6,12,24,48,48,0,0
db 60,102,60,102,102,60,0,0,60,102,62,6,12,56,0,0,0,24
db 24,0,24,24,0,0,0,24,24,0,24,24,48,6,12,24,48,24
db 12,6,0,0,0,126,0,0,126,0,0,96,48,24,12,24,48,96
db 0,0,60,102,12,24,0,24,0,0,60,102,110,110,96,62,0,0
db 24,60,102,102,126,102,0,0,124,102,124,102,102,124,0,0,60,102
db 96,96,102,60,0,0,120,108,102,102,108,120,0,0,126,96,124,96
db 96,126,0,0,126,96,124,96,96,96,0,0,62,96,96,110,102,62
db 0,0,102,102,126,102,102,102,0,0,126,24,24,24,24,126,0,0
db 6,6,6,6,102,60,0,0,102,108,120,120,108,102,0,0,96,96
db 96,96,96,126,0,0,99,119,127,107,99,99,0,0,102,118,126,126
db 110,102,0,0,60,102,102,102,102,60,0,0,124,102,102,124,96,96
db 0,0,60,102,102,102,108,54,0,0,124,102,102,124,108,102,0,0
db 60,96,60,6,6,60,0,0,126,24,24,24,24,24,0,0,102,102
db 102,102,102,126,0,0,102,102,102,102,60,24,0,0,99,99,107,127
db 119,99,0,0,102,102,60,60,102,102,0,0,102,102,60,24,24,24
db 0,0,126,12,24,48,96,126,0,0,30,24,24,24,24,30,0,0
db 64,96,48,24,12,6,0,0,120,24,24,24,24,120,0,0,8,28
db 54,99,0,0,0,0,0,0,0,0,0,255,0,0,24,60,126,126
db 60,24,0,0,0,60,6,62,102,62,0,0,96,96,124,102,102,124
db 0,0,0,60,96,96,96,60,0,0,6,6,62,102,102,62,0,0
db 0,60,102,126,96,60,0,0,14,24,62,24,24,24,0,0,0,62
db 102,102,62,6,124,0,96,96,124,102,102,102,0,0,24,0,56,24
db 24,60,0,0,6,0,6,6,6,6,60,0,96,96,108,120,108,102
db 0,0,56,24,24,24,24,60,0,0,0,102,127,127,107,99,0,0
db 0,124,102,102,102,102,0,0,0,60,102,102,102,60,0,0,0,124
db 102,102,124,96,96,0,0,62,102,102,62,6,6,0,0,124,102,96
db 96,96,0,0,0,62,96,60,6,124,0,0,24,126,24,24,24,14
db 0,0,0,102,102,102,102,62,0,0,0,102,102,102,60,24,0,0
db 0,99,107,127,62,54,0,0,0,102,60,24,60,102,0,0,0,102
db 102,102,62,12,120,0,0,126,12,24,48,126,0,0,24,60,126,126
db 24,60,0,24,24,24,24,24,24,24,24,0,126,120,124,110,102,6
db 0,8,24,56,120,56,24,8,0,16,24,28,30,28,24,16,0
fname:
ifont db 1024 dup(?)
dfont db 4096 dup(?)
ENDS
END start

56
syntax/X-Assembler.cgsyn Normal file
View File

@ -0,0 +1,56 @@
# X-Assembler syntax for Code-Genie 3.0 (www.code-genie.com)
# written by Piotr Fusik <fox@scene.pl>
CaseInsensitive true
FgColor #000000
BlockStart comment1 *\s
BlockEnd comment1 \n
Format comment1 b
FgColor comment1 #009300
BlockStart comment2 ;
BlockEnd comment2 \n
FgColor comment2 #009300
BlockStart comment3 |\s
BlockEnd comment3 \n
FgColor comment3 #009300
BlockStart string1 '
BlockEnd string1 \n
BlockEnd string1 '
BlockNotEnd string1 ''
FgColor string1 #800080
BlockStart string2 "
BlockEnd string2 \n
BlockEnd string2 "
BlockNotEnd string2 ""
FgColor string2 #800080
KeywordGroup keywords
adc add and asl bcc bcs beq bit
bmi bne bpl brk bvc bvs clc cld
cli clv cmp cpx cpy dec dex dey
dta eif eli els end eor equ ert
icl ift inc ini ins inw inx iny
jcc jcs jeq jmi jmp jne jpl jsr
jvc jvs lda ldx ldy lsr mva mvx
mvy mwa mwx mwy nop opt ora org
pha php pla plp rcc rcs req rmi
rne rol ror rpl rti rts run rvc
rvs sbc scc scs sec sed sei seq
smi sne spl sta stx sty sub svc
svs tax tay tsx txa txs tya
FgColor keywords #0000ff
Nest comment1
Nest comment2
Nest comment3
Nest string1
Nest string2
Nest keywords
# eof

55
syntax/X-Assembler.chl Normal file
View File

@ -0,0 +1,55 @@
// X-Assembler highlighter for ConTEXT v0.97.1 (www.fixedsys.com/context)
// written by Piotr Fusik <fox@scene.pl>
Language: X-Assembler
Filter: X-Assembler files (*.asx)|*.asx
HelpFile:
CaseSensitive: 0
LineComment: ;
BlockCommentBeg:
BlockCommentEnd:
IdentifierBegChars: a..z A..Z _
IdentifierChars: a..z A..Z _ 0..9
NumConstBegChars: 0..9
NumConstChars: 0..9 abcdefABCDEF
EscapeChar:
KeyWords1: adc add and asl bcc bcs beq bit
bmi bne bpl brk bvc bvs clc cld
cli clv cmp cpx cpy dec dex dey
dta eif eli els end eor equ ert
icl ift inc ini ins inw inx iny
jcc jcs jeq jmi jmp jne jpl jsr
jvc jvs lda ldx ldy lsr mva mvx
mvy mwa mwx mwy nop opt ora org
pha php pla plp rcc rcs req rmi
rne rol ror rpl rti rts run rvc
rvs sbc scc scs sec sed sei seq
smi sne spl sta stx sty sub svc
svs tax tay tsx txa txs tya
StringBegChar: '
StringEndChar: '
MultilineStrings: 0
UsePreprocessor: 0
CurrLineHighlighted: 0
SpaceCol: clWindowText clWindow
Keyword1Col: clBlue clWindow
Keyword2Col: clBlue clWindow
Keyword3Col: clBlue clWindow
IdentifierCol: clWindowText clWindow
CommentCol: clGreen clWindow
NumberCol: clWindowText clWindow
StringCol: clPurple clWindow
SymbolCol: clWindowText clWindow
PreprocessorCol: clWindowText clWindow
SelectionCol: clWhite clNavy
CurrentLineCol: clBlack clYellow

133
syntax/xasm.stx Normal file
View File

@ -0,0 +1,133 @@
#TITLE=X-Assembler
; X-Assembler syntax file for EditPlus 2.11 (www.editplus.com)
; written by Piotr Fusik <fox@scene.pl>
#DELIMITER=+-*/%&|^!~=<>()[]{},:"#
#QUOTATION1='
#QUOTATION2="
#CONTINUE_QUOTE=n
#LINECOMMENT=;
#LINECOMMENT2=^!*
#COMMENTON=
#COMMENTOFF=
#COMMENTON2=
#COMMENTOFF2=
#ESCAPE=
#CASE=n
#PREFIX1=
#PREFIX2=
#PREFIX3=
#PREFIX4=
#PREFIX5=
#SUFFIX1=
#SUFFIX2=
#SUFFIX3=
#SUFFIX4=
#SUFFIX5=
#KEYWORD=Keywords
adc
add
and
asl
bcc
bcs
beq
bit
bmi
bne
bpl
brk
bvc
bvs
clc
cld
cli
clv
cmp
cpx
cpy
dec
dex
dey
dta
eif
eli
els
end
eor
equ
ert
icl
ift
inc
ini
ins
inw
inx
iny
jcc
jcs
jeq
jmi
jmp
jne
jpl
jsr
jvc
jvs
lda
ldx
ldy
lsr
mva
mvx
mvy
mwa
mwx
mwy
nop
opt
ora
org
pha
php
pla
plp
rcc
rcs
req
rmi
rne
rol
ror
rpl
rti
rts
run
rvc
rvs
sbc
scc
scs
sec
sed
sei
seq
smi
sne
spl
sta
stx
sty
sub
svc
svs
tax
tay
tsx
txa
txs
tya
#

BIN
www/cgenie.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
www/gbak.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 B

BIN
www/green64.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

42
www/index.html Normal file
View File

@ -0,0 +1,42 @@
<HTML>
<HEAD>
<TITLE>xasm home page</TITLE>
<META NAME="Description" CONTENT="xasm is a set of a few tools for developing software
for Atari 8-bit computers on a PC with MS-DOS or Windows.">
<META NAME="Keywords" CONTENT="xasm,6502,cross-assembler,atari,fox,taquart">
<META NAME="Author" CONTENT="Piotr Fusik">
</HEAD>
<BODY BGCOLOR="#000000" BACKGROUND="gbak.gif" TEXT="#ffffff" LINK="#00c0ff" VLINK="#ff80ff" ALINK="#d06060">
<TABLE WIDTH=100% CELLSPACING=0 CELLPADDING=0><TR>
<TD WIDTH=10% BGCOLOR=#008080><FONT SIZE=6><B>
<NOBR>&nbsp;&nbsp;xasm home page</NOBR></B></FONT></TD>
<TD BGCOLOR=#008080><IMG SRC="green64.gif" WIDTH=100% HEIGHT=50></TD></TR></TABLE><P>
<TABLE><TR>
<TD><IMG SRC="cgenie.gif" WIDTH=489 HEIGHT=461 ALT="Some 6502 code in Code-Genie"></TD>
<TD>
<B>xasm</B> is a set of a few tools for developing software for Atari 8-bit computers
on a PC with MS-DOS or Windows.<P>
<UL>
<LI> <A HREF="xasm24.zip">Download (36 KB)</A>
<LI> <A HREF="doc/index.htm">Browse documentation on-line</A>
<LI> <A HREF="mailto:fox@scene.pl">E-mail me</A>
</UL>
<P><HR><P>
Features of the assembler:
<UL>
<LI> backward compatibility with Quick Assembler
<LI> pseudo instructions (<TT>add</TT>, <TT>sub</TT>, <TT>inw</TT>, <TT>mva</TT> etc.)
<LI> pseudo addressing modes (e.g. indexing with autoincrementation)
<LI> two instructions with same operand may be written in single line
<LI> full set of arithmetic and logical operators
<LI> 6502 opcodes may be used in expressions
<LI> conditional assembly
<LI> sine table generator
<LI> Atari floating-point numbers
<LI> Atari executable and raw output formats
</UL>
</TD>
</TR></TABLE>
<P><HR><P>
<I>Last modified: 22/05/02</I>
</BODY></HTML>