Parcourir la source

+ added startup code for the medium memory model

git-svn-id: trunk@24820 -
nickysn il y a 12 ans
Parent
commit
cd5255c147
7 fichiers modifiés avec 119 ajouts et 85 suppressions
  1. 2 1
      .gitattributes
  2. 77 75
      rtl/msdos/Makefile
  3. 5 3
      rtl/msdos/Makefile.fpc
  4. 3 0
      rtl/msdos/prt0m.asm
  5. 1 1
      rtl/msdos/prt0s.asm
  6. 30 4
      rtl/msdos/prt0stm.asm
  7. 1 1
      rtl/msdos/prt0t.asm

+ 2 - 1
.gitattributes

@@ -8262,8 +8262,9 @@ rtl/msdos/crt.pp svneol=native#text/plain
 rtl/msdos/dos.pp svneol=native#text/plain
 rtl/msdos/msmouse.pp svneol=native#text/plain
 rtl/msdos/ports.pp svneol=native#text/plain
+rtl/msdos/prt0m.asm svneol=native#text/plain
 rtl/msdos/prt0s.asm svneol=native#text/plain
-rtl/msdos/prt0st.asm svneol=native#text/plain
+rtl/msdos/prt0stm.asm svneol=native#text/plain
 rtl/msdos/prt0t.asm svneol=native#text/plain
 rtl/msdos/registers.inc svneol=native#text/plain
 rtl/msdos/sysdir.inc svneol=native#text/plain

+ 77 - 75
rtl/msdos/Makefile

@@ -556,223 +556,223 @@ ifeq ($(FULL_TARGET),i8086-msdos)
 override TARGET_UNITS+=system uuchar objpas strings dos crt heaptrc lineinfo sysconst sysutils math macpas iso7185 rtlconst typinfo varutils variants types dateutil convutil strutils stdconvs matrix ucomplex getopts fgl classes objects msmouse ports
 endif
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-nativent)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-iphonesim)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i386-android)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),powerpc-wii)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),powerpc-aix)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),x86_64-netbsd)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),x86_64-openbsd)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),arm-android)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),powerpc64-aix)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),mips-linux)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),mipsel-linux)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),jvm-java)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),jvm-android)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 ifeq ($(FULL_TARGET),i8086-msdos)
-override TARGET_LOADERS+=prt0s prt0t # exceptn fpu
+override TARGET_LOADERS+=prt0s prt0t prt0m # exceptn fpu
 endif
 override INSTALL_FPCPACKAGE=y
 ifeq ($(FULL_TARGET),i386-linux)
@@ -2391,10 +2391,12 @@ SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES))
 include $(PROCINC)/makefile.cpu
 SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES))
 SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS)
-prt0s$(OEXT) : prt0s.asm prt0st.asm
+prt0s$(OEXT) : prt0s.asm prt0stm.asm
 	nasm -f obj -o $(UNITTARGETDIRPREFIX)prt0s$(OEXT) prt0s.asm
-prt0t$(OEXT) : prt0t.asm prt0st.asm
+prt0t$(OEXT) : prt0t.asm prt0stm.asm
 	nasm -f obj -o $(UNITTARGETDIRPREFIX)prt0t$(OEXT) prt0t.asm
+prt0m$(OEXT) : prt0m.asm prt0stm.asm
+	nasm -f obj -o $(UNITTARGETDIRPREFIX)prt0m$(OEXT) prt0m.asm
 system$(PPUEXT) : system.pp $(SYSDEPS)
 	$(COMPILER) -Us -Sg system.pp
 uuchar$(PPUEXT): $(SYSTEMUNIT)$(PPUEXT) $(INC)/uuchar.pp

+ 5 - 3
rtl/msdos/Makefile.fpc

@@ -4,7 +4,7 @@
 [package]
 main=rtl
 [target]
-loaders=prt0s prt0t # exceptn fpu
+loaders=prt0s prt0t prt0m # exceptn fpu
 units=system uuchar objpas strings dos crt heaptrc lineinfo sysconst sysutils \
       math macpas iso7185 rtlconst typinfo varutils variants types dateutil \
       convutil strutils stdconvs matrix ucomplex getopts fgl classes objects \
