summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrnordier <rnordier@FreeBSD.org>1998-09-14 10:37:00 +0000
committerrnordier <rnordier@FreeBSD.org>1998-09-14 10:37:00 +0000
commit71b1c34d38c3eca29c63a9c1fef53ea17e309fa4 (patch)
tree8ee7f97a5fa8afbf841ecf3d7a8a87651c9c9c03
parentefe6cafb5de5d87d7ed69ddd998cbc6d33de913b (diff)
downloadFreeBSD-src-71b1c34d38c3eca29c63a9c1fef53ea17e309fa4.zip
FreeBSD-src-71b1c34d38c3eca29c63a9c1fef53ea17e309fa4.tar.gz
Add BTX startup/interface code.
-rw-r--r--sys/boot/i386/btx/Makefile4
-rw-r--r--sys/boot/i386/btx/lib/Makefile16
-rw-r--r--sys/boot/i386/btx/lib/btxcsu.s42
-rw-r--r--sys/boot/i386/btx/lib/btxsys.s40
-rw-r--r--sys/boot/i386/btx/lib/btxv86.h53
-rw-r--r--sys/boot/i386/btx/lib/btxv86.s82
6 files changed, 235 insertions, 2 deletions
diff --git a/sys/boot/i386/btx/Makefile b/sys/boot/i386/btx/Makefile
index 3e2ea39..2da29d0 100644
--- a/sys/boot/i386/btx/Makefile
+++ b/sys/boot/i386/btx/Makefile
@@ -1,5 +1,5 @@
-# $Id: Makefile,v 1.1.1.1 1998/09/12 04:29:22 rnordier Exp $
+# $Id: Makefile,v 1.2 1998/09/12 06:30:10 rnordier Exp $
-SUBDIR= btx btxldr
+SUBDIR= btx btxldr lib
.include <bsd.subdir.mk>
diff --git a/sys/boot/i386/btx/lib/Makefile b/sys/boot/i386/btx/lib/Makefile
new file mode 100644
index 0000000..2ab34fd
--- /dev/null
+++ b/sys/boot/i386/btx/lib/Makefile
@@ -0,0 +1,16 @@
+# $Id:$
+
+OBJS= btxcsu.o btxsys.o btxv86.o
+LDFLAGS+= -elf
+CLEANFILES+= crt0.o
+INTERNALLIB= true
+NOMAN= true
+NOPIC= true
+NOPROFILE= true
+
+all: crt0.o
+
+crt0.o: ${OBJS}
+ ${LD} ${LDFLAGS} -i -o ${.TARGET} ${OBJS}
+
+.include <bsd.lib.mk>
diff --git a/sys/boot/i386/btx/lib/btxcsu.s b/sys/boot/i386/btx/lib/btxcsu.s
new file mode 100644
index 0000000..daff6cf
--- /dev/null
+++ b/sys/boot/i386/btx/lib/btxcsu.s
@@ -0,0 +1,42 @@
+#
+# Copyright (c) 1998 Robert Nordier
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms are freely
+# permitted provided that the above copyright notice and this
+# paragraph and the following disclaimer are duplicated in all
+# such forms.
+#
+# This software is provided "AS IS" and without any express or
+# implied warranties, including, without limitation, the implied
+# warranties of merchantability and fitness for a particular
+# purpose.
+#
+
+# $Id:$
+
+#
+# BTX C startup code (ELF).
+#
+
+#
+# Globals.
+#
+ .global _start
+#
+# Constants.
+#
+ .set ARGSIZ,0x60 # Size of arguments
+#
+# Client entry point.
+#
+_start: movl %eax,__base # Set base address
+ subl $ARGSIZ,%esp # Set argument
+ movl %esp,__args # pointer
+ call main # Invoke client main()
+ call exit # Invoke client exit()
+#
+# Data.
+#
+ .comm __base,4 # Client base address
+ .comm __args,4 # Client arguments
diff --git a/sys/boot/i386/btx/lib/btxsys.s b/sys/boot/i386/btx/lib/btxsys.s
new file mode 100644
index 0000000..16e3228
--- /dev/null
+++ b/sys/boot/i386/btx/lib/btxsys.s
@@ -0,0 +1,40 @@
+#
+# Copyright (c) 1998 Robert Nordier
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms are freely
+# permitted provided that the above copyright notice and this
+# paragraph and the following disclaimer are duplicated in all
+# such forms.
+#
+# This software is provided "AS IS" and without any express or
+# implied warranties, including, without limitation, the implied
+# warranties of merchantability and fitness for a particular
+# purpose.
+#
+
+# $Id:$
+
+#
+# BTX system calls.
+#
+
+#
+# Globals.
+#
+ .global __exit
+ .global __exec
+#
+# Constants.
+#
+ .set INT_SYS,0x30 # Interrupt number
+#
+# System call: exit
+#
+__exit: xorl %eax,%eax # BTX system
+ int $INT_SYS # call 0x0
+#
+# System call: exec
+#
+__exec: movl $0x1,%eax # BTX system
+ int $INT_SYS # call 0x1
diff --git a/sys/boot/i386/btx/lib/btxv86.h b/sys/boot/i386/btx/lib/btxv86.h
new file mode 100644
index 0000000..70c2187
--- /dev/null
+++ b/sys/boot/i386/btx/lib/btxv86.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 1998 Robert Nordier
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are freely
+ * permitted provided that the above copyright notice and this
+ * paragraph and the following disclaimer are duplicated in all
+ * such forms.
+ *
+ * This software is provided "AS IS" and without any express or
+ * implied warranties, including, without limitation, the implied
+ * warranties of merchantability and fitness for a particular
+ * purpose.
+ */
+
+/*
+ * $Id:$
+ */
+
+#ifndef _BTXV86_H_
+#define _BTXV86_H_
+
+#include <sys/types.h>
+
+#define V86_ADDR 0x10000 /* Segment:offset address */
+#define V86_CALLF 0x20000 /* Emulate far call */
+#define V86_FLAGS 0x40000 /* Return flags */
+
+struct __v86 {
+ uint32_t ctl; /* Control flags */
+ uint32_t addr; /* Interrupt number or address */
+ uint32_t es; /* V86 ES register */
+ uint32_t ds; /* V86 DS register */
+ uint32_t fs; /* V86 FS register */
+ uint32_t gs; /* V86 GS register */
+ uint32_t eax; /* V86 EAX register */
+ uint32_t ecx; /* V86 ECX register */
+ uint32_t edx; /* V86 EDX register */
+ uint32_t ebx; /* V86 EBX register */
+ uint32_t efl; /* V86 eflags register */
+ uint32_t ebp; /* V86 EBP register */
+ uint32_t esi; /* V86 ESI register */
+ uint32_t edi; /* V86 EDI register */
+};
+
+extern struct __v86 __v86; /* V86 interface structure */
+
+void __exit(int);
+void __exec(caddr_t, ...);
+
+void __v86int(void);
+
+#endif /* !_BTXV86_H_ */
diff --git a/sys/boot/i386/btx/lib/btxv86.s b/sys/boot/i386/btx/lib/btxv86.s
new file mode 100644
index 0000000..b67e873
--- /dev/null
+++ b/sys/boot/i386/btx/lib/btxv86.s
@@ -0,0 +1,82 @@
+#
+# Copyright (c) 1998 Robert Nordier
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms are freely
+# permitted provided that the above copyright notice and this
+# paragraph and the following disclaimer are duplicated in all
+# such forms.
+#
+# This software is provided "AS IS" and without any express or
+# implied warranties, including, without limitation, the implied
+# warranties of merchantability and fitness for a particular
+# purpose.
+#
+
+# $Id:$
+
+#
+# BTX V86 interface.
+#
+
+#
+# Globals.
+#
+ .global __v86int
+#
+# Fields in V86 interface structure.
+#
+ .set V86_CTL,0x0 # Control flags
+ .set V86_ADDR,0x4 # Int number/address
+ .set V86_ES,0x8 # V86 ES
+ .set V86_DS,0xc # V86 DS
+ .set V86_FS,0x10 # V86 FS
+ .set V86_GS,0x14 # V86 GS
+ .set V86_EAX,0x18 # V86 EAX
+ .set V86_ECX,0x1c # V86 ECX
+ .set V86_EDX,0x20 # V86 EDX
+ .set V86_EBX,0x24 # V86 EBX
+ .set V86_EFL,0x28 # V86 eflags
+ .set V86_EBP,0x2c # V86 EBP
+ .set V86_ESI,0x30 # V86 ESI
+ .set V86_EDI,0x34 # V86 EDI
+#
+# Other constants.
+#
+ .set INT_V86,0x31 # Interrupt number
+ .set SIZ_V86,0x38 # Size of V86 structure
+#
+# V86 interface function.
+#
+__v86int: pushl $__v86 # Push pointer
+ call __v86_swap # Load V86 registers
+ int $INT_V86 # To BTX
+ call __v86_swap # Load user registers
+ addl $0x4,%esp # Discard pointer
+ ret # To user
+#
+# Swap V86 and user registers.
+#
+__v86_swap: xchgl %ebp,0x4(%esp,1) # Swap pointer, EBP
+ xchgl %eax,V86_EAX(%ebp) # Swap EAX
+ xchgl %ecx,V86_ECX(%ebp) # Swap ECX
+ xchgl %edx,V86_EDX(%ebp) # Swap EDX
+ xchgl %ebx,V86_EBX(%ebp) # Swap EBX
+ pushl %eax # Save
+ pushf # Put eflags
+ popl %eax # in EAX
+ xchgl %eax,V86_EFL(%ebp) # Swap
+ pushl %eax # Put EAX
+ popf # in eflags
+ movl 0x8(%esp,1),%eax # Load EBP
+ xchgl %eax,V86_EBP(%ebp) # Swap
+ movl %eax,0x8(%esp,1) # Save EBP
+ popl %eax # Restore
+ xchgl %esi,V86_ESI(%ebp) # Swap ESI
+ xchgl %edi,V86_EDI(%ebp) # Swap EDI
+ xchgl %ebp,0x4(%esp,1) # Swap pointer, EBP
+ ret # To caller
+#
+# V86 interface structure.
+#
+ .comm __v86,SIZ_V86
OpenPOWER on IntegriCloud