     1                                  
     2                                  ; Public Domain
     3                                  
     4                                  ; test install command: install; ldmemoth; ldmemoth uninstall
     5                                  ; test run command: ; .; .
     6                                  
     7                                  %include "lmacros3.mac"
     1                              <1> [list -]
    14                              <2> [list -]
    14                              <1> [list -]
     8                                  
     9                                  %assign _OTHER 1
    10                                  
    11                                  %include "ldmem.asm"
     1                              <1> 
     2                              <1> ; Public Domain
     3                              <1> 
     4                              <1> ; test install command: install; ldmem; ldmem uninstall
     5                              <1> ; test run command: ; .; .
     6                              <1> 
     7                              <1> %include "lmacros3.mac"
     1                              <2> [list -]
     8                              <1> 
     9                              <1> 	numdef OTHER, 0
    10                              <1> %if _OTHER
    11                              <1>  %define ELDOTHER 1
    12                              <1>  %define OTH_STRING "OTH"
    13                              <1>  %imacro getotherds 0
    14                              <1> reloc	mov ds, word [ss:otherds]
    15                              <1> internaldatarelocation
    16                              <1>  %endmacro
    17                              <1>  %imacro resetds 0
    18                              <1> 	push ss
    19                              <1> 	pop ds
    20                              <1>  %endmacro
    21                              <1>  %imacro getotheres 0
    22                              <1> reloc	mov es, word [ss:otherds]
    23                              <1> internaldatarelocation
    24                              <1>  %endmacro
    25                              <1>  %imacro resetes 0
    26                              <1> 	push ss
    27                              <1> 	pop es
    28                              <1>  %endmacro
    29                              <1> %else
    30                              <1>  %define OTH_STRING ""
    31                              <1>  %idefine getotherds
    32                              <1>  %idefine resetds
    33                              <1>  %idefine getotheres
    34                              <1>  %idefine resetes
    35                              <1> %endif
    36                              <1> 
    37                              <1> %include "eld.mac"
     1                              <2> %if 0
     2                              <2> 
     3                              <2> Extensions for lDebug macros
     4                              <2> 
     5                              <2> Copyright (C) 2008-2025 E. C. Masloch
     6                              <2> 
     7                              <2> Usage of the works is permitted provided that this
     8                              <2> instrument is retained with the works, so that any entity
     9                              <2> that uses the works is notified of this instrument.
    10                              <2> 
    11                              <2> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
    12                              <2> 
    13                              <2> %endif
    14                              <2> 
    15                              <2> %ifndef ELD_MAC
    16                              <2> %define ELD_MAC 1
    17                              <2> 
    18                              <2> %include "lmacros3.mac"
     1                              <3> [list -]
    19                              <2> 
    20                              <2> 		; ELD executable header
    21                              <2> 	struc ELD_HEADER
    22 00000000 ????????            <2> eldhSignature:		resb 4	; "ELD1"
    23 00000004 ??????              <2> 			resb 3	; reserved
    24 00000007 ??                  <2> 			resb 1	; 26 (Ctrl-Z)
    25 00000008 ????????            <2> eldhCodeOffset:		resd 1	; position displacement from eldhSignature
    26 0000000C ????                <2> eldhCodeImageLength:	resw 1	; amount bytes, at least 32
    27 0000000E ????                <2> eldhCodeAllocLength:	resw 1	; amount bytes, added to prior. sum < 64 KiB
    28 00000010 ????????            <2> eldhDataOffset:		resd 1
    29 00000014 ????                <2> eldhDataImageLength:	resw 1	; (zero allowed)
    30 00000016 ????                <2> eldhDataAllocLength:	resw 1	; (zero allowed)
    31 00000018 ????                <2> eldhCodeEntrypoint:	resw 1	; within code section, used as displacement
    32 0000001A ????????            <2> eldhReserved:		resb 4	; reserved
    33 0000001E ????                <2> eldhExtensionSize:	resw 1	; from eldhSignature, -> past eldhx fields in use
    34                              <2> 	endstruc
    35                              <2> 	endarea ELD_HEADER, 1
    36                              <2> 
    37                              <2> 	struc ELD_HEADERX
    38 00000000 <res 20h>           <2> eldhxHeader:		resb ELD_HEADER_size
    39 00000020 ????????            <2> eldhxDescriptionOffset:	resd 1	; zero if none, from eldhxHeader. <= 128 Bytes
    40 00000024 ????????            <2> eldhxHelpOffset:	resd 1	; zero if none, from eldhxHeader
    41 00000028 ????????            <2> eldhxLibTable:		resd 1	; zero if none, from eldhxHeader
    42 0000002C ????????            <2> eldhxDateTimeOffset:	resd 1	; zero if none, from eldhxHeader
    43                              <2> 	alignb 16
    44                              <2> 	endstruc
    45                              <2> 
    46                              <2> 	struc ELD_TRAILER_HEADER
    47 00000000 ????????????????    <2> eldthSignature:		resb 8	; "ELD1TAIL"
    48 00000008 ????????            <2> eldthHeaderOffset:	resd 1	; negative displacement from eldthSignature,
    49                              <2> 				;  add this dword to the seek offset
    50 0000000C ????                <2> eldthReserved:		resw 1	; reserved, must be initialised to zero
    51 0000000E ????                <2> eldthChecksum:		resw 1	; sum of all words in trailer header = 0
    52                              <2> 	endstruc
    53                              <2> 	endarea ELD_TRAILER_HEADER, 1
    54                              <2> 
    55                              <2> 	struc ELD_LIBTABLE
    56 00000000 ????                <2> eldltFormat:		resw 1
    57                              <2> 	; 0 = uncompressed
    58                              <2> 	; 2 = heatshrink compressed
    59                              <2> 	; 3 = lzexedat -4 compressed
    60                              <2> 	; 4 = lzexedat -4 -l compressed
    61 00000002 ????                <2> eldltAmount:		resw 1
    62 00000004 ????????            <2> eldltOffset:		resd 1	; from eldhxHeader
    63                              <2> eldltCompressedLength:		; (dword, only present if format 2, 3, or 4)
    64                              <2> 	endstruc
    65                              <2> 	endarea ELD_LIBTABLE, 1
    66                              <2> 
    67                              <2> 		; ELD instance header
    68                              <2> 	struc ELD_INSTANCE
    69 00000000 ????                <2> eldiStartCode:		resw 1	; -> this structure itself (para aligned)
    70 00000002 ????                <2> eldiEndCode:		resw 1	; -> behind memory used by instance (para aligned)
    71 00000004 ????                <2> eldiStartData:		resw 1	; -> data in data entry section (para aligned), or 0
    72 00000006 ????                <2> eldiEndData:		resw 1	; -> behind data (para aligned), or 0
    73 00000008 ????????????????    <2> eldiIdentifier:		resb 8	; blank-filled text
    74 00000010 ????                <2> eldiFlags:		resw 1	; flags
    75                              <2> eldiListing_size equ 14
    76 00000012 <res Eh>            <2> eldiListing:		resb eldiListing_size
    77                              <2> 				; ASCIZ listing file name
    78                              <2> 	endstruc
    79                              <2> 		; flags for eldiFlags:
    80                              <2> eldifResident:		equ 1
    81                              <2> 
    82                              <2> 		; ELD link info header
    83                              <2> 	struc ELD_LINKINFO
    84 00000000 ????                <2> eldlSignature:		resw 1	; 0E1D1h
    85 00000002 ????????            <2> eldlReserved:		resw 2
    86 00000006 ????                <2> eldlUseLinkHash:	resw 1
    87 00000008 ????                <2> eldlDataAmount:		resw 1
    88 0000000A ????                <2> eldlDataPrefixes:	resw 1
    89 0000000C ????                <2> eldlDataEntries:	resw 1
    90 0000000E ????                <2> eldlDataAddresses:	resw 1
    91 00000010 ????                <2> eldlCodeAmount:		resw 1
    92 00000012 ????                <2> eldlCodePrefixes:	resw 1
    93 00000014 ????                <2> eldlCodeEntries:	resw 1
    94 00000016 ????                <2> eldlCodeAddresses:	resw 1
    95                              <2> 	endstruc
    96                              <2> 
    97                              <2> 	numdef ELD_CODE_VSTART, 9001h
    98                              <2> 	numdef ELD_DATA_VSTART, 8000h
    99                              <2> 	numdef ELD_RELOC_VSTART, 8000h
   100                              <2> 
   101                              <2> 	numdef ELD_RECLAIM_HINT, 0
   102                              <2> 	strdef ELD_LISTING, ""
   103                              <2> 	numdef ELD_DATETIME, 0
   104                              <2> 
   105                              <2> %if _ELD_DATETIME
   106                              <2>  %define PUT_ELDHX_DATETIME_OFFSET at eldhxDateTimeOffset, dd DATAOFFSET + datetime - datastart
   107                              <2>  %macro PUT_ELD_DATETIME 0.nolist
   108                              <2> datetime:	asciz __UTC_DATE__,'T',__UTC_TIME__,'Z'
   109                              <2> 		asciz		; for future extension
   110                              <2>  %endmacro
   111                              <2> %else
   112                              <2>  %define PUT_ELDHX_DATETIME_OFFSET
   113                              <2>  %define PUT_ELD_DATETIME
   114                              <2> %endif
   115                              <2> 
   116                              <2> %endif
    38                              <1> %include "eldcall.mac"
     1                              <2> %if 0
     2                              <2> 
     3                              <2> Extensions for lDebug call macros
     4                              <2> 
     5                              <2> Copyright (C) 2008-2024 E. C. Masloch
     6                              <2> 
     7                              <2> Usage of the works is permitted provided that this
     8                              <2> instrument is retained with the works, so that any entity
     9                              <2> that uses the works is notified of this instrument.
    10                              <2> 
    11                              <2> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
    12                              <2> 
    13                              <2> %endif
    14                              <2> 
    15                              <2> %ifndef ELDCALL_MAC
    16                              <2> %define ELDCALL_MAC 1
    17                              <2> 
    18                              <2> %include "lmacros3.mac"
     1                              <3> [list -]
    19                              <2> %include "nasmhash.mac"
     1                              <3> 
     2                              <3> %if 0
     3                              <3> 
     4                              <3> Hashing macros
     5                              <3>  by E. C. Masloch, 2019
     6                              <3> 
     7                              <3> Usage of the works is permitted provided that this
     8                              <3> instrument is retained with the works, so that any entity
     9                              <3> that uses the works is notified of this instrument.
    10                              <3> 
    11                              <3> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
    12                              <3> 
    13                              <3> %endif
    14                              <3> 
    15                              <3> %ifndef __NASMHASH_MAC__
    16                              <3> %assign __NASMHASH_MAC__ 1
    17                              <3> 
    18                              <3> 
    19                              <3> 	%macro hashdef 2+.nolist
    20                              <3> %ifempty %2
    21                              <3>  %assign _%1 1
    22                              <3> %else
    23                              <3> %ifstr %2
    24                              <3>  %define %%string %2
    25                              <3> %elifid %2
    26                              <3>  %defstr %%string %2
    27                              <3> %elifnum %2
    28                              <3>  %defstr %%string %2
    29                              <3> %eliftok %2
    30                              <3>  %defstr %%string %2
    31                              <3> %else
    32                              <3>  %error Unknown input
    33                              <3> %endif
    34                              <3> %strlen %%length %%string
    35                              <3> %assign %%hash 1
    36                              <3> %assign %%index 1
    37                              <3> %rep %%length
    38                              <3>  %substr %%char %%string %%index
    39                              <3>  %assign %%hash (%%hash * 31 + %%char) & 0FFFFh
    40                              <3>  %assign %%index %%index + 1
    41                              <3> %endrep
    42                              <3> %assign _%1 %%hash
    43                              <3> %endif
    44                              <3> 	%endmacro
    45                              <3> 
    46                              <3> 
    47                              <3> %endif
    20                              <2> %include "elddata.mac"
     1                              <3> %if 0
     2                              <3> 
     3                              <3> Extensions for lDebug data relocation macros
     4                              <3> 
     5                              <3> Copyright (C) 2008-2024 E. C. Masloch
     6                              <3> 
     7                              <3> Usage of the works is permitted provided that this
     8                              <3> instrument is retained with the works, so that any entity
     9                              <3> that uses the works is notified of this instrument.
    10                              <3> 
    11                              <3> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
    12                              <3> 
    13                              <3> %endif
    14                              <3> 
    15                              <3> %ifndef ELDDATA_MAC
    16                              <3> %define ELDDATA_MAC 1
    17                              <3> 
    18                              <3> %include "lmacros3.mac"
     1                              <4> [list -]
    19                              <3> %include "nasmhash.mac"
     1                              <4> 
     2                              <4> %if 0
     3                              <4> 
     4                              <4> Hashing macros
     5                              <4>  by E. C. Masloch, 2019
     6                              <4> 
     7                              <4> Usage of the works is permitted provided that this
     8                              <4> instrument is retained with the works, so that any entity
     9                              <4> that uses the works is notified of this instrument.
    10                              <4> 
    11                              <4> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
    12                              <4> 
    13                              <4> %endif
    14                              <4> 
    15                              <4> %ifndef __NASMHASH_MAC__
    16                              <4> %assign __NASMHASH_MAC__ 1
    17                              <4> 
    18                              <4> 
    19                              <4> 	%macro hashdef 2+.nolist
    20                              <4> %ifempty %2
    21                              <4>  %assign _%1 1
    22                              <4> %else
    23                              <4> %ifstr %2
    24                              <4>  %define %%string %2
    25                              <4> %elifid %2
    26                              <4>  %defstr %%string %2
    27                              <4> %elifnum %2
    28                              <4>  %defstr %%string %2
    29                              <4> %eliftok %2
    30                              <4>  %defstr %%string %2
    31                              <4> %else
    32                              <4>  %error Unknown input
    33                              <4> %endif
    34                              <4> %strlen %%length %%string
    35                              <4> %assign %%hash 1
    36                              <4> %assign %%index 1
    37                              <4> %rep %%length
    38                              <4>  %substr %%char %%string %%index
    39                              <4>  %assign %%hash (%%hash * 31 + %%char) & 0FFFFh
    40                              <4>  %assign %%index %%index + 1
    41                              <4> %endrep
    42                              <4> %assign _%1 %%hash
    43                              <4> %endif
    44                              <4> 	%endmacro
    45                              <4> 
    46                              <4> 
    47                              <4> %endif
    20                              <3> %include "eldcheck.mac"
     1                              <4> %if 0
     2                              <4> 
     3                              <4> Extensions for lDebug relocation check macros
     4                              <4> 
     5                              <4> Copyright (C) 2008-2023 E. C. Masloch
     6                              <4> 
     7                              <4> Usage of the works is permitted provided that this
     8                              <4> instrument is retained with the works, so that any entity
     9                              <4> that uses the works is notified of this instrument.
    10                              <4> 
    11                              <4> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
    12                              <4> 
    13                              <4> %endif
    14                              <4> 
    15                              <4> %ifndef ELDCHECK_MAC
    16                              <4> %define ELDCHECK_MAC 1
    17                              <4> 
    18                              <4> %assign ELDSTRICT 0
    19                              <4> %assign ELDSTRICTCOUNTER 0
    20                              <4> 
    21                              <4> 	%imacro eldstrict 1.nolist
    22                              <4> %ifidni %1, on
    23                              <4>  %assign ELDSTRICT 1
    24                              <4>  [warning +error=reloc-abs]
    25                              <4>  [warning +reloc-abs]
    26                              <4> %elifidni %1, off
    27                              <4>  %assign ELDSTRICT 0
    28                              <4>  [warning -reloc-abs]
    29                              <4> %else
    30                              <4>  %error Unknown keyword
    31                              <4> %endif
    32                              <4> 	%endmacro
    33                              <4> 
    34                              <4> 	%imacro reloc 1+.nolist
    35                              <4> %if ELDSTRICT
    36                              <4>  %if ELDSTRICTCOUNTER
    37                              <4>   %error Missing relocation
    38                              <4>  %endif
    39                              <4>  [warning -reloc-abs]
    40                              <4>  %assign ELDSTRICTCOUNTER 1
    41                              <4> %endif
    42                              <4> %1
    43                              <4> 	%endmacro
    44                              <4> 
    45                              <4> 	%imacro reloc2 1+.nolist
    46                              <4> %if ELDSTRICT
    47                              <4>  %if ELDSTRICTCOUNTER
    48                              <4>   %error Missing relocation
    49                              <4>  %endif
    50                              <4>  [warning -reloc-abs]
    51                              <4>  %assign ELDSTRICTCOUNTER 2
    52                              <4> %endif
    53                              <4> %1
    54                              <4> 	%endmacro
    55                              <4> 
    56                              <4> 	%imacro eldstrictcheck 0.nolist
    57                              <4> %if ELDSTRICT
    58                              <4>  %ifn ELDSTRICTCOUNTER
    59                              <4>   %error Unexpected relocation
    60                              <4>  %else
    61                              <4>   %assign ELDSTRICTCOUNTER ELDSTRICTCOUNTER - 1
    62                              <4>   %ifn ELDSTRICTCOUNTER
    63                              <4>    [warning +reloc-abs]
    64                              <4>   %endif
    65                              <4>  %endif
    66                              <4> %endif
    67                              <4> 	%endmacro
    68                              <4> 
    69                              <4> %endif
    70                              <4> 
    21                              <3> 
    22                              <3> 
    23                              <3> %assign ELDLINKER 0
    24                              <3> 
    25                              <3> %define INTERNAL_CODE_TO_CODE_RELOCATIONS ""
    26                              <3> %define INTERNAL_CODE_TO_DATA_RELOCATIONS ""
    27                              <3> %define INTERNAL_DATA_TO_CODE_RELOCATIONS ""
    28                              <3> %define INTERNAL_DATA_TO_DATA_RELOCATIONS ""
    29                              <3> %define INTERNAL_LINKER_CODE_TO_CODE_RELOCATIONS ""
    30                              <3> %define INTERNAL_LINKER_CODE_TO_DATA_RELOCATIONS ""
    31                              <3> %define INTERNAL_LINKER_DATA_TO_CODE_RELOCATIONS ""
    32                              <3> %define INTERNAL_LINKER_DATA_TO_DATA_RELOCATIONS ""
    33                              <3> %assign ELDDATA_OPTIONAL_STATUS 0		; not any seen yet
    34                              <3> %assign ELDDATA_PMREQUIRED_STATUS 0		; not any seen yet
    35                              <3> %assign ELDDATA_NEXT_STATUS 0			; not any seen yet
    36                              <3> %assign ELDDATA_NEXT_ENTRY -1
    37                              <3> %assign ELDDATA_NEXT_SECTION -1
    38                              <3> %assign ELDDATA_NEXT_OTHER -1
    39                              <3> 
    40                              <3> 	%imacro internalcoderelocation 0-1.nolist -2
    41                              <3> %assign %%entry $ + _CURRENT_SECTION %+ FIXUP + %1
    42                              <3> %if ELDLINKER
    43                              <3>  %ifidni _CURRENT_SECTION_TYPE, DATA
    44                              <3>   %xdefine INTERNAL_LINKER_DATA_TO_CODE_RELOCATIONS INTERNAL_LINKER_DATA_TO_CODE_RELOCATIONS, %%entry
    45                              <3>  %else
    46                              <3>   %xdefine INTERNAL_LINKER_CODE_TO_CODE_RELOCATIONS INTERNAL_LINKER_CODE_TO_CODE_RELOCATIONS, %%entry
    47                              <3>  %endif
    48                              <3> %else
    49                              <3>  %ifidni _CURRENT_SECTION_TYPE, DATA
    50                              <3>   %xdefine INTERNAL_DATA_TO_CODE_RELOCATIONS INTERNAL_DATA_TO_CODE_RELOCATIONS, %%entry
    51                              <3>  %else
    52                              <3>   %xdefine INTERNAL_CODE_TO_CODE_RELOCATIONS INTERNAL_CODE_TO_CODE_RELOCATIONS, %%entry
    53                              <3>  %endif
    54                              <3> %endif
    55                              <3> 	eldstrictcheck
    56                              <3> 	%endmacro
    57                              <3> 
    58                              <3> 	%imacro internaldatarelocation 0-1.nolist -2
    59                              <3> %assign %%entry $ + _CURRENT_SECTION %+ FIXUP + %1
    60                              <3> %if ELDLINKER
    61                              <3>  %ifidni _CURRENT_SECTION_TYPE, DATA
    62                              <3>   %xdefine INTERNAL_LINKER_DATA_TO_DATA_RELOCATIONS INTERNAL_LINKER_DATA_TO_DATA_RELOCATIONS, %%entry
    63                              <3>  %else
    64                              <3>   %xdefine INTERNAL_LINKER_CODE_TO_DATA_RELOCATIONS INTERNAL_LINKER_CODE_TO_DATA_RELOCATIONS, %%entry
    65                              <3>  %endif
    66                              <3> %else
    67                              <3>  %ifidni _CURRENT_SECTION_TYPE, DATA
    68                              <3>   %xdefine INTERNAL_DATA_TO_DATA_RELOCATIONS INTERNAL_DATA_TO_DATA_RELOCATIONS, %%entry
    69                              <3>  %else
    70                              <3>   %xdefine INTERNAL_CODE_TO_DATA_RELOCATIONS INTERNAL_CODE_TO_DATA_RELOCATIONS, %%entry
    71                              <3>  %endif
    72                              <3> %endif
    73                              <3> 	eldstrictcheck
    74                              <3> 	%endmacro
    75                              <3> 
    76                              <3> ; dw INTERNAL_LINKER_CODE_TO_CODE_RELOCATIONS, 0
    77                              <3> ; dw INTERNAL_LINKER_CODE_TO_DATA_RELOCATIONS, 0
    78                              <3> ; dw INTERNAL_LINKER_DATA_TO_CODE_RELOCATIONS, -1
    79                              <3> ; dw INTERNAL_LINKER_DATA_TO_DATA_RELOCATIONS, -1
    80                              <3> ; dw INTERNAL_CODE_TO_CODE_RELOCATIONS, 0
    81                              <3> ; dw INTERNAL_CODE_TO_DATA_RELOCATIONS, 0
    82                              <3> ; dw INTERNAL_DATA_TO_CODE_RELOCATIONS, -1
    83                              <3> ; dw INTERNAL_DATA_TO_DATA_RELOCATIONS, -1
    84                              <3> 
    85                              <3> 
    86                              <3> %define LINK_DATA_RELOCATIONS ""
    87                              <3> %define LINK_LINKER_DATA_RELOCATIONS ""
    88                              <3> %define LINK_DATA_NAMES db ""
    89                              <3> %define LINK_DATA_DETECTION none, none
    90                              <3> 
    91                              <3> %define LINK_OTHER_DATA_RELOCATIONS ""
    92                              <3> %define LINK_OTHER_LINKER_DATA_RELOCATIONS ""
    93                              <3> %define LINK_OTHER_DATA_NAMES db ""
    94                              <3> %define LINK_OTHER_DATA_DETECTION none, none
    95                              <3> 
    96                              <3> %ifndef ELDOTHER
    97                              <3>  %assign ELDOTHER 0
    98                              <3> %endif
    99                              <3> %assign ELDOTHERLINK 0
   100                              <3> 
   101                              <3> 	%imacro otherlinkdatarelocation 1-3.nolist -2, required
   102                              <3> %if ELDOTHER
   103                              <3>  %assign ELDOTHERLINK 1
   104                              <3> %endif
   105                              <3> 	linkdatarelocation %1, %2, %3
   106                              <3> %assign ELDOTHERLINK 0
   107                              <3> 	%endmacro
   108                              <3> 
   109                              <3> 	%imacro linkdatarelocation 1-4.nolist -2, required, single
   110                              <3> %assign %%entry $ + _CURRENT_SECTION %+ FIXUP + %2
   111                              <3> %ifidni %3, required
   112                              <3>  %assign %%optional 0
   113                              <3> %elifidni %3, optional
   114                              <3>  %assign %%optional 100h
   115                              <3>  %if ELDDATA_OPTIONAL_STATUS == 0
   116                              <3>   %assign ELDDATA_OPTIONAL_STATUS 1
   117                              <3>  %elif ELDDATA_OPTIONAL_STATUS == 1
   118                              <3>  %else
   119                              <3>   %error Optional data link not allowed here
   120                              <3>  %endif
   121                              <3> %elifidni %3, PM required
   122                              <3>  %assign %%optional 300h
   123                              <3>  %assign ELDDATA_PMREQUIRED_STATUS 1
   124                              <3>  %if ELDDATA_OPTIONAL_STATUS == 0
   125                              <3>   %assign ELDDATA_OPTIONAL_STATUS 1
   126                              <3>  %elif ELDDATA_OPTIONAL_STATUS == 1
   127                              <3>  %else
   128                              <3>   %error Optional data link not allowed here
   129                              <3>  %endif
   130                              <3> %else
   131                              <3>  %fatal Unknown optional keyword
   132                              <3> %endif
   133                              <3> %ifidni _CURRENT_SECTION_TYPE, DATA
   134                              <3>  %assign %%DATASECTION 1
   135                              <3> %else
   136                              <3>  %assign %%DATASECTION 0
   137                              <3> %endif
   138                              <3> %ifidni %4, single
   139                              <3>  %if ELDDATA_NEXT_STATUS == 1		; after next ?
   140                              <3>   %error Unexpected single data link after next data link
   141                              <3>  %elif ELDDATA_NEXT_STATUS == 2		; after last ?
   142                              <3>   %assign ELDDATA_NEXT_STATUS 3		; note single with next/last present
   143                              <3>  %endif
   144                              <3>  %assign %%next 0
   145                              <3> %elifidni %4, next
   146                              <3>  %if ELDDATA_NEXT_STATUS == 0		; no next/last yet ?
   147                              <3>   %assign ELDDATA_NEXT_STATUS 1		; in next
   148                              <3>  %elif ELDDATA_NEXT_STATUS == 2		; after last ?
   149                              <3>   %assign ELDDATA_NEXT_STATUS 1		; in next
   150                              <3>  %elif ELDDATA_NEXT_STATUS == 3		; after single ?
   151                              <3>   %assign ELDDATA_NEXT_STATUS 1		; in next
   152                              <3>  %elif ELDDATA_NEXT_STATUS == 1		; repeated next ?
   153                              <3>   %if ELDDATA_NEXT_ENTRY != %%entry 	|| ELDDATA_NEXT_SECTION != %%DATASECTION 	|| ELDDATA_NEXT_OTHER != ELDOTHERLINK
   156                              <3>    %error Unexpected next data link
   157                              <3>   %endif
   158                              <3>  %else
   159                              <3>   %error Next data link not allowed here
   160                              <3>  %endif
   161                              <3>  %ifn %%optional
   162                              <3>   %error Next data link only valid as optional or PM required
   163                              <3>  %endif
   164                              <3>  %assign %%next 400h
   165                              <3>  %assign ELDDATA_NEXT_ENTRY %%entry
   166                              <3>  %assign ELDDATA_NEXT_SECTION %%DATASECTION
   167                              <3>  %assign ELDDATA_NEXT_OTHER ELDOTHERLINK
   168                              <3> %elifidni %4, last
   169                              <3>  %if ELDDATA_NEXT_STATUS == 0		; no next/last yet ?
   170                              <3>   %error Next last data link not allowed here
   171                              <3>  %elif ELDDATA_NEXT_STATUS == 2		; after last ?
   172                              <3>   %error Next last data link not allowed here
   173                              <3>  %elif ELDDATA_NEXT_STATUS == 3		; after single ?
   174                              <3>   %error Next last data link not allowed here
   175                              <3>  %elif ELDDATA_NEXT_STATUS == 1		; after next ?
   176                              <3>   %if ELDDATA_NEXT_ENTRY != %%entry 	|| ELDDATA_NEXT_SECTION != %%DATASECTION 	|| ELDDATA_NEXT_OTHER != ELDOTHERLINK
   179                              <3>    %error Unexpected next data link
   180                              <3>   %endif
   181                              <3>   %assign ELDDATA_NEXT_STATUS 2		; note now after last
   182                              <3>  %else
   183                              <3>   %error Next data link not allowed here
   184                              <3>  %endif
   185                              <3>  %assign %%next 800h
   186                              <3>  %assign ELDDATA_NEXT_ENTRY -1
   187                              <3>  %assign ELDDATA_NEXT_SECTION -1
   188                              <3> %else
   189                              <3>  %fatal Unknown next keyword
   190                              <3> %endif
   191                              <3> 	%if ELDOTHERLINK
   192                              <3> %if ELDLINKER
   193                              <3>  %xdefine LINK_OTHER_LINKER_DATA_RELOCATIONS LINK_OTHER_LINKER_DATA_RELOCATIONS, 1 + %%DATASECTION + %%optional + %%next, %%entry, %%name
   194                              <3> %else
   195                              <3>  %xdefine LINK_OTHER_DATA_RELOCATIONS LINK_OTHER_DATA_RELOCATIONS, 1 + %%DATASECTION + %%optional + %%next, %%entry, %%name
   196                              <3> %endif
   197                              <3> 	%else
   198                              <3> %if ELDLINKER
   199                              <3>  %xdefine LINK_LINKER_DATA_RELOCATIONS LINK_LINKER_DATA_RELOCATIONS, 1 + %%DATASECTION + %%optional + %%next, %%entry, %%name
   200                              <3> %else
   201                              <3>  %xdefine LINK_DATA_RELOCATIONS LINK_DATA_RELOCATIONS, 1 + %%DATASECTION + %%optional + %%next, %%entry, %%name
   202                              <3> %endif
   203                              <3> 	%endif
   204                              <3> %defstr %%string %1
   205                              <3> %strlen %%length %%string
   206                              <3> %if %%length > 64
   207                              <3> 	; Could be increased, but mustn't exceed 127 bytes
   208                              <3> 	;  because flag 80h is used to mark optional links
   209                              <3> 	;  that failed to be matched.
   210                              <3>  %error Too long link name: %1
   211                              <3> %endif
   212                              <3> %define LINK_DATA_CHECK %1
   213                              <3> 	%if ELDOTHERLINK
   214                              <3> 	linkdata_detect LINK_OTHER_DATA_DETECTION
   215                              <3> %if LINK_DATA_NEW
   216                              <3>  %xdefine LINK_OTHER_DATA_DETECTION LINK_OTHER_DATA_DETECTION, %1, %%name
   217                              <3> 	hashdef HASH, %%string
   218                              <3>  %xdefine LINK_OTHER_DATA_NAMES 	LINK_OTHER_DATA_NAMES, %%name:, dw _HASH, {counted %%string}
   220                              <3> %else
   221                              <3>  %%name equ LINK_DATA_DUPLICATE
   222                              <3> %endif
   223                              <3> 	%else
   224                              <3> 	linkdata_detect LINK_DATA_DETECTION
   225                              <3> %if LINK_DATA_NEW
   226                              <3>  %xdefine LINK_DATA_DETECTION LINK_DATA_DETECTION, %1, %%name
   227                              <3> 	hashdef HASH, %%string
   228                              <3>  %xdefine LINK_DATA_NAMES 	LINK_DATA_NAMES, %%name:, dw _HASH, {counted %%string}
   230                              <3> %else
   231                              <3>  %%name equ LINK_DATA_DUPLICATE
   232                              <3> %endif
   233                              <3> 	%endif
   234                              <3> 	eldstrictcheck
   235                              <3> 	%endmacro
   236                              <3> 
   237                              <3> 	%imacro linkdata_detect 2-*.nolist
   238                              <3> %assign LINK_DATA_NEW 1
   239                              <3> %rep (%0 - 2) / 2
   240                              <3>  %rotate 2
   241                              <3>  %ifidni %1, LINK_DATA_CHECK
   242                              <3>   %assign LINK_DATA_NEW 0
   243                              <3>   %xdefine LINK_DATA_DUPLICATE %2
   244                              <3>   %exitrep
   245                              <3>  %endif
   246                              <3> %endrep
   247                              <3> 	%endmacro
   248                              <3> 
   249                              <3> 	%imacro link_data_dump_names 1-*.nolist
   250                              <3> %rep %0
   251                              <3> 	%1
   252                              <3>  %rotate 1
   253                              <3> %endrep
   254                              <3> 	%endmacro
   255                              <3> 
   256                              <3> ; dw LINK_LINKER_DATA_RELOCATIONS, 0, 0
   257                              <3> ; dw LINK_DATA_RELOCATIONS, 0, 0
   258                              <3> ; link_data_dump_names ELDCALL_CODE_NAMES
   259                              <3> 
   260                              <3> %endif
    21                              <2> 
    22                              <2> %assign ELDLINKER 0
    23                              <2> 
    24                              <2> [section relocatedzero nobits vstart=0]
    25                              <2> relocatedzero:
    26                              <2> __SECT__
    27                              <2> 
    28                              <2> 	numdef HOUDINI, 1
    29                              <2> 	numdef HOUDINI_CONDITIONAL, 1
    30                              <2> 
    31                              <2> %imacro houdini 0.nolist
    32                              <2> %if _HOUDINI
    33                              <2>  %if _HOUDINI_CONDITIONAL
    34                              <2> reloc	testopt [ss:relocateddata], 100h
    35                              <2> linkdatarelocation options7, -3
    36                              <2> 	jz %%skip
    37                              <2>  %endif
    38                              <2> reloc	testopt [ss:relocateddata], 100h
    39                              <2> linkdatarelocation internalflags6, -3
    40                              <2> 	jz %%skip
    41                              <2> 	int3
    42                              <2> %%skip:
    43                              <2> %endif
    44                              <2> %endmacro
    45                              <2> 
    46                              <2> %define ELDCALL_CODE_RELOCATIONS ""
    47                              <2> %define ELDCALL_LINKER_CODE_RELOCATIONS ""
    48                              <2> %define ELDCALL_CODE_RELOCATIONS_OPTIONAL ""
    49                              <2> %define ELDCALL_LINKER_CODE_RELOCATIONS_OPTIONAL ""
    50                              <2> %define ELDCALL_CODE_NAMES db ""
    51                              <2> %define ELDCALL_CODE_DETECTION none, none
    52                              <2> %assign ELDCALL_OPTIONAL_STATUS 0		; not any seen yet
    53                              <2> %assign ELDCALL_PMREQUIRED_STATUS 0		; not any seen yet
    54                              <2> %assign ELDCALL_NEXT_STATUS 0			; not any seen yet
    55                              <2> %assign ELDCALL_NEXT_ENTRY -1
    56                              <2> 
    57                              <2> 	%imacro extcall 1-3.nolist required, single
    58                              <2> %ifidni _CURRENT_SECTION_TYPE, DATA
    59                              <2>  %error "ELD call cannot be used in ELD data block"
    60                              <2> %endif
    61                              <2> %assign %%entry $ + _CURRENT_SECTION %+ FIXUP
    62                              <2> %ifidni %2, required
    63                              <2>  %assign %%optional 0
    64                              <2> %elifidni %2, optional
    65                              <2>  %assign %%optional 100h
    66                              <2>  %if ELDCALL_OPTIONAL_STATUS == 0
    67                              <2>   %assign ELDCALL_OPTIONAL_STATUS 1
    68                              <2>  %elif ELDCALL_OPTIONAL_STATUS == 1
    69                              <2>  %else
    70                              <2>   %error Optional code link not allowed here
    71                              <2>  %endif
    72                              <2> %elifidni %2, PM required
    73                              <2>  %assign %%optional 300h
    74                              <2>  %assign ELDCALL_PMREQUIRED_STATUS 1
    75                              <2>  %if ELDCALL_OPTIONAL_STATUS == 0
    76                              <2>   %assign ELDCALL_OPTIONAL_STATUS 1
    77                              <2>  %elif ELDCALL_OPTIONAL_STATUS == 1
    78                              <2>  %else
    79                              <2>   %error Optional code link not allowed here
    80                              <2>  %endif
    81                              <2> %else
    82                              <2>  %fatal Unknown optional keyword
    83                              <2> %endif
    84                              <2> %ifidni %3, single
    85                              <2>  %if ELDCALL_NEXT_STATUS == 1		; after next ?
    86                              <2>   %error Unexpected single code link after next code link
    87                              <2>  %elif ELDCALL_NEXT_STATUS == 2		; after last ?
    88                              <2>   %assign ELDCALL_NEXT_STATUS 3		; note single with next/last present
    89                              <2>  %endif
    90                              <2>  %assign %%next 0
    91                              <2> %elifidni %3, next
    92                              <2>  %if ELDCALL_NEXT_STATUS == 0		; no next/last yet ?
    93                              <2>   %assign ELDCALL_NEXT_STATUS 1		; in next
    94                              <2>  %elif ELDCALL_NEXT_STATUS == 2		; after last ?
    95                              <2>   %assign ELDCALL_NEXT_STATUS 1		; in next
    96                              <2>  %elif ELDCALL_NEXT_STATUS == 3		; after single ?
    97                              <2>   %assign ELDCALL_NEXT_STATUS 1		; in next
    98                              <2>  %elif ELDCALL_NEXT_STATUS == 1		; repeated next ?
    99                              <2>   %if ELDCALL_NEXT_ENTRY != %%entry
   100                              <2>    %error Unexpected next code link
   101                              <2>   %endif
   102                              <2>  %else
   103                              <2>   %error Next code link not allowed here
   104                              <2>  %endif
   105                              <2>  %ifn %%optional
   106                              <2>   %error Next code link only valid as optional or PM required
   107                              <2>  %endif
   108                              <2>  %assign %%next 400h
   109                              <2>  %assign ELDCALL_NEXT_ENTRY %%entry
   110                              <2> %elifidni %3, last
   111                              <2>  %if ELDCALL_NEXT_STATUS == 0		; no next/last yet ?
   112                              <2>   %error Next last code link not allowed here
   113                              <2>  %elif ELDCALL_NEXT_STATUS == 2		; after last ?
   114                              <2>   %error Next last code link not allowed here
   115                              <2>  %elif ELDCALL_NEXT_STATUS == 3		; after single ?
   116                              <2>   %error Next last code link not allowed here
   117                              <2>  %elif ELDCALL_NEXT_STATUS == 1		; after next ?
   118                              <2>   %if ELDCALL_NEXT_ENTRY != %%entry
   119                              <2>    %error Unexpected next code link
   120                              <2>   %endif
   121                              <2>   %assign ELDCALL_NEXT_STATUS 2		; note now after last
   122                              <2>  %else
   123                              <2>   %error Next code link not allowed here
   124                              <2>  %endif
   125                              <2>  %assign %%next 800h
   126                              <2>  %assign ELDCALL_NEXT_ENTRY -1
   127                              <2>  %assign ELDCALL_NEXT_SECTION -1
   128                              <2> %else
   129                              <2>  %fatal Unknown next keyword
   130                              <2> %endif
   131                              <2> %if %%next != 400h
   132                              <2> %if 0
   133                              <2> [warning -reloc-rel-word]
   134                              <2> 	call near relocatedzero
   135                              <2> [warning +reloc-rel-word]
   136                              <2> %else
   137                              <2> 	db 0E8h
   138                              <2> reloc	dw relocatedzero
   139                              <2> 	eldstrictcheck
   140                              <2> %endif
   141                              <2> 	jmp strict short %%skipparameter
   142                              <2> 	dw 0
   143                              <2> %%skipparameter:
   144                              <2> %endif
   145                              <2> %if ELDLINKER
   146                              <2>  %xdefine ELDCALL_LINKER_CODE_RELOCATIONS ELDCALL_LINKER_CODE_RELOCATIONS, %%entry, %%name
   147                              <2>  %xdefine ELDCALL_LINKER_CODE_RELOCATIONS_OPTIONAL ELDCALL_LINKER_CODE_RELOCATIONS_OPTIONAL, 1 + %%optional + %%next, %%entry, %%name
   148                              <2> %else
   149                              <2>  %xdefine ELDCALL_CODE_RELOCATIONS ELDCALL_CODE_RELOCATIONS, %%entry, %%name
   150                              <2>  %xdefine ELDCALL_CODE_RELOCATIONS_OPTIONAL ELDCALL_CODE_RELOCATIONS_OPTIONAL, 1 + %%optional + %%next, %%entry, %%name
   151                              <2> %endif
   152                              <2> %defstr %%string %1
   153                              <2> %strlen %%length %%string
   154                              <2> %if %%length > 64
   155                              <2> 	; Could be increased, but mustn't exceed 127 bytes
   156                              <2> 	;  because flag 80h is used to mark optional links
   157                              <2> 	;  that failed to be matched.
   158                              <2>  %error Too long link name: %1
   159                              <2> %endif
   160                              <2> %define ELDCALL_CODE_CHECK %1
   161                              <2> 	linkcode_detect ELDCALL_CODE_DETECTION
   162                              <2> %if ELDCALL_CODE_NEW
   163                              <2>  %xdefine ELDCALL_CODE_DETECTION ELDCALL_CODE_DETECTION, %1, %%name
   164                              <2> 	hashdef HASH, %%string
   165                              <2> %xdefine ELDCALL_CODE_NAMES 	ELDCALL_CODE_NAMES, %%name:, dw _HASH, {counted %%string}
   167                              <2> %else
   168                              <2>  %%name equ ELDCALL_CODE_DUPLICATE
   169                              <2> %endif
   170                              <2> 	%endmacro
   171                              <2> 
   172                              <2> 	%imacro linkcode_detect 2-*.nolist
   173                              <2> %assign ELDCALL_CODE_NEW 1
   174                              <2> %rep (%0 - 2) / 2
   175                              <2>  %rotate 2
   176                              <2>  %ifidni %1, ELDCALL_CODE_CHECK
   177                              <2>   %assign ELDCALL_CODE_NEW 0
   178                              <2>   %xdefine ELDCALL_CODE_DUPLICATE %2
   179                              <2>   %exitrep
   180                              <2>  %endif
   181                              <2> %endrep
   182                              <2> 	%endmacro
   183                              <2> 
   184                              <2> 
   185                              <2> %define ELDCALL_CALLCALL_LIST none
   186                              <2> %define ELDCALL_CALLCALL_PROCESSED_PRIOR ""
   187                              <2> 
   188                              <2> 	%imacro extcallcall 1.nolist
   189                              <2> 	call %1
   190                              <2> %xdefine ELDCALL_CALLCALL_LIST ELDCALL_CALLCALL_LIST, %1
   191                              <2> 	%endmacro
   192                              <2> 
   193                              <2> %assign ELDCALLCALL_DUMPED 0
   194                              <2> 
   195                              <2> 	%imacro eldcall_dump_callcall 1-*.nolist
   196                              <2> %xdefine ELDCALL_CALLCALL_PROCESSED ELDCALL_CALLCALL_PROCESSED_PRIOR
   197                              <2>  %rep %0 - 1
   198                              <2>   %rotate 1
   199                              <2>   %define ELDCALL_CHECK %1
   200                              <2> 	eldcall_callcall_detect ELDCALL_CALLCALL_PROCESSED
   201                              <2>   %if ELDCALL_NEW
   202                              <2>    %xdefine ELDCALL_CALLCALL_PROCESSED ELDCALL_CALLCALL_PROCESSED, %1
   203                              <2> 	align 8, nop
   204                              <2> %1:
   205                              <2> 	extcall %1
   206                              <2> 	retn
   207                              <2>   %endif
   208                              <2>  %endrep
   209                              <2> %assign ELDCALLCALL_DUMPED 1
   210                              <2> %define ELDCALL_CALLCALL_LIST none
   211                              <2> 	%endmacro
   212                              <2> 
   213                              <2> 	%imacro eldcall_new_callcall 0.nolist
   214                              <2> %if ELDCALLCALL_DUMPED
   215                              <2>  %xdefine ELDCALL_CALLCALL_PROCESSED_PRIOR   ELDCALL_CALLCALL_PROCESSED_PRIOR, ELDCALL_CALLCALL_PROCESSED
   217                              <2>  %assign ELDCALLCALL_DUMPED 0
   218                              <2>  %define ELDCALL_CALLCALL_LIST none
   219                              <2> %endif
   220                              <2> 	%endmacro
   221                              <2> 
   222                              <2> 	%imacro eldcall_callcall_detect 1-*.nolist
   223                              <2> %assign ELDCALL_NEW 1
   224                              <2> %rep %0
   225                              <2>  %ifidni %1, ELDCALL_CHECK
   226                              <2>   %assign ELDCALL_NEW 0
   227                              <2>   %exitrep
   228                              <2>  %endif
   229                              <2>  %rotate 1
   230                              <2> %endrep
   231                              <2> 	%endmacro
   232                              <2> 
   233                              <2> 	%imacro eldcall_dump_names 1-*.nolist
   234                              <2> %rep %0
   235                              <2> 	%1
   236                              <2>  %rotate 1
   237                              <2> %endrep
   238                              <2> 	%endmacro
   239                              <2> 
   240                              <2> ; eldcall_dump_callcall ELDCALL_CALLCALL_LIST
   241                              <2> ; if using optional code links:
   242                              <2> ;  dw ELDCALL_LINKER_CODE_RELOCATIONS_OPTIONAL, 0
   243                              <2> ;  dw ELDCALL_CODE_RELOCATIONS_OPTIONAL, 0
   244                              <2> ; if not using optional code links:
   245                              <2> ;  dw ELDCALL_LINKER_CODE_RELOCATIONS, 0, 0
   246                              <2> ;  dw ELDCALL_CODE_RELOCATIONS, 0, 0
   247                              <2> ; eldcall_dump_names ELDCALL_CODE_NAMES
   248                              <2> 
   249                              <2> %endif
    39                              <1> %include "elddata.mac"
     1                              <2> %if 0
     2                              <2> 
     3                              <2> Extensions for lDebug data relocation macros
     4                              <2> 
     5                              <2> Copyright (C) 2008-2024 E. C. Masloch
     6                              <2> 
     7                              <2> Usage of the works is permitted provided that this
     8                              <2> instrument is retained with the works, so that any entity
     9                              <2> that uses the works is notified of this instrument.
    10                              <2> 
    11                              <2> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
    12                              <2> 
    13                              <2> %endif
    14                              <2> 
    15                              <2> %ifndef ELDDATA_MAC
    16                              <2> %define ELDDATA_MAC 1
    17                              <2> 
    18                              <2> %include "lmacros3.mac"
    19                              <2> %include "nasmhash.mac"
    20                              <2> %include "eldcheck.mac"
    21                              <2> 
    22                              <2> 
    23                              <2> %assign ELDLINKER 0
    24                              <2> 
    25                              <2> %define INTERNAL_CODE_TO_CODE_RELOCATIONS ""
    26                              <2> %define INTERNAL_CODE_TO_DATA_RELOCATIONS ""
    27                              <2> %define INTERNAL_DATA_TO_CODE_RELOCATIONS ""
    28                              <2> %define INTERNAL_DATA_TO_DATA_RELOCATIONS ""
    29                              <2> %define INTERNAL_LINKER_CODE_TO_CODE_RELOCATIONS ""
    30                              <2> %define INTERNAL_LINKER_CODE_TO_DATA_RELOCATIONS ""
    31                              <2> %define INTERNAL_LINKER_DATA_TO_CODE_RELOCATIONS ""
    32                              <2> %define INTERNAL_LINKER_DATA_TO_DATA_RELOCATIONS ""
    33                              <2> %assign ELDDATA_OPTIONAL_STATUS 0		; not any seen yet
    34                              <2> %assign ELDDATA_PMREQUIRED_STATUS 0		; not any seen yet
    35                              <2> %assign ELDDATA_NEXT_STATUS 0			; not any seen yet
    36                              <2> %assign ELDDATA_NEXT_ENTRY -1
    37                              <2> %assign ELDDATA_NEXT_SECTION -1
    38                              <2> %assign ELDDATA_NEXT_OTHER -1
    39                              <2> 
    40                              <2> 	%imacro internalcoderelocation 0-1.nolist -2
    41                              <2> %assign %%entry $ + _CURRENT_SECTION %+ FIXUP + %1
    42                              <2> %if ELDLINKER
    43                              <2>  %ifidni _CURRENT_SECTION_TYPE, DATA
    44                              <2>   %xdefine INTERNAL_LINKER_DATA_TO_CODE_RELOCATIONS INTERNAL_LINKER_DATA_TO_CODE_RELOCATIONS, %%entry
    45                              <2>  %else
    46                              <2>   %xdefine INTERNAL_LINKER_CODE_TO_CODE_RELOCATIONS INTERNAL_LINKER_CODE_TO_CODE_RELOCATIONS, %%entry
    47                              <2>  %endif
    48                              <2> %else
    49                              <2>  %ifidni _CURRENT_SECTION_TYPE, DATA
    50                              <2>   %xdefine INTERNAL_DATA_TO_CODE_RELOCATIONS INTERNAL_DATA_TO_CODE_RELOCATIONS, %%entry
    51                              <2>  %else
    52                              <2>   %xdefine INTERNAL_CODE_TO_CODE_RELOCATIONS INTERNAL_CODE_TO_CODE_RELOCATIONS, %%entry
    53                              <2>  %endif
    54                              <2> %endif
    55                              <2> 	eldstrictcheck
    56                              <2> 	%endmacro
    57                              <2> 
    58                              <2> 	%imacro internaldatarelocation 0-1.nolist -2
    59                              <2> %assign %%entry $ + _CURRENT_SECTION %+ FIXUP + %1
    60                              <2> %if ELDLINKER
    61                              <2>  %ifidni _CURRENT_SECTION_TYPE, DATA
    62                              <2>   %xdefine INTERNAL_LINKER_DATA_TO_DATA_RELOCATIONS INTERNAL_LINKER_DATA_TO_DATA_RELOCATIONS, %%entry
    63                              <2>  %else
    64                              <2>   %xdefine INTERNAL_LINKER_CODE_TO_DATA_RELOCATIONS INTERNAL_LINKER_CODE_TO_DATA_RELOCATIONS, %%entry
    65                              <2>  %endif
    66                              <2> %else
    67                              <2>  %ifidni _CURRENT_SECTION_TYPE, DATA
    68                              <2>   %xdefine INTERNAL_DATA_TO_DATA_RELOCATIONS INTERNAL_DATA_TO_DATA_RELOCATIONS, %%entry
    69                              <2>  %else
    70                              <2>   %xdefine INTERNAL_CODE_TO_DATA_RELOCATIONS INTERNAL_CODE_TO_DATA_RELOCATIONS, %%entry
    71                              <2>  %endif
    72                              <2> %endif
    73                              <2> 	eldstrictcheck
    74                              <2> 	%endmacro
    75                              <2> 
    76                              <2> ; dw INTERNAL_LINKER_CODE_TO_CODE_RELOCATIONS, 0
    77                              <2> ; dw INTERNAL_LINKER_CODE_TO_DATA_RELOCATIONS, 0
    78                              <2> ; dw INTERNAL_LINKER_DATA_TO_CODE_RELOCATIONS, -1
    79                              <2> ; dw INTERNAL_LINKER_DATA_TO_DATA_RELOCATIONS, -1
    80                              <2> ; dw INTERNAL_CODE_TO_CODE_RELOCATIONS, 0
    81                              <2> ; dw INTERNAL_CODE_TO_DATA_RELOCATIONS, 0
    82                              <2> ; dw INTERNAL_DATA_TO_CODE_RELOCATIONS, -1
    83                              <2> ; dw INTERNAL_DATA_TO_DATA_RELOCATIONS, -1
    84                              <2> 
    85                              <2> 
    86                              <2> %define LINK_DATA_RELOCATIONS ""
    87                              <2> %define LINK_LINKER_DATA_RELOCATIONS ""
    88                              <2> %define LINK_DATA_NAMES db ""
    89                              <2> %define LINK_DATA_DETECTION none, none
    90                              <2> 
    91                              <2> %define LINK_OTHER_DATA_RELOCATIONS ""
    92                              <2> %define LINK_OTHER_LINKER_DATA_RELOCATIONS ""
    93                              <2> %define LINK_OTHER_DATA_NAMES db ""
    94                              <2> %define LINK_OTHER_DATA_DETECTION none, none
    95                              <2> 
    96                              <2> %ifndef ELDOTHER
    97                              <2>  %assign ELDOTHER 0
    98                              <2> %endif
    99                              <2> %assign ELDOTHERLINK 0
   100                              <2> 
   101                              <2> 	%imacro otherlinkdatarelocation 1-3.nolist -2, required
   102                              <2> %if ELDOTHER
   103                              <2>  %assign ELDOTHERLINK 1
   104                              <2> %endif
   105                              <2> 	linkdatarelocation %1, %2, %3
   106                              <2> %assign ELDOTHERLINK 0
   107                              <2> 	%endmacro
   108                              <2> 
   109                              <2> 	%imacro linkdatarelocation 1-4.nolist -2, required, single
   110                              <2> %assign %%entry $ + _CURRENT_SECTION %+ FIXUP + %2
   111                              <2> %ifidni %3, required
   112                              <2>  %assign %%optional 0
   113                              <2> %elifidni %3, optional
   114                              <2>  %assign %%optional 100h
   115                              <2>  %if ELDDATA_OPTIONAL_STATUS == 0
   116                              <2>   %assign ELDDATA_OPTIONAL_STATUS 1
   117                              <2>  %elif ELDDATA_OPTIONAL_STATUS == 1
   118                              <2>  %else
   119                              <2>   %error Optional data link not allowed here
   120                              <2>  %endif
   121                              <2> %elifidni %3, PM required
   122                              <2>  %assign %%optional 300h
   123                              <2>  %assign ELDDATA_PMREQUIRED_STATUS 1
   124                              <2>  %if ELDDATA_OPTIONAL_STATUS == 0
   125                              <2>   %assign ELDDATA_OPTIONAL_STATUS 1
   126                              <2>  %elif ELDDATA_OPTIONAL_STATUS == 1
   127                              <2>  %else
   128                              <2>   %error Optional data link not allowed here
   129                              <2>  %endif
   130                              <2> %else
   131                              <2>  %fatal Unknown optional keyword
   132                              <2> %endif
   133                              <2> %ifidni _CURRENT_SECTION_TYPE, DATA
   134                              <2>  %assign %%DATASECTION 1
   135                              <2> %else
   136                              <2>  %assign %%DATASECTION 0
   137                              <2> %endif
   138                              <2> %ifidni %4, single
   139                              <2>  %if ELDDATA_NEXT_STATUS == 1		; after next ?
   140                              <2>   %error Unexpected single data link after next data link
   141                              <2>  %elif ELDDATA_NEXT_STATUS == 2		; after last ?
   142                              <2>   %assign ELDDATA_NEXT_STATUS 3		; note single with next/last present
   143                              <2>  %endif
   144                              <2>  %assign %%next 0
   145                              <2> %elifidni %4, next
   146                              <2>  %if ELDDATA_NEXT_STATUS == 0		; no next/last yet ?
   147                              <2>   %assign ELDDATA_NEXT_STATUS 1		; in next
   148                              <2>  %elif ELDDATA_NEXT_STATUS == 2		; after last ?
   149                              <2>   %assign ELDDATA_NEXT_STATUS 1		; in next
   150                              <2>  %elif ELDDATA_NEXT_STATUS == 3		; after single ?
   151                              <2>   %assign ELDDATA_NEXT_STATUS 1		; in next
   152                              <2>  %elif ELDDATA_NEXT_STATUS == 1		; repeated next ?
   153                              <2>   %if ELDDATA_NEXT_ENTRY != %%entry 	|| ELDDATA_NEXT_SECTION != %%DATASECTION 	|| ELDDATA_NEXT_OTHER != ELDOTHERLINK
   156                              <2>    %error Unexpected next data link
   157                              <2>   %endif
   158                              <2>  %else
   159                              <2>   %error Next data link not allowed here
   160                              <2>  %endif
   161                              <2>  %ifn %%optional
   162                              <2>   %error Next data link only valid as optional or PM required
   163                              <2>  %endif
   164                              <2>  %assign %%next 400h
   165                              <2>  %assign ELDDATA_NEXT_ENTRY %%entry
   166                              <2>  %assign ELDDATA_NEXT_SECTION %%DATASECTION
   167                              <2>  %assign ELDDATA_NEXT_OTHER ELDOTHERLINK
   168                              <2> %elifidni %4, last
   169                              <2>  %if ELDDATA_NEXT_STATUS == 0		; no next/last yet ?
   170                              <2>   %error Next last data link not allowed here
   171                              <2>  %elif ELDDATA_NEXT_STATUS == 2		; after last ?
   172                              <2>   %error Next last data link not allowed here
   173                              <2>  %elif ELDDATA_NEXT_STATUS == 3		; after single ?
   174                              <2>   %error Next last data link not allowed here
   175                              <2>  %elif ELDDATA_NEXT_STATUS == 1		; after next ?
   176                              <2>   %if ELDDATA_NEXT_ENTRY != %%entry 	|| ELDDATA_NEXT_SECTION != %%DATASECTION 	|| ELDDATA_NEXT_OTHER != ELDOTHERLINK
   179                              <2>    %error Unexpected next data link
   180                              <2>   %endif
   181                              <2>   %assign ELDDATA_NEXT_STATUS 2		; note now after last
   182                              <2>  %else
   183                              <2>   %error Next data link not allowed here
   184                              <2>  %endif
   185                              <2>  %assign %%next 800h
   186                              <2>  %assign ELDDATA_NEXT_ENTRY -1
   187                              <2>  %assign ELDDATA_NEXT_SECTION -1
   188                              <2> %else
   189                              <2>  %fatal Unknown next keyword
   190                              <2> %endif
   191                              <2> 	%if ELDOTHERLINK
   192                              <2> %if ELDLINKER
   193                              <2>  %xdefine LINK_OTHER_LINKER_DATA_RELOCATIONS LINK_OTHER_LINKER_DATA_RELOCATIONS, 1 + %%DATASECTION + %%optional + %%next, %%entry, %%name
   194                              <2> %else
   195                              <2>  %xdefine LINK_OTHER_DATA_RELOCATIONS LINK_OTHER_DATA_RELOCATIONS, 1 + %%DATASECTION + %%optional + %%next, %%entry, %%name
   196                              <2> %endif
   197                              <2> 	%else
   198                              <2> %if ELDLINKER
   199                              <2>  %xdefine LINK_LINKER_DATA_RELOCATIONS LINK_LINKER_DATA_RELOCATIONS, 1 + %%DATASECTION + %%optional + %%next, %%entry, %%name
   200                              <2> %else
   201                              <2>  %xdefine LINK_DATA_RELOCATIONS LINK_DATA_RELOCATIONS, 1 + %%DATASECTION + %%optional + %%next, %%entry, %%name
   202                              <2> %endif
   203                              <2> 	%endif
   204                              <2> %defstr %%string %1
   205                              <2> %strlen %%length %%string
   206                              <2> %if %%length > 64
   207                              <2> 	; Could be increased, but mustn't exceed 127 bytes
   208                              <2> 	;  because flag 80h is used to mark optional links
   209                              <2> 	;  that failed to be matched.
   210                              <2>  %error Too long link name: %1
   211                              <2> %endif
   212                              <2> %define LINK_DATA_CHECK %1
   213                              <2> 	%if ELDOTHERLINK
   214                              <2> 	linkdata_detect LINK_OTHER_DATA_DETECTION
   215                              <2> %if LINK_DATA_NEW
   216                              <2>  %xdefine LINK_OTHER_DATA_DETECTION LINK_OTHER_DATA_DETECTION, %1, %%name
   217                              <2> 	hashdef HASH, %%string
   218                              <2>  %xdefine LINK_OTHER_DATA_NAMES 	LINK_OTHER_DATA_NAMES, %%name:, dw _HASH, {counted %%string}
   220                              <2> %else
   221                              <2>  %%name equ LINK_DATA_DUPLICATE
   222                              <2> %endif
   223                              <2> 	%else
   224                              <2> 	linkdata_detect LINK_DATA_DETECTION
   225                              <2> %if LINK_DATA_NEW
   226                              <2>  %xdefine LINK_DATA_DETECTION LINK_DATA_DETECTION, %1, %%name
   227                              <2> 	hashdef HASH, %%string
   228                              <2>  %xdefine LINK_DATA_NAMES 	LINK_DATA_NAMES, %%name:, dw _HASH, {counted %%string}
   230                              <2> %else
   231                              <2>  %%name equ LINK_DATA_DUPLICATE
   232                              <2> %endif
   233                              <2> 	%endif
   234                              <2> 	eldstrictcheck
   235                              <2> 	%endmacro
   236                              <2> 
   237                              <2> 	%imacro linkdata_detect 2-*.nolist
   238                              <2> %assign LINK_DATA_NEW 1
   239                              <2> %rep (%0 - 2) / 2
   240                              <2>  %rotate 2
   241                              <2>  %ifidni %1, LINK_DATA_CHECK
   242                              <2>   %assign LINK_DATA_NEW 0
   243                              <2>   %xdefine LINK_DATA_DUPLICATE %2
   244                              <2>   %exitrep
   245                              <2>  %endif
   246                              <2> %endrep
   247                              <2> 	%endmacro
   248                              <2> 
   249                              <2> 	%imacro link_data_dump_names 1-*.nolist
   250                              <2> %rep %0
   251                              <2> 	%1
   252                              <2>  %rotate 1
   253                              <2> %endrep
   254                              <2> 	%endmacro
   255                              <2> 
   256                              <2> ; dw LINK_LINKER_DATA_RELOCATIONS, 0, 0
   257                              <2> ; dw LINK_DATA_RELOCATIONS, 0, 0
   258                              <2> ; link_data_dump_names ELDCALL_CODE_NAMES
   259                              <2> 
   260                              <2> %endif
    40                              <1> %include "isvariab.mac"
     1                              <2> 
     2                              <2> %if 0
     3                              <2> 
     4                              <2> lDebug isvariable? function strutures and macros
     5                              <2> 
     6                              <2> Copyright (C) 2008-2025 E. C. Masloch
     7                              <2> 
     8                              <2> Usage of the works is permitted provided that this
     9                              <2> instrument is retained with the works, so that any entity
    10                              <2> that uses the works is notified of this instrument.
    11                              <2> 
    12                              <2> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
    13                              <2> 
    14                              <2> %endif
    15                              <2> 
    16                              <2> 
    17                              <2> 	struc ISVARIABLESTRUC
    18 00000000 ????                <2> ivName:		resw 1		; -> name (up to 13 bytes, but actually only 11)
    19                              <2> 				;  (search for ivfNameLengthLimit for limit)
    20                              <2> 				;  (length given by ivFlags & ivfNameLengthMask)
    21                              <2> 	; The ivName pointer is only used for more-byte names. It actually
    22                              <2> 	;  contains the trailer of the name, excluding the prefix formed by
    23                              <2> 	;  the first two bytes. This suffix can be the empty string if the
    24                              <2> 	;  variable in question has a two-byte name.
    25                              <2> 	; (For one-byte names this field is unused and contains zero.)
    26 00000002 ????                <2> ivFlags:	resw 1
    27 00000004 ????                <2> ivAddress:	resw 1		; default -> variable
    28                              <2> 	; The ivAddress field is used by default_variable_setup as the base
    29                              <2> 	;  address for the variable(s). It is also used by var_ext_setup as
    30                              <2> 	;  the ELD code section offset to transfer control to. Otherwise, it
    31                              <2> 	;  is usually set to zero and unused.
    32 00000006 ????                <2> ivSetup:	resw 1		; -> set up code (in expr code section)
    33                              <2> 	; INP:	ax = array index (0-based)
    34                              <2> 	;	di = 0
    35                              <2> 	;	cl = default size of variable (1..4)
    36                              <2> 	;	ch = length of variable name
    37                              <2> 	;	bx -> ISVARIABLESTRUC structure
    38                              <2> 	; CHG:	ax, bx, cx, dx, si, di
    39                              <2> 	; OUT:	NC if valid,
    40                              <2> 	;	 bx -> var, di = 0 or di -> mask
    41                              <2> 	;	 cl = size of variable (1..4)
    42                              <2> 	;	 ch = length of variable name
    43 00000008 ??                  <2> ivArrayLast:	resb 1		; 0 if no array, FFh = 256 entries
    44                              <2> 	; The ivArrayLast field is used by the dispatcher to determine
    45                              <2> 	;  whether to support array index expressions. It is checked
    46                              <2> 	;  before decrementing the index if ivfArrayOneBased is set.
    47 00000009 ??                  <2> ivArrayBetween: resb 1		; how many bytes to skip for each index
    48                              <2> 	; The ivArrayBetween field is only used by default_variable_setup.
    49                              <2> 	endstruc
    50                              <2> 
    51                              <2> ivfNameLengthMask:	equ 15	; gives name trailer length, 0 to 11
    52                              <2> ivfNameLengthLimit:	equ 13
    53                              <2> ivfVarLengthShift:	equ 4
    54                              <2> ivfVarLengthMask:	equ 3 << ivfVarLengthShift
    55                              <2> 				; gives default variable size minus 1
    56                              <2> ivfReadOnly:		equ 80h	; variable cannot be written at all
    57                              <2> ivfArrayOneBased:	equ 100h; first array entry is 1 not 0 (ivArrayLast > 0)
    58                              <2> ivfArrayOptional:	equ 200h; array index expression is optional
    59                              <2> ivfSeparatorSpecial:	equ 400h; used for RIxxP/L/S/O
    60                              <2> 
    61                              <2> %define ISVARIABLESTRINGS db "",db ""
    62                              <2> %define IVS_ONEBYTE_NAMES ""
    63                              <2> %define IVS_MOREBYTE_NAMEHEADERS ""
    64                              <2> %assign IVS_HAVE_ONEBYTE 0
    65                              <2> %assign IVS_SINGLE_ONEBYTE 1
    66                              <2> 
    67                              <2> 		; %1 = name string
    68                              <2> 		; %2 = default variable length, 1 to 4
    69                              <2> 		; %3 = flags to set (except name length and var length)
    70                              <2> 		; %4 = ivAddress value
    71                              <2> 		; %5 = ivArrayLast, defaults to 0 (no array)
    72                              <2> 		; %6 = ivArrayBetween, defaults to 0 (immediately consecutive)
    73                              <2> 		; %7 = ivSetup, defaults to default_variable_setup
    74                              <2> 	%macro isvariablestruc 4-7.nolist 0, 0, default_variable_setup
    75                              <2> %push
    76                              <2> %strlen %$namelength %1
    77                              <2> %if %$namelength > ivfNameLengthLimit
    78                              <2>  %error Expected at most 13-byte name (or adjust isvariable? code)
    79                              <2> %endif
    80                              <2> %if IVS_ONEBYTE && %$namelength != 1
    81                              <2>  %error Expected a one-byte name
    82                              <2> %elif ! IVS_ONEBYTE && %$namelength < 2
    83                              <2>  %error Expected at least a two-byte name
    84                              <2> %endif
    85                              <2> %if IVS_ONEBYTE
    86                              <2>  %define IVS_SINGLE_ONEBYTE_NAME %1
    87                              <2>  %if IVS_HAVE_ONEBYTE
    88                              <2>   %assign IVS_SINGLE_ONEBYTE 0
    89                              <2>  %endif
    90                              <2>  %assign IVS_HAVE_ONEBYTE 1
    91                              <2>  %assign %$namelength 0
    92                              <2>  %xdefine IVS_ONEBYTE_NAMES IVS_ONEBYTE_NAMES, %1
    93                              <2>  %%name equ 0
    94                              <2> %else
    95                              <2>  %assign %$namelength %$namelength - 2
    96                              <2>  %substr %$nametrailer %1 3,-1
    97                              <2>  %substr %$nameheader %1 1,2
    98                              <2>  %xdefine IVS_MOREBYTE_NAMEHEADERS IVS_MOREBYTE_NAMEHEADERS, %$nameheader
    99                              <2>  %xdefine ISVARIABLESTRINGS ISVARIABLESTRINGS, %%name:, {db %$nametrailer}
   100                              <2> %endif
   101                              <2> 
   102                              <2> %assign %$varlength %2 - 1	; 0 means one byte, 1 means two bytes,
   103                              <2> 				;  2 means three bytes, 3 means four bytes
   104                              <2> 	istruc ISVARIABLESTRUC
   105                              <2> at ivName,		dw %%name
   106                              <2>  IV_NAME_RELOCATION
   107                              <2> at ivFlags,		dw %$$namelength | (%$$varlength << ivfVarLengthShift) | %3
   108                              <2> at ivAddress,		dw %4
   109                              <2>  IV_ADDRESS_RELOCATION
   110                              <2> at ivSetup,		dw %7
   111                              <2>  IV_SETUP_RELOCATION
   112                              <2> at ivArrayLast,		db %5
   113                              <2> at ivArrayBetween,	db %6
   114                              <2> 	iend
   115                              <2> %pop
   116                              <2> %ifndef SECTION_OF_%7
   117                              <2>  %error Unknown target section for symbol %7
   118                              <2> %elifnidni %[SECTION_OF_%7], _EXPR_SECTION
   119                              <2>  %error Wrong section for symbol %7: section_of=SECTION_OF_%7, expr=_EXPR_SECTION
   120                              <2> %endif
   121                              <2> 	%endmacro
   122                              <2> 
   123                              <2> %define IV_NAME_RELOCATION
   124                              <2> %define IV_ADDRESS_RELOCATION
   125                              <2> %define IV_SETUP_RELOCATION
   126                              <2> 
   127                              <2> 	%macro isvariablestrings 2-*.nolist
   128                              <2> %rep %0
   129                              <2>  %1
   130                              <2>  %rotate 1
   131                              <2> %endrep
   132                              <2> 	%endmacro
    41                              <1> 
    42                              <1> 	struc HANDLERTABLE
    43 00000000 ????                <1> htMessage:		resw 1
    44 00000002 ????                <1> htHandler:		resw 1
    45 00000004 ????                <1> htTemplate:		resw 1
    46 00000006 ????                <1> htReturn:		resw 1
    47 00000008 ????                <1> htFlags:		resw 1
    48                              <1> 	endstruc
    49                              <1> 
    50                              <1> htfIsAMIS equ 1
    51                              <1> htfIsInject equ 2
    52                              <1> 
    53                              <1> 
    54                              <1> 	cpu 8086
    55                              <1> 
    56                              <1> 	addsection RELOCATEDDATA, nobits vstart=_ELD_RELOC_VSTART
    57                              <1> relocateddata:
    58                              <1> 
    59                              <1> 	addsection HEADER, start=0
    60                              <1> 
    61                              <1> 	istruc ELD_HEADERX
    62                              <1> at eldhxHeader
    63                              <1> 		; ELD executable header
    64                              <1> 	istruc ELD_HEADER
    65 00000000 454C4431            <1> at eldhSignature,	db "ELD1"
    66 00000004 000000              <1> 			db 0,0,0
    67 00000007 1A                  <1> 			db 26
    68 00000008 50000000            <1> at eldhCodeOffset,	dd CODEOFFSET
    69 0000000C A020                <1> at eldhCodeImageLength,	dw code_size
    70 0000000E 0000                <1> at eldhCodeAllocLength,	dw 0
    71 00000010 F0200000            <1> at eldhDataOffset,	dd DATAOFFSET
    72 00000014 E00C                <1> at eldhDataImageLength,	dw data_size
    73 00000016 0000                <1> at eldhDataAllocLength,	dw total_data_size - data_size
    74 00000018 3B0C                <1> at eldhCodeEntrypoint,	dw linker - code
    75                              <1> at eldhReserved
    76 0000001A 00<rep 4h>2800      <1> at eldhExtensionSize,	dw header_extension_end - $$
    77                              <1> 	iend
    78 00000020 [30000000]          <1> at eldhxDescriptionOffset,	dd description
    79 00000024 5D2A0000            <1> at eldhxHelpOffset,		dd DATAOFFSET + msg.help - datastart
    80                              <1> PUT_ELDHX_DATETIME_OFFSET
    81                              <1> header_extension_end:
    82 00000028 00<rep 8h>          <1> 	iend
    83                              <1> 
    84 00000030 44756D70206C446562- <1> description:		asciz "Dump lDebug memory use."
    84 00000039 7567206D656D6F7279- <1>
    84 00000042 207573652E00        <1>
    85                              <1> 
    86                              <1> 
    87 00000048 00<rep 8h>          <1> 	align 16, db 0
    88                              <1> 
    89                              <1> 	eldstrict on
    90                              <1> 
    91                              <1> CODEOFFSET equ $ - $$
    92                              <1> 	addsection CODE, follows=HEADER vstart=_ELD_CODE_VSTART
    93                              <1> %define CODEFIXUP - code + 0
    94                              <1> code:
    95                              <1> 		; ELD instance header
    96                              <1> 	istruc ELD_INSTANCE
    97                              <1> at eldiStartCode
    98 00000000 00<rep 2h>          <1> at eldiEndCode
    99 00000002 00<rep 2h>          <1> at eldiStartData
   100 00000004 00<rep 2h>          <1> at eldiEndData
   101 00000006 00<rep 2h>4C444D45- <1> at eldiIdentifier,	fill 8, 32, db "LDMEM",OTH_STRING
   101 0000000C 4D4F5448            <1>
   102 00000010 00<rep 2h>6C646D65- <1> at eldiListing,		asciz _ELD_LISTING
   102 00000016 6D6F74682E6C737400  <1>
   103 0000001F 00                  <1> 	iend
   104                              <1> 
   105                              <1> 
   106                              <1> 	numdef ELD_BUG, 0
   107                              <1> 	numdef ELD_BUG_RELOC, _ELD_BUG
   108                              <1> 	numdef ELD_BUG_LINK, _ELD_BUG
   109                              <1> 	numdef ELD_BUG_LENGTH, _ELD_BUG
   110                              <1> 
   111                              <1> 
   112                              <1> %rep _ELD_BUG_LINK
   113                              <1> 	eldstrict off
   114                              <1> 
   115                              <1> 	dw relocateddata		; missing linkdatarelocation
   116                              <1> %endrep
   117                              <1> 
   118                              <1> %rep _ELD_BUG_RELOC
   119                              <1> 	eldstrict off
   120                              <1> 
   121                              <1> 	dw msg.ldmem			; missing internaldatarelocation
   122                              <1> %endrep
   123                              <1> 
   124                              <1> %if _ELD_BUG_LENGTH && _ELD_CODE_VSTART
   125                              <1> times 64 db 0
   126                              <1> %endif
   127                              <1> 
   128                              <1> command:
   129 00000020 EB08                <1> 	jmp strict short .entry
   130                              <1> .chain:
   131 00000022 E8[0000]EB020000    <1> 	extcall cmd3_not_ext, required	; must NOT be extcallcall
   132 00000029 90                  <1> 	times 10 - ($ - command) nop
   133                              <1> .entry:
   134 0000002A 56                  <1> 	push si
   135 0000002B 3C2D                <1> 	cmp al, '-'
   136 0000002D 7503                <1> 	jne @F
   137 0000002F E8C60A              <1> 	extcallcall skipcomma
   138                              <1> @@:
   139 00000032 4E                  <1> 	dec si
   140                              <1> 
   141 00000033 BA[8902]            <1> reloc	mov dx, msg.ldmem
   142                              <1> internaldatarelocation
   143 00000036 E8C70A              <1> 	extcallcall isstring?
   144 00000039 7405                <1> 	je .ours
   145 0000003B 5E                  <1> 	pop si
   146 0000003C 4E                  <1> 	dec si
   147 0000003D AC                  <1> 	lodsb
   148 0000003E EBE2                <1> 	jmp .chain
   149                              <1> 
   150                              <1> .ours:
   151 00000040 58                  <1> 	pop ax
   152 00000041 E8B40A              <1> 	extcallcall skipcomma
   153 00000044 4E                  <1> 	dec si
   154 00000045 C706[0000][0000]    <1> reloc2	mov word [relocateddata], relocateddata
   155                              <1> linkdatarelocation lastcmd, -4
   156                              <1> linkdatarelocation dmycmd
   157 0000004B BA[0000]            <1> reloc	mov dx, relocateddata
   158                              <1> linkdatarelocation msg.uninstall
   159 0000004E E8AF0A              <1> 	extcallcall isstring?
   160 00000051 7419                <1> 	je uninstall
   161                              <1> 
   162                              <1> %if _OTHER
   163 00000053 A1[0200]            <1> reloc	mov ax, word [otherseg]
   164                              <1> internaldatarelocation
   165 00000056 E8AF0A              <1> 	extcallcall ispm
   166 00000059 7508                <1> 	jnz @F
   167 0000005B 92                  <1> 	xchg dx, ax
   168 0000005C E8B10A              <1> 	extcallcall setes2dx
   169 0000005F 26A1[0000]          <1> reloc	mov ax, word [es:relocateddata]
   170                              <1> otherlinkdatarelocation dssel
   171                              <1> @@:
   172 00000063 A3[0000]            <1> reloc	mov word [otherds], ax
   173                              <1> internaldatarelocation
   174                              <1> %endif
   175                              <1> 
   176 00000066 E89800              <1> 	call run
   177 00000069 E8AC0A              <1> 	extcallcall cmd3
   178                              <1> 
   179                              <1> uninstall:
   180 0000006C AC                  <1> 	lodsb
   181 0000006D E8B00A              <1> 	extcallcall chkeol
   182                              <1> 
   183 00000070 E86B00              <1> 	call get_es_ext
   184                              <1> 
   185 00000073 06                  <1> 	push es
   186 00000074 1F                  <1> 	pop ds
   187 00000075 31DB                <1> 	xor bx, bx		; = 0 (no prior, modify ext_command_handler)
   188 00000077 BF[2000]            <1> reloc	mov di, command		; di -> us
   189                              <1> internalcoderelocation
   190 0000007A 368B36[0000]        <1> reloc	mov si, word [ss:relocateddata]
   191                              <1> linkdatarelocation ext_command_handler
   192                              <1> 				; si -> first
   193 0000007F 85F6                <1> 	test si, si		; none installed ?
   194 00000081 7450                <1> 	jz .error		; error -->
   195                              <1> 
   196                              <1> .loop:
   197 00000083 39F7                <1> 	cmp di, si		; found ?
   198 00000085 740D                <1> 	je .bx			; yes, use bx -->
   199 00000087 89F3                <1> 	mov bx, si		; bx -> prior handler
   200 00000089 AD                  <1> 	lodsw			; skip entrypoint jmp strict short
   201 0000008A AC                  <1> 	lodsb			; get first byte of chainer
   202 0000008B 3CE9                <1> 	cmp al, 0E9h		; expecting jmp near ?
   203 0000008D 7544                <1> 	jne .error		; no, error -->
   204 0000008F AD                  <1> 	lodsw			; get rel16 displacement
   205 00000090 01C6                <1> 	add si, ax		; -> next handler
   206 00000092 EBEF                <1> 	jmp .loop
   207                              <1> 
   208                              <1> .bx:
   209 00000094 85DB                <1> 	test bx, bx		; any prior ?
   210 00000096 751A                <1> 	jnz .bxnz		; yes -->
   211 00000098 AF                  <1> 	scasw			; skip entrypoint jmp strict short
   212 00000099 803DE8              <1> 	cmp byte [di], 0E8h	; is it a call to cmd3_not_ext ?
   213 0000009C 7507                <1> 	jne @F			; no -->
   214                              <1> 				; yes, reset ext_command_handler to zero
   215                              <1> .setbx:
   216 0000009E 36891E[0000]        <1> reloc	mov word [ss:relocateddata], bx
   217                              <1> linkdatarelocation ext_command_handler
   218 000000A3 EB1E                <1> 	jmp .done
   219                              <1> 
   220                              <1> @@:
   221 000000A5 803DE9              <1> 	cmp byte [di], 0E9h	; validate
   222 000000A8 7529                <1> 	jne .error		; failure -->
   223 000000AA 47                  <1> 	inc di			; -> rel16 displacement
   224 000000AB 8B1D                <1> 	mov bx, word [di]	; get displacement
   225 000000AD AF                  <1> 	scasw			; -> after jmp near
   226 000000AE 01FB                <1> 	add bx, di		; -> next handler
   227 000000B0 EBEC                <1> 	jmp .setbx		; set ext_command_handler to next
   228                              <1> 
   229                              <1> .bxnz:
   230 000000B2 89DE                <1> 	mov si, bx		; -> prior handler with us as downlink
   231 000000B4 87FE                <1> 	xchg di, si		; si -> ours, di -> prior
   232 000000B6 A7                  <1> 	cmpsw			; skip entrypoint jmp strict short
   233 000000B7 A4                  <1> 	movsb			; copy 0E8h/0E9h
   234 000000B8 AD                  <1> 	lodsw			; ax = near rel16 displacement
   235 000000B9 01F0                <1> 	add ax, si		; add in our base (= absolute offset)
   236 000000BB 29F8                <1> 	sub ax, di
   237 000000BD 48                  <1> 	dec ax
   238 000000BE 48                  <1> 	dec ax			; subtract new base (= relative displacement)
   239 000000BF AB                  <1> 	stosw			; store new rel16 displacement
   240 000000C0 A5                  <1> 	movsw			; jmp strict short
   241 000000C1 A5                  <1> 	movsw			; linkcall target
   242 000000C2 A4                  <1> 	movsb			; trailer
   243                              <1> .done:
   244 000000C3 8026[1000]FE        <1> reloc	clropt [code + eldiFlags], eldifResident
   245                              <1> internalcoderelocation -3	; mark block as free
   246 000000C8 BA[9202]            <1> reloc	mov dx, msg.uninstall_done
   247                              <1> internaldatarelocation
   248                              <1> @@:
   249 000000CB 16                  <1> 	push ss
   250 000000CC 1F                  <1> 	pop ds
   251 000000CD E8580A              <1> 	extcallcall putsz
   252 000000D0 E8450A              <1> 	extcallcall cmd3	; return
   253                              <1> 
   254                              <1> .error:
   255 000000D3 B8010E              <1> 	mov ax, 0E01h
   256 000000D6 E8570A              <1> 	extcallcall setrc
   257 000000D9 BA[AA02]            <1> reloc	mov dx, msg.uninstall_error
   258                              <1> internaldatarelocation
   259 000000DC EBED                <1> 	jmp @B
   260                              <1> 
   261                              <1> 
   262                              <1> get_es_ext:
   263 000000DE 8E06[0000]          <1> reloc	mov es, word [relocateddata]
   264                              <1> linkdatarelocation extdssel
   265 000000E2 E8230A              <1> 	extcallcall ispm
   266 000000E5 7404                <1> 	jz @F
   267 000000E7 8E06[0000]          <1> reloc	mov es, word [relocateddata]
   268                              <1> linkdatarelocation extseg
   269                              <1> @@:
   270 000000EB C3                  <1> 	retn
   271                              <1> 
   272                              <1> 
   273                              <1> %if _OTHER
   274                              <1> get_es_ext_other:
   275                              <1> 	getotherds
    14 000000EC 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
   276 000000F1 8E06[0000]          <1> reloc	mov es, word [relocateddata]
   277                              <1> otherlinkdatarelocation extdssel
   278 000000F5 E8100A              <1> 	extcallcall ispm
   279 000000F8 7404                <1> 	jz @F
   280 000000FA 8E06[0000]          <1> reloc	mov es, word [relocateddata]
   281                              <1> otherlinkdatarelocation extseg
   282                              <1> @@:
   283                              <1> 	resetds
    18 000000FE 16                  <2>  push ss
    19 000000FF 1F                  <2>  pop ds
   284 00000100 C3                  <1> 	retn
   285                              <1> %else
   286                              <1>  get_es_ext_other equ get_es_ext
   287                              <1> %endif
   288                              <1> 
   289                              <1> 
   290                              <1> run:
   291 00000101 16                  <1> 	push ss
   292 00000102 07                  <1> 	pop es
   293 00000103 C706[5209][4B07]    <1> reloc2	mov word [separatormessage], msg.empty
   294                              <1> internaldatarelocation -4
   295                              <1> internaldatarelocation
   296 00000109 AC                  <1> 	lodsb
   297 0000010A E82B0A              <1> 	extcallcall iseol?
   298 0000010D 7503                <1> 	jne @F
   299 0000010F BE[4A01]            <1> reloc	mov si, msg.allexceptseg + 1
   300                              <1> internaldatarelocation
   301                              <1> @@:
   302 00000112 4E                  <1> 	dec si			; -> keyword
   303                              <1> 
   304 00000113 31C0                <1> 	xor ax, ax
   305 00000115 50                  <1> 	push ax			; on stack = 0
   306                              <1> 
   307                              <1> .loopouter:			; si -> next keyword
   308 00000116 AC                  <1> 	lodsb
   309 00000117 E81E0A              <1> 	extcallcall iseol?
   310 0000011A 7506                <1> 	jne @F
   311                              <1> .continue:
   312 0000011C 5E                  <1> 	pop si			; get next string
   313 0000011D 85F6                <1> 	test si, si		; any ?
   314 0000011F 75F5                <1> 	jnz .loopouter		; yes -->
   315 00000121 C3                  <1> 	retn			; done
   316                              <1> 
   317                              <1> @@:
   318 00000122 4E                  <1> 	dec si			; -> keyword
   319 00000123 87F1                <1> 	xchg si, cx
   320 00000125 BE[FE00]            <1> reloc	mov si, nountable
   321                              <1> internaldatarelocation
   322                              <1> .loop:
   323 00000128 AC                  <1> 	lodsb
   324 00000129 B400                <1> 	mov ah, 0
   325 0000012B 01F0                <1> 	add ax, si
   326 0000012D 39F0                <1> 	cmp ax, si
   327 0000012F 742A                <1> 	je .notfound
   328 00000131 92                  <1> 	xchg dx, ax		; -> match string
   329 00000132 87F1                <1> 	xchg si, cx		; si -> keyword
   330 00000134 E8C909              <1> 	extcallcall isstring?
   331 00000137 7406                <1> 	je .got
   332 00000139 87F1                <1> 	xchg si, cx		; si -> table
   333 0000013B AC                  <1> 	lodsb
   334 0000013C AD                  <1> 	lodsw			; skip
   335 0000013D EBE9                <1> 	jmp .loop		; try to match next noun -->
   336                              <1> 
   337                              <1> .got:
   338 0000013F E8B609              <1> 	extcallcall skipcomma
   339 00000142 4E                  <1> 	dec si			; -> next keyword
   340 00000143 56                  <1> 	push si			; stack next keyword
   341 00000144 87F1                <1> 	xchg si, cx		; si -> table
   342 00000146 AC                  <1> 	lodsb
   343 00000147 3C01                <1> 	cmp al, 1
   344 00000149 AD                  <1> 	lodsw			; ax -> next string or function
   345 0000014A 740C                <1> 	je .sublist
   346                              <1> .function:
   347 0000014C E85700              <1> 	call .separator
   348 0000014F FFD0                <1> 	call ax			; call code
   349 00000151 16                  <1> 	 push ss
   350 00000152 07                  <1> 	 pop es
   351 00000153 16                  <1> 	 push ss
   352 00000154 1F                  <1> 	 pop ds
   353 00000155 5E                  <1> 	pop si			; restore -> next keyword
   354 00000156 EBBE                <1> 	jmp .loopouter		; continue noun loop -->
   355                              <1> 
   356                              <1> .sublist:
   357 00000158 96                  <1> 	xchg si, ax		; si -> sub list
   358 00000159 EBBB                <1> 	jmp .loopouter		; handle sub list --> (stack has continue offset)
   359                              <1> 
   360                              <1> .notfound:
   361 0000015B E84800              <1> 	call .separator
   362 0000015E B8430E              <1> 	mov ax, 0E43h
   363 00000161 E8CC09              <1> 	extcallcall setrc
   364 00000164 BA[7302]            <1> reloc	mov dx, msg.notfound.1
   365                              <1> internaldatarelocation
   366 00000167 E8BE09              <1> 	extcallcall putsz
   367 0000016A 87F1                <1> 	xchg si, cx		; si -> keyword
   368 0000016C 89F2                <1> 	mov dx, si		; dx -> start of keyword
   369                              <1> @@:
   370 0000016E AC                  <1> 	lodsb
   371 0000016F E8C609              <1> 	extcallcall iseol?	; EOL ?
   372 00000172 741D                <1> 	je @F
   373 00000174 3C20                <1> 	cmp al, 32		; blank ?
   374 00000176 7419                <1> 	je @F
   375 00000178 3C09                <1> 	cmp al, 9
   376 0000017A 7415                <1> 	je @F
   377 0000017C 3C2C                <1> 	cmp al, ','		; comma ?
   378 0000017E 75EE                <1> 	jne @B
   379                              <1> 		; We do not want to loop on trailing commas
   380                              <1> 		;  indefinitely, so handle this in a special
   381                              <1> 		;  way here. (Trailing comma after a valid
   382                              <1> 		;  name will emit the not found message with
   383                              <1> 		;  an empty name.)
   384 00000180 56                  <1> 	push si
   385 00000181 E8BC09              <1> 	extcallcall skipwhite
   386 00000184 E8B109              <1> 	extcallcall iseol?	; EOL after comma ?
   387 00000187 7507                <1> 	jne .nottrailingcomma
   388 00000189 4E                  <1> 	dec si
   389 0000018A 58                  <1> 	pop ax			; -> after keyword + 1
   390 0000018B 48                  <1> 	dec ax			; -> after keyword
   391 0000018C 89C1                <1> 	mov cx, ax		; -> after keyword
   392 0000018E EB04                <1> 	jmp @FF
   393                              <1> 
   394                              <1> .nottrailingcomma:
   395 00000190 5E                  <1> 	pop si
   396                              <1> @@:
   397 00000191 4E                  <1> 	dec si			; -> after keyword
   398 00000192 89F1                <1> 	mov cx, si		; -> after keyword
   399                              <1> @@:
   400 00000194 29D1                <1> 	sub cx, dx		; cx = length of keyword
   401 00000196 E8AF09              <1> 	extcallcall puts
   402 00000199 BA[7A02]            <1> reloc	mov dx, msg.notfound.2
   403                              <1> internaldatarelocation
   404 0000019C E88909              <1> 	extcallcall putsz
   405 0000019F E85609              <1> 	extcallcall skipcomma	; skip comma (except trailing comma)
   406 000001A2 4E                  <1> 	dec si			; -> next keyword
   407 000001A3 E970FF              <1> 	jmp .loopouter
   408                              <1> 
   409                              <1> .separator:
   410 000001A6 BA[4907]            <1> reloc	mov dx, msg.linebreak
   411                              <1> internaldatarelocation
   412 000001A9 8716[5209]          <1> reloc	xchg dx, word [separatormessage]
   413                              <1> internaldatarelocation
   414 000001AD E87809              <1> 	extcallcall putsz
   415 000001B0 C3                  <1> 	retn
   416                              <1> 
   417                              <1> 
   418                              <1> display_seg:
   419 000001B1 E84C01              <1> 	call sort_mem
   420                              <1> 
   421 000001B4 BE[5809]            <1> reloc	mov si, table_sorted
   422                              <1> internaldatarelocation
   423 000001B7 BF[0000]            <1> reloc	mov di, relocateddata
   424                              <1> linkdatarelocation line_out
   425                              <1> .loop1:
   426 000001BA AD                  <1> 	lodsw
   427 000001BB 85C0                <1> 	test ax, ax
   428 000001BD 7435                <1> 	jz .done1
   429                              <1> 
   430 000001BF 56                  <1> 	push si
   431 000001C0 96                  <1> 	xchg si, ax
   432 000001C1 E81E00              <1> 	call .get_name
   433 000001C4 91                  <1> 	xchg ax, cx
   434 000001C5 3C04                <1> 	cmp al, 4
   435 000001C7 730B                <1> 	jae @F
   436 000001C9 E88409              <1> 	extcallcall copy_single_counted_string
   437 000001CC 91                  <1> 	xchg ax, cx
   438 000001CD F7D9                <1> 	neg cx
   439 000001CF 83C104              <1> 	add cx, 4
   440 000001D2 EB03                <1> 	jmp @FF
   441                              <1> @@:
   442 000001D4 E87909              <1> 	extcallcall copy_single_counted_string
   443                              <1> @@:
   444 000001D7 41                  <1> 	inc cx
   445 000001D8 B020                <1> 	mov al, 32
   446 000001DA F3AA                <1> 	rep stosb
   447 000001DC 5E                  <1> 	pop si
   448 000001DD 83C608              <1> 	add si, 8
   449 000001E0 EBD8                <1> 	jmp .loop1
   450                              <1> 
   451                              <1> .get_name:
   452 000001E2 56                  <1> 	push si
   453 000001E3 31C9                <1> 	xor cx, cx
   454 000001E5 8A0C                <1> 	mov cl, [si]
   455 000001E7 01CE                <1> 	add si, cx
   456 000001E9 46                  <1> 	inc si
   457 000001EA 8A0C                <1> 	mov cl, [si]
   458 000001EC E302                <1> 	jcxz @F
   459 000001EE 5A                  <1> 	pop dx
   460 000001EF C3                  <1> 	retn
   461                              <1> @@:
   462 000001F0 5E                  <1> 	pop si
   463 000001F1 8A0C                <1> 	mov cl, [si]
   464 000001F3 C3                  <1> 	retn
   465                              <1> 
   466                              <1> .done1:
   467 000001F4 E86109              <1> 	extcallcall trimputs
   468                              <1> 
   469 000001F7 BE[5809]            <1> reloc	mov si, table_sorted
   470                              <1> internaldatarelocation
   471 000001FA BF[0000]            <1> reloc	mov di, relocateddata
   472                              <1> linkdatarelocation line_out
   473                              <1> .loop2:
   474 000001FD AD                  <1> 	lodsw
   475 000001FE 85C0                <1> 	test ax, ax
   476 00000200 741B                <1> 	jz .done2
   477 00000202 56                  <1> 	push si
   478 00000203 50                  <1> 	push ax
   479 00000204 AD                  <1> 	lodsw
   480 00000205 AD                  <1> 	lodsw
   481                              <1> 
   482 00000206 E85709              <1> 	extcallcall hexword
   483 00000209 5E                  <1> 	pop si
   484 0000020A E8D5FF              <1> 	call .get_name
   485 0000020D 80E903              <1> 	sub cl, 3
   486 00000210 7501                <1> 	jnz @F
   487 00000212 41                  <1> 	inc cx
   488                              <1> @@:
   489 00000213 B020                <1> 	mov al, 32
   490 00000215 F3AA                <1> 	rep stosb
   491 00000217 5E                  <1> 	pop si
   492 00000218 83C608              <1> 	add si, 8
   493 0000021B EBE0                <1> 	jmp .loop2
   494                              <1> 
   495                              <1> .done2:
   496 0000021D E83809              <1> 	extcallcall trimputs
   497                              <1> 
   498 00000220 E8E508              <1> 	extcallcall ispm
   499 00000223 7542                <1> 	jnz .end
   500                              <1> 
   501 00000225 BE[5809]            <1> reloc	mov si, table_sorted
   502                              <1> internaldatarelocation
   503 00000228 BF[0000]            <1> reloc	mov di, relocateddata
   504                              <1> linkdatarelocation line_out
   505                              <1> .loop3:
   506 0000022B AD                  <1> 	lodsw
   507 0000022C 85C0                <1> 	test ax, ax
   508 0000022E 7434                <1> 	jz .done3
   509 00000230 93                  <1> 	xchg bx, ax
   510 00000231 83C606              <1> 	add si, 6
   511 00000234 AD                  <1> 	lodsw
   512 00000235 85C0                <1> 	test ax, ax
   513 00000237 750A                <1> 	jnz @F
   514 00000239 B86E6F              <1> 	mov ax, "no"
   515 0000023C AB                  <1> 	stosw
   516 0000023D B86E65              <1> 	mov ax, "ne"
   517 00000240 AB                  <1> 	stosw
   518 00000241 EB0E                <1> 	jmp @FF
   519                              <1> @@:
   520 00000243 93                  <1> 	xchg bx, ax
   521                              <1> 	getotherds
    14 00000244 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
   522 00000249 8B1F                <1> 	mov bx, [bx]
   523                              <1> 	resetds
    18 0000024B 16                  <2>  push ss
    19 0000024C 1F                  <2>  pop ds
   524 0000024D 93                  <1> 	xchg bx, ax
   525                              <1> 
   526 0000024E E80F09              <1> 	extcallcall hexword
   527                              <1> @@:
   528 00000251 56                  <1> 	push si
   529 00000252 89DE                <1> 	mov si, bx
   530 00000254 E88BFF              <1> 	call .get_name
   531 00000257 5E                  <1> 	pop si
   532 00000258 80E903              <1> 	sub cl, 3
   533 0000025B 7501                <1> 	jnz @F
   534 0000025D 41                  <1> 	inc cx
   535                              <1> @@:
   536 0000025E B020                <1> 	mov al, 32
   537 00000260 F3AA                <1> 	rep stosb
   538 00000262 EBC7                <1> 	jmp .loop3
   539                              <1> 
   540                              <1> .done3:
   541 00000264 E8F108              <1> 	extcallcall trimputs
   542                              <1> 
   543                              <1> .end:
   544 00000267 E86302              <1> 	call display_data_sel
   545 0000026A C3                  <1> 	retn
   546                              <1> 
   547                              <1> 
   548                              <1> display_patchareas.none:
   549 0000026B BA[1309]            <1> reloc	mov dx, msg.patch_area.5
   550                              <1> internaldatarelocation
   551 0000026E E8B708              <1> 	extcallcall putsz
   552 00000271 EB79                <1> 	jmp display_patchareas.next
   553                              <1> 
   554                              <1> display_patchareas:
   555 00000273 BE[E600]            <1> reloc	mov si, store_table
   556                              <1> internaldatarelocation
   557                              <1> 
   558                              <1> .loop:
   559 00000276 AD                  <1> 	lodsw
   560 00000277 97                  <1> 	xchg di, ax		; di = offset -> patch area
   561 00000278 AD                  <1> 	lodsw
   562 00000279 93                  <1> 	xchg bx, ax		; bx -> word [segment] => patch area
   563 0000027A AD                  <1> 	lodsw
   564 0000027B 91                  <1> 	xchg cx, ax		; cx = length
   565 0000027C AD                  <1> 	lodsw			; ax -> name message
   566 0000027D 50                  <1> 	push ax			; name
   567 0000027E E3EB                <1> 	jcxz .none		; zero length means not supported -->
   568 00000280 85DB                <1> 	test bx, bx
   569 00000282 74E7                <1> 	jz .none		; zero offset of segment is invalid -->
   570                              <1> 	; test di, di		; (could be valid)
   571                              <1> 	; jz .none
   572                              <1> 
   573                              <1> 	houdini
   574                              <1> 
   575 00000284 BA[C008]            <1> reloc	mov dx, msg.patch_area.1
   576                              <1> internaldatarelocation
   577 00000287 E89E08              <1> 	extcallcall putsz	; header
   578 0000028A 57                  <1> 	push di			; preserve -> patch area
   579 0000028B 51                  <1> 	 push cx
   580 0000028C 91                  <1> 	xchg ax, cx		; ax = length
   581 0000028D BF[0000]            <1> reloc	mov di, relocateddata
   582                              <1> linkdatarelocation line_out
   583 00000290 E8D508              <1> 	extcallcall decword	; write length
   584 00000293 53                  <1> 	 push bx
   585 00000294 E8D908              <1> 	extcallcall putsline
   586 00000297 5B                  <1> 	 pop bx			; preserve segment variable offset
   587 00000298 59                  <1> 	 pop cx			; preserve length
   588 00000299 5F                  <1> 	pop di
   589                              <1> 	getotherds
    14 0000029A 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
   590 0000029F 8B17                <1> 	mov dx, word [bx]	; => segment of patch area
   591                              <1> 	resetds
    18 000002A1 16                  <2>  push ss
    19 000002A2 1F                  <2>  pop ds
   592 000002A3 89D5                <1> 	mov bp, dx		; preserve segment
   593 000002A5 E86808              <1> 	extcallcall setes2dx	; es => patch area
   594 000002A8 BA[E008]            <1> reloc	mov dx, msg.patch_area.2.notinuse
   595                              <1> internaldatarelocation
   596 000002AB 57                  <1> 	push di
   597 000002AC B090                <1> 	mov al, 90h		; check if all NOPs, meaning not in use
   598 000002AE F3AE                <1> 	repe scasb		; check
   599 000002B0 7403                <1> 	je @F			; if not in use -->
   600 000002B2 BA[D408]            <1> reloc	mov dx, msg.patch_area.2.inuse
   601                              <1> internaldatarelocation		; indicate in use
   602                              <1> @@:
   603 000002B5 16                  <1> 	 push ss
   604 000002B6 07                  <1> 	 pop es
   605 000002B7 E86E08              <1> 	extcallcall putsz
   606 000002BA BA[EA08]            <1> reloc	mov dx, msg.patch_area.3.entry
   607                              <1> internaldatarelocation
   608 000002BD 81FB[0000]          <1> reloc	cmp bx, strict word relocateddata
   609                              <1> linkdatarelocation pspdbg	; is entry segment ?
   610 000002C1 7413                <1> 	je @F
   611 000002C3 BA[F008]            <1> reloc	mov dx, msg.patch_area.3.code
   612                              <1> internaldatarelocation
   613 000002C6 81FB[0000]          <1> reloc2	cmp bx, strict word relocateddata
   614                              <1> linkdatarelocation code_seg, -2, optional, next
   615                              <1> linkdatarelocation code_movable_seg, -2, optional, last
   616                              <1> 				; is code segment ?
   617 000002CA 740A                <1> 	je @F
   618 000002CC BA[F508]            <1> reloc	mov dx, msg.patch_area.3.unknown
   619                              <1> internaldatarelocation
   620 000002CF BF[FD08]            <1> reloc	mov di, msg.patch_area.3.unknown.s
   621                              <1> internaldatarelocation
   622 000002D2 95                  <1> 	xchg ax, bp		; ax = segment value
   623 000002D3 E88A08              <1> 	extcallcall hexword
   624                              <1> @@:
   625 000002D6 E84F08              <1> 	extcallcall putsz
   626 000002D9 BA[0309]            <1> reloc	mov dx, msg.patch_area.3.offset
   627                              <1> internaldatarelocation
   628 000002DC BF[0409]            <1> reloc	mov di, msg.patch_area.3.offset.o
   629                              <1> internaldatarelocation
   630 000002DF 58                  <1> 	pop ax
   631 000002E0 E87D08              <1> 	extcallcall hexword
   632 000002E3 E84208              <1> 	extcallcall putsz
   633 000002E6 BA[0C09]            <1> reloc	mov dx, msg.patch_area.4
   634                              <1> internaldatarelocation
   635 000002E9 E83C08              <1> 	extcallcall putsz
   636                              <1> .next:
   637 000002EC 5A                  <1> 	pop dx
   638 000002ED E83808              <1> 	extcallcall putsz
   639                              <1> 
   640 000002F0 BA[4907]            <1> reloc	mov dx, msg.linebreak
   641                              <1> internaldatarelocation
   642 000002F3 E83208              <1> 	extcallcall putsz
   643                              <1> 
   644 000002F6 81FE[FE00]          <1> reloc	cmp si, strict word store_table.end
   645                              <1> internaldatarelocation
   646 000002FA 7303E977FF          <1> 	jb .loop
   647 000002FF C3                  <1> 	retn
   648                              <1> 
   649                              <1> 
   650                              <1> sort_mem:
   651 00000300 BE[0800]            <1> reloc	mov si, table
   652                              <1> internaldatarelocation
   653 00000303 BA[5809]            <1> reloc	mov dx, table_sorted
   654                              <1> internaldatarelocation
   655                              <1> 
   656                              <1> loopprepare:
   657 00000306 AD                  <1> 	lodsw
   658 00000307 85C0                <1> 	test ax, ax
   659 00000309 7459                <1> 	jz .done
   660 0000030B AD                  <1> 	lodsw
   661 0000030C 85C0                <1> 	test ax, ax
   662 0000030E 7505                <1> 	jnz @F
   663                              <1> .segzero:
   664 00000310 83C606              <1> 	add si, 6
   665 00000313 EB4D                <1> 	jmp .next
   666                              <1> 
   667                              <1> @@:
   668 00000315 93                  <1> 	xchg bx, ax
   669                              <1> 	getotherds
    14 00000316 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
   670 0000031B 8B07                <1> 	mov ax, [bx]
   671                              <1> 	resetds
    18 0000031D 16                  <2>  push ss
    19 0000031E 1F                  <2>  pop ds
   672 0000031F 85C0                <1> 	test ax, ax
   673 00000321 74ED                <1> 	jz .segzero
   674 00000323 BF[5C09]            <1> reloc	mov di, table_sorted + 4
   675                              <1> internaldatarelocation
   676                              <1> @@:
   677 00000326 39D7                <1> 	cmp di, dx
   678 00000328 7308                <1> 	jae .insert_at_di_minus_4
   679 0000032A AF                  <1> 	scasw
   680 0000032B 7206                <1> 	jb .insert_at_di_minus_6
   681 0000032D 83C708              <1> 	add di, 8
   682 00000330 EBF4                <1> 	jmp @B
   683                              <1> 
   684                              <1> .insert_at_di_minus_4:
   685 00000332 AF                  <1> 	scasw
   686                              <1> .insert_at_di_minus_6:
   687 00000333 83EF06              <1> 	sub di, 6
   688                              <1> .insert_at_di:
   689 00000336 89D1                <1> 	mov cx, dx
   690 00000338 29F9                <1> 	sub cx, di
   691 0000033A 56                  <1> 	push si
   692 0000033B 57                  <1> 	push di
   693 0000033C 89D7                <1> 	mov di, dx		; -> end
   694 0000033E 83C70A              <1> 	add di, 10		; -> after destination
   695 00000341 89FA                <1> 	mov dx, di		; update -> end
   696 00000343 FD                  <1> 	std			; AMD erratum 109 workaround
   697 00000344 AF                  <1> 	scasw			; -> last word destination
   698 00000345 8D75F6              <1> 	lea si, [di - 10]	; -> last word source (dx - 2)
   699 00000348 D1E9                <1> 	shr cx, 1		; = amount of words
   700 0000034A E308                <1> 	jcxz @FF
   701 0000034C 83F914              <1> 	cmp cx, 20
   702 0000034F 7703                <1> 	ja @FF
   703                              <1> @@:
   704 00000351 A5                  <1> 	movsw
   705 00000352 E2FD                <1> 	loop @B
   706                              <1> @@:
   707 00000354 F3A5                <1> 	rep movsw		; move up all following entries
   708 00000356 FC                  <1> 	cld
   709 00000357 5F                  <1> 	pop di
   710 00000358 5E                  <1> 	pop si
   711 00000359 83EE04              <1> 	sub si, 4
   712 0000035C A5                  <1> 	movsw			; copy message offset
   713 0000035D A5                  <1> 	movsw			; copy seg offset
   714 0000035E AB                  <1> 	stosw			; store seg value
   715 0000035F AD                  <1> 	lodsw			; skip this field
   716 00000360 A5                  <1> 	movsw			; copy size offset
   717 00000361 A5                  <1> 	movsw			; copy sel offset
   718                              <1> .next:
   719 00000362 EBA2                <1> 	jmp loopprepare
   720                              <1> 
   721                              <1> .done:
   722 00000364 87D7                <1> 	xchg dx, di
   723 00000366 31C0                <1> 	xor ax, ax
   724 00000368 AB                  <1> 	stosw			; terminator
   725 00000369 C3                  <1> 	retn
   726                              <1> 
   727                              <1> 
   728                              <1> display_mem:
   729 0000036A E893FF              <1> 	call sort_mem
   730                              <1> 
   731 0000036D BB[0000]            <1> reloc	mov bx, relocateddata
   732                              <1> otherlinkdatarelocation alloc_seg, -2, optional
   733 00000370 89DA                <1> 	mov dx, bx
   734 00000372 85DB                <1> 	test bx, bx
   735 00000374 7409                <1> 	jz @F
   736                              <1> 	getotherds
    14 00000376 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
   737 0000037B 8B17                <1> 	mov dx, [bx]
   738                              <1> 	resetds
    18 0000037D 16                  <2>  push ss
    19 0000037E 1F                  <2>  pop ds
   739                              <1> @@:
   740                              <1> 
   741 0000037F BE[5809]            <1> reloc	mov si, table_sorted
   742                              <1> internaldatarelocation
   743                              <1> loop:
   744 00000382 BF[0000]            <1> reloc	mov di, relocateddata
   745                              <1> linkdatarelocation line_out
   746 00000385 AD                  <1> 	lodsw
   747 00000386 85C0                <1> 	test ax, ax
   748 00000388 7503E9D800          <1> 	jz .done
   749 0000038D 56                  <1> 	push si
   750 0000038E 50                  <1> 	push ax
   751 0000038F AD                  <1> 	lodsw
   752 00000390 85D2                <1> 	test dx, dx
   753 00000392 7421                <1> 	jz .nogap
   754 00000394 85C0                <1> 	test ax, ax
   755 00000396 741D                <1> 	jz .nogap
   756 00000398 93                  <1> 	xchg bx, ax
   757                              <1> 	getotherds
    14 00000399 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
   758 0000039E 8B07                <1> 	mov ax, [bx]
   759                              <1> 	resetds
    18 000003A0 16                  <2>  push ss
    19 000003A1 1F                  <2>  pop ds
   760 000003A2 39C2                <1> 	cmp dx, ax
   761 000003A4 740F                <1> 	je .nogap
   762 000003A6 720A                <1> 	jb .gap
   763 000003A8 52                  <1> 	push dx
   764 000003A9 BA[5104]            <1> reloc	mov dx, msg.overlap
   765                              <1> internaldatarelocation
   766 000003AC E87907              <1> 	extcallcall putsz
   767 000003AF 5A                  <1> 	pop dx
   768 000003B0 EB03                <1> 	jmp .nogap
   769                              <1> .gap:
   770 000003B2 E81C07              <1> 	call gap
   771                              <1> .nogap:
   772 000003B5 5E                  <1> 	pop si
   773 000003B6 E89707              <1> 	extcallcall copy_single_counted_string
   774 000003B9 BE[8203]            <1> reloc	mov si, msg.segment_colon
   775                              <1> internaldatarelocation
   776 000003BC E89107              <1> 	extcallcall copy_single_counted_string
   777 000003BF 5E                  <1> 	pop si
   778 000003C0 AD                  <1> 	lodsw
   779 000003C1 85C0                <1> 	test ax, ax
   780 000003C3 7510                <1> 	jnz @F
   781 000003C5 83C606              <1> 	add si, 6
   782 000003C8 56                  <1> 	push si
   783 000003C9 BE[8D03]            <1> reloc	mov si, msg.none
   784                              <1> internaldatarelocation
   785                              <1> .next_string:
   786 000003CC E88107              <1> 	extcallcall copy_single_counted_string
   787 000003CF 31D2                <1> 	xor dx, dx
   788 000003D1 5E                  <1> 	pop si
   789 000003D2 E98800              <1> 	jmp .next
   790                              <1> 
   791                              <1> @@:
   792 000003D5 93                  <1> 	xchg bx, ax
   793 000003D6 B9[1A00]            <1> reloc	mov cx, relocateddata + 26
   794                              <1> linkdatarelocation line_out
   795 000003D9 29F9                <1> 	sub cx, di
   796 000003DB 7604                <1> 	jbe @F
   797 000003DD B020                <1> 	mov al, 32
   798 000003DF F3AA                <1> 	rep stosb
   799                              <1> @@:
   800                              <1> 	getotherds
    14 000003E1 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
   801 000003E6 8B07                <1> 	mov ax, [bx]
   802                              <1> 	resetds
    18 000003E8 16                  <2>  push ss
    19 000003E9 1F                  <2>  pop ds
   803 000003EA 89C2                <1> 	mov dx, ax
   804 000003EC E87107              <1> 	extcallcall hexword
   805 000003EF 56                  <1> 	push si
   806 000003F0 BE[C903]            <1> reloc	mov si, msg.address.1
   807                              <1> internaldatarelocation
   808 000003F3 E85A07              <1> 	extcallcall copy_single_counted_string
   809 000003F6 5E                  <1> 	pop si
   810 000003F7 AD                  <1> 	lodsw
   811 000003F8 AD                  <1> 	lodsw
   812 000003F9 85C0                <1> 	test ax, ax
   813 000003FB 750C                <1> 	jnz @F
   814 000003FD AD                  <1> 	lodsw
   815 000003FE 56                  <1> 	push si
   816 000003FF BE[B003]            <1> reloc	mov si, msg.nonesize
   817                              <1> internaldatarelocation
   818 00000402 31D2                <1> 	xor dx, dx
   819 00000404 E84907              <1> 	extcallcall copy_single_counted_string
   820 00000407 EB37                <1> 	jmp .next_sel
   821                              <1> 
   822                              <1> @@:
   823 00000409 52                  <1> 	push dx
   824 0000040A 56                  <1> 	push si
   825 0000040B BE[CC03]            <1> reloc	mov si, msg.size.1
   826                              <1> internaldatarelocation
   827 0000040E E83F07              <1> 	extcallcall copy_single_counted_string
   828 00000411 93                  <1> 	xchg bx, ax
   829                              <1> 	getotherds
    14 00000412 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
   830 00000417 8B07                <1> 	mov ax, [bx]
   831                              <1> 	resetds
    18 00000419 16                  <2>  push ss
    19 0000041A 1F                  <2>  pop ds
   832 0000041B E84207              <1> 	extcallcall hexword
   833 0000041E BE[D403]            <1> reloc	mov si, msg.size.2
   834                              <1> internaldatarelocation
   835 00000421 E82C07              <1> 	extcallcall copy_single_counted_string
   836 00000424 31D2                <1> 	xor dx, dx
   837 00000426 B90100              <1> 	mov cx, 1
   838 00000429 BB0900              <1> 	mov bx, 9
   839 0000042C E84907              <1> 	extcallcall disp_dxax_times_cx_width_bx_size.store
   840 0000042F 5E                  <1> 	pop si
   841 00000430 5A                  <1> 	pop dx
   842 00000431 83C00F              <1> 	add ax, 15
   843 00000434 D1E8                <1> 	shr ax, 1
   844 00000436 D1E8                <1> 	shr ax, 1
   845 00000438 D1E8                <1> 	shr ax, 1
   846 0000043A D1E8                <1> 	shr ax, 1
   847 0000043C 01C2                <1> 	add dx, ax
   848 0000043E AD                  <1> 	lodsw
   849 0000043F 56                  <1> 	push si
   850                              <1> .next_sel:
   851 00000440 E8C506              <1> 	extcallcall ispm
   852 00000443 7517                <1> 	jnz @F
   853 00000445 85C0                <1> 	test ax, ax
   854 00000447 7413                <1> 	jz @F
   855 00000449 93                  <1> 	xchg bx, ax
   856                              <1> 	getotherds
    14 0000044A 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
   857 0000044F 8B07                <1> 	mov ax, [bx]
   858                              <1> 	resetds
    18 00000451 16                  <2>  push ss
    19 00000452 1F                  <2>  pop ds
   859 00000453 BE[D703]            <1> reloc	mov si, msg.sel
   860                              <1> internaldatarelocation
   861 00000456 E8F706              <1> 	extcallcall copy_single_counted_string
   862 00000459 E80407              <1> 	extcallcall hexword
   863                              <1> 
   864                              <1> @@:
   865 0000045C 5E                  <1> 	pop si
   866                              <1> 
   867                              <1> .next:
   868 0000045D 52                  <1> 	push dx
   869 0000045E E81F07              <1> 	extcallcall putsline_crlf
   870 00000461 5A                  <1> 	pop dx
   871 00000462 E91DFF              <1> 	jmp loop
   872                              <1> 
   873                              <1> .done:
   874                              <1> loop_done:
   875                              <1> 
   876 00000465 BB[0000]            <1> reloc	mov bx, relocateddata
   877                              <1> otherlinkdatarelocation alloc_seg, -2, optional
   878 00000468 85DB                <1> 	test bx, bx
   879 0000046A 741D                <1> 	jz .nogap
   880                              <1> 	getotherds
    14 0000046C 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
   881 00000471 8B07                <1> 	mov ax, [bx]
   882 00000473 BB[0000]            <1> reloc	mov bx, relocateddata
   883                              <1> otherlinkdatarelocation alloc_size, -2, optional
   884 00000476 85DB                <1> 	test bx, bx
   885 00000478 740F                <1> 	jz .nogap
   886 0000047A 0307                <1> 	add ax, [bx]
   887                              <1> 	resetds
    18 0000047C 16                  <2>  push ss
    19 0000047D 1F                  <2>  pop ds
   888 0000047E 85D2                <1> 	test dx, dx
   889 00000480 7407                <1> 	jz .nogap
   890 00000482 39C2                <1> 	cmp dx, ax
   891 00000484 7303                <1> 	jae .nogap
   892 00000486 E84806              <1> 	call gap
   893                              <1> .nogap:
   894                              <1> 	resetds
    18 00000489 16                  <2>  push ss
    19 0000048A 1F                  <2>  pop ds
   895                              <1> 
   896                              <1> 
   897                              <1> display_alloc:
   898 0000048B BA[1B04]            <1> reloc	mov dx, msg.alloc
   899                              <1> internaldatarelocation
   900 0000048E E89706              <1> 	extcallcall putsz
   901                              <1> 
   902 00000491 BB[0000]            <1> reloc	mov bx, relocateddata
   903                              <1> otherlinkdatarelocation alloc_seg, -2, optional
   904 00000494 85DB                <1> 	test bx, bx
   905 00000496 7508                <1> 	jnz @F
   906 00000498 BE[8D03]            <1> reloc	mov si, msg.none
   907                              <1> internaldatarelocation
   908                              <1> .eol_string:
   909 0000049B E8B206              <1> 	extcallcall copy_single_counted_string
   910 0000049E EB2A                <1> 	jmp .eol
   911                              <1> 
   912                              <1> @@:
   913                              <1> 	getotherds
    14 000004A0 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
   914 000004A5 8B07                <1> 	mov ax, [bx]
   915                              <1> 	resetds
    18 000004A7 16                  <2>  push ss
    19 000004A8 1F                  <2>  pop ds
   916 000004A9 E8B406              <1> 	extcallcall hexword
   917 000004AC BE[C903]            <1> reloc	mov si, msg.address.1
   918                              <1> internaldatarelocation
   919 000004AF E89E06              <1> 	extcallcall copy_single_counted_string
   920                              <1> 
   921 000004B2 BB[0000]            <1> reloc	mov bx, relocateddata
   922                              <1> otherlinkdatarelocation alloc_size, -2, optional
   923 000004B5 85DB                <1> 	test bx, bx
   924 000004B7 7505                <1> 	jnz @F
   925 000004B9 BE[B003]            <1> reloc	mov si, msg.nonesize
   926                              <1> internaldatarelocation
   927 000004BC EBDD                <1> 	jmp .eol_string
   928                              <1> 
   929                              <1> @@:
   930                              <1> 	getotherds
    14 000004BE 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
   931 000004C3 8B07                <1> 	mov ax, [bx]
   932                              <1> 	resetds
    18 000004C5 16                  <2>  push ss
    19 000004C6 1F                  <2>  pop ds
   933 000004C7 E8D905              <1> 	call parasize
   934                              <1> .eol:
   935 000004CA E8B306              <1> 	extcallcall putsline_crlf
   936                              <1> 
   937                              <1> 
   938                              <1> display_data_sel:
   939 000004CD E83806              <1> 	extcallcall ispm
   940 000004D0 7540                <1> 	jnz .end
   941                              <1> 
   942 000004D2 BF[0000]            <1> reloc	mov di, relocateddata
   943                              <1> linkdatarelocation line_out
   944 000004D5 B90200              <1> 	mov cx, 2
   945                              <1> @@:
   946 000004D8 BB[0000]            <1> reloc	mov bx, relocateddata
   947                              <1> otherlinkdatarelocation dssel, -2, optional
   948 000004DB 80F902              <1> 	cmp cl, 2
   949 000004DE 7403                <1> 	je .dssel
   950 000004E0 BB[0000]            <1> reloc	mov bx, relocateddata
   951                              <1> otherlinkdatarelocation extdssel, -2, optional
   952                              <1> .dssel:
   953 000004E3 85DB                <1> 	test bx, bx
   954 000004E5 7420                <1> 	jz .next
   955                              <1> 	getotherds
    14 000004E7 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
   956 000004EC 8B07                <1> 	mov ax, [bx]
   957                              <1> 	resetds
    18 000004EE 16                  <2>  push ss
    19 000004EF 1F                  <2>  pop ds
   958 000004F0 BE[E403]            <1> reloc	mov si, msg.dssel
   959                              <1> internaldatarelocation
   960 000004F3 80F902              <1> 	cmp cl, 2
   961 000004F6 7403                <1> 	je .msgdssel
   962 000004F8 BE[FA03]            <1> reloc	mov si, msg.extdssel
   963                              <1> internaldatarelocation
   964                              <1> .msgdssel:
   965 000004FB 51                  <1> 	push cx
   966 000004FC E85106              <1> 	extcallcall copy_single_counted_string
   967 000004FF 59                  <1> 	pop cx
   968 00000500 E85D06              <1> 	extcallcall hexword
   969 00000503 B82020              <1> 	mov ax, 2020h
   970 00000506 AB                  <1> 	stosw
   971                              <1> .next:
   972 00000507 E2CF                <1> 	loop @B
   973 00000509 81FF[0000]          <1> reloc	cmp di, strict word relocateddata
   974                              <1> linkdatarelocation line_out
   975 0000050D 7403                <1> 	je .end
   976 0000050F E84606              <1> 	extcallcall trimputs
   977                              <1> 
   978                              <1> .end:
   979 00000512 C3                  <1> 	retn
   980                              <1> 
   981                              <1> 
   982                              <1> historysize:
   983                              <1> 	lframe none
   984 00000513 5589E5              <1> 	lenter
   985 00000516 C606[4401]00        <1> reloc	mov byte [history_data_entry], 0
   986                              <1> internaldatarelocation -3
   987 0000051B B8[0000]            <1> reloc	mov ax, relocateddata
   988                              <1> otherlinkdatarelocation historyformat, -2, optional
   989 0000051E 85C0                <1> 	test ax, ax
   990 00000520 7509                <1> 	jnz @F
   991 00000522 BA[5C04]            <1> reloc	mov dx, msg.history_none
   992                              <1> internaldatarelocation
   993                              <1> .putsz_end:
   994 00000525 E80006              <1> 	extcallcall putsz
   995 00000528 E9D000              <1> 	jmp .end
   996                              <1> 
   997                              <1> @@:
   998 0000052B BA[7C04]            <1> reloc	mov dx, msg.history_data_entry
   999                              <1> internaldatarelocation
  1000                              <1> 	; houdini
  1001                              <1> @@:
  1002 0000052E 83F802              <1> 	cmp ax, 2
  1003 00000531 720A                <1> 	jb .in_data_entry
  1004 00000533 BA[9D04]            <1> reloc	mov dx, msg.history_separate
  1005                              <1> internaldatarelocation
  1006 00000536 7409                <1> 	je .in_separate
  1007                              <1> 
  1008                              <1> %if 0
  1009                              <1> reloc	mov di, relocateddata
  1010                              <1> linkdatarelocation line_out
  1011                              <1> 	extcallcall hexword
  1012                              <1> 	mov al, 32
  1013                              <1> 	stosb
  1014                              <1> reloc	mov si, @B
  1015                              <1> internalcoderelocation
  1016                              <1> 	mov cx, 16
  1017                              <1> @@:
  1018                              <1> 	cs lodsb
  1019                              <1> 	extcallcall hexbyte
  1020                              <1> 	mov al, 32
  1021                              <1> 	stosb
  1022                              <1> 	loop @B
  1023                              <1> 	extcallcall trimputs
  1024                              <1> %endif
  1025                              <1> 
  1026 00000538 BA[BE04]            <1> reloc	mov dx, msg.history_unknown
  1027                              <1> internaldatarelocation
  1028 0000053B EBE8                <1> 	jmp .putsz_end
  1029                              <1> 
  1030                              <1> .in_data_entry:
  1031 0000053D F616[4401]          <1> reloc	not byte [history_data_entry]
  1032                              <1> internaldatarelocation
  1033                              <1> .in_separate:
  1034 00000541 E8E405              <1> 	extcallcall putsz
  1035 00000544 BB[0000]            <1> reloc	mov bx, relocateddata
  1036                              <1> otherlinkdatarelocation history.last, -2, optional
  1037 00000547 BA[0000]            <1> reloc	mov dx, relocateddata
  1038                              <1> otherlinkdatarelocation history.first, -2, optional
  1039 0000054A 85DB                <1> 	test bx, bx
  1040 0000054C 7404                <1> 	jz @F
  1041 0000054E 85D2                <1> 	test dx, dx
  1042 00000550 7507                <1> 	jnz @FF
  1043                              <1> 
  1044                              <1> @@:
  1045                              <1> .missing:
  1046                              <1> 	resetds
    18 00000552 16                  <2>  push ss
    19 00000553 1F                  <2>  pop ds
  1047 00000554 BA[D804]            <1> reloc	mov dx, msg.history_missing
  1048                              <1> internaldatarelocation
  1049 00000557 EBCC                <1> 	jmp .putsz_end
  1050                              <1> 
  1051                              <1> @@:
  1052 00000559 BF[0000]            <1> reloc	mov di, relocateddata
  1053                              <1> linkdatarelocation line_out
  1054 0000055C BE[1105]            <1> reloc	mov si, msg.history.1
  1055                              <1> internaldatarelocation
  1056 0000055F E8EE05              <1> 	extcallcall copy_single_counted_string
  1057                              <1> 	getotherds
    14 00000562 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1058 00000567 87D3                <1> 	xchg dx, bx
  1059 00000569 8B07                <1> 	mov ax, [bx]
  1060 0000056B 87D3                <1> 	xchg dx, bx
  1061 0000056D 2B07                <1> 	sub ax, [bx]
  1062                              <1> 	resetds
    18 0000056F 16                  <2>  push ss
    19 00000570 1F                  <2>  pop ds
  1063 00000571 D1E8                <1> 	shr ax, 1
  1064 00000573 E8F205              <1> 	extcallcall decword
  1065 00000576 50                  <1> 	push ax
  1066 00000577 BE[2305]            <1> reloc	mov si, msg.history.2
  1067                              <1> internaldatarelocation
  1068 0000057A E8D305              <1> 	extcallcall copy_single_counted_string
  1069                              <1> 	getotherds
    14 0000057D 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1070 00000582 8B1F                <1> 	mov bx, [bx]
  1071                              <1> 	resetds
    18 00000584 16                  <2>  push ss
    19 00000585 1F                  <2>  pop ds
  1072 00000586 D006[4401]          <1> reloc	rol byte [history_data_entry], 1
  1073                              <1> internaldatarelocation
  1074                              <1> 	getotherds
    14 0000058A 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1075 0000058F 720B                <1> 	jc .not_seg
  1076 00000591 53                  <1> 	push bx
  1077 00000592 BB[0000]            <1> reloc	mov bx, relocateddata
  1078                              <1> otherlinkdatarelocation history.segorsel, -2, optional
  1079 00000595 85DB                <1> 	test bx, bx
  1080 00000597 74B9                <1> 	jz .missing
  1081 00000599 8E1F                <1> 	mov ds, word [bx]
  1082 0000059B 5B                  <1> 	pop bx
  1083                              <1> .not_seg:
  1084 0000059C 8B07                <1> 	mov ax, [bx]
  1085 0000059E 16                  <1> 	 push ss
  1086 0000059F 1F                  <1> 	 pop ds
  1087 000005A0 59                  <1> 	pop cx
  1088 000005A1 01C8                <1> 	add ax, cx
  1089 000005A3 01C8                <1> 	add ax, cx
  1090 000005A5 51                  <1> 	push cx
  1091 000005A6 40                  <1> 	inc ax
  1092 000005A7 40                  <1> 	inc ax
  1093 000005A8 E8BD05              <1> 	extcallcall decword
  1094 000005AB 50                  <1> 	push ax
  1095 000005AC BE[3505]            <1> reloc	mov si, msg.history.3
  1096                              <1> internaldatarelocation
  1097 000005AF E89E05              <1> 	extcallcall copy_single_counted_string
  1098 000005B2 89D3                <1> 	mov bx, dx
  1099                              <1> 	getotherds
    14 000005B4 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1100 000005B9 8B07                <1> 	mov ax, [bx]
  1101                              <1> 	resetds
    18 000005BB 16                  <2>  push ss
    19 000005BC 1F                  <2>  pop ds
  1102 000005BD D006[4401]          <1> reloc	rol byte [history_data_entry], 1
  1103                              <1> internaldatarelocation
  1104 000005C1 730B                <1> 	jnc .not_entry
  1105 000005C3 53                  <1> 	push bx
  1106 000005C4 BB[0000]            <1> reloc	mov bx, relocateddata
  1107                              <1> otherlinkdatarelocation historybuffer, -2, optional
  1108 000005C7 85DB                <1> 	test bx, bx
  1109 000005C9 7487                <1> 	jz .missing
  1110 000005CB 29D8                <1> 	sub ax, bx
  1111 000005CD 5B                  <1> 	pop bx
  1112                              <1> .not_entry:
  1113 000005CE 40                  <1> 	inc ax
  1114 000005CF 40                  <1> 	inc ax
  1115 000005D0 E89505              <1> 	extcallcall decword
  1116 000005D3 58                  <1> 	pop ax
  1117 000005D4 5A                  <1> 	pop dx
  1118 000005D5 85D2                <1> 	test dx, dx
  1119 000005D7 7505                <1> 	jnz @F
  1120                              <1> 
  1121 000005D9 BE[7005]            <1> reloc	mov si, msg.history.average.none
  1122                              <1> internaldatarelocation
  1123 000005DC EB17                <1> 	jmp .string_end
  1124                              <1> 
  1125                              <1> @@:
  1126 000005DE BE[3E05]            <1> reloc	mov si, msg.history.average.1
  1127                              <1> internaldatarelocation
  1128 000005E1 E86C05              <1> 	extcallcall copy_single_counted_string
  1129                              <1> 
  1130 000005E4 31C9                <1> 	xor cx, cx
  1131 000005E6 87CA                <1> 	xchg cx, dx
  1132 000005E8 F7F1                <1> 	div cx
  1133 000005EA 85D2                <1> 	test dx, dx
  1134 000005EC 7401                <1> 	jz @F
  1135 000005EE 40                  <1> 	inc ax
  1136                              <1> @@:
  1137 000005EF E87605              <1> 	extcallcall decword
  1138 000005F2 BE[6805]            <1> reloc	mov si, msg.history.average.2
  1139                              <1> internaldatarelocation
  1140                              <1> .string_end:
  1141 000005F5 E85805              <1> 	extcallcall copy_single_counted_string
  1142 000005F8 E88505              <1> 	extcallcall putsline_crlf
  1143                              <1> .end:
  1144 000005FB 89EC5D              <1> 	lleave , forcerestoresp
  1145 000005FE C3                  <1> 	retn
  1146                              <1> 
  1147                              <1> 
  1148                              <1> stacksize:
  1149 000005FF BF[0000]            <1> reloc	mov di, relocateddata
  1150                              <1> linkdatarelocation line_out
  1151 00000602 BB[0000]            <1> reloc	mov bx, relocateddata
  1152                              <1> otherlinkdatarelocation stack, -2, optional
  1153 00000605 BA[0000]            <1> reloc	mov dx, relocateddata
  1154                              <1> otherlinkdatarelocation stack_end, -2, optional
  1155 00000608 85DB                <1> 	test bx, bx
  1156 0000060A 7404                <1> 	jz @F
  1157 0000060C 85D2                <1> 	test dx, dx
  1158 0000060E 7505                <1> 	jnz @FF
  1159                              <1> @@:
  1160 00000610 BE[A605]            <1> reloc	mov si, msg.stack.none
  1161                              <1> internaldatarelocation
  1162 00000613 EB3F                <1> 	jmp .string_end
  1163                              <1> 
  1164                              <1> @@:
  1165 00000615 BE[BD05]            <1> reloc	mov si, msg.stack.1
  1166                              <1> internaldatarelocation
  1167 00000618 E83505              <1> 	extcallcall copy_single_counted_string
  1168 0000061B 89D0                <1> 	mov ax, dx
  1169 0000061D 29D8                <1> 	sub ax, bx
  1170 0000061F E84605              <1> 	extcallcall decword
  1171 00000622 BE[CA05]            <1> reloc	mov si, msg.stack.2
  1172                              <1> internaldatarelocation
  1173 00000625 E82805              <1> 	extcallcall copy_single_counted_string
  1174                              <1> 	getotherds
    14 00000628 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1175 0000062D 8A07                <1> 	mov al, [bx]
  1176                              <1> 	resetds
    18 0000062F 16                  <2>  push ss
    19 00000630 1F                  <2>  pop ds
  1177 00000631 E85405              <1> 	extcallcall hexbyte
  1178 00000634 BE[E905]            <1> reloc	mov si, msg.stack.3
  1179                              <1> internaldatarelocation
  1180 00000637 E81605              <1> 	extcallcall copy_single_counted_string
  1181 0000063A 87FB                <1> 	xchg di, bx
  1182                              <1> 	getotheres
    22 0000063C 368E06[0000]        <2> reloc mov es, word [ss:otherds]
    23                              <2> internaldatarelocation
  1183 00000641 B9FFFF              <1> 	mov cx, -1
  1184 00000644 F3AE                <1> 	repe scasb
  1185                              <1> 	resetes
    26 00000646 16                  <2>  push ss
    27 00000647 07                  <2>  pop es
  1186 00000648 F7D1                <1> 	not cx
  1187 0000064A 49                  <1> 	dec cx
  1188 0000064B 91                  <1> 	xchg ax, cx
  1189 0000064C 87FB                <1> 	xchg di, bx
  1190 0000064E E81705              <1> 	extcallcall decword
  1191 00000651 BE[0506]            <1> reloc	mov si, msg.stack.4
  1192                              <1> internaldatarelocation
  1193                              <1> 
  1194                              <1> .string_end:
  1195 00000654 E8F904              <1> 	extcallcall copy_single_counted_string
  1196 00000657 E81605              <1> 	extcallcall putsline
  1197 0000065A C3                  <1> 	retn
  1198                              <1> 
  1199                              <1> display_eld_use:
  1200                              <1> 
  1201 0000065B BF[0000]            <1> reloc	mov di, relocateddata
  1202                              <1> linkdatarelocation line_out
  1203 0000065E BE[0E06]            <1> reloc	mov si, msg.elduse.1
  1204                              <1> internaldatarelocation
  1205 00000661 E8EC04              <1> 	extcallcall copy_single_counted_string
  1206                              <1> 	getotherds
    14 00000664 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1207 00000669 A1[0000]            <1> reloc	mov ax, word [relocateddata]
  1208                              <1> otherlinkdatarelocation extseg_used
  1209                              <1> 	resetds
    18 0000066C 16                  <2>  push ss
    19 0000066D 1F                  <2>  pop ds
  1210 0000066E E81B04              <1> 	call display_ax_hex_and_size
  1211 00000671 95                  <1> 	xchg bp, ax
  1212 00000672 BE[1906]            <1> reloc	mov si, msg.elduse.2
  1213                              <1> internaldatarelocation
  1214 00000675 E8D804              <1> 	extcallcall copy_single_counted_string
  1215                              <1> 	getotherds
    14 00000678 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1216 0000067D A1[0000]            <1> reloc	mov ax, word [relocateddata]
  1217                              <1> otherlinkdatarelocation extseg_size
  1218                              <1> 	resetds
    18 00000680 16                  <2>  push ss
    19 00000681 1F                  <2>  pop ds
  1219 00000682 F7DD                <1> 	neg bp
  1220 00000684 01C5                <1> 	add bp, ax
  1221 00000686 95                  <1> 	xchg bp, ax
  1222 00000687 E80204              <1> 	call display_ax_hex_and_size
  1223 0000068A 95                  <1> 	xchg ax, bp
  1224 0000068B BE[2106]            <1> reloc	mov si, msg.elduse.2b
  1225                              <1> internaldatarelocation
  1226 0000068E E8BF04              <1> 	extcallcall copy_single_counted_string
  1227 00000691 E8F803              <1> 	call display_ax_hex_and_size
  1228                              <1> 
  1229 00000694 BE[2906]            <1> reloc	mov si, msg.elduse.3
  1230                              <1> internaldatarelocation
  1231 00000697 E8B604              <1> 	extcallcall copy_single_counted_string
  1232                              <1> 	getotherds
    14 0000069A 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1233 0000069F A1[0000]            <1> reloc	mov ax, word [relocateddata]
  1234                              <1> otherlinkdatarelocation extdata_used
  1235                              <1> 	resetds
    18 000006A2 16                  <2>  push ss
    19 000006A3 1F                  <2>  pop ds
  1236 000006A4 E8E503              <1> 	call display_ax_hex_and_size
  1237 000006A7 95                  <1> 	xchg bp, ax
  1238 000006A8 BE[1906]            <1> reloc	mov si, msg.elduse.4
  1239                              <1> internaldatarelocation
  1240 000006AB E8A204              <1> 	extcallcall copy_single_counted_string
  1241                              <1> 	getotherds
    14 000006AE 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1242 000006B3 A1[0000]            <1> reloc	mov ax, word [relocateddata]
  1243                              <1> otherlinkdatarelocation extdata_size
  1244                              <1> 	resetds
    18 000006B6 16                  <2>  push ss
    19 000006B7 1F                  <2>  pop ds
  1245 000006B8 F7DD                <1> 	neg bp
  1246 000006BA 01C5                <1> 	add bp, ax
  1247 000006BC 95                  <1> 	xchg bp, ax
  1248 000006BD E8CC03              <1> 	call display_ax_hex_and_size
  1249 000006C0 95                  <1> 	xchg ax, bp
  1250 000006C1 BE[2106]            <1> reloc	mov si, msg.elduse.2b
  1251                              <1> internaldatarelocation
  1252 000006C4 E88904              <1> 	extcallcall copy_single_counted_string
  1253 000006C7 E8C203              <1> 	call display_ax_hex_and_size
  1254 000006CA BE[3C06]            <1> reloc	mov si, msg.elduse.5
  1255                              <1> internaldatarelocation
  1256 000006CD E88004              <1> 	extcallcall copy_single_counted_string
  1257 000006D0 E8AD04              <1> 	extcallcall putsline_crlf
  1258 000006D3 C3                  <1> 	retn
  1259                              <1> 
  1260                              <1> 
  1261                              <1> display_eld_memory:
  1262 000006D4 BA[4306]            <1> reloc	mov dx, msg.eld.1
  1263                              <1> internaldatarelocation
  1264 000006D7 E84E04              <1> 	extcallcall putsz
  1265                              <1> 
  1266 000006DA 31C0                <1> 	xor ax, ax
  1267                              <1> .loop:
  1268 000006DC BF[0000]            <1> reloc	mov di, relocateddata
  1269                              <1> linkdatarelocation line_out
  1270                              <1> 	getotherds
    14 000006DF 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1271 000006E4 3906[0000]          <1> reloc	cmp word [relocateddata], ax
  1272                              <1> otherlinkdatarelocation extseg_used
  1273 000006E8 7719                <1> 	ja @F
  1274                              <1> 
  1275 000006EA 31ED                <1> 	xor bp, bp
  1276 000006EC 8B16[0000]          <1> reloc	mov dx, word [relocateddata]
  1277                              <1> otherlinkdatarelocation extseg_size
  1278 000006F0 29C2                <1> 	sub dx, ax
  1279 000006F2 31DB                <1> 	xor bx, bx
  1280 000006F4 31C9                <1> 	xor cx, cx
  1281                              <1> .free:
  1282 000006F6 16                  <1> 	 push ss
  1283 000006F7 1F                  <1> 	 pop ds
  1284 000006F8 51                  <1> 	push cx
  1285 000006F9 BE[7206]            <1> reloc	mov si, msg.eld.free
  1286                              <1> internaldatarelocation
  1287 000006FC E85104              <1> 	extcallcall copy_single_counted_string
  1288 000006FF 59                  <1> 	pop cx
  1289 00000700 E9A400              <1> 	jmp .have
  1290                              <1> 
  1291                              <1> @@:
  1292 00000703 BB[0000]            <1> reloc	mov bx, relocateddata
  1293                              <1> otherlinkdatarelocation extdssel, -2, optional
  1294 00000706 E8FF03              <1> 	extcallcall ispm
  1295 00000709 7403                <1> 	jz @F
  1296 0000070B BB[0000]            <1> reloc	mov bx, relocateddata
  1297                              <1> otherlinkdatarelocation extseg, -2, optional
  1298                              <1> @@:
  1299 0000070E 85DB                <1> 	test bx, bx
  1300 00000710 750B                <1> 	jnz @F
  1301                              <1> .error:
  1302                              <1> 	resetds
    18 00000712 16                  <2>  push ss
    19 00000713 1F                  <2>  pop ds
  1303 00000714 BA[5206]            <1> reloc	mov dx, msg.eld.error
  1304                              <1> internaldatarelocation
  1305 00000717 E80E04              <1> 	extcallcall putsz
  1306 0000071A E9AD00              <1> 	jmp .end
  1307                              <1> 
  1308                              <1> @@:
  1309 0000071D 8E07                <1> 	mov es, word [bx]
  1310 0000071F 89C3                <1> 	mov bx, ax
  1311 00000721 263907              <1> 	cmp word [es:bx + eldiStartCode], ax
  1312 00000724 75EC                <1> 	jne .error
  1313 00000726 89C2                <1> 	mov dx, ax
  1314 00000728 83C220              <1> 	add dx, ELD_INSTANCE_size
  1315 0000072B 72E5                <1> 	jc .error
  1316 0000072D 26395702            <1> 	cmp word [es:bx + eldiEndCode], dx
  1317 00000731 72DF                <1> 	jb .error
  1318 00000733 8B16[0000]          <1> reloc	mov dx, word [relocateddata]
  1319                              <1> otherlinkdatarelocation extseg_used
  1320 00000737 26395702            <1> 	cmp word [es:bx + eldiEndCode], dx
  1321 0000073B 77D5                <1> 	ja .error
  1322 0000073D 740B                <1> 	je @F
  1323 0000073F 83EA20              <1> 	sub dx, ELD_INSTANCE_size
  1324 00000742 72CE                <1> 	jc .error
  1325 00000744 26395702            <1> 	cmp word [es:bx + eldiEndCode], dx
  1326 00000748 77C8                <1> 	ja .error
  1327                              <1> @@:
  1328 0000074A 268B5702            <1> 	mov dx, word [es:bx + eldiEndCode]
  1329 0000074E 89D5                <1> 	mov bp, dx
  1330 00000750 29C2                <1> 	sub dx, ax
  1331 00000752 72BE                <1> 	jc .error
  1332 00000754 26FF7704            <1> 	push word [es:bx + eldiStartData]
  1333 00000758 53                  <1> 	push bx
  1334 00000759 268B5F06            <1> 	mov bx, word [es:bx + eldiEndData]
  1335 0000075D 5E                  <1> 	pop si
  1336 0000075E 26F6441001          <1> 	testopt [es:si + eldiFlags], eldifResident
  1337 00000763 8D7408              <1> 	lea si, [si + eldiIdentifier]
  1338 00000766 06                  <1> 	push es
  1339 00000767 1F                  <1> 	pop ds
  1340 00000768 16                  <1> 	 push ss
  1341 00000769 07                  <1> 	 pop es
  1342 0000076A 59                  <1> 	pop cx
  1343 0000076B 7537                <1> 	jnz .nonfree
  1344                              <1> 
  1345 0000076D 51                  <1> 	push cx
  1346 0000076E 1E                  <1> 	push ds
  1347 0000076F 56                  <1> 	push si
  1348 00000770 16                  <1> 	 push ss
  1349 00000771 1F                  <1> 	 pop ds
  1350 00000772 BE[7206]            <1> reloc	mov si, msg.eld.free
  1351                              <1> internaldatarelocation
  1352 00000775 E8D803              <1> 	extcallcall copy_single_counted_string
  1353                              <1> 
  1354 00000778 BE[8206]            <1> reloc	mov si, msg.eld.2
  1355                              <1> internaldatarelocation
  1356 0000077B 53                  <1> 	push bx
  1357 0000077C E8F202              <1> 	call display_eld_size
  1358 0000077F 5B                  <1> 	pop bx
  1359                              <1> 
  1360 00000780 BE[7D06]            <1> reloc	mov si, msg.eld.free.2
  1361                              <1> internaldatarelocation
  1362 00000783 E8CA03              <1> 	extcallcall copy_single_counted_string
  1363                              <1> 
  1364 00000786 5E                  <1> 	pop si
  1365 00000787 1F                  <1> 	pop ds
  1366                              <1> 
  1367 00000788 E80900              <1> 	call .copyname
  1368                              <1> 
  1369 0000078B BE[8006]            <1> reloc	mov si, msg.eld.free.3
  1370                              <1> internaldatarelocation
  1371 0000078E E8BF03              <1> 	extcallcall copy_single_counted_string
  1372                              <1> 
  1373 00000791 59                  <1> 	pop cx
  1374                              <1> 
  1375 00000792 EB1B                <1> 	jmp .havedata
  1376                              <1> 
  1377                              <1> .copyname:
  1378 00000794 51                  <1> 	push cx
  1379 00000795 50                  <1> 	push ax
  1380 00000796 B022                <1> 	mov al, '"'
  1381 00000798 AA                  <1> 	stosb
  1382 00000799 B90400              <1> 	mov cx, 4
  1383 0000079C F3A5                <1> 	rep movsw
  1384 0000079E AA                  <1> 	stosb
  1385 0000079F 58                  <1> 	pop ax
  1386 000007A0 16                  <1> 	 push ss
  1387 000007A1 1F                  <1> 	 pop ds
  1388 000007A2 59                  <1> 	pop cx
  1389 000007A3 C3                  <1> 	retn
  1390                              <1> 
  1391                              <1> .nonfree:
  1392 000007A4 E8EDFF              <1> 	call .copyname
  1393                              <1> 
  1394                              <1> .have:
  1395 000007A7 BE[8206]            <1> reloc	mov si, msg.eld.2
  1396                              <1> internaldatarelocation
  1397 000007AA 53                  <1> 	push bx
  1398 000007AB E8C302              <1> 	call display_eld_size
  1399 000007AE 5B                  <1> 	pop bx
  1400                              <1> 
  1401                              <1> .havedata:
  1402 000007AF 89D8                <1> 	mov ax, bx
  1403 000007B1 29C8                <1> 	sub ax, cx
  1404 000007B3 7409                <1> 	jz .next
  1405 000007B5 92                  <1> 	xchg dx, ax
  1406 000007B6 89C8                <1> 	mov ax, cx
  1407 000007B8 BE[A006]            <1> reloc	mov si, msg.eld.5
  1408                              <1> internaldatarelocation
  1409 000007BB E8B302              <1> 	call display_eld_size
  1410                              <1> 
  1411                              <1> .next:
  1412 000007BE E8BF03              <1> 	extcallcall putsline_crlf
  1413 000007C1 85ED                <1> 	test bp, bp
  1414 000007C3 89E8                <1> 	mov ax, bp
  1415 000007C5 7403E912FF          <1> 	jnz .loop
  1416                              <1> .end:
  1417                              <1> 
  1418 000007CA BF[0000]            <1> reloc	mov di, relocateddata
  1419                              <1> linkdatarelocation line_out
  1420                              <1> 	getotherds
    14 000007CD 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1421 000007D2 A1[0000]            <1> reloc	mov ax, word [relocateddata]
  1422                              <1> otherlinkdatarelocation extdata_used
  1423 000007D5 8B16[0000]          <1> reloc	mov dx, word [relocateddata]
  1424                              <1> otherlinkdatarelocation extdata_size
  1425 000007D9 29C2                <1> 	sub dx, ax
  1426 000007DB 740F                <1> 	jz @F
  1427 000007DD 0306[0000]          <1> reloc	add ax, [relocateddata]
  1428                              <1> otherlinkdatarelocation extdata
  1429 000007E1 BE[BA06]            <1> reloc	mov si, msg.eld.6
  1430                              <1> internaldatarelocation
  1431                              <1> 	resetds
    18 000007E4 16                  <2>  push ss
    19 000007E5 1F                  <2>  pop ds
  1432 000007E6 E88802              <1> 	call display_eld_size
  1433 000007E9 E89403              <1> 	extcallcall putsline_crlf
  1434                              <1> @@:
  1435                              <1> 	resetds
    18 000007EC 16                  <2>  push ss
    19 000007ED 1F                  <2>  pop ds
  1436 000007EE C3                  <1> 	retn
  1437                              <1> 
  1438                              <1> 
  1439                              <1> display_eld_variables:
  1440 000007EF BF[0000]            <1> reloc	mov di, relocateddata
  1441                              <1> linkdatarelocation line_out
  1442                              <1> 
  1443 000007F2 BE[D206]            <1> reloc	mov si, msg.var.format
  1444                              <1> internaldatarelocation
  1445 000007F5 E85803              <1> 	extcallcall copy_single_counted_string
  1446                              <1> 
  1447 000007F8 B8[0000]            <1> reloc	mov ax, relocateddata
  1448                              <1> otherlinkdatarelocation ext_var_format
  1449 000007FB 83F801              <1> 	cmp ax, 1
  1450 000007FE 740F                <1> 	je .known
  1451                              <1> 
  1452                              <1> .unknown:
  1453 00000800 BF[4407]            <1> reloc	mov di, msg.varunknown.format
  1454                              <1> internaldatarelocation
  1455 00000803 E85A03              <1> 	extcallcall hexword
  1456                              <1> 
  1457 00000806 BA[2507]            <1> reloc	mov dx, msg.varunknown
  1458                              <1> internaldatarelocation
  1459 00000809 E81C03              <1> 	extcallcall putsz
  1460 0000080C E9D400              <1> 	jmp .end
  1461                              <1> 
  1462                              <1> .known:
  1463 0000080F E84E03              <1> 	extcallcall hexword
  1464                              <1> 
  1465 00000812 BE[E806]            <1> reloc	mov si, msg.var.size
  1466                              <1> internaldatarelocation
  1467 00000815 E83803              <1> 	extcallcall copy_single_counted_string
  1468                              <1> 
  1469 00000818 B8[0000]            <1> reloc	mov ax, relocateddata
  1470                              <1> otherlinkdatarelocation ext_var_size
  1471                              <1> 
  1472 0000081B E84203              <1> 	extcallcall hexword
  1473 0000081E 92                  <1> 	xchg dx, ax
  1474                              <1> 
  1475 0000081F BE[FB06]            <1> reloc	mov si, msg.var.amount
  1476                              <1> internaldatarelocation
  1477 00000822 E82B03              <1> 	extcallcall copy_single_counted_string
  1478                              <1> 
  1479 00000825 31DB                <1> 	xor bx, bx
  1480 00000827 B9[0000]            <1> reloc	mov cx, relocateddata
  1481                              <1> otherlinkdatarelocation ext_var_amount
  1482 0000082A 51                  <1> 	push cx
  1483 0000082B E318                <1> 	jcxz .donecount
  1484                              <1> 
  1485 0000082D 57                  <1> 	push di
  1486 0000082E BF[0000]            <1> reloc	mov di, relocateddata
  1487                              <1> otherlinkdatarelocation ext_var
  1488 00000831 BE[0000]            <1> reloc	mov si, relocateddata
  1489                              <1> otherlinkdatarelocation isvariable_morebyte_nameheaders.ext
  1490                              <1> 	getotherds
    14 00000834 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1491                              <1> .loopcount:
  1492 00000839 833D00              <1> 	cmp word [di], 0
  1493 0000083C 7401                <1> 	je .nextcount
  1494 0000083E 43                  <1> 	inc bx
  1495                              <1> .nextcount:
  1496 0000083F 01D7                <1> 	add di, dx
  1497 00000841 AD                  <1> 	lodsw
  1498 00000842 E2F5                <1> 	loop .loopcount
  1499 00000844 5F                  <1> 	pop di
  1500                              <1> .donecount:
  1501                              <1> 	resetds
    18 00000845 16                  <2>  push ss
    19 00000846 1F                  <2>  pop ds
  1502                              <1> 
  1503 00000847 93                  <1> 	xchg ax, bx
  1504 00000848 E81D03              <1> 	extcallcall decword
  1505                              <1> 
  1506 0000084B BE[1507]            <1> reloc	mov si, msg.var.amountbetween
  1507                              <1> internaldatarelocation
  1508 0000084E E8FF02              <1> 	extcallcall copy_single_counted_string
  1509                              <1> 
  1510 00000851 58                  <1> 	pop ax
  1511 00000852 E81303              <1> 	extcallcall decword
  1512 00000855 50                  <1> 	push ax
  1513                              <1> 
  1514 00000856 BE[1E07]            <1> reloc	mov si, msg.var.amountafter
  1515                              <1> internaldatarelocation
  1516 00000859 E8F402              <1> 	extcallcall copy_single_counted_string
  1517 0000085C 52                  <1> 	push dx
  1518 0000085D E82003              <1> 	extcallcall putsline_crlf
  1519 00000860 5A                  <1> 	pop dx
  1520 00000861 59                  <1> 	pop cx
  1521                              <1> 
  1522 00000862 BB[0000]            <1> reloc	mov bx, relocateddata
  1523                              <1> otherlinkdatarelocation ext_var
  1524 00000865 BE[0000]            <1> reloc	mov si, relocateddata
  1525                              <1> otherlinkdatarelocation isvariable_morebyte_nameheaders.ext
  1526                              <1> 
  1527                              <1> 	getotherds
    14 00000868 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1528 0000086D E374                <1> 	jcxz .donelist
  1529                              <1> .looplist:
  1530 0000086F 833F00              <1> 	cmp word [bx], 0
  1531 00000872 746A                <1> 	je .nextlist
  1532 00000874 51                  <1> 	push cx
  1533 00000875 56                  <1> 	push si
  1534                              <1> 
  1535 00000876 BF[0000]            <1> reloc	mov di, relocateddata
  1536                              <1> linkdatarelocation line_out
  1537                              <1> 
  1538                              <1> 	resetds
    18 00000879 16                  <2>  push ss
    19 0000087A 1F                  <2>  pop ds
  1539 0000087B BE[4C07]            <1> reloc	mov si, msg.var.list.flags
  1540                              <1> internaldatarelocation
  1541 0000087E E8CF02              <1> 	extcallcall copy_single_counted_string
  1542                              <1> 
  1543                              <1> 	getotherds
    14 00000881 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1544 00000886 8B4702              <1> 	mov ax, word [bx + ivFlags]
  1545 00000889 E8D402              <1> 	extcallcall hexword
  1546                              <1> 
  1547                              <1> 	resetds
    18 0000088C 16                  <2>  push ss
    19 0000088D 1F                  <2>  pop ds
  1548 0000088E BE[5307]            <1> reloc	mov si, msg.var.list.array
  1549                              <1> internaldatarelocation
  1550 00000891 E8BC02              <1> 	extcallcall copy_single_counted_string
  1551                              <1> 
  1552                              <1> 	getotherds
    14 00000894 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1553 00000899 8A4708              <1> 	mov al, byte [bx + ivArrayLast]
  1554 0000089C E8E902              <1> 	extcallcall hexbyte
  1555                              <1> 
  1556 0000089F 8A4709              <1> 	mov al, byte [bx + ivArrayBetween]
  1557                              <1> 	resetds
    18 000008A2 16                  <2>  push ss
    19 000008A3 1F                  <2>  pop ds
  1558 000008A4 84C0                <1> 	test al, al
  1559 000008A6 7409                <1> 	jz @F
  1560                              <1> 
  1561 000008A8 BE[5C07]            <1> reloc	mov si, msg.var.list.between
  1562                              <1> internaldatarelocation
  1563 000008AB E8A202              <1> 	extcallcall copy_single_counted_string
  1564                              <1> 
  1565 000008AE E8D702              <1> 	extcallcall hexbyte
  1566                              <1> @@:
  1567                              <1> 
  1568 000008B1 BE[6707]            <1> reloc	mov si, msg.var.list.name
  1569                              <1> internaldatarelocation
  1570 000008B4 E89902              <1> 	extcallcall copy_single_counted_string
  1571                              <1> 
  1572 000008B7 5E                  <1> 	pop si
  1573                              <1> 	getotherds
    14 000008B8 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1574 000008BD A5                  <1> 	movsw
  1575 000008BE 56                  <1> 	push si
  1576                              <1> 
  1577 000008BF 8B37                <1> 	mov si, word [bx + ivName]
  1578 000008C1 8B4F02              <1> 	mov cx, word [bx + ivFlags]
  1579 000008C4 83E10F              <1> 	and cx, ivfNameLengthMask
  1580 000008C7 F3A4                <1> 	rep movsb
  1581                              <1> 
  1582 000008C9 53                  <1> 	push bx
  1583 000008CA 52                  <1> 	push dx
  1584                              <1> 
  1585 000008CB 8B4704              <1> 	mov ax, word [bx + ivAddress]
  1586                              <1> 	resetds
    18 000008CE 16                  <2>  push ss
    19 000008CF 1F                  <2>  pop ds
  1587 000008D0 BE[7007]            <1> reloc	mov si, msg.var.list.entry
  1588                              <1> internaldatarelocation
  1589 000008D3 E83301              <1> 	call display_entry_and_instance
  1590                              <1> 
  1591 000008D6 E8A702              <1> 	extcallcall putsline_crlf
  1592 000008D9 5A                  <1> 	pop dx
  1593 000008DA 5B                  <1> 	pop bx
  1594                              <1> 
  1595 000008DB 5E                  <1> 	pop si
  1596 000008DC 59                  <1> 	pop cx
  1597 000008DD A8                  <1> 	db __TEST_IMM8		; skip lodsw
  1598                              <1> .nextlist:
  1599 000008DE AD                  <1> 	lodsw
  1600 000008DF 01D3                <1> 	add bx, dx
  1601 000008E1 E28C                <1> 	loop .looplist
  1602                              <1> .donelist:
  1603                              <1> 
  1604                              <1> .end:
  1605 000008E3 C3                  <1> 	retn
  1606                              <1> 
  1607                              <1> 
  1608                              <1> display_command_handler:
  1609 000008E4 BB[7800]            <1> reloc	mov bx, handlertable.command
  1610                              <1> internaldatarelocation
  1611 000008E7 EB12                <1> 	jmp @F
  1612                              <1> 
  1613                              <1> display_amis_handler:
  1614 000008E9 BB[8E00]            <1> reloc	mov bx, handlertable.amis
  1615                              <1> internaldatarelocation
  1616 000008EC EB0D                <1> 	jmp @F
  1617                              <1> 
  1618                              <1> display_asm_handler:
  1619 000008EE BB[9A00]            <1> reloc	mov bx, handlertable.asm
  1620                              <1> internaldatarelocation
  1621 000008F1 EB08                <1> 	jmp @F
  1622                              <1> 
  1623                              <1> display_puts_handler:
  1624 000008F3 BB[B000]            <1> reloc	mov bx, handlertable.puts
  1625                              <1> internaldatarelocation
  1626 000008F6 EB03                <1> 	jmp @F
  1627                              <1> 
  1628                              <1> display_inject_handler:
  1629 000008F8 BB[D000]            <1> reloc	mov bx, handlertable.inject
  1630                              <1> internaldatarelocation
  1631                              <1> @@:
  1632                              <1> 
  1633                              <1> display_handlers:
  1634                              <1> 	houdini
  1635                              <1> 	lframe
  1636 000008FB 5589E5              <1> 	lenter
  1637 000008FE 53                  <1> 	 push bx
  1638                              <1> 	lvar word, table
  1639 000008FF EB06                <1> 	jmp @F
  1640                              <1> 
  1641                              <1> .next_table:
  1642 00000901 BA[CC07]            <1> reloc	mov dx, msg.handler.init.pre
  1643                              <1> internaldatarelocation
  1644 00000904 E82102              <1> 	extcallcall putsz
  1645                              <1> @@:
  1646 00000907 8B17                <1> 	mov dx, word [bx + htMessage]
  1647 00000909 E81C02              <1> 	extcallcall putsz
  1648 0000090C BA[CF07]            <1> reloc	mov dx, msg.handler.init.post
  1649                              <1> internaldatarelocation
  1650 0000090F E81602              <1> 	extcallcall putsz
  1651                              <1> 
  1652 00000912 8B17                <1> 	mov dx, word [bx + htMessage]
  1653 00000914 8B5F02              <1> 	mov bx, word [bx + htHandler]
  1654 00000917 85DB                <1> 	test bx, bx
  1655 00000919 7510                <1> 	jnz @F
  1656 0000091B 52                  <1> 	push dx
  1657 0000091C BA[0508]            <1> reloc	mov dx, msg.handler.notpresent.pre
  1658                              <1> internaldatarelocation
  1659 0000091F E80602              <1> 	extcallcall putsz
  1660 00000922 5A                  <1> 	pop dx
  1661 00000923 E80202              <1> 	extcallcall putsz
  1662 00000926 BA[0A08]            <1> reloc	mov dx, msg.handler.notpresent.post
  1663                              <1> internaldatarelocation
  1664 00000929 EB1B                <1> 	jmp .putsz_end
  1665                              <1> 
  1666                              <1> @@:
  1667                              <1> 	getotherds
    14 0000092B 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1668 00000930 8B1F                <1> 	mov bx, [bx]
  1669                              <1> 	resetds
    18 00000932 16                  <2>  push ss
    19 00000933 1F                  <2>  pop ds
  1670 00000934 85DB                <1> 	test bx, bx
  1671 00000936 7513                <1> 	jnz @F
  1672 00000938 52                  <1> 	push dx
  1673 00000939 BA[DC07]            <1> reloc	mov dx, msg.handler.none.pre
  1674                              <1> internaldatarelocation
  1675 0000093C E8E901              <1> 	extcallcall putsz
  1676 0000093F 5A                  <1> 	pop dx
  1677 00000940 E8E501              <1> 	extcallcall putsz
  1678 00000943 BA[EF07]            <1> reloc	mov dx, msg.handler.none.post
  1679                              <1> internaldatarelocation
  1680                              <1> .putsz_end:
  1681 00000946 E8DF01              <1> 	extcallcall putsz
  1682 00000949 EB76                <1> 	jmp .end
  1683                              <1> 
  1684                              <1> @@:
  1685                              <1> .loop:
  1686 0000094B 16                  <1> 	push ss
  1687 0000094C 07                  <1> 	pop es
  1688 0000094D 53                  <1> 	push bx
  1689 0000094E BF[0000]            <1> reloc	mov di, relocateddata
  1690                              <1> linkdatarelocation line_out
  1691 00000951 93                  <1> 	xchg ax, bx
  1692 00000952 BE[C407]            <1> reloc	mov si, msg.commandhandler.entry
  1693                              <1> internaldatarelocation
  1694 00000955 E8B100              <1> 	call display_entry_and_instance
  1695 00000958 E82502              <1> 	extcallcall putsline_crlf
  1696 0000095B 5B                  <1> 	pop bx
  1697 0000095C E88DF7              <1> 	call get_es_ext_other
  1698                              <1> 	houdini
  1699 0000095F 8B76FE              <1> 	mov si, word [bp + ?table]
  1700 00000962 F6440802            <1> 	testopt [si + htFlags], htfIsInject
  1701 00000966 7559                <1> 	jnz .end
  1702 00000968 F6440801            <1> 	testopt [si + htFlags], htfIsAMIS
  1703 0000096C 7417                <1> 	jz .notamis
  1704 0000096E 26813FEB03          <1> 	cmp word [es:bx], 03EBh
  1705 00000973 7537                <1> 	jne .error
  1706 00000975 26807F02E9          <1> 	cmp byte [es:bx + 2], 0E9h
  1707 0000097A 7417                <1> 	je .next
  1708 0000097C 26807F02CB          <1> 	cmp byte [es:bx + 2], 0CBh	; retf
  1709 00000981 7529                <1> 	jne .error
  1710 00000983 EB3C                <1> 	jmp .end
  1711                              <1> 
  1712                              <1> .notamis:
  1713 00000985 26813FEB08          <1> 	cmp word [es:bx], 08EBh
  1714 0000098A 7520                <1> 	jne .error
  1715 0000098C 26807F02E9          <1> 	cmp byte [es:bx + 2], 0E9h
  1716 00000991 7509                <1> 	jne @F
  1717                              <1> .next:
  1718 00000993 26035F03            <1> 	add bx, word [es:bx + 2 + 1]
  1719 00000997 83C305              <1> 	add bx, 2 + 3
  1720 0000099A EBAF                <1> 	jmp .loop
  1721                              <1> 
  1722                              <1> @@:
  1723                              <1> %if ! _OTHER
  1724                              <1> 	mov si, word [si + htTemplate]	; cs:si -> template
  1725                              <1> 	mov cx, template_size
  1726                              <1> 	sub sp, fromwords(words(template_size))
  1727                              <1> 	push cs
  1728                              <1> 	pop ds				; ds:si -> template
  1729                              <1> 	mov di, sp			; ss:di -> stack
  1730                              <1> 	push es
  1731                              <1> 	 push ss
  1732                              <1> 	 pop es				; es:di
  1733                              <1> 	 push cx
  1734                              <1> 	rep movsb
  1735                              <1> 	 pop cx				; restore template length
  1736                              <1> 	pop es				; => ELD instance
  1737                              <1> 	push ss
  1738                              <1> 	pop ds				; reset ds
  1739                              <1> 	mov si, sp			; ds:si -> template on stack
  1740                              <1> 	mov ax, [si + 1]
  1741                              <1> 	mov di, word [bp + ?table]
  1742                              <1> 	add ax, word [di + htTemplate]	; change to (biased) absolute offset
  1743                              <1> 	lea di, [bx + 2]		; es:di -> downlink
  1744                              <1> 	sub ax, di			; change to rel16 displacement
  1745                              <1> 	mov word [si + 1], ax		; enter into template
  1746                              <1> 	lea ax, [si + fromwords(words(template_size))]
  1747                              <1> 					; -> prior stack
  1748                              <1> 	rep cmpsb			; does it match expected downlink ?
  1749                              <1> 	mov sp, ax			; reset stack
  1750                              <1> %else
  1751 0000099C 26807F02E8          <1> 	cmp byte [es:bx + 2], 0E8h
  1752 000009A1 7509                <1> 	jne .error
  1753 000009A3 8B4406              <1> 	mov ax, word [si + htReturn]
  1754 000009A6 26394707            <1> 	cmp word [es:bx + 2 + 1 + 4], ax
  1755                              <1> %endif
  1756 000009AA 7415                <1> 	je .end
  1757                              <1> .error:
  1758 000009AC 16                  <1> 	push ss
  1759 000009AD 07                  <1> 	pop es
  1760 000009AE 8B5EFE              <1> 	mov bx, word [bp + ?table]
  1761 000009B1 BA[2308]            <1> reloc	mov dx, msg.handler.error.pre
  1762                              <1> internaldatarelocation
  1763 000009B4 E87101              <1> 	extcallcall putsz
  1764 000009B7 8B17                <1> 	mov dx, word [bx + htMessage]
  1765 000009B9 E86C01              <1> 	extcallcall putsz
  1766 000009BC BA[2508]            <1> reloc	mov dx, msg.handler.error.post
  1767                              <1> internaldatarelocation
  1768 000009BF EB85                <1> 	jmp .putsz_end
  1769                              <1> 
  1770                              <1> .end:
  1771 000009C1 16                  <1> 	push ss
  1772 000009C2 07                  <1> 	pop es
  1773 000009C3 8B5EFE              <1> 	mov bx, word [bp + ?table]
  1774 000009C6 83C30A              <1> 	add bx, HANDLERTABLE_size
  1775 000009C9 895EFE              <1> 	mov word [bp + ?table], bx
  1776 000009CC 833F00              <1> 	cmp word [bx], 0
  1777 000009CF 7403E92DFF          <1> 	jne .next_table
  1778                              <1> 
  1779 000009D4 89EC5D              <1> 	lleave
  1780                              <1> emptyfunction:
  1781 000009D7 C3                  <1> 	retn
  1782                              <1> 
  1783                              <1> 
  1784                              <1> template_commandhandler:
  1785                              <1> template:
  1786 000009D8 E8[0000]EB020000    <1> 	extcall cmd3_not_ext, required	; must NOT be extcallcall
  1787                              <1> 	endarea template
  1788                              <1> template_preprocesshandler:
  1789 000009DF E8[0000]EB020000    <1> 	extcall cmd3_preprocessed, required	; must NOT be extcallcall
  1790                              <1> template_aabeforehandler:
  1791 000009E6 E8[0000]EB020000    <1> 	extcall aa_before_getline, optional	; must NOT be extcallcall
  1792                              <1> template_aaafterhandler:
  1793 000009ED E8[0000]EB020000    <1> 	extcall aa_after_getline, optional	; must NOT be extcallcall
  1794                              <1> template_putshandler:
  1795 000009F4 E8[0000]EB020000    <1> 	extcall puts_ext_done, required		; must NOT be extcallcall
  1796                              <1> template_putscohandler:
  1797 000009FB E8[0000]EB020000    <1> 	extcall puts_copyoutput_ext_done, required
  1798                              <1> 				; must NOT be extcallcall
  1799                              <1> template_putsgetlinehandler:
  1800 00000A02 E8[0000]EB020000    <1> 	extcall puts_getline_ext_done, required
  1801                              <1> 				; must NOT be extcallcall
  1802                              <1> 
  1803                              <1> 
  1804                              <1> display_entry_and_instance:
  1805 00000A09 E84401              <1> 	extcallcall copy_single_counted_string
  1806 00000A0C E85101              <1> 	extcallcall hexword
  1807                              <1> 
  1808 00000A0F 92                  <1> 	xchg dx, ax
  1809                              <1> 
  1810 00000A10 E8D9F6              <1> 	call get_es_ext_other
  1811 00000A13 31F6                <1> 	xor si, si
  1812 00000A15 31DB                <1> 	xor bx, bx
  1813                              <1> .loop:
  1814                              <1> 	getotherds
    14 00000A17 368E1E[0000]        <2> reloc mov ds, word [ss:otherds]
    15                              <2> internaldatarelocation
  1815 00000A1C 3B36[0000]          <1> reloc	cmp si, word [relocateddata]
  1816                              <1> otherlinkdatarelocation extseg_used
  1817                              <1> 	resetds
    18 00000A20 16                  <2>  push ss
    19 00000A21 1F                  <2>  pop ds
  1818 00000A22 7343                <1> 	jae .notfound
  1819 00000A24 263B34              <1> 	cmp si, [es:si + eldiStartCode]
  1820 00000A27 7543                <1> 	jne .error
  1821 00000A29 8D5C20              <1> 	lea bx, [si + ELD_INSTANCE_size]
  1822 00000A2C 263B5C02            <1> 	cmp bx, word [es:si + eldiEndCode]
  1823 00000A30 773A                <1> 	ja .error
  1824 00000A32 268B5C02            <1> 	mov bx, word [es:si + eldiEndCode]
  1825 00000A36 39D3                <1> 	cmp bx, dx
  1826 00000A38 7432                <1> 	je .error
  1827 00000A3A 7704                <1> 	ja .found
  1828                              <1> .next:
  1829 00000A3C 89DE                <1> 	mov si, bx
  1830 00000A3E EBD7                <1> 	jmp .loop
  1831                              <1> 
  1832                              <1> .found:
  1833 00000A40 06                  <1> 	push es				; stack => ext seg
  1834 00000A41 96                  <1> 	xchg ax, si			; ax -> instance
  1835 00000A42 16                  <1> 	 push ss
  1836 00000A43 07                  <1> 	 pop es
  1837 00000A44 BE[7B07]            <1> reloc	mov si, msg.instance.1
  1838                              <1> internaldatarelocation
  1839 00000A47 E80601              <1> 	extcallcall copy_single_counted_string
  1840 00000A4A E81301              <1> 	extcallcall hexword		; write offset -> instance
  1841                              <1> 
  1842 00000A4D BE[8807]            <1> reloc	mov si, msg.instance.2
  1843                              <1> internaldatarelocation
  1844 00000A50 E8FD00              <1> 	extcallcall copy_single_counted_string
  1845                              <1> 
  1846 00000A53 96                  <1> 	xchg si, ax			; si -> instance
  1847 00000A54 8D7408              <1> 	lea si, [si + eldiIdentifier]	; si -> id
  1848 00000A57 1F                  <1> 	pop ds				; => ext seg
  1849 00000A58 B104                <1> 	mov cl, 4			; cx = 4
  1850 00000A5A F3A5                <1> 	rep movsw			; copy id
  1851                              <1> 
  1852 00000A5C 16                  <1> 	push ss
  1853 00000A5D 1F                  <1> 	pop ds
  1854                              <1> 
  1855 00000A5E BE[9807]            <1> reloc	mov si, msg.instance.3
  1856                              <1> internaldatarelocation
  1857                              <1> @@:
  1858 00000A61 16                  <1> 	push ss
  1859 00000A62 07                  <1> 	pop es
  1860 00000A63 E8EA00              <1> 	extcallcall copy_single_counted_string
  1861 00000A66 C3                  <1> 	retn
  1862                              <1> 
  1863                              <1> .notfound:
  1864 00000A67 BE[9A07]            <1> reloc	mov si, msg.instance.notfound
  1865                              <1> internaldatarelocation
  1866 00000A6A EBF5                <1> 	jmp @B
  1867                              <1> 
  1868                              <1> .error:
  1869 00000A6C BE[B107]            <1> reloc	mov si, msg.instance.error
  1870                              <1> internaldatarelocation
  1871 00000A6F EBF0                <1> 	jmp @B
  1872                              <1> 
  1873                              <1> 
  1874                              <1> 		; INP:	si -> first string
  1875                              <1> 		;	ax = start
  1876                              <1> 		;	dx = length
  1877                              <1> display_eld_size:
  1878 00000A71 51                  <1> 	push cx
  1879 00000A72 E8DB00              <1> 	extcallcall copy_single_counted_string
  1880 00000A75 E8E800              <1> 	call hexword
  1881 00000A78 BE[9006]            <1> reloc	mov si, msg.eld.3
  1882                              <1> internaldatarelocation
  1883 00000A7B E8D200              <1> 	extcallcall copy_single_counted_string
  1884 00000A7E 01D0                <1> 	add ax, dx
  1885 00000A80 E8DD00              <1> 	call hexword
  1886 00000A83 BE[9806]            <1> reloc	mov si, msg.eld.4
  1887                              <1> internaldatarelocation
  1888 00000A86 E8C700              <1> 	extcallcall copy_single_counted_string
  1889 00000A89 89D0                <1> 	mov ax, dx
  1890 00000A8B A8                  <1> 	db __TEST_IMM8			; skip push
  1891                              <1> display_ax_hex_and_size:
  1892 00000A8C 51                  <1> 	push cx
  1893 00000A8D E8D000              <1> 	call hexword
  1894 00000A90 BE[D403]            <1> reloc	mov si, msg.size.2
  1895                              <1> internaldatarelocation
  1896 00000A93 E8BA00              <1> 	extcallcall copy_single_counted_string
  1897 00000A96 31D2                <1> 	xor dx, dx
  1898 00000A98 B90100              <1> 	mov cx, 1
  1899 00000A9B BB0900              <1> 	mov bx, 9
  1900 00000A9E E8D700              <1> 	extcallcall disp_dxax_times_cx_width_bx_size.store
  1901 00000AA1 59                  <1> 	pop cx
  1902 00000AA2 C3                  <1> 	retn
  1903                              <1> 
  1904                              <1> 
  1905                              <1> parasize:
  1906 00000AA3 BE[CC03]            <1> reloc	mov si, msg.size.1
  1907                              <1> internaldatarelocation
  1908 00000AA6 E8A700              <1> 	extcallcall copy_single_counted_string
  1909 00000AA9 B104                <1> 	mov cl, 4
  1910 00000AAB 50                  <1> 	push ax
  1911 00000AAC 89C2                <1> 	mov dx, ax
  1912 00000AAE D3C0                <1> 	rol ax, cl
  1913 00000AB0 A80F                <1> 	test al, 15
  1914 00000AB2 7404                <1> 	jz @F
  1915 00000AB4 4F                  <1> 	dec di
  1916 00000AB5 E8D800              <1> 	extcallcall hexnyb
  1917                              <1> @@:
  1918 00000AB8 92                  <1> 	xchg ax, dx
  1919 00000AB9 D3E0                <1> 	shl ax, cl
  1920 00000ABB E8A200              <1> 	extcallcall hexword
  1921 00000ABE BE[D403]            <1> reloc	mov si, msg.size.2
  1922                              <1> internaldatarelocation
  1923 00000AC1 E88C00              <1> 	extcallcall copy_single_counted_string
  1924 00000AC4 58                  <1> 	pop ax
  1925 00000AC5 31D2                <1> 	xor dx, dx
  1926 00000AC7 B91000              <1> 	mov cx, 16
  1927 00000ACA BB0900              <1> 	mov bx, 9
  1928 00000ACD E8A800              <1> 	extcallcall disp_dxax_times_cx_width_bx_size.store
  1929 00000AD0 C3                  <1> 	retn
  1930                              <1> 
  1931                              <1> 
  1932                              <1> 		; INP:	dx => end of prior
  1933                              <1> 		;	ax => start of next
  1934                              <1> gap:
  1935 00000AD1 52                  <1> 	push dx
  1936 00000AD2 F7DA                <1> 	neg dx
  1937 00000AD4 01C2                <1> 	add dx, ax
  1938 00000AD6 BE[3604]            <1> reloc	mov si, msg.gap
  1939                              <1> internaldatarelocation
  1940 00000AD9 E87400              <1> 	extcallcall copy_single_counted_string
  1941 00000ADC 58                  <1> 	pop ax
  1942 00000ADD E88000              <1> 	extcallcall hexword
  1943 00000AE0 BE[C903]            <1> reloc	mov si, msg.address.1
  1944                              <1> internaldatarelocation
  1945 00000AE3 E86A00              <1> 	extcallcall copy_single_counted_string
  1946 00000AE6 92                  <1> 	xchg ax, dx
  1947 00000AE7 E8B9FF              <1> 	call parasize
  1948 00000AEA E89300              <1> 	extcallcall putsline_crlf
  1949 00000AED BF[0000]            <1> reloc	mov di, relocateddata
  1950                              <1> linkdatarelocation line_out
  1951 00000AF0 C3                  <1> 	retn
  1952                              <1> 
  1953                              <1> 
  1954 00000AF1 90<rep 7h>E8[0000]- <1> 	eldcall_dump_callcall ELDCALL_CALLCALL_LIST
  1954 00000AFB EB020000C3E8[0000]- <1>
  1954 00000B03 EB020000C3E8[0000]- <1>
  1954 00000B0B EB020000C3E8[0000]- <1>
  1954 00000B13 EB020000C3E8[0000]- <1>
  1954 00000B1B EB020000C3E8[0000]- <1>
  1954 00000B23 EB020000C3E8[0000]- <1>
  1954 00000B2B EB020000C3E8[0000]- <1>
  1954 00000B33 EB020000C3E8[0000]- <1>
  1954 00000B3B EB020000C3E8[0000]- <1>
  1954 00000B43 EB020000C3E8[0000]- <1>
  1954 00000B4B EB020000C3E8[0000]- <1>
  1954 00000B53 EB020000C3E8[0000]- <1>
  1954 00000B5B EB020000C3E8[0000]- <1>
  1954 00000B63 EB020000C3E8[0000]- <1>
  1954 00000B6B EB020000C3E8[0000]- <1>
  1954 00000B73 EB020000C3E8[0000]- <1>
  1954 00000B7B EB020000C3E8[0000]- <1>
  1954 00000B83 EB020000C3E8[0000]- <1>
  1954 00000B8B EB020000C3E8[0000]- <1>
  1954 00000B93 EB020000C3          <1>
  1955                              <1> 
  1956                              <1> endinstalled equ ($ + CODEFIXUP + 15) & ~15
  1957                              <1> 
  1958                              <1> 
  1959                              <1> start:
  1960 00000B98 8CC3                <1> 	mov bx, es
  1961 00000B9A 16                  <1> 	 push ss
  1962 00000B9B 07                  <1> 	 pop es
  1963 00000B9C E859FF              <1> 	call skipcomma
  1964 00000B9F 4E                  <1> 	dec si
  1965 00000BA0 BA[0000]            <1> reloc	mov dx, relocateddata
  1966                              <1> linkdatarelocation msg.install
  1967 00000BA3 E85AFF              <1> 	call isstring?
  1968 00000BA6 7440                <1> 	je install
  1969 00000BA8 BA[6809]            <1> reloc	mov dx, msg.keyword_help
  1970                              <1> internaldatarelocation
  1971 00000BAB E852FF              <1> 	call isstring?
  1972 00000BAE 7409                <1> 	je help
  1973 00000BB0 E84EF5              <1> 	call run
  1974                              <1> @@:
  1975 00000BB3 E80F00              <1> 	call uninstall_oneshot
  1976 00000BB6 31C0                <1> 	xor ax, ax
  1977 00000BB8 CB                  <1> 	retf
  1978                              <1> 
  1979                              <1> help:
  1980 00000BB9 AC                  <1> 	lodsb
  1981 00000BBA E863FF              <1> 	call chkeol
  1982 00000BBD BA[6D09]            <1> reloc	mov dx, msg.help
  1983                              <1> internaldatarelocation
  1984 00000BC0 E865FF              <1> 	call putsz
  1985 00000BC3 EBEE                <1> 	jmp @B
  1986                              <1> 
  1987                              <1> 
  1988                              <1> uninstall_oneshot:
  1989 00000BC5 36F606[0000]01      <1> reloc	testopt [ss:relocateddata], 1
  1990                              <1> linkdatarelocation options7, -3
  1991 00000BCB 751A                <1> 	jnz @F
  1992                              <1> 
  1993 00000BCD 2EA1[0200]          <1> reloc	mov ax, word [cs:code + eldiEndCode]
  1994                              <1> internalcoderelocation
  1995 00000BD1 2E2B06[0000]        <1> reloc	sub ax, word [cs:code + eldiStartCode]
  1996                              <1> internalcoderelocation
  1997 00000BD6 2906[0000]          <1> reloc	sub word [relocateddata], ax
  1998                              <1> linkdatarelocation extseg_used
  1999                              <1> 
  2000 00000BDA 2EA1[0600]          <1> reloc	mov ax, word [cs:code + eldiEndData]
  2001                              <1> internalcoderelocation
  2002 00000BDE 2E2B06[0400]        <1> reloc	sub ax, word [cs:code + eldiStartData]
  2003                              <1> internalcoderelocation
  2004 00000BE3 2906[0000]          <1> reloc	sub word [relocateddata], ax
  2005                              <1> linkdatarelocation extdata_used
  2006                              <1> @@:
  2007 00000BE7 C3                  <1> 	retn
  2008                              <1> 
  2009                              <1> 
  2010                              <1> DATAOFFSET equ CODEOFFSET + code_size
  2011                              <1> 	addsection DATA, follows=CODE vstart=_ELD_DATA_VSTART
  2012                              <1> %define DATAFIXUP - datastart + 0
  2013                              <1> datastart:
  2014                              <1> PUT_ELD_DATETIME
  2015                              <1> 
  2016                              <1> %rep _ELD_BUG
  2017                              <1> 	eldstrict off
  2018                              <1> 
  2019                              <1> 	dw msg.ldmem			; missing internaldatarelocation
  2020                              <1> %endrep
  2021                              <1> 
  2022                              <1> %if _OTHER
  2023                              <1> 	align 2, db 0
  2024 00000000 0000                <1> otherds:	dw 0
  2025 00000002 0000                <1> otherseg:	dw 0
  2026                              <1> %endif
  2027                              <1> 
  2028 00000004 00<rep 4h>          <1> 	align 8, db 0
  2029                              <1> table:
  2030                              <1> .:
  2031 00000008 [CA02]              <1> reloc	dw msg.entryseg
  2032                              <1> internaldatarelocation
  2033 0000000A [0000]              <1> reloc	dw relocateddata
  2034                              <1> otherlinkdatarelocation pspdbg, -2, optional
  2035 0000000C 0000                <1> 	dw 0
  2036 0000000E [0000]              <1> reloc	dw relocateddata
  2037                              <1> otherlinkdatarelocation entryseg_size, -2, optional
  2038 00000010 [0000]              <1> reloc	dw relocateddata
  2039                              <1> otherlinkdatarelocation cssel, -2, optional
  2040                              <1> 
  2041 00000012 [D102]              <1> reloc	dw msg.messageseg
  2042                              <1> internaldatarelocation
  2043 00000014 [0000]              <1> reloc	dw relocateddata
  2044                              <1> otherlinkdatarelocation messageseg, -2, optional
  2045 00000016 0000                <1> 	dw 0
  2046 00000018 [0000]              <1> reloc	dw relocateddata
  2047                              <1> otherlinkdatarelocation messageseg_size, -2, optional
  2048 0000001A [0000]              <1> reloc	dw relocateddata
  2049                              <1> otherlinkdatarelocation messagesel, -2, optional
  2050                              <1> 
  2051 0000001C [2E03]              <1> reloc	dw msg.auxbuffseg
  2052                              <1> internaldatarelocation
  2053 0000001E [0000]              <1> reloc	dw relocateddata
  2054                              <1> otherlinkdatarelocation auxbuff_segment, -2, optional
  2055 00000020 0000                <1> 	dw 0
  2056 00000022 [0000]              <1> reloc	dw relocateddata
  2057                              <1> otherlinkdatarelocation auxbuff_current_size, -2, optional
  2058 00000024 [0000]              <1> reloc	dw relocateddata
  2059                              <1> otherlinkdatarelocation auxbuff_segorsel, -2, optional
  2060                              <1> 
  2061 00000026 [4903]              <1> reloc	dw msg.auxbuffmovableseg
  2062                              <1> internaldatarelocation
  2063 00000028 [0000]              <1> reloc	dw relocateddata
  2064                              <1> otherlinkdatarelocation auxbuff_movable_segment, -2, optional
  2065 0000002A 0000                <1> 	dw 0
  2066 0000002C [0000]              <1> reloc	dw relocateddata
  2067                              <1> otherlinkdatarelocation auxbuff_movable_current_size, -2, optional
  2068 0000002E [0000]              <1> reloc	dw relocateddata
  2069                              <1> otherlinkdatarelocation auxbuff_movable_segorsel, -2, optional
  2070                              <1> 
  2071 00000030 [DA02]              <1> reloc	dw msg.codeseg
  2072                              <1> internaldatarelocation
  2073 00000032 [0000]              <1> reloc	dw relocateddata
  2074                              <1> otherlinkdatarelocation code_seg, -2, optional
  2075 00000034 0000                <1> 	dw 0
  2076 00000036 [0000]              <1> reloc	dw relocateddata
  2077                              <1> otherlinkdatarelocation code_size, -2, optional
  2078 00000038 [0000]              <1> reloc	dw relocateddata
  2079                              <1> otherlinkdatarelocation code_sel, -2, optional
  2080                              <1> 
  2081 0000003A [EB02]              <1> reloc	dw msg.codemovableseg
  2082                              <1> internaldatarelocation
  2083 0000003C [0000]              <1> reloc	dw relocateddata
  2084                              <1> otherlinkdatarelocation code_movable_seg, -2, optional
  2085 0000003E 0000                <1> 	dw 0
  2086 00000040 [0000]              <1> reloc	dw relocateddata
  2087                              <1> otherlinkdatarelocation code_movable_size, -2, optional
  2088 00000042 [0000]              <1> reloc	dw relocateddata
  2089                              <1> otherlinkdatarelocation code_movable_sel, -2, optional
  2090                              <1> 
  2091 00000044 [0303]              <1> reloc	dw msg.code2seg
  2092                              <1> internaldatarelocation
  2093 00000046 [0000]              <1> reloc	dw relocateddata
  2094                              <1> otherlinkdatarelocation code2_seg, -2, optional
  2095 00000048 0000                <1> 	dw 0
  2096 0000004A [0000]              <1> reloc	dw relocateddata
  2097                              <1> otherlinkdatarelocation code2_size, -2, optional
  2098 0000004C [0000]              <1> reloc	dw relocateddata
  2099                              <1> otherlinkdatarelocation code2_sel, -2, optional
  2100                              <1> 
  2101 0000004E [1503]              <1> reloc	dw msg.code2movableseg
  2102                              <1> internaldatarelocation
  2103 00000050 [0000]              <1> reloc	dw relocateddata
  2104                              <1> otherlinkdatarelocation code2_movable_seg, -2, optional
  2105 00000052 0000                <1> 	dw 0
  2106 00000054 [0000]              <1> reloc	dw relocateddata
  2107                              <1> otherlinkdatarelocation code2_movable_size, -2, optional
  2108 00000056 [0000]              <1> reloc	dw relocateddata
  2109                              <1> otherlinkdatarelocation code2_movable_sel, -2, optional
  2110                              <1> 
  2111 00000058 [5F03]              <1> reloc	dw msg.historyseg
  2112                              <1> internaldatarelocation
  2113 0000005A [0000]              <1> reloc	dw relocateddata
  2114                              <1> otherlinkdatarelocation history_segment, -2, optional
  2115 0000005C 0000                <1> 	dw 0
  2116 0000005E [0000]              <1> reloc	dw relocateddata
  2117                              <1> otherlinkdatarelocation historyseg_size, -2, optional
  2118 00000060 [0000]              <1> reloc	dw relocateddata
  2119                              <1> otherlinkdatarelocation history.segorsel, -2, optional
  2120                              <1> 
  2121 00000062 [6803]              <1> reloc	dw msg.extseg
  2122                              <1> internaldatarelocation
  2123 00000064 [0000]              <1> reloc	dw relocateddata
  2124                              <1> otherlinkdatarelocation extseg, -2, optional
  2125 00000066 0000                <1> 	dw 0
  2126 00000068 [0000]              <1> reloc	dw relocateddata
  2127                              <1> otherlinkdatarelocation extseg_size, -2, optional
  2128 0000006A [0000]              <1> reloc	dw relocateddata
  2129                              <1> otherlinkdatarelocation extcssel, -2, optional
  2130                              <1> 
  2131 0000006C [7203]              <1> reloc	dw msg.envseg
  2132                              <1> internaldatarelocation
  2133 0000006E [0000]              <1> reloc	dw relocateddata
  2134                              <1> otherlinkdatarelocation envseg, -2, optional
  2135 00000070 0000                <1> 	dw 0
  2136 00000072 [0000]              <1> reloc	dw relocateddata
  2137                              <1> otherlinkdatarelocation env_size, -2, optional
  2138 00000074 0000                <1> 	dw 0
  2139                              <1> .end:
  2140                              <1> .amount equ (.end - .) / 10
  2141                              <1> 
  2142 00000076 0000                <1> 	dw 0
  2143                              <1> 
  2144                              <1> 	align 2, db 0
  2145                              <1> handlertable:
  2146                              <1> .command:
  2147                              <1> 	istruc HANDLERTABLE
  2148 00000078 [3708]              <1> at htMessage,reloc	dw msg.commandhandler
  2149                              <1> internaldatarelocation
  2150 0000007A [0000]              <1> at htHandler,reloc	dw relocateddata
  2151                              <1> otherlinkdatarelocation ext_command_handler
  2152 0000007C [D809]              <1> at htTemplate,reloc	dw template_commandhandler
  2153                              <1> internalcoderelocation
  2154 0000007E [0000]              <1> at htReturn,reloc	dw relocateddata
  2155                              <1> otherlinkdatarelocation cmd3_not_ext
  2156 00000080 00<rep 2h>          <1> 	iend
  2157                              <1> 	istruc HANDLERTABLE
  2158 00000082 [3F08]              <1> at htMessage,reloc	dw msg.preprocesshandler
  2159                              <1> internaldatarelocation
  2160 00000084 [0000]              <1> at htHandler,reloc	dw relocateddata
  2161                              <1> otherlinkdatarelocation ext_preprocess_handler
  2162 00000086 [DF09]              <1> at htTemplate,reloc	dw template_preprocesshandler
  2163                              <1> internalcoderelocation
  2164 00000088 [0000]              <1> at htReturn,reloc	dw relocateddata
  2165                              <1> otherlinkdatarelocation cmd3_preprocessed
  2166 0000008A 00<rep 2h>          <1> 	iend
  2167 0000008C 0000                <1> 	dw 0
  2168                              <1> 
  2169                              <1> .amis:
  2170                              <1> 	istruc HANDLERTABLE
  2171 0000008E [4A08]              <1> at htMessage,reloc	dw msg.amishandler
  2172                              <1> internaldatarelocation
  2173 00000090 [0000]              <1> at htHandler,reloc	dw relocateddata
  2174                              <1> otherlinkdatarelocation ext_amis_handler, -2, optional
  2175 00000092 0000                <1> at htTemplate,		dw 0
  2176 00000094 0000                <1> at htReturn,		dw 0
  2177 00000096 0100                <1> at htFlags,		dw htfIsAMIS
  2178                              <1> 	iend
  2179 00000098 0000                <1> 	dw 0
  2180                              <1> 
  2181                              <1> .asm:
  2182                              <1> 	istruc HANDLERTABLE
  2183 0000009A [4F08]              <1> at htMessage,reloc	dw msg.aabeforehandler
  2184                              <1> internaldatarelocation
  2185 0000009C [0000]              <1> at htHandler,reloc	dw relocateddata
  2186                              <1> otherlinkdatarelocation ext_aa_before_getline_handler, -2, optional
  2187 0000009E [E609]              <1> at htTemplate,reloc	dw template_aabeforehandler
  2188                              <1> internalcoderelocation
  2189 000000A0 [0000]              <1> at htReturn,reloc	dw relocateddata
  2190                              <1> otherlinkdatarelocation aa_before_getline, -2, optional
  2191 000000A2 00<rep 2h>          <1> 	iend
  2192                              <1> 	istruc HANDLERTABLE
  2193 000000A4 [6008]              <1> at htMessage,reloc	dw msg.aaafterhandler
  2194                              <1> internaldatarelocation
  2195 000000A6 [0000]              <1> at htHandler,reloc	dw relocateddata
  2196                              <1> otherlinkdatarelocation ext_aa_after_getline_handler, -2, optional
  2197 000000A8 [ED09]              <1> at htTemplate,reloc	dw template_aaafterhandler
  2198                              <1> internalcoderelocation
  2199 000000AA [0000]              <1> at htReturn,reloc	dw relocateddata
  2200                              <1> otherlinkdatarelocation aa_after_getline, -2, optional
  2201 000000AC 00<rep 2h>          <1> 	iend
  2202 000000AE 0000                <1> 	dw 0
  2203                              <1> 
  2204                              <1> .puts:
  2205                              <1> 	istruc HANDLERTABLE
  2206 000000B0 [7008]              <1> at htMessage,reloc	dw msg.putshandler
  2207                              <1> internaldatarelocation
  2208 000000B2 [0000]              <1> at htHandler,reloc	dw relocateddata
  2209                              <1> otherlinkdatarelocation ext_puts_handler
  2210 000000B4 [F409]              <1> at htTemplate,reloc	dw template_putshandler
  2211                              <1> internalcoderelocation
  2212 000000B6 [0000]              <1> at htReturn,reloc	dw relocateddata
  2213                              <1> otherlinkdatarelocation puts_ext_done
  2214 000000B8 00<rep 2h>          <1> 	iend
  2215                              <1> 	istruc HANDLERTABLE
  2216 000000BA [8308]              <1> at htMessage,reloc	dw msg.putscohandler
  2217                              <1> internaldatarelocation
  2218 000000BC [0000]              <1> at htHandler,reloc	dw relocateddata
  2219                              <1> otherlinkdatarelocation ext_puts_copyoutput_handler
  2220 000000BE [FB09]              <1> at htTemplate,reloc	dw template_putscohandler
  2221                              <1> internalcoderelocation
  2222 000000C0 [0000]              <1> at htReturn,reloc	dw relocateddata
  2223                              <1> otherlinkdatarelocation puts_copyoutput_ext_done
  2224 000000C2 00<rep 2h>          <1> 	iend
  2225                              <1> 	istruc HANDLERTABLE
  2226 000000C4 [9308]              <1> at htMessage,reloc	dw msg.putsgetlinehandler
  2227                              <1> internaldatarelocation
  2228 000000C6 [0000]              <1> at htHandler,reloc	dw relocateddata
  2229                              <1> otherlinkdatarelocation ext_puts_getline_handler
  2230 000000C8 [020A]              <1> at htTemplate,reloc	dw template_putsgetlinehandler
  2231                              <1> internalcoderelocation
  2232 000000CA [0000]              <1> at htReturn,reloc	dw relocateddata
  2233                              <1> otherlinkdatarelocation puts_getline_ext_done
  2234 000000CC 00<rep 2h>          <1> 	iend
  2235 000000CE 0000                <1> 	dw 0
  2236                              <1> 
  2237                              <1> .inject:
  2238                              <1> 	istruc HANDLERTABLE
  2239 000000D0 [A008]              <1> at htMessage,reloc	dw msg.commandinjecthandler
  2240                              <1> internaldatarelocation
  2241 000000D2 [0000]              <1> at htHandler,reloc	dw relocateddata
  2242                              <1> otherlinkdatarelocation ext_inject_handler
  2243 000000D4 0000                <1> at htTemplate,		dw 0
  2244 000000D6 0000                <1> at htReturn,		dw 0
  2245 000000D8 0200                <1> at htFlags,		dw htfIsInject
  2246                              <1> 	iend
  2247                              <1> 	istruc HANDLERTABLE
  2248 000000DA [AF08]              <1> at htMessage,reloc	dw msg.aainjecthandler
  2249                              <1> internaldatarelocation
  2250 000000DC [0000]              <1> at htHandler,reloc	dw relocateddata
  2251                              <1> otherlinkdatarelocation ext_aa_inject_handler, -2, optional
  2252 000000DE 0000                <1> at htTemplate,		dw 0
  2253 000000E0 0000                <1> at htReturn,		dw 0
  2254 000000E2 0200                <1> at htFlags,		dw htfIsInject
  2255                              <1> 	iend
  2256 000000E4 0000                <1> 	dw 0
  2257                              <1> 
  2258                              <1> 	align 2, db 0
  2259                              <1> store_table:
  2260 000000E6 [0000]              <1> reloc	dw relocateddata
  2261                              <1> otherlinkdatarelocation patcharea_run, -2, optional
  2262 000000E8 [0000]              <1> reloc	dw relocateddata
  2263                              <1> otherlinkdatarelocation patcharea_run.segment, -2, optional
  2264 000000EA [0000]              <1> reloc	dw relocateddata
  2265                              <1> otherlinkdatarelocation patcharea_run.size, -2, optional
  2266 000000EC [2C09]              <1> reloc	dw msg.patch_area_run
  2267                              <1> internaldatarelocation
  2268                              <1> 
  2269 000000EE [0000]              <1> reloc	dw relocateddata
  2270                              <1> otherlinkdatarelocation patcharea_intrtn, -2, optional
  2271 000000F0 [0000]              <1> reloc	dw relocateddata
  2272                              <1> otherlinkdatarelocation patcharea_intrtn.segment, -2, optional
  2273 000000F2 [0000]              <1> reloc	dw relocateddata
  2274                              <1> otherlinkdatarelocation patcharea_intrtn.size, -2, optional
  2275 000000F4 [3009]              <1> reloc	dw msg.patch_area_intrtn
  2276                              <1> internaldatarelocation
  2277                              <1> 
  2278 000000F6 [0000]              <1> reloc	dw relocateddata
  2279                              <1> otherlinkdatarelocation patcharea_pm_exc, -2, optional
  2280 000000F8 [0000]              <1> reloc	dw relocateddata
  2281                              <1> otherlinkdatarelocation patcharea_pm_exc.segment, -2, optional
  2282 000000FA [0000]              <1> reloc	dw relocateddata
  2283                              <1> otherlinkdatarelocation patcharea_pm_exc.size, -2, optional
  2284 000000FC [3F09]              <1> reloc	dw msg.patch_area_pm_exc
  2285                              <1> internaldatarelocation
  2286                              <1> 
  2287                              <1> .end:
  2288                              <1> 
  2289                              <1> 	struc STORETABLEENTRY
  2290 00000000 ????                <1> steAreaOffset:		resw 1
  2291 00000002 ????                <1> steAreaSegmentVariable:	resw 1
  2292 00000004 ????                <1> steAreaLength:		resw 1
  2293 00000006 ????                <1> steName:		resw 1
  2294                              <1> 	endstruc
  2295                              <1> 
  2296                              <1> 
  2297                              <1> 	align 2, db 0
  2298                              <1> nountable:
  2299 000000FE 46                  <1> 	db msg.all - $ - 1
  2300 000000FF 01                  <1> 	db 1
  2301 00000100 [D301]              <1> reloc	dw msg.all_replace
  2302                              <1> internaldatarelocation
  2303 00000102 46                  <1> 	db msg.allexceptseg - $ - 1
  2304 00000103 01                  <1> 	db 1
  2305 00000104 [F601]              <1> reloc	dw msg.allnoseg_replace
  2306                              <1> internaldatarelocation
  2307 00000106 67                  <1> 	db msg.eldall - $ - 1
  2308 00000107 01                  <1> 	db 1
  2309 00000108 [1502]              <1> reloc	dw msg.eldall_replace
  2310                              <1> internaldatarelocation
  2311 0000010A 7C                  <1> 	db msg.eldhandlers - $ - 1
  2312 0000010B 01                  <1> 	db 1
  2313 0000010C [3302]              <1> reloc	dw msg.eldhandlers_replace
  2314                              <1> internaldatarelocation
  2315 0000010E 4D                  <1> 	db msg.mem - $ - 1
  2316 0000010F 00                  <1> 	db 0
  2317 00000110 [6A03]              <1> reloc	dw display_mem
  2318                              <1> internalcoderelocation
  2319 00000112 4D                  <1> 	db msg.history - $ - 1
  2320 00000113 00                  <1> 	db 0
  2321 00000114 [1305]              <1> reloc	dw historysize
  2322                              <1> internalcoderelocation
  2323 00000116 51                  <1> 	db msg.stack - $ - 1
  2324 00000117 00                  <1> 	db 0
  2325 00000118 [FF05]              <1> reloc	dw stacksize
  2326                              <1> internalcoderelocation
  2327 0000011A 5A                  <1> 	db msg.eld - $ - 1
  2328 0000011B 00                  <1> 	db 0
  2329 0000011C [D406]              <1> reloc	dw display_eld_memory
  2330                              <1> internalcoderelocation
  2331 0000011E 5A                  <1> 	db msg.elduse - $ - 1
  2332 0000011F 00                  <1> 	db 0
  2333 00000120 [5B06]              <1> reloc	dw display_eld_use
  2334                              <1> internalcoderelocation
  2335 00000122 5D                  <1> 	db msg.eldvar - $ - 1
  2336 00000123 00                  <1> 	db 0
  2337 00000124 [EF07]              <1> reloc	dw display_eld_variables
  2338                              <1> internalcoderelocation
  2339 00000126 6C                  <1> 	db msg.commandhandler_noun - $ - 1
  2340 00000127 00                  <1> 	db 0
  2341 00000128 [E408]              <1> reloc	dw display_command_handler
  2342                              <1> internalcoderelocation
  2343 0000012A 77                  <1> 	db msg.amishandler_noun - $ - 1
  2344 0000012B 00                  <1> 	db 0
  2345 0000012C [E908]              <1> reloc	dw display_amis_handler
  2346                              <1> internalcoderelocation
  2347 0000012E 7F                  <1> 	db msg.asmhandler - $ - 1
  2348 0000012F 00                  <1> 	db 0
  2349 00000130 [EE08]              <1> reloc	dw display_asm_handler
  2350                              <1> internalcoderelocation
  2351 00000132 86                  <1> 	db msg.putshandler_noun - $ - 1
  2352 00000133 00                  <1> 	db 0
  2353 00000134 [F308]              <1> reloc	dw display_puts_handler
  2354                              <1> internalcoderelocation
  2355 00000136 8E                  <1> 	db msg.injecthandler_noun - $ - 1
  2356 00000137 00                  <1> 	db 0
  2357 00000138 [F808]              <1> reloc	dw display_inject_handler
  2358                              <1> internalcoderelocation
  2359 0000013A 17                  <1> 	db msg.seg - $ - 1
  2360 0000013B 00                  <1> 	db 0
  2361 0000013C [B101]              <1> reloc	dw display_seg
  2362                              <1> internalcoderelocation
  2363 0000013E 17                  <1> 	db msg.patch - $ - 1
  2364 0000013F 00                  <1> 	db 0
  2365 00000140 [7302]              <1> reloc	dw display_patchareas
  2366                              <1> internalcoderelocation
  2367 00000142 0000                <1> 	dw 0
  2368                              <1> 
  2369                              <1> history_data_entry:
  2370 00000144 00                  <1> 	db 0
  2371                              <1> 
  2372                              <1> msg:
  2373 00000145 414C4C00            <1> .all:		asciz "ALL"
  2374 00000149 414C4C4E4F53454700  <1> .allexceptseg:	asciz "ALLNOSEG"
  2375 00000152 53454700            <1> .seg:		asciz "SEG"
  2376 00000156 504154434800        <1> .patch:		asciz "PATCH"
  2377 0000015C 4D454D00            <1> .mem:		asciz "MEM"
  2378 00000160 484953544F525900    <1> .history:	asciz "HISTORY"
  2379 00000168 535441434B00        <1> .stack:		asciz "STACK"
  2380 0000016E 454C44414C4C00      <1> .eldall:	asciz "ELDALL"
  2381 00000175 454C4400            <1> .eld:		asciz "ELD"
  2382 00000179 454C4455534500      <1> .elduse:	asciz "ELDUSE"
  2383 00000180 454C4456415200      <1> .eldvar:	asciz "ELDVAR"
  2384 00000187 454C4448414E444C45- <1> .eldhandlers:	asciz "ELDHANDLERS"
  2384 00000190 525300              <1>
  2385 00000193 434F4D4D414E444841- <1> .commandhandler_noun:	asciz "COMMANDHANDLER"
  2385 0000019C 4E444C455200        <1>
  2386 000001A2 414D495348414E444C- <1> .amishandler_noun:	asciz "AMISHANDLER"
  2386 000001AB 455200              <1>
  2387 000001AE 41534D48414E444C45- <1> .asmhandler:		asciz "ASMHANDLER"
  2387 000001B7 5200                <1>
  2388 000001B9 5055545348414E444C- <1> .putshandler_noun:	asciz "PUTSHANDLER"
  2388 000001C2 455200              <1>
  2389 000001C5 494E4A45435448414E- <1> .injecthandler_noun:	asciz "INJECTHANDLER"
  2389 000001CE 444C455200          <1>
  2390 000001D3 4D454D205345472048- <1> .all_replace:		asciz "MEM SEG HISTORY STACK ELDALL PATCH"
  2390 000001DC 4953544F5259205354- <1>
  2390 000001E5 41434B20454C44414C- <1>
  2390 000001EE 4C20504154434800    <1>
  2391 000001F6 4D454D20484953544F- <1> .allnoseg_replace:	asciz "MEM HISTORY STACK ELDALL PATCH"
  2391 000001FF 525920535441434B20- <1>
  2391 00000208 454C44414C4C205041- <1>
  2391 00000211 54434800            <1>
  2392 00000215 454C4420454C445553- <1> .eldall_replace:	asciz "ELD ELDUSE ELDVAR ELDHANDLERS"
  2392 0000021E 4520454C4456415220- <1>
  2392 00000227 454C4448414E444C45- <1>
  2392 00000230 525300              <1>
  2393 00000233 434F4D4D414E444841- <1> .eldhandlers_replace:	asciz "COMMANDHANDLER AMISHANDLER ASMHANDLER PUTSHANDLER INJECTHANDLER"
  2393 0000023C 4E444C455220414D49- <1>
  2393 00000245 5348414E444C455220- <1>
  2393 0000024E 41534D48414E444C45- <1>
  2393 00000257 52205055545348414E- <1>
  2393 00000260 444C455220494E4A45- <1>
  2393 00000269 435448414E444C4552- <1>
  2393 00000272 00                  <1>
  2394 00000273 4E6F756E202200      <1> .notfound.1:		asciz 'Noun "'
  2395 0000027A 22206E6F7420666F75- <1> .notfound.2:		asciz '" not found!',13,10
  2395 00000283 6E64210D0A00        <1>
  2396 00000289 4C444D454D4F544800  <1> .ldmem:			asciz "LDMEM",OTH_STRING
  2397 00000292 4C444D454D4F544820- <1> .uninstall_done:	db "LDMEM",OTH_STRING," uninstalled."
  2397 0000029B 756E696E7374616C6C- <1>
  2397 000002A4 65642E              <1>
  2398                              <1> %if _ELD_RECLAIM_HINT
  2399                              <1> 			db " (Don't forget to use reclaim.eld)"
  2400                              <1> %endif
  2401 000002A7 0D0A00              <1> 			asciz 13,10
  2402 000002AA 4C444D454D4F544820- <1> .uninstall_error:	asciz "LDMEM",OTH_STRING," unable to uninstall!",13,10
  2402 000002B3 756E61626C6520746F- <1>
  2402 000002BC 20756E696E7374616C- <1>
  2402 000002C5 6C210D0A00          <1>
  2403 000002CA 05456E747279        <1> .entryseg:	counted "Entry"
  2404 000002D0 00                  <1> 		counted
  2405 000002D1 074D657373616765    <1> .messageseg:	counted "Message"
  2406 000002D9 00                  <1> 		counted
  2407 000002DA 0A466972737420636F- <1> .codeseg:	counted "First code"
  2407 000002E3 6465                <1>
  2408 000002E5 05436F646531        <1> 		counted "Code1"
  2409 000002EB 0E466972737420636F- <1> .codemovableseg:counted "First code (M)"
  2409 000002F4 646520284D29        <1>
  2410 000002FA 08436F646531284D29  <1> 		counted "Code1(M)"
  2411 00000303 0B5365636F6E642063- <1> .code2seg:	counted "Second code"
  2411 0000030C 6F6465              <1>
  2412 0000030F 05436F646532        <1> 		counted "Code2"
  2413                              <1> .code2movableseg:
  2414 00000315 0F5365636F6E642063- <1> 		counted "Second code (M)"
  2414 0000031E 6F646520284D29      <1>
  2415 00000325 08436F646532284D29  <1> 		counted "Code2(M)"
  2416 0000032E 10417578696C696172- <1> .auxbuffseg:	counted "Auxiliary buffer"
  2416 00000337 7920627566666572    <1>
  2417 0000033F 09417578696C696172- <1> 		counted "Auxiliary"
  2417 00000348 79                  <1>
  2418                              <1> .auxbuffmovableseg:
  2419 00000349 0E41757820284D2920- <1> 		counted "Aux (M) buffer"
  2419 00000352 627566666572        <1>
  2420 00000358 06417578284D29      <1> 		counted "Aux(M)"
  2421 0000035F 07486973746F7279    <1> .historyseg:	counted "History"
  2422 00000367 00                  <1> 		counted
  2423 00000368 08454C4420636F6465  <1> .extseg:	counted "ELD code"
  2424 00000371 00                  <1> 		counted
  2425 00000372 0B456E7669726F6E6D- <1> .envseg:	counted "Environment"
  2425 0000037B 656E74              <1>
  2426 0000037E 03456E76            <1> 		counted "Env"
  2427 00000382 0A207365676D656E74- <1> .segment_colon:	counted " segment: "
  2427 0000038B 3A20                <1>
  2428 0000038D 224E6F6E6520285365- <1> .none:		counted "None (Segment data not available.)"
  2428 00000396 676D656E7420646174- <1>
  2428 0000039F 61206E6F7420617661- <1>
  2428 000003A8 696C61626C652E29    <1>
  2429 000003B0 1853697A6520646174- <1> .nonesize:	counted "Size data not available."
  2429 000003B9 61206E6F7420617661- <1>
  2429 000003C2 696C61626C652E      <1>
  2430 000003C9 022020              <1> .address.1:	counted "  "
  2431 000003CC 0753697A653A2020    <1> .size.1:	counted "Size:  "
  2432 000003D4 022020              <1> .size.2:	counted "  "
  2433 000003D7 0C202073656C656374- <1> .sel:		counted "  selector: "
  2433 000003E0 6F723A20            <1>
  2434 000003E4 15456E7472792F6461- <1> .dssel:		counted "Entry/data selector: "
  2434 000003ED 74612073656C656374- <1>
  2434 000003F6 6F723A20            <1>
  2435 000003FA 20454C4420636F6465- <1> .extdssel:	counted "ELD code segment data selector: "
  2435 00000403 207365676D656E7420- <1>
  2435 0000040C 646174612073656C65- <1>
  2435 00000415 63746F723A20        <1>
  2436 0000041B 546F74616C20616C6C- <1> .alloc:		fill 26, 32, db "Total allocation: "
  2436 00000424 6F636174696F6E3A20- <1>
  2436 0000042D 20<rep 8h>          <1>
  2437 00000435 00                  <1> 		asciz
  2438 00000436 1A                  <1> .gap:		db .gap.end - ($ + 1)
  2439 00000437 4761703A2020-       <1> 		fill 26, 32, db "Gap: "
  2439 00000437 <rep 15h>           <1>
  2440                              <1> .gap.end:
  2441 00000451 4F7665726C6170210D- <1> .overlap:		asciz "Overlap!",13,10
  2441 0000045A 0A00                <1>
  2442 0000045C 4E6F20686973746F72- <1> .history_none:		asciz "No history format link found.",13,10
  2442 00000465 7920666F726D617420- <1>
  2442 0000046E 6C696E6B20666F756E- <1>
  2442 00000477 642E0D0A00          <1>
  2443 0000047C 486973746F72792069- <1> .history_data_entry:	asciz "History in data entry section.",13,10
  2443 00000485 6E206461746120656E- <1>
  2443 0000048E 747279207365637469- <1>
  2443 00000497 6F6E2E0D0A00        <1>
  2444 0000049D 486973746F72792069- <1> .history_separate:	asciz "History in a separate segment.",13,10
  2444 000004A6 6E2061207365706172- <1>
  2444 000004AF 617465207365676D65- <1>
  2444 000004B8 6E742E0D0A00        <1>
  2445 000004BE 556E6B6E6F776E2068- <1> .history_unknown:	asciz "Unknown history format.",13,10
  2445 000004C7 6973746F727920666F- <1>
  2445 000004D0 726D61742E0D0A00    <1>
  2446 000004D8 486973746F7279206C- <1> .history_missing:	asciz "History last or first displacement or segment missing.",13,10
  2446 000004E1 617374206F72206669- <1>
  2446 000004EA 72737420646973706C- <1>
  2446 000004F3 6163656D656E74206F- <1>
  2446 000004FC 72207365676D656E74- <1>
  2446 00000505 206D697373696E672E- <1>
  2446 0000050E 0D0A00              <1>
  2447 00000511 11486973746F727920- <1> .history.1:		counted "History entries: "
  2447 0000051A 656E74726965733A20  <1>
  2448 00000523 110D0A486973746F72- <1> .history.2:		counted 13,10,"History bytes: "
  2448 0000052C 792062797465733A20  <1>
  2449 00000535 082075736564202F20  <1> .history.3:		counted " used / "
  2450 0000053E 2920746F74616C0D0A- <1> .history.average.1:	counted " total",13,10,"Average history entry size is <= "
  2450 00000547 417665726167652068- <1>
  2450 00000550 6973746F727920656E- <1>
  2450 00000559 7472792073697A6520- <1>
  2450 00000562 6973203C3D20        <1>
  2451 00000568 072062797465732E    <1> .history.average.2:	counted " bytes."
  2452 00000570 3520746F74616C0D0A- <1> .history.average.none:	counted " total",13,10,"Cannot calculate average, no history entries."
  2452 00000579 43616E6E6F74206361- <1>
  2452 00000582 6C63756C6174652061- <1>
  2452 0000058B 7665726167652C206E- <1>
  2452 00000594 6F20686973746F7279- <1>
  2452 0000059D 20656E74726965732E  <1>
  2453 000005A6 164E6F20737461636B- <1> .stack.none:		counted "No stack link found.",13,10
  2453 000005AF 206C696E6B20666F75- <1>
  2453 000005B8 6E642E0D0A          <1>
  2454 000005BD 0C537461636B207369- <1> .stack.1:		counted "Stack size: "
  2454 000005C6 7A653A20            <1>
  2455 000005CA 1E2062797465730D0A- <1> .stack.2:		counted " bytes",13,10,"Heuristic match byte: "
  2455 000005D3 486575726973746963- <1>
  2455 000005DC 206D61746368206279- <1>
  2455 000005E5 74653A20            <1>
  2456 000005E9 1B680D0A4865757269- <1> .stack.3:		counted "h",13,10,"Heuristic unused stack: "
  2456 000005F2 7374696320756E7573- <1>
  2456 000005FB 656420737461636B3A- <1>
  2456 00000604 20                  <1>
  2457 00000605 082062797465730D0A  <1> .stack.4:		counted " bytes",13,10
  2458 0000060E 0A454C4420636F6465- <1> .elduse.1:		counted "ELD code: "
  2458 00000617 3A20                <1>
  2459                              <1> .elduse.4:
  2460 00000619 0720757365642C20    <1> .elduse.2:		counted " used, "
  2461 00000621 0720667265652C20    <1> .elduse.2b:		counted " free, "
  2462 00000629 1220746F74616C0D0A- <1> .elduse.3:		counted " total",13,10,"ELD data: "
  2462 00000632 454C4420646174613A- <1>
  2462 0000063B 20                  <1>
  2463 0000063C 0620746F74616C      <1> .elduse.5:		counted " total"
  2464 00000643 4C6F6164656420454C- <1> .eld.1:			asciz "Loaded ELDs:",13,10
  2464 0000064C 44733A0D0A00        <1>
  2465 00000652 4572726F7220647572- <1> .eld.error:		asciz "Error during ELD enumeration.",13,10
  2465 0000065B 696E6720454C442065- <1>
  2465 00000664 6E756D65726174696F- <1>
  2465 0000066D 6E2E0D0A00          <1>
  2466 00000672 0A4672656520737061- <1> .eld.free:		counted "Free space"
  2466 0000067B 6365                <1>
  2467 0000067D 022028              <1> .eld.free.2:		counted " ("
  2468 00000680 0129                <1> .eld.free.3:		counted ")"
  2469 00000682 0D2C20636F64652073- <1> .eld.2:			counted ", code start "
  2469 0000068B 7461727420          <1>
  2470 00000690 072C2073746F7020    <1> .eld.3:			counted ", stop "
  2471 00000698 072C2073697A6520    <1> .eld.4:			counted ", size "
  2472 000006A0 19                  <1> .eld.5:			db .eld.5.end - ($ + 1)
  2473 000006A1 0D0A                <1> 			db 13,10
  2474 000006A3 20<rep Ch>          <1> 			times 8 + 2 + 2 db 32
  2475 000006AF 446174612073746172- <1> 			db "Data start "
  2475 000006B8 7420                <1>
  2476                              <1> .eld.5.end:
  2477 000006BA 174672656520737061- <1> .eld.6:			counted "Free space, data start "
  2477 000006C3 63652C206461746120- <1>
  2477 000006CC 737461727420        <1>
  2478 000006D2 154578742076617269- <1> .var.format:		counted "Ext variables format="
  2478 000006DB 61626C657320666F72- <1>
  2478 000006E4 6D61743D            <1>
  2479 000006E8 12682C207374727563- <1> .var.size:		counted "h, structure size="
  2479 000006F1 747572652073697A65- <1>
  2479 000006FA 3D                  <1>
  2480 000006FB 19680D0A416D6F756E- <1> .var.amount:		counted "h",13,10,"Amount ext variables: "
  2480 00000704 742065787420766172- <1>
  2480 0000070D 6961626C65733A20    <1>
  2481 00000715 082075736564202F20  <1> .var.amountbetween:	counted " used / "
  2482 0000071E 0620746F74616C      <1> .var.amountafter:	counted " total"
  2483 00000725 0D0A556E6B6E6F776E- <1> .varunknown:		db 13,10,"Unknown ext variables format="
  2483 0000072E 206578742076617269- <1>
  2483 00000737 61626C657320666F72- <1>
  2483 00000740 6D61743D            <1>
  2484 00000744 2D2D2D2D68          <1> .varunknown.format:	db "----h"
  2485 00000749 0D0A                <1> .linebreak:		db 13,10
  2486 0000074B 00                  <1> .empty:			asciz
  2487 0000074C 06466C6167733D      <1> .var.list.flags:	counted "Flags="
  2488 00000753 08682061727261793D  <1> .var.list.array:	counted "h array="
  2489 0000075C 0A6820626574776565- <1> .var.list.between:	counted "h between="
  2489 00000765 6E3D                <1>
  2490 00000767 0868206E616D653D22  <1> .var.list.name:		counted "h name=",'"'
  2491 00000770 0A220D0A20456E7472- <1> .var.list.entry:	counted '"',13,10," Entry="
  2491 00000779 793D                <1>
  2492 0000077B 0C682C20696E737461- <1> .instance.1:		counted "h, instance="
  2492 00000784 6E63653D            <1>
  2493 00000788 0F682C206964656E74- <1> .instance.2:		counted "h, identifier=",'"'
  2493 00000791 69666965723D22      <1>
  2494 00000798 0122                <1> .instance.3:		counted '"'
  2495 0000079A 16682E20496E737461- <1> .instance.notfound:	counted "h. Instance not found!"
  2495 000007A3 6E6365206E6F742066- <1>
  2495 000007AC 6F756E6421          <1>
  2496 000007B1 12682E20496E737461- <1> .instance.error:	counted "h. Instance error!"
  2496 000007BA 6E6365206572726F72- <1>
  2496 000007C3 21                  <1>
  2497 000007C4 0720456E7472793D    <1> .commandhandler.entry:	counted " Entry="
  2498 000007CC 0D0A00              <1> .handler.init.pre:	asciz 13,10
  2499 000007CF 2068616E646C657273- <1> .handler.init.post:	asciz " handlers:",13,10
  2499 000007D8 3A0D0A00            <1>
  2500 000007DC 20456E7472793D3030- <1> .handler.none.pre:	asciz " Entry=0000h - No "
  2500 000007E5 303068202D204E6F20- <1>
  2500 000007EE 00                  <1>
  2501 000007EF 2068616E646C657220- <1> .handler.none.post:	asciz " handler installed.",13,10
  2501 000007F8 696E7374616C6C6564- <1>
  2501 00000801 2E0D0A00            <1>
  2502 00000805 204E6F2000          <1> .handler.notpresent.pre:	asciz " No "
  2503 0000080A 2068616E646C657220- <1> .handler.notpresent.post:	asciz " handler hook present.",13,10
  2503 00000813 686F6F6B2070726573- <1>
  2503 0000081C 656E742E0D0A00      <1>
  2504 00000823 2000                <1> .handler.error.pre:	asciz " "
  2505 00000825 2068616E646C657220- <1> .handler.error.post:	asciz " handler error!",13,10
  2505 0000082E 6572726F72210D0A00  <1>
  2506 00000837 436F6D6D616E6400    <1> .commandhandler:	asciz "Command"
  2507 0000083F 50726570726F636573- <1> .preprocesshandler:	asciz "Preprocess"
  2507 00000848 7300                <1>
  2508 0000084A 414D495300          <1> .amishandler:		asciz "AMIS"
  2509 0000084F 417373656D626C6572- <1> .aabeforehandler:	asciz "Assembler before"
  2509 00000858 206265666F726500    <1>
  2510 00000860 417373656D626C6572- <1> .aaafterhandler:	asciz "Assembler after"
  2510 00000869 20616674657200      <1>
  2511 00000870 4D756C74692D707572- <1> .putshandler:		asciz "Multi-purpose puts"
  2511 00000879 706F73652070757473- <1>
  2511 00000882 00                  <1>
  2512 00000883 434F50594F55545055- <1> .putscohandler:		asciz "COPYOUTPUT puts"
  2512 0000088C 54207075747300      <1>
  2513 00000893 4745544C494E452070- <1> .putsgetlinehandler:	asciz "GETLINE puts"
  2513 0000089C 75747300            <1>
  2514 000008A0 436F6D6D616E642069- <1> .commandinjecthandler:	asciz "Command inject"
  2514 000008A9 6E6A65637400        <1>
  2515 000008AF 417373656D626C6572- <1> .aainjecthandler:	asciz "Assembler inject"
  2515 000008B8 20696E6A65637400    <1>
  2516 000008C0 506174636820617265- <1> .patch_area.1:		asciz "Patch area, length "
  2516 000008C9 612C206C656E677468- <1>
  2516 000008D2 2000                <1>
  2517 000008D4 2028696E2075736529- <1> .patch_area.2.inuse:	asciz " (in use), "
  2517 000008DD 2C2000              <1>
  2518 000008E0 202866726565292C20- <1> .patch_area.2.notinuse:	asciz " (free), "
  2518 000008E9 00                  <1>
  2519 000008EA 656E74727900        <1> .patch_area.3.entry:	asciz "entry"
  2520 000008F0 636F646500          <1> .patch_area.3.code:	asciz "code"
  2521 000008F5 756E6B6E6F776E3D    <1> .patch_area.3.unknown:	db "unknown="
  2522 000008FD 2D2D2D2D6800        <1> .patch_area.3.unknown.s:asciz "----h"
  2523 00000903 3A                  <1> .patch_area.3.offset:	db ":"
  2524 00000904 2D2D2D2D682C2000    <1> .patch_area.3.offset.o:	asciz "----h, "
  2525 0000090C 6E616D653A2000      <1> .patch_area.4:		asciz "name: "
  2526 00000913 506174636820617265- <1> .patch_area.5:		asciz "Patch area not present: "
  2526 0000091C 61206E6F7420707265- <1>
  2526 00000925 73656E743A2000      <1>
  2527 0000092C 52756E00            <1> .patch_area_run:	asciz "Run"
  2528 00000930 3836204D6F64652069- <1> .patch_area_intrtn:	asciz "86 Mode intrtn"
  2528 00000939 6E7472746E00        <1>
  2529 0000093F 50726F746563746564- <1> .patch_area_pm_exc:	asciz "Protected Mode exc"
  2529 00000948 204D6F646520657863- <1>
  2529 00000951 00                  <1>
  2530                              <1> 
  2531                              <1> uinit_data: equ $
  2532 00000952 4C444D454D4F544820- <1> .installed:		asciz "LDMEM",OTH_STRING," installed.",13,10
  2532 0000095B 696E7374616C6C6564- <1>
  2532 00000964 2E0D0A00            <1>
  2533 00000968 48454C5000          <1> .keyword_help:		asciz "HELP"
  2534 0000096D 5468697320454C4420- <1> .help:		db "This ELD can be installed residently or used transiently.",13,10
  2534 00000976 63616E20626520696E- <1>
  2534 0000097F 7374616C6C65642072- <1>
  2534 00000988 65736964656E746C79- <1>
  2534 00000991 206F72207573656420- <1>
  2534 0000099A 7472616E7369656E74- <1>
  2534 000009A3 6C792E0D0A          <1>
  2535 000009A8 0D0A                <1> 		db 13,10
  2536 000009AA 416E79206E756D6265- <1> 		db "Any number of keywords can be passed to this ELD to choose output:",13,10
  2536 000009B3 72206F66206B657977- <1>
  2536 000009BC 6F7264732063616E20- <1>
  2536 000009C5 626520706173736564- <1>
  2536 000009CE 20746F207468697320- <1>
  2536 000009D7 454C4420746F206368- <1>
  2536 000009E0 6F6F7365206F757470- <1>
  2536 000009E9 75743A0D0A          <1>
  2537 000009EE 09286E6F6E65290909- <1> 		db 9,"(none)",9,9,"Alias to ALLNOSEG",13,10
  2537 000009F7 416C69617320746F20- <1>
  2537 00000A00 414C4C4E4F5345470D- <1>
  2537 00000A09 0A                  <1>
  2538 00000A0A 09414C4C0909446973- <1> 		db 9,"ALL",9,9,"Display all output",13,10
  2538 00000A13 706C617920616C6C20- <1>
  2538 00000A1C 6F75747075740D0A    <1>
  2539 00000A24 09414C4C4E4F534547- <1> 		db 9,"ALLNOSEG",9,"Display all output except SEG",13,10
  2539 00000A2D 09446973706C617920- <1>
  2539 00000A36 616C6C206F75747075- <1>
  2539 00000A3F 742065786365707420- <1>
  2539 00000A48 5345470D0A          <1>
  2540 00000A4D 09454C44414C4C0909- <1> 		db 9,"ELDALL",9,9,"Display all ELD output",13,10
  2540 00000A56 446973706C61792061- <1>
  2540 00000A5F 6C6C20454C44206F75- <1>
  2540 00000A68 747075740D0A        <1>
  2541 00000A6E 09454C4448414E444C- <1> 		db 9,"ELDHANDLERS",9,"Display all ELD handlers",13,10
  2541 00000A77 45525309446973706C- <1>
  2541 00000A80 617920616C6C20454C- <1>
  2541 00000A89 442068616E646C6572- <1>
  2541 00000A92 730D0A              <1>
  2542 00000A95 094D454D0909446973- <1> 		db 9,"MEM",9,9,"Display memory areas with segments/selectors",13,10
  2542 00000A9E 706C6179206D656D6F- <1>
  2542 00000AA7 727920617265617320- <1>
  2542 00000AB0 77697468207365676D- <1>
  2542 00000AB9 656E74732F73656C65- <1>
  2542 00000AC2 63746F72730D0A      <1>
  2543 00000AC9 095345470909446973- <1> 		db 9,"SEG",9,9,"Display segments/selectors mostly on one line",13,10
  2543 00000AD2 706C6179207365676D- <1>
  2543 00000ADB 656E74732F73656C65- <1>
  2543 00000AE4 63746F7273206D6F73- <1>
  2543 00000AED 746C79206F6E206F6E- <1>
  2543 00000AF6 65206C696E650D0A    <1>
  2544 00000AFE 09484953544F525909- <1> 		db 9,"HISTORY",9,9,"Display history utilisation",13,10
  2544 00000B07 09446973706C617920- <1>
  2544 00000B10 686973746F72792075- <1>
  2544 00000B19 74696C69736174696F- <1>
  2544 00000B22 6E0D0A              <1>
  2545 00000B25 09535441434B090944- <1> 		db 9,"STACK",9,9,"Display stack utilisation",13,10
  2545 00000B2E 6973706C6179207374- <1>
  2545 00000B37 61636B207574696C69- <1>
  2545 00000B40 736174696F6E0D0A    <1>
  2546 00000B48 09454C440909446973- <1> 		db 9,"ELD",9,9,"Display ELD code instances and data blocks use",13,10
  2546 00000B51 706C617920454C4420- <1>
  2546 00000B5A 636F646520696E7374- <1>
  2546 00000B63 616E63657320616E64- <1>
  2546 00000B6C 206461746120626C6F- <1>
  2546 00000B75 636B73207573650D0A  <1>
  2547 00000B7E 09454C445553450909- <1> 		db 9,"ELDUSE",9,9,"Display ELD memory space use lines",13,10
  2547 00000B87 446973706C61792045- <1>
  2547 00000B90 4C44206D656D6F7279- <1>
  2547 00000B99 207370616365207573- <1>
  2547 00000BA2 65206C696E65730D0A  <1>
  2548 00000BAB 09454C445641520909- <1> 		db 9,"ELDVAR",9,9,"Display ELD variables",13,10
  2548 00000BB4 446973706C61792045- <1>
  2548 00000BBD 4C4420766172696162- <1>
  2548 00000BC6 6C65730D0A          <1>
  2549 00000BCB 09434F4D4D414E4448- <1> 		db 9,"COMMANDHANDLER",9,"Display ELD command and preprocess handlers",13,10
  2549 00000BD4 414E444C4552094469- <1>
  2549 00000BDD 73706C617920454C44- <1>
  2549 00000BE6 20636F6D6D616E6420- <1>
  2549 00000BEF 616E64207072657072- <1>
  2549 00000BF8 6F636573732068616E- <1>
  2549 00000C01 646C6572730D0A      <1>
  2550 00000C08 09414D495348414E44- <1> 		db 9,"AMISHANDLER",9,"Display ELD AMIS handlers",13,10
  2550 00000C11 4C455209446973706C- <1>
  2550 00000C1A 617920454C4420414D- <1>
  2550 00000C23 49532068616E646C65- <1>
  2550 00000C2C 72730D0A            <1>
  2551 00000C30 0941534D48414E444C- <1> 		db 9,"ASMHANDLER",9,"Display ELD assembly handlers",13,10
  2551 00000C39 455209446973706C61- <1>
  2551 00000C42 7920454C4420617373- <1>
  2551 00000C4B 656D626C792068616E- <1>
  2551 00000C54 646C6572730D0A      <1>
  2552 00000C5B 095055545348414E44- <1> 		db 9,"PUTSHANDLER",9,"Display ELD puts-related handlers",13,10
  2552 00000C64 4C455209446973706C- <1>
  2552 00000C6D 617920454C44207075- <1>
  2552 00000C76 74732D72656C617465- <1>
  2552 00000C7F 642068616E646C6572- <1>
  2552 00000C88 730D0A              <1>
  2553 00000C8B 09494E4A4543544841- <1> 		db 9,"INJECTHANDLER",9,"Display ELD inject handlers",13,10
  2553 00000C94 4E444C455209446973- <1>
  2553 00000C9D 706C617920454C4420- <1>
  2553 00000CA6 696E6A656374206861- <1>
  2553 00000CAF 6E646C6572730D0A    <1>
  2554 00000CB7 095041544348090944- <1> 		db 9,"PATCH",9,9,"Display patch areas",13,10
  2554 00000CC0 6973706C6179207061- <1>
  2554 00000CC9 746368206172656173- <1>
  2554 00000CD2 0D0A                <1>
  2555 00000CD4 00                  <1> 		asciz
  2556                              <1> 
  2557 00000CD5 00<rep Bh>          <1> 	align 16, db 0
  2558                              <1> init_data_end:
  2559                              <1> data_size equ $ - datastart
  2560                              <1> transient_data_size equ data_size
  2561                              <1> 
  2562                              <1> 	absolute uinit_data
  2563                              <1> 	alignb 2
  2564                              <1> separatormessage:
  2565 00000952 ????                <1> 	resw 1
  2566                              <1> 
  2567 00000954 ????????            <1> 	alignb 8
  2568                              <1> table_sorted:
  2569 00000958 <res 70h>           <1> 	resb 10 * table.amount + 2
  2570                              <1> 
  2571 000009C8 ????????????????    <1> 	alignb 16
  2572                              <1> uinit_data_end:
  2573                              <1> resident_data_end:
  2574                              <1> resident_data_size equ resident_data_end - datastart
  2575                              <1> 
  2576                              <1> %if uinit_data_end >= init_data_end
  2577                              <1>  total_data_size equ $ - datastart
  2578                              <1> %else
  2579                              <1>  total_data_size equ init_data_end - datastart
  2580                              <1> %endif
  2581                              <1> %assign _DATA_SIZE total_data_size
  2582                              <1> 
  2583                              <1> 
  2584                              <1> 	usesection CODE
  2585                              <1> 
  2586                              <1> install:
  2587 00000BE8 AC                  <1> 	lodsb
  2588 00000BE9 E8[0000]EB020000    <1> 	extcall chkeol
  2589                              <1> 
  2590                              <1> 	houdini
  2591 00000BF0 8EC3                <1> 	mov es, bx		; => ext seg (writable)
  2592                              <1> 
  2593 00000BF2 B8A000              <1> 	mov ax, endresident - endinstalled
  2594 00000BF5 262906[0200]        <1> reloc	sub word [es:code + eldiEndCode], ax
  2595                              <1> internalcoderelocation		; adjust size
  2596 00000BFA 2906[0000]          <1> reloc	sub word [relocateddata], ax
  2597                              <1> linkdatarelocation extseg_used	; adjust size
  2598                              <1> 
  2599                              <1> %if (transient_data_size - resident_data_size) > 0
  2600 00000BFE B81003              <1> 	mov ax, transient_data_size - resident_data_size
  2601 00000C01 262906[0600]        <1> reloc	sub word [es:code + eldiEndData], ax
  2602                              <1> internalcoderelocation		; adjust size
  2603 00000C06 2906[0000]          <1> reloc	sub word [relocateddata], ax
  2604                              <1> linkdatarelocation extdata_used	; adjust size
  2605                              <1> %endif
  2606                              <1> 
  2607 00000C0A 8B1E[0000]          <1> reloc	mov bx, word [relocateddata]
  2608                              <1> linkdatarelocation ext_command_handler
  2609                              <1> 				; -> prior
  2610 00000C0E BF[2000]            <1> reloc	mov di, command		; -> our handler
  2611                              <1> internalcoderelocation
  2612 00000C11 85DB                <1> 	test bx, bx		; installing as first ?
  2613 00000C13 740A                <1> 	jz .only_first		; yes, simple --> (leave as extcall cmd3_not_ext)
  2614 00000C15 AF                  <1> 	scasw			; skip entrypoint jmp strict short
  2615 00000C16 B0E9                <1> 	mov al, 0E9h		; = jmp near opcode
  2616 00000C18 AA                  <1> 	stosb			; store
  2617 00000C19 93                  <1> 	xchg ax, bx		; ax -> next handler
  2618 00000C1A 29F8                <1> 	sub ax, di
  2619 00000C1C 48                  <1> 	dec ax
  2620 00000C1D 48                  <1> 	dec ax			; ax = ax - (di + 2)
  2621 00000C1E AB                  <1> 	stosw			; store our downlink as rel16 displacement
  2622                              <1> 
  2623                              <1> .only_first:
  2624 00000C1F 26800E[1000]01      <1> reloc	setopt [es:code + eldiFlags], eldifResident
  2625                              <1> internalcoderelocation -3	; mark block as resident
  2626 00000C25 C706[0000][2000]    <1> reloc2	mov word [relocateddata], command
  2627                              <1> linkdatarelocation ext_command_handler, -4
  2628                              <1> internalcoderelocation		; -> our entrypoint
  2629                              <1> 
  2630 00000C2B F606[0000]04        <1> reloc	testopt [relocateddata], 4
  2631                              <1> linkdatarelocation options7, -3
  2632 00000C30 7506                <1> 	jnz @F
  2633 00000C32 BA[5209]            <1> reloc	mov dx, msg.installed
  2634                              <1> internaldatarelocation
  2635 00000C35 E8F0FE              <1> 	call putsz
  2636                              <1> @@:
  2637 00000C38 31C0                <1> 	xor ax, ax
  2638 00000C3A CB                  <1> 	retf
  2639                              <1> 
  2640                              <1> 
  2641                              <1> %include "eldlink.asm"
     1                              <2> %if 0
     2                              <2> 
     3                              <2> Extensions for lDebug linker
     4                              <2> 
     5                              <2> Copyright (C) 2008-2025 E. C. Masloch
     6                              <2> 
     7                              <2> Usage of the works is permitted provided that this
     8                              <2> instrument is retained with the works, so that any entity
     9                              <2> that uses the works is notified of this instrument.
    10                              <2> 
    11                              <2> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
    12                              <2> 
    13                              <2> %endif
    14                              <2> 
    15                              <2> %include "lmacros3.mac"
     1                              <3> [list -]
    16                              <2> %include "eld.mac"
     1                              <3> %if 0
     2                              <3> 
     3                              <3> Extensions for lDebug macros
     4                              <3> 
     5                              <3> Copyright (C) 2008-2025 E. C. Masloch
     6                              <3> 
     7                              <3> Usage of the works is permitted provided that this
     8                              <3> instrument is retained with the works, so that any entity
     9                              <3> that uses the works is notified of this instrument.
    10                              <3> 
    11                              <3> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
    12                              <3> 
    13                              <3> %endif
    14                              <3> 
    15                              <3> %ifndef ELD_MAC
    16                              <3> %define ELD_MAC 1
    17                              <3> 
    18                              <3> %include "lmacros3.mac"
    19                              <3> 
    20                              <3> 		; ELD executable header
    21                              <3> 	struc ELD_HEADER
    22                              <3> eldhSignature:		resb 4	; "ELD1"
    23                              <3> 			resb 3	; reserved
    24                              <3> 			resb 1	; 26 (Ctrl-Z)
    25                              <3> eldhCodeOffset:		resd 1	; position displacement from eldhSignature
    26                              <3> eldhCodeImageLength:	resw 1	; amount bytes, at least 32
    27                              <3> eldhCodeAllocLength:	resw 1	; amount bytes, added to prior. sum < 64 KiB
    28                              <3> eldhDataOffset:		resd 1
    29                              <3> eldhDataImageLength:	resw 1	; (zero allowed)
    30                              <3> eldhDataAllocLength:	resw 1	; (zero allowed)
    31                              <3> eldhCodeEntrypoint:	resw 1	; within code section, used as displacement
    32                              <3> eldhReserved:		resb 4	; reserved
    33                              <3> eldhExtensionSize:	resw 1	; from eldhSignature, -> past eldhx fields in use
    34                              <3> 	endstruc
    35                              <3> 	endarea ELD_HEADER, 1
    36                              <3> 
    37                              <3> 	struc ELD_HEADERX
    38                              <3> eldhxHeader:		resb ELD_HEADER_size
    39                              <3> eldhxDescriptionOffset:	resd 1	; zero if none, from eldhxHeader. <= 128 Bytes
    40                              <3> eldhxHelpOffset:	resd 1	; zero if none, from eldhxHeader
    41                              <3> eldhxLibTable:		resd 1	; zero if none, from eldhxHeader
    42                              <3> eldhxDateTimeOffset:	resd 1	; zero if none, from eldhxHeader
    43                              <3> 	alignb 16
    44                              <3> 	endstruc
    45                              <3> 
    46                              <3> 	struc ELD_TRAILER_HEADER
    47                              <3> eldthSignature:		resb 8	; "ELD1TAIL"
    48                              <3> eldthHeaderOffset:	resd 1	; negative displacement from eldthSignature,
    49                              <3> 				;  add this dword to the seek offset
    50                              <3> eldthReserved:		resw 1	; reserved, must be initialised to zero
    51                              <3> eldthChecksum:		resw 1	; sum of all words in trailer header = 0
    52                              <3> 	endstruc
    53                              <3> 	endarea ELD_TRAILER_HEADER, 1
    54                              <3> 
    55                              <3> 	struc ELD_LIBTABLE
    56                              <3> eldltFormat:		resw 1
    57                              <3> 	; 0 = uncompressed
    58                              <3> 	; 2 = heatshrink compressed
    59                              <3> 	; 3 = lzexedat -4 compressed
    60                              <3> 	; 4 = lzexedat -4 -l compressed
    61                              <3> eldltAmount:		resw 1
    62                              <3> eldltOffset:		resd 1	; from eldhxHeader
    63                              <3> eldltCompressedLength:		; (dword, only present if format 2, 3, or 4)
    64                              <3> 	endstruc
    65                              <3> 	endarea ELD_LIBTABLE, 1
    66                              <3> 
    67                              <3> 		; ELD instance header
    68                              <3> 	struc ELD_INSTANCE
    69                              <3> eldiStartCode:		resw 1	; -> this structure itself (para aligned)
    70                              <3> eldiEndCode:		resw 1	; -> behind memory used by instance (para aligned)
    71                              <3> eldiStartData:		resw 1	; -> data in data entry section (para aligned), or 0
    72                              <3> eldiEndData:		resw 1	; -> behind data (para aligned), or 0
    73                              <3> eldiIdentifier:		resb 8	; blank-filled text
    74                              <3> eldiFlags:		resw 1	; flags
    75                              <3> eldiListing_size equ 14
    76                              <3> eldiListing:		resb eldiListing_size
    77                              <3> 				; ASCIZ listing file name
    78                              <3> 	endstruc
    79                              <3> 		; flags for eldiFlags:
    80                              <3> eldifResident:		equ 1
    81                              <3> 
    82                              <3> 		; ELD link info header
    83                              <3> 	struc ELD_LINKINFO
    84                              <3> eldlSignature:		resw 1	; 0E1D1h
    85                              <3> eldlReserved:		resw 2
    86                              <3> eldlUseLinkHash:	resw 1
    87                              <3> eldlDataAmount:		resw 1
    88                              <3> eldlDataPrefixes:	resw 1
    89                              <3> eldlDataEntries:	resw 1
    90                              <3> eldlDataAddresses:	resw 1
    91                              <3> eldlCodeAmount:		resw 1
    92                              <3> eldlCodePrefixes:	resw 1
    93                              <3> eldlCodeEntries:	resw 1
    94                              <3> eldlCodeAddresses:	resw 1
    95                              <3> 	endstruc
    96                              <3> 
    97                              <3> 	numdef ELD_CODE_VSTART, 9001h
    98                              <3> 	numdef ELD_DATA_VSTART, 8000h
    99                              <3> 	numdef ELD_RELOC_VSTART, 8000h
   100                              <3> 
   101                              <3> 	numdef ELD_RECLAIM_HINT, 0
   102                              <3> 	strdef ELD_LISTING, ""
   103                              <3> 	numdef ELD_DATETIME, 0
   104                              <3> 
   105                              <3> %if _ELD_DATETIME
   106                              <3>  %define PUT_ELDHX_DATETIME_OFFSET at eldhxDateTimeOffset, dd DATAOFFSET + datetime - datastart
   107                              <3>  %macro PUT_ELD_DATETIME 0.nolist
   108                              <3> datetime:	asciz __UTC_DATE__,'T',__UTC_TIME__,'Z'
   109                              <3> 		asciz		; for future extension
   110                              <3>  %endmacro
   111                              <3> %else
   112                              <3>  %define PUT_ELDHX_DATETIME_OFFSET
   113                              <3>  %define PUT_ELD_DATETIME
   114                              <3> %endif
   115                              <3> 
   116                              <3> %endif
    17                              <2> 
    18                              <2> 	cpu 8086
    19                              <2> 
    20                              <2> %if ELDSTRICT
    21                              <2>  %if ELDSTRICTCOUNTER
    22                              <2>   %error Missing relocation
    23                              <2>  %endif
    24                              <2> %endif
    25                              <2> 	eldstrict off		; linker does some relocations
    26                              <2> 
    27                              <2> %ifn ELDCALLCALL_DUMPED
    28                              <2> 	eldcall_dump_callcall ELDCALL_CALLCALL_LIST
    29                              <2> %endif
    30                              <2> 
    31                              <2> 	numdef ELD_IDENTICALISE, 0
    32                              <2> 	numdef ELD_DEBUG, 0
    33                              <2> 	numdef ELD_LINKER_PASSES, 1
    34                              <2> 	strdef LISTING, _ELD_LISTING
    35                              <2> 	numdef ELDCALL_OPTIONAL, ELDCALL_OPTIONAL_STATUS
    36                              <2> 	numdef ELDDATA_OPTIONAL, ELDDATA_OPTIONAL_STATUS
    37                              <2> 	numdef ELDDATA_NEXT, ELDDATA_NEXT_STATUS
    38                              <2> 	numdef ELDCALL_NEXT, ELDCALL_NEXT_STATUS
    39                              <2> %if _ELD_IDENTICALISE
    40                              <2>  ;%assign _ELDCALL_OPTIONAL 1
    41                              <2> %endif
    42                              <2> %ifn _ELDCALL_OPTIONAL
    43                              <2> %assign ELDCALL_OPTIONAL_STATUS 2		; not allowed
    44                              <2> %endif
    45                              <2> ;%ifn _ELDDATA_OPTIONAL
    46                              <2> ;%assign ELDDATA_OPTIONAL_STATUS 2		; not allowed
    47                              <2> ;%endif
    48                              <2> 	gendef MAP, ""
    49                              <2> 
    50                              <2> %ifnidni _MAP, ""
    51                              <2>  [map all _MAP]
    52                              <2> %endif
    53                              <2> 
    54                              <2> 
    55                              <2> endresident: equ ($ + _CURRENT_SECTION %+ FIXUP + 15) & ~15
    56                              <2> 
    57                              <2> %if _ELD_LINKER_PASSES
    58                              <2> %assign ELDLINKER 1
    59                              <2> 
    60                              <2> 	struc LINKTABLE
    61 00000000 ????????            <2> ltCodeToCode:	resw 2
    62 00000004 ????????            <2> ltCodeToData:	resw 2
    63 00000008 ????????            <2> ltDataToCode:	resw 2
    64 0000000C ????????            <2> ltDataToData:	resw 2
    65 00000010 ????????            <2> ltLinkData:	resw 2
    66 00000014 ????????            <2> ltLinkCode:	resw 2
    67                              <2> 	endstruc
    68                              <2> %endif
    69                              <2> 
    70                              <2> 
    71                              <2> 		; INP:	es:dx -> loaded initial ELD image
    72                              <2> 		;	 ELD instance structure filled
    73                              <2> 		;	es => ELD code area
    74                              <2> 		;	ds:di -> link info
    75                              <2> 		;	ss:bx -> loaded initial data
    76                              <2> 		;	ss:si -> command line tail
    77                              <2> 		;	cs:ip -> entrypoint
    78                              <2> 		;	ss:sp -> far return address for current mode
    79                              <2> 		; STT:	UP, EI
    80                              <2> linker:
    81                              <2> 		; The first 15 Bytes of the linker should be
    82                              <2> 		;  the same regardless of the linker options
    83                              <2> 		;  used (debug, passes, vstart). This allows
    84                              <2> 		;  the eldcomp ELD to match even if up to 15
    85                              <2> 		;  Bytes of the linker are trailing in the
    86                              <2> 		;  resident part of the ELD.
    87                              <2> 	lframe
    88                              <2>  %if ELDOTHER
    89                              <2> 	lvar dword, linkinfo_other
    90                              <2> 	lvar word, use_hash_other
    91                              <2>  %endif
    92 00000C3B 5589E58D66FA        <2> 	lenter
    93                              <2> 	lvar dword, instance
    94 00000C41 06                  <2> 	 push es
    95 00000C42 52                  <2> 	 push dx		; -> start of where we're loaded in ELD cs
    96                              <2> 	lvar word, targetsection_low_optional_high
    97 00000C43 50                  <2> 	 push ax		; placeholder
    98                              <2> 	lequ ?targetsection_low_optional_high, targetsection
    99                              <2> 	lequ ?targetsection_low_optional_high + 1, optional
   100                              <2> 	lvar dword, linkinfo
   101 00000C44 1E                  <2> 	 push ds
   102 00000C45 57                  <2> 	 push di		; -> link info (in debugger ss or message seg)
   103                              <2> 	lvar dword, nextreloc
   104 00000C46 06                  <2> 	 push es		; => ELD cs
   105 00000C47 52                  <2> 	 push dx		; placeholder
   106                              <2> 	lvar dword, entry
   107 00000C48 06                  <2> 	 push es		; => ELD cs
   108 00000C49 50                  <2> 	 push ax		; placeholder
   109 00000C4A 31C0                <2> 	xor ax, ax
   110 00000C4C 813DD1E1            <2> 	cmp word [di + eldlSignature], 0E1D1h
   111                              <2> %if ($ - linker) < 16
   112                              <2>  %error Expected invariant first paragraph of linker
   113                              <2> %endif
   114 00000C50 7403                <2> 	je @F
   115                              <2> .error_j1:
   116 00000C52 E96304              <2> 	jmp .error		; signature mismatch -->
   117                              <2> @@:
   118 00000C55 837D0601            <2> 	cmp word [di + eldlUseLinkHash], 1
   119 00000C59 77F7                <2> 	ja .error_j1		; unknown use link hash number -->
   120 00000C5B 7202                <2> 	jb @F
   121                              <2> %if _ELDDATA_NEXT || _ELDCALL_NEXT
   122 00000C5D FEC8                <2> 	dec al			; = -1 if hash used
   123                              <2> %else
   124                              <2> 	dec ax
   125                              <2> %endif
   126                              <2> @@:
   127                              <2> 	lvar word, use_hash_low_skip_last_high
   128 00000C5F 50                  <2> 	 push ax		; = -1 if hash used, else 0
   129                              <2> 	lequ ?use_hash_low_skip_last_high, use_hash
   130                              <2> 	lequ ?use_hash_low_skip_last_high + 1, skip_last
   131                              <2> %if _ELD_IDENTICALISE && _ELD_LINKER_PASSES
   132                              <2> 	mov ax, linktable - code
   133                              <2> 	lvar word, lt
   134                              <2> 	 push ax		; -> link tables (a single reference)
   135                              <2> %endif
   136                              <2> %if _ELD_LINKER_PASSES || ELDOTHER || _ELDDATA_OPTIONAL || _ELDCALL_OPTIONAL
   137 00000C60 31C0                <2> 	xor ax, ax
   138                              <2>  %if _ELD_LINKER_PASSES
   139                              <2> 	lvar word, pass
   140 00000C62 50                  <2> 	 push ax		; = 0 for linker itself, = 2 for application
   141                              <2> 	lvar word, amounterrors
   142 00000C63 50                  <2> 	 push ax		; how many distinct errors encountered in pass 2
   143                              <2>  %endif
   144                              <2>  %if _ELD_LINKER_PASSES || _ELDDATA_OPTIONAL || _ELDCALL_OPTIONAL
   145                              <2> 	lvar word, name
   146 00000C64 50                  <2> 	 push ax		; -> name currently being sought (in our table)
   147                              <2>  %endif
   148                              <2>  %if ELDOTHER
   149                              <2> 	lvar word, other
   150 00000C65 50                  <2> 	 push ax		; byte: 0 = own data links, -1 = other data links
   151                              <2>  %endif
   152                              <2>  %if _ELDDATA_OPTIONAL || _ELDCALL_OPTIONAL
   153                              <2> 	lvar word, optionalmissing
   154 00000C66 50                  <2> 	 push ax
   155                              <2>  %endif
   156                              <2> %endif
   157 00000C67 56                  <2> 	push si			; -> command line tail
   158 00000C68 53                  <2> 	push bx			; -> data block in ELD data area (segment ss)
   159                              <2> 
   160                              <2> 			; simple: add instance base (dx) to code
   161 00000C69 06                  <2> 	push es
   162 00000C6A 1F                  <2> 	pop ds			; ds = es => ELD cs
   163                              <2> %if _ELD_LINKER_PASSES
   164                              <2> .pass:
   165 00000C6B 8B5EE4              <2> 	mov bx, word [bp + ?pass]	; 0 or 2
   166 00000C6E 01D3                <2> 	add bx, dx		; -> start of the ELD instance in cs, +0 or +2
   167                              <2>  %if _ELD_IDENTICALISE
   168                              <2> 	add bx, word [bp + ?lt]	; add in single reference to linktable
   169                              <2> 	mov si, word [ltCodeToCode + bx]
   170                              <2>  %else
   171 00000C70 8BB70612            <2> 	mov si, word [linktable - code + ltCodeToCode + bx]
   172                              <2>  %endif
   173                              <2> %else
   174                              <2> 	mov si, internalcodetocoderelocations - code
   175                              <2> %endif		 		; si -> table for code to code (linker or app)
   176 00000C74 01D6                <2> 	add si, dx		; relocate the table pointer itself
   177                              <2> @@:
   178 00000C76 AD                  <2> 	lodsw
   179 00000C77 85C0                <2> 	test ax, ax		; was last ?
   180 00000C79 740B                <2> 	jz @F			; yes -->
   181 00000C7B 93                  <2> 	xchg bx, ax		; bx = entry
   182 00000C7C 01D3                <2> 	add bx, dx		; relocate the entry itself
   183                              <2> %if _ELD_CODE_VSTART
   184 00000C7E 812F[0000]          <2> 	sub word [bx], code	; undo adjustment
   185                              <2> %endif
   186 00000C82 0117                <2> 	add word [bx], dx	; relocate word referenced by entry
   187 00000C84 EBF0                <2> 	jmp @B
   188                              <2> 
   189                              <2> @@:
   190                              <2> 			; next, add heap data base (on stack) to code
   191                              <2> %if _ELD_LINKER_PASSES
   192 00000C86 8B5EE4              <2> 	mov bx, word [bp + ?pass]	; 0 or 2
   193 00000C89 01D3                <2> 	add bx, dx		; -> start of the ELD instance in cs, +0 or +2
   194                              <2>  %if _ELD_IDENTICALISE
   195                              <2> 	add bx, word [bp + ?lt]	; add in single reference to linktable
   196                              <2> 	mov si, word [ltCodeToData + bx]
   197                              <2>  %else
   198 00000C8B 8BB70A12            <2> 	mov si, word [linktable - code + ltCodeToData + bx]
   199                              <2>  %endif
   200                              <2> %else
   201                              <2> 	mov si, internalcodetodatarelocations - code
   202                              <2> %endif				; si -> table for code to data (linker or app)
   203 00000C8F 01D6                <2> 	add si, dx		; relocate the table pointer itself
   204                              <2> @@:
   205 00000C91 AD                  <2> 	lodsw
   206 00000C92 85C0                <2> 	test ax, ax		; was last ?
   207 00000C94 740C                <2> 	jz @F			; yes -->
   208 00000C96 93                  <2> 	xchg bx, ax		; bx = entry
   209 00000C97 01D3                <2> 	add bx, dx		; relocate the entry itself
   210                              <2> 		; ! access the offset of the data area block, topmost on stack
   211 00000C99 58                  <2> 	pop ax			; ax -> heap data
   212 00000C9A 50                  <2> 	push ax
   213                              <2> %if _ELD_DATA_VSTART
   214 00000C9B 2D[0000]            <2> 	sub ax, datastart	; undo adjustment
   215                              <2> %endif
   216 00000C9E 0107                <2> 	add word [bx], ax	; relocate word referenced by entry
   217 00000CA0 EBEF                <2> 	jmp @B
   218                              <2> 
   219                              <2> @@:
   220                              <2> 
   221                              <2> 			; add instance base (dx) to data
   222                              <2> %if _ELD_LINKER_PASSES
   223 00000CA2 8B5EE4              <2> 	mov bx, word [bp + ?pass]
   224 00000CA5 01D3                <2> 	add bx, dx
   225                              <2>  %if _ELD_IDENTICALISE
   226                              <2> 	add bx, word [bp + ?lt]
   227                              <2> 	mov si, word [ltDataToCode + bx]
   228                              <2>  %else
   229 00000CA7 8BB70E12            <2> 	mov si, word [linktable - code + ltDataToCode + bx]
   230                              <2>  %endif
   231                              <2> %else
   232                              <2> 	mov si, internaldatatocoderelocations - code
   233                              <2> %endif
   234 00000CAB 01D6                <2> 	add si, dx
   235                              <2> @@:
   236 00000CAD AD                  <2> 	lodsw
   237 00000CAE 83F8FF              <2> 	cmp ax, -1		; was last ?
   238 00000CB1 740F                <2> 	je @F			; yes -->
   239 00000CB3 93                  <2> 	xchg bx, ax		; bx = entry
   240                              <2> 		; ! access the offset of the data area block, topmost on stack
   241 00000CB4 58                  <2> 	pop ax
   242 00000CB5 50                  <2> 	push ax
   243 00000CB6 01C3                <2> 	add bx, ax		; relocate the entry itself
   244                              <2> %if _ELD_CODE_VSTART
   245 00000CB8 36812F[0000]        <2> 	sub word [ss:bx], code	; undo adjustment
   246                              <2> %endif
   247 00000CBD 360117              <2> 	add word [ss:bx], dx	; relocate word referenced by entry
   248 00000CC0 EBEB                <2> 	jmp @B
   249                              <2> 
   250                              <2> @@:
   251                              <2> 			; next, add heap data base (on stack) to data
   252                              <2> %if _ELD_LINKER_PASSES
   253 00000CC2 8B5EE4              <2> 	mov bx, word [bp + ?pass]
   254 00000CC5 01D3                <2> 	add bx, dx
   255                              <2>  %if _ELD_IDENTICALISE
   256                              <2> 	add bx, word [bp + ?lt]
   257                              <2> 	mov si, word [ltDataToData + bx]
   258                              <2>  %else
   259 00000CC7 8BB71212            <2> 	mov si, word [linktable - code + ltDataToData + bx]
   260                              <2>  %endif
   261                              <2> %else
   262                              <2> 	mov si, internaldatatodatarelocations - code
   263                              <2> %endif
   264 00000CCB 01D6                <2> 	add si, dx
   265                              <2> @@:
   266 00000CCD AD                  <2> 	lodsw
   267 00000CCE 83F8FF              <2> 	cmp ax, -1		; was last ?
   268 00000CD1 740D                <2> 	je @F			; yes -->
   269 00000CD3 93                  <2> 	xchg bx, ax		; bx = entry
   270                              <2> 		; ! access the offset of the data area block, topmost on stack
   271 00000CD4 58                  <2> 	pop ax			; ax -> heap data
   272 00000CD5 50                  <2> 	push ax
   273 00000CD6 01C3                <2> 	add bx, ax		; relocate the entry itself
   274                              <2> %if _ELD_DATA_VSTART
   275 00000CD8 2D[0000]            <2> 	sub ax, datastart	; undo adjustment
   276                              <2> %endif
   277 00000CDB 360107              <2> 	add word [ss:bx], ax	; relocate word referenced by entry
   278 00000CDE EBED                <2> 	jmp @B
   279                              <2> 
   280                              <2> @@:
   281 00000CE0 8B56F6              <2> 	mov dx, word [bp + ?instance]
   282                              <2> 				; reset (why??) -> ELD instance in ELD cs
   283                              <2> %if _ELD_LINKER_PASSES
   284 00000CE3 8B5EE4              <2> 	mov bx, word [bp + ?pass]
   285 00000CE6 01D3                <2> 	add bx, dx
   286                              <2>  %if _ELD_IDENTICALISE
   287                              <2> 	add bx, word [bp + ?lt]
   288                              <2> 	add dx, word [ltLinkData + bx]
   289                              <2>  %else
   290 00000CE8 03971612            <2> 	add dx, word [linktable - code + ltLinkData + bx]
   291                              <2>  %endif
   292                              <2> %else
   293                              <2> 	add dx, linkerdatarelocations - code
   294                              <2> %endif
   295                              <2> .otherloop:
   296 00000CEC 8956EC              <2> 	mov word [bp + ?nextreloc], dx
   297                              <2> 				; -> data link relocation table
   298                              <2> 
   299                              <2> .datarelocloop:		; must be done before further relocs
   300 00000CEF C576EC              <2> 	lds si, [bp + ?nextreloc]
   301 00000CF2 AD                  <2> 	lodsw			; ax = section indicator
   302 00000CF3 85C0                <2> 	test ax, ax		; end of table ?
   303 00000CF5 7503E9C501          <2> 	jz .donedatareloc
   304 00000CFA 48                  <2> 	dec ax			; al = 1 if data, 0 if code (NB ah may != 0)
   305                              <2> 		; ! access the offset of the data area block, topmost on stack
   306 00000CFB 5B                  <2> 	pop bx
   307 00000CFC 53                  <2> 	push bx			; bx -> ELD data block
   308 00000CFD 8946F4              <2> 	mov word [bp + ?targetsection_low_optional_high], ax
   309 00000D00 84C0                <2> 	test al, al		; data ?
   310 00000D02 AD                  <2> 	lodsw
   311 00000D03 7504                <2> 	jnz @F			; yes -->
   312 00000D05 0346F6              <2> 	add ax, word [bp + ?instance]
   313                              <2> 				; relocate entry into code
   314 00000D08 A9                  <2> 	db __TEST_IMM16		; (skip add)
   315                              <2> @@:
   316 00000D09 01D8                <2> 	add ax, bx		; relocate entry into data
   317 00000D0B 8946E8              <2> 	mov word [bp + ?entry], ax
   318                              <2> 				; save away -> where to patch
   319 00000D0E AD                  <2> 	lodsw			; get unrelocated -> name
   320 00000D0F 8976EC              <2> 	mov word [bp + ?nextreloc], si
   321                              <2> 				; update -> behind relocation table entry
   322                              <2> %if _ELDDATA_NEXT
   323 00000D12 D046E7              <2> 	rol byte [bp + ?skip_last], 1	; skipping ?
   324 00000D15 730B                <2> 	jnc @F				; no -->
   325 00000D17 F646F508            <2> 	test byte [bp + ?optional], 8	; is it a last relocation ?
   326 00000D1B 74D2                <2> 	jz .datarelocloop		; no, leave skip_last set -->
   327 00000D1D F656E7              <2> 	not byte [bp + ?skip_last]	; disable skip_last
   328 00000D20 EBCD                <2> 	jmp .datarelocloop
   329                              <2> @@:
   330                              <2> %endif
   331 00000D22 E85501              <2> 	call .build_match	; get ax = scan value, si -> counted string,
   332                              <2> 				;  dl = original value at byte [si]
   333                              <2> 				; NC if symbol already not found before
   334                              <2> 				; CY if to search for the symbol
   335                              <2> %if _ELD_LINKER_PASSES
   336 00000D25 73C8                <2> 	jnc .datarelocloop	; if duplicate of a not found symbol -->
   337                              <2> %endif
   338 00000D27 C45EF0              <2> 	les bx, [bp + ?linkinfo]
   339                              <2> %if ELDOTHER
   340 00000D2A D046DE              <2> 	rol byte [bp + ?other], 1
   341 00000D2D 7303                <2> 	jnc @F
   342 00000D2F C45EFC              <2> 	les bx, [bp + ?linkinfo_other]
   343                              <2> @@:
   344                              <2> %endif				; es:bx -> link info table of the ELD host
   345 00000D32 268B4F08            <2> 	mov cx, word [es:bx + eldlDataAmount]	; amount data link info
   346 00000D36 268B7F0A            <2> 	mov di, word [es:bx + eldlDataPrefixes]	; -> prefixes or hashes
   347                              <2> .datarelocfind:
   348 00000D3A 83F901              <2> 	cmp cx, 1			; NZ if cx == 0
   349 00000D3D F2AF                <2> 	repne scasw			; scan initial
   350                              <2> %if _ELDDATA_OPTIONAL
   351 00000D3F 754F                <2> 	jne .datanotfound_may_be_optional
   352                              <2> %else
   353                              <2> 	jne .datanotfound
   354                              <2> %endif
   355 00000D41 57                  <2> 	push di
   356 00000D42 51                  <2> 	push cx
   357 00000D43 56                  <2> 	push si
   358 00000D44 262B7F0A            <2> 	sub di, word [es:bx + eldlDataPrefixes]	; = double index, 1-based
   359 00000D48 4F                  <2> 	dec di
   360 00000D49 4F                  <2> 	dec di				; 0-based
   361 00000D4A 26037F0C            <2> 	add di, word [es:bx + eldlDataEntries]	; -> entry
   362 00000D4E 268B3D              <2> 	mov di, [es:di]			; -> counted suffix/string
   363 00000D51 B500                <2> 	mov ch, 0
   364 00000D53 8A0C                <2> 	mov cl, byte [si]		; cx = length
   365 00000D55 41                  <2> 	inc cx
   366                              <2> 	; cmp al, al			; ZR if length is zero
   367 00000D56 F3A6                <2> 	repe cmpsb			; match ?
   368 00000D58 5E                  <2> 	pop si
   369 00000D59 59                  <2> 	pop cx
   370 00000D5A 5F                  <2> 	pop di
   371 00000D5B 75DD                <2> 	jne .datarelocfind		; if not found this time,
   372                              <2> 					;  scan for next initial -->
   373 00000D5D 8814                <2> 	mov byte [si], dl		; restore the original byte at counter
   374 00000D5F 262B7F0A            <2> 	sub di, word [es:bx + eldlDataPrefixes]	; = double index, 1-based
   375 00000D63 4F                  <2> 	dec di
   376 00000D64 4F                  <2> 	dec di				; 0-based
   377 00000D65 26037F0E            <2> 	add di, word [es:bx + eldlDataAddresses]	; -> address (offset)
   378 00000D69 268B05              <2> 	mov ax, word [es:di]		; get link data from the table
   379 00000D6C E81500              <2> 	call .address_data_reloc
   380                              <2> %if _ELD_RELOC_VSTART
   381 00000D6F 2D[0000]            <2> 	sub ax, relocateddata		; *not* a relocation
   382                              <2> %endif
   383 00000D72 0104                <2> 	add word [si], ax		; relocate
   384                              <2> %if _ELDDATA_NEXT
   385 00000D74 F646F504            <2> 	test byte [bp + ?optional], 4	; is it a next relocation ?
   386 00000D78 7503E972FF          <2> 	jz .datarelocloop
   387 00000D7D C646E7FF            <2> 	mov byte [bp + ?skip_last], -1	; skip subsequent next/last relocs
   388                              <2> %endif
   389 00000D81 E96BFF              <2> 	jmp .datarelocloop
   390                              <2> 
   391                              <2> .address_data_reloc:
   392 00000D84 C576E8              <2> 	lds si, [bp + ?entry]		; -> entry if in ELD code instance
   393 00000D87 807EF400            <2> 	cmp byte [bp + ?targetsection], 0
   394                              <2> 					; relocation in code ?
   395 00000D8B 7402                <2> 	je @F				; yes -->
   396 00000D8D 16                  <2> 	push ss
   397 00000D8E 1F                  <2> 	pop ds				; => our ELD data block
   398                              <2> @@:
   399 00000D8F C3                  <2> 	retn
   400                              <2> 
   401                              <2> %if _ELDDATA_OPTIONAL
   402                              <2> .datanotfound_may_be_optional:
   403 00000D90 8814                <2> 	mov byte [si], dl		; restore the original byte at counter
   404                              <2> %if _ELDDATA_NEXT
   405 00000D92 F646F503            <2> 	test byte [bp + ?optional], 3	; is it an optional relocation ?
   406                              <2> %else
   407                              <2> 	cmp byte [bp + ?optional], 0	; is it an optional relocation ?
   408                              <2> %endif
   409                              <2> %if _ELD_DEBUG
   410                              <2> 	jnz @F
   411                              <2>  %ifn _ELD_LINKER_PASSES
   412                              <2> 	mov si, 0			; (invalid link)
   413                              <2> linkdatarelocation internalflags6
   414                              <2> 	test si, si
   415                              <2> 	jz .datanotfound
   416                              <2> 	mov si, 0			; (invalid link)
   417                              <2> linkdatarelocation options7
   418                              <2> 	test si, si
   419                              <2> 	jz .datanotfound
   420                              <2>  %else
   421                              <2> 	cmp byte [bp + ?pass], 0
   422                              <2> 	je .datanotfound
   423                              <2>  %endif
   424                              <2> 	houdini				; (the above conditions are for this)
   425                              <2> 	jmp .datanotfound
   426                              <2> @@:
   427                              <2> %else
   428 00000D96 7472                <2> 	jz .datanotfound		; no, handle as an error -->
   429                              <2> %endif
   430                              <2> 
   431                              <2> %if ELDDATA_PMREQUIRED_STATUS
   432                              <2> 	mov si, relocateddata
   433                              <2> linkdatarelocation build_option_PM
   434                              <2> 	test si, si			; is it a PM build ?
   435                              <2> 	jz @F				; no --> (treat PM required as optional)
   436                              <2> 	test byte [bp + ?optional], 2	; optional status is PM required ?
   437                              <2> 	jnz .datanotfound		; yes, handle as an error -->
   438                              <2> @@:
   439                              <2> %endif
   440                              <2> 
   441                              <2> %if _ELD_LINKER_PASSES
   442                              <2> %if _ELDDATA_OPTIONAL || _ELDCALL_OPTIONAL
   443 00000D98 D046DC              <2> 	rol byte [bp + ?optionalmissing], 1
   444 00000D9B 730B                <2> 	jnc .optionaldatamissingmsg
   445 00000D9D 8B76E0              <2> 	mov si, [bp + ?name]
   446 00000DA0 800C80              <2> 	or byte [si], 80h
   447 00000DA3 F656DC              <2> 	not byte [bp + ?optionalmissing]
   448 00000DA6 EB15                <2> 	jmp @F
   449                              <2> .optionaldatamissingmsg:
   450                              <2> %endif
   451 00000DA8 36F606[0000]02      <2> 	testopt [ss:relocateddata], 2	; debug optional link ?
   452                              <2> linkdatarelocation options7, -3
   453 00000DAE 740D                <2> 	jz @F				; no -->
   454                              <2> %if _ELDDATA_OPTIONAL || _ELDCALL_OPTIONAL
   455 00000DB0 C646DDFF            <2> 	mov byte [bp + ?optionalmissing + 1], -1
   456                              <2> %endif
   457 00000DB4 BE[E41F]            <2> 	mov si, lmsg.warning_data_optional
   458                              <2> internalcoderelocation
   459 00000DB7 E86F00              <2> 	call .notfound			; display a warning
   460                              <2> %if _ELDDATA_OPTIONAL || _ELDCALL_OPTIONAL
   461 00000DBA F656DD              <2> 	not byte [bp + ?optionalmissing + 1]
   462                              <2> %endif
   463                              <2> @@:
   464                              <2> %endif
   465                              <2> %if _ELDDATA_NEXT
   466 00000DBD F646F504            <2> 	test byte [bp + ?optional], 4	; is it a next relocation ?
   467 00000DC1 7403E929FF          <2> 	jnz .datarelocloop
   468                              <2> %endif
   469 00000DC6 E8BBFF              <2> 	call .address_data_reloc
   470 00000DC9 832400              <2> 	and word [si], 0		; indicate optional data link failed
   471 00000DCC E920FF              <2> 	jmp .datarelocloop
   472                              <2> %endif
   473                              <2> 
   474                              <2> 
   475                              <2> %if _ELDCALL_OPTIONAL
   476                              <2> .codenotfound_may_be_optional:
   477 00000DCF 8814                <2> 	mov byte [si], dl		; restore the original byte at counter
   478                              <2> %if _ELDCALL_NEXT
   479                              <2> 	test byte [bp + ?optional], 3	; is it an optional relocation ?
   480                              <2> %else
   481 00000DD1 807EF500            <2> 	cmp byte [bp + ?optional], 0	; is it an optional relocation ?
   482                              <2> %endif
   483                              <2> %if _ELD_DEBUG
   484                              <2> 	jnz @F
   485                              <2>  %ifn _ELD_LINKER_PASSES
   486                              <2> 	mov si, 0			; (invalid link)
   487                              <2> linkdatarelocation internalflags6
   488                              <2> 	test si, si
   489                              <2> 	jz .codenotfound
   490                              <2> 	mov si, 0			; (invalid link)
   491                              <2> linkdatarelocation options7
   492                              <2> 	test si, si
   493                              <2> 	jz .codenotfound
   494                              <2>  %else
   495                              <2> 	cmp byte [bp + ?pass], 0
   496                              <2> 	je .codenotfound
   497                              <2>  %endif
   498                              <2> 	houdini				; (the above conditions are for this)
   499                              <2> 	jmp .codenotfound
   500                              <2> @@:
   501                              <2> %else
   502 00000DD5 7444                <2> 	jz .codenotfound		; no, handle as an error -->
   503                              <2> %endif
   504                              <2> 
   505                              <2> %if ELDCALL_PMREQUIRED_STATUS
   506                              <2>  %if _ELD_LINKER_PASSES
   507                              <2>   %assign ELDLINKER 0
   508                              <2>  %endif
   509                              <2> 	mov si, relocateddata
   510                              <2> linkdatarelocation build_option_PM
   511                              <2>  %if _ELD_LINKER_PASSES
   512                              <2>   %assign ELDLINKER 1
   513                              <2>  %endif
   514                              <2> 	test si, si			; is it a PM build ?
   515                              <2> 	jz @F				; no --> (treat PM required as optional)
   516                              <2> 	test byte [bp + ?optional], 2	; optional status is PM required ?
   517                              <2> 	jnz .codenotfound		; yes, handle as an error -->
   518                              <2> @@:
   519                              <2> %endif
   520                              <2> 
   521                              <2> %if _ELD_LINKER_PASSES
   522                              <2> %if _ELDDATA_OPTIONAL || _ELDCALL_OPTIONAL
   523 00000DD7 D046DC              <2> 	rol byte [bp + ?optionalmissing], 1
   524 00000DDA 730B                <2> 	jnc .optionalcodemissingmsg
   525 00000DDC 8B76E0              <2> 	mov si, [bp + ?name]
   526 00000DDF 800C80              <2> 	or byte [si], 80h
   527 00000DE2 F656DC              <2> 	not byte [bp + ?optionalmissing]
   528 00000DE5 EB15                <2> 	jmp @F
   529                              <2> .optionalcodemissingmsg:
   530                              <2> %endif
   531 00000DE7 36F606[0000]02      <2> 	testopt [ss:relocateddata], 2	; debug optional link ?
   532                              <2> linkdatarelocation options7, -3
   533 00000DED 740D                <2> 	jz @F				; no -->
   534                              <2> %if _ELDDATA_OPTIONAL || _ELDCALL_OPTIONAL
   535 00000DEF C646DDFF            <2> 	mov byte [bp + ?optionalmissing + 1], -1
   536                              <2> %endif
   537 00000DF3 BE[C21F]            <2> 	mov si, lmsg.warning_code_optional
   538                              <2> internalcoderelocation
   539 00000DF6 E83000              <2> 	call .notfound			; display a warning
   540                              <2> %if _ELDDATA_OPTIONAL || _ELDCALL_OPTIONAL
   541 00000DF9 F656DD              <2> 	not byte [bp + ?optionalmissing + 1]
   542                              <2> %endif
   543                              <2> @@:
   544                              <2> %endif
   545                              <2> %if _ELDCALL_NEXT
   546                              <2> 	test byte [bp + ?optional], 4	; is it a next relocation ?
   547                              <2> 	jnz .coderelocloop
   548                              <2> %endif
   549 00000DFC C576E8              <2> 	lds si, [bp + ?entry]		; -> code site (must be in ELD cs)
   550 00000DFF C7049090            <2> 	mov word [si], 9090h
   551 00000E03 C6440290            <2> 	mov byte [si + 2], 90h		; indicate optional code link failed
   552                              <2> 					;  (NOP out the 3-byte call near imm)
   553 00000E07 E9CC00              <2> 	jmp .coderelocloop
   554                              <2> %endif
   555                              <2> 
   556                              <2> 
   557                              <2> %if _ELD_LINKER_PASSES
   558                              <2> .datanotfound:
   559 00000E0A BE[0620]            <2> 	mov si, lmsg.error_data
   560                              <2> internalcoderelocation
   561 00000E0D E81900              <2> 	call .notfound			; display error
   562 00000E10 7306                <2> 	jnc .error_j3			; NC if in pass 0, error out now -->
   563 00000E12 FF46E2              <2> 	inc word [bp + ?amounterrors]	; count the amount of errors
   564 00000E15 E9D7FE              <2> 	jmp .datarelocloop		; go to next relocation entry -->
   565                              <2> 
   566                              <2> .error_j3:
   567 00000E18 E99D02              <2> 	jmp .error
   568                              <2> 
   569                              <2> .codenotfound:
   570 00000E1B BE[1F20]            <2> 	mov si, lmsg.error_code
   571                              <2> internalcoderelocation
   572 00000E1E E80800              <2> 	call .notfound			; display error
   573 00000E21 73F5                <2> 	jnc .error_j3			; NC if in pass 0 -->
   574 00000E23 FF46E2              <2> 	inc word [bp + ?amounterrors]	; count the amount of errors
   575 00000E26 E9AD00              <2> 	jmp .coderelocloop		; go to next -->
   576                              <2> 
   577                              <2> .notfound:
   578 00000E29 807EE400            <2> 	cmp byte [bp + ?pass], 0	; pass 0 ?
   579 00000E2D 7442                <2> 	je .notfound.retn		; yes, do not try displaying --> (NC)
   580 00000E2F 16                  <2> 	 push ss
   581 00000E30 07                  <2> 	 pop es
   582 00000E31 BF[0000]            <2> 	mov di, relocateddata
   583                              <2> linkdatarelocation line_out		; es:di -> line_out buffer
   584 00000E34 E83B00              <2> 	call .copy			; copy prefix message
   585 00000E37 8B76E0              <2> 	mov si, word [bp + ?name]
   586 00000E3A AD                  <2> 	lodsw				; = hash
   587 00000E3B E8[0000]EB020000    <2> 	extcall hexword			; display the hash in hex
   588 00000E42 56                  <2> 	push si
   589 00000E43 BE[3820]            <2> 	mov si, lmsg.error.2
   590                              <2> internalcoderelocation
   591 00000E46 E82900              <2> 	call .copy			; display message fragment
   592 00000E49 5E                  <2> 	pop si
   593                              <2> %if _ELD_LINKER_PASSES
   594 00000E4A 56                  <2> 	push si
   595 00000E4B E82400              <2> 	call .copy			; copy over the full name
   596 00000E4E 5E                  <2> 	pop si
   597                              <2>  %if _ELDDATA_OPTIONAL || _ELDCALL_OPTIONAL
   598 00000E4F 800C80              <2> 	or byte [si], 80h		; mark as failed optional link
   599 00000E52 D046DD              <2> 	rol byte [bp + ?optionalmissing + 1], 1
   600                              <2> 					; was it optional ?
   601 00000E55 7203                <2> 	jc @F				; yes -->
   602                              <2>  %endif
   603 00000E57 C60400              <2> 	mov byte [si], 0		; mark as failed (counter byte = 0)
   604                              <2> @@:
   605                              <2> %else
   606                              <2> 	call .copy
   607                              <2> %endif
   608 00000E5A B022                <2> 	mov al, '"'
   609 00000E5C AA                  <2> 	stosb				; end message with a closing quote mark
   610 00000E5D 16                  <2> 	 push ss
   611 00000E5E 1F                  <2> 	 pop ds
   612 00000E5F E8[0000]EB020000    <2> 	extcall putsline_crlf		; display diagnostic line
   613 00000E66 B8350E              <2> 	mov ax, 0E35h
   614 00000E69 E8[0000]EB020000    <2> 	extcall setrc
   615 00000E70 F9                  <2> 	stc				; CY, diagnostic displayed
   616                              <2> .notfound.retn:
   617 00000E71 C3                  <2> 	retn
   618                              <2> 
   619                              <2> .copy:		; (cannot use extcallcall here)
   620 00000E72 E8[0000]EB020000    <2> 	extcall copy_single_counted_string
   621 00000E79 C3                  <2> 	retn
   622                              <2> %else
   623                              <2> .datanotfound: equ .error
   624                              <2> .codenotfound: equ .error
   625                              <2> %endif
   626                              <2> 
   627                              <2> .build_match:
   628                              <2> %if _ELDDATA_OPTIONAL || _ELDCALL_OPTIONAL
   629 00000E7A C646DC00            <2> 	mov byte [bp + ?optionalmissing], 0
   630                              <2> 		; This is needed for eldtestj.asm with debugoptlink.
   631                              <2> 		;  The optional data link sets flag 80h, then the
   632                              <2> 		;  required data link to the same symbol sets this
   633                              <2> 		;  flag but doesn't reset it. So the first optional
   634                              <2> 		;  code link still had this set. Reset here to fix.
   635                              <2> %endif
   636                              <2> %if _ELD_CODE_VSTART
   637 00000E7E 2D[0000]            <2> 	sub ax, code			; revert adjustment (= displacement)
   638                              <2> %endif
   639 00000E81 0346F6              <2> 	add ax, word [bp + ?instance]	; make displacement into -> name string
   640 00000E84 96                  <2> 	xchg si, ax			; si -> hash word, counted name string
   641                              <2> %if _ELD_LINKER_PASSES || _ELDDATA_OPTIONAL || _ELDCALL_OPTIONAL
   642 00000E85 8976E0              <2> 	mov word [bp + ?name], si	; save away for diagnostics
   643                              <2> %endif
   644 00000E88 AD                  <2> 	lodsw			; = hash, si -> counted string
   645 00000E89 8A14                <2> 	mov dl, byte [si]	; dl = original start byte of match
   646                              <2> %if _ELD_LINKER_PASSES
   647 00000E8B 84D2                <2> 	test dl, dl		; marked as already failed ?
   648                              <2> 				;  (80h = optional, 0 = required)
   649 00000E8D 750A                <2> 	jnz @F			; no -->
   650 00000E8F 837EE200            <2> 	cmp word [bp + ?amounterrors], 0
   651                              <2> 				; validate error status
   652 00000E93 7503E9C500          <2> 	je .error_j		; no error known ?! cancel quickly -->
   653 00000E98 C3                  <2> 	retn			; (NC)
   654                              <2> 
   655                              <2> @@:
   656                              <2> %else
   657                              <2> 	test dl, dl
   658                              <2> %endif
   659                              <2> %if _ELDDATA_OPTIONAL || _ELDCALL_OPTIONAL
   660 00000E99 7909                <2> 	jns @F
   661 00000E9B 80E27F              <2> 	and dl, 7Fh
   662 00000E9E 8814                <2> 	mov byte [si], dl
   663 00000EA0 C646DCFF            <2> 	mov byte [bp + ?optionalmissing], -1
   664                              <2> @@:
   665                              <2> %endif
   666                              <2> %if ELDOTHER
   667 00000EA4 D046DE              <2> 	rol byte [bp + ?other], 1
   668 00000EA7 7305                <2> 	jnc @F
   669 00000EA9 D046FA              <2> 	rol byte [bp + ?use_hash_other], 1
   670 00000EAC EB03                <2> 	jmp @FF
   671                              <2> 
   672                              <2> @@:
   673                              <2> %endif
   674 00000EAE D046E6              <2> 	rol byte [bp + ?use_hash], 1
   675                              <2> @@:
   676                              <2> 		; If to use the hash, then ax = hash and si ->
   677                              <2> 		;  the entire symbol name as a counted string.
   678 00000EB1 720A                <2> 	jc @F			; if to use hash, return now -->
   679 00000EB3 AC                  <2> 	lodsb			; al = length
   680 00000EB4 91                  <2> 	xchg cx, ax		; cl = length
   681 00000EB5 AD                  <2> 	lodsw			; ax = prefix
   682 00000EB6 49                  <2> 	dec cx
   683 00000EB7 49                  <2> 	dec cx			; cl = adjusted length
   684 00000EB8 4E                  <2> 	dec si			; -> second byte of prefix
   685 00000EB9 8A14                <2> 	mov dl, byte [si]	; dl = original start byte of match
   686 00000EBB 880C                <2> 	mov byte [si], cl	; si -> counted string suffix
   687                              <2> 		; (this name entry has been edited to provide the
   688                              <2> 		;  name suffix as a counted string, as required by
   689                              <2> 		;  the old-style non-hash link info tables.
   690                              <2> 		; it will be reset later by writing dl to si -> the
   691                              <2> 		;  first byte of the match string.)
   692                              <2> @@:
   693                              <2> %if _ELD_LINKER_PASSES
   694 00000EBD F9                  <2> 	stc			; CY
   695                              <2> %endif
   696 00000EBE C3                  <2> 	retn
   697                              <2> 
   698                              <2> 
   699                              <2> .donedatareloc:
   700                              <2> %if ELDOTHER
   701 00000EBF D046DE              <2> 	rol byte [bp + ?other], 1
   702 00000EC2 7303E9CC01          <2> 	jc .otherdone		; other link only has data links,
   703                              <2> 				;  so at this point we're done -->
   704                              <2> %endif
   705                              <2> 
   706 00000EC7 8B56F6              <2> 	mov dx, word [bp + ?instance]
   707                              <2> %if _ELD_LINKER_PASSES
   708 00000ECA 8B5EE4              <2> 	mov bx, word [bp + ?pass]
   709 00000ECD 01D3                <2> 	add bx, dx
   710                              <2>  %if _ELD_IDENTICALISE
   711                              <2> 	add bx, word [bp + ?lt]
   712                              <2> 	add dx, word [ltLinkCode + bx]
   713                              <2>  %else
   714 00000ECF 03971A12            <2> 	add dx, word [linktable - code + ltLinkCode + bx]
   715                              <2>  %endif
   716                              <2> %else
   717                              <2> 	add dx, linkercoderelocations - code
   718                              <2> %endif
   719 00000ED3 8956EC              <2> 	mov word [bp + ?nextreloc], dx
   720                              <2> 
   721                              <2> .coderelocloop:
   722 00000ED6 C576EC              <2> 	lds si, [bp + ?nextreloc]
   723 00000ED9 AD                  <2> 	lodsw
   724                              <2> %if _ELDCALL_OPTIONAL || _ELDCALL_NEXT
   725 00000EDA 48                  <2> 	dec ax				; optional word is 1-based, get 0-based
   726 00000EDB 7903E98F00          <2> 	js .donecodereloc
   727 00000EE0 8946F4              <2> 	mov word [bp + ?targetsection_low_optional_high], ax
   728 00000EE3 AD                  <2> 	lodsw
   729                              <2> %endif
   730 00000EE4 0346F6              <2> 	add ax, word [bp + ?instance]
   731 00000EE7 8946E8              <2> 	mov word [bp + ?entry], ax
   732 00000EEA AD                  <2> 	lodsw
   733 00000EEB 8976EC              <2> 	mov word [bp + ?nextreloc], si
   734                              <2> %ifn _ELDCALL_OPTIONAL || _ELDCALL_NEXT
   735                              <2> 	test ax, ax			; if no optional word, check -> match
   736                              <2> 	jz .donecodereloc
   737                              <2> %endif
   738                              <2> %if _ELDCALL_NEXT
   739                              <2> 	rol byte [bp + ?skip_last], 1	; skipping ?
   740                              <2> 	jnc @F				; no -->
   741                              <2> 	test byte [bp + ?optional], 8	; is it a last relocation ?
   742                              <2> 	jz .coderelocloop		; no, leave skip_last set -->
   743                              <2> 	not byte [bp + ?skip_last]	; disable skip_last
   744                              <2> 	jmp .coderelocloop
   745                              <2> @@:
   746                              <2> %endif
   747 00000EEE E889FF              <2> 	call .build_match
   748                              <2> %if _ELD_LINKER_PASSES
   749 00000EF1 73E3                <2> 	jnc .coderelocloop
   750                              <2> %endif
   751 00000EF3 C45EF0              <2> 	les bx, [bp + ?linkinfo]
   752 00000EF6 268B4F10            <2> 	mov cx, word [es:bx + eldlCodeAmount]	; amount code link info
   753 00000EFA 268B7F12            <2> 	mov di, word [es:bx + eldlCodePrefixes]	; -> prefixes or hashes
   754                              <2> .coderelocfind:
   755 00000EFE 83F901              <2> 	cmp cx, 1			; NZ if cx == 0
   756 00000F01 F2AF                <2> 	repne scasw			; scan initial
   757                              <2> %if _ELDCALL_OPTIONAL
   758 00000F03 7403E9C7FE          <2> 	jne .codenotfound_may_be_optional
   759                              <2> %else
   760                              <2>  %if _ELD_DEBUG
   761                              <2> 	je @F
   762                              <2> 	houdini
   763                              <2> 	jmp .codenotfound
   764                              <2> @@:
   765                              <2>  %else
   766                              <2> 	jne .codenotfound
   767                              <2>  %endif
   768                              <2> %endif
   769 00000F08 57                  <2> 	push di
   770 00000F09 51                  <2> 	push cx
   771 00000F0A 56                  <2> 	push si
   772 00000F0B 262B7F12            <2> 	sub di, word [es:bx + eldlCodePrefixes]	; = double index, 1-based
   773 00000F0F 4F                  <2> 	dec di
   774 00000F10 4F                  <2> 	dec di				; 0-based
   775 00000F11 26037F14            <2> 	add di, word [es:bx + eldlCodeEntries]	; -> entry
   776 00000F15 268B3D              <2> 	mov di, [es:di]			; -> counted suffix/string
   777 00000F18 B500                <2> 	mov ch, 0
   778 00000F1A 8A0C                <2> 	mov cl, byte [si]		; cx = length
   779 00000F1C 41                  <2> 	inc cx
   780                              <2> 	; cmp al, al			; ZR if length is zero
   781 00000F1D F3A6                <2> 	repe cmpsb			; match ?
   782 00000F1F 5E                  <2> 	pop si
   783 00000F20 59                  <2> 	pop cx
   784 00000F21 5F                  <2> 	pop di
   785 00000F22 75DA                <2> 	jne .coderelocfind
   786 00000F24 8814                <2> 	mov byte [si], dl
   787 00000F26 262B7F12            <2> 	sub di, word [es:bx + eldlCodePrefixes]	; = double index, 1-based
   788 00000F2A 4F                  <2> 	dec di
   789 00000F2B 4F                  <2> 	dec di				; 0-based
   790 00000F2C 01FF                <2> 	add di, di			; quadruple index
   791 00000F2E 26037F16            <2> 	add di, word [es:bx + eldlCodeAddresses]	; -> address (offset, segment)
   792 00000F32 26FF35              <2> 	push word [es:di]
   793 00000F35 C576E8              <2> 	lds si, [bp + ?entry]
   794 00000F38 8F4405              <2> 	pop word [si + 3 + 2]		; call near imm (3), jmp short (2)
   795                              <2> 					;  patch the destination address
   796 00000F3B 803CE8              <2> 	cmp byte [si], 0E8h		; is it as expected ?
   797 00000F3E 751D                <2> 	jne .error_j
   798 00000F40 268B7D02            <2> 	mov di, word [es:di + 2]
   799 00000F44 BB[0000]            <2> 	mov bx, relocateddata
   800                              <2> linkdatarelocation linkcall_table	; ss:bx -> link call table
   801 00000F47 36833F01            <2> 	cmp word [ss:bx], 1		; is it initialised to format 1 ?
   802 00000F4B 7510                <2> 	jne .error_j			; no -->
   803 00000F4D 368B4F02            <2> 	mov cx, word [ss:bx + 2]	; get amount of segments
   804 00000F51 E30A                <2> 	jcxz .error_j			; none -->
   805                              <2> @@:
   806 00000F53 83C304              <2> 	add bx, 4			; -> next segment
   807 00000F56 36393F              <2> 	cmp word [ss:bx], di		; value matches ?
   808 00000F59 7405                <2> 	je @F				; yes, found -->
   809 00000F5B E2F6                <2> 	loop @B				; try remaining segments
   810                              <2> .error_j:
   811 00000F5D E95801              <2> 	jmp .error
   812                              <2> 
   813                              <2> @@:
   814 00000F60 368B5F02            <2> 	mov bx, word [ss:bx + 2]	; -> call destination offset
   815                              <2> 		; si + 3 + delta = bx
   816                              <2> 		; delta = bx - si - 3
   817 00000F64 29F3                <2> 	sub bx, si
   818 00000F66 83EB03              <2> 	sub bx, 3
   819 00000F69 895C01              <2> 	mov word [si + 1], bx		; patch the call instruction
   820                              <2> %if _ELDCALL_NEXT
   821                              <2> 	test byte [bp + ?optional], 4	; is it a next relocation ?
   822                              <2> 	jz .coderelocloop
   823                              <2> 	mov byte [bp + ?skip_last], -1	; skip subsequent next/last relocs
   824                              <2> %endif
   825 00000F6C E967FF              <2> 	jmp .coderelocloop
   826                              <2> 
   827                              <2> .donecodereloc:
   828                              <2> %if _ELD_LINKER_PASSES
   829 00000F6F 8B46E2              <2> 	mov ax, word [bp + ?amounterrors]
   830 00000F72 85C0                <2> 	test ax, ax
   831 00000F74 75E7                <2> 	jnz .error_j
   832 00000F76 8B5EE4              <2> 	mov bx, word [bp + ?pass]
   833 00000F79 85DB                <2> 	test bx, bx
   834 00000F7B 750B                <2> 	jnz @F
   835 00000F7D 43                  <2> 	inc bx
   836 00000F7E 43                  <2> 	inc bx
   837 00000F7F 895EE4              <2> 	mov word [bp + ?pass], bx
   838 00000F82 8B56F6              <2> 	mov dx, word [bp + ?instance]
   839 00000F85 E9E3FC              <2> 	jmp .pass
   840                              <2> 
   841                              <2> @@:
   842                              <2> %endif
   843                              <2> 
   844                              <2> %ifnidni _LISTING, ""
   845                              <2> %assign ELDLINKER 0
   846                              <2> .hint:
   847 00000F88 16                  <2> 	push ss
   848 00000F89 1F                  <2> 	pop ds
   849 00000F8A B02D                <2> 	mov al, 2Dh
   850 00000F8C E8[0000]EB020000    <2> 	extcall intchk			; ZR if offset = -1 or segment = 0
   851                              <2> 					; CHG: ax, dx, bx
   852 00000F93 743A                <2> 	jz .no_hint
   853                              <2> 
   854                              <2> %if ELDOTHER
   855 00000F95 BE[5A17]            <2> 	mov si, debuggeramissig	; ds:si -> our AMIS name strings
   856                              <2> internalcoderelocation
   857                              <2> %endif
   858                              <2> 
   859 00000F98 8A26[0000]          <2> 	mov ah, byte [relocateddata]
   860                              <2> linkdatarelocation try_debugger_amis_multiplex_number
   861 00000F9C E82001              <2> 	call plex_check
   862 00000F9F 7305                <2> 	jnc @F
   863                              <2> 
   864 00000FA1 B4FF                <2> 	mov ah, 0FFh		; start with multiplex number 0FFh
   865                              <2> .loop_hint:
   866 00000FA3 E81901              <2> 	call plex_check
   867                              <2> @@:
   868 00000FA6 7307                <2> 	jnc .end_hint		; if found --> (NC)
   869 00000FA8 80EC01              <2> 	sub ah, 1		; search is backward (to find latest installed first), from 0FFh to 00h including
   870 00000FAB 73F6                <2> 	jnc .loop_hint		; try next if we didn't check all yet -->
   871 00000FAD EB20                <2> 	jmp .no_hint
   872                              <2> 
   873                              <2> .end_hint:
   874 00000FAF 50                  <2> 	push ax
   875 00000FB0 C446F6              <2> 	les ax, [bp + ?instance]
   876 00000FB3 BF[9C17]            <2> 	mov di, listmsg.hint.offset
   877                              <2> internalcoderelocation
   878 00000FB6 E8[0000]EB020000    <2> 	extcall hexword
   879 00000FBD BB[7A17]            <2> 	mov bx, listmsg.hint
   880                              <2> internalcoderelocation
   881 00000FC0 368B16[0000]        <2> 	mov dx, [ss:relocateddata]
   882                              <2> linkdatarelocation extseg	; must be 86 Mode segment even in PM
   883 00000FC5 58                  <2> 	pop ax
   884 00000FC6 B040                <2> 	mov al, 40h		; AMIS message display service
   885 00000FC8 E8[0000]EB020000    <2> 	extcall call_int2D
   886                              <2> .no_hint:
   887                              <2> %endif
   888                              <2> 
   889                              <2> %if ELDOTHER
   890                              <2> %assign ELDLINKER 0
   891 00000FCF F656DE              <2> 	not byte [bp + ?other]
   892                              <2> 
   893 00000FD2 16                  <2> 	push ss
   894 00000FD3 1F                  <2> 	pop ds
   895 00000FD4 B02D                <2> 	mov al, 2Dh
   896 00000FD6 E8[0000]EB020000    <2> 	extcall intchk			; ZR if offset = -1 or segment = 0
   897                              <2> 					; CHG: ax, dx, bx
   898 00000FDD 7503E99900          <2> 	jz .no_other
   899                              <2> 
   900 00000FE2 BE[5A17]            <2> 	mov si, debuggeramissig	; ds:si -> our AMIS name strings
   901                              <2> internalcoderelocation
   902                              <2> 
   903 00000FE5 8A26[0000]          <2> 	mov ah, byte [relocateddata]
   904                              <2> linkdatarelocation try_debugger_amis_multiplex_number
   905 00000FE9 E8D300              <2> 	call plex_check
   906 00000FEC 7305                <2> 	jnc @F
   907                              <2> 
   908 00000FEE B4FF                <2> 	mov ah, 0FFh		; start with multiplex number 0FFh
   909                              <2> .loop_other_debug:
   910 00000FF0 E8CC00              <2> 	call plex_check
   911                              <2> @@:
   912 00000FF3 731F                <2> 	jnc .end_other		; if found --> (NC)
   913 00000FF5 80EC01              <2> 	sub ah, 1		; search is backward (to find latest installed first), from 0FFh to 00h including
   914 00000FF8 73F6                <2> 	jnc .loop_other_debug	; try next if we didn't check all yet -->
   915                              <2> 
   916 00000FFA BE[6A17]            <2> 	mov si, loaderamissig	; ds:si -> our AMIS name strings
   917                              <2> internalcoderelocation
   918                              <2> 
   919 00000FFD 8A26[0000]          <2> 	mov ah, byte [relocateddata]
   920                              <2> linkdatarelocation try_debugger_amis_multiplex_number
   921 00001001 E8BB00              <2> 	call plex_check
   922 00001004 7305                <2> 	jnc @F
   923                              <2> 
   924 00001006 B4FF                <2> 	mov ah, 0FFh		; start with multiplex number 0FFh
   925                              <2> .loop_other_loader:
   926 00001008 E8B400              <2> 	call plex_check
   927                              <2> @@:
   928 0000100B 7307                <2> 	jnc .end_other		; if found --> (NC)
   929 0000100D 80EC01              <2> 	sub ah, 1		; search is backward (to find latest installed first), from 0FFh to 00h including
   930 00001010 73F6                <2> 	jnc .loop_other_loader	; try next if we didn't check all yet -->
   931                              <2> 
   932 00001012 EB67                <2> 	jmp .no_other
   933                              <2> 
   934                              <2> .end_other:
   935 00001014 B042                <2> 	mov al, 42h		; AMIS get other link info service
   936 00001016 E8[0000]EB020000    <2> 	extcall call_int2D
   937 0000101D 3CFF                <2> 	cmp al, 0FFh
   938 0000101F 755A                <2> 	jne .no_other
   939                              <2> 
   940 00001021 89F0                <2> 	mov ax, si		; selector => PSP
   941 00001023 E8[0000]EB020000    <2> 	extcall ispm
   942 0000102A 7402                <2> 	jz @F
   943 0000102C 89D0                <2> 	mov ax, dx		; segment => PSP
   944                              <2> @@:
   945 0000102E 16                  <2> 	 push ss
   946 0000102F 1F                  <2> 	 pop ds
   947 00001030 A3[0000]            <2> 	mov word [otherds], ax
   948                              <2> internaldatarelocation		; current mode sel/seg
   949 00001033 8916[0200]          <2> 	mov word [otherseg], dx
   950                              <2> internaldatarelocation		; remember segment
   951                              <2> 
   952 00001037 89C8                <2> 	mov ax, cx		; selector => link info
   953 00001039 E8[0000]EB020000    <2> 	extcall ispm
   954 00001040 7402                <2> 	jz @F
   955 00001042 89D8                <2> 	mov ax, bx		; segment => link info
   956                              <2> @@:
   957 00001044 897EFC              <2> 	mov word [bp + ?linkinfo_other], di
   958 00001047 8946FE              <2> 	mov word [bp + ?linkinfo_other + 2], ax
   959                              <2> 
   960 0000104A 8ED8                <2> 	mov ds, ax		; => link info
   961 0000104C 31C0                <2> 	xor ax, ax
   962 0000104E 813DD1E1            <2> 	cmp word [di + eldlSignature], 0E1D1h
   963 00001052 7516                <2> 	jne .error_other
   964 00001054 837D0601            <2> 	cmp word [di + eldlUseLinkHash], 1
   965 00001058 7710                <2> 	ja .error_other
   966 0000105A 7201                <2> 	jb @F
   967 0000105C 48                  <2> 	dec ax
   968                              <2> @@:
   969 0000105D 8946FA              <2> 	mov word [bp + ?use_hash_other], ax
   970                              <2> 
   971 00001060 8B56F6              <2> 	mov dx, word [bp + ?instance]
   972 00001063 81C21E15            <2> 	add dx, linkerotherdatarelocations - code
   973 00001067 E982FC              <2> 	jmp .otherloop
   974                              <2> 
   975                              <2> .error_other:
   976 0000106A 0E                  <2> 	push cs
   977 0000106B 1F                  <2> 	pop ds
   978 0000106C B8330E              <2> 	mov ax, 0E33h
   979 0000106F E8[0000]EB020000    <2> 	extcall setrc
   980 00001076 BA[6B20]            <2> 	mov dx, lmsg.error_other
   981                              <2> internalcoderelocation
   982 00001079 EB0F                <2> 	jmp @F
   983                              <2> 
   984                              <2> .no_other:
   985 0000107B 0E                  <2> 	push cs
   986 0000107C 1F                  <2> 	pop ds
   987 0000107D B8340E              <2> 	mov ax, 0E34h
   988 00001080 E8[0000]EB020000    <2> 	extcall setrc
   989 00001087 BA[4320]            <2> 	mov dx, lmsg.no_other
   990                              <2> internalcoderelocation
   991                              <2> @@:
   992 0000108A E8[0000]EB020000    <2> 	extcall putsz
   993                              <2> .error_j2:
   994 00001091 EB25                <2> 	jmp .error
   995                              <2> 
   996                              <2> .otherdone:
   997                              <2>  %if _ELD_LINKER_PASSES
   998 00001093 8B46E2              <2> 	mov ax, word [bp + ?amounterrors]
   999 00001096 85C0                <2> 	test ax, ax
  1000 00001098 75F7                <2> 	jnz .error_j2
  1001                              <2>  %endif
  1002                              <2> %endif
  1003                              <2> 
  1004 0000109A 5B                  <2> 	pop bx				; -> our heap data
  1005 0000109B 5E                  <2> 	pop si				; -> our command line tail
  1006 0000109C 16                  <2> 	 push ss
  1007 0000109D 1F                  <2> 	 pop ds
  1008 0000109E C47EF6              <2> 	les di, [bp + ?instance]
  1009 000010A1 268B4502            <2> 	mov ax, word [es:di + eldiEndCode]
  1010                              <2> houdini
  1011 000010A5 2D[400C]            <2> 	sub ax, strict word endresident + code
  1012                              <2> internalcoderelocation
  1013 000010A8 26C74502[400C]      <2> 	mov word [es:di + eldiEndCode], endresident + code
  1014                              <2> internalcoderelocation
  1015 000010AE 2906[0000]          <2> 	sub word [relocateddata], ax
  1016                              <2> linkdatarelocation extseg_used
  1017                              <2> %if _DATA_SIZE == 0
  1018                              <2> 	xor ax, ax
  1019                              <2> 	mov word [es:di + eldiStartData], ax
  1020                              <2> 	mov word [es:di + eldiEndData], ax
  1021                              <2> %endif
  1022 000010B2 89EC5D              <2> 	lleave code
  1023                              <2> 		; INP:	es => ELD code segment
  1024                              <2> 		;	ds:si -> command line tail
  1025                              <2> 		;	ds:bx -> ELD data block
  1026                              <2> 		;	ss:sp -> far return address for current mode
  1027                              <2> 		; STT:	ds = ss, UP, EI
  1028 000010B5 E9E0FA              <2> 	jmp start
  1029                              <2> 
  1030                              <2> .error:
  1031 000010B8 89EC5D              <2> 	lleave
  1032 000010BB B8FFFF              <2> 	mov ax, -1
  1033 000010BE CB                  <2> 	retf
  1034                              <2> 
  1035                              <2> 
  1036                              <2> %ifnidni _LISTING, ""
  1037                              <2>  %assign ELDHINT 1
  1038                              <2> %else
  1039                              <2>  %assign ELDHINT 0
  1040                              <2> %endif
  1041                              <2> 
  1042                              <2> %if ELDOTHER || ELDHINT
  1043                              <2> 		; INP:	ah = multiplex number to check
  1044                              <2> 		;	(if ELDOTHER:)
  1045                              <2> 		;	 cs:si -> 16-byte AMIS signature to check
  1046                              <2> 		; OUT:	CY if multiplex number unused or no signature match,
  1047                              <2> 		;	 bp, ah, ds unmodified
  1048                              <2> 		;	NC if match found,
  1049                              <2> 		;	 ah = multiplex number (unmodified)
  1050                              <2> 		; CHG:	di, es, cx, dx
  1051                              <2> 		;	(if ELDOTHER:) bx
  1052                              <2> 		;	(if not ELDOTHER:) si
  1053                              <2> plex_check:
  1054 000010BF 16                  <2> 	push ss
  1055 000010C0 1F                  <2> 	pop ds
  1056 000010C1 F606[0000]08        <2> 	testopt [relocateddata], 8
  1057                              <2> linkdatarelocation internalflags4, -3
  1058 000010C6 740B                <2> 	jz @F
  1059                              <2> %if ELDOTHER
  1060 000010C8 BB[0000]            <2> 	mov bx, relocateddata
  1061                              <2> linkdatarelocation amis_multiplex_number, -2, optional
  1062 000010CB 85DB                <2> 	test bx, bx
  1063 000010CD 7404                <2> 	jz @F
  1064 000010CF 3A27                <2> 	cmp ah, byte [bx]
  1065 000010D1 741F                <2> 	je .notfound		; do not use our own multiplexer -->
  1066                              <2> %else
  1067                              <2> 	mov si, relocateddata
  1068                              <2> linkdatarelocation amis_multiplex_number, -2, optional
  1069                              <2> 	test si, si
  1070                              <2> 	jz @F
  1071                              <2> 	cmp ah, byte [si]
  1072                              <2> 	je .notfound		; do not use our own multiplexer -->
  1073                              <2> %endif
  1074                              <2> @@:
  1075 000010D3 B000                <2> 	mov al, 00h		; AMIS installation check
  1076 000010D5 E8[0000]EB020000    <2> 	extcall call_int2D	; AMIS (or "DOS reserved" = iret if no AMIS present)
  1077 000010DC 3CFF                <2> 	cmp al, 0FFh
  1078 000010DE 7512                <2> 	jne .notfound
  1079 000010E0 0E                  <2> 	push cs
  1080 000010E1 1F                  <2> 	pop ds
  1081                              <2> %if ELDOTHER
  1082 000010E2 56                  <2> 	push si
  1083 000010E3 E8[0000]EB020000    <2> 	extcall setes2dx	; es:di -> name strings of AMIS multiplexer that just answered
  1084 000010EA B90800              <2> 	mov cx, 8		; Ignore description, only compare vendor and program name
  1085 000010ED F3A7                <2> 	repe cmpsw
  1086 000010EF 5E                  <2> 	pop si
  1087                              <2> %else
  1088                              <2> 	mov si, debuggeramissig	; ds:si -> our AMIS name strings
  1089                              <2> internalcoderelocation
  1090                              <2> 	extcall setes2dx	; es:di -> name strings of AMIS multiplexer that just answered
  1091                              <2> 	mov cx, 8		; Ignore description, only compare vendor and program name
  1092                              <2> 	repe cmpsw
  1093                              <2> %endif
  1094 000010F0 7401                <2> 	je .checkret		; ZR, NC = match -->
  1095                              <2> .notfound:
  1096 000010F2 F9                  <2> 	stc			; CY no match
  1097                              <2> .checkret:
  1098 000010F3 C3                  <2> 	retn
  1099                              <2> %endif
  1100                              <2> 
  1101                              <2> 
  1102                              <2> 	align 4, db 0
  1103                              <2> linkercoderelocations:
  1104                              <2> %if _ELDCALL_OPTIONAL || _ELDCALL_NEXT
  1105 000010F4 01002200[A417]0100- <2> 	dw ELDCALL_CODE_RELOCATIONS_OPTIONAL, 0
  1105 000010FC D809[A417]0100DF09- <2>
  1105 00001104 [B317]0101E609-     <2>
  1105 0000110A [C717]0101ED09-     <2>
  1105 00001110 [DB17]0100F409-     <2>
  1105 00001116 [EE17]0100FB09-     <2>
  1105 0000111C [FE17]0100020A-     <2>
  1105 00001122 [1918]0100F80A-     <2>
  1105 00001128 [3118]0100000B-     <2>
  1105 0000112E [3D18]0100080B-     <2>
  1105 00001134 [4918]0100100B-     <2>
  1105 0000113A [5018]0100180B-     <2>
  1105 00001140 [5B18]0100200B-     <2>
  1105 00001146 [6218]0100280B-     <2>
  1105 0000114C [6B18]0100300B-     <2>
  1105 00001152 [7318]0100380B-     <2>
  1105 00001158 [7B18]0100400B-     <2>
  1105 0000115E [8418]0100480B-     <2>
  1105 00001164 [9018]0100500B-     <2>
  1105 0000116A [9718]0100580B-     <2>
  1105 00001170 [B418]0100600B-     <2>
  1105 00001176 [BF18]0100680B-     <2>
  1105 0000117C [C918]0100700B-     <2>
  1105 00001182 [D318]0100780B-     <2>
  1105 00001188 [DE18]0100800B-     <2>
  1105 0000118E [0719]0100880B-     <2>
  1105 00001194 [1719]0100900B-     <2>
  1105 0000119A [2119]0100E90B-     <2>
  1105 000011A0 [6218]01008C0F-     <2>
  1105 000011A6 [2A19]0100B60F-     <2>
  1105 000011AC [BF18]0100C80F-     <2>
  1105 000011B2 [3319]0100D60F-     <2>
  1105 000011B8 [2A19]01001610-     <2>
  1105 000011BE [3319]01002310-     <2>
  1105 000011C4 [4918]01003910-     <2>
  1105 000011CA [4918]01006F10-     <2>
  1105 000011D0 [7318]01008010-     <2>
  1105 000011D6 [7318]01008A10-     <2>
  1105 000011DC [6B18]0100D510-     <2>
  1105 000011E2 [3319]0100E310-     <2>
  1105 000011E8 [5018]0000          <2>
  1106                              <2> %else
  1107                              <2> 	dw ELDCALL_CODE_RELOCATIONS, 0, 0
  1108                              <2> %endif
  1109                              <2> 
  1110                              <2> %if _ELD_LINKER_PASSES
  1111                              <2> linkerlinkercoderelocations:
  1112                              <2> %if _ELDCALL_OPTIONAL || _ELDCALL_NEXT
  1113 000011EC 01003B0E[BF18]0100- <2> 	dw ELDCALL_LINKER_CODE_RELOCATIONS_OPTIONAL, 0
  1113 000011F4 5F0E[0719]0100690E- <2>
  1113 000011FC [7318]0100720E-     <2>
  1113 00001202 [9718]0000          <2>
  1114                              <2> %else
  1115                              <2> 	dw ELDCALL_LINKER_CODE_RELOCATIONS, 0, 0
  1116                              <2> %endif
  1117                              <2> 
  1118                              <2> 	align 2, db 0
  1119                              <2> linktable:
  1120                              <2> 	istruc LINKTABLE
  1121                              <2> at ltCodeToCode
  1122 00001206 0C15                <2> 	dw internallinkercodetocoderelocations - code
  1123 00001208 2213                <2> 	dw internalcodetocoderelocations - code
  1124                              <2> at ltCodeToData
  1125 0000120A 1815                <2> 	dw internallinkercodetodatarelocations - code
  1126 0000120C 4C13                <2> 	dw internalcodetodatarelocations - code
  1127                              <2> at ltDataToCode
  1128 0000120E 1A15                <2> 	dw internallinkerdatatocoderelocations - code
  1129 00001210 8E14                <2> 	dw internaldatatocoderelocations - code
  1130                              <2> at ltDataToData
  1131 00001212 1C15                <2> 	dw internallinkerdatatodatarelocations - code
  1132 00001214 B814                <2> 	dw internaldatatodatarelocations - code
  1133                              <2> at ltLinkData
  1134 00001216 F214                <2> 	dw linkerlinkerdatarelocations - code
  1135 00001218 1E12                <2> 	dw linkerdatarelocations - code
  1136                              <2> at ltLinkCode
  1137 0000121A EC11                <2> 	dw linkerlinkercoderelocations - code
  1138 0000121C F410                <2> 	dw linkercoderelocations - code
  1139                              <2> 	iend
  1140                              <2> %endif
  1141                              <2> 
  1142                              <2> 	align 2, db 0
  1143                              <2> linkerdatarelocations:
  1144 0000121E 01004700[4019]0100- <2> 	dw LINK_DATA_RELOCATIONS, 0
  1144 00001226 4900[4A19]01004C00- <2>
  1144 0000122E [5319]01007D00-     <2>
  1144 00001234 [6319]0100A100-     <2>
  1144 0000123A [6319]0100E000-     <2>
  1144 00001240 [7919]0100E900-     <2>
  1144 00001246 [8419]0100B801-     <2>
  1144 0000124C [8D19]0100FB01-     <2>
  1144 00001252 [8D19]01002902-     <2>
  1144 00001258 [8D19]01008E02-     <2>
  1144 0000125E [8D19]0100BF02-     <2>
  1144 00001264 [9819]0105C802-     <2>
  1144 0000126A [A119]0109C802-     <2>
  1144 00001270 [AC19]01008303-     <2>
  1144 00001276 [8D19]0100D703-     <2>
  1144 0000127C [8D19]0100D304-     <2>
  1144 00001282 [8D19]01000B05-     <2>
  1144 00001288 [8D19]01005A05-     <2>
  1144 0000128E [8D19]01000006-     <2>
  1144 00001294 [8D19]01005C06-     <2>
  1144 0000129A [8D19]0100DD06-     <2>
  1144 000012A0 [8D19]0100CB07-     <2>
  1144 000012A6 [8D19]0100F007-     <2>
  1144 000012AC [8D19]01007708-     <2>
  1144 000012B2 [8D19]01004F09-     <2>
  1144 000012B8 [8D19]0100EE0A-     <2>
  1144 000012BE [8D19]0100A10B-     <2>
  1144 000012C4 [BF19]0100C80B-     <2>
  1144 000012CA [CD19]0100D80B-     <2>
  1144 000012D0 [D819]0100E50B-     <2>
  1144 000012D6 [E619]0100FC0B-     <2>
  1144 000012DC [D819]0100080C-     <2>
  1144 000012E2 [E619]01000C0C-     <2>
  1144 000012E8 [6319]0100270C-     <2>
  1144 000012EE [6319]01002D0C-     <2>
  1144 000012F4 [CD19]01009A0F-     <2>
  1144 000012FA [061A]0100C30F-     <2>
  1144 00001300 [8419]0100E70F-     <2>
  1144 00001306 [061A]0100FF0F-     <2>
  1144 0000130C [061A]0100B010-     <2>
  1144 00001312 [D819]0100C310-     <2>
  1144 00001318 [2B1A]0101C910-     <2>
  1144 0000131E [3C1A]0000          <2>
  1145                              <2> 
  1146                              <2> 	align 2, db 0
  1147                              <2> internalcodetocoderelocations:
  1148 00001322 7800C500CF0BD40BDC- <2> 	dw INTERNAL_CODE_TO_CODE_RELOCATIONS, 0
  1148 0000132B 0BE10BF80B040C0F0C- <2>
  1148 00001334 220C290C960FB40FBE- <2>
  1148 0000133D 0FE30FFB0F77108810- <2>
  1148 00001346 A610AC100000        <2>
  1149                              <2> 
  1150                              <2> 	align 2, db 0
  1151                              <2> internalcodetodatarelocations:
  1152 0000134C 340054006400C900DA- <2> 	dw INTERNAL_CODE_TO_DATA_RELOCATIONS, 0
  1152 00001355 00EF00050107011001- <2>
  1152 0000135E 260165019A01A701AB- <2>
  1152 00001367 01B501F80126024702- <2>
  1152 00001370 6C02740285029D02A9- <2>
  1152 00001379 02B302BB02C402CD02- <2>
  1152 00001382 D002DA02DD02E702F1- <2>
  1152 0000138B 02F802010304031903- <2>
  1152 00001394 2403790380039C03AA- <2>
  1152 0000139D 03BA03CA03E403F103- <2>
  1152 000013A6 00040C0415041F044D- <2>
  1152 000013AF 0454046F048C049904- <2>
  1152 000013B8 A304AD04BA04C104EA- <2>
  1152 000013C1 04F104F90418052305- <2>
  1152 000013CA 2C05340539053F0555- <2>
  1152 000013D3 055D05650578058005- <2>
  1152 000013DC 88058D05AD05B705BF- <2>
  1152 000013E5 05DA05DF05F3051106- <2>
  1152 000013EE 160623062B0635063F- <2>
  1152 000013F7 0652065F0667067306- <2>
  1152 00001400 7B068C0695069D06A9- <2>
  1152 00001409 06B106C206CB06D506- <2>
  1152 00001412 E206FA061507730779- <2>
  1152 0000141B 0781078C07A807B907- <2>
  1152 00001424 D007E207F307010807- <2>
  1152 0000142D 081308200837084C08- <2>
  1152 00001436 57086B087C0884088F- <2>
  1152 0000143F 089708A908B208BB08- <2>
  1152 00001448 D108E508EA08EF08F4- <2>
  1152 00001451 08F90802090D091D09- <2>
  1152 0000145A 27092E093A09440953- <2>
  1152 00001463 09B209BD091A0A450A- <2>
  1152 0000146C 4E0A5F0A680A6D0A79- <2>
  1152 00001475 0A840A910AA40ABF0A- <2>
  1152 0000147E D70AE10AA90BBE0B33- <2>
  1152 00001487 0C311035100000      <2>
  1153                              <2> 
  1154                              <2> 	align 2, db 0
  1155                              <2> internaldatatocoderelocations:
  1156 0000148E 7C0086009E00A800B4- <2> 	dw INTERNAL_DATA_TO_CODE_RELOCATIONS, -1
  1156 00001497 00BE00C80010011401- <2>
  1156 000014A0 18011C012001240128- <2>
  1156 000014A9 012C01300134013801- <2>
  1156 000014B2 3C014001FFFF        <2>
  1157                              <2> 
  1158                              <2> 	align 2, db 0
  1159                              <2> internaldatatodatarelocations:
  1160 000014B8 080012001C00260030- <2> 	dw INTERNAL_DATA_TO_DATA_RELOCATIONS, -1
  1160 000014C1 003A0044004E005800- <2>
  1160 000014CA 62006C00780082008E- <2>
  1160 000014D3 009A00A400B000BA00- <2>
  1160 000014DC C400D000DA00EC00F4- <2>
  1160 000014E5 00FC00000104010801- <2>
  1160 000014EE 0C01FFFF            <2>
  1161                              <2> 
  1162                              <2> %if _ELD_LINKER_PASSES
  1163                              <2> 	align 2, db 0
  1164                              <2> linkerlinkerdatarelocations:
  1165 000014F2 0100AB0D[CD19]0100- <2> 	dw LINK_LINKER_DATA_RELOCATIONS, 0
  1165 000014FA EA0D[CD19]0100320E- <2>
  1165 00001502 [8D19]0100450F-     <2>
  1165 00001508 [F519]0000          <2>
  1166                              <2> 
  1167                              <2> 	align 2, db 0
  1168                              <2> internallinkercodetocoderelocations:
  1169 0000150C B50DF40D0B0E1C0E44- <2> 	dw INTERNAL_LINKER_CODE_TO_CODE_RELOCATIONS, 0
  1169 00001515 0E0000              <2>
  1170                              <2> 
  1171                              <2> 	align 2, db 0
  1172                              <2> internallinkercodetodatarelocations:
  1173 00001518 0000                <2> 	dw INTERNAL_LINKER_CODE_TO_DATA_RELOCATIONS, 0
  1174                              <2> 
  1175                              <2> 	align 2, db 0
  1176                              <2> internallinkerdatatocoderelocations:
  1177 0000151A FFFF                <2> 	dw INTERNAL_LINKER_DATA_TO_CODE_RELOCATIONS, -1
  1178                              <2> 
  1179                              <2> 	align 2, db 0
  1180                              <2> internallinkerdatatodatarelocations:
  1181 0000151C FFFF                <2> 	dw INTERNAL_LINKER_DATA_TO_DATA_RELOCATIONS, -1
  1182                              <2> %endif
  1183                              <2> 
  1184                              <2> %if ELDOTHER
  1185                              <2> 	align 2, db 0
  1186                              <2> linkerotherdatarelocations:
  1187 0000151E 01006100[541A]0100- <2> 	dw LINK_OTHER_DATA_RELOCATIONS, 0
  1187 00001526 F300[5C1A]0100FC00- <2>
  1187 0000152E [671A]01016E03-     <2>
  1187 00001534 [701A]01016604-     <2>
  1187 0000153A [701A]01017404-     <2>
  1187 00001540 [7C1A]01019204-     <2>
  1187 00001546 [701A]0101B304-     <2>
  1187 0000154C [7C1A]0101D904-     <2>
  1187 00001552 [541A]0101E104-     <2>
  1187 00001558 [5C1A]01011C05-     <2>
  1187 0000155E [891A]01014505-     <2>
  1187 00001564 [991A]01014805-     <2>
  1187 0000156A [A81A]01019305-     <2>
  1187 00001570 [B81A]0101C505-     <2>
  1187 00001576 [CB1A]01010306-     <2>
  1187 0000157C [DB1A]01010606-     <2>
  1187 00001582 [E31A]01006A06-     <2>
  1187 00001588 [EF1A]01007E06-     <2>
  1187 0000158E [FD1A]0100A006-     <2>
  1187 00001594 [0B1B]0100B406-     <2>
  1187 0000159A [1A1B]0100E606-     <2>
  1187 000015A0 [EF1A]0100EE06-     <2>
  1187 000015A6 [FD1A]01010407-     <2>
  1187 000015AC [5C1A]01010C07-     <2>
  1187 000015B2 [671A]01003507-     <2>
  1187 000015B8 [EF1A]0100D307-     <2>
  1187 000015BE [0B1B]0100D707-     <2>
  1187 000015C4 [1A1B]0100DF07-     <2>
  1187 000015CA [291B]0100F907-     <2>
  1187 000015D0 [331B]01001908-     <2>
  1187 000015D6 [441B]01002808-     <2>
  1187 000015DC [531B]01002F08-     <2>
  1187 000015E2 [641B]01003208-     <2>
  1187 000015E8 [6E1B]01006308-     <2>
  1187 000015EE [641B]01006608-     <2>
  1187 000015F4 [6E1B]01001E0A-     <2>
  1187 000015FA [EF1A]02010A00-     <2>
  1187 00001600 [941B]02010E00-     <2>
  1187 00001606 [9D1B]02011000-     <2>
  1187 0000160C [AD1B]02011400-     <2>
  1187 00001612 [B51B]02011800-     <2>
  1187 00001618 [C21B]02011A00-     <2>
  1187 0000161E [D41B]02011E00-     <2>
  1187 00001624 [E11B]02012200-     <2>
  1187 0000162A [F31B]02012400-     <2>
  1187 00001630 [0A1C]02012800-     <2>
  1187 00001636 [1D1C]02012C00-     <2>
  1187 0000163C [371C]02012E00-     <2>
  1187 00001642 [561C]02013200-     <2>
  1187 00001648 [711C]02013600-     <2>
  1187 0000164E [7C1C]02013800-     <2>
  1187 00001654 [881C]02013C00-     <2>
  1187 0000165A [931C]02014000-     <2>
  1187 00001660 [A61C]02014200-     <2>
  1187 00001666 [BA1C]02014600-     <2>
  1187 0000166C [CD1C]02014A00-     <2>
  1187 00001672 [D91C]02014C00-     <2>
  1187 00001678 [E61C]02015000-     <2>
  1187 0000167E [F21C]02015400-     <2>
  1187 00001684 [061D]02015600-     <2>
  1187 0000168A [1B1D]02015A00-     <2>
  1187 00001690 [2F1D]02015E00-     <2>
  1187 00001696 [411D]02016000-     <2>
  1187 0000169C [B81A]02016400-     <2>
  1187 000016A2 [671A]02016800-     <2>
  1187 000016A8 [FD1A]02016A00-     <2>
  1187 000016AE [531D]02016E00-     <2>
  1187 000016B4 [5E1D]02017200-     <2>
  1187 000016BA [671D]02007A00-     <2>
  1187 000016C0 [721D]02007E00-     <2>
  1187 000016C6 [881D]02008400-     <2>
  1187 000016CC [971D]02008800-     <2>
  1187 000016D2 [B01D]02019000-     <2>
  1187 000016D8 [C41D]02019C00-     <2>
  1187 000016DE [D71D]0201A000-     <2>
  1187 000016E4 [F71D]0201A600-     <2>
  1187 000016EA [0B1E]0201AA00-     <2>
  1187 000016F0 [2A1E]0200B200-     <2>
  1187 000016F6 [3D1E]0200B600-     <2>
  1187 000016FC [501E]0200BC00-     <2>
  1187 00001702 [601E]0200C000-     <2>
  1187 00001708 [7E1E]0200C600-     <2>
  1187 0000170E [991E]0200CA00-     <2>
  1187 00001714 [B41E]0200D200-     <2>
  1187 0000171A [CC1E]0201DC00-     <2>
  1187 00001720 [E11E]0201E600-     <2>
  1187 00001726 [F91E]0201E800-     <2>
  1187 0000172C [091F]0201EA00-     <2>
  1187 00001732 [211F]0201EE00-     <2>
  1187 00001738 [361F]0201F000-     <2>
  1187 0000173E [491F]0201F200-     <2>
  1187 00001744 [641F]0201F600-     <2>
  1187 0000174A [7C1F]0201F800-     <2>
  1187 00001750 [8F1F]0201FA00-     <2>
  1187 00001756 [AA1F]0000          <2>
  1188                              <2> 
  1189                              <2>  %ifnidn LINK_OTHER_LINKER_DATA_RELOCATIONS, ""
  1190                              <2>   %error Other linker data links not supported
  1191                              <2>  %endif
  1192                              <2> %endif
  1193                              <2> 
  1194                              <2> %if ELDOTHER || ELDHINT
  1195                              <2> 	align 2, db 0
  1196                              <2> debuggeramissig:
  1197 0000175A 65636D20<rep 5h>    <2> 		fill 8, 32, db "ecm"
  1198 00001762 6C446562756720-     <2> 		fill 8, 32, db "lDebug"
  1198 00001762 <rep 2h>            <2>
  1199                              <2> %endif
  1200                              <2> 
  1201                              <2> %if ELDOTHER
  1202                              <2> 	align 2, db 0
  1203                              <2> loaderamissig:
  1204 0000176A 65636D20<rep 5h>    <2> 		fill 8, 32, db "ecm"
  1205 00001772 4C6F6164657220-     <2> 		fill 8, 32, db "Loader"
  1205 00001772 <rep 2h>            <2>
  1206                              <2> %endif
  1207                              <2> 
  1208                              <2> %ifnidni _LISTING, ""
  1209                              <2> listmsg:
  1210 0000177A 547261634C6973742D- <2> .hint:		db "TracList-add-offset=",_LISTING,"::"
  1210 00001783 6164642D6F66667365- <2>
  1210 0000178C 743D6C646D656D6F74- <2>
  1210 00001795 682E6C73743A3A      <2>
  1211 0000179C 2D2D2D2D680D0A00    <2> .hint.offset:	asciz "----h",13,10
  1212                              <2> %endif
  1213                              <2> 
  1214 000017A4 30CD0C636D64335F6E- <2> 	eldcall_dump_names ELDCALL_CODE_NAMES
  1214 000017AD 6F745F657874702A11- <2>
  1214 000017B6 636D64335F70726570- <2>
  1214 000017BF 726F636573736564A8- <2>
  1214 000017C8 1B1161615F6265666F- <2>
  1214 000017D1 72655F6765746C696E- <2>
  1214 000017DA 6509B91061615F6166- <2>
  1214 000017E3 7465725F6765746C69- <2>
  1214 000017EC 6E651AB70D70757473- <2>
  1214 000017F5 5F6578745F646F6E65- <2>
  1214 000017FE CF3F18707574735F63- <2>
  1214 00001807 6F70796F7574707574- <2>
  1214 00001810 5F6578745F646F6E65- <2>
  1214 00001819 6F9D15707574735F67- <2>
  1214 00001822 65746C696E655F6578- <2>
  1214 0000182B 745F646F6E65D55509- <2>
  1214 00001834 736B6970636F6D6D61- <2>
  1214 0000183D 03C309697373747269- <2>
  1214 00001846 6E673F289004697370- <2>
  1214 0000184F 6DB774087365746573- <2>
  1214 00001858 326478BABD04636D64- <2>
  1214 00001861 33DDB90663686B656F- <2>
  1214 0000186A 6C551205707574737A- <2>
  1214 00001873 B212057365747263E8- <2>
  1214 0000187C 3A066973656F6C3F29- <2>
  1214 00001885 EF09736B6970776869- <2>
  1214 0000188E 7465C5C60470757473- <2>
  1214 00001897 D0BB1A636F70795F73- <2>
  1214 000018A0 696E676C655F636F75- <2>
  1214 000018A9 6E7465645F73747269- <2>
  1214 000018B2 6E6767B1087472696D- <2>
  1214 000018BB 707574738481076865- <2>
  1214 000018C4 78776F7264EBA60764- <2>
  1214 000018CD 6563776F7264398C08- <2>
  1214 000018D6 707574736C696E65AB- <2>
  1214 000018DF FF26646973705F6478- <2>
  1214 000018E8 61785F74696D65735F- <2>
  1214 000018F1 63785F77696474685F- <2>
  1214 000018FA 62785F73697A652E73- <2>
  1214 00001903 746F72656FA20D7075- <2>
  1214 0000190C 74736C696E655F6372- <2>
  1214 00001915 6C66821B0768657862- <2>
  1214 0000191E 7974653DBA06686578- <2>
  1214 00001927 6E7962986906696E74- <2>
  1214 00001930 63686B21300A63616C- <2>
  1214 00001939 6C5F696E743244      <2>
  1215 00001940 C30B076C617374636D- <2> 	link_data_dump_names LINK_DATA_NAMES
  1215 00001949 646B5D06646D79636D- <2>
  1215 00001952 6454400D6D73672E75- <2>
  1215 0000195B 6E696E7374616C6C97- <2>
  1215 00001964 B6136578745F636F6D- <2>
  1215 0000196D 6D616E645F68616E64- <2>
  1215 00001976 6C6572EB4208657874- <2>
  1215 0000197F 647373656CD52D0665- <2>
  1215 00001988 787473656784E3086C- <2>
  1215 00001991 696E655F6F7574FDFC- <2>
  1215 0000199A 06707370646267044A- <2>
  1215 000019A3 08636F64655F736567- <2>
  1215 000019AC B30510636F64655F6D- <2>
  1215 000019B5 6F7661626C655F7365- <2>
  1215 000019BE 678D710B6D73672E69- <2>
  1215 000019C7 6E7374616C6C5ABC08- <2>
  1215 000019D0 6F7074696F6E7337E7- <2>
  1215 000019D9 D30B6578747365675F- <2>
  1215 000019E2 75736564B2400C6578- <2>
  1215 000019EB 74646174615F757365- <2>
  1215 000019F4 6468440E6C696E6B63- <2>
  1215 000019FD 616C6C5F7461626C65- <2>
  1215 00001A06 F09E227472795F6465- <2>
  1215 00001A0F 6275676765725F616D- <2>
  1215 00001A18 69735F6D756C746970- <2>
  1215 00001A21 6C65785F6E756D6265- <2>
  1215 00001A2A 72CB510E696E746572- <2>
  1215 00001A33 6E616C666C61677334- <2>
  1215 00001A3C 688C15616D69735F6D- <2>
  1215 00001A45 756C7469706C65785F- <2>
  1215 00001A4E 6E756D626572        <2>
  1216                              <2> %if ELDOTHER
  1217 00001A54 0A0A05647373656CEB- <2> 	link_data_dump_names LINK_OTHER_DATA_NAMES
  1217 00001A5D 420865787464737365- <2>
  1217 00001A66 6CD52D066578747365- <2>
  1217 00001A6F 676A5D09616C6C6F63- <2>
  1217 00001A78 5F7365678C610A616C- <2>
  1217 00001A81 6C6F635F73697A652A- <2>
  1217 00001A8A E70D686973746F7279- <2>
  1217 00001A93 666F726D617431AA0C- <2>
  1217 00001A9C 686973746F72792E6C- <2>
  1217 00001AA5 61737475AE0D686973- <2>
  1217 00001AAE 746F72792E66697273- <2>
  1217 00001AB7 747D4210686973746F- <2>
  1217 00001AC0 72792E7365676F7273- <2>
  1217 00001AC9 656C73830D68697374- <2>
  1217 00001AD2 6F7279627566666572- <2>
  1217 00001ADB 279B05737461636BC3- <2>
  1217 00001AE4 6709737461636B5F65- <2>
  1217 00001AED 6E64E7D30B65787473- <2>
  1217 00001AF6 65675F757365642BC8- <2>
  1217 00001AFF 0B6578747365675F73- <2>
  1217 00001B08 697A65B2400C657874- <2>
  1217 00001B11 646174615F75736564- <2>
  1217 00001B1A F6340C657874646174- <2>
  1217 00001B23 615F73697A652AAE07- <2>
  1217 00001B2C 657874646174612E6B- <2>
  1217 00001B35 0E6578745F7661725F- <2>
  1217 00001B3E 666F726D6174F8B40C- <2>
  1217 00001B47 6578745F7661725F73- <2>
  1217 00001B50 697A658FC30E657874- <2>
  1217 00001B59 5F7661725F616D6F75- <2>
  1217 00001B62 6E74E8B4076578745F- <2>
  1217 00001B6B 766172C4E223697376- <2>
  1217 00001B74 61726961626C655F6D- <2>
  1217 00001B7D 6F7265627974655F6E- <2>
  1217 00001B86 616D65686561646572- <2>
  1217 00001B8F 732E657874FDFC0670- <2>
  1217 00001B98 7370646267BC890D65- <2>
  1217 00001BA1 6E7472797365675F73- <2>
  1217 00001BAA 697A6589F205637373- <2>
  1217 00001BB3 656CAF9D0A6D657373- <2>
  1217 00001BBC 61676573656791300F- <2>
  1217 00001BC5 6D6573736167657365- <2>
  1217 00001BCE 675F73697A65B49D0A- <2>
  1217 00001BD7 6D6573736167657365- <2>
  1217 00001BE0 6CEAE50F6175786275- <2>
  1217 00001BE9 66665F7365676D656E- <2>
  1217 00001BF2 74B0B2146175786275- <2>
  1217 00001BFB 66665F63757272656E- <2>
  1217 00001C04 745F73697A658B0010- <2>
  1217 00001C0D 617578627566665F73- <2>
  1217 00001C16 65676F7273656C192A- <2>
  1217 00001C1F 17617578627566665F- <2>
  1217 00001C28 6D6F7661626C655F73- <2>
  1217 00001C31 65676D656E74E1B31C- <2>
  1217 00001C3A 617578627566665F6D- <2>
  1217 00001C43 6F7661626C655F6375- <2>
  1217 00001C4C 7272656E745F73697A- <2>
  1217 00001C55 653C42186175786275- <2>
  1217 00001C5E 66665F6D6F7661626C- <2>
  1217 00001C67 655F7365676F727365- <2>
  1217 00001C70 6C044A08636F64655F- <2>
  1217 00001C79 736567320809636F64- <2>
  1217 00001C82 655F73697A65094A08- <2>
  1217 00001C8B 636F64655F73656CB3- <2>
  1217 00001C94 0510636F64655F6D6F- <2>
  1217 00001C9D 7661626C655F736567- <2>
  1217 00001CA6 63C211636F64655F6D- <2>
  1217 00001CAF 6F7661626C655F7369- <2>
  1217 00001CB8 7A65B80510636F6465- <2>
  1217 00001CC1 5F6D6F7661626C655F- <2>
  1217 00001CCA 73656C1AF209636F64- <2>
  1217 00001CD3 65325F736567DC620A- <2>
  1217 00001CDC 636F6465325F73697A- <2>
  1217 00001CE5 651FF209636F646532- <2>
  1217 00001CEE 5F73656CC93711636F- <2>
  1217 00001CF7 6465325F6D6F766162- <2>
  1217 00001D00 6C655F7365670DD312- <2>
  1217 00001D09 636F6465325F6D6F76- <2>
  1217 00001D12 61626C655F73697A65- <2>
  1217 00001D1B CE3711636F6465325F- <2>
  1217 00001D24 6D6F7661626C655F73- <2>
  1217 00001D2D 656C67340F68697374- <2>
  1217 00001D36 6F72795F7365676D65- <2>
  1217 00001D3F 6E741E380F68697374- <2>
  1217 00001D48 6F72797365675F7369- <2>
  1217 00001D51 7A656A2B0865787463- <2>
  1217 00001D5A 7373656C892B06656E- <2>
  1217 00001D63 76736567140B08656E- <2>
  1217 00001D6C 765F73697A6597B613- <2>
  1217 00001D75 6578745F636F6D6D61- <2>
  1217 00001D7E 6E645F68616E646C65- <2>
  1217 00001D87 7230CD0C636D64335F- <2>
  1217 00001D90 6E6F745F6578749648- <2>
  1217 00001D99 166578745F70726570- <2>
  1217 00001DA2 726F636573735F6861- <2>
  1217 00001DAB 6E646C6572702A1163- <2>
  1217 00001DB4 6D64335F7072657072- <2>
  1217 00001DBD 6F636573736564C001- <2>
  1217 00001DC6 106578745F616D6973- <2>
  1217 00001DCF 5F68616E646C657295- <2>
  1217 00001DD8 551D6578745F61615F- <2>
  1217 00001DE1 6265666F72655F6765- <2>
  1217 00001DEA 746C696E655F68616E- <2>
  1217 00001DF3 646C6572A81B116161- <2>
  1217 00001DFC 5F6265666F72655F67- <2>
  1217 00001E05 65746C696E65F2351C- <2>
  1217 00001E0E 6578745F61615F6166- <2>
  1217 00001E17 7465725F6765746C69- <2>
  1217 00001E20 6E655F68616E646C65- <2>
  1217 00001E29 7209B91061615F6166- <2>
  1217 00001E32 7465725F6765746C69- <2>
  1217 00001E3B 6E65AE24106578745F- <2>
  1217 00001E44 707574735F68616E64- <2>
  1217 00001E4D 6C65721AB70D707574- <2>
  1217 00001E56 735F6578745F646F6E- <2>
  1217 00001E5F 65DD301B6578745F70- <2>
  1217 00001E68 7574735F636F70796F- <2>
  1217 00001E71 75747075745F68616E- <2>
  1217 00001E7A 646C6572CF3F187075- <2>
  1217 00001E83 74735F636F70796F75- <2>
  1217 00001E8C 747075745F6578745F- <2>
  1217 00001E95 646F6E65B9E1186578- <2>
  1217 00001E9E 745F707574735F6765- <2>
  1217 00001EA7 746C696E655F68616E- <2>
  1217 00001EB0 646C65726F9D157075- <2>
  1217 00001EB9 74735F6765746C696E- <2>
  1217 00001EC2 655F6578745F646F6E- <2>
  1217 00001ECB 653B26126578745F69- <2>
  1217 00001ED4 6E6A6563745F68616E- <2>
  1217 00001EDD 646C65729C6C156578- <2>
  1217 00001EE6 745F61615F696E6A65- <2>
  1217 00001EEF 63745F68616E646C65- <2>
  1217 00001EF8 72C0CD0D7061746368- <2>
  1217 00001F01 617265615F72756E05- <2>
  1217 00001F0A BD1570617463686172- <2>
  1217 00001F13 65615F72756E2E7365- <2>
  1217 00001F1C 676D656E746FE31270- <2>
  1217 00001F25 61746368617265615F- <2>
  1217 00001F2E 72756E2E73697A65C8- <2>
  1217 00001F37 8C1070617463686172- <2>
  1217 00001F40 65615F696E7472746E- <2>
  1217 00001F49 0DF418706174636861- <2>
  1217 00001F52 7265615F696E747274- <2>
  1217 00001F5B 6E2E7365676D656E74- <2>
  1217 00001F64 674915706174636861- <2>
  1217 00001F6D 7265615F696E747274- <2>
  1217 00001F76 6E2E73697A6579A510- <2>
  1217 00001F7F 706174636861726561- <2>
  1217 00001F88 5F706D5F657863BECB- <2>
  1217 00001F91 187061746368617265- <2>
  1217 00001F9A 615F706D5F6578632E- <2>
  1217 00001FA3 7365676D656E7456F7- <2>
  1217 00001FAC 157061746368617265- <2>
  1217 00001FB5 615F706D5F6578632E- <2>
  1217 00001FBE 73697A65            <2>
  1218                              <2> %endif
  1219                              <2> 
  1220                              <2> lmsg:
  1221                              <2> %if _ELD_LINKER_PASSES
  1222                              <2> %if _ELDCALL_OPTIONAL
  1223 00001FC2 214F7074696F6E616C- <2> .warning_code_optional:		counted "Optional code link missing, hash="
  1223 00001FCB 20636F6465206C696E- <2>
  1223 00001FD4 6B206D697373696E67- <2>
  1223 00001FDD 2C20686173683D      <2>
  1224                              <2> %endif
  1225                              <2> %if _ELDDATA_OPTIONAL
  1226 00001FE4 214F7074696F6E616C- <2> .warning_data_optional:		counted "Optional data link missing, hash="
  1226 00001FED 2064617461206C696E- <2>
  1226 00001FF6 6B206D697373696E67- <2>
  1226 00001FFF 2C20686173683D      <2>
  1227                              <2> %endif
  1228 00002006 1844617461206C696E- <2> .error_data:			counted "Data link missing, hash="
  1228 0000200F 6B206D697373696E67- <2>
  1228 00002018 2C20686173683D      <2>
  1229 0000201F 18436F6465206C696E- <2> .error_code:			counted "Code link missing, hash="
  1229 00002028 6B206D697373696E67- <2>
  1229 00002031 2C20686173683D      <2>
  1230 00002038 0A682C206C6162656C- <2> .error.2:			counted "h, label ",'"'
  1230 00002041 2022                <2>
  1231                              <2> %endif
  1232                              <2> %if ELDOTHER
  1233 00002043 454C44206C696E6B65- <2> .no_other:		asciz "ELD linker: No other link info found!",13,10
  1233 0000204C 723A204E6F206F7468- <2>
  1233 00002055 6572206C696E6B2069- <2>
  1233 0000205E 6E666F20666F756E64- <2>
  1233 00002067 210D0A00            <2>
  1234 0000206B 454C44206C696E6B65- <2> .error_other:		asciz "ELD linker: Other link info unknown format!",13,10
  1234 00002074 723A204F7468657220- <2>
  1234 0000207D 6C696E6B20696E666F- <2>
  1234 00002086 20756E6B6E6F776E20- <2>
  1234 0000208F 666F726D6174210D0A- <2>
  1234 00002098 00                  <2>
  1235                              <2> %endif
  1236                              <2> 
  1237 00002099 00<rep 7h>          <2> 	align 16, db 0
  2642                              <1> 
  2643                              <1> 	align 16
  2644                              <1> code_size equ $ - code
