Rev 7107 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7107 | Rev 7209 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | (* |
1 | (* |
2 | Copyright 2016, 2017 Anton Krotov |
2 | Copyright 2016, 2017, 2018 Anton Krotov |
Line 3... | Line 3... | ||
3 | 3 | ||
Line 4... | Line 4... | ||
4 | This file is part of Compiler. |
4 | This file is part of Compiler. |
5 | 5 | ||
Line 117... | Line 117... | ||
117 | RELOC = RECORD |
117 | RELOC = RECORD |
118 | Page, Size: INTEGER; |
118 | Page, Size: INTEGER; |
119 | reloc: ARRAY 1024 OF sys.CARD16 |
119 | reloc: ARRAY 1024 OF sys.CARD16 |
120 | END; |
120 | END; |
Line 121... | Line 121... | ||
121 | 121 | ||
122 | VAR asmlist: UTILS.LIST; start: ASMLINE; dll, con, gui, kos, elf, obj: BOOLEAN; |
122 | VAR asmlist: UTILS.LIST; start: ASMLINE; dll, con, gui, kos, elf, obj, kem: BOOLEAN; |
123 | Lcount, reccount, topstk: INTEGER; recarray: ARRAY 2048 OF INTEGER; current*: ASMLINE; |
123 | Lcount, reccount, topstk: INTEGER; recarray: ARRAY 2048 OF INTEGER; current*: ASMLINE; |
124 | callstk: ARRAY 1024, 2 OF ASMLINE; OutFile: UTILS.STRING; |
124 | callstk: ARRAY 1024, 2 OF ASMLINE; OutFile: UTILS.STRING; |
125 | Code: ARRAY 4000000 OF CHAR; ccount: INTEGER; Data: ARRAY 1000000 OF CHAR; dcount: INTEGER; |
125 | Code: ARRAY 4000000 OF CHAR; ccount: INTEGER; Data: ARRAY 1000000 OF CHAR; dcount: INTEGER; |
126 | Labels: ARRAY 200000 OF INTEGER; rdata: ARRAY 400H OF INTEGER; Header: HEADER; etable: ETABLE; |
126 | Labels: ARRAY 200000 OF INTEGER; rdata: ARRAY 400H OF INTEGER; Header: HEADER; etable: ETABLE; |
127 | ExecName: UTILS.STRING; LoadAdr: INTEGER; Reloc: ARRAY 200000 OF CHAR; rcount: INTEGER; |
127 | ExecName: UTILS.STRING; LoadAdr: INTEGER; Reloc: ARRAY 200000 OF CHAR; rcount: INTEGER; |
128 | RtlProc: ARRAY 20 OF INTEGER; OutFilePos: INTEGER; RelocSection: SECTION; |
128 | RtlProc: ARRAY 20 OF INTEGER; OutFilePos: INTEGER; RelocSection: SECTION; |
129 | fpu*: INTEGER; isfpu: BOOLEAN; maxfpu: INTEGER; fpucmd: ASMLINE; |
129 | fpu*: INTEGER; isfpu: BOOLEAN; maxfpu: INTEGER; fpucmd: ASMLINE; |
- | 130 | kosexp: ARRAY 65536 OF RECORD Name: SCAN.NODE; Adr, NameLabel: INTEGER END; kosexpcount: INTEGER; |
|
- | 131 | maxstrlen*: INTEGER; |
|
- | 132 | ||
- | 133 | PROCEDURE set_maxstrlen* (value: INTEGER); |
|
- | 134 | BEGIN |
|
- | 135 | maxstrlen := value |
|
Line 130... | Line 136... | ||
130 | kosexp: ARRAY 65536 OF RECORD Name: SCAN.NODE; Adr, NameLabel: INTEGER END; kosexpcount: INTEGER; |
136 | END set_maxstrlen; |
131 | 137 | ||
132 | PROCEDURE AddRtlProc*(idx, proc: INTEGER); |
138 | PROCEDURE AddRtlProc*(idx, proc: INTEGER); |
133 | BEGIN |
139 | BEGIN |
Line 565... | Line 571... | ||
565 | Lcount := HALT; |
571 | Lcount := HALT; |
566 | asmlist := UTILS.CreateList(); |
572 | asmlist := UTILS.CreateList(); |
567 | NEW(nov); |
573 | NEW(nov); |
568 | UTILS.MemErr(nov = NIL); |
574 | UTILS.MemErr(nov = NIL); |
569 | UTILS.Push(asmlist, nov); |
575 | UTILS.Push(asmlist, nov); |
570 | current := nov; |
576 | current := nov |
571 | END Init; |
577 | END Init; |
Line 572... | Line 578... | ||
572 | 578 | ||
573 | PROCEDURE datastr(str: UTILS.STRING); |
579 | PROCEDURE datastr(str: UTILS.STRING); |
574 | VAR i, n: INTEGER; |
580 | VAR i, n: INTEGER; |
Line 1554... | Line 1560... | ||
1554 | UTILS.MemErr(OutFilePos = 0); |
1560 | UTILS.MemErr(OutFilePos = 0); |
Line 1555... | Line 1561... | ||
1555 | 1561 | ||
1556 | IF ~obj THEN |
1562 | IF ~obj THEN |
1557 | Header.menuet01 := "MENUET01"; |
1563 | Header.menuet01 := "MENUET01"; |
1558 | Header.ver := 1; |
1564 | Header.ver := 1; |
1559 | Header.start := sys.SIZE(KOSHEADER); |
1565 | Header.start := sys.SIZE(KOSHEADER) + ORD(kem) * 65536; |
1560 | Header.size := Align(size, 4) + datasize; |
1566 | Header.size := Align(size, 4) + datasize; |
1561 | Header.mem := Header.size + stk + gsize + strsize * 2 + 1000H; |
1567 | Header.mem := Header.size + stk + gsize + strsize * 2 + 1000H; |
1562 | Header.sp := Header.size + gsize + stk; |
1568 | Header.sp := Header.size + gsize + stk;// + ORD(kem) * 65536; |
1563 | Header.param := Header.sp; |
1569 | Header.param := Header.sp; |
Line 1564... | Line 1570... | ||
1564 | Header.path := Header.param + strsize; |
1570 | Header.path := Header.param + strsize; |
Line 1766... | Line 1772... | ||
1766 | LoadAdr := 10000000H; |
1772 | LoadAdr := 10000000H; |
1767 | PackExport(ExecName) |
1773 | PackExport(ExecName) |
1768 | ELSIF con OR gui THEN |
1774 | ELSIF con OR gui THEN |
1769 | LoadAdr := 400000H |
1775 | LoadAdr := 400000H |
1770 | ELSIF kos OR obj THEN |
1776 | ELSIF kos OR obj THEN |
1771 | LoadAdr := sys.SIZE(KOSHEADER) |
1777 | LoadAdr := sys.SIZE(KOSHEADER) + ORD(kem & kos) * 65536 |
1772 | ELSIF elf THEN |
1778 | ELSIF elf THEN |
1773 | LoadAdr := 134514420 + 1024; |
1779 | LoadAdr := 134514420 + 1024; |
1774 | INC(gsize, 1024) |
1780 | INC(gsize, 1024) |
1775 | END; |
1781 | END; |
Line 1924... | Line 1930... | ||
1924 | 1930 | ||
1925 | PROCEDURE Epilog*(gsize: INTEGER; FName: ARRAY OF CHAR; stk: INTEGER); |
1931 | PROCEDURE Epilog*(gsize: INTEGER; FName: ARRAY OF CHAR; stk: INTEGER); |
1926 | VAR i, glob: INTEGER; |
1932 | VAR i, glob: INTEGER; |
1927 | BEGIN |
1933 | BEGIN |
- | 1934 | glob := 0; |
|
- | 1935 | IF gsize < maxstrlen THEN |
|
- | 1936 | gsize := maxstrlen |
|
1928 | glob := 0; |
1937 | END; |
1929 | gsize := Align(gsize, 4) + 4; |
1938 | gsize := Align(gsize, 4) + 4; |
1930 | COPY(FName, OutFile); |
1939 | COPY(FName, OutFile); |
1931 | Labels[RTABLE] := -dcount; |
1940 | Labels[RTABLE] := -dcount; |
1932 | dataint(recarray[0]); |
1941 | dataint(recarray[0]); |
Line 1983... | Line 1992... | ||
1983 | END |
1992 | END |
1984 | END; |
1993 | END; |
1985 | FixLabels(FName, stk, gsize, glob) |
1994 | FixLabels(FName, stk, gsize, glob) |
1986 | END Epilog; |
1995 | END Epilog; |
Line -... | Line 1996... | ||
- | 1996 | ||
- | 1997 | PROCEDURE setkem*; |
|
- | 1998 | BEGIN |
|
- | 1999 | kem := TRUE |
|
- | 2000 | END setkem; |
|
- | 2001 | ||
- | 2002 | BEGIN |
|
1987 | 2003 | kem := FALSE |
|
1988 | END X86.>=>=>=>>>=>>=>=>>>>>>=> |
2004 | END X86.>>=>=>=>>>=>>=>=>>>>>>=> |