mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-11 15:26:04 +02:00
+ Implemented nwpre and prelude in assembler, now working like the original nwpre
This commit is contained in:
parent
ff81bf5345
commit
071ee9bfd8
@ -4,16 +4,17 @@
|
|||||||
UNITDIR = $(INSTALL_PREFIX)/usr/lib/fpc/1.1/units/netware/rtl
|
UNITDIR = $(INSTALL_PREFIX)/usr/lib/fpc/1.1/units/netware/rtl
|
||||||
#PPC386OPT = -n -dMT -dDEBUG_MT -di386 -dSYSTEMDEBUG -O3 -Sg -Tnetware -Aelf -a -al -gg -FE.
|
#PPC386OPT = -n -dMT -dDEBUG_MT -di386 -dSYSTEMDEBUG -O3 -Sg -Tnetware -Aelf -a -al -gg -FE.
|
||||||
#PPC386OPT = -n -di386 -dSYSTEMDEBUG -O3 -Sg -Tnetware -Aelf -a -al -gg -FE.
|
#PPC386OPT = -n -di386 -dSYSTEMDEBUG -O3 -Sg -Tnetware -Aelf -a -al -gg -FE.
|
||||||
PPC386OPT = -n -di386 -O3 -Sg -Tnetware -Aelf -a -al -FE.
|
PPC386OPT = -n -di386 -O3 -Og -Sg -Tnetware -Aelf -a -al -FE.
|
||||||
PPC386OPTDBG = -n -di386 -O3 -Sg -Tnetware -Aelf -a -al -gg -FE.
|
PPC386OPTDBG = -n -di386 -O3 -Sg -Tnetware -Aelf -a -al -gg -FE.
|
||||||
INCLUDES = -I../inc -I../i386 -I../objpas
|
INCLUDES = -I../inc -I../i386 -I../objpas
|
||||||
|
|
||||||
SYSUNIT=system
|
SYSUNIT=system
|
||||||
NWPRE=nwpre
|
NWPRE=nwpre
|
||||||
|
PRELUDE=prelude
|
||||||
OBJEXT=on
|
OBJEXT=on
|
||||||
PPUEXT=ppn
|
PPUEXT=ppn
|
||||||
ASMEXT=s
|
ASMEXT=s
|
||||||
OBJS = $(SYSUNIT).$(OBJEXT) $(NWPRE).$(OBJEXT) ../inc/os_types.$(OBJEXT) ../inc/strings.$(OBJEXT) dos.$(OBJEXT) ../objpas/objpas.$(OBJEXT) sysutils.$(OBJEXT) crt.$(OBJEXT) sockets.$(OBJEXT) mouse.$(OBJEXT) netware.$(OBJEXT) video.$(OBJEXT) keyboard.$(OBJEXT) ../objpas/math.$(OBJEXT) ../objpas/typinfo.$(OBJEXT) ../inc/objects.$(OBJEXT) ../inc/getopts.$(OBJEXT) ../inc/heaptrc.$(OBJEXT) varutils.$(OBJEXT) ../i386/cpu.$(OBJEXT) ../i386/mmx.$(OBJEXT) winsock2.$(OBJEXT)
|
OBJS = $(SYSUNIT).$(OBJEXT) $(NWPRE).$(OBJEXT) $(PRELUDE).$(OBJEXT) ../inc/os_types.$(OBJEXT) ../inc/strings.$(OBJEXT) dos.$(OBJEXT) ../objpas/objpas.$(OBJEXT) sysutils.$(OBJEXT) crt.$(OBJEXT) sockets.$(OBJEXT) mouse.$(OBJEXT) netware.$(OBJEXT) video.$(OBJEXT) keyboard.$(OBJEXT) ../objpas/math.$(OBJEXT) ../objpas/typinfo.$(OBJEXT) ../inc/objects.$(OBJEXT) ../inc/getopts.$(OBJEXT) ../inc/heaptrc.$(OBJEXT) varutils.$(OBJEXT) ../i386/cpu.$(OBJEXT) ../i386/mmx.$(OBJEXT) winsock2.$(OBJEXT)
|
||||||
|
|
||||||
|
|
||||||
all: $(OBJS)
|
all: $(OBJS)
|
||||||
@ -21,22 +22,25 @@ all: $(OBJS)
|
|||||||
$(SYSUNIT).$(OBJEXT): $(SYSUNIT).pp nwsys.inc
|
$(SYSUNIT).$(OBJEXT): $(SYSUNIT).pp nwsys.inc
|
||||||
ppc386 -Us $(PPC386OPT) $(INCLUDES) $(SYSUNIT).pp
|
ppc386 -Us $(PPC386OPT) $(INCLUDES) $(SYSUNIT).pp
|
||||||
|
|
||||||
$(NWPRE).$(OBJEXT): $(NWPRE).pp
|
$(NWPRE).$(OBJEXT): $(NWPRE).as
|
||||||
ppc386 $(PPC386OPTDBG) $(INCLUDES) $(NWPRE).pp
|
as $(NWPRE).as -o $(NWPRE).$(OBJEXT)
|
||||||
|
|
||||||
|
$(PRELUDE).$(OBJEXT): $(NWPRE).as
|
||||||
|
as $(PRELUDE).as -o $(PRELUDE).$(OBJEXT)
|
||||||
|
|
||||||
%.$(OBJEXT): %.pp nwsys.inc
|
%.$(OBJEXT): %.pp nwsys.inc
|
||||||
ppc386 $(PPC386OPT) $(INCLUDES) $*.pp
|
ppc386 $(PPC386OPT) $(INCLUDES) $*.pp
|
||||||
|
|
||||||
install: $(OBJS)
|
install: $(OBJS)
|
||||||
|
rm -f $(UNITDIR)/*
|
||||||
cp -f $(SYSUNIT).$(OBJEXT) $(UNITDIR)
|
cp -f $(SYSUNIT).$(OBJEXT) $(UNITDIR)
|
||||||
cp -f $(SYSUNIT).$(PPUEXT) $(UNITDIR)
|
cp -f $(SYSUNIT).$(PPUEXT) $(UNITDIR)
|
||||||
cp -f dos.$(OBJEXT) $(UNITDIR)
|
cp -f dos.$(OBJEXT) $(UNITDIR)
|
||||||
cp -f dos.$(PPUEXT) $(UNITDIR)
|
cp -f dos.$(PPUEXT) $(UNITDIR)
|
||||||
cp -f strings.$(OBJEXT) $(UNITDIR)
|
cp -f strings.$(OBJEXT) $(UNITDIR)
|
||||||
cp -f strings.$(PPUEXT) $(UNITDIR)
|
cp -f strings.$(PPUEXT) $(UNITDIR)
|
||||||
cp -f nwpre.$(OBJEXT) $(UNITDIR)
|
cp -f $(NWPRE).$(OBJEXT) $(UNITDIR)
|
||||||
cp -f nwpre.$(PPUEXT) $(UNITDIR)
|
cp -f $(PRELUDE).$(OBJEXT) $(UNITDIR)
|
||||||
cp -f sysutils.$(OBJEXT) $(UNITDIR)
|
cp -f sysutils.$(OBJEXT) $(UNITDIR)
|
||||||
cp -f sysutils.$(PPUEXT) $(UNITDIR)
|
cp -f sysutils.$(PPUEXT) $(UNITDIR)
|
||||||
cp -f objpas.$(OBJEXT) $(UNITDIR)
|
cp -f objpas.$(OBJEXT) $(UNITDIR)
|
||||||
@ -75,7 +79,7 @@ install: $(OBJS)
|
|||||||
cp -f nwimp/*.imp $(UNITDIR)
|
cp -f nwimp/*.imp $(UNITDIR)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.$(OBJEXT) *.$(PPUEXT) *.$(ASMEXT) *.bak
|
rm -f *.$(OBJEXT) *.$(PPUEXT) *.$(ASMEXT) *.bak *.rst *.a
|
||||||
|
|
||||||
dist:
|
dist:
|
||||||
clean
|
clean
|
||||||
|
@ -5,9 +5,12 @@ REM
|
|||||||
SET DEST=\compiler\fpc\units\netware
|
SET DEST=\compiler\fpc\units\netware
|
||||||
|
|
||||||
REM Compile and install system unit first
|
REM Compile and install system unit first
|
||||||
|
SET INC=-I../inc -I../i386 -I../objpas ../inc/strings.pp
|
||||||
|
SET OPT=-di386 -XX -O3 -Sg -Tnetware
|
||||||
|
|
||||||
del /Q *.ppn
|
del /Q *.ppn
|
||||||
del /Q *.on
|
del /Q *.on
|
||||||
ppc386 -di386 -XX -dSYSTEMDEBUG -O3 -Sg -Tnetware -FE. -I../inc -I../i386 -I../objpas ../inc/strings.pp
|
ppc386 %OPT% -dSYSTEMDEBUG -FE. %INC%
|
||||||
copy *.ppn %DEST%
|
copy *.ppn %DEST%
|
||||||
copy *.on %DEST%
|
copy *.on %DEST%
|
||||||
|
|
||||||
@ -15,16 +18,20 @@ REM copy the import files
|
|||||||
copy nwimp\*.imp %DEST%
|
copy nwimp\*.imp %DEST%
|
||||||
|
|
||||||
REM and build other stuff
|
REM and build other stuff
|
||||||
ppc386 -di386 -XX -O3 -Sg -Tnetware -FE. nwpre.pp
|
#ppc386 -di386 -XX -O3 -Sg -Tnetware -FE. nwpre.pp
|
||||||
ppc386 -di386 -XX -O3 -Sg -Tnetware -FE. -I../inc -I../i386 dos.pp
|
asw nwpre.as -o nwpre.on
|
||||||
ppc386 -di386 -XX -O3 -Sg -Tnetware -FE. -I../inc -I../i386 crt.pp
|
asw prelude.as -o prelude.on
|
||||||
ppc386 -di386 -XX -O3 -Sg -Tnetware -FE. -I../inc -I../i386 -I../objpas ../objpas/objpas.pp
|
|
||||||
ppc386 -di386 -XX -O3 -Sg -Tnetware -FE. -I../inc -I../i386 -I../objpas sysutils.pp
|
ppc386 %OPT% %INC% dos.pp
|
||||||
ppc386 -di386 -XX -O3 -Sg -Tnetware -FE. -I../inc -I../i386 keyboard.pp
|
ppc386 %OPT% %INC% crt.pp
|
||||||
ppc386 -di386 -XX -O3 -Sg -Tnetware -FE. -I../inc -I../i386 mouse.pp
|
ppc386 %OPT% %INC% ../objpas/objpas.pp
|
||||||
ppc386 -di386 -XX -O3 -Sg -Tnetware -FE. -I../inc -I../i386 video.pp
|
ppc386 %OPT% %INC% sysutils.pp
|
||||||
ppc386 -di386 -XX -O3 -Sg -Tnetware -FE. -I../inc -I../i386 sockets.pp
|
ppc386 %OPT% %INC% keyboard.pp
|
||||||
ppc386 -di386 -XX -O3 -Sg -Tnetware -FE. -I../inc -I../i386 netware.pp
|
ppc386 %OPT% %INC% mouse.pp
|
||||||
|
ppc386 %OPT% %INC% video.pp
|
||||||
|
ppc386 %OPT% %INC% sockets.pp
|
||||||
|
ppc386 %OPT% %INC% netware.pp
|
||||||
|
ppc386 %OPT% %INC% winsock2.pp
|
||||||
|
|
||||||
copy *.on %DEST%
|
copy *.on %DEST%
|
||||||
copy *.ppn %DEST%
|
copy *.ppn %DEST%
|
109
rtl/netware/nwpre.as
Normal file
109
rtl/netware/nwpre.as
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
# This file is part of the Free Pascal run time library.
|
||||||
|
# Copyright (c) 1999-2002 by the Free Pascal development team
|
||||||
|
# Copyright (c) 2002 Armin Diehl
|
||||||
|
#
|
||||||
|
# This is the (nwpre-like) startup code for netware
|
||||||
|
#
|
||||||
|
# See the file COPYING.FPC, included in this distribution,
|
||||||
|
# for details about the copyright.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
#
|
||||||
|
#**********************************************************************
|
||||||
|
|
||||||
|
.file "nwpre.as"
|
||||||
|
.text
|
||||||
|
|
||||||
|
#
|
||||||
|
# This is the main program (not loader) Entry-Point that will be called by netware
|
||||||
|
# it sets up the argc and argv and calls _nlm_main (in system.pp)
|
||||||
|
#
|
||||||
|
_pasStart_:
|
||||||
|
pushl $_nlm_main
|
||||||
|
call _SetupArgV_411
|
||||||
|
addl $4,%esp
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# this will be called by the loader, we pass the address of _pasStart_ and
|
||||||
|
# _kNLMInfo (needed by clib) and netware is doing the work
|
||||||
|
#
|
||||||
|
.globl _Prelude
|
||||||
|
_Prelude:
|
||||||
|
pushl %ebp
|
||||||
|
movl %esp,%ebp
|
||||||
|
pushl %edi
|
||||||
|
pushl %esi
|
||||||
|
pushl %ebx
|
||||||
|
movl 0x14(%ebp),%edi
|
||||||
|
movl 0x18(%ebp),%esi
|
||||||
|
movl 0x1c(%ebp),%ebx
|
||||||
|
movl 0x20(%ebp),%ecx
|
||||||
|
movl 0x28(%ebp),%eax
|
||||||
|
pushl $_pasStart_
|
||||||
|
pushl $_kNLMInfo
|
||||||
|
pushl %eax
|
||||||
|
movl 0x24(%ebp),%edx
|
||||||
|
pushl %edx
|
||||||
|
pushl %ecx
|
||||||
|
pushl %ebx
|
||||||
|
pushl %esi
|
||||||
|
pushl %edi
|
||||||
|
movl 0x10(%ebp),%edx
|
||||||
|
pushl %edx
|
||||||
|
movl 0xc(%ebp),%edx
|
||||||
|
pushl %edx
|
||||||
|
movl 0x8(%ebp),%edx
|
||||||
|
pushl %edx
|
||||||
|
call _StartNLM
|
||||||
|
test %eax,%eax
|
||||||
|
jne x1
|
||||||
|
xorl %eax,%eax # dont know why this is needed ?
|
||||||
|
x1:
|
||||||
|
lea 0xfffffff4(%ebp),%esp
|
||||||
|
popl %ebx
|
||||||
|
popl %esi
|
||||||
|
popl %edi
|
||||||
|
movl %ebp,%esp
|
||||||
|
popl %ebp
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# the global stop-function
|
||||||
|
#
|
||||||
|
.globl _Stop
|
||||||
|
_Stop:
|
||||||
|
pushl $0x5 # TERMINATE_BY_UNLOAD=0, TERMINATE_BY_EXTERNAL_THREAD=0
|
||||||
|
pushl $0x0
|
||||||
|
movl _kNLMInfo,%edx
|
||||||
|
pushl %edx
|
||||||
|
call _TerminateNLM
|
||||||
|
addl $0x0c,%esp
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
.data
|
||||||
|
# argc is defined in the novell nwpre, i assume it is not needed
|
||||||
|
#_argc:
|
||||||
|
# .long 0
|
||||||
|
|
||||||
|
# structure needed by clib
|
||||||
|
# kNLMInfoT =
|
||||||
|
# PACKED RECORD
|
||||||
|
# Signature : ARRAY [0..3] OF CHAR; // LONG 'NLMI'
|
||||||
|
# Flavor : LONGINT; // TRADINIONAL_FLAVOR = 0
|
||||||
|
# Version : LONGINT; // TRADINIONAL_VERSION = 0, LIBERTY_VERSION = 1
|
||||||
|
# LongDoubleSize : LONGINT; // gcc nwpre defines 12, watcom 8
|
||||||
|
# wchar_tSize : LONGINT;
|
||||||
|
# END;
|
||||||
|
|
||||||
|
_kNLMInfo:
|
||||||
|
.ascii "NLMI"
|
||||||
|
.long 0,1,8,2
|
||||||
|
|
99
rtl/netware/prelude.as
Normal file
99
rtl/netware/prelude.as
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
# This file is part of the Free Pascal run time library.
|
||||||
|
# Copyright (c) 1999-2002 by the Free Pascal development team
|
||||||
|
# Copyright (c) 2002 Armin Diehl
|
||||||
|
#
|
||||||
|
# This is the (prelude-like) startup code for netware before 4.11
|
||||||
|
#
|
||||||
|
# See the file COPYING.FPC, included in this distribution,
|
||||||
|
# for details about the copyright.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
#
|
||||||
|
#**********************************************************************
|
||||||
|
|
||||||
|
.file "nwpre.as"
|
||||||
|
.text
|
||||||
|
|
||||||
|
#
|
||||||
|
# This is the main program (not loader) Entry-Point that will be called by netware
|
||||||
|
# it sets up the argc and argv and calls _nlm_main (in system.pp)
|
||||||
|
# This version uses the old _SetupArgv and not the newer _SetupArvV_411
|
||||||
|
#
|
||||||
|
_pasStart_:
|
||||||
|
pushl $_nlm_main
|
||||||
|
call _SetupArgv
|
||||||
|
addl $4,%esp
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# this will be called by the loader, we pass the address of _pasStart_ and
|
||||||
|
# _NLMID (needed by clib) and netware is doing the work
|
||||||
|
#
|
||||||
|
.globl _Prelude
|
||||||
|
_Prelude:
|
||||||
|
pushl %ebp
|
||||||
|
movl %esp,%ebp
|
||||||
|
pushl %edi
|
||||||
|
pushl %esi
|
||||||
|
pushl %ebx
|
||||||
|
movl 0x14(%ebp),%edi
|
||||||
|
movl 0x18(%ebp),%esi
|
||||||
|
movl 0x1c(%ebp),%ebx
|
||||||
|
movl 0x20(%ebp),%ecx
|
||||||
|
movl 0x28(%ebp),%eax
|
||||||
|
pushl $_pasStart_
|
||||||
|
pushl $_NLMID
|
||||||
|
pushl %eax
|
||||||
|
movl 0x24(%ebp),%edx
|
||||||
|
pushl %edx
|
||||||
|
pushl %ecx
|
||||||
|
pushl %ebx
|
||||||
|
pushl %esi
|
||||||
|
pushl %edi
|
||||||
|
movl 0x10(%ebp),%edx
|
||||||
|
pushl %edx
|
||||||
|
movl 0xc(%ebp),%edx
|
||||||
|
pushl %edx
|
||||||
|
movl 0x8(%ebp),%edx
|
||||||
|
pushl %edx
|
||||||
|
call _StartNLM
|
||||||
|
test %eax,%eax
|
||||||
|
jne x1
|
||||||
|
xorl %eax,%eax # dont know why this is needed ?
|
||||||
|
x1:
|
||||||
|
lea 0xfffffff4(%ebp),%esp
|
||||||
|
popl %ebx
|
||||||
|
popl %esi
|
||||||
|
popl %edi
|
||||||
|
movl %ebp,%esp
|
||||||
|
popl %ebp
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# the global stop-function
|
||||||
|
#
|
||||||
|
.globl _Stop
|
||||||
|
_Stop:
|
||||||
|
pushl $0x5 # TERMINATE_BY_UNLOAD=0, TERMINATE_BY_EXTERNAL_THREAD=0
|
||||||
|
pushl $0x0
|
||||||
|
movl _NLMID,%edx
|
||||||
|
pushl %edx
|
||||||
|
call _TerminateNLM
|
||||||
|
addl $0x0c,%esp
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
.data
|
||||||
|
# argc is defined in the novell prelude, i assume it is not needed
|
||||||
|
#_argc:
|
||||||
|
# .long 0
|
||||||
|
|
||||||
|
_NLMID:
|
||||||
|
.long 0
|
||||||
|
|
Loading…
Reference in New Issue
Block a user