-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix 11.05.2023 #2
base: main
Are you sure you want to change the base?
Conversation
Andrey
Thanks for spotting this.
I actually fixed using name + 1 rather than &name[1]. Will post to github shortly
Regards
Mark
From: Andrey Hlus ***@***.***>
Sent: Thursday, May 11, 2023 7:12 AM
To: ogdenpm/c-ports ***@***.***>
Cc: Subscribed ***@***.***>
Subject: [ogdenpm/c-ports] fix 11.05.2023 (PR #2)
Hi Mark.
I found another error in the code. The file name was corrupted with multiple INCLUDE's attachments.
…_____
You can view, comment on, or merge this pull request online at:
#2
Commit Summary
* f46dce8 <f46dce8> fix 11.05.2023
File Changes
(1 <https://github.com/ogdenpm/c-ports/pull/2/files> file)
* M plm80c/plm6a.c <https://github.com/ogdenpm/c-ports/pull/2/files#diff-3532f11c83411816367ce8c3304443dd73ef3763920eebd4d00f8675664e1fe5> (2)
Patch Links:
* https://github.com/ogdenpm/c-ports/pull/2.patch
* https://github.com/ogdenpm/c-ports/pull/2.diff
—
Reply to this email directly, view it on GitHub <#2> , or unsubscribe <https://github.com/notifications/unsubscribe-auth/AAZ6DD6DMM3MJGEVY7IAUETXFR7JNANCNFSM6AAAAAAX5UBQAA> .
You are receiving this because you are subscribed to this thread. <https://github.com/notifications/beacon/AAZ6DD5A2PZNNZ7IPYSFBVLXFR7JNA5CNFSM6AAAAAAX5UBQACWGG33NNVSW45C7OR4XAZNFJFZXG5LFVJRW63LNMVXHIX3JMTHGLISJ6I.gif> Message ID: ***@***.***>
|
Ok. |
Andrey
As you will appreciate name + 1 is equivalent to &name[1].
My choice of name + 1 is that I find it easier to read.
Note the handling of the source file names is something that I will ultimately change as it limits filename lengths.
There are two sensible options
1. Use the string encoding model in the intermediate file, i.e. prefix with the string length. This would allow names up to 255 chars
2. As the various overlays are now handled in the one file, a simpler option would be to encode an index number for a file and use this in the intermediate file.
This way arbitrary length files can be handled.
On a separate note, I accidentally pushed changes to asm80, which may prevent it being built. I have done significant changes to the I/O for asm80 and it now uses the native stdio for buffering. My current code handles Linux/Windows text encoding, arbitrary length command line and source lines, although for printing the line is clipped. The code now uses system allocated tmp files so parallel asm builds can happen e.g. when using make -j option. I have also done most of the ground work to support Windows/Linux file names and still support the :Fx: prefix to map to a directory as required. I hope to release the code in the next week.
I also intend to modify the symbol table management to support up to 31 character names, to be consistent with PL/M. This will also require changes to the xref code.
Regards
Mark
From: Andrey Hlus ***@***.***>
Sent: Thursday, May 11, 2023 6:33 PM
To: ogdenpm/c-ports ***@***.***>
Cc: Mark Ogden ***@***.***>; Comment ***@***.***>
Subject: Re: [ogdenpm/c-ports] fix 11.05.2023 (PR #2)
Ok.
If it's not a secret, then why as name+1?
—
Reply to this email directly, <#2 (comment)> view it on GitHub, or <https://github.com/notifications/unsubscribe-auth/AAZ6DDZMYADXA2BTM7IMGFTXFUPGNANCNFSM6AAAAAAX5UBQAA> unsubscribe.
You are receiving this because you commented. <https://github.com/notifications/beacon/AAZ6DD3J45NHYZYZ4JCEC5TXFUPGNA5CNFSM6AAAAAAX5UBQACWGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTS4BXJZE.gif> Message ID: < ***@***.***> ***@***.***>
|
Mark There are no comrades for the taste and color :) For me it's clearer &name[1]. But it is not important. In my modification, all utilities already support the 8.3 filename format, as in СP/M. I did not expand to 255 characters, since long file names are needed only in large projects, and under 8080 the processor of large projects cannot exist. The idea about STDIO is interesting. Parallel execution of ASM80 is also unnecessary, a dozen sources are compiled in less than a second. So why parallelize? Regarding the symbol table ASM80. I expanded it to 18 characters. As long as that's enough. I can suggest what, where and how to change. Best regards. |
Andrey
The reason for supporting longer filenames, is not the filename part itself, but to allow directory prefixes. This can be used to reference shared include files e.g. ../include/stdio.inc, and also to allow object and listing files to be placed in directories other than the source. Whilst using :Fx: prefixes would support this, it requires setting up environment variables.
As to parallel builds, for my cross developments I use gnu make, often with plm and assembler mixed. Make runs much quicker with make -j and unless asm80 supports parallel builds it cannot be used, or the makefile has to be marked up to force single thread builds.
I have your code which supports 18 chars and will look at it. As part of my rework I plan to change the memory management and offset to pointer code I used in the original port. This should make the code clearer, however it is likely to make the symbol table entries larger, making the insertion slower. To get around this I may move to simple hashing.
The basic stdio code is now working and has allowed the removal of quite a bit of code. I also modified the error handling to use the standard OS error strings rather than map to the Intel ones.
I have also eliminated the xref temporary file and will look to do the same for the macro file. This will allow further simplification of the source code.
Regards
Mark
From: Andrey Hlus ***@***.***>
Sent: Friday, May 12, 2023 8:14 AM
To: ogdenpm/c-ports ***@***.***>
Cc: Mark Ogden ***@***.***>; Comment ***@***.***>
Subject: Re: [ogdenpm/c-ports] fix 11.05.2023 (PR #2)
Mark
There are no comrades for the taste and color :) For me it's clearer &name[1]. But it is not important.
In my modification, all utilities already support the 8.3 filename format, as in СP/M. I did not expand to 255 characters, since long file names are needed only in large projects, and under 8080 the processor of large projects cannot exist.
The idea about STDIO is interesting.
Parallel execution of ASM80 is also unnecessary, a dozen sources are compiled in less than a second. So why parallelize?
When the assembler crashed with an error, it is more or less clear from the tmp files where and from what. And where to look for and watch system ones?
Regarding the symbol table ASM80. I expanded it to 18 characters. As long as that's enough. I can suggest what, where and how to change.
Best regards.
—
Reply to this email directly, <#2 (comment)> view it on GitHub, or <https://github.com/notifications/unsubscribe-auth/AAZ6DD26MZRW6ELCWSJ7ZGDXFXPNBANCNFSM6AAAAAAX5UBQAA> unsubscribe.
You are receiving this because you commented. <https://github.com/notifications/beacon/AAZ6DD3KQYWZEJ67M5SRGMLXFXPNBA5CNFSM6AAAAAAX5UBQACWGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTS4DMZMC.gif> Message ID: < ***@***.***> ***@***.***>
|
Mark You have convinced me. I will also introduce support for long file names. I don't use gnu, so it's hard for me to argue something here. You know better. My code is not complete. I do not post a history of code modification changes. In the attachment, the history is just for expanding the length of the names of identifiers to 18 characters. I apologize for the comments in Russian, but I keep these logs exclusively for myself. There you will understand everything without comments. About system error codes. It seems to me that this is in vain, since each system has its own errors. You can get rid of all temporary files altogether by simply replacing them with in-memory buffers. I already thought about it. But for now, I have things to do. |
Andrey
I have just posted a major update to asm80.
The key changes are noted below. If you find any problems please let me know.
* The I/O has been significantly reworked to use stdio buffering including adding support for Linux/Unix files. This has allowed most of the internal buffering code used in the original PL/M to be removed. For now some buffering around macros remains, but the underlying I/O has been modified. The changes also considerably simplify the handling of nested include files
* Related to the above, most of the error messages now use native error messages and write to stderr.
* The intermediate file required for xref support has been eliminated.
* The intermediate file currently still used for macro processing, now uses a system allocated temporary file, enabling the support for parallel invocation of asm80.
* Limits on the command line length have been removed as have limits on the source line length, however for listing purposes very long lines are truncated.
* Native filenames, including directory paths are now supported up to a limit of 260 characters. The change also supports the use of a :Fx: prefix (x is 1-9), which is replaced with the value of the associated environment variable :Fx: if it exists, otherwise the empty string is used. Note filenames including the directory path cannot include spaces or the ')' character. By using the :Fx: prefix it is possible to work around this for the directory path. The 260 character limit can also be resolved using the same technique if the OS supports longer paths.
* Support for ISIS devices e.g. :CO: and :BB: has been removed. Native equivalents can be used or for :BB: by using the NO option prefix.
* For the auto generated default .lst and .obj files a check is made on whether the file name part is upper case only. If it is then uppercase extensions .LST and .OBJ are used instead.
* The MACROFILE option is disabled as it is no longer needed. All assembly is done with macros enabled and the use of a system temporary file. Note, although previously undocumented, as the assembler always uses the macro version the key words macro and local, cannot be used as standard labels.
* Option MOD85 is now set by default. |The NO prefix for MOD85 is now supported to allow 8080 mode to be set.
* Initial work has been done to remove dependencies on packed structure support and little endian data formats. Further checking is required to check for missed changes.
* A number of preliminary changes have been made, pending support for names up to 31 characters to match PL/M.
Regards
Mark
From: Andrey Hlus ***@***.***>
Sent: Friday, May 12, 2023 10:09 PM
To: ogdenpm/c-ports ***@***.***>
Cc: Mark Ogden ***@***.***>; Comment ***@***.***>
Subject: Re: [ogdenpm/c-ports] fix 11.05.2023 (PR #2)
Mark
You have convinced me. I will also introduce support for long file names.
I don't use gnu, so it's hard for me to argue something here. You know better.
My code is not complete. I do not post a history of code modification changes. In the attachment, the history is just for expanding the length of the names of identifiers to 18 characters. I apologize for the comments in Russian, but I keep these logs exclusively for myself. There you will understand everything without comments.
About system error codes. It seems to me that this is in vain, since each system has its own errors.
You can get rid of all temporary files altogether by simply replacing them with in-memory buffers. I already thought about it. But for now, I have things to do.
MODIFY3.TXT <https://github.com/ogdenpm/c-ports/files/11467739/MODIFY3.TXT>
—
Reply to this email directly, view it on GitHub <#2 (comment)> , or unsubscribe <https://github.com/notifications/unsubscribe-auth/AAZ6DD6R7VW5OO5Q5SCLSOTXF2RHXANCNFSM6AAAAAAX5UBQAA> .
You are receiving this because you commented. <https://github.com/notifications/beacon/AAZ6DDYYYJ65XHUU2XWK2H3XF2RHXA5CNFSM6AAAAAAX5UBQACWGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTS4FK53I.gif> Message ID: ***@***.*** ***@***.***> >
|
Andrey
I have posted another update for asm80, this version is on the dev branch. The key changes are
* Labels up to 31 characters are now supported and as per PL/M embedded $ can be used in labels and numbers to make them easier to read. The $ is excluded from the name. Symbol listings, xref listings and object files all support the longer length variables.
* In order to support the changes the symbol table now holds a pointer to a C string rather than a packed double word. Related to this the symbol table memory management has been modified.
* A maximum of 8192 symbols are supported.
* The maximum combined length of nested parameters is currently 1024 characters (+ length bytes)
* The maximum line length of macro body is currently 512 bytes
* The keyword table has been modified to use a hash table generated by gperf.
If you get table errors let me know.
* Due to the longer labels, I have had to make some changes to the checks on when to generate a new OMF85 record. The original assumed that the names were up to 6 characters. A consequence of this is that symbol splits across records may be different. The generated object files will be equivalent.
* With the extended label name, it is possible that some old code will generate undefined errors. This is because in the original the names were truncated to 6 characters instead of 31, e.g. RESTART and RESTAR will be the same on the original assembler but flag an error now.
* I have re-enabled MACROFILE, which defaults to on. To turn off use the NOMACROFILE option. This will allow reserved names to be used for older code.
Note support for the optional (drive), has been removed and if used will generate an error.
Regards
Mark
From: ***@***.*** ***@***.***>
Sent: Tuesday, May 16, 2023 3:58 PM
To: 'ogdenpm/c-ports' ***@***.***>; 'ogdenpm/c-ports' ***@***.***>
Cc: 'Comment' ***@***.***>
Subject: RE: [ogdenpm/c-ports] fix 11.05.2023 (PR #2)
Andrey
I have just posted a major update to asm80.
The key changes are noted below. If you find any problems please let me know.
* The I/O has been significantly reworked to use stdio buffering including adding support for Linux/Unix files. This has allowed most of the internal buffering code used in the original PL/M to be removed. For now some buffering around macros remains, but the underlying I/O has been modified. The changes also considerably simplify the handling of nested include files
* Related to the above, most of the error messages now use native error messages and write to stderr.
* The intermediate file required for xref support has been eliminated.
* The intermediate file currently still used for macro processing, now uses a system allocated temporary file, enabling the support for parallel invocation of asm80.
* Limits on the command line length have been removed as have limits on the source line length, however for listing purposes very long lines are truncated.
* Native filenames, including directory paths are now supported up to a limit of 260 characters. The change also supports the use of a :Fx: prefix (x is 1-9), which is replaced with the value of the associated environment variable :Fx: if it exists, otherwise the empty string is used. Note filenames including the directory path cannot include spaces or the ')' character. By using the :Fx: prefix it is possible to work around this for the directory path. The 260 character limit can also be resolved using the same technique if the OS supports longer paths.
* Support for ISIS devices e.g. :CO: and :BB: has been removed. Native equivalents can be used or for :BB: by using the NO option prefix.
* For the auto generated default .lst and .obj files a check is made on whether the file name part is upper case only. If it is then uppercase extensions .LST and .OBJ are used instead.
* The MACROFILE option is disabled as it is no longer needed. All assembly is done with macros enabled and the use of a system temporary file. Note, although previously undocumented, as the assembler always uses the macro version the key words macro and local, cannot be used as standard labels.
* Option MOD85 is now set by default. |The NO prefix for MOD85 is now supported to allow 8080 mode to be set.
* Initial work has been done to remove dependencies on packed structure support and little endian data formats. Further checking is required to check for missed changes.
* A number of preliminary changes have been made, pending support for names up to 31 characters to match PL/M.
Regards
Mark
From: Andrey Hlus ***@***.*** ***@***.***> >
Sent: Friday, May 12, 2023 10:09 PM
To: ogdenpm/c-ports ***@***.*** ***@***.***> >
Cc: Mark Ogden ***@***.*** ***@***.***> >; Comment ***@***.*** ***@***.***> >
Subject: Re: [ogdenpm/c-ports] fix 11.05.2023 (PR #2)
Mark
You have convinced me. I will also introduce support for long file names.
I don't use gnu, so it's hard for me to argue something here. You know better.
My code is not complete. I do not post a history of code modification changes. In the attachment, the history is just for expanding the length of the names of identifiers to 18 characters. I apologize for the comments in Russian, but I keep these logs exclusively for myself. There you will understand everything without comments.
About system error codes. It seems to me that this is in vain, since each system has its own errors.
You can get rid of all temporary files altogether by simply replacing them with in-memory buffers. I already thought about it. But for now, I have things to do.
MODIFY3.TXT <https://github.com/ogdenpm/c-ports/files/11467739/MODIFY3.TXT>
—
Reply to this email directly, view it on GitHub <#2 (comment)> , or unsubscribe <https://github.com/notifications/unsubscribe-auth/AAZ6DD6R7VW5OO5Q5SCLSOTXF2RHXANCNFSM6AAAAAAX5UBQAA> .
You are receiving this because you commented. <https://github.com/notifications/beacon/AAZ6DDYYYJ65XHUU2XWK2H3XF2RHXA5CNFSM6AAAAAAX5UBQACWGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTS4FK53I.gif> Message ID: ***@***.*** ***@***.***> >
|
Hi Mark. I'll be sure to check it out. And I'll probably drag something into my version :) So far I've added the missing loop to the PL/M compiler:
|
Andrey
You may be interested in how previous programmers simulated the looping using literals.
Your changes make a new language and make it incompatible with later PL/M versions.
Later versions add nested structures, support for multiple levels of based, longer names and use of _, ‘@’ as well as ‘.’ for addressing, signed + larger data sizes and multiple additional built-ins. Other extensions supported 8086 segmented architecture.
DECLARE IS LITERALLY 'LITERALLY';
DECLARE DCL IS 'DECLARE';
DCL LOOP IS 'DO; a_begin_loop:DO WHILE';
DCL ENDLOOP IS 'END a_begin_loop;b_end_loop:END';
DCL RELOOP IS 'GOTO A_begin_loop'; // effectively CONTINUE
DCL EXITLOOP IS ‘GOTO b_end_loop’; // effectively BREAK
DCL REPEAT IS 'DO; a_begin_loop:DO';
DCL UNTIL IS 'IF NOT(';
DCL ENDREPEAT IS ') THEN GOTO a_begin_loop; END a_begin_loop; b_end_loop:END';
DCL ENDREP IS 'ENDREPEAT';
DCL PROC IS 'PROCEDURE';
DCL ENDPROC IS 'END';
DCL ENDWHILE IS 'END';
DCL THENDO IS 'THEN DO';
DCL ELSEDO IS 'END; ELSE DO';
DCL ELSEIF IS 'END; ELSE IF';
DCL ENDIF IS 'END';
Some examples
LOOP a < 10;
If a < b then RELOOP; /* continue */
If a > b + 5 then EXITLOOP; /* break */
a = a + 1;
ENDLOOP;
REPEAT;
a = a -1;
UNTIL a == 5 ENDREPEAT;
Adding effectively break to iterated do loops would be a simple addition, adding continue would be problematic as it needs to jump to the step part.
Regards
Mark
From: Andrey Hlus ***@***.***>
Sent: Sunday, May 21, 2023 6:10 PM
To: ogdenpm/c-ports ***@***.***>
Cc: Mark Ogden ***@***.***>; Comment ***@***.***>
Subject: Re: [ogdenpm/c-ports] fix 11.05.2023 (PR #2)
Hi Mark.
I'll be sure to check it out. And I'll probably drag something into my version :)
So far I've added the missing loop to the PL/M compiler:
DO;
UNTIL ;
where is the loop exit condition, like in Pascal.
The only thing left to do is to add a select operator:
DO SWITCH;
: .
: .
END;
Because the native CASE is not always convenient.
—
Reply to this email directly, view it on GitHub <#2 (comment)> , or unsubscribe <https://github.com/notifications/unsubscribe-auth/AAZ6DD2O65OZU7Y7ED5YJR3XHJD7HANCNFSM6AAAAAAX5UBQAA> .
You are receiving this because you commented. <https://github.com/notifications/beacon/AAZ6DD63LGECUIXCKST4D5TXHJD7HA5CNFSM6AAAAAAX5UBQACWGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTS4YIT2M.gif> Message ID: ***@***.*** ***@***.***> >
|
Mark I saw it in the sources of the AEDIT editor. PS: By the way, I haven't found PL/M-286 and moreover PL/M-386 anywhere. Is it realistic to find them somewhere? |
Andrey
I have done some more changes to the ASM80 code and fixed the build for the other tools. The code is now on the main branch not the dev one.
Key changes as noted below.
I missed one other change from the readme, in that pagelength and pagewidth can be set to large numbers up to 65535, with 0 an alias for 65535. Lower limits still apply.
30-May-2023
ASM80
* The macro file is now simulated in memory, removing the external file.
* The underbar character is now accepted within labels
* Macro and Line buffers now auto grow as required.
* The combined length of nested macro arguments has been increased to 4096 and the arguments now grow upwards in memory rather than down. Changing to support dynamic growth would require many changes so the simpler option is to allocate a large array.
* Code has been added to replicate the format of the object file to match the original assembler, provided no label > 6 chars is used.
* The header lines have been modified to reflect that they are no longer ISIS-II and to enable long module names to be centred in the available space.
* The optional MACROFILE drive can be entered but it is not checked and is ignored.
* Some redundant functions and variables have been removed. Additionally some previously defined global variables have been made static, or function level variables.
* I have increased the size of the token stack to 20, this will allow longer db/dw lines
* The checking of whether a variable is local has been improved. Now only labels of the form ??nnnn, where nnnn is an auto generated four digit decimal number, are considered local.
Other changes
Some of the Windows build has been fixed. Certain configurations broke when I added Linux support.
Regards
Mark
|
Andrey
More enhancements posted on GitHub
* Modified the listing files to include the date and time of the assembly in the header, if there is room, which will usually be the case. The default header width is now 80 unless the page width is smaller. The date is shown in the format [yyyy-mm-dd hh:mm].
* The Symbol Cross Reference now uses the common new page functionality so page numbers don't restart from 1
* Symbol and Cross Reference information that cross page boundaries how add a sub heading to indicate that the information is continued.
* Fixed a bug in the column and row variables which were still left as byte, i.e. up to 255, even though the page width and length could be larger
Regards
Mark
From: ***@***.*** ***@***.***>
Sent: Tuesday, May 30, 2023 6:08 PM
To: 'ogdenpm/c-ports' ***@***.***>; 'ogdenpm/c-ports' ***@***.***>
Cc: 'Comment' ***@***.***>
Subject: Asm80 changes
Andrey
I have done some more changes to the ASM80 code and fixed the build for the other tools. The code is now on the main branch not the dev one.
Key changes as noted below.
I missed one other change from the readme, in that pagelength and pagewidth can be set to large numbers up to 65535, with 0 an alias for 65535. Lower limits still apply.
30-May-2023
ASM80
* The macro file is now simulated in memory, removing the external file.
* The underbar character is now accepted within labels
* Macro and Line buffers now auto grow as required.
* The combined length of nested macro arguments has been increased to 4096 and the arguments now grow upwards in memory rather than down. Changing to support dynamic growth would require many changes so the simpler option is to allocate a large array.
* Code has been added to replicate the format of the object file to match the original assembler, provided no label > 6 chars is used.
* The header lines have been modified to reflect that they are no longer ISIS-II and to enable long module names to be centred in the available space.
* The optional MACROFILE drive can be entered but it is not checked and is ignored.
* Some redundant functions and variables have been removed. Additionally some previously defined global variables have been made static, or function level variables.
* I have increased the size of the token stack to 20, this will allow longer db/dw lines
* The checking of whether a variable is local has been improved. Now only labels of the form ??nnnn, where nnnn is an auto generated four digit decimal number, are considered local.
Other changes
Some of the Windows build has been fixed. Certain configurations broke when I added Linux support.
Regards
Mark
|
Andrey
You can find an old msdos version of PLM386 on my website
https://mark-ogden.uk/files/intel/msdos/ in the plm386 directory. Other tools are also there.
There are two plm286 versions in https://mark-ogden.uk/files/intel/Intel86/,
which you might be able to get to run using udi2dos which is how most of the old intel tools were ported to msdos.
Udi2Dos can be found in the same directory as the plm386 directory
Regards
Mark
From: Andrey Hlus ***@***.***>
Sent: Monday, May 22, 2023 7:13 AM
To: ogdenpm/c-ports ***@***.***>
Cc: Mark Ogden ***@***.***>; Comment ***@***.***>
Subject: Re: [ogdenpm/c-ports] fix 11.05.2023 (PR #2)
Mark
I saw it in the sources of the AEDIT editor.
Yes, I am making a new PL/M-80, since the original compiler's toolkit has long been inconsistent with generally accepted standards.
The changes made are unlikely to affect compatibility with PL/M-86 because I'm not touching the language's syntax itself, and the two new syntax constructs don't play much of a role.
On the contrary, I'm trying to bring the syntax up to later versions. For starters I added support for the '_' symbol, now there is a working version with the @ symbol, but it's still in the testing phase.
But adding 32-bit data types is stalled for now. Stuck in the code generator. Existing tables are already filled to capacity, so I've postponed it until better times, when I have more free time.
PS: By the way, I haven't found PL/M-286 and moreover PL/M-386 anywhere. Is it realistic to find them somewhere?
Or at least their documentation.
—
Reply to this email directly, view it on GitHub <#2 (comment)> , or unsubscribe <https://github.com/notifications/unsubscribe-auth/AAZ6DD3XAWCWELT5JWQEDA3XHL7YBANCNFSM6AAAAAAX5UBQAA> .
You are receiving this because you commented. <https://github.com/notifications/beacon/AAZ6DD3FXK5DXIV7LOS5SFLXHL7YBA5CNFSM6AAAAAAX5UBQACWGG33NNVSW45C7OR4XAZNMJFZXG5LFINXW23LFNZ2KUY3PNVWWK3TUL5UWJTS4Y7GSM.gif> Message ID: ***@***.*** ***@***.***> >
|
Hi Mark. Thanks for the link! I didn't know all of this was still in existence. Will be something to do at my leisure, when I have more free time. Right now I have very little free time, and all I give to writing a game. Faced with the PL/M limit on the size of the structure, will have to remove that restriction. PS; If you don't mind, please post the compiled assembler binary. Too lazy to install GCC, for the sake of one assembly. |
Andrey
I have now done a similar set of changes to link 3.0 that I did to asm80, see the notes below. It can be found on my github site.
If you can use it. I would appreciate some feedback, especially if there are bugs.
Regards
Mark
16-Jun-2023
Recent changes have been around link 3.0, major changes are
* Command line can now be any length, all control characters entered other than new line ('\n') are converted to a space. For invoke and errors, long commands lines are formatted to a sensible width. As per the Intel code an ampersand '&' indicates additional command line text comes from stdin, which may be from a redirected file. For some OS, the '&' will need to be escaped on the command line, so as a convenience invoking link with no arguments starts input from stdin without the need for the command line '&'. This allow support for a simple response file by using link <file.
* Some support for windows/POSIX style options has been added. Use link -h for a summary. Note the -v, -V and -h options are only supported directly from the command line.
* An additional option -w (or WERROR) has been added to cause unresolved, multiply defined and COMMON length conflict warnings to be treated as errors. This is to help with make usage and would typically be used on the final link stage. Earlier partial links e.g., for overlays, should not use the option. Related to this is that the target file is deleted on error. Without this make can get confused as it sees a generated file, even though it is invalid. Note other possible warnings are given if 'MAP', if requested. These include overlaps, gaps and code that exceeds page limits. The listing file should be consulted to review these.
* As with asm80, native filenames (including directory prefixes) can be used and optionally prefixed by :Fx: where x is a digit. There are filename limitations, specifically:
* filenames cannot contain a space, parenthesis, comma or ampersand. As with the asm80 port, path names may contain these characters providing the path is mapped to a :Fx: drive using environment variables.
* filenames are not checked for legality, so may report the error when trying to open or create a file.
* For windows the check for the output file name matching an input file name is done case insensitive. Warning the compare is only done on the entered name, not any mapped name, so aliases (e.g. absolute vs. relative paths) and links to the same file will not be detected.
* publics is not allowed as a file name as it conflicts with the publics(...) option. Note publics with an extension is allowed.
* The checking that a filename is a disk file has been removed. It was previously only done on the :xx: device name. Failures to open or seek a file will be detected later. Whilst it would be possible to re-add file checking, using stat, it would need to handle the create file case where null devices and non-existent files are allowed, possibly checking that the parent directory exists. For now, the benefit of adding this is seen as minimal.
* Module names can now contain the underbar '_' character.
* The use of an externals temporary file has been eliminated.
* I/O now uses stdio functions rather than raw read/write.
* The library scan functions now cache the dictionary and offsets information, avoiding repeated reloads.
* Input record processing has been simplified, as loading even long records is reasonable given modern memory limit.
* Memory management now uses malloc/realloc, except for the fixups, which are managed in a dynamically grown array.
* System error messages have been converted to use standard messages and application messages have been made more explicit, allowing for tailored messages rather than generic error codes.
* The code should now work on big endian processors.
|
Hi Mark.
I found another error in the code. The file name was corrupted with multiple INCLUDE's attachments.