293 Commits

Author SHA1 Message Date
Olaf Seibert
e703403017 Bring .ENDM label in correspondence with the manual. 2015-05-12 22:59:21 +02:00
Olaf Seibert
1e9e8023b3 Fix my_searchenv(). 2015-05-12 22:42:39 +02:00
Olaf Seibert
74c2399c7d Remove some remaining logging. 2015-05-12 22:42:05 +02:00
Olaf Seibert
7e45c8a656 Change .ENDM name in self-redefining macros to be more forgiving
The original intent of the code, when faced with something like

	.MACRO	A
	.MACRO	B
	.ENDM	A

is to terminate the outer macro definition immediately.
However some macros redefine themselves, and that broke.
For now, detect self-redefinition and disable the early
end if there is one.

Since this does not match what's described on page 7-3,
this will change if it doesn't break my test cases.
2015-05-12 21:55:18 +02:00
Olaf Seibert
3fbb3cc6ad Add support for RSX-11M+ 4.6 MacroLiBrary files.
This version still contains lots of commented-out logging statements.
2015-05-12 21:45:23 +02:00
Olaf Seibert
a8b5272bb8 Nested delimited strings had an infinite loop.
The code for nested and unnested strings was mixed, thereby being too
simple for the nested case. I separated them, which is simpler than
the fixed combined version.
Detected by the macro call
        ..EMIT <$FAC=^D<fb$rea>>
2015-05-12 21:40:13 +02:00
Olaf Seibert
749b0a5d73 Add the .LIBRARY /string/ directive.
If no -p options or MCALL environment variable are given, pretend the
search path is the current directory ".".
2015-05-12 21:32:01 +02:00
Olaf Seibert
f75f5e1242 Change delimiters of local symbol blocks to be more like page 3-10 of the manual.
Also, to make Kermit sources work, only increase the local symbol block
counter if there actually was a local symbol used in the block.
This way, conditional inclusions (which include source text only in the
first pass) will have less potential for de-synchronisation between the
passes. After all, if the generated internal local symbol names do
not match, phase errors will result (showing themselves as strange label
redefinition problems).
2015-05-10 17:51:32 +02:00
Olaf Seibert
2bc55f39f3 Add debug flag to command line interpretation. 2015-05-10 17:39:38 +02:00
Olaf Seibert
a6ee20cdc1 Don't truncate the internal form of local symbols
Local symbols like 32768$ (and such long ones can be generated
automatically by macros) are suffixed with the "local symbol block number"
to make different labels in different local symbol blocks:
32768$12345.

However, this becomes longer than the regular symbol length (6).
So, to avoid changing these labels, they are not truncated at this length.

The listing code is updated to deal with the longest symbol name lengt
it encounters in the symbol table.
2015-05-10 17:36:58 +02:00
Olaf Seibert
fcc85aa5f5 Fix .asciz <expr>... where an overzealous parsing wants to parse too much of the remaining text
In particular, the example was
	.asciz <cr><lf>/<SOH>/
where it tried to make a division betweem <lf> and the delimited
string /<SOH>/.
2015-05-10 17:32:44 +02:00
Olaf Seibert
2c091595e9 Add option -yl1 to list pass 1 as well
Normally listing is suppressed during the first pass, because there are
many unresolved symbols, which will be better in pass 2.
Errors are also suppressed because most of them are spurious.

With the -yl1 option, listing during pass 1 is not suppressed.
If you give the option twice, you also get the error messages.
2015-05-10 01:12:36 +02:00
Olaf Seibert
21b5f2269f Spaces. Spelling. 2015-05-10 00:32:14 +02:00
Olaf Seibert
e55979b30d Add a symbol and section table dump at the end of the listing. 2015-05-10 00:04:41 +02:00
Olaf Seibert
32b8059cf8 Put code where it belongs. 2015-05-09 23:54:54 +02:00
Olaf Seibert
787625ab47 Somewhat more interesting error messages. 2015-05-09 23:52:40 +02:00
Olaf Seibert
a8b6c026db Correct comment. 2015-05-09 16:07:58 +02:00
Olaf Seibert
60511a5f81 Improve comment. 2015-05-09 16:04:50 +02:00
Olaf Seibert
e477f7bd80 The manual differs from the implementation...
at least the one of RSX M+ 4.6.
Inconsistent flags given to .PSECT seem to be simply combined, with
nothing special done after pass 1 when re-reading for 2. The situation
at the end of pass 2 wins.
2015-05-09 15:45:00 +02:00
Olaf Seibert
20f25b9dd9 Fix bug with .SAVE and .RESTORE
.SAVE didn't check for  stack overflow.
.RESTORE moved the stack pointer in the wrong direction.
2015-05-09 12:51:31 +02:00
Olaf Seibert
b4d3c9a094 Fix undefined macros in second pass when conditional inclusion is used...
Given the following conditional inclusion, as seen in RSX Kermit-11
sources:

        .if ndf, K11INC
        .ift
        .include /IN:K11MAC.MAC/
        .include /IN:K11DEF.MAC/
        .endc

