Commit Graph

37 Commits

Author SHA1 Message Date
nickysn
46b82e3208 + added the necessary changes for section based smartlinking to the msdos
startup code, behind ifdef __I8086_SMARTLINK_SECTIONS__

git-svn-id: trunk@39278 -
2018-06-22 15:42:19 +00:00
pierre
ba7586a5c8 Fix for FPU generated exception as interrupt 0x10, contributed by Max Nazhalov
git-svn-id: trunk@36813 -
2017-07-29 11:50:21 +00:00
pierre
963d109331 Add two word variables to store fpu control and status register in interrupt 0x10
git-svn-id: trunk@36653 -
2017-07-05 22:03:27 +00:00
pierre
8a7de4a4d3 Add calls to FPC_HANDLE_I8086_ERROR and add handlers for interrupt $10 and $75
git-svn-id: trunk@36271 -
2017-05-19 22:06:37 +00:00
nickysn
1264eaf8c6 * fixed "nil pointer assignment" error in huge memory model
git-svn-id: trunk@31502 -
2015-09-03 22:37:01 +00:00
nickysn
63f86ee6a5 + huge memory model fixes in the i8086-msdos startup code
git-svn-id: trunk@31501 -
2015-09-03 22:08:53 +00:00
nickysn
4061628ffb * the i8086-msdos default code segment (in near code memory models) renamed
'_TEXT'. This name is used in object modules, produced by Borland C and Open
  Watcom.

git-svn-id: trunk@31482 -
2015-09-02 13:14:12 +00:00
nickysn
a3dd5c7c17 * set stack alignment to 16 in the msdos startup code
git-svn-id: trunk@31397 -
2015-08-24 19:58:08 +00:00
nickysn
5dc42404cf * capitalize omf segment class names, as that's how other 16-bit compilers write them
git-svn-id: trunk@31371 -
2015-08-22 19:07:04 +00:00
nickysn
1643c5f073 * also capitalize 'DGROUP' in the msdos startup code as well after r31369
git-svn-id: trunk@31370 -
2015-08-22 18:56:36 +00:00
nickysn
536346a441 * use 'dw' instead of 'dd' to reference the stack, in order to prevent nasm from
generating a 32-bit fixup record

git-svn-id: trunk@31353 -
2015-08-20 21:51:23 +00:00
nickysn
3ee0fc22d9 * use 'dw' instead of 'dd' to reference the heap from the i8086-msdos startup
code, because 'dd' causes nasm to emit a 32-bit OMF relocation entry, which
  we won't support (at least initially) in our internal linker

git-svn-id: trunk@31345 -
2015-08-19 14:33:56 +00:00
nickysn
5a1ce6162b * set the bss, rodata and rodata_norel section alignment to 2 bytes for the i8086-msdos target
git-svn-id: trunk@30680 -
2015-04-20 01:27:26 +00:00
nickysn
8edfd33af8 * use RegisterTinyHeapBlock_Simple_Prealigned in the msdos rtl
git-svn-id: trunk@28652 -
2014-09-13 19:55:55 +00:00
nickysn
7958466ef9 * on i8086-msdos, in the compact and large memory models, set the end of heap to
be the end of the current program's MCB, instead of 16 bytes earlier

git-svn-id: trunk@28442 -
2014-08-18 13:54:20 +00:00
nickysn
a61c775d29 + enabled the huge (>64kb) heap support in the compact and large memory models
git-svn-id: trunk@28349 -
2014-08-08 23:32:12 +00:00
nickysn
f7dd4f640a - rm the 'Memory allocation error' and 'Not enough memory' error messages from
the compact and large model startup code, since they're not used (we rely on
  the DOS loader to check for the available memory instead)

git-svn-id: trunk@28069 -
2014-06-25 23:16:55 +00:00
nickysn
ba5ececab9 * i8086 far data memory model fixes in the int 0 (div by zero) handler
git-svn-id: trunk@28062 -
2014-06-25 16:46:58 +00:00
nickysn
e7e02467fc * fixed bug in MsDos and Intr in i8086 far data memory models not cleaning their
parameters from the stack properly (leaving an extra word on the stack)

git-svn-id: trunk@28059 -
2014-06-25 12:33:03 +00:00
nickysn
23b0cf2340 * msdos system unit variable dos_psp renamed PrefixSeg for TP7 compatibility
git-svn-id: trunk@28047 -
2014-06-24 10:58:59 +00:00
nickysn
1910177cf0 + added heapmax support to the $M directive on i8086-msdos. It is currently
only implemented in the near data memory models. The far data models support
  is still a TODO.

