Add BTX startup/interface code.
This commit is contained in:
parent
49ee7af69e
commit
4cbf0238eb
|
@ -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>
|
||||
|
|
|
@ -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>
|
|
@ -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
|
|
@ -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
|
|
@ -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_ */
|
|
@ -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
|
Loading…
Reference in New Issue