From cd5255c1474327e50b6bdaa634b40aec77daa89a Mon Sep 17 00:00:00 2001 From: nickysn Date: Sat, 8 Jun 2013 22:41:43 +0000 Subject: [PATCH] + added startup code for the medium memory model git-svn-id: trunk@24820 - --- .gitattributes | 3 +- rtl/msdos/Makefile | 152 +++++++++++++------------- rtl/msdos/Makefile.fpc | 8 +- rtl/msdos/prt0m.asm | 3 + rtl/msdos/prt0s.asm | 2 +- rtl/msdos/{prt0st.asm => prt0stm.asm} | 34 +++++- rtl/msdos/prt0t.asm | 2 +- 7 files changed, 119 insertions(+), 85 deletions(-) create mode 100644 rtl/msdos/prt0m.asm rename rtl/msdos/{prt0st.asm => prt0stm.asm} (87%) diff --git a/.gitattributes b/.gitattributes index 9428c7042b..8c0d33d414 100644 --- a/.gitattributes +++ b/.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 diff --git a/rtl/msdos/Makefile b/rtl/msdos/Makefile index 2ff2677c81..0e40778223 100644 --- a/rtl/msdos/Makefile +++ b/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 diff --git a/rtl/msdos/Makefile.fpc b/rtl/msdos/Makefile.fpc index 447d8db2dc..1672e28d8d 100644 --- a/rtl/msdos/Makefile.fpc +++ b/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) # diff --git a/rtl/msdos/prt0m.asm b/rtl/msdos/prt0m.asm new file mode 100644 index 0000000000..29a35583fe --- /dev/null +++ b/rtl/msdos/prt0m.asm @@ -0,0 +1,3 @@ +; nasm -f obj -o prt0m.o prt0m.asm +%define __MEDIUM__ +%include "prt0stm.asm" diff --git a/rtl/msdos/prt0s.asm b/rtl/msdos/prt0s.asm index 3188c6221c..7baeff8ee4 100644 --- a/rtl/msdos/prt0s.asm +++ b/rtl/msdos/prt0s.asm @@ -1,3 +1,3 @@ ; nasm -f obj -o prt0s.o prt0s.asm %define __SMALL__ -%include "prt0st.asm" +%include "prt0stm.asm" diff --git a/rtl/msdos/prt0st.asm b/rtl/msdos/prt0stm.asm similarity index 87% rename from rtl/msdos/prt0st.asm rename to rtl/msdos/prt0stm.asm index 1fcd7abd19..f4a7d3519a 100644 --- a/rtl/msdos/prt0st.asm +++ b/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: diff --git a/rtl/msdos/prt0t.asm b/rtl/msdos/prt0t.asm index efa68d304e..46bcf0c944 100644 --- a/rtl/msdos/prt0t.asm +++ b/rtl/msdos/prt0t.asm @@ -1,3 +1,3 @@ ; nasm -f obj -o prt0t.o prt0t.asm %define __TINY__ -%include "prt0st.asm" +%include "prt0stm.asm"