41 Commits

Author SHA1 Message Date
Olaf Seibert
eb60cfe315 Very simple .LIST and .NLIST implementation.
Thanks to Don North. Also added a simple test.
Fixes #3.
2017-04-23 18:25:17 +02:00
Olaf Seibert
c771c875cb Fix a use-after-free. Found by Don North.
Also adjust test case to include this code.
Fixes #2.
2017-04-23 18:24:38 +02:00
Olaf Seibert
433e8ecda6 Add comment on a format strictness. ...
Remove unneeded #define.
2016-10-22 15:13:34 +02:00
Olaf Seibert
b8a955792c Fix operand check for XOR which is shared with JSR.
Fixes issue #1.
2016-07-11 22:10:15 +02:00
Olaf Seibert
82f68e0d60 Implement .RAD50 <CHR> syntax, and tests. 2015-11-09 21:17:57 +01:00
Olaf Seibert
e148471a19 Extension .ascii ^/.../ conflicts with .ascii ^...^
so I removed it.
2015-11-09 21:11:41 +01:00
Olaf Seibert
fdceabe88c Add .IF P1 and .IF P2 (tests for pass 1 and 2). 2015-06-04 00:35:31 +02:00
Olaf Seibert
b75195549e Combine .IF IDN and .IF DIF. 2015-06-03 23:03:36 +02:00
Olaf Seibert
ff5179743c Add addressing mode check for JSR, and a test. 2015-06-01 00:28:49 +02:00
Olaf Seibert
a24e3ba3ea Fix check for JMP Rn (which is illegal). 2015-05-31 23:34:05 +02:00
Olaf Seibert
60d0afde00 Use the path search also for .INCLUDE, and add -I option: include path
The -I option is used to specify the search path for .INCLUDE files.
It also appends this to the "INCLUDE" environment variable.
2015-05-31 22:52:05 +02:00
Olaf Seibert
c8dbd26e9a This initialisation wasn't needed. 2015-05-27 22:22:52 +02:00
Olaf Seibert
d38f4009c4 Crank up the warning levels, and adjust the code to silence ...
several compilers:
- gcc version 4.5.3 (NetBSD nb2 20110806)
- gcc version 4.9.2 (Ubuntu 4.9.2-10ubuntu13)
- Ubuntu clang version 3.6.0-2ubuntu1 (tags/RELEASE_360/final) (based on LLVM 3.6.0)

The warnings were mostly about local variables shadowing others,
unused function parameters, and C++ style comments. Some variables were
indeed used before set.

Note that on Linux, using -std=c99 does stupid things like *remove* the
declaration of strdup() from <string.h>. Therefore I've reluctantly used
-std=gnu99.
2015-05-27 21:51:26 +02:00
Olaf Seibert
bbaf56206e Allow extraction of Object LiBraries too.
Eliminate terminating 0 byte in macro buffers.
2015-05-24 17:37:08 +02:00
Olaf Seibert
435cdb0b7f Separate out the string parsing for .include/.library file names and macro arguments.
They behave observably different from generic string parsing and trying
to account for them generically just gets in the way.
.rept is treated the same as a macro.
2015-05-22 16:36:16 +02:00
Olaf Seibert
536d1856f0 .IF B,< > is supposed to be TRUE
because spaces are blank.
Seen in Kermit, although perhaps the author didn't mean that (MESSAGE < >).
2015-05-22 01:32:45 +02:00
Olaf Seibert
60af942129 .RESTORE restores DOT too
this is how it should be according to page 6-42 of the manual.
Kermit does this ugly thing to backpatch some .word value:

     435 000070                         	dial$time	35.
       1 000070                         	modval	35.,dial.time
       1                                	.save
       2 000070                         	.psect	modinf
       3        000006                  	. = $$current + dial.time
       4 000006 000043                  	.word	35.
       5 000070                         	.restore
     436 000070                         	wake$string	<^E^M>

where the current program section already is modinf. So the .save stores
DOT, it's changed to a lower value (6) to backpatch, and .restore sets DOT
back to 70.
2015-05-22 00:13:54 +02:00
Olaf Seibert
b8a15a89b5 Implement .ENABL and .DSABL LC. 2015-05-21 22:24:31 +02:00
Olaf Seibert
168340c54c A bit more tweaking of output/listing. 2015-05-21 00:57:52 +02:00
Olaf Seibert
dbc3a55666 Store section size after .EVEN and .ODD
just in case it's the last thing in the section.
2015-05-19 22:42:55 +02:00
Olaf Seibert
2488e02aae A few more small listing tweaks. 2015-05-19 22:09:53 +02:00
Olaf Seibert
859e8dbb1f List macro calls with the location of DOT
Like MACRO V05.05.
2015-05-19 21:17:15 +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
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
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
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
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
6a2afc3fa7 Import J Hoppe's 20090427 release from http://retrocmp.com/tools/macro-11-on-windows 2013-02-15 23:50:38 +04:00