git-svn-id: trunk@28039 -
2014-06-23 20:17:17 +00:00
nickysn
95449a3fd4 * fixed yet another dos_psp<>dgroup bug in the startup code for .exe files in
the tiny memory model

git-svn-id: trunk@28033 -
2014-06-22 20:12:55 +00:00
nickysn
3164a10d9d * fixed a bug in the startup code for tiny memory model, which caused the
program MCB address not to be calculated correctly, when the program is a tiny
  model .exe file, leading to possible memory corruption. Previously, the code
  assumed that dos_psp=CS, but that's only true for tiny .com files; tiny .exe
  files have a 256-byte gap between dos_psp and CS.

git-svn-id: trunk@28032 -
2014-06-22 11:06:57 +00:00
nickysn
cd6b15f49a * slight optimization to the small and medium model startup code
git-svn-id: trunk@28031 -
2014-06-22 09:42:30 +00:00
nickysn
1295b4abf7 - removed the call to CheckNullArea from the exit code for the tiny memory model
git-svn-id: trunk@28006 -
2014-06-19 21:47:46 +00:00
nickysn
7cfd7a66cd + create a special 'heap' segment with reserved space equal to heapsize (i.e.
the value set by -Ch or the second parameter to the $M directive). This is
  equivalent to the heapmin value in Turbo Pascal 7 and ensures that the program
  has at least this amount of heap space available (otherwise DOS will show a
  'not enough memory' error and will refuse to load the program).

git-svn-id: trunk@28002 -
2014-06-19 14:14:01 +00:00
nickysn
2dc8839af5 * set class=data to all data segments/sections on i8086
git-svn-id: trunk@27957 -
2014-06-14 16:01:22 +00:00
nickysn
8ad63788c7 - do not emit a stack segment in the tiny memory model
- rm the reference to the top of the stack segment from the startup code in tiny
  model

git-svn-id: trunk@27956 -
2014-06-14 15:56:44 +00:00
nickysn
73d7f2aa18 * let the compiler generate the stack segment in i8086 near data memory models
as well. Even though, in these models, the stack is dynamically allocated
  (because it goes on top of the heap, but the heap is variable size), there are
  still benefits:
  1) the program will run on a larger stack during initialization, before the
     actual stack (and heap) are ready
  2) in cases, when the system is extremely low on memory, DOS will reject to
     load the program if there's not enough memory for the stack the program
     requires. This way the startup code can be further simplified by omitting
     the 'not enough memory' check in the future (when we add the minimum heap
     size to the executable reserved space as well).

git-svn-id: trunk@27903 -
2014-06-08 21:14:57 +00:00
nickysn
d4565aeec2 * in i8086 far data memory models add reference to the beginning of stack from
the startup code, so the object module, containing the stack segment doesn't
  get smartlinked away

git-svn-id: trunk@27824 -
2014-05-29 14:57:48 +00:00
nickysn
3cc8ff11e3 + generate the stack segment for i8086 far data memory models from within fpc
itself (instead of having a fixed 16k stack in the startup code). This allows
  setting the stack size in these models with the -Cs option.

git-svn-id: trunk@27820 -
2014-05-27 23:29:50 +00:00
nickysn
e4d4dd9d81 * replaced tabs with spaces, fixes identation
git-svn-id: trunk@27419 -
2014-04-01 12:46:46 +00:00
nickysn
85c6ffa102 * setup a true far data memory layout in the compact and large models with
stack, heap and static data being all in different segments

git-svn-id: trunk@27418 -
2014-03-31 22:03:48 +00:00
nickysn
e4437bcd51 + initialize the segment of __stktop, __stkbottom, __nearheap_start and
__nearheap_end in i8086 far data memory models.
+ 'Hello world!' now works in the i8086 compact and large memory models!

git-svn-id: trunk@27377 -
2014-03-30 15:32:44 +00:00
nickysn
4eeff66922 + compact and large memory model support added to the MsDos and Intr procedures
git-svn-id: trunk@27354 -
2014-03-29 21:28:57 +00:00
nickysn
25be2bc720 * define macros identifying the code and data model in each of the memory models
git-svn-id: trunk@27263 -
2014-03-24 14:02:57 +00:00
nickysn
f4c463b6bd * prt0stm.asm renamed prt0comn.asm, as it will probably be used as the common
startup code for all memory models and not just for small, tiny and medium

git-svn-id: trunk@27261 -
2014-03-24 13:23:36 +00:00