gslaplay/bin/snasm/NEW658.DOC

730 lines
24 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains engineering notes on the versions of SNASM on this disk.
The notes on older versions are also included for people who may have missed
a release. Please note that we don't usually supply the latest version of
the software with new systems so you may want to update even if you have
only just get your system.
This information is incorporated into the manual each time we do a reprint
so much of this may already be in your current manual.
*****************************************************************************
SNASM658 1.24
SNBUG658 1.63
SNLINK 1.23
SNLIB 1.10
SCSILINK 1.5
. a bug that made snasm658 fail to recognise labels with direct page
optimisation switched on has been fixed.
*****************************************************************************
SNASM658 1.23
SNBUG658 1.63
SNLINK 1.23
SNLIB 1.10
SCSILINK 1.5
. a bug that prevented data being defined outside of any section has
been fixed in snasm658
. The linker could only output a maximum of 13 files when using
the group 'file' option. This limit has now been eradicated.
*****************************************************************************
SNASM658 1.22
SNBUG658 1.63
SNLINK 1.21
SNLIB 1.10
SCSILINK 1.5
. a bug in snasm658's memory allocation that caused a crash at the
start of pass two in low memory conditions if more that 300K of
code was being assembled has been fixed.
. a bug in snasm658 that could cause the linker to run wild if data
space was allocated outside any section/group has been fixed.
*****************************************************************************
SNASM658 1.21
SNBUG658 1.63
SNLINK 1.21
SNLIB 1.10
SCSILINK 1.5
. a bug in snlib that left XDEF'd symbols in object files produced
by snasm658 'unseen' has been fixed.
. a number of small improvments have been made to the file window and
file handling in snbug658. The only one noticable to the user is that
the full pathname of the file on display is now shown along the top
of the window.
*****************************************************************************
SNASM658 1.21
SNBUG658 1.57
SNLINK 1.21
SNLIB 1.09
SCSILINK 1.5
. groupend() and sectend() functions have been implemented in snasm658.
These give the end address of a group or section respectively. These
addresses are not evaluated until link time thus
#groupend(g1)-grouporg(g1)
gives the final size of group g1
*****************************************************************************
SNASM658 1.20
SNBUG658 1.57
SNLINK 1.21
SNLIB 1.09
SCSILINK 1.5
. Bug that prevented macro expansion inside short macros has been
fixed
*****************************************************************************
SNASM658 1.19
SNBUG658 1.57
SNLINK 1.21
SNLIB 1.09
SCSILINK 1.5
. Bug that crashed PC whilst stepping in the debugger has been fixed.
*****************************************************************************
SNASM658 1.19
SNBUG658 1.53
SNLINK 1.21
SNLIB 1.09
SCSILINK 1.5
. Fixed __mx in assembler
. Debugger now displays sizes of accumulator and index registers
. Various fixes to assembler and debugger
*****************************************************************************
SNASM658 1.18
SNBUG658 1.47
SNLINK 1.21
SNLIB 1.09
SCSILINK 1.5
. The assembler and linker now utilise all free memory on the
system, including UMB's on DOS 5+ and up to 64k of EMS if
available.
. The functions sectsize() and groupsize(); which return the
current size of a section or group respectively, have been
added. They are evaluated immediately and so reflect the
current section size at the point they are used, not the final
size.
. A bug that caused byte alignment when attempting to word
align a section has been fixed.
. The linker version number has also been bumped due to added
support for 68000 C cross-compilers.
. The debugger has some significant bug fixes and can now dump
the active window to the printer.
1. Multiple target support will now handle switching targets
during the Abort/Retry ... phase.
2. Problems with displaying memory at the end of bank $08 have
been fixed.
3. Indirection in debugger expressions now defaults to being
unsigned so that expressions such as 7e0000+[ptr] are evaluated
correctly when [ptr] > $8000
4. Effective address display will now conform to the way the
65816 works. Thus
lda $ffff,x
where db = $7e
x = $1
now resolves to $7f0000 NOT $7e0000.
5. A bug in running to cursor where the cursor resides on a
breakpoint is now fixed.
6. Locking a window whilst it is in disassembly mode and then
changing to a hex display no longer crashes the debugger.
7. Alt-P will dump a copy of the active window to the printer.
. Snlib has had its version number bumped because of additions
to its support for 68000 C cross compilers.
*****************************************************************************
SNASM658 1.17
SNBUG658 1.42
SNLINK 1.19
SNLIB 1.08
SCSILINK 1.5
. The debugger file window has been re-written. There is little
difference to the user in the way it operates. Key assignments have
been altered so that Ctrl-S/Ctrl-R saves/restores registers in all
windows and Alt-S/Alt-N starts/resumes a search.
*****************************************************************************
SNASM658 1.17
SNBUG658 1.40
SNLINK 1.19
SNLIB 1.08
SCSILINK 1.5
. Fixed bug in debugger that 'lost' MX records in disassembly.
*****************************************************************************
SNASM658 1.17
SNBUG658 1.39
SNLINK 1.19
SNLIB 1.08
SCSILINK 1.5
. Fixed bug in assembler that crashed if more that 256 include files
used.
. Fixed bug in assembler that allowed infinite macro expansion.
. Fixed bug in assembler that 'lost count' of parenthesis.
. Un-step added to the debugger on Alt-F4/Alt-F7
. Functions added to linker to support object file conversion for
C 68000 cross-compilers.
. Better detection of illegal addressing modes added to the assembler.
. option ow+/- has been added to the assembler to generate a warning
when absolute addressing has been assumed. This is designed to help
'update' code that was written when the assembler assumed long
absolute mode when it didn't know the operand value.
. Problems with scsilink and fast 486's fixed with the addition of
extra timeouts.
*****************************************************************************
SNASM658 1.13
SNBUG658 1.38
SNLINK 1.18
SNLIB 1.08
SCSILINK 1.4
. The linker has been profiled and many speed improvements have been
made.
. Linker now deletes the files created by the file() attribute on
groups if assembly fails.
. Problems in assembler caused by & continuation if white space (ws)
was enabled fixed.
. Errors in the inform statement don't no have their output appended
onto the inform output.
. You now don't need to define groups in your source code. Any
section that isn't placed in a group at assembly time can be assigned
to a group in the linker command file.
. Fixed problems with case sensitivity in debugger CLI.
. Fixed problems with debugger windows being left blank if a key was
pressed during loading with auto-update off.
. A new variable called __mx has been added which hold the current value
of the mx variable according to the assembler.
. Major changes to the way the assembler handles addressing modes.
See info. at end of this fix report. There are some changes in here
from the version 1.12 so everyone should have a read.
. Effective address display added to top of disassembly window.
. Extra code added to enable to debugger to 'sync' its disassembly
better.
. The debugger now understands the memory map of the console so labels
should be visible no matter what the DB reg holds.
Changes to addressing mode handling
-----------------------------------
65816 assembler :
The addressing mode stuff has been changed to conform with WDC spec.
There is now an optimisation option opt od-/+ which enables the
optimisation to direct page access to take place. Default is off.
opt t-/+ . When enabled truncates values in db/dw statements and immediate
operand values to the required size. Default is off.
opt ta+/-. When enabled truncates all address operands to the required size.
Default is on.
Immediate operands can specify the bytes of the operand to use as
in WDC spec, eg.
short accumulator long accumulator
lda #$12345678 -> lda #$78 lda #$5678
lda #<$12345678 -> lda #$78 lda #$5678
lda #>$12345678 -> lda #$56 lda #$3456
lda #^$12345678 -> lda #$34 lda #$1234
Absolute addressing modes can be forced, eg. :
lda <$12345678 -> lda $78 direct page
lda |$12345678 -> lda $5678 absoulte
lda >$12345678 -> lda $345678 long absoulte
Absoulte addressing modes should now behave as follows when no overiding
mode is specified :
(1) The address is evaluated.
(2) If direct page optimisation is on then the assembler will try
to convert to this mode.
(3) If (2) fails then the assembler will normally use absolute mode
unless it can determine that absolute long mode is necessary in
which case it will use that mode. It will no longer use long
absolute mode when it doesn't know the operand value.
Assumes :
In the following the operand value is known if (1) the operand can be
evaluated, (2) the operand is at a known offset from the start of an
org'd section, (3) the operand is at a known offset from the start
of a section which is known to be the first section in an org'd group
or (4) the operand is at a known offset from the start of the very
first section which will takes its base address from the first org
in the program.
if opt od+ is in effect then
(1) if d is not assumed then known operands in the range 0-255 will
be converted to direct page access.
(2) if d is assumed to a constant value then conversion to direct
access will take place when the operand value is 0-255 more than
that value.
(3) if d is assumed to a section then direct mode will be used if the
operand is known and is at an offset 0-255 from the start of that
section or if the operand is a symbol in that section.
(4) if d is assumed to a group then direct mode will be used if the
operand is known and is at an offset 0-255 from the start of that
group or if the operand is a symbol in that group.
Long absolute mode will be used when
(1) if db is not assumed and the operand value is known and greater
than $ffff.
(2) if db is assumed to a constant value and the operand value is
known and is less than that value or more than $ffff greater
than it unless it can be accessed by virtue of the mirroring
of ram & hardware registers in certain parts of the sfx memory map.
(3) if db is assumed to a section which is org'd and the operand value
is not in the same bank allowing for mirroring of ram and hardware
registers.
(4) if db is assumed to a group which is org'd and the operand value
is not in the same bank allowing for mirroring of ram and hardware
registers.
*****************************************************************************
SNASM658 1.10
SNBUG658 1.29
SNLINK 1.15
SNLIB 1.08
SCSILINK 1.4
. The jsr/jmp absolute instructions now get the bank information
correct so labels are always used correctly.
. Tracing problems in debugger are now definately fixed.
. Debugger CLI parsing has been rewritten as the multi-target support
introduced some problems. You shouldn't notice any changes so if you
do report it as a bug.
*****************************************************************************
SNASM658 1.10
SNBUG658 1.25
SNLINK 1.15
SNLIB 1.08
SCSILINK 1.4
. The assembler now allows question marks in labels.
. The l+/- option has been expanded to allow (almost) any character
to be used for a local label. You can specify any character here
but only a few will work without causing problems. The main one
this feature was added for was colon.
opt l: ; set local label char to colon
. The debugger had improved multi-target facilities. You can now
specify several targets on the command line and they can all
have seperate .cpe files and symbol tables. Unless you regularly
debug on two machine simultaniously you can ignore this option.
. More timeouts have been added to SCSILINK
. If the assembler can't evaluate the expression to which an equ
has been done it now substitutes the full expression where needed.
This means that you can equate something to an offset from an xref'd
symbol, equate something to an expression involving the pc when
linking etc.
. Grouporg function added which tells you the physical address at which
a group has been placed. This is mainly for use when you use the
obj directive on groups to find where the group is in memory to
allow it to be relocated.
. The < and > operators now have a very low priority so that
lda #<123+456
Gives the low byte of the full expression.
. A new option, B, has been added which swaps the meaning of < and >
when they are used as high/low byte operators
. The instructions rep, sep and cop now allow their operands to be
preceeded by a hash for compatability reasons.
. Ampersand (&) has been added as a general purpose line continuation
character. e.g.
MyMacro 1,2,3,4,&
5,6,7
This can be used at the end of any line except in the middle of
a string.
. You can now have a size on a short macro (i.e. mybcc.s)
. If you have sections in unnamed groups in your source you can
place them into groups in the linker command file. e.g.
In source
s1 section word
...
s2 section word
...
end
In linker command file
g1 group word
section s1,g1
section s2,g2
include source.obj
The group attributes *bss, word etc) must match the attributes of
the sections or an error will be raised.
*****************************************************************************
SNASM658 1.09
SNBUG658 1.23
SNLINK 1.13
SNLIB 1.06
SCSILINK 1.3
. Occasional problem tracing using snbug658 V1.19 fixed. Things seem
to check out now but contact us if there are any more problems.
. The linker now has a new switch /b which makes in link in 'big mode'.
This slightly increases link time (even a small disk cache will make
this inconsequential though) but allows very much more complex
projects to be linked.
*****************************************************************************
SNASM658 1.09
SNBUG658 1.19
SNLINK 1.12
SNLIB 1.06
SCSILINK 1.3
. The linker now allows groups to be orged to different addresses and
it also allows use of org ?size,type just like in the assembler.
Please note that only one ordinary org command should be used in the
linker command file and that this org will set the base address for
all groups that aren't orged seperately. The size parameter must be
a decimal or hex number as the object files have not been read by
this point to you will need to look at your map file to see how
much room to reserve for different groups.
. To go with DB and DW we have added DT and DL. These are for putting
down three byte and four byte constants. These were in version
1.08 but weren't documented.
. Assume can now be used to tell the assembler that a group is direct
addressable. Syntax is :-
DirectGroup group
assume d:DirectGroup
Any variables in this group will be accessed using the direct
addressing mode (if legal) as long as they are defined before they
are referenced.
*****************************************************************************
SNASM658 1.08
SNBUG658 1.16
SNLINK 1.11
SNLIB 1.06
SCSILINK 1.3
. The linker always used to be case sensitive but now it has a switch
in the same way as the assembler. To be compatible with the assembler
the linker now works case insensitive by default so you may need to
set a switch to maintain the status quo. Type snlink on its own
for an up to date list of linker switches.
. The assembler now reports the file/line where a structure was opened
if it isn't closed properly. This works for all of the structures
including modules and if's.
. The linker now stops if ESC is pressed whilst it is running. It
also tidies up open files if it is Ctrl-C'd.
. The assembler now writes the processor type into .obj files to
allow the linker to correctly handle regs commands. The linker
will give a warning if various .obj files were produced by different
assemblers but you are still free to do this. This has cured the bug
which occurred if you set the registers in a linker command file
when you were generating a .cpe file.
. To reduce the 'red tape' when you want just one section per group
you can now attach attributes to a section definition. Example -
Code section bss org($7E000)
This can be used whether or not you are linking. If you use this
feature you loose the ability to have several sections in the same
group.
. The type() function now returns zero if its argument isn't the
name of a symbol rather than giving an error. So type(Fred+3)
returns zero as opposed to giving an error.
. There is now another special macro
parameter \_. This returns the whole of the line following a
macro invocation from after the name of the macro until the end of
line or comment. This feature can be used when you are invoking a
macro from within a macro but as macros are stored without comments
the parts of the line after white space will have been removed.
. There were a few problems with forward referenced equates whilst in
link mode which have now all been fixed. These occurred when you did
something like :-
a equ b
b equ c
c
and the assembler had to evaluate the equs at the end of the first
pass.
. There is now no need to preceed a macro parameter with a backslash
when it is being used in an expression. You will still need the
backslash, and possible another at the end of the name, in all other
cases. For example -
fred macro x,y
dw x,y ; no backslash required
db 'X is \x and Y is \y' ; but is required here
db '123\x\456 ; both backslashes required
. The sect and offset functions now work correctly even when you are
linking i.e. sect(x)+offset(x) will always equal x. This means however
that neither sect nor offset can be evaluated until link time. If
you require the offset into the current modules contribution to a
section you will need to place a label at the start of the section
and do the subtract yourself.
. Partly in response to the above the alignment function has been added.
This tells you the offset from the section'ss alignment type (byte,
word or long) its argument is. In a byte aligned section alignment(x)
will always return 0, in a word aligned one it will return 0 or 1, and
in a long word aligned one 0 .. 3.
This function is usually used to check if the PC is odd or even as
in this example.
if alignment(*)&1
db 0 ; pad with a zero to word boundary
endif
*****************************************************************************
SNASM658 1.05
SNBUG658 1.16
SNLINK 1.09
SNLIB 1.05
SCSILINK 1.3
. Bug the caused branches to be reported out of range has been fixed
. As search has been added on Alt-S save and restore regs are now on
Ctrl-S and Ctrl-R
. SCSI errors in the debugger are auto-retried. If you abort you
get a chance to save the config file.
. The assembler now traps Ctrl-C and Ctrl-Break and exits gracefully.
. The @ operator has been added. It is used in expressions when you
need the value of the current PC.
Example
dw @,@,@ ; The three words will be 2 bytes apart.
dw Fred-@,Start-@ ; The offsets are from the current word.
The @ differs from the * in that * is the pc at the start of the line
whereas @ is advanced during the line.
. The debugger can now disassemble to file using Ctrl-D when in a
disassembly window. You are prompted for file name and range.
. Search has been added to the debugger on Alt-S. This works in
disassembly windows where you are prompted for instruction text to
search for, and in hex windows where you are prompted for a list
of values (or expressions) to search for. The search size (byte,word,
long) is decided by the current data size of the window (changed with
Alt-W). If you preceed the search expression with a double quote you
can search for ASCII text in a memory window.
. A bug that stopped F6 taking you around once more if the cursor was
at the current PC has been fixed.
. Update flag and interval are now saved in debugger config files.
. Aborting due to SCSI error now gives you the option of saving the
config file.
. Upload now verifies if you want to overwrite an existing file.
. The CLI option for label level now overrides the setting in the
config file. Update flag and interval work the same way.
. A bug in SCSILINK which occured for large send/receives which crossed
two 64k boundaries. This didn't affect any of the SNASM utilities as
they typically use 32K buffers which avoids the problem.
. Due to the large amount of work that has gone into the assembler and
linker, we have changed the version number in the OBJ files so you
will need to use all of the new tools as a set.
. A peculiarity with absolute indirect has been cleared up.
. A bug which caused some branches to be reported out of range has been
fixed.
. DCB and DCW now advance the PC correctly!
*****************************************************************************
SNASM658 1.03
SNBUG658 1.05
SNLINK 1.05
SNLIB 1.02
SCSILINK 1.2
. Bug when assembling
dcb 50000,$ff
has been fixed
. opt ws+/- switches between the 68000 and 65816 treatment of white
space in operands.
opt ws-
you then don't need to use a semi-colon to introduce a comment but
you can't write things like ...
lda #3 + 2
. Several new group attributes have been added.
Size Set maximum size of group. Warning if exceeded.
Obj Assemble whole group to run at different address.
File Write group to binary file. Now works in linker.
Over Put two or more groups on top of each other for overlays.
See section on new linker command file format for more info.
. Assembler no longer insists on an org statement. It is now back as
before so the manual examples will work again!
. Debugger now does an auto-retry after 1/2 second when it gets a
SCSI error.
. Problems with multiple file windows have been fixed.
. Linker has a totally new command file syntax as below.
; Comment
include filename Specify object file to read.
Can be in quotes. Default extension .obj
incbin filename Specify library file to search.
Can be in quotes. Default extension .lib
org address Give org address of program. The ? stuff
works as before.
regs pc=value Give start address. This will soon work for
the other registers.
name equ value Equate a symbol
name group [bss,org(val),over(name),word,file("name"),obj(val),
size(val),bank(val)]
Define a group and attributes. Group order
is determined by order of group statements.
section name[,group] Define a section and state which group it
is in. Section ordering is determined by
order of section statements.
workspace address Move workspace if downloading. The workspace
command doesn't currently work with CPE
files but will in a future release.
Example
include sorter.obj
include output.obj
org 1024
regs pc=ProgStart
LowGroup group word
CodeGroup group
BssGroup group bss
section Data1,LowGroup
section Data2,LowGroup
section Code1,CodeGroup
section Code2,CodeGroup
section Tables,BssGroup
section Buffers,BssGroup
To clear up any confusion about group attributes.
If you aren't linking all attributes should be specified in the
assembler source.
If you are linking the only attribute you should use in the source
are word and bss. All the others should be specified in the linker
command file.