@@ -62,10 +62,12 @@ SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS)
 #
 # Loaders
 #
-prt0s$(OEXT) : prt0s.asm prt0st.asm
+prt0s$(OEXT) : prt0s.asm prt0stm.asm
         nasm -f obj -o $(UNITTARGETDIRPREFIX)prt0s$(OEXT) prt0s.asm
-prt0t$(OEXT) : prt0t.asm prt0st.asm
+prt0t$(OEXT) : prt0t.asm prt0stm.asm
         nasm -f obj -o $(UNITTARGETDIRPREFIX)prt0t$(OEXT) prt0t.asm
+prt0m$(OEXT) : prt0m.asm prt0stm.asm
+        nasm -f obj -o $(UNITTARGETDIRPREFIX)prt0m$(OEXT) prt0m.asm
 #
 # System Units (System, Objpas, Strings)
 #

+ 3 - 0
rtl/msdos/prt0m.asm

@@ -0,0 +1,3 @@
+; nasm -f obj -o prt0m.o prt0m.asm
+%define __MEDIUM__
+%include "prt0stm.asm"

+ 1 - 1
rtl/msdos/prt0s.asm

@@ -1,3 +1,3 @@
 ; nasm -f obj -o prt0s.o prt0s.asm
 %define __SMALL__
-%include "prt0st.asm"
+%include "prt0stm.asm"

+ 30 - 4
rtl/msdos/prt0st.asm → rtl/msdos/prt0stm.asm

@@ -1,4 +1,16 @@
-; common startup code for the SMALL and TINY memory models
+; common startup code for the SMALL, TINY and MEDIUM memory models
+
+%ifdef __MEDIUM__
+        %define __FAR_CODE__
+%else
+        %define __NEAR_CODE__
+%endif
+
+%ifdef __FAR_CODE__
+        extra_param_offset equ 2
+%else
+        extra_param_offset equ 0
+%endif
 
         cpu 8086
 
@@ -112,7 +124,11 @@ skip_mem_realloc:
         dec bx
         mov word [__nearheap_end], bx
 
+%ifdef __FAR_CODE__
+        jmp far PASCALMAIN
+%else
         jmp PASCALMAIN
+%endif
 
 not_enough_mem:
         mov dx, not_enough_mem_msg
@@ -133,17 +149,23 @@ FPC_MSDOS_CARRY:
 FPC_MSDOS:
         mov al, 21h  ; not ax, because only the low byte is used
         pop dx
+%ifdef __FAR_CODE__
+        pop bx
+%endif
         pop cx
         push ax
         push cx
+%ifdef __FAR_CODE__
+        push bx
+%endif
         push dx
         global FPC_INTR
 FPC_INTR:
         push bp
         mov bp, sp
-        mov al, byte [ss:bp + 6]
+        mov al, byte [ss:bp + 6 + extra_param_offset]
         mov byte [cs:int_number], al
-        mov si, [ss:bp + 4]
+        mov si, [ss:bp + 4 + extra_param_offset]
         push ds
         mov ax, word [si + 16]
         mov es, ax
@@ -169,7 +191,7 @@ int_number:
         mov bp, sp
         mov si, word [ss:bp + 8]
         mov ds, si
-        mov si, word [ss:bp + 14]
+        mov si, word [ss:bp + 14 + extra_param_offset]
         mov word [si], ax
         mov word [si + 2], bx
         mov word [si + 4], cx
@@ -188,7 +210,11 @@ int_number:
         
         pop ds
         pop bp
+%ifdef __FAR_CODE__
+        retf 4
+%else
         ret 4
+%endif
 
         segment data
 mem_realloc_err_msg:

+ 1 - 1
rtl/msdos/prt0t.asm

@@ -1,3 +1,3 @@
 ; nasm -f obj -o prt0t.o prt0t.asm
 %define __TINY__
-%include "prt0st.asm"
+%include "prt0stm.asm"