Blame | Last modification | View Log | Download
# file opened: relocation_nested_struct.asm1 0000 ORG $10002 1000 RELOCATE_START3 1000 ASSERT 2 * relocate_count == relocate_size4 1000 ASSERT 19 == relocate_count5 1000 13 00 dw relocate_count6 1002 26 00 dw relocate_size7 10048 1004 STRUCT st19 1004 ~ b BYTE $1210 1004 ~ w WORD absolute111 1004 ~ relInit WORD reloc1 ; the default init value should be relocated12 1004 ~ noRel WORD reloc2-reloc1relocation_nested_struct.asm(13): warning[reldiverts]: Expression can't be relocated by simple "+offset" mechanics, value diverts differently.13 1004 ~ badRel WORD 2*reloc1 ; warning about not simple "+offset"14 1004 ENDS15 100416 1004 STRUCT st217 1004 ~ b BYTE $3418 1004 ~ w WORD absolute119 1004 ~ relInit WORD reloc2 ; the default init value should be relocated20 1004 ~ noRel WORD reloc2-reloc1relocation_nested_struct.asm(21): warning[reldiverts]: Expression can't be relocated by simple "+offset" mechanics, value diverts differently.21 1004 ~ badRel WORD 2*reloc2 ; warning about not simple "+offset"22 1004 ~ st1A st1relocation_nested_struct.asm(23): warning[relunstable]: Relocation makes one of the expressions unstable, resulting machine code is not relocatablerelocation_nested_struct.asm(23): warning[reldiverts]: Expression can't be relocated by simple "+offset" mechanics, value diverts differently.23 1004 ~ st1B st1 { high reloc1, absolute2, reloc2, reloc1-reloc2, 2*reloc2 }24 1004 ENDS25 100426 1004 reloc1:27 100428 1004 ; instancing the struct in relocatable block29 1004 34 DC 87 BB .t1 st2 {} ; default init (no warnings, those were at definition, but relocation data in table)29 1008 10 B7 00 7629 100C 21 12 DC 8729 1010 04 10 B7 0029 1014 08 20 10 5829 1018 88 BB 10 4929 101C FF 76 2130 101F ; ^ expected relocation data: 07 10 10 10 19 1031 101F 34 DC 87 CD .t2 st2 {,,$ABCD,,,{,,$ABCD,,},{$EF,,$ABCD,,}} ; remove any relocatable data31 1023 AB B7 00 7631 1027 21 12 DC 8731 102B CD AB B7 0031 102F 08 20 EF 5831 1033 88 CD AB 4931 1037 FF 76 21relocation_nested_struct.asm(32): warning[relunstable]: Relocation makes one of the expressions unstable, resulting machine code is not relocatablerelocation_nested_struct.asm(32): warning[reldiverts]: Expression can't be relocated by simple "+offset" mechanics, value diverts differently.32 103A 34 DC 87 CD .t3 st2 {,,$ABCD,,,{high reloc2,,$ABCD,,},{$EF,,2*reloc1,,reloc2}} ; some relocatable and 2x warnings32 103E AB B7 00 7632 1042 21 10 DC 8732 1046 CD AB B7 0032 104A 08 20 EF 5832 104E 88 08 20 4932 1052 FF BB 1033 1055 ; ^ expected relocation data: 53 1034 105535 1055 DD 21 04 10 ld ix,reloc1.t1 ; to be relocated (address of instance)36 1059 FD 21 1F 10 ld iy,.t2 ; to be relocated (address of instance)37 105D38 105D ; using the struct offsets - no relocation data needed (offsets are relative values)39 105D DD 7E 09 ld a,(ix+st2.st1A.b)40 1060 DD 7E 0A ld a,(ix+st2.st1A.w)41 1063 DD 7E 0C ld a,(ix+st2.st1A.relInit)42 1066 DD 7E 0E ld a,(ix+st2.st1A.noRel)43 1069 3E 1B ld a,st2 ; struct length is absolute44 106B 3E 12 ld a,st2.st1B ; offset to nested sub-structure is absolute45 106D46 106D ; using struct addresses - to be relocated47 106D 3A 0D 10 ld a,(reloc1.t1.st1A.b)48 1070 2A 0E 10 ld hl,(reloc1.t1.st1A.w)49 1073 ED 5B 10 10 ld de,(reloc1.t1.st1A.relInit)50 1077 ED 4B 12 10 ld bc,(reloc1.t1.st1A.noRel)51 107B 3A 31 10 ld a,(.t2.st1B.b)52 107E 2A 32 10 ld hl,(.t2.st1B.w)53 1081 ED 5B 34 10 ld de,(.t2.st1B.relInit)54 1085 ED 4B 36 10 ld bc,(.t2.st1B.noRel)55 108956 1089 ; using absolute struct instance = to be ignored57 1089 3A E5 87 ld a,(absolute1.t1.st1A.b)58 108C 2A E6 87 ld hl,(absolute1.t1.st1A.w)59 108F ED 5B E8 87 ld de,(absolute1.t1.st1A.relInit)60 1093 ED 4B EA 87 ld bc,(absolute1.t1.st1A.noRel)61 109762 1097 ; using alias instance placed at particular address63 1097 akaT1 st2 = .t1 ; transitive relocation - to be relocated64 1097 ED 5B 04 10 ld de,(akaT1.b)65 109B ED 4B 05 10 ld bc,(akaT1.w)66 109F 3A 16 10 ld a,(akaT1.st1B.b)67 10A2 2A 17 10 ld hl,(akaT1.st1B.w)68 10A5 DD 21 16 10 ld ix,akaT1.st1B69 10A970 10A9 ; same alias test, but with absolute instance = no relocation data71 10A9 akaA1 st2 = absolute1.t172 10A9 3A E5 87 ld a,(akaA1.st1A.b)73 10AC 2A E6 87 ld hl,(akaA1.st1A.w)74 10AF ED 5B E8 87 ld de,(akaA1.st1A.relInit)75 10B3 ED 4B EA 87 ld bc,(akaA1.st1A.noRel)76 10B7 DD 21 E5 87 ld ix,akaA1.st1A77 10BB78 10BB reloc2:79 10BB RELOCATE_END80 10BB81 10BB ORG $200082 2000 07 10 10 10 RELOCATE_TABLE82 2004 19 10 53 1082 2008 57 10 5B 1082 200C 6E 10 71 1082 2010 75 10 79 1082 2014 7C 10 7F 1082 2018 83 10 87 1082 201C 99 10 9D 1082 2020 A0 10 A3 1082 2024 A7 1083 202684 2026 ; no relocation area (no warnings, no relocation data)85 2026 ORG $87DC86 87DC absolute1:87 87DC88 87DC ; instancing the struct in absolute block - NOTHING to be relocated89 87DC 34 DC 87 BB .t1 st2 {}89 87E0 10 B7 00 7689 87E4 21 12 DC 8789 87E8 04 10 B7 0089 87EC 08 20 10 5889 87F0 88 BB 10 4989 87F4 FF 76 2190 87F7 ; no warning about unstable values or value being different91 87F7 34 DC 87 CD .t2 st2 {,,$ABCD,,,{high reloc2,,$ABCD,,},{$EF,,2*reloc1,,reloc2}}91 87FB AB B7 00 7691 87FF 21 10 DC 8791 8803 CD AB B7 0091 8807 08 20 EF 5891 880B 88 08 20 4991 880F FF BB 1092 881293 8812 DD 21 04 10 ld ix,reloc1.t1 ; not to be relocated even when using relocatable instance94 8816 FD 21 F7 87 ld iy,absolute1.t295 881A96 881A ; using the struct offsets - no relocation data needed (offsets are relative values)97 881A DD 7E 09 ld a,(ix+st2.st1A.b)98 881D DD 7E 0A ld a,(ix+st2.st1A.w)99 8820 DD 7E 0C ld a,(ix+st2.st1A.relInit)100 8823 DD 7E 0E ld a,(ix+st2.st1A.noRel)101 8826 3E 1B ld a,st2 ; struct length is absolute102 8828 3E 12 ld a,st2.st1B ; offset to nested sub-structure is absolute103 882A104 882A ; using struct addresses (relocatable ones and absolute ones - either should be NOT relocated)105 882A 3A 0D 10 ld a,(reloc1.t1.st1A.b)106 882D 2A 0E 10 ld hl,(reloc1.t1.st1A.w)107 8830 ED 5B 10 10 ld de,(reloc1.t1.st1A.relInit)108 8834 ED 4B 12 10 ld bc,(reloc1.t1.st1A.noRel)109 8838 3A 09 88 ld a,(absolute1.t2.st1B.b)110 883B 2A 0A 88 ld hl,(absolute1.t2.st1B.w)111 883E ED 5B 0C 88 ld de,(absolute1.t2.st1B.relInit)112 8842 ED 4B 0E 88 ld bc,(absolute1.t2.st1B.noRel)113 8846114 8846 ; using relocatable alias (outside of block = no relocation)115 8846 ED 5B 04 10 ld de,(akaT1.b)116 884A ED 4B 05 10 ld bc,(akaT1.w)117 884E 3A 16 10 ld a,(akaT1.st1B.b)118 8851 2A 17 10 ld hl,(akaT1.st1B.w)119 8854 DD 21 16 10 ld ix,akaT1.st1B120 8858 absolute2:121 8858122 8858 ASSERT 0 == 0123 8858 ASSERT 6 == 6124 8858# file closed: relocation_nested_struct.asmValue Label------ - -----------------------------------------------------------0x87DC absolute10x87DC absolute1.t10x87DC X absolute1.t1.b0x87E3 X absolute1.t1.badRel0x87E1 X absolute1.t1.noRel0x87DF X absolute1.t1.relInit0x87E5 X absolute1.t1.st1A0x87E5 absolute1.t1.st1A.b0x87EC X absolute1.t1.st1A.badRel0x87EA absolute1.t1.st1A.noRel0x87E8 absolute1.t1.st1A.relInit0x87E6 absolute1.t1.st1A.w0x87EE X absolute1.t1.st1B0x87EE X absolute1.t1.st1B.b0x87F5 X absolute1.t1.st1B.badRel0x87F3 X absolute1.t1.st1B.noRel0x87F1 X absolute1.t1.st1B.relInit0x87EF X absolute1.t1.st1B.w0x87DD X absolute1.t1.w0x87F7 absolute1.t20x87F7 X absolute1.t2.b0x87FE X absolute1.t2.badRel0x87FC X absolute1.t2.noRel0x87FA X absolute1.t2.relInit0x8800 X absolute1.t2.st1A0x8800 X absolute1.t2.st1A.b0x8807 X absolute1.t2.st1A.badRel0x8805 X absolute1.t2.st1A.noRel0x8803 X absolute1.t2.st1A.relInit0x8801 X absolute1.t2.st1A.w0x8809 X absolute1.t2.st1B0x8809 absolute1.t2.st1B.b0x8810 X absolute1.t2.st1B.badRel0x880E absolute1.t2.st1B.noRel0x880C absolute1.t2.st1B.relInit0x880A absolute1.t2.st1B.w0x87F8 X absolute1.t2.w0x8858 absolute20x87DC X akaA10x87DC X akaA1.b0x87E3 X akaA1.badRel0x87E1 X akaA1.noRel0x87DF X akaA1.relInit0x87E5 akaA1.st1A0x87E5 akaA1.st1A.b0x87EC X akaA1.st1A.badRel0x87EA akaA1.st1A.noRel0x87E8 akaA1.st1A.relInit0x87E6 akaA1.st1A.w0x87EE X akaA1.st1B0x87EE X akaA1.st1B.b0x87F5 X akaA1.st1B.badRel0x87F3 X akaA1.st1B.noRel0x87F1 X akaA1.st1B.relInit0x87EF X akaA1.st1B.w0x87DD X akaA1.w0x1004 X akaT10x1004 akaT1.b0x100B X akaT1.badRel0x1009 X akaT1.noRel0x1007 X akaT1.relInit0x100D X akaT1.st1A0x100D X akaT1.st1A.b0x1014 X akaT1.st1A.badRel0x1012 X akaT1.st1A.noRel0x1010 X akaT1.st1A.relInit0x100E X akaT1.st1A.w0x1016 akaT1.st1B0x1016 akaT1.st1B.b0x101D X akaT1.st1B.badRel0x101B X akaT1.st1B.noRel0x1019 X akaT1.st1B.relInit0x1017 akaT1.st1B.w0x1005 akaT1.w0x1004 reloc10x1004 reloc1.t10x1004 X reloc1.t1.b0x100B X reloc1.t1.badRel0x1009 X reloc1.t1.noRel0x1007 X reloc1.t1.relInit0x100D X reloc1.t1.st1A0x100D reloc1.t1.st1A.b0x1014 X reloc1.t1.st1A.badRel0x1012 reloc1.t1.st1A.noRel0x1010 reloc1.t1.st1A.relInit0x100E reloc1.t1.st1A.w0x1016 X reloc1.t1.st1B0x1016 X reloc1.t1.st1B.b0x101D X reloc1.t1.st1B.badRel0x101B X reloc1.t1.st1B.noRel0x1019 X reloc1.t1.st1B.relInit0x1017 X reloc1.t1.st1B.w0x1005 X reloc1.t1.w0x101F reloc1.t20x101F X reloc1.t2.b0x1026 X reloc1.t2.badRel0x1024 X reloc1.t2.noRel0x1022 X reloc1.t2.relInit0x1028 X reloc1.t2.st1A0x1028 X reloc1.t2.st1A.b0x102F X reloc1.t2.st1A.badRel0x102D X reloc1.t2.st1A.noRel0x102B X reloc1.t2.st1A.relInit0x1029 X reloc1.t2.st1A.w0x1031 X reloc1.t2.st1B0x1031 reloc1.t2.st1B.b0x1038 X reloc1.t2.st1B.badRel0x1036 reloc1.t2.st1B.noRel0x1034 reloc1.t2.st1B.relInit0x1032 reloc1.t2.st1B.w0x1020 X reloc1.t2.w0x103A X reloc1.t30x103A X reloc1.t3.b0x1041 X reloc1.t3.badRel0x103F X reloc1.t3.noRel0x103D X reloc1.t3.relInit0x1043 X reloc1.t3.st1A0x1043 X reloc1.t3.st1A.b0x104A X reloc1.t3.st1A.badRel0x1048 X reloc1.t3.st1A.noRel0x1046 X reloc1.t3.st1A.relInit0x1044 X reloc1.t3.st1A.w0x104C X reloc1.t3.st1B0x104C X reloc1.t3.st1B.b0x1053 X reloc1.t3.st1B.badRel0x1051 X reloc1.t3.st1B.noRel0x104F X reloc1.t3.st1B.relInit0x104D X reloc1.t3.st1B.w0x103B X reloc1.t3.w0x10BB reloc20x0013 relocate_count0x0026 relocate_size0x0009 X st10x0000 X st1.b0x0007 X st1.badRel0x0005 X st1.noRel0x0003 X st1.relInit0x0001 X st1.w0x001B st20x0000 X st2.b0x0007 X st2.badRel0x0005 X st2.noRel0x0003 X st2.relInit0x0009 X st2.st1A0x0009 st2.st1A.b0x0010 X st2.st1A.badRel0x000E st2.st1A.noRel0x000C st2.st1A.relInit0x000A st2.st1A.w0x0012 st2.st1B0x0012 X st2.st1B.b0x0019 X st2.st1B.badRel0x0017 X st2.st1B.noRel0x0015 X st2.st1B.relInit0x0013 X st2.st1B.w0x0001 X st2.w