macros defined in K11MAC.MAC are unknown when used later on.

The assembler keeps a running count of the line number (stmtno) and
stores it in the macro definition. In the second pass, it tries to avoid
cases of use-before-defined, because it doesn't really forget the
macros.

However, in this case, the second pass has fewer lines, because there
was some conditional inclusion... so when the macro is used in the
second pass, its running line number (including the skipped inclusions)
is lower than the line number where the macro was defined...

The line number check would also interfere when the /PASS:1 and /PASS:2
input file modifiers would be implemented.

It seems to me that in most normal cases, a use-before-defined is
already detected in the first pass, so the check is not really needed.

Therefore I have simply removed it.
2015-05-08 23:19:13 +02:00
Olaf Seibert
184fae4b67 Generalise argument string parsing,
not just for .include. Manual shows various delimiters.
2015-05-08 12:35:57 +02:00
Olaf Seibert
f01ee85a8f Allow whitespace before comma in two-general-operand instructions.
(it was allowed already in other cases such as SOB, JSR, ASH, ...).
2015-05-08 10:03:04 +02:00
Olaf Seibert
422285bb60 If a section is declared a second time, and flags...
are given, then they must be identical to the  first time.
See page 6-38 of AA-KX10A-TC_PDP-11_MACRO-11_Reference_Manual_May88.pdf .
2015-05-08 02:09:03 +02:00
Olaf Seibert
4849f7f039 Reset dot in all sections. write_globals() only does it...
if there is an object file.
2015-05-08 02:03:23 +02:00
Olaf Seibert
3b6637f82d Also add NOSAV flag to PSECT. 2015-05-08 00:41:18 +02:00
Olaf Seibert
6acf2971bd Add the "COM" flag to PSECT/CSECT: opposite of OVR. 2015-05-08 00:28:25 +02:00
Olaf Seibert
98e782e41e INCLUDE file names may have quotes around them. 2015-05-08 00:08:50 +02:00
Olaf Seibert
cf320a2e60 Fix use-after-free errors.
evaluate() would not-quite-copy the original tree, which often would
get freed afterward. Including the shared parts.
Also fixed the case where evaluate() would turn a EX_NEG node into an
EX_COM node.
2015-05-07 23:26:38 +02:00
Olaf Seibert
a5cc743cd6 Fix "-l -". 2015-05-07 21:39:50 +02:00
shattered
e35df877f9 Merge pull request #1 from qu1j0t3/master
Fix clang warnings and a couple of typos.
2015-02-10 21:44:06 +03:00
Toby Thain
6c388dcf54 Fix crashes when arguments aren't provided to options that expect them. Detect when an option might have been forgotten. Add some tests for required option arguments. 2015-02-03 22:07:58 -05:00
Toby Thain
e0dcdd467d Add test for crash bug on undef macro. 2015-02-03 19:38:34 -05:00
Toby Thain
ea8ee367ee Fix crash on OS X x86_64. 2015-02-03 19:35:03 -05:00
Toby Thain
48996a6627 Typo and one more warning. 2015-02-01 22:25:59 -05:00
Toby Thain
7ab53debb8 Fix some warnings under clang. 2015-02-01 22:11:54 -05:00
Sergey Svishchev
4ea315e2d2 Don't force CFLAGS. Rename makefile to Makefile. 2013-06-04 23:56:36 +04:00
Sergey Svishchev
8caea63b6a XXX #define stricmp strcasecmp 2013-06-04 23:38:14 +04:00
Sergey Svishchev
49c393b896 Missed this 2013-02-16 15:49:01 +04:00
Sergey Svishchev
1d97d345c7 Remove github's autogenerated README 2013-02-15 23:54:41 +04:00
Sergey Svishchev
6a2afc3fa7 Import J Hoppe's 20090427 release from http://retrocmp.com/tools/macro-11-on-windows 2013-02-15 23:50:38 +04:00
Sergey Svishchev
3b8e141917 Initial import of 2001 code from http://www.dbit.com/pub/linux/macro11/ 2013-02-15 23:44:59 +04:00
shattered
53b84e435f Initial commit 2013-02-13 13:45:24 -08:00