+ added startup code for the medium memory model

git-svn-id: trunk@24820 -
This commit is contained in:
nickysn 2013-06-08 22:41:43 +00:00
parent 5966cc088d
commit cd5255c147
7 changed files with 119 additions and 85 deletions

3
.gitattributes vendored
View File

@ -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

View File

@ -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

View File

@ -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
rtl/msdos/prt0m.asm Normal file
View File

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

View File

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

View File

@ -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:

View